MilkyTracker-1.02.00/000077500000000000000000000000001324432207300142535ustar00rootroot00000000000000MilkyTracker-1.02.00/.editorconfig000066400000000000000000000001101324432207300167200ustar00rootroot00000000000000[*] indent_style = tab indent_size = 4 trim_trailing_whitespace = false MilkyTracker-1.02.00/.gitattributes000066400000000000000000000000141324432207300171410ustar00rootroot00000000000000* text=auto MilkyTracker-1.02.00/.gitignore000066400000000000000000000002551324432207300162450ustar00rootroot00000000000000# The build output folder build/ # Resources generated with docerator on OSX resources/pictures/docicons/osx/MilkyTracker-*.icns resources/pictures/docicons/osx/docerator/ MilkyTracker-1.02.00/.gitmodules000066400000000000000000000006201324432207300164260ustar00rootroot00000000000000[submodule "rtaudio"] path = src/submodules/rtaudio url = https://github.com/thestk/rtaudio.git branch = releases [submodule "lhasa"] path = src/submodules/lhasa url = https://github.com/fragglet/lhasa.git [submodule "zlib"] path = src/submodules/zlib url = https://github.com/madler/zlib.git [submodule "zziplib"] path = src/submodules/zziplib url = https://github.com/dwhinham/zziplib.git MilkyTracker-1.02.00/.travis.yml000066400000000000000000000033611324432207300163670ustar00rootroot00000000000000language: cpp git: submodules: true matrix: include: - os: linux dist: trusty sudo: required addons: apt: packages: - libjack-dev - librtmidi-dev - libsdl2-dev - libzzip-dev script: &cmake_build - mkdir build - pushd build - cmake -DCMAKE_OSX_DEPLOYMENT_TARGET=10.7 .. - cmake --build . - cpack - popd - os: osx before_install: - brew update - brew install xmlto - pushd resources/pictures/docicons/osx - wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/docerator/docerator-2.0.zip - unzip docerator-2.0.zip -d docerator - rm docerator-2.0.zip - /usr/bin/python genicons.py - popd script: *cmake_build deploy: skip_cleanup: true provider: releases api_key: secure: Vr2TAgHrYnMp95PUmGnzl3E2dMqBTe3E/JZZAInWC8Ifx1hCF0SI085svFg902kFhnZJhMFBukP/hNu6UAm/exTdAByks57Af9oJTCxrUIYhYs2sasKjmSKPjRD5rFB+zqZSlq/DKzQZTBZBYUn2w3f4otrbNB6vBayNgWMtKdEtS1GI6e9pxKQcvxJodi/4RNgws6l5sQ59aPSPGK0XnOSLu5HPGC4QLpdQVSw5/Rzn5Fcw3zPVYOs7ZV/t7ptmR7T+MjFSE7HBMJlUPflHWA+L3jjx8ngYkz+W0pNsXxomRQVCLhGlGo0F6EEijOt1TvLhqMTVWrMgNjK9pxlgZEMWTho8/44kLQ5ABGuqql+uhTtJXI4dLmrrSPnCDHvVd7j8cwQDptYvRaEhzZmxNAB+xhqWdMDzkL7DouRcFzuKWTCWPFablVDXElcODO+xqWcU62gO/xEww7Y1mC9GC5zpmOgA7198JxeIM/o5eiMsj1J24KK+2WJH3t65hqGNhRfHgoR24LfkylhU+MFEnM5ZQM/21IGfeA/bszKDitDfIuNMOCSQqiD/fIKFsqOrKRvMi5cp1XvHzQTIR5x+BWS6zQwQk0RCaM7d7FKTtT3w0cm0aNAD3f0MfdU3BKH9YG5DT5DNvsoP613bg50tVgarTX5PwNOosQU/rSysLIg= file_glob: true file: build/milkytracker-* on: tags: true MilkyTracker-1.02.00/AUTHORS000066400000000000000000000014301324432207300153210ustar00rootroot00000000000000Main Code: Peter "pailes" Barth Additional Code: Christopher "Deltafire" O'Neill (SDL ports, some features/bugfixes) Dale "d0pefish" Whinham (Cocoa & cmake port, some features/bugfixes) Julian "jua" Harnath (Haiku port) Antti S. Lankila (Amiga filter coefficients) Varthall (Amiga port) Andrew Simper (noise code) David Ross (EQ code) Stuart Caie/Claudio Matsuoka (powerpacker decrunching) Corvus Corax (sample editor filters) Henri Isojärvi (GUS patch loader fixes, GUI improvements) Johannes Schultz (various compatibility fixes) 3rd Party Libraries: RtMidi/RtAudio PortAudio zlib zziplib Pixel Graphics: kenet raina IDC Demo songs: svenzzon Strobe & Kmuland raina ASCII art (.nfo file): H2o MilkyTracker-1.02.00/CMakeLists.txt000066400000000000000000000167501324432207300170240ustar00rootroot00000000000000# # CMakeLists.txt # # Copyright 2016 Dale Whinham # # This file is part of MilkyTracker. # # MilkyTracker 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. # # MilkyTracker 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 MilkyTracker. If not, see . # cmake_minimum_required(VERSION 2.8.5) project(MilkyTracker) # Adhere to GNU filesystem layout conventions include(GNUInstallDirs) # Force SDL if requested option(FORCESDL "Force SDL instead of native" OFF) if(FORCESDL) unset(APPLE) unset(WIN32) add_definitions(-D__FORCE_SDL_AUDIO__) # Frameworks not supported by findSDL2.cmake set(CMAKE_FIND_FRAMEWORK NEVER) endif() # Lowercase project name for binaries and packaging string(TOLOWER ${PROJECT_NAME} PROJECT_NAME_LOWER) # Additional CMake modules set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/cmake) # Version number in format X.YY.ZZ set(VER_X 1) set(VER_YY 02) set(VER_ZZ 00) set(VER_FULL "${VER_X}.${VER_YY}.${VER_ZZ}") # Generate version header from the above configure_file( ${PROJECT_SOURCE_DIR}/src/tracker/version.h.in ${PROJECT_BINARY_DIR}/src/tracker/version.h ) # Packaging if(APPLE) set(CPACK_GENERATOR DragNDrop) set(CPACK_DMG_VOLUME_NAME "${PROJECT_NAME} ${VER_FULL}") set( CPACK_DMG_DS_STORE_SETUP_SCRIPT ${PROJECT_SOURCE_DIR}/resources/packaging/osx/DMGSetup.scpt ) set( CPACK_DMG_BACKGROUND_IMAGE ${PROJECT_SOURCE_DIR}/resources/packaging/osx/DMGBackground.tif ) elseif(WIN32) set(CPACK_GENERATOR ZIP) else() set(CPACK_GENERATOR TGZ) endif() set(CPACK_PACKAGE_NAME ${PROJECT_NAME_LOWER}) set(CPACK_PACKAGE_VENDOR "MilkyTracker Team") set(CPACK_PACKAGE_CONTACT "support@milkytracker.org") set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${VER_FULL}") set(CPACK_PACKAGE_VERSION_MAJOR ${VER_X}) set(CPACK_PACKAGE_VERSION_MINOR ${VER_YY}) set(CPACK_PACKAGE_VERSION_PATCH ${VER_ZZ}) set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "FastTracker II compatible music tracker") include(CPack) if(APPLE) # Warn if deployment target isn't set to Lion if(NOT CMAKE_OSX_DEPLOYMENT_TARGET MATCHES "10.7") message(WARNING "Your deployment target is either unset or not set to \"10.7\", " "which means that the binaries produced may not run on earlier " "versions of macOS.\n" "Please re-run CMake with '-DCMAKE_OSX_DEPLOYMENT_TARGET=10.7' " "or change the variable in the CMake GUI to target Lion and newer." ) endif() # Set variables for generating the Info.plist file set(MACOSX_BUNDLE_BUNDLE_VERSION "${VER_FULL}") set(MACOSX_BUNDLE_EXECUTABLE ${PROJECT_NAME}) set(MACOSX_BUNDLE_GUI_IDENTIFIER "com.Titan.MilkyTracker") set(MACOSX_BUNDLE_NSMAIN_NIB_FILE "Application") set(MACOSX_BUNDLE_ICON_FILE "carton") set(MACOSX_BUNDLE_NAME ${PROJECT_NAME}) set(MACOSX_BUNDLE_SHORT_VERSION_STRING "${VER_FULL}") # Carbon only required for HIToolbox/Events.h (virtual keycodes) find_library(CARBON_LIBRARY Carbon) find_library(COCOA_LIBRARY Cocoa) find_library(CORE_AUDIO_LIBRARY CoreAudio) find_library(CORE_FOUNDATION_LIBRARY CoreFoundation) find_library(CORE_MIDI_LIBRARY CoreMIDI) find_library(CORE_VIDEO_LIBRARY CoreVideo) find_library(OPENGL_LIBRARY OpenGL) # OS X MIDI support requires no external libraries message(STATUS "Enabled MIDI support (Core MIDI)") add_subdirectory(src/midi) elseif(WIN32) # Visual C++ Compiler options if(MSVC) # Warn if platform toolset may not be targetting Windows XP upwards if(NOT CMAKE_VS_PLATFORM_TOOLSET MATCHES "xp") message(WARNING "Your currently-selected platform toolset may generate " "executables which are incompatible with Windows XP.\n" "Please set your toolset to be one of v110_xp, v120_xp or " "v140_xp for VS2012, VS2013, and VS2015 respectively.\n" "You can do so with the '-T' argument to CMake, or by entering " "it in the CMake GUI." ) endif() # Suppress secure string function warnings add_definitions(-D_CRT_SECURE_NO_WARNINGS) # Enable parallel compilation set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /MP") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP") # Enable static linkage of the Microsoft Visual C/C++ Runtime set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /MTd") set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /MT") set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} /MTd") set(CMAKE_C_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS_MINSIZEREL} /MT") set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT") set( CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /MTd" ) set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} /MT") endif() # Prevent Windows.h from clashing with the Standard Template Library so we # can use std::min/std::max (see https://support.microsoft.com/kb/143208) add_definitions(-DNOMINMAX) # Windows MIDI support requires no external libraries message(STATUS "Enabled MIDI support (WinMM)") add_subdirectory(src/midi) else() # Workaround for SDL bug #3295, which we might hit if the distro's SDL2 # package includes the sdl2-config.cmake file # https://bugzilla.libsdl.org/show_bug.cgi?id=3295 cmake_policy(SET CMP0004 OLD) find_package(SDL2 2 REQUIRED) endif() # Prefer static linkage under OS X for libraries located with find_package() if(APPLE) set(SUFFIXES_ORIG ${CMAKE_FIND_LIBRARY_SUFFIXES}) set(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES}) endif() # Under macOS and Windows we use Git Submodules to locate the decompression libs if(UNIX) # zlib is provided by Linux and macOS find_package(ZLIB) # We can't use Brew for these due to OSX target version mismatch # (we're targeting an older version of OSX to increase compatibility) if(NOT APPLE) find_package(LHASA) find_package(ZZIPLIB) endif() if(${CMAKE_SYSTEM_NAME} MATCHES "Linux") find_package(ALSA) find_package(JACK) # Linux MIDI support requires ALSA and RtMidi if(ALSA_FOUND) find_package(RTMIDI 2.1.0) if(RTMIDI_FOUND) message(STATUS "Enabled MIDI support (ALSA/RtMidi)") add_subdirectory(src/midi) else() message("MIDI support disabled (RtMidi unavailable)") endif() else() message("MIDI support disabled (ALSA unavailable)") endif() endif() endif() # Restore library suffixes if(APPLE) set(CMAKE_FIND_LIBRARY_SUFFIXES ${SUFFIXES_ORIG}) endif() add_subdirectory(docs) add_subdirectory(resources/music) add_subdirectory(src/compression) add_subdirectory(src/fx) add_subdirectory(src/milkyplay) add_subdirectory(src/ppui) add_subdirectory(src/tracker) MilkyTracker-1.02.00/COPYING000066400000000000000000001050031324432207300153050ustar00rootroot00000000000000Note: Since the 0.90.85 release, Milkyplay (the player library used by MilkyTracker) is now licensed under the New-BSD license. The rest of MilkyTracker remains covered by the GPL: GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. 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), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program 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. This program 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 this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . MilkyTracker-1.02.00/ChangeLog.md000066400000000000000000000637551324432207300164440ustar00rootroot00000000000000# MilkyTracker ChangeLog ## 24/04/2018 (v1.02): ### What's new: * 99 channel MOD support * Alternative keybindings for inc/dec Row Insert ### Bugs fixed: * Fix Lxx command to also set panning envelope if volume sustain point is enabled. * Infinite loop when processing 8 digit hexadecimal numbers * SDL crash with -orientation command line parameter * SDL mouse drag issue * Fix fine global volume slide down handling * Various loader memory corruption bugs ## 29/07/2017 (v1.01): ### What's new: * Channel limit increased to 128 channels * New sample editor filters: * Phase modulation * AM & FM modulation * Selective equaliser * OSX: Insert key mapped to F13 * GUI: Clickable checkbox labels * GNU: Use GNUInstallDirs ### Bugs fixed: * Errant characters inserts when selecting patterns using ALT + cursor keys * Windows: Window size now takes scale factor into consideration * Build: Default value used for PATH_MAX if not set (for GNU/Hurd) * Instrument editor: * Prevent point inserts overlapping existing points * Reset cursor when changing presets or pasting envelopes * PT3 octave limit not reset when switching playback mode back to FT2 * Sample editor: * Invert function now works correctly * Equaliser constants tweaked * No longer crashes when generating silence with no selection active * Noise generator on 64-bit systems * OSX: Core audio sample-rate switching * GUS frequencies lower than lowest note * Off-by-semitone issue in GUS patch loader * Corrupt display with window sizes that aren't multiples of 4 * Windows: Window position gradually moving off-screen on restarts ## 11/03/2017 (v1.00.00): ### What's new: * 5 new customisable colours * X-Y mouse scrolling support * FT2 panning law * MilkyTracker version number stored in .xm file * Upgrade to SDL 2 * SDL2: Window scaling * OSX: Deprecated Carbon interface replaced with Cocoa * OSX: Drag and drop support * OSX: Support audio devices with >2 channels * OSX: Add custom document icons for supported file types * Posix: Follow XFG basedir spec for config file locations * Windows: Use system temp and config directories * Sample offset tool/preview ability (hold Ctrl/Cmd in sample editor waveform, left click for preview) * OSX: Add selectable filetype filter to file dialog * OSX: Native MIDI support * OSX: Allow selection of audio output device * Windows: WASAPI option for RtAudio driver * Shortcut keys to increment/decrement instrument number * LHA compressed modules load support * Moved to common CMake build system across all platforms * 3rd-party libraries removed from source tree * Horizontal mouse/touchpad scrolling * Mouse middle-click to solo channel * ..and more, see ([commit log](https://github.com/milkytracker/MilkyTracker/commits/master)) for details ### Bugs Fixed: * Segfault when loading <4 byte samples * Samples incorrectly offset when exporting .mod files * libalsa linker errors on some systems * .mod export: Don't zero first word of looping samples * Decompress files despite possible mis-identification * Windows: Determine window dimensions based on client area * Update view if paste changes pattern length * SDL: Unresponsive GUI in some situations * 16-bit sample loading bug * Windows: WaveOut crashes and deadlocks * Windows: Incorrect behaviour when mouse is dragged outside main window * Reversed Oktalyzer portamento effects * OSX: Sound driver samplerate mismatch under some circumstances * OSX: Miscellanous audio driver reliability problems * Windows: MIDI crash on 64-bit build * Various compiler warnings (many more remaining!) * Windows: Window occasionally appearing off the screen * Sample/Ins editor listboxes scrolled right in certain circumstances ## 07/11/13 (v0.90.86): ### Whats New: * Unsafe notes now shown in red when "PT 3 octave limit" option enabled * Haiku port (thanks jua) * Additional FT2 shortcuts ([forum post](http://modarchive.org/forums/index.php?topic=2713.0)) * Android port (thanks guillaum1) * Jack driver now connects to first available physical device * MilkyTracker source code now hosted on [GitHub](https://github.com/milkytracker/MilkyTracker) ### Bugs Fixed: * Loss of data when using 'backward' sample filter ([forum post](http://forums.modarchive.org/index.php?topic=3093.0)) * Warning displayed when exporting .mod files with samples over 64k ([forum post](http://forums.modarchive.org/index.php?topic=3235.0)) * Default panning settings applied when adding channels ([forum post](http://forums.modarchive.org/index.php?topic=3399.0)) * One-shot looping now works correctly ([forum post](http://forums.modarchive.org/index.php?topic=3391.0)) * First 2 bytes of samples cleared to zero when exporting to MOD (Amiga compatibility) * FT2 weirdness emulated when using the arpreggio command (thanks Saga_Musix) * In live mode, don't switch from pattern to song play when selecting a new pattern from the order list * Check config file is open for writing before attempting to save to it. * Don't assume BACKUPxx.XM has been saved * Crash when storing colour presets ([forum post](http://forums.modarchive.org/index.php?topic=3054.0)) * Segfault when loading XMs with zero-length loop ([forum post](http://forums.modarchive.org/index.php?topic=3063.0)) * Emulate FT2 behaviour for arpregios when speed>18 * Able to load some non-standard S3M files * Incorrect sample format assumptions in IT loader (thanks Saga_Musix) * Various build warnings and errors ## 01/01/10 (v0.90.85): ### Whats New: * Ability to move dialogs. * Keyboard shortcut Shift-U (unmute all). * Unix/SDL version now uses system libzzip. * Updated section panel to handle multiple pages. * Basic quicktime support on OSX. * LHA archive support. * Colour table import/export. * gzip compression support. * New font: IDC-Harmonica (12x12) * New font: IDC-MicroKnight (12x12) * Ability to detect desktop display resolution. * Added '1' as note-off key in MilkyTracker mode. * Ability to adjust screen magnification factor. * Milkyplay license changed from GPL to BSD (MilkyTracker remains GPL). * Working close button in OSX. * LZX compressor support. * Improved constants for 10 band EQ. * New font: Topaz 1.3 & Topaz 2.0 (8x8) ### Bugs Fixed: * (Unix) JACK client thread gets zombified causing playback to block. * Crash when using the '-orientation ROTATE90CW' switch on SDL versions. * Screen input lock after showing a system message. * Bug in xm loader for old xm variant causing 8 bit samples to not load correctly. * Added FT2 note range clipping to live playback. * Improved live recording note-off. * Crash when unable to open a directory. * Experimental mod exporter fix. * Volume scale default volume for empty instrument/samples. * Modplug XM importer fix. * Crash when MilkyTracker attempts to load a non-existant file. * Dialog initalization bug (caused focus to miss in edit fields etc). * Font selection bug. * Mouse repeat bug on SDL version. * Small bug in SDL Midi code. * Little bug in the advanced edit panel (limit of subsequent channels). * Undefined .XM sample type 0x3 causes sample loop to appear "one shot". * Instrument vibrato depth value gets doubled when copying instruments. * PSM loader can now store sub-song information correctly. * XM loading problems with 16-bit odd sample sizes. * Support for callbacks on systems that don't use C style function calls (ie, OS/2) * Instrument fadeout value initially doesn't match the slider position when adding new instruments to a loaded module. * Selecting an instrument with the numpad doesn't update the instrument or sample editors with the selected instrument, but with the previous one. * Bug in auto-detection of playmode for XM modules (panning was not set). * Set envelope position after sustain points. * Ignored lower 3 bits of finetune for more accurate FT2 playback * Crash while loading sample during playback * Screen refresh issues * Problem with French keyboard layout. * The current pattern length under the song title isn't updated when the mod is zapped. * Shrinking a 2-row pattern isn't possible. * Undoing an action doesn't register as a change. * A slight graphical bug occurs when using the seq and cln buttons on the FEth pattern of a mod. * Crash when converting sample resolution. * Freeze on exit when using DirectSound on Windows 7. * Lots of other smalls bugs not worth mentioning. ## 04/13/08 (v0.90.80): ### Important note: This version of MilkyTracker will update your current configuration file in a way that it's no longer usable with older versions. It is recommended that you keep a backup of your configuration file. On **Windows** the configuration is stored in the application folder. When using MilkyTracker on **OS X** or **Unix** systems the configuration is stored in your home directory in a file called .milkytracker_config. ### What's New: * Killer feature: Open up to 32 modules using tabs(*): * Allows simultaneous playback of different tabs * Copy pattern data/instruments/samples between tabs * New resamplers for improved sound quality: * Cubic Lagrange * Cubic Spline * Fast Sinc (window size 16, fixed point integer, sinc lookup table) * Precise Sinc (window size 128, double floating point) * Amiga 500 * Amiga 500 LED * Amiga 1200 * Amiga 1200 LED * Render parts of the song directly into a sample slot (from HD recorder) * Live switch toggle [L] * Track splitter insert note off toggle * Sample editor shows time in milliseconds according to currently selected relative note * Notes on muted channels appear in grey on the piano * Scopes also available with smoothed lines * Added option to always mixdown stereo samples, no more questions ;) * WAV loader recognizes loop points and also exports them (*) Only available in the Desktop version of MilkyTracker ### Bugs Fixed: #### Replay * Fixed bug in bidirectional looping which caused clicks on short samples * Introduced smart loop area double buffering to eliminate sample looping clicks * Fixed issue when switching between 4xx and Vx * Fixed issue when having a Dxx on the last order and restart is not zero * Milky's note range was going slightly higher than that of Ft2's. #### Other * CRASH/FREEZE: When trying apply crossfade on invalid selections in sample editor. * FREEZE: Optimize song can freeze MilkyTracker if the displayed pattern number no longer exists after optimization. * Bug in the XI-loader causes instrument vibrato settings not to be applied until some instrument setting is modified. * Cutting arpeggio commands by selecting only the operand digits leaves invisible 000 commands on the pattern that repeat the previous arpeggio from effect memory. * GUS patch loader note mapping more accurate now * Some custom screen resolutions lead to distorted rendering. * The Apple AIFF loader doesn't load big endian samples correctly. * Rewritten major parts of the GUI & editor code to be more reliable. * Countless bugs you might not even have found yet ## 05/20/07 (v0.90.60): ### What's New: * New imported (obscure) module formats (mainly for personal satisfaction): * Another DSM format (Digisound Interface Kit library) * Another AMF format (DSMI library) * SFX (SoundFX) * Basic AIFF loader (Apple Sound Format, only reads uncompressed AIFF but allows for importing CD tracks directly on OS X) * Four new 8x8 fonts (thanks to idc and Rez) * Set custom screen resolution * Scrollbars in the list boxes dynamically show/hide depending on content (saves some space) * Row preview with Shift+Space * Song Preview Alt+Space * Integrated disk browser (click "flip" in the disk operations panel) * Sample editor got EQ filters now (3 and 10 bands) * Sample editor got waveform generators for sine, square, triangle and sawtooth * Solid scopes (ProTracker style, toggle in the config under the misc. tab) * Pattern replay is a bit more like Ft2 now (switching to different pattern doesn't reset cursor to row 0) * Clone button to clone the current order * "Mix paste" in the sample editor: paste in a sample from the clipboard and get it mixed with the current selection/entire sample. * As usually: more Ft2-compatible replay ### Bugs Fixed: #### Replay * A severe volume ramping bug has been fixed * Instrument auto vibrato ramp wave forms were swapped * Fixed several issues in the replayer which were causing problems when using EDx and Mx and similiar combinations #### Other * Orders containing pattern number FF vanished from modules saved from Ft2. * Loading arbitrary files as samples adds the filename to the sample text. * The y-axis in the sample editor was flipped (negative side was on the top). * Toggling scopes in the config with the keyboard left the checkbox unaffected. * Crash: A bug in the IFF reader crashes MilkyTracker when loading some IFF samples. * Crash: After adding channels and saving as MOD. * Saving MOD with extended octaves (5 instead of 3) produces results like FT2 now. * Crash: (on Linux x86_64, strange behavior elsewhere): Caused by illegal 16-bit zero-length samples, as saved by Soundtracker. * Crash: when loading modules without instruments. * FREEZE: when zooming way in/loading LOOONG instrument envelopes. * FREEZE (on Windows Vista): when initializing audio on startup. * Assigning samples to notes in the instrument editor by clicking and holding (painting) doesn't have effect on C-0. * Certain hot words in song titles cause incorrect module format detection (improved at least ;)). * Clear button above sample box didn't work properly. * Dxx on the last row of a pattern caused a display error when xx is greater than the number of rows on the current pattern. * Insert silence screwed up 16 bit samples. * Instrument panning settings defaulted to center on key-release when key-jamming. * Optimizer functions "Minimize all samples" and "Samples to 8-bit" triggered one another when only one of them were selected. * Selection block is truncated to current pattern length (you know, after being taller on a taller pattern). * Several things like applying sample editor filters and using the optimizer reset global volume. * Other things I can't remember :P ## 09/26/06 (v0.90.50), Tons of fixes and added features: ### What's New: * New platforms supported: * FreeBSD (x86) * Linux (x86, x86_64, PowerPC, ARM, GP2X) * Solaris 9 & 10 (SPARC) * Windows (ANSI) * Windows CE Handheld PCs and the Gizmondo * New imported module formats: * DBM (DigiBooster Pro) * GMC (Game Music Creator) * IT (Impulse Tracker) * NOTE: MilkyTracker will remain an Ft2 clone, importing converts everything to this environment and accurate playback is not pursued. It's just like with the rest of the imported formats apart from MOD and XM. * MORE IMPORTANTLY: MilkyTracker refuses to import modules with more than 32 channels. It's not that the XM format couldn't handle it but the Fasttracker II framework doesn't, so there. * Low-latency audio driver support: * ALSA on Linux * ASIO and DirectX on Win32, thanks to [RtAudio](http://www.music.mcgill.ca/~gary/rtaudio/) * 48kHz mixing resolution now available also on Win32\. NOTE: MMSYSTEM/WaveOut can't handle 48kHz, so don't mix these two. * Adjustable MOD channel panning * Adjustable opacity for muted channels * Alternate view in the main panel showing Add, Octave and Global volume values * Fasttracker II edit mode and scrolling style loaded by default * MIDI in with velocity and note delay/off recording (works on your QWERTY too), thanks to [RtMidi](http://www.music.mcgill.ca/~gary/rtmidi/) * Module optimization panel * Pattern row highlighting, two independent intervals * Sample editor noise generators * Selectable pattern/UI fonts * Skippable splash screen * Volume boost/fade dialogs accept negative values (useful for chip sample generation, sample phase inversion etc) ### Bugs Fixed: #### Replay * A rogue EDx note delay without a note should retrigger the previous note when x is lesser than or equal to song speed. * EDx+EEy, that is delayed notes on a pattern delayed row played when x was larger than or equal to the song speed. Sadly, this shouldn't happen according to Ft2, thus it doesn't anymore. * E5x finetune setting implemented. * E9x note retrig was a little off, now it's ever closer to Ft2. * F00 speed setting wasn't implemented, now it stops playback * Fasttracker II slows down to advancing one row every 10 or so minutes. If you can justify this behavior, i.e. convince us how you can rationally utilize it (a 10 minute pause) in a song, it will be implemented. * K00 did not send a noteOff but set the volume to zero. * Mx volume column tone portamento acted as M0 when starting a song from scratch and you couldn't actually enter an M0 because a 1 was was automatically filled in as the parameter. All fixed and dandy now. * Rxx multiretrig, see E9x. * Something clicked in the mixer, literally. Now smoother than a baby's butt. #### User interface * A channel could get stuck playing only one instrument when volume ramping was off. Ain't life peculiar? * A crash happened when selecting a range in sample editor and the mouse was released outside the MilkyTracker window followed by a cut or copy operation. You see the selection was still in progress and the poor tracker got confused because it didn't know where the range started/ended. * A pattern that was deleted from the orderlist remained on the screen. * An instrument stayed selected after it had been removed with the minus button. * Block operation areas did not always match block selections. * Global volume wasn't reset on stop/play. * Key release now effects the correct note (not necessarily the note that is playing). * Multisample instruments got rearranged/optimized automatically. * Scrollbar positions were reset upon screen switches. Added botox. * Standard-breaking XI instruments (w/ stereo and more than 16 samples) were crashing MilkyTracker. Now stereo is converted to mono and surplus samples are dismissed. * The MilkyTracker window insisted on staying topmost after switching from fullscreen to windowed. * The F10 key brought up the system menu on Win32\. Now it just jumps to row 10h like it's supposed to. * The selection disappeared after pasting a block. Doesn't anymore. * When tabbing to a channel outside the current display, the screen shifted one whole "page". Very confusing for young, fragile artists. Now it moves one channel at a time, à la Ft2. ## 02/14/06 (v0.90.30), Mainly bugfixes and minor additions: ### Bugs fixed: * ProTracker modules using 'one shot'-looped samples seem to crash the replayer sometimes. Fixed. * There was a bug in the mod exporter when trying to export samples with a loopstart set to 0\. Fixed. * The windows version would crash when inserting MANY points between two points in an envelope. Fixed. * The right-left combined mouse click on the scopes didn't work properly. Fixed. * switching between the loop types caused crashes. Fixed. * Redo filter seems to crash/erase sample in the win32 version. Fixed. * Retrig command was still a little bit buggy (when used in combination with delay note). Fixed. * Arpeggio was still a little bit buggy (won't be noticed when tickspeed%3 == 0). Fixed. * Putting a position jump inbetween a pattern loop will cause the song length estimator to hang in an infinite loop. Fixed. * Trying to enable the volume envelope when it says 'none selected' in the envelope editor Milky would crash. Fixed. * Block transpose up/down was buggy. Fixed. * Pattern Len display isn't updated to reflect new length after block was pasted and pattern grew. Fixed. * Scopes didn't update after loading samples/instruments * Dozens of other fixes… ### Features added: * Multichannel record/keyjazz/editing (like in FT2) * Disable pattern grow when pasting * Enable "by channel tabbing" (like in FT2) * Instrument quick select using numerical keypad * Select sample within instrument in FT2 edit mode (Shift+Alt+Up/Down) * Emulate insert key with Ctrl+Up in the OSX version (select from the OSX main menu under option "special") * Dragging files from the win-explorer/osx finder into the MilkyTracker window loads the file (works for modules, instruments, patterns, tracks, samples etc.) * Load/Save IFF samples * More WAV sample types recognized and loaded * Improved Protracker compatibility * More options on the replayer for improved module playback compatibility * Playmodes can now be saved to be the default playmode * Even more FT2 keyboard shortcuts (F9-F12, look in the doc for more info) * Even more customizing support, see config. * PocketPC: Added scopes as well * PocketPC: Jam page with extended keyboard or pattern ## 11/29/05 (v0.90.00), Lots of improvements, really can't remember them all: * Improved mixer, improved FT2 effect compatibility (especially tremolo, tremor, vibrato) * Scopes (finally) (only for Desktop versions) * Configurable colors (config->layout) * Disk writer (Ctrl+R) * FT2 like pattern follow: cursor line always in center center * Prospective mode and toggle follow song mode * Volume scale (Shift/Alt/Ctrl+V like FT2) * Load GUS patches (needs to be loaded as instrument) * Load every file as sample (good for making noise samples) * Dozens of sample filters * Reworked GUI (especially menus) * Sample offset can be shown in sample editor * Drawing samples (but remember to turn on looping, otherwise doesn't sound good ;)) * Toggle Hex count for rows in pattern editor * Show zero effect as 00 instead of dots (see config->layout) * Improved Protracker 2.x, 3.x replay modes (see options) * Skip through song while it's playing (with cursor keys or scrollwheel) * Time length calculation/play time meter * Peak meters * Sequencer button (see order list) * Hold the Alt Key in the sample editor to move entire loop not only loop/end * Tons of other fixes… * More things to find out… ## 10/07/05: * Fixed crash when saving .MODs * Implemented Lxx command (set envelope position) * New: Hold down Ctrl (Apple on OSX) to resize selection in sample editor * New: Zoom sample in/out by using the scroll wheel of your mouse * New: Swap channels (select source with cursor and swap with destination channel by menu) * New: Split track (spread notes from one channel across subsequent channels) * New: Use virtual channels when playing instruments (enable in config first) (instruments played on virtual channels won't cut instruments used in song) * Other stuff (don't remember all of it) ## 09/01/05: * Fixed lots of crashes =) * cut/copy/paste works in sample editor (hopefully, not much tested yet) * you're able to change default screen resolution but you need to restart MilkyTracker to apply * Save patterns/tracks in FT2 formats .XP/.XT * Save Protracker compatible mods * Fixed some small issues ## 07/01/05: * Fixed lots of crashes * Undo/Redo in sample editor (cut/copy/paste is following soon) * Minor cosmetical changes * Vibrato volume command now works in pattern editor (press "v") * Vibrato speed volume command now works in pattern editor (press "s") * X command works in pattern editor * MOD loader now recognises 15 channel mods * Added "large" font for tracking <= 4 channel songs ;) * Del. key can be used for deleting note+ins./volume/effect ## 06/22/05: * !! Fixed bug that caused MilkyTracker to crash when selecting empty samples (sorry for that one) * Fixed bug with ALT+F4 when using FT2 shortcuts and Windows =) * Paste of tracks and patterns always insert at row 0, not at cursor * Added possibility to expand orderlist listbox * Added predefined envelopes * Changed instrument color (one day it will be possible to select your own colors ;)) * More minor fixes ## 06/13/05: * Improved sample position markers * Added envelope position markers * Improved XM replayer (fixed FT2 note clipping when playing arpeggios) * Added more FT2 keyboard shortcuts (Ctrl+I, Ctrl +S, Ctrl +X etc.) * Minor fixes + Additions * Added support for mouse scrollwheel * PocketPC: "Full" onscreen keyboard (probably still buggy) ## 05/27/05: * Right (1st) & Left click (2nd) on channel box cycles between solo channel/unmute all (Alternatively hold ALT key and left click on channel box) * Del. now deletes note & instrument in FT2 mode * Pattern scrolling is now buffer independent on Win32/WinCE (Not necessary under OSX because of much smaller buffer sizes =)) * Added another pattern scroll style (cursor scrolls to the center and keeps center until the last page) ## 05/22/05: * Due to request MilkyTracker now features a FT2 compatibility mode. You can switch between MilkyTracker (modern ;)) and FT2 edit modes in the config screen. (See MilkyTracker manual for details.) Note: Not all FT2 commands are implemented yet, but the most important ones for editing are included. * Hopefully fixed some keyboard layout problems ## 05/14/05: * Fixed some "focus" issues * Divided "save" option into "save" and "save as…" * Added value interpolation (available in the "Advanced Editor") * Fixed an instrument load/save issue * PocketPC: Fixed bug, which prevented the progress bar from disappearing when saving instruments/samples. ## 05/06/05: * Minor optimizations making the GUI more responsive * Toggle focus of pattern editor by pressing space * Play song from current order by pressing enter * Play pattern by pressing ctrl+enter * Play pattern from current position by pressing shift+enter * PocketPC: Explicit hiding of SIP (does this solve any problems?) * PocketPC: Minor facelifts ## 04/29/05: * Added possibility to swap/copy samples from one instrument to another * Fixed major bug in XI loader * Increased button autorepeat delay * PocketPC version: GAPI is now properly shut down before opening the common file dialog ## 04/25/05: * First "official" PocketPC pre-release. MilkyTracker-1.02.00/INSTALL.md000066400000000000000000000052771324432207300157160ustar00rootroot00000000000000# Notes on building MilkyTracker MilkyTracker now uses CMake to produce the build files. This replaces the previously separately maintained Autotools, Visual Studio and Xcode project files. Some historic platform-specific build files remain in the platforms directory - these are untested. The CMake configuration will auto-detect the platform it is building on, but can be configured to force an SDL build if required by setting the `FORCESDL` option. # Dependencies To build the SDL port of MilkyTracker you will need the following development libraries installed on your system: - ALSA (optional, needed for Linux MIDI support) - RtMidi (for Linux MIDI support) - JACK (optional) - SDL2 For all non-Windows/macOS ports, the decompression libs (optional): - lhasa - zlib - zziplib These are also provided as Git submodules, see below. # Submodules The following Git submodules are provided for linking into the Windows and macOS binaries: - RtAudio (Windows only) - lhasa - zlib (Windows only, macOS provides this) - zziplib To obtain these, `cd` to the MilkyTracker source directory and type: ``` $ git submodule update --init ``` # Building As with most other CMake-based projects, building MilkyTracker requires two steps: 1. Generating the build files for your desired build system using CMake 2. Invoking the generated build system ## Step 1 At the command line, step 1 is performed as follows: ``` $ mkdir build $ cd build $ cmake .. ``` On macOS, add `-GXcode` to the last command to generate an Xcode project instead of using GNU make. Note that you could also use the CMake GUI for this step instead of the command line. ## Step 2 Step 2 varies depending on the target OS/build system. On Linux and macOS (when using GNU make): ``` $ make ``` On Windows, you will probably have generated a Visual Studio project instead. Simply open it with Visual Studio and compile the 'MilkyTracker' target. On macOS, the same applies if you decided to generate an Xcode project using `-GXcode`. Open the project up and build the 'MilkyTracker' target. ## macOS specific notes In addition to CMake, you will need the following extra packages. The recommended way of obtaining these is by using Homebrew or MacPorts. - automake - libtool - xmlto The correct way to build a release .DMG for macOS 10.7 and above, including special document icons, is as follows: ``` $ pushd resources/pictures/docicons/osx $ wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/docerator/docerator-2.0.zip $ unzip docerator-2.0.zip -d docerator $ rm docerator-2.0.zip $ ./genicons.py $ popd $ mkdir build $ cd build $ cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_DEPLOYMENT_TARGET=10.7 .. $ make $ cpack . ``` MilkyTracker-1.02.00/NEWS000066400000000000000000000000761324432207300147550ustar00rootroot00000000000000See http://www.milkytracker.org/ for latest news and updates. MilkyTracker-1.02.00/README.md000066400000000000000000000017261324432207300155400ustar00rootroot00000000000000MilkyTracker - Cross-Platform XM Tracker ======================================== [![Travis Build Status](https://travis-ci.org/milkytracker/MilkyTracker.svg?branch=master)](https://travis-ci.org/milkytracker/MilkyTracker) [![AppVeyor Build Status](https://ci.appveyor.com/api/projects/status/github/milkytracker/MilkyTracker?branch=master&svg=true)](https://ci.appveyor.com/project/Deltafire/milkytracker) MilkyTracker is an multi-platform music application for creating .MOD and .XM module files. It attempts to recreate the module replay and user experience of the popular DOS program Fasttracker II, with special playback modes available for improved Amiga ProTracker 2/3 compatibility. Refer to http://milkytracker.titandemo.org/?about for further details. Please read the file [INSTALL.md][] for installation instructions. The [docs/readme_unix][] file contains notes specific to the SDL port of MilkyTracker. [INSTALL.md]:INSTALL.md [docs/readme_unix]:docs/readme_unix MilkyTracker-1.02.00/appveyor.yml000066400000000000000000000012201324432207300166360ustar00rootroot00000000000000version: 1.02.00-{build} configuration: - Debug - Release platform: - Win32 - x64 install: - git submodule update --init --recursive before_build: - md c:\projects\milkytracker\build - cd c:\projects\milkytracker\build - if %platform% == Win32 cmake -G "Visual Studio 14" -T v140_xp .. - if %platform% == x64 cmake -G "Visual Studio 14 Win64" -T v140_xp .. build: project: c:\projects\milkytracker\build\MilkyTracker.sln after_build: # https://github.com/chocolatey/chocolatey/issues/431 - cmake -E remove -f c:\programdata\chocolatey\bin\cpack.exe - cpack -C %configuration% artifacts: - path: build\milkytracker*.zip MilkyTracker-1.02.00/cmake/000077500000000000000000000000001324432207300153335ustar00rootroot00000000000000MilkyTracker-1.02.00/cmake/FindJACK.cmake000066400000000000000000000034141324432207300176500ustar00rootroot00000000000000# # cmake/FindJACK.cmake # # Copyright 2016 Dale Whinham # # This file is part of MilkyTracker. # # MilkyTracker 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. # # MilkyTracker 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 MilkyTracker. If not, see . # # - Try to find JACK # Once done this will define # JACK_FOUND - System has JACK # JACK_INCLUDE_DIRS - The JACK include directories # JACK_LIBRARIES - The libraries needed to use JACK # JACK_DEFINITIONS - Compiler switches required for using JACK # JACK_VERSION_STRING - The version of JACK find_package(PkgConfig QUIET) pkg_check_modules(PC_JACK QUIET jack) set(JACK_DEFINITIONS ${PC_JACK_CFLAGS_OTHER}) find_path( JACK_INCLUDE_DIR jack/jack.h HINTS ${PC_JACK_INCLUDEDIR} ${PC_JACK_INCLUDE_DIRS} ) find_library(JACK_LIBRARY NAMES jack HINTS ${PC_JACK_LIBDIR} ${PC_JACK_LIBRARY_DIRS} ) # Get version from pkg-config if possible if(PC_JACK_VERSION) set(JACK_VERSION_STRING ${PC_JACK_VERSION}) endif() include(FindPackageHandleStandardArgs) find_package_handle_standard_args( JACK REQUIRED_VARS JACK_LIBRARY JACK_INCLUDE_DIR VERSION_VAR JACK_VERSION_STRING ) mark_as_advanced(JACK_INCLUDE_DIR JACK_LIBRARY) if(JACK_FOUND) set(JACK_LIBRARIES ${JACK_LIBRARY}) set(JACK_INCLUDE_DIRS ${JACK_INCLUDE_DIR}) endif() MilkyTracker-1.02.00/cmake/FindLHASA.cmake000066400000000000000000000034301324432207300177660ustar00rootroot00000000000000# # cmake/FindLHASA.cmake # # Copyright 2016 Dale Whinham # # This file is part of MilkyTracker. # # MilkyTracker 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. # # MilkyTracker 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 MilkyTracker. If not, see . # # - Try to find lhasa # Once done this will define # LHASA_FOUND - System has zziplib # LHASA_INCLUDE_DIRS - The zziplib include directories # LHASA_LIBRARIES - The libraries needed to use zziplib # LHASA_DEFINITIONS - Compiler switches required for using zziplib # LHASA_VERSION_STRING - The version of zziplib find_package(PkgConfig QUIET) pkg_check_modules(PC_LHASA QUIET liblhasa) set(LHASA_DEFINITIONS ${PC_LHASA_CFLAGS_OTHER}) find_path( LHASA_INCLUDE_DIR lhasa.h HINTS ${PC_LHASA_INCLUDEDIR} ${PC_LHASA_INCLUDE_DIRS} ) find_library( LHASA_LIBRARY NAMES lhasa HINTS ${PC_LHASA_LIBDIR} ${PC_LHASA_LIBRARY_DIRS} ) # Get version from pkg-config if possible set(LHASA_VERSION_STRING ${PC_LHASA_VERSION}) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(LHASA REQUIRED_VARS LHASA_LIBRARY LHASA_INCLUDE_DIR VERSION_VAR LHASA_VERSION_STRING) mark_as_advanced(LHASA_INCLUDE_DIR LHASA_LIBRARY) if(LHASA_FOUND) set(LHASA_LIBRARIES ${LHASA_LIBRARY}) set(LHASA_INCLUDE_DIRS ${LHASA_INCLUDE_DIR}) endif() MilkyTracker-1.02.00/cmake/FindRTMIDI.cmake000066400000000000000000000043561324432207300201360ustar00rootroot00000000000000# # cmake/FindRTMIDI.cmake # # Copyright 2016 Dale Whinham # # This file is part of MilkyTracker. # # MilkyTracker 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. # # MilkyTracker 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 MilkyTracker. If not, see . # # - Try to find RtMidi # Once done this will define # RTMIDI_FOUND - System has RtMidi # RTMIDI_INCLUDE_DIRS - The RtMidi include directories # RTMIDI_LIBRARIES - The libraries needed to use RtMidi # RTMIDI_DEFINITIONS - Compiler switches required for using RtMidi # RTMIDI_VERSION_STRING - The version of RtMidin find_package(PkgConfig QUIET) pkg_check_modules(PC_RTMIDI QUIET rtmidi) set(RTMIDI_DEFINITIONS ${PC_RTMIDI_CFLAGS_OTHER}) find_path( RTMIDI_INCLUDE_DIR RtMidi.h HINTS ${PC_RTMIDI_INCLUDEDIR} ${PC_RTMIDI_INCLUDE_DIRS} PATH_SUFFIXES rtmidi ) find_library( RTMIDI_LIBRARY NAMES rtmidi HINTS ${PC_RTMIDI_LIBDIR} ${PC_RTMIDI_LIBRARY_DIRS} ) # Get version from pkg-config if possible, else scrape it from the header if(PC_RTMIDI_VERSION) set(RTMIDI_VERSION_STRING ${PC_RTMIDI_VERSION}) elseif(RTMIDI_INCLUDE_DIR AND EXISTS "${RTMIDI_INCLUDE_DIR}/RtMidi.h") file(STRINGS "${RTMIDI_INCLUDE_DIR}/RtMidi.h" RTMIDI_VERSION_LINE REGEX "^#define RTMIDI_VERSION \".*\".*$") string(REGEX REPLACE "^#define RTMIDI_VERSION \"(.*)\".*$" "\\1" RTMIDI_VERSION_STRING ${RTMIDI_VERSION_LINE}) unset(RTMIDI_VERSION_LINE) endif() include(FindPackageHandleStandardArgs) find_package_handle_standard_args( RTMIDI REQUIRED_VARS RTMIDI_LIBRARY RTMIDI_INCLUDE_DIR VERSION_VAR RTMIDI_VERSION_STRING ) mark_as_advanced(RTMIDI_INCLUDE_DIR RTMIDI_LIBRARY) if(RTMIDI_FOUND) set(RTMIDI_LIBRARIES ${RTMIDI_LIBRARY}) set(RTMIDI_INCLUDE_DIRS ${RTMIDI_INCLUDE_DIR}) endif() MilkyTracker-1.02.00/cmake/FindSDL2.cmake000066400000000000000000000110421324432207300176400ustar00rootroot00000000000000# - Find SDL2 library and headers # # Find module for SDL 2.0 (http://www.libsdl.org/). # It defines the following variables: # SDL2_INCLUDE_DIRS - The location of the headers, e.g., SDL.h. # SDL2_LIBRARIES - The libraries to link against to use SDL2. # SDL2_FOUND - If false, do not try to use SDL2. # SDL2_VERSION_STRING - Human-readable string containing the version of SDL2. # # This module responds to the the flag: # SDL2_BUILDING_LIBRARY # If this is defined, then no SDL2_main will be linked in because # only applications need main(). # Otherwise, it is assumed you are building an application and this # module will attempt to locate and set the the proper link flags # as part of the returned SDL2_LIBRARIES variable. # # Also defined, but not for general use are: # SDL2_INCLUDE_DIR - The directory that contains SDL.h. # SDL2_LIBRARY - The location of the SDL2 library. # SDL2MAIN_LIBRARY - The location of the SDL2main library. # #============================================================================= # Copyright 2013 Benjamin Eikel # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the nor the # names of its contributors may be used to endorse or promote products # derived from this software without specific prior written permission. # # 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 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. #============================================================================= find_package(PkgConfig QUIET) pkg_check_modules(PC_SDL2 QUIET sdl2) find_path(SDL2_INCLUDE_DIR NAMES SDL.h HINTS ${PC_SDL2_INCLUDEDIR} ${PC_SDL2_INCLUDE_DIRS} PATH_SUFFIXES SDL2 ) find_library(SDL2_LIBRARY NAMES SDL2 HINTS ${PC_SDL2_LIBDIR} ${PC_SDL2_LIBRARY_DIRS} PATH_SUFFIXES x64 x86 ) if(NOT SDL2_BUILDING_LIBRARY) find_library(SDL2MAIN_LIBRARY NAMES SDL2main HINTS ${PC_SDL2_LIBDIR} ${PC_SDL2_LIBRARY_DIRS} PATH_SUFFIXES x64 x86 ) endif() if(SDL2_INCLUDE_DIR AND EXISTS "${SDL2_INCLUDE_DIR}/SDL_version.h") file(STRINGS "${SDL2_INCLUDE_DIR}/SDL_version.h" SDL2_VERSION_MAJOR_LINE REGEX "^#define[ \t]+SDL_MAJOR_VERSION[ \t]+[0-9]+$") file(STRINGS "${SDL2_INCLUDE_DIR}/SDL_version.h" SDL2_VERSION_MINOR_LINE REGEX "^#define[ \t]+SDL_MINOR_VERSION[ \t]+[0-9]+$") file(STRINGS "${SDL2_INCLUDE_DIR}/SDL_version.h" SDL2_VERSION_PATCH_LINE REGEX "^#define[ \t]+SDL_PATCHLEVEL[ \t]+[0-9]+$") string(REGEX REPLACE "^#define[ \t]+SDL_MAJOR_VERSION[ \t]+([0-9]+)$" "\\1" SDL2_VERSION_MAJOR "${SDL2_VERSION_MAJOR_LINE}") string(REGEX REPLACE "^#define[ \t]+SDL_MINOR_VERSION[ \t]+([0-9]+)$" "\\1" SDL2_VERSION_MINOR "${SDL2_VERSION_MINOR_LINE}") string(REGEX REPLACE "^#define[ \t]+SDL_PATCHLEVEL[ \t]+([0-9]+)$" "\\1" SDL2_VERSION_PATCH "${SDL2_VERSION_PATCH_LINE}") set(SDL2_VERSION_STRING ${SDL2_VERSION_MAJOR}.${SDL2_VERSION_MINOR}.${SDL2_VERSION_PATCH}) unset(SDL2_VERSION_MAJOR_LINE) unset(SDL2_VERSION_MINOR_LINE) unset(SDL2_VERSION_PATCH_LINE) unset(SDL2_VERSION_MAJOR) unset(SDL2_VERSION_MINOR) unset(SDL2_VERSION_PATCH) endif() set(SDL2_INCLUDE_DIRS ${SDL2_INCLUDE_DIR}) set(SDL2_LIBRARIES ${SDL2MAIN_LIBRARY} ${SDL2_LIBRARY}) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(SDL2 REQUIRED_VARS SDL2_INCLUDE_DIR SDL2_LIBRARY VERSION_VAR SDL2_VERSION_STRING) mark_as_advanced(SDL2_INCLUDE_DIR SDL2_LIBRARY) MilkyTracker-1.02.00/cmake/FindZZIPLIB.cmake000066400000000000000000000044211324432207300202620ustar00rootroot00000000000000# # cmake/FindZZIPLIB.cmake # # Copyright 2016 Dale Whinham # # This file is part of MilkyTracker. # # MilkyTracker 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. # # MilkyTracker 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 MilkyTracker. If not, see . # # - Try to find zziplib # Once done this will define # ZZIPLIB_FOUND - System has zziplib # ZZIPLIB_INCLUDE_DIRS - The zziplib include directories # ZZIPLIB_LIBRARIES - The libraries needed to use zziplib # ZZIPLIB_DEFINITIONS - Compiler switches required for using zziplib # ZZIPLIB_VERSION_STRING - The version of zziplib find_package(PkgConfig QUIET) pkg_check_modules(PC_ZZIPLIB QUIET zziplib) set(ZZIPLIB_DEFINITIONS ${PC_ZZIPLIB_CFLAGS_OTHER}) find_path( ZZIPLIB_INCLUDE_DIR zzip/zzip.h HINTS ${PC_ZZIPLIB_INCLUDEDIR} ${PC_ZZIPLIB_INCLUDE_DIRS} ) find_library( ZZIPLIB_LIBRARY NAMES zzip HINTS ${PC_ZZIPLIB_LIBDIR} ${PC_ZZIPLIB_LIBRARY_DIRS} ) # Get version from pkg-config if possible, else scrape it from the header if(PC_ZZIPLIB_VERSION) set(ZZIPLIB_VERSION_STRING ${PC_ZZIPLIB_VERSION}) elseif(ZZIPLIB_INCLUDE_DIR AND EXISTS "${ZZIPLIB_INCLUDE_DIR}/_config.h") file( STRINGS "${ZZIPLIB_INCLUDE_DIR}/_config.h" ZZIPLIB_VERSION_LINE REGEX "^#define ZZIP_VERSION.*$" ) string( REGEX REPLACE "^.*ZZIP_VERSION.*\"([0-9.]+)\".*$" "\\1" ZZIPLIB_VERSION_STRING ${ZZIPLIB_VERSION_LINE} ) unset(ZZIPLIB_VERSION_LINE) endif() include(FindPackageHandleStandardArgs) find_package_handle_standard_args( ZZIPLIB REQUIRED_VARS ZZIPLIB_LIBRARY ZZIPLIB_INCLUDE_DIR VERSION_VAR ZZIPLIB_VERSION_STRING ) mark_as_advanced(ZZIPLIB_INCLUDE_DIR ZZIPLIB_LIBRARY) if(ZZIPLIB_FOUND) set(ZZIPLIB_LIBRARIES ${ZZIPLIB_LIBRARY}) set(ZZIPLIB_INCLUDE_DIRS ${ZZIPLIB_INCLUDE_DIR}) endif() MilkyTracker-1.02.00/docs/000077500000000000000000000000001324432207300152035ustar00rootroot00000000000000MilkyTracker-1.02.00/docs/CMakeLists.txt000066400000000000000000000027561324432207300177550ustar00rootroot00000000000000# # docs/CMakeLists.txt # # Copyright 2016 Dale Whinham # # This file is part of MilkyTracker. # # MilkyTracker 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. # # MilkyTracker 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 MilkyTracker. If not, see . # set( DOCUMENTS ChangeLog.html FAQ.html MilkyTracker.html TiTAN.nfo ChangeLog.html ) if(${CMAKE_SYSTEM_NAME} MATCHES "BSD") set(BSD TRUE) endif() if(APPLE) set(INSTALL_DEST Documentation) elseif(BSD) set(INSTALL_DEST share/doc/${PROJECT_NAME_LOWER}) elseif(WIN32) list(APPEND DOCUMENTS readme_rtaudio) set(INSTALL_DEST .) else() list(APPEND DOCUMENTS readme_unix) set(INSTALL_DEST ${CMAKE_INSTALL_DOCDIR}) endif() install(FILES ${DOCUMENTS} DESTINATION ${INSTALL_DEST}) install(FILES ../AUTHORS DESTINATION ${INSTALL_DEST} RENAME Authors.txt) install(FILES ../COPYING DESTINATION ${INSTALL_DEST} RENAME Copying.txt) # add_custom_command(OUTPUT ChangeLog.html COMMAND pandoc ARGS "-so ChangeLog.html ../ChangeLog.md") MilkyTracker-1.02.00/docs/ChangeLog.html000066400000000000000000000741221324432207300177260ustar00rootroot00000000000000

MilkyTracker ChangeLog

24/04/2018 (v1.02)

What's new:

  • 99 channel MOD support
  • Alternative keybindings for inc/dec Row Insert

Bugs fixed:

  • Fix Lxx command to also set panning envelope if volume sustain point is enabled.
  • Infinite loop when processing 8 digit hexadecimal numbers
  • SDL crash with -orientation command line parameter
  • SDL mouse drag issue
  • Fix fine global volume slide down handling
  • Various loader memory corruption bugs

29/07/2017 (v1.01):

What's new:

  • Channel limit increased to 128 channels
  • New sample editor filters:
  • Phase modulation
  • AM & FM modulation
  • Selective equaliser
  • OSX: Insert key mapped to F13
  • GUI: Clickable checkbox labels
  • GNU: Use GNUInstallDirs

Bugs fixed:

  • Errant characters inserts when selecting patterns using ALT + cursor keys
  • Windows: Window size now takes scale factor into consideration
  • Build: Default value used for PATH_MAX if not set (for GNU/Hurd)
  • Instrument editor:
  • Prevent point inserts overlapping existing points
  • Reset cursor when changing presets or pasting envelopes
  • PT3 octave limit not reset when switching playback mode back to FT2
  • Sample editor:
  • Invert function now works correctly
  • Equaliser constants tweaked
  • No longer crashes when generating silence with no selection active
  • Noise generator on 64-bit systems
  • OSX: Core audio sample-rate switching
  • GUS frequencies lower than lowest note
  • Off-by-semitone issue in GUS patch loader
  • Corrupt display with window sizes that aren't multiples of 4
  • Windows: Window position gradually moving off-screen on restarts

11/03/2017 (v1.00.00):

What's new:

  • 5 new customisable colours
  • X-Y mouse scrolling support
  • FT2 panning law
  • MilkyTracker version number stored in .xm file
  • Upgrade to SDL 2
  • SDL2: Window scaling
  • OSX: Deprecated Carbon interface replaced with Cocoa
  • OSX: Drag and drop support
  • OSX: Support audio devices with >2 channels
  • OSX: Add custom document icons for supported file types
  • Posix: Follow XFG basedir spec for config file locations
  • Windows: Use system temp and config directories
  • Sample offset tool/preview ability (hold Ctrl/Cmd in sample editor waveform, left click for preview)
  • OSX: Add selectable filetype filter to file dialog
  • OSX: Native MIDI support
  • OSX: Allow selection of audio output device
  • Windows: WASAPI option for RtAudio driver
  • Shortcut keys to increment/decrement instrument number
  • LHA compressed modules load support
  • Moved to common CMake build system across all platforms
  • 3rd-party libraries removed from source tree
  • Horizontal mouse/touchpad scrolling
  • Mouse middle-click to solo channel
  • ..and more, see (commit log) for details

Bugs Fixed:

  • Segfault when loading <4 byte samples
  • Samples incorrectly offset when exporting .mod files
  • libalsa linker errors on some systems
  • .mod export: Don't zero first word of looping samples
  • Decompress files despite possible mis-identification
  • Windows: Determine window dimensions based on client area
  • Update view if paste changes pattern length
  • SDL: Unresponsive GUI in some situations
  • 16-bit sample loading bug
  • Windows: WaveOut crashes and deadlocks
  • Windows: Incorrect behaviour when mouse is dragged outside main window
  • Reversed Oktalyzer portamento effects
  • OSX: Sound driver samplerate mismatch under some circumstances
  • OSX: Miscellanous audio driver reliability problems
  • Windows: MIDI crash on 64-bit build
  • Various compiler warnings (many more remaining!)
  • Windows: Window occasionally appearing off the screen
  • Sample/Ins editor listboxes scrolled right in certain circumstances

07/11/13 (v0.90.86):

Whats New:

  • Unsafe notes now shown in red when "PT 3 octave limit" option enabled
  • Haiku port (thanks jua)
  • Additional FT2 shortcuts (forum post)
  • Android port (thanks guillaum1)
  • Jack driver now connects to first available physical device
  • MilkyTracker source code now hosted on GitHub

Bugs Fixed:

  • Loss of data when using 'backward' sample filter (forum post)
  • Warning displayed when exporting .mod files with samples over 64k (forum post)
  • Default panning settings applied when adding channels (forum post)
  • One-shot looping now works correctly (forum post)
  • First 2 bytes of samples cleared to zero when exporting to MOD (Amiga compatibility)
  • FT2 weirdness emulated when using the arpreggio command (thanks Saga_Musix)
  • In live mode, don't switch from pattern to song play when selecting a new pattern from the order list
  • Check config file is open for writing before attempting to save to it.
  • Don't assume BACKUPxx.XM has been saved
  • Crash when storing colour presets (forum post)
  • Segfault when loading XMs with zero-length loop (forum post)
  • Emulate FT2 behaviour for arpregios when speed>18
  • Able to load some non-standard S3M files
  • Incorrect sample format assumptions in IT loader (thanks Saga_Musix)
  • Various build warnings and errors

01/01/10 (v0.90.85):

Whats New:

  • Ability to move dialogs.
  • Keyboard shortcut Shift-U (unmute all).
  • Unix/SDL version now uses system libzzip.
  • Updated section panel to handle multiple pages.
  • Basic quicktime support on OSX.
  • LHA archive support.
  • Colour table import/export.
  • gzip compression support.
  • New font: IDC-Harmonica (12x12)
  • New font: IDC-MicroKnight (12x12)
  • Ability to detect desktop display resolution.
  • Added '1' as note-off key in MilkyTracker mode.
  • Ability to adjust screen magnification factor.
  • Milkyplay license changed from GPL to BSD (MilkyTracker remains GPL).
  • Working close button in OSX.
  • LZX compressor support.
  • Improved constants for 10 band EQ.
  • New font: Topaz 1.3 & Topaz 2.0 (8x8)

Bugs Fixed:

  • (Unix) JACK client thread gets zombified causing playback to block.
  • Crash when using the '-orientation ROTATE90CW' switch on SDL versions.
  • Screen input lock after showing a system message.
  • Bug in xm loader for old xm variant causing 8 bit samples to not load correctly.
  • Added FT2 note range clipping to live playback.
  • Improved live recording note-off.
  • Crash when unable to open a directory.
  • Experimental mod exporter fix.
  • Volume scale default volume for empty instrument/samples.
  • Modplug XM importer fix.
  • Crash when MilkyTracker attempts to load a non-existant file.
  • Dialog initalization bug (caused focus to miss in edit fields etc).
  • Font selection bug.
  • Mouse repeat bug on SDL version.
  • Small bug in SDL Midi code.
  • Little bug in the advanced edit panel (limit of subsequent channels).
  • Undefined .XM sample type 0x3 causes sample loop to appear "one shot".
  • Instrument vibrato depth value gets doubled when copying instruments.
  • PSM loader can now store sub-song information correctly.
  • XM loading problems with 16-bit odd sample sizes.
  • Support for callbacks on systems that don't use C style function calls (ie, OS/2)
  • Instrument fadeout value initially doesn't match the slider position when adding new instruments to a loaded module.
  • Selecting an instrument with the numpad doesn't update the instrument or sample editors with the selected instrument, but with the previous one.
  • Bug in auto-detection of playmode for XM modules (panning was not set).
  • Set envelope position after sustain points.
  • Ignored lower 3 bits of finetune for more accurate FT2 playback
  • Crash while loading sample during playback
  • Screen refresh issues
  • Problem with French keyboard layout.
  • The current pattern length under the song title isn't updated when the mod is zapped.
  • Shrinking a 2-row pattern isn't possible.
  • Undoing an action doesn't register as a change.
  • A slight graphical bug occurs when using the seq and cln buttons on the FEth pattern of a mod.
  • Crash when converting sample resolution.
  • Freeze on exit when using DirectSound on Windows 7.
  • Lots of other smalls bugs not worth mentioning.

04/13/08 (v0.90.80):

Important note:

This version of MilkyTracker will update your current configuration file in a way that it's no longer usable with older versions. It is recommended that you keep a backup of your configuration file. On Windows the configuration is stored in the application folder. When using MilkyTracker on OS X or Unix systems the configuration is stored in your home directory in a file called .milkytracker_config.

What's New:

  • Killer feature: Open up to 32 modules using tabs(*):
    • Allows simultaneous playback of different tabs
    • Copy pattern data/instruments/samples between tabs
  • New resamplers for improved sound quality:
    • Cubic Lagrange
    • Cubic Spline
    • Fast Sinc (window size 16, fixed point integer, sinc lookup table)
    • Precise Sinc (window size 128, double floating point)
    • Amiga 500
    • Amiga 500 LED
    • Amiga 1200
    • Amiga 1200 LED
  • Render parts of the song directly into a sample slot (from HD recorder)
  • Live switch toggle [L]
  • Track splitter insert note off toggle
  • Sample editor shows time in milliseconds according to currently selected relative note
  • Notes on muted channels appear in grey on the piano
  • Scopes also available with smoothed lines
  • Added option to always mixdown stereo samples, no more questions ;)
  • WAV loader recognizes loop points and also exports them

(*) Only available in the Desktop version of MilkyTracker

Bugs Fixed:

Replay

  • Fixed bug in bidirectional looping which caused clicks on short samples
  • Introduced smart loop area double buffering to eliminate sample looping clicks
  • Fixed issue when switching between 4xx and Vx
  • Fixed issue when having a Dxx on the last order and restart is not zero
  • Milky's note range was going slightly higher than that of Ft2's.

Other

  • CRASH/FREEZE: When trying apply crossfade on invalid selections in sample editor.
  • FREEZE: Optimize song can freeze MilkyTracker if the displayed pattern number no longer exists after optimization.
  • Bug in the XI-loader causes instrument vibrato settings not to be applied until some instrument setting is modified.
  • Cutting arpeggio commands by selecting only the operand digits leaves invisible 000 commands on the pattern that repeat the previous arpeggio from effect memory.
  • GUS patch loader note mapping more accurate now
  • Some custom screen resolutions lead to distorted rendering.
  • The Apple AIFF loader doesn't load big endian samples correctly.
  • Rewritten major parts of the GUI & editor code to be more reliable.
  • Countless bugs you might not even have found yet

05/20/07 (v0.90.60):

What's New:

  • New imported (obscure) module formats (mainly for personal satisfaction):
    • Another DSM format (Digisound Interface Kit library)
    • Another AMF format (DSMI library)
    • SFX (SoundFX)
  • Basic AIFF loader (Apple Sound Format, only reads uncompressed AIFF but allows for importing CD tracks directly on OS X)
  • Four new 8x8 fonts (thanks to idc and Rez)
  • Set custom screen resolution
  • Scrollbars in the list boxes dynamically show/hide depending on content (saves some space)
  • Row preview with Shift+Space
  • Song Preview Alt+Space
  • Integrated disk browser (click "flip" in the disk operations panel)
  • Sample editor got EQ filters now (3 and 10 bands)
  • Sample editor got waveform generators for sine, square, triangle and sawtooth
  • Solid scopes (ProTracker style, toggle in the config under the misc. tab)
  • Pattern replay is a bit more like Ft2 now (switching to different pattern doesn't reset cursor to row 0)
  • Clone button to clone the current order
  • "Mix paste" in the sample editor: paste in a sample from the clipboard and get it mixed with the current selection/entire sample.
  • As usually: more Ft2-compatible replay

Bugs Fixed:

Replay

  • A severe volume ramping bug has been fixed
  • Instrument auto vibrato ramp wave forms were swapped
  • Fixed several issues in the replayer which were causing problems when using EDx and Mx and similiar combinations

Other

  • Orders containing pattern number FF vanished from modules saved from Ft2.
  • Loading arbitrary files as samples adds the filename to the sample text.
  • The y-axis in the sample editor was flipped (negative side was on the top).
  • Toggling scopes in the config with the keyboard left the checkbox unaffected.
  • Crash: A bug in the IFF reader crashes MilkyTracker when loading some IFF samples.
  • Crash: After adding channels and saving as MOD.
  • Saving MOD with extended octaves (5 instead of 3) produces results like FT2 now.
  • Crash: (on Linux x86_64, strange behavior elsewhere): Caused by illegal 16-bit zero-length samples, as saved by Soundtracker.
  • Crash: when loading modules without instruments.
  • FREEZE: when zooming way in/loading LOOONG instrument envelopes.
  • FREEZE (on Windows Vista): when initializing audio on startup.
  • Assigning samples to notes in the instrument editor by clicking and holding (painting) doesn't have effect on C-0.
  • Certain hot words in song titles cause incorrect module format detection (improved at least ;)).
  • Clear button above sample box didn't work properly.
  • Dxx on the last row of a pattern caused a display error when xx is greater than the number of rows on the current pattern.
  • Insert silence screwed up 16 bit samples.
  • Instrument panning settings defaulted to center on key-release when key-jamming.
  • Optimizer functions "Minimize all samples" and "Samples to 8-bit" triggered one another when only one of them were selected.
  • Selection block is truncated to current pattern length (you know, after being taller on a taller pattern).
  • Several things like applying sample editor filters and using the optimizer reset global volume.
  • Other things I can't remember :P

09/26/06 (v0.90.50), Tons of fixes and added features:

What's New:

  • New platforms supported:
    • FreeBSD (x86)
    • Linux (x86, x86_64, PowerPC, ARM, GP2X)
    • Solaris 9 & 10 (SPARC)
    • Windows (ANSI)
    • Windows CE Handheld PCs and the Gizmondo
  • New imported module formats:
    • DBM (DigiBooster Pro)
    • GMC (Game Music Creator)
    • IT (Impulse Tracker)
      • NOTE: MilkyTracker will remain an Ft2 clone, importing converts everything to this environment and accurate playback is not pursued. It's just like with the rest of the imported formats apart from MOD and XM.
      • MORE IMPORTANTLY: MilkyTracker refuses to import modules with more than 32 channels. It's not that the XM format couldn't handle it but the Fasttracker II framework doesn't, so there.
  • Low-latency audio driver support:
    • ALSA on Linux
    • ASIO and DirectX on Win32, thanks to RtAudio
      • 48kHz mixing resolution now available also on Win32. NOTE: MMSYSTEM/WaveOut can't handle 48kHz, so don't mix these two.
  • Adjustable MOD channel panning
  • Adjustable opacity for muted channels
  • Alternate view in the main panel showing Add, Octave and Global volume values
  • Fasttracker II edit mode and scrolling style loaded by default
  • MIDI in with velocity and note delay/off recording (works on your QWERTY too), thanks to RtMidi
  • Module optimization panel
  • Pattern row highlighting, two independent intervals
  • Sample editor noise generators
  • Selectable pattern/UI fonts
  • Skippable splash screen
  • Volume boost/fade dialogs accept negative values (useful for chip sample generation, sample phase inversion etc)

Bugs Fixed:

Replay

  • A rogue EDx note delay without a note should retrigger the previous note when x is lesser than or equal to song speed.
  • EDx+EEy, that is delayed notes on a pattern delayed row played when x was larger than or equal to the song speed. Sadly, this shouldn't happen according to Ft2, thus it doesn't anymore.
  • E5x finetune setting implemented.
  • E9x note retrig was a little off, now it's ever closer to Ft2.
  • F00 speed setting wasn't implemented, now it stops playback
    • Fasttracker II slows down to advancing one row every 10 or so minutes. If you can justify this behavior, i.e. convince us how you can rationally utilize it (a 10 minute pause) in a song, it will be implemented.
  • K00 did not send a noteOff but set the volume to zero.
  • Mx volume column tone portamento acted as M0 when starting a song from scratch and you couldn't actually enter an M0 because a 1 was was automatically filled in as the parameter. All fixed and dandy now.
  • Rxx multiretrig, see E9x.
  • Something clicked in the mixer, literally. Now smoother than a baby's butt.

User interface

  • A channel could get stuck playing only one instrument when volume ramping was off. Ain't life peculiar?
  • A crash happened when selecting a range in sample editor and the mouse was released outside the MilkyTracker window followed by a cut or copy operation. You see the selection was still in progress and the poor tracker got confused because it didn't know where the range started/ended.
  • A pattern that was deleted from the orderlist remained on the screen.
  • An instrument stayed selected after it had been removed with the minus button.
  • Block operation areas did not always match block selections.
  • Global volume wasn't reset on stop/play.
  • Key release now effects the correct note (not necessarily the note that is playing).
  • Multisample instruments got rearranged/optimized automatically.
  • Scrollbar positions were reset upon screen switches. Added botox.
  • Standard-breaking XI instruments (w/ stereo and more than 16 samples) were crashing MilkyTracker. Now stereo is converted to mono and surplus samples are dismissed.
  • The MilkyTracker window insisted on staying topmost after switching from fullscreen to windowed.
  • The F10 key brought up the system menu on Win32. Now it just jumps to row 10h like it's supposed to.
  • The selection disappeared after pasting a block. Doesn't anymore.
  • When tabbing to a channel outside the current display, the screen shifted one whole "page". Very confusing for young, fragile artists. Now it moves one channel at a time, à la Ft2.

02/14/06 (v0.90.30), Mainly bugfixes and minor additions:

Bugs fixed:

  • ProTracker modules using 'one shot'-looped samples seem to crash the replayer sometimes. Fixed.
  • There was a bug in the mod exporter when trying to export samples with a loopstart set to 0. Fixed.
  • The windows version would crash when inserting MANY points between two points in an envelope. Fixed.
  • The right-left combined mouse click on the scopes didn't work properly. Fixed.
  • switching between the loop types caused crashes. Fixed.
  • Redo filter seems to crash/erase sample in the win32 version. Fixed.
  • Retrig command was still a little bit buggy (when used in combination with delay note). Fixed.
  • Arpeggio was still a little bit buggy (won't be noticed when tickspeed%3 == 0). Fixed.
  • Putting a position jump inbetween a pattern loop will cause the song length estimator to hang in an infinite loop. Fixed.
  • Trying to enable the volume envelope when it says 'none selected' in the envelope editor Milky would crash. Fixed.
  • Block transpose up/down was buggy. Fixed.
  • Pattern Len display isn't updated to reflect new length after block was pasted and pattern grew. Fixed.
  • Scopes didn't update after loading samples/instruments
  • Dozens of other fixes…

Features added:

  • Multichannel record/keyjazz/editing (like in FT2)
  • Disable pattern grow when pasting
  • Enable "by channel tabbing" (like in FT2)
  • Instrument quick select using numerical keypad
  • Select sample within instrument in FT2 edit mode (Shift+Alt+Up/Down)
  • Emulate insert key with Ctrl+Up in the OSX version (select from the OSX main menu under option "special")
  • Dragging files from the win-explorer/osx finder into the MilkyTracker window loads the file (works for modules, instruments, patterns, tracks, samples etc.)
  • Load/Save IFF samples
  • More WAV sample types recognized and loaded
  • Improved Protracker compatibility
  • More options on the replayer for improved module playback compatibility
  • Playmodes can now be saved to be the default playmode
  • Even more FT2 keyboard shortcuts (F9-F12, look in the doc for more info)
  • Even more customizing support, see config.
  • PocketPC: Added scopes as well
  • PocketPC: Jam page with extended keyboard or pattern

11/29/05 (v0.90.00), Lots of improvements, really can't remember them all:

  • Improved mixer, improved FT2 effect compatibility (especially tremolo, tremor, vibrato)
  • Scopes (finally) (only for Desktop versions)
  • Configurable colors (config->layout)
  • Disk writer (Ctrl+R)
  • FT2 like pattern follow: cursor line always in center center
  • Prospective mode and toggle follow song mode
  • Volume scale (Shift/Alt/Ctrl+V like FT2)
  • Load GUS patches (needs to be loaded as instrument)
  • Load every file as sample (good for making noise samples)
  • Dozens of sample filters
  • Reworked GUI (especially menus)
  • Sample offset can be shown in sample editor
  • Drawing samples (but remember to turn on looping, otherwise doesn't sound good ;))
  • Toggle Hex count for rows in pattern editor
  • Show zero effect as 00 instead of dots (see config->layout)
  • Improved Protracker 2.x, 3.x replay modes (see options)
  • Skip through song while it's playing (with cursor keys or scrollwheel)
  • Time length calculation/play time meter
  • Peak meters
  • Sequencer button (see order list)
  • Hold the Alt Key in the sample editor to move entire loop not only loop/end
  • Tons of other fixes…
  • More things to find out…

10/07/05:

  • Fixed crash when saving .MODs
  • Implemented Lxx command (set envelope position)
  • New: Hold down Ctrl (Apple on OSX) to resize selection in sample editor
  • New: Zoom sample in/out by using the scroll wheel of your mouse
  • New: Swap channels (select source with cursor and swap with destination channel by menu)
  • New: Split track (spread notes from one channel across subsequent channels)
  • New: Use virtual channels when playing instruments (enable in config first) (instruments played on virtual channels won't cut instruments used in song)
  • Other stuff (don't remember all of it)

09/01/05:

  • Fixed lots of crashes =)
  • cut/copy/paste works in sample editor (hopefully, not much tested yet)
  • you're able to change default screen resolution but you need to restart MilkyTracker to apply
  • Save patterns/tracks in FT2 formats .XP/.XT
  • Save Protracker compatible mods
  • Fixed some small issues

07/01/05:

  • Fixed lots of crashes
  • Undo/Redo in sample editor (cut/copy/paste is following soon)
  • Minor cosmetical changes
  • Vibrato volume command now works in pattern editor (press "v")
  • Vibrato speed volume command now works in pattern editor (press "s")
  • X command works in pattern editor
  • MOD loader now recognises 15 channel mods
  • Added "large" font for tracking <= 4 channel songs ;)
  • Del. key can be used for deleting note+ins./volume/effect

06/22/05:

  • !! Fixed bug that caused MilkyTracker to crash when selecting empty samples (sorry for that one)
  • Fixed bug with ALT+F4 when using FT2 shortcuts and Windows =)
  • Paste of tracks and patterns always insert at row 0, not at cursor
  • Added possibility to expand orderlist listbox
  • Added predefined envelopes
  • Changed instrument color (one day it will be possible to select your own colors ;))
  • More minor fixes

06/13/05:

  • Improved sample position markers
  • Added envelope position markers
  • Improved XM replayer (fixed FT2 note clipping when playing arpeggios)
  • Added more FT2 keyboard shortcuts (Ctrl+I, Ctrl +S, Ctrl +X etc.)
  • Minor fixes + Additions
  • Added support for mouse scrollwheel
  • PocketPC: "Full" onscreen keyboard (probably still buggy)

05/27/05:

  • Right (1st) & Left click (2nd) on channel box cycles between solo channel/unmute all (Alternatively hold ALT key and left click on channel box)
  • Del. now deletes note & instrument in FT2 mode
  • Pattern scrolling is now buffer independent on Win32/WinCE (Not necessary under OSX because of much smaller buffer sizes =))
  • Added another pattern scroll style (cursor scrolls to the center and keeps center until the last page)

05/22/05:

  • Due to request MilkyTracker now features a FT2 compatibility mode. You can switch between MilkyTracker (modern ;)) and FT2 edit modes in the config screen. (See MilkyTracker manual for details.) Note: Not all FT2 commands are implemented yet, but the most important ones for editing are included.
  • Hopefully fixed some keyboard layout problems

05/14/05:

  • Fixed some "focus" issues
  • Divided "save" option into "save" and "save as…"
  • Added value interpolation (available in the "Advanced Editor")
  • Fixed an instrument load/save issue
  • PocketPC: Fixed bug, which prevented the progress bar from disappearing when saving instruments/samples.

05/06/05:

  • Minor optimizations making the GUI more responsive
  • Toggle focus of pattern editor by pressing space
  • Play song from current order by pressing enter
  • Play pattern by pressing ctrl+enter
  • Play pattern from current position by pressing shift+enter
  • PocketPC: Explicit hiding of SIP (does this solve any problems?)
  • PocketPC: Minor facelifts

04/29/05:

  • Added possibility to swap/copy samples from one instrument to another
  • Fixed major bug in XI loader
  • Increased button autorepeat delay
  • PocketPC version: GAPI is now properly shut down before opening the common file dialog

04/25/05:

  • First "official" PocketPC pre-release.
MilkyTracker-1.02.00/docs/FAQ.html000066400000000000000000000265071324432207300165120ustar00rootroot00000000000000 Frequently Asked Questions about MilkyTracker

Frequently Asked Questions about MilkyTracker

Here are some questions answered which get asked on the forum and on IRC from time to time.

  1. Where can I find a list of all the effect codes?
  2. Where can I find a list of all the keyboard shortcuts?
  3. Why does MilkyTracker look different from Fasttracker II?
    • The GUI of MilkyTracker has been adjusted to fit low resolution displays with 320x240 pixels. Thus the screen can be more easily divided into seperate pages.
  4. Where are the extended Sample Editor functions (S.E.Ext.)?
    • In the sample context menu, just right-click / tap'n hold in the sample area. The Pattern and Instrument Editors have their context menus too, you know.
  5. Why does my .XM sound different from Ft2 in MilkyTracker?
    • MilkyTracker tries to play XMs as accurate as possible but there are still known and unknown issues. Most of them are rare but if you find one, report it to us and we'll try to fix it.
  6. Why does my .XM sound different from ModPlug/Schism/WinAMP/xxx in MilkyTracker?
    • MilkyTracker aims to reproduce Ft2 playback as closely as possible while other players/trackers don't do that, so if you think your track is being messed up in MilkyTracker compare it to Ft2 first. If it still sounds weird, see the question above.
  7. Why doesn't MilkyTracker load my .XM (created in ModPlug)?
    • Unless the module is otherwise corrupt, it probably features more than 32 channels. In Fasttracker II, 32 is the maximum.
  8. Why does MilkyTracker play my IT/S3M/xxx module wrong?
    • Well, MilkyTracker is an XM tracker. It will play all other tunes (except for .MOD) the way Ft2 would do it. Every feature from other modules not being XM compatible will be thrown out when importing the song.
  9. What do the buttons SEQ, CLN, F, P, W and L do?
    • SEQ stands for sequence, the button inserts the next unused pattern in the pattern order table.
    • CLN stands for clone, it does the same as SEQ but additionally it copies the data from current pattern to the new one.
    • The F button toggles song following. Disabling it enables you to better edit the song while it is playing.
    • The P button toggles prospective pattern view. When disabled, you see one pattern at a time. When enabled, the patterns show as a continuous strip.
    • The W button toggles pattern wrapping. Basically it either allows you to freely move from pattern to pattern while editing or helps you concentrate on one pattern at a time.
    • The L button toggles live mode. This affects the pattern change behavior. When it's off, changing song positions is instant. In live mode, the change happens after the current pattern has been finished which allows seamless skipping from one part of a song to another. Repetitions, jamming, you know, generic live stuff.
  10. What are Jam channels?
    • Jam channels enable you to play notes live on your MIDI or computer keyboard independent of the song channels. If disabled, note polyphony is restricted to whatever number of channels the song has.
  11. Does MilkyTracker support MIDI?
    • MilkyTracker supports some basic MIDI INPUT, which means you can use your MIDI device to feed notes into MilkyTracker. See the documentation for instructions on how to enable MIDI In on different platforms.
  12. Can you port MilkyTracker to platform xxx?
    • Unfortunately my time is rather limited at the moment so first you need to know some things about MilkyTracker:
    • MilkyTracker is written in a platform independent fashion and uses a rather primitive approach of software rendering to make porting as easy as possible. On the downside this means MilkyTracker needs quite some CPU power. At the bottom end of the desktop version MilkyTracker requires at least around 300Mhz to run MilkyTracker in 640x480x16 bit color. This might seem quite a bit, but actually it's nothing compared to nowadays computer speeds. MilkyTracker was never written with old computer systems in mind. The low resolution version (320x240) will probably run on systems offering 150Mhz or more but 320x240 is the only supported low resolution mode.
    • MilkyTracker is *heavily* mouse centered. And I really mean *heavy*. Controlling MilkyTracker with a few buttons only will not be fun and totally useless and I'm not going to waste time on a port for a device without a mouse equivalent (touch screen etc.). Please understand that porting itself often requires quite an amount of time and still doesn't guarentee MilkyTracker to be fully useable.
    • Now that MilkyTracker is open-source the opportunity exists for anyone with enough motivation to port MilkyTracker to whatever platform they desire.
  13. Why isn't there a PSP/NDS port of MilkyTracker?
    • Because noone has had the motivation to write one. Perhaps you do :)
  14. Can you tell me a bedtime story?
    • Yes. Once upon a time…
      11:32	anyguy has joined #MilkyTracker
      11:32	pailes yawns
      11:32	<anyguy> Hi
      11:32	<pailes> hi there
      11:33	<anyguy> this sounds terrible, but i just downloaded milky traker and i have no idea how to use it
      11:33	<anyguy> any help?
      11:34	<pailes> load a song
      11:34	<pailes> play it
      11:34	<pailes> maybe watch the video tutorials
      11:34	<anyguy> the vids on youtube were no help
      11:34	<pailes> what was the problem?
      11:35	<anyguy> i have no idea how to work milky traker
      11:35	<pailes> I guess you have to be more specific
      11:36	<anyguy> i cant even make a simple sound or track
      11:36	<pailes> can you load a song and play it?
      11:36	<anyguy> no clue how?
      11:37	<pailes> "load" a song 
      11:37	<pailes> there is a "load" button
      11:37	<pailes> which suggests you should press it to load a song
      11:37	<anyguy> i know, but its all... blah, file types
      11:38	<anyguy> error loading file type
      11:38	<pailes> you can only load songs which have the .xm extension
      11:38	<pailes> i.e. some of the songs which are included in the milkytracker distribution package
      11:39	<anyguy> nice, but how do i edit or build on that?
      11:39	<pailes> first I suggest to press the config button
      11:40	<pailes> then select the misc. tab by pressing the misc. button
      11:40	<pailes> and switch to milkytracker edit mode
      11:40	<pailes> this mode will be easier to use
      11:41	<pailes> for people not having any tracking background
      11:41	<anyguy> so for now on out, trial and error?
      11:41	<anyguy> this is alien to me
      11:41	<pailes> when you have enabled milkytracker edit mode you can edit pattern data by clicking into the pattern, this will focus the pattern editor
      11:41	<pailes> rec. will turn red
      11:42	<anyguy> i see
      11:42	<pailes> which means you can edit pattern data
      11:42	<pailes> you can enter regular notes by pressing keys on your pc keyboard
      11:42	<pailes> c, c#, d, etc.
      11:43	<anyguy> how do i clear it all and use the samples
      11:43	<pailes> pres "zap" and then "song"
      11:43	<pailes> it will preserve the samples
      11:44	<anyguy> so how do i start now?
      11:44	<pailes> try to find which key on the keyboard maps to which note... there are also some documents which you can read to understand how a tracker works
      11:45	<pailes> you can change the octave with the function keys btw. only two octaves of notes are available at a time through the keyboard, if you want to change the octave you need to do it manually 
      11:45	<anyguy> can i change the speed?
      11:47	<pailes> you do that by inserting a speed command in the last column of a track (a track are those vertical units in the pattern)
      11:47	<pailes> everything is done using those commands
      11:49	<pailes> maybe this helps: http://en.wikipedia.org/wiki/Tracker
      11:50	<pailes> although this article is a little bit outdated
      12:06	<anyguy> god i suck at this
      12:16	<anyguy> i dont know what im doing wrong here
      12:17	<pailes> you can't learn tracking in a few minutes... it really takes some dedication and time
      12:17	<anyguy> how do i start though
      12:19	<pailes> reading and trial and error
      12:20	<pailes> and loading songs and listen to them and find out how they're made by altering sample and pattern data
      12:25	<anyguy> blaw
      12:25	anyguy has disconnected: Quit: Saving BACKUP.XM...
      12:26	<pailes> yes, bye bye
      The end.
MilkyTracker-1.02.00/docs/MilkyTracker.html000066400000000000000000003233441324432207300205030ustar00rootroot00000000000000 MilkyTracker Manual v1.02

MilkyTracker Manual v1.0.1

Hello and welcome to MilkyTracker, an open source multi-platform Fasttracker II compatible music tracker program. This document holds a lot of valuable information about the tracker but it's not a tracking manual. If you want to learn more about tracking and how it's done, the Internet is your friend. We host some resources on MilkyTracker.titandemo.org as well.

Disclaimer:

MilkyTracker is under development so use it at your own risk. The team is not responsible for any loss of data and/or hardware damage caused by MilkyTracker.

Now, with the formalities taken care of, let's have a look at the…

Table of Contents

  1. Supported platforms
  2. Overview
  3. Features
    1. Resamplers
    2. Tabs
  4. Imported and exported file formats
    1. Modules
    2. Samples
    3. Instruments
    4. Patterns and Tracks
  5. Keyboard shortcuts
    1. MilkyTracker edit mode
    2. Fasttracker II edit mode
  6. Effect command reference
    1. Glossary
    2. Effect commands
  7. MIDI support
  8. Known issues and bug reports
  9. Credits
  10. Contact
  11. Donations

1. Supported platforms

MilkyTracker currently runs on the following platforms:

  • AmigaOS 4
  • AROS
  • *BSD
  • GNU/Linux
  • Haiku
  • Mac OS X
  • Microsoft Windows 9x/NT/Me/200x/XP/Vista
  • Microsoft Windows CE 3.0+/Mobile

It has also been known to run on:

  • Xbox (GNU/Linux)
  • Solaris 9 & 10
  • Sony PlayStation Portable

You can run MilkyTracker on other platforms by compiling from source.

2. Overview

MilkyTracker is an open source, multi-platform music application; more specifically part of the tracker family. It attempts to recreate the module replay and user experience of the popular DOS application Fasttracker II, with special playback modes available for improved Amiga ProTracker 2.x/3.x compatibility. MilkyTracker is not "another Windows tracker", which should already be made obvious by the plethora of supported desktop and portable platforms. In fact it started as a project to bring tracking to the Pocket PC. When this milestone was reached, the next one was creating a truly FT2 compatible tracker for portable as well as modern desktop platforms.

3. Features

  • Fasttracker II-like, custom graphical user interface with context menus
  • Supported on multiple platforms including portable devices
  • Very accurate .XM replay compared to FT2
  • ProTracker 2/3 playback modes for playing and editing .MOD files
  • Various resampler options including emulated Amiga 500/1200 sound output
  • Choose between a modern and a true-to-FT2 editing scheme / keyboard layout
  • Tabbed user interface for opening and playing up to 32 modules simultaneously and for exchanging data between them
  • Over 30 imported module formats
  • Basic archive support for loading zipped, powerpacked and UMX modules directly
  • Rendering songs/patterns to disk (.WAV) or directly to sample
  • Powerful sample editor featuring waveform generators
  • In-depth instrument editor featuring envelope zooming and scaling and support for copying and swapping instruments and samples across tabs
  • Copy/swap dialog for instrument management
  • Undo/redo in pattern/sample/instrument editor
  • Low latency audio driver support
  • MIDI In support
  • Module optimizer
  • Internal file browser option
  • Various font sizes for improved visibility of pattern data
  • Prospective pattern view option
  • Playing and editing simultaneously
  • Live mode for seamless pattern changes

Resamplers

MilkyTracker offers various resampling options for module playback, rendering and sample processing. These are:

  • No interpolation
  • Linear interpolation
  • Cubic Lagrange
  • Cubic Spline
  • Fast Sinc (window size 16, fixed point integer, sinc lookup table)
  • Precise Sinc (window size 128, double floating point)
  • Amiga 500
  • Amiga 500 LED
  • Amiga 1200
  • Amiga 1200 LED

While the choice of resampler is a matter of personal taste, you should keep in mind that Linear interpolation represents the highest quality option available in Fasttracker II so that's what the majority of .XM files were probably made (to be played) with. Many chiptunes will however sound very muffled with interpolation because of their short samples and therefore relatively greater impact of interpolation. The Amiga modes are meant to be used with 4 channel .MODs only. Precise Sinc is a CPU killer - great for resampling in the sample editor but don't expect hot real-time performance.

Tabs

MilkyTracker enables you to open and play up to 32 modules simultaneously and to exchange data between them. Initially, tabs are invisible but can be activated with keyboard shortcuts described below. There are some configurable options for tabs as well, like automatically opening modules in new tabs and background stopping behavior control. You can choose to never stop playback on background tabs, or to automatically stop on tab change or stop when playback on another tab is started. Playback can also resume upon returning to a tab.

4. Imported and exported file formats

I. Modules

MilkyTracker can import a wide range of tracker module formats but since Milky is a FT2 clone, modules are replayed in an FT2 environment which means not all features of different formats are supported. MilkyTracker also has basic archive support, so it's possible to load zipped, powerpacked and UMX modules directly.

Import:

.669669 Composer/Unis669 (PC)
.AMFAsylum Music Format ("Crusader" in-game music) (PC)
Digital Sound and Music Interface (DSMI) library (PC)
.AMSExtreme Tracker (PC)
Velvet Studio (PC)
.CBAChuck Biscuits+Black Artist module format (PC)
.DBMDigiBooster Pro (Amiga)
.DIGIDigibooster 1.0-1.7 (Amiga)
.DSMDigisound Interface Kit (DSIK) library (PC)
Dynamic Studio (PC)
.DTMDigital Tracker (Atari)
DigiTrekker 3.0 (PC)
.FARFarandole Composer (PC)
.GDMGeneral Digimusic (PC)
.GMCGame Music Creator (Amiga)
.IMFImago Orpheus (PC)
.ITImpulse Tracker (PC)
.MDLDigiTrakker 1.0-3.0 (PC)
.MODSound-/ProTracker and variants (Amiga & PC)
.MTMMultiTracker (PC)
.MXMCubic Tiny XM (PC)
.OKTOktalyzer (Amiga)
.PLMDisorderTracker II (PC)
.PSMEpic MegaGames MASI (PC)
.PTMPolyTracker (PC)
.S3MScream Tracker 3.0 (PC)
.SFXSoundFX (Amiga)
.STMScream Tracker 2.0 (PC)
.ULTUltraTracker (PC)
.UNIMikMod (PC)
.XMFasttracker II (PC)

MilkyTracker's song export options are the same as Fasttracker II's. MilkyTracker also features ProTracker 2.x and 3.x playback modes for .MODs.

Export:

.MODProTracker boundaries (including 64kb max sample length), although can save 2–32 channels
.WAVMicrosoft/IBM PCM Waveform audio rendering
.XMFasttracker II compatible, not as common as one might think

II. Samples

Milky can load practically anything as RAW PCM audio samples; one of FT2's famous features.

Import:

.8SVX / .IFFCompressed/uncompressed Interchange File Format
.AIF / .AIFFApple Audio Interchange File Format
.WAVMicrosoft/IBM uncompressed PCM Waveform audio
.*RAW PCM audio

Export:

.IFFUncompressed Interchange File Format
.WAVMicrosoft/IBM uncompressed PCM Waveform audio

III. Instruments

MilkyTracker can load and save FT2's eXtended Instrument (.XI) format and additionally import Gravis Ultrasound GF1 Patch (.PAT) files.

IV. Patterns and Tracks

MilkyTracker handles FT2's eXtended Pattern (.XP) and eXtended Track (.XT) files with full compatibility.

5. Keyboard shortcuts

By user request, MilkyTracker features two edit modes. You can switch between these in the Config screen (Misc. tab). To learn about the differences and which might better suit you, read the appropriate sections below. There are a couple of shortcuts that are the same for both modes so let's clear those out of the way first:

Please note that under Mac OS X the Command key is used instead of the Ctrl key.

Alt-EnterSwitch between full screen and windowed display (Windows & SDL)
Shift-Command-FSwitch between full screen and windowed display (OS X)
Shift-MMute current channel
Ctrl-Shift-MInvert muting
Shift-UUn-mute all
Ctrl-Shift-TOpen a new tab
Ctrl-Shift-WClose current tab
Ctrl-Shift-LeftSelect previous tab
Ctrl-Shift-RightSelect next tab
Ctrl-=Increment instrument number of all notes in the current selection
Ctrl--Decrement instrument number of all notes in the current selection
Ctrl-Shift-=Increment instrument number of all notes in the current track under the cursor
Ctrl-Shift--Decrement instrument number of all notes in the current track under the cursor

I. MilkyTracker edit mode

The MilkyTracker mode basically is a bit more "modern" because you can focus on different parts (e.g. Pattern Editor, Instrument listbox, Sample listbox etc.) and when you're pressing keys, they're routed to the focused control. Keyboard shortcuts are also more standard; you can select by pressing the SHIFT key and navigating with the cursor keys, cut, copy & paste by using Ctrl-X/C/V etc. Users who are new to tracking will probably find this a bit more intuitive.

Section switching:

Ctrl-Alt-
AAdvanced edit
CConfiguration
DDisk operations
IInstrument editor
RDisk recorder
SSample editor
TTranspose
XMain screen
ZToggle scopes

Global:

2, 3, 5, 6…Play / insert notes (depending on whether edit mode is on)
Q, W, E, R…
S, D, F, G…
Z, X, C, V…
F1…F8Select octave
Ctrl-Shift-1…8
SpaceToggle pattern editor focus (edit mode on/off)
EnterPlay song from current order
Ctrl-EnterPlay current pattern from beginning
Shift-EnterPlay current pattern from cursor position
Shift-F9Play current pattern from beginning (same as Ctrl-Enter)
Shift-F10Play current pattern from position after the first quarter of the pattern length
Shift-F11Play current pattern from position after the second quarter of the pattern length
Shift-F12Play current pattern from position after the third quarter of the pattern length
Alt-SpacePlay song from current row (stop and return when keys are released)
Shift-SpacePlay row by row
EscStop
Ctrl-FToggle song follow
Ctrl-PToggle prospective pattern view
Ctrl-WToggle pattern wrapping
Ctrl-LToggle pattern change behavior (live mode)
Ctrl-OLoad song
Ctrl-SSave song
Ctrl-Shift-SSave song as…
Ctrl-QExit program
Alt-F4

Pattern Editor:

Cursor keysMove around
TabJump to next channel
PageUpJump 16 rows up
PageDownJump 16 rows down
HomeJump to first row
EndJump to last row
F9Jump to beginning of the pattern
F10Jump to position ¼ through the pattern
F11Jump to position halfway through the pattern
F12Jump to position ¾ through the pattern
Ctrl-ZUndo
Ctrl-YRedo
Shift-Cursor keysSelect block
Shift-Alt-Cursor keysExtend block
Ctrl-ASelect entire pattern
Ctrl-XCut
Ctrl-CCopy
Ctrl-VPaste
Ctrl-IInterpolate values
DeleteDelete note/instrument/volume/effect/parameter
Shift-DelDelete note, volume and effect at cursor
Ctrl-DelDelete volume and effect at cursor
Alt-DeleteDelete effect at cursor
InsertInsert space on current track at cursor position
Shift-InsertInsert row at cursor position
BackspaceDelete previous note
Shift-BackspaceDelete previous row
The key right of LShiftEnter key-off
The key below EscEnter key-off (Windows only)
1Enter key-off (OS X only)
Alt-MinusIncrease Add value
or Alt-PlusDecrease Add value

Transpose:

Alt-F7Transpose current instrument in block down
Alt-F8Transpose current instrument in block up
Shift-F7Transpose current instrument in track down
Shift-F8Transpose current instrument in track up
Ctrl-F7Transpose current instrument in pattern down
Ctrl-F8Transpose current instrument in pattern up
Alt-F1Transpose all instruments in block down
Alt-F2Transpose all instruments in block up
Shift-F1Transpose all instruments in track down
Shift-F2Transpose all instruments in track up
Ctrl-F1Transpose all instruments in pattern down
Ctrl-F2Transpose all instruments in pattern up

Sample Editor:

Shift & dragQuick draw
Ctrl & dragResize selection
Alt & dragMove selection or loop range

II. Fasttracker II edit mode

The FT2 edit mode is for the die-hard FT2 users and probably isn't very intuitive to beginners. Please note that not all FT2 shortcuts are implemented yet and some may differ for various technical reasons. Also note that this edit mode may not be optimal on Pocket PC because of the limitations of some input devices.

Section switching:

Ctrl-
AAdvanced edit
CConfiguration
DDisk operations
IInstrument editor
RDisk recorder
SSample editor
TTranspose
XMain screen
ZToggle scopes

Global:

2, 3, 5, 6…Play / insert notes (depending on whether edit mode is on)
Q, W, E, R…
S, D, F, G…
Z, X, C, V…
F1…F8Select octave
Right CtrlPlay song from current order
EnterPlay song from current order
Right AltPlay current pattern from beginning (Windows &SDL)
Ctrl-EnterPlay current pattern from beginning
Shift-EnterPlay current pattern from current row
Shift-F9Play current pattern from beginning (same as Ctrl-Enter/Right Alt)
Shift-F10Play current pattern from position after the first quarter of the pattern length
Shift-F11Play current pattern from position after the second quarter of the pattern length
Shift-F12Play current pattern from position after the third quarter of the pattern length
Alt-SpacePlay song from current row (stop and return when keys are released)
Shift-SpacePlay row by row
SpaceStop / Edit
Shift-LeftIncrease song position
Shift-RightDecrease song position
Ctrl-LeftIncrease current pattern number
Ctrl-RightDecrease current pattern number
Ctrl-F9Delete current order position
Ctrl-F10Insert new order position
Ctrl-F11Decrease current order pattern number
Ctrl-F12Increase current order pattern number
Key below ESC (ANSI: Alt-Minus)*Increase Add value
Shift-key below ESC (ANSI: Alt-Plus)*Decrease Add value
Ctrl-FToggle song follow
Ctrl-PToggle prospective pattern view
Ctrl-WToggle pattern wrapping
Ctrl-LToggle pattern change behavior (live mode)
Shift-Ctrl-LLoad song
Shift-RToggle record mode
Shift-Ctrl-SSave song
EscExit program

* Please note in this table, "Key under esc" refers to the tilde / tick key, section symbol / plusminus key or the ring accent / circumflex key depending on your ISO keyboard, but does not exist on ANSI layouts. See: this issue for details

Pattern editor:

Cursor keysMove around
PageUpJump 16 rows up
PageDownJump 16 rows down
HomeJump to first row
EndJump to last row
TabJump to next track
Shift-TabJump to previous track
Alt-Q…IJump to track (0…7) MOD N-Channels
Alt-A…KJump to track (8…15) MOD N-Channels
F9Jump to beginning of the pattern
F10Jump to position ¼ through the pattern
F11Jump to position halfway through the pattern
F12Jump to position ¾ through the pattern
The key right of LShiftEnter key-off
Caps-LockEnter key-off (Windows only)
1Enter key-off (OS X only)
DelDelete note or volume column at cursor
Shift-DelDelete note, volume and effect at cursor
Ctrl-DelDelete volume and effect at cursor
Alt-DeleteDelete effect at cursor
InsInsert space on current track at cursor position (F13 on mac)
Shift-InsInsert row at cursor position (shift-F13 on mac)
BackspaceDelete previous note
Shift-BackspaceDelete previous row

Clipboard operations:

Alt-Cursor keysSelect block
Shift-Alt-Cursor keysExtend block
Alt-F3Cut block
Alt-F4Copy block (yes, even under Windows =)
Alt-F5Paste block
Alt-F6Porous paste block
Shift-F3Cut track
Shift-F4Copy track
Shift-F5Paste track
Shift-F6Porous paste track
Ctrl-F3Cut pattern
Ctrl-F4Copy pattern
Ctrl-F5Paste pattern
Ctrl-F6Porous paste pattern

Additional shortcuts (not found in FT2):

Ctrl-Alt-ZUndo
Ctrl-Alt-YRedo
Ctrl-Alt-ASelect entire pattern
Shift-IInterpolate values

Volume scaling:

Alt-VVolume scale block
Shift-VVolume scale track
Ctrl-VVolume scale pattern

Command/Volume macro:

Shift-Alt-1…0Read command/volume at cursor
Alt-1…0Write command/volume at cursor

Transpose:

Alt-F7Transpose current instrument in block down
Alt-F8Transpose current instrument in block up
Shift-F7Transpose current instrument in track down
Shift-F8Transpose current instrument in track up
Ctrl-F7Transpose current instrument in pattern down
Ctrl-F8Transpose current instrument in pattern up
Alt-F1Transpose all instruments in block down
Alt-F2Transpose all instruments in block up
Shift-F1Transpose all instruments in track down
Shift-F2Transpose all instruments in track up
Ctrl-F1Transpose all instruments in pattern down
Ctrl-F2Transpose all instruments in pattern up

Instrument selection:

Shift-UpSelect previous instrument
Shift-DownSelect next instrument
Ctrl-Shift-UpSelect previous sample
Ctrl-Shift-DownSelect next sample

You can also quick-type the hex-number of the instrument you want to select on the numeric keypad, the layout is like this:

PCMac
Num 0…9Num 0…9Digit 0…9
Num /Num =Digit A
Num *Num /Digit B
Num -Num *Digit C
Num +Num -Digit D
Num EnterNum +Digit E
Num ,Num EnterDigit F

Sample editor:

Shift & dragQuick draw
Ctrl & dragResize selection
Alt & dragMove selection or loop range

6. Effect command reference

I. Glossary

BPMTraditionally Beats Per Minute, but in tracker terminology it defines the speed of ticks.
Effect memoryWhen an effect command is called with 0 parameters, previous parameters are used.
Row/lineRefers to one line of "text" on a pattern. In playback its duration depends on how many ticks there are per row (Speed) and fast they are (BPM).
Sample fine-tune/volume/panningPer sample default settings available through the instrument editor (thus also called instrument volume etc). Overrideable with effect commands. .MODs support these as well but with lower precision. (Save module and load back to enforce .MOD precision.)
TickThe base time unit in traditional trackers like MilkyTracker, originating from Amiga. Notes are triggered on the first tick of a row (unless delayed) and effects are applied on the following ticks.
SemitoneThe smallest musical interval in Western music and in MilkyTracker. A C# note is one semitone away from the note C.
Speed (Spd.)Number of ticks per row.

II. Effect commands

Standard commands (.MOD &.XM)

Extended commands (.XM only)

Volume column commands (.XM only)

*) Not implemented, no plans to support
**) Not implemented yet, will be required for feature completeness
***) Not supported on Amiga nor in FT2, effect relocation (8xx, Px) advised

0xy Arpeggio

Syntax:0
x = semitone offset
y = semitone offset
Example: C-4 ·1 ·· 037
··· ·· ·· 037
··· ·· ·· 037
··· ·· ·· 037
Explanation:

Arpeggio quickly alters the note pitch between the base note (C-4) and the semitone offsets x (3 = D#4) and y (7 = G-4). Each pitch is played for the duration of 1 tick. If speed is higher than 3 (meaning there are more than 3 ticks per row), the sequence is looped.

ProTracker 2/3

Base note is played for tick 0, then the semitone offset x for tick 1, then semitone offset y for tick 2.

Fasttracker II

Base note is played for tick 0, then the semitone offset y for tick 1, then semitone offset x for tick 2.

Notes:

In MilkyTracker you don't have to and indeed you CAN'T enter the effect digit 0. Just start with the parameter digits and the effect digit will be filled in.

Doesn't have effect memory and cannot be used without parameters.

In Fasttracker II, arpeggio logic fails when song speed is 16 (0x10) or higher. Using arpeggio at such speeds may cause unpredictable results across different players.

Tips:

When both effect parameters are used, it is wise to use a song speed value divisible by 3 in order that the arpeggio sequence can loop smoothly.

1xx Portamento up

Syntax: 1
xx = portamento speed
Example: C-4 ·1 ·· 103
··· ·· ·· 103
··· ·· ·· 103
··· ·· ·· 103
Explanation:

Portamento is used to slide the note pitch up or down. The higher the xx, the faster it goes. Effect is applied on every tick.

Amiga frequencies

The slide speed also depends on the sample frequency.

Notes:

ProTracker 2/3

Doesn't have effect memory and cannot be used without parameters.

2xx Portamento down

Syntax:2
xx = portamento speed
Example: C-4 ·1 ·· 203
··· ·· ·· 203
··· ·· ·· 203
··· ·· ·· 203
Explanation: Works similarly to 1xx portamento up, only bending note pitch down instead of up.
Notes:

ProTracker 2/3

Doesn't have effect memory and cannot be used without parameters.

3xx Portamento to note

Syntax:3
xx = portamento speed
Example: C-4 ·1 ·· ···
E-4 ·1 ·· 304
··· ·· ·· 300
··· ·· ·· 310
Explanation:

This portamento command bends the already playing note pitch towards another one, entered with the 3xx command. In the example, C-4 is bent towards E-4 at portamento speed 04 which isn't fast enough to reach the E-4 pitch during the two rows at the default song speed (6/125). However, 310 on the following row continues the portamento and being much faster, achieves the target E-4 pitch.

4xy Vibrato

Syntax:4
x = speed
y = depth
Example: C-4 ·1 ·· 481
··· ·· ·· 402
··· ·· ·· 400
··· ·· ·· 460
Explanation:

Vibrato alters note pitch up and down in the maximum range of a full tone. After the initial xy pair, parameters can be set individually. The pitch is reset when the command is discontinued.

5xy Portamento to note with volume slide

Syntax:5
x = volume slide up speed
y = volume slide down speed
Example: C-4 ·1 ·· ···
E-4 ·1 ·· 304
··· ·· ·· 504
··· ·· ·· 504
Explanation:

Performs portamento to note with parameters initialized with 3xx or Mx while sliding volume similarly to Axy volume slide.

Notes:

ProTracker 2/3

Doesn't have effect memory for volume slide speeds, 500 works identically to 300.

6xy Vibrato with volume slide

Syntax:6
x = volume slide up speed
y = volume slide down speed
Example: C-4 ·1 ·· 481
··· ·· ·· 601
··· ·· ·· 600
··· ·· ·· 6C0
Explanation:

Performs vibrato with parameters initialized with 4xy or Sx+Vx while sliding volume similarly to Axy volume slide.

Notes:

ProTracker 2/3

Doesn't have effect memory for volume slide speeds, 600 works identically to 400.

7xy Tremolo

Syntax:7
x = speed
y = depth
Example: C-4 ·1 ·· 787
··· ·· ·· 700
··· ·· ·· 7C0
··· ·· ·· 700
Explanation:

Tremolo alters note volume up and down. After the initial xy pair, parameters can be set individually. The volume is not reset when the command is discontinued.

8xx Set note panning position

Syntax:8
xx = panning position
Example: C-4 ·1 ·· 880
··· ·· ·· 8A0
··· ·· ·· 8C0
··· ·· ·· 8F0
Explanation:

Sets the note stereo panning from far left 00 to far right FF overriding sample panning setting.

Notes:

ProTracker 2/3

  • On Amiga, the 4 MOD channels are hard panned left, right, right and left by hardware, no use panning manually there.

Fasttracker II

Panning envelopes operate relative to the set position.

9xx Sample offset

Syntax:9
xx = sample offset
Example: C-4 ·1 ·· ···
··· ·· ·· ···
C-4 ·1 ·· 908
··· ·· ·· ···
Explanation:

The sample that the note triggers is played from offset xx. The offsets are spread 256 samples apart so 908 skips the first (0x8*256=) 2048 bytes of the sample and plays it on from there. This means that the furthest point 9xx can reach is (0xFF*256 =) 65280 bytes into the sample.

Tips: Resampling a loop to exactly (0x10000=) 65536 bytes gives you the highest possible level of control over the sample.

Axy Volume slide

Syntax:A
x = volume slide up speed
y = volume slide down speed
Example: C-4 ·1 ·· A04
··· ·· ·· A04
C-4 ·1 ·· A0F
··· ·· ·· A80
Explanation:

Slides note volume up/down at speed x/y depending on which parameter is specified. Effect is applied per tick so song speed value acts as a multiplier.

Notes:
  • Parameters x and y should NOT be used at the same time, doing so almost guarantees unpredictable results across different players.

ProTracker 2/3

Doesn't have effect memory and cannot be used without parameters.

Bxx Jump to order

Syntax:B
xx = song position
Example: C-4 ·1 ·· ···
··· ·· ·· ···
··· ·· ·· ···
··· ·· ·· B04
Explanation:

Immediately breaks the current pattern and jumps to order xx in the pattern order table (POT).

Tips:

Can be used to divide a song into separate looping sections effectively creating multiple songs using the same set of instruments. Such modules can be used in games and such where the sections can be triggered dynamically by program events.

Cxx Set note volume

Syntax:C
xx = volume
Example: C-4 ·1 ·· ···
··· ·· ·· C10
··· ·· ·· C40
··· ·· ·· C00
Explanation:

Sets the note volume 0040 overriding sample volume setting.

Notes:

Fasttracker II

Volume envelopes operate relative to the set volume.

Dxx Pattern break

Syntax:D
xx = row number on next pattern
Example: C-4 ·1 ·· ···
··· ·· ·· ···
··· ·· ·· ···
··· ·· ·· D04
Explanation:

Breaks the current pattern and jumps to row xx on the next pattern.

Notes:

Unlike with the majority of effect parameters, here xx is a decimal value rather than hexadecimal. Hexadecimal values are accepted but the first digit is still interpreted as decimal so it's best to avoid hex this time.

The highest row number you can jump to is 63.

E1x Fine portamento up

Syntax:E1
x = portamento speed
Example: C-4 ·1 ·· E11
··· ·· ·· E12
··· ·· ·· E13
··· ·· ·· E14
Explanation:

Works similarly to 1xx portamento up, only the slide is a lot finer because the effect is applied only once per row.

E2x Fine portamento down

Syntax:E2
x = portamento speed
Example: C-4 ·1 ·· E11
··· ·· ·· E12
··· ·· ·· E13
··· ·· ·· E14
Explanation:

Works similarly to 2xx portamento down bending note pitch down, only the slide is a lot finer like with E1x.

E3x Glissando control

Syntax:E3
x = glissando control toggle on/off
Example: C-4 ·1 ·· E31
D-4 01 ·· 305
··· ·· ·· 300
··· ·· ·· E30
Explanation:

Glissando control E31 changes note portamento behavior affecting commands 3xx, 5xy and Mx. Instead of stepless pitch bend (=glissando), the frequencies are rounded to nearest semitone. To revert to default glissando, use E30.

Notes:

This command is not yet implemented in MilkyTracker.

E4x Vibrato control

Syntax:E4
x = vibrato waveform selection
Example: C-4 ·1 ·· 48C
··· ·· V0 E41
··· ·· V0 E42
··· ·· ·· E40
Explanation:

This command sets the waveform used for 4xy, 6xy and Vx vibrato commands. The default waveform is sine, reset on every new note (E40). Possible parameter x values are:

  • 0 = Sine
  • 1 = Ramp down
  • 2 = Square
  • 4 = Continuous sine
  • 5 = Continuous ramp down
  • 6 = Continuous square
Notes:

This command is not yet implemented in MilkyTracker.

E5x Set note fine-tune

Syntax:E5
x = fine-tune
Example: C-4 ·1 ·· E54
··· ·· ·· ···
C-4 ·1 ·· E5C
··· ·· ·· ···
Explanation:

Sets note fine-tune overriding sample fine-tune setting. This command works a little differently for .MOD and .XM tracking. While both parameter value ranges are logical, the latter is also linear. See here:

xProTracker 2/3Fasttracker II
00-128
1+16-112
2+32-96
3+48-80
4+64-64
5+80-48
6+96-32
7+112-16
8-1280
9-112+16
A-96+32
B-80+48
C-64+64
D-48+80
E-32+96
F-16+112

E6x Pattern loop

Syntax:E6
x = set loop point / number of iterations
Example: C-4 ·1 ·· E60
··· ·· ·· ···
F-4 01 ·· ···
··· ·· ·· E63
Explanation:

Loops a section of a pattern x times. E60 sets the (optional) loop start point and E6x with x values 1F sets the end point and the number of iterations. If loop start point is not set, beginning of the pattern is used by default.

Notes:

The loop points need to be set on the same channel for them to work correctly.

Fasttracker II

One of the most (in)famous FT2 bugs is the E60 bug: When E60 is used on a pattern row x, the following pattern also starts from row x instead of the beginning of the pattern. This can be avoided by placing a D00 pattern break on the last row of the pattern where E60 was used.

Tips:Musicians concerned with correct playback of their .XM modules can utilize the E60 bug to skip sections of (or the whole) song when played with lesser players. ;)

E7x Tremolo control

Syntax:E7
x = tremolo waveform selection
Example: C-4 ·1 ·· E72
··· ·· ·· 76C
··· ·· ·· E70
··· ·· ·· 700
Explanation:

This command sets the waveform used for 7xy tremolo command. As with E4x vibrato control, the default waveform is sine and the possible parameter x values are:

  • 0 = Sine
  • 1 = Ramp down
  • 2 = Square
  • 4 = Continuous sine
  • 5 = Continuous ramp down
  • 6 = Continuous square
Notes:

This command is not yet implemented in MilkyTracker.

E8x Set note panning position

Syntax:E8
x = panning position
Explanation:

This command is another panning position command used by some trackers…

Notes:

…However, since it does not work on Amiga (because of the hardware panning) nor in Fasttracker II (hmm, enough panning commands already?), effect relocation to 8xx or Px is advised in order to produce compatible modules.

E9x Re-trigger note

Syntax:E9
x = triggering interval
Example: C-4 ·1 ·· E93
C-4 ·1 ·· ···
··· ·· ·· ···
C-4 ·1 ·· ···
Explanation:

This command re-triggers a note every x ticks.

EAx Fine volume slide up

Syntax:EA
x = speed
Example: C-4 ·1 10 EA2
··· ·· ·· EA0
··· ·· ·· EA4
··· ·· ·· EA0
Explanation:

Works similarly to Ax0 volume slide up, only the slide is a lot finer because the effect is applied only once per row.

EBx Fine volume slide down

Syntax:EB
x = speed
Example: C-4 ·1 ·· EB2
··· ·· ·· EB0
··· ·· ·· EB4
··· ·· ·· EB0
Explanation:

Works similarly to A0y volume slide down, only the slide is a lot finer like with EAx.

ECx Note cut

Syntax:EC
x = tick number
Example: C-4 ·1 ·· EC1
C-4 ·1 ·· EC2
C-4 ·1 ·· ···
··· ·· ·· EC0
Explanation:

Cuts a note by setting its volume to 0 at tick precision. Possible parameter x values are 0 – (song speed - 1). Higher values have no effect.

EDx Note delay

Syntax:ED
x = tick number
Example: C-4 ·1 ·· ···
A#3 01 ·· ED3
C-4 ·1 ·· ···
··· ·· ·· ···
Explanation:

Delays a note x ticks. Like with ECx note cut, possible x values are 0 – (song speed - 1). Higher values prevent the note from playing altogether.

EEx Pattern delay

Syntax:EE
x = amount of rows
Example: C-4 ·1 ·· ···
A#3 01 ·· EE5
C-4 ·1 ·· ···
··· ·· ·· ···
Explanation:

Delays playback progression for the duration of x rows.

Fxx Set song speed/BPM

Syntax:F
xx = speed/BPM value
Example: C-4 ·1 ·· F90
A#3 01 ·· F03
C-4 ·1 ·· ···
··· ·· ·· ···
Explanation:

Parameter x values 011F set song speed i.e. the amount of ticks per row. Values 20FF set the BPM which essentially is the speed of the ticks. F00 stops playback.

Gxx Set global volume

Syntax:G
xx = volume
Example: C-4 ·1 ·· G40
··· ·· ·· G20
··· ·· ·· G10
··· ·· ·· G00
Explanation:

Sets the global song note volume 0040.

Hxy Global volume slide

Syntax:H
x = volume slide up speed
y = volume slide down speed
Example: C-4 ·1 ·· H04
··· ·· ·· H04
C-4 ·1 ·· H0F
··· ·· ·· H80
Explanation:

Slides global song volume up/down at speed x/y depending on which parameter is specified.

Notes:

Parameters x and y should NOT be used at the same time, doing so almost guarantees unpredictable results across different players.

Kxx Key-off

Syntax:K
xx = tick number
Example: C-4 ·1 ·· K03
··· ·· ·· ···
C-4 ·1 ·· ···
··· ·· ·· K00
Explanation:

Sends instrument key-off much like the note column counterpart, only in tick precision. As K00 is the equivalent of a note column key-off, it cancels any actual note on the row. Possible parameter xx values are 00 – (song speed - 1). Higher values have no effect.

Lxx Set envelope position

Syntax:L
xx = envelope position
Example: C-4 ·1 ·· L20
··· ·· ·· ···
··· ·· ·· L00
··· ·· ·· ···
Explanation:

Makes the currently playing note jump to tick xx on the volume envelope timeline.
If the volume envelope's sustain point is set, the panning envelope also jumps to tick xx (This is an original FT2 quirk).

Pxy Panning slide

Syntax:P
x = panning slide right speed
y = panning slide left speed
Example: C-4 ·1 ·· P04
··· ·· ·· P00
··· ·· ·· P80
··· ·· ·· P00
Explanation:

Slides note panning right/left at speed x/y depending on which parameter is specified. Effect is applied per tick so song speed acts as a multiplier.

Notes:

Parameters x and y should NOT be used at the same time, doing so almost guarantees unpredictable results across different players.

Rxy Re-trigger note with volume slide

Syntax:R
x = volume slide speed
y = triggering interval
Example: C-4 ·1 ·· R81
··· ·· ·· R12
··· ·· ·· R23
··· ·· ·· R04
Explanation:

Much like E9x, this command rapidly re-triggers a note while sliding its volume. Parameter x values affect note volume like this:

  • 0 = previous x value
  • 1 = - 1
  • 2 = - 2
  • 3 = - 4
  • 4 = - 8
  • 5 = -16
  • 6 = * 0.66666666666666666666666666666667
  • 7 = * 0.5
  • 8 = no volume change
  • 9 = + 1
  • A = + 2
  • B = + 4
  • C = + 8
  • D = +16
  • E = * 1.5
  • F = * 2
Notes:

This command is very buggy from the start, straight from the source, Fasttracker II. While FT2's own documentation is inaccurate in many places, this is different. Extensive testing has revealed almost bizarre qualities of this effect and it's up to MilkyTracker to emulate it all. Without doubt the quirk the team has spent the most time and iterations working on getting it right. And still we advise to be careful with it. When using Rxy, check your song with FT2 (render to .WAV if you don't have the hardware (to emulate)), or at least BASS/XMPlay. And if you do find something odd, please report the bug as accurately and detailed as possible.

Setting volume on the volume column (xx) at the same time with Rxy resets the volume to xx before each re-trigger making the effect sound different.

Tips

Use R8y instead of R0y when you want to keep the volume unchanged, these two x values are often documented inaccurately as "No volume change" and "Unused", respectively.

Txy Tremor

Syntax:T
x + 1 = ticks on
y + 1 = ticks off
Example: C-4 ·1 ·· T13
··· ·· ·· T00
··· ·· ·· T31
··· ·· ·· T00
Explanation:

Rapidly alters note volume from full to zero, x + 1 and y + 1 setting the duration of the states in ticks.

Notes:

Using T00 makes a fast tremor effect but it also functions as effect memory repeating the last parameters. So you can only use this 00 speed once per channel before you use any other parameter values.

X1x Extra fine portamento up

Syntax:X1
x = speed
Example: C-4 ·1 ·· X11
··· ·· ·· X10
··· ·· ·· X18
··· ·· ·· X10
Explanation:

Works just like E1x fine portamento up, only with 4 times the precision.

X2x Extra fine portamento down

Syntax:X2
x = speed
Example: C-4 ·1 ·· X11
··· ·· ·· X20
··· ·· ·· X28
··· ·· ·· X20
Explanation:

Works just like E2x fine portamento down, only with 4 times the precision like E1x extra fine portamento up.

xx Set note volume

Syntax:xx = volume
Example: C-4 ·1 ·· ···
··· ·· 10 ···
··· ·· 40 ···
··· ·· 00 ···
Explanation:

Sets the note volume 0040 overriding sample volume setting. This is what the volume column is primarily used for, hence no effect command character. It's the equivalent of Cxx set note volume on the effect column.

+x Volume slide up

Syntax:+
x = speed
Example: C-4 ·1 10 ···
··· ·· +2 ···
··· ·· +4 ···
··· ·· +8 ···
Explanation:

Slides note volume up at speed x with the song speed (ticks) acting as a multiplier like with Ax0 volume slide on the effect column.

-x Volume slide down

Syntax:-
x = speed
Example: C-4 ·1 ·· ···
··· ·· -2 ···
··· ·· -4 ···
··· ·· -8 ···
Explanation:

Slides note volume down at speed x with the song speed (ticks) acting as a multiplier like with A0y volume slide on the effect column.

Dx Fine volume slide down (displayed as ▼x)

Syntax:D
x = speed
Example: C-4 ·1 ·· ···
··· ·· ▼2 ···
··· ·· ▼4 ···
··· ·· ▼8 ···
Explanation:

This is the volume column equivalent of EBx fine volume slide down, effect is applied once per row.

Lx Panning slide left (displayed as ◀x)

Syntax:L
x = speed
Example: C-4 ·1 ·· ···
··· ·· ◀2 ···
··· ·· ◀4 ···
··· ·· ◀8 ···
Explanation:

Slides note panning left at speed x with the song speed value (ticks) acting as a multiplier like with P0x volume slide on the effect column.

Mx Portamento to note

Syntax:M
x = speed
Example: C-4 ·1 ·· ···
E-4 01 ·· 304
··· ·· M0 ···
··· ·· M1 ···
Explanation:

This is the volume column equivalent of 3xx portamento, only with 1 digit resolution. M1 corresponds to 311, M2 to 322 and so on…

Tips:

3xx and Mx share effect memory, so it's possible to initialize a portamento with a more precise 3xx value and sustain it with M0 freeing the effect column for arpeggios, note delays, tremolo or whatever.

Px Set note panning position

Syntax:P
x = speed
Example: C-4 ·1 P4 ···
··· ·· ·· ···
··· ·· PC ···
··· ·· ·· ···
Explanation:

This is the volume column equivalent of 8xx panning, only with 1 digit resolution. P8 corresponds to 888, P9 to 899 and so on…

Tips:

3xx and Mx share effect memory, so it's possible to initialize a portamento with a more precise 3xx value and sustain it with M0 freeing the effect column for arpeggios, note delays, tremolo or whatever.

Rx Panning slide right (displayed as ▶x)

Syntax:R
x = speed
Example: C-4 ·1 ·· ···
··· ·· ▶2 ···
··· ·· ▶4 ···
··· ·· ▶8 ···
Explanation:

Slides note panning right at speed x with the song speed value (ticks) acting as a multiplier like with Px0 volume slide on the effect column.

Sx Set vibrato speed

Syntax:S
x = speed
Example: C-4 ·1 ·· 48F
··· ·· S4 A01
··· ·· ·· 600
··· ·· ·· 400
Explanation:

Sets the vibrato speed like the x in 4xy vibrato. In the example it is used instead of 4xy to free up the effect column.

Ux Fine volume slide up (displayed as ▲x)

Syntax:U
x = speed
Example: C-4 ·1 10 ···
··· ·· ▲2 ···
··· ·· ▲4 ···
··· ·· ▲8 ···
Explanation:

This is the volume column equivalent of EAx fine volume slide up, effect is applied once per row.

Vx Vibrato

Syntax:V
x = depth
Example: C-4 ·1 ·· 484
··· ·· V0 ···
··· ·· V8 ···
··· ·· V0 ···
Explanation:

Performs vibrato with depth x but requires the speed component to be initialized with 4x0 or Sx.

Notes:

Note pitch isn't reset when the command is discontinued.

7. MIDI support

MilkyTracker supports basic MIDI input, which means you can use your MIDI device to feed notes into MilkyTracker. Enabling MIDI input varies a little from platform to platform - here's how to do it on…

Windows: Select Preferences from the system menu (top left corner of the window)
OSX: Select Preferences from the MilkyTracker menu or press Command-,
Linux: Enabled by default if available on the system. See the Linux readme for details.

8. Known issues and bug reports

MilkyTracker aims for full Fasttracker II compatibility in its replay but this goal is easier set than achieved. Some of the original effect implementations defy all documentation and logic. Here's a list of current replay differences between FT2 and Milky:

  • E3x glissando control is not implemented.
  • E4x vibrato control is not implemented.
  • E7x tremolo control is not implemamented.
  • Handling of E6x pattern loop and EEx pattern delay on the same row
  • Portamento overflow "effect" isn't reproduced in MilkyTracker.
  • Volume column effects used in conjunction with EDx note delay

If you find more incompatibilities, or if MilkyTracker crashes or does something really stupid, we'd really like to hear from you and it would be even cooler if you could describe how to reproduce the problem. There's a section dedicated to bug reports on our web forum.

9. Credits

The MilkyTracker experience is brought to you by the following people:

pailesmain code
Deltafiremaintainer since v0.90.85
kenetgraphics
rainawebsite, documentation maintenance and additional graphics
Kmulandpromotion, support and additional web graphics
StrobeIRC channel administration, demo videos, winning compos

Acknowledgements

Thanks to the following people for their contribution to the project: Varthall/Up Rough for the AmigaOS port, jua for the Haiku port, tarzeau for Debian and Ubuntu packaging, ehaupt for FreeBSD port, Gary P. Scavone for RtAudio and RtMidi, kruze, idc, Rez et al. for the fonts, svenzzon for the demo tune, sage_musix for website hosting and forum administration, Valerio for the quick reference printouts, syphus for constructive criticism, Flasch, setrodox, jix, Evil-Ville, Spot, sverx, the entire Titan crew for support and everybody who donated or dropped a letter.

Special greetings to everyone at #MilkyTracker for making it a daily active channel.

10. Contact

You can contact the MilkyTracker team by email (), through the forum at http://milkytracker.titandemo.org/community/ or in IRC. To chat with the community live, you can connect to #MilkyTracker on EsperNet with your IRC client or use the java client on our website.

MilkyTracker-1.02.00/docs/TiTAN.nfo000066400000000000000000000033361324432207300166330ustar00rootroot00000000000000 ___ . _ o ___________ /\_\\__ __ _ T i T a N (_) ___ _\ ____ \_ \/_/ ____________ _ _________ ._\___. / \ //\ _ _\_ ____ \_ ____ \_ \/ | ___/ \__// \ | _|_ __ _ / \ / | / \_ \ | : _ _/ \__/ .| __ ____ / \ | / \_ :| __ _ _ \/ (.)(o) \ ____| _ ____ / |_____| /_/\\ . - o - \ | H2o! \/ \_\/ / \ |_____________ ___ __ _ /______________\ Titan Presents: MilkyTracker v1.02 - The multiplatform Fasttracker II clone - Released on 24/02/2018 See MilkyTracker.html for details. --------------------------------------------------------- Code.........: pailes Deltafire d0pefish GFX..........: kenet raina Demo songs...: svenzzon Strobe & Kmuland raina ASCII art....: H2o --------------------------------------------------------- WWW: http://milkytracker.titandemo.org/ http://titandemo.org/ IRC: #MilkyTracker on EsperNet #TitanDemo on EFnet MilkyTracker-1.02.00/docs/readme_PocketPC.html000066400000000000000000000071411324432207300210610ustar00rootroot00000000000000

Welcome to our multiplatform music tracker called MilkyTracker.


Here a few important notes about the Windows Mobile version:


- The package contains executable binaries for three different CPU architectures (ARM, MIPS, x86).

  If you got a regular PocketPC running PocketPC 2000/2002/2003 or Windows Mobile 2005 you will only

  need what's inside the ARM folder. 

- If you've worked with previous versions of MilkyTracker before and you're experiencing

  double entries in the key-config tool, please delete the file "keys.cfg" in the MilkyTracker 

  folder and run it again

- MilkyTracker needs quite some memory and it will NOT warn if it runs out of it.

  Give it as much memory as you can, if you experience odd behaviour (e.g. playback stops 

  and can't be continued etc.) try to save your work and exit to free up some memory.

- Make sure you have GAPI installed

- I have no VGA (HiRes) device so I have no idea what MilkyTracker will look like on such a device 

  (MilkyTracker PocketPC is supposed to run in 320x240 landscape)

- If the sound skips try to increase buffer size and/or play around with output frequency 

  (smaller buffer means lower latency)

- Use the button config tool to assign functions to your hardware buttons

- On older devices your songs must reside in "My Documents" or one of its direct subfolders

- MilkyTracker also runs on H/PC devices running Windows CE, but you will need aygshell.dll and gx.dll

  (both available for H/PC Handheld PCs)

- Have fun


Currently supported platforms:

Windows, MacOS X, Linux, PocketPC (2000, 2002, 2003(?))


Make sure you read the other manual as well.


Contact us for any reason (questions, bug-reports, feature-requests etc.):

support@milkytracker.net


or visit our homepage: 

http://www.milkytracker.net

MilkyTracker-1.02.00/docs/readme_rtaudio000066400000000000000000000036641324432207300201230ustar00rootroot00000000000000/************************************************************************/ /*! \class RtAudio \brief Realtime audio i/o C++ classes. RtAudio provides a common API (Application Programming Interface) for realtime audio input/output across Linux (native ALSA, Jack, and OSS), SGI, Macintosh OS X (CoreAudio and Jack), and Windows (DirectSound and ASIO) operating systems. RtAudio WWW site: http://www.music.mcgill.ca/~gary/rtaudio/ RtAudio: realtime audio i/o C++ classes Copyright (c) 2001-2007 Gary P. Scavone Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. Any person wishing to distribute modifications to the Software is asked to send the modifications to the original developer so that they can be incorporated into the canonical version. This is, however, not a binding provision of this license. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /************************************************************************/MilkyTracker-1.02.00/docs/readme_unix000066400000000000000000000055001324432207300174260ustar00rootroot00000000000000README for MilkyTracker SDL Versions ==================================== This file contains information that is specific to the SDL versions of MilkyTracker. Please read this file in addition to MilkyTracker.html It is advisable that you run MilkyTracker from the command line (at least the first time you run it) as it will output some messages informing you of what audio driver it is using as well as any errors that occurred. MIDI (Alsa only) ================ If available, MilkyTracker will detect Alsa and configure itself as a Midi receiver. You can then link MilkyTracker up to a Midi sender in the normal manner. You can enable midi velocity recording with the following command line argument: $ ./milkytracker -recvelocity Midi velocity recording only works in live record mode (pattern is playing). Midi support is currently only available on the Linux versions. Audio Driver ============ SDL *should* detect the best available audio driver on your system, however if this isn't the case you can set the environment variable 'SDL_AUDIODRIVER' to configure SDL to use the driver of your choice. Some known values to try are 'alsa', 'dsp', 'arts', 'esd'. For example: $ SDL_AUDIODRIVER=alsa ./milkytracker Note that due to weaknesses in some audio configurations we have had to force MilkyTracker to use 2^N audio buffer sizes. This option can be disabled in the config menu and this is recommended if your audio driver will accept it. * New for version v0.90.80 * Two new audio drivers have been added; ALSA and JACK. JACK by default does not attempt to guess which output device to connect to, the connection should be made manually. Video Driver ============ MilkyTracker should auto-detect your screen mode, however if it doesn't there are the following command line options: -bpp N Set N to either 16 or 24 -swap Swaps the red and blue values in 24 BPP mode -orientation Valid arguments are NORMAL|ROTATE90CCW|ROTATE90CW The screen size can be selected in the Config->Layout menu. Fullscreen mode can be toggled using ALT+Return. Note that these arguments are likely to be removed in the future - drop us a note if you actually need to use them. Crash Handler ============= Hopefully you should never need to know this, but just in-case the unthinkable happens MilkyTracker has a crash handler which should intercept most crashes (but not freezes!). If this does happen, a message will be outputted to stderr and MilkyTracker will attempt to save a backup of the song currently loaded. This will be named BACKUPxx.XM and saved in your home directory (where xx is a sequential number in the range 00 to 99). If MilkyTracker should crash, please attempt to reproduce the crash and then post details on the bug forum so we can attempt to fix whatever is causing it. Enjoy! - Christopher O'Neill (Deltafire) 19/8/2006 MilkyTracker-1.02.00/resources/000077500000000000000000000000001324432207300162655ustar00rootroot00000000000000MilkyTracker-1.02.00/resources/fonts/000077500000000000000000000000001324432207300174165ustar00rootroot00000000000000MilkyTracker-1.02.00/resources/fonts/ARIEL.8X8000066400000000000000000000040021324432207300205570ustar00rootroot00000000000000~~~~|88||8<J8|8<spwpwpwpwpspwpspwp?spppp?q8wpwpwpwpppwppppsppwpwp?wpwpwpwpwppppppppp?wpw8q8wpwpppppvp}ww'wpwpwpq?www|wpspwpwpwp?spwpsppspwpwpgw~;spwpspwpwpspppp?ppppwpwpwpwp?wpwpwpwpwpwrwx7`wp88wpwpwpwppp?p888888p p@pwppspwpwp?sppp?pwpwpwpspp?pppspp?pspwpwpwppppp?ppp?ppwpspwp88888sr'wr'wpwpspwpwpwpspwpwp?spwpwpswpwpwppsppppsp?pp?ppp?wpwpwp?wpwp8܁wpwr'wr'?wp?wpwpwpp?<x888pppppxppp  pMilkyTracker-1.02.00/resources/fonts/DISORDERTRACKER2.8X8000066400000000000000000000040001324432207300222320ustar00rootroot00000000000000*Ą7RBRrȨȨc8ll8~~~<~~<<~~< 0``0$ff$<<~<lllllll~||0f8l8vv00`0`````0 T88T~0~ 0`||8<|p|<|~||| ||||~|00``0~~`0 0`| |||||~|x00000x>||||||||000000|l8l8l~| 0`x`````x`0 xx8l00|>f>``|fff|fff>ff>|``|ffff x``flxlf|ff>|f```>`<|``|``f<ffff<fff<|ff|~ 0~00000000v8l|| |vxx~<>f;x |vx |v00x |v|x 8~lxxxxxxxxvv| ~8ll8|0f< 6k„7m<<3ff3f3f""""UUUUwwww66666666666666666666666666666666666676666670??0766666666667076666666666666666666??6666666666vvxllll`0`~pffff|`v0xx08ll88lll0|x~~ ~~`8``8x~~~~~`00`0`0p~<Ù<8ll8l|8 l<Xllllp0`<<<<MilkyTracker-1.02.00/resources/fonts/DX-FUTUR.8X8000066400000000000000000000040021324432207300211410ustar00rootroot00000000000000~~~~|88||8<J8|8<~~~~~~~ `` $ff$8||8000000ffPPP|||7e8L8Ez ``  T88T~p~  0`xx08x @|<| $D||||||~|0000 0`0~~p p| 00||8D|||z||x@@@@@@~ƪ¢||BB|@@||||||D8ƂD((DD( @`0 p000000p8l00|~~||~~||0<>~~~p p0`0p~vv><~~<ffffff{>c8ll8~~~<~~<<~~< 0``0$ff$<~~< 08888ll((|(|(><~~<ffffff{>c8ll8~~~<~~<<~~< 0``0$ff$<~~<<<lll(|(|(~|0f8l8vv00`0```0`00`f<>>**>k><<><~~<ffffff{>c8ll8~~~<~~<<~~< 0``0$ff$<~~< 06ll66fllh<|vX4j 0`<00`8```0 pI>6A~   0` 6f|  < 6f 2| 6f f<6f| 0`|F<0lrb<v 02"f< 2f< 0  08``0?~ p2f !Y~&f 6f 6f~ 6c 6`0``` 6`|&&f88000L2fl0`"vv^"vvV 6f| 6f 6fv 6f 6`~|x00p6f~6fl86f|f8g6fx00>r0b00```x 00 8 x4v002bf:0`lrbd80`b<&bb<2|`< 0````2f><0 lvff0000000<ff000X|,>fff 6ff<,2"|``$d|f8p``p<| x006fl66f,&fl,4c6f| x" 0~ 00  0 8l??8~8~~?~?<@p`8`x``|````~~8~f<``````>||~~~|00|000~ll8ll8l~0`0p p|88|MilkyTracker-1.02.00/resources/fonts/IDC-Hoodlum.8X8000066400000000000000000000040001324432207300217250ustar00rootroot00000000000000666666h fl6f6?f{0   B<B~0 0`ccc< pppvvp~~ppppsssc0 0 0  0c >cokn`>ss~s~?ppp?ss~ppp?pss?ssssp |sv|vspppppcwkc`@`s{wscc>~ppco>~vsssss>sss>ckwcss>ssss8`0 60ss~s~?ppp?ss~ppp?pss?ssssp |sv|vspppppcwkc`@`s{wscc>~ppco>~vsssss>sss>ckwcss>ssss 0 0 0 0>cokn`>|88|MilkyTracker-1.02.00/resources/fonts/IDC-MicroKnight.12X12000066400000000000000000000110001324432207300226600ustar00rootroot00000000000000ppppp܁999psw?pwp?p9ps||;qpp`8888888pp?pp@?pp8pq8q8wp?wpq8p~p?pgpwppppppwpwpwpwpwpwpwp8܁wpwpwrwx8܁8wpwpwp?888pp8888p8p pp0pwpwppq8wpwpwpp8ppppppwpwpwpp?ppp|wpwpwpp?pq8wpwpwpppppp|ppgppswpq8ppppxwwrwpq8wpwpwpq8wpwpwpq8wpwp?ppwpwppspppp~p?pwpwpwpwpwpwp88wp'ww?88܁p8ppwpp8pppppppppppxxpp p?MilkyTracker-1.02.00/resources/fonts/IDC-MicroKnight.8X8000066400000000000000000000040001324432207300225340ustar00rootroot00000000000000ll$lllll|||`|0l pp|0```00 0l88l~| 0`x|8~|<`<F|0l Fxpx x|xx~0`0||0 0|<008lff~x|8l`x````~~|8~  L88~x|>f~x||0|0002~ll88|lDl88l~| 0` 0 0 08lf<|88|MilkyTracker-1.02.00/resources/fonts/IDC-Topaz1.3.8X8000066400000000000000000000040001324432207300216350ustar00rootroot00000000000000<<lllllll>`<|0f8lhvv0 000 0 0f< 8 0`0 ~~0  0fff~fff~~ff<flxlf```bf8ll8ff|``8ll<ff|lfff<<f<vf`>`<|> ffff;fff<ckk66c66cfff<p~L2~ppp|88|MilkyTracker-1.02.00/resources/fonts/IDC-Topaz2.0.8X8000066400000000000000000000040001324432207300216330ustar00rootroot00000000000000llllllll>`<|f6j8lhv{0 000 0 0f< 80`~~``fff~fff<<f<``````~f>``|fff|<```<>fff>ff><``|ffff x``flxlf |ffffff>|f```<`<|00|000ffff>fff<ll8lfff<0~ 0~ppp|88|MilkyTracker-1.02.00/resources/fonts/INVERSE.8X8000066400000000000000000000040021324432207300210360ustar00rootroot00000000000000~~~~|88||8<J8|8<~~~~~~~ `` $ff$8||80006l6666~|0f3f8l8m{   `000000`T88T~0~0 0`0000`0`0~~0 0|00~|>ff>ff>f`>ff>``>``>f`ccc  xflx```f~~fv~~``|f~|<`<| >ff|ccfl8l8lcc~ 8` 0 `0000`p(D?~~~~~~??????֪֪֪8|8|```````lllllllmmmmmmm<<6666666666666666666666667666666670??07666666666670766666666666666666??66666666666ww6fb`````ffffb00b?fx333>0<>~~~p p0`0p~vv><~~<ffffff{>c8ll8~~~<~~<<~~< 0``0$ff$<~~<$$$DDDDD(~|*("D"D8D(Vv   T88T| ~ @8DD8p|x8|8DD|||~  ~~  @@>>@|x@|||D8D8DD( `p@@@@@p@ 88(D |~~~~~~|~<@@@@@|~8 ||~~|x| |D8D8D~8@0` `d8l?U~~~~~~??????~~~~~~~~<~<~BfZBB```````lllllllmmmmmmm<<6666666666666666666666666676666670??0766666666667076666666666666666666??6666666666vvxllll`0`~pffff|`v0xx08ll88lll0|x~~ ~~`8``8x~~~~~`00`0`0p~vv8ll8 l<Xllllp0`<<<<MilkyTracker-1.02.00/resources/fonts/J-FLUX.8X8000066400000000000000000000040021324432207300206700ustar00rootroot00000000000000~~~~l|88||88|8|8||8|<<><~~<ffffff{>c8ll8~~~<~~<<~~< 0``0$ff$<~~<000000llllllll~|f0f8l8vv 0```0`00`f<``>>`||`|~|l8|x000 0`x`````x`0 xx>>>>>>~6667666666670??07666666666670766666666666666666??66666666666ww6fb`````ffffb00b?fx333>0<>~0000p p0`0p~vv``0x0 l80<<<<MilkyTracker-1.02.00/resources/fonts/PEANUT.8X8000066400000000000000000000040021324432207300207170ustar00rootroot00000000000000~~~~l|88||88|8|8||8|<<><~~<ffffff{>c8ll8~~~<~~<<~~< 0``0$ff$<~~<88$DDDDD8DBB~BBx<@@<||<@@x@@@xxBBBB~BB88 8@DHPpHD@@@@@@|XtTTTTTXdDDDDD8DDDDD8""""c>""""0,# 4 @@@@<<<<<<<<<<<<<~~<<~~<<~~~~<<~~~~<66666667076666666666666666666??6666666666vvxllll`0`~pffff|`v0xx08ll88lll0|x~~ ~~`8``8x~~~~~`00`0`0p~vv8ll8 l<Xllllp0`<<<<MilkyTracker-1.02.00/resources/fonts/PERISOFT.8X8000066400000000000000000000040021324432207300211560ustar00rootroot00000000000000~~~~|88||8<J8|8<~~~~~~~ `` $ff$8||80xxx00f36666|||7e8L8Ez   `000000`T88T~0~0 0`||<|8p|<|||888||||~0000`0`0~~0 0|88|||||||8888888||||t|||888888||8v<0<>~~~p p0`0p~vv #MilkyTracker-1.02.00/resources/fonts/TINY_UPPERCASE.6x5000066400000000000000000000017001324432207300221520ustar00rootroot00000000000000(@LDF@DDD)E1`dB9S8DDEQ  0 "Q)`Q0!F)eN80J9!@!(eBRJ F9!QJq`Q 0ABRJ9RH)JRQ)`Q0!F)eN80J9!@!(eBRJ F9!QJq`Q 0ABRJ9RH)JRj0Bx> #MilkyTracker-1.02.00/resources/fonts/XTSAMP.8X8000066400000000000000000000040001324432207300207350ustar00rootroot00000000000000 `` <~~< 08<<80  << lH$~$~$8<f 0f8l:l:0``0  f<~`||>`|ff<~ pf~ff<`f|f|>``p>|fff|~`l`~~`n``>p`nf<fffnff~|ffdxnf````~bv~lbffvz|nf<fff<|fl````>|~ffff<fffv4bbjjj<Bf4fBff, ~ 0~|````|@`0 ``|nf|>pp>>vf>|fn`>80|00>f><``|nffp``lxlfkkknff800<~ ~   006l6|6f|f>`~ff<ۥ;b  g.g֊W>9&Hqƻ37CD,( V_/؅i69M'\m!@gO&2^ 5QCM@{}rՁqɁdOsf$d"Ʊe&ǨxB@؍uC2!׮s3FZ]gd'#f`A"/ώT}Od2,{⡥`|FÖT&ê*|g0YY> 0ƽuy67F]l9PB2fmT.qcr;82~+n?Ѡ,Vt(-c|\iRے EQmOŴ'shQ5t?bO0vF\Vƌ}<~fl8de=-7\=ŬDl|AV6ԦewKփg(Cc51K*Vm G#7'&h:]14|fg͋ۺdq}Ƽ*;GEP S)k~^ ٺޝvLLTr'1nS5iq[rXWss(Ѧm73q1sE+T# xa9Z+\_)!b͹hMS876Vx)S_ A7#Nlh2X]kDEi< gpNJ 6+!U"4ypA]t:it&1<1j(̓~Pς9Gzx<F%dwZTZ|bTtgܐL4]ZɋYϑm]zg5|J 5)u3t5o1/N)_%"”WpHV~6A=3/UYNzG襃,'ki{O`u˧ؐnԊ U9ŷ@>l ꉨ6׶Ɛ&ݞEh}"ɱ[>?-rT7BN,evO=_}ؖ"EzD͚)` :WC ֆe=XDd@׬3CKJb芷Ęrrg)'\}z1ei룴AƎ [#xz^4˜y¡WkBͧQv13}-uy m`4ɰ^V_d8IP#VHmYfkH9< \%%5.oOؗÐ!uHlAJq?"5g07rx  pc3Dθk**[%[n @Wǃq .+Mjf )gsKMxX C͓KH:Ђ+gAs2L%)a!~q FZmi{-+\JSsv(>9+O({vRL^kV-B.!+`@Zap 0׈5`(Z!c4-؀Dwmmת\.hP-@v D?3EUX@8y`dd)e i48WZ #)EJ̉R 75tA;ƫF1,dSU A‰eg+<#" d(`qß&Ze>F1αH-6" .Ƶ 0f'Wrկ8$ o2^LgHVn%Gay]1v C*YcJLQS TP{."}z|,3%${98 X[9XvA6-bZa V gEvfj3?#ɻY(%W{Gxb"w*+}ApR NOs'i:YGC7gau_s7:d#qQxXScRT6CȖoO+ lPh7.ufܱܚG\cM bo [}־*#lV/2 F w^p|8_H--hwfk㭈~~6u3ͧy',qꉓWX?i(7 &p^un@rJ /}YN9|Y4j)G" nrU(a]- hؔ2t+DoA;ŭ`o[FEm`;bJJ*@lgRzdðSk5)`7ffiv0~ ]Jků@v6N L3C7=ee,mLݢgՈ:hrkd< ,ܼ['ػlyscZ0|h)"$@2`EʳQ:հuS :Lr8Pft%IϘ}} E732QJ_u g"\֡ W}(L[ęWawlOYWX& |kCFQvAo&x^`Q#fԽęA}P.+R|d &~ $X!,. Lw=P$tlk/dVǎs ̽hrLKkD2 JPf+ >ĞISqN3 ti8#%R^J Y 3g1pi1;ZnԬ05\h^W7-xtU4l S6\v,g&`ԍ%:B+ 6g`%_ 3S"b"`{{-ZbO>-tj9Jϐ-@^hQR؈ 4Ȟ/vG1'NIY K,{i:cte6a:\HAs)ڴvi4CWEj9;F@Drl 1ȹk4cBUVΰt֦$fP9 -Ǫwcg݉$葘 a2&9_ ŜrVD͐/RP0kBQd2`78 p$+`z2s,y^X.AdW I/`D^S1AJbW̏72oԵl`RU'Bx8,f JJ3>c]vέQjBb+9#i0p܏)ҕ:2h?nPMY ?3Z8Q_$EPP\+Y`4~ D ЋmQeM,43\F Mf(֧"k_f馬嶊5nǘie8-l L.(%r1|O3Y4vߺB6o|gh-Y[y2twAҟzgԂgVԙi-%EPkҔ M>g#+@0<($N8yxA+Ңaa P& Caθ DoOg8 Rלs@9 6e* ğZli/ZX,7Լ\H6"F?'(/,.$'6F0@w`ٙ㮁05:{`!` OuQMxQ?FY)U҉\g`[{-kAY7+36E@%Okih {l54:"wm`Ԃ(UmiBQ[bnҮ ]±\NA젚Ǝ*ҏ*1cʬ [ᤍNUebX]j-mv7 Q>AВ) ap"%76n= [sdN'ƖsZF_X9$Ts-@ʎ&(/f2)>}T+wT}m)vjIdžIdCɃݶ(+3)'Kmvড m`!k}4!|5BXs񎄸5tj9 ٬Jܘv$4V>Tdk!,\K%aY!%< nk?<&5? w$B htRZu켎ҝDa!DcNJ];($AF-;7$7Xw9eJ2^Ϯ]NIVpSbfi9ޮ Cn1C=8YaY|mUf> % v jqTa#!úӢi9Χ#XOpH8c d &:\RƧlrxmE+mظ1FXZaTѢ%g" %7MN5s*#hI4* d|;vm)3P4;KUPqeMBFQovkM] K*2F*KpBãd*!1gda%IjٚXvٌFy1}2\&VC莞d!sۋFeQXgp ]H2dH8̴k9;rH*DK@?rr rt6&EeP)YY1Ԓ˂w(!Ρ=枋TG?NO tW g AxPW|{]ŨtDX6nvgAXϐuۋlj xt9 \׋nie̝ۚd"(g̳fly%cQL~7OWwDD0g07jcl -GuC/#lsXsI!|]8D+qzYM7n̜&EQc.AXuE\fM$6sv:2F1ElTI 2Ld/J3 v%Bݚ %`nM`U5!У;7G|q+:a{"f;\ttN%Wbv[A65>99Q" 褵E}n$pozԜ$L4hR-E:bτ&ceI~따,7,y9k/Xfa$ ɥ՘"V^Ln\7ũ!$P+,h4f\= \88'/'4+nlǐ bH^g> Дqh2?D r16|Al v1b`J?SqgS9cxTZ+ls@DYg c .)]nI PFvvE1!Nrf\+uϼ r{Aa0e4-ЄM꿉,fkU%ٶѱbd( l4!)zHld,$Q5A>|.sXaLf HheR(3Y:(QM1B $#GLiL JjipKkuyYr4FO<H%ene:H{E"Xv:nc8NR@L9)v݂9J$_^k:y^d.BL*}b 2)4̃Ӣ MCs#cT*1Ґƺ@x@rPV"@qR1BzN S1LS31Xc\&:RIJŵϱ@ cbĬuhƋۃ56Gu.$sv&>w\#tWT\;e0D $y1E#Sį .ln>k7YɞCEm%>Dr)i+VĽ/}15@ _a`b36h҉*ж!AƬ)[N261WxyIжTiýR$"fi%cW؏ `Dl, Ǣ\Wk)y++GѲ`6բc屨:Co)5A;$ٝj-;=ЦDrsV06a)0h;hl^6aQ'[BT\fMCwT d$+9`^FĈ{!őit9pu?5~IW"  0%5crZ*$s o;O4 d,=F6T|Fj.0+ 5*46reN h&Q}1:Ιw<APLcvz0Y-}H"s'5w$0zdn\t>NЌ-73!gDF6W}Jg*KG8XBV|)|oQi2kAQLI#rȣKTm+IFL7aKuUpHwJ@' (ӺoHXqt(L'"`92&36πl.-&#wbf'bC2@ۇ*T Z .t lTVWcC]괙'X k[0ڇlfd9fC9QcXjn59֌ALFK#ґ`@NeJb2qZ&±Uy-a?Q V/A9 ]zNvT|S*X g"Fn#\ Kn&s8ز߿(ck)`Ziʈ`>g}vC|βsw,%5>g4OL ~vM8(dcF\wj0xLd뜉,X^B-K \K3氙;"r6,K<2(P4H9qw "-Yǁm 0ufPx־"bY :݉aFHu%F:s#%LemԺ"'C. HØ0Ow#Ԟe!x+l5IuTÐ -DECw< 3!G$11rL1~Ќ?͙] $@CN[i2",TR}4,plZ**@|۠M!7z?eѸCNj0LmCs4JUQ6.fg]H+ZӊJiY)I[%, 4*3t.I2ixO+eP@pdeewXAKL<6 g7Deʥabl=|Ҡ ~Fex5x-kvoh&l+`A&AhaN-pz1I']<*PR \QIz#MԶp0ڰ@~i)C9ZA[.\WaLA.p3vt#ڷ!Fu1F9hZ: nzxrtD4]@w CzcÓSfIiÝN=zw~+?R"6ɓp?<K @f'=5/<ϾxBPw"N-zjN92TŝpQ04ߝFlL uY(OrC gD`A g0HּVCRi$\24ud?JB2 %ru$ $ *BѸZ&NXQ3ڍ;p#tB\lҰ*?a0cv@~)K$9RX[k\RRG = `rTe4&as!<8/1xf DgTF:BbRj$Ut~3 d&i0'QD(:T(N!azJ!;/a̩a:>yL$4˜3.id>:8~pW^zEk /qO"yh,K ÑW^|~'^}3 ϷM/°1bR} Q#R4&ki zk_bgCt#2@C[ڋkbfH3zOc5Z(4[^&r`^`HVn %Xmn+A.kIo!?]i3`W9cʿ6o+c,:As#!ښNꡌ".L[r#,{T DAS8   |pTd%6$<8tqiZ2IŤgEv/ Ӈ׮^kW_pl DG'Gη~իΟ8UQLJwr$zΟ y9999`oÇG''{umpOy={Ƀ (JOo߸ϼp b+A6YHLgW{),.b4]s\6;!qnD Āֈwc5!u߁ĕ.n@Dp12ɫ9-EnL DM~o $)Q 6pñ"oZ'mGP I Yj@4HXSq 7xuE:27C2y }ʭ剦0dNs̠:D 6 /^AQ"t0rr3ġĕpE`9QxH 1з{  INH;Vr{8q F[&@3̳%bv-VVX&"y[&*o}ѭʏ? >2(YSEÜ~[7s.a'o7?̍?g~so|s=8BV4{7_rGG~o)˟MCUk_;::YX- o /NH}p?|O}2?[{W>˟ͫ 6y]["eIt/3EN>_ʝ`pUmU&UDu]|fܹWnD< 11PaƖnM?I.pMl%@GXr93RБA5 z ұ&vS3j,UC@OjM)J/'R2#5X9֩"p '^8I +5D 5<10&SXL 7e!o0GTaoǣ<N3H RcZz\:+Q'! 4bbbkUp kҩՁ*kS\4dLd^8urR)1`Br~o{^{yIsi0s|rsϿ^zy[w~`3[A> ?>>9񽃋?/._]K5^On]F5Gޞ<+ݺs s_vK?wɕ^qa#Q߿O߿+7W܏|흷yo/_OsrMEtqnY0,4>uv) 7~#YaQh;cS(m<}7;@9i8<=q $ 9,UU54c"'5g0c@󇵻 ZJt$t0Ljgh-db"ŶA5I/hV#;ZQۛHvh\\ss!&dVgp]Kw̆3JGw6sa|ŀ a{NZT=,pjP mp U|ٽ.1i^' EE>/nz2 kY?Ϭf@IDATηH uLLi  yhB;G<\6Y ˯nG{G7o\zzs~8:>{N=xoc^|'~{SY'O;9=wkI}}/_ynB~ԛ)>Sw?>}po|{@1=~k~TÏ?.]:yx+_~L~(U俶?ڕ}t+ )o|xܿ']+CZ>$\9C7Ϫ:J&"KCX"[6E,iz`8h9;Lr&6>[dž֥Rykt:-E-=QVR L`f v0#DϬAF ^'TS9,IwƜ2.(%(*3Oo}%ުS!IX&gY5V& toWb>e]"P 6n~^_wqrZ*U9O03X"@jHO YupRP2pf܎ fwL kM\kφCIHE/l/EG9ѽNN{G_֛ 8ښͣC^|/W._|߿owoGgOܯ^`R-M *.=~{x|3ү/ܽw 2EGXnos{s^~sÈo?@P>~t]<=ޕbϑoMoty!?oVy3ߵi,}xrD,'F) {{z_:j&:GyYm^J98ؿ~^xgEmjZO1'uFV@v]Q>[bd8Xs67ZH>x~)+!<Zr  ͋`Gi2,4֌Rc捄ݎfCVQ$Na$p$4N}CB> T&.E1(Zo3DXbjwXdԢđeKAbFd#Iɱ1d< jD7H}c-\wCCmӛL|rqMjɪ%W!BjSAXCU!m]+O! gL&"ms%CO\g:մ{Λx|,싟̗~˾' #nwy?G}ߺ~;o;s⥿K_;G'OtU+k~ |?g?'X?HQ=B֭4o..7zs#K/ wί<8:<:z/w8-m [nw? ɓk< ɞv|\tBi 呛 |Ϝ>JU ~ #?HȷD CyϿg^on7hWiLy߾w+ʯ!|p$\I%?9w||/ݴw,O''G^p쫯/}d̷KϽ2/?ʯc]z+/9nPdI*5 ;ϼ!_zLҰciuRJi6; z`怊gS9$rm4sB7@Cgʼn3VL2Sj's+#,&`}3q.ncjdOS'\}I$T2`!AB C&B fptSONc쀀<UA~&WBJlfyMi);%~%S;V,IN2 *~gPmFIDTY0Dؑ-9}.vv`ˈQM#LYW(lin>ܻu_+_bN(}]6?S|ѻ~rxɝ[I/}տ ݹ}/9p>YüsӓO\f)P~׾yowp!y|ۿkϥ }A1mcQ0&M: {Wg4\?9w/|O|@;o_zS.^o;k7K_Pwĵ+Ͻflҽ[3ի*o~o|~蘏zI/|*gPY7/?ؿGԲ;W[QY"Oev Jyh+l2'5OV#FfdHDS!igi!D8B%(^1ec&e2$Cq-Bda`"'i5Dq&Ev3 \'{N7y99SϨH`կE#{a\y0yJ]&z6@ bQet@>,aR#d&P22(Ur -iѪWj6^d4Krt&4)t-Uf k7~~y#{˯o?}an{.CH3sڹۯۻ@Nʟ/wp-wt<~. *KG}ۅ)+1[6u=8$+oN,{n>_:4ǚKsҥw>>K셋o޿_{ܽ{HK'?WϥIQY/k| ǭ><{_z|_KB~+{w޹̋G,g^O_{O\U^6j Ӭ*d\ͨj[>wa!K0䪫OW'ثn65Ҷ>;FRd`9Yfk.4 N2e  W["}cbxn4257 Q^[ źޝ湾;HU& F ֐_{XXձ 9L0> $ !mR;f0fB<~p|7|pl=]7e=>÷} lmr\x飛o|  X®\kѓ+WՋW^|v>:~xNaK//O_}҃Gy3^p;Wۼ%W^#/Ws7{yDXW-wK__x7~_o! $gşJlN?$ \.3NȲڛ2fԂ[Jn=rEw3 7~s_ycy0o|lʏ|GmK2wzfU]xx÷~k_y+ eVoN8x-?9K@t|^s{߹ѷ;zw?~ ʷeac'qIN_x3++[?|+ n'=ܹGOO>>+77ec~ko[V^ox6_ie t+Γ(U<@u̠Q@D,U~h>P>2:y3 JF v (i6؄Re T#>Eт%AP$N۬ƍ6 R|yhdRfgJ>)=.}PW.Π˕Sa\PM|wE Ϫ 95Qv - !ۧiÑT6HRSK48U(U_ (]jċ HahTo<:`k"s!cS~#6o~oy|p/zr.;^|千sO>w{ü@^'~K/`6|_;3|$?8w\s?9<{7W>x } OY$;k\~˒&^~:?ogy׾}Xg/>Eya .]}ڳ/>999쳬…wK{{7υh~/{0/ ![~KzS~ Cw>x;;_7>#F|1OŒ-T[WWYDS;/=og^|Q(;:?7~?w-?/]K7yi6O p` onM. O }2ɜ {2`')׍!!_+SSo3 M'3ڬu?JzY)geSܔŃ]RL%p AJRv-yYˁ5_'ޥ;{{W.^}$.O, >}p?Q|Ox_:23?w^||Rt ={g}};sn_;_?}x(+n_GR/\tޭwNg?p;i9'߼x˯ȃxtZm԰ӓ_ 3ҿu/z(lO=kW_~%y.\:cϿ;_b]?/ J%fzvvt\ .>9{:Ood˿`h0P& 0HN4xCd=) 3ZfSlBZFX5ՀZI1Dݱǣ rx $cz+- 3YZQ21STgD Լ1o*0a#{!~2'XIchxxi5SYc!!gM?sFTKΙ-'r5ff12W(5,` B˔Hge6Y4و2TuԂ뒜ݨٕ{3Wl.{>y3A~otQ>8ɯl濋wxɓ/?Qtm<}{WIrx/k?Ùp g8Yriݻ5^"$E73<.Ѝi@>nnEU'2n Snmɳ_{[ O vE9|}7g:+zlyw4Ȉo*ud.~ppWZ4>v f4 pg6ڪn(e6^\}j]+åB~\HFX̹mZ{+٫FD/~{﫭j>_{ MvVtUR]oVg /j У<[3W|rTk1BOZsg'7}pIA"zY@ԟpR0U'8U'n= #Vg!I}c° :L*̃,@ N9IBQ?mvHҿH)QYن6(b T:$`Op)AL&BALepk"ge WX>8QIsi)Y#NAbmFړ *$P4mJdDov%t H%Ԕnj->wGӥ饕<<3ͷtvR"\ivj{oʯ]k֫B>r4y/KildxiW2 ?TԸSO Iy2׷\hէ_,MNT$v9 {xϭҧ-+vk+$}Ͼ&I?L z.l&Ur qD$t(^&9\4vY3^tl{2S JuTJxq3) 2i"V*kVke-JvMo'2)dZpI숐 e$,hN>Kn%3Ұ0%h Sr$_6七C~@xQ[$a,R0)pT1 76dDA$ב(&T(-;Fr\M (Kf,\<"eNRx1a ]J0vIlv2 (j$;R6BAA1\% |TZ 9:*D&|$͞#W1t|i+nsPݧxouV! .}86*:rMpĤ=:;z;Ņ+G[t;$mJIQpJAP RV(9'$Jͯ bZ||u(?ūo|{H@# |J`{[ ^. K+=%1je&'D<̵C"V4)HSVc 6od֎"NR #Pa3a,"raRL ht2n$?dP5H!k0 #D%2 h$2  KG9!1/S v3NI`Q2*!#&"^+$%4ͱV$@ !)؀@,0$^(Ldt浭E)XCd` 1(/*:_BJQ_-"Lp'h%.s%eYy"5sNI>YR) IJӝ¹ݾrgem~''K^TZR*wznO̕W^z鍃fg64>xd٘0sr}O6n]X|޻p( d4+w>57lF$ED{ *΂` .Ν?ӛ_[<ɳF[Z8pR?,-ur}LA@٩"Fmjl *gGJs[Ng!4 .Y.bIנYN!qq|ܭlOοMiuS/&/Sz>;SS ުOXRRrFsS;9:ؼSl7'.g Hdpi+oP}3y@ 2اf~?j._ͼt*Ϩ1"3_Qآ* Z ;-Ȩ) \:M:S2S+U"^e"?$Ov:wJ"Er"ʤ M;$34dKP6uk^{Xp\giE,Ke-5îJyb$,N!bmi@jUp!gvr%bK` n8p.l2RMUa/B"3L:{OT"[h=xr=pѱ1 ;4`-s 0!V$1*dڰ:LXbIm*z_pHiUQ짚,UͺYmWW]fUjM 2\Q]?-G_x[++˝ѹ\W٘:mhXW֪5}s|r4 3=&#r9궚w[?gDN8Z^c OqLE1}}6XmnZeg&QN̕wXD }5/,$7GՆh'2?_f:AP/YW'B?>6n'`)/oS<0>tGξPhK*U6)UV(|_yo \hu<<:?}$͖U#2jDI9 m+ $> A%R+4&Yn]hDaTAf; nYCRO! aKY$,$mN%E1=@z%^9.i3%"UJ5zGGR)l3#6H_4 &dH9QD8eE:]J;r.r)8 $-%͡;U+9QT+uf9 + I lzY)b1aMő &e)bʆLB,ӊHN[`&|wTWe{po{lee~lG?-2Adlj|PWt.[}'Gs/|u`LD#jeog|Kn^zmVE'\K&rfZ˽D _y嗺]rZa吹 \'ޙ/?Ӭ dh(Ϸuu/ ٖo__/Z.Q 3WFW17Zsnk<>ڸwoG>pBWfOG=[9˛beu r],:zTWNo_-^ MM̞FLVvbQǢS5< $HUԪ"hHg DHt֑b  1ć 僌im'( /4.br{%jeF'P)Y, 4YD*1ĚVo Vd '>IS@A\9<#/x 4~(AhfB.7v”6aRE1\qT.KN24:V0Ys+iZŧX> 쬯~hf _:z E\61,i~rև;MJR ܚ'1_5eCy>zrGj\W+@v]i}\~V. }f}k.O̿pfH.7xWUb LO<3 zRQY=xtsbr^OiQE vtr|fsPRba_ߞ 3ىlblUk&[#6ߧmMCWUGALiNlo$(tIڍD,ϦW2]W%&`*K7{$3m%96y-C,%i"Q& *%'#:oZh^'̦fJ"RyMEj{"JTnLC M40T4RmDOV< lF:( IhՎHPDHIdl:%$;}!Yr7ERjelHl)tɩIHi,s\<[Zλ{op˕hb/?7^5ӯ<ʹDSMD j>Zyvju/nӠQKw??TWiձW_} ! 1b!,B\󸕵(OFF/E0 ipKh:w7wi%##SSLaw)9'H>u{◞lmmQ F??5F;h3r̥KcԨwߪ[1ON .PM7Pa"kTDy ֽ߰>D8biq,&.=+;ڥ($,7R35v+Bz鯿gCV-Olx~`ŒLzajG 3 to{糫k7]}2_,?қ<>TTQL$f R s+ EO[/wxWtΥF @8dŏdZkz)J'#兡 1c$χb* wR,N_{gԗkϯ] wR[Yz*#|>hHÚ2mbQin?ੋ/}(ʆ$G#"xїGd+ϼ1w)D 5 fHջ~Ko DO.,֮0z>sY*h\'6y:]߫`wk`׶VP3653PU^MQ'GF0>_ z܃L m4ig5/Ƃs:L=Mq4 <0+5+뀘*%S)ɤ)&huob)ܴ37E+)ʮJ(I"Jq3-ꐱ,ohXlEd`';2) %jԲC]1YҾ6  I8즭 MX!#/wj}$w~W}.ywʵ|׻1W^k1\jD ʕgW~ԨmM̪QU~OONf=w[N.]8o|WRܒԔr70}7?vB^z܋H/[TOll{ZxH˼#%;r/y59|j߱f_1Uzt;I݇'MM/Ln1d'=~w^X{\a88n5֮fF;.ĆnU֊cAV x>89wnd꠺Uݸ9)|u@8Xt.ã%PuyaatB@pPw%rjpF''yyxw5_HN:` Iԏ+ib43#pd]n*w.F-\nbD+!aacs$$H\B:SK8}*_t(3iOE ; I(.:I W,FrTGf"eI Y&![ƜʥU |. T>$ɐDǐhŇ5Q¦M 9{=|` }Skkir=BiGn3g^t1$ۙ]wKX4'C#\t3tO4dqy;,v#-t<5fRw{r<3U>/QGC=XqPcpo4L,̙VW;}p+oJLO|#kݝzW9=Uヽ wi~n||rLŢDܩ,-2|"F[ԙ.Ojr - vKpSPiR~`oO7VQOgDT5kDTh#kB4vH4hxy@IDATOX²ݵTjK-(h> IؽYijHE($x*§6NF[9$NB'3/( p[v$-K-eYi9Kхkn4:AT a)=B`vp3tzĒn1@'F'\2N0T!-h(_#R&a&w$'E@NٟuIٰ]-_.eb0̈jr љ@p*2faQUĬ \V?tfUeUTR%*Hh7 +_~gmFG:Mo_[~^{|ntۭnw.^~fJ [uB 9>;Kw>G[{+Y1i iGG 㴱+H 擁|M^ObWN4Wbqa E +J!kO+hAe{VKeԄC`FFGKF6ǽm ++M_i SgZ-Gyj}c#R1cez6bur<ջJ{ӟ?7{>nڋ@eF; 0.::9֖5w2Fu8TA v;Ès/iL&> >`fUFȴbql>dRgC6 ù> y "IR?_.\q=QtD3Rs"-:HN+'Ky^Z,; nթd= >Ys.M -:.IFFC+ind{b QI SYPOnHɜy\ i/%I |$BJ3_6@;A'I|lL"lnmCڴQrjLv lt . NtvbD%·f IDpAVBTZ6 '؀XRB@_Nҕ_>i z;_~PTAmg>//-&=\LB +:2UjH^gt󓛟t˅&@e o}?3pvNfF22Do`]gptKx;!.Bf֩Dub{Ӛ?lVg<߀@Kf^k1ۇڭnfQtұ6 Pi,a4ZoWAl9j`0=sRI<97?<<^kVL- jd݊G_;sA(͝u\a!̏ZH><57?߾EWdP;:aَB8^Fǽ_6vK;"ϝ銚*Qb)ƦbPdk4fhXoұn7Cy%RW.>CrV9rbJ!\(~s-G *\ n{꠪ԆJmq}KL ֚QϬ7ώ1x)Z#eӤk̷2HE87Rm!Pd$1 CO^J3@x2ra8d< 21FeB%TBOHI*D`PG62O9R` b"5,H$܌`% YNz$(.',,BDDPX F71:ui}sS y5F_|jNQR|<]?uF~\y ݏnזr ' V&}N]_e{. /spoCKFHj\^2}*t$LX|TfW0ETJH|ɓX'  7!5%7 QQfwd^$MaJ36q"gщ/&Y6e K8;@*24UɰCud6 *FRZ%Ut22QuCqmH )Ij_ΚL4&ȑB}^PG+:}fC!b R!.& Rg Jπ(R"*+%8vR0 OHHEVBS\eFުpRV>qV~O_|*|EBhyH{m~=m}=}ͳg/ucM×y.=j[ ,4Û?W}ۥBYM+W66)JRxT&"m7&&44oT&DrA23~T5Q vV&Vq? 8@30!SsiڇJHh$X0@Dtœ:e )!Y 3һ0A5',"a(զv\Qd^fSI!$r h|ؙaIt$ T ^G6 2 "h$"s'bbZ>QWx?T|G׶֭l}6 $0]yW˳yM9N0]vv?x\nvlHf9w~94b%g.i*nR?N;蹱Yyn Yx|n@Eng7XF<qr'C04އn5sWyWV"RI+%׿zuh-[=q&37;qD#uE.΅ ~YQ|#\'LR<AHu@A(k {*RNyY'LŅL~hM,e0lEŤd|PV +2lx2V3M+qe1lFn?j"YC8@;g$]TPHlJ`U (^D@" 7iMT*&I#gdU&! F]f$:ƍoh5#d2,dNg8xˍۿjz_7~xP35cbzx_4 F'~  ;k_@OB!. S@.By{kXMX؎py[Ea 0 #63BXFރO:m!~7-bZ*5 (d#N6 I]<-ϟs*:ھLs;<\p8hx jbb<3\aWalσF"R 4Oy^_~nf.H<&)^㰶<;54?Ǻ \Dcmbep]~jW*$áscm2{ĞްZ fn7_(N< F  Go>::{wX;lx:J7[@(iS/!U<>GEI8C:(2C4jT9 , 4QIHE=" 2 .h~p;(qɱq[1f !EG*N!9(F+FfSH->$ %£IU4bOqQ)|jRY6V}ʐ%1,L-QI8Kj ԋ3$ evf5\B9:ALe=%PAċRĢIXҽ[<ԳWEޙQXf{;% _`[>dΌyE%3]uvoݸtg,y 05B:^byV{z+_VEg`s]?KLc:_B4[wv6io}1Q\XcMzK%/q,ЇUX5iy\Qr}|rn%Zj9' .u|_aAX9Ƚ^evvN;QEi lol̳F^_L])3gtn/̓?7Ot)$Kw BZ, Rv*Jmɔԟ@zT-|u֜Σ8ʐ>@D+%}FL5{#ph*&Jgis',iѯTM]2HB- /_`Z;K7Kᑑb^ȗx?hGgf|+}Ʀ["B pݵBok$xè I482ZӴZ3s4wԈ* j~K[KW_;*/V`RӄWjlN:RU<0DoݽLŋgٮ<{oy1r˦#@iC㯽 ^hk*,OM2V">!Vl&?!ڔbvhZjr{;bilD TE3pk#!!|֯$6d̩ $(PS÷R,qʒp^b $OZ1d24Ċ9  %D[SAC` fEQ)!"A'(G3)p@xqi@2&\P]$0Z/ʈdr[ )$C- AF<@jsZ8txS*+"3uU L#i 2'T=)}UY Rz*UK_z}id2E7=w*"ZͭMڻv4A/*뇍@;yYe91yflozͥ.'/~4]tF?}]TLiWfUXճbwZ0 ,*ܯv-gm,s8RYP٩ 1zE7axX-eri63FTfg|O,-;\੄0B͍J#¥K7rf%Qt~1edd48>tƧ;ý^=sp;)-Cux3')Bs~nCyVh?zϪsN' G@Edг2fXem=2lQQ1LuLFi]tQD%r#MOB}2g9E"sPu8gބ,y* Re)TY Ĩ0< _WF9R28>% j&l3ҋ:xb2 0Vns%DFI%W,t= R/z'-NY(QfBvT!UQ|-&\+'ql e z$"{D=1|. κIE<2S̴q*PcXH mug]tRg(/,{[/]X]XW]?z[ɍPZ⃭GEɵfmqm &Z篞gz{'{ϏK|.Ku|̶pV@ ~o>+<-lO=8yxݯ&آlQ#ϥ<Ծ;o|uVwFG/]:Ō/.2-zgJ,\n`u]eESΝ;ˏy*8@mg3g4xCo xG ϗ ޡ]#&WkfRs8MhWV곻}8E) کgܼI =S_GJCēghrgeYlѩBy_;wSslpGLNgg국7YCIɋZB*hvn]裛?it,oZ;:Sz;b}<72sIqn}⹩ {M1[lRޜ;6+Qg-? O>4&3GUy.~S OӻF0^ꎏ@[1Dv+5ۣjP@U54Hv+bH~ɓF{TY$fggo8? Vmo~r_0\P.9~&i{=Ldc|s{3/:>p,ʿ<^;,[~ɳ,kjT|w[if?\*rrȼ [+;5f"!G Vd/.' #MbrWD۾^}oow㳏~v8?U%5mY3@ l{jT|t1 OȄ# !Eg qڙe!.BxmI*lH$&VNa;$Qvs$UECe3ұ!tm7t d_{rL+jw{f(Mo.ԓ)o8vZU8i (ҿجNeʤƀLޑu2bQhe 2c`|F4 OI,¤j"!$DBZS%i&ˉB9_0#;S㓀n)f^gxpRhMV2m'af0CTOz)5 $)И?Kt*YWc#jUd2vl#a֒az3+wrY_[͕gJ#F`z :UKx|Z Wg]"hV]PGQFAl6f×9%򑆩֮kfl29(I=X|ɉ3g1wkgxQk4-ҁ1J|$ GNZ|:Vԟ%ha. ASeIRD@OT Jza[KCňF #OVj8gIƷoU?ɱ$ C04ΘBhvܵD#^% !EWö7w7vv`ikguKȚf1vtὴ٫b*9nFQ9`kNa\Гv#6a "[L(ڭzro9*6C UD&3u!؜asPkjdx#74rkm+zm- |tr :GoplxD7w7Pt%|Йt&$mO۵-W[GmXh˽BZDKqP\萕qS+ԅ)fĴFK_;˨kPxՃGcqmF(zެpNKf`evwzts]?Xޭ4;-MZs5R,_e՚31 r)_^,%~WL_ fm͇_9Av )Bl؉ TQPT_QQ2 O+5{Z]b`lۺVY=hjX;՝+sWںJ$ɤy%k߼8sSHk<ˬ32 Q6G{Jl&\nq'yA x@LTe7..sy*&m#SEFT2(& -IyZEРßE -$d*E!4>+m'Iv64&3[ ZPb_ObSΞZQ"v ͧ\Fb^L)\8Ϣ$CE%Ye0 da$\ fag=Rhr"I2 d't*"%>!uԭKbfGrKjNو`KKt)\OHZ8 K[46:A{q3.\e._8 3KSc):Pqq\ zŃE0e Ƅsp# 6{=^?掂_yy. #uaP_w. ` ]DQ{p}oq)t 6x`i -2^ad1TU(ߝ;[(M!jak 1txЅCcz^CxL>#d>Y^IiDP!): @ުpB앋sW+K̉U\$Ş,7vڽǷ u (ѡ\wvt\c0}ۖtƲ3jYUL<' OmW['kޛВѻ^C* -V-q@tJ')RDމ2͓JMeU%9%" c^|!o )itKchOdR>Y#b6#3H~$+SllCY`EZ(g,:d XUZ!u6S TH1˹J, "sBW[$g |~E{HL+sBb_'Œ@4I#v%!ē݅fQAAemLHhHؒ$BH% ǜOh6fgϝeR2fh/ #z[/ùE}o;gE ۏ>Cuu1& }Ω=⫎}FS(^j)_Q /Xh2hdQwr>&9qEͷzY Va^[S{UL"+fVQr*Piϥk;[w~y烍sW#l{b⤋aƾi''f6:~՛U,,w$ uI Ă̌lcoEGuV6c?ŊUVzƂj&=j sNZŧZN=@>_VX׿k=ͭ; EtۘJӀ tt55*æ (xHA8ONEFgH-DShIxο/D$<ti9 "f JV '$BDdD`e:7TeFyM23 `jrKdnׄdqEP*MKNW<"2M&@,BvS@2%ho 3N, !USɇ'YEfY*[V+쵉"UDCJa~6~bTe"cv)mJ-sg/O\`qAWoUZnoa`yNzF'aO0֨顢/ݮo 4FjXE< ;|J&nrH ܘ {N[h[׳hF{[^)Hʿ'FXZחyVa}y6t:54h ċV!pWt=\[{0#VL2_=$hCT9YndU3y>7[y|UXHbʷ*=< k4t:CfkPk Jƥʦ>c%Kl|6OכI]}Y>===+0 @H&DA6C/_%RaA",t ѰVeD,f鞞޻k߲*2k}Y5}w߹\GShkuum20&q;Q^L䬮[|Cuu{tvy g XPw\^cֻ_*pnO:+%'~YeqJ. . Li,,8&*E.23EdZWK*|a;vf,? %Ee@-G"w?4^@ZY\|]Z&;S%˯1Jԉڗ b$[12YH򆠌(p+1,%BA`Y HfieFqypK] &IDc#B=K9%@ʂ6LPӸqdltj(^unifp=jYl]Ybomx3+\.[0}ǫ嵡"2K7zO"ŵ!'q~Ζ3)qn% GlBw_`+洰+k3=~0h-h$ncz=) tu׷=SR(c QtWUckCʻu9Cay)7XJ,ֲ6F@lu2`$i4b Zk*Hv oPvJ(맯75ﳁ]O2HPP:MMXCbNJcɰuڭ+Yeٳ᳁|G SvRvLȼf[ݖ#dĔ*h$L9cc"$Ol;{}W>:; ݼ~-9y(UlϏJąZ"Gu@hqe\lM4 8xK==Xcaڦb`O `F7ɫu{A)еrg3237+kR|uHDJy{:lwnAgb qa9;{qzGLZc݃M! C NQ Icre9TeSm+u]([RV)-U5'g)mRI.Nb/k(H-1y` lꑡr)W@/iQ"2B 0rlIKiU-0sTqقse˄+(Sȵ--88gđHc{Q3;:bQ) ſBK&G3x `juZ5p҈=Kc@oZ j!՝b"FeaN "Vd }BP ` ! s;_šl領z koiFpje46sC/kheR?W֤l立;r#374nڍwOC1l[->H@S\^D ?@)C)YV=I4 D ɢP&/>%U/z448Y";P Jz"N,aSp'䓼t$ KKd4c_d\8@JB";dBR%C4k_+\fY:OOYZ+ h^Xԑ>߂άLR`K%iW8egĄ.`[IH5Z4IZ&(`E\TCRdPk.al )Ҿ+s;ե\(2dcܮy'?ق_Oe:dBgYʧqva^>X][`mc0/FdX Er#-ESg>;hfptF=wpƳ(Dzwx/k^ܚn7p5m7twW*V>Ao)M#kg⍴MJI^6TL$"NPHћcV^gg'}0W: uLbDDz;zru{A2+ԝ2 hqҸ""B *@`64DN;7Z{SSZmԌ[`q&neۺvibOn/g nL PF\F[ }`+koJekӟ:r]y>)UŮ[ORW p2L좚,R4qLb ](8z2K?bHLheC.'׮>$HrO%@Rŕ,UL0pƥZM"cK*X4+@!(p|F[K! 2sńzf\g S"-*O,S3!4٪ V*TC>L, )܀IDK:4Fl bZJDJ(d&HR9\j vvOllKOzr6ň|Ƈ x'KaooVFap93p]Vcg퍽]A{4-m<%"13p0oY~muY({GW(tlq5:"d͍ZP+*×9E^UeprD| \.mli CnQWѸV:4][+-]X/{3T-1#Z8@̮p9P.C.DQV+4[W W4GIkjK.Kfm}7NjV]&C٭mF xYlaRxaG`I44W).ANȭmRiМ=[Z{S=_hhə˖Z;~}L{K;K ~SAj(lNtrXߍ-ז֖_b@&+w1xTĆ?Wp$0_IѕIO~)mtW. a*Yw^ #eŇENMZԒ%}R['2I1IŔ\*P?f.}T8QٓPIC *]k))}GڄlSZ" TRi%"0iK*uZ@C`hQV硔sEbBP7tp"]Z dVfbJT(JZ?zeHh`WWӚc^})#b']D}#_oqtpȫ og0 )Es<=*`~l0uxT毝O2tO":vҶyeD9m"I%F9O?#](*EJWR5յ.M]ɐx-(/R0Nj\(!OR$ 40Q7?9QxDoh!%hY*&Xbj1. o]5s=p0WEhŁ+ۚ%ne{,GG:ց_cΩkLf 2^ lYWBܶ6mDpM0Mx8 B>X@׋1ۨ. 5I?h{λEho/4.L{^#&tNID8ctt:03[w"ffn-/,gw(uë2 )Fus{gglšw/1bl{TKUB&ת76jaFO;25֋, ,άpqÃ= Hb2L aܺ;sgG~)!+z/C=Y2IT:S*dA3 ضdR_2pzgJ{ي]e`Mf5UvFaZ褍٭ Z \;3[@&Y뙗=y&Vv4̵jeZ٬VGgtyo KY 6meҵu ޼ڝoL1^5غcqmᇸ8hӢ&I]^ܵ{1La]uXE[G;kX'8ϋ+[2/‎qpԃIކ;&A]z,g! k'۳p|~2xKƕƳ&L0Mt,*8Ɵm!ȄM6CW!k" *9?y$1 3NWmn P#%F3bCU0h.Qt5N%sa )#CP%HuI벘}2sF+17%r$ ZtUk70pg), +!NNn@rr}&NNf(KrB 'vIl|CZqc&ibyC!8+x ᦒ}w aCEo#;_%J+wfGxo1JMٛqHv=c5: У]o1CpG)θ+n7NOg7H o<]{J[b [[;_!@c|wa a ЙQLJ쪱M}0ͬi$4۪/ڟ...,`s5Plqsqqc딝bs?SL ;}=05,cs|k{𤾄:*#.< l>,.a !V1@įn4Jd,Eh|Z*?]sGTe|Eu6ߨhE0ZJ 8[5Orp-:#hȐ78DO}v!94,)X%Uv-ˤ0.\bQ6')TȲLy*hu"|< 'z%LȌiS*DۧKsiR H7y!)\Y,D8yP+,0,M'4̐ #%M䓲k83Ke 9iEUب.{IH& A5<̄k*kvyl?8_aPߠH@K{P>^[qH\0}g'`p*Wq7}pHliif?ۈKiM$+YT+WpC.TbrQogp(9QF Gn_ UxK=Cu忔Wġ9N3gS ~&p"772,ZrO=8؇  RKDjoj>tg3 _x?{4=9uf)Mm]SW~h}XV-c {S7 L'=?985j#6wlS?eSZqAbdI~NESO\4WS10-63/zTP?7xX^g^CСGC0bECHlnl=<(-l(.7*E慎US4bb?iX[[5juu+@5TB#:;rjh3r '( 6XpD+,5K.0DžL% I32H|%RZXPHr|O!,D0gɱk *It@$C!I!nt H|i H $si]dKp9q't-!(Y"e$Na[U9e%9)RX.>6DrFܶ@†eHNB)/&I4  1+?_Y]&C懜{ٛ磊ȓ96rCQՍ {ur+kJ ZDJOh~WҪ'"fg / !:J3COD O׈[}ؔmHg)0GNܰ'q6efS kTWV}}C>gFk5D9XG쨟_Z`QxXݯVJUENOMܾ=aq,Fcړ֦Z*-ކ\=Δ*ZS=3{I4`%Vyco] bAYK s3[yS؍sV^b@ ꠁn $#*6ҊMMS:;lO74NNN*vAx@D<.>vJ DT}f^{[O03ȢA8 ezLH@bWnJSšlɁ K.N:,!0@@d'*d/ ?(뤅ʙ8R- EX JRI) Pe|+"̬ ,A1DL,gaA gKZ (֙Ksr9 ~R0/;rY_d*n'.,lٲɍBX=qfH9fg:)@ġ?J׬jvdJ2d%DpTGw&ѧK 蜡Jكyj,+Gs6>rugt`㩉'7mK!uZfʯ9yP^\[ηv΢Uc3}d&ZmĎr[]i*\]WڿDa6<'v*mr}>x;4GP>f@%ՃeAYFrIW\ISUF U 7kgu]ݩ##CPE~9M= C#mh,/1?-h[jꐩ] &E<0@ <&QJ"QtXA!g0si@#59~A溣~,H' T% _ @*y18sJCn %"/i m0DVꇔ7/cFlU'JI5]gV*?M4vBH It H Hzo@ѤrɤA N&Q¤!4Ћ\Z]Z5zzƍKK900P(7b}}nq.Iҏ7;km!GKfALwqaѡ mfx0> CKsGgwaq''LiM.u,zeZ\b%.07_Cģ(^WÙ{u"*: -w}F ܋5ɩ{-,2o)U e /P` }OVGRe.@r  j/GY[ŏ?wfg<=_]^QL/X5npB6-fH|7g&֊;-no w-8nPI( YJ, v:ԦuD 0䥬TWgna4dVE k±91d02iIjOn EI3{a3% ĭԅќ޾IT\͛At%gҔ#|B,f8`Rq\'A۔x*>Yf@*c2< pXI(%][{sEvH.XOH8)cEB'%U6C߯[ϲ(|KӇ^Icf: s%HɰZr%oCg ^Pi-A¼I=ÄTMǁ%1"'0; {=skv_>A ʁ[dGG;~vqEK+JV EƓۯhEZ!$&f&b,QCQb_u\E"ct[[ڡ %Gb,h<^(Qٹ|pp<9ޅ+f عLW%ev?]?;Hx󑑱rH\UM6?P̬a&Z.TлEjNF>Uћ|=7:2G={hv)5sXwA˧[7()Č# SdvU8?ux1gvv_m 1 67;_٩2App#StʌV=ꡟ9p<*krdP?aZօEEzg ,UHY'_X/)!F~S)S# ARʗGJOih;H;!MX>t.I,;,Bq3KspH!)Bb",M(u L Iln(0]@CBk8HFO4jQ2Iֱ K.-=zzm1أ)z<8f͉G.Bu皆E.ynnzx"t&&+L.OJ2̣n+>qOM]Ω+S@P\ޠWܜO"3 pbbKWW {LfrL(b.X2?2􊓊Y\ O[w q;;IlLۣ bS(Hap^ÿPLxLZ-b>g6Vt7nn-6>\o cMn E`w2J,;g@oGgs l˕EFv3qlimz2n(}Z4MKo(o^,ߡVtH̙x}skh|L|@w ;29fef ,D-Oq FXʮL¨ $b$nhf?OC10tMJ+<{xx8Ϯ&%8&C$dfIjZ,A)#f"dưUpw8$p9%T(b0ɼ4|]AHE4 Z &YE9D(9pӚٛ9 ,3&a!D"B>x_RRr"*$V0Kp\0af/8^ˆ>eJLD".1R`AW ,\&y9hz]]xO6`wZ|977`&XhĊE/ˎx>-\A3X\0 t307V /X:Ã=&*17leEP> R==eJ l饂FMţ,m;9.5+KGUivޓꁜB!W:oXZ\{kg }u!uonn,//ƕ ᥡZoA՝ǔ{RRi Sd"4 3WoԳgs-c2*Uxrbfeu:VcLP5=SE~h'yo=tPCKN6KۆT>6|Ť^\<9fzUsj[v #ZCMc'4rӗAEtۢbFꁷ\iK" OIĝ:S EUU2l32h8Z …têR.Xbp# 'C܈L9 hky"6O8IPUI`kALB,,Еm10s8HB\16ݷ@T8fh1IoN&ϨCHVʓ2Յ֠$C##C# ($ MɷELҝȊlF$.$\Lb(/. _E#ɞ_>˫ 2KP(L3Sɓ'###=QԮ@=5qGUk}edhɳvw{-6_3//uP=\>;z+Wѥ -J1wt(A۲g06>ۿ0BwC8dKGC!gaaw~?zwg_=M$\LLwMǟow sDF77~O>ٽOx5q]3k`O>̭[W'&~?+_} 1ku&sRq?7"#>9??wS [FGhae7uiG?!ʖwqPni$p]2sηfO֖?gB'_cb] M 3k%_ 6oY]^eӎ)`F/.2aePץ/)Y=U{Ct?ndj.X鮥_JD!R#_D‹L6z(7Y kqÈ5JޞȽ`g6+Z ,Y`hW,>٘\11xN*BU5"E@Z,C%n%pO˄ b :J1H]d V׊Hs4z-sxIRs A(QB /*HH'ADoD" ,^h"'A,YH%ހTxtW>tiYz$>X;! A# 3,\+eۻ|ks?S"X[_c QtOL `Ha"|Dgf)eC,fx 11'j{YCų StK˳X^8hG&''nܸvƕq3; 7YT&|8_cl!W꼠5;1č響JZ >nݽ}}_#}}L1T慩"`2*q-6͍R^Yc-vнRf Nk ÃWfnƢBB|MRiP _ CW:*~T +S$nŃ/%2# ` y!J5~?,a(@l~"ۜ B q081}m@VH.%MTD֚p0#YRf IKDִU|9$*~+͑zq HBro,ZHS%&hNXΗdY pdu sDb:[0#9Z'ug#2$hvB:.̐$+ stRW.o>~r?P:8}s~~?*OLLvuu./2, GB09ipWfB/>)_8$t!$~ùٹ|x CG{|վ{J_# B}? q9ٷ:Ӊu?_ypWK ]/>|mmmmfZ# Dc/|=1n ~|y( L ĄM?8C%%Dt_CĎX^76>r3WM "iggwnvO?SW7r?X^-H {B"m>#>g,Ҧ\._6ZL_- 3=_m1F{76DA|:z_ÀM8طE 4`(A'-4 ,#d N[@H?L*߿ѣ'E5&Vև-eUE&FQ_:(5-+~ RQYxEKM2L5էMkAw/iogihZY[x1]#Ô9gJykji25@6dqɝbt]ttdyIFz$2sNP[`fhv%B( 6r:MhqX&,1SOup2)􃃳ف I"deg%\XZ 4* bfNfa}KWٙw+BM.|^.\R*nIH@(eGɥ7ut-./ t0I45odk! 7qMLLIAl$8J)}@0 Ñv G:D+d 5N*F] $\g_[[yD+TbVm:xnw4|)c"tǐ?t"ēMYg';$9!l>Pnk Zc< 4}V h2/w3Yڢlo`KO3˭bpMLt\9p W[薫*h.Sb8mF>.hr:j FdgO_<|hiqIS^I24xP*p mW_=<aٱ?3jy6xmm1Mǝez`@ݮf탉)fh,n_57;ZYm<9TysRzk=9vѳjHATYg@ˮ:׷i>ۨ|B+p70vh"W)|) ^eDg/\ 3Ow=j29tvO(/R 1*%=qc.2 LJ BfLtƷp^&Vʊ-Vޏ>bx/ 4C 3njbdrЊl+|>fjVUڋ-{ߦI X*y؇l=?٣윁p妳q,EC-d\󼓯+Qw{ύ;Mŧ_0 V5MH 2UصֵKVT=vAYU-8Ǎ0[ {$`vV餫~L\2j][g`*$__&܎`DA(}DQX *5 Cv8p,K$H #u2LbSa> &4W& (- AWZd gZ,!F.+׉3_S M?hbx5Μ>iOtaF*̄K{^:?`. ]W~   S>=^>0FH`;Wx;)WV66:4?(&Иs`uჵi0p8980z劖Xa?6ءO{JR^NNS3tQy q/Y*]c|@NxBgu"oviSIz)mzs)(YdB`J1q8'B rP !l8e%|'if[TPb$H [c4GRF eIh|?2 1xlaVb(IK J!ֿJs(/eHՂ8lvʭA0+<;  8L SrJdʤTHJ)Qf- ,++k▊,-+d ZP:!kGvwwuL_|L{ё"UBil;̲,dT6`HCYDEiiэ|eF9\a>}uxx̓df./bXZnjO}Ÿ%nia'|s~56,b|#C^W\]'|=_3=Q׿2[,ࠉ5{Qf ^x5j0|ZbZa&qbxk+4`z$g1_@< 敭z:'*z{r9&^:=99>11ru4| syi?ߟ? s$ŮSxrM4xvw9F>g+kK4ccÌaΝS7nNçg]][я~GK𲸾B'&SW&F\?0s"p{;TL;K'h0yp{g/8%4]|A;:²_vR׵g1jMO V--kPɯV."ix%-)fYeA%nhMP=!j"!RU0;)ǘ+do)t9atzgg OxjuSB,/a1'ׯ\zuwgSK=|J{H=HW&qGKӗϨB߽vFSU VٸPסƯŒeE^zDDJNI?=ę(!fA(4ABC56#M#nU#@yGȖvI rD/}B/HⳘơ VsѬpٸִ5QMlRRS[eM#*P+)=B( E\D X:[ȭ?ծN ?t^+[Ƨ(aaMG\E]qʩBDN8 0a'e_w/,W8Kg?-gXފ%0Lh[WhT>%|al2Q'F0׎.Sq訅f z o} W/>.n 7|,#QA%-x"4l˝ gҨa;TuO@cNKtxhTT;;_8J(4T7L&YwL"E }KA7xw???T B@`Q hq1|qh$xI,؈#a~0w禐sJ{ﭭ pwn޺122|>3AwhCak[@իPb2RG?O?'zro ͭ _<n\5Cʴ匍0C1a>C>cIT;_9يqJf0PUS ="b!@SZe2xd S؆%zBY#"3rδppj<3ʒ*] Cf2$S \-\ܙV\P.JWTd#X]V ֡gS2Tmv*S)!T"4 #DfRBzM]TmRQ|XILC nIjOBA\b)D k]\Ok*&22OzkL+-5 Z^kPی2 S')5M#h2c8N;lo׿N(k2D{!1K2 &p1q'O(_wqjsF iea G"pVtODN>-wiyjQS:/|g&z<`srfKo b0p5 0g?#Vԡ0 jbolGf@ 15 t 2'/ ?46Pzzw"_aՅF]+tvn_ezW3ԣ򚰃FJVX>eGwoC_៿F`ϣ?7^,T]Ɗ^X;e|a/oFK4dD~U?SQ/]N\<T>U\zٙ'5NĄ\? pkg+gt (%6uWy(᎚DD:``RZzd8-c\Z7l‡K5}rY/¢Mr޼}![TL32"J%,&~)qduS\s@yqhH/!jBCQGZ҅.3 0UVs$ʄ1\15QVU/t!/;(2ܞ/\WwGW;|㝯wvh5^>Ϟ<;nL[KXްs* +*(fTxK*J̄mE#4(U 2=?"F%LrvA'f(&1 h}b,(%K(l{='٢D$CĖ&Ց-rJ'@~ ,ԸpI^Nh8+6It4MKB@qaR%Uip#:lZVMXq}Ħk PE: .*>Kɲ3¬X$kp~\ͨF"cI儥}-VDp44yN HJ_fp 6e NBZ<ĤvLtaHg؃_ ֏i.R=mc_ t-KxOSn/4DL>4ôalͼOf[H;YgW#G f3@ەћc/}"MD}̵_||>I cED1K/iASbhp]mX9='–Hyp8 ϔ:Ǘ~X_ӃUB )#Dɷ@NXW~PJBȂΊ&N.e Յ}d(?' =TrK<\0C 2D󴾑L*`bE #)uJ\8SJ:Lꗥ(_ygB*AM%9' ZH(f:ɳ&}u1M4ĒJџohm.?F`?,)9?V y;y&-[5ry(]ԞOɞ#ﳳ|T=&DX>~φrw/_//.#m~SNOG)"Ww~-N}-x"?8{ W.~^ίK/` ~zn\1ٯO|m~ְ%{bD@x}QX0K|ތK^N>=1d,LrV)Fo@p 6}itRc8֥AM}e+PCKínJNa& 5цRdF-K. ]ޔ*t`egdߘ6ՕgEt>Yo GEk^*8[ ZYQձ&\ig.SH~y?&>rDwò CQ^)"C%oCsS/_]g3ΘNկ"`Ήjj9WAMPAb'׿!}3$%_ſMnʩ%ߑD?odw_OKEzɟᛷy$\[y>r0?-wSH~6|R&7LnTtQYRf_Ci@Y=p[p(Ϗ|7G3߄-ܻ=տw#~s0B:XWt33INCFE2Nd?Lǎugnrnr"db3%UQ.+wڥEbOUV4LI!R<ڦ凞˛=l}m-?̏"6"ЕmtG?R`~f]Z);mh,!ˏloI+o뤖7Pg5$#7}|eI30dC 7~7꿍OO/"|@a䍣) Jnz>yw|IuNހ[m\1q]`י|To_͏3ٟU, LEaE ׉ 53~~s"*ufp!!w^*/ٮ"Hn;PaW% gB9Y[GKWPP豑 o@|oWvRhiƎ&:}~>&\ȭ?EO$Ϗ1Q:o˯+;='u/˒$( &c)#2!yЩ‘ᚻfkw]Ɇrf \Biw-9ރ0g$\e ɔ@\~p\ vy,OM/־\,$>̺ ׍}vA ]]\jse:c`A6v1G#R7M2ӣёaMX+KTm/4QGIƹ݀Ƣ+)q2lKQ9|&':S <9!) !O@r\JamkRZKȔ\S~bDxIt{O&3R!*Ib.g-Ow.M1،P U Ad'yE1Rظh`*#EDBgUH֍9&tZ=FCP 9>Y=vAӐq2Y? nJS vC'o* ܙmӠn6}FP;UݴG"𴩁j'ub;[Ǔ(m` _u .jLjBYY*͋C턫G쇋F'V` ~en`mAZH@5^r ?'ŵfZ"H_bܤK/=rXC Zx7-ϗ3镐ݏ\~zQT|M"+"*i솣,jd^iR3q`I#`Ɍ#.Mx!J\M؊d`P6PXuXtv%YHլs D ^o,TqV~ԇ[y!6=)%@txi0@oQ@/H.׍!q\ӛK$o+0SUY8{~ .9{2P3y3xxi[#j[6akkƅhbfK*R 5zCEq;#F#4VˉҪ5LAG1<*<%w1  .ff" + ܌z݃jsŕ/i*\ATQ!ê\ 'VLKp_bProha+l AHsNHaUZ) @W>0q?\rk8cNAjl {lʸ2>PyXht\E%cc2C^]m7|` 9O%16v$5"8Y:3 Rwj:. |3Ɲ\lN|!=5ɓAۀn8,pq͹~${ GdydGv\`#O^7xeƃˑ_3Ʋ.<zY' y@ gny\.چakG ꘈ0 @ս9A‹74rHL!A6oj3C"5VϬbk\HMU{& \1:@l6fRWî8d*;x=؋=КSwIQ1ut9U)s ieHc,؜j+|.9KXS[:3@>llAMm있 F6XHhYK ̰}at)l3M+:X:7C/ϕ"QZƘtU? !'"q_ݒW+fӹ:whz*n0hg70Q2|_҆eI+.4 h~; |$Y iKik%q~a!J8dtM! iBeȴcLS QF3Ǿ)Dq5h -PuTR&JlJ8ˀ5Lڈ:WG\ifYwl+376S.:RY^c$ 4!x:=օ~aDMuL1BOi.&&zE&RӉ"N>Ku#qNNihUhqjͥ V(㢕UF6ImLeq-/sd#&9f>CjWʴ`hU!24Hđ"tf[&HU =MqnL+ĩ.fO *6gf>6>_D?Ѡ7*}q_EA[ɠ'Ito7&ɸha=dv: Ok8,@x R{fxA<,rwB&ɱSi+0nrN1dj;|,wqAⓀKO 8)(_=㵀Nޑxi @q I:LC&Ua:EDo`P䭑PsSTU}{GcYđ[ <{(S.nͻbO7-oHJxzRmg=#ڀ9 פKQsL k#[)·lscfC$>*QC7p{DQWk_vA( ^O#!5 ިwd~fH,e{|4fuw.\M>^L@ØI)VcZ}bЕi0 3k3-FA-tP[ۚu.$3j| ̒s<@hlš)r[~óĽIOZjv@c>R1P.*YYJ*?Y)p_W|1l-C;6NLVJsƟU>sY?)Dz_0!Y`C aCRMH:SYU3f[ZO7 ƤLMQhK\>Ic kYm2MexǼwi^3ƴ ^D /^Zu=*=(۰o\\.=]m< 7tlJ&F@S DRob C p)Aa/zuu+b/fF Y\0',^)bh,9oO8ʖ%3cI%E#q bӆ%klsUa10k؀8ͯڔ E`ʆ9+rE:t)G"ˎ %)e=Tds̳;SP%1!0zJ)7\ JpfҎ̡!6Li<Ie0l5*áX Ymuke1MՉE<:QT%uD 6σha F *xkB( N(pvx8pug|X9$Y6Kt@t"Nf .S`.z16$Jf`V]@bxj /^B2zx1\QmγV )Da}yS?P[Lp+ƵY]VbuN6N`)Ve9=~R$] ~yuYC:&St}_w܌#OW\54& py q̼{ڸA)Vdtdս9X<~D1;} $+u &OU;A~r /U|~u~T^ ka9_oVpK̔۽ow9XUwOIc dk(eKcT_5 0# dQ,{u\I^R# lKOZ"Dcp@ryV1lda@QEo?э4 tkp-y00䂐O|%HNPQ4@IDATB)S, Y3{s|Ծt'?VThe*5D-`}=}hHjɲ ¶2X!Óޚ-T?WK5Vw[&: Kʤw= }1HG*\ ĻӖ3U3J.|ř(0mzmBvG]0jj36T=qb K-#ALFgl(fDg%z[2|>/r-xP<7A8c4*Q0ybaUX} v>wGVOvv٤L]bpERHϋ}1y3놰r"•hy' ZAX>+={z!ȆbG(aIt +<3s^^#֠p7 ٮJSsǁ)_x)nmi.JOěr~~øz2oʩ bCK9qr.:MMw,g(4|PJo-%ޮ-0̝WJ/2@r@(3Ͷ\WŧGgaj &'@^U|5蔟ERCHáv_VCf#eUcBj۸)(v~|/,6MG˼+WK}WR Scp0.e +0 +n19=wJ\zh=2[v.;~)9{[ .M44r:()C ]=,\0ԥ{.v&QBoE܎x #SVR 4{tیbs7IQT `i_BItDRr;TE]<݉um  3Giذ"⫛dD']_*%yLRFrdJPl"rI 4Bs$,WD]V9 mxF`gPS#/"4TJYHa8'N\XiҞ줪x^Q~By1XA<:H&!5B0Պ'b]A&s ¦ +#"Zjc&xSJъwB"9zɠ8W*0n3Zdr\gf\;G +2ᬃ(3gR5}[\ Mx5I)9@5Ey94XΉl+Rb#%{M_6`2jދ\AX%F Axpp{Ie Mdqܠ`9)aՂ=E630oԕC(AON'x~5Ƀ\ҍ߸Hϒڣ#TA+OdN*BP LZX;=BV 6y3*))Ȍ2\d%x&y}n20>8>]xjl}"fibB251ϥZXtKl'4)53s!I@`oaϑy2Nr.ijRCoh8";ʮl.-⻧LJh]xo)UR q-kP.jQ6ʿ~ȲW5rs%&ɛX]MqG#39I=V%&$B30 b s0Dh٤Yђ&:d |]dŶz)9<ӘҌ+3ZDAYx'!o2zwKB|Y\V-}PE)͵k 9a) [s>|||<5ٞ8}4ӇmŔ%8 B.zbKPgGe~t<)dD{k9^i!ʾ:"]]|vLy^,88EF C13Uڷ[@'0ƻ̋q^7~s|`j: cZ/-zE9WƖ;EH #Fưn'U<,jLǷ(%ҽzL:~a90-VAZ齽Z=61dR~d>st:E{Ll |RK'N]k:r᪦y;5kcm8XA(BA>N_@LS+~vg93SU&уđXZ GsXRWXIQD8c@+&) ݉3:fE)bYxTHIy^wW8DO?/7*-$K2fB1,?ba1xRSfzqKK0ضnwlNJ<4;K^JYXX>0T𱒌)gVS_t id#f<!_SVI\XVm2sŒerDI.&=f:9}c1"bèER) f I\ @0B\? IJ›3xqsVH*  'Y\R/&)Y~ 'Mp]B./[CjWBQ+)OWX-UWr&S)@U @ġ t1~z{2yAB5{H=kZ#YC“#N2\9m*5dPa2eȌE ef /j3:`d#|Š2+D\4"L_]L dpTlqbjHi S!*e悄"J1XV.b鉼DY HR!QXm>0|C'MM 4*=;p3Pe4sk͎K-[[ٚ#x$3&·CifXiY;40(9휉9;/֛SK6Dᖡ}\Û[8$2 H{.g5]xS\9F~ǩkU7S)Nv ŨBW<<,ů>4+BR4Y   MXtKc-5){YBRz"ܰ98WFF5d`9>39wKaf2-ӏ)SrLx,e (JE<K4А'P)_4YFΐ?9;l%c)HD;G54Zq0/ǙbeQk\̐/XW|}~ߖ-*ĥ^Ca=IidhA(!WIѭ pJd:ᰋ\Ҹb<&M)yGwaó,麽֜@бXy%3gYZ'U>dT*~%< 1iAu#LVeU qW ?Ezlu0!̲O:"Qn2HrVAP#ބO~[;F޾R2q,L}~ DưaHSVcy"/F>ƣ7'tQ>PdOm,z!8p,51J)i`a a#d/0"\gtKi(xD4=b)~|{y/3eȁuשRAG/(TeK Jº xD{."bekNRmfEy<~a=AbLZCF[m2u`.Y (B5󝹓a"x;BȾJ[=U(, wj]f{b3Sw /acaNT܄ۥzq3_(9dΉ{XZV!$Gs6)Yj'!Dyz#ZǑ/%si+ L`y䈔 _wca@ue 1%3}yr#cHpUu X> (}s Y9Tk4s?OBܜ,ާV\&4D{o]^s"SC`2-9ˎ\ 2c5sPBP h6,oG "B(*@Jf2g^{.==_A aQ䕾<oRvZJ s%Rƥ2 $Lz$mtX=`8ᴱBX_)vb%Pz3ܗOclL"o4U뿧D*Mh Yb2(^H0NfBsfXu 7F@Pl&02]<.(k2 |#" $ 翓e5!FdN=d q@x$a5-$lY0Z^-ISږ@li,Q=h de {C !2-Lɩ@wF d0Q, L hʄJ $hUe l*31|4E0-#̱,vIXYqK, $3Y<3.w$dZ%4%FGfCfej79$$e5D\.T%l:1$Xx$)v-:_HB XeFܘ ! 6ʘ:F5F!9(8ц<4AS8iEq*7<=:{؊MdssQSs^ (o$_vY>@ӈU֕D[ I9ѡ=4 \UT$_<Ƶ"`߃e~ve(ٱDHɬ܆LN6uSjպH 465Hd qzn܂&$i KG9Y%,Qg/%P}̎%TsZUyw̳ |4HƬ WjeE//uH\5:FJfPҕz:I[̪ Cل̙ĉe%X$}+OgLN*p=G>y#j&a͢>L 1VKS3%nA=H e$TUQ8p̑2"J" ߳4W-b@i;U9rvd"5mIxu'5wb->ZIYI039շME.*Gq6% |8,1w&k5J4()p jBR,O=A>hpJSs9؟MDŇ!jU aY,PW5J2( $'XA  f55N3ҊMQ 13r]rP"ǺuNQ߭IEy@`ςIP!9t N6п&w ,eH]0J(3֪t4OR)pKYAYeT |ɻbQuU rt LbAӘќl'YpmdN45~ێf8a8#3m!%FN}W^25ja1o}8k704ga^ȸXdH#4wIE|^n=$!KaKk0 Y?՗~Kh"*0Q,LWuF w )se59|6gG#zƾ#"Ɩp,~>BZ ŢhOB47/gP*6 V\] dNf14,!'waGȚ-ki\|Kq3ΛM1GhJo,BRj OޜcebRh?L@a˹"ssA= u4CVٛ d/~GD{&l,B~yj:B4 u:{E~S9ZS䑓Ug\4*v>gS<|”i79|F5$g= ) OgpPó23B=uм^b N:,qdL&p0uÛ؂r~kw."X 2@!S8R;Gl2rؕ}} -hBwq/kd&_ɟHD٦qaVUyY=;\m¸6r? ȋ<́ R`qD5bCo&f.dm^:Wxf²کd0{OeB[ezQ J@>E4%+?<}^/Kdl[ F62q}Rc_`!@x Jc[bCjdx,֕9C\ΰ( B]^%ODҖY2 h9ӘaED4'(@5DPK.'goK􅂨ntqN =f782صTC&&N맫wحYZv𹽑1>a%e44Qlַ*?D:&ΟT!ST]dFŽ}?6a$ F4׃(wyc =_|yC²D\Li!X0 1d N嬉y}Le5YYI*5,L!:>c++[B#aZ奁QX<> H\A#Mhp*Iyr7 UV55EOk|GcLq,͐,)d/`|1?f+lu]6 m-@+@u1CFR$U]P=*@8ʒU'8h-sKD,= b5χKk8!a .C7ysȹ_ U*$'KdaX3,;AP'*B@ѓ%e_Z%HXf9\?%ЃL凨v<Ӊ*7XVԗtD-k1PC:pja V%66T)oCc™轌cϫZGLuϬnb;ЛMBSQ[߲oֿK/gUsFGKgR1U9/h1JYC;,4tOt+Tp#mA>ڕF`c3X`ܩ:O0vN L4WVywӇ %z3e\X-CQg=XɈd=D@? t ,0((| OOk .?Ql XN5t*,s] .:h3?k#m W68$i&w>4TzxPty+D:t zɼ9E]R M6&-ŠSKFG$UOO2k"^ 8Ȳ4 kA1K86c VV^c-?T?6b| ;_}X"[qԼrGB πFP9\DlֆV i2PSXl 4HR,fH 8̙:`2 npkۉRIn \tQQ V  h :4c n6s CZ,$Dq0M&+z\O} ۤ0)iNjba(3f#dgzؒ8´%" +z,C`q#H _9(}*,04`c5&&c3tY}MFGʊ%F"X%t{pIeEV++ 3qdZ8Th,~;iAc'(XjOy (*oI]r"uW]PMIH ؃sa3b@i4RR\a#ɺ0ЋlfFkL=d/Q-3x`  UYI(Հ ']2kVHe3$*`r(%jRcFVmK b@ZcaF0GuK'ި/g\&!= , )j@hIC9Ǒ`h^, Ơ1b_~5׀Ư!N$(bgL gNt2'y7u!}8vPxk"q'P[CNr!K.ɖiEcvа 3QO xF%HGθ… Dբ zb*M+ dtڗ '+jtl b]$tHHsZZmA|aD"s???7O/?I!􋯨79NMYius閕UvUݻnp+tX ,\ ؊DvdN HȶD/_9AL8 a)YV, (9-{W1ZI>pљZsg<0÷`t]ZY rhdWPXt>qqu:.@#+jx0w3(0z6HԆ.2R$6 ص"L^06$CuHY*x$rT&V]¢2tYBu.L[zG5&:h|"'L-B.fTnu2$^ G檉 '%&Fa5ěcE@3: =1 R5AQ)6mqkedZ#j$tuf_y@"ۏ(2]MYV2G6YI7Yj z~ƒ.*Ť\uDT%k 2kQx`h,M=CMs G@;8Qp :hW,(-/%x!sPFz qx @ Y2\t0(GFeP_aʝ+lд"𢈝8RF>{;Ǐ}cb@IDAT'۟ jݾ޾ʛo}˅Ǐ4o! G $ Ź .X /q!CӨĀ'X Z.ozu"_4afzqͬ1Eč0=Bq^YstA܁$ MFj^=Y+ZTc,j9,*"Tcw1`2AڜZ4M|hDmOݔaJ=sҚ`ö֊jDIԅ-G/e@ZRl̔XUMV5Ln|he!ԕCX2е-v ˱jnfu eHRM}F֭&D;pcJ\t̴YIƧa 孞"tڵ icq"5@K*cEE򤽿ͳ{?zp.W;^wnFy x'y/`wܶBqi7bgʛ2#"L[%e>,xR+pҡh=Y=[f7|F؂I^gE+r5W~iH |z' LzǨs g"Q"(E-QŚOLMD\ݷa 0 9)pjKX'srY皒gJKf$l|haI`$6a uP.H@m- ap08apt28$2&U`%%@j*THB%y@đeiZ¬_AinJ̙KeZ -vLTT5)gXTޠN1a $ cWEíIR<, x5 e؊G1RH !߿7|~w>_} (o;{AP ʯ5$҄ƻJ@%˹kJV}yoJ K!]y;6ӖHQ[ xЩݐ0.r@/`J@Q=/ s%1 x@I^0,d6t#=tDL+^[ α*,Gh@$8ԩQu..R spp [I]l3获e[F6g96آaDkc d&X|I3I] F6^-tgOǑ6Ԥ>Vi5@sM {İk`ZC6>%I8YmN#C#p2W(Fq4JgF&lE [ 6=HdU+HR9G,=xW^kpu|1 'y/ݧy[ĂWW '#5&Y膏񠈙*HL tp˗D'@}BIfkTXnԎ<-2XGL2E↉rAJH`{Ћ.mLu%=uzsHeZCX,aoDD\) L3,6(]nJ$| # BY:EvZE(-!þL9E@vZ96@ۥ ҅J8ʚ]4XtZYIGaXRQ+VqGߕ$#Hq[CT ]9ACDT/H|0n ʄ5\ ӬbȂQF[w}A,@\a2*Y5FPvO.i=8Pɴ"3΄&OHB)cFvQ\ᄄ͘c2 -7*Sɔ|͒~ U]U5tFZM[b2̩WpTzx TǧGU(A.H*BƖO%=}]/u̩;>k </ Gːd2cE@дc1VRQ'I9 >8ڌ\{UEX1Givyh`). ԩ*s`Zi)3dًC^ 4KȿO8A8HWfq! &ܪd'rPf7$45<⚠GUpQ%b`ŧ<ު 8h9(Mӳq> $̠mVUM(-fWWQCıp@ 6#!-O$|tNqVlf4tA/ʠyT 0 HKx#θfxtwdg;B&Ԩ" O@:|ѧc R' Շ*EQ8| ;5a|˔>"e7#I}A7`CX>(hJy/x͛|u>gC~1 ʃJʷ]|;썀fXW|ȍnLJN!<֢Q&sK`FtZ1\Qd5T56vr#Tޕi-N[sdVj 7&j (ư!`.(GܒE º8HGP}_UDL'ڧ*ioRAJBƻz9'Oq$Hmٕ(#epL0Jp8<ɮ\7L F?$!hƻ/1PX<|UYZŐbc+>ÉsUe@$Mri Ng(Q/ʶ+f!\PCޙZf)2bAq{>)l4bĕԘ4Q?|e@gܛfXU0jz 4q3m_Ck|#|}ʓq^<| n* f&Y7KfD!9qcڣL|=8` 7aW~%ZArV1=?̥Ew7A M5qG /2X} !_̐닗:y|n`e*+]JwpR]hf֮nA{5:(5x4/)m/<>uܒ0q{ixX #H555DaZr]kdʵ -2X| s0 ( Э`&%e˦1 Vº@ͼ N6|FFbWI szD0>ׅ<( @.SE+}0h`81k3*WyN:!ӶAd@W/XN21*F-A&btO 2; n3u:Bf]Zdu$Wag+;_IӼO^{hnj0(DžCY-a'2SSe{.|=ӻ䈞\*p8m+ vr? Y0(=g!%}04xi;/_0#VFmɈ !,VL B+) e-Bf9PN]eNQ#:pDXpՌ#bGB](Ĉ 190 Rstm&z5RtC*s]C򩒑 m@,(F;1-۱RaxZ֜t沮!]e&9auQԮ(r0qW0:ΆOIVea=]orwL>^Lˢ( Dm.k@^rdQX=RUӅm'Cah'E(l VhO*+:B^FtJW!T{NFV+Hg9E'ư(vb?"N[ ` wlaȜ| [BoNjGͅY䲨ȭwߎS;$tKQڕuZ{NF+$-!s)ĕzcu4,>giRMρ7#D!8&KaXZ}Cy,DSPF#>]^$\qiFWI)vO !(UD7Ɠ1(ل ] @@a7>?Ր H.>ֿץ(B R[Ván`yEƘFnk$D5[ ,[Biی5ELcʵRMMBChsݤ,GS1qNo2eaIG; D lXiK7$gۮJ*:Q($i8cs &urqGPk1>9gc&[AM1lN0en>!56#FVxĄ2!ycM5=,fljuQ&ЦDUWS¼4 #Ua*H0hԱ@M EV9yuG:~L.f Y7Ľ+phڧ}Ml  R{L1@?nڐ3"rs䊚ZB!N1hFbj9h)B5eBjSݍ {+sk|U۸K< <0萟>o _B ^K~OyfFILB*4ӆD5|5 Z&QBuYr$q艄Щƅta͡:Ogʨ<3Mƕs㨣1U/! ru='>(|Ms"`̇Ӡ #V$H2^G ]'<[Y!PFZ**xNw}w^4J*c5 Z248(îa L0uAXɒcia^|+?Ƈ+x N8y7CCjP; fj)P穖?[3[nt$O|h3 8x@EkQgwZo<{2SAr|”>$'dTq6QyXID**{$Ls\%\:]l ܅sE6'q8&Թa $!Y>d4@'nGt@j׶Rdab(I5c* sgx< 31˜0>~)"1~r>O}2#楟k>'.U1&4羲ǠL,Ouv/" aj9E+Fp7 皹H:CyHbk5]Gt JOlnO֢_ͮ3b$FF,΢"aL8;6,'qFX@,pAh1c$PA<ե ^ z+3RV?9ANi:H >x NjyR!0fT*ȫTu  ODQlt50VK!Y}]zi0z覍3nr(q Kc ֙rȝ0\". .Dվ& S)$2&F %ZxtR6!mvϵ:\ry'?yt<7 c2Hy;(/B<<($DV5ӮV8.:c hZ]"-z҄2Ր:w[/{R3d@~ m؍Lwjk/%+.byH0U +# M @Р)~0ĉC˅v.>_) pN0)ZǸ)KNs`1xjaPD1!JW#cG/M ;8h8tʤO)O?Uc5+a Ls|qAIdAtm2/ 1trH3%Wnbĝ<7Q53#FD 2fge#GspW@U}L#R_%?3?_H.rw7N:7(t{\M#^ w csOBŜprJ ixqm\u | Q{fWP8.25O\Iө0:0x$?#DFp5HiNq0dL\dЫ4b\v5M1_v,\t /vh+ʜDC_0JhdH5)V 42>btud+ga14B"C-ZoL˵-M pXN -0J tC54"T˘RIjv 1clR>J?o7}soҍlPǀzy'Fn2?gOB=sX _-HZ2@ޓͥX{8a SGW'z,S2Axpaʟca+Bsqڈ-hXMnFff3R2VCBL_dL8؆@n{ɡ?ڮyԁ&25'5nC,T̔IgIZM,t.@yExAEeS:tlUZlMc:,Ƥa1["֫qsp'^<TvFmd06| FgYq zahOy2s=[LYF4Bq΍()Ɖ8hoC:@8M-K?,_-Ǿ-7|AyTZQ %*Nګq%x4 G:L:̌ aȆRyXףsQUθ5PXbs,g BŖ7̥n@c&TLN9J-&bpX`M+!3J9ZqIw 7)eXт1" e"*i> (X;JFlF@h-e8ЈZ!]]\Yhܢñ +r`t !3E jzp[DQ$32^N 䐣5lЂ[ܭ^I9e 0( Rd r$,]$5dWNwÚOF®)`Ǣ6ZG{}wwݿ}6^=+$MɛiP^PYV٘=C&u{+2 Awȱjr8sF'i %B<"a~R9Y!87: \U+ykt/ x!D`h)T]AnR6Rb$gy;V[Mc˥̏Fv;g+PaLrK#}uIշ[{GdAw"*U}(< j{%e ֙:(뢨k~ب 2Jw=+Gc=maq{U8Ɠ!Tuey쵉It nΖ_Vh4o껤jRHHù8|csk5# 7♭ ,x=Pd3$5FuF p^<"bԌe7xEHcv 25_lWS0\ha֗SDÉOantd/pQ8%b('-'>3 Eu*002LDGh@AgXTZ`ڊq64#v7%ThfXE]uH-3 יD;6Ked ;9(d3CiCyVK¬4 i ~B_wn䯀<+nXr+ܾy8W|7@!R k葂mĝPjM\l^vH@u-f8 Ai+Gq~3b.`\f#'0C_'jtJ l4y]-9]܊Klc#KdTcX/P]&Pģr14gu8:b#)[ۈ9“v"!U1CRϾR{JLv;8剐F0DU58,cao^GXJg)[jx`Z@Դxd^+%M.4Ja$ OČf$/`e^UUtİ d|Ø.d@7p% ,Kiǵ-W $+ͷ|bZW_u%XRh1I0plS9KiuO;v)rd)f.{l~KwX m,]:ӸuXuyv|Dl؍V=Ѐq9T#JoCd^rdP)| 6`6I7F2ʡƵҥT;sl-KIc@ѹb=;9` V0̀x/;[tV`cp4y OL=t 픬Zd$9 6iqРncz4A4F棸Pu1kT]9x#1rG\")13Qŗb pT8mxKxvr033 GǁܳrR|~wo/쫳7/«w_{νnx%Yі>(SV;G"R Ta!su[$eIcE&Pƈ& \MA P{ ,@Z/wDŽ׹VP[w| .p3CS[r[3!-Sq `D'x K:vb*1c8]ZE!/*v؀I~o1Lͅi#;A!G6SI. R Sİa'QD0^Losax$ LHT<jm\RPaBT$o\WhV"xe; % ihc ` #Y!>1qd uE߁UQ&֭[|BW[O/{_۷򅠷>P ۟l[٩gBEk%e1]T{p[ju[N'%>0ft4w gi֥o E 8J{Jwɮ( J/b c)iu`S@guD Zp&Z:xLPBJ%8=tm]nyP>I[y1kZ\jAqzLpq1J)ci%b7ACՀGĐ !f؏;S5ph49 r[LP:Ep#@VvJWQOs޽ݻP~E߻?>aOݛ<1氞8_47 /]_{;W/v/zy^y O]A4!U,DKȉfr .5dڴ myNZ?Zp}X6\y>Nf`s' A,XFJHzM@4Zhr.R#XcP0JL |x]c mZgS-FoSqEV/Z-#? ȥHw!0&:dey$Lr(Ta\Su1n"VE|c aFԣPJ1EUKŒ`$*JPd ł|5rKyL3MzrSFAQ9(Q&9U!˭\2=A M09` A9ߌqZ0h1q #zLv2@ה7^z[>Ro}w>|'(_dӹXX= _/7<|ν?w<2z^_{9C&z?e&%brXV:Ro519( EbU.'ݓ̙<:؏d$6Cb yT'ͮM2t[°'V#JIlZhk,-CHj!oOFBw2 1tu玨6a$sp(t:N-Q3##}`xؤd= '=< J$\QOC šì9N^-#h2r-ʥO}C Y+Ԭ!75 .Da3+j? rːf1^Su8hsŽ2Ǖbuק#%9Y21׋~'j]+TǾAGVymZM"ߪy?ݧwߟ[W{'5&N)cwy?koͿ{|-W_s;;_}֭zo<|_ ˜q64RYOw sax\9"&@IDAT #GXEFdfr6hezPDHЂdt4WDjm+Fw}׎iILdc̠~Wvc4S9Rd a2icy@a .d&n8E41!I&N`@UӺ !XWhk¶ ,RN1]咏GNf!0x׆stg47gRsXjNg7/jw)) am e \̍(0ʽğik r4׸W~Of&_?&ơSƥ gšSI[# |Y.yx߯?\YN(PV3X=?ӧ?ݼu7~흗E7W{?k/~;<ɇr`'bApװUYQ,K0B-!p35}K_] -YDPخVa.^͖!WLB”yզQ36 +&E[8avViFVg%aj(/hh 䈪Ӿ >Q sU'Z5-I8>:.ͤ9VJn'qL0.:qQBO')ŕq6F߂6{N "`1qX \2Z"d=LFq?SK72M% 䠼 ٰAn]'Rs犇d'$VV.RIVNAFe]zL ̵#?+No?xJb;>_ ޿oc&W?FXC^:N!OtHyełI3h=Z{B%L1@sehXu;5f1L$J:fs$cEXG(V8edDC"LcظnJG8/NDkhK@ķ ?*IlBPrw:d^)gDA(Be!e6.?ejM$d:8d,f*Hq":rF?q1/#*!ljnL4b , +ҫNH>w3 6s6cou I6gՐ¬3bb=& j&74le-U/C8q2KF-wPsI>ϑW~ 6J8@qHM/?{Kwx㵿W+|q^|ꟿkHMH|Œ/¦M}  a TW#PE '!@-D[ 7odCPSbMg(#"yuEZ܂cPxH X[N`d@k/t.| RRl`bqi# PKN>šhqdH&*v XkEP)-X+ sPd`uQnktY&vʼN.dp)`QNܠA Ƚv[9TbOFF֭kL2q.Z[C`^_7 iW yI䌈c [d7^>׈˲<#'oTndat)+E 3$;uKVZJ@AR>zNhē V_^t%Ÿ8KaX9C=T(("ticwtR<&Xt*2OÓ%F9, 1KQN)qr)䉳$,˖?&YtOtu2S?O?~{woOWvYo_\\yۇI1Qh`Y#1g:ٙQEL:i_g(P0wkɄ%ϵ՘FKANLh >wE!]8cZc}yR_}{1rq]qb(+I] M/s!ppM _i{EaVɨK ȁ: E(iCڪUH$"(Q#27iB‡0#B |^N.\Zή"iB:%\#xgͭQ U 85urr`Ho+;wr či ! T @"N&06FZaI#j1i D)OiQd%H=GDmC{=Ϳgyܽw_ڇ~Oy?qmn6jifŰ(Lgs !nV(**D 8<ĐcC! 4ja+J G^$&l3kI o[x r\MXy@)( :O/s&j"[|Td=/p-7CC&{X7%Dd*/qIdMԔOi`4  ~`9D3U39 ͩ%w5)Ӻuz.3ӷı\Ԭ QKQ (q; 2VdƐmڡvM 3ZlFrpqD\(׾<Q~2cX;4,6=sDBԆAṔ 4`XKt$E D5\N8q0 kGQvf8]023d69t, 1/lC+ ׏y!Z\5T֡p|Y:Il!JƵef}t_%0U:!%ƄGAQXe=Ry)T'MW5U5 0[}0]^]$ΗKfQIYLF0KmSE)[ßAM@ "GTab}a=vbp Sb&#Af&t".8X8p&%R 'ܽ{'G/K\޻g~Ѥ:8ݝ?A71<.*;H&8!֛مI=:^ =;X;VXIJRpHxA&3D@d5iĄ (X$բ+4ݖR),vZpQ`;iAoe5--#nM~Am5Fi5 F1;$iDPMleYjiRǟ#(4Qަ[0&w.7bkUoU&]W+hASw`+xڠK^.(yhvÕ<"i[2am 1J}%ѵ>PHBT-ȇ:qݻ'~+l|_WMo__*9%SoD&lxAv/mO!ձxeYddJPLRVeiL(dsu;3 t}|aPp+r]&[pXǓ%"M0v 0p !Q:F)jBaDyk #YK V*IL<]]P&̩YyR#2e`UDQ0hQע _UgŦvF{GB+R@DMSnqeF\`)(3 `.V@<`~Bհ)c`'` :1$$bkO:R{$S>_ݖ}-ǰdLO Шdj€f0 7Bze @C݅r} juPGN(i"x j5gΝ/ﯽ~_|smBw+9$4?R&-R ]bX X9B\Ĥ Smo| ݵf) 9m mx`̚pdUU_;md x :pYe g%g([bȘ*UcÑ˃^U (\pԜ0拟f}a.͕EU'C%p9)w}LRVx"˺(EV2F3ύ1 qO{N l9(.M6DDP"-~A9!H[W) 6;#_m pHktb֌G2gi!:ԥW|tehg ERTZ9rNe&m͈q5J /s`TQ3hGKҾ襌gϾ&P < ]>񙫿ƗkG;^ -%WQliP,d mH  ip\lTU bFǢ3#URu3M'0U"t&n(y2 b7P6X ~U,[SSՇGk;E ZC07+L@ Z 3 a'@͎ϧ.Iq ;(> /ˬgP 9z;9٪$ "C1 &!@ky)9 j_ Acmޮ @ SD\^ɬ`SEVsph_,`F!$)Qּ:ALՁc+cB4z^:™J ΀wnQ]*EDAMNSx M+eRV1ep>Kr__}_{~oC)3[쭖gj)(iˈ@ۢ:;.ub)` ѓ#p*2׼<ݒn}K.R38}0Ҭ jguROL >̞[#-qZԵ^"b,aU02ʸ%5DbQw^}>fۓ?e#fI j`KjPö $=a\T# | Ҕc0;刨 st(yqXܭf7 I#δ 5es =dȈE"&rPֺ|1WlH@@Gת0ʒM6eI_6ƜH\'ߡ<˼=4zC6˹r>L!nRT{N}w{ wjȇh=ol[Ǽ8[S.O[,؁[kSo&HF0rrkd &{-c@K.73aDxxE(XY7:>bK=ezވԆǛe!S5@Y!X8iR>ń|r~\s0YC(b)guo"gZ3^&djbfK<8 YL.1TN'm%)>vn6p&̴8ۥ;.ϑO#[Fhxw4연8VUl{ ćo$_o?_˙Ky'>'/yxnIh޽\&D "@*_2n` V,cc,{O/T`E"O#F<8;^"|zj3tM[+\͖aSX_ 1rMd9?PʘPҙc-g֏|x^K&sː^%o|`*{3}6 pM5r_V{~Dzf$2%p2A)b%_G" m/)*]9fI|*}28 _DPy^ιݙxhYtoLLM_IK sq=eio[is\F,O S+ԖlDr~hxUI9ȂQOH|??oO????w~~w}o/ݷ?,$^jS4S8`80Fs8z{ܣVKEp%9@%pFfRp^jư͋ 3҇KgpM d_H@mմdW,|4ΦN(֓kS]ZxsCQf3IμpX"1E,DxB5c<N= rz<WBѺ Y TV\WWڹI`o}R!GJ+,#Y@V<֬?JW0vc䲊tbh`5q\T6OQ0fX~]J-G9XC.O AP1+:53g[둀@*D*DLL!:`-Po4N^9 <;&-ꍅS2,-{$▴b=PdqO&qXqS߸!weҶT^+F,e|:$=`IWJ!s#.D6AL.E&4i5$QHۓkۛF=d)6[<3.91u)򵲊Cd{w\HhqصH/P`q0ň5C0 Yooկ/:O_/;???? BO-v#JX}`W,Qj]j b`_*@i+!<|dԻ,[>39S!‰rf`η XPiX5 `¿Xiq2!u5J21Ct`Jlj]Z (xxvf޻yDwMI+Tjd>߂)|w1c܁Zii90~ 4D)'av+LCIyR:<䵥F(IXl\xk+CSǐ{ D; }cW 20r;(&y5mPjddN3`2dX:dybnocIf10iGS!d^?!W_Wy[ޟ>ˁ)PDQe'ԝ(s9p`2!i A0L$# itljZ- pJ;8*>,2u^sAKCΐ֎KU5aߛ6Q^r7+,SjP(~XTrTzL"R8[aq(VǦp^d\j5rLٺ'B{-"#^z6}>m3G@l믨 A g0G\tDž$ݷ#pyP [ T^YUE/ It@)lBKG_V4uxqEaK 懁Gq4]9AȉB;9#Q) e# O;}@B_/_//c7mOs {}+7Ntk 砏|ځb\ Ta;-blҰjIP7,)H׫>ylp[ b5RnncOk%o#qc k)zd@0&<34ĚG3:YR _t6>akz 1׸|eYǂ ,7f/1di_qX-T.͈n)q ׯ\ lP lppԎݝvg=Iص5s8B cr}Ŏ1@ٗJ2 qX E:pڝde,pә]?7w)3y+ίwO?;{ uh3zsQ7J8ɕ3_!$WBTa6I]Ujςfj1d H֊JCSA=hmrJQWHAWi3oR̸>\L$Wz7aVtȶVwuӢh =XkD;~K b⹼6qQMlEa30 -B [g.#Фb-GBD(<X6Sf>qS/Mmhu|>Gw 3eDH|rf{jx* SNŢ<; 6jhOI` H=lYkL& llah[C40U\M\zIM }nP쵎M Nt03VPdc}>'3('T;׼ϝ?z"sM?#~3xoa]V[_qRh0Tc-*$ƞ piʡKE"aQIQc%pn%D_[R= vl<&=*{SGzl-T_5Ba1`8cu54Y%FPAt ڐ Rb6̯ث+[h"2 1eWZj$@Obʵ:o2$VFM5lFm.xkխHȆQ3+|ӌc&uit3au (:`}cjT"68gzSV`֝@0' QS/J j"1%0C9դAӼיl4T8/=@)!h:Q3a1$Isi{f9A.n-qG1@RN7*Z8X̤\Zh<}E&4.Jf꬏N'A;J p&g'2R,ƤJ[LP5đ4x'4Æ` Z'I<%[AmGΉ56GOmޏA~Pt>z<_+XNrpSX$8Th%A*Aڑ gԌ4^U9'Zx\>B*FS1!N0dI7!͔.g=%4O %hq'TC=`,K2$I W4|xz9Џ 6QVOĆ+f3aCF]mx/KoZw$L\GF"%wqd1 YŸ5cX4v{ KUpl(jLF\TN!bE3m^k*ވ.xL! 2ˬ)guSX69%9ē?(|d&rl;a8 CIj+'9^]2)=j'ήed"4|5*Ъ 2aҶiz]JeǟqbsMƏNao$_}TX2 򣽴YCLD [5U,6, *G._OjC!)5K _@4I'EVW%Κ)A 9iJDGϴDrvE\ASsȊENeo yNљX6ڲah&@helfbd6xB8u4T*|,Uo^\,IRZ5il% Sqہ]@wB(ǣVϙMػ+km xϜT9=д*̆#aHBI$u[!yo2]KkZZۆU!$iZ}Ir>@_^]A9]x% ॕNB{G7iDktt&ךx*=I{znK\șTcq[URGb\$IVT_Z*v$W]S隣q=<3xGiQ%9%_qfBI*.;ER,!>0N 5ߕ]>4Le {SU<OH C{[0`0l.f 5gH˲r`zh^ cE8>L!!6}䟛+yp蠑'2F6< (ۊqb^JzNh9{1$zrd؜xq)ְeâv 9 0NΤ#>_\5Z2usճs!MDox[@|it Љ.q8Vhs6WSC{*b <ahE7HcScԻ?aDV9<=c+\ٛFsW1uSxʴ*؂ -mҢZmV\Gqd$K|_[73L7%tz;xZAO o_%L3_M`':(B5ݍrX9G_b@ƥ<94>ic"ry?S*y]R.woB9;R^M4I.թ:B F]+4H6r 0;ꔃ|\3k)*6@Qe1&+U,%[H(UrU HpٔKa8!,w?A !gB O$IRU= a0ͤ?R'* DBW iExKnb\Aes'O@ŔJ[ϊ,60>H%z- f#|E 4We‰ L*ڠ.ADHXu\3nXJ> )'1W}"p̹vTas}*>0 0SV6S'Ui_JR H `3cGK7~` 난8/f8 .$05'e֗H\XHgڜH/6:rQYHh>uhӌudR(KGtEdEA;JUhù'.~5yR0ċ Piy+.p}\KY-ηa ]c2yqzȷЧ h\0^أB*{Ejfx$AiYW)晘 82;% e-K,'dLct-FǷ&K2gj+ub>AлX R$V⡠gpF,=1ۛMoHyնA-^yjX"`(M T.0iJ8f|ν}/(R SDi|Ql,ӒTG#MNCrjW5̹^>O5eɇ1)ƏBu 926].:k%RY%3Gk2Ȭ_aT iWluؽL SI՝sIqbH.<à6]])NN XR=ҖC!jZxeqke!G'77IDxI⠎ LFlڦ}A `sjZ{)9yKKLIɡ,*_ыKAAyb;6V, x*yq?H Llh_dmeC3?TQ7JWJʪ*R `0M\լ tজeg:+p apصk,?] 'abu[N-gdғ&)ff#l()*e Ž! ~[FtCͩuE'fCqqX DH+; ڧ 2!u-XWLt7xYb {THo'"As/Pű?R#K P`eIgH/Od_JpyDXK7&=#C$SP$Gn4RJ "=~f]%o zJˬ4PS8J[`bLae2L t ?$!,zQ6 04[Z"2N]mZ p %A7#i@ 6?< i#aXlU串 4X:d0dUE6P^:tV;34R$yhɥJ>H]bkHɇ?yU \&X|dZnbPY. 唰 O:RTIjjAG0 ZjiJҊPr4ș)ķ*?Ҍ)+))zIrs]I/Vr R!e]7'g3 c"&êi(P)rl#qitM9H8ۤI@IDATĻ;z[+6d2%~r7;$e7)lL4A8H)Ӭ/xcʤ);áfL@51o+|\:IËså(O K(D@ s ^L⊏~GF4<ᐵݨ1e}볐Q "hN4z8L^Bbʏ+%.w}u*LI}񠢂39Q s㹸Lٕ$9]uA8H.uחE-7{Ccu;at7\l'>åؚhіQܲ.)Yp4-=g1$+R8g i`\3Ycؾ4th=zx= {ڱ0O1cujI%)v/uс.Q/E*`i^dz~0Pv٢tѩ:SNGsJ8|RXV\cB>G:(OOx#¤`Q2t+֪%f mDrbXIT8.2o<)˦\; }3UhD*B*h[p"ѕOfӆ-Goلfӣ͍ByM+ b>#ޥB& ?֓BM3z?}U!IRJO&4NJ^KV1\Ѯ4.V#`<9-#r~2h %4S p=% &)X0 &y!{m f(ɬZkcJiH)kEO" =v%WaID#TvS~$TeO`בYQ99 9 4_wheo(,.ųc wɍ&k5'9՜1e"*>2IoKIuM ±pAANS3{\[Ѯw0W5Sd[&$a@k=c oyhQR,"/̚KXqut `"M?l7H%oK7QzķxPъR7;P˜|j\KNj=#X“> hNh|!_4ud^]JxNkᯬrO@mڛ \ydh͋8d@cSP65$iE`Vc٠]j8;|Oq4>+PJV 7.a*-CA10c6">Cyy٥AD v0c7x[ P>ᜊ"6P c\/iSAs` gRzc'JLfsodQiG]h$rePk2q8boHmq6<0M c/4ZEF1 QHՊW>ChrfsX=VU.kUYNXA=Sŧet }NJ4M9wz0* $3W߶h(^"bjW/8A b;z;(&bJ ,U0Yă0nQqZ]}Jj g9T c1tIKidya"t\^2XL:I__ͼa /#6\}M%+}+bޖ*"x͠ 26TFRFK|;R 鄌٭E7\ۭ*ݓ6&<(,``m/ϒFL̪V|x1 (S OkգP1 J|%TvK<װpNXxvN{:lLj@m:ɘ) 7 -".4/$A%qIPHpFe`؊;Fj })eCorі' 6 mH i-v(=5rTo f"rNj0մ0CK՜\օ4b泶~)Zf)?HNj2|dV#MdrrY拇{~, (ƨ,OE1D][9'J񳜄P3j"9mdW璶4d^@cW4,K!t sf('*aja ?k=4ᛖ47w"үAC禄4̏dWD~?, Ožqy?0)tvp #| ͇t.4:TΘy7fQ};@V01'hh`u@& 'Ơ`ad@ Ցߪ1*T2R <8znt hגS,L$UpͨG8%ˈ}KǝǫyB$Sʩ{QoIi$Fr0j֝ʅ -Wd| YpV`*<lnmu84#JHA}$Ʉ<Ţb `urbd΄`E~l1&#]jʷd#oւs?4V!wq$kΪZэqc K`Wmrb\87E)Fl *$_dܿ/Z<L,^4U:꜎ &FQƉ[1b .jvϳ 7/hiWv &I`<$S5w%e,@C0s4O0-!Rehî[4^${8\oE l pjl»0]hhiBd@(A\̡IWnK u }vMng&S@LhQ 4@1h9vc+y4NFaLeH }-7V SKYWb&E>`7$1%CM;~@wXCa%P:2 *-SK+48#E2Fh*%Uh#~ Y&_D _#8KEP= =O|.JgWfyn}*qeE * $ g.& gƸ}K_5v{/cwu%$bG3-p;hU) ^|QXC/% dvAqqivY5L}fA ɫڙTLCDl'a8RveP9z=%Lr(Ѻf Kǖ܄*LD(mW2` 0b 0J\>E~`8gAH4Y"fʵҹ5Lm{'fsmP.nQ Y@Q4Lt^iиd$J-`";ZA`d in@0y'Kr̼h8iuм6P 9yr 'F}UJd`W@ǡ ܙ;'0"uic 4ۄH!Ji~mn)bmx>U|$tlGkiX ޒY(3@_m\hP|i4O9Hg1aX̅eTȕ,3BeutI<7-bV] >ĘdJ|h8}#B +5+ ~"{8,ƷyfK137eΛ+^6xUDhȵZJR9ǚR*=!P*hUR$=j3H |~$4Ƙ=FCEҺ yq-[Hj'UC<鸹3V,E1^jP&ꑚB|PYS " a]e;;X4V,\0 knrS kv ٘]ȫFg}թ UuB;|ػK]Z 8:&M/VuD8ՀK3D. cEBx|Iebޘ Q̀šX؈bya[=ݙwr:X6tcg {wΜ}Cb nV6N\u!Jps܁δ]σI|fcρ%)('I^U[0%$al9u $[*h 탸0KyDw´+]x\/W%eśnm5=)I-kwۣ7ƙ^ND@EL|]4ѷL/#)ŵ֕Ѥb#M; ʝ+AcDe7U ! 4 Ra) N 5 |MȰ8%_^j]_v3qIcH:+ҮD4"$^{B3Kaِ%Orlɂc5G}lIYp'*61R {ƀGJzgC@ͮH* b`6eOl K*zMyUA/,\~'UEI#&+.B\>ҭWnB@r c׎?Gz73#U7a5Wb2J ̲VgJ+7nɃn14ߺTY\氊{NGBV"E}ʨ:hzA2gҋc]hU*G _l8rg*/?t7G h̿oav> GLp/$Ȧy*j3/nKھbIDP`>V&'  6)"\< X< Mi+4z &8^^ځ\ufW;<|L\"''kz5G!4ݱ#SPQA,SN1A'p Eg\ c980eheC }LBD&nth%{6c }5 mt.z10w؞%.RTyd5XZ ]N=-JtP+HeP&#fTvk;꾠8; M 7L~\рEi8@M–GҔU #Yڳ6 8݆D(Ф3K0tִ2k%D TeB\ei, HA a-Ɯ'^%Xվ=ɣ]m(.j0'=]`T"Q*UofifOKӝH^9kN1pL,Qa 䊁4\AM"R/eUhGk@}KbhZ`iғI(WJN<"sfgiΠr WIghedž4jP&0 Q>bSäܴ#D,WٞU|Ӓ,K>ε37ހ *S%ͪ//^,H|I8zo-Ar:0xly:aAмWQfxLb>0e1їT=M+R"WZ̨NHGxתQVwv˜]>-!M5G4%0|䴳(H 6geE [=A(^ (ވ/;k|@5d|O +e)![EsːqǒBɳ`epn(:ڐYFe}ƄCR[$ [N%&pLsj2|bܴe/VK`F|аq00뇣R(" kㇼun,:K z/gcdW لFwڮ Î%W"c%iA]z) v%fD@^E{A}?Kyo2l}0X3_xaw_P>G?33݉K)N/9&iHP,~$q=2>Zs-ٙ bJ{jX#`v/fG<9mtS ^)h@*;+^Htr8C/ɪdAIgU1AGve~<ㅂcc1%*c|FKZQFG\fSֈVNR6 U,d,ɋWq}1ZQ9 GA%}k#4!]ξ{3ayn$ $Gw]_^w׊A3+"(]B>\ o),Swb/ޚ<>:IWM[!4"/L9/U556LPu̺PG =k%i*A,ar0F!RΊK}Ч+hFFyr"NhE*ecKL^ɏŅUOg&G͛D! 4&mx.MDtiJ?W+p?b4$SإS[q sJ>fHk2 C҅캩IKЊjb MM ?nu^˚)* )ݖ0;I9*' ơBu[`!a` –ı©\Uvn|:7CD (Ĭ?5ŕ8E Ohf#Lj:ɋ1䂿 ~@e${aK|\*iC{"&#>&xqcN&B@b(B a[OM se&NyԘc)CzoF_ƖOe+7,ZY\okb TF7W.`c\gh 9)JCX`2_?ʆ_VRWQMb`V sAM9 ?Igs[Pa(|n,ͶTp,NGE%(bd'}EcԓPE9uuj`&ɞ@?=*oW6egdCK:7~Cʛ 8aԑ2R 88/1yǡ1CfΈ-@ORg偙GNZpN$At,|u80ugQcWD+FE϶E!M&Rk3ct1găn/' 8UC<ZUnnc,Pgi(ENPe3>6KZ̶ྦƗҳb4 X4 F;1)<[Z=SyC1trr47\6P)WX( `a*T=B96he"90j$[ɤ.O50F<BZ@zԽ",IMr3l>bbp$<Y~d|G3N{IMs5aWɉ$r,|IxO2,چڋ<ٕ##0)AL0 ט* m-,# yFpbY5Q\/# :OH*P#0'F9'3۴4u B;j/LezUPM8J *IX r;F_lBg]*"V/tM"21:>nCy5GsevKk%ͤ+ql;Ɖ@2s];oi@pΦ Wt`,rS,Wdx+ ,b3R;=^72J̒fC4Qw#[ Đq"D~o#nZAF@B>QF҆BK]sb},-;AאuSMFȨ6  LB\&&缁|/>M7;L2!ls ̻B| JwD=ɗ= G<, } acJgSq0خFWP0pͮ{iK`\f/$ j&IJ̠|R}ycO24$H!-\mo$f'?m=6vb42vLlfLoMnTr^["&CH+ Oxcv΅M )S,AJkisc'3%4~&${Ā\q:^Vb/R4K :URӅy 662kFRͣt$L<9h.+G?UA/Pޢ@h$0RO kSQ'^76=Ck񤚋ȅIueNjTU?ƪ_n;oރΛ+|ser㈍>h4L?)ĀﮚVF{b]/: [;;?o{>dbR\iP"s&IL |Bwี~}tlS\~6IكuHℎ1K6a/3}I!\G&)ـ XN2[㒜yimsM ߽Pa\ec@3G8 sS,~ƭ[-$Pf֩`$;y GY,8cFȄMkI(k>}a1G=b$f4F*$pb)7EG]=頀,Wshjb؋6%m3⥩J:͋v\ ()jK]=^ճgK_A,stNg֕-@ɾA*-9zbZ 3Pd=a'= ^9$ofy&H?8I ŕ#f{L+G!Ps)G vC} a wYvrm@%z]~\_d :QF7ʚ‘?ڝ0LZbܒZ fΘixITmM䄣R~_ f2n+P6f2%C&?!(Ƙ@OBR')C VˮC^zS3`(P^Zh0Ҫ{vcox,E†&3h a!W.QR INHx(/Kb}ڰFo<1-U+#c7?Tv$+/L)K(eJ2cG E9 Nm!YږW}XLbD0 $Wr7GclX344ŪNш:2~i!7)8ت,RGkiS$ f䚙߶.e(lQ}`r@rĢtt2T1B%Į_cxWp5(K\{*KxʌH)EVMu !_“!p8$LyI)kȑ&+OېLU?I)8p|AYǖؙnSc erPy`e,5},~\ݗ . _|ukRO~Ab c"ڷiͰ& Z5&]F)Tzc(ɤga?J;0YZ" jH11Z*&}Z9n1۠ m%"`sjЃ9&d4xc+79"*ں"+F7 |{'E*"TN$QN7ks>{6˃CFBŤ: WI !v"]2*[2R=Q}+:δFu)_&K l ?-@"(k?o.#5JVG>ŔS_%O5O!HdD=rFNO> |>w\ZW/8,4ݞu$CPX)ÏyQCkDs_nk4Z0>[Li sy9-O>+# Id@y'{S~_8>Y7V&ʗs] UtLzK|R:߀ZYQ.rqTrj4ry %Hq8 @ /?mn¾In`n>~i/?۳ʅVz3Ѭ)|aQQXuO Vg14)B`[~?p3 \8xEa,jШq*Ʒ|L]4a.CYd1]3!L睌ْ.@3w-(@Z%HsB_1-~e:>= $g(".o7Vқ 11Kˠ@3D~d6 tQc"wD{tY1)o ɪ.x9+~KAtG> gȫ }8Vi{mƥ,>&me5?T:烅.2XJr*سPĞ[`c/zBh2+N,UkRhnƋh2(9Ē%4?w$ sXk9`ٱa7HN~܈A *a"TSGV]=@cY"}]v+`y\ml5G+ĮJ̻q7-gx"[p;-מ)9ׇ%(K/2FT*e-C!A }S!';/k6N$z~["stNz+ #fy_̽%6PQC/w֫?CKP6$@-5Apee' 5".':aζܦ ;c[EIDATú["X+Z##32,On;]Bԙ8' Z Xd!$_>K˅L*#,C:>:D){uzc2$ Xg2U*7̀o¼>]ìh•Rw"X~^lND5c'5_: c\h`V>U m_xY4P?8 `XNڟQݔfO8I@+֭>V @C"x$8Sd~(ɄÌN3!']ec'z.zu{w@~9;ZViDex]Aq 0J'es`$9zɲ>_;m $/q"y"Ne!c‘a FǚE8yTBL" (wN0|46^}f*^ " I]mTp:LK-, Mbkb2eSz-2,;j;aʰVF3MjEjŒw%1M?s-6.JfW\⎳!`'pijuM'8.;זʹl3 \Bk!MXVb67]eX vj( _9g)ڿ)Zxo8Wd?^0Ҥ| 7?}B|"jB6ұ]rZum|jZAwVPX e#d9qYZ%D~o4⤜c¡2ko,×? p 68`ҥapjs.ԔmaK%LX[GnK m-+Bew.SM6^\0&pgdR-H i6m#y[``B@q UA=38zx.sQ  ԟƒ4dA!ROJ?nbJhZ m~|2on5Rl "ڧRhk.(oxJ&#c)Yif |Hdvu`=?\JbM^ Wa^TFޓ< ujkס𷜳zLF$;:A$%ji^$4բJF bE@`S2:˓Y`;Fzgǀzp0di|Uzc;j:"[B3A _-7⽐b"̴f1WDXs;ɴ=m`nO0Jok\LYGu-sOveV>!_2bð.VRv4`94!ζ$=Og%(eZ#@#Sv{gӲOrya;vovo:?+o;;E IENDB`MilkyTracker-1.02.00/resources/packaging/osx/DMGBackground.tif000066400000000000000000025353341324432207300241540ustar00rootroot00000000000000MM*R" BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7Nfp($y( ,AtP.LCiT=?PM ZW- êtt& n6k2VBi@+}2D`k[MJGo0{GP_ ͎)5'l4M ڱAcYnZ2Zrl[WcW ;O~chly&B-7k-\B԰zً&,ucо;j=[Ƈ9j,32/?Jҗ0K06K;ڱ+ 2mZ"2*Ԟ<0s0 * C 3'CK$l\!+Ths*:3z:(D*,/Dz*M3KDpTOqѬz38; #o~."[fUF6tDև ke>ԅ hu/@(Jօ!?,!k赆SGrPi:ˋtJ$ .2SYpxLjZuR + e1i `7 Xoh@c(YG-EIkRsfq~:O1qVu[ĜSULBa+HEqavT5iw4yaËm /`QoᏲ{`x6zop:ײ+ 'TfsdQd1l2Jva}LOl qQ-ٍ 5>dƴ-GrCSTIړjwؤ.G`WeOL5N|vc5u%Н(5&I6ew5Urw/dِ*'.`f2D9Cq {x`}Vy 1zk,=C{r sITLqIOG-@-KsTZ\3gSs O?Gu(7@l"3|;TYcM| UItv\x W>uݗ1O."|uݶޓwy 5IJxۏ3ÚmJwf TJHoը.sO%B¾?`dJփzmlx7O^vo`f FNotCڔ'Fg,Xcvݯ Zʍ7M O) N" DJfHRPP(,AԚ!,pR4hE` {'ׇ+/]Ȝ1tl9NtHpKJR*X8Cp|)hMd ¢kXkZdhꢃ ^ƾ4JJསn>Pܱgv|ąnw"r,".z @¤LKVd"/fl{\*V^Ҷ -Xǵe6;^~Rq*POz: |OFP C|Vƈ1hCÄgHtP^_GTo*fDJX<)ܴvʚ&<'Z ŧI6ɭ*4YQ/hR+1j^{nUxwJ쉐m'K> e%C䲫hRޫ,V t ?&o.ɱ ,| oz*̒#%M2r0d SC$-ꐸs߈j ,~̺nQcpQ%XtyF̳0R6 H0TVR@\EALe(eֳy_0uw=g$QKL ?i?\p'qHӓ8TR+sbEf3[M OmNԣ)Ŏš"/iN_Ze}XݙM{maaE v*keKR7rɢٍ]N}lM%v;uaVș6'A5̬ p2s7S/MOz哮.>ܿX͗L{87Dߺ{K7}G6ag({kt`N=D.}lm}LP{t2;Piݮ/MR+St/w%jֿ%jB}e 4ΗbdraQB^DԴ?*1&n}K.:L*Dӫ"7>Wh`_I#@&=;C;rR>'7(sx6#f |r[l/PpW=MF)z4,ܑaQ=rd:ӂ+BX.F^f[pAI2s>RJ.8jW8IH|:)"6ک.Sõz:9*-^4'c9CD~fXNDq.Ӄx]܃Dc$\dUٗ!SrV#:SQ)D&TP{3)<]͢VMEo+0ICAWZFj4$%EPbP0R6b,UlPt5Aښb (Z. K=&OٺlӞ꺇6\ͥ]j[>IHZ%kD4w|^VUP4hc?/ qmQ<1WN=m*ZRl2m_ҋ?RV&:3ȇ60_R[θSƔX(! 6vi(1;b0fe0Ȫ*i+6SF NX}˷ulSf:=b7e5y-*p5q`km%=Iy?!ysHd_FC2O"o:`796uRITS uܵwI̛ofʭ$2dA_Rۅv,I[Fudۯ<"r( & &[8w:3vٗ-d\̐t»mWmIJ!ҚRk1BXTV[ Xhsm>Z7^k̵Ʈ)Aw-c~V8AvZ$EgYD|N,ffJs5дe\m3kr3O fvt2CUIi >:yb|/NKɪ2 ҍ86sUev3SRlFjZ\D0- Φھ8ǭh}4"BEW6KSD=Sy+(ki9$]S/S<@ ۫ig@C9᪮QKݖ>?I;[Ca*."##ʜ2+bķZ$3?q8J8"+<7Sy 98-q3qʗ.39355B7B٠↦-疁6: $C( q>:*E"< (%H(2A(E;;8;z2 ZB[k4H// D_@IA1,"IJb=Œ%E3@EK  #7嵃C|+4O0;Bɐ8
    $A1 & 4rH4W/R N.zc;ռ*KCx L3YRAR$–#9jzM`>P!\4Ԏꠣ=A:J+°3~+nNŚ794@ںɲٜ)$:;E"cʫATBz2[#ZRtQ_/*˶A@U, A*9t+,m18d?I]0$bE"m51$59|9T59B<ްм 4KS˰e\B81.ϐ1ID$*۬: T0ISТLJJJZUk=Nps؟dyA,^T@$FłvU#B췘 6#!"֚}1CoY1#qSC%CS}lT1!wDj$QM$bzETJdF,S&zKFIɏ{uLʷ&:uU U> BJ MVp9ɪ#dל>){?񳪊*eru=o܇D1#R,[9#VD"ð3L+JmMU8[ϔE"<*,%L1n0׌tVLW,ݖ!E3 U{J3–Y4xл,P):6|ֺI [Nsǧ}MZ5,BLS$61)Ĝ7T 05+̿\)]HiIڜRS:lK )R3úSE3U+U<NLa%IA98)ôc34]tWӴ1-O U._af- ^?`/]㮓VĮ2G:՟.}:=YdܹQ~oإw&tCC˾`iKbK#jU-"ʇ ]\҄HHp~s밭B$|qEHoNh ycBNr NS`ؔ I$7OF5fdXaÖpݤnԮn LRfR\O`Y:E N@m9Αs建\1y[ dfm5x%c;v[SQoE.ÚJLc6u1QЮAS?[EZ;fW%pI n[|toʗPUw;{Sndq"WE]}{ ä @J&~8ۘ@ 0l>F/bquĤ8BQ)`RjS3@S)_!#SæId`))5.qfs]&ʨTB%yUq_hR9a#Y~_eQX$e`lޣz-qQKm XT DЩFB Q};/!G{`l7uWk@F )?4_<\:@CFJqP 2;!}J0`(pF 0!.d>Cn;p#|I@C2K6BNyMV'@jiS*?G0EGA`18:=$@ "B#"M*>Ǻ<fP"=G@> `'%AzlGd.څ.(ѱ ((DD:Drh/m )r/8/J->dNFg]8 +! 5:rY}TQCX$hgOf4Fڬ1}SJ"ndI\y `wV>ZDQߵ+dmB$s7FB$6.Wiehf4P TХ*ju]0ô=& ǵpx<,A|GTkIq=8* eX%a( 6Ɛg6A+B}?np `,` #ge l])Eη-Mk:[H {pQtT3AhZ2neEf>W"#r+U>,1vhb eaUMݧEyȹvK+uz 㘎J0-ZV6H.ǰ#Cc @5Fv ~ٙO?0X H y! 2s l+ Ш@X<9Ik}oxXc\pGTpe 1`(*@Z,=ѪhkEj& LNwjfN LrB@t>fj.Pc1+(xJ@( 0D9J'|`HeTMPD\ &0mʈkŀŔUdnYeznFP+مjƺ">VCÜ||F[PIfX.J)B֧#(0CE;:MNE (p0Bs~HH6,eqd|O00 LfE*~)+uAN@JG@0@*NqǔR% J`aaX`xV<Áa!K&@(@@~ gDFѢlddp@dnA`  & `"5ǔqd 8Ȍ!`@ FXT <LP)ca>@PAKEDAl*4dn Oz3h'D nE}NZEJ8zoB# PYƫеNHf(m`\eF.Bb:b̀B>Ew,rwq}0H@*jۥ-2{'P52apL ل } SrP }.94D^+%+V 4т10,'+_$j9%f"*rXH~f"2,/S]0_10ޔA$1~AB<`:`)-k!!$!I@HN)`MA3! hjࠠ,EĊr nK!+E\3&a! K l4)-A`NVL>N j"rA2g `< ``N`g%@@ Ë&dZ  \ h :IҶ "2vTiP7 G'VG8¢Na!w2dv@@$'$K$"3RS- f-:Si:]thL.q->8~5缧]lGҿ>L* r0`e061(h0M2[ >e1 ixsdֈI@G_0}bgu49T bˎ1;]2uE~M\fV!Ad@hr mdHN"la4aACARTTq<GGXxi>M$yaKU֜Jf!x|@^%"ln0AAGJP ~TX9"!p!4!'L=VG @N"wb.ta2D.!@?T@u(aÁAl9Oy ..U  `,Q,R.DXaav0.@8@>f]ep.E-/I#0qG 8[$%>yLP+)\ۨ: GFPRy᯶"(f "sztzv7jͳ @` $AnbZ':#,aAx?D UE WAײԾmG=u Z1x@.`: Y` !QjSCZI;yW % +*@8qpJ q ,Axq.UdNXC$.XmA]<+TRmr 8J{!j1xVk2۳XUg@qP a $! wa RrѦ)~T,2yB6d z? #t>ϧKp ?}E߰v(rC2{<-eݐDAa8hK|>꜂7VPt7Ax @`P " BqQ2|' <]Ӯc(  @x;\Χ#}>!(h;%G.~;܍'7!/7 Qoӭ{<6p<4?xmAH_ef/@ p"  giva}Za@narmI`8 R, @ n'ѻ;jBOtw$*>1%TtݏQKҫz;u)fR]_H40TV;] 򦋟9r٦tg1| LB@{IMr(:iNFцrz ( Izg姝a'a{bfPI51t` }7 Nˎt@#~Ȓڃ {ٰ`ԉHXtz#8㞇Qi1s sOv*i0`R|(2wDgو_fc5H8kjaȒ~9,z1PtR8%$!;Xx#s>:f(;XˌE8>CA7`<AH'>̖FhHf _ &@g[)q,lT҂V pU~P9#7Ҿ[I+i0%SLl)Uпs+Q!t[yO|J_.ūbO,ȳ򬠿E_a!,@oPMM~30խy@ 3ԘbEr:4H')Y^2v5.5V67Ef6\$%œnQ 67Q 3\I%,T)onBZPAdESP<[&!DdONq)#CE''\S56*) ^5S^Q\Qv#=\ESEO3[P CP+dCME'W>4ML:g:{ҔSEZJC->^'&E;^3Y"J"ѥT `"`'-!xVcp5CuSJE/j'7i]B"D{@yhq0o{pٯ{sP'\ћ`rfby*hz8p v{Xfc U|wFp`(#֋އǀ ȼ(8ydp t2HցpxVaSأ(xn<P8Xqj[>0 w (*س }}`}H[(ip`^v}Dmج1,({.Ec~ `pJxݹ˼PwMpPr!Ḧ́ ѯpi(xp p  U `+Mext^[Pk#( hxD9HcX"^1PRHQt3¼Lލ#Ü7]Qv1wP 8R6=>{Eg>$TI7B$2o5vL8nŌ3Cw6h' 0%&Q:BNQBiZ гM(C*4*g%+ѻjZV7[`-'kD"_\2K4fR2;FЪ^Ea|Jlqp8y^ӐxJ#`. @Y0/pfgh )T !xpv }hv̀ tf(bx 0hvv~& 4`qis,(ut%Ň(}&NepVw#{sw20 ~蛀 pʉgo3bPw ǰ4 lW m\0gX]gMx(*!ʵ| ~c+ )@Pp!gh wiAMY ƛ,?Xy$+ !1pmXy7F^(|L  ڦ}xvl2l{"@8Y)Dz ^Sh`8urb%V`3D]BJF>[a{m['9T Pvu2iFVT/ AiPɨ!D"_mF-G=|V87 =R{m6z|!^5VZ:R(P5UA)9޷ ##]tK()1Xo\(f-ąCn޶“OEtpPxooG-۸$`*APp>`h2:=[J<~`hrL rwPUp*)  _r*q[u| P'4۱{H2dA؀6YVuP`@\1 uߏTx=^Np [uxD? aSj U.0 A k™[mBA(E |_X$OTu9OX `1y"%Nc ^gu "`jV9FP<` ~TumuOY0sd^.* H6}Gаyte@wg (@ X SR{WlD5[ DDN½ |UʋD ]1*PĊ`5L\mu2 } FуQ!0$P)bR|W'0_.HR$^Jr$K2C/ͯ4s L1t-2w+FsӛD4<1M\ O#LJ%"T=ȭuS@G |'\ ђ]Ԓ}TS.V3D7\Ѳ78mM{E4[ G+ZAXI%ܶ -Ԍ6O};ޕg]~giuq!x+aH'&:gٺvA$ g*jv~h.*Aq&lǡ}X~8YlQ]F~0$.x}Io=%GraY 0! gIp6]1(q~p(h%Y|i{NX\#6:H•vNcE L~ O'f(]a(sFQ [g{@'Rwk&tx*G5Nc)a`dxpԁ@@zhjJDqa6Gdc,?ެH@ }4 Cz88p@p̎J=HlQ?Pcz@5cHŖF ,eP6@@DaT|)4 ~p4E d #|O@ p/Xµw {8X`XR _CٱELKc`k (@%\Ï>K$f@IÄ>`@hi;xb U;1``"^>KP)(8 P:6|d?Ơe zx P4F)7(]X26 l ќ2yU(&ԢOg+9gIbt=6ȁsbQң&rō:wt&_Ru2m<Հ^BIdPRgsyA 'aSE4Nc@cYs[k$$K%GM$5*G5)UOQЅ3NUR9V#Ѩ;Gx@#zPX 0 :!î a8@>C 5c`8 U.? NL $odJ`"`a:4@>f2@"0CuBzA`Nxf&O$#N4A8BjdzINİ,6H;`$Hf(SN"2&* AJ8j8\@aj!% 5nzJ;_%AFNiA@f nB'qP]Ca!A1l  @"/Jg'I|L`5s<Jc+jFb88rd*J! !&g Hbg1D>GaanB|Q*' (jAAc~hwo/M'Uv/hY.@鯬2N«]:(?Va@:!r!8 @LJ@R7K A d)MRV̰M [cN)L9uR)JJ:4 PtCj7MmtP'v |3J״xRR GРl]yEti|,HGT v %vt>(Ձ3CmhAIz$t%AGuiM;xYOe GӅ,߄PMnn!a>< x!)at (bJL3 .ROdd>*j(&ś1bz;pkNa3Vb4H` Aa;j# %,5ܤl.UaB  bd<-U TEEr'ai7T #`Vҧ,J'FqkDt"6\I 9aAsB 0)Cz A(8d`Fm1jЁ`M0@@r62d LFP4#"fa7b$]^FprIEh)N)SCqq OBMd/EȄZЄKDQ_ZpA&wlWT.1X.ک>pf\-$DWW-owTN-]es}5XLSލ~qMiTnSWsx}JͩtϳsMְuŮJ{X7H+ԆX>LV1vTMe@wW !AX`@j n(!.<xGTa@\@.;lwC'#kWA~)uLagm#*B> @JB#|'p.K KaF"2jdd ."n0裟O8Aa()~~ !aD#IAR5lA,a`&d`bLa!@4`xN%:;dwu 88h:Y G^ZN ۥΗIA$8YH% \r8a4΀ U DpJCOMwB_ O V; R4K:Ÿe&^HW̷Xec ~ { )|¢AAP # CZ l8A薠 GYѸt)Bt!*x!!hc5D_ 3C:(-±Bc%H:a~a {exT0z^E3Fb8]%rΧYqDOgwXh|b-?bU "V!hN +b, b{>^ .,UIe)0 ~A_`$ߩfA 8@Шh_8j>>wlowḱJxM )Ete/G"s?d1r MJT[Iѭ]=;U%-:QMabr}-uXT͒YVH@F)jtiArځ@* ({*pGaq&A\Js~>n(* 8@'Ivq|RYɂ0`1hh( >gAcvv;M)yAf(btJJ}g (j a+SgwV/* 6'H$LР!vbLjPǡ'x'!(JHj*8/2Q*DٮgEY6{Ј'B!T'A `@ j`xgژ`Vz ; Q|z&0 Gx@PLg8')t !};pQ^(Ct GWPz<@8  "N@@ ?)B_0 @b9@QΨǘ`N"to`p&@`^hXim5lU M%4[69Rb-:$Py(_}w<+{Y8ð>;GCy@@X bu`,_ *O+%=l/."0^ɂs h'`@D@P`$ `0}6M);UrJI0f{Z2w'j>HR]"ٖYdU 8̩UzP6FȚRG9LuPoR4Q{w)G)8zIJnjLu%Hq~e+(6ɟ>ht&"j6'ҵ3JGU~W#sD#ui)A;U۫Wj9Fue2δAc2\iwvm(Gn 88&Cы`tIj",DQ3#yBa?^kK0 pFQrOR3e"YF@ L&UA7( C撘jCXȭ17PG 0*PPCP680HLxڣN8ȯ^@&q5@(ЃV @ $-|AOcһ>GEeV?GH <pdtpr hp xx@ H͋Ό4!uj (|9( נ{}0R8~{ О֍p}(Jnn]P`{3Hh8&B#:car^6@##O3W;)r@5h \6P`7dBx|BLq6Q-'g~^k:,I5j?D34%s93(7|UY@Lt*I'B^a dJFk%iEA=4*}*R1b7CzyxR7d?#WELWW@NrqT*4W/*}zyquht{,4# |(hbox||xXwuh68 0wpx$Y(:9.n۩`q_*(#ɤƩ#0(䇨l8f @L㻏j`SX}|"`,hw< ##lhiQHh"/`|\+| 0zC rU(I{ !t@{p0hz7!ܴИ kpb " yhzZсH  K8蠻FujXrXz z9 phyPz # "#1 H`X`(~QxNhh`T x <#Wm:]C _tcmzL=Dܘ_$wn4psFƊwE 8]ҳ~ 57W0ֈ?RU*:KhY*/@$N)am'qfR$ũmF&q"ZqRur$;P%$UF4\#ETS\$Bz[ {=Q:ƪd'z@E+z$;#R`?=F'`y;@lzP&$`,} @yit*y'I vxv 817(| ؀H"DJa~Wh(sbꅈ,+;z4H=  |sH 4+H{Ut¹-h yу$?$nkfB= 8+r aN!ЇHt THpx }PvA丰" *x  vei=Ћ  }xgV>pp{(yo 1"3 U@ݣeC~Ĺmxr2 R +ে:{Q:!h `  QWXwh~xx ʧaVe` ԩ$']-]uTdz7SDy ZSCB|L':@OC%V U9-67\#<Թ]]UW\a$rZ5Vsi4jc#WtW<>!6P@sPFE?ل=bRz6vIS8kDϵ]JN*o^*f6B0f+TlC8U}"TosTKfde{%A`3xxV`kV`l0x8H',bڇzXuhsXm u-{ @!J Q!VJ` x@t]0H hʇRm*S{&3‡0sj؀ FoІhb(VӨ `9bC)$̺F=F%| aRxt 8t8'S,<KyΌݣu(Or $!# `8!p0r;[X&Kcv(kXHtsj 8\)CCȗ*wC4) !D h_IЂO4ˢ xy[ oh!8(p6~%#Jaq4[g᫷L&yn U5<&+ġm ;b|U '<"A"YKE;~TKT*2AhczSK8.$ >>9F*f?73b#zmN7I`$aRo44]Ru*f4ƴh>4ZÃeb&za$T)>ኁ7H$| q od +p4.{o"iPQ ND/ 8th:N8" rogrhp຀p l\˙FH&8vx~ nAƝ=Ddc Sؙ_ph!ӇPhԳ'mDp(dTjz#%@xaq#2"܀/j4ʾ pQEpx3 q#0myр ' Dˤz0 1 nh^ݬ(q he@KIIFRb j..qJ#e)PZUJ\Ћ`ω'@{KT&0yzXt [xLM̀F aCwgw%,S6A^$ozA#~=4EW8Mn-EQ$PãDlpostFF~!oO% 9Fay^Gp9O=?-c{:onT653>%cņ%E<5Jl'nX~Nr\y{cc2rrbch!'ӵD~ d_tv^'mrl0nuXs (-$w$ B߯nXoGB_zA ?G|N"I[z_ 6= OcpO@0k5 f~>AqH0jlD FX/5{B/wٞibL}Q'p`H]U=/ {a @Qyo^Og~SxB-`{|`, yJ(UT C P1n8\:L@X|l3b606Ű}'s#gYi0((DZ @ (Ђry)`p> <Ũ֟Gqt»(pm`:! @h28 zgp@! ԂH opXPpT@J2#d(HVpft/6To[( C%)X҈VuWV9W5V-մ(6iZpAl mY'_rf\-qݖ_.;gs Ud]mVdX^4݁bמCWCʅ un Z._^YXUȅՕab#y5q:uwLT]&7Fd:ZZ>Ad^/Rh9o&ٶoitj@-`h&Bl(@ģGB4 6#SG֘ %U0{۶&ɞgj9|A0 x2g9}0!Ғ}wgIvAH@~ZE$$wdnFyC#XPCv<4zǚKQc8` a5H; ;p9G˖jLSz !EApGۧXB9 !<9ctpD x7$aX)@)<b:F`fR ŬF jfh),.I 8C8G}sxB3~<;Nj?X@aS 7,,c B[: l /($0j \;fכTmь6sYW^Hsfm+qu6ўs\S9Vj2C&LZ!=SMdxVgϪHQXlɤ4^h"\&ʐ/x*`_4Eʛ !v5JAjꞳrթ$ 6U-mT6fqVڄ 9:FިCo17|ö0A <.ŎmQ9!,,` b`88SceՁ(x1?4T :i.M ` 0&ěz= "t@| p `'nt {@j$ש8O!kI:dÈm L$xs @9Adʕz]XBTa=Gc:8 p0,˧jG!;``.O!z'hIP @ 9G@PPP P6 B@&XHBbQ#cwWV B|>G-a,%`iDC1F(@ ~ DoO *$ z!AzC!^ B`ifÀ43\z#{B'Db & ޠ&!aH*dY%0,!( &@,AЖpfjFfB`FUCUMPĐLH@nP4b~!|) '5 L&$ @ 6Bj*`Bo!*`P%!m@1A#\dE^ U!#Tʑ'*̐ɶK&!dP`X` ¨.[ jĦ.\Tabj䦊gj|gFX*^< M JBYF&iNXjRreجI ʫ%FFRJ`*b)x\JNNaJ $%JLPrbkV%ajJ%l &jdҤZ &g%8Zn#R mrnRcf_J>R֪Nl(ao8F @JbaL0!!AA\c^4;"1< 0~  :'Q')@5a2|'dB$Dz,FD` Aa!$2 rhI<1*p0"HI`<GN{  vA@yB5`,M0@ U`sQ$Aap,iAH`f @;iD`ap4F|W !$$@2**B ʊ`R@Tr!)&jA@)^`B#n1Ҕ,@(`4cdz1#`,*&(\J]-oc|# @@o`B : Jdr:üAbM#|!O$Q X@Vs%ol1$IlaZP\`f8 j jRy("e3!-)E&(W-jX,E(#fdR%fv: 00@,j}&'&g%hj7/JRFAcPf#rNf ^_!+2,ciJhFY/^RJΥ֮Y򪦓cջ/rl6^jQhIn/eO`29n1u3! 4>BѠ0̡AЃQZ#AC&! <`x^M @`"OJsZKTf'`Q@ r , 4MA. Ɍj-BGcbLaSHa5i` T`n;PAEbBa`4>* -|WV<<))`#0:V@ `pɀAt~v#X,1!!mj!:;dhѴ15›ze@7!^T`,A _6WzFT@P>Ei6](*O+s0Hi(dak:3nvdG*q t`;sd`dv\(*REӿ;`b: <*y*&Nܴ-;`-qM#D!PP`Q(,@ 1zb,BӠLU H%!`x !aG/C[0<w]-.DAGw MDIM z+*~!*Ả`P`7N@j[ӓ;peϡ~~v H1mfk #ah} {O@P7}=]GXh&#Dp!d<H wQO0  ^gx, f@ $ ^כD}_ow]x{?W:Bpp`a$r7wA5]{ڀH>N5/K@b}n\apzs `-&jh y9}vYc8ǿLͭ2/ tA$0+    /ۊA@0ll[UDD-̓Ìh"Eԃ!>O*AI),tzL0O6p,o3DcB+GgCRMl 5EtḺ%>4qU RRqOL Nĸ|]A@;X @ K*@H9JU$UP>gIq4la{6fE2{p@H&`WW8'jԏr<~`U>A8FxCq`K@h  3~2*@$B $?Sw;L@`,߆f(cڢc"ǐ>ɝC$q^ 6"D|M0z;j P3n#Lkz68 (p>98w;Z}x9rM5?$X=" ~0 X 1𡩸u A )އ0x0yxPt L7Yp *  Y@ HXqSp0A p((idP (z|l;  hlh]O| X`<% s1A ,4r)%S6 ,{SY_Zu%Cc79!&[#?D:]a4tG&G=!vBKjyM'&/]#$P>'ȰdEdɔF{;z ^OũNK>0d&3DR%C"AI""y:k_ZĄ_RRu-SdM7&XRS?6^*KS2nӄqc9AhD/sANAS#tE.:CE4w0TpUMP~ˆph@t:˙8x -Rleʝ1qk' zSŁ`X̀A7 Xh(z ( j jQBݎ &)r  5X2} hhp+/e"@Ij֊`++`Nx0wvX{ Tp ݲ p8o` Xَ !H`Ha9{9pq0p`g(y0""·6X IBy 2ٸKz+Pqܼ]%; !jHgx`0)1[P}@ vXt[ phhx`yoF3Uqj!6\byAZ5$6;2EL@S=;lDKdn?q"fٺ^dbkE;/A/e]XM3C$4tf'[8f#!4smQcZeE>4b}0" Js~-*qG3XJRkDcrqjG r&HUO'5jPglxp1m tu0+ݽk: Ґ[꯰ )`蓇@y@އ ( Xhsxo il@ 0z4) dHx(8{@xH hhln R P 9Ʈ8՗0v,p`u:Q!`}%Fʾ8fJɇP]?8t epaHu0  ^]HP1N]yxo:Zp9@Xvhbɇ^nfY߉&"ŇCwBuLwPɇv6|jl'9ϭ! q̀ 1ը\| a}{Ya9'-Iֺ\ƀ"n|`PtjZݸ.\eCnRI:Y>8\[h}/ePm*uax jCN;Aq8בn (?_k|;y:χB"`hgp&}Gyx3-؁@@ :J򣥑 !xb GAu@x2BYm]i}gd(")3ˡo9 E =hrtgAyx9At< ǩ7|`pRŨ,dSlx Ydf rc<| ˸͢:z(|g:28lR{ǩvrI zLR<@ D $ vKq1Ogw<(/paIg-ȉ|`( ( )y` `A~kDZY`X]  "S?7\P ! FweWwqCpT `-ɫ+3*Hܡ'Hp bt'i6-f-kzK2(*&p| H/Q[Vj(K"'ʚ1ȷJLy pQis)^ix#xq()N_}^pB~xM /dۊ/ŕ;9(`\|%gQu[Cxoih`l h Ahzr=@e:QyV@aD>xC Px/Cx 4<P;"AH@B dJdPx ѫ\G$&EBȏ8h*@` Z)Wti۪bAIQ|E}?#6`JTv. @pV޷IUDe A{.qv|\:۬YKzZ^kϑ?'I }>G13#B78쯩>H..Fa"Ujz6Ys%1-ۿzW9onc߃s0gQ8 0@7-2W*pHݏ#k,~Q=Rirv$z_ :xjzPȚSfDC /xj<ǨPF&$P9s`W6@|HXl@@ :#ep'C  \xbʍKWg8MU&|6wF0| ܽ]LtYB@7x- eH|5FNXc8a6`%!7L;GIC@$ (n{(A3 ܡﴥޅzGL@WxC*B j/n^m!aa? $`h@a@J`T`P@ "c!a!  !=Ε`HIa=e6\E d>&c0YFb-CD&@H쮓BDY-LTE`뤀a^@,>J_b Ķ% NY, !1BdC/1 J*m.AgAX2d<BH'P% fk3i')gPou/x,z)P&Ƴb#yp@  t/)z.,.;;l"&b` ? \2 !p6 bX0B$B`i ^)$JhԪ#'ǦSy<:c>"SIց-JSL;Jd䖡#B = 1z[,WhSlB΋/ݩj~x!kOqx\$'.ی[h: @$DZvkGj&aRajGJ'NkF26ZORT'Uh%9\A8^7S+Q,A?Fp:m]gdі; &H q8#}BNy`Q+p~7b`0  p2lFx r a5ˠ@>GA3 x&qGҩ)8 ["pA4OH(Cha3"X4C1~,@  4&eiicV(Ɍ 2~(3`\1<}J#+*mMlkJxw` A.@ZvSAs9ĵ]W/.ýp $i:Gc9FվOekyN&uw9"VKKj4߈Y߻J˴'=) 4mӤ,41Zvɫȸ7mGxV[B#* ۴ږR^-ɻY[{ځep9K#x!3Fc{0N@( aӵ5HBJ? I2f>^ X@0٣7ю IY ybˍF`Ǽt_ 2O'rbq X D(#-CٶIXWx<QL p&Uȥ* Pmͺm} 5`+(7Hz$B @@Mc4g:x`T D^N;Ao!:HCr 48X,=UaS:#ܪ@ jԄp|Q9b uxbPCt8#~4 İ0ZP> I"|TʈI 9kLGP&߀d#q8+X}5G*6@`l~06 @vψ>1Abu!T J´l! `5$XRڵy%BbY{C͒7~nx}] qnʹ̿K]?87w`;[软ixHwŖW*7oـ uw|c"Z>0+W}(U8ZU}=߰^!K] j_"t /VGuk{޾˒{嶗B@tr_ $cD [&#$3%@슜biƐHP H\r҇ fP2C D@yCIAe&F`8AǀF.*6.@0BC DE: p@\(@, T6ZBmi$=A ANamJn@(ґ&* @02ρ!88a`)> %y#2@!AHd:rh~"".@21cΪ,jnF'!#(F8Ȭd4D"tM5o -aT|CJ4Ozp82K&FLbd`<j"$2!f(* 6jab08Q)Z`&J|JVja\Z`hBֳlb&Obl5`j*󋮻&ygRz*/&(Oz {/;-/".O#s0HrC3pK0l)KBot*žb&`qPOڶOҳb0M_Y4s4/fS\-g.uG+ ^ӞGM1l,k)b":'*%k0,T>aឪ :XVkj&2PD,(؆!mb~2 >dJ"Jt* G2`ô!!A ƉTM(L`\M|'-'  pa-m!LamKJ!@@@86X!-$-HMGñ`$.Ia^öT>"\if7F Rx H;fB@d@N!`6Æ!Fdg3.J` 8)c^mAF:@4 8W HB$ҡJQC HA401b`<;R:aa!=TΗ)F.j`Ɉ6>@PT4^AJsD~F 4P 2[ :Xm1L:``Pr&lJv2m dV*tdM̢,!dtb_Hy{RS;9"RzK172/k^jB,m$S²г+E\xkVvwkL =kj/D\o71%Ҥdbۣ|FLT-""ցB'ԭ 8 6(!(VgE@A #h( ^0q`g,i::R( ^GPH 0H GVbbrFd6L4&SDF@ˮ`t`uCPѼ#Dp#ŸZ`6$ICz@T dC'6vl`lF5fB& #̚Td@8z$#gj&tNNNt@xҍD~@rĖpz'DF΢&:'!&u`h6)N'6a5AfdfD!,tV5{ Dn)!6dHZI>nz"~.AAgaՃx:owfi k-V9 kmR|~skx v䱧PlpkF|Vk?:S|n+4sG(kbOs/BVcuw{mz"Mq8Kwf֡`j=ip*|S`󹙨/Vk[-u..mRDR;t*c(1X\ؑI?8Vj2#(Tkd!ӊ5(\@ AgQ#D$;no K"ԡm`Z"j!X(L3h@aؚ6:Bb+44d@+*#L:FhGFl$)ޔ!)KrO|z`8\!I>ޥaAf l$"Afd@D!f㸢j&R PRLfmsx#dF%@^8&Mq"5AV%Kp"vvf\]mhef!z ! q$.aI,@p\@|aaZ\7`0Dm)f#*!%MӇMjW0 ZvU@muGIǡ!4ANXm.(bto4+X/ oȯ-Elu7FvY<&"w@o'doχo'_J-2vQ~BYq-235&\xG~ks氾+Dt={2nk"ZvK q{n^b˨<a!2 M"(@dd7 ,[BCE0BTՃa` *7V"(V~a L1TV`AOW ;pptn JX:lNP!pa6X}Cj&:@`?X lan(a [A_h@@o3~?_`0& $zPwExoZhJd4{=^o x C#Q}  _O`LB{;^?( tA@ǣҕ7{հ*z<7k}xuO?kgA XDMk@@*mz\nw "J+0B}ms8@T0''HWZ`9~atlj=蒲v'[X`4ynݮ'}0ں f~2!xpa Y! q%6$3l솃pԋ%D?HL&Qy'rD#JIT6̳$6J\D2Ȳ'KrLAG3M=όsğ7J묏%OH5.6 ,#I3E;dJғ)2@V,-e}RIuUeRPU;^:TlVRAA#o1[]Y}9зEkd\MW2c#*CUo'W,+atj>i5 t`&+~}uat;H *HN~Nkx@"SGȌP5(@Gxg Gp܀`P0giwb|`& 4ɇ} @P&tG64lzGs(*PR؉ yw+  `  'x!:'5'yiǙzI49~ywg!>r)py7yg}@ÞQȁP!V0 Gh=G ( ac$Ӟgll '|"參=A"(Z`:0c@ @0'kbc(k;s@D @` TtYp!PlGr6XK&C8 nkM `c:"nI7cxptVOQpc !N 4j:`PL k )]Ԃ:?hxtKd^IQ2Ka 5ԙ7/4ɚj%|Y~R\.$9fjy¹^yB)[ӒYIM(e2ת9x+}wBr)̳YΣ jRVQpܥ[j c5ٚSt-쐖nYUfS6,zzQe4JMh!7`q`6X4@xԶv0[8ʁϙs-8F ?@,PJmR{ cuW;+rt98 o)1` @ј4h "/Ez(͔t y| 7G` P,yTy8@K "dG2oZ֠U6} x4ܰ$px`mI`ǢS7D4MP5yq9G øB}Dg#ɏ"Dw$M}TU` }"qbM| f+eQxbX ֘q0&B@(W L "u$tZZsD5XWtX`@ qMĒ8 sh#Tmix(9  /BZL+B1)Δc-TƔW?ŧ;!˜saNy{MvZjy ;SIvKouESvj˦*\JDԽCaP! -Р7.$OW~é mgǨҴٛPidTÊIiT lOH;di|/gv2QxkFZ ! qm"n2t@Cz`=W$<0 X3W{s@0y5T 13&`0OP^J[ T !7>T$8 /8j0C{c+EdG(AyI+)f)e[~qC\E:7teˊ)kR(SzsQ8osC rRg2GJu)+D{|r(pep8s8v|yHA0zɀ|o XPu8tR>j_J1szZ3xrhHv@t({ " A(h>ppWTzJ{3pԡdyqXy3"Q8w@:)n,l:ԻJ3@ aĆ鬌aR!1 1A~ÌbH,x[ ,8@HxwZ69 Ǥ= a 8zjg8I=h (omJroؖ5"X0ʼnX 8ȱbBA\KaI-\<O$hx XeHcWǒ1<50Y(Ȋ"08#p`pg0[YP ˘x 1J4ȷ [(JHXo(rY:QZifyM /(CI;PK|4b0H 'ևpgdIps[㗇儁ɀE)8xp{?1 ٍ/QB* P"0x3ZGOP.|xkDx3 RUA_DFSLvR=ŌZZD}ĺoÙ*b'2}R[4SmARqAh8:8I?J:8{QI(~q/F>KI(Sb!$8I`x1*DT 7yDڬ6CӛT t:<<,:`~:D(F f`|^Lt*qC+FB0ѩlipsH$HrdXgxhCP| Ĺ[؟>#Y)!xVQK\H4~8 n#=kHP=YȊՈ}2~Hn1ʘz# hff X r#֐0-ѿ @ɌJ*U*/~P(xpsLRՀ ؀| `/ʨt? 8 fz~ofxb۳ pЛ ` D)l @v ҙn {YP{Rxx8ݚ|;ċmMR6dQ됗chn p8oL-D~+WFTwE?baҨS`fqc*ATǜIv*%S${nDdvSEx' Eq:F:T}`z*rU^ 9`UynS'SRCQ [{QS u0n7~quDkޘP(tlk @TV0/'!2hP31T#D  nͱ >q`&`:96r!QY$YEPE` I}"_G/Zf0t`Ehg(C0@4@ JPQxȠ+/@xl<8pNs%Q@g[GP@qp]p7`xGgpi0zeB}X   5>d/8h?.Y- P}y`= 6;$>%Ԣ x=@PeFG90dkwq^@pHsr0ˀ ^Ԡ[<,./T) |c @s@lXh0\RanrKp&c9cH`,\*['RG9[khfp #5ϗ >@# CW+1  ۙk 0 |=`\rs`Z.ǁPd@@  . .Lwz<_7~϶Ibzh  h6@0T$X( B,@y!dS@"8*ECz=^V9?[F$ #? {0  4b90W3͞xw10=[Sx[`g 8V=CzāN1 P( s  <HA@/rn{'?&Qd@HC;baFy p(}#ҶGyr]'*@8@2`cy61"`߁(&a CHaeTpF! @.9ripȀ x>*QtL Q4r@։ޝg^(}晠~>6Au ʠs>ݾuntp^JqI ]ʍ͗w$75W^nwr3^qvn^wJ;x{t_ɐv=wbn%]W-t6am]]ܟqMwf&#7]❜f3^ctd9^W߸fXFwnz#oצf݂㸎>]6tN:9'\ڟUݹqfWZby{nâGat摎o|X aWh]ex:qG"`yGqo.PFpD`%+N&0#H 8 `" h 8"HH128-"w,Ԅrd@( d* & G6FoH P 6Cxp Cq"2XVV"X~?N T5Ƹ#raa|o"bNA;GR>@@f\ x! 4)xt#jEZ$Cy; c[ť/L?KXyP"6q@&- $kժ1¼o.8 l\ 9f 01ɦ&rkIaF޹Klsvܫs:bk;Ma.fWDھfdlfh%fU뀞5Zmk\l)6YA-؆b!lɡٰإ,!ĭNlbaUvYK_Z M3bcLegGx(b09S0!'PJ 1t%G } G/ 4>8'zeaIC)2FP7A "@2pؖ 3?%1nHN`eN>K 98?<^hGh az!Pl40=ջ: 4%0T8h {Fa'FtbC<> d Z7 {1aJP| > :PZ.cw@*I P?xXjr66uGi'w0:b X8榰={$DC"-}Me7=⁀@Z a5BQQ)*"din!0>>NϋY`fYq0p8j ɀZF\h,+Np/jW}j鿑\[d+CCn1z/$xr٭ygbed0Y{),دu{aZcx6wG$ֽ9^6ox-oϭFn~rBzsm}09x\*st3x)Ʈa&rk&O_Fgo2p8LD@!r0@4H!B & DfKaF`hmhl0#"-A[e-<F a^de 6`J @ ,\ ˮ7%Œ`20m@Q^AH`#M/"-@`b2 &>'cjS"рC ' xx'(>\` ~  -6/`$#U!RP O!'2j@($ @gnl.2JaJ `**!#AI .`f@x`Fofb/Fgfo k/ϨgF޷d,mOb'oKn#JЭ+Kc3I 0 1dBpQ#45ԹNtnˉ4ovSP'* Bs63DjbgJl+*,HKEH!4H"mA2<!Jr-D1Mb[d`4 l} @f,BZ#-Z!c"&BgP2*b Tb O3 3 a,Z` bbD-9A˪yM,M jA!%u^1HPq(@ 3(n>!1cù,Ahn4æ2 6@>R %jA!TbV:f!BaiI^W(gE5?Pr'8lJ:seOܮf.pOfrsr23ksKe@*S681K* m' `77Vr+] Kn43S>7Jpqx>Fq_7/nӸfq qqγ.z%?khKr"6AH ߃d(d&#=%n&wFF`y+7` _] U10=(y+`R^  >44 v#!|HE@L0h2, H,acD?ˮdA,!!a&(׀o'(!tƜIV`R&ZhDp j2F?a| 0'dB0~O$0 ,I hu`RJlP) Aa_R(e2`$h Mir)!웄/&ZlR& = amKKa{gt j-N!2 |xDb`RN R$c~1`N6)b`X`I֥:E`FхU)<!|@ƀj`zelJ/j mF62sp/[[\k넱&s>:zxs{s3ef#F>p b;RĔeR褢`àZv^ T |J܎"X|-͢hsGN~b"̂' Dޥ t!dV6!f* ^3Nh᪈Ɛ;a%sJ l_30f#y@?xxf(`7`p&\H4㊘J&XjA˗ؤ_0mndu\ɐ fZA0a< &wRA/`(:l`E'!l1:X(2y[A9]HC MjuXwtKf8=>3k0M7 95^"WSsb'9P^ ++92 b8<)>ТH~`7`2Q@*|\|hdAԛխudnea"$xpMc v"&;m)WiI`LHx zM\PlJ\bfNۍBP2 C!`@ ?WCgRD`bri6w;(BEi:nwߏ" LBLHdhP8X.GFWk}>dUwR*X,|dTwu:()AhOXvl d.#t:.3yޮg+O l ŧn8* Z{z#|߶[r\Y7!h\2K&ٴnI`6 6 `0, q)t%v_FQs @;dYsghf!!{`: LxDgyl~G}{2ǀ1*S }g~ `xIAm8 !aXd" >SϣRG*SS6M8MMl=XG[\׏yU>yUVEAKX=]Kt}aWV]fV|\֭:Ԗ{L6UelYm\W5YW%6YV-t53sYwM`Ep{w`P @nNrѤuHz*A}SG('k)*l{(r"'Yx'slt,s'x. QYȘ$(8 8N)ffJun m >gښwd PIj {Y$mFބ@8䞊P%Pp\8 n1 |!I%dm<S~(QCjpxt8BhO=7H!czq"zTY2Ҧp8B;b`8x !;p0AH 0ǐ|FH r !(p$`4F\l@j= jy~Za'C`n(#Tf q!%"Icuc>dF<BBq P2du2 hl L_ P A 9`(/h!1d/@ Pá*̇<'?u184%h ܃HTFT̕4g+)1d 6lWU9.ER͖*嗭Ϫ f)_uLKUIQ%\ ]JN draR-:eUb;*Zv+Kv ׫E] j:YZM&ժʗ1lUʂN_rX+K2*d[jSY5*S aaJ]U60`m9$V5uF-"üu2F' y6 U[yj;Gp*D!R  @ )p7CL®JVv}@s̈́<)~Ep(Nc:$:D``:KXH+#ne4}];NH8|1KxK!2HH|K5 `100CGjD;75:@,kFA0$ya@P n1E8[KjmިP# da9dh:onWV^+y~SDs+w8(p 8 |m<%xDv@n+- P*7g8 Anl2! }f0@@P~cr<6Fm/ʡ xڀ(@Lk:#R fuԛ*e:hBdlZ ۛ/GAezutVLu!nk?b⒱Xz7C}N۪]zojv:Ĺjr=z.ydrή[`)ZajUy G60JL5OeTyv-%~W+eo}K%t>mX-LQ ~F'Z;zN:>d!3p//#@H&=[ p*U*k 7@2`mFC| $."225H2k5ɇ"5xoT%RC3`# 0Cc5?`m $QEAXhIx h~!`u |~W3\){@h D%i$"zP¯{l1XyChD;h iIQ?x  u650ؤ!t0nȻ ^,/b1 K ?Z+2@a Ў32\ 8} Zba@<n XwQp& r s kj5(}|"( ` ypjr @ <R=y:#b*빘¢,IqL"*,;<"+YZϿ9=B+joS)O, Ã;|,XHQXܕ۱˗aHk:,:K!HjɪüӦ<䋔ՖۜKdʪ4jפU1L˄)=3XifcHvD s0ƀ qPh*): vshuxpqŢ2);6@4qA%f+hAӿ凙S).,52w+)Y.!) p|$Z3 #ɵ!F/Gz2(`kgxwj@IG >70 x# P| 8rA\: PثP`K 8y+e EIT03\,esaVihQbR`› )P ̇j\&ƐM&G{B)7^ɲY ټHpӳm@Z#y}4(ހTZ lFZG`|R~P@hffy-h0L-l4й,{- .4*-bՕIf)J˽TT> i-tV4Hi,騘|!@=SVxUIcUVmR;1^DK8iⷪ-ZՅrJ9p*рAFPڀh%g ' V W@% heM!pz/q7Z +E@%&6 .BX& / 0jݩh    qp.8R!8:PXP$`wXb#%PZ;)]Z>5 %XAJ9͹;4µ ]3  1 SClЀ]^HrL 2gm@@D{1b 88GuzQ{GQ(SZO ` Sqm\Ӂp,͇ūœ;"X%HV9LU^~W|,Nd}X^e1سXU+|KgKǫʟӭ;~$9Mg sĮ)l2 sB0/u]Q1+q_i@^>P~0 . hR8%  \?S Cyt{5,Y]N'a j"x ;i6*Ơ U A] 'JǕlBg Xz#dkXs-I>P'fPfmp{Q|wGS& Z#}Q8GB˞HV7Ic~- @uÆn ' AB* u㊔:X]qUPs/.HudJ*\TUB0\7 ;/eٮq kV E,-3x?CP9|2I:ψ0 @k򻉲gT }hjk(A>p$ձMone]"~[W,*dccd̽I*Uѝm<7@1Kv=T^1I =ºIGnʴb̓g7KÖooX/+XYK: den&$9""2nlLjl;;];zi~n u4wvppwrbM  VX\0 7 8q(svhtg1XsDGta0ȡ v보ֆXfj@8w0.xlS^(b1k 9{7H O|^Sy;q08 Ax< 8 @ |o܀`e-K_ .ҩ 0jwsh : t @wޑ/``,r:G6 xi> LiB3U*lim;Gm5z:~ΩtwWqntN%gSȤi<Fj˵pfsux;]Nk?ϫoM{>{ 3K쵯;P4 kY .|N߾{: |ZOg 1;>܂*lݸ) G*Jʒ$;C-Ȑo.: l:n޶GA/[J14? lJʴȚ'D`2M*pcuk # (j4!8^ ҢܷHtHAM܋C ڪe0b791S]c[M;$I<,<<3Hm؆_\YcܻU˦K4mN#ydCDt Ht[-LؿQNP a3e_OL?BoL&OJ[<0< my_yuR'4әu;ts*eܜ?n?]5x\gn̜+(GϸVT4})(>ӢRP.S`RA*}<Ǔ7åa=Px`@$  `2xB$ĆS64a A3ɨ^ )uP PL k$Hphh P0@[MnV#{}h?."JS'̂z8y$RS cP>2@y;P 8[˸<@(0#6|8Q'WtCn𓜢f) j݈% vv_zoٓyԻx  nF 0qǀcïL'=l4HcPN=K Xg*~ Pd`XlF/M6Lg4T[à`& єۨZrSR3j0_> &O H "$90Ƨ/fGjL{U&U$KkFʆ֢Żؓ!iCv :̫ kvMgyQi%5בcimsvgˑS֙ピSTn$WR_8A!swI뻐/_W`9.ݛCQ= ?Rs;}YkM4ZͬکIo8 k`P?.OH:S/=ʺ/w߻1"tɸxh<1xw'׫zK- =9d{v{ar9J˞EWC=æ6v]we-w.m7xZ;᳜֒sԙ93'uy51nӡ+JsBKDÏy̲fgݬu~ ElI^+{Po Kr$MlG8ש ."|¬cj|`LK(5n䩏ė+b0+ ^o;Bw.c`n)Jyh"+̴01Pډˠ`0Pp[l.(Ϟ/D КH昪 >6HnNDŽD>p]"ϐϪwjH}nL./ qPCv.' FxRDLH6М3B3o LF(LQ*BzN0N!>P4yPJn N4кm*Fi&] ͆ѯo!{>r*G-\1M"ToQ -¦nPЊ#5 q >=O)n6٭}R~pD0N,ƃT&!!:$q}4򌦴]+Q+'Pjt,Cԛh, RnD3^6O"O㒃$Юx-'𰻋RzR'ZqH2х&7.`8./#NKFCR)n +$$ 7 ί0d/tRO)L6~dZNDwP?6?u6p7Ho\H*{ sVN0颹G :0nCs6|j'ms9te;)0.PNhޖZrIi::rs-.0G mDPʛ3+A0,n$NC-L(1{C$n5%DFK<oPr7(+'4L@4]?3Hcr/Q96I5<Rji>DYD3Gs49d,KGF4$Q/ma3IuI"LtaUI<-9 jm/R"~S&%PxG$.sJR#@4!UIJH2+T舃vEdq )dC4]k&Yq9,.=(u1Sɬ_o&5ί,rMYQna vt"LN0Rv2 1)\TQslK5QAim1^鈥o & `[5UV@IIgs/&*43{G, s#SkS8o(KBR9xqZ%4ΫylM /^CK &59eM>CZj#`4&V!z;ofM4/.@6VLz)QvQM_ύ[cgNdh[KZZ7WHpx;vtT+.&ih.qN'NxM qq>MWi6)`A' s aNw% H{VJjp'V@]Ls쳘so 1=O}gdI$CT'kεz7U6p t煋Dwח|z( X4<|5uuD*9+yYuM)PU-'!rzÑkO mEK$:z9.PK֕dX(F*q̡?ô311LS xz1+(lXt23σ"p^~nlxKM E?x]՞s^mhYˋ 2F6?#ʚXwlC8L0oQYXKml$$roo,]s=\ݏdPu ÍwOɋPL:sUZ7Z!QV];a/HA(;Iεѵt (}/`ntȾqObąI/\(4y Qd-p< V5iȧ?׉$I܂GZِig=5;\PҌbV{95-WmRŷT[y-u@UkЪV]Ck\oV7?~ƑvO͚-@\[SVjiP7H?)>ݭ o✐܏;fO@H|@KEjSE..ir16i ]%*I`WWrr,YVu=xk}Gl GAl2,᪅YRa 8fu5]}I zyYB5a|di(ѓ;woU`HG)eGRqw}o%))W[?LV^2^uuxzP*?cb޳h_e'3Ւq >%,q*#DyR޺4EMwzp,     |*Aa63DРA18lYAqy,x!CS d.H'sY} gr ɦ\ U%jLBQ"צP:bȥ4x]~g]Gt5*aЮVnަ48VyRWT7Mr]HͧlB7lmV.3S*1Me6U ~6hq>蘭ӱ;z^;i[jp["-F8. sI{Z'"uZ[4ܹ( L!IO;f-"=o !Ij. 42@b2K״hCB1L-ɺBLj2z\8k LA `: Iȣ:2XR\oʞ.tl(M{Ɋ+= NjƩ?r$?\==B̨lICoxMTDHFG||#7˭KipN HHrdTOtu&BѼ,P#)k]),J2 Є55]R(s%J &GcE=RتJM~[ m9єðR?= >«ŷJ)! RmAWSc#+C(E0aLb]6%k3? 1p4wWTBv {Cr[ X0 y:ڕ8+Tfm_M#p-[$&DY=LEPZ% Ư٦+i&2 *mohs],UƒE*c\O.e35Upnf*p8F>ȰP}(ky@<{=*ЬQ^幱,_*8\Ƀ2t2\gݓDRTdkJmƲV@w W>0MnzSaNJ Lh?E"Eitg䲔9@ 2ǐ٪O^D*VڂN?zхV B<.`7[rrD+]g(C&Ow* D4w:T(DȓNEla׳Z9z?R AAl1jd€iয়6ݤesP1s[iOn;M*N/PƧ2O-P|0&>(fK^KIXƍkՋ-39`SKЊOQN- xkNX &q }z$?ྟT撱90' ؟cs<;͓Sbl'c2d\*D4F=9Gu.0 t}E;O~YԞHI3A{I'-Km:y7YˢtuX)Nb/Rfkr6թP?̩ZtSyShIerjtr8wF\Z<0 D%5*۲IT7@s U-lhUFk,S2jr)kK`jAް0Njy^-MȫʮSK}Tj}.pq~ICgSLdV`S [- nwd Rnm P\;ta {m}Vt6rU q^i1@$!&Sg:QHV(bPس KZ~+άEf`M=sͶ0x\->&g+g4+e!"5M:"ԅT@g-nT0L/d%ȹVu-ZO-\vj/ Hq$%n9m}#QM颯USx7̩b/INj׃4[Ƴwln 1 X@W#Z`l޿> "\t:ؘޖ ۈXk{Э1>pW0~wj6޳&O{_˟hv%DݞN[Y݄tq(x63c#cpHۭ<:D"E0\v) %J\sjB)qP<mnNw4Y{ef[E-^VcG c`P6e+_Fn)vV^>8d }r,BZ-A#f xb}VO:H6ٶ' ۍSEli&֕zf/WyّhzY%웟)>`:6(n?+DUm&m%dMr%"8߼$c.:?y(hsuɠ'` G&(=ZKa xd :[۝y1<; =9ƞϔYL+ #=k_jaMBc׮ V:L4 D|£$;9Zw;ڔ$Tk1`7%୭7Y=2>!˪ 5`X*֥y9RA1rə-<i8Q<#/cđ(eA#,#KD!,ZH!2!jDL*4h?ǂB%=9+FQ?/يaQD" UX+% 1%,.PKt@ VEȰ&z'54: L+cJZwƺ\ٗr΄DDUMDH̸ Z{Q7$?:,1>ksi*ݮ͏TϗrI䥛N?DjY\{O2#9eZNԙ 1+I -P}$G%Q%ī7>4,tP,O-A@5 Kx`J؏t#rM|%$(/RѕC"K3)y%aвrE; 4Eќ5,G絵ciG 7;YXΙTȒũ9ӕIT.SKJx0oCӉj6洒_25_*+F:mV-BUMnO-QXz 1:JǃQovU< -] &2]W4e;0#JQi3?\a7ӼUsWMEWVRUl0+FD#*Պ{Wk-S5\.6!گ81k&!4!5+;2 7SuxQIJR /SQGMK7Wh+?4t]d%D%Nm5gYrQCݟO/DV 1OڦZVe@>Ceܚ D)[ -}g(j-1%|"- B WԂ\aq̥6N%SxuE›ř bƄ 8[M:А2Eۥ:GLdI]Zo3*sbSˏU<% ]ՈNU`-ϿBS-FD25O\tA+f?Ri8@Qxd|TIͮ[Wad#LY9 89]0k1 猱S.^E{>(ڰ31|ܻuRe'PXkE#4bdeNFlv SqxY n֫2 }c h-Ÿ !9*8JzDҫ_H'!䱊F(<E\28Z-AfG2Jp% %YEO7]~sIY$+", –aݸ PhBR$SaLe{Ď(k,s5S8Rܥ*+ JKpɬȢ,ON?ƶrʼnbtBA tn:d MR«U7D+:}گ$%M@-#!°i [&kH]<5 Þ;}{ѩXnNtQܾ,1DpFYEf\{}„\ru?'{X~lİqJ=ew.q~JsB.DdpGX9iDAul{!:W#wK IBPqHC/$ܕ=#X l8VGd?,qL*`̹HMNw(*<,Jh]ܨe8|养r5R2/ .jmZE!ԫo*3,pmEJrX"KTyզGʔU}LnWlMvohYr|EEy-/5WE-FuwmBR̼̟L"v)K";6_T"$񮺜Ҽip> r l֙_ŎyD'h>b bHPvx, yW nu꼭zE{mZi""v;# RjzwrQ%)}8Kbo+d;V+>Z侒,I>_iZ,Ev^"D֞l0wa窴L m\Gukas"T'\'K_Qof#цFO.6#*zk$#v9~WrV;Ut fKJ_> (<:"XD/A@P( b7EG"d"%1dK!̣(dU9bYLRDET R%tONT+*ՆQakԙ-NGP&6:咷oSgNa޽ܪkUF8T+v+AQVرK'e^̈́f׭} /+ҵ[JNZ'V9n;MNc6/!/y\;?z)my@g ߉)lѲ\iL_4i7fKyt;Mr3):سCok54lS;HZɨS454/"ka-ILGіhU[t҉ 4%vWV- 1Vd"VM_0J\ W:+-v%ќCt6C0M<ʂmJblm9գߟcmAu7beR\{wށe43‘a9݅-X@$idmVl2"QfO*y{ʼ4CM^c1#k.y>U&Q݃@XP;ėեvQQn_p;Ę_5CROJ?Oǹoy#L(NǢkGp;Iv\س]=Qua&Sի&[1sY cH%,J3CEzsKl@/LĻC~gUY՚᙮Qity׊+f1R i6ba-@@/ߪ04 ؞Ba-%vjP&J<ļHK2)YsXo&iwm"#K4SQ1쁨aϴ@|>w$9ʺ@-g*r]"Iʙbfm֫[yM 3P;/xRq]\KJx,d^UU" l!48 1+C2v2x̒D.]2g*vXV^2<_9SSMȷ"e"`WQ#=Z:m,gBS}͸_* 7 Nyg3\rrUmQa8z콭BQvŲt2K\ܙ0EUoW ך|OdVvǻ)OYaGHO׋>\V`[]ueVVZw=Kx=f_jC}=8WLKdʿM)ZEjgroXO^|k)xBHGuN``jTelOlk+mBO`FƆ! VЪ c2{B"'j&hj6jzj,.ň(MJ-'m,*|(kn Ԉ,HF3IЇ4/΢nLc (@/FQ Ň/o|iܐn+x%Y,/o~qFfkس \gT1i NPl)**f?lߩ ,[eNtX i;-HnFtf(u)6N8#pjKb%>|8uR똮XPS@c g0Ф+ `=*e{&J^[*i)p=P~v9P%Ѱ= M(eN><(/oǰBN!Ġ,(Yoߌ(%(--$/ENr #* o0V3!m Clq$02p)*sط1v8,d(c1M0擉6n:2ʆK3Ԟ 2} . q$˰.O/m!- Ѭ+!@RŊ(Fd&+dr"e}!k* jHK+cI˃) :#'c*|)$K/ = rУGh m8 {2P0Q>Ň7T'C ,is3ߥ:G,bD(r'0*0;5s0-2Ib n M!B& тN!>-#ػtzG뮾?r̋?k R,n!  :qK2IS&8̐Ӯ iʓ<4L8&Rh"k/?Q3OpR<M-=갻t,9*tt&PWUwSS5NlKW*l檶 H@kd5`+ lXγ9TI`[r*nzSe?56ba [\Lk5_OG6Jͦ>kH6ʀZ"L^̠6Ah_(諩T*^h4dp_clI1 g$Ъ1CMZB(e F9&xB6ИwTZc_NPNH桴WxUvoKOggM͔V86YHHObN R!o+tPm-+4a6,PABҥb I} y]tLoD1;&3O1Ajz,W`m|7˰طS{RqU(O,~˲7q#TF6ւ n!,h"A!3V 0Ф|PIR@5 {֜dԖSS,QOm2QڵnTgϰA7HǓ̜:n&$| yD ¯|9dX&ł: &!ea0^LvЄԔl\t^9m⃶nF`JaG0 'ҜaUKNQ~(H%IQ?J3$7GbGOX"$OnACcu//4pdIJ(OO! t|7ʊldp3WUu튓S p@˒`67S1|t е=P#U~PO!5`lj.h % LiurP6dĹQMphMOiLw4Οpg5kYBt -&}h[ ӯB7Ӯ,Ʀ8 /VF\ 6bv)nWx;OBAAznu!J4` x}J'Pˏ^i8x֌lݗ~\ЎZ:zi P]F+[1 M>Oq.w+ک6JwTդҰܮڢM A9DqC {K,XnAnBE:4< ` dEAmR~C򐌓ɳڽ)A(5kߎXeZn_H*5rHd65ěp#rR((|plH uCY{tjntࣈJE`Y1cMc퉆8xͻir[#^RirTOrpwdevIK0j7 oJ2mcΪ;bn^*Ð291moF%En[۵A<@@>fAAգ z ݇{ZD*_EZ AZ\/s~0ȬVǵ#`EF9ϼS|ϸX1 u"U&wG8?VȊ5JaqvW b' dY];]vt>QSF

    ^7" 2o.E޴Rr* ~#!4[Cl_.vs06yp-FSneIa,( @$@ a!DA`]؝DJI I$fj¼)F?TEY^`]}q3Ctu0*ot3('٫TMьN0=1ţյmwujT}j2Bmsiw/ZX(vVBԧUj9U@o AxL&"PT>0ap A"28,E$Lj?C#qxg%Db\q O"N;P\52e܎C)StG& NEO-2Jm@J&{,>0Cdv}Xe7;J7Ŭh<"FpX މǰg?_o{wR$0 Ox^ϝ X?_Od].ւ@`, (@\ w<> .95Fə\VG=?!כ&i/vŬOZ %L bzJP l:jR602BA*:^2ˌM%kb«$N >ti*>dǒllԕh I `(4&bXl'crHpxv%Icr4g6ƣr.k Ngc;è2D҅ C2uRSdU.P3Hb2YiEhj4 F?rؤs<+Q0RoX'l_P|{TejI; L궭~>o{=Q0a,+|0 |=^*iX4 0@@Nx N5Os1[vP?KXѬi+0/ͭI /j| &d""J֓# $ì0>B;,D @h]  3Q,Ρ1"F1k&ȳ򈲏K$2 (4^.K#JHKkM622dK q2b0{4,p,3;D r*33N*dOKu$PU8- K:*P:Mhe44u-M3!V=VRNO44Mro7٬l56M{H"+8G9-E6Kn@(+Մ5_#JZ=DfR40BOB0Pj}%ȵlD -.X+@E.lE}n4{W@iAOq?iӶqJۋ[KJuS豝0ێK]'ڕgjw)jQg@NH2l95bzs??Tձo3yXjZ++m01hd*j1RquR4rQgbQӔҎ轢t>bwID$:t'gdpZ`˕{->/_ڰF^PkNy&hANX~@>ͺ<j8y$bNhL>` 8 y0f"qr 2fʤ_yqD7F\.*7UKCNQ-4 5V~ZYo 5 5&ZDVJn!x|ӬLs˦ }Z,#c#Im 2_BV/Y[sXNY+/1$,8ЭJcp*>{N&{?,|FyȡQycDKE;-cJ(Y);*bD}*%&%dRLI`|гQ}t;70D4 FB4Bn_dI"of9'bmq=8fe "ւD+:羅ndl?(G {Qu%JN;WrIOQV^vɝ.uxMyW˭ \&z0JT cdo?1G+ޛu `xՄ0r,gxͩ|6dl&9ZEj#}lZfU6ՄZ3QkUn+ %33*!]1n#2xǎdqSe;jh#bOvǭ(0llFۗޚݫ2wY^ȧwEN `MVPuTS\&r 4eZI{sA0a|{+eRdJ$*,|RCDpI+喹TovR.a.cK !i n^q 2AnTBTsk.l,Եd0(F2I 4'#T[V/yg$%أ1cϕ { * Ԕ8lC bSx\` `2QYa>a2ebaj7ZHh#)ZQ]ekh΁,T/]j(А|TNEn>+Le;l%%K A#p\nAM 2uƚtvϋC[C@@ I+q-#dՏ]Ϧ4]YtG&  H6uFךpLc.b6`%Cz ^F2bQt$^tS}m &+P\/5 Whp}NQcX[JEkCֺ ,VȤQі_A26L^``ѭn 7sy044ZԲ-ͼq${C3{Zm k}gFckzVwib;%S~V{X.Mv5!,-V*@7*GJcNVI8"Qx!@E) YweTzsxC6WSĿWԅy3PuIKmYO0(,YAC°54O0NO3{zw - 9k4fyg>%/d6v7!: @+HK8JUmU$0`Sj`bFy!ŧ>oXaeJ皗,s3XKFƙqJ+\GJKX FsfX]7jpPI esHթS !-VYeɢz0&udZ1PpbGM5{Za!ɀPˌ6s*vOˬ5z҈&RJK8GbJNQ|B-Fd5}ЎX\K2whNxknb ̛,YYX֩6uŘER*8/OZ9 @ vl/מxRx\<@nSF8f ,%yiV Z3piYP1Aמ3-ypz/ί-5oէB7x9G#ں3wR'QɩUTRة*5ՙiRHʢh< DFJ@k̍wcfNHϚͥ1+S)&ԹGS J/L۔;mu1pQd߲YuLeQUneg\ W-;7  Gp[Oht3"\mP z[܏ iO{;@& O%bգoRGRPTOp1K J?k]]PS8Vӻȷ1iv~EftU*D-ʇW+ Q*@UNZ^6ՙF^W mq=HK+ @<ɫsVp"2gi[],δ4\폀w_UR~ai&]G$ifZZzژY֩FzEyƻaԾ &|/)5dٽ'IZ6#^^q J -l} #[aa@=F:.X}ŗ-Mz<ߍDlF4[xgXZmE,b lT 'Apz5 m3M}AX, pH@ Yg97FS8D1XL7sxG9CsymT?%zuE13iN(3-;U\rLoT;ݖLjE>w*ܪIpReõ((ECdjc;>X{@!4Ǒk0} ige|~eJ3@M1=GFu9>yPyϕ&ŦCĘb̤!\=h,_\h/G#w0!.k9:-:J0#„u&CxYGéLcV?ŧ,FbzSE&t*K*JUAܭH+.f[VZCgL9,J [bs(uO 6M"U2E?@-Yb"ZH)"ÿ>]NE6̼N(Q2"B?TGT,|Sn)|r)k*&'U tBSo@W7BNNQ z'0efdPVD\?V N`uZM9C+jÑ`mtBS'ScCQ ͅE!U f醓; d0X  m?z"]Gr%U4IH7a( 2==bwiVԵ jj#u)= dq=D(x^#늨ŔOL32Wrw{@ɉ蕃KT km:ǜȸ[lGis%%P{PN  5 P$`#.obK/ x!6,Ţq39X%ޱAkAg` vnX4r[:oHgS+fykI~[P`)cB?+G Ɵ9]Y%*"abPGcC4'5rK8g.x9~h_-[NK&?z ė%.Aᛆ*y41WTIMdQ]|SM(fugϖe՟} ? zSow0FJ"w9UPB9znA<ʣ(luwCAJJ<(D%N]S=_ 3GիO7OTXŒywSk<zr_ y[JqMS3?⧭jV 1*nkJ2£Y S 3:Nĺz9/Z( )J4-+98;&J<43aK+8#$12a$Sz> !/@պ!C.*%zA,,93KZ+6(;0!P @z 0uhzPv].Q=IL7ĚoQMp`'`x fڻ9ɻ|9?C<C;!B9)˜3P )@Q^" ޒ8*1:5:K\\(;Yr52W,$D8<ӽI =I|qΙ{ +#4QZ H<5;b96 LlNQ,[¿lɰY: c2!Q!żŹ#8*9ܫ\y̌*#1(HS)ۮ5`ҨHm ݪ#5ʃ&+ Y2(EBs$2.3 27% J ʧ QRyA֔4EQѤ^N"%߶}mtH|ĭMDgX``LR 49" GJ?9$T3?H`1GCbMEVTPYBtst!ME 24YɱQܫ1B4Pc+JdZ:ZDJ;<8ǩt5 (LUo3JES\x bHEC@QEmIֺՄߗb -[# \ImM;t ŚF.E+Ð4AV4[ej41t10׍-=a)489TS6ay=UWA<:IFyϝ{؇C0=n0m D{ިNIx M'(2ԦdC,ک>O<-rA*Hɻ:^]Yà2Ϩ3l+>ٳ(?#G8O(?0_dLx !HZ$nM =$>8D@減ݓ]Nʞme+<^]CZr:]%ZKS3]MYs]e.f5/ܔWpcfyxAlt%psj`YhT8r5tQ v>f+# MZTjUG`Wn%eo$&AGZ/qN):eQU͆,-^Bٙ3`9_#[.FLffwcAc@o,P)t[EnfOsуf5fflXC\}Tpm:[&yjuPr{ʳk˞zu7QK=S 730uw?dixf^ΩzS|>kRqK/䜞F:bN&RAzTLA bZU0C/`¢&AA9@ lELZP㌚)Gߣs`,¢}[F@lLD-F  AИ$B!ؼf! _>"&SG!LnKH$^+:19=2M }5#iR~2Px<8F괉fyb˩RhtG*h4MYޙ?+[qFkf|^㐑TyTƿ1Xz>UKQ~>ߏzE2Py_2ssyG,h 0`p8$;iM1HTኋ@? ɳl;BVts5@9UTdgv*5 U_j}7ҎM8CSD+ \c2} y?o>1mdM7&b4^OaILl LHc:ѹp-!y/B4H6ဉ"Ȇ&d1 +~5/ :Zg$x%*)Ns3*^w5/=$n&%,+BUWңuEZ3QM ")i&[4g1M.ƯD_΢{e~F5C'[yIw]'y@IRvE9̃%lwܓ]Nk6Y7Xw ӽ6E$vl)Hu:-W10)fCRfP9ڛu;ɹ\#ڏl?ICVT1tzЬnG7p4!(|Q*&t06xH `&V9DՉ}N0p-:d|*drBvac!+*V@8iΌ#ZJw&8Jx抋ƥ,V4x :0鄼wtܐ.͈'ܛMTl-|h,EORoJhFS>1 l$E _W ͟/Tt$AJkhHpMLZkΎĠbJX(>V$`hT%2Lk k'FMόr洫fڱH7B`d{M ވNjkx I+Ȉq"Rmo3,I$hk DN$%J *6qJqJilG\a0 \ O0P`NR=&Hb(,O|l+e XȌCHG oxd%; W+HBL xnċh Ihk0.bQ qK'r"gZkj|JbpOhz7!`[ sͲx Rk$m2D쫈Fm䊗<ύuR.ЪtRB@Hѐ-r›&jCh*f7)܍ .Q$bjJ(t2y 9.1$Щj{1ooa8a@ ` L_0 aH.dǰncK?0|GFHHI/.>.-dINGoR+2>RBR1//3 *,ʗmcE, [ #^υ (521BXFƒ @Dc(ɲ%(:aN1p mg~&lh?L& )*PG" B),B!8BGAK>t16y̅Jr}u %>bG!|*д7*.gn~+" @sQ9s η&VR`֓GPr(l$c&8blZͩ PsĬ]FdIt;u6#BMu8jj/F:r0)51Aypz,.J а%^ef2SrZ \KQ}(ҨB>0Vti0Iv#ADʏ˰$fv(­ 2>º~$oGunk$P(#h6NE}n/)D|5kmUP4G:` P_alH< [X3a&Y]7A:!Q *纼 i1rѹ5#.}s!7wb/<[ȴ vOzlLV+aŒG CozE~{m60m#X+' ZK`rToIq^ykM[ ;֟)\T{'8fcpv6fϰ\Lrη&|%%%\-8 gwԂ[ rvqIs 2u jYq\N( @ @þ;"W<&Ơ҂-ۉo(}teHR8<_ڃ˓afKBQWQM Ri)7DsW\TzAdRv^ Sڽ0eȗ={;W2vۓcaSt_u|2#[v$ê,Jk.h#[p%su>ẃj2ۦ3=D_X\P7Qas擶۩a15$y2v.Rsž,g @ }V!ì<ƈUuYX#ݸbpjVy-˪12g) ,{cl(cys ^1' M8 ʮyߺ^pRɏ?@)9̈́{?'C񯟳Lkł}?7렄B@X( 0($!!4-Ƣ8d@1X*O!1C/ˢ8. diz-{RZENJZñ&賣R\AC-1΍$k fDz4eMu7=6g&d*ưo1yM ׼wJegAIt;KܸUyN܄UH\^GJcs5徻{{|ɽ?ZGPj75kKGʹIz (*Xä|Š1~_+@)ss1:g\0´hJ3E:s-(,a0JoTMLOE9ت6(|.$ʡktȑE7XQwu;EcJX]j*{ɽʽ!U&F(w2ja%90~[Ng+Nj3[2O#mqz3't֝VYFi> ?8#}q&ÃY‚L  8 Ýd[#HMtP y[P4L`Muk$[ck 8r3jS "{!GI&pꭐ)EI>qn|Td[=%dm9*u+Ea(4w=]\xAӹ'ݣ|Q[]!pOPid<(L*||-ggziWp'SmOM{01e0Ƭmy~P?kW4?gr*v- :_4%.YÖv|K#)S.#BqbJU\٦' ;:b3Hb:y9v-N6j $! m<\e[ɚV#䛵+7|x *t;Sg v6fv=\@*?@ Ej %-Ş0QΣH9R] ۢ=N$)Uԕ$?BQ듵ULZzRJ{;yB9;F'@9ΪZJP@j!ç!-%0M(&8S+<"˱˙ x2\3#{`5)"n4 28ѯ"Q4M"+#L-5;* T6d0=骬]985R p0zz) #0 Ejh\>{h {PߎZ: bKk#jtj*I -$i% B!l!FCp2kTPSD::*[Hr Z?Ȃ\D:K:o›TBD|CPlDvmH`HY SiAybQ)#-YBBڹ3+*ȿ#F܁.=38Y)ăa=j+!ӽJ["_*#?"kuD#sl,*8P=̌6ꀇy#@#\c(7Fxɿ:i[(E(5DQ&qJ+lAĵҤ]=A%oRU#dX-訛KG2ނMjce&Y_2ȭ\o qr{{̘|r) >z) > ZIφK CW5'-\p.9fι 6,`Ikeæ% N[B*%5"zb(n Q^p5?,1%eAZ:kQس8`ᥑ pIdb̪`2LE5)ӫJf@D 1lo$EO a V5JqW{ڪ#e=9 8+cOE]uR;f4e8&)RMmBB#8U jyf8 b"fFfKVޫQevB1%w N[S=sQnAћV3m0%4 FUjg =*9@(F6v:>bڳ#& RH@عN%dkҲ*0)FNRMbhLHu`QuN|߫$VcD6ݿZ/DvbVE= .Y0j.m[E!9"/qLݼM~i I*?U9+aҍYj"$~)ٌ՞Խ%C{pd @e*[JJz+4% _h -ݐ*jU-]Fxc.R}~TBbF6q)hIjgRX:Ŵ|J/!j^`GдkY",ʖ ;?G8Uzz_> 9c\;V8i;L@Rd2hX*.MQ ;Yo@ B>ꎰ)%oVE 0Ҷ ~H7r0vilB)'v:vRȇg".ԻْU)2uM;;ougEjKݤ>mSק>jaQ9ݳr}$~NFW]@cǺ]r84#cqI]Wq >CHeKrg6LYe݁ea4 f*"ʽh~w`$__9  C|O|3QeK.3Xf}pzfyʜ$+g!mb&-Š_T5gR{KCppJl['_gy/*`Fp2^_݊Bp9Fk 6A0s}w)@p -pn֤YmhH\,=* KCΫ? A(D C :+ Q: B$R$PȄYIL7qI+Hchlq((:L)NH*ԮY(Mhh5LMO4?V-]Ca_9Pkkb5@UU77!JTo^RpY%O%W}RMcv ,uvLSS4g땾S6jm:Gm1}cG40^tȻ=rġ\鸉JZZcBn"[3ͻ)N$.b߼-j)S눳&.Ȏ(QcJn;\-4*kBk0 ,#p'պR ڌl8,0K},CS8QCCtb*Q֍iI4@OR|}z5@ e^ǃ6ABVK(Uy~.T}`F3ͨn`I{;?/CzVi?'3ehl\iwFஜ@ۗ> D%>ܵw)`PZ LX[G&=&HVE1n+u2$/2 3M6#{s2 vv6woq1By(+1Uu'_gBfyjzzaNA1[ \P׶P|%*ao4nz?]URFy LM~IĹ mW(,8$L9EJs[%E/1F޵ZÓtaVlV1LVNiUo}̻I*\fPus2&HQ@bK7ri$yB mʈǘZ!m$Ē`0qjc?c#Ev'F4VzQf [+Y$)JIZ*z@ S>mOa&O%k*&?OYTЫEl},bN; -oMOc_i5;"D5^ftDY$m78kƓ=:@bVuIY,PfK[Tl8#}uuJEF NS6#k2LҦ,'f)Z 3F z2~ 4IŽpf-?d[H a`ꓬ(|)V2c6UUlZګqUҿ+Oq3WsOVkrxM/B"NXQ/a2g+>,==QjGg9ŧֺg;X;>Zm._20 )diXV>*LPJ Jy)X(N(NJv%$ĉE&ډ)^* oPkXe>.nLr2*a 8 P탮.:|),n}ײaSTI7 kE,JK*wxbܐMbus$TX7\N{Z q!*nw1#Ee3oGK$_im<̾;"pRyy{oV."K`3/􉍖koB:Omz>wGm|UNy_'hGUedjqtK0f,luXTNi4zf Z)}yq[P9[Xb>4 .FZf꿛VqL$lQ1u7ͅ>s|ܸBR@E-@0*uby0OѱmuwH'LܗY] vn ɤC1L1Ned! )ҙiz~2n("Hn 52{$Wܤpu1?SzdO ` XpYL6Qs#PG,Eڜ-Vk/"2zmHH y^#tFPMoJE8|W3 swPЩm4ezwLgFIiE9xpHGD Y^XS:+Igm V{:/q}ikI@"gXw<'HhRcA>+-$maLdD)ӊ1QU :D;&"!d&6Z6 snDֱg{ͩ C[1^ڿIU;rk9}_uuSNj i6sXEW g11KHSC![L ㏓,8,܊(8T?ej5p1 iWY r-kexsK=NjDžw< K}5_w1Wﷇ6c MjM)ˑ"UuR5 rQd$";SA\~|w5ߪq[#Lɮ0D-a\^">̴X~횉Ghz O/1_MI-YƒelcG'D ;K(gw:dPS3_h˰MBF5xG55~{JfL)/ީ/Dh)ziO;醾@{2ϋt ]Η .d|Eĵ(mT*CO*䊀h) 6#Yؓu|݆]Y8 vg*Ѓ(Q?L{OV-itCŬͭuljy%׎ޒvNi߹ݤ~m.RUwdBrd 6s$S3bo#8 ʯev(o{$&0SjwU3v0y4te.o%'^n4{*n7T'wn-wj?2rZ]8 8 4 bqh+1A1HbB!rF5&D"Qi47%L(l>k1gԢ)"I0fs O)Eb5PY-F pмS? -TX¾WhgJ_Ss~]qS"/ JX.RD1p=KqvtбT~ES8 ^j{EDF"R-y9X!˷w81lQ(,7 ۵n8C+sqt\@CiùMavwfP+йBWe[qwv#icoY5Of%(A9wFҬ]_%wלc}i&m܈a5۳~-rz<刡aT) 3set́pf$2B:Bt $op+' tT8X.mo`$VlܩH )ʂZx1EhN)!쌔8ZF@7"NxhBϣOi#iρp҂$spInm\LjJSVU],_H㥅T_g`JDbETF:'b2b[+ɂa!yBC}[#E*O#`YTQa!aHI&3>@E _$CNϢt04Ge,JIoI@؍nAr-{NDgqRھdP;(ҤǓJe(s""됽:'Ŧ ^:dm1DI8RqaCݗlk|.fv=5ث]HNh[_H@cqk5.$blrR@`gTbc0+x/PB^V]!4~Ŋ`>)vVP\눒BԳ7gValf;7/0GU9D:[iVԕ`9){r˱o%W[7PGZݺ Pה?THX'f:Rx4Ƌƻjz.Y֥#!3YC6mDYX;l+ӘG1zw+4,dEn9{t HscE[hV㝊y]{6j3hfM2ut;˹>܊W>bMUKXy̜ '&iJHm?3%7mQ򶬘㖷J8A7I;ꎱSSB)K`7ڈ5ꮙɓGY擐{MmWb ,[]ǜ*Q`Xm}ɯ 2me;4C9a+%dqo or15zsq|}1Laj1l~li,VI޸ %Wʊ hPhpNgDcM%yJ$)xLG7o-Nk䒭X;ZӢxhlj|ʤaj{p $"n ;#4g L$L8g`~*v+mc@PjxDiZULJS &иδ xJBt 0*T+\ )Wr)&3K-0n늲ǢNJzeNtQF/´\H,*NjE&TyF bJP.Ʉl!I.Ki!6pܜФ6oȹ+> )A&G﨣t.OsE :vx1ڈn.0 X\CM$C kd-' JX+fn"eb2p!(VO% x֨[vڧ"HcőxP=P|F(⛫nHQ hƼgi:fF~M)ggmO1=CXTkd9 ѺfrV8,섕Q]!E/#Mj@(am.-{*)DXI[q#Qe^E驰m"ˮk%]ggPm%*K7"^㎲F02t+-0n_)\#\Xpv˺>lT|$j2I;ѐ2&%:h2 3doLEmf*22z\O|!R =imk0533 G#5l=5fU^EF,KӘ5V]P&(SeK+#;jKK~>.ӈҋsDmcZ \@HNq \?sX79L&z4$o0̨!R8;M++LPR.S Xt9V;~-E|@ҡ@Siޡ5|rҪ t*ҔjLWTx/(IF沝V:LVԠXP~hoGs[B |6U`yvXd{-4s|TucjĦPP\Vbh#a(MXix)&R%ru+ 0j xGk(/n}dAusx.x8JC$V dmνiCB/K/ia/j3%e#TdBꉴqĵk0IH xu7:N EjGɆچ t̂0t6ȿaܠ1qDlÇg*o5kc X?j g34lezuՑh5|;YK-EՖ^?JW-WymEJ(b!,_ ҉Ko|oq) 6vvͬ+'&8RH+-oS) L}3sT|XHWr&Pfw4wsyqOqEInn|YUFHDL5:uDhww6e4vSUXU}Mvܻ6.iaxNF}y68Nn+Msxꐤ}hٟu>W׾e?,3)AjD &ϹBIxpE' *ì543)v5DYMN{pU5QSxMh@$0)1ͼ$q6-lm\g!y#kJ:ߡt!Sɴ :])z%Wt,%NGcqAo.=O0RS- 9"KT[9%ۍC:=^E>lgrȳDLoeKXQvb=ӥĩXާ8z{6SfL.40/"_*zb`~ckvp7zxTI^kCԖ @jWj9Ӭz:2=>W(=,6 YTM(>c:ZD(RZTd4]DCmõX.g~#ɫuK-OVtpd׶iS$r8^e/'I62˝* IOˎ `  ap>' E\"+ @P8T*'"DQb (D2!-Lk4C%|K$Rk-#7 es$fVSm/++3zEdJ{&K4,R UEy[W[,q7Wpv 5k-G (5:B_s;Gq,P Nk (eַW'$l‡:G|>F6a\JXk%6 W{X?}}9S/)乳S$ ľ39 4`A-OZ8Ϣ8)K1k # ;:P7NĿ/8 :]>=P54ɻу(-rsl*HlTo;e 3rA˂G[0Âl򼳫M,%F;N0K4xo?-jʮO4r,ӻ480]0DEH;-T$?MD!15-@u`һ{o<P*(/ “1fW0T*/jAaXL9m3Rd BYsLwճGRI2ӟ<]gh3Ր`Yuf)b>2rc/'MRf6%:R83SjP^M +uz> Y7Ga̓?Jַ&.l5Ytrbd{}xˀg+3E6Zb؇U:xY#Lw뫶VqR8SrbU"msl{~hL,-88s6X]Wҷ-s>d*NfLw=?LmK;U).6`u=?C[fWEXxȖD|&2-?||w%X^7XR@hi1{ :Gl}a,|°[qɳC_fs6eS07@4dc$_IMUvng\+Y},dkXrPq4ECzWn(nc5)t2dO,ũ'v[u;EF&QÏ>)*á.qyK|N>E,nNik| i'ExfTtNO !W$Dv~ʓ̴S~5@IK&Gw[td}'-GTlnj=7Vݬ sH$sz 8S;(R>.|]lKt2 Ɨ-GfP7ߟ€g:2_CȠP6DTz}̷H)rYs/U/czkqA )#_RzQъ{A]qfiQ|9٬hnB&S*jAHQY p:XLu4#gq Q[Ƣi_KԀ;S֯XB%1czЍ+140-CZdk!6mb@\\; <[kat.WI9{N˨R lcyAb^&ō+͞T~,fJg*{B${@iPK~I̗Jq5r%a[%rEZՓy.icm`Rg_/NSwHue|3H!Rڜz^gE{ eyI)662$}*Qtucd~ˡ}iJNZgZFA-"p-mQ^xồ[KVZLnQwpLMCW7ЖSW//<2!+zٙ/z89SI&((*b5@9@(L ! ή +Ƚ/+S1 (꽁"*z [9y#iѣ-7/ '.bAsc3u,>>&x-2AbC`5;@3h>#-+?xj B[,Jn/szòˣ{jV6Uz%R10Tbİ+*{!bIJ \;l6:U)3޳lF1'R ]1Qv)ta(14@ùT[e )w"ET&n2B|^’εhR{@6a(LW~遯JAƚeG*JS!Lc [.!LPڢƻɛq EJL.8ңÚ3Qۮ7ڑ-f4laJqK|K'%{J G7t?\kNKQH k1;0Z<-x9L\,[H*,qLd,ĽNe΂P MLDl0z,aC:ݴ AN)  .OI>,ƹjȢūл)@ (sF-B,F9cƜ8ڨlbz{u@92N e5-pc9+t#zP4k2²|~C|n(4|H4LRLLL"#B: !{d)17OjVbI:)a@m/a@ *ѥ]*BM##nU#k's7S*Q3g sʕZIlU]iTRS7fFyHG.])˥'+-+Q] 6=6Bo ";RJڕK, #YM9gl"eDsֳRт J]Xb50X#p5F/9yJNYQ-b{Wl(E#!s?A;9Xv q*{ܝ-ପ8q0T < dTSP= 0tT2QHt'JF e\B- ST<8DA;jI- C}܍) &',cOQ-jKL$ \KݽW@ݙ:2:AKC|#KU :** T̨8 S;^an =IUYv@YK@ 1T\{A]DL!2d s̬sTySr"DRd:%4B,A998>,_{IP)>X<0`xec}ɥGy%W\ 2Q4,P+SdKY$Ze[e\e]e^e_e`fafbf.cf>dfNef^ffngf~hfifjfkf^博nfofpgqgrg.sg>tgNug^vgnwg~x"p՜ՆUv`h(1ծ2ռ=SՖkЇis H< THHbkT%2CTDMGBackground.pngtiffutil v2872016:05:29 11:05:76 DMGBackground.png Pixelmator 3.0 2016-05-29T11:05:76 HLinomntrRGB XYZ  1acspMSFTIEC sRGB-HP cprtP3desclwtptbkptrXYZgXYZ,bXYZ@dmndTpdmddvuedLview$lumimeas $tech0 rTRC< gTRC< bTRC< textCopyright (c) 1998 Hewlett-Packard CompanydescsRGB IEC61966-2.1sRGB IEC61966-2.1XYZ QXYZ XYZ o8XYZ bXYZ $descIEC http://www.iec.chIEC http://www.iec.chdesc.IEC 61966-2.1 Default RGB colour space - sRGB.IEC 61966-2.1 Default RGB colour space - sRGBdesc,Reference Viewing Condition in IEC61966-2.1,Reference Viewing Condition in IEC61966-2.1view_. \XYZ L VPWmeassig CRT curv #(-27;@EJOTY^chmrw| %+28>ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)KmD BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhT:%GRiTe6OQLh@իXXk a_ _ڮZXX,KU xVz[_c*3UՊZ/튴zJrګ]]UvG;Z/;Ӎckw+Ak.V '!| IAn0 ݲ}]_Cx+em{.KF7(@ 2ˆ, 0,[3tηf̭+˳8 pc.϶Os6 Z®;L2o5k $Bop, :3( Ĭ,<-\6JD ے@ T7jAZ/06q%> *2K 7A,Am7[D8}o$۾-!872V} >7J]"SMVl5Z!Cop79y@XƌK9ԸK9pR2fqK0l16&iQ 3L^%VuN{HpFf Q^i (wf_ Jp PћrUX[JH|$ԾkV &w )+(f!VaK9 k-8#=#ycnTЌKKi.ouGEh_t(E6w@[c*:\JC!Z"C*(pZ ɷQ f_K{o("hp9)9&=5l 8 V[AD5L@]ǿc8Y Nք2),/>808&miacO"F=Y)˹ smlȪ*xoAYmo ho$bF6rhV!R)a< S+ؾ>u5(P!a-s(AJ*8IԘOWhUF zS3T=Ң(c\R[l>YЋHWArs|_{3mY8y% v&9mH>k 9JpJsfv!G*֩7n;W!:qs *M;7^xh+[j?{'s^:ݒ2f2QFM(K>B!uWx`Uzit3%bvG(|XkyR%p+[-Dh\3BUpbIyC^Y\&Ptg%K%;7q=VxnOmݗgqϔfсhBÓ=cOcMI|Tp5]fm$2jrH+Nj&K6@}[=?.  еhJxaS_>ɽ|))cZ9iS6I#nuCPZrm]яe:_69{ҟcǶ\Mc[ K6  c+65p"lVh$Qy4VAqZ|haNq<@ijQ lR6ŭy⺳eOa)d>Y6N8fi:0t \7tBƉ޴,gTJ|2%#-=,NY++Jzf,Xqj tl \.5`H= t&|.Z4 H_ƻ2<i&K~%O/u6kѓ/lONs[A_X]>j;؟u)ljefu. Y Ư,̻BYZ+!S};2X,C*w*˟›jTlC)1lSp:L4i6I&:+i*PņE,>BNf% A@Ɩ9~BEePm)=F&/h,SaP$>Hvie8Z$ib:(~g; wahFܖ?iRVV{ĘpDcLG 궁ZXĈH.=>bTM](w \@LֳN HlOE 4n,6L:yK'§qdAe[nظm:͂`dFa"(LDvbIxCM$TǠ{c')FvZj`ehMf:5cT9/0rL}&v=nHw^l Dhx^frG-} vcڪ~-Jp6]8ّR6~f>FKZoN# B !l7j \fF(om,0,>e0w6judG0&:jjC&2 e#r~Ok1<7&kҸ@qd/cpk#ER'Țc_8ȢˌɇHgyȱ!a .pʣ>tj i2S֐KNڹ%+q26(h>ClԠtfEJ0.p>nԤ0Kpnj3"xnNk/ZvL2'$~M=/&(OP+1?!v޹%ȓIb0G&D3n UNlDK82 El˧( J;ik5Hv)+Xl3,nf2 FiC.ܯuhml˸R*X O&y29Wcz\2jJ:F@&k;LI1OfC$CsXNtd)Y[/&h#PXfH-@Izbq˛KC9H3Q Ijuf%O)X`J|xebPj\T`<% +c1H/-o[n>eDpk;DvY\0 LtW3TĘ /U#CAM*8شd\BXUgH=mGHPjˊƆl=E\77=S чp6ԟ>vP @U*dFpo8Q|FS. oG.:ea|,Gl#T񋖪Mj$=,5HspQClӂ*sC.wИ--V׷h!:6fN# śkXp+?&򩴤YG/Ml&A%uK4t|xGHGJx$HDlYL̴vj&*h+Tg8h)x PCRLtm:6AY3b{p&nI#W*TLz4˴V-(vl8Պ L,C>ׄfB6(iqHY+d&q~fDsPYft372KpMD%D=yaE>\K%@N&V"bQ1FhF:QhXGBAP*U3ȩtdAW$jef5%3~KNa{ER?t*%rIu=GJ[cѦ8nWiN$ JoT[1BcaQgby.Zg]d7͝c)j\^w=:J.S?9Kv\Y$;qDH\tw 6ij%M댌2- (ަ3d)ʌñ蛺ͫN -D˂0 *lۊOԻp,b9)--I|-=:ڔ !1Ŷt҉&Z`״K-:IL>ڡ*쭳sN=Ej4 lã±:ϩ=Ґ,L kΊ@2Sۼd-876LkpKV5*T?`:Ia3*!`Rͤb θUIT| pۧA ?41EzAJ5Ea-**;$HKwTӫceıKOU5M *G |IeQl4m֘TODAY@},%9jQj"+Eq*t\/;,q*l,(j a ç coΟ 9vQ4.5@Rt)El4T&ͳ S8Z)!2y,b򖐓%EQ+fn֔oM O4¸T1^@݃9Fft^mea cjXJ$i8,9ԱZo f=)- BIBUPbpDB[!^*(V]꫑<`̓f#Qn>M>գmƅA$4gQf=,{ _kc_PUg$р84JĠK1,!:[-퇞E$bEXٜOXe?:SkV*0G )hZ90rw=IT# {.cI Vt2VU2bi.suZCZ5X%qTӢ\'lUNA묋RHd;RiJw3>$rDr#EtOϧ2̓%^Q޼^W! yY{ߝ=9CT, NMin^[lv.VJڂR|8[6iN~K?uͩ[swEDYqPN^zU<"pVώ3LL'84ˣsf+ۥz>pvM+%%Lї]&9カ8'Bc-{Ͻ@! #B+I`R X s!/DU)4wf]G?yrE`[gʛ.5͔u:m=j4LUlsgCBewED{2=Mi._x3 UxB<of0`*lSճkӫ޵#\'F23#y{!ՕT/D-&kYX{Nӎ*^[)y4a|/?L,Ȗ/3Eأ;C4{,Aj )R#0[0㪷:A,B; 0>jJ'z,֥"{線I!y)4"q!P/n  1:߯K4Q޾ꩮlƓS⦢2z>>{>,@*̴Al 8SBCD2%(t7#Úz:+ ; lA) l K4:~=8;]CJ= / ˰Y?Bk;|?72ƻgo< F8ե)YVR<#2 ь)[fUj괂T"rbi:F*i![PB 1.3XF4sGTDcL2AU=̏a^tDȾ+юPճ=ٞQ&)rG3REh1 7i +@r"B>ѶD33h5B[3< =H"Z@ J]% DįjנRQJd {CidF& 99 Iᕋ2IiLc P?z)Z^ Fa7, :S󏼤̍rs2 *21J9VbiBE5|4l=rkHL0̍8Dӧt4ZpXܛB C<)O:!*dKw;L)- !dZ(H㈫n)+Qv E3C.Bu)싹t4A:R6Yu14DSjsj.x FCǽ'{( zB3K$SD?5ی 6qGz4S*Fp"%`&\#5X(HI@ SYIk^Kƹʓ+7lZr3fžJwDs#gZq$:ځ,qŋQ Z 1".L,ŦaP'Ba5tE %-%1.;) )rnpt!s]pt:u0t6U= ;" jCmaO:;oU<9? K=A3J~z*E@Jd^D|]13 >)cEkЋPٳYHKL36,6Cr[ ZH4 (D!ͥڤ0T[~ -*$R:?q}Jѳ4%Zt/w?\HMc&irҕ,?"c03 ᰬE$kUWAQ-b=+(㿡Ȫͻܺ( 3D%jH9[Yqʎˏ;(E'4A Mz)T^i  q\7~ #T,Tۺ>!A<̌/t4R}hDGu> 'SCݪny#Uz?R+n4#)IAjlY[&TJb3J= .l,Ө?[$Mj՛hH<閥SKuI[ڧ+ y&~1R'^ DӁ3>;A2LG4L|GijZ&21+6Ue+*l c9EP͡5vb"ԙaBT9/D\SըyQ*æR"}ڢ}#K=a)2{%4X^J ##{?t sYՊIEZФ+RD<b{PJ6?dF2쇸BU`\L_*] OÖco] =KAXH:ߋu;j|+LsK̎xN[;-Ytէ'GP 𒭛1VS^"ye`̘y]CBd. ٝ '*'e>J3>~seVFܑxe`fyÂ9#8VNVAE$4JI(+䭅T,1p‚C9U7qrl+%na:1 5Tm:K|ߚÐ6M0;Nܼ}-SKg["n7j+ϙ䣥]")&09m[IAfMxL-~Ɯ0/|㺑Gzja_b83"b3.ϴV*uϣ-euy0BҮ_ S -;Tld*[͍L!i"^Z>:33}T%930)N'&ۤd ]8@2!W8&*8[._)E.!~i<`@ ?p@И|J (,fA A|G B1b3FpɜaD3ilB6@,Ics ;*w,1DZh<:EA rYc'G] cبL<ҋuB0yl>.Q1Aӻ:y['= <h4yKsEmk3Yu3r^]'i'1ĭ>/S 5;; p/J_h>F,,+/"2i F4ɣh9H"2 zN)p;#*‚:A4¬{2*q)#'I(N"'j[= >0 9 E !K 'Qc ?k4) k^; U6Pj-x-*)370DS긋V 2UEIs-/(+T-"-m#3 T8;RA)" =R%p, ,R.K.6RZG|6 AMP5um"nK*l.ܥjݺֻƌ2b%0ʺͯJ$o3lE%Bh3\B BXU౶x$MPn>q[4S{87\TCtp0Mi&[?ΌT4bWa8X X"tYxYTZHX^bxҥۼJo?+[T+C-V^+#L)4)&q:\\u c,V3A,?C;iu6ɶv/8S,mʕ<_!FO`-ӟW>nJ3Kg?pn +*䴊v"Az@zT Lj4ƭb>b_D2"F\t,͸?v(ĔYQ!@VRB)u1$ĝc94cs7 Y{?dx1N9 #:ɭ!4苛m.($ ${J'Wx22HvO1W#PS03a Qo7G(Y9KmXQMBNFsGFM_:Sh wb#b} Gt9ߢCI/ɽ+WKgML5>w Ip+?)lW !iu0utδ(ISh3LLPIQëɨ k[CRCIA}g;YUʓ>.(z;SEAFD,42/ u{`U+|b;ke99G`Iԁ5QmT ae9s n1!_qs-Д8JBT<<[I\',3(p)٥k"-a)*b0ZÙ䉶W E&α z0rNti;2VnT(cK)UcKVqYYjqcd:+ғ+frկ%+ďw+^,]PM* ư;" RvS!e'Q oZk7\Tg{zxBzlߙHсX*DhdETgzv|YMM,ߕ5EtW!4 ^Ҡ$3je6.ܡ ھ%q#8NyE!e a%v {u`f:R6]O# '@3H~ Α^'b@gc@b?Qky|nzgҶudqB4i -<37 ~j_U&#PI/n]kk<Ϊ ĕ*{7 Q;\)}$ƣB`p@kaKN1^[ sw@90>;%y`kq'ub)6||I%;&v nd˯9CdG+ôJ^P$χnBzLԏ+dr$/ZGŦc ˬQ憦*xk#5y ޭV@#TСbچLfim%@fNEFWRBgW"'(ԋumjP2eB#0OꄧZjHd FyJ~)Rfn";Eno M:zl(: JI&)ƺiFVg$7aM@d hqdhyH? *ќ$ Dpzqpȭaosņ>Qw#Y* Q kHR˩pnC"T'"./k HNG lx&kM6Id_1`V~~$&\:LGx4/0(bA蔁^m df80F8D%5,`j:܌z"pR *_ DhB"ffnQqzeƀE 0'zF VĦxm+hd-cF K$<@  ԖGf* U q˺PX2f @80fbmB(}0M>8Q+tjm^BTFFlN谒r(EF"x2tjGpjݢVlC1,M`^VT" k44 n /1b7R9eQ&X bDdsJ,US Ehv38HL S4bȜNJL7Mk־-Ic$7w).S_mBhDwˇ[ćGSq M&bU p/F*rurQ4ZC>/#qxS$P#l\P:Ci>Ia@~oHWF\HW?"ҊD 4gr6 *m"%;>hM$ӦlGdk [5~5֨pT!1$l.࠯]aiLȅtV7 2|gA9 Yg泜& t0Hi)p`/B& MlzG3<PY+T+jawN"ta x٥C oLCN1[w D2v&q#% ̼zQK/ec.7B@u4gNAG:eKibuN4[?6C9 fsD(foN7$ti-c∱ kT Et|q"I+f@^t"Ų[9+QSVd km#%C稜bWugtsZ:S襦3Lglr jZhZMq3pk+%~H2t-B O qm.\67dz I=$$S4J[97j{I+K6,@D+IHo2"“[ZeJJ78Sxi~Y0Vg_5kCQ[vJNѧ"[m *>lub b'YAY/⌍Hd"E- -6@K/OdblKq@\Иqgx>,9apruOΣQ "@\k7^.7oJhWHw?f (sZ~ pvH-I~Bk12F@ߧtŴ:Ã/6O& ([*?Zm@ P>. g-{sEX0bԘj\6K3pszTI!\x:{YdwDF +=IڵKl{|VIl7RȳɅD -/t; &t~SFelLt :m^pKx+=poR 8\4R*f>X`J稉бb7kvIhhßmLcIjhջQJg0ˆ%U} oe=Ξ1b-6 + +;*sUwkf# JJRW OB.i*PDŽBI=䓨DY Ӵ͕)urgZ|t?jp.a%lKE.> 8}gc )3]HMn]$JX>_Zi"\b_ 8ca0Xp#:A q8r Ab7 bʡW)w$!QMA $g̦T.H)l]'FxUX,htX(ȕ9t*LZI kYL'Т3YԪ4:C IqK/`]Vj< m+˾ê€y9}iȧYkYs0E"ϖϡ*u3Cbxzzmfwg& Oq4Z-.+Ҭ͢X4iC!jP0:Ț첩<":. R.DJn0.zڗ"(ZAJ0)Mk62zm6zC :#]Ə;RzƄ3.:1)|VಿmD+&Kԃ/8-rk9+} #e,n//5(bR+{;ĉɳ̌\-҂)pRT+L\H/O'1`8Ҍ3C-*=^Qћ(7 0w`%daV$D;w&KlrB Cj̃2P a_XJ2dOG5*c:]m'D@ /Xi:=(P2#VmơueE?qSW)5r4sۍK{S\$Jƨ&bM(kO`1 ըj*-[0CO`-׽54u'$ӑ/D~a)˄6t^uXNKq]&^|%64_)[q;ZQ'mCΟ7n)WJñܨ#Pu$$k%󖅸_x:%CQYΝWټReM6wJrXKm6h2J)8 [RjA-:"n+Ev8{섅߻u \ GְxWS8}(pf>ZB'` d7qAP0έH ,Oğ%֟r.Huf1|c%2niziFULAxr ,,e!sR<-~] cye_s2JźtGjj'󶯦ʨOm~Tti6JVId|#j/)~]CR-?;DUG[#Ru Z;tc"^+Bu\m59UwP ra~o`ܑf10Rc;IĊL+xpK7$ #㡖ERV+o9?úҡ_e-bPkK0JjK`x~Bĭpj,e `LI1Zvj-#Ѡ3>#n` CgM}H}A[M)+ǩp|Լ/\H:aJ#}CҧڧX!8, *"7x≱?: L(ɋ!SA{¾㵦96y!0 H,{-畓4Z/YJ59-cZ.jq3D1=ø2n'"좛a*Į-i1qGI+;P聮*x"Ú@FO!q0=S+ܮJs&8qj *IKG:R ‘kƧ%zϠDG#@>"D=ln#S |ە8>v-;v5 CHJDlX_?&zȼ$L䰌\:4lb#>[yQp yPߚH2&Ja qy> ˘Ԡ)dj11QD@{yyJaV+* BxBK'HH kj<|!)̱ Zm"2M>҉9CDOҐ$!3RݜQ?,M-+MNUcNg0Q#b:J~uɕXȤđROa-(Lh(ۚg"Jn1bB 8jD(j$\E̾YǃH,]OR!2D .sی<"NKwX  SL1Mچ1D%f4] /yJSDJƞeEDǖaEҪ|{VDRݛ\> [&*"/+?#iW`"azPc$ M>)0Ue`D5 R3cbPCaL*u!ñ2PظΞ@z^Zlc{^x|i*0՛8OM\(8U JɌB/E6SZq=/;=ۥsBr&%l (TU6cyE3GOE1:3M9s-IZ:6aa([823h?OY-2#d V J%*B |*ƲQY>q_4T`^*㱲|RǍY̳0 E e{ذO}F\FlxsEӀ] QܠՖH<:+;R"c/+!|# F2E-\e=^R T#˹U8e r86XVcbYU8?2hfC q;MR^tz/e,koCq19q|8&7هm]s\iN\ٞ +bEcI[; 0S1.UA꤉eá:B/y.`9/F݀e.Ũt}C&$v=ɪ;}&qh Nè8L'Am^ R:}FTm2-Fr9U'3^cJ+('\E/94%QC+>Et˖&dj;ٍVk3mo*+R 2ƫ͢ 0ҢJA(8#l@ LsV6i[쒾*7ōk^A.:dŴk!V'TL?R8Z/0D!Җ)22*#87mHT˂Mt 񋀛YWrgFCv?AtDO Bͳ6\Ŭ7AK+P'8 :Wj1iC-SGEZ}4ʳJ9t5;fZĵq Fo93N6c.;Λ8g) #ǘJreV4#OZ]Bg2ᄒ #e;q-sȉ9QBK wm3}5Q^0 ST72ͳ+&*˫TL*%V:Ō)4&V68W*1.2pn:;e<; jҟ\uu4ٗDǡKEo#j]?Ŝp|ޒs%IhLritIW5;.}\L˃TKk[*c{x\u^-U L!Cuhs& k\fTDW9ttlD},&"@x93dC'QϹ2a _U)LfCPQ;8Wr4bse/%Uv'ѥӈ̍H{KYz!MRm*V`udO>(d(4%Gf-F(+ZŪDJ?Tbrj)Sk+;,ʡ-fpKr01bh݁MHO PfS5 kݳeiqyZj1\z7D}:}bd ʪq8mՄ6ҵWeg6)yjtBXu2t϶sCYqZ%ԙ׉B0]'$\)4&xׄ^ItĬGT[mZdfi좵2dCP å$6--L3F2ga dkJhXTLLV.#*N5l&G4y eƊzńD+mlul[{Pb>:B(N7O/ܝ0YaVr('Xc 8žf,E޳k{oRX.@Dp.C M“f6؊Gkp)p2YQCPFjI6cno.m(kL^} OI yGV1FB0$gHhRErjdN iz..oIEPqc[,RMvfʈFMJ@%wd;ޣ$7Dg`M'%XV(YI^b c84 b4 k-8 c* ^nRVj@" ̤30nLv6+حs4jBQXmdZkʖf2nvͦ9rj)tQ\}o,4}+V1 &w .S1쨻':S -hKgDçXRBgz.Jj/0IIbߩ(oxر-!L-ΪӤhvʊ9F7+&lwCG#4þ${o I>Қe&@\_d2W 9&|sҶE J['}'@!et=Aav&ǜ7jPɥWU|FG:-h؟Hw3twyb@E V`!+nEPVƪTe2nTs w+FojVF_mH,Qw$'0*8) nM >9LЏR~%WRB29-U8r)0b}#Շdb,Q %P56>=#(){I6/1lJ'uR5him݌G"L 1!.mȷ΍A^h3F^ `MEmjoSyeYe(jH^A*cȥtc(Bvpɹ.ɑjTXH+UuEwp@4cS%5ja4;ol4u hԫr]C {0]Es𶍔dĊoGP.w¸x~*tPn,+PZUQ SpB( r*&O'BzY㢓,yo*>jJ l yS,Ǩ7e&t{- ӒU4D~x>sU?2nsCJsP]Oo4wzLͦxXUY^]wϬ,ٷ򗮏HεݲtqgRD/jYJғu,,346ѣED 1C 0;af~Ij鱪CJ8UlWH@)V*[& "%Rfl+F[`&gϾe_ߵ.;iIx|i<]%m}T0r&p!)D%ZOQk|),f"rjzMJ ʫt[7INemvo 3vl ORxx`MP*TU 5nCy{^wjΐ&T(ԧHj؁&@%Ci7(WYe}HׅNUQ+N0TlrLD5'\Im+l]3IpmL4ջcwSoBMA|F:/d7-O\f=j(N.MTiNmE^Wf` zj$ s^\Xd&CIo-׏Am#rgHJ2Xo~ƺ9R||7`JEmi唳w3؆{glu0gqu݌EJ}\ԶR6* 8#y.񜮆\C5`Ɛ7eUgmbW_!xӫ|)0wń\+;Yb>tLPxֳ8&u JDl˽9 S[s][z)o}Zzzonȁl}ˀغ ASàplBన@ `,:H4J9AcHt.C&`)$J:2H255)\eN@XĞK52)}r#FQPʜvIUWLY+0GHŢTF`F5-F)Za KEթ,erɽ?b1~e4f% wcns <-t_-C|W.|޽GmDg}3ݮ>m MpGw>>+!)*jzJ;.4I.r5++V&:m( LD( h8Μ("೪HB ~':T5ѫ>hz!IyˋҤH2.o3*7R$&KArH{B|O+OGn -R]EC*YJT-Ӣh3+lX;ͬ$UI=FjA6 >3t?ǔb6Mj MiBҫTHO|65^# '.|wFO`Փo:h!Tů48hⵧk&#TsJ:Ȅhڦ)AΫЄɜUD4+Fv߰&[ʦ*V.]Fƹt |ʄ+|mFQCZPL̏i++e%k,/1LRj }=kؕ@aĺm:sׂA6+Tˎ>uW=ؒf@rړ8QP5rE_ >c-6F6ɚwRm`??4sA2@nR#&W\*<$wEa^n4HM2ʛ!Ӛġk6E%w#YU%ݜL]*ONe0TέpW ==64;\#lbZ1c "I*0Qk9 r*MִHj/0yIEgF.2/@HY#VsεK%rW[in@6a9 q(H&eI,FhVg7%`<t ’_MO)ǕD W,<r|ȱę554g#mSڷÜߔoy\S f=qѤDs"m?Tλ C.[#YK]D5[._BĚ۝C"6b3X43Re\[ *N W߬Zk4뚪,<Ε|$<)|6Ky^,cؓ8^ϹRC#ϗ;fF/7bߒ֐G*"XPsIs#ډR=UR?٬ ߓ():Ì\g!d d`gM5Q$4?dؠ% b @Jj'7Ehq߻&Z!z,CC>MPdFb3Ur"kR*VuڣVӜ5dȥ Q:hA#NH':YGK`vPь ML+i%vL"XMn{+`mҐ~(s$s/K vV"*YF|C RL[r\2!z,k@ QbX{s$[ZzYl"+ 'Ht0? $B%UKBdzfS@,G ׄƱ(aiJr+T:B>Me S{j%"jαKU'pƂagE'a(0O%{QMGo5YLQnKOUҝJ>b!5H4N'TdcT9z& ;O .+>Xj )96M$B U rLC]se#y]0ͦ2g 2e3K%.qLwyҘ0gIc'V7Tp=kQDS*y&vf}u4HFI(nj{/*[RP;d#ZcF U* 6JxDɜ>83N_ѹXdžBP\3۞0}bSoXe4&4LRnX1f hIa^@Tُ^eZJ3ɼT7@-pi)<='.C9?I'zzIxޏ\zڒysvvXމ =/&5=kwb<ky))ܑK 7ӚqQ[°ǴQٓX%z9끲 !k4S0!C(qf 97,{˘n{D܋r)pCA.{@K)J82B1$ɞ rKW/+ /@̦YFβP:? 1rӔG-[+8k.#\0C 7" y.x!{L:rBٜ{܉«x L1 묂iFCyDhC 7Ю)r1T3CjB'5#0` jd`)%õbo螒Ęܐ Q!黟 qJ)Á$7y;)q;-3qC#`ܹ*,yB;:4Q S3T(ƽꕘ<ó7)l?ĵTWƛ?ɨzT/{5 ,,v#[S5'<(.E m3g!z/{ˈ r!'d8rBd"ͲG +x!1;j0ː,+ X*%)sS@3 B5 [k02۳JC9$r2*cCCǻ񀨬;lj,JoQ=d({zXK <9d̚%+H7>2C?"aq% ˌ 53Hr.ߌ a`ʲ]S$zw*II(կLE} |c5z|L/8\C1)HN+bSz&@$*Zb2FCsIN"Z׵R`%=(a K;L)ql\LlKI(G鷢Χqc]=,40<ۑkH5خ,'C84Iˉ}78 k"(q# \9 -#}j1J5 KkC`Q 4I +L R$7J߱\! ғVSYR 0}!LC 3 $B $C Ts\ 0 SU)/pDw~Ot9, LZBKB@.cӏO3T9!˜* @ݗ[ uoӷY8I9J(qE9ȱMhn5J 6rU 5Tc=;8Bw(1 Y&J`>B8l^+ 34,/эQ%WA+&ֈENU#3\90Z BԽ;eMU7 ;Z"Xgde:GɵSzuz`;aԘ.QCq!+r##0AM6Li]!;ɬd 4=)ʍG_K`4e,Р߄NUSt.(iui!Y/B)LCFC+"\\ݗz]P̲fOHd0f՗c =fŢ|Q}ۭ/n~+̄B74I&V޲*2+m;iKcx_2͸*]r4s.nU 7O`*1& 9 #*U2 cH 9<~JZ QUb9 9@;"glt"D4 cR"R~.|þ- +r52_AmT.YRX^b Õ$k{͢Fĥ0} cN#5-$?R؀f@>lR2δ$àΙhKƸ]kSxU?A,%d_RcP&VkOnɎr;4CjLyN8LZK+5ġm8\*{;mCd~r9&oj80իy:Zwrziylq rC^[Ecn"U,DE4_nmeY奜ݎv@ޏ.~].h5svfoR[^ k,Z*$0>[=r[߳O.6_Hy2O.i1gզY܍#TLw G@NݲRpd& q'x'g?] у%ffk1[䧲hx1p5s~/;o*ʙ=rtdE'M&+/e(##ݸ1}eXɕEmĺkʕ]C YQYɪƸ`(#@ bLR0 @($_4J yd _},GxMGhJD #:d'8u&%ԫTzSC?eZKqvj`]V"{\7qi1&*o1 d~תVp[2suF?uOg+: ̻\4@/m pCT(0j#pK=pt 2i:{*nkp,d>n?#Epz-M*HZ)I.p)Ҙ1;@B hQ2nܔ7I0-|ʯ>/ : 5+얁.Plq!Cs&Mԟ&LS#t+ GU?n&?3L-L[HksLK#;7ȓFk$D(2Q4~hK5v>/s/78]Amڊ䔷DQ[0PW;0rI36;jS#~Wn#C$,uCU[9lkJQ)Qxr/Bv G*7rV*&T3Xޔ6oƖL[U)lPie/"vnv>0Y,dM6EoWg]Ѳ!CןՑe sJDĸ9D'O,V}/$ ֑Y#2> Tht cU900&F˟ 1&e]H_0e]6IK?pݔ[A -Hi?DRIr=3M@蕓HoY#Bǐn|4B,.H1V(G2Y_ҸU* K' "xRQRDz-WR:,r_7 O9m7Ӎm2S!љdٝO==wGq:KB@뙝δS2r2xHcx*/gq (.Ѓn)JYbE5 Pފ#W &+&IJ㟺4:y5\<to+[37+~FEmѩ4|Ѝ8f5USBaӝ NZeGLkrЌl]<h~D*2fH.:T2f 4g2)"#8@{M--`5ŋ3aSqIKf]q83:Nȫ^LJ.D,Ny0GV2ʻYWUJSԤ6qs \hiw1W~򚅝yUFe " )'P#ӹwP"7*˥΋ YG;͈2Uξ6 )4S1㟹hx ja>EKG 'f]I33&;?kͬ/3 ʣjhy{WctoΣl[Wn%&QSт?l?M3T}\^Q8B5LtT5ti =@w,2"1Se~5\gg!L#( nK&bv,\I7cigahI"x()bVx']Hba-<`bgA sʠ) Щ+ KؕQk*6˛\´ 0-v{hQ|VU.㝪XhH{r3J.7kC%A& W*xb>')*JI*k= 7]#+ExGX.c& *vbyRJ;Ʒ<+%j$W2O%QTNByXe9Y ȟs~;݇k/v4B8dc><Չeg}6Ri7xtOѴy3f'Ke I9Dj^Ω aͻvSqŻNmlF$&g?#t_&f~WܦTMb&%ノQddI e-4[F$0.cGވ|im pWI',e.`~GI ;Nz1n(\nЏCWnrL@4\̨"*ΌgRXEP˥N+0oζTo´(TʟFafzlS@HΆ܆/$(̲KPiU JR*ګB+r-eW({ 6)F0}Єcƅ4I) ԇg6&^' (Ba0x)B"X^5@ ^/ E#Pj[/B!1锾Kɢp%9V/ B_X|CBģJE%?kOa<rOrM}ȥ=of(ZӦ kÖ"14Ҷ%+Z,*R05j좵 v2D#h,f´&ï8:JJ)K'Ѭ.R Zvy3L-2K0Λ!IcV0D1ȓ;"O IA""-C`Žpʉ5@Cέڭ?qT1Ԛ彮a :2["V >r2+n-4@0 BRr,&=$8ݻ |OI x7ڙ()J9e*/OU cU,7SIJmٶ0m? &Ŕ6e&,Kw%4N=/ KArfSKVD>+auJwS"HBJkFҖ:,!.45:\Jz7KѬ2[HI5é*wqÀ1GaҙBT̀C96$9Òp.g5%Ek1K$&kԲa3 p&R _]A>9Q<)3H@!jUtEt% SL=SF zU%)zFH'ui}U3򩘪(d8 &SӺZIRGo*x~M {11mκsOOChQ%ezY5uPs!PN"#a:$Ur؃ZBB{".x],6\S']A]OWR($r o%ܘ^|$5Tz<`|&(V[K] 3az<} AlMY"/ rm1{^p󦮋Rqzm{fH"{8âgвƎNόZNƙڵ*DcR6"s1W;=с'!sCϸO ܻiiQ|v'!bCfz)eN?HGhtXdc66]gdC0zQEvI%Ki {Eј7cDُq4rHPule:FAivR[`\b;CH%(Sl_svg'jjGrAYn[]\C0NoU6vNY#U6Y\/'.)'/tƭ7W"d%GII{PHfE#MɘH%/iuSE5]j6#3K6rWG\%F2 їTO1eq; ps&Nw #-T'VE7"2*A1]`q!ߨ9FJNyu9bO.!؝m,&їiÑ̽$v3Qi bMp*)y\Mk'7cp&OVr-0ͳTA(]#ՕM+xtY+nƧVo܉RJ -r*rXIWzEۧgFmt<"P1pgr$u>MaHpo7{#U1 3p 5I0{aqVR6Uʹ JlpBu=@IJyŝO ^*SIq߿BkUĭ7aȹu`ncnpUrә@~-~awa%Yu[6j2ɠ+OwmÚp6`{a:W6G7?Z*-Q)b7uxVg*\Wr|0&<_M߾K g*!BH[TRSksj-5|*+LܜN-Dd2Dwm*0(륲wEtoG(#Rgz[Ȟ_D+c(7i`D0t#&CXRvb̰MŢZ`mdW&RZ$\ܪ쪅toFul"Dim(~(.K r-ZY,>T*FJMMntѦ7%>c'CJM_kemP09M M4Mkx* =&`HD$0$DΤDnм$YԅZFnQ2ރ.z)p h+PSj4nI_ Fe*gALA*fܸ̄i g˞cN=orF,Ce>|&Nlz ǬjJϨhON/ .GC Y (BH' ,JmfaLTqȎH dWL{-PPYK|8ŢXO{m~hFh \0ib`ʍXlF7#yK_IQ#H#Dk&B^.4c M/)obͪXHx0lf`1c\;Q$D&ʡ6%lGpXhQȸYv!5kΆĴ@3>Ԣn MJ j랺ߪ<'Ʋck6 TaI|jȊFL%8QliKqΘg-Bɺl DLrs"Kmj??oXXTF/1I &L)2DO!2*und!?h$6B˜'ʘ`Ac3B0҄6l:s+3 Ol"n警dq5G{S&_D:-&}Om0$2,6j Zpzǩ4jޝHp$OvCV%#glgjdd<)(B g8!KXH 40{Hktθsnۈ4"mQ|S# db.:K|ZBeP2&y h4D$z.L*%10¦*= u0sS$ nFMYr!ImB騝Vd[-Xˈw#2RmzM mN4Їo0 $O(id+lTq̊#f>\]9]%c2b BKo.{ϬDd556, vg][(q8$m<#D3Ƹ"R΢)1ţkΏ0kVZ.8lp/"aDnb[:{2JOBԖTPg$0h.do/s!ҚdBsuw>udRQXŎ%8 rDSs k1,Lu1pyOiui.2iı^T8M (=k)Z)cfNKvhjuvdJ[)CM AJ4cFIg+hM@OwM!WNfh䆌D!kDSl݈XYoJ^TrG U6Uic@De DJJ>&IHo539C0c2KY:N4/o1SxF-ަL N,+{m[R7.*V64 $X;f67L5: j'nA= nm04r| -?SN|O&sfXNkҲɖQ& …kW'&dr,2q:/DNW=Khm іV|RN:$Hq;6.]F#W d5A)|F$ `:IJ;h3gƟvr}e7rQWHwT ^ؿiت9u(%5Rry*sl0&lRHإFUkB|ŷA2qWHѢLpx$?vDgw`x6Wb]tp8M=rZ;)Ư.^̢>-LR\xO*~C.+op@`lu4rT&MȨ9ȁZə=owO0u%;gԄzoU-' sO$tK2DAGU[*_.JAvPvr>@)[3hX +KkEѸۧ[+Q{!6zV܂RWh6BN ƾ~p#K== |rpnCŹuGT3`zx]^*A[ tC*G7;Q=  ?  N"j?4|DbИ4FO%BO>%E@ 8^SMbLKO*lBiOJ*T)7&QZQFeh *q]GInLk#E Pr'*ݟ4+L GjMOt\(1XyQ!Dz!&MA84L'RȩzM;:]_èX ?Mȩdߵ [H:Ϻ2z>:-h'P ԙlBꚃ. +2 B|˼)؜"Fcp/S/N[<"L#40Ϛև!kDi't*'jR)R:l'/{3@23d9;(r2e4/턭0h;oStmk6. eGh0J4/ D+lĬP.hV. #䞶;I|3 וFuy0T l=ԭ8TѣL#V6ɸ%"mmKo.򶕬 ܹ\:MMuYRn𯬞 .U2 uĵ%)ȫl/sZJZ 4J׋JaEVFk@_k0ȳ56 –ڛUtvHk%IVX蝏#Pn}]mƢk--:2<%6*Meѵ$}.,6Pl͝!iI 55W~5u;tO?\Ɨ r!\]0c \p arUZuUf?T<-UA̭99q<<Xf!Y!"s?}8&v}2V~$n=2($(@K>G_FfNW_5MYo^!l-`QY$0<:OHūYRqn,IbY}p({;BW|RE/-q& BS|BIc'GU8\tRK6=2DAN#8)uaU7)'Kd+ GE"R`_ta0s~S3)-Ox Ap9İ|&J+)B k ;hM$ N^+5E(񲖮}F-H"Lƞ Ik/"5Nn9Ke>aTPocpI99G'cN͕b}QB!EKY{h}:BZLA-M;5N0yι<D=idFs#* \G C#.,]? ˊ}~fXrOn9gF( hNPn j*C$Bc-MzimL)NH e+7(9 $+9F"m^Gyw!f6*d jZ˲t|2%y:\ 6!AfsZɗD2ۭGa!cbDf:ν5H\I; TtJѤ5<ڻ(ԊثIo[Vg&l͝䳇#`Ƭtu̩)TEyiwAT*zB!z-_zlF@>3-d qdm4Ѵ$C^KBf_(_R)WVGUoh*>YCNN vkmߎw^A :~ʕ\Cnh;n7eLrvQԢ=X"gȣn-yv:V` LܼZը:eIf:Lhfi6%,-Hve?͆}1 bC*m/xq4@.#ȵ*!R%+;ϮAĪ% uyB73ࡑ{:+,6Ba8ӭS)@;*fqA{:d%O[>9CQUr3Ny)aҹ;N!3 Q?3d&4@1 2z0y -<YX<puBAyy8)4 C3`ߣ+L;+x?3+!$=,R̍p)987k4֙:B "uѩ1я K(+Y#k."5 2p$JB`j~7w&qtJňI1Ս(ӣG@R=8ű\sJR"|K rxʵvH  "1Z [QG4ً:T$K뾽8}YU0/b4x"#-5T9 |-( \h"AbiNʺj? ;Zu>R޹.nTҞ3dq;BE zz0&V1Ζpz5</QH秳ũl޿ I/ɰPP$kVbZ>Qcit/QI A ΍b Gӕ1)KBz>jQW *>{4*Mz=.+r/;SaV<=m.;0 Tݠk'KɊVꂒMD״wtY~!A1]5J%/J>QsijP&\ϸ"eEÑBYF>Tn ݪ(JFN-IN'֓Y,:r)D3J-LY 6_qsZ-<}ڴQJOLINÿAѤ:]"qK4#U'dkC:A\><2LUQNݓYQ֔ɋlDHս!Q$t}5c򞸥!|bCC?KD;MLG&d7:<"ÄP7ө 4fd[9d Y{iȴLP8`>0+m`U%$sYQD#@\vi Uk~ɽn!qq<k;\L}S 0!+ïDA$fnjݲ*W n ̕Z"3sb~N+?q6TCUɸ RP/ N{C5W&tLn֬s[;lTH6n: 5ʟ1e|f kId! ^: Crll$ $erĺMNMcjv]ԙhڃ#eg&] UPLTsn[5R `UlO(–735!1Bޏ{ecmR"$[/=QM$:MO蒯~=m^ϮS]vN;:s o4;uL QGP4ˎ?fwv}[RYKc,FgNJ%5b"Dq-OCzR2GUT7Jܸi0Vih[6@έA.yiQ.c!5eá)1T(#$#CD r{AdMsq6Ҧ l@3n*TKR)ѩJbI):pWbK :U7K]O̚&8>Ph2=mYq7OWi~鮖|bfnmR/7jK:igN)@.K= R=mK:8lL""KzΓPbﺢاJ;)JjB36>@Q:@03 DxK* ChJr' #Iz,J$hA 2Ķ901R6l8!,rR .Ks%2FF-MLJ42~H2Bҝ-$KY4~Tn<()%;Dk$4G=iS2.=ps 2aWQ5 UKS7Spdy7R#RʹԔM Pu@OJUk3%7Si=S7^0ȵ3w)EBe4JqyT7>h` PZJbSfW =>+x0a0Jis6lR*F:)4(,w,p. `8OA0_VH8tc=Ewsk%˓+& ZItܛ#Q%bO9,po%h0N4m1<^:% Z۰1V AmjX~lhŨOV3'+3D$RbN*z_At*UA$%Vq;KjW0y'M(@3f,'7~.F_A\oDkվ( VId;$Daf 5YLEX-T\1le~D^j=w06VlP#(eeO(vS>Ue~zKk>6ˤbYxm.24<}+jmm/hҦ)Jzա5=Όo fU,"O4q9 ձJh;%i͢Bn 3Qj-gtp/ƸsO+Af" \ ÿ`v8@glf#qMQ>g3[1 V!bBzJ ?dvG<մPj0"5H!u勡X#gyԓ>NXn0JXt  PC<(GQD4 d}E] EƑ[0a+_z+%h=l196ZvM:(>uumqZLkyggo(H)< Z83A~rH4I3^*a(T_hHO2TSh+]ц TXT\jYF[7j"t>UvF0\sȀtm+z;ZP7Zy7V0Q53rFԔTk*!Ixܻ51a a2j̈OMë, &̇6 -(,jKqAIr4Ę9 r]9UPzdQzŸ2lc<=͹+>q.TY&ak?wY7 tph͂ȉCo$wmpQu ksfӳr2o ت7D G/г* [k {UoGJRٴ!wGA?m]\`VgU]K H5򆺝U#O{1Vza|;ÆԴωW S8II'iR{>$M\pӷ+(˩эjOڜ*iE ϼUt5>$pDK_`Y>&6犬O:Uj|tĦHAcެ(O⬦˲8+K8DҌ Rdo/ʒLb ʔ.~.bj(렭ϔxmH4UJ4<>G&bmG,L xv|f)7n[.TLj2Pk| iǮU 5B˲0(^RfJPpȪ L)AdY7p@*# ~NnHĈpQUk2%|p*FH'2Oء1fD P&ނh xNUmmHeF# . w0t J DOiJH&SG0} ? 0V@ ą*K_ Hˢ8rB^~'yFDP(ЮFB?%?QXFMbMbLb(#1a.Ш'1$WC*Ds/ժTL|0b͖ajO0zT>ֱO—np*C Xvc2QdlL\.쫐I^hM4D΃'(ǮrDKgfbx1v56J冨Fб$N[,j(aFO lH T%w6]R 5䴄 r$oL')E dJ?u^03-'LТx'&δ0ZF:VQ\H 1i$JV)3NFD `Z{M(O4oCb2iF XJW7Jim (]MH,>#Nm %zTLGutH+@fMNK FSTYCxnuNre ֩MGA1 thDw(h2Gd5O 'vdB Ilm148-j!'QƓ+PCO9 PB#E.l1r-0rXSJxJFܓJ2b-J\q ܇:[E0LBME9DXerŞ)^'C.kc`@\DS:qELu-+H',?NE8+< Ц\#/(9}Cj#bƈ `rQԤ̃ :,5',qfp*Cl"q(Ǒ8r8r^Q+@P4 GB%&4.Ϯ LE 9@ZejUO?ZkΰOn fj5gk9@KB`h8mHBU/m&iIQ'9Ffto;lr.vmRm,JH'"/zR{./ ϵuLD:E kYy+D̏BnlRH mvHJҒ]dt)ԮbQ n' jV[Ӛ(BUBtHh/ ,I&xS1JHd\Iя{0r6H{95^b+_mLIsMfExBpSK:R3*4Dd*&3?xZ'8ɭN#]KihRiqq?咱3?V^r3)`Lk87Q L&0 pcOc"imJVxiv5WdfWRy%;Kg oǹ '?7QLq"D'^e=l̓gqu+zyV\hJnnE ('lh`)'71qsua:EEE:@SLՎ/Yr=2G0@wcF?/R/ѭ nڕ7kD"Mú-1tVwdHT (35lOrdzK Y4\f5S1Sӆ;wmg)؂ٻ5Br)FAb_t&Dh9C8, ?ASLp44p,=6mr 0rsS_-jW5kƁ*b;e/؝-JHJ˽(JL;oC#̺ST@Q*7Kت$4 cTfKmzb$)'dŸ3:Ms^V7947\T;:hʊo>R`} Ù2Ʊml B9sP8Nʬꎏl*8.tYtO]d-SY:بSdvK&2cHwό"[?GUHMk0!0VpQ>6OUP}"b-UWS{Cw/,ފ8 XA ƕ3&`Nv6D"{iNmU`ʎX2̳BYn< ^2p}Gh ;NFH7jh)bbQS3!@X0K1M\$\C}(R/ .$$MÉMIZ̥[tb40!ӄHRs`K:UrJ~>4얯Q:NgAB#g]S"GQڎ%"X9\`J6j_кn{Ŕ"ܤaGq-6j #T uE;e)M]m*\k:yRj >{ִ61=a[Cv;)s:,ݿP7G/a՜>sT9#dQĉe|r#~gM][ jR$:uxvPQJ J$3i"-R4Hw^%(,^|++Lr39:(,w])s\˛わ䬬xߞgx5|5Gk3{uɸ"fn"bz^%4o](ìXb-mLpYРۓytv3 O4vэ:CD'.('U'D֟xg)9sG>T~BȴxpIJJ .JM(S3Sw 793U(j)݈)AM8UJ#}+;S0?w{m@{]m7`ǏSwlxc~񽏱/$΢;KYLﻉ8q%ts0 @7d@R{p^d:("p-uVfCzSGq깙"'ײE #ykbt⦩X$O.>B݄|VYQcYߴqa=DSքG|#n-3Wi Rf;MQpehkHQTڮ$y5_:v y4E7d6<Ѻg>afwh [@ ٙEz>=ax|a gW!7 ܁2,yɒD=/zI(*hʴAC [j9+:25J;bA <)$㖘j: &5wK+"j,ڮ7`;R5U!)BǷ:P)J-["/28 B$Qy҄*ܩJ IU 8b b!f+'Kl?qQ[:9>ڗFv1,kl-h $D$JWRi? m3&>l)F y;-Jʈh3|3i rѦyҪ@**9c #\!Jİ@͖S#8䚷U{/+4b#'wҁCɫ4D 7}|}|ʫ}@C;#E)W(R|v MHlJ̭}ˍ}80˧t/DRsF  L@`lHн+/J8lr)CB"XbuH5Jl2"=2MB`9ˤ$û*MHzME2C)n@35 aI"6A)  +Is];Lr)"yF E)$k+y1:DD"(ܖD]*B`!S{/; K%? LAkI ,{/)<##cQ/{B2[:i/ڢ " *[3\ p\AϠqqfél31Ǔ=r :BĬ&wAtɋ\dQl4SM1 دT.5p3@<$'.: %)d3PЋ;zf2y)5Pe7r}N ɷ k & )>1ɯW+"\k( As$;#- Yh5 Dp+-NJ5E UӭiR tߐIi>q6ҹDZ5tF9zF,B,U~G*;:ɌdOֵ?& 5q[Vz. qƛ4l"\Lz4N++,G1BHjíc9mlDG$2IZL WGSnVα9Y(vavR,y U"Y 7>w]g'= #*籽&sS"ݲنО 8O8[ U:Зm/cᓜBk`*ݠjБ"YiPϷ.:dY#ba]ڋ>ƉaC ҈ O-< )OQU&ήbޭ/LW!-<QXNJmk@ >}^+2\d7 ?WA _2^w)p jia2^f'fs}Hj0aWU3aij}=%\L(7HŻvB)ɛxn1g32c^\KgN o uC6PYba R\ >GU1RA01d-N|a:N>Ȁ?07}>/7twW.La`<'KfP|e/LfIly9̠`  AxX$@pH SX"OAazn{v7?aĚU3aa&Wcu2IW: Z֫WCس;)l]Jt;3|B2ɷ@`L" CApp  !pO:j!IKCDz =P+ljΒ(p< IAj D] ODF'p\fOΕ2||Hhdo4#F,pQ];*C.l JT<6KoCP v 2{=4Q2{+570,bo5αD4R| @Tl4!z@O].Oխ-GKlaZAKJ[@TnrcB.kr30D )?qGœp 9%2-X4 kxI5\Y s~uU0S>q%D! dI}ӡ[N7 e.䚮@*)zǻž|t'Ib]޴ h8*$Cy1:PuD[ЏnNGDT^$B?Tx~"䑒D'%̚}^?b'dĩ#f(UrQe }qi$}B18 `D2w@*j@berT{D2L*!r墽BZe@Trs/B,)2͔f1M*ݧ[,Yl# ^fuQ~PSYk/*s)bwރCd4TDҚVcE)M1cjgI 5=0z;:BCxc ы` nRTFAGy8;.|H `' @B> a>c,$<8%zw-bDtwty\,*@Q8XD@tS P0}ERccrA$. P`0:!Hd@4dP 4g!81RLi7NY2ˆ?ZKVHkfV˥][%RW֯|r!R\WʮϿaTnHEu)*w̬HX|,J`cd(tB!DVH\Zb9 zAuh*dJ'l[$΃zgv O[Fkr|c46b mT"LHZz¯Tf &biF'\ |RY^D9EHLJpM,B r9E8&b l*).Elbj{G l 'HQ0~s|fpogK HlpXgc6ÍD/9 P #ggnU%Bdj 챆:Ӱءm= pzmXk:b,̒xu60SEOʰNHzKca,|kDGy帠0v<ŶTQGsrB4BpHZDžD'vqV e@%4K^0m6j6LK&|a!: @8<`.` G+Jb0""b.A"a@ @@>,@X 7sWA)t!SBn%@ a؊hRM{!q=5r[(*0B, 0J@$3a4nTd^&ף'!AJ %sDl` 8DD90)MlDDAb H\PHd `/akP! 9@@8@< *`)@:E5gD $cZp+p|M% zAq KkK I  &t\dw`L'l.h&xpc.ZS F3 nfBs{Շ(  8 Q] l?gxzuq? duF+*UWֳUJ 0^WڬrE< +^lYUPe!c4#Z$t<*cpG0T_LFr9.Dz 1VlyPdIeh0H>X&,b_ƪ{0GUx Qфgy/j%VxS$T{ܳ̕6Ȝ& WuBJ}+% UPQ;%Smf.YHBOOGǼ& mjn&W+J9e g bZ,HgrtpuόXhƮGeE%i,* |Gg[W0rG:Hґz-U (i<1iFJ&uRWK=g/kmJ?!6^Φ~W,WK,S0Bk,KLWMT2ik尤C'Gn6bbUwJ`2B'2aSN Z` ":0@ /%/ED6cJ822L&B!Hj\  =Aa<bu6zdL7BN ?DhC(Br`JhHTHjx<+ `bA.atBzꢮT@bV A4b:Ax&.p ! aM#Y€&/=&Ao'I#`B\r MnL!Pe˚aA=՝`| p a! mlI(@ EI8rust{ ,24gr_sNjEUXo|'56QS^$lKqjhhFJ"MX ӨjX;H B NN&B_Z%64}` 'HJIⳋUf+֮q{uVIXTAV ~|f^t> E&kf[gw@+؟;6^vէcRBvnFXfVM-\qowk&_0xlՐpep~W1y(JuJp̆pl,w'Ovx*}E|4EXQ8Yk2JP2Ss5^q'xOHPø{[r% WccUOv0и`"7+!9ϐ5koǙI'C+v#;A/^M_˾kij֕ī(XrDD5.R- ^kFkxmtA(VX*:Z \6*n$#nA_,7 N0¥lu,(6JcJ $) q0meEFփkv,|d~t6z2N= &eOC%-s ї-yj|+j=<a3<tn`!(!!^Qxyc,pVf`.Aaށ5nV*<@>Ci0gA$mȘ"G<Ԑ@p B!ꗡjW^[/&!H< `&z( A!!b$> :(f'3E (ެOOP!\3sZV|.aA"z@?p ,`N.4(TbV A $" ~:n;9'Y:\׻@XT& C@\ /(]i`|iFGjtD)Uj%.9F,uŢ@:t+ dXjfRlZ$rKc,*Oٱ}sx>똴#5,%ηCSiY .9]oYbdƷf AjVu.Չa1͟Bk0 U#?gѨw{Fly}"W`{ۈnUl>?y?#is3M"( r1-ԥ͊.F·kʠ**LzE,賯.#6Я #/P G=@ļtI*9ҡ.\, *+#4G/,BoV(-ʽo+S  Ks!ҳ5K5@뎺O+^1#{/kt=O5LC0;s;d>T# D@T*۔N0V6R+86 dͫی 01%- FQ#]T*<DKCF)K-e˔ܸ0-/f²μ؂ ;E27Ll*U4ӗ#C Uk=ojPOnCF[5* #KnS:w>O5fj,Q6Q<<;ʞu;咓%wzRvc] a,Sl+%4l²ŊDMiLU%X\nK]ٔ|ȼK!ȕtkn-z-yM :s6}rԱU:3:}gqquz]jHb a1v~Jx*PTM[`u!5@`^ HcД !7@cvR~0@VV=Gpl C%lH00( P r1 FRC&rۑXӞuVL3^U5P'z']qjM%zf#9w Q1SLmJv;2/i)F'B#M G0C\gH*h~b G VNsC&؈uGpCت0 x (10/ʰ%Ƞ"'j8f@[yj,1.t P/ `x8[`Ʃa-{2}(rX*$;'z[h ;px  r80mҫh8-Z, ZѢ)9o6JcTҞ%ѳ i/`/S㍪O5̒'99)ϔĕ-ڔQCd|:4qDQ4Iv07d{o+5$BOZ ? (ɍ`9iP"*ʕ6A /S{k@!@ Z 3#*$Iđs)t[G2m,3 |8Z2)deaJɔSLA\*ߩ$ySo-RơW]83HE׏}OTD4Y [sH^317G lD)͎ں 2[+I )kP?cYIͮђ/hh/Ĵ4*9NѸ ) SeRb AJ/%|^G]{UfǼ.yHI2 dVd+Hߑ9+ pFŀ 1tqWHME/a ԅy"6 6ͥ , aR-{1Z)#\ GBU"+Z*Amk][FA.@G\B.S=KOYM?z3p5LګIwJ̲a+#M U m6ԅL(y+^-ļ/Q1~H~dBQ'~ߜn-ϑ#ꩪ))Q?5;*.q-\+X]бt9%0-үJmߚ?MMϮL52}3).9 YИ.)uJ!mHx2="pdLNz ޱL ^*Mt59+Jf;3!ūkrYuJE cLϳq^eV:'}^D>]T24K:=ҜΕJ4јQp侌 iޭ=//4ܓ,ߍ9,4U4 o+\@KMIpMJHG%=3ۃszttSW< X ! 8Ddve|0y[Ш@}cX 0vf`x3zpt8u]@\ pWmjXvxu٣x؋ўiV  x({0s$(H hvLzZJ_&ZIh1ߩSN e)ba̝fϮmdec^a0P棎d=7_DRW-VߝJwο}%,$[cyj3 u'Dcb4],>0zK#dhBRCNu05Zh+c}i5b}ihC?.14z%u4ȶcO@}OvRSE8GdJKaL* q0N&z}=|3^Pp,;`ZFL , K"xI!|5# 7@w& P0"(fD>D!Ȕ^ *$7$E#HTbr.1Ic-_0 :)4^zBU".+,NHԹ<ƱsK55.3d\g ›<ƣV$n9M NwI_@T]v&4Փc C-Oh,T᷷ٳggnuv9D{=nss{}P  8@.}(&()kP '{0" )gE` pu`(v{"` h. ( =zvGi$N|0j`0T]@)xy @s~ -D|g|vf|%Ta. e &k\)#ׇ~aŚ*|ͭ'k36۔LN6`WгH Ux H+z9j{>Lj@j}'t4Xy2}@aOiQ$ _@p9c3:ը[,Bx(K* ?>ಯޡYٻڱj6"ޣ.02;Ļ%MwlbCnj s6;\)6a2ESRio",{2e%df! KE@\B$ I6l#(|$ͼ*JP,dX#-.Q<3>[.$ҜLQ[xqycFFw)z9E jtd"._Ve\Ķt ~DHK]zF02VWXpޗU,*,%6d #'@^Qi |;(OA7Dd2/Hhfy)+!1G4NoDJl=W@%w QBLQ)0iltjƽW" +Xtޛ̬&^pASN L(&pcF~Epkcx9I(|U+@^@+H,ʶ2pn1CSaDlx#dd1:Q`5Ƹ¯AXqTZ;hx}3*6!?MfIG #ˤk;㼅Y8p ( V% ls.l徾lWHDhzw^\*@H Ä Zl( , JII-)9~uGļUq74~w΀p @' Ɉ$z"<Tza?Al϶t,4u`h8XXU`g@Z8v^YTUQzbO.7 RxXX9! ;ȥ Jiʫ XAK.F/50g𛑖z:y*N.'C24k6*5 m/ 需Q(8C3rnVވ/xX] NC@^`j/žmJ>/8SX_OyntWg92\r\Ixfa|z,MnM(%(,1{;kسI'>hHM;t0s\0* ;a!ijW4rEZucSeT{Ҁ&ǣj . 憜 60H7 J,*2+~Vhϲwˆ7F$!ɠޠlJ #F)D,",죊w"n:ʡ&4( V(BChn ćf4/$ÌKmiȌqǮ~r ni0:joNx01$ㄭоޏޑhz´/b| 4Zct!=RH E**.@ `,ԞYWf&,~u 2``aܖ~AaD s|@$ `Dm \ogT|bJeNd^AӄPW ed_9fZlw풍a183dH%P+(l)p Nz `E%vܥ̮Qq~"d" a;!ʴb"Ԕv$-WY$bA0ĚA!L< Swdu.I@=X?pv.k[" W&pT̋謫siV R9aQόuuxݧp\q,0P^(*)awwuOy\mPĂ'7f,Ǜ:"Qr A4A|)_/& /l=~L@ NfF\!ٌW&+Y ͧn YĬ@` *$\J̲e`$dWdIkʉjXTNK:(ya׌{S D rvK^&AaA@_sk6KDA >)Hy` 0Tޏ9b#r>^gy`b5(RdD29,g)":q-&v=nPt_|&U<_6%;@fD`9EC&LbF!H 1"Nk}>oA6Ib!F @+D ` 0P`/B}cズc ?AP5`P=#@ u9\ քM@(8 CAh `t]"e@&Jd~=_+J*U]Sd2y5r$VI2< w\o[I2T_2eҽaMYL3Hx Sn<,oWl,6E-.ҿ%pz5ܐZ[zzg]oK5+(;nQ6 #Vݮq[ݾ\F4 mL D޷SxKRܺ]Jnd̳+"Ix=5YnE3.F5Ftd M;-SiKEkFq ޿B $/!/?6  R@Ts|]~.N%X ʾS,mCCEKSO @ӌN ~2안KQⴹ.rDܽ8+uRףlVxk3=_גh&G/R@9 3䃛5iZ|5m Na2PoǕ~'{'xqv'xy}}hax$t"OkاxWgy1mz!V'Hfqft7Nyxg{mPɱtmׂ@<aBv@v>0h&G(g^ `E>PyH)=w%@PP !uCHyaFes!MFcC `&P?$xx9 Lb4G˖/ * )~x}0n A`?$c q%9 @ߜ'FX aI=,0`Jأ }A\#=Ǥt|(0 `<`` `8)RaGCܑP"Ah,g;bZK6Ux,:`w4  Ba@{a:HCk7hD@}(?a0-@T 5'zQC8C<$EV,EKtu3@%e/d^[e5^&Lj~`uEu1 %Vچ8U?b1]YK % t DN)Һk. qbaec0̧l)KiItZ]rC5yFr^HM/?Co+ZԱN$GxZĶ; Zm!hl̔7KyI4'c;UŠ;n^:c׀mLtI%$BϊJ6C+қ-Y0,޴2㤕{-2ᦞbͱ13 b /Rɦ"V2ɊZvZJx9C!3~l+doj0wt3{d޻iMc` Eb)xZ4D#u6:*3xL/I]\~KlFs2iBl1 -vŎ^рGӳ-q}br&8 Ս6p.V᝹1%G 6feԏ=v=VH\  FaY[J(}dMcuHu10Xjh#}0ǰD~ѱAkBK&A5<CFe?#n&(sJ< CdbLlq/VF.-"3j 3G)U =GpJA`>`"F.dsѫ Ycn >Gz#׀` +Rh"Y:&(z h 0Q-@}J(H{x;[@kb%8Z2VHc݀ 0pz' "H|:;yyӜݝpHX" >x@n(v$XJ(k=j8k;Xzpthpv * kC1j:zE꓇ ogj8( 2"ȝp xPT28xtw(A(**fR(rlkHs m 4a#\"{>Z :ƋJPcSR5ۚ>1_\}Yr - k4cO64S9 .Ȕ>dTS{0}7)\J 9 {0J86w;3ih③e+2!s͐5!Y)s 2̮3H+?4'N95Z}i/{\ə岺4Dܚ/{FA;h+j53Y J66c G BaP0 !8?* B"(y"C"Q!RT/AbHOFqI\V 4J(i4!H 'yLZmTzMN絋L'.&I}APrc3J.^%Ŗ_GN\`?sۼC!SfiK1`HqM@dSM1uSQMg;zqWi ]~Njen* d8W>\1YcUY ͥ~r σ?%h{Ʃ"O &9j30&Ibٶ.˭ȳn!J:0t1 A.kZ+(l"虯9N4V%bR*}Gxǁ*gau}s}3! L>@*i}b$+OAŴ̉~L*zgQlfQ|i=j lwG~txǐRD! N8^a~G= B1U0X m`-QkB.I`x'V@ "@8@@5([6Em+Shɉt<''ʇ1mAy]6 ozP*`*2z'P&vaGO&Gif~qZ{`p*`Fv{Vĩq5{ ~`j[١8 tig' Hh" @p+{'zgwǹ|g5q=g8X (:`$ V:qA~|)|`( m`q>\VYvz&',> %Ӏ.=(>&9J#Dr偲vr=Ghq9|NUl`k Zw#xq=ǪPUɅ0P%@8&|u?Ղ;F  @>CPh <`Ί&H "j>@,.2R(NI}D\bbo3-G,"\֡"w4 *^Aq\ѹFj3)HIrTj[L*1)~i('UuHaF-$R ?TTW'խ jnd[J%#pq7z¦D@ H 3Nx6Adћi#M\Kx:F0rAҔUjZ8/H clP24𢨕7~x z"xc|kq+Ԙ@ @` _+iR;O6@0 "@-I=Hey9#@f;ya%0ktyq=@@8 `% 7؁BjPw90tp5FCu%L>(kog*eL |qcEa/UJ@JR@P`.f>m taARc&`", &f0 h g릟6cG`CN b?* E*( j EB9?c"|D,+P >k b8^4CjB6E9DD ꞔJh0 p~; Ehca"6ɪj,D2**}Pb/B"pA*3xCx=bk2¦.r-ldAN5`ǂ6=vA8/q!!A|x%j,ΠxoTq` [@^ Vxp8&@ IIˆހ@KRdE"VJ`_ޤh,A~!!dZŶ/&OhZO ,.d^`z$Q jޟ`A!M \@b !6(^, 48_t7Waͯ o)ց"=#o1)$K xAJ2+sj%YҹJbHҷ 긌dfq\Ow<ʳ%-|rgK36 @ =2- DK.Ѽ!iZ3 <nBd/n«< TG 91R\$(F$4w&D` g>`F(Fw ^D_hB/IA;*=LWPPzm018/./$Ejګ?3C"JޞGrh#l%Rt>7 G삲@pJ "*IRI ~HDYBhEƕJvz6aP 69)<$ jჽ~П«D .U?~@ᅠx2U)F, DASSKОҐo%L3C z%ߧ2doY!.d i/ uz ʊL0O? %pʫ.r 2rU*NLЉğwܖ?JRXY ˗% 7r& Ax,A0k! b @pTz b9P$?ȤN;39L"S@B $ d&.I}9HP` 6+CꔊeʥDAOv|EHD>Qg$4ryW/I?_yd{D".DƉI`ad{j|N-< )p h%#4R/M3٥8ɠZR[(SB~>u;{x~=ʁ0A~#AxO~PCL3pT5< k`@b,g{'Irw(gg$k*|\0}Ǚ`Tt"` {L1LGn'a z'I{p`֭glQ A'' &؝Qhe@'J` =y~Or,n2E!yf[({f 4jo5('oxx Kpegx2 P d@ Ay A n( ( g͠(-;^W%}H~vǁlZ)z^gé*3[yn0x'V#y&٠s/z1 AfD{{2 1o0uf "HH8g(ĸ[xFb')w-_h ? `vF5j<:Jkh 3"WQ1`靖T8 =,p6ɀڏ% EO -="B́('-K .L>2<X <5"ri1F-Jj,Z0fBs+-Ղ3c^x}D9T*%HϙwHb#=($35gLT9!d3^ el"A:2_bf/BJO,`ĦF V%ȘWKi2 );h&yN.&(3 HSElQPEA'rđ"[4ȏЍRYtTX#J 9)C_<-hI]*e9oJ,g`paX>a(03  UNYF#l3&(+$LcU7 jAa)kJX0$F}[E̅2RJϔ0ݙYD:1hHZMPJTݤ%#&@Vϩ^#(n>~rI3X g@e52٠`E,}j!C;e {eޢqWbKn|TptQǹo=ZĥI'ڽ{0M4l/LU)'1ߕXLECc18SV &=};ǘ=)7$(+$ tA ;TK.cDFzH @W4,uhaA;R0G|c0,O (0&A0)@B45IX#=ǘcE!Th*%dg|M SQ x@s(Cs@ `P@%`x8rhlH P:F:63 |ךiB kπ0Pv1vX%2 ކ ^sthx`v @ 779Ὄ a#kb(~`v2Kq 8P M83JšXp73ڵ0pXms]MdP) <%`{Ô?A ? - WJ(u h8qX pch^`wI>(M ͘HX )Dsb ؇Pyxuy`p?xv?`z9נwvp#!%uWgі+Xzp@9ynYhzKTx2ު!1Kř58hu r m0q(Z)[e{Hp0C60}ڻhs`pmYsc9X *S/EJEAE<*J|h@d ү2H rBeɲ(BLT +YRhб~]RŊƣAz6+hУ"\TJJ3&t!pBJ >%q\HXNO.|2,d,h//P*`6:&UII-ƨ̅E_ 0 ',࣍5{̤% bTɢ;}w* K~ _`b": ' C O9X6<\ ",^ڡJtz| T}Bx֍5!lBG)b.c:(2R3H-Աˤ܂ʛCP(AB63D"3Bl,2Ǫn(%AC|cO`"$Hh]T"͕HnBErB 8ӥՖD bMM,ˎ&ejq FnN`*:hwPu`t $%4Hm9Ry_H4qHҊMuqxqzXpdZK懨sk9 ȪX~0PW9d`@>S5B01Erf ɸ~!xUJ$ӐaǐH͇w{HXX Z3sޅw`m.ke_ci~  <޶J 5Y9K=i50{Hoqh4`p~Hk >ΘYse|%75&5wݸYڟ4fYqdP ց2eVU+R3s gXt xxXmep;9gi hPZ@@ޔ 01t0i rd6E ;{({!5js  @te00{.e҈83Z #ҧ 8//tjaum(ƛ|Xh{aD1| rT |>`fX_@aϾKYlf#\"n*J9f2qr$ )Ȁ; JJ 5FoDžHtC1 .nE;ŭ ^r ^20ԎT ƣFa) #2(4e`fFEN c>2xƄCM/s&8!xjԘ$^*eF Cm(&31Ĥ, >KaRc&aJdH߈z Dzxz$92n5Dq'+%ʾx}~rb\!xhl`2/Z G |.C2H"j}bvat\CV|x'vE dI\.Hg"5"/BSHEFB]vg} #B৺uĺe "b,]״w?t@  ?, "ИX CPG '(TNF"T&@ (e343C%Yˢ z/LA 蔾OY8 6͡D(F,PhQZe2E&I.UJ])Nf j_kgU΋KgDYAgv.w>_OE~AzD S8F龞/0 gfv?7$Xh`Ġ gx&8 sIfg}y|9{ 0`  `8*x$"@Oganf)sg}H !@ J@ME󜹫'5,ؔ8( qh  Xmr3'j%4Ba,xg۪%l'SBw)ʼ`gzѮt)I P\ pwNDV,S&f}y@9w h" qzg j `z (G:Šb F)|0I iG3HdYLqNw$䝘4P=&X[K%hx"NTr2iBS9$,ظRK"|Ne;R\I"4R_:"i"sCm:Jjr[3pzk4Ր?Ugi0"u&<5">`_%L,0@ UN#iQԁoKnM kL-ҡBMǮ4n'D>P|`?AA{$Mr PH`L 1, hOoa:8 "@I&&%*{oʺzMSdIjP Xcs *G$pQ>@`@Xh'dy1=V_L"ʼni:yAGc~3`@N Gxa"+v>5ӇphPF WDGq7ƨz2@;v#s∰MT?A-`Q:aҞ=l'g'!H|9?Oc8i !2,O p:& H 0r19 jz0 D8w >H.gI$8 n%r@Πe98c$EœM+>`(, ?Z ?5}m;jp Eؑ&:@tia6 h b,n2 LꈻL? )XMtLhC7FzSc$,0&|%m^h+Hjš5HȈ#xI1JĊ ,@*+408'ړ ->/F lf8$@*%mreiD\aXcki t.\!f@&DH* Rmr Dm6 FF@J$ R%:#T"*! DZt ~.]=Hl8@uE:)=OrN{OҔ϶A!F'!A#vH9Ϛ=:VFIN*^)~0'fn!x_z,[  X$`Jw=BEd(U?A`T@b2%eFAr9`@0MsE.@*c hN|/TG2Y: bhgGd4@F`b\:'Q#BlD>A#;bG6c bl! BD&@ݣo#^@t5= ׯbŮSTI 9!a4| /="(иzҒ/IҭQvghTtVF$$CqS/ZH.1Z:sdM':1⸐R -07%V/Co2ssm" G()&v[uI" sLMI#⬖I\#2(ʘVȭ{sG&S<.“0L** 5h|+1i.ieu7#ƉU@ɉi %hɥr=V"O,ȇi ҂pq:׃&jWmSn ƖvIYK-˙s={wS¬pv /l1'JqnQ"WOtQ,@' 3EI3Ji$Hz&ơn6x^qI 0F+jчős2S<܏Iz6-|pʦd7!v4uxSTrz,)%VY.BjHo.y30ٟ1 P#7U L#yُI)r) дq- [1UܮjK&V6xe-!B:-gy8!9f!5l DB`| $D@[vjsz$ w+5gGV4E! 6:`*L`AdZ^@`\V$0FbZABVn`9DwT@z@f em$^@g Ɓ8D'0u& f^$:f>D_l- z6!al*c&atZA`" @EDSSt}[D)ReFTd ¥ĀO_6@t{eN-v:p[ _A!Xpl !Veh!|F\O0n^anv!hnAoTY(wH1:a!@ s!`f!\AzFdƮ] E\>P0eI94@XXOB>,dd e!F`,,!,BgcOog;ƃ}@f`(E5H4\*6NabTjU<bOF` " S<9t=zx&d>~gj(ϗ n@ dK`6wߕ)P<>,B4A0W˹#900/JU"Q' NCX5p%?)w҇"2,71L#x&C^M3Α(23'6+ g %6j穿RMj. _'@1 Y~;(v#80q9‰ك, xqΊ0xm} 8*7V%J S˙KdVBBewQv);̽Y0*0^?.H?, ` Аld$2p ѥSΪ ;ߌQ6wۣ{$%Q-bѓ| CȮgC;x*kG-V&DұhqB? @#"HB"C ON+C@0&'(LJ= Id4 )'gؤHb3XNK Bd0LbwУ }@PhM~!Xd$NW;s9fLR* .sԢ-?\UH/4IJ'Ԩye)VayME);U3QRuXM% &ڥro!%.-~wo:㉯`{>@>_ox.cz?_2 tA2iz'~g㜢)l~Yn'1 P `8.(j$ť˜d5ȳ!}DZw1zg {'Iz0"8@1nyw? 6 Z!X}Aª@B'wr)t>A\'At29}` W?`t yu IȂ"(TsifX> "F~!<Hy{9.u 2ZB}2~z *9`XԉD-2TAAeFf, 8C8_4"̅@h  8ם37)-!e3_624bOHf0Lu#xW9h-DFt 7'<+–B,ܤrxln:H`>R #`V.,΂>G#s.$.wA7Cmp0@$cpeTUJ`& u|kJ(BN> !5w@X@40z H-|G&FDvV^T{@塕F@Kmy]:dbq;  89@z`*Aw96D^ lN8V.qc,hQ?` L Gv AxSh|]'5iD\'A N0x0.!%(XեS+@l  m-}PQZ$Iz B-~?zW'>t?@Pjԙ h 5ңچNҋ\@&QL  c/9H#x*"ّYэq> ) ~Av_~t{`?-h &N_)?[*_$X |`qqvbA  31+m D8Q~8scUK8 ' >!S8B)b@ 1x v/LWrlH Y%0*pڎҦ(A>AR?.J.c b &xȎ!0 z1YZL0થʐX9!، :᯺A +Z* B+xҵ:$*t$#0̦ ]+ ਄L%=+-:N/9/24.D%\$.X x1(-r'$RW 2)ڪv 4MF*rF8؏ K/.&c,Z沈&2D Fp+;BBq$2f- C G*b} жp1jj`)KL[6KB+x-ZTHX0FfCZ()r@)Ԡ8H$O) G0v`/r ` oEj1DW 譣b&S9&-'*Kj4j᤬8iH˸$1 \ȘF + aIC ,@ dŔ)06/Ҭd*ErPzϫ𦴂 -ZV%#ŪǪ0:zF 2D&*G̴0${D<0&i>Ml򕯤lS) ȋBJ&ګÃ̋ (yvhu@u(ythx HH!!y1>JA q hhn^w0h&C'Q.H8{` 0qa8wjhff0Hjit8`PP03e Q-ct{~ۿ`*-"Q Q܁~9{IH@:}eo)z kSsCv@*` M#;8SvKfSc 9Ho0jt7C8/  T[SCೡS{ ?бЉ CWӲ`  ?8iZe ` ɾr'+ P|<`@Oq(v8wL )X<1T]I"99Kkh-iܠ-c{F0ˀ()Eʧ^Z G*꨺J0| n)HGB{dz0PXh ሾGE|ˌ"` =Dgd:.jꥌ5TwdJ|j#H&B0y >=溛_n.dI)>MH 6_zeDW3M Mύt>WeeD4Ct |ò`Pui'}D xp`H v-T,M|P!8qpg]_x8iֶ>Q-5ShHs`oPP{ Hmf'X@ 5|;]63Ǝpfn݇$zٸ!0;yOJH:1Rݕ9>x;,`DeGꐹ·ARJKy)GoJqdYtvoVZapkQNG#Azʪ;_*%W\hEplG#(E4:3iaӭf`H!,ƺzMID+ewOo)  zٕ:B: -Լ)('S<!9- 6,n'ygvau'yDAp" |z7lܟgxE9gKFk0v g}ǩķ{j+5+m!Ah)0 g9ylR} h,zgvn`,x2A(*@h 8|'ә /r zG9nzǁ*G͚av&aQTS )똃!0}E'u&9wg)sgxh \!@` TgyLx 5cHroD7i!vXtYyfٔv1{uva8%J(܉ɠrDY , YH/Uu\Su&`( `8 ( Q`@ 0Q{Xzx &_7,ݩ'Œy400`+&vz( % \98]lxǧH|t'qvTVrLI0N!NY7jk`16 D0 `@XPXD1bfw:Hq$zb@@R`  $ mC0@0n a1z% H `H x1ⰺ y7(AĜ7!%$h%ctmY.GJz5`r|J5FD!a~GA i/#H>Ӕcz9} !&bK)h] ) f BC1ȓGbޔfIIC3|ҷ!%15ة.Z9_4p(GNٕJh7l!d$<`QPdAA̪(S$T, 1%xy$Y*H :)q*@? B"M]*lIP'(ԔQ>$ &Hᒒ0C M4Kԝ64?1I1DrR1/H: MA#w!ɝ2{f]e,*RdR4\ǘrԋV9),H- W,R]&܅=Sh^Q}'trD@PYsXt-d9ƍ" [P-IqAڏ''L4D ,K;9jO=Fyiğ8w f!p{5˹؏Yc$IՀ$pmvR]Q^XA;\t<hcudX<Ԉ>K `/> a8MV=$`}A;@#ea7YV @$H6S'm f.=L#y5X$ E@P@ LGð1ȿGpqD=HMB @&,28)5hp dR>;^ ܏r&` يo+ &6Ĩ͜^C7XzmAl>1ìwc!-GLd005\3j`>P{f G?};Ip>p mv =Py1ۺ݉iu/pN (oY^N!lϳ:WqutKPp"Q;|~qn4kK3Qnf' f I1~8nG!;GRC(pjp'@KCCk:ʠp"ӵа)r==.9ct^8z@C}qcM8hIYbb@#h3 w__픿 am,!r$VB>`*6cxh` ԆA\K $&,@4Tg,$꺆*B7(3iv$CpmC06|Kf*6 4:+5kb,š]C8;C$BkM H}q*3.q:-8fE̡ 1>)µB+g.İ [v`FLr Xl  k-FuFAE%, "Up0.D D$S!@s`dـw0@p#Ѐf_G` 0`Pm0pDAaG!D 4U`T)D "r hV-ar`ϔAYxoAdOD`<v *:AExD`+b4躐+N"hdVA@DL~~I`4B a@Lz:(T5uL=!!M"@ s@`p.!kCa6ı!A r }l'󀶴?Gk9L`0NDwBή@!ATapc"(8tBH.s %H"6`f@ZeRYSg(@A.B@FJ@"*Md^A!m-FB@`-載|,1eYFAǦUfI@ `eʎhb` ΨJgD90 sMj|R,t- | Rv0H')DC0]qCsI|aMFrN :4Ht lp'lGt(s,U?&qD'#(St qxqТJ=+z";UL4C*[r Bi ~x:AiҿQ0뤟&kĹm!"/g7WXؤot26Ҽ&˫#lt??JӠ2D4LQ>:+4B {b`?XE}Ƽ. @"H dlGsUPhaOF~ @ ՗rW_ .@`|rW"D!wNoK&Faa B @ p @ڠx|,2\5ahH STv`p ajFnGd3 D 8 `a P8e%Dazt&"pfJ$J<[`s@ HAF'2D( B$je؆β+M|;[.%\N& z+];3E^^k kFX< \`btه~5A_A!@V .EjDf}ff&`$ cMaY)sAWDtA$4 6_ADSHrhvF]rg,sP8c@1Ⱥ ". D*7\a&ͮ e4Lũ0CgB a`[ҍl 0UN wc }m3D*0 ,Q5ٮW,ϔ:ȳ-r5P u#6&e4 GY0X$/"$ }LLlY! X H杫o ~@Gl1n~d@{y8| }5H0$"RT6vv0i+ꐵ50pF9k쭆p` G  6 `8:X˵9Ciq4΁~M(0 D (|.̓y>!lF-xz*+<`(^I`zNRù}|b wyh, 'ug8eTJaIiH+7h`j  `(@ b"W%HDA2:L3Dtg@R g1@C |. @T%vPYSi`Z6'y sf@7zGyY Lh6begze08P"(  [}I%CyA9H#w0(@ ("x04> X =0L`3G A@!5@X "D,bQ#'搹ՈQ^UG0Ȗvf^Ki^{䬼ZlMC5Gx".iq426A;Lbxt#ŐF*8D`̚*XGZx':kBvQi1.`d$\&R0JYlq$%N2hL5"r2f{=e?i{UwT6)IipnܙSJ$7.AOSVH:FfZ|E6=4p̑6e8{WȔUy:tM2S9E?Rⴞ5&)"Ii a2DߌJg+:<ͩVSlʑLa81c~h9h,-!U8Y$(Lfk)9^ȉ>Ѵ;rLJܾ!R'T\r#4V!ԤCZQlܺ.ؕC˧|y8`gvBНxF˱3 YV2 rG(w$EsNkwF>8bZ })dzL w|E^.M:5ԐL:!"&$;'ݡ2KY>Xa,jR!v:\[X ;3:Xv2=GNʠa j1=p>#p6P?*xô{`H*06y@$frz0V4RpiXwfCj4@ P 6@8 9AZ-S-a:`#s f;`4PrH8v줗|qaZ6bhQwY<! pɖ0b2@# f֎ fARd]9s[ s x@(rz:pC\s񒉄Gf|@#R@VpLd; _>|QG`Q:ǎ0c: `uG)htӃ @jAl96 @# դ,~~b@ ñ:NczLU2{0fBA>A @7|<Ը`2S߀!Հ|"#}Zu|=&7!:%hg3f Qג6Gs5vIDd|$ۨSMj}3sͽ_d<w{C״  #>;늇Phf0r{؀h 4 `鐝 v ֎k#榬-0ά,P +9~( zzVR)i;@@ 2`.ƢjC203Q S"&|Eu1.aŽ*8Hb)Ȏ.)+!/3<6$"Â爠$8!񮨂 BC x|2$N/'J SK Q&\'d5 <#Id)xrWOmBH/َ/djq`zث"<>(2's룊3GJTW@ l: + z9 7 =/bdC' 㩄[#ZT#";/:,lj~ b/-Kdne*d)j6+,0-JK *v*8Fj@ՊJ:WBJɒ ֍)rOC2wa S?ȩ6ާs `Z̨Z}Ȫzpq°%D-.‘E ήc uST|&LR+Bũj+l+´̼`J8KhD*cJ܊\g/tUHrIԥMMܲj&T?z"݈@!;t1s{+!r醚( ptHuLl6|Ayptppxvthpp! y} 0 z ٲi Ӣ ~4 Ap@ysϹY;ysip8p8 {xzXpqeH{xzOSQ``v`y5H?0T%|<29% <lsnXn9Ai]YCA|B>("̈cOu u((o@yo`onhoX|x@v %2 P 9:#*ѫZ5 7x  ~:>kWӽP`|)VЋq{z2tfusrh1Miك!My 麳Ox0:9P{}zX 18\?:j"ڶmiyp6xv`QV=yى0%V1^WM@ S8(YϏWz0qq X! Z;[}W(( ~p 5oi kb1! F =IЏDʈ0#)s& zg.+Ա |Tj4c./\̍e"H+V*zSMvƚz: 'JB"dʣa pj ^8+'ygaJrX.% cdz.u)si>hi=k$@8$ S>nIv k(o[ א$0@:( K=˻f^B\i<  ~޴܌pRdJ/$CRQhVǼ!a7dF?Ec.MJ'뫞zAfxХ,G3nV'hYc&狌LRtDJ6쮈^Dq+`$[u>@-fwR͢@ ҭJ'͔F,7 _XL6 ¢q|: 0( E DKdX'e.]E"In{9(0HiQc0 YMEyV N JIVxC=6ј*3BjBY_bV S-VۤN7+Wk3Kmc@5+;rQZf^-YⒹVK v?Ro'U%cy`uԿ{Y,v\\gÇ .w.=p*xjYX|ɼb@?aG}wGquqvzǡ0 8\AX\Pj`I}|; S ~gx'ImQwG|E{ i6 pF`2 -BϤL*n~0 ~i H( N~G$Lj}ŧt 0,D~6m;ABzGIp'wf|мhЊW aXlHdE'wK ͳs4ԫzq 0g#hsi\g@H` P@w@<ͭ`4QL a  `t$~ɒn@ ݇|`BሎE`{$"Z AWy'|-ˀ `8i\Er!z?@`(` Z2D/ ӡ@-]Agyw,ˠ O՞{ adǁw@'"(>~x&uAcmv'+NZ:M5^C6-K~n }0Apgt@@(1Tcgj3Z:tϔp =GzYh@Nleq䎇P#tQ=`L. @8@[# 7LP4YpV `2s;GHc@i |=`6vX +ZD&39tK8ԁ:w QGbƬ)vdʵ`ۓY▧hb 2hK)͘ҐT /l2",L e7t@iLw$e xDO sL/2URd$iK~(1/7W!,҂zTXjLk=}(G6OZ9EsH%:׋Nb()2BrO%mɮR4B!1A@ k=gy|DKq:ډp~>XTEE3MF41T?@\PF6 d-ђg~uJq/SnF!q:G0 %Nhcf R Ah9`%19 hCeal9{v`K :@@`j0ȱb$nz+>2b:İ"ƣ)˞<((ʙ$^^*PBbytºz7i`4yrr& 9"b4;Ο>+jr<BlbʤB=*j o0r=`h1)8)$鎷&&D^-c8 LҋNcOCHN<SCIp晋bk C<ɌpC16h":2/v"ΜC(C%稢#^4|,ό"p˯4b PB`/Rޤž 28p"RF<*+` !{ &>ܵ <6C2u 7k3#ʹ#JԪh i RKl9k.^̜R.*M&񌫉Y&) :k.qPY16g [ m&)K MY""7 \V"k?KKJB("+$ŕ  J_I-*S" *"a,y*j6j$0>Y)'b_  S,0VaH6sGAd4dtZ0jx@ ..B'^OCdZgNAPEh,p ^ @? H4(*pV+1$4B.PD a=aFJz@ (vQfb$EaT_, Xn_rp`d@`!LU BI52JfdZ*>'Ĝ$*C6Aڀ0 M>KxJOD6a'"aaC ,E-0Χ8f !NV|ID`hxN{l 5`4IS23ZSZ"@$@6T`aA` `"A]BI @& "N6A%G..LD~ . `*$YI~#.?4Ĕ5-W$jކ#iG!g`~gyc2 K``(-Ke[aI h!`S ,6",dAw`TTdŴIBAvNZ`6UZ@*2'UJ p+c&r!Jp/.414k9X3OzQ0 HpJE B)3+R>"bҪصpc*ÂJvv%L9 1RHb aUvj)+#°SS ˜r+ ѧOO_&9#:IĮ":, hQ&6i#.]+y kްZYw ]$$yQqrv2ȳJ/(Ҡ<,C쟪Դ1r2909qNEH;001KVJҥ\8QvI}sS ,:N0`N;fJqF%)I%cǦdZd @hAPB~}"ʒFLJri,b*R i|!Ta3=^X66@Hd6 n%HC`@((WkLc>aI؋`FdXd"$6J?lί{$!AM2UR./;gfvX`܁IAFFQ`19?]5JD&~v}l3`u2  LVLoVTPBh\`">?V敛&T|T`4wIIpf.!ᾈݖlV 0 r1)R)YCB R€V)d22VfX V];=xrvsuu8 zb/k2R#AB؎G^~' &<}{3(u83bWd #101Y:FPwۚ `1JN=/cz0.᪟)j8WZ1&R(s)搹J b  t" y^ncu.3kA_+< F#Px]'V!1Eba-V Xp{7 u{C O}ڱ71U`zG!|g'qx`0xpDn%`&}2K\?X6NSc0ĢJ0y H&rl 㢯{*z( ugrX&ǨR*ֽ3I{*P "xN` que\pviN10H ǜdH P r`t4g8/%~w\g!T,H{0ͅ;.}iJ gP D  P:*l%NcέX[8P@)q'Qg'b9IJ|9jܙdM';;iU=  `0R0~*O`,xSܓ-L ,8S+2H ||1 q汘c )Ȳ #\* @1?ONf-hJ W% +2J"P{!ohF1͇ujNUhf Ƚcm׎Ӭm:;qh7zWyTNeEu[2/x^jB1]1C3Q'1"DO{.?rWyư" `3mN'rdW-<@׎\bBZZ3rp]@WfE GN,tV!X-/1Gd9u1غǏx`">xr4 `FeL*Ϭ9 1bqU#|A⚇P#xV=G~7An9G8(*3x#Ta< &@h>e(o q:xeYalȃ f= >j9tr8 xg0@1ЦFfP P1#.GDTAA94q=G%cFDoI##|%Z AՅ lV?bý? @< 0P 0f[3 |9GbCEԆ<8 &6`Ocwaɗ1Cr@N !ⅩL⦰KjS51P|6FdP(;Ƹ#m!8Pi*lzQVD AF67=NSNH~@p HD8ET`v a,uZepP @Z Z==ǘ * 2@D5 =Џ1PQ:5mH˰j V Ѯ1H C @8 T > HpzӟlD5j4⊈l Qxa>GI`ZHCy/eP#(q3{&Lz: )[4\>&ѹہ 4iYAS> 0x[n Cs p*SZ_!P}@9G?T<|v0gX Ѝ{uc _9N`}#N]S=Q;M6_{W}o"ߡz)%=Pc%0B I(BJ =JY"Sc>Q&eک"i=LPA+*a(J* ✪3&`ܩ R%jFܞ 1'ۡx$>l !⚞c.r=T!JC֡d($d%·"(BqA6(1ҕcנZ)Ya%Z2+ /L?P3⚁> lJϞ L l z *r",T1DC]Uj599tC#9)8D/*#dTEQ jG pFBH+ #ExZ*%V*G|Nǽd"Ȧa羢>? 'Fөj>A`x*T>""X$祬p/(˚ywpuhwHvJ,  l @qphcR7Pѭ({v/wv"+@Kxx Xxv`.!:鉝.PǠom]($[) Fv8n)0mHzCM [" {Y/ X39(Hy3 p[pxs tɭG⸇C#lgyv:"DPy$x*0'lp+6j;C/5/: 9sk dĜ<%yPpx] 뵦패3e3DI5AF9aoh`t$D&(0ggx@ؘQߋI!z6p 0zC̔!@`cI1q0xrd yXe(A13jA6;;xWvx.y8t "ts2!'Д!1}[H0z{_;]"=5Q/$J+X+{1arHohphmhf713X >[9bBiDPT|AĂ" !Š>'ѱD:&9D"҂CͭE#G'28f}Ca CS#*M5^ü>">U !x!1<4*dD]"DM[qܚ,FĺDJ2"8ڝ#acZ-TǪH* "lޣ;"A[DP'*ZC yC-! 1\`Zܳd>_\X"{prC)',O[Bj'D@FDL]EJI)bqUڙ$Ғ.&6( /_]M_ ["2]-D#Cz0+bA+y'G";(q>ʔdڋvmkZr>wdۢy(_>™ȱǧL %MXBmy"-`+j5)A]dszakHZ\]m*D8J~ ~&V3IA`8|_`@j"(7a5", ;E@& HmZ2> |z}oq S7yC(3'BVܠ!s".z$Edi}wd_BA![򣟞*@  B%A N&P ]`4j[CN#8͡MgD ; ?{<sv;OW{_O# E#6wBe<?Gi{`0( #s:'$B , ŅAA1pf6$J~` <yx%@8`` 0cMۓ?"V'2o2{硲lQsF)cp~ x:pL`D7m#y6FM }Ts(sM 4Ҏ&$ry+A\ǦyseM3b= alh 18n&xP8-`\9|7-3BF1# Qp2o9z (Wπgwo@( 0/}  B@ʛ.=F88'z"qgQhS͠k$L@(m {g MI]R$):݀zh!0`4`o V$I5MǔnNUTUwix'M]>GAoETxB~E2  6 Ur2°{t i*PLiߢ)B=$6S^ܿFy jGsyM1#R1u7V#hL^jxxi$Ii3mxr ݈7"H%6bJ&m \bspf=DLR@WG[i.~j&%_S'(RcɁ*!F*Ga0(SCq6p4}ȒnmZxpA8 p2QoF$punL4*\3FHC\fQ7H(327; )w*Lq 1<HG$#@H @Yʑ}-]<?X4<0 c@ p z E:G( Y6!?u%>\@U㊐Qiyl{>@(d lx|IZg0B1:GPyRnG0.8il# =MiH@'0:H HPn,JĜ JnjD)T{F'̤:i]M P2Dz>d̍V^O$@*iF0Bj>lmyv$F|άʬ̑H&+3 H Vp$)R:hɘK4L.(gƥ@$01pB9Bk(֔+HG)&NK9" p{ QEh܃')*pڝM", hn~DR ڝqެg$… 1Tb%CJ!)I26'Dhl-yhd+cRKnR8xiʂiN/=-tO2[(}h Di' ` @ A#PP+:Sc~hMQД3u  @E&PUNaa! ̊4RLЀN@j jR! P.!S+4 2G 9h$ȧjV!nr8 зd9 9`rkU'ܕT|Fr`Aav!OXTS$%t! >H(ч8S4&,i#fMÂM`4х\dAoPn]bG@ V`0`2G@ a3X*ZfeaM5č cvdlB/H,-M`g$ @mҤPUhA\X"oŐ1.aN 0<Tt@N"r1!.0AN͠`A>AYNL1.a \4*n^F,\`2 ZO>8)A*#Lo4U 4YBl̨і!\"c@(Su:LfP4MNJ$&MRh% Z |\!< Ygg8` C}(w-j\]D(аf k"2Z(Dk#z\RFDxP ?|(%+uHPh2U+$T8 uv $kıspFuW4 jhzI%{Ƙ |1VҠRJ*Wv*0rb†H)7#2 6؂zIyy.+xE)ezI@ w |jo'*jΤ ! fUw0 8h"I%iNu6' OwqcpIH-v픳O6ɢ~ܣ$ҒRo)rkv$P9HiՆF#7G! P. t{ɑI}VW#K<ɔQem2ew!)E9Ay$Q(G\m(Wt/8j*oaa+v\J ˚@ o ɟ-rֺ rnN"@l d bJ B8GN ~CPaA"dptUPEA!6I0-!+%\P`ZR J a!ƤZ z`Tz@fc1#6H"׹!YZ0o! $o` @M>J: XlD 4. /B3>#BklN m-u;* taA&!CwN>"?*ˍ\ ZXN,.,,]D@o;٬⣵8,/v* L"Co5\G~Dh\VAԟ2pF,˄^Gt.A&J涃[R`F!` Y?bh @$GҖEaTa0uCLB`00 ()>Zig#G3G@?@ /Dv 拕3knmkhaj@DvNQŚa,GUǀx 9[-@&򗵠G1tIԛWY) q,v_!HR8|wIIIXX8Cym)RÆ[PךGR|BehH*Β]$nWxiujl2A$u)>W<9R0|l,KU}FgkQWI#S2-FH~U&4"6]X#y*R uteQg`Sv*e7ሸ~'yU[xze+}юs؟+S1Kх]2ZX xq~ ez戲wXSoy=ޓRcqP" gQ^ _9!29?! }~|qyiॱS  _4 ?P0/6-AXD5"H(Q(Fe jK?IS5 @2V'(,'N%P9HaњKC߯x]+y^V7a~>ߗ`2 ÒT..}"D_ȼb^?/sp8Mw[}= 00@ 0p?\DJ-z=߷HLS"#v)ټ1`#u8" k؃wpIr22:먎"gz0 `, >a F ip&s`}G `xS"jbNLZ&$yGqtqxljy"*R~!°}G:hRs꺎(ҽ<(.0iaQv@(`8 Yug`% ,H "L(~uA( Zƨ=xjFAoPF@h}|YG72`Xf&h. ,|` hh8˚裣5<{a&<*yxմn?GuG pgyoAP~G2@< !@9tytY ,~@$@'@Ffuu;S§&Lx';wgx :G|9s!'fq4}2Lr'Zɒ7 z-H8(m /".aـɖ@f3!}{P. P\!Ιua[q7dFTX NH G"U^)EU ]<"@F!ĔG&m'>BA6;)ݝnA!鄜8bW!!v3bR[<$Q|V IXpHHa:eAScaXr9G`G#%8gs$eJJCV!Y!gTuDhD3`z6+$oRy&L#<.-ɲ9()'dP[[ |B)eé99|rbMxK':f&U$r J>HDd䃲$4nC"FA̦z( ٓ>{b׍$jLQJaeWHy{/̮^W53;Wz 3xֹ,IZHGEXnA.Oφr꤄̐Le8FYA@[X{do l@:otc`< @*4e@#{D"nLU%6EPucμK"+۩f 9ڜn19 d,řh<9 _=hs>p)`5SZ) h@u)ڻS1Bټ(dw!9 oBKŲ!S}eu,A;yoV>dW9|$j@ZX/`jA` `a iЦ)GƱP"2 {$Z-X%M%PR%.+J* @"A`J=(#ҥ*8OAjҡ2qB=A,': +b!h+P*jA.7Aj˥)BC#\!nZ,󤯚8% Z(b$% .:()BD|&bN,'=+' $W- +)".($z#J%ABsަBˬR"AłOC Aҍb@*g+U:l"ʣ!,%t%i)98?2B̠3&%`B^M, `#áB!h:9(+0? z%OdJ:9`qÂĢ ABߪ.:}#3{!) CB+ZϭȆ,ICBޣ$&Y=!4 -ZMź}J5ZTDk$rCQ(+%0Hf.£BJޤBbYy-b,x-D2}`׀x % ohcc7<츘1K 8ꩡZ<X+0rgpq!HՇ@lYSutQ>B{UHx !%es/yx@P )d%[BK'/\r0phry{A%ȃ` 5  rI}?LBd4%RY3ȿPlafSxx ~ ٶRPH%1hP X ie.|i=X)e?41N$7m(lhgoiaZHpUQ.[ (0 `aa`}4\hI(pHw ӻ#|{Q mxaXH`@p  y)>(|@x Kutt0 R ?2B I79d+BS" r~hrAًY18)u;y~Z0"4LY I0z8cxPT0~;:ӷ4 ljz1* A?I>[hw#h V@f@\uw`ـq7bx* }EJ|29I_¾B@Üzx'bj"*?@apbKŲ#Jpʚ-2nB$R*,⥨F̮bb1W-Љ* Z1C:@`!m(ܿl!콴6M6eĽzK_YFbQ -BIn@᫦SjLM Br"A7RȼOGuAщEVB P`8*-$/Lv'rJ ªz'Rt𺷊8|ՌvHxEj2Dhh`p{y(@phsthzἣ 0|0zب~Ήp0b 9 ,=d@Z%dY!jH|`r wBvv8n۔NA}ȧԈ.qo(mtP8P@S>\%;"P!qfgvxTwX&ppL9e]6Z7!4l8oal@Nzv9@"i ɗm$ER%(?hx xXP>Zp[I zdxenh݈u%4Yz2 m(j`mt"?x @P8 IˋTeJ(M"h>>Nn>hAUϊk: q93Li{O @–aіٵf8@p,W!zz6cH~weѶ| ω9BP[pzhf!u,ӷSla%w8w}f95ZC)2 y] SX[æ$$]K\4Pmfe@ P` zU舼}( %c$g|_>$@T&B!FMT1ez '+RcZFƇ)oSC)CHM)ܫ*ZgJR~9KJ ^S%jbJ:AƉV dEƚZ\qڊgLG!e7U[dE5nFZ4;~iNL{*(fLb|*2NA6LDDJ}O>v'D* (Rhz#e+֤^j9(e7!=F+Dg#sO">I*I&^ߨ8@?0p ¡0wAPTx rxD #@r 9t~ cqجf9 !3HSGRtY*%&9^;r=-LA#P\W㑨 SR;ciT1xݤ)UZ&1h46O"h D&X8}a䬓J1M$ѫc*(Oֽǩܳ jl(GW%rU.nBuR{&' w7앗ô_`t[t9븸i)MP@0>˶zP-; (T1(R賏LG{xqvx{g~Fn@d " y'{S~{'irђxiiS9@Gwh"B;!@ )t ?iR2LNsn, SpvzgpG8GlgwG~&ͷ-Ef-\z. ~-Aj~^4 .K Qȫz#Lzwz߀ h~gjfiEuQO\y*)@, MyX 4ͥ8%R?Og42f |G1wfsFX $`@ H': a\!~1t`x?UGr`:< 'Y#5%QQ^W {oƱdɬg( @`@ P'|y"``D@(汊ZQ֠}``xZuB.6n[3@H!EGp}`2 | :>` } f~8JΑsL/tjY32& 7!VUt\# &a(  ȇ`OzlP$T Vv0; 0>#k-1Z 8 @ VY?힏Q;#@ErNEo`j.$#z]Q/@(c bц̷lMG@T pV hIYD< ySK1AH58p3@&R~BE}9}&u Ha9'8ei+Ep|lcIHC i7? a璓DfʠB\cw;8`pza a`l hF !E:^c47N RNCt9FMC>T 1ju&7F^Øs9l>IDUQFZ%fOw[lVpn+`d u Ѵ:K*akEYUĂ;Т#zu@@5~?yA1@bˌn|8\qČNC8i ,vZϡ'dyRDW@]z^e5#nQ8ƊP!<P1}#y$,@>GʹDH%Y7$}g9hJeN HiV:QxBq=G#0d 5Fl7 Ѐ ]:]r"$o2` @ 7k@ |n :#tǩG_s @gg!Ap $.UE O(2: 8 ~]%I#~ 4JfL`'&æYmHV> b AGe@72bvj'dM!@. d!tErgE:bg 2, đi#DfgT0',B`HM`ofdQ&fL$px!a|Tg6WP%@2[*E$n,zLB(ƭ.( 2R v(RCb&^**ì =$ e">,Bt)"$BgCKAĽюCLL*>.>),K} +K CEB6*JHk>겣5I 2 P.Eb~⺞4jY?l_d\9\EV+#">K:/ˮ9,FqD$*J{6R#q%ID*b)":6Rd',LIP1C^q:H,   @X4.B0XhtNm!Kj]J2֭qX" F'klZo0G.<&ˡ@)v(BaO= +/1Il2Z%kEߗ,t7G'Mh0V9;hYXj#]6jnre r&:KwJܿ0f*a`,{$`L+7jƧȃН h*$-jL'ygywgiui{g@hl@R@sY|G~kē$8gsqxA[i[zǩq.a* BV9$'[2 @ 5+̢0.RDIt#PIqaeD X"`hujWŧǙ"`Jwkljyٺ 6 2.7JڼR&(Ryx`QvT,H\"X%il!6&pvAC'A{x P@d@`&/@ }G @>TU"3ɻ4B@#*dbJP _{}[VR$~?$Ecs=ǐCv!c O qGj6ʿW@~Pb)')Ə?Ǩx ul&dDHHj 3=r,{l>c|@(C#,@|(2b&]A6ƈqD4[  ``p ǐϡpL 1a".I8$Rh1M(悦)e/$W LR,xԞVά%'*).J-II3Mǜ*bI@M(;5Ny\eDq3^J( # 3*Xgƒ a N4XS}q~R9EI :J4ВyIEs:)={Ƥ&YL=jSX rA,˩9fqrU)) YSIםXl w9*g #4E|V8xR3Dɖ*pW3e.QM|̑"Frbe1e?+ɩT&3M}ي]LFO Ft *J؛[O!t ɮESB jl`1F4`&K&YxRB{ !PS98jMfŌs;Uni z$=v͊s^p%1tҢȋS/4U!\"ռe2/ B oI%V 7Q#uQ;@Cpx\>ȬTL@5{:ZGJZnM`n3hXy9'h0_=7!>jDmBKI*9J5dD4i/CK#n2EbhO @-< pa ccКM= `@RYNy϶ymPi 2&t<1QzJR"Z-fY4 Gp+Ǣ~J'@aZځe  " ((Nq CĤfdcv>b@&Jȴ8~":%>&Ū:cfB"#=(ʜ^ #*,AL<)єȪyfc> (= MEꄊC]`B,85^*Z;%%*(/>jKQDn;¶cz7plNʪ$qn2BྪyR, :k3&NGd p|+rE$ hB'%K:fA&Y%AHll @. 0vbcѢl `(+QQJNUQ%cƚi}$&,/<\FFc8l@M_QRaaAgt0Q4ז7LPnzGQbsAmdm({ `fb!idZa!AO<d@hHO`4Җ($D\'%'KP*xuaSgArp-|k5\.=ilY\$o16h!1*rx f]Giv3 @ {Ha!I/( 0092tRdȪ% é"8?1#$!*(댫"ojJ@LM&"T2V9"phb&;TcL2S1SH)ӌN fIc-)C2u.ʌ*Gبqz,rQ׆3'7ȊAfB3 ,(džRQl(БBgÔ%@ `>KPǓDk`Z)k8542,8fQi-щ )l9̪&"&Tl*#ܞ~+8.x3򒪱j@|2&Jz"r/(' .LϙUQ; [+а-.p9*#bi;hDlVb璤2{cεx9A3W6QQӆ_J%QǸ%c'yl$%A~ _b<R-  i)X|-0jj@,-#F3g) Cу?76S*)ħR,Dq3 #)cu 1ɏsu5b 9$#6}is.9¦S9ط0P;ǥʈ>9:(/(3K:t@{I޼8 qS?83迣E <|@w}!yۗ$gkJɪÐI>3  A B Dq"@G#A pKGe$ʡh t vU:'C?ٕJ5'gOI4~ 1}nwAt9͚NZMbBRFJhZF&L%x­y:E&Ks(J3J#=A12-RJ2 R!;'UsLu`֭ͬo%sk4M'X֙śrZ.r*i-?5NSpN&-=n%/ϫn&oI3j4(~}GwGQvayx((``" b()|{+<}Ňtz'~))r{%a֣y.A91|G(Td+k6)륯L9{Qqx`DGAth_"},*N~6`J !p#b t| vJ۝SwǑmH AhD{\}gFA*%֨+_^{F`Faw9G|GvHl `\A87ONID5P6~4ʳ{7yT/|GqizSg}Pk'ƨ|]T+”``hR.Wp{m`: !8wy+숅FEg*vefg[h @wrxŧ^~`H@X " 8@01=j @B!G86Zf~T@zxe~]p. !&oF  `H~}z18Ǡ @:jC*1$( @xT gMD"S\DǺ7u> 8X~\ ~=p $~ԺN%4vڤLм 0H)=&~ (/G%Mf:.R) HHg v9iFC ]߁@"`COyZ/ޠM[iDgD)S~2)q DkЂ+䔝 t$hklܳ2m%5]#e!YJChq<$&dϊ#?X!CoYB$""91m5c !Ùl"K٭J@ 5+,G&?fUfZI4g&$@{de4eCE8 ]l)Li?` 3'&Ҡ*49}HeSEZLB3 #fE4 V QY 0XI Θ8K*V~MQ҄DQeSNAl$nx3lv 1'XIZyǘzvT儲2ȃ8:UȯsW'F/జ^%ǙVW%u !NB1rjdui1Lnusi 4shO1`y!F6)/<%176қho] ;qnipS]g :s`2!9XS]%IƛةUrV`e~ldP 6\ 7>3%<Ǫ7#;PiL{(qH1x#Ѡ\C1:r.AҜdG'@^Q @N }L~Jh5Z(zQ4} -% ~1 pfv0y* Aq:E cX:DCg模ۀFIA8)>QS8? 9G#hp Ax$_SCT}8t?YF0=n8G~@k";ذ X45ph@FV#);^w5֑FtM\RgQ  m q3O~aҀ "=C %hmF_+H40v8pZ ";RP;8YxRy0E^ vd%'@Uv=fgZU8':v_Yے(w(q{'*yF5(0 /@y8AM9_(P 4 Ix)F"Pwzp O#2=2[/c*l @2E`S@uYF2iʀ  8:p)r(Z&z Z/I + ha y& 1H g [)&ʮfW ɖ믏2)J  ڟЫ(x(U*c :z8Dn&d4,rrைʌcQ8R_{+ EJJLSq*Y ź@Ȥʙ. LS*A9x@/*rGQ "%r }_x4"l2/bhTpCߐ*G+c00ꖢRȄTY |ZĀ')mn#|j -R;IIoUę؜*iHʦ[? AYFY:,|Md ;), x1CӺ@={o!k%@4¿8 Y@R9%Ac=RXuyXOS{VHS%˘?{OjX[h 8IyHuPy*^), Ȗ9I ` lei8rl9_@Ai{ aԟ{İ0\ڮEt {*Q0_I ~:PrudЫRLjR ǮTѭ>Ir< 0F?1 ,H[ʳRQÅ s D% C.\lVǔ\}ߺ{,43uPҳ*@Dϊ+P$0ԌFZIfdI\ <3A}Ma&Czп<Œv%H?FSTq:;$>M,^*Q'( e-H}Trb'3BMD^1"`@7*Q `³qDhүQLΎxʩ9-Ye7gdpDCa:℩<`m-!}qN'ʚt { .J@n0<_EfW +,SNȄS1{U髚x|5 ( @0sI@E-;uj0ox| &n)59 p P(am:, ^L0w)u0tpo-k2謴ݦhT@vTy6Aj9H@)(.y,VRrpn0 X0I+Xb55֙:0vHsaupszyz ()YSi]0~{z NR00º5!lƦ؛Zpnoxopa9z#"`%b8+U8Uqƨˏ%@K(?$NJ4WI^U0`;$ |9yoXw=~8 0Ȁes} !=>]4 ߝt?_m@qH=@{{p{Hn{D.@ ]Uѩ;!q513}k kixm@xQP UO7@HK47H p^Hq qz4 ѕAfKY55:*pP}; _&gz1nl\e7#NG$"?ѓPG.Wpր h{yd4Ć$PxЩ1.rR?ê. r E6#Ia4ŴH'GT|it'4´ -HĩTP?n&v;%&D000łg? |66?cfTӢɤQZ2SFw VtN'6G%KU,j{{o #2fL2zvyխySGI'0{q7ztHXw߮2gf IcEߣJ4~  Z (# `X$%CPh c c H8,)#FdP #H84_Ep_$?ѩB17`QLr&CJ5*k0(bu1"RmD/t+4LbU_o# A蝆 ա.ro4RltV} ,Nj2{hMo$O6Z ^+Z&4ufK(Ѣ)h-0qh (`";S@DRFW^Cq6id! &`8#Bit q ʓjFl?v u9Kq$5ucq x>G$AĮWVV*!b"RsU@?@ d B>Ir*5rUYb.rJ3l3-T>;XLd .U.@hd `8L'Jk@| : p"thLS=$xP_99g5n5iVG8ka27ON jjfUXgNi;աY;(/Frrp}5pқ$M/. tvՙגryM({sA&$1' S>QV/t{1s(G>WD +YK0'Fh<=uP:PQ>;SSXJ f%v,Gkʱ}CF\E>>Rc =IZgZZ sAdC !c6XbL; "]HA?)F YVZΥ({GZ&TkVг?n圓T\CIUA@lJb[iPORD;.ʺ9-(tDD+Ga-N3|L/HbܻoA.iC˩@;)5je"I[ `C,]\8(`BNm9r(g=t?*U,Y vȣGkyE [Ր!FiaKŲ'; dA̴VbXVpdO ŝ7;S{CzQ䣇GZ p40.ۈ?Q=,/D Xs ;SGt~b^4R?=H* J j,xGcSw8@ DA;/}04g?j!)"d:pq 7vKö35^ 3y7X+t܌n#c xS=ìy`V 8 *;($՛rJ:hhn!2G8GҶE$PBxm{ Ǟd  W]P̰|QHyEOӵ& h{U<}*p?X#{@ >kv,v]]TD T\4E2, bZ/[L>zG4x!;ǒ0í? $PTcG@0@z7.P%oP3@CI&CB`"4*/VN"jl[\C4KnP xzÜ>X"b8D$:?D.) zHApK=Q\;̊G6Qī;"#f[II,%"ʋD3l3G1ܪ˪Ɋb**=tA c,j' +6l0 ;kn$+2~OH,Ac|6AȬ.f0r;}K+` l M,KhR̯)2 ,NV ‰, -L2NA DŽM'Q=C8i- ,H8d<4&KX- 4CR".Ujy{-l6 b~(c/(0&lP"`,E<}`^Lh1o8j@ZjCz=`!zHW !AS&tAl28@6`2v`$w dѮč "'&2DLJv! m `!o(\@pzwrjq(t(n1r'^F^f|ZTϜ@ a &`QOT|GT$u>OZT@ @ BR|M AjB$x )rgUJ^$EM[l}baZ8z$`&wOF!!2@l`W +d4o BF!Oz`z`a6bN-"b#V!!aTdUvw,Rd[sn[DXC,@S`$QZ$5Md~1nҲXwM^Jraiq@Xf`1e`>I~@rmJ)J)7cW)k:`9pA.%CgAK"k;ӏSu!&p@n,*#CQ..z a!x91 * 2?882믓ԜBl$걜6A7$C0#,QRBd?2.i>X#l`3tb*([Y>18,].M/A=ɠc- xsd/Bbʙƨ)+ɊK@ꆿt9j=Elq.war|wā`n` ޫ*-1ԯuRDRWڒRs<^dMx :\bT`^i&qV&[RD 1q&!, @!d`(<@FkoAQwb. =A1(8K` `ZL* j(-dHuZ`~"@HAro?ՙq2J&Bnd!!\!ӆ$KwT`ʈAl(ݤ0Bae.㇞pAސ7#1Gb+ !H"[aА!VTyN(8V}vjWntA!`4@bVqURw:vNWMU!AjDEup ?phX)40ٛ7"?P0Ot @0GR+@R'C HDKGⱰ A(I8'*Qh,gR)JKA`Lpt@5M TCˋ␅H#P2Dj!Ii4VLqPL2*P4ʑ̐OL$'wiv'Qsg{}]~`* A`hH~g#Ǩo|"N@ Wj7. =3΢cQ%>Fp 9Fx} |9;(L"8X(7@\ ;H$ T)wV6 |X 0*m%GmarMw@,Y@-ňƨh@jz {MX@C)!`5` @{ ' z$KV;cz\` `1rY<[TjK YO'FGack 4F(_ap (NnXA 9Ƹ9h BD\3.9|gRAf3|4mAQ=@p@TL1 u04@(,I _G´58)́eW¶) P 9Hf <40&T 8!us!j$BBbcza30SE'%Kl^-j nvԲsAH;fx9n6#ls|Tb$4ДRH/ drkG&|QmSJS(t>)YJrʱi^WxfٞjA^mRAi0=JpqK$lZ_U-̄^, yO&KrWr5FJũ֛5J8@0<*IR~m- uVJ؝dlʒ+GwWdxUe^_?L%'GcQ8XCwӬm ` C =9\gܐը>Gc~:G(Ǟ vAk .r~(A9@z>^*cya7 j5wⰱ}UH$ : `:!D`f h$nɒǽ۞iU\a:CN:tpx|x|B/$1qps-'(Ω$WYhOPs`iH K*Yqy@{PHXāӢ Q%Eڶ 3 ԗYԨr:"e;< `l\+i9j00Xnoesy& ;tj i}0 (XGjՖ~aALrPnt@ F 22[G Nx{z0~zxz;G ɲ/o`(i)b@|X 'Ea%4sђ[3 6r9PaV0qyy` &X$ŀC6ȸ)37h x.rW3S;b6O-dK45H&̑C CTY`1 y #qMLĪ29f̳)Oq= z8 2ص7LxȮm701[*8#2ܴKxA.܋ 3|5{9*:֒ j3P3m㬒PA*d 0082,d5/a.&20 ,(,:H@ ;9O+ϣ4 IF[[2xĐK<0܋Y451/ R} 1Sbh˓ 遌L4.D cjz qUT+`4.T =ASќГ+a̒JAAp}NسL37}͚>  0/3 k _/c[37\̊I) EshM,U-K4Pe(54$L0X{IIo jՌKxsXpkptt@BgK FQ ul3 }p LZ8{5`ڧy8aʴ́ ^  TX8U|Xu*xIeGJDÀ(f|\>D jR(8;Kf/<|ѪNPb?Cr4a$7I}3Xf8\g$U២HC ! 252`3 I1-S֘QiALE0R$T/83@3zQm?%I5P <6İ}Ra=I5sdX z贐82NT- !b6MdM^0Bq1Mp#~vo`i.2R }DZk KLMwPjS]B``oݮ8 C = jE&i4Mvr01+2 2(J*Q\3jV E1Tkj2zh}eiuQ I}c T-kzU-O-[6E? Vѳߧ ѨM&n V o5bi_TV̘R&gcS^ hН?返e; ̳iRՆK8miS0NbOV@mlvZndϘ$X]뎩SHrrj +Nou^$x(tpoC8=zKrJ#DApQ05W^ُw ~h$H>,Ix^ (b i:V}՚b[#+jK`qᅇB&؆h+`vv|( H8*htt;J1:Y^)f !%{Ne(q0wk|lsbx9Ћ}íޞ1)9OиE rseXjͩz ¦Xʁp""` 0@u[d=)n七4T.hYˇw"({<()ȱ ɈXXrHpx{x&  qhzk|3H= n<;-r؛Xmu`pԺ%U,$0`X U(K&m$T^i&hhիGƟzu}QK)@xH:~_4.{sn'{q\P`P6pl&`  _%D4e :]l1]'P$! `8>`c|C_0@`[kp;[ǛDAA P|@@p82 D >`"@CnaL&Nqx,?jB%9Bt:=:!/7.}O {=SȻϷH@u(__P:o;*K@8  0$ :p(P~Q\fǑ㬣Grmqd'Qp; P K:, @|6`[jg?jRpA5!q2rFX2 iň'h MR??M4Χ)hZ0$X!3sENuLPrP-scW]N/5U?@K[PHO4ҏD@GSZ;iYۖUUmgȠ9PAtqCnNZA(pη1hT@mJ&iME7mW![-ewxEMuHN`^!Aa&e]ZqNÑG)ezEU;MꌵdSd]ۗX9SW61dWTTGZ+T݉SWdהQf,e;Y};k%_[s 7Ivf5gj֝$;uMS=f8_go !IՎ5s]Vba,1ǓA<(d{A-PZUC d`a*j{Kw&lKy7Bi+4;Gr<#{PT A?a@BPy ȺRB)qd~:pz>ǹzTGEBbEl\9u Ax@ T  O0@8cwn-`sySO"2%z16Xu@@G}"r1z(BӰ#t`pN/ xA6H-1㸅N$ T9i ` @Ygu(M!9lIp|"B4Bn Q"] d+%8W ",>ǐ#w=(*8 0. A+}<0=84H>9@'nSˠül<0#Ƃe=`,@AH)` [@ RXDžt47JDy1wh l ĬSi:BzL]@x \яq=#@ `j-_9H}j!x6@@S)p^ۘRt:kVOVO%!! r+THrh.|pZ /W'[( m-yy;ͫm˭Ki:⭖<)+d3.<|ʔџ,?2C3B5hޤct&֦rd2Nޔs b (zk?:wVgtPƅFT/lBznLoăR(&nX~g)ꂑfx,<2tŧd%ŢMNԏf|fzTFAR|BkhLPnZ/|WNmj>SNFqDY||N{4P6vj0st( 茢L/|eLzLfF`cn[nr.(Ge@r(Zs MނF /0vQ4BȎւDFLG\Fp@Nܥ?L#,~B6d$-9JRXGDp FH@:B*Db⠣|")0T@/:#AB!! oDjLr x/턜$ɚ"< ڷ@@?B4kֹ<Ș)j`j̠4Ქ@ hi^P ̀%*TA ^@!H| |kC0@6J"<@b$%ahel@ :J/F<qf;F'+aI1-(JVabN K`H ر(X 5&@:`89a!lZte&p@   63&!-xΞ ,B`, NPJ~-$ˌd"l Nrk^DT T1<<@"3~aȡɘ|.UQj"+v0 a5! @<< *SD!$aH% &D!kz~B Q *la"&\.L~!HxF b,.JFEEbk"J̶%!.ԗw>DA(>"  aTL/X_#<`lļNE_mP㦝!Ā&^ es%[n)8aa̕Rs$*j]LDFt(q/ @fo``?EfEE~a 帅blV1Lcs(evGtV\jdzH)$Q*V'0Njo30FWT'KO%:V\Qvj4ZR|W%A$RTxX1c(lz]e.# sER/yp0R:x7c4nnw,P@*ԛ^`&N"栁A*VV*Rt*`*71.+GYan8C"!2pN `ĭ2POfVϖD0ֲ$TrSq <#=5d@&:=(pl@8+hB`D!3dLbHaژ1I\Q^..q ":@>X.8a|!ۏ!W:rD !=Y"1aI2ԕ `c˗NP@-5 A`T+K~/ aA3fP[rh:L/9]3d9G2L.!z/ eJ($( -N*T-$!Ǫ+$"F<͢ԏ)z;ͬA%!␁\|T ^ n*&2*2qIwF[rdByRSg,UB7BX2MUS"b_6wP$n ozan`xjlfg4z*yp`lvaا!onyPupin ^7-skWJpYt 7~PLec ׇa*4xjfgqfx?y_OPh h(L{`xf|34D(e=^g& ¡h,2&Q{PvA)D`L1\:NW4 Ls>èR"k5Wx={x/4KP0Jo9c ^pkz"JH긚% l8؆|}qy| h$!@X`6*غ ]6h:\pyAH2 Ioz華+|(ѨgtL`8@* 2  hx'ytYt0@`H!~J6`nGHGL'{ʋz栩'fmp2tO&) ʹ_`=X Dd C뚾HÄ|8GH(|4^ԋ.+ ,ǙL 6ɮ*`0:QE_kr.ٮff1nu R t `>06gWF56Kd!Ѷp+cآ蒓=Kuz޿-օ'5>+@ҋ%p{Wzw 4köi 7Hn&%fI↬fV|9Vf̟FΤ,럪P@#saE<$RZ3yO?Tl ZQ,0}f3Ja <=zp~I9;$ kIM蔿+w(Vϴ$";"ܙWW _yP%3f..(!:p˄/p>,^GM3^M_oC܁᫽fFͭè1[vᎾns bPF%%RjQ MB×NC kF 4jޜpU" ?p?—dFAÆ4?vn,RDh2n?6cЋE KV메,( ztM3!LvG6Η 30͸JpuNgG)% VՇch `eWj!?ݳg{.@l&) ye0 @<<>ZOPnB(qlüԐh6c>}bR z;cln( )b@R/5ǐ n 0`l l.`Ocz6$V0*Vۧ%92PN(w\ɍ@ B Cv0L  ݂18FTֻ#䲊KA ho;2DPz#l1σy=|PJ  9}Vk= 7@.7Ps8Kk|xU=[XKIq/& t8L4AYx8V$08 fi)$``S2]mCS9  lt(jTǠpQ)Y'o ?2{XS[qQ3:F|!P\xQs%4C&v4R3mK:>ć #:~^v] 81üsÊ7*ȓe OMUaD\P urRTZyhH||R+S@~$CG(~=Y[LԸ  VmԖv{uapyq0بcvĮ@BMS[.f%2GaY_އǙgC &ؕX4u^K'0I&Mpq|Ҳ2$,Ҙ!"7$IjtҺz :grlܞ3?w(*h"٘2^ Gq!'A2!t']"zM"cJH!ig'B'?,*B8 LRj7&0(j3'=zZ) R+T#*j%@| "2i 18k zg'"4BM /D j:P@ 9>\((%)Aj}B1H'R)'*jyZ" B4]({(%#Jw BY 7*((ʻBZ$1%\E[ ax&1dl;!)Drj"5 Ү#J|YAZ+wLW|ctBnY D{JFFwT>H)ʭ)j]") FX@Rjơc\Is293}*$%IqbaBSc-hxpx>rHj?X <:S<#1>л|; xx 2+)9 `y89Rʠ<"C8 @(@*xE3k(*B|N; P T7P qcv`(ܶI;c ȼيZ̕<ؐ|xx3ȥP KwBv0k})j)O@,j: ñjp0 @ XSȞtrq8S*Xڡm"ÆmX<[C( 40 y6tuXs+y ``SL€{Z!}Ȱ6 B/i@!HIp0 ` }Xqq[7+輘8|}QG1op`oHHXHM| Qs X 3X@(LJ@}b0+#.[;@y@9P*.Z:R1YxkE 0zsX!$%03Q򙠰`+  rؓq ل縸p@ Y>2BƲ,ױ[8cTԇ-¼({(@T5,4ɛ}*)Xhh'@H9%ʉ*/Sg( [֠ Ӏqr(Z?`|{ `yy Qla俭Tr0w{ cŀ` 0xzXn ԽYww-~l\Hxx}{iQFt׍-XSM48zm^<6*X@Zf WK%Լڥ=ixs2 ~PyHfe 29,sh xx 㥼:QY RXp/5ϒ:s.B$P p [`˶jр a1p-hgX^8`:(΀ 2)vTN )ƉE\kjF#T(^YD O %cKI qvlB {бR$J2Hn ,I$GV bf@Fawr"a]üAi&N:(@2)(C~\"b%tt>lYA]\,A$^`+hD:ʮqFi忧F*| ô"hFe(?D6F>a6J1C)\|ʼn;q&&*OIBAeævD)-'\&"8A 'ߚG\ B: }e{ߟE2e&@d] Dž|5|]d(BvϚ|(|KUZ":0x#!pt*# ,J@⑸+ A(Sd~ws\G3yO18H*~Ub `Ge",6+|>iglFl  =0ϜE7ڲ B@`UxBAPP35~bx\^v]G4 xbp؅}>ﷵZ߯s{A`pX ڇ0@"z @}ѩG I4 P  I ~@; , oF2| Bܱ#NʰQʄG}9sxg}2~> 0 4 8  ikG՝=1  6@( #j.KyLfN8u;Ǩ$䱏<)T0f TGXJsnF`b0 &X@$<Ϊu5%;䀍'7qDP-!8pH SgHZP?& &Vr&gKNs' ֤c_$$:Gp|q!;GEh~X!ab;RLIG1h47`#s b=J 7&ڠ6(M!64 ̆ʴJΞbځni#鐥nH 1*Ph)jDlj(vhJhh,"fd)t^BBidH: dЊ8|ʾu+$)VbK+ pvl#bةdF jS~ @hTfJL>6$騦 2rz*ZVP:T%J*BfhZ4ڡ*䑨d HD$:p~< T pqb"%Hw*Fk P<蘰 `H$`d_ ʕphj@v*I0 Hc 80jPĎ)4¸ P(a0u.H~n _H FɜVpr)}r) V.9j1fILJ q0 I`F"#ƈJ)JP@(.bS0i *  *I'~MQ!6-a!!e2"27NabGN*4jDhBHaNL`"h,G&O#3E"T!Q \` X >Aant+cto`<$jLB`.Z`>AAdBfL"S4: l֧b9P >'0.44h10e^SCxebDƐl"e:i^0滌>qcKj$V+p-M )SahN+,@2. \h ThC!YN#+b"  x)ú fd0-V`&V6!d!U>&kv^F}0 tnEmL"vd]/H􇆙fB@`H@jA6,ʿ rv@<{ժ,a!aAWDV Tg24 +i@ޔRiQD*:H.*r؍.QH:0ppЦ# :rv/j#4`1c +ʥPP$,qv[hxZL c7Cb +%yIr:7C0Di)~~:+ " )o 1 FF즪FjB)5zwΦ&}J .2G{):̆pqBXhM""!$y&&j)0j!e^)]2YxN)/$ק" JJ2ZY}4M3HQN:W{ T_鉗Oo-ʵ" ؆G[vK"BW)zW2 l}B?م:0#Jp2GjX%i_x[s2(V99*Ҧ9 @)zQх= B*k*Ɉb/wύ A"s}L(%!a;AS)D&`dan!3.x 2eCՆ7^B9DA'`Ry IH"DrU,boA N-jH3 $<u2?/_adH\48&&?h~4~5gdFV&Ni0Ŷ?f @<@! efT1%W^wQBw 8*OA:!ŮbHtMBqgGXX!!ѧ$>s'$ !i Ք!.$@$ 33? OtsE@0`*Z'jeNx@xiFbVG]>:,NG+,K.63F$&LvaHO]#0:aIzؔ2bƹc!.~fE']Vb "L(;Ml@A@\:!* ZAv!iQgirG;ȳ8NQ>t@!`gWb-@C!;/=BKUiöL0!D)҈B,n1ea7=`,`&ND=a@IY:;-(VK!!ńE$0cMy$W4 :Dv %DR$i@Ӕ~FPyb"иs#p.5|K y1"0>.)ћzg[j.W|T)WoS(蓐@Y/)b,qԪfn*>RV^73xɐc#J4QV$3sX)𲐔zp%*Jv`ܬȶ7pu#^(| M2RVc҄BIOPXn2&bQIbeݭ걏y0Yﰂb`B`BApb/?I%Rxt* J`O\Q hL-$c'3Ρ&1JGepT Gb2uR/gr|>D&F/*۴2AA 7GNeXft^>Xn(4AgP"ա.r0cZ$Fk:MPMf9 fjQR G\$S~["Sh>$7kܔ?ocr7N;}/(F!|A*'vX 5y癪qwh: +~>$/ 0G'y"~a*G lq?"? =( 3!}G *yl7* g}gPg|N|~>:Xz\.|GQ{{Y|ґj<1B"ΛѠ  h$Y+2[xP$ЈqX `2:`NqV{ГL{G}w'#~<A ~Y(krCŬa6[(K:Ӏ'wDžzM$C,eb|(X!V=0$3 `T{yghZJB'V??ܨY6ǀ:lfyg H@ @, 6 `_)rQyGapLA!yߵ񫌣**f~+:Hwi{h:8  |GauCBiv^~ epxH^)hɀ x}P #-'>& ZvA=m& !~#9R3hE c>'}*X `,Q0tt!8p%d{]?kːF\#ġ2FH` /LJj-t4@XJ5TBQN17IN!H˩>ytmẺf;rX;'’H͵H-śrZ-L"e˝mRyO8Ej]MLfbpŊbɑ#-JdY312EEi4)5.PNUu1ңw)#ȗ浇 :I)}+%󄶗ȷ 5=[T FP-A9U—6՚*Zj}evنORhRLT,~dOOV@z0*j\N_8䆙BYuA\fy+Y_nk^Ă;YJ;p0dՍ1S a!ָRA1i.5`ZWiFzP*+7n~CJg98S)).ؤZ8KnuR+d˹~6,Q[_ UHt9@ÅwY = =(lt`>G/hB2&#i ѠV  $E+ av}~x!"9x, t $=ݹ<:p> H(L«FA0peˆfZΉ|CX'5*p5BZdz%rtL] `tG{@%'{)M.G\. l ;[߅B9w%tV[ ^3(yʵz"%C( (h.3Pd鑻=T8G`#l( A 8`q7;*z63lm76{\ +1ξn(rqԇFfpt -* ޚRL` kVaBw @0 (Ͳ+6":pGZ~*4{u!߀i ?1//@%4w{ГВ u;0tt( @bXk@pykCc*="5yxz"R I!CFpx @u!+H ࣏Z [0ه J#7x|!YdgR;< "CpP 8~x|8`~Hs}I70hv0aU8r{Unh ;  أ.(:+ 0+} .'z~08 3b,!P22|1<*Y-k-¨rB* ٖc22 ju 01;)<ۍ0ж$rxA֪G܍Z8r2 Ȋ <28.ag )ri.b+"w$Dr2l h-(*3*tdy f Ũ*((1{£(ďhqr  v $"?pŠx6"ëi*Ibé14Hdz f( 3||*B ˒($MpS 1ߎ ҵ,ࠉʩ1(,̤MhD  0N ʫK˦rM) I 6 ز:«&rrйϪ?O 2B .()/S),֬2u < rl#\<2ʙerbQ\t* G4.fa5:pnY| )6282ruAH ˍ3@}yr#Xn BC2#FQ?I:%` R 8i{d Yߔ+A":›%Swi]뚁xӽQHhn0uC2a=ݓ9@~a~ [P6 `nPm@ 2,p€`z$]RI`ٚp?^7wÖH0V2G S ;Kts?0 (hhЂcC!AeGUu Uo{pu0f@\i:-/@s@ ,î&H<`Ll1ٚ2Fs5(1*dt U2"0Kc-䔌-a +*LDt t[<附ű\ ]Nj-1P Af e׫(ƃ*+Q#2]8x0ϚNt ̎y(Af)vO؊?<0.lNjjOl6Sͤsg*K]&HՄ"8#ή LՎaP\ΆjJk Vy:3p`LPciFhMtLꧭNC2Q'hTve FW~ҏTKa ini~e{FrȖ[dѪ,Ίk %OLzkT&²e~[Hn+p#PxRgDIs[:m2~юr3N%$ܰrؑWsomXuT ҀBS2900ӴQw d$H8XpkaT&쾇3m&-dIĆ5`bB`ʪ=Si^uQ%BaaC'F WP|wqD7jy^_8 dr ~w-bA)͈kd# Dy[\^{9[ߞjhsb[Ysn"XYXuu!.\b 7Ÿ:TXu X q't, 9?qEyWQ) }q;?%] !5qhq$p`nl `|#+Y3u"OƽO7:lhh[+Oa@ [ f}߇suXt`wU5 /JJ1D|y"EiD='C DO7x|"2bNb89)e2(Eu"Hᅵ^/Yο` p Xmoc55X̺8Ơ"#"tHn `xB2L9sяpqJ9BԐ6PBPy![1OE7_#y<X!ؓ!kXe8\xrk?@` +aAఀCaF! D(!AXj@1(<&7A!/Sħ0T(Tm+)YtuD] u[Ҩs8gHذQ8uvCVoB6ۤpmd_ح3W+`QhZA$yVpnvxh=N 3l' [=ܨ5SdZ$*J}8غ茧kI B?U$?2]s܄4JM 1it'!t'!yy V@PQ7 Dm 80}Gxfzg~"PuGw߼*  p '9}g84 @* h:&oz` @X&nF =8L|G}|iv'~p(Zt n&s@ yQ'y;}jUng D~` @w,o]sqB*x`)} ,a31.wyx]D Giwvo >x c#p7B6 Gv+t!@4 ")1䥹7=#xQ I؏r@ ~WAS@}A@0 M> U0 #\{CGB-}xB@x/2t {P,2rU\0 (p< A or◣FmTv<@VD0 5#o 2(cv W Kէ@(U~st%(9t̖"2f8Mb3Zus>PB?BG)sq1Jh!S@ Q"@Gh-y66m ?ַۏ]ϽBWc>o>RDتxhCdm5(ӒͼaGPtHudGDݳҏZhwV<t 4Nc#;`ﲖ@@(&@& (a/f  <<*n(k2b`P]sb"`|pA $@$ I<-dX&on5 +vhi HG H/Ƃ wɨpna)|2`j ![( / ~i@& *`4,@( d4aaARRB12b GX`{*dzԥaaO4# 4\=Qxq 1bvp}!LʨoP`lx!"bFtf |mĈ,G`m@  *hAP'Hli,/8fڜ~^@ ym4I0iF64!'A(W3*Ryffb /0N" °f:h@Xu˺eBfe] , 2hbAva ff ,`8 bBT#$J3#^6InC8-lCDc?qʍYe2GĚWd7p5T%?R+,W*%!# 'LBǒNJ0<#ۍ6ӌLD+$# >C4*(-sC["8kKŌE8R R̫CFd7bZ&D7nnhlcx@e^.XӼK=ED(wA3lٓ^HsB&ԔpMP#!愝5DFdBe:ðP·?}03:tK-s|KGJ;3>FBdJ+= /#ZE 2E 9v)dY *ætL='3M*46Ct:BGŅz^NulCTt6ECE5j1n 4G YP؂x`)Ô3h=;2Vd4NUc<bEKU-$xN24Pea> kPCT?&LpTMRxa aaa1da&`B@64Ơd2'Padyb!!E)cG̈df*Mka,"a_%~!fV V tJ;d!!!!y\j pAev`Vap`bk!A!᪮Na.p`,.}aʙf)N< : 6JPZ1 %w "!ba`@>@ fhD{b%w `6S<|a䊒ǫs(pJ&K#<тs"g&غC/n1zH%C* 01hJJB'fwt&`F6\+xeFSZFҬqGR$p#TX_@ .63HFn:A\Hnp@JJN{0'N60x,hjo&Hc ,b$j88-oQRG\*G|ʌ7 Xq4rj":҃AW ., 4&>vm{!f)u Aʺk&@,jqTb.QʺK ,ooI~X \u8Nj@s">&9`\ %4DpadL=I~a6@Pn"&aᆺZ*b14wUB&K%do8'62=Z+VVͧ#>YLJPI=," 0œm? 6"%>%~BTIU¬uăgG;?S>¸Nldz!M뼾* [HYf$)6ξC[# ܿ-eXl%ZV~z@v':{@~H{-Nr(؏C3K,5‚D3GbAMYJ^[˨q@yM+C{H׻C*$*;Lt,mX1{g Ku+Nq]%% Ak5j'b/Ӹ j:dM'M AjC$K#/]Ә8K"mԺx:3?Ӽ1MiFw^.U %t0sP޻*)M1v}պYhD9@-фU̥|ULTJuH4ĺVb[nVF_ .uT`L J^W [R\ kg9t'qpqccD[x0 "\t9"Sn}_w`H>Qؘ{X8 P=p:-eXB]kLnzRfYN&ת `Cxa8x> %: (*,`,H\Op?E`>(C솞2ڃ߱M{h=hh"8 . H@ `4 @28 {> C~>q2@ %jf~>z}xm z,<P@@ClrJ9cyʼn?Xp(F~&ӈ2$Ȓ`x`$ .'~=$4P?t!8i#3RM8Ј`h(P q6@{Y`p> 4X~*0ٝ\!Hk 6(42`@st9G0Co=\_SNC HV֌R#{r<% SmeZE"fw2^ T r|IxC~4ϙGVl<# 4^zGwQt81,~?#|_ <6bui  p&`. H3theq'9fy=#xUX 3)\:@Q#1 6׸b%kP |  @J@#wT{# ~; |ՀHqi ,le.)$d &H }7~LNpk⒵Wӕ~*]b|o `O{-OVF a6RKZlod(u1!%6 xV#r˭}$6qj(rѺC{fɣ&[fyܻHq1q&_Kyj, vpuHuy08 0ۆ XX*Њ%!99.xzXB[I (A *((h*"?t< #H(hЦ;$bkZ,Pp. } 0vq@h.zE(x #bXއJXj."˰389 8)2G@.``q`p XP +iv|Nz) Z("-`X C ;>yi(螀(-7 %| i"#˜p݊R&kvXv `~0XXH)ꎫ"\t x#X]##X$!ȉ\#G l7*nn0Jczxs"zoB|| ##x ]"r 8bד w Èa捨2?)p3z X @'P!x% (:# 5< Ѳpyܗ+@ȓ;)vP3Jw )*34!sNk*$:0Rx ИPzz h꬚0v L(xCz'"̥z<4:Lȿ b;[8<@RLj?!@ i7. CBJ|w{0S=pPpz5Z$9?^ts3k@eS,!є!,>k+{{!9dU%<ӐISܗX >yx:S#g,?q<5tm]8pPX9kv|QT3r]a|)q3gU+=z>:ץ)Q-}Q!1NVQN^VV |{{F "wp i(C](XR?$.6"qk šY73>hja#$6"&%H xҐj384)F x ?R]- M b&jCf#Ѐ[pz:N,@ LԀh  \`zIqre2 VY:\k'S:k,hFQB (ާ0K߀  x.竺0z=^GD~a/ bѓD"xnY#|/QTk03bMP شs]n*8l7 |a|H @n ,wr9\.q{i^H,C)@ -oqW@:'ˀ9Pv]8PX?ϸڸ\;=k~ԮUz^'{|>0` ,`GxOX. Ò`J |o}D)bnRn&"| x**y!GywD1IÒLJؠNB&Ũܴ%*8-p$ `ʦp q-"6y{qihT 8Yu:%1+.D8jk0֧Zk\SֲjSqGAs i>@(, rƩbF%S h 2 " `-VL8u{Ze0ӊ9XX8uZ2<#. WH;0;23,6dxN+ a3b~]9y_d뛎ְ5nN*5k\{f%zm칄Jï^uncYZlYNP[䙔kؾ>juSѐٚbZtkײgr5dYAA0jё}NSbnz(dU=kE1'~_mjI?Z͉a(TÝk; Ycd &DmI5J[z4]_k yf?״YsU4HX-ͅ2EZ2#W qeݶ, Zi68Ƙ#M<\#xuXXg%-;TԙS,8:ʝu8EF#+ sb6DFl-ʼ_qiW2g ߻h2A}+6Ol$R >BMtD`ڴhFZmp`U<ǮIŒ\E) Pu98cpQL h`0Ԃ@> Xpr lo}cҙN}&yJ{4@x ])fdYp.E`$:I=bD@&3Ps3zDDQF5J+@&PŰ"P wB |h pUrEED~(T̎yI Qɰ &Eش.,7(@)x#%\ gY@@ ]P$\ #TcꮑpY^D( B N8 lФe#$?i&%,Z1<p&mH@R H4̨vOZE > Ÿp[L,} ?X_ 0E >A @| H2w7s[0I2U|XiCu!N` /y H$zUP2 &ճĤVWL80wD'#ցi = j7[5B.TAr9>7 yZ[tDt` :u19-QT. E㚄T\*rHT$W(70ArcQJx;*A^E)F$lPљ8:{^b%Y4p ȀP.tK~Xxq<'\,& 2{AN+X  @ SgpBؘ#F»ؙ f=8.Jb1YLu6&c JLyQr n$:$ U=Kya`J}q?O6n}e0Hx=`d󘷅xnc]ks =y#KU]Wi6"߄K aledD֦ lr K'h&e1Y%NrD?5-*+Qb 貊/&F lƁ։Gg@-z}OX')~ȪPogGfK2L/to(YBWx(.Άlt`nVD/J:KaGXlvF\agt,pDjjgk;'zc%)H{)kGXp'hbK0 hh<'H &H@'6Uf ui-ЖmHu&"jp~& TDVi>snd}z0(2& pot8cdI|ltڬI.)ZurKiEi`f0BdC #WE)䝃!>>!t@`@`""Vh2ž ro&;-"$"& )œd8TJi6B ;|p R@>!AAҪN :;;BAE8C|$k*4|7 ΊDNDH)+!) /@ `kj iB2 &X R2  >a!0| 3 zE!mbx!E#p,a!".)-*T. Lk,ڊFUL "'brD  j"jAd¾jl È(A!: Kf`bf/6Wb!&QU0ē[ B80 i IVՂ/0`.,`F6 Lªx f$4 @D#@%J cji j>2*v<cBacR!$N74Y &WWz; ACƂ“.bFL:y~"~F v`4,DK*6Z$( "^<t Γ`BoO@.0AS=|!(ڄrFgF~(rR.qbc nGhPhkXNI 1Gx/Tk(L<.r+~SH F@DC@0B$%"M~`Y:!uj(UK6 *"< l21=x!~)G b&ZÍwA[FLB$9?&4$A.QkFDRLo`c8dWBaY:*v> L#.N4(¼`8`AcD3a+,k!6FA`pt#^nɓ.amE$`&@-6(Dj`Ԡ,mnR<:6pVb!ѴaT#j0 Gh^-,#c6h#9ԫ""h-o?de*΍82%(SDU.ba5`Ւ Ύ55ͼ6*b,fG|ԂIP{.<@,Gk&p5u%bhzV<Ơ4@&@4NY.",4aJ`~r!m⓲\Pzj<*`@0fsgQ[n˅Wltw)dG9]aVw׾D )*o0Y0R)&ƉN('h'6IdV=(GGǿFrU(n3 qǔGfVP.n zxnbw6gȕw/Cy k~vZ^{r|0Vכ wn=tX}t"bM`@` hB"HL-_X  ơ:#)lFA"2 DqiCX0!rm sUԫ =VyKfU8NLȫj4OGX겸ŒmIaU~Te4 -pkc0NfzŻ%^O'=JVFSRFRj~3- EcXQ܊+I'4Iw2;PH!H]m{TIT?bs kydFoҠZH2 йNزI's s'yvG XX`\o.Asx|8>EI{DZqi(-y@" r kz  gz'y'$`@ 8? ̧'{Ra|R'2#  K`'Hx.}@|z䏬(,;{>A30ߡ2y}(gtH s:/P2!xG{eg~aR2 . ͮSt= dHD HAplj }yga|'%1tNJ_&nDPR"p T5IV Xlo skɸm 04 & x ki~ItFmy{D@ 86c8ItJq|8Vp|Yp4 @*~'p EI~png!r~g`%@DZT*Q" M7RP | |FD盷Dj|洑pY(""Fa` )q3Ơ4r H 1ـ0x3H|,,eQc6gR͵!4F?( LV $v0gS06#N%2$Eaxt!q(d4`)xA9ٳ'8XhE&= ( pH =p+2gJ(6 Nnv2ryNF,C^eR16TLQy/N8O 4%eKXnIIw1a$>ШBt'FԠTSQ$g̎Pd6P'; );jMUꩪE ;ϠN%O) %uDwi_' pD?u ֦ŮWpv bjqV*u@M&ծT̑'Y'=Lz;s:6Tx_(i:O(ږq0E JO!jX_ }=<Ф>Iԓ" I*iT6VFq%7V&kfgk!ɪFxs, C9;\XJ/E +QfN$lzUL6 o4hMakUcn-uK'(!պZ>LJta;hu?Q>Q79j ?i{i@a}6ȳl\^+Ɨ\@ %yZ[7.&PjQ`Q.'\<<X$@ѬH)@ UCx=iGPhw@`91mQ-GOҁcP $Ɯ~A"_#nMіJk \@t $(Sy:Σb[hRp#:ǐ#0` PF\C `( Y2 II:Xuv)Ǩ H Ȧz8F\PmѶ`&LW0d 1N* CٴQ8x zEP@#BT`zAT<;`m, 8:h>?ct'H.*kyyOЀp!6Fx-9t»=a)5*#f/j" $ ^:?W[$FPy%UH"L4m FAZA!e4`N&27(Em 0#:%D OfB g&$fz"O,!NED|O bzvf! | z)@A!GȎ* `iNZF |ah!HP♀<&@)@ 3 'J+ǢʾDC8.8>$"3#h7)-08bZiȡw#,L8k2#f24e!b ")5B*! >7^jN*6nn (: [$Fƞ§oxB*9%~Zc :f&"X(h,cAi눤R$F81{+:*16*#k-rJ`Q) c3)߄ZF.q̂'G",mȀfd&`DP7!(>]EہSA$$g_ >ՉU$*HT.,١IO$3.,DhvhiPMҡR 2md'dރ-ke"F!GƌhhYGXYp@( )AbnFRJ&ufЩZaO҇PQ$asN.@T`P^eR_!d (nKA` !` , .g0A^`5UtU,.Hf`@,2@4μ&Aa`@'f NL:"&RH!AA!P BD0eD|%uȆ.5 =#`#. 4`f"Uش&eGfD@8Ve R!N82 (jLʋ "NBg3"(O([pvI 6-,fHV>~#IaFv!2`1H@`lAEa$(P$dUz <`HrU^amF* 9j B'~H^O8S!Ch\_`hAa/R0 csH+:5$ 3+O+p>7ޤ3Hk BлrD. ( KFdj"Ċĵ 0)Rp=b9#ԑ :5D1"(qLLk \9x:Ho#',&70cn;<$Dei"&,$HdƵcJ>;<Ʃ5C u+|x?Kƪ0X23,H4D39drE6746 )4?0%a>ceJ a)&bzT16/12xAʘ.|sX&+9L1;ƭ+RCcsq3Uف*YC&&l8"==)$n^˒k?% rS>hѩ$ڽqm"k5fs 限FXE<"r:\,B9Jm9'1]`@`r‘5S:zw(sacK+QƟ>.B1mC"e+X0XAaFR'(JF.xM"G7Sq(8|W"'qE&)x tG4 'f( wb(&NaDQm_$H'|N@b/ ~/N(ea (ʀF@JM T hE*"$`8^sx3pFl_6:N5$pxRv Gv>"; 0@.,4R.d濺iW"uF !h $&j%D.ZBO\y(y`eP;:4DVO$665V:" aE O71n  !bd~^T@WZVT!8"FliGΘ 4`ةyVA._9XKlG "$䅺xLMD̔;- I^pHHa>o\%(I%@ `XH}RJŦGȂI#c'\ f"K>E """8Ao= \P-e^`4v&fJ)]|e:ow%WfUe|䲒=~0Ys%4l yE!xiy%\$>F /H(B%L8;7آR{1dA %%cL굗ʠXफ FssF.x$Ш*Kǘ6$ "+9A"bzW+*4 6H#7~7itqh Ke]AӵKxxQH4 _8 A`?p4"bZ)a14EGbpW-*H S9\'%%𸤢QC'@(*DA"w*iTil3R`)  :ѰHI%Py|4bΦ>KFLx<(Fkej},ʯ8籪KR|.Q6U (%SO&x5恒m?!ni2IV?|+ MeP<]6^%o UY3rMcy"L{J73lJ>쩊$.L73b&)/2jZlĪ0٪& .Ep?k3=MK% ( {?!hEmLۊ(*'mrJ ,~GzAp&xDZ{}G4 ahP``"I;6~|S})ضJmyGX~ui@-T} x(֧zG x ZugEJ0 ws2:y{4YMJ߸gz~ |GxxU~H. G4)S!@ q!{aDgOr gIt@Ru)wޅy#y8  h" m@&ˊN'mq g:9TGyw B fgAtg ɣy* @Hjp0B|}i=J7LP Yz 'GwhB 8rۑ1Ѽm\l`X  & x P~^GwIvG <^ p/Nb_ǀFޒi$}~9XRT pJnޮ}"NGm 0ړpx& `,tpxP Pވ@יDwIR/%" rʍr)$DrmY-FŔ2Lu8f!!7T_23p#yoar&Nbʱ5rA ꢅjMrfR?9(xӲtA$!k 뫩r8t(l:24 &eڰB刷rJn ԳujbyEX𒳜oQ!n_(mUaPUE. UJV>HPR?Ԙe ZZܚ2PT;H8U &tJMzM=e'BH)]*udb (̨[2V_R~LNbI 3Ao7MzM5ĩ'TZZdP9(,`o#Ie 3a,礳|K&XzR镠/ZF*nh3 4i]yәƧGv.g3O LEdLz$p,(@\~ytubLI)MGHf| oJ^Jt7CsG.$JA+f&IKu5xв#pz!]'Z(meXc2^ "$2ЏPީ8@-PA 1!3 -FB +&!qA)d}/Y&R R ZH [+F.!hÌp ʩ'K6!3 ##* z.cHI)/HYI[n8 花Y.8Hy1*0IN.h-, XR,cY ,$sH 2td/hIb`R۲7:@ )j'P 1HɄJKHܱr+B>0.>,{i*{-ܙ @a1Y%,QRLeObn:9*އӇwr(pHuvF߷ǁ S _θ8"c!]\7 z1M| X͹q6 Ph?j<*\ɴ: |頬1R?IU^}z`~~!s8}* :WߕF| %ۣ ˥!vhJ[z x!v;hm_562/e?av vP$xvb]g`tv|d ;< əiftsh(p0v0ҳqސ,чPveAPu5v ;}]mo`V{ۥӇx6<\|PzSPsp iAVIA[)u!CrPStnYǻo|1*ީVi@w=Q z_,*jHHF;*W|rJPE.yU{{s?ub^uv_}znj!D' P hqYGH~}m@wi\Wx"9B ۤq6(8&IԬv#b::ey'vߘ_{A8Ul<'ySbߔQdi>cSԁ  +ƫ &%W<ͤCSRG O:L\4f.#j ^"C"R8ˣix.QnPQl̈P%`d& Bax.'àXl ?!A8<2!A("?: 3gr)*W_T4-!P/ +:ʘ$DȮ{> lEn"do$&Ί'T i㪅Т~xyDhc }'{RhG|g趷`2 ,@@اazJ1@ `MSg&vabW}̋ģ|)y'yxGίt"(A$@pcI h`Ǯ}"i*uq, G᣷ ;hZ[keU 3eZG$.Fi m'"x"|pz}|uyGh@0  @gŒl:K;[66?GQu'`P0Fj`0^ 8yzݷgAu4- ,*?T z>k&#pAFa+w;_ kg`02YWuA@H<ǰDp:^+Tu)`$@0~X |qu*F$ 9  Pj?/o/|e#c+hi5wUnn*WL,?GT sCsq;pզ @B ,ѓv:S6i!@"h 2RJكF|4?)taH)ݤ@  h<xXߋsj:`|=TYa ~hJ0AG@ kC3k|f>\Bctq5`Cc&%Ɛ'DMQ=4 |QXrHES;l‡Pj9g xu ck䶤 &Nl𸊻#(#oe}1(ਜ~JMR*{GZxf?&![Dfvi, 20W>8͑>~3Lq6H̺Dߢ3|)0Րl9u˚J3!d%+]QD7)"~ci&]u k*$F{E&"ˆom ޲$\pzIkA7JDV,_'Zt$@n[es,H1CϙHgSX(K8` lRrw,EVC edUa?y݅eKX|L[c*wBGu:p,IKHq՚YWЋZLPIm7_|v3ue8Cj%"ZZbM&\Ģބ7:ΰX|rH W/6$ Rc{!:G Cpwش&>  'HrwoPv6&>ۑ wL-E fcx->7m>hjfd8+FX+%Ф?yc}ihCyE{+oϛ>ɇb0և@@*V=S]Jk\~e-h3({V!l~`H(@Qeo,yɘQzE``T 9qЪ5DGq"[#_'jgb?B #u :JA;_>6$I?ፒ4=5c٬Q:U߀VcqMXaCÙLCA0așg``~[Fxư TdWLDkd)A6@> 0`Al 0c(^.0`aЊzl(~‹HJåJvyGꗉx@@0(e^ ~~e1I`6V`bҹg4&\eҪ@?z~k` `& Gpm{EBTnV, @``0zH6b `ʤdX:jf!``FsOo :Lc%z*-nczjTn.h y@aC6}Ѩ`xp{@B^@- A1ʜ@6 >@/ŋ;lg"2-j4L8=NvG "Dk+j' :L\+C*&r22CMR_1ڽ*8#Ȣ?m|.PEHE4kÌ:-\/ 4lL0) yb)Er2"122CĖWG*(S,ͦ.֪)| x |Yf/ + qk 6J$8IL>Ipc4 sLM9:rCOǞ5rn0R¢l֫NPM ̭pGm|eFS3/$'FMd$Xd)v8CN?M=KCD@E+D pꮹ +Ph7SVlB+9VEa!A eT&6 8pO\Cf8bf^neJK+ꔂ ]⤓z Iakd^BqZgGdTf&afJus gNEzSN!2vp0ߢ$5_lne0#tR8mn4xc`BGP8P&On&b&`-e:IvDQD,OZ&X!7 eR $] 6(` ~R4wq`_ok QJP6':z&`WQc2般 #?%hZ2`.^FcffKR%Ŋ-@h $0@UA{xXWTzt˒aŝxO(<D 0A-#F92JBCA:D..A@6IZ*-#$+9(I豇3s0ng-tǬLTҍ$k>D.u7Cc=MJ$t,/=pЍs"3,(446:pi`%62mCK 8YȮƌKR;%Q4B:1poIO, )fcPuj%\b~dl@ r6!XvJ*шi2o!a/">YavT.::.K}6x.mWlqgaba9_%J֩j4%UL$LIδ J--gzd`s8mf/NVE0Z!JAsgTh`LZQDf!!ʖ)G:^7WG˂<nn\WbfV;vN0 <(#Q@w3@J37&!a]̻wTef @B@,"Ϸ>!؅r7H)! T`| `Vj`n`)^ai.mQ$3c[7&*E`24 ڂifWW,EFvZdPhx5TU|F^r'fV>_qpkFT 5nA@]8@jNhzxcf̤!{28֠ u EBرi4ߧ3>^;h v@ @|<$ Á0P?,I%J@ H@M8Da-KSYs??rdkQ$TNQդeTfҊ$HZ|\6I͔4O`װMv.:K!?]%Z FE/q3=ҬMb(BSMK{l<@J`P*.QĪ2456ĭ oI$P%mD6)&7VI44i\!ӌ#۷0Rti-SlUD޾K C\r5>Fl[iԬMTӋTC h. NUQ&8,x5zgArGvIx~g"@H*+TĽȊbd~KIy&.yȉ}GyGq䗀rH4bP& @* (Uǩzl 0 Ǿ|X0 [9땀| iz8iy:&sǁy 6' ng {/^}!B(O?!6ja}ywh;~⣰?+i7w|*'|G+W`|wgh$@4~8 D|` {MFij[3c}מ> (UD L0z:r ( ``@T #9 (3A=CyA6?XPPrD#.9 ,m-QX}ÈrFR` 8or?aQīk @1 *ǰGn!=p#q6t~AA>c|>@ $)&v:(=Gưq3B֢TBISXKm`\ @> AlL·sܝq9xrĐ--Awo{HROb/r:Gg LP?W6#s`8Lmtq9H⩣̓5O4@< 9!XZm8A*Z=@8  n| gz"@4 p { %bC=)p>9v:PBcy9sol1f 1v`&~Z$x7q=  8%kX#`rDJxmY|OJbzQq'J0?, 匓ڠ+4cLBTJ4V\_x\jeK$_jM}J̝s/~$d  Pˆ)DD9klb:5ge"2g ^G\Z1WqG#\Qל_/Q!>NWMxbglQ-BZAp2@ŨNfg,x|8꒤e $!sWW+i#D"laEf鄲TBE䩃Q'%J4RK@_ˠIH֚Cjk@UG*$S(G{Ga(LzIƶ_m'u`qRE;lo*k c④"VQCPcJOj-ׄ[⯼MfT蔫-b5F@Y)2F_I'IriV%;}M@21jhd\JĈS j'vC ]LÀv.<cx p v1x{PʤrrʫʶJ@`ztH+%hw&wRR3xQ> v#}#7$aπ@{$*rooq} 0pmDn^+H چb)<q! -qϦH 8=aѳ @rHk=b(ҖyhP^Z55YnQXX xyͦȦh{`y@cqbCXq+P((hg_.!Ɗ2G)j9J~Aj:*2Dp r=Ch ;@)0٩&{`wZpn`y)"v)X.x}j#:"I+1")Xcq((0 x4c(H!2l&y6bK@H A |'yuĆXikiЀR7(r[ҟx !7.CQZC_3 aHgBQtY'1M %M5Б_+] i3 os[3O3V mᠲ%AsM9O(<1S7+$a):%H9VD6&zDOP2lc'7]ǰ^ \A<H+C 7;:5%:#P<{g5!h3d8J 9H{<͹482a F-p_K,! _ ux6`በ!Q2ӛ0H;1e( h#G*2mCa_͜кK>()X8z3 E-=7N?3ʮO%dEѰ;}O9%86N yYڌ:+ TRk/MI6cQӳp?iR8@}8ttHrvw۬iɑ@@ȔL)"JAݨ=( :c 2SC{=Ar7┝A)Р ߦbΫJ4"r')M3XpMþ;ԜB@+'yxZ0v:^*rHySp X P\uRBww!%Ypvxu8ukxz&;!b:㒣_@D0SՇvt2]yn ؇پx<!X!Dص)(* ҉(!.@#y݅u4?Cq DtXw99<@}ŝI!&:Sedp|T¨ ?va @yitiҚuըɘ \KrSRU!tzy XskAnJUؔ^MTT>p=B̠XGchqqxɹ=d[UgV U#UT (u (\ps0rob#H *hrE+WJ _AÏ;UT 3c>Sc[ү9SPHS8-53+V q )u7DqC AN4'{8 3KB{SP35!vUs?=yO8㴈ù(hJR R?M7 c0NIS{ S!VPD8)ciu2Y:U1/|ui\RM:ș- PmK/LPkk:; N0aAN{;&8|1YVϕQn/ rQk#lmVh$8й1G&: %PNsqo2FO<[XqՖk:/L S6pֲ89+;A 9JӳOC,C?CHʫr]XMه8rD`Ҝ4$B~AL)jRd ,< P. zeIy,wxqq}i!QKv#r H$rvhx`XEHy]j'ɬɚ](r x `X rrҖ IhZ退0(Z"0K ,P \"2 Aizו/hkl<ҫEmd4גi# w/7t/NT=YҲ=Nb;hO7KC1VRM7+q_R+Z4/^KYMmyUдuoԋQS}tZΣ\jXt]bREb-Wm|l=$ut\{y;Cy=G!Z}@X0N±7G}2Cz>&i6>80 a$|5?=Py1A'PIqv.oP ))'EP 3%? h 9F=cx;Gd x@@'p,@4Qxcy: cN" G` PA\WD}:ǘ*iUdKW"=ǰta;Hఛ`0"`@ ^I/"@5i##bQ!B&|vA>K/}Co$; HZ4J]- )%@#mtwy]!&mp q=cpYsb@uTIxp9q< P*L8uӏ;*{q>'%W(>@+>[sdγ @ 6Ucw)^RBKthΡ*P~w;»E]NԵBt^E}ƃ`.V %]c*PH%`lq3KtW Ľ 76ڑ3`0ۀ8~dp @3w5+jY$r?u"Y#V@`ހ$aV 1`(d@|F['Px½T2P7 K2SDIfwVqB7Ie tbqw+,v2YZL )$Xؘ +dklu9Gzjَgl.ꕪ rI-2nWֺkjZ+I86nt뚗ƚ+UY/94+]J)owȄz{U5av cf 18ĖZۢ7w+҆2SO8۪-2;o+U27hhٙؓVo0/+\}[ M).%41$Aa PRK&4(ADҠ6C@Z Cbj'Aq!ah\#-|Bd"Ҁ8L,BĊAι6e#09V^@l\|a(^l!,ޮ"8q5)+" ` + ȒLb4"C*|6ń#tE/*~A(PЬ®**ra3@#4C4+"rE4N&K!.p"8`&2Eo@,# *ڝ!Ұ̺1ZZZBCbV=T{#"ro>ZSK#h`âE%q&GP$a@\ `@H!DtoF #&0Jh-L&/p b*l(<.JCn#N*Ky/YL(%-AkAu$hj{e^XVJkx,UR|0 RcSngEmn A4Ze؅p&[nBE>GקGN A-3眤,mO,[OJ5*eOHplG~U@xzDbpj;*BeE_NZ"V*MEzO<:ω8fm>bZ'I0tԒr_$|H8nRFmUian$sG%DvfdDCZ0Fo]\Fk.M(/[QG^֖IMia6F4}RG}ӅmEFevLte/{S@Y͟S[U)Qj`Tzb$`+g\ 6DK]Xo@}e<_%Wfkr FT`}7b]EApJotVElPRtJOF/(Dggu`a ր40.;R'D 2)0*H&cBó3pp(ޔ4F? .*@`,P)P,1"zP .@j!nlmwx%jj'Q<〡a/HTq+H-P! |@F-b'@@R@kmSB7F``. k IԜC}4P'1!Ή0|H!#n?%2,-~B\A5b),F >1NbrŁAB ^ J{#m8Azr6##]ARu#P Ж6 31d`B:`Q2ᾔ??J*MJ֭>a%(v5؄ Q /&G*\i8T$㳕A`B`BX3K=I=Bn*J²``$A%0V 6rpIZ~*4耄$ᵸ#J`PJV<8o ,aꎷ"YRc =FE/.%SPAZ6j#k1'_UgBAχ,ߝPL.MC^v7EE2kml|5r5uNXw5B#!,4*aA@Llzz9#~, MJ~82H1 J@64@@4n^{~ɿsfDj.od< tDavb^7Un[g.WW7 TZ+M?ͦ{fbjQ`%oPr u\"a0\w:Jܠ{uY_V=$gǏQuUϞkdU++Ў\n{]Y l\rkuGm֝{ouFX},&*ԂM (RHb억 J@IڸDv7[A߃ZN>Q3)$5`'S'P!@a`@/~7Dz EjV7nA+rCa@ڦ̒F@"BPd.h~ 8h^_bRLI %i @68)(K1wk=oa̤8[wF w'rtt%"z% .(6 o,W {cy< p97{Bp~>!d A` _g{|/@T: a0N&Wa|=o a)q ߸ s9'@D _Uz8oh\~MBaf:ϷHW5~;^ @K ÿaE. r9\nsM#am"qV{'30P*8 qԜ% 섡2 H^aB"i8{f R怠P G KPH~gm  * " )ဋ*<,ݟ'xYu'Isˋ_j ?D@;޸C!hKJLx@$F5.7!yG|3K $i'O%JhpXL))J;nZl:ĠCL,nZs9pʱ@`( F wDՒPBϤ -PpP-SnnԁPUY hv/p{M[:i:3bqU8$G01 "Iû4A jzmn>`u0m`UqZ~bKj^ӮnVoL nH*;c6OY I;Set߾iA~0|MNK\NܧO8yCG;52VLF\\fOmnhnp 2皻g~1 9p- &ԑO']ngP TUbh@ D6@)`4 ?($(W̕#B82 U?gk*D?I02;WRjЛe)0N1B(=GCo-,voQcIxA81 & 0|rѸ9FY0@G@"sUX/ɒRd>cƎ:JH9h 8E@%?De6@Aú0>ÜtS7ԬT`H d MN' %ڛU.O(C$\`h;"pk@p!Ct >Tai\qŪSh 68W5@MVb6#Ħa0FNGv"ma4ƒ+#E d~:tcѰ飳bnZ_$"5ӻKk]Vsq"t8sђ6hl !Ң3{;$nn!W|#`XHJ|z/``k5fz4Dh$4ݹ07#ҟrէzS!nӅ:j)DzmLO z(!cD/>g{SsK=7͞Nyם "ҞkB=QƙIPY#ţ2W#֞ȅ#iĽQ#Ԥ;k!S$r<"-ZHAi"q=r"@D;JTKۻYkS;ѽ\! #K˻ $J%@)û ;7$x~5w%q0tkY*`0dSo(0H<!hz ~<ؑ kN2xtXr;mz̕i }IF68Gji0zwpw-:H"lf:30H3ʁiA:d-/: р88 |hw}|²ȘMnj+d4{ ぀}!H_ IVʲ{=|zѸxx[Ľw@x K=j(Q3K@8 1C )}>  xEX:z |cz I+|L{*B}.{ :RB!1ǿ̀yͼ}rp`{0( !@{[,G0 HywLJbG2 E  Kxpds5%H8 BK\ @fx]5S@S! Ř &8Z8PɄXsu k]x(пtsG4ZO  %tB5 4{JԞ7# hQZrtzR0x@L8P ))XY(t`t)  *,(.jo5Ag 3ܕE9j$;rEl{CL!B!KAkU{:#$zt$6!‰|C( ԁKI1zL{*:%,Z埳UDQSTj!l 䲤T PY2?"AJڜm"t$J$yA,W 0 V=;)T:-@AI?B{ۙڠӿjGYmiM-aՙ;c]QZ,#I" Us#pJZ7<:=F]d(95O ;# Ì>q`FweP`/Uu"0/Q,p! Ȓ p@5c zv s ʮ+_ `,C[yHB@$"Ø%pR1L.&}P*( |a.9ḥ{$͇a"_ "h+ G)L1=;**+).j&r hx, L~2n,.>_K*Hiᛞ<1LH€t@q|UEk8 HHsCpWՕYNŇ,0dz'TiUK,G+KDӸȡ !Z.XwHtPf yAHNနĹXZ)S++ (s7O*Rl<:(/|zutXh|/`u"p+;`|fg沞4| ۘ !ɑB6Y%W=F؂*: DlW B)NcME]p;1¼řIAaf-ٜ H5r3Z @ؐ݊A ?iՅ=v XTCw@kݣF9":ꜞuM[uaμ93#|Wkzl =XmMP9D>c^3Ugۺ9֮>˚X+(rKp<D OBRn X.0ުBޠ3B F$Bb34<Ĥ;]!=q#rMV^C v"0q1Yr q]K!S8n ".jN" A!;m@f!9#l񆥊!L{BHABR-r)o-ɲ"-6XsO9k#]@Ty?.:!oYT G2[nػ˭mיVs:x dquǘc8g?qռ~贍cJ+ [`=Bﺡk/۹ SJ#3c#̊OҤ٭lIѴ7j5k: `h$ 2(0h'噝gIt1t{g^&g@H|z{Kp:I xjr(~>?g<#v p`;zٹk<}<;5[L6Dk>ޤ 3yv'0~;HrcW lC|Ju#w ӳvGԀ+pL1<x>5&$ TGkNx<DŽ+͢n% 4̍R>DE@lϐL?*@Ex;Lj#x!;(pb A0+xQr|ȓWYn8‡&Z&P )D^>)b(/OH[qgCmP(j 73-UroQ Isxر̯ȕA#ZT2 -Ѽ,DL8q*d_ HiA%&T[u𶜢d`D$()B.*x.jaB RRL)W,e<J@ a*,"<ļr$J?dsA$`$.xhh#fZ` aa`8@B<H@BA CfY&>L,DcaVDhE2HEA_,7 \ ξWˌ=Adp5,ģ D:O4$@._D:+ L"#ncޔC@8f&yXeB>䬰NA@\dRRXM9?(@*Id$$A+2¸bF$) ۄ I/vrd.$cXB#%.%GMr&LEK!DZe\H0b"$2nd2*m,s%R-1&=m\6@hӋҳPdnBf;jp%cjJ% 33C)./ aPadL+тNRcP&ZF$PdPP7+eMT b;( eZtc%̕R2V)$ >dvWkާCb T*cAM%bX^J>2bN"HÀ԰4cϴ)mOHj xbnj4 66\ٌ *$H, g(0{gB1W0rВ'BW%Tg~`2F)i¨Ga &M"YL>M4[BnWTzUԳJHWlRKN "s2$L|LL6k0)ˣ.)ER$>LHrˡEDI>QC7UAgL[4jĒD) JD6VB l\k:5$Ay`2̊/S5}`x3dFC9h/? 4Ysa/bG< EbH,4 XXIdC:$yAАU*1 TeDF3ee*hpd&jF (̎4T0s)*KiªR<5"-Pd 9 *7TXZ媑ux1%l7mrA`5)N#4ܣ+3y>E;MHWa9;lt3lă;$Mg392 Ȥ`X$&缓r<0Lz6t̻+΋)0rԭ0:յO`%MBL{*J9({ƈ.r 3cm:V'2"ۿ"z+3^Hk~ ̔I(%~˧|Gu'9uwG}g:& W@B1DPGp {4F=7N($x4P   #)`pUM<^WUPHixIr`06DZ|pC5]gH558 HδA8uˁ<~@h`aygwauӉM 4!qxImרXh$ H"`X8|Yipի>ԣ[4;.ph|bӥt~hz %[Rz~1^?怨* jxUj.R`Je MxV;%&u@X( zv8T}Z} Ω;k Fmm {!* !HXF~zFm9y;}0 XrŦ `NUsxƩ<ޣV ӯ\[@[}<c#[ 2`zRD@ Q@ !0lA:hY 9@6/˝`f`%2q8Ykk'Hzqu1peS[ViOƦ^_NC{ػN-0%Z)zoA:;Gcv J x L{aPK V2@@|D!sF'ȚIqF0B.z 5$ժRBCD =',PA_ǸHYr2q-~Pq:+&ԓѝ1Di:G -F螏PԄA)`'Ҕ@FKFOI($ }ρZCVIQ9 nʤD4XO G1U :uiEбL"gI[-e$1T)X E~"_ %( "%Rnȑ$ !bJu q{{MIϡ)BP OEt%tK"  1/GK[In; z  zHΜXl9hPt^K)--Uڠb GWkK(-ԫ~:"F?vFKNiNJjSlIFw{)eB񎚡RZyƮa$ VjyLI^d(b1$˖Oh1>rKBOҭB'ae\NMUbo ]ȗ ڨUY7%ר={0 DYԡ梳driŽ^I.ЇXCtD;cWkA8ph1W2u.7Sc;Sq$.xtkɯay"/eq{.},T`ub!;\D(H@ ;dG!ъx-W34 \ Gixˤ?jŸH5'aC _>桛h9Fv']Τ N%@mQ s-I\| qRpi  rl9C\ʻNպZLu 1>X NMs37]xz!Gs\Q@xO3:Mtt5+ZziW[nMxg wМ܁&R9ΝRMip2sq!7nT wj^ _ #́՚؀]dȉM{l/+Or4y}P 0L>G0`l 7VmcTTv5T>0y;&kȝ: Yu¡ #X-1ɪ> 5>)5{z < H~8xhqp{i3~L}xhh  7ЈXhyxhzcm&3&Zd}|@%9uuAMd>]DLD䉳 Vnol lx!곍'+h-(Îa< $+= D(*(Z2s4"rC9K*1 2#<3 ҏ2C`(6R4:+<{!&(0GR.@ؒ莋4ŐD -LaGi (+3b h4I {.2lA 7{0IzY >-OT03ԙ @  t (-"ʨhpE:-s4 {%GbJ*ұ) {#h ⬋J!7 ▪ ؓ(ZͫI*:0[#iɂ̡O-٩:,xQ+-L;=FRiP &ċ0h٫L/P2 d,&8 1L Q);-*A1 +a1y( UK0BP((0T7LJzwvxwXwAAc=xyPi.дCmcᬽ_$fd9L҄WpW(t* *9J*& }2 ac-HymkUkkb&*h%X#XEdqW9蕁:J V}XՐkU3Q=q_=G#0!p;V@ͼhɭRVS U(:jPr0pps3͔1րh{R{w >h h *,1R>%x8xwsdHUwM @ ZhDR[99P}ӛۚ%ZC1{rrHs'xR i~3k ୍(NF*(,j/`ixo.EhqsX`@~vHzYYZos6")(!\^HKa^TlF+U: 98RW'L `m부8MO`Fy ؆k*) ^<ߍ{aNGhJ [~oP8,+@$(\79fHTxD8F}m$B9 G&唤*nR5s@q(rq o k( 2SP|`w k8jC{:,'8xB٠{m%ً0\\ #sa_$<p~LJw ^vUlll4lZAa;;>Ӡ .DG*2h\ZaIzKJz0 *vXK2$ZV>rjf犕 jhCOj*X; -(( -hJQHh* j cp߉ݷF{ c%s|ϒrJc?Ug4/A,mio8-._^[̣j/2ie00ݜe8hF /l<ȪtYʭSy=E g dJ) ɭWLc#;_ֱ9fP&9\T7,T,2Iؑ(%M2+.\0DʣY L>](Ф~-!+`O p  Mb'!X,FKĠVI%DB`ɬ K>Dq8lV!DK'`@*69%hD^I㓊}RԡR)^ɨ2sYO`SZ~8GVl:;q]ZgZ6X2VF5"X`+q*|=Kwns{>_/%}> ~`x<tg6O |x^7c=C|C@H?|ADax xog~CH"`')og?@ǂ0"r".`,:| /u`` @& zqq?! 6;F>PG9s#(J #H ё*1@4-KpKҌr@XmbQv]~`C+0 @hj7)9 JL j4 P@H<u8UUu`_ա}Cp!^b Nvw8iD5Vz\ufUDU\ iN\wv1cyc>S1C.MTؒ5L v 6GZ .0ҌӰQ%G98R1TzT 0T`y2 P@7"/E}b@l;v0Bl2D)r KIH' /77:ޞ\0Ւ:\ Z+BPk@A K a$pb CHm 57뇽CDzaͦ{?fpZ!ꈴ4o HוʃD`.$$M[S".cXPCEZ> n H

    8aTA0>8AiCc.HAhJJ^d"^!j'rC&\`,`A:%!&E!<`< "A!Ϥf.0dڵŰdl#HA! $E ϰhd  Ba!A6V K`.8P`®IDJf֥ .I*j ƸܽNЯJ.Ⱍ)",ĪT/Kܖ,8k\Rj,$J@ .* J1" B+4j)\!5+Z€QBQ(J'tڤ*,qKƴ:&+1شi!j(`%""*"q, JK$“?p( Dk KB7i͊"r&JОzP1w*Ң)+ɰ?i% n Z B*K9(IR9+M+RdI_?>1,>JN4 ⾷L&4=udpjÔZ-EN(D^ şrk)K=r#LpJ^J m`,UAA~A!89"W@jGd @*&u]GDFׄ5UP^j! H#R$]Z> :Tߡ硇]5ֈ$]^U _7AaeaDua`lM@|1ZW@ apK>KEZDcl/f  jH@(AaZC7><l%d\#_  Dv<EHnFH@$jtlsPMaFAFsŤ(TXfWS @X_S>(EX!t!8A!OELԋIi@0o$lʶ$8D +^H΢Q$E& [d+Y@CD\R ,KBs72ɶr3L#KQvgRPr*Jrq@lK %ښI*ޟ lb%yN)53.?j*<E1k"S#ّZ&*H&I}$5Qij>RB/l#j)ӾH+R.°=,8!*f )3F*"cE +$ݙф3x<9Q? zzě'R/+I224s$-s@k$*b;ǖL ͪ+؊錡 2k" :+ Ҳ ۣbE80;46DcX`+(zu>VzV8T}I\A@'-**%HTU2.< BLWt6ʲ3["!j8 YdžE|AWHM8^`zlq`49 OuL!bD-GA〇9!tcEr&8zbJ%E[ I|Z5&5PEJ?@ `: `UfdlBjjjd@b @ Yb`6LlaDPV:E`&n$kgd @jtB < ` !AcyԠ.Ab OGAOBa㰒C "f̃Iw1C^zFse"%{H|@LQl`Y…\ah,9DHj L3X@4625.Xi`aOAB~j78?w1נQ7HPMl`@Zq`<(]!~~a#ww7|hSjtmbL\kgaa%!t6NeF Ȑ[wlGE3hetנ}XIp6(A`p8#zsAD׼E,!:`C3."A6بA3'\D`  #HU.W2F aɌkyR#=LQ$ 0c 0F G@p0 Bh@@ G$yzG)R9\O"K{W=?$Q %,yO*TR S!L' 1hR5&&@ &AhYyY,}*M-Ӧ+źMI+ɖFK%R\ pduP; D?v8KIfkZG˫ܣۊly#̫w*Q {u۵ȬY-ʊfݯ =۲(p"Rl@ AK"_ 3k +dʸmK).C<$FDt9-JIj ĸ 3y 0ˢꧭJǯsDG7(s;*Ox.lsBC4*L#Cd Az)>/`*_,д|>IŬS]SK1\9kܺ7B:1zbsڏ%+jsIV/( PZ(P}@h${9{žIR~JhsN|\W P }6xh!h\l`9SrqvyvdgYtg_h뺡{FurgP *o`}T(|hA8=>韛!:>V  (GT`0c|KBHzQhl ᇣ8dw=@|p 1s%ҿH?"@|P`ФN 5a 6>!h&``!<Ld|17X$d~<øu1Tr `hyܯ`rF~7ܻzr~ip@Q@P PG TA(@g |/`gN4 @H &-E?W:NkC<ǣX u34bkP,} @,2%0&$ X!@t 5CW>PPj<rRnh&q:S$KEXV(D5}XR>:k2 -\Ah-JH0NJbpdCsϡۦ  Ș d soT1LGcr1<p@pN0,p œRT_ oH(:9`{:RxpB?+NI&>#yQg9a`/`!ú'B`@,tX!@RXbRfn+mtdVi>E1I-R|UeQO,#+ ZOz6e㨡Q('Q]lvr%1P%l&k50fs"eJŋ!ӨX5t^4NeybqkG3zPaA5j(3Zʐ&)&;$t c Y%đҚ Ժ+WrV/e}ŷLN⃇ ըZKRquͮ:p't.`6챘rQ #m򘦠a;pTLQ ;:4>/GCJ4ڜ[ cxQ8OF1ߘDX(fփ`:Awk#8 D @fP|9e@Rc75ۍ6:>,ID`O}'J P3o%6t`7jD,؃. xX 3`S`s8sNpvxp r@s2%n&R`a+RX">BTН2 2< *1a#:  +$ `e!JB2, @4@.$bdB!m:$yv{A) yAy RP#H h' F|g=*?$} +b9êpimCf0cBut*Pq19)ɪ xD"^Ѯ )DBJ[ #( P PbfxB kpHd/` Z3瀹藡i}r#܇`qrQQ*X|A|-E3ruq8$ i@c]d"zrԭRۿĥBj)?)FqE*rV ,%F+AA.6-,ڵt فAށ(j Wh[MSN<! yꚇv|b9PTX[ iIPJHYXyut@r²ǣR`0d:Y.c0zztМh`RPHx8gB P 39HPxИi9 8P5[,˥ !EC50 @ٌ3_S6K-Q5ȶܵFm> d;SR=58R+Qaܘv#5=pډ_" ŤGśx z%|6 RzD@~hTk!Uk`L@ xtL!ڂz't]t bœ(FYqa+X@ QAIԥ&%F "ɾOHNv1 *@|Pdl`8[ðzc"ѣҤBlDX)`yҩyŁM K0@, $m_lEYZ[CE(|E@l(bJ?*}>c#Y"µ #q)Ҳ24*Rv#H H Pb,vZ 4tr'Ч|'`0wpxrt2%{2*B!A%!yL @y0H%,X&!8gY|f#?AJC͖z%LXI*$ɮ&(a&"ıY;HDӇ셟Zn"*gft&< BZXUu$ʦax ۇx?91d 0 /i~8lM2po8k)w"|%@UO 6/ @`zl8f @ @}}x@(H`{@mnj'k~j ( ((em 뇶AUA+9=;N8{t3ӫ8m>%1ר <8%sPAz8XX%AN 8 hӄ7YdڎG1Mc ك1Y5ݙ3t0 8겐S  <vӴ3zs.5 9̓# 3 6 "I7]i "qB:L3:_SZq]8< &o&QI(U6)ֱ=ZmG1У/G6(Pΐ#;o_ Q?>sιE6(e*:EX;6(q#3T%M1w +<-H*YG,#V5o4:WljYI7ԣ/]95K$?rx۷k2GiU-F6 <6 F 3QFԽ`S1)m&cY/o g$ݵ=nFvz \("`yTA'=8fxJi-I'Pzy,^YxhlGB!k]`$ٖ3Fv @, 睛νs׀)܀|~K h %X#Hyq0INs?[%[YG, +X(=%/B% =\+)1;*- *a_8c`^/`N)OM!$P- Gjk|y["&?,.ϸ ~l08(G,'IKPJiedK Y̖,KV<-2&V䴞o BId:mvVvp)Vw:z ts8oUU lˉ={˷}s˸ Ga/,"&Lŵ-^PcZ͛kZY{K6vPs%<6uraIgt=X@Iߠ&Ðwz]: huN&o%d0jږT6ˉ+x Z֗;f7)ޙl\m@uyi}1\GA[ou7\F[ۺẄnbfůLv9?m]}%XʇF!wzX_ٗ}حf'֒YsDn2gfӹpbfJgSmlD/2[\M}=ʺvtےrl7VR|m=0,[*H]K6a_1G!˟u-}({qI0'XK,f"#k>vBsQ=d;UP?po7K04` cv$@+\`@1(lTk#"~Jz!$,R|8PudDPY 2X=#zJj 1z5<>29ZtNQK~3@i@a 00 5  !RI 87h`cvqGIqtRGY/0t{8Bf[#b 4&f$a&P-AYvʢ'b$"AIs$PH V `>"`”Uq0' rpZUġY+ƃ+(v? ?sO /T72dM1YˊXExa,$54!s.@eX~<^` r"BG9% :#ts kGkꋄ@FHQN9=HjL.`J62a! j.BÞJ^&Dd?+jD$I`  sа@&T"&#Nh@8feN"/`u*n&8-fr.uƉVl-hhpX֍ūJ0's< } p8PGHZF!F!`?8&2HB#픣=h$/&b^)Gz7I7pӱJ'3$(F@*/㙙8E J A8- =H OR#F|Cy`t (C` (GN` th(p@P:ǘ]N}G~=dSd, (ı;]:0pH>  @ 1Zџ*$0F92[J!%(0WQvLC 7z]Y9*"@UjPuO*0Oa 0' grҵ>La*T%>Vܳ[rhj?HBZq?e&#d pi'9U_@an L3cn}?4c$) wu#FhVP"~#:Xwǻ~]OE6"xO`O`(Qͥ)|4"]ӎ0~H%#3 t&RxP:\ $a:`\B kY(u'&m?jHxDMIa*dLj:Frdp Td D (@U]! '@@GneЎ1-8(pNI R;+Ml%u.< z=N˩̣JfHE'h Jjz@*cy0%I}:8&M]u<㣝; ZS_ki*T#L641 # e TӀX mZ 6Fc(gx݇8XlTs5£ej@z,Hz7"BT#F$Hf ğFVˣВh.vx 5䊵 j x ̝ct:O.YE$qKzJAG6ׂnbODT` LVd@VBFAn{neycLq,$BeNgdN `UX DZD((r/AAedAԃamZaFG_z{iEeagk xf$Θ-xPaF1j(P J08sS!!A/j$`HXVa?0Ëۀff.!,DQ$\&`&>inj8{hBa<@>"@A\EiDfb4fͺ a風P\0T2q ?+☼l4LB $4̾,* AZ<(BAb.LȬk+ްC+'5:/%ءk7,% ( ^a!*Ê!ldKp**iXk>Rt+M!/o![$– l`̃c&6",1fP&&cRƮ )BgCl1⢝Lú˴#Rʦl@r&l<, B!j68kk`c~AE>)P !ҭc\@,T2,&p,$Q* /,R#o/͌+ScC8"d궟r4* fjjT c0ftxK:S#4Ԫ3F\,=-,ȫ8P)J&2 r F s&0kj*¬0&r̓ƣK[&ϷZ;RE:jd%"F_$`P]Ta$D wbZ[uldؠ _ǯUn쥦hPhHH" eBbrE)Ka'v}FPmnh|K?O`!R @x|AtКHO&L&vX',DdHAFD8P`}.EnҋRpB8CH&JMcA_6k`@C02`2&n,X` JooD` KI6D|^mB<*DVK"Gd .:`(a Dr1 >D*.Kؔ!!HHRǾmM>>FK) 5C#4b+C<7>%"S5A/i $#+524; :2*!2PB>,캤*w'+[7+Bܺ,/CV/3r,C/s'1jƯI,A44Z[=B|9EA#\҇()J* NT:2=24/ܰyﵓ"z'3c7!$ 2Bg8s.a37++,4"Ι Aj5l8U@պczKA+/;=g9:&' zH,+JZ.K4@H",;-4u# sIÔ/"d7X|ihׁnf?c'-ü8Ρd Zn,QA%-[Opc,aEmZ(ЇP~SV B(DMt7$ ZDTI8B^ҠeYμa0XH D aD~Z0B0)2eLlҠ HdR6X&R|PØq&Df5QI!ERafСf!X}. I:E-d$lh @+Dp(ioq.p$[`$zp>(":hYL(zJ @ |6!~a`HKw4 ΰHpaAa!SpC NfJ0 R%%Gozjre"MTm`PUsb W6$a!AJu`-@CYf]IƐ_8a @#L UZ@F&!lb2e3G%V~svNewPhd}W@Qd]:wo0_wq޼"u6HfL{~"^_mH] AD G(j-!Bn({hfŊD`H/n8U%[@ 4 @o"8  {8[C{=o k~? OC',j> `d}=wt2YxG;sݏh(T(  t 5PPz\zhOVwЧ[yi-Pg Ѵ-NZ'} 7i; _=GmTT}[=t}COhnϡ!6ʹ*ݺ nJZ;+@0#:ۺ,~ɎE=Ob%rG|'-I 66Aϴ'J4P,(:+9>m,@Rp+8GQuDkF-5OA{U6l vD:<*S%6+mWt:T/ض%Մ5w |?0SY,Uv V_m8RcHBP6YR@S̯۽ RVuKs<ECP,8Cl~xGqvatgaа: ր( u`ȐX`KGd6 /&~y|t:ܴGawGwrL}QJ82@wqg؀x >z J5@R{ty迗*\yPP"!($`d h#`x 6ORk'= p"CKy"uRD<@ôx!<8CΎh:RsQO P@F HJH *f Qh0H$IΫpnQ-i8K$2;c6Ԃp@6G=iPbӎ6)I.B*Du2sèi !8qؑE_s}w.ŽH8ޢlOT r>n`pL &*P=G; 7cgTIfvR bQeՃdXvx%`ghfxXkH4}luyNޱݾ܁7ko/o3m$rV *\XsNIh7 2=A0up&L hR[qʭR=\?fr?}UM66֧%Ƃ9M"TjU5oĆrk4\ZluHp{\Ӷٶ.K1#MYo&'=-y5)rmĢTGfs)yR]. . zylJ3z >k/_PɿE;Ӟy9:[I/淳]fiRM76\Gw&PqI䴊j1dr;݀+cAQ郏J{\!ƀY+JՋ| ׺xXM `w`ɛp ߓ.QC)/AGy r.w2M{F4M*1؀*1ĬBm1KBpڹs0q"x( !,*0)(Bpn"0wć42y )P"z.  X@1D afjno4F"y KH8/dSiX"r +p +u P)(|HV`X<0xhM"b<p\`gxj.R ys8uI:9vJ HH@83b e_ -48*1gpl[Chfϟ)0#J>H/pJ i  \Hހz./! c0hX!!#QE+HATx !'*GWqDž^\\XBHZG(%`$ ݆ VX\~r({\xyʎ!Rc;<)?9 eTEQ^S[ t < 'C7vlsm4Paxi L -Ֆ8@+!a=]S}`T0EVց5aVS3kW[ 3I9DcCSr3WQ-rU;#c[6)0@q}U9Pٙ-@i?KœSegA<M;函0A3>1.}:cic3ZUâṿcUӻ@:^ 3a I,:>MP Yq:{K;1XyL ؉;w;rɭLV7} =8:Aq/ 51s']|jA 8p?X'8z2Wb'q;?E (bL`شډy3VYnC!K-)*qk)KW\IՊrM5Z` *2s⠞x]LkH qV H}ŌHÀP ,!@o>*"(yEb uHD ;t xb`xh8,Ș[_)l,.Zq %w* :ZA;L^⢧M ǀļ UHW[2 nzHR`@c;3-h` $KĀaRт2 %hx`b^}SYg`ЊL䪀(rȎRqrPe`BV 4XSy0bYXu,VlX"ͱp E|SzZL yxdQu@u-{P){q܊})]:CK }S̀LYn+or b4pӅ뮖!`c<?]ho{[qg4e]8+5xz=?<[t[5QI8]ڋ]]YY1Q"7÷<Xk>ure䙋5-YTԗUP>CA9s4Y[!z}kP٤a#s}b:\T`XkZA.8*9Cc^|)þU֕;vd qO q/=9 cH̃;kH#rɣtM[WEd-:}wq6NY?yi(y>?Cyjr7Ua%״ z4_ϖ?=5ރbcTxY[ѽv[ۘGf5H+=YqY:;Pv]Od b,0  Ba`S+| C.{bB`.P oNCpt=]u5-i_wze΁@)ͥWsj}S|N$ p`P$1 E!@:D:'bIh( ~%d:h, €*`EQ\Y|aGZEh]GL#höC< BX!`XW@O螩))M!Dϛ lr 2~ 4 , @.``B19XGĩ}ʉ4"AnhRM &aXUdH@`HR `,ra{B'~_9t6x'l.쟳Hd\k 4Če(2,V!h PdML sC~V}@m&)ayqgt1LR{m;` 礧 Ƚyab "fkv>;Al)x[ R0 'Lgnj K{)ɲ)sB~FcZmmk2h%{`F ɱ3F; sRj)>IKа7P[w;5fm=oZݷJ;mA>';}4zOqMn =uwOݺc|sz{g-7.y\ؿbfyPPÿh܃Bm]x%'qu׬퉴}P2<ø~fvt¨s_1>h9 D}c@)+xE`,b!aGFQ 2$y ]&ѲDtU b\JzH%c3|R<;, 4h߄'PǸL^<7 F-٣KtPFdN|f㠁qmD{0ٺL{{ ˊs#g,gsY' hOA97+â+hee.[mѵ5 $(so:H~KcSדQX!+{,EU(޼ ټ:Nl1gƿ&>%O!)GȔ?P@.I?y9jGa^ "sUfD AIJ 2SjGpdlW{"< cN qkޗ)+uS r:G+%=#-CW\[Yl:JGD`L ^ $ P $n]=- cb&Yƣ0]XNB_ d,%dܖ`2PQGg_ ^nܚeZavչ`,F<1z/5x1!pLgs]Q^H.Sg[28ِXdvwBb׌ \+8c&T@T H#@|2pzapcy/.6QKw.]@M$f"fAN[ ˣr(Zf쎻8cl 8;gt7D3` )2Ġ{7Fcdq9`?3ɀ-{7MPܬ1HZquj4V5V#$({IhMa Crc/f~ul+fw@) 8H0&lC"`>j|M%Lldwd;s"M\CKDA:J;1kZ7 #o@C:3>j;#mW&C(= >B8BlBf8lk "6B nNa DA=Jx%l6eG " ncvh\cx;4Vbo#f%V^2X@(O@#N$J3~T@4lFd.$ 4(r$LLBHbDލR=ڲúlK0{4NMjl*D4B>Lt;! e< rR#RKu 9X&la^!Է+ JHZ"@"!,ҽAaKE\ @H JL?@AuXBLKt`vp^0 Fܰ]6L&>ˢ&EZ /@!UbdJ,4Mt"|h^ Hԙp({h P:ROJ eSjn1J 1HpR@wҠ0*wq0%m;qvԪ*ަ^1g P}loR҇;r Qvvhhg)ԀqP7 Eo#PjrΘ r0E O 1whRK+&Je_ o*ʦZ|^Hid JV(*1m7Gk%,)yOmǝ{' orq҈Z|V7ʩ+z(cW%z ڇtj*ʖT4lV)K/+wƋ$l)y+ ȇu~fly0Td1wopWCuloҟotCXD||)LS_H % /Ce9}|ahAvv0HR7Z|o x0#A!2dBtègK6) #7΄KHaԹ*2o"@<< &"t"r=a Ƹ;8n.ӰWހ,ZVLtd%dTAD;,eNdJ qeYPhl̀˗a=D@4HK$F8`t y1.&'TH$.! E d6bLILNE  lZ]Gps\qZLr0 *2+c5!` l BDC5&TF24fc+ n[̹.,;KE{$ \FRO~Kj({`;CE^q.5O*%:%V+m2e1ӷCPBc)TNK:&DtbJt%aP苋4nt⢆O~Kpdk.L)Yt=Ǿ|qD2͜! k;X6iŠ-x.`.`8Mzk6_ktD4Gl:!bQc~ك )Zg]}XnHqqx#R')Ä9@qՖjgM$ Q}1x18oIqďJM{ؚ8)I1 DQxoo>?pn q*&&psRC9Q݁(ze+Yڀ$vezXFuSGi)ҕ5Sc3y݌X븮|U(悱J2u"r=1gxpB>dH wn/qpGG܃ɗ7GJ#j'x18U~0(:|Ch|NIeڸePF>s(l Hxؗؑ}wq!㖒J ) pj pozy&|/~g*>Btӭx<?aX:0O'|>Os@ a.@0p|=@~ptF tl=)]Ugt:Nd-}om'# y gK@ <6IlpܮoC,*ݩH(2=pr\Z&9?PrЀP')ۙ⾼/FS/b9Ըz< ng3ߜ~-3M8@p0@* qF{XniĭKz6+z3IP{C+Y LJ$~@ӧ34/Qwj{(& Y.[1S0%c53-bֵ.3l`hN( y'zz'-N"♱ Nqi!1@!x:1=CQԪS>=zp`( V*TLi[a,# GP {k:+֡[O˻@2 ǩ@+6V,mU藀i|*B c|Bg1, =33-ޑ0""VNYPGaXZ.g 5 4^A1WilZ6 #XKc%p'z'}!PTӇڄ52C$`nfٮkP 0P"yȕ~0@ pƁho~p. `>6#+;LU?On/ҥX+aZK"KSb,ilXׅާ W䥰݃Eʼn`|Ey2{wrK߃v.ߛx%J_w/cUA+~#<5;7eXA̘w쾤^Hwpb4xl3:$avO׉/yD"d |x2aA8_X_7dbAwwqv-ECHXoDа]U}.(iyz폁/ A xq -nO`1M?@}9LȌv2b/H^x9${/@dLF8ȂP'CŒo<="X}b'sv>Igi& 1 \GBe+<XWnd>Aݏ6 "R" % 2(r"ºM ܦ\$. R( C%*^ZK(ӽL1!{@C,) xk!raDz˿4HB2n&"V); 5r ⊫RCWJP# )6 U9(GB*a&Kf)aA@k!/'T$? rNbsT2 X,!c " Q/  ;z+|J>/ؘP;@Xxzyq` 0q| !M4hA[)\ aX֍Bz#;Y 4XBmC"4a 8`v@z qp3 6"Z)K[, P8, Pԍ H֔"̰#0 ;`1 nkoĎz/f(q o !,(y-h} Ķ8-r2޷ D0Xе{)"[0Lɸɸ~ [x/u hԌ[9Qг>ɠxKp> <+L2*7AY+K,ىޓ Ml!2>CY Ɍ˵CTy`ȱt$ϱHȩ/Piu( !eΠ^44X3A0aIӄHy8rhA\ $KMu Pzz `` ؜Pw ۉ 3;ǿ#m39}Hnn8vK_ <@ O؛)9Ý+D22'q="@b2\ ³%04 +}*B;Ƽ9+Kƪ< *Zӡ @A)DYF ?)T%Qzf[(]%"RT7}V/vS)U<> z&1>LV\s?d%flbӡʜŒ$FJ(JQ,:e&orJ!>r)o=k)>Xs&)c<"V1Bj\ Eh+Wt+³潄aמ+ŏ2D֤ 1ו_څ>41?,BE% cgЍdY*%v=-.d2Og)E$\ \oC4Y1@j%jNY"~,2'r*&aEo+!۩Bؒ5$ }z$=⸾[ b\?4Z܂1B_'v@S5jBūA n|@'RCdrj'(Z"B,Kߐ ȇmhy  3|RTP hॴL`|xRЇ3n-5 ,LPԀx3 sA41,aQ($1hC!R#[`ݻA`CÏ+^wx! e7{Ρ S30aT8vpt|ڤ$*#3̓ [Naf`w8h{ِq氹8h hyX{?.E H#l{O @[%+XQ@R̷ &a "@I2@S0"4)+uj Ur4M:[s9y酠ð9ɠyK6QJ {JEMbr #@ɀA)-5ٶFiCJ1`B УY QC$2@@P(ԏ .>-~|R]_8}G0rlH`hweqpWl?:u?PHa`afzLQaр !=E*y!| 㼽̩K$r!H)]")?[&JWJ1ڍeޚ :J <-śM~ YU/CZDׂ'QRz_\@]hؕFUn!◊.BnV+$h,eBJA4i#J-%=_qeb.]v(| ' B M=pE[^Lq':=n^B5VdRBIJwjW3jqc2Q?h>A 9RgSٮ\?JueD< BDu?5(.@D;E*?i*Z( WCj`ڛĩ ުT!/dn& Z3}v+(4#r]t)D̀q=}ER E1n@ީ&j؏: yW/^?u*lG^L&pRvw) er|دaEŅ(MeNj».<Η:y AEd4 tquˆ[S| 97(P|Pva icfۧ ƣ:6L1yuXsǸov2ARH/ .3||赯 ΍PPiK~܍Rahމ-d, ذ= /<;0)} IS6IAz3sXA6}cp {.P쇤yBq*Ȩ]腇[i3BЇ@pni ca$iS%,6w =R!~ DǮHw:Sr nwiCy T.^X@( @@0C1,& ?Qv<#OL?0We9 LkaK#+`\l@0 @HY7@Q||-!Qe8 ( Kd}Wp$<d!iHE, ry+K!Mk1[idpRD5b뚻I4PQDPNe-Ně?ɤs/U,9 HڙS%Tuk'J+Nep2ͬՖ 4HJ >z}[m }P1$(Sp 4>Gҁ0(X0zAǠP({B@ ;"P_j"&B⸺`r ;4Dz@FlM4R$e.rxy@IB_K$t5B4#ĤjrȄF|EDVJR0Vi"e"<_%1C**lYGщt @?`]`4yr°3U/9\ j:=ub lm R, :#?Gp8(tl1= qP08 P4$ h.;YͳsVR왅LY J؛BK(I$̪YLYO* $dzs$U_Xi*B€b]}?tҍCn7;Ҵ&dQ/)5s-7Njw*W>ycĊLk4M?Vwp0P=>%*D WQY#fQCgC윣fJ7S-ys߳:Oh̥KoZтⴛI`(s&R+rb ޣsm+9S8ώslG2DdQ)Tu8Um62EVflvO8ڑ Kb6 E4ug@kuH35n,G/OnzU9_clL^BD&>gc38I`ıA_|L ^:g7)yV!>%W|&E*W1Nj\h*rADH֪bs5wӦoSޞS3GFw*BCiѺkOe\e_Yo9n[EP'Th Q.J*,dZh;p2=K@`: L$x?I"^O`˜\%U+ArVɑG`#t;P㮨D$A^H9b5kD7Y%$].r [):kD %9zE]c#*~60"k /#X6J5p"Ì V@ PA$i`4ޛh"Ȝ!Apb K1Ia#Rd (h2gi h lP<50L4ȨD4Mš(2A a"D:@$A*/L3 9 3 .o  #8- ).tɡ ,VHpo5b&W0PM>)nS 8$1\FNT-kZ5tQz ڎ⢂鍊YE*VVP1DoZAF*"h0>I܍ƍ8FF`(O7<]e:F2\[D\pGaN|CPfk aB:r$ΐK_"hdȧ4EΤɌ6.{*Gܥ:l1t &'dDIL\U LiW.RYШIXF+/s6C}PEFΆB\,D„:40DbO0qF|G̮~y&(|MD_fv0ƤX9*rpw>L*?8blYRt|,vds0SDsfyS^alI,wlw6T h\jon`ls/-fī%)'Nk,Q%P`Ї⌿S Dt:邎b_5  GgFG*uf+,WJNwIL[@l{t0%Jh(ڍlt!H\@h,c#HFYf؇̍t{΄V JdS'~> (h™b ,hpo!D/򅱜>"Z$1г SnfzcOќb/ʔi& 5h6Z-(0"< 1Ҕ> k HO˜-@X(ҵn !!bncJPjޒCxvB3ÁEIgM&\$/&0<F\NZ(#cbk)ʙJD@>vBJC8& ,{YiCK"u+'X錱,oUEԜkh0zf jd,33 JR.BbBBJ7,ʱo q|[h/ Þ3KS61D1Rd8 -6 Abo+F=6 @< FB,V7_C b(*f#J* !7 "= ]dn!yxĪ@1\@$jx7h*D'zv"3W5J3স6uMͭ2T4TLϒ F2ksE-FGZ:]}tUNW:l*4v  @(9 \.Q>C¤(B&($X[(ơhb+F(1dҁ( ,3#fZe9S),gt3N2{eO7U#SbL_v]4W.rg0T: 3V-/h> E[ex,\U^mE7~ʪXWOC˸s ;Cz>wb :6G" EV˴` _tJ{ކu0(RZ̯ [JC|;Bv/ :)P;˦?BO CN⎽Ӯ-* 2(@)Tbڬ, kA#x5H,<-h-Pϸե(sZ 83Bи0/8jK['=JFҲJ/Ћ F!}xvYw{G~p5cXP8@EhH N .#i-~*<ȏ&%VC8El[zG|'y'}L_ RRG6b9r`Ƨ] p]bD{tl&@|'y .ؽW`FE\VX\X6%j6yu üA~_'wSIs4ݗr`X4 1wo4} )e9N %P%Ă`,@'Ā!Ko:,msFu j j jO~/ъXx~yOzyfw߇߃*յ}eiUggݓ=G"?aw!D&?XK/UR6 } ^,P?WchY'de SU<+3^ѣ A:0CmGpLS2}Ɍ8ΙQY$%Z,pJMwl Ӵx$"vku880`U@TB!0,@14&B{ѹQk/܇J7et G/ըD7g]u de&.H$ Iq6Ȣm.C-zG"d H)Ld5Q( `4Gx[N S/ܒkJ"Y=U \J=z>7)#^®?S۬Z¨꓍01߰ -. 1z^DR*n8p $j$Jڣ0~,ߎ'k-Ĥtؿ9d%&y08BPCY8 5b賥S0C.K\F>-< Y*8FHȤ Bh$aÔJC/)i:謧I.@+2·)o};EBńn|&0]!I;96|11xt2!Yq3B,"[DkAG|vڷT6&sȇ3LYTkމtX}K28~$$\8Pp =px 5H\<ǐ ?2`T܂}Ros@qK{w  = z@ 0srF  = #A6GB¨$ŋ*,|ؿ$Q,0Ɠǰ`8}'A8k&KG5*!3.g4-33 I(3>q Ɒ }`r8uXs`vK`1 4 R W|Iʯ{-񶗡4əiz!  6bEA:<#-1"@T2(RB1D P$K]>u 0s8S 8-/@3J=p8; *+RRTCh9!X(kD6.кSLt I| qF&F:dB1\;({(¬TœsD|J,M*,S|HJ َj˰?|*[Us.lSH>HH^(VМ"F=J#BkF5؂Rpa0,4-O\#.QϽ:DSH XڵX**s !bSLBvPp)HOG@[Umţ ,'ͬZ(eQKGZnnSS k$J.Bo BI8,3|S%4 8/;`|CDmPݵTZS$ɧ`Xr0-j )H}0ȿ]̏ǿp L*0=W퐄 *Dͬ sP lʓC^ΨI ^㧼PUzF3N$"Ylw?`F:fBSڠSnuBh凌8U ^UaHǦs݂~ґQl Cސvj&jt鳎jG *GN]x44)={\yS0*im W̆`TQ&Ô3Fq|k|_YQ5 <:9(y3',2sFHlLDJ>Ø}j',SRmo (U[tpqovx (zTNk` 6'6v aPS!<``SS=ĀiQ V.KvMӮq,h+pR`~C2psKqb]`Jꥄ$*[GZPV$U f@m/$Ӈ/6x`zI0~1@E`MRL+Lm)<9a54`lŘJF'b)tۧpm^z]YCvKb),,BepAܓ>uj0 A !5 =!Y9xşt",k ^wcCZ>'y[!i"K7{_buz&) eg`UWC46]m$HKV2eEiF2|{]b]Xl9Oʀ' ࢭ N.+lC|1L3w1>C4+ 'MP*6kB," :6<vȥn*"UEN[56w)MSPjpg|ygyG9I}G~Gh  H x$t5tV-J$7rȁ:Q47vGpFxwXaҰ0$KґP@8]bRp#nh[0 Q&Z@Nu" 2j|̥T=^ [(Ì:| &D͍؍O">&UWu '4oPK/ćԗ5-Rll$يdD\y~z'=3Be'N. >{4l䊕;6Vvmho(Q*XxŠ"ĺR5b-wXg\g@ 9kgS6eKD5]TYITi |iWlG'hUʝF&2g}GE`5՝lzfGYmD0q@ƹE-R&WddŚ2]SOqZALjrxw8ysv0TznLkְZ=b 4pnq|xSeicewW{:h=Z4l(GD(DbsݓcRB& l xVXL{ҌP S <褊*#!+QLc,nc*pK(e(Ҧ,QJc)η>Z~WƚTV7W@] V@"ĥ%+Ia9E\餛/Mu`YV` ġTT!F$b\1GaQ'q^S:]}2\v&aѲLm Ld*tCś6WYO}~w:r+aDI{H1d)Uc@ DVuI|Y-;^ۡ.4oGe#{) (!p= tWu2-?]fy`aY/PzT&|!,W:mv]HC5QyPh޽C&jf*!y'DGS)NW) |w+_ xw{8CYQlplg%t1Ͽ/uh 4<4Pt% ׌}NC's b3S&ҢvMnI'Rbʸ^E7j#Twmq1Z8‚4jM6~G_ 3/4LU.P:diwC›ΩAr9l|þhܮM34*K&戞XG~8fN:錔.;OliCfM7.Jy"dk&LDj=V (dIfpԓ%P C.Af3Ģi6^CoF&,ugOAnYJ(c*6i)e]Z Ţ> ft08L]>́Xкa!o7E]qkζq Zee2D!*J1P$&L:K'ek>Ce1@u"8j!P}cM脄>\GH$lNe irSy&H, +0,D2R`7N6abڭMTi6hH@)h*-4h&/I"InRw6*$IE( ;(m:_ s4@"cn N"Cq޲qppog2fDJ⭰f_1چ(vfqrz"ˆ % KH ^C O "@nBqvho0IyJf3JEG>2,D)`hk;'fm5 }tD$W-斞NK,u$bnb'Gd2R1ƍ(բRiE%+|֍nz\azml;nx8aMBrU#F$6f(f22O"@DU=&j&N*--Rq M0zi;(<.BgP}ʰ+D:?Ff(uMA k!ogqe eQv#@"Z+Y AO&B 8"Q¢~HAT1tIaE !ŪQ('Zm4JP ت9ҏ</d袁Xfez.0I?VFˌDRgK-CMʎ"uoC%6I]iSemm/:Ev6V2/P$FfSdqhO52CNCtbIFV(G\6< %0Loƌra'کDVIxe686"mQQG*i5CD8w\Ӂ',px- H ps'_!(1S0 -չ D)%@QMB$TtcP= X124VbCxJlC5j)MD,9*|Պ4W>-3Zjb"'0 =5bx/Bux2(!; 0PXzTA E}8jaӦ8=BV>Jn0n;%IzIZ$"|Bq8[8J81tƞ;&j׃f&42^89}hYƪfk:giu+v4VJh9C0pΔ *2%󴌸8dQnT$z6n& )3B2\9llXBo9?W 셎y4'JCj:nZDx||_CX\@Ngq) &%WU Й$@V75hv6nU}uPa,fw^Jw-UҀT^N$A @Ń,:q+\[  PY].zZ#t7xYЙ;Esa@15PЗorO:kQT9PHSxjӰLWx9`'Rl5(8[^d,Z"pyT> HN3+0 ϬumYҠT8@3wD'yæl±Qcl6xFwo3DP 1L7!^4"/w,Pl9_kUu@I[̕R&GpLyn&|٩3pGeРjvuĕ R٬zbon36G/vå0s*.tO ߅ ۈ-45t(&Y܈JtĿ 6*&1:o(qP;u84m _Y" oPA(|6 @qF0?: @1t.K&R\NOFhD 9IfFJ4Be3CHl)5]T#@ ;;Ib^U%HtAVep%:bS +O&{\oإ% 0i;[S/xkKc2'&NK7#M[Ͽ˞2/j?;J-Jh([ DP/ @/Ҷ0 P: =0%<&CS'3)tٷBTsӵ) ,@(̣W [?ͪF]Sjs{SH "D[/-=iհt:Kb1skg RH՛r1YTزоK[?JŪډW3[6{ !1; ,F͍ j#@/q#Ke^k1WwIVQEf+ 5?`tXא]/ͨk7+h#kT$+qmBdIk8—i"t._7B Bl5;:l R,ӢnWl?gmB:Η=PVw*[aUϢm`V2+1D, r{`:UcQ1&:X47kuk>()&#`ʊHDjv1r)'}vWGqS ʧ¬`l_k8DXBg-hJ7EXC2ВNszIDVR(؇)afcI;/ޏJbN^f iR&ձ4[Y WpL#J;W"uկFtv_27yU@}>'YX9Bŝ>\*(9s'{g.pA2کͬ?9$T!݊A't*UnΉrZ!/R`$38YiI)Kw7IPdѸ3 8,SBPF=tQfDH%TY{~ 0Z#[+4M&@Y=J6~Q|q }Iq'3G*ovnŪl9 * uDQ2Vu;$/Τ25 HhQ31דg՗1*Ҹ@ *(h<ъ abXc ~}mj6y 'CEeaAd~nך&),8ML jKƍ& H.}ghIJ[=θK1BV̂A$*wGYhׄ =Oe83dJŝy]oB` /5 r|ЗR%aUf!˝TPeCVd&dN9pi⥮?[g$z5QN+K5u`ۥ+b'yoeNZ6jqn.ʩ$JM\jɖ]'bjwe]pAn".G=0|n8  O(O{LdDr$87ⒽιCoIf3ǧi bҰJ T\'&|H(vI7 JHH\,-E5bߘN8í˥l~lK Prl(˹!`ԑ|V(!KZQ!xzS~ax#9;ąm-4*N~bѽεɰ X`{Mܼ\o U0۫aWbRP}?\)4Z1eZlOPM9%nҟ#Q5{Jo,š]66pU|M 6kWd'pXqt±eT+ۅe>mnq6 P%zhd= *zk ꎝzŻp:3q#ҙ33&kԬiY0b&h@ןxţiG M@=X<| Y+60BQ&ӫ#㎘1Ĵb,300CE1 ) B+"[[. n;,:5S.zq۬:[-Z$`֦ˊ+D&(O*Kk DQ4\*qw!\r!BQA0(g;ZJ'1YFZǗq#s(0i9 m@;b! e9d#=Yi6Ibؚi_1ӟ:2$CQ ۃ6BC"@aDDŲ4JbСC\ԚJ!C#$zǙq /EQ./Yb}9Z<dRA1PR,bȼ;|6Sb9ХBC6t֤tƲY*e`SĢq3i@U:$SW7r zGYZY &דl3)39JjdQ6 ?'Mz(csHǑ`Dh3#X##%˴ L. p=IنȪ %Ƒ-RY;$xU/(!rM.`PM,@a#ZA{r'+cQ[o<'ʌRX#ټJ075!Lڵ#qv B! K03QSZ04Dv sJ.;j1R%IMBDJ!\'bֳTt<> /r(4X񒽂3.r4N*7Pk$T|QG[ >B@CPB tb-Er!FxF2,O֙OJ[A+s|Z.Vӛ$E!u33& A+5 ]5 MZ]1F Lj 2!C,:34*m7}p(<NJ9sNю )a.)-9PHQ<=PP鶿H:u%A%6פ g^'C9+HТ $Yt`;-Md6,0 uހJ8ΟAf%RHnʁ8G$r-jQ4E2fNfS"9 <$#=1FHxtIdZNNEۤFNY\k9`|"JR-ـ,!&S"V ҏ_K)1)ͨ'):E4^[©ej48 i1TBRѹ/DaqAƌ=-Z3+-4Wb(^ZD?/bHjbSQI话 b#ڄl~MM4 r,q#D:|HdCSgt)Wʶi⢦xuk^4+]^%#=*tE)0;0ԧMa׈?&85a*U6\gL*mNZwi|H| ykȇX1,1>PvZI}m LѾ)3eЧ:ƘȳZ#iy]0O݂@@u&c\ɜBV7'yBS2SUe7?Uaqg0,FmG9IviL t&A⬮] MLFŊ =N FήsfJ=O=uߟ`+O%3Y^_klOOyp  @T-¡;hLB0b7 Ƞ\B HᑗZH (4>? @(O8t !@[y("52եڿQqlnFQZEj'CMveGr#JU }f!cRTDw.Jh1؎ QED̜;6PT:^94[4;?nWS}vkS2}_+G0WOǿil6 ;u+E*jiw#em_+\-Mې>[iH"u%`\B"y32zPZÉD#qI.4: pKj9oV .9XlYpJ\7Ulо1~?C׽Ҽ9fMk -rka< V5ǺKch<' )K]]'XdmBbILDj93f%b 0,w0 ]z3&3HaW[#>F@*sYأaX&(IA aXI ffd!Vl8xngl麎 7 €]8h 3 5&|PrZ"jWr1f96ANɒS>j:7#rd8ꗘm#hb 5/)#.L㹗r HO ŗQ9H'!BO+v)Jţjq=*xT$[9̵;]>GT fLGmY] I4JSQ7hџcJR̿UvEq#sM ΥfVuC&bH×r;=L(O#O"H[i%z6D#E:BGbk[)U谝ضzЭ2<,5UƦ$kW[*S`Xk'BZRZiaz2P}DŽJ&#t"Kx店0TN[L B&Zv警U"ъN5'tz&+&B獎XjݪR(<2NP]&vo^ZWdфVXqAlhrABNF)\4H;sPuMI("4lf@cqhvnԏcVK-=I D_JI"7 ν(9JCIAmO3TKaښPK ctOS~sखr=Dq)XkEcl- O**?jJc/M69A) +R cWdk`e Lwgi׎!NLbH 0.Ji10간gN6b/fӊR&β'Dllif6bh\Xjh.t*NoO JBy~)N%zцBSm f+CdljR&&Ǵ"fpUlX1K~' xv0*0e.&Hw:hj1vj޼NP$nFzZn8+v6#$qk:|JJzDiXHZtza20O`j% *v ҂ Q4#m$o;m6E-VBc4m }ZiXhȲ >'5-M*P.ʟ08_dR܇%+t<o .K%y$Rit91LZꃲX#ey¾*X fk $ƻPE ҁ<Լ)"jGlBM|!p(F~}rt1z$̹F($X*LҏiV%)7䄐cE LȆh7nEĢ4:,܍M~glPa&,mEheBm  H4M 'HFb\b %,\G V0,D 1&ZqˠrsU(O:ET;&ڭX>Yc6N*F;#ܷtzB^ϒ. І'MIN$K8ϕ 0#tPXu>-΂o/ln&`s&2%֪:mc>'ETA-r'MFތRChXFxKM/@~L'>Ұ$XS"H8%H,5wQF9/ qƭhuc*%%W0O/Qmi3@>dꍓ@2I7RB붻 ,ʜץ^[C|rgTwLi c/ ~( 2# .h+HVCE#}KV@G8g-9FuXrkl蜺e\*4~LI0+*%<岁/qhW5vX)%7BiR&plI-5 V]l,}ʕ\X"Ts= iSJ`n7 I=a P.e,Xql Դct2f6Sm܀6zDQ22 T,NB1\Rp*d‚ȪvK<+S+lkĆ -3 rcA3;R(} 2i:l/n(#SFDg-E cQ'Ùi'!J'{ޭ5 +0q#H#!;p/.N*7pEj*"% ڈЧsÏ $š.CHЎ 3E}B,/z=!Lz6*Ҕ)/moݪ<\J;B""7U|],-T;}lb{0 L$Ʃ\-yb zco>qθ%0)C!:,qK7i_g:3)//OM&#DJ噅YO,4lˣU/T1vӗALA4TH5ڒ96/v(YNyYDR%utN',u#ޒ#Ba@XחTO@.:G bfVI%xL!>6}d7})kojԫ@Abd! ct(XfĆ+Tt*wϧNnR0%%€Pelg8&tTJSe0pX&uk)xfG:3b1GdVӵ`XOxF;XyQc{͝DOKMvy#<楛u509G )Z*UWD)4ږJ2~=7c &|vXG%X~Y*Jᙥ Q=%lC%G R&p DQ'M;|!؞11mL1m˷ $4@՛ ^; 'S>^Icc)}en2TLI]'gu٭I SM5` E'NhrUS7*qTJ0>PRE%;_w)~PQ2*6uV-i׍n&zUsR rmO_ o[8B*AK {B;޳N?h6<Ŧ329VC1dR,t+,ފ[džR7bcbD:V4ܦ8lȋԗjHD;o5LK ڢ6磾&Er2d kXeF4'H(HztCyȠ$dhl36mʆgG Rюk\4y (wҿ+F(NŮT\Rʧڽ H.X`.0٧XD%)F"H*r10Thl/Ra#fdtIcv8fQ0/؄^jɄ,yTgP-e~g$OQtehF@&li- @Kzr_Jˁ Rrekx k)z 9K-NdCHSzjϐL9*kJm3%be:2bVJBExl$+^f@8O͇ҍ(,3%fDNކɰp"qACR`tNp)O蒄کT .v]"P2`.,^V)pBG7R"e$D`h8M+ׄ/˜EOj5eT~*9 6҄2+ ͞I2l4$Z$ nSQʎOZfL6D@甽DS\'8lcY≠snEPQt)_DǤgtIKȡ54Cct7T 3bvL┩ e>p8]#l[P&GɎ@9ZӰKi֙2S↗tJvL;2&io\QXKp$(`/I2rVF&p&?'Co E S\KѶD-.x=UThKiLS05H[k_r[f;fnUĄpK JJ0Yqrɷ$Ff*Dxж60DwD4j :b}ewe Me0`m?XMV,FI`(}NQēFHzQhwv(@_-g0v=jLlhyȪʹ*8e0ps{RTw/.6TTOK7,V39Eya:5I *%Pkk#J'д$_nE_ f++`Rh+`F0"öQsgK5e3iRdd^8}n $, 6 mEytJ7UI?ƶ(-~hƓ;xgv5:Tԙw' *TFzOϭ/w-PP*A,#-Y&+ Eaʡs,VDl$ siVq r*ACr,}N -Z2]J5ϊIdu,=.dɬxAFPfhRW6VdOUio0+3j N,p/:[02/ʪm4ԇ_ec g1jp2T_O0@ҳs"beZ }ɡN{Oi ŚF9u=hcx.3BdlP Qvu&aT,.8n%D QB.`,\ #T5/ȇ ؖ7!# (BJlO7o;6k3j[ 4kē>:{wqxg6q%%wzX\_De'xiN rӖ8RxvnrǽDm1)ItFNy=K":Gy):pc盖3_MT*X96N}xt+UH羐잛Zi{Xr ʾpv0 q*v h>יy*F wÐA㣇zU kĈY;+ ̉KnR>N 3m z(o$-&xbghP"ڙݻYś .5 N Ug.Y]vy`zd:Gd@vuA5)F–,ؼR, RNW-/ͨ6{p#5o'rvTIy- E0訍/8+(OPr)]2 [cVgF5+% Ԟߪ&{xL}$TӳS-|ъiFE,}ۄqZsYu#OMwyKgE_I-'>RA" /낮eKh0Qg Yٲ˱]ӫNЌpg,R<7 u])uU-2Z 1ɛ[~t0p˄|WlՁy:E;j@23]Du*yQTUP%)塳GY@o'29P`2 6vW[JtE{+20]⻿h^l"ݞvmk/x+E2\Fyeh6'ߦtWrH)J?)}(:Xˬ 3L.Rڷk˭"*L̯ X'E.:l-"rҹԭ'ͫ% K{'mܚ3 x7PkH9)QALأE lȕE Y2lvRtCѭ^(0R,lB\ 쌃lbH2?d^&1+6u:BAbKKr;?.c><\wDY\W:**u8j|vk(+i$JNIM^)*Ej.Kmq ~Cc ?>3r1DiJTʜ) Q@̥Z'<Ѝ )ܔ)9^٤,L3ych<ԾSEtm-:R [9Q=a{v3bTkl"&xf۶צ1:֫TA2F`r*e6R=egw^Euu<77=g-rsFă-0ų3R/T0D.@mUJ+1*MQdz+R72J1+\%ى6$\|dTeT2p1^' TjNٹ#2K!t-8>8E|͹dJ[;!FeY {JADǘrAXѸ@ FΚ[{kVAZi0/dPlEgޘYTrYE4S$8陃 gx(<$Z +KcnU-o!_V[ i[85zp$I,o}}09,႘Hf3f$ 6^b QSA̕=4&wV38r|>Qj<΄+7rI瀡'zIt+HF&C%q,#3KBerV2 I'Qp=T9#Bl]!=V-/: "]GW7HĴvPW$fZCp`MV) N֬Ι9ȐTRB<-W4UУ b uȩV 3\)jBBحeBݽ h ԟpwXRWhJL 9[DSifаȢnTε#|꒣T_.ZԆ;#儒;,JmQ1yF(ZRQ < 7Gb~ӭ;6ʾC#gAA*мk lJPJ9i>YdttE.vtyNX>iVsK- |N#Ӕ_A#v?T/23V[`1*^mzCNBr2F|JeIb~_X =V=81x4iE%lt92_J&HBN3n.)c<{XM>ɑpV^iہ;/s#c0U,96rM+t8%JF_IM[VWNɄ>mZ4yJHN'Xu܌y#!TmxE8ACI#jH Kn7o2^2۾%m2/i AVRp=6=7_74_Uѐi\B"[SCbq3ɣ= #xvu\x(QXB?·C{cdcĈ82z.~~x<+U i:(vɬX"]`K_̷^kZדF*7̽!z]ؼS {[jd> 1+J3ôi)Ȕ,13/藚njFqp?.+zV5#IAr ڕuF;@4׻γ"\_ .b$\dz>_99 y, +;CLiA"C'{Pz= S-1r %'Ǝ8RZv1:4J=pI M$5 p[ŔoYq"دFㄸARg ˲$N7.&(2H{d?q8#&8Z6 Gsګ9O&NES<ɞkkHfZ c,{%<6)ۖGQ>":N:_Iq;D.DC)x1,99$x7H<cV⁔ S{ ((,Ԋy'G8F+{'8ѳj "xgi~"+ ɫC-$Pɧ2I«3C@&bj!&QɭfB:PÐ80 ;AOeN3L8웛j; DQ3%@{+TynE$M( :/r(& 9!Yߣ6*˻0hO+/%+t>uQ>. ̗[#*kq(ݨYx;I0Ԧ ={od{+돾C4#?ԻH"Q}&"d ,_ 3"#%@cLaR|B#ۘwI1-"<;2M\]qdb#Yh ÜV{5iܫ,I$|M;4IJ7uRsMRR ǟT $$9Iʼ=BM2s; Ю.[ǛxXh S۳&i," k٩3>[cVeX3Z&`Vt%¤.$ȯ-lG2L(biiCE轫)PXz NDc+^ ߻ymru$SFs4*O3a{)i63ԕSrN#pӉZ+`b*4A?:>!$j4k_UY%N!*PL?8UP tSߔC>̝[\sQ 1J|7&j ˎ>c 윋$4bZ/JH:g}"B %%W|* VE/ӽ'D;2e[iFP92-H]M![OR?)ͬغ^&.{L,/cBd}̋ꬉ*R2u ט5R\(M)) ~hlZ,0m1e+gy}%G;e+G[Q=uyMW2@TƉVc=踻M5jl-b<@Z^|\5$5z(÷|ۢ>?vHYZ5?.cm:^.d:p ݣ^ "d>SV-<=oLaP?"_\b֥W:6; SՎc<-0 kf <ܴ5<,o/# %\/ +e8v%/i;$H;ym)6ASRߛ)㨳0̹I^AUٔB)(ҌdK1޶| %*>s8>-p$9?̔L;MJXy C-Q"d~ -cᲂR cq)XџlF&d*k֬C\zO2ZJ&&kmeEgɵhΎd#x?v&3D{]z٦c/G yM/<@/blZx!&]SA98S~a7L:75h>|>~L 2D-ֆ-#RG ̬f4h#0Z+^ZXRI`PG?P?0 RⰘ4.; ġ l^%!I!ЈTnDDi^)6҉i2УPO,4 M$ ϧM7cJ1Mɴ_ ʬP|wD-}-p͢0kKbawoTnwU ԰,uO[^1sM٪Y0Dox}nՏ1V\ >"(48~5OK)M* `wof0s-V5ʥ=޵26k8lª'؞(/j5Mʂ(C\# 7 C2㶱++C2H+l.J|; 7-\H.Ȃ'V=@J~ e)H]0 e1 #4J2ޯRt@.DӶ{-*D:CѴs3C.PJ&(JCH=ʋ27+V'o#~Ѷi*Fd?R;Kp6CSrJ(P ☦BR^ܞ#I?R.zW9\]껍 ra0B "]S iciq2R  WM[R5Is[49'܎sފ{/[5>LE/\)QHUPsCGc*?Y:v%mQlC}4D׋BXe#o$hvA^4|%L^1QWpf2{H`ɥL| ePD).fLwB)$̋ S-I%W&xMwdyRt$0:yڦPMz>F*vkz[ <#P˖aFTS!)a-{qk}>lUri76z_9cۑs4 jŖBX I~eDLBZ[Q%i*~PC;!舷&Gw.T;Ì w!"-(bzJ<+sT`RFoUB:.aaw tLJG!!DzX3-R_#DsTtxKW7oM&IAHeb~VFP->P^٨*QaM)Q+bYFXyQIkmc ڗV)HK7)w֏T`~q BT/pj:UJٛdr%M#fw# IOqw %ԝgxQH>*V& ݒLsێ @Z7f͑%3h[YkZ5'T(iqlR}/( $S@pP'v7@Շޑ٨l7kSzxvFDeJldӮi"pvf.*cA0+44nڻEt,pM|W sv|e1Kt|MeDD$om}n +}i){0QR&X͜[!;bFo5ta^z!pUGz =٦⣼U6 2[`{)9;SxxKYhK\iT ؁ IHc2djn)4h".6)qIiPLu <:fxHKp*t45&@}.)2&Rpx:/i(^ܭ벘ST/`+><HKKΧlX(F->nff̟eAb7meI*,u<2p̉+}D£+}?h tc bPTluB j8Kf\bDep L>tOV)ﲚD:%I;ȲʅxkbjJkMaZ#ɣi Ӈhl*j-HO,+/Pg${'Izp%!&VګJJŤbJ| &l.f]'F4VbmqEó$bhz <)J(&ħ)D2c dl*R᪌R4!R 2-ByBN]$TJy( K|TR=p-(gh&Ri\͊B(jDɤӮ*Y*j1)V,,oF{P]*pN GZ7a0@r |;P2%T͊EՎp Kp3gh"$7-iRNPbpAGND@+xN(0%E8] !Mc\d&W)5ALu dNomFS)&DdFk,e) i*e|tx5\ 3Q+d4)3S_DzOc N4FecK(R.b1-\On`oJ^(ldlЏ/dT5lr{'3*#$D/̾Mx%I.D$a86K>8LUt(W6ԀwK\,>(t:&NJnK7`MJhlV8nFa|&Td hcde sJR"ӕ&vɵZrֱܟC|gICJ.Bt.paU/1ORNhJJ[f-(Rꪐ7xB]0"VbiHklgc/43-_n&06tv9A2ZI2&re o.Jh,vV'Ň|<yi*^Uif KZ5sZZ&=R i8`&}77( lnЬ6ov1(\H-J#Zw8OIrxJ52a5X;UlHfUQfx&E"R_s a{y4VpMy.~<&5Gw2Xa|Zn} PGq1xurNRçʳhEhh寮C>9=5gQG㗜YsHȝ1xGȾe*ԌOR-jeS57x[rG:T qtTJWy>6+WW}:!Z-,7dr.C8BW*4@\NvoܒbQHxeQR\yI&TLapEVPކ,k1 1AIYoփ_eAUbp'Rlo_7zes>kh ei>gԏگK& &^&P0}F30;K Jy_~E U.~kgb\͗i*kcDplxhSS).Z.KbNƗ?n0fqq\G?MɄ~N*P6KWfF@u&хTD-@SynO匼XUDz%X 6qGtғ_fw÷3`C+*8AMKDhfuuS Q iVMT%)W4&ljs(yZLJš"̇kR,eJbT:yWL F< TFҘ9p[ *[]LНv-jj{fMFA%"CDK7y_sRD#tqxaUvѝ m\1k](De|n{Eؾ͠Fk3#iC`pސܫ㰣#(蛥,xZ\lQH.N(N|hΕ/FP#%(;ωX%DHim7"GocW vTNF_ՓTp7SMh&B*(9NyJHrŦ[xC<=>=6uq'kv:u}AK8XRc6tcUM"Nyr ZQu X1:>ծH,QEo]Y?f 7dg^ge#ތ>*9ݵu"+B  D`: COlȣqX[ Rlb 1T_p  EP -*R1TFȧS\MJjPX0J /LQHt39Y;l-cW 2QAᴋlfvM_Rhw8O" EH&8b%FAjYJ9Dw}F[r"SpIS}Yseϳd!Գ!_o>oi\Tku:a"b\Vf-Ĩ}_B'Ib83*)ⲟ1r={z<(..:MT4t7 =nj^"LP޻{ΏS: kA' i i *l3/&jt+ xBrƭ˘-ʡ$^r곏,S 9M>)QH,tE-L*r ֭kT!2 E )4"k>+̔)Z1(s"е4K7I02ҟAM47)hZhd9b 풟A9 5dA"+Kz(oj[- 5chW< omۼUL:**tS-wzT򥸍`ՔP`3D2{a>tn =ՄRRIER+h=@M}+Wyh0"Q$H kQ0(&C233{<ɵ;o*nh]2RCZͷL/|">$y~Ypܫ pE̋5sj>e70YՓ[j(|W}jSJeps6#iVsk].BM([5vOZl Ř_8j6T띍n4v|+4ߩ`ڶ<͝TN6/G6C{Й64̐M Ɏ)5SeaҨ'NImٚj'TR㋅ܼ&uL7%^KL̾q\C}˰5@|Tat\fn D@ϭUd_#cSoU0EqU_T[؟F">Y*bj0h@Zu EդQ1M,2 J,TJp=)d˷@]~i*ZIx'MPxK]Db(eX/$F#[vî/&WVɝi 8I^tkYn /E8,5uzz ھv Џ[]~hz]o7KS|ʄBX-L.tW}jޙW qR͈{##lZaI^#M~N;2W*8(-jF٣#P?IwQĜ][DD ဦ#Œ>͢H+4Qly/ڐjNhA\J1đFh"W|/:>W4B+sG'ǣ} %C@UA{Q{S'8\HB#R꓊>lIKj= ;;wMf-uRʎ#fAU~3bȭS!LL`C3VL،OBH~41-*!Z ҝ: f9cY%m:uZ~AQB(N!! k4@35"#0@b+%V=.+嚀 M!aZlSNZAČ @=A< ߠXE $lj] UQjZ>E8?(iۻT!k14ز5}Tn_B#((> h/S_s 7L=uI89BrO.#%|E٤VQ/ >ɚU k[$HȪˎ;)w)n lH#ʸSubj`@ugVk 'PՐET1uPa,Jbx44牰̱"?M#}ܺtv-E[I7Bv6ѕQr!Jaf[o@ q%(XK<ǥ cfBW2 a)d.7\+ESI,PムTXӡm.z=Pt#C$:f<w2gMձ,ܠ%__u_'1I)^/5Ѣ#Z-PHmfu󳄬~ؖ|xN6k|L;4QCiѾw Gf`5vMx!z#'Z,+-ǚQM^iy4seBDMv4 A`p8, ?@ V@@Hş:D(NK aX@Rh.);@ʅFJr[g=IDnZLR7+弿oVÔ)H[o *걏J:nlL|S*'!LZڏCV/4AXUORJ)(KLw =6jgգUo3mT7wtN_w%iKf&V]ګBunpwђ9k|7e^8)NA(„2pu}:i]wQD\BRiRӲAORMf1+Q$#ob!Fh)/ݦWH(~|1hDd9AT.%ќ8DQ1`JEjKLd6 Rʢ*x-hB˺`Tc/ɽͪ}9Aw,vbIR ](uN{@aV]9t2Q}|- dUW@BTaW0Ī\ j16x%17K[?QY䲖e9k<5҉BcD%IE*.I,uY.ѨeV]q0%CZ>s0(ZcJip2I"f酑6i-2sb+AQfQ"}LR,j]\fsZ mL5'#CiS^VS;*r9{bEx[Ja|X`F$4gl݀xRU~[)5<Cl;4t+ ^7J֛(@VUײԧ(c3tgC|pۧFLc[uڞI"'ju*N7%hpWVmq.*RX\TN)9u\M-g6 Yϫ dbI$inT[x2UmoTc.J7S:x;ɐR넟֔gWXfʼnM\)cEƦIZ"Ab@;+#-v h*,|D}EiŁ.I9f R͚ +)4#vuz:Q3V6@ ?MW!'ֆ%c1/,sKA\ނ>|q>\BGknً7Q$ZWRbUi$4DP5w#pkR({zwU%-lǬhО"7;%D%LG 6kl'Ҩ.'%\Z2>iIvWљ1xxb @/f~2@DN'[z>7lRPm'E|{Ӕz=vWK#&mYP=K_u*uJCwDwGp .etՔ͂JF7{yHҵ]18bTJ,)Ve30}|]Ks-?= Yjs]M? ~5!>d)͠>hn`e\ʩʠƄ"`(bAgȳ.ЀK(ۋfeiǽSdA$jQpOpZhcn*P^:ec(\`洤(;,RBvN(RnhȎ ei( Qh+QhiN} &9zҪ/BvfBckp1ω-쒇Ef&-pl$+ ߏj|,Yr6\tpGp͋̀X~h)b0֣*$Ė K%IfÅpH liov(eĔiv2:,*I &k~c(}&vc](ol(RŌhU gN,),""fkT0'D̪r.=ЮVoCc&\yoOn9E2YmiI3J! UrH!vhgtƑdu꟒]NxLPb(o!V UT V-lD18JI܊NqeP K@)Ab̝ p`dm@,#bD-*ib̶*zqbYS U6ܲQw]YRip@cjCg$H6Y2v9IeLYxMOGM*zd ΐ]. BK3ާ58&7 )+n1`"]E_+lazՋ ^~IШc7Y.WY=vAdsxlU'`\kH7P@ΧG*$g΢lգK{4#B`PDu"8W>Mo} Lpfk(Ψ0Vq/XĒ RCpf5up_f|O 2 , `l*`@|: àh6!h$5D%иd FjC"QhԊ_Cf(#[hP)Cg8@RD7ӡ`AS$"M _ZwQQ#U2a Yo Mrv6aAxzӓMst UEe2il7Ί]N%uHb:mBpsu^z=sT`Ɵs'"iؼFgUy=gWګ\,r .8!"`ĩ掷C&H0oCZ*.oRP)B^,.jjZ1R-IKK.*6@pkHLZ3DuG˃@Q\/l} J;+2r"H* ,森S.P&Ҥ*ZOO "Bh/̰*RN#F7RΔkcm(13*)2&N̮:F+W4tMnFl*mڂ6t 2Ń=R b-dVI~Zv*BKz")z7lײvPqSpLFڒ4(57j,49 ҭ7IKW}ޭI25I<47BӖR^9:FUKr2Onfs(W4JnTO :"SH'< ". [h7)]WУ%¤KDy6mđ U{Ї!YnL ؋IJ>[chdӓ/M2x[EXks1HoRuW~ֿ,Hp;[bU vLrѸZE+J4z5:El]d+6KwZ{a8ۡd|ذ3ܺ?dLL{;(%PYs1ƽppJD(1ƶRڮ+MDBz Z :EVg,f6ޜQGТrqAPi<髕$u_EspT] M=ɵ*"Xc~/y)Et3\Eh|_#P -^I'wo蜶`Jf%pDpt"P{Tq#h:jmއM7-)eYO9`3%?X[qa!ڝ@̚*4g&|ԃ=Ĵb6)uV_t<$"Jiqs+^lĥJpŝ$.LCǣ5MMѵ,;C [dM摳ܤdx4bj7hJipPZ15YT,%#bݜ|cZ&Mm6cN>QjU0.,Ƕ7:U3:䄩H 1uUN,U|1|KOP\㯊V*2lW䥤l1Y;_\>i|Oi&:(JEnmսEfF/hl5"ݴTմaU@V}Jx?&[>.3Q e ՌVlE(~62Ń=|U6=Y-t(frk &)u\(4M+a&El282Ap!% }D#^XETbZ"uU8Z\b(bs+ % FKeH457\j/ UGdD;-0F;^c3HG,씯:t$9_'ZS,с0Exyz`<Π$#:!\4) /7 qc(c!U j0{A"c7VAW#)㲠 )Pr 5y͝o4(:Q7b @a>Ц.'%+ӿ]*З1Bn1{D (x$KA (2Jh\-&9OBY3 잓=Q hi{sR [)94Ґ{(PjG2u¢I'4u$\!B3:|yɳ4 ,@#I5<.ar .B"F;6,Rҝ7;Q/@ѯ8"̮=J8aZ$1Ag B\( ) 2ƚF3-a?"8Fע[2> ٰ $Liy8i њQ8 bI’/( y_1Ő,";K/LcAq!8|Jz% mĝCړ)k+$XyLs,E1^ˑozjl&y Yi6Ґ*yU#IJBT:P:Ia~"jdJJ =BH1$RCL=.$k ˺ 2ھ À3JM9p3FI(EbJHxyI 82O1ɳK!̸=2t#M  :@Zj)XSp6Qr4\½*.y{\ӯA`94ܶ(%JJbpˏ> +aK0FeNP̨QE$`-3rq>:FJ ]3H`ʔϻßmK$3AFDC \CP.)ԛeARCi8I!bH,GCӥ/?U%%-14Itz@T PʦS? +0Z8L8$#I ٲkͱ(1 O!}'#<]N+@)Сﰌ~+Ac2]:,l ],zK1VQ#utBfx&>DM/\"JfGQMxkV7K'Sd٤< *pWrE la. 1R/IƥԳ`-(PZҡ UlI•yh+y;[T*m[0Ł\#e9Ao԰y/*P (BsXtP A8:c* p,2;_\9d^{BF0j*4Tu40j4+D?MjV8E;q&]H|'AL 5㇠|NA7MJF&= yViޚ^迥{GP|rK)saʍغ/_]ᗫƠ ֣bb*2.: ?[W4d,B]ۢ.3qW:); x\`ڹO)w[X"y0̋\?h͔Ye,A>\e3+8QN\\E4hŽ)暝 NM~ elaANڗW ݚ.VE(+)Cj}#;qm'7!dˁф:Wi8|ɖz(A#CX˱TBg [ijNQՉ,s o#@g1jS@.Q [3^fZn6Z_Z+h^-DmLKLNW+[ekU^JKX,VR`nܩ&LQA" _m$KlLT9ǭ!I_5VTtbWIVTa 3kV{ fqk kåE-,r7&@:z%I"ˋD@{-I-3юCiU KLӐt,uoߗnfXlI*XNd,VO"yDa&4ȷb36 /1`/%rٶ95F f^9;-~37C&p6|;:X儜aˏXN0UB 1|&$5M /4peQV L09C8i"Kumw,lZ}dPVMi5dTbaW TǵRӿA?qz< $l\31l知w@ NX)yF*YMYţD^fz`?v@8C;m=Vkڳ߬yŽp]SY|JfsMB/2[AĞٯ'/ʑ&W-WfU#H/2v`E3K Z$%2X ? àpVp`8Eap*ʠ"A%HBu'H`X;1Ȥ S)z. p%BijDlZf:NȭVViĢII%ix Du[ Giت%M0p+Be;A3vrs:,9Un*es+MڴTմr帵f%FLخ5"=>2I'jzδpLӸ>s:K"RȋL9JP4zLSK&t #s%-v./ʦ:nȨ( Lfݽ2.-VPj$.#>p(:b" ,@ { Jӂ*xJ H,2Jl҃ 4# R{xFk?8,R/jdcCB>k*5*:Rh;KΣt$VJ a=DM/; "ITuR2zje1cI$TcdҌ+M+,WnJ;1dl8Z֌J%9q[2=b0gvLҫ 1̸d{#V#cƸQ+oKIdkNsIH[+/dBHzuRQB%24nA3rխa=я2V9;PC93v"{f4?N{=8D:Oz.[ʐ0gD0Kfh[zӔuj%KDD=UM$ zcgy[࡝:n=\C[9 r[ N0𦞒ו&լeqT{ %x ^3 8 ˏp*vS9fԷ2N[Q3k_2کc#"8)1ѿȕ !g1hYbυhcmOd|DnjR>@YpOa5Si#MUF(9xAU;Xkk;cFbş!/#D40!J`)hș̸D8%lf/A^94bl :`66nXM, ZK#;6QTF:VAJjaœ9r zV*yi6E_ "㓆r,YG x|^QS )[x`I+db/vxfGDL"]V &5ˤI00C|\M*Tzy ^>+lfE~P*HFH TQW R[69sٔќ?s&[٥` zcv+ hPI[5 vMVm6` d *"UuG} 2ꚜ}.'K4LyNڠ皸mjj) ( ^n; a@_XmВ a܋q,c#zQyQ "ʈ.A=#Rlѱ#UWuscqݙR+LT+ jv7g^u༧i<E62+ my?bFzL/R2+',h VO~+~fBTQiܬ Q.(j&Ч|^fZbEisM|ܥ+J҄}WcEqUtG,N4S)ze ٦eHPY()BEs*5R%ZW6eި^/S۟2>?9 {S|wCY#jRo :s\t>[ ~uVϻy/࣐O22:v.Fm!уւlkb2o҅^Wj$? {AdZoxN6% ͤX+IlH XdTJi.LJg0&{VIܠ J68ɤLGYj~ %tG}4a V F::0>m1,%vC]V柇~w*ZjLE>:ɮ ?.A#džXCLDP_.rOn}MĪ6e"hʆ@p`^d>Lpz#~d4*RȜdf^H||,nȣ Ljb_KJ'L },8f/1DNUnY)J}ɲnFo+fbȖ0/2 \gVĎ5 &.*P7o=}X:0g.níFk͵2K 4 CR㎸c&!+c LrZO g&0Vx Νvlk:%Dc)i B!ϩP B/2Cb['Cc@(AR83#a6 Abs(4*e!2 Bet 4Ob1 :?u 2M&H5;ǬSKUim.mMPľlEZ3I2w?xբwdR% Ll:U5&#5$hl }t̴qͦ1Y)Slf^U='&}1j vp#b78e|8g&-:1%CƪꙡM*Kdr}%~:j0hn.ti4:n|Ч |5+f*\Hl,d%K'/B@@lʱc&  jzjc60괯`L ȿNg0Kf޼#F0S;(zH."GHS,,vo*ܨNT!2P7L{: &(*"LyaBI4m(+'T6I[:O+T(1 ʪ̽7 t>]0jZ7*Nj 3t%A3t@_OR7< ]XԔح6#* 4%ClSL 3)+wLꊺJ$5,-%60+. C5uv }1fTs*+% Lh|^{x;%b8p*^Uf_Uc8˪YC-,'PY-\|lL]S~۔~;#0"97#1ߞvЇ}z ' B?Įhr5heSc13fzNMoXWbOy:瀼]c%ԫ|ktRO~]fBSAP QJ̝-jѲ2I{MlZ "BƎG@T ;RH>*9TVi xFbX|Em..rމl ,TNKYeT&jp<Ђe(瑟4O̢3{$d`Y3)=ځsQi*7PKYʚ\?FdQ3KBLe}O8*.muy$Z)5ĸ HFsAIөTHoՁ}E*3wgT`&@qItr@ 8ˈcYf><#-Ry>UwJyX[pkz'yf*8dl242E9<=` 3'!RKQߤV\iM!_'e)Bam]j ]Dp e䖙i>Γ,W;yGᜬj?*H_|674-[% $1pO+L<%Sd:_-7hLlDmV<$zS0dƺ9 9\师"cn=IWJU^+)m2`l£ZAxTRGۼY?0X%kY$DnyX!km0 *T<[n+}ZRuA.!*@ǜ" ] 7i:w1xdQZR˨܈Mte&ϩ8S')MWc s8dy0/Uf%9 VuX~TXFTM*^N!dLfmeH=@u,<nC0- 3z}O 2u<3%Glg͊,U%+/ cb(7Hrs$4SkwclagγWC70O69m a1)=NԼFSGH.KG8*i9lL5](DU:/#ÜE$><7x,TI"0օ+͐krIC.Ћ  .BO⥺7%HJTZ"U g2DB.J\fxDi&N NFhFOFGI}`"4Gt5 fPMХ% [d\Nzh %ZFJm)D#lj4N%9nDGȔg[ddKLq4FLʽΰ%1{EY t$ >pMFF (JPJ">WFRrN`:fhRx_k|2EDis|gHэa>OɈjtx ()Eh)\,&f4Y mЀZbB:IhF*t~.pJ:68Ր&%oCF5*.O6r,e"o ,__b.\T4kl:5(hӐHB%(hf]HN&J'rR=I"迆"t4j%0&N.+[o { f^CiIт70K*HvHcP⯉3#;:xoP5 X+".MR* }4eIF*Q FG)+rOAb;ZP~os3GZ5kXN 0|$kpBgJn%a -kkyx$dO=0+A(,e怳ҙKh6(s@ 9P= r5ʶ˪>z(Pah…t#j Ϡ7N7khî еZ% C cn0?>E}kDc⑌ 'l$JrDKGcPI't[H@g/X:+PfM,Flg8HM}$@RԱO o}=5`͖ACJ4F%, ^<tZtbw%K)+&04W DCMMT攴.T |:Q0Њ+2ΔڴoW .ZoWKԏn!@)k=)|D`Qj?QoF6&7Ş5'7-o[3J,L>#Fu+;In':+,(edkFR/,1,.x{)SdL4Y0{1 ɡ]=jS- t&mVDiN5{ 8"fo ĥ7b0宴?ѐ(޶oksKn%"g.Z[T23TanJTֱzc 7ؚ0st.9h]3N- 1LK{eM6HdEd-MjxM3Up"kYbŵV<^RC>BX #(<]y:%n+<+RkitLLLd5u $*q0أIQl&;zgj$Э9-Hm<7y|O6?5~+HSO}QQ.4ôij \ǂN/Ɇanzrc I*w^}*T,J2T2h!R􀏱cXxFfuyN/3mYYCU).uZ{x.h+|. 6~/](E|WG T9Ks6#<0q&WˤUjyhh>jZ=:5;1D$֪M\;2^>[2G64Pg^AȽC25)vBr.fM̯mN刨{Vpu0䢱4Fpxv5bC3}3Z(w9 |挸nxyXe**{;luXtFukR:pB>zDzhabt0weYA\FͲ& -²/EYiFKʼM:}ۖ uy@.%%3`r3O%CzȤW7&ӱ-0nsB#pM͵kM-bh=mlOKhM*#r547$ ĩekhtC iF7p#x. Q:V:uxܑ͕V#Ybueo];t|NBsM `9,ץ_G# 7O(^Xgp+%PiŪOUO!2@Oj{,& uϲN?tbfWd#\2yA`P(soTe d\C5=wz7lg/8aIYV_KJUAH Pf0;V.8|ʨ,<)bDMlS4X$.ji4oP2%  \ &P9dPt/J)X̝i֩<13i?oHEK0ɉ[#`X^Wp?̔0H7M&5*4? _H?P7Bao9 DrA!1x£`(LjS͡bi`tza$>9 H("'f AFhԞ'åy =!)2䲉L-lHSHTyИ4vDѨ2_Y9]k8U&(d6˄du:~7f$`-?@i#Gj5 {b.N]AǢ6-M["f5U'm2*h,S5[iZҲc"lرJ4'cV$'\/Lʘ%ltˆ†!  kV*#,?Ļ.0Eno#i 0b cO#)('ʆ.j;A&"3Ef" BָiMPX?:k(0$!\ᵱˤi P-LXLA9hŵ ͬhFLh;TʼT5fVp[SJ V: `tʼB\2AsL mO1maD&PK-8R7U -#OMq*^8<9~,<75oIʻUȳaq)حJLDV8<8c< q* L7>d~٬(LZe 4W,VИ:njn ;5EBXlj}Bsc7^j-KV2ڎ7P3XA^U5(jiwBkLPc/jjzPn@V2N™K{uX%$66BxR*1*ngOҒDN%g˪\B4e`:c'qA Ɍk FE_pVU5j(Ȃlɕ۵MT N$Q.'X}d"A,cCf렚cMXٝؐ%U80VX!P q!Za=6Y,x90MS*Qy͸Be$v%<60 !MLeEY$`Nby@SRpe-lE)&8+QR: ),7PU ?bpDX!LZcs\4HrVh荧B[蹖D% gY :-EF8U RnYNOHnOzLQ l`G0𨤂waIPG|Ϳ"9G-"UKAaLV?Fц*U>TGotrKaѾt.;Ɲǧ, R+l8=J5i]%صwKyxpLtcJN^0֟_5)Ԭ&˕zOК۽RY+x$B{μ>=& \kU~9E*^Lj9džMϔƠOb KK:9t;dM9ka HtƑJV,[i'ddomupӁgcυ0mڃ^ZpBey}ճ!g`BXKemHNڬdPDE4m+Q t44*ZT}&RO%F?"\S@UN:o*k m6?9+W]XAhTd$@km]_+-4KVvՕdp>&@]e%kͽ: I K?*6{fWwPZ- nc qKbB ɫ2V(nLY"3ݙ1])PԾ&FK|ȍ* V`f0G\Ze趓n$6pNg|LY>.:ʛnېR 'aKlD-ڶYOOIe^V&ヽصQ2c'ER>Ypad08- T1ꔔĥ dh#;鐝9UM0"? iK|hb5 6jd?LeLV|_VkárDM `С`BPALet;_:[\L^s(fTxbN*@ɖ ?KJ_~ Z,։] hTJ+|F=@xwJ)\Aj &<з4v=Ct y> z4 Ȟ+2+>SմE"`k.K9Q"j3 13ԩG%>‚38kzcI !$ :)A)%)F3&B!)xиWN 1B= :yI'3&Υ2c:r7街 +ʩ?ݭY&[5pĀ88쯂vDZ7+8 =Т# b譪 Ƽ%U Frt86A<BI(+n@#ZA|dяAD-y|zL"c/a3:JM\ %2'"泺1Ƒ:\e$z<;H/֫мÃ_x'Qw(ϸL{;<-ƒ&7,@i ?7ÒrE<*TK6kăa5PT ã'8@ ֟`R:1iOlj8F*21/`ʸģp)5ઙѕ:쌑!ܗL:,KA:E˨ +[Z%C%ҶȳKs l*ɜbԽ\Щ#wu'hD섩JK0&J+`'0Edx)(>?HhBI6: !MlAĩXRi>7HD0DNyIa&z*渐Ĝ1mF94(`6ɼ $RK͙DeB3"8$:X,K9.4 "#(•Rv< i̗%1$B)uě&+CxG2l ,THz (:UP`5܅rb IZB3Z9ʑx#P*l;q ޢS o9Kz;uy3 zI`뿔DrՑ2+TlSRT<&r)TDRVJ)A R<<(#( ĩ\T 30 J1Û´JAZN c*1+ACԛ]1Aɭ';v/IUG=[9׌;kOXJ = V,fҚ($KĂ>s௧,9UVKD65MAgщH&Mu.ԠM>5v)e̞괲$z>sr΂lV= <.BDD[zL1RA[;b* h dMŚ BؽB/3[AWA2LOZdLQ*Ȱs t Z@s Jr (A}׍DfEj:KZW:rFMe< 9Ѩa`Œ,FK2YFL&; ]!1Zu_\Sjd!Iu$\)8{@ӸQsL9l,_Ksߚ#H*Z;[H5sRGz6tŜ1-PjQd%ҋeryV[МNLW[m;d/d@QDJ 1atS'\qVT"&Z$'ҹPЙuS9ڛq4HkTJS5h.'Ӱ A>b1|eк)2zsX)Q-"Gs% Q j3NMśgӻnL7)-DgDpQQ8645 k4;B"J8B)As?_yRZa24"tS yC%>^[]"WNeQtGJ0ZV&.!NuMH+TAl$=A,M ݙL$ mp^LLnv*XޖJD&ĩCGi /o si 9'r6tɦdvL`KK)W9#7=""lG1 ;GS.w4nAmKk?K絳.ka,.-$ŷZ(RQg 2(5KSzmc)uRx׏K _%Goy{WGG ?>ztBw9!8VΎLʺ^T1#kYęV[T. !w>.5:͢&orfw!񞔱 QWuκT߲ͳoT@^oL 'Rv"RPBO\4 rIJm8>ZOd^1ݞFsnlA+@6^1DsٴG)uޥW~l&&_4}lVWS١:]nr9P40nٚjyg=%@'J|}{ >`|AKOL/^ /@0|.yXlUjc'߼W;V*G+kF3*j" J7os bƆ:Z$k\)1҈?z/Kjz.[0Z@ibMOJldߴ#03»[)-ʬ¼KެS?+i˶. ':mꚥZ∡Za7JLf&R^g)?ez׽N׋J*^Ͳ|*̴./:*!寮"NM"9ѪT"MJM`6 ^I(AuprjRO3RO_'G-rbeU*Ȳ"4aN,*67W U#̂J#QEmJC^i2aTZOG2\uk| LNb(9`UQxXɪ^Tۖ&(R׶u&D*=p q:\"F-Tz|_|kgBzG 20g)9;('sǀD%Ɯo)Y}5̬ NHͩlu/>y Uj'~ΖbnU"dGIEglшj ϫs&;LjK>pՉӴRغDQU}o+ӲΚDo *fE&4"z L^DQ}AL5NE6ʆ&[MFT&A؎0i n]tkCCZDJT`Rh)5Fm|7wNV%^s#BlMY$*4C@ФG芎vjfՋdS%4'/tE68MrfFE'|a>i*gꧥJ$ڥ|aaNh(PJ&xoH$rKB?*V-:=3Ugd\cn81jzRj @džԿ#4"^+xң2fb0E8vbn-%dL'斃 RE)z`)~l"]pn8c "T13]jJ?Vg8E[\mGRܭdؖLk2J2`H$æ4 Ɣ∵Ȝx @z/蠷+yJtehѸ c,sqhe '$..Gq*q-NdlE@Ź PtzWp.ˮ"eQN-H9DbZJf_&1ǁ#qS0j(N[iS1؀ p;$kA솛L"MR/ycD([{ DMf _9q}2[L(ښ.쀠8F),h}R+Cs j jɢ"̦o%@k"LB10J&MVP_64*W,vif`'6s.bK"Ш+%DX7*_zIX+],(1CNP+Far_KxJne.7JZ1Š GiP&24a *PЈ޳1Tm菂ӭ]N=f&$dL>rΡ0ʆ$߇d%8X@4KIF PxlN5EBr "HF QCXY N36%in:=2 +&&$-iX̍/PKSBD6F򧰿.GDІgBn}|sbH*qEN;x/dE1MP=0 <$A:Z0 ecnh7J/IipŖ̥F [DƲehx&z!,]mjg-q').KNPDDoo%"Rn_ⷊ*ENjAVA.>Q;WըMO&`r5"u&^Q 2@L *LV.Ē"e_t'^ՑDtq(#D7rn;NnJ VTj(`#.Bg)4Pw& vO\d0Ċ0L"ʼC Ghlh/ln>-77h1[ƅS@Z,TaDr lGlt.T*K0xI}zqZ3LZSv j 6H hr)_T* lpPnEFk!f1J dL|4ãm6n&ЮGiBMLzɤ I cEtTlKQhsbK;\(RѸ|?VrFRj(NmmLNϜkn0.qhf* ؕ*9Ri p/ Ha? &! $A[dHbZDlԛCX[.5eP$idk?M̓ d yES|MHčS>0(|-"za)`J1/4X^v8kX~b<>pkN-q~ÈV(R^`P3!E׆?*Ʉf88`n Ԧ@ 7JW",l]E U#dWkEY3GM빋"/1Vfj6DE;OSUmɦ'  IVj"qlAkQ)bkv8T1U'Dgo)-Wmi5rd-On7{L䊳cURp*O_턷@Rc trÏΚkφ毄JqSk&F++U1BlEzvϲt>dj(cd6W;..F?1L#{St tj{[ V?!NUd.D;GE'h?գaz(NZQk=XPnb(o nbj'jMPV}0[h{N9ğcOa"Co D$ȅPo}J&رMض@ rcay,:6rZ. ^gV%7*Ͷh4C.Xv?d:+EfLD.|: k:{,݈KBk /HH{wIQ_W *P:MfJ3-֕UkOO᫆7iI{6/:v:ʸPRJ2`+YƂ88̾|HUV3@&ܯtG.9lZڮs0ܣEe1Z:"NCTwR uHSf'Icߙ-ĶX0,6\B(;71:6p25*L*RanmБm@%HrtUhmL КřW,kW^dѬE(Lcϲ۽ 48#HN}XOAqyU5ٿ<~/jYzF;j!IJ\˭$|F ‚ m4fB%r|,)Jlg %F ⻢!.²F^nD0eds&xqVe}U۪Xdo 6$ȒX/`Kd)jer%?4*@P@Q_+d{TwR=gHӹZ 7rѐ+օeC}aHװ&D ^ @Mȩq"<70 PcY ?d@sX47Z\'Sq9dT3ئJtƥ>x=)ˋ\'6Tؓi]&^\/ B \:Š$?P"`P`5ǢiAYD"+ϧɔ!?i`xuV[GDa1N1+f cbhjW%3齺9$쮫GW/2nTWeT;,jG%ap)*o vx\]VY4H+#Y~l)N~u˥☍FSIlQ& bK2R )#{,K2KԲվ* #c@Gs>3k’-o c ##P*ì#ڐIS$IFl[HRĺJd?@#3M( T\Ձ88iEGG {(Ȋu ..,;Gr ]`3rndTqFLTAKNETJԱjːM20+Z4.Si=O6I2>McvP'0 4Է@ l2b OZQSb^m4zͥT9#,\9-[#Lc+ nA!X¸u)=N2S̍d.+ +{KԹjwemlN>āP fGrӓ/  N>53èaVD+UY6z8dXhʡ O,rjLB,F^;HMl&qBU%_L"(2u`evl20ƺVK,rF&9t%-{ŵ١ehJ򋵢&[[DoS t80hmoĖcdh.Pӵ6HNz)'&0QvqپƮC˿F IDDIꤚMi293I.k o)k.ۣ)\:啹͏Å *}q{*7:IE؜ѵE1*5B; ?bD;t"2AN\o7{DҰAzWq ZF |z8[ZTEZ uFZp1SPЍ. %KT1Z߬c"U Ҕb#-3D-ď'JygLuFrɛL9uLf:I̻qClF{B,uϼd(r!J MWI:&+5C,*Mı 2l`_$d92<8ꍤ4ٜ 0ٳ@@Nj!;):%B lDF0BTW WDHK=e/*R=cڥdRr3F.4BQצ*IӐC1(!GY5]W\tB4%]ZN=sS9MC #{s@b-`-SV64LK%ԋ[dS--ŠBc[!g1"U'_I)b`KMډ;^ʳTݨdfi>,u[`^U^ѽ3%/d S h0JzMGD7FYW'ьϦGw' nl!+ܵ %(D{TՂz \Q$ {#86*]K^X4{!I[Ҽ:PesߢZ8y; >++ˎKKJ0@ϑ7|ƾB : ?{dEPQL-Jl)bK)3#͛$#Cp cRцRK'LB5"ǝ{C4hHHd"U ydē/&޵X1ZK͌LT1ic/ +.)4!C]Vѫ^*)>ܛi>#!_OÀhL"04j'c(6+ PY&=J&Q4a~I7"p$=?Fٗ H!DTR"x--ȣ_fR Xo♽NFQ_"z˛A$S:6-sarlV? mq?UT̞KL> Ǧ;j!R ?[˽sB2N+p )Zk԰d=Ƀۼ +vN,Rcp46Sj)M𧠐1f *(nF>kʋء0jS5/r6:PS,j{(1',"zҝm<#qij2p.2a?:ɛq|څ6J ʁG.dEr'/3(K"NT% 6P.$ /E0J OKOTl@;Ǣ):n/C^Cj;ؓ,ԕLԍE ޓ'0̈́UDG0Hݰ l3uU>'FMtBIe82V$˥,_mn[QK+=Hmu KZM^Z0:CmȨ?U 3&8}9<-mփ,zLӸiǚ$0ߺݥmp$Z1KpӸzT,+z[:zr%BѵQfY@+eA[6L-k6ۻMm|VJރ5fU%xlQGԜR9A(m̭cDn(4&DqR)B+ʜBhip& $ WY* 0`G uYMTR3 Qk *&E&a9T3,p@N]r[eaCJ?I05ȶ+yh$WZ>X- dՠPC1>R{qdջE#!UlV 5́ן!f<86ZA*2d6i?;P͒* )B1H\")pvlwt)Fj 6Isdkk. Xp =ICV@Lb…mN'JgJ5c3f$+O!/Dh XBo? %GaKR2M4׫cX*;jAP#MuZid:5WX#am ɞ̔rD92sa*) yVܗr –*=BFyX_3bcG7Sl=Riv1Cf bil B||Ng`yXR57,qSR9Bf}BBnZV--KZE9y[Hjy)2IhA4HV(ffi7t~ HkwHW84>vtAnB*BXt;YKeSJɍ;Bg9A\g^$h5c92`K 8ݜ\@rZ\dZգ#eӸN&r)vź`͓5ӳ%}Rյj򕳎7UOh+!lOO=nu5Q>0[.,OZXoKO紵f:S/M1ܕl>lujk6╏TZ.x}( ކBf6J񈔾̀#MI 4/>DbHdlŠZfYK t*WK6bC®&2όľNĆ`t_ nЦ({ e%꒤&0udh.>{BKq,CoN?bhk$줠J/Fo0IRxVM)(h*'"E=㲠#0mPYF[r:1rl猁cm泲Ef+D̨ÆXy{)7N(M@0JzH$v/Ѝ FMc k\|u2*j>/xވNI 0+G(eJ  7EU>$hpF3&.hFhk}3ԻH, nd&F3f(l>rh-?d^J6j`+:jўvʚd^q誖N%+ ƋGbTh]Ī# jXFO8q|#q%qdb+~+*Y|ߊW-rsK(PCz 0ʗN,\#VESaQD@,`d3gh)HXqbWQzX!I91vRZRқt^;"BE V0HDD`bwa'7nblZkN$sJPl|H7M6θ1g<]hrEJ~j {UM҄bǏUFn1!&H&ah^<Im*5̎# Pju%eUR %#a"'ԭ*4#V:.{b.V)^ѫ&SKԇb׫wm`mF5r25QҨlxO,\7Z6TasHGd<[H:9h~ǫgZ Ux R)!D":Hr6*Զ Jb)-ZBN2zܵ в.0P&*V,K|" @F/Qʚ3*k "l2,ԫ,3L3+!ÐsOK+# y+Ɠ‘J01A&i]/2L,<O R=7!Lx>ӄȠm>3dѥ+1XHA6G#(WȌ ?pZҲɺқ/ISG%l 2* !rt<)P<26L\y1P>2PFU 7SɫkdԺй 1F*L,#^eY[%c+%:Mx;W^:A"'dvZ79:QbPPD8t̴G­Y ѧ^ :lI&S9&ҏ(3'g5.pq4:I\ru*SHdI$u(Ys]l"\ 拃9&ĹYVfIzMoYȣKl۠\XݶzhCg9NS#,Uy yH^A5h,+~,<} I+DY}9R4A+\/Eo  aI'H$Q79̮$P[bEE_^j_倩%*$$JR bvo-VRPi^răVRHrf절9i]PCekƃ:JMNɀSpRtg8cIktY'ժ%Mu,Hɸ! ^\BJ]fme͚]$! 3H֔.?wlrht񌮐=&K+xə<@5R5HB3YShz"WyMP^=>3 #}#6D֑;9q%]k*q!;u cЙ9E+a DlMr3 խ0 غ/+])?ʊ:ʊc%NV#FavMoދAR۷JuiTk]YT{meEM\mC[pQ_2 @efIHB<\*^w8Q@wSu7:#BoIY$ lgi 2.Y3QC9?C=Uݮ̤⡤)g [1>fA8A1nث^ r㜵9 QOQ?&&OXVV5LbÄV>j400y]negFٴ|YE#S[Ak0?oL#rJ9f7r`΢ŲpEkWBG̴tq&SUZ[M%iL)P6a↔ E6鑥j+IvlX CĽ)*lqϧJ8xm}iɦ}Ko]Ow ۳jq.fa}Hןri׵7ok(DLS)4/$l[Mi0 N΀iku!Gu ?tUeG C9b&$|ߐ^ԧ^w>t=a.k̪m+咨*|r)B$)@ޚ*:vtҧ#ivn r gt5/jT;f Ž4t4dҐ=2-B5'w9$^>ڛ.|~e8eǺALs[iA ' *@rգҏ!@-N`ɾ+{.(aN()%ym6YB/>щD1)Q@!b(Sj}AR%da֪CIE1~*lJ X@Bn]?bͥ)4b *;j9'ZxAҌ\Tf!aDS︢c!.5ɪ3Y \) i(#6Qˤ{C/Ч'OE a s*яr*$(~ % 7 ( H R H"Vҝ򽭑.qJ\t+Kp@)qK,LS1xZi-yn?Ⱥ8ő'm@񥲣%|G:MJC{0(Kal:3Yr6  If&qA{ӚAV/+6Y<Ιt25<{?!,?(;A/Z3"/S, =hΘ%^Lih"4+&G&$%\tE6˪|"6tBL۫ D:6 P)4;ܒ|1Çij7t8}CNO}5J۽'Ɋ\&z膄@̫!53cʢZ⫀} fI4F*@fN '$<ϫK4# ^ )>2cT6C *sϲ %Hi*Օ[-7>(6/ݖz!L=D!dfJ@  ”c0=./{a/dCF6-Ԡʪd  F(,ٛ nG, [ǰD,3);?fUt8 LQZ8&,M:KQ:18}/+ED4raԢ[J ض9cH: y:BXO9Oc4 '^ c! LĮZ *?>-/b32EP *rPu&:X HȫmH~7l䊲 aHZ 1mѮ7Lؖ0zD?7%]tJf>Y $SϢܪT^Ir%;JJ1I;JHXRb.TV1s+RU;=FF\}봬y}DLV(F:?':5<K{g\TL ДU- ͮ+=TjĠ1/JjkV5Dl!~ ) S8Tq >e#S(;Bk˻s ҽ>YJ%tAN5z8)MRE9t2QZKڵ'+c KS{7P , *@n-دuڸdvXq)U61s1!{[DO> L4rIO:j 78ó@_K?BkckCF aK5  ЎdKҒE Ö^b3 -%d\`9 90q=?ɑPY86v9VcIG'3NNUDGmBP~b C*fT)ّԩ]Q.]~Hc}b zk UHݘX~~YBȿ*m Zf1$Kx14@fB_e,R'K:!Ԟjf0}YPi5t\ f;]ry쇿ҺT˴d ξ;9&Ӵkx&q|i)sĨj7:O~lݹt6;׉ƪ5",ts H,%d=b=d˴Rb0 Ur(%O瓥ҝUPz׬;e :SMĥzƠ + ATPp|џ-> kIj[HqӈHVtע詵5g1&J:viT}DG++0z%6 7RQNl(`QЮA!DDp xAMX8iA#VL8ۖF Pߵ:Ҩ@ЋiLd&AcOFSFf8opsesY"TF8"iwHcAOK;˴PPA}FF<8%4U{Ne:Ə0, ̃W0Vֆuv#@<FDVA\EB+SJ]@quXb!߾F <9*zEN`VZ󴽷e헆Gm R~C>|IMR">gR]w=O.]G;p"]<YezL!!b熕;T|‚LҦHȆ 7&1HǶj꯴8Ȇ բI-{f&Z_͗CkP j)y)R[T2owM1gӐ4d ߉6A8uU] $SI3?i ,4[PT=%^ضUӽLsI3|&R>>3v3ϥ2beX='*E40%T$VC~(CaO4DA T$|j¡8<@yX Ceث:˧i"?Fѩ#7w|F)s5e3,"{$w/~jȦS՚_hx·kǐy7ys&cj2>HP.Z@Dv)@"p)L޺3)I␶-F8n NL*e,7 :"mSO-L8ᯛ ~f[ i;cz/O\h;ߙ;kqm1WuM+FU VA%)4 ٥ NNn*f/*#úLr<Đ `{knETyO}&2o{\==t["^CX"(+4SUT3FВ7)hڢE!f"eB5 jݫ#U-T-L6F`i+)G*HG&nBؑ"F}`+)q:b!8i6~V؄Y-;-Дr]8s=)YqC)MJF-ՎJX1%-,D]O$Yi@P@̮dӲ+ʢ>#B$IfyD冯"u=U"4(DFxjdȼ=/9CeS*}=byr/7 4V+IVUS2nJ%+,xŬ4Qĺ(9֞ hR`gުjhGJFQ:*k/q8߼XCEYΨ%6gj ԠXl& NW 4nCI{U5ܟa&q ނH[A .HkYASbjx7"FHδ 2I6V%.),isERNl+•h!r`ec{U/^̜9i*v! cbac~!¸f@@d 0$<ǠsA9FcsF U9ܳsn] w@VkU\oJZOUDQb Ls<%XpQ"OqlM߹MVzo{T~Qn0@2SrEtC^^U^, B;aLfzU$2}kh[1M*K•'ֿ͎CV'iJ|]l`fcG-[֫GCJ ¾)نLZ#LSLQN zm Ѹ6iӝZ׉4$IӪY&7v 3 WB"oW5Nޢrp) kf񚌕?e@m{; p})[Bz1)ut\[j]gTĮa69,54' ۵U3o|Y+qVE ^-"hM0l"FvL(~HH67H7ƵgYI:*VZ=81+7}_#aF+L]v Ѯ_+JNAYBTdžO?b>'FDw+Dv,^(&Xւ;Ef#eE̍xǎ'fneP #jd=JAq,oQ@qpLL^Q^d@b ALhn% s',A!ZAZ4 4 tl'6uR"bFuDeth CiLfk A(yIhvVEgyEW`8|JYG hsH%}Gz:~K$TZn* =j\WYVKU)j:]֋ګ`ݎh} .Jo<2˱kʓ 3N&CQ 2(gYOM IH=0mb}rMM'l)K/2#y!2D͑Dkq+1&Չ4ڥUU,`4@X z=VVuBG ^ p2  q:]` u⽀EGrƋ}EP,|0`0KpICvITZ6?LRlr{nY ex,J'LZ4B}B-L]02,|tRR_$h+m ş6&-(t8(*Pq6m7#NDբ,aj##טjlUdja_$}SHڜgT*3AQb[GFqه*ʭrUCDVN|I$:w*i$݁`{X}$T)c]k_)2ێD붵kԔ ;}wں(&KFgg|la%ШSSڻaµ-`D2L\'3n/XIgtcqGtY3R4  3 >jc%5"(gvt:5)3q9lF~>T=c`i~&RbsJ~Μl2-ŽouJːT琟F!(cT#B^) 4G䁐 = f$$|hc B Vj&.X0\: AA:L ^ t]ˈ^e޷e^ _&%e4I0dN֟Sg T~`c)@gJɄ2 ( Sd2;cCUGuH.h†FBH.#Tl t πLm;ԆLb9wF/:&vF̐kڽz龝l1گip Gю9D&cHij\F)'ZJޙ6DƎރ^Es%)x8 ?,O& 2|u#ϙdRHfFQfboTI rqj`V,P @d߰rP/BvnlҍhHA$mdr5"8M}j"5PB<sQR&g.|)xl:p4S!j!b|qSXZSc*ff*M"ml PBp rNȂnymLIgFm"(:S0ʪ Wc4L@ `(c'5'ғ0 ڃw (NwOHS@1 rrGs).4\lRgӲT\}L9q$ rnV̌g)(f,?`}j8~ObH\QQ3rK3ovEv%q1GFƱ&ˆ=-VT0 sz'oLlSB:ڎK+RNO CM*OM/BH#L(vL襤xm]#3H'?CXdnB)qi4'$Hlk/m}28)pҴ>1pB(5nĕ?g1(-S+_^L-*3+Tm,$bԒvN+Mp2$?&َjJ~'w%0Xh(Cl2$Iq,lJؗ>r(w '.)<CֺdG,,(cdk.R\N(`8eCDl!fr& 4(G1qsBH=*REvb FK)鰆H8>JvfvTcwh2hJD&Ɨcet/&+3u1(m.Qt-(P 5iYő5jU5 $SO7JlF/oΔC#~oe-k&2'"/0۱0P5R60ICBp=K\Jܢդn*H= &|snU#:Fl6P+5/JJn/A5,/frQL))趓DS@gXTFJ&D*m9HH0P#b|2'aVB6c3cL ~97dtҙϕv'NmBmj܃hqsc&~zax"7̔lhpv y)Q+cc8څ$ղk}?&?y';NO} M+ctw%3NJ SL33K4{llswc& jjHGHp>Gn͍QD+ M {"Éz߲ m7ih&,)G[$D~m[U823B&HHY¢e*dcX)jT{{p D%Zf$|WpEtXb@;SCP|BCYzl! + [ܸe` +!yBnK˾^,Ni657Fiu5kih-5Rߨ9-Vm}4o++h½=ֹ#(dlmz֜`-=joą'?PEmr5^5Lés: O瘰rڈٴĔRqA"fn/>)rEZzw;1UC[.q[XhqJPHxV~  / g"!ౘ,/aQ`($ I&ro FTFiBD (nDH1yt"J_ܦUr8^=#Y䐘z5U(piU:%qavŊW/4!)8$^b+]!`j%ai]3],BM*4:~X,z$KOʭyB #;LAqy)e˲F_ԪNwL5VGT0x(ȩK]je{hзR̰n΅%&Y_^KT WJ^эE0+Z>pdΣ s@Jzv$/ښ#J8^Sb@AD :餐zh"|hP4b'liQCʩ=~%7J&2_DlFڪ&JV ~s5:so*Kڤ#,mU>td$$jw`{|h]8OB&d~?0?)4֞i 4w؛!~mXwa8hm\Q1FCxm8&}ˀG10X-TXXRyS,<ȩ&,{0 MĘJh.ZϜ~-|J2ɉrt(s~(d=}RF+4&PlLM̨Ri$IcR'TPi$n D˥TTz: )Ad˦V8y<jR ,*Y^+^x_ .OHN:E&3WrN̑w3Ptcvn@%\ Hdn9ʤ֗aGQ^YG.o%)=yE T:FReD%"5{㇉"zWAB# tDjf( M+44]'4 z ,j 2+ 4I|[+4JKN ı *8 qQI{ӻ4'A6I񧢼,Bk㨀*Y7n\AI,ˢ:~Yl@jۉAUJC=N }0IØ|004xD 0CU[Aq3ɾ#1ñN4Nhb&^\ފ 3D/ZY+COQg +B풚#HJjh4Y,tWe@,j2E8)Òl&}"(sr>*4t-cZP~=YT@:%2k\;!aY*CM^K- D_6f<jZ2)ɚ6y#T1 ԙ R~ EֺJʧEvqҋ( 4,@VU(HqR#%1EE|\b޽$̶ Ί*>X'K "UEM`lc&&~ײ#]ܢ \&TTZ .rEض7\PÐڧ@,PK&M[;JK![˽yř)diM|>oǫz˕[%;P)WX1Yp*NI9ߝ[Q9}OO$į܋6@jÿI@L8[?"2!2$;rۏ6nFi\VQ=$J.N9ُS.&qCcAẽ^E0E +//\}|IԛhD>?0}=ؠ%铙:$t v=Ŏ :]]{"0OUCeQs{g8Buhy{^7l[UU\d0cĘV1tJsŜYV&6W5cRș162< Lb4sTlN?qޙ}|څkBl%{-w] lVb*&!*;$ZCS*3 ,O\V˱Zr&,ULd-Mg>#jݝ<\osGcBᶀ5<2:ޤ{l޲(@X$l9v&a{8- \k_tS [@r"׾(5Js_!.*<ԈǺZBa |gV8q'` @x" A@ ! 2QجAch/D$? ;E#I$P9D FNIN>ˢҩD-.ǣD{"nmwIw.P (52LV G+TYTױt8+!ȔIybk`,KhX %Tkube غGKcV "7<ƀm;~E}G'm= {RArmkL_xn/.) ҥ 3h2i[5ʕps < $24ůj,-ʔ"˦) 4:7K,OzʱpZ9J/3*qSԉlZJt0)! .Ƹorr&+:=b"ΰkN$&/\1J{< ;ڶk;iZ¶4SO/7JPLZ~"VO~Gx}|6|Xb+'ayVlVݹnJ  @ ^c0h 0 w0xBG3,}V!sP@MR1+MV673S,")+M@$ M0I1.MO''Q;C!vgKCÉ-BO*ķMfc#pӊqg$Ĵfmy܅2F\3#\5J{ =-fID욏5>xR{yFW"hjN68,U]:Gr(Qzy2HHe + 4#ўhP)vX\E?8WB<ۑ)fdS7PW3CjjsBܛ\C5$p1z1@IG^\BQi<"IF$4Dڛ9dݒ"_lVi .@ fЩeYȲDִ*2J0X1?M }c]+G|=8(f A{q}~-"ˤcp Wb]z@(/j\$&  nq^v7h 1.zƜTbKHvDO Զ6ε[:Tj!DZ䴆y8n )g 2BJ)+KE%? ]@n-Ԧ U-L-=T7OQG*6Zm:'w1t\;v(D:5R &Z @ufN2i 'HWynQ6OCi(\hçς rgq۱X%MЂxIgقV]NVL#?r$JU(kۑEWf(,a2RDvv` VOIƠL3ZEku*{=죁*J2 n)[xg4U廤^| ZqΉ7\]^Oq| _5"Αr tF{*P"A+t݆:<еyjYj]\y0wUI+ՆA%gt\kUՐ|3J4D-#"ۙ+NR99ldˑmQ9%=b镎 Y6+ m*0n> gcJ2!t:}eXkX `>!XACPW z\` r^ ]^``k 1z<8h,fD3 2$c\F,ӭM2J8-ʂ >ȤLHRv `+Ǿ#ol @3g2If'g0fp4ifL,g78">dh8KYp&؊6:\$$dK ڿ~lJ&LDHj'Fmdh/$(d:lاH`C⎖e`Fi4GjG N-GbM2|d/!1LN4o:$ % "i&)sdN@'F0 l"A8Mo"M zYdrW d:̒p-0F7^=vG # 5q6># o i£9r.fU=p4 g[B?*iJ*쪴MRm`uz%6k 6'LdtIB"f:hrͮRnЦi7;%Wq?8 /RUObx'Hz ԕ3"TXU3n DaM KJG//jIJ9D cR2Grvv;䚛|0vbA% CS|W%tfIXJtL;Tr F^I]n1QA"_YkU̿/#8Q|aK`J@iv:{S;̴|nz뾤jh'jA(6  2,'ƃ2py3:C-tHtME)mGdOɏ #W>)x tЊ,r$f!/pWiRLsԌi@cT2VEdN|.+N` @QEQ \eE^TTEDcw0d}gHJTDr~ Dc ~iKm>Hڣm)R;"tf³._RW%\,gQSxi<AqqIȋ3L~$WC"Ω,,[V,ԑW5c!< !3ʃBf'$rπ9b?m~FmDxb8dRo# io^ rNL"/)rO E jzS*ԽWG{IM0AQhi~PQW'̋4 Cc0Xh2NtC]U0<׊Ʊbpfp/e<,VRhG=1fC(xiϷ,/EvrrzlN#Jۨ"Hs׺*p/0&Hj[63yܼ3O4S,x) yİ?Q qodYd%5u߸؛c/T!/{̖- K)#q&sODe F22-c-kDIt 4U,r].d@V6LUSCn hU)%W{Q8i蠙R6 Zq|:؄s9`iSvsK]5=7XvmL"dXʭ1TхXY3+=-O2RlӢ5I _*L|nypo; dö'D%0ze5իy9%όGuk?@s\A1(>ZX}ItR4O5Kj`9\Qf`zD AK4*Ҥykjv[9gGTbqQ̇q,`q^6YsYήo(gݪ:C3Ehj~xZx4 j*v# Mz J'c|γ\1£l$:pK2+”b+SIJL&*~&I&$Nr{ϤZ>iR3[ <3׼U>eI$FeURe{A<1, X JRLQPzneOLr= Z7zf<%AI>ڻE%/jCn&/.f[D$+ll(7e#O=DFgőn36d43ZkmGe#Dt - (, c-s% W UGK96(&fP89j"0WQǨZ *e7b )>sO#r`!Ee4*Gݜ3$g!d 3"-EN #S4%khzڼ]r:L7oQ9@,VI*PQ)Q#k= һ$l&}P;5-5Ո*A(1 h#BD/P,IcKʁ&ih#TX+,IG>baA(6!SjrⱄD2VSiHq4ۚ0L&c("{=MCBzmd;r`Hv| P Ë=ofPç'69+p*c/4J#v 1A"[yoX# a91!1 b\ s@=͹2`ֺ FLiY}f,eZiHֹ͑%/J {SkҕvhogoI)Wj^ꭝ,B:lA=H ۢB)&$W%2(AWR*5H@fՉ^W$aևq(9j֮ j|4S.i5WZ{OVЎ|H$/q|OZ nz5k&E)g7I`3vifs7e#w "( X L6-XK5VR)L#UH$Tˆ^ez\'>ŵد j(4Ws4ưBpzr:Q=ɯO+╒Z/F#o^߅4/MdL&~ ӱq])UC#(wJN9 CHD;\.9;l -8 |1*lF/6E2 %k`~CZ;3:ʃ#\,[?J<[رaa:# )>gx56켤hDGhB R" aN8HATǵLk)NFkH̶%1ϻ-3rE۴:X1{=5"8(\j qJۗ<p||w/ 1 +q 1$A\c<Z4:|"ꮥ= a ї5%d%Is ҴG\,!Bι/dCa#蹋({_Q"Q4AR),O3) T)ٛ|=q$39w7ڹ=8A!)n K)ȶW8}BLjAḽBԃB4"t8Cm*e7KG,jH3Ҟ3qD "ő'3A)Cza9 -sNǴ_N!:5:0D$":; Q8͙!1건-4[0&|+Œ3=ks7I ؉Kj[h/$E t* ݴ!Vȫ{ /"$ǶDZaxV%TwyOF{G >>:11; &lQhKy+;4В["RğqCQ|nĩ3a+GNbtX/ }E(l O-zҚk$Nd1:@6h> 4+$߸s%B1U EJ,%P/뽝\WL}_:$tq6D1bsVZdB2GDmX󶜡93?%ˋs5oӚ5gڮDϞnL),uDh SIJA9zU, ؛n8 ;ϒv'ŗ@H~0~@5*u{-P{~1 R} 2FD3HcP.Q(.t ǎ?'ńy~ 8WqK Z,\\z>fޛȢ2Ec06e# : 7Lp!}jR 340Pd{&{GC[B~Ee Ӈ,-]>tV!PYJGq謞u=T$IK2yrS*rGLJtj%DQg+X5*c kVIwElFlYD=?e$ED4Aﶜ8'a4?F=q]z$gCEUㅿYuc*TSeefM$*«9ϣʛ#\蘋f?1,N滓OkLB7SWKkLK;;Ⱦ `-,3whcQb#Tq+(W̑&ճwC.ZK{8EڹNLQ}]g{*`rs+ !&sùf{=?jmhbK"WZnQ*> QB>oohBYϚ0еt14HT,ޑ)N1g,M^{6E]JӺDQлlH s`U&V^!C++1!ab{DTEКM^lǸ&= 7Lf O΁3 \f3gk1\ &1"4~K Dm˒E$Џ{DT}=Pz灈j*VO J^%\!"+W}5rqFi]WB\KyjWr SR` LvEwnuNR#r?K&l(im*H@  `?@  Da1APfA L'Dp$m`>kBeSq!2,BR!RvTZ**K`t\*FM4\=.k)&QEgUU2]\$sHTfAC+QijOMVHzuEӠY^JhthjxlZ'h]4/jLa|yTidk]YUaڜ\6=^#TNGmUNAPYzEDpܨܲ$/L޶.F }q}P&}'2|'  }El]eHx @ ^%c8 @!( H(o)` n!0KD&k+r$+҄( "H$Zڒ͎;С˚OȌЮ-[E˿TڣԞ .֣LV-~({OK1KG(>պUxB4JKzꮴ'mD$4uzx:TU°?j8SX\. N/:*SUNFS@KQa(1:H)/NJlu"0SnO+t,OZ1>tԣSuFUOUYޫr1jNuR 2nSB@xD`B0-j=h`y;2ke^xKuUtc+u5o}n;|dSYfpJN5v֨ ~E.FՓ%d) NO n 97]53q}ϚSA02T@=,TUPwFar"=zm=nYo"jށc-OW-4&a]7+NC8g p+pQLRtfi6[{rGq}XNP&bWdEnZTȲY8'Hci\ڝ̠30̑pu{#ySaz m1Mx#*,^\;>GMnWNdCBIHL$2aUJ/D:BHEt]RгL .e^C 'XΘ敨ݹ8(%V8 ʐ35j8N`iP(*JqgA "Vqͥ(XZ%AZqꖨFz7mlƒˡZ؈kDT>i#t d,kC\sirq/" CLE#yPA4CCᓅ"&EQZ-EF pBAH&$@0D@"_I}+$+q,ئs[ 4daz>ji?I(E!&`(6$_} '0cMm QrxXStn9 L3hžrT±֝s#!Bub_1iG;P9aQĵLypnJOlk@.@<8GxF\);3U0lI6" Ԏ ¦ITce,-qqJלNݎU w5Sar©eOHfSݿ9O 3E{OR3O ^Zoq` [㪫 ދ*`Dej=?eE UtdN^.K)CZu ~U"8 }*u_z>dte&7Gm9 1'Zn/܊NRs@?~3^=m;)8gaxvkEdo^/0;_ Opʳ ج+ܥ-s s}֜u'9ͽֻfk# o.k,,zR[ s)jnR0X91w9S:n%3[;psZ72Z"MN>zTeF9Ghe q:E%!t)M+I@RXR+, >>egxSˌnf>نњ8z0 ^#'*?ָ&!\' 25ĮZt'q1%DbۨI*zsnhzM,I=ͨPN # kZB.(Xj0hVonNFURN6RL4ΐ2) eN? )8 DMGm3m>Bƞ#lh%+~B3̌zI$FdL%( L X0-f8W8n :ډ eT;\`VE0j6pI!8VF($ pxƾdmۭp^* E=gg@4jَܔP'#Xg橗f,ÃoUq[ lgm$p6 +ke$TEH{JʀL".o21c|Ei"3边lx1l@ " [)IϔζR~*1Xn8cu$ÓlkGgj<+*VlhD-lm(J CTZ1vS`3ώbٌR&Q@Pd Z&vRđ'Ȯ\pt&(蚵rDݱJ@V@IA"@: ". (ATG|NH@DvI`IJ*ZJO!phK,;X7t-whL%,cN$l ̮''P w ^ δ! PrFti#54( F>Mh[9lt0O1m<yF 꺰V謎.qj Qn"2,qNc'\ͅ&_Dd l +e38-V-do Kdo>Ծ~03s#xQ'`օU$F*G(8Sp `mI&hlw',U u_ulP_mznQE=vFVRkE+e֤wU/x>X"lNR1Jlh̸E:GBJr 2HIgOdiEXSEƮ5^R v*lbʳ4'('bS<,dãx8I"SBA8ABC+o8)Aj&T!xFt$XHCNI XJ*d"('@ $KrQ"|%wMxeFꅸZvŋ#8PW*OXG, ~l)`$Gѐb;9u mm`Qu,519;tyx=$nFb֗m֮6W,ϟeEF\ӞWfehZ>(Jk>C5 !6c8 'W61G f-l+ҘUJUyv0nup,%ol vC^uYT 7mP+'m'okJ&i˙MQK÷U#mF*QqS86&xhSM/ 1̔}t2VNN_/ '*j Qf9VE;j 2a%/VF υzffY]iRR'!{%n=Nb9{ֳO5nlNKjnU'AmNa{\Թ>+#x'J&DAfViyz*3Y2 ,ey^V#.A ^L!W\s%II9b su`M۬1JhY^+[wOVP[QlmS*?$He=hF[].8C c\g{RMo<1Т$p1eu32Gr:]u*<{'JZ.[:Ɓ(gH_gY   Ѐ2 C@ a6 q8TbC!I$h>;M.? !pi$R=p#0gS]* NiME岸dsVM'3(LҬqZPȡ3t՟8tf }LqX#I`EU!+5quKkZ[ݨdgW%Y.t1x%_tV~27IeX)]ߝYZmkar Gk)>}>o|P|'|#2 .m Bp+ B3 Bi @HleH @EQ @0  ="o<,| 5b$1J-k̢ 0"R^繉70ʸC%Nl,#6S)JK,NA4* %NڔirN4ʏ˯F<¡3V)C9ΉRȨnѮ)J0n^Ңȗ742ǹ&-J+昨ʞ4nVK\K-OJTq$OYj :$(q;X+܌?i즴NL =(!Ѝ fpa,7/S;o+M#¤.,ԟJ7IwzVʻ+MYROZ<7X7uT}OjġIKך->I[X{*Ysjmԥ93UmR%&ZlŮ[\2J%tF6##ZI B:BU⏄'m 9|8¥n\8ӕίbΨb 3t-neՊ-+b&ϻǼ u͇Q9&ͮFv^NZG;;'UO.&uB]'RS\2s8jv:S0XCaKK8dsW2c 4<-"YVQMtlaU.Ϙ\.*H1yX-tSqB5l5# vB[L^5 }g䶚Ab4߱ ^8qL6h؟ւq%ucY&2X;L?BҗDA ?C)Ϝz\Pl,`^/IiEIiL*!>Qm0ڷ ReR TCॹ!H`Ot~M|@ >"$ρWCs{OyPD(2Q,%p EI#dz98C"nILt^ Fi tKNSeDJRzeLqr)mdgJir[#S S2[ kr3(u3MPNi'mִ7+ש9sZ岖fT6TbۺHTPzyb7S5= -R+~$@uvKY\U0%J&'cε]vXMϰ?"ȨeHInOQLLE!t)@PJ70,QS^s>fIqd_K۫F[p_1W.`fA~/i'!9⾵1 yaFe56PZ3} ܣa70NN.cV˖Q'&oVOETس9Sس`gjU"0yB_614hk/ikcש fc,wm=gkfJu-mC ‰X+o 8e0B.KAՁw_rS;{s}D("Qb5<>0#fH3c_#GIt81vg6'ljV6m=nL}%u&[ MdNdB只ry#W?- ZSS) 6p_ ՒR) b`!;p24q G1 񡺑D 2 8!B0C3L7Ԣ|,c1%.T7:az;Yө); A+ 9r=:>꺣O+*+{("A-^I9.@a!c- ) Gjj7T8 Daڹ@^C2Q;/##JBJLY&IH[+?*k/1L$ BӱjH$A85-Z՛sR0$ ׋p~`&'P9830 =[l;I(y9<+ CuCrX)4DI#1Ɖ:?*;/.|  z8j!H"S|snE <ӱ3jnA3IѸ 2qt՚4cEBTT{="*;L@eIF%jC)tHQО"cêA|Yc! ㄐD$RďK\"XK+60ȱ$ʳs?O A@>b?tR ʝl1  ﲚD,BC s鱊P5 7!(U*]I22yTZ)1y4ҠRϴVw2.ZݩR ª[=al9CB+;?KTT&|{` z >Đ՛c$== ʳUio0ǸK=IQՄj !i_ S t5꽞Rķ]8|]/[؁S"8tOə59ؘ@ک,S69kqwOlq69$:Gmk1[ӓcz)mך :=Y2ӴE=`]Z%3􂥑EeCZ r;S]C/5=v Z{#K Ea+\ KӠ"®9AVRk(Ld-1\/TC/kқ*Ѧ(:u'C'Q848ND;.'PcQ(Qt(I^ NJTqp W"=AF[(=Rι#REVka'?SuGL4*RޔȺ{,ѵ]9`L{X?6CrKc4+kZq_W]4?kF>B#I}D~BO4 Zܜܷ]dLNW2=!iӱ*$M*UHͭ`у/.]X^,E=;V5Sۈ6!>ծw OEU\+=-A:X]A RE,$'Bn86,Uي=D0͵f3f6ִE&C,Mmj*af>E^uj]pQ1͔;BYU'6ȫK ,`Ø EղK*]*S(6,D[^1?GYaHߴ" ^\P*EtSkٌ+0kH;@ bFRhFqiZc"8Reub VA>&L>kkNZ׉l8zJDխ{բ2csu Kx\[L1C%jF Ccô̻K>VHE:C+=k6aB:N>)BZ39 4<*%I3"ؑ\k̪S{$:E·&3fGzIbB '# 4N^_(_[`zO!%jeEšEiyh5uKaiDT9ab<!j$J8.4َә4}M ޵A]O!=7G#w^;S?- 7h"H57 =OD:AobksӍ=#Z>Yi)J"Ĝ\{xbG5@F3]XK inF)62\ ],KӜl7k5lT(Q<"uj:T@"ϥY a*:B};|g@ !vKW$kKo~%2mV~ JWB!*DVC0Ĕ-GFţ:B#]'.CyuuH>LGXc(J8` FJ;͚bSL;笺SX#DbӃ!C*+-ht\Af72;(\?%,l˲ k#a3.XO!m:Mq_.Xzc7m &}ȃSB楐#Vu3Lg =":;A$FUo Y  & 7"qXF0x/GXܖ%dP8TVc AVmDcs<CD!3f\F;CaQa(%~Kf4 =ר7~_}>ﯷ`+j۝cer|g5W<@$^V̦;$6 @08 `LG9Ef'HRfdocu;7#= ~!kZܤJ2u H5t;Ir$<%ZD N,l’(,s )쥡HzH:|IHU:̢ D ς.2h<" J<&;\&J,a IHlDHH|+r #1 nFr !9)ʲ;NC34!N sK6 dO$I)l"@T'hkRLJ "OWTp{SD5W}CN%;;䶼:Đ[?q2*AA:,֊2D,2DwFn_ - |+LUDglPBtV׽[B9bQ}dK +'(UxY  C33,^xudXŠǷ6C_3zlo$}Kڭ*di סL:}n*WB3%s X2?f2ȕTvK*3nUϑ;f*Y@~PTp{Xm BZ KI8}XD9į:T/J m1 *sG]*7 x/7S[ RUn4N]>Tx55TCer]Q>qblzOq!t" e5Z~N f zTT":2_%jĽg|:,9qS!)ؒxbeYNI74ځsT Qe+CFdSߊk1s$|ݺɂ7Ӡr1im9x"In ~b]wEs`G8!6 &vDH"I94CLjPIclm)6`CtIH#i1ϣ_jk84 9}'CЊ-6FڻZ,-^b6D،jеwHs!v(@FLMgFL1@ײַB& <$C"0k1-$j3*Gw I:ERM,t%H.ܵTNҨgJWTZA9o;J"ӞdRɮgiV@2"[Dׁ)ʨz!4$zőZ!4buљ-TҮKbhfvw0f#s-|Tbtj8y0~cOȬZ\ccK-)dJwh)V'VA0܊ 3i4r'Yڎw?*ޭgtO#,D@-)!(qO܇fGPO(kʢ̣gh-9KPM2OPs!#3ky138kD!zu˹yH+1Cꯅ5dj 7FQ+\qZ @)aXssLISiKu15V"-7H}; 强lbۧ]\>h^^}oqpu4:R a&N~S>/2ԥ**o{ЉЮCG7Au-?6D~O#(>َ)VW#҅ ~M9g9=+݀>:2 NX\:2XT+׽q}d~s!CCY7E cS_Cȯspn% Gnw(jF棋v%(jVL xi#zL"ͽ ~ f6qZԤO+0Nܗ,2H :d$/#),HQHkpRM*E1J$I"2/H003" "`0$33S2B4a|!nA 6)05n^nv @À8iH'2Pq{|}7` N@fr\w6#)E,KƂ%K.r *Zx7m"Φk>b1Vd rTnxY)8'*:9h&mXҪ><`gIAvRHEjgÄ'?='b:k2lHjcg-0i6Kʆn,lv fMReℑ%+dXdK"otfyOzrWBGt}n%"(DpH=暦jO+5VuP2^t5 t, fZވLDկ?+3+N,| ghQ0MB(t6aee/l1gKt""#-B,z *IQze?#mpZOyBGxâf.H0.N0B1t@(3.s7X33:>4N#XW4\5`873h7HC6BUw=!CC]ծ)N /Nt goaJ4˦,@gF8h~pbPhiGP~0aX0V6FH <|JdR&np ِ،DʥΫ2 jvŰŲvU-tX$f 0-sB3Gj#lӊdEsp4 *R6G xDˬM}4&cuz߸p'Hbfr8Ja%dKМɚ`ƥfi&UיD碕ƃc;n=2x/pO )w*vJ.l0)mψo}X\8VJ'Q!rH~?:H?^ծ-`5 }㈌mrcTH|j۠`/ȩ(ft$L0ev:UVjm*O19xx a8[PP IdJ/bxTMntyG:#՜EjT4gY?aYάϙ G#Nx8qPD.NȢԹbPƛ d1ڰ"MBYNki]2vclcE=*L6oO`qsv{b,zrK4jȥF;GgDҷqW@zUXj8[,X'Rzwc:e kxg|hO&<'"4M=J$%Ӣ exTTYU [8gT${զ۵CQ7kEc^$M̍!ñ./Mg (d5qBla`% l㦽BӨwAZ*sR]KX]ʯђG56=-:1@? ]RxyO$\@(˫m:胯*G$pe?O~!'k^= 4͜9^˯q58MyužmQWɻń&x+ (=~)H)w҄%Bj#bsLOŨP:ULV][V|Hp2[ˡ#,_*ɮcIU_”:ml$2LKf{ {1|̛ ~7SmqLb !ahT `$13 Ġxt"8,v=d? x@k91G ɢ2H\&RL>}PU*j,C̩{&PR@S 紘lmNi$ Hb'y!Үs 4:)QɌJg]s ^ 6'4j(.cGq b+d)9gLb*kKfnw@^l f䓹 ]%l߉Xzf_A$6t'2>ڬ & VQwyޗ HndP0 `E8 x |Z#Jƫ$ .m[9Nm[:pHhj\0Z+SD+$?Q:50<$2::O{FId!@InZ,;.2Ú)}>ȎP dΥ&fa,huk0M4k{Wf8R3RfËX䅔jM]%Gl-]Gl}A„Z{,JE'/Z,>/~dZLZ,"z*1%s !y$e-)GG/)Pǧq\Qj>NWi%Fvw&.Rҙ(껹O6eHfq'ɔYz~2fk4sARri<#dUa*FdLIũ=Pu^q#J'? 9+%2`+5aCf_Tmŝ36V6ZoCU(dQ͢2 TfSuh%JB(mvB!K$ZNQY6kVJiuJZamC(꭫Y=g_+^n2@``%uk+˄V"_ I(n07+n+^ZP"8:]NAyP(PJncvUXU"86_sTkTfN]YP~r>6kmZk18ժƹBW~ɏaRm˥d秊1mqywmr\=-uR.6+Ԯi)|Xɋ ; ;S;nk0 -9SQ 14X׫F漜v0IN 4suL ?\N$UfuCnDͰ㓇_]+5>ز]EPMa'ӎ XPfJFET{J5I(a7jlf:gQ QO4*:Q^$&ЃGcXLcMy!ᷘ.^y+'uZ񏱮䣸q.Vj )_Q]oSސr'^JUJQbb$7%Jyɤ˨F63$5 yv=iER=wVY^ tksv#Q3喱{vĐWK͂i |#3ls'ʸNCqfQ*Rr_o#&ZbLn}2VvۡqcC目ARݮɺRJ5VUͬʆa6)gUJS&nzͷ@M|#:EWjTՋ-/] B"@řjZB@ }[Ki@``(X( \60 f"rbxb̷."M2%cvI e***jd,&.%dh퉞> 89gIp2j z+X& YmXe炿L@6 ZG#6gT"'ةXC"ug%DF~fcu w ڋ^"$ l̯- jl ?j穜 BB,'Zkn Xp{C 傏Ђ{ K56(kީ3̑ɚ)@ Δ.RrIBYL6`qpd*0bVpvfâ,dP40: h"Dܮ'hqCOX<67 bIIFʇ"bQ ;,,tУ *gp0`VLFFAN}Q/CdxhD1-,g{鱰f+bcQ2NL⨑Q֣ĤԢӨP#[!iFp*ARΣ-Q*HX1G'xh6%Rέ`8M*MzN-}#)VMF3,CrD(»LC*h/0%P֐⩹PHuWl|hءLNJjlZ3C%RaJZ*;ŭ*' oO>?km:,U<A^Az_P/\F_f b& (P+jz+~!W/$`è/ ~.PIrS{2̔;:WڥY &H/4fu9I5 焘0l̛(z/ MG$kl@j~KоQkHȄ*j+('/"LOR$s4vHj02t!|hCBX8Lޒ3jhch$nqvIi:HFsjdqi.8 @]EA4#ӼSlDŽXY"_a|*\F`_f-DKv(0.4R+`n*lDCNJR0#7DS\H Fn F682~PfĶ|}?݋2+-*&Zöfq4L4;Qv#jPO ĦҦmP(]oDxEe*N"*t7%uy2ԂM.rTLgU9=:/zfmF9oZh R1tlV  _׆¹s PB'`3tkwquJ|gRn k'64jLB_~֐;+i0w}dVOn|M.#Twy $Llvku2B Tzz{&r&?<0a AEy]մGRIUբBW!:GָZ Fp RZ11HʗL>-$Mq vJRi4'bE{47TIPFpt,hgnMqz= cr&Nt8I{IxǮӳ`-e+wQɼ tbӂR=BEX^ZAAA[żZ`s[%/r|_`O EĶbb.؅k|U Sm  4ة#񠧂d6Q\S%W>I87(Z˖C6r wb/\TxP'@³xo%#dhKWj0,TsSe_s (lY(gz/GƵf2,c*]-h"Tw"hz]}CVڒۋENW/ћOwP@! wFUy׻OR 1}ҏо13z㗯WswFɔ8gN1$Kqה3Q6o^U)5G,b u;[ښʋAw |8$$%z_* |{ɹX@hsܒZ5,Z5'-7nPp aY\nTI"\d.B}zzQÐ[dgck26c: E)i/#\8|j}'RT:{2LOpG3B))jÝkK b]WL&BYZwQ֋\x$Ccs;ox=INZNc $#epu}JWfz93 xi+6 , BaР @ C( GiLb?  qx,RCcf7?QNA 9l )|OA xL/פ6Q5$b4dCC(tIFOɌ%fqZ'pG&v=gR0*슃:]XL/J"t˾6ѧ8B=ZF̏as#6j?$Pf.A[./g|&A?߃}>炙|fz=χ~R5P$ @DApdA# Bp+@)|\Qe @8 80j h2~JpJ!Ilꔷ7(뒛hʪIl >hZ-޴rS0: ; ,R:"KO2StӃ+IR>/A-hjm-TT#,ذ ",t4ܸzK%3~T6+Et4(K#|' ù*+k-+^%떰H55$U.mF/L"VJxjd2] ̖c.#4#2kIm r4)3qYMU")jPO͝,6PcDRX -ZI,HQMlb4W7 Q7\)eGXF7 Ɉ8oBÀJMmM|F^4 pk`#9[sxݘ+)Pq;dSkz)D(lTp3#rkZYy,D}߫uQ$ wUnH)|drW)=>2:ZiI*Qy>ZY8}E}` <ֶ~PЫJy*p :uL[Y7GiN5>&(O IJsQL#%.rf}TnbtݘcMKEZ:< znip+@Em[uje=T ZX&~ tYERmICX;*J]oVljMeUEMz3on7HL18Ҷv/Vf&C'\b+u8x ,̽0QN*k@h]R*/3.J3? ?H|L@a7!>?c}q㜓sNy:gTA(a !|.D@J&Ș ((f!,@!X ]"b,:%$2 72]ͤ@{6qb/%ݮvvIR7ּգb -@ʛ8ޗRnB}/"MJf@6T*&xHc:&]0uSRp0 E듊م)ҎKLӋ&F~L9J2i肩I1Bhuvbe=ê©Hi&~؊[Y+VԼ*<eܙZru}(%X L–VWpgausXn5-a) js]ѯ/AKVHdfr'+<_IBeSWe!dXU) {Jϙr Q},^R}-{*x~$3tV*&K^-&LһjLr:TX+I Ʉc vrcpNS'ny=R:ٛ}zܳYoml0~HZyFä*eX~-s}2d1*EYТt+>;\sz5-h;a[p)RI&YW{riٝBb6nJ 8#B?# Db'j J/<7>Yi&tpn]eSWr#h- ^ LdayaߊvZeh{\aԹbds;#VisFi iq)*@&e}Ka٥:%tL^pxI虧y=t L Q;Ǡ'jΡzSWd @]2FZ&C` n=)EHҀDoB=:Hq̲:] :]Rs)Im壈>@[ -To6ӣoFֳiEڲiXuᶼO/MRm3V+Fk3o`K(Wڶ-)a,"}64e+h-X;bu$U:XNLn 3(;6(*?[% =XȾ*4$$0\ 3ܪ K:r=:-H1ɠ)y ,11 <Ŗ %z(,3$:9bO33{4sЏ@J4[Ba=BZQ!=zF2C)XkڰqRC|C61Z-[0%´z{0XDC +>31BY3ED*8=f ӻȐԤ&))=0;(eo^p7Zˍ`[9;wdҡP*#3ȬQ\}Y(95 0,9p:z"DL!US"@IޮG;oc%7 $)ôES0͵L XCHPe?ԖuY/++~(b2f"T+Hv=&,kj@&D)5++]YT-8ߝS >^%Q /QsN0NC9XM|0\z65:0 hxfܶmm+̅х[kj3+9(5;ր`y6u\3Z3`J냚mBi Fsϣ!V5Ie₿J& Ւ] V`F.BYZ}N+>,bԓ Nn ?"*.5% r6faFkԘQv D𢓥:^ȱI ĽE{Ĝ_T 7վ$ N>奔Wȑ\DY/6r$Zv՘֕V|$M$4హ20/q\]d]֒kʻG0T ޴1C#+3%=M8UM%l[ !ԉ,DAE%df-!' B5Lu~evVE.x |[QE#AXO+:"Y>j,Omd-Vfn.9*0LktpE3KCP<&e?4|' *P "#ďMRw˷Ł"6zhU_ە dijA_Ǎ=U*ÐD%!@8ָQkԔ>)H^h fA)`F_ZԘJj(,W.3}*wnBӽϔ*^׈S3*Oڇ^ YA+-$'6yڹA!_NJ V˨}&rf@>&zn[7}}ƒpQN}Ló'B;z{Rϴ6 z0Hwe\l&`ٕb+<4,p-qꮥ.1絻lrMQ{'i;S`%8@/8B' h `Љ@L K Cb8M Fg2Y,F=r,z1=ǣs54ڜFgmBg >4J4bUiLoRY,!h˔Ȓ#B?:7-JȪP[$3 .2*è:oDDP"I, #a-͛Lb2bD곱´F D(묋K¼-!lFرLl4k7"MBsBF¬B{+##?T8q;  6sS5,v0Z/&>+JǴHOZT/U$GC\7GܸO4:IGv+uP-JOSb8(9FOUĕ] |Z+m_^(u/,H\)Se ^3tQS-CŐGqyHs@#9YkEYf-/prtù# dGwؖ@?I*ʩ:g]ʛ hSXFÆ҃,SN-ݗ(VD&4ؘLB#⿊,HuD _J?0HR^b',)-2Y{Q *j*Kd K>ġ lAR\y!]D0PM&ԬSKkG6sLc0eEݘ3ԩ7mFYyf#ZEɮ[>׌ʈ}gD?,m@d~;/'Lz\КUT6{jbȋ[! U[]QRiڗ+Ʌ{Fnc/VD bV`܋bٓT+u [ j}GWC:R(o h)mE3+ Se0IĆj;=/TRΏڄjibbf*ݍ48xznͱzHc)=u;;]Q t Ѭ֮K ձe)G 쥒AA%F"oh 9k\hZb2rEȏ(\ӝs:Q=]("PGǠ$9ce5cC^cb 4@ @He+hi8@#!L&/\rkOsH/,f)DRr.I<֣)=ΫEĞaa2iX#KO It:[5X 3,nc鳶lTXii4LOLtAN1H9q!%W`Gs]`h7d*֖ҁr-LMJjHk; /Eu5~5'Orek0~֍KR'3?2Ee-jv5ښ( lYvkʖي~6Sx4%Uu4ݫ0%Yow觯ieSGy⺝o(΍'eLkKOBЙb}piLpJꫨMiq+ mRKdfvߨVOJV3d\$;NMީȪVl$D.r0sA! Ft$!tL^P P xAj`ɀg y'fƞ] o议Vn@λ6 NjP+0)T0q&*Rφ*B4Rc mhB~.7x~ D- I(RBcE)&SQFm+zH+DTZF(BEF~-)WNOF.Qyf,-OJH ofS*&a^k4£PL7G j\ 7С휅Z/J6aD"pjq-("`mLo sbpV(Tn2g#g0]zкj0[Hen *(TزdF/1򜃑8%2P[.p\ %IbDJRʴ23N␗і ڥܥIC4i#fBͥ+)"BtK5D%14>,[(ƒϝH릔hh$&'"$8L9 @>tG , FPMNNTk; <̔G{{C=Q ])OgB[hkCDbȀ5Lz-B5: *X"˸Icqčl/M+71cթ_&R54ỦE#/~\~.DjXr;2((+"3Bu:qx:|4ɪ}^ ͔MpN,ʹK1Id"R0f㒆mhX*xp2UͰM~CK>gH kvdZGT_)q? dTn=Hodd7pDR:uH wK(e+м:<͂+z(Q݈'1נAs$(H=GEC)V (*iqH~0mq@6DrAx"l%nM^7%}Uh[G]yv2tdVԳe4\.wWuIt$^@FI6FdIԀlc#pΨ/lRqkD^ r"D0r;KGA Fta(#MMT94X率ry A8Bz@,{ ||Lae>V&~T *)TNc䲓>@"iV,Hny#=6ST]̸:o@3<1F᪞UYSVυƛt/2$vt_BGOYWp'DOkaJ޲FIwDCkJ~I|)g- G ֯_jT4nJ k9߳S?D dOUH,߅ʘl_&AcM qSЗj&Ve1_-J"]3fTɚDF_I,T"tje7ށ 0oE~G:;tSjplxuh6:fQz˜&iuG%JpC%go\wZ^~Q)BY`]ʠ%ʿ4Ʋ ܄qSҀc)>W 3^l%3uhwpUt3m~,t^"9%4ڱ82P8XVӯKWw߉X::V9wy[$mdi)x> V\ U7Ex;D?+zup-Fj *jj|S0$?6 -Mi B"԰.Ç=K錴LMtێopA^̖ y ?(68TsUUBoJy(IFuRM)ktdt7α٣[y{^oq Omq ^@ѸKI }.?/h YNB)H+#*DI7UY܎ͦuH={aA(TV-Ȩg"Ha01ŰMca0d./ɬ*OjsppXk܍;Y:0$lajmax~>Mh,ˡ~Ma2ebAs{G_G~>o|wztu'|*4A0TAtB0' B/ C07 %yPQG@80pE Fc8\.-* (zsڈ!K`:\')2X& ""(9JS.J& ޹0"H-9ISNn?$dM",D!ҌB0Jp/:cLƣKbLǧk?;k)J5 ֊bˋSJ;VRԓKL5[$j% xis4"QbȌr)pJ¯Xm̾-tQ$*{W$r)ZJn/ \5) 7͒J{Z2|ykKOսn[7󒾨w2a'%9*w5v9iPi<4|SX(ڵ2u ,0 4ȶ)-@L̾;lޖʮ9kh7ߌEt(L~,{Dh7l$FWN[%K[Tӻ 1x$! TIy^7 ULTjΩRZQQNWP_@Zv\ʅ!45RTx.;vAͭ;-VrZ059(^IVDa+5X^K:IJ>8T)`ņ(Tc˖ˆsKR_j-20HHҟo/՘tJw*)%sW"9-L0\TF d:PX2fHek ؠʸ/xl$EmVA cYIzhV$MZ)L{dS==SZ ixH1uHTZNԪ@(u9+@ċd9IlV; JEUه~٘zX3D}}z1,$@N99g4uN?G"lK@XD" pF9,UD0੮|50X^S2ߋ'pqOK)*#<~P XKY9b^r~*C8w&ڐhw 0oib $(30܍Zd6Tf䝀 Gf>FN MSf_!kGIuµY1g4HD}3V!yMbG^Ew< Vc9 17([ i)e]XM~LZԆ]rw`MJ")WNI5kX5H}L] YRǪa+K#>Xʳ'IZL"ZF=-6шܜt45t˃}V}j-\Moy:_۫̅m<ıs5՘e)$CC TP-)$o()֩s|V湐:bZ<p%"i7BKl"i_29C:7v 1VRj$եX3D4lCE2U6$Ȩ 8c4dmSc+B1Ujf*zRdd&>BZ1U"7H pvFҭ{l\ERpS[QTn٘رPWIZf%.{7{A(_m .(Zs[yL23lΚʭFT4$/)%< aL+Z6ES ]iMťdTCʜe-iS/eqO'=na<yz*?Gs(4'kS=>o4 uggOGu>P#ZZ%&~ @5`X2vuYTA,2SoBݏYQ>HvüIxWaPKםgW첲JbO;Zօʡ!hzZJ.Ԡ&6ЏTqB3v#5X$2- 7簱"˥#<H v5hjCXv.NTÀJӲƕfz6>r"sN1,b$<)NJ82#f#ZXљC35yJI? &0tA<"]3)Mqz`-s+C=1#jغ{/³Н aZDPQ5KL Ƙ(-L"20;2#nqP,| A7*,z9# *,K+FfS3S[8M BA+ TC029YDPEX#ݰ)5STY*30s S.T7_ˠAMj0Y&z c*kƒ:C9چI7jC8i!=5ĐIA\P4q2Sl*&;H@ cڒ!+4+bۗŵ@㳋֯Aɚ):ޥcHީ+tP=ZFt,8AIr:AL3̝Dq #L}&&zJs :dtˁje8cI!8;(L ?Ù[t c2Ė *D̲c.ٸ[ |as5/b&#šٺYBK jR\N,Pp̹P4՛4e)D|J8Cf˫DW=3k CPQ/MP,_65Et|G>%cR 5rBVo$#ɴW:4% 3\NAtD[J0cY@ MsaE#)F,<0ek2<)T2LA& ӵ9Tq}=V!(B;S] SqKFmF˧bSȤ+#2M{C+FOST#KkDmH͕4̢;`&XtJ{HFKCTڥڵ|xT2w9Z;9` ŊLq-KřQ+R+};+AتWLP9e2LIƒ l%l%[5dP '\]cm*ᖢϺ)MS4LŴY2TZ;bY5Aj+cWcYA:ҋ&6- >-O 5%Rr*4j -)˰i/ - {Y,#@ U"\ ]MHC]F%)|E;\ݔVѠMO 3GkCd=)rI>T8MF2U* <]]!l(^Omm Tlޑ_a*E]i)Z`$l1^ ĒZD/H:$#vk ut^ٜ5k9Y=$+f38!l9HEɲ3v#T7+6INg¢4")Kcȶή z/C^Ļir n5%asΊ,*9lCWO ҡ1=r( WɋI~VV^ɜh.a1:pP$1rGH߸O:8.2<J_7~>+ObS֭*BdbƋK'HQY̩LܓÿhVl=ƍb!ɰ묝D%UAozOU"s*3[U`Lb&<+}SMɰ !L)ۣc C]U2o5~DCDdF-f&HS|9i: 86(af5yXom\[';XN#AU~JiS$[E"L 2b<醮Jlad`ZEg.mXs=bj-ob/ *O#߭bgxp.޼./W孒8p#)YDYQ>Q|z:qB5eCR5gL#lYFKV:Ջ,=v0I汾@f~Ks򮱅8Gl4K2fHy8e^ _vTuo"qzVٗU%`ݭ;drM!!N W3w*ƖmǓ/{㶻6N 5+Ơ*c1îJN٨ Pvl)mi( ⡱/t栐"Dh5*j1Gʀ+)*U(?O"L2#H$& \5kV %t#k81jr>˨p.++6,Jq8:RF,D٭5Q.$4M E1rcy9/j3:Mzc@F>&DTi9K4,- ҫs?6ʅ"ٱi꼓v}7|~к,`@x'~%☮-5=.u9nX@P>d.hgp eH+5*㸳'*ic$rc FtN6Rʯn";mЄj7G+<1X-"sfϬ/( E1f3X3lmL'r(ث2`,{&4MYll/޳H} nKCGO %Qrkpї6S)5S&Sdܸkj24o,+CTonjS-\ qm{&̘:\8]ҶqOor#"oew%R:6(|Bg-BOfC^;rd"*4G%)Lĥ=rmtKћRFa>dpil1'`^Qd31ENZY0V3"">P]$ Y?|(vfIAK :IQcVPZf 䒑n-66a.HT%g ِ)5YOFr%MÓڡ CXioتf@II;K_zҤfؔL}aq,6/B<1[[mmŹV[00±B2\̀0,ї@YwMCptʒT:[/Q܂xeC)uKPFl] TɰL>XLo8(+Ucq/V]^ZOe%(L=L`é"2CiUf"I87c`q^vԎG"ypKN\[6&lPb>xJ%3M &P&(g'iUEȞd&C1xaE#Ubׅ3$p1Xd&?*ج!CvGbx PՑK~υ7xbKA&$J0Ey@'Q@}Jv( BUmX,ڞ ފ:nThފt->9gfOd@DFܮ5Mf&pXa<&\?+JM!YdĮNIzxWNMy{r`&R>4,%, 4Xl*0Ȋ,1a9J4cbbN1n%g}TRMj,w$ω6}(dr>IQs/8-7^FgjDzLsSJ#5B+ͫӈ8 b[6щCi&0#Vvd{&e-3q#>= MЃw{9ltFN00aʱ̣4K&+j+I_7ېjlϛ0;@m $%KG?$i褝wr} 3l?G^^,.Z!%E%@ i }0%p)-fR[e +lfn g0g$kB@ZbKM*/ɲ Z<*f:lAp4*&j\N sȔ Q,Ntf3& u)G ʪJ\BF\ e2ʓ=NbBX> vCBC,bV.mw-ʬ'9 ̐-(&ϪtdwzDirr"TîF䐎M^M :e0K'wt۪*Yd- ʌ2l "SHro[j>EDH-z$O*7"梅/Mz$F(blb(*HHY*J(:p V&zO—qF-#B|jn|/R/-d,dsoynMD<* i!;o=шlClZkM|"-`⑐O[ܰ%6+RZZR r2ғ놐{zȬ3QR2o(,|Dks$l.CΡȦMGGh<\(GRH04y80hk/4D^%t(k"IxD Ismn2fjȶ&H&"1QXNĪ/l;ί0(j*m6-xCJ(ʇe=2wX3԰1s}G/ n{ǐ.jö)a]E>_ Fpt|AT]p1H4HtH$!7f@fFc@ Ym{KHy:g6'Vd.+Ki=c?MD; Gp0ns3F%'ϐ.i4/ Mr{B9︁5NxO/0N>֎Om3OnS*؊N'yZ1ɇ,,9f0/E PS.s-kQR#%h5yQiNˣ5 . +H԰AHXyXijkOBr O,{$~ХVI^n9jt1̉vI\{/ 65 Vki^TQQ(7'1Oɼ̐2!;/(zy/zp$NTY1,OKXyM} N,nǩ/8Ufme6,^YĝYCb~qh-{5Zd()gnWS:ɖHj.llak;YMK~Eo7'k١jO?Щ(u86PVzJz(mAh\@?(5a)#Oe^AAB_d!  @HW<˼9xf+kfHYͥfzg{vBLj m~UXV9ÒܛI(Ƅ^-Vz gS?8WڕE3̹npctM@VsFIC,lx1PC7PnĖe1zyT|̪\UYTI$VM!=@6r,jCj>z&ε!=P+2Ob.:xZw v Ɣs92]pۿXDWq(2HE Mw*5ɥן/s+tUY𮇩! MUFlhW*CZ(.QO|"qNZ!H߬DlP]$yz )ga&b$VVmV4o|),.ӲM?a&[I[]s)Xq*q%Q;ԆR>B\ yϺnpg@"Ȱ|EO;-rjC<2eSKx6݉R:!WXlnQ-qkT_bqV2B71˕yIm/Tߓ/K- dHLYj͒lG&)WomBƅifUD f px(@PT"`@'8ŠQ@ cPXbI`6ˤtw2I ii>CAb4)4;դ|/D& #W౸*Z*ZG8DV1j< lL-V AXH&0RS?h}ߏr|=o[~1R}6?uowy.w2V`@0<(4Ƈ4{.icJ>*jHk*( (":*ʠjsbȧj3 ;$JJ/l\fE+LzX'B12I%ʢ̪K.z$.+*̤ 작Cէ)WhJ!IB/qC,ѪzȮ,\z.[0ܮGKAň(ʢN3Q ԑRBiY"7#M:̪UF!Z3MJziF>J"QLU=%C1CK:/dLl+qRtDMr KB^$ " ;M B(z?z˕(2<ՀLp Kڥ z.Eb̍4WqW !f mWx=uܶsBMsrFhS,!RvM0,3\ƔaHzS^Ϊ Ӥ# sqMRBHvecjoR̃Z@%RG(Pjru*贫C$Mܛ9[Lqϲ=|Eno)hU eND2ʘA#WRStu]\ܛZ~e,-R,*4Μ2J,|%zY(ƤGNb%q` Q(3W,j^(*6&Rԩq3NaW`7E42f2W+5Da\G]KqؕIJz(<6> "X fL͒+r"{,0E ;-&,l:)6"LBH t?:sXG4 e(Lk6Rt珹@?M&PJCrs# : H 0痒_Ku,Ea$c|@hY.  $#0ftl˾EğQp1Q&Ϝ,[QxZ E1ӰH{Pœ0vy9!RZZseP| HPTe,޻%T3N"_`:<إzT|S(XyD% Q% j[]R! q((L!RY%%Pql`3%Tv+ :ꪌԔS=k)TS M(QYqL:2ђơ k+` VAI_F/_:԰Bdi!W2lO)N֖RgKVW4&W@LT,~íZQmШG25J1_pg>m[fn鱋I+#EnT@S4LZ'ёUY!;k`\5)N%xk,,ޘaOD&s JRjINmFRԞ!iD'bkPyY1sm$@t2MkuоfFTBkI& etp_׬j)@lÉY^ъQ~CY)BjS^8~)eJfNEԭhm(qmrHL!;؍,V& )K4k~Mt:6UI^oW b['"4ֵa:kJE3%teVroZ\߻s2̻ mmh.9TEJ0:>qCbЂHF$ɉ+cp(᳓<~(M7|LٓPs$:8IrPze1Vpa0w%6\|ڛ EMC<08J &Ns9zO=#e r,|@TԚsFh` %?j\C6%L4Żm'<%.t:(.鯵#Wӂ"RԚ*XRXA%Zފ[rT{}JQ2ݎqdM9o$YϹ:EB;8e+f2_;X˵攺.<1WuJQg(v _j-w-qRS~ I=Ӳ4L0 N ۍP:s$۟L(xttIFZ6>O3Q>D$Q: %S8}-ƃz|{N::V8j&!;(J\ה,`yf#L“?TF9,I) NZ"#@ ",Ak6 y)bCx9C0'#s>k "GSq,s*$9\IP\\Ý79˼$O^# t*겯4Z{=3+5q( O de∿Yc*JI\/1 J/G*Ţ̝BDjBP"$쏨ϑMf`?;A4 JD* D2̂W^#a$B HHqL2zQ9/SklDM6>`Rr:9{lYB {B H9)8[Czu= xU2Uy>][b)2Ady0=@+H-6}3U?ӲGGt۫? VϚe >qCXK)UD#_f>S)u/#\ ٽQɣ׍.fNj&*L2dFAO1QNV{h4u!lêiT:܍cCwԁЩ|ǹ9 b zҤȲ㞤N L Q L Kr w.˜B9Vҡ> [ݹج::ݥ% %,% 01-y{y|r>%ͦX&Ӱjѻl(P7+;B59U'pMú׵,};#}U>3jC y9l+%Vai#ҟC# hfW"t GT;+4t-B1)DؼITUWE˹ڪYܝ7Tt={+bܜRL.R҂3yȣ9 Zځ> S%HE#Sͽc'D5lMIf!KDB;5⇐[ "A0̐;b2,d-UJ+k6C+m*S1ea|Q}ֳ<65ѳq|}Qc6s'W9ԝ,)Cuhҵ_nbTas'+`y$92S? r 48Ɔ5<5ƙ8FBaf#?]KgMGX6*TcR"T9*n|@ ߙbIGh9^Cm~Ie-]mʍD8{\WfAv4`~Javv% SR/1+x{^0}8XRe@^Lя8 t 62O!R'3-V&\$EG+|2es٨_>/_ySc&1zE2jϢW Z1X *A;܉=7IwMѥߌ36FhP6RxNAV$WcVrY"6Kwf  6yb8O嵠 _A˻cxAvX9֬"gnSj\Ax$91dLbJʈ ˀD\YmԎfQܗiCƨ<[)o }@1ȃmO}_o%|_Pl% | ҡPy'~_U+Kee3M.w2X? p8"`0"H@P%D @UpW* |J%Tamە֋b'.}za''~]2W}د˖gaxX-K^]09M9*86;*Z2UqzcXShs;l͞v_~;b;NVvθM=K#2o+/[Ђ̓,7'>Qb=oV1/+864m +4;+/b׶h>1EP[.nxɎl'6rl?<,C3;k;6[W2욳Eľ1[QRZ[2Db92#IK,T2k36P .mA50ApMFB2+,,dPN2~E M{,"&:1N45.:rk\t˄$aMc,W$ϴT8Cw{!{rC56%*5fQZNRk,/PB N]Lᰳ~4͒fy{ NS (55#/&*qxl89 in|iG5Q''uWs] |eԣfT ?{n(-Y15ehsL嚾M$=m]ALwNk9q"B2]4N1MO,p}̗ϸx4-i,S:tQiO}=./Q @ekvLY[ [G Aۈ*uҘ1ŭW>:t)aXu-c,wXam ֥4div+ʁ>3Ԛ' -bshd]f..IQnĘqz鄉]ēw?jCE_b]"SٚyĸI1lr>$d$r$>G l, d=VtMdd>HnNEY<, P$P%O)YedCWKT /%}umeō0젪Ll f]^E^!ŒhF rr L: KQKe[4٘!>q P :B =I&2GsdM:t"@8 p QJr@Y?yRSaSV:)¨f 5=nZ !U;߫kWs!4lM'9 (G 5y B`>iS@Yئzݛ,/o$J{=QMVxp❑;UНY~)ZINᬅNh2`s=󸲟E6MZ-q{aҳQi^`Ef::wEM5|o.C%N+OrA"ɤu2/@siYv\.B F⇈HdpvQ VfRs'렵x oeXDlW*"pj,~p,iKKЅ.RDn ,l't@P"HF?OH|k@8Aε*3Jf*zMuրO GȡޭOTk I i^p@_2aƂWpqhl:#uD=gflKlt, L,DIC8l9ʿ t}EK +bʰ^~Ϯ}'h4O(C(' ьNv~ zkV 0,Ƭ֋h,q J$3HoNPJJQKGij:иn&rZGJQi*pgz-rDDq?XGZˉ^E‹bGsDއ2>zЦVtrPDҾh#F~\Jr_ %hlJmN-/nG-2G$|C8˃ ҇U@sz{  lHѠ[ys N"$'18"F @ ` .VsC4SBad'c(||(Ά52  L`b7*Dm pV\wXjԁDd~j2/ L瀬\'fq- ЧoRCsˑӴP\@,kN% p8>& l `ԊF&88W3ڽ6EŊF$hBxfP>0qK:{00D5lRuwTkH%+wl|2Tw>mFIϊC.s% YCrT؂,f%4r,2 v1vtvdJF0JmJ BrDTrnW:cFf\ʴ)k7PD4NS1VOKBjcf+(2ojww瞨Rc T;*,B"j` ?`DE_ jäQH\v'#bITU #)93FFy't|Edj_&ϨRYB2UP ԫZ-z@R%:-0{]Jo9Y*ʔvyئV֥RV2<цd 0Xd?>e*Dn+_B`Z&9vJ)۾*wlԺ?讱z[T*N:ik|r7쳘g >'p>" b+z#ldBNC0␈c.!(辩:<<嶍NB í0d>j/p+2ʬ&i|0H,1°D[³7) #D)H1/ Ȱc(7rxHm.i+t ~,,p8q.RҤ"92LM J6Itz3OzD)S;Nʔ#Igj6~}~|GdGŎ||…( `xgyǹ}XM-sMuݗmw'Is%aP88 -8 (X@ Kⲱ m,*k2@إ51rBkB:r:I2fϓ9D=T\s!!aa;D r֘XGг>a&,NTLyPrIКtjueqECoI,gh5&7H7w M%Nd>-Ĝ${=1RD"2ʤ)j<箞 0;1 3V'NٽN_q0G4⑜#pr%XD5iݲ@tf L98\=E8"NQؤS\?7BHOr>81aIBfIDTi%]./)lO4C~OaCy_I?JR}yrxЦڠf}}qB4)FJ]0CimurKCxӹD1Q`Klh(HpBHd_B°K a,Qaȱ+=f>u El\KUgKy/EN ~0Q0ܞC NKʙl#VR1`l GB3\nVt?F d+ph1(ʈHxŬFw(.@%"")]Rߛ<#j{4AH$QNޫ:LSnE<{taH( Kf-EOo R()o?U^D$gےC dN-৲U**C*9\yuzcdv$^NxRzZns IJ[VUe/Iyf7juSH'7c\EHc+zPihyvN QdRs=.ݱiU8O&9#'?-5vvXɩyRbi%X$6@B0RĻ*;P9bBE ѓSoI3S=Y yM_݅bS;^"RDP#izyR"ߜ?.} :=(zgMKfJ [ 8 j7x :Zo{{Dļ\';~gG56jԊQ~CPPya }ªѹ>o]6yz0e;jSsSӢܸn|YM0J[oS'eInUQy&B;ANj5n5Ꭰ MFqw%PgoKLlu>x7TfJ\DxQ^ }CfVvJW _ì?@ZkH|pXJ aoƹl_.J^$ V_%_ Za0Fap. |#nb8ivҋǮt1i ,vˌ3In+~HU-&ǎ>i.*pRf2b*/dO2LN:3.<8n,cѪj}LPBvcg Bh|L`DΨoKC)$֦\G}x#An: ,;.T \փoD B菌1Gm-) mԢoF3&n .$nKè}O BT.蠍IPrRPɚ$gϔnPD1MjP)N+x/OJx:zhlxL'"7aMLBhF #b^*D-\PgV2(Ǣd@JjvRRO譎:2l"29d ìI 'hzHUcUܧ퀸̈́ņ8mꈟqIizlc hlg6g-L*ª8yҁ1 HHαP7Ojyl2r/Eh:P@1k *"ZkzMgǦrnˆi">F-0KPf(~lvIɆ$'tKMzx&N\ *zx#10i j .ލ5sN(1,S>XXŒY+EZE [@OEtYEN! VKY \b*`rb$g 6B JmJ /!,J`&&(Hʂ.j\-&*(u+F΀ӭEn."$QbI-sPft<nx8BD>kgV\Ҩ>S+SQi*<{Ā,eR†oYM삎{R7mHcg,@q"OsNaMH5\S25 vs. .jU1a 3PL*Fut ]#ʏNDu#h IjP$qqu*NO LQ¨kz0z9&m5V͡,de>p30xSNVT5ӹ3<-OyzFnrՈUNBm)n9MO:dmkˉ:BH;=Q`gv~r 4Wz7*$M_Dc( V4k8U}5[$ImWH'C:2~&E*sO,QI)3!"K euϳZP5*{ F;[QWWFE`7"/VK~,c:o uF[{x0̙dLy7b7wLRX˩vsH&ñw>rnxaJcAKy)˛?06>h&7#xOAP.*>lT+J뢓LE2~s8[P.9 .+o ӂ$#sҬ0:+6|\YE}CZa\a\ 4KD쳔=ѣ*!daP9p`fEa+jXGᏋsSBwFYw_#dnK]*jSzhxKljM86XMtUQJϰh2L[ưRkƊX/́Y&jMkS,QTjG ? u(+Ywc8xw&Nq灤kzC(.I) QᜑdZD\Uq~ YnqU|f:4QbTBʬ{`NL<:IU=7s@F\TcPz|JMPJ ==2&Fl 3pg\˱%QvcYpk5.Q,޻jEQu9,yeoGsiXv3lu)R+n~3FSUz$w*.4${C<idn(_dE  `@FaQ~9 BH *EP^#bS;K搙DV)jKG0=nLⱙ?D%|jU[hlQZC% <ðR;bNV3vҤЛfIG!j-79[d'YϤ="M5OGzaizioN֧5ꃵ[2#L&jb@<Ծ尤OýRi bħH*~Q ,}g}|q9|' BH#'xg{G,$#HD%Ir)sőXT#8ʠ@ <0 0 L  +*+3kmp:ѡ<,v:3Y17vkݩR.SSb6Ѭ;R" Utj; BM6~7[zUq^J7YΎ5VBڢ5[Nc@(7#,L}ƕY*< 4UU2 LWSdnIcF ItSV,CfA!;M,k {U/-"myMF3M՜M|+܄T r:/)Rvܙx)W TU25zWj0N&JPJ'ۊ*k,bX3%1+\ʝ"Dj̔  䂆r#DH}"FdѪ7G(e+RԜ`# a*t0Й:gLɼ&6'lNM^ *K%.X\ejlB'̖ 28 -V :Qvȷ~&Qa15-Ll緊;W:aXcC>NٳֹȳE-Z?,JɋOۢ[)J+UXj$jafVq eS5 a8RFY1uɓ 2 N8NS7&A?N}_ ]xWY6+alqЍT/#{&"YF,&,EA2𳑅XQ,JD3.TŷиE(wmJMdِAb 6b,$Fwn_Q4 h͖w.07 ?T; UbJZI_Zs@B{FXpjC'ziiRԘN Xs~$mc(un 읣㾏/h? פ3~Q*b7Qѝ?W'+IdfܭyLsQTmϛH,Y?gin)=5 H=UeWdQ j 4SO6`&֩༸t+aLDi#8~-?r+757A}gCaTRQu[i3k3Co1srjK.WuV~'QW<¸,Jz'2Y\?.n#A> dB~ b$k`s-JKoz4~؛Se4Rd c,iR AC#^mP,h{8GH$Kt%V*J"XKIq-?M)Tښ|ɴUf0D+0LBy\BYA^~ϖOlKoLlqŞED@Ӥ.{,_B [5 )Աgi +_032l ֚+9r"1BjәU!J{,sP]=+a`6~ʬrh@2 '[  Q3cʘ) #:s-1# kaעhByk{RӇ/jRB@ *;_ xƤ'>HL$5ټ M )E+ lVZLӋc :ʸa%*wBӤ:kMNEEƓlS 3z @D;8#E  I-i5s3A[=`͕d R!#rw1 0:&$*t-lO >Z:s;\!W~bha$+ ,Š;'d/:!ۓ7tH"+W#a.RV>{%{j6A"BXaSk6L1D$| DBYZ?Z$0ah MP̭ )^ŕ$Jxɫ FJ y"@ t:*ѾrEQj3~Ki+24i,d{+VRơ*L&IF 8#˔9rd|tlG8ky1k Z!!%@cuD3`0Ew AP|O&yB=j=PMKے):0{p+9@Da~ˢ6!l%+#/ 냚4@),!9AR;CjU+BL,-r#ɓ|B%"l ͜H֞yyc8hĤ{b_ӋyN[05,3c T\kP/"쭱!v%@S1X!pB ȋމ 6*6;Ґ<9'qݻP3 2 UUY>#LIj|'#ULuJ?T$9fϣDpʜ7#etK`5aH5d=\W,@ J9 >T5"> A;1+7oD8ɌLn/qM$5uQL"USsYQH4󒴒/@.% W3!uJd2T+Il/Ȗ5 οL|?:اk?KLCJjBEF2]ƴĕT~.31L[[[4r!-Xѡs aEmM&ЬZ'&±ȴRP6U[o"z}£zDr1J)J$Ky9=IقWѓc ZH7A61<*'xgtU}&EUEEkN3%aZʴł13D ɰיּ>GAju/+m}_@Jr2}(%ǡx+j,+,iǘ!ځkzyּa 3 <0I} ʌ  R$+)3שI!V&bi%Pb),8)r P"%FȐX!VK{^Z .Xs&<.ɵ;z8ó^DӶlVז,A4DAKS?4ÖV[,JO9IEA0mc\mD+]izD4_<çeb6@vJ̄ ,B/eV)/܎D1D.&@Yr>/@O._U!7ˌN3\ l UJ "$\25*:c=e2Bm9[f'cp&,7Q҈r{ӽH$b.#r='so7:V)1)1Y5;h4™8d/!E0y*ѭ.\]:GoE$qc*Y+dc%Όk4sVC~'HNլ1Mvf?|sur#7L115Ig@"{`ޣ[]aT3o^ci>ּue\zVnFsдRlg]kQFԖq6ܻ'Y̔,{#.|݌[?^%H  ;X]Mf3XW]?G7jdg,^ 76 IArK]8#f4'TL|2o ʥb4Ιn$q[fUXG|j; sǚv"/~A MHQuWo]û5:ZLL(0|_ǑXc@IK`׍>dӒ+H @e}eUEt}=kV{qĪ'hRՄ]DtpZ-Bbwbn累`ҭZ)3^BEHG?uEaem#ʒOr ڎ' Px,A`  "xT# ?(v¢Qb= I 9\JE!bq 2$BѩlN=ɢ0WJ=(MymZ ,(n%4RXՒ%RXm\V{n(R0k].qK25*k3R9 R Rk:LvathJ;^!x:.-d}y/|U|vw,I${w\}~tőVT`8@H  p`<@"FǴJJ%HMFqjN*:&)Hz>STC:%jM'>R6R`s(K36(bn0)y0Dc.*1,*ʋLr8 "Ҩs%͔䟷3ݰ,#g1O̢J3M6+D#+S\+H4(Mu&T,0R132~Dh%0}h6J.;oIX|c)C#HݤDS{i6J:LҪv”J%0<6ܩe*,T +Yu[-"z2Mj,z6b^bZM/,<2Y2Tf+G0NbأyV<,bJe8(Q-mM%8 =FK],⸤xZY X fljJEF$`X +kCتC\XTUYiJ;4y=&-şZ˒-PMfYCl!)fȵ_ҮKTNZss`l]i5i=i}_-W&"ؽ6=C"§py&S>euO)0ӱ5 y98J^&R֫P 'Tsw}_UbCuV= X{K&՛_a͂euɿö cH.`2CMz98d 2wX15a2![}N(oeƌ x)&V !zE2͓s /#VoDǨa;S%a7FXI1hBb8`Cs g4JtN't{u A,$A=4#2d͙ts+P@$ dhAHP *$ 2aC%G^ !ce0Tb7e4%|]$`N .\12S# TpzQ2O˴/)*Tj>2q-)dّ} \#ciŲ7iuI68~Ac(\KT66SSI1ƲEҗn+Á d~3@q)ĭQW&V*,"ҹ 9ܕ=Ukm9h|tč7bQM}~OҴenM6Vn3NRFtrp"ⲍ2IwHIDH`*sZq'JaHl IgQS*58mӢ ˛kK-(,J~VZ̔yYOfU+HtȭuZz,q_K16ޡ䬖|jU@RSYQ۬њ.LHcIؕ0YYc)>*Z*^ P/Avhl#s6$ +y$Ȉr]6( \H9*}T!&@$R~|FaT jǏL-0+L 3Z ϫ9?ii.iN |~8޾!؋k=5+L^f Ҕ/UrTtlkU$w*gJyRp}-o]7UwT,lUSa{\mEU`uL2kohPQ c GՂ~Y%C?د3M/6k_.uvT=GޒST:*\; #(tq:R}dwNܷ$0C˙3'E6h1RI !TRCr1:CXo3{FV7"UI$ mdX9ۮ0Ej'@ZH,YI-۪))`|F1UZ3ʹeSmHHIXHڞ*^p5!BTXPz.ŶSܖ!"qۊ~/ׁeI:a=,ua+/夜[K=1 KoPlRYDc`dz7ezGRWGچ[M{KkRd܌E^.l}dT1f'*Rӆl Mg@E@ je Ubng"6Y+D]ʈ;wb3h#O0׭P]/.e$|p0&ΖT1%l,H#+>*ʅbp$\P%‡Ncf^k+ .5&*Jґk(ϰ\ zkFg 2EeHm 2%MڿJdWH\$hsn i(I裨thlKX Z0<ʥXfof([b'mĒG,~hDKq(i"㌷$Г(MJ1I^eB' /|ܦ^QhvIDJWh"MFCnڞ#ʂDv>Ǿ7)P&R,#]%nIM._GoLdTͦ$H1ī; Lή2-!/\~' EȎZj.ƅ:(O@wFGfdhdq&ņf, |d'Uhf9,:8V9.P:N^fA2 n!I 9-|?4?@"鲚@IAD( C4DCM"ر"R3T6g Uj^u 2v7dp 3I |`;jڑ(720Z p4M."rkž(B^~2!`Ӄp'Y=`}jO . F~DJ&S~ҮI P>o$+V7L. Noʦf:|aCsB,X3Blw@u'쪉 P\eĞ:2|UHq~~cfJ\_N/M&[O0mJCHEP7Lj<& J$ zd//!M@ER’ixrP/ސæTeLW-$qGK$q/ERHW!!n`5EZKw+%SeEH{%4Qq~vLVGq kMȰ,@ºf@kb0tÍ5JՎ(w I0qs"'Ҍ\Z~heqs@y+9TFm;\ p3@1W'u iтq8|(g{ g?nFpg'|[ D& vF6dlp`B^䑞^1P.' Rf"B2 >[lb%ҋDM1NI9e*֢W!"k^UL{2i%k3"oOK:gL&+"$x;l[S{r'&^mHVMjQ &Pq~5/T'[2ĨEl14P5ٹԊ4h| Pdƣf>P0#BPvkn? Sjh\/f/'[ lnfG3"8R[mYMݫsg\f)OZ.Qvۖݓ+v(Pbh fC03 FFщ:pugגݻFk}!nq?-b)ԶrR&Ȗ39lTge&TOdEFzޛr.=_9^v*?-da;vTvr(&߉d7Vb|mLxhxD @ d D!p  % cp7F'#q D& "hL3,Gf4*M#6W<%1H:?K"Pn] O&8BljoE6 ~-oy}/|=ޥ"זUSu=snm=^:8L4i.y}m\*D.KуGf(Vm3 Ac.gI4`̪_Y$Z W쥔jev 2{J'%K.H5Pjjվ*3E=\.sh1> >#2>/c|H_C<ǨzQJ904p%am)n4lĉ2y僶.v#7. Nw!TU ?4rk>ÖD)q,ҟp>dEЈ^E6d'+WQTyJ%Q w @FUdMY\ ڐx6PkyMTvt\PXJ:uzc, z2lWiMQXIF_eGIJt>líU ~§G/T*ކ5 *+=C,ӫNܐ,K]-)ep׻8\-e?ĆR@H(m t<rY'JRj8K#rn0Pp3B!s_W6-O—NT~K?9.hB䰣AID,J2krHY 2V_o%9teׯ_mm. ۴Y DAt5wMnW̛7.DG\ƜTM*,ڟraH\1U0~w*2@ B;jČ}ŖQD;|=P\ ى^~kL=vvZsM4CU1ce:yࡡϘ[>2+*y'4؜c(2Ν>颻k0P87;ғ9꧊˸h++;qȬ=~15S!v=+Ҏ7AKl *{BqFxҒIOa>!:)7zғw)x 3 ?35"`+Z};2ɤj@ac…aaƚ D`lU4H 0z 1æbAW QIB1;M&h8!kmCFiKʟ!\5b@r!DqǦS@)>'1A3)q!b*kNS=}4>y'IKE `%jd3b󪘮3 *3](1p,sh5A93⇖4Us}!(a#B\qڼ.܌t54񏨑*&H쮡+G؈4{eu!1apڥX3 &Q;$` 㷋ȹD$P|RF{0#z|$ҹcC K%bW0%X2Z8ۥ(%IYI#ٳ%)?1|=J ꆜhj9,s201(|XIaqQ.9Ȑy@ElK, ?4"1*I+ A9!0Pl\vsG*&[3K,;lJsCJO? 97DT CV(r/E;N;3 gC}U,=óal3rǨYr+j925GdI#l0+c,ɴOe+4VU-t`.,z02Ʋ%'3 <4KrGr *$ҰYSHdD# )iO#T=C#9Bi<țQY!*騩 =\A#WS6=ٜ:p!/ĦKݪ# ]"Ly';ڲ}=VEUASZ3\;Hcm< d[J",E: +x*U%Ky,"P-f6)+!=a@5$MpQ/06ſTi ac@ݚSps/eЮ-_dD*]ִBwN)ٙ>(e/uPZ`B2~V3Ov+3PgC6Λ!CՒͮ6A5,~w6kA3/pqUqMPI&yn[ tU vjI5Zd5L!Ԗ&KԆ232y>҅OiQ{I7>E zTh8-zd-Cۢ)b71_FMe츮/l;YrbVL>-A!4᙮b [=gYꫲ ZL,]ϸ$ LGL*x`wL[E_32Y%h xӍ v_ % b&~V'-8F527c]hVjЙ|ђ{I`"Y IH\i #Α?&mYF5%r~}͏ýJ!i4 J;& ľh/NqLRr04T#L, K=K"dp-X= F}}+rcP[;ztڱχ^iUNG`ikat,?!ᱩrzS:".pA/PV=*5"0ZՊtY*3j:e#zaf\mF:W$dfX&oH%ȯI1טl岑Fe_tn363@,CRkeVcW;S"+\jh)s` K%cۂ W*`Cƭ*.IL #藱t]4.A"\4!Q16+ʻi3уu̚_#wico<8m}1rvOZ#[Oq?1r@Q>rJ`4u͗n4˼X#r|5njJ2u2|9ή8הγ8Vz 60>nF3: Ra=e3ݫp'+O)˷ Aqf>Oe?Gˈqjba<vAAs@ $0ʋzDc}?6DbQ8V-]eT@ @i4@0 9y!  @3]?*LP@4 PT>ORKjR!%BlX >g)pڅ" lx[-ڷGWZRD CJXj^vm]޹wnz -JtSLm{_W7-+ _"Mε[tٻ>#=sb6c;->FoM8V۴KqMzM/"0;`԰.b N@*/M*+ʵ2J;I ΢:hsDpG z5< 2 pͤCHX7+ ˸[%M z$9&H 0*rOa2-!=+3dk10JqNsK~oO]-Hbѭ1<1JTⰭ!A-\GSR'.0?Ӥp-*W;1/F05BFLG &;ՋTlq3 D$[o[~4-m> #+8WOT+jµ`͉= Wbd 1kYCW%:Td0lrAQ0__A,}STBY9ad_^Y4vO bB&pܝO4Jc  [XqN:^ b<#OmY=o\4-e:k@gZӶKqL)x5Z0u\ץl`@ҸVؒi0Xr<Ȼ5B#CD.i0rIroY+UZ+}Odlo[0(七N,Cc B+}GC~8BGC}>}q@ 0<ǸgC}DlII,$BX!2"jI9)d7#`i:;_66R z!n!&zd qxj%:Yk:b``dfP)Ta+(v Bcg>w:<9 s\h9%'憤m6,SF+36(Ku wW[Բ4LQEIcuO -I2UB3ei];iҢdQJt=_*lIjsFfvH/p d30m8gSbP0^_t`櫬FRyLZR3+Uīj}4JV964"YntĮLP[Y6fQE`^x3]Xs/|3iXWhX  ̗ Sm\=ĢjM''LvLjJڶ{3%8XBQL)#z¡y{Q>T;onm49gĐ0&$E0 MDܞbwJV8 Onl@% 1:]ujZ2(ܠJeLzXɩ_8Wb2SSQF g&ɋv*EIxD5N55gMz/8~Xd^YP]$4d-#j2T%؂!Iÿ.c$oi'_wn͌&j4T頯59f-u)IrbT݋Nf]Ztd`IUQZSh] m)$z!!ʭ9B$,z԰Vq6Bied?E)3?9+(F7ɼe&K^EnխF'ZC{!s!9t+Ș[B+n)z/G=UơFDva&v1'i qʲbƸa:56 9nP(师ܜ vcCBa,IglîG&1,&sZvkijj22-dNa&nfJLP j^Ԥ{D/|5k3j XLJsjŇDtD+Y'00c0|fxPUdSdc#cN̚aOF(Q"n/NSn΋ CfAjLMx|QMV(V!q6{C:0JW&/ jvAx3%@_;2^uz y1d !6@LpsoT.XFuѥUDOCe^ߚ虓?kkˤDm1Z+on\_~UG9sW%醑IT=Xe8'4E@yQfJo4z"DSvO,tC$hv<9H4;JJ_}m sI!+*%Ɇ8b{ iG$ g,jT]uf7oin2ؘ 3I*$N89/Aw'~̓(]uavR,( aFHyx\#T, y &L%H&W-'܋YPze3-nGs`G"#'ullMB+JTAr,S(,xgQm*gr @  C `.,D!84># @QHRQA$G ƟtOC}>_O{^al8^gFeYN2\8t@00 }@ x@Rȴ3@\j#CܞY@9Zf?cz{g&f2uUX&O72WW] !ËWWgsk5ʴ 6{5?.=hR*#H ljߢ( 6l:&F InP6-r`8)l[È)J*-= B9}p{Ԇ?*HA{%ChT]e&#nH#-C\JnJ;F6?Vc53GCbˏ#NI4܏\t˧UvȲ2q+DW"${CN-SoeWGP`Srǀ&mB2cy#>+eQv[BT-J4HLӹS^ƛ&nOʼnp{Pnh-Pr>] 9;sJ Ysȓ=UK|BS$sgJtw%WzތuOZ[yS_U[ozfL:9!WrY`Yj;.V:X{pi y4&h t3~7XPSρM> {&2&5Vmy( tHGS1X$/IIIECB6ÒW#'QSXNٜA<Xl7d, in$ID3MMJ@%F*Vڭ,&^̖ɵk4[;NNhڠ.WIVʌ|^uʡR1km,%_N5)*k-[t!INe_{ : qi_@DʘeP6͞d|  gr E$I$g@7 RU`. MQبPt\((A`hw,182 {n,z/AHPc"[6t>l纐HY eȰ D􁨤H6L5GMj?I=ɂ!{Hq/ADpE3; 1gi6>=6uU!v%|(#xV>Y(ZJv9-7NW35$KVҊ<?ּFd{ ,i+z} JDdm I2 @n?OS* ";U׍doC[#Ya(]j iiwJY>=.n?qo޾o\gE-ۓK~VKnMmrų֭y8xcƧq-?̶!aC:NºRЧL38I| s4Lj|2 0#:T-Yᖛ%K3 &  b\()| r 5'1+/A%f(۴O*1ߝ, R̨R 1'l+#FpAR46[QiaH| IMs.+&* QA3(+ hyC"BqCJd-+:1@Ͽ1s;!Vy*,3t0䏉,IK1ZFb#JȹA+"]G(LC ;q;'DaCQrך+d"Ѩb.a$ j5{h[DAB":3}*Ԕ P} x6o9c$ (8ZxV CvH7v=0¤ *D;|$Y$I 5*ʒ) G:ɞ){ʠ ̾@?΁ |sۘ3] HfUteG2(a Փk B>$A+&O|Du#Y {eΞŌ6J_3x_H vڏaͥ)>;^s}p8Lz[ XBO2:4)nլ<扆=1`Fئ&ÆP[z5080PKjI c C E÷#ǡӛc/4I= }ܔ+P| H؝߁#`nb|`@ A@4(@@(4 tH Q*r$e@K&sIK6m2> {4%$-쫴*2PF ,ӈ=,t ϨF k 3k@p,. [Ș#)S.%J4䴒 rI?3i3҃SܲʨrX "ʯ9dE,Ȧ´+|  &4, *LAKR.DY.x0̝HRrQ'sstD8$(&"|Ƥi$V t<8&ӓ9`ٴṂ4@JM=ʌ*Ë "᳊դ+ &V-gL0lRNۍ%̺{N΋5mav }>D,c>aP,@P&Jc18!0rB("<'r#ޏ"E)'] xZ7F4%a̍EÁG 5nZul $羝IPȦ Z9>F6*rV$63! '}̲öRi%6bDsD[svte"!&2@řR`LS^U')$U`.&yY=>`tpaRK+ A!hI*t'K$5)6~K%0o{jrN3\4I1<BYIy ,N%HUYkL>dxv U%R(N߳j@lTb#Zoj4 f9ƖwZ :6aMK\2K1lQ.Hѷ) q7N:>efs%s)`3&ѡZ8I lZNm=¼1(P-r VJLj ,CG(ne=ffML|f\VM+ccgm("ܛsq?33dW* &/ egܣM:ݐOveiCŊ`έ[|MקM@o gH*4%kqЪԞhj=G ƋA2+q\ {Vk0$_葠S(#0V~N=;ƶVS͞z)GnhK-5m/4v0R5lY:St HyfУ,UENM,G#%^>|}+]KjߪQ/2[ 3\VI2?פ~ D'[ <+<A @&ôv:xBVdf*/\#hr*wƪrwHkpf:Xs6^N0̣˽\)]J.Z+r-ɡ%JoK|Ji2w)LUd2qi729󿛙Ռ, $栜.[ LgwzfIYҹ6[O]!ʆSO&Vdؿ@K<U %RnCؽ8, 0G]F| 'jJ n^s/f.0/\E,U.~?8z ]Ҽ liVǜC'FK>h$Գfl^,Bʎ,vOXnLpcAdoE;@js O#\X'LLzburXf&l6<˅1^v cB~<{L`JbEPAIV. Z)E N\JB]EM2llX%áHcg8 Rnb^'[eNjh*]lQpBp+rvHf̢T%kS0DzO|Ҧ rՇJh.`/5D~)1#pcjl")Hni|p!1^צP^! &2~^p! @(*aA>"("0"r#2>"b\c,8 n$ ^i!ĊJzGQnOq/.5Gah¬Y)i"-(US.bLdb{b PƂ.Wėt &![mnXl$$BYGĖ)p:~+BDb`J뤻n%W(42h cEte5>Rjn=:`Yfʕs[@Aq/-jZZQo6iL;DŽ+t&*hI2+ P1-Ba=BSe{\+C%"9nb;5lfps.XDtZO,`D9kŢFbJi+"njV. ;m$ jڐˏ#30p v*)!VZS#3JsKEJT 8)\"n>ck3HcCBF$r8;IwS#޲*"\v=9Nj?DɲV q 0¨ú/̛Pe+jk0lZ<>J0Dj`M;O*c{("H!(]BcG9 T+OIt-"}Z)Xf[Q&eR.Gjyg]1 ضr¶4MrRG|#"M q?x`vHF.B%46'BZ.sqFLkoq\ G64; 4KGOvvsj.o1].όH$=4;5DQEt.jh8ug s n dWml׍stO'^؍9fb(-,("t#wpGHwfT肄#8bh̦Lz"p>+|l["=:hE. BPq]cE}:Jڽ@t $Й87iNhO6Yq|0iF>q7ǴtU0|P@CdlҿR zn^67ꦉ> Wp7굪ҊlBjna bzƦ)v f@η)4RQkqÌ>FiFGDž]]c D~j] D62n+I<ȕ|.Eff3T1v D m`l<@d~3 h'~*KɺCK`rڬ2/cJ7i8z~t:c mgŞiY0#vFfeL܀tcƫ6C&T^fh&u7@oʥ/sJڻؖTIn"X$mpE3! 1g?fZBno@بzB0z6dxcј'|w:; 4_-o1\tB0Nb'}u;%@SN$wƋ-v6,H/qљ,r~) гHVcXLl*-d~z3W4^F7HڹHTtNA FjM pJ?&,ĥ7iTKPspOe{c|rڬiܫxzŊ~|KJ*k) #nx$7.3>dO~*\ޱ/SlbpQ- "|~4p֓%bbL&ܤO%oe+_]Gt ~uU$W6F!$K$R]xyW!Vz-E.d~ Zn/D&M0@>042 H׭Kj R, (ќh+OZzH,|49S@)82E+~Jz-Jȇ޴ #)hҫZx")s⪬M8CJH\l M$>$ ,ZNS*KAlk,ëDCM- ʘ )W3i \֫urV!}☜Vx!Bl`jZ-i[Z 1o$m o*Ⱥw<4VTS+v,[89U?Yh[ .K"uS~kMk7G3+d\B(T5@%@C+(R((,a0H56s5*cl2̊?KJ-l:.*685=B]V쬒.7w#.ÉQF׶E+Urqq`T%,rJ{h& LQnqjrmnO ݳTtHwo_.6,24-:*o\0k*.%Fj9sӎ~Z2޹u=~lQRSdNۯ5 9ETy+i^YJ3uv܊MF'f@CDS,r[lz!F.4cSOѶA^?xiֽ0y|˱&*ωx-5,d)(P!+c͹B1`_y:R2dӎ+mb*Bg8( 707֧~B9XI(EL(c9lXB4]qc)Iޢ + )ư(P)w neJ~g-yPa<*)4$I*M 4㯇f IrD(Aޝ)jˡ7z>Cv{Dr/tQ3dŒN Vf$ʒHdkUN YiEL:JP 7xT8*@@*_ӕRQ%ITlә;d{Գ=42=VܩY$H#HG>Gy3C,R.GE)FX)>#MMr1(TtR,E[Y\>EVOyȒQxd~]캖DF ĩ#WZSpP, pٓ?,QZb#r +Ĵ*hq5lHGu\VEz%U(͠G=-Pcz5*).=)o7f8IX_wvHÔ٩T/2]+ 8uM~YZ\3E(tILtIKnF$l7-j\`Vs[OQcwؿDɔQz[T\{)r/GOsyC eDҔaf'jOD&kt϶xUUlM!vFm#2L#r'HuLiµ"8T.pa%&wBB TO9rR^w~FߩDV{/C*ѷsqƋQ3͙ޓ8sε6=f{q+L5Wݲ/#FTD9%*7y*V\UuZ-~va7)íca +k!矿^( pٳ^4|viٷ#eg2bڻJwhc0sE<*$P<39,ҡB=IKW' ?D 3N4dQָh,rht|."pBΛl~Ntv>NT% 2lwrLi\=` 40xNMpp(0f`*J0zn,r>r:6.+N? R 0z.AJf  r1LEԔ.ĵwM8.@lA j9JjĤCTNf&H20(ICfvzbjH.0f[-i. PbX_'0%XubΆ;Ȗ n"j}T >j$BcSƈ:6P$qv'peKpd0gNy:KF('zJ/MO,DXGCXr :,0:؉|FddMԃPo mvCo>ne<Ysfsq؎OfB%꠩ȤMe$n:rL7X݆0Ghxΐa ԑ i-P, N~.kjLѢ <$d wq7%^̀Oy =! J .fp*>r+}-H zMD*i0mVA%( k8QtC sъL9GEhu @ivdR,3@bҥ/ "D2 12:eigPDv0S AYEPz'"*6ѱ2SpʬtwHNG`fC8imУ&{K)(~/ ) * N0QsK_Шϯ*5й`;.3VxΆ 4ep$p/khSˊC#Mzj]sŮNLu HJ&De 7m=B8JG^gxtE^pXqҌOI\Lkm*("Sfi3jf2 sH/gT܀%^_S¸SSa BeXP'2>m*4bvC] q#} aÇ&H&oM(y .U4y'KzwʓQRm+amR,t@Hyoj"6nc7f_ w!r$>(EjQEt+:gWqlEѦZ M@R2GMNѾy׎@`Q*̢=q(r )s ,h'n{J.Ӵ>3sMfdNcBtZjfϓoLrA;pxILjVn40CT;,Ogb&b7on.J)$g 0c>ō%Ov r'?UhO5pGw/B Qc<4Mt P1])e;KƊlOlJhe8B(QjPp옫zvex5P7UtS;g"E̖5t.,FQsƜQEL8|0Qϓ)1sIJ'I38&Pg:*~V*+m@6I*^:8?_ 5Ñ9:(^%m(`NB;!l)Q0*(m/l8 Ӧ'3zY03 i-~KuIKSAFUph2TWGue/%F╄%%nb>z.յnRGrTC fLf{ 0rmҨ@uz J>P4ftM6J%)_e02 ʷUmuvAq'F8㝇5^9U(E8֜^tn;Bǀ-U@t6$06KOG0$5)hy]k:~nO&8<䮵'C;0{ohOdtz$ tԫ<9Di)9R<+z)>vYS4bm̩eKJqpMD] />o|&1P cKWG-H%IɥG/$ G|wc:iO"sbC'HxJQZ:C?$+&Q<~PEJփ֖-Ðsql6ǻrzq>d}2xb4< nH##N?)m;\ĥ;-O%Πn.d[{hZep\I/vГ*sq/wCVekt|GRxWlz06i ` Kq3m-/H6+g_ h? O?R98vz(@\DS%0",;wNCӀA qڿ[ѵ6Fs.hΚ^91.Њ2^TX>fYibM.9CJ:f֟bReG7vʹɫ6ss,vuaaίC}?w35+)gJjM'h: @/ Μ- 6+-&B(v5˃η-Ƃ%uaEJ=/&"g4N )}(mf䢴rkE/ >E}3ɴ]^,r<`,tI05dʖ^tga.T',hm!T.I/&[Ϻϔt9Q][;?SW|V.7Xl!\+\dΒb=SJfRd+nu&5[ o}+ SGEJgR9KVdFp;&%^:.7糷owX:֌L/ WMtHCzݎ̏; >﫞jhU:_:8n:r3̘81$W G<4~JyN#䫘:eD 2)D9W)VtϝQ{JIdKLR%$ߡTNg['ܠcϊSwH寒W])}sd;v#3,(eupЭk4Cb5E3e΄ 9Fi"%f3 h$`{U,`DR_a\pD%$r +aM53֏!23 8E)fD&FTZg&U2꘣jWdhnj=uLa/ؗRblǀSYVVc1MtK (.{9Uչ>I&MY̙'-'cz2yϙ^WA͛q 9_1l[O`RAfmWZ]mi3NnĽIՖ'޳- UhmK !zSpܤxϧ8X ar KK3hF/N7j$TM}UD/yډ4eo}_vo[}UY/jb\u_\ѵRlī_'$v0sW1(S2"&~mϬBן՗i3ʦĬ OeFe+iHOv\2zCzY/u>/8JU /V5cklGg5Х#t.1 k>T>9hIL)2{(B!:YηJэ(PC" VD6&"0ǟA!4" _>12鏳hS< 3CX7`+2BE+FݢEyDi/R$ Z|Gl>Ym=$?=E?2Z92>c H&l*Ѵ 8D-=;!_d1Ađ 5`B,%1ΰO`!KDA:bBI׋P40 1b?!bO,46sݳdϋ"e3A+VfⲘf-ɻ@H&*&Df{4f]`޽:^l3LD* g2D!a[JA10eY,\ڰ*~Q 0(]!68^IniZB.LJob5 ǃ(A2a #鮺2RЈeV<i AC ЧUlJlY ;鋃Ѿ>ͭr:Ѿ9?Z0aN(zr=TqPc ҡ$obLz#5L [ZN.Z/9Eu܄:Ե^[{DY$(dpF5ԐF0˾$"h"gRiZNn;ܬ}\ӾI.ūBȈVL+b~ӺJ!<\y}q ɣļJK ɚP~p%?< qv617YSt>R2֭D |GB7ƈ8qȢWur`JJNcxӜ)g! u'[9njR&>2f>@H:?U%]LEd^gPB>̖2%C<]Ձq$ztԿ]t}*[4}1&ˆ 1 Z18;\6 'K^-gA#Ă*Bv3j-=GT fM(@o ńLswa.fjwj7*ALZB739 J-YJi7קlbsAB/'T _r /K>12u~;z@f`e#1L o,;ߢiTۭ[D9gwtw]_0B󎥞c.T%/rEZ%,d8ݍbV8G!;Lvk1WAND3g:\W]pg7ר!)s#QRiСp"(i߯2BKar7;)4/6 +0HKR(q̕!LET4-T4SrLCMB7- =wHU]i.Ak4Z-:_6#6.e. ݲnZ=x e{y(}jD) ;U2i18O4rB K-S:0͗?I ֌kJ "Ќ=n GI-_)cp!Iyֱ= ~pD5FCPiT,*^1rta(Q1>b2;e?PZM9MKrHKFuB œU^5'1d[8TtTAi٪H5e偵WO()J"=ZMuNuOj[ԩM̜%i۔zƀc:4,l/s\2v @TvigUPfPJ]e 0lXqiJUIa#>hR}% ٶz["1LҽVPLdvEi< D3uDË>O,MCIXIմ =>=C5R{,C/6 jJ|)Xl᫼f>}ULX<ޙVH,rv? JА72S3%{G.[8:Ms'|K;Ĺerx**,D1 q1Nvѩ :_Y(KpX <8_W}KEbԟnP{OJ.~?X7Xh2h*4L0'`q6D~àF)Fi0ZgiҐO9>&Gϐ4H"0* 9g .2uTmfȂ+ Tb^ZvcXE.oj6xP# jjFZ$d:YR5D N|l0Oiz'j-Ħ/#KXt }ˎL*( `,g>n4nzo 8CVS&oڪ(E7DhI&) m|;`']-m)DFn,rIx}Nk= jh_5 Nr$dmS@ L4| 4tKo֪u8"pFQjU8d' p̨89HαV:Hi}"VG.X.uK1r"2MVtBDP+KY#Th>¨cT/=K̍Ht|m${ǔgL;8fmTPPtܺ iE.eN}E" X"'ˡǨAUΒCH(& hhG1&ebbM3~ &edl@0-Z*Hʮ߮<^Bk(7R) 76ZxPo?hpnf&!Jv3% *(; lRq XPU* VtI$mFMLEFh;HeLG 7cU\I8Nq^$&r3|u+F0K2mmSlTfOK~vc,Ȝ`yU/@* *vjdՈVqE`/k i x*>%?΢881%^tƚyMQgVO"nEtG[6(舓OK~1t=3M6 klS 4h랏CF ( < څY5"iƕu&i!I+3M7M ( JLCzqM+ԸDgkIǭDMNM0;Bp%V[7i%vw\ɗhg3Iռw Nf˰uZ*R Vzz<`ޥ";bl VFȈԏ0ݗJBSOTfvREW1^el=ʲX#Qmzf:Ċ#Fid'00֖v.>g%0 jދY7I-+2rUE 2ڊj7kJ"x~Җ$o?}iz*%k,iNIuuN/1ZNZ7c{8 iS yNY+yb`[hECT~QMl܊ M h(`) eznoʯku\G=_TV "2Ycivނ~deg$7a?ڤͥ2 .qOSSezn}7Pt14|y gz+$<'Q Ѻ'|CO ?ǑeklCM.L'??TzTqwh@{00EWgBQ"wrsLf0y;XDmQg{PeWO^izW|8"V6o >A*\,pn.T@  á0 CX\ (T^%G t-A8*pK\}(Nsȼ/@T(TހNTX,B1VOe! W=0ZR>f0+NUaéL~c' V Zzi09N04ѥŸOZxNPKK|Rۘ@TSY"$:;qjzC/j F1y/6+MQ PdjڏUp\ *u:SйLՓ,+5Hu M1e~΢DK 4m+3)RIKW,m$5,B̶7rgZ'0+rtrե%4AmQrMs'0wqGP2{>u=\ .%,,Sm, >Ӫ3CU :3C ($rËlD@Ʃj{)gC65Ѥg愽^s7& `^ID!ԼTOEBH˜|Ɲb KN0$;evhH)e,E/.mFB[9p)s* TKT` J2@;Eؙ3R) +bo)ke 'IBygej(m1FNEi!ּXzg %4 4#4Q-:6k#4HN_vkyKs`\fԗ I9Xzd5`HvN(RIU2\C50Ցf:roM=g0UqU\{J_Lԩ< Ye Vs頑UXݙMb4mᰒe㦝Ul&Κh8h]Gw_Y)6YB[X ;CH̜R';M%hd"#Au׳?GWi nWG9;V~%ZZWڎ{.yTPNsY%5uPhu"R]oWlSjOF6yTY+Nꭓ5GDw2qZ lo-&ƿ ӁpPį*"`qk 2Vuu-1f5 `cƧ`/jaѐ@9fC4DOuǮ/R(}{v`}Бa>wDZF*DRPyh65Pj+Lu+E<KDou0aGCsT%{^x>>4:QoLJlz/kfRs]#oaAnK93D UI$3)H#*Rt)e  ^f+Yx'[Eae|Ӽ0m0_K]#H uEN5Oe5Oy 4]LJ |Q"4Y!pێLh,ˏ¾Z)!kz5; ˗yK/q|7z.6 2c@izB@S;{&3Z.nҤʠ!˻ !S>x'ұ? **X$?=7Q2&R:!!>xQW/*<, ꕱKGX9k>! 1D3-BɎi$" 7*>p@*?!#. c43O AKJ#*:[lEr;#>I-bʋ>?&R7#l{;!7Y4J&%x@l $1=4k,"2ZmD@AETHD3|Z ue Y\ kv60d6 Q$@إc:,* y0;9N)-M8ZI^5zHJH#ޭ "e,QO$CɆ@Cs+^rJZ"Ӄ& y]K( Ij /} 8ߦH+c'?Z_Ga ag"ٝ?2GK{|:LԓҜhH "g( 'HRq%GQɨ r'aI:6NSš?"✴;sB^cÔ92kr^";7#{X$+9ٶ;ɩϤ>2ΤZN<2y0ZٶٶKDaKN zDO ??zӷ٦G;Яy#훉ι<<7[EsK[(MOvK'$IJ&SJΨ#2>"tAȔ4J#K#d񛣴630a%LQ8V,L[ch-:KbU -|n989.8Js=,sYNZB-H}>m)K0$HNVSH;CEaHSa=JI>0ҝ;AAa !܆E0øސLuEu)g(y9N< D!KӼkURB˜K %h娒;qN}h㽢E%4#V tX—bTuR|S'ͧ-xՋA!>PC[Ji.NL B;RDh1DD <2'Wl+%"-l7JK,UL"KTZM"+NCˋW })sUI^X<,6]TVK)],aj2]T;%ұ#Mف-=/r3<g}:3< ÄA:TK8H5 ٱSXb͒@PJ=(m[\TX\DCg*sBR+:SkMƵ^KW>p1[;ؚ-|]Ēga$mMakD cQq&'gS𑲵CIRp_ _[EtW5cڒ)O%˼ʌ NC3ׯ=~*=vXzYPcPԠX]\r SzO1@ 9CEX8(^x#ۤKƭ)H9ͬNKO)Zʿ9˘ԫTCk ѵ6RqXGm}M͓4JQ& i*?8*ʡEƽ Ur`젡c孭{)H3ƤۀOCM7= _,DOļO_TڅTe& Uo=)( Sշ]5z}2Lq!Do\ קz*DUR`-;޴ `ё><%+&_ Hߥ CZyZ| ,:G M}1D͚FgOA$fF3&S]f "zLB9cYDȣiV.UV R3.tS5୉;˘ M Y&uc%cjNLS{U RFĠYl2)<]6%M!6=k.GmPPf<޽ uؒ"g^hĩ[m&bE.}Qg+ͷ;xٶxm5"csJ !C@-FVLaðoD5*QCt=XB撻%v0_ߍٻm^9v4ћg>W7U\0kDE^w#ޮaQ hGX.:'S&'0#L@GdTANdd;J%ȶ<ȢOĭ_ƟDL^<'mӢL&w[D 9,Pc3<?COVVڇ8b*9{&? 2٢21l5?߁*7$ԑQ! ʍk" cVisKK4S3ʰN7ގܫY/3ɦԒħI#aˊ+p?9= I"N-eǗ9 q/֣aK%!_ КQwQmQ#&)һ꫒a5Ld >+=vhzOfN%WiMV f&g svr Ľ٩gUD `s.Ժ4( j;ZG֌U; k$) h7 -)SүHC8SX׳#?c,bv=380:0P*dP 򄸷ojȼid:=/C{cn8ÐL5t-p$0s)# j%~/ \&)!m1k$ɃG( #3#dК|'* 6 fENE4(jc4p&Il(M+L³ɯ"{9M;*; Ln$}M, s!Ù1J'ma_I*X*AMc+]M SWwϐ\-+tChMTXAgq0?<e'LQ|3RZ7S;<~d Ǐvf|PM3BLgbKVS<ȼ&gQrh ޑ ޼͎.Šn[G xVʌXOF_XRAަ"oBikǎ6Q)تjO1 rb\Gw%,+ "- v'9 e̛47 JzYfdR:ofs:G|*.dpKRi,UN EwӠS2ɰDAR>!2]/氯YSΒGgHZ/AUA^2殝 l F8)d֤ $N8oj]E쒶4'&yJeDPF$ "†7 -Q4c7-ȱ6鞭+(\{TEQUH"kt4!T[DtG3l̔Ɏh{/}w/pLrL&G)GyD?DdSK=lTdr*ֲpM'BRIjk[f  4~ΈP@>ʇ1ƫdCN P2]7ōpuGH|3_m̢e;doDqlFX#3Ugx+15mmH%F]r;g1#_渑%Lsb¥c4VFfjIO_^> 6b:6uM8DfeԵNCD-Yd$ƾ{Nefu}1 f&7pILqC̮jge2J3du< C2ooCz&ȆLE/P6sIJ^O"ob;?ezl5YiHtxP0nX h"+:;(X56+D%*q=vE92QiVPm hF '&fK4HWW l;)6x' O-GX.G@Ɣ21vSPeOc%-7:Q;F.FfrU$"05fZzq(Furo:p0uCKx hGh48u,爗%4>=&\UWV*_Vv/wn3J銤=}PntNh`KvqW!d-ʆTx !b(]ڔ sXKɆks Ju+$kߖtgkQrzTtR֨("KtAF1(M+`yRoĩЪ{QM =r>Va5n`%ƿ{91DWx^#1Yke o| {e 3>JK:\HfJq"bPՇJ_$/hvKDvӌWJ4M7:.p#c>`.H ڂEˌAtgD7EO=9r>īj7tsJ=9xz%AۃeSw#( SS*wegbfLٯE&W ݬ҈C8y[0C 飅K㞏- :BR@WK9Zu8pѕ-qc'O Pԟ`n{J`d:j􆯬[Y5WVy ٚk$К- w 0dqn'Fu>y+'cpgӭRFZ;BՅ |/Mkyβ wݝ2L6i _D\Gfu'хnZN6+TJt jKg&lO7}T*B 攣JR4i,#hz^3ί)æ Jh";2v.KL\3/Zp3ԎȺh!N;/br2 S$ Ӷ jB,{ƥl 2HcBm40+ /ܧ%@.aM-D' cHK.&U:TD z!*Me (*DFZO2Ȓ=+3ӯ 2F^ޱT; N$F,1CPt!Ϗ?ija5)K\VPҩGLK+Pǰ*(b,@P'32m kU랬L\$y~k~;RXRtqU(L`͵\J*ˏe^gÔM7+D <%O-Tٲӟ!#̤+BoQ8%;53JR΋l>s׶(rC1 K)f.6q3-k %P? sȿB&EE<F:S]k䦢K"Mڦ.s{5)hCck1"KSETOg<VaG96asl=ȧ64a^$"i25|۱?n]:H=($$sq" ̲1 &G͚#]B(;; aԋ}O5BUz'j(xtٍ mn%AKfʸ|Z1#؋T)-!@S mVtT.T:3tJ,l8BLi3eNe.() u:,lcE%ߒ$fJ(l˖o\ODx"B.4,dΑ#ne%SˉUy/TɨnrykeGeP!hB,ْ%>E@a8L7J< [!$}wyء|5BlǤ5yIb C>;-9YC:(?({6_a?>)v锚Z{5㳙j:*[s)r92y譋a;C@">#iQǰ>)5ҼȡK@3ѶAcݯ~)80L'=+E6I񩻳=ʰE>3"9.HYB#8.F>bb8ɔw/2!G-*ÊNJ*k5y@RS!|Ur`ξ_I _%[CHJl 1"YĤ2 ֿ+NB$CFJ*!ߚ ï9Akk0sÝ,<̀)T LFG%>A ?RT( & #9BEŢޠF40ss8 #,`'6DW30C@'?D)ĝH,d.+Ԕ$:쯙 ,욳韵 BQqۉ?ھC ZJ; B3ٍ̦) Ғ"Ji *Jz s)@Q{ S'K p;aj=91R%@i=,ìp"/Z}Q~:i{qf'X-&9>tgG{t);1( \꤭O,#է,[ݠkb?LD .Bܾ+TʊG93v uB8 ۵0^ $5'84i:?>zE3-ȴ$!I17q#D9= aD\ 鏵48ErM㮻<4P1IJҍbCɘ˜! DA; 'v}9zď˗1PI:dXzW@?ih;U5*Z4k5ңɭ+-j$!4=8Г. dbwBrz\}̒ \r7H(hҪs(45EYP)1KUi@}'ĩGz6Z5rYe hjy8N+Ik 9 sX9Nr.T TXĩ ) @|[FcФLFb=EaEQԡX}}EɠRLȯJ4Kq;;~Pu/E:2z3V,lV9)2\CBz'aWT$5\1dd"1Ԛf!LS1Y͌л@w:<798Es+LQZ>֜9" `,ԙ1M7f5 9K%yc6垿 ȥ#AZ*@ىRԏJSQc9_59%-rC*^s>iuV,j,SW%R WTK&SAL!eαZg6,2ٻLCCaz"FR3Xj B)y?G-iܙH4ȹls*#xl&e7Ɓ)4jG3K;ʦŘ֘M9>iM`4TYOWI'lۮT94vs0#@Fy{+6\ 'C"6S ,@aD,O>lJb`fuD n1 綯4բ0ׁ'3t42oUY𙸰0W@`AqXT£f a8G1I$GĠgN6ĥ i gШK[S#-6 >kU*z_!tXB-̡]?iRUq-gJ3&VctJY1I.tdޓ Pd+RyPO9-TIny:oJOh`q-}PlTV[H];E\)=y\ڭRcx=Z9K(Zʛ.rߥ<)˘(KÈ=ƚ=Ht-0bϒ3RD{7)3&ʑ#LRķvO[B0 zNb &W)h2JH-/s$Er*±M 28<ҳJi'8r8D0X "J*Irt'B"Q-2#35%1ID!į߫ILESS̲c\'u@2BX. K0?,G4q6*PN:',n#Ů#G]7;r!G2H ++)/+j{Ǵzgw_sL?6?+*ʪTĊDkU`Xð@S>ﬓrPL+Fd)NAƖDͿ:b, [`*#͛ k>$;_TV wBO"Oۡ`X8呢4ILzN;ZXEb\@qs#?΃)p}W@KR|TM<OJD.9rw 5K7t}ےڜk=>[X͍:3 r`2c9wjɻGdnM'U IZ/4k\rNrCFk$ءہ'`eoPG{V2cF}9Ɂ~~JN :iH794N^unN??x ;W% o1 &ԘF]ыc9"azЂ.,DbۘwGE9 BVrω\|l.:ުrsut_#[Ѭv05V, @5)c%}~Mk*6Q§3$|] JIUNafvr[*ڱnj%&)ZϘ1="*3"$7Tۡ\S6L[{[c%.4Ui~mZ11žY_׏ ۙ i\)$ cq5jj4YIK!{:[w;J0yEEFQX\{7֙);qm͚0Ђ2'2qATS.W.ftxɍբfٴhեCw5zHZ{jF?- *!qԇ+MKҮډw4m=Ek>a*xp8y#U+ZsQ*hUӡ+qM/F+[`eF toFO괄"C8"7m"[LbMIݴTH \v 64ꐳ\3v+"3qnTՒx \H[\ڞ8Um7TF+iJڇJII Y)xT7b™3|;;V5\#;R]ӮQIJ4ҩ| 6+T ԪsohI 'd5[6|38 ZdhGK>Jgoe_Jъ[N6ovTGEwTNNHHg|_#73/+vC&ϜoOb,ַLQJ11{KljN}mQ&-,BulM^|WDf&]3MVR} mԭ(BbHHMbƟ͈EPL bż&Ve\s VCjYwh˜_'68giDpf)Ȇ ̰-. T.E@&`lC["'CLRVYi*]Xue>O yMu6dj1gƪD^iTPN0H{KJ.m΀jPh&&紁( ΁zf#xJr&.EBLh@O) Vb: d`?^@& 6F @&l(cGxSt+jxpNFKjxȮcCD6fC3,(fE eS Φ*hk(,k"iPJ.m*٧EF="Fdi ) gH)f4hS>#OID3P5 Ϊhq=!?4J@%=NVl3r3..RLV^cjdKc7*.>vLՐ|ŖfRτnNDIp@tL $S `H CPP ИDeAF7£IL26EImÀ *?J(Sy,Y*e3OQxK#ȣYb_K teiQI ۤsbgL(SD2V%R kXAԨSbjӟ̵Wǰ58Q#j٬ѪZi-wGh+oOxbG=q8^b !Ibp:v+%%U|ⵁ#\ ׆S%GQ|Z7ۂ {6 +<9 01+0k<(Ҧ2z1H S>z B/0 N#.kNj-2PʫJܬobJ4O+F˲ṿJ%l2ԥ,kش9Q65L2܍$/j^֮n*8>ԕ8!l$8LkɈEXNmL:DJ]e}UV4! 8Н\m~S{b3UaSj& WʶzK@8V+i5"9&H)Dk0YJJĸJqŠM8_Hƈ1y;٪;>pt$[aJ/˘6ɽn@2 \R׽tc>}eQn06gI%«#*uH-U^:소j ^'G )Sehj¤ue1;l ?K+mj& _W br&ø'lӶtVd;ajJm:2’Tt3ٯHI\y.ff)^bRSqٝ?L!9) J:TٯQ9 RSOl8M\hՙ\)R:vܸ-jmd̀B0J)ncc5.FU1$Q&d'#QjH=U p(^stG J<7,lnnYO%܊ A=KڨBl TnibD,B,t0]Rs wS`|#yiYf$i:&rm0vvYϋn#R*0XbJMe56d,[lRN]#c,Eƛ(J=@%y$~QH.-m=NPMGkf=&| A7C:X#EmAc 2nBZ^T+pԀU9q;T?jSoE06J0Lh BT΢&c)Rh,fIYS3tQIcDrSN5^di R>I,uʦ<qucuyR"S8?@wMzpbpLEkz*v.hċ%Q VhY$}.9o!o\h\j2Ϩ:_zLi!x_+\{dfl(n !l[LyZVnD2=tqqTe k].qT5[uY< ]Z hȏF㊨p*̪ÄhJnC_myek(r. nrK/bCd\Ecx6[FX-_i( $lU$BȜ9BMlj}̠C5 JvH FDDl ^YjKånQlcl`29J8k"}Bձ[]LVR{,tЭ8h`.$%4HG(Dy~ɜQB7dTfGLLR \fwHdf<[LL:pO̖(qK?nj9*p,C$ s\O\UC*⭉ CƮ6PO Uz.ig>3&T7"Kfl舐nCQGG(D+ޣFКF[Ԑ=(6+I&<@L M6psXO 7)Vj.wmMӲ{lhV.gM,gDGّ2vf(,6=M2D>DjGkm"Rd̅/qt] -h4&%Zr;ƺ& R•AeҘrtba3U2D%oPF VFCLpt%D{$q:u,,UjomJZr.fTg&_-*x}]i&dI.&?oNuL+,3LhhY@6N,۩ 2ua3yƾJ%1_(Kjvn!$ݓT)\'~eOG--C; .έ:dʎpd-D1NJ8UY,B0tOgk5Ү"VvvCeӜ0'3^OFLLvnH, -H!;V nӟ?qFrΛ sW12ZG/gx1RK>(Ƅ3F_jg T˞Dħ 5_U5? :așI[w:u7 j/&քo*/Hj7+HE!%}Ɨun<ŌzȑCj|qN$&mr4xavv{MCH9#={sVMOܭۅ**uad1Rq 88M%W?/e5ąx19JH.g Wg}}ǞS,3mc;0춍Kb[&J>0Pofr?M |.P˔ԝ[gF[R0O쬹Fs3#bF 'D ;/Сsڭt+~%u7"K[. ,[-< CK.-kųW^_m4Wx'1 UUA#9m%Z{MnL7qs3:.ǯpO:3Jtq5,L)"KcFiNEUtfӀDMmd:d4oܿGQReܷb SXϊdX9[Dk۠P&/jöV O=2%2MIk).&!h^d_z'b1\eO-xlnz7O,a6Mp0 h`uvX{2xxfG*=濎¶viea mgMk9f',],!脾nJƛkbF9U`PpݬWOMC?t6t̻K +,-zn[Zu>/ky /"\茦BOtlmNP!6 Qh'M`?EC>X6wໄfy/)8g+IΰdƥWEj?:t}>/KJgIBJ+:h1oħZ) %kd-%MRw3(43d]3$-1hxUJワ&?oA흣eXY."Si$ckE)*755o,mIWz߱_kt9.@ 2>3κ#D<K|*@;Nk i6O۬I[8ZԶPn+j2Z$֡q2 8bX9q;NΠ=s2*.(.1$Lm|QIOs@/B:p)JD@+㰓(0+C,PBRL+zn~̋洌lf#l'QD.021]rPNtcu++3D"sf;HE[:e4KX!36- ʶ"TpN8U OM"_%^X4=RG 5S1n7KOTˁ,+ +l2,JMЍ.*鬨2fEʵ-z޸5mFY %EL4] #gg\DDҤk27 buHπP`:|R)}>AMk84tv% kk!t[mH̨Sk% Rl(/MTZ!vR7VLK.ɌQq(F ʌpY f+v SZPZ2'M0u3:mhmC(t#8 &AL<xClM ($j `;U#3#40%KD?ZѼ֋)R6jwM>7BcX]9q~XImc<#U&HH ɦ0[umJi (GZBk[tUw6$k˦\ yʿՃC'A;sHXLwtOd V :"x2sCcz-ɐ4Kriw89Όכ!9h~D:Hܐzj0 묤Δ7;=R,4I7B:b߫adU!"):i߸40D-)[ =Q+%J>&@Y)A$ $ҢJ#Z'VA #)P.zD2Oz3i-{V$ pz2>S38ѧ>h&Zx)8kQ1 p")QtRj&Jܣ;1iT\yEiS)3Vz6i8!r "cP/0qDʂ)12%9)KBVqۛ.86},WBl= >J  +9)II{ ܏os ~4iU!Ǵq ل#qk#!Q7xR M$d&"ji=J[*"8K!8YJЋV54ǂxjWI̹B@7裔Ik@H8ǶB%C ,5)ŝ"F*0CkG6RX@њ[+A9sb9jiMe*TE2B` SA^E|ŖYy._19//z*p#&hF*oDaT떃iЕ@!:y.)G39K|,Z{ê;86O .DS4#D:A y+&^4 o,P!3 鸘<81>H!5+P7BxDl6T#EuE.ԫB3,ÜԸ2+f6 5 ŹNJc&);@.~ RXG/y94Z+c7dZX,\ZOc*Õ3( ! R&;UI[¡!|FH LDǘQJ0S?>jh \{9JThcp(>Ҁa?tXp)մLӋ K}lHk 2 '"JbI0ӑ1ݽۨ>8 E؋eս^a_zWDM1*lb6!$" kOU# *B()'MUߡs7Bj隝Ql#{"y#|]j:$s{ց% 3G},}ٸ("^/fא?h7Ir<9.q$fV5q.dA/(݊t 0wP$0@ы1'tN! Z2N۴c\IVr+yl8HS: jړoIpr!FtITQm8jE2)u+ :#QU+TOix\Ui+Ρ6H[&)Pٌʼ4%򬰫ZWyrZJ$ÛEp ATNю474Zy9^Z"DT34aJ ̺Y K@Eb,D冦ͥlF[U} c,,FAI!悾n;HPUWZi $n[RT bf0,`d4S;B=һu3I :M 6]i yq3d?CSc=r0HœiB)kJ|@=+M翜.53_+PV5˜TpŽ6$1wܳ~!\鬔?G6 ̬bd6|"-3觀T5L&*Rc&tO:ȋ "I#Dө =22#5]WAD\q޶Dź&Q$-[zdDvPM4E[}W:P1Zl %зt;Q+6p)p;-WIᢙcq/SV BK^˚QNjاuc n6Wq 9!J`>{fW,rs#7|#$O]$8% DCS¤TH0Է[RQhM+PCX ==/ٽL*?Gww;_^j[V$PN5m:m"@נ B*б .YܗUlqv/_&+%?!GWiA^)R率W iJJp;qb<?T":^1_`:6UD:Mit|dͿS1A^ƨm{ Hkrxh=7VS-}JaR =HU>|1>/cf]|G(BWaJjL"r݊?( ?0  <.5@P%Dc"X|eѩt hK)M-a:K>Qb)ZDht 'cYJYϪTmV aoC`;I_G18X5Mw_l cd%DZl:KXz1/9VAVvWoz^mt[V{Ø\rmdour%Z erö};ouHz{cLr|![iڢ! 0@N4/T.B!jB@h)&n3Dn2jz"dOJ沸QJh(/ kDMRJ2>,ӰlZù+Lu$ ԄRȢaqɫ(,ͬ*?itdrr|A]vb$뿎3c%;fM5׋􋁫U|Uk8L˦f[&)G3t(>r$N+ |czm h6GE!0F64;7F-6p+.Ż05:FmEʼkz~鮒hQ&bRdzI9AQ?Y%zB:^v͎;I$⫥j\c U#CMՐVxlyEt`9a%P#&:]0 r -oG?*d1Kqh" 6DVO8vԻ/"A>-6*]ǝ9Hl ((IT%k~+AiP2i-'sQ0%ˡiI8#]|Bg"sĐ2Pv)^J e+؂G.y &ό.H`aaɩJYCx&bT(sOICwc"<վ&Va 6U0'LIc} )ɠAWRWxz R,Q;p̴A(TZ}nȨKf ,2fUk6V;yāLIF{",*MFt.#TiQ5a]5J2H(+/|A Y$c7kF0閍)"d<2A(Y~.' ly~q,\j}!T'qE AA D=  F'̬ZcihG$LfDĭ XPxul$*[Hm,(C/rMJ"$a^(Oe).qrAC-24'HĊ ND)2zI%ϨR Wmgo$fE |M Nl:ొBeS ZX*(">c^./*b @6z$?i29#w*v9Ch5@?d&wI;j&&((bUddDZ&ĹBwr Beh"HsOjE !DN4rkVo@-ƀgc<ᄬXFl% ]bML&Sf*Pʊbd\>\@e/s%b1%y(n]1H?ccv66nĪBMݪtg&4 rDLx#4vQrKVv H) xjer-LlЀ0`npӝ#<)w3Xpfr v&|+@)j"L>g!j2b}H\2+HTң?l A33]`OJr2)X2A+s($7 V?!D:k\8<`)zN3*q.)RIOa}&.RRnTmPnJpL&Ixe34Ox֑`3WiAPdnEȪAH CS#TB3CT)BtJDP׳R-A0H8O) ɕx58ƨo"XwET0g(w<$:W^<$g[TӑEn$["{Ծdd.+Nк0JEΓrFQ7ѐ0a?U Kzcq0=0>Ԅ`)^"*]KI>Ś_")./C.)Y9po)fZ2\hM:rޥE`u?QQrXWY4t&bddNiTڭYN.oW4*ȔhoA6Jo8ГSУ%`~脨uGHK5ZQwdpO)shgPFpZʘ4C/{\޶0s#iRKNE$bVhn%<*MiiRViS7OVPCO&+rUS }e.*_sd+eFLN"%hShI5x*~X8/ 2>xa4Nee5_m1ML4dJ1^j5UB\ qb-~GH Ę0TRwJK Y -hXJӲQ8Pc\6LuqM>%HO ?t)t6rԊy:;ymOD+dW%)ҡZ;P(D# R~*tl q:\3^edȶkр VhFx37) &X)85n{1ҋHcnR0{DlJ6Ddm6(lbS2D>ϗX\0qb&JKzSIHEU55Ўs"%]S7U T RH1J$X-P;eͶ I&٭ơ.4 п%r|LJu܎f$7[(Q~ "j/h`:os-welY߳pNH:Oe@"7EN+xYpgcN4SH'5Y1i$,MÚ CoF12uuc8u,יȹȗ+OV£2pdfLW멧װ|ǦKHr.(F3յ})ƻ뜸LdY^{@%w>2S^QS"!(5WzBVIgx=wsЩSJ,s!~H*ro0LFlPW_~#>Y sYL GkY(PMpGx|^3(ӴhńӾAB (d bXFA#Q CQ84.9B@1pF[ E!RjV_Ҁg슅fb\-OU&1!cqJ/5ɡQj6QQeeShT1lv%u W#Zp=C7§՚#.m*DTc:#ڦW ~Π,޳ .Y:_W<=HKnMڢ&h˒]Nie)6i}5η_$K(daMb*:0$jm/b+Y}瘂;M!D2 -]?0mUYw)1YI91M~ZZH 囖zM E)存`h7O,9dxۘF?$Qz{NM .|Z}sp=~ޛs6Xe3TM,ŹU{Hd'Nי0z1H^Rg./A#7 KonB_Shr"Xc$ICȃ#,$+d_|@;Gϊl-yRI@PKDO>rv0%Di,~PqQ6f^# a pX}c"jZ2EJtl:|b?͙O]ݿ5u\\_ (ay<1Ŷsop%(Hb>rCQ̹ry䱎!hH Y^@ 1"X^Z\nψ;{g_oaBfHP/ D7Lʹ1-mzLB./3/$4Բ'M|7ƋǂW 1HMCWBk [ ՝YDpߎRQ]op1hQe^I4ĽB\~ʶ+*mVFg#炴Zex-"'["h䑮Sh8E(vV5XU;*9?JTKC\Ļƾ*ղ\i$i+`out4:A.k{g5ev^)Ukfֽ3%E5 b Ji׷NL*eӅt@ʮؗ>DW0,S{!steyqo&r>\l|#o-9Ri!׀#rY8P20*i iYŐi'$Qq39WxS@ٖ! Nj!MMBXX{BY=Hs:{jHPmAvߣSvjlIo[ʁ+ދomY()FK6QQDF{0c).UWѤIk#R$ , |=k?2B(x ٴ<@"Rq,uՎK8Y1#풢?7[Y0=9c0y--ᾶ{1a8(6yj0JB1O"j0C S"ͧ832j4 ucK%+$0>⦛ "i.=$h5tS I >ԕ33)5S2ծr<_7[2Zb+6 C:h[ L Sd ֭kS93Ұ2uqM+w!a%AA:r)&Bk!ٕ2D;<<¸;ڙ  JᢐR02K@,,^7꘳Q > 3jp5[3M/"@[$02Pӡ3جDsGP):1r&ե1Y$O񬐈Aa\>Դ^IDHϔ$-199 4c\ L f K E2 ʪmx`DsCL,=;9{J:{r!*Kj 3R,'\W q@w #; ˿UB#N2D,Z`"aq!}2-) (;BT˺">d9'#APT&dP̹%aǣҗ9؋ b5#R5iMʷsϪH z$5^j59|2l9j$gvϠ@0A12(Ec(Z2/:)*k&1QdH GqHQ18 7QRYZJٗ${R9)9B1b8*4+yK QOFa<:ÓD,8l9+.䳍b1YS:)I:ly95cd+齙; 9T u B!#ɐqa#)%=ܼ96m/T "D[E@ ?/BD00ثM9<',I]{*)CH L3yCԑN`=>6Y:UK1[:wֲDlYKKs,*ݣP&Z>ݢ9 9+4Qr+n[Wbcn ƁcL!D2YAq@;S :2`}i-]/#:\ o<pE. %CY#A2͖#E :`V& } $٣]l;}2k#UGz1PPYܽ">{S&;6K>J+ Z *:㙰EUGڈ[TXI?ӺrkNa-,34LJ4Uc5ڤn7贄Dt5$Ad%2jJ+ULhOSJ}WYTª͂#K OtKoWóHkXx;:I;ON-E^YLM8&SbGX'nm͑Ys+1]D }VEWZֶZi<)K. oJXf AgTPse3\ 70Ą˴)Nqhu/O5ԭ$bVQ>=McZӠ`쥺+ڌgRG|`8Tc -!B# fLUvmq/LB~% Khi kJ,-AگJ!rUf#r\&lffd*#HPhV_4XʽQoE9Ċ ,$Haժ;Է aԟPc 8OITǂ#ۖ4T2] [lu2@E +g Y٫F9V_DQ6l޷";;G@0׳K2Q!v<\.-c=5mGD2s$D-;VPjURk*GӤz>U( !Q9p#M1ehΩᓼ QֻT aLU APW[$ ::w]Q P$>L3ZTNcS0誉gmή2jnTxA;F^)xp9p3v`ak4#^HK Is;2ÁC)G!|x4jBkoS!r?*#ԘvG咣&-]1jjjkt|\SCHTFO2:*OGNdf^?wˮc¬;25a>L1B{̟_/BbISz[\{ l1^k'o9I7;^q@dZ:L ࡳn/0?a1$ԓ")"翃ͫt^t{F؀_@ CT)H! CpjKt?"0fNk %*?i*Eat% RG$é2IudJjX[xgG-o(^.*2-KmQEv5E0y6qT!K199~=Gs{|!g*t:5):A89J _O\n:<$Zz FJs`:XV/V+\ݵMqU`aIB ~⩿cf=i %+ `+ ;ʃz-"~%/K o/ jb7 ;:B;,Br'c:ǎK@˵KB2ol.2JdA 8:ڪ0zښһh 3,S/c4Ȕw$4BɊֺ`*0 @̾M!Oq /FrnKI DU[ +BtO^9 /f2 CQ."-0m2);l:ԌMKCr($U$nГQMHJUVn'PH}X3Љd+Eo \3mK3Gd P'eTz͐8|P^j4m`By fԭ㨳 XE,37GmC!6U3%DA ٮc:K,h mM.+x˥SK[,ĮSrϢ'~+ȲꄆYkQԤRyKLEÒ#0f]$> 8'T=vy8 v =5$4~mT/ĉV@ق Fd*1\F4EjĜop؃@IKRh 8!¾Z 8 z¦dYP-b3% 1FrO13r_2zܩbHhT̚ Q!yz"9:]JfVSN];}=T,7f3 r_[MΚY:၉I޻x=CWsg4$k/,NkܭMt4}ꙻ/U䌒LDTf-JONmLWX"'QId'5k7ːRαzW1Mcd3sK8Ycw&F=mk("c]~*0lM#)Bܖ~=vbm?f; Y.KȑAVW2- U*[A;26dURD.~M6"  b6q4z13,TViҗwf-nֱٛ/$# V)C oÚʧo/H!GI ے=P_DYtY7qVWfK04KUtPMtRik𲚒v+ ^GR9Z5CG\!Z6Bb.[Ĩu9p)ӜY 텑qMH Pbؑ?Ϣ Lrmѥu&ެe#lb\3Lu ? +HZUV`[Iap,NQ5$ zg8:}+ݼsA,۶p`b fPb( XQI]p=KNkդ4q2/%u2nӦ"8ƣ[W-ut6E]ÚdsE4֞wOa@ zeSMwz[q3qk; b`nyWIZ@&P޴fq[ۯsaQL[5d_Rӯ]~  xk ĥ3+XJqn6Ϯx4XovƎ6nr~$d dN ϔNeJgLd5nz#F[\%Nbb *N 6{&hbʝI|KB`HQDP*Bζd>؛J-FϒܗϤ]NXTtTiZ1R0jKmXр'0e L*nO1Mƶ(10fڎp jt'uHctLnm+d,A| 5 G*A/ԬCnviP4I\£` ܚH0A&iB֫2HVZ)b҂,aJB?I5>3*gĦr ({HL:pY.DR``R3Xvo6$@Y2X^$+ $_040 #aZ +"= e%3*i0QҠpR!dzT.\#hІn)H%2;rJ1L68n*L[q*2'$4PI-l>$U:ob^> S(Rb/ mN;T:cXFiE‹o${2/#)S%WJSH&/ a$PąLn0,|˾W"0c)hTH3:BU,3D*4ݲDC\'Tg0JyWW}Kx7Q=OWK1cVl0mNsKL.ߧ4L=H52"&*Ԫ` գ$p)l| +蛭F'KMjkFYFNKH $X7G6-Fh b̄,l-GR,?JL33 ͖E*:ݍ_o怭+k Ja]@\+:}IPʪDhW+O]nzVTžc>1ȧ+H.+,OGv'**P*p 5 n<'^.0^#FpO{3jit p[g+(DB3X/b΄bcb3( )h7uIj@MpDI\j5-Tj0=frS`kw3PI Єt@FxK&NzujR' "wCIkfFT2| uJw%U#m*ŏhcfA)7K=3ƆbDg;mtƱ Ҧ),Oo.gt JCPFģxymK )hO~ m4m:0[c$I8S6QX03$٭eal+讁�v(mF M3lֶK4s%<>^2K jUwD.б[Zkui ~;vLns1e@!E~g IjL GȊ`hqrC'3R>Q[fݞ+07KMD*F̎1;9?x6b0 OYYWFXc—_Pԭh Kݫ:PIg4.bwWW$bxSJAj[C~M aa:ǹ10Ώﰏm|_.ʰAp?4itsT\ ׈x_ry\sYfNj聮QzZ+u&D7C`O~k=6#ItiC* 'ui0hΉu-#L; ͻK3RwBq¼z4Ї'X`"o,W,fْ{E0cPqtND3@VvZWR[i7  qbN% +š+ؕ,MǻfBf]lK~2BfxLBݾ(xPql SM%M%+L ڀ')D.nR ">2k+h'* ʬ@*ˋ?L{<(ݾb ):ƻl#$#)?ЫK^A =87̋.G(Rmj޶S{/1ŭКĊ; j8 sT%lR,OSӬ\Pn⪏J4HOU03SU 'i40pBC:󃌥M2Ut5Uo+57hGʍ=D;DW&1"cb6hꪡ_9K8ݷQKZؔgV|2{N)x&D)Cut <9w$T&ѯa(,SRrCK7!_A(N:]O%6!2zsN!C-Y Ca/iU{YxXsP`#K8EՓF3 rqC˅V&mLso63<;,N A8;`KW!F)Z]2]^' mT˩"G E+Q9@#8fdz`}cX332)<}*v}6F9 ;?t\P^Erɸ*UJ )%u4 S+X,vd2 İ w9?^Mbka M!ӢOC g4&:~(~.UOfc(R4=j@V^'%e *XJyy^iL 'u%*?{0̪8EFAژ%  @wcR -8U e]kz^z)E SM%d4Uı9}SHZ𔶟S:bM/i 4!B.vRezLL3b_iyrV ~L,VCs*EC(֙GdϠ ]i'#qz7/?59A/PK 327a*E43 Iɯ!).>RsoPm(K!s7Sn1ו"iRB #@&ដva!|3:#Y*F !AJl*)!0|\(F:-I{z@푪’Rx>e :A9 . IN&g鼡H =-[rSS'|A<+ ɱJ$0 I& $1t⌛$ 8@I?CsaW}X%B됋i9 #qda4 ?-ImW 14647ER "\94d9q!d=t̻yGvH#<7+a$'e%!,Fo&ix=_V%-P ?P$>(=. Y`8νzPI6hc*{14d qXAXc$8/ |2\D'ǝ ɃbM5S HMT[Y%"+*HM\%@œf· 1S#әq5X,8CM, h8A8]R~P7¬թ3*u&nib/zH !'.N8$_\ Q^s*9HM-: +]b]\QVIqȝɯ'DC؞k=VL܇b>b/>L-}`]2cHMɵ*4Ҥ&8"ɤ%]"S=XFU5bqŴUJ.mm`.%?l*.ۭ)׍C[y¤>[`אy,@yݒ<6D+o@.aF cM d+ۿsljlл"`DU|D*YV}:揊n$&zNukӃԒ[͚MeІ i;:}:gfS{.ƣKJpep߃^{;f)|)b K%YЧM(ASj1Τ F62NmX1M)=LkY"!T㠊z٭0XWxKk,,Ud+vT.-5샬cAM<_"0eTk i%fiBjQa|]pg95\E λAbo?1lങ1,媲㖫|$hxAE2g.M.2`bBd" +5񊙷e?O͙uLkd8 #\2p"\}9'mXG(keTc;IE:a-B6[Y *rMz\[V„gb2N#?,2<"@+ HIY[|p-\d,f/w $?զ*"W;!]ӿ­HY pQĵZ&)KHGvnN csvr~upVf7S%UlIO D_c[ڔ˥+BRMldX9^j㕃t,/b ;+FھE  XcVg f]6;<5TBuTDTl\qS*]ERN|* g"RMɖ޲fH(d%WܕH1CIþ\Iňgډ'BqS Hp͓+8Ϣ1-㈽/U[|jٟ2`cOZ 9Irxv'*g?c6^LfгޔS%Gp!ǰ&_8ՄY\/cCnTC6<Yt5//f@`C_ B Bh4B# j ǡlȣ#p`A!3<o,F葨&3 Ω2F4TPȕnRjrDfJ"wIQfsHg RSe(TuMx *ErUrIW_":];o$Q 㓖(:'\],gYPXʅV#A,/4 ==JI1dtn~ }X;?R9 p~ߣ +rƿ 4$;θf?⼎H(nɤɚ2سL*f(8D[; $Ϫ|ŨQ9: +4)z%Pݬkx(){*MBƹIpc&R!J$]'q hA+(J*-EdVHh:Kb0:Iڿ9+Ŭ‡B)ƾks ڣSpKIR*LdQl$!$H"俧 < =oT߹0Kfޮ|fdzm&T髴ʋ깲/N Cl:8&Evݨ}֨6eƫ"kL=B%~O>t,l0nR}*al520Wl^(p;VcvD_S:WhL΋+ՁnbF/rfv!bKNY{O]Vq2H.t=)sbEJJ!%L-{<~ް$]9?x8B㼻-nuu5,엾SjC/5 6/wɗ 59dߌvԬYZ7y:+__r"yd01g}[9@L<ɐšr,pd͑ \=q:8a00MWyGnAgly~iK+m%P_$Nsn[aH/ؘ&OIz>WB W#aajfS L&Q)t QKUŲyw-DsVi ҜmYyWSxJ`zO~;%EݢnHUJ2M6)%c@^&YqQ4j "v"1jWTѾ"L6+lq*()-96bsR,"-m`EpRԚwrXv]Դ~΅O2+T+'O! v0QU`;$<3Cpt[c2"Q$#bY;O68;.%W<ӼG `lzڛ`Np=mќu~yNKO+ Q0ldC㌎-6X=dͩK(jBQ92% 2^?iY24 !(frG"Wfl;BPa-1Xʜ.TT|AngX\BVՈkUڰEbC/H4砸81 42Pdz_:KHgSQdADҡntnR $Xq<|Z {Sc3_3 4A aVc0"9|CKuT`'YNHEe722Fui7Od4f3P~5Vf%*vxkTeL;`"`j AWXTV=WC˴7)q`Uyʼn@;'l%DMu_dJ JcSZs|tK#2Č"of2qr}>CH_Rj38A]֦H?wxsZ?f(/n(YC lP"efk/[Nn|EM+Lxuy3j{}xTjR@l&P^N*Mhy󫚱ND8ʐ5s/Y.iiE&ZԆ>Gt`WϦrCs65FCDκШ,(gDPd ("db,661O&5 Bcnbf.nH0}e4 DW/L>̰ W@\Y&5Bƴ6x 28i`pl,umrPB(JO  ƇDCDǏI&fEϚSP<*1^?o"9nAxNrbr!/3 0 Ʌ-출vC#1 ?fpM%r@ 6觗pN<+ (ph 0FCX;+q~Erk ,U.ܨ0@`tTO(YgMڌQ h͈YM4^0BSvC (*ZwKo8N^eXhc| z:i%H B)^jH)s@nr $Ӌ!P( a0E"0hq(LZ!8$  $HG%ch}(E69ȀTiF궩2oiɫP5j9YKPhydz!Jr })BT&Q!қ|!ȡ;-p㳐nJd*uxr찐5DzR3_y_6{MB&$jV~kw.Dz[WM׳%:VF,jأh.˪r-c9l{w:+ F?$ 婪b7 4"&@*k:*5 4 i-ݳ-Z*Z^:˥M!MRE3*3PӦJ抾dL/ >*T c%j Z4JCs<I3t2G\.kdM.ΔޮH+ZQJ٧,<$EKUtK 5Nñ.G #`P&=cHl٫Wr=P2$CkEԭk m.:Д]}~³U۽)B"ZW)Ǔܺ.|Ps9=eb2Wt6ĶR=˩S5Ε \jb#Fћ(*契6(pR;oX2) *i6] V$³.y7K?mP`86ڭvֶ(K˛ʎRA K=t08f% KnJKB3 ?)0\[q8D +<%l̆91dKԽ`1PO:O-!g{waG-WozL;Qt_YqO'y/JJ~KYѩn IB}Hn*V`l4b%oq'Cl&m>*si&I}&aQ蹂ǢTu|PXDT[gIF^9s*]B$DV?}y"h[_'faAըʭq/ǕKQeYu:Oٴ&Dv `q)C6cMl ~ɭ^,^!YD:%S'/ƬݲAi?T?d̀8dvRU"of,./eqG%"9ɋ,~e%Ji.Q-4#ZEpYNrI)4I9 =VJ,m8D' guv9B4CHVPm%E&n)X+YS5;Ze0xsEeJ-$K>⦫ſa%S'_;Ls܄4iDVV9UFuxw9\;Wxѩ .K`qM֊pXjlC4YXИ!գ,+1+ɴETaO69(pg QiUf$K#q҇Q1"8QѯȒZNWB -[8)Vs,x&U&#MKZx!\oi5ċ×LPJ qhaGZVhڪwlE5PJ9iN0$IVMXS n0۷Wۑ;Q\i6{'3(Ƥ ǬiV{+]|[,.\2HuSؑdoPƔ'gy~2Y:kvs`"j]*B;gYYߞ((sdqR;ֺzb&9"47h,5Z(Y^TTI%rc#Q 8Ï(Ш}cKq B 2 W (yC)7|E=)*W[u#5aVԹ4|\BcAdnM?6W\wb&cv='+jUp͂ZrN"a<=cEq\rybo5W|UU廆}7] xk lJ vywq+.z1$L&Sl95!7]:ZuU+LtKM黜l+Xfhtl@D$'<쯲Iċar{j3M3-N.I`UBf^r BhH |~H̨cf$\zYސ-/'J&^F$ew|H,lhD e.RNѢҬFR V늖(WC.GؐmnЭ̬~, &x/7 ʐmpNfQDX2P0jOMOQ .tέ+eGc@;âkGjNC#OIFO &< L5#dr8K2 C^h,%DK6Nj*~Aδ sfi8r.Or o/#}𸿯~"SLҧ+;T(-˫̵Blx(blB$ oq.veQ4pl&0j}  "/Aj Kz )M%Qƨl- /!я+P=s IKjx(FJC@Ǟ obt8ϸ*nʵt 1{$OLrY%L8d* nbdoR2Tu"5%K^2h(5Zh*N1Ai*nK[4bl28%4EE*#.,q|3[![N%,I,R/O+y[$"ZJ1vc>.,biŊ>F/6 lVp  _I*Hpr{/'F)pnBAB7 0r B.wV/U>)CT'z-kz$Xnzv>CdM ud[?Rg0% KnD&mq -Od 1dgmKbgvJ5 lإ"w']s3Ʉ m6jL'-ؠ|H2Q~)t&_w\ʂbMnuDk`SQc,\N%3g֩Eq+T.Ao!N@EgYQB⢌PQcYU`e7at; x̘Ȝm'! GqmcrbVf>eNlzk;IUT4CYL ,_ m3)ɆuL_|pZ˚=Hr+׆ew5gxVEP 8aNrXFΈیi4$$_&ȃ^nI3wm %MƠ/uBO.GeԠr2Aiׇ(q5%=R`\$3`SY$%VD5~3*HŃ0L7 ^ՍLGb{S#5LĶ-2wEJ5\G0jc*s0DocWhd89h)d계>Bm35*-Q0(tz .+ '$sZJޮ1GYWVVe=%l-|$nҦgS;us'AVwplnW0y$w#\H΁0{Bj_RkO%<וc HW[n!2]ʾejXH~^б)oycB@C1!JT?`PzjyaX}`'$ DqnEmFq‹{䅤uxOdc$ @T{e关6ApK݂EP4գQ9cOY,Jo5E\ .:˶/ʞ*? EDQXjœO] 0F>4)վ7v]d'z[Kqf,N=Ԋ;(S:+iYG(m6feX/Q\&xהzA9,M䳿P8pq&? )D&Mu˓2l;D3 cFZ(t6DŽV[O@V&j>aryoCh/s#){Og<\ys| {"(:^|A*qxC9:Q(8=(N5sxp]qON84[\4yM1nQta%,H+"&d#BX6,xb~04`S^RH˺Lp!zL{WY9gNdG0#/u9Ee6Qgdd76#EdtsY\rz<}GI&ҔwE5z6urLVQ%eƜw0px IY)œ0Pe-= pfޯEwķg*ڟdX[oe|cah7㟄~vL| ;B`8L@PX<*b )$Q ?ܾOJ#pd@㳨\ɥЉmFO\dZu)#AYL2_YS&4JrE2&}mM*]YG;-*0C)EIpYh+(V,wexJ4JKh=A`URgNvu >VԮG$P؜w'Uw"ɫȤfiͣ~VUߣvBt'-ϰ *O)4':"2P>2$4RkɶBkZΉi;0󄮴-#<3\4C+̡ =n}2㈵El%Ib_ZtFI q{Uvɷ3s!7R%ZBY(#KI#x6NչUC6&OFUNVCgQq}v벫W?5=.oj.W b]F·=wR'4uU٠1EV/VS>HIg5)_AhQ#<3rUEry+kn)a^$OJ[.9JSܦIUOyU Ţ\% Mh/sUʎr@C"r*r,qtR*j`tZV! 9gHc9LU& R_$;g`S\"s"ZI9x[gɧI֛eDȲ[FmϛLՊ4/!t-"ľIQ0.75p`5|Hp"> %e+`3IMA*l-:2HeEw^MЎS蕱h!$$\"_Nꧪ> w&XL?*~R_Vʑx]b[hڞYP"ɛFE^%(Ԍ\U7DQPgq=ױ#w ,FbV˯25#DYJM8ns蒓, RGm:JoB-q 65B މi}T. P*eŽ/4Q䋳Go(m%=F%5,83cW=ȧw a½Wl3O(ҬB2&$W;9gqsZesNj})W-~*3?)E-x)ƘBZkͮcC#vuJU*k[5V\#&*֢$g ^dlRi7FMVκ5wW+խe'plz8ק/S&]&CQkY(S)FH q[đ̅% /7ee\Z(D<]Zf_""PNCNNѽ UecN_m>e3T)|n΅޷N>^0[pM@ƅ:ZC.n:ɼ~KJAm^gk2e{C(]^iT޺UTd+NY"{V-6xvy|18JafrvtzW7fG21K_%`ljKYeFPW t[ 4ˌZ<( Zɚ{  0˨K+5|w#qBB=9?>,ϰ,N͜,V웓/nOИ, 8!e\z7y@!j2YŠP#s*Y1rcSѨbFñ iDb2jA;#q4Ө"% "J\:D/|jk8B|h(f8"4j[Gԓ()l AfIɾ܎Ü CG&ZIj@Z'F!{:(x=: T<~\Y asܹ 8,k "Q85$dA}&#:;ډ#h,i#X).i7i2Pɓ[B=39<2RDF.8sZLP B%"Û&)JKt_" h2vGչ+Ԯ[Eշ]& i;вEC)(zKKB6QjS1?Za9Ey< @?1C%*bjbi0J +p*,1CZۤAézGEK,r]1>CdH{W#D02l9pN0Ka @ ( *?+ HPVALm=+ M:j7Z4!L:- 25 SM :CAbi̘=ԻJy7D:r>0+Kzk(1iTuR']OY$0Lmҁ0' [>!`峲a ZV#85N 4Ԫ#>ܦ .Sy#ɱLB$yaoً<;¼o;#09X";`Hʄ!\( 23P*Ô ~[7J*sǺ\&N^cZW;:Ŗ$&hb]Qɾ0SwcW[]LILE>rZpb@$6^&8YPl،"'ZjMI=AfϮFrҷ 3^))բTX>!S;a@R+eS$2e˰F~2HEaS笊=Q9YÝ3Lo1hh-"7rc2aS:b$ TX!jN7u&{_*z9 6FCfcM,Ͳ8DQ-'ԤI^F\fʿa$Z&JlR.5DA\8|~sm('Z0NcMbO+q +Jʜm7lSq^Ck AB=t2bV%o>OO:W<SWX)϶Yr7}9)6%DHMS7h޲2E 7}esӄ\jeBl$T9l$3l.f;ύL&2ԱJW 1J* I( Jj pLG#1\FHrKK']鮨!FT!;mk̈淋' 6{|j`^-l8(6/ZoiY˃Jp_NY}Nպj[&Fl=6]:I__?3ǟ?9gʷɮA`3?h(BD"0-H # eRF+ a9\f# F"xnCТ ,R$CshP7U!RZf3 >5HLu v3>9_@R\*QZff*[BXZ3/tW]cy҃iuBi1+q3gxNf1>kw*=Q2exj8X,_gB틓Sq6:'kp!E%w-R? +3ȳѤѴO#66"R<̋ 秭a:J1sZ: 8b.44-;BJ(CĈ8Qz))3[ºJmjB o+Y"oKJPF0ԳTĶo濬zL 9j6ߠԮCM̺ȩr2,v-Z1$pB(JH[}B:L; V qDSV! \5*@ѶzR)Ik2AC]=0 -%m"k,N[$il:lrZLݾINЬL.3)u *S 2IBQ1'2;U6a0s̝O|~< xLp* $;VcRO 8Cd 3$F[h 8ep,^ƥ.JV.D/3.қt7 EC ºERo2zIpo|uXp.+)l>};ΆSJ1*V!5lzgKNop꣒sEFϿp9iLFW*7#+F4z.K"NGlMőH`+e!38Nr~ 0\7t tɬ%Ҁ!FEC^M6f˙L&TJÈ=a_u/Է[azȰ,u c;]5le\荂S6 ;xR*=ȍk4Lja۞IbNnZ\DȧSr-PȂ['d3GP"Ά]$ÓMS &0"RKS6+4uu LYFHE`)d_>~I: Fdrhŗh5b|B'AB C!-'`Ms;}]2R@3T9SD,J (97XCSqHbl 0$i+fjf'5R">$Īy1-!0d&4(Pes$~Gs'sUZh_B<\*0 K,+m)Or(GyĴ9kY1r1A~Uwf/0'֫q1#2•Dlt\5r)gpHd^}_U=s@橰VqqnxWxk $@,yA(:%6v= Ūwkft)+q%QY`֒Q%ʡ\c,o:c)0y-HvaraKKۚҨ㞼zB8)YDQ6ڵ BANҼٺƐt[vpͼDدI&Yo/Emֱz<0/3?C76t4:kZ6R9of6]Rk# UV4[_)=d%*]'d;/pI@R͸_:cv~eH/g4/k+Q3?n7Y&5F;Mm񞼒GބIHɩ:i[+Dάo9 KslѓG2xnl pJ*,RMm."%[pn•/Dj)exjk^Vb"rܗ.h#'dbHhmgԞD6,زk0xeÇHpT랛kp-`m&):Eҩ.hӌ:'V"A(t0&;evѥE ϜpCbB:sjĸjjÞE')JCB"x-[L;0\ ~0F0Ό"-MnqrQ9:I.OƔgRSFk֮/ NrmhNbl!@<0UOLlXo}GX{4h X8n(/6G1qN}ŔBZ@"ԑ#]!rLp7nhkCBʎI J2鄖joRqh(V'D1bGSc1fa&"i}RT:' ((ܘ61.Bhdd.筪 7bL\+iR_>%;82ᆐg*޻0jBT򐵄⮏ RoK:JZ?4"dPNU BGDO~. _:g7g̽rpʮ'$Ă:svAhq3BltH:쎼p ~n&ԊnJr]&ﶢ|X1jNOy?djd"P.q5TL\yapIX{.QoI0(,SF"SS8Dp$G+=KrPX:ʴh im-q/D D.NĤ42$0 &4=.{#PI(lӈʥIInB:"1U|A=PX(Cx iknJOِ[$Τ(E4)ФR3j٣d.zU 2t)+*CsN%D0H.𤿫'TLJ6(In uqWBv-Xʍc&-O),16k=*4.Cxi.Ug]R%e23fk5(:;w7zE說+~X#r?OMTL;[sRMTiDYxK,|&5S'Nd L6Ns~xZj4W }*Nlȭ6DBRco)E6L{j y*NL,6c qTdvUbqq'pZPKBxJ'grȰw$j8o0҅Dd^ꇫOHy&'\bYe4*ok7SCdI BaQxLE_%౸v'd B@RY_m?M" K$ $PRdp*?n%$ʤꌅT!,B)Da;E(֫uhԳ_V1ɪ2D\ĭu~Ve,Lٓiyn SI])vr͠X'ŊFa Hgs.27-ǴY uRw1{ iGvFfWKzէ4%#48vУ*;ƣþ:: [­Ziԡ>cR4ۈJ/вʛ0\+l5⾼;⸳M#R۪鋥-KΪ *Hд#CTK+=jB!0;I<#H[A**z3K ̂/t%jȃoFۤ*=:RcM<<әekLFv5re^A8;g6^JDO mBr/?G ) ]V}A{<de2 &=wkRtU`t- ֶ}'<̫,xQ<>'t\≱T+SZZ_]}apMڦXni[V])z \`tft*Sq[J6r*36_a: z[jqA943Պw sLћ5*оjk.EJZ=?6h- ßP)$>G!0wG(ÔK?5K;y6r(l~yސQ=#^p#HQ;8ľsk&r7kPRIw,B.M&b9zm5x l긤A8 ;fΡKIj|s6t]RD=\Fc,_홼Mny55 $`ʹ;ԍĀu`jDK rts^Շ 㝳轵+a,I!)δ4Hޓv2Hp |q ZDR{%wQ#ml\?T#$wrH"F̜d.3N*|FԖw.3GWU'YsEQubrsOfőȸ ̦w|3)ؘzi 3춆ul:-$Z{rGBE눪R he=W욀 5(Iž[ıL"tI<"1NgQL>QIR$we)33aPǖߌ{2+w/Ye{ XV&@ 6Y lMSJ)eh|륰MDUaEsO+P}1~iig=%Mt B<|^:e@1_O󾽤FgIpX1$2i1*\qFyE H t@ hܹV~<31O}&tTL,2՞6V)1ȋ#^т) |qq)jS4ל ߶<)SkamItK6OXҎj+~]Wze[zdi}E<Us= 'eRDjs=%*ivdzwNZvnjʐĝ%mDƵǁ-l#S$ctH*jLk2F{O{_^ѫu=Io[Nω7E!a;v ɼ{Y8D!9(6e-31sI'." )Ys@-yɝ%)7% SM4Ңc3Tf1Kc(ڛ$:HrC*t(鯨ʽ5y2BJO 0BE9L!U ;/㌿Z&z*93SWl30s>2!&&x4d3Ŵ1Hyѷ(RÊ Z(d$j=ӵ#8I5s,g-GiZI(>d+H0=;<`_49 i'E"$y*Bǂ ʥ+ۮ:JJ܈7õJ*Xߧ", /$ *.Ժ!uHK8) \B1c+P3H-Kנ@CɎ lcYˑ7)$¡!r㽗[T$c HPcKC<"붙gB-." : =#ASb;󫗚PSA249lؚGCG{sa%18T83YQC)2@) 4|N &,?@ >\Gܴ+l**SO Kj]wmK<ᨲ>s JN4$!l4 ˱$Aɝ-# $Eu.y3ZۚC!$>=isO"/Sⷫ )YŢSտ-ߊ0 {KGQ9 з.ݦrcSɴЦ*T,v9sJlS 7F;F/@QN&4)>TjZ,I*D;Y.7t32=S8:9b#$F2MjqUørtbYɅ.r\1ӼƖ$Oܰzc*uT":TGj qKcKQ|qW&#r RUAU'%MLa>k>W9S5-*iC%َnd1S)6$:  !.aչBt.ݠX8m1&xқ̫7- .Bi%6\w}3:R΄]LƮ%hjVēmJ2>40]>]N$/K U5nL }e04HR{F"1R I[4(W(*@SUV%~Yӣ-8uS,}Q!$mOB)?T)]{K jA;5:;wcmc"ȹ?/PYM-lؚg-N$FeI#x?Z$*Zz3*=_'LI8A 2U|;T߼[M_0E?#noE7PCEt%=K`b&EDibY=P*<$:[aU*9ɓaͣ>aceT. Zz Q 9C@E>wTɈP:eeEgHOõѣK߿N.^V<14~6ٚg1r0Ɇ6{’&YbF#9~yě18;]x! #Y-F -M $kV풲)APvk&¶hՙ$E&$N*06t !J%8P\IB9>ż2Tn!%=Y# $ M)C]WD:I;T=\}y>wo=1@z2WmObd ~4Jm @*Nz_IkL7p]jZ[29(rjڲPmv7P#{l)47uQ/xEk77G"R)\5\!.rJ=ߊ.>$]62, ^~ Ǭ s!VH͹Ijq*贴ʥG26չJgBfH Cc_,Ta6Q026kD?p+쇻۷jQԴX6ʄKnj3W, oBͮ STUu**;g29O3hJ_q舀   phd(шt1 H Qhe,j9"RlvMxܞ"At)5O5ŀ *<"=*`S3,Rm<dAתvkS춪Mk2}RTi>h[ …hUρLP)ZTl8ܦkUL8ip-Z|ajG{Viy`wܨ>gӯ{o_wy/L#u)\\[.:Z?l:7Xയ܃9,B=:j?J㲗 9iRB&P*|18.G R3'.@3mKI =H.뜆)B.p5+ɻ = EOӴ3[+o1;Eiٮrصkr> TE]ʹN# J9RQ4S,Er(eNj7Ȕx4S'ZHD,z/ccb*=+ -ƙt.q@>J!(T;T泰D͑)/ӓifZ\̊%M+e 5#^HǮ+7aDZvxvM#.`)P죖5fkkm/'J~{?B3LC2USSe46W 畼2#'+4% W9.\_$#~S͆/60vd* Gt"{GNgU,;9(ɍ V8t 36 7*O\R8.zҷ[7exܽ u~_ܯN@ 9 m㖫CxDN&(@CΘ;}vj& 3bu qJ=m}eN#n7fFKKiř8J(Lᬅ̂k)(#KњP49v0]B-4mIjM<镳HI(5Fpo"J_!P"}3 AAF,1ዤ s7aD)ܛQ=WFS$=D~ K`M 7DBqNsƆ4+z+DTvi(|dX f!u{H? #HmvBLN d[s=MJs4bᛧWΛMdfZ>7R3 l=OJRqt,d='QU:2"Y28g4Tpf1KD /SCN-бZ#"+GY׃eh;v@VWZEDja%7!+=wWK.rP,&"4Y7䖡bB"0j:+ZWK*Yr%b,mDGx!T(H5yo޷_]f.lԷ>l)I}Ҭ1 6uQb_bjH'}Ÿ1RkfJ*U qSš=L8 4AtnR ԔDX4W,MG$3{\/ TxαlhŹRzd]t\&c9d8E&Y?Ub0Lx Hф?*Rj tF cX '"rkԑQ-sILLu_. '|v*FL>-zwts\q@hGbeک^$s=QN0)Y)z z*oYTECO.cJQs#~2z?"'i*:gXr@M[sVHbGNb:OȮ^FvcCd{#|F*Rm/`ϦJ.0mEBdGG/NCF*TNƕ,4P=Όn$Pc2NM8 - Fb $8,֝ &|Њ5/j&ۈ|ijl)c8*NȎ wJ HЄɌpf+{\?BdI:1u 2,,xzH΃/"N v(̨]6(i娑e- vS"oOm ^ v(4*&UE dHnTFȸ{\ͅE(}Nd ʮҙrp+$dЎc-P~YHNvBĒΐ4i. %n6-,lpʠ\)b Ǟ|zu禷CH F20|-Ү#Ēf.ͺ7gO"5qZn/IGrX0,!!&`lvND['hC\Rҋ p  *ͨ /NۂpN &}:0pd Rd1 &K vkȪlb7zs,BP3 ȓ0(6˫NCP)2*mH%T/ַKK1(S䪬 Qcrڒ$F,ebe~Je gEMM,1nȠ]kL4)Cœ;gp-HÀPtffbrLjȻ?6y )Fϗ+Qsk$t#[40_1:^E|TG> ggseD&>O-_+e>lez$2I&6 d{J|Ps $G Je)l+l>ިƐڢ*GAԤ+NNT,O=f?4xg0쬙F碪%ӔRl K:Dȴ1<T <N1T(Cx(Lb ̦#FqoLC{=7GgKBEha3J|x.beOB.ԑ"@ͫ+HqF-Y->L YT=/0C,ds@*vMŶybi3+S|MFm U~B)E^4|P/^oam$@IUp$ &IR!g "ȦMh>sw&bgoT""uu4}6x?ifHt.b \ ϭn4=S8$I8nH=?܀cY+wS|0ӴJc^[:̞3Pi҈yHTcޞ̼f=nˆz|jf2j5fTE& Iu[@8(o$ktnQP\i6dZcu:ѺNG9jWeS8K-DiY]"θn2DJJe%Lx j-gQƗs+w>B͓7 oDN3R`՜%ǀ8ŌxɌ͌э8Սxٍݍ8x鎸8x9y 9y!9%y)-195y9=A9EyIϋuUyY]a9eyimq9uyy}9yQ99y9y9śD r  * x b j(1 2 =S n &i䄇s H ހ wadl9 FRjg 0R EjDMGBackground@2x.pngtiffutil v2872016:05:28 22:05:89 DMGBackground@2x.png Pixelmator 3.0 2016-05-28T22:05:89 HLinomntrRGB XYZ  1acspMSFTIEC sRGB-HP cprtP3desclwtptbkptrXYZgXYZ,bXYZ@dmndTpdmddvuedLview$lumimeas $tech0 rTRC< gTRC< bTRC< textCopyright (c) 1998 Hewlett-Packard CompanydescsRGB IEC61966-2.1sRGB IEC61966-2.1XYZ QXYZ XYZ o8XYZ bXYZ $descIEC http://www.iec.chIEC http://www.iec.chdesc.IEC 61966-2.1 Default RGB colour space - sRGB.IEC 61966-2.1 Default RGB colour space - sRGBdesc,Reference Viewing Condition in IEC61966-2.1,Reference Viewing Condition in IEC61966-2.1view_. \XYZ L VPWmeassig CRT curv #(-27;@EJOTY^chmrw| %+28>ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)KmMilkyTracker-1.02.00/resources/packaging/osx/DMGBackground@2x.png000066400000000000000000024075701324432207300245300ustar00rootroot00000000000000PNG  IHDRDfsRGB pHYs  %iTXtXML:com.adobe.xmp 1 5 72 1 72 1024 1 580 2016-05-28T22:05:89 Pixelmator 3.0 =@IDATxK$ҕap3a.:Pdf]-3DdV*O?T S*O?돿?NEW>}1)+"ω i7yqfAp]9ezuaJh8!Օ.'J"2_s>g2AsslbΊa88'Ù2{cR䖹SfB of/[,#_㘦M]LUnZ#`ecX\_ } f0X#@23Dk'dB2] d]缥LҁXSGex\ǓY/ˡH@@ UJ%BnCk̜g$L?uXOba,!$̝lS,j=4OJB/zdC OyxqY!c|i2\4h 0r!ȂLg" QOOavgqF\w•NIyj&mP6/Jʐ1_ﬖ[Vb {-h&=Z_OIZsA'Pd4ט*~eEc%0 | gSW w<ٜ^$ӱ0EY~k3l1c^u.Infp됇 &=DC2FG%,O@QⰕo_26NH8kipD˨2ݱZ ?OFwl@煞3ex|1u$QC FK-$S^JO4fSY+;#q:Z@@V͒Ɛq%5X#5a5̡#M}kI|\|EYfO7܏EK2z/M4e%^plfAjZWDR r>/'`'$b;}Srw"QZ?~q~~2/BEw"Nug0 tS!H >]^cǺ|* R&ן&_.+![F?W+cxhKJ$U 3Kޯ!QRYjUwy_ ^+K \Q]jeCNYMR1)%J1fg}g&AK̳:qUh9xjHS-J #k2*d@Dd[Ed/$3Ca} ~)r \T-EYNmr= s$&^_zƺ9:h(E9eKD_i8Qk#"o >*<[1GNuTLA1 HWUcޫW=vcqVdb5 MŔa]6>R_cr2}Ձcu]$l%hKi7bO/b Jx$ Z\m4^,'Y1oFkc6xt{ `SV>g NVIRƩ{+;?lU/cT3S9pNŚn\6 QsA&lMѺy C"( ^${^\{Rii5Ra.v\qXWfKFhGI֌ b_όDH3V`et-(8#fu8AI 4k,"tZ[s/ q6b/VXpۭ?fz5ӭWH.4ulԪ &Q[٫Q6W!,dUVg#Tfn,ڮrⲋQ.l{N,6ESb\NM+ ]XxYvV0RWt\0AV+5`T :ޢH-[=| p;fL&1817<=~B.JBc̄ W|MڂGᐮtiW/J'ZL*)KTGS&о|vŢǿڇx1jHF24CSQ[@oULY{^Gy,1QVӥFz՗r9n12T GM5[ʳՔ+Vn[+ y4ݚ;F]Ɩe$اb%Ŀ e}ujO׈()jNl- p[-|Sl#\eep_M.NFC)u/oJr@zI"MO B-óϪᆰL%%eHq}g (t$lp Sܔb0a Qc) CE8gIU!Ӛ^EPNCڗaw 0{0,ov,R*-R*z>ERՑ&)\gO(9\MYwSgɫ٤H<.8;}(0~'`%T~__ 돵!r~ ._@9BPY 'G&j>ZaJ@7I8](=~B Fu wxr*40yL @TYX6!& gQ0-y4?@qqMGxQ|{2Bd3!G=r)dwV}i03  tW^j4~uޤyzR$_ /::^+I~X[** )q{x[ C((4n/ ]zEɳ"4N+>㫱eL,a"@D"޵Ȑ.K(y\+*(Yl|Fyf곌5}xHrt` EHSDotEeA >FZT#τZo8{(jS:P q")Q<%>*G#Kwzi `r3,dIaaW*K ,t{!Z̲HiabfeI 7S0+gj}⩏odp&W[0?pnx :jYNp^ۋ*>ױ<\7dk{ d0!.p$l a=d1ś5ۣ '6"5LR+sa\&49a򫵼4SΤF"ɀ9@džञ[ysFnDL؄a@{}ҖMfek {Il`o,5ŞV<G,蚠(g$lףF"b_bE2 (<( T k3Rsu&BҺ$,vF=PTU EX U_]w 9}#0t3yOxߟ-=\N s. U?@&Eu}kS `XgTN @W L[ 2@S So)`ejvn&ee|s7xo1Bq"Y |.J+n#Z,' Guzz 9%;R|ͬ d wrew؀] dl bUu+Vh;y^Y,`x_N[ JY^7,=R>FEro .!$Ѫ&cKi"gHuUݶb- 5+xD*T{Tnt]Io@y/Az;.NA(lB4qgΊ+#V>&< ~='.d6Gb,!tr? E21MA:*=uxi%'QVMx@$l@9kyw\jU RI<8]GH,9 5M%6sr(k6TR&ٽdJNu?ŀI' 8vlpMaߞw/;d+-ӟ8y-Dž.bW{,̱G4&-48),ɧN(Lb,\ؾ;cr. c y[ly.ڪAFnCc-,Lƨ޲,% EW7ËiԒabޯ|oG4vnၔT~EgcXeD&l񕘥 ^37m >0'| x@-ςsd8ypmff(Խ؎frnX7W_!ss,:8&JBhx>BBK%}cf2Ɂ=7{wnV9xC P;|~7ȺE7şVLYT]9T&cz~ĴILXJvalFFFF !omtVZ̒Ƚ{[<3Gr)ө/A2|Gs!ssƸV!~9 fd╽ät+3 d Y<[VеTc\W|]E<91Lg̓CmuMأQMqۏ(}93Em tRnv\UIyfur$+"AءxOQr`*eFo(ªln$RZ߂Ȩ׏.uPZg2kf\\H]`N\&ڢ_4$E v˥4F$($I3ax 9Čb'Ge埦"]Ivsfu[rzkLD/u$ a/A 'N0QUv5. aٯX,y2Յ noVW /TI<]&W3YOM>DG EknjeT0HrN.#Փ;y})f*TV"WsD5PG[LW_$&[ @`ؽmo?sAf?˖<~5t*Yl0Y(9{5U#ۭ8^))ŒK^M3Nesz[iڱG.V"M<]RcGz2/Ľ-΀xqYC~S!n8Cɬ4'>SOA6Lqd7kMr!1"`xȥQ*]2ߧ|rc64d!vȩ@atZضSH S -ؕX|$,1P̓C EY'qǢc2]u4H {4NUXҬ7$gnُC뀎2=re4.j4|U6ej""\ D- >8YV'ף@{U$ű;;ɭG LacPn+HOs9j~8H% =sXU85~=aπit%(eLp\>/g%*%[w3ݡj0 cc%m>fw@產L cxv=?͐ de弊'za9U{Ir%[қi\“}8Ge)5Fzyi9 9[E'ŃF_ l.$_}mU"qiyQF?e`{^D^Âv+$ {T9j1&yC8ܠX98+_RI+_q' :z+Xg6;]Pǁqۣc9{ +JԮɮk64FT9_@S L1mmr+bIlQu.H AtABsdBlX@ao@T#LEkyDy^\r4Y59\CBB]`^:/F O|vtYʆ(FܦCH0}H{ bX{ 7 a6"z$1H\|*Y2=` +凿pи` okTj0Z[ ofEC/n>Շ(Mq;F^ AE|əJ8;6Vs+˓R}cyEß"*Dʱd4J+ .i5[:#)μ~1(gx͐}e1"d &;\ &޳4:e'a:|JIpZx {L~۾ 9sri2>ee  I_^Fbo5;ׯ$ J>2\}cܡ *!m3^ 11 $ߎGE#Uxp_ruI<+;r[ 1ֳnjsO ;DY0Z\9: (, NhYv)Rӱչۉ2D%tkɦ[~]؍,ÂZsOBc8t_]̐74w@ܲ^g ,/6yhD8 iX[229CBܑM6:-*67'@^ԫS6йi7RbO3]J5Z~#U`8l}o-׊,(sg؉:uƑmҤYB vΡ<˃[3*'-q{}f z..})ڱo{$dn[Z+B^,Z08 XVt]:L#3=;M5o>g>B*U`@uT`#ʆv<$6ѕ{tQDġS?|&5L}ǯګFbH7p뇔cǾOsqWHs6ng03a5uinQWo@X6*Tw#Ot+ _/ur_:jaQ }s0EY=-_:N*'jI\X{2kY<ȶu()Z~a,uz@VVvmy}5; M gsCZm! jIִ ~B6 Д(rX{EP?BVq*}}!YR3,;si0oVL0z%}f**7#8d͐ }vB;4yP8#>K*H NM7 иXB>CQ'YơxCBiWkPf!,Ύ1,#c1JщWujmG6t&ehE[j7b{-$'b7Zd2|Qcuq5AР+식0xt\>?5Rޔ3Y^%Z\!8OrN9lx%,y3\v-bmX1_C)sUHW .K=~վx ^ĔNq\0UZC2c^W Tá!9p G;Y&\/ކb[;TaL͉۠(R8թ :P[ـoN{=3#L\{,]jlSL2ۺ:+|iMB]Iu?.]gD^k-6~t#\]i"&&VTnn:E.r"2as(o.aDlIOӦ1xm昿s#HG:5Q=-{p* Y9%0tos-M"P-yt;zAa>ц2__CC* EmdyU>boy6j]94q%rS*1a4/煛O\0YW־ؽ'C5 ͱ A:3n^ pZxN/`me~n>N^Ia~HUg=z=)NU(p Uikd ΎTRr0:k-nn0^->^wշ. +/JM<fٍZc{$L˼$sݭ߱CmdOi"+IlA/,g&?cLa/5BtUL?*׼]`f'ޅb p6-V>#W}XS%va啮qfjQ keNjATii&l–㭒CLwTl >{ n]9,8ЖG'F(NF'>&Z ?ym<6Z"{.BzF G|VT[EN+QIsum!}EYmp[A#,hXe;"Ý[bAwcgl/ZsSE).nll*(~o-j=dFvw:`7n[@UFBO:7ʷ,9.ǽ- }SM>t:HN`CMMm$+ l-eX&xpZ#kv_T! Ha.QVte~Xba t5ѻU͗ O9bs =2m& m2X;X}/vTm S*,g|Յjw`駙ϺYv|-}̳cvzMgR~;NBm{ݕEfY/VFC/ԛ|B$F]B|rW#8* Yy\:  PLhK,[d?҉8ASqp1\I}s>AU@r04^F`'3!H:28;r06.M\?.Kٱb  ? } RY.@>3Y4le"@]j:S@MzUIk`f38)幝zP?74vWQbLQ^N&^.;WK QM+>P0뿀n9is `5h%EQ=I H!J~؎B̨OgDG=-K( }}e+]>(M)O emgup@XBl}nsJTbPRh59TvZ*-(`ꇄiLn'5RY RfӎYMEU6dM׬qBfl%Թ,":RW rPO; 怤L.h_ÄKsU>n'yMnRY,^C~,)Cxz)3/Zڛ(N>,|d5izvxuDC;-Rkk"V%sl#;/)"K _[b$5kB\t}z6 De܁9ieC0Ch "^.5"Čf$`uxj\|( clS,6'R3@Uύ2Nb/&4afؒ7g7i1Ɠ^ Èx:<+NjR*y\mFM:ԛd[mX*Q*㜀iM-͵3Vz(BV*6IY~'S\̥Mޣ*(rz4U\&*[0NL47;Mе/' (ճ"qmoYTxd:.Rʼn'T$DEfօ>Qjd6o." 8^% jPjpYg7pGoy2F+Hds&;b*,58?[, l$WƨgQ:BD66@x!,\33 A.ix߱8V4/*RKpT/jsRAVT!f Ew^a`\:IzX2 V AP PV|k,Nz y8FY C_j70s̺ٺHΈ3YܩԐjGʲv{8 "+&BP+Ks_29u-Lbmbm"`Vkz}|SW,\>vXI.8Jj,^&R\/^dxWYS]8PuvY(^QQ$-qX2Yۄ f.Jx}Z;):EIDٱ@ |72 #s-ܒJ3jG~H& ŁsHY&?*e.&ⶏMW=f9l]Tq)^r#IUavN#U|ޝ`q6!5j<]xAsS+.W0ӞKӔf7+e3'*.f8Q7%ڊys_^g(V]Ww1G F7sJ@.@:*)t$Vm$1_r# , @(΀ɣBcOG9ʉʘFZg8caiJP}G+r,P vbB G,+*1jܛ8>Im#2ͅ1_ buOK hcf%݁llCZ]ʯB 9]x |zLiF.#^Vo C&{ZEzE{)?^z"YjfV03$6B(Bz$9n& ͝z"C͠Hx/ç~"P@wj#<̊7 r)&?")|fݠ…\vB$|unwEum u$)΢2$mndAY'CGo9b4vm&%֭CNp;:[.x+r:|%L|urez,'jp4>&:BȽ'8\*rޥM:.rY-/qf|Fb]l~`ss97gT%k>C"XpfhbV}VT ;MT_Wji.ֿSùҥ\D^lg**rMAqS,Y` l梗G[m qa"Kg]JۑGǂaeH7T&3Jo?Z tȾSren5p&yTyo;"muk{:+JםS4Py z@жDޜ`c&]^ՁC7ijsKзL b^qQ6S,Oމ]Xg$6 iK2OY#)62[=&|u' aO8 &OvB\]MJ{ } Rb?\oB(~VRxKfr&cxGxc78͛z딃r]1 nxx+#<;Mv3v, W) Ut3ni62_rٍjykj Hr}nD(W%)_eYpfXTK2J> .rW"\k/ !+`B n("NN/è!>ԙ7^h(2V&* T2{vLN 0?+s`Lvk|6Ь ;V'WsIyVݭՀ Jr\8#;wa^ dJp+Q6F.{ֱʀ*?~'x9 )yumYHJ 倡- 5: u1ZM=G(q,T"r.fC ~YFXmKgiMҔ CKS@it,{<8EٱE&ҩ)F5MlGbFHzEgs^p6a[őNxY?l{c V$<0Lg!S b-X : ",| 7@IDAT~`Đf\|XiZmLy_~Ë.u!xN߀$ʢϐ0<)_) { it3*:yͼ1`oIxiS(F 2UjUAV<}c={Z>,)*'xV"f`"gPUָ@d {nCCU?B63H%|Ӳ!b]@+M6xAcG ؛{/Y.|O51XvJ|L΢V <ωZ=;Ceط׹_E5NXMBi [:WMLgTt2TK G#*$1`eO:у2U#5b "(]S8nhY:d7% MUR2]/+͏$.Aૢkop_%ANp]~F4AiIXRNMىWM(>jRZYĦ1²ş^}&Sja&f0OEc|R,-y"8fA%VXU=y?RMT|ar,J) 4W!9m]4uT UnsDuAh;Ã[6ȢjD:Vr wZF{?ԝŵ4N n1' +;bʔ@`7)W{۰r]s?_f(}_*ןIE,ycl{8ӆG9l[F+a16Ytfy|P2٧kM*qTKQ_^cn.@bF2n8#^ظgP`@s 9f q}IP0#J je1^fgK9O*[Qu`DE;JTjR.6lu;2% "ʀx!_7kaiKmug~2ZEf|L(36Ƞ.QM(Ufazp$U78Ի2o栴, RmL$C.x1_; ="=tQ^WKgV+Z`EڽI/nLC4+ |A: P#GxdaheՋBn+ B1hH8F«Rl>4BH]@i O"X gpD DGTqYΣPcY+/.;z#K~wVU\ڝd,MxŹ6(bR /72P/?17P2N`o̚F#CY+ $=i7h$x1aÆu=i_EV %5~g{n޼N7ނ8-e xIRPrǶU F^`f oQ<г6%9!Q8wX,%!m>aj pN5634ER|$|1.Pڈ "87%(cl/- !/o׀2ڐq 7fqD2/buAsQa]2\h9C#+X!pp\6"i$!t[ ʋjLBЁEo ' q.ҥG'$qx602٪鱾4?KH7vN4j[-842+E%rVrj3&v9xR (֩ j(&"AJn6].:.5Ŏx9gDLc<Hi,RJpL2&d+B\Mc6@j$Cn,O%g-О.g{Y"qYs3Km4qX.~e񤻢qAd vVj8Cz;_H^f`?;I6`ƭ0{E%4Lk xlRM)bl\n*,%EҬF [8fV"UXjPb `AdU2hT$wVk l޽']!9XE2A'Ja6Z?K OȉdĘBKZ y5 jMX羰+P=XJQWI3L~mۻ0`OUypE|xsviu՚6ՎM!پ)d QeLӽWH4j+ YTܶV *hs\VaW}V aҽI]nsΥkhy*bbه0_e3ƥ с_> o2\Q cČt2 /t썑,v\9Oj){)1jܒc3.\z(y0/aΗ$L! 7r2 8Rz-қ Ԭmxxn(B)R~q[b20#<~[X9%2%RJ`#*,36\u+,1M²n9P ÿy+Pވ0݇7`&.rSs%ìMfI 2ft'!%/fCN zuFp G$p6Lw[z1\'BQCxs4'?u/~W4\H+j<>L"Ӿ{!Vx©#,<8n.Kj&aB?Kh. k'![ <:|vCP,wp$ Nh}a& mQSIo@j 1Bos{)AYbiua.Vp[<;V[ "DK| ԼD=zsKb/_3JGb/t8y{{f qA2NzZ(ِ}Fj==xMmw1k2'ҊyֶU"tCG@c']> 8&7"@*mu~4!y] 1%-(˦!y#c>SV !O ݀~R *No.Dj ij3ן5OT@\ѩ vqc&lUX #._Y2.s` ~at:lEuR]La' bY\!7ǹM5,rLuӞS˫!rE"f7%G6d(G ^1\9:1:+_aB S [R-D6W ,UO)N^ [ : Y>и% 1=FV>avx I'‹NeR̡z.8O3rc`ΤXz2)~CwԈ_aE֩ ApD\qἭFR帜^)@Z:!:]mD ȅ;\kƗ}p3`;o4,ܓ􏥵Bl)J8AVAS0ݮ4 2w 4xZh⥅k[3iƧ G Mt}e)yPbG3o.4huB8xڀdJ1Vۙ;"Ѽ-,6/t؞ru72yqЫ #yMk<# E7/]he-%(cƩX`_@U1yAjQՌ?ܓYV X,q.JVtKl]!)QbCx-5y"WӍ-MCf.=~a#6yfOXKmpC<%p$RG)XF UNιp@bֱzL"7zMJ5snVj \ifp=V2LE) ^jv6TfldJJzVqP`ڽ8]V|^lECCu8&? ǥՅIiW}:7WI(椖IQc0$ j:L[#!]Ӿa0hhj@17Q6oEg˰~m=(DیwwYKe|:]Y`4 7I쳩òBsfg1Ft)$pLX=Dqb@[yT`;3Ty_xZy98YF\˾Py'Z32+q'k (X$_\qn?AsB #OcԽ G2ngHʺȒgf`v@A6 Ez0,Sw7€ :h d32⃺QZ|tc!GT!@̜e Ap1%u4iynOP h:HnqQnŰ& }LذbJ*FTd:[$kBxqj:( l`;Hi3߉KxRO!Y9+AR k"/6u` FtK@6|9]p(5SXcTg^!VlEP/q83nk,N{ɛD& q.h>'Wyݮ eh/+ ; xI+SV;0r `Eey(wϙFj{8yiprt~7V}k^w,7a!qLy!|]sK(rEA7#ˑhoz+_y`,sƜg՟~)z 0.~lf6Pcsq wVIQS8QTRoG6_3I_Hx$X @f<<<"Ym$rW~}E/b p/tDeHp8wTrCCS܊nsJŸ$yyͤ 2 ̸|gVHaݛlxx[ xhn16SE`fMF!mq=TʶB R<\Eşk3& &$PBt(&5l7s-C-EnHjhg̜ȁ NCscQf.M7uR5$ʴ gbXe*X/ZAVY5,_7ī od6588PUIfV/|6ڊs7?ݶ*$#rzRĕB!ivH!#s T26}afiⳍ@N$gA0(X =5s!m31H7l[an(N0;xSuogQ.8vf:]gA2<? ZIj<3*ݩy^-lL!b$ktv4)\]C.M S3yŰ&+>՘+imHlH[Ef褈nspE0|NJ/3cڠS v b' _Κ%NYv*e>n`'ߥژr?`\ZqzBKJ`Tn >ffƆg;T[rx:+Sύv3W)Mӄn/(D&j/.Q3*:Vʬb^{ d6SKB6@&T`\6 AEqS`reU:t:6xV+;Q]=N6Ff4 /ɠ*Esb/s|Cxtԟl=DEJBN Eǔ D_ "cpK(7C23a * Vf1:çOr2~%@lKlntRȱ?;C2Zcu1I*+g{C "IgLhBB z$--hPom#ءRq@2Ӝ3o"Rkl6'Ķ7oL`R:C[xHp(s7Jۺ!fCTD4 7NyYHY%ug&DLQj^Mt؂n\xLKm.Ցՙ#5%噂HX[BԕY][ Ꜳ r}8xc׻S#= FL,T8-w7˨Ql(~q;ZX9`j*fGQWf<`LͤT[uɖi8$& &R\+ط-/lV1=!Yl*en]acd672fHcsz،>/e2K"#;63p¶u8ֶDߥ:sDSk3hJD߁VEpv.݁7u*k!ln8%gH [$ /4bb:M9«) 7*F{PcH"+LUV9Ɏm}hgSs. Fa`. Y5VpEY `."~Xp{Q8T_Ijx׸4GA;n>OD "ڦD{I:S /\c/ɥ"͇)`Xx6ppNnv` ڸ۵j3:{Jnmc3T銹z yi0drVn KAnA&wX_$igԥֺ;@[h 8рV*yp-؎@np IhDMm laT1?!Gl;\aVэm|q&Nq8P =:-H<:2Z 媑XؗZKq5YQ>a^ kzM OI, }z:s89&J8KCQGVmF5~hy]Iĝ{>J- lEd\"Bep`ŕ7ӌuЉԷMm"B^ 3 ߱I"$qs+ھzxr0\ʗ4/9ssφe*4﵊!tf4;mq9+c nȓh/1+CH&㌏NTDrP{sgG.\&R|xq {C[:5u-[1LzwYE]I20[EA8);VlB;MCb"|mxh7^=XAEQw=ϣj(hӪ5Q$[Fϵ/|\Grf(? ee( ugf-Fuj.:m%"U[h/n\lԘ2xMVƃCx9-?h]%1zHS+78TY&bޑdVF$}4ׂZt$.$0-͔+z><~ #7}C a/ V3 Tjb)Hֱ:$⯽zꬆFՈN`!N_H^ IWfmwKd.49:ql "͍-vo 8AP'&cU8:}+ %#,8KvjGv&s3ƊqrU&m"FIZ0O>R]giV"ȖA(+ĜR^.dI{5C9 8?ͫPz({~bށBp_a&?cT؁ɍx Ō"aK &1@a;BaLF\+l%yi/ xuG}[H4'!5FHMm3ry%/^a9bXX+5Z+lLҙV#rt{75d ^s)LJe[<߉a^%As y%y" ƊbKVo&6un #X|ׅouᎄ,!W0X@#Ӯ}]k\%`"zWse>LR2;"S@P~4pWhHӱn>1R֫N"/B xx B>쑯i6V4 JApOѺQjC^\\{-zPnUbS${FFXpl<_]dIL!]}ZDžgq0*!ήH/שh}ۀL)<*YY * 3O^hqZ?DZZW۬C8iJyap+X+n'TEW-Znl܍_e KJL0sD8N/J %|GS :1]߱)ڕW#9ތU Hu WSdXh80lnCI$\з@euD2 oOٷ26G+ǀ3j94 5$ O#P#tUtX1OқR.Z=!WYumIQt /(,CTV]k!jʍhYj̐I[~S Q ؟$VSBSdsj *x&ͯnESA}^9Xb;j5ڞD(m,Y@B(2^X_'4]KF]D[ E :k>K{b>SC 'm%kfuGvPǀ5 3 (TX;w(l^73Ev͍ඛ A_/Ni*63l^ < S/`x ߠs-Jc3CDp4BϨc I:L-Du!IgJnUV5=,@h7c!i Ȏ ",y46#4ˍvFe!d~o}Ī\)-T8x7B3}t֍3 (8<$m,E#X%8z-70NG3TJ\2꾜LWhd&_yz&^dl ȒZ__A,GsmsCw+%ŁM3wR5 '@PkCw%a[qm^\{ 1`fm|i]yNzD4 i3T_3T=а1gʈfVNb?kY𒏊=Wduo)jcRfkwGlRc=%tQƏ-ʥK=k|a^(q] `rRNv.EPtLM;)v3^$e GzVJb=g)ʴ7@+F\;V5i": 6مnOϸcQG!C k{@?NrƱ*o戕 R.ɠ9guЄrH( _ߤqAaJLZخSv3!FRZFZ5HfS̋ltb{ڌFjgsPmo]x۩FMhU/+r%dt{@me};U"YΩ8xBfFqsɞ)HI+!E]J3Hx ;n\ (Kymu xތ:s0~-ХsaN\Pv+xaB;% -}`̝s3yv*ٚ>FMDQK%)!ujg`(}, *>(oFz }`9`{$~~I8tՙ"y#Ujز1[kvIrڷ6aE3XDX򨋮/?½k@zy{^@^C0UWA*f`4ғne?#&rx'cu..A o)ҋc.E{pPzȀI֘ڟYOߘRrwlrMǼa`őx-IM7Y~*=fVmkpxsjIȐ \?R\/[qju@lV5?{SPJNX".bRG9뼨l- EdwSqHXUp㗨 6ͱ{gq3!:-|:yp͗X.3:CP^4pMA>NL!{ںCaA% c+ly-QD:x7[ҬC(K-y;PWlG"U#/[tΜL`;-I`?oYnA{lpI\{8ay8~<jtWOG{MK {8X8"û,$U >J/ G;:qÕp%Jwzc4 1,fp7Q/ݩ-9TsMK/s6/J =߲{R!yNs ȫ xwUEtB{hׄk M/8F|,ukNBs~U`HY9s1S(o6xYaE4y~Cd2ۡ2ȗ n$YZpV0@N`/ZRufμFܐr7ˇ¶d4|OtpGuFO1 WKV\gZk]MYΆ?!afe F& FcT̒s&ZڦyHwm4lYwgм@bEl_00 q#&1q6[iW H[5q61l 8 +D-r/MpY&pgb.!e'~Fx#l&%wZ]"DO;A nYd>Gz!fm&pIyb9N|wT >g)+"u*Y2܉jU'(8z\gbY2PH;+X$Lp}t.Pkr>Aief,Ye21` 1k36#OI;2`d9&Yj#˵I@88^ʇvdpQĭ#x-!c%^b;78:Oiʽ2#cQ_K{r1͛2?NFdǻ)}Le>drg@<OV;~#Jk@vyqjjކIEl<{yb,9p鷰ʉXf]NbXCsX;W3Aϔ`W&Iv[Y^$gdGl2bpOV2r̹^: \~ H :̈́"ӹ1n_J͎ FTl_rǔm=X]P9]bФ,! 5QQsg>' sq; ҞZ0Pb6ʛރJs˥j_@n:~s:zH̬Ռ(TruDVV-MMDN|{3GFd{.׌8SljNۃ2xE_Y U\4l ϾA_*ӊy౪E&cW :L&B ]#XB,WVuvG WُD+" `3%\ ʼn^ҸgڭȶY:,≡uxH=s"^clqgt1MpVZP2Kj']#TPm? )TsM|qL`I!A;' m>_Xm#HeROϸөXttTm]u "yxJQPI 龊lDg`Y2ey'ki4H𲜱nbY2x_+P(jax5św87Մm=sY!1@O7OK-Px>ˆ[&]Wnt&,SҡුY0lଚwSq| [:kCZnP `M.Ff>ʃr gP&2Uw+FX`qe;X' T4+jUVi9'>X~$S (<" i;׼s.6w1^r p^`T9u  ɐ:f0g71 Άgmp/CٞG#0)ɥ靯Yo/8:vZb֠IsFgƘmr@g,n/H.P:w8Hvdh<I=PdurnO#~(ʸu[½|n$3R@IDATƇA!x qc7[NHWfԽg1Ȃ,i,IfQ6&am2bGXt6gs(GoC*<| (T5\3K+A0RvBgd#8%%VlA)IPI΂S$ޢwUo3#|ɍ STAq~[JZKtKIǦaپ hLRF֑ga^G IJ$EڠDY*B&2I Is҃AlOT&;l(Y. HVkV>7M^lL*yX(QRU @bWvYm?f/-5gQVY)$BSI zYW813[ٻ"* p f`&I X MgG nT޼CЧQ̘*Ei&^gÆJ0iӓTZC6uy°j'kJR |aϡmۨ&Rl무k-x+VȆJJG; &y="0̰֭ϥxh,18Q̢*v}C2ܲ3$"@W5c>R9ۀsXg)/!qZVvC戴>w L:R03ttϩP*wbu87%U qCd茷DMB̗`ϲg3,f^Pҏi܎m78˅Sт)#4~AK׍ʑ0,;![oVA!2v(:BÌM)ls'XG7ίjQb?9܆:ؾSUգwP2(7gVM}Q2E9sR]WUQb$3lut]/ZIXMjLZda7+  nF%UBj`\aef;"mTW@ʣ~LlX$7 d33ֶ{?ibw[%bEǮ 3qC䷄3vٛ[}EdWA7^RI*bؓl'#p !ϋ /y:W|PXܭc@vG7%IkC>|“EQ-$xH}ck򽱑.vΩ+/xBZ*U;B_.9b5 H18zh3$au$91#OY!6?t[Dk+ȗ("u`*9F\Q5qnfƛ+NuTKM-wcZ37CgaȥIK9Pgx\,q̼*΢.׍#?{;`jSNxuyfAeD08/ySβN6"XpM-yٹ.΍,gǐKA_=DK+T֨6ƄU Mu_&]ȞYf0D^ ڇ ${d"&[f߇E1.+[[juq#pV Ia%`7+a_mD bXk%oayzSncϚ bYE 9.6elu9w, C)W7m.eYDǦQI &k;ꩀ 1/jx4E.%Ff#XVn'$8He`LT`PW53̑ ' vS٘-w!9q6|duϴ oКA삹 TOھJF2fJ U4Bjƅbyg^ ^yx<ꇰUȬ6vm͜R|IHi0Us@6Ӕ!Jq8d G2/n˪duKB/jÝF3c}5KWvꅲemFV3Iav@_)0Q:94z<FTF7n757nu35!# 謺K CւfZTP(j,ܞD MDm')]F|8M 軯FRVnDkI0q`$p&: .u{j`9r#ybn3;!a<>i;>R]q2yO{DҢB*FDmI}VˀyƱxd{xؒI抿X,d"F5%\RqLDذp HIn&d(ɍi*cݙ21 w6q=1i6^mTl$tlv9^c FǍ@;4&xkQxEy> ;R-P]tbT6WEUi[)9Llǘ1)\Sn `a}UU xxcGbt#[ ztՕDA{gAmhC1j $3?)oR1T/C',A«J+ KNƛ pQ6ը+xDWlpvd)zu榫2VMV{LT3 ڍ6F Vu UMW1XtC՗\D; FL=ٻP c^ Hg_3V@6l v9ο׌r wy3Z&#oj/V,xmjSm.pquQA#Emn|vԭ7֙~?OܚbZ^IɎ$t 2%h6;"(dX1r'㵻I ތ8V5iѪ0Ki!_Jeap7`(da!xN I(c|u4fcMyJ󣌊:Rctq_2CWq nU!7DFM]/sNgK X`ώXkzM763>$$lsS늻QMev}AO]q-1ZTWEip#+Ŭ)p/ -^ FV7>lgu_ܢ3}7ى`VuZn+bK,e,Rj?1ݨu2npiF&*MU |Xv &}J qʭoXkV?R73j j+1@&qx ̔)^Ox+_Wy^ 0@]ҍQ92RHޛxxLdׄ۲ юs>pU"'oIfGwaBY܈i=}*KMM2*4Bh:V{_FP5n+zv(yxCEWv@˨6dRi1CZ;OLbb[G@"w =?Q2UDhq󡑶}ڣTQ* 큧7ȓ3_;9&lXMF0|75lBE&:ZTb)~ɋ J'9mfڤL}MgX)' @>=nK|7}0 m? 3) xn8*@ODc^,r!A!^zDZV [[Y^"KnKzNYʗ9aV8q׻fN = ^"%h8<-/|kHՆ/ x)4 ÒdoqMxkr6ybïƱ-}Xh[2]=%꾦_]a8$¸e ^-FK@=-E!']֙wfވ#Ӣ|Vѥƣ౦iT1r_Bs5'RgӒ%ǘd,:k!]t>݃lTX}j{G$,%8 ž`9Z APni#>i2+T=bKADy :G: Sejx\v-+CՃ^,`: LBMͤo繡ipd WBt!.>l럍~!IY'iFBw7 Bĵ]l7z\̐m&2duQ>fdSXP$Xl+藃DFr>r z9tK]7%:07o؍#fP굕e#fY c/As`j%ӝV[D5*_M2$;́07zRUN ^@;3t&8 f .H!+a棊Q$m+0}I^+rIEW #K.Y['N%1W(w⧋Εi fK;2MV4>W=w3B${mUIZťcK~6 ;gL×#\ޡ i&0cdY[NvA( t)wefJgFP";+5;1 7 {IĤ$cb?\V6f${Db+>w T ;oa2iR6с/D {{ Bag;-{) #c<˓>(PGcBkʆ2bih 6<|rw'<˷<1'7ε,JM1D?Ik<,aun k ݰ IwM}ƌٱ 1~(2pr{DPDZ'&k+[H/Y #cvTC@Wli|L7yfRbƒj2{Td,8\v경Y^"yr9@6!ğ|.#4X)$Lx]Yy ig!K6(ZF*Հ.D2/ F 7ӆ)s‘rԧ] ø0.h@,V 4|Q.S1;wˣv8&1|C\|"wP-./EK:u\$-_?AgzX!q@fZ٘(.aVY:K4|%Gq؝d.y4>w{0Xlavϯ nx!|fR0Ei}ǨxQ1N'O/c?b_ plx+f:dH|2:szHf-Ø )6Ûi4 .] #d!R>4mf6Oz"ב]S-ZvRZ4]K@F)q tLYY[q!o;+yDIhS BzkCn`;`," G%z'yCdt,V jw3ĖryBwtyTp  <=NgsrlGs]$K Jw,۸_H8|X Qdr`Mp&Ni+f vl"yQjVB1@ °=UgKYTZ,[۳S6a)i! ϻY/qGnspjg$`a75; DIY+ydGΗzrS60V>h&n:56F~qZ/3[oP4!Lr\WY:{G]Je7f0z8Eܥ=ЃilVHZ'+c"lg{"(b_P-n7vFf__[ 1ZN .6[yv;V !J6/9&YhFCl^$|3bFOѻT%m[7w&zSI+tTpXfz"cqw(Z2}^|?t4cQV홆 zap(Ri)\ r-&-]t@rٍQMOPsM]Э^,uџYJS+'&HU%{- QPL.62y6;]j$|E|+n̲L Qli_ոZa9p<Bu,(m$˭ye?xav=Zpγ oL~'ΓpVu:fqEC{X\!V]ӑe_%D}%cS jƙ =h7oli$#8bdz补fͰQE`j=Ӏo7OE ک_yHEV ^bO(7Ghջ~iqaH7bv *ZA"ea!((ͳѐ#McNM+@oE7[qiv{Z.zyY雯?aNfE| 9keg"[X,E(]DꞤ2eVLϬ%̠EPN\[z]LWh56mq Hm+ K j\ݒ5dr[DWtZk"L{ c.'q++D "ngѼul2inTrB`ț{[!ɧcC-N_ҼDc]%?Iކ`3eȐ {@z r"4hG@LKg8:Hy)pko kY nD̓U2ecT#2RAo݇>ZEM3L@4lMC}[/QtE4.W-G$-T7i1^ ,vu qxQFslATMql go]FBGh2Rsw,V2)_9Ƌ1l.WGA7^6Oƶ܀XoY6vCH[iۚZhdFzŲZ#,cZew+gmZuOy<4x5U WfV̢y&fWݯx$ 6,R޴];V!^ӣ&ahTi#>| xpmJdX{s xOŘECBhy7yiogk  Ő_asRX n_^yUk3Vrڀ \^-V0FܦDKkYwJaûM^lt"ï3 OfByrU?xSMg 5BӰѦ7ބ盡PX6UМHg5[h*0ij %B;-M@76 rqhULٜ;5'}&Z{FvrPxS46$T.r ?. :7ZV`'84[De6`h[Tntq u(wsCwZ]CbNRXu6}HsTHDUv|ϲyrsR|dѹ޺hxqJЌJ*2eⳲ1c!-6Q,:L[sWl .۽̇Siȹ)Zo ԞJ wqJ쯡bA\%xCRVlxe^53IX{f5rd Y =_N<,YjǚldMFL*jVqoB<&v#Mo Onm%pKX0)eZ޶eI<7jWnhJkP7#{8M܅&5+3l4ss\kWm6x!n/kKG! 歄[B,8B!`ܨv͂ V> 7ݝ?E*iZ &~-{Vɗb/֧wd=:kLŸtG-/̿-e<^S:7e;bmVz) KgYATɥ6 qҙ<"%xiS4GYC_Z 7MឋFx_OQy p۬ЄN(S S-Yx2O=?2Rs~fāisiп{:s;3 vf |2$lgTPyi̞khOnM`ZhsLSO;=%gnMM"W#N^{fV8 /HB/e%7YMSUɭJDGnu s\D2,M }{T:Nͼj2Jt%3̊zcހ&W&FܻL-鮞@h.FjEYn!@XC1.6Ҙ# x\ϣ1$,%I' $ "6QZ KC:Q C($O؃x y>1Zӟdɪ Ul-光┉}v*#>\ðlg(8fMe\- Qe&6y:ݹx4l$"C87W`; Rk?ਲgIF*$3|CSJl$35֎[-LCgʹP3ƚ3&5]Pdo2C8߱b9z_s ܢ}+k\ Kepzːp1oVw_ӿ{u3ёo-dS^{s>j%giTʝ$8Mw l3PCs; AlLn3E=( {ogg*֭ٮ?s{TWiANb9p#Rȁjo>0GRO 7XR@.[ ʳhxE)[/ 8uA<"¨(-sWhda |_x anikBia lo3w mF dkֽ'j6mieSTh!>Y]iF-`8z5%u 1m-$>5gn{jGkY:@IDAT'z:8L9Prlwsu>$ciϱ "TQhj=1IjHf9s+pj=906m1k,jqђ7AQ[¯5GtRBVYn5\=D]rc0ckq[Q쳣lS5^]JY8yiYΰ΋EU7єʃTԟR)zHgmWcs6Wr(gi!9:z=er% MHS(,|(/Z4AƋZ::ggHk0 '8[7-CeGخs/Zmj] /p)޸Sޅk?AL+ϊ88&`݌tU gHKf! ֎A?3gt!7X[B [=7z7Ou>sJ\zL|5yqyJ79~2;=//Fzxz 2eUvQ2@S cyO,UaL;fY{mqDl}a1~3]>T9FfY9ĸp".Ƀ!9g<吭 Ǫ1m61zـH}ddtKyfUp.H2mh\FD21)f XC|ӻe֗69j!2%{f]Lnɻ(-ꃂqL魾 dZUF0Ὡ4eIs#~b%(&n*?30#vk*ſ8StQȤ@Y4Lc˕@,[wp)$Y jhQo68^^6; HH|o["+q"ڸ11|l4_n,e6.4Zm`N׹ '3=ĭqAu[QFF%4E 5:&ou& ?cE\:L|ZʉBQ+{4֡7`xkx xk4 sXOK./h n[x.N!hq! NiuE3A,Gd`YO}6D0`N}$v´v#xóҟ%ƝV@nGe>^@;LZ,{+ښ Ŵo+;ch\Y2RGAҺrNy~1$a#Jn`G,:V*coxȫ,sd=\,FM~싂G p ]ShAofУ_G-o46y٣%9 u¼!І2bFgIZ/17KZcjhz~TՐOHD/PdN"] %ƛ4P؟K*|MKVK_f.#~n=l623}47tz\Тp16LIT݄> zR8s,{t $L{GFA+ڑ"pl1<5"Y>% 8K#:Y^y#v1uLrf@8-JTfLhdRtj:>'yI ~S?L *:5(cʍiɶB6:C:O^q̱UP-6/8=o5 m.BHeEtvv*6q5}O-5~E_𣓕QRF&K 7YBpt,ӄ݇$j<>0^T9LK (q(h1Ѐe,KwHN9-)MLxXN͇ o6>y ~F:v$faz4YB^7SSֲew9LR75gAՕjǔyX*1e6R]#Z.b:2u w?|~>WKЕ $)λr(blj;`[}J`gSٲ45GA:A`*⇹rDwnsvx"Ml *|%i)-‡31q$$7 aǡvZkr-`2@7sdfIVNyFS'#[TM|㹺0:v<- 3ic^Y/gMg'#@g\&锬x 9bw8L98gd|bDGPcSWٔZuk3\8e(G]L,ѝe/-` wA9Fh5"<hҩ)B,86ЏF!^T@݌/K 8gvKiQP_by;{緖`Jg xFpH o]/tUY2[澰r`:/G!Bj^h7&n2|P2k]lJIz5 %n#ڲenC4Ws\$Kgxw.& e\5`R78 d3#/P+B@Vv3 N? F2HՔ<1[p$9^8Gνw !_jDؚQဲMŢBa)3B\nPthA`pQօo c ʇRx) kJ !f$`䧆ʻQ'oCP))[MϞh>A(=D^@mGIɮ1By@K).vнRf<مT9&83<{wo٢ q>X@Kߒz%Q6T?̊.7S0 ,5!vV}OsO0G.Hn'{('G_)B:D󴫈.,76o懻ĹJqNʒ +x:ˆ"I.IH,y\ "שѲ~}x5TҾypkn*m5qF y)9*`L.S22^F*6$rIWΑyKӔm]2,R[:=O>K0A=e:+sYF^zQ; !\yI˼:\;yE 3`5Lv O#U9K2a8EdD v;G'qbp@@WSY©KgI [9ISS6pꅡjg[w2G_f9gV2banˑU\@p?a@ uK*d!d ea7u? /tZ#u*h0⒫-<τ; /cNͤJaѿVB19@(zZ5^\Sf"WheneϝOaeJ0av:KA"Vm{T{tp 41;4jF-I(y $re)y+@=.]=qj#]|\xL.q#$H.zҲ:tՅzqE$E3v[*?̂Y,LdӦ\L%l2"x#x.54rwYYv'-L+gr^[1糶ؚY,g:Y/';ڄ S4hݘvN-l7rʌ/a9̜bL0e](.d9C!|:(R=?chp\X SȗEznaݤQN+ym9fwΰim8/ ҹ;L\ok,Y`f4K($At.8rObWYP 3FN(pR"Xuٺz1n mo/1A;*0S}>cggc#ﶻg 7tNLInP]nǐ˾ذf3Q1^9ͯ?$qzEyv:fl*$͘/w|nu^DBI=}.ut ~囘3IK~>7rLlRIp}ESh2 Uƣ4޵d+Le[AB+p2wucAyec& pOAW+}"PR⩮ ˎ)=g7<62Pix4_-gA~,%P8`%f. R^ꥉVtKz~cb/N{[ 5{fCw *jmv*|++˹;)U[@`!wb D(C #bC1v,?,F-P̰LnF.UOalm, ^\ci 8-RR$?$ K{8Hvlr&{/%XN+Zbueς6gO΍DU^򱱵8mU?pW0NIr¼F% djcۙƹ@*l}ySꖼu]Jn tD8F*O)c`ݞ GhZIW@0栗Y[cF]\'ϊ|}3LNkvq{OP𒡠۶ͰisV5&Xr;rT 8nu;;+>}[-Mv-#(7b#5b_w& ^>>M:qY< V::Nq]w1SlޖfS Dg/Qr6te)|cow`~Rڔ\"[(N)g9?qdbTweqz)qA2Hn Ґʐk4,ND7ů$ ӃwZ}n"d9Vc9;FA@ta4V ;y. p2έ Z?O`6c=:yBT&U0S2.}يtS3=kS47g7[un#W?e}ƃQmAv J7_,j^9N㱬+=5,=ЦY*| 058ydJ?`[FW2["f8kwk3tcاBIm:wPz'dQ "rg!t*1 ٻY:q49 E-@\3 ZtGUBI!oڬpٔwvcLeĀ?k0kŦPgOJUގ2a8R`@ V~j-.i;+vG ]e(jj N_ X' IVVܛIK׽cM(P<ԼHccKj.ttP)W;Xeljk$đ"%VzgxCߜφoK NbFb6Uh}o ;u'[/:u88XF8vߙDCAeTdvjHy_ʈD\@ޯ$D!ɽ-+"wn0biCXiH7%&6P[AXAr8EP`c_sfݱ"-V3R>qz:EWf7֤͎mtL7m7)5@>9V*;eM:|VvBX&qOjX8鹰o;Gi+$~0#SFk-9Xc׼OJ-7xܸ`gz8 ޒ9$[0K@3藺vM^BNa.7il$ve9 @>(LLTR֜6οMY,cbEec|B"sqyj!+:İ t^vÀxx02Stix } _+ļ"~zw1"iJNl5ܢ0iQ_60UM^rFkUϭ-l\RtbT'5:L(K2wcJfmnʴEq6I|Ky} [_u?9Zv[p˙/8?jo>zK )[ނb"!\hHӨע@f+~PP jzKE:K/8 o1O; UMp1ҾajSEe~T&c<$ߏ) ZŸj j._R tg~n lդ^pnrr JY=0HmF'eWβf8k {{de iK8'}sף!{pe?2_-`!ȲȑJ21b  5;K4ԇ*+GF|yRg":&Iu)lTVMXalxڊYYB=9^m;ehJs3|G'KEUvt--f%,9- Ӽ%wm-ghIʍ[K睴m( ![3zn|$8tޱDO}iԵ̒TMc\Y[3+ׯ .ߩn?Vkf"ݼ~4p]nʹ ;@bl_]V%%6=]mH14_0y@%(.g ?tьs-pNG콏 @A_pi97ձ^4z(s,!7P^4n~qj_0Ef&l  j^/ZҾ`X#`=:d ,tDr\RF䵵<%ܖhsnk>X bs#O3Xo[.rR*xe拗Yl_ *'Jc 6NC5shr"Fcn0ꑉ4CaC<2dj{[+|rdκ@wݚ_nRdMl)K(&O'gRu3'EDVKB|F|2TCK6Jw< ͐NZnVitSu;]]W .1k2O,.-%D0a@kb4]$+֡m[k$!rA^^ngڙzzͪ4扩J:l*6gfᨑB#i7?MY;?˱y0*|@ zXV&-QxK6Lu" 9Kcٰװ_47rll H?|Ud24ژ,&d˚wx09R'M!gyQ+A3mB`chIѐ_ݼd.E7SwIMg χl?Ow~+ ;us1jW"PӝD)ASF4H}=GӇWaqZK ^7#15' SnKN0h<I:;?!@Hx\./N뛿J^J3e}-DJI)"Pp|\trc=2¯vi8]=Pqg%G%_;)YRtrH G$N#LmCwo_4[4F 9 Pp\GB,hIן7\,[]'A)7WnGTmSHu8'_\^ZMI}$<9٫28@]Cuj7~mCl {Tn/L{o}5b]~ǔg|6|N-! J|kT:Ah9h傜ݧx}:bpǙ$/ݐ=(0"n> kHRR7>/ڤ㘁C5˹Ky7y⤵/Y,)'a[#sA. 2Kehxy?V q)z̺` zOCH* )>Mўn-x/A΍\ՐQN :k )11ÁFk٦۩o$`S{ CuX:~I0zR;+%Pg3.A1 +tB tL )=kj:+I\Д(s= gkEFR٤g2ūDv*^gQkRZ;`+X6ѺJHv @iv&)enoSyM!)e2&IsO0E7/:MRF!zUG" b HN˅MyLng^Ҥtwk=:ie-] [Eƚ"B'5ќ|͆e^g-\땇 jdfr1[ Y bbBmlb7oh+tvOKzo5ϛE 0tr6ܠdS!5'KC蹢/;FT'g_)"3NYDWd/ƌj9e)R'G)e^۟nj.r7cGbN9mE - 629"3Ϭ?Y6f f4ЀdT[78} ѣ#7\SF ےHYg2mܣ@Jkڹk-;,&T>W4hAy_~̉4l@¿Vdè.DXcD-?K Y*@I Gw22CQ㬃Yw%wf|{48&YVUѰO-w "ʓY' tJvM$n.u̹W/%[% °=mTҚ_ͦo2 Fq~c%eA0e .rU>JSz.[\ 0\ˠ{/̇q+ěR4@i`K(ŭC/#0ȁ d"XuVz$ id$[ qFGaw?t&Vܛi8&ۜ)?W, ަptF{uRoD;e "\+|Qlƅ?D)KS/?{׼Bi8\X]W@=’lb~\5e>j- 4ꙎH )ItMBؕF_>D\ d #uztmk$eҾ0g6j(x~ b#BRt}:fb~RL3FCXjSn|LBNߔΦC.FY&0K֖!a1/MAUT}D;2Ǧ6܉dH-<(6[i6bOdU:GeeЛ@N kzE7V'Gx"xd2XP|J/[iNh]9dUuc{0 b89XӹLJ2|l}htmFZ̤qyE}`ttl&q8P~p|Bxv  |EםY.Nަmܑy:E3TsIňv#4TL)Э+ة#L` L,ԝr7Rru(:}ue0<>a&Y 9mH!*$| du8o&=Y|>Y c \2srdJj /%X 1sHg{cʝHxJmܢ*v2#xD:Lߦ%DzQ@M 4=| `ixipMi t cCi]WeLPsiVaTVYY!!X>N=1#Ȣ26YT\5fM~$k տדּy]p)m+X\; S 2[Z6!㙼u$fZ¸BZU囹%&(lbnڟx.i.G%wZP9eoalh໩sT ˜qi#ԂaNH:r~|a|S6~&9ӹ,P1Vzxe#KA13#")غ@2J6>1(g@6<5`c5ğ$VÙ&R#j}b:$~>eqQZ3"[pR%3w7Pr/^wȘMB"HR~K!ɺ7ERщg{ziJfDK[ì0KlH'f6!Ñ`BĢ;#tL{d̓ I0aeuM 칬e,ionBSq֐}&5'$eY }/۱( zv9o*GjvNPߔkzRdT.Z )֩4gª#IWPY@QhgE˱{ɹSxoH?"BcȨ\l`1iT;Qn!?!|_1À-8XDSuI !r\r5s+#8Mp=/SU&5ر԰l~H|B+t:p/DiB@3R9Dg2V ,A*hjyw'1k/3cqY|4o`@cM`V\ԭ̙ u{܎Cv9gM퀺~U51ᝡǡ2 t;{h;eT&DT3?6V;T~ֱFhR(;[-s++xsM&G%((yЈFq.=f[(ԜQ?TdYf8$ӎI<D3A#V6 6YtdvS߁ܜ3I5Gt[Ts%)eY;qPd垮\ͤUj9G,d9e v5׃J%% Dc(Vµo M=U!U@%:,3X:19cͺ)J El#v[$uvAqƶӲ#I{U#jqx8WVGs$Y&%sviOժ7%`y󩎶$ͨ; )md#yyGpz|C)J!fWpGwx?:vj1ĝL`xٜ e=9"ͳm}m /7LyB<#lSf4yu ;s`DGXZC&_4@bcs^GڴyoG6֠Ue)jJ!Eǡ `\Bnh^S\3jA 4fdgNI 9`1R@r;ahx'av*hv{%@|ɞIRTx!~C< #L;c!+x% ^2;M)=սD.b;,mLOW`66ޛ,0ܥ1^`)H. TOAU6%@h[M/Wjy F4 ϾWaIAbm:G15E u |; ,i{\.@I y`&/r53hU hߑHfoiq6g/}}3=vAT.)P_Q$n"A8GM܇gÁdN ,Q8:]V@m2%g%A> lz3tm 2e Ji6L4"X1ɽI88MW_PlrpaSR`ޜLpŻJt"N%eiÒ*qi/w@X3@Y&t}m(Ц Po7:La&˚ǻE4ZEh/[5Tm`q4 LsgJg|=@ Xpx8:@ȩ 8v|-,2.@6CR{l{`=?g g6}dBO-(5lDvl!OT )@sH;@zi n!"p7kPxDoRX'zU3%Rgw[Nj%Z9qY5ehʭ.v|.?-P9EDwÛPmZS0zxvj97ix UPPR.k9?D@m:ũ2fspL{Z[J$AINsXwT.f [  |=Q{&/BZ M3%<(!3ޯOdz)X>}wx\=6-yYg)f"hun/2z((,(CC29IEHP$ꎜQ34|K8םP|jm)g{sEWi5ds4|lLL-p8C5+;﹉߈0ʢwnG BK!_$J̕;|_Dz:wWD#c3oŁrs5Ź[ )<;Ʃr͂$kf0DY} CaH(]Kp&Dי[GAzfSmRݻ/Hʛú\[xC utAI2&g~JuDHo@g>#^qߦ9S eMch'iLdTv4/nzҼBώwgy9]f]V]G EmҸ259_TY5_AY}m;.SnGGc%̤2c@IDAT^;[v=lFtnD^roHf26?)e- JzMz:;5zg23J* c(bvvL܌l #YCcl'04 ס6cQkuz1hؓnOnlKRlo#xS2\oLi`l&Ȝ<(@8Cd@i5X!QNK,MqQ[90iϳ5@#)4ݰ=o˩ݜT*;sZ\Bhev1dрL(R%Tyםf:/!HZ޴obxGi&`3-֩ӞHGg#IHn./L7[ vNN*̸?hXSH**mG6)\%סR )B[K .ܥKk,,d[rwp+J1좨A1eXDžru,K(7xLY茁omazP t9ζg&{`$Ɂi#-~ oZp4SoNnRC/֝e`kZ=#(NK\ev,RuJ%/h>A#z[X*rz> ~6$Zr ٰ$$-B恈N f|$]xais,'-f-k2|Uf@L^-0鄌QQӟOV3<ZKeѸ؜m@$čP˯_| UNCPr[}Qسn?UVc}Z"$<9}tDt{j47w7?5ِe v?O?)7_7}'"Cg3B@C\cR pvҐVO!ӟO+/&7vIr|WIGѠ:oowo>Tx/if; $VֽvNaߪ櫄qdMuW4 3s|=YwVgs๱>+w:w"†XDr@sV"Q Zpgi#o2GPrna3K3G3l|5 a-Hyd JY(Lt$-J~:>cQ]b*_׷.ǘ|^kn8KMѣ 4dM9-TD:';z2Q#2'jӊaZS<ײ_+̏ ^ʤ!a²W| šlb󹦝Ȥ^YC2ޝmdYv^06e32erBZCts$fݚnܸcoL )'--cwܒ/=<ĩ'iwŖhd>bI^NJ&9C'Ja/bK5bL)"չ36 kRN\m|k><ӓ8ŢLG\II1uWYӃ2?\೿웧49[#r&o2vZ@=y᧟ܢ򞊻^g:A*U -֍&}J_~շ7Hwve~\5ɥre_O=?w g Oq. w^{L~'Ǣ>ɾ6?%~2QRzR?o%z~ooJlj+ywNr>_4???¯B|ɵ߄P64.Bw7_T,[ČNv۳)T oU[py;VL#="$)DRփؙFy}ɡT3+Ol>9 mS2 ܸDRYye[hflipFco,x 'ʔQF[\.ELX?t+#yIUFr`R, {4Z%fQ7]gGgM H5@Dp*Yv["lǔG(3 es f-0bvS;OCm t}Vjsd7K u"!IfPQBբX8&)UPm  0ZezXE 3H@ì'%6=Lg`ҽ|Ȁ%ubCI;<f??9K7~`$50c$]U]z92ѫyEQ橉o"]B/zC.|ّX,#{:=-pn.ʆR 1KxaӍ@ٚʹ)3'و}`yDjf Hxl$3h6>&S^Tф0rbfel tGu{o*h| M{ /%Q ^qa-vwPh҂)vOotAWWa `)3,>(|j&|h7x]RVDf,l8e~wO~={eتXL{S??ÿ?}@iQ<]F P[ni)U&9v}_U5DL+/'@}m !XJkvq}̘aGi#A%dJI1ߧ _ꯑKBnm8IFieFض(Y_& zJ1P-|[rѸSv*lg {Rryz6V8 na|cmٚ2a"ϗd6dy_6}D?j?vB-Қi?s.Ս-AJNH=7ǜm_l)5UOqZl롋YV=U S` xD- (3o)JsQ/]>c[e'T3HsSG#v 'wRئӰBl2 Kh49(ICm|z].Q1/J:5c8ԝ( bpQ?W"d_פM!?{91. )G=_֥c^d)4 &o@ԛަCUG(=FCϐ' p )J)&cᛝ4 [p)Tl6X< /[GƛEveE%4ciتg % b%NN:!ڤw^ !ĕ%&"zilz. nK -%qjɶIc!A-^D-ZUO/ %XS3nC:7y0/,]dL6Ձ]Ng,g:Bbo i|eX$X#nlRbO:78|?^Gegh,T9>Fm%x7`+ bGnFS>x#,xѼh=| 6&9( xOzeǿ???ǟ~PwMpV~~IB_7ob9x\PDgշ}`?$;u}ؽuȩ} iyjמV9IGhS كjL~Cq0].S|%>J&glBK)o|wwL}GdEW'Nu݈R'Aٗo! 3odj;"f;Si|+Ed-;x|Y,` Gm[5ẅً_;d^_oFYXµ}eƩsPbuW74Jjl`A"9jfwcA{[V˶̂h]nK xsu;xfb>bbdXO Y܏2EIfLpOhWM;<pn5eAHoGd&|<<Ӱ7%jfRtXyw3&!%95u +-z/K -R|N(["py )_4,G*GgӅJ1UP?Ac}(FasjNxq 6 `byj70RfJtS͕Eb#z[U#+ԡ+l"VͿ[n(Sr 1S\5ԹJ.$m.Y1|=خi22/6{tR~`pI}Yi&l퀶xVXEHف ӴF@[J.f?4 ⢲:50ڡ,[ԳTT22?$Vw .IKCLv T,2i.svUA,7F88ze5 I;T_̑P֐?O&@`&?,jZ Wpj3{4)O1 vspQa6$44L&^dԥ8y~hjg|CcѼJUs7{,232#ںz^`ӈFdP eQ3Q3#ak^k=3}oT(oV~ws_7n4I& Ƈ:OOP I/[2)A"XK O:dG,ǧ#nN'.<O&D,_wxQ@ٚS X"r (DaO/xxpx28'g;oy/:^08K y-F?gç]YY߾ibo_f480}~r<nm^{KTS.8B:μLG}GɈ]~;o/̅osN6Y.^sg>x?x񓇟XhqCNOW>FÃhW]KM _}Z fƝ{ͽ:97;J%UW_}w p%QD>~ޣωcSrZ 4R"& 8{8gwv2,zuρHр+H b#_$8%NY;lR ĺH0:ep36XA gALZ Ǩ%wnLGp8ú[/ƃ^{{>&P+,Lx'?ܺ+k/}?Np<:d2<~k'\HEg;f?277m֋/{1v~nPuwzm&?֛|p_.T\3 N~ۿ=9x<dtrzBn,nDŒ~"Bf'33(B:uב i-ZIf<h] ؚVUΙMC Y cZh-9؇gK#եN*n"U) FՉ8F?#'/\EFT #&G,k*TDA#]TxY))F8Kgϻi'کFK^aRSMP(C|>D )hGŶNH)؟2ΕO H4dJYP2 "Inai7:@=;CRg=5ؑS6ȫٔa_bNFx-_]f\*j#/ԩ(PYhԩTqO[L\T`V3Ԛ5rPICDTf(E"kFmGU<*.e]=BW]zxscQ̺90&pP͌2Cδ04R/#=\ЕL"9"ݩ$@PU5NUs|Ej:S{ md5Os zgAh@%&j$dž[_틿-6d"il:w|89&"GXMԖTYӄ @W<Ѐ!ݏ7)'r rM-Ȫ"ca.=*X_"XTl2H=ѫڔrv} ~(xusB25  E$jt7JA=!<>zxp7'yj 7*ZT8}^N{ ~@S $@kyin_=<~r??vms` յ7Pˤd8~ry <4',m3XW I[QM;4tH&l@\M1"@4vu&(EA&Z,Ӑrz< $tx<8:>x{~wA;5%8|ma sFҘe>vV`銯@&?>{/ED|ܸesPj7<^o0\[_!5C: =waQ*!ty#Ul&Jz*d: FHnb\W0>2TJń~[e: ]) BE YƼ{y$Y5VN%G6*C4%Q˨=n2FCa)e| M+-lzPZS6АSp<|q诇bk!C\c 伤3 v\l"u ([[H#zZ- %g<,amB]N-hg1ߡ>`xNrmm߹z㥝`8 PX{7cInF&a2Befjɝ,5-R*| =E: TI}̤Y!͔QF?YX,F#$q8T0 3=rƮ!mHFP=-&s_Y0jR{! *T Jb굒 %虠IRZ%{]׀3˜8MQfb)'=IՔI⅀P`)gjBE)#}IGOmyOdSB1d lɟnv}'E#й?%,4 |Z)q2ǣhԀ%_(O,DP6W UP ~k0ViIyȅRKԔv:xER g^jS.4X9+6*fbx ^@Y*lKycw;[-i0A55 -fYU*D ГQxSQ*R&);$+  Ɋ05QGI3ɸ -BLFĀ E dT;@)5C& NVWwբ2-r ' MeC!l;z$Zx3D$Fz̙ Hȉ^̜yu5OR@<)ldRCEv %R6i脾Oh4``  g5BH~rюPL^) *r%+1Q?g{.1O]˫!*tc+KrE*0X1QTUC|FqDwAdB -p\KEf5v,LfӔs?"ev$]DM,P؍ _[B0=ayl8 ٠;R']'T(i.gv.AqT&B+4c[5VJ_\3 <{ϧK[Y]~ŧ7/l]_{teK#ݡlJy|t2٘Og#~2:g~~7}x/OP=lb^Xk.-]c,^UnO)zte443/XK|B~W5猏2 Vk"Ў\/W秇/͕훷}q͂k6K|I;j L˕P%vp \/o/.nl3Tνhye? 'vq% q/}ᗟTWYHnS0y82/:3T[Tk 7+F{s~h[hDjeF"9%s65 I@uA9aav낢3h3<3`dAgy3mp3iMLH%vQyXaDEDsQ'\K6; ]¹*dN6FR{B*_rFZ1'RZGTؗhA&3k#M#+1p1Lq*WhH(R3SAqhB\,VӀªZl&Ngq2-xhD(ƒ=5j.:;Š[X^]Ñ^{· ..:HhF& XsF> 8c3y|uqyW9`5g}@c6koPxW~:]̏!>ẋh.F߬m#sMt ?>Y_\%qGQJ]aOb~ 4.*RR2F3t-\<+"k6q0BlJ&v_muMFGD2]ġ V9ĸմ' bpj]o&RrEL/Xzv(y2T7{pv0˙7lƍiB%[:u+DgD1TPRmxˉ Z!MuL/IT鐀)&Jg ܫV~AQI:{ `cgc{)3A{9γY-msݗ-f څ@zjP,(`TJ؅$3].;vE8t:$M f:Ҷ2Ax$Η*X&L_y~(d ^U q*DQ""kk _ɣ$.gn.x1PT*O>BLĭP@1$SV"4cy &Tb8J.3DdT$In-+h[wae+Jzl.i {Hu G%LRBvMk֐ͨuV+{Git&Kg6e!^-@Vbp!Ifmc@㴚gC&(XzDSTP#A}cD.ݰ3 $074Jk&@ 'X:"c!vuuSqT䙌N|2=z4~V[V=dZ*풖:uq<FY^] O,utZKa=3ӕFj}`'bj𭀵 g+$ЛNKWKt~60(gh>/!hryp SC]w^?.4 Qc2AB֢iH3҉kXL_153[WIg8ߩD-'$i+sN4I:.ȂIr9(.|t4>V| mC g-X0 KK+55H"Ii2%ӮJatˡ[LF)&p0"՝@IDAT㐃8 YLQW%[j} N,?ETJ].hqO{A eE+6ʌd`(qfF7~k/\-^* AapmoǞLJ Ϲscgmn'3tt7*B_|O0ȇR=O*&q.Fzz^ptz8w9 s|մm Goc;|1#ONS`Wn޾FuIp<">rd:<\)`mӓJigLL(uaY>vx'iژf4K2#/vF^tF+kKs$]K~̆d]ТZ5ehf)+}ē4Ow]y[reŵo;_\ KbP/ތ+,x#e|/l=9zp7h;"myy}cm|: 9dʳ&G\R7oksx>;/zK#qZ)Nӽ)C'+5Z>qDPObO,x~Ώ^"2q҅Ϧ:~=>8 䢆a2W/.{<)ARHȿU5spfKf[dp08{+)/YM&C{ظ{*|FZrKu/)LIsfҬ/Q`9AXAgQA$)" =M *2րM&fx;= jPfPR hSAw%͋MuI \7ڞ5:@z;.YָxW} 0?ۥJ>Ŧ[PX@T3I2 ogƛc{Q&6BOt-c}E( 0\[*2`n)KIYXD;@Ž֎ ߳K!wXnh+CH+d+lR:F-:!0mK:O vjݨxyCF*6;1\ !g(#p1+AJВ7O y&EMWUtu#2j#Њ=vʥS SٸlimeCꭇ ϋ3Sev5.JH{43-.RcWOj Hz<4ф[R6Y%% !lAoE=U`)G9N8iC;[Հ45G*@s|ԡ +aLa^)sjCR Ez`2jJ49FCtC,tO-~#0"浜'L8L%"ӌ65c! erU_=G9f%XA6L݉DEf=],Jf&GU<#V,) s7_Nxӽ< n߿/6Z'l1#lUHXC @y{2Mv^_\ݸ&oǥKx􈾂lP~lď|k,F;;'jam<>;88sB|1bli7a "[NN4r:`{7~:Ĝq@M _?AYno{3JlX-ZlmnAirqY"X! s֯.0 =)??8 k}W~g_-k!QH@M^#&e,kM_^Yݹ~{sd2:6-%]~\C'vxN&,1߿O^L| 4l|W g>Ғ` {~L Znkhp4_\$`;,57T <ѫo߸YӋ%KA >L[Z`uF@x6߻ '~۸}wpnyrmC᯻U&'ݓ''e}Bܺ7P[r;H'P>w|)k~]{B\f]N>;}>5Qh3+*6X./y.oΏ:d >=>X_/Vy.\ ͙ 䜐dcZP.3@}y&a]BjxE GBNҞvRM*LyU*J rz|)lŒf(N3Ҷ){-6a)(9rbK,~wLU{ZK;Ldn%)Ã'O~JX<^l-^߳ H[<*8|W)sMƭ^7_E㆛b~@{k7 N xe78Ks||sphxu:ߗ5 p{5ߙ>g>ԟ>^ۺ; I⅖_ ߂[έwgOP!`?`X{OUN}cqGfe&~眜 HɚV.sʈ50IU2T9 g^xM?9VK[b$b̓oUaE(BK.6JOɋs;8lRׯ:Y˼غˮq^wJ:TNiX[IhJz s'niܠxsJO,3 $⟰%7{nmmcB?]e;Ē^ c'dU\PyTHrU#@X( xi$CgTz-޼>DNLT0vUn4$J b)h>aQ W[Y,aa  G)mOF i*R5 b)+zJUA!pdhiN" _^0QqQ#ֺ@3aDO HI9vwXC !CoH͋9#a=:98<.E,$c,9kQ&BnfSs4{j`I#Ƭ-B9iÒxĜ<-l.1>9=Ip-щRq>-9̪ע(t2"*BRq9ql叭! Mac V, C[tBݕ-w+ lo5HM5ÄJ{u8U=6]T.aKUrR_@Fϴkѓ9PyuQfv =V=]|FQq DQj#(E-K%x3QI\!cՍ'A"jzxk$| g*4ժ(bWAJؤSr@Dvyb 0| == ]ꔔr": fܢUSWXtÑrL 0iMƠZ5T@?EHW{1NFOK$+s@vj5ü+J-vƫ+@:ڀj&ܵɮ+z_;"'MK @S`lX_WNsWbx k:P\eeC/H2/\lANvj7ʞreK. s~P'3aʂbʲUxN8L!0}vA/hQԈLF8֡JMm4T| zB,NM#k]8gs+=:>=z;jX~~_xʐw6['ERh̪ɜV!uX[!:lt[/> tyuyq=?Z/|m[;7?я+[=iމCf@п3MϷv0s`~GlztODdSǿKT:Y%UM癍o4) C- '<7(2]oy%_./ou9{&F}  w@-dV'–[_z/hݼ~脩Lms].r'P0oxFw?暂I{pa}ki_ro/`z7Zqwy>p; ^dyizu>?S3@jY 7\>g1t p2 ?L1ظFHYu4::=ג7q n#uE?_| |zvvZn-e5j,p@ipŢs>sϟ/!G\eeFkXD"4ISH@-% #j 1OÀ1ؙ֔ 3XK/*am\ 8:a./E)ȼBJqǏF+5)QYgG-r ;77m.| Tt$ksu:*b@N t-gfE:bGK]z_rqCYIg8㠖4۫ P4&NhnyM4f.@XYGsH g+jY@x%!0HXV)_T渼%5֝Hh$(W"ف*D@ *BVDn}R] V# ᫩2J).tRPPxj'kcȂcSp6xVBH(>y#v#s3CQ'(߹w%@cФq<1MV3%(V  R_elPΖWTc/>:n\#g!O %4RJ|D(y.#K-خ;T)&)q$H03LO m?UCR-!ƴ).E|u6[x-lK׾ r-]K"0cd ,rbHCQ 6ѝ<0E]d*` @e]`BP oA>=dzwrKܽz|k6&C#ʵ#jZ,Ӷ&kAoc|Ny ^[,[@ k>x>x÷.= eP-W q:aeԑǀ `bt|dpÛڡN/̯p ߶.(ݛQj1mmXw#M@дJ#R=q AR۪rf6qC/xho0wiǿ'Y.&W 7}d&Li܅5mEeܮi+}GzC';y}A'A^o)E)y޹ޫ\g-PHzbr|~z^ '3aS?tmugaMsgTRL{Y[YY&hi}7_#'s Xm~;'yMBm9],ߜ[bVnڽW'`p-W#A=zwBk=f *-R#GtTZfW' 6Lzkj<D#_vuBJ0'Gn-xUTDQ{9QLl!mR- Xh64Ӈ'F<1VWiPQnk.r5! ^18}:8xs7l$ި/q1v_e>[„0?GyiwBBP:$’n8;A`GV7W[XZˏ<ܗ2_] zCky`|hc.[8B$DD߽溸XAL+ .~!j ͊|{ݻo}Ϧ ǽ=GL_ čI8̅(|adaׇǵ#/?~?*{C::ub-?oomݹswuq%d[feͺWX*~wGO%q2|K%8.!0.ӆa&tm.68*["ֹCd:4΃wJ#FfUӸXC_蜿axBCEIM4 y!rBOTd6\fM_)F*D& tul!{)#ryVZؤL|@i"(ш=v(M*8rB9ف"dQQCϡ*u4d-e􅇥뜂TCѯl -ve.u0j_3_Xph!hSﲣf(`Fc JTYp5_RUv|EE,P]2([B?UP[Ei!ZAhpm\'ĆLcQwWĈt>RojɮQZ:&"fXAx*?Xrr7$.6b2R!k`LLјhFu|O[Gjl ):#e*EO *|Rj|BC͖b F`f g;}$EtN 2I EzN2B<>#n,͂dqI'0q~/v`4Z,"쮹N僙 c! <{{VrS-Dèk{M8aՐ衽EqqӪxKFhm1 dR1kQq9f&ZUa0 䦣_kSEG?'Duw ZΓXGeVW E,yV%QqSd2ui+&_};^~s;82ϧKǻ{_੷s[ .J@59-=KhK3jyyc}fƂ 6PƷJ mz\E\=?on^_SZwĒ>|Sv|rП^-LMϹ-.e{Ú>__.MN@\-G{|ן>G_~GtG3h _9X8:_}o|}훗t".8dY9-du[[7=ݯ7_~ I@`zg"tHϺO".y_|ñ*u%vgO0ǣc~"c!!5$ \(z6 Wf)<0+9u"ONn53XE34T$3E X`S.tLjd$_aW%S/tkƞ*503QI! Ƕxj t DNˬ()kUE Td򧜖(f8s#"!UEiԏ {+V/<*3jҌz۷( K3IJ-=N6MV70pxّJÑm LceHE xtlLˈK33|m\Q۔0B i;'K#%/Z9̌Pq91eVm0c9n-DC)]gL= ÞCR l[$e$ށӇ鞃WTB.*"F(a GU#)m iΙ% Lgnd%]qֽ93#%6&  1D-}]1S/yWN'.T 4J2xQQ꟤耣d.b7+IAGmAhM/! (Plb&}M,yWK-Ɋ HclXk<0:-bn״=X94KSK&^l"ǖPDNg) ' 9P4C?VǦmj28uN0,!D"pfYV%` `nf @/&-,2+8vFx.ѯ[Y._~oeJ8g[yTIϲdKiAL~㾑ht>wliw$ɕ%D\+k_H"fs!f9::Ok :}҇435n*3+W$vD "yLrt77{]3707i1JSB_8{co8ʧE',//T.z6v^=~1onz ۟~?=q?s:y1dL[3\6ILd$DHUaڐSQ"BvvkF ctysIkƱ=U}k/i_Bco+_+( +P"=mI <r䢠vGtR:,$y/xq"@5ZLIM,&;|=9C>R*iB @&glYN#SÐ\>LP="[A/p Q/I=VLj)VpZD0Ho${ijI#Q& C vMyJDCbV0dȫԒm#H#J'2PʩR "g]1rGdw(WTb[ GޱYM,W0d,r(jpSlEt֍TDa< RsXIɫ#jC?EԥEW[M^F)&hn 8,8ɴ\yBPS$ӆlJKGl`q:,&5A%@8tM4~WF%GsOvZS# Q)32[b3R?ű?ȶɄ޶rWfX:ȚUեl DDg[l*S mMӌE F&KvQd1ӻ`MӾxǝO-JBm8K?*DR@U]ؖ3I4[)g`+C@M fHDArF0IQiT4y {=Z$d֧֫V#A dĻ[/v{ `kͯO򑦳~XcWh-Wsw'X&%·gO&N m]yEҀpHsqvvOb=<:f">}cG/M滓]&xBs411ߙ2 "<7gs] 7>9[X*CFg˝eD 8s [.wO+W9&cG⧧3o0,s> w\HL^'UȦ}B/{W奍Sb߰vQ6%o/5dEXg4~;=:tK'|Ϩ_dK>5踿lws3>R0GBH0WvO?ͷ3S ӮE.U\e6j8Ɉ hb&X9Փ/CުhZWWʭ/!tTXRD<`.!TDoE(Qõ]A]Q( PՈbAox)f̥bebVI(@ODD{@oZ@Xch?Ф%'#eb缴iR(&wZ<( 683za@&@!U #,`ѥ* AiEY11#2a"dFHcVrs %Nt^4QvoD=T Mm?\a&FZQ %Yvb?Xu[U :q ss|6©"dD:Hh s-)Yt1 dmi$':SmE>S5*#). H4T1.#?7NH PϨ)fri9" ,)ڸ v(hdy%\N̈́]VuBJSv F+/8Vs2gjӬvY7pw*b1#oտKnVITYam4س7Ql݇Ka2;﷢iS6lAfJ/t)N>?!C d脟@IDAT2OΎ_=pkqiyͩ-hPN@S?<o.Ԓ\j6c-b˗;s76g'q^_#O\i31߼8|ўj7KEY*ظyOߝ]=]`l/Fы?zd! i^S<}/95};͚<_}=wkw^>|OLoe{xоK3M^d)*ST;n)-}O~} [pnJLJ%8b s 4;{}cxvyٶ1f %5gz ;c%JG״4j u39/ҕ苛_mt`" k "zh b)ېx ?I!m xT8 z8'x@]":'^8LS`[Ud0! D2BJtҊӬ_PXp$yX4 'NpLe4 y@B$ޓ0b\.Q "%Q+rVf(=wEf Br%)vWZ3o=,eYgKKo..[> 1[ O%f\X>(;Sӊ(>cI24Oyh& DH.-ؼ?Z߸ۚ;X(u+l>{|61;爲tj=q|v;K-mO>d,o)kq6bmꁇO_合Q;*`׊g|_Y%'KΗ_s^5tĖ"ir^$*]zw5j>sKk'9a."jS^ *p%+/ffaUOp|6==|jb)ɥݗ< U1O7n޽Ǭq>?;NRITr|{w'ǬX:+ѽ 9Lf?b/-pyd=9?]>wӣ3.70fK^NgP|fvaڳoxe dogXGM䷠7;Sr痼IvG>y7O@/ngnzrCu4VsU=vRBB BhkyzYS!u<] ;-"1*~R0EJ!tdڕ\|xERqOBD!V!06!v%IIB̧vX.4k]E"g*؞V8Lc䒎cL/h烰)z[SѫPעhSJP"~U;d E?joFtfx(l6͒&(W);|IS(GRh-9%iJ%/IxJK{]( \Tl'0)"i9ˢ[fp&U 0 MS?,r*NeBedAz#ҦYV*Y)锡[Ū 0UFh-5hC`ZN}r3ɂfQSh^JhTmx`) #"2?6"{dPhRJ%qAKswڕb.y&Jd) ɑ.ЦiB`1.!P M8F`-DU(f )ЌbR+%⡬-ţmwleX&ZiW`ޱ4S+[+]#lג3^7!b8}nCP53Ph O GB(-F/!=aLJaj nܡL9bR_kvI҂ bSxK`G9XgUwM[M9LӒ@+J9#Q`Oy | uj>w`kk1b+9Nv!*-gPfΛE {/֧>Hv_Hg4šn۹<)&l;͛ Y3^} Ӈz0Z|HF0{𴞑\-^ fxnk|nlOX;=@how֤ιvKKˋ,a[hyw3mk,zpNN2!X(T l('Rϳ٨w?Yqsq:I<ް`WD{2d&woz%P0+x9:P!d&p[;v{w(tkókK6]XlfbxrV׺EDi5;wh8[mK%y"#Pfh 1eօ=aB\}f{/d͆RIʥ/{EX=9;a@5yYv̄S#%ur jZe NabqV`˴қE<h7̺sJ0$׃L `/LW_Ʈ|ۥ!{\XqW"4#LB[׬V*" ya`c YX@Y".Q#WjGSAV|%EU% zq"h%1O"B2q"V)k0E5f%5xLL D%\CWDfQIDb81[%NDR6ߐ.*Dnр\]hEˆ$F9韑Q5.ۉ$OD(RGʑe$Y,L ))h -b*>3(fjS%'AA@UxdȊl$/,O{j6ES|9s,6ucdeB_e5; KmPp3ƨN} |j0.yBs[F?wiBDDUeJA?ɦɮB$TVi6RDK1#X!bt!P"ЅB-QJ ,94ZMʤII&-`OW~KfNCn M ͛?xNNͽ|]c(L&'iD/ mqYD0băOS8{/w,pIS_=^j̶aLl,ݸяY\^@*"@M\ wv~ _y#櫋 u[cd$~krqp^`>l򞀶;q1 |>8g[3HoXYoG~LڥG{Qz cYĝElQΤ,Θ#?bW 0 'w/W'7 gH}}kT +I0BprYzcf'lA2fl{?zdDG_ɷg?f˃7ק1ӟ_+7)j o^iTSW7>^[pp7Ώ_K+y~&T b b%6&9r[b_A"BPawRm-tSdRH%ÙդÓkԝB[gVxD#I kp@"&}c \*OQM'HQ!bMqQ˓PP4Aைr[QbUebK1\\dou1}83(R]aJVF\]MpǠCȮ( kJPSW>/K%O?샏G?hw >v> lrAn}IDrL¥<z|fJ>K ^Fӗ烝LJn27zj>$]k޹kwgl yt>j.nyup)TE_\,ONQ3*G{̒^8a/2>X]{~ZƱɔLKw/Gss^=Cb8B\Ǽ4<^w;Mʹol޿}鍛\N's-~id}Aի_=fLQ> k1=}bh;z~0[h/ZE0j>9v"?ڒd6Ʌ5~ɬs` kQiReU)XmFBbH~)5vK b+Qzh@pp2/d:!3;td *ՈZ%+J.86# CA7ru&/-ZKw\t'50IF. 2r!_B:\^_shS^#)(R.YUiPK5?#kH0;eSd`6$xJ,Iiu =&2TYc(ARѮؘ 8`$NQj^ *B'P*^Pr0QV: 5:(B -T!0r1GQ%V++\5SJ3%`z嬌wW[g<5tƖe|ߛ<̬\kYEUM1(y%H&C^wtvN9Ӟ#vXؑOj3zwZmxw[=4.:T [ϞWO[{w?][)xcބ Ei"[ӌ ^cUN~Wt|mh^,ܽ[c0ӹ6M- *RUpud&Nu U7ѐi bF2ʚZ_ܜo/2Z_5fbK{vԙy~4yh0U[ TjSIq'':FD8nL?nA9햐 N{p˾Kr]\^{}ہ?P O&fWo, O6?A{Ϟ<~RQ8-q*fQpx{Om\[vTKW cqdpؾ~wv֍ >x6$5 +˫,V֯?NpwA8ߺmqK0}lLwqܞ~orz[],:{=zw_=urI)tNIskVJzKx[D!6APdU䡂]z+#=ZuMu~]5iQQK3`. XХjɑL6)Pdm!w(2*\HAT% bԒh$~mR>+N&Um'!VnޔR.8f;2Pir,C0ƟGVJP(tؤȓ!H,.':`HV-UW Ϫ=aM\(z4BRS(6c"IQj'Y`LRۊfTe(%@^C#ARDa ;llPDx!ڡ:D*>%㢪؝|’&o' iɋ k:@EGUgg˾̷ggj+ޱ*%c6`O}>w;iՅ3w  Qg'n|oڝM[Hxt1FiGߝ w{j88=>89NvfRd%/P~vc>-iRKl -e9l/Y_xtkhЌM".qҌ9* j3u1Y絉h8]&7J1ZҐb|eDn~ȼ]EМ\ R:]UZHkBټ_mQrz@%d~;+.,-.NM #4SV7 ,}_7O8sWW{G{ d> 3 o0︄/]XfZN1,ݫ}uf6h/͙ǹ>8I V((, 35Zq(cI].)"EɦtzHTF^ ٰIWDTDOpQ`+#0$-.u#; `4Q9`k 5(`RFxz24"u3#M(B|sDUfڇ~PӺ`yN@):a!("P#:BRAW\$`dڪ/ k(疋]LO9 ܨDWKq W)CW)'A|nXgƞ(7WNiEkFML h jJ(5 $坍sSࡓT zk]/pO2O{/u ARUSQѤ J=a"|,}MEGZ<:,V[˔-a΢3E {\TUٙF5^#9@f) 0.è|N* =NyGx5FzDJ9EGF~)O"dIgr#̺ ^) $V(@!ХH|͑P@ґ{%:, Any(&#6- 4(2C1?;;8fsM歛?|V1\ LC0WwߞX`P_BUӘLav2?~u[V,t|?d="_eR Qw~;7˶>ذOv1fŃ'O~}Qe[6ؼ%su@p1;NDۑV 6}x|_s4]!$8鍆K,]_}UX*tri BT!4't;,20b_&lu<|lbnqu~ff:yN[bIObd2; [,Cs̴fhCL!JPgZU(<$05f,ft86q}c|p~Y>.odoXƕsDe{>orp7|CUGq{MWDtXi~C;1ʚZkpt jY{K|aIhYk(z< ƾCbu>2@th]I*UjC%v4$ЍF ?%!%܎[=aʨv tGÏIAVLf+F@ِ-Y<"Ii9S)+c4&LPȦUbe|xX6 \e4W,qNdTa?pEl(tTErp 8!@\ P _5\<+6B$-1YQ"W!B~sRJ Ze)1/p%S*K H[pa ;jBD4d GJIP ݫ١̎Cr) 6 "C [E,mZI#$I<_t R5$F IbEh\g`ZKGhq45R+R1Ď8B`T2ʴ@^d:HЄZCs e&hR>D93OFTDBEZ) rvyG@m`6 ")ESiIY}brg(9LbgATL^8<@DMnTQLw~Pw5l*BM^ TEc*K(S8& "x`jh'yT̸C!ǴE6E^D):!MbNmi'ꦴeㆄ*,҄"2Sdܢ @-a|'j* ?t!ggE4DU;5 0|=Ij{0 x{O?>w 캣ijhpY핕ǽ>Y{x^L ۱po{{w3{ܢ0p[-~]ɘ,VT2OOwV'{[|7̎ia{^DOFy͵}mf+lbK;ܰ8}hz5NϯS /e1Lڼ6?y!xKy9uʞ ~,|sѥز_.AM3YV=$HaW=1ˎ!l8#_F"ծͪQ&uyWLnݜ4\I[^j, cR\ id W69p 6fs#EB3aa2 /ڐ'&jES2NJ 3BNXʁ`pLu x-N3H+̥P]a YB c=NC $J2 -}%)?!.̱d) 7ްy4IAfhML>d/T[+޹W@d+ζP>89UUeix,>uhٸ5e(SƬjTk'}DŽSNÓmcHrՃ/%[E2L;Re\~j09 ?dz:RJe43TVDѭ13X6P:ʮ/#O,B-P |f-4+X5:8{ l"P8(:B&:H"Ӡ"ܣ$Q3= Vjx4l(SIj"$ :[Z딠1>Bc:l yV2_-ɪͲzeT`hF޸TЈ$ePDbuMJDUW=hLybaok}f8ÏӟV# mτa}1>wkH=$.D:VuӚi3m瓣t{ß- >+KXlgw{}=Nt?<ݼO~tmbl>FKOip{t>b?Gs+,o38 !ɋkh\b;_ACl:ųsVaݤ=_==y/_;ǧS[w=txOwm~}a>BM~/g]ƨӬ]J/&GLEg'˷溬fL{sk&+2hXNub\1Gm-@t_'QRjHC hĭ*TM`: 9zلɥō<ݡ5[XA_^.,-LӼ|{tEbv#ɩDdt{|GYn|;a} OK'OqBҨ5Xq.^\99==[^^{?۟ݻ%sY1 Y*SGO?W_M?\^A28@4[n@hFyGKpWsO1}xյgC^iX,.0Yb>պOw:,\_Ayk: L/-2-,#6 Vs!'޹ew>Gzr,R+Jˈv;39+kbVG"$=ø\3ML:8I]w#S޹Wf&[ Huu٥EG3;kx;]&;(?|+#{uLɤ-ᵫ2&ӷ{b|YoNO|Ij&Vs6+x7(&*3A. ~[1.g's+pD yǤNg! S}`-v<1G8.#IIց(PV"'E vId)W%C@^>䨦AzRR 08l xէD8N7ک` q-OPӅ@@MT71adQx$ -qR)oVMد 6l?tuD#ʕqqAZL6BO˄ndh4k6cTYF2(8F_gXRG B~<rCQC |rcEY^v" GBŮڀhB5/XU pHoTI;ykqX<4*&ZH4QP"heDzv([.5Q ,,R(DwLA4Y))ͮUMFͷA+PUiVxr8܁2KД:/w^ln1ߗO}9$k5߭Ͼy WGzW=cͻ3i7<5o/},1O3K9z訷Hw?3tx;yػqƝ[ﯿuf'F'*s-E_7SY9K=.ٿ<<:~'J$4Fr2L?NWB1V1ahg.gߺawbvn~pv1"1mWLΆ*m_[]?ʫ;ãₚaa;ib f"(PW͆K$δYN6U8h[NeɎ)B9!xܬH#S.Vfg<ǀ˙9~ beڳWf^pc.v/iAV`Le?ndWWxA|3>K0?w׾8;^1B(RE$j4t'o-q?u SSf̛Eds\h&Y{qhC?1{ .Nu:=Խqu ZAHyji 6^SFWg~y61; ' Vd#'nͮgNo^c=%d< yXjnxN''v;=*)͞!7X9禎9C(uhLVЍ:/.x9VGGIyC.uHYC,BN "Nl =5em7 5u3rfis Zy?$N_<^a[ |vP &b#S49[`|kן×/YrpOL^_'{Rkȉ#;)RsMӉ֓{t:-o ksVi^r<=k/?W24SK/P|OzNP AShql4-rk rB5rh B F T;*qĩBc kXv%Ɔңb>\59۸! :I9Qe!R$G)*(LEV C_jL:ʡa ʰ~O\1.QߨD`NM )Je\R:T#5$d5P3*4!NW# ]D|֨jm0Tl(4{'xŒ)ʐAfv+)/-HJNRS"hfLr$qDE`q&FUVJHƻ ݵ͞H#RtTL*D: )-wCGYũFjUUhV#Mj/6?c:F̀=;?e:%)\}_|ɏZ3Z|LՋ<.VoF D/O*Aߟ >7MO_v}|gaE +乷%e?jo}'7]_^eueuSif0l??={yÛ|N͵?џoTâTZIRI*K ?,,3K³KsK6n;}x{ ݅qp+qFofW.{s>:#ϻ|XB?|&YA4fu}RG` ZŜP ? }Âi/? cM0D#W)*4zf~)*+& o~wo:f`OXtvi§HhO nW0L!} A]ō\=bDQFT)6 k! [("~x񻻲~W;OvB .^= +ԕ/FNU-$y=(ڌ!Ҳ*j@2{YI Q9ܲ$D *7(rapLj¢L;Ja Lǁ pfIj4J! [$el7rcSHQ1ȤAV;]B!QF8%$4$p8#$G (a93tl|=i.bdxjUA0 @qHt˟ T#nıp+ɲfJ )xgj e +D&brjrugK*84K{H4lIs,-4{/nE?&+CvG$I~ -|z^1t2$hSHgKo)V@EdHG0^ل Sk !0<7m%&Z̅4MFwX%Ķi7ʏNb(_B@wsaA?Y/2͗kus7g/ox367l ^>ߜ +h痭}WC'+/_"|*#=X}~x1:n/ί,c[İwtq~|<1%o0} Ktf;aH|OG;/^>vx6lxV<Ǣ˛?{LN!oʢ,[07Ȥ|l=yU6fK/uVo]A֜9=15kд[A3/QhF>|=}Ȓx3ĒgE*.y;1(]pjn .f|ہ`f|30ACjilp! K1A9>MhyOw>r%i&]5uVZ kӫ6吊ӱd s@5ᒑyG]Y,ÿl '˝է{O|l j3yZߕqEshp7.pBfk(/@@rk~cJipLz?ܿrtrxy$@x9_#'AoDoi3n]~i5 gid$ E7b'Q 24; gɕ_+ aU9^ɡ@|5]18%xO?NhQP8%^Wl˶Lר+xJyV^keX4PrUŜh]')DC9嵬 Anݦɑ*,QN r-e@a0MP" kmceNi.fXN ,I\us6pJaJbh5ZBw<ȋ+J. Sh6e61hA)Bcz`22h_M9&Ժ=iiLA؉}Tƭ+ |!ajN퇾z?f]))u; W4/8Ԭ񡣌7xCaʣ%RX9K3k"4/ 2y #P$IhGRQ-%pIP yjSDcN`+;a?3_ݠ~i{}Oa182v^=[_OzB孏~Od`hh,Z]w\=?.jݜnG2O7Vz,8mGGϙm\.7́dMπnl8`~%aTǂap |y~ "m 8 @l.)-|/ COa@ھs/U!0R+%t\ b{Ng[ӬPĤ&MOrÚɕM"Z\I 1GKF[#FL`IM*@C"~hDP&_ɼc:8<[ZXO x >֑4^o7JwxZ8cM i?"Pާ>LDmźq~~v:3uq~d`̄*vpGF턡cWaQ?޴I:-2"ګW6ݍ )ɨL >7d8KBWu=Y@u;)~~;]>?x lA)&9o,S;W/l87?>柋on5z&TXٝ񸦻kxOo:τ=wyE 8x>66"bKѧ:i<%ȇ 9gATMp%hITAHZ\س).؎#8+KB-Βrc2+Wb4GH_r4Emf˽e(HWU[[1 `LotwIg{A}/PԍϖW|El3u?"9^5MCo2<\L%c܏yZo`}lL_@fRl'/6޸&q#˓~obw}1\>5ܥ7/ @9p-I%F;ؿ`:*Sx_ugDdtم J}tOƴ[EGwv0 Sm;s<ɾ\G+8`G&QVf3 RT4;ݨU3=娄:T3 =k Q}*p6c")ɰ]i.dZaTB["M_ҠҍMbdO>Hވğc *Β4q."9PBy@ \ #BB#ٷ'*p$] %(ZpFE&H% B\`#NJ? /#NG9鰤IJ#+wxMɥ) 4{9: 'h HVHmvY $kXf) 2ґlY Dj5\6IU+Gjѩl{L+%.ƫ -2ѡbjHs }Ӳ*Pk_ړvtV.2l髥oHDY>-M_\EIPuL~dq'=Λ!Gۗ_bɫR!(T~Y5l/afMgL/A5 Q1ҲI @Ut@b]4/Lj%8De*J,E?ȊeH_Qy݄0⸕*[ XYiVB9r*O er)#-X{Lzu;Kŏz[_)gT*FMgͭO~}sx^-qp"&Dpvqeޫ]w7>ᭇKorǸ1<~}oXF- X\ZXև?w]&X&GnxepϐVthtn'&θMr1Lvɛx5|'O}юx@d>I"D˓Fe.޽~!>3C,\z/F>.oLM/RT_ M,o[Xn@A ǰPYeIMt'ܘG+Ǘsݽg~yVi1lpx_voqe$Zӟx੄MSEyqaW'~p^/ 9R-ʝg~g;T3 O,vX,s/\GzT"u^ݞea>~YY+My ct/i*l8ҦW>UyFkj~jFf^;^}O; VXļi<ihd0AVz%N"H@i3[FZmK"jbPiXvR43 {mDB mn(!cJ%`d&1+"l4%LRc,MC4!\TL|WWb(4,ڗ\hj28MD݄T4l뀈F*)*4 ncI']lQM"nsD]0Wf^Yc,[HuL5J&1X[h LǾ ITDQC,Z1lx)S*n2Va`D$0*Bf%o"+aϛA*eR֠X 1Ņдn⟢HPdx :5b7 _1K&نnN8x6VB*5&E( >v-zEk`XFm &v$K N$XTR*ޘYדWҴ\•vfRUàdO=t4AAO$dhABDϕ8 #3 PI3=81\0#$â-✀TN#@yQmk[ELQA04%B 3HI1MUL$nB!uT)+Mebi4HUyJ(9EQ5K|؁ c|K?-rT8Awogkgco"~[3H7>[p)Ӊ fSc7 ?~?g/=wn}غq;LJ O<*5yjt='!;³ZoMJ6)K vvĻ[5+33~ U48&xS_Tlu5Kn?xCU3ҟR]]m-/]_Y{gosWЦӀ-՞ ȗ[-0;2*Gi{&۳ + m feDA RhvËma őRbig r3!eBAT0–I*#.rd=1:+lӞ4ƀTXFPtBr80a C$ S ᔃIX6;V"qQv9e]}0nX* ƒB2Y* `VʌyA52bxh(@eʤPd(9pjҐNHA `&X"˰XLKmY*W/9k:22Ѡbq:թ YfTj':84M(l"Whqh5j\b 7 ( \hTT&" (kuCP#t*8O* ~e*2Q>b{ m #Rn%PiT!ˎ.dEkܛuǼ*pwc%b9sW_go{[''8z!#^}lsIstOf8mVpnŠ="lQzAbLM11Í6{:p-' hٕ$ATܴg4.=QIb2)3\ӵkVC-bG1#frCied,rbMx!h;\_pYX ۤSc҄jShJ`NQ`}}R2H9Lmnn ?~ѷ?OK7}tt@<,0Mga}w٣n0R x~4A//ݷ/r~qwd2k sOf,-/ dyrb\gq~Sf!0;>x?}RcSӋv{}?ə' %D K2֩n9k/W31~.99m<)6UwNO[G7ddXVZh5JDbå.O.=nx#s@ݼyp:>Xp0iSR=񰲈 њkpo\!jnF{d:k$f`y~3NxRhwћӋ9/~mviZ{uulgk:$^-LM-.έ]_֋)$vԞ.nf&g?0DE8ͥBnnb`lF-OU~Akek_zəϔ}-lE0WYWayYzwjt>na(WlטFu ԍťBκǻ3Kk4*Hlhwq|{}wow7Y }HK:aצD7%pr|o(Lŀ14VU¨èA1&<%dK¶xG \y&*i _'1D-+biDl} ULw㍹I m>!7\*\ʐ*\(Q.ק.&ɐeM2X;6Rj~hp>1ݐ) kn*@T30Hۂ(onӡX@&/>NkuZ@(:RR̈́!IyU !xmfՠKX(e AfW74GJ &orY ,rd,8YUnXjL#`}TWK`7M`Dp;"ֿx}W.B\t)UcbH$ uhD@v;QfPl( LJtϒj!bzJ W!JLɬGiVl{eUʈ%itgFEP euF4`mMMʽjd+nFc`P@%) [7ҵ+}0ң0'Hm8\Aj2Yr<ʵ_/,򏷀\{­4L$CX.3çsϙ2Qf晒40 YǦۓ`/߻I&^›\1YlYJuŧѲ8'K: O f;9NڂOAםߏP5 KećovWÙ[wW9<؛C@tY+#*K!19[?-:m$UfD]^R%miT%rkP31v%+M"1Ӳ <YbQ,JpǪimahFlPAzYtЧ &$_aTѨ*"927ZWaXP5qX fA(c.nVJf!Q5w$Y6N؄U\f5K۵ (R*%F V{$Ch nz@rdqEEV07QNl-Iy@*_}C 8/Gǁ$Kq2A _aa*6Cc*Gw/i#u-d)_$r; *T/P]͐ǘ7RQarWlzuR[ꯕSAs]2ۍ3%)0+ZF"̠$BN[ӆSC|IWRRLׯ]pLRCb.'`Gr2`X-=<]K-xoHd)-J,oH_X05Re =T T&q7g)m4ui@Sr =J}A2NsRV׶pVSyqp`o`'<N{7|ν/vfP;;ryTaoo|ǃ! *;u&;n矷t|tYjo %M%uHJ2I P&N{Ӄ ; $6YnϠ¿YS:|=S&~th5ֺ{Onݹw|NjH?XRpk< 'b\ ~9 Euf|`b?Zi^_t[:n@}WITRP`A3\|ph:Z<l&ql4CFݪ$(#{'jp<tQB[Ҩd`#i6yxAI0}}5s`GCCv8!-88p}HGBJ6Ffe>im< jF m ͺL42A ~㡄9!G 䭀dصĸO4BJӇ(0JVku2hO[oU=M;uk *00(BӠ,k_ڑ߸H;a`h=~@Zj)]`Q 3FcuLNS.@fH6r$H',VPguҳS;ur[FzA'Q2āc!k7'-EEc_W0,3qE'auH\ ѥ 㩇rY'D_ݒDQg9@v*h"ҍ_HI>DJBi:%TvI\#+3ɔc1̃CIŷ0(J%F P{d+rm5jE,RM}0A?&EqLIݷzhF#^"ʆ<Xo%BR݂"067pI@Y-IJ'&M&)Z M;Pr!lBA)!NW LYC; 8иe̜3hk?ӓEV{>{6I}^;X^X[^\1ݙaJ@N^n>7_2ccnyƃO?o8lOP T*g': 33$'W+vk]PS C -O?;_t q-@M &l$ɭNƐ+k;Ɔpek0ww׫. @ sO\?@zfS++|D+)~ƃ[r.3gLF)vIҀD[ ^X5]w؝䋞JCŸq#.BoM ac <'%x|uwϞXcF&g:081,bHZ&xă/103ޚG2+ipKW^BzbÀl=89)FT+R(Csk80I4Gk7F(惕g;s3pf6đW8k:ejm%lxP`R"08sBKJC\4@%P5e32Kwn袘\U\xK d=pdT[l6@IDAT(Rd;fnR4iqFc)1DQ!Z^V0$- *L͟ǁ-?5dq+~H-mR(QZ^ne[akx`22*u4B! qB&WW*jJ!FB#0rh&ĊDpH8Ћ9֯TʐKxVU(JqȲZI$6rN$8q/cEnLARt.zY+-YDz#^ gJ}CѸT`~pIRS&UHrp ggw+;Z!֫)|03IDr˖miF˝hDT`bh"!I%Ґ΄r]dū(jg;L0 !E{+[\zaג7h*㮜h=\BMb6Tɫ !0CƩ "`V*L1*EA97,,Ub#Z"FűۨAH V~ES/IW?Q1 4MFLGL*M,c\D6GU꠻;O5A?/^\Wg?~˿]|y3<]e}}gn@1 ޼urփCR,afǹRRs ։ԓY.5fa K;u| 4*B0<Yrӱ!'Aǃ/x43,|3묳3\uX_l3̹yypG/._[1Dz{~O^o *Z~&j[<ϥpx[8pLϹ/suam qm;U h]5dqSxf5]~ *d =*/a=??xe\2~ ߜ\:mAc/?rQ2^ O jLm2gifhϮ̝G]fCe i&Tld U)k;ef-^<>ypt P4g!kX]۲tTxVJx5G$|_\,~xOs_͛~g?;?y!-6|/h\s! ݟL!|nwGͷ | ^ywt:OeL)Z7\5 sfO;3' 9 )_ 4Gv;~}H~{|0Kgہ"47}?ӭɚ\k3-x͸œ1E6MX AXpc%R#M3%tihE )*iF`8sN%|{qfK1r^T1ɾy Fմxթjf_ vJ&lp +s9sK|I,NJ~T_z#ōD[KFLVPnԓb#j kei(ו]_!Ōn% 3ed!V6ٵbЛHAi^& 7qW,VPB`$h_`(-3qٳVWeet%!!IP⛚b,ـIq bV+1v@5 P@HD3&^*"!~CXmC@RV$tmb:9 YQD4nF>4(go䢫fd:E2I-eow">T 7ԙ`$*aO#\ },tPS h+$|GZ.#_W*̽|~'36y>3'H\c~oVg)_X#`нu{nh_?Oaogr˕|/y7тJĒ`;W)A@CяIn]\\ Ȩ9dX92xnuO{ yU 1ZPA?{]^_9.e«&gΘP1980o+خy`ɢP%UNů"WOpWܬ|2o+Kcz|9wK[NG[G9+CֈS/zjp՚c;-UdX1X(FrQ6bD 5x^ S O=zg'^LͶf=($ˆzjvrVc㐳}l svF6걥O/3z>B1, h!!oWoqM3fA\/Aktlz`wnbN%料 ']^A)z61?hM7hY\Xrf4fV#ig Bgvt<}ly<pNx37UY'Cnq)=~:#,;r̆=*pEtn}ʦ&ʑN,=8VV#dp e!QU%ؖr^i=A8G&Jz`/Cma&HD VC*7IpHe.9H@݃+ţ\TZz4~kB.} G䗌. Dg%w‚&rM沟 270galӆp{ HjQB_d6=F:%-VJF1_k T/cn$Z46\sDJZALǑ^kVtwQ$+=74'Ec&! #CmXص7 d\uao!#RU3Jqmzva2$妵Uzₜm6ԍ[*S/00Kr+: -XX% riG*_E"D+,ZJ; * v *T_gGm)łз}**x i#>E4H=0gjA8e@:aãa??s'_|&֝akhBsxBO[8,?0ƒ~ftoxb N4S! f! :|ӓ+ k?h-<}ǿ|? 3>X$Xj?_/}O\.r pyq+"1rPWv;²&f!H$|@d~'%¢bۖ=Yf~B J̨A-3$N2 5#=R϶_Z.F# ~"\KVC?*>0K-h6Y*-C |RYws$.2RUa0fJ[Jn84[x] IT`tP(mמA#'iqXzh*mmArV͆>beʿF/i!WC% "u-R2FϞN߃Dԍ VE)MR̬ƒ2mvJV_7Qb!Ym h2_e Um\IW+x f6#jy2TUDXٜմ)bOm!eúbdf D-se!uDAglvg_'Kǽ^nc! 3iOyM*3g&GG7?cnmziRbj J7h}74xMdPܚ:9o|򫭍cL3h!ǛLg:]X~~2ȱ{'n:/sJ4 u֛EHOxsq!xW2㤇ڳG YjՒ49*r/68,S=|tf꿲jj& F4#,Ƹz)*kfhavF_K 4Z<5Ds*. :}-gJM\_moͼ=Tgpsd_,m%snYK1~,Eȼl0awI X/f הPK*t& ^Y9=ivr+^BČbNro+;ڿ]3L=ɽM9M]9f 9cQQ .ЏZ`A:ظj}n{l~$ۛYfnU/ 0,YUW_]G4񩙹k8s?n{g}C?s;D_qIeӕ⠛.4cC#Ј}oh$zqgt1QHtG_!Ҵ%}A2P-?ద0Y WP;T͊'"nu@pVCva-A 2֠ƮqT$ q%'+) v_+I:y1\A4((To~*Xod@@?ӈIok aM4!qllJvM"i шPiu^0c"FV'Ha%(9ƺ2NԠk$TV)S [,=oECռ%5Mv)97"qPpLL$gOtODK ,`7ؒ ˊDF֊%hT:n /`u$jm)Qh SAigv7&dд"njq`Jϑ8,8\tXx t7 5g)a_z@Pci (rJ;+aLZ)ڢB Z{ mRi h2%O0,=5R! [&@2Jd7bhb`I﫾FY#n1.Uv5m4ɢRSB6d c4| wvv66^, zɸȕk}͏}{|=b HT`hk0]o^uqDչՃi2I2 w~x6_m0HYt Cggi 1] <}nvMY(;trhKBxɕqƋK{ۭL|gFa?%bbQ:@`+=L6Vq/ɭ;['Gz֮-F%-5*t9 (N+]T53]?>9Ӥe8`5;LtrZDŽ8WKң-g4ڲMuRޑZN>(m!^^r9'!ou's-iMO[vk5l kD,T&c'v@Mf=zϰ*@tfW-(n7g7ө9r#CB =P6?v|孥[\@U@11hxCвeMp>d|8vflŵ[.̌O-C/9R5-p2Ym0vbXlo 3;3;|ocF1feYR AU:i!CE6e7&,yT''V8SҲKS+Bk>r'{[lCӓ.NN;ϸisk7O{{ 'K0φcc\Ý%/;崊':3(Ud~#c]N4 0t׹웝'8Oss@UdhF)0vzYkferµeNIBs.0!zRHR峆ɰ_1NRNnG4r?~AsS&qf/5aQp6H"Ik 8ْ^z*-w'A_tXrHS4Zq4I6ؠc[t+@AqٓZT"VzkX@}b巺pɱd8eMPŃ ;l k22 *P2QF 9_|yj!#]aEC]7(㥙P,\$Tb;!rV)W^2x6X"A,nAB+# 2FQM1Zk 6p<)ի腆EҌBM)<Xz)VGL`e]1J#Mo|XGH X1NmpCt;vt 6VR{hLLҒ5$sTdCl%ɶ4LU֠GJEA%% PM ῴLAL%"|kT䤹ʶB;O3W65EIne^*FrLfD&x$+BI8u]KD3#$l4$DDSIK/ʀdHP#YYDF<t dni8lFqT0Yҭ )eEAךabG KOnemXס5[կt*-D| xA@s j| c%l^U,8م"ZNZ+Vγ^ˣ~{|ĵ捏O_=)yyQ?wig{lj5۞Ϋ_NN]{i\\e 7>^ q04bHU)rBC  BO|vpZo=?}slz@ΗU rôo{=q9?>*Ln-M3!;ͨ+.Ƒ\`*%񂋯[x쥏mFG륱-XU!FV 8Apי>s@*TO&04<>ͬ-0K4h]F6&}O*SF9ʃ@>x!#>)Z5?"f]ۘ''1WFL`{--^Zxa{˯eש̙49Aˍd0wѫPi2rVNN'sקyI,jbQ}f9œ:ù_6y+!32go--.6679].Us֚)@ Jf;Z9 b0\si]ʵ?wElDM﬘hD%g|u(AATΓ|],$7Rsp[tWUV|s@S&|LR42n2$O+$D0rj/6q(\APa3ʎyk%LBGgqo>*%^! `Hi|x JؘkgBL: UaTIΤT VèFRmYZNUAp(Hlzi L){rU,ib_i*Vԍ3!j)2> 2_^RW&#vыEOa;qb\O1&rرTH`4P*CR0'%"EiGTʠbz…-}N QM \\'{p;k>?޹Ť t\9`9yIa5&7vgȝ<5ӻ>okq÷.•ͮ 2QA 1XUm)R7V&fۇG/>%fp 7r=/{|7w7{{`{Dq6uŅ-g.VӊG6"c2h(W_A@ 2398ĀErj咋 KˌYڔi9Vnon̶üˬ$uɛЦח[qKOŢy&'3ګRN I=jGaFC^Ba_pqyp^1S1VΩʍ'zX҇ b`8L(X+DԄ/8#/mvkګ3\\GqSgW\ O#QKD׆PT-A8~練T.-/~ѝb%NUhLZo!>U_ۻ_,5]PS/ Nxʛ:ջwţ=?➀àHnp6XE 6nݸqo !mC#,\dh\ ϮxMW~ 6,Ɵ\d̛ソvss?(J:#CTTД,*G=:=.U@%9`Uy%L03,de5*]k4adS AV6W$rcYVWIrh/%"+@qK݁z; X( ]dGC%hQ8Ľ@ƿE} 1JJF ؿ Qvb|)méFF|Q"Rɳƭ>g.G aXq5O1m'V>/{Hxw:g;VF{#Hܥǫ1tz)3[ǧ'Ͽ>|\H#m"x(d=ekηl˳`K^%Q~@IDAT#n)&r Ct@(Nsvg϶-/[h,|ZvPG1PP6动rQoZ(iz' cT(oufK; i$7Uwz,T<(Z7wx2V@W c _ܓ1[hw'8k. zVb]JkKۜ ]U9MBb:}4A8xrqe7<;B`;s &?v{六u4ixfY] 츠)y̪5õ[[l4Lzy}@{GRCfgZ@lYU3qBӂyi|XiVGT,4d (4 Z=k:=Bݪf7h&!v` nG, iS~R*4_ 3Qn][_l#\)KATƪ2 ݐ[10WvM{xJE$T-|EAeMӕt~R~F^}?y|1{ipW߼ G9S :>}fJI-Yxhrttͅ[kY ?( j6b"lP0i/?Xܺ+8[ hRq 7?~|&ivZbUϧ^ozr#v&9ԦqMxwv&}uPA OM=X{ {mr~nd$^!'p #G691a9Zոx:53Ó\VF| E~ϵ"25984 GΨҨDy1ǽ=nala|z'eAr8zJ|$_ܚp$9|_r2!`.Pg|pb/qAHMh(1.VF*ҡjT#<D4I En_S:HpMNT)rZV'ZW,Z>:‚Q`Pt#}&,/P\b .ӒteZ0 ̎yԭ.,2A&a?4[=0,U0 AڱS'm9՛(^O~n'8j^FQ2wr0S<#;77f 'Vqss3z8q Ao[ bZ #"pwӽn}pݿ+'L =_y.iܪ!˫K'\WCcL}=;0*"sc/|O1e^|эD3bV0s58dɕ{+4<[/Rn!m̉L_tWp1,6#q4+b4RVuJB(Dl̳&cGhbolDt9+tB:\)OZREJX `Ă)akLo܍.K9%I` cSGC9#[d>AW .s(ՙ^E\ܕ`;EWH%SPo bEIUM 1 Knn5.D FeOmCc/lkIvS*fLhfYGְbIUH-h@F)Jhb= )R~Zo53^|wQsZ3X[/wŗOl@.}k{C {Lp_2 -cL)!>x̠ u٘U&''q&0F'g DC1rsd<<;<{ҏSS<*zosfqb@dCWkw޽xT s3 Of1#قʹ!Vg\%PeуG?2r6 ,{opr-#Xb#qbqJ-vf%#ol;vy1y`+ j`j=ZX\[]4?!cUw 8C 4ð4\PX.+B,x?- k9ELYz?!uo {mdx2ʸvuB}U Ih]^x&#-/c=u@(c]n:'sW.aWRGx[B*/ɡoj t`9cko__Y\aŗp :CzT3njeGX('>0Kw8-4~ھӱٖiolh! g <ٙ_X~cZ: F?J[$}Xs>j,yp?=ݢ  CGl>HO9c6~l:à#cA)3шe!t!'CKc$ L]SȘFtp\) tR,R­ZEĀDCSe!LCʕQ{Cd['eTZ4%8uQʱ.t@Sbƾuq4gbJI 3S% 6H*4EZA LoVlfFހ(%ڼKXcj50.Io 5ҐcGL!|zO<[QoHU'hU̖1{5ZYK3\(r|@M bYS1?dS=0x /+&U.hU1¡K :2t@*_qحYA Rԯ("vn?kY>}\m# J ;@TARP=8H\ 8YTbƅ9G;}rwë\̸c4巿׾#^jGh6ʆpδg;O~ O]\o6MNOxۛ7`:G)j4Hoؒi͓riA,T%f8Ǖ[ =w|f|wK_J^7X~q\kF(C.ss$d$pq0$` 0V,1OO}|Q>dówogbtc6gIqr*'T݄< PjrprU.Gs.V<*]ܓ y Đ{ec}AqS`ޥ*#}{H.RMŸOv2^:cj5<ӳ~׮7JƲ\՞brqVFz& 2\ LLmswee!Aw|r̉ jhGGC^]5%x%yk79wﶸfMS#A20 *52V$} T s~(G޼__of\y*db kZ# w'jrs3윝nNlM'-eqq6U<;ϓ[Wa)$5|rBHhLy;=`aГ.<:^)c.Yؒڟǎ@+EZHn"VTY.vhӋrF5P)$)lI EUΑ@-tP&rxAe!_T\eAL7+ ]Xf2`Ri`PVeOTsAzŬrx\XJ[QihTCnȖ!$ .pEz(MI;B.i>Idd1HLhxQ*Bb}|UW0(24'?j ,IF\AY .ڥ);ZX!9#CGIӬ*6i' bM9ip5rPzOj49&,-UzPU JR&7BtMEh-FgL?0+ZUKE;Hͦ㠇 |tu+ Jˈ.iKD| ^ N%6ivBK0D{xFw[0?*MXjFg$G0V⟂-~VwbQ]vH6J|jF1Q;lC!H"Ij(N  jlHCA"J1LۡfT.F4a쩯Po+T֘Þ%+}\<>b./̪gwGqt0#.630l?{ݣ'ݟd)jrxJםy'`ibF"kX^p{Qē*y:"s'vZy{O{NJF^S10P~ҫw'[yY/ aE8) `׆#0h w}oxç,D?غ[o|y%@$iMYYZrJlSFmoXw\r41\FqR///ݾɥk[)O8͛3Nguyame]@ixC=N侞 P760_}ʛ숪u`$<;ۚ~QO3>&@M/&F ^'@r+}ԙq}o--Vyawrefgf|7?BEn>NzW~kesW<8O-FR]4yV#IW<啭oLex՜ $_Hlv} u\<F$Wbc\O&Kkc SEX_kWmIhBF9XlFM!%ԓ#B02ii#e2AA^x1&6r:eAIUPHr1Ita7D--Xe~KP1LJS^$e/P*vbs:$0ې8dd\` [KSSCa>zJ>35G*!ӁjF@% *GbR8r Ej#!qFYfPCv&FHxaH.z@a/)'b?3gn2"LѣZ)#FFQh۟œ)@:_`T  F4S1IBi7$(*"ժ+R?UB0lJUF qDZf?T/Yĥ҆K7.Tk$Մ RRSv`@̆L{7^Һ|Ͽ ȴrq.uqKL5uw&D7 QS:[<%H2];UҚmB+l․(KYrѤX*Ǯxd$E>aKqvTǍPj5 axN "jκ!:jRj m:Z@5-$GX֠d.:,nѻӝ_ux*˽S{tpEl}q0|x~'oz{p1߆Z㐹2=2f6|7D+݋"#K(x ?TEWݓѳ?>Xf|lֹoI$K:@}` \CMmb;sO <*县ii@S /C ^V,z{oafb&@ AWHz W4z@>NI?d>ƠV,9rR9՛E;778.K@tꑝkţ-TК]s31 ^ aɕ+;sFMNZ\ny0_tg[ko//'Nˮ֎6GlyyqŨ4(Uj&&&纝#&L1LU. -&czYobINOаxZ|%ͭQ~dkiȉ}'Ͼ=oR ^Nݸic&`H >M,T(ш2fni\5M@)H4+wECjH#L=TG-%]DUeV,zoa FpA:j [y1Voinel9tdk"N<Kh !@+B3>~BWǹ2$3og=,*t:ƙE"6 KUt,-rafA{է)k}3'K&h̵gO.!âD)cPkSNx-T" C;>{tvzƫ:9y8WH7XI18@^0xѐ g]16W?/xkgP[ M EdzTlhfy}Ю:-M]B:@;;ZS@k*xG.p31vq}Xwy]F l_9؂_ N|~:P+m=od[+bh=|xUß**@/fX ~$-!7=C./ oM㬦adj ;ݹV ҒT`/GA2Fu絏ӣ3nt`9+;GOYx2-~4i 4בHU) =mx\R&S2Td%o{Qk@![c}_VG>5/(PVV#K0Fk AdQlGQ%Vr~#2W0XLYxSB.8\"*iN&ĿDA; Z1~"`}(/nT]Q, &BGeYBu8C,. iARyHe)΄Ϋ4Jǎ?D݌Y-OǼ'\zg#Pvwfx@" YjV3IҰHؗ#5V_Ë^2q9g/>wRq/,,q啻[0~~^3g_0>ZD|ɱ=^wڇO>-Ѳk`tL'npt\&``8}gÞ82,<5s֒_]}.$s"pqvavz} BEoi)O {"Xاvtu _[~ؚzfn3swx}~NCN4f :7Ҙ8]SOsq:5cˋ 奣ə> ;V31lq{mF{v0lXKpgǙ2V{__vO|2ibz?557ݟxZk]o ~c+Ϝjeu'7~2}ίAq.-eFc_J̈)mV:B`r3JQeNQo-񐰹}E[kJ<9ox?O?bT5{GB-N,rdA 'Z5wJCOS*AOV(䄓\\K>H(X!J2V}ҚxMb}Ӑ%-`3Lx#BИG積bʨv.@)y'bGҡL *1C>r; 8^d^LURQ9G`Z!hJUID/͠DVB  M.|9H,uҁ@ã%*!OBT@(-<~Q[qYZ*LAB)9Rq$/lTr@wJT&9berR.` f 0 ,V -^t@Z]+P,]D]E%@Au9AX_9(.31ά_B{G!d ,"eGd,؁c B`Ksfd&zh=(+M$,E4#H#a10&6H6WED bj(@[NnQUlF~UH:``iqA*R%UI(`S8>U$H| kQDHg; "eFrd]?\b)3 ]WWi3r"$$_b 5 JfJ OHL e 5[6,CRD3KsO3Xp 9^2u롦8[jv)yx=/8rGo|2sYⷿY8PM*x$"'[ ܁q[9V5s 1i1^[|Z ٪a)' p޻:z{rvgk \ XG"Qo@nb#TtJ)U%]r)g)g9sϗi"Ҁ%yv|HWj.IX?A~-k^eEsZ ByĜ8kME&]HgUjUFQǤ{evD Ɂв b#bP{ɓ=::#Q㞺D4fx7ی%dP~4Lp1]GkLI [h(rpDKueWPZ:a#*/z*H%E:)(IiIe*#H5rf}{!TM$ \xA% и;0'N߄MH7@0 ;|1b'Ec8h#/= &8л#{«GaW5>y:69scӕ#D ;Sgn=|u,lhdJ=wxbjvf}mk %*I cvXT ~zz'A G"8zջ틳><l]w>31>;=zcunŒ;v7r D{GntaÀwxA꒵&&["X/ytǔ7dUF u G^ I&`K4Zޜ~n_&\ŀZؚ/N1Ƃc"azƇ؅F[Bh',!GGfBq~Az>SxfP85B2=4AaDY;JsѵhG co\{` H2T'Y/RU~aKxۀ^0>`@XxX]Fn DQXQҸZdGIZ9I;aRH |ZCx9<8C"7KT)p>{EHuI, ,V( RT <ޗ0F\+W;A#t4̪tvVjJV(Z =#J&DB h3bj(*emENGeA$ GD̮&H"^ykqֳLTMQQ lFQj bX2񝣢n` JPJm'4Yǩ ,@!^vTu#"bBV#]k* % Ln. ?DʃBQ#C&cNA&jJy"\wKu̒h{Y1uP*Mu0oĆR/+ҼVi2؁`j VbB.l64tghf~4]iˆl1~M@IDAT) Jht'*\K-T -Θl((qIfQhK=!k(pnY%uO~_߹zom\t_<g Wj?U^-{- +oֻv {6^vv'\cŽ8ip:<>9eKŐ6]u9|gvR]Q^yzmS  a#Jr&KN,.?}bmc (ΔQ1d .7*{≠ et_gܵF >{"e%Wr9޽qc} SoX .[ [$ST,~Ug=. YOO&fyn6w5>DNK&\۲Mr"]/N# ?E5ϩuw[\\`=N;@BJ))+C䃗=A-lduZS995vy6zksxޝi!'VDL* B_y~y{a>+~8`i?5{,3Pt`yIfK\g(|:<>e aM] ťx॰Jɕ(<ی]͎ yHt"Fɵ"lq7^He"B 76}@9W xcτ̮nMM ?CO@kW#9&3N .nq qj{㠇 К`OIf! 0P[1H=޸^*;WF<$Fj$6ڈ`+%@NU\]ЬGn A/2QQXBd+jL!0uOiI6 A_UM+>bW)Zr)`@'|]S:`IK.q'%ѣB 4]c:)7I69J$uxjR05BUy5:E!P|$lR`oJNRD0$*) j.z1ӗGHQX#HQ&0%J]ttvCcidԏߞltڇ5 MVwid0_%`myȔeٚڑJ>*~(fMq2%)Za!V:D*X<yXCo8DGzV%?88yߓ.KwT1oV@r,NAcBMp~hmF JƇ-n躃`87t;WKϟH \k75qh.=zt{fk >Uk>>:i;;w Ads kh0q}p9\9 Wd]Jδ>?'gۿ[q{B9%ò\#P|)iGoTȳݝ7 Lon}<;wc1Ss;-zۻG/oOOykOz{'4_^*mT,M f_xSsZOsE0ikaB opds>Ͽ|pLH^5N.?pe`xc.JbO4Z8X]Y[N3f3 xʄw7--q7[IJ>ѻ4_ ʡ(_V)k& g6eA\sߟOwH&Ê8#r^L9Fq|o~ӵ>V ·ÅN'g:'}ؗWuԠ`|);~ do_̞uN9 IǙ@i1K(-I| 6\IM'_?w^[dvv'91$Jmޒ7`$`Y eSvo|i={{Sqks?:b?4P&\3vUѪJr)@Ƣۃ4!dsb:JŪﴭLʡ   B(H-02H9Zs|iM JuTŊQDG> ot'bH\ZÖlţ5 &JcD@ 2X4*P)PYS.-f'O%).%rRjRDo DB8 dq@eBYI-fa1gyi?O*1ظ{O6o=[&sܗ_ixqŋ_?{yԜq/YbȄ0LØ[Y~{][tRYV4<M:?1793 lW+,q7,?tuNyr88wN{>7pt+U @<i,$&3Pkft2s9pi?^_~A269;\XR>079ɬv\T?c VqCꩩ3Fa* Ǧx2<9=GQRLLݣr]Ǎ wXȕT+HL̜J.VgM0گpyx|&\Jxsdh~s{J7qH:M*sڰqN0L3v9Z[v% r0q3xi??=?vcfmVz Hk[5 ,-s>k N;SY+&JE '-ѢD dRؙ̟kOM/TͳG݅/c!lUkA#a :\a~W=^}pν'uqװ՚ucmRfFj:)w-/lr, d"J 4r- 2E*#덝iN҃GW- rPAIV :䑬ʣ9 IcTOWHER!AdQ-3π$(%$ĎH@80{5dmځh2 l/'TCl`AKAb`!:upTA|9Z`Uܖ+j?Fʑ 8#7ٟ2CBkvUQz4C 2slZalRvA-JPf0IRb Kn(HW2;cƒ"~+T9攜RhA)JA__6+VF9|m6yAcDe QdTZt&DqJB+يQaS H 6vCVY0 +3e R#M<cVlY'=Wc,#䰄Bs>HZFn3dGK;@6TfQoeZAEلx -!,/xL(4-:X0y )G @n kD, L yקfZ,XOK ~wvu|~!a\ >purtlo\0z٣b0ɾSP cLg3w|qqs1ik;o;o]Mt:屯?'ݕv/go[7wv^'\5b@ 9*: fXĖOxѪ\^2MfsGy[b 3*rcmq:ň x,4|&#\p3ZE+K1_Ti'c5v0,B%77]pc#i`,a%Ii&Yiן\ٺgzaUʖL⋷S{Eߍ >g 4i%krM*uYGS{{wi$[rWY[Ve^ww{3YHIf2Q}H$IA83w%[)3ۛ6x\Ƨ\1K,Vc#ggf&oǛ_pŷKxN.eYUowd̋(8Blx` k#Eb~=8rJ MtAJ SBFhVŲ@Axk#(kMˉQS JQX[y]ԟo 09"rQFE hnHiw kEQ m@ (ASde4.XRF?dTG\!+_'I Ai[P@ [E$ʢ_uuW:[4Tw&Yz+ EҤ1" xQF' gBγ>?'gR#,:F{/bTB+W\(dSrxi?4Gdf}7:EWJ@LNwO84YIYoxp~Fdp3CUp (<˛˽_Jad +6~eNrz­Fox%,쓟?ӏ+]deR e,Ԗ:,7䮊o*By uڠ#q2{c}sMkuXX"褿=ˋK dz:12SށVf8{3!P|^z ?ف= ֽngB] յ4Vo^X~43@O#wZbV)R9Wa"{dɒ%vW.p݀1Zo^a o iꛗNvW>pǫxz 3ͿX ݩ#`6m ^OddmP8K7?~8 Flnrc71ag?LrN,6<5u=<^\\v͓>;s;<(Xem)(VƙɃۓ7!ZHuuGy*E6CcT\\Mbv ,0ڟ쌎rd1CFL}:N JMn3#qARȥmPTVI͐ <%P#VJr?My 洝 WyS[(kxwTGsњ_FzIeb gIP ߵ2@[ H%:sH\6$-Rm SҕpF:"+#з 4q c ' NVNEsɨn%DA BIF*NHȏ-n VL㱗i3WbدNx~.}'W6~ß?{ky?ռx)[FGFBbj{P \ʘ ϱ!~_?sP1= OOw?=,?ȏC 9 Y<=pgttWs<z@hQ ~y%F琔Ã+?9IL«rNO??E#RJ"DsOsT4pb5ѬL?9<=~$vyR+݅9&,yuK <-J*XT9\M"|3p"h߸Os~%9p 9]{{o{/Ovy7gx[5~띸"/,t&ܷ|}~xz=k5z蹈1M7\] Ƨ`|Ζ҆͏7|_^H;+_~н/~u|lg3|D)N3{ocXLzwi[\EX%7 pbOu$^ς_/ll.+xFefF5>ʭ߻X2PzgoHyzV%]n,whR_d26gh-T·0 f -bsk/`ȯ2LklyRlYxM$;Z,άpk5&LlX3Qܽw*R+5։0v9`e ^']lL M0bH+ -!Ȅ"BcٖH~A2/B(7 P"-*r7 eN]QX*B5O=pdO~|K 4QȦU8"sD\ʁX`Nl=ލI3Ł|Chb-EiѶH)4H,3l2Ct _pD H ųܶHP$QQIE$3"^Zb) ;ZtB}Š-)Aβ! &)$IKt ?(3b岗WuaPZ 8?DCn ¦۳X8Df@vaKTؘ2 jȭ űToS ?Pj  *,*pdQP_/г]!j~Wp2:5p(O+k/,SclMeok *EkK߹j* uN,%`EFqg "e5|'??o^~Phol͌'קhx9fj ͢ף+JP.\\[pT5GGݍ%_2'>#>õ{맽^Ņ1a: fZ|]h JfQ3s6#sf eV PزiG/bjtUP|D2h\z[9!" LR27:֫L0Z>~vz[Eb> x81@}cNg--Gk6ĬXfu*]sKcArK!eԅILRIZU ,Q'ftɊMWJ*> ;NtDi*HBU4hG.mco^K+ E8 Ìj#0YB\[ZVqTT1$Fxy# V sУ˅LO`UkxSl`(" XknY`ADz'~74gcEʫ`JҔKMBsq^B. 0X]0|CzP H4_~uB&NݴJ r!3+kTXddU@[**}{&r2MFNk.5.baaUhVQ @s5$K_LAvHwzHͱ[#XgMxKQ_XxhWM-̒M2 q%$@Agû~.CF-t?yCR1ז;BëҬFa%YįŚǿA#Ĉ&(eTxnU1 K)lDJU+=nGn4@8zl+sbL"ɉkU,B4LFE]T$¦t ꑇX;|xۿsua+W 1I+T 1 +ODO  )@;:gd??hw7d$Glr&fY8~YTS<@pEi#qz~y  ù<3[Nx3̣ז3` +ivvhxzp3UoMv?y36Jp1eg|v68A?3`?5<8c sV#ȕor1*x|x#;Eo_~b;|˙_Q{k>'Dk+ѫ!;_^ߜ,) .pbD_07OGaO '1G=K_׺s>R*Ѡ3Ϫu:<Ó\FZZA]xo.#hRg]\2{<7opi)ຽ]O?w9\vF{{o9s٧Wf?bO{|)o].TʉF>Ξ0g}ùE65݇zG{Q|#v\S4ov n2@ާ6&O) ン7f?"OcxRݶ!,0N?xZ@pu"7Mfie% I!vvq,j|q5စ%(- h[}1ڕ +7ݕ/~/wVCYb UfB>O;N9@6 X!=q@[xE}Ū6֧ص[TQ!p-JbmG (,?ŋ_*qrۣ< a,j4NWNT%8,D@ʷۡ !a_qɳ}RPT.i*$I DYGQ+(K%d6 ^;ݩi"fk4R$/ "m K4-~o@b'RhS'*udB. JR3R6BYjn@.pF[:"#7{\Mࡊ<`Sh7y5]Q.G-j@{ 6CӵWG׸.]ԭ(ȧzfEһ&:Ɉ]ZBd%_$?55vYuBF.o?UBl6? e%B6:`WJ3ؼ,aJ59+:5?xNW 0\l;l0դ􋐫9U *É׎ WDg9}a"^5:IP*`wȘ=@0 %,G7~BPRen%$A7-Q4PE"iT>-Q8f"5̔N *uT5vYCSlV )wp򦋛3d 98F?$^B,Wj< ͺx ɣiNQL& Z$e?ߺ=\vdRƪ sq={i%&y/t\I8/_͓aS}˟^T|Ks[ד,Pݓ!7e߹?v"S5kfVJj]\u;˜Bn|_ ˦Ò0`o;2`xDY8umUNxNN:Gl @5Hu?'7/믂ӃuTe_,Ȃd MdYXN)veh8@<]r/8xBhpLZdZ mu}{5{Gc.d\{K.pp$#5 1 KYwQy)к<_NxDR5A{m줷/`†lO,-ý]2]۫v{r//Ǿnȍ%ٯ6Zȭp `~W)A83AE93Wd0a"^3}^ɏ7l'c^̭/4FEPRl&sL{CwĤFhkbSdٕ8y4` `\(k=tX^D9OeݐBd[huEtUֱz eu+[pQàj| -gU>WIٜv%R%(eCT uQe7G@Ik tC}j(Eb}5Qna68B'?d.$9YbJ٥6dk4W|kC/Z/aJw[|AT:*6) OUJW2CNCGMGd\)X(3PzmA'0JL4mXLUHGKf}j;Fyz%HH)_Yz]T3B0S: xt5w["mpwI (hAcGOzRյ|tV𱑎+4jdlGa-Q]P$8eRó毈*B\`k(RY>2Qn0ȧL5hJI!OMJs R\Zn-0_a82(Ok,,AL|hNKx4h%ls$;by숗dE8 3=Er0CBdR.f 3YMcCrU$ .a|4/Ac'TMhFƟ͐NllCˀG.q(ԦTKD.ڷsv%>b8bQ"K~*0i||M]q"뫅 q\6vSż !s(-89 kߤńW۫3K3q{sh k0<틁~)WB^]Z1P.AF9.\vVxT薋7-mLN!홥6JU2qe5a_N{kZܼxYeZWQ0]p=2:R4q /E< v#EX6{p>w.,v4vA!8JhH1gOu>k<`H_ f>ho-Q}$spÑAÑeU%L0Jr/*w--W>~N.;E 9-FCWysS})^,ClZ X̍1GM3o&Wq)Lg]l2ntO7m+;fՌy4}RW ZRoC ow)&oq0l3pÕ< (M3-:8nx]HCjb+aiʛ]aMQDBOe>479"Z8$u.1ؕ@#LE٘"z>*L~=2xccI"`EgMc3$@q5\RmJSE˜' ƻn ܟǞk'{ϲd̛7_~OUa\0ibxN˃W6yD4,K fjI륹\wca3k5 Z^Z*f^ēgDEBbjwYYx9;yVDN҈Tqb,FwҨfN8|'X4ΪP@bc 6bb4&lo\KQehɷWcH2o r8x|<_seF߆=IL3D!6oN`IbmL-N-HHhQN]:G EQ.3 njKJ@* )k+|Շ(_.h$mF*<\hF"G/D8!3vs%$j;nNs?1 #gn8hb5Lj0s][j486Eǧ5+X`k䂄1 {E s@HKSRCA3\+ѯ+F=_^>z1˨iC欞X4Cq'i蕺 '`ȣ,!N·I{lWC IqajǍ`=PBwc =>xz~v}xp~hۜ hE=l`P^v? 7dލ5(VVV(+c"5rDSv[ZpP^^qtYĝm'GE/FJBRkY{@ t2TH0@iS"QkA6h!BT$نAR& lf\O7 <$MPjQ)]VT8Mt zT: تj@QHd` l(q7WLx&Gml 'DRJ- 40gCۅc㰅 QDw b6_M=mlTEMIEŗ*)^~ !CtFc,p4Ԟ '4Zb E7]w20Q{i4YL8:= y!N#c '8[T''M]UQY&Qc(x )#t2RR Oz yEAA|AB8+qjt1&UiB<|!L= :z %i"NxljGG㋱/m̢jZ\F{7KOXGP ٢ Ur W@ZXe-GD /p1#1 хV:Z$!~8jqsvf'2 ɽ+e($NKK@IDAT<6=Y~yNK(mEسtd<֟){VsO 'yInٽ/ppUV ̗h n1V;X?׿埼} &AEn,q= ouGk*)Fh,irاc63-e ^'}ɐs)ԪJ蒑6Vr]v,ˑwX }/kv[8«.cO@) OJC P6khA*ThصYJDvR:J: E6JŨ;VVhq[Q SQ6#ZM $QJh% k<-g%Q]D%/L(:F/hkz5`J@1 *5 Bص 6&V+ƈ7<d aV/c˘cԨ;7 u D2eVtp9D08EW˪SFB{kbi &F=U3laGbh00tb4GH4w>#'T$JIMhc+?,_ELm$FX\XW)"KSb-j%זm"R;|eJa륵F44yZi I[+ǬaC8"TnX)`z;>ɿ;k%t:dȀ oIc7 WR\ pt)zM@嫐S,;12V AڼȈij;ۙǛVRFpߥP^u|qi#f Cii|%|J\ .XkA86A9>Va(%JA BF}PBU' tr(FV8ͿCh>&IĩH ip iK2\J_TjE]D?-E1heClt*.ZG)!Sc0#z fz*iX#$q h( rDY!m#RR q=RbQ ǝ`1-4\HͱђhQ=q\K|"A]YƦ(b<,f1!]EȤsʁM(bjl0[MIӪPx*롔Tj)HUId *A"*Qϊ@Z*J͏(s|+{tVzf)|d+Mi(Q!G_ډ!@W D`M%R`YK X0 ]L%9oHlHfSUD;#WdSp#ٕz(W_wd* rҡ6tۿ%R?+N j݂DzfFc!(TZHVmBpKB_nH3!2#rsVt@Iq”ts"g0^},?yȁ_!i6޷vG+&y'S:,M??Hr&MFd[tz @38) 3A:_H7kBzfJO fO#~ Wxnus !|14> fRKkW߿~{HH #u]AEc֥ѩ4Tf@B2l{k+Bi\ t$V*VQ+6l͢K|k^3\6_w./S*z3 ) S]*cBH{~>iHc3۾z{{d@VͳlQIPŲ*chl\vDQf\r;A+*S< jw\'F*տs? uGyטw[\*n $TAQ=u;ӛx0?-n{l "bo3[\;' G'tU.]=~3>$5^]3Һ%~jg_pq9OǴ]^\Q j{vѣs χWgs^.b{O</9StM^.k6h0o˚ڱ] 9'C*mƦ4i OdoVlϬfTWmCj3@B*Ec &D wZW,*l o 8Ǯ SfCrB?TXKcdɑTeW~/#+|AF ѫ R )2}^j%MU R ׋^iIT:U!B ͱFHH.iB)_E=mA"zȉ>א"PȀ2)igCHHB@% !ı@`%ٲrr Tx='uH` Gͪ+D #ڰYiߖw0Be+C5 SCd@TRGa* ޺aMw$gů)*M5$pҹaɊ|0bѩȈ(^߇Y("9-)-@cPW +-2" H:[Ŧ+є _iK!ӈ.$FՐҕ()D:ր%j`>"b_VAAs (3IUVtIK&"Vv4ʊ4~)XR]J,SӖ17 O8>r)8FHΓ7>yͻH7;^Vq53 dSw!'H725Cc,d6B&7./tz{d* i೰'u#\J~52-M FHZ^nls?޺c{ss|t< W֗>4mPKr܄XBR3|]_^}ltǽ5颒,IQ"!u-Ii:N"^\zgqEg.A1H2D*Uu3Ü9uXo iy sc1í䙏EﻨdW8tOT*6`تZ4>M,-أE8|r?9sǁŮK'w aԏ鮊8ఐd:D׭4Hj(MSxv /&\p3h W< !if Ld;%6sܮ0:3}罭br[6X3ov Ʌ8 C휽_x{3\ {ŅN9 %{NQ@ry~\A`Igqxm`vN&vw|=wqzxsy3|qq'ߟO`pF&2L =Y;TI.dRV-xmGMa30Hԑ3M?UkhN 4D ^tQnvxלp~-ݎBB`Uah*J'=[ҐRR:Thՠq8^XKoS%*uBc6]*dJajhcC*h/)<cJGijr  >Mt)aTZ0%BeaiN0HjWdhqOeLJ LLfG *}uR[zgx_J U*E  2!C3U7+N.py*;Óe?ظO{;7 N⦑*t*N~uȓ#K׋ &8˖pIlr1ʐ)M# %i*=8k0;Kf%S~K~éDFq-/6#.?1խ.۪gadQpi~BlIN%q =CߨOD7w+SVo'}̷768$^tA|z<hOZEn/s0y$u*]ӑ5^Bs+QR"7rnӺ5E naQ̝,&8YO=Muf[#%-<bḊƒcy?$dUZܥF'/z~5|w1r8<}}*ZpGP?x˟!qoDL+\熀S å |v-;/m]:rRjW}HCtIc{$2JDZ3X.T'Zw"X#u:`OGS5I' *;{O(`\ɮWҤ0Tu 8HQA(Ěc[&8IёAn<1?GP ɛ q@EEGm#(O( tsI1GcI:~20`à\%e@E0ĈǑhja\:O\ %QEd>D\V!>G| pxZ$ZL#"/s\I2ÁLBEw496L(Rf%u2vSBIөHDdž >RQuzMZ0ZR15oJfG KbCȋhV0@"8#<H5BysM6:Yc>oHS.9#ҩ6%Cc[H뵌bNh]_L,e ^?Qj;H5{ִ)ڑ!Hj#Nh\nU(=JmYRfGQ.0rhbCSz!tV6׷8\w^C~;{=_}Ni'> oVy`)5sKh6Y%L˓dfQh\-.)n@?ZsC0̒dl02E<DZ /xYNS|pس ,zZhd$%n.r%à LIyWS7 lтj{Q/|S1\Mf 2alku2+lRJr֛ӝ͏> kb*ç_=0]Qʝ9_| sosHԍՍ[kUIYGeQp0GbGjǝōx^+%N^xQ_r/D\$nOĘ96FxpUP*nRaL70؈"ꆗ빍zMg\贯f۷/zG[__Y:9/__0hחcZG899j/.sk[HOvwnM1fRXw[MDFL`_f"4w?aBNQ29>D6--tXFIb#<ORو,IVsƔZSg()l(A@v^j]yhSR0,v+t%ٯ2T?.P1#΍v*mɀTռ&gX|b-"?]X F!ՑbXՂǛ$)7 C)% TJjt7ZGWYmi\ժ ДD<K"R.$FP2N$Ve=Ta`B."/#&~TOUf"JBd"3b 0RVP;@LE!G L'Bʧv;{]h368%ȍjr@7th*e%%`dD:եH/ OSzEJj\px.j1 J3KG(~DKSK`U5҉Hpw*SHv*-V^Hp{qv;QeRE FЂUH܎J87V]m%H\Þosw)q&x<\,{ЯWI^ɿSZrow{nJ{&ٜ=:ݡFVQΒh#fTvH1$h'g0GIPx]V6w8),WІG>Ybs:U hh1EVV>" (G-lq H m:}6nR9/mӽ-ܛp+I>nKqB gUHMATqHcugfڸLa;r H6-hxΌ2>~h_u@Ji-;V]/,qEiM|*0 u( ?Yp}D+E߹Pc u^QR: ɜPtu`!Pgb2V7>X~|5o/a/݈jl FY5RrgY}Up)u\Y{!+}pέ<ˎ(v Ĺ8}Tw=Ғ:Qgd# n'#xˏ7~0f'8/-E{P\d ay~2/|2?`\>T+.>)AةJAV{TbiӓeUC:tM樻Qpp ȺreP[5GMFYi[ȼR8YC@$ɍU)R*5T醘p,NN&h ĴT\6:T-1;2Dߕ7aQj6/ !!5xMxQCmsCYAQL |BT9j:+Xr~^q mTڷ]֬DM`cɣfx[{߹E#㮚32MdqDiKZ|wsW.8 {GS|-'k Ӛ@);rZ\RGѼm5FU06mI䉷ŋx}sv<inD+v8~s[[k[,Tfԃ8@韶GݵGDx[Viz.tDc1nr B~ {#s8űfFዹhP?#nLnx@ZuW yw/ <|6qrwk;eAŃ |' 5]lr w_ :؁ :M8S݅N8#AU^1mP$#]:dQ/}&stk  .Pф*F*7;&3orK(3r>_jM" ஘Zbf4݄!5ݻZ? 'ui9Ձ͇f)bxΈM,ll4g?q"SԦ9ͷ%EhhߎqQ\$WT%XB,wwro:[< Tr^rwQH0 ̓af݋>x?_ 8mm4~hPrbz ҴntHeHH²-!_/U9.g*D&HkHCX3'4(3%sFzIV=Yw5ʅ}\K,[D:!Lڢ2hfrCA*ڣ cH4r4|\D1D,(>kQ 6L<]`)0(ږUjSӶn7Y" KSmr =C[S\lpYy2J@oc!yi.x}r͇>~KBoNvyɉ=,v+yogלȔQlML˪ ev`a$_ !(D9s3Oy9}${+>?gO|Jv2<$oް?ɢAw( Ø: fI}Љf*gv9"(\S|@Bc [i]Yn8_y!ܘp{T? VP^ <}[aiQ@>q+rsnU)2L #^[]F;"{* Gsnp__={h|L;DaF{G_;eYk+P;|Shot{`vQdsnif}=3ߺDT8 e?ز6 7KŖ8Ab4jB]XsxD)ow8'@«9* ,bNeJx+VR#00_ν?_F蘋#.9 ce!ȇ=cG@t+h1ǣo'# x3@%T] LI ;$p >G S8WpG5G7/x.q&cr#!YRO3 `5ann=w~_5<7p+"Gqa@(FeֲL MDg+i ȁ^7C[ 'zKKO,7TCјqGd*6Q1՚!)#>;V#@S],J8ę@UՁuB +5+m?6@AQhaq.l}I1,S E MYDԒED,jQR6 BR*$Qw_XOc[Ri+ aIiAidweyfdG@+.PZDMdPFP 1-9lhd "2:D\fq4Y<ָo:h]Q&kiiuȉFBw5MH&"r(V$CiÅ_"+ D$2G솢eduV3OD,:$0#r@hU%(R)ijavCʃEdE'#SzHXjq+kk++kz7cq@orŔi6?Yzvvѹ+ŅMNunFԧ]Ҝ6A$aᣅdX|E7)QTYȄ&^=g;s&Lrb~|Ƚi3y1%@\㭧>$ķ&Q˿vv-ƒCLv*dZmK/"YjB;6a~<%$ȑZ\Әd.`' ƣ{F94$ k<ڎf$ ;g[=j[To ^!%kv%=1M,I\ -˹G/&q/oZk0<=Q˚B0R@80礻Ol)bAV8(ђ9Eǔ<(bIm9 Q6Nl93Kkwr,m'@cRs۝f 73ƓZ^3+ 2,e)sng'#bz]KVzstuF[|0:z*UwWng:.ybӒ%B~nW %ЍƌlAiw8s)x΄"N BD{֞Vmޟ0f'sX2Z: Ѹ8 xjh~cctzzp3\M zZkLj""1J`f@ZC!N͏ r7!BޖoVY*} n>yoZBU ޔDX̦52@A+ 7gĔ X XM{eWUV#fFhJH$6z N)/ ZYKJIgM ?Mg,$IΗN2$8rTi%tMK[FvvʮG}0(TѸAJ-e+wQ\3ejUh|Η@ǼFAIQ WnVULX$%qç0O80vq4Tz1(#X"0 5>4% q㨊lI"ժ*V8YGv)t]2J pOAKԛ&)F`ilH$"TRܕYY& ۨE(#]:4HR[@)h~êK\/]qE`: Ƃ?UᐤouLJ`ej/=⏚ŖZ6%h)Eet_J։@~q6PR,d@2B QYF 4""@eBBYMJPv[Ӎ-.sy0#}{f?I[!կ}32K Liw瑝Gry3켁ؘCxs68c*97J'^qy=,w`uۧcfhΐ!;ݙmo9T`"^ A~-a9c!wvp8k5:[d<-t IEYS[r:ǒ:yH>f1+Np9/_qK?yqLKrgܙuDP:mueYWa|C!ec5 ORH-GHEFp K4h17'4I@dQU0{~)eA`l)#>P<E;ĔP9@ |%kg7/XϕDH7\m :h\<ƇK_`c_$IaDg1V;"$.NhV*`/^896vQ^(*a# SE.R#ԄVKZ^S2kTAIF"XA[xYtpAZ:2N(%Y]6&#?g'BNTZ)ܖr$H1E8T;n hlz(F$'Qg'?|=ެ֢He_qA9 ˈFL)~4 By9.!h+~qATٻ"]WL퐤 eV chfQѮ3bK'LFbrGΛjȨr#NrSz rѢ1z5>Kָ9e*9;.Bu ev8+/S=-c#‹[DR'>XYؾ<q^)>'<6e܂EE4 g/F ]0`SPҢN8?yfXp1L*Ӊn1m\s=j$OOlsqg( &`D ml>k`δ)ˬ'2pRGQӟX{3;漙 F^EHa3ؠFHWGU;p rU>xyz@ w'AXcÒbdrg\ڒ?|NGD4שH eSPT[Gj V- ɞ2]";8[o~wlp%Fnn&<9}ndzwIm9x\&4i)vʝDZ'B09]8R矰GH$f! /y\O ,^D} Ơ KE6Sx}VD)j`!>fuxI?\ubMwf}X^g/>Y`-36=S12uxfg6! g]Ta%w/,?'7_|Ͼw#yT_z,1ϣ=܂KSҩ@VG_KвŐƩZʎ0YślbʈMzMJeu*g,I 0HЖ3 #VaPɤ\bW):]K/t |sɋP)џh {jթP U;i7_G,MJX\blQ$[c]끦X2'H4y\)LE 3qRә,Ru1`f1CY+eLG8.Li5!F> 'C)'Ѯ̓ U8@oC`l@U^]¹`'x,-)4UIsseEP`FQ(LI%S#-ƵzVy$^ iU6pX;:uY1"媏0Q4m o{ȅ !lp4c1H,HsxXptDLBUmV2*:(%L 螨pRT8q-kQATiX<V!!+2|xΤКR5Blrk5`|QgpzJmGFfpHaђk&=^w7I7KWD\ZW P?Y䎯g3ч!{fl 6˫pY` $URF]=2ދ<} 9*;[k[̀48G8smrquwsMT^"N fRf&T YTi3z\Wz OϏwv^dkka|n)$i/2tȪ;DHXXyG+RnbP- 7 .5/t%j׮F@IDATqPO8Ǭ}siv|3`Uy[/”: 4*@t)$&XLTSf9ء)OeU^:e&yǂA|*L{ rrz} WK=Z2Fu$Te(ngJ#)aly^nKa-m0%ތ!c!ɫ5^ #N*i/1Äi^w{# vOP3$?5N-%,LᛊE,D|XDz o%c\j0"*ѷl}嗘.z7[; !-0*_=ɹdKJ"cN!^?( ] U$ v2!ޭd^ chBQ g9ւC+mpRNR*c;M / G!H_g@ȩ)FEF&5[hWv&_bAVJ1ў̬`I1t8O͔xZ'_'>Nudak©n%_ Q%ء 2-rrʕ)|qt <Ҁ3se"[(=RtndPn/K3$֥D@]*RiDGNV%qF)1H[TT X>%{+(wd۩|-FT(*v$d|1a8# lbb*B$Mkpi,)9*_Cnj\KQ8U;'rbV144E9eBvsblUQ)jtd)f7B7I4dcՆ m S0TU?<$ƲHb`,$*&&˞`/ʊ9e%LQkrEuR@b)!=%Fw-^ i)x } [3/;>CNUP%ɥ{쯭l9g[8޽fɿxR&¼ۛPڅ_MXFc!Dg-/^$BD ھW1jks>5>LxQZd:b$Ǥj^ t+9@R8ճW[>\CaP1Qn#+3=+Fz٬)J;"bC򶦍=艙e|r5;6Vzkf@}?:j_+o eEhr1uM'&'>Ü( (L 9VO_@8F& `oϝB2<̺ '^Cun, ξx%,9MږEMm' Q,Dfe=l7UiD2SBgSnp_e:d:_W&5~T-LL(aѩF[J+x4ȱ!?Վ: i\ KmGC=g.qνc{7.{7w߻y/yxets{vk~{-*PqnoQ;TLûEbz9X?|G!JS*oH'׿}pqeme|5&ox`xxAf0嗣_ʋ1fcLVry;tq+NxL'hYךgN;)n9CikD'-ṔWJUx.U)vzw ,E)+?RHNAEK63 (z 5* ]Ӣ¬X淴BK7斂OgC:NKq9O|/2TxV0iOE"Rb= rApa"y)8 Is8b0*Z!%:!рف$!tZbA .(cpM6H (uFic^I=r)*upO0jy(Lɶ P$H_ZFuv J,D$H~ "O[܎nqfqʡ:܀95D"fRJx.PYP+_VQ~(^%E})vI/|ї0y2<P1luXkY2>mA4G*%&GI=5Ͳ/4GD:;k႐r"nVT}`/l$]a#Aw(VokVXRU :OKutA8Ȉ^ TXfP&lHMщ;>\; .ʚפ(='WTp$Fw)#x]!s:=|VCfsG4!,n:B||fU...10gGܝph B+!/#Ik98ܱ!WЩ@AJ@z&u*Z[΅ĵ Fa`@=?xRN]*vHAR;Im#ύK)Ҡ%J# ][2eTNtLLPh}b=K/ʫq(9:RM_"IH%iB$(ׯf8 ^(E' +)u8,*]cC\Q.dGM"GvM]mʠW$buGnx"q\ {|vZ,*M@*X$in'vbΚjZ bى|5{v fzLdOyDKiS#6Hu }@xϥ\.o 7׹$JTt{Xfi){#+֬mxQ}ZسZBKD\xc!%OdK()J?>bjw~;fgӟ~3;k|5kcw3e}ޜo`i @hJ9*#)zK»iLȡ|c*7DXpN ~j#GCm'E+d@,bV_Fnk!ޏAφ"2*&:{H,/ˀ8#3mk'֒ͪMsdz{Cb m o0->G[ ny+ ztt83| Q;3uHߙwuTcTF2[:\5{跩hX*8 +C]\at %槿Ogx"9%ڐ1|yT>09>=f xW8*ᐮՇ!5;jWgcY#R#|W0@){:nhJ&Õ꺿x_sds{&!eq7 K{x@yw `gt}ML9lҕQT$}#?{ƉEv-1h:?ÛBjh*6Aʟt丝O&R0K{42{;:='ED\4r/K -Ҙo:%bPfj>A $ y יeplÈޑd/W.&?&+&@T9'gq(sjip`z%<鶢CP=\ F%(-{ >E\<.5xbKm(#KWq 4u-mȜo J?fϬRW{% %B V` re*hJMЂ^ 97GnnMYnC J"M(j !y_&1*9X|xL)^n~"2@^ܢUSʕ8!ד$tXR`bVIPHj7Dzp%6#DJ q M JSӂ$JE @\uLMѭ(0Lѳ^+*PMȐ 6735$s_AH‹h4ʁћ)$jA3$JA]&5/*5*gW쩟5܎IECj /1S! $j`X~DO"% ǜT=~KOqxèWndǷF!fF4#X.N!Ar]&'e5`-U)=J,#u3=2tҹUKp_h4 NxD ~K=X]5?Y5=0jIBYHh^>Xlj 6yc<}Mĩbel (a;9q9W#N!Hfyo "hq27 ޞa1rAu.xi+kz8D_p?O2d?i`v l譣شJuo8/m2z<K[__lnFZIyd= "xC2L4Xyhrr|=)>IaӋy \HEVjͿ@"! q 㗂º~= J"װ{KLǍZb4\O;(/vcMFQ=4u|@=d=B@*,wT5/S^S$^D caC.c\E/ d~Dϑr'&60'9Zvq4 wYuo YMuìeXa2s) qmIRn$ːr+|A.+2Qv['fx'3"QVw~_ >η4>j@(rFU!A+MBE9sL2qfϯ/>{p3o7t u]~$088]Y27*Kv%R՛9+)Bkc>Ɠr pXVJ4iWG$qҴ85Kd Е 1\Δhu\TؙZ Uh4ɞPϊu>}eV ^` eE\#<;_Z:u4[tS~U?:K5_nS1OwX[& /aٱ*#j-ŠHhjO[K =ey@2W]kѼ^t4K!?f ,/7̹)!J[nn(Mi YWc&߭:eģR犠U RaVB@Q8E➕ qʳ'9yj+|}__b0أ 9+{3bAXPMDwy &V! yt%]dioe5лݏ.{ɛ{Voj+o$|pPR{_ e qenymCw9Wޞc{fZc*[q#@|`+5XP҂3h%5oYpdlS·r:v4Lӏebl0b(Ԃnc lB+VNWâ HMj]qKưnF4 R.BObpdtq|h{puswWXaU\e$cѵo/׹'}zo&WGoE`<`D0}S@$)p84BzX+AHgY'\ۂc/A™ C"4sXr ,A!Ίy$NQ%RL!,ջU%J[H+1Jl4&%d6H(Ncj9A,Р3^UPD1S27ix?簆 }' 2",MFx$$4 X51`B';ct_GV b8"xDe愑d KSJJhQ/*\9L80sn)) Z5oj NTR"%p/ug⁖Gm!Ƒ“@W!UN/\ɮ<;"@R-CHX&8ǂH)Co2U] 8W}[%/:T#lV!|xH[L$j*ªBRJJ..Ћ&&UT{<4/ ?=)DL"#{•Ь!e}Ryl((tAšT$ 9&YˆH7^I b +E %%})kY#ig!<z̉KŮ0&(|Ec0$E\G\t2͇h `Mna_.)}oz79b]AS\CRb`Zb#UmUX=L|cD0ÁD]圽ltNy'Ly)@ ="Plw+;~a\ۉ-0#9f|LI,zneNtDC$]wkU:>tdꞢ Lt\ǐC cI2jY. $U#u'Ǹ?FG[RڈtZ fy9 C``# O,}t7ĚʰJ3n85K\I\;⸓L!LRb0Սբʿŵ-{kڌ"A6ɇ^0M]BdB0pf /YH-_ܔn4ֳ4F%$ .miqGq_^7(bK!3~8.]3>ΧǺ q,6Vl*՝<0\^o2* B)|KzW7w8`z_01hsm痩W U4)+)M%5imoظӁcdl:HDZEYs3(,uDl9 M_u4L$+@=#BP'B"y0[M^4fheVK9\"!naJaW T#oFD*;pJ\Gh]jEPdjFڥzmVG9dEB?X'rqpVVpUQzo]bgP*u0zTOȆ4̒fMgB]9s+5nvQ~b*ItGsTBҕ8M#_【\JҴ[(ޣ@$͢AFQj2$Q9Vҧhń J1T!ϧJ QN |!ˆ5a[0GHCCN "Op Dph4ɎALl;a:bJ  dʝC&ĴZU"6|8 j?8DMK4ۃ /Kȋ"į!~r`m^74Lݚ6MAr[K9ahE:Hh͆S|Vy&Pʺ@b<nn7#NE&:Cgװ`Ue]H;./;# ^Xsiǒ|de#FӰΈppȴ;A\ ߍ ֣D=K0c\_d"P&߭=^:N(W~R4=')6 / c9O6;'[N˳oW wW0mm]\]ٜ{P"MY.S+wCI3nubn鰊6E^*&"83Ëyxzaei:Y `sJC/)t kTZKzmKld9iR!Xuw'ǧ8|H ߛr9՗x#Cɟo ?+e?ZX<89fS) l3HLhԃm9]V~H }|Q͌5ҍ4$3p_,c^P.hB#OMjXd  R+;Y\K=}=!F i'%5r2/5!]h eFMe[p4@2L)+L[#FJ@m+K^OjA?`=0Y{H.Ph~t}eO_ Ir0e,sϲ0NkurݔxIM'GYPGuņGLgYh[6W7SQ8W½}bo RK"ҝ4;K ~16+[y7gt8k%tz8kdCLue& CX)p#1ed7-sll X` XZ<@2t:l+)>ńa!Pr`ʶr.*H tbw$!8Л^ kl k5ܟT"oapmYtFʳ7_emSF2C`ZbA/}j~CEi%DpZ֠VS[导a7} ;<9C֙F-i㐞r`XN"nx7ߠg<3^?>,g?WڣVaPTA IY1;  yQO#Dyeo{W5W"-M/&ep!_oP VXȮyFHyj&4n,+ryAh*iC&~&p$֦(z4Biz}8T}<9q.V mIϹ+N,K,EZ?B[q-ZRI ) Ux` <&W,?6㔃.;W\$C6E,B A+#"&ڌ@M%TnWL!w) % j%tYs pc}gmx2ݭNe+C:]mX$Ebz;3ȗ"&XSpMEb1~~'gftu3l Xa]+@]qVGa@av{"Hާ="-nj+'JNa Kج-Fjx 1DZx}Õy PcͰb~$%Lmף.A+;U"BoWr1?=\Z\}؉P"mɘ)}tbV?3CD#\ʝQ2cq?fz <]Ygg| r\_Fe^끹.0.ijЄ)g@B0RŷT#<f"d|JOozŻ[BM-S( 0 1{1åśE.?z@ jIeޢcK!i]ËĴHG2t&B ؘsŭ-Ј2Ou|o/FH ܎178qP6E,@9Md%F4eJ}`_k#3?P5ۈk?ۻ^9= '阰c*UZgXHi.Ő ry"H)Q;x_w_[ Ws<87%=ȳRI^#ϞkBFiOB:|oJ(si !e_[%rRӂ+k/XN'@4x^%&E8az]A? ҈*ruH C(Y¨eV(뛛ՕUvy~| = I.P_i!~~wIAQLFաXXop:]/ eE;%J~sԖj5}sW~ф'FF<9:ȟ_WD˨3l>NүἜ P&;'|UkWI(uZ+QX=gT#_P.QԠUžwĄ Od~ f&)Y+UMֺ+Ə.@Qi-*HV~@iug'[ u TŕW‚HEJl**Ycs Bb;LpT HXYZ&-ڃ 3wKJIdjqJکLqjǤc[%Hj>$gO,Ha/<8|! w. (]z[T$$U ߆n H,CZGB}TAe`<3):d(0 V2 v vIdXcZʲdFt X.( >6ftpw0K~D,}nOl#6L;`gr8]-4R(ݵ'CNxF̐^l mΪ(&JU-El<*2-dkS$,@b!e[a K 6Yb4R0̤PL0%X倲ڈ:ԫp$qzkyHNW(#N`Z[+NTkP ZSWG$ܲFLjnD>YS 2֨CA_Q|+K*&R0$Gn;i_ L)nS.N+h(Z"~kةNyctcDX;6%޳4e醃yQ8HKхۢF|,ˏ8m2{r<x"ܲBrc5"2#!t0!<2QĀkp) 됐V|h`LLX?7yJRwy!. 9OEd_TLw VQ ݔ#3^>^qcf3O)@0 i!B#,CY"<`Mnv/ؘ,t:9= hfdQdS^\].y*)Qn:}lʓtfN˳(1~\ҾmxEU$LsCf`#G/ }ЖxWBM{b1r\aNƑSGx)7.b(Ċ+a[ɔx[c;ts++m O[I/tx4'7j-Q?]ڮؼ  M>2׎!rV!{ؓ SDR B˳ 4IfajsH#_۠Gá=sqώЕʳCJ-Y)?PI k[mh|yw{- NϸG$ K ݺ7Pq5B2E¨65 "&brF^P!UTE`u 1S)CeQVOJhjVrծG#A]~A'Qqi > J)DH5[GBZDGX%7D; $h3 zVڄeT5@W4$mCSTx)YV@vHp?5+4j*>nYt=|-*Pl"H")<hwaa :^sTtNU;c(^^m ETdHꬪƗw=ԋtz>q׀`, NaNb%:_GBiͼG>XՀ,[0l ؽ dJ XLLv4<l}HRK䂛(J3te'K$WRïQ| Pn,2_~ueT\*i9dmuN\97ԟ_ΚĈ_iE_XsUU{5hr3ԦW =%"YN~BdOu ]m@`~4)9D xIؤ 'nR#)db̕ԑg2dRe *DXHfhhD'DiDV!$Vbr *@G5PG8,(Rlö<"z$2@+>gՕF;8VVb}Un*t1ƆزoT l/X>e!_h\"Tnk*ɀƳ"6JdzAp4?-Ҋ$'1]jof!NctEvWڕHr)1LĽ: d^j{1TfX@ 3,eSOaXJ쒑k!B!OR\ԏ,yIF'%,6 Pet9pu=,x!|G'y[B=S=V1 Xldѥ*ɓE~qX3$#]Vp 4LospQy_dPk5+-J1O.,Tbu 6b>+2KOo"M> PTKf;!eIGYO- T*OT&BhYvt\> `1Ψhn1q6 [b ņgǥG&Ѳ|_0Sl%3f ,f#frRx4 ;ڀ( o buWk=gQVqIn4spo7$@|"ܐ[[nn 7{!ֲf|0m5)pE]X"~2_ ?7""7cT0Wݝ wxRځ47rR]]N+<:=e@:<׸[]{~yzdQV8 v`Pt dzrvTE/X}+bgd8q5UgضPO&*3YDp @ Z*-MRF"\t8Ej -N C[,]oMig,"T-@RW":ў]$f,AHI;U[2,Q a @*"߶mX3 ۔" ܸK5$D (in*BU2 hl ʗњTFԊW#Q-oL]Ia݄"a#{|qB&G$Q(#iHT+g3]H CYcnD)nх`320S#M&%#?5Gdn!-,eQ鑮BJ @8Xz F!&tKR4,x\T\]wpD=)t2vgp$J_HR3Q?57ՏC%AXT&mPSXm T}?'.j' DB.bb.Oo tc}Ƣ;D 5.F-1ǃ[MqqOSv^K$y.ѥ)]]-G kXҌ4 4V52;Of6E~%621Suٌ]pU>ɼ3 #P?@7ywrzmfbf<͇eTb(_%x#$@j{EQ6{lop{ۃ;GoY,N SgDXWV2ZW߭:z5>?(13ȓ J"cz,Aჯ2wx]HIe%)`=be^o#ʠw}v Ɠ7g9Pp?{Vc('Rpe3p$Ҹ.Wׯ]dbJ>:d_n\ cd1=ԍ6Cnv䂯 ǦBqF$1(S[ewz1॑ydDr ı_hrAHCC_JhL# s < [::- |@rU 2M去`"ߺk)z%iF,Ʈ꺎\-/Ժ:% G9`< xO&ڈnDZ!6ۘ])T"rDr2A4 m;PHz$~#]XZ넩_dQ%)]EH$KVuaTet@-huh\l5?ŭQxp<8aip"`!5cWU,1JcxՂY-LEj@7Lx$,t~~|t[!@eH:< b&1r!R$d!yE@ 3umkr3vf]z?7C2?} ^P _dkRqGw^WWYOH`gNy >=Ze0Bb DK=`"Db~`&tbcXBVexae}ޓo>w5b=EݢUS8ȬAHs{6>\&nUignrs7K0Dr}D럲)_$`$9=Nbs)VLM~ޥ"+>(ª SlB?>rxh<޻8}x0e0,ڴobe4Ei'xt wg" k>24l2f2Wig >% vN1X_TK6-5Ch/&j^D*O*چI,vޣeD}ՇҬLK 1M}޼%Tkkfp̨a;H;#BcGӑj å1''|y`+n >23Ps;ۛylۮn<|_^^ {9,8 ͛~ŧ:FNWJ+"XPuޥLA2۲󃬘,md##RSp_OW{/,0/w{xӷ[q>C[ƐC)7oNv~w cڊ!qoR*۾iudc-]P@hG̙N)-GP} !Q)`m;<@e}x 0Z[}靴b42JRVɯxz3AZ9LT6$+ r#1EP3adEK .VSd(*K se$s/SĖ$'3U#l y h:Ba4 C2ipp '[dHL N~L-$6u6hL~1%RbY%?:@vf/ ODKNਇ!7G] Q  < 'FÈV,p9)'H!|C1`z]I@^.Վ\,l Pegk! hxS,WL Sf ɑ"FCS2xw,ۤؕJF-Sun?9VݧYe"vL'{^QP#`E;-'?[wGB / y,67ËL GJ{TfDPáѦlz|G h [Uf, aS4yLeqQ @6:ʈXlȈ<|w~a[e3.?x|Ygj+7˼+G n&"b{Yl=Ab,8J< Y~uHj+>v6^l-A %w|)uu!];$&s%p"nnzf\aE<xxׯz", xv! gbw{8<$틿U."ԣ'CI4C<Z&?n0<p$ t'87Xr M9KӬɧ^@[`Ply_Z vyނ"Ӽ)+c_]lufM$FuލA3Ůa{s b85M=2!~ba 0%NbBۖCpϫ|8lx~|rjy哫AԦ|raܟ?]y"N^Hu6=EZ4"SZ!(?{9$ɱ,p8) ]ߜ}t!_F機_v9eѷp/cƣGHMxC_][̔fW6u5e$ Au8Po6;6EzPk]`릯qB/3>,>a@f =NVj˧|a,'( U(ANXt߼{htL  8HitepkH M9d;m+ 9 hЙ/-!KGB}t&P5:y.Y@,<ƒ%(ƫt'6T6'uvZAwJM#QQb9qi"1Rj)cF4  ٹZ_kH"H-m .3IQb V)4Y*=wb'˦0dUsa҆0[0,MG {)I)2 y+QJXKptJ)ZɔA,^~PŔq& @xR"0<JD_J)KᰕRxξ$6҄\ y4`Tp\)*LOyEWb*'$D(YkY1lУI:k 4vdV(jj+jPP2䰂Y&C; 5B6p0a21G喩6X6f@±F)+[)Z&j(=!*aR凡׊gSHs Kd+]Cedj!V"3#xG AS(Oi9nd=\i _X`armKA~(Gc;ߗ.B`!`H2]#QBީwDD+=S!8斗  NFd])r*!Q:y 1*qQ'{_q8;G.h^uyGnjU7[̫f}"Jo3 >IA9AIn]G%Lraҳ ? 2- CyJ4?ˠ4=2ڏݬp!QGU^ZZJ hbjye}+GWv᪱y?}?2}PLROljb/keӖ-4i>xWF,xD2;FV )ZsʌF1%5X|:E!ï e7#-cO >Z\_bE? Bx9kWv@PR@ڼi0/̛9Z3!fFz]x*"F-ȋHR .)\Rv>g+t0H4W  t/f`?bUlSp,?3ɣ(͂NbEj ^ar8K`!^%8Bw˚ $ lI#PSb,(|ŊIh" -mZ-;`h m9ؑ"x.(e2P(cK&DG;A/Xrn92 y@s#2Keqs`41r @eRcgLV+r@+5lǒyw!Y}1Nj@y.qq$uR(?h*! j%LdY<8`~j "H/h[wo{LO5_g}˓I8<8Moam}w6mzaCOAIT(VCIǸi W_n}[>kJ1"{o`oş88YO|"Nd|[aEI=#cD;G|w0Fpf G+|(GalTi۟tu9[49B {fn.$=Zç0 r_]*4l3|Yџ~(P&-6z1oo'~~iF ?3IHM Ҡ2"P6xy=K:-u@TP Fⓨ@(';/_G .H-v/t: QיMtE;OU(RN-}OVxjPwxkAgِ!Jr v!;y.L-J@Z)AG&3+ GJ4 * ' b&C4UZ4rbไ*uXU2)ShpCf乇.PBW*Upb4-8(0R[)AkVyw\(i!NA*JD`#]ʌ #$C榞kf5(u*I4 j>ŋkRB:i")&5(Y.4TGũVq*mysP* GiD"J{vEf,bFk-k5)Lz01=Mrhk_8K\ V'VrًR'b eB{?j` ^c:;>S0[2 7J.\xeUx{爉`bc8 :#4SÓ.K` ,I a<2Y| wtKx1-@^~،Ox*b'g,޲XY\^_\[$7KX=cw#B~dD-#Hy+a~㎄^ RsSj@B:9{<:?nn J}9LcDp"'1~<=B7']|.-dʬ潸1)AclhB 1[+(>5h\1-Ie+Bw0;foo)ϖq̿EԼY:/G<Z~ۘ1\s*PƟ!7ƃ;vRɝٲ6O x?䧝*g[OG. _IhF36Eid}10h gavV-XѩejZ0߽̫> Jw o3X 1|o2j/x#YDA4:|\{~MO>VǝfY:lI)dWcylto]YX~_P1@2?3R[Zw^r_.GaVI~zEm:aK-YyOMU0ŤU@NBIB=*P**g v9 v/`b>W}7_Ց$!\T(7H ! m!R$׈HTvGAB^y® }&ãؠ^*E1 uB}B_:>:aY!%1;Ы+̄P-`fP!"g`8R/UWv[Aq&aZ<&&OϏ<u&`lF15x7 4~ 7(#qGr0ѥ>j ,/R8S &lWq4MXfI"/60 bjrt5ʭ[!'w'L@^ўO>O>{gb$9Va~L-Ee& =Ϙ4 ,^[}T48d|·xMO})[WGgUoRPջʼn0TQCCBFm/EZS"A*t77)N/.ylkh5׷Zk19+ء5 </~&R 3y3!ӭGQRe1%tAW nZVև0qM.fI0f?W "¡xr0H-E d&]wBARū8%=eK4RAE7 PH {Z CR+΃.2J<тLA@\g. sG!PDEjJ2JdS;E*""J10 (.MIe)I~U%aDA%`IJ3.bZ)&QLcI,p!@ ւ٫⭩ҫuNDbm+X_(:i ʫkةcS"Q י*gQ܇W*Ey )YEA,p D&&3YV͂)|R3A%go鋇u*ֈ-/? P|Z\z5uC ,85=hzBcn*?+rM8,qr%G`qt11 j_E.t.~r3D-W fyDgxOrM}W w8qm(1,+'*N mCaԐfoW[45H#V#qB(Ol3#Ԡ%=%sITu32q}}?mnmGk} -+eG. -KnS{SP`pP\1@BFFM"E_9ژ!Mniiɓ_Mތ&nGw#}sk8OZNZgC=S_8TXA*Miy-/_,bֆ CPuwC F2 5 :'nG#$V?89G1x,E031rvfi}ɓ_{ɏAkU ѥnx7J9m@:R   >p`<@K/(UJ#Y֓G.s怇R{R\1OgNww2=itp.M@ȭb9ah ۝oVo6_^ԗL)e(h!:Wz7(VvZ<7S(Gb]u>j>}96d^[9<ŬFR+?Z&0;l-WB&=iiY. GtY{M .v2)KR?U*l41=xg8rSt0O h$92JJ+Nsyꩌ楆xlw0!GU2Պ$bIDv* ˣ{hP@ЖusO"/[$$O$Yrh E0+27=&VfQݎIJ%^|) L>W$h RȤMsOcƾ(KBQ}$ 'j`QP> .؀2Iլ DoŚ>?֬)i ڗhrB8@NDCi NDvWTI E4E h(2k<o>e¥vXjq#Az&*AVQ?$lI (2jT?&L Y]3 V"4=x=gz=[`pua׺_'x2d=З^<]`}<]3V()ZRhc}ph ұ|`G_?[a~d&PeV`M`n~jtQ 8J9SLXO?aV좟!o5GR;d" #Psqg/ svw:j?ʹI!&!ɂ&T6VTHg!#q3R~OB,u-岦Xǝ%[v`x^2OxJ8֛\zL㧤 O9^y-ҵg109{)TK~Y?dGH26jՕGR{yq'`QwlH.42BQ (Aj!)4Ov_PL&__ld nt2I=¡,@jC؅B‰]H,tɆm]1,*$'[7^'ex@6HTT7(dSzH֓/3觽Zi6.*O(s"q.x"+JvRBȚ$`%qPPPivX *!K$G/+ڮѢNH9禦~ lJ@]!ӌp(: ńE+jdw6!ѓ4%zH)4 k n.T K5 fN,E׹ZtH%g"r9J0[i.u-mb:&y69$Ah(6hh8E!)CG4GL`ϻ7|{,N"N̄ Mu?yxaqUhH\[$4N T ԓt8dYɍafY1/ ٙz~|rQ 1ڟ3M9&` `,uivO -Mq~ ˘̚?CYyPWiF amϧSI5ظ׎u6//nFq' >tQhѺlZ{FZI8)̐~-&Yweeqr;_sǘ}48[8Ua(483vr=~ȉ$tbA@绹77;{g247):~o!Sl |_H0,;ls4e\lYATeZA>] !1B a7KD&w (IZRDDE+cIB)XR!L9r)iT@m[mLJK"e/#cu}a bJ2IXZxFAXk1LYL~ &2\ @F]8|*|DAǵfľЏ&E+ҽ~ۍu%xn:p~q]m8Q#8a0oyKo^Z/(e9@6"s#[[ˏ֯/cvr+,ڍT1[ g?t*n'y/SO71`t?>|Eg˼v|:=" ufWp%J3!wDd)sBw\-zT VpX in 2ۃ?]ubiIR{MG/2 w L6aSH_gw BHS!kmuzN۵#j׃m~@ibU,'&//{ WF͍Ǽ4 ,d¼y>p1z x ū6}j ?9P#xz۟n+g >k'k YTp[ -wY򂕲tf/4v M > Y&Q o}?f5?g[tvҡep0{DUfϪ.~h7%u$%G+4"k H%}JGnw`B4Ƈd9Ubc@m A.wGRJn^z`4BTZ2`ʦrt UGV3:&a\mx`Ev2!еh$#P(^P\{Yf'0hƵlMّ-a''FGrP`NQ8FD$܉:Z/kWeItID#2P6#z9 Ob`Sm/z`!H (PI 6t́T[8BYF0֡OIґu%iv!&l!P)u*l" mFECYLJrF\)G& ļ)dj3h!*SAVWTeᯚHU%(Nc_h NoQd WA]G9d[ %,CbU5s"@G$HHV57b=MwKyA#%t9XihEv I2۶,͡ږGYGfY\SFs|@P?sQ\Y_֯hc*՝ou~hE|>w5{xxt6:"Yf܍^XbͥsGtїzSW׾&F#s}rdH"7Ć4A!Hswa3g=Ht\Fwn^NV:iJ.\+S@yw? ˷ ~6y;y)^~s*Sn! (cV:\o]OܯH6xF3 xXܳFos8>_O|y|qku<pk\LM//"sl1 SU (N6\ :9˧~h0{ S |qǴ0{_|]/u{r$ex1>8PpyM, Km)ŭ^FhH*80E-٪#"nx2m`s:p0q 矱}~#۩JhaE/9vA^XZsuY tN4Si(P>pf _h!HFplz* y>G9 m3Y"^X섫rk/ ?qJEY.ڙĢ@ͮ W"ʗV)S[,J~kXpܘo':d葒]Zd++%2d&M#)\r4%JB;}4 56A5z$&yZVQwW$nPadOإ йȾx@jv rZVrȟT909SCV(T1R IfF5) r܃u9<=Be Ttš'hcXҧYv2U/)dX:@ӫXh)7GDɂluYd$ [&]RR$\X'ToZ ɖ\X 3G7+]ÓƵxpB ʑZCLyq2Jp V) h&&dB)tj~جtP$r@QU C&( 0:f;y?@D:)̴qѥu/c3ua (AK|3Dl%t`%{֑$$;=17-|}VƳӓCfQ~%x-bOd xhdct>8;;&k` %1S]36KS2 0Pxz f&FT9XȈ.rvÎeyy{×AzUl*+挽)JBT7uM+3&{6&SnO0fup͏G ŗalkrr_wj6ݫnve@24QȢeVRs2gM*-e`ŒZEfg %ewmPѧy8/5_Q2Ddvxaha ٚ:^@#Dh-?jhHCKAbbKmKN#IrbP4D-QJG+߄.$ AYy!@ HIjGQjgˍ䗐بh1Ȁ'6L>t֏MA9q IK%T)M~vh==Mx)('#XvKTTHT0.~%C lE +3s "<x5M[" p^(_{|SոCd$S]RT42FfodVVʲ_>C6q`T|,,vUXUȄXCLJRkQڂJQ+<1&J$r3ڒ,$J@FA#e?)VU ˱1|OlaVVܯ ҳu!.8`x$)[ƭoԍQ,TN$rJ݊ElЮMoE-0v{\ܹ66I+7~1ن%J[tfXHPјc v.3d qbI HK&b9: ۷,;>%30.qk U G.{ ԍbvn-K_[lԚnp0| Aϩ?P!6~%&9E8k܉&5OM:Dh_c :8 )SRG4l P?>"y-1Ne{ޛ[l(x c=ѓg[O,揷xj0[M258 llq5b?w6>SQ.Fz\ڔ]4~zGb &9 VĹTܭ +syu8׋zyH}U k) #2Y[c&&U)RV-9ɏ0sɋ!FMJ"n~ڈf*2z~>=o믿An(aD\x ?VF/+H: }Dx|Ƈpc;G>})7(ljDϸ)x}cp?="^#kw$>~YofîKV:Ui|HB<~-ǿrWSuԎFۯaij_ag筎gl";!gY/1ZĶt/wmLn%0&P9 l!}~[j yGV C'5JlEM{Y~{+^-z[,SsLڈ2ӼPbPje hQaqh8 n_ sʻƼ0bk[f >ǪGaTv8f_d L569?bݭ/̎Y.&&sYIb|$XnWII uWnsXx!Wps=!]$,es=NtF~Ց=E512rVluA\jg\d#Qi*6&PrHB iS rdJ(Z leS[ZᢆJ^1`[Ƚb.ʄQ@WJr0 #Ma&K9Iӌk9bWZVTMrg)`c N*|a"ekdIֹl h t-? ^I< *"\zNxo%9=?pf'O noo qmm%<::d^&R2iHvcl=³1X'gAKl:` bi 3kkLE@$|ςEZZr?:cI_=||ȀkX`3N~0+m2+ ƼJҽ"`kBm5ݟ#{) w^hzi(kSΟ-.7SYcסޭQ.76 mT<ă:swQį~',_ּUW]W5܏"Tya[M5~tFxLTDǔMPaJ65>s gx3µ7o~\㼼%y71dYD^~ys:E^/y]hhsS/[@@GQd||;;oϗV[Arń/K=Ƀ=W3Vק}z$?_y>xf\+5;Z^at)^ )CS h8@@>_uTG- g5jr;` sBKg>!/K~N9hTݓXDX`s +<24 U*!%9^$TT+tUu{ a[KzU!%W! Qd+i*2^dꏶC/l2"`@3CO?1 ;8XcARlҥ$~^[ Haw-pٹY4e}7%{O<'>#hȂ!\cI朰Π$/Y3\ԧ_SP&Y(2g8Ǔwj&YϘrΤ *ZpuGX AНӊ-G{GqJ C巷13Ś>% `Ma8gb@0`ICIP; Lpxp85JR^`dcO_<{rkk;S؏y9lj|6f-+MO0(EVElB/[a)RX ]0 #hVo1O'`'U d~_XT }W[ZlL:?iU"Ss|99O)R!XiSS¦#/O.FCD|*,x-X *,x_Mݴy:тi5M /Ni(N:~0ccbxagGt#e'١:G7Q&#)2ӬY07+0Np!Cc; M4.dt/тv9ЫCvDϥ΂X{M"Pw*rRY,|gB* @S2e39*'BĹ*6TJJ Iq*R1ȏ*$eXάKJνs%UKNA6kOccd& - $+vK,ՠÅwmK,%;a$8HTWɆrq> #rdSFXGT `rY=\O$-&McйLA zځJܮ˒q-d20zRfEVj)!7q2"Xl8 %9+PZ6 |V|Wv {MP \]LP9bHU /F;O& ' &BzD,xȌk/S}P#(Y/@ :~$"7(dzx+vO)%R2a\BZI yB=h\]7M<ֶ>c7A:?v 94rN"[[LK>h)0ՇJjCŽ'*D/΅ab%Ĝ E&m"?'(N"5r1<9rPqvp/n LI}h?.>9Np 1$xuk `F {?zʲRS%CTda5>}돌 #LaF՜ml~ttjH3ZRZo_Bv'/uK=pSb2/=4F~bΈAy9D$9/ļ9CVU-DV&tgONy8j~vӗG wK2ك/]>"(syK$DeL(JgOc"ǿyAmǵd"AQ?Kr@e I:Q'̯,?~cQD 4 xK{4VaBxͫ|a nAw6Z}E;*]ٹ̎7-`.Z,v`3ŋϞϬ,mݨȓ"=cS4詋iJEHv@lobuU˾mt|)ɨɯIϱ~((K[ E@`d,AW1x8h'] 0_]."wG_%VJLh)@ _uIkI .Io}TEhzDAD 6h 8 ]HSr8ٗ%q{z߷ -@hǦWɒ}HN>G`MS&[\=o_Vu{2##~Ue`$D:)C>d{  Ybbgz/ʕ+˄̋op)1}W=F! ӥ71KP-وRK=הGO#MVxa,<4(( f@c#~b:Q&L!4Bem<>>?O!\ 2G79=%'ͽmr9k\b4 "`X/i3DEbi0SS\.@2Á gl`'CG4tq?8NM͓HtMI.x֖AiaH+9p6F!a֟P\1qy8Y28͞e6DS_@ w][\]qU+vcZ?:f㠝јƏŹ$1Q)NH|z:xs촯w^:N [d@.9ubrr8tq'1QfU*>%@IDATR P NNM^O|3aQ% t42aG1cP)ExPZ.h-MbH4bF|daQ,9Nx<\3 +y>m}tλѩɺ14XldI_"N{ q#ONm+l=rV2LfE/? #<216Y3'̩D=^4GѴ$V=d@G:T]8. `O!*9-")oE+Q LWXU ~h7Yx7Q^(RPVT]4q*'(*(r`;2dGN[Ѩ)QH#1TNl P Ϥ aA5CoE ̔#)Gr&gBRA4ub!yw y& F-ݲ\ndu:5Pnlbқ&8G@,*hT̯a!\YC C53G.T"c.i D$x;YC,dJX PXX;R¬ :S.`Z)?S/pX]NgHZjB#6**#ߜj5DM UZ1G" g5恊 CQZ^/ᝦ#Ȫ?0P ?D(̗ܳ >")E0'jMDlK̩zOYN7O.ww߹W7˹Mw{ٸC ?/r:t$"[b2O2 B\KT_"ZgqyUS2x1ڥ^ D{UC3]dh( a p]N0!CS8onmܻQ%/yeE)/=M\ddӧ HBbd&^Eol^&8?ge:P `ЍPES9e΅hI1/T"2='ctetB ؜&&%+}ZΨ'p0d0KyVOtl9| x`>~ĵ&tF{[ml  B bq=]x'y?0}CcÃ#1rX;>%) lnLÏ]JU.\V\ XZ66Ac\QP?u_>F+J^ q³{|1柞cT$XnƶXn^uG9r^Z$kɤ$!aHq}ZtO[d``iΞI5Ie==5ckCXbOh_C!3a(I8S2ǏVKrN( yбPR4֥\ r,5s$oh@ 4?M B%BHKJZ1YfV2+Qe Ā\5?'aI785>?!;bV}ů4,ebͷh"K{:cxvbX͔ /.@O0Ɉ  N훀SyHΜ"bWnc]=ѾU#2 M Y$Ȗ *KX6V^hmɍ'Z%ʄTZ rtp< kELB԰ސ7"<5ǜ;^_D6e*k8Ҩr \݊o |Rv眖!S$R"l75.q {n#2tb 'HPld%tW"CTK%9~H)O ! շ|E)UEܘhzs(e[(Vȉd $,C89=k+Z$!bohxhz]&Hя~t}`KĀfF~1T`h V<G>Jl6,~E=B>fVO~p7-~xPKo~~7^@B) f̵aP?܈I +&:fGklu!%f6qiq&KJh_g* dr9pjR جB Zj:ƍ;˭~x{N o~_ΜO8 '.}|ܹjBjy8)^#Cڵ[%.0@zXOkƀ gXl;3#~ӟ?Fw})h108w~o oݹ*Ì|o Z^YC6SStSb`(HD Qi(n)SN0 ^!3(u) oH0*QTBfGM"Z O(Hn+7L誫3)֑PyjԵIQxݍ5B^bB$Y!N)<,)G1h5]KZpTsv<qxu6ԑ-m=Pb&4krB>]2!Bԯ6ʖT Z, P]s"a7 #J7)!fσVZ-IV(`DahRh>6A~vThH5mA̗A=!-K:,n]OKZVrGɲ(6eN}:Tlj 'Q4-ѐ!|C0cT]RL8H2L[ '"5Ax `J&">ix#YQ3JT .V4QHCE@Lvt<@9A9R;snzwqiassվg0MhgfYwZ`ht/|\}GKD( aS~|;|LdFW}b3 BR4Dr֬*o?6: _{|\YYe6ؙڿ.V/wJ׮VXu+}&w3ޢeJʚۯ{#% -Sw^{2X3Π_?'_{-/'V#Dže޾ىIFan {5嶆g"+so }7,7 X 53;sQO(b?oiVu=*oo!k֟O ׎rT0cN]SF +]˃.߼f.e =qxpgbhV!wuq-!Jz;@Z_x5/Ltp⛀;|.hog\'gl ْCg_j$:xň (^j^B7iș^,F+zdZrw< |JBؗ"ZWHe] 4}!}u0 j>yMD\A%-ҵ2k+Kt#+#9B2h  -cJI,6 Cv%7 ?LoTIvaN9$ *P e" ̠Jql`QĬ7^ )DH#˦F%lU)5)u}b( [nJA|ah(ӌTRBIȦe% IT܈ruڢe&6ﳺS#@L(fD9F*uVu9nH$PqGy3JQ4K֏4A)*fv(JI{JHdU-ODn+ $ht8u Ua θy*P*ZS#@r7RXĪ(JԀJ,8<c8: 0bA0M+?kلQDSWSk:HR񉢑BJيOl]rvąG^?3KlM A4tt7n\; U`0>#W2k޳ZF6~"c-AkiX5'=,":g6jkC&q Ӯ`notdn|f`bgg9odDDYMn+~ᇌlob\\\ ~ S􃨞Z "][p2IJ'Fl6Sܘ ϖ7wi ;y*KD~ U-Py çg!:A㼿\T:ψJsxl{> ~nu}^5@|bF]qYpǻt}?*PK^YW_*1p7_v핛NNMLMMLN!\20ѵ\!{ `e+,s.@d\K𧗱Eb;;,h*<[9la\9//c,ӧ׷`@x~\':[lbbtvv ǃ C,*oہܤuTJi#}Xt% r JysSǛ.T4~گ?]~7 1`/0oejCiEz{w&.!"L7LdTƮ\{y-I*>lgchGewae?TL'G y˄v%e/|,ȡXJ  JIq*t%DWq[@ 64SnB珣tRBŌb- j-ɟP/(2 D t|% 3KUEqѵT…m[-N.~)9y  ibPC3LpdQ(Kh'٤'6@> TKva€NւuG}zsPZ4" {5X̏ڲWB5R>fBh5P v%KQ$aQuښnF&z.$PN{FIh[+@P QcJZJϨJHVnu/E51biH8*"pن`H2qw$Q0<+eW**GZ4a,.= @I#)ra)砢r2BjMBe"Zg@0C.1q\IK#2o4dxR3rBi6cRE$kL<`X aB!G5EςJm{(^!X3mmir~N5ZNw\8"%'@ yr³GLCyW$L<)R|ܹCD(G&eYUND:E  x1P'~cܘXd@t gI1£wp YC?\@Qb@`<}YZf\l8PbM{Do|kbb<]+<`Nc}mfkzŒ2a XdYIxG_lj DN@Դ\?$u.WJs O&3_^xk]?i]&D=8?ZPwky-#J clbW&*ܵvx}؃{`ӷg?y]OK+F h ܹxd.w<ΗzLђ^qSX(f](υsDl[)i@幛 0|DCeFJ]Ҕ !˾7FWf8K.ѩ`2PɐY 3`۴}2U 7] ,caM& H~ڡbb@BS%OE,yDIN5(TU,CbGo#EAQ4GPh\lU(Ij wȬgYɰ.4<ܢ@%`jf@*Re* zeK kB\SLn>^Ң1[(;M?<%šz>ETL,XWo0݋%'IPf3MRRvh$HD9"m*T1I \$_I7㷐 .! AyU:C!9(@ AC84U^ `(@6afR.T0^^b(^ X2Q>=᱃KK \x) Dg 7sH0ʤ驂_Dr/ܸ l?^VZ?sD%o?#Hy<8\ gBX?14rmi|݃CI(EEG_"Ƹ8'ұ3 ܋q!AnwjmӥG^e@`˼f˘U`{X-vk0;AMγy ݁jTj!)~T浝@[kb|n]]{Cp2]#?O MsssuWVy3upF\hxcH.ִ^(pܯQA'JP~g 9:OigKѮ!"swZ/>'@YB’?|:߈"  ]Sx ྞgyX391;aYPCKTT&،_ ϱlv耶&=-dq~v-Es8g}HΤT VGM&$M{`L¥wfwҧXQT<9ji~uU O C5RW!xAϷHčf5kǼr~[P 5PX:I3'F&*Cdny#QhzX!TV*/; UϰL r1{;ȏ90L 6d,DbWv8H'xc%h᠌AَXP(%WCSYPZR3kl|dP`cy{Bf&HDLh|C :/JE( ]6> ÓRL'M(e DZ/o \Yc#EꈏUXBډ'NʨJQ ;$hMGXZ))*9 'fJ_IŪ2|/jEԷU" &jzp~I! SPIE5-I#1a"@ X$YG+QPoemf9IK5IHgAˇ^9r#쓜Hkmx$*(c ;O9beMtn~;r5iQ޿?=7^v :|.#gBI: X2ډo,z 3vH0 0 ')^#PяINdAH9i+]\ ."6FȭA̒nq5x!`z> 29!LaO2V>;, q`WܬDjSZf#,AM+ (x6X1l΅<' 6A.ɖYg}Y"gYzYЅl>s D6esU{}MT ,8y &|C9_ *Ǟf@zDSrm0` S} \<ԟp`w}i믾renXk;e:bgKϞ-=~p}u kf6E+Xώq1tNϹX}|ROFzI_-Mk^0pElxq++\& AeB>-V/G>u5:GAF{x&[GYr/ӪIi5: 48o՘b0;Nn/uf鹿ǯ?]@<70:0:;DcH}kLvLwhm)zа00f*dJbcssw,YkXS}0j {yv89ݪ{qw8_Ww7rA\6%R9t.aN+if":.QHf2o1T{veF4Ic%m`)?aDLTiE8A\Ko]/Wp61S _Rg WpggΑsO"*D+]0AoVrS\ Re.65 k`W > TC{$UCcP_$ܸyP4KKLMxeedhcnG dN)&zsCFˮ |[קnci ũ(oΜ w|r5*厅*@a9rёqORii K-olRc,L g]gtem;ccS/\nAbgy-Nڽy6y1 y`7kYMd)XFD řNNx2ݸ՘ c!Jpאz`{kkVor53Wx7#ւ_ 0C44H$UW̶c"6ζ-pl'PxX4RD6$Y֬Y`%+,T&XqEOxc묂-vJ<[%T^ Q 3v4,KL<*r4~:_M!JVHaj%R5.,ذA 2*j dI4ڥX*K&RBHtaHi# M2RFe 'o“TP2x̂) Yݿ$2R=ZDZ;Gy Ro_\W3CFbv:(pOi9rSiYLgSU\bIi35HՇJT] 1.R$1_Ag+EsHt[ -@ MrC)N}X Bd6*z.H4Ƿ'VbE$[F%R,Jg :4瞼O5U$Tr1T_ŘAb:K|Ȫ b‡hkK:A)ekXJ0G9R< 3z4!&bB7RV8RDteRLOw''a="H|!d6333r!L2<`uDW/RgTP XLd:\?q$l\xba)4/"-NWAٗҗ\vSSnD$kw{}lVJpy!1Jye)qEYqA4C&d-YQ*8̝bE^C.J5UE-m17|S`:Uj ܪ'Α8 I b"K42fry#*eb,C;gΖs_]쐉-@zNfdmTp.V:`{؇ߡ'Bp&y )z𰖡7s1q(|f+'Gz]7sc^=`ly{ഗlcIg,]"L JEW@q{r'Mv?m- |@C@M3Rh #GvE8cL iymItYY_(6[&|"k3bIԔ;g vL'V1C۰IP_"Pb9hMxF93R^f^bPXxnm0Pњ}C4.Ȃᮍah$cC TVʯyfʆ`+ ,A~S}b9xdlE%u0Šd ~CJM U RFq"1ŬI72@Q%VH*H* ! DÈIuaiAkElNqwG%iTXJ2,^oo2LJnTl%$!P#L WAPQ>-؁R yXyS6ds]J@DɑʈGնdf b˭QR n> xTxZ\,iL,J#-+3U;\6=W`@LJHu,ln_5M?=u덩IFFy@sr盠iiC"KefA2x>ܱ5.p4Sµ &f"WX`“o8x.1:.g〙~&OuzsJ%/8=vlCI},llHa_/>򼮾#NQ|"zF+@dss <Qּ4E׈O n^591Eշp+:?]ė. L23yMCZm),|?E.Ͻs t|{HD=zp/=g_^%c$YD2B"+ vOQ]elƶ9!X-rDf #?U˯)`~|9pI3i YF @6Dn.Q$3 H8p"sP`fyVЌhO e3iE:S@\ d8d ɷfFPE $QdOi$"(U)i1Etx)58"t)TK:72Pౣ(HO(! S-/X\%(Vk=54Xy6ɴHLFH] _R2s/J#o] %c@z .^C터x3GRc破sE=@qM^5Ж,Hnt)% t=slٳāg& =sA(ide@id^{w~"Yl!X:PW7uvtw#zx4wHS7i` 6bUL)NQC!膒Yx+ID@mvc?X>annD+KJv9%| 7L:VM.1[afvU X=X)[ָ`%RA'}Ƣjx 77vc:yWVWVd匚j@IDATLv&|n3Ek6뻼3X_s_Yg;6u+%1~oʆT1λoߡId8 Q1<ھ1`9#dÎhh֛{ỳuPۀT#_ݧ]`C{`sF ^::`Txr (ӛ5X#"ǧk[ <)&Gyݥ]>l*+: aع57;']e'Nϸ!8:X]gecf> \(W\/;i?>Y# RRuKfvBVRRtE%XOt܌%3xanNEc" r"G]r$iť6TOW^VgKG% R%v*9uaP!W )vsD PS!Ԃ !`e 4=LB"MQDFza\au!-gJpAxcӽ"l60xmF T ""MA8t87o׎CdjhXcj1W/UXلG_Z?Hz4U8( 5cn9?Гv$YsGc'5009za,J'$1>k*Ie0DQG܊g|&H|@jp f6vh>+lj2qwߌ5 YO\@<$/aoddYã|4JhV,uI<Ǽ;,b230+2ᡱ>)QWh1ޡ, :92h%&XնLi  ;]=c?ARկߘ{[[Ի/!`uW_߽u?QSZEύ|߱x9`@{yퟆZ3Bp_ˁ7rQ&Y-n{|Dq'O]ͽdl73GSYt2,Tq՝n'GLp=-(x(H".)7qJ:h1ȃ%dr,Ox*ATbOb(.a#rCP+VPf|P Gq"q/k>BY'MeOqAUe/`+H1 $xz/N_c^HJ e" R ]%cU.Fd6&) ͔ tPCgɃ<+L5wH̓Ʋe Rp]h/m\  / q^l,5[D3Rr @NIfkt .=Ͱp1 `αJ$E#]ԔИۛw])&:l@Wt, ̒z85ūtSb3!]+>0 :Zg*GtSŵ&g_,qT;@UВ&QHtI73>y˂XBO+a c ,pŀG*0 JIDObqK"(aO;:\fٹT40u91.|W#K䭢a ^dADYDn(_{݌lNa"B.|xU0whQbJn"!"]щ4DE{?\ ^}gD:Fλokm|uH38KOeEX0 6  ]EO>6 pClmo0 y-!K5 /"ǧ6̵ғK;;g?`Ep8*Z}~_TA N<]swGRyo㑲8N.CL8!wuesq0^a(_a?B̤r3IQCTO4sn0WT}Bf`^2~ϦI&>F,wAuX5<91N)6^ 8o\Z6EV7Eq=ǹ=B+ Oݸ9}룕{,1v1zxuF,mbgӭ-3>aR}&|7 Gɉ!٦W;7=1HLvFZskM> ' OBMcMkW@S)ҧ'㗺GfS)ثCf1iaZh͝SYǻgK()BpsO Ϧ#ryK2D`񌅄 ;K) (V)M]#$=fObqrX]ɗb3 /rNա Cɤ*Vz=QnN9L)(pc?tI$Eċ2c/51U&cQ2"V9R6c$-D* M¿TW[sV mD150瞌BP ԰2 &E$qe [l `<'0-/"g,hLS4+8F,ND ܼB֠U|T ʗ@uI[q cP 0 iLY!h|4og6Râ'{bH0:$&m\B|I] ^sM4.sQ򄏄㋲v -LAd "qSZ=%Q)JCtNLn\Rșb|Gp[u.;"tU?w ~;:u>6'>$Wһz\y4(^iLП>ȏrt~RW2KDTqSa D2 YFO<(n\C`@`?"9[*N/(P_$_䷝ (3" }s̰kjUs̈́|/%H޳0<>rY}+ \浶~ WS V;`!>)tnm [D }/pX {sBϳO46VKEE`gLθ]j WGkOm\l}83 PA(v%nx^]#EY6?bq`Z*Ncj Jnn nq؟MO1):Z]Ov,lHW 8>=buǯN\=;yvBI<" /5nU gg/^a F! .ob:,6,m:q3R/aXɃ7OIsr(ЩaD-,0)Yr\4")BaywGF2`>'-/q1b) W'rɷkrBLG_R& yȼ +:JUHƔτ3Ux̑ ;8eA1 &!G1VLH#n]PԚyD:", hF2Y_%AbUxjM!{dV%I=df 5I Y[p9gTIY(*RJ|]`W%V@\ nkibA/,J8\Q!9#|!2s>ʂ;Kg ]~ Sb7C/L 9)]'am84w 6$H)` Y?4<% L ᄭOHVÁjB/' E!WI ւSc9*݄idjP"{|e)Uը 8 :袦M7/GqKlg.j)X늼;U];IT6 XO x(GLgE qPa#Y)Q( 2PoMʱXЅ?Sbyd1y,Mͼ)Vؑf0CR'"rq`L&16NU ه &lqFqQ_XJn`D͍]P0v8m0N?Ց 0Tp.(<a}%7㙜_|gؾwky.76>oTPIȯ"C{`Ioc(.w`85OUgt9."6;\[{WUkQƨК*g 5%bJg/Zf~CLD vpQ/60u—6h! B9I%zd9yW)$ˣwY6*\թ]sG';kۋV>v^*)[+l.c=.S&+'Xh&ǘA͠8}Duj#t_$8dSђQ N%UPɎ~Y&[p XxiA|amsL7/ Vr/?9b,i5Z<, Ov4naH2Eh]RD2QV& t'%u?K%9XA6A1\BBBN A~"UCeے|5:)Ae'AQJRrJg$*q_AZb(x̧-'էyN"2#mKD|TRͲ2HT+ dHRR5؊ H#bmBO0T+s TaHQS"p8/JR*6fJ%iCoV҂!\s!ow6=D*^(UdPF!Hkd'ʖb8bZ+bNpRHqW! F9FQC!Jyu#ͮIS=UPBGVEI[8H'Bc&6#B3h[#)FP2j/tR CH:QLwyo g'ʺ`lQC1HxWR(RXKWI[ʃM *"2|tywK͜k <:KdM{ˁt.&yIVPtO_OMƓCÄ$P,ĊS@L AdOF([ǐF"cyWe0v|9~^lf#r zީZ ͛q,:8Z^XZZGGQ.uezQȄ-q BrՃ/?[Ï{_YÒF bTKa/+j.a7xFh`]zLTMJOLs MSCZ?;J|WWx$ ՛Yev>l:_z9}[$*pzpsA\ޮH0} Kt-MVQ3+'}m*Br BZ% Ld'BpDDѲ!Cӗ+aY3 ?OqΞ"ZzNj  X1HGQښP Q:O00WIr]-%E4 XȋS GH ^J#_)ktr"P(}S-b(l1b6ӋH*fk *7? YNaig'<+,&#$=2D}ܲiO6BWQɂ1rSվ(n*gQC9Unᔪ%+`VTBr<<2: ֓a~ԑmP=#Ԩ# V|AYgLU<)ehֹ7LؓH\2nYTdU-YC(M 3ᢵPSc$ /;fPD*)O4w%nF؆EST)Id],8&ZU>"+,l9vHWtR26-5րKiJ!J=m@DtWRRpJRW Z64 mJ`D'M s#3뛫kkK[3toըʹYrH0īpERL"Eb5Jd=`mn~&f"& 25f^Ii90/|G8%' REZ'?>$ª`ٚ{NzVJ=^;(vLzXNNe[wi}w1}SN="Q.* rc4ag|W ?33 k׮Mn恥 -2H< ;.66|~.p! /jS"K:0|3)E9))],3zX  v?Ewhxǭ<Z×?Pkbr䔇x9gwapmm'KK\w"}l|brj 7c s6WKWQ cUż7 ?|pym&Nzg7_䧪PB6䤷]OC&$Ѱ8vmȰ3PFoUǤ07ŌHr5G\ARr IF1TWv&zӜxDdƪ W6JWݛ ,iX6X(6+JD3ZAdOI$ .8!}SE DȄJ*]@L"i=zPW;QʫaH^QlU QX+ES1CʦD5jC#CaA)m,G X$CxHI9HpRQn9o b98'A)9nD)=jXG,-DTRRcXc&'XUeaA.Vhz@(U<x'XA_kEÎ/w8L pP:F$B*Oãg)\0B2*~UljIvV,tHU/!GHzm*6JTlMUM܃\[SbSAcCbᲷ2EUKeT' an ;'",cD]in \n"jmgamTGc^^%Q*TVPc*QSZ$RTUVzZk ob IUGGّr5! $*y RbV2CRs&% "W;&oxk/!,S=ÝLۺCh?(ޗg9Fro2$(;:3g,gᵪ=љ?<g~0IIK콭p[*{dѴogCECxhBHPl"7o]җޜ ݹB`PNMxى_ bʥ--..aI^gY{'K>/+3r#22rh) 4q!J JI 72_$DdF [Fꮮ1)r#}wE%H0#{w=~\G`#omqKqwpOHәk&bp{ aE 2r`$>P9 `4x&z=G9qM`?vt;stQ ʛg;|C\N`jw匁b 1>_}y{igNc\X?ܙ3g6ȉ.9uj9M; [wSwxT$ohn6˖FQH1H7/vXDv˗sZ2^`2?dֹg67O<<{|?/q~QʛA(|:aXmb /_+?~:~^>{`LAN!x"ͽEzؕݳV;C, _rr{ĝOwu1UXh5Kz6. o](6 깆;O? )2 hrCF>sL3%K<ڍC%Siqp! ԻC"`M\y2 n8;!(1G)I.:<2<{(al&QkY-!#HA%(t˵c,2QsfMjE/'G8ܬS5:5O{`N\glf@*ę˳fuMy,dS0AQL1kÔhO6O;PHڕK`уI:HQZb] R%FA`nW/F*+(tȢLu6BP'f Z?251QehvyW&r&Q4kJ֎UbO2*pg r+K -(\&osfL$E.Q5Bb縲er`!fp;C v*&x\"9I=G\G L C9=F NZֽ^?~g3OiBJ| ||\|&$)A!L ) (8Beh9}GR H12'dO ,Q33]EA m;]#h߿/Cc}gKZXaF)3#`\g2*.%E3'oJb4pFJvM23fpy\;k?9(W%I=R Ο?C| a7n;7mJ99:jg3{̟0b`&KeUb41o>p9ج Hoɧ" c}B&zy;d`|m8bԬ8)«|K዗N" LX% 5\1Ͻ` nq2חX^vls8|Y.py鍓s+Wiokdq|Z8 8Y8&eq̿wu8{Ӽ nqzTN0ܽu/?;m޺w&#x` 'p6r9F{NGO>c'qŸ/?_7~>1;ܼq*;>H;嗿җ?xK<ş;؁_8?bF0`o9q8H#~pA?xv:qHk,!@C#Q^r hs _yxEhb@~xI:Oy::nvH}?O>r;NIM4~e2-B Tb8"625mĊb|⾵{p._L{{|ON~#t䳨zv"!Rb%B4 kO>կ~gPzʞX27iz*$qg'AE_u׿9u# 2~4Lw?k62\zI6fO.S9ǽDKf? C+p&pw}?r|+3߽dEMb =믿O09Ljb=?;)޿\DBBd _l[g>?e[go ra打'nҼgߑ}03V $t> UXq5Ő3 Ga᫷}4ED/7O {@хPe ,ڥ;3x̐C<:Fy07V(뽓K:d(xH.y߹sq=dg=7u)NQs鳇tށEz݀_{]|¿w. @㇏9ܹsesγ޿wzGygn'p%ѐ|I/7ެO8YZҒ};k\ qW}cot66w-CZNڹs(.co'UϢ">tX;OB1vHwC+{ 1ߘ'!=bmKG @ 9@@l~![::?P-^I2VlPi̲wbSrtK\ʖZ+clUZi~"LNiTS 7&t|7𘚞*%:$eܣ>JC0nYA)*I%_+*09h$HTBCqTsT)WSPP '41R6<\@l"ezSPUk6C6MG3"kוR^]mbvI 2Qa5:^A{!\CvkjCuwJt+r}&v#C22LY_hɦ[ \B>\&L|$pkѥl= _t٦&>WXw-r v@fZO=Q@R'%ްkDta  )"I`ZXW= Q32$t-L"X!.b13^+GFBE tCa(|1&Aa I&Bmreþ^FmDj9y%(:y2~!RYHՍk(;OݽOy;# Y-ݡ"֎qExpOiZZ4c'8xĆ p7АR0[3fxjY?w|ȀqLNB}Y"xsD޼qГ͐ r,,kP5&09Y Uk8φvڟ_\z}+W.1SȾYQ]|YFϞ>H]fgh>ȜO>믿A3'əC)T=!_s?iQkZ7G!!3#"Mg>Y% ?gxU 4-'} $N=to70 y!4&c_gRDH0b-(ŧA_{O?sGb3!u{k׮o~ٍ[W !<c)ʡ:︕gR}ehag{{)oXv:[n}E9ywl Uª GҨW ]02 _ϋ$ tVߺ}/ }%33!V睝[47т{NDoa_zN]} q%)=Xw/noTpeן}7/ FN;;Ï>{h~ե_]zW 76Os3wq`N]ǼSތ|N38U)G< =V^3ݯFmҥR{EH1σ.X@,62.GY .tD:@VF hÑdCJnj&͚0҉@!c5dZ^q!/b%n-ZW6W8:l)B۵PVV 2Ru+7ZaF rhWx^ܹaڳ89.a4p!ktN9 .ʧ-9yԅb#`͆iwBZ-Kӱe gM!o6޿rnݺynT:y.ibѰ (ܹ{L\i8XիL8Kկ~ueFtԒr ^6UAΥ-,Ӕs]lƴ[rvsx>Ik%vwqӟ٫C+ƕ`Z:'|'w<+Z4"weH@o-P2l,o=}Q5޺VЎB  0 Eȑ(go9 ØOO q2smmmr ~Ï~=|W޹_{ ~AP|/_~K\v*Vco.1fϋ6cnx}+=']Ձ|<+nkxDv 9n/Y!I4df+b^Tfz2(܍#ZJsOYXLA7AJPˬGL|f$cESxD>:F|Ţ e[80fUI(X˒YOlςIBoQ=G` s>:M {+7 EBQGQq,M?6WWÆ"85YT<.WmY&ʕF叅 te6FoIֹz# &V3]^67X%u$J@6M.?`L8!!gK5i),`k 30Z#1ii,}aCH@cY;r7M$򚤊 #o`=M-@"x3ϹXSj 1Z9z1+}oI_DK(=t);/>I" 8d}@ HHC-g/0.bȅ.H3oY C_#3rF>?-Q>ɓC4V72xN9⑫QoR "բV\=0gx &+W8B-6u@;|!H8^ܼ} 46!5 /uD1U&%0LCaꓲLi5p@D1޸t Tn=S;WGFКܠ'кF8|'E 3q5d3 G\d: C \8"而q ux4?.'?я~n .$aT,W{@;?\tҥ_7vnff+t݋DvSx-7Ïg %\G]RD!K.ᣱ}P8a\UCs?wN8~qԩ3ֻCՑיhPA6NUKgo;!?{wJn2H#_CrFo0 Aw8@}8 ~9Z kC׬JѲeOS5zn!7ltP$LlU搔)8ly".Ef2k_x} _v܀I:Eڕq[U)c02zl,Y↮ "E Hh«&Z}R8 &IE I*w !3BK)NwNA?q(10#,WP_kk/Jm i!Z{Ž/I n?`6[)Bjh̘@"oݾJFKLuzn'l"lPWCrw} ICv g]q//\raa?񏉁?~N{ww?JޛIVWnGg?&M2Mŋ8p{ $ so?S.``,B& uфّC?7Wsӧlmm욣| 8ۨ.=*Kjh/ 8C\c@?hɂT" 2Q\8M,B@䟽,Sf#}0ho)lXպA"g+3x-6a~e9AUʇ,jP=(VrS=NP(&5yk~ԱEV7NpMTԀ#] Zl_U+Vٲ?CO\N^BjZB[1P.}hD8hA"4F-Cc CP*X,cْ)"u,nie+~Q ;Ϫc]{*bDi DM|%ph(zDX4 s£R,L֐JfSݜaH%S4H1RҕyXqUc(#v9VmG,ه3Z *IzdY47/-|#d8@UAVki8B6'͊2sqxp$1N~ըz^̎*(IЇgؔWp] HtB=U$N[&il)L \+mV#UO>*HbY- YirejνZoxs-rrLn2B/ 0s dea N&%TdGxAbX vu1e^Bԙxo8IŁy@[oFwo@ @.hw!mON&i&qȉ\Kͻ,x q,U!eT[3%!a|zsۅ4O0{c W9>4Q8U!n۷q&'348y0x.[Gb 8^ \ߒr<ƭh#rx3&&UÐ7PǸF8pp>DZ ^;M^ WX˸h3Xc1З P;@p!1\a(Պ8'y\?O!8pl0%Ch#N0""rh8hڅ4~f{A&"(ej#샿v,]?ɣ6w$#7op'7_ً[6lR<%%X~U|чxww}c&M(qԲ#1z.D'GOKX?~a's"٭g8ԣJE#I9G] * KX)G$MQۗ]:p<g7 f/G?R#bI Jc_+l6?ҌNSu*c8n);ۡ EΗ](/RƸ^f%A߸D+gt ߺrjrĘ tyиEt_N\TkHnǴhDPԕ+]*]}l-ZC:C| ( UXx3Rj)D%z n@0Mn(U%hK,Ve&0J4KDe7:vrF،Q;%+FQ*ȅJ.3cnd F7'o>ǜ0tK$BSRē3A9=y9iG'Ib; /E2e̖5 ªqu0h+mٹy-n.Um|w>Ʃ.{"F |pm݂V0(bi|+ 1*s%,A3Vp⟝GzR*\V|$~@Q:+4V;KFdbp=gcq4Hh<UFZW\@:W hc)p.SBP&xqn2[S"G"=K^z3SJglHD5@j"W P#(?{f-*1, +_+n63PWuWt4E&R+r?ѺbJ%0aOAEiA0 )u/AJ@qIW@Q#HنUCAM.ObhA)|*4:r:cS ,y;+#^i0.e!,rӃGB;a\q 5ƚ%nSIb7fl9UΕU;UcԴgSȑPXLd`8JoWq3Rc;F!':L*MK6AP"EQvuo23PFr cqOss}ǀE<4]   +IB;2@]BfQ+P.D:;<_Dh0I)8z$ t{")dҌr$@bX8Gͅx8ݞ کKg`bv;;7"3zEo'0#<=PĉmQ`N~RT3(CbnwOzS5X Y!MHCH%3RlќbkγϑHu;7D3D4ӍLWr{ICS wKeFn.`0,ϱOJ:T TݗmIҳyo3)q&Y0 g2_?W2yKrDgIQ|g[Ƴ9OXEKR\`N c\stA+ ;tk%G2>mj"wY`rP.ːm+0c(ŨbWly{EƟlWxGb.vSgA J8uH]xEp!mA*^b\eb.-0nXb@{rǏx[tI-*'Op{=#E+ZLVu#F\VLWϖ;dB;}zEx*X0#=EL;T*B̳ϘƊB SOޕ+Wpv%zMHg_+qSR aGq[vol1זw&v`*Y=nWLUE+XYlLTvpc<  /vS#J==1QcO]O+z*YT[ͨ;1u *.*v5!X0_QQiȅP% SL)y~; d`UvĶ\~$fru|Ol;(uBξ#ZKEX>U>O_E("V6W56X}J=`ܑ_B JRQbZ&wc WLxP16 u6HՏWZm mn$pINL5!Wt ̛MSBxt/@ȼȯfHk)S=-Z)sť辄@T+5nUD 6`[q%Č7Kʰߙr7cAšΡ :jz@@B u\$Wi_|ä_U%@!$TƮ)VH_餉*H"?Օ.&*by2Ud"` BiE'FvjN(L5o|9 Q[kOB2WhQ*ډBx6e,T$74 'Tl%ڮ8f*wsUUB_&l;h~bJ1 $ܶKL?HZBz`{^p?Ą#s^?ye2jrӗ8btar򣇜p,dcf盌Fq&5qޖ;|)>g5ɧI朊s5y{ȳQgloFD3q .[*]v&!y3C㇤d o3#?)SMm@7.+NH ;>|oc'Dg9 X!06!]kbkq_"L䠖I.&-^Ţt[Jl_ꔨhE|{ -PBAD2- e^RJwf Hm3s]l|3|0 חSh~_h{c :;I^$fȪj\w{gĦ$>:cQm}K.}p@MՋW׏Wۨ - 'O\ ! oYTO;*?!XpQԽׯC`ݙ-ƨ6luQ֥Q]am+)_sq@F%sԂ tjjV6FUy9p #B]9 ?^S'el)r"$5d?pϖg">$)E[ D }8[Q,8k1T 2#+PtSKXVkEn@|=M6?IO,EP}45@)86/Ϟ}5!z R6߭>A&2iXlӋTU, N2*0qb6r C!ע}hQ5ԴA & ,H{A$*cb/xNA 0yX7cԳ>{g!^.Th8o2=-<U9T!%q.b'??Pa38zxo_3oZy.S8XY W> Ŵ1?j>[qM(h椢4>YD0S5|R.&D2ESSxM.˴-N̈́&m 7ߘBFHko`z?#‰H 'fquך'%b;tc4XKϧEg>Nd2\iYqW܅s4g<NJW8I7rOH2/v?d  t() !yqLkBNf{$;GTy]cd(TTtckWI(ŌL#ՅP- Z]pHjcWp,@>J' fVgTU;i@C&}1R]laSG[(9!dڎ`"9A#y2|ZH7ax ` \ GʹJx+4Zџ>(VGR*@[%6We@^A0pA=lC0|І'>k_sZ>܀@c18ϯr'D.'f=H*8eBջ7~ELԂxb}Ih /T^m2fVҢ*Ah{W_P:Bd.XȊtIeV\AH-A)oPXAH N>["9)I+3Z{Y=9{S&H,0ZסVA]uZmyg$`&9l{b|ͽY˶|$<̃p`۹&Qټ 9Sɹw@w2F2W#padUCie V*0O'ڛk4fیJJL0 d/x>OQL>ᬻU$A_;.x%9/D'g:qqM254Ei͵JA!LgEpH9FyH W4;  ΂ȳyٝƠl)Y(H-;xHW ^'_'6Y\i n Ç˽>'>U AAaҢΧbW9!])yӦût; wsWyj4 N_!+Z }~ܹu郼ð7x#-S )bY@,:vd'Ͼ;7B, yų[ۼ[p084.N3QmOk'4YDI Fm-g {e25>hs99bꏖB X#U*TR#Yz]:(HLaB@`-|p,:+n&dyWVcpB kB*,qB-׭$'KNA/%0 .08=mu/A IITR\)`gDd 3C2LIw5N$tM0-|dV/⤳3gibyͶ{3UH8RMb`ixGsAG5$MtS%hUmL,"̦ Lr?ZsU˧YMhF`u=XV[5]:u=IG9km00 YaJ_Ur )%j+TjtYrL6j ; JiK ~`-\Yㅄ*-DT3\g?zIɒYqcSH5B]p m"zO/O$1}H,ǼS64F%"4K$4w$L&m{^B/MI _@\  Yt[Ny$uF|8G5!\sp{g-;)8ZgOq:y]G]n&O𐤓9$SV`8LChF.룍A˃nZj5$I̊L ccsm?4\X< d%L6o&k1 +tCWY3ыtz()'d`X᷻3UrIĖ+O3:xaդ2 L@nHcMB{7` k@1l"Sf='\fw1߸ԛy։ )#yDmc'}uOKa[Gۼ7c#FCZw>y8}0@0}_9qCPk0['vSnFJpl#kGrϿA5B[|9#`@!qE?^_[vWq9wqrgϖx|fAt"u-<+~mS"1qNzFUXd]VrbIĨ!`E[m£Q^ )`znx]̃MY<99Y]H>HT Uz8c 츹lN9Ndcޠ̘| KV ~K0qFd،;գ" ͺh-iu5x+q) 9ھg;pyRC޵l<1}%@s3g6Ja$c%cOjB-z(g0z DTVruK@Ƣõ^"{xOS)|ky_20y7`:0a"x$]"J֜iMO30xQGKZ:Gy:{_a`]}6Ų-psz `/X0^%-mwBaw̏>}wg&!dxPRN*o$;=~9彿(?|OL< ߯Aumdگ7ݺsK^s1fs#nj5bN6񷔢𪄏DF} dEtW#@f"QaD}.NōUr!ow-e*z2a)B9UD֨Ke6+ڦORI4UکQ\ (ዝR=:$ b顐=j a@舑+ @ S~t$-<Ir6gҜD>9ɝ$"q4eYqJnX<9"$uWi0S4qʕ%2 ,~^X^oIۻ+I7)Nr'&O&BVbQxp'Ls`/,:_?)9J\[먰^V%&JR'" I9uE,7d50<ETo(D-UO-! (]%p?Lo Or8"{ "}βXZI^'+5jmO^ 9];k2sX洦)R@IDATNS50K 1*|{n Ec^wG \ Ay'<yEINAD/~[UXeD@GuMeՖ+.@NQ73FA@>ega :FAcrILR"MoIE: *PnYYjȯBUnm˥*!zkBaIK$X.U.JD:Hmk H.\kSPOpϕ*S ߟQƚ攟`"R~suio R5?@!~e FJA{ ?CFjTR"j H:^XY:×E5uMtS*1߲z 91PntUM8jQh l4&Gܤ8iסŜPdO;P8k4Mѧj4MUE|PA05~N$z Xtbu'I(ܽi _4*PFÂ׎8Y 4?gALIn/="ݸZc ]IcWDi (}XZT}BpqO<== Ib^5e g֝#YxO7"5ar&EL^C$ V+N$^s'>x4pi`s 4kNZ`s¸gvdfC,֑:%ùLnW(S ?6D1cs1 f=62WMi^V_N g!4A; 2Ba[.O݊^}#ΈUle{v(O@( ]=O~CMgΫԒc2>w# XEv5/|:T2񭻫KEM4@*&E*ɗXt|ҋ0 e:5lGL#:IݙD{tbJtPA3׊FI&{ ~ث$Xr |ӧ6"#.*DYhVI=gBxzk#HKRvJ@ʁvh_KSg GҞt3DPP1Daf3cgiϺ$Flڎx.zp#]\H1/{ xԚ` [T㮡,Ȣ2ſnyFqfc4dq\5, cAe&UŸ(*vsvcDKDdݓ&{F/qOp.W*lE`H#Ƚ#4HNTSVJ@u-. !|4L׬biP$iȬ@$:Mv䥴İY3*Æ@x&ip cʬUv P !1WW,RCڅYE/*/4+ygO2U}1ƞH͉"s UmwhuEPĬ&Rc2^@K؎^l( c'&FS2@I3Te B*:U*Kԓfpr`ڗeAXMu{R\(bĦ*""]2\""(K\w5jȔn,{Mb#y%XP-'p̢ [ jR)4F1fjX WU#:g, *>r=)av9Dg6Ͳ8tgu2qPԩ?1 +AD,T 0t܈<`5COlzyn &\. +;zIf␧L !KFϧV&oV`yR'HѮ MޅLXJ)Xgڄrmx1o3<v3g Zhx_sу@%#1L9yjr8(-G`,ؤՆ0l)-HXwW Gd!" Y'Fo89if9NKh"5hK73O1.65@@Dꔠ i @;0`u|ĆRKH MNtþ2=b~CGuݧ$_a0N"Q3 +oNG bO:}94wѵTٱ5Y=ݲ[k.Qī+t+Rh!AF[tSw,KsTga $e6" }VVO32Wʪ=g}0=C3:K=S`qOJۏ~.>730GsZl0.Jy3-d E1@k15ވ'$ގ9/cƚO'"z:O@a?`_ €ǀӑ#3:&r S5Gh僨4#`Ca4(ʑNNfMz8һbrوs]V0l:h'6fVhNEN@TFd\>,5ԡ@ek.@8[JsyJuZ 54ZRcwlY ÙFoQС/<ɱ8rsN6}n'Iǔ&c#,giN u^n? RV|_jvPFLN W_b(/8j4w}Or'ռq`#gԷs; zB#wu'zFfho1Ց 9ƸU‚entu)V &Ny,sWfHs ~$X ?o!Z=Deר=W ~z|eف\Ul֫wKwCo%̎dX]ݱۆ,Mj%)a; f)o60Qxl 'pY1N/Yt;*bߕe(.X؇y Ʊy9Wϻ[x\^@" {!]r@ltQmhpu[nij{d±]H0a zpz5ɦ`xZyдI嫱rP1[Щ#In D#YەdaX? 0w,-{[22BG>eq40rEE tm @72ý͕cq31K1նt-F%n۞'7`Q9z 9Rjѧ6 ՆpDge0&1]른G0RsLj⩋Ŧ>D˥:-8^n"{JcxYեs,ª^<]E6)(Lno5"Q S3q鑕 lH#!çFK{7G%+9aZ)%V!FRDĵR\PٴoLJݨ) I/ [@AuӔ_D$Jް8KA< o F"#5;aMÃd%iof4~Dm &JKn!s!-.QXLq,ZՐMa/qEPB#ϡvj,šOS9ĝS-P:w@X.TPw-}O41keo+<+,6<y_xKkt(s, P淿/ m znѴ/s:Rڏ9ItcfO4eC|]W}@yO߂}׾>O;g*L~wDmzM/ca7ULP_G2_* 6ż`RϜ❊Rm7u50zꮌؑTͪ?rٳWOet6b-iyfKY5n5+vE9 Q*@>3߯O@JDUT5r90K00o./2_Y_oErԯSqX:Rx?`%fwϿ)jjQid9&j7/5bԮ8l`Q\ G&\m}Zl0waE˽_QI") 3 [` ]1XHK[9cC*eMu. EU8-eWzJ4 ٥w.oɂEAYCd<%oL@AzY/r`C-bF9NlQ^-܈(az6>/( VSJcfS1q 3[R%ⅶj@pjD)jQ oڻ lVWM?,ՈxnEfNA7[@<@FuZO5G2L SSK+|hAKNpDܖ7OϷ]Ĥ^WtHT+[sbH'~7ce{wf5ts K"*!VQ&5FU&bRF Q-4 lB3oӱgl .#ѿ$na$VD6_b/7: nqƳFs,v]O+&.=t涿{lO[~i dߜ]AK}Q_Zⴹ=^=kS]29oݷ}KFo%1"_rWO[YN'˱h(;(m KO3ָl>@B\ieKgp$4T !+LҠmu5V Y4m%E: * `{j%7ɇ Ko&} ޕ@GnڻmZrcqDQX?}U)+6;qٍ|e7uV|k%@S驫~ԟYbqÛ]UH6r޻(,aCam)=&Qr顐>|T5o1ᕔ.u|qUkKAZ: 9QJ=VH@ƍDrqS7 IX^ySB)?/˫R(d o}f(gu8υ 4MlgҤ ly[rqxN^"S{kn)P`KGM,c+u"W1vWi`Fz0ȯF)C*nO*nν\;]ަUu7ѾUB9DGЦPuQGlHm+g 6XIИ [$$܍"3 C 2/fԱt_?xNЃ$-$l/̒Oo,P] lC\ޔKqVO7_.o7M_>$U_D/ ~՟kܿx5I 2&bX=$&>WKP~ʺT:8,tV2K 1Fҝs!=N=eVcGo%C\i mN`4n=?TMw<у1 eu!##[6˕ V ѯKGzfV%q[(pN\, Jb0N7(ѻ٤BLX Ư$k)p{{_˿1|Z'os %$*"yRQo Ƒ\>1΂\{saC*6DfwSN\6}~Cٻ0s]mN_؞#>ͻԴ I)oIlΏŸRjyftԸm(nJR!%CV{Zܳ[&P0BbsmX$3M$Ģ% .@txM ,1{%7| w.=_~aqHGgwRo_θ4.(.+U<6 macm,)6 l<̠^kuo^ُ1~VZEh`2f~yx#YC=RBkΉ0 -Ebr&> 1]` Y@ /xT߁lfo& Mxf'L6a}W(2n r0u%4İxY?UQ.QrdwYA_dАdBGT'6jpG:$3:<)]zys'阚b^E헸bQCPfrk~ܴ_7ެށ_^NyV-ca j4 VÒz#_^2MMzf~YqB _oy}˗5ZYgKDoGĖ9TB3A`/ 2@ڡXL͋v!d~ךls6TlLfIo.h-϶\!F&إyy[sؘ̀yp!A"Ș6{ TG)֕%*,]<m7D W6y;R2jؤ&$S@6r,noq,.Ñ) {E`l4RGw38{QtʻV-/Av! ?%oj D(F#r V] cx>Rؠ(݅r99:bs+afpE7ӃzɕZQ&tB$AtCB`ULjۍoIs$9_ah4nr3$ ]Ǯ>1{#n`9GA γ8ݒ H/[AYM@gᢙB CYdaHk.N'>ENqlbN~XϜF!t;TfhlZvkj ?P5~BLl\jbN/$3~\QFzo1 9hLGw3/HT R$ adr:V%[`׆Q[p<2j+ݛ%UEen;&z Y%^aGpu6㯲KE(5FM,J\mE0r}^#)vp>A#/_8yM_Ƿaֿ{_? 7 ~qaHiosrư;bVnQ[PovA@Z.k\`8 PAKhxUo`V֫5P~ub0Y+uzey \w/maYrlWK+/B$H.s8vBI_ ] nd˽9*x#ɕ+R:,N(SĦ!|a]rF/)}1?C抜$uЭwKB`wkNŮj~:?`֠BkP=|s^T`0 QFs72*h ӛS)5/zԠ_ɸ̛U~c;d'Up6h]a3\]?72g|պ ĕ0r;2@RI$+E{[X~ =A@md "3FfnSo nY"(fLJtNODddi %WL΃ӕTF /Ր:ծyFU嫍a1خ̋H.zZFd!3ې*I9Q=7k}"N43߆.!ѿ5g; r:&E|Qۑ1f$u)ѹ}>p[ҹa(z׵RMzU˭%OV2١c ils1TP Ev ȈN^E5x0vj$VC:QC\PcS>Ϧ1=%y |lu]*Q67}e!p' _rav6' Nn{?U`RF( vF*[yͼ8 ,$| Q3ݎ%=C=}e>ieP{0P!2ݩܦq$z,pC)KfVGZrzh3KLӗļ#/;=!-˅A~->cBEd#D)$3 ePKS:,7lRh*Z˃72-mg{ oJ2^I@K}p!9y]Ls='L ^QαV |ؔ+Ɔ|R%Y|h-p^)~>L{sTϦ[-aNK\Rr`ڴR!oc6R5tpDavrL7U&;h ig x,B퇉w(q񞫤{.a6kM̀^фnbn|VRkV\&DJ?>J)g.j7TֹN3ZچsɈ/fR§~qN`lArCQZXV(vc|P[9wc6s8D朿?Ox;Co$tp<:%h\Y5j]̮ Y=nrX*;Oezy\m|ZӢ>}3؊y758¢W7D >I ԕK4n!0b.!7rS?"å~_<Uz dnbb42H;tB@7ޱ1a],pJm-Mq-?"qKytvM=;<14gI ș35G^ ?3> rɃVO )a= i%@˗"K9S[M 6l 'Z]$.na /@q.2M2BO)sJ]N07F?u7[!kz_R#4T`iFe(ӛ_l6œx6%@){]sn)ϴ1|N/Y%B:r`B"n9ّjF0R2|H}Q4-Fΰ@ x??a~,gT)*^ɒ( E)dr4$Քd} 2Mt.ȢKrc wo2/><&oor>~^_q A` &2":]؛es4pJ >toʪ2md*BKjVvldavb.oPH8e8?)Cpv?$bwxzM:AK Q'LFС-=Զ6( !|6&STDbglԲ!ѤK4Ulvy$Pa3 ZaT50̇ 1ߓ&0,7w}DPή)nlVSպ#uTĕ|kD,J9Hzc'UV0DS+mWV):8`MVv9iVf36UNz FOֈ4*!ә'pF.2h; q@szWA夷Vxl!`,E#HԖlv v-"T+nfQ k !DfTxRT= ]_-+ғZy*G2aͭԘ+(DǗ8$F^϶vE@JMN10jP j"6zAS&+fxͧĄ"Pd_ fzfպp*+{DY)'g3쭙C3cwâMc;&7}AwX2 ^_&%7iYv?KeqK"x^2i/-KdW:nҝ|i5("UYTVwo )Gt5)fF!й0g\g 3B!p}8ILvc1? PZ2z;̈́"?g|֙qaFtzMBc4ll;y<GTl1DTE?QK%WvTX#~?=N/6TqZ d9ϝl 2ko|,()p:joވwnxI3=A$\5?FLbT LQJf+FPfI]Nb1/r.9;נ79q7pUE!׃[9 u4W3Ҥu~ĸ2jt:k "Ke1ݲXW{w2C"D G͛eL"\’soU.!c|4ӀaNK2nfh3 6Hg9ZfyQƽkBdhRKV DxU&؈&^<aN)ĻB ] \n͓qh k>&ߴM7-` jF'pA9?~<| ic)v1W8fi1IC ^!`!a cw=&,B|J _@gdk0iӠRцS"a`׶D37L D`q- s2)0iqekN.tzE` j&, y5Bƒ g8F( ȒEMƧad{C=n; ˹Hol#}r GbVC-vlRm^х!qW˯zJŀ=+E*_޸rO,,paYkTVEU:L{!y?qx|On{X0.1 4=D~M:&@IDATu2n|@V)s\ls{fgKĹŎO Th7Gr %<GPt,iH{^r0eOeD P<6V){SoSEn];5e(aj/s=8쁔# GY#/oѝ 5AUT % 'kH#^X2ӒѦFmqtӪi6vo&8'bWS 0g- sbFLmR^9&PMf,SC/d0v]8wדÒ{- 4$dKJ_<񑜰^$]~<<贗.SvoIio ճHxYmhFգ<jAK)'%6JK/Ǥ# `vDa,9m;ENCA^PeJ8rTЅESA"F.SXJ# VR 9j!>:,}̓f[KX,|qm[LCW*[\F-Ry P"Vd.y\mXԌQKI s8+0LޟS:JZH tu=|HW Hͳoō%+F`l E eidk}iJ3 78nssH8W2" 3ئrSN=f-LqFS`@ɅDc= Vq8ۀE@NNw&J{v/gyS> g)PC~\oֿA~I8ã&1rUʃ-&k9a9a*}44XFyJX#yS@ҙenJ~'{-DvM(Kmg ÅDj,brdNClw*űQ\@TqT99s TF#3n(/lrwm cjfR8J} дFa<Ԓ 0&)'U8өN$, {~a\nf^hZ.l4cHr Aݏ׎/ y1(H $qOH7<M>K¤ ׋q@zJWx]0 x'cP7 &\{~ik2a\?+3N;IiAk:LnF&6jIq?w7 ´FBOw!B0W(lV,p8܉d<ꀩKiX qCrFbތX%XfL6PsW_e{zҳ=l1 sStI|Wcc$~k9^4gϠ"5Ê#ctNHG $6Y|̐Fz2]^8\(Uj# Aj1пh Q,O8FCk4 j^f$5]{Q!F. B@+X<.(yjȬ|m'>5g+CWԈQ4JVFjcuԼo۵8l/䋌dz [4EhtC74]Йlt' =\h>eX40&,X+5]C`/ s_9/bHE,<7 RHbLd v)$ND tmx^H#EZè縷W =YJe>t73ss*{RZ 3Loba!Hƈ_xOجGY72:O pIy(v MTd{%_-RUT ю;Iei S+"i:TD`b2O*Li;tY=д51"|2=8S_ lx޿Β(3g+ ȗ TCt|դqqR 3wǛ9Xe8_>=X10s g6l)ڹ 2ŇErG! 4Q=.1z Imo]ٺqIEp#3:EBQ+9X3=%dx?;: ]y::*+ⅹ ~=^.Ъ}6Ft6-ZP8w$PiƤ 1=tRitHtmm[7Bp1![Ο[9lb0f'#e6z0>{.2=L=ֻ`2)9)=qOhS0f;-' Ӣ`i,?83Fflqr 0"2e`KsX So8B2!90dϾbxK}n6+p 90ʯTn>pVxyeR#n/%hϦrնfF>q= R+j@zpK2~RׯS^ ŸdY.[fp!oS`S0up G: ?kiގ)ܑ2Oiz7%S7 ގ!]lKs!aXK84ԙeeS3@QO>Ua ú57txYG1͇69B<4kqYJC&B+Kyp69Qz{/~BE8l,NMr;͎ \4m?GSY v֛vi\h)Ne6CbѸ 8lk!m~ EqƦ[OתoDVx8&k6Jid\7`V ^l[zð{>81_ADET߇^S(Fi1& ,!V6f<\nS]#i rhdv-2) SNK '1Ctp"9n)ߩV{FGb#g»Oe< ^F@ŭkKeIɥL(39,pDi kFvf*DX9fDB.I7>Mi6oR +B9E^TC"aQ!К-ن1#<$η #=HkA4ZW"F/κ6 Ha1]MrCH}b'|AaگȎA;}燞B|G#`3 ;Vrv#&3XCVVxw\B㓓Q l.(tQHYp[! )m-lf$oUnL^E`_(2cةynqe8wU#A?Vcu"XRPcf/gs܎0ZezAY@ZIGmѴvByX6čšF{5ܪ 4.[:O!֊}%+|?soCa,3?CV⻘-@E,̖Ea;-dALv})/.KIjy$ ZVfn x=>6}K,r,w5\&;v`6|5QDcfwy\aAe*ŖM[PKD)82!{s5|1`%ezs2NdpOjCX*s㊖j23 S R+&;OV Ϸ. 1_`tDŽ-s>8BJx$^}<#ojjn]2Eu^om( ^ٍG\J[ v!Jx} -v7b豜nĺ ,!b;6EF|M0AСh鈐AT^$XSwE|G)eQ\-x!<֠l`@4|pdJn|¿Im2 #Oq#UNHS2drmb['YM@ {z/Qgm4791GAϗ(*Op)$[ib}5s(K:0.rlׂ$7vteV׏,XRIܡ ^\R)AJB LԠ^BGr%e_vꌰx 3 Ga"(42X~AMktQ\ i=*Q }#G6^ M]0Ӝw=GO ZbJw?3EP Qin^y=fՂ23wY2+ñ [S8!_R5)edEpU)tZaq҉n*eKbvrDK+Dy -O|-gF{oIl&F8B)yJ͟mh3_97 !"m T ]Vx3 7;'C&%R\.83NW#304ʦU&z MU<Պ J/Jjdx7-Ô|R oF],<|gI>ZIkA3K^o6Pt  e20̗tϫy̦x-H 1n?xJB2PU/t <%8sCUdA}?b{2p`:X9LB@9C]A]%Kck}G},mV+.DFd)_%Cz.Bp)y'NR[!Ԯ#alY.WfɰPOpT9lFυD%cc8IS F~DuFp=M2!KXӀҪw(Pju j"?-|.qYPW2Bs)aԤzCS٠boe?gz[-k*[TMS0[|']`]'Hyu9(RGWP l+8#qt182#8pNyDMzz0v!wj#̩Jqq%_BbhZg&)/Iyw9C|qRTC;4n[ɗ2us;e۔+]\3BfajyٮCIN-|R$_FKڮ`c֜] `u Pg =Ks#|Zo >4( o{u!(>|ƖyLnbc8:IUCxF#cy񫴻@O1?vp!fZQ&j*P~T9˥xx2mRC,"xbIɓ1P~6EoTꏍFFQ}.;\R^㡟р'HX.o ^s)߽W0wg&D6M4a(/tRs6:lH-D\e8e]Va} NDz*5N]<8.<9[tSh8*h+z{- *br}å*9:YBWU{My qne et&l✪'Ś;yIAR~[z~W aNlv'-dZ)wzˁv&9 ˁzDLRH`hPuHwb:4Ʒ?a1mrYr^lʌg[J=j gJ5Œ̰Bбۼ,9~976Kf7؇!TĞm uO>s\PlY4f`/7+G[KQ8(!+`ÊރiR]2,ӯkfHi ӈ-*s&FuoǠ͚(u.osh񽛿yܐhCgAt$ ]DUU%pM_T̒y47x܊0b`؎G5Eڛd 1}\ oae؄>mF1@^95? $9oM\ :f`;M ٜ #_om>%[&ū$kK~XzK\:A4Ui:67Xsb^=|/ǩz8-L}^easj|uT-a}T~wsJwYF⸚ш$Q`DuQ9{fQ47LkbKR).U+TRD[Vܼm*o9L~YHߞ5Gc)S갢T>!7bO{E ]vHu(L 7Jz Z})$k4E -8־gLDһqj.!lvr,"E5_G)PF0N q_|vLড$Ys` 6EYz[ (Q8;^ęEKl,lwF*HLQxo 離,zP0<"Znr-0 <8zd'MbHg {MyQ a iPh nZ"snn4"hr#>Pk(IµM?:LСvXgJH9{;1G~ѭ40I j!Z[44eexWgKR6H{(Ɣ6BQtHh-abk+_j@5[5ztg\G;@W u`G 7 ~E]LB*G9\GQ툼JĉZ' wbq(u8iJ<ޣՄR+_3)#ot\e\dIa{ƚ*s{RZ*$LpN R:BP}ΕF&-0ɶ`*t/8Nm;r0.D'ż5'[2vaCh6М Ϥ΢fVQU+ΓCH1pA~om@3t5>q%{KtzIswX&)3f#`fV麛yV 5LjĆ.otG<ۡ[G62xEhGE &ozO.nR'@i\2\&brty/ڝ B6Ye2R"!˞`g:ou)݇w`Sf9.G=k"U2/";L§&Y`*lh&1Wq{|7!SZWi2n*)#]NkFiWX3N2ߩChd"V4xf] sUXK|IJ= :Eyñ XI"ɬPd&#  ^Ѳ&<$ȵ0W$'Txu [Y@U>NF{bG`oF4 m&@L1F PU ]D[on*ӧC#BK>(KkMXML\FJzӜQYÀ''hsn? ChMTz%zVv8"C6 Pc!'@4VqVV#N"(7ځv傃rX>]HS2)^^ \@;d}'E᳨٠yց )U'I-uJQ**Iݮ$%71(W.1Aׂ퍁A3ZbOtlJDS2x[h{>Rc{3$Mi\+s# 3ѫe0_]YѾdM~|iJv$D@c;9xb듣p&ۙPdoBD,G>K7G 0Q&V $xUT41Z[S`;X>K(K؆l8ILy+l+;Z[̪ |rʸ'޹Vy"Y]Sm@4GCQ4⣷+> !f_(;r(䬜]ԶD@;3e GHݬEXuٞ8*!9rmgbul'k10UNw >~zi,Vӝf4 =mA+aVEoO1 ֚R߮|>87's]cip Y=(?YGF,-f"W/&b),؉ͤun¡_NTfS~gbMnܑTL\ lm ?ݤvRAVS^M I+'jQ-\vc`'YyxZ^Rg9(P,#{+W 8t,եr ).+<9R b CJ-= ȧ$PG2IuTRSeV5݋8hh a;~ۻ.f+Y}ԥ$z),^:y `{* 5eȞ%B) (ne(fuZ.hޛrC(73i\:-+}ZҐd,eP pdljnRnb.)p[~)yv-t1`eAZY1:n FEfTsԼ3u,.2XHg?yݪ dyB,ḯ%\ g=:L4fNڹS8[YIZyl#(И qC`Jʿ# `}- o\ TtޅP־ |#MA`2М@/xNyP=E?&2$Au7K!dV&4_Wsdgc:*p^Yu:c-]n4> b5rៗv6 SdGTN^Rhӣ"Jǥc4QVDjj( Bsh3 Ng0GOK{b ~e8vLrl36kiB0B:/ 1h`m ښ;ßy/{[)#$2)!),oSGߝk) F#&@$[GaRϨv Ҡ1xkI::gM 󳟖p=2t+ z5$L-uY(;ڱr?ʐwLj~J QZ<򣞘/"cG#`-.oN3~C@$bwc&`vYL$Y.Mv[uj>b5`RYxpMMH|gfܘFWAޛtt7A`/|;y1ٔ7T.2VmL,y 8>:aD&ClBKXU 5!>6jg>GBؔu}*&vjE!P XzbA~Rmf\~RxxKwICq{ {a 4R{sY%1Bbq5anZ -U`X;n fhvc,RHXĴ胛UmJM@a.jWwGE%X&9!5Fj= (W(]r9&q#"@gǗxx/ ܮ@K[TŌ"˟".FѧL@j `2;s]d |~0e`l4rKZK js5p@8s3F0;K)=/u)&gf'p6Y]:MpqCcziIf >-a\jl ]* :'.mvQ;#Bwݴ̐l>slz49Pmg93b"?R9JQ=C3)D>t\uzԔ&t|8_ N9(bpk R Գyܴr?S`L%pOLf;@c7jӁx$b&`OEۚCRjˎ#5⩟I6M >g&,MetVà؎I5(,7^aIFT}Hf2r gr31';+_6#hi%|1݀~MR5$aL@VO{`4W!RJ *$pu+dT)b1y]4;Hс]hcOѸ'˱} G\d5}PL+4v%|900aɬ\Qፀsi'0b.]i`e`}qۍ);og[5i@R-Rp#KqoxN2]$m.Y9xscz8Gr*u,=trHc(u[fX`P-e2Iد_6L2?Ei+c*c#stkrX*lu !n=&@F(Bus/d v0< 9xmy&rcܫ1oq=\Ej[ǃ0VE6WGn tn9VyiϤAe"xEz3܌q1 HJ0f(M7\_.nbF#iOOw׃4*_gf fai]/faQɻ|_JJ#u 8>h.<{3p=L|/zj6~qB:cM,AD1W _*8ٟd'P`S܌oGľц8QV/v8w5}:oêd [ I7e,o)AڱEOg|4ozodK*;Jîj풴ApΜHrM>>9 b=I7W90|3JttmmOưkA)!#jd&ќYۯׅp %JB:HuN/Qsqy2:2,D滖>p> 2!g#!**=H(w[x:4eg(Dz g ,wRpQcϗO񥩎[ RfN kKg#kS\n6ـmh^$wG<+9koatG1+ςbtE-U)P_WE^B8A1 cT$]!^!-@&Ǒضym,\9R5+]p7V)*7o_xBC-jg1g\* XnҘ:cǍ Bҹt?KƆitY8.ƺI4\,| B౼^uT}6Q#7(LF-|ϣۼG1eɾꗄ=VL"a +0 |~5Ax k g&VK&L@7ctFndVhS -5!ffC*CXS.(f>>Es'17TGͷZgtGr@EE?`Hb~JJ`sXި;4ET);q[2@+}fݔ!(_R35٩O)47'Tvֳ%KdZ;]4E@KeƝl|p[{c2/)@t :aTj],)_{Xؼӑ\xGVX_ \(VXӨ 3}I%-vҴbB L@.7k<N4Mr)K@ti|{{ vJl=y2Fh|ICݘ04:E pC2)٫w-,~֧;41 ;'iò\7iY wq{;-]L^_ס ŋE@NC.\'Ђy EE'm5^1ϋT@ΞTXDz(~r&C@|.YeF 8]Gj]5lV[,/ :mS4K?VyNԈ6qiZnе(5[ Z_ŹRn@v Z||~׬oL JLJLR3eɄanskS=JhXȻR0l^~RF,&qdY<*F!҅ `HAgRYO^CyAEb@\\A#*2#`T"X^Ɩ:㼀+g@#Ԗ8a=zcY|6m{)ejoe7hGv<̋@:TDҪLYG6`Amh2H(M ~P) o`7XKi]GuF^GRvr섂"!i.鲟BOpcrpb贔'R+E IQNX4Ob:ķqlbiw \m,|}qRLijޜ@;QHCߌnP眣aP0jgo>s­FQ#ppW$w3Бۺ8Q~>,CBapfz䂸 2!8 lV‰aro7 )tF2$|6T jnS" eHQ^Z-?gQ'MsOh@՘lq7_B  %1os dm[ y-50NuTp)k`Di:46瑶r)*:W'TlUfBZn)G2"o!2'=pt0LcK@slZd ٹsiǺ"7c[L\:{zV4&#$t2il˩H3Ufg̤1Hܬ̸"=:Qys!✨0;Ap(Se?oH Vڙ|-eu 6,W¿ZK-j شqnxD L?0QIKMH!@Did2ֺg,AS4ٮp-!d+LH ̄݀ˆ0M}Z Z}H%^NSJQ1@b[7x)^4sFGhmR(/Gc~_.psyXV?eg~r?+Z ,"""G%Kk;s%aĢ :;HviA](^/9A{AG>j[amQguYۛ.L v}<)cנ4Yń0lWQ}+$[bt4Õֲe QybOtlwauYn˷ŧdr=QYq(.M_Β tgڏ:Fv"BR ^=qΤs2ciDsf%* \We'ǾK#?c TQY2" d xcf% O+'z*cxPw:6X&ؔ8I斪ob !! LSN@c`˔aRߤS~ tesR[Q=G0L.ې4(EӗѦ\RȍIۋPL/'0,Z3d}fEzJ]N{B :KN#&HI*v m?Kɠ'TEHm7yID'3]7`3 va|EZ4 n&LrҴ-c9..":VZYr-*}jyE,XW4Tްg(,Շ'2B;gSEêsR9{3A+jVqhBmXXKhӸ i`Fr9'8V $#W'"ʻ9g82nOxJwSJv};e=_x*->zyP̓ori6etBլchd(4.":զ:6߃Bt NQbpI7Q6L;R֏AJXn(r ŦNDAg9_v,.`OrSN77)" yF6Z1$i2+-kќEM([u`K>1 ?-!!'zNE)(qǒ TVLFK)h;&Q z.%F"蘃}SjƑx^h뛫F3mt B8i&'U{rEnHtl{+T\:@/*n:杒ט0٘x)LjϦRϞ=^ _ w{\t-Mͣnjs^Pi1cue'ʦ5Urq;#v#7f[.zw/;i)dH(͎";Ԏ[ ?7\[Rx2/JIVg8ő8_3^#ؠ}2"3Qzm_ӡx(s$c$iRl)|ޭ"RƂXV`ރYl.g{P{iJW~;{)k甚 6_HR_Ug얂II)o g6\}j3͇OKi|kuˊ26;vaa,L=$g"(݄22&-4fc2jgpbMUGkӛ(yyLVmru'MDD8aH0[Фg4Y6Dk/]6LVKWb+j }dї~szR1#+ؙߢh,TEmQƭ}+@L}p|Io4o_}XM[k}? l\T̂[,Q <ԁ*j!v 9&]inXVV[ O++U&@ޥt:yv8N3IE3wE}אFSTk]oN:ir-My ;h:w$뛓|uY'+Bo;ϦlH" /-^WfJw%$a74 !pi&95+P#|- ;ks(k'$ 3K@zV5$_nlsS.(Hyxw3 B{Zi𛴂U4y9e(8ƻ$,lTcCQʧӸNJJh\$lRKTEo+:zW#,1ED tCȅӜU1'QuApJIt-*QP:ہ4)'86"`˲Ԟk &s_D 8 %s:ϵ߂>r(Xm۟arvM/GY0Fiʫ/,2@v\FG[ `u^vd[mZ[J@Jao1Xfb3mI^Iba5+Sg ;/.-fx\"3ʑI5ئhfDL0c|w(n F S{Κ_6T mQ]%koU`kͲjkcp/[bK|VJ^@l2<5d @6ieG}ȍE ިL&7_*1;VPѨ?5 q/н`'I^o" " GZvȿKA b*["J0,޺Nl',|pMDDll B wPN?`捾SJsyǑ$#IHǀ%UU s"k_V*; 4.LpFZ zE UsICF*NzYPi-[R10Y$Rf,+.+(V*|+ON _3tl(L*sV'{tO>2\܂-B9ߟ pˁTrHK+m IROhڲztl|(Bm{Rp1THl>n^% HӈAc&hZ3'?|'#oM-@yJyVRi/]œj(1_`[n4b= Swz+gJۣ&9x9ItZfs )t4- ud&W (볬<^3P^Y`#"^*{jQ.(# s;)%MiOި+v~םKgٟBXiy R=%QxQoCh 2P1`:ɤ[xo"혈/=A녫x+rdn5C~kkrh#!gɧH{>MRIgN @Pt#~1& P>74Y7NY|?s.f GsݗVb#dtKgs,Y`OͧK09KDjEv7n.Pr1k2Gw뷫 G+pta4k`Ed3=Ch빎e./Y]jIaIԱp.âN -4RɈ%t6~[1bem>fP<3Aώ i-_䲑sv#O_`mD:ӦVq$oի17}TOED!ӛ9)bj,i)yؒՃFQ].Ԋiy᫡k;f\~;W0p,La!πk21Fg^ ' uR (;)"̄}R r5 2H,V[@Mg9-9 Vd|hŐVtO|'ppJD;Iy7/k"AfȐ tJF%F3fk'y8?vlrp\5$1(SM+V `*q@bݑF3I'fV}AKqĄ s>9>Z,"e!@blnەF؍!xُI:&*RHgR&x)QMǦtH­5&Y@F|_R A6 f|7:%ZB]NKFјq7 B /\V2Y vܪ؋ºƇd,o-]PP;G9X5p}rgC{&Z?f3 WŔ^_R/z _ N#exhBPA կHJ.h.K Xd^kLS{݁.^[yMw X G_E=n\|Cunj(mSE2I%N!9Uu-͓nlNg`(. ?y,tDiBwJnN:/q+2!5]e~s%0eA&ѾְVNbZ)59:KQ ddP%+qX{OʃvkoӰϸ{Ac.1Nl%zA7c*YЎœqPԺu&v8lta<؁mO~,M5]85,ro S\Ge4?q-=Wjhδ\$;6Z q Vf֒l γl}$p>wcӹ$ݓK mTBbӹHÓs $]6wp&R6_ uoɺ,'* tޒ\t؊n0CZay#%0Qʋ\N]e;Ȉ[oHntϽT_{ M:<s[G(Ybk8N=/TArH,!jƌx(P)I>%({JHz06Ӡi q2(k$~ĮRlzڏT7`yȁ>7wz)8W0) SGLGĹT+s:ytA~C;\ej`K߰YEYg"ȽDAH۸WRHkISX1m>{꧿?iQRq+ i'br\3ˈ 77BJAU_X#DUҀJ>7%ǩis+nZ9frۯ<ǾvBW%VoFMmfnWWAzKos;C!d-[#ixyjK 8ܜԠ+Xs+J4. Dy4x@3wKjsl^@]Spc'@]`@lZw(,Re|o(4o .5*>#FEnӟc2N8%H] ߵt[1Koź38CB5Uw$Nh>kDʫ,cĪ25-ޞo$.}yL&&EF&}LeHAeǡ |u5Dtn洗{>KC3z'H ddtC10K u>+2tF;~i-gvh!LJimS&l#6 $%{GϕҜz>DDFv+Œg5-;`ӁqAYg8!'6O>gq[V=Gh/!ˏkh=0V{et^CXkIm< *̍w^iM=+R?G%>BkԪ̤M aB̼6IhIӆ$D/E:E>'MƻP,p7[sr}5сom ;y ,#{|ޡc ߔlIwKn_c$qVVP/%2v7 a,zR1A-u.Xsv"n8T "Jcw4@p\?nڟG:,FvrvÜgCVoR([m-jJXJ2yfފž9Hڦpl) `B@, g4(g4&eGTG$pIjV^fn)ɭe'ge2/y\3W¯Yxܙ5ƄMC2of{m <ՑgV@'.;ht3%YeŒ7jۆLbmaja?uyA9|\1 (p­^b]')I2b<$I䩮D$& p kƖ%B|{B Xj6w@p"#O5oy+BdS:sL7w1+EݗBubeC$mzNxnM ?d%ӿjkLu4/Ҧԛ4[w?})gIGfSjޯpik=nLRVr6Vq܇d6#(\,_ rΉU{TP]>i82F~%|r!Tq2mSJW(5~G=" G0BJ.oH#ϘczؤtUh:\tMqE>IrvժJn^!S 9'j:0 p$!URO;2>ʁsumpR0?Gz$PãVT$%8608n.*c)f ~\E)PJsiQ쭰V:P ܷz=-F燐GE--4K27hR"Ke4uϞ{Ehje \(!.{ BQOq׮Xq̨{PXBjt O;.wxMV@y1,e|SMK^R8=qV; c 4][,fiai& l>&g83#yjatqjM+_B*GVDZ>,m(4vU)% NA0*n3ܒR7N]U(8PeZqGZGXteIvj7 "Xnch( 7Yj8ӌ ̠N/檲 z36%UX5EC1M&1 z2m,椫g,ټ جS$.@qzDC?v/-֟[̛hՁ5uOsط[QE%j-EO$Qc@A3 [2#5_?lKV͆.6hyN \=oL0`u!z\e gF*c./2 Ti. \6 W||q[ n"zfW5 |q'<#^TdI92>똝 *MM"ٙ:H^20qS7d!U)ysJ`ESo 77q)O3H`8{R#tפ:rT,SԥD2r1-*8JtÄ'=z<՜5$z;p|=5aߖ(-Č)t &4{*H^,|p2Lk目Eb<+DBŅ&<ȵ4dqcwszHXOoT k !5ؽ1{No(ER'D&5#0Cb{`[DC-XYBP䢳*פփGk cO~܊ǚln/"ӆ)7v;&^#E&6lR#/Z1۠pz7-k߾0,3z}f'g(fbfaA"J ocl`S-=dUl XW 59rr)^7Oy|c)q} 2|Y可 P4]6s7g-|nü5˛"*Qnkۤ&?C^Kt/+L%jJ&H}&}JIG.(cHR7~?K vSJ9U-#|RC'I^kfqj9  it QR۵Ky@\9aaYxS@Ժl4&5dvlᝊenwNVen'T;#(5sS eQJy.8N<: ea)딗KQ6rQM9Q7FWE ٌ~`<+l(P5ꋧv5/@.d.yul5b:X )A\1J(.t>fL^ɔc5=n@L 㠂ke8TW\@"aIevimaږXru^_Za/XTv)8ߥo6-@I%̉-J|g5apS|0׃LLGjCz -.;>epARٷ{w"־o˲S8q_6G, g8[x^ .ZƦX"456 4Jr 5D5vR5iu.v7DBn Ӂ16)D,{1\ou]3Ra9Oӹܰ7p.&1SẠ_za?_* ؖ@L/;XfF7'#jgqlλw7_0hd@֭Y-O7<_&pٱ,hc  Q[zg+8ˤVlsToܟ1-@l9<,|sH iA[Ip-iX o>(B"UAyt2e8\I4m}at.2[Bz8pxX}-!KS,-.况Y20@$afFLo1ʨ׃#S\! ;eqRj|;O? ř8+kcց,y*늽4Cآ_HAm1Hҕ=j\չclgr\6:)]!6>3s^HlGfI|eiX~:XH L4oݖ :wjW|88fdlo$CީMRM흜+3Or"UpUA{YZxep9F0Hv\8׿][n#R=dBD'gS*+) J1w3@Dɧ#135%5Y@Q+:\7 l>ҨF:~bqa4U#4/)VHFh>N) 2f#9 mBz%sDԀia8w kx:z]A}XDAȨ\x%8HH؁sT8JKHoM™g$>zG?c7ql #U:BV{C07БIy.THehdS!`m K?e qPv  KW 31U[5dH]֒GIK`R5o ZFR rp a`/SMڮғ(oU6o,@_hQGD~&sħvLN5fWCPFe~p.*nra Ah^nsnE:★E|LCeH$yz@Lr|3gayXPKμQ@K͆qlϛfr:;)+]=y %K8)uQƥ0FxNu?gPHm i+6?Z„HtXU:$^fj'5g8(4tesWNE6xR$.O [^ S&1_ݠ-P粿F'qѾFƢ-7HƓ#jVPG c'7oo I&]+2%\ut-0:\;MoCXxY2W~]z ?)jg2' !;u!8V5O#] µpJ-GgM98ػl5ۻT܆>9֦H6򁽬A^ #ERdhͳUpqڬEd!gYe U(++Yj[a_>a*>CI4BS{W.`+,OEn/Bmӽ0#x[%&PrRWlCKm ~PWcq Tes,䰈GwQgQj~ft?e4Rn2u杄:0x^[wNVC[)v`ebsd㌎D^ēxwK=nЁZI hkvB>PI ܘE\~܄}~]%İowᝏз:1iY?']PJOqdEäW3t"26#칎m(GĈr{<惤_k6HͭLXe%fZ\ʅQ-/d,1C6{Ш S!saiY}^膳 ĆǖE1gR1չUk..R;Achfkb6tt(YoOc@X?CL!'S[ Ǯ1)_BX|`:`eօi2JBK ;~ ΢>'HItbnF%-F{zɑ4|53>>$~!\&aW8l2k&}Q\Y1`+Wi=LnfU9J?tEk'R2rdOvl_'[s *~XR(A_x^{VSf ?g?KA#5[|Qpc"]C)Ԍp^)\`mAP0?Tfz|<J Ox3va 3^;BRdJeZJJA'-N6y09i\Ve\&\Z.C #Zw©͗DmvGn&{`yDgk h{bjuaJ4s7[xX.%M{/!IFY/1 N@4k{ޙ|F6mgh?U..͜Sӕ s ]ugh6$ X#4lt`;Z{^[e|: y4 H7cf@{';( ht>t{BTfSM~棾Kar&a~+ aFHJu~vYr k-˷DP oOȉ{ &Bcy$qLm5"1!12g2 .ZJ [߈MHxJM.WxCbv$_A- Kw+tnǑBU<7h/vԼrb{@zP΍x  oz.{h x~#-.V԰n1uĮ-&ҝǓcqx߾h*1Ⱦk@#<cC"JiV-IHq+yxYFYϧeH Q)nߦ}FO3 ?Y\Przj.@}/ĹHЅ׏7 Fp6oUf p‡EjbĶ&cü:s?}8ڌraK>4r(o=hҹflO0`Fb"<^R"P65a_b YϣS.nr<.|&R' wndQ{/̿$r`q?L`bEA=NEuԅ]إa7Gmg;MNmhߦ>^2E8? ]./`Ip357$%%Y&WYJ<C.z&;O۰'D$TÎ$V͍I}l ]y;$dے^|&.MUS%a dW6t',4f);dͶqJ,B%Ux}V5XĚANN .3?1 K!.>DH?ސ,ޡa]v&ė8B#Yw[:^/biFh4W[D: sl&Qd-HBԳ~HV#$ 13f2P|st=]󐐴m[{bm^Q^|wۮ'!j `#y^(Z®kzX2dL.-qGz^Ͷ|Id0Zts;f~h5!*3ڙNEar0Ҧ&@îV42Bf䂘cdz>wMՄ>Гz2ppbs?fج)cx?NTZ$H{X]˾^4oBgK)&dqI48}3-36.W8d)ț_ɗK!nn_p̘&^ia,S22yxٜVx+m|;2z*NWj.a~qg=L<\<&FDFOȬv q6w Qk>$82nHO)ˠׄp2G.3r秼-A3@n:ܬ)߆uR.DDǝV>žeaX+dr(ad}ݶ׎Vp~B 拆cqqs #g$2"PF ͗L FּC]_ M$ TR&"$r'nFQ,]jF x+-ta3(ٚKЫnʳB{m6& 3TV* *oeU+ :+uZfx,FϫpΜU9"!c=/ABҶ?Js3Gs25fF11z;45H0'L$M$Vu 4&\/YJ? %"~2~(M񈲓 `ڸV\S GjyjXtRy#1% 玑U|~{ySmyDF_'U_68]N`YE A lKj!wYv+s5+EYeԥjT;E y)p bɕo"CQdZs'e [;TZVsFrӏ4 z.MX"6RցҘ&@oMIv#zI(?Ձȿm|aFn:BlQB%@P13I585`CRVCCm/ 39Ubē37eѡV@;JtT Ao ZH}AjNdˡXwPJ^L\[τaQVY^~q,3/HPѭBiX'Q 6"V P+$ (~{ xp5aeE#!¬VYW8h QNs=Gp&;תYnzќ74+g(L˱lו\[z*pYIE##m9 _^fBr}%mz"d:FE;1N:#X\kA/E"|v(ϤX9/׺v.,f3 o۝k?sX݊UGlYx" {|$%rc̓/'F<mgX{"6l |1rmD3t_TRteWanAJ'{}J"ubHLj"t0"̲ qV--@[U^H {|e4!b-* y.6M] ̄pm}g4R@#2X56bNA1˖w) !yiGDj]$MD `X= bpq)䆨Fɏt+ 8ST}68vVIoyEf>Fj)"[:㺊 hEI- Aʮo^SkrxPg,}ķ׊A6W%zyPFlؘ\>aƺ dň g"L.:}BR߳@Z9W-adqm&j Wu@y-`OByqd1@YEDalQL/R`e g|)7r}JMݶ#Re(`{c}rF|DaBi( xId`Lۄ=plc>& ~>$>8o~ $0/WI9PsQGVHepp'}n_4I~N,oǾhM1z;- 䎰᫛c=[`Qϐ_viJxL5Y9yCy*邚*wa͹S'(<0_GdjsYiQAdܯvo*6W'+b!Oa`+klJڊeL ¼(^f0AY?۵Y|zg7d(A~F1/Ai#7DA.[j/Y(L&3.>Up(za|sHk,I% <6+0Z+^z\G)B[&KmѨ`CdG 7ö%j_"t/H߃DLY*Z8nz2&;$8&:B$gLosXQC2 99`%.W`%4S@4+¼̯EݹaH(/D8bԼ=1!7^F,t\bvLjGo SB8%6Pxv2oLf`|/Ox+(I> Izh6c42f딙Mam[pҧG8FW7XF&hk%sj.eS|yM2X܍z~[a^"|-S?diy@JuH/ygf*P"p<:,Rþ4,1$wX1&.K?0&A]MVgɀ]<LFTMtIbeHEgb1bQk{hSCT@.FHBfɠ g4Wi|L8< *4y{kk1Wr$CX ĝ50lN-bp F[^u5Sh|tfXb}f(hcSe #V;j.n!9]ԋR"Ԣ t!d U7Mߐ$6eBFܯ$Ϋz*>? HǹרҾluOds6Q`vq\ 6n+骝s |1d7A0?q}#c>uyGMkehUƵsS#p\1ٚy7L:M1U=VO9Ig?3Xv`7 7o i_>d`fE<.u+g8 b,HIJ .RAu} ?`xT:XVMQ봖ɡqpVԣ;W!~[͙&V))>l ICzC}5&q++1-cb;D5ekI ..,|X7U Ŝ3h[9֜iotkB^@47~mMXE_NkD̈́,}%Uc$.8,#pt _̖TAJU׃/eaJV(}M䚺t+0!;oT#VZ.TAm}L">HrhϤxïђ,ntpS]4dV~f b:K7adƚc%X nΓC)A -EGEn%Ϥ5ê% zBM1a ɼ[ݬ0oլʔ ;7RXyi5I.gc.$YkQ7T! Bgb qD+Qּ@MYFk$ q)2Y pdu_|2I*@ޜĆ1Ekz {jޗG[$:vMY6y&# )LBC-Ex-bo||g lFVHEC18yӫ4BR;0A>+iTDAtN9\f2 ~Al(oLKbgdl\\D ZV%o|:51*XJ\KܑZvKMF¬/RBDT,Րg?+up'\xJ{gMu\RFEs.;b~a:{~aǑv*6f8bKs35DMQ^m@1vI좈OG$ hI <BR\43UdYZa96&Aue0ZJ9&fTlAn5ɰ&O lsEQgO!{{q߬mVg4yiv6i6Z@U+=.@i=e4PLV&>Eq=IKs\[P=#3ϥR!7@6ܠ$tAǫb:OtB_87#oB(7"W0#u WDt0: FJӈϾP)ϸ^:JeN쁑 >Ϧ^SrYu**|N* ؚa# iؠVӤ52"8e>yDEkY=dJRskPnm(|6.9;y_A$žA~-[ԊKI^qtTDPUawXD ƀwa^֏M-\ DJ7t95# A<@!0*3 :늷L 詎m{}586|UZ{w=Ҷ_Wg5|EZRYɳtse.`!:)]^p.+䪊FG08,IMlzLiklsWGvf߼b5juK3@ LKkvYN箅sβ*Zޗx͒r]+I^_G!6i  e%~q;R+2[g61Q >"t4h\"тvPC{ 8qA-C{bfuIoQiGeɊLvp([7ٯ`în֛nAn/˅Xq<߭(YB4ˠ3͖V*C]v/Œuϸ#ib ix;fEݴ0NB$qv@4`R6IM6 vQX0L6A)\ )GK}K6Ȍ{D\ tM!XI3bE [7 <^v1TJ65Ĵ< 4EVlDZum&D `bv6lu\^@au-u\y:HfBi:?6yԬ(5)W?g|Ǟ9{6@Rɋ╅(҉DuTzM#]|y&Jß&m%9 =/f 6ei y⸘X[nkb#NQ|nga"`fJ.R9KjպkIz]Tm{~xCr\( bCHHa L l3w+9'Jdn6/:Yfw%Mnmij+Ma'*E+Z Jju3o2LXC/w_ЫZ 6aXB 7A73 y{ޱIs=ћun`!=^]/-2ibςyJX!\@r,7Bl,h Dwb< 8ycP@IDAT5ζDy*IU^{&|z) {Kw˜ ]$mn sC8ElE*QwIP}lkasax$ m" w;9,>CdJ 5<9%rKp Z y+evPq'n2SqTMF|{nbXŋZs &б(u(nzN%fG ^.֨-:ln"l@ٖ b#ŷoRTPDPkQ1#Fs[MAĽyhsOjt݅1'g4(&*ϰjzP`Hjѵct1J.@`d4YK+NK`9쓢fF!M~õր7: 5 !JQܯ/$Pn^`Ai7%ѰY2f2X#Fb}s\MݼDZ J$vPj!?6p;l&C{=%l|1x/醦+YGeW%mShIxt &9Rs+ơw5 g1`k Q(2ɫmzu,Qf/{/Gj40  ֝&F9·&; cKϲq4?CEtt\K s{* AfPqhph, ;i phG/>m7]- jwN1^nڢ`_5 iϋ/M.ld2b0@R_ n:Y;c%B.Wj '1 T.:E֒lmp@MYtzquKo &сb%l9BXb4.*$%80!F;T_b)760qI$[0S}RrgFBe4n0h%j H6J_^U5Gŋ.}?fBmgKQ[,OdOAF(ʯg>RkquNs<%;cF(bS JP(bUxlhZ䨋>5yȵIB3Z4vqc3k:̾*).;љW(偫R-cfLqp>aa%rx<b0Y"՟gr|wskٛX 3Fe#y goKxj5sw 6Ξ6ne> l"<(_4iLƅVy]ǭksV)f.\IFn@)$ 4$::0=Ł4Cl]4a{#fmM t!1AA`N<>$Yy[11N3?7؂6@IPBL'g_X0.}I>RՁWp?4 G9+k#^)v )$B[qv.8ULB1!_wl`.JfgN>?, ;+{]W &&O)6cOo̳ֈwni{y@&|'=ƶ2#"LЭ'3b6g0 NӸq(25Pp6+ٙ.$sњƈ~6ʫ?9GvZO<p؅y-蝍4$OlK,_ 8!O;0]zcQFصXē s9,\Q}?/VH3٨>4bFi)e1"q&ǨVAǡH-Yv`|Rᴡ> L7*phb fltW"Ծ[  N$F]s9s?O^TJɢOӦ ~iyvW/8@MaڃFP_np% ʣڱ 2 3>!n,.0 Zajކq7(rE\nrl](/` "8Sx61eoi W3}nX1£Y>s!}@f]?3;Ŭfe#30^sQKD` pb -#Cnbz<47q tW045 4ekɐS_c:jKBGa uq%x?a)jK{zgr!67{<6u< ':A)4#$ERyuQĎm,sڸq-]N*.TgueKkVK"87>$wֽڕT~Gґ=$ڛ0_ DKU/GF%n7GzyCݎrX&E<9w5g21 DOkE B%QfS;~0b67X`mR(231w!ihM=lo< ]QSm&ˮhx{r]3ɑ8 _ap\C14хq:CvA>vQS۟x-@NntnlŁ0x M9A(rV0sr/ēeCi6 ٴ<9{V ~{D/bQŽvͩ gv4USCͣq`=^6= 4<&<ˏ6+rnV:f=\Jɰ NyHwytI4D:S;U6 ȷ[vyICDWK z:2R36+NyTf,|K!ñ~g$2JGfO#Hn|XdASCbfT)kz 8ws7Gb!+EnM qvN rLj\MŠ]'t[UU6 QXU |v(WhBzkjt, oi]XSmon3!9|6̐4ӇC5. ] 757(ɂ`Q-PD0 70u$T 6跊Qj~pu"R}1.[p9ձL#S'){r̆Zs,닿dA4a3k2׵!^2KF𼫏=oTXv`, , ʶ32(ެ7Y(_UJ$|ߐs '=h`&1` 4+s"ՔxgY: ߠ}lv ^5nsh_Ǐ6"!Xmҥ۔8 S^Ph!T@Xn*h 8;}m1r혏zg1,DɰϢMBx od&K !f~,x0(Ldad^Zq_Vo׾j `L:o%.MMdG`֘}u *.]ʜ`@QIw%{^(c11 +0;GXժ FƃFP5h1J -NEM"Dls ܍fe*xBN4F*5hZ:'B]/II3.~͔n A{WMIю MF$`G'Gk4E:] q!9nycLT, Lspo\|K_F(b?ٌ}?A3*f8,,FE*uXӜ$.Qno6o&LoBCNy?jqϸ}\-a1(l*dG> P,6qA`Q)CEi?6gTIq 'f8~\slkta73@q?:r'wT\ł.Boe˨tx+Kqf38( `]Mf4 hl(wumu9d RX д ҭKHq7_BR'vZ%UÄc=B/*me)]kKܒcjH_LYxfg;j$A2mN%)dXXXN,q)euHw=dW#tz5Y!e )%pgђVv۱f6~Nͯ4K9dz_%v5ũY歄9kxwnqw'p*u.UE:e5/I()t`܍"KEWnLGxY"nT|Xyxq5|r^)= )Fia{ɴ'ivV&BA̢}cmȍi[Xȟ`rmI#QሆWͳ4e輂dd.)W(*搂9/1`F}@y繩02Ta?`ޙ5+x^[i{7chy^%i!>ҼibWtB 2(]h2,%C8C}Qt i<"uv *UdMac(D_LofXTݺ2$fci&rJ qmhLqS\*t`ޑZMDׅhb<ŨpqW:mRHmܨta蹯.6(mKv52~I#_gyz̙-|_3\UF,,ι`:S$\҄sM ֗fd8J`ތnވv! &&fLP|3Xo>O%[-_w ĜEAR7rtiXS;3 oDY%#ՋTA/ WŢ,u]C=;ȏ~LlcUK$!aJdͯ'fcT, ڬmw:lN)wthg}؅ࢃVkȉl,VEkfPMՁ+|$Ny:^&¯Y7l:+ķXR;T?o^CǛ+ "h]B,3WidZ>tCA 3<_Wer/Ѧ#fwMgr2.ܨf X[ n4LtW0b '3U b7Jx7 /& A-U`UW|w䅰RVX8M<9sLS/Z +"(Q'*Di]`y5ֽ$mvch)\n\rhro־ў;za`h[ !Yc"w&vDdrͫo~E %Ϙ= !پ@fI.#m: ofޛs&^㌷atRn*sl|;߽)a}ͧb fԺB^gѭPй׵F3 x{ˀA*ޡ30EM0> _?qc9#O%G*Kr79C%SpSynwCX 6ʣ^YWj`ђ0ޯ>SzS ;y1\&픆TG74=eKdK_\h(zV|̹!_1ό`=CWQW n1}Qh`WBBMf`B9[ .`8'웼{= ܞ-cϺ5 j^y͢:fɋםqm my֐DpI͎42]=м*i"0W g!ΆY18+'\j'%\CQ>]-TP^KA#sTs)@gzU4F6A`R5`a͏1 BF<;s=U%TTؠ_6!ypnjPvzڰb 8t3Q0hi04Cs5 c)I43}:5$FC׭%ՇJD|4B sF]g|U0Yi)t>5sQ1\c4Va,D;|(U[IE%O|%p{DM`fX:Fa#XSfhu p$1G~CiQL ]c\VpbR-/G)V,,C);ߗyO)^ ct) ]tE|JQD۸b;\`㎭ 2ۅXIkw(M4DA7rE`6_~uPhc NX@ tO m P㹆))f[6h(M0$/wOWB s[%M+׹:Kk@N2uO3xgNfiI)vݸ_Nmh(X LlnS g&cd!l4- &-ِ29gK `,g b\ kVDyNCfz\X`Ihu׳Tv)GMtϕP S:F~ayl|$Su۴hX B[/Eȉf&3"HtܐFP &k RvqgRv ϫx4 SL~\fexꆁ.?6Yg ZTUT)_LE>l3~Ct\\)~ X ;Jù!XoŮ53PNO|9,!j Kڢ8YFA 15m5;@VL)f44q 7[APU*-̻E~NyUJ'*s$D91PVܶݛM n" ~.~AH0ѻ{U +@I{Y ӝGzoL9dJOG{:;Nyߗ)Eh;,y]u>bt[O`>j͜HqzSV,fL2+2 Hl6XQQ;Tkc4?1 ;w6(s3Rr'A겡>uX9B8N :9*/nt^1 ~`bc%Y͵9V=" 4SOɡo+/x8ɗ7Ein)FWԔ'ͮcXͰxpEʎtq[a,]%Z[0,J#W52EO5$qOڙ<>@W\Jʯ-;O߷(+AD*llY0x@ fd*a# 4c^[Ԑ`2]D"i{pJ9I/pJI,(qyk7X,fvPsF{\[e?J_\ß، fVp6#F} *S"zjcϢTEb ژqa"'/KX"S5ţZIXIM(~r)Ro;@C6WZ R{G􇢾g"NAif9:rqKgkd%%u_Y eV*;\*~[eI/z@:#X0(yf$S]zR)*ar~=4ޫz/]\ͷ2#G!(< y:;ěTM XQ8(֜[v1MMi|a4,G ԒNsU/9%u}̺ Yϴ ܍Phq U@g+&/9yFSP-j7!ojѬצd$SK4{`DV̌]ep{S;KTӡ믾4p`ExuٱkR.ApWK¤9FKP[sC&$G}ȗJq5jh9\sF Czhv76#>uewmO_*:Ы4eҔ#pQc숔4! w90f-AlUDM}W#Yv=]Q2+6E|,LJuۄlV)ct|yєeFy~i`Z"f@{LDG܅AP&1ϛP*"xL'eUFp]\+#mV,R(Hw ܭy #ZKYpE\U࿲ ԇ^Y%@.#@T˿GDE+wo㌠D:)Z @!27b!'IMsZߊ5GKGOK $9~D,Rtds` xe='S5Y|+:F4y20~^A.Tq:aivy$oyn0ܹskM!]|1730nZ xGTˋ*LЖN? Ml".Ɗ$09D +5~vqz l%)cg M7M/Coq݁նB?|Π9ߝTi4Us$^.mQ!c<({ _NaȔ'itL`5uAn4ݎ0h{\ (|NQ%Ò^^ؔHɴZotI:b- wid}2A4%aͲ1IWD ]Yy;6)Fge4r2wsENG4QW9#t:VD^*|:w#/g:R|$#//JqPn.̈DqWn\g~[l>Zx'iۓM8ؼ zu6z6FIg:ATS~?eX( Р5(Jvۻh6(yrŒ ӣ>W1%nZ芒׾驖tqHJoyJꣿ_# K+@}@T@@z9pWz:hBh~P)ypl6vIy׀0;jfOyiZ D/UYk-H -G1Cet=28ᬾ)I9(feibcU,!@IDAT`19;\61v[Ҏ4be>Kc˟&]kR1#y8n pCC}=;A8gm;MOly4 ]|O[x ێ`|l/ ,Ԃ SZ zeR&&q4EucVu͝[Xwìt`x^c+~$JՋIa4\o¸w85-,ޙ9U&f.LB2:4/:-[fkHW?bN8̛EO!,njAdr:Ĉd \N8f3ah]\";Iqie}WTڌ+m5+ ̶4S(k yBa!wlqiަQ=e:0J?9r"FהBS\Ik@,|LM8b@e׶%$M5Y,u; o4ozsyuL4aӲ<Z&q䮀2-E+bNuRa?mw mѬ;GhlWz["ޒZ;Bڅ C<.-.&O>"ˇ4q0$t7{"İKlQWy/oj[>Iji#oyAk̫%qU7y 09>\y-CK#ua=`R KGj+BDt_L 񟇭9_J\zs-B]?c1'3ғ[jԊ!;NRæpfKiOGsLa܇ +0D;c%}msF`"LdEL狨8+0&3,x2KiH~|x!j!~?H wȭ9wNʨטp*ӎIW3H gR㳑%!Pnz.d@ŏUl,m&Rm.2XEr$x˗Fp-VP3nDn8_j$X}seӆg| 5KQVbR8Hh3R 햋 /B&}M6:Æa/n0ؤHy JE Cy٩5nSJ/1`lLYC61Z_~9QXBEKآV Pj P8 &eF6MI'XGgԍٲ ; Pƞvj]k>%]1}rH?`sZB[ːCksz(&,| ?t%>adb*DJbj4r/҉s+kyyua=Lq V>HK%&1+s-+"" ;:RPif=qf,tvijmr(4b&Fl!)84&@2(0G#cJ`SJ9Fd؀!zӽޱM^ h2R8m2 BCŅ?-#%q% Θq aXBy3e,eIN|Щ6liv,2i-=U#HO#n(ArR^/Fc1gY6_K!8-jVn"S|g!]Q]'>2H\s.K\N9XLdə(ᘀTÎIµ`!L( WA#-khx0L$n 2D|g9ܫVoF#p] ' IYJ8;:]7x Wڸ3j$L\ylg'nj/i8w܊FR' Ud | If.+< /qPliz1XԴxƇbEtry96 Lw s1ܔÐSvFQViHe.?C6t)4i'#jzψ9܏~8'>:h7w(?qULY6 {޵6*ko' ( N(}28QI*s:@QMg:,mh79cseq] nVlD^?dp~Sؼ_BȬ\0V6`:9q9Xd6JWy9A,*u;×&CuC ~2D(ODlnIkXYxչO1FNqm{Hni& ’q*KBplBSi(*!!AJ|%68@nV0)? Ey͛5|¯@Xl Gw\pNƍ#P<ٚyd2?rh[0!ʽOFwPsOimvP$V3nE4:r90&5l=`M9,iY,d-rjK} .1^}99S>I6x "^/O6QF $ƈԚSʅ%LOXb^ce6=9ζG1xfnoS T?O2,^I(!t淕FQG MfM$$a|jW+c ,gXj#f+'}[NFFXv:ճJfdaROo<犷IR {qoL}g^^kDr w 2l)λ~pau:s au}/a ơvibx$%H@kgc&Ș^20&ޑ_̇tla;Eaq)J[Kt6# \yf33K Gr.X y# ?lU@# D~gO!ۑ$+l{l//W|6CTțѥ/X\mƏkOvPa˴&A,&XbҧsOuThtJi.NO%MKёթ5(N%!iwz <+7Q"xXKY‚5>ZW(s HeE@#ԑ_($Tⅹv.yʊg_nåSE˭Xk$ ;!ڛȯVC,buЗ ; i%F2)iaB_A<24ZR0u9grIXnG?N\bCyot-U%qHgA*ւ>vUM2΁RV&Tɂb+Y%k+y^NW<3dX1M÷"ߠcʬx)ޔU-8ޜq啇Ws+St{e zz[d ̈́4e1Xq Q1z ֎)IqR{@@ Lhb*VH̉zDcjz !KOR$ )P*qltg :h(E~9՝;5NGoso\6jd6 v#`^6x#r:Gi&qb ) $5Wǵ1*9?pnKFeݸwuM\s6}%fב2!e7LqH>(ya"]z*owt,: ,;C"6>\,-F?8vuo,C, ;qɦplF<La<İ0;7e{l :ne7ILjy@4DžP$zPr,{%'j)/i\]3M#R2 F2b q-&tͦf"F %~V`*Ӊs9@wRQT7\5uK2E3 x&*7 !SK Ь~BnZ1%( ŎHrG.Nf/LΩYЦ =>E* -l٨yv@f:]@zɡ$^P&uw'śB_C(4ԫE=Z_PG"n&X6T*gNt!LZwB*Q պh2;F@  Lٹ[5.L8 @4Ay 9IK ~ -J}ODpm\6pdN{Cv>NM|`]xL aM+5|S^ _`RNWEˇx.mkjz(‘&}/wLD!黯cKpDg2mh YsO3绚\%"kă2=&x"n0;=de:'%`bPN:`ץә>Rt l]Y8 `\%{zV)$x #\w\Y˅:'] BcaHd;T/bo] rE&A@#Cn3 Ay>8 FE mMo[H fNh]@{4sBD}#\ `lZu ?I fpM=\**uAK6݌Yi͎.-MĦQDfv˄TwU|KLXs=2nf=& ihh$G:!C{%l#M4y_& b ˸=ۤ)eL֪0 v\5%S9 %u3 N^#O1# x\_@Ln7fNШ/4L%;-YH%ZGd "& y-OXykriIj<'wS."h>ijG;C T>\zp JӨ0Ǵ~"Kjx랫0B?E2uQ;SS& )?n r\ /c'␾[ dᛕj{0}ݳ-uvԜqDɾABiav桋 ~5JJRH&ۡT|:76crk&q7Hs3)5@/g~ʳ^ mP2&Qzا#NߛՕN T8"J CLpQv%K^|&s!0(Mog'@1[Za48d 99*3w){益>㡳;< */0> vVsN q)Iml}l4!MDe)94@4-YH70ZH!sD( a՛Ꞣsc+>TIW{Т OxL O/&@8a6G2=Kd;5,u! 'QQ!g0F5#2036@,31XHn]js;k=2 G0p4IGgIGg' 0չ$ oj2:6/-7%[3~!/>ci\<2,=iq?\4/H^)B,%OL:8t%h^|HM]#^+uvG}\+z[ڂ.:9>]͞}5 T[R},T <:CZ ѝR!О>Z ʿN~"Z DBIk# =3Kzypۂo AqHI;]`~] e:v9F[֎%Asv7T 绚[3 @xXD{l]\,gwX-#Țq[$;4#GJܧޞy%`%Fgen擖v$KJ; Rp_g Iq38Mp<3xg1?3s6G0OݒZ= 47":.}>6E>{ :|̷Ռ͈=DaQ;+̡F5QWuJ˝G 7Qw\J}sMW)0²\˾@Qoc/(ːT` ̡}W$-tѿdk<Ֆw^TS(o*4$(L\cw`-Dw0a,pEto~. "j '|ݩf^LkJU~k VFcr nN:@LǴƽbkQDftTڽ1^؋n({OmID*Yl&/K*C>JJFJ&4uiq$9&K 3|Cv4|xqJ\- e02EAyn$ k՛gtXA,QUvfi,?6iH l uHZ d0~5F B8 ZVу^՞WNwz 2dd7Z0 jܦ ,NW@oq0Dq 7 Q6Rˆ.5em-&5AZg1@>4a-gۅN prQ8#, LQ@ lɅbA2Q]Sjr(|noQ MYڻYPcZL@F!d.1nGvJՒKmkΟ*~a]gc#lZu/d&FSUё2cڸî n< vh +hqrw6 gȶur`su#!gdbrG/J&c<=T198YJȵ2u$G]h#"pdGcf{ ? Y~R.r|M8*u n.=U҇uqꐥxdc^&b(Am_:D*4R9Cѻh{ 3^Kskrfdx&B!*O|tI򙘑EVc-E(t9C|Z#{\M#UGrZCe~3YƬ6f~TW< DWz B)UGc~\IFI2漇,JÔ '8 &an:NX.b5;{1 w>$?tLp Ӣ4~iVsfXM p.{b7<,ʆ\ }Qjt;NpD}[Zх:|IՀqì;ԛ);'A5>֣n jo6-iJJ D7ę?,x#=aҊ(0DPC ^9|"9W'xnf^B[jec^;Pٞe#]F2SDžE'ڡLߪ}8^&Ɔ.7ZdqhxhA]ըfPgꪷ $#GsLH鱲03T<cws6yEƚ٢S5Cιtb˾MN,a[Ql Y^BԂ  ClwU_:jyjNn5L \b^Y!38I6*q)I)ǻV3QMha]֊8442FHu #GٸzlugX><6J-l덀N6Ky@vh; 0ޚn'ȋG8`Srgܲ ! M%SI&BIPv/+ R2بPWlK-,%/*g'UCD97{| 8տ8.5yh!&va|8~toFeqIa$qA4sdiE$|tA:/%u`b`pj=z"X/9SXf2.d xgc5>@4v .ݔ*QŦᶱQ< wT%l1BnxS+G]O%0JE(f茧oI~r 2 %AkB%99G0 }.:1@SAbS/)-lZ}w-`R9:E=r"y@'!zٿ kTwQ,!3`HVpdH;H`7\xٺP*I4߲`c s_ ]?F MdܔGD|8k6gՔ݋gmv\@/0XL;'0ԂNqm<swqN0.fWFivAd(Ugn"a侁0Thб;N2ry3 4^Ͷʛ&Aq%>?hōّBoT+ yUKpG/r8m 58G啓(ƒhJ:TF%X 644gGY|JHb|A4HQM(uܶUAhhc>I[a톿u7 .z==3uQYsm4A1ɗG-kLT 6] KGUG`()4byoLץ]ʣ:,!!yN/q%Dr G5Bdˁi<FgO Y&4{x:R\Q kA.KGv)n6IEM&Šԋr>g5 gKb]H왇FZ=/#1!B&.1"9r\B2-z d^챊 (|  $d]lijh#M<AH~`u ." Qr4cG!EIvs[ęmW^dij "Ѻ^u+@,p=t2(:_Ӓ%H,0L ͝*h%b8ȗ$쨾_]:$u$s c@wtX@٧l{7,4*!-V*p`Mh5FMTN0+:S :s$K4M @Y*hT{o.E M4v2P nzaIRZ)'xMSO-VB^oJ9rv;'sJC@*,-gҝW<@*JVI<2ff?Kr㸬H-J]Y u;.fxX#ɿȆr1dBMВS3s):j.F`7Fb`gT](Ra`BLy!7f!h!90++\}ܪ|"![AVnruӯjX]qL cM2i$*O(*I ZNQb)^iTWfVye$-wMq|[Un,NmzBQ`Jo#ŨX6%~\UTWMvó.ט*#4TCǭΒ.7O#KRa/>݆N<&E$IaPs~/*3Vʛ>I)KOpӁ9eN\n2ydvCd]J"=Q(=WPî!o(ѸbaIk T@g'i*`Cc&`XgJ`>}1C0|gcQ1wl3f ZB:W=?a$QZ6,lFw[گ=sLC>|Ñ 4,<3uyҤ/Kw$=Pl'NM0cĥ0Ҽ|Ke9HҍB:̭Ya0K %} uBjo[&=d*}9dV 0(RU%z\? %|,4NqXv-[s'Y#?G9mZ0 a0^˝C @h@KybvX$]p ky)- v\]r eA~J$#샨1D;vd-~ ([S>.zM}jF{LkN)W/5[ Ⱦt Kg_GH %{`jF'Hr?&Ҿ0&~p:7`i0:n.[ﻪyWɮv0l A"/!(YK!{@b% 8 N) lđ lUW|y{{]jǘX}o87%TԳqAةZupJ۩L0Sg1P-%P(қ2:D0g9(vކVi\[tvNrpF 1Ts]-Z *:ҁIQFX>ʞdv$ޮ8~@c6,8dnOMj8}seC:"'03+SU$7cxF PW /%v͓2m\"ĺoρ0$fV^^EJ!z#X'V"jV 5 guBjDҀQ-YEqDK)q)_ɇYzfh~ cD zlZ+=`ڼbcY1JCXn!9X1N!Zfe#@IDAT}PnbcZ/8xY"NTI7z,b`8$F^ZTf˳ e )T#.odʀ22Ϛ90_"| H/R 3e=<9z$w$@X *KWM}DkL@Zn74ڷt3VZ9,Nv~$LJvCihP4~i6umkNMB cb v.c?N5M2&ΥSXW4=bry#L[ BNlsHք#8⛊ 2 i3P='JߺIfu(ɏ*h=Q35@,J.Yy`iu+a Ӹ5=V<*]UMޤl|KSӎB2pKȬSzK66<+Ky[S 1Y wBxjduY#[iw٨cTT0˺rꑸrz"u~52]/Ռqkjّas$[T=ep.MQψꦍT3#3dmm,e9oQfiFlZh}\/I 2KƊr8>Jॣ9@ǸU*)M+&Ph50޹%~0I! $gKpUMVsMPRu5[<( vD?D;/ml440 >kXPnA q"|:u͵̤SH ,X@ *ȉ󼽥b/3f]ν_־xQ˞LWJ>\') kLFk|8XфqD!JO}`62#$ ViSDnI>Kt~&-;{];. As߹* nlnbtcdIQ2kM%nsƶ٨u2S5fjcy[rf[(l3 ባ ]3BY8ۮ:s`UπlS55ڂnƛd`S:LGu4+4Si[FyA`cDL7o!,u 0ݯi_4-h%aEw)'0B:fo8Ca,@sPBI=/FI]P+LWЋٺvYFrN2uQ'tZ~HY)EB;lUp lj Ċ] -w9Yu:$V;eɃ33rXV-=UyfBi5nS?d+m)4,6 ܕjqܦ# @bL$(E E4&[Nx KRWzk/;HHf Lg\'rIkM[MPLͻN5bIx\L ǹKoEGfY|_s3v>WB2jZlݱT[وƒ,1[MM3  +sP<~L U!$xHS ֞pѷ̷iH*޽iɀU0ƸI0D$Ⱦ*mA^T+`R ^D&x?H51*㕮BMD%b4-"jsϣ6M9m n]ͯL,Aة*ةzfGyExT)R:~;zՃQyWk|*Qrj^W0aIӵ|8]^}קՔAxv#a^GJ+ZWVJ/aMHP6s%!9,̉c;GbK2) L2V]:dM_D@'E6Kq4tMYz;c c$mTg%)>my`m3 ~zsbQۼz|E6Yl8G@tQ,jLr?cJIZ(,rA̛qyWravj"]oՕ3}Ɗ]ڼ?{UԒ|N; וekkuRw=IXp^Lf8%EKar8'썉ǶZѤBMDL9mv41Lb5l yl9iF]۽.e8_ z9~\U7턏)kl([kWhK2.c5# an wI/]%~tnFi7/q6ُJR)MucDe,`Fm_oOJ<BZї3{N; &Ҷ01Pv=k@X ɼ 8\ M@`f ܁3Ax)eiȍ7/-=%qx=*&vD].2e_ulk>PBD^E_TQ0-4lB KS(F|C{ |8Y ?kyy.; X %I!'CfkyRXTBtěye!{َ7k_'7d7SZtvP6Ɨ m֢1ܣ=ъIfaowA|qϠ1>~#֞:wT9[bdrFQdů~{D'Ց<ۜ{bMnͨ&hhv#ItN72t+XF9:. 61ny'֤u_z7i~~؂_IxXO ֶ B;G\(kVxh yaIKI(4`alHl7|CiYَiV exQY|%Dq;FC=G f6*:3L.xoƪJcOkd~<-P/ eVx U:*Cg憻|$yO{Ӎ2/A @0IumW_t[L YJy؀?8/5ex,-6WlYp|㠠[.z#_B5]yީT^j@$'#iCM< nLXF\_#`xZ^C2a]0Efl|qVQ3.V%![y{Guu!\ `j4ބCW2fznXTM$5msG68>Ý->0o]%vc^-|n[̺@E]yyTÜ]#V;}hJe$Am|Hᓗ5`V' =M#}Ǩ1&agbte5[vU;"&{(&/eD-m|Ta8 J ( RvObtpd%>)yόq8RM3CY(Ox{X[ \ k版ՑcՆ&lV;L2!*ޠ?;<eSgsW3ui:-Gyq5= k\`绫B֞6}?otPbU&)`>8dvt($~H8,[^h* JjL@7I6rMB//@~%z,8XVA.~s[2 dA,RjJT)tq_.3XR[;l.q&|r4LiH$3sI)5 ̉yx4wPE? `VfRg\tiόZ.G CxtN+px־гڽ wǀzi wicVf&# c2ʇSv+g c+3 z-[ùOD{faTo_AM>2?iBa1?c3xVXG=֢ q=oWH|\N&0`Y`q'U{Ugo@`e*<ꎢ3%" bi{:u)c*Ȕ.Mr"; rtS47fnq|lxNc D~Ǒr&t!CzWN W q)GSlŰUшZr'IYv4^Ά_zmOzgSf lhgN7(7[2}V$~\ׂv(.L"pS7esV~S H[|KWpxgl+QWB)D*'_R319cV5#U<J!e=zlAG4yQޝ2fI/}J h}# iPU RKz.ǿq)] ȑ/:%Mz6ԂNyN>SjOܤn$g;;m~Nt5' <; ,PR- J)xhmz( ^nT&r+Uw7vM 8&JP6 swwVg:O Ua*"]5Δ\ڐ힟-Ç:#>_%<@@9L?1u|ѐ7/R ^.ƟÇ7ԙE@]xEH$R2v|-s=0{c-d#*j./ g ~1d[loWYgmT WjBȲ[Zw$Z?6՛Sm rtb +*~(Q7-T]jl!۽SkH Āh׉}|^\uDʹG"9R-WDχ$c1=rfpdlQ8=0c~*Zɾ~=fGa*srYY枃IXw`V?0r9 _˵4-HPLx]Ì8&]bO$yBYr,hN#-?3[H/媙sg\H70_4T>):_n2[^Yoȷ\IqQǃ#EcNV#d{X@配Ҋ&T餶Jc|{;+u #siV)9,\-g~/~GVGF_rQ//}fb|R_R'".Q3T65 iL.ְ#[#[ $ m @#c@2iL|njفbiM/8 T A~2^ꗫ9=$_ct3է!˒v>LGuHGpzҹ_JӒ9K+ 9s^mp>R;~s5QGܻy*vK|P_5=w7͵Pv3ij\$wfK\g Bid߮M(:`!E&juFjКvvst57X^#9dô<12d3YBu3.;*̹e.H'nJLtl%P,eC2ӘA[I[jo!Opl0;)ךd`̥(Cb\]S,372`cF]`w;qmS}m=l 5r͊,S~؇)WLZ;W2*hA ,#7CT3x2A~#Qglٛ3 :dI/=f@66VfF*)Dfҝ ,m\zsV4Z7,ټE|'"kg$KpA#*be?rs-zhN0NMtGw=N#A[WFQM4̅Qy0TEs@UDI,\3u9nLy޺ir!]8c岡I1P{[HlF(ќ6 [, UJ4YCۑۜ&W`Iuxe4yrZSoءm6OY娗n|pbMs愝5ݶa@rJigڟk=e`(~ԦX!`|E 1Qсn !r]oŐY]c[x n\#&\fm5wi0[R\OԸr鮺ݬ8<&mmkPE%'CG2HrEЕx,,W+TG~rc65Ppѷm$45vR ?4N;_9^AmB|,`%Sju5r2v响7lX\5PcF0ǽ|Er▶ s3/sxX>;Md %(}4t ;b%GƛMu!(ݝuDq3d1 mNOXС>tfԻIC~y[Rqe!.fsSU"Hy &ߟFj;#Dcl/K4_oşN] D(ӑ jRT28' ylf~1N)6ؑ~aS4UT>_=s5A^H߂EL]*(n:MfYܱ>+t+TC8=1Y8IsJcjQh/bwξtCGnxi["KΔplQHx׬!(v%^O66GIn>!2e9zzv \yV:~31 @H+v6)VYXf@0> b2 IK7 `0Ab< +U /8MQgj~Qp 𘛔BJاc_~' O?MO?'9~1^UKw]!O܅[709\(Ub]"2s)`U{_&W9-iL)wY\Otx96xQ^ MǐYqYE m*Rqԣ| .]K pa=9bd*$iaӢ[eu6O[&{؄S"lGD`5iHkn_u]'~t5s]gyӨ7ePf=kvݨHLD>/n) eUWv7NJZrh * 'RcGD-лmhެ'Mӷ/9xv $.J5XQ+A&Q߷[U2˛ZKdx)۰.E),-o?A~w݌Mw~:Unv#H‚vƾj@&h-i*+!&=C_ΈM,mjް0ŋ'# n6Kq(;D\)vR(A6ݪ߸6& ›C+>XJhzY|֗X{hL )| $Pn`AK Hi S,QMNi}tytd&F~`<6 rU&qNvyh6+E/{ {ۍ/I{{#J -%6:VP+ivdlMêbx1[d^{PǛO 7x-KXn2P\<Lz(851+&Kml=[iWw2w@9$mW#QNaTYt:snϷ_sqfm{rw}zsma {J-ơmzŚ_s]D[Dzd$8GrQΊ慿:0sUi/cq *#"kl\8Rg?e/ ?ǟgz7[P=L- jnP{qPf +Iin&_U%nGhvW˦Ik@f.X2OA5+^*4 ~'Lcy'NxdZvLUGB m%7䨯Fh6kQuTM"mo'P(:CtcOR 4BA9+ 3>#Yvrذm^Nѩ35(Mp a?} Jt1h1lѱ7^{7_z*,EMd.h]9D1Iߔ)q>8wݣ>*BhT@5IZ  :- >ǜV`@qqt$٤mE e;cTF^̠>uX #0 CgM)I9Ua:f nѾWlO7:4"X›<6ic1mIy7.CK}+nx[԰ '.|GޖNSqՠ[f˓ VSjlICsd1$_J%H$/֯4Y%qzgVؚ.)jI;|],υfsK#2s-R+R/a&FMEج(A`߷w?vԷ}?g?׿ow/O??w_B}wP.~Csٽ~E4;R_.#<-843uE-YW ˰aܒ ,yjEDuI\*йda B}3uqheTW{@ۙ/dqv~/2oWqgNWޑy.| r;i@LiTT,-HX.-vwZ1s0IH?t';*`@+Lks̋Ƽ:8B&"ضl.tdbZ Fv !|a=}p# 1 Em:/Hy,[ cTƄC :Ly؜l(% 9M@W 2ҒAO u.z`(sxygdًэ& v^j裉:_Jcko| !kv_>8fga~h.N> ̥|\aGfwc,%l+"poz[5xRj#Ǹ/ec-Oڑܞ+%'IrҼ0>8hT.{P;Zda[wȁ$i+CJ5L%U4$𐗗-Cכ a Xlg?2^R>?̃^ܭz$5hG@ qgh}g45yf&uM¦܄0a]|ZyF ^1#c0>k$,=ź{S>!?:SY,K6E^J(; edyo?. GqɎX}k~3=;ŷy/ErecMeuL , g}XfRNc`bmʰJ /n]\V8PhiIR͓x\8/_So%6jޓjRV"sʅM2vîi0TZ_?răy Kk?~??~[G?(|??ݯSwGTOn_¦$_+SܤBMOË)i6Z4K9lw6Vy3B~o7]2Q-]e~sRAub1ԮZddkBh[t"35)t.4imxnx0SpK9VOqNg+Nd'T}#=si7,!Z]*0͗vvK XF$}[.9䴷vD @8^䫎m&FB0A8؂>l;)*ΌUY'%#)bMV!e!Կ;=^ 'Q URQ+oFRx>-0l45#\4U@CA"Qo."AN*aqvxg3)_On0I 5-3&噄sboO1Ԓ;DFõ zT@n&LrܠuS0,ÙB#L` G_]nj! aT (5F]zךCP$ߪ,iؾ BZup`vysQ|hHu@[ew˙ (xd/^Y}[yQXm4=1Tgs+#4RkE֫|8(#95/ZRσZ36@fx{%dL4Mό`_8WF'٘Y^#4uZr :5MǤvq8kmUԂ3huSP8>P:f1\NORB~]>Gp+G h:(37N!.ҀL9PRݯK $L ˀvS{c?| ???_?b|OiS._6r=P;t*d'%6zneT:-gXQuÞ QtwkG@1uk;wbg4j1zjp %kb=o9KdA^BV*k&Of>2kΝby]ScK< {VVNc@~5vJ _?bֱy bn m9=7Ij8F8 jk`t& Ju9ddt+; vKcwc>-vD7MlJek2 8/QRE-erȆӑI!KxUUbAɵA]0ܳG{Nd(ݥ#` (5f̛ ^`zА6ǐ-s ҴHyc4&ҧq0GX*; @)hEgLKTzA njg9H/-K xs.Dlь0ڈCt6 FьM_=`i>SHj(6B8=DS0eh-o~ ƞ}Y"AIЛ sTin#! ,fdve-cZ~imQ{9׹#qQ7N<,/C4t& >=/x-m`rvjjqCW0370# βNG3B!״ԦܿQ(pg gV"ȤO׾g-5 m h:ViaU3¹/ht4^΅O&JGS;{6 . 8/ڈEgϯvIk1l-JMNyS"6b6U:H"+Ⱥ(HV oPMC,ˤ/J~ņ <I6dz>_ 43=`pZ#z1_&S$lB`觿{ wο__?֣?}jP_?*۰V+1\FQMC4u^ӪpxztJ;q5-D/z !pe2 I758OQ<[96_-3V~  j[9!`\q@s^2\rS@,ڪ-Fdc3RygtDr{BsHj#rbeΑpO6xIË-[#u콁 ٥˅^CKEE|80bqsp <,Q66M"3iDwsϵs:@/#4[p5ߥ3yt)sGt ,˻AQ4bpCy#X]شlň&p3fs=P,; ?B(x]ofѴ%l<8Zi->,4_\&I7%N.uB'?8̖&3fS:v“qSaXB'F=l(Xi?3DՖG%u ,(sg#s󛓰&9X~DfD/%jCFYYn9K{| t$fGn>^gvop[`p5qY+PZ@@usNOEj 9[c%=Os|, .8 T??#s~Đ̳[i@%Ԧ JS(ċy,v0)X㵼]Ӽ{%2x<Ú7MU})E╫ѳ0dabi@jln\4% 4a!-W1KQEM'aA(: g/e.9>R<=7DZ(ލߣJ$MU]xnjYOsC8'/F2]2̥}m)/{0e_A~g_=~_qG/?1||I/Kc;)[nW̿"¹fiP*7mbb'5O3lTd\Lt񹅁ka7gMYRƈl_9F`M뒲g=gwC+8f)IƵV~*۟A5@4a`.ر[ R29i<ˆnj>'y ^FnR7s}3jASx b Ds%,>Hu~/8#^XctNYIipI }SSn K485tg%"~nL( M7Qp뎺K&Mac,eXVDOdihS"!jٯԘ5(@s :s:εA:ښ:ǍXpx\;CROR]>7oj>!a?pVO4=z? ~7f=}F Kn4}؊8GbJH/@IDATP+@яѵ?ĴUiNu!,OED%WE0ψ)p@U_$9##htu.1bJck[l9?7!ys!@Oƞ 囶Qg:+$eDKH{_^X:HβSAL,ѻt ڞ1mD* eeU<8Z#7^,%̆8([Úz>r*JS.R8[?ni*NHlIK΃{?{3 72fzZSCb2$Ҋf]#JI^ jrn2 !ovl0%4v(Kԙɧ餤=Ť1' ,g!~jTy4t;EW/>lwQS_T=mt禎^EU\"R<{ڬo* ˍ,̰XrD&Iݕi8UB_ (ogu="Il Mu63$Xx@$[v{ɀs!:ݱ"|>wrIAp:\G.5Uti<M>)dQA%n3θʤF!nV5dtnV.MDkE BMZS n|aUE%P?!. {{q_\cn}֚B!zW [vF6 pÒ:ݶ) B+-YtEhwN|7SasTYHZjOF 6:pڦh!<\4̟7.+˔LnQ#` La`.ub''T$@_;(VpL|:Q~>ɢi(928I/zEt& Ie1XRE>k0kq9yGQ^JۉҘY1hζ fcSյF258/薙)Mp>EPaO#ӠRψ0toQ>Ҧܥn*쵦GQ\2o8`))l-^0Le}lf*cHZGQ[|73B3 cDgzXT F*Wi3KK&Fd6u*k=aqp.nG~ @#;hۦae6%~ ^:S ̉V`F{--˧9*vs33165nL G+,)EcîMoir "}kCiCD9HE9Qd*ou"|{sA rWpڌ TQ:;e4@5o|Mٴ: S{#Wη~JGoRbա /%ͪr) |U6zL ڢ]dM$5K>L4![ aOPGE)g(IF,MiBPosvx㰟vlMJDC}zldiGzO᭫KƦ)!mUcĹ_ <*+@-]E,^10?i#u8w5>w ƝWBx\8a,$sg S;Z sQ6M{M<"ތ;PnUGVra'Lܳmy KeΥmoEi3 i%"m"/s9PfWxk顶ZJoa"DfjZTL8rANo̓[i4mon#ף~6>a pǦ({TTge ,Sٱ,Y-܍˃G5Qˢ*S3\ԝ~OdvJ1m!b84۷CEK dHtȜ1@Ne@rN]j/Bܢ` jF&-2S1F0 E3|c)S%WHX-Eɾw8AC"HmZ{މd& <(M(jb]8DiǶKݬoMܴ6U˷MAsR@s_3ا"sŐs wwvJ- ^bAH9uT1̐۝xzs) eRg+l =;W fOV|1 1QNFhq6tX8OL[x%uQsZ7 flPyڙ#K2,F؆8hf`}7~Ørb͢:̲{^ X D{+i')&LJ='tcQ!47s0C&MJy"V)'ZgOg~}zi[Ͽo{??\&)oDp[؋B5VN/IW~bLa{^2r+kqKPX/59i nZޕT{(kx1n@MN{frzn@5 6AŷVnJz"A^]vbK޶ۊE`=،<p>;lW~S%ڜ(o~$uDvڂ#@v9nhwiohtvGZۿrzx;>mDB}옯ί+)z {?OY~6B<Rqs`X?pH^%cpo26MK3%#m.լ/9S\Njb7TQ4x&6HΠ7ofE<)5߳h&YE@ hWaÓTjhfb>5*Cc6 XOh09Ӿ=Sd>>8d9q/]EJ{DXME3xZ2di9ȥՇ ?J U͌R˕7|(?Kb稺zf 4_!(%Ԍ`:j;\;>Gp98[t7wVZ +-Jyeg>#YkEvjó +\Cg.v0y!42ͫ\}6L\!%VK"t#d(8 8Ǚ`u ĚUށ߁98aW/oD#Sy9tBc؀x8T0`);CPDiʈNG=1ЀPɈcmNo_y^$_`F&0>h{`fuurye]6z%Tt ƴV4)\ލ(i<( )U לݎ}Se[!zi@_ɟ?wkz& VTz{moH|Ec .jaIf2Р2P. {2FW moR 3tG !$h%C2b&5B~yyF!9ͨv>LmPtpcPUm7ӥBEyHn/ì\Jsr 汀W0h 0YnCN\zl3Tdf^eyx @x ^C3d<}i1Js ct)# $3'q=32#&TELњE5;ɛιV_7 i0/|f8:>#ݘtټ$ss*4VI|9E[|2гVޜk[%ʂO%()e>s$RYPyZY5j~T")m>'m/o.iy|-n Kd3^gfzz^1cv4w:Y% VI9obxlH0wN}~U,2Lue`IK^cIVɉ /{AetVH&nȈX#z3 DAʒ;;S5i_(]jF)чpF'Dcq7#/nuxV+=JNS+4@CP :9&Z5R jp M=$&s3INSl6ѭw ʩ7!b olVD,pUOyrNS4\2bcCc\ 4Q+8ퟟ~~~m-@/z>~Bq,Rd\^ҷ\3&{4T>*Sv(ֽJf^ҽ&P?qLv ,,x+iL z(\iZ+K " l(([rI8:|VNՐϣNxF1w1Nt,B&H+RMZueni02W a}ՖaP-n1#;RWA_a1IuKuIc7c+i)qM4V! 3[~., ?g߱=OmI/Oc+7ιAcK^T{%'\ mA>O/HNW<"?yiy37ē%Fm0JRg6)QxG }43ۜ^e|}^{i`QCsæx#RI-v[Hdƨ3"YrRS5<]o%Tkp @:LfܣP./CFIsBvsԏ aԐ.똭S;7Q1dcU3 W~4ϼtf{g5٨9IʲCc ͺ+8_5%wys0ʆ- z~>u? t%oޢN)nx-'|OQy-|9G3s57ei7 ,g!o2Tcx4o IJ8!J 7> ,?7e[(G<7޷6]9*ϜHXeCy?drѡ = 1dVM)8<@. P,j:]|sP&$2kL ybj,hg`_S="9Y\3Q|{dɚ3dl%aLhlٿ??Oֿ ˩%6fKR("KiZeaC\ԋciܹl.kȔ[R2lbXK,$k30?묣lÝWb@Ey|fs.IV砓Ai9ŅBf%)IC1zYtMd E3ߨA2Ct,3{5vH[]O0"M/^&og7FEy[@ 8jG9G,[*8=P`C%5ȣ{ͿO_ף jŵ糴VUnnJUhJ˯b|OA!}[ s*wn7I?&?`?__7s|=_?, G". ?/H|񝕤IB٪뭾ڛOI0U^У(5x-riCݬZ^߱Id86D~о] WP= B4W՞**'lhv\_Y\F{޶ʏQmn:ox.=u3tgp45T:J Ef9-d=PpJb|Rq *0Kܹ8_c~rk 9ٰAF<{P޾%F)e<`miT;\I8#V=%anźuQzGQTNIƙx>YOTD U|ymqKH `y?2g-8>Kt.K; C4 `,Yy:8,@jl/! g<}EkRK9TzG(2xNSO@)_۾U ]&JP^ )Q0Hb@qr7t|?Ϙܢ/xƘc͵9{ sh ~{"Xwe aU)Mpҥ rY}-H &@ܑ^-G_VBUI/06 IVO[ YVn8V`N!xg/7˶㠒^1-زX<\F.4rwS͢W)%-UP9S+l uB궕.nq וTC&\_\ XaJ WJI=>|xnn,iX $6_k9ŀJ@nW[AϖfֹB~&R3Gn(0DM=Bq1~ [+"lTeEV+RUR;s u=Б:,̐Zg_ `) t.SՐɲ$Z`0~V8/ pLd9XJU2:yjݙAVajw*vm󮺭B̩>Ow  ?;!v3~\]?_Nbw{༶+f:jl7K`uZ܍ZvPLc6*3.!g1Du_lዮ j֟ Br{ h|Xܰ@bn(]3Og'w=ɩTc,夸]]O\Ȣ(3&dli EBJ7լ7~A$%Q2ϯvW J*GvՒ%ަP} HO qML VUZ?Jxx]O2E`ʢ *"74]|KtXUW9Ա:n0tfkf!,o\⒔Q|(b< VDZT UAV vQ*|)$k%Vm7^跁M)H~>hPEa]ӯ#[+ZHIt}?X 2nNiRDjooUcBuKM8=a PZloEYt9$~OmίN0ƈhΠB~m9WGC-vX uYwosT3?Sb+ѫ)SOd 2==PF²~-@v`?F(47,;K51Z0K$b}lӳTIj1)|5Ҹ^ t]vB C|Tb~wqBDz=[9n}s*,6dXcT^8fX9zU(%bvb/*P#TӱƈXluc}Z<C:k5Ml lpL PݱJtsͦu%lYvz,dwq {F+g0.N`KihZ-J*/eʡ$[]a=.WldXX|ݳE1sz5{ɐ-=4% H(ܽFy1Ts]1l/sCX#J%CQ0Q\SusQKT!l5aU7L>TUhY+1*[ l?_Vߵ+1ݥ|pJ pojռˋ?P})̤;#U?s'l&+}Z+- T [aGw 1̯\].t]:bᐲ /];EX9dXgOrqHj ݚ?!`D^Y0ܠ"3dzw`,q<\xD/EH.NX& IB:uVm ci~j#2`Y\b:aneva%P|ٖ۠xf7F\b㫍f;J-/0ޠU쒤XňT~#k"lz>"Dȭl78{*eqwkSbo2iEHxm3H%u܃Tb/8c;2\a<PVh -@#ZbBTGݼp)r~輫W4zdQzQwd5ӉW!\l@bUS nY@t#^dȘ2ݯ5v°=맸*LXOso}Ejg/WGZ iYN U.R 2٥?D zR.GX{2m@@Rd2SV;g_C/8ݼtjz.-.:zmE8 ^v8 @t2#:nH &*tG-DöH4p 0 >Xl\9þПVe ml50Yf+m^+fQțb{Ƹ=,\$Qv/GAa{Wi~ER-* 4i& #w闧]rZ+KAݚgߖzH~pZ6zܲY_Ka1Fo:cXI_Az[*7,e0$GHaJU}jm\eo ,A@.W<)}qOUJ/[bp7,$B@3Xvu|?f}_@\O:Z}? X[X?۟vi +e_ܺc% +ʬ"y%U)VmE")>pDkWJ(!r:)GLaVp-)i[g!d)ↇڰg`t.Yd؈>I~94tTR3()1'vV \K$`r`C &b` ^a emCGՌTxFl^aT՟KÕXB6\hB1Vr<($_/W-GkYU*ZY /9CKFgGPLfW,ˌdVf$Qa=[X"k.Kv.yV9uVO@9:k<;&$Uh]@Nrn\!ǘQ=3p tFK&ty>sE{(pr¢SkXY]o©fs-31JR-A;_IW[y9|*PmԅTWтQdp^cY*[;]aYZ^R0UxOTN/LT Rjeo.ldϺ0'c%i(IW|j]z ×Un!C|GW^ҔTgZ!wa)5Y72)JH:w5-w-TQh`AᜫU^b)etfj&92w*(7U,ciLVIx<E.1vsG`.g173??`iTq~Enw{ZnK`UBUG} h̭cւ;+h*A/0Z >*Z_-ȔY|'0,gWɻ5ib'9E'PI唰#)X!xBΨ׏į7X%&=:/Pʞ=bHzPxvţijVu턹vi&/< xza𜴏e9 : 1E8(]: CJ ۾(ve}[ 7m `o]p4+&QI(lU}Vln6g|}IIW˳>?Ȕޖ%xuQr-^a;| PYm˷y] z&3uKE, "<;,Ob&) w&pi1vTFXCCk0C?Iʂ⦰&W 0jӳgF(b0 BZ $.*$ĠiP _֒k ܱUu%vܐvs6s HeuQ0?'6E?A<Èdah:++t|-a*TtrtoUʖݒJ됻np̋WB37t@ Mt:DKpnC SΚŤg) 澻f|.aM|vAH JH4D5s'ZCu䫽 |.Eڅ$\>9 B(` ?I7g$M J."fS4:2fŸu 3b. w_b w_:_ޱ$>O%1 lŕ0r5n,UOȱD*M=Yѵ\R˩Dإ+%J^c0m$X'4ɔr y7GZ!u8iЎ: D/H_@fg(=Kf(gVމVyEArꢥIq(GJhV~Kyir<+"盐B B>U"kCWUC{s] B~Y]w.D +YVd}8+$QF?vyk)QBp[ r-å-[dY'`!-%˅l6[zN8 x]R,B/jqo D-UvSI;HE"Z҉간E[Ť舁AlKuEYܗL)5B$; +$k,[ץ_O^ma{UX:l?B?sy[s˗#,}O%xK[C_7):T=<|pꎬے*`ܣ%.P{w%k|_s}:`]%J/<2Wjq UhVk9laˊ i&vkDmYFKwq#VjzN [uZlkg OJݯXx$hAFeR?,&EPjvuwJKH+_-4=NV\2܋_&]U $e$DV*tAVlcIS$t&A`L(CP !8Cޯpo({hw Z7ܱW5(|`CUzGA&W~]j>ֿK M6502۽ŨX Y2PKxbeb Xq 2ZMbӞ9 NPҚL+!^N󶨌s]A(S, ~aB$ cɘ–6sO??`~?O]rLVtR?IDmAHʔP_}൘й+d*izLTd6q͐[Nc!=rF!m 0띂;ӢIhP> U)h2ʌBZ7S]҇> p`[qepnIlH ҤWn? B -sNsb:bt-n> y Ljte4g!6|gԟ#}luz&5HD 6Xd?-BsTឥoRҶp^ [w٭1x"'l.{]h%K 2J,[0*y?+???_O촿W|( ֊W>Ĺ-8^g[0@IDATz78 KwpEX;[rZD:nR;i?7:]p$xNQj?}Tmgw;jb5B :Ig5}~!z[ ᝉ'Z qLAQh((t^8H`)Ҷ>B_]Y<kEP}/[1lCU1(^tGb #^Pq{X&L:\7W]H< uI0Xgۄ̌ێWmS׫{eJuˁ'f-%^FmQMv# P@Tţ׷l~E(I_cu_A.E>?@}_qZ+[MĠ`U0x\(fDX]edT鄝m{ LS {e&8 F{_"P}b W&߻%uW˿} 7+@~b*/|Z/:ǪWZ o:ɨSmL^vݬ齘VٖuYoN {&is:FE 2 v'LJKnP!-c>\Pji^\x+op, }){sTŽ+%ǠZUuz9(X^Rlݐ%h ^yƞR M/e 4_w./֠(}'I >"+RX'WL !+ T l&)⾶n,~Xs;WR^ G}H~Rr;+67HϘe !_ ӞBu*u Yoكa?m cnLޚgm~.y/4u0pHdzy^[O%n Q%+_O~nt~qF vK8Ye|FnԞxPQ:v/Y U&}97(ͽ%2ݸ9Z B`F=N$Y!&;4B ){w-Q3<8W,.8#%e bUpD?&aTu5PRO14G^)GvNlWc.}":aSzgևk_ A[Kcəl8K(#2 E_)> q;țzMi,?oWci~Q[%WRQ3@\5%:94\(pNAx 6(msV7..lD'irTt8&.a+G9`^ž:Pyh8]=a*ypQCoRqsJuMyw?hjD3bx.{3c+/7QRv.sש'$D.'Z-QLmg*0 W?P/̠4oHf )bʰ. ܤBƄ"cc_fdŗă,v;Z/m<yrv v 㵽 \"9G9ql2HUq*V>u"{/ɂs5k}AgxQOc D Vd-3a߈.S3I,6a>|sU;Z"k-P\mGl6V*i}uZI}sarIk>P1MZPJhlh*Z^VV#єb%kɰ+H:7ʘݭs3זB !_.A%ފ,֨IrM:SmNz 'qV)1ܕ'vʗ~ە:tVCF=^ol9qT|!zAOnhbKy >+ kx2a7a2o$Բ10ns1-04[W)X#7"ӥ`S-C4gΟ<,=Y@^VA;G>@Q`4ƧlVT:7 DvC6buU7%Dh=.X\]"Nx|F犮6rqk?M\[4[NFyF's8d4iA6[>ۀc8Y_{/N ul6F;enԀs_ jw\en!<7GΡa~|?_ D/?iGqm"+[Ivg_!NLDV#om/.3d̓lv"(f 8|g|l 5i(M.8l_|`;'.dL=)HKƔb F.8 ;RY<\?lG.V&wBbpҐׁw'M젗Plrŝ@Ԋ Аlso>~s86TBﵩp{vڔ\_嚚[l nfm.z w=oq1bP PDbӆV~B1M'@9~fǓ0cNfWTW!rqm[o8qIc_#+ʺj6;`Xջ/b3,=Ia|p&Yr|_&sͬ8q7bKz| i#x-,S>{Y [Y::hh[JF!2 ╙MtY*hUB* ݼmpa:.gssZveJ*BcARg|R]W A{0p<]_P'(\=iTZJtX |Q*'8ˈ~qyL+rChIk-^"`C%/#gffbbZH$C "!v`Țpkj8B+F w5<C9Sf[2g:(: sM„ȳc2> jA_UjUp詘PYgPCȵCQO~7ޯ> ~:K#7}dKRsvA%^_MLzC՟a &ﰰO/FG!~xyY-зvr⭩>Qn;Mxlsy &b$fv# B܎S:1²uH4JB4vx=  K6&qc"7xD`d2sZxq5_ Ġ:ԅ3ƽGHybIPg>2|>܆pcTZt bsmXSv4-%^ eT7\]u\vB<󎷞t7=pr~!ڰ~IyAn4*Rs? |o|i10gt+0ҢbO`%έ`d5IV./erEsal5#~0ySdHlQHi6UR`=}b-M@Yp;#' yGe]| dRβANԔ|xVi]*G3l,)k){73l4T߅ uؼ {Bq.VM%VD{Lo1kT㠶؊[u.[)®ò̾Ԗe2b`wH`G%r`y?b>Y53' =x$¢FXإrd>%\)b-w>)@q!s&W"Rc{.'9+Foef\Gn]2%igW0t9n^ 3,Gɻ?qdbw3Rt"(ଖ&}֌S*RE/ 4Gra}eA3 lhVt02L/My%5U X`Iʃg-DRVuk5Bы%ӟg>7>i.OP-N%0oZbeu1l+{j_RV2VNn@U& +P3,QO7;F r A|5Nڱp0Z mwMn~Ľ\\JuPX(gǖxx`?!Ýg3HU}9ߚ0+& |UwE~Q_JQz;yns.w<:A%gV~4bU{rh''#X" Qof%֋]~.SrX__ u;К<]HT$|GҺH#XeJt«X#NO [WOgY\2W)ʲ-Y?K|:KÕsb%rF32SR,&㲊UgN bk! 9"R-r ^0\fY6֕YRf{LȆLg68ZN"eѷ";1\-U`w~ ![шHl CjDW4ٗDI=x@8'_/P T] ˌ1"ܝ?߿詡dz yJ_؀K21VB׀SyX\_߯<,䭗Z_fqҖLOx4DLҡp*;iU8ٹXLEz)\m2YR'P5ql*A-Q&r3h} >]Vᝤ@xW}aq$/rWT({D|tw^&tэ6|xC*k/|-Ar$8Fh]?OSql%kZņ{B"샙b (AH\@S4 "SE|2ږOv2엜* .}+؍d!aM'flsuI끝V_0|^VuL@ c |{6<=.Vv봼RDmk;z}H7 c4aKPxc&;MOkI}*QtmI kP(1v[nL:oCs/P0 !0* pv'pwOT<ew e xsX6/s"\ݲH @fyiNXBl`0@ej Jb 9sLNIEX,j(,lAo~5Iz<&-&Ă$0t=7(&St\bU |s9/c [A0NoU4N4QK[݄C`ἐN[hbQǭUY#Y5ijHjn蕈l>FҪ1bYmI9}^*f@Y{8ȧ40^Z'|uW?^.Q6L"mXgúuCYg;܋@/1b*ն\l@f?W"#Jl~ ҫƔUR.Z= !A~B[hc9!}?EBG)ub({^6e%~u4x$:)d1OJ t"WN2_}:lMf^I1C39pVPYۨ)zrf5ɗCuci򽙿[?>{k4^.WqK6c(@vBzIʶ _yV>I9:Aa'>}OTwh>aw1mk bׇ"Zi4G;i񈶠6czZ=?3(YJ!x0׋^U 74QCzE#гnle3Z]"+^ UEVZBʗȢw.k Dgd^Z 1F+۱]FD^Pn)O1t,YuQz-qIxV,XYa.|҅{nIDIs1F3e `Vura0N5$SW=[kss5 x-q2_a6n{a"vyS] [9}*@% ">׸",pE2`zKP)^Vk0Z V&ѨOny 3w v؁w]P<@/yrBr*fsZجMxm P!- Ba ql6rҞyQ/@U<6 A1A{_y|XUzG>*;$X̫@SErzxjP-8THt%24\S0qS _Dt΢!4=̕అFsQ[%R%D1\L6iEGӄr,wѤzr򪡓WkKP50LFl. ע;1t<`'1F/KZ񆃖@;J6 џ<| vz>b1(g3Crb+J<& k^2-R|{Nr!K0cNιI/e.βD^-"ĘtA>MCן#P)]po\KN gʸtmB)GvQFVf hOvc?X%ȝeg(@IlKZK}Ptb6l҉U HY=me;&coҵJl@p1j,hZ-YM]n : LZ*Wƶ=GGl{0Б'0v͠4!=I[9\¢F}'Ӏ8Sn##9Gnjva֧EI7ky\[<:c|#{Kٕ(8]6X9̸*dpW)`W4< m}NCs0ƇdgzwkZ$ʎR2裕;yu5xgLؚHF3ib9+(6;Anvc5 N,w/pcku6\ct^Ulr:4uG]Φ` xC٢[EZ{sipgޟ4YY {?AGtW\Z^^RR=?d:i٫"{䶿f_7/ych`c jE\m%w;Èk}}]G۞p+g7_a<¡b@y\DZ`d㡉` d 1k>, O·})K+7Ym5N(JڹpQR鎒 <ȋ9p_>U2,y]ఌp'g@9IDĮL=I^Bfp"t8cyEY;' `Qy ?x併[0=5@鼛45P}#OrS#Q@qvүI*"~]^52*} t9t;g 3N(_~p?@IS%p+Kv԰NI1w;*1l'鼊"9&Frք fӦW9[lA3)_).(;ԡ:'fSf\5mwM$mqY>Lo4ʫ k|oM|rԪ-ez3%,󕀽HI 3ϴrLikyOyVBA!n,vW6٧;4+``"[5{ÿ$Ҟv~?{pwB);"@XcrQȭ [`ܟ$\卮ΈEHZ y[HX_RwX_+ Elc8X~I;h>VfvH +{voQ{ðE+~M1]?pL]$׏UL\k7iF3"m81'%V3k {h\],8}ŦC! M5JcH|g!bkJ'tp ` M>x;SW<ۺR[%ar br`,3]z:nE,Ԥy 2%d4z 3%6VL &ۇ64-LO!"MfSM7Xۇ`VD@i}*`w;rPd"2.VAZ.I8Sf* ;]й]DV|y x[_<!ġ_Y?_g?-48M%7he]iS*lrSb^Pybva1|ߒ%~ayq栚aleL.8bCx0/!.\vu)n[v)Da19'ՍCtb 쉮]_D|g+̪m`j_W%)зV[&ָh xBv0L7[Tx_H4JBb9ŧeL>w._=l)K( +"~-㸵=/"蝑 m. rdw5gXwpmLme,gҁ$hu@1ʬp?:p'r \T]!$r+J;7C'u7qW3ʣz]֪7r-Pas/\UQqlg#F9ԟL5w?oYډ Tg'L(2KׂS@9:Ҹ9>Tz[nI^LB( -$v^uh`M$QL֨9Z5wB%N3RDCՒ!cA"|hxv>s,Fr> sgo3lCzVNR0pi^: b@JyőporF, ˚@e‹0GN>M+/VOJH}Ax /h7Ro@ͳ-ϗ.4>ILw7sr;2O ܶ6kSϖO;ᥰnF6z̞6 n;D#8L8cM3X lJeXGDа]6^c^Su=j_3W8{zS )f>|:OiPo?IR6wjxLL }h\5"tI*ַuKzp{ÐJ5ᒬ,2xbms- 婃?2 S"|h /^~X_ٙ nFЇQ &x4 E?\vE[{c*;]V:4 QdY?;h]YWSt",%K&wzx;`&X3(Su7gUfg+؏.".- ^iТ'=ڛ[swÔ`KG;Ɨ$qG8gu]`\.Bz` n].4^ Dyɱ$l/唴Ȣ%D[J4۶Aefz:Yt++%*GGgսv/ g,GcJZ6zKfwU$ՃEpq,N-LlsXPBؔ]m([3rfi#&ysK݊˿)F/q/R7PnG ͨ'ߗ%߼="[~d2a]\$+ʕ2MzS$(Я4qD.ꫠXVB㸚tpهx)Iu_HU7Varƒ*g|0YSx u(>z)>W/ hP>)*]b.,\]G ~V!b8[#'kfHK^}q&HB}0hR,j}:ҍν01ANT`ڟ5)1^97&$GyG$eu<2t-ͫ1_7XtxNOz0>]3 YYl4Mَ ;[yv֍1c9/5/1S廋leg&M\S/z@в-%qjO@%5g2E.7dA?dnH x}Ͽ {?~_Wew~G?-` 0V| N?j+ ceOKl]3V@g ]`翨x#S)9-8{yz8HK°w+YcTok&́ GEvYi4;. S#:qg܅;ӵ]B ˻TVtm"n`l m@v$2b R$3%v0c?xO nu?kuk9s>ޗ\z SԘM(sZLHpcBpGJNaʹDiڷiLm$gs"bv}+޼웄{-7-XcL''AF/UYeX7(lT ęQ/t?]D14ԗS´p Hp?w* ӕh!A.i UÉןBf 'ryܸS;=Fne&;KQChS:oim5 GqpMt>7X'G|eʜ˲ )S{E4ޕ}w90CЬ=kkx>Nu鸦vNf"Hgcs>+TAX)|gP9/HQ}N/h2Rן+~];THS7CNpKu{QedM nuAUuʻt~e?x> ϰu=B؍5Isά Gp*K.S[Kd`kBttނxsÜ 4|PBq`֑‘f$(nZߠϦzkM$o0v&-%Yмษ·PPQVԗ@$yKq͒GtVKClq:ٸ~s sNY Ώ+iܠNλu7~.f?bzg <.&D5NbmBhl- g a\#Ɠժ/ZllOh)1/2޼*x'n}W<`fXScxdvCpZDkG`1o?K'8KӴYLHF (M=%X] nP嘎h$zK)k `R'C,m%q. Ho{1)/.&;7#d|L̐qf@a3_^-}n=?^ڦ:Lc"D38Мr f%,Ә3z_ೈ3#\#盈*ڎѮ5Th8 o5YJ@)֐:Fc]u:wzE6Bڨ6_ Co ãgHL #Vgc윂"mbg;Q3Kg65vp@IDAT;/O)O׺h +>g}Ÿ63#qqrQ='!)rq"tn i@5亍;R0J`BxB)Nw^o/exJO7ې uf5俔s  (7AηU3jKeY gh&Ah@L.]GoE<mv|t ;Еw9`'&>y]b55nӆxGEg$}?_90zMRԳDŽV*jNsy9 `6#un4̦R1&3'QzGEaGKP$Iu#Y.7LnԖd3q*\ 5Ozo< bX[LΰGndKY4& i1.v#FH ^tM_'6,qC/yF'fT%Mѱ@HuXyJ; dT[ 5 d{|&^zILg6o|./ǥj{Zߕ#JAtbӱwUI~1 .^%izYAD7[=vK)L;/\.SVX~xkK:/ 0,8G QdD _\Fi~JMBĈ4?jw!S= qDJSbo~/?k6x.U LnC}X3b&??`l6W^ѬҫKAﳢ302^Y:$1&8dy;ʇGj#>P nfﱯ Z ytyUܬ2`>/bHXjvkRӤl^QЛz1XgIhUg@A[n6<d.46\QR&?˴D@8_8DcO:[NA+ %&Sգ֐\dp.NJ_>}xNu/pr_3q C)St\K Zeލ7DIilhD{P!™,Y#7.XoDnϲMֺSt\G-"eG{i5eMi?z[%gf'X~ mx#E1,wr1Jeug&3SVig0" <;(zilH>dI:T3hSdt U($7oc:ـŻNoEV3!k=e#5PFiislD=u #,@Ƴe1^5hqgU}p%TOH̟ Gu&K {uaE6| ԜMUqeL6C %ݤlcVugxHߝu՜)k2?ܤN b: ),'Oœ]6[0iKAQ4KeOU( =Ɓ>gWl>5ҦE&pV6Y] $OFu ZsL: ,ݎy^{I.9'/=ɂLsF˙ c~YZf(V{#Q]=;K%Dg,)DMuO/t ۪hxPc_;Gff@nf1ϧErISgyc0~ Jw8`V_m8{'VA;0D" vDfbn)$c؄w*=u"A[NLYz!eDTo7")+`4`wsW;M41"X~NB%u 8kH/l@)K$utx<(LW,|$|.1&0  }E7X-B{zoCRICô,ɇjbEMLc07~fuFM)Jg(Mz[z"$ڋf ΍"YWՀ B6dV(&RK~QClW+$,P^iLJFO[zΑz;zoמѿ|iԏ^aoNXq8Wo-D_G_"?_G?_Frl"ڌ\-}+ZMz]ƁKLMeCu>FA8O(v\ӱ7vʎWx\&SOyZc*41Xg]2(8RvVO:lV ,~ʪȽJ}?k+̝|FyбƼYsU~h}KnFu 5% $@6jfI͑llw"Y3` gt 2͏ŸX32zhȜr,W|j|3fbI/U%@`F}g1k(F l Ȩ~fwShxeKl|g ]a6;+-ҾlBJ-^ b)ĝ}b[@RD|lazp縐ls mȳ/ ـ4"5abSM,"YllCyYl/ nX`U4aڈ"nȣVL(lƅ"^bn2Xd7\J/K%Ǣhe d#̂9$8`txcY]wc8B<%ޭ}&8û"70 Zx8Hz4ҷA2)ucd7DYiJx$Xq Y32kLxҨLog @`^?=AȘR"Y ?Nhdnp*Hm,Jq2gͯaYiD\N=የflYŒrBGOd1>c[jXe!-mdLǙw,9HL5k.V$ jIreiF rIdAiM$rKB9̍5jf`24"Bޞu0>Ú3xrciY Y!It.ΠI1fVI] aYJ&(?HO9=SCaztA=fkqycyɑyLK9iG ,i#hě\p}+˪6]`n srrbTx̶ѹ-J \5OQ?c2)lJ,NaC#& d0|;+)tE!`o&0ltvodMC1wC@lzsa|-t3U@=c+ hYwغ^q~{s7_wwָyBߛz3~ ugBo/ \x 4Nihտ?z%VW.Tړ쭜BԴ|5>:<1doRyjATnW9ȰSa\e7jlܵeˠ]cQ>E7L=#~W,0Y,gDp(ȵ]%N]pKH9Sࣳt=Bam<3g\ܤx&kS z$"KZEDd%-eƾDJxP0M.$S8#&0un/iR'i u4[Jo.]{S# J$>e'8^i)nƹF`J99|(LIB1y+Ew̶Bј{bx9r7 #6Amy3,t(2@U*9g"Wv ,j:h,Dpi{ǥӔҶ~WCwl҈AtA'$KKF>T3Es)V*gs\ԺJq t.>]0uQA]эSL^=T[&2nJ`v@{9w2s.mrɗawHdgކY8t F. Sl'Ԧ&wȬ@ Ul@1 _c1wC:hMYc`ZzC<> U/VF-}Ɔ ~ΪL vL$,X)Y?K~_хώM5Ժ\Rn:|n=<!l3=*#N~V->ʘ% ÷rFU8Dqއk 06ap҆Z=#)dV8=G $/<&w)oR@^4Za njK258h]լ#aFGT*K]0PM3;הG/.sHps&\<]yإnixpDo3ɇ)SO?&%|6!}7tM{# G"/Vh\k~dt8q݌!(jkk 2Շ40IߤZ# lF`>}F\u grM8gpR1r@!ـv:'xsv8~ͼkm:лek/Tu~H_ E9g@z(R 4$eO[gt7˗_u_mcI}rҟR]ot9zuj6]F^GA-ld'GvP(w,&)/+=6d,077{[n#_tOE)NCk^<-_9|p]{Dy'oX;Sc Ō\p޹t.'`sDkQږ[̊ (R6A"_lmP9陋NZKiIkiN,_M~IΧ2#aϟjx@/BO5m=pj°LI~O}3u瞰=~6~'~j^8}.RE"CL%NGQqA~Lw{7&_G?? M0x*ko~oV٥+UWUR"'^z) ?zQu!-Cs?R3Hy`t π/Mg/,?{3[9r'sl[1j6%$ANw_8B~[+i9}`f3{TUvN2-AhA @sS{ҹfȖ"HsŇ 3SZBpzw]O(5[S8n'|F٭7V$}a8+0ȔP*6x_ZKe|Ykv8s?~0~a!gklLӨj';A 9KxYHNe-0_Ʊe$2h˹K4(ӹoʼnaF ZB\깺t^րLͯ!)Okil3ok {^?0 ՗l'5g2rbp;8*7ž%^ B Rk[V7a֏35(k׫܀OZ)lk|.{TX6|Qc3+=d2gr^Iz~ǃ1*ϟ__ !y?Oo 8uX? tX}O|rכ)/|=g owӣd5Ј{$3|FOSW)5 YM&#֠Ꭹ%Þth>xloMOme˃Ms`=ME %\Ͽjo~Ӟ0 Udg8|9gom_xn l>,U$]S[&C٭V | 4FOG#\>jW.-AFKpՕ}3^g o#;i] V $Mh)5os]c!=}vV ռHcCҰ]%`EW-ʺ@Zg2Hǃ`‹BS'ZB|5 eB`R>R~phpbeQk鸑a432Z;/efwyM#cU.uq@z#'=mS7kq"½ha_{r =r/,0Ίseqҳm^2zQeei9Ǘ8 K_M"5ͦkU[VV3sB3u[ehWsP|f/pm'+Sz fAk{XPcD[^#1XokiDybp(l? ɶ9yȫ#?uVט/&aIT4OVn[H} e:qXWl S\"7 dd:oaRj(%r{=0jG5_ [5_YBg]4ooV{a{G?xl>j7lj)#V8WțHIdArŴwi ߼_酸g-Lt\m;!gԌ.A,(5fP7SqO%#A"n#S@?YY̝D3咮A/xy1d{L 2y~ ^cN\kXzTߐ1<>"4! y-87!um癬pa<8w:Ag~-(-O gNZNhDϽ[gyPC˒>_oe } A8s:=lTŚf,ᇣsYdⴒaÝΐd[OT'MJ -L1I4*"gG4^q RHPbѸ2:5 un*w`^/ ]*M@1F0MulgTViAX2M)< =RCY63N_AxnLCN'.q25yZEy ^S#~I&Kz Qi 8݂@T@jH74!e64S걱ՓZO ؂B@DkL|* MdK b/7q|7 ΧLjx< SgpY69fD8ş8oEwYB,o>P;KW"iTƗK P$ݬ +|ketS9zCy@΍frl@rR}Om${5N+ ~LJo|ߓ7$?% 07yz _Vo&Z@Wp?/ib*[VJfw U{;4WIjYt~ƷTG@&g1e ӳ>WJ,>PmO[R[SEikCpKCn8Z2m걔M+ԅ;_Q9BK!؛A )@18,lxhn[ESybX.ۭġho}ޗ}BMBM`efsC.e Q3+nե&qvf8PU#Aç*+B)q!^n,)Ku_-pq!~ubu0hfƜ*ġ$jcXRPK'4I%6/%Lpk `Okds"F#['R) ]:MxE CsMl=^):1%I! ӭ8dz [}Y4Kq8ܬ`dbM'1]z#)4;Q&gdJZC {lmﴉz{\t+NINi,W 1j2h&؄IUZ ٧Gjh\^0&leNkuQQ=VrY'Cj_?o+~/o?ڻig{~LfF}ec*}}~N\oWKX'SUݨ_'s死(Ġݵ6-di܏W=anhƗ3&i]m* YjTo+nxjX]Lcj(Ӂlyp \c5RÚ;7I)ς4f& Q5Y՘@wp#u$Yh1+l`av7:=,· N{#֢'9*MK Ah~LzNIC#cۢJ'.8G󙲲V <"-bҭ4[nhp_hwޓ]b|^Y=3^Xu졧ãdS Ө?zv\vaL6 vipɜeWNI[Yc=ty[vLL3&*Kѽ%XzXGsppdܪS9i n`띋?Ѽ ArbB;.MjJӥ/w3P69?wتwXtA%:.`̬:Qu%5yΔollJ/X/J/&Λq 'Ѝ%,52DH;$2߿oƿ~J(/?~ALQ!TRu|RQhvVBLJ5Xv:mTIVg۩cPEGvĘHoʪZG8la% ez x6qb52=к}VT6j񘟡b:m_nU}dRqMd̊7WZ,j/[txprCfN00NǬ f_.ӫg0E[)Ỏ>S=sww_7sGv6KKj8F~`0"WvJc'\&a=O58-_5TCKV}jսIo7Ma+b/VsV&vy'Q}'nʍy{~g:*6MzYLHCXx\1]|h8@IDAT] PHO)\ں9mZj3Tx\Khb;?oyD>rh %4E2)g)Ye6ODz<ӌ1J>/Kb)Teai<.J1U57D}Q"g3PO;It˚E2!s~LdS{}}-(S{^sAcR|6y5x]9K4)ȎE%oز ;V=Xo },'iH9eh_&ΧC$EL5mrTB?0+ 1Xsޗv8۱`r:S9+x_.nxƳE`@J3 Z&$)ԩ|E{j2>ָ!{;Y CѬB+!^IKlЇ`{ilZHl(9e0kwf[ifeai0_L.Hp}ZC}CQ~i~k_sbjJ.oVS{{@hj Pu0ImJDBS-6< ¤O:0 $[RU Un-mV!;~@Gφw^N4 [ Ŕ,|;'tCE#ܝ`NcXM*S?}뺋uF|9Ӣemn'd6Y)dˌ(қٸ \abu'LQ]-#r|)Fu?R#FLl%fqyFl0q, zdM9'39_l6HKxirw4 ra0r>,]ӰV6^l̶59GwF[Jѕ@^y7/&,>a2tV"|{c/W2¾ 31-ED~>KIGpj.]]޲ĸH#Eل,je^HǶ(y[|6u d2JA_.,>}[8A=q"Q0;LB!.< #uQ.ս;f, tǁ&?6 S"!#esiiZ </40+stc-=-U˹+Vؘ2QF2}_LWmae& fq#Fa59Qd*4F_l뛇KdzR$U4v f&ui mX1on s3/e2}BM:Xg9UV$O覒's4]_g͐ cŇ!}TR|g5\l&1 ڛ{ i@tzE?x]Y eLu__᏾wϏ:hb7׾G_W?U(~ 5goE̐9ZAFMJ3Ә|ߑ>f;E}URMjq;D[FM( n$ЦPkφO'͹3զ`ɛ/ SyG4'H2+C3}Cd@-|u_=+4|5Slx yc7כxtId(~=Ԙ} !IM9$n5߃'|m#`X8qi%┛JtTi4RyG_d>i6<%>?҇>༼<2YF?Nd]6=)x^ ^A,X$jteG?&zѪ钒*-^vf+̸r<[?o>%~cw* 81&nϟ0?vtZyP¾A=mUlR W˙AYNbHsr<~w`1ۜ4[2ЌO{S 6{U7Xy# E-tqdta$ċy-a,?5k`9^h5uCk}s!mm3Y,7uI5r[{ƊNII'f4mXmw tcQgXu۸)Y(T>Xp,hu. ER2N]y: S!>p&ql6GrqAzFKPp9WYk&%2E ߓThmlr,l8:wxK?\Sv"=f8 H\:Ex9%pnm4䯑< z%>D& -&t;dnVvp^-zߵp[gHsbhaD?}$Rƪݾ],g!˽3" o1b;4٪*9H6AZ>Zu%yϏ2P_~jC~,M9\lztEoҦaTj5ڢ[@={4<uVQi55daC1EE,l.N7I:>uEg5t2p4dEF QʤUBreM-ݯlR/ u ۱ $8K{oNS XQZ O]b*UUya"J1)A i`K˔m+/.kb k Ey *R-Q᥶os4^gZ![]bO7EI9Xd +=RVpVE!"⨘N/%SUM K*,YH#/&ԐY{)SQI@lԍpnYR(iU| !/w)FAK4Er=wd(&VE]GT.4S6&dO-筠yX$O41tVRۂYٚ0B1gy= );R@:Bq,e9oA!ˎ|vS`))z fs؋Ѩ8|%`⟆wpl+Ū0ր$Ρ}i4Ǥ^8GޟiFC>Πjݍ(Tcv^:%9zW!-&Q_c ǍR?f898N7pvIkJpu6M4&N8ܢHf07ZQIZ8]e2wm NqVs@ml$*J̯φJm*@w|// O MG|gsepɻҾHjZ⛧vL4̨j6w7ukVCX**[sUgt,m#RZ֏U3ɷ<ØN86di8\EP? 6RMJAEtKq0Yvrh ,9eM@4]'qrܲ\2Ue3 #3)Q@Βu29٭>\ AțrA_u9uR܈ju2QbH:9iI5}cډV@\8 0" aRCD&!ίeI YY|n}2Z*~,(gu;e*GW ,w3OvېLt~HJMƝQ`)tNݮNP:h%)dsٛ Z[꘯T²S?/ I 6BtB!n`E@8[7 Ŗ(r#i^W|Ím[,:^ < &[bǣu"K>5lʙp&SpDWIF` @RIjb.QtO~{Z5TJxosoݷ>q<-jbӚ0{WuMV-g씖UfCKUMCy~.aw"-\غS,PW#M~5? Gqf ʹSWܭG]a%\_1w tѫ.6v,ai$eH}/bf›|h`/s#!2xR}YUS&Qzsu<FPvņο14:#}ݮN7;+d a$|ƴo*KҼ_l3߀- lF RXcŇ4a7`vnZC@״@t$uv:>)򚉣XGwޒ.?\RS1<COr׬ecqfZJԶ14Xp%u:NZT{dkJJt[MePCi i3k`i]spE!/!z"rs"a%b8+3% Lo;>Ų"o]NX4 evl֙)v>줅lx㭧h"2=Ȏ3.m;?C2:1^"@A2lmxne%Y_%T.çx%sYL Ҕd6e܈{ƺ5F] /`)1W=H0=tuJ:'߭W_ZUŏZdsifM\ 3\S~l7lb>dfe3_=H}JH$'W@If5mR vCA76-q=bO{> lҢazKWջj"9B@Q'$XBDA|/9aA0!8tL xYe΀tjyoƸ56=W64 Ovp7Ƌ;PKiDվo[aZOzd[mJEjR;Sc>C3\*⩳21q0xItOcM!.Ei3#SWOJ]|fqk7\F_|!h6ٜ#< 5T?LNc Ej&j˼(, nSk36" ({e5x_K=Y7dN&uN( е%I4TgB&\00ȥ~‡]wk .h'T˻w1qݐ4N!/h[D)"+Y6EzxtzLܔTkLeVA,/ DH bGrNzHؽ$$+ rXS!±ec%=%Mw<E?\~" ojpɻ">sUX6쪿f.ۣ&bqfW?zkayciHGJJ}~5yIF'tH5 p"7UvspeOiVHiL:jl>6YV@ x#r&|)s'5thohq ukjHa=N `V.Ho ېyb8A!E|8E%$<ε! C" (yicK9w01DJ 5U%qI wЙ0Yg!{}\5SItv42(NNjQvYMbu~a`r4MvsyFqZL|?7**ͱ=Oج5xY]EvPPCh6}Lfu4$}v SQu#{gbf۽ mJۋt~!uyZxkbٗdӊT&_P~ҽa0Sto "A:'BLCg e1.e7F1!3"{֌_Q@9AƯ>#n>4a2pJ6 gpvqGĚ'-Y?'= 7śtVc"@dGU᯹>@EMVpl1l}bNjs|a_@HFlylݵdW{7o?dx"M>IFXXe 504vҔ#[S%V흌) /;c4Ļ%v9,C k̔Nӫ<%@X.ȦȔNa{ߨ&${"eύE2 3> McL< sׄ53c쇺Ӄg?'@HR,XZ9bRS}NnLN9uJ 1Az@BRيX{\SSF'4΃GZ[7d "Y gȖgX9km9C*!>P`{ ?!噱>y4ǍtPiu%i7~Pps]N'BMjv:gĎ1 JM{H KI*:ϳ5^3کxEc girDàn9cߌF+!MqGaդ\{.(35>GDpݮT!ضsA". E;>s C&|{VIE9kd!{zvEvBsikhAzwfhZ1&M1/fM=2KYM؏Uw/lb{_ RY2eW7ܡՀ!ȲjVF<3lԾ.~[+2$ภ-RESKH4ģLG,ti͗M"V'0_;.e"RK& 4D|N«XD%Z̹lV 9UY>oИpYE.( i]u['%'Lo \ ʃb$8 Jbr%5 CvK~*U]M0JGގKl؛\ =tnqJb;:09:߬;7i͢od͇YQCMBOa5´K7>r>(35Wg56.Gc-EQs勘wJ,9"oǘUR$h="\<p,Ο=:颞 1 pVAsYۜ;xtΡg.? -_eL3{u7niMIIm%{i\ *b6!Bl[W;{^ \/r+*jV}&dq<Cmz=2F!D<|`Ɔ$PfvԂ3{5+4n37e# -8Gkb8Ww=ά@w'WR}"FS-Pڽ=՞Mۘx]_ab~AUɓ=?ìՍM\X! pMQ}#joDIF:ؙ̺aVRvQ .A+{b !Rnb5cQ?{s)ZzJι]~&Ln_I4WF1)%cuv gOZpJ}8GRE}OwĢ€(P#_rVBG]CqB$3iU<ၢ08̅O.1 JSxEXpPW)3T W1`;RĒpU&(EHe#=h~ eQGe$J;Xg" s_8PD(S$f! A+O&n0g U6,N#)1cd^YeƘ8N8mɃ5:#p$HXj.ZNF86A .{fff7-|6Je̊%Ho+h5 WI]hN/>'MIZ /f߄:֐b rYc/X8K%[[BjJK ;$n]D:fTKCfrqbKƞӪ?719TS&/2 [_A[6B'̋ӝ$RHΑK< G ?koZzNeD+_#:9ZLdM[ `(#eq+J})Y5v-U[ ] ު,WBuO{sW"n*# tf hh?$V] rHNZ]E"F'zt77HhH+԰U*\5>*fjŌ]Rp c 9q^U-RccKx2׵e<_x!NQSwGVp&8t5JבͥK,Fjbg|DģBnqt#HQN mG ²V DO2O|6x MHd i8EYx@yA5;OB<DGrP9O7ORfݗb:E@7f&K <_(DS`6ٝDwsU +#)J~RndX~I*IdtQpS]Y-%u 9 ӄ-l1dǬo?jBCJTv2nҘek8A!(+Xt[6Ԕ on`ld % , Lc^ix@|wlgnΏWS8uܸ2WY͕^gf^@p^F@k $x}a!0Έ24 jhqbmv6gRBp7j t^Q*}o`WȍE MFf'+HYY|KΉ`X:|0A\【 P+#97vx^GYsgH?s:lr=+)QثLtǶ1UXscA&ˏ-ޣ_24؄O IЧd{ӄt=y(QYd4Q}Dݡȑ0lj! ffL^79ds9EW S`SN'n:ǃ]RiU=@ulN9N I xq,psuG)\z~ƪSY\~T|ę8xi9 ^$3GDHgI=ErD7/O|fijEؾw&HX{(WcɊs2\@8eC\8 M&hZC"*şF*82sSAyBM#I\0}_tPhv7;x3ޣ "q^Msuz=$lJ߄gl4OXBA-N'#$Au*z6P k2N"7RD)ah6P% L:L= D}V.ͫsؗ*zFgU b:{Z-c4i}G,`Ӝi"Yj264ZK.IC%!0. ل̬Ƨ1:24lNS %ܫ&CmƲ1:'<%$Y.7y|IC;#8byY%;Y8AL ?ΩlF k cɧxK2tYN1xQkﴧi jn sӯu=XoJ1>JY$xӝ[ϲ)\&!Պ%V 𛸂%Wf~d/I8x0/޳&n#ŔF+Fw4pc2Ƕ?;[`GjԀYOߓ9ݭ$DnTb{꘏]|?;~I·'&uDŹjRW>|>!w}bI,׹}fN( !jnns>eyWVrܼ]+p6#8=bUyj%JX'pPO&%Ĥx'0ಏVCCýca2B~3@Q?>u)=%ֆ W BBeTJ&}RMzN$k4īf|= 2OL816 (s2g攧<栝6t76?&0W$,AR<,^}mKqipɂh紷` Gsr~F݉բ7k. va{xt]WpϽو6g}lq@Db<6gACesa9ZV@0bԞ$Ϩ n1:ٝ Yv|Z<~zI,a} t6_pC _ s+l8jMdb?Q,֟ڙ=_O_)MXШ@#; `揻VZho<%zi7~ޯ ɱTnnO tD㈮Nüfl)qMϻ&@3m&讑Mk[frQ$E9484ⴼd~ ttHÄKP= 5rP&) l*Ftc]k֜.ާg_-'db`k=5ʕ47lI=ȥq: qѤ72"3AʴCJV̧a7EQ"- B%Vz @q]H2&RL CR ̢!avA *XYmsgbN]'5 OT6'FNnbF{=vz~k Uk?|x{[2*˽<7:*#dS44mG s``#Qߢiz.UɨOo#О9MSa)D(5,!!oܱdbC rIْ.<# ;ΠTJ:}hEj &YXL 1apD([}*!p=6PՊ`{tm)-3Ìg9n"4)( tRGc[E؆N3pJo9i/Y5X`Cۙz J {;Ob3hQIt 2Uw̬'8r"&B:uEF5, Q׀Qyaf}g)=tyJmD@Y*3Dl, ͂\-b V&2%nl5l:эr3qg);} YrJܙI*ey"6 aSzdLVTdp:6:j%;9h<$V I"an*=;ۯfKgտ_}߿`n#(e!sivD@_^-&y־M+ K+ /Q]fTREf7!nNg+8[afMl!%3|Pe o0Lrg!6f׍DƘƁإZovK+sthnceq=I!qT[`st=r_6: /_Kx!y/Q@H>JA}ٮKcɃ$(:FR₠fD5~*غjwUPdȦ.bO o|]X)wiHu44M3e&=.؈vsbӃf|pz!yj[yOG&V W$- '_v:7MBk aWǓ&gѶx QrOq3ZZ͜X&9N.TH#p)筆N;q+6\Yÿ́b`"3d*bqr<ǀ-ܨ?J"Cb.5 ZDJZ耨_lXޝs( >1p4VPTD IxZC,)8&;hbyxc5+# ߢ6XKj քG]SW5@¹}k0;Sgg7zt)bJRW3gM,'M ¿̴Fp&8jMb3^2<=$T9'Y4qC:DˆAUJܡ4$R CbS 8?OzA>Y~RY6ږ[6Fvب}i -Ut\EbTTUQl5V.KeWWd'*D햄񕱻Q{֕)^+qԆu݁'zۭ`j@;!nJlQg|4nZ$h_!7_G3#5tBqp#DT(mZt}B6ımCH"*~ViJ~GTH"9Ee-b3~ 0jҨ$#a3\Tm D*`=7=GhSaH"IxF :3uGf^ni(+i}t 䬱`=ǜ3 DhXŽo4:9KpLj.eI.ؿX6W&Iҷn\fZaxCb%68%?ǽ_ػaKPA"ʡTmRUQ+GFPd.jE= %D5@Pƶ 5xz};jjexf0?69-HuqOQsѰ;Vd Ɯk߈DҰn\d]^R]i%&z[q&/o^8 # ;DrjBk 7UCAa|F'032P 7 ov]lv5Hp Ξzta: ήeekhM@1M!gzXciOs̀ysWsy9y*C@~U&[(j=|a%=_3G3|YdDwJEl` ">: +Ht7/R̝#T %jC њ[g[PP/ W~ҽi$ce9/{\JUC67vydz+4g++~9`p. W̔g8#ATNqdҶ=D-DiuqDž#!Xs*u5glsx)'*WDOyS6,^p`|Njfk2>.mx]9 X|DY|ׇj, P4I= +tumcO5ӭ]R#}}ݱFVfH\9~Zc/|_gjvnп[Xx;1Y1Qxe8~' B%6҇3f /I&š󅯛Ä>J@_4+<&|Yߓ¸UۈtvqTx ԥHEx믿WUH"?e˯|K%)W }# d{@*#e^MpT5n}S=F%?VwWGh.ԩ5Þz:DTL$ρL:,1AԨ39[VhFi)۠(3Bbh7jlFu36 fԥc$Jtƒ^vM|ߔ#i19(0VwYċqhrt|#EHhFR8INv2`d! O+" oٞq ӬGBTn8 7`Aܜ1RUkB&fV*A4s^)zh& ۃAmoLmҧ3(B$jᏅu8hYai O;j4RPA7}٬y+a'"IFHk*c9H$k,4$hejH# E7wI-h<ť6T| ?O3 9+dzwv!>FѕޑW3MKqԮl}k^yL&|8eXw4_I? 2,:¸\Z:[ъz߻2GG$, ւkԅS3ޠyuilP* 0[YXR, I Skn]襴wMe>h_==rW_w~ CR GJbOq%OkܓxEx/ :P %[Eyv={ u%}wd]dP%.&uqH@rT {ů ؞\Fazق9;,Dg/%YrbrcӘdd䑙:6QXG"/5; MY)=l "cވchНO2CVd>u!u:ء1KMS5W6~³D:bt=c^`>T8(8/EU=@#Q0p Q=KPTB Tcy?s/?/0O~}/\nם,2Qŕ=9K*ڍ4V;ɼMhֹ B^GZ5fb#o,*&ItUIYTo*MN|m`,5 u.&Z s+kaI= 9N .|B͚u<a18 /R^ DM\N^uq r\͙>  Mc`.h4Ɛw% T dbҢBvܳZɘ"&no=~ofy0n^կSV%xM(, ceF!Jp+hw=JbzM1S%D86Cl?ہy^gJGJLZFW,8@T:SkIv=nKOWOemJ|;K~_W3YJz;wCB^9TZ3Uʻ)\zUsu0%ɽ^uMڇI>QaP_Tbn2݄IhJ56TRݶ^\륪'n6xo[fn9~ę߸0u537U>ntƜ3V(Y)/][L'3ȽKx5fg!r`6ɼNɬETW:Qy#wo"wN e03/h-|VkF 89Q gcPĄP/+Bv 6 ghI .2T PxqXhf)fu7a’bZ@)Of h7C̘y4]ȧFA@/3,M>nzle$`Đ0tҌvE0DCQ]yL{xi_pI(A1elۊ'Nh#ǟ{ MyJuR䤻,r(jrUs6 #l{1k2F~75|p@b\LB)E2I`8s  z?==19$k jg9'0xb6f憖fb77C7 Vj Aޛ)q.w PF ]uOl|h{<}>}/_ۚ>ǰg_F5cxx2߁Poj}zO//og=ׯ~׺޿ٿ c*.T/UjLLRx!yo+7,_%!=L)˫WXPva1kӬ6`^{Koq*0{S_Rђ a2d':VkDVX&ǫE;n!P}bN,oc;{ycߛ ݨ^lUln[Ҫ2Sfݢ<2g_Ivsd2]?^Yͧ坁XJG#Sr)=]3(#KlIKYVO h~~Y=J F©y{, nQ՝b9葾\~(4γ3ʧbX ea>#B5&IɾXHݳ `rEl̸4 d?@(4lj͍HtgӷlNT[`껕2pUAϡmW̜$/L̋I`7j/}pƖnf߻+IIN{{*Baky!(/͘8=Fu7> Ej\Ch P`B.%u_2y5gĬ[1!|ɼ/ q FUv\ҼiSjz{ B-xhnֈ@1x,ө&~p2mw3ǬۙfLBL|ZCӸި͕e@fΣkdrGk?Ca^t&gd~ꔑ-S= Y؀j1vBO0HN,W.Gj*BԽX0b'W3z,wy{m0CISP6>0]Zહȅ}'~Pw 2 ]9vޞӋ.:e6zkNd"kz<܄{1]#P\G=?m5+: :px׻?}"_|?}觟 ݦ v#dhL?}T{6}K2 nC_S7_K_??c/^7>|?f郐\4k OclfԾ`)Ne 1Lsٮ*V]qv/WsZVw*.w 7˜[pdp76u 2u ~ΌM, m۸$xGf(1c~IQ!CKݻäS;x)ods2sh p< Lf~! 1p!&\ҙ~hOW)TpE_g<;!72֗mwR)dZ64[`4@: b^]3aV:Pc%d}?'VQoBهB%#>,!p}I-GKM䄩Gc^޽O/|{Sot.CdDž 1y zs#鹕;y_OM{װߨՙ~{;?G^?oO =O֊ˬnɱ%]x(!2DR $BjDNcyCI<X6̭rKNtB 26mcQm I-"',',ľ{6@ʊFفfuS[FuZ߉gibrSXRwǮS6f=(lqm"ő Yc %ه58vx堠e7}fa%T52}~oC>PLX%$` M90 r 2!0x4FV~oRB6^4o}4,wۮ`_2|W&cs0f^fuם\Byܐ"U;)ı6Z= 1քb8Dpo Ȕ 4V?4:.n6ԥAA nqH_D2."c`ZSuiQ${پֵG>Ik%IaӰwro>}'>'XS/>oտW?o!s<ӿO~J_uM6kuDr?UZ ,H[QO(!VVeFH@׼P^Æ7qƗ`vzZ]R32CgjI=Eƅ ǃM_oM EPBoHx`94uh~ݾ2bN-tE!=ʍ LXއ.wԦg`{yHP/ m{q_gU$YY6̐g"`YXmb}2DX_$x{e wv~L;d 0g+a@#c7&I[pvFSNJl\ ew\6LFTlSSdU2 `86a:ƔףcZsQgmB<lc ZȞoňޱ^X[}XrmF b 6$}~.[| sx T%$gY DS nDg 8Y$۷6k½܊2$IFoY6ǭQQGKIc/n=mQkIVtʌoWaeNgf d2g"sK7PMOV}y#v rҜ ڗ(Ɛ\c|`i*vޜl*#fh "|n"\KI-P&%?Όƥ? xN'߿?_H'i~VoҴ㧟~ºT7om6?KWgbOV_aЯ?mo[/> ]q]_ r~=ŻUF+J#yuK>Ic̪?" %k[d^_՞'JXXr텽gTYiTTږ,NS[cI QP3Y'}|Ƨr^v#ĂAmΙj#bbA^{fiBS2UyUEouRkn Fz#tm{p"\Y[ @KK.J>+5u?QҍizeeqX~\y*z xZtqKA$C"t2$C']LtVf %)''IfGJTcWhsF*cn<[35YQ[ ȳdI,ɸ(-wp/iA–Χ@ dc&>]'lO૑mC^z6A*!lp1x*MљYx`ľA'g㇞}I?؄Po;_{4O˹?~+G?+~W2'I+Ӫ@ꮨS% w5zS&F H3<*Od~O)>\e2Tsz*6`O935V)ug:_[Ay&9fJ_ QyGl*A<'Xx ZXvj"p°WjYI0n5 (:5?ƤնCX@٪lzDjMK0̙!8\%&f,so=pTk$\%bz!O6- r,eКMDFy7 DzT laKc#)ɗ#?K( s{@x3coS+ײђYgVD %f΁SӹckHZhfxZ&)Tt^$'*iBRr\gt-){Z@a_QFTu|vtzPN !{7Ӆj=K B,=4+ >*6g.Whr2iWK <ڶxd"Z{3$-zH?%0`__ŇijR<=p`#vX)7ӻ]6RaKPא֣e0ORr (0Fwc5v y\ *M2'*K~wmtAmU<hkc h+a * ļjmVկX^'T6țfЉGn,bN|z5Giǜ+ :~.z- \-=T2^C1̉+aƁqI_$X/bdqFc_5|H$Tk:6iGnXy J|lfr<'=$"X jUcnSy{]pDEX:0igjD{?˯v{%+9Ԍ$ qw 6R@FaӣtԮtRw>E=oooDyw֟~ֿ_~;TxBv]腵Ҹz1붺UЕ&3r(2"2RM`]9T%oƸ'U>i|"Uf[GlUCjf/|JDZ^T* Jŏ25չ@fEY%Tsfhi b{x^U6L-؈FiXP\J3܆1||kۜhm?9oy}n.80s'֞1uL~EBǔ\vT4aqAt$Ȯh/B:D~3 I"? *{țUY 4WoþB,]8ÑuJz)_ZyGLhN.ɛJ֦&akV#h:TX`ݸ"(Ve] )4J[ZǮ@vҽn8 }Ekx"c_h5IeLo.!o о`G2!ԛU|وgd&=k2 ܚGU0*:d-yCK.<ǶQ,NIJ3+kss+R8L8b| mc@Rf:35C:g8BHk=0DF6ivHe j[4*%adȲ0/G=׫wK0.1iwO5{4٣ˡl/˦1"8w*KEl.ۦEa)-8…0,}kxriC$չ 2@S-f+?#8@/Czr)Azfb% wJ_lQSh*`j"X (u:-# Bam_!( A֫Tĸ3ic$2X<7]Ps]˪enVF\ycTY"Sa/}6WW%ӭVh?/acRy鋭ogk4ʕehUB7UBR]>G/KN@IDATo~?ɟ?Ovs;o*RK$r+kmէN&GR챜gMK ~?PiQbTp2=k! WZ)@Y7|PH f]eXîȯ"llϨ FVHâ>bąIf$͗c[P WFA$"w-Us)Bqy?:)X(]Fށ+RpӣH.V36z e,stFf|\>7vB0#,J%tB>2 w!ކM Z00!o5z/@=ۡk"bGN<3-ap("C;pʀǽF]L9 Ѽpi\?e_0+䰖c$2 $G~Y?zBPXJЗIG^r|K<WwAX{nJ4{4KL-is hd1-#xl/]$ɮ&'Áe.T4tki/}_XT |Z=|8,ڪݤ.l(m#lsGU $I[UѧErX6t! 7 י`6y[co,z0$ i Em.Tf Ʌ,;K«-:NAMa)\;Lk׳ OT.!o/Ҧ=@הsS3>$E4s$[# 뎜.+Q gm^/'?Wՠ nD.$Z~ke3n K;"αf i6fH|CQc˔vi}x?"c2 iq}^3'lӅ qJ%5hk3[C̉?'s9Ar!`4|9M@W52rKswoܕ>/nztsiBjӘ\2 ~X+[| %r-NMAisRd2EQwj?z\gʱ}57FVc1^QY=`lVftÞl *-o; u鐟).^T_R&w Ը$\8q^H:KMy3tDr KA6Л^Pfgf@qlUdL[`ڶe_O:(TRaGrጒVˑ.͍`uq$[Le3_gD ѿ-f"9n,#"tz2wQ; *iWc0G'@ mއ6#^ьdX%da4~ft-o?tu1+7\XaJ=[1הZt`Ovw/|"8]?_yw?W{=eWZx(cJCJӮB$%G[NQeNb4EP<5ގ=y^z 7("YL^TD$b#`r &%k>Bĸq ncGEJ,/SKn.l\n^$$dz&H<8z#& KMDHa|d bD;!DznHY-⸅!Xm 鄷 yʹ.CF{X#즾ε_6ߦHbffiӰ,L9֡SNy"_vU l$)A;$hҡGykj$R\d^ƦI6/ux:'/Z3"9_`֨vU3Vod/DQ1Z#?u?ہ NW@(~ٓp U͏#KiN0Ep>+jL^t|.`YIeϯCiݖ9ai KnLb]Ĵnfb+|둫ˌ3/ S@w/6,a&M'A-9w*΂n=͢9v%TIhhD0;#%2JTJ7Iei7ig+Q5@dI &=,ç(u)Ņ QYF^&>X逢dY!\Բ?(Xx,9^:Hb~ )+n4v[ K73N6U2~ E5o],^8"h %"@o&#hN߱6%lET^?'=~neA֮`D=)nq fj?Ql-n5եu3N^r#NVN$F}OHvI?I$З2BO2ؒVBfx0[n{"]w}77Wc_}?;}l"(cEyjbYbj]M 3*[ڝ+])P2v"2y뚓i${붞&'Ijԙǃ xܬ߹nR#y2ƭ$? G}Af1z>%p/-υ>Ad ;Lvj+q^ 5,o5"׌e(b'J'_\WC'rT l3`lМtלpn `~HE׭%0(6r1p9d!^x I #kޮ2S~C}V.7 ńѥlfiMTsNqȃiͻ6Ȍ/bF:Wdu_7if$;K`Ff\]TcXpWyxP2u{ԛb(̖d AM 38lj|VnKAxYZ$.KڳA^)5>["8 7kRV8oZ׻wuH? 9fZ,FИmqdJKuГ\ݻ Eݮ)/6 PȲN'?[ql;&{R'3E>Uĝ2ĩDʗ&TW2;p>w5:y!.|1܂,fjWXK`n+)03lÀy># )pz8g!z P.Qk94^l{)%)Xbu .*b?a,/ǔ]PsZF=ӿZcRq^<9 p,RLN.eD8!-QowBȹA7-gMQ$_Nq>t)}Ӕ'ju?R(Eb3x:={Ey-HKm[e/&6Z9%o@tbhoCw^|~WԻ?߯>}OJDi+࢔<5 K7SۃVPC5-K[}3t8Z5FYBtm̌&3lmL hߪ/EsN&&rǪe-r`;"ide?ӟ{ zFl]%=='vfٲ[Ldstx3f挤(y": Ls.MV-Wm)fb"3[+GT o-:lL)dėnPLk& K I`<+6~wA #4-Q.6K3K`|Ꞛ9gacɇӰ[E(km" 4|זi`4+´`<0<ar OXS*jscGnEGGF /-z_ا:25z>rU,:vJzdquqL7:;jz&ƧFEמ)/+aY!*p{gsȳVJvcw}sfޥy~e404[D\/uF4|wx-Vƻ.Arq 7R[^RѝۜݞF[fA=mkiC-ҏF}Oq98]lɃ({abXYLϖ ];ΥK6`]/Di Diyg2@:LfǶa_.0/=CKϺ`y/JBߚ~w7wG_ɟǯozW-'/گE͏RVؼ.}'0b]/Ori--6s͗&7FbEĻ  =NT5V8s`%٭DPՍX(z4R|bdM[ sFi϶64~Iy_ ɚ]׸hmZ@V3qXk"5.+^~ͤgn>V(z@\"D8η7x ,!59 K`׋oc0[nXߞ S5]5_>3?To]+$yz?xShWD~ mK_d`~-IՂF5 gQ-mCޟVfJF{Owhlp6`@fޗi_e=o jׅꞳSPmn,)W /3)AF]??'t'1d/6\{2sruJ;2C[LYfG:+S߱Q!:itr_J|F͵RgwvbpM%F895G<',FTM&SKnx QޓӵsbHATM`ASut2Ph@M}k 81ؾ4ԅk G&93((V "qGTg=;̭(.#^SDN:V,] g3*?ڱk&-3~>nkX1;K=QrT[oD[8JOh݆]T[~BUkAXIvKʨkTZR4͎4 Jq>R(Ż,j&͒6ʤMOsXSJ!L{=AOHp(_~ªFlyLYqf6[&zI;]cuXJ%*KqwKj!:uqtMЛYIS{<\/a8f{UctӑӜV%O!3!4UwĠ5g-T165VkV`4xw_6nVrj&RqPqD+{.ZBS3_fb+1jU1ꌨ_l xk$87 &KEjǤLcB~S  s(߁*m(D'*{Ɩev ;sG(r%ˑY7[Q;#E|V MH,ϣ^R 6q<|6Sj|?-N -#L Ye[QE!$dtd"I'sI\eHNNDӈ\0jnRmmDpkdqٝTm*>Dq YCKv `7 "+nӍr /W[=ʼR28-tY>;8g>u/-0~1.B]/f򪲛c&$/nV>Cu_h{t:AG欢RT,8qpktPѧNLlytckvd5LԆC_TC9}~I% }np@Tc L Bި{[GSpҰ* Q3#eF-ς&Q\]8-ُ 0:0;H¥r؎A͖);qjJ֭Z]cGɟ>MW~ӳO7˿?'>wE}g_nW7WQ-lnzK̚E\ڑy A!iNZF"o-kmBvF{FSM3 Q(~qݰ XQw[봙p揨N4NҊa{%,jJyCEF\/o+!#(阍V">m^duXvD3!GPSY5{֎m%DNz'kK(RufU ]$H8]%]p hjiwoMqY!n L"FL{8O(EL/HXldr0bRT-p+%Ţط?zl ӻK6yi<&YN2`cLf!` C(zp𢌨w8I{aqdwh`lVtbip" x\8;,"EL'ru{(Ctd ^ĦH']L{HIlC}գ˯)pf/ܜ񰉣-Azw>׿}|7~ͷ}Ǽ{GΟ_^|O?Hr'32_g}v< M9yOy6E~MDvYmnfUo |B}Aw{g 7veIǃGץCMd"w!<=wP@B4G uP׋yd[)K_HB&:\.{Z%B,,>VCYؼ0J"3|2AYXID](9ɩ6#}/ b‚O;Y{|򤿐 M!zjw3זPJҰ]Q3,Nj`a")XL^fa8"{& 5Mh}ŸJ&ⷧ1 4zHٙ}rB rNae K)')|9؞eߘ946RMpCDI Dte DJ4c?9h -2+24`$?M} -=%pߒ'f Z X*d\ f[f#${KIu[1Hy9IN{% @#\2n<bv~Y/ " d8ʄKRI+,)M%PTI'.7bV淵]]c17zan' gpȞiG zp2\;m D~~w 45-Ow,1KR؞E8MP?Bgr ! fSԴD}QRFM5/i$enٞ,) `2'BA=&E+zk0\6ޒ-"{m JXO'VߕyK8 qfLjn߻Y{Y"?o@~Gpػ.IBLϒ2|zЂG-PR cF%:LW?hgFiuM[w$ ,~7 i*9m5T^'a?t|-x;. (wQ!H/->c׾^ﱻ׿'7~߾Eoo_~J{,ԬSQKڲ//iZfBnWٳcZɎ3$c'srکrُKe3toPۉ nMCB${> Bml7Vw$suWT`db{mZ>qfӎw7K(Ԑ1b3XIYiͼPسN9f^5]*{df>nȑr@1IH0 zA{ KYs6 6}"b_OY@*0@6? O؃Δ,^p3$ʭ5VGfjSyQ JNB%iiA܂8 kNΔ$bh _A 4ǖH,7s% -y4+74BKN%_+E [_?rG]OMneF®>h/ QSHvhm5y&G;j\B}YRy)y8FWV0YөQ/Z#P[e=&:ybẢV8q4crԠBH隳H[yi!*n1jmt6P\(2)e9c7Uө&H'2U$n0л[5kRGgǜ39hHW?_uJύd yKcy@ur]\ly7 %o2…5 w?O#)=-656h\b#E1˺d7c@Fh#GB:ua<_ax͉žKnAxp, 2wL:\KfhTK).Af|ףn(-^WYCʞ;H 4IjYC#cٙMgw><*R;!0Hu,mYlrEn&FLSf8oV%ޘ:HlA7!cJ'kMYmQWrf$I*>o{{|O?{7GqߨZ{{Y(?VtfLoH?Kq3,ۡLPBaU=wlJ>ۭq-PAj@qЇ7:nZޥA l_GԞ=}Å?ocQH -1澇 A ڙbFMeJT~IXayo6݃DB&LN#q1XYґehYԻy߅25(]`jڝED5?t;K9uS }_P7}WP~7xefA+}I) 0Q.7 E7ZN^U;wHd0!{ vӞz#LDT'n،H#)=:`XζAH}CNaf`?!ARA6[ҵwB姲}F?IC)` xKgxFh+c!_S |1JصJ\ZcE8`:R?l$]iw}ֿC>7˿> ه}/_g8WŀȊYeҖUe1 #Ntm .0P <|""7ș[&P 3د2*uPDr@*UЃrjn),#qᕡ `}~\k+A8 g_`KhR"mr~N7.j~}7mL:|wH[$VNĆdp3;$EiŁD kH,tR0z^Fd[p)2QO1%nӂ섩®M e$y0U킠*~J|G1lFPZ{a4iڪ1~幡s w&ƃ?Y O ć[UtqmF vdP 3o*@cR^FXqS$欁t9, S<ϓћGtlX.4t @1Q_䙦1uc [&#wW$/ecG37q$ ,y+I5 5{1xo0s 0xv^$K4Ax! iPX0Lؙ5pkccKP;/flHwWG^m[H3o"?\@,I}5aF[͇ F")nL.Z2IPKmyKA/;Ԥw:>N rYldre3jaWq3Z! 鬏<,!)M0eپvč'8eP?*K@Ad-^r<~ Ӷ,1.Nn.6G~;eM0㦹 %SބƗef6v0+Z  0>vE_O>k )N!+-&&7榓ݷ4ʽ3Kf. 0+1+B ńڬb v+D2|࠳:DHd+ [=JxEE(!]B-!q>+9óةМ! v-< mԬ[ &IV0C<|z\ Vl'ɛ#eo)zNAXK:ySS4ZPRʕɚoOv zf:VyCbnœrҞ߀eeYO&v^WxЕ 6}+FrO@ !7NT:DjNq >Aa_ͣrOjeIu~NYu QZz[ ykX@oL6/FyRtr%-%pTvCt6֧F#3[%~~x_~ `E3 #ޅ%nL0?RP:|A'ݐΔg& OU#[7quDBGUϰ8k`[Rh>8'eHoHx80m(kӨh'r͛yvap1G׍;3<5U+y|K߫vE౓@˵:L1PO/g68W;Ls> 5TWf8Äa`UJxeeru8_!,BWieʒR} fln7gx/ xdi|X ,Iغ5X (2` X#4soqq̫z!CyMO*&!|JA5t)5 Gꔧ`Cz+>ܥӬňܭ#iє&94BOa >'>_ǺY~ܿy_>SX2i !YYR/R@i합<--5z5LFV6.[79JzM7uC<}UF'KOo*\A; ~v>&qXc6U3"P+;>`1cПXε j4e}]dAJ=zt^Ģ67~@c5\r1[Ki4q6, o~2 N{#f:Ad'_T[k;qwhdUIo@lLn&LO6Gw@gY.du0ᴓY_ ;lɣ$GkԵ"pp~+HgwXDRXcVVI{8s.bp~3gM&|Ζ{v?TJMIu=q v31Zإ?y't* 7d w|5e}PSE C"Ko:O\`^I,dS1et!Ii9Y\qh2oK]9g9krSۆ~;LWۉCX4$m /5Gߑs 0:Gr !|q.HV1PO zdn=^-`wth03ˌB,*7Q(`jP~o)J!lRN^46h0:Mh-ZP,:!= &&Y~i %-7C?BMQ?GQ~^<͉RHnMCltG2c&sc94:.J4ʲq8ʐ5$P2~$ps7%[O9p;u nœ#b}ZIVim'(84װHD#jM0HӇo @b?Ϻ??W?*˓C9:(r)L i+Uk(Y!8K3Y¤*Шz49SuDcf;}un z0cGUa.oi FX &{锎v|ĸ(ʠUb "D6o/ \Ya}޵8 tP EQ2w=IU3h=v |qz]y]| ;<]*m7F$pl;3b_2nD@7+HehbE-ܭ1I-C'z51ZvĐ$ʃ}%no~w^٘Ǵ&)8(L7*Zw0T*C:J@Q깠 `J~/Or yww&tĵԟ>'Ώ$ ( S^ lƖ[>5S'k"M4VsNwm-Hպ:/,.)t%V-EHqR4T^/D@/WZ>`Votf"_]) \jyS#[gkLDRbwN5CgN9])U`_oe/Z/Yo])k"4֏(<~!SMK"T^Dƒ_*$ґfdぐĖ}LSrN2&Gc^s);6'd'V*GL6F3N)]^ %z4\wy9MC[f'}(%w djP.^X "!;ltpҍ˙P86t^5+a_z: aLs70>&AoexH7@Vj̗)MVUjډI%e7z~?'~?/}٧)__\LO+LL锵PlU/~enZˋ9fqB:hc)yj^Wh4mӥ<}D#ٙRlYj_7h8/ZP,k]?.kn%)*yKBI'#oAkD^|ӑαqȐaVL3E-D@P7r<~dt~s/ALZ!c6< BC,M<?Crx`/˸t!g>(spMZCU&%O=sWRoNBs4uh3, I k7&ͩm0:=;5rAMĬbJK/쉌=bRcӚ47ڟ g, i;4Q2JٜMFF5|hDB(z/zBl8Aq0%iqlڂʔcc8]f'#nT y>(AE@IDAT=;,i73$,Csw0gf}kq0ٶƹ_zT;c^^>3<dqmKA5iycpӤo bL- f\K|\hG'EPO)vZ2$%[`Q*7",+aکg9=b|o# i!r4q''k޹H "&h*~p*7y,9"c90f!n\de6j j8b/7Ӳ$ .0\l ]Ia !lZ\ng!&킔KWiH46 R H\~܁ w}*P9<,&M^{'/3%#.OaZZAY26!X.|t0Q)N7(Ҍsƾn!2d <o@e`SHbJ:iexWGc) 45 X7o^ohaG2BP.8xU݇2Xb?USp8_{GkwfQˈ,GǑ eDIO^&#oDa,]eB^ >1f&rmxt?@TL,^S6qjz?(=݈5eZ\BX`^rC0 u2qN|3l^\ ޿hމ;\qF=QV愷esԓ`m^YɎ8CL=F@. MlpȓDh,v9YdŸx onYIA^c/(!y`yd]+2qMFʍ,\4]coskb<<ښr5f*UIƥ`T)t'/;v#ChZ79k69[*Fm 8.Fg۲6dp{,rLezMsX u#{%ityxnL}^ f@^?璖$HUn)PJL؄7xe\34R336qܲF/]C OY2q,׮^_?o~~=[wWY_}9}7'^}_a@h #i] ǻebס~^ sY\z2ch55&?g\!Mb>u>fD;ƪBk}`ǡCsUV6c{ \GfRK?V_͋FsH1!?7С tCv2R,bӱvSr$]80H^;xsCMnNY"qGئt*O=2B 1Os~bؐ`Gf\h/>W\oN<F384dGuqL4~3Oo֥ʮI`15ESnepx΁P.{3Wj?|o۾Wo_?_?~Ǿ/ݿi𚻂DZK|rU$ݼɛU%X8jCq+KT$G.EH:N:vp$^JaOBU]~C<Ha HF4O4mN:)tp smm])|,sFv&:MP"#枳]>mJm]b .uʌր,Mj&`I|y 4'.KcB@.>÷IEIx&zLQ$ zxDG۲kA8`c%&^Y,m|c@&536upGbH.R{$=K"=c?@0;Gn-?CzHkU_0b}QUU=>V7Wu\QR9œ%^l@Abh!$гL.f&Ǹ*ƠL4DDfah[ Ŧ2 J;ΰauO6zP˶,X^l]^5m [VɅǕhwjysmIH$%D9zf=',V?L@Źn7%d] ?uNy+: x_#g'<Τ^]sEG$eilH8tau&yGe6&WS«R#4/39d><VtP83.Oy־ftni,LywTݘG(N u- JĶ$G+8e.F`ȇqFhy=1\p]ɕlliJ=g!)a:ԙTA0|S aⰉUI^%0EMOW rְ 95Vqq[OY/se)"'Q?ԡ7"/=/?o{߻|_S}U)3a\rkK+M&y/eajI؄\bcZņ=Jf ̵0 l'p:dl`jgv)b CqՎt,%0@כ\~W4tuQDv Ro2FDe0h=)0ңjms'F;KTq8m,׸%A)ߵkyia&.x8hs(c4aބ-΄䍼!  gu-feokNh8?s؏0FvAKm58wڵW8D21"6~l/oM3@$-q6ҧxg7ZF#?`7J;zIn`+@iž}f1ܨv. )O}fg6SC.ziJmv\n2FQ V}pd Thl7l] 7KJd < Rg%$O^}T? p;uVJʠ ҡ-Jͤ 7-7{y+ˑsiiƟ,yⲨ)m!S|W>riʩ}-FM51a;p>%n:s\?z{xPmC~PM͵aM߄G;|fJC-Ǽ+2*{H16Ծ20?'0݄,n fPNQIfO%9U(Bi"i楒j'1Oy<,@& BC%۽i ݺM}RZQfZwN"ܬU6`[Bά\:fܚ3f^V_c8Z,1xe9FǍF{bC[fIeQr3꜏z*6`[VȝL.1*5/{|ru\\HIRDZmd2$̠) USM`e3<ˆI8͓7sgdCu½߻ЄcC^<?;5xޭI k&j)fPr挴Q?;WX.W+ vo2F.oNAfTD^CK5F3CY@_LPe Ii$_dDw?Tj)LSDxnu[O[q٦q•#YAW[W 0{(lDAp͛NAhu==c!ݩNusvp(% sݥƨq@l#a ֋gt*״A"nC i.nJLiK89S",kgA`f< 1dӢt^Đ Hμ^l/_ OxO~=M_}_s !2^jA6KR'5.Y2b.o#XNqx+~.6cXXM|:n[}i;Uk2tF>jlUbt4r,K[uVP\vIs' RaKo~xgp5UMc",X7:6lD3](㘗[YȾE nbPj4-:lGí!_EfBc?kJje|@AL jLj@a2όmȭBO4rh\HӢ(!s;vsa DbAOm6E6-w&ܝH':/>OEnJobFRx015?J"pn'}3:yC!r_,9dˠQigf>2oP`93ZJw63}7ye%:}Y`PC!6?bgtQy  h6ogv9ft)? cQ(sFi}Ϭ%گ܏(ǞJ|߯7~A~{ 14MfjIyP).%"ee$73,B\Ӓ3 0;VeH7"p8&R~1M_qpQp"8壩B>w`4Y9y-R>DhSDwJůR cct jD܊hgw BڙCI>Җx9ETKyѦ/)T=' hYk1&dTlZ?|yo& Nk(z5# ;lO|TmCq)w^`,$lbLa?K>t("ږgg̶>11X"ZN\Dy,U*1e&h;L 4t,ٖt9Z Kl,õ(rp e3sQo$C|x"ł1)$}WEz20Տ-#`)heJF(]FƧL׾L=Kc4Gh,&On2k3g*9-/{1Z\)2mڡr~(|5ʟZf!?Yy(LCy8- 0olbyL׾Kn4hueqœVNٝ3bWKQ<#l8 Qn` f˜7&ˆDF mIvMB `h.+NO?\L> jfcO=fG }wnMP?pvhVcS6y\Xq6D6ߩ-CG¹t@gQ8s 22L_('T6YtaPh`,w=dC.|Nc6_\TjSyOM 2vWI3lggH^tTN(,y5n ҖtO]9]Y^!:h3,mIQW>'H-bW _<7 .Gq9HxX|Pg >ԋ~^ϪNcI"&|NF|_c(tk$4]IJ <6TY\g_7Ӧ`_Or֖A:$0 ߍr䯠݈+3𙽐u{sZi2c }ĺKA\̐ o,FS<^8cp16oZ!º䙈=R FXsfy2>5>]QUS]=yrd̀p͈^FDx_}x( ᖶ¼| GzqrE"=hV imԬƭAl0 6E|Y/UJ[st/r6ÔSKd\X4(k˄99e*O ltgb|"wr*s% s?kpY%"[ufLdfMj|elC,uMy5zC"/h⛃hsntj i>FCs܅vR7>"afCd3.K_?sp!$fQi ^ dvQe>9a\//8iE(nNl+t/@.BY,?iۄbZTMsp0RA~~ _>>k??~~holn/dIMZOhq(]G;aϊFR6P;_C1A9L&b8oS<\:Trn$k|d@ {7BVT]3\ee͢Z#jabW%c4[{F}#y[MKFfJ+ H]xK}YMFǰ,No 4e{¡ANJO)9PVӫ N&e? ,\6&age[X?Fn=HBP8 1& /]Cw~go>+{羾~7~'%=[,ұ4j}yj~6:3]A؋%$ sFKtԀY/$+!L&v`7n4+{SC HFZۻ7@|dvS3_F2H9T5=jC|-6[oH0ePw]RőH}qbf$OͿ_i:b]$j1+4MzةPMM2Ć6hr XF /*T~ݥHЪʳ#C,Ilk okNFZ= -O# z\~i꣼yH`cZ_&悰f'T̅`Nt!Fq bjb&'ġ2̝JK_8 |bPX˝ٲPu.*R[ m3@ů 4c36(.1tgc`Ap@a4$U/ ,Q>>b[k"d&?}/~~t_w7I~w!bLm+6mMccK_q>n?@"PAY.ةGYx- 'Рtjnf=c#1Rk՛)~I~F֜se!%Ra,[ .GYBz`Cp IQCsBaS&Wivg6LX%'<#:Zېzǎ/m&ڽXҬ!:,sC@bcxTq;+ukHx<#*Z_W~Nb>M\_WqEkyXǥ*c!(FVeP1wǒ+CYβa?c\tH⦋m#f$iOʃZ@fyHި:A|GI 9cJ>;e2LԘ¿'}t"ݬqއ)Բ%-6~,^UDv)K.sZ|Cv?KkvGQ:Ig%0ohFo΀ tFڤ6%4?&4/Wfr*igT]^xHRNy |Z `cScو_s1lL%σ1Ϳ0aoʔEҳa2θ1_( Noيklr8 qЫmTl4U%]~Qojp4J~y%-"42 8h>@l0Yq9Mץao62 YB6ջyn@%,;+ǎ)N0u&}oa剰xID޶*cnd=E %FxHm+,%luj3)5TYf~ǂSVdOu]L S) ZdgQݯy9=,n쎿4YojaK%f!+`TzLjF hƣt9b\Ruu=t߾)'ǞJYя~O?ӣSOєܿC?\jϺXJ16+&-Ĥ5dFؚ[UUDA0v fX2 8nX7Q7=x~LX:QVKG(ُ% na+ ~_TݾYײ|wJ2@]iENm '߬2Xd2e|,r>"|#?j4w:(nL []Yqv89FV\)֭V>O-*S\/JF~$Id۳SS.i1o%&mQ]iIOrxtBz7,G|IFb>pJAir1!,BiZ2-)TtWEf翴4`CtwxQTo~,1j} !ժ7\-̮ՋPURKv<Mjw~3g7JFghR63=^.!<8jc}n+&3/D.䌬ed5&BB=F:b 3]p[ݞ|L%jFF4gBI*C<:ļ F:옲qVR['cOi~=QCm:rMEj!Yew{"(uUf/?^C&b%C@) /=wٴSe555%uZֆZpPD8J&O&jq\6k o}~)[ A-s#ͬRx{i.豄M iJ b4sqyR}CќAA?E,IԅC)pM@`^7yN%i3ȒHaZ Ǥ=Owo[-s}[}}'G.c2Y-DYFs2S`4!DdjKlQ5%3*j3e |@7>qwe>y=?TftrL|$ѭ< Hwo*6h#mLetsMGPDw;BLw˧^Ú.[B~w1tdk~9|⃀۬o^-"<~}='[##`7ʋ Cʑ.R]7n Ȕ]kc켠J'SnCEV#·԰E$aYe hp8F~9t̑I ĿҠݷbEi0#JS`3%7 a=`q"PQI`11S@5͑! g3{TW-< EoI>k!W`"uH33 6JpmL,tmM * kݓq @Hm,/wܺKQ,aCVp+?<7=aq )v1&ry1_Ԭ/( (_}߼Y_?@2ɿЯ~G?~{?ݻo0ڌ+RɈϾն9ZR7)9en[>M2G5QG-l)[! Xntݜ6<¤.'.tL7r36W$:uXs\-:v5bR-ECFVrr[D=UjbI4V uKb L40ۜF>/>% o7,fiK/6~.ty^32p^$HŲyNd^LT(*^C{y.҂:.%vש6UG;(S`IM}=9,6ştϼu$[JG3]bRYqh%NQhMܧR}L_KFi1O:N3(G_\>J5$Rʌ^5뚷dL{e!k&19aN$pN|F,E,;m_((|p4r) dm3@^zK6-*L']U1Fkgmݡ4ۡ>|=-`&KmHDe!DJY@]>e9{Ӹ̄x GFb tmT~U}*6 y̢^RP< uQjl?׿Q=ߞ٣۟_w"]';MjM,͵ +FeZ}]ڬ\otّ֘w:4Co >xcOhx]tL!Dh<544Ӻj ϟ!{.og3938n%\#Vfzۅr |~ 8RGaQQZ ۩y^ѝә̕SRw{1C"Ιoy8k䊦LsX( i}ձ$oL&5;INKҗgsc>S zVQi)fG:I <ȯ,𦛢i dɁqZ lW}]5 h^LO:9>r_V ajK+Ƿc!Ɲ^wɻuH.^Ts)k8{ _R>4M3ᛎ8 g) <>fͶK%Ju5z8bCUAsv1.Wxnt5=-}/kL&:$Ns{pmk-MQ٤[Ea· gOpI=mvV1}k,х[ЍmnkBcJ17ԁ>O9b8u 5κ+l`]7P>\ N8)k|(NIv~ܟhӞjɟɿA!3Qr,ʸyaes۠|)x8͢ ?H2{i+-= @:PUP*[yn23fL93gۥ'z3ckoRGcIJۿst Ttayq:D0>}AI zXx~ò<|]^.YoA W,aNue0j/Y˹0תeodK:{ [LWU萇8N;W]P9V׬3m>oI;>Jm:'xI<ѻh3Eoׯ7_4dAi*Y@ԏ>jvu\go/a/]qhsF=3ERa-eU{M~4393}Et&ڹ_>Nt@bt)Y>!)kdC=JFzSڊ6Yf8R[+Ȱ.:M!w_gp֙Grr2r©:]n"DHxr= o?Y sT\bp|1HÃ)g+恂m*dΖx&\2%RX!6`DԺ?ƣTZAS=qtZ:!Q@ukJzUo{}Ij+mx.lu1F(#7{\"E7PEWffpi鍦 _t&_XFu$I>bp8 t|mi<ѣ0~HoGvO3'w[Ye- ~Vh-tvEq>,RrpgSӸ8o|s/Mia#Rӷ6~{NJLm-7#AM.d~b9zpW1>|g")iexl˺^#e{.#}4ûJ}F|0~n 4IpNtZj})z8'/C{d|'I5KС-in@pT}Zs)AWJ'sQXWMC vFRƟ9N9g)H/?uGԌo>'Pnaj7#m[ :1ggZEgdoQ%0]Kp8=_"A-7C-'$)Tsoɑե&19c̄9mq&if.턇 T8Ֆ'Y{C{z뫽wfuE}2H-Peia|΂"f#^-1e@eeRt‘C⒙AĤ:#SBȭE/|f7Լ&%}B؅?"^AGc}Cأa?_ 9Afj[(p~<~Yu/ArokECi<IcZ`GڨD"ZA^\9︽`($ԨG F6 8 ?$rO0QKAswiK!fBvrE;U’ȊZkH{k~SG.@/,1*IȎ_O< ; .0󑤞=`}Z^)Ӹj)8[EGDt)|-s ٮ1)ŵZ% -Vl2S/Tld[u_ x>RȂlA=X `^ˎKRկB8bF̼hXk$~u=Bͪdf.Nkr77;W*dh<ۓ/8RK p~?{(H8u` dpLGP&a{df /@vڼveiFS=6/Y$Ha4Pqen@ƾ.82y.+C윗r뎚l?{و5||VD@yGxDD4r KSiŤ^PjnOrHC68K\z'd>1ُb#/9 Xf5:f7aU",+W6 ^t^꩞ug4A.&d 0^rf gwa/2ոOHZ!&8]eGMmfX-W8ݘ;2hیfi!NAD[ i,(Q/z7sY/'>=<^ĿP1@Ky\ò[!aH Ric7ZefIe.jiר2YKiSyEk$/fdn5%aXX? ׾ r:H&#u?qlt3Ch3$a/GsSqnWqؿl dy sDMqI_k07</%QNC539IALxqy XOPt#JϬwQp$$6ڐ]fr^xۥ0җMh'A8S/^τٽ' 2MWM#Q_"R(Sμж2.*0ds&g]jl<` c~HeΒl_Yu`n^iqv29X4H DL}!.[R <:DD'Zi r*̍34<{}9ϘCˣ>f`+1h^rs},p֤xYpD o_O~w?8&g7o~ޯ :5>Fˈ 3C+>gLE>=`kO ,j-7&匪<Ϟ&Z۲Vc?7EpW-0KH1) xѰ7ԥ΍IŧU /Ub/G0aQw:,4,Z{53V}i4u|ܠi΀C{AUWFRɵ0OzR7]н j7[_ŕ%KK8sl L3$[xq'\7Ai>ƤDZwkuUjbt p8j؈Q)\ͳi4#jq8qd 76 @ӛNh-0:w^ dݎEFJFr5<߳E:ɂ:pέ$%dizŒx, _\pp2[|/kv\?vs>&>^īBN*%7ϐ=KdF&GXBEMf#6x&ן9@i$KӘOm͹} UKe#1A|)܄w=W&/ im)#/to;;j] Erdw$dߞ= ?os[S~ŭij^>y*Dk0qYڗ|cU✱?/)K~}sM3> VbINpܹN.\p`sL Lju42!4sUNhqO][dhys6x4JXN."Ai*-D g6U}"Bk@3pt2'1sG u!Hv0e7=a Nmg4-@*;Sv e/\ec'$u[ܱ ols J f\s4r%3E;TE֊|(#fOPd*p ,Cs~$/H<-:8[^0R "޵J~SDka'YA3qF_ ܁3(K4hx \@G-DuOzJ#c4/s XN7~)ךPX7X2unEibl/Bux@B$XfޒGJcgE|"a+ 'Ty.ZCX/GKvp!-)Ctd \6S.CKs[CO6<wn?~ݧ?cs_o&$m>M.G&HmG~%ҀDpj:ĥZ^isLWǗGGʆe逼o86XS!od;_PӾ3I,3(Ad¡%kf4 =P7#ON/7ooP#3e3J0p zW@e Q:1#庾LMXfpdn9NѴj^m;%JS$ldg,CNqg!M{ 7Tx83t4f,3Bw΢݈l3 ?sm$+'}"y60p Kf";uD,d/_RNGb`- :FWuBȘ K'8{$(8׵ CR^;h27¾ j(U61JL4! A! tKM̧,8;gw=I;E"|~ ~ AuHf@RWt^I;{D6P_6Eͱ1YSbݒ1s59 ?j7Eʐ]>G(j،mU*qY\ZF>hKT5^Y Ƶo_q"JNc $~ Y|C$DDJ:ۃ*s4Jjxq;YRv \nMǾ*T{ce>^r54[6D$FFΩnY 9gw" aU /WZzy=f=w7y$,cQ;( m氙rM] N;UCR cVaKаw)4w\r+ҫTa6:91UN?GGw|?П/?~W׏=7C^8/Sm%0?oRj'-K [ 3oȩ-5 SK2OIԹynG#nLL1aXfMى1N&C:W /=v~6-LZFxBfdN w2[\e#=Y@dA\@&a_5Y{OJhf~{cH܃IMQe^uHyEԢMD}lue۱Lz禑)ieIisB/\\5T$ZDju)?3ءILh $\6-Ћ(wg)RqrubgۓH[MMd|˷%:|SD:>Ӽ9Cܮnv-nk_lF &9/+<+&Qqo\qrgTapoU,jkQ^/DH'UGGtM:2S;uZ#dU][{^rϢF-/F15v]+ixXtQzA{-p6ҹʁgk4E^+L–=1EɃM!Dtn]8)mF\Y)H! çKEzoc{F)(zP̷,e,]!fxk ʖi:X" V1u7Җ4bU,&l܍W%\ N P?nhM݀h_=3׮(Cb,Hoɟˊ2O):Mm**c92ƔI&da|zNʤ vklG&ˆIǖW\#f]QR敂4{[ɎD BSMv9SDyʊ҅Zpgن+V eig?4L]:mu(hz+x蝥9Jc(m alZf#KE]Siu/wά'jҪgl(ʝH  d$GA[ଂXz.^T{nVMmp Dܬ/YF'x S`_\NFW`rDx"+Yւً.&-SO+FNu9nu*B{TgYU>z@J({żԥ;Nׄ[*Ljf9Bwi&Oh tFp;%(ٖDfiqry8 s>g?ˬ۾O{sq۟WMY3+ӏ|~gp6 yU .W$g$_99giø 3/3А4NUb*K>ms>;z^MƜkG}7t=ȳ:j|7YHM>fFNi6-Q#mwj7gW %V ' aiiAC 'ݼ|_vθcET@%䀌Htiv}1nk-.y]$gIL8WRk{Y}$e&PhŹX6#xbl &h5"~g 9M?( Vz"%PunԔOlT"$7 5bBM]`Gg+*|~Cps5+@V4d!,63{$G0CeU*zQx p3.E麼aa=f,=4&j ^: Am:ƨx ?XҩU8d\h^x Om/.EK줠wO%3X0!6|dWv2++v8Ӣ~(x\H\ 4070b> e1˸d:`Ѓ!R3Q;uLj,cBρK"W/Q8j%&RHc,n tjR2  #L0{-RR NBS[lu&-qkBQrn՚K69riPu>\{BF{V[$Sߙ D0KpD%L"{kg٩K_%ot5lzqᣄ$B]YmrmhZXh/ k)3=&:VcIȠcL aA\ګ4Nac;:ŕQ/n%k%L>?cef;=*)wAm'Xy񦭖E/[s|3wη,cYi;1bmXVG4/8Y# Mb:%mJ Z0 ʸ|j2^9\NЫ/<yUD#;?~۲[7?Ewf$KzE}ow|7Oi~ 0B*v5<Š 8HvٔC$Izj ۦCuEe^4:D M`PĻ"I܊uov<FsdgxIJ&]YILj݈Ym|gS=}b!?ɗnUfX,Nv3q)*P7WA,FH:ᚕY%4o/I2ץPvJ6~G6X|,.nݣ$GL?WeՅcJ34,}]kJR"1YCM+MxxC2v.k5Y_pjFƌPtPd|#thLJ^i@w7i=L>W fyCߛ/^4N&f,r7F+,j۽&\ĥ/Bu,%TR^ ?aލGVȦf%%}}gڲKf0~n\dD~Fc6C>R<3KTUR[4_0ym`Ԑbq=6T.IT YU? 2Ao)}k `OQ]Ek8͹Ǭ؜”,eiI餚X쮉r9/rj& PUFѮfr+2~ܖ8B#[jx5* ~Py,b!364oV1'c un}s+E. E0IC[*m f!j5_Zpﭖuڤ: C@.YVpb+Sp?I8J.C[}^\G kTڜ3 3@`f֭{[Ma X8aQG,V6{ttF [nVһm6V-`=CV 4nsLߒ \WU*Hs\Zn ;M?D'"0b?F|(-Mfˠe5'&`]ՀrX(<$CGE<<Ӂk@RGK?NR(7vm{n?nWeWw_mg=u{> WQvNa3̬)VIsqd !2C6+(EQBa+&#rS"e&&xoKgv#Zʏ܍oO1*')c3TU، Z'Z cm&ePWs5-y^W,{uX;U3xb~kM@B~鼎nq+  1-Bb`ʹA0MOz,&w2)?"b_Gt]مc m Рa4f 9uub56~ڈgT[\_E{8F #9':NK h\ƹ7 z|v:K]sd_ApRL^3[8PN2%AԜƮÛsvd) . ]ӫq5$'2Ccr٠;p㼩58 ~UV+2L̻|f[I9f6[E1x3ۂx>?1i[>Ni&_YT AV$">^/5Jpc4ܼHƹ7N߄K\Wk{tUK]Q|˓U\^ F["Vx/pBѨk@M)h&} pDpd7 x_^|?g d\ k7 ɹQ:~h,!W8#:.tovˁ]޷@.PAX*,Y^:.BԶЙ녔l~b.UK>FfqQI%cKeg5lΊ}gHXkcE>fxŋRnS 4`˔rDT+ V%6GlH Jq2YUJlU%F@o1\̷ V-bK~{a:W΋/$Y_yNW+ #+ 1BjeTe.es?_0{{ѿTşT$43?{j4b+˗P^ %4 t^1/¸1k VEXKŸfINRrqkv0!S͜܌ȇ-[E2!~rΫ;-h_""n(Zy%?Q o*o1@FN`: H a˅>wfJd, "nJdlj!jTi.8%fɘR=A;A5hq׉Y'N:!̑`7щ4P"D [=Ewl,WP+匎T'U,? 틯"nA/}ixGi]{"ײ5q<~˷ޕd~ym]fep:5ውS-:M#/QPY0l2X,c /=Ys!ad{KZ V!dJ3blnXnjԌj<S_ KX e/O&4#^L^Y'YxMĹp@c4Zcz[0,qS 彭_C˨'bm]JpL>iK;+AQ,[ 6{L[қ!L[2TTv+|yNeuJ_grSrqޅhR֒YΥt7Z^[k% q]az+pW ֦؁ UJt%W>JiT߹JL#^#Ch3$<2t{SdGvLVĦʦF9V@QP|XT"6'JNk);IO=?տ?Lw@O/&Vg\c(Fyi^y*D Y2yͤu6xDڬ-gAܸ m?.7d07Kx\V$&6;U*%2MӒ4;B,Y6#FT8lh {kd 'Uw'XBfKᄵzi(eQX0zQ{R14H"N6 Bd(6nv1I)сA+\vv?lmpejcMfFnnѭlܟ0( .v …M8ο|=otS,2*YdHdSjQ$7J9*bqUph ǨEpC"5eqerq&  ̵O,Հ=b\CBL>Fv` YifnЇ7MLMx C4$t/dt_F%6ks pުN-4wNkm-I>^/V6K7%W@Wg1g$/^^@BP̔d93m^ޒjvM]oES-CΉcDMEPU1؉I0ID8C'אj\ݮ4*F0+n-TWC5uK2Z$hziEݣ0rNdF(eX1 !FڧL2pR8O.nrtVlfa^;)+  j;k`6rOIkqzG_%hsd`N[6Y9n͒_sz'f/8{nb~kҬj{)Jg~jrmV(2Y,$AKmEiE{EU5"r`W'i(yЫЄ gvˎGR(o 9؂mgKp"Ӝr6KT1;8J :b8d%AG䝱TpUM]sY cp)_M_5:6h"hĴCW\Qa¹4|;a M(.޲'HK]o?JάYlLwݻ YLkHVai4|I\YVlgAThE/Ȫê:«d#)UD'pS_s]̌Q-2{c9ၠ&I~PƐm-U`]R3՘@C`#96JŤcЩpOE5 ͙/T &[TgdO\)zn_2nSdžYn:EݽL {4,E>%! UAk<KHY@K} `uȜw>T̳\vBY5ˊôAϙJ+ 7lHm5Qn)6c<;Ie߀(وu$ Sx]6ˏ`vڡ*˾LҤXWE,. rp5#&/XS6@to;fH}16ܜГ.2V@`FӦ"싵(;!8Dm#am{3Ulfg/αO?=@*ԕ޶w8K{z[V}<'㲺)9c}{OS"2č9ªvyEmiHe~d3򕬐q_CeF)P[I\f[i̾e9>eM){i֎ V%əWZO[y6ylkAn^! P׬eB<6GsF* B,޷k@6 ftj$AdzwbRsF5{e.%Q :ćʤ27+uo:F6|>:ae'"e l fnnUdsg5eDeè?=g=UrwKm(:8ԅMdHUvAga,3C s&I7Eİ1|H#@`2(Ls""K`)zq8kNe:Q4z[4=q-*td\ {ӹap9RΛžt J(JP&+X2z,T$\idWC1& 7^FC>*Q' 2U-_k$-4[]O8Lp(w:ȃ5vH419rUSk u 5/ "vYi&OM UoFmƭ)+%j2ÜEv"I6>Li ;!Ȅb*߸=[V[ٳX,FUo .1vd:d.[)7ZlJcay bWXW[(d|=lg4*qs56~Uw$^y^&ɗJRp?`yl|,#܊p9'Kֹr-ql7X3  .q8@5&JLDC,sh\(o 9YW_8|'V"w<IJK c.zN<ҬS+7g#Y*X.˪n@z v p#(g2ѿhٻ#qXJ(&F0 ZL7& GXLz @.J>Hb2_ Q &U?,PX)3x#x7gᚶ[xHb˵6:Kbe6F:#lo};`,fp&ICoqߞQ3tf*&Wő>F#Z"i˧hԫ$VjP[7ٓ g34tRw/S7Òʧ@< =˙ x&];锩/,zT4@!+R ;X̉Wu.m*-Wy8Dk{I ̋(fY\Ea~1SG[(860Ezki*"F¿B3zH%n_DZOD{U e )HrH]A{=WLU?-z,г!Pc]f!эɻ1qSI~{5uk[NW@Jܳ!G-0i^bdt\Ǧy eA?[ZzlΤ $ .ǐç $yCtD@P~{U#8YCF,=~''$>/A/@Z_z$Q^pVU"o9(s;4c\֖ɍh$ؿ@g&tC`Y@RϒEtU ~Ad`~2%_k9^-L{蠷;VM]n ϛggihf]{|(-Kǿ8J5+RZKø{#% oL yt Mye곰i0&Ur{"f|+.JYfvs *ÿ8H.w#T:pHd}\$n]9MlC"*!(%n]vg׹M`#91ae9ѷz UD1Rw3AFŰOبL`} rV͊)\veqJYCV ~ƸqR FJ٧y pWB]9ƗtJ|^I{HT}%&Jff;FyvccwB/wVų]ȻS8Sǐom5ш۴$s  ?} 7k.j/eeUnI:K7re'*hx|^ $jbȡnp{!OqƯS0vݚCem:(ӵE2 ܁.8mJK3'(jVz AV#¾a૟d5Gٱ[A?V@8m߾=PXY̵$bͥR>>JN٤~"]Md?f&(bsx_2B>6A/ !9lҬXd{JKT'J8lc{!.UOo\eoƉq6`C5&i Jլ2&ftڒ(WSDEUӦ`ΈR>OIω -%YPFtEƊlxg!cЖjaTN.ʿUoeс7sI _ "tvK3ٵێMO[ -Gt%vpO,a8tf9.cWDðǿLF%Be7k4tʹxge8yJ 9M< F*c]OkD?yyuSAnk5e*NW:ͷ$2`1$Zlt] ܅2~J n@oތ 1K"`=v /;*v%!q\.JE3Orwehi2Sqrex HLWD;gjQv\(1W 6^YH 5ͅ2̓-LxdC HZuD/ cl71 >X`Y!fsP1۔WAb<BkLlY=RB˧c~̯"<WD V_Ds?0R}0Q:onJkforg O(FIoX(AYgxyR c՚,u-[ȧ$o7d&Qȏ(M>E`2W6 ͬGe"'?|eߠ({~xp37E~ :<7׉;H3yi/bY &z<6ghPt6x vWxzod@XM*휖v$ު$LʁT5/˔I0MlFˢKk6Aظ"0-&yGy pnN311>XJէn/zU|_V#6v1K]4lO%66C>deWftSlǩ_5:9s *s zQFpkbQzIp"vMͶ$[4Ldj#HS%Aۭx6*?/JPm+ǎďhoil$h1F%ROgLdang $66 pΣ7{( }dZTyDQK$g 0h&@-8!ik2G/URgsƙǔ9 &x2_A#RQw/x2m5˱k@>{A$Q-CΣ5\ fҙ&Nx6فqڀYbg֮j]`X́a:Yxoen72nN 被mwd"f~ްXNǹ=:joѯMq*7B-iZ2XVo1Y ӕ}!CF|+U7vTqn<">|sWաζ.LCnn)ƞ0fK2*= 'UROd{4N(L":r\*+0^|u"Mّ!u5X=A8ëXuKZVNvlH:5e@ɇnz5۞;1&lB?Ixc~d9V# LY賦ح:C5 >`rRb2fLZjqHxM<՜dπiRzP/CX&py72 %0x/rD1mj 7AiR؊3,|& L.AiRS.u,FJ83g@mWT9|%'mS-u>c"^hgxX;-\c឵xa6{4hNJnjJ`)$;}(y5}Uj3BT6KgHMMNQ0Ln,6i)vPd̫EVCB ȝl鰸R:lxR&P<`aPࡾf\@y=ZYg84At!blaز3$;[!C)(~&#U]lLjU]r1#/D?n)8%hE({0b,z9@SY-NIZPa8Rl7R=ZC`ˮÍ+ K*xLMJCteIQ{3$ew; d9q&DN?j.Z28z-= e}o:@PӘ(C+{;d|<Cĺ:ژߣlvNH4-8 8׳%;k)/?{&ejqL&,fےL63a:5ix_`3=uN5<2꺧ti*\nMkw42 ۍ74ۍzbA{?V)gLmS;TY/"y.sGyUTŊwb5]D!4Ahv@ /ӯAYO4sH *uM穉YNJï P¹FP'Qm.Auat*!|z)d9_cX}L9 i՟\"# nC:ᢤgX7ؠ;D8ڏD,YqDY QL VylS:2ܝ %*[Z[B\s1yaƣH8,LapQ"G+7Ɏtn(cxa$@Ii3vY0E$WY#h=12c:f1t3\ *.>*[O 2S!\vC.Ẍ́k}b"5E,;ֽ)% ؘoW\QGf0Bm)>%;OEz s ^.ڐLfQ !ʹ[zKLVNfn9rWf8pf׻UÍf궪d:3 Ė3Ř SxH.sN- n )fǸ%ϐ=k?xA:-u^^ݫ4GแvaZfT0,̢U88GtlT%vn+b ˠcmEIdZ(ʉm7yfU,z/b,KėHhQXRW6㗐!oZyMQwOBdUX+!3+ @/ 8xq-Da(do1+~#\':vB !zStf\d!rh9ϓ_1IRo~xo G92p }LN=R?3.9f1ȾO&Ͻ ׺Cgh[sW8!o7fOTsRd)60';Lo%aڌ06و]F S9ӤI?A5>+#\m߬U*.I NL& =4R,NP7}ږb׀Y_iQj!7b ݹoUz/۠2GgwUp蠲;bbb՘+VtNF@[0jir&6hUR2Sָ>+h֐;FW9rqٜA:V*`>=0^^'BGofC:ͶDWX!&ab1.h bщ̝k_)O,7\`-Pݤ 1+{prazGKK=.V֛$'͢Ìa\K⦁ C "LQoꠣHe(;YSglwɷ}#P01_ᖯ$ܜjA{Ysv]&̀1X:nR(j]3>cƕe V:rnzq̍n>q2+P3⡅狘hbGwKI{#eL?4DsHlԋ'弮GH:+[osUiT(aͧ b\+>\oznE)萂KԎBm{[Ih6@4Dګ >;(],~\&uyieLZ:>V)I3A 7FP?vXfkyp\cJ$G N;p'[uHvY<c @ޘ2ۑp#:TLH9*(GP]j: +5UWu œZXd&Jח]0Zm;詵< uƀsёMd5R!|4̮c|郹A Nm@XߘD"a⍜=\N\&KO%z)lJ̍W9blR$Uoa qCԙqYv=hѼ\FD je4]Wj'CaYibIf!T*#t:<*z -^1ᾛSFnbڽ\p!<PQRxY_ՈOx)%,"xa`W#^$kPi~̳s+|\ɞэW6őqSuQĢGYc#uJa{fuRwةjU4#9$g0vuMhGi.s *ۀ,]|x`V EEEx6v#Z+)>yhPf頠ev pa4יKGdž,DžӡE~]iq6bxbRopwƷVg)X.Wa鋵W*D>Mi'A*I2-}ڲj|%J,+4ivBShT>CGVa :WQ "#n57TNiiig0^ ?^].uٮ :qs@zVt$vNJb-HY:r4ytA!{Sٗq8 (DN)MiB}-fּ^d- _/ּzK{ !S\dž2|d"I=nLD$\s-pLu !ӣ~+cQQ*]}{{dhj7@^U.h,ηx;ٲGoK{_qy(,V Mk3,*qI~&}W}b< 5lHR# 2]}@b׹tX_)/eh^ٔH>֞qfLW,PB_<dx*i1߯gZd#Pϔ㩅bfJ:A+&ˀ؞QO"( HWTt1 ȴj6Yǫ cf>_ yR)'4?I!mG)8}bÁqc)Vw"ɑ F ޔxh! ;_&3,eR.8_(%LѠ"oiT 8{sIͅBi%2XYq<zgptvs[sO ?J.PDu Fg֌oNJSi("v,g ,NWKa".jEW,fF+؃qT.P; S\8BJ&M@ x.|=ϼ $-Գj3$Bx4آK\pY a>jAU t3s`"r#}v6O3΋|ؤY6^% Xw0CyF Cqk)Bt{HflF=k7 yW]lo1l!Y1$ЪTp(=] ]yԶWsz5ZVAt&H\w1y viS[ }ͤ j \ U%v&P}l€sf<>O!b#(M=+)/,1 ^VNXyo.˅Dz j P#rF,9h}lS,X,PXߍa0 ڪF}K#y Ioo;Sϋ%}k7D~a49&Kkڨ%9ڊ X MA&$0|0&/9 )2=؟^,Zu w[*y/b"CW&y#G|cZfUe6*tjT,Ȃ^+)BW kkɀ޲1/PP]2|siuh%JL 2˳22g2ò%Ie0H%۞(j-=0 tLN6i!_ r|ak֎c * հY^ 찅`m \J 1ÐR5R bǵ`FB݊; u{z3oeLpɭ5(8oX1GG42AXؒAL^T\<-PHޘfZ++! vܷʴ*+ O%ol&w4#2_2rϙ/B Դ*n$3oLM-͂B؍a K3W{|U箽c|tw/,`k5s+hVJO}DҬ^љurkU$lg_y߹x3g<5,{l.l4EVFb\;hz)S'>"k.V7V5s@fp][1Vb|VɅ*q6(xey-#{wmZ'jw^ln׽;yVơC~NMj<٥f P3O`Db3ȪYlZV$sf8q X 3#QcmdG1¯twsF",1 [,Fs_TJA l'BO2=@Tk>+*a6p~H}d~76FS)z o[%5̓Qma\-!rLcY/DmuO9AqR[QJC=*fMD|2Y;AfMg-DB$ZIN 2i ;; 6rTA)pG&.u-pϫD+Υ}GOh4wRhpq1 Lj8RiUe.M!IJ !o2y󸽪>,@IDATS+n",bO8Z1@b&ZJS.^c r\!@aF$aPZ3ldR7?<6{ZRdi&)(HW76(\ͩj80\ 5OZ4R$fR-Q k_gVJ2̆c?V0+<_"Kq6*LXiS=S(Ng( Iwb.'$O&\7޵@5H`{暠-d7HSBeVE;gX(Z( z3[bY-nˡF`3].If/k4d$`x=T.)_YQA2ߚFN-cnd@@%|"Se N`HPjxc lcSݰM|i]DR-^#͂}00<cin3$ew y53o |^ad5d+fvY.e:DˀD,2 &GuE-Jبп"gV˴Ͷ[kr}TH s }^2Ա 1z9*6҅Hj;܋ҿV%m}$u3h`6B|p\ͩ-a(]F}{hfKI T8+_YPѩ7,6BƔцO(qeLM )ʩ̅,"֬!t+ l` #b7L39W ,`N!F2p46>?0'Zj&}嘱?%!>՟v4#OۋJ0BpEނ4*T)0k6  Ʀ2H8h少ՙcPUbc$swHEO,p|Us3 _9V u:J̣rymMz} i`C18|IRs}#S h,a ҮcYsqR@J7Bqk)^Z}{/9laY&c~cr5^ cZ,5;V6Da(Zk<".=} Cbɗ$dFTMz7#92nt|&HpN1>ɮvӣEwTbյ+n^g,Ԏ9*=?ߴ &*V-Fp╹;gK^ kJX %T!=KbE ͼ4E\:6LKxg#LG  Mnųr' \6UH*r2\y!ed0O`5U, 3|h9=)1˓ٍُ$6yf0 zqcqm,hsN0:$ڮ?[(6:+gGM(*rczTTZMveD$rLĎ Wהd1 Ss|(?hcx \nZhʈ E0ݳZ YZ!uUuyb]{Pgݰ$""/n f/~Sȱn'g}U3ҫ|ӓNMȷj3 -/"!X&j+l*Xɹ7Nz>P>jEjMp"*[3MvL9FjwGAwܟ5`:B,SY7s|t ឦ _M,Rdxԛq@2Ni~|-/B6E$STikgR7HJ``żnn7g*9l a"Oeh+mbklHTaT.$GDdi+| uيs2hkO\[AtV(BQ' Z2XQ%- źfJ"o0V1uXooZ5`[ޏV՝9YoHf5WQ/EXqHꊀɁ4T3qaםu::ݜ8'.~N2FXm.{+rNe^=^t[b]!!jһ2HGN,gi DFDz=mMPel"vl[i)_} E2Ģw2B#5s}Ny2tz/(R65u#PPCm]gĠj i/ߒ#.2N'bح>FS,L%<\iGl }f\BKzeDBrV|, {=Υ nEϝVd! ȅp0h~*3f0Pˣf\KzI, 1lud>3۰kQᇺ:q?$B#e eƐ0`.pW'X7=YIXrDɞ Ǎ<| /T`.hr,VѺݬut2Q=a7jޜ54 x(n8,Vvk'd0!nHp!%D cѻE;1ֳ3 r#[$ujlk,Zt$ogctBN}ެ8N`&hOj8_.!}3$ g`(,d4s7tM7Z?T]2KtAW gw`{0ҼsD_iq幵/6\{{zc㞢`⣌П o,J;8@ibbc?~2ot4-\~ ~;;\F,,6SN}9Yӗ@ZtcMP𣾻ƶDE ?piIMtǥcHhd$F-\3Žڙ&1-|(4EDZi{ |Aχ 1GxȁR@q*n27 ӳ<b bMZ4ۿ L]⣢c;ejHes&iY-9Jh*J)ga ٮ#ׅ!|6]2̔]#EXz<=!)f#冈݅Pe_7RrQ_I˷BJ2;6; hGEct&&mz1gpcLE"c1 lb ǹc>O1v#Z}ԹO_\iVg*D(c&WlV׀_Дa3#r^P]>=6/6K} Vgub#oaT<>'pg<Ȗp(rMC&w ,t "Eo| Z7ͫFHŜ|T.#1aq)/6< R#pN,3T_,0Te@2$rpkSL:f$PdX`. ' e`1<ȇ9(E}]DkL2<* [)\bJFUttyDЀ9?T#(^ЂQvvL;gRpM 6D e9lթ<%(-$ ø8@9̅Sp|0dICZ_A&=yW+dRG-Ʒ-%,wLõHCrIA3xusT:ƞ”: 8NilMI 0m~80oYmԀ<7|^5o)ݣI%&R~!§018"Z:݄רL|] J7d+xȣUiifx&)Ttlg1u'&Zň9WDcx/M62C5ʡfSgryh8Q is9 L4Lpwq8;rUvX#tgR-OSЕqRf QwFﳷ௶\ +P] gd_levxPɎ Fd XI~`bЊsfOTA7Ҹ=lȏGP1:ኼPf;1v\n0bW[qU)Ǧ@~XqHWdm' XC9VV˜8snWLK7 ?PaZ:%HeM %=@T)Xdž4*]w"| 4).xZT<äuh@=d7i$7e%B\tRsdy-MfjrFp:7' шeV/@+c.A:#LwW!x!`leM@MAF UCLl>wTAC[;f稖P֢pEDc ɦ>_[O7|s 0 V ,SdC1zf4D3 ~6x >0[346]{)I}gO#~8?W.x aϸ{ C_׊dCK¸ؒ>g)]xqz*ltg/$ DeBBkA.6 r,TyYGmZxA  Ek ~<本$l )XГ@Pރ Ǒݏ? vSln- wp#LZlRu{$ڠzv>I|l4_#5TTN g+{&+ɴ?^{s[ځʻ$lϬ XQfAErX{%<:]S`J?2]J9fβl,]m$Anrs )0[h?K5#$ ijĎ%<Aot=꭫#2u4%s4k9"G0l%m g s2B^P!djA_;;rC#]=v5~5X* Ou 7[Jbd޵@6usA㶒=nXKcK2 #M [,㭲Am'uL'pn߆zX^vيjp/<6ypK`0h.N֩is ±#f`E@Êꨚ1ټ uwezE9;^pjѥF)®gVA O1]XrmsHv3jWf;[¿iL/ErDCn)JM}Uٷ4hKz>2^v/u3 j/a/ BL&)lZ&N6Bϳ}ciQPDn`# 79v~1GuT ܲ^NcoB@)j:UuGQn[B0CӢYPk5 ׵_GUBVRݎSfó@KV]Gk&AngS-I9VL8+I}Ѝ@Ȕ9gP-M |h%-@N<\bD&}Ej }u%N'/pL57͕#SngH">H ft)a1.iXfj{M@9gfVkleQQ#*;,م0q{>6a=*+'-m fYD0~9.]y=!%&5 6v44"Io!F} r5rI EYYޙs6"^ʁ>%yKUhWjB><]PFY2]^yFޔԋoUa6CNCP!h8ff!y~7e C[yw* -+lk ]oܬ^ ,.*jDsu3b&deXa2+BL;,_oP[y'߬Öcįw- VpW]?4ݶ'3O{/ޑ qb JNRos AI:o^uy&$;dl R>y]3of6X]7h(R-=(k/Ă#̄ ȳ ,m.>ϖALz&H!X1[%ή\MWl7M0yV=6 T[Wy ~C?ϲTM+j6T,tJ}hrd|oPʱ}uQHPo/g`@ơ󗓁n¼¥Uؠ sJ^R6nsBj4P!q&߻jϨxeV)?.>/kIћNe>Yk`&Ohe}nQR7 spYuJ)096:CQY +}r|Ŭ"73cDlROdUL y-c4MR i,ۺ6j}u&NUǭ1t hWz/<\J#;FvY4⋫f`5@rvP +|VSsb>!-92K ɗZ^OLߤFH1nG; eHT0NfCY$,A2TYW5UJiӚs:͕"mq+n5y tC1C0"Afw!blҠ8O=UX/.]`|eE@lv\o)J  T|+i~)g+Vpr/̀ b!%{+ڰM bu*ąP4Jm};\V6UUou # L{imWqg.ecyѴ vFR|LGnfYd%q;;3|?4?Ľ. Z40ӉG2( n?_@S F?o&~r~r 4 3?rX=N8m^٬ W_e@9d/ 1w`Y6,~>NhGr ԠD&W\=QKmi,ZQ]6=ldkRfILa"Q;_ mv3(6W"jo:cQY2hP6U!EAZ[DO&3]Ǣ!b?Mpx2wK+Eu,bvXŜ)m%e(!*g7<;OޱG;.!|>Z9 lS Rqi=qv 5Zߡ=bЧ^cQaЁ.<8K?n J`xa2ܩS;/b]'0ɼUفf,z GNWkMt;mP>VeW2ܑ摬 rIQ,]wTƖTcgv(ˢvHLq*b6gd p٪~]Gia)ԺwsJJL$U?~(B8h͠m6C;+|0Â| 0iUڦNyjg ,k+myyovLU[4e E¡6v%֥%Wt "GBPe.#]WJt w.z3AHl8a+xۊmf H*0Y,U$X@d+2i%(m£!!0&:@j]eQLd!L) ̰9dQB()^U>+8k*^Cezw=M>aXtXH89>րR}qdJ~kLD#'2hlF;;W7ubU\{?"^3LL/(腐@jyvZ;6F)>ʠzHC"`y媲P ֥C`I|j.K6VO:S!B9V 嬸.90AxB$:b(wcZ/B@GQ*yfIuaI7ܗLnLkږ<:.,s)8تXg;+9∰IGs !ps~l9xH-MEX8I;EQmՁ?vT7#\$MD: 9^99M)׃ƪq@N5{N*h} Ôw@O\GeYg!:w䊄3 wSAHd)3 do,0zv$Y;ږYQXbK#dY^ݹl9ެ  Ont5njk*2@H |L#Q]IhT2/BMsȏ4rIqR*Z<)g;b96m:<֯\lhxΒl45MH!!}ü#G$hB\1:#<)}目y2]x9frb?*%P]/?vTӲi6}@~\r'`REY9mpDH7W\ĩ gCW\w6uq^xۚ\y|% n/b24CӃFe4vDo'#/@+ kxIW|pJB|'KTB}@%+Kx<0[ZTym)ŷy)-TvYP,ܡXa߸2u9Y{Y[habSZոSh@`<8.- EQ ml֟rx{뒼Or~m$:5L1kzb&T}-Yen ^ƞ!ېgLY͹qYw-vi2Ml6<`o |g^QY*Spޢ=fi,&NrToPW!W8H%:e0^ılf=VK3L(@9,q][&:v:@3xާ=UwPtcNw&t=E^Ƨbq~SȰWn:$E ^ ,%](+ S0u~R#V}-" I}spceq{4oD(IƜU,ߒ=L\ɲNpmThy7B>. ḅ$sB &!?DukKn6{-~a'JähSK5Om`yV2Nth=[Q; | B{qqs'$,.qH7/o٠ywˮiF߽H7f֩ _\`ldRk0ן<9JYJh+ʺT(َ}1h,T6esbVobUH[3IxBa.nfvOf}˄U!Hhz `0]ZDd[_ͫ{8T:kR2إf+Hy/LUWU^WA-uAjݘ3rR &HSl'. N;撧uso():TpfKfۏcP4&|%F{[+97S E&}vCzq i -7 ^>r$RrN]: `@V2V3`ݬjJmc%IUHsƋmG.x(^*Bkq:Җ__ ;,U,Pv>`ԿwC%|oZ=GY><}SMg md˕)YzIBKEu.AQph(ubɁ? k;AJ+ ewp%g7UUb A}fk0Xq>af@fIq o.B&EؤUSFEU]l|}}SpT0\V1">G/,TX~ 0  WSbwN68G):!W{`͗=__b%t^?Js7ɄtYڌ*S$)SJ} e:@Kbl(I[:(QqUbL΅. ӊ>C733޲Lt%,ۡqI#}܄nRD46ct[hq*{sV޼n$Ǘ>;I',V8˂A_\%lVLVF]tyYg^V(D5`8: "qNV^b5GkWM !UsHD॒$LZw' hT_njF{`$,25*67>kbYBlc9!|*'C <2-C|q_%RVɂuPŎ(>a&2 K .,VS}_.q8^ϵ?A/ݕ j ,@xQw|"ixdbC6koH1\.@,&^6Fഐ  pe {nWS!,H^R-U|ٛzEF:o#ms 7u}YCW ټM'6PV aD&{mc/񨞘:kg-c̜T_7!{lyB(CIѢHǀ1-.lRT3=d!Qa­8iQLX-΢_/7lEm,KI/ĆfWx=Iьy\Q(!鐙|=}--$,˫\=d56~I:IUd VL1J#Z*@ u|J&Yw oH+fl.uoU\0U)"s~۴&>鹫q\fB^&zg/1 泀g(iv;#iiW4靓n&q/q!nb=*'x˻s@ξBcpIۤj3|_̝pYj,!+~bgͨ~mLQ>Wt ayZn)va"$fjC9bxld&+kq)1(`vVg(j'a&+ ءl /g0,:6ČnIf u =P/> {s^vcV%l:PgqM@P,NnלMP6Ësj" !3jcpф)2cO.kA~`+Հ;b2S4.nFI)?'D(~lVb\ eN"O?4W7 /{X>=<\EOA`*r#sȊjĹxb쉴_?0"'~ F+|ĕ Z\;ǭ/=]ZY%P<7\:k3]TC6*k {G *ν=*8 4Mgh);яTu)5Gt./ύvW5q {Tg?\}hb^%qتJ+o00n W6e{/gLOh$0!1%WX;%J,|V\9r5xN8|ZlVIGEJuM:]).. 9G[:}#b~8_,9!o2G4 םZ[8BwDyJluͬ Z^o(wԂ2lq`V__#xV5U:./r/; 8c &E㢲qEaT*pLREQ":њYLSD EٹsBO,[% Vr%i }u2_tpO-px0^s5(9*ڛ; U`bdJF;pfk+VĠI"n\Y[SM,&EIniBS:[Am_ rhqx212(pcG!6wܒ:b29nլ5 $?:zsRgdplr$ h"\spmHVH1q޳Sj; U0;bkQ! R9iʺ\g6~n׾+aX{͚J\KN2`3le#$**/i56C[U 3N{\l;z슩)"ϭH.e tEw?me3V`ygӓݤ8T.\ V38oLRzk,G㼝ǂE " 5Ӿ@u#QC1k~I^|lcGfɖх-X5exH_ G债CֶVxHUPϤ[&"Jԇ,UMmF' N;ΒT _xh5P&'pgmBGNQkj},ॗD)fguhEn~Rf@h"qLP\Hþl_֯ 5Ăo/\q?&R\_m]dUH)R_5AÜU=4ͦ"=Xo%`,_%to NBvtԷ@3vf6h,2k$YІwM::r{S+mJ ӣgUO e`1ܸۜHOngv<]$;Ss;x`(p%(bs/};( <,̧*:OdːE;z89GiHC;d|p&$rWŖBBB8>ny.sLVO$K|pE^kI/tۭ7n= nrI7OW<89WVc=unɘ~ ~C?X_0pxIx=1W/f5ܔ}دIo!o Ɨ< Q0a6])SH= ;{kUEbEjj.YˋI_iQCޝyt6i% 'ϪD-ow,bu ȋktD V7,8m&LkB[)SX%{u]Mg=r 52^%d9rvȞض% AIKHfk)G$m[{q5pj@IDAT^X%3bMhnr#M-`s @q,7ᇌ xFg{EUdlQr5m/hnq7ӭ,}F rx_K'7ޙa W$Pf̓ ٖmmC)̝/ߐKNm^kt~_ jVӑ5K:'y%{FZ{_q|gc]1^d GFZBS*D(ݠ jR̪O1qi>bJ#1b7Jz->Ckͫ0۽Lg)ṯdVŐGY)G1A6C5qi0V I 9+%E6}4_23 oqH$bEqɭQWpX/QI~;&Ut<.8UX#.h iGUIPWvQd2WmM' nQ-ޑ-P).W4hq!y)-]c+S9rQ` yKz ty!5xR5^ֈ`)r^xÚ1BIF׹Ȋ`SO[;*!BjZ\W} ;Ofʎ+"&H2= Ͱ~?B:UVCxraE.=P91jgՄugM6=0xH ѕ+R[B(vT*CMmJ rHh;ZrlH$zV9%4c|3JZV؉ԝMJ@>=/jbJA7-q@mH:+5`+Ź[*`.sKޏ(w`~ԮmR6~`.=ˬ~2n6qf&D͞ۼtdqгXph6$.6AN}4ffjӱ +Bx#w P;% aO44ͥz&̷Gޣh"|)#m] =WcU04W9|s%[FV]/p U^Y5F?sq;/RހuZdci&\l 8 Oak" [ݸ_E-íxٙggz|o٩ gsUqyb*K|[&`t-,}bFh8qKuYKM)ʨ/ʅͪZ$L^De'D4 ?TÎ 7̖\iEnaʰs'd'8 Y>P?pCDFws E$/v BT,?{0⦁p_9*(H#֥ETRYok4)YeBES9H`n@!V&gjS|1>&"<6nČu@#av<{w~#Wl6:MmT:g6Ȩ)o#K,&]!<4&$6F״yp ұҚ\M% (!Yz8. ڏc}r'gȋ4Ȭuuj]f UO8> C]>]`J 5s% 2e`DC=P^3T5kry!/}3=$J梄> r5BPۗYn"ѰeiE*0 x#xΜn%';@eiи%Njp3- xmdYQmٛ!"սF>Kjl3'hJ wl.12:-űH5`-\ 1c$b\EZ(v]#P]/R#Fۚ%o[vV  'XR`FDIz1A,[/R2󚋡d -Es3 xu^+UJ"f>sGjf|Mii0^! 6[ʂ96w}N.ӭH*/[)`aY҅-s4Op@86D2W++-sy?`>G5fKQ)p97֦`W>A<11h975JD 8˱020)(RX8V+"e$R!27,y&T7QיDݼ0*o^O2H8 DDfoG}9h\ . EZI a1@ DjsHN4"،ZjLaT`ѲT;]Zj!+o|KJ |v1} `QmoW̡Xj)(Ym_ޜ?sŰc3ckKĨ^yL\!"D|+^!D*vJÕF7VMbwY))y.5|X"P`u08&7(=a<)+*0r7؃qkȋLC2up@ nwgyYo}r،Ng?Dk _ wlv5q.AV$Q%ؒnZnzJv<74Q&bK\qkD3 nLuЎyCDmjTW[\0^f7?̀@P57ժ$-uM΁քw.#+ŨNÙ(m_ێ^zK<u)T@n_^MFP-,zdn䈵2!ث{Cv.uz eK_6J900ĄX,6yr|̻MR7<xo=E]I_20)%lTh7u5UCL}уDcBޥTd"^f>u{i,>U}b % Q/wk(,!qg31sɴ _ksUgБ`҉-*䞞 gr(8 Fޤ- kbA*R5>@XiWqQTMq (FBw^W('k}B3죳&Mm٭,ideo60p󑳉/xWfg ŪIpM] &@ gUv%P_Yb[cpF5ǷKg`ں˯o8\c&`V /O 6Xm%$߯1w2!E|{10eƼ>4K-E\9-6 ;ocӀbo)0]}˹bŻcSxpK"y_FFz9P(k C{7jo+@9qP?ܰiںۥų-dfs -ɖHY"=BJſ_X#~RuAgRe]ff, ζ]++0S`e/ڽ6~a |AvZjsW Fi 0o1_9_Go?3#E̬z$&ڮK ISݓ(!.aʻaQ[KCPpR U~T7&Ky^@f3 W~UKB% ! 4DQ cS.n5c:ܨ^&[':%q J\+B(1[IYV+@T;:LȔ!A!0oug }C8``4"fb-3_. ڈgP^ݜj +;xVl_ PkQ|SDž; ;AF#F~#@)Jdז-GU%%H}o:rElڴh,x߫ DdF`B[OlBl_KOvx6k%DRa@np=uDj~@q1ޫwN1nx~NAm0ZsJBF%i(LKoXRQ4T"ۀRyDr5ڽ}D M36G^3f[$r8#*ɑ`!R-eCc G,°n,vtDi-`Ɲcvsdyn^*!1rԕ(:}۴@KBW`;$q߃5F欳t(^܊g781?=o3YX&EljI.NbN4zj'AGfrDiP>Q&{. Z;Pk|?nZFCA}fye&;Qe)}J:F]2CYbAwwE1ZJIP HӷjLTҪ4`De˩O\m=~m(&"#Y:nJ2ڢ8CȁaoDIH& ,¹%/N}ĸkBl W7024)ZG l; M/ OQ>C& LRd#1Yq9 sf\*Dņv|1%)3?t}ZxcjQLonaLWF5H ~.&e"gohz?0aF@yA 3uZc颪hU4}Q1w ZЬ'~ēTJ jS"a~u UpLh'[^]_~⑦%IjzgO!2*L2?zMC44g埯*<)yw۩P #-$DlNe$ Wn[%9KWXe^n:WoTg݈NTo˙쎥n5B2G4nO%鷏=RȚ.R[gAR *~h#c_taƷB,'NSYEL,p,R[/&bӵDx(l69/GFe!Ll3_Xrny0־h֞jQASF 2xvϦ#'s9rZ沲  7&Q[]sUvZѕJ(ZD[B"꾲L ?k|oP^)و(W(@>~S,oF@y0hvTwNWYy;kD7CFýww.K 1h8.wl|+WSV]P,P a+;7YqMH)~NCoiMމT5$-Ȋp^f;YW0'EGvN_aTKhM6eX~^..+F zu)*Hnw8z휥 b]W.B˶=M,-3#HtV#ڡD ]<@h4D~#pL#c.A%U*).GLۅ?9>|dr9=< XWhqB1|͈C`jlЂe+&TT$'cJHz ۥ4.3f+zkOz#4L/pCn^ Rf%6vMWuA|,hb(תӶm]"rt\*[B4( {ȻGb9nV(gBkF!޼> [H6Ij0:2 FPE}fŒne7Y/.8?#HYZ;L>n r>f+`wYdg*GtY&vA`KdsY5~n%g ~F4YȪ!-p-1iM2+I 'Hdh[SHv}E($>91| UvnaGbkE$r]>> KU 1>}&"6 rhVNWQ0#( P|귎-ճ)*2}:IAwRuD(x*}ݪz |:HLSۓD |$J#`({ M*(F s,=ͳUF+6r^M MhO?EqO3^nnW݌^> m;ʎ?=}wʰ_I8+Zk=O g,6vjW."f;uey3r=RQU jn|ePN/3D-:odempqDfJTʳy/O=Ӓ·T/]mwak:@+1X&]##?u|PjTghݮv]ѯ0U@.5τEi)g&,T A p=2.F֦WE-`S{[3Gu0zVWj "v/6 3Ą-誴,bd2&A`۵RB*%9$ܲecty dn s+ݎh j`j\n3C3+6JgS۵bhQSi.;aw{sKi~ ƢI=x .M&)m6F+qMTTWýJMxoTFcYVjXՎ+3y뀉<a:k[peM:1>"@M̎.!z‚mϝ,ϭFل-͢D(82銞6_t?5 55cQ8#rҊ֗ ZC&!/7?H}t]A(ikVĽ]&lqE֢fRޛ, ~C$ =YψP=.T4dcEJ&?ٹ\\Aa9=6.9{֝j$zPFL"@p[2nL*(wv~P*Hܞ\~MbXXjD ~2,oqdEo2aF&ͽ3j!8_J|5Ku::7 H |IdC9nVԧ[cGKƧ[ Ri4 ڶۥڋڧК{34L^7]_b"l[=[:][ZdGw5 0 j HB1LҝRdR?t$TVَ]fYlԻ꼊VNa$[f]#~y [߄^˔#K. n+~oBvĎ*4l0VbFuARh}blKzB|%j}4Od  Jc=,&IRy1 m=GTp|sW"jƈd"OȊT#Q&{WU`j$ 9BЍC^0VY̕$4$xWdiΥوJ9/az@78l̰Td:Wnݹ|5X]d~8rjv*w93`md4EaoR3YnIx?Mp[`؏k8AHk?۩ýgrC+wnHq_!=aB5^@$J~4f˧ZyPH.|Rvd*ӟ=Ê}O> Pj`, C\jE  ~, `Np-sa|a^2d>J18Ҽ|JKN$K*="}WqGL­(# t2;67!$@ |VpJ ”f€^[ C3lعPBqRT%By has,v,Cdoc_pFtX"/̤z1CX_#54\LuL6=b<%9fl XS<)BB`0hy`/"[ٕq|{1^]2Ns90o-m1, ڢ"<gDh J~ *WٽM)sB{,ƬzMV_PwQEkNduA] )jL1> ,J&٣]4ee0#ѵw!N<[4a-XJB/GPCjtGyN,@KK[ӈ'! gB \^}|Aed /fq:,VT&h>CK$U])3Km twhɥuM:az5vhmY]#8\ ':P6&2trX~xh>+ƼH2M5<+ |f[tC~[Q/uŅ\&sԓj, JsvБxgۯjt =QP^zd駞 !m pVW6w(z1PA"$nyCk3J2+FA^U _ڔ8) ;#L~+ =R+R$+)E}Mc$Z7W*< r.fKpfBc+I%>Dh,Q$DBq=A gI~qa||4?Q5.ӴD XG.afM'ͽ5}M`GYF33,$6Y u Ox<%׸wbͫaXΕ̶ȣNBpkB)th{D}Z2}/|;8$J#m<{` N rluP-ѿS<3ݗ̇f l=+Eq]b&Qre }FPcScQy 뼠KwyCq~n)u0dX݋5-ŭ3.[/x[5Jܭ.7l`/ة!8 $$(V{_ 0F; ~fo,{h'jx^D$r3K2,U*34})v1˅4J Eu_{G`cx {$j8V13ӈVIg}9TgXz k?i+=Ҥ_&qILxzaZƴ ᾰМ\ꖰl^t,t!qͽ8.4*؞JUa[1k$P{PȠkP`i]4\&܂}vsR]#<[Jgy30MeDŽKMDy*[ԧ֧-UwiWk!hc c/xAfT&~_pAKvʹZ7)#s.f'4'7 han9HjK,+*qp#gMBI@_ZQJ})4Wv:$NߤMܻ !:ݙ (q?ɪ;+[v J3 /)8ׇBv3߲n R-PYN UFq`7B3@*DL؍zű20fGMDPO5R,3 %,z.̗A1({QYAoUYMǑjkY [.6(D(f^{* 3^y8IkKķ<Kr Š:-Qׅ5v^U%*s؅m mqe|Eøq5D ŕys}$ULyulAlꃇ{n`n:RZr_0^XL2xMOݪ $@#OEˢcyLce1Y~ZzyE_=ݲvUC`x瑳}!K[П5e e[K3ag-jvmT_RkqveV~iaHZ }=ꫪ6W3b< ‭1}"B!Rmn  +u1k<`3LVj7mܸˀr>a80n>ʰ llmB_UTe/d0\ՒG|b 3|!՗cJ*-$f3 oB &ʸU B5R_|Am"R4M##gW3/ W aMY4l [_cZC^2WJ dR\qgD|`E|¤0P\RTmE_$`#=bP8.Tœ^NQbYu_+:p:GDyp2,Jz4[gP<#'"8 Ezm2̨7Nr̮k_Ӂ|,t𢎡KB>.zW|-2~[C O6n~6`V @1{J[L]rDڡ:eڀxmE=Kgs; FCFh9ZK<ŨE]h Z-и1`%릲lʞ#pz7Irg<.9Y+f'*x27;Ċ$^  N&Q7tl3O8HfQ =wt;BQ8X+){K<mYQd:@V*E/$V"hBv{R8X(A}xn!VUc&-9i-l"&>= UCb,] >N CBlTZJ"'%:'0N)=guxabo8Ȁk7]2M=,5RT :[ۭg\tmdcf~TUT=,X1+MQ|Y!w6JDCw.`_sv9*aU"s0uo*:$j?~=o5BfR<+ GzU jڃVDA_>(,ڷ]IL}9I= 8%42XY t9=.Kzҧ v9( 7f\H%:Qw= ~g}>V~5m/V9±NKZD(4wsټ1{]q%JV~O-JE)a]:ĭ?? pɐږ%&z_+5e^ 8@@V[t\RĀl}RSq㰝hצ+%x 7L!ZX -` JcQD3_ ߩZZ/3c(NL$!R)|'S~jPHn,ّ5CI$\cD%Kw'd={.YkH9z)Wl_[c5YE6R>~q2DSf'Qcs"^[l(=R2J/It7Nc,%dfک(|V!B)w R$2FW)4ZrĮ(d-PZ^V5OgxYUd- R5c;e~dS/7ŶIZ3bG[ :?oDev\Z䩕]^% EZW`7V$ P'G.U&=O{|eS+uQ ^#|_-+" &rc WhyMA pnUm8-C2 !w5j*j;i"7B VGK9>SG-l2s` 32%kWQUܲe3D?OWʹL M7]`(5H%1EOBΖc]MU+ yw#I K}Tq/6%\r0tJ@yo/Kq.5Mhm6phh"X $랤ў8_+9QlKmZ Bs̐2v>PwWDÐ Bma mxzfUs4<k3nWeF~5t#@%|qX !,_cK GDaTKz3 u^^wAYaza{94םO;/SWI8T3g*cE Iy -_; WD<#Fl$|B`̷FVdޏfe!.bطW* q mMf<>hSD-օZ tn#GymJz;4/[Heƹ݇x:gCRN&vlHIӴ}y_),E =}$mJhzypM>9&;r RT-uP^*bݺ_h.Ozid\5CQoi6T-zSJ+O C"v:,UI^i7D,Ѡ:ޒA;w<$D,&v /4Kbpϙ2Å7O+O38%-b)soˣB}VDc='osE d4-I iKw-ϻx$SUt;"_ªodg JMC-+}-3U(Z)Mz|֧ɒNKEPUJZ+ q}Xᴩri ʽVǛFI.x$p\Iht5}jrXJKX~ٺJ'ڵ=;Ob<% x{|э_&̎y~Gj*a.ÊՆ)َ$Ri ty>u=Vhз$!(pLZ/p5&e OՉb x91YP]Sl{'hQ6'x{́.k$"#У[ @6|y] y&e~҃JQ=/#ھsyA( k Gkxۛ̔ˆH_~6@iY0״)PwrhտovIZР(MohPv2i\&/fijXa״#V>KP̯(&*<ద'ϣ 2,R va6wx~AZta^[Fse$wMU ~e|8B2vb~.[  sf,L  r?T iZA bƤ9ذ3HÄ a]5CSZx2Ea=Wh7I3`W`fFr2J Z H;O- "W|B Bu0&{df)e^Arn;+O.f+7+qAgViF:}4{>ך b͒=Epc>.k ]L-K4=%pT^4Fm, =?n4@Wwh:}Fn)E^ޱTm~bן4\UB/uXvU:٪XOP-X%%$n~IlOd{cR?:䅡=|65҂(ݙj~‹hvZX٪)xG ^0h>nIt$90G1B";cu>,|{@xZbء#z8NЮ5KzX^#u=Sx*|K6=pbI2󨚎%-vGcd[^;%v7^LfRDԊп,С D%J)9g!R!Wdme͌`9 ۓyS4oe V!zu 4GM{'kD;,lp!Ñlє_y2c0hbU)-{MN9|p/o"gj1+|f1b5f&~R8A+#[ҍr |u-JܕH6Xh+8H,K dp)]i_}H>L-Re\Vkp3Zt5Kt%6Gss`& e`d# 󰍅E_$ce mOAg*@@>2./Nhsn A]LFR܆%|rN% m3i {-Cy m}pUb B<\I[Fwwg .`u9 1DI+S#A~ӎQִ1ZJKn j!BtHL4 G2=&En-egS1roy||Ukdkcc(~;;w 1#CXE@DƊAgbncIEj=&ㆫa|`5,7 ?`2)T Pƌs*-p7a nQ{ hc7@t o=("ѪNFW3%\xqY*Qr?+zh>+a*l~shD4[,fL[}HV 0heeX༝GlMqeyGv1npG>x*Eں%:)XA2>}G&9U`qa Bk\ڈ:(y"{ ΌCF\WDא^"zCm8H*nqLC\<TK-kCRKk~yv%RO=3׊ Ln~̘xcR3*?  pbG fڟ123N#| *J 1+\gP]rY0.})0\9.fɝ.w[H*Joqe8v/P tD6ZJ$k2 $y Uk%"c\逍@ܗiVt4aaHa_ryG}װ50m޳oQAx6TNCO!%lEО-Dv+ hz)/m ۥUy옔:WZMR ]7]Ti [v3c?~av 9'J ;Ih eHC}L^Ȇ|\蘽Ϡ4xVh+9B3KlQ˥o:pi h[cs,8^ dFQuP,H>8#{c9{Mk<`! `kxzC-H{wɝU.OhQj(y$b71бBEUU+F ^蓬  Me1<\<[ rp\~L*d'fܽWߖ7yݷ܊UQUc S#KAV/p˜&kf/G,:Pl@=˜V;!(t|q$vv3L)*ߌ3>MywbdU_[?M &k={SfǠFZ6i]H-H+mFfZ~+Wu!M.&(l𑱢Xz './Lv1x]?o) c;evIs28ޣb`9ylLhOzz"+Z .б[VB>Yxp]lL*L p+Rc@J] Mod0VV!B"k [3.xR286\/lk6Å$NT՟%j[4}G71@;aq{76#0﹮9*A^6*W_[ r  Uk3?  0f0h.yjAqi6 р VvN^xQ&w%btqM,˷'3׀hd -t e%Yey9Qº3ZMu֐-6w ݎ !e{3j{xp. !sK[4Z;f$R8L7݃ -_ZuLnO˻xiH3j4ːZz3d,jBFqQ7 ~-x=@\)J?\2PtV:;c]euzUdn~LFZ@FTsf5% ){l%ԙ092Mg2]<<b̧ *̽}6{ԷȂuK YipI/ ?fl3k]|8, PȞn4% 0}°-n%Q6qa R'ZN+~V.FΘ=oD̼(nE&N3ۃa|#U4a D|J&Pb`oѣ!2ф $crٿ\9+A//-~4uڝuMb AmZ>cF0j\T|ɴf$~h 䥶+V@4G9 3&Ct3.-Q.$8yZU⌛?-f4dGׯ*'3(S%\r?HeDU*+ LkV2}Ҍ+Qf…2V92L(x5(K#GQuڕ\6$+& c *S }1jYOdZ4TGO}ҟx)QGΐ<(l"m}>4wU =3 ܰq[c&Y̡Ƙvf8ޞԘZ60n:@lԠ-{Gb@&&3UͯkjQ, ,uscb]5R3jhXNlɍ+zDcQ$ /N}/<ܞ%EdSdege! h.*l0ApN(ϕYFof(ߌ7uDb8IEnX*-JUtzE@dy*u^!g4Qvh듲f}6AyM7o 3/AxQ,1;e@cUfTFiNqҼ;2A6bү3rފ@vX}RѶ.lDjKf_?9Hہ|YYXfKV~]+yٯOy&@t%5de58Z_a6ݶu_@\|,W)IV%\nnDM/}d2Z V, }#pIQgzt![ zmw8`f>zDmFzTxD71Y*¨x&:>nw~d>p$*qIz8yZ?FPuv8M-.8@jQ5z /fg"ۭ ju5Xjl<8z}x1U[K0trά*rRYdr\-e Oy2(eeAN}fۿTQT7)dA/+ ך jQ,x ^r\Fyzҧě@ES.%orK~7;lD7(lDhrZﻃEr: h0£}]āS4M`3RiL+Z&+ N"CG{/B\Dߪ 1LnB<,jVa FfN Os #lIpqԥTbtp9.cXؠsba*0N3k굜GtH2vy·8oߐ]1~rbsZq=9Jtz(%2ަ\<}={h,oFjG˼c4[wgZ{$ fwFMRpyyDZRٿy>"x ެ$-3/rYpV7+T9TI ~up2J]1o!3 )?áHUwpZXԃ qʫmDɌCf >$,dC‰Ln#Z*ב&:+b 9£3Y~dMd>ƫd"_&#&,ncoWg+Mm4 ܞMh%&i9tI 4i8txnmBGDMQhp^Dkϩbu-#&&jܜB-a@~by~q~Ipj$ʣ%O R_Οq@&{' GM q\DESu6jE=Sggۅ oNTAu}?\/WG,* 89u:~YÃյup֣<+( \&hÓ)E Y#>u*/Fhbg x؏ RB:s%G jIt} V8h&Ɠ߳^_3VGBB.lTy*_HgzjlP^cSs^D}d!z4z0e^aȨ{u]>>_3qs5>1_*dv~1#lzSm(g->pؠpEGһdTtT$m5(]))%Hh9H qƔ .ktw|fʓ$=RMR:9XbhLvͺINJyb)LcyDyP_gKQ!aSokku:L^IYX!AoAg#E @&&X;Y N; E3/rd2`mYzW=|n5zMҏ $ڢ{\^B-3rEk}zڵV*|@ٞlM-cS߂5 'Qm.F[wW糙q^=OYH6W7P 4*;aSI pd;B7 V ؀TCQai`QIp]̌dj9Ǔ6U&L751 "ƛYyt!{ , SJߛ$[ ҏ:,3 1W[O[ĶTXIcR0vrbOM̸x2Arn>rq! A:7MK^( }ˠKt<&lQeSF)*r錿2pt tRCX~>Ywz 5*fsFʲ|1A! -U$r $jG cn-:bE~Dz'xu GqsOs$ŸЭ`@W S`3¾7-֎ (vNUe>e|3^s6<#2^:N?":&gZ qi&uAAiV[ݽ功cƿ#FU8/>wx^uhH'53肨; @NT$ q`z.:;`\MYEKHbm! $֦%[ԣ]"9yyN"Y1j!Bno5M_^&R4F6KnHŨkl R:FnYlem6TGoPjĵ+^?WL<+6 EDJXԂ>VƾxVQs,}QvI;of<(o9k%ZEiR [Ufyn^NM@r %jص it,j$qƐK%r %菽P0Fgi0B9)|}@V8'_|3NG琱; 3ƃ_r9vcKu,Lo`Q²&6/ ds߲ sTdĝ  7WO3_\2| aCiL5ƭvV;ZVDȲF>'abqYT_Z|b;EFWmk'CZW&8AMȗ@(zLAlwY:FqbTz mfH /"XQ91Шy,ay')=ĜHӂ{$xNcJ+g;Vn#g| Eֲm!ivRM cntNH!m"ie4~.,4\!\y8z12YDa `V v2k'vv`\->2I׷d^Z^XWEW_X"mmT{^>f%; Bqz+x0T#}Z rt2qX}_/bM]f4>jP 0NfJ?#kcMKؾwYa_CM,8@҇di w#й At*Io}Pz&GrZJ, SEdan^)>|eZ҉̙&|yIE9VUvmDXC-*ʐFW[y7&W/ʫ2jSK#R{[R˛[{4 Bmr '$k y 6wALdu+ЋJftݔOk2Za'r$LT+v(j (*7HCLCàYU.%IN zQ=5;H.ߙ%ǼQUs"6tm'F$#Bx.fB܊bӌh!zqJ'yOpgԧ2:C7(bľ[6#" ED6L+*;k; ]p2,@!ș\uפ)˝' mn۝ْ TΤ aŒ)De<]$$|POvoz{#~yk ~Вb'V=ܡw՜ɢ$.A/3'M6`NNR#:&SF"l6H 'kSN+(vCtKb.1y >tl:N<ϙ&!Id5Ǖ,?m8K&{'ڏl|))c3\ⳗa vR,: mcw 0d76#[sbø]> vqI\4(z㝞טY.$~s;`9+Wbԃ{쪹bʱ @<<P<>Z!2ك@b%3KlF' } l4JOv\־eeAnԍ'X}oB—5|R68|D`/O'Ѣ@ِy]J&>ΉƳ:$YD}Agͻo?^|\>>):&z,OYkZXT9؝ lCb]E <.s@7lʌ+ٌHZL.ThЯY'm=FՏ 3z%dY,>ҧu&+%; U1[h \e,j2}g;$RJnj%|HH) BG 2a6fEqn4rU A8*QPmPfv%@Na. {쫀"9rOk%[sg|QKe;BY#aIh 5^)!)Hk60ۢJpP5`Zw,g@!hvlkPEHh/Y`g435i9U "SʓM{Dd{YJ[Vɸf36w΋qf1FjHZ/ 5Z!.z-~_;KwҖA9r$* :UJ|#ndvFy[Kk9J39nt媪%&,P.*mZF)m-80_ MKbMQ?"40Ѯu < 'lz&ۻ|vZPTBbx. "EF.^ q7+\I`.h_-I}`ri.`8c-9Su] Xٞ#굕Nl pd0U+XH N T 鵂5N$Zv4nv%8Tw#,f0ClnQ D9*Yo浐@S*͎er`ƥwnXb,"-Xh1.៌P*EΞ$]/L $3Yg^F*!'ݒo e]V?RL!$TbTϱ)y碪R[Ԅ%Sqj]ăw[e f-\F ;Ȱ'6E"q -\k5dK(!;νbD#T;a,Lxwv4[07M%R&TUS@y[ OB/5<˘v%Gaz6a08&gLtl$ІKE(QkX0'ґT/LC!W]x0S-N=0`V_[vO5 ?\jm j\ΐv.i#^"ui8=pJO˨.GP hQV9Adk> vLl =&sU43 ,J;%[Nq<,$X1r2+:Lj]Wb#1b!ϱi̖?]u,.6 zlNa}L JnDQۯgxف)'@~Hn^7ȢZ cqso%a^2< 05kRS=ՍO4TE4>᭘,a_rǿ!+wI%8PTt`q#; b1U5!S+b |r6csFZ$1knW[5+Fӕz3(Mht+Bv8nArOپ'U(>m]>q@Ql tɫg,m~KQo1`>i"m h+=ͻ#c_6|3臤凍›+bqDZq]ɉfy|QcGqQi iSnvuARg7A1L D8jlMʜVzoVE ޚ RvC7ꡑ +ׂe_4Ok„ Ӕ5Z&$;$[87³ ݃Bmb]Tw..q˩>YB-GD$6zK 3ef{l<=m\P@+6E*h *2UHY_ly̲siMv̳7 2)ӚɅ:krImv.+w !Xݛ#ECi$8ROzq>1D)—7Dz( Fܔe4 kyӦu e]N}ÖWN_[ <MC8CR%ۣC'"[Ga؏ǒb,c.MĪdFɇ&WbE ~<҇y.IW%@_pN<]mF6LQvv4aK>*S"UIGM3)1Iyh@jw[>'PWcR­B2) L fHPmCs<5hg1[*9aJ78^˷쒽цbyq!:LH$FCN(jw\cC& ߅RLK"_Aiew3C n\$|5o#{騌XTٲlTuI [: hgDͨ#[*̆0d)_zgC<싕Fmٚ.\ jb0%u|+@ʱx ʨK{=\W! N_`IQO7JD dw(-@YH6n^Cm07f#cLj{bl-ځ㴤Aƾ0AL*A$F CU'C$3n2]dmm=TQb{3 $$ _urQtvUY{ c fZ~xUZ(MNI̟UG߮gyZ2~]epr{7.N#^Gln{IApLV鍻)0;{2c袌L°E*Lnh g.m.GPCDomIJ2=<@8EZU|albFX;ozY<$H~H A8РuY޴OرT{n3*‚7լ>C2N~+ eN/Te ت\6C , {/J~i[C`~v}?M/42raDLE>Xt+x& YlA dKi;GV}А.E]n˯7lYVC%$dCPk5ĉ&CvTk9e컗kRѪQ܆{|Q51拀O>s$bo枫t2~ AL#6 }ԲWʕ Q+paF)qcn"9Аڀ$n5r6\sn )IM2DVlmHj_#By=A RۖucՑn}K;"7Ě;fk<v\R:݈ͲejSr]e 1nĝ\\i/j >9-klN2JKsSdTY^o$pNpĒpxNviuQ7cǘ(7b1:DЩ\pF)l1a"uX[sGZr"M)^oA Q5%TA7a/Ĉ+p3)tVD L1=buh %-y7BYR֡نʌ*D3bO FEP\K-ܘUS٫_ Um璈r!`#"Am`d}Cx8g"$: CyI\vinUz84/f '&/ E6Pd!fZzwo9ltep~ys0Yt H"BS^o3Oc|[ҵ7ǎt1Vi(*($eG|hRQ ~q{QEQ#=` :v`˥ZcMH6Gf>ES Ba-l@㽀 w{xi.0ST/e*mWPY\= ,+]O1q6x)YGF ЮRXé\b['6.Hwj q:ˆMX\I^cLqX 71&vѝqrYF #w * 1xC"/iQYf4;v 1f"h{C\ w΂1W"h{™Pc(ƦD,EUc`QiGQмXPPM򚳬Y-f1r2}d 7azk*ʕ),Z x2:PMjFlDrld {q\n2u4ӛce:`:$ 693щ#`JTx{x[.(9vK1P%KM~q3M7̔rw$<dxd[zw؟K覿o$ۻ*ȬVsN7&y>d*WE+R>Zc/ H`kC$ӎԕKf6im\O9'c6q0:y5X9)ffPG[8u$ ,VS Lg}ىLG|IY/|YPmKM<(j " S KV7\x5y8Als$;b&9XZy_L%%DC7T穹mnL`ƹ0ۣ[fR*l->+ #{.z8KU8V4oTqYS*]xkc`I!]p.r_1`/uS=SifZt7݀GΒ^=%,8+p/м2nVDe;(K!8upA'k!`ypG!5vVW쇠E?pcgq`n(|_GRF6QxKjK5T!Oq٬Pe@ZN1ﲻ fnL1pf)U"#@T8 ݱ̈AF1ҷsC"%1huvd^ZcuÛ.v͓ /֐D4$+/{h4l뵙r\%qCRE9Eۥ'"2be^ 3µ]OpE-4qWxS.Eey16"@Բ."PM쌪cX"#zC-<cmC ,٪AN 96{ARIrԳpNy۳f\1VHJ䲟GdCf<ubx '`~7R}Fw`HR[.Lp+\Tso 8.5Q7%%rIJ?fO3FY]L(:炿ч/\6Oc7x k ܩSIѳ sL "@L~\Gc8loL4`[CssJaɞ?˨A` (Ybj_r3K3+ $pg[g)2 S}~{&Wcc` e*R$p{y<]Hb m01BLoDج/vLv-D<6}`܊.~ױҳK`3YWwءt^sA]E hX.IF`9@ؾ[n!'rp`}>7u:xc.b4H٩~EyLGSH b>ePDl6Sxhj _cczc2Rm*J7o"T%f֍cݹK*L="Ӌq`XTCKMZ 00YbC&rROv:G*KƎ2]K&rn@u#F 'K,Ҹ3Fܓs`:c󛠦N|2Qڌ3-(ig/.Z OH2&C$5/1fx.JkBYITb1&9F5: ,y4/3ѭ/=y3 aށ֔ꍺe>܃luxYF 2hͰ xe欘l1aˋIKgGzTq Kٜ,^0D0#E NnO3]t7C3 >(%RcWw #>ʏ&*DNWW,UK8tjn%"t 7b PoIh$cjNJb8j:fg>78+ nQC - 5O9OԀAKkch aĿ!}atL[ IdR+,a4-9^]kRP73 QeޣҘQX-~-eS{%}yd63tT8,2]F}1ǁ\TKzRjBO7h^B\NrD,"t[>3O{PW5tQKhb ҹ?fY?B@gJQXZNs Ag6~Oǧ̄d=03mPNPuw ts"~>>56ް&[ +tT 1q[l.ILRO19}N3 3]{/Z:xY%ZMM%|Ds.VN[t U jLW Vl[|% jf`GpwT*H'2k敖ow9<ef lئenADZí-ޛj5 yk[(֙*܈P}jͽP1 \(̼Y,nIi4>$tc\ (pB)O/T sڻmlX=jl^:61Oö1"`;)R<f 0\\g`6GP‘AmO5쾤f6dLHŹ.I]puM_^jNjh/`)l C@Lb5_m_dI1-K3f oرNvPNUrgҙp&sg,ʦ:ȵYfޘϱ 4gZv*Ȥ wA(o|8B *!B(5cfR1l].OU*+[gcPNE^rsN9l6ՆP{J RǏx c-teh_p#83fhADg0Ui>=n俴C|?#ü/N 5_Vfp;/OP)D$`p$PLI/6pu P$O֘Z1{e}sY fo$nrs6ξep^xuiU !(A1Le6,1 9bKinp2* w3wĮzIr'q`Lv(o(.U٨$,~6;9@ߌFKnx9ϔ+r }U%ې]qSV?,4Dx{ '@c'(ApxCz4MkJ^q%祑W+9zLOŃ h[—lr٬}y,ܒUd>OjG]E 5 ]I8 ŇD+¥ K#u}nR&nw›u. U+xh!jN۔H+`\&96H*mN:Bv+d l䇔/Y[r`FZp3kۘ涰9ܬifBuÑrYs_nνh]GMKwePwcưhXwj/0jFDQl,$ t3b-& 7 x0;V*l0$<~ٚdELv]+(2+LR#r&êNքˠn& Bswsh6|ꢲ(ok k>CyHIK9 5/>1ï$5=o}6.ZpR mq3jt@ȲF" ћޭ6 o!SmvJL1~rOvAwI6n3::ǓX#, * 徭鹏@ND/QT۷=M:.&ydM!-$vmZu)ؐnԐ^Qh#$2 (/H.(d)LyfO(EK02^hMLjM,1i195 ҷ!޷3~`vnw9 LNNVFd4ŇN e1v==B#zz#3;ZiӸcr,[ vna?wݿċ"7ւR)jpVoR)be 44%2 ftsZ?0[@WNf}W6W*e] Y./tB{P+K?;.e̶qPN87%|+xufaa#J" ABM ъ wo8CYWEiGkݚgp#ɘ!>JY7]W1YQH܏u`A0,dA쇉3JX`b y2n T۾Pdh+6 +oXblX͐UݲfaH á5^WVi1箛YRgc I'b͕;'de-j w<6_Amd(ՑKnݲdѬ@"adI u^1/$$ gx,TܨE'Φ-욹(nʆwZVLNkVnt'R }fw-64!qP̗0 (ZwU`'٫ezcM䣷|1tX́z*3m\})H؛4!۟EK͉QK0xEc)sYJ""#6X$+I6uYe@fKcLDj%wäeU$t1+զ^>_bKjwR`t(x>=B1dۉd|ђF^VRTܒ20@*bI% [FA]zx֋a~J(Wȭdލ |Go|%c AGjXGa"beRѭu.c$ +@t/d M$~' cəo.9Q{kE7:}d![۽/2h/rWBۅ_agg>$~_}:ψF / J40MVlƚ;.nr3-:V{7ND¬_f:!&hMڊػ%[V0%ec#J5".8q6dI|}8S#nhmnbj`eXᥒ&ZLj&b .+ޥ2ȕ1ycwq5 M};s}|\ s)G jnZzҞf>Aߘj4ڢv ^iEpĢՌaVȍLc$Y$LLt?qHo6tG)F ͢O5epL w? O|8p騊K&"ު''^1FN5Hbmv2,00>j0-xڥ'tX{O mn=5nj Ichxp 3A J~ Lc%hA/$T ㋮6mhHAa Ue]`2 N2sC!!2uc`JhU/rR bu\DZ0i|C[qeh4J,EB{$ܳU|tK@XM%(^]edy. ae(X,o"8둶)!b@@P3{,3I=/W{]c" pQ3S0" DO73@WO'!jYdY۔5:y \cB`X Z ԣ2ϛ=&rW[-k0p=̡½pvCٕf׶9q;V3k2, "2I`M׿bٞsx¾*g9`MhjTgu6:.aGRXv ؜2A< 2 M4SwRp 首 :$%f%n7ƥDF?ĒA X4( ٝȁPxJjM`1JX{);è[ef'FB~)MG{z2>mN櫁\d(9l} \f{B @IDATQ0HxC72!* A+ ]_Jռ.|_D=Yszcdupr%']o= fAaqb,TI<b>"=,_*` f\+!">e5>>{&fCT!o,l"+l#%!Ȏߜa(6Ŕŕfqҩdm4yI0"kqhc!(׶[EG9u0sjuUҗy3L:!P3CU3\2SG]ȸ$XJps1FLC>\"D.XK8\yY eL1vB9,ឃpġD]!s3բ>[XrӬx1|Y:TR)tc_eUM9F? D^L܆\QQXUnj4ϯ <쌜o‥pv uF`Ec5,Wi˛%cJf fbmbQsl[GrU 'w5W8L' 2!= #n4XL6@H8Ff J3 /;|~ #3 VL$Q_,BbVb^xnΣMiEX!Xfҏ wy\HWi` Ll%|7WTDHkқۅ͌E{RZ>B滁Z``TB> 9 3ͮf+l7rh-8 m2eӼtuC9C710eԵ3F2 =?Z+UpZ"^Iyn ;l;x=\JwɅSt, De2$;BpW'fr*2_e/j*F X.c_ᥞG{] |.l׸lk)Gu] /!qUٞ`lCmֽǴ:j>f\>W`D962-1anx7pDߌb7O ${* ufZ ق\M7"1c]umzmT]Vt +:ŒVLv˵#*d=+ꅖD4c{VNR |qGvkw\;(yqB7֤f$`wJH +[։qdDl]nrN ~ DU3ͤ\{-D6܉Er#x:Č+uL[>2u9}2{)-bяH\3:_g-Vy ɬG^ӏu7#0$:]s~ypPHqv.Ev% oh G=1J>x(uu,%k3B3S֛]KQ6'j5(2c SJt)Y2 ~rK{& ҥ{,e~ 5{-.5~cϙ5)ݫnBbr>lV2R l];r-E^aIR,W<N V2{X֖&FqZ7mV3URo+aMFϵT,nAƫ3˥ꌄk9W_J) 5#Ī ?t􈼽s{v&UL^n{xeMyuG3g 8[cb,Fm&Va]7#,@eCF"HK=ɋ 1f} o_lţYrMzFg(10ö1_+R?Hb X̥cWPUpM3-h1)Za^aFl)+F%Zp Pw;_oEs? d(U>'[859xv\kUisM9Py)vBz%D6| \KA^)U~l*3`kHհgI (B @MR -u"C+ܲ玸@0^n2Cp) 3Z}YVF[[Iƚc]^h=KxOސ,a2 z5lMWܢ )^]Bظ8\Nqrv ۤ|#ǰwN{2PʲP>9lH08`Z4%@<'!m*'1(K`/_qujĖ<;d/"Ge}5~*Qo0MƐpݓbڮf.qs囻LdY`f}֓JX b .@sސ (Q\fR6(Yf̡sͦձ݀UJ~hiWYmg}k?Ф8 *NÔ[5G9$J2oIb^:[J*~`1b/ V,¢עYqv&Ig\KfCyGpF?+V.F) <x1S9M'9mYpP:̏%,nꙄ66v/1,> irpg2/]|py8CE萻_eF)Ptx@ᷤr,!D7K; 4^L9L\B"DkM3$ < @CSS.gmi )Zz?.^Y%C>.xwf{$~I_-=猉>"=`0C>c$3k| NǀݶQ<,2`3b42]#VC.&]Xs3# Rwe Uނ)ʐ+βY`#͔}|2|y0D3,Q8Y˖2?&_f9#ix;QfVҿ#v\x7BpVms{(J!&(lAB~~x59ߌ&_^igl5L] *0~ ۬Tkd|. G0vevVڠkc|{B -=\F`T1oa/Mws8&ys$[.*n):#'dJPAKx"ᬙxϮ˕gqL1)v\_~C-27,8k|šP"^')]2Ik=̚%%}ZaSW?֯mU{_C m=1I~~r*BI>A!Lv*$ yuc[VXqnpF2KbCAu6CKKxIb*蒀]|)H. uF\>&g.makmۺ #8it/ Vt̒sޝ&kԠ(G!UΝ Q`dn<A bCcOXc!-@oԃ&CEw,׼L!Ov㖬&:`eQZGO߹mR0X% ee୆cpsdMLǔ>,t~! Ԓ*DY pX}O/ &7l%Gsv"/St} %HO9vmoUG(ttSrfZpׄH8,\^CB+ .?({ #D pAa/ N 'g\'[2=Xv>g[hl1YbeyOzQ{5T<[--̜Iy|Kƭ,AN3O o٘穀/JUś:E=,M mc {7 Yq%&JV OFP 0i-3wU Uk*|im!~,M#ZeP{d6Hix=G4j_恖Q[t eɯkL =kNȣlh3Ql30#k$ 1dt,gru<{rHg 4;-e0 z Zw<5RXjȩ&>+聤0F ©oHmm/.94fF-8,!Mbhs=d-rrL8=wCT5|ȒX9Ŕݺ9_<MBD5t]ԯN"9Fa=ލQOnUA yйhK>vٶ232T&W9a^?RAե–@9LR+ K3; ZQrٳ>q[}(Yi99n?e`bg+ V@TtaSK"a"Fv)~-_I2 ¿ eITDXXFBR^(k1ͿV]L %f4իڢ~姒`PrZ2[x筬= qE3M61)gCzی}eT1DŽq|TD`uX(Fs̙f@LqVm_30RXcR0>Y Rft4تI3zxntK}N1$^ةnBư/Vs'D\^.KPH6S#0K|\Fq[iFAoӧF/>HGT],effigZL{rm !;eP{Ό7d 5LHz7gϸBiKdDofYۗˡݴ l9&(y0]Lq2Io:j{#G%Wt7 MKj,8tM޻ScE &k])s^pPcP[ 5eB:ARXmI"ۑj3cb`N\uOʩ:bMIJVLn*M,8.aqݘr%0"MtC1J;T)#@>Hnۏt܍E+Bq2byJq! U!Ljַ.+~{ ݙspOoQMXmP&9e,sջB59:K`lֽqd(x.(ޢ&sXtAHGd9,e* ,S1]v4>91zW9翹l$dkj?vݝ :1@`ZX>*AKsӘ2S#a20h78@eU|gtvQGU#-&N2B$Z#򤐢2X˭5_N]YoCVFs!)ҁtF`xDbө΃RfD ~w(:,8Y=+yjmnO3 Hlb6mU::KAU @+afGK Wp"ͩcQ2Eo.L/RfP@::?YF2ܦ|\lCrIeGfȴ|P"ǎ'tDF8,䖙f'u{NRR{R(醆8x2]fp\IՆ8jHԞ`|Q/Wz[kjsx8;%zv+TYVyszٌʏȡwwxJ^m)5L k*g!l>r{tDv~QRuj1jl%ZA7=H囤f/ Yt P|d[M$Kj^sxsĸ;D2 [:S9 x|X$&INYƥ'Kgr0!'Y lJkc"R *~;F 0˗+C L&XU!9勚0:<0 .7Ra!0%2D:@k$2BBjnƿ`I+k~DnpqEDPuӖM9s %;&QoX6L!/B: N'BԶβ{[e*Zۇ96cuVL)QvK=G47 HVf~;D! W23M!%A=CШ GE%!@Qzd%qNzcϦWVygkIbHƍC<,M:@H~%ӑRoL+ .,ORzpuY=o?8hu/Av=)@Q"d}z{o~ld YQ9j:2:l\)PܑRƶE]Y%rL io\e8%*%i9dQz|vYؓh] iP(>bVXʩ?*\W-U(lѹt7H<ƙjUS\{`hvw1Fp*R\8V3uϞ:`YMMG. n `IJ'~Px=g kY&X}LR[@j+[G&JZMv1#P{%A1X&' BPG`pvLkmb[J 9VbU91MC#[eb=n&ƢUCdGn\7D Rh3 yFW{,wXaEx"m``<ϮJzhsM\=&2LF>0SUQ:U6A|cdUنM^,!-zn myܥH-\%1$x<%!ҭbV1[T"-fۓr9L]D(3/tfp"YkKhhKڡE#+zqU(IMsVhu-͸CmobњcE4936J V]K؋0mصwY2/ ܬj\f_i Ά*Tx-NaZͬ!sY!`4C@6AgTƠ6a;Yiqrul!) ^2ZS /%T7(AX r@ Glfh2IoXM?9LT.yp95aɚ+B2`e`u+%!?`o'+d`sa8^ٝI8N5bf%\r58ぉDn + ՘jKHQZ 8s<^`JPtPpiFcn,RCg4+[,.mԅkg8 ^4{Z/V_)Wohri/#fL.PDZ Bk]v 3Cpy纬ؤN.=+!"AJ!c/L;ʵ;FQZ5[_B!޽kr0-Qa6^@͙ Qʆ%=:rg34b{M~crJTyiQNs%X\d\Ԝ-iPS-ndœK^HlB!;}PxHi&>>/pՕRL:7Fr̈́Ta$Vb\_YU3Ox'iίݹ/pГqHsKoB%X_xփAX^X476 :sa;jț}uɆ~SHcaʢ 9Nɒ*8 IB<5p:VAx&2W$,7-7x|$1lDN$PFfMŰD-mЫ  UP} ^tyuԏ@ú1pfLTk\KX8 -tP)=*H/x dvWŽx >[4EXn#Z|%v` uk7+1_y||7pD ,﹆u8vY/* `ݱ 6nldi/XnMw ;'pRܜUԡ1kIT{m'a< ώKmlvTDnԛ̀iu(Q\|* &Y\;ufe-"Q-[ !\f %ȋ/j튟2YbFxV3* jNTw,/~IU8CYSaX=DXf%֐R5 )ydgբ1##TWt8/ /X. g}e:0\DKA&$ȶmZ0oa2E5 n4{qjLYGڹi1;= sQy\ԙL6(xF]COͨ&sbɬ,Y5:jdMN.ɾ}R,4+L*1ckszU悆9 JW%M֛kg8m XNd@P`B *JTta*rkNT -yzshLMM8bl%Yseq.]7m9l;IȖ ق#I^;QdaȣѸL+heZ2Y} P%JLӓ){\VaHhXRQقr S h(%?wyʱ#7.`;A/xŠ%[5޼@Ӈ%oYO#\Ym!fhhw[ueIFn5I..8'0I6ec/.ÞB, @ߡhf2ս3&S E@2;’"K,IbL͛ %pUvƱ.3*ɫtM}1oL)5*uƪH`ipXQj /m6kbO%nD. LzcVJҜ6ߒ(:RpАǜt*}Af@)bPC 5 F͔5ܔHV9\n!EBGF޹½.Ee]UsZ\ k3Mff8*y%"6$Qm-:5"Zs6pDfÝE7n 36F< ֔8:nv0MCSEF$y(V洨f5@cA I2ĞH"M$P\}IB<|qsp{%py&I̓!F]4{DAi ds%'cMVNsד̓\꬯X<8RSq=R>+;/<`9"lIe)SDQ:̠^j:7(5B,{l3[\S]m vU`Ã䀖ҰؘH+{,Qj噈FNCJ1 isO٠@f$"{/$Fɢ얃%(7ETsj{b?wyb̈:wO&b$M.U\P<'y;:r;ɂZ.4H[W^*>xH\x`[~9RmĿBGf2_IPchԘ խVRmELWE˶46RE na,EF J "4["v\bxkGڗME밂5huu%Dq!W=ج*+nv݆g ec+fkzU(:swl2Zw{ D_0N|`d9Q&ٗ1B`z Ki9zY JֈqsM1[xl ZTE&9'd)Dk eVy~@IDAT/%(νhw޾o\UE gfDz}2|V]8>䯲~ƴ~xD"yfv3LU)6X( H1E(%B+K'uxc [_EsSG5yNu,rgH)’Nm@,VR.-=O|Aޭ}U6t@13H[7&E/ElhW%|A^6D={dhP5ORR^DtNu5=yj79_9B]6`2ӻ!ara7c ՎU3fR>w`x3Yyca%TH;e¨t3CcwEpci5(LoLG,>7FSNoni_?b& )=èeT9^s%I"#X&όI.)-1*cfpzD[P6&n)CEG,C|8 R͏#=~@_sjFnqvd/iLҁY;tX9%#7U%`4Fsz"Dhԁb Vݹ$6A{T\.Ion O WK*}: +X.VBPc'm}g6QU)vu4/1_WX -`X$:#`+ڕDe"uyhG)|_g$Erlu;6jtCNf6lSdl魝ds2}:/8:H9{X+NͳK1L5XD@e;]I]MV/d; W"kw*TImrD= ,&Jw6xBp^hXnG5< 8)ܞuBebT[4R mNAث04"ܭcVsw?[YifnivCRܗ i]ɚTy浫@TShx$T#Π8ߪenrx1u=>PCYjj!#N˘ ^̺ shtTTA`M!\ - S|-޿Yh-5Z{0fH2sT,_!.F~/.%V_;Z/"ѕrw0ۣ?Μ;/>RYn@w ’H^E}投א%2Z{ L.YY5$v;0xbUn%&ZHOTKj8L͜f\=c! q@(% fc3z&g6`᛫ZqbL2 MGHp$tL-y'bgID~;Re*@xQ7 @d#hz=M>?n xƝꉨ)`*/g?.4go2#ش'wIt MQU^`Ss,U"h4 Eh ,"뒅/~x'}Rp,--=;ތ75uV'#DfU8ϋ&K&Y-In%3&}DRAFdZ1o$:oKM 87EDf W`կj=wav*{Yl^$DqkǤ⬎i>l k}nS5p;PuÄ?6ΑD}5FBxŜ'6]e9f"H ^%5yͭ {`88U]( c~B&[f\H=QTPX %eqQ+˼:C"i\vnX{,x\0A:=4qP з&"<>ÙySG_\Rc,#W<&sms=q哄I!XȺZvvxUl" /+\f C4Kc K͉Юo%p,e;V)^y18 qgP+2 &s"pΜBdYF!sV!I{rQMd[bh fD¯Bhtcn¢r$H1_i,<,z-cU>cE.Jc~4;fe4iR#eiĬ@]%ǏNm&o!@}ƇFE0Xa>@ɣwh6؈l.lDv҈ѬژI*wW% Y/_-RrQ`-}ne<^O:lʷӒ)f]3N"b\qo(7a ;[D[5U"rG2+n00(4$zb9-,"XM["dX_ZIfJcyX9JZl\>BW}xRqyf!pPG`' I #/3 ̡Ànm /dя/u5|ċh$O30 >Xy u<)Dd0S 0z@\$U$go:Z֕1U!Ȁoʤ[Ģl v A3itU=6y3R>2-+Y *WOya멗)G5[`۸,ki.n,@N:I̶f%-K: NҘxŁn^t+Ls@pwDt,ꃫ3y#ip#nEXcno|Ka aS+œGvlP+huWAEW`f&lum,\ b`wf1S"E`?|%7h-X5^Gʊi q>藈iT3w5H UKi3Ǔ= \=7rWB(ЪHmh`4Gۼ7uSuWUg~;JYG'(1mUt3Lcu"vHrGG37'Fj35)& p(2UPJZv\z#&on2 p(PV l-e"+g3ő[uW/GW8ȖSyVCQ7fȳY $K_Wѥ@M=w\r3e}D;wJsUǪ+UA 2{tfsKJ4Mg)U?mLCrRg (Zm Øb_IÌ`0_yt_I7䟟!5i,td֞[.@^ֆy JV~/ X1{8 $XBzY֘V)UII 򂹄V9 &fMlUZ)n!>TرPRĭ|_ =60$!jb 6.--2\U)YtހBV֖pɑhI*\[{s2I ˴n7VQb| ${VRz>v[n>OlV$ ynAAfpM?`2߸i-g w3ţ:Xm~SK4$i}BگeIdURijQQЯOQz '޸ "$]JE#lӱ%5ŖjMyPHJ+n" p p1%|LFCW%ṙuUŸ f8fk@{: zlY1̎)IsE2&*IɎVYGdA+%dsu=LLLIrYK׏>~\%Az9ЮL>D``n쭠i1i >RYm/+NX>:o##w/ ;2b%-%SWX`2RSXTfkao2%;ꗰ6TWdbdffxD=LR@~0"8쥕ux,S6͉]{2];<6'8J\yK $Wvͷ;iD;Xc \ Eo1iLr @qT23D9TY,/FI稶 0/]E (v\89#Ue0jxLNsA$L*`Ř6f: U)xe4nDMl!f>2 QcXQȊdLVXl]J%%BgZQCςe@tr3‹~S&|J>`J;~iǁL=ꏜ+KrC%]qJD|"KsX΋#JiY}i*yIt `/KH6t76`=p'@tr皪k0KRq {Wf&g m!.nme] W?pI^W7wmBԉwɽgҡSEMJ9&wDnIgZ F1zM6ˍ#74տ1,e+Ev07ݛȹu)S }a8|sWLe,n 7 VU Ƅ<vTd 5 i2iSj y-!і)QQ T3[z%*:OZ6>I<Ӧ|7 $(n[ V*#U1MNN]3b0 XiXUjD,Yt{&U/rH+y \ (VPZs: 9Ǹ鰪peB/p0[_D~P w dXW]} [9Q]2>2:v-~3hڇ廊6c :EFsdZ5.jRa=^sCT[ ZmG!,YzA^K[b. {[Ĕ۴qI"]MZ51FFEVY,7*]v,`ݜpvα"!jf/m')&[ Ϧs;B ht(wZ(MvΩRV;VaPr1 o_֚5>M"Trp:)W"IfuzuIu7CF Nd~N"␭Zj af4fKz>0Z}L V֊9Y \*H{'!<)1Jʾg|q%w|;;g\7V~O&&Afe04c+4HȶQvFZ Ǻ~֊d,EkaЩEĢ @稐64YL_'~]Q1 K~̔E8=W6l›pȸ04d,d,_5/DbF.۲Ax)W W`9vyﳡ@,4ΪTQQXU`iWԌ2+83Bp-L jEkwM[3<~r݀c6/ v& rCn*,gitJtldJcOղRf{|E-J~#&jfp(y`uc/HA"`\E|e)&jtZZһX?U !^Vv7b2b79]rQhJkF(kݤ {aۢaQKnإ~5ݖX?*|mǓmShfDi ʈ4] =VKmfwR2q gLZ/Yr4h$k\,@圱Ò;o&U11B-f( L/2% $%`<2Y+سI6<[ED&iVްZ/ӧ0)> s)e`]yY9zs* _ɴǢ2Ek|E|; x覲l:myēaKKhulAűk4c IWH5b aCXr2)TqAv\N;|tGZ6] ^ GP)$>4hKW%)VLMn-.mEvH29):_Ydlm L& ƅ(-e䊳y |UAr9'eJWɚ mqd bηqX`„(zWRpxvQ P"Kx3ylEf32/cdٲT)L }\]) *Y@ XԮ km6s62koSÓԓc$j)@2x v~x3HfNBTNGw 4V(FV:Xp#vj^fQt6^v8D>/d⦍b>`o nz+;2F3KmM4E J)FX]"^u1AI5i'ނ:hܒ;vv@E !@e2mގ|p>9fdcndR|HT _Kk_;Z{g<+^ư=jʹm]L /H B[!'nfJb/uXWl7˭TZfʐPnw4LacyHQHg.2}N 0Kv69Il\_Z@/s-4,ͦ{ >2!V~g y3D%Z u/` AFmN&&릖+ A '޹=Yf\:[/̤on;rǢe5#T{FV 0ׄ0 !>\g35s}-#aڗe6aZHNGםCy^vSW_QEkPFmnjƃK.6=!@D,8{!^LR79=|7v+2"z?+Gqh:Ͳd4:?yD4-W 4Dٝ(J%VHq~P7LKzw`h/c'97YǗm{\] 0ɿc(A /)EK*\2m[Zy)X%3Qg)-J4J$Q󜵸A:ޮ,_u "t׊O]bjzr\Y `6a7ĥ+fJ|[rRS[0Y%xb%b#@x},`Ho @s0f uG(݃Y<#HgCt^HL$xUv)$o'׉j: R LV6)V 8n(4AqU3HgϭvKϐe{'Bn KҳȾB\3P KWQ\L`o,-n?u2a\6 )JjC7B4FP\*tAսxf!;xFUÝe%9t9W+t f-[YhO>L<K9ׂBlQ-[41;qxq2p*x*lx6F`DI +_)u>(&F T3fvP R) :Z@~w΢?cE؄ټ[7V7Ce i]?n*av =<6M.<=1A`fqa_GWg!Gg)W2pA/wwF?u*KV%zmjJ\ﺣˢ@wLkj /55:NU#٥ج]R[Gؚ.XrZFICGsH.on f6sc/- ].y2 :;U)KЭL+`&׼Sv[)DmN^f ϣ<= xKW1pWⷔ^"O!2b.2\Ȯ\VY4F+\$|$iIk-\T90 @ /FyJ\ҬX )t@(R'~;g)3ź_EnO{Jܶgi3JL6H72ȫ3&fHò-~(Nl{B"TN3)I&؛f76e+?˓B/mv.\­x4Mh)*/ ; ̣/, m%Bbp_ OrEe3LO(LbTSO%˓DAVZT>4>F?8דQYֳ+BZC [g0Ko52t'c`@ZXeb_RI+{2Rȁ/gt&HD# 1`Ur2?{Kie..xvvuI%TA7qʦn!RI6i%2 4 ``j$$,3eξlD6oe9Gݺ!WN0H{E*00h X#H~!&(XqX̘J#<Չw6Z45#D)d|<)F; =2W+Յ>=n*pZtϘ6PxϥU0+6Gсm q z;$2%tR UA!JB8Svx(>{ *qsxn2yj<٭3FnƘB|p0#5TV0'v<,_DfZ'әa}<. D`uiٹ&CcTvŭ[PGs84NꞩGɟp> cp('l^').{34(CV9U<bw {7ثȵg!-Ixς{D=6L-0U UћaX {o4\!S.#fw`LoE du<({4tcv$_vY~]Q_8(=3؝Cs}2;xK-6T9m!oW$ڤo7e=U&HUUz\l@F[\ԋ5gK1c !ftآ%JB4دy{ ۊ u:}?fc \E!=$r>JYYf1 hUփ>xC}Oq.Hc`uq_muL6+ʦO̷{qmT#stDzuyq&yqB a-V< c y%8"t" ]<<͕GLo~7.lE/&ilF,kLƅ}8qg$NlNG"s鶽*hm)XQ4vg"J7? \ma_"xu@Ra FjI)*{j:NuF氿{@8R"J#CLnBBXV52M^ 鹤p x[&XDž L#F9|f7\d#l 5&ዣӈk.3Qd,ɚE`M6HRIZH~2M/m"t=Û% jՁڬF+Lx,GC8,^Vp`<I78NZ.6~K&[x,w™v7"}5H|q9gv*~QȅQ8_,Oо`Bh,/AYB>. ,Kn.RОJ(я-z*t]A~xڍGB 夹fFzskwx"\1|ptbqz,@Fd;<1-^sM?]Oe>*G[|bϙ8m-D l`ûk^>u~ .?z8ifHu7ҋ\ w۰ 戅ҽ7#whFؐ!&9AO;xwYT!dTM5Nfl1ǎ!B=E \E-TCJnڲSґ_gDv+ϰ p.U}<[82]eF1_T5|-3'GgwĠ x·_£wlFpj4iR֤3Z{W'U 1De7$}vkmX RTS;|F+~~}7jmKo6n%[͚9^_2,T'͛5#?H3\5 `ru2Dw[(/f ! X:.q_jjG|'S҂6©6zAFWXgFټh\+,r;(eq'Fwc ;+drԈ_"sUDA0$ ` 0Sޖ *aש R*+.Ut~1% IDATMgFXܡEOpI;L`Bњk0ϝN9o[ZR0}6G R=nI3S\ObcP:]?œ6겴+|uVz5uM$8c)9H~ DU­3,GʀH5#v6XTZm- ,hQ[gXM 'Wb`` og4s^]SZ>ݿhx nO2c^)ǪX<룻h;Г =L֞R}RPT"XP9\HDص28 xUnI 8ӔIC>E(5;7a;a㒡\IJWapMG>yghjAR<:77Z%[- H,nVԳBUo(iP Q ư4O`=Mű$[&&~ suBy<ت'޽G@?}<6?I  P( %3ݻR\ rnHXŠ cW bۯ/@Sk<m8+ԣx00¾OwAKxDNuJ\t\Aߤӌ}=>.ۿd Dž^X-DCOގBX7=kb *l/oB%g:F? a|g;?(,p(\cx..cZ jx9$rMc|0~4e !n=vO3"SiJ{.+[̡`\oA؅=gkn#2Gz_=OZ 913QUӏU2Fm.Ex[>:{3{wjGM*Mfrخ9 20}+vr8M":pe׺*d TWxn!7bu(X5.M'z.k$qYMkx$ F%_r+ƠOH-ҌBJ'i,Y+))QKA6ywRQgg!ՈGX hZU靦.%{q|6#\J+9%x tnlFZ쌒Pa%f% "#kjF. V@(    ??99999)99999999????#999?999999999999)9339??9999??99?99999?9999??9??9999999)999'399999999999993'99#999??9993999991! 9999)9??????93''3999999999191??????????999939???99939999?#!999999999999?9?99??? !3?3#3-i/MilkyTracker-1.02.00/resources/pictures/IDC-Hoodlum.bmp000066400000000000000000000306701324432207300226350ustar00rootroot00000000000000BM16(1  MilkyTracker-1.02.00/resources/pictures/IDC-MicroKnight.bmp000066400000000000000000000306701324432207300234440ustar00rootroot00000000000000BM16(1  MilkyTracker-1.02.00/resources/pictures/Setup_Blue_Screen.ico000066400000000000000000000070661324432207300241760ustar00rootroot00000000000000h& ( @ssy{vwf&Y ?&hSTy`&33}tuSvzzsssnz|mrrckkccc}dWu[BfLLZ`aZzZZ_`ZZZTXXTTTHHHBBB_:;UO*j*3333&&---""":*J::M444444441B  7:>:>6:8  ::.,/GC6:-&,0GL2>A6:(!"O0NLJJJJJA6 FH?I6L6 6M' )3J:E:988D J:>1EEM5 J4 #;===K J $#%**+ J <<<<<<J J ( @̙fff333uf3zzzsssmmmfffZZZW^^UUUOUUf3|)j777...###"" @@2222222@@@@@@@@@@@@@@@@@@@@@@@@@222@@@@@@@@@@@@@@@@@@@@@@@@2 22 1=@@@@@@@2 22 @@@@ 1=@@@@@@2 22@@@ @11=@@@@@225@ @ @ @ 11=@@@@222   11=@@@222111=@@*"#%')8@2111=@@*!"#%'*8@2111=@@* !"#%(*8@2;;==;111=@@* !"#$(*8@2111=@@* !"2$(*82411111111111111=@@5 22$(*2@@@@@@@@@@@@@11=@5222$(24444444444444@1;51 2$2---11@115 22 ,,-11@5227&&&&&&&& 11@52 2@@@@@===& 11@@552 2 =& 11@@@5522 =& 11@@@@55222222 =& 11@@@@@55 6@@& 11@@@@@@@ 6@@@@@@@@@& 11@@@@@@@ 6&&& 11@ 6&&& 11@ 66666666666666 11@  11@ 11@ 1@ @?MilkyTracker-1.02.00/resources/pictures/athena_ft2_style_12x12.png000066400000000000000000000141171324432207300247250ustar00rootroot00000000000000PNG  IHDR Y& pHYs  gAMA cHRMn rIo!1OIDATxbb@Ą @p@(B  P8 @pDg``a1@( @pabB ьP@"@(z P ĀBQ@(B  P8 @p@,PπIB xp2g &#!N e @@(2b &HBt2bF/ء&!2bb( ! eb@]? q @ @G<@1!I0 #bBN;b@1!I0 L$@LH NbX `@@P{ b @1A(QV@L! R,@1D8C,N@dBq@A :E@p@(B  P8  r,2B  P8 @p@B R  R`eb@p@(B  P8  E@S<J R X#kbB]Fb hb+z @)RyY@@ @$>B @plBQ@(BJ4 @p@(B  P8 @p% E P2 @d@BQ@(B   2 PJ>BQ@(B  P8 @p@(B  P8 p B`B z Pd^ BE PB z Pd^ x x5̞ P8 @p@(B D@,HNc  &D @LE @@(B  P8 @BBq@@@@DV@LQ@( @( @(q @(@LHlBj=10Jf m XE4#@A+qH @(z@(B 8 p $00B  Lc` i BQ@(B  P8` Pj3B@(bA((E@p%E P P P P  @(n @n e @pm6B 7B B1 jwB @AN%B2"@(e/@@B@(B)@ e @p4B 7Bq@@(  P8 \@( P  P\@(n e @p@(7@J @ B@(2 @p@( @@(2 Pd@(m$BQ@(?@kBIRJ@L~8Wl x  ds@(BI(E@pE@ e @p@,a@(a@(a@(a@(a@(a @(a @(a @(a @(m$B@SBB  P@( @(E@( " P:Cw3ی`ĄT1 @A?P5@, (@(@(@(@(F  XyTg102B  P8 >$@!Y R7BJ} @(zE@p@(B1 P@@@4W4B  P8 @ *J@( X@09 RB1 P8 @p@(-B&B 7BiJ PL @`BQ@(B  S/#@ P@( BQ@(B  P86BIo%̀E@p@(BIo@(z@(B)C  e @p@(e@)@ B  P8 @p@(Q  @(B  P8 ~ @)@)@)@@(B r P  @p@(q @(^ e @p@(B  P8RJHBF VBz ,B &f"@8 P8 p 48 )1 @1! P@(9Bi} @( bB.e P7B)? @p@(B  P@BiJ P  @^ e @p@( P P P  P8 @11RFg`  $| ^B 7B P8n P  P8 @B 7B 7BOBI!T^g e @\b@7B @(B  P8 @p/@(@( @p@(B  P8 p p B  P8 @p^32#|  mb@p@(e/@RJn  Pbb@  P@(. @x Pzҧ pK3 @p%E@p@(lҮ e @pg 3@SBS f@L)@@ t@@ tʔ@1!! z X 2@( @p@(B  P8ĀTJ^ e2t@(22@(2 Bi @ 7 @@@1! 2B  P8 @p@(=#B 7B)< i hځe@X @(B  P8 @p@(B  P8 @p%7J^ a:B@(l e @p@(B  P8 @4W@(G@E'@( @RJs P  Pld e @p@(FJ2B  P Py = @J; P P   e @p@(q @(n e @@@( P*BQ@(@(@(n !xBɴb@p@(K)@(@(BJ Pd@(B 7B 7BQ@(@(-BQ@( P P P @( P  P8 @p@(2nsb@p@(BJ p eFp B@(B  P8Y6BQ@(sE P8 9B 9B1 P8"@(-E P8 @p@(B|%SE@p@( MjFLBQ@(BJ Pd@(@(2 @ PBQ@(B  P8  @p@(n 2B  P8 @(y P  P82L@(@( @p@(%@Tm P%"@(B  P  P8  PBQ@(@  P P P  = @p@(A@(2 @ PDBQ@"@302BE@X @(2 @vE@"@(y P@(@(B6 B  P8 @ P@(@(Bq@  P8 (B 7B xB1 P8  @p'@(2 @A 2Y @(@(@(Bq@  P P3@( @p^ B  P@(2 P .BQ@(y P@(@(z@(B  $bBb3 Ąf &$6@A<RʞB)m a-byo1 P BʞBi#J3 P  P8 @p@(B  P@()e @ @ |( D|D @@(Bq@! P8R @  @ @Lʈ3@( @p@(BY@(3 P&E PE PZ"@(B  #D=2B  ! ĈE@p@(BhBQ@(Bb@( @p@(B1 0E@p@(6BQ@(B  P8 @ Pd"@(B  MIENDB`MilkyTracker-1.02.00/resources/pictures/carton.icns000066400000000000000000001321401324432207300222700ustar00rootroot00000000000000icns`ics#H??????????????is32j\Ϫ ڃ ߼O} ݣ{Qm~ўNۑ\޴yp8p}f $1tƫs) $=GV' =S^& Fd\\+) ?vⶕ`+ $㭀Mf$ww ɬ薬 嵦|ڲa㿯ԡM*oʰfFKOcѢXVNi~Ooр2|KZqToګ2yG:`٬]E""˭u; UбHìٿ ݠ|ՋUވ҂ۈSՒǐTЋmۍ݅DQm ms8mk</JJ,vA.+ $"""#|8}8FICN#0|?0|?il32KH\CW ȩ` GͰfѷv[O2ê3v^iOGi ʃV!]\bMI6R}Xͮ&XpIenMFf؃*rh6_wkKn^Pl(!FUkðBiޚJ !I_shfoX> $+At[k^= %"hȊh6  (%2$0T1 "'%REF,˾0,? %O@nR:Ѿ~> %O@kSּy> %N@kSܼy> "?(T #I^uWuN伫x6@ "F`tp"޼c^? Bn׼m`A$.fӽgH9}f( M̯4ffXx_ eb˼m { r®n^p 'r䂳 ؛}vĖۉl䅉jwWlچP"Tv񲡅吥aC6Y}ŐⴎqTE< b} uVFHilԡƾQTFUtT#X޽Ƹo$4WGaW"h^m€5wvUHq~W|~yXR*sUHoqWxɳ )sVG_fWxpΪ )sVFN]Wyr˪ )sVFBU^ur˪$sVE8Mq˨5jrVH-"ZͨzɹzX7Aa.UǬ9hںQ аbzm{ ž: ٳ΁́ރ  v˂ ]yİ wحD˹ġf ˣq ҢݐD=_ C R0ӢAz1H͢A7F͢A6F΢;6F΢ړĹ2?΢iQ̤U<מg`қKsVy l8mk8&:m: :o9 6o o\ Sn+&qx~~~~~~~~~~;#B,B,B,B,P.ich#H????????ih32 3ytɻpBΊƼr ؎ǻq Cܑɾuߙ˽zHࠔ˿~x ⥛5 X (v槣܄ ?#}Wgs1²F K+"E%$+#<ah³$_vJ+ %+#<\!l{J+ %*#<]!lk{ɍIhԾ#vqٽxՂf™Ȳh xɩ\@cоe=iكKb8%Kxzz˓ZNspOB< Ouz걆r_J@?%Tu݀츑n]K@D]u澡o]K@K%cuư葳s]K?O%hucKǾp9[K?S%utb-cϤĽ¾@^K>]%tb"+c%ttb"&wKqvͬ&%o]K>\_%gub"&vKqtǫ&%o]K?Q%`ub"&wKqtǫ&%o]K@M%Xua%wKqtǫ&%o]K@G%OuO'sKqtǫ&%o]K@@%KuGqtǫ&#o]KA=#Czpqtǩ$Ao]JD7#WrpƱn`W@!6qľ¸|]6IĽzIRĽĽYeÜmpѧy yโ' $ȜWKio7y Æ ǵȑ) 3ɽ̖Xڮy[لĎ޽Ά b yχԪvĆeu—꽬g0Bیޢ3 ܽ&؅єۄ ҳfK h죬ngе޸vjﻣq 濾ءöò|w Ѿ˭|~ ʭ{Юz?%ugz%6Vh4x=So{ ~'3įw%=OҌއ> 7˭w%=NRV<(Aʮw=N|A'@ʮx%=O?'@ʮx%=O?'@ʮz=N ?'@ʭ{7N ?'@ʭ|}O ?'@ʭ|w ? =ʭ}qr =bʭf/ ʴw5U Ԟ]hrvā Ϡ گ?aw ڷh8mk 0E+K*+A+*@++@A @ymAi*A("B      p~ }  ~!} | ~ it32FO1ZZZZZZZZZZZZkZkkZkkZkkkkkkkkkkkޚ)11ޚ1Z)1 ZΝ11 Z11))1 )11ޘ111Z))11ZZ1ZZ1)BZ)1!!)BZZ)BZZZ)BBZZZ9΋)BZcZ)ZΉ)BZcs 11ΆBZcs ))ZZccss ZZ )9css Z))9JZZs)Z)91JZc))9JZ cs)1JZcs)1)19JZ ccss)9JZcssΗ)9JZcsր)91JZccssր))9JZcss))1JZcsցZZ)99JZ ccssքZZ))9JZ cssևZ))9JZcs֊1))91JZ ccss։119ZZZZ)1JZ css։!1BRZZZ))1JZcsֈ1)1!ZZ 919JZ ccssևJ91))1ZZΔZ))9JZcssևZR1 !)1BJZcΔZ19JZcsֆZZ1 ))9BJZZcsΖZ91JZccssօcZ1!)1BJZs{Ζ9JZcssօsc!1))1BJZcΔ 1JJZcsքs1)!1!)1BJZcksΗ9JZccssփJB1)!1))9BJZ cks{9JZcssւ ZZJB1)!1!)1BJZ cks{JJZcssւZJB1)!1))1BJZcks{1JZccsցcZJB1)!1!)1BJZcksJZcրskcZJB1)!1))9BJZ cks{JJZcր{sccZJB1)!1!)1BJZcks{ JZc{skcZJB1)!1))1BZ cks{JZƽ{sccZJB1)!1!)1BZcks{ JZZΜ{skcZJB1)!1))9BZcks{ 1JZZ֥{sccZJB1)1!)1Bks{1ZZޭ{skcZJB1))1B{ր111絀 {sccZ1!)1B ր1オ {skcZ1))9Bր 1ƽ{sccZ!11!)1Bր 1ƽ {sk1)!111))1Bs ր 1ƽ{JB1)!111!)1Bs{ր ZƽZJB1)!111))9Bs{ր ZƽZJB1)!1Z1!)1Bs{ր ZƽZJB1)!Z11))1Bs{ր kƽZJB1)!111!)1Bsր kƽZJB1)!111))9Bs{ր kƽZJB1)!11!)1Bs{ր kƽZJB1)!1))1Bs{!ր ƽZJB1)!1!)1Bs{!))ր ƽZJB1)!1))9Bs{!))1 ƽZJB1)!1!)1Bs{!))1 ƽZJB1)!1))1Bs{!))1 ƽZJB1)!1!)1Bs!))1 ƽZJB1)!1))9Bs{!))1 ƽZJB1)!1!)1Bs{!))1 ƽZJB1)!1))1Bs{!))1 ƽZJB1)!1!)1Bs{!))1 ƽZJB1)!1))9Bs{!))1 ƽZJB1)!1!)1Bs{!))1 ƽZJB1)!1))1BJs{!))1 ƽZJB1)!1!)1BJZZs!))1 ƽZJB1)!1))9BJZs{!))1 ƽZJB1)!1!)1BJZcs{!))1 ƽZJB1)!1))1BJZcks{!))1 ƽZJB1)!1!)1BJZcks{!))1 ƽZZJB1)!1))9BJZcks{!))1 ƽZJB1)!1!)1BJZcks{!))1 ƽcZJB1)!19))1BJZ cks{!))1 ƽ sccZJB1)!JJ)1BJZcks!))1 ƽ {skcZJB1)!)!ZZBJZ cks{!))1 ƽ{sccZJB1)!91Zcks{ !))1 ƽ {skcZJB1)!RJZcZ cks{))1 ƽ{sccZJB1)!ZZcsZcks{ 1 ƽ {skcZJB1)ZZsks{ ր ƽ{sccZJBcc{ ր ƽ {skcZ{sր ƽ {sccZր ƽ{skcZր ƽ{scր ƽ {ր ƽ ր kƽ ր kƽƀր kƽƽր ZƽZƽހ Zƽ1 1111111J!!!!!!!!!!!!99!!!99!9999!99JJ!99JJ99JJJ9JJJk9JJkk9JJkkJkkkkJ!kkJJk!!ZkkJ!!kkkJk9!Όkk9kk9ƚ֌kkck9ZZ֌kk 9JJ!c֌1J֌kskk1ޖ֌kskk!Zc֑֌kskkƀ{{ksskJւZJ! kksJJJ1 ksJJ) kssJJ 1JB! JsJ9 1!!k9Jk99Ν c999Jksk99΢ c!ƁJkss{kJ99΢ kk)9ks{JJ9!Φ11c! 9ks{J!!Φkk޽9ss99!!Ωc9 !ks9!!Ϋց !s{ 99!β !ss{ !֖ !s{ƀ!!֗sZΔ s{ƀ!֖B sƁ֘! sƁ֖9)!ƀ֗!99 s{ƀ֔֜R!{֓B!!JBc){k֓J1Rނ{skkk֖!)!{99k kks{֕ J1!! BB99k kks{!1B!{ RJBB99kkks{1! ZZRJBB99kkks{!!k9!!kcZZRJBB99k!kks{!!k9!!{skkZZRJBB99k!!kks{!! k19!!{skcZZRJBB99k!!kks{!999!{skkZZRJBB99k!!kks{99J99ƽ{skcZZRJBB99k!9kks{99J99ƭ{skkZZRJBB99k99kks{99J99ν{skcZZRJBB99k99kks{JJJJJ΀{skkZZRJBB99k99kks{ƀJJkJJւ{skcZZRJBB99k9Jkks{Ɓ΀JJ kJJք{skkZZRJBB99kJJkks{!Ɓ΀Jk kkJƄ{skkZZRJBB99kJJkks{!!)Ɓ΁kk kkkƄ{skZZRJBB99kJ Jkks{!!)Ɓ΁kk kk΁Ƅ cZZRJBB99kJ kkks{!!)1Ɓ΁ހkkkk΁Ƅ kZZRJBB99kk kkks{!!)199Ɓ΁ց΀Ƅ cZZRJBB99kk kkks{!!)1199BBƁ΁ހހց΁Ƅ kkZZRJBB99kk kkks{!!)19BƁ΁ހށր΁Ƅ {skcZZRJBB99kk kks{!!)199BJJƁ΁ހހց΁ƃ{skkZZRJBB99k kks{!!)199BJR΁ށց΀Ɓ!!{skcZZRJBB99k kks{!!)119BBJJRRZZ΁ހހց΁!{skkZZRJBB99k kks{!!)19BJRZZckށր΁))!{skcZZRJBB99k kks{!!)19BJJRRZZckހހցƁ)!{skkZZRJBB99k kks{!!)19BJZZcksށր11)!{skcZZRJBB99k kks{!!) 119BJJRcksހހր911)!{skkZZRJBB99k kks{!!)19BJ΀ksހށ911))!{skcZZRJBB99k kkks{!!)19BJJR΀ksހހր911ƀ!{skkZZRJBB99kk kkks{!!)19BJ΀ks{ށ9΀ƀ!{skcZZRJBB99kk kkks{!!)119BJJR΀ks{{ހց΁ƀ!{skkZZRJBB99kk kkks{!!)19BJ΀ks{{ށր΁ƀ!{skcZZRJBB99kk Jkks{!!)19BJJR΀ks{{ހց΁ƀ!{skkZZRJBB99kJ Jkks{!!)19BJ΀ks{{ށց΀ƀ!{skcZZRJBB99kJ Jkks{!!) 119BJJR΀ks{{ހց΁ƀ!{skkZZRJBB99kJ 9kks{!!)19BJ΀ks{{ށր΁ƀ!{skcZZRJBB99k9 9kks{!!)19BJJR΀ks{{ހց΁ƀ!{skkZZRJBB99k9 9kks{!!)19BJ΀ks{{ށց΀ƀ!{skcZZRJBB99k9 9kks{!!)119BJJR΀ks{{ހց΁ƀ!{skkZZRJBB99k9 !kks{!!)19BJ΀ks{{ށր΁ƀ!{skcZZRJBB99k! !kks{!!)19BJJR΀ks{{ހց΁ƀ!{skkZZRJBB99k! !kks{!)19BJ΀ks{{ށց΀ƀ!{skcZZRJBB99k!kks{))119BJJR΀ks{{ހց΁ƀ!{skkZZRJBB99kkks{)19BJ΀ks{{ށր΁ƀ!{skcZZRJBB99kkks{9BJJR΀ks{{ހց΁ƀ!{skkZZRJBB99kkks{BJ΀ks{{ށց΀ƀ!{skcZZRJBB99k kks{BJJR΀ks{{ހց΁ƀ!{skkZZRJBB99k kks{J΀ks{{ށր΁ƀ!{skcZZRJBB99k kks{R΀ks{{ހց΁ƀ!{skkZZRJBB99k s{Ɓ΀ks{{ށց΀ƀ!{skcZZRJBBsk Ɓ΀ks{{ހց΁Ƅ{skkZZRJ{{Ɓkks{{ށր΁Ƅ{skcZZƁ΀s{{ހց΁Ƅ{skkƁ΁{ށց΀Ƅ{sƁ΁ހց΁Ƅ Ɓ΁ށր΁Ƅ !!Ɓ΁ހހց΁Ƅ!!!!ƽƁ΁ށց΀Ƅ!!!!Ɓ΁ހހց΁Ƅ!!!9Ɓ΁ހށր΁ƃ9!99΁ހހց΁Ɓ9999΁ށց΀9999ހހց΁99JJށրJJJJހހցJJJJށJJJkހkJkk kkkkkkkkkk!!!!!!!!!!!9!!!99!!999!9999!99kk999kk9kkkk9kk9kkkkkkkƃ9ޛƃ99ƃ99ޜk9kƁskޭ k9!ZޗƁZƿ9ƾ֐ƽ9 Z R Z9k Z99!skk kkk kk 9 Ɣkk Jށkk9ZZ9 k99ނ kkk99k!9k999kk9!99!!999!! !9!!{ !!9!!!kR9!!9kkޒ!!!9މ!9ށ9{R !ƤZ!Ƥ!9Jނ9!skƣ !!! Z99 !!{sk! !!!9Zނ9 !!{sk! !!!Z9 !!ﭥ{sk!!99Ƃk99Ƶ{sk!999Ƃk99ƭ{sk9999Zk99Ƶ{sk999kkk9ƭ{sk99kkkkƵ{sk9kkkkkƭ{skkkkkkkƵ{skkkƭ{skkkƀƵ{skkƭ{skƔ 9ƈƔƭ{skƔ 99JƆƭ{skƔ 99JJRƃހ {skƔ99JJRRZƁ ƭ{skƢ99JJRRZks! {skƢ99JJRZZkk{{!! ƭ{skƢ99JJRRZkss{{! Ƶ{skƢ99JJRRZkk{--!ƭ{sk99JJRRZks{{99--!Ƶ{sk99JJRZZk{9--!ƭ{sk99JJRRZkƂJJ9--!Ƶ{sk99JJRRZkƁRRJJ9--!ƭ{sk99JJRRZkZZRRJJ9--!Ƶ{sk99JJRZZk΀kZZRRJJ9--!ƭ{sk99JJRRZkkZZRR9--!Ƶ{sk99JJRRZk΀kZZ9--!ƭ{skƢ99JJRRZkk9--!Ƶ{skƢ99JJRZZkކ9--!ƭ{skƢ99JJRRZk9--!Ƶ{skƢ99JJRRZk9--!ƭ{skƔ99JJRRZk9--!Ƶ{skƔ99JJRZZk9--!ƭ{skƔk99JJRRZk9--!Ƶ{skkk99JJRRZk9--!ƭ{skkk99JJRRZk9--!Ƶ{skkk99JJRZZk9--!ƭ{skk999JJRRZk9--!Ƶ{sk9999JJRRZk9--!ƭ{sk999JJRRZk9--!Ƶ{sk9!JRZZk9--!ƭ{sk!!RZk9--!Ƶ{sk!!k9--!ƭ{sk!!9--!Ƶ{sk!9--!!ƭ{skƤ9--Ƶ{skƤ9ƭ{skƥ9Ƶ{ƨ ƭ֬ Ƶ! !!!!!!!!!!!!!9999999999999kk9kkkkkkkkkkkkƆƔƄƂƀt8mk@MilkyTracker-1.02.00/resources/pictures/carton.ico000066400000000000000000000236261324432207300221160ustar00rootroot00000000000000(fh   00h00( f`pwvfwv`vwvpffgv`tggogp@f`??( @h ~WƱ5"S+u[ٷѨ'<jI-}m\եps1ܵrS8tV9'VȷW}VF/F0zaӟ`#qsgBbŃ[N4O1L ϱPŢ|"ҬrVbaBZ:R!ԜC¡ѴzJ3b2||:*C͈jU~UwB>sgB/Ā_ީtP9uS6fH݇ciMP~V4[D~Q̩qt? hiK|D}eLZLwTh2hZw2wTweZw2hTwehZw2ZTwehZwTe2heZL Le hheh hLLeeL??( @f`f`D@Dwt@wwwwpwwwvwwg`fwwfwGffFfwgfw@ff@FdGgfw@ff@fdGgfw@ff`fdGgfw@ff`fdGgoG@ff`vdGfot@ffpfdDgwpf`fdGwfow`f`ffwffgwff`FfwDGGvf@FwDGf@gwwpgDppdw@GFDgpd`wffwf`GwD`wDfwDDf??( @    $ (,/1259=@BBC F$I(L-N0Q1S3 T3U5W4X5Z4]2`2 c1 f0h1k1n1r1t2u4w6x9y<y@ zB {E|G|I}J}K }K }L}O}S$V(V,X-Y-S$PQQRUXZ[[ [ \^_acehilosvwxyzz{{{ yyy{|~~}}}{xv"q%m+k0i3h6h8i9k<k=l>n@oApCqDrFrHrLtOwRyT|UW[]]\ZXTPNNڕHԕEʔCEFOU[_ejnrvyz{|Ģ|ʥ~Υ}Ӧ|צ|ݧ|{zyyz|ĚƜƞơƤƧǪȬ˭ͭЭҮӯհֲӲѴилѿoooQQ}QQ6666''''ķ}ķ}}}o}}}'}oQo'}o}o}}'}oQo'6}o'6o}}'}oQo6Q}o'6o}}'}oQoQo}o'6o}}'}oQoo}}o'6o}6'}oQo}}o'6oo}''}oQo}}o'66o}oQo}o}o'6oooķ}QooQ}o}QQQQQѷ}oQoQ6}o}66666oQo6'}'''''}o'}oooo6'''o6'66Q66QQ'QoooQQQQo666o'''QQ66''}Q??(0`f`f`F@Dt@Dwwwt@Dwwwwwwt@wwwwwwwwpwwwwwwwwwpwwwwwgwl` lwwwwwFgff lgvwwwDffLlfGvwwwDff@LfDGvwwwDff@LfDGvwwwDff@lfDGvwwwDff`lfDGvwwwDff`lfDGvw|Dff`fDGvwtFDff|fDGvfwwtDffp|fDFfwwwwtLffpfDDwwwwwwpfflfDwwwwfowwwFf`lfwwwffowwwff`llwwFgvGwwff`LlwwDGwff@LlwDwG|ff@LlwDGwGvf@ w f gwwpwwpgwfwwGGFgdtGpfft@pvflgpvfgpv`pvfvoGvotO`tO`tO`p@@@ `?(0` ʦkH%zbJs2PkHs%WUI=1%sPkkHH%%sPDZksHW%UI=1%sPԎkH%zbJs2PkH%ssPPkH%zbsJP2kHs%WUI=1s%PkkHH%%sPDZksHW%UI=1s%PԎkH%ܒzbsJP2kH%ssPPkH%zbJs2PksHW%UI=1%sPkkHH%%sPkHs%WUI=1s%PkH%ܒzbsJP2kH%ssPPzzznnnbbbVVVJJJ>>>222&&&압쌌썌 씔 압씕 앃 앃엗 엃 엗싃 싋 샃 샃 샃 쀋 샃썗 샃썕 샃썕 샃썔 샃썍 샃 씔삂압삂압엗싗싋?MilkyTracker-1.02.00/resources/pictures/carton.png000066400000000000000000000073141324432207300221240ustar00rootroot00000000000000PNG  IHDRoPLTE!-!9)J)R1Z9k9sB{BJRZZcks!{){)19BJRZZkZZZ{Zs{ckϧ*tRNS@f zIDATxZ w<m5kӏЂ_E new‡ۜcܹLLYe|1/vgUs*30|9;H@ׄ,`7ot%0vqACwr;Ob|@پfD;rX.Gg9SpgSt彴Ô4rf!_mCחy =f1::B:(5)Q|T{#EC+}sBL;`d$6HW ҿ"]oc/hs;Sb aggfL23I5-IRݸ0>,Q^9kPA8b:q)g⊓uxI83^^uu`dy3rljϴ]_rAOM@ܣnLIrpE['J6>DмV\c3O.+t4x 9 h%zR+ l'1`OĀ2 BPu$%3䠼,%3j/x5k&=E|f ed>CGϛ%h l)QPl||J q>f{Mg{+;J_mHJUcb[!i5>˘KE*xfPJO7;qmT ]ƫ=}4w ilKEh"_D$1}4QS-<:Sø]Rаћ r<ЗαW&,Dž j0o#S&^9\%PP,n '\#MOt]G %0X 뫃)HS0`"f $V@cRzCU(@j z5 X l#O%y\$/*2/Z Gf4qj~!); d(NˀK'IR99b~&GAs$KBCR|[-3iZy4 :$iQ5!VA4wA+E X H/ @Mc.OT& >Sw*7T]8$歂"bEVjK6Dt9d.{MuqUSU?n*JC ɬ>aжoڭ+εv/5rW x~Xs# 6'Wɪ\n&eەˠWS(w. ~+ hᏕBc*@arsYO LO{n~hI!74. ȼ` _ɾؔ Ӵ!b@x &'\!'gM|[pP@̞ &i6W#X @l>Bg8MLaȒ'z6*74Dr 7>02As I`g1\U `mD<`, 2-\fG8#A[q=CA1f2Ȟ䶴 :;qj Plߪ!AP[liIDBq$Pz%OOD1$Q$+ I"$!Awj $O4%7Y V"`'/<>fq<4:kA0B$ /d yޕ{hL l'Csj_?W'.baTt#?BzeJ()NƇ"#4 cB$1m;ǿ(ϛ׋?c7(O=FeɃ#)fPt\n']/xWW9ӄ# W,%![ym u**XkM:g? n֊@oKW{S"W"Ϗ !WAhH@++`K۲%ӔƗNjl1`%FI+S$ <t:_H`W$ȍDVcN+G zǮ4#*dd9UZO|#ŀFmDw8n6 Qmb XQ]RZ̈XԼ.͈jbNʌia"^UN5Lam.|ЍJR ,j"vmBIUNؿ@ftBUVlŻ L&_qVc}&_Z x.$Bf 1[$(}u)~V%oZVr[tD\DO8ʟĢkDIENDB`MilkyTracker-1.02.00/resources/pictures/docicons/000077500000000000000000000000001324432207300217245ustar00rootroot00000000000000MilkyTracker-1.02.00/resources/pictures/docicons/osx/000077500000000000000000000000001324432207300225355ustar00rootroot00000000000000MilkyTracker-1.02.00/resources/pictures/docicons/osx/genicons.py000077500000000000000000000101571324432207300247230ustar00rootroot00000000000000#!/usr/bin/env python # # genicons.py # # MilkyTracker document icons generation script for OSX # Dale Whinham 25/7/2015 # # To run this script you will need Python 2.7 and PyObjC, which should both be included with Mac OS X. # # If you have upgraded Python using homebrew or similar and are missing PyObjC, install it like so: # $ pip install -U pyobjc-core # $ pip install -U pyobjc # # You will also need Docerator 2.0. Download and unzip it to a directory called 'docerator' in the same directory as this script. # $ wget https://docerator.googlecode.com/files/docerator-2.0.zip # $ unzip docerator-2.0.zip -d docerator # $ rm docerator-2.0.zip from os import listdir, remove, path from shutil import rmtree from subprocess import call import sys DOCERATOR_PATH = "docerator" APPICON_PATH = "../../carton.png" MAKEICNS_PATH = "docerator/makeicns" SYS_DOCICON_PATH = "/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/GenericDocumentIcon.icns" ICONSET_DIR = "GenericDocumentIcon.iconset" ICNS_FILE = "GenericDocumentIcon.icns" # Add docerator's folder to the system path so we can import it from another folder sys.path.append(DOCERATOR_PATH) import docerator # Rects calculated by running flow (included with Docerator) on a template designed in a graphics editor (I used Pixelmator). # The template is the OSX document icon with the 'carton' pasted on top as follows: # 128x128: Centred horizontally, translated 33px from bottom edge, 60% scale. # 256x256: Centred horizontally, translated 66px from bottom edge, 120% scale. # 512x512: Centred horizontally, translated 132px from bottom edge, 240% scale. RECTS = { 128: (1.4138, 0.5835, -7.3221, 0.5953), 256: (2.4603, 0.5952, -14.6274, 0.5975), 512: (5.9676, 0.5970, -29.7340, 0.6000) } # Dictionary of file types and their extensions FILETYPES = { 'MilkyTracker-Protracker-Module': 'MOD', 'MilkyTracker-Ultratracker-Module': 'ULT', 'MilkyTracker-PolyTracker-Module': 'PTM', 'MilkyTracker-Cubic-Tiny-XM-Module': 'MXM', 'MilkyTracker-Fasttracker-2-Extended-Module': 'XM', 'MilkyTracker-Disorder_Tracker-2-Module': 'PLM', 'MilkyTracker-Game-Music-Creator-Module': 'GMC', 'MilkyTracker-Digibooster-Module': 'DIGI', 'MilkyTracker-Digibooster-Pro-Module': 'DBM', 'MilkyTracker-Velvet-Studio-Module': 'AMS', 'MilkyTracker-Digitracker-3.0-Module': 'MDL', 'MilkyTracker-Multitracker-Module': 'MTM', 'MilkyTracker-Epic-Megagames-MASI-Module': 'PSM', 'MilkyTracker-ScreamTracker-3-Module': 'S3M', 'MilkyTracker-ScreamTracker-2-Module': 'STM', 'MilkyTracker-Imago-Orpheus-Module': 'IMF', 'MilkyTracker-Oktalyzer-Module': 'OKT', 'MilkyTracker-MikMod-Module': 'UNI', 'MilkyTracker-Digital-Tracker-Module': 'DTM', 'MilkyTracker-Asylum-Music-Format-Module': 'AMF', 'MilkyTracker-Digisound-Interface-Kit-Module': 'DSM', 'MilkyTracker-General-Digimusic-Module': 'GDM', 'MilkyTracker-Farandole-Composer-Module': 'FAR', 'MilkyTracker-Impulse-Tracker-Module': 'IT', 'MilkyTracker-Composer-669-Module': '669', 'MilkyTracker-Fasttracker-2-Extended-Instrument': 'XI', 'MilkyTracker-Gravis-Ultrasound-Patch': 'PAT', 'MilkyTracker-8SVX-Sample': '8SVX', 'MilkyTracker-8SVX-Sample-IFF': 'IFF', 'MilkyTracker-WAV-Sample': 'WAV', 'MilkyTracker-Fasttracker-2-Extended-Pattern': 'XP', 'MilkyTracker-Fasttracker-2-Extended-Track': 'XT' } # Get system document icns file and extract individual sizes call(["iconutil", "-c", "iconset", "-o", ICONSET_DIR, SYS_DOCICON_PATH]) # Remove Mavericks-onwards high-resolution '2x' variants, as Docerator currently cannot handle them for f in listdir(ICONSET_DIR): if "@2x" in f: remove(path.join(ICONSET_DIR, f)) # Rebuild local copy of .icns file without '2x' variants call(["iconutil", "-c", "icns", "-o", ICNS_FILE, ICONSET_DIR]) # Remove previously extracted icons rmtree(ICONSET_DIR) # Generate document icons for name, extension in FILETYPES.iteritems(): print(name) docerator.makedocicon( outname='%s.icns' % name, appicon=APPICON_PATH, text=extension, sizes=[512, 256, 128, 32, 16], makeicns=MAKEICNS_PATH, background=ICNS_FILE, rects=RECTS ) # Clean up temporary document background file remove(ICNS_FILE) MilkyTracker-1.02.00/resources/pictures/drop.ico000066400000000000000000000004761324432207300215720ustar00rootroot00000000000000((  ;f) <Nm2^˶!!+1 C S bM0MPf?MilkyTracker-1.02.00/resources/pictures/ft2_style_12x12_spaced.png000066400000000000000000000144171324432207300247270ustar00rootroot00000000000000PNG  IHDR [ pHYs  gAMA cHRMn rIo!1OPLTEgvcyIDATxb`@  @( P@ BA  0bddeCx @pB  B  @PE P @( P@ BA  @( P@<&@pB @pE@  P @Ё @10 @ @x eb4@p  @( C  @$B  P8  ;s 6@!4 b` 20 Y Jb@@1  B ঁ0@8 P@x P8L  @( P@ BA  $@(B  P8 @X @( P@ t@(B  P8 @pRBAJ,aRJ@( /@p%"22    P8PB @p  @( P@ BA  @(n @9BA  @( P P$  @( P@ BA  @( P@@p  @(Ba  P 6@p @(BA%J @(B  P8 @pRBq @ B6@;"@(B  P8 @ P\@( P"  6@ @(lBaJ   @(6>B @@(B P@( P  P8 $ B  P8     @8 PT  P@(B 7Bq @ BQ@(  P86B P8 @X @( @(@(. @@(SB 6@p @( P@x P<@(BB @p@(c2B1 P8 @d B B  P,   @( P@ B P82B  @( P@ BAb4@p  e 6@ BA 6@ @(2 PTJBA  @() P  ="@( P@ BAB@ PTJBa  P @( P<@( P @ԧ" @(BA"@(BA @ 0 @%H `0 @(BQB P@ B 7B 7B  PB @p@(Bq @ B)9E@p@(zE P8 @@( @(@(@(B  P8b4@X @( @( @(  P8 @phB P@ BI;SB  P2@  P8 K5E@@(BE P8 @p   X @@(z@(BBA P8 @5@  P8 @ P@@(@(B  P8 @X @( @(MCB1 P8 @p@(B *BSBq @ B@(BJ@(& @ @p@( @( @p@(B  P8BA2 @( !SbIB1 L @| @(  P8BA<@(zy. Kb@v@ P gd {5%YB  P8 @p@(cJ6 @(B@(~ @p@(BA B  P8 (@D0@D0@10 MJ J= @ B  P8   p = P8 PT  P8b4@@( @(@ @(B  P8 @p@( P@ P8 @p@(B  P P\@( P  P8 @p@(B!e]@'bB  P |B)n%QJ@( @@(@ P@ @p %@B  P8BA P8 @ B  P8PBq @ BB1 P 6@ @(lBaBAhB  P8 @p@(  @(Z@(  P P8b@p B  @(^ - @p@(B  P, @( P4E?@@(%@dJB1 P@ BA  @( P@ BA  @(y P$JP  Pƈ  @( P@ BA  @(@ P8RJ  P8 P @(  P @p@(B1 P\@( P@ B 7B1 P@(B  P  JBA P8b4@p@(B  P W  @( P<@(F  P@ P8 P +x<@@(B"@(B  P8  @(. o  P P, @ JBAb @pNB1 P8 @p@(Bq @ BQ@( P<@(@(B  P8b4@X @( P@  P8 @p%mb@ B1 P  @pe P B@(Bk B  P8 @p@(B)  @( P PY @p%t@(B P@ BA6B1 P8 @p@(B P@ BA6B1 P8 @p@(F  P @p@(B1 P P8   P @p@(B1 P@(B P@ B xB PL @p@(B  @( P@ PL @tE@p@(F) @ BJX  P@( @( P@@(B  P8 @ P @( P@@(B  P8BJ PBA  3@(B @(BJ    P8b@  P8 ;  @(  P8Rp^BB@ @( P@ B@ @(lBa  P ;6B1@p%0yg@  P8 K  @(B  P8 @p@( P@ P @p @(/@B  P, @( P@ BF @X@(B)@(c  @( P@ @(  P @(B@p  @( P@ Bfb;@pE@ @( P@ BA"@( P@ BA  @( P, QB2B@( P@ BA  @(. @ @( P@ EL$IENDB`MilkyTracker-1.02.00/resources/pictures/milky2.png000066400000000000000000001521361324432207300220500ustar00rootroot00000000000000PNG  IHDR5 pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_FyIDATxw$y ߕ:OΛsD\,2@ 9'Q"IJ,]$[:9%1ͣ@ZA$؜'ΩG(YƵ_T=I<AATYAA  @AAA   PAA(  AAD  "AA  @AAA   PAA(  PAA(  AAD  "AA  @AAA   PAA(  AAD  "AA  "AA  @AAA   PAA(  AAD  "AA  @AAA   PAA   PAA(  AAD  "AA  @AAA   PAA(  AAD  "AAD  "AA  @AAA   PAA(  AAD  "AA  @AAA  @AAA   PAA(  AAD  "AA  @AAA   PAA(  AAD  AAD  "AA  @AAA   PAA(  AAD  "AA  @AAA  @AAA   PAA(  AAD  "AA  @AAA   PAA(  AA(  AAD  "AA  @AAA   PAA(  AAD  "AA  @AA  @AAA   PAA(  AAD  "AA  @AAA   PAA(  PAA(  AAD  "AA  @AAA   PAA(  AAD  "AA  "AA  @AAA   PAA(  AAD  "AA  @AAA   PAA   PAA(  AAD  "AA  @AAA   PAA(  AAD  "AAD  "AA  @AAA   PAA(  AAD  "AA  @AAA   PAA   PAA(  AAD  "AA  @AAA   PAA(  , Sz5 qʟw`pT:x306<ިi6rA(EU70R qPu<gqc;Ԗ(ktL m7EQbGy+Ϟx"t_ߤXn_7+dl|۷Zmۑ灪&~݈~g:ֆݖ'o;#}z7σk_=E@i:? {>THBׄʆ6۬BTy# mħO*Uec8.8qH(޶HcVoA /}v-:&ǏtM* ǿJ] j$4{_o>({- r PWy?Ķ,- ̈́&@)^ih;x˩+Avϥ4-\튴p[EU3G @A^#cx=w^W%(FDžQv*ubvTM󨊂aԫOQ? c&e (ȋ},]:unASK54uy ພ !< qL/t7ҽu: <\M0&u]PHp=n*xf²lVO?Xd JJs<j,:z|OQt=IG0e8EquLn|`ghETK@|"A(kbmݏkZvEau7VXm}x\]w Op#284okҙ,?^ʸMKA:8_ImpU`CZR4_0 t=yr]p]7;91 @U_#C3z159Њ繨22#8N7.Kop$ӹNșUt*CZ'SmD8Vc/\DOqPE7{'R,C7OWKZ5X@A`|G+e{?Q]RAUTjc;<^Sz>>?Gjlt Rc´ۦEp]Sдn9tQq?}/J((O=q=sq\MQڴC4pC _!y.cS6|!Jiܩ# g1 O xcb\C+cy6rZǏeZ+_cϞP6}bkzԶO"¶h- :fK.ys,K _׬Zv"FO:U%\CEQT]mcd-}C_\zM>ڏm;٫OSWyྛH ?/p?Pn-{x{~7Im(y}FǰfOGZO㟐 р_e9}MQWkؖ9MPM~_MUX:|y]֩sCL/Va6Z=rL;=z%m;hh264=q\+tὸBB؎166=*i7 4|yft'RزN=M6o"!b+Wr(Ig@a`:AfضC^=4؁8&!xr>Ν}>O#FFN=K'{ח5ϛo86a۱rC]8#c8tJe*okEoƵpTgxt X$A6 0 >#U|) 7]USeŵprŘ3j'[/P.VO|Z*lURZfh9~ lk. u7}~+MS/^k7зc+iu)ǡ {by>rAmFQwMw={/|?{ܱ/*)y]R34\c#tbN8ãݪic|d|aFҝw?{>SԚ.fW8pN=lS]~EQQp󳧟3yx;&'u$/ ^ Iep=k2!McYvx]o  GGR>H슞H},:(PUUS<υ!TU+[BZm(ds~qMǧ_}T ~Y\gӨƆֵ U+^]wSoXWO^& NhߖPhѵf **U TU,=AǕC.:?K'|';~]4WjWGHɦI .;2F'(+2œ4|t&HI-]+/fŖmɥsFtN~CG{brv/b R)MUPnh 8r#LML* zpHgRt<a`h\.( P!;LgF,\15SEK CZ_ٖKɯU,X-+S6hq]7sl/}6m{23,^FXu=ڭ[S3FASt{ 9^"V@Fkxv AMK,(*Ne2BB!젗ֱO||TF.,:HX!VV+8A8yɯű#cem-c[i=] -躊4&nw\hA R1YJ[Z@Ms2lW]\e-iR=rvlۢV`6is'lˡmvfΠN _lct'#GR6!Pи l:`.adp9rd0gѱ:wFeFB.]mԲX(*ףR['5Q~wTU%3g^>J9z<p{_1 Tl ,4#;쁋B*c׎C,Lsȝ]A;=ӑlP܍zqf;RG&F|Iolw<wN&A%n?v07.8Ea}uef{6m~4t}Ӿ"~~q~(O|`7W(JSd,o~2yd?e;]N_Nq zq&&F-%ӎ١Zbg`A f5P&SUUfv^l{=t,u{ow :R%6۱>k=Q=/t;cu(y:t Q$jwHz@ ݈Ħj ,puz5?iέ|y4-r\T{ϑKe ͎cp;#^zx9ڷftWeRXxaO\fևb9rꫴ[&Sl6  _ z>ɵqnsҸƶ }4UUR;y=cdK5}2c3QD>~Gi5M?.&FgPZxa~},. 2`hJ\i(/sm/~7(Yuu_&UװTQ -T4UG Bs3;eB뗜n_hdu4 %Ёm8(d%Fgj}[vS<ı阭`UګEV_XY'JrC^8Ŗ-7Qc!9+5H:TzKnE`#3qۣ .qS&x.3 3ز_bG)W8f|b;|\A ?w~#WjlăW8g zSd)ZbXoT(B>˞4rS,3*{Q7F/<ںݣwmS W 1n%K(#k= |7Lu=65U VZ{ٓTZ%An%U(MSeR3ŵ;wP%c[sV,86BMSb4[qkӝDͥav,M_d2;Gyv TJS/Vhvs=yWb"N?ds9t .?bqHE.o4f=~FCQ k+kwN* s/y ]%u;>y%]󘞟f*KsJʗ_dͤS퍴/{joh8r/C_L(L2,}}YvBFNfL`z84ϭ(*zkUU"޻oIW+'qu CǡX^1*ms]t"ML0p]ӤVg(:fq<~C`"2na}n NXc~nyG ܑ(LpŗW}9SFP]ǴM ˶}k=zqtxl8 ^hK'j xLM癧~G}}1)'q  A ?1NDzIDgi xu74;ٲZNO k5pZKKLQ,?ҳͳݺu+Z:cdU'(% \Tv6#Vf.o&x$?9ttg/bBC{Y~s.Ah-(jQ mx]/Nk>2l/c"JlCo rL: *Z 書-q[+ߋHX y?cDS(<ף2{ \[JP7k[|fI5;vϥ0 w_MU^ɤ#0+R} z&}Qⳟu`y.-D4[Xh3lX$zljs#hG?3fܮh )4ݜ>;bEhh밲cرi+p:~RkFVFP ~=\65910@nC3X.3?Dj`w,TT6mGuv[6}X\~C?,eff_{hڨ|:C*CwRgh`CP{m}.O9laƖ-ض&v7rD 0G;r75\+9MJ/>k5lۡVcZ&U|?Lj߭s\#3ޭM!z۹pi>*<4;`v:2.em+O6+ cu,v?gW1'6X4 Q\+OFan~}{R~W=LpXNPlw}j$X\ϥlbE=CPTߍ ?¼WQ6FaxE6O{im K.}c;EE妭0FPöҡ*Jgst]ò3O#4\{ȟ+^ͥu;;{%( $Ba7;Z:UBEZ~04GֈM!мO{l-Blr}yB6I4r ,_ԉK(_ѱ1~xkH Y^̩ߥmJM Z]ûuo7H,89Ӣ5]S#?0ȕTsWy`9M=llR?KR[ 9>lvG(v1{mFl;)W UM[F/ǁܡ0M+"!O/ \^A G'h67]IkX[0l[m:~ܿrӉcy6>MGe.\桜> "&/Ɓ؏2Jjr[*/c6#l:A&'Gu*hA+PTWYpPM&g2)2a?ܩ(?Z>{O|s6{fֱH,iZ455*osdMDug z)DP E\|MTöcmMT<^MSt,68Zzz43g.7ș>^vG]ǕZX6JUfS\)N오Si Y`$>W/^F>#AnǍJ̈́R"vf\EM,ť>x.[cmǨVj30ܟ_I(ۭ6Vc9V)ɱ`Ll\M/^.r?ct=^f v7thl"sTn`+%\auʧ^aaaJIɤS }(+EffTUryWiy?ׯńBǴ$ڽtgv7J;$rԪ* Bt9~Wz(]OQCas(Bwn0:H ݨt6wsnG9vPT؊ ϠX0 쫁Rk|1;wk:tWf^~y:)7 ?ƞ[dR|l8L\L?uXR[ DT5ѐ{3fOQ*6VfǛCǝLgR~%y) /uڭo|crQ琷= ضV.\ǶݨǔN=Ku=.=?)DEاcq)6W."/|\! ͠Nhȗ gy̙?beiw (~Hq]n#9r((FMbSJqp\W:o>i-2\={j;f;Ca"tL&Xl&́kb7kebF9s#ОFLUձP0Pg4`uE&Fǩ\]-[oFSuj*}d8j%vl+/2W:[^Ų@;[}^q~Bۓc33\et&wp/S.r8 $ٺu|}ί%=R)Q(ί0S n>vjǎ=[tMS1S>C#l@ln?O|#ƛkeITF.4(c<1vVTUar|ȯl\!Vvƛ#+b!=9CQxdqmO ;\x!4o( e_q(RQTlۦmԳXI;011L& D﷮%]CE!qTdzy%ev:}IǸg7Kp<큏ә o& P.w}7~f'CJ8TGMS0vgs' FCr i188g=ѲBw(e\|,/=4;Q{Z~j-"?AY`rwh!0NT_9<חv5r}tUcVyaH6>m"IK\p=!cl",!r""<^@C tТd_# PoU֮Rȧ 3֫0i2[ BЌc *4W 2h:sh-P]L#.nI!T #Ż>ļdA(|#ǿ7JZ)X;X?uWOKMZCUTVy( E_\ CV5Ld}9S0̷x&QXk:*fDQ9zhJv| X~Ejo?k/tXuq$ڂ5 EuHi]u-u 5(u,Xv 1SSUK|bMmt*p_$ Z-,E.qW,Q @UQ(7˼厷fi˥wQQFGٶk G+@fhAq0'0tvNcfi˵p=e}sHٱX]ZzyV64mKW!6L][;f^VtXa+бygCd#ZµΕ06Nn6۷FM䙸 OE\:ֱbOIQ=pwG?=WNOcv,?NQ'ݼy.SSyﻉVM7FQ2ͭC T eySmPq--WʸG؂U[ndXZ֨27,Z;YiZӆߖ&h)2?ƶmcL-p(%6%zp~@U&#cQm:G>&IE?[((OS6Z\M>ԗ(l߲a_8vctۃr!%vͿ?3 Sr pxJmٯ|U: .._?fL{(u RzjUXYԭr}fRPt>V+Ut]\.͡FI/r7S7 nq\R8.`Z]oy.'[7a&V <ζD"0߸@ 't㖖@o4 \CFre="ayoJv0Yi9Bx5'`+kضu靍TV5NJe5s\ S#Sخq12h|yړ[Wy2>-c +.\DUTn%cdq\ e>tߏLmyWPO-6]۰/^2A:eD77Rn,0cˆ\ y?,ˋ((<Ͽ{j^En]G(,.ykJm9đU&x[l38G qaތ@h{iʫ/㥧Fckl_tE8o{qj&9-z߾ -<9aSs>n^<T*iv80q;n; salm1zf7tVGmZͯsDqi?%IE!p{sˌl5(5KFfmql&Mԑ(V,TsI)بgEs:Gqju]2,~'W*V5o@S5Vy\0ëOƯ DXэ *QM=ifh4J í.E˜z6",B a (t:s8Cٮt5ޮH;6_z"c^js{zCϑ &ZQZy_Yd;̭s8Z4?ˌ37d-5&52њU?0^MqQ(`cȝpIii4UgZ} J x #c;n2&~=gCDŽo}+^ݣ{(}(OS4Lh 3xxs'7"up]о"sfplSڈf+ 2@b?"G5Vo?0;?f @A.@7 ~:tufL$P!jl0{^3Mc؊y:J u:Co\((_ťbԞԱl?N\j:r{>oz÷Oq}A00A^f l:';]5uhԚخieWmtx÷Rote` 5w?u]'# mGb \*s}`Yv_${ b¯ aK4;6eyi#][e9mx >x`;9.^glt 1r.vT&X0R8sff .k5־ }9ʥKgw-2y:3rB=\rC9F GdP0:.jca+ޖ:TcrZyq]pdh=Z{KE\ƍ)*f}WԔ!UmZ1ằ(Ʈzﱸ9trD wo훤\CFn[9p sVQT6cc|?JV/kT'Cqgʵ%^*)J j5,J4nZ@v^8N"zW" j Bg.vִʫ/ҪD?gv:R)>w'ٿgTHL Imʆ~v2 wr4nڮ2N1::90VbկwO4U%:9v Fqh Ie>=k +d3NUnciR> Wjfr%4U\ƙDtRZm}\.`pw>+ԞMqJn߆f"w/@v *( _%~ӬӾ J=>w{a1ƪ7o߷o}26M.w R,|O'?Y[6ۉpS<[,9(5j0\ڭ6eTy6#}  ݌B^=s_aփKj7>v\u04KTu<Ŷm: ԛmMMQWetԟ`ZwjO%*p?d8.3O&Xur? < ~i_W$*h$+5k™8388OЈU܆0H*®44m Ec!~dswӣ4f$t]Ot ?b9zs'=cQ:W4,XKgpq-L:繌ƂP~Ec69٧~´=N [q$UG)nΟ}1Fj'wM5(hFfNX(ӧogǎ ̎πz팏p쾶^Nl_R Whrm|?RvЏWί>K=\c >{l8a{8kjT `; $ǟNj58>GVs]4 Ќ(G1FG徻l] ;<;q7J=E*aV(_>yJ,c0[Ϟ4ٽsm[1 됩J]U{zqw,tfׯ&Q(aO<LJY P +_Cr=q2:. xK,\]膸QT s}՟Kf.c9t<<?c}";:ā7)fr @jҌ(Zko+O˥%ExMÿ|~NJϡ#7S) X\hTE r*0vӗ(3ā]ήӾ*qBQ)5d9~}k|=ʹi.|R;nB]vAǏݟE[]IS/'J91ձl}\yrB1碫vP| vd;3EatCcp@ڌry>i+~kS=o3Zb|KLM ͦ*\3.ʕ+}-5d,4#H(xh7,ji)5K 7Yk-*h4j5nDCeufFPtw94R>tzsAGUvVX;y˲I -B2^*\ۮ+l{-<* O?s4[f qOcNȯV%j=rjs,dYN1q3q] O4-._]?<-qfTt i+ vZ8'h]8˧$ƭ=_۷ؾ#pTUԙk\[K:qV6-m+ח(ׯ1991Ξ/R,ع}4 Մ9kѱPr"Q-diVy o8F?:ο-z@iCTs"SS#LN Q*ט[aiz+ ̎1{?No1 7;&35Eñ@Ԝ;d] s+8ʪy?>avucMՂcjv sq( nOAX7i6rxc{u驪}û р_e9z1~%mڱ\%7(X?gg =/p]-Fp]l=ڝ IyV/ci֮^:;cVPE2[h8/>{ӶZ;ZFa6s8"۵Guh]7t ?5n(K $ N]~fN|VZl2Ç1>6ȶd U_,k䒩T5*;}bZpL֬3b8~Av9`daIad0rmxb/g7L&oh_TUHeG,\~ ٮ+ϯQ.ը֚mU4;5&V:}}y:˔j%֫ڋ kzLL5P`G֩LJ *K,*jh\ϋ Hl ²@w]ZUaۧa88,IeH:S[-I166 EBrnp(@{6.;AY)y89=¦N4m_bرj"ޔ+{oV^9J3r(:} w=p '^LJC30m\*q|*f=siĶ7Lpc#d׾q~~;n݃id1`b;n?{|]fӕ &vl*mù3x;~q{Søzө px֢pmrzB@Ul亹h)-rbaE&n;*7 x(t 5ϧZ[2YDΈk?z]ݰpeZz }ar˫39>5(/3,E;\*p/\{{c ğ{<ЃmGͧ^%.?}o&lu2cFӤcqQ55P={gUu,*>iQ(dX>Sc}姆-b,Z(_̟G߆w u-_pq\6V\etrMpm8͂uu1-GwP.ף)j0 &$aNMg2)oŤ碫zPmc9n>HgrXV\.s;\Ưv'ZPR۴fsgi-yRj0?(\\9ܱNA N|M wqZ:O6~?.t]s8G*)h;Nmm'r;8Eg(o\DSQi.<]ӣx/ٍ M1OL EBu\ CDzh6ߏ@ gBL\tu( |0?wߏvstUCSu6)u;lcafu EVݬJ^+pѻ".t¶K%gbӣTݡmPcR[֪2?m9.+Urc\zB:Cݢ^s;6XPiU*v5ǻnzZ&ttNUZruK<\:C&Γ>p yNQj0NP!bs<۶S]|;yfW_en&P0k~f֯bfPtX(q`bF]c8CfYt+ͺXa@t<;IZ&gUՂ}Ѓ`-=gUi 2:AapjDbrO|vwyc?Nb_\x]F,HV6Ii t\*GZOl])= Xخݞo$FV,!W0Z)ƂhэZ]>ٸnhvqFF ˱k`n>MmG12:5Kii2zoc37r9WO)?g(DB*,hу׾c1 jDK ~rqa(*#CDQ2F:zFW FMѣ9jruՌjzUz"IQu@At}Ak:BWu޽4~ CVoaڝ_xZMu\u]o7Ì+jQ[3LC.˫,f-*T7rL4\\*XElQjn(h<ƅ<7ѸL4뻀zrr|s29_88 J6ڮ1 cd"b&Cؾ$:=@e5/SԩVUG Nν̕Keb%v2o8W.ПOzXo}rgp(7dLtjh7 <ˬTm E@ϴ ڮcd7ݎoJPNs3(06J=<ʣBq28P7A._(>ƍǖe, ^a,[*C4,m {Po7s|wHTնZ:/v?sz! =IweRvl \]W* K5bבXKZ)/T,06:e9ضÎ]XJ,`A@ANl79s oܾvn~;k3?N^[u\L? oQxhB Ï524v=zܟỉgGN~жxձmqůo(G_FA^M*7)R9q̕fh 7p6 enT*ZnQqW)넹aV6whԮt&f[㭷I\Y9Xںa_a[.fzkoȹ^/&BQ>?d~>h8X_1lr-sD⵳i] 0C?L6fa]m[#8q+sj ;(RyFvo'|[na~2܆狮X.~[]5l_W/J4Zf{>p O+9jO14yg8pF a(727謑ڬ,<*@] 6 NUnK\Ƕ,\ üax.q\s]q҆RH)6ɧ ױY\>-o[6e6#h$g|[ǛH/`bs/tJ?=Bv1ϥ LOrnʦ5<ˋ\}F~2uda}>mG>dzY.EE2iß<9- Ƿ%n6;M4Uc02t=sxŽnEfӜ~4#Q@%VIv<S;y~B.@ANre J)ɇuʳVNҘyȔԹ~}ӛP_a;9 !4r7Yg8Þ}hζ{]3ȧ Z} qCӓsx=EĒN"4='izy70L>0eFDyx~K?\~=ї`9QgY]iF|@'4hͯo.'^m-yfwÏj0aO:v-SCì%{ޏ/N@^°*.]m"yAEKpe2  B\V32EÂE)"FV\ʹ^mTϿwm|W Ҩ5hYMz\&P0!2zٹY#d }'ybиWQ! t|an &Q:pi&(6žQ oJ[^uIOyƑDE8ihXTZU} b(7DU/߭l`YVԔw%o my [Z_1 "7$JIg0;&篝O[)ӶZl؎jk]mֹrZ$Ü^{Laa։7AEUQ*\]Q@؇;} -}HhoF\{(d6`<=~^tb7?caVksض tU[mSy2F&zLtׯ.282mm4`iyjTha~uH(Jbao|_~.ynv+q|q m&&XQsHpٶ0}~jjԈQbWmC6~zsZiAFZ1j s`ρD%-_:5ݜY8KjҗZx1Nsz.h஛ VT ]X̒1hM]raAOŷqUeuhXE1<ϯUUQVIHOEQ(d39t͠nViYnX+bfAԆlyݨנ,Rv G_T0UZVZFPmTi;&t>:oDCz+ycضYPnNi fN!SS;8O>h#"ᯉ٦3<0y/ݩ Npc5ՌnѸ&(J$WU f 0osRT~š\\j} gwl/CaTU+\^q 9j[lڊ9TQ]1P\'~QFj zr$cV7XM+s]׊Bvl\A7AntCނz-rܨЌgJWV/se2C!F ?G36̞fr-:ii/24r}TZؤs* Vl^uMs述Emg Ϗ,E3j6cۓPZOoh}ɍT+d2⾛*螃6ia-шD/jBZ gmh}#&j9}w9T)ri"KsIQ..#ʑOd07D!]v9"o) z,eyjxiL$Tl~nUs=oG%i[r81Pne@vYǴ;XfC]Ų, `mT5FFnA^XA_B.?CSɒu dZݼx^y[ݫa@(*4[Ƕl"N6) Sd뜿-x }0R]mr`>pNl@jkT|êѱLozCt렫S,^wz:33q8} ٘yIg5* f.e֮PH3WaΨJx3yd[PGFT 9| v;VsLLn[7OEڠCU6=؇YYfy "ᯛ3β{rltËwt$ts&* Z%_4*Ύ(vJZ}{>by`{ +`ܠtW|h_:nXX`[avfu7r\bcJK/a_{f0\@./RA%eZO41RF0ZVgSQxzAZmX=wG7bzu J>g4ɤ3 ʉUg`vZ`a !VU=P|拌2bf}mF#&es?6F'\JZ}۱-Ɯ7Jᛝw[lD2c}cviux?zGuzJUPr\ס\,\]iqlDZdᛑ"w1;J g溽9]7~[8(f(h5T`4'b,|G=mۜp:aoJȧ Qޱ]*qӖ[6eZT۵(,Vv*yGts _qh,wmbhi36nt:[؍|{M$'|?($#?4q=BQT2t4A *(-4xS(h8^m6I8LZf8CӌŸWW߱o9ϣ#KQYrH[x=̎.\m(ahzB(SY$n01^D8t%4WfOO αV]e>壌Sn6=sTZ%>m[d6Сij-)VbU P)j~M<~ ";+~)*` EIak8jb*g0{Fwt̗_HuGJ`W<+*]]]슠R11AűۇvbNJB0y\^B6U3zMӒlU } ZkjLLon:r{w!ҖՎZ7q/5pzg4FpxaLCӬmpۼX _v1zYg{n$9{[mo2/~ mg:L Lm*uU̥ o^8|8{e2b"ekMTULd~ZMk47#yN'Oߗ.foeztPcn;Fr> "x+Q.S[ ڤu`&/t?Gض"+kV_pێ㴬6V/'ƎmFؗj^UUhY Zrrxbq}h K&n߻.+早4Z vWz2[-&'{siZ؎ca9%Dp, -P~ZKj29ȩtT zTSuICa u:IӈbS@5,L_At:7 lr:((l @v_7 ~1&"?^It:KߤRl516>Av d4ohq]jBǷoÔιLɤnCşQMt\vnɤfn8x. ";k+ܸ3sG9~@$LL)ʂ#pmyZ X(q.p {ݝ0?-x? 6>9DMRv1OVaueu˕hkQp<熮$JmmP_@l&|opTС(/* fpo- Q4Uk\$[7AǶ{Fdy~G8x>@;J4e#tM463#ћc4-~Rz^m7꛸WG7 #?J/FϿq#2!\0tOQTVVW7^œ|ϟ|}FIX ;O (s2ѶO<`?7Չ{yEV VV˘f')8:M.‚@ANʙW^Th'nx}(djЦB5lǦިyKsKQ+˲X\ZĴM!4ZNczf#p.G wmDs5/-ƺR\ XYܟf@6)|lT0MUk9LT?vř8C1/NIEzCTUTyt{f\ؾ}Nn*ԛu-kc9ygC:oډMd)5Gb?Y#é'Y(o(BTnkMgoaVÎ) wRn̉T^c_oެ12喆E4}}U=jwJ}V+AouW^)3s76aK7P|$>8-$S<=<&.'8m<: W >H\[% `d`XEd7,B;;n~#|۵>E콽bb@OQp5޻71n6VIsp|J`lb0Vzكjd2 V߂m۰+d WZt^E<\uL66ώ۶I9{z6VX`6(LplEѠ:,"N|*YA46,%4P$qmҾiw QlpeH]#f? :-]Egk)?*TU_eYR0\iqqhl y̖f`yV=pg^(m~p帢 V eq3Q̦ǭb "#l&BHmZku=x?zf[M$aLJO&&Tpz\-EQ^WHf{' L CaY7ꛯ>P%I DC|ū3Ow6xi9tiR%~[k|B+iϼ5AH^d =Ak#+P t82]F٩P۵4ukĩOTm5q}J9;O&xn'YہB|Q‘ #VM H |?8p~e[gl#}3el6}cGo`s{xȈSEܾ\ne3fA'˕*k0z[龜K췪7U߰xI_f󪪊Çc}6;bߊOocO#f`z޸ަ @J,z[?\\|B` |۞>&DD(D SٝV Oa\X;( JbMN 硋:_'ZI>oQebav!y ZO@MбlKkEDIde2u*ˏ "Bwl8O&bZٷp:zݝzN/@,Uo3@ݱX[^ ƪbj|jeslqs:.o\h8}y;#YΔ\[mSFZ̓`0Nu ȂGuX] cY'{~_wз0.lm4eZ:dɹ !:LNpKb|uW(9.- "(?"뗰VB U I$)>q@id83 Ad^DC1jX!lWMǵ $]#DȨm?^iytܱtOd#,X̩_D?YC5rp":dp175" ?,rl'}q d^bcmZ_zVG.4/Qgz zIt-\y o#APLw'E)SF_GW }ɋ^ F!DQh78Ѝd Er˳PQvu̗ҹd\dQ+gQ%z՚unaymWo]CBGZ&$IIqhY}t{mn # I TU#t=| bREb8;S#PHIWE %9+Jl5,ۂ$I mœ(h6k`IUcX<$DQB;CKqVd59 dE*VVVQo7r,5DQb㱒t/˒F/ W^W!-WsK~l)s;o ~*~#~MOO8կ@]l#BOtL@Lڿ{=dYO>囨V޷]E<| ,/_B8œX[[B&,+ id^8TGOݦiYgfpqsz}EȊs.,ς8wlmAQW߾# :^ ~,g9rR<{؞]1Z_G}tp_D.[jh5khj$:FvwuNAfqU_ vvvp,,?bLO͡V-i&lʳitGeeFGN=ݸ4=#@an\=L syOj@.zN%a4PLt͸QH?op@DDF) HA9~8E韢T*ĉU:$M'NBZ}ZXX6Znܲ"ġpèT&aY}~0,LFQ!I2;NNN?Y٨ų}$A2nN 68zN)ˈ0Q[݂xg=zv[u;Ѝ |υPT ,C@Ǭmn@:sy$cZEe|/]ƥ7U4g$>:1O^, 4:0@]n^=oŇ>FV(IPecLSryamQTUF'd:;+m|~hmbVn#BLOADPB6Ǘ^+Z͛Wqgt*fihԠ:|Y9 <-LiOǵ>|ߏD\M= Q"+e(ˇqUem>n-]CY<؇zfn]XYQ(aZ}(Uա(*dIMMMӿ+$f|{&J?\MB"+%)= [*paH2 +rӄi0?wòL]MґbQZ4>_ ZVזwtKUHjun| l3 $A^KRjwQEQb:0Lu((,i,Dq{*\z u:q 0 P(1Ѝ rSpgGsFz]({(E L\020l~a"bbl6l6 YaY,J+Z-mnaŻI KR5bBOI()KUšh#n\W<^ !Ir:^׾nl.C.aK7n5j5RmO@mN f m&&iC.W$ɋuǽΡr] xy ɢXC6Dzbpy%\ bm->\(*"?v$l0110 n]LLLbsqOıqr%:M45 %( `<00^Zm "ͣ\GPe%Q\>0N=|\U\<mrcQ+` ll٬BeQM`YIx`RITb\)<~J%v?j1^R<l VCO\UVju޸hX M:!K ]ѡ *O AUU;v t:׾YqQeEض^^j^702p;BkyaV<+ e9Q0?wkkK{w:]<3p]'loo`~no{'r{ο=O w[#k{?v[㏠X,G( !JqŬ\_˿ ҋ)Lӂeٸr ĩ@$zm` ed "j39<'^_CgRE-/}3Ov{/C7Pn!{&>鿔VGx?fq):H 77ooK4@nT#{7.gwMA! "4YE%[w.p"@O>ǩS`vrHǏCEt]lllŋVz)\|][ OQeAQUhR)^}n;]֚_DYAxK=Kx(UQ:4MǡX\m8E8 '?5Ea/CVg 0DĿ {ƂKIRU4(? CadfL67R]x:vw|Ofk,Wzye!(\oZ<υd'SǶG*8â(B|/V$ A>_a5.ǡi&QYt-Ȋn@Q4z GOYT*呟26/&1/@3c0tD1! |n.q1UU159v7'8x*JSĽ}ADrwQp,;AP(8LsEAǞrPm"@⭛߆xlo`||x+{k&{c %QBNY|OH~:z(}Q;w,_籺Z>&&& ry?qƱE2 =Vwh@ly.DA:_C|&'aTU !+STX\?y .jm;MvV`{{KRx@oo!T-=w4UGPBTAPs?T\uFc"xM;˯٪^M羛ixEQQ@8瞋/OQ*p?Ѭ^AM (\k8}{\79"AS5dyhɉm B2uC(ǡY~=t}T&Kd pFvZp ߴ,~ժCQU -|{ AStA0d3y&P,K4f29hRG0L4͍?c>]gqc:~O;P8zc8$JY5M> T*Ӱm7o"&''n'N#G "~h/_*Μ9 .d$I('uJzP|m?vZYp]vе '\Q'$Eժô>nV%^V$.ɒ}Yᾖ#z}qRH*rܢEV!jд$br4 㪓weY0,¨]OjVEP AUhwXq=~vNPlꘞ( 0 t繰lT~5̀{uj#Bea١**-lw᭷cii vV ك9xJ[BCw+@UP4J<>~kCPe y54; >! arrǏmۘ y|K_ٳg>p1\[\\D@P@QP޻a,DQDYXYnލ^/q%>h,ImVV*S8yWgd2":*L~A/= 񒝢()l|)舒Pu#r JNfYǩ(@&GPH*Z}Q, A\Jr݀jwx^;6R a ^ZAV`.["*\#G178{n-7qr7:=AU,ަXwd(Jvp< G(> ¤e?~?>^Ӻa* Bx );ߠDQU+ zDQe`!nR #B_<Y㻈[-ONau K2U3C_xOH~8~8y4MXo~mccct:tRR_G2 |8^{O8 #}4&Q"Bx* z]9LOjbX[uo٪oE4jAȲ MՑP*UPD>_ ߏCA/ @A\r]ׁm2~Qihk# #71910؛`tuhhh6k#I؎fj^\Fm?y^NgkF& WV{ m\{Ert%0 `{6~kwSJH+Jx"G}&ݽ)ڵkI%)^v=Rq v#ڏ+miP('ux ۂ:VUՐqCw_?q%mBQy^EndX(cϕUpd2xϢUE4vW|/T5ba!@kcccBHic;';7pZ\!tv0>z.N öL؎A1a2I*J.9kw{v N~ěP*V_ዿEQv* wH?ER.AQ4JP08={=M⾛ɒ0,U]G}YDQWAo+Y5+'db$z={_XXn$p .ět"7v߷Wm.ɁL]›KA(i a/g;W_} ~7޿4d/~_G߳uKelok#;x$YBuw ^N mB ];?Flz{gm87RALw=A0>>~l&0^B.[@e|"}0ο}#Y:q=89Dt| =kvQm $HIxt`K繨jڰm3>\MϜ>s` W%z͈'N}o8Yiq˶Ն$J (^vg "aMVJ jU> ME>|wuzzGQ,(*{$)&. Uձq;={7B7A#&Q{YQv$wii z:|e8?:N:kpd$ojPnv,ohQƍuTwxܴn9޻7"6ē'i 0DVEXm[D㕽dRlk뷱V/ OcɉYKfC%d9Vq,x>zb#BZǕ+7qZ'3FxTUK>حn]Tk453r}ۯ٬Zێb;U<<ؓ'R܀Ȍr}5ITw[X[QOmd[ |x^^߅c[p?2N:b/T *w #Ix_;<}5Wۯ"l8~}".޺]CAY-WA?9EHԏ0 v8|zn|4Q*U%h! 5S8z=/ϛ5FQI066۶GL (*.]nޫLIٵs^cҿ?s~3@k/^ޒAu=`K \8 r.-z]]7/IJe $xRuFkriZp\AT[1qld9T*EVS⁳%qoZ*Woy (4% |e٨՚r&n--֍%lmd6z. (^ d8 U}p@U(kBL3S?-\R)Mh6;h6xp]+Kf{nfb0[9HUOC| ~c3}/GWEO?!\r NCȢjo JNzd˯cР`׷}\uOH`gg;;;m4h6kuBS݄(t;<ݗи3MLNBW XGEl Zۆc߻6A ( e98{Rr ? OȑgNb|-4[-?L|7=$2wШވ?.00n:{Ni 4 :qܸR( J22P(r"J1HtR1C) DAāxۂ;{7yNc`aaca!;/kMnb*67qi0` f&;Ho7Y: =GQߏz_8bww'9/~ ر8Ə_sm[ a?W/ BDaӧqYױ+5ZuNN#p]{00x~Yeu{~r˳F70;h#Rz/}G:LHL|zфe;M6VWo0*ɸqy Gqe4xY0 059V(<տ9F#l6l -ܼy n^ASe\t7n\O*>_D>ás8yrp 񸱿w~HmZ V7hVѨW7`!_DQ= kFZ?-]؎ ˊXe|~%#ba,{`9( YQ~v[Vyr9,02Y@EQ- ekU=z,Zm+76u.2Jqt: UV4UCTisdI33q0if'_2*fg!/qLloޞqmٴ8It-fo/ _z='Bp n+m ;7ӟ' C(UUQiX^^Ɓ0?)<1U0 Gѣ?(! }Iu =sT*#J^a4X[_j1ѧBQ&+p\  _DmF h鲤 +Ѩ=f(O &cXɲm 7o]q;AoF?iCVVnu=zmlmBQդٱUѠ5[!"~iZ!tc>|yǶwo0[݊̾6q%L'!JFelc"acc kk+wGP5=n4$!cdj7{,0 {LV:uE._^sⰪ(j:;9BS ?v zKun@Yx &u= eaI8Ο@P|$(^Dp{NA4V?JZB]G1_r2v\gT5O9*X O}q1,h 'N/˿[7owٸG>ӏBƕKg.ǣOⱇBPdoG~x#~%A%芁8^~>uMb*PIbrrًC,4S0q/i'Y.Mn_$4Ct(r|qxԛk-++O`et=H>LȒfY&ǂy“O<DZqs*4M_%~{xi0^V"BSu@{.NY} 02TG+#oma@\.>ry ~K$lrBz ^,ajj6]8I@-JJ$mRlۂit_._H[,+Ž$JRtMNˊg&˲ȠXiF:wJbDB dIOn wΏpQbI[tt`6lBKo<0e9Yad^@&AB@tn>~ Gq)W( c;xW In-Wmɛ/QO| O?N[X[]m/~fJۻA!0OI0B_:$gaQ-DDIJǙtޏKE;v[[k0~JFtdj7n/XyA(,*6drpMP*p |3ajzL,#}8УT-1(Zf^Rgq)ܺIg}a/nz _(o} ;nK"@?$Iɓm5߸|?M`jj7n\JOƼųsse\_@20 wQmǽ;+m7h[(pc-J}G(+(~~jKsh5p%8t݀htK;4UCGi^C&G.2 qx ̎k?fgG#i1FIK1i$!܍g099^;rAR(ն!IgEL&idyt;-llX(a||mb{{=  q\}1LM`aaׯ_*,fg3Ϥ!/R߃dm ^'[wp+0vIHӡ*q`QQ.ŧn{,D߅in&._9!E3p1a45|s1 B5h4贛YVRyh`޻R(ZC.W,E X[~7Z<`$I? MӱjQ'F^~:t ^V=hqrI0gQA/W@e"2R%@"ɩT&1=5nfcBEh6htɘIDQ.U @bw1?L6[;gu|rrB^똜"&gq1,L3]\r˲`q8=MJi% +f/=a/$INz :}oevjOLj#?QNMM̓!C| ^ ;oPǒQD)So˷.ɉ'K KMwLO-Tiz Qp(*v[kh21> pc:|ك,E2=t$0qAY濺w?'>'03AѵwտWc$('Z + Sh4Z?N +F$@.[4ykv#'sff`;חO2~_8X^MQ.S$tNg{'r`v~(@%t:mHy0>DA;PxnfWF 1=`_D87n7}Z| ?(0>z}WfJe ͷca](%@r2M7IP! "vwv~oELUkKqʛG DDYVP(iz H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_FOIDATxweys0iA 2 Ydɒl뵽럽m9iW:ɲZkk +Z- @RH$rSϩ8yk{랞穧yMZ%DDDDDDDD Q@DDDDDDD%DDDDDDDD Q@DDDDDDDQ@DDDDDDD%DDDDDDDD Q@DDDDDDD%DDDDDDDD %DDDDDDDD Q@DDDDDDD%DDDDDDDD Q@DDDDDDDQ@DDDDDDD%DDDDDDDD Q@DDDDDDD%DDDDDDDD Q@DDDDDDD Q@DDDDDDD%DDDDDDDD Q@DDDDDDD%DDDDDDD%DDDDDDDD Q@DDDDDDD%DDDDDDDD Q@DDDDDDD Q@DDDDDDD%DDDDDDDD Q@DDDDDDD%DDDDDDDD %DDDDDDDD Q@DDDDDDD%DDDDDDDD Q@DDDDDDDQ@DDDDDDD%DDDDDDDD Q@DDDDDDD%DDDDDDDD %DDDDDDDD Q@DDDDDDD%DDDDDDDD Q@DDDDDDD%DDDDDDD%DDDDDDDD Q@DDDDDDD%DDDDDDDD Q@DDDDDDD Q@DDDDDDD%DDDDDDDD Q@DDDDDDD%DDDDDDD%DDDDDDDD Q@DDDDDDD%DDDDDDDD Q@DDDDDDDQ@DDDDDDD%DDDDDDDD Q@DDDDDDD%DDDDDDDD %DDDDDDDD Q@DDDDDDD%DDDDDDDD Q@DDDDDDDQ@DDDDDDD%DDDDDDDD Q@DDDDDDD%DDDDDDDD Q@DDDDDDD Q@DDDDDDD%DDDDDDDD Q@DDDDDDD%DDDDDDD%DDDDDDDD Q@DDDDDDD%DDDDDDDD Q@DDDDDDD Q@DDDDDDD%DDDDDDDD Q@DDDDDDD%DDDDDDDD %DDDDDDDD Q@DDDDDDDWN%yղ?@wU,{ϹF,-e41-}Ι3Gh"""rI jDDD^>S{Ic8gIN~ѥ֜њDƀu8g1֐8˰7|Lc|ȰgO9ǓO=^ -"""J|f Ǟ}wc"i"u7hv6n>ZKIbIF-#ej ZJjIc0?wE>@#GOdeeQO""j`%ݹ.~5.r>h y1f41P#E0MZӴҚB3Kwv -Բ4IȲz-ZuFސp)o{;'HDDD 3ٟG?L~_q"᳿$6!MRF! /0Ɣ?c"l>kL^ot7QkLњD=Msj3X /<{  F| z#"CyQ@W?o  ~3CZy??EO j(8 ceF>bZ8bkLy[ƒ8->+']i:ژA,fi;'Q_OJcx>ĉS?qzŹ;|?_?$.܅PǪ\PW(w#"`4o:sIJ֠Yo1ՙafjf2u*VH1>-.P~;ֻ߭'LDDD lDszN]8K$mw9-e''}F%X!T% cX[sc&`G1VI#:jiFI١hnu1ƒ>uST)+7_MWQ@DD.'۷^X 4 !25}5{o~P ue?/?·%#%6Y5UY[=W ,'F"ޠO 嵑1V"!kB ջ˾>YC> 5k Q@DD.'7]'g5EQ6EwV{Zunuٟ%]uqA&K|?/w1PX#9\TqΑ%55Xk(+ XZ#dAZc5M{)""\.6MOyNj0j)i=۴HwK 4;k -wͺ`L#ISu7dUB vkiqO  P\=q>&`؛>ZJ ""\ vnHY'F4 1unr=ŏnU)ZSʏp@0VboQQh($I3ШX.}5Q`u@$B𓠾92:(1@&}{( ""_o%tmQg),a8rߴL\>~~mFafE$|Eθ(a9>yX0kh7 k-Fk F٦!l@ڲ꿝Kxx j Wm( ""__4c8synbiJۮb-]|/?1{nKd@5/F0@zxc|=MoЛʠccXeuŕ% 蝝t_=VШiejc->I@g-y1Zx#$E^`>[o3]Cߪ'XDD5LD""MUF$~$Ki,s;mV/r@S.oߦ۞y e`^R8w3 /34ϖ-\eGY_|ޠOV, cpQ˞U L5N|A#߀sOLk@aR,ku3='[DD5?e]y޼(SM:+њ풺g qi79rPAܥt?k1rAy̝KaO3[I  | C"XKVGp.!M2`("GXm8FU\ AZg|kSp%DDanB9߽qwrdFZ{AȎ+p1x_JQoߣYk&2fqe<cqya2~﫵2XD&)!0#.Ii$.- r?IB`8;w &G?lނ08k01S e4\F1@Ĩ4slv;I[E@DDD y%tgqK)L(E%-Vހ+w-̝?*IC)[25BogOp W(@>v0N]8c1ȋ3g98tg4j u31B(+DK`4e/|+By W{'p.s݀&/hɲ"i[`clgzD Uصj܉g9izxs?;9JZ^YClr%$-2,,/["xO,,<@"WKN` Kjel ΞOADD5BcED.s%t XwW Obm5&RosS3ZįB?KQj};qb?dVeDZ̗Kji4Hk3;qO<O0p|>p^z8gǞi4ں(DDDSֹAo@VYXX:p߃ob@&dY,$)ƫ8~%x_LHCD$?~(/~. %DDtEC^Nm$9diMY145s,-k1_Z z4 5,yTR?1 ƀjdR_Z8\$Ŧ,DDDK'u뚵u/`3ʭΜV֐81VA>n-tnGD_ Xcdƌyoօ!""\*E>=J.* 1~$.Ggu;ew(ºDnީ}ۯ2G}זZ~=DV'VU# Eq2uɀ₪ۘ&_j,""r)9Vc SFbD8u(3Bc8M,Z2\{'V[پ*FMn߅/(|nR=/E4dl FGZk0(DDDKey<'85=HRb;Dq֑79›~%ZZZԏq˃oh9=MHӌcHj5lbհiu!`rc(q)]"""Jȥ}D֘m(@(?ǸrfVXZS N~~~/,qz;K#6L1 9јhL9yN“ SȫF$;c0F !x|ktZ'GV b_YaԸrk~BKUg;{w\Z6]kv˶;9w0xK-Νw\l%1y6oۤYF8$!2KpG$8gq.%4f}%a~. ˔*DD^Eb嫀1T0ưt4ws_{XC;Gϥaύï0O{dur[Λ￉ʽ[1cTg+;o|w'W>B\?[aϡU"ޗ!ZG$Z`!'/ v1(z7>BDDD ZGxDi7kFhhB,+KrEQyq`ro %DDkc乃_Ϋ?x80uO$KkҜpD2=ᘢ((|<'x F"q7fӺDDDKei,fs}%rAv]':L[!D5D_VdY\-/3s8k_=ÿ$,+v1'}my2qȋ{)rB@^s p 3l-""rZW?M Gu=۶#BG9nXC$;M.p܈~X :qj4O=uX^2cq }{,,X YY@>c.-""r)xjHsGa0k X0X5kkxMN,)ZDZȒK+|3{Fyp3ȋѨ/rPs/!D!W]W+""\*s'i6ۓ*345m!֔[cH,z#{N-ϓ&2p !B(<{r_Nȋ"/(B cb8`mQ@DD.p_V"e2F+->8V?Y$R4ZuNouSi1C=G`i_Ue>B_#%!5g"""Jȥc O?Bb$ށs9~-] C(':S 4u6 soN,,C衃NY Eć2e@9Q`hw"""JȥbS4ɮB,c[k9} ۶@=+ǶX(ZkHR@Yj@,w"N_'MR|,K`=@{(|y߇<:`h6;ZX%DDR12Y 'U5S'ij 2q`ZS/+N,:zoo"N;M:~&cX1B@71PUb+_Q@DD.] Ҭz:K"3q/VU1Z%)Zڭeann}P :18GGOZ}Ij>1!D`My H8g 33]ΜgUh4_>}-[: Cnk0g^D\L6[bd&( ""T?S҆@ |Ym ϕ;6A`0$YL~ 8S&\b֐e [f>po~Z^\f|C'>͏7e-8z96t G8WjYI&"tQDDDtӓ@n\q1굔lM\\=!Dns$ZK9:7S "cw}z<$O?J>Aտ9~>\yΞez EQ4e$ lq %1VsF""r C.I'dzW̟؉l2MEc(: US@VKj vv[ʩ!sԲ?3l0mqmWo/໿opνc8=w'ɲn`0UM&c4tk!K"YM׌?eyu1P2q>*b9 x]Vw3Rn8kb!54¹ c6cxǵ/xӾ7b&>LuXkFXguf0i¶;z>|Q0w$1H3z-rfqQLJXMZQNFF<@D5bk`d5&sq~ZV `8lO^OkYv4sKxZ/;} |sO&Ή1U:Iݚ!""\j !Ȯ=у6!XZZHsXY3圳l4`8ֹY-Ev`$zhcVKؽk?7=8Wle[ؾu6F:4;[y߇ c^sq굌Fθoz$1۶\ DDD2#""1FBl?yD>w<>s0gijj~;5J“& O[2KZ?D}{ϞN#!TwwO_ N=5@(' Ǎ,kp<bѶ;8x C:FyAz]E0ɴ V@#_a`EN: EDD2 P#23ݾpep@2YP->DLok ZJ"{Zڭ.7efg:yY\-|g,/}_rUj37uj13ݦidpu~_kxEO<1 EZjnw.%DD09p璲[{ignԯv#EQC$b(wmb16vYkW\y&)7ĥlߵi453,-n6>ϱyf+g0ՙG>?enغT4-Kꈽj8fq<{1F6me ĈsvZK" c K=Vv ogtwv}|stMl.f|__᳏gO05vFiM58u'yn-!S'byN=Don;gi̤kqMwiV?@: 2AFf.cX8s-Ypy@^e#7 ƚu3l4'A뮻{u;_C o`ϱ 7ECn TSG_9ffq׽ẛƺ !޽fϞ`y5q^T!v:bѰ@dߝ`nN~'"G_c?7NYBU*`(O(<,hkdYxoLˀ*DD^Luj<)wsm=DYjYJ,Ε-kB,w|1[ƥwuްwص/Xnm4q8/JέϷ4#suFFr";afW F9{1`MuL|TM 1DX%?y2dyjzM !(!R#qsM)""r9%yy3kjd[ ƀ14RC9|%Ĺr \hu=3-^MSٽwx\`!=S6!Nu B yy ϯ?eapg3y,W_$qǾ 7ARBᘊ=rݴn}qVk9w$z#(PcXʱ3S[ )""rPkP^Y^Y`$eύrY-$!I֚r\]U'rٶ}>ƙ3g^wj[%M2vagN6۶Lfx +ܸ*~C`%I2lU }A#IܼSO||ױIN89sݖ6f)|diq,!ϱk0  if̎-Wr7b/u;juΝ]$XC*T^OrbD\_#8Cc &GK;)EDD.y 1rj`y`geǶiC|(bЇHqaʲnIr'~cEЙǾ?{?g]p{YZ,/U]3ez-\v6mn}3;.5eVWJ_y6 ("" _pni%ʳ<4nbdy1Wes"*S}t-lb9{~m-dIʮkw>4fC&_6RŅl7/8{$s?o?ww f,teòX pIB%4u6ma;ʞejf 6sgOPxM,qyT "c e_~Űi]ߌ"""J)$MI`fԱ#N!qg*x 1b'b!z=%q g-^7kYK3&iZc[ߍ_YѨUE`8e 5ȑ#/}EoE::=אۄ | ރ5 Gnՙ*tNfggblo7ؽ:^XlJRڃ"Z21iCߌ"""Jd 1t:M\=c43 $ )@:1ekmLW_Kd:~4dYRO=9z!SS-b??M7n%`MF%LJ2VVF8A-eV2ʭ޳{gi$YBJ(w0S8ZT%DD9>FsG-ÕE9V"e#@'ݫa˻g3|8uz~Ç^kv"I!V.M}(w}v,-j?<{ UiERTIaa8YY`WlP!9{}#4<Yj a-O!5Lo7""r1N%<evp0Ʈ6 >arZ3iS, ش k {n'>$k8k񾬖Xm4 _}ݞ˿<f=FU('XʤuNAGOkv4Y~ǰΑ8G^>s Icl+o{`8,.H}N9p͞+%MR>Wphki]o- )iB#t7QDDD yy9~$2X:Ob!pnl.aPibh6j$91{MNiR=E҇6oq*~9{sIȇ+di Ƥ>BzDbFYoB%DD0}1V4 VzcȽ'{|&S|#{pknͮ:l0LgF0'P@` E^ulp1v1:&CF!aWwgx,.{EºT6o,&Q@DD^)O&qnzl.kLJbSpΑHSpiyYiqͷf֪f>xLn8xLV ,.cbAzU8G' ~k6>66/ !rI-2F1ʞatXcY󫾏??EܺkWDDDc$.me4h2n_eq֑$1P@B ϯ|5^wGΓMw˴\\{MϒGZx'O?O:h^wBd 00X18a4.18*C#")Ѧ$aәy|,YYDDD JzKԲ:0-3`j$CQBT#Ɩs&k?::.q9ȭM1vMdh@^c<c}Nx7|8~/1ᐟ>F,d[I-/~X%`0T!IkXTonj̳i1}#( ""_I#gY9N4`ܧ?ar$`^M0C90ΖG:ˋ+l[oUN3i4}8x4yG\Y%1)F(CK8v{R<w>C\s};{u[p| v@eo $8c1a52!2=%ݿ믽_kfQ@DD#NY )&1VZG`-P&Jr`b>[稜ٱzV斠ۡ X1cƱ9X/[łU${|cϝ;ORKXxOO:'D Iqg 2є%#Z6 އvhT{R/=~[~;x@"""Jȗsn%@r41>2!Fj[,I bej 3 7Cޤә,v'ƣn!ހW͔-/]w]욚%kת#)8̹EgyۿVkJ"""J GcY`1͗#cć87UU$a(d#e/Qoo[o{ծTKkБ3V/.Ă p$&x\',A 7g_Ă`XZX 5ft/q[xX:,јǺr;5|ezC> _krjC/?X*f^k jCpqSg8{0ǟ>āgē8v4=u݋X]3H4)rO=IZ' ywϤF( ""@=Ofϒ&,.>%d$`pQ*H$$HnA%; a׮]uiIFdM2`hł0\IǏ?z_=N([ 揝bv8Sg/S[Y!i!ߧ=pDoOoʴ 14Ml宻{^w[/nXHSF$&_lh G6Fost{KeE*r? E!eu=%>w}S( ""@uQ?cmjWtE']jcmڭ:Y-2׼zveM;sy_ޗiz~ !g,GCB h6[|y kZAϷ~׏O]2T ":FZ`D:GB*+Ssm7IyW5|Wva%gEYF %KxetM|7~?wǁ?9r___x{ťE1fKEzC( l/"7mZ;Z< s`vq^VAc/lλ5PDDQԡi Cslޙu!8[p!Ĉe`> 8fki43:KK}ݛؾ};N LC^BKc%/LMmǐ"#QF?G_$ƒo|#1  C;J w;|۷};+XXgnnϳH_8um׸c HK,ƥ,_q=Ϟx6HΕ#}@>*^fO?C| =I$\"""Jȫh<]|eS]ۉD # rXu,3:zO+$Ik,a=nSh(:_(/z] -׎N\58@n¨`8O>(??#z`8 z I/Zoc#|l tMqkh3ddY1Ѩe !1ngXY>[g_zSDDD.7y)>ջ{9Z1 MF1zd6!ڲ`om [CQc[stZuz?qw} _!{<{.Fk-d4ΩY%g t|\'9Z.=K̿C5 7 8?O}ӓh"^/~K,,,l6%rh(3frW1B#K !0,Or'HgzEN>Mu4"X}Нpecᇾ}*\*@DD^T " /z[`ܛǥl?:a-( Zc Ɩ1R,%nw//\mQʾpR<ZB$iJbYlk51iy7ҹKs|5fVcͤ`R `Mb W\q%o~yG/x|w}7֖oMy#Gx&_<PMhky1O2y΋"Eya5 j:@{Fh˜8X: FEVVs}{%DD^|u 'ΝxeZ]K=epʲ꼿_H$u$|iVnMf/Hj2yK1PoߨFb#|ŋ"m&5 IXVV |ӟ''cw0{>6wyzc-0'x=1{Ēfu }s$YGexx@Au_RձIiڭ%K҈( " +5^]̝-aYP8U3|}ݔ%ړ*jԚ/Ɩ?NbXynRGʀo/=YО8ωR ]p Pk2Yu;ƼYu}O}?w_b0,7t;NuIrETgWjqMN@Qj !0=3K E(YէI~`TsZ""": _ɯ9? ݓӢ;X$,e"G1!5vr qo"`֐3jiʡ#W/EBu$@TGi c t؈eZ|`U/Np^x{w_Y3G(>S]5Vz,-- |'vɟ`8}!qb1fݽ68"ElU!!x/֬00 9} Nfyyec cvͯh8¬,8ʫuA$c^cG$);gIbdVE;DcLydE""Wgp&E:hFUc5<]D0ՄO$\IBՀ,z^뛗1Fk} !Phwe}QN("K֎E"I EDDQ9AK.a- "/ >b,GHJ.q!F\Rט?;ǵ{|^?Yg.X0X^[^n|.fH90FWqbA̫%62\ܯe/H(OIbې0 +yYݗo+oos74h6s1ALtx?ƺrsɆ c Zk@4J&H )z޿]˹/1[oo~?ϲ~ZK/}1>x"Ip3]"L}}H҄0f]I=`Əcr~~=lH\H|T҄My ngà>bt;M6 Ns̕(wRXsޗC\ = `Bc}eXrF~ן%vK3͞={ؿ?vgϞՏ1UO|=i0xq>)@e)weyw|=+{,94[u9½$6 ptl޼eHq</LUV/w}"Cٿ`~1ֈP6 ,o> [>qY.o~$iBXZ4ӟnv,"^i[Weh\vkޯ yl%A(W`ѝnWشuιI0>P~-8{qI/!T]GyuhL$!tj_pMZLZo׎Y ]Dp57vuWn(oU/kUL 7)~kGV`LymĒ&[L>?L0$"$[BS) DOiFE" J=!P2mҨgiNE>o} Q@DW Z6R?{9⨏KoFEa P ڏ}9͔aa JDZ c>N1/I юت`6T l+\㭝G!~CѨ 1HsbeuJ M`x޿/xiIW&qo34fqQjMj c |5V`) 50= }9p}ݧED^G4@Dhk}&VHb p~4(rĒ:[UIJ3|k[x1 `**ɎISGYc8Ȟ}w$ɺny1`r]dU#ј>Ϫ֮*!P9 3'"Icؐ)aV <2Q6j8~uB`my􀍯_yߐX=:NTb\p~R v}q]wx=V鬫#IZרMx\0,s>/n|u 7ߥ i%)IțVkf ;6`MsU/Zf=ǵk# CZ>x |//.a02~c)hc( Ȳd@kgݜ ^{:/Kᡷ<0<VJt[4Zu6o4sgN7Lϴh34)+IB Debn~c_8nWiƩ@D ǹ1(>;kF=fڜ?iyA.I(|$h!Rgˏ | Da-u*4UWƒfkVn֍(Y-_=BQ qIUn1ZJU V ;'XHZeeZ+_Uch$.ZK-UI 7֏\_0`6;WeLul#L>ohv5^ٶ&'ULNS5#Fɵ#ac-e`DU!&21UWɩHںUqSU\*7֫eA:bAV˨ G?$;}Nw/޸ĩy.&iY64S$ Ưuy Z;V%KHRDI9 W{THYl $.a•~c&1}{ _3 Nz]B L+uEz6b(!b1>.81)"zgz~ٓx_ 'F@O10*ya6|Vfz\IKaێC4]K H5vlwA;>ģ}y믿g~g<屧أI`cxzȥ#""_$ /]_ZHb$22@c6BQ,yu3k7ާO6bUoc ̵/U/Я¥iB{|(!͒jWͺ`ZK՘+bݼ$k$5u`\RlDޅ YԱFdYFR6Dk|lڶ-WiLw7sI:ZF838kw]tMe,}oj/Ly^WXqD.NX5s\VwMuz1Æ)a'9bRN1cAyU`qص.c.z&^~Zoܹ Vhdyiػ*vow=K{?C'1>]nWiiyΉG, (B7@U٨H"_#qz>{wʎ͜>w!˲:e66/W:?>aXgLTƔ vm-q"z iP` W( W]#y1( ,<Ӱ:x/D\PzKĬ-QypF^qsG.;wl`-k/A_mȏG%;6]D?xNJ"" }IZ2iϭ68q8a^8K^Xy3ˋ9v豪-pߐXÆKTWusbQ6\|\^qm'% jjh_d(٥yY:1bEqXx9+Ռk?O9rr܉hק-L=w@w}M7}رc|>$yr*jbh^DQAAj+8*mmEW@o7P"< UԜ5eeVg>{y [{CeeU1zN9VDo'tСCC7<|&.ƾ.dKvha)%B*;N(tU+IBbu-NEB Ȗۂ^b4փPƚ= ?}='"n5oߐϓNq^KC{n-%J_7&Kw G7ŜH!1:3w=Lqݜ;w5Uݐ疳Ϸ5,Y }Tin8L9MtTe!i*Y̏١buN lIЖE+}$5J'|헴`1{L`ű "R FpaY۬(21KmBH$o>F 8%h/L_d&h/p4ؿ(ۈ~?~woUrm?0OUV\~1C:t@:txi)8ZZyhP*vsƤI8k\ 1&%I# x _7!n,_Ot|3e6x|T@G[k)>lI$\x+/ǩnpʹ/'u.z9f]Iʖ`zQRR.'V%UY> z<+ؽxSHmX*f%&M1|N45diJF*QyFY(W%eUaG-diBMޭiJYA~tJqҮZH]dmZQHmpm˃>qD4xk UCLSP1!T\)ֆqUDw-^617Uw3p 1?W>s5}=Rc[gFяu opco4Xg?os {:@ءC߁Z/L.?I,WdiIbIR,c49iaLtKs9dh`! ˏ#e d=۸O! >Unx{#k5!rBUs_oLq>u DP݉F{ଃZ mcAA/# -CHAU.۷6@H6dŘ3 vIt9K@0-gY45HF+jdobjiP }vwvGh9i$yCSr|>GkMsg9w,ibaNس,E1 BJ͸\+>!;'q̖v:!dE %!;8Cj ~EhC'i|l㎝n<Ǚ? /|}{'ȣT{lޅx'_9y 9_ee{g)$̦>0ܽtСt:t ˖$g?2,2R!0&AX9W5R&.v+olMlkc-1a]I:0"+؅qbW;3Id2 vb]NN7HZk 3Tw]kVg+X"E|XAnL1e{gv(0QZ4 AZh%P7bjD'txjHH$ƠBiMk u^\Cׯ_]d.>5!_^XW $^}qԂP$rYQ=!|8ZUkG\c>`CX-R"nK~  'I{8 nk; T!/]>ݼxgg[e_˻~,!YnݸƟ__ڵk݋:t@:V :_LIiQW٬O@) M]C F[$PU%$~nhHE.zd$A)L ZW!pvIVs\cFZD!: :0>J*~A5#9ٳg~zZ{~;mNmTq;,b.JHE#ot1.ilg4AjP*޶MUƚv=[:E cz:f/!TXnE5&RIUV܅P9Z+vǬVKfgg|6cKՂ[nQK! MLk?5|uo(1̇v.OV>M'a( ,W kιXA^c@`t )ABp'T ZJ&VPf:=q \9we Ez'Ā7Yn^~^=h|U۾x]1y'x;}ӡCСCE;yRTUM:ũSzi!I F-wLY,fٔ1Ɛ$)84X*M$_Ƶjyh5W7~j=\RQ\OxPlzшN8Ha|9ۄ!UrAlh4BJMf[I`@c-YBcR"!MR>6LK{YH!KŲvGu}|zib:>:Ah"MS\pX.+TL'J xF]ވ}TGn<1/uq-;QlTMh8ڍkλG:!>昊 Kp jŸ?hvdT&M@ī~=Ýy%ˇшW;7'!{뿞ڛw0@YZOuo/:t :tBҼ%/$Hۙ/^DO<|}Crczۻc&#S浡kE$BeyleYJ16ن45(MUSO}7~: xt$VgAoׄIIIc3&拒x?om'_DY"Dfq<, s,gآr@ ڝw%.QJQd}zS={m&Oh<&~$MsMENxoNR&XA9y$ySJ!kQ[Onݚ1G$MX.W(Z'oU/?xXTWͱ*B$bGN~PmZ :mڋ63"HDQq|ۀ !tA`]nt~'q{KFtc!CptOF|{~s.?vo:t :t[ /ځ৞}v+k00 xgɲ%̱mȊ!v4=u-%ٌ:~ѧq0!|iFQdƒ|1'KY3ϙ.rcgo'XH\cxR~7a)ƣ?NRocR+zܸ~r>1Fkl%[{wX1Y!`mpk_ZΞ=[̦ui֘p4Ha@UTJc\Q%Jilc Hj!>f-hM5)ttCHIh=捛Paa w]3O2>{m!wё[~˾xo㉧G{<Ã_w>l6b:tС:t᷇pG\K5oڽ,r0Mg4ަ?3rYjScX0 = H,?;kilME >Ʋ\k&f4qMUIP`T%!{Y%HJ- XZʸ㽩݋VnI(2n7}!˿VYXq}u;a^[/?G^vr5Ԥ< Ȓ)eS.#ol8)w{L#n e9RN&Bu(KS-) T8[T%M%I Ru@׃v,WY&)yn(ˊ)!XvGd|iTz@q˚_|_Bl`P6J h+ qO+%"MMjMڿĬ %($! 6xR "0__U@kwKcf94ɧ G};Ijz=Wo29|oSJKXp3ϲ ڡC:C>"cIwcbG E';g91 Z9GG5MPUeBI?20F3Ιgy&X,8WRV5Mc8/S\8&HL A8gBxyEY߮8?LP)S!XW잽y? _v-NMbxl36sTX0l *yl(Reij(ˀV,BJF1gΞdYlVRM$B5UiMk#xGUp>[穪Nʢy^P =#UgR|r5ǻ'SwE2cܳWwPZaK)#~}O|| "<5nC%ReJRvuP@o[hhBL! .Bċ@| n[x[E2o9Ub:rpr6IҔjp8d0e4rttrb(QRp@efs% 92.9w4T8)EܗhՒA稚X+53RJ8߈!f zsbydzgtԷGC Ib$o< Nq,x9}jgwg,1jQTݻך,+ZrT1_X,X[#eQ.xRoXǸ{.PϽaXsJjc+(c9YfJ$jf9uL' w]< wOu U]r,qq U]'۷*‰]5nWocׂ DkȺ#P07Oh0?> D]G),Px()ZgDQdrM ǥ^˟x>SZoJFv!Rw~~ql{sORsp7~x߻|>^Cy[˿s?]5`:t@:~ UH5,ckk UUq_GhZ 9GGGy5hsf)/'rc>Nd:IѦ $(SР1\ͨ%MX3*@XQAu]t"fX2_V,Kf Ζ4uuR fDDHq@+J<w\'$<oRyK,njJ3aA/Oȳ>pzϰ=B IY %{3vʊ45-)&Si,_U̯'.V>%OmB5㤘Vbo>:tΣY:@|7ꃎ1x| Dj `-)|J2zʿ>jB[շ ]I_k}l`x|y[57>q۫g;?Y*a=~o/V:t 𷻇C~s 6+WPlmڡ A`:9*Xwibrbb0(vHʒ$ i!@cu[h>S;yN4T(G[,eU3南|툲l8{vhY޷KbB2-w<'R!BKR N%J+zEp8bkDbD)jC(Q d=ѐ ޑ9N֎>l㼠3$) x]uG˒q'^0 ibH&3b1 iZ`L J:\]cKU5TttU-lw{$1ue͵҂Y'  Xj" q Kw}^ܤ'9 %' )q\,yׯkCy3;g-&(!I/\OS78Z9O>:] LBD-&CJ(U\d0ǜ|V:fqso߁W8::/W_E4,^i=7rk!# .^~wޡC C~I |@?g29N29\{yNc-Gڤ}Eb<@qu9قEYS5 ;?O&Tc4M֍=ѐsNszw=Ns4^j4)V, d™S}+'0C)y1'^>m42UMRz$YNQŀ<%9LLʹHMʠ$JF+x-Nhl#d:=a%XKT8~+O=s|O<~޸$ FHPWd d)~`H1rdh5H<X-T[j2 DK46dZc‡(KrأOq!nqp4LJfCiRvߝ@l?m؆G`kLt/NGf&^&EtWr4BcCdf}CU'10ROj:ׇz脳>;tG6m# mLf ,宻u|Ff9yqgx+Iϰ8z PZB+w=3gt/:tC~3D!6J+zf F-0OW%b]3N"w춶6H<4~AŰ.q ,UCcQ B!Mk 쐺r=yB&-3$aYV4}{c˵G%$ jEV HLQq]K&߸/Dt7SA(qe #qJmC"I?[` f29'N >3WSJ&9Z$)y#rGI30Q1{ysUbU-꒪Z,UI(W&TtH"D/J*W5M&9U7nr^lt8%f Ttyu|$Nf4.̦c6 .^x5Hlɦ :`} fВS;CzߜFa@%_<{ek)˚{O@Zǁi4͡>̠7b?O DmX[?Հp[F̖Q;3jBsV f~SR>Wϖ# ?#?۾s+C g[v/:t :taCyùׯ#MoIZ;j`$ 1GQ*N0ܺUT B@x,n5,t)E"{Kžy}t Xtj%Wיݚ.QV }l?8 K^Gz[Ξ١)eY !3 %ŦO*I/u|| &J[Im@V`rR)Pfzl>E/Y^ ɒﺇ>9' aʴMcuL=JH,|CeYlm2UjlljަCS jI$Hp:k&d#1YZ{sf69֩-*Ym3|Sy9EY7Mw ) r淖TuÅKsоn6LXI|8om\+M@MEhlM]cT+؄M_ Glh@I@g躰%ɜ}73oW Sum;GJW(ې oKk>VŽA#CϘ-V} (g9ᜪLt Ss䉏<^#I$uEfrb^Y|[wܕ˒A/g40[uQHZu$.lT{ﻟk׮eЪ"HMtH-%JF#Vd(Ҡ 1/,SRmxY ^C4eP*?"MlmerP8z&N(B|[cxkmXX[%zn R.(11K,'+^P{t5i/rl1a1cMR-*xb|_dh$M BVD 4UC{W}1 aS ' /)lO RJ\\ 1CEdBH|p1Be1$Ԁk 7'l*n?ooB"_;਄ 8;7ǿlC_C+C?}g.8oΓD P:xyn\g[:t:t/t-9n|zDђl뚛!PU C1X,ޓr$x=MS*di,PڠD,9JBeKzE*k|UYsgxս9Z|qBWڀRTU{O5<,"%R:NsWeExYS| c I[)΃kJaB RUCK+fLs$|@!{1^* Y@ 2 4&׸ѠAe`5${qg=p{N=;i }yA7A~G1&Aʚ>_?C'цyU}xTHK\gkkT[􊄪5J*I]xC_Kxg7:t-C~C;K;۽s)G7Y̧8oY'ݤVL9;f97~c&55(HiBj܎B:ŤfhX,Riz<}~Yuߋ ihwsJՒ'([[}zUD0gh-ZV, ?b:VUKVԵaGl" &$):+@8EDHNrb5I^ I>Y1"Ks@4{:YPmGiC#dtMESh ,IӔg/{ P!uG% ,V*I dԹWq׹{P"&[0E]CBPBqs2ܸz=|=ƹs[#ʺYm[$Bj\m9OocSD/4,ovX*d{u=Vu<~}JJ`z}!^ȋ_g'0s5[k =O:tС:tw:§-c=ٵ -&0Y Ud>;`ci(9-&xSh :8(peC8Qc$7~ׇHS~ś[;S4)m !>_ܙ1ق[3VuI"BrIcP2;Irʪ#=>M1b.mԶrbt6a:i|x\#q C ڋB@,Bh$Cj2!%;j[#DXKzE.ʸ{/=՜>7`#-|n Pޑ9tk ΐS[@]W\߿uVRv=xbtP+oȲlqiP9: "Bd$:1 %: )w6Jc<1qhǺsH U檬S[Ne"~tiSV֓rcO? "/h@@s8o9;Ck?IËy?^a,MWE^sooGG/H_3'^&ϒv(?"bb6O?ѽtСC'tСC?8 r5GnՌbp='ERF;> }P)<c5*k,a41yWn1|y+9G6&r:Aɍ~/ɧZV_-솥vn*׮X* !պhelas^Gv?6?T6D;^ iRע!7ubu"wR UUu]o|_֍H)1h1yׇ%T3R},s74^;tС:th'É,gq\ G=zyj>nJj[CnL#fb *fG4%M5^r>_ׯeYfP&%M MU4 AC?wqԈUE][ĐjO(&))Zڊᔽk{4!XgE+h<$M32Y/rEijEY.)S&71ݻEl@JA&:&p26XY(YA?-A=IJf=| RphBx' 0̜`Ft&E*SzG71Pc|[[38{Y&70cYG) 9zY7YЫ/ѸXW jGh] [-_3ۛymcBJakN|h-U]4 !+#5MseoZO3$yb?~"`O<+ kbR8vdϽ~=Z\<.~~ diSׯrl/_xu|f"#<ލHuڰ[7O_?ڽwСC'tСC[Cnm]b>:Û4Mw-5X[c"juC޻blB$!]$yƍC3`5q.rO|S|9Crdd7b])W l{_Upa8:AF1Iԏ;d{ܣq5gvRwUh./gms!;ehJVXB gVbFՔ4cSꪤn45xRIE1$/,GjC m2dKt+b0:.+VmzڤXqTHʐy 4B%*4$%^@ ;eʠFE30=E2uk,U]ǐH1&6%Sǩ1iNehm"$!q֒%}QD,;z㠓l3awξ+&P"dجXuK?e+j۠"g];o2ZA@פ^Jj`z M,'|h ]^>MyTa$vFAjR흈M^9>!܂,5o%a:O#eqC:C S|cw֭]eWHh}8R6u8 ( l UEHn&HP {S' n_}곽uR9Bq0]qY" sqLjkςp FیOf0ޥ7Bda5QN'LfGSV=ANY F%iAI2KѩFg)"Rƕq qT֡[G*E"TMJoDR#dQM -6W/\Sa%,,e[ٲzʲ\5f9y51,:"hmUцbM\H2Lĵ!6dzK۹t.B |0kѣ-uu@֝hsoĹ%ы"VBhZ@lxSM@ -qӐX Y$o__P"A/]o`wg1{._ hb#b,q5AOF'᭿l)]:Eh?!uv͆tŅO'ŀWBx__HB;a@S0 :t:t/s~=C!1J&q$IB^~p~T )b `P$mb~]*]ݒa{m>gɲZo) !* "U$HZsb]7]{ dt*fܧqHg)6qYvNd{xOWWn2&$X@؈ _lD+^9o28p.o]Jq٧ݛA:t@:0}xxȕ+Wq&UUZRh1 ZʷIYpܲ^vk_IbuB];MMІ{:۾5JkUtA}\$Z1dIұ@J2mRIIҔ4Mdinm|1WpM9U(C;rҤYAQPJZ$Z39Zkd8q.kڠ4C!`!^{+x'>3obfxN*.w M(V4rV;KTX[SKj[Sy0[͸qt75qٟcLBdh(wԤ;ɅCF[}EBz4qo?Z6Po u ǵX$00=XEH%kUJ!xO x"a6+~m.xdz:iXgH5GHӄ{!8kRPr{~]xWO;^~'i7w~4;8w\fѡCСCyſLE2T gϞEX,cXD"ѲGSOkMo*j;  נ|C$F+놲lp>:']p2`^(#shRd/hn;2$ic $!akk ,ZU,ػv7eKER(IZ'ɲѐѨ-k2c}d9&/0iNS~<&˸t9..\8h4ioL@0ygg^83WnQ#"a.q[XfXHtBQ]\;MC福,c ƘhE?qLJsG}iڵޥgcXgn/w>DWꦦqmb`XEHEpܬ!k3+[DTJc$x@B9wd=`=$=d[($)ؒ~|4"rkŭm/^B/ G+RlE.WrJ+jH8IWJF)M$$ڐ& Jk,Ň@Y6:}k-!8$RiAZ0Vq1Bئ7wlZVMC<bt$^D IHmڠҌXElcJp̘.e;&QIWӲdZ0_,qg/_+WY%ϟغ5A >ۃ1bH$&!K5 =J*fCQP)JMky/{/&M e֓Mu[eM%OpL)>Lاo\\G((mX-Hb& ePB[!obcT%wx×yE`hpp@;?=wF;sIz!\;VmR޹Vp/."2qjwԊA,6ܼy7|W׾{sСCNСC'޿/ n0:6tJ)61~IBnzƃ`" ;m]h޹@@x quu0<8}vb:!qΞ;b2|bRwa`r@k1BF$}D1@kE_ *N:KSWW%FOCˀגBp5v1Zk<ǻ8&(Ed$Wn]GG}.^8M/[+@' ZJ$iN2~Z%)`0q..,Oo{nsg0!7Y3&eŬ\1-K櫒Œ7xORNTqC)B4Q}FhaL/ M 4/Pђw!:魘oc0">馩hc}.آm ME巟)H\*@`mZBBjR*іz{I)['RHuQ+'ĉ ao `kKediN7m$B<6X?8:|"!4poo0E]\<, >͢C:C~C|rOSLQȳ,0ZB MLro'R%Ibmjpkg<`zMD%/26IZK,!R^;Q(J2ǃQӧƜ;ͅs;9=-Μ]E'&t5e4xOc@$x!KYWO],ed!7&$i"Gݦ>lD껹p~50y[*O[aOpr=G pWy{_V4(}ڳBdHfHql@J :sI!l,ʁ<7H-7Xlq 'Ex݉T %;[gs{ۼ_'\X)oK_/W|=߱5aiޅTUHo˿˻:t:t7acW~Ϗ/{M2\~fN6b֑\p $I&yayAu=W(W+w~~q&󊳧X" -KB@XAzۣf%RF; SA I.G][sPJl,+msV-$F( QuPWHW բ(\ϑH%8wvL$y6,qe!Mlo8{z,M $a8,ewgSllm  z GvϜa{we$ـ󁲱4MM8ʺlUʹ,9Z,X5Ucq>`}qJ(2cd1_.X%o^eeڤm! q;kmx'83locmu6iw`m2!ᄋE/`ޡu9<η@*2| BZT2V8ygH-e]!Al |W‰}~E@CuY%mdRܾpUM;//W}DƀǦu4i,Ŝ|g):t :tY%?o xɣOejMU}noOhb}эzfQXu 1P5o|6u:A`M z8^2w4IޅM FГ6?/%Nr!6ՆT\!FÜnR.ػuDޤ:tС:t?7/󒮀)Zj7{FR&)YZ%IHt=u; u)JjNdxi" !@JVمD1?s>ͼD 0{Vgd *z& 6.ڛel-68G[e)5M"FP )=.8Ac8h$TA@My]d(]'X:&;[M}! B+I$h8E5וB)Z'hDf9.HVeEX-x TJ:tC<1 `g=zE$@i6%rE,wO3kImk=F6睿΃l-QT6%r3"v qgETu^oݮ8gmj,׫k+|hɲrq󀈗vg_(~ )F#q͟*J <Ȧ~CE{=m ';/Jщ5Dzj@Jbd{ċ3x/Y x~&KW 3;#RV eݰ*+ԖjOØMC:t@:|_I?g"_>kK;B IҔ~^P9iy@T l:!༣+lDaIBꔠ8Iw-~&5#\CU(sx{xD) pRAPjg|[dG;~HRpd34J!cڨ%IB8eū|8zmY4Dm!PEW&)Ga C.>IFb k s̏hlKhꆦi(YɲHdg,V5UՠWda3[l!R,o E0(X5!LY7BCaHX5 K/\`C!T$>:ַ-y!ֱ=ccՏmsƊ&Ƒc[q$Y9Y;m6򡭔\[HZB'>^/I)O}J~aA%9;BگKRƊBh_&iw5Yڍ[{jH*~J$ j5'{d*}ؙ.V(dhСaU:0:Ea+T)I킣ْxTew`I'?SO}]CbnI$Mb͞Y`ќeYٳLn]z겢pe:spNpŒTAe$J}XՊ D2\]SN8B jƣThΡí[{G}yweC"ϐR`+ķh4e>_amPí1zg2hH`*pl: ~mԛ_#l]E2ߪ[0ڰX-}G3@f3t ++c?Աȴ0&gF{IZ$P-KH{m#$^ 7]@yMmB~zZ- ]%0|ӷOт mՙFb=#|-MK؇8OڈA[[|罖? c>}Spոb!mH!p$2[.BU Մox3{3()RCm Ҟe <ʍ=JB̙mn0/ؚd B kDJ dv@cu/iƵ͘$ \R,3ypͽC]EUWX,Je $McBLJъ4Q$IAH<7 9EW jjBd6MrUbͨ?f;(}uHri}⩘>{ׯs^[|p<ԇ,+P*k+Įhc?>ilS?B.:Ϫ\׿+r&%g& !<"Ozdz$I7}6 ,[W//x+"ekg{{)%n{0@85>řmoHMVC?żv{Ƈ͛7988lE h4ٸf&dkw)Ν_{EϿTru5{[?Xf(~9Ǘ|8sC:|N9:t;:Vח/0:aEf A^BTTMQ41Y]{=OS<6ڠ!5)RG! ! Liioj,ƢPȦdjfx؃s6R?Dpr(=sy7ZYVUlBYl!,x ϻ_G9{z+W93B)elHOch4 ozѐg*Bi_ɕHJ1`. /uB"@~ww  B IAxR(!Q:TuLp߀oTҥ3ehGAקnZVeCc=YfAad yΎѨǭ)Ɋ$9]䬖+ʲ4xYlv7>yՂBDٚ* ̇MzboL8:dLcx=JF'\78fcBBlR+lUiw}8>(# PHhC(Aͱd!:J/"/!$IsΟ׮ U}׋dրIP7|s[* }RŐ?^YWʴhTB:M~}+Z$|ӷ%4Y4m@\|b>c;ݛY:t@:<\ zO@JE0ڄ$o|K5I7}cȘ$h(<&'i\f3d "ZP"A)/!0ED$Iܧ[U DyK& u+ME$Fƒ$k&ۺʶ1 (/HpkC$Zkoo bSJo2VON3ΎOw2/e._;`2_e_{?Ûu_X'Hh0)~Bb22ْy]*DWAiBt$ļ υpq5B'ȀwAъ+/brx< |l[x8ڻֿ/)ι C:C>G`wĉ=~"tK}&>q[i,O^IB=?ba}Tc4n O'1i;q-@kxF; uH\MX"IS4Vz%hGJqIE3huئ5ym&T޲*Wh0[pp lW Ѹ nsֺ%<Ui泣6b@6&Vy9QOzFPhlҎt Iû(cl"q J]/[}YCr1!k,[սuСC'tС+UN2Whc 988@%,$RfR-8NVEiMb i+HY%@(,L PJ72" ֮٢?!TUCSx _tK2g*YM$BU]<QP&V&r1I EŃ=;~ j`2^]?g9{v}I4UE\Rs\voF,ˆ)&Kx|OM$nYVxZx\iHD)CZmqRaҌr>;֢D ¡(mP*7 /IR:.(ѩcP gNJsHՇaV^UW&< ȕOs]|cã9JRR.fSun$_]bzs0/que *QE@@~xoIk,E#YZkbҼTXȌML5iZ)I dEpՊ*IOqp~/D# unLuئ,+؆VFp.lF]7F!J )Uϵ-K&dB*n"l=zy5viG:C} ]_>0:ngY}( Jb۝dڪ7(!Fw4xT 69l1zRItkP,.Nn=log<{FC lߛV7NAD EI4e%JtIeRYvvdJ"M[h*Y$m61`|;I;&x9ws=}^{=ya`6p@^(Bsd;A@,dqr|HuLftc1b`9wO5..=9BiLMd SX7,˓DH0QjFI)/|1 ~d̶BwmR}!2X$ _g(m%Zk1ZOkQR"f/l("(j2%RcȲ!$!x$zT W,DOÿт d\oW|w78:8~X+G?㧗Џy"!.SֿoU{{w pJfzo}1}Z+)/J1?K2Y (R2y0BiRR`%59RUA?XBӢg(%JPMJe "-n&&#(nncXLN -AcĻu%UQ9ydJQw޳^RA[J9={dq !x՗yoCw=? EE/۷xt݀V)_ 2SVrdd1?upApr|׾Ζ(4Fgh)B# :G 6wLDКcC lF[|;)dJj h&$դb>Ҵ-ich(Up6SlY9gsz,3ȲDXWmqt0E{"f0 =gEB)t>e쨚S`!TK,O,o}Kwx|R)f%k ,ml$ "ʫ<1DSݠI&/Ę}OLsJb2+{*%s+HM!5 v<Ͷf~;1hqWvů }9Xd\8ڠb17h*ʂ`LN^(OA:o TC/0m̆+ ׾xp,Gxx8͝/c?QHo}<|rNkޏUrdHÐ>~/~ߏ/m=c?c=(y_{P7Z*^/8$wN^H;%'2&Uy FT'8&'KtUd:Q},c4mq B[|eDP-J u}1Sih| $x˺9bZm$e^`sH Yf(˱P`-v0(bn1zL 0n]szY^#@,1Ϲ=?Nx8}g2$$7H-QjCQ!dMʼHXSPVSn=b[U;'Ter9Kw,ejqOWmٴd=l֊ {vG"X.guG zsɒ[՟$?R蟔c"Jk^ϹֿH!cLJc0h=>i) TR.@ &T#CwR./VOZ*DΦa;oʻy+6h;|QZk*0:G*M9-rL#!"o9vhP)hS4p.)UX?r 2"FRN|q1_ڞ?=,ˁ7*>G^0noCͿyapQtb<;3=c`=㣈/挏뺞Uy7Woy E^&upH4J6*Cc Ɣ8J`f@%K&U~)^06=~׳[В`vG= CRH iC(bJIaw-uM ɼ,=}'AIi"mUdV{n("^cW^~Id>mͭC:}_/?č%y:F"#| Ge 1K^mg7x哟'n`(4kp]89:`:-zp3a͚aWʹ/R_ɤT"Ȳ wH=Mc4WS'Q&Ġ(a;A&G .V55Z ]r{k_kww;* BL-*R1 Qa]ϳ'/~En=c?c=!sYUxσ~17NNhچMF^N+ʼ@ eڢIE@P91`tq򭕢2\-=-f$f!HDþx"HBR* V-(zE"eҥ{7 )%AS@|6̘Nʴ1s( c4i7ܽwRD+_c8('ԭ -r|X} c˓/9⭷ ST)4Q{(d~prQ[>/`3\ù!UBᚎt4m{l%#ڞk9ɲ1>&Fh Y\^Ҷ;d&ǘ9>"p& - (:t dYIy4c2-9>X0O8=[aJ "*s%]ύ!TZ]NK'OXɴb}45imLnC/P$"^ C\O*'W)eoNc?B$ ʀ:Q$DF2)\W*'FipB NdDŽ޾2U9iwkښ?2$l/l/~-+ gkxu-*v_c==c )%RɘTB)XM>|Rp-|HFDX%5Q\Xgel6e2!F )5BjB*'Vd*0t8pMQbB9<|o# .mLVA$/vT"OӶwDƀ692FPJEJ☪2( Z*2e`=F{L)"SBۡ‰UڐͶ,KzK8;Ř wx>7ne:8?prDnB BTdy BQN;.K<|(Iӕ$w@QNDN m,Zu!L Hah!Ȳ STLHn膞ohIHSL <#D"m$Eʾ@t*)DMqϼ $=ӧ~S$jvn1$7ŒNl..XΏL+RTh%ǡa !yRHĨj!)r Ƙcȵ *)CoU5I>MU)F.??<ڞ_>xDHۓr==\NWL&%1 `TR$+'޴T}R!G*ɫj2A)3HYn8,sn0?Zpv|FVNB@^t-Fgi+I>`C^,/-lw[\8l? ;)> hqLM. ֱ465sPDEN+>!RI6U'>)5&8NZ -pgO,Ϲ`T癖-J̀BHG!s )B)i"k_{9Zgʊj28vZf "iC E';18fdδ,12|=#zGݶ] Dg ὇0gxgqϳԬ.W;bLiJcfX,8<8d:e01TՔP" M4[h7 ѣES29xiP|I9-p6⚆> = 2 CAhZh)&q2=m$d$kF-mfӂ[7O J:!yE5R7O~_*KvMxyoO{yUh"('5D2.yt'_D&(= "J"`L<q]q69%Z+*Ɣ}A|!@Il^qtM,ΏʆH[=^?|`>hwy78;}!%S"c$06+8hW;\?Y!$`>6S~dFsxYfʂͶ`AUTEA8a2Lkv-L&1BEMJ2!`>w%mctC7(ҖVv<XojuL'ix1`1mhB)k1@Ϯ!@. v5[8|'|]ݻ:!f6(GjB1_ RArw X(Ҵ]KW#" S TRE 2QB0) 2cRՏ!)RuD#d@9^{)h|:*&/il|DQM) $?MN+ܽ}?xȓ@ > YĘ :)&|h0 `mBR&֫SWc=cC+uE͛|_䕗_Ƙ/lzKv˓'8k./.s.Ֆ9&0_̹qr,ϙL&,̦3f)E]!,2,UedY4R"Z2FέCۆsZjyGgU%E1d#y)),8:l5}PdYFQT~b=2y2 TY)C`9;(B Q͎ݮ[>8q㟞Z7詭55m˧si .8:w}Lfr~p1:Ofژbm Cgk׼'7~5Ljw4mӰ @ZȨJCUeMr,3L񝖆<ӘHn4Ͱ#H9B"cp>SD$F".љL*]MAJC搦q!%sرQ Aܠ k?<8RD,3mPUY!C" >1f[s&Yʖ"<y ԋ1x^"f@I캵;TE2"Ʊ!`i/dGΥ8O īzSc=@i=ZH.#CRنD BBH,+8XLy{?(48TZMFUM8:>敗BcM. Dcڤ1`dyAcx}"L ?(YH~=n~s( _+oۏ]Rh!⹜#k۵{ ,o=c?c=~L]˃ܾ+/ RdXbrbٰ\.m7>i'٬kVYd2c3)$7&O!B@2"K\!>#Y!!5-m#LDi$&Zk|Hjh:-Y1N[UeP!%1tCOo-[F?zKsjʤ2- :ǮQ$/icd'6/ݽrytiZZ#ۆSoAJEf ?^ͯ0XK)NȌ1 Y17|0l/ *Cd Bu-}߱w]-~'mWTUI,RFAUv=ل*ʂlB.Yln fU&Hm( )%͖HsWH8 $Lfr1)b:1ܸqB{b<!HVv #K9wimaqp7>;8E\17ĵ i1hӒ|BYЏ:tGB>qXᯇ/H+~Q2e_QFH2 d9.Os|19YP hH'lʗRRjL*)'Oƶ1v(3ĔP%uӑ"t!7Ah vWS5n**O!LVO//z{{{jɄHf˃C{3t=ns1Ji>Iؗ&gypry]׳\pttBSȊ0N'WvM{Hl$ c&Ƙu"*bT!h(s$*+R0Q/*mL֩*O4CD*E!0 i4%!nϦٰm7L)ɜ"+1㜣vD\9f(#$AT)͎f2bd;~oO~!\9;;ͯ鳧ܼq˚ާt&B5;t=v͠<)gsn Jk2)S/zpԻH$Fɳ*+@FZ#7޽IyC`:I6Mѵ=nxX{2ȋ `;1(8׳^X.Ȳ,eUS?/􋞻^&39;=rr}J~GUKĘΐ=Dۆ?//*=c=~طɿb:q=򼠮[nZ=}D E$u1؀R)L}67oFJ$RQ%bֆ2pvz?8r~rݰ躁JDtzNl7!Hc| 8s_Rm2utÀ,muzB"&Kdp!))GG79OA2],Mx\fsB*wڞ*/PdyzCQ`ݥnR͠LS9n0tͷ1Z"ܽq]ܿ~4lQ ֒Og,o&6z!kw}M?tX@ldȤĈ#eryqŎnjOOX@i}:'bq4ObLG '5/߽|1Zsa^5B)ǘd:M3U[i[0,SfYz./7)K#L]1=/˜-"d5EQA˱JB`<(ru/4Jjl豾GƘl$m4Zk2̠Fٌ?'9>>Svn0`퀵={B8;n̝(,Rp@nhm GH%QSG\l1ꝏ۞Y5H1WaZ$]K񳳧<|tZ qu_l{i>yc=^{FUMFV$%\paR0J$T*EQHɆ"%G'LKC߲l vuw\m5ͮ%@%sgh!MJAf !FB0k2Zu/`2MYaz&@׳4 R1ϐR R ox)E˜[p~vJSEipn/4-%}!f^B Zh/wt>- ^ qYmɏ9 3Oop!xvN^ ($t&z/fq E1!+*}(6%nCǦid1]Pf9 A*t⩲EQ wyF^sX 6)'˃D4}cd<ЭnRãh`6;LyYVL'st6E!3JgZI°6;V1QLgVHR_Hj S{GU;GQzōM.\70µ<\rwIbfh0u. B`}"!Be*ADB #ZKV83A+|Hն(m 1X|H[; ! %I!5x: S697n yal!ȨK:T"w_[l;zl@}ʱmDkʢ & 9laLgXB)1%t/|qM}^`văhۤdJCNGqJ eS.g)rurTq ?%=c`=K7]3X, &|vzۢT 'Sx(&! ڤwm۲4M0 tvBHJ(d >C* ODZB s ` qIRa2@i{: Xg=MCݴ\oh6XuQN8urC$3zbLo.tɍ#>&gy)woآAgg,3tޱy61Za fur~DR5X1}ko^]p onD'!mGg2nס& Z) z{\74̪)y^LA ViAj1(PRk)dJcErN )̑?TiLkQP$cIQvtm,P!F%!@ bX0n wD(=Ŝ;o'}2w^l2K!%d?G2Cѻ}ZƟ!Sua4H[ȗ~o_c=~+cux1 {Ϟu )!zr#G I,]R,mZ$1ZI/y[vg{HsdRNل Iz#'لن*EV d9~hksYoZN>ƏR<[퐀Y\hc1L_*y acz];IYNэ,v"Hv`( (j}Jϸ$֑Oi!p>G\^3?_p胎 XLFw;J|"18 :Κ${׏ 'GqNd J),+Rȣ8軚%-zs @&1/R8Yh5kb1 N!%JiI!y8gGuv; c0VHc A?8zivK vTL@QT!tK0ǸoEnZP*_qjg>_ձ·ᅨ>% 4:\QH!(GeA!eqfR.H ^`Ø cr.6(!Y|~g-VXr,q@fUKTt5с7މ.@i\IU!2t%$7SϧYlVem4{S7% ]p'ϘfԻ䁏%Xyh?B8io֑9(D0Q`,U%]סb%eBp}@*b6,26ۖh%q!Yw>#(MrR2Utg!D@)M̋H7FdK<]=>Bd:L R64+S6z~ :L>xKaFlrMtDvAj2pr`ں->}?ᒦnگ:?3);mQ ۗFva |kz<~?/{ -{|0UFi)g ֡DŽˋ ֫KV5MK:)ReEJI6ۖQbd^MqCCa_JQ&nӬI;ǘAHhml!F2!D޲5m6 4ggWk6XۣfZfCdV@kdfȊ9!2,:9zGܼy/@(C`rʊn҆1`''Vkr| dEW7 [L)Zu4'|W}&RNՂ9ȭwyOItUw!mCLD!&:>="X.%s(F0#*{됲QJ2N c,)[b:R :i-H’{7"L BQY-r)"U#$("EYrx$/&lV,YTe* d̖G)(B$ItZQip0rrLJEv\?fZ-(/ dBw C:DMIB(T)@*`Ib>n>a2PM&L躞iY]l wަq( cmG5ch^ xT -ӹfg~S+,3~]Ξ=c]lk`6_\qfSuõ#C{o{{'5o ÀRc $RH e Ӽ"kZMWH hTnu*R^u;c"$&ʥY1z Natx w!<г]2􎡩R2t5vH7RɫYeS%6΂I>B?g580 `}`l{c\0t~h`swS7<\Ĕخ*^y%V[$).mZ} L&9@+ "%WlBrs_GO\xTxG @(5YYѭ4]moVF&L[zĴu 1%vZ2KD~}k! ”9YlVѶg"xTҶGU4"\pH'(KM!0UL&lZuZpqd:9̘N' ֍1*"˲<+ ahG")5? %Ra&׵)N0N%TdH\P AH:xO)E_ !gq}L;ܾQc=c3GBQ\w%oN]V!X'O'<{v*ÔCnh9\n`Rs"Ziz見)j77oq|&dml޲fqp"qr|D7z+-EI3saT$"q1Hm Hq"cD)a$3<ӔeFg/9>\2Vdab[uM}P{|)ppsGO"!%"UJ1#0=}<`,|7ȴK_O)z;"/J-#Ipk!FlpҏpԾջctA t=mC1P,g,SK!R;.WggL*rр-\dS>5,DSE"w]X'QRDd=8W𩅢iLa#bDc -7Ə*H-SeAGD .&[d,3<;KVtɌfp Jj./׼}laL.snsbrHDCTGt$>Kj9dj2ًv]+I,rFg $5 m=K]@HjEH!p1O>[zjCLYf1༻&R|4u/~mvwE)TMS0!d8@OJV]~Gor|Xw T XےL){{{ /_q,Z,BJ%EQk2<ɏ_4CPQ@5tI59D y)%rR&rk1xP"U`1#6 1~&1d֚sO#aoQ]= ??e=9IO*瞌tQrq!_/_߿{{nD>.HD(A:*IdKL7‡p5m$9*b!!z֛sBN-eBYI'yisz"=nEW12C_ 5&r%YL}U( J9nh6d# .P)R ٓ "cReܼy@Mæx;HM8JiEXQ7=v;p&c:?,f͆,>x dZ+i)$֚-y?O<ʗBDKW~n>_&b^%C}$I% @VShZC??גl>DR[1Fᚶ>[qX %J(B3?:L}b J8\#`C@s1G#c;# )B6G,}ry=0X1ƺx48*[BpTeN :΢(pα4<;R䊾w91zMVT3C*Pac5;>z_G"I| " )͚o(g٬eDj܆@."eN|uREd K^ 0*"DIA+qa`/%>X 0NdxggdA)kUe:lv<Ð0( Hk=Sb :٤p*2 C\ ƪ-@is45}C /Jb0txP*^_{/>p%@>RRf_C_c== HyצѴ>2&HڎE3.&Iɛ?MAkvB@id6TYSmӚ̩ͦu;)LVvZT1KELZFf)y|,9*5" Omx^MU2%89>d^1t;2ޜB,TNq:c&-[UOgZn씦ݢ& !"tQlç>iݚ͏a/ ~+('WmqLnhR(ϧS:>?joBR/ejn:F_<<'L*g"B czkٮ|3_$:@ )m`I6FɵT딼Bm(%Zw=9#*hVEEii[g-+t]OYmZ@zs&f| +vIGBr÷Ǿ I:)%D cBbm I޲)[RPĨȮnp"b1çSXa XT3&'wPd"gU LU0xCR%uh))䕯IW<Qe 9,MJdAJAYdL|)\IelR0VT/.DvmZ|L r]OwދG &i };@n;6bY#%|ӯs||EKE llq@ETߓ9DvM7X ~0т^f)n<2/~,oZ'?~ik7Go'6-f: O#"a+-i75^eܸy29 ő8u]T{}_şbԄخ.\l:N QRt@^W\"k%c~\E6,f+$rb2۶bCZC$Y^~y~r"{[^{D|!y5` pq7:+hZɒYEi4JJP&HNn̼hALh`9G4% "kD2LrClVpv^)594(]ET4Ƥ:=!F"ca-2'0BdV6uBϖ\lw rq:w~01B\Ij->Ϥ@!ke{>GSxΔLsU^"&h7~,/߂w o# G;z'`|}s kik,x^SZYsLfPJ%ut]f#Ƈ|~QFyK r1Y2$"@g |L2C QJ剬)%>|ІGvkܹqGOy=ˍ5ggT9n.جyj:%^D QJH( 1Nyֆ>ֽ5i1(CY-xr1ϸ\^{=au98#d ZJhQJ-2)A[xk/X5eU9B4%EQU S0H9Dcmxȳiawbk &E߶nf$v5$1kz!YL$B/|WWђCit. tףd*0 #~ƴ!/S"cB !-H K rtst=c< =j| k`!$ZifՌÃc7s"> ( eUR97NΘO ̐eY銋 Z \NVJT]!3hf ˃CP YYtlp"d*Luͦƌ~pD1e8G(TYve5gqzYl6[)])0ykM[A%׊ӳ='%yEVkɀc[&S-~>r"9c>m{S>b(IH;$c|JKdug>q~N\(#/y_yNsnz=kÐ/e~% -o+^ .Dz;1BT2$r/12QZ]mj 4C $֬.wrôRnY,;P7}?6w=S3Zya Ay|($J W[\!胠L>~|ܒ]iBMI 2=fZe FLڶfzoYN|t5Fxd{w }CRrT(<2<%u8guuC['T6C6[N=1qq(FB}uP@ďQ-G<j"JkVJ*@*u@M3 ^]gG+/~{ m7{.g5m΍'W ~``u{{Wm;`$RkP(3 - eQ`2CUtM B#s|6arW Q!xpFyLZ4tR}ʲ X]ȘN+< |!bS#p\ۑkAY<'JoG'0Dɒ,Sew^b)|)>c=wII^fPF>y`YLD6X!9<978;}C$r&?cg[=}4-7K^y邟 )5Jxw1/Cz| 1jP:CE606)c74Z* Fơ z>$J(U=mb󎛷n1ؔQ]zR[v4zhg) MbJ '\ kmSVfgyA(-! E?4zJ-p|˟yˋŖ>+޿P{ {O;?/n_\ɓ$YQQB;ɲ,PN*QL1Xf&yL1ywֱٶ|׾_2o[glj'FG" m̐gX;%I߮雞H(u qvEُR\Ao;ۥp@d!zIܺuئg-hD'O.xӟSSX釴l'+&\Dƃ&0^W?qwYAt}˽v-խ.MRtN͂Al7<{O ONX]S;ܾq_[fՔ0|9_@Hݗ89+/*8tmw]M?t Ҙ,OD ~ VT:gSoO!bRl& >`2kݦ mӳ5oO/Kf:"vX{cXaU !_"\%B&2(rxk{kcra2ƧyԤa,+1yIQY[*+n`uCdtZ'A&K)JhGTeIݴ0%zR˜~\=e>)%Yʼ&(-AVL+qD+,FyctV: wb ~b:yG= ~t{nj}"HYf( y#`,}ߏY?.{fjox կ{'ϫ{o =Zq+⍧b$I2t[R43daZ!Lf0FRϵ&7EǼdJidz0֩PZR¯@kE'OGUQG|`p~Fip\;( C3BrBIx$y.ռISbw2!wp~vƳ'8X/(pgf@Ppyš9yLI0-+2ݭ}kbj.o %MkJ&s5s=?N& 8 Nd( !oޓ>WL$u/g+??F7>ϧ3v`1/AO-w;+8{Ư#BH (c,% )J#${LICQmO)WOHVo%R$Ҧq}CGolT:Q1)$hePRe>8Dpa8fu LDh3̰!8 @$Zpr0`9G#\;EʫF2+4wn=>xJmC1ҠcҰ$Y.UCTJ YwΎ+Qײȷp|lcJQ׻dM!5(E?ta[^w|@7ǝL9סCɋ/t~/s=7`=y-_|3%2&GimEbq[wNLS1 6U(Dtʭܼq0ZW[(1YJw!0 Sb"41tf?GsOYpgJgAy4Hdy@ 4`-wʸyz.7k.w~U~hQR#Qm LJS}@&o=z YS\( KC`hL|~"TEI2o7z ?(>b>IH! }vahjlf7n_W^~Gyorqli`YNLf3~g^<)fZZzjނK,J)T^ &Ȥ^@p.}R4 4m t'm00,e$w͎[w_mC,cR8h4<02IXTl[zXxkEKhUB`q;-HMN.K|K8E*\Wl)B()=A\MK&fO YY邲uCBb2|1k=yTDykNKV ]cDKI͘ѐa$!^Iǡ 1\xQ.*!-q02Wbs5wz,C?ù! \쀳H7V~3`=7`=ǏoB(Jc򜪚r|لtJY@@AmBj儗sdђ\8?[LǠ3yJ']x5mjjcWt%'rGkEJ -DȦ:PA*ʳT)'$GQw=fv= JnVW>={YM > "޺/3^9hz gL/{e[a 7֭\{:LL`f!A$ @ IӢRdZ%[e (iHffzsz\7{oUŒUnMs~@5Jy%5Hbeugk^"Teĝ!P(NW_խUA#B>\Zm1ڱsMRxzɽDA #y nܿMg/t?77nƽwαuk,}llbA9̀f+iP NI!Y2"ɲ1qxN*Ң QO2ڂ"pK BrիܠnRC\ 1!m{ܻapLE,/i[jjP)l ^'цZMTDi)sX /Bk+*?!D9H"$ cFXk>)Oe&WylqEo`8(r'ɱ1쒥8ESW؈K`-xo mDl ]9yQxsjɓ>fQT;Ξ?p[hk|T)CO+w ?x{?Bxd|JBc<체\ԢwY oA?Oic+Rv^Fh4hHY^cm}0yrwk5FU\ޤja?J 9:s|x%sR^rwmZr6Gic(pk,y3'ɘ"ϑNwQQb$8W?.,9K:'))$C:2!` mr>=Õ5Muh;z*X^]fpp"+8/g>wG pv*hhc|}B;I_X1l@"jq1eNjݩj,wVxKUd .\}_;o낃dD_5Ӭoy'zW^~4c\^O 3Lxk޵]]"Zǹm:Q\GI2f5V:p^"i篅+, \ zd{G|x"Eއ"sttӔG?F׸{0,1L5Q(cH0:р~Ki2㸿w4ku32TBNO'__ZD:aw^rA!-I2<ʸɉ+BzM)|^)E`jujԌkln_bd0$ I)ܽ( (=,t]Jip0`yNO*jaKN@igK@o>Yߕ7(u glٷw34ptt'>oG$L_N7o=\ԢwQ oA`|}=nv0nYYeeuzs*f )$xC*[[\xsh5[hqJhH"˰ER :?g iBz}Äno>noqn`0h?k%-| oK?(;RpŘp:\&@_#N|.S"0sS1xܟw#N€0z;{j~gΎ]ԢE orǺJ;Bcz'pp*hLf"Q\'7@fd%cZ 43 ]޸C$1i6׶^I3"c8p;B*ILd5.0ެK¢/ KVA# 55 s[dDa CD ɍ&r滨`3iaf`?oӤFߧ(R{DRxłtsERpr=HҨ5+`nZ(J ,^+%HT7/_owIs֗\1:vw$+s䚿0Vuq-A72>o ;+ƽ8i ڛ/+ܽ'@F{7/gy+_|7[zQZ'(=$h4j\{qYɲ !.mk!tNWy[h#?N*Tc Jْ820?/rOЕR?.P;)ϛM׫nʷL:Ѫojf~⡤}w%Xs(YZ^:>֬lr;@ˀVF^ @\,MWX{ȇ$iʹsqvqpʓ2&g{ ^{wZԢ E?%n%}g?DqHE,[0XVIh#X[]mZZɇ]tDF,-NXޣJHA R,MHq,MIk@l % ],EFyvYQoPI ʏD&"7\NV3ff#BOSF$Ȳ$`}{ ) ɸj 7(kHӔFsLH$DaD&'hQѬGXㄝϧE1*XB X]D4XMY.Qv[^/G^,h<:9yɲcn'!0lb GxYYnqOh3[t(X[_[X2oZ[M9Dj~# -*@_SNF?!?ɗ E-jQzZx,jQ?W3T(䩈8 uj:zz͹s[m%66Yj7 Ek9rtpx,KpBP5qP)63g uZaH(Y:f82u)$$.^~pc4sxp!ш( FS9-h C |K[Z^Zk'ȋc5y`L4!esckapܦ8i0`0Q(B.r8%98y*= EeGa謮H0i.N gc}*\JMA(aV^{4N)y 16@ai]:7~'88( LJUڬ焛V/ƣܯw ÀIT;1k[y֞HFOtxZԢP,jQ\^IńQ D KUֹ|kkk,wc`eR͍5:&F=):bFJE8NK"#KZs я)ya)$B<L;'`\~v4`wO'J x'ÿW;ԛ1يRg<:!._\|.jQZpQZԷ!RvZzzIѢL٢٨3J2@ݢ٨g^op)E>FIIVG]")Exӳ-RDzs/! BA K(jzt&smE7 "s0&#hQFàtG* MGPMLBo) ctޮK@#wYCvvW}WB)w:\j3nS?S7 f&cQLъz? <ɕ &5n"ҹUF|ዟ7'8[|cHZT`S<%RZxR!k"CI+6쳽LB|&FkA6Zpx5wC T&A2F#F.Nv)& o_FC V$֛vB8)i OgtB낺>P=q~` pI+AskX"pkF( h6$BXMfhch5%,~k]MQ}1\OI[Oрr܀j=Ju>rs<rP8mwVRq111<* 6;(н/}?cFD> ǯ~XԢE8/6o&u8RW9wnv dGkVWZDQr )`!qppL=(RjXȓi2Dg5"O {w;a8yB" #TkV#,'C5ÐFpXG><#5a2"0i;>&dHGd#ƃ頇zdCdY1Arc pֲܘ؉lY_[%մo~((4{={i-& 0FĒ<kcpQ32@JI^nUG@h2cY^i.Rݻ:[[)q{[\pc@!FeT,{B{ֹRJ{(!$ǽ&޻"1aT#㆟OFX6-LD@ E\iFh`=",ZK88zBy q($Br,0LW9>ѻGq-)8!$ەC2 ’RPwy€y_H(!+ Q *j0Pc1Fk` (K@lʹs`6ɸ? PB2Ͽ {J0TP Yw*>,\ů*y6򱩓X_kp,&?-wP^2o88Wtoȳ% zqCѺܖf#(uQZԢo/ jlmo0 Y)% .ߤ٬IspK`5X Mީ?aLATkPX`w%ϋ4k`_ZAHaT]jQBdMJ j,BY 5J PJ3"Y0KgR.E.8\Dr.fee]hqRVј<4uzG]cIZ8$l;B)912V[߉SLdwCYv:jgY^p5UX)sFmKqB6(RxbN:%l7Hy?YM8s޹sz"> ?J)zْ't䍘yӤA; gRh (ů>Q5ye8{lξbQ>3<E-jQ `QZԷvm?^i+A^QYBJhlD#$/4A~0.ݹ˃;|2zCᬄk.<ť+ ɆܻGG;%!!z|; ܕ#'dzߏPvdg?Ǹ_GW#IdsCgʼn0$)F& .ϰp.,4MjqqR$jZXppthQ>cBWecF>a^>Q,(J3=]䌓!dHHm /w^oJnk-z/],x"AIteߘ5ܙ^0kHltDE.I0\r YIȰN,aVG[w883r 4DXGtVpBFA*  8ĦQNYk/y/~BECZ$.I3|sk/qr?_jvx-l|(յM.]~APwwƕ+Q">LJ;<'|X|?02潷as7t N DROI8cNW'4ωZ88(,ڐ$)Yf)Z%u{DQ?L PοIΤ )Øw^Z|.jQZP,jQ&L@ X^^Q>,* (?HkZDDIɽ#t Ҭ@kKdH!0Ƒcc{ k*pH>YJ'w酬~NRJ Ęɗw涙+ T 0~w}UĘC)ϧQ! o6y Gajz-pmak +ܹ1mh` 1UY^bfPyqfHHӂ0 8wniRaa Y^ݢ;xڹ |#Ia%P@hWnf_8Ai|I{'vQgs#B5J_|T$ߧ籭䥩^rML9,Q\Y>ZZ0{%/iAܻh8ȷicvRvvIӄzBX[m$H[0@ J󼩬-~vY4ZS^z &5%úiϸ[ no8ޏ:юK 2PWʗ7f<ʸz:䞵H8T>Du6Il08pE@Дy#qûܿ i:cN.tZsy#3V>r3ϓ́jl>c.V`]lCgO+4ݪD{䂓sW[q!pֲk^em2yەjUzXx?v*ouY։qi) Ԁ$Yb'8o6xv8HcY!h:%j&wdQXt˃ V!LN 9lqpτk"&)HY L$; McHAf4ӽlN\`3nN؉ ,d( 5?x%/4ya! $W:\ |+b!ϲrMdc!}:$/WI~e(NX̭ɱ2%YgFD93;j0f0i_ALFhiTgRjdHdAE-jQ'jE-O3QxsLsp` !Axw1?\䐏 [FWv:5^ޟ)t01LF҄Q:f02NI(I&#рhHVdUVx^0ӿ֚^w;{ݣR-kN)р1a)I;$.i2N@H[g}} 9$M eFNׯr%7}\`c }k m$+nr߼Ym7_:-l~g˯jj2O!o+VtVmw%) YR輼mx]M$Q@3],#jpMp8n޺_ &@Tdl]!F(RH9u ތOhסeq\0۳"N}3y|E-" S`M 'C~!$Y7{#OCE[u7BpWLpÃ{~[5Xj2u͸F\QWxyN208cp&K?x j3~NstVx9 5a18KQ#/ lm_-*]G)L%|I('_̙ ~KNGպxKHL؂Ѹϓ~`AE-jQ `QZԷZ;1c.^cׯiw:[m/F{,獷‹71>`̸?& 120 {dy1e>{ ĝUZKs,am Dw&O4s]v?axG.Iko&$"'ͲJ/lqyQvI!$Z*uhأz r7)ߩa%t %*RHy~k,N@8sfn(DK)EI$e0Jt'+L,u9w$K_eu q;R3e'E!x,ӟuyjNXly7}v$YO;MQyRgɝpwh<vHsKd8d9P *@)IwݻwF5Z͈8V~sP <1q(Q;R CDm7nIZk1:)d%pN̘(N0WTЕ$B{ɾup^]OKJIvtBB1;IVox aXJg6 2pe)y6iO\b#i,jxOY>f?6SYkdSzqL,F3Dyy`UT{ϝz-ӗo ln,5 έ@ojtZԢ E};6`.JF$IIR/;r^ZTH@3:Wxٿc.J}[J 3E𱂅u'i)i2ɐQUQTkQJJ9^lms7xs~kQ#ӂ݁_z/|5 ^Z R80,\Z]Z f#<v{MEXB14wvZ^\Oi` "\)\ R_ڛIx'|qUbN)2v83(9WS`ViR'tDw%M()A͇/͘N z;E7 "s;w`UQrB|HY8` 0VVʀts9m3i B $Hq4\ЂE(91Mu0ٖ}. e5^O};K&|:9^yxD-Ye W:[ ._ģO< I2N,#ͳ># 0u:1`:k,A 4'Rvi­7n{Ч0>^X^ij@ac͋W([vBo=^Xܪ^Rfw N` jv rqYko>i:gI}U63k=Q2I!Jٺ QⰌ j4mΟۤ i4"xuaHh""IG<عݛop=ƣ>q* !^bPIZWhn~Ώnf r!ƥEx778nA]wL] /T7֖ b2bcehmJ2QX ??r%CWȊ/{ܸ0 _);+u Tag'{$B?c?Z阢dEN&|ś !q{ŏ:.]dy8?ޣ>zs3 1XrJ1V:S@qǯ~l-G>;jHy=߱]ԢE-[T͈NZ]zsZ@1΁ISt`wwn1b]`QA聘=~Uooo b!BVW:$jnWH­;,wl_uf.mV,-vs_FLH$+n+@Jcm~G SYNgDέ)m HιG=VW:E1B*ĵ:QT##NB!n,%RBIf=əiڀe[jdz熼0ZCyAXU-Y|/\H&ٽGAhkKg{NbZB.O}?ᙧm6QF2Hß?_)Iz,˸}"8k\D{" +mui!>р.yXYٞ*f  @9*4Hy;=Ěp2}!e}ϩ.8y~_ԢkE-[zεG怓+yfzn,1yo2YR5޼6YbFrg"7DDa6Wé f[^|җ `sq6z*;{t|cкҰq[h"!E]lYYj"${FAL^%RR c67/:ǴYO(@HInag4+:w׿L&wm/] {$R `}#Jrs7?o:b͊3'g:dlSaBXK ;w%Z'B0D@EAH8e|3$*JGy 1ƒ9]NȊd) PI )!gߜ a 6BO9 Nn6JN]靳HGDu>iCh'h6j,-5$ =iX^ZÏʫtc0Xg:C?/ h6paoc4BB',]q<ij<3<)J/@J(e-AZ@ߧ?B | JD!ш+~z[3T{r?xEWHIDEK/?kfF7tZ0\ŇE-E-jQ߬u!X[_cggUʀӔ;,--uTs1.54԰0C5qIoEH)U=n؅\ظȅ ORU:/%>O{'zuej5T>ܺ{ ,ɭPlo?ν{$bͻtX[n7XXϽ[12@* 9t '%k P[ԛmDhT2(ŴcH*$` ؾpу\ki֛j}7~?FݠZj"@R*? GLcDp@P{g?WO9ϣпdJS:Wc>`s#'xUAA5h!B4 S 7oIjFJ ΉJ PabFN5"S0Wњzp6 v$fcnnJ$ɐzǃҹ%*OYzpӘ8RLHa@6:&]t&)(CC:NwFZ=.myB ޭh^ŋ|O1 F aawwۣК7wX~::GBTFrxuy'!>a"hQeKVh_HY3@^Sd:\s̜՜08M $1!z( 76 O>E-jQ `QZԷBM&8ۛg ]Yꄌ ! ͆Lc\]7; r:˫4wM20_b`8[GKg:gppZj`| a0J~qO[3*)C2IYqmܹWaDQLH 7X8(}0آYS0笟訇Ihh:IF0EF\.QXp{(tpX+l2Ki6rpǯSwhEdUw#ox\w3}T$aT ь m,&"L6;7Iqih̺֗eY(P@~V J5@t3f戁w?Kў ^yGwE-jQZZԢ9s ZK~"7"1/uZ4 0Erqnk<r-IKtY+snlD>d3-oJD1AƗY:u/ ?kgVZ{A2 gek+m "P `}*{,+6K1EvÝFQ=hD%qWjMTtEDwIi3;!.)MsF!P %IJ#z#P!"R"cʮCHHIR& DT`I6SsʈRȲY[xb l+ ) F T B*DJ)`hWnz򠤂FYJ3GGɸX0 lOHYZ#'xq2ǝsԞx!|o[_|k<ٿ@⽻?KkȊF VAޢ&NR4VPa1H(S$!JE4mKm%$1=o޼ ~iW9?^e)~@A{cuyvs(ǵw~sKp~)gٻr4(nr|p}~~N$p*vsuE2nF*G<^]5ZgdƘSH# &yD  J!B:δӨDq K+ӵ qRhru6I\a{<GǞL2>ob (uׂFRˏ̙)"ճfHSl^:z q|Wz!.jQZԂXԢ?(گl6.'hFwޥѪ)(qp4$+,E"$qӔ*Ŭ#)g9SB=A\^?/ʫobOq - ds\^% $JkM#1,Ed9&di" m L 9-3sb֕+A5mr&Z^>In$@sxE-jA,jQfYDz 0p%Xs$ɘvv0yE>Z{/˯ FEs:W^c~߇X 2c0@x9i-Sz1isn{O|)\7K+_3~',*'N_ ,M-hk5.h^"cyi;9ctDk9ʀ(d@B0m ڢ`8쳼U Z ʬg8qSi7jxqO$M׹x~ Au=+~ci=J;,^~w TNKO}qƾvg2>QW0 j) l`$O޼SVMonP@L|WKHf'\śL涁嚶i8PCLs\8ȳq5P~WYJ&" BǼxE޸fYgb v IwH{\ Akȱq2rQQm/[ qZKXGjkf{9Ox&B N&#W5 !e=,#3j. bkG@`L*~2Г5^}.~?9w`+Oþ}?aF*zEԉH8SPFkLk8PRyJ5:Z((%6/^_QdLخb F [cK(u0lm?ac[,)} W&sL \*/ZzT}q L0d{{CBh)*e)B (Gb$By@쟻L2@Z) TzX1Ԍcj)1kŇE-jQ$[ aqZ ;smnߺ.rVY^j,O˜zksۛ_vCgfݴhCʀe-04sӁ_t=Tcg@(E +xtC~sϑ'[(|C,d. ͕>qHh6q2DI?J!ZЎ,itWRJTHII-ik1A1IX8_4ܕ4RxRe 'OiGzh^ppp׿+["Ksd s'L֜/?wQqђMRJ(fme .pE.* /^9s}8ai yѢhE5 *%Sqltaɲ?v%t`q,q3usbؘ̗@O/f'KZ\u\^LwQ %3V0zc(c8084 ~pb( PR29@xER(n -_.FNk|''%H9"bD  9Fgg/N3_4}`ofW_yVAPo򄧯,ȅ `QZԂXԢ?Է{Fq hMQtxyȲN0j{{;=t yz\ͨOG0r /0g' @(EXz Z77=N3zcuG?8N_ū㣟!WʹWށxn Qom EutԚ $ b"5TK(E~J1!A}Z +n+ied@9w"yy 贗Kh"*8`)pԤ887r=9>><3<㬮hi`fj;;h]9V%#<#cZ7 zFM֤UkT2֢:J( QI\SG bEEePe3BPqGM &_bL W)9*YMD'HwpnƮίXBE-\3B^+^' YTn/w`[}ʼnYŢR!=&cbM8#_-n]5(vffYLJջ&'ٸv[;>3yZ pũ>tf]:5r&RI (}g_IE( |]HDH@ |ָtCIA=P B aU@)dcf9h<=nRo6  p8䵗~6iv55Л"޸K_?j%îm'7{opuZ6k箖,[zjF2i#"[wB֖')TX9/:Zq&6h*WJ) roN֛֝QT+ȏ'w{׿ΝwTjiUƍYsZ8t^$c>A, "#l,X묱X@II=Ъ7hu!#=~WOФcoݼ *'߻(%ƒ"ψ:=.NT!(]K`FNE E5rmBĸF8AcO>D[zˏ1W}vRM(ZKcTѨJ|!Y1JH You@R:/%Bt rz@JUN ˊ& L^¹5dyZ.HLg<ǾɂXԢ E-jlmm[[>[l9 X1頻LKփ|Ic. J}^ KC4qe7RL˓2U_@!Wtyƹux۾w vg?f,%0V\<#ϕOThO1GB Au-jbepQ TI|81.+?rl"pڝh $P!Aז71_._XvY%!RwW3ɝ"o?S@kpf>MYn`22 ɲ$Q:&/j4 )I! N1Π6]ell_YgusZ#[ # gܻsvY|VArU}ig)kwንyp:}`bv'6v8B uZu󐧲%d W( ()M/Qa lqrP2NL:B:s~&)` p1Q;tL U'"*A%ʇׇ]V6:[#1v C*.9)ge@ [;A*#R ox]*ydE3 N;'@+eC |׻|VWsN3~dE9Y)(J giJ22=emvpx@/B z-* 05%*Nuc} xA!)n Z %WJDOQj:c-VY5~iSDc,J8fY$|Ԣ_P)1hlçTJswc23ao+|j 1ZԢ\ oj Cvvvx7듗Zy?0YgsW&(F\9Bgwyq5qjy G:#{(8޹Jwu߹YH)tq>4E28{쑌Hn/ɅKWSp+Wq6vz=FHF%*摕TM:v!v&UO HJ%!%f|Jz4p?tSz($at8N) ~UTwzC;wqR//7?+SCdy0[: 9w?ܥ& Y+LXCOfE@bB!988Rq"&s&oWR|Y0$cj:Q{@QDQ("@NeiHU]qL;F'Na"K}6G<âE-jA,jQZ7F]+1/3h?΢G= P4ՕOlPq";, O_)Xr~tM`csQCjCD)I9J(.J} \ʼntKGaq~B2VA-^<1zTHՙ>l:E[8K+(`V{!_oi7q5V] l$;mJs>O7!qߟ:Ye8!}h Fd>< IѢj5jJ:B%hcPE( PʫDᣋ}A%/ig?gn M(>1QP# bF%'l؃ BTp+ '-IBߵo^<=y,N~x0 HE-jQZZԢ-R밞#z[!gf/^ ÄadNwޟG[gg_9J&$b@y겫]\j7X]V ڍq f@XhBhL))"27Ow:޻N/"2SR (tފ7ws9oC)EBi[u/6ۖ֍>q H:;R'Ti~nAUg _9ɑS̯Y*ڕph0w둰N\Ձ ?`&6ޓf*3ARƦAAgЕw* 'u8)HY57 2+ Ih/~k7+=@H6@Y^z5Jgୱ#8)b 87n_$&CuOձPES9,GzY0OXL..#M,-f QQ[u,-692|$ЪDE"{k 0Ǝ/m:ndY@Q&09cAP(}PIj) B(yK},<1"' Cqͽmv>bHG,,-Ӟ'cc;!z8tKJ^/|ʀV0  J%fP /BĎWP!(@VOqX/x5BȌ ?pb+qP3`VՌլf5? >YHc;o&AY'$2j؊TUBpm [>N5c#EU@ )`1FqeƗc8|#[i5kDIrLB+{>eŰ=$jrMQgn"=¹k'&Y)YcdrZWO%3+I\twe7nCK5VL8deͩKYilD~N\ysu%* )<3)Jc_%Pbjsc@%Y?0IL%8)AG4{S,,j/a!"82y0F8+xϑH-~i+CR)I%%{s"De9q#>4SQ,+ Gh4Z,,,hI^u;U_ 9b)-Zy j aM9} R HA@ZWsAEK #ŤMDS_ CJ'?ݎ wykŌլf5#f5Y5+5[La#&`tE\ܳr h`M-*k9%vsc+%P6?6sO ҜЊH }.&c8F9vS({/a;duT`-2*8n DB{|t0맴 fsV{+Z3?dGYpXq8"s+;oRiO[oi0mM|*E^E؍G5,].O{i W2v D{uAVE%,-i#EB{9P#NY:;2ǎ?wu@FQKU,.EQ!5 ':DH ֶ{„mLYD^) D( i/i4Zq $ZkT ,uE)tIFѠ^SՈJJE+% (#J#+1y*B|P|t;D-ɫ!tx$3`VՌլf5V2>;w2qP⾳Gpخ^?ҍ6تY9" 9a%ZB#<CBᦞG;*TymGTvN[dDnz?0L칀zN'2px83!IalfEAo^ SZ$aV=ziA$IY߼Ε+z6;k\xWotQҨP tws2G s l'?H4 AQe^'d} 8y:õh ( β= ܓeH9Alȱq #8zlcZ#:]~Hj.M3H4:sE?AgNwwp<)QS1w8} K+_8[T> nZFv% -&V`p[[t;Ҳ""ZX'Hˌn|yo\\r,`RёZ) ^ϰ;!fFF (Ȳ>JklsXWK[Vxnh2h$C?P5pMzXظQҔzLS!w^r=IQS"¯z$Guo\ﲵvZR f=ʑ|7~;> KQ02sQ%eY);l!CXXn38 a) bQz668)ZIB٦lkRyO!pOn!A*:񨁘SQR0@ܡvI-mI4}uwjVլfR+\e5k?Wg 6P1eQ`%/ yn5$1w8|>y~fAWSZmc0]eiM}[| c O=7ZVNٳn1x;xGG&_ReB 0L' LF  SR'/#,ڼMo;R9: a "7I6R y.zd݌HZLl5FeVXZX@H)3 kڴ-FWE1Q(FWW+MDtz{^6`Fx#MkdF۵5(vP?ѳDq)=^ęӏ"\Y8qs؃*$ Bd[xIo^ $E˒~q2G^AEG!;1}dEHY]]HP"V?ƽ%Z{?Z?Hƥk€( 7j, %` ^]{y$Ik4M 0RcO/n4U4h @I YѵI({t KLM\|z='Z`*-9zm IYjVլfJ\ۯܟfG8y[vGh%ȲSZiZ%eaȋr vuGEʪ{&8T~7JcH7  $+?Y$u(lR,/ ν V k3&Y1Jp͹oP88PO"$cΓZ+^'+S+:83W@pf_ɓ'RI^e]j?P~s>(YAg7r*_: $I pM[ F^#S%F3w7h"Dzx \ܤ*ZFƃ6{*۳լf'[3f5[85-6y8wZ@07"MKJܒŘgC5{R( CH&wv{LSMm(4e^t^||W)sl029C3NCyЧO a@IIaTM8srRtDTaܤ;R`U@Hg/_ȑ#Z-666pرWEJډHIMgǣS?69(rϷdEJ .{cF<ǏMzcJ"tLi,r9زRXШ5I5peš |RRVAS:bB@Ч_TR;"#43z!$',Rk=VEƍ 0ӭ_~(nh/S07w,;>(XXjad!֚ɝ/OHxSodk J)VPXC'8kHFw:hr/쀭:[D _栗b@j\ғKv#s,-9rd׿,o|=,//o7{1{{eqq8AY:z@SZ rqC9 BT~:ha BL@;L`SJ!'ÈBCv BEny{w˨ե_4%L0YjFjV՟`fSjbrhhL|U(zQcc{QEYk}grZSZ̈́$4CPK)zRs*J'Eט;( E~YL%9_9Ap{wh'^51dYV0(2w׸y7:q1j @L{kw˟)P:MLZCqU`nnnpHylHq^,QUDacsW9Kz[]6 *$' b`YA^ز>Piz݌AVw?Oq2i]1 !V!&%W[9w~߿vkĉjQjj#[qP`xC{f-o-{ ;Ll`*<'2Y\G0 !pvg8 $RA7c@ 7TvPeQPo4uRK, B%8: qP5<Pk5tH)ёDM ʔ>[`HN-J< &q Ƽ0ZN53?7`Le9-b4#n;"טn:!%eYP1)>vq:+G,Jzi=YƔdYN;`ӧKr^nj֙caacǎ7S'O˫,.juX 2JS,{)E8y4GVi7[,|{0oVLyX;-wnDH^9GG;*j!Ǐ}W 1լfgfլ&\3wREStzԏw?Bq jŹHZ+0(%UXLZ3v ШZӷAH t PF_ P8A!IO.%.ܸD,)cD @Wk1Jm@It>/]w7v"_?WK?߾~" f*5t8}z,7 JJ^xkkzN#b 9BYhZfnnc {$ C7@YO>.ˑJy2ch~(^N4 JJD"2 BD11A({{̵/cZ g9EQ:dс& CV0q(*@HeNL9z}n Qyu0FЇ7ou|g7/$seAȰβ0KkWxC\{[F!,%RH]#/s"T^V@I?c!/s5h 4-%0:17ȋNo,ϱ°PgRQ~7IGU c $ X% AfP=ʼD](nS'ﲵ>sSXHVTAt1i(&bD&:!(uҏ8;_" 暷&yKjVլf'VsG(#mQdZYoV=͏͍x5I|PK?* /LYmƊc$ @# / *#M37 :Ww|js}IyآZyY s+UlbQ8Cl8ʙ7 ]Bv8Dw /3:tzԛ BjPaD^o@+dwT1+87qa,yO Dށ`@#8PX#* GgoZVpv8ҐD0 1vż ?L4X  DL0HYjV3`Vլ^tH)LÖЎ( =~ xK-Th.eRu)~?<_yG\4M죃c,N;4egsk/?H9PA_ş]A>Khc._dwG5s:gOf9<5LY>f?RqlrY+++ ?~`>YWGMYGnv!MS?Ε+W@V)?Q5Jrdu}?qKPhR Jh!A,H,8Dޥ lF 3+"gA"־kyt@^&“5xsKW 6!7 p>A@Y# ;_Vַ ]M-yPZY܂`(md`$}q8ҴOAsΓaqT#H/5`Vլff5YV5wvKKD Bq0wӟ{ ÿS;7 ~~h#<w:it V`1XcRP֛VZy3c-,`$fb|xyP* b`JWPtKNPjS[{9q7^wz)~Hkv['(4=v==UQyo}MO<ߐ{9s v8ll^J}@iRظwW8avh4֒e{#ZH7oa'O, ߸>h48qmvvvX[[CIy^ h' Ʈ [:zA3ժNZcas@ @)jIAok}B-+# AKg mFET<0~MQB ŠpcCV-Y :2W%5\bVeNE1p,aJW8kJ.=8~ӷC/|wvwqCs;zsNڵkS?wrc ^8fa~}0$*N)z3gΰΑYb\КهSiXG4 ;{ccêF.*⢤, ԢHJEFAQ%Pcgm7Na%/ "|Dwà#1Z BĉanoFm$p *Ci ƠCwɲAŭ)Ҵ Bh.nnY:v5݌Y9G`w=±f)W"*xy}ܼҔ2t*E}X =<ﰳ.Ky8(4cwg4Mf%R ((8CGQe)BM=-jaGu#sJ:A@'Q_۟լf5?5KլfgڋG(rq)K܃6w~=_m5{%^i?"pm2c@zKW~uPpluw~{Y<8q$^nӾ`xU^w?Zas>Buʼ$I\zU/|[h+1)?m5`J:N-s~_cǘk^~1;e2=@O 4Z P>e IFqIz\Mڭy $MPXT%w^#Yӟ8gN!7VyOƏ piڍsOnƠ)!J Z\'Nj$qBYgqiťp,-yl{sϿ+7tN4) 3J/p=#B Њf\G9vlΜSY!i4<TXcQ: N8v$Gٚ'Nja 0FTe6)9Vu>U1ҾvQqd (E痳Eα3[HA/'!0YO[Ff5Yc BMz?N7=r^/鏳Fg?ϩlć~oo|=ʑ9.^ caEx?0Vri|\k{$BD@@]R _`L]e^8w~Oh7g~U}=lhUcH~7nmI`͝5~v*ʕ+h] (pk_u$ ~Z%Ry@F)2A0Rh`0R: fnQ98JYá_XX9~~1BV1e1n;1"-'_yf5YYjVkna) ׃3|1m0ɋF5ozQ5v6xݯ+|ww[Br6,,hb}vV#Ajh (VLQTjc\># QgИ8(5`ٺ~zǛxAAyǷ\g&$"H)P.wپG}ttZ~g~#KhjnSQO ԧs7RJ|9T0sWy 988`}}vMѸ'`ݽ]:s=bJK ÀMUiD (|*&sh)DTYC$ JSH@cpGV f]!uEhO AV+w`Pi)A8j0t%~% "o(XH_:G%E18@Rn(KJ[ nlnQgμӧ4)ai(JC7/)蓼;.cx_1='&/_;6gu Ϋ9t0(%c~i(Ƶ:԰QwyTc CRJ<+A(߂(x+ѨQ%$ gXc!,#A$ # bi#NNJ W 0ӫRS)z֑/ ILu%Kǫ ޗᆊ!px3`V՟jV3_ eAG.?ț9rdewAدs2QkpY从&-98ׯSf%??=NpcGOcyyڍ904%&io{]y?|4-NK_su>=wឳGkfc J~T<؋f@$ri=Gg'Ŀ7<.g? DU\ڙzfR22f,swoK/hi^)ӬO}2 :&4}Gg+-2$ lw|JHu^v@e5UGzcue{>F ]ntQPR&@chtȜR47R[i?w?7š|$U%YE R-HEƄ:7hDAĵQkH!PŰ|Ÿ;yFc<?ϑ9ڭQcxTJ3S0"#('AXpVj?7/5Jj8vp^<ǵӜ0s¥X۸J8d72vcoK:Ȑw>6; ܏/Zy <7UG0hԛk 8r(J 0"*Qmۛ7A*@AMF'ށ׎ I(˂$n #/Ka0YjV3`Vլ ՚[%}Q~ݟEϱN=>ֹs[;>Vg|K/8LgkO1(uzgp='^VZ!C^ |F6ƀ^~M|׮ "2rg4pO|)~:7o\eSءWerf ;;Nuj:M%~m* sn޸F$Qml> V8(H uZKrK~N8uf1Um._7x ]= 20սHA*yn"=ݩ'/Fw^eYeKʘpwk st^yj޷s^_yFgdE@kILzw,S:G%DZw!<% "uĺ/=u>^IRQZc<׏V'b#ΠG/03,%R7Vt~!U:Kgt]76xgyKtAB!}Y,O&w2b{]XuJ*1g Ҝ(1֒%yQ6s O!At;;vF~ZGr殳s0Rq1 BH!Bun"E`B2 o*/RCQ IyrScr`Vլff5Ys|ȓ]ay|[GO}4Kdcn*m!k$桳{>a"đS' s٣{ 8n¥^jge wM-ss(8qI-k/96>Dާ?k!^#NhSUXU,]fީ)_`y~(P9Zv 4My2:|,>5Vya~,Ji/=qTq9?o?Ј8l{1>8r+'~?OX x41nl}?s,HyCN5mM7w=͛۸i5ItI~ccS٬&6)?[uwݽΏ8sfLkSO';zbp01j1x%Tt:68U!kI 01>hDX3Z1籵?OU獏B @`"eP~e8@* fnSf S02Vt m^x^8q:ҷ_bH@F'H'A,JfT?[D"Z3>Z5w \tv- aDpKvF$_@Y(DqNf@!FVEFH*A$R(G(=Tz{5=]6q*JQŹPWJMI+9qr;3`VՌլf5׸}Va@y(Y[F)5ڈ)K ev"o;{uo}Տw%v:,/psO<ο?xa0(JP { Et7)۸CH9ɝl{ߙB]V\ts4[ ٻOc`+>/a`u!eYowq}r?OrHkl[gAK+W\zӜ}=(%e5_㉸; NPh)]C_sznFLu:Βۡ9OQX;~m90H8<> s (q! n$ 2]i݂\%:T:s\7]gee1Jȳ΀Wpֱ%AT䎔JSg{@JM4hڄa;҃{{t{]:@+M"j0iROSH{}%}^`sk 'Ͻ?CWcyI% L=Z+j1q-*!H;ۻt{)q(,vU6:#R{%(_ >-MX0!ఴ^]P=:)BC[GĄ\JL!LaլfU aլfg%=^ً}V% q' ox_OVT*~?9"P%d)}]J X:D 8v׽ D[{.kA]cgont`1`E 1S'`GQA)y^bdԑF@YH eַrBIndYJ9V0 qO< +h.bm]98"Jln^eea/ѷ{`Gg=1&FFJbOΗ+A+b])›V2y!{}sY)QpZt stƐ"'ˬ) yYV0;Rk_+rAVˏ8Q\a+AF{RDQ4M1eYpT%}R^14UĐS$p Cbl@k0<N^F/S̖^礛ĝf5YjFjVkXO={߯]$"_ Tm<7<4r*\bp>O_x+9vI}֯ǹ=B^\ 2 &5mjq~no^wȈ:IRgőfoݘ6v_IlVvwS?~|$\Չ;sOK;%ѕ|EzaqR!%]|NU]Ͻ7{(2`T$b1 pc`$Aa@rrK}'`ɋ$"I`[MU2cЕ###oVjRetHQ ljqw?^;$aRuA+ߊSҔeA5[[7+Ы*v,^`p@iRB:G:pֱ<,+pP9s+ln`gVZpX[" C UkQK/4c#%5GtzRg~U ^y7/#p$aLH5$ALDA@E$qc0RpЦD1Y@hZR#Hv-(P:B!UHOaHS<'T+An!Bza,-eG( CK-Ww0 B2 H,0V~._*m&Q?.PkQ(O$n> Mqs>OQ<R9iKKլf50YjVt}ǏȻߋ?`w{j7,D yN>ŏYakwǞ{4ϘoӬ7uHX$ٺYE_P>H ULƅs$E ԓ:q\֗0:mN-3?E?Qy}9Ǒ'eeIf7/z?y,,஻fKޡ,QRKk#s{v-tTV5ܒg0"lxһ yb¦8=!7yehJs81L[k~:)Q5D )9v,Qt9aX'ƨz0Aa2sR" Cѹx';ـ0u0z0z: . e;۬m^&)UmKQPE= "( X|v+e''c}<`?~"qR(*uD8@*t|ҁ) u1]ExOpu굅J*p>aWnǩY R-k}%`+m>#'Ce_\@~3"`VՌլf5?å^^&M6nTb$QrJ!.p@w/c`+WqB*V\szN&kDArz]bƋl]~ k#g9r)ξ} 'r4@>>R=|5* gz"1Y[\qӧOs+tn=g+x쫾6\;]n. vmzRP'%*r~+ܪ &:B74|-J3R08.$]b{@^, yW%aL#b{ZU0&ԆH([#PqYC:H)>u81_W,-981th4:m^YdT;"rl8? c&3 (eY:|<'VO~ :z(~,ȋ1{@kEFHD5`Hʱ֢:ֲ"0+bS*[D5pD qU G^ ZW_xSF{Y4#/]-Oi;Uk'qBE!!!JGQ%r4cКLp xJ 9I?SsRb`8:vrd`bcH0 5]ތլfYjV_s_'=_s#΅/hs*y?O~eik-A+÷%̷9t㫧t@^dE;uEosUɀ9VS 4jM>O*wџ ;̱ Hv68}_uoݶ,Q ?ARkSoZcL9gꫡX]mnnR.Ɩ#:we[u*u`O,R\GNƷ|n~NU C"/S?ޏJ!K!0(9C*ZTeHK\_gys,EwwvI:K1̳g VJ 2%Մw@i\1@ sL xެ5l, ҔU^i Jȑӻ(8u4z5͖'IƗWQ 5.ݼ٣g=0gRg ^|擣YzuP`lYEong,֡ˆ GZTb gpHQVb$]wyi$JRCod1Bt k-E1@;RIr9~O ,K:UBJ4@kxdj( Y(-~Ft@hS.8Scҫ* K{8_LYbLWd.'(BҲw_B)(1LLb(WҎv7(`~Eάf50YjV_S_7f 34&Zg?slWG_^͕l+/ {\UZ)0f Ks̯52( 8(j7?qTn^~S':>i{OӔ0 Gs?sKmb4/+vFz_zo"/YO60PIǎ~&۝DU8^._x/= `/9{ UX ;} 煒e(,/SɊ#%Yf[#UPK;Lc~X1$*{9WudMN[C'uG1s$Ij ^,EIe7zfr̹8uc-W6nPOl2L?tcqJbfwt؇ϱ4rУ7qeh(e%]V kذ3Z_eoW.H𶷽mY]]Z`0՚)rN$?UnпV!L\[NiJMͿpv;L<(_J-'dé PEb $:6V^,J2'V!˧#TaLQmZ+ S`2KYe$J*p)F4%yM0k  O b2g!+r2<BڲYMxh9w`0{&c:4:1^o@2*?ͷl]/VD@i1!j;(X08JST~@A`#RQ9G+o'FNJs2"?, Qb%J*' *R/q8r '2JcH81B%R*1XG1VJl_GŤoʠ2{(?̬ _Uh0#VY|Jp'$yaT@_~ gu5p3`VոjVո67kW<}*oz-kK=o__E72dEN?)EYxO?D,c0lm_>Z f{ϥ< qXϰwUx7_`2uZ2w1!` mpy:mۣp?s8Sw4TIH#|{ 0n;ZJjq,+[[c.1AP)PoƷ};JM!/v /4ЁBhXg%pBc:R@AW_K0" *Ðg}l#DI4Ea|')[͍($qΑe~F>j~?V Ԉ @(KK7 䔥%"&F(du:Z{V(Ib0' GcRIFz]A@)JfKC.~tATb2.l8 p;siq/f\3f5YGKW^)v'O mVO}?W{ύ^w=/Z$kk {/q9ޓ]c|# AqŽ)"k"wKA֤9osOs)rUgW.wξl Q I)}Urh2A!dlS(I^SH9Gnr癏Kb>9~b#?GWhe\1ΕdŔ~ʯgI EV]VC!o;N( 92 )R:@2\HE)2$ 0ƒ9 BUʏ(lf"s K f9iOcFƲ0&HRG1HξV&#($O gy^RFޤ=72ICAZnG2\]CL?UuKUꂫPc%UDzl0Y)ƤHVHoImxՀH5W8QxQYJf5#f5YjVSu?O/|^ ?x"WAd*N-^>Zi("Р$AGAHQ (T:@~k5JQTJLi=l')D^b&2 12d 4J{~k y^ ki`k1q>nPx/,+) u8 JHju6QT#b(&f&F $vBk_}"ԕ( GZ{ӗn\{ !HXPٰ8A;1U}(VWN0QozE=_k?̷~1x\!0I W)KJUӧꊋ\rQO \%/cR01SOpPD>z49G%eL-3A κ0+1χ,O^Q)ƕ&% u@i(xgI:WSkBg߅D<׮psx3wL^)!ƝZYuvgE #/Jrco<ljS;b&!:(PisKDIzE1Y^^ɓh[=,>eF^tЧPJJA\dc~h(qHX`, eBn˜fE{n(#EHG,,  RWhtU8Z5/DT$Da8Rz_AQE;H{BV ^xp/JjtTA@C:$BRW}:24(8 AլVj0YjVxηo`ۻA(){|S~oƷv1oo/gΜmL1o~fc81HK* )$;;bܹs|梬1׻Ann7>4Z쒝{ϱv绿?L.^嗞ҹ{ʷU'\<^ŏ9WIR%Rn) 9rH+OQ{PpCܐD JQ;'p#;ϓ @:ᱳuU!X-&M L}67afsg~6 "vBei ǏEHR>&0Z(D{t;Ok+W ǎJa)"BaҌ^Q1BX%Q{Xg"vt n?t>9p$)o!&Sf Bլf%T9~룿I<Ι>}B<Ǖk[|K/zGyF`?=Јv7nl$MÍ΋rUJ}?ҩUdҢa;Hߍ6By., gߛ8v%1w:›9KEuϣ?ӯuv DYWI=fZ?>[UI* x>3:>XK)ҏ4;-KeyF> NS4!]!%k |:s(;ŹĄnJH<SYh-\{{9M$I<\xxJuFߡ^tX82˞=Y:tddivn/PD%J5VcӦiN8CV\."֐#p?+n /^yBR~) Ex~W~W$ x_"@ G򐞷V_+rs0X; |ŚPGa6#0-_M._gqnpn49f1Aʍ\_G|簐?|0Gabbb%*q¨tu~/Эn?8>.E+Ԓe ˹Z]žwEc,*۹ki^7QL11Kv9_" GJD v@Άϩ+1ұBv0W֬W+HEJ ݁h|rtZa RP*SXcbv#6A)su,-TKG\a|4~ .!9֮S.MKE^(! BN)O\(EI. !uq>jáATЛf^%AJug&'Iz.GO)*3趗J5l=ߺxU%r)@ V+Tei:\. rMfXyfu9:{4Mz ͑: 5]s*1I=O,R J95F #X]q^Ԩ',D<aѡcٴa$s8nNyn_.PΓB})c#R١g"3LF{>:ΘXJU1N-6Ca0%%yco> ׄn?mA8Zkʑ{"3ϳn%FJFa2ZFaG^nwUvӟB&]HT+v^/fJTe1g5rܞrGaFH^aGA;-~w{696dnIdib47tZ k I Oy^T|#YBeAR"7QDʔcRFHK?IRi$SufP#!4IVF +vEq1ְԜ`$0$ Cʥ0Z (tbk y3uT~100\p/*A\tх/`<9쳸{YP췋/t__!JB <\ZH 0?)FaU,.ٸtQ/jStͷK_FWYj #G?}(_XX`׮9' 3 $ "Vf#q`^Lo¸mSWdj:5(%1پ;8ҟ]rcpql1LofǙy!םÍ7 FcC+%@0qmI }(NqwR')J ?sYQ4a٩ pb#0uZn+C t;|ܱ9t4q%* \5TS` E:C{<)Rgmcwdf:jc9h$SxA j&q#O<#MbKati#q0,$% )-I:"29,Hzi6K" ];Ke# -ݭ@ R -f<'7%2.FO($IҌzDji1y("ƙ krE 1Qg0>QNoq~AN? ]Vꃹdl.yˋ/? <1S;ɲ%?/J K wRU;VʅGt)ҙ{HգF+JE#0ˆaFaȀ/|^GhMj</_xs\y$EhMߤ\# *#}PB͝;]~ _?=C $3k A}Z/NRB#_=qſ+- T!0:%*U0Џ{Kez)%!]OdNm|)($6JHIVI( FeY5qu~ўsڷ>yEED::.9O:kYjJpQ196E}l=pR) OBH QM`(*(ϠmF3$.A4uDTd.HUb^^b#|{)t ‡a}uaE %SLQBJ!A?!"b?U-H86%VRIU.jQЧJܹ18Ykpg( 21(1cRzOU|HsMեg`] O :r41,//xATB&ORaGkLGNvp}SJh  cD)g|*Z4eEkM2FUrMhC):Bs u+hW7s maر4w ?i6oڄS`ffSLMMذ~5f1,6jixnRiF6_-~fŏ=i|ob&}|ʦ0۰~[bgF#0#<Z|Og1ff&ݗ f"iz{/dUB)mя~ÇaH[Hĭ*5Ɋv|;ֺrk!HAR1ViϺ̰ghJ!!)ɳ$c*fY,H%7!+t^JMS*`.sÇpc.bg7˃P2K.뮻ͧgbAQEJIRgjr 7pJc4j:I󜥥&&z |醯R*ɒȍ] qw)E$bybqB2#0"FaF8 Wc4DgX'Cy`~~__`޽rxh0WF) XZ8BTs7~gQ Ϥ.hU93`ku5lԠVӤ}lL̓B>? O}c?0|m3z&ciT:wabsGB:&CW$ C"RO!;uAҬ=:Cw (yUXQ =a'xeNjbA%'TM֍HUfZ}x_t XtNI$3]=*8yx¥,lY{R1X}p֦|/rSDsyږJ Nۘ8gb| k,YڣTk%ԦLOZk(WȲ$KJ(&1yM%0^+11^c>h:nScsT؍HATCMv=GIA)1RAS*06G Jeya@)]uPE??yTH )B*Ie9n! 'w@a8S>YT,M9CI)U\Ny)B*q :^q޹gq˭O,8x%F߼VU.8 j*rui4A*K,c$&j!]KF4(Ut]f晝鐦i)AJ5nԧP0ceW%'FaD0#8|~+`y~t} oP_bg#+~WJx_@5U+H}sӣB4]}_痿)7Q#,""K=2X$Z ̪$XE6b~ TQFLJq~Ǻ ,{~uN(\ hǦS!15U^+qe7.2PHz0<1KƄ R ,GXkPIkK][!B*Ӝ4q)G^Z˝wɕW^ }vWjͯگ1loZ I5V! ij9z|vuqyNBſ O]كkTja?'?;UC B6n<>ԧ6oσx:#7^A"!yLLmqdvQ%[B@*W)^k|(e:o!͝}>ٿ%Gz4ң^T*Q:xefHa )3l>=%`=wpɥ?Fޠ6EH8Mضlf6 3v;E]TJ$5Z@F;<4a[I k]͵;]|皶ʎm N{' Bvk/sFmc3**Ī:'sugoܤhĢkzͺ*-"Zb-D*r&lEOJOX(.㓜aփ`u ~0M@)U#zFzj)g"N,.% :O0_X>$Ɠ%W n/u>Wc@A M e1Zc=r bY`䀔RR)++Q%2hmƍt$I5%?y{PBe\ w;s9/|(?s YgE^>ۜ׼ԹqhK ͒p|cuY#?$, ϩ K.O&֡r{m;r! Kk-C9Y?l;$rKs&Ǧe[*=%JJXmm@+I(4qF1>Mvbrrk4O$4蜲t9rtN' y+`Z/nzA%DsQOkI"iFj5"|k8! Aq0/s$ESl0ɦLY?`QelJVZ)QBB_)U71b, <¨DR6Vgf LOO155E>ƙgd|Ab~n}ws?I"cl۲ #rqʕ,hmag/t{`golηhb<'׆,DA@Yb!Oq4O1s$ZRL? IF'(cSgύQO2P(1;4#`aFwF9ϝ}MۨofܗTJes8cYSE;/m⤏ /{S_>ϱuVڵ7q饗H_nv|歿넕1ڹἳ6]AwܱCl; r(u)%^$)* Xw7.Q,KVppn6l:i!B,}z7dz\#-Z oObcl]q _|~ i2$TKr.&Ms =$i%QqؾGҰp΅cIP|?FkJA *ZcvRuֳn$ȓ}(˜qXFXFQB0$׮w&Ij_G-&)NvPYjv<_vÁC8rd W}ܘbv !Q|Gy>[\®*9_H؀F#0#2tq=7، [/bCL?qlzs?Ɔi:& Fk>,e9_Ō8ȱ꜓ɣO`AÑC\0M chYW 8ph7sk6ؾ,vxjυ4g۾!тSyk_Zr|}g˖-G=aN?~;︅xرkvM}]\{6 a媫>w=h@Ƴazr=uNozr4Y<<Sm7},Ij&l2JT]d ࠦU8Q] A),Ya]8#@*E)cUxފ8bKMs)Yԉ5C+ы\y飭R Wn_rePp?/1w B"53٢pj /c_|%Z 9P*(ꔫ%JT\P>Vk|)P:ay阻eX'Rx>sY`ayynki4jL{Ľ K=:G"?<[ wNXg,'t}J-& #"In'cJqGO `%5:H.,R'@KA8¸'*V|)EŘ H4&xA@tŹ'1#M=Hibp{rі8tNl0hZNGz pQ й}~Jf$ia# $!QP-HcƩqy!m8t$ m%4IҔTii5&5F}D0ˆaFA~9^r<&/oOi[{ɟxrd__KK֚}C|_>yOx^Vn锶7 xmB6^xqu_r'I#P}o^.}39YT.ǐhC&D _$n4cb9H+|a` ?ZҐ81kac44O\oHHumO~܏Oϼ7_z TJZI#+R VML07{?j,P~ mPǀݵk$ PJ0&})h-uAR.!#*nN`@1ֺD!\w_SR0ڍ(FBiFX A,\jA(`]))(BO@%jK.p**AЏS0@JIf;1XD) <\im:ɲ4&)Zkuo!ә]iE@8i)(B$I\!"&Ǚ$q:S۶hP3HvE V3[ 0#`FaS!wo?zw<kvE5Go0uV 0|'<<+RcϞ= Q{GcXϦu[8tl?Ἃ^?,>.̜q کih7K/Ƃt^±<׼߼7c@xC W\DġQ*LMToTi/7A[g@E>(K^arAJUBj ')~`B  KmJ%z %YbRhcuNC'S.=ׅ|P(KX6Sn:5yxAv0# +Dvv덜اV6wr?OӤ.I.RH|o'^zC J=R.11QZ=v4:fav,~ʗM7~ɱ ?Z}*=(§i2 c%* diF)s$NљD׹hFcMF4wwJa%ӚDJ.Ԫ PЏS1IǤ:ELkk\{$> QR }%wRJuXc1RMyGsf9yIҌvRVCH}e\Fzx݊°j)΁5 Zp~bzז,ɇDV_XHʕccuUtAaZ(FaYc!n'aF#0XXhZef&6rhvIz9;!C ֺYKEF :ޫ[a]-C`sZصN|H4j,6y6L綯kc*>K OØ)aLxE{51BX ~)^'4>^MP)W)G!cHJ"NC'fc ȋu$!SW$tu@bs y-]ZΜ_ '{)n+ǪH%iwH'-N[Lx*,7w2JRGB"O?O;41H)9vC?l8r˳wHgbls4Xhfvyk~?o}v'P+WOAD)( B{y/1ި05Qb8n0L1IqjE9:j\~@OxPW=oOJ?8-—%}HpzE%Gz\r_湿3vxOX<!<m,rZJRgYI8`Mw][krr}Mza /™CJ5λ!5 s{h2j0tXJ91{ku\,d<$dVȂڒq'P@CƇ, 8eA:C9?sM XouFB|Wyٶb }hc!R8iQ9e6~?%2:.fesHΝ߁69vFB ;e0N|bT'=r%W -I~XRe/{s/ oG{x+WFj^W@g?A~'^Y:w3>ᓟ|G7 ԭ$io>|쉗p导tcg?6le5ZU ъw{xןWK6d8}zY3">kN q3[oqþwrn>LVoC֟Ƅ+>2d_ *(*%0 / 3k4,dMWe˲Jew@Rܬ2+zȐ9lL<7zwV?8/vU8Qz 75.!z92l\OE"1nS~?K?~tlr:VQw,\bb jmÀE5!Pdw!h&&Y\XZ~@nJx^H|7w.G)oxw;Xn%&'ǨV"M56ۅDKq#Y" )A"Dy "^a@Tq.:ɝkX2'(L 0l0+̵xGxDQ844%N9>Zҋ3{NHI:CDfh)2XkBEv?zyQW= $I?FU*H郴T?)Wk, i:RyEp5) (*u*20F311E4ٿo~D0ˆaF++dY9V1S8vرf7ШOCJUOmӟx sKGmIwAl2O|7} 'Ra||j\)S9v~/3?9?CTFJoh\'ʼnvEedX"!RYzr%"l4ƪLHb שc FNw )P[NpZSEPְqj=x p|J%ZaU=!N|k\\BJ.ίQm<"S>ι۹ si,֦]Gx#Q$s Ic+D 3!+ c1ڭNQ f5yf)!*`"=p xBaa5u_`}¯WcrMvƢBGN\v!1QXDBd}cL< - `tCa/ rZ] FP =䙋A̳  O+XYD'J^Sgd:ߋtTA3BEy>i k h./ G QgF8" FaD0#O|l:7쪫ooꃬ_6F::r%3x{WF} S%81?r`̖Wk?ܘ!(Xw۷M?wٶ}'Kn[(<#_(<)%2,A%(}E1>Q%<g(HL1!m/P؆BWg%`@*c5o[ykW8Júsܨ]E4͸8ûٛ C 'fXn-.rѹh^3ǝ8_4Ao" 8\fML+Ap6(0C4mM6!֯cuX's(MXYIU4cmqzP!Y$1WHOƢs7{J&j2ב.\HmC'Őv㧇'‘ cQ\ BzysǨ\B!OSR\*4/<):Y9yc O' 2^,鹙~?6X 5wT $tqlC ),&Rv1:CyZ8!X*)*:7~bF$&M8b7Fӳ,KҜNCsdDQu3v{k-AST=g~^Kc<#`Fak\}<o|#5K/qX~zر}knV^#1mgf}156WÕ/.2.x̙zLޛs_3[ouϞ=o/_b sC|mhpサgĎ3Hc|P-C'kϯR1=R#Z6A)rȲ Z󪧼<ۣ0ɉUpo$J9Za<wIɉ G&``,wm<9kkM;sVEY(n<˨"Kٰbv\^۶m՜o~c d.-JBaL4ư>jv`rr[6s6 b<#ӂTT2P!M5B*"%@Ӝ_Od PңT|I~Dbb^IRq?DeJ]%I7 8B&sOj6<%SG)NQFcZAR!*x"cڭ&}RJeʕ VPEs?R0w9ZFaǻ.^җX?|Ox}wyi֭[GQHdkK.}}LxRR13q1ۿ!%>lt1Ჟ᪫Z;?|{o7pgwFc$Rk,o;uS(k.;a_J6UEn^[)R+&gQ%|0 muFR=4J!RBۓN^R|Md_A aQy[kּw7vS+ŗ]yު-6sto`9U*+ڊ )R*/0+ =cm-2?w7af?_yo;?3<SPRĦM1s4avGazz8=!QR+=k1Z`L/d./2ɝr@_RXzy6erN&  Ɛgq\p EJTkȭqʈcKґ ^` h uaWzJR*KqX^Z`qn4Fvbg@9=3s&&(E|/,cP[ 0Evуv#Nɲ=#79h_M{)i%4!MbZK\^D%t8| zI>v~Ig 4eդĘzJ( ~nE!M2:.sD'RaaPyPT#0‰)FaFX??WW u7g?^WZmccc?pk5>>>.}{Uz]w$eƞR*q %O=|/`|l}z3~/~,{sQ.!*c6a"[bQm)?v__p뭷rWooܰ+xg>Wٹ BnM3og\AxXk9N~i`i3['R0'gg֌38<NFO/{Aaz߭6y+b*ؾa;LgHNo*Oz`-6d9˼<"G ~/ v:ȡ[Si-04 %՚,˰8?:/Y~z rqZI}vQt *ejUJϗ^cs4zZsfI)g9lA`Y\ZKm` / Jza pdE!Ps)VROI7`-t;"/wA7G9T\|)f rD'ajP"MSH~/푤s~ ڸCYעSPHaF#07կ&"1qkfMW#zիXZZZܽD(wO}1[5u{0>6C*dL.bwo oXs}/QAo>JTǫVY{h7} }>:S,Ϲ'ٷ(wy^Egv>@ /{Ap50??$}|u\W)\̜1g@yE8ѣG>Yx-U)]Z]M8;",fݨ̲Dt5e]bAAXcq` m(K,//D!QT"s,%NRt5MnÊl2 ѫ>?cC*rh,`F#07ozӛw_q O<'4Wr?W\G>|W7)2:97.w}v~e?'>r-88A/PZ:亳du 2`p,<;oNUF#:>w}ܺuwӧT |=iox+_b-'hm1! }l'%κlx&|Ǖ'I'MTA h3V`vC<aX-r?@"ܽ6Nkc( b-pσbHȡGAe݌w>o~+,_!\eqfjj#G8c@!t:]Ƙ`iq jB" I$Iv&%B?3)q{a)@ZW:jX0)d. 0hf}pc =T 5H2hyQ\ _ż#eQԻn P5kmstfEA\bqӷ2ިDr󷈓8&,enGfsA16l@Veqv >J9)3ߴ0\1.U.q A00V\ -0M,T!)$~q=>%2,7C !255P= L(`=0`̇#0ˆaF7(r={p饗>mT* oWps@Uz{yt;-zOP.#eʺ|⣟嵯{ ۷o൯{ 'h)(哇c,xuvrxk_fӔmsܿdF>owC߶Ӥisz7UjWT (a [懈 i2S?D|bAnQ*CT"cRrj,_ [6l*CUt< ¨n{+RqwXD _ +qXD^h|Vgzf,ːBhl66h9qa&&&ټy+ Z2>1A^'Ib$2XH ZAH( JHI+P=)J%\9Jsit5a^XcU@1V!%Nb҇Yc4HtbsZ"e z]7/t]:[)^wI҄,wsư4[9pr0&b?.HBq -Wm N%DCk^Ykm0(]^u_0H4(_<>kW'V')I .Ͼm\}kfjj o|~3v/>O>[!,%ɒKlr͇?3S8rGZƧi(I3*c>o7ڰ?I.(F'JΕ>MznNa9Q=~_jͱ~vۆu>-nZNt:->*ir֋ξ;V:>J),T*1=3xcťE>Bwxa|%cͱHT<?YZZtB)Fm۷uM:=R zRD) , C7.1К<+:վXqsCeHtz Bn`PݗE\/ȴ),Y TRY$lJ&2Z. K>Vg(z햻G?U:*Jk &7yFEΔ;E\EI H!iJ# XXqkup (On 0* 1[2( ȇը?#`FaSoo𖷼r wG-ذa~v=9y^z)?#?_ pٳgx3ݻ+H ᧮xv jSX\Faɍ|;xݯYj%e/w~]k^?pعs'W\qB4Moz s?+Y?Gdi;rX y/V( 2JEg- `,OYZj^lA MF?]Jn{yg IZc h;L*'=AAi4QJu>,cv 'VmR Rzx#â0OTQ_f+ JПB yF#0E7yXٳ'?dYuUW1ۻw/>yfNA'}{㌏swl.ou̬{ /CRTԫLnx7z#T+9aPYǞ=$~Bn__P*Rr뭷/|ku[OzJ[L@Εۘ):{x}'qy JNRkCyd_##*<\g(FI}4cEwq:Y41<=w䳞W^!GwjzmNþcȏnnqff4IXZ^&;0~p!L$oʢ++0PX9,x@jH))W+u|?H,֤)IETJ!A>PQ@1=Z|!NJZ"N n,I@@f9(0_@JB D V'Bv)kk4yvCݣnꌼFcŧF]lm$m>,GYG" 5ť R$ G"y8~?-ߛ|5I0#|!GK0#{R*;wj}W5?E^6G>%\UWq-`x<Z㥝S~@7|ٯP>cs2뿴Gl;N۴=y<)OAJIoWmn#˝1iBIɟѻX7 =|O R!瓑붞Ra={ aP(Y5?(vʽ-AzcrR]'|a$8ttǚk渥B r vg\6\!4[-=s/Y9wޜ,}xj3(l$KȲ0os2~,%VӎSe9IRVBT)KLNF!QRW`jz:Sl83l4dSO4+%2!fXcI 4Iȴ&NhcR{!4m[tm:ig~a^7AhMgt]I#`Fa{o嵯}KݻK]|lڴixd'2hXOlذj-ó5]=q޽/a_/|cÏ*6RR13y|xoO=_5?~׻rAgI>[֡׾5ע ㌵k AEfE'}E{^ IaS(-G(=d9JA( رu(T'Q}G]꤮lceC߼x,1zK<閸}TJ4aF< qH)ر};JeH?")yC¤+۰Ŭ2:YSlڴ &''$IfniTNXXui:!SL%\hk1@e$iFk=)FaH!Z+31^grjXrF.}:IN$YNjeq8$}<9q#{Yκі,[udMd+<#s<#҂t*ou#11-V~׾5_ס;G>{XHe/)oE1n 6%%J*qf? <1XBnf)g,/RB0%V%J!@yJHR.f5SS'U͍" Kn Bѫ㊾(*t;M.9RSa׮]8m (E 0EN mNp!1s; s޳8>t;vk>*4e}jzգV)}<_98fK,,5;,v4]Z>NN^~U ? )תjU( &96,!Ncq^Mf2>ay  ,Y$=qd0s7{.:玀JX!XE=>t:昛CZM.2/g 2)Jƺ_}{?fO=קɌa̯5e5עm3ĮSpiΦx\C)4TX|cyd:\fyiӓcL7ر}n*$Cg=Ol.ġG[><ǃ?|9:.XO IR2m|y/BK# `% ^;vp-pUW5ߋ J~SO6ilxj[ߺO| ;oduH)zw xsU %ȇEIADN bRJS~wR #O 1N6>:UpY'$1x6y*"E36yy`brI cDձƽ~P6Eg=#N,q]?s$qZk]$ ~LayqvvkfsE.n&f^Gץe43t{ s m[=Vי!T(FeDB/mL?iJfk%fٶe=瞽;6scO~<_p6aPR*rc/.O \]qmJ ĪC<8#0"FaS /yK5_yc=^5]v5\CZ4 <>`PH0ꫯK.[ok$s]e?oe>I/|?}ٹgċgmdʯ=R 瞾Fh[WȳxH{%J( hGJIP.R$1;Dc <5Iܣ{-%ZEZˋII:n8N$qKI4Nߕ"YT)QJT*%*Z(J!aczrMc떍lۺwns a lٴ ʥR|T|<;@&,b!\'-FaD0#p":^÷m|϶z[> o_gw/l)?4k뭷r%pW{3-rApxNh)%ywH%Rjyyob ٟzV^\w}?`(p>R-WA?عr)t9yKR9TU̝<WŀkX1+(0eWA%0!33L7۱9?`W<|U]U}y+rD&Rc;gW<"LHBk<uH3 8,uf#ķ mO?" ə4ucA%%L( i1Eqj\W=ƁƠl8@k0J<Ac#A [Uk/i>RJHR\Q+դ!"Ԫ%JcCG) R)+>!jJax`(J/!tW %\sq=S*E&%NdZ:)򴴴0uTrT)ʑ5L6%ˑfHg2xtrD;H)M11 [X,6`X,G)EE䠃e<)R/|@E|[}l1իW366ww:,N=Ԇ[kk+W]u\rɤlwB b#ٶZJ̫^ṳe?u.-Vj~ǏwϯmmSNWf?\sIRNepT*9;X^ZOϞ;O߯H]4T )%y.^%vfRd2)<a0\(9R.i/MPVE٦ᶇbɞ4q=M1ڇZE0[ȅ~ VޫUJ"űaGfhJJH4J8C# ᆒ4tT!RJԪTGFb1j D!!I q*%Αe㠍@*PY~O=,ahtuwTȓfdYLtR(R)B"FRn/&uxSh-cA-T*]wDo[|C$ yFGGЇ>i6Ipk~tt3fP*vYgM/XI#"qYtڨHy_op# > -6 _ ~?@\RF1satt']@7O9e(B*"eHy]xh]twvoǩiJQ3O=B&Jh!uK.&IuD.KRC2ҐJg)FwiuGzm02=~] "u& z/"奈tDZ0NxtV~b1Z#Xl< !Mq 0aRE!6ȤG9ϵ 4?U CMG"8JҒNTlܲR.@dB)NR?01t0(Lj\f\6v@204:8GKDa1)U\ʘ;E"!@G %FG`&z,gX,6`X,̞=n}J<]C9d߿կ8W:)ժU:@lgOVlڸͫnEN=*Rۂ[ޮ-`#FC 7i%?|Jĉ;ؿт~DGTZ;qPL{e3k}%帱4:۞ u<.ϋ~Ȫ[+VpKSU;o(EsɤSaXJS2B JLDܶM`{_Dm5O>ysWT/W4p.E (=^o|5Blݛ0 $@Ă_hdCuHQlj#v :i0!:"Ȥ^jqKiLagLQ?YCM2#@^_ "]a\JK<7ERlXI QP*:WE qɃhQQ_a )QJY1Cq~HZ$VkN[,-X,=XΆ/|-]zMMM}b_LPh788[V{r^wu^z"}dmeJx?8s<T şh5nڴ~R:ڦMP N*mcrL6%bLS\&9s؟9}k݆w=GvȺ4r=%BHҩ |-}r{}g89 ]rH$P|0 p4$3:11 ;10[ C1ORר0DA*߄1 ːJEƎȀ֠ B$xd$P(JrHƝH0Z0660} 3:V\P* QX,Q(+TUj*~oT 7JǞRH/.R(E9*䈝,,3<_L25b~|ӟ-;3RJ֬Y{^:;;' ~Yl=A/k-G6ghJ0GÍ燆"mR-ql1j>BJ9h$2ٶqWh+qıg:Z:h5I%FhrP26]/z\+h+*!%l)j"{;d!V?M6Ҝ%G>K8Bشe|."FKvڿZxM(ܝ^xa6JBwoK]IEМk17* 8>F @ybc@]o+h0$4FQ#U>ұi6!a5A_T B~܆8D2)7p4ˠ C('ajL`(Di+)qKeccP2DDQ@ZZAPT+Uj:2q@I:PI҉g@  ~lbb}{v_|'?n\=7l/agya\@T*351RyxodΜo}"w5fy~rŕtM%Ρi Uʴ8wx_O'3e,gl#(m t1 ACbޘL0q?BLFOR"Zp45j|CUrB&JPw 0B!aZHSV)JEJ"5xd24]]̙;T%b a@>aDŽA܈ npHG!L+]<ϋe&|`X,6`X, ?_*t 67/| l֚Iq|E5ТE^6vU mjn ~P#, &ghlA/U?#)0V_9A{1m4bӴ"D!m1/I]WA>#~+̚wJ*̤k"ʐIgs=:.J)\'Qw[t9 ITkelNG!)K&MɤhnʒNy(GR^ClW[^(k]@?qzR1V*Q7kc\S_*9 F@8לthpbF:e0KFgpBY@@#0a) J-4nj" 9䚚s(7r\\#e2(B:N 5TBh-`P5_FkMYB9x4^*M>3N>09o}0q^/_o=mSHrϹO/,s&|S"$r+O?c!&G ,zûQaJtz{fДo&ʠ"ep'J9xGKso5E:HUFe:ڧx=#csRuH\RA^kMSK[1VkBmh`~Bs;L ?&ߛ89Ja޼zl3l`g*K@$;@OX7 4t' ls=3g!x8ȸ.\\E.@T*F`q_"Iwf󴴴AgW'{̛)og>@֮[ϲadHV#8 UL HDDO%*IF*atD|cLRxJ9ێ6a9iXbX^|񍿗.]WeׯgB奼OTR)>/g<:Z04okrЏϝE:ڦДoE[K'ET\)!ojukQ}g?C6G97S""gn.*_CRF!Zk<7E~M9 |+5˖1~-Tٽh=֝]>bv0{rlAW"wИw.]@rq&Yȫ_][[~DLZbNi/ u*P"Ԓ@D$DۺC9%@bp8%! j4P@tEA8i)qM<=fT%6mB\&B"0Dw90ĥm Z'PVc/u]Lұs="/Dh8mbb;o}٧;c_^*x;aO.}'z{n~OG< fL݃ RhTYp>x˟a92;r{w¡GvSr)6{G}\=u*R*Y6QepTpNTZ#$-IgR)}ul"ry5 kU:__c;TʥV 7G:^*K.Z#61C7pk4㠆 1Q hmhnjfpt(!mGrl 8̸(q;A)bQo`" Tx- RׯBMMcTjx8H!?X~V̴cɲ=L阉FRygoF\;L w-OQRhn@¤Ye|Ľ{Z/:Oj*]nK)q."Cqx"N O{rкǐԐ*j|9[k5R!`dLXexys46.ZO;*c96:+et`#\qBƳR329-ua"xe;dg$b$AC bѫ!Rj0# F崈E(N`jTxcCS$B*@(6N`Ad4SL|>#|iZ[ZλYqƊeP&Zk6I%6tDdF)6d~z{{?_UL6m|sݭ],pwad[{ɦ2LNw4(q rp#;䷿)'OGRnz?MiӡaV')ל<ݘ٬+5T0hѷb-:Lҧ^"@ fLN>[ub3@H2d3Y|n[ 2N_q}`s!GS!빔Uo`9Q1(ϰygzj)*cvM\Ǥ_}4bx({ h`&wEl%`x{@ ' ^'auzzBqQ$qϮ_hk$~ĩ֘3@{V>H9?hOZBg"EbVS/PRA[Kg\s-J)Cs~t Wogz;4ȤtO!7Zffw0v>PuJwg M ˖?ˏVQ*CE1AmjEU,_z-T;(&Alvw0{ΜIB~fm̤Z}t= )H:PJ8Nj^=\7.+0*#)Ar-Nh90$CJ*c2JRBXŢ߄v=}vIA'C3&6:)Dq$;6ߏH6߂)VM(` ;琿2ϚgbɷOcRT*'3@4l"K)lQ#[h)Yxi۔ێ[%Vmj(0hz;0{l qt\/drHR^DA8 B ?E4BV\.R.epp!82 j8B P!0>>}8$ɟƽ֓&6&H'>H%q6b;-])pTt&K>L:A,7,%\r _QJf,Xrl©ʷ.8gG8ş4ݍ}t܅xMĚk Ie*-턁OկMm4{?r U9Gy7q{r/7f=PH&gnn3yV YCyvW]u[*&31717nEEe/~ƠBs#a8 c\ &ʉoB"KS2>73f@E gx^Gq)@Kl:j\.Ng>/&E#~D?"13T0" #6l|jLRXctd! 7@qd COD:v1?qzbCIvP/(ΌJLոL4L)a!BL, X,l6w>RA^o‡?a~iFPpƻha~|tO%owLrLqBATj~[9Y׏lnJȽKo穇c0Du7fa\7Rglaó:>)a&)fBpLOpQA0ovT  (>mr4q܅H%1:ZPV*Z(2`bb1sL/_!&n_)b|>ҥK7I{{;7ٲe }\|E 5l凉Ёm0:dcd8B+ZD:$M #Myeskfd[ѨMO:ԳںX)2:Oqws Cމ߯#A(xTj9[Ne}#<"X+rA&u) bH)R:Z~cw5LH_BMR^ Tj uM1H!Ie :G]Mͯ`"`?3G0ٸ\z.`0o頩^LeԽwz~{nA*G+m5*dX%?vLx9̓qqd~ c"A=xS!wS/OR(4y)7\9inn~+{I_'+MD:m8N Y/i27aB6u|&A(߯%9NBa2EQX aэ.21Ffİ=q3 Lb6hꆁ^dzd,0 pFbbFv$\|\dY1,[ڋn?0K_RcNkxA\r%i(K_O Ѥv`h'QgMzDMVff4"AL0.2Zӧvb^Fkzoz4j,.41+E<R6L^{bμiDcugP5.FP32F/jAHEK*~~z*^p[%'6}tXK84fB84Zg) Q vMuA<%00ct?FZMg c W D:RH`"Md4QAN~a@QHC4mhL|[?M*P6P; FF@QH%d/d\[,6`X,mg?Y9Ic՜y晍+>a;pvaa4-CZf~ v $I: El^~4?O9`ߩ#0T"aHjo|eiW"(r9W TRO^ "ZPn~dEqEwK؞/dSYv2^ {+]<\Cq_ZŸH-%Yi@B?惉!FM#0$(BGqvZ#0I8 eG l?`m&E`' @qz Ήcſbbٝ!//z^]N;38?07twy' .nO}Sa_hYV'>+h5;p/KG&ʌVXk\ץ\)ec zX~O\<V˸ %l&NNauFSqw HFJ>nwBiXd7nj$i].s *ۖG ]J9w`V*=W![Rj$Amsu F+ri7>ߙI8^G\q։(^'|<9e/}@( ΠAGɺqmC0Hj w@m($0y^Or<ߺsGr+3XR*.1qK,Ų;k"桇 .CR?93fkʉ'H?'x"lw7<#@\QG5qw}JEPڑR+Ó:wY׷nB浦R+AZ&­dɸYKlthnja7?x ~PcY0clQϦL?L,T PU)Gz<:)H<1%;^^pL*ƻ+P jqI`xoR;3k׬`ӦeRB&"_#?D$2q&@&S@8yI/v~Bk Lӫ7RqK;m D @ȸ_x_J @ %Y~ґ Ų6PGD&Jn|:$J$MJcr̘m^44:)yF mſbb٭|Cs裏7N;?(GY~=7p9Rg}smSe TGqIR֨*Tc B}NRjYlS+J'a3߃q̚1c "I\ǃ0)׿'Vn&HXdi-W_ƺ+^8W*7Gk[pcP. CKGA@6agj_.<6Fj"~&B߂Dk HVDSټ֞v+ P?{L"Wa}FHU@ %n2n2x aN)FF6Ʃ:6c( z0@ǝ7 Q(j0&Q9:ɰl0[n-`XlbX,׼5j5 ӟ4 .[oȧ?iV\Ʌ^ԩS'opO0k,<Ʋ;{w{w BXE6$_,H6n^;ITQMe&zS NHA:a7S~=?Ɇ.hqhEQ |c}uqV}ϤW1QJѿeߝP֫p\FBHq02ɬ"Fh@'|: D WTla֞fY#H_X{S@{SFǭ&7ETe\7!P"wđ2II1>?n/)*^)0)AL0hI3DqiI@w2var`\v㦁abbkCqaqG~qEA /|+̞={uZkVZ՘'?(# fjndCa0ʀ0@e@UCru %j }N1.dyt|&BFexIsF`6( [$IuE @9i\Ǒ(w<Ɋ㖘="5ZnxR^'@u^ f>ضgſy @X,6`X,71k/\f Xl~:O=TiKBG)N՘ d2@\O}yꫯ`w}YGkÆ-kYD}DQ]-Tڸ1фiMYR06VNI@[ -|3iƧOWlP!JsO'1oVL lX|xa? x>~s}wNNo}[_08F/^6AGizMHtF|(LR@̾׃(BR&H,eu "¤ONf[x掛'A Ǽdbޜ)Us?Ʀܽq!s|$J 7塔k/ 40Rc炫qA*̸KPKȤxvz^ft6f:Y|Rԓg$Lj (Ki(U(Bbx[V&: c4&(z&H7chh6_,b?a\tEe}q;I˰իW}iӦqsUWmwG}4SNmo|}{_4駟kyȆg"P m4{3{a2{jQyǡVKibB:j<JS>APR;0<0~\nxf+%vߥ(pZ|Ν PT+I1,{.sc|PD)r$R #q]TR-DwK&D?3œOq3(@x_b< E MIZjZ\  'O|+-6V|01Lxz>?.=X,X,oG}Q, 1oArJoĬY8s;$|ޛYf5 /t"xJSB:p7y`Z ͍ @]E:Ehꘊ_ H ,UthǃFO*#ÀJB^T*Xʞ!O>/}뤌dy!w _3{s>7)SYǛE8"҆3ɤS:0=~znLa8vR)RzN|(8J%B[HH]r4f0\SΠǬR|^/JʆW2HdIJ$R%A!Ɓx?j,D'& ^X,]X,Ep9p90sL^׳pB0{媫V{sL'?I Nÿ袋?}E>zz%ղ4%vtT)AWjZ׎of4:o8 < CE[o9DaD72RJ4v!H7"Y7{:8$Ȥ]J~bc;B6O{sh|r}b)~$I;d,~ݑn' RV.Qټ$ybXlbX,)V^74777B|%Zk\y/y_A0{a8njޙ_<{MfF#j)Jd4KM:1\(.?hiPGCKB6Ϲ><"v-ٳ?,`b( ӝou':Zo_ʕޅ({ړg}GI1|{[G0B8]'>9Y3BR$[huF(ʸ^*ɤfRSž^3#Gฒ `m]H)!d& eRCi(u h)1QTMy[^8MBS bٽb(N8F뮸-^z&NQ(dfR䚚C=>;[iRâO ˣh`b'䚔rT & /cA ! Tk|Do{{ߦ[,X,C=/n<>S?߿F>ߴ߯F!j9I((d8i{#2>1#j~PG7 LiT?0ZNd)j/:YMY޴̙u}fTo9SF>Q!b( @ͯF?f 3w)һnq%b9AVQQ(pdlz.yl|.C6"yRmH\=ᾔT޸Mh}2̏} .-::IVP$ 릶+X?bbXv. wu$ak]L*TQU|"v` q;XL"1I-b;*c+_* ,7o0!$q^62v9.]3O#oU+x˛Nd<_~DTZjfK{>1nZ{c#:7Tq)GS>C>)K!&rҴ43ZuNss?k:)TIkx_Sq?^ pDPjۤvZ#Q*{[,X,0K,imѢEֿKslr3h{bgÆ tsyT 3<6LEh?\ǥw F 1t7a [D%@p؂C53.>}Q y ~qMw3c죻wor (Ƹmɯ9_ڵQ*J^ [ืN[[ 4A+M?7F<90:Я!(W!s\iBL&E&{"M:L&Mgpuo:m}4= f(Ae$?vOfDN HG:v߯3u+cBj OrM~OObbC7}ݍi]mDd.G:\8l&R 0"4Qg(R>nZM}# QIǁFv#"4I%1~b"PDQ`()V$q\TzN~bbl'Z[[YlWw]cf<2k,ַ}+V_΁K.dvo? '?n9n!DcF4AV!PJ#nN6JAhlC%!D\-'' }\v+!`̽a( )WJTk%(D T61oX?p7̌[%=y572H {c hPNO&hD08Rym)K`"@Ǧ O,byٱ7xj b˗|r/r{rGrwNr'&~)b { -I-AGBJjA G;qd]@qЁt)kqf!ԺM+\k@4mmaA6fpx#APER.\+mtuLBP5^"3W#ϣF}7mzGyfų<.]+uw ^rU,DE~arm#C?NV{Lר<5|?35緿#ݝjW}+\odӒ&("4# D~FH!BɤU['D K!%ҙlO<{ԍA 0g Q<ُ -@kC8B6#eoX,{ bYxgH?|^?3|s%ओNj<~'-[`\y;;㠃{?>>8$oeh C8a鴷MCaҥ\r%;%X9Xbnk\/{ |e3uu(|?JJ8B|?񃐚iL0L ^@ǬD~T*KD9 iHg)&i<騱Nx @ ߯P-1&Bp#kvfX,6`X,.gW_͢Er^zK5\ bŮsR2m4~MreժUϻ9stR/^Ͳ>C9dU}Cf̙M=wQ "5c8CA3dOa^˺ (G\s?R*2K(c4+V?[vffϞXsiaZ>47OAY{2w΁(cΜ(7ƾ*eB- D_kF6s>x-Y9f}Μ9r-kxW?㫌 nfdDT}jRJijq Qu8O!R#x}1A6q@M# 6q[@!q cQ@C"xdq|B@cžbyYcK,SN&E۝>}:oc}eu>.]t6͛G__N@z1:묳g>'>~p]O0F֍ڂ~ 6aa߽f_٦`J{Ч8<%3\8,[9lX? ):q,21FI=cDCT+pI'plŋYrsMZ:>.uJv51?_{: R 0\ǡ=m'#@$(IL1JBKt aldEI7CvLfX,eW_K: nv2 oxvxӛ˗/fyGG>_-2IY2~.Ï_^/%'_$(jKJ(I3or4)UʆMO=c!-]yT!vjiN |_FO,MɆunՃDQc344ĩҥK~yqW]û~~\ŽKIYyCG1(]()tw?4ѦDJ2% 6"W2n)3 /t0B222:>V];EiX, bYds>f̘?alٲ[|%---u\Μ9s&zꩻ(nպPss]TCH30VBG!Qq]~l~($嵜tYL3{1l)1t{.x@J&`<9S&e\5QmZ?QLiƅ uYyJoʹiRbPx^'@HxdY O돒`@}_$uu4R$J$(BGC}ˆP3vbbyv_kBh駟hw}mw|3<]u^hi[3w\EFGpIi"JyΚB!b3x'l=}6gntu̦u \ 5Q?APT_m&}'s 'dgo9sTҩ %\/b>בIj] \ףVڒg` 4U2~.Amt3 P-QVC29JEiX, 6bX,/kve{3<_=Je SO= ll-wQN:Bo42 ʕBJ8,=ݭtuՖ\Eǻd{__5mz{RȷpRB' j3g][wx7_/'!Eb(H%F8ydP27Z1}~tPRbF ؇Ds@``p Zk4vV?}X,X,jSO٭<}tᄄ׿^/rIJ'\hk' DAW>ӹe !DJ߾#/y@}fؘXD֖B΅֞mM8ͫ;e+ cCj>J0,KQTho/$Y&a$Zk|?=SH ˆ>4:6tRnO/JbbX9q(;w~?x)o|Q:a6/c =rtVZ(3d)@PlM gԿM܉AN8[~ nl_K:u#" ( Oz|+3CW۔9tubJLzf54t8n&}{u 6[2̘>:[|<) ?;jm!FJ%%L,Ja=տ^":B4 Iqx? A:]`xprX, XbXyŦcQƍw~N?thYmp 'rZ<ž3$f4M,H|)mM敇?F:ZPChҶ.2],hmm_oo\LW :;f϶!H[fJ:x^իWOZ¦-(G0[ePO8K>_.gժU[[[9}ʖ0ؿZe m-t+2'XRw$}}}gΥc;4t1g#5o?[-]d-9!v3{6^=.*{߿όz4DQkH) 7 <^{̡VQV# #Mu\!Z:ۛIwQC;aADaYfX,6`X,˶r-cPJqg}uQr9.]ugO{Μ9r-/ٕ[n:(B FcT kbUϻ( q#L7S9_zN~[Xr?Xmx>(H\͎ AI6L[4>O|4֬z kc-(APk ߢ(V+Q`x`-װ|Ӝ]Jkk /s-3Lׁ{krf\7M˔9C{f }6oa;ӔW4=Bld8_/~ϋt4R k58.]-RI6qA)EG[n=BAƎׁhz5JcE)RfobbX,rWP.8蠃x߽qi5L6lusYgmXt)wދ2\x1p r),]7鍬{[,S{{p׿SZzJ͏Ӓo{#Yb-zz'u:֬TȔ0۔,3x|c?[|V>}/kV.cӺزq}WeJ6dƧX#<_x;)d/}+W?f=s" vNv͡)~>y6'7Mc#T~PȤKFIA󈴦G Ib(0_ƆZ|,4C[VfX,6`X,˶lذo׿'KqG {Z]z,Zhu!UWxf|,^ c wޤg}6W_}5+֯ 1<Ǽb^9]ͯqw0̝SAS|ٳm7s꿜ijkfæ)s%ԃ "`ʔo&pq??Hr(O>Gxh O<^“Go:?knMwܫXN9tŠKK 9Гx\<4c<|xߛ\h9| EXyI'c^wmz:>\6ƭZx?y3o~;_t5wDu.֏=|夶jgb58ʡ ᇗo;;+~> ݃)3!M\Tno!;Wߧ._٦R&*\&Oyk>|3gi.Q*:S.~rYr_ QFBjd +D:;怃oGXćBJIG[6 ?qq aP`&rH =a,e; bXּo5BO/ᨣzI>cwu.=+Wrꩧh".zYܹs1?\vE/xZ jB3厽=8EJ؎a\'fi -]3fHG.[ ~x8ɯ~K Y: qˮ#ڥVgsAFa#ˠg dAJg0#<@_$:b>\VRLZ F@sh3 2nE(J0cr\[7/2bhkX,?"W^y%o~fLOXgal޼-[044R\.GWWmmmtuu1|:;;ikkC)0]]]A3Y~ss%g矿u,735aJgK:p|iN[Ҍ5 EdCj~jeReJiruJy0'R22f2Bҙn*ݨOO T Èpx48mͤϡ\--ZĒ%KHsv?1D#cj^"86 8SH p]Let]ws1K:uÿ3J(MtRQ.ZJ M?!Dȣgo[RfZrI'1 ǟ^GcO>+:2Ԃ3DDmZC8_ * *bXvX,ecᢋ.b}AN88ӏ4 CzV+_(hY(#,=Bs<2{AGLi m!trSYvf/&s4AIl@&D!">A8]C2sR8N K(grL쇇HG(H^gO88L#[ȱࡿxvZ-%`i&:5ׁK QPidxn-[xūmvZZXi p2]j[WWZh!!RJf '7~!e/Ak~y$J)tqw;na߽WܸR hiʱ0B (0T*c :24=~%eX,6`X,ˋ3p<8ꨣhS>\wCcWc s6KKOV!OS$MX LP&F yVF"Չ:@&LJFb_i8ri;t5 Gr{ΠT\o /d}k߹CC>=7!J-&y\׽mд7eƞi(A8(jE u4QTA 6߱iK?r/q#IY3:Ak| R@:62H宛4Oq~,幾X,o}+===~|_eʕR,)JOZ\.S,Ԫe<16>| \ᶙdZHUhR:;`ƌ[A'Lj=ITka PȒjCIm^,N{bqv /-z*~ ^$+>+Y~%1<6D\bq+eݪyͫGGG)ڛBO)2?_?)ɦ2(qQq 8tR#PV/aV1gf/~-R"1S͸B9 !:Tk%B&qE״=bbX,s=sLP >IdY<_|qk׮cX~%>p^pT?dž{=Q'ZCR@a0 r=-1(!75mj&|祶OVa\dxlc 'CCF)Wӻvpõ̞Mw^LNh˷EJƢ=Nq?HΦ pS924rث^㺸*'1nF0@K&(@lP_oS2WI=uOQ.\Y1:jȷ.70β=)22:!:AIP|.G\?;9;P1&"}1tuwO|`uy\A9^*rfRx} D}*QB*J>0.|Gêg7>m<' AǞ\OZ@D*EƆ)U؟\EFmbX|bX,|+477%KT{ hc׈Fh>Q"CBo7`Bg3AO<S7K BAz&@$%%|fLücCc:{1g6/3g|yhr)&%LA裍!Q>$c.u0 gBt mٸݱn5ќ- s/Odu2ҙJ9H+v=ؼYB#P: ƢYEAA|sR8 R R "DTD!4!l3M_bbX,L[[7xl²_ɞswGI7 m+'M*O "ua]thB=BJQhnc̹BYx0 ۟ނDG}<6|hniEkMH!n8EQoBH|Qۚ(q?ow|gtOgj{7?AQoo=3lܸtT&x,&&FG l#rISR.89 B%q pﮧ9hw lZsriA5 HSg-X, X,… d2,_ȋWyGXyK~+}ڛyxVj MU^x P_&lHR@P$UWJ Qt#r@8s`\&q]<_qtO&eaD5Az>|tSF:.xͯYy+VɶҍB aQj!^&>t Ɂ▀I=[oK,0lnjKufUӦvm6!Nyt#C6bXlbX,^"`llA; /UWȪ'X~=[LKo$J97|SAy2(av.01XP4꫚ 1oɶ3Q=_ǥu#Ib{(\בԂb뻼/`Cl릐-grdRi^|s7!PqPA*;BMG7lWa;nonHyx<7lT*q|qM;!R`& [RV2mm(H\6&Nq_cGLnF #M͏0BAKK.HTPR;}oc:ʊ՛`aI Z I̘3MkVEIqxg΃,;{ι[, b_ \ )ʢe*fʑIR K)[#RG6S((A &Y>]yqνCX` 8~PS}ܪ~>F e⫙8_~Ξ$(W٧1sE)Cc:s%과!mwM7$セp1 9txZv[>G{^B21*LgQWX/~ `v*G)a. )LdLĦX'q<|y_c4SVXIbV^OmY?Տ_>]nMMoȸj!q8S?VclZR1e*p^RR-z }o)1F$Q}ǯ!{WNU,^N2Z]\ÊcZ`j2(6X08l6uR[49Lb^3cJ+I'a}F)ٸq1z+KZ\] W8sJΜҮ; $ﬨW5<4%kukb?r$ (LEA)*:#DJ)GF^Q_?R"XDNOͦ+jNq:jfzLiy!-#W-J< }kOڤN$N4:<٩^kQzU++m9WlɛD]P98V^oƛoա7)mKr2QrH~+is'*DKi+#m0 }=%IgΜbCs:|&G'ezyQ#kO+uy&L}\ 6Q~'@9oP|-PvWQ;I F__/~"LQő"HB1x)D^Qd}QM`W^ 4VQRʲKZ>{I!MnWqT7\$314M##\w|'Qu{mUҪF&T5t> oSxNhՔ}QGm oBcJ59$/)!H ZErNNz(Ur+yY;W;y?:Q@ ns4MDfa^wqI҅ifjYWWI:w&*;64! D}Y.;]yETIJMiR4lj_:se"qs.;v^gϞb5f=pJ\P/h _o}ISZUqd/k4=$]^KрξTTdm1RϹ _;?z+ksZWT ʃEAO~(RA:EN*R'֮7w~Ʒ+bZkGBq8B:24FeDi.5H}>՘Hws۶x1FV.gO҂Bj./i߳{_ )-^tFI5dJ%W.}yݗ|(E/.r+w^9eYQoN:,/s9BqbWȯo$~@Qi0wIi%Ok^}TOiblxo@R_ж-ӊx/]41R2&I;S5{8wFiZQM$$%e@'zⷾF,+<*я74` ZW^y8w_BsI'f4•KZ{n6~)-:ZmM$:M5<_&b)S,r]<2$.sVe",uyeNsk-[ kk six!7SuzO ?AY(&̫U 7jZ@(ɉ#EEkb23t=±Vje+KMY `dXNh-r91IYkeHG'>үkeink"iEC&Fɟqu=~zgxfŒ~_ /.cRsE^WJUIK'+Q[ժM9zn/+~)*[ %Il%g&$.ߙrˣr'{LYr\J[9EUa]XM*J5l#eѩtާQjWWU,viiqn?fP3 kϳ> 0Q$[M0&RZYe)#I$IĉҴ 'O=ݧ^bA|wAy?_vzQKeYU=_~-Vڴy9g}7kGxnٓ:7wQ;těҕ#zNNk6j8v\T4t~m탢( :䝗B/8/rg9,ϕNYneY|(s_7[6^E~|_s >(a)ھi*ǫVi+S52ZZ [=aP Yu:=Gti~NP1 g*(KNrkUˠ.MlɿwL+iE{G}V8sDGOҥ ZZYT/>wL_ԉSfkbr7y+p!傂Wt1]Y^,/:OA=F-Pӂ9MFB.zk=ʳA*+wAyzɹ˿^U漬wEU{őP!r6qDх)rIAi8|~T+ZUKZC;2Ujx|oUbLuăPVB zz=+祩ەĉ*ihVlj81FI(~?Mɻ0FJ!}c(M}hqiN'j{U!xUҊj՚~~ڱA;qQN_R{ a۷sq!G8ua=jY.]9{L]ǚƷmBc\ *k2:R+V!S/{ sWv/b_re>uX0A[֗S M1n/;!u;~]IQY)&T$OeX{%qYqvS?yZ ^[9n'Ӗ]w*0XKTTueem0.IJXJJZI3Ujڶaa6pR *TI}WGͳ:v겚͎Lu7lF!?{1y [jvڪWJDARseIgm]즍JgմR +۳XGL1B$F2FiȘHQ,E22 BUAZYd4>{ɫ eP4h]t/VrNiV)HbnؤuqmyƓHNS0X]]wGNYPa obnpQÊM,)(&)'$e{=/Oja;$L᡺|˩+ZZ],ZO?CtҢڝt<3491&@ޞ(.{Kns-.)wVC(lʖizfJM"o][ZXqT̹7(1lhηWHNqg,|PAcxr? B(VgI)Ź{c2urfrIrUP1J\֮skePlM@4Ee]5HQo~DE'JXA gW1v'+~5hBYQY^ Xj]>jhzyV9 [Aʳ{]y~ >$Sr;‡~a@TsuQ + "Ŋ56<$%IEqDF!Z+Z\fZ\\LZsA4VIib45E^7W_7ݢ\n.;5Um0/'=+6F"E3ztInzniauY+ղY`Pco}8UW6UL*׳\UOTG+%YWֳlQ;PXX"ߌ PTN,NiQw~H^Q$hƍԏv^-6{:q겖WrzEؐf&R^ 4Iao7^߯7|𫝖eùjy>(r9yT^yV[֖-59IIg\sr辷~?@Pyߙߗ~!@Պ4.+esC~Z^^V'Xݴz4v[ܶKs+~ǢnY){Qdbq"^OXZY],*ƱҴ:U,>UdnΝ[uEu:LN^fB=O>4x}Ih>$ u%ARkEĪU*{4咎.اњ۶]CCUŵTv2u;L$Y]w>V-|E},6ޯ yViJ%-!ȶyAsjl,!@mjenzyZ]R**|G3O? D@ZOizKH8wE?Fk]m|PtaݱV6U/Ol;RבuE_`1ʭĩJE/駾4uK:r%cs]ڸfxh5;]MOcж591O==c&*bDcdv45=+cL1TCV-IJRtsY7دGq߹SZMq,e+W=H#S/#I˕E@PV ȹO*%.jڵzS8^&gTIbz]u߸5TͥYo˝ om|PdL*4>9n˿8 !h9^tB#щsM=iblXS#Z]Y?q=vn!ksIn֍7ߢ?ʗi !hTĪE cgN?}/=Xg6oNr(AnqUyݑbr?}_ɗu;֪qIemܬ $ܕs{jW\>x:Kں6/;g#82Gz۾+ˋ:zxM}oKr[n$:tHЇtݵu'm޶C7vjn7.kGK|𺼴 iA3ck(bd`W|uyY>em:=нwܥU+sZ^iRXYQ7)6G'캯$T(a-ⵕ5Q$'+c.,iblJ/kڼmoYg]kw$W'HTUح_UY_ZZ IүگIYQvɍjrީ*ijf&+k ڽ!hP'EiEEC(RsuUyU?GV/3}Ӎ5TRVL,ڔouY6δ%ÍiIlM_G^;훶K!:N;׎oRVXNJEQ+ިg8q]s=^u51=[[O&p͡RsEKԇ43>jZUA&2ECY~=ik*q{uӝjͻbSvWE^Q,0uU'’s~0M (H# UZx㬳hzl^pN{^~Yݣ;xHtVWRdtǭ˿/VYwvmQ!x,$npM] Zjj>FeY{Pk}p:wƆݻkbfV8VnLj*Q(9ke@ZS:V3<~vSjM"Iz:}/hEܾYO?wuo4T+vu.]7%kw Y͎OKSسI!(({/_6k˶kxq^~iYI.ZRR+j9#/)bߌ)Nrd\֪nygBuvbFiKzF#oy@xGĹ7?in@K]\ 5To;dHn[+"cPάtI=;:86420.+)%" NMLKJF')+)&# KJJIH(") ()&#  HHGG7$ (&# # FFED,! 3*(&#! CB97I+@;(%#  A@?!"((" !!('%# >==0$#""!!*/..(!*(&$" .--,++*)(('&%$#"!  344332210/.-,+*)($2110//.-,+*)(&%  ./0//..-,+**)'&%$!$%%&%$$##"!  LH876543231>RQONLJHFDB@><287520-*'!pބmnncqXS[`GRFCW0񛌑wC_dr.rBZ;P1320.,+**)+5;t|uld[FmG\E)-L9Lrtme\ǘ` QJ@Btmf]MxW P$2*@0sle^S7Ie P@B>Hqke^YY^b&"NPKG(spjd]a_]\ZYaecbZNLI\wsnhb\ ~|{ywusqomjheb_\YVRNIE  |xuqh V~{xuqnj9C~|ywtqnkg` ;fhijjiihfecb`^\YWTQN( LH876543231I^^]]\[ZZYXWWVLTTSQMID?6.'窼ʹⳎusmP桿ä́Ei(`ai޲Į֣ ̿ qRCDCCB AEU` `cf)I|\|. ̊ vx hl ~ e8,O*dM |(7I@Hev :" 0~trA ˕|xž yq  ^C!Ŀ`A l8mky͛L"\܃hEPhK&֕qAD3 "&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%ih32CEB<;:6(VK! K  /(#DPMGB:>J7G:E@>@?>=;;#-60(./)),+&%"*+P,T*+4HH-M$/+%:,$#%,8*,!*VV(2%P?;O*H-2G!0-C:$: $4," *TT6L( ,#+"2!%$A>+("s-! *SRPOLONMMKF=FF22C$??>=:39872$)10''''")QPPONNMLKJIHGF'2"'>?>=<;:98654310.-+)'%# ) ON8MLLJJHC?>=)&698775543210/.,,/.-+)'%#!) MMLLKKJIB & #-+)'%#!) LKKJJIHA(1$-+ %"+)'%$!) JI HHG"%*D ()'%$" ( HHG FC/& 4#)'%$" ( F EE;&)* ('%$" ( D C?, 0Y5  BV#('%#" ( CB A'WP(-#%XG%(&%#" ( A @@8+/$..  $%(#)'&%#" ' ?@?>3 AN5 )('&$#! ' =>='<5100//..-,,++**)(''&%&**)('%$"!' ;<;%::998876655432210/..,,+)('&%#"!& &&&!  &(43221100//.--,+**)('&%12100//..-,,+**)('&%# %&010/..--,++*))('&%%$$../..-,++**))('&%%$#"$",,-..-,++**))(''&%$$#"!$  EB<;:6(VK! K   ,/ XŷΗȞ`|pss}zjVh`+RO-*pvppGz^tcy`]Dd@yuzAK;I[E9?PK%ZZQ4*h`ᮢpz$X|b3(VUN b4.}R.+ 5c]VN*jSQOu]rZ4Y9cauo]S'PQ)9}]G1%8M<)IYQ*ƪʼncLdrnoWnoaZ[T )j[kzupjd]V)̼/nf~}{vpke_X )ηJ(,& "bzvqke`Y )̵$ka|w& RgQ`K Wzvqkfa[ )YdL7t&DS93Gsuplga\ (Ƽ+h!' 4aQXtpkgb\ (¥&gT5*#DBDtpkgb\ ()x 0Ym&W BVQPsokfa\ ( Ll4WP;za#%XG+Vjrnjea\ ( urLgz# bR8R]Juqmiea\ '41E2 DQ7 +;, Uvsplhd`\ ',}|zxwusqomkilzxurokgc_[ ')|zwtpmjfb^Z &  &&&#[ZZYXXWVUTSRQPONMLJIGFEC&o}|ywuspnH%,}{ywuspnke%l~|zxvtrpnligH$)~|{ywvtrpnligda$a}~}|{yxvtsqomkigdb`B$  EB<;:6(VK! K !   ,/ k钼ΰսɯFK*_ݧhfjz`vp^f{E'-6º)' 3  {º)&|mQD]Qu!(% ?4 4($ 4qT*8of/p(# < 0Y<# BV ("nMWPL6%XG:(!0m( ~T|z' QKlM  GTST: E`H3¾'р'Ŀ&$#""! &&&8~|zwuspn &v%F)%w$C܁¿#$$ m$ +./0/.--,++*))''&%$# h8mk FwuCxx\WWڻSѺ߭dUժgcg^ Tz]ֱT2'p@[____________________________________________^ich#Hit32J{tgMjZMHGFEDCBA@@EMTN5 b5  (y~[$ kc1 _N T?    J2 JYXWWVUUTTSSRRQQPPOONNMMLLKKJIHGGFFEEDDCCBBAA@@-&?>>=<&;::9988766544322100/.-,+*))('%"! D+ T"OXWWV]UUE@<.6IQQP=ONNILLKKJJIIHHGGFFEEDDCCBBAA@-3>==<<;4- )988763)4"$32100/.-+*)('"! C) TY&XXWWVB!'MQPPNNM2LKKJ1(0CG?BEEDDCC/;A4@ 0>== +8( 43211$ *)(' "! C)n&TXX* RWVVF )@NRQQPP==<$.-4:62'%"32&  ))'#"!C)&X-WG0VVB 3TTS(IRQQPPONNMM* )EI, CG6E&9# :==<<;;::9 763 . %/!-, *!  #"! C)W+V KTSSD:QQPPO, JNMM! 1JIIHGF2&EDC6$A@##%>==6&6( 766/ ,10/* $#"!  C)WV%//E3SRR -QPPO=8NMM%=BIIHH'GF&5DDCCBB$2 ">==. 7665"&110/$ &%$#"!  C)VUU= T$2@NRRQPPOK !NMML* =>( 4   551-2 "+!' "! C)TS@RR6-QPOONMLG2 4IID@GG&EED@ /BBAA@@? >>==<.;::99877$ 322,10' +)(''& ! C)SRQPONMMLKKJJIHHG AEDDC7 2A@??>==<<;;:+998877663&"1322110//&--,#&*)(''&%$#"!  C)SRQPONMLLKJJIHHGF*EDDCC,  2A@@??>==<;;:+9988776655443322110//.--,++*)(('&%$##"! B(RQPONNMLLKJJIHHGF>5D, /AA@@?>>=<<;;:998'776655443322110//.--,++*))('&%$$#"! B(QPONMLKJJIHHG FF55D- 3BAA@??>==<;;:9988776$55443322100//.--,++*))('&%%$#"! B(QPONMLKJIHHG FFE*) 3BBAA@??>==<;;:9987766554 3221100//.--,++*))('&&%$#"!  B(PONMLLKJJIHG FFEE&3CBBA@@?>>=<;;:9988776%554433221100//.--,++*))(''&%$#""!  B(ONMLKJIHHGFED4CBBA@@?>==<;;:998776&554433221100//.--,++*))(''&%$##"!  B(ONMLKJI;('0/..--,++*))(''&%$##"!  B(NMLKJI0$..--,++*))(''&%$$#"!  B(MLKJIE ''&&.--,++*))(''&%%$#"!!  B(MMLKJID 'CFFED@% %3221.--,++*))(''&%%$#"!!  B(LKJIHHCFF2!&0CC7<[(% 441$%10-,,++*))(''&%%$#""!  B(KJIH +BF0  3B> rU#40 //,++*))(''&%%$#""!  B(KKJIHGC BF+B6  Ig4  4. /. ,++*))(''&%%$##"!  B(JIHG+6E&.A$ ]U51.)+**))(''&%%$##"! B'IHGFE9 =@ -Z>)4!.+**))(''&%%$##"! B'IHG FF>.E#@ 3O+ 5/-%(**))(''&%%$##"! B'HGF E.=D?- BF#4%-!**)((''&%%$##"! B'GFE&D4 ?0 >@ 4 -*))((''&%%$##"!! B'GFEDC4!4?0 :=%4 0-*))((''&%%$##"!! B'FED %C3 ]R>0 384 '_',*))(('&&%%$##"!! B'ED C,;B.;vO$>, &-41)vwc$ ,*))(''&&%%$##"!! B'EDC ;+BivfJ,+> 3% N|v[:-'%)(''&&%$$##"!! B'DCBBA5G~V=PL+<=  (-3gWAKR7, *))((''&%%$$##"!! B'CB+2A#^|E9\]) ,=((2) 7]E_3 -,*))((''&%%$$#""!! B'CBA  =@ !PcQ/EjX&+=6)2' Cgb:>if4*,(*))(' &%%$$#""! B'BA@.@@0#,  ,*8>9 /1+!.% 2.%--*))((''&&%%$##""! A&AABA@;?>-!0>=6 (10# ,.-**))((''&&%%$##""! A&A@?< )>=9!F -0/..-(+**))((''&%%$$##""! A&@?; "+(! Dub* $##+**))((' &%%$$##"!! A&??@?>/&;CB;))++**))((''&&%%$$##"!! A&?>=6%",,++**)((''&&%%$##""!! A&>=<;:9876543210/.-,,+**))((' &%%$$##""!!  A&=>=<;:9876543210/.-,,+**)((''&&%%$$##""!  A&<<=<;:9876543210/..-,+**))(('&&%%$$##"!!  @&<=<;:9876543210/.-,,+**)((''&&% $##""!!  @%;<;:9876543210/.-,++*))(('&&%%$$##""!!  @%@%@%@%@%@%?%?%?% ?% 6543210/.-,+*)(('?% 543210/.-,+*)('"?%#543210/.-,+*)('&&?% 43210/.-,+*)('&&%!?$"3210/.-,+*)('&%%?$ 3210/.-,+*)('&% ?$!210/.-,+*)('&%$$?$ 1210/.-,+*)('&%$!?$%0010/.-,+*)('&&%$$##>$//0/.-,+*)('&%$$#!>##./0/.-,+*)('&%$$#"">#-./.-,+*)('&%$#"" >#"-./.-,+*)('&%$#"!># +,-.-,+*)('&%$#"!!=# *+,-,+*)('&%$#"! =#  ="="{tgMjZMHGFEDCBA@@EMTN5 b5  (y~[$ kc1 _N T>EEDCBA@??>==<<;::99876654432210//.--, ++**))(('&&%%$##""! J2 g7|f}{xvsqnkO:b_\YVR2D+ j6Ty;}}Upr^ePOywtroREa]ZWTQ?C) 6&aBAAZ#i=Jх,jDǮFM.ym)L'g4#/wurp$#4b_\YVRO>C)nbp$$Ak$;aӆ j\M5@zHH1a~>4k g^j%$TXH[vsqW :c`]ZWTQNFC)1a~j0JoS kuǖ5d)9'S^1Y>"tss/!Uպx876'c_'\;Cw7^{z<RM<w|z6 ,#H3`]ZWTRN'C)Aׄ>B!<~p.-` 9ϧZ@t<n%V,R4P;/O-_z/]pL a^[XVSP'C)@YwLJS99̾6eB-b(zny16trpnkU([_\YVTQ(C)@m6M(hM^k}djwurpnligeb_]ZWURC)?mpx}{ywusqnljgec`^[XVSB(q?Ŭy2}{ywusqomjhfca^\YVTB(>kĔz3}{yxvtqomkifda_]ZWUB(r>on3}{zxvtrpmkigdb_][XUB(=߀jdJ}{zxvtrpnkigeb`^[YVB(=o}{zxvtrpnligeca^\YWB(<˥i7+%>o}{zxvtrpnljgeca_\ZWB(<̂$e}{yxvtrpnljhfca_]ZXB(;ـ׀̿DBffee5 0JJ@&;~}{yxvtrpnljhfdb_][XB(;׀̾+gc  (fG 2~}{yxvtrpnljhfdb`][YB(:Հ 7+ĈY54d(<[(%UdJIIi~,2~|{ywvtrpnljhfdb`^\YB(:Ӏt+ă( rU_G U3W|zywvtrpnlkigec`^\ZB(9ЀɻLw Ig4 V4|zywutrpnlkigeca_\ZB'9΀re^ ]U)4rOzxwutrpnlkigeca_]ZB'8΁̀*5Ý-Z>q:[2)zxwusrpnlkigeca_][B'8́ŭ|J^Q 3O+hrxvusrpnljigeca_][B'7ʁ}'| BF#DAi \xvtsqpnljigeca_][B'7ɀȁd  >@ M% I"?wvtsqpnljigeca_][B'6ǁƀ4!4 :=g/B~">wvtrqonljhgeca_][B'6ŀĀc ]R 38U& '_'B~!>wutrqonljhgeca_][B'5À y.;vO6y &-L91)vwc$X}Svutrpomljhfeca_][B'5 wIivfJ,`N 'e N|vZ:~nivtsrpnmkjhfeca_][B'4(2G~V=PL+ (gWAKR7E~Gwvtsqpnmkihfdca_][B'4v^^|E9\]) xm(At  7]E_2 }Ewutrqpnlkigfdca_][B'3G !PcQ/EjX&p'tkCgb:>if4#w~@ pvutrqonlkigfdba_][A'2~<~(#,  ,6$s(!.% 2-AzPSwvtsrpomljigedb`_][A&2F0{Q10P$ q_7'&>tP/xvutsqpnmkjhgecb`_][A&1&pXF  Gp*/xwvutrqpnmkihgecb`^][A&1EDYwmX9 Dub*  4UedcJ* Nyxwvtsrponlkihfeca`^][A&0/&;CB;) @szyxvutrqpnmljigfdca_^\[A&0bC.-,+*)('&%$#"B_}|zyxwvtsrqpnmkjhgedba_^\ZA&/R~}|{zyxvutsrponlkihgecba_]\ZA&.Y~}|zyxwvutrqpnmljigfecb`_][ZA&.O~}|{zyxvutsrponmkjigfdca`^][Y@&-V~}|{zyxwvutrqponlkihgedca_^][Y@%-T~}|{zxwvutsrponmljigfecba_]\[Y@%@%@%@%@%@%?%?%?%*)('&%$#"! ?%W,~}|{zzyxwvutsrrppn*?%5~}|{zzyxwvuttrrqpon_?%_3~}}|{zzyxwvuttsrqponml)?%*~}}|{zzyxwvuttsrqponmlk]?$\2~}||{zyxxwvuttsrqponmlkji(?$%~~}|{{zyxxwvuttsrqponnllkii[ ?$Z'~}}|{zzyxxwvuttsrqponnmlkjihg4?$3~~}||{zzyxwvvuttsrqponnmlkjihgf_ ?$g-~~}||{zzyxxwvvutsrrqponnmlkjihgfed3>$$$~}}|{{zzyxxwvuutsrrqponnmlkjihgfedc\>#c*~~}}||{zzyxxwvvuttsrrqponnmlkjihgfeecca2>#".~~}}||{zzyxxwwvvutssrqpponmllkjihgfeedcbaZ>#_~~}(|{{zzyyxxwvvuttsrrqpponmllkjihggeedcba`_0># !{|}}~~.}}||{{zzyyxxwvvuttssrqqponnmlkkjihgfeedcba`_^W=# Zxyz{||}~~~}||{{zyx$wvvuuttsrrqpponnmlkjjihgfeedcba`_^]\/=#  !"! ="="{tgMjZMHGFEDCBA@@EMTN5 b5  (y~[$ kc1 _N T>e"nnmmllkkjjiihhggfeedccbba``_^^]\\[ZZYYXWVVUUTSSRRQPPOONMMLKKJJIHHGFFEDDCBA@@?>=<;:987654310/.,+*('&$#J2 T˦½_RD+ T_ˉ ӂÿqh C)T:ihh6awށElԂ*q؀,}I&$B{?U8M:9TfC)! 88g7^0}Tgvu*O؀-fS2<:t½ _sC)ˀ ݀Jv0U@=N_p(v%tD2"j/Xܖ5@Û1%[~x%C)R8h1؁C|IHX$"w{ihy N{<C)jPOFP8Xcܣ^ F}=C)i NقzypV-bON)ol*fyC)hcb4I3ހZXV-<^mXb1}aXH9v,S?C)hc3`HG1Z/g"a9'G&%SaKI+*L|. @C)gچ[ZV,ԋkI@"0ߴ,QWA+AC)fV}>+%|گΥ2B(e++&"B(d,QҖ&#B(c,Q(#B(c,R(¾#B(by(¿$B(a)¿$B(`WC<[(%ߣxvvGQ¿%B(\ B)*> rUsT¿&B([.{ Ig4 -U+&B'Z ]UA1T׻&B'ZBU-Z>^QB&B'Y x 3O+#ԫ&B'X <ʉ BF#nh&B'W ۉ >@ }< w6e¿&B'VT!4و :=./k6e¿&B'V  ]R؈ 38> '_'k6e&B'U .;vOIň &-{]1)vvc$&B'T wivfJ, ? N|vZ:!ϴ&B'S>PG~V=PL+( (0gWAKR6mt(¿&B'S^|E9\]) (j 7]E_2 *p&B'R**s !PcQ/EjX&'Cgb:>if42h&A'Q`5#,  ,B9 8!.% 2-_Ђ¿&A&PrM ǂNL8 .X=!==<;;:!99887k&A&K=&A&J?&A&J@&@&IB&@%GC&@%@%@%@%@%@%?%?%?%CBA@?>=<;:998765443221100?%>E?%#>?%@D?%"<?$>B?$!= ?$9U?$.5 ?$7S>$:ހ9 >#݈݀܀5Q># 7ڊڀ7 ># ׂ؂ق:O># 5ԁՄցӀ3 =# р҆Ӂ8L=#233445676543210/.-,+**))('="="t8mk@@5 1}̸ܳvnjiiiiii}hXLFEEEEEFŻqWB4+((((()ӸзlL4"3ḵ巰ˋkI- Gż||ӎoK-D˳~κse_^cԓuQ1 E߻yjb`cwپpYIBAG˖yU5 G긹xaOECFiu]D2*™|X7 8}eL7,zتiO5"š~[9  pV<'G߀HP~[9  ~YB쓴ZT}Y8  pzV6  ܪwS3 _ŨsN/ $mI+ 5,In(Ce#:Wn .EWenssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssn .:CILLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLI #(,........................................................................................................................, MilkyTracker-1.02.00/resources/reference/000077500000000000000000000000001324432207300202235ustar00rootroot00000000000000MilkyTracker-1.02.00/resources/reference/Amiga_resampler/000077500000000000000000000000001324432207300233135ustar00rootroot00000000000000MilkyTracker-1.02.00/resources/reference/Amiga_resampler/Alankila_email_140108.txt000066400000000000000000000322011324432207300275520ustar00rootroot00000000000000Subject: Milkytracker - computed bleps update From: Christopher O'Neill To: alankila@bel.fi Date: 14/1/2008 00:27:37 Hi Antti, I don't know whether you remember or not, but we spoke on IRC over a year ago, when I produced an experimental version of Milkytracker with Amiga sound simultation using your guide. Anyway, at the time it was a dirty hack to get Milyktracker to use it, but since then the code base has been cleaned up and we've been able to incorporate the filters (along with some other resamplers). We are due to release a new version in the coming weeks, but in the meantime I've attatched a beta version (linux/i586) for you to play around with. I would be very grateful if you could try it out and comment on the accuracy of the Amiga resampling modes. To enable it, select 'Config' and then click on 'Resampling' - volume ramping is not needed so can be disabled - ensure you are using 48khz mixer resolution also, as there's a slight bug with the other rates at the moment. PS - Milkytracker will be going open source in the near future, under the GPL. - Chris (Deltafire/df) ==== Subject: Re: Milkytracker - computed bleps update From: "Antti S. Lankila" To: Christopher O'Neill Date: 14/1/2008 10:12:26 Christopher O'Neill wrote: > I don't know whether you remember or not, but we spoke on IRC over a year ago, > when I produced an experimental version of Milkytracker with Amiga sound > simultation using your guide. > Of course I do. > We are due to release a new version in the coming weeks, but in the meantime > I've attatched a beta version (linux/i586) for you to play around with. I > would be very grateful if you could try it out and comment on the accuracy of > the Amiga resampling modes. To enable it, select 'Config' and then click > on 'Resampling' - volume ramping is not needed so can be disabled - ensure > you are using 48khz mixer resolution also, as there's a slight bug with the > other rates at the moment. > Yeah, my blep tables are not compatible with sampling rates less than about 44.1 kHz in any case... The aliasing prevention is tuned for about 20 kHz and if that's greater than (or too close to) the nyquist frequency, it's not going to work so well. I have forgot how to sample songs using milkytracker. I looked around in the gui but could not figure it out. I suppose I might use jack to record audio data, but is there some easier way to get it done? I can say that by ear milkytracker's output is good, but I'd like to compare against modern uade123 just in case. Comparison is slightly hampered by the fact that uade emulates more of Amiga hardware than milkytracker does. I can tell that you still do not have the amiga period limitation at about 112-113 maximum, which makes some songs sound rather funny as the sound jumps up instead of distorting like it used to. You should probably support the Amiga-style playback model separately, so that the protracker command for turning the filter on and off could also be supported. > PS - Milkytracker will be going open source in the near future, under the GPL. > I'm sure shd will be pleased. > Was just looking through your webspace and noticed the computed-blep.h file is > different to the one I was using in Milkytracker. I've replaced it with the > newer (at least I'm assuming it's newer) version. > Yeah, I may have done some nearly inconsequential updates to it. There are no significant changes between the versions, apart from slightly improved quality or slightly cleaner cutoff at 20 kHz or so. The best reference to track for the bleptable is currently uade source tree, which I updated a few months ago. I think I reduced filter bandwidth slightly to ensure a cleaner cutoff or something. I guess I'm becoming more conservative, even when the only thing that can show the difference is FFT plots. I still have a long-term annoyance with the blep table which is that its SNR is slightly less than 84 dB. If only I had 33 bit wide integers I could allocate the one extra bit and ensure that the noise level is always less than the signal. For 16-bit music that milkytracker is theoretically capable of producing, I should calculate a new table with at least 100 dB SNR. (Hello, floating point arithmetic!) But on the other hand, who cares about PC music played with amiga hardware limitations? I do worry about the fact that you may not be dithering the output or doing noise shaping for it. How do you do it at the moment? I think there are real situations in mod music where correlated quantization noise could be heard, especially with lots of channels and consequently quiet output levels. -- Antti ==== Subject: Re: Milkytracker - computed bleps update From: Christopher O'Neill To: "Antti S. Lankila" Date: Today 10:44:11 Hi Antti, thanks for the reply. On Monday 14 January 2008 10:12:26 you wrote: > I have forgot how to sample songs using milkytracker. I looked around in > the gui but could not figure it out. I suppose I might use jack to > record audio data, but is there some easier way to get it done? I can > say that by ear milkytracker's output is good, but I'd like to compare > against modern uade123 just in case. 'Disk Op' -> underneath 'Song' select .wav and click 'Save As', check the quality settings before recording. > Comparison is slightly hampered by the fact that uade emulates more of > Amiga hardware than milkytracker does. I can tell that you still do not > have the amiga period limitation at about 112-113 maximum, which makes > some songs sound rather funny as the sound jumps up instead of > distorting like it used to. You should probably support the Amiga-style > playback model separately, so that the protracker command for turning > the filter on and off could also be supported. I guess this could be emulated in the resampler - what should I do with the samples if the period is less than 112-113, just ignore them or delay them? > I still have a long-term annoyance with the blep table which is that its > SNR is slightly less than 84 dB. If only I had 33 bit wide integers I > could allocate the one extra bit and ensure that the noise level is > always less than the signal. For 16-bit music that milkytracker is > theoretically capable of producing, I should calculate a new table with > at least 100 dB SNR. (Hello, floating point arithmetic!) Milkytracker uses integer mathmatic in its mixer, 32-bit ints (the reason being that many of the target platforms do not support floating point). For 8-bit samples, there is still some room for extra precision in the blep table (currently 8+17 = 25 bits, so 5 spare). However, for 16-bit samples there is not enough space to use the 17-bit table, therefore i've had to reduce the precision (by 3 to reduce overflows, so 14 bits only). So basically 16-bit samples will be noisy - but it's that or nothing. > But on the > other hand, who cares about PC music played with amiga hardware > limitations? Well.. Some of the users of Milkytracker prefer the sound using the Amiga resamper than the other modes - especially for chips. Still, these are using 8-bit samples anyway so everything is working as it should. >> I do worry about the fact that you may not be dithering the output or > doing noise shaping for it. How do you do it at the moment? I think > there are real situations in mod music where correlated quantization > noise could be heard, especially with lots of channels and consequently > quiet output levels. Well, we did speak briefly about differing the output (after noticing that modplug does this), but at the moment it remains on the todo list. Saying that, I don't think it's a big job to implment - basic differing anyway, I don't know about noise shaping.. - Chris ==== Subject: Re: Milkytracker - computed bleps update From: "Antti S. Lankila" To: Christopher O'Neill Date: Yesterday 13:15:42 Christopher O'Neill wrote: > Hi Antti, thanks for the reply. > > On Monday 14 January 2008 10:12:26 you wrote: > >> I have forgot how to sample songs using milkytracker. I looked around in >> the gui but could not figure it out. I suppose I might use jack to >> record audio data, but is there some easier way to get it done? I can >> say that by ear milkytracker's output is good, but I'd like to compare >> against modern uade123 just in case. >> > > 'Disk Op' -> underneath 'Song' select .wav and click 'Save As', check the > quality settings before recording. > Ah yes. I was looking around that but I must have missed it. I just did the A500 plot: http://bel.fi/~alankila/uade-vs-milky.png http://bel.fi/~alankila/uade-vs-milky-detail.png http://bel.fi/~alankila/uade-vs-milky-detail2.png Overall: good agreement, correct overall shape. Milkytracker has slightly incorrect synthesis frequency for 48 kHz output, probably result of quantization of the period values to integer approximations. (UADE uses floating point math to ensure the output periods are exact.) Milkytracker also has about 3-4 dB higher noise level, perhaps due to the way final mixing is done. Maybe you quantize the channels to final output level before adding them together. You could set every channel to maybe 24-bit resolution, and then sum all of them together, scale by volume level, and then dither, shift and clip to 16-bits. Overall, the synthesis seems adequate, and the differences must be due to this type of trivial variations in the implementation. > I guess this could be emulated in the resampler - what should I do with the > samples if the period is less than 112-113, just ignore them or delay them? > Good question, heh. The simplest strategy is to just clamp it to 113, because no matter what Amiga could not fetch words from RAM faster than at the horizontal line switch rate, which apparently alternates between 113*2 and 114*2 clocks. (This works because Paula gets 16 bits at time, so it can play two samples in the time one rasterline changes.) This deals with the most noticeable problem which is the sound jumping up octave or half in mods, when in real Amiga you just get distortion. Unfortunately the sound chip did its thing even if it could not get data from RAM fast enough, so it is not so easy to do it right: when Paula sends the low 8 bits to the D/A output, it pulls a data request line to Agnus, which will issues a DMA read from RAM at the start of next raster line. If Agnus could not satisfy Paula's data request in time, Paula'd simply replay the data it had. Based on reading UADE code, it seems that Paula will "splice" the data words together so that if at start of next 16-bit word there was no new data available, it'd reissue the upper 8 bits again, but then play the lower 8 bits from the next word, effectively skipping the upper 8 bits of the next word due to this timing glitch. Amiga hardware additionally produced some type of timing-related distortion for period values less than 122 or 123. This causes replay of the previous sample word, too. I suppose it's related to some delay inherent in the interaction between Paula and Agnus regarding the request for next data word from memory. So the problem I described above happens a bit earlier than it should, based on the above analysis. > Milkytracker uses integer mathmatic in its mixer, 32-bit ints (the reason > being that many of the target platforms do not support floating point). For > 8-bit samples, there is still some room for extra precision in the blep table > (currently 8+17 = 25 bits, so 5 spare). However, for 16-bit samples there is > not enough space to use the 17-bit table, therefore i've had to reduce the > precision (by 3 to reduce overflows, so 14 bits only). So basically 16-bit > samples will be noisy - but it's that or nothing. > True. UADE itself promotes the samples to 14-bit by multiplying the 8-bit sample with the 6-bit volume register, and the blep table is calculated for this. If I delayed the multiplication with volume I could improve the SNR. >>> I do worry about the fact that you may not be dithering the output or >>> >> doing noise shaping for it. How do you do it at the moment? I think >> there are real situations in mod music where correlated quantization >> noise could be heard, especially with lots of channels and consequently >> quiet output levels. >> > > Well, we did speak briefly about differing the output (after noticing that > modplug does this), but at the moment it remains on the todo list. Saying > that, I don't think it's a big job to implment - basic differing anyway, I > don't know about noise shaping.. > I think triangular PRNG noise shaping may be the easiest, and it has quite attractive spectrum, practically most energy > 10 kHz. I implemented it for a toy project, but was unable to detect any audible difference. I think the amiga output modes at least are noisy enough as they come and there might be no need for additional dithering before modest 1-2 bit quantization. Full noise shaping is fancy but not really worth the trouble. People who care about that sort of thing can use JACK to get it. -- AnttiMilkyTracker-1.02.00/resources/reference/Amiga_resampler/modguide/000077500000000000000000000000001324432207300251105ustar00rootroot00000000000000MilkyTracker-1.02.00/resources/reference/Amiga_resampler/modguide/Changes.txt000066400000000000000000000017611324432207300272260ustar00rootroot00000000000000pre-release 2006-07-02 alankila * Christopher O'Neill (Deltafire from ircnet's #amigaexotic, and one of the authors of milkytracker) tried to implement the blep approach. He made an excellent point that convinced me to separate the aging function from the function that adds new bleps. The function is now known as input_sample, and the aging function is called clock(). * Christopher also found out the hard way a silly bug of mine: sampleclip routine had the comparison operators the wrong way. :-( pre-release 2006-06-27 alankila * LED filter cutoff is at 3.2, not at 1.6. Duh. This was due to a bug in Butterworth filter computation routine, noticing as I reimplemented it from BLT. * LED filter on genuine Amiga appears to perform slightly suboptimally with about 0.3 dB lowered resonance from theoretical. Perhaps component tolerances are at issue? Additionally, the filtering slope appears slightly different from expected. MilkyTracker-1.02.00/resources/reference/Amiga_resampler/modguide/compute-blep.py000066400000000000000000000157011324432207300300620ustar00rootroot00000000000000#!/usr/bin/python import math import sys from scipy import array, exp from scipy.signal import firwin from scipy.fftpack import fft, ifft def fir_minphase(table, pad_size=8): table = list(table) # table should be a real-valued table of FIR coefficients convolution_size = len(table) table += [0] * (convolution_size * (pad_size - 1)) # compute the real cepstrum # fft -> abs + ln -> ifft -> real cepstrum = ifft(map(lambda x: math.log(x), abs(fft(table)))) # because the positive and negative freqs were equal, imaginary content is neglible # cepstrum = map(lambda x: x.real, cepstrum) # window the cepstrum in such a way that anticausal components become rejected cepstrum[1 :len(cepstrum)/2] *= 2; cepstrum[len(cepstrum)/2+1:len(cepstrum) ] *= 0; # now cancel the previous steps: # fft -> exp -> ifft -> real cepstrum = ifft(map(exp, fft(cepstrum))) return map(lambda x: x.real, cepstrum[0:convolution_size]) class BiquadFilter(object): __slots__ = ['b0', 'b1', 'b2', 'a1', 'a2', 'x1', 'x2', 'y1', 'y2'] def __init__(self, b0, b1, b2, a1, a2): self.b0 = b0 self.b1 = b1 self.b2 = b2 self.a1 = a1 self.a2 = a2 self.reset() def reset(self): self.x1 = 0.0 self.x2 = 0.0 self.y1 = 0.0 self.y2 = 0.0 def filter(self, x0): y0 = self.b0*x0 + self.b1*self.x1 + self.b2*self.x2 - self.a1*self.y1 - self.a2*self.y2 self.x2 = self.x1 self.x1 = x0 self.y2 = self.y1 self.y1 = y0 return y0 def make_rc_lopass(sample_rate, freq): omega = 2 * math.pi * freq / sample_rate; term = 1 + 1/omega; return BiquadFilter(1/term, 0.0, 0.0, -1.0 + 1/term, 0.0); def make_butterworth(fs, fc, res_db=0): # 2nd-order Butterworth s-domain coefficients are: # # b0 = 1.0 b1 = 0 b2 = 0 # a0 = 1 a1 = sqrt(2) a2 = 1 # # by tweaking the a1 parameter, some resonance can be produced. res = 10.0 ** (-res_db / 10.0 / 2) ar = z_transform(1, 0, 0, 1, math.sqrt(2) * res, 1, fc, fs) return BiquadFilter(*ar) # observe: a and b are reversed here. To be absolutely clear: # a is the nominator and b is the denominator. :-/ def z_transform(a0, a1, a2, b0, b1, b2, fc, fs): # prewarp s-domain coefficients wp = 2.0 * fs * math.tan(math.pi * fc / fs) a2 /= wp * wp a1 /= wp b2 /= wp * wp b1 /= wp # compute bilinear transform and return it bd = 4 * b2 * fs * fs + 2 * b1 * fs + b0 return [ (4 * a2 * fs ** 2 + 2 * a1 * fs + a0) / bd, (2 * a0 - 8 * a2 * fs ** 2) / bd, (4 * a2 * fs ** 2 - 2 * a1 * fs + a0) / bd, (2 * b0 - 8 * b2 * fs ** 2) / bd, (4 * b2 * fs ** 2 - 2 * b1 * fs + b0) / bd, ] def quantize(x, bits, scale=False): x = list(x) fact = 2 ** bits # this adjusts range precisely between -65536 and 0 so that our bleps look right. correction_factor = 1.0 if scale: correction_factor = x[-1] - x[0] for _ in range(len(x)): val = x[_] * fact / correction_factor; # correct rounding if val < 0: val = int(val - 0.5) else: val = int(val + 0.5) # leave scaled? if not scale: val /= float(fact) x[_] = val * -1 return x def lin2db(lin): return 20 * (math.log(lin) / math.log(10)) def print_spectrum(table, sample_rate): for _ in range(len(table) / 2): mag = lin2db(abs(table[_])) pha = math.atan2(table[_].real, table[_].imag) print "%s %s %s" % (float(_) / len(table) * sample_rate, mag, pha) def print_fir(table, format='gnuplot'): if format == 'gnuplot': for _ in range(len(table)): print "%s %s" % (_, table[_]) elif format == 'c': col = 0 print " {" for _ in range(len(table)): col += len(str(table[_])) + 1 if col >= 80: print col = 0 sys.stdout.write("%s," % table[_]) if col != 0: print print " }," def integrate(table): total = 0 for _ in table: total += _ startval = -total new = [] for _ in table: startval += _ new.append(startval) return new def run_filter(flt, table): flt.reset() # initialize filter to stable state for _ in range(10000): flt.filter(table[0]) # now run the filter newtable = [] for _ in range(len(table)): newtable.append(flt.filter(table[_])) return newtable AMIGA_PAL_CLOCK = 3546895 def main(): spectrum = len(sys.argv) > 1 unfiltered = firwin(2048, 21500.0 / AMIGA_PAL_CLOCK * 2, window=('kaiser', 10.0)) # move filtering effects to start to allow IIRs more time to settle unfiltered = fir_minphase(unfiltered) # make digital models for the filters on Amiga 500 and 1200. filter_fixed6khz = make_rc_lopass(AMIGA_PAL_CLOCK, 4900.0) filter_leakage = make_rc_lopass(AMIGA_PAL_CLOCK, 32000.0) filter_led = make_butterworth(AMIGA_PAL_CLOCK, 3275.0, res_db=-0.70) # produce the filtered outputs amiga500_off = run_filter(filter_fixed6khz, unfiltered) amiga1200_off = run_filter(filter_leakage, unfiltered) amiga500_on = run_filter(filter_led, amiga500_off) amiga1200_on = run_filter(filter_led, amiga1200_off) if not spectrum: # integrate to produce blep amiga500_off = integrate(amiga500_off) amiga500_on = integrate(amiga500_on) amiga1200_off = integrate(amiga1200_off) amiga1200_on = integrate(amiga1200_on) unfiltered = integrate(unfiltered) # quantize and scale amiga500_off = quantize(amiga500_off, bits=17, scale=(not spectrum)) amiga500_on = quantize(amiga500_on, bits=17, scale=(not spectrum)) amiga1200_off = quantize(amiga1200_off, bits=17, scale=(not spectrum)) amiga1200_on = quantize(amiga1200_on, bits=17, scale=(not spectrum)) unfiltered = quantize(unfiltered, bits=17, scale=(not spectrum)) if spectrum: spec = int(sys.argv[1]) if spec == -1: table = unfiltered if spec == 0: table = amiga500_off if spec == 1: table = amiga500_on if spec == 2: table = amiga1200_off if spec == 3: table = amiga1200_on print_spectrum(fft(table), sample_rate=AMIGA_PAL_CLOCK) else: print " /*" print " * Table generated by compute-blep.py." print " */" print print "/* tables are: a500 off, a500 on, a1200 off, a1200 on, vanilla. */" print "const int winsinc_integral[5][%d] = {" % len(unfiltered) print_fir(amiga500_off, format='c') print_fir(amiga500_on, format='c') print_fir(amiga1200_off, format='c') print_fir(amiga1200_on, format='c') print_fir(unfiltered, format='c') print "};" if __name__ == '__main__': main() MilkyTracker-1.02.00/resources/reference/Amiga_resampler/modguide/computed-blep_c_source.txt000066400000000000000000001430671324432207300323060ustar00rootroot00000000000000 /* * Table generated by compute-blep.py. */ /* tables are: a500 off, a500 on, a1200 off, a1200 on, vanilla. */ const int winsinc_integral[5][2048] = { { 131072,131072,131072,131072,131072,131072,131072,131072,131072,131072,131072, 131072,131072,131072,131072,131072,131072,131072,131072,131072,131072,131071,131071, 131071,131071,131071,131071,131071,131071,131071,131071,131071,131070,131070,131070, 131070,131070,131069,131069,131069,131068,131068,131068,131067,131067,131066,131066, 131065,131065,131064,131063,131063,131062,131061,131060,131059,131058,131056,131055, 131054,131052,131050,131049,131047,131045,131043,131040,131038,131035,131033,131030, 131026,131023,131020,131016,131012,131008,131003,130998,130993,130988,130982,130976, 130970,130963,130956,130949,130941,130932,130924,130914,130905,130895,130884,130872, 130861,130848,130835,130821,130807,130792,130776,130759,130742,130724,130705,130685, 130664,130642,130620,130596,130571,130545,130518,130490,130461,130430,130398,130365, 130331,130295,130257,130219,130178,130136,130093,130047,130000,129951,129901,129848, 129794,129737,129679,129618,129555,129490,129423,129353,129281,129207,129130,129050, 128968,128883,128795,128704,128611,128514,128415,128312,128206,128097,127985,127869, 127750,127627,127501,127371,127237,127100,126959,126813,126664,126510,126353,126191, 126025,125854,125679,125499,125315,125126,124933,124734,124531,124323,124110,123891, 123668,123439,123205,122965,122720,122470,122214,121952,121685,121412,121133,120849, 120558,120261,119959,119650,119335,119014,118687,118354,118014,117668,117315,116956, 116591,116219,115840,115455,115063,114665,114260,113849,113430,113005,112574,112135, 111690,111239,110780,110315,109843,109364,108879,108387,107888,107383,106871,106352, 105827,105295,104757,104212,103661,103104,102540,101970,101394,100812,100223,99629, 99028,98422,97810,97192,96568,95939,95305,94665,94020,93370,92714,92054,91389,90719, 90045,89366,88682,87995,87303,86607,85908,85205,84498,83788,83075,82358,81639,80916, 80191,79464,78734,78002,77268,76533,75795,75056,74316,73575,72833,72090,71346,70602, 69858,69114,68370,67626,66883,66140,65399,64658,63919,63181,62445,61711,60979,60249, 59521,58796,58074,57355,56639,55926,55217,54512,53810,53113,52419,51731,51046,50367, 49693,49023,48359,47701,47048,46400,45759,45124,44495,43872,43256,42646,42043,41447, 40858,40276,39702,39134,38575,38023,37478,36941,36413,35892,35379,34874,34378,33890, 33410,32938,32475,32020,31574,31137,30708,30288,29876,29473,29079,28693,28317,27948, 27589,27238,26896,26562,26238,25921,25613,25314,25023,24740,24466,24200,23942,23692, 23451,23217,22991,22773,22562,22359,22164,21975,21794,21621,21454,21294,21140,20994, 20853,20719,20592,20470,20354,20244,20139,20040,19946,19857,19774,19694,19620,19550, 19484,19422,19364,19310,19260,19213,19169,19128,19090,19054,19022,18991,18963,18936, 18912,18889,18867,18847,18828,18810,18792,18776,18759,18743,18727,18711,18695,18679, 18662,18644,18626,18607,18587,18565,18542,18518,18492,18465,18436,18404,18371,18336, 18298,18259,18216,18172,18124,18074,18022,17966,17908,17847,17783,17716,17646,17572, 17496,17416,17334,17248,17159,17066,16971,16872,16770,16664,16556,16444,16329,16211, 16090,15966,15839,15709,15576,15440,15301,15159,15015,14868,14718,14566,14412,14255, 14096,13935,13771,13606,13439,13270,13099,12927,12753,12578,12401,12224,12045,11866, 11685,11504,11322,11140,10958,10775,10592,10409,10226,10044,9862,9680,9499,9319,9139, 8961,8783,8607,8432,8258,8086,7915,7747,7580,7415,7252,7091,6932,6776,6622,6471, 6322,6176,6032,5892,5754,5619,5488,5359,5234,5111,4992,4877,4764,4655,4550,4448, 4349,4254,4163,4075,3990,3910,3832,3759,3689,3622,3560,3500,3445,3393,3344,3299, 3257,3219,3184,3153,3124,3099,3078,3059,3044,3031,3022,3015,3011,3010,3012,3016, 3023,3033,3044,3058,3075,3093,3113,3136,3160,3186,3213,3242,3273,3305,3338,3372, 3408,3444,3481,3520,3558,3597,3637,3677,3718,3758,3799,3839,3880,3920,3960,4000, 4039,4077,4115,4152,4188,4224,4258,4291,4323,4354,4384,4412,4439,4464,4488,4510, 4530,4549,4566,4581,4594,4606,4615,4623,4628,4631,4633,4632,4629,4624,4617,4608, 4597,4583,4568,4550,4530,4508,4484,4458,4429,4399,4366,4332,4296,4257,4217,4175, 4130,4085,4037,3988,3937,3884,3830,3774,3717,3658,3598,3537,3475,3411,3347,3281, 3215,3147,3079,3010,2940,2870,2799,2728,2657,2585,2513,2440,2368,2296,2224,2151, 2080,2008,1937,1866,1796,1726,1657,1589,1521,1454,1389,1324,1260,1197,1135,1075, 1016,958,901,846,792,740,689,640,592,546,502,459,419,379,342,307,273,241,211,183, 156,132,109,88,69,52,37,24,12,2,-5,-11,-16,-18,-19,-18,-16,-11,-6,2,11,21,33,47,61, 77,95,113,133,154,176,200,224,249,275,302,329,358,387,416,447,477,508,540,572,604, 636,669,702,734,767,800,832,864,896,928,960,991,1021,1051,1081,1110,1138,1166,1193, 1219,1245,1270,1293,1316,1338,1359,1379,1398,1416,1433,1448,1463,1476,1488,1499, 1509,1518,1525,1531,1536,1540,1542,1543,1543,1542,1539,1536,1530,1524,1517,1508, 1498,1487,1475,1462,1447,1432,1415,1397,1379,1359,1338,1317,1294,1271,1247,1222, 1196,1170,1143,1115,1086,1057,1028,998,967,936,905,874,842,809,777,744,712,679,646, 613,581,548,515,483,450,418,387,355,324,293,263,233,204,175,147,119,92,66,40,15, -10,-33,-56,-78,-99,-120,-139,-158,-176,-193,-209,-224,-238,-252,-264,-275,-286, -295,-304,-311,-318,-324,-329,-332,-335,-337,-338,-338,-338,-336,-333,-330,-326, -321,-315,-308,-301,-293,-284,-274,-264,-253,-242,-229,-217,-203,-190,-175,-161, -145,-130,-114,-98,-81,-64,-47,-29,-11,6,24,42,61,79,97,115,134,152,170,188,206,223, 241,258,275,291,308,324,340,355,370,384,399,412,425,438,450,462,473,484,494,503, 512,521,529,536,542,548,553,558,562,566,568,570,572,573,573,573,572,570,568,565, 562,558,553,548,543,537,530,523,515,507,498,489,479,469,459,448,437,426,414,402, 389,377,364,351,337,324,310,296,282,268,254,239,225,211,196,182,168,153,139,125, 111,97,83,70,56,43,30,17,5,-7,-19,-31,-42,-53,-64,-75,-85,-94,-104,-113,-121,-129, -137,-144,-151,-158,-164,-170,-175,-180,-184,-188,-192,-195,-198,-200,-202,-203, -204,-205,-205,-204,-204,-203,-201,-199,-197,-195,-192,-188,-185,-181,-176,-172, -167,-162,-156,-151,-145,-139,-132,-126,-119,-112,-104,-97,-90,-82,-74,-66,-59,-51, -42,-34,-26,-18,-10,-2,7,15,23,31,39,47,54,62,70,77,85,92,99,106,112,119,125,131, 137,143,148,154,159,163,168,172,176,180,183,187,190,192,195,197,199,201,202,203, 204,205,205,205,205,204,203,202,201,200,198,196,194,192,189,186,183,180,177,173, 169,165,161,157,153,148,143,139,134,129,124,119,113,108,103,97,92,86,81,75,70,64, 59,53,48,42,37,32,26,21,16,11,6,1,-4,-9,-13,-18,-22,-26,-30,-34,-38,-42,-46,-49, -52,-55,-58,-61,-64,-66,-69,-71,-73,-74,-76,-78,-79,-80,-81,-82,-82,-83,-83,-83, -83,-83,-83,-82,-82,-81,-80,-79,-78,-77,-75,-74,-72,-70,-68,-66,-64,-62,-60,-57, -55,-52,-50,-47,-44,-42,-39,-36,-33,-30,-27,-24,-21,-18,-15,-12,-9,-6,-3,0,3,6,8, 11,14,17,20,22,25,27,30,32,35,37,39,41,43,45,47,49,50,52,54,55,56,58,59,60,61,61, 62,63,63,64,64,65,65,65,65,65,64,64,64,63,63,62,61,61,60,59,58,57,56,55,53,52,51, 49,48,46,45,43,41,40,38,36,35,33,31,29,28,26,24,22,20,19,17,15,13,11,10,8,6,5,3,1, 0,-2,-3,-5,-6,-8,-9,-10,-12,-13,-14,-15,-16,-17,-18,-19,-20,-21,-21,-22,-23,-23, -24,-24,-25,-25,-26,-26,-26,-26,-26,-26,-26,-26,-26,-26,-26,-26,-25,-25,-25,-24, -24,-23,-23,-22,-21,-21,-20,-19,-19,-18,-17,-16,-16,-15,-14,-13,-12,-11,-10,-10,-9, -8,-7,-6,-5,-4,-3,-2,-1,0,1,1,2,3,4,5,6,6,7,8,9,9,10,11,11,12,12,13,14,14,15,15, 15,16,16,16,17,17,17,17,18,18,18,18,18,18,18,18,18,18,18,18,18,17,17,17,17,16,16, 16,16,15,15,14,14,14,13,13,12,12,11,11,11,10,10,9,9,8,8,7,7,6,6,5,5,4,4,3,3,2,2,1, 1,0,0,-1,-1,-1,-2,-2,-3,-3,-3,-4,-4,-4,-4,-5,-5,-5,-5,-6,-6,-6,-6,-6,-6,-6,-7,-7, -7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-6,-6,-6,-6,-6,-6,-6,-6,-5,-5,-5,-5,-5,-4,-4,-4, -4,-4,-3,-3,-3,-3,-2,-2,-2,-2,-1,-1,-1,-1,-1,0,0,0,0,1,1,1,1,1,2,2,2,2,2,2,3,3,3, 3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3, 3,3,3,3,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,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,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, }, { 131072,131072,131072,131072,131072,131072,131072,131072,131072,131072,131072, 131072,131072,131072,131072,131072,131072,131072,131072,131072,131072,131072,131072, 131072,131072,131072,131072,131072,131072,131072,131072,131072,131071,131071,131071, 131071,131071,131071,131071,131071,131071,131071,131071,131071,131071,131071,131071, 131071,131071,131071,131071,131071,131071,131071,131071,131071,131071,131071,131071, 131071,131071,131071,131071,131071,131071,131071,131071,131071,131071,131071,131071, 131071,131071,131071,131071,131071,131071,131070,131070,131070,131070,131070,131070, 131070,131070,131070,131070,131070,131070,131070,131070,131070,131070,131069,131069, 131069,131069,131069,131069,131069,131069,131068,131068,131068,131068,131068,131068, 131067,131067,131067,131067,131066,131066,131066,131066,131065,131065,131064,131064, 131064,131063,131063,131062,131062,131061,131061,131060,131060,131059,131058,131058, 131057,131056,131055,131055,131054,131053,131052,131051,131050,131049,131047,131046, 131045,131044,131042,131041,131039,131038,131036,131034,131032,131031,131029,131027, 131024,131022,131020,131017,131015,131012,131009,131007,131004,131001,130997,130994, 130991,130987,130983,130979,130975,130971,130967,130962,130958,130953,130948,130942, 130937,130931,130926,130920,130913,130907,130900,130893,130886,130879,130871,130863, 130855,130847,130838,130829,130820,130810,130800,130790,130779,130768,130757,130745, 130733,130721,130708,130695,130682,130668,130654,130639,130624,130608,130592,130576, 130559,130541,130523,130505,130486,130466,130446,130426,130405,130383,130361,130338, 130314,130290,130265,130240,130214,130187,130160,130132,130103,130074,130044,130013, 129981,129949,129916,129882,129847,129812,129775,129738,129700,129661,129621,129581, 129539,129497,129453,129409,129364,129318,129270,129222,129173,129123,129071,129019, 128966,128911,128856,128799,128742,128683,128623,128562,128500,128436,128372,128306, 128239,128171,128101,128031,127959,127886,127811,127736,127659,127580,127501,127420, 127337,127254,127169,127082,126995,126906,126815,126723,126630,126535,126439,126341, 126242,126142,126040,125936,125831,125725,125617,125507,125396,125284,125170,125055, 124938,124819,124699,124577,124454,124329,124203,124075,123946,123815,123683,123549, 123413,123276,123137,122997,122855,122711,122566,122420,122272,122122,121971,121818, 121663,121507,121350,121191,121030,120868,120704,120539,120372,120204,120034,119863, 119690,119515,119339,119162,118983,118803,118621,118438,118253,118067,117879,117690, 117500,117308,117114,116920,116724,116526,116327,116127,115926,115723,115519,115313, 115106,114898,114689,114478,114266,114053,113839,113624,113407,113189,112970,112750, 112528,112306,112082,111858,111632,111405,111177,110948,110718,110487,110255,110022, 109788,109553,109317,109080,108842,108604,108364,108124,107883,107641,107398,107154, 106909,106664,106418,106171,105923,105675,105426,105176,104926,104675,104423,104171, 103918,103664,103410,103155,102899,102643,102387,102130,101872,101614,101356,101096, 100837,100577,100316,100055,99794,99532,99270,99007,98745,98481,98217,97953,97689, 97424,97159,96894,96628,96362,96096,95829,95563,95296,95028,94761,94493,94225,93957, 93688,93419,93151,92881,92612,92343,92073,91803,91534,91263,90993,90723,90452,90182, 89911,89640,89369,89098,88827,88556,88284,88013,87741,87470,87198,86926,86654,86382, 86110,85838,85566,85294,85022,84750,84477,84205,83933,83660,83388,83116,82843,82571, 82298,82026,81753,81481,81208,80936,80663,80391,80118,79846,79573,79301,79029,78756, 78484,78212,77939,77667,77395,77123,76851,76579,76307,76035,75763,75491,75220,74948, 74676,74405,74134,73862,73591,73320,73049,72778,72507,72237,71966,71696,71426,71156, 70886,70616,70346,70077,69807,69538,69269,69000,68732,68463,68195,67927,67659,67391, 67124,66857,66590,66323,66056,65790,65524,65258,64993,64728,64463,64198,63934,63670, 63406,63143,62880,62617,62354,62092,61830,61569,61308,61047,60787,60527,60267,60008, 59749,59491,59233,58975,58718,58461,58205,57949,57694,57439,57184,56930,56676,56423, 56171,55918,55667,55416,55165,54915,54665,54416,54167,53919,53671,53424,53178,52932, 52686,52442,52197,51954,51710,51468,51226,50984,50743,50503,50263,50024,49786,49548, 49310,49074,48838,48602,48367,48133,47899,47666,47434,47202,46971,46740,46510,46281, 46052,45824,45597,45370,45144,44918,44693,44469,44245,44022,43800,43578,43357,43137, 42917,42698,42479,42261,42044,41827,41612,41396,41181,40967,40754,40541,40329,40118, 39907,39696,39487,39278,39069,38862,38655,38448,38242,38037,37832,37628,37425,37222, 37020,36819,36618,36417,36218,36019,35820,35622,35425,35228,35032,34837,34642,34448, 34254,34061,33869,33677,33486,33295,33105,32916,32727,32539,32352,32164,31978,31792, 31607,31422,31238,31055,30872,30690,30508,30327,30147,29967,29787,29609,29431,29253, 29076,28900,28724,28549,28374,28200,28027,27854,27682,27510,27339,27169,26999,26830, 26661,26493,26326,26159,25993,25827,25662,25498,25334,25171,25008,24846,24685,24524, 24364,24204,24045,23887,23729,23572,23416,23260,23104,22950,22796,22642,22490,22337, 22186,22035,21884,21735,21586,21437,21289,21142,20996,20850,20704,20560,20416,20272, 20129,19987,19845,19705,19564,19425,19285,19147,19009,18872,18735,18599,18464,18329, 18195,18062,17929,17797,17665,17534,17404,17274,17145,17017,16889,16762,16635,16509, 16384,16259,16135,16011,15888,15766,15644,15523,15403,15283,15163,15044,14926,14809, 14692,14575,14460,14344,14230,14116,14002,13889,13777,13665,13554,13443,13333,13224, 13115,13007,12899,12792,12685,12579,12473,12368,12264,12160,12056,11953,11851,11749, 11648,11547,11447,11347,11248,11149,11051,10953,10856,10759,10663,10568,10472,10378, 10284,10190,10097,10004,9912,9820,9729,9638,9548,9458,9369,9280,9191,9104,9016,8929, 8843,8757,8671,8586,8501,8417,8333,8250,8167,8085,8003,7921,7840,7759,7679,7599, 7520,7441,7363,7285,7207,7130,7053,6977,6901,6826,6751,6676,6602,6528,6455,6382, 6310,6237,6166,6095,6024,5954,5884,5814,5745,5676,5608,5540,5473,5405,5339,5273, 5207,5141,5076,5012,4947,4884,4820,4757,4694,4632,4570,4509,4448,4387,4327,4267, 4208,4149,4090,4032,3974,3917,3859,3803,3746,3691,3635,3580,3525,3471,3417,3363, 3310,3257,3204,3152,3100,3049,2998,2947,2897,2847,2797,2748,2699,2651,2603,2555, 2507,2460,2414,2367,2321,2276,2230,2185,2141,2096,2052,2009,1966,1923,1880,1838, 1796,1754,1713,1672,1631,1591,1551,1511,1472,1432,1394,1355,1317,1279,1242,1204, 1167,1131,1094,1058,1023,987,952,917,882,848,814,780,747,713,680,648,615,583,551, 519,488,457,426,396,365,335,305,276,246,217,188,160,132,103,76,48,21,-7,-34,-60, -87,-113,-139,-165,-190,-216,-241,-266,-290,-315,-339,-363,-387,-410,-434,-457, -480,-502,-525,-547,-569,-591,-613,-634,-656,-677,-697,-718,-739,-759,-779,-799, -818,-838,-857,-876,-895,-914,-932,-951,-969,-987,-1005,-1022,-1040,-1057,-1074, -1091,-1107,-1124,-1140,-1156,-1172,-1188,-1203,-1219,-1234,-1249,-1264,-1279,-1293, -1308,-1322,-1336,-1350,-1363,-1377,-1390,-1403,-1416,-1429,-1442,-1454,-1467,-1479, -1491,-1503,-1514,-1526,-1537,-1548,-1559,-1570,-1581,-1592,-1602,-1613,-1623,-1633, -1643,-1652,-1662,-1671,-1680,-1690,-1699,-1707,-1716,-1725,-1733,-1741,-1750,-1758, -1765,-1773,-1781,-1788,-1796,-1803,-1810,-1817,-1824,-1830,-1837,-1843,-1850,-1856, -1862,-1868,-1874,-1880,-1885,-1891,-1896,-1902,-1907,-1912,-1917,-1922,-1926,-1931, -1935,-1940,-1944,-1948,-1952,-1956,-1960,-1964,-1968,-1971,-1975,-1978,-1982,-1985, -1988,-1991,-1994,-1997,-2000,-2002,-2005,-2007,-2010,-2012,-2014,-2017,-2019,-2021, -2022,-2024,-2026,-2028,-2029,-2031,-2032,-2034,-2035,-2036,-2037,-2038,-2039,-2040, -2041,-2042,-2042,-2043,-2044,-2044,-2045,-2045,-2045,-2045,-2046,-2046,-2046,-2046, -2046,-2045,-2045,-2045,-2044,-2044,-2044,-2043,-2042,-2042,-2041,-2040,-2039,-2039, -2038,-2037,-2035,-2034,-2033,-2032,-2031,-2029,-2028,-2026,-2025,-2023,-2022,-2020, -2018,-2017,-2015,-2013,-2011,-2009,-2007,-2005,-2003,-2001,-1999,-1996,-1994,-1992, -1989,-1987,-1984,-1982,-1979,-1977,-1974,-1971,-1969,-1966,-1963,-1960,-1957,-1954, -1951,-1948,-1945,-1942,-1939,-1936,-1933,-1929,-1926,-1923,-1919,-1916,-1913,-1909, -1906,-1902,-1899,-1895,-1891,-1888,-1884,-1880,-1877,-1873,-1869,-1865,-1861,-1857, -1853,-1849,-1845,-1841,-1837,-1833,-1829,-1825,-1821,-1817,-1813,-1809,-1804,-1800, -1796,-1791,-1787,-1783,-1778,-1774,-1770,-1765,-1761,-1756,-1752,-1747,-1743,-1738, -1734,-1729,-1725,-1720,-1716,-1711,-1706,-1702,-1697,-1692,-1688,-1683,-1678,-1673, -1669,-1664,-1659,-1654,-1650,-1645,-1640,-1635,-1630,-1626,-1621,-1616,-1611,-1606, -1601,-1596,-1591,-1586,-1582,-1577,-1572,-1567,-1562,-1557,-1552,-1547,-1542,-1537, -1532,-1527,-1522,-1517,-1512,-1507,-1502,-1497,-1492,-1487,-1482,-1477,-1472,-1467, -1462,-1457,-1452,-1447,-1442,-1437,-1432,-1427,-1422,-1417,-1412,-1407,-1402,-1397, -1392,-1386,-1381,-1376,-1371,-1366,-1361,-1356,-1351,-1346,-1341,-1336,-1331,-1326, -1321,-1316,-1311,-1306,-1301,-1296,-1291,-1286,-1281,-1276,-1271,-1266,-1261,-1256, -1251,-1246,-1241,-1236,-1231,-1226,-1221,-1216,-1211,-1206,-1201,-1196,-1191,-1186, -1181,-1176,-1171,-1166,-1161,-1156,-1152,-1147,-1142,-1137,-1132,-1127,-1122,-1117, -1112,-1108,-1103,-1098,-1093,-1088,-1083,-1079,-1074,-1069,-1064,-1060,-1055,-1050, -1045,-1040,-1036,-1031,-1026,-1022,-1017,-1012,-1008,-1003,-998,-994,-989,-984,-980, -975,-970,-966,-961,-957,-952,-947,-943,-938,-934,-929,-925,-920,-916,-911,-907, -902,-898,-894,-889,-885,-880,-876,-872,-867,-863,-859,-854,-850,-846,-841,-837, -833,-828,-824,-820,-816,-812,-807,-803,-799,-795,-791,-787,-782,-778,-774,-770, -766,-762,-758,-754,-750,-746,-742,-738,-734,-730,-726,-722,-718,-714,-710,-706, -702,-699,-695,-691,-687,-683,-679,-676,-672,-668,-664,-661,-657,-653,-649,-646, -642,-638,-635,-631,-627,-624,-620,-617,-613,-609,-606,-602,-599,-595,-592,-588, -585,-581,-578,-574,-571,-568,-564,-561,-557,-554,-551,-547,-544,-541,-537,-534, -531,-528,-524,-521,-518,-515,-511,-508,-505,-502,-499,-496,-492,-489,-486,-483, -480,-477,-474,-471,-468,-465,-462,-459,-456,-453,-450,-447,-444,-441,-438,-435, -433,-430,-427,-424,-421,-418,-416,-413,-410,-407,-405,-402,-399,-396,-394,-391, -388,-386,-383,-380,-378,-375,-373,-370,-367,-365,-362,-360,-357,-355,-352,-350, -347,-345,-342,-340,-337,-335,-333,-330,-328,-325,-323,-321,-318,-316,-314,-311, -309,-307,-305,-302,-300,-298,-296,-293,-291,-289,-287,-285,-282,-280,-278,-276, -274,-272,-270,-268,-266,-264,-261,-259,-257,-255,-253,-251,-249,-247,-246,-244, -242,-240,-238,-236,-234,-232,-230,-228,-226,-225,-223,-221,-219,-217,-216,-214, -212,-210,-209,-207,-205,-203,-202,-200,-198,-197,-195,-193,-192,-190,-188,-187, -185,-183,-182,-180,-179,-177,-176,-174,-172,-171,-169,-168,-166,-165,-163,-162, -161,-159,-158,-156,-155,-153,-152,-151,-149,-148,-146,-145,-144,-142,-141,-140, -138,-137,-136,-134,-133,-132,-131,-129,-128,-127,-126,-124,-123,-122,-121,-120, -118,-117,-116,-115,-114,-113,-111,-110,-109,-108,-107,-106,-105,-104,-103,-102, -100,-99,-98,-97,-96,-95,-94,-93,-92,-91,-90,-89,-88,-87,-86,-85,-85,-84,-83,-82, -81,-80,-79,-78,-77,-76,-75,-75,-74,-73,-72,-71,-70,-70,-69,-68,-67,-66,-66,-65, -64,-63,-62,-62,-61,-60,-59,-59,-58,-57,-56,-56,-55,-54,-54,-53,-52,-52,-51,-50, -50,-49,-48,-48,-47,-46,-46,-45,-45,-44,-43,-43,-42,-42,-41,-40,-40,-39,-39,-38, -38,-37,-36,-36,-35,-35,-34,-34,-33,-33,-32,-32,-31,-31,-30,-30,-29,-29,-29,-28, -28,-27,-27,-26,-26,-25,-25,-25,-24,-24,-23,-23,-23,-22,-22,-21,-21,-21,-20,-20, -20,-19,-19,-18,-18,-18,-17,-17,-17,-16,-16,-16,-15,-15,-15,-15,-14,-14,-14,-13, -13,-13,-13,-12,-12,-12,-11,-11,-11,-11,-10,-10,-10,-10,-9,-9,-9,-9,-9,-8,-8,-8,-8, -7,-7,-7,-7,-7,-6,-6,-6,-6,-6,-6,-5,-5,-5,-5,-5,-5,-4,-4,-4,-4,-4,-4,-4,-3,-3,-3, -3,-3,-3,-3,-3,-2,-2,-2,-2,-2,-2,-2,-2,-2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, 0,0,0,0,0,0,0,0,0, }, { 131072,131072,131072,131072,131072,131072,131072,131072,131072,131072,131072, 131072,131072,131072,131071,131071,131071,131071,131071,131071,131071,131071,131070, 131070,131070,131069,131069,131069,131068,131068,131067,131067,131066,131065,131065, 131064,131063,131062,131060,131059,131058,131056,131055,131053,131051,131049,131047, 131044,131041,131039,131035,131032,131029,131025,131021,131016,131011,131006,131001, 130995,130989,130982,130975,130967,130959,130950,130941,130931,130921,130910,130898, 130886,130872,130858,130844,130828,130811,130794,130775,130756,130735,130714,130691, 130666,130641,130614,130586,130557,130526,130493,130459,130423,130385,130346,130304, 130261,130215,130168,130118,130066,130012,129955,129896,129834,129769,129702,129632, 129559,129483,129403,129321,129235,129145,129052,128956,128855,128751,128642,128530, 128413,128292,128167,128037,127902,127762,127618,127468,127313,127153,126988,126816, 126639,126456,126268,126072,125871,125663,125449,125228,125000,124766,124524,124275, 124018,123754,123482,123202,122915,122619,122315,122003,121682,121352,121014,120666, 120310,119944,119569,119184,118790,118386,117972,117548,117114,116670,116215,115750, 115274,114787,114290,113781,113262,112731,112189,111636,111071,110495,109907,109308, 108696,108073,107438,106791,106132,105461,104778,104083,103375,102656,101924,101180, 100423,99655,98874,98081,97275,96458,95628,94786,93932,93066,92188,91298,90397,89483, 88558,87621,86673,85713,84742,83760,82766,81762,80748,79722,78687,77641,76585,75519, 74443,73359,72264,71161,70049,68929,67800,66663,65519,64367,63207,62041,60868,59689, 58503,57312,56116,54914,53708,52498,51283,50064,48843,47618,46391,45161,43930,42697, 41464,40229,38995,37760,36527,35294,34063,32833,31606,30382,29161,27944,26730,25521, 24317,23119,21926,20740,19560,18388,17223,16066,14918,13779,12649,11529,10420,9321, 8233,7157,6093,5042,4003,2978,1967,969,-14,-982,-1934,-2871,-3792,-4697,-5585,-6455, -7308,-8144,-8961,-9759,-10539,-11300,-12042,-12764,-13466,-14148,-14809,-15450, -16070,-16669,-17247,-17803,-18338,-18851,-19342,-19811,-20258,-20683,-21085,-21465, -21823,-22158,-22470,-22760,-23027,-23272,-23494,-23694,-23871,-24025,-24158,-24268, -24356,-24422,-24467,-24489,-24490,-24470,-24429,-24367,-24284,-24180,-24057,-23913, -23750,-23568,-23367,-23146,-22908,-22652,-22377,-22086,-21778,-21453,-21112,-20756, -20384,-19997,-19596,-19181,-18753,-18312,-17858,-17393,-16915,-16427,-15929,-15420, -14902,-14375,-13840,-13297,-12747,-12190,-11627,-11058,-10485,-9907,-9324,-8739, -8151,-7560,-6968,-6375,-5781,-5187,-4594,-4002,-3411,-2823,-2237,-1655,-1077,-502, 67,631,1189,1741,2286,2824,3354,3875,4388,4892,5387,5871,6345,6808,7261,7701,8130, 8547,8951,9342,9720,10085,10436,10773,11096,11404,11698,11977,12241,12489,12723, 12941,13143,13330,13500,13655,13795,13918,14025,14116,14192,14251,14295,14323,14335, 14331,14312,14278,14228,14164,14084,13990,13881,13757,13620,13469,13304,13126,12934, 12730,12514,12285,12045,11793,11530,11256,10972,10677,10373,10060,9738,9408,9070, 8724,8370,8011,7644,7273,6895,6513,6126,5736,5341,4944,4544,4142,3738,3333,2927, 2521,2115,1710,1306,903,502,104,-291,-683,-1072,-1456,-1836,-2211,-2580,-2944,-3301, -3653,-3997,-4334,-4663,-4985,-5299,-5603,-5900,-6187,-6464,-6732,-6990,-7238,-7476, -7703,-7919,-8124,-8318,-8501,-8673,-8833,-8981,-9117,-9242,-9355,-9455,-9544,-9620, -9685,-9737,-9777,-9806,-9822,-9826,-9819,-9799,-9768,-9726,-9672,-9606,-9530,-9442, -9344,-9234,-9115,-8985,-8845,-8696,-8536,-8368,-8190,-8004,-7809,-7606,-7395,-7177, -6951,-6719,-6479,-6233,-5982,-5725,-5462,-5195,-4923,-4647,-4367,-4083,-3797,-3507, -3216,-2922,-2627,-2331,-2034,-1736,-1438,-1141,-844,-548,-253,40,330,619,904,1187, 1466,1741,2012,2279,2541,2798,3050,3296,3536,3770,3998,4219,4434,4641,4841,5034, 5218,5395,5564,5725,5877,6021,6156,6282,6399,6508,6607,6697,6779,6851,6913,6967, 7011,7046,7071,7087,7095,7093,7081,7061,7032,6994,6948,6892,6829,6756,6676,6588, 6491,6387,6276,6157,6031,5898,5758,5612,5459,5301,5136,4966,4791,4611,4426,4237, 4043,3845,3644,3440,3232,3022,2809,2594,2377,2158,1938,1717,1495,1273,1051,829,607, 387,167,-52,-269,-484,-697,-907,-1115,-1320,-1522,-1720,-1915,-2106,-2293,-2475, -2653,-2826,-2994,-3157,-3315,-3467,-3614,-3754,-3889,-4018,-4140,-4256,-4366,-4469, -4565,-4655,-4738,-4814,-4882,-4944,-4999,-5047,-5088,-5122,-5148,-5168,-5180,-5186, -5184,-5176,-5161,-5138,-5110,-5074,-5032,-4984,-4929,-4868,-4801,-4728,-4649,-4564, -4474,-4378,-4278,-4172,-4061,-3946,-3826,-3702,-3574,-3442,-3306,-3167,-3024,-2879, -2730,-2579,-2426,-2270,-2113,-1954,-1793,-1631,-1468,-1304,-1140,-975,-810,-645, -481,-317,-154,8,169,329,486,643,796,948,1098,1244,1388,1529,1667,1802,1933,2060, 2184,2304,2419,2531,2638,2741,2839,2933,3022,3106,3185,3260,3329,3393,3452,3506, 3554,3597,3635,3668,3695,3718,3734,3746,3752,3753,3749,3740,3725,3706,3682,3652, 3618,3579,3536,3488,3435,3378,3317,3252,3183,3110,3033,2952,2868,2781,2691,2597, 2501,2402,2300,2196,2090,1981,1871,1759,1645,1530,1414,1297,1179,1060,941,821,701, 581,461,342,223,104,-13,-130,-245,-360,-472,-584,-693,-801,-907,-1010,-1111,-1210, -1307,-1401,-1492,-1580,-1665,-1747,-1827,-1902,-1975,-2044,-2110,-2172,-2231,-2286, -2337,-2385,-2429,-2469,-2505,-2538,-2567,-2591,-2612,-2629,-2642,-2652,-2657,-2659, -2657,-2651,-2641,-2628,-2612,-2591,-2567,-2540,-2509,-2475,-2438,-2398,-2354,-2308, -2259,-2207,-2152,-2095,-2035,-1973,-1908,-1842,-1773,-1703,-1630,-1556,-1480,-1403, -1325,-1245,-1164,-1083,-1000,-917,-833,-749,-664,-579,-495,-410,-325,-241,-157,-73, 10,92,173,253,332,410,487,562,636,708,779,848,915,980,1043,1104,1163,1219,1274, 1326,1376,1423,1467,1510,1549,1586,1621,1653,1682,1708,1732,1753,1771,1786,1799, 1809,1817,1821,1823,1823,1819,1813,1805,1794,1780,1764,1746,1725,1702,1677,1649, 1619,1588,1554,1518,1481,1441,1400,1358,1313,1268,1220,1172,1122,1071,1019,966,912, 858,802,746,690,633,575,518,460,402,344,286,228,170,113,56,0,-56,-111,-166,-219, -272,-324,-375,-425,-474,-521,-567,-612,-656,-698,-739,-779,-816,-852,-887,-920, -951,-981,-1008,-1034,-1059,-1081,-1102,-1120,-1137,-1152,-1166,-1177,-1186,-1194, -1200,-1204,-1206,-1206,-1205,-1201,-1196,-1190,-1181,-1171,-1159,-1146,-1131,-1115, -1097,-1078,-1057,-1035,-1012,-987,-961,-934,-906,-877,-847,-816,-784,-751,-718,-683, -649,-613,-577,-541,-504,-466,-429,-391,-353,-315,-277,-239,-201,-163,-125,-88,-50, -13,23,59,95,130,164,198,232,264,296,327,357,386,414,442,468,493,518,541,563,584, 604,623,641,657,673,687,700,712,722,731,739,746,752,757,760,762,763,763,761,759, 755,750,744,737,729,720,710,699,688,675,661,647,631,615,598,581,562,543,524,504, 483,462,441,419,396,374,351,327,304,280,256,232,208,184,160,136,113,89,65,42,18,-5, -27,-50,-72,-93,-114,-135,-156,-175,-195,-213,-232,-249,-266,-283,-299,-314,-328, -342,-355,-367,-379,-390,-400,-409,-418,-426,-433,-439,-445,-450,-454,-457,-460, -462,-463,-463,-463,-462,-460,-458,-454,-451,-446,-441,-435,-429,-422,-415,-407, -398,-389,-379,-369,-359,-348,-337,-325,-313,-300,-288,-275,-262,-248,-234,-221, -207,-192,-178,-164,-149,-135,-120,-106,-91,-77,-63,-48,-34,-20,-6,7,21,34,47,60,72, 85,96,108,119,130,141,151,161,170,179,188,196,204,211,218,225,231,236,241,246,250, 254,257,260,262,264,266,267,267,267,267,266,265,264,262,259,257,254,250,246,242, 238,233,228,222,217,211,205,198,191,184,177,170,163,155,147,139,131,123,115,107,99, 90,82,74,65,57,48,40,32,24,16,8,0,-8,-16,-23,-30,-38,-45,-52,-58,-65,-71,-77,-83, -88,-94,-99,-104,-109,-113,-117,-121,-125,-128,-131,-134,-137,-139,-141,-143,-145, -146,-147,-148,-148,-149,-149,-148,-148,-147,-146,-145,-144,-142,-140,-138,-136, -134,-131,-128,-126,-122,-119,-116,-112,-109,-105,-101,-97,-93,-88,-84,-80,-75,-71, -66,-62,-57,-53,-48,-43,-39,-34,-29,-25,-20,-16,-11,-7,-2,2,6,10,14,18,22,26,30,33, 37,40,43,47,50,52,55,58,60,62,65,67,68,70,72,73,74,76,77,77,78,79,79,79,79,79,79, 79,79,78,77,77,76,75,74,72,71,70,68,67,65,63,61,59,57,55,53,51,49,46,44,42,39,37, 34,32,30,27,25,22,20,17,15,12,10,7,5,3,0,-2,-4,-6,-8,-10,-12,-14,-16,-18,-20,-22, -23,-25,-26,-28,-29,-30,-32,-33,-34,-35,-36,-37,-37,-38,-39,-39,-40,-40,-40,-40, -40,-41,-41,-40,-40,-40,-40,-39,-39,-39,-38,-37,-37,-36,-35,-35,-34,-33,-32,-31, -30,-29,-28,-27,-26,-24,-23,-22,-21,-20,-18,-17,-16,-15,-13,-12,-11,-10,-8,-7,-6, -5,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,13,14,15,15,16,16,17,17,18,18,18,19, 19,19,19,19,20,20,20,20,20,19,19,19,19,19,19,18,18,18,17,17,17,16,16,15,15,14,14, 13,13,12,12,11,10,10,9,9,8,7,7,6,6,5,4,4,3,3,2,1,1,0,0,-1,-1,-2,-2,-3,-3,-4,-4,-4, -5,-5,-6,-6,-6,-7,-7,-7,-7,-8,-8,-8,-8,-8,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, -9,-9,-8,-8,-8,-8,-8,-8,-7,-7,-7,-7,-7,-6,-6,-6,-6,-5,-5,-5,-5,-4,-4,-4,-3,-3,-3, -3,-2,-2,-2,-2,-1,-1,-1,-1,0,0,0,0,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,4,4, 4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1, 1,1,1,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,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,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, }, { 131072,131072,131072,131072,131072,131072,131072,131072,131072,131072,131072, 131072,131072,131072,131072,131072,131072,131072,131072,131072,131072,131072,131072, 131072,131072,131072,131072,131072,131072,131072,131072,131072,131071,131071,131071, 131071,131071,131071,131071,131071,131071,131071,131071,131071,131071,131071,131071, 131071,131071,131071,131071,131071,131071,131071,131071,131071,131071,131071,131071, 131071,131071,131071,131071,131071,131071,131071,131070,131070,131070,131070,131070, 131070,131070,131070,131070,131070,131070,131069,131069,131069,131069,131069,131069, 131069,131068,131068,131068,131068,131067,131067,131067,131067,131066,131066,131066, 131065,131065,131064,131064,131063,131063,131062,131062,131061,131060,131060,131059, 131058,131057,131057,131056,131055,131054,131053,131052,131050,131049,131048,131046, 131045,131043,131042,131040,131038,131037,131035,131033,131030,131028,131026,131023, 131021,131018,131015,131012,131009,131006,131002,130999,130995,130991,130987,130983, 130978,130973,130969,130964,130958,130953,130947,130941,130935,130928,130922,130915, 130907,130900,130892,130884,130875,130866,130857,130848,130838,130828,130817,130806, 130794,130783,130770,130757,130744,130731,130716,130702,130687,130671,130655,130638, 130621,130603,130584,130565,130545,130525,130504,130482,130460,130436,130413,130388, 130363,130336,130310,130282,130253,130224,130193,130162,130130,130097,130063,130028, 129992,129955,129917,129878,129838,129797,129754,129711,129666,129621,129574,129525, 129476,129425,129373,129320,129265,129209,129152,129093,129033,128971,128908,128843, 128777,128710,128641,128570,128497,128423,128348,128270,128191,128111,128028,127944, 127858,127770,127680,127589,127495,127400,127303,127204,127103,127000,126895,126787, 126678,126567,126454,126339,126221,126102,125980,125856,125730,125602,125471,125338, 125203,125066,124927,124785,124641,124494,124345,124194,124041,123885,123726,123566, 123403,123237,123069,122899,122726,122551,122373,122193,122010,121825,121638,121447, 121255,121060,120862,120662,120460,120255,120047,119837,119625,119410,119192,118972, 118750,118525,118298,118068,117836,117601,117364,117125,116883,116639,116392,116143, 115892,115638,115382,115124,114863,114600,114335,114068,113798,113526,113252,112976, 112698,112417,112135,111850,111564,111275,110985,110692,110398,110101,109803,109503, 109201,108897,108591,108284,107975,107664,107352,107038,106722,106405,106086,105766, 105445,105122,104797,104472,104145,103816,103487,103156,102824,102491,102157,101822, 101485,101148,100810,100471,100131,99790,99448,99106,98762,98419,98074,97729,97383, 97037,96690,96343,95995,95647,95298,94949,94600,94250,93901,93551,93201,92850,92500, 92150,91799,91449,91098,90748,90397,90047,89697,89347,88998,88648,88299,87950,87601, 87253,86905,86557,86210,85863,85517,85171,84826,84481,84137,83793,83450,83107,82765, 82424,82083,81743,81404,81065,80727,80390,80053,79717,79382,79048,78714,78382,78050, 77718,77388,77058,76730,76402,76074,75748,75423,75098,74774,74451,74129,73808,73487, 73168,72849,72531,72214,71897,71582,71267,70953,70640,70328,70017,69706,69397,69088, 68779,68472,68165,67859,67554,67250,66946,66643,66341,66040,65739,65439,65140,64841, 64543,64246,63949,63653,63358,63063,62769,62475,62182,61890,61598,61307,61017,60727, 60437,60148,59860,59572,59284,58998,58711,58425,58140,57855,57571,57287,57003,56720, 56437,56155,55873,55592,55311,55031,54751,54471,54192,53913,53635,53357,53079,52802, 52525,52249,51973,51697,51422,51148,50873,50599,50326,50053,49780,49508,49236,48964, 48694,48423,48153,47883,47614,47345,47077,46809,46542,46275,46009,45743,45477,45213, 44948,44685,44421,44159,43897,43635,43374,43114,42854,42595,42336,42079,41821,41565, 41309,41054,40799,40545,40292,40040,39788,39537,39287,39038,38789,38541,38294,38048, 37803,37558,37315,37072,36830,36589,36348,36109,35871,35633,35397,35161,34927,34693, 34460,34228,33998,33768,33539,33311,33084,32859,32634,32410,32187,31966,31745,31526, 31307,31090,30873,30658,30444,30230,30018,29807,29597,29388,29181,28974,28768,28564, 28360,28158,27957,27756,27557,27359,27162,26966,26771,26578,26385,26193,26003,25813, 25624,25437,25250,25065,24881,24697,24515,24333,24153,23974,23795,23618,23441,23266, 23091,22917,22745,22573,22402,22232,22063,21895,21728,21561,21396,21231,21067,20904, 20742,20581,20420,20260,20101,19943,19786,19629,19473,19318,19164,19010,18857,18705, 18553,18402,18252,18103,17954,17806,17658,17511,17365,17220,17075,16930,16787,16644, 16501,16359,16218,16077,15937,15797,15658,15520,15382,15245,15108,14972,14836,14701, 14566,14432,14299,14166,14033,13902,13770,13639,13509,13379,13250,13121,12993,12865, 12738,12611,12485,12360,12235,12110,11986,11863,11740,11617,11495,11374,11253,11133, 11013,10894,10776,10658,10540,10423,10307,10191,10076,9961,9847,9734,9621,9509,9397, 9286,9176,9066,8957,8848,8740,8633,8526,8420,8315,8210,8105,8002,7899,7797,7695, 7594,7494,7394,7295,7197,7099,7003,6906,6811,6716,6622,6528,6435,6343,6251,6160, 6070,5981,5892,5804,5717,5630,5544,5458,5374,5290,5206,5124,5042,4961,4880,4800, 4721,4642,4564,4487,4410,4334,4259,4184,4110,4037,3964,3892,3821,3750,3679,3610, 3541,3472,3405,3337,3271,3205,3139,3074,3010,2946,2883,2820,2758,2696,2635,2575, 2515,2455,2396,2338,2280,2222,2165,2109,2052,1997,1942,1887,1833,1779,1725,1672, 1620,1568,1516,1464,1413,1363,1313,1263,1213,1164,1116,1067,1019,972,924,877,831, 784,738,693,647,602,558,513,469,425,382,339,296,253,211,169,127,85,44,3,-38,-78, -118,-158,-198,-237,-276,-315,-353,-392,-430,-467,-505,-542,-579,-616,-652,-688, -724,-760,-795,-831,-865,-900,-934,-968,-1002,-1036,-1069,-1102,-1135,-1167,-1199, -1231,-1263,-1294,-1325,-1356,-1386,-1417,-1447,-1476,-1506,-1535,-1563,-1592,-1620, -1648,-1676,-1703,-1730,-1757,-1783,-1809,-1835,-1860,-1886,-1910,-1935,-1959,-1983, -2007,-2030,-2053,-2076,-2099,-2121,-2143,-2164,-2185,-2206,-2227,-2247,-2267,-2287, -2306,-2325,-2344,-2363,-2381,-2399,-2416,-2434,-2451,-2468,-2484,-2500,-2516,-2532, -2547,-2562,-2577,-2591,-2605,-2619,-2633,-2646,-2659,-2672,-2685,-2697,-2709,-2721, -2733,-2744,-2755,-2766,-2777,-2787,-2798,-2807,-2817,-2827,-2836,-2845,-2854,-2863, -2871,-2880,-2888,-2896,-2903,-2911,-2918,-2925,-2932,-2939,-2946,-2952,-2959,-2965, -2971,-2977,-2982,-2988,-2993,-2999,-3004,-3009,-3014,-3018,-3023,-3027,-3032,-3036, -3040,-3044,-3048,-3052,-3056,-3059,-3063,-3066,-3069,-3073,-3076,-3079,-3082,-3084, -3087,-3090,-3092,-3095,-3097,-3099,-3101,-3104,-3106,-3108,-3109,-3111,-3113,-3115, -3116,-3118,-3119,-3120,-3122,-3123,-3124,-3125,-3126,-3127,-3128,-3128,-3129,-3130, -3130,-3131,-3131,-3131,-3132,-3132,-3132,-3132,-3132,-3131,-3131,-3131,-3130,-3130, -3129,-3129,-3128,-3127,-3126,-3125,-3124,-3123,-3122,-3121,-3119,-3118,-3116,-3114, -3113,-3111,-3109,-3107,-3105,-3103,-3100,-3098,-3095,-3093,-3090,-3088,-3085,-3082, -3079,-3076,-3072,-3069,-3066,-3062,-3059,-3055,-3051,-3048,-3044,-3040,-3036,-3032, -3027,-3023,-3019,-3014,-3009,-3005,-3000,-2995,-2990,-2985,-2980,-2975,-2970,-2964, -2959,-2954,-2948,-2942,-2937,-2931,-2925,-2919,-2913,-2907,-2901,-2895,-2889,-2883, -2876,-2870,-2864,-2857,-2850,-2844,-2837,-2831,-2824,-2817,-2810,-2803,-2796,-2789, -2782,-2775,-2768,-2761,-2754,-2747,-2740,-2732,-2725,-2718,-2710,-2703,-2696,-2688, -2681,-2674,-2666,-2659,-2651,-2644,-2636,-2629,-2621,-2613,-2606,-2598,-2591,-2583, -2576,-2568,-2560,-2553,-2545,-2537,-2530,-2522,-2515,-2507,-2499,-2492,-2484,-2476, -2469,-2461,-2454,-2446,-2438,-2431,-2423,-2416,-2408,-2400,-2393,-2385,-2378,-2370, -2362,-2355,-2347,-2340,-2332,-2325,-2317,-2310,-2302,-2294,-2287,-2279,-2272,-2264, -2257,-2249,-2242,-2234,-2227,-2219,-2212,-2204,-2197,-2189,-2182,-2174,-2167,-2159, -2152,-2144,-2137,-2129,-2122,-2114,-2107,-2099,-2092,-2084,-2077,-2069,-2062,-2054, -2047,-2039,-2032,-2024,-2016,-2009,-2001,-1994,-1986,-1979,-1971,-1964,-1956,-1948, -1941,-1933,-1926,-1918,-1911,-1903,-1895,-1888,-1880,-1873,-1865,-1857,-1850,-1842, -1835,-1827,-1819,-1812,-1804,-1797,-1789,-1781,-1774,-1766,-1758,-1751,-1743,-1736, -1728,-1720,-1713,-1705,-1698,-1690,-1683,-1675,-1667,-1660,-1652,-1645,-1637,-1630, -1622,-1615,-1607,-1600,-1592,-1585,-1577,-1570,-1563,-1555,-1548,-1540,-1533,-1526, -1518,-1511,-1504,-1496,-1489,-1482,-1475,-1467,-1460,-1453,-1446,-1439,-1431,-1424, -1417,-1410,-1403,-1396,-1389,-1382,-1375,-1368,-1361,-1354,-1347,-1341,-1334,-1327, -1320,-1313,-1307,-1300,-1293,-1286,-1280,-1273,-1266,-1260,-1253,-1247,-1240,-1234, -1227,-1221,-1214,-1208,-1202,-1195,-1189,-1183,-1176,-1170,-1164,-1157,-1151,-1145, -1139,-1133,-1127,-1121,-1114,-1108,-1102,-1096,-1090,-1084,-1078,-1073,-1067,-1061, -1055,-1049,-1043,-1037,-1032,-1026,-1020,-1014,-1009,-1003,-997,-992,-986,-980,-975, -969,-964,-958,-953,-947,-942,-936,-931,-925,-920,-914,-909,-904,-898,-893,-888, -882,-877,-872,-867,-861,-856,-851,-846,-841,-836,-830,-825,-820,-815,-810,-805, -800,-795,-790,-785,-780,-775,-770,-765,-760,-756,-751,-746,-741,-736,-731,-727, -722,-717,-712,-708,-703,-698,-694,-689,-685,-680,-675,-671,-666,-662,-657,-653, -648,-644,-639,-635,-631,-626,-622,-618,-613,-609,-605,-601,-596,-592,-588,-584, -580,-575,-571,-567,-563,-559,-555,-551,-547,-543,-539,-535,-531,-527,-524,-520, -516,-512,-508,-504,-501,-497,-493,-490,-486,-482,-479,-475,-471,-468,-464,-461, -457,-454,-450,-447,-443,-440,-436,-433,-430,-426,-423,-420,-416,-413,-410,-407, -403,-400,-397,-394,-391,-387,-384,-381,-378,-375,-372,-369,-366,-363,-360,-357, -354,-351,-348,-345,-342,-340,-337,-334,-331,-328,-325,-323,-320,-317,-314,-312, -309,-306,-304,-301,-298,-296,-293,-291,-288,-285,-283,-280,-278,-275,-273,-270, -268,-265,-263,-260,-258,-256,-253,-251,-249,-246,-244,-242,-239,-237,-235,-232, -230,-228,-226,-224,-221,-219,-217,-215,-213,-211,-209,-206,-204,-202,-200,-198, -196,-194,-192,-190,-188,-186,-184,-182,-180,-178,-176,-175,-173,-171,-169,-167, -165,-163,-162,-160,-158,-156,-155,-153,-151,-149,-148,-146,-144,-143,-141,-139, -138,-136,-134,-133,-131,-130,-128,-127,-125,-123,-122,-120,-119,-117,-116,-115, -113,-112,-110,-109,-107,-106,-105,-103,-102,-101,-99,-98,-97,-95,-94,-93,-91,-90, -89,-88,-86,-85,-84,-83,-82,-80,-79,-78,-77,-76,-75,-73,-72,-71,-70,-69,-68,-67, -66,-65,-64,-63,-62,-61,-60,-59,-58,-57,-56,-55,-54,-53,-52,-51,-50,-49,-48,-47, -46,-46,-45,-44,-43,-42,-41,-40,-40,-39,-38,-37,-36,-36,-35,-34,-33,-33,-32,-31, -30,-30,-29,-28,-27,-27,-26,-25,-25,-24,-23,-23,-22,-21,-21,-20,-19,-19,-18,-18, -17,-16,-16,-15,-15,-14,-14,-13,-12,-12,-11,-11,-10,-10,-9,-9,-8,-8,-7,-7,-6,-6,-5, -5,-5,-4,-4,-3,-3,-2,-2,-2,-1,-1,0,0,0,1,1,2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,6,7,7,7, 8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11,11,12,12,12,12,12,13,13,13,13,13,13,14, 14,14,14,14,14,14,15,15,15,15,15,15,15,15,15,16,16,16,16,16,16,16,16,16,16,16,17, 17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17, 17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,16,16,16,16, 16,16,16,16,16,16,16,16,16,16,15,15,15,15,15,15,15,15,15,15,15,14,14,14,14,14,14, 14,14,14,14,13,13,13,13,13,13,13,13,12,12,12,12,12,12,12,12,11,11,11,11,11,11,11, 10,10,10,10,10,10,10,9,9,9,9,9,9,9,8,8,8,8,8,8,7,7,7,7,7,7,7,6,6,6,6,6,6,5,5,5,5, 5,5,4,4,4,4,4,4,3,3,3,3,3,2,2,2,2,2,2,1,1,1,1,1,1,0,0,0, }, { 131072,131072,131072,131072,131072,131072,131072,131072,131072,131071,131071, 131071,131071,131071,131070,131070,131070,131069,131069,131069,131068,131067,131067, 131066,131065,131064,131063,131062,131061,131060,131058,131056,131055,131053,131051, 131048,131046,131043,131040,131037,131034,131030,131026,131022,131017,131012,131007, 131001,130995,130988,130981,130974,130965,130957,130948,130938,130927,130916,130904, 130892,130878,130864,130849,130833,130816,130798,130779,130759,130737,130715,130691, 130666,130640,130612,130583,130552,130519,130485,130449,130412,130372,130330,130287, 130241,130193,130143,130090,130035,129978,129918,129855,129789,129720,129649,129574, 129496,129415,129330,129242,129150,129054,128954,128851,128743,128631,128515,128394, 128269,128139,128004,127864,127718,127568,127412,127251,127084,126911,126732,126547, 126356,126158,125954,125743,125525,125300,125068,124829,124582,124328,124065,123795, 123517,123231,122936,122632,122320,121999,121669,121330,120982,120624,120256,119879, 119492,119095,118687,118269,117841,117402,116952,116492,116020,115538,115043,114538, 114021,113492,112952,112400,111836,111259,110671,110070,109457,108831,108193,107543, 106879,106203,105514,104813,104098,103370,102630,101876,101110,100330,99537,98732, 97913,97081,96236,95378,94508,93624,92727,91818,90896,89961,89013,88053,87081,86096, 85099,84090,83069,82036,80991,79935,78868,77789,76700,75599,74488,73367,72235,71094, 69943,68782,67613,66434,65246,64051,62847,61635,60416,59190,57957,56717,55471,54220, 52963,51701,50434,49163,47888,46609,45327,44043,42756,41467,40177,38885,37594,36301, 35010,33719,32429,31141,29855,28571,27291,26014,24741,23473,22210,20952,19700,18455, 17217,15986,14763,13548,12343,11147,9961,8785,7620,6466,5325,4196,3079,1976,886,-189, -1249,-2295,-3325,-4339,-5336,-6317,-7280,-8226,-9154,-10063,-10953,-11824,-12675, -13507,-14318,-15108,-15878,-16626,-17353,-18058,-18741,-19401,-20038,-20653,-21245, -21813,-22358,-22879,-23376,-23849,-24298,-24723,-25123,-25499,-25850,-26177,-26479, -26756,-27009,-27236,-27440,-27618,-27772,-27901,-28006,-28087,-28143,-28175,-28184, -28168,-28129,-28067,-27981,-27873,-27741,-27588,-27412,-27214,-26995,-26755,-26494, -26212,-25910,-25589,-25248,-24888,-24510,-24114,-23700,-23269,-22821,-22357,-21878, -21383,-20874,-20351,-19814,-19264,-18702,-18127,-17542,-16946,-16339,-15724,-15099, -14466,-13825,-13177,-12523,-11863,-11198,-10528,-9854,-9177,-8498,-7816,-7133,-6449, -5765,-5082,-4400,-3719,-3041,-2366,-1694,-1027,-364,293,944,1589,2227,2856,3478, 4091,4695,5288,5872,6444,7006,7555,8093,8617,9129,9627,10111,10580,11036,11476, 11900,12309,12702,13079,13439,13782,14108,14417,14708,14982,15237,15475,15695,15896, 16079,16244,16390,16518,16627,16718,16790,16844,16880,16897,16896,16877,16840,16785, 16712,16622,16515,16390,16249,16092,15918,15728,15522,15301,15065,14814,14549,14270, 13977,13671,13352,13021,12678,12324,11958,11582,11196,10800,10395,9982,9560,9131, 8695,8252,7803,7348,6889,6425,5957,5486,5013,4536,4059,3580,3100,2620,2141,1663, 1186,711,239,-230,-696,-1157,-1614,-2065,-2512,-2952,-3385,-3812,-4231,-4642,-5045, -5439,-5825,-6200,-6566,-6922,-7267,-7601,-7924,-8236,-8535,-8823,-9098,-9360,-9610, -9847,-10070,-10280,-10476,-10659,-10828,-10982,-11123,-11249,-11361,-11459,-11543, -11612,-11667,-11707,-11734,-11746,-11744,-11727,-11697,-11653,-11596,-11524,-11440, -11342,-11231,-11107,-10971,-10822,-10661,-10489,-10304,-10109,-9903,-9686,-9458, -9221,-8974,-8717,-8452,-8178,-7897,-7607,-7310,-7006,-6695,-6378,-6056,-5728,-5396, -5059,-4718,-4373,-4026,-3675,-3323,-2969,-2613,-2257,-1900,-1543,-1187,-831,-477, -125,225,573,917,1258,1595,1928,2256,2580,2898,3210,3516,3815,4108,4394,4672,4942, 5205,5459,5705,5942,6169,6388,6596,6796,6985,7164,7333,7491,7639,7776,7902,8018, 8122,8215,8298,8369,8429,8478,8516,8542,8558,8562,8556,8538,8510,8471,8421,8361, 8291,8210,8119,8019,7909,7789,7660,7522,7376,7220,7057,6885,6706,6519,6325,6125, 5917,5703,5484,5258,5028,4792,4552,4307,4059,3806,3551,3293,3032,2769,2504,2237, 1970,1701,1433,1164,895,627,360,95,-169,-431,-690,-947,-1201,-1452,-1699,-1942, -2181,-2415,-2644,-2869,-3088,-3302,-3510,-3711,-3907,-4096,-4278,-4453,-4622,-4783, -4936,-5082,-5220,-5351,-5473,-5587,-5693,-5791,-5880,-5961,-6033,-6097,-6152,-6199, -6237,-6267,-6287,-6300,-6304,-6299,-6286,-6265,-6235,-6198,-6152,-6098,-6037,-5968, -5891,-5807,-5716,-5618,-5513,-5401,-5283,-5158,-5027,-4891,-4749,-4601,-4449,-4291, -4129,-3962,-3791,-3617,-3438,-3256,-3072,-2884,-2693,-2501,-2306,-2110,-1912,-1713, -1513,-1313,-1112,-911,-710,-510,-311,-112,85,281,475,666,856,1043,1227,1408,1586, 1761,1931,2098,2261,2420,2574,2723,2868,3007,3142,3271,3395,3513,3626,3732,3833, 3928,4016,4099,4175,4245,4309,4366,4417,4461,4499,4530,4555,4573,4585,4591,4590, 4583,4569,4550,4524,4492,4454,4410,4361,4306,4245,4179,4108,4031,3949,3863,3772, 3676,3576,3472,3364,3252,3136,3016,2894,2768,2640,2509,2375,2239,2101,1961,1820, 1677,1533,1387,1241,1095,948,801,654,507,360,215,70,-74,-217,-358,-498,-636,-771, -905,-1036,-1165,-1291,-1415,-1535,-1652,-1766,-1877,-1984,-2088,-2187,-2283,-2375, -2463,-2546,-2625,-2700,-2771,-2837,-2898,-2955,-3008,-3055,-3098,-3136,-3170,-3198, -3222,-3241,-3256,-3265,-3270,-3271,-3266,-3258,-3244,-3226,-3204,-3177,-3146,-3111, -3071,-3028,-2981,-2930,-2875,-2816,-2754,-2689,-2620,-2548,-2473,-2396,-2315,-2232, -2146,-2058,-1968,-1876,-1782,-1686,-1589,-1490,-1390,-1289,-1187,-1084,-980,-876, -771,-667,-562,-457,-353,-249,-145,-43,59,160,260,358,456,551,645,738,828,916,1003, 1087,1169,1248,1325,1399,1471,1540,1606,1669,1729,1786,1840,1891,1938,1983,2024, 2062,2096,2128,2155,2180,2201,2219,2233,2244,2252,2256,2257,2255,2249,2240,2228, 2213,2195,2174,2150,2123,2093,2060,2025,1987,1946,1903,1858,1810,1761,1709,1655, 1599,1541,1482,1421,1359,1295,1230,1164,1096,1028,959,889,818,747,676,604,532,460, 388,316,245,173,102,32,-38,-107,-175,-242,-308,-374,-437,-500,-561,-621,-680,-736, -792,-845,-897,-947,-995,-1041,-1085,-1127,-1166,-1204,-1240,-1273,-1304,-1333, -1360,-1385,-1407,-1427,-1444,-1459,-1472,-1483,-1491,-1497,-1501,-1502,-1501,-1498, -1493,-1486,-1476,-1465,-1451,-1435,-1418,-1398,-1377,-1353,-1328,-1302,-1273,-1243, -1212,-1179,-1144,-1108,-1071,-1033,-994,-953,-912,-869,-826,-782,-737,-692,-646, -600,-553,-506,-459,-411,-363,-316,-268,-221,-173,-126,-79,-33,13,58,103,147,191, 233,275,316,356,396,434,471,507,541,575,607,638,668,696,723,749,773,796,817,837, 855,872,887,901,913,924,933,941,947,952,955,957,957,956,953,949,943,936,928,919, 908,896,882,868,852,835,818,799,779,758,736,713,690,666,641,615,589,562,534,506, 478,449,420,390,361,331,301,270,240,210,180,150,120,90,60,31,2,-27,-55,-83,-110, -137,-164,-190,-215,-239,-263,-286,-309,-331,-352,-372,-391,-410,-427,-444,-460, -475,-489,-502,-514,-525,-536,-545,-553,-561,-567,-572,-577,-580,-583,-585,-585, -585,-584,-582,-579,-575,-571,-565,-559,-552,-544,-536,-526,-516,-506,-494,-482, -470,-457,-443,-429,-414,-399,-383,-367,-351,-334,-317,-300,-282,-265,-247,-229, -210,-192,-174,-155,-137,-119,-100,-82,-64,-46,-28,-11,7,24,41,58,74,90,105,121,135, 150,164,177,190,203,215,227,238,248,258,268,277,285,293,300,307,313,318,323,327, 331,334,337,339,340,341,341,341,340,339,337,334,331,328,324,320,315,310,304,298, 292,285,277,270,262,254,245,237,227,218,209,199,189,179,169,159,148,138,127,116, 106,95,84,73,63,52,42,31,21,11,0,-10,-19,-29,-38,-48,-57,-66,-74,-83,-91,-98,-106, -113,-120,-127,-133,-139,-145,-150,-155,-160,-165,-169,-172,-176,-179,-182,-184, -186,-188,-189,-190,-191,-191,-191,-191,-190,-190,-188,-187,-185,-183,-181,-178, -175,-172,-169,-165,-162,-158,-154,-149,-145,-140,-135,-130,-125,-119,-114,-109, -103,-97,-91,-86,-80,-74,-68,-62,-56,-50,-44,-38,-32,-26,-20,-14,-8,-3,3,8,14,19,24, 29,34,39,43,48,52,56,60,64,68,72,75,78,81,84,86,89,91,93,95,97,98,99,100,101,102, 103,103,103,103,103,103,102,101,100,99,98,97,96,94,92,90,88,86,84,82,79,77,74,71, 69,66,63,60,57,54,51,48,44,41,38,35,32,28,25,22,19,16,12,9,6,3,0,-3,-6,-9,-11,-14, -17,-19,-22,-24,-26,-29,-31,-33,-35,-37,-38,-40,-42,-43,-45,-46,-47,-48,-49,-50, -51,-51,-52,-52,-53,-53,-53,-53,-53,-53,-53,-53,-52,-52,-51,-50,-50,-49,-48,-47, -46,-45,-44,-43,-42,-40,-39,-38,-36,-35,-33,-32,-30,-29,-27,-25,-24,-22,-20,-19, -17,-15,-14,-12,-11,-9,-7,-6,-4,-3,-1,1,2,3,5,6,8,9,10,11,13,14,15,16,17,18,19,20, 20,21,22,22,23,24,24,24,25,25,25,26,26,26,26,26,26,26,26,26,25,25,25,25,24,24,23, 23,22,22,21,21,20,19,19,18,17,17,16,15,14,14,13,12,11,10,10,9,8,7,6,6,5,4,3,2,2,1, 0,-1,-1,-2,-3,-3,-4,-5,-5,-6,-6,-7,-7,-8,-8,-9,-9,-9,-10,-10,-10,-11,-11,-11,-11, -12,-12,-12,-12,-12,-12,-12,-12,-12,-12,-12,-12,-12,-12,-11,-11,-11,-11,-11,-10, -10,-10,-10,-9,-9,-9,-8,-8,-8,-7,-7,-7,-6,-6,-6,-5,-5,-4,-4,-4,-3,-3,-3,-2,-2,-2, -1,-1,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,1,1,1,1,1,1,0,0,0,0,0,0,0, -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2, -2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, }, }; MilkyTracker-1.02.00/resources/reference/Amiga_resampler/modguide/interpolate.txt000066400000000000000000000570671324432207300302160ustar00rootroot00000000000000Dear Amiga mod playback software author, you are receiving this note because your software is implementing playback capabilities for an important format, the Amiga protracker 1.x-3.x mod format. As you probably are aware, most of these modules were composed on the Amiga computer for playback on Amiga system. The Amiga hardware playback system is unlike the PC environment, and needs some special care if authentic-seeming Amiga mod playback is desired. Typical playback software for the various sample tracker formats is architected roughly like this: [ Player routine ] --> [ Mixer and resampler ] --> Output The player routine component produces information about the samples, their sampling frequencies and volume levels (and filtering, panning, etc. depending on format) to the mixer and resampler component, which uses the player routine's instructions to generate the final output by resampling the sample stream from memory and mixing it to physical output channels. I'm going to focus exclusively to the Mixer and resampler component here. A typical implementation of the resampler uses linear interpolation, or some higher-order polynomial interpolation, splines, or even sinc-based "theoretically correct" resampling with some 8-tap FIR or more. Unfortunately, all of them miss the mark as far as Amiga is concerned. For typical mod player, the most accurate emulation of Amiga output occurs when *no* interpolation is used at all. However, there seems to be nothing special about the mixing -- simply adding the resampled channels together suffices. Why the Amiga is different? --------------------------- To understand what goes on with the Amiga sound chip, Paula, is to understand that Paula does no interpolation of any kind. Paula's output is strictly a pulse wave, produced on 3546895 Hz frequency, which is the Paula clock rate for PAL systems. The Amiga period values, typically valued somewhere between 120 and 800, count Paula ticks. For instance, a period value of 400 means that Paula waits 400 ticks holding the output constant, and then changes to the next sample. To simulate this perfectly, we would produce an output sample stream at that 3.55 MHz rate, one sample per tick, and then simply hold the output constant while counting down to zero from the period value, then switch to next sample, reset period clock back to original value, and so on. This stream would be very accurate representation of the Paula's output. Aliasing in Paula output ------------------------ It is also worth it to understand that playing back a sample from Paula replaces the original waveform with its smoothly undulating shapes with nothing but hard-edged pulses. This will have an impact to the sound, of course, and is called aliasing distortion. It's called aliasing, because copies of the original sound's frequency spectrum repeat throughout the entire audible part of audio spectrum and beyond, theoretically up to infinity. This may surprise those who believe that because Amiga's maximum sampling rate is some 28867 Hz, the maximum frequency produced by Amiga is threrefore limited to 14.5 kHz or so. However, this is merely the highest frequency that may be produced without aliasing. In addition, some misguided people have tried to run their mod players at 28867 Hz mixing frequency based on some kind of confused idea of what the mixing rate means for Amiga. This won't work either. The analog filters -- more complications ---------------------------------------- After leaving the chip, the sound enters a 6 dB/oct resistor+capacitor (RC) low-pass filter tuned at approximately 5 kHz. I will call this component "fixed filter" in this document. The purpose of this filter is probably to remove some of that aliasing which is inherent in the pulse synthesis. Additionally, it is possible to engage a low-pass 12 dB/oct Butterworth filter tuned at approximately 3.2 kHz by turning the Amiga power LED brighter with a special protracker command. I will call this component "LED filter". These filters should probably be understood as reconstruction filters, because their purpose is to attempt to "reconstruct" the original smoothly undulating waveform after a pulse-based version of it has been generated by some D/A converter. However, proper reconstruction filters should probably feature steeper cut-offs than just 6 or 12 dB, and they should be dynamic; their tuning should follow the sampling rate, as it is the sampling rate that decides where the first aliased frequency will occur. (As an example, some Atari ST models have a DAC chip which is fed through DMA at any of the four possible sampling rates, and the analog reconstruction filter's cutoff also is chosen based on the sampling rate.) Regardless, this is the hand we have been dealt with, and in order to accurately simulate Amiga 500 audio playback, we thus need to emulate these two filters in addition of producing the right kind of output stream from Paula emulation. No interpolation -- use resampling! ----------------------------------- To properly resample audio, we need to achieve two things, often done simultaneously: * remove all components in the audio stream above some selected frequency, usually about 20 kHz. * decimate the signal by discarding samples until we obtain output at the correct rate. For 44.1 kHz output we need to discard approximately 79 of every 80 samples. Decimation can be safely done only after the lowpass step has been completed. If decimation is done without lowpass filtering, some extra aliasing shall be introduced to the remaining audio. What happens is that all frequencies in the spectrum now alias in the audible range, making the ultrasonic sounds produced by the pulse-wave synthesis to appear as additional noise in the mod playback. Fortunately, the previous paragraph contains the answer to the problem. It is possible to make simulated Paula's output consist of "bandlimited steps", or BLEPs as they are called. The output is done by simulating Paula at 3.55 MHz clock rate and replacing the hard edges of Paula's pulses by BLEPs, which are carefully constructed in such a fashion to not contain those difficult frequencies above 21 kHz or so. Because the input stream does not contain frequencies near or above nyquist frequency of the final sampling rate, all we have to do is to build an abstract version of Paula's output signal that we can evalute to real sample whenever it is needed. The abstract version consists two parts: the output level of "genuine" Paula with hard-edged pulses, and the states of various BLEPs which which are then used to correct the "hard edges" of Paula's waveform to the smooth curves of the BLEPs instead. The mixing of one blep thus has the following procedure, roughly: * adjust the output level of Paula to the new value. * start a new blep, and scale it in such a fashion that its amplitude is the difference between new output level and the old level. If we ask the synthesis function to produce a sample at this moment, it would still report the old level. But as we clock Paula forward, and ask again, the blep gradually changes the output level from the old value to the new value. At some point we are done with the BLEP, and then the output is simply constant at the new output level. This leaves the filters, but they are easy. Because the output is done by mixing bleps, we can implement the analog filters in the bleps themselves, by filtering them with digital models of the analog filters to produce versions of BLEPs that have treble components reduced to match Amiga 500's operation with LED filter on and off. This may seem somewhat miraculous, but this is how it works. The implementation ------------------ We need to compute the blep tables. Firstly we need a function that contains all the frequencies in the world. One such function is called the delta function. We define it as follows: delta(x) = 0 if x != 0 delta(x) = 1 if x = 0. If we low-pass filter the delta, it morphs into a sinc function. sinc function is a special one, it has all the frequencies from 0 to some given cutoff value. The cutoff is determined by the rate the sinc is oscillating in. f(x, rate) = sin(x * pi / rate) / (x * pi / rate) if x != 0 f(0, rate) = 1 if x = 0 With rate = 1.0 the sinc does no filtering at all, and becomes a delta function in effect. If we plot the sinc function by asking the value of sinc at each integer value, it is zero everywhere except 1 at 0. To do no filtering at all is the same as having the cutoff at exactly half of the sampling rate. If the sinc is to remove everything above, say, 21 kHz, rate = 3.55e6 / 21e3 / 2. An ideal sinc filter extends from negative infinity to the positive infinity. Because a practical implementation is needed, the sinc function must be truncated at some point. The truncation affects the width of the stopband of the sinc function -- short functions begin filtering earlier and are not as steeply filtering as long filters. I've found that 2048 point sinc functions are sufficient to perform filtering for Paula, so we'd sample the sinc function from f(-1024, rate) to f(1023, rate) and thus yield 2048 values. Because 2048 point function is quite short, there is an issue at the edges, where the sinc is still oscillating. Some windowing function is needed to smooth the sinc properly at edges to zero. The Hann window, or the raised cosine window is the simplest. It is defined as hann(x, length) = 0.5 - 0.5 * cos(x / length * 2 * pi). For this, the length would be 2048, and the values of x would go from 0 to 2047. The result should look like a symmetric "water-drop" with few small side lobes. If you have some plotting software, you can see the sinc function at this point. gnuplot suffices, you can type something like: set xrange [-1024:1023] plot sin(x * pi / 84) / (x * pi / 84) * (0.5 - 0.5 * cos((x + 1024) / 2048 * 2 * pi)) The sinc table is final mixing frequency independent ----------------------------------------------------- The only things that go into calculating the sinc table are the Paula clock frequency and the frequency of the cutoff. As long as calls to obtaining output occur at rates greater or equal to 44.1 kHz, the table works. With rates below about 20 kHz, the blep table itself will produce aliasing. The function is sampled at Paula clock rate, which is constant; it therefore also has a fixed duration in seconds. For 2048 points, it's 2048 paula ticks or roughly 0.6 milliseconds. From this it follows that at 44.1 kHz sampling frequency, about 25 samples of the table make it into the output. The table must however be longer than merely 25 samples because depending on the phase where the blep starts, ie. paula pulse occurs, it's always different values of the table that need to be chosen, so all of them become used at some point. (However, in truth the table does not need to be that precise, it could well be sampled at a lower frequency without compromising output quality noticeably. Perhaps only about 16 different phase values are needed, but now it has 80 (as many phases as there are clocks between samples).) Filtering the sinc ------------------ The minimum-phase reconstruction is implemented in cepstral domain in the included program. My knowledge of the operations involved is too limited to explain why or how it works, but after we do this, the filter shape changes in such a way that as much as possible of the filter occurs "early on" and the filter "settles" for longer period after an initial large transition. So, before minimum phase reconstruction, the filter is a symmetric waterdrop-like wave, with pre- and postringing at the peak, but after the reconstruction the peak moves to the start of filter, and the filter displays decaying oscillation for most of its duration. The upshot of the reconstruction is that it allows our IIR filters the longest period to settle after the initial excitation by the large part of the peak, thus allowing us to truncate them earlier. There has been some talk that minimum-phase reconstructions are in general better audio filters than linear-phase filters (which are symmetric by the midpoint), because they do not display the preringing that is perceptible to ear if it occurs for too long. The increased postringing is not an issue, as it often occurs in nature, and thus the ear "expects" it. However, the issue is made complicated by the fact that phase relationships are by definition modified by minimum-phase reconstructions. At any case, this choice makes no audible difference in this case, because in both cases the ringing is tuned to occur at frequencies above 20 kHz, and the phase delays are almost linear across the entire audible band. The fixed filter ---------------- We should apply the IIR filters to the sinc function before proceeding to build the band-limited step. The 6 dB/oct filter is an IIR filter that is computed according to the following formula: output(n) = b0 * input(n) + (1 - b0) * output(n - 1) that is, the output is a linear combination of input and the value of output in the last iteration. The b0 determines the cutoff value and is computed as follows: omega = 2 * pi * 5000 / sampling_rate b0 = 1 / (1 + 1 / omega) As a reminder, the cutoff frequency would be 5.0 kHz and sampling rate is 3.55 MHz because we will operate the blep that is "sampled" at 3.55 MHz. The rest of the problem here is just applying the previous formula to filtering the BLEP. Amiga 1200 current leakage simulation ------------------------------------- It seems that Amiga 1200 output response attenuated by some 0.2 - 0.3 dB near 20 kHz. This would seem to be due to the LED filter even though it isn't enabled, because this effect does not manifest when turning the LED filter on. It is difficult to be sure, though, because of limited resolution and the extreme attenuation, noise floor gets very close to signal. Regardless, the effect can be modelled with a 32 kHz lowpass RC filter. A word of caution ----------------- To correctly apply the filter, we first need to extend the sinc we computed by imagining that it is preceded by, say, 10 000 constant values of the first value of the filter, and these are run through the filter to ensure that the filter is properly settled for the base level of the blep. This is especially important if the first value of the sinc is not zero, or if the filter is reused between computations for any reason. Additionally, to validate that the length of the blep is sufficient, it would be helpful to examine how much the IIR filter oscillates at the end of the table by computing the value of filter(last_output_value) - last_output_value If the filter has not yet damped, the difference will not be zero, and depending of the oscillation magnitude, artifacts could be introduced. The LED filter -------------- If no LED filtering emulation is desired, the next BLEP can be left uncomputed. To simulate the LED filter, we clone the previous sinc function for applying the LED filter on. The model for LED filter requires application of a biquad filter that simulates the 2nd order Butterwoth lowpass filter. The formula for biquad is as follows: output(n) = b0 * input(n) + b1 * input(n-1) + b2 * input(n-2) - a1 * output(n - 1) - a2 * output(n - 2) That is, two samples of past input history and two samples of past output history and the current sample are required. The coefficients are derived using bilinear transform in the Python source; feel free to look at the gory details for computing b0, b1, b2, a1 and a2 from there. So, anyway, we should go and filter our copy of the previous sinc function with the biquad formula, and then proceed to figuring out how to convert the filtered sincs to bandlimited steps. The step-function ----------------- Step is our representation of Paula's pulses. We could define it as follows: f(x) = 0 if x < 0 f(x) = 1 if x >= 0 The band-limited step --------------------- Convolution in DSP is the application of a filter in the time domain. It is basically like computing a dot product between two vectors. The other "vector" is the tabularised version of the convolution function, and the other is the sample data around the point we wish to compute convolution at. We would be talking about 2048-dimensional vector here, if vectors were otherwise an appropriate metaphor. In order to bandlimit a step, we can calculate a representation of the step sample stream. We start with the entire sample buffer at zero and calculate the convolution. It is all zero as expected. Then we introduce the edge, or the first sample of the step into the sample buffer. The convolution's value is now equal to the first value in the convolution function. As more samples are introduced, the value of convolution is the sum of the values in the convolution function over the area of the step function. Thus, the bandlimited step is in effect just a numeric integral of the convolution function. We should take care to scale the step accordingly. If you are dealing with 16-bit sample data, you would probably want to scale the step in such a fashion that it starts at, say, 0 and ends at 65536. Or, as I often prefer, it starts at -65536 and ends at 0. This is just to make the blep evaluation code simple. The downside with starting with negative number is that the sign takes 1 byte to encode in the resultant C source. For the example program, the blep resolution is 17 bits and the blep runs from a positive value to zero. Sample code in C (but for mono output) -------------------------------------- /* 131072 to 0, 2048 entries */ #define BLEP_SCALE 17 #define BLEP_SIZE 2048 /* the step function */ int32_t sine_integral[BLEP_SIZE] = { precomputed table }; /* the instantenous value of Paula output */ static int16_t global_output_level; /* count of simultaneous bleps to keep track of */ static unsigned int active_bleps; /* the structure that holds data of bleps */ typedef struct { int16_t level; int16_t age; } blep_state_t; /* place to keep our bleps in. MAX_BLEPS should be defined as a BLEP_SIZE / MINIMUM_EVENT_INTERVAL. For Paula, minimum event interval could be even 1, but it makes sense to limit it to some higher value such as 16. */ static blep_state_t blepstate[MAX_BLEPS]; /* return output simulated as series of bleps */ int16_t output_sample(int filter_table) { int i; int32_t output; output = global_output_level << BLEP_SCALE; for (i = 0; i < active_bleps; i += 1) output -= winsinc_integral[filter_table][blepstate[i].age] * blepstate[i].level; output >>= BLEP_SCALE; if (output < -32768) output = -32768; else if (output > 32767) output = 32767; return output; } In the code where new Paula samples get added to the system, you would so something like this: function input_sample(int16_t sample) { if (sample != global_output_level) { /* Start a new blep: level is the difference, age (or phase) is 0 clocks. */ if (active_bleps > MAX_BLEPS - 1) { fprintf(stderr, "warning: active blep list truncated!\n"); active_bleps = MAX_BLEPS - 1; } /* Make room for new blep */ memmove(&blepstate[1], &blepstate[0], sizeof(blepstate[0]) * active_bleps); /* Update state to account for the new blep */ active_bleps += 1; blepstate[0].age = 0; blepstate[0].level = sample - global_output_level; global_output_level = sample; } } And while no events occur, you would call the clock() function to advance the bleps. void clock(unsigned int cycles) { for (i = 0; i < active_bleps; i += 1) { blepstate[i].age += cycles; if (blepstate[i].age >= BLEP_SIZE) { active_bleps = i; break; } } } This code is not very optimized in that it constantly keeps blepstate as a sorted list. It is possible to implement it more efficiently, for instance by keeping occurence times instead of ages, but that complicates the output sample function. The right optimization of the code might depend on whether periods are small or large compared to sampling intervals. For Paula, periods are typically much larger than sampling intervals, so code like this might be better tradeoff. For modern computers, it takes quite little time, so I leave the optimizing for people who are that way inclined. Typical length of the blep list can be short, only 5-6 entries if the sample rates are low or occur conveniently otherwise. At the maximum, Paula is constantly producing pulse waves but it's probably sensible to limit maximum period to 124 unless Paula DMA fetch starvation is simulated. A typical sequence of events would look like this. Assuming that we sample output at exactly 80 paula clock ticks apart, and that playback period is, say 140, we'd do calls like this: input_sample(samplebuf[0]); clock(80); *output++ = output_sample(); clock(60); input_sample(samplebuf[1]); clock(20); *output++ = output_sample(); clock(80); *output++ = output_sample(); clock(40); input_Sample(samplebuf[2]); ... Results and analysis -------------------- I have hi-fi recordings of Amiga 500 and 1200 playing Sainahi Circles with both LED filter on and off. This analysis was largerly based on the sampling work by pyksy on #amigaexotic at IRCnet. Big thanks to pyksy for his work! In addition, Melkor (kohina board) sent me a hi-fi sampling of his Amiga 4000 playing Sainahi Circles. The results are summarised as number of png pictures that display the simulated and real responses side-by-side and their residual (difference) spectrums. The units are in Hz and dB. There is a constant offset that follows from the fact that the hi-fi samplings used 32-bit floating point samples, whose value range is different from the integer-coded PCM data, yielding the largest part of the difference. The rest is explained by the different recording levels used between setups. The files called a{1200,500,4000}_{on,off}.png shows the simulated response of UADE and real Amiga superimposed. comb{1200,500,4000}_{on,off}.png show the difference between two in dB units. These are the same pictures as before, but with the spectra substracted, allowing for more precise evaluation of the differences between simulated and real output. We can see that UADE and Amiga produce same features closely, thus essentially validating the model used for output synthesis. We can observe a good cutoff starting around 20 kHz and quickly extinguishing response by approximately 23 kHz. This should yield satisfactory results for all sampling frequencies above and including 44.1 kHz. However, I personally recommend 48 kHz as default output frequency because it works without resampling on majority of cards, while 44.1 kHz output often may need a resampling step on either software or hardware. For LED off cases, the residual spectrum is largerly just noise. There is, however a small 0.3 dB boost around 0 to 3 kHz. This can be seen on Amiga 500, but not on Amiga 1200. In both Amiga 500 and Amiga 1200, the LED filter also displayed this boost, and it was compensated for by adjusting the Butterworth filter with a small resonance term. Despite adjustments, the LED filter case is not perfect. The residual spectrum is roughly flat to 3 kHz, thanks to manually fitting the filter, but after that there is some extra attenuation which is then compensated by something else on the analog filter. For Amiga 500 case, the simulation hits noise floor and can not yield anything meaningful above 15 kHz, but those measurements also show the same general pattern. Overall, I think the model yields accuracy to about 0.5 dB for all cases, which should be sufficient for all practical purposes. Especially the Amiga 1200 case seems well modelled. Author ------ Antti S. Lankila feel free to send feedback, comments and spam. MilkyTracker-1.02.00/resources/reference/Amiga_resampler/modguide/note-guide-unfinished.txt000066400000000000000000000001621324432207300320420ustar00rootroot00000000000000the guide has not yet been finished. I plan to extend it with some pictures that hopefully illuminate the issues. MilkyTracker-1.02.00/resources/reference/Amiga_resampler/modguide/results/000077500000000000000000000000001324432207300266115ustar00rootroot00000000000000MilkyTracker-1.02.00/resources/reference/Amiga_resampler/modguide/results/a1200_off.png000066400000000000000000000113031324432207300306720ustar00rootroot00000000000000PNG  IHDR,)PLTE@ @@```@0``@@@@`````@```` ``` @@ @` ```@ ```@@@``` @ @``@@`pT&sUIDATx݋v*@aY'ʑ'n՟||| p46识t`cx([;,9˓}WUˮV%JN̿irۿ]&W~`[u#u RVs/@$oӹIMTʿn:7&9E_m īҼo_k.` 2׳78>Aݿ: B ''mFG\'~0?A:v'`\ rrn(6p@?b9a%))zQxzafmm"6 v6Ϝ̙vi`HR7;yi36!Dd=NYrz_ʎzRBB(^-^J]6s_jZ#IpcN/Ԥup/bףNwП*r/z?e;sWL\t6XgwX\)"cߗvlg`"wX뮂95j_kMwL݋܉C`Na? t64DoL}r>ɸ:+LnԿr-@OsDN썹?fNn}~c7q`8]8mâ8O.?؟wF$3s2R#熮n37Лz_ݿ׀/cX__/= 6r3%'olb'aBǿK;k\$z̾Q)B0)xO^tI弋8:9)f?M/2xuu7FdO\nGr+Gz#"@"@"@"@"@"@}!BBB_ 8s;@@AEEEEu` dE U!2?lN(`|⎼Y0Y nLMav# ` Q,@T0b5>bQQQQQQQQQQQUvRN(EEEEEEEEUhBQQQQQu@"@"@"@"@"@  BBBBT9VJ !ER  DU y0J DU8^Q7d)^:`̐My/.~Y !׋5"GkQWNjGWtVD/i*W_|8{'@AykeIˈ p^Κ!Q5ܞ۶`lFW5@ p 1m #UˊՃ8(u4+gVz99j Y滿^aa}oz á5 𐖶k;cƀZ"z8iw ~ap#Qu5 TY53huxh6MxJu9-Xj1.+6-XG8HCxr(dY!R D=?@ H_F)^S@A뙭]:zU6kȈ=i~ɣ79baYhv+G.&zzQyBee;o(PkO;Kkkf^N)h?d:˩{a7p079|DDFAkxGLo봎e}t8{u6s88:*qI4sCls=,`ٳ`&g=;M^cUjqp&-@{쏶Ez ;d|\{ŷ,q-\'F}#@Ҳ^^Zԥ2B9jN7@޲"+0'HfHDΡF`/G pKFkg/O͓?Y;3:aۦp}[$ï!_u3p[OQC~ҙ4v]۶'7jFV饼eC=m}n:rKoxZvQ9/A(uW:|^սpIZ@Ycv0~j"/`4etxIad "wvȰ/ go~E``M卓[xNdr*=˪} gC $"I?洶'Ct  F*۳I|'{]} v",uo{:PQrW!#|eCn@w#-߿z|&o2#-idv4-Mu~m|f3O*$L6vz9&csNAoo@m~ֽl'3O:mvLT֝JR#6򃷽cB/t WU]E!?H^"# Y ~. zӱrw 7ϙ9̃7CƳhpvzzRW{ϔhGVmV8C`,˴#~wve+-UC]f¯9Ӻ+aY==wT8}{u8$R"8erq_8*y p\ > be $@ldVH 6Z DI&@8"6N̅ / < yR{uJiā\z|{@'̨ 4|sskCHS}lɘ&;@ ⦬˝h/X`"@$+ۍB08"GG ҕ3wؚ~v#@d+<}#8"YۜsaxÌ8bZ0 5PR~_yf&͗ZB!KU+c!dfd:^Ggn "B\ H(!qρ%twEwRq ,qBBֽ 7 D D d*qBBB֝  D d(qBVy $@@UZ  u dH@D-Y% !@"@"@*(QBBBBBV~m x82P1=|*ekf5 .dȊhFEEEES :((((((((  D D D D D deބ1QQY Z @"@J-BVb6 $@4BT   d%Hh!!w~u@/**##Cp"@R\w:9`͐U({>F@52 FSd!%~jU/W $@4FE(H!@Dg @Ȋ- ?ыc7Ly;(((((((((((((((((((((((((((((((((((>XףU?x}>6gs>OT}ֹZK4kuaHe}6Qd4czO[w6%`o>2ѦӶ=|?ǭ'w&%n;&I'vA=> op{i;hMǼeg?$ dfaYp;$; tb.K\pRӕ0*&gLIENDB`MilkyTracker-1.02.00/resources/reference/Amiga_resampler/modguide/results/a1200_on.png000066400000000000000000000112721324432207300305410ustar00rootroot00000000000000PNG  IHDR,)PLTE@ @@```@0``@@@@`````@```` ``` @@ @` ```@ ```@@@``` @ @``@@`pT&sLIDATx <iQTtҝh|d`:yG=#rsymfmHmi, a8ۘWAFv_މ_)VÔ;?e3L0 բL-s]u_(Y^id@11h"/o@0mz[Xo}9^U>`!AhUlI`~n38V{ɸ"<ڇֳ!&d:^p(_OW7az/hK'@ ޼wxJkX L5Ovd`WQ᭝bեǢqTuT~gȯm7UN ꭗl ؗ=0(8Kz">[g"x Wt$¯[F_H"GݟX dw@R0 =6kтA@K!ZvL~E_CwOZ2GKtoVJ 7He^= P"'/ RcW($a ) =z֩f%S~Zl1dWb툮"tjAQDA@AQ ^8AQ 4jB <AQDA@Am( papQD0X>L( czAӗz24dgxyd`ȵ V NXI@@@%bs08UDp 4- SǧaGzDiYO{%iZ. " JMǦ #ӾA@Bt !pd8. y ҇ J (H<*! Kgrh$bD@7h/iF?. ?"jUE( ZP~t0&1TOӝ6/<`t(u!O @@k1D[@Ew Jb` һ9oP/aIz?U1*۴ŠɅ;~YJc`˃ CBo17nٳnݣhen ^\0vHR'!W``wt_@&c H!^L@0H \b8Gcmw`' n J pZ& ̀Z2C Hi\mp e2 Ut M 3b:ax FfQ@% 1[8bpi;0 fRh((uL:gDIp%/ L~0( 荫ooH,t ŘX>1ڻ"@f09d@@" APtP#:!#P(z``}냀>XA `6AC*ܪX 0[U MY"X LBEAf .!1B)_Q&#! K7AROX  `97@AA0[6X(Lt60XqxY܈20Z_ק_Ai|u]N.>!_ǸT0&ݰ(ؚA'Vq;s:[P: `=\C͜#`=ȧu4C|&"`=:s]9-lhqFOxw1V伴k+' @O[-a(x+̙zht! S 8*T "<Ǝ'ZAѦ4bcb[3vaA6#JsqNf@IKp#܎D $h?AMӷ/xtqތ1} $Z3g:*G uk!CG^Z=뱜8A͠T $ CRLQhؑP> D@m B[A@v/KF~y7t fW D@8v6̼93?Vo$l?UnJ@@a]jiON Oa.U =ta B-̽:|>" ͠5)3av|f?mYؗe #<>9" GgP" KF5By\MJ^`ܫdi~jzYN+?]^EC¯wQ~[_a ""Bu~ ( ( ( (&>,}3[u{>ZK-ffL|nS l]Mk{,\Y , U 0UĮ&>KtבVRVЦt Vt|"W>=KtϏZ.zɺ">.ɦ}7H|b}]>w\O_3r,8vdwH3~bOs.u5?A^L[*]*ȑ)ڲ,IENDB`MilkyTracker-1.02.00/resources/reference/Amiga_resampler/modguide/results/a4000_off.png000066400000000000000000000114631324432207300307020ustar00rootroot00000000000000PNG  IHDR,)PLTE@ @@```@0``@@@@`````@```` ``` @@ @` ```@ ```@@@``` @ @``@@`pT&sIDATx흉v AnL2 sTA `0Y]fP +ljC@cN 3@&:^ T~HU'ś6A{C-S? 7U!8}#`$}ΞIn |\)A@A;my QpLp%5i@x<p֦ݸއvs_w`cvž;L&b?7 #cQ<tsDç뽰)|vwV2|_rS)6%Za0CfvV/,L7-/zSP 8piMA\l~0?hyVt/LX _.|ϑa|] lv>  qiBw >{ `$`w!ez'Mx\Vw.=~ʰ`N=w"`GMp\nBؙǧ]7fw[ B ( RP@F!QD)2'( ( JI (%4 dDA@AQDA@ B* JьB QDA@A DVDa`A@H%AOeLT2OInWf? < OB" $O`T I 1-0 B*ER)+ '(@H@HAQD)-@H@HAQ O@@k(co Y %{gO@b ܠwxEU=B =he4D N D lOB "f?!^PymA@xC@⾪e  2b +LAUa8o 8-vO@`y]eQ N]%Tp&L4ABhE\3fԤGpL4S ZC!픭mtZ1zL01 GA H/  ʧ0p!C:W 2muչ̘m־2w%*-t6xR7F5(h~W9)+3Q;'K }q)s99[ ` yfҀ{@7|_-m݂ J+F$J3 Ҍ'# ']ҐA@!]В[W0WyZq/TAl%<8M h۬7(eGiL@r밥AiJi)? '6L[( ,K[: Ҫn\0Ύ _ C@{ч65I_@DHB l^+JO.ʜH#nrYPt$NIOm ~..T%I5g¡ ] 5_B!ЧެIg>m}Ö`` ` 2 {|J0kegb`u MśxS yVg,׾I4cAs%2c 8M^w(+35AX +R `Ep6~$DJdik34 1 x! —` E: 9 9X< @ 0}#6x^?HAkTGJXC ,Yz'4 =\j&soBjw@tZ7aU/1ðS0SBV5r1Y `j1#fA#}3@< 3J%;'#g[%3 ?RJ$Fr6˒$b@O)*-v,d0'l]D7 ?PJ(wn Y+f [}!Ve׽+&2 # p)YI n5ٕLDߴh ^ ,.5-o1Bl 8mqF׭MZ@69I0Ql+"`g:A":!,uˆ v\Z#`(d0ݢ5y :AɇD*u}FAYlJ-Cz;-md2|%"(pEUDaX9_!BPh6Fn' ԋ )]]pXȠ͟-42âW6eB ^c^EE_>8.*X$"Dw$fB@LTE@ؐ!~OzGz+P@]a!!nD@j Bp j "2B(o}w5lR/c>&INqpp7 8GзwR6}DYWoN1z&92 3ZW d Q A5v. MF.Pv@ ո(33iW˯pK" \-ዀ (# AQDy$> *XB-*VBj){Brm0Bk"Qʵ B _z B{zg! 䠖u@9liIdy8(!!B CDy# ۼWm|29QuTT]1.i*߬U{V;̏Vpzcip nSzٽnjUZs}|V_O>է&9oV8 hZ,j7 "Mp,`SO&yc$]|SyˁjZZ+=͠IENDB`MilkyTracker-1.02.00/resources/reference/Amiga_resampler/modguide/results/a500_off.png000066400000000000000000000117301324432207300306200ustar00rootroot00000000000000PNG  IHDR,)PLTE@ @@```@0``@@@@`````@```` ``` @@ @` ```@ ```@@@``` @ @``@@`pT&sjIDATx *<|Ĵ(rޛi?nPE@9wup< >OgP\I0p?$`< ~t|awA]xMJ||p#lI嫢S ng>I  3uT7\GL\a5y=wiS!_肟 p*IJV9`exy(e3ɳc8jXX/&7݋O1COSdAIpI>k,!~JEvzQ1OVN HX_F!]&_DǪVNA$5bWNJW(OM0:!Y Lܳ*YQNw2< 2JmK׳ޙ)73jaMr&x?/t#`VkDaH2.t2  r?wX6*[';lr~oblrV98GE'uw}4cџ_7 š(&+W~3yޅM"$fwC& |.`&?$:-ҩhL7P/zh/["ĽɠQtݙmGZ[SDlb/(.1)?m&>}ҋBC|4&&;==k `R'w"]_>A~LvuV <nFOAIKwSDSz1Ǜ.|] .,vu6JC~>- q888wL{:}.AQDA@Ab AQDA@AQDA@AQDA@Ab AQDA@AQDA@AQ2 $ v@un  f;ѩYPC3Z lfLӸLp:H\.1P3ot# I.5K"h0Epijin1o3t"`F 'N\ߡ ];)_r!.3C@:msUO.R-Io%D:n1gC9zprUO7N-:&h+jETpTe R41aS蠼Bd 8nڒ?6ÈB"2m#^9xn p^sG@/ ˘b?S4%=jV?7MXQK``}}5LX+@ `6AE `⁑ `" p=0Fi+1V EY"kI ] LCX <뀀'(꣫g($BmlSv:'^rq$2X,49cpF@;#C%f^({g\Цj(v`V>Q"`QO vYy;Jk3kc9,nD,&Q56A/GJ7\O|Ц#N؉/binP޴)c:l2m#Yi綾hLh=!hW8k;ovW2RնIDA>FzŊXoiZ۽.+r `XXk"`!Hi0~;A:0* DW( na{o56șiKؚ"'c|l= `OFEh0'݁ J[Q >i\;>D"}W@fl"-F>Q,eFN &-X옽0?7v>I5qG9g:B8k֌3Kwwh~4ugv ." }Ux;?#W p^^ݴ8&{մ~ﲥ$cA_IpKJI6N>˜<珰P~*UuA@0`8UKbԷA@pQ?Q? D@" 6!(# ]j~ !f=a7Ok HpE z;Jo\7h?B# Hb*M:l| nzi$ >.o&> ZJU;s(~p KInj96 f6ɉrTD[=(JmH飀Ы BS@/ [8%+k D@8%ZΊ>BI*r&7I  7TLOgߜpN,kB!Z)," 0pPrF?v׬ 5 B)t"/ ~0 *<;qC@]!m Bߵk6E8:}*:. \侀gn07mdF[jSɛA~F@̝9D8\pQ ?>>Sp{MÇGT@! ᖁQrDWo BSA!== 'Y` d3R <A@ K9ng !6wХjnQ*F@xc@g<4 @ RM?n;tJ-3ݡWj&GxyR]:yi$0$h315I0$ 8ቁTc* <097+ ]p@2 r@R21 r@r (PQ֙" A< ,Y" AQd18 (dPQDA@庁/ e^᪁p@f [\zF=.(&&h{" hqQ[*)LjQE?˿]{o7<,/'.KpEި.^`3v_n׶ }ܭmUuo5!3x;{d6׵lwŹGvogy\`} ۣHqpm'Uzng? "{|ſ宲; 8η];v9U&|?x;/âNβܓ ܶ[Z08>ݿp1XG98m6@w_s?,oMFbt$x9纝/)_\<ٞzsZp7oMÙ~#Oxb'ǫv.&bv?#b>N?/^{zqzu,']J @dAEEEEEEEEEEE"@ cQQQQQQQQE.Nx~ON D=\>,g p ~4H&j%dJs@s ⡘O/Nx&ɆhSQQQ@@@DH`oy  "R #@J`'e'@DJbX^QOܲy>\&@omd6H GzoW/ N}wn+=+8aDЗQY Hy={4y vb Z8^-a Mᅏ~qt i Spg <g{1C>bd|k b=@$WJ- dl De5f(5@%& p#hXiBBy26!Js P C` Th99Fʩ0 WO{X9((/> ZtAF$@g XGtcޢ )F3 VM֋!!!)^QQjUF "@*%@J C` Z>6_:SJx2Xr9z pAu!@*/@V9\] i&8{6 V'Xd}|%Xd,^2!KWv #@*=@ C`!lXd,Z2KV~STX  %!` 2US;EUG3 ,O]*\d,OLAq/>D4'p _PgJ!07 nߜ9&d r}!4+!@'Rx< ,CJ<k 32Ե!3 p *iUVA*+iWwh)Pϯ@*@0Z 2XNZ8@ pW eh2@ˋj[`߳4ฯ哌4i'i_}CKXZ,zK0k+@@*s aԀ-!Jj9@k 3*Ue5Ji9@ ! e!Pe!P.z6J t0G#@C`na̍} !03a̋w"=poxmh E4(XlbX=~$0 \nu;7!׃sY`7~]# @Is@CH+&n 3,}s S얐 {%|/ B"_S~͸>+$_ zD:xGxF`Lc`rS#8F0E(0)֓"h=`BP a Lki 1_#h|'0V#4(!LA0 ?AP#`JXp,LpLqg}*-#7=dn!Oa@eiJ ]N :bxV?Mf+n>?]>1W+GLOg|*h:O#]qvLXd?٘Ks^`#Z Gݽ>*@, 5X Ά",g'VAO gogK$4 . :%H`LXgcit:) RHnXE!8sn>>b: .=xJz6Qu1LKOKaooZLAkzNf< ;u4Nw!|e-/qݬgpmc,c ;8TI=?L/ב`3 D3dC4&B  V!3OJ$@M _"@Z/GDos_TH~! zsE ŕHʭq4MHEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEUhbsŮ>bWxh[#Wxh[%>lf޹?ݹ6mS0B<ߛOue>M>O.!}ڶ*k,eo=[W=s3L'3Nj /eyϖ! g?oi>/O:%~ؑ0r3 h] ]-2peK-Wnd'PSIENDB`MilkyTracker-1.02.00/resources/reference/Amiga_resampler/modguide/results/comb1200_off.png000066400000000000000000000140651324432207300314020ustar00rootroot00000000000000PNG  IHDR,)PLTE@ @@```@0``@@@@`````@```` ``` @@ @` ```@ ```@@@``` @ @``@@`pT&sIDATx݉(a $ " į{n/ !B!B!Bȷwv#]~ΛEH\ uc9Y+!I[} u/ݷse8>ͮ/^)w\affp/ ]ЮvS󽽿_>joƭxl{QK#Zsq1_ c $f_=TrN3r7)70+=j(U,#Vi'fݕ3:kcjzMxIس>zgwi$pay##t=Q6ו쮼Z?mgH߯l@= v3Cv{ʞd=``m~%h,AvvZݥs/e>zی2 mFZfz\0g@_#>F|$c3eُܖ&#uh$gw8RfP/HKbop0O,]yOhL^b/q{ 2;{AG"{ *c"Zy>p@o&#e3`0#f2@WB3y`&#075^6[ ZVf`;1*O_Wp$9X-7d>^3#趟3GRzW!Zc&M@#~J3 VjecY8S{ozX+38M7&&K[:-/>='FٹluS.@m tU ,_P]=Ƨ].X8PW CI{#8@m'XeC|FʇnjУTV^"g0}puKv)d )W`!npS0>ڥXa{ @Z{kB Q}`@gs])?0T V(p $uK=U9z U=uH!) &n PN M;3RO9@Y]x~c~λyqy9@I@e7y?uuo} rR4o0SKb/* f\V7*ZOKPkr|{?tfLzcO1tgut3) P:3Bo'Ʊ*#=۽~/5Wi oi _D;7Zɫ:Ll d:0Pj0@._L &uc] pÏ0<1}Ik8?(47P+v ,}$,]<c3zk(O& `3o t,og!@t@esFwO[/rboͮ5z i PݖP;'[@q+mr{(.cm:2.h`S6]pw{[:GO]:Pct3o4(mv%~^6^xsJ)ږgnN{q\TWG4Yиac7S;/ p@mO[ݵ#9nڣݴ P @kR4v!@2^9;0@Ͼ~\-)uV JTphz-#3)@PތY\){%x7) x1=6} ٪@8r vcX1J{&`(X;)w*@_T9`@}$6l lu[K?^)@g[*bUăW=*@P֑Jj:0;}^;m@z&$P hf\um` г}^q׫F _le+н=qK%GtgK=Tg0􌲶;7 +bqAN; < v7p;g<o/e){nc p|}=g2@sY00OB+<00L=b{pԟ8p 'Xow0zo4|Y7휪o @Y iFb #E-U`wI+S)UUѝ7R}` *` #{m )[Z~X+dhŝ?p`T3Ncdž **b,XpAX%3e^` E'x`r@kg%3<13|aXc:7RJ0Tunt`p(n0/\ :7r:/.|*TBl[! caU޷`êoUx 2m!ծ˫~aYV`06lMIiͯ͑ͺ**׿.׳ ~9C;otJ5w҅/ |=s8/m`]3Y32S(_ތ 0 #6`d& `02lzGuFN&͗ka6J)-$06lMI*z~uvFmM #6`d& U #6`d&$]@5$]@5$]6,-xpğ^H       $  y@iH   Q 3f _cpƌ S 3f jz p4=hA/Jk%خu \x &%x^'kK} I ? !]@5$]@5BdHkHkHkHkHkH                  if-+V8g4 ۯ2\>ˮ~eo<2S{03NfټID,|&V&W v޻"``gJߴ7%)XK__9 /gFmϣ~e>9ԇVH- h6S\Qiنv`fshtF 'Xأ e"[u6WL\C5;*d䳨?o52ao x&s& }> $;Ӣy"WVg#-JmB'P'iT@β,b[QKsV8u))kUhSf(S9gM|yn=hXt /5ü23xJ5.{3?jCѕ!`޵).1"#5OA0U:w T0 La*SA@ T0 La*SA@ T0 La*SA@ T0 G goӷ$)Cc;B! dQu >L/vP؅K<_/[QT^MC.uZ_r!B-NP! La*SA@ T00 DA@ T0tP3a*SA@ T0 Le a*SA@ T0 La*SA@J BB 2T hM҅E%pk}Vg⨀ &>6g@UT0܈JiB4 'NAT@ ij8joBT0 Lb6a"SA@ Thۄ0 La*T&Q Sy )ೊ'qnx$Y38B{0xG@@ T T#o7F]Mʷv؁Ѓy$:p#>!:pU09K;M@!ೌЊoxFf :pY>"`3 7xp9h/`8kcBs] pcz 2auJk1N@ǠK1S?ܔ|R=_p{@\a`C@s7&&MЙZ+R#+" Vj ~ZHV5mG-@+q4* K[7 P?[%G@u M>Uz!r xi^܊Ϲ@@h TD+`.GzsY@YE+_iF L%[v" 4BоC@D}.WfY@cQ: T <&)(p9)! ԦC&M@{` ok1~ԮPEɰ'B+!-3)6(p26" aS+ք'#$,*w I C@h[4ڇD+ ZVz@5A@%Xl&`NW:[פкtޏ\b琞 :E Mo\@кP/*` ۰CMq.Aw%(Ԍ"XOP{P!!`dQ~3@@q`\\h=9T@cُ !L#F\SmG"Ԕj!`|v0yk3FcQ%4Z%Ed}/K 86e"q }Kz :_[02DК=8!YP녍t:`c! lOfṔzٷ r~Ie.@N6D2.ED_WPj}z I@B|eL} ;'`^N^8Bߑ ;Hԋ-M@eZ`l"x>LVY!  ,!5!B ixE@%!Z0zE<̣tڟ$_a.GNC@vX j%\F@cg+-^wS{TY }Dmk (/p1 WPMЬ>&Դ%ts.=H4(?_'W+tZ@Gl$5eRm6; mk$M e>{uG|@[+%ҠwtlP>"`Bx<  ixvWt0$WϞ#ҿMCm, ]G^_ Ms[x `.- Pl 5Q@0zlZc+ffh (|Z"U8;~J@ۊR'(3*N ߿YpG £ƹEP'(J,G''(}g fE+[6QHpZ+A)GΜ Z+m_K h$ ծx> Z!XK@4;D@r ׷Py ŋ@@;ś|, V`ln.`WI! R@˨P0ʣRD@) ?!B- Bo$G][y;&,$XX@{C%X.8'B~ !dK hU~ЉxOƥVLCB}eF0O qBxEfRttH=Gܚj@@78;Νwpգ"ytفd V[V0P{t΃n{-i0a'π50"zJZz)x:auY&;P#9 o߄Mi.ݳ$ hkp)j9ͮpH2>Shڑ!`d6gkkeC,$w2DD@g_ #ࣄdlFPzKXWE!lګ h7d#ݓ\ P&G@\ _2G@q>#` 0Q\)e hLpXZM3 cl >܃"`d60\6Z7 hc?vJj/aa禖A4 `d{lK^*l, jL0.tS2>rl[y)]0M@>|K2]DV0@^ =U#`d/P>|g2g2g_0#&ҷ658Uҙo -ȍr%A;"`?ЊC\B11As XIg0*H4^^"`d.hn&8718Dd׎dE dE|T@=8+-UOXm sjG.'V[ 'rܪ8r3NAU(~)KV;f-,fm"~P~#`AKۑU$/,n^GlRY p zpI}AHq֦YHѢ~|e p]0bJ&~%؅ `,vc9R_,\&`g@XX7lcߖ,\rTX|c p]>!` c?P CĚ>;^瀀'U׍K6ߔl0opG瀀'S @& |a@& |a@&ۉ- |d[K$W]ʦL N=0aPRXCpL(hnWz6}+}C&`\2]:0qjal`4)z$~AS^W{M_ MΛ`pEhk.$(켹m%!V@_# m ;O׆mee'пKNlYkФ w]W˲*z9Za0$G{xU5~).j ͏ߋQ{IWE鶢λ/mzo\ގ},[1ٝa!B!B!Bޙqf/_j:͹kg $dLv\!$-?aݽ/h}s ;߸ooDTn|ILg+r9];OCdeu׊7=jO^o}Mykyn~b?hB)6 dJQwGj:*9o=Vy"!6(Sޫyȭf{wvپ] "Yj]b+ ;5R3's@8-fg@25$S@25$S@25$S@25$S@25$ScZ  LM`KL }4 L iScs l z8(AiS,y /ϊEoXt4YJ0IԊ۾R̚` XEFmOn64I]5dEgL~ (*g}`.7kkx[3W?* Fμ0rr FP2!5}P(Z'($U~`Џ p+m'`pDR.wZR$g .rq.@?So/ @.S(xc[(prBܱU=F^$S(>c=89/Pi0>b85S@NMkɮ8& va$gp@]Q{>``zV\f85(& M@7 8 o| 8Lk t9;D1@P?%w)В0Qpb~ο+pRP6咕_jFbdd>5kFFtfU 06ouiͺi2yV]0+z(@; 2SPNa'5sF.Y4I?1S#H[T};5_MN(@wm( /!#xJ'E _<ۮ?썯8؞P;@w3(#5 ݣ.Ulhha7<-q 7{hh=6eXϿ&:.FhԙPYLX}XEj3Uo꼙"nhoNT! WK4nxG<'t}~2 ( -y P9EzNh@ͺ:Kٽ `ɮ g&|i*ggv]h=_:jSnP&]aѷ^+vM42h[ `˨>uaEN?T x;`XϋN+]Bp`ʘ- 0ݳ5|vG |wA?xrhJbW% ym3شUb `]>GtΪ sl^к}:{4"}%.sPJW m 4LL;c08i0VDߗ,hDGzՋ' Ыf X1F)s2@pX>!-Yt/nav3{eiox{#~F=hͱN* Cm: zJY `@YS,7jcL.x8 `¦@mvq] Z Ua.0B>V!_n0 V 0J'7_sՏ[l(:4fK^s @(%op3ZP,hxta]ʭG`o]cy/]W\0h ҭ*"ܽȼ(r5@m- yR޳(wo06o<`X@w9oJ oPqg^1׻{NX}4^v;>opd[;82G #'ߵ|𻶝~׶C#|Zom;84[G ֶC|om;84[G ;+@w37( [Rk#V-ؼ)5Fn &ӟXC 5 f߶w{dV_OHNSV+.V'"+@_wS"    y+p~(6pl(6,1/ ņ%MYGݲp)t,1o -KƫƐYcڬ1|mr6k ~We!kƐYcڬ1|or7K 9ߛ%Cf!{ĐYbHdjHfk| !@25$S@25$S@25$S@25?w; Z?6S1uZhm*9jOmjxl:{ gVgU~IO>@9S\ Oπ$âTPIHؿsHȰ B!HJ$v[]Z n_䛂6Cbu}Wއ@[<:GMZwyB>+d_CFӢK.n_eJ֥.N}fأJ)mqe,+9a%{R|Jn R׾i^琕 ܎lyݰ_-rxy/?㕙Yu[Gq*V4pMr !B!B!eZkFeIENDB`MilkyTracker-1.02.00/resources/reference/Amiga_resampler/modguide/results/comb500_off.png000066400000000000000000000144601324432207300313230ustar00rootroot00000000000000PNG  IHDR,)PLTE@ @@```@0``@@@@`````@```` ``` @@ @` ```@ ```@@@``` @ @``@@`pT&sIDATx흋(ywn O:hZ`ɕmx99_'+ Γ&Qo)#?~,#G *=k%ϖuzqO~=gj}،+L=kuЊlpS2V06y3FFz v^? x#{1:jR@~eϷOb0.7:!es-DJr>MXSmVO.{Z6.5rPE8鲣Łedzu=_?&wԦ^ vbi^"L)P0 a(CA@ P0 a(/\@? \.@? h: ;@s@0|Y2Kc NE,ѿ.y+4| ɢ˜SQ*xlVLc:3(E"0JB: hHk.P1oZa1{s i+ `U0bb`:6f6[~M @XX VBZm,BLm,BLm,BLm, l+x#|^ǃZKa߹"47,`LTC[M@2;)`F j  Zx!T'َm-nP ^dO[ hnP y Ev$?xL)SO!MfX2Bg_(ZV},)':i7"$Q@yXe,v5y(0O!BB@c'ښLPbn BfЯ*k] NX@d$<S#h BKprLMzZ+y ͇&|\EC´4gkc7#ּ+PVKN7JT/h3ì)`dhs)``dETsMvƒ(U1t}+~ ]@u<,ڧ(!7)`!X "`X 4MFPD@ /C@7Dt^.ۍo AXN "Ҭ֦w_ (jG@9A+bVb ^O<zKk EG@ ѢPN-t22ADb*ݪN@O hJ@1qؒnKLywj! Pfg!`g (NC&c,: <E00PЈ=!cebw3@ k'^(`Ԅ Hzii=LG+)S ( ͽO d#˻Kji=+05V x~3.4ԌPfbn)[ -~F@Wtf/RnͶ0&zPz)`14 (,&zkG|sh*`:#ӅzELm$ҚBBcʡrxx%ru秥#z>2^T xx\Vp$ ,Pb|17nE!Rdp{v v;M͎It!&&^EpRt![,0S@RE.hFj(0 K2OI̤0y>*^/3N@P=1 hK:ܼOA?%zռK_[c* `>oP0VnߎUpF/b |2~_ h9t#0tBlUsՃE@_3 _.E'bNWXCEcȁ\PoLZ0ug-W@mn1P-"Y]v&oB@X(ykxT: ypm.;{e71 h=k (#"` X<pۼ.A@LP S#P> x?lH SRG@aܕLMHbx!.He؛D3 /4 +׼P.R b* BTЏvڏPaw֜Ǣ Yk|3PTVaq]O<K}Vm?A/-!`UݿbfM95휽kjUYM2'чE,/J{c= ꋥB3 L":A+w0G4 GLh)`-?SX P"`(P3"TrQyb ځ/t3ʯY u@ql$V0d\rv#`fVP-Vp(O>) nE@2ڃ-/%J7ʳX/ۥ' "~! 6!K@&%qS40[ ` x +!`]:G4CCA@ʛ ZHp(-  ̐>"P<]+6aP-! W  ( `PW FA@_3?83(+ã( 4IFF@ \oEA@Y^] }u , `"g    N P0A)&ڃ 0L ON9\ 軈rT  N߃ҽzAh"~+h["LI䏋tm;t`RMН'A@L ഴ;5U廹 0-2 a(R KA@~ID wQp"37x!@@ PP~む/\ hb1Q!`;(: KW@qiE@pA@B^(oI0~sΗF-"t9’ eML!`$Lr%[t!1h.0#Ӆ\D@p)c@@8ɜ'ī.d-q} MT@{՗`{똞E !(F.2&Kʻd B'1_Bj9P |CA@@kA0k0q郀a(C]ݜJ{! IV2JZy! e C@@ʰ! C@@A0Ul]6@@ #@@ PQ PA B>F@pI06A{JdT'ޢ%/ dMb{@( SpڃS~ 'I'%k}!3)":!%C{0CA@ P0 a(w 0 a(CA@ P0 a(CA@ P0 a(dɹRmj?vd}ބڱBΕjǦ 9WnL.\H$__aĦ  _1FS4]b~mWQEFf~Iɗ,Wk׵]Q-jo72kF0B( ФvaYmRyq |EK.Y3%vi}eѡmt{4[ZH>3OcY1t.Eۃj_)Fi=T히gt.Y5ȼۯ9^ټT;?Ox?q23UԮ>v/WQնkye$IENDB`MilkyTracker-1.02.00/resources/reference/Amiga_resampler/modguide/results/comb500_on.png000066400000000000000000000115401324432207300311610ustar00rootroot00000000000000PNG  IHDR,)PLTE@ @@```@0``@@@@`````@```` ``` @@ @` ```@ ```@@@``` @ @``@@`pT&sIDATx흉 ;3 "W+Vi+ h̲|?nNXgފ0CA]+m \7,뜮Jy hI_LqCw~|z;OnO>|Oz_Hn!̧7&VW%,9ҁJF\&cD]</`K&mB̠b44a`(Du{-w"2oɶA!6ଐ9n7sج͏y^-I@7/2;PehYU7ɹ+y:J=ڸ&G=$AnuzNtR[21|6~|}p?Y\fvVw/ ްЭ] lբgUbYυԀ*&6kH AR@#{w7'`xЫeYC)c"b[ *3.c+qrz: 5GcW"y+{nڮ<#ws>ȫ+Cln*U`'Fn(Y,|fzMp\G A{ /pMu 6B!=C@&_08(SAazAƘaq ]6]A@PE'F8=A@PAH=0a<Xρ B6뮆7* س: *p a@@" `B>_@@X@@A dst@4@@PAG T7p^{?&C " "-CY2BQz$N, A99lpNfp99/1L(g$tF ԇmc,S _Ge=O\A%e =g ZX 19og in}Ei?(aNaR|w0(G!?M!hrtNa "={T#&#CA@'>07@!h!_x;Ά+Y;Ά#yp @@*OMgA<8  y"*AY@@TPD@U5yqpl n6pu0H⛆A xߵ܆`^5l R>+2N=l RDTKN{0HwB6 ``jq_y S@ 8?! A!ě v%[LVxpɊJ\ ZLVOp^-OV|b 3?Ya;1^LD[KKS8C>B@,D`ݷՂQor#( @`ҹƚA@&4' 'ZnF4݌<Nq[OW=-`bDD hvg9'۲n<ro  %#+b:Q%D=f+J}Y݀IsʷiV0sx0>~>-5`] 8ᐥrD@1yhJHk ,럃v3~G@zx x3p@ p Uܗ ~c%*_v:Kpc|^* Tnmk=<]2piENrvZHc c!I>!`e;tZ\Whgv~+,f%tw0\2A@By.IMx<#*gD+o0ɪ@::O0g³>, f]=K P&'{Tk: vFH1_@`cb_MfC?[v1oHPNP<".7߆T9OM̨&IhdZ5_s޲gWY{ 7F s_{3_ڹ¯?93goz!XG:-tȊ40qf"|8US21)C@A[~yp[P]F x熩,I-ll'3\P¹{*W"@f :t1]bN8й,(ix0D{Fdʯ6B6SD_X ZU΢vHk"` ;za$G@o0Fx[@/۾{s88vTo?w(`2EsL`0.<,H&F0! _W l0~6:O)ΥP&b! o(D07Y ``Qbg?+y\~ש["`pVC L.`M$0~)I + xF/ agܒMIAD:]\,bJIX̕QIpE7Z씀˗DN_@F"&P%cDJHF0Y;Bav.~@@0K,m5 cVou)2Fd6ULu[@{M,c-EJw_6 *]nfЍ@,1r3¶(IfoBpAhC@.Zb)`p(-\p A8b\1x:3@ `LLA$L#~-A4L;:poU_ ^u { * * *tf Vokv}] =[}邀L>l?zBEϬlca-p1 utI:'zMΎM/dK$7Byפ>*Eh|),<ݼk D׼otFh1RVmy &wҖ%?F˓ޏB4+±BM[ֲl׽WF20d%ɫR0zTaE_Եɓq>>ۇњdn˓WvgޮY{]GN}|] Xa&>zJʻj׍Nu*+=RTxm^Y.R.0ӨIENDB`MilkyTracker-1.02.00/resources/reference/EqualizerDesign.doc000066400000000000000000000660001324432207300240070ustar00rootroot00000000000000ࡱ> 130 @ bjbj00 .&RbRb 2222222F....,Z$Feee$RP|2AeeAA22A 22A22~ &4_.K 0UFF22222e"eeeFF$ j  FFj Equalizer Design Introduction Hello, Please find enclosed the class for the parametric equalizer. This class can be used to create parametric equalizer objects of which you can create as many as you would like for your EQ. For example, if you make a 10 Band EQ you would want to instance 10 EQ objects. Each EQ will either boost, cut, or do nothing to the sound depending on what gain values you pass it. Using the code First, include the class #include Equalizer.h Create an Equalizer object Equalizer eq; Calculate the coefficients for the Equalizer object. The following example would result in an eq with a centre frequency of 1000Hz, a width of 1000Hz, and some value for gain (see Utility functions), and operating at a sample rate of 44100Hz. Note that if you make an EQ with a band at, for example, 16000 Hz, then it would cause the filter to become unstable if you pass in a width greater than 6050 as this goes above half the sampling rate i.e. 22050. You should bear this in mind when you choose your bands. eq.CalcCoeffs(1000, 1000, 44100, gain); Pass a stereo signal (xL, xR) to the eq to be filtered. The result will be placed in yL and yR. The current code uses double precision, you could change this to float if you like. eq.Filter(xL, xR, &yL, &yR); A 3 Band EQ example You need to create an eq for each band and pass the signal from one eq to the next. Here will we demo a 3 band. Equalizer eq1; Equalizer eq2; Equalizer eq3; float fs = 44100 // or whatever samplerate you use // gain1,2,3 are the gains in dB of your filter (-12 to 12 (in dB) is good) eq1.CalcCoeffs(20, 20, fs, gain1); eq2.CalcCoeffs(31, 31, fs, gain2); eq3.CalcCoeffs(63, 63, fs, gain3); // Fetch a stereo signal xL = inputLeft; xR = inputRight; // Pass the stereo input eq1.Filter(xL, xR, yL, yR); // Pass the output from the previous filter eq2.Filter(yL, yR, yL, yR); eq3.Filter(yL, yR, yL, yR); outputLeft = yL; outputRight = yR; Utility Functions // Calculate frequency from 20Hz to 20,000 Hz, a value of 0 to 1 should be passed (as is normally used in linear controls) float CalcFreq(float f) { return (pow(1000.0f,f)*20); } // Calculate Gain value, which is passed when you CalcCoeffs(), a value from 0 to 1 should be passed, this will result in a -12 to 12 dB cut \ boost. i.e. 0 = -12dB, 0.5 = 0dB, 1 = 12dB float EQ::CalcGain(float val) { float dB = 12.0f * ((2.0f * val) - 1.0f); float gain = pow(10.0f, (dB / 20.0f)); return (gain); }    ;  * . 0 1 2 3 ~         o +3<½whh~B* phhhjB* phhGh >Phjh,3 h;%5 h9@R5 h5 h -5h;%h;%5h;% h5hh5hH hh h5hhh hnZ5hnZhnZhn5hnZhnZ5- '(    1 2 3     gd  =`C_{gdG 7$8$H$gdGgd,3 7$8$H$gd,3gd<=?RX\`u{C{ỨrrΨ]A7hHhj5B* CJOJQJ^JaJmHnHphu(hj5CJOJQJ^JaJmHnHu4hhGB* CJOJQJ^JaJmHnHphu4hhjB* CJOJQJ^JaJmHnHphu%hjCJOJQJ^JaJmHnHu%hCJOJQJ^JaJmHnHu%hGCJOJQJ^JaJmHnHu%h,3CJOJQJ^JaJmHnHuhh,3B* ph{|/0hi#$BDopgdgd,3gda 7$8$H$gdagdG./05?DJPRUhiͲiSiSiSiS@%haCJOJQJ^JaJmHnHu+hahaCJOJQJ^JaJmHnHu4hahaB*CJOJQJ^JaJmHnHphu%hHXCJOJQJ^JaJmHnHu4hHhjB* CJOJQJ^JaJmHnHphu4hHhB* CJOJQJ^JaJmHnHphu.hh;B* CJOJQJ^JaJmHnHphu4hHhaB* CJOJQJ^JaJmHnHphu"#$)7<BCEJqvʯʁiiViii@; hG5+hahaCJOJQJ^JaJmHnHu%hHCJOJQJ^JaJmHnHu.haB*CJOJQJ^JaJmHnHphu%haCJOJQJ^JaJmHnHu4hHh~B* CJOJQJ^JaJmHnHphu4hHhB* CJOJQJ^JaJmHnHphu4hHhaB* CJOJQJ^JaJmHnHphu4hHhHB* CJOJQJ^JaJmHnHphuhnZ hnZhnZ hnZ5hh5,1h. A!"#$% @@@ NormalCJ_HaJmH sH tH DA@D Default Paragraph FontRi@R  Table Normal4 l4a (k@(No List & '( 123=`C_{|/0hi# $ B D o p 000x0x0x0x00x0 00000000 000000x000 0x00 00 0 0 0(0 0 0 0 0 000 0000x0x0x00x0x0@0x000x000x0x00x0000x00 000000000 0x0 0000123=`C_0hp @0d80@0@00|@0@005@0@0@0@0@0 @0@0 @0@0|@0@0@0@0@00@0@0}@0@0@0@0@0@0@0@0<  {  8@0(  B S  ?.`_#.`## + 8*urn:schemas-microsoft-com:office:smarttagstime 1148HourMinute   +3CC./"  xa;%h; >P9@Rx.ak~HIjHX -nZ<nH}qzG,3@p @UnknownGz Times New Roman5Symbol3& z Arial?5 z Courier New"h&I&0r@r@r4d 3 H)?x.aEqualizer Design Introduction David DavidOh+'0   < H T`hpx Equalizer Design Introduction DavidNormal David19Microsoft Word 10.0@ @y6X@^r@՜.+,0 hp  Home  Equalizer Design Introduction Title !"#$%&')*+,-./2Root Entry F@ K_41TableWordDocument.&SummaryInformation( DocumentSummaryInformation8(CompObjj  FMicrosoft Word Document MSWordDocWord.Document.89qMilkyTracker-1.02.00/resources/reference/xm-form.txt000077500000000000000000001141531324432207300223610ustar00rootroot00000000000000The "Complete" XM module format specification v0.81 ============================================= ----- Compiled and written by Matti "ccr" Hamalainen of TNSP 2000-2001 Contact ccr/TNSP at: e-mail: ccr@tnsp.org www : http://www.tnsp.org/ NEWS/CHANGES FROM V0.75 ----------------------- - Typofixes - Info about Vibrato, - Info about other programs than FT2 that support XM and discussion about how they differ from FT. - Player processing info - More info about other effects TO-DO LIST ---------- - Research workings of the rest of the effects. - Do a complete check of accuracy to this doc. (e.g. test all info that is said here.) ============================================================================ DESCRIPTION ----------- NOTICE: I DON'T claim that the information in this document is errorfree, so use common sense if you encounter something that does not match! I am constantly improving this doc, send your reports to me and I'll see if I can figure out what went wrong. :) This documentation was written due to lack of 'complete' guide to the XM format. In 2000 I used the modified XM document by Sahara Surfers when I started writing XM loader/player for "J Sound System". It was good, but still lacked some crucial information. During the development of J Sound System I have gathered some additional information (and still continue to do so). This document is the result of that work. Remember - the information contained herein is based on tests on REAL XM files and REAL FT2 :) If you have any questions, fixes or suggestions (to add info about something, for example), e-mail me. ============================================================================ SOURCE MATERIAL AND ADDITIONAL CREDITS -------------------------------------- - Lots of empirical and systematic testing in FT2. Hours and hours of "to-FT2-shell-to-DOS-write-doc-back-to-FT2-...", beer, coffee, swearing, XXX, etc. - Investigating PT 3.61 internals. - Testing of J Sound System's XM player. - Testing of other players to see the common pitfalls ;) This document is based on the original XM format description: (C) Copyright 1994 by Mr.H of Triton productions (Distributed in public domain) Some information is from the enchanged XM description written by Guru and Alfred of Sahara Surfers in 1995: "Not copyrighted, released into public domain (at least the additions by us). Feel free to do what you wish. Credits please." Some bug information from ODE2PTK.MOD's documentation written and gathered by Chipaux Sylvain aka Asle/Lithium^ReDoX Greetings also to: - My friends who have beared me talking about FT2's "features" and swearing the bugs in "Other Players", etc. - All TNSP members: fgcl, mdx, sind., delfine, ssad. - All demoscene people over the world, demo on! (But please try not to make 3D stuff only, it's boring :-) ============================================================================ DISCLAIMER ---------- You can use this information in any way you wish as long as it is distributed freely and no payment is taken for distributing it (maybe except a minimal fee for the physical copying process). Also the authors may not be held responsible for anything including but not excluding damages, loss of profit or similar. This information is provided in hope that it is useful, but there are no warranties of any kind that the information contained in this document is in any way correct or usable. The responsibility for consequences when using the information is entirely on the user. ============================================================================ ******************** * General layout * ******************** The layout of a typical XM is like this: XM header (up to and excluding header size field, now 60 bytes) Rest of the header (length including header size field) Pattern 0 header (length in header) Pattern 0 data (length in header) Pattern 1 header (length in header) Pattern 1 data (length in header) ... (* number of patterns) Instrument 0 header (length in size field is this and next one together) if (numSample > 0) Extra header Sample 0 header (size in instrument extra header) Sample 1 header (size in instrument extra header) ... (* number of samples in instrument) Sample 0 data (length in sample header) Sample 1 data (length in sample header) ... (* number of samples in instrument) Instrument 1 header (length in size field is this and next one together) ... (* number of instruments) ****************************** * The XM file structure: * ****************************** HEADER ====== Offset|Length| Type | Description ------+------+--------+-------------------------------------------- 0 | 17 | (char) | ID text: 'Extended Module: ' | | | (The last character is space, i.e. $20) 17 | 20 | (char) | Module name, padded with zeros. 37 | 1 | (char) | Always $1a 38 | 20 | (char) | Tracker name 58 | 2 | (word) | Version number, hi-byte major and low-byte minor | | | The current format is version $0104. Format | | | versions below $0104 have a LOT of differences. | | | Remember to check this field! Your loader will | | | probably crash if you don't! | | | 60 | 4 | (dword)| Header size | | | Calculated FROM THIS OFFSET, NOT from | | | the beginning of the file! +4 | 2 | (word) | Song length (in pattern order table) +6 | 2 | (word) | Song restart position +8 | 2 | (word) | Number of channels (2, 4, 6, 8, 10, ..., 32) +10 | 2 | (word) | Number of patterns (max 256) | | | NOTICE: This might not include all patterns used! | | | If empty patterns are used at the end of the song | | | they are NOT saved to the file!! +12 | 2 | (word) | Number of instruments (max 128) +14 | 2 | (word) | Flags field: | | | bit0: 0 = Amiga frequency table | | | 1 = Linear frequency table +16 | 2 | (word) | Default tempo +18 | 2 | (word) | Default BPM +20 | 256 | (byte) | Pattern order table PATTERNS ======== Offset|Length| Type | Description ------+------+--------+-------------------------------------------- ? | 4 | (dword)| Pattern header length +4 | 1 | (byte) | Packing type (always 0) +5 | 2 | (word) | Number of rows in pattern (1..256) +7 | 2 | (word) | Packed patterndata size | | | << Note! This is zero if the pattern is | | | completely empty and no pattern data | | | follows! >> | | | ? | ? | | Packed pattern data. INSTRUMENTS =========== Offset|Length| Type | Description ------+------+--------+-------------------------------------------- ? | 4 | (dword)| Instrument HEADER size (SEE THE NOTICE BELOW) +4 | 22 | (char) | Instrument name +26 | 1 | (byte) | Instrument type (always 0) | | | << In reality, this seems pretty random, | | | so DON'T assume that it's zero. >> | | | +27 | 2 | (word) | Number of samples in instrument. NOTICE: The "Instrument HEADER Size" field tends to be more than the actual size of the structure documented here (it includes also the extended instrument sample header below). So remember to check it and skip the additional bytes before the first sample header! If the number of samples is greater than zero, then this will follow: (if it is zero, nothing will follow!) Offset|Length| Type | Description ------+------+--------+-------------------------------------------- +29 | 4 | (dword)| Sample header size +33 | 96 | (byte) | Sample number for all notes +129 | 48 | (byte) | Points for volume envelope +177 | 48 | (byte) | Points for panning envelope +225 | 1 | (byte) | Number of volume points +226 | 1 | (byte) | Number of panning points +227 | 1 | (byte) | Volume sustain point +228 | 1 | (byte) | Volume loop start point +229 | 1 | (byte) | Volume loop end point +230 | 1 | (byte) | Panning sustain point +231 | 1 | (byte) | Panning loop start point +232 | 1 | (byte) | Panning loop end point +233 | 1 | (byte) | Volume type: bit 0: On; 1: Sustain; 2: Loop +234 | 1 | (byte) | Panning type: bit 0: On; 1: Sustain; 2: Loop +235 | 1 | (byte) | Vibrato type +236 | 1 | (byte) | Vibrato sweep +237 | 1 | (byte) | Vibrato depth +238 | 1 | (byte) | Vibrato rate +239 | 2 | (word) | Volume fadeout +241 | 2 | (word) | Reserved Envelope format --------------- The envelope-data (for both Volume and Panning envelope) is formatted as follows: Data for ONE envelope point: Offset|Length| Type | Description ------+------+--------+-------------------------------------------- ? | 1 | (word) | Frame number of the point (X-coordinate) ? | 1 | (word) | Value of the point (Y-coordinate) Since one envelope point takes 2 words (2*2 bytes), the total maximum number of points in envelope is (48/4) = 12 points. So in practice, you have: #define MAX_ENVELOPE_POINTS 12 typedef { WORD nframe; WORD value; } t_envelope_point; t_envelope_point volume_envelope[MAX_ENVELOPE_POINTS]; t_envelope_point panning_envelope[MAX_ENVELOPE_POINTS]; Envelope frame-counters work in range 0..FFFFh (0..65535 dec). BUT! FT2 only itself supports only range 0..FFh (0..255 dec). Some other trackers (like SoundTracker for Unix), however, can use the full range 0..FFFF, so it should be supported. !!TIP: This is also a good way to detect if the module has been made with FT2 or not. (In case the tracker name is brain- deadly left unchanged!) Of course it does not help if all instruments have the values inside FT2 supported range. The value-field of the envelope point is ranged between 00..3Fh (0..64 dec). SAMPLE HEADERS ============== "Number of samples" of these will follow after the instrument header. See also the XM file general layout in the beginning of this file to understand better/get the big picture. Offset|Length| Type | Description ------+------+--------+-------------------------------------------- ? | 4 | (dword)| Sample length +4 | 4 | (dword)| Sample loop start +8 | 4 | (dword)| Sample loop length +12 | 1 | (byte) | Volume +13 | 1 | (byte) | Finetune (signed byte -16..+15) +14 | 1 | (byte) | Type of sample, bit meanings: | | | 0-1: 00 = 0 dec = No loop, | | | 01 = 1 dec = Forward loop, | | | 11 = 2 dec = Ping-pong loop; | | | 4: 16-bit sampledata +15 | 1 | (byte) | Panning (0-255) +16 | 1 | (byte) | Relative note number (signed byte) +17 | 1 | (byte) | Reserved +18 | 22 | (char) | Sample name NOTICE: Note! After the instrument header the file contains ALL sample headers for the instrument followed by the sample data for all samples. Also note that it is possible that samples have loops with length zero. In that case the loops just have to be skipped. Sample data ----------- Sample data is stored as signed values: * 8-bit sample : char in C if char is 8bit, ShortInt in Pascal. * 16-bit sample: int in C, Integer in Pascal. The saved data uses simple delta-encoding to achieve better compression ratios (when compressed with pkzip, etc.) Pseudocode for converting the delta-coded data to normal data, for 8-bit samples: signed byte old, new; old = 0; for i = 0 to data_len { new = sample[i] + old; sample[i] = new; old = new; } NOTICE: 16-bit samples are encoded in same way, except that the datatype is 16-bit. ============================================================================ *********************** * Pattern format: * *********************** The patterns are stored as ordinary MOD patterns, except that each note is stored as 5 bytes: ? 1 (byte) Note (1 - 96, 97 = KEY-OFF) +1 1 (byte) Instrument (1-128) +2 1 (byte) Volume column byte (see below) +3 1 (byte) Effect type +4 1 (byte) Effect parameter A simple packing scheme is also applied, so that the patterns do not get TOO large: Since the MSB in the note value is never used, it is used for the compression. If the bit is set, then the other bits are interpreted as follows: bit 0 set: Note follows 1 set: Instrument follows 2 set: Volume column byte follows 3 set: Effect follows 4 set: Effect parameter follows It is very simple, but far from optimal. If you want to get better compression, you can always repack the patterns in your loader. PSEUDOCODE: ... dbyt = getbyte(); if (dbyt AND 0x80) { if (dbyt AND 0x01) c_note = getbyte(); if (dbyt AND 0x02) c_inst = getbyte(); if (dbyt AND 0x04) c_vol = getbyte(); if (dbyt AND 0x08) c_effect = getbyte(); if (dbyt AND 0x10) c_param = getbyte(); } else { c_note = dbyt; current_row++; } ... ============================================================================ ************************* * Player Processing: * ************************* This information is almost straight from XMP's technical documents (see "other docs" section for more info), and it explains how FT2 handles the different playing events: Play = Play new note with new default volume Switch = Play new note with current volume OldVol = Don't play sample, set old default volume Cut = Stop playing sample Cont = Continue playing sample ---------- INSTRUMENT ----------- Event | None | Same | Valid | Invalid ---------------+--------+--------+--------+---------------------- New Note | Switch | Play | Play | Cut (1) New Instrument | - | OldVol | OldVol | OldVol Tone Porta | Cont | OldVol | OldVol | OldVol (1) This means that if There was NO instrument, FT2 Switches. And if it is Same as currently playing instrument, FT2 Plays, etc. ============================================================================ ******************** * Instruments: * ******************** INTRODUCTION ------------ Instruments are a way to have more special control over playing of the sample(s) and "combining" several samples into one "package" that can be used in similar way to a normal sample. This means that, numerous (16 in XM format) samples from one "realworld" instrument could be taken in various pitches, and then, using instrument editor, combined into a good simulation of the real-world one. Why would you want to do that? You could have just one sample and save memory? And the envelopes could be done with effect commands? Yes, but many times it is much better to have several samples of one real-world instrument since if just one sound sample is used, the sound gets more distorted as the playing pitch gets further from the original sampling pitch. Using envelopes gives more flexible and general control of the instrument and you can still use the effects if you want. This is just one reason for using instruments, there are many more (tips: chiptunes, drumsets), just look around. IN XM-FORMAT ------------ In XMs, a instrument combines a maximum of 16 samples to one package with certain parameters. (NOTICE that the _internal_ representation in FT2 is not exactly same, you can notice that by looking the value-ranges in here, sample-header structures and in FT2's instrument editor...) Value Range - Instrument volume | 00..3F - Panning | 00..FF - Tuning | -128..127 - Fade-out | 000..FFF - Auto-Vibrato: * Speed | 00..3F * Depth | 00..0F * Sweep | 00..FF (In other trackers may be 0..FFFF !) - Envelopes: * Volume * Panning All of these parameter settings apply to every sample in the instrument. Envelopes and auto-vibrato are discussed further in below. ****************************** * Volumes and envelopes: * ****************************** First some mathematical stuff, explanations follow below... The volume formula ================== FinalVol = (FadeOutVol/65536)*(EnvelopeVol/64)*(GlobalVol/64)*(Vol/64)*Scale; The panning formula =================== FinalPan = Pan + ( (EnvelopePan-32)*(128-Abs(Pan-128)) / 32 ); NOTICE: The panning envelope values range from 0...64, not -128...+127 Fadeout ======= The FadeOutVol is originally 65536 (after the note has been triggered) and is decremented by "Instrument.Fadeout" each tick after note is released (with KeyOff Effect or with KeyOff Note) NOTICE: Fadeout is not processed if Volume Envelope is DISABLED. (This means that the FadeOutVol stays at 65536) Panning Envelope does not affect Fadeout. Envelopes ========= An excerpt from original XM documentation: >> The envelopes are processed once per frame, instead of every >> frame where no new notes are read. This is also true for the >> instrument vibrato and the fadeout. Since I am so lazy and the >> tracker is rather self-explaining I am not going to write any >> more for the moment. Introduction to envelopes ------------------------- Envelopes are a simple, yet ingenious way to achieve more versatile control over the instrument's volume/panning abilities with much less effort than using conventional ways (effects, volume-changes). Describing all the possibilities of envelopes (or instruments as whole!) would be impossible effort! Envelopes and instruments have been widely used in all imaginable and unimaginable ways in XMs... This is why it is important to implement these features correctly in a module-player. General information ------------------- As stated above, envelopes are processed on each "frame". The frame is quite much similar to our familiar friend "tick". Frames, however, are separate from ticks and are only reset on "envelope reset", whereas ticks are reset on every new row. In practice, the envelope processing routine should increase a "frame_counter" integer value for all envelopes (_separately_ for both volume & panning envelopes!) and for every playing instrument. This frame-counter is then used when interpolating between the envelope points. Envelope is reset (or "triggered") when: - A new note is set - A new instrument is set - A Lxx-effect is issued (See Lxx-effect description below!!) (Lxx resets both envelopes, volume and panning.) Envelope reset means that frame_counter of the envelope is set to zero or other value (in case of Lxx), the envelope is ACTIVATED and other possible internal values are initialized. PSEUDOCODE ---------- !! NOTICE: SEE XM-structure descriptions in above sections for info on the !! envelope-points! if (envelope_enabled) then PROCESS_ENVELOPE_FRAME: frame_counter = 0..65535, triggered/reset appropriately. current_point = [get the point number 0..MAX_ENVELOPE_POINTS-1 which has (nframe < frame_counter), BUT where current_point+1 point has (nframe > frame_counter) ] !! NOTICE: You don't need to worry about the first point's nframe-value, !! it will be always ZERO. (If not, then it's a buggy module :-) point_d = (env_pnts[current_point+1].nframe - env_pnts[current_point].nframe); value_d = (env_pnts[current_point+1].value - env_pnts[current_point].value); cval = (current_frame - env_pnts[current_point].nframe); final_env_output = env_pnts[current_point].value + ((value_d * cval) / point_d); This is how it works approximately, the interpolation could be made more efficient and you also have to take into account all the other things about envelopes, like triggering, etc. Check out J Sound System if you want to see how ;) I'll try to write more about this when I feel so :-) Autovibrato ----------- [Information about autovibrato may not be too accurate, I'll try to fix this when I get my tests finished on this subject.] The instrument autovibrato works like the normal vibrato effect, except that it is applied on EVERY frame of instrument and uses it's own parameters. - Vibrato is applied even if envelope(s) are not enabled. This means that you need to do the autovibrato separately from envelope processing. - The Vibrato Sweep is a parameter that describes the speed when the "full power of vibrato" is reached. After reaching the maximum value, it stays on it. - It SEEMS (or rather like "hears") that the vibrato sweep actually stays on the value it had when KeyOff was received. I am not 100% sure about this, but I it really sounds like it. I have added this to the pseudocode below. - Other parameters work as in normal vibrato effect. This is the formula that I have developed for the vibrato depth calculation: Range definitions: vib_speed = [0..3F] vib_depth = [0..F] vib_sweep = [0..FF] curr_frame= [0..FFFF] Calculations: if (keyoff = FALSE) { if (curr_frame < vib_sweep) tmp = curr_frame; else tmp = vib_sweep; } final_depth = (tmp * vib_depth) / vib_sweep; [!!!!! NOT FINISHED YET !!!!!] ******************************** * Periods and frequencies: * ******************************** PatternNote ranges in 1..96 1 = C-0 96 = B-7 97 = Key Off (special 'note') FineTune ranges between -128..+127 -128 = -1 halftone, +127 = +127/128 halftones RelativeTone is then in range -96..95, so in effect a note with RelativeTone value 0 is the note itself. Formula for calculating the real, final note value is: >> RealNote = PatternNote + RelativeTone; So the range of RealNote is 1..119, where 1 = C-0 119 = A#9 NOTICE: This is higher than the max for PatternNote (96)! Linear frequency table ====================== The formulas for calculating period and frequency for Linear frequency table, are as follows: > Period = (10*12*16*4) - (Note*16*4) - (FineTune/2) > Frequency = 8363*2^((6*12*16*4 - Period) / (12*16*4)) Which naturally can be simplified to: > Period = 7680 - (Note * 64) - (FineTune / 2) > Frequency = 8363 * 2^((4608 - Period) / 768) NOTICE: The values are reasonable. With note 119 and finetune of +128, we get: > x = 7680 - (119*64) - (128/2) > x = 64 - 64 > x = 0 Amiga frequency table ===================== The formulas for calculating period and frequency for Amiga (logarithmic) frequency table, are as follows: Period = (PeriodTab[(Note MOD 12)*8 + FineTune/16]*(1-Frac(FineTune/16)) + PeriodTab[(Note MOD 12)*8 + FineTune/16]*(Frac(FineTune/16))) *16/2^(Note DIV 12); (The period is interpolated for finer finetune values) Frequency = 8363*1712/Period; << NOTICE FROM Sahara Surfers: The interpolation code above doesn't work because of several reasons: 1. It does not interpolate. (Try adding 1 to the PeriodTab index in the second line) 2. It may go past the table beginning for negative finetune values. Write your own interpolation routine instead - it's not that hard. >> PeriodTab = Array[0..12*8-1] of Word = ( 907,900,894,887,881,875,868,862,856,850,844,838,832,826,820,814, 808,802,796,791,785,779,774,768,762,757,752,746,741,736,730,725, 720,715,709,704,699,694,689,684,678,675,670,665,660,655,651,646, 640,636,632,628,623,619,614,610,604,601,597,592,588,584,580,575, 570,567,563,559,555,551,547,543,538,535,532,528,524,520,516,513, 508,505,502,498,494,491,487,484,480,477,474,470,467,463,460,457); << Note! The period table is made for 1-based note numbers, so in practise it contains the period values for B-3 to G#4. Fun. >> ************************* * Standard effects: * ************************* ##| Eff | Info | Description --+-----+------+------------------------------ 00: 0 | | Arpeggio 01: 1 | (*) | Porta up 02: 2 | (*) | Porta down 03: 3 | (*) | Tone porta 04: 4 | (*) | Vibrato 05: 5 | (*) | Tone porta+Volume slide 06: 6 | (*) | Vibrato+Volume slide 07: 7 | (*) | Tremolo 08: 8 | | Set panning 09: 9 | | Sample offset 10: A | (*) | Volume slide 11: B | | Position jump 12: C | | Set volume 13: D | | Pattern break 14: E1 | (*) | Fine porta up --: E2 | (*) | Fine porta down --: E3 | | Set gliss control --: E4 | | Set vibrato control --: E5 | | Set finetune --: E6 | | Set loop begin/loop --: E7 | | Set tremolo control --: E9 | | Retrig note --: EA | (*) | Fine volume slide up --: EB | (*) | Fine volume slide down --: EC | | Note cut --: ED | | Note delay --: EE | | Pattern delay 15: F | | Set tempo/BPM 16: G | | Set global volume 17: H | (*) | Global volume slide 20: K | | Key off (Also note number 97) 21: L | | Set envelope position 24: P | (*) | Panning slide 26: R | (*) | Multi retrig note 28: T | | Tremor 31: X1 | (*) | Extra fine porta up --: X2 | (*) | Extra fine porta down (*) = If the effect PARAMETER byte is zero, the last nonzero byte for the effect should be used. (This means that the effect "remembers" it's parameters!) This also applies to E1x/E2x, EAx/EBx, X1x/X2x, where the "x" is checked for zero, if it is zero, then use last non-zero. SEE ALSO THE INDIVIDUAL EFFECT NOTES BELOW! (For more information and bugs + specialties) In general, the commands are reasonably Protracker compatible although not all PT "features" (some might call them replay routine bugs) are implemented. ************************** * Effect descriptions: * ************************** This is the effect info section. All the information contained here is based on my (ccr) experiments on FT2 and XM format. I have only added notes for the effects that need some attention, the ones left out should be implemented as in PT MOD. 1xx - Porta up (*) ------------------- Bends the frequency of channel/sample UP by PERIODS. NOTICE! Parameters (and their saved values) are SEPARATE from values of effect 2xx (Porta down) and 3xx (Tone porta)!! 2xx - Porta down (*) --------------------- Bends the frequency of channel/sample DOWN by PERIODS. NOTICE! Parameters (and their saved values) are SEPARATE from values of effect 1xx (Porta up) and 3xx (Tone porta)!! 3xx - Tone porta (*) --------------------- Bends the frequency of channel/sample to the given and saved note value by PERIODS. NOTICE#1! Parameters (and their saved values) are SEPARATE from values of effect 1xx (Porta up) and 2xx (Porta down)!! NOTICE#2! If a new note is got, but porta speed (parameter) is 0, the new note is ignored. NOTICE#3! The NOTICE#2 also applies to new instrument number! (This does not work as in Impulse Tracker!) SEE ALSO: Volume column Tone porta. 4xy - Vibrato (*) ------------------ SEE ALSO: Volume column vibrato. --------------------======================== 5xx - Tone porta+Volume slide (*) 6xx - Vibrato+Volume slide (*) 7xy - Tremolo (*) 8xx - Set panning --------------------======================== 9xx - Sample offset (*) ------------------------ Set sample offset to parameter * 256 units (aka bytes or 16-bit words, depending on the sample format). NOTICE#1! Unlike stated in original XM documentation, this effect DOES remember it's parameters, aka last non-zero parameter is used. NOTICE#2! If there is no instrument set on the same row, this effect is ignored: C-4 01 -- 950 >> Plat from offset 256*50H <--+ ... .. -- 000 | C-4 01 -- 000 >> Play from offset 0 | ... .. -- 000 | C-4 01 -- 900 >> Play from offset 256*50H ---+ ... .. -- 910 >> No instrument, 9xx IGNORED! | C-4 01 -- 900 >> Play from offset 256*50H ---+ Axy - Volume slide (*) ----------------------- Remembers it's parameters, but is NOT connected with the volume column effect volume slides. SEE ALSO: Volume column Volume slide. Cxx - Set volume ----------------- The volume column effects are not supported by this command, so don't use the same routine as the "main" volume setting for this (IF you use that for vol.col. effect checking too!). Dxx - Pattern break -------------------- Works like in S3M/MOD. The parameter is in BCD format, and the final row for jump is calculated as follows: jump_to_row = (paramY*10 + paramX) E1x - Fine portamento Up ------------------------ ... E2x - Fine portamento Down -------------------------- ... E6x - Set loop begin/loop -------------------------- This effect may SEEM TO USUALLY work, BUT: 1) If a loop is set on pattern N in row R (with E60), and no pattern jump/break effects are used after that, FT2 will start playing the next pattern (N+1) from row R instead of row 0! a) Pattern Jump and Pattern Break reset this. Bug only occurs if PJ or PB have NOT been used. a) Affects also MOD-files made with FT2! So MOD-players should also support this "feature". [Tested with: 2.04, 2.06 and 2.08] 2) If two or more pattern loop commands are on the same row (on different channels), strange behaviour occur: FT2 may jump to a random row, or perform the loop random times or even do the effect right, but at least v2.08 did all these just randomly without any reproducable pattern! NOTICE: This is a REAL BUG in FT2 and the working of the effects is random and cannot be reproduced. (So you don't need to bother to implement this.) NOTICE TO TRACKERS: Avoid using two or more Pattern Loops on same row as this effect is buggy and results are undefined! (It may first SEEM that it works right, but try to play it 5-10 times [with Play Song/Play Pattern] and you will see that it does strange things.) [Tested with: 2.06 and 2.08] ADDITIONAL: The Loop Position is NOT zeroed when the pattern changes, so if set to row X previously, and on some other pattern does not re-set it, a loop effect will loop to the same row. (In Scream Tracker 3 S3M-format, the loop-position is reset to 0 always when the pattern changes! Impulse Tracker [2.14 at least] is similar to FT2, it also uses the latest parameter.) E9x - Retrig note ------------------ ... EEx - Pattern delay -------------------- This effect works otherwise normally, BUT: FT2 simply forgets to play/update other effects on the row when there's a Pattern Delay: 01|--- -- EB1|--- -- EE5|... The Fine Volume Slide Down (EB1) won't be played here, thought it should be updated five times (EE5)! [Tested with: 2.04, 2.06 and 2.08] Fxx - Set Speed / Tempo ------------------------ if (Param > 0) then if (Param <= $1F) then Speed = Param; else Tempo = Param; As you notice, a zero parameter should be ignored. Kxx - Key Off ( also note number 97 ) -------------------------------------- The parameter of this effect does not have any meaning. (At least any that I would be aware of) This effect does the same as note-number 97 dec, in practice, it "releases" the virtual "key" or note. See description of Instruments and Envelopes above for more info. Lxx - Set envelope position ---------------------------- Set the current position in the envelopes to FRAME number XX, between 00-FFh. (See also Envelope-description section for more information) This command also re-triggers the ENVELOPES (not the note/sample though), so if the envelope had stopped, it will be reset (and set to the given offset position.) UNKNOWN: (TO-DO-list) - Does it reset other than framepos? (e.g. fadeout?) Pxx - Panning slide (*) ------------------------ ... Rxx - Multi retrig note (*) ---------------------------- ... Txx - Tremor ------------- ... ********************************* * Effects in volume column: * ********************************* All effects in the volume column should work as the standard effects. The volume column is interpreted before the standard effects, so some standard effects may override volume column effects. Value | Meaning ---------+----------------------------- 0 | Do nothing $10-$50 | Set volume (Value-$10) : | : : : | : : $60-$6f | Volume slide down $70-$7f | Volume slide up $80-$8f | Fine volume slide down $90-$9f | Fine volume slide up $a0-$af | Set vibrato speed $b0-$bf | Vibrato $c0-$cf | Set panning $d0-$df | Panning slide left $e0-$ef | Panning slide right $f0-$ff | Tone porta **************************************** * Volume column effect descriptions: * **************************************** Here are some notes on the volume column effects: (See also the WARNINGS in the normal effect explanation section!) 1) Volume slides (normal and fine) DO NOT remember their parameters and are NOT connected with the "normal volume effects". Examples: C-4 01 -- 000 >> Starts playing inst #1 at C-4 ... .. -1 000 >> Lowers volume of channel by 1 ... .. -0 000 >> Does not do ANYTHING! ... .. -- 000 >> The above applies to all volume column volume slide effects. 2) Vibrato effect DOES REMEMBER it's parameters and IS connected (shares saved parameters) with "normal effect vibrato". Examples: C-4 01 S5 000 >> S5 sets vibrato speed to 5 ... .. V1 000 >> V1 starts vibrating with speed 5 and depth of 1 ... .. V0 000 >> continues vibrating witht depth of 1 ... .. V0 000 >> and same as above.. ... .. 00 400 >> !! still vibrates with same params! ... .. 00 400 >> !! and same as above.. ... .. V0 400 >> !! _doubles_ the vibration (as expected) This means that volume column effects "Sx" with "Vy" are equal to normal effect "4xy"! 3) Tone portamento effect DOES REMEMBER it's parameters and IS connected (shares saved parameters) with "normal porta effect" parameter. (See also notes about the effect 3xx!) Examples: C-4 01 -- 000 >> Starts playing inst #1 at C-4 ... .. -- 000 C-6 01 M1 000 >> M1 starts bending to C-6 with speed of 1 ... .. -- 000 ... .. M0 000 >> continues bending to C-6 with speed of 1 ... .. -- 000 ... .. -- 300 >> !! continues bending to C-6 with speed of 1 This means that volume column effect "Mx" is equal to normal effect "30x"! ************************** * Bugs/Features of FT2 * ************************** There are few known "features" in FT2's player system, which could be considered "bugs", but since we are thinking only about playing an XM correctly, they should be considered features which need to be implemented. Here's a list of these features: - Pattern Loop replay features. See description of effect E6x for more information. - Pattern Delay replay feature. See description of effect EEx for more information. Here is a list of REAL BUGS which should be attributed by the FastTracker 2 maintainers: - Effect parameters not initialized/zeroed when playing starts. During my tests on FT2 I found out that on effects that "remember" their parameters (e.g. save the previous non zero parameter), FT2 DOES NOT CLEAR THE SAVE VALUES when it starts playing! This means that if you use this kind effect with zero before using non zero value on that effect and channel, results are UNDEFINED! This may affect the playing of some modules! (Tested on FT2.08/2.06) - Bugs in Pattern Loop effect. See description of effect E6x for more information. ********************************** * Other trackers and detecting * ********************************** Aside from the programs mentioned here, there are number of conversion utilities and other trackers that are capable of saving to XM-format. Some of those don't do it properly and might set the identification tags (TrackerName, format version) identical to FT2, etc. SoundTracker ------------ An "FT2 clone" for Unixes, a GNU GPL licensed tracker running under X Window System and Gtk+ toolkit. Supports at least x86 based platforms. Platform : Linux and other UNIX-type OS Author : Michael Krause Available : http://www.soundtracker.org/ TrackerName TAG: "rst's SoundTracker " (last empty characters are spaces, ASCII 32 dec) Provides also extra effects: Qxx - Set LP Filter Resonance Zxx - Set LP Filter Cut-Off Frequency These effects are also supported by OpenCP player, from which the player code has been taken from to SoundTracker. (More info about these effects can be got from SoundTracker and/or OpenCP sourcecode which are available under GNU GPL license) DigiTrakker ----------- A quite tracker in it's own, Shareware. I don't know whether it is maintained anymore. Platform : DOS (at least) Author : prodatron/n-Factor Available : ??? (search the Internet) TrackerName TAG: Changes This is a quite special case. DigiTrakker misuses the TrackerName TAG and puts the name of the composer there, if there is any set. This behavior makes it very hard to detect XMs made with DigiTrakker. IT2XM ----- Not really a tracker, but a Impulse Tracker (.IT) to XM format converter. Platform : DOS Author : Andy Voss (Phoenix/Hornet) Available : ??? TrackerName TAG: Identical to FT2 Due to differences in IT's XM-replay and differences in IT/XM formats in general, it is not possible to accurately replay an converted XM. And since the trackername-tag is identical to FT2's, abandon all hope... ********************** * Other documents? * ********************** I highly recommend that you also read other material available, even the ones for other formats since they might help you to understand the design choices behind FT2. Here is a list of docs I have read and found useful in creation of JSS and this document: - Extended Module Player (XMP)'s technical documents by Claudio Matsuoka and Hipolito Carraro Jr. [http://xmp.helllabs.org/] - Firelight's (Brett Paterson) FMODDOC (and FS3MDOC) - ProTracker 2.1A player source and v3.61 format documentation. - And of course the documents mentioned in the "credits" section of this file. They contained valuable information that I used as a very basis of this doc. Thanks to the writers of above docs, it would not have been possible to write JSS or this doc without you! All the documents are available at the J Sound System's homepage: http://jss.sf.net/moddoc/ ***************** * Final Words * ***************** That's it. 'nuff said. Too much talk, far too less deeds done. Questions? Send me some e-mail. MilkyTracker-1.02.00/resources/reference/xmeffects.html000066400000000000000000000501101324432207300230720ustar00rootroot00000000000000 XM effects comprehensive help

    XM Effects Comprehensive Help

    Abbreviations: ST means SoundTracker, FT2 — Fasttracker V.2.

    FT2 (and hence ST) has a separate track column for effects. Some widely-used effects can also be implemented using volume column.

    Effects placed in the effects column

    The effects in FT2 (and also ST) are being written in three fields: first (number or letter) means effect type, second and third — effect parameter(s). Effects may have one parameter with the byte lenght or two with nibble lengths. In this table the first case is denoted as "xx" after the effect type, the second — as "xy". For instance, 1xx is the one-parameter effect, and 0xy — two-parameters one.
    Mnemonic Name Parameter(s) Description Comments
    Standard FT2 effects
    0xy Arpegio 1st halftone, 2nd halftone First tick the note is played, the next tick — note + x halftones, the next tick — note + y halftones, then repeat from the beguinning. For instance: C-1 037: first is played C1, then C1 + 3 ht = Eb1, then — C1 + 7 ht = G1 and then again C1 and so on...  
    1xx/2xx* Portamento up/down Speed This command is used to slide the sample pitch up or down. This is done using the speed value. If Amiga frequence table is used, the sliding will be non-linear (the speed depends on the frequency). Actually sliding (really tone stepping) is being performed at every tick since command is active. So the final tone depends on the "Speed" parameter. This is true for all slide/portamento commands.
    3xx* Tone portanemto Speed This command is used together with a note, and will slide to its frequency. If glissando mode is set (by E3x command), the frequency will be rounded to the nearest halftone ST has some quirk here: the tone stepping is performed at every tick except first. So if we use two successive 3xx command, during the first tick of the second line we'll obtain the same tone as at the last tick of the previous line (no stepping when line is changing). So there will be no time-linear portamento, alas :( But this isn't notable at normal BPM.
    4xy* Vibrato Rate, depth Adds (frequency) vibrato to the channel with a specified rate and speed. Set vibrato mode command (E4x) can be used to change the vibrato waveform (see below).  
    5xy* Tone portamento + volume slide Up speed, down speed (see volume slide (Axy)) This command execute both tone portamento and volume slide. The speed is used for the volume slide. The tone portamento speed is being taken from the previous appearance of the tone portamento (3xx) effect.
    6xy* Vibrato + volume slide Up speed, down speed (see volume slide (Axy)) This command execute both tone portamento and volume slide. The speed is used for the volume slide. See comment for 5xy.
    7xy* Tremolo Rate, depth The same like vibrato (4xy) but affects the sound amplitude rather then the frequency.  
    8xy Set panning position Position 0x00 — leftmost, 0xff — rightmost.  
    9xx Sample offset Offset This command should be used together with a note. The sample will be played from (offset * 0x100) instead of zero.  
    Axy* Volume slide Up speed, down speed Slides the current volume up or down. Either up speed or down speed should be zero  
    Bxx Position jump Position This command will cause jump to the selected song postion and play pattern from the beginning  
    Cxx Set volume Volume Sets the current volume of the track where the command is, just like volume column. The volume should not be greater than 0x40  
    Dxx Pattern break Pattern position This command will cause jump to the next pattern and play from the selected position  
    E0x Set filter mode (Amiga only) Mode I don't have Amiga so I can say nothing about how this command works.  
    E1x/E2x* Fine portamento up/down Speed This command works as portamento up/down, but the sliding occurs only one time per line.  
    E3x Set glissando mode Mode If mode = 1, the resulting frequency after implementing this command will be rounded to the nearest halftone.  
    E4x Set vibrato mode Mode Mode: 0 — sine, 1 — ramp down, 2 — square. If you add 4 to the mode, the waveform will not be retrigged when a new instrument is played  
    E5x Set fine-tune Tune This command should be used together with a note. It will cause another fine-tune value to be used.  
    E6x Pattern loop Count If count is zero, the beginning of the loop will be specified. When a non-zero value is used, the pattern will be looped from a loop start by a given number of times.  
    E7x Set tremolo mode Mode See E4x (set vibrato control), but for the tremolo waveform.  
    E9x Retrig note Interval Retrigs note with the specified interval. Realization of this command in ST (v. <= 0.6.8) has a bug: effect is not working when BPM / 53 < Interval, the effect is not working.
    EAx/EBx* Fine volume slide up/down Speed This command works as usual volume slide up/down, but the sliding occurs only one time per line.  
    ECx Note cut Tick Cut the note at the specified tick. Note that it will only set the volume to zero, and the sample will still be played. EC0 combination doesn't work in ST. But hopefully its rather useless, 'cause it can be replaced by simply setting volume to zero.
    EDx Note delay Ticks This command will delay the note by the selected number of ticks.  
    EEx Pattern delay Lines This command will delay pattern by the selected number of tracker lines Realization of this command in ST is extremly buggy. The delay produced by it is right, but: 1) just before the pause, in the place where this command is met, the note in the track where the command is, is played nevertheless; 2) other notes placed in the same line as EEx command will not be played after the pause left.
    Fxx Set speed Speed or BPM This command will set the speed or BPM value of the song. If value is less than 0x20, the speed will be changed. Othervise, the BPM value will be changed.  
    Gxx Set glibal volume Volume Sets the global volume. The value should not exceed 0x40. In ST valuse greater than 0x40 work as they would be equal to 0x40.
    Hxy* Global volume slide Up speed, down speed Works exactly as volume slide, but it slides the global volume instead.  
    Lxx Set envelope position Position Changes the envelope position (measured in ticks, as in the instrument editor).  
    Pxy Panning slide Right speed, left speed Slides the panning position. Works like the volume slide.  
    Rxy* Extended retrig Volume change, interval This is an extended version of the retrig command. Volume is changed according to the following table:
    None   Unused
    1-19+1
    2-2A+2
    3-4B+4
    4-8C+8
    5-16D+16
    6*2/3E*3/2
    7*1/2F*2
    Realization of this effect in FT2 has the bug: the first repeat is appeared not after at the tick set by interval, but at the interval - 1 tick (and then the note is played at 2 * interval - 1, 3 * interval - 1 tick and so on. ST realization of this effect has the same bug as E9x effect, so it's hardly to trace, whether its behavior copies that of FT2 or not.
    Txy Tremor On time, off time This effect will set the volume to zero during off time number of ticks, and then restore the volume back during ofn time number of ticks.  
    X1x/X2x* Extra fine portamento up/down Speed Works like fine portamento up/down, but the speed will be divided by four.  
    Extended effects (ST only)
    Zxx LP filter cutoff Frequency This will set the cutoff frequency of the lowpass filter. To switch off the filter, you must use Zff and Q00.
    Qxx LP filter quality Quality This will set the quality (resonance) of the lowpass filter.
    Notes:
    * If the data byte is zero, the last nonzero byte for the command will be used.

    Effects in the volume column

    "x" in the name column means parameter.

    Volume Name Analogic effect in the effect column
    0x Nothing
    10 - 50 Set volume Value - 0x10
    6x Volume slide down A0x
    7x Volume slide up Ax0
    8x Fine volume slide down EBx
    9x Fine volume slide up EAx
    ax Set vibrato speed One half of 4xy
    bx Vibrato, the parameter is the depth. Second half of 4xy
    cx Set panning 8x0
    dx Panning slide left P0x
    ex Panning slide right Px0
    fx Tone porta 3x0

    Some more XM features

    XM format also contains some features which are actually not effects, but often cause misunderstanding. First, one should remember that each pattern line is divided into some ticks. The number of ticks per line is set by "Speed" parameter. The number of processed ticks per second is determined by "BPM" parameter according to the formula: ticks per second = BPM * 2 / 5.

    In the instrument editor: One time unit in the volume envelope is equal to one tick. The "Fadeout" parameter determines the time of the sound decay after the key will be released. ST has the following strangeness here: in the editing mode the fadeout is implemented independently on the volume envelope. But while the module playing the fadeout acts only if the volume envelope is turned on.

    Frequency table: if the linear table is selected, the frequency shift will be performed at the constant speed independently on the current frequency.

    This document is composed using xm.txt file, FT2 embedded help, ST cheat sheet and my own experience.

    (C) Yury Aliaev 2006. Distributed under the terms of GNU FDL.



    MilkyTracker-1.02.00/src/000077500000000000000000000000001324432207300150425ustar00rootroot00000000000000MilkyTracker-1.02.00/src/compression/000077500000000000000000000000001324432207300174035ustar00rootroot00000000000000MilkyTracker-1.02.00/src/compression/AIFFWriter.h000066400000000000000000000143301324432207300214570ustar00rootroot00000000000000/* File: AIFFWriter.h Author: QuickTime DTS Change History (most recent first): <1> 11/10/05 initial release Copyright 2005 - 2006 Apple Computer, Inc. All rights reserved. IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in consideration of your agreement to the following terms, and your use, installation, modification or redistribution of this Apple software constitutes acceptance of these terms. If you do not agree with these terms, please do not use, install, modify or redistribute this Apple software. In consideration of your agreement to abide by the following terms, and subject to these terms, Apple grants you a personal, non-exclusive license, under Apple's copyrights in this original Apple software (the "Apple Software"), to use, reproduce, modify and redistribute the Apple Software, with or without modifications, in source and/or binary forms; provided that if you redistribute the Apple Software in its entirety and without modifications, you must retain this notice and the following text and disclaimers in all such redistributions of the Apple Software. Neither the name, trademarks, service marks or logos of Apple Computer, Inc. may be used to endorse or promote products derived from the Apple Software without specific prior written permission from Apple. Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by Apple herein, including but not limited to any patent rights that may be infringed by your derivative works or by other works in which the Apple Software may be incorporated. The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #import #import #import #import // maximum size in frames of the MovieAudioExtractionFillBuffer calls #define kMaxExtractionPacketCount 4096 // this object is busy exporting error code #define kObjectInUseErr 1000 // constants for shouldContinueOperation delegate method typedef enum { AIFFWriterExportBegin = 0, AIFFWriterExportPercent = 10, AIFFWriterExportEnd = 20 } AIFFWriterExportOperationPhase; // ProgressInfo object passed back to the delegate // if it implements shouldContinueOperationWithProgressInfo: // progressValue will contain a valid NSNumber object with a // value between 0 and 1.0 when phase is AIFFWriterExportPercent @interface AIFFWriterProgressInfo : NSObject { @private AIFFWriterExportOperationPhase phase; // one of the state enums NSNumber *progressValue; // value is between 0 and 1.0 valid only for AIFFWriterExportPercent phase NSError *exportStatus; } - (AIFFWriterExportOperationPhase)phase; - (NSNumber *)progressValue; - (NSError *)exportStatus; @end // invoked on a delegate to provide progress @interface NSObject (AIFFWriterExportDelegate) - (BOOL)shouldContinueOperationWithProgressInfo:(id)inProgressInfo; @end // AIFFWriter object // A single instance of this object can be used to extract audio // from a QuickTime movie (via a QTKit Movie object) and will write // an AIFF file preserving the audio layout from the Movie @interface AIFFWriter : NSObject { @private NSString *mFileName; // file name for the new .aiff file FSRef mFileRef; // file reference for this file FSRef mParentRef; QTMovie *mQTMovie; // movie to extract audio from Float64 mMovieDuration; // movie duration Movie mCloneMovie; // copy of the source movie for thread migration MovieAudioExtractionRef mAudioExtractionSession; // QT Audio Extraction Session Reference BOOL mExtractionComplete; // are we done yet? BOOL mIsExporting; // is the object busy SInt64 mLocationInFile; // location to write new data SInt64 mSamplesRemaining; // how much more do we need to pull from the source? SInt64 mSamplesCompleated; // hom much have we done - used to drive progress UI SInt64 mTotalNumberOfSamples; // total number of samples to extract AudioStreamBasicDescription mSourceASBD; // audio stream basic description of the source movie AudioStreamBasicDescription mOutputASBD; // the asbd we're asking for AudioChannelLayout * mExtractionLayoutPtr; // the audio channel layout of the source UInt32 mExtractionLayoutSize; // the size of the audio chanel layout AudioFileID mExportFileID; // file identifier for the new .aiff file NSLock * mLock; // lock protecting reentrance AIFFWriterProgressInfo * mProgressInfo; // progress info object passed to the progress callback id mDelegate; // a delegate object to call with progress info... BOOL mDelegateShouldContinueOp; // ...but only if it actually implemented the callback } - (OSStatus)exportFromMovie:(QTMovie *)inMovie toFile:(NSString *)inFullPath; - (BOOL)isExporting; @end // the client of AIFFWriter should set itself as a delegate if it // wants to handle shouldContinueOperationWithProgressInfo @interface AIFFWriter (AIFFWriterDelegate) - (id)delegate; - (void)setDelegate:(id)delegate; @end MilkyTracker-1.02.00/src/compression/AIFFWriter.m000066400000000000000000000610061324432207300214660ustar00rootroot00000000000000/* File: AIFFWriter.m Author: QuickTime DTS Change History (most recent first): <2> 03/24/06 must pass NSError objects to exportCompleted <1> 11/10/05 initial release Copyright 2005-2006 Apple Computer, Inc. All rights reserved. IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in consideration of your agreement to the following terms, and your use, installation, modification or redistribution of this Apple software constitutes acceptance of these terms. If you do not agree with these terms, please do not use, install, modify or redistribute this Apple software. In consideration of your agreement to abide by the following terms, and subject to these terms, Apple grants you a personal, non-exclusive license, under Apple's copyrights in this original Apple software (the "Apple Software"), to use, reproduce, modify and redistribute the Apple Software, with or without modifications, in source and/or binary forms; provided that if you redistribute the Apple Software in its entirety and without modifications, you must retain this notice and the following text and disclaimers in all such redistributions of the Apple Software. Neither the name, trademarks, service marks or logos of Apple Computer, Inc. may be used to endorse or promote products derived from the Apple Software without specific prior written permission from Apple. Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by Apple herein, including but not limited to any patent rights that may be infringed by your derivative works or by other works in which the Apple Software may be incorporated. The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* AIFFWriter is a simple class encapsulating the functionality of two sets of APIs; QuickTime's Audio Extraction API's and Core Audio's Audio File APIs. It let's clients of this class perform audio extraction from a QTKit QTMovie object to AIFF files using a single method call. Note that this class uses the default extraction channel layout which is the aggregate channel layout of the movie (for example, all Rights mixed together, all Left Surrounds mixed together, etc). Because we're writing a file the stream description for the output is modified from the default (32-bit float, de-interleaved) to 16-bit, interleaved big endian. The sample rate will be set to the highest sample rate found in the movie. For more information regarding newer audio capabilities of QuickTime, please see the QuickTime 7 Update Guide: http://developer.apple.com/documentation/QuickTime/Conceptual/QT7UpdateGuide/Chapter02/chapter_2_section_6.html */ #import "AIFFWriter.h" #pragma mark ---- AIFFWriterProgressInfo ---- // AIFFWriterProgressInfo is the object passed back to the progress callback // if implemented by the client. It contains information regarding the current // state of the export session which can be used to drive a UI. @interface AIFFWriterProgressInfo (Private) - (void)setPhase:(AIFFWriterExportOperationPhase)value; - (void)setProgressValue:(NSNumber *)value; - (void)setExportStatus:(NSError *)status; @end @implementation AIFFWriterProgressInfo - (AIFFWriterExportOperationPhase)phase { return phase; } - (NSNumber *)progressValue { return [[progressValue retain] autorelease]; } - (void)setPhase:(AIFFWriterExportOperationPhase)value { phase = value; } - (void)setProgressValue:(NSNumber *)value { if (progressValue != value) { [progressValue release]; progressValue = [value copy]; } } - (NSError *)exportStatus { return [[exportStatus retain] autorelease]; } - (void)setExportStatus:(NSError *)status { if (exportStatus != status) { [exportStatus release]; exportStatus = [status copy]; } } - (void) dealloc { [progressValue release]; [exportStatus release]; [super dealloc]; } @end #pragma mark ---- AIFFWriter private interface ---- @interface AIFFWriter (Private) - (OSStatus)extractAudioToFile:(SInt64 *)ioNumSamples; - (OSStatus)getDefaultExtractionInfo; - (OSStatus)configureExtractionSessionWithMovie:(Movie)inMovie; - (void)exportOnMainThreadCallBack:(id)inObject; - (void)exportExtractionOnWorkerThread:(id)inObject; - (void)setMovieExtractionDuration; - (void)exportCompletedNotification:(NSError *)inError; @end @implementation AIFFWriter #pragma mark ---- initialization/dealocation ---- - (id)init; { if (self = [super init]) { mLock = [[NSLock alloc] init]; mProgressInfo = [[AIFFWriterProgressInfo alloc] init]; } return self; } - (void)dealloc { if (mFileName) { [mFileName release]; } if (mAudioExtractionSession){ MovieAudioExtractionEnd(mAudioExtractionSession); } if (mQTMovie) { [mQTMovie release]; } if (mExtractionLayoutPtr) { free(mExtractionLayoutPtr); } [mLock release]; [mProgressInfo release]; [super dealloc]; } #pragma mark ---- public ---- // main method call that will produce an AIFF file - it will try to // export the movie on a separate thread but if it can't will schedule // callbacks on the main thread - (OSStatus)exportFromMovie:(QTMovie *)inMovie toFile:(NSString *)inFullPath { BOOL continueExport = YES; Handle cloneHandle = NULL; NSString *directory; OSStatus err = noErr; // sanity if (nil == inMovie || nil == inFullPath) return paramErr; // if we're busy already doing an export return if (![mLock tryLock]) return kObjectInUseErr; mIsExporting = YES; // if the client implemented a progress proc. call it now if (TRUE == mDelegateShouldContinueOp) { [mProgressInfo setPhase:AIFFWriterExportBegin]; [mProgressInfo setProgressValue:nil]; [mProgressInfo setExportStatus:nil]; continueExport = [[self delegate] shouldContinueOperationWithProgressInfo:mProgressInfo]; if (NO == continueExport) goto bail; } directory = [inFullPath stringByDeletingLastPathComponent]; mFileName = [[NSString alloc] initWithString:[inFullPath lastPathComponent]]; // retain the QTMovie object passed in, we need it for the duration of // the export regardless of what the client decides to do with it mQTMovie = [inMovie retain]; // if the file already exists, delete it err = FSPathMakeRef((const UInt8*)[inFullPath fileSystemRepresentation], &mFileRef, false); if (err == noErr) { err = FSDeleteObject(&mFileRef); if (err) goto bail; } err = FSPathMakeRef((const UInt8*)[directory fileSystemRepresentation], &mParentRef, NULL); if (err) goto bail; // set the movies extraction duration in floating-point seconds [self setMovieExtractionDuration]; while (mIsExporting) [self exportOnMainThreadCallBack:nil]; bail: if (cloneHandle) DisposeHandle(cloneHandle); if (err) [self exportCompletedNotification:err]; return err; } - (BOOL) isExporting { return mIsExporting; } #pragma mark ---- private ---- // this callback is scheduled on the main thread - In order to keep from locking up the UI, // it does one slice of export, writes it to file and then reschedule itself -(void)exportOnMainThreadCallBack:(id)inObject { BOOL continueExport = YES; OSStatus err; // prepare for extraction if this is the first entry if (NULL == mAudioExtractionSession) { err = [self configureExtractionSessionWithMovie: [mQTMovie quickTimeMovie]]; if (err) goto bail; } // create the file if (0 == mExportFileID) { err = AudioFileCreate(&mParentRef, (CFStringRef)mFileName, kAudioFileAIFFType, &mOutputASBD, 0, &mFileRef, &mExportFileID); if (err) goto bail; // set the channel labels we grabbed from the source if (NULL != mExtractionLayoutPtr) { err = AudioFileSetProperty(mExportFileID, kAudioFilePropertyChannelLayout, mExtractionLayoutSize, (void *)mExtractionLayoutPtr); if (err) goto bail; } } // on entry if there's no samples left we're done if (mSamplesRemaining == 0) mExtractionComplete = YES; // perform some extraction if (!mExtractionComplete) { // if the client implemented a progress proc. call it now if (TRUE == mDelegateShouldContinueOp) { NSNumber *progressValue = [NSNumber numberWithFloat:(float)((float)mSamplesCompleated / (float)mTotalNumberOfSamples)]; [mProgressInfo setPhase:AIFFWriterExportPercent]; [mProgressInfo setProgressValue:progressValue]; [mProgressInfo setExportStatus:nil]; continueExport = [[self delegate] shouldContinueOperationWithProgressInfo:mProgressInfo]; if (NO == continueExport) { err = userCanceledErr; } } // read numSamplesThisSlice number of samples SInt64 numSamplesThisSlice = mSamplesRemaining; if ((numSamplesThisSlice > kMaxExtractionPacketCount) || (numSamplesThisSlice == -1)) numSamplesThisSlice = kMaxExtractionPacketCount; // extract the audio and write it to the file err = [self extractAudioToFile:&numSamplesThisSlice]; if (err) goto bail; if (mSamplesRemaining != -1) { mSamplesRemaining -= numSamplesThisSlice; mSamplesCompleated += numSamplesThisSlice; if (mSamplesRemaining == 0) mExtractionComplete = YES; } } bail: if (err || mExtractionComplete) { // we're done either way so close the file if (mExportFileID) AudioFileClose(mExportFileID); if (err && mExportFileID) { // if we erred out, delete the file FSDeleteObject(&mFileRef); mExportFileID = 0; } // call the completion routine to clean up [self exportCompletedNotification:[NSError errorWithDomain:NSOSStatusErrorDomain code:err userInfo:nil]]; } /* else { // reschedule to perform this routine again on the next run loop cycle [self performSelectorOnMainThread:@selector(exportOnMainThreadCallBack:) withObject:(id)nil waitUntilDone:NO]; }*/ } // this method will be performed on a background thread - (void)exportExtractionOnWorkerThread:(id)inObject { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; BOOL continueExport = YES; OSStatus err; [NSThread setThreadPriority:[NSThread threadPriority]+.1]; // attach the movie to this thread err = EnterMoviesOnThread(0); if (err) goto bail;; err = AttachMovieToCurrentThread(mCloneMovie); if (err) goto bail; // prepare for extraction if (NULL == mAudioExtractionSession) { err = [self configureExtractionSessionWithMovie:mCloneMovie]; if (err) goto done; } // create the file if (0 == mExportFileID) { err = AudioFileCreate(&mParentRef, (CFStringRef)mFileName, kAudioFileAIFFType, &mOutputASBD, 0, &mFileRef, &mExportFileID); if (err) goto done; // set the channel labels we grabbed from the source if (NULL != mExtractionLayoutPtr) { err = AudioFileSetProperty(mExportFileID, kAudioFilePropertyChannelLayout, mExtractionLayoutSize, (void *)mExtractionLayoutPtr); if (err) goto done; } } // loop until stopped from an external event, or finished the entire extraction while (YES == continueExport && NO == mExtractionComplete) { if (mSamplesRemaining == 0) mExtractionComplete = YES; if (!mExtractionComplete) { // if the client implemented a progress proc. call it now we wait for the // progress fuction to return before continuing so we can check the return code if (TRUE == mDelegateShouldContinueOp) { NSNumber *progressValue = [NSNumber numberWithFloat:(float)((float)mSamplesCompleated / (float)mTotalNumberOfSamples)]; [mProgressInfo setPhase:AIFFWriterExportPercent]; [mProgressInfo setProgressValue:progressValue]; [mProgressInfo setExportStatus:nil]; [[self delegate] performSelectorOnMainThread:@selector(shouldContinueOperationWithProgressInfo:) withObject:(id)mProgressInfo waitUntilDone:YES]; continueExport = [[self delegate] shouldContinueOperationWithProgressInfo:mProgressInfo]; if (NO == continueExport) { err = userCanceledErr; break; } } // read numSamplesThisSlice number of samples SInt64 numSamplesThisSlice = mSamplesRemaining; if ((numSamplesThisSlice > kMaxExtractionPacketCount) || (numSamplesThisSlice == -1)) numSamplesThisSlice = kMaxExtractionPacketCount; // extract the audio and write it to the file err = [self extractAudioToFile:&numSamplesThisSlice]; if (err) break; if (mSamplesRemaining != -1) { mSamplesRemaining -= numSamplesThisSlice; mSamplesCompleated += numSamplesThisSlice; } } } done: // detach the exported movie from this thread DetachMovieFromCurrentThread(mCloneMovie); ExitMoviesOnThread(); if (mExportFileID) AudioFileClose(mExportFileID); if (err && mExportFileID) { // if we erred out, delete the file FSDeleteObject(&mFileRef); mExportFileID = 0; } bail: // call the completion routine to clean up on the main thread [self performSelectorOnMainThread:@selector(exportCompletedNotification:) withObject:(id)[NSError errorWithDomain:NSOSStatusErrorDomain code:err userInfo:nil] waitUntilDone:NO]; [pool release]; } // extract a slice of PCM audio and write it to an AIFF file - audio extraction proceeds serially // from the last position, 'ploc' specifies the file offset that this buffer should be written to // could be optimized by supplying a buffer, but for now it is simply allocated and released in each call - (OSStatus)extractAudioToFile:(SInt64 *)ioNumSamples { AudioBufferList bufList; UInt32 bufsize; char *buffer = NULL; UInt32 flags; UInt32 numFrames; OSStatus err; numFrames = *ioNumSamples; bufsize = (numFrames * mOutputASBD.mBytesPerFrame); buffer = (char *)malloc(bufsize); if (NULL == buffer) { err = memFullErr; goto bail; } // always extract interleaved data, since that's all we can write to an AIFF file bufList.mNumberBuffers = 1; bufList.mBuffers[0].mNumberChannels = mOutputASBD.mChannelsPerFrame; bufList.mBuffers[0].mDataByteSize = bufsize; bufList.mBuffers[0].mData = buffer; // read the number of requested samples from the movie err = MovieAudioExtractionFillBuffer(mAudioExtractionSession, &numFrames, &bufList, &flags); if (err) goto bail; // write it to the file if (numFrames > 0) { err = AudioFileWritePackets(mExportFileID, false, numFrames * mOutputASBD.mBytesPerPacket, NULL, mLocationInFile, &numFrames, buffer); if (err) goto bail; mLocationInFile += numFrames; } bail: if (NULL != buffer) free(buffer); if (err) numFrames = 0; *ioNumSamples = numFrames; mExtractionComplete = (flags & kQTMovieAudioExtractionComplete); return err; } // get the default extraction layout for this movie, expanded into individual channel descriptions // NOTE: the channel layout returned by this routine must be deallocated by the client // If 'asbd' is non-NULL, fill it with the default extraction asbd, which contains the // highest sample rate among the sound tracks that will be contributing. // 'outLayoutSize' and 'asbd' may be nil. - (OSStatus)getDefaultExtractionInfo { OSStatus err; // get the size of the extraction output layout err = MovieAudioExtractionGetPropertyInfo(mAudioExtractionSession, kQTPropertyClass_MovieAudioExtraction_Audio, kQTMovieAudioExtractionAudioPropertyID_AudioChannelLayout, NULL, &mExtractionLayoutSize, NULL); if (err) goto bail; // allocate memory for the layout mExtractionLayoutPtr = (AudioChannelLayout *)calloc(1, mExtractionLayoutSize); if (NULL == mExtractionLayoutPtr) { err = memFullErr; goto bail; } // get the layout for the current extraction configuration err = MovieAudioExtractionGetProperty(mAudioExtractionSession, kQTPropertyClass_MovieAudioExtraction_Audio, kQTMovieAudioExtractionAudioPropertyID_AudioChannelLayout, mExtractionLayoutSize, mExtractionLayoutPtr, NULL); if (err) goto bail; // get the audio stream basic description err = MovieAudioExtractionGetProperty(mAudioExtractionSession, kQTPropertyClass_MovieAudioExtraction_Audio, kQTMovieAudioExtractionAudioPropertyID_AudioStreamBasicDescription, sizeof(AudioStreamBasicDescription), &mSourceASBD, NULL); bail: return err; } // this method prepare the specified movie for extraction by opening an extraction session, configuring // and setting the output ASBD and the output layout if one exists - it also sets the start time to 0 // and calculates the total number of samples to export - (OSStatus) configureExtractionSessionWithMovie:(Movie)inMovie { OSStatus err; // open a movie audio extraction session err = MovieAudioExtractionBegin(inMovie, 0, &mAudioExtractionSession); if (err) goto bail; err = [self getDefaultExtractionInfo]; if (err) goto bail; // set the output ASBD to 16-bit interleaved PCM big-endian integers // we start with the default ASBD which has set the sample rate to the // highest rate among all audio tracks mOutputASBD = mSourceASBD; mOutputASBD.mFormatID = kAudioFormatLinearPCM; mOutputASBD.mFormatFlags = kLinearPCMFormatFlagIsSignedInteger | kAudioFormatFlagIsBigEndian | kAudioFormatFlagIsPacked; mOutputASBD.mFramesPerPacket = 1; mOutputASBD.mBitsPerChannel = 16; mOutputASBD.mBytesPerFrame = 2 * mOutputASBD.mChannelsPerFrame; mOutputASBD.mBytesPerPacket = 2 * mOutputASBD.mChannelsPerFrame; // set the extraction ASBD err = MovieAudioExtractionSetProperty(mAudioExtractionSession, kQTPropertyClass_MovieAudioExtraction_Audio, kQTMovieAudioExtractionAudioPropertyID_AudioStreamBasicDescription, sizeof(mOutputASBD), &mOutputASBD); if (err) goto bail; // set the output layout if (mExtractionLayoutPtr) { err = MovieAudioExtractionSetProperty(mAudioExtractionSession, kQTPropertyClass_MovieAudioExtraction_Audio, kQTMovieAudioExtractionAudioPropertyID_AudioChannelLayout, mExtractionLayoutSize, mExtractionLayoutPtr); if (err) goto bail; } // set the extraction start time - we always start at zero, but you don't have to TimeRecord startTime = { 0, 0, GetMovieTimeScale(inMovie), GetMovieTimeBase(inMovie) }; err = MovieAudioExtractionSetProperty(mAudioExtractionSession, kQTPropertyClass_MovieAudioExtraction_Movie, kQTMovieAudioExtractionMoviePropertyID_CurrentTime, sizeof(TimeRecord), &startTime); if (err) goto bail; // set the number of total samples to export mSamplesRemaining = mMovieDuration ? (mMovieDuration * mOutputASBD.mSampleRate) : -1; mTotalNumberOfSamples = mSamplesRemaining; bail: return err; } // calculate the duration of the longest audio track in the movie // if the audio tracks end at time N and the movie is much // longer we don't want to keep extracting - the API will happily // return zeroes until it reaches the movie duration -(void)setMovieExtractionDuration { TimeValue maxDuration = 0; UInt8 i; SInt32 trackCount = GetMovieTrackCount([mQTMovie quickTimeMovie]); if (trackCount) { for (i = 1; i < trackCount + 1; i++) { Track aTrack = GetMovieIndTrackType([mQTMovie quickTimeMovie], i, SoundMediaType, movieTrackMediaType); if (aTrack) { TimeValue aDuration = GetTrackDuration(aTrack); if (aDuration > maxDuration) maxDuration = aDuration; } } mMovieDuration = (Float64)maxDuration / (Float64)GetMovieTimeScale([mQTMovie quickTimeMovie]); } } // this completion method gets called at the end of the extraction session or may be called // earlier if an error has occured - its main purpose is to clean up the world so an AIFFWriter // instance can be used over and over again // // in this particular case if we completed successfully we launch QTPlayer with the .aif file // and if an error occurs we pass it back to the client though the progress info object - (void) exportCompletedNotification:(NSError *)inError { /*if (noErr == [inError code]) { CFURLRef url = CFURLCreateFromFSRef(kCFAllocatorDefault, &mFileRef); NSWorkspace *ws = [NSWorkspace sharedWorkspace]; [ws openFile:[(NSURL *)url path] withApplication:@"QuickTime Player"]; CFRelease(url); }*/ if (mFileName) { [mFileName release]; mFileName = nil; } if (mAudioExtractionSession){ MovieAudioExtractionEnd(mAudioExtractionSession); mAudioExtractionSession = NULL; } if (mQTMovie) { [mQTMovie release]; mQTMovie = nil; } mMovieDuration = 0; if (mCloneMovie) { DisposeMovie(mCloneMovie); mCloneMovie = NULL; } mExtractionComplete = NO; mIsExporting = NO; mLocationInFile = 0; mSamplesRemaining = 0; mSamplesCompleated = 0; mTotalNumberOfSamples = 0; if (mExtractionLayoutPtr) { free(mExtractionLayoutPtr); mExtractionLayoutPtr = NULL; } mExtractionLayoutSize = 0; mExportFileID = 0; [mLock unlock]; // if the client implemented a progress proc. call it now if (TRUE == mDelegateShouldContinueOp) { [mProgressInfo setPhase:AIFFWriterExportEnd]; [mProgressInfo setProgressValue:nil]; [mProgressInfo setExportStatus:([inError code] ? inError : nil)]; [[self delegate] shouldContinueOperationWithProgressInfo:mProgressInfo]; } } #pragma mark ---- delegate ---- // methods to support setting up a delegate of this class - (id)delegate { return mDelegate; } - (void)setDelegate:(id)inDelegate { mDelegate = inDelegate; mDelegateShouldContinueOp = [mDelegate respondsToSelector:@selector(shouldContinueOperationWithProgressInfo:)]; } @end MilkyTracker-1.02.00/src/compression/CMakeLists.txt000066400000000000000000000316121324432207300221460ustar00rootroot00000000000000# # src/compression/CMakeLists.txt # # Copyright 2016 Dale Whinham # # This file is part of MilkyTracker. # # MilkyTracker 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. # # MilkyTracker 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 MilkyTracker. If not, see . # set( SOURCES # AIFFWriter.m Decompressor.cpp DecompressorLZX.cpp DecompressorPP20.cpp DecompressorUMX.cpp PP20.cpp unlzx.cpp ) set( HEADERS # AIFFWriter.h Decompressor.h DecompressorLZX.h DecompressorPP20.h DecompressorUMX.h PP20.h unlzx.h ) # Under macOS and Windows, build sources from Git submodules if present if(APPLE OR WIN32) set(LHASA_SUBMODULE_DIR ${PROJECT_SOURCE_DIR}/src/submodules/lhasa) set(ZLIB_SUBMODULE_DIR ${PROJECT_SOURCE_DIR}/src/submodules/zlib) set(ZZIPLIB_SUBMODULE_DIR ${PROJECT_SOURCE_DIR}/src/submodules/zziplib) endif() # macOS: Build submodules using their own build systems if(APPLE) include(ExternalProject) # Collect compiler flags to pass to the external build systems set(EXTERNAL_C_FLAGS ${CMAKE_C_FLAGS}) set(EXTERNAL_CXX_FLAGS ${CMAKE_CXX_FLAGS}) if(CMAKE_BUILD_TYPE STREQUAL "Debug") set(EXTERNAL_C_FLAGS "${EXTERNAL_C_FLAGS} ${CMAKE_C_FLAGS_DEBUG}") set(EXTERNAL_CXX_FLAGS "${EXTERNAL_CXX_FLAGS} ${CMAKE_CXX_FLAGS_DEBUG}") elseif(CMAKE_BUILD_TYPE STREQUAL "Release") set(EXTERNAL_C_FLAGS "${EXTERNAL_C_FLAGS} ${CMAKE_C_FLAGS_RELEASE}" ) set(EXTERNAL_CXX_FLAGS "${EXTERNAL_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELEASE}" ) elseif(CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo") set(EXTERNAL_C_FLAGS "${EXTERNAL_C_FLAGS} ${CMAKE_C_FLAGS_RELWITHDEBINFO}" ) set(EXTERNAL_CXX_FLAGS "${EXTERNAL_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELWITHDEBINFO}" ) elseif(CMAKE_BUILD_TYPE STREQUAL "MinSizeRel") set(EXTERNAL_C_FLAGS "${SEXTERNAL_C_FLAGS} ${CMAKE_C_FLAGS_MINSIZEREL}" ) set(EXTERNAL_CXX_FLAGS "${EXTERNAL_CXX_FLAGS} ${CMAKE_CXX_FLAGS_MINSIZEREL}" ) endif() # Ensure our libraries match the deployment target of the main project if(CMAKE_OSX_DEPLOYMENT_TARGET) set(V_MIN_FLAG "-mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET}") set(EXTERNAL_C_FLAGS "${EXTERNAL_C_FLAGS} ${V_MIN_FLAG}") set(EXTERNAL_CXX_FLAGS "${EXTERNAL_CXX_FLAGS} ${V_MIN_FLAG}") endif() # Trim leading/trailing whitespace string(STRIP "${EXTERNAL_C_FLAGS}" EXTERNAL_C_FLAGS) string(STRIP "${EXTERNAL_CXX_FLAGS}" EXTERNAL_CXX_FLAGS) if(EXISTS ${LHASA_SUBMODULE_DIR}/lib/public/lhasa.h) message(STATUS "Found LHASA as a submodule") set(LHASA_DESTDIR ${CMAKE_BINARY_DIR}/src/submodules/lhasa) set(LHASA_FOUND ON CACHE INTERNAL "LHASA_FOUND") set(LHASA_INCLUDE_DIRS ${LHASA_DESTDIR}/include/liblhasa-1.0 CACHE INTERNAL "LHASA_INCLUDE_DIRS" ) set(LHASA_LIBRARIES ${LHASA_DESTDIR}/lib/liblhasa.a CACHE INTERNAL "LHASA_LIBRARIES" ) ExternalProject_Add(lhasa PREFIX ${LHASA_DESTDIR} SOURCE_DIR ${LHASA_SUBMODULE_DIR} CONFIGURE_COMMAND autoreconf -i && ./configure --prefix=${LHASA_DESTDIR} CFLAGS=${EXTERNAL_C_FLAGS} CXXFLAGS=${EXTERNAL_CXX_FLAGS} CC=${CMAKE_C_COMPILER} CXX=${CMAKE_CXX_COMPILER} BUILD_COMMAND make -j INSTALL_COMMAND make -j install BUILD_IN_SOURCE ON ) endif() if(EXISTS ${ZZIPLIB_SUBMODULE_DIR}/zzip/zzip.h) message(STATUS "Found ZZIPLIB as a submodule") # zziplib relies on xmlto to build its manpages, but if not found, its # build system fails at the docs target with an unhelpful error find_program(XMLTO xmlto) if (NOT XMLTO) message(WARNING "xmlto could not be found; building zziplib may fail" ) endif() set(ZZIPLIB_DESTDIR ${CMAKE_BINARY_DIR}/src/submodules/zziplib) set(ZZIPLIB_FOUND ON CACHE INTERNAL "ZZIPLIB_FOUND") set(ZZIPLIB_INCLUDE_DIRS ${ZZIPLIB_DESTDIR}/include CACHE INTERNAL "ZZIPLIB_INCLUDE_DIRS" ) set(ZZIPLIB_LIBRARIES ${ZZIPLIB_DESTDIR}/lib/libzzip.a CACHE INTERNAL "ZZIPLIB_LIBRARIES" ) ExternalProject_Add(zziplib PREFIX ${ZZIPLIB_DESTDIR} SOURCE_DIR ${ZZIPLIB_SUBMODULE_DIR} CONFIGURE_COMMAND ./configure --prefix=${ZZIPLIB_DESTDIR} --without-debug --disable-dependency-tracking CFLAGS=${EXTERNAL_C_FLAGS} CXXFLAGS=${EXTERNAL_CXX_FLAGS} CC=${CMAKE_C_COMPILER} CXX=${CMAKE_CXX_COMPILER} BUILD_COMMAND make -j INSTALL_COMMAND make -j install BUILD_IN_SOURCE ON ) endif() endif() # Windows: Build zlib using its own build system, build lhasa/zziplib by # rolling their sources into the compression library # FIXME: The latter is a bit of a hack, really if(WIN32) include(ExternalProject) if(EXISTS ${ZLIB_SUBMODULE_DIR}/zlib.h) message(STATUS "Found ZLIB as a submodule") set(ZLIB_DESTDIR ${CMAKE_BINARY_DIR}/src/submodules/zlib) set(ZLIB_FOUND ON CACHE INTERNAL "ZLIB_FOUND") set(ZLIB_INCLUDE_DIRS ${ZLIB_DESTDIR}/include CACHE INTERNAL "ZLIB_INCLUDE_DIRS" ) # zlib adds a 'd' suffix to debug builds of the library set(ZLIB_LIBRARIES debug ${ZLIB_DESTDIR}/lib/zlibstaticd.lib optimized ${ZLIB_DESTDIR}/lib/zlibstatic.lib CACHE INTERNAL "ZLIB_LIBRARIES" ) ExternalProject_Add(zlib PREFIX ${ZLIB_DESTDIR} SOURCE_DIR ${ZLIB_SUBMODULE_DIR} CMAKE_ARGS -DCMAKE_INSTALL_PREFIX= -DCMAKE_C_FLAGS_DEBUG=${CMAKE_C_FLAGS_DEBUG} -DCMAKE_C_FLAGS_RELEASE=${CMAKE_C_FLAGS_RELEASE} -DCMAKE_C_FLAGS_RELWITHDEBINFO=${CMAKE_C_FLAGS_RELWITHDEBINFO} -DCMAKE_C_FLAGS_MINSIZEREL=${CMAKE_C_FLAGS_MINSIZEREL} ) endif() if(EXISTS ${LHASA_SUBMODULE_DIR}/lib/public/lhasa.h) message(STATUS "Found LHASA as a submodule") set(LHASA_FOUND ON) set( LHASA_INCLUDE_DIRS ${LHASA_SUBMODULE_DIR}/lib ${LHASA_SUBMODULE_DIR}/lib/public ) set( LHASA_SOURCES ${LHASA_SUBMODULE_DIR}/lib/crc16.c ${LHASA_SUBMODULE_DIR}/lib/ext_header.c ${LHASA_SUBMODULE_DIR}/lib/lh1_decoder.c ${LHASA_SUBMODULE_DIR}/lib/lh5_decoder.c ${LHASA_SUBMODULE_DIR}/lib/lh6_decoder.c ${LHASA_SUBMODULE_DIR}/lib/lh7_decoder.c ${LHASA_SUBMODULE_DIR}/lib/lha_arch_unix.c ${LHASA_SUBMODULE_DIR}/lib/lha_arch_win32.c ${LHASA_SUBMODULE_DIR}/lib/lha_basic_reader.c ${LHASA_SUBMODULE_DIR}/lib/lha_decoder.c ${LHASA_SUBMODULE_DIR}/lib/lha_endian.c ${LHASA_SUBMODULE_DIR}/lib/lha_file_header.c ${LHASA_SUBMODULE_DIR}/lib/lha_input_stream.c ${LHASA_SUBMODULE_DIR}/lib/lha_reader.c ${LHASA_SUBMODULE_DIR}/lib/lhx_decoder.c ${LHASA_SUBMODULE_DIR}/lib/lz5_decoder.c ${LHASA_SUBMODULE_DIR}/lib/lzs_decoder.c ${LHASA_SUBMODULE_DIR}/lib/macbinary.c ${LHASA_SUBMODULE_DIR}/lib/null_decoder.c ${LHASA_SUBMODULE_DIR}/lib/pm1_decoder.c ${LHASA_SUBMODULE_DIR}/lib/pm2_decoder.c ) set(LHASA_HEADERS ${LHASA_SUBMODULE_DIR}/lib/crc16.h ${LHASA_SUBMODULE_DIR}/lib/ext_header.h ${LHASA_SUBMODULE_DIR}/lib/lha_arch.h ${LHASA_SUBMODULE_DIR}/lib/lha_basic_reader.h ${LHASA_SUBMODULE_DIR}/lib/lha_decoder.h ${LHASA_SUBMODULE_DIR}/lib/lha_endian.h ${LHASA_SUBMODULE_DIR}/lib/lha_file_header.h ${LHASA_SUBMODULE_DIR}/lib/lha_input_stream.h ${LHASA_SUBMODULE_DIR}/lib/macbinary.h ${LHASA_SUBMODULE_DIR}/lib/public/lha_decoder.h ${LHASA_SUBMODULE_DIR}/lib/public/lha_file_header.h ${LHASA_SUBMODULE_DIR}/lib/public/lha_input_stream.h ${LHASA_SUBMODULE_DIR}/lib/public/lha_reader.h ${LHASA_SUBMODULE_DIR}/lib/public/lhasa.h ) source_group(lhasa FILES ${LHASA_SOURCES} ${LHASA_HEADERS}) list(APPEND SOURCES ${LHASA_SOURCES}) list(APPEND HEADERS ${LHASA_HEADERS}) endif() if(EXISTS ${ZZIPLIB_SUBMODULE_DIR}/zzip/zzip.h) message(STATUS "Found ZZIPLIB as a submodule") set(ZZIPLIB_FOUND ON) set(ZZIPLIB_INCLUDE_DIRS ${ZZIPLIB_SUBMODULE_DIR}) set(ZZIPLIB_SOURCES ${ZZIPLIB_SUBMODULE_DIR}/zzip/dir.c ${ZZIPLIB_SUBMODULE_DIR}/zzip/err.c ${ZZIPLIB_SUBMODULE_DIR}/zzip/fetch.c ${ZZIPLIB_SUBMODULE_DIR}/zzip/file.c ${ZZIPLIB_SUBMODULE_DIR}/zzip/fseeko.c ${ZZIPLIB_SUBMODULE_DIR}/zzip/info.c ${ZZIPLIB_SUBMODULE_DIR}/zzip/memdisk.c ${ZZIPLIB_SUBMODULE_DIR}/zzip/mmapped.c ${ZZIPLIB_SUBMODULE_DIR}/zzip/plugin.c ${ZZIPLIB_SUBMODULE_DIR}/zzip/stat.c ${ZZIPLIB_SUBMODULE_DIR}/zzip/write.c ${ZZIPLIB_SUBMODULE_DIR}/zzip/zip.c ) set(ZZIPLIB_HEADERS ${ZZIPLIB_SUBMODULE_DIR}/zzip/__debug.h ${ZZIPLIB_SUBMODULE_DIR}/zzip/__dirent.h ${ZZIPLIB_SUBMODULE_DIR}/zzip/__fnmatch.h ${ZZIPLIB_SUBMODULE_DIR}/zzip/__hints.h ${ZZIPLIB_SUBMODULE_DIR}/zzip/__mmap.h ${ZZIPLIB_SUBMODULE_DIR}/zzip/_msvc.h ${ZZIPLIB_SUBMODULE_DIR}/zzip/autoconf.h ${ZZIPLIB_SUBMODULE_DIR}/zzip/conf.h ${ZZIPLIB_SUBMODULE_DIR}/zzip/fetch.h ${ZZIPLIB_SUBMODULE_DIR}/zzip/file.h ${ZZIPLIB_SUBMODULE_DIR}/zzip/format.h ${ZZIPLIB_SUBMODULE_DIR}/zzip/fseeko.h ${ZZIPLIB_SUBMODULE_DIR}/zzip/info.h ${ZZIPLIB_SUBMODULE_DIR}/zzip/lib.h ${ZZIPLIB_SUBMODULE_DIR}/zzip/memdisk.h ${ZZIPLIB_SUBMODULE_DIR}/zzip/mmapped.h ${ZZIPLIB_SUBMODULE_DIR}/zzip/plugin.h ${ZZIPLIB_SUBMODULE_DIR}/zzip/stdint.h ${ZZIPLIB_SUBMODULE_DIR}/zzip/types.h ${ZZIPLIB_SUBMODULE_DIR}/zzip/write.h ${ZZIPLIB_SUBMODULE_DIR}/zzip/zzip.h ${ZZIPLIB_SUBMODULE_DIR}/zzip/zzip32.h ) source_group(zziplib FILES ${ZZIPLIB_SOURCES} ${ZZIPLIB_HEADERS}) list(APPEND SOURCES ${ZZIPLIB_SOURCES}) list(APPEND HEADERS ${ZZIPLIB_HEADERS}) endif() endif() # Optional decompressors if(LHASA_FOUND) message(STATUS "Enabled LHA decompressor") list(APPEND SOURCES DecompressorLHA.cpp) list(APPEND HEADERS DecompressorLHA.h) include_directories(${LHASA_INCLUDE_DIRS}) else() message("LHA decompressor disabled (lhasa unavailable)") endif() if(ZLIB_FOUND) message(STATUS "Enabled GZIP decompressor") list(APPEND SOURCES DecompressorGZIP.cpp) list(APPEND HEADERS DecompressorGZIP.h) include_directories(${ZLIB_INCLUDE_DIRS}) else() message("GZIP decompressor disabled (zlib unvailable)") endif() if(ZLIB_FOUND AND ZZIPLIB_FOUND) message(STATUS "Enabled ZIP decompressor") list(APPEND SOURCES DecompressorZIP.cpp ZipExtractor.cpp zziplib/MyIO.cpp) list(APPEND HEADERS DecompressorZIP.h ZipExtractor.h zziplib/MyIO.h) include_directories( ${PROJECT_SOURCE_DIR}/src/compression/zziplib ${ZZIPLIB_INCLUDE_DIRS} ) else() if(NOT ZLIB_FOUND AND NOT ZZIPLIB_FOUND) message("ZIP decompressor disabled (zlib and zziplib unavailble)") elseif(ZZIPLIB_FOUND) message("ZIP decompressor disabled (zlib unavailable)") else() message("ZIP decompressor disabled (zziplib unavailable)") endif() endif() # Define this library as an object library; the objects will not be archived add_library(compression OBJECT ${SOURCES} ${HEADERS}) # Ensure dependencies are built before this library if(APPLE) if(LHASA_FOUND) add_dependencies(compression lhasa) endif() if(ZZIPLIB_FOUND) add_dependencies(compression zziplib) endif() endif() if(WIN32) if(ZLIB_FOUND) add_dependencies(compression zlib) endif() endif() include_directories( ${PROJECT_SOURCE_DIR}/src/milkyplay ${PROJECT_SOURCE_DIR}/src/ppui ${PROJECT_SOURCE_DIR}/src/ppui/osinterface/posix ) MilkyTracker-1.02.00/src/compression/Decompressor.cpp000066400000000000000000000066621324432207300225660ustar00rootroot00000000000000/* * tracker/Decompressor.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * Decompressor.cpp * MilkyTracker * * Created by Peter Barth on 19.10.07. * */ #include "Decompressor.h" #include "XMFile.h" void DecompressorBase::removeFile(const PPSystemString& fileName) { XMFile::remove(fileName); } bool DecompressorBase::identify() { XMFile f(fileName); return identify(f); } void DecompressorBase::setFilename(const PPSystemString& filename) { this->fileName = filename; } Decompressor::Decompressor(const PPSystemString& fileName) : DecompressorBase(fileName) { for (pp_int32 i = 0; i < decompressorList().size(); i++) { DecompressorBase* decompressor = decompressorList().get(i)->clone(); decompressors.add(decompressor); } adjustFilenames(fileName); } bool Decompressor::identify(XMFile& f) { for (pp_int32 i = 0; i < decompressors.size(); i++) { if (decompressors.get(i)->identify(f)) { return true; } } return false; } bool Decompressor::doesServeHint(Hints hint) { for (pp_int32 i = 0; i < decompressors.size(); i++) { if (decompressors.get(i)->doesServeHint(hint)) return true; } return false; } struct DescriptorSortRule : public PPSimpleVector::SortRule { virtual pp_int32 compare(const Descriptor& left, const Descriptor& right) const { return left.description.compareTo(right.description); } }; const PPSimpleVector& Decompressor::getDescriptors(Hints hint) const { descriptors.clear(); for (pp_int32 i = 0; i < decompressors.size(); i++) { if (decompressors.get(i)->doesServeHint(hint)) { const PPSimpleVector& src = decompressors.get(i)->getDescriptors(hint); for (pp_int32 j = 0; j < src.size(); j++) { descriptors.add(new Descriptor(*src.get(j))); } } } DescriptorSortRule sortRule; descriptors.sort(sortRule); return descriptors; } bool Decompressor::decompress(const PPSystemString& outFileName, Hints hint) { bool result = false; for (pp_int32 i = 0; i < decompressors.size(); i++) { if (decompressors.get(i)->identify()) { result = decompressors.get(i)->decompress(outFileName, hint); if (result) break; } } if (!result) removeFile(outFileName); return result; } DecompressorBase* Decompressor::clone() { return new Decompressor(fileName); } void Decompressor::setFilename(const PPSystemString& filename) { DecompressorBase::setFilename(fileName); adjustFilenames(fileName); } void Decompressor::adjustFilenames(const PPSystemString& filename) { for (pp_int32 i = 0; i < decompressors.size(); i++) decompressors.get(i)->setFilename(filename); } PPSimpleVector& Decompressor::decompressorList() { static PPSimpleVector decompressorList; return decompressorList; } MilkyTracker-1.02.00/src/compression/Decompressor.h000066400000000000000000000052611324432207300222250ustar00rootroot00000000000000/* * tracker/Decompressor.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * Decompressor.h * MilkyTracker * * Created by Peter Barth on 19.10.07. * */ #ifndef __DECOMPRESSOR_H__ #define __DECOMPRESSOR_H__ #include "BasicTypes.h" #include "SimpleVector.h" class XMFile; class DecompressorBase { public: enum Hints { HintAll, HintModules, HintInstruments, HintSamples, HintPatterns, HintTracks }; DecompressorBase(const PPSystemString& fileName) : fileName(fileName) { } virtual ~DecompressorBase() { } virtual bool identify(XMFile& f) = 0; virtual bool identify(); virtual bool doesServeHint(Hints hint) = 0; virtual const PPSimpleVector& getDescriptors(Hints hint) const = 0; virtual bool decompress(const PPSystemString& outFileName, Hints hint) = 0; static void removeFile(const PPSystemString& fileName); virtual void setFilename(const PPSystemString& filename); virtual DecompressorBase* clone() = 0; protected: PPSystemString fileName; mutable PPSimpleVector descriptors; }; /***************************************************************************** * Generic decompressor *****************************************************************************/ class Decompressor : public DecompressorBase { public: Decompressor(const PPSystemString& fileName); virtual bool identify(XMFile& f); virtual bool doesServeHint(Hints hint); virtual const PPSimpleVector& getDescriptors(Hints hint) const; virtual bool decompress(const PPSystemString& outFileName, Hints hint); virtual DecompressorBase* clone(); virtual void setFilename(const PPSystemString& filename); private: void adjustFilenames(const PPSystemString& filename); PPSimpleVector decompressors; public: static PPSimpleVector& decompressorList(); template struct RegisterDecompressor { RegisterDecompressor() { Decompressor::decompressorList().add(new type("")); } }; }; #endif MilkyTracker-1.02.00/src/compression/DecompressorGZIP.cpp000066400000000000000000000043361324432207300232540ustar00rootroot00000000000000/* * compression/DecompressorGZIP.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * DecompressorGZIP.cpp * milkytracker_universal * * Created by Peter Barth on 22.06.08. * */ #include "DecompressorGZIP.h" #include "XMFile.h" #include "LittleEndian.h" #include "zlib.h" // -- GZIP -------------------------------------------------------------------- DecompressorGZIP::DecompressorGZIP(const PPSystemString& fileName) : DecompressorBase(fileName) { } bool DecompressorGZIP::identify(XMFile& f) { f.seek(0); mp_dword id = f.readDword(); // GZIP ID return (id == 0x08088B1F); } const PPSimpleVector& DecompressorGZIP::getDescriptors(Hints hint) const { descriptors.clear(); descriptors.add(new Descriptor("gz", "GZIP Archive")); return descriptors; } bool DecompressorGZIP::decompress(const PPSystemString& outFileName, Hints hint) { gzFile gz_input_file = NULL; int len = 0; pp_uint8 *buf; if ((gz_input_file = gzopen (fileName.getStrBuffer(), "r")) == NULL) return false; if ((buf = new pp_uint8[0x10000]) == NULL) return false; XMFile fOut(outFileName, true); while (true) { len = gzread (gz_input_file, buf, 0x10000); if (len < 0) { delete[] buf; return false; } if (len == 0) break; fOut.write(buf, 1, len); } if (gzclose (gz_input_file) != Z_OK) { delete[] buf; return false; } delete[] buf; return true; } DecompressorBase* DecompressorGZIP::clone() { return new DecompressorGZIP(fileName); } static Decompressor::RegisterDecompressor registerDecompressor; MilkyTracker-1.02.00/src/compression/DecompressorGZIP.h000066400000000000000000000031231324432207300227120ustar00rootroot00000000000000/* * compression/DecompressorGZIP.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * DecompressorGZIP.h * milkytracker_universal * * Created by Peter Barth on 22.06.08. * */ #ifndef __DECOMPRESSOR_GZIP_H__ #define __DECOMPRESSOR_GZIP_H__ #include "Decompressor.h" /***************************************************************************** * gzip decompression *****************************************************************************/ class DecompressorGZIP : public DecompressorBase { public: DecompressorGZIP(const PPSystemString& fileName); virtual bool identify(XMFile& f); // this type of archive can contain any file type virtual bool doesServeHint(Hints hint) { return true; } virtual const PPSimpleVector& getDescriptors(Hints hint) const; virtual bool decompress(const PPSystemString& outFileName, Hints hint); virtual DecompressorBase* clone(); }; #endif MilkyTracker-1.02.00/src/compression/DecompressorLHA.cpp000066400000000000000000000075041324432207300231070ustar00rootroot00000000000000/* * compression/DecompressorLHA.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * DecompressorLHA.cpp * milkytracker_universal * * Created by Peter Barth on 22.06.08. * */ #include #include "DecompressorLHA.h" #include "XMFile.h" #include "XModule.h" #define LHA_BUFFER_SIZE 0x10000 namespace { static int lha_read_callback(void *handle, void *buf, size_t buf_len) { return static_cast(handle)->read(buf, 1, buf_len); } static const LHAInputStreamType lha_callbacks = { lha_read_callback, NULL, NULL }; // Simple wrapper for lha_reader_* class LHAReaderWrapper { public: explicit LHAReaderWrapper(XMFile& file) { // Open input stream input_stream = lha_input_stream_new(&lha_callbacks, &file); if (input_stream == NULL) return; // Open reader reader = lha_reader_new(input_stream); } bool isOpen() const { return reader != NULL; } LHAFileHeader* nextFile() { return lha_reader_next_file(reader); } size_t read(void* buf, size_t length) { return lha_reader_read(reader, buf, length); } ~LHAReaderWrapper() { if (reader != NULL) lha_reader_free(reader); if (input_stream != NULL) lha_input_stream_free(input_stream); } private: LHAInputStream* input_stream = NULL; LHAReader* reader = NULL; LHAReaderWrapper(const LHAReaderWrapper&) {} LHAReaderWrapper& operator=(const LHAReaderWrapper&) {} }; } DecompressorLHA::DecompressorLHA(const PPSystemString& filename) : DecompressorBase(filename) { } bool DecompressorLHA::identify(XMFile& f) { f.seek(0); // Attempt to create the reader and read the header of the first file LHAReaderWrapper reader(f); if (!reader.isOpen()) return false; return reader.nextFile() != NULL; } const PPSimpleVector& DecompressorLHA::getDescriptors(Hints hint) const { descriptors.clear(); descriptors.add(new Descriptor("lha", "LHA Archive")); return descriptors; } bool DecompressorLHA::decompress(const PPSystemString& outFilename, Hints hint) { XMFile f(fileName); if (!f.isOpen()) return false; // Create reader object LHAReaderWrapper reader(f); if (!reader.isOpen()) return false; // Loop through each file until we find a sutible module while (1) { LHAFileHeader* header = reader.nextFile(); if (header == NULL) break; // Skip directories and symlinks if (strcmp(header->compress_method, LHA_COMPRESS_TYPE_DIR) == 0) continue; // Identify the current file mp_ubyte buf[LHA_BUFFER_SIZE]; memset(buf, 0, sizeof(buf)); size_t bytes_read = reader.read(buf, sizeof(buf)); if (bytes_read > 0 && XModule::identifyModule(buf) != NULL) { // Write to output file XMFile outFile(outFilename, true); if (!outFile.isOpenForWriting()) return false; // Decompress into outFile do { outFile.write(buf, 1, bytes_read); } while ((bytes_read = reader.read(buf, sizeof(buf))) > 0); return (bytes_read == 0); } } // No sutible modules found return false; } DecompressorBase* DecompressorLHA::clone() { return new DecompressorLHA(fileName); } static Decompressor::RegisterDecompressor registerDecompressor; MilkyTracker-1.02.00/src/compression/DecompressorLHA.h000066400000000000000000000031501324432207300225450ustar00rootroot00000000000000/* * compression/DecompressorLHA.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * DecompressorLHA.h * milkytracker_universal * * Created by Peter Barth on 22.06.08. * */ #ifndef __DECOMPRESSOR_LHA_H__ #define __DECOMPRESSOR_LHA_H__ #include "Decompressor.h" /***************************************************************************** * LHA decompressor *****************************************************************************/ class DecompressorLHA : public DecompressorBase { public: DecompressorLHA(const PPSystemString& filename); virtual bool identify(XMFile& f); // this type of archive only contain modules virtual bool doesServeHint(Hints hint) { return (hint == HintAll || hint == HintModules); } virtual const PPSimpleVector& getDescriptors(Hints hint) const; virtual bool decompress(const PPSystemString& outFilename, Hints hint); virtual DecompressorBase* clone(); }; #endif MilkyTracker-1.02.00/src/compression/DecompressorLZX.cpp000066400000000000000000000043741324432207300231620ustar00rootroot00000000000000/* * compression/DecompressorLZX.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * DecompressorLZX.cpp * milkytracker_universal * * Created by Peter Barth on 17.04.09. * */ #include "DecompressorLZX.h" #include "XMFile.h" #include "XModule.h" #include "unlzx.h" struct ModuleIdentificator : public Unlzx::FileIdentificator { virtual bool identify(const PPSystemString& filename) const { XMFile file(filename); mp_ubyte buff[XModule::IdentificationBufferSize]; memset(buff, 0, sizeof(buff)); file.read(buff, 1, sizeof(buff)); return XModule::identifyModule(buff) != NULL; } }; DecompressorLZX::DecompressorLZX(const PPSystemString& filename) : DecompressorBase(filename) { } bool DecompressorLZX::identify(XMFile& f) { f.seek(0); char buffer[3]; f.read(buffer, 1, 3); return (buffer[0] == 76) && (buffer[1] == 90) && (buffer[2] == 88); } const PPSimpleVector& DecompressorLZX::getDescriptors(Hints hint) const { descriptors.clear(); descriptors.add(new Descriptor("lzx", "LZX Archive")); return descriptors; } bool DecompressorLZX::decompress(const PPSystemString& outFilename, Hints hint) { // If client requests something else than a module we can't deal we that if (hint != HintAll && hint != HintModules) return false; ModuleIdentificator identificator; Unlzx unlzx(fileName, &identificator); return unlzx.extractFile(true, &outFilename); } DecompressorBase* DecompressorLZX::clone() { return new DecompressorLZX(fileName); } static Decompressor::RegisterDecompressor registerDecompressor; MilkyTracker-1.02.00/src/compression/DecompressorLZX.h000066400000000000000000000031501324432207300226160ustar00rootroot00000000000000/* * compression/DecompressorLZX.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * DecompressorLZX.h * milkytracker_universal * * Created by Peter Barth on 17.04.09. * */ #ifndef __DECOMPRESSOR_LZX_H__ #define __DECOMPRESSOR_LZX_H__ #include "Decompressor.h" /***************************************************************************** * LZX decompressor *****************************************************************************/ class DecompressorLZX : public DecompressorBase { public: DecompressorLZX(const PPSystemString& filename); virtual bool identify(XMFile& f); // this type of archive only contain modules virtual bool doesServeHint(Hints hint) { return (hint == HintAll || hint == HintModules); } virtual const PPSimpleVector& getDescriptors(Hints hint) const; virtual bool decompress(const PPSystemString& outFilename, Hints hint); virtual DecompressorBase* clone(); }; #endif MilkyTracker-1.02.00/src/compression/DecompressorPP20.cpp000066400000000000000000000044161324432207300231630ustar00rootroot00000000000000/* * compression/DecompressorPP20.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * DecompressorPP20.cpp * milkytracker_universal * * Created by Peter Barth on 22.06.08. * */ #include "DecompressorPP20.h" #include "PP20.h" #include "XMFile.h" // -- PP20 ------------------------------------------------------------------- DecompressorPP20::DecompressorPP20(const PPSystemString& fileName) : DecompressorBase(fileName) { } bool DecompressorPP20::identify(XMFile& f) { f.seek(0); mp_dword id = f.readDword(); // PP20 return (id == 0x30325050); } const PPSimpleVector& DecompressorPP20::getDescriptors(Hints hint) const { descriptors.clear(); descriptors.add(new Descriptor("pp", "Powerpacker Archive")); return descriptors; } bool DecompressorPP20::decompress(const PPSystemString& outFileName, Hints hint) { XMFile f(fileName); unsigned int size = f.size(); unsigned char* buffer = new unsigned char[size]; f.read(buffer, 1, size); PP20 pp20; if (!pp20.isCompressed(buffer, size)) { delete[] buffer; return false; } XMFile fOut(outFileName, true); pp_uint8* outBuffer = NULL; unsigned resultSize = pp20.decompress(buffer, size, &outBuffer); // delete this, it was allocated delete[] buffer; // if resultSize is 0 there is nothing more to deallocate if (resultSize == 0) return false; fOut.write(outBuffer, 1, resultSize); delete[] outBuffer; return true; } DecompressorBase* DecompressorPP20::clone() { return new DecompressorPP20(fileName); } static Decompressor::RegisterDecompressor registerDecompressor; MilkyTracker-1.02.00/src/compression/DecompressorPP20.h000066400000000000000000000031251324432207300226240ustar00rootroot00000000000000/* * compression/DecompressorPP20.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * DecompressorPP20.h * milkytracker_universal * * Created by Peter Barth on 22.06.08. * */ #ifndef __DECOMPRESSOR_PP20_H__ #define __DECOMPRESSOR_PP20_H__ #include "Decompressor.h" /***************************************************************************** * PowerPacker decompressor *****************************************************************************/ class DecompressorPP20 : public DecompressorBase { public: DecompressorPP20(const PPSystemString& fileName); virtual bool identify(XMFile& f); // this type of archive can contain any file type virtual bool doesServeHint(Hints hint) { return true; } virtual const PPSimpleVector& getDescriptors(Hints hint) const; virtual bool decompress(const PPSystemString& outFileName, Hints hint); virtual DecompressorBase* clone(); }; #endif MilkyTracker-1.02.00/src/compression/DecompressorQT.h000066400000000000000000000034651324432207300224760ustar00rootroot00000000000000/* * compression/DecompressorQT.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * DecompressorQT.h * milkytracker_universal * * Created by Peter Barth on 22.06.08. * */ #ifndef __DECOMPRESSOR_QT_H__ #define __DECOMPRESSOR_QT_H__ #include "Decompressor.h" /***************************************************************************** * QT decompressor * This class uses QTKit to extract the audio from quicktime media content * to an uncompressed 16 bit AIFF file which MilkyTracker can read directly. * Note: QTKit is only available on OS X 10.4 and later. *****************************************************************************/ class DecompressorQT : public DecompressorBase { public: DecompressorQT(const PPSystemString& filename); virtual bool identify(XMFile& f); // this type of archive can only contain samples virtual bool doesServeHint(Hints hint) { return (hint == HintAll || hint == HintSamples); } virtual const PPSimpleVector& getDescriptors(Hints hint) const; virtual bool decompress(const PPSystemString& outFilename, Hints hint); virtual DecompressorBase* clone(); }; #endif MilkyTracker-1.02.00/src/compression/DecompressorQT.mm000066400000000000000000000066371324432207300226640ustar00rootroot00000000000000/* * compression/DecompressorQT.mm * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * DecompressorQT.mm * milkytracker_universal * * Created by Peter Barth on 22.06.08. * */ #include "DecompressorQT.h" #include "XMFile.h" #include "XModule.h" #include "SampleLoaderGeneric.h" #import #import #import "AIFFWriter.h" // -- QT -------------------------------------------------------------------- DecompressorQT::DecompressorQT(const PPSystemString& filename) : DecompressorBase(filename) { } bool DecompressorQT::identify(XMFile& f) { bool res = false; // me misuse the generic sample loader of MilkyPlay to determine whether // we use an internal loader even if Quicktime could actually load this // file type (i.e. aiff, wav and probably others) { XModule* module = new XModule(); SampleLoaderGeneric sampleLoader(f.getFileName(), *module, false); res = sampleLoader.identifySample(); delete module; } if (res) { return false; } NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; NSString* filename = [NSString stringWithUTF8String:f.getFileName()]; NSError* qtError = nil; QTMovie* movie = [QTMovie movieWithFile:filename error:&qtError]; if (nil != qtError) { res = false; } else { res = [[movie attributeForKey:QTMovieHasAudioAttribute] boolValue] != NO; } [pool release]; return res; } const PPSimpleVector& DecompressorQT::getDescriptors(Hints hint) const { descriptors.clear(); // TODO: add wild card support //descriptors.add(new Descriptor("*", "Quicktime Content")); return descriptors; } bool DecompressorQT::decompress(const PPSystemString& outFilename, Hints hint) { // If client requests something else than a sample we can't deal we that if (hint != HintAll && hint != HintSamples) return false; bool res = true; NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; NSString* filename = [NSString stringWithUTF8String:fileName]; NSError* qtError = nil; QTMovie* movie = [QTMovie movieWithFile:filename error:&qtError]; if (nil == qtError) { AIFFWriter* aiffWriter = [[AIFFWriter alloc] init]; if (TRUE == [[movie attributeForKey:QTMovieHasAudioAttribute] boolValue]) { OSStatus err = [aiffWriter exportFromMovie:movie toFile:[NSString stringWithUTF8String:outFilename]]; if (err != noErr) { res = false; } } else { // movie contains no audio track res = false; } [aiffWriter release]; } else { // Some error has occured res = false; } [pool release]; return res; } DecompressorBase* DecompressorQT::clone() { return new DecompressorQT(fileName); } static Decompressor::RegisterDecompressor registerDecompressor; MilkyTracker-1.02.00/src/compression/DecompressorUMX.cpp000066400000000000000000000055071324432207300231550ustar00rootroot00000000000000/* * compression/DecompressorUMX.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * DecompressorUMX.cpp * milkytracker_universal * * Created by Peter Barth on 22.06.08. * */ #include "DecompressorUMX.h" #include "XMFile.h" #include "LittleEndian.h" // -- UMX -------------------------------------------------------------------- DecompressorUMX::DecompressorUMX(const PPSystemString& fileName) : DecompressorBase(fileName) { } bool DecompressorUMX::identify(XMFile& f) { f.seek(0); mp_dword id = f.readDword(); // UMX ID return (id == 0x9E2A83C1); } const PPSimpleVector& DecompressorUMX::getDescriptors(Hints hint) const { descriptors.clear(); descriptors.add(new Descriptor("umx", "Unreal Data File")); return descriptors; } #define TEST_SIZE 1500 #define MAGIC4(a,b,c,d) \ (((pp_uint32)(a)<<24)|((pp_uint32)(b)<<16)|((pp_uint32)(c)<<8)|(d)) #define MAGIC_IMPM MAGIC4('I','M','P','M') #define MAGIC_SCRM MAGIC4('S','C','R','M') #define MAGIC_M_K_ MAGIC4('M','.','K','.') bool DecompressorUMX::decompress(const PPSystemString& outFileName, Hints hint) { // If client requests something else than a module we can't deal we that if (hint != HintAll && hint != HintModules) return false; XMFile f(fileName); int i; pp_uint8 *buf, *b; int len, offset = -1; if ((b = buf = new pp_uint8[0x10000]) == NULL) return false; f.read(buf, 1, TEST_SIZE); for (i = 0; i < TEST_SIZE; i++, b++) { pp_uint32 id; id = BigEndian::GET_DWORD(b); if (!memcmp(b, "Extended Module:", 16)) { offset = i; break; } if (id == MAGIC_IMPM) { offset = i; break; } if (i > 44 && id == MAGIC_SCRM) { offset = i - 44; break; } if (i > 1080 && id == MAGIC_M_K_) { offset = i - 1080; break; } } if (offset < 0) { delete[] buf; return false; } f.seek(offset); XMFile fOut(outFileName, true); do { len = f.read(buf, 1, 0x10000); fOut.write(buf, 1, len); } while (len == 0x10000); delete[] buf; return true; } DecompressorBase* DecompressorUMX::clone() { return new DecompressorUMX(fileName); } static Decompressor::RegisterDecompressor registerDecompressor; MilkyTracker-1.02.00/src/compression/DecompressorUMX.h000066400000000000000000000031741324432207300226200ustar00rootroot00000000000000/* * compression/DecompressorUMX.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * DecompressorUMX.h * milkytracker_universal * * Created by Peter Barth on 22.06.08. * */ #ifndef __DECOMPRESSOR_UMX_H__ #define __DECOMPRESSOR_UMX_H__ #include "Decompressor.h" /***************************************************************************** * Unreal Music (UMX) "decompressor" *****************************************************************************/ class DecompressorUMX : public DecompressorBase { public: DecompressorUMX(const PPSystemString& fileName); virtual bool identify(XMFile& f); // this type of archive only contain modules virtual bool doesServeHint(Hints hint) { return (hint == HintAll || hint == HintModules); } virtual const PPSimpleVector& getDescriptors(Hints hint) const; virtual bool decompress(const PPSystemString& outFileName, Hints hint); virtual DecompressorBase* clone(); }; #endif MilkyTracker-1.02.00/src/compression/DecompressorZIP.cpp000066400000000000000000000042661324432207300231470ustar00rootroot00000000000000/* * compression/DecompressorZIP.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * DecompressorZIP.cpp * milkytracker_universal * * Created by Peter Barth on 22.06.08. * */ #include "DecompressorZIP.h" #include "XMFile.h" #include "ZipExtractor.h" // -- ZIP -------------------------------------------------------------------- DecompressorZIP::DecompressorZIP(const PPSystemString& filename) : DecompressorBase(filename) { } bool DecompressorZIP::identify(XMFile& f) { const PPSystemString filename(f.getFileName()); PPSystemString ext = filename.getExtension(); if ((ext.compareToNoCase(".ZIP") != 0) && (ext.compareToNoCase(".MDZ") != 0)) return false; ZipExtractor extractor(filename); pp_int32 error = 0; bool res = extractor.parseZip(error, false, NULL); return (res && error == 0); } const PPSimpleVector& DecompressorZIP::getDescriptors(Hints hint) const { descriptors.clear(); descriptors.add(new Descriptor("zip", "ZIP Archive")); if (hint == HintModules || hint == HintAll) descriptors.add(new Descriptor("mdz", "Zipped Module")); return descriptors; } bool DecompressorZIP::decompress(const PPSystemString& outFilename, Hints hint) { ZipExtractor extractor(fileName); pp_int32 error = 0; bool res = extractor.parseZip(error, true, &outFilename); return (res && error == 0); } DecompressorBase* DecompressorZIP::clone() { return new DecompressorZIP(fileName); } static Decompressor::RegisterDecompressor registerDecompressor; MilkyTracker-1.02.00/src/compression/DecompressorZIP.h000066400000000000000000000031501324432207300226030ustar00rootroot00000000000000/* * compression/DecompressorZIP.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * DecompressorZIP.h * milkytracker_universal * * Created by Peter Barth on 22.06.08. * */ #ifndef __DECOMPRESSOR_ZIP_H__ #define __DECOMPRESSOR_ZIP_H__ #include "Decompressor.h" /***************************************************************************** * ZIP decompressor *****************************************************************************/ class DecompressorZIP : public DecompressorBase { public: DecompressorZIP(const PPSystemString& filename); virtual bool identify(XMFile& f); // this type of archive only contain modules virtual bool doesServeHint(Hints hint) { return (hint == HintAll || hint == HintModules); } virtual const PPSimpleVector& getDescriptors(Hints hint) const; virtual bool decompress(const PPSystemString& outFilename, Hints hint); virtual DecompressorBase* clone(); }; #endif MilkyTracker-1.02.00/src/compression/PP20.cpp000066400000000000000000000340731324432207300205770ustar00rootroot00000000000000/* ppcrack 0.1 - decrypts PowerPacker encrypted data files with brute force * by Stuart Caie , this software is in the Public Domain * * The whole keyspace is scanned, unless you supply the -key argument, where * that key (in hexadecimal) to key FFFFFFFF is scanned. * * Anything which decrypts then decrunches to valid data is saved to disk * as . * * As a bonus, if any file is a PowerPacker data file, but not encrypted, * it will be decrunched anyway, and saved as .decrunched * * - changed to work with UADE (mld) * Thanks to Kyzer for help and support. */ /* Code from Heikki Orsila's amigadepack 0.02 to replace previous * PowerPack depacker with license issues. * * You'll probably want to use ppcrack stand-alone to crack encrypted * powerpack files once instead of using brute force at each replay. * * $Id: ppdepack.c,v 1.2 2007/10/08 16:38:29 cmatsuoka Exp $ * * Modified for xmp by Claudio Matsuoka, 08/2007 * - merged mld's checks from the old depack sources. Original credits: * - corrupt file and data detection * (thanks to Don Adan and Dirk Stoecker for help and infos) * - implemeted "efficiency" checks * - further detection based on code by Georg Hoermann */ /* changed into class to work with milkytracker */ #include "PP20.h" #include "LittleEndian.h" #define val(p) ((p)[0]<<16 | (p)[1] << 8 | (p)[2]) const char* PP20::PP_ID = "PP20"; PP20::PP20() { //statusString = _pp20_txt_uncompressed; } bool PP20::isCompressed(const void* source, const pp_uint32 size) { // Check minimum input size, PP20 ID, and efficiency table. if ( size<8 ) { return false; } // We hope that every file with a valid signature and a valid // efficiency table is PP-compressed actually. const char* idPtr = (const char*)source; if ( strncmp(idPtr,PP_ID,4) != 0 ) { //statusString = _pp20_txt_uncompressed; return false; } return checkEfficiency(idPtr+4); } bool PP20::checkEfficiency(const void* source) { const pp_uint32 PP_BITS_FAST = 0x09090909; const pp_uint32 PP_BITS_MEDIOCRE = 0x090a0a0a; const pp_uint32 PP_BITS_GOOD = 0x090a0b0b; const pp_uint32 PP_BITS_VERYGOOD = 0x090a0c0c; const pp_uint32 PP_BITS_BEST = 0x090a0c0d; // Copy efficiency table. memcpy(efficiency,(const pp_uint8*)source,4); pp_uint32 eff = BigEndian::GET_DWORD(efficiency); if (( eff != PP_BITS_FAST ) && ( eff != PP_BITS_MEDIOCRE ) && ( eff != PP_BITS_GOOD ) && ( eff != PP_BITS_VERYGOOD ) && ( eff != PP_BITS_BEST )) { //statusString = _pp20_txt_unrecognized; return false; } /* // Define string describing compression encoding used. switch ( eff) { case PP_BITS_FAST: statusString = _pp20_txt_fast; break; case PP_BITS_MEDIOCRE: statusString = _pp20_txt_mediocre; break; case PP_BITS_GOOD: statusString = _pp20_txt_good; break; case PP_BITS_VERYGOOD: statusString = _pp20_txt_verygood; break; case PP_BITS_BEST: statusString = _pp20_txt_best; break; } */ return true; } inline void ppDecryptCopy(pp_uint8 *src, pp_uint8 *dest, pp_uint32 len, pp_uint32 key) { pp_uint8 a = (key>>24) & 0xFF; pp_uint8 b = (key>>16) & 0xFF; pp_uint8 c = (key>> 8) & 0xFF; pp_uint8 d = (key ) & 0xFF; len = (len + 3) >> 2; while (len--) { *dest++ = *src++ ^ a; *dest++ = *src++ ^ b; *dest++ = *src++ ^ c; *dest++ = *src++ ^ d; } } #define PP_READ_BITS(nbits, var) do { \ bit_cnt = (nbits); \ while (bits_left < bit_cnt) { \ if (buf_src < src) return 0; /* out of source bits */ \ bit_buffer |= (*--buf_src << bits_left); \ bits_left += 8; \ } \ (var) = 0; \ bits_left -= bit_cnt; \ while (bit_cnt--) { \ (var) = ((var) << 1) | (bit_buffer & 1); \ bit_buffer >>= 1; \ } \ } while(0) #define PP_BYTE_OUT(byte) do { \ if (out <= dest) return 0; /* output overflow */ \ *--out = (byte); \ written++; \ } while (0) pp_int32 PP20::ppDecrunch(pp_uint8 *src, pp_uint8 *dest, pp_uint8 *offset_lens, pp_uint32 src_len, pp_uint32 dest_len, pp_uint8 skip_bits) { pp_uint8 *buf_src, *out, *dest_end, bits_left = 0, bit_cnt; pp_uint32 bit_buffer = 0, x, todo, offbits, offset, written=0; if (src == NULL || dest == NULL || offset_lens == NULL) return 0; /* set up input and output pointers */ buf_src = src + src_len; out = dest_end = dest + dest_len; /* skip the first few bits */ PP_READ_BITS(skip_bits, x); /* while there are input bits left */ while (written < dest_len) { PP_READ_BITS(1, x); if (x == 0) { /* 1bit==0: literal, then match. 1bit==1: just match */ todo = 1; do { PP_READ_BITS(2, x); todo += x; } while (x == 3); while (todo--) { PP_READ_BITS(8, x); PP_BYTE_OUT(x); } /* should we end decoding on a literal, break out of the main loop */ if (written == dest_len) break; } /* match: read 2 bits for initial offset bitlength / match length */ PP_READ_BITS(2, x); offbits = offset_lens[x]; todo = x+2; if (x == 3) { PP_READ_BITS(1, x); if (x==0) offbits = 7; PP_READ_BITS(offbits, offset); do { PP_READ_BITS(3, x); todo += x; } while (x == 7); } else { PP_READ_BITS(offbits, offset); } if ((out + offset) >= dest_end) return 0; /* match overflow */ while (todo--) { x = out[offset]; PP_BYTE_OUT(x); } } /* all output bytes written without error */ return 1; /* return (src == buf_src) ? 1 : 0; */ } #ifdef WANT_PP2X_DECRYPTING /* this pretends to decrunch a data stream. If it wasn't decrypted * exactly right, it will access match offsets that don't exist, or * request match lengths that there isn't enough data for, or will * underrun or overrun the theoretical output buffer */ inline pp_int32 ppValidate(pp_uint8 *src, pp_uint8 *offset_lens, pp_uint32 src_len, pp_uint32 dest_len, pp_uint8 skip_bits) { pp_uint8 *buf_src, bits_left = 0, bit_cnt; pp_uint32 bit_buffer = 0, x, todo, offbits, offset, written=0; if (src == NULL || offset_lens == NULL) return 0; /* set up input pointer */ buf_src = src + src_len; /* skip the first few bits */ PP_READ_BITS(skip_bits, x); /* while there are input bits left */ while (written < dest_len) { PP_READ_BITS(1, x); if (x == 0) { /* 1bit==0: literal, then match. 1bit==1: just match */ todo = 1; do { PP_READ_BITS(2, x); todo += x; } while (x == 3); written += todo; if (written > dest_len) return 0; while (todo--) PP_READ_BITS(8, x); /* should we end decoding on a literal, break out of the main loop */ if (written == dest_len) break; } /* match: read 2 bits for initial offset bitlength / match length */ PP_READ_BITS(2, x); offbits = offset_lens[x]; todo = x+2; if (x == 3) { PP_READ_BITS(1, x); if (x==0) offbits = 7; PP_READ_BITS(offbits, offset); do { PP_READ_BITS(3, x); todo += x; } while (x == 7); } else { PP_READ_BITS(offbits, offset); } if (offset >= written) return 0; /* match overflow */ written += todo; if (written > dest_len) return 0; } /* all output bytes written without error */ return 1; } #endif pp_int32 PP20::ppcrack(pp_uint8** destRef, pp_uint8 *data, pp_uint32 len) { /* PP FORMAT: * 1 longword identifier 'PP20' or 'PX20' * [1 word checksum (if 'PX20') $ssss] * 1 longword efficiency $eeeeeeee * X longwords crunched file $cccccccc,$cccccccc,... * 1 longword decrunch info 'decrlen' << 8 | '8 bits other info' */ pp_int32 success=0; pp_uint8 *output, crypted; pp_uint32 outlen; if (len < 16) { //fprintf(stderr, "File is too short to be a PP file (%u bytes)\n", len); globalError = true; outlen = 0; goto byebye; } if (data[0]=='P' && data[1]=='P' && data[2]=='2' && data[3]=='0') { if (len & 0x03) { //fprintf(stderr, "File length is not a multiple of 4\n"); globalError = true; outlen = 0; goto byebye; } crypted = 0; } else if (data[0]=='P' && data[1]=='X' && data[2]=='2' && data[3]=='0') { if ((len-2) & 0x03) { //fprintf(stderr, "(file length - 2) is not a multiple of 4\n"); globalError = true; outlen = 0; goto byebye; } crypted = 1; } else { //fprintf(stderr, "File does not have the PP signature\n"); globalError = true; outlen = 0; goto byebye; } outlen = (data[len-4]<<16) | (data[len-3]<<8) | data[len-2]; /* fprintf(stderr, "decrunched length = %u bytes\n", outlen); */ output = *destRef = new pp_uint8[outlen]; if (output == NULL) { //fprintf(stderr, "out of memory!\n"); globalError = true; outlen = 0; goto byebye; } if (crypted == 0) { /*fprintf(stderr, "not encrypted, decrunching anyway\n"); */ if (ppDecrunch(&data[8], output, &data[4], len-12, outlen, data[len-1])) { /* fprintf(stderr, "Decrunch successful! "); */ //savefile(fo, (void *) output, outlen); } else { success=-1; } } else { #ifdef WANT_PP2X_DECRYPTING /* brute-force calculate the key */ pp_uint32 key = key_start; /* shortcut to halve keyspace: * PowerPacker alternates between two operations - literal and match. * The FIRST operation must be literal, as there's no data been output * to match yet, so the first BIT in the compressed stream must be set * to 0. The '8 bits other info' is actually the number of bits unused * in the first longword. We must ignore these. * * So we know which bit is the first one in the compressed stream, and * that is matched a bit in the decryption XOR key. * * We know the encrypted value of the first bit, and we know it must * actually be 0 when decrypted. So, if the value is 1, then that bit * of the decryption key must be 1, to invert that bit to a 0. If the * value is 0, then that bit of the decryption key must be 0, to leave * that bit set at 0. * * Given the knowledge of exactly one of the bits in the keys, we can * reject all keys that do not have the appropriate value for this bit. */ pp_uint32 drop_mask = 1 << data[len-1]; pp_uint32 drop_value = ( (data[len-8]<<24) | (data[len-7]<<16) | (data[len-6]<<8) | data[len-5] ) & drop_mask; pp_uint8 *temp = new pp_uint8[len-14]; //fprintf(stderr, "\nEncrypted. Hang on, while trying to find the right key...\n"); if (temp == NULL) { //fprintf(stderr, "out of memory!\n"); globalError = true; outlen = 0; goto byebye; } do { //if ((key & 0xFFF) == 0) { //fprintf(stderr, "key %08x\r", key); //fflush(stdout); //} if ((key & drop_mask) != drop_value) continue; /* decrypt with this key */ ppDecryptCopy(&data[10], temp, len-14, key); if (ppValidate(temp, &data[6], len-14, outlen, data[len-1])) { //fprintf(stderr, "key %08x success!\n", key); ppDecrunch(temp, output, &data[6], len-14, outlen, data[len-1]); /* key_match = key */ /* sprintf(output_name, "%s.%08x", name, key); */ savefile(fo, output, outlen); break; } } while (key++ != 0xFFFFFFFF); delete[] temp; //fprintf(stderr, "All keys done!\n"); #else //fprintf(stderr, "\nWarning: support for encrypted powerpacker files not compiled in.\n"); success=-1; #endif } byebye: if (success == -1) outlen = 0; return outlen; } pp_int32 PP20::ppdepack(pp_uint8 *src, pp_uint32 s, pp_uint8** destRef) { pp_int32 success; key_start = 0; success = ppcrack(destRef, (pp_uint8 *)src, s); return success; } pp_uint32 PP20::decompress(const void* source, pp_uint32 size, pp_uint8** destRef) { pp_uint32 outputLen = 0; pp_uint8 *packed /*, *unpacked */; pp_int32 plen = size, unplen; globalError = false; // assume no error if ( !isCompressed(source,size) ) { outputLen = 0; goto byebye; } // ------------------------------ //counter = 0; /* Amiga longwords are only on even addresses. * The pp20 data format has the length stored in a longword * after the packed data, so I guess a file that is not even * is probl not a valid pp20 file. Thanks for Don Adan for * reminding me on this! - mld */ if ((plen != (plen / 2) * 2)) { //fprintf(stderr, "filesize not even\n"); outputLen = 0; globalError = true; goto byebye; } packed = const_cast(reinterpret_cast(source)); /* Hmmh... original pp20 only support efficiency from 9 9 9 9 up to 9 10 12 13, afaik * but the xfd detection code says this... *sigh* * * move.l 4(a0),d0 * cmp.b #9,d0 * blo.b .Exit * and.l #$f0f0f0f0,d0 * bne.s .Exit */ if (((packed[4] < 9) || (packed[5] < 9) || (packed[6] < 9) || (packed[7] < 9))) { //fprintf(stderr, "invalid efficiency\n"); outputLen = 0; globalError = true; goto byebye; } if (((((val (packed +4) ) * 256 ) + packed[7] ) & 0xf0f0f0f0) != 0 ) { //fprintf(stderr, "invalid efficiency(?)\n"); outputLen = 0; globalError = true; goto byebye; } unplen = val (packed + plen - 4); if (!unplen) { //fprintf(stderr, "not a powerpacked file\n"); outputLen = 0; globalError = true; goto byebye; } if ( *destRef != 0 ) { delete[] *destRef; } outputLen = ppdepack (packed, plen, destRef); if (outputLen == 0) { //fprintf(stderr, "error while decrunching data..."); globalError = true; goto byebye; } // ------------------------------ // Finished. byebye: if (outputLen == 0) // not successful { delete[] *destRef; } return outputLen; } MilkyTracker-1.02.00/src/compression/PP20.h000066400000000000000000000045561324432207300202470ustar00rootroot00000000000000/* ppcrack 0.1 - decrypts PowerPacker encrypted data files with brute force * by Stuart Caie , this software is in the Public Domain * * The whole keyspace is scanned, unless you supply the -key argument, where * that key (in hexadecimal) to key FFFFFFFF is scanned. * * Anything which decrypts then decrunches to valid data is saved to disk * as . * * As a bonus, if any file is a PowerPacker data file, but not encrypted, * it will be decrunched anyway, and saved as .decrunched * * - changed to work with UADE (mld) * Thanks to Kyzer for help and support. */ /* Code from Heikki Orsila's amigadepack 0.02 to replace previous * PowerPack depacker with license issues. * * You'll probably want to use ppcrack stand-alone to crack encrypted * powerpack files once instead of using brute force at each replay. * * $Id: ppdepack.c,v 1.2 2007/10/08 16:38:29 cmatsuoka Exp $ * * Modified for xmp by Claudio Matsuoka, 08/2007 * - merged mld's checks from the old depack sources. Original credits: * - corrupt file and data detection * (thanks to Don Adan and Dirk Stoecker for help and infos) * - implemeted "efficiency" checks * - further detection based on code by Georg Hoermann */ /* changed into class to work with milkytracker */ #ifndef __PP20_H__ #define __PP20_H__ #include "BasicTypes.h" class PP20 { public: PP20(); bool isCompressed(const void* source, const pp_uint32 size); // If successful, allocates a new buffer containing the // uncompresse data and returns the uncompressed length. // Else, returns 0. pp_uint32 decompress(const void* source, pp_uint32 size, pp_uint8** destRef); private: bool checkEfficiency(const void* source); pp_int32 ppDecrunch(pp_uint8 *src, pp_uint8 *dest, pp_uint8 *offset_lens, pp_uint32 src_len, pp_uint32 dest_len, pp_uint8 skip_bits); pp_int32 ppValidate(pp_uint8 *src, pp_uint8 *offset_lens, pp_uint32 src_len, pp_uint32 dest_len, pp_uint8 skip_bits); pp_int32 ppcrack(pp_uint8** destRef, pp_uint8 *data, pp_uint32 len); pp_int32 ppdepack(pp_uint8 *src, pp_uint32 s, pp_uint8** destRef); static const char* PP_ID; pp_uint8 efficiency[4]; bool globalError; // exception-free version of code pp_uint32 key_start; }; #endif /* PP_DECOMPRESSOR_H */ MilkyTracker-1.02.00/src/compression/ZipExtractor.cpp000066400000000000000000000110541324432207300225460ustar00rootroot00000000000000/* * compression/ZipExtractor.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * ZipExtractor.cpp * milkytracker_universal * * Created by Peter Barth on 31.01.07. * */ #ifdef VERBOSE #include #endif #include "ZipExtractor.h" #include "XModule.h" #include "XMFile.h" #include "MyIO.h" #include static const struct zzip_plugin_io milkytracker_zzip_io = { &Myopen, &Myclose, &Myread, &Mylseek, &Myfsize, 1, 1, NULL }; ZipExtractor::ZipExtractor(const PPSystemString& archivePath) : archivePath(archivePath) { } bool ZipExtractor::parseZip(pp_int32& err, bool extract, const PPSystemString* outFile) { int i; int fd; ZZIP_DIR * dir; zzip_error_t rv; #ifdef VERBOSE printf("Opening zip file `%s'... ", (const char*)archivePath); #endif { const SYSCHAR* fileName = archivePath; fd = Myopen((const zzip_char_t*)fileName, O_RDONLY); if (fd == -1) { err = 1; return false; } if (! (dir = zzip_dir_fdopen_ext_io(fd, &rv, NULL, (zzip_plugin_io_t) &milkytracker_zzip_io))) { err = 2; return false; } } #ifdef VERBOSE printf("OK.\n"); printf("{check...\n"); #endif { struct zzip_dir_hdr * hdr = dir->hdr0; if (hdr == NULL) { #ifdef VERBOSE printf ("could not find first header in dir_hdr"); #endif err = 3; zzip_dir_close(dir); return false; } else { while (1) { #ifdef VERBOSE printf("\ncompression method: %d", hdr->d_compr); if (hdr->d_compr == 0) printf(" (stored)"); else if (hdr->d_compr == 8) printf(" (deflated)"); else printf(" (unknown)"); printf("\ncrc32: %x\n", hdr->d_crc32); printf("compressed size: %d\n", hdr->d_csize); printf("uncompressed size: %d\n", hdr->d_usize); printf("offset of file in archive: %d\n", hdr->d_off); printf("filename: %s\n\n", hdr->d_name); #endif { ZZIP_FILE *fp; mp_ubyte* buf = new mp_ubyte[16384]; if (buf == NULL) { err = 6; zzip_dir_close(dir); return false; } memset(buf, 0, 16384); const char *name = hdr->d_name; #ifdef VERBOSE printf("Opening file `%s' in zip archive... ", name); #endif fp = zzip_file_open(dir, (char *)name, ZZIP_CASEINSENSITIVE); if (! fp) { #ifdef VERBOSE printf("error %d: %s\n", zzip_error(dir), zzip_strerror_of(dir)); #endif err = 7; delete[] buf; zzip_dir_close(dir); return false; } else { #ifdef VERBOSE printf("OK.\n"); printf("Contents of the file:\n"); #endif i = zzip_file_read(fp, (char*)buf, 16384); const char* id = XModule::identifyModule(buf); if (id) { if (extract) { XMFile f(*outFile, true); f.write(buf, 1, i); while (0 < (i = zzip_file_read(fp, (char*)buf, 16384))) { f.write(buf, 1, i); } if (i < 0) { #ifdef VERBOSE printf("error %d\n", zzip_error(dir)); #endif err = 4; delete[] buf; zzip_file_close(fp); zzip_dir_close(dir); return false; } } delete[] buf; err = 0; zzip_file_close(fp); zzip_dir_close(dir); return true; } zzip_file_close(fp); } delete[] buf; } if (hdr->d_reclen == 0) break; char* temp = (char*)hdr; temp+=hdr->d_reclen; hdr = (zzip_dir_hdr*)temp; //(char *)hdr += hdr->d_reclen; } } } #ifdef VERBOSE printf ("\n}\n"); #endif zzip_dir_close(dir); err = 5; return false; } MilkyTracker-1.02.00/src/compression/ZipExtractor.h000066400000000000000000000022241324432207300222120ustar00rootroot00000000000000/* * compression/ZipExtractor.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * ZipExtractor.h * milkytracker_universal * * Created by Peter Barth on 31.01.07. * */ #ifndef __ARCHIVEEXTRACTOR_H__ #define __ARCHIVEEXTRACTOR_H__ #include "BasicTypes.h" class ZipExtractor { private: PPSystemString archivePath; public: ZipExtractor(const PPSystemString& archivePath); bool parseZip(pp_int32& err, bool extract, const PPSystemString* outFile); }; #endif MilkyTracker-1.02.00/src/compression/unlzx.cpp000066400000000000000000001045031324432207300212720ustar00rootroot00000000000000/* ** LZX Extract in (supposedly) portable C. ** ** Based on unlzx 1.0 by David Tritscher. ** Rewritten by Oliver Gantert ** ** Compiled with vbcc/Amiga and lcc/Win32 */ #include "unlzx.h" #include "XMFile.h" #include #ifdef AMIGA static unsigned char *version_string = "$VER: UnLZX " UNLZX_VERSION " (" UNLZX_VERDATE ")"; #endif /* AMIGA */ const unsigned char *month_str[16] = { (unsigned char*)"jan", (unsigned char*)"feb", (unsigned char*)"mar", (unsigned char*)"apr", (unsigned char*)"may", (unsigned char*)"jun", (unsigned char*)"jul", (unsigned char*)"aug", (unsigned char*)"sep", (unsigned char*)"oct", (unsigned char*)"nov", (unsigned char*)"dec", (unsigned char*)"?13", (unsigned char*)"?14", (unsigned char*)"?15", (unsigned char*)"?16" }; const unsigned long crc_table[256] = { 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172, 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433, 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0, 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F, 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1, 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236, 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777, 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94, 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D }; const unsigned char table_one[32] = { 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05, 0x06, 0x06, 0x07, 0x07, 0x08, 0x08, 0x09, 0x09, 0x0a, 0x0a, 0x0b, 0x0b, 0x0c, 0x0c, 0x0d, 0x0d, 0x0e, 0x0e }; const unsigned long table_two[32]= { 0, 1, 2, 3, 4, 6, 8, 12, 16, 24, 32, 48, 64, 96, 128, 192, 256, 384, 512, 768, 1024, 1536, 2048, 3072, 4096, 6144, 8192, 12288, 16384,24576,32768,49152 }; const unsigned long table_three[16]= { 0, 1, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, 4095, 8191, 16383,32767 }; const unsigned char table_four[34]= { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 }; /* -------------------------------------------------------------------------- */ void Unlzx::mkdir(const char* name, int len) { } struct Unlzx::UnLZX *Unlzx::unlzx_init(void) { struct UnLZX *unlzx = NULL; if ((unlzx = (struct UnLZX *)malloc(sizeof(struct UnLZX)))) { memset(unlzx, 0, sizeof(struct UnLZX)); unlzx->match_pattern[0] = '*'; } return(unlzx); } void Unlzx::unlzx_free(struct UnLZX *unlzx) { if (unlzx) { free(unlzx); } } int Unlzx::pmatch(const char *mask, const char *name) { int calls = 0, wild = 0, q = 0; const char * m = mask, * n = name, * ma = mask, * na = name; for(;;) { if (++calls > PMATCH_MAXSTRLEN) return(1); if (*m == '*') { while (*m == '*') ++m; wild = 1; ma = m; na = n; } if (!*m) { if (!*n) return(0); for (--m; (m > mask) && (*m == '?'); --m); if ((*m == '*') && (m > mask) && (m[-1] != '\\')) return(0); if (!wild) return(1); m = ma; } else if (!*n) { while(*m == '*') ++m; return(*m != 0); } if ((*m == '\\') && ((m[1] == '*') || (m[1] == '?'))) { ++m; q = 1; } else { q = 0; } if ((tolower(*m) != tolower(*n)) && ((*m != '?') || q)) { if (!wild) return(1); m = ma; n = ++na; } else { if (*m) ++m; if (*n) ++n; } } } void Unlzx::just_wait(void) { /* Under certain conditions UnLZX needs to wait some cycles for disk access to finish. This only seems to happen on fast CPUs, but it doesn't hurt anyway... */ } unsigned long Unlzx::argopt(unsigned char * ao_strg, unsigned long ao_argc, unsigned char **ao_argv) { while(ao_argc > 1) { if (!strcmp((char*)ao_strg, (char*)ao_argv[ao_argc - 1])) return(ao_argc - 1); ao_argc--; } return(0); } void Unlzx::crc_calc(unsigned char *memory, unsigned long length, struct UnLZX *unlzx) { unsigned long temp; if (length) { temp = ~unlzx->sum; do { temp = crc_table[(*memory++ ^ temp) & 255] ^ (temp >> 8); } while(--length); unlzx->sum = ~temp; } } signed long Unlzx::make_decode_table(signed long number_symbols, signed long table_size, unsigned char *length, unsigned short *table) { unsigned char bit_num = 0; signed long symbol, abort = 0; unsigned long leaf, table_mask, bit_mask, pos, fill, next_symbol, reverse; pos = 0; table_mask = 1 << table_size; bit_mask = table_mask >> 1; bit_num++; while ((!abort) && (bit_num <= table_size)) { for (symbol = 0; symbol < number_symbols; symbol++) { if (length[symbol] == bit_num) { reverse = pos; leaf = 0; fill = table_size; do { leaf = (leaf << 1)+(reverse & 1); reverse >>= 1; } while (--fill); if ((pos += bit_mask) > table_mask) { abort = 1; break; } fill = bit_mask; next_symbol = 1 << bit_num; do { table[leaf] = (unsigned short)symbol; leaf += next_symbol; } while (--fill); } } bit_mask >>= 1; bit_num++; } if ((!abort) && (pos != table_mask)) { for (symbol = pos; symbol < (signed)table_mask; symbol++) { reverse = symbol; leaf = 0; fill = table_size; do { leaf = (leaf << 1)+(reverse & 1); reverse >>= 1; } while (--fill); table[leaf] = 0; } next_symbol = table_mask >> 1; pos <<= 16; table_mask <<= 16; bit_mask = 32768; while((!abort) && (bit_num <= 16)) { for(symbol = 0; symbol < number_symbols; symbol++) { if (length[symbol] == bit_num) { reverse = pos >> 16; leaf = 0; fill = table_size; do { leaf = (leaf << 1)+(reverse & 1); reverse >>= 1; } while (--fill); for (fill = 0; fill < (unsigned)(bit_num - table_size); fill++) { if (!table[leaf]) { table[(next_symbol << 1)] = 0; table[(next_symbol << 1) + 1] = 0; table[leaf] = (unsigned short)(next_symbol++); } leaf = (unsigned short)(table[leaf] << 1); leaf += (pos >> (15 - fill)) & 1; } table[leaf] = (unsigned short)symbol; if ((pos += bit_mask) > table_mask) { abort = 1; break; } } } bit_mask >>= 1; bit_num++; } } if (pos != table_mask) abort = 1; return(abort); } signed long Unlzx::read_literal_table(struct UnLZX *unlzx) { signed long shift = unlzx->global_shift, abort = 0; unsigned long control = unlzx->global_control, temp, symbol, pos, count, fix, max_symbol; if (shift < 0) { shift += 16; control += *unlzx->source++ << (8 + shift); control += *unlzx->source++ << shift; } unlzx->decrunch_method = control & 7; control >>= 3; if ((shift -= 3) < 0) { shift += 16; control += *unlzx->source++ << (8 + shift); control += *unlzx->source++ << shift; } if ((!abort) && (unlzx->decrunch_method == 3)) { for (temp = 0; temp < 8; temp++) { unlzx->offset_len[temp] = (unsigned char)(control & 7); control >>= 3; if ((shift -= 3) < 0) { shift += 16; control += *unlzx->source++ << (8 + shift); control += *unlzx->source++ << shift; } } abort = make_decode_table(8, 7, unlzx->offset_len, unlzx->offset_table); } if (!abort) { unlzx->decrunch_length = (control & 255) << 16; control >>= 8; if ((shift -= 8) < 0) { shift += 16; control += *unlzx->source++ << (8 + shift); control += *unlzx->source++ << shift; } unlzx->decrunch_length += (control & 255) << 8; control >>= 8; if ((shift -= 8) < 0) { shift += 16; control += *unlzx->source++ << (8 + shift); control += *unlzx->source++ << shift; } unlzx->decrunch_length += (control & 255); control >>= 8; if ((shift -= 8) < 0) { shift += 16; control += *unlzx->source++ << (8 + shift); control += *unlzx->source++ << shift; } } if ((!abort) && (unlzx->decrunch_method != 1)) { pos = 0; fix = 1; max_symbol = 256; do { for (temp = 0; temp < 20; temp++) { unlzx->huffman20_len[temp] = (unsigned char)(control & 15); control >>= 4; if ((shift -= 4) < 0) { shift += 16; control += *unlzx->source++ << (8 + shift); control += *unlzx->source++ << shift; } } if ((abort = make_decode_table(20, 6, unlzx->huffman20_len, unlzx->huffman20_table))) break; do { if ((symbol = unlzx->huffman20_table[control & 63]) >= 20) { do { symbol = unlzx->huffman20_table[((control >> 6) & 1) + (symbol << 1)]; if (!shift--) { shift += 16; control += *unlzx->source++ << 24; control += *unlzx->source++ << 16; } control >>= 1; } while(symbol >= 20); temp = 6; } else { temp = unlzx->huffman20_len[symbol]; } control >>= temp; if ((shift -= temp) < 0) { shift += 16; control += *unlzx->source++ << (8 + shift); control += *unlzx->source++ << shift; } switch(symbol) { case 17: case 18: if(symbol == 17) { temp = 4; count = 3; } else { temp = 6 - fix; count = 19; } count += (control & table_three[temp]) + fix; control >>= temp; if ((shift -= temp) < 0) { shift += 16; control += *unlzx->source++ << (8 + shift); control += *unlzx->source++ << shift; } while ((pos < max_symbol) && (count--)) unlzx->literal_len[pos++] = 0; break; case 19: count = (control & 1) + 3 + fix; if (!shift--) { shift += 16; control += *unlzx->source++ << 24; control += *unlzx->source++ << 16; } control >>= 1; if ((symbol = unlzx->huffman20_table[control & 63]) >= 20) { do { symbol = unlzx->huffman20_table[((control >> 6) & 1) + (symbol << 1)]; if (!shift--) { shift += 16; control += *unlzx->source++ << 24; control += *unlzx->source++ << 16; } control >>= 1; } while(symbol >= 20); temp = 6; } else { temp = unlzx->huffman20_len[symbol]; } control >>= temp; if ((shift -= temp) < 0) { shift += 16; control += *unlzx->source++ << (8 + shift); control += *unlzx->source++ << shift; } symbol = table_four[unlzx->literal_len[pos] + 17 - symbol]; while ((pos < max_symbol) && (count--)) unlzx->literal_len[pos++] = (unsigned char)symbol; break; default: symbol = table_four[unlzx->literal_len[pos] + 17 - symbol]; unlzx->literal_len[pos++] = (unsigned char)symbol; break; } } while(pos < max_symbol); fix--; max_symbol += 512; } while(max_symbol == 768); if(!abort) abort = make_decode_table(768, 12, unlzx->literal_len, unlzx->literal_table); } unlzx->global_control = control; unlzx->global_shift = shift; return(abort); } void Unlzx::decrunch(struct UnLZX *unlzx) { unsigned long control = unlzx->global_control, temp, symbol, count; signed long shift = unlzx->global_shift; unsigned char *string; do { if ((symbol = unlzx->literal_table[control & 4095]) >= 768) { control >>= 12; if ((shift -= 12) < 0) { shift += 16; control += *unlzx->source++ << (8 + shift); control += *unlzx->source++ << shift; } do { symbol = unlzx->literal_table[(control & 1) + (symbol << 1)]; if (!shift--) { shift += 16; control += *unlzx->source++ << 24; control += *unlzx->source++ << 16; } control >>= 1; } while(symbol >= 768); } else { temp = unlzx->literal_len[symbol]; control >>= temp; if ((shift -= temp) < 0) { shift += 16; control += *unlzx->source++ << (8 + shift); control += *unlzx->source++ << shift; } } if (symbol < 256) { *unlzx->destination++ = (unsigned char)symbol; } else { symbol -= 256; count = table_two[temp = symbol & 31]; temp = table_one[temp]; if ((temp >= 3) && (unlzx->decrunch_method == 3)) { temp -= 3; count += ((control & table_three[temp]) << 3); control >>= temp; if ((shift -= temp) < 0) { shift += 16; control += *unlzx->source++ << (8 + shift); control += *unlzx->source++ << shift; } count += (temp = unlzx->offset_table[control & 127]); temp = unlzx->offset_len[temp]; } else { count += control & table_three[temp]; if (!count) count = unlzx->last_offset; } control >>= temp; if ((shift -= temp) < 0) { shift += 16; control += *unlzx->source++ << (8 + shift); control += *unlzx->source++ << shift; } unlzx->last_offset = count; count = table_two[temp = (symbol >> 5) & 15] + 3; temp = table_one[temp]; count += (control & table_three[temp]); control >>= temp; if ((shift -= temp) < 0) { shift += 16; control += *unlzx->source++ << (8 + shift); control += *unlzx->source++ << shift; } string = (unlzx->decrunch_buffer + unlzx->last_offset < unlzx->destination) ? unlzx->destination - unlzx->last_offset : unlzx->destination + 65536 - unlzx->last_offset; do { *unlzx->destination++ = *string++; } while(--count); } } while((unlzx->destination < unlzx->destination_end) && (unlzx->source < unlzx->source_end)); unlzx->global_control = control; unlzx->global_shift = shift; } XMFile* Unlzx::open_output(const PPSystemString& filename) { XMFile *file = new XMFile(filename, true); if (!file->isOpenForWriting()) return NULL; return(file); } signed long Unlzx::extract_normal(XMFile* in_file, struct UnLZX *unlzx, bool& found) { found = false; struct filename_node *node; XMFile *out_file = NULL; unsigned char *pos, *temp; unsigned long count; signed long abort = 0; unlzx->global_control = 0; unlzx->global_shift = -16; unlzx->last_offset = 1; unlzx->unpack_size = 0; unlzx->decrunch_length = 0; for(count = 0; count < 8; count++) unlzx->offset_len[count] = 0; for(count = 0; count < 768; count ++) unlzx->literal_len[count] = 0; unlzx->source_end = (unlzx->source = unlzx->read_buffer + 16384) - 1024; pos = unlzx->destination_end = unlzx->destination = unlzx->decrunch_buffer + 65794; for (node = unlzx->filename_list; (!abort) && node; node = node->next) { unlzx->sum = 0; if (unlzx->use_outdir) { strcpy((char*)unlzx->work_buffer, (char*)unlzx->output_dir); strcat((char*)unlzx->work_buffer, (char*)node->filename); } else { strcpy((char*)unlzx->work_buffer, (char*)node->filename); } fflush(stdout); if (!pmatch((char*)unlzx->match_pattern, (char*)node->filename)) { #ifdef UNLZX_DEBUG printf("Extracting \"%s\"...", (char *)node->filename); #endif out_file = unlzx->temporaryFile ? open_output(*(unlzx->temporaryFile)) : open_output(PPSystemString((const char*)unlzx->work_buffer)); } else { out_file = NULL; } unlzx->unpack_size = node->length; while(unlzx->unpack_size > 0) { if (pos == unlzx->destination) { if(unlzx->source >= unlzx->source_end) { temp = unlzx->read_buffer; if ((count = temp - unlzx->source + 16384)) { do { *temp++ = *unlzx->source++; } while(--count); } unlzx->source = unlzx->read_buffer; count = unlzx->source - temp + 16384; if (unlzx->pack_size < count) count = unlzx->pack_size; if (in_file->read(temp, 1, count) != count) { #ifdef UNLZX_DEBUG printf("\n"); if (ferror(in_file)) { perror("FRead(Data)"); } else { fprintf(stderr, "EOF: Data\n"); } #endif abort = 1; break; } unlzx->pack_size -= count; temp += count; if (unlzx->source >= temp) break; } if (unlzx->decrunch_length <= 0) { if (read_literal_table(unlzx)) break; } if (unlzx->destination >= unlzx->decrunch_buffer + 65794) { if ((count = unlzx-> destination - unlzx-> decrunch_buffer - 65536)) { temp = (unlzx->destination = unlzx->decrunch_buffer) + 65536; do { *unlzx->destination++ = *temp++; } while(--count); } pos = unlzx->destination; } unlzx->destination_end = unlzx->destination + unlzx->decrunch_length; if(unlzx->destination_end > unlzx->decrunch_buffer + 65794) unlzx->destination_end = unlzx->decrunch_buffer + 65794; temp = unlzx->destination; decrunch(unlzx); unlzx->decrunch_length -= (unlzx->destination - temp); } count = unlzx->destination - pos; if (count > unlzx->unpack_size) count = unlzx->unpack_size; crc_calc(pos, count, unlzx); if (out_file) { if (out_file->write(pos, 1, count) != count) { #ifdef UNLZX_DEBUG perror("FWrite"); #endif delete out_file; out_file = 0; } } unlzx->unpack_size -= count; pos += count; } if (out_file) { PPSystemString fileName = out_file->getFileName(); delete out_file; if (!abort) { #ifdef UNLZX_DEBUG printf(" crc %s\n", (char *)((node->crc == unlzx->sum) ? "good" : "bad")); #endif if (identificator) found = identificator->identify(fileName); } } } return(abort); } signed long Unlzx::extract_store(XMFile* in_file, struct UnLZX *unlzx, bool& found) { struct filename_node *node; XMFile *out_file = NULL; unsigned long count; signed long abort = 0; for (node = unlzx->filename_list; (!abort) && (node); node = node->next) { unlzx->sum = 0; if (unlzx->use_outdir) { strcpy((char*)unlzx->work_buffer, (char*)unlzx->output_dir); strcat((char*)unlzx->work_buffer, (char*)node->filename); } else { strcpy((char*)unlzx->work_buffer, (char*)node->filename); } fflush(stdout); if (!pmatch((char*)unlzx->match_pattern, (char*)node->filename)) { #ifdef UNLZX_DEBUG printf("Storing \"%s\"...", (char *)node->filename); #endif out_file = unlzx->temporaryFile ? open_output(*(unlzx->temporaryFile)) : open_output(PPSystemString((const char*)unlzx->work_buffer)); } else { out_file = 0; } unlzx->unpack_size = node->length; if (unlzx->unpack_size > unlzx->pack_size) unlzx->unpack_size = unlzx->pack_size; while (unlzx->unpack_size > 0) { count = (unlzx->unpack_size > 16384) ? 16384 : unlzx->unpack_size; if (in_file->read(unlzx->read_buffer, 1, count) != count) { #ifdef UNLZX_DEBUG printf("\n"); if (ferror(in_file)) { perror("FRead(Data)"); } else { fprintf(stderr, "EOF: Data\n"); } #endif abort = 1; break; } unlzx->pack_size -= count; crc_calc(unlzx->read_buffer, count, unlzx); if (out_file) { if (out_file->write(unlzx->read_buffer, 1, count) != count) { #ifdef UNLZX_DEBUG perror("FWrite"); #endif delete out_file; out_file = 0; } } unlzx->unpack_size -= count; } if (out_file) { PPSystemString fileName = out_file->getFileName(); delete out_file; if (!abort) { #ifdef UNLZX_DEBUG printf(" crc %s\n", (char *)((node->crc == unlzx->sum) ? "good" : "bad")); #endif if (identificator) found = identificator->identify(fileName); } } } return(abort); } signed long Unlzx::extract_unknown(XMFile *in_file, struct UnLZX *unlzx, bool& found) { struct filename_node *node; for (node = unlzx->filename_list; (node); node = node->next) { #ifdef UNLZX_DEBUG printf("Unknown \"%s\"\n", (char *)node->filename); #endif } return(0); } signed long Unlzx::extract_archive(XMFile *in_file, struct UnLZX *unlzx, bool& found) { unsigned long temp; struct filename_node **filename_next; struct filename_node *node; struct filename_node *temp_node; signed long actual, abort, result = 1; unlzx->filename_list = 0; filename_next = &unlzx->filename_list; do { abort = 1; actual = in_file->read(unlzx->archive_header, 1, 31); if (!in_file->isEOF()) { if (actual) { if (actual == 31) { unlzx->sum = 0; unlzx->crc = (unlzx->archive_header[29] << 24) + (unlzx->archive_header[28] << 16) + (unlzx->archive_header[27] << 8) + unlzx->archive_header[26]; unlzx->archive_header[29] = unlzx->archive_header[28] = unlzx->archive_header[27] = unlzx->archive_header[26] = 0; crc_calc(unlzx->archive_header, 31, unlzx); temp = unlzx->archive_header[30]; actual = in_file->read(unlzx->header_filename, 1, temp); if (!in_file->isEOF()) { if (actual == temp) { unlzx->header_filename[temp] = 0; crc_calc(unlzx->header_filename, temp, unlzx); temp = unlzx->archive_header[14]; actual = in_file->read(unlzx->header_comment, 1, temp); if (!in_file->isEOF()) { if (actual == temp) { unlzx->header_comment[temp] = 0; crc_calc(unlzx->header_comment, temp, unlzx); if (unlzx->sum == unlzx->crc) { unlzx->unpack_size = (unlzx->archive_header[5] << 24) + (unlzx->archive_header[4] << 16) + (unlzx->archive_header[3] << 8) + unlzx->archive_header[2]; unlzx->pack_size = (unlzx->archive_header[9] << 24) + (unlzx->archive_header[8] << 16) + (unlzx->archive_header[7] << 8) + unlzx->archive_header[6]; unlzx->pack_mode = unlzx->archive_header[11]; unlzx->crc = (unlzx->archive_header[25] << 24) + (unlzx->archive_header[24] << 16) + (unlzx->archive_header[23] << 8) + unlzx->archive_header[22]; if ((node = (struct filename_node *) malloc(sizeof(struct filename_node)))) { *filename_next = node; filename_next = &(node->next); node->next = 0; node->length = unlzx->unpack_size; node->crc = unlzx->crc; for (temp = 0; (node->filename[temp] = unlzx->header_filename[temp]); temp++); if (unlzx->pack_size) { switch(unlzx->pack_mode) { case 0: abort = extract_store(in_file, unlzx, found); break; case 2: abort = extract_normal(in_file, unlzx, found); break; default: abort = extract_unknown(in_file, unlzx, found); break; } if (found) { abort = 1; result = 0; } if (abort) break; temp_node = unlzx->filename_list; while ((node = temp_node)) { temp_node = node->next; free(node); } unlzx->filename_list = 0; filename_next = &unlzx->filename_list; in_file->seek(unlzx->pack_size, XMFile::SeekOffsetTypeCurrent); } else { abort = 0; } } #ifdef UNLZX_DEBUG else { fprintf(stderr, "MAlloc(Filename_node)\n"); } #endif } #ifdef UNLZX_DEBUG else { fprintf(stderr, "CRC: Archive_Header\n"); } #endif } #ifdef UNLZX_DEBUG else { fprintf(stderr, "EOF: Header_Comment\n"); } #endif } #ifdef UNLZX_DEBUG else { perror("FRead(Header_Comment)"); } #endif } #ifdef UNLZX_DEBUG else { fprintf(stderr, "EOF: Header_Filename\n"); } #endif } #ifdef UNLZX_DEBUG else { perror("FRead(Header_Filename)"); } #endif } #ifdef UNLZX_DEBUG else { fprintf(stderr, "EOF: Archive_Header\n"); } #endif } else { result = 0; } } #ifdef UNLZX_DEBUG else { perror("FRead(Archive_Header)"); } #endif } while(!abort); temp_node = unlzx->filename_list; while((node = temp_node)) { temp_node = node->next; free(node); } return(result); } signed long Unlzx::view_archive(XMFile* in_file, struct UnLZX *unlzx) { unsigned long temp, total_pack = 0, total_unpack = 0, total_files = 0, merge_size = 0; signed long actual, abort, result = 1; int percent; printf("Unpacked Packed Time Date Attrib Name\n"); printf("-------- -------- -------- ----------- -------- ----\n"); do { abort = 1; actual = in_file->read(unlzx->archive_header, 1, 31); if (!in_file->isEOF()) { if (actual) { if (actual == 31) { unlzx->sum = 0; unlzx->crc = (unlzx->archive_header[29] << 24) + (unlzx->archive_header[28] << 16) + (unlzx->archive_header[27] << 8) + unlzx->archive_header[26]; unlzx->archive_header[29] = unlzx->archive_header[28] = unlzx->archive_header[27] = unlzx->archive_header[26] = 0; crc_calc(unlzx->archive_header, 31, unlzx); temp = unlzx->archive_header[30]; actual = in_file->read(unlzx->header_filename, 1, temp); if (!in_file->isEOF()) { if (actual == temp) { unlzx->header_filename[temp] = 0; crc_calc(unlzx->header_filename, temp, unlzx); temp = unlzx->archive_header[14]; actual = in_file->read(unlzx->header_comment, 1, temp); if (!in_file->isEOF()) { if (actual == temp) { unlzx->header_comment[temp] = 0; crc_calc(unlzx->header_comment, temp, unlzx); if (unlzx->sum == unlzx->crc) { unlzx->attributes = unlzx->archive_header[0]; unlzx->unpack_size = (unlzx->archive_header[5] << 24) + (unlzx->archive_header[4] << 16) + (unlzx->archive_header[3] << 8) + unlzx->archive_header[2]; unlzx->pack_size = (unlzx->archive_header[9] << 24) + (unlzx->archive_header[8] << 16) + (unlzx->archive_header[7] << 8) + unlzx->archive_header[6]; temp = (unlzx->archive_header[18] << 24) + (unlzx->archive_header[19] << 16) + (unlzx->archive_header[20] << 8) + unlzx->archive_header[21]; unlzx->year = ((temp >> 17) & 63) + 1970; unlzx->month = (temp >> 23) & 15; unlzx->day = (temp >> 27) & 31; unlzx->hour = (temp >> 12) & 31; unlzx->minute = (temp >> 6) & 63; unlzx->second = temp & 63; total_pack += unlzx->pack_size; total_unpack += unlzx->unpack_size; total_files++; merge_size += unlzx->unpack_size; printf("%8ld ", (long)unlzx->unpack_size); if (unlzx->archive_header[12] & 1) { printf(" n/a "); } else { printf("%8ld ", (long)unlzx->pack_size); } printf("%02ld:%02ld:%02ld ", (long)unlzx->hour, (long)unlzx->minute, (long)unlzx->second); printf("%2ld-%s-%4ld ", (long)unlzx->day, (char *)month_str[unlzx->month], (long)unlzx->year); printf("%c%c%c%c%c%c%c%c ", ((unlzx->attributes & 32) ? 'h' : '-'), ((unlzx->attributes & 64) ? 's' : '-'), ((unlzx->attributes & 128) ? 'p' : '-'), ((unlzx->attributes & 16) ? 'a' : '-'), ((unlzx->attributes & 1) ? 'r' : '-'), ((unlzx->attributes & 2) ? 'w' : '-'), ((unlzx->attributes & 8) ? 'e' : '-'), ((unlzx->attributes & 4) ? 'd' : '-')); printf("\"%s\"\n", (char *)unlzx->header_filename); if(unlzx->header_comment[0]) printf(": \"%s\"\n", (char *)unlzx->header_comment); if ((unlzx->archive_header[12] & 1) && unlzx->pack_size) { percent = make_percent(unlzx->pack_size, merge_size); printf("%8ld %8ld Merged (%3d%%)\n", (long)merge_size, (long)unlzx->pack_size, (int)percent); } if (unlzx->pack_size) { merge_size = 0; in_file->seek(unlzx->pack_size, XMFile::SeekOffsetTypeCurrent); abort = 0; just_wait(); } else { abort = 0; } } #ifdef UNLZX_DEBUG else { fprintf(stderr, "CRC: Archive_Header\n"); } #endif } #ifdef UNLZX_DEBUG else { fprintf(stderr, "EOF: Header_Comment\n"); } #endif } #ifdef UNLZX_DEBUG else { perror("FRead(Header_Comment)"); } #endif } #ifdef UNLZX_DEBUG else { fprintf(stderr, "EOF: Header_Filename\n"); } #endif } #ifdef UNLZX_DEBUG else { perror("FRead(Header_Filename)"); } #endif } #ifdef UNLZX_DEBUG else { fprintf(stderr, "EOF: Archive_Header\n"); } #endif } else { printf("-------- -------- -------- ----------- -------- ----\n"); percent = make_percent(total_pack, total_unpack); printf("%8ld %8ld (%3d%%) ", (long)total_unpack, (long)total_pack, (int)percent); printf("%ld file%s\n", (long)total_files, (char *)((total_files == 1) ? "" : "s")); result = 0; } } #ifdef UNLZX_DEBUG else { perror("FRead(Archive_Header)"); } #endif } while(!abort); return(result); } signed long Unlzx::process_archive(const PPSystemString& filename, struct UnLZX *unlzx, bool& found) { signed long result = 1, actual; XMFile* in_file = new XMFile(filename); { actual = in_file->read(unlzx->info_header, 1, 10); if (!in_file->isEOF()) { if (actual == 10) { if ((unlzx->info_header[0] == 76) && (unlzx->info_header[1] == 90) && (unlzx->info_header[2] == 88)) { switch (unlzx->mode) { case 1: result = extract_archive(in_file, unlzx, found); break; case 2: result = view_archive(in_file, unlzx); break; } } #ifdef UNLZX_DEBUG else { fprintf(stderr, "Info_Header: Bad ID\n"); } #endif } #ifdef UNLZX_DEBUG else { fprintf(stderr, "EOF: Info_Header\n"); } #endif } #ifdef UNLZX_DEBUG else { perror("FRead(Info_Header)"); } #endif delete in_file; } #ifdef UNLZX_DEBUG else { perror("FOpen(Archive)"); } #endif return(result); } #if 0 int main(int argc, char **argv) { #ifdef UNLZX_TIME int init_time, time_taken; #endif int result = 0; unsigned long option; unsigned char tmp; struct UnLZX *unlzx; if (unlzx = unlzx_init()) { if (option = argopt((unsigned char*)"-p", (unsigned long)argc, (unsigned char**)argv)) { if (++option < argc) { strcpy((char*)unlzx->match_pattern, (char*)argv[option]); } } if (option = argopt((unsigned char*)"-o", (unsigned long)argc, (unsigned char **)argv)) { if (++option < argc) { strcpy((char*)unlzx->output_dir, (char*)argv[option]); unlzx->use_outdir = 1; tmp = strlen((char*)unlzx->output_dir) - 1; #ifdef AMIGA if ((unlzx->output_dir[tmp] != '/') && (unlzx->output_dir[tmp] != ':')) { unlzx->output_dir[tmp+1] = '/'; #else if (unlzx->output_dir[tmp] != '\\') { unlzx->output_dir[tmp+1] = '\\'; #endif /* AMIGA */ unlzx->output_dir[tmp+2] = '\0'; } } } if (option = argopt((unsigned char*)"-v", (unsigned long)argc, (unsigned char **)argv)) { unlzx->mode = 2; } else if (option = argopt((unsigned char*)"-x", (unsigned long)argc, (unsigned char **)argv)) { unlzx->mode = 1; } else { result = 1; } if ((!result) && (++option < argc)) { #ifdef UNLZX_TIME init_time = (int)time(NULL); #endif result = process_archive((unsigned char*)argv[option], unlzx); #ifdef UNLZX_TIME time_taken = (int)time(NULL) - init_time; printf("Time taken: %ds\n", time_taken); #endif } else { printf( "Usage: %s \n", (char *)argv[0] ); printf( "\t-v : list archive\n" "\t-x : extract archive\n" "\t-p : only matching files\n" "\t-o : destination path\n" ); result = 2; } unlzx_free(unlzx); } return(result); } #endif Unlzx::Unlzx(const PPSystemString& archiveFilename, const FileIdentificator* identificator) : archiveFilename(archiveFilename) , identificator(identificator) , unlzx(NULL) { } Unlzx::~Unlzx() { if (unlzx) unlzx_free(unlzx); } bool Unlzx::extractFile(bool extract, const PPSystemString* outFilename) { int result = 0; if ((unlzx = unlzx_init())) { if (extract) { unlzx->mode = 1; unlzx->temporaryFile = outFilename; bool found = false; // TODO: make this all type safe result = process_archive(archiveFilename, unlzx, found); return found && (result == 0); } } return false; } MilkyTracker-1.02.00/src/compression/unlzx.h000066400000000000000000000067471324432207300207520ustar00rootroot00000000000000/* ** LZX Extract in (supposedly) portable C. ** ** Based on unlzx 1.0 by David Tritscher. ** Rewritten by Oliver Gantert ** ** Compiled with vbcc/Amiga and lcc/Win32 */ #ifndef unlzx_unlzx_h #undef AMIGA #define UNLZX_VERSION "2.16" #define UNLZX_VERDATE "14.11.2000" /* #define UNLZX_DEBUG #define UNLZX_TIME */ #if defined(AMIGA) #include LONG mkdir(STRPTR path, UWORD perm); #endif #include "BasicTypes.h" class XMFile; class Unlzx { public: struct FileIdentificator { virtual bool identify(const PPSystemString& filename) const = 0; }; private: struct filename_node { struct filename_node * next; unsigned long length; unsigned long crc; unsigned char filename[256]; }; struct UnLZX { unsigned char match_pattern[256]; signed long use_outdir; unsigned char output_dir[768]; unsigned char work_buffer[1024]; signed long mode; unsigned char info_header[10]; unsigned char archive_header[32]; unsigned char header_filename[256]; unsigned char header_comment[256]; unsigned long pack_size; unsigned long unpack_size; unsigned long crc; unsigned long year; unsigned long month; unsigned long day; unsigned long hour; unsigned long minute; unsigned long second; unsigned char attributes; unsigned char pack_mode; struct filename_node *filename_list; unsigned char read_buffer[16384]; unsigned char decrunch_buffer[66560]; unsigned char *source; unsigned char *destination; unsigned char *source_end; unsigned char *destination_end; unsigned long decrunch_method; unsigned long decrunch_length; unsigned long last_offset; unsigned long global_control; signed long global_shift; unsigned char offset_len[8]; unsigned short offset_table[128]; unsigned char huffman20_len[20]; unsigned short huffman20_table[96]; unsigned char literal_len[768]; unsigned short literal_table[5120]; unsigned long sum; const PPSystemString* temporaryFile; }; PPSystemString archiveFilename; const FileIdentificator* identificator; UnLZX* unlzx; void mkdir(const char* name, int len); struct UnLZX *unlzx_init(void); void unlzx_free(struct UnLZX *unlzx); int pmatch(const char *mask, const char *name); void just_wait(void); unsigned long argopt(unsigned char * ao_strg, unsigned long ao_argc, unsigned char **ao_argv); void crc_calc(unsigned char *memory, unsigned long length, struct UnLZX *unlzx); signed long make_decode_table(signed long number_symbols, signed long table_size, unsigned char *length, unsigned short *table); signed long read_literal_table(struct UnLZX *unlzx); void decrunch(struct UnLZX *unlzx); XMFile* open_output(const PPSystemString& filename); signed long extract_normal(XMFile* in_file, struct UnLZX *unlzx, bool& found); signed long extract_store(XMFile* in_file, struct UnLZX *unlzx, bool& found); signed long extract_unknown(XMFile* in_file, struct UnLZX *unlzx, bool& found); signed long extract_archive(XMFile* in_file, struct UnLZX *unlzx, bool& found); signed long view_archive(XMFile* in_file, struct UnLZX *unlzx); signed long process_archive(const PPSystemString& filename, struct UnLZX *unlzx, bool& found); public: Unlzx(const PPSystemString& archiveFilename, const FileIdentificator* identificator = NULL); ~Unlzx(); bool extractFile(bool extract, const PPSystemString* outFilename); }; #define PMATCH_MAXSTRLEN 512 /* max string length */ #define make_percent(p,m) ((p*100)/m) #endif /* unlzx_unlzx_h */ MilkyTracker-1.02.00/src/compression/zziplib/000077500000000000000000000000001324432207300210665ustar00rootroot00000000000000MilkyTracker-1.02.00/src/compression/zziplib/MyIO.cpp000066400000000000000000000025311324432207300224100ustar00rootroot00000000000000/* * MyIO.cpp * MilkyTracker * * Created by Peter Barth on 03.12.07. * */ #include "MyIO.h" #include "XMFile.h" #define FILE_TABLE_ENTRIES 256 static XMFile* file_table[FILE_TABLE_ENTRIES]; int Myopen(const zzip_char_t* name, int flags, ...) { XMFile* f = new XMFile((SYSCHAR*)name, (flags & O_WRONLY) ? true : false); if (f->isOpen()) { // Find free space in the file table // zziplib has a bug where it forbid using fd 0, so skip it for (int i = 1; i < FILE_TABLE_ENTRIES; i++) { if (file_table[i] == NULL) { file_table[i] = f; return i; } } } delete f; return -1; } int Myclose(int fd) { if (fd == -1) return -1; delete file_table[fd]; file_table[fd] = NULL; return 0; } zzip_ssize_t Myread(int fd, void *buffer, zzip_size_t count) { if (fd == -1) return -1; return file_table[fd]->read(buffer, 1, static_cast (count)); } zzip_off_t Mylseek(int fd, zzip_off_t offset, int origin) { if (fd == -1) return -1; XMFile::SeekOffsetTypes moveMethod = XMFile::SeekOffsetTypeStart; if (origin == SEEK_CUR) moveMethod = XMFile::SeekOffsetTypeCurrent; else if (origin == SEEK_END) moveMethod = XMFile::SeekOffsetTypeEnd; file_table[fd]->seek(offset, moveMethod); return file_table[fd]->pos(); } zzip_off_t Myfsize(int fd) { if (fd == -1) return -1; return file_table[fd]->size(); } MilkyTracker-1.02.00/src/compression/zziplib/MyIO.h000066400000000000000000000007131324432207300220550ustar00rootroot00000000000000/* * MyIO.h * MilkyTracker * * Created by Peter Barth on 03.12.07. * */ #ifndef __MYIO_H__ #define __MYIO_H__ #include #ifdef __cplusplus extern "C" { #endif int Myopen(const zzip_char_t* name, int flags, ...); int Myclose(int fd); zzip_ssize_t Myread(int fd, void *buffer, zzip_size_t count); zzip_off_t Mylseek(int fd, zzip_off_t offset, int origin); zzip_off_t Myfsize(int fd); #ifdef __cplusplus }; #endif #endif MilkyTracker-1.02.00/src/fx/000077500000000000000000000000001324432207300154575ustar00rootroot00000000000000MilkyTracker-1.02.00/src/fx/CMakeLists.txt000066400000000000000000000031101324432207300202120ustar00rootroot00000000000000# # src/fx/CMakeLists.txt # # Copyright 2016 Dale Whinham # # This file is part of MilkyTracker. # # MilkyTracker 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. # # MilkyTracker 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 MilkyTracker. If not, see . # set(SOURCES Camera.cpp Filter.cpp Fire.cpp Math3d.cpp ParticleBlobs.cpp ParticleEmitter.cpp ParticleFX.cpp ParticleFun.cpp ParticleScene.cpp Starfield.cpp TCBSpline.cpp TCBSplineTest.cpp Texture.cpp TexturedGrid.cpp TexturedPlane.cpp Twister.cpp TwisterFX.cpp fpmath.cpp ) set(HEADERS Camera.h FXAbstract.h FXInterface.h Filter.h Fire.h Math3d.h ParticleBlobs.h ParticleEmitter.h ParticleFX.h ParticleFun.h ParticleScene.h PictureGlow.h Starfield.h TCBSpline.h TCBSplineTest.h Texture.h TexturedGrid.h TexturedPlane.h Twister.h TwisterFX.h fpmath.h ) include_directories( ${PROJECT_SOURCE_DIR}/src/ppui/osinterface/posix ${PROJECT_SOURCE_DIR}/src/ppui ) add_library(fx ${SOURCES} ${HEADERS}) MilkyTracker-1.02.00/src/fx/Camera.cpp000066400000000000000000000102021324432207300173460ustar00rootroot00000000000000/* * fx/Camera.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "Camera.h" Camera::Camera() { position.x = position.y = position.z = 0; target.x = target.y = target.z = 0; bank = lens = 0.0f; trackPositionMatrix.setID(); trackTargetMatrix.setID(); } Camera::Camera(VectorFP& pos, VectorFP& target) { trackPositionMatrix.setID(); trackTargetMatrix.setID(); bank = lens = 0.0f; position = pos; target = target; } //////////// // Camera // //////////// static float getAngle(VectorFloat vec1,VectorFloat vec2) { float cosPhi = (vec1*vec2)/(vec1.length()*vec2.length()); if (vec1.y>=vec2.y) return (float)acos(cosPhi); else return -(float)acos(cosPhi); } MatrixFP Camera::getMatrix() { VectorFloat target,target2,veca,vecb; float rotangle,rotx,roty,rotz; MatrixFP cm; // 3ds style vectors /*cm.form[0][0] = 65536; cm.form[0][1] = 0; cm.form[0][2] = 0; cm.form[0][3] = 0; cm.form[1][0] = 0; cm.form[1][1] = 0; cm.form[1][2] = 65536; cm.form[1][3] = 0; cm.form[2][0] = 0; cm.form[2][1] = 65536; cm.form[2][2] = 0; cm.form[2][3] = 0; cm.form[3][0] = 0; cm.form[3][1] = 0; cm.form[3][2] = 0; cm.form[3][3] = 65536;*/ cm.setID(); MatrixFP im = (cm*trackPositionMatrix); VectorFP pos=im*this->position; im = (cm*trackTargetMatrix); VectorFP targ=im*this->target; veca.x=1.0f; veca.y=0.0f; veca.z=0.0f; vecb.x=(targ.z-pos.z)/65536.0f; vecb.y=(targ.x-pos.x)/65536.0f; vecb.z=0.0f; roty=getAngle(veca,vecb); target.x=(targ.x-pos.x)/65536.0f; target.y=(targ.z-pos.z)/65536.0f; rotangle=-roty; //target2.x=(target.x*(float)cos(rotangle))-(target.y*(float)sin(rotangle)); target2.y=(target.x*(float)sin(rotangle))+(target.y*(float)cos(rotangle)); vecb.x=target2.y; vecb.y=(targ.y-pos.y)/65536.0f; vecb.z=0.0f; rotx=-getAngle(veca,vecb); rotz=(float)-(bank/180.0f*M_PI); MatrixFP rotX,rotY,rotZ,tm; rotX.setRotX(rotx); rotY.setRotY(roty); rotZ.setRotZ(rotz); tm.setSubtract(pos); /*MatrixFP m = rotZ*rotX*rotY; rotX.setRotX(-rotx); rotY.setRotY(-roty); rotZ.setRotZ(-rotz); MatrixFP m2 = rotY*rotX*rotZ; MatrixFP m3 = m*m2;*/ im = tm*cm; im = rotY*im; im = rotX*im; im = rotZ*im; return im; } MatrixFP Camera::getMatrixInverse() { VectorFloat target,target2,veca,vecb; float rotangle,rotx,roty,rotz; MatrixFP cm; // .3ds style vectors /*cm.form[0][0] = 65536; cm.form[0][1] = 0; cm.form[0][2] = 0; cm.form[0][3] = 0; cm.form[1][0] = 0; cm.form[1][1] = 0; cm.form[1][2] = 65536; cm.form[1][3] = 0; cm.form[2][0] = 0; cm.form[2][1] = 65536; cm.form[2][2] = 0; cm.form[2][3] = 0; cm.form[3][0] = 0; cm.form[3][1] = 0; cm.form[3][2] = 0; cm.form[3][3] = 65536;*/ cm.setID(); MatrixFP im = (cm*trackPositionMatrix); VectorFP pos=im*this->position; im = (cm*trackTargetMatrix); VectorFP targ=im*this->target; veca.x=1.0f; veca.y=0.0f; veca.z=0.0f; vecb.x=(targ.z-pos.z)/65536.0f; vecb.y=(targ.x-pos.x)/65536.0f; vecb.z=0.0f; roty=getAngle(veca,vecb); target.x=(targ.x-pos.x)/65536.0f; target.y=(targ.z-pos.z)/65536.0f; rotangle=-roty; //target2.x=(target.x*(float)cos(rotangle))-(target.y*(float)sin(rotangle)); target2.y=(target.x*(float)sin(rotangle))+(target.y*(float)cos(rotangle)); vecb.x=target2.y; vecb.y=(targ.y-pos.y)/65536.0f; vecb.z=0.0f; rotx=-getAngle(veca,vecb); rotz=(float)-(bank/180.0f*M_PI); MatrixFP rotX,rotY,rotZ,tm; //tm.setSubtract(pos); //MatrixFP m = rotZ*rotX*rotY; rotX.setRotX(-rotx); rotY.setRotY(-roty); rotZ.setRotZ(-rotz); im = rotX*rotZ; return rotY*im; } MilkyTracker-1.02.00/src/fx/Camera.h000066400000000000000000000020521324432207300170170ustar00rootroot00000000000000/* * fx/Camera.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #ifndef CAMERA__H #define CAMERA__H #include "Math3d.h" class Camera { public: VectorFP position,target; float bank,lens; MatrixFP trackPositionMatrix,trackTargetMatrix; Camera(); Camera(VectorFP& pos, VectorFP& target); MatrixFP getMatrix(); MatrixFP getMatrixInverse(); }; #endif MilkyTracker-1.02.00/src/fx/FXAbstract.h000066400000000000000000000022451324432207300176340ustar00rootroot00000000000000/* * fx/FXAbstract.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * FXAbstract.h * MilkyTracker * * Created by Peter Barth on 25.11.05. * */ #ifndef FXABSTRACT__H #define FXABSTRACT__H #include "BasicTypes.h" class FXAbstract { protected: pp_uint32 width, height; public: FXAbstract(pp_uint32 w, pp_uint32 h) : width(w), height(h) { } virtual ~FXAbstract() {} virtual void update(pp_uint32 syncFrac) { } virtual void render(pp_uint8* buffer) = 0; }; #endif MilkyTracker-1.02.00/src/fx/FXInterface.h000066400000000000000000000020041324432207300177620ustar00rootroot00000000000000/* * fx/FXInterface.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #ifndef FXINTERFACE__H #define FXINTERFACE__H class FXInterface { protected: int width, height; public: virtual ~FXInterface() {} virtual void render(unsigned short* vscreen, unsigned int pitch) = 0; virtual void update(float syncFrac) = 0; }; #endif MilkyTracker-1.02.00/src/fx/Filter.cpp000066400000000000000000000315451324432207300174200ustar00rootroot00000000000000/* * fx/Filter.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "BasicTypes.h" #include "fpmath.h" #include "Filter.h" #define PRGB2Short(r,g,b) ((((r))<<11)+(((g))<<5)+((b))) void Filter::applyRadialToSector(unsigned short *buffer, int width, int height,int pitch, int xCenter,int yCenter,int xBound,int yBound, int radius, int style) { int stx=-1,sty=-1; if (yBound>yCenter) sty=1; if (xBound>xCenter) stx=1; int i = yCenter; switch (style) { case 0: while (i!=yBound) { int j = xCenter; unsigned short *line = buffer+i*pitch; int vs = (((yCenter-i)*radius))+(i<<16); int v0=(vs>>16)*pitch; int b=(vs>>11)&31; int v1=v0+pitch; while (j!=xBound) { int h0,h1,h2,h3; int at;//,c,col; int u0,u1; int us = (((xCenter-j)*radius))+(j<<16); unsigned int mask=0x07e0f81f; u0=(us>>16); at=(us>>11)&31; u1=u0+1; h0=buffer[(u0+v0)]; h2=buffer[(u0+v1)]; h1=buffer[(u1+v0)]; h3=buffer[(u1+v1)]; h1 = ((h1<<16) | h1)&mask; h2 = ((h2<<16) | h2)&mask; h3 = ((h3<<16) | h3)&mask; h0 = ((h0<<16) | h0)&mask; int blend_top =((((h1-h0)*(at))>>5)+h0)&mask; int blend_bot =((((h3-h2)*(at))>>5)+h2)&mask; int total = ((((blend_bot - blend_top)*(b))>>5)+blend_top)&mask; int source = line[j]; source = ((source<<16) | source)&mask; int mix =((((source-total)*(15))>>5)+total)&mask; line[j] = (mix | (mix>>16))&0xffff;//( (total & 0xF7DE) >> 1) + ( (source & 0xF7DE) >> 1); j+=stx; } i+=sty; } break; case 1: while (i!=yBound) { int j = xCenter; unsigned short *line = buffer+i*pitch; int vs = (((yCenter-i)*radius))+(i<<16); int v0=(vs>>16)*pitch; int b=(vs>>11)&31; int v1=v0+pitch; while (j!=xBound) { int h0,h1,h2,h3; int at;//,c,col; int u0,u1; int us = (((xCenter-j)*radius))+(j<<16); unsigned int mask=0x07e0f81f; u0=(us>>16); at=(us>>11)&31; u1=u0+1; h0=buffer[(u0+v0)]; h2=buffer[(u0+v1)]; h1=buffer[(u1+v0)]; h3=buffer[(u1+v1)]; h1 = ((h1<<16) | h1)&mask; h2 = ((h2<<16) | h2)&mask; h3 = ((h3<<16) | h3)&mask; h0 = ((h0<<16) | h0)&mask; int blend_top =((((h1-h0)*(at))>>5)+h0)&mask; int blend_bot =((((h3-h2)*(at))>>5)+h2)&mask; int total = ((((blend_bot - blend_top)*(b))>>5)+blend_top)&mask; int source = line[j]; total = (total | (total>>16))&0xffff; int r = ((source>>11)+((total>>11))); r-=4; if (r<0) r = 0; if (r>0x1f) r = 0x1f; int g = (((source>>5)&0x3f)+(((total>>5)&0x3f))); g-=8; if (g<0) g = 0; if (g>0x3f) g = 0x3f; int bc = ((source&0x1f)+((total&0x1f))); bc-=4; if (bc<0) bc = 0; if (bc>0x1f) bc = 0x1f; line[j] = (r<<11)+(g<<5)+bc; j+=stx; } i+=sty; } break; } } void Filter::applyRadial(unsigned short *buffer, int width, int height,int pitch, int xCenter,int yCenter, int radius, int style) { applyRadialToSector(buffer,width, height, pitch, xCenter-1, yCenter-1, 0, 0, radius, style); applyRadialToSector(buffer,width, height, pitch, xCenter, yCenter-1, width, 0, radius, style); applyRadialToSector(buffer,width, height, pitch, xCenter-1, yCenter, 0, height, radius, style); applyRadialToSector(buffer,width, height, pitch, xCenter, yCenter, width, height, radius, style); } void Filter::applyHorizontal(unsigned short *src, unsigned short *dst, int width, int height, int pitch, int boxw) { int x,y; if (boxw<0) { memcpy(dst,src,pitch*height*2); // deal with degenerate kernel sizes return; } if (boxw>=width) boxw=width-1; int mul=65536/(boxw*2+1); for (y=0;y>11; totg+=(src[x]>>5)&0x3f; totb+=src[x]&0x1f; } for (x=0;xboxw) { totr-=src[(-boxw-1)]>>11; totg-=(src[(-boxw-1)]>>5)&0x3f; totb-=src[(-boxw-1)]&0x1f; } if (x+boxw>11; totg+=(src[boxw]>>5)&0x3f; totb+=src[boxw]&0x1f; } int finalr = (totr*mul)>>16; int finalg = (totg*mul)>>16; int finalb = (totb*mul)>>16; *dst = (finalr<<11)+(finalg<<5)+finalb; dst++; src++; } } } void Filter::applyVertical(unsigned short *src, unsigned short *dst, int width, int height, int pitch, int boxw) { int x,y; if (boxw<0) { memcpy(dst,src,pitch*height*2); // deal with degenerate kernel sizes return; } if (boxw>=width) boxw=width-1; int mul=65536/(boxw*2+1); for (x=0;x>11; totg+=(*srcPtr>>5)&0x3f; totb+=*srcPtr&0x1f; srcPtr+=width; } srcPtr = src+x; unsigned short* dstPtr = dst+x; int offsm = (-boxw-1)*pitch; int offsp = boxw*pitch; for (y=0;yboxw) { totr-=srcPtr[offsm]>>11; totg-=(srcPtr[offsm]>>5)&0x3f; totb-=srcPtr[offsm]&0x1f; } if (y+boxw>11; totg+=(srcPtr[offsp]>>5)&0x3f; totb+=srcPtr[offsp]&0x1f; } int finalr = (totr*mul)>>16; int finalg = (totg*mul)>>16; int finalb = (totb*mul)>>16; *dstPtr = (finalr<<11)+(finalg<<5)+finalb; dstPtr+=width; srcPtr+=width; } } } void Filter::applyBoxed(unsigned short *srcImage, unsigned short *dstImage, int width, int height, int pitch, int boxw) { if (boxw<0) { return; } //int pitch = width; int x,y; int mul = 65536/(boxw*2+1); { unsigned short* src = srcImage; if (boxw>=width) boxw=width-1; for (y=0;y>11; totg+=(src[x]>>5)&0x3f; totb+=src[x]&0x1f; } unsigned short* dst = dstImage+y; for (x=0;xboxw) { totr-=src[(-boxw-1)]>>11; totg-=(src[(-boxw-1)]>>5)&0x3f; totb-=src[(-boxw-1)]&0x1f; } if (x+boxw>11; totg+=(src[boxw]>>5)&0x3f; totb+=src[boxw]&0x1f; } int finalr = (totr*mul)>>16; int finalg = (totg*mul)>>16; int finalb = (totb*mul)>>16; *dst = (finalr<<11)+(finalg<<5)+finalb; dst+=height; src++; } } } { if (boxw>=height) boxw=height-1; unsigned short* src = dstImage; for (x=0;x>11; totg+=(src[y]>>5)&0x3f; totb+=src[y]&0x1f; } unsigned short* dst = srcImage+x; for (y=0;yboxw) { totr-=src[(-boxw-1)]>>11; totg-=(src[(-boxw-1)]>>5)&0x3f; totb-=src[(-boxw-1)]&0x1f; } if (y+boxw>11; totg+=(src[boxw]>>5)&0x3f; totb+=src[boxw]&0x1f; } int finalr = (totr*mul)>>16; int finalg = (totg*mul)>>16; int finalb = (totb*mul)>>16; *dst = (finalr<<11)+(finalg<<5)+finalb; //*dst = *src; src++; dst+=width; } } } } void Filter::stylize(unsigned short* srcImage, unsigned short* tmpImage, int width, int height, int srcPitch, int tmpPitch, int minr, int ming, int minb, int maxr, int maxg, int maxb) { int x,y; minb>>=3; ming>>=2; ming<<=5; minr>>=3; minr<<=11; maxb>>=3; maxg>>=2; maxg<<=5; maxr>>=3; maxr<<=11; unsigned short* dst = srcImage; unsigned short* src = tmpImage; unsigned int* dstDW = (unsigned int*)dst; unsigned int* srcDW = (unsigned int*)src; for (y = 0; y < height; y++) { for (x = 0; x < width>>1; x++) { *srcDW = *dstDW; srcDW++; dstDW++; } srcDW+=(tmpPitch-width)>>1; dstDW+=(srcPitch-width)>>1; } dst = srcImage; src = tmpImage; //memcpy(tmpImage, srcImage, pitch*height*2); int y2; for (y = 0; y < height; y++) { for (x = 0; x < width; x++) { //if (*src > RGB2SHORT(50,50,150) && // *src < RGB2SHORT(150,120,200)) if ((*src&0x1f) > (minb) && (*src&0x1f) < (maxb) && (*src&(0x3f<<5)) > (ming) && (*src&(0x3f<<5)) < (maxg) && (*src&(0x1f<<11)) > (minr) && (*src&(0x1f<<11)) < (maxr)) { int b = (*src&0x1f)>>2; int g = ((*src>>5)&0x3f)>>2; int r = ((*src>>11)&0x1f)>>2; int from = y-64; int to = y+64; int adder = 256/64; int shade = 0; if (from < 0) { shade+=-from*adder; from = 0; } if (to>height) to = height; unsigned short* ptr = srcImage+(from*srcPitch+x); for (y2 = from; y2 < to; y2++) { if (y2 == y) adder = -adder; int r2 = ((*ptr>>11)&0x1f) + ((r*shade)>>8); int g2 = ((*ptr>>5)&0x3f) + ((g*shade)>>8); int b2 = (*ptr&0x1f) + ((b*shade)>>8); if (r2 > 0x1f) r2 = 0x1f; if (g2 > 0x3f) g2 = 0x3f; if (b2 > 0x1f) b2 = 0x1f; *ptr = PRGB2SHORT(r2,g2,b2); ptr+=width; shade+=adder; } from = x-64; to = x+64; shade = 0; adder = 256/64; if (from < 0) { shade+=-from*adder; from = 0; } if (to>width) to = width; ptr = srcImage+(y*srcPitch+from); for (y2 = from; y2 < to; y2++) { if (y2 == x) adder = -adder; int r2 = ((*ptr>>11)&0x1f) + ((r*shade)>>8); int g2 = ((*ptr>>5)&0x3f) + ((g*shade)>>8); int b2 = (*ptr&0x1f) + ((b*shade)>>8); if (r2 > 0x1f) r2 = 0x1f; if (g2 > 0x3f) g2 = 0x3f; if (b2 > 0x1f) b2 = 0x1f; *ptr = PRGB2SHORT(r2,g2,b2); ptr++; shade+=adder; } } src++; } src+=tmpPitch-width; } } void Filter::glow(unsigned short* srcImage, int width, int height, int pitch, unsigned short* glowBuffer1, unsigned short* glowBuffer2, unsigned int cellSizeShift, unsigned int scale, unsigned int boxw) { if (scale < 512) scale = 512; int gWidth = width>>cellSizeShift; int gHeight = height>>cellSizeShift; int x,y,x2,y2; unsigned short* ptr = glowBuffer1; for (y = 0; y < gHeight; y++) for (x = 0; x < gWidth; x++) *ptr++ = srcImage[(y<>11)<<16,scale), g1 = fpmul((rgb1&0x7E0)<<11,scale), b1 = fpmul((rgb1&31)<<16,scale); int r2 = fpmul((rgb2>>11)<<16,scale), g2 = fpmul((rgb2&0x7E0)<<11,scale), b2 = fpmul((rgb2&31)<<16,scale); int r3 = fpmul((rgb3>>11)<<16,scale), g3 = fpmul((rgb3&0x7E0)<<11,scale), b3 = fpmul((rgb3&31)<<16,scale); int r4 = fpmul((rgb4>>11)<<16,scale), g4 = fpmul((rgb4&0x7E0)<<11,scale), b4 = fpmul((rgb4&31)<<16,scale); int dr1 = (r4-r1)>>cellSizeShift; int dr2 = (r3-r2)>>cellSizeShift; int dg1 = (g4-g1)>>cellSizeShift; int dg2 = (g3-g2)>>cellSizeShift; int db1 = (b4-b1)>>cellSizeShift; int db2 = (b3-b2)>>cellSizeShift; ptr = srcImage+(y<>cellSizeShift; int sr = r1; int fg = (g2-g1)>>cellSizeShift; int sg = g1; int fb = (b2-b1)>>cellSizeShift; int sb = b1; for (x2=0;x2<(1<>16) + ((*ptr>>11)&31); if (r>31) r = 31; int g = (sg>>16) + ((*ptr>>5)&63); if (g>63) g = 63; int b = (sb>>16) + ((*ptr>>0)&31); if (b>31) b = 31; *ptr++ = PRGB2Short(r,g,b); sr+=fr; sg+=fg; sb+=fb; } ptr+=(pitch-(1<. * */ #ifndef FILTER_H #define FILTER_H #define PRGB2SHORT(r,g,b) ((((r))<<11)+(((g))<<5)+((b))) #define RGB2SHORT(r,g,b) ((((r>>3))<<11)+(((g>>2))<<5)+((b>>3))) class Filter { private: static void applyRadialToSector(unsigned short *buffer,int width, int height,int pitch, int xCenter,int yCenter,int xBound,int yBound, int radius, int style = 0); public: static void applyRadial(unsigned short *buffer,int width, int height,int pitch, int xCenter,int yCenter, int radius, int style = 0); static void applyHorizontal(unsigned short *src, unsigned short *dst, int width, int height, int pitch, int boxw); static void applyVertical(unsigned short *src, unsigned short *dst, int width, int height, int pitch, int boxw); static void applyBoxed(unsigned short *srcImage, unsigned short *dstImage, int width, int height, int pitch, int boxw); static void stylize(unsigned short* srcImage, unsigned short* tmpImage, int width, int height, int srcPitch, int tmpPitch, int minr, int ming, int minb, int maxr, int maxg, int maxb); static void glow(unsigned short* srcImage, int width, int height, int pitch, unsigned short* glowBuffer1, unsigned short* glowBuffer2, unsigned int cellSizeShift, unsigned int scale = 65536*2, unsigned int boxw = 4); }; #endif MilkyTracker-1.02.00/src/fx/Fire.cpp000066400000000000000000000077411324432207300170610ustar00rootroot00000000000000/* * fx/Fire.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * Fire.cpp * MyFirstCarbonProject * * Created by Peter Barth on Wed Feb 20 2002. * */ #include "Fire.h" #include "Math3d.h" Fire::Fire(pp_int32 w, pp_int32 h) : FXAbstract(w, h) { w>>=1; h>>=1; workbuffer = new pp_uint16[w*(h+2)]; memset(workbuffer, 0, w*(h+2)*sizeof(pp_uint16)); buildColorLUT(); } Fire::~Fire() { delete workbuffer; } /////////////////////////////////////////////// // Schicke Farbtabelle bauen /////////////////////////////////////////////// void Fire::buildColorLUT() { struct TColor { pp_uint8 r,g,b; }; struct TColorKey { TColor color; pp_uint32 t; }; const pp_uint32 NUMKEYS = 5; TColorKey colorKeys[NUMKEYS]; colorKeys[4].color.r = 255; colorKeys[4].color.g = 255; colorKeys[4].color.b = 255; colorKeys[4].t = 192; colorKeys[3].color.r = 255; colorKeys[3].color.g = 255; colorKeys[3].color.b = 0; colorKeys[3].t = 160; colorKeys[2].color.r = 255; colorKeys[2].color.g = 0; colorKeys[2].color.b = 0; colorKeys[2].t = 96; colorKeys[1].color.r = 0; colorKeys[1].color.g = 0; colorKeys[1].color.b = 32; colorKeys[1].t = 32; colorKeys[0].color.r = 0; colorKeys[0].color.g = 0; colorKeys[0].color.b = 0; colorKeys[0].t = 0; for (pp_uint32 i = 0; i < NUMKEYS-1; i++) { for (pp_uint32 j = colorKeys[i].t; j < colorKeys[i+1].t; j++) { float t = (float)(j - colorKeys[i].t) / (float)(colorKeys[i+1].t - colorKeys[i].t); pp_uint32 r = (pp_uint32)((1.0f - t) * colorKeys[i].color.r + t * colorKeys[i+1].color.r); pp_uint32 g = (pp_uint32)((1.0f - t) * colorKeys[i].color.g + t * colorKeys[i+1].color.g); pp_uint32 b = (pp_uint32)((1.0f - t) * colorKeys[i].color.b + t * colorKeys[i+1].color.b); colorLUT[j][0] = (pp_uint8)r; colorLUT[j][1] = (pp_uint8)g; colorLUT[j][2] = (pp_uint8)b; } } for (pp_uint32 j = colorKeys[NUMKEYS-1].t; j < 256; j++) { colorLUT[j][0] = (pp_uint8)colorKeys[2].color.r; colorLUT[j][1] = (pp_uint8)colorKeys[2].color.g; colorLUT[j][2] = (pp_uint8)colorKeys[2].color.b; } } /////////////////////////////////////////////// // BURN, BURN /////////////////////////////////////////////// void Fire::render(pp_uint8* buffer) { pp_int32 x,y,i; pp_int32 h = height>>1; pp_int32 w = width>>1; for (i = 0; i < w/8; i++) { x = rand()%w; workbuffer[(h+1)*w+x] = (rand()&255) << 8; } unsigned short* vptr = workbuffer; for (y = 0; y < h+1; y++) { vptr++; for (x = 1; x < w; x++) { pp_uint32 c = (vptr[w] + vptr[-1] + vptr[+1] + vptr[0]) >> 2; if (c>=64) c-=64; else c = 0; *vptr++ = (pp_uint16)c; } } vptr = workbuffer; pp_uint8* buff2 = buffer + width*3; pp_uint8* buff = buffer; for (y = 0; y < h; y++) { for (x = 0; x < w; x++) { pp_int16 c = *vptr>>8; *buff++ = colorLUT[c][0]; // rot *buff++ = colorLUT[c][1]; // gruen *buff++ = colorLUT[c][2]; // blau *buff++ = colorLUT[c][0]; // rot *buff++ = colorLUT[c][1]; // gruen *buff++ = colorLUT[c][2]; // blau *buff2++ = colorLUT[c][0]; // rot *buff2++ = colorLUT[c][1]; // gruen *buff2++ = colorLUT[c][2]; // blau *buff2++ = colorLUT[c][0]; // rot *buff2++ = colorLUT[c][1]; // gruen *buff2++ = colorLUT[c][2]; // blau*/ vptr++; } buff+=w*2*3; buff2+=w*2*3; } } MilkyTracker-1.02.00/src/fx/Fire.h000066400000000000000000000022171324432207300165170ustar00rootroot00000000000000/* * fx/Fire.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * Fire.h * MyFirstCarbonProject * * Created by Peter Barth on Wed Feb 20 2002. * */ #ifndef FIRE__H #define FIRE__H #include "BasicTypes.h" #include "FXAbstract.h" class Fire : public FXAbstract { private: pp_uint16* workbuffer; pp_uint8 colorLUT[256][3]; void buildColorLUT(); public: Fire(pp_int32 w, pp_int32 h); virtual ~Fire(); virtual void render(pp_uint8* buffer); }; #endif MilkyTracker-1.02.00/src/fx/Math3d.cpp000066400000000000000000000343431324432207300173120ustar00rootroot00000000000000/* * fx/Math3d.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "Math3d.h" ///////////////////// // VectorFP struct // ///////////////////// VectorFP operator*(pp_int32 s,VectorFP v2) { VectorFP v = {fpmul(v2.x,s),fpmul(v2.y,s),fpmul(v2.z,s)}; return v; } VectorFP operator+ (VectorFP v1,VectorFP v2) { VectorFP v = {v1.x+v2.x,v1.y+v2.y,v1.z+v2.z}; return v; } VectorFP operator- (VectorFP v1,VectorFP v2) { VectorFP v = {v1.x-v2.x,v1.y-v2.y,v1.z-v2.z}; return v; } VectorFP operator- (VectorFP v) { VectorFP vr = {-v.x,-v.y,-v.z}; return vr; } pp_int32 operator* (VectorFP v1,VectorFP v2) { return fpmul(v1.x,v2.x)+fpmul(v1.y,v2.y)+fpmul(v1.z,v2.z); } // vector product VectorFP operator ^(VectorFP v1,VectorFP v2) { VectorFP v; v.x=fpmul(v1.y,v2.z)-fpmul(v1.z,v2.y); v.y=fpmul(v1.z,v2.x)-fpmul(v1.x,v2.z); v.z=fpmul(v1.x,v2.y)-fpmul(v1.y,v2.x); return v; } /////////////////////// // VectorFloat class // /////////////////////// VectorFloat::VectorFloat() { } VectorFloat::VectorFloat(float nx,float ny,float nz) { x = nx; y = ny; z = nz; } VectorFloat::VectorFloat(VectorFP vector) { x = vector.x*(1.0f/65536.0f); y = vector.y*(1.0f/65536.0f); z = vector.z*(1.0f/65536.0f); } void VectorFloat::set(float nx,float ny,float nz) { x = nx; y = ny; z = nz; } void VectorFloat::set(VectorFP vector) { x = vector.x*(1.0f/65536.0f); y = vector.y*(1.0f/65536.0f); z = vector.z*(1.0f/65536.0f); } float VectorFloat::length() { return (float)sqrt(x*x+y*y+z*z); } void VectorFloat::normalize() { float len = (float)sqrt(x*x+y*y+z*z); if (len>0.0f) { x/=len; y/=len; z/=len; } } void VectorFloat::readFromFile(FILE *f) { fread(&x,4,1,f); fread(&y,4,1,f); fread(&z,4,1,f); } VectorFP VectorFloat::convertToFixedPoint() { VectorFP v; v.x = (pp_int32 )(x*65536.0f); v.y = (pp_int32 )(y*65536.0f); v.z = (pp_int32 )(z*65536.0f); return v; } VectorFloat operator*(float s,VectorFloat v2) { VectorFloat v(v2.x*s,v2.y*s,v2.z*s); return v; } VectorFloat operator+ (VectorFloat v1,VectorFloat v2) { VectorFloat v(v1.x+v2.x,v1.y+v2.y,v1.z+v2.z); return v; } VectorFloat operator- (VectorFloat v1,VectorFloat v2) { VectorFloat v(v1.x-v2.x,v1.y-v2.y,v1.z-v2.z); return v; } VectorFloat operator- (VectorFloat v) { VectorFloat vr(-v.x,-v.y,-v.z); return vr; } float operator* (VectorFloat v1,VectorFloat v2) { return v1.x*v2.x+v1.y*v2.y+v1.z*v2.z; } // vector product VectorFloat operator ^(VectorFloat v1,VectorFloat v2) { VectorFloat v; v.x=(v1.y*v2.z)-(v1.z*v2.y); v.y=(v1.z*v2.x)-(v1.x*v2.z); v.z=(v1.x*v2.y)-(v1.y*v2.x); return v; } /////////////////////// // MatrixFloat class // /////////////////////// void MatrixFloat::setID() { form[0][0] = 1.0f; form[0][1] = 0.0f; form[0][2] = 0.0f; form[0][3] = 0.0f; form[1][0] = 0.0f; form[1][1] = 1.0f; form[1][2] = 0.0f; form[1][3] = 0.0f; form[2][0] = 0.0f; form[2][1] = 0.0f; form[2][2] = 1.0f; form[2][3] = 0.0f; form[3][0] = 0.0f; form[3][1] = 0.0f; form[3][2] = 0.0f; form[3][3] = 1.0f; } void MatrixFloat::setRotX(float phi) { form[0][0] = 1.0f; form[0][1] = 0.0f; form[0][2] = 0.0f; form[0][3] = 0.0f; form[1][0] = 0.0f; form[1][1] = (float)cos(phi); form[1][2] = -(float)sin(phi); form[1][3] = 0.0f; form[2][0] = 0.0f; form[2][1] = (float)sin(phi); form[2][2] = (float)cos(phi); form[2][3] = 0.0f; form[3][0] = 0.0f; form[3][1] = 0.0f; form[3][2] = 0.0f; form[3][3] = 1.0f; } void MatrixFloat::setRotY(float phi) { form[0][0] = (float)cos(phi); form[0][1] = 0.0f; form[0][2] = (float)sin(phi); form[0][3] = 0.0f; form[1][0] = 0.0f; form[1][1] = 1.0f; form[1][2] = 0.0f; form[1][3] = 0.0f; form[2][0] = -(float)sin(phi); form[2][1] = 0.0f; form[2][2] = (float)cos(phi); form[2][3] = 0.0f; form[3][0] = 0.0f; form[3][1] = 0.0f; form[3][2] = 0.0f; form[3][3] = 1.0f; } void MatrixFloat::setRotZ(float phi) { form[0][0] = (float)cos(phi); form[0][1] = -(float)sin(phi); form[0][2] = 0.0f; form[0][3] = 0.0f; form[1][0] = (float)sin(phi); form[1][1] = (float)cos(phi); form[1][2] = 0.0f; form[1][3] = 0.0f; form[2][0] = 0.0f; form[2][1] = 0.0f; form[2][2] = 1.0f; form[2][3] = 0.0f; form[3][0] = 0.0f; form[3][1] = 0.0f; form[3][2] = 0.0f; form[3][3] = 1.0f; } void MatrixFloat::setScale(VectorFloat v) { form[0][0] = v.x; form[0][1] = 0.0f; form[0][2] = 0.0f; form[0][3] = 0.0f; form[1][0] = 0.0f; form[1][1] = v.y; form[1][2] = 0.0f; form[1][3] = 0.0f; form[2][0] = 0.0f; form[2][1] = 0.0f; form[2][2] = v.z; form[2][3] = 0.0f; form[3][0] = 0.0f; form[3][1] = 0.0f; form[3][2] = 0.0f; form[3][3] = 1.0f; } void MatrixFloat::setTranslate(VectorFloat v) { form[0][0] = 1.0f; form[0][1] = 0.0f; form[0][2] = 0.0f; form[0][3] = v.x; form[1][0] = 0.0f; form[1][1] = 1.0f; form[1][2] = 0.0f; form[1][3] = v.y; form[2][0] = 0.0f; form[2][1] = 0.0f; form[2][2] = 1.0f; form[2][3] = v.z; form[3][0] = 0.0f; form[3][1] = 0.0f; form[3][2] = 0.0f; form[3][3] = 1.0f; } void MatrixFloat::setSubtract(VectorFloat v) { form[0][0] = 1.0f; form[0][1] = 0.0f; form[0][2] = 0.0f; form[0][3] = -v.x; form[1][0] = 0.0f; form[1][1] = 1.0f; form[1][2] = 0.0f; form[1][3] = -v.y; form[2][0] = 0.0f; form[2][1] = 0.0f; form[2][2] = 1.0f; form[2][3] = -v.z; form[3][0] = 0.0f; form[3][1] = 0.0f; form[3][2] = 0.0f; form[3][3] = 1.0f; } MatrixFloat operator* (MatrixFloat m1,MatrixFloat m2) { pp_int32 i,j,k; MatrixFloat mr; for (i = 0; i < 4; i++) for (j = 0; j < 4; j++) { mr.form[i][j] = 0.0f; for (k = 0; k < 4; k++) mr.form[i][j] += m1.form[i][k]*m2.form[k][j]; } return mr; } VectorFloat operator* (MatrixFloat m,VectorFloat v) { VectorFloat vr; vr.x = (m.form[0][0]*v.x)+(m.form[0][1]*v.y)+(m.form[0][2]*v.z)+(m.form[0][3]*1.0f); vr.y = (m.form[1][0]*v.x)+(m.form[1][1]*v.y)+(m.form[1][2]*v.z)+(m.form[1][3]*1.0f); vr.z = (m.form[2][0]*v.x)+(m.form[2][1]*v.y)+(m.form[2][2]*v.z)+(m.form[2][3]*1.0f); return vr; } //////////////////// // MatrixFP class // //////////////////// // default constructor MatrixFP::MatrixFP() { } // convert floating point matrix into fixed point matrix MatrixFP::MatrixFP(MatrixFloat matrix) { for (pp_int32 i = 0; i < 4; i++) for (pp_int32 j = 0; j < 4; j++) form[i][j] = (pp_int32 )(matrix.form[i][j]*65536.0f); } void MatrixFP::setID() { form[0][0] = 65536; form[0][1] = 0; form[0][2] = 0; form[0][3] = 0; form[1][0] = 0; form[1][1] = 65536; form[1][2] = 0; form[1][3] = 0; form[2][0] = 0; form[2][1] = 0; form[2][2] = 65536; form[2][3] = 0; form[3][0] = 0; form[3][1] = 0; form[3][2] = 0; form[3][3] = 65536; } void MatrixFP::setRotX(float phi) { form[0][0] = 65536; form[0][1] = 0; form[0][2] = 0; form[0][3] = 0; form[1][0] = 0; form[1][1] = (pp_int32 )(cos(phi)*65536.0f); form[1][2] = (pp_int32 )(-sin(phi)*65536.0f); form[1][3] = 0; form[2][0] = 0; form[2][1] = (pp_int32 )(sin(phi)*65536.0f); form[2][2] = (pp_int32 )(cos(phi)*65536); form[2][3] = 0; form[3][0] = 0; form[3][1] = 0; form[3][2] = 0; form[3][3] = 65536; } void MatrixFP::setRotY(float phi) { form[0][0] = (pp_int32 )(cos(phi)*65536.0f); form[0][1] = 0; form[0][2] = (pp_int32 )(sin(phi)*65536.0f); form[0][3] = 0; form[1][0] = 0; form[1][1] = 65536; form[1][2] = 0; form[1][3] = 0; form[2][0] = (pp_int32 )(-sin(phi)*65536.0f); form[2][1] = 0; form[2][2] = (pp_int32 )(cos(phi)*65536.0f); form[2][3] = 0; form[3][0] = 0; form[3][1] = 0; form[3][2] = 0; form[3][3] = 65536; } void MatrixFP::setRotZ(float phi) { form[0][0] = (pp_int32 )(cos(phi)*65536.0f); form[0][1] = (pp_int32 )(-sin(phi)*65536.0f); form[0][2] = 0; form[0][3] = 0; form[1][0] = (pp_int32 )(sin(phi)*65536.0f); form[1][1] = (pp_int32 )(cos(phi)*65536.0f); form[1][2] = 0; form[1][3] = 0; form[2][0] = 0; form[2][1] = 0; form[2][2] = 65536; form[2][3] = 0; form[3][0] = 0; form[3][1] = 0; form[3][2] = 0; form[3][3] = 65536; } void MatrixFP::setRotXYZ(float phiX,float phiY,float phiZ) { MatrixFP m1,m2,m3,mr; m1.setRotX(phiX); m2.setRotY(phiY); m3.setRotZ(phiZ); mr = m2*m1; mr = mr*m3; memcpy(&form,&mr.form,sizeof(form)); } void MatrixFP::setScale(VectorFloat v) { form[0][0] = (pp_int32 )(v.x*65536.0f); form[0][1] = 0; form[0][2] = 0; form[0][3] = 0; form[1][0] = 0; form[1][1] = (pp_int32 )(v.y*65536.0f); form[1][2] = 0; form[1][3] = 0; form[2][0] = 0; form[2][1] = 0; form[2][2] = (pp_int32 )(v.z*65536.0f); form[2][3] = 0; form[3][0] = 0; form[3][1] = 0; form[3][2] = 0; form[3][3] = 65536; } void MatrixFP::setScale(VectorFP v) { form[0][0] = v.x; form[0][1] = 0; form[0][2] = 0; form[0][3] = 0; form[1][0] = 0; form[1][1] = v.y; form[1][2] = 0; form[1][3] = 0; form[2][0] = 0; form[2][1] = 0; form[2][2] = v.z; form[2][3] = 0; form[3][0] = 0; form[3][1] = 0; form[3][2] = 0; form[3][3] = 65536; } void MatrixFP::setTranslate(VectorFP v) { form[0][0] = 65536; form[0][1] = 0; form[0][2] = 0; form[0][3] = v.x; form[1][0] = 0; form[1][1] = 65536; form[1][2] = 0; form[1][3] = v.y; form[2][0] = 0; form[2][1] = 0; form[2][2] = 65536; form[2][3] = v.z; form[3][0] = 0; form[3][1] = 0; form[3][2] = 0; form[3][3] = 65536; } void MatrixFP::setSubtract(VectorFP v) { form[0][0] = 65536; form[0][1] = 0; form[0][2] = 0; form[0][3] = -v.x; form[1][0] = 0; form[1][1] = 65536; form[1][2] = 0; form[1][3] = -v.y; form[2][0] = 0; form[2][1] = 0; form[2][2] = 65536; form[2][3] = -v.z; form[3][0] = 0; form[3][1] = 0; form[3][2] = 0; form[3][3] = 65536; } void MatrixFP::stripTranslation() { form[0][3] = 0; form[1][3] = 0; form[2][3] = 0; form[3][3] = 65536; form[3][0] = 0; form[3][1] = 0; form[3][2] = 0; } MatrixFP operator* (MatrixFP &m1,MatrixFP &m2) { pp_int32 i,j,k; MatrixFP mr; for (i = 0; i < 4; i++) for (j = 0; j < 4; j++) { mr.form[i][j] = 0; for (k = 0; k < 4; k++) mr.form[i][j] += fpmul(m1.form[i][k],m2.form[k][j]); } return mr; } VectorFP operator* (MatrixFP &m,VectorFP &v) { VectorFP vr; vr.x = fpmul(m.form[0][0],v.x)+fpmul(m.form[0][1],v.y)+fpmul(m.form[0][2],v.z)+m.form[0][3]; vr.y = fpmul(m.form[1][0],v.x)+fpmul(m.form[1][1],v.y)+fpmul(m.form[1][2],v.z)+m.form[1][3]; vr.z = fpmul(m.form[2][0],v.x)+fpmul(m.form[2][1],v.y)+fpmul(m.form[2][2],v.z)+m.form[2][3]; return vr; } //////////////////////////////// // floating point quaternions // //////////////////////////////// void QuaternionFloat::normalize() { float len1 = (w*w)+(v.x*v.x)+(v.y*v.y)+(v.z*v.z); len1 = 1.0f/(float)sqrt(len1); w*=len1; v.x*=len1; v.y*=len1; v.z*=len1; } QuaternionFP QuaternionFloat::convertToFixedPoint() { QuaternionFP q; q.v = v.convertToFixedPoint(); q.w = (pp_int32 )(w*65536.0f); return q; } QuaternionFloat operator *(QuaternionFloat q1,float s) { QuaternionFloat q; q.w=s*q1.w; q.v.x=s*q1.v.x; q.v.y=s*q1.v.y; q.v.z=s*q1.v.z; return q; }; QuaternionFloat operator +(QuaternionFloat q1,QuaternionFloat q2) { QuaternionFloat q; q.w=q1.w+q2.w; q.v.x=q1.v.x+q2.v.x; q.v.y=q1.v.y+q2.v.y; q.v.z=q1.v.z+q2.v.z; return q; }; QuaternionFloat operator -(QuaternionFloat q1,QuaternionFloat q2) { QuaternionFloat q; q.w=q1.w-q2.w; q.v.x=q1.v.x-q2.v.x; q.v.y=q1.v.y-q2.v.y; q.v.z=q1.v.z-q2.v.z; return q; } QuaternionFloat operator *(QuaternionFloat q1,QuaternionFloat q2) { QuaternionFloat q; q.w=(q1.w*q2.w)-(q1.v*q2.v); q.v=(q1.w*q2.v)+(q2.w*q1.v)+(q1.v^q2.v); return q; } MatrixFP quaternionToMatrixFP(QuaternionFloat q) { MatrixFP m; m.form[0][0]=(pp_int32 )((1.0f-(2.0f*q.v.y*q.v.y)-(2.0f*q.v.z*q.v.z))*65536.0f); m.form[0][1]=(pp_int32 )((2.0f*q.v.x*q.v.y+2.0f*q.w*q.v.z)*65536.0f); m.form[0][2]=(pp_int32 )((2.0f*q.v.x*q.v.z-2.0f*q.w*q.v.y)*65536.0f); m.form[0][3]=0; m.form[1][0]=(pp_int32 )((2.0f*q.v.x*q.v.y-2.0f*q.w*q.v.z)*65536.0f); m.form[1][1]=(pp_int32 )((1.0f-(2.0f*q.v.x*q.v.x)-(2.0f*q.v.z*q.v.z))*65536.0f); m.form[1][2]=(pp_int32 )((2.0f*q.v.y*q.v.z+2.0f*q.w*q.v.x)*65536.0f); m.form[1][3]=0; m.form[2][0]=(pp_int32 )((2.0f*q.v.x*q.v.z+2.0f*q.w*q.v.y)*65536.0f); m.form[2][1]=(pp_int32 )((2.0f*q.v.y*q.v.z-2.0f*q.w*q.v.x)*65536.0f); m.form[2][2]=(pp_int32 )((1.0f-(2.0f*q.v.x*q.v.x)-(2.0f*q.v.y*q.v.y))*65536.0f); m.form[2][3]=0; m.form[3][0] = m.form[3][1] = m.form[3][2] = 0; m.form[3][3] = 65536; return m; } ///////////////////////////// // Fixed Point Quaternions // ///////////////////////////// QuaternionFP operator *(QuaternionFP &q1,pp_int32 s) { QuaternionFP q; q.w=fpmul(s,q1.w); q.v.x=fpmul(s,q1.v.x); q.v.y=fpmul(s,q1.v.y); q.v.z=fpmul(s,q1.v.z); return q; }; QuaternionFP operator +(QuaternionFP &q1,QuaternionFP &q2) { QuaternionFP q; q.w=q1.w+q2.w; q.v.x=q1.v.x+q2.v.x; q.v.y=q1.v.y+q2.v.y; q.v.z=q1.v.z+q2.v.z; return q; }; QuaternionFP operator -(QuaternionFP &q1,QuaternionFP &q2) { QuaternionFP q; q.w=q1.w-q2.w; q.v.x=q1.v.x-q2.v.x; q.v.y=q1.v.y-q2.v.y; q.v.z=q1.v.z-q2.v.z; return q; } QuaternionFP operator *(QuaternionFP &q1,QuaternionFP &q2) { QuaternionFP q; q.w=fpmul(q1.w,q2.w)-q1.v*q2.v; q.v=(q1.w*q2.v)+(q2.w*q1.v)+(q1.v^q2.v); return q; } MatrixFP quaternionToMatrixFP(QuaternionFP &q) { MatrixFP m; m.form[0][0]=(pp_int32 )((65536-(2*fpmul(q.v.y,q.v.y))-(2*fpmul(q.v.z,q.v.z)))); m.form[0][1]=(pp_int32 )((2*fpmul(q.v.x,q.v.y)+2*fpmul(q.w,q.v.z))); m.form[0][2]=(pp_int32 )((2*fpmul(q.v.x,q.v.z)-2*fpmul(q.w,q.v.y))); m.form[0][3]=0; m.form[1][0]=(pp_int32 )((2*fpmul(q.v.x,q.v.y)-2*fpmul(q.w,q.v.z))); m.form[1][1]=(pp_int32 )((65536-(2*fpmul(q.v.x,q.v.x))-(2*fpmul(q.v.z,q.v.z)))); m.form[1][2]=(pp_int32 )((2*fpmul(q.v.y,q.v.z)+2*fpmul(q.w,q.v.x))); m.form[1][3]=0; m.form[2][0]=(pp_int32 )((2*fpmul(q.v.x,q.v.z)+2*fpmul(q.w,q.v.y))); m.form[2][1]=(pp_int32 )((2*fpmul(q.v.y,q.v.z)-2*fpmul(q.w,q.v.x))); m.form[2][2]=(pp_int32 )((65536-(2*fpmul(q.v.x,q.v.x))-(2*fpmul(q.v.y,q.v.y)))); m.form[2][3]=0; m.form[3][0] = m.form[3][1] = m.form[3][2] = 0; m.form[3][3] = 65536; return m; } MilkyTracker-1.02.00/src/fx/Math3d.h000066400000000000000000000100511324432207300167450ustar00rootroot00000000000000/* * fx/Math3d.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #ifndef MATH3D_H #define MATH3D_H // because of "FILE" #include #include #include "fpmath.h" #ifndef M_PI #define M_PI 3.1415 #endif struct VectorFP { pp_int32 x,y,z; }; #define setVectorFP(v,x,y,z) \ v.x = x; \ v.y = y; \ v.z = z; VectorFP operator*(pp_int32 s,VectorFP v2); VectorFP operator+ (VectorFP v1,VectorFP v2); VectorFP operator- (VectorFP v1,VectorFP v2); VectorFP operator- (VectorFP v); pp_int32 operator* (VectorFP v1,VectorFP v2); // floating point based 3-dimensional vector class class VectorFloat { public: float x,y,z; VectorFloat(); VectorFloat(float x,float y,float z); VectorFloat(VectorFP vector); void set(float nx,float ny,float nz); void set(VectorFP vector); float length(); void normalize(); VectorFP convertToFixedPoint(); void readFromFile(FILE *f); }; // multiply vector with scalar // result is a new vector VectorFloat operator* (float s,VectorFloat v2); // add two vectors // result is a new vector VectorFloat operator+ (VectorFloat v1,VectorFloat v2); // subtract two vectors // result is a new vector VectorFloat operator- (VectorFloat v1,VectorFloat v2); // dot product of two vectors // result is a scalar float operator* (VectorFloat v1,VectorFloat v2); // vector product of two vectors // result is a vector VectorFloat operator^ (VectorFloat v1,VectorFloat v2); // floating point based 4x4 matrix class class MatrixFloat { public: float form[4][4]; void setID(); void setRotX(float phi); void setRotY(float phi); void setRotZ(float phi); void setScale(VectorFloat v); void setTranslate(VectorFloat v); void setSubtract(VectorFloat v); }; // "multiply" two matrices // result is a new 4x4 matrix MatrixFloat operator* (MatrixFloat m1,MatrixFloat m2); // transform vector by matrix // result is a new vector VectorFloat operator* (MatrixFloat m,VectorFloat v); // fixed point based 4x4 matrix class class MatrixFP { public: pp_int32 form[4][4]; MatrixFP(); MatrixFP(MatrixFloat matrix); void setID(); void setRotX(float phi); void setRotY(float phi); void setRotZ(float phi); void setRotXYZ(float phiX,float phiY,float phiZ); void setScale(VectorFloat v); void setScale(VectorFP v); void setTranslate(VectorFP v); void setSubtract(VectorFP v); void stripTranslation(); }; // "multiply" two matrices // result is a new 4x4 matrix MatrixFP operator* (MatrixFP &m1,MatrixFP &m2); // transform fixed point vector by matrix // result is a new vector VectorFP operator* (MatrixFP &m,VectorFP &v); struct QuaternionFP { pp_int32 w; VectorFP v; }; class QuaternionFloat { public: float w; VectorFloat v; void normalize(); QuaternionFP convertToFixedPoint(); }; QuaternionFloat operator *(QuaternionFloat q1,float s); QuaternionFloat operator +(QuaternionFloat q1,QuaternionFloat q2); QuaternionFloat operator -(QuaternionFloat q1,QuaternionFloat q2); QuaternionFloat operator *(QuaternionFloat q1,QuaternionFloat q2); MatrixFP quaternionToMatrixFP(QuaternionFloat q); #define Quaternion QuaternionFP Quaternion normalize(Quaternion &q1); Quaternion operator *(Quaternion &q1,pp_int32 s); Quaternion operator +(Quaternion &q1,Quaternion &q2); Quaternion operator -(Quaternion &q1,Quaternion &q2); Quaternion operator *(Quaternion &q1,Quaternion &q2); MatrixFP quaternionToMatrixFP(Quaternion &q); #endif MilkyTracker-1.02.00/src/fx/ParticleBlobs.cpp000066400000000000000000000115121324432207300207100ustar00rootroot00000000000000/* * fx/ParticleBlobs.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "ParticleBlobs.h" #include "Math3d.h" #include "Filter.h" #include "Texture.h" #define GRIDSIZE 8 #define NUMPARTICLES (GRIDSIZE*GRIDSIZE*GRIDSIZE) struct Blob { int x,y,z; int strength; }; static Blob blobs[] = {{128,128,0,65536/8},{100,100,0,65536/8},{100,100,0,65536/8}}; #define MAXCLAMP 65536 #define TEXTURESIZE 64 ParticleBlobs::ParticleBlobs(int width, int height) : ParticleFX(width, height, NUMPARTICLES) { setZOffset(30*65536); temp = new unsigned short[width*height]; //buffer = new unsigned short[pitch*height]; int i; unsigned char *texture = new unsigned char[TEXTURESIZE*TEXTURESIZE*3]; /*FILE* f = fopen("y:/stuff/demo/flare.tga","rb"); fseek(f,18,SEEK_SET); fread(texture,TEXTURESIZE*TEXTURESIZE,3,f); fclose(f);*/ Texture::createFlareTexture(texture, 224, 191, 64, 4.0f, TEXTURESIZE); flareTexture[0] = new unsigned short[TEXTURESIZE*TEXTURESIZE]; flareTexture[1] = new unsigned short[TEXTURESIZE*TEXTURESIZE]; flareTexture[2] = new unsigned short[TEXTURESIZE*TEXTURESIZE]; for (i = 0; i < TEXTURESIZE*TEXTURESIZE*3; i++) texture[i]>>=1; for (i = 0; i < TEXTURESIZE*TEXTURESIZE; i++) { //texture[i*3] = texture[i*3+1] = 0; flareTexture[0][i] = RGB2SHORT(texture[i*3],texture[i*3+1],texture[i*3+2]); flareTexture[1][i] = RGB2SHORT(texture[i*3+2],texture[i*3+1],texture[i*3]); flareTexture[2][i] = RGB2SHORT(texture[i*3+1],texture[i*3+2],texture[i*3]); } delete[] texture; i = 0; for (int z = 0; z < GRIDSIZE; z++) for (int y = 0; y < GRIDSIZE; y++) for (int x = 0; x < GRIDSIZE; x++) { float fx = (x-((GRIDSIZE-1)*0.5f))*2.0f; float fy = (y-((GRIDSIZE-1)*0.5f))*2.0f; float fz = (z-((GRIDSIZE-1)*0.5f))*2.0f; int texture = rand()%3; particles[i].pos.x = int(fx*65536.0f); particles[i].pos.y = int(fy*65536.0f); particles[i].pos.z = int(fz*65536.0f); particles[i].texture = flareTexture[texture]; particles[i].textureWidth = particles[i].textureHeight = TEXTURESIZE; i++; } } ParticleBlobs::~ParticleBlobs() { for (int i = 0; i < 3; i++) delete flareTexture[i]; //delete buffer; delete temp; } void ParticleBlobs::update(float SyncFrac) { double phi = ::PPGetTickCount()*0.001f*0.5f;; blobs[0].x = (int)(sin(phi*4.0f)*4.0f*65536.0f); blobs[0].y = (int)(cos(phi*4.0f)*4.0f*65536.0f); blobs[0].z = (int)(sin(phi*4.0f)*4.0f*65536.0f); blobs[1].x = (int)(cos(-phi*2.0f)*4.0f*65536.0f); blobs[1].y = (int)(sin(phi*2.0f)*4.0f*65536.0f); blobs[1].z = (int)(cos(phi*2.0f)*4.0f*65536.0f); blobs[2].x = (int)(cos(-phi*3.0f)*6.0f*65536.0f); blobs[2].y = (int)(cos(phi*3.0f)*3.0f*65536.0f); blobs[2].z = (int)(sin(phi*3.0f)*5.0f*65536.0f); MatrixFP rotMatrix,mx,my,mz; mx.setRotX((float)(phi*0.75f)); my.setRotY((float)phi); mz.setRotZ((float)(phi*0.5f)); rotMatrix = (mx*my); rotMatrix = mz*rotMatrix; this->rotMatrix = rotMatrix; int numBlobs = sizeof(blobs)/sizeof(Blob); for (int i = 0; i < NUMPARTICLES; i++) { int scale = 32768; for (int j = 0; j < numBlobs; j++) { int dx = fpmul((blobs[j].x-particles[i].pos.x),blobs[j].strength); int dy = fpmul((blobs[j].y-particles[i].pos.y),blobs[j].strength); int dz = fpmul((blobs[j].z-particles[i].pos.z),blobs[j].strength); int sd = fpmul(dx,dx)+fpmul(dy,dy)+fpmul(dz,dz); if (sd<(0.707f*0.707f*65536)) scale += (fpmul(sd,sd)-sd+16384)*4; } if (scale>=MAXCLAMP) scale = MAXCLAMP; scale = fpmul(scale,scale); scale = fpmul(scale,scale); particles[i].size = scale; } } void ParticleBlobs::render(unsigned short* vscreen, unsigned int pitch) { int height = this->height; int width = this->width>>1; unsigned int bgColor = 0; unsigned int fill = (bgColor<<16) | bgColor; for (int j = 0; j < height; j++) { unsigned int* vPtr = (unsigned int*)(vscreen+j*pitch); for (int i = 0; i < width; i++) *vPtr++ = fill; } ParticleFX::render(vscreen, pitch); Filter::stylize(vscreen, temp, this->width, this->height, pitch, this->width, 100, 70, 60, 255, 192, 100); //Filter::applyRadial(vscreen, this->width, this->height, pitch, this->width>>1, this->height>>1, 8192, 1); } MilkyTracker-1.02.00/src/fx/ParticleBlobs.h000066400000000000000000000022401324432207300203530ustar00rootroot00000000000000/* * fx/ParticleBlobs.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #ifndef PARTICLEBLOBS__H #define PARTICLEBLOBS__H #include "ParticleFX.h" #include "Math3d.h" class ParticleBlobs : public ParticleFX { unsigned short* flareTexture[3]; unsigned short* temp; unsigned short* buffer; public: ParticleBlobs(int width, int height); virtual ~ParticleBlobs(); virtual void render(unsigned short* vscreen, unsigned int pitch); virtual void update(float syncFrac); }; #endif MilkyTracker-1.02.00/src/fx/ParticleEmitter.cpp000066400000000000000000000257011324432207300212650ustar00rootroot00000000000000/* * fx/ParticleEmitter.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "BasicTypes.h" #include "ParticleEmitter.h" #include "Math3d.h" #include "Filter.h" #include "Texture.h" #undef LENSE_REFLECTION // emitter size is hardcoded at 64 pixels ;) #define TEXTURESIZE_PARTICLE 16 #ifdef LENSE_REFLECTION void createRingTexture(unsigned char* texture, int size, int outer, int inner, int r, int g, int b, float innerShade = 0.0f, float outerShade = 0.0f) { float hx = size>>1; float hy = size>>1; float mid = (outer+inner)>>1; float c = (outer-inner)*0.5f; for (int y = 0; y < size; y++) for (int x = 0; x < size; x++) { float px = x-hx; float py = y-hy; float dist = sqrt(px*px+py*py); float s = 1.0f-(abs(mid-dist)/c); s = (float)pow(sin(s*(M_PI/2.0f)),4.0f); if (mid-dist >= 0) { s+=innerShade; } else s+=outerShade; if (s >= 1.0f) s = 1.0f; if (dist >= inner && dist <= outer) { texture[(y*size+x)*3] = r*s; texture[(y*size+x)*3+1] = g*s; texture[(y*size+x)*3+2] = b*s; } else if (dist < inner) { texture[(y*size+x)*3] = r*innerShade; texture[(y*size+x)*3+1] = g*innerShade; texture[(y*size+x)*3+2] = b*innerShade; } else { texture[(y*size+x)*3] = r*outerShade; texture[(y*size+x)*3+1] = g*outerShade; texture[(y*size+x)*3+2] = b*outerShade; } } } #endif ParticleEmitter::ParticleEmitter(int width, int height, int FOV, int numEmitters, int maxParticles) : ParticleFX(width, height, maxParticles+numEmitters, FOV) { this->maxParticles = maxParticles; setZOffset(0); //temp = new unsigned short[width*height]; //buffer = new unsigned short[width*height]; int i; unsigned char *texture = new unsigned char[TEXTURESIZE_PARTICLE*TEXTURESIZE_PARTICLE*3]; Texture::createFlareTexture(texture, 224, 191, 64, 4.0f, TEXTURESIZE_PARTICLE); flareTexture[0] = new unsigned short[TEXTURESIZE_PARTICLE*TEXTURESIZE_PARTICLE]; flareTexture[1] = new unsigned short[TEXTURESIZE_PARTICLE*TEXTURESIZE_PARTICLE]; flareTexture[2] = new unsigned short[TEXTURESIZE_PARTICLE*TEXTURESIZE_PARTICLE]; for (i = 0; i < TEXTURESIZE_PARTICLE*TEXTURESIZE_PARTICLE*3; i++) texture[i]>>=1; for (i = 0; i < TEXTURESIZE_PARTICLE*TEXTURESIZE_PARTICLE; i++) { //texture[i*3] = texture[i*3+1] = 0; flareTexture[0][i] = RGB2SHORT(texture[i*3],texture[i*3+1],texture[i*3+2]); flareTexture[1][i] = RGB2SHORT(texture[i*3+2],texture[i*3+1],texture[i*3]); flareTexture[2][i] = RGB2SHORT(texture[i*3+1],texture[i*3+2],texture[i*3]); } delete[] texture; emitterTexture[0] = new unsigned short[64*64]; #ifdef LENSE_REFLECTION emitterTexture[1] = new unsigned short[64*64]; emitterTexture[2] = new unsigned short[64*64]; emitterTexture[3] = new unsigned short[64*64]; emitterTexture[4] = new unsigned short[64*64]; emitterTexture[5] = new unsigned short[64*64]; #endif texture = new unsigned char[64*64*3]; Texture::createFlareTexture(texture, 224, 191, 64, 4.0f, 64); float len = (float)sqrt((float)32*32*2); for (i = 0; i < 64; i++) { float dist = (float)pow((float)(len-sqrt((double)((i-32)*(i-32)*2)))/len,2); int r = texture[(i*64+i)*3]; int g = texture[(i*64+i)*3+1]; int b = texture[(i*64+i)*3+2]; r+=(int)(255*dist); if (r>255) r = 255; g+=(int)(191*dist); if (g>255) g = 255; b+=(int)(64*dist); if (b>255) b = 255; texture[(i*64+i)*3] = r; texture[(i*64+i)*3+1] = g; texture[(i*64+i)*3+2] = b; r = texture[(i*64+63-i)*3]; g = texture[(i*64+63-i)*3+1]; b = texture[(i*64+63-i)*3+2]; r+=(int)(255*dist); if (r>255) r = 255; g+=(int)(191*dist); if (g>255) g = 255; b+=(int)(64*dist); if (b>255) b = 255; texture[(i*64+63-i)*3] = r; texture[(i*64+63-i)*3+1] = g; texture[(i*64+63-i)*3+2] = b; r = texture[(i*64+31)*3]; g = texture[(i*64+31)*3+1]; b = texture[(i*64+31)*3+2]; r+=(int)(255*dist); if (r>255) r = 255; g+=(int)(191*dist); if (g>255) g = 255; b+=(int)(64*dist); if (b>255) b = 255; texture[(i*64+31)*3] = r; texture[(i*64+31)*3+1] = g; texture[(i*64+31)*3+2] = b; r = texture[(31*64+i)*3]; g = texture[(31*64+i)*3+1]; b = texture[(31*64+i)*3+2]; r+=(int)(255*dist); if (r>255) r = 255; g+=(int)(191*dist); if (g>255) g = 255; b+=(int)(64*dist); if (b>255) b = 255; texture[(32*64+i)*3] = r; texture[(32*64+i)*3+1] = g; texture[(32*64+i)*3+2] = b; } // spikey Texture::blur24(texture, 64, 64, 2); Texture::convert24to16(emitterTexture[0], texture, 64*64, 0); #ifdef LENSE_REFLECTION // green ring createRingTexture(texture, 64, 28, 19, 64>>1, 224>>1, 96>>1, 0.0f); Texture::convert24to16(emitterTexture[1], texture, 64*64, 0); // blue ring createRingTexture(texture, 64, 28, 19, 0, 96>>1, 224>>1, 0.4f); Texture::convert24to16(emitterTexture[2], texture, 64*64, 0); // orange ring createRingTexture(texture, 64, 28, 19, 224>>1, 128>>1, 32>>1, 0.4f); Texture::convert24to16(emitterTexture[3], texture, 64*64, 0); // blue ball Texture::createFlareTexture(texture, 0, 96>>1, 224>>1, 1.0f, 64); Texture::convert24to16(emitterTexture[4], texture, 64*64, 0); // red ball Texture::createFlareTexture(texture, 255>>1, 96>>1, 32>>1, 1.0f, 64); Texture::convert24to16(emitterTexture[5], texture, 64*64, 0); #endif delete[] texture; this->numEmitters = numEmitters; emitters = new Particle[numEmitters]; // create emitters for (i = 0; i < numEmitters; i++) { emitters[i].pos.x = 0; emitters[i].pos.y = 0; emitters[i].pos.z = 0; emitters[i].size = 65536*4; emitters[i].texture = emitterTexture[0]; emitters[i].textureHeight = emitters[i].textureWidth = 64; } for (i = 0; i < maxParticles+numEmitters; i++) { particles[i].pos.x = particles[i].pos.y = particles[i].pos.z = 0; particles[i].texture = flareTexture[0]; particles[i].size = 0; particles[i].grow = 0; } currentParticleIndex = numEmitters; } ParticleEmitter::~ParticleEmitter() { for (int i = 0; i < 3; i++) delete flareTexture[i]; //delete buffer; //delete temp; delete emitterTexture[0]; #ifdef LENSE_REFLECTION delete emitterTexture[1]; delete emitterTexture[2]; delete emitterTexture[3]; delete emitterTexture[4]; delete emitterTexture[5]; #endif delete[] emitters; } void ParticleEmitter::update(float syncFrac) { int syncFracFP = (int)(syncFrac*65536.0f)<<1; /*int speed = fpmul(syncFracFP, 16384*4); int i; rotMatrix.setID(); particles[0] = emitter; static int j = 1; for (i = 0; i < 10; i++) { particles[j].pos = emitter.pos; particles[j].pos.x += (((rand()&255)-127)<<11); particles[j].pos.z += (((rand()&255)-127)<<11); particles[j].size = 32768; particles[j].direction.x = 0; particles[j].direction.y = -fpmul(((rand()&255)<<8),speed); particles[j].direction.z = 0; particles[j].texture = flareTexture[rand()%3]; particles[j].textureHeight = particles[j].textureWidth = TEXTURESIZE_PARTICLE; j++; if (j>NUMPARTICLES) j = 1; } for (i = 1; i < NUMPARTICLES+1; i++) { particles[i].pos = particles[i].pos+particles[i].direction; //if (particles[i].size >= 256) //{ // particles[i].size -= (syncFracFP>>8); //} //else // particles[i].size = 0; }*/ int speed = fpmul(syncFracFP, 16384); unsigned int i; rotMatrix.setID(); particles[0] = *emitters; unsigned int j = currentParticleIndex; for (unsigned int k = 0; k < numEmitters; k++) { for (i = 0; i < 10; i++) { particles[j].pos = emitters[k].pos; particles[j].size = 32768*2; particles[j].grow = 256; particles[j].direction.x = fpmul(((rand()&255)<<8)-32768,speed); particles[j].direction.y = -fpmul(((rand()&255)<<8)-32768,speed); particles[j].direction.z = fpmul(((rand()&255)<<8)-32768,speed); particles[j].texture = flareTexture[rand()%3]; particles[j].textureHeight = particles[j].textureWidth = TEXTURESIZE_PARTICLE; j++; if (j >= maxParticles+numEmitters) j = numEmitters; } } currentParticleIndex = j; for (i = numEmitters; i < maxParticles+numEmitters; i++) { particles[i].pos = particles[i].pos+particles[i].direction; if (particles[i].size >= particles[i].grow) { particles[i].size -= fpmul(particles[i].grow,syncFracFP<<2); } else particles[i].size = 0; } } void ParticleEmitter::render(unsigned short* vscreen, unsigned int pitch) { ParticleFX::render(vscreen, pitch); #ifdef LENSE_REFLECTION for (int i = 0; i < numEmitters; i++) { // draw lens-flare reflections VectorFP v = rotMatrix*emitters[i].pos; int z = v.z+zOffset; if (z>65536) { if (emitters[i].size) { int rz = fpdiv(65536,z); int ix = (fpmul((v.x),rz)*FOV)+(width>>1)*65536; int iy = (fpmul((v.y),rz)*FOV)+(height>>1)*65536; int size = fpmul((emitters[i].size>>1)*FOV,rz); int ix2 = (width-1)*65536-ix; int iy2 = (height-1)*65536-iy; int dx = ix2-ix; int dy = iy2-iy; int ix3 = (ix+ix2)>>1; int iy3 = (iy+iy2)>>1; Sprite spr; spr.tx = (ix+fpmul(dx,65536*3)); spr.ty = (iy+fpmul(dy,65536*3)); spr.xsize = size<<2; spr.ysize = size<<2; spr.xres = emitters[i].textureWidth-1; spr.yres = emitters[i].textureHeight-1; spr.xoffset = 0; spr.yoffset = 0; spr.texturexres = emitters[i].textureWidth; spr.flags = 0; spr.texture = emitterTexture[4]; drawSprite(vscreen,width, height, pitch, &spr); spr.tx = (ix+fpmul(dx,65536)); spr.ty = (iy+fpmul(dy,65536)); spr.xsize = fpmul(size,65536+32768); spr.ysize = fpmul(size,65536+32768); spr.texture = emitterTexture[1]; drawSprite(vscreen,width, height, pitch, &spr); spr.tx = ix3; spr.ty = iy3; spr.xsize = size>>2; spr.ysize = size>>2; spr.texture = emitterTexture[5]; drawSprite(vscreen,width, height, pitch, &spr); spr.tx = (ix+ix3)>>1; spr.ty = (iy+iy3)>>1; spr.xsize = size; spr.ysize = size; spr.texture = emitterTexture[2]; drawSprite(vscreen,width, height, pitch, &spr); spr.tx = (ix+fpmul(dx,65536*2)); spr.ty = (iy+fpmul(dy,65536*2)); spr.xsize = size; spr.ysize = size; spr.texture = emitterTexture[3]; drawSprite(vscreen,width, height, pitch, &spr); spr.tx = (ix+fpmul(dx,65536*3+32768)); spr.ty = (iy+fpmul(dy,65536*3+32768)); spr.xsize = size>>1; spr.ysize = size>>1; spr.texture = emitterTexture[5]; drawSprite(vscreen,width, height, pitch, &spr); } } } #endif } MilkyTracker-1.02.00/src/fx/ParticleEmitter.h000066400000000000000000000027201324432207300207260ustar00rootroot00000000000000/* * fx/ParticleEmitter.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #ifndef PARTICLEEMITTER__H #define PARTICLEEMITTER__H #include "ParticleFX.h" #include "Math3d.h" class ParticleEmitter : public ParticleFX { private: unsigned short* flareTexture[3]; unsigned short* temp; unsigned short* buffer; unsigned int numEmitters; unsigned short* emitterTexture[6]; Particle* emitters; int currentParticleIndex; int maxParticles; public: ParticleEmitter(int width, int height, int FOV, int numEmitters, int maxParticles); virtual ~ParticleEmitter(); void setEmitter(unsigned int index, VectorFP& pos) { if (index < numEmitters) emitters[index].pos = pos; } virtual void update(float syncFrac); virtual void render(unsigned short* vscreen, unsigned int pitch); }; #endif MilkyTracker-1.02.00/src/fx/ParticleFX.cpp000066400000000000000000000107471324432207300201750ustar00rootroot00000000000000/* * fx/ParticleFX.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "BasicTypes.h" #include "ParticleFX.h" #include "Math3d.h" #include "Filter.h" #define PRGB2SHORT(r,g,b) ((((r))<<11)+(((g))<<5)+((b))) #define RGB2SHORT(r,g,b) ((((r>>3))<<11)+(((g>>2))<<5)+((b>>3))) // draw glenzed/scaled sprite into virtual screen // (subpixel/texel accurate) void ParticleFX::drawSprite(unsigned short *buffer, int XMAX, int YMAX, int PITCH, Sprite* spr) { int xmax = XMAX<<16; int ymax = YMAX<<16; int xmaxdec = xmax-(1<<16); int ymaxdec = ymax-(1<<16); int x,y,fx,sy,adder,ady,adx; int stepx,stepy,ky,zy,kx,zx; unsigned short *vidink; int xsize = spr->xsize; int ysize = spr->ysize; int tx = spr->tx; int ty = spr->ty; if (xsize == 0) return; if (ysize == 0) return; stepx = fpdiv(65536*spr->xres,xsize); stepy = fpdiv(65536*spr->yres,ysize); ty-=(ysize>>1); tx-=(xsize>>1); ky = zx = zy = kx = 0; if ((spr->flags&1)) { zx = spr->xres<<16; stepx=-stepx; } if (ty<0) { ky+=(-ty); zy+=fpmul(-ty,stepy); } if (tx<0) { kx+=(-tx); zx+=fpmul(-tx,stepx); } if ((ty+ysize)>ymaxdec) ysize-=(ty+ysize)-ymax; if ((tx+xsize)>xmaxdec) xsize-=(tx+xsize)-xmax; if (ky>=ysize) return; if (kx>=xsize) return; if ((ysize+ty)<0) return; if ((xsize+tx)<0) return; adx = stepx; ady = stepy; int y1 = ky+ty; int y2 = ty+ysize; int x1 = kx+tx; int x2 = tx+xsize; int ry1 = fpceil(y1); int ry2 = fpceil(y2); int rx1 = fpceil(x1); int rx2 = fpceil(x2); if (rx2>(xmax>>16)) rx2=xmax>>16; if (ry2>(ymax>>16)) ry2=ymax>>16; int width = rx2-rx1; int height = ry2-ry1; if (!width) return; if (!height) return; int prestep = (fpceil(y1)<<16)-y1; zy+=fpmul(prestep,stepy); sy=zy; prestep = (rx1<<16)-x1; fx = (zx+fpmul(prestep,stepx)); vidink = (ry1*PITCH+rx1)+buffer; adder = ((PITCH-rx2)+rx1); for (y=0;y>16)+spr->yoffset)*spr->texturexres))+spr->texture; int ofs = fx+(spr->xoffset<<16); for (x=0;x>16]; unsigned int result = (rgb16_1&0xF800)+(rgb16_2&0xF800); if (result>0xF800) result = 0xF800; unsigned int t = (rgb16_1&0x7E0)+(rgb16_2&0x7E0); if (t>0x7E0) t = 0x7E0; result|=t; t = (rgb16_1&0x1F)+(rgb16_2&0x1F); if (t>0x1F) t = 0x1F; result|=t; *vidink++ = result; ofs+=adx; } vidink+=adder; sy+=ady; } } ParticleFX::ParticleFX(int width, int height, int numParticles, int FOV) { this->width = width; this->height = height; if (FOV != -1) this->FOV = FOV; else this->FOV = (this->width * 256) / 320; zOffset = 0; particles = new Particle[numParticles]; this->numParticles = numParticles; } ParticleFX::~ParticleFX() { if (particles) delete particles; } void ParticleFX::render(unsigned short* vscreen, unsigned int pitch) { int XMAX = width; int YMAX = height; int PITCH = pitch; MatrixFP rotMatrix = this->rotMatrix; int zOffset = this->zOffset; int FOV = this->FOV; for (unsigned int i = 0; i < numParticles; i++) { VectorFP v = rotMatrix*particles[i].pos; int z = v.z+zOffset; if (z>65536) { if (particles[i].size > 0) { int rz = fpdiv(65536,z); int x = (fpmul((v.x),rz)*FOV)+(XMAX>>1)*65536; int y = (fpmul((v.y),rz)*FOV)+(YMAX>>1)*65536; int size = fpmul((particles[i].size*4)*FOV,rz); Sprite spr; spr.tx = x; spr.ty = y; spr.xsize = size; spr.ysize = size; spr.xres = particles[i].textureWidth-1; spr.yres = particles[i].textureHeight-1; spr.xoffset = 0; spr.yoffset = 0; spr.texturexres = particles[i].textureWidth; spr.flags = 0; spr.texture = particles[i].texture; drawSprite(vscreen,XMAX, YMAX, PITCH, &spr); } } } } void ParticleFX::update(float SyncFrac) { } MilkyTracker-1.02.00/src/fx/ParticleFX.h000066400000000000000000000035711324432207300176370ustar00rootroot00000000000000/* * fx/ParticleFX.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #ifndef PARTICLEFX__H #define PARTICLEFX__H #include "FXInterface.h" #include "Math3d.h" class ParticleFX : public FXInterface { protected: struct Particle { VectorFP pos; VectorFP direction; int size; int grow; unsigned short* texture; int textureWidth, textureHeight; }; struct Sprite { int tx,ty; int xsize,ysize; int xres,yres; int xoffset,yoffset; unsigned short zval; int flags; int shade; unsigned int texturexres; unsigned short *texture; }; int FOV; int zOffset; Particle* particles; unsigned int numParticles; MatrixFP rotMatrix; public: ParticleFX(int width, int height, int numParticles, int FOV = -1); virtual ~ParticleFX(); virtual void render(unsigned short* vscreen, unsigned int pitch); virtual void update(float syncFrac) = 0; void setFOV(int FOV) { this->FOV = FOV; } void setZOffset(int zOffset) { this->zOffset = zOffset; } void setMatrix(MatrixFP& matrix) { rotMatrix = matrix; } MatrixFP getMatrix() { return rotMatrix; } static void drawSprite(unsigned short *buffer, int XMAX, int YMAX, int PITCH, Sprite* spr); }; #endif MilkyTracker-1.02.00/src/fx/ParticleFun.cpp000066400000000000000000000223561324432207300204070ustar00rootroot00000000000000/* * fx/ParticleFun.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ ///////////////////////////////////////////////////////////// // custom class for the PHAL logo ///////////////////////////////////////////////////////////// #include "BasicTypes.h" #include "ParticleFun.h" #include "Math3d.h" #include "Filter.h" #include "Texture.h" static unsigned char fontTable[] = {0,0,0,0,0,0,0,0, 126,129,165,129,189,153,129,126, 126,255,219,255,255,195,231,126, 0,238,254,254,124,56,16,0, 16,56,124,254,124,56,16,0, 24,60,24,255,255,74,24,0, 16,56,124,254,254,146,56,0, 0,0,24,60,24,0,0,0, 255,255,231,195,231,255,255,255, 0,60,66,129,129,66,60,0, 255,195,189,126,126,189,195,255, 31,7,13,124,198,198,124,0, 0,126,195,195,126,24,126,24, 4,6,7,4,4,252,248,0, 12,10,13,11,249,241,15,15, 129,67,61,39,37,63,87,255, 0,0,96,120,126,120,96,0, 0,0,6,30,126,30,6,0, 24,126,24,24,24,24,126,24, 102,102,102,102,102,0,102,0, 255,182,118,54,54,54,54,0, 126,129,124,66,66,62,129,126, 0,0,0,126,126,0,0,0, 24,126,24,24,126,24,0,255, 24,126,24,24,24,24,24,0, 24,24,24,24,24,126,24,0, 0,4,6,255,6,4,0,0, 0,32,96,255,96,32,0,0, 0,0,0,192,192,192,255,0, 0,36,102,255,102,36,0,0, 0,0,16,56,124,254,0,0, 0,0,0,254,124,56,16,0, 0,0,0,0,0,0,0,0, 48,120,120,120,48,0,48,0, 204,102,51,0,0,0,0,0, 0,54,127,54,54,127,54,0, 124,214,208,124,22,214,124,16, 227,166,236,24,55,101,199,0, 56,76,56,69,198,206,122,1, 6,12,24,0,0,0,0,0, 12,24,24,24,24,24,24,12, 96,48,48,48,48,48,48,96, 16,84,56,254,56,84,16,0, 0,24,24,126,24,24,0,0, 0,0,0,0,0,0,24,48, 0,0,0,126,0,0,0,0, 0,0,0,0,0,0,48,0, 0,3,6,12,24,48,96,0, 124,206,222,254,238,206,124,0, 28,60,28,28,28,28,28,0, 124,206,14,28,56,112,254,0, 124,206,14,60,14,206,124,0, 206,206,206,206,254,14,14,0, 254,224,224,252,14,14,252,0, 124,230,224,252,230,230,124,0, 254,6,14,28,56,56,56,0, 124,230,230,124,230,230,124,0, 124,206,206,126,14,14,252,0, 0,48,0,0,0,48,0,0, 0,48,0,0,0,48,96,0, 0,24,48,96,48,24,0,0, 0,0,126,0,126,0,0,0, 0,48,24,12,24,48,0,0, 124,198,14,28,56,0,56,0, 124,198,222,222,220,192,124,0, 124,230,230,230,254,230,230,0, 252,230,230,252,230,230,252,0, 124,230,224,224,230,230,124,0, 252,230,230,230,230,230,252,0, 254,224,224,254,224,224,254,0, 254,224,224,254,224,224,224,0, 124,230,224,238,230,230,124,0, 230,230,230,254,230,230,230,0, 56,56,56,56,56,56,56,0, 14,14,14,14,206,206,124,0, 230,236,248,240,248,236,230,0, 224,224,224,224,224,224,254,0, 198,238,254,214,198,198,198,0, 198,230,246,254,238,230,230,0, 124,230,230,230,230,230,124,0, 252,230,230,252,224,224,224,0, 124,230,230,230,230,234,116,2, 252,230,230,252,230,230,230,0, 124,230,224,124,14,206,124,0, 254,56,56,56,56,56,56,0, 230,230,230,230,230,230,124,0, 230,230,230,230,230,124,56,0, 198,198,198,214,214,254,252,0, 227,118,60,24,60,110,199,0, 230,230,124,56,56,56,56,0, 254,14,28,56,112,224,254,0, 28,24,24,24,24,24,24,28, 0,96,48,24,12,6,3,0, 112,48,48,48,48,48,48,112, 24,60,102,195,0,0,0,0, 0,0,0,0,0,0,0,255, 48,24,12,0,0,0,0,0, 0,0,124,14,126,206,126,0, 192,192,252,230,230,230,252,0, 0,0,124,230,224,230,124,0, 6,6,126,206,206,206,126,0, 0,0,124,230,254,224,126,0, 60,112,112,252,112,112,112,0, 0,0,124,206,206,126,14,124, 192,192,252,230,230,230,230,0, 24,0,24,56,56,56,56,0, 12,0,12,28,28,28,28,248, 192,192,204,216,240,216,204,0, 24,24,56,56,56,56,56,0, 0,0,252,214,214,214,214,0, 0,0,252,230,230,230,230,0, 0,0,124,230,230,230,124,0, 0,0,252,230,230,252,224,224, 0,0,126,206,206,126,14,14, 0,0,252,230,224,224,224,0, 0,0,126,224,124,14,252,0, 24,24,126,56,56,56,56,0, 0,0,230,230,230,230,126,0, 0,0,230,230,230,108,56,0, 0,0,214,214,214,214,252,0, 0,0,230,124,56,124,206,0, 0,0,206,206,206,126,14,252, 0,0,254,28,56,112,254,0, 12,24,24,48,24,24,12,0, 24,24,24,24,24,24,24,24, 96,48,48,24,48,48,96,0, 112,219,14,0,0,0,0,0, 0,0,16,40,68,254,0,0, 255,128,128,128,128,128,128,128, 255,0,0,0,0,0,0,0, 255,1,1,1,1,1,1,1, 128,128,128,128,128,128,128,128, 1,1,1,1,1,1,1,1, 128,128,128,128,128,128,128,255, 0,0,0,0,0,0,0,255, 1,1,1,1,1,1,1,255, 128,0,0,0,0,0,0,0, 1,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,128, 0,0,0,0,0,0,0,1, 128,192,224,240,248,252,254,255, 255,127,63,31,15,7,3,1, 255,255,192,192,192,192,192,192, 255,255,0,0,0,0,0,0, 255,255,3,3,3,3,3,3, 192,192,192,192,192,192,192,192, 3,3,3,3,3,3,3,3, 192,192,192,192,192,192,255,255, 0,0,0,0,0,0,255,255, 3,3,3,3,3,3,255,255, 192,192,0,0,0,0,0,0, 3,3,0,0,0,0,0,0, 0,0,0,0,0,0,192,192, 0,0,0,0,0,0,3,3, 0,0,0,170,0,0,0,0, 0,252,252,252,252,252,252,0, 0,126,126,126,126,126,126,0, 0,63,63,63,63,63,63,0, 0,31,31,31,31,31,31,0, 0,15,15,15,15,15,15,0, 0,7,7,7,7,7,7,0, 0,3,3,3,3,3,3,0, 0,1,1,1,1,1,1,0, 0,128,128,128,128,128,128,0, 0,192,192,192,192,192,192,0, 0,224,224,224,224,224,224,0, 0,240,240,240,240,240,240,0, 0,248,248,248,248,248,248,0, 170,214,170,214,170,214,170,214, 255,255,0,0,0,16,56,124, 255,255,0,0,0,0,0,254, 255,255,0,0,16,56,124,254, 255,255,0,195,231,255,219,195, 0,0,0,0,24,0,0,0, 0,192,192,192,192,192,192,192, 0,216,216,216,216,216,216,216, 0,219,219,219,219,219,219,219, 0,96,96,96,96,96,96,96, 0,108,108,108,108,108,108,108, 0,109,109,109,109,109,109,109, 0,128,128,128,128,128,128,128, 0,176,176,176,176,176,176,176, 0,182,182,182,182,182,182,182, 0,0,24,60,60,24,0,0, 0,0,0,248,24,248,24,24, 54,54,54,246,6,246,54,54, 54,54,54,54,54,54,54,54, 0,0,0,254,6,246,54,54, 54,54,54,246,6,254,0,0, 54,54,54,254,0,0,0,0, 24,24,24,248,24,248,0,0, 0,0,0,248,24,24,24,24, 24,24,24,31,0,0,0,0, 24,24,24,255,0,0,0,0, 0,0,0,255,24,24,24,24, 24,24,24,31,24,24,24,24, 0,0,0,255,0,0,0,0, 24,24,24,255,24,24,24,24, 24,24,24,31,24,31,24,24, 54,54,54,55,54,54,54,54, 54,54,54,55,48,63,0,0, 0,0,0,63,48,55,54,54, 54,54,54,247,0,255,0,0, 0,0,0,255,0,247,54,54, 54,54,54,55,48,55,54,54, 0,0,0,255,0,255,0,0, 54,54,54,247,0,247,54,54, 24,24,24,255,0,255,0,0, 54,54,54,255,0,0,0,0, 0,0,0,255,0,255,24,24, 0,0,0,255,54,54,54,54, 54,54,54,63,0,0,0,0, 24,24,24,31,24,31,0,0, 0,0,0,31,24,31,24,24, 0,0,0,63,54,54,54,54, 54,54,54,255,54,54,54,54, 24,24,24,255,24,255,24,24, 24,24,24,248,0,0,0,0, 0,0,0,31,24,24,24,24, 255,255,255,255,255,255,255,255, 0,0,0,0,255,255,255,255, 240,240,240,240,240,240,240,240, 15,15,15,15,15,15,15,15, 255,255,255,255,0,0,0,0, 0,0,119,152,152,119,0,0, 28,54,102,252,198,198,252,192, 254,98,96,96,96,96,96,0, 0,0,255,102,102,102,102,0, 254,98,48,24,48,98,254,0, 0,0,63,102,198,204,120,0, 0,0,51,51,51,62,48,240, 0,0,255,24,24,24,24,0, 60,24,60,102,102,60,24,60, 0,124,198,254,198,124,0,0, 0,126,195,195,195,102,231,0, 30,25,60,102,198,204,120,0, 0,0,102,153,153,102,0,0, 0,3,124,206,230,124,192,0, 0,62,192,254,192,62,0,0, 0,126,195,195,195,195,0,0, 0,254,0,254,0,254,0,0, 24,24,126,24,24,126,0,0, 112,24,12,24,112,0,254,0, 28,48,96,48,28,0,254,0, 0,14,27,24,24,24,24,24, 24,24,24,24,24,216,112,0, 0,24,0,126,0,24,0,0, 0,118,220,0,118,220,0,0, 60,102,60,0,0,0,0,0, 0,24,60,24,0,0,0,0, 0,0,0,0,24,0,0,0, 15,12,12,12,236,108,56,0, 216,236,204,204,0,0,0,0, 240,48,192,240,0,0,0,0, 0,0,0,60,60,60,60,0, 0,0,0,0,0,0,0,0 }; #define NUMPARTICLES 64*12 #define TEXTURESIZE 32 // what the hell is the ARM compiler doing here??? #pragma optimize("",off) ParticleFun::ParticleFun(int width, int height, int FOV) : ParticleFX(width, height, NUMPARTICLES, FOV) { phi = 0.0f; setZOffset(0); int i; unsigned char *texture = new unsigned char[TEXTURESIZE*TEXTURESIZE*3]; /*FILE* f = fopen("y:/stuff/demo/flare.tga","rb"); fseek(f,18,SEEK_SET); fread(texture,TEXTURESIZE*TEXTURESIZE,3,f); fclose(f);*/ Texture::createFlareTexture(texture, 127, 255, 64, 4.0f, TEXTURESIZE); flareTexture = new unsigned short[TEXTURESIZE*TEXTURESIZE]; Texture::convert24to16(flareTexture, texture, TEXTURESIZE*TEXTURESIZE, 0); delete[] texture; for (i = 0; i < NUMPARTICLES; i++) { particles[i].pos.x = particles[i].pos.y = particles[i].pos.z = 0; particles[i].texture = flareTexture; particles[i].size = 0; particles[i].grow = 0; } unsigned int x,y; i = 0; const char* chr = "MilkyTracker"; int sLen = (int)strlen(chr); for (int l = 0; l < sLen; l++) { for (y=0;y<8;y++) for (x=0;x<8;x++) if ((((fontTable[(chr[l]*8)+y]>>(7-x))&1))==1) { particles[i].pos.x = (l*8+x)*32768-(sLen*8>>1)*32768; particles[i].pos.y = y*32768-4*32768; particles[i].pos.z = 0*65536; particles[i].size = 32768; particles[i].direction.x = 0; particles[i].direction.y = 0; particles[i].direction.z = 0; particles[i].texture = flareTexture; particles[i].textureHeight = particles[i].textureWidth = TEXTURESIZE; i++; } } } #pragma optimize("",on) ParticleFun::~ParticleFun() { delete flareTexture; } void ParticleFun::update(float syncFrac) { MatrixFP m1,m2,m3; m1.setRotY(phi*0.1f); //m2.setRotZ(phi*0.05f); m3.setRotX(phi*0.075f); rotMatrix = m1/**m2*/*m3; phi+=syncFrac*0.25f; } MilkyTracker-1.02.00/src/fx/ParticleFun.h000066400000000000000000000020721324432207300200450ustar00rootroot00000000000000/* * fx/ParticleFun.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #ifndef PARTICLEFUN__H #define PARTICLEFUN__H #include "ParticleFX.h" #include "Math3d.h" class ParticleFun : public ParticleFX { private: unsigned short* flareTexture; float phi; public: ParticleFun(int width, int height, int FOV); virtual ~ParticleFun(); virtual void update(float syncFrac); }; #endif MilkyTracker-1.02.00/src/fx/ParticleScene.cpp000066400000000000000000000113221324432207300207030ustar00rootroot00000000000000/* * fx/ParticleScene.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "BasicTypes.h" #include "Math3d.h" #include "ParticleScene.h" #include "ParticleEmitter.h" #include "ParticleFun.h" #include "TexturedPlane.h" #include "TCBSpline.h" #include "Camera.h" #define MAXKEYS 1000 #define TIME_SCALE 20 static TCBSpline* cameraPosTrackSpline = new TCBSpline(MAXKEYS); static TCBSpline* cameraTargetTrackSpline = new TCBSpline(MAXKEYS); static TCBSpline* emitterTrackSpline = new TCBSpline(MAXKEYS); static TCBSpline* cameraRollTrackSpline = new TCBSpline(MAXKEYS); static int Time = 0; TCBSpline::TKey genPosKey(int Time) { int offset = (rand()&31)-15; float t = (((Time-offset)/99.0f)*512*16.0f); float radius = (float)(rand()&31)+20.0f; float py = (rand()%60)-30.0f; float px = (float)sin((float)t/128.0f*M_PI)*radius; float pz = (float)cos((float)t/128.0f*M_PI)*radius; VectorFloat v(px, py, pz); TCBSpline::TKey k; k.ti = Time*TIME_SCALE; k.t = 0.90f; k.c = 0.0f; k.b = 0.0f; k.v = v; return k; } TCBSpline::TKey genTargetKey(int Time) { return genPosKey(Time); /*float t = (Time/99.0f)*512*32.0f; float radius = 5.0f; //(float)(rand()&3); float py = (rand()&7)-4.0f; float px = (float)sin((float)t/128.0f*M_PI)*radius; float pz = (float)cos((float)t/128.0f*M_PI)*radius; VectorFloat v(px, py, pz); TCBSpline::TKey k; k.ti = Time*TIME_SCALE; k.t = 1.0f; k.c = 0.0f; k.b = 0.0f; k.v = v; return k;*/ } TCBSpline::TKey genRollKey(int Time) { float px = (rand()%360)-180.0f; float py = 0.0f; float pz = 0.0f; VectorFloat v(px, py, pz); TCBSpline::TKey k; k.ti = Time*TIME_SCALE; k.t = 1.0f; k.c = 0.0f; k.b = 0.0f; k.v = v; return k; } ParticleScene::ParticleScene(int width, int height, int gridshift) { this->width = width; this->height = height; particleFX = new ParticleEmitter(width, height, 192, 1, 1000); particleFX->setZOffset(0); particleFun = new ParticleFun(width, height, 192); texturedGrid = new TexturedPlane(width, height, gridshift); for (Time = 0; Time < MAXKEYS; Time++) { TCBSpline::TKey k = genPosKey(Time); cameraPosTrackSpline->setKey(Time, k); k = genTargetKey(Time); emitterTrackSpline->setKey(Time, k); float xo = (rand()&15)-7.0f; float yo = (rand()&15)-7.0f; float zo = (rand()&15)-7.0f; k.v.x+=xo; k.v.y+=yo; k.v.z+=zo; cameraTargetTrackSpline->setKey(Time, k); k = genRollKey(Time); cameraRollTrackSpline->setKey(Time, k); } time = 0.0f; } ParticleScene::~ParticleScene() { delete texturedGrid; delete particleFX; delete particleFun; } void ParticleScene::update(float syncFrac) { Camera cam; cam.position = cameraPosTrackSpline->getPos(time).convertToFixedPoint(); cam.target = cameraTargetTrackSpline->getPos(time).convertToFixedPoint(); cam.bank = 0.0f; //cam.bank = cameraRollTrackSpline->getPos(time).x; time+=syncFrac*0.15f; if (time > cameraPosTrackSpline->getKey(MAXKEYS-1)->ti) { time = 0.0f; } // update particle emitter stuff VectorFP emitterPos = emitterTrackSpline->getPos(time).convertToFixedPoint(); reinterpret_cast(particleFX)->setEmitter(0, emitterPos); particleFX->update(syncFrac); MatrixFP m1 =cam.getMatrix(), m2 = particleFX->getMatrix(); MatrixFP m = m1*m2; particleFX->setMatrix(m); // update particle fun particleFun->update(syncFrac); m2 = particleFun->getMatrix(); m = m1*m2; particleFun->setMatrix(m); // update grid raytracer m = cam.getMatrixInverse(); reinterpret_cast(texturedGrid)->setMatrix(m); reinterpret_cast(texturedGrid)->setCOP(cam.position); reinterpret_cast(texturedGrid)->setLight(cam.target); texturedGrid->update(syncFrac); } void drawInt(int i, unsigned short* vScreen, int pitch, int x, unsigned int y, unsigned short col); void ParticleScene::render(unsigned short* vscreen, unsigned int pitch) { texturedGrid->render(vscreen, pitch); particleFX->render(vscreen, pitch); particleFun->render(vscreen, pitch); //drawInt((int)time, vscreen, pitch, 0, 239-8, 31); } MilkyTracker-1.02.00/src/fx/ParticleScene.h000066400000000000000000000023021324432207300203460ustar00rootroot00000000000000/* * fx/ParticleScene.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #ifndef PARTICLESCENE__H #define PARTICLESCENE__H #include "FXInterface.h" class ParticleFX; class TexturedGrid; class ParticleScene : public FXInterface { private: float time; ParticleFX *particleFX; ParticleFX *particleFun; TexturedGrid *texturedGrid; public: ParticleScene(int width, int height, int gridshift); ~ParticleScene(); void render(unsigned short* vscreen, unsigned int pitch); void update(float syncFrac); }; #endif MilkyTracker-1.02.00/src/fx/PictureGlow.h000066400000000000000000000036251324432207300201020ustar00rootroot00000000000000/* * fx/PictureGlow.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #ifndef PICTUREGLOW__H #define PICTUREGLOW__H #include "FXInterface.h" #include "Filter.h" class PictureGlow : public FXInterface { private: unsigned short* pictureBuffer; int scale, resShift; unsigned short* glowBuffer1; unsigned short* glowBuffer2; public: PictureGlow(int w, int h, int rShift, unsigned short* picture) : resShift(0), pictureBuffer(picture) { width = w; height = h; scale = 0; glowBuffer1 = new unsigned short[w*h]; glowBuffer2 = new unsigned short[w*h]; } ~PictureGlow() { delete[] glowBuffer1; delete[] glowBuffer2; } void setScale(int scale) { this->scale = scale; } virtual void render(unsigned short* vscreen, unsigned int pitch) { int x,y; unsigned int* dstDW = (unsigned int*)vscreen; unsigned int* srcDW = (unsigned int*)pictureBuffer; for (y = 0; y < height; y++) { for (x = 0; x < width>>1; x++) { *dstDW = *srcDW; srcDW++; dstDW++; } dstDW+=(pitch-width)>>1; } Filter::glow(vscreen, width, height, pitch, glowBuffer1, glowBuffer2, resShift, scale); } virtual void update(float syncFrac) { scale-=(int)(syncFrac*1024.0f); if (scale < 0) scale = 0; } }; #endif MilkyTracker-1.02.00/src/fx/Starfield.cpp000066400000000000000000000053541324432207300201070ustar00rootroot00000000000000/* * fx/Starfield.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * Starfield.cpp * MyFirstCarbonProject * * Created by Peter Barth on Wed Feb 20 2002. * */ #include "Starfield.h" #include "Math3d.h" Starfield::Starfield(pp_int32 w, pp_int32 h) : FXAbstract(w, h), numStars(2000) { stars = new VectorFP[numStars]; for (pp_int32 i = 0; i < numStars; i++) { stars[i].x = (((rand()&255)<<8) - 32768)>>2; stars[i].y = (((rand()&255)<<8) - 32768)>>2; stars[i].z = (((rand()&255)<<8))>>2; } } Starfield::~Starfield() { delete[] stars; } /////////////////////////////////////////////// // BURN, BURN /////////////////////////////////////////////// void Starfield::render(pp_uint8* buffer) { memset(buffer, 0, width*height*3); pp_int32 centerx = width*65536/2; pp_int32 centery = height*65536/2; MatrixFP m; for (pp_int32 i = 0; i < numStars; i++) { VectorFP f = stars[i]; if (f.z > 0) { pp_int32 px = (fpdiv(f.x*200, f.z) + centerx)>>16; pp_int32 py = (fpdiv(f.y*200, f.z) + centery)>>16; pp_int32 c = 255-(f.z>>6); if (c < 0) c = 0; if (c > 255) c = 255; PPColor col(c,c,c); setPixel(px, py, col, buffer); } } //phi+=0.01f; } void Starfield::update(pp_uint32 syncFrac) { for (pp_int32 i = 0; i < numStars; i++) { stars[i].z-=syncFrac>>9; if (stars[i].z < 0) { stars[i].z = ((65535>>2) + 2048) + stars[i].z; } } } void Starfield::setPixel(pp_int32 x, pp_int32 y, const PPColor& color, pp_uint8* buffer) { if (x < 0 || x >= (signed)width-1 || y < 0 || y >= (signed)height-1) return; pp_int32 offset = y*width+x; buffer[offset*3] = (pp_uint8)color.r; buffer[offset*3+1] = (pp_uint8)color.g; buffer[offset*3+2] = (pp_uint8)color.b; /*buffer[(offset+1)*3] = color.r; buffer[(offset+1)*3+1] = color.g; buffer[(offset+1)*3+2] = color.b; buffer[(offset+width)*3] = color.r; buffer[(offset+width)*3+1] = color.g; buffer[(offset+width)*3+2] = color.b; buffer[(offset+width+1)*3] = color.r; buffer[(offset+width+1)*3+1] = color.g; buffer[(offset+width+1)*3+2] = color.b;*/ } MilkyTracker-1.02.00/src/fx/Starfield.h000066400000000000000000000024371324432207300175530ustar00rootroot00000000000000/* * fx/Starfield.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * Fire.h * MyFirstCarbonProject * * Created by Peter Barth on Wed Feb 20 2002. * */ #ifndef STARFIELD__H #define STARFIELD__H #include "BasicTypes.h" #include "FXAbstract.h" #include "Math3d.h" class Starfield : public FXAbstract { private: VectorFP* stars; const pp_int32 numStars; public: Starfield(pp_int32 w, pp_int32 h); virtual ~Starfield(); virtual void render(pp_uint8* buffer); virtual void update(pp_uint32 syncFrac); void setPixel(pp_int32 x, pp_int32 y, const PPColor& color, pp_uint8* buffer); }; #endif MilkyTracker-1.02.00/src/fx/TCBSpline.cpp000066400000000000000000000103711324432207300177500ustar00rootroot00000000000000/* * fx/TCBSpline.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "TCBSpline.h" TCBSpline::TCBSpline(int numKeys) { if (numKeys == 0) numKeys++; this->numKeys = numKeys; keys = new TKey[numKeys]; for (int i = 0; i < numKeys; i++) { keys[i].v.set(0.0f,0.0f,0.0f); keys[i].t = keys[i].c = keys[i].b = 0.0f; keys[i].ti = 0; } } TCBSpline::~TCBSpline() { delete[] keys; } void TCBSpline::setKey(int index, VectorFloat& v, int time, float tension, float continuity, float bias) { if (index < numKeys) { keys[index].v = v; keys[index].ti = time; keys[index].t = tension; keys[index].c = continuity; keys[index].b = bias; } } VectorFloat TCBSpline::getLastPos(int i) { VectorFloat lastPos; if (i>0) lastPos = keys[i-1].v; else lastPos = keys[numKeys-1].v; return lastPos; } VectorFloat TCBSpline::getNextPos(int i) { VectorFloat nextPos; if (i keys[numKeys-1].ti) return -1; if (startIndex >= endIndex) return -1; if (curTime >= keys[startIndex].ti && curTime < keys[startIndex+1].ti) return startIndex; if (startIndex + 1 == endIndex) return startIndex; int mid = (startIndex+endIndex) >> 1; if (curTime >= keys[startIndex].ti && curTime < keys[mid].ti) { return findKey(curTime, startIndex, mid); } else if (curTime >= keys[mid].ti && curTime <= keys[endIndex].ti) { return findKey(curTime, mid, endIndex); } else { return keys[endIndex].ti; } } VectorFloat TCBSpline::getPos(float curTime) { VectorFloat pos(0.0f,0.0f,0.0f); int i = findKey((int)curTime, 0, numKeys-1); if (i != -1) { /*for (int i = 0; i < numKeys-1; i++) { // okay "i" must be the current key if (curTime >= keys[i].ti && curTime < keys[i+1].ti) {*/ float deltai = (float)(keys[i+1].ti - keys[i].ti); float t = (float)(curTime - keys[i].ti); float v = t/deltai; VectorFloat curPos = keys[i].v; VectorFloat nextPos = getNextPos(i); // VectorFloat lastPos = getLastPos(i); // incoming tangent vector for the current point // VectorFloat Ti = calcTi(i); // outgoing tangent vector for the current point VectorFloat To = calcTo(i); // incoming tangent vector for the next point VectorFloat Ti1 = calcTi(i+1); // outgoing tangent vector for the next point // VectorFloat To1 = calcTo(i+1); VectorFloat Ai = curPos; VectorFloat Bi = deltai * To; VectorFloat Ci = (3.0f * (nextPos - curPos)) - (deltai * ((2.0f * To) + Ti1)); VectorFloat Di = (-2.0f * (nextPos - curPos)) + (deltai * (To + Ti1)); float v2 = v*v; float v3 = v2*v; pos = Ai + (v*Bi) + (v2*Ci) + (v3*Di); /* break; } }*/ } return pos; } MilkyTracker-1.02.00/src/fx/TCBSpline.h000066400000000000000000000027621324432207300174220ustar00rootroot00000000000000/* * fx/TCBSpline.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #ifndef TCBSPLINE__H #define TCBSPLINE__H #include "Math3d.h" class TCBSpline { public: struct TKey { int ti; VectorFloat v; float t,c,b; }; private: TKey* keys; int numKeys; VectorFloat getLastPos(int i); VectorFloat getNextPos(int i); VectorFloat calcTi(int i); VectorFloat calcTo(int i); int findKey(int curTime,int startIndex, int endIndex); public: TCBSpline(int numKeys); ~TCBSpline(); void setKey(int index, VectorFloat& v, int time, float tension = 0, float continuity = 0, float bias = 0); void setKey(int index, TKey& key) { if (index < numKeys) keys[index] = key; } TKey* getKey(int index) { if (index < numKeys) return &keys[index]; else return &keys[0];} VectorFloat getPos(float curTime); }; #endif MilkyTracker-1.02.00/src/fx/TCBSplineTest.cpp000066400000000000000000000074171324432207300206170ustar00rootroot00000000000000/* * fx/TCBSplineTest.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "BasicTypes.h" #include "TCBSplineTest.h" #include "TCBSpline.h" #include "Math3d.h" #include "Filter.h" #define RGB2SHORT(r,g,b) ((((r>>3))<<11)+(((g>>2))<<5)+((b>>3))) static void setPixel(float* buffer,int width, int height, int x,int y,float r,float g,float b) { if (y>=0&&x>=0&&y1.0f) r = 1.0f; g+=buffer[offset*3+1]; if (g>1.0f) g = 1.0f; b+=buffer[offset*3+2]; if (b>1.0f) b = 1.0f; buffer[offset*3] = r; buffer[offset*3+1] = g; buffer[offset*3+2] = b; } } static void setBlock(float* buffer,int width, int height, int x,int y,float r,float g,float b) { for (int i = y; i < y+4; i++) for (int j = x; j < x+4; j++) setPixel(buffer, width, height, j, i, r,g,b); } TCBSplineTest::TCBSplineTest(int width, int height) { this->width = width; this->height = height; buffer = new float[width*height*3]; } TCBSplineTest::~TCBSplineTest() { delete[] buffer; } static void drawSplines(TCBSpline* spline, int maxDots, int maxTime, float* buffer, int width, int height, float r, float g, float b) { for (int j = 0; j < maxDots; j++) { float curTime = (float)(j / (float)maxDots)*(float)maxTime; VectorFloat pos = spline->getPos(curTime); setBlock(buffer, width, height, (int)pos.x, (int)pos.y, r, g, b); } } #define MAX_KEYS 500 #define MAX_TIME 2000 static TCBSpline* spline = new TCBSpline(MAX_KEYS); void TCBSplineTest::render(unsigned short* vscreen, unsigned int pitch) { int i; memset(buffer,0, width*height*3*sizeof(float)); for (i = 0; i < MAX_KEYS; i++) { int x = rand()%width; int y = rand()%height; VectorFloat v((float)x, (float)y, 0.0f); spline->setKey(i, v, (int)(((1.0f/((float)MAX_KEYS-1.0f))*(float)i)*MAX_TIME)); } /*keys[0].v.set(159.0f-40.0f,119.0f-40.0f,0.0f); keys[0].ti = 0.0f*MAX_TIME; keys[0].t = 0.5f; keys[1].v.set(159.0f+40.0f,119.0f-40.0f,0.0f); keys[1].ti = 0.25f*MAX_TIME; keys[1].t = 0.5f; keys[2].v.set(159.0f+40.0f,119.0f+40.0f,0.0f); keys[2].ti = 0.5f*MAX_TIME; keys[2].t = 0.5f; keys[3].v.set(159.0f-40.0f,119.0f+40.0f,0.0f); keys[3].ti = 0.75f*MAX_TIME; keys[3].t = 0.5f; keys[4].v.set(159.0f-40.0f,119.0f-40.0f,0.0f); keys[4].ti = 1.0f*MAX_TIME; keys[4].t = 0.5f;*/ drawSplines(spline, 100000, MAX_TIME, buffer, width, height, (5.0f/255.0f)*1.0f, (4.0f/255.0f)*1.0f, (2.0f/255.0f)*1.0f); for (i = 0; i < MAX_KEYS; i++) { int x = rand()%width; int y = rand()%height; VectorFloat v((float)x, (float)y, 0.0f); spline->setKey(i, v, (int)(((1.0f/((float)MAX_KEYS-1.0f))*(float)i)*MAX_TIME)); } drawSplines(spline, 100000, MAX_TIME, buffer, width, height, (0.0f/255.0f)*1.0f, (1.0f/255.0f)*1.0f, (4.0f/255.0f)*1.0f); int offs = 0; for (i = 0; i < height; i++) for (int j = 0; j < width; j++) { vscreen[i*pitch+j] = RGB2SHORT((int)(buffer[offs]*127.0f),(int)(buffer[offs+1]*127.0f),(int)(buffer[offs+2]*127.0f)); offs+=3; } //Filter::applyRadial(vscreen, 320, 240, 320, 159, 119, 8192, 1); } void TCBSplineTest::update(float SyncFrac) { } MilkyTracker-1.02.00/src/fx/TCBSplineTest.h000066400000000000000000000020001324432207300202430ustar00rootroot00000000000000/* * fx/TCBSplineTest.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "FXInterface.h" class TCBSplineTest : public FXInterface { private: float* buffer; public: TCBSplineTest(int width, int height); ~TCBSplineTest(); void render(unsigned short* vscreen, unsigned int pitch); void update(float syncFrac); }; MilkyTracker-1.02.00/src/fx/Texture.cpp000066400000000000000000000170541324432207300176320ustar00rootroot00000000000000/* * fx/Texture.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "BasicTypes.h" #include "Math3d.h" #include "Texture.h" #include "TCBSpline.h" #define RGB2SHORT(r,g,b) ((((r>>3))<<11)+(((g>>2))<<5)+((b>>3))) #define MAX_KEYS 50 #define MAX_TIME 200 static void setPixel(int* buffer,int x,int y,int r,int g,int b) { int offset = (y&255)*256+(x&255); r+=buffer[offset*3]; if (r>65536) r = 65536; g+=buffer[offset*3+1]; if (g>65536) g = 65536; b+=buffer[offset*3+2]; if (b>65536) b = 65536; buffer[offset*3] = r; buffer[offset*3+1] = g; buffer[offset*3+2] = b; } static void setBlock(int* buffer,int x,int y,int blockSize, int r,int g,int b) { for (int i = y; i < y+blockSize; i++) for (int j = x; j < x+blockSize; j++) setPixel(buffer, j, i, r,g,b); } static void drawSplines(TCBSpline* spline, int maxDots, int maxTime, int* buffer, int blockSize, int r, int g, int b) { float rMaxdots = (1.0f / (float)maxDots) * maxTime; for (int j = 0; j < maxDots; j++) { float curTime = (float)j * rMaxdots; VectorFloat pos = spline->getPos(curTime); //int shade = pos.z*65536.0f; setBlock(buffer, (int)pos.x, (int)pos.y, blockSize, r, g, b); } } void Texture::createSplineTexture(unsigned char* tex, int numBlocks, int blockSize) { TCBSpline* spline = new TCBSpline(MAX_KEYS); int* buffer = new int[256*256*3]; memset(buffer, 0, 256*256*3*sizeof(int)); int i; for (i = 0; i < MAX_KEYS; i++) { int x = rand()%256; int y = rand()%256; int z = rand()%256; VectorFloat v((float)x, (float)y, (float)z/255.0f); spline->setKey(i, v, (int)(((1.0f/((float)MAX_KEYS-1.0f))*(float)i)*MAX_TIME)); } drawSplines(spline, numBlocks, MAX_TIME, buffer, blockSize, (5*65536/255)>>1, (4*65536/255)>>1, (65536*2/255)>>1); for (i = 0; i < MAX_KEYS; i++) { int x = rand()%256; int y = rand()%256; int z = rand()%256; VectorFloat v((float)x, (float)y, (float)z/255.0f); spline->setKey(i, v, (int)(((1.0f/((float)MAX_KEYS-1.0f))*(float)i)*MAX_TIME)); } drawSplines(spline, numBlocks, MAX_TIME, buffer, blockSize, (0*65536/255)>>1, (65536/255)>>1, (4*65536/255)>>1); for (i = 0; i < 256*256; i++) { tex[i*3] = (int)(buffer[i*3]*255)>>16; tex[i*3+1] = (int)(buffer[i*3+1]*255)>>16; tex[i*3+2] = (int)(buffer[i*3+2]*255)>>16; } delete[] buffer; delete spline; } void Texture::createFlareTexture(unsigned char* tex, int r,int g,int b, float pw /*= 4.0f*/, unsigned int size /*= 256*/) { int hx = size>>1; int hy = size>>1; float maxlen = (float)sqrt(pow(size*0.5,2)); float fac = 1.0f/maxlen; for (unsigned int y = 0; y < size; y++) for (unsigned int x = 0; x < size; x++) { int offset = (y*size+x)*3; int px = x - hx; int py = y - hy; float v = (float)(px*px+py*py); float len = (float)sqrt(v); if (len > maxlen) len = maxlen; v = (float)(sin((1.0f-(len*fac))*(M_PI/2.0f))); float fc = (float)pow(v,pw); //float fc = (float)pow(1.0f-(len*fac),pw); tex[offset] = (unsigned char)(r*fc); tex[offset+1] = (unsigned char)(g*fc); tex[offset+2] = (unsigned char)(b*fc); } } static int CalcLight(unsigned char* heightmap, int texmapsize, int x1,int y1,int x2,int y2,int depth, int smooth) { int l,ran; ran = (texmapsize<>depth; l = (((int)heightmap[y1*texmapsize+x1]+(int)heightmap[y2*texmapsize+x2]) >> 1) + (rand()%ran)-(ran>>1); if (l<1) l = 1; else if (l>255) l = 255; return l; } static void GenRandom(unsigned char* heightmap, int texmapsize, int x1,int y1,int x2,int y2,int depth, int smooth) { int xh,yh; int light; xh = (x1+x2) >> 1; yh = (y1+y2) >> 1; if (heightmap[y1*texmapsize+xh] == 0) heightmap[y1*texmapsize+xh] = CalcLight(heightmap, texmapsize,x1,y1,x2,y1,depth, smooth); if (heightmap[y2*texmapsize+xh] == 0) heightmap[y2*texmapsize+xh] = CalcLight(heightmap, texmapsize,x1,y2,x2,y2,depth, smooth); if (heightmap[yh*texmapsize+x1] == 0) heightmap[yh*texmapsize+x1] = CalcLight(heightmap, texmapsize,x1,y1,x1,y2,depth, smooth); if (heightmap[yh*texmapsize+x2] == 0) heightmap[yh*texmapsize+x2] = CalcLight(heightmap, texmapsize,x2,y1,x2,y2,depth, smooth); light = CalcLight(heightmap, texmapsize,x1,y1,x2,y2,depth, smooth) + CalcLight(heightmap, texmapsize,x1,y2,x2,y1,depth, smooth); if (light>511) light = 511; heightmap[yh*texmapsize+xh] = light >> 1; if ((1<>shifter,srcImage[i*3+1]>>shifter,srcImage[i*3+2]>>shifter); } void Texture::blur24(unsigned char* tex, unsigned int width, unsigned int height, unsigned int passes /*= 1*/) { unsigned char* dst = new unsigned char[width*height*3]; memcpy(dst, tex, width*height*3); for (unsigned int j = 0; j < passes; j++) { for (unsigned int y = 1; y < height-1; y++) for (unsigned int x = 1; x < width-1; x++) { int y1p = (y+1); int y1m = (y-1); int x1p = (x+1); int x1m = (x-1); for (int i = 0; i < 3; i++) { int c = (tex[(y*width+x)*3+i] + tex[(y1m*width+x)*3+i] + tex[(y1p*width+x)*3+i] + tex[(y*width+x1m)*3+i] + tex[(y*width+x1p)*3+i])/5; dst[(y*width+x)*3+i] = c; } } memcpy(tex, dst, width*height*3); } delete[] dst; } MilkyTracker-1.02.00/src/fx/Texture.h000066400000000000000000000027311324432207300172730ustar00rootroot00000000000000/* * fx/Texture.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #ifndef TEXTURE__H #define TEXTURE__H class Texture { public: static void createSplineTexture(unsigned char* tex, int numBlocks = 10000, int blockSize = 16); static void createFlareTexture(unsigned char* tex, int r,int g,int b, float pw = 4.0f, unsigned int size = 256); static void createPlasmaTexture(unsigned char* tex, unsigned int size = 256, int smooth = 3, int r = 255, int g = 255, int b = 255); static void convert24to16(unsigned short* dstImage, unsigned char* srcImage, int size = 256*256, unsigned int shifter = 0); static void blur24(unsigned char* tex, unsigned int width, unsigned int height, unsigned int passes = 1); }; #endif MilkyTracker-1.02.00/src/fx/TexturedGrid.cpp000066400000000000000000000254161324432207300206050ustar00rootroot00000000000000/* * fx/TexturedGrid.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "TexturedGrid.h" #include "Math3d.h" #include "Filter.h" #include "Texture.h" #define PRGB2SHORT(r,g,b) ((((r))<<11)+(((g))<<5)+((b))) #define RGB2SHORT(r,g,b) ((((r>>3))<<11)+(((g>>2))<<5)+((b>>3))) #define TEXTURESIZE 256 #define REDMASK (0x1F<<11) #define GREENMASK (0x3F<<5) #define BLUEMASK 0x1F TexturedGrid::TexturedGrid(int width, int height, int gridshift) { this->width = width; this->height = height; this->gridshift = gridshift; this->gridsize = 1 << gridshift; this->gridWidth = (width>>gridshift)+1; this->gridHeight = (height>>gridshift)+1; grid = new VectorFP[gridWidth*gridHeight]; this->texture = NULL; // we're not rendering anything until texture is set this->buffer = new unsigned short[width*height]; // for debugging, load texture int i; /*unsigned char *texture = new unsigned char[TEXTURESIZE*TEXTURESIZE*3]; //FILE* f = fopen("/demo/t2new.tga","rb"); //fseek(f,18,SEEK_SET); //fread(texture,TEXTURESIZE*TEXTURESIZE,3,f); //fclose(f); Texture::createSplineTexture(texture); this->texture = new unsigned short[TEXTURESIZE*TEXTURESIZE]; for (i = 0; i < TEXTURESIZE*TEXTURESIZE; i++) { this->texture[i] = RGB2SHORT(texture[i*3]>>0,texture[i*3+1]>>0,texture[i*3+2]>>0); } delete texture;*/ unsigned char* rgbTex = new unsigned char[256*256*3]; unsigned char* rgbTex2 = new unsigned char[256*256*3]; texture = new unsigned short[256*256]; Texture::createSplineTexture(rgbTex); /*Texture::createPlasmaTexture(rgbTex2, 256, 3, 255, 255, 255); for (i = 0; i < 256*256; i++) { int r = (rgbTex2[i*3]>>0) - (rgbTex[i*3]>>0) + 63*2; int g = (rgbTex2[i*3+1]>>0) - (rgbTex[i*3+1]>>0) + 31*2; int b = (rgbTex2[i*3+2]>>0) - (rgbTex[i*3+2]>>0) + 9*2; if (r < 0) r = 0; if (r > 255) r = 255; if (g < 0) g = 0; if (g > 255) g = 255; if (b < 0) b = 0; if (b > 255) b = 255; rgbTex[i*3] = r; rgbTex[i*3+1] = g; rgbTex[i*3+2] = b; }*/ Texture::convert24to16(texture, rgbTex, 256*256, 1); delete[] rgbTex; delete[] rgbTex2; for (i = 0; i < 1024; i++) sintab[i] = (int)(sin((float)i/512.0f*M_PI)*65536.0f); } TexturedGrid::~TexturedGrid() { if (grid) delete[] grid; if (buffer) delete[] buffer; if (texture) delete[] texture; } struct Blob { int x,y,z; int strength; }; static Blob blobs[] = {{128,128,0,65536/16},{100,100,0,65536/16},{100,100,0,65536/16}}; #define MAXCLAMP 65536 void TexturedGrid::update(float syncFrac) { int gridSizeX = gridWidth; int gridSizeY = gridHeight; int x,y; VectorFP* gridPt = grid; float phi = ::PPGetTickCount()*0.001f*0.5f;; blobs[0].x = (int)(sin(phi*4.0f)*8.0f*65536.0f); blobs[0].y = (int)(cos(phi*4.0f)*8.0f*65536.0f); blobs[0].z = (int)(sin(phi*4.0f)*8.0f*65536.0f); blobs[1].x = (int)(cos(-phi*2.0f)*8.0f*65536.0f); blobs[1].y = (int)(sin(phi*2.0f)*8.0f*65536.0f); blobs[1].z = (int)(cos(phi*2.0f)*8.0f*65536.0f); blobs[2].x = (int)(cos(-phi*3.0f)*12.0f*65536.0f); blobs[2].y = (int)(cos(phi*3.0f)*6.0f*65536.0f); blobs[2].z = (int)(sin(phi*3.0f)*10.0f*65536.0f); int numBlobs = sizeof(blobs)/sizeof(Blob); int pulse = (int)((sin(phi*16.0f)+1.0f)*32768.0f); int phiFP = (int)(phi*1024.0f); MatrixFP m; m.setRotZ(phi); for (y = 0; y < gridSizeY; y++) for ( x = 0; x < gridSizeX; x++) { VectorFP p; p.x = ((x-(gridSizeX>>1))<<16); p.y = ((y-(gridSizeY>>1))<<16); p.z = 0; p = m*p; int xOffset = /*0*/sintab[((p.x>>11)+phiFP)&1023]*32; int yOffset = /*0*/sintab[((p.y>>11)+phiFP)&1023]*32; //int xOffset = 0; //int yOffset = 0; gridPt->x = (((p.x>>1)-(gridSizeX<<15))<<4)+yOffset; gridPt->y = (((p.y>>1)-(gridSizeY<<15))<<4)+xOffset; gridPt->z = 256*65536; ////////////////////////////////////////////////////////////////////// // blob stuff ////////////////////////////////////////////////////////////////////// /*VectorFP p; p.x = ((x-(gridSizeX>>1))<<16); p.y = ((y-(gridSizeY>>1))<<16); p.z = 0.0f; int scale = 32768; for (int j = 0; j < numBlobs; j++) { int dx = fpmul((blobs[j].x-p.x),blobs[j].strength); int dy = fpmul((blobs[j].y-p.y),blobs[j].strength); int dz = fpmul((blobs[j].z-p.z),blobs[j].strength); int sd = fpmul(dx,dx)+fpmul(dy,dy)+fpmul(dz,dz); if (sd<(0.707f*0.707f*65536)) scale += (fpmul(sd,sd)-sd+16384)*4; } if (scale>=MAXCLAMP) scale = MAXCLAMP; scale = fpmul(scale,scale); scale = fpmul(scale,scale); gridPt->x = fpdiv(p.x,scale+32768)<<4; gridPt->y = fpdiv(p.y,scale+32768)<<4; gridPt->z = 256*65536;*/ ////////////////////////////////////////////////////////////////////// // airbag ////////////////////////////////////////////////////////////////////// /*int len = fpsqrt(fpmul(p.x-blobs[0].x,p.x-blobs[0].x)+fpmul(p.y-blobs[0].y,p.y-blobs[0].y)); if (len>16*65536) len = 16*65536; int scale = len>>4; scale = fpmul(scale,scale); scale = fpmul(scale,scale); scale = fpmul(scale,scale); scale = 65536-fpmul((65536-scale),pulse); gridPt->x = fpmul(p.x,(scale<<2)+165536); gridPt->y = fpmul(p.y,(scale<<2)+165536); gridPt->z = 256*65536;*/ ////////////////////////////////////////////////////////////////////// // scale waves ////////////////////////////////////////////////////////////////////// /*int len = fpsqrt(fpmul(p.x-blobs[0].x,p.x-blobs[0].x)+fpmul(p.y-blobs[0].y,p.y-blobs[0].y)+fpmul(p.z,p.z)); int scale = 65536-((sintab[((len>>10)+phiFP)&1023]+65536)>>1); scale = fpmul(scale,scale); //scale = fpmul(scale,scale); //scale = fpmul(scale,scale); //scale = 65536-fpmul((65536-scale),pulse); gridPt->x = fpmul(p.x,(scale<<2)+165536); gridPt->y = fpmul(p.y,(scale<<2)+165536); gridPt->z = 256*65536;*/ ////////////////////////////////////////////////////////////////////// // displacement waves ////////////////////////////////////////////////////////////////////// /*int cx = 0;//blobs[0].x; int cy = 0;//blobs[0].y; int dx = cx - p.x; int dy = cy - p.y; int len = fpsqrt(fpmul(dx,dx)+fpmul(dy,dy)); if (len) { dx = fpdiv(dx, len); dy = fpdiv(dy, len); } int scale = sintab[((len>>10)-(phiFP<<1))&1023]; //scale = fpmul(scale,scale); //scale = fpmul(scale,scale); //scale = fpmul(scale,scale); //scale = 65536-fpmul((65536-scale),pulse); gridPt->x = ((p.x+(phiFP<<4))<<3)+(fpmul(dx,scale<<5)); gridPt->y = (p.y<<3)+(fpmul(dy,scale<<5)); gridPt->z = 128*(scale+65536+8192);*/ gridPt++; } phi+=0.1f; } void TexturedGrid::render(unsigned short* vscreen, unsigned int pitch) { if (texture == NULL) return; int x,y; unsigned short* tex = texture; int GRIDSIZE = gridsize; int GRIDSHIFT = gridshift; int PITCH = pitch; int gridSizeX = gridWidth-1; int gridSizeY = gridHeight-1; for (y=0;yx; int sv1 = gridul->y; int si1 = gridul->z; int su2 = gridur->x; int sv2 = gridur->y; int si2 = gridur->z; int du1 = (gridll->x-gridul->x)>>GRIDSHIFT; int dv1 = (gridll->y-gridul->y)>>GRIDSHIFT; int di1 = (gridll->z-gridul->z)>>GRIDSHIFT; int du2 = (gridlr->x-gridur->x)>>GRIDSHIFT; int dv2 = (gridlr->y-gridur->y)>>GRIDSHIFT; int di2 = (gridlr->z-gridur->z)>>GRIDSHIFT; int y2,x2; for (y2=0;y2>GRIDSHIFT; int su = su1; int fv = (sv2-sv1)>>GRIDSHIFT; int sv = sv1; int fi = (si2-si1)>>GRIDSHIFT; int si = si1; for (x2=0;x2>8)&0xff00)+((su>>16)&0xff))); //unsigned int rgb = tex[ofs]; //int r = ((rgb>>11)*si)>>24; //int g = (((rgb>>5)&0x3f)*si)>>24; //int b = ((rgb&0x1f)*si)>>24; //*vscreenPtr = PRGB2Short(r,g,b); //if (si <= 256*65536) //{ unsigned int wRGB = tex[((((sv>>8)&0xff00)+((su>>16)&0xff)))]; unsigned int lTemp = (((wRGB&(REDMASK|BLUEMASK))<<11)|((wRGB & GREENMASK) >> 5))*(si>>19); *vscreenPtr = ((lTemp >> (11 + 5)) & (REDMASK | BLUEMASK))|(lTemp & GREENMASK); /*} else { int shade = (si-256*65536)>>16; unsigned int rgb16_1 = tex[((((sv>>8)&0xff00)+((su>>16)&0xff)))]; unsigned int rgb16_2 = RGB2SHORT(shade,shade,shade); unsigned int result = (rgb16_1&0xF800)+(rgb16_2&0xF800); if (result>0xF800) result = 0xF800; unsigned int t = (rgb16_1&0x7E0)+(rgb16_2&0x7E0); if (t>0x7E0) t = 0x7E0; result|=t; t = (rgb16_1&0x1F)+(rgb16_2&0x1F); if (t>0x1F) t = 0x1F; result|=t; *vscreenPtr = result; }*/ //*vscreenPtr = tex[((((sv>>8)&0xff00)+((su>>16)&0xff)))]; // enable for motion blur /*unsigned int mask=0x07e0f81f; int texel = tex[((((sv>>8)&0xff00)+((su>>16)&0xff)))]; int pixel = *vscreenPtr; texel = ((texel<<16) | texel)&mask; pixel = ((pixel<<16) | pixel)&mask; int mix =((((texel-pixel)*(10))>>5)+pixel)&mask; *vscreenPtr = (mix | (mix>>16))&0xffff;*/ su+=fu; sv+=fv; si+=fi; vscreenPtr++; } su1+=du1; su2+=du2; sv1+=dv1; sv2+=dv2; si1+=di1; si2+=di2; vscreenPtr+=(PITCH-GRIDSIZE); } } } /*double phi = GetTickCount()*0.01f; int scale = (sin(phi)+1.0f) * 65536.0f * 2.0f; Filter::glow(vscreen, width, height, pitch, glowBuffer1, glowBuffer2, 2, scale);*/ double phi = ::PPGetTickCount()*0.001f; //phi = 0.0f; int cx = (int)(sin(-phi)*(width*(1.0/3.0f))+(width*(1.0/2.0f))); int cy = (int)(cos(-phi)*(height*(1.0/3.0f))+(height*(1.0/2.0f))); //int radius = sin(phi)*2048 + 2048; int radius = 2048; Filter::applyRadial(vscreen, width, height, pitch, cx, cy, radius, 1); //Filter::applyBoxed(vscreen, buffer, width, height, pitch, 2); //Filter<160,120>::applyBoxed(vscreen, buffer, 4); //memcpy(vscreen, buffer, width*height*2); } MilkyTracker-1.02.00/src/fx/TexturedGrid.h000066400000000000000000000026071324432207300202470ustar00rootroot00000000000000/* * fx/TexturedGrid.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #ifndef TEXTUREDGRID__H #define TEXTUREDGRID__H #include "FXInterface.h" struct VectorFP; class TexturedGrid : public FXInterface { protected: int fov; int gridshift; int gridsize; // must be 1 << GRIDSHIFT VectorFP* grid; int gridWidth, gridHeight; unsigned short* texture; unsigned short* buffer; int sintab[1024]; public: TexturedGrid(int width, int height, int gridshift); virtual ~TexturedGrid(); void setTexture(unsigned short* texture) { this->texture = texture; } // from FXInterface virtual void render(unsigned short* vscreen, unsigned int pitch); virtual void update(float syncFrac); }; #endif MilkyTracker-1.02.00/src/fx/TexturedPlane.cpp000066400000000000000000000131701324432207300207510ustar00rootroot00000000000000/* * fx/TexturedPlane.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "BasicTypes.h" #include "TexturedPlane.h" #include "Texture.h" #include "Math3d.h" #include "Filter.h" #define AMBIENT_LIGHT 96*65536 TexturedPlane::TexturedPlane(int width, int height, int gridshift) : TexturedGrid(width, height, gridshift) { /*unsigned char* texture = new unsigned char[256*256*3]; Texture::createSplineTexture(texture); Texture::convert24to16(this->texture, texture, 256*256, 1); delete texture;*/ } void TexturedPlane::update(float syncFrac) { int gridSizeX = gridWidth; int gridSizeY = gridHeight; int x,y; VectorFP* gridPt = grid; MatrixFP m = rotMatrix; VectorFP d, d2, p = cop, light = this->light; int hx = width>>1; int hy = height>>1; int gridshift = this->gridshift; int FPP = 12; int textureshift = 6; int scalex = (65536*320/width)<0) { t = fpdiv(65536*50-p.y,d.y); iz = (p.z+fpmul(t,d.z)); ix = (p.x+fpmul(t,d.x)); iy = (p.y+fpmul(t,d.y)); intersection = true; //gridPt->x = (ix+65536)<y = (iz)<x = ((ix>>4)+65536)<y = ((iz>>4))<x = (-ix+65536)<y = (iz)<x = ((-ix>>4)+65536)<y = ((iz>>4))<x = -12345678; gridPt->y = -12345678;*/ /*if (d.y>0) { t = fpdiv(65536*64-p.y,d.y); if (t > 0 && t < 0x01000000) { iz = (p.z+fpmul(t,d.z)); ix = (p.x+fpmul(t,d.x)); iy = (p.y+fpmul(t,d.y)); if ((ix<=65536*64)&&(ix>=-65536*64)) { intersection = true; gridPt->x = ((ix>>6)+65536)<y = ((iz>>6))< 0 && t < 0x01000000) { iz = (p.z+fpmul(t,d.z)); ix = (p.x+fpmul(t,d.x)); iy = (p.y+fpmul(t,d.y)); if ((ix<=65536*64)&&(ix>=-65536*64)) { intersection = true; gridPt->x = (-(ix>>6)+65536)<y = ((iz>>6))<0)) { t = fpdiv(65536*64-p.x,d.x); if (t > 0 && t < 0x01000000) { iz = (p.z+fpmul(t,d.z)); ix = (p.x+fpmul(t,d.x)); iy = (p.y+fpmul(t,d.y)); if ((iy<=65536*65)&&(iy>=-65536*65)) { intersection = true; gridPt->x = ((iy>>6)+65536)<y = ((iz>>6))< 0 && t < 0x01000000) { iz = (p.z+fpmul(t,d.z)); ix = (p.x+fpmul(t,d.x)); iy = (p.y+fpmul(t,d.y)); //if ((iy<=65536)&&(iy>=-65536)) //{ intersection = true; gridPt->x = (-(iy>>6)+65536)<y = ((iz>>6))<x = (int)((fabs(phi)/M_PI)*128.0f*65536.0f); gridPt->x = fpmul(gridPt->x, s); gridPt->y = fpmul(gridPt->y, s);*/ if (intersection) { int h, diz = t>>2; if (diz<0) h = AMBIENT_LIGHT; else if (diz<(1<<(31-6))) h = (diz<<6)-200*65536; else h = AMBIENT_LIGHT; if (h>AMBIENT_LIGHT) h = AMBIENT_LIGHT; if (h<0) h = 0; gridPt->z = AMBIENT_LIGHT-h; //grid[y][x].z = fpmul((255*65536-h)>>1,l); int dx = abs(ix - light.x)>>8; int dy = abs(iy - light.y)>>8; int dz = abs(iz - light.z)>>8; if (dx <= 65536 && dy <= 65536 && dz <= 65536) { int sdist = (fpmul(dx,dx)+fpmul(dy,dy)+fpmul(dz,dz))<<6; if (sdist == 0) sdist=65536; int dist = fpdiv(65536,sdist); if (dist > 65536) dist = 65536; dist = fpmul(dist, dist) << 1; //if (dist < 4096) dist = 4096; //gridPt->z = fpmul(gridPt->z, dist); gridPt->z += dist*256; if (gridPt->z > 256*65536) gridPt->z = 256*65536; } } else gridPt->z = 0; //else // gridPt->z = fpmul(gridPt->z, /*4096*/0); gridPt++; } } MilkyTracker-1.02.00/src/fx/TexturedPlane.h000066400000000000000000000023431324432207300204160ustar00rootroot00000000000000/* * fx/TexturedPlane.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #ifndef TEXTUREDPLANE__H #define TEXTUREDPLANE__H #include "TexturedGrid.h" #include "Math3d.h" class TexturedPlane : public TexturedGrid { private: MatrixFP rotMatrix; VectorFP cop; VectorFP light; public: TexturedPlane(int width, int height, int gridshift); void setMatrix(MatrixFP& matrix) { rotMatrix = matrix; } void setCOP(VectorFP& cop) { this->cop = cop; } void setLight(VectorFP& light) { this->light = light; } virtual void update(float syncFrac); }; #endif MilkyTracker-1.02.00/src/fx/Twister.cpp000066400000000000000000000154011324432207300176250ustar00rootroot00000000000000/* * fx/Twister.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "BasicTypes.h" #include "Twister.h" #include "Math3d.h" #include "Texture.h" #define PRGB2SHORT(r,g,b) (((unsigned short)((r))<<11)+((unsigned short)((g))<<5)+(unsigned short)((b))) static float phi = 0.0f; static int heightFieldOffset = 0; Twister::Twister(int width, int height, int center) { int i; this->width = width; this->height = height; if (center == -1) this->center = height>>1; else this->center = center; unsigned char* rgbTex = new unsigned char[256*256*3]; unsigned char* rgbTex2 = new unsigned char[256*256*3]; texture = new unsigned short[256*256]; Texture::createSplineTexture(rgbTex); Texture::createPlasmaTexture(rgbTex2, 256, 5, 192, 140, 63); for (i = 0; i < 256*256; i++) { int r = (rgbTex2[i*3]>>0) - (rgbTex[i*3]*0) + 31*2; int g = (rgbTex2[i*3+1]>>0) - (rgbTex[i*3+1]*0) + 31*2; int b = (rgbTex2[i*3+2]>>0) - (rgbTex[i*3+2]*0) + 64*2; if (r < 0) r = 0; if (r > 255) r = 255; if (g < 0) g = 0; if (g > 255) g = 255; if (b < 0) b = 0; if (b > 255) b = 255; rgbTex[i*3] = r; rgbTex[i*3+1] = g; rgbTex[i*3+2] = b; } Texture::convert24to16(texture, rgbTex, 256*256, 1); for (i = 0; i < 1024; i++) { float phi = (i/512.0f)*(float)M_PI; sinTable[i] = (int)((float)sin(phi)*65536.0f); cosTable[i] = (int)((float)cos(phi)*65536.0f); } delete[] rgbTex; delete[] rgbTex2; zbuffer = new int[height]; } Twister::~Twister() { delete[] zbuffer; delete[] texture; } void Twister::update(float syncFrac) { phi+=(syncFrac*0.01f); heightFieldOffset+=(int)(65536.0f*syncFrac); } void Twister::render(unsigned short* vscreen, unsigned int pitch) { int XMAX = width; int YMAX = height; //unsigned int bgColor = RGB2SHORT(31*4,7*4,15*4); unsigned int bgColor = 0; unsigned int fill = (bgColor<<16) | bgColor; int twistStep = (int)((float)sin(phi*4.0f)*256.0f); for (int j = 0; j < YMAX; j++) { unsigned int* vPtr = (unsigned int*)(vscreen+j*pitch); for (int i = 0; i < XMAX>>1; i++) *vPtr++ = fill; } int beta = (int)((sin(phi)/M_PI)*512.0f*256.0f); //int beta = 0; int theta = beta>>6; int* zBuffer = zbuffer; int scale = (YMAX*65536)/200; int center = this->center; for (int scanline = 0; scanline < XMAX; scanline++) { //VectorFP sourcePoints[4] = {{-64*65536,0,64*65536},{64*65536,0,64*65536},{-64*65536,0,-64*65536},{64*65536,0,-64*65536}}; for (int j = 0; j < NUMPOINTS; j++) { sourcePoints[j].u = (j*(256/NUMPOINTS))*2; //int radius = 64+(heightmap[((scanline+(heightFieldOffset>>16))&255)*256+(sourcePoints[j].u&255)]>>2); //int radius = 64+(mySin((scanline<<11)+theta)>>11); int radius = 64; //sourcePoints[j].p.x = (int)(-sin(((float)j/(float)NUMPOINTS)*2*M_PI+beta)*radius*65536.0f); //sourcePoints[j].p.y = 0; //sourcePoints[j].p.z = (int)(-cos(((float)j/(float)NUMPOINTS)*2*M_PI+beta)*radius*65536.0f); sourcePoints[j].p.x = -mySin(((1024*256/NUMPOINTS)*j+beta*4))*radius+(sinTable[theta&1023]*0); sourcePoints[j].p.y = 0; sourcePoints[j].p.z = -myCos(((1024*256/NUMPOINTS)*j+beta*4))*radius; } theta+=4; beta+=-(mySin(theta*256)*twistStep)>>15; sourcePoints[NUMPOINTS].p = sourcePoints[0].p; sourcePoints[NUMPOINTS].u = 256*2; int i; for (i = 0; i < YMAX; i++) zBuffer[i] = -0x7fffffff; for (i = 0; i < NUMPOINTS; i++) { MyVertex *p1; MyVertex *p2; p1 = &sourcePoints[i]; p2 = &sourcePoints[i+1]; if (p2->p.x-p1->p.x>0) { int x1,x2,z1,z2,u1,u2; x1 = (fpmul(p1->p.x, scale)>>16)+center; x2 = (fpmul(p2->p.x, scale)>>16)+center; z1 = (p1->p.z>>14); z2 = (p2->p.z>>14); u1 = (p1->u); u2 = (p2->u); int stepu = 0,stepz = 0; if (x2!=x1) { stepu = (u2-u1)*65536/(x2-x1); stepz = (z2-z1)*65536/(x2-x1); } int su = u1*65536, sz = z1*65536; if (x1 < 0) { su+=-x1*stepu; sz+=-x1*stepz; x1 = 0; } if (x2 > YMAX) { x2 = YMAX; } unsigned short *texline = texture+((((heightFieldOffset>>16)+scanline)<<1)&255)*256; unsigned short *vLine = (unsigned short*)vscreen+x1*pitch+scanline; for (int px = x1; px < x2; px++) { if (sz>zBuffer[px]) { int INTENSITY = ((sz>>16)+(32)); if (INTENSITY<0) INTENSITY = 0; if (INTENSITY>256) INTENSITY = 256; INTENSITY = (INTENSITY*INTENSITY)>>7; int TEXEL = texline[((su>>16)&255)]; /*int r=TEXEL; r*=INTENSITY; r>>=8; r&=0xf800; int g=TEXEL&0x7e0; g*=INTENSITY; g>>=8; g&=0x7e0; int b=TEXEL&0x1f; b*=INTENSITY; b>>=8; *vLine = r+g+b;*/ int rgb16_1 = bgColor; int rgb16_2 = TEXEL; int b = (((rgb16_1&31)<<8)+INTENSITY*((rgb16_2&31)-(rgb16_1&31)))>>8; int g = ((((rgb16_1>>5)&63)<<8)+INTENSITY*(((rgb16_2>>5)&63)-((rgb16_1>>5)&63)))>>8; int r = (((rgb16_1>>11)<<8)+INTENSITY*((rgb16_2>>11)-(rgb16_1>>11)))>>8; if (r>31) r = 31; if (g>63) g = 63; if (b>31) b = 31; *vLine = PRGB2SHORT(r,g,b); //*vLine = RGB2SHORT((INTENSITY*255)>>8,(INTENSITY*255)>>8,(INTENSITY*255)>>8); //*vLine = TEXEL; //buffptr[scanline*320+px] = texture[((heightFieldOffset+scanline)&255)*256+((su>>16)&255)]; zBuffer[px] = sz; vLine+=pitch; } /*int INTENSITY = sz>>16; if (INTENSITY<0) INTENSITY = 0; if (INTENSITY>255) INTENSITY = 255; int TEXEL = texture[scanline*256+((su>>16)&255)]; //vir[vidink+x2] = tex[((((sv>>8)&0xff00)+((su>>16)&0xff)))]; int r=TEXEL; r*=INTENSITY; r>>=8; r&=0xf800; int g=TEXEL&0x7e0; g*=INTENSITY; g>>=8; g&=0x7e0; int b=TEXEL&0x1f; b*=INTENSITY; b>>=8; buffptr[scanline*320+px] = r+g+b;*/ su+=stepu; sz+=stepz; } } } } } MilkyTracker-1.02.00/src/fx/Twister.h000066400000000000000000000031451324432207300172740ustar00rootroot00000000000000/* * fx/Twister.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #ifndef TWISTER__H #define TWISTER__H #include "FXInterface.h" #include "Math3d.h" #define NUMPOINTS 4 class Twister : public FXInterface { private: int center; unsigned short* texture; int* zbuffer; struct MyVertex { VectorFP p; int u; }; MyVertex sourcePoints[NUMPOINTS+1]; MyVertex newPoints[NUMPOINTS+1]; int sinTable[1024]; int cosTable[1024]; int mySin(int phi) { int t = (phi&255); int s1 = sinTable[(phi>>8)&1023]; int s2 = sinTable[((phi>>8)+1)&1023]; return (s1*(255-t)+t*s2)>>8; } int myCos(int phi) { int t = (phi&255); int s1 = cosTable[(phi>>8)&1023]; int s2 = cosTable[((phi>>8)+1)&1023]; return (s1*(255-t)+t*s2)>>8; } public: Twister(int width, int height, int center = -1); ~Twister(); void render(unsigned short* vscreen, unsigned int pitch); void update(float syncFrac); }; #endif MilkyTracker-1.02.00/src/fx/TwisterFX.cpp000066400000000000000000000035121324432207300200630ustar00rootroot00000000000000/* * fx/TwisterFX.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * TwisterFX.cpp * MilkyTracker * * Created by Peter Barth on 26.11.05. * */ #include "TwisterFX.h" //#include "Twister.h" #include "ParticleBlobs.h" #include "ParticleScene.h" #include "TCBSplineTest.h" #include "TexturedGrid.h" #include "Twister.h" #include "PictureGlow.h" TwisterFX::TwisterFX(pp_int32 w, pp_int32 h) : FXAbstract(w,h) { //twister = NULL; //vscreen = NULL; //fx = new Twister(w, h); realw = ((w >> 3) + 1) << 3; realh = ((h >> 3) + 1) << 3; fx = new TexturedGrid(realw, realh, 3); vscreen = new pp_uint16[realw * realh]; } TwisterFX::~TwisterFX() { delete fx; delete[] vscreen; } void TwisterFX::update(pp_uint32 syncFrac) { fx->update(syncFrac*(1.0f/65536.0f)); } void TwisterFX::render(pp_uint8* buffer) { fx->render(vscreen, realw); pp_int32 w = width; pp_int32 h = height; pp_uint8* dst = buffer; pp_uint16* src = vscreen; for (pp_int32 y = 0; y < h; y++) { for (pp_int32 x = 0; x < w; x++) { *dst = (*src >> 11)<<3; *(dst+1) = (*src >> 5)<<2; *(dst+2) = (*src&0x1f)<<3; dst+=3; src++; } src+=realw - w; } } MilkyTracker-1.02.00/src/fx/TwisterFX.h000066400000000000000000000023211324432207300175250ustar00rootroot00000000000000/* * fx/TwisterFX.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * TwisterFX.h * MilkyTracker * * Created by Peter Barth on 26.11.05. * */ #ifndef TWISTERFX__H #define TWISTERFX__H #include "BasicTypes.h" #include "FXAbstract.h" class FXInterface; class TwisterFX : public FXAbstract { private: FXInterface* fx; pp_uint16* vscreen; pp_uint32 realw, realh; public: TwisterFX(pp_int32 w, pp_int32 h); ~TwisterFX(); virtual void update(pp_uint32 syncFrac); virtual void render(pp_uint8* buffer); }; #endif MilkyTracker-1.02.00/src/fx/fpmath.cpp000066400000000000000000000117541324432207300174520ustar00rootroot00000000000000/* * fx/fpmath.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "fpmath.h" #ifdef _MIPS_ extern "C" { // Use extern "c" fopp_int32r C++ file only void __asm(char*, ...); }; #pragma intrinsic(__asm) // this is actually optional pp_int32 fpmul(pp_int32 a, pp_int32 b) { __asm("mult $4,$5"); __asm("mflo $11"); __asm("mfhi $12"); __asm("srl $13,$11,16"); __asm("sll $14,$12,16"); __asm("or $2,$13,$14"); } pp_int32 fpdiv(pp_int32 n,pp_int32 d) { __asm("addu $10,$5,$0;" "and $15,$10,-2147483648;" "beq $15, 0, $34;" "negu $5,$5;" "$34:;" "addu $10,$5,$0;" "li $11,3;" "and $12,$10,1073741824;" "bne $12,0,$36;" "$35:;" "sll $10,$10,1;" "sll $11,$11,1;" "and $12,$10,1073741824;" "beq $12,0,$35;" "$36:;" "addu $6,$11,$0;"); __asm("mult $5,$6"); __asm("mflo $11"); __asm("mfhi $12"); __asm("srl $13,$11,16"); __asm("sll $14,$12,16"); __asm("or $8,$13,$14"); __asm("mult $4,$6"); __asm("mflo $11"); __asm("mfhi $12"); __asm("srl $13,$11,16"); __asm("sll $14,$12,16"); __asm("or $9,$13,$14"); __asm("addiu $24,$0,2"); __asm("sll $24,$24,16"); __asm("subu $10,$24,$8"); __asm("mult $10,$8"); __asm("mflo $11"); __asm("mfhi $12"); __asm("srl $13,$11,16"); __asm("sll $14,$12,16"); __asm("or $8,$13,$14"); __asm("mult $10,$9"); __asm("mflo $11"); __asm("mfhi $12"); __asm("srl $13,$11,16"); __asm("sll $14,$12,16"); __asm("or $9,$13,$14"); __asm("subu $10,$24,$8"); __asm("mult $10,$8"); __asm("mflo $11"); __asm("mfhi $12"); __asm("srl $13,$11,16"); __asm("sll $14,$12,16"); __asm("or $8,$13,$14"); __asm("mult $10,$9"); __asm("mflo $11"); __asm("mfhi $12"); __asm("srl $13,$11,16"); __asm("sll $14,$12,16"); __asm("or $9,$13,$14"); __asm("subu $10,$24,$8"); __asm("mult $10,$9"); __asm("mflo $11"); __asm("mfhi $12"); __asm("srl $13,$11,16"); __asm("sll $14,$12,16"); __asm("or $2,$13,$14"); __asm("beq $15, 0, $37;" "negu $2,$2;" "$37:"); } #else pp_int32 fpmul(pp_int32 a,pp_int32 b) { return ((pp_int32)(((pp_int64)(a)*(pp_int64)(b))>>16)); } pp_int32 fpdiv(pp_int32 n,pp_int32 d) { /*if (d==0) { return 0; }*/ pp_int32 g,t0,t1,t2; pp_int32 sign=d&0x80000000; if(sign) d=-d; //we need a good guess to start the Newton-Raphson interation //the logic that follows is from a suggestion by David Seal (dseal@acorn.co.uk) found at: //http://www.poppyfields.net/acorn/tech/division.shtml (toward the bottom) g=3; pp_int32 td=d; while((td&0x40000000)==0) { td<<=1; g<<=1; } //now we have our guess for the modified Newton-Raphson iteration //the following iterative convergence algorithm is from: //Cavanagh, J. 1984. Digital Computer Arithmetic. McGraw-Hill. Page 284. t1=fpmul(g,d); //t1=g*d t2=fpmul(g,n); //t2=g*n t0=0x20000-t1; //t0=2-t1 t1=fpmul(t0,t1); //t1=(2-(g*d))*(g*d) t2=fpmul(t0,t2); //t2=(2-(g*d))*(g*n) t0=0x20000-t1; //t0=2-((2-(g*d))*(g*d)) t1=fpmul(t0,t1); //t1=(2-((2-(g*d))*(g*d)))*(2-(g*d))*(g*d) t2=fpmul(t0,t2); //t2=(2-((2-(g*d))*(g*d)))*(2-(g*d))*(g*n) t0=0x20000-t1; //t0=2-((2-((2-(g*d))*(g*d)))*(2-(g*d))*(g*d)) t0=fpmul(t0,t2); //t0=(2-((2-((2-(g*d))*(g*d)))*(2-(g*d))*(g*d)))* // (2-((2-(g*d))*(g*d)))*(2-(g*d))*(g*n)*/ if(sign) t0=-t0; //divisionprofilecounter++; return t0; } #endif #define step(shift) \ if((0x40000000l >> shift) + root <= value) \ { \ value -= (0x40000000l >> shift) + root; \ root = (root >> 1) | (0x40000000l >> shift); \ } \ else \ { \ root = root >> 1; \ } pp_int32 fpsqrt(pp_int32 value) { pp_int32 root = 0; /*step( 0); step( 2); step( 4); step( 6); step( 8); step(10); step(12); step(14); step(16); step(18); step(20); step(22); step(24); step(26); step(28); step(30);*/ for (pp_int32 i = 0; i <= 30; i+=2) step(i); // round to the nearest integer, cuts max error in half if(root < value) { ++root; } root <<= 8; return root; } MilkyTracker-1.02.00/src/fx/fpmath.h000066400000000000000000000020601324432207300171050ustar00rootroot00000000000000/* * fx/fpmath.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #ifndef FPMATH_H #define FPMATH_H #include "BasicTypes.h" #define fpceil(x) ((x+65535)>>16) // 16.16 fixed point multiply pp_int32 fpmul(pp_int32 a, pp_int32 b); // 16.16 fixed point division pp_int32 fpdiv(pp_int32 n, pp_int32 d); // 16.16 fixed point squareroot pp_int32 fpsqrt(pp_int32 value); #endif MilkyTracker-1.02.00/src/midi/000077500000000000000000000000001324432207300157645ustar00rootroot00000000000000MilkyTracker-1.02.00/src/midi/CMakeLists.txt000066400000000000000000000045441324432207300205330ustar00rootroot00000000000000# # src/midi/CMakeLists.txt # # Copyright 2016 Dale Whinham # # This file is part of MilkyTracker. # # MilkyTracker 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. # # MilkyTracker 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 MilkyTracker. If not, see . # set(HEADERS MidiTools.h ) # Add platform-specific sources and include paths if(APPLE) set( SOURCES osx/MidiReceiver_CoreMIDI.mm ) list( APPEND HEADERS osx/MidiReceiver_CoreMIDI.h ) include_directories( ${PROJECT_SOURCE_DIR}/src/ppui/osinterface/posix ) elseif(WIN32) set( SOURCES win32/LongMsg.cpp win32/MidiInDevice.cpp win32/MidiReceiver_win32.cpp win32/ShortMsg.cpp ) list( APPEND HEADERS win32/LongMsg.h win32/MIDIInDevice.h win32/MIDIMsg.h win32/MidiReceiver_win32.h win32/ShortMsg.h win32/midi.h ) include_directories( ${PROJECT_SOURCE_DIR}/src/ppui/osinterface/win32 ) else() set( SOURCES posix/MidiReceiver_pthread.cpp ) list( APPEND HEADERS posix/MidiReceiver_pthread.h ) include_directories( ${PROJECT_SOURCE_DIR}/src/ppui/osinterface/posix ${RTMIDI_INCLUDE_DIR} ) endif() include_directories( ${PROJECT_SOURCE_DIR}/src/midi ${PROJECT_SOURCE_DIR}/src/milkyplay ${PROJECT_SOURCE_DIR}/src/ppui ${PROJECT_SOURCE_DIR}/src/ppui/osinterface ${PROJECT_SOURCE_DIR}/src/tracker ) add_library(midi ${SOURCES} ${HEADERS}) if(APPLE) # Enable ARC (automatic reference counting) for OS X build set_property( TARGET midi APPEND_STRING PROPERTY COMPILE_FLAGS "-fobjc-arc" ) target_link_libraries(midi ${CORE_MIDI_LIBRARY}) elseif(WIN32) target_link_libraries(midi winmm) else() target_link_libraries(midi ${RTMIDI_LIBRARIES}) endif() MilkyTracker-1.02.00/src/midi/MidiTools.h000066400000000000000000000003471324432207300200440ustar00rootroot00000000000000#ifndef __MIDITOOLS_H__ #define __MIDITOOLS_H__ static inline int vol126to255(int vol, int amplify) { int finalVol = (((vol <= 126 ? (vol*133300)>>16 : 255)) * amplify) / 100; return finalVol <= 255 ? finalVol : 255; } #endif MilkyTracker-1.02.00/src/midi/haiku/000077500000000000000000000000001324432207300170655ustar00rootroot00000000000000MilkyTracker-1.02.00/src/midi/haiku/MidiSetup.cpp000066400000000000000000000042411324432207300214750ustar00rootroot00000000000000/* * Copyright 2012 Julian Harnath * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "MidiSetup.h" #include "MilkyMidiConsumer.h" #include #include #include #include MilkyMidiConsumer* MidiSetup::sMilkyMidiConsumer = NULL; void MidiSetup::StartMidi(Tracker* tracker, sem_id eventLock) { assert(sMilkyMidiConsumer == NULL); sMilkyMidiConsumer = new MilkyMidiConsumer(tracker, eventLock); sMilkyMidiConsumer->Register(); } void MidiSetup::StopMidi() { sMilkyMidiConsumer->ConnectProducer(-1); sMilkyMidiConsumer->Unregister(); sMilkyMidiConsumer->Release(); // sMilkyMidiConsumer is automatically destructed when reference // count reaches zero } void MidiSetup::ConnectProducer(int32 id) { if (sMilkyMidiConsumer != NULL) sMilkyMidiConsumer->ConnectProducer(id); } void MidiSetup::ConnectProducer(BString name) { if (sMilkyMidiConsumer != NULL) { int32 id = 0; BMidiProducer* midiProducer = BMidiRoster::NextProducer(&id); while (midiProducer != NULL) { if (name == midiProducer->Name()) { midiProducer->Release(); break; } midiProducer->Release(); midiProducer = BMidiRoster::NextProducer(&id); } sMilkyMidiConsumer->ConnectProducer(id); } } void MidiSetup::SetRecordVelocity(bool record) { if (sMilkyMidiConsumer != NULL) sMilkyMidiConsumer->SetRecordVelocity(record); } void MidiSetup::SetVelocityAmplify(int32 amplification) { if (sMilkyMidiConsumer != NULL) sMilkyMidiConsumer->SetVelocityAmplify(amplification); } MilkyTracker-1.02.00/src/midi/haiku/MidiSetup.h000066400000000000000000000024361324432207300211460ustar00rootroot00000000000000/* * Copyright 2012 Julian Harnath * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #ifndef __HAIKU_MIDISETUP_H__ #define __HAIKU_MIDISETUP_H__ #include #include #include class MilkyMidiConsumer; class Tracker; class MidiSetup { public: static void StartMidi(Tracker* tracker, sem_id eventLock); static void StopMidi(); static void ConnectProducer(int32 id); static void ConnectProducer(BString name); static void SetRecordVelocity(bool record); static void SetVelocityAmplify(int32 amplification); private: static MilkyMidiConsumer* sMilkyMidiConsumer; }; #endif // __HAIKU_MIDISETUP_H__ MilkyTracker-1.02.00/src/midi/haiku/MilkyMidiConsumer.cpp000066400000000000000000000044561324432207300232060ustar00rootroot00000000000000/* * Copyright 2012 Julian Harnath * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "MilkyMidiConsumer.h" #include "MidiTools.h" #include "Tracker.h" #include #include #include MilkyMidiConsumer::MilkyMidiConsumer(Tracker* tracker, sem_id trackerLock) : BMidiLocalConsumer("Milky MIDI consumer"), fTracker(tracker), fTrackerLock(trackerLock), fRecordVelocity(false), fVelocityAmplify(100), fConnectedProducer(NULL) { } MilkyMidiConsumer::~MilkyMidiConsumer() { } void MilkyMidiConsumer::NoteOn(uchar channel, uchar note, uchar velocity, bigtime_t time) { snooze_until(time, B_SYSTEM_TIMEBASE); if (velocity == 0) { NoteOff(channel, note, velocity, time); return; } acquire_sem(fTrackerLock); fTracker->sendNoteDown(note, fRecordVelocity ? vol126to255(velocity - 1, fVelocityAmplify) : - 1); release_sem(fTrackerLock); } void MilkyMidiConsumer::NoteOff(uchar channel, uchar note, uchar velocity, bigtime_t time) { snooze_until(time, B_SYSTEM_TIMEBASE); acquire_sem(fTrackerLock); fTracker->sendNoteUp(note); release_sem(fTrackerLock); } void MilkyMidiConsumer::ConnectProducer(int32 id) { // Disconnect from previously connected producer, if there is one if (fConnectedProducer != NULL) { fConnectedProducer->Disconnect(this); fConnectedProducer->Release(); fConnectedProducer = NULL; } if (id == -1) return; BMidiProducer* producer = BMidiRoster::FindProducer(id); if (producer == NULL) { fprintf(stderr, "MilkyMidiConsumer::ConnectProducer - error: could " "not find producer id=%d\n", id); return; } producer->Connect(this); fConnectedProducer = producer; } MilkyTracker-1.02.00/src/midi/haiku/MilkyMidiConsumer.h000066400000000000000000000031511324432207300226420ustar00rootroot00000000000000/* * Copyright 2012 Julian Harnath * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #ifndef __HAIKU_MILKYMIDICONSUMER_H__ #define __HAIKU_MILKYMIDICONSUMER_H__ #include class BMidiProducer; class Tracker; class MilkyMidiConsumer : public BMidiLocalConsumer { public: MilkyMidiConsumer(Tracker* tracker, sem_id trackerLock); virtual ~MilkyMidiConsumer(); virtual void NoteOn(uchar channel, uchar note, uchar velocity, bigtime_t time); virtual void NoteOff(uchar channel, uchar note, uchar velocity, bigtime_t time); void ConnectProducer(int32 id); void SetRecordVelocity(bool recordVelocity) { fRecordVelocity = recordVelocity; } void SetVelocityAmplify(int amplification) { fVelocityAmplify = amplification; } private: sem_id fTrackerLock; Tracker* fTracker; bool fRecordVelocity; int fVelocityAmplify; BMidiProducer* fConnectedProducer; }; #endif // __HAIKU_MILKYMIDICONSUMER_H__ MilkyTracker-1.02.00/src/midi/osx/000077500000000000000000000000001324432207300165755ustar00rootroot00000000000000MilkyTracker-1.02.00/src/midi/osx/MidiReceiver_CoreMIDI.h000066400000000000000000000033361324432207300227350ustar00rootroot00000000000000/* * midi/osx/MidiReceiver_CoreMIDI.h * * Copyright 2015 Dale Whinham * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #ifndef __MIDIRECEIVER_COREMIDI_H__ #define __MIDIRECEIVER_COREMIDI_H__ #include #include "BasicTypes.h" class Tracker; class PPMutex; class MidiReceiver { private: struct MidiEndpoint { MIDIEndpointRef ref; PPString name; }; Tracker& tracker; PPMutex& criticalSection; bool recordVelocity; int velocityAmplify; MIDIClientRef clientRef; MIDIPortRef inputPortRef; ItemCount numSourceEndpoints; MidiEndpoint* sourceEndpoints; static void notifyProc(const MIDINotification* message, void* refCon); static void readProc(const MIDIPacketList* pktlist, void* readProcRefCon, void* srcConnRefCon); static PPString getMidiDeviceName(MIDIEndpointRef endpointRef); public: MidiReceiver(Tracker& tracker, PPMutex& criticalSection); ~MidiReceiver(); bool init(); bool close(); void setRecordVelocity(bool recVelocity) { recordVelocity = recVelocity; } void setVelocityAmplify(int amplify) { velocityAmplify = amplify; } }; #endifMilkyTracker-1.02.00/src/midi/osx/MidiReceiver_CoreMIDI.mm000066400000000000000000000124671324432207300231240ustar00rootroot00000000000000/* * midi/osx/MidiReceiver_CoreMIDI.mm * * Copyright 2015 Dale Whinham * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include #include "MidiReceiver_CoreMIDI.h" #include "PPMutex.h" #include "Tracker.h" #include "MidiTools.h" // Error handling macro #define CORE_MIDI_CHECK(RES, MSG) \ do \ { \ if (RES != noErr) \ { \ NSLog(@"Core MIDI: %s (Error code: %d)", MSG, RES); \ return false; \ } \ } while (0); \ MidiReceiver::MidiReceiver(Tracker& tracker, PPMutex& criticalSection) : tracker(tracker), criticalSection(criticalSection), recordVelocity(true), velocityAmplify(100), clientRef(0), inputPortRef(0), numSourceEndpoints(0), sourceEndpoints(NULL) { } MidiReceiver::~MidiReceiver() { } // Handler for notifications of changes to the system void MidiReceiver::notifyProc(const MIDINotification* message, void* refCon) { MidiReceiver& receiver = *(MidiReceiver*) refCon; NSUserNotification* notification = [[NSUserNotification alloc] init]; switch (message->messageID) { case kMIDIMsgObjectAdded: case kMIDIMsgObjectRemoved: { ItemCount numSourceEndpoints = MIDIGetNumberOfSources(); notification.title = @"Changed number of MIDI inputs"; notification.informativeText = [NSString stringWithFormat:@"Now %@ available.", numSourceEndpoints > 1 ? [NSString stringWithFormat:@"%lu inputs are", numSourceEndpoints] : numSourceEndpoints == 1 ? @"one input is" : @"no inputs are"]; // Re-init the midi receiver receiver.close(); receiver.init(); break; } } // Send pop-up message to notification centre [[NSUserNotificationCenter defaultUserNotificationCenter] deliverNotification:notification]; } // Handler for MIDI packet reception void MidiReceiver::readProc(const MIDIPacketList* pktlist, void* readProcRefCon, void* srcConnRefCon) { MidiReceiver& receiver = *(MidiReceiver*) readProcRefCon; Tracker& tracker = receiver.tracker; PPMutex& mutex = receiver.criticalSection; for (int i = 0; i < pktlist->numPackets; i++) { MIDIPacket packet = pktlist->packet[i]; Byte status = packet.data[0]; Byte command = status >> 4; if (command == 0x09 || command == 0x08) { Byte note = packet.data[1] & 0x7F; Byte velocity = packet.data[2] & 0x7F; mutex.lock(); if (command == 0x09 && velocity) tracker.sendNoteDown(note, receiver.recordVelocity ? vol126to255(velocity, receiver.velocityAmplify) : -1); else tracker.sendNoteUp(note); mutex.unlock(); } } } PPString MidiReceiver::getMidiDeviceName(MIDIEndpointRef endpointRef) { CFStringRef nameStringRef = NULL; MIDIObjectGetStringProperty(endpointRef, kMIDIPropertyName, &nameStringRef); CFIndex strLen = CFStringGetLength(nameStringRef); CFIndex bufSize = CFStringGetMaximumSizeForEncoding(strLen, kCFStringEncodingUTF8); char strBuf[bufSize]; CFStringGetCString(nameStringRef, strBuf, bufSize, kCFStringEncodingUTF8); CFRelease(nameStringRef); return PPString(strBuf); } bool MidiReceiver::init() { // Create a client CORE_MIDI_CHECK(MIDIClientCreate(CFSTR("MilkyTracker"), notifyProc, this, &clientRef), "Failed to create MIDI client!"); // Create port CORE_MIDI_CHECK(MIDIInputPortCreate(clientRef, CFSTR("Input port"), readProc, this, &inputPortRef), "Failed to create input port!"); // Look for sources numSourceEndpoints = MIDIGetNumberOfSources(); if (!numSourceEndpoints) { NSLog(@"Core MIDI: Error while trying to get sources!"); return false; } if (sourceEndpoints) { delete[] sourceEndpoints; sourceEndpoints = NULL; } sourceEndpoints = new MidiEndpoint[numSourceEndpoints]; NSLog(@"Core MIDI: Detected %lu source(s).", numSourceEndpoints); for (ItemCount i = 0; i < numSourceEndpoints; i++) { MIDIEndpointRef endpointRef = MIDIGetSource(i); if (!endpointRef) { NSLog(@"Core MIDI: Error while trying to get source ID %lu!", i); return false; } sourceEndpoints[i].ref = MIDIEndpointRef(endpointRef); sourceEndpoints[i].name = getMidiDeviceName(endpointRef); NSLog(@"Core MIDI: Endpoint ID: %d, name: %s", endpointRef, sourceEndpoints[i].name.getStrBuffer()); // Attach endpoint to our input port CORE_MIDI_CHECK(MIDIPortConnectSource(inputPortRef, endpointRef, NULL), "Error while attaching endpoint to input port!"); } return true; } bool MidiReceiver::close() { if (sourceEndpoints) { delete[] sourceEndpoints; sourceEndpoints = NULL; } // Release port if (inputPortRef) CORE_MIDI_CHECK(MIDIPortDispose(inputPortRef), "Failed to dispose of MIDI port!"); // Release client if (clientRef) CORE_MIDI_CHECK(MIDIClientDispose(clientRef), "Failed to dispose of MIDI client!"); return true; } MilkyTracker-1.02.00/src/midi/posix/000077500000000000000000000000001324432207300171265ustar00rootroot00000000000000MilkyTracker-1.02.00/src/midi/posix/MidiReceiver_pthread.cpp000066400000000000000000000057621324432207300237220ustar00rootroot00000000000000/* * midi/posix/MidiReceiver_pthread.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * MidiReceiver.cpp * MilkyTracker * * Created by Peter Barth on 08.04.06. * */ #include "MidiReceiver_pthread.h" #include "Tracker.h" #include "PPMutex.h" #include "RtMidi.h" #include "PPSystem.h" #include #include "MidiTools.h" MidiReceiver::MidiReceiver(MidiEventHandler& midiEventHandler) : midiEventHandler(midiEventHandler), midiin(NULL), recordVelocity(false), velocityAmplify(100) { } MidiReceiver::~MidiReceiver() { if (midiin) delete midiin; } bool MidiReceiver::startRecording(unsigned int deviceID) { if (midiin) { delete midiin; midiin = NULL; } try { midiin = new RtMidiIn(); midiin->openPort(deviceID); } catch (RtMidiError &error) { error.printMessage(); goto cleanup; } // Set our callback function. This should be done immediately after // opening the port to avoid having incoming messages written to the // queue instead of sent to the callback function. midiin->setCallback(&receiverCallback, this); // ignore sysex, timing, or active sensing messages. midiin->ignoreTypes(true, true, true); return true; cleanup: delete midiin; midiin = NULL; return false; } void MidiReceiver::stopRecording() { delete midiin; midiin = NULL; } void MidiReceiver::processMessage(double deltatime, std::vector* message, int offset) { int command = static_cast(message->at(offset)); if (command >= 128 && command <= 143) { int note = static_cast(message->at(offset+1)); // One octave less note -= 12; if (note < 1) note = 1; midiEventHandler.keyUp(note); } else if (command >= 144 && command <= 159) { int note = static_cast(message->at(offset+1)); // One octave less note -= 12; if (note < 1) note = 1; int velocity = static_cast(message->at(offset+2)); if (velocity == 0) { midiEventHandler.keyUp(note); } else { midiEventHandler.keyDown(note, recordVelocity ? vol126to255(velocity-1, velocityAmplify) : 0xff); } } } void MidiReceiver::receiverCallback(double deltatime, std::vector* message, void* userData) { MidiReceiver* midiReceiver = reinterpret_cast(userData); if (message->size() == 3) { midiReceiver->processMessage(deltatime, message, 0); } } MilkyTracker-1.02.00/src/midi/posix/MidiReceiver_pthread.h000066400000000000000000000033541324432207300233620ustar00rootroot00000000000000/* * midi/posix/MidiReceiver_pthread.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * MidiReceiver.h * MilkyTracker * * Created by Peter Barth on 08.04.06. * */ #ifndef __MIDIRECEIVER_H__ #define __MIDIRECEIVER_H__ #include class RtMidiIn; class MidiReceiver { public: class MidiEventHandler { public: virtual void keyDown(int note, int volume) = 0; virtual void keyUp(int note) = 0; }; private: MidiEventHandler& midiEventHandler; RtMidiIn* midiin; bool recordVelocity; int velocityAmplify; std::vector message; static void receiverCallback(double deltatime, std::vector* message, void* userData); void processMessage(double deltatime, std::vector* message, int offset); public: MidiReceiver(MidiEventHandler& midiEventHandler); ~MidiReceiver(); void setRecordVelocity(bool recVelocity) { recordVelocity = recVelocity; } void setVelocityAmplify(int amplify) { velocityAmplify = amplify; } bool startRecording(unsigned int deviceID); void stopRecording(); }; #endif MilkyTracker-1.02.00/src/midi/win32/000077500000000000000000000000001324432207300167265ustar00rootroot00000000000000MilkyTracker-1.02.00/src/midi/win32/LongMsg.cpp000066400000000000000000000047451324432207300210120ustar00rootroot00000000000000/* CLongMsg.cpp Implementation for the CLongMsg class. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Contact: Leslie Sanford (jabberdabber@hotmail.com) Last modified: 12/14/2002 */ //--------------------------------------------------------------------- // Dependencies //--------------------------------------------------------------------- #include "LongMsg.h" // Using declaration using midi::CLongMsg; //--------------------------------------------------------------------- // CLongMsg implementation //--------------------------------------------------------------------- // Default constructor CLongMsg::CLongMsg() : m_Msg(0), m_Length(0) {} // Constructor CLongMsg::CLongMsg(const char *Msg, DWORD Length) : m_Msg(0), m_Length(0) { SetMsg(Msg, Length); } // Constructor CLongMsg::CLongMsg(const CLongMsg &Msg) : CMIDIMsg(Msg) { m_Msg = 0; m_Length = 0; *this = Msg; } // Destructor CLongMsg::~CLongMsg() { // Release resources for this object if they exist if(m_Msg != 0) { delete [] m_Msg; } } // Assignment CLongMsg &CLongMsg::operator = (const CLongMsg &Msg) { // Test for self assignment if(this != &Msg) { SetMsg(Msg.m_Msg, Msg.m_Length); } return *this; } // Sets message void CLongMsg::SetMsg(const char *Msg, DWORD Length) { // Release old message if it exists if(m_Msg != 0) { delete [] m_Msg; } // // Allocate and initialize new message // m_Msg = new char[Length]; m_Length = Length; for(DWORD i = 0; i < m_Length; i++) { m_Msg[i] = Msg[i]; } } // Subscripting char &CLongMsg::operator [] (int i) { // Bounds checking if((signed)m_Length == 0 || i < 0 || i >= (signed)m_Length) { throw CLongMsgIndexOutOfBounds(); } return m_Msg[i]; } MilkyTracker-1.02.00/src/midi/win32/LongMsg.h000066400000000000000000000052371324432207300204540ustar00rootroot00000000000000#ifndef LONG_MSG_H #define LONG_MSG_H /* LongMsg.h CLongMsg class declaration. This class represents a system exclusive MIDI message. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Contact: Leslie Sanford (jabberdabber@hotmail.com) Last modified: 12/14/2002 */ //--------------------------------------------------------------------- // Dependencies //--------------------------------------------------------------------- #include "MIDIMsg.h" // For CMIDIMsg base class #include // For std::exception namespace midi { //----------------------------------------------------------------- // CLongMsgIndexOutOfBounds class // // An exception class. Thrown when an index to a CLongMsg object is // out of bounds. //----------------------------------------------------------------- class CLongMsgIndexOutOfBounds : public std::exception { public: const char *what() const throw() { return "Index to CLongMsg object is out of bounds."; } }; //----------------------------------------------------------------- // CLongMsg class // // This class represents system exclusive messages. //----------------------------------------------------------------- class CLongMsg : public CMIDIMsg { public: // Constructors/Destructor CLongMsg(); CLongMsg(const char *Msg, DWORD Length); CLongMsg(const CLongMsg &Msg); virtual ~CLongMsg(); // Assignment CLongMsg &operator = (const CLongMsg &Msg); // Accessors/Mutators DWORD GetLength() const { return m_Length; } const char *GetMsg() const { return m_Msg;} void SetMsg(const char *Msg, DWORD Length); protected: // Subscript access. This is for derived classes to use in order // to access the individual bytes within a CLongMsg object. char &operator [] (int i); private: char *m_Msg; DWORD m_Length; }; } #endif MilkyTracker-1.02.00/src/midi/win32/MIDIInDevice.cpp000066400000000000000000000330301324432207300215620ustar00rootroot00000000000000/******************************************************************************* * MIDIInDevice.cpp - Implementation for CMIDIInDevice and related * classes. * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact: jabberdabber@hotmail.com * * Last modified: 09/02/2003 ******************************************************************************/ //-------------------------------------------------------------------- // Dependencies //-------------------------------------------------------------------- #include "MIDIInDevice.h" #include "midi.h" //-------------------------------------------------------------------- // Using declarations //-------------------------------------------------------------------- using midi::CMIDIInDevice; using midi::CMIDIReceiver; using midi::CMIDIInException; //-------------------------------------------------------------------- // CMIDIInHeader implementation //-------------------------------------------------------------------- // Constructor CMIDIInDevice::CMIDIInHeader::CMIDIInHeader(HMIDIIN DevHandle, LPSTR Buffer, DWORD BufferLength) : m_DevHandle(DevHandle) { // Initialize header m_MIDIHdr.lpData = Buffer; m_MIDIHdr.dwBufferLength = BufferLength; m_MIDIHdr.dwFlags = 0; // Prepare header MMRESULT Result = ::midiInPrepareHeader(DevHandle, &m_MIDIHdr, sizeof m_MIDIHdr); // If an error occurred, throw exception if(Result != MMSYSERR_NOERROR) { throw CMIDIInException(Result); } } // Destructor CMIDIInDevice::CMIDIInHeader::~CMIDIInHeader() { ::midiInUnprepareHeader(m_DevHandle, &m_MIDIHdr, sizeof m_MIDIHdr); } // Add system exclusive buffer to queue void CMIDIInDevice::CMIDIInHeader::AddSysExBuffer() { MMRESULT Result = ::midiInAddBuffer(m_DevHandle, &m_MIDIHdr, sizeof m_MIDIHdr); // If an error occurred, throw exception if(Result != MMSYSERR_NOERROR) { throw CMIDIInException(Result); } } //-------------------------------------------------------------------- // CHeaderQueue implementation //-------------------------------------------------------------------- // Constructor CMIDIInDevice::CHeaderQueue::CHeaderQueue() { ::InitializeCriticalSection(&m_CriticalSection); } // Destructor CMIDIInDevice::CHeaderQueue::~CHeaderQueue() { RemoveAll(); ::DeleteCriticalSection(&m_CriticalSection); } // Add header to queue void CMIDIInDevice::CHeaderQueue::AddHeader( CMIDIInDevice::CMIDIInHeader *Header) { ::EnterCriticalSection(&m_CriticalSection); m_HdrQueue.push(Header); ::LeaveCriticalSection(&m_CriticalSection); } // Remove header from queue void CMIDIInDevice::CHeaderQueue::RemoveHeader() { ::EnterCriticalSection(&m_CriticalSection); if(!m_HdrQueue.empty()) { delete m_HdrQueue.front(); m_HdrQueue.pop(); } ::LeaveCriticalSection(&m_CriticalSection); } // Empty header queue void CMIDIInDevice::CHeaderQueue::RemoveAll() { ::EnterCriticalSection(&m_CriticalSection); while(!m_HdrQueue.empty()) { delete m_HdrQueue.front(); m_HdrQueue.pop(); } ::LeaveCriticalSection(&m_CriticalSection); } // Determines if the header queue is empty bool CMIDIInDevice::CHeaderQueue::IsEmpty() { bool Result; ::EnterCriticalSection(&m_CriticalSection); Result = m_HdrQueue.empty(); ::LeaveCriticalSection(&m_CriticalSection); return Result; } //-------------------------------------------------------------------- // CMIDIInDevice implementation //-------------------------------------------------------------------- // Constructs CMIDIInDevice object in an closed state CMIDIInDevice::CMIDIInDevice() : m_hThread(NULL), m_threadID(0), m_Receiver(0), m_State(CLOSED) { // If we are unable to create signalling event, throw exception if(!CreateEvent()) { throw CMIDIInEventFailure(); } } // Constructs CMIDIInDevice object in an closed state and initializes the // MIDI receiver CMIDIInDevice::CMIDIInDevice(CMIDIReceiver &Receiver) : m_hThread(NULL), m_threadID(0), m_Receiver(&Receiver), m_State(CLOSED) { // If we are unable to create signalling event, throw exception if(!CreateEvent()) { throw CMIDIInEventFailure(); } } // Constructs CMIDIInDevice object in an opened state CMIDIInDevice::CMIDIInDevice(UINT DeviceId, CMIDIReceiver &Receiver) : m_hThread(NULL), m_threadID(0), m_Receiver(&Receiver), m_State(CLOSED) { // Open device Open(DeviceId); // If we are unable to create signalling event, throw exception if(!CreateEvent()) { Close(); throw CMIDIInEventFailure(); } } // Destruction CMIDIInDevice::~CMIDIInDevice() { // Close device Close(); // Close handle to signalling event ::CloseHandle(m_Event); } // Opens the MIDI input device void CMIDIInDevice::Open(UINT DeviceId) { // Makes sure the previous device, if any, is closed before // opening another one Close(); // Open MIDI input device MMRESULT Result = ::midiInOpen(&m_DevHandle, DeviceId, reinterpret_cast(MidiInProc), reinterpret_cast(this), CALLBACK_FUNCTION); // If we are able to open the device, change state if(Result == MMSYSERR_NOERROR) { m_State = OPENED; } // Else opening failed, throw exception else { throw CMIDIInException(Result); } } // Closes the MIDI input device void CMIDIInDevice::Close() { // If the device is recording, stop recording before closing the // device if(m_State == RECORDING) { StopRecording(); } // If the device is opened... if(m_State == OPENED) { // Close the device MMRESULT Result = ::midiInClose(m_DevHandle); // If a failure occurred, throw exception if(Result != MMSYSERR_NOERROR) { throw CMIDIInException(Result); } // Change state m_State = CLOSED; } } // Adds a buffer for receiving system exclusive messages void CMIDIInDevice::AddSysExBuffer(LPSTR Buffer, DWORD BufferLength) { CMIDIInHeader *Header = NULL; try { // Create new header Header = new CMIDIInHeader(m_DevHandle, Buffer, BufferLength); } // If memory allocation failed, throw exception catch(const std::bad_alloc &) { throw CMIDIInMemFailure(); } // If preparation for the header failed, rethrow exception catch(const CMIDIInDevice &) { throw; } try { // Add header to queue Header->AddSysExBuffer(); m_HdrQueue.AddHeader(Header); } // If we are unable to add the buffer to the queue, delete header // and throw exception catch(const CMIDIInDevice &) { delete Header; throw; } } // Starts the recording process void CMIDIInDevice::StartRecording(ThreadPriority RecordingThreadPriority/* = MIDI_THREAD_PRIORITY_NORMAL*/) { static const int WinThreadPriorities[5] = { THREAD_PRIORITY_LOWEST, THREAD_PRIORITY_BELOW_NORMAL, THREAD_PRIORITY_NORMAL, THREAD_PRIORITY_ABOVE_NORMAL, THREAD_PRIORITY_HIGHEST }; // Only begin recording if the MIDI input device has been opened if(m_State == OPENED) { // Change state m_State = RECORDING; //m_Thread = ::AfxBeginThread((AFX_THREADPROC)HeaderProc, this); if (!m_hThread) { m_hThread = CreateThread(NULL, 0, &HeaderProc, (void*)this, 0, &m_threadID); if (RecordingThreadPriority >= 0 && RecordingThreadPriority < (signed)sizeof(WinThreadPriorities) / (signed)sizeof(int)) SetThreadPriority(m_hThread, WinThreadPriorities[RecordingThreadPriority]); } // Start recording MMRESULT Result = ::midiInStart(m_DevHandle); // If recording attempt failed... if(Result != MMSYSERR_NOERROR) { // Revert back to opened state m_State = OPENED; // Signal the worker thread to finish ::SetEvent(m_Event); ::WaitForSingleObject(m_hThread, INFINITE); // Throw exception throw CMIDIInException(Result); } } } // Stops the recording process void CMIDIInDevice::StopRecording() { // If the device is in fact recording... if(m_State == RECORDING) { // Change state m_State = OPENED; // Signal the worker thread to finish ::SetEvent(m_Event); ::WaitForSingleObject(m_hThread, INFINITE); // Reset the MIDI input device ::midiInReset(m_DevHandle); // Empty header queue m_HdrQueue.RemoveAll(); } } // Registers the MIDI receiver. Returns the previous receiver. CMIDIReceiver *CMIDIInDevice::SetReceiver(CMIDIReceiver &Receiver) { CMIDIReceiver *PrevReceiver = m_Receiver; m_Receiver = &Receiver; return PrevReceiver; } // Determines if the MIDI input device is opened bool CMIDIInDevice::IsOpen() const { return ((m_State == OPENED) || (m_State == RECORDING)); } // Determines if the MIDI input device is recording bool CMIDIInDevice::IsRecording() const { return (m_State == RECORDING); } // Gets Id for this device UINT CMIDIInDevice::GetDevID() const { UINT DeviceID; MMRESULT Result = ::midiInGetID(m_DevHandle, &DeviceID); if(Result != MMSYSERR_NOERROR) { throw CMIDIInException(Result); } return DeviceID; } // Gets the capabilities of a particular MIDI input device void CMIDIInDevice::GetDevCaps(UINT DeviceId, MIDIINCAPS &Caps) { MMRESULT Result = ::midiInGetDevCaps(DeviceId, &Caps, sizeof Caps); // If we are not able to retrieve device capabilities, throw // exception if(Result != MMSYSERR_NOERROR) { throw CMIDIInException(Result); } } // Creates event for signalling header thread bool CMIDIInDevice::CreateEvent() { bool Result = true; m_Event = ::CreateEvent(NULL, FALSE, FALSE, NULL); // If event creation failed, record failure if(m_Event == NULL) { Result = false; } return Result; } // Called by Windows when a MIDI input event occurs void CALLBACK CMIDIInDevice::MidiInProc(HMIDIIN MidiIn, UINT Msg, DWORD_PTR Instance, DWORD_PTR Param1, DWORD_PTR Param2) { CMIDIInDevice *Device; Device = reinterpret_cast(Instance); if(Device->m_Receiver != 0) { switch(Msg) { case MIM_DATA: // Short message received Device->m_Receiver->ReceiveMsg(Param1, Param2); break; case MIM_ERROR: // Invalid short message received Device->m_Receiver->OnError(Param1, Param2); break; case MIM_LONGDATA: // System exclusive message received if(Device->m_State == RECORDING) { // Retrieve data, send it to receiver, and notify header // thread that we are done with the system exclusive // message MIDIHDR *MidiHdr = reinterpret_cast(Param1); Device->m_Receiver->ReceiveMsg(MidiHdr->lpData, MidiHdr->dwBytesRecorded, Param2); ::SetEvent(Device->m_Event); } break; case MIM_LONGERROR: // Invalid system exclusive message received if(Device->m_State == RECORDING) { // Retrieve data, send it to receiver, and notify header // thread that we are done with the system exclusive // message MIDIHDR *MidiHdr = reinterpret_cast(Param1); Device->m_Receiver->OnError(MidiHdr->lpData, MidiHdr->dwBytesRecorded, Param2); ::SetEvent(Device->m_Event); } break; } } } // Header worker thread DWORD CMIDIInDevice::HeaderProc(LPVOID Parameter) { CMIDIInDevice *Device; Device = reinterpret_cast(Parameter); // Continue while the MIDI input device is recording while(Device->m_State == RECORDING) { ::WaitForSingleObject(Device->m_Event, INFINITE); // Make sure we are still recording if(Device->m_State == RECORDING) { // Remove the finished header Device->m_HdrQueue.RemoveHeader(); } } return 0; } MilkyTracker-1.02.00/src/midi/win32/MIDIInDevice.h000066400000000000000000000226531324432207300212400ustar00rootroot00000000000000#ifndef MIDI_IN_DEVICE_H #define MIDI_IN_DEVICE_H /******************************************************************************* * MIDIInDevice.h - Interface for CMIDIInDevice and related classes. * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact: jabberdabber@hotmail.com * * Last modified: 07/30/2003 * * Note: You must link to the winmm.lib to use these classes. ******************************************************************************/ #pragma warning(disable:4786) // Disable annoying template warnings //-------------------------------------------------------------------- // Dependencies //-------------------------------------------------------------------- // Necessary for Windows data types #include #include #ifdef _UNICODE #include #endif // Necessary for exception classes derived from std::exception #include // Necessary for header queue used by CHeaderQueue #include namespace midi { //---------------------------------------------------------------- // UnicodeToAnsi converts the Unicode string pszW to an ANSI string // and returns the ANSI string through ppszA. Space for the // the converted string is allocated by UnicodeToAnsi. //---------------------------------------------------------------- static HRESULT __fastcall UnicodeToAnsi(LPCWSTR pszW, LPSTR pszA) { ULONG cbAnsi, cCharacters; DWORD dwError; // If input is null then just return the same. if (pszW == NULL) { strcpy(pszA, ""); return NOERROR; } cCharacters = wcslen(pszW)+1; // Determine number of bytes to be allocated for ANSI string. An // ANSI string can have at most 2 bytes per character (for Double // Byte Character Strings.) cbAnsi = cCharacters*2; // Convert to ANSI. if (0 == WideCharToMultiByte(CP_ACP, 0, pszW, cCharacters, pszA, cbAnsi, NULL, NULL)) { dwError = GetLastError(); strcpy(pszA, ""); return HRESULT_FROM_WIN32(dwError); } return NOERROR; } //---------------------------------------------------------------- // Class declarations //---------------------------------------------------------------- //---------------------------------------------------------------- // CMIDIReceiver // // An abstract class representing objects that receive messages // from CMIDIInDevice objects. A CMIDIReceiver object registers // itself with a CMIDIInDevice object. It will then receive all // messages that are recorded. //---------------------------------------------------------------- class CMIDIReceiver { public: virtual ~CMIDIReceiver() {} // Receives short messages virtual void ReceiveMsg(DWORD Msg, DWORD TimeStamp) = 0; // Receives long messages virtual void ReceiveMsg(LPSTR Msg, DWORD BytesRecorded, DWORD TimeStamp) = 0; // Called when an invalid short message is received virtual void OnError(DWORD Msg, DWORD TimeStamp) = 0; // Called when an invalid long message is received virtual void OnError(LPSTR Msg, DWORD BytesRecorded, DWORD TimeStamp) = 0; }; //---------------------------------------------------------------- // CMIDIInDevice exception classes //---------------------------------------------------------------- // Encapsulates the midiInGetErrorText messages class CMIDIInException : public std::exception { public: CMIDIInException(MMRESULT ErrCode) throw() { #ifdef _UNICODE ::midiInGetErrorText(ErrCode, m_ErrMsgW, sizeof m_ErrMsgW); UnicodeToAnsi(m_ErrMsgW, m_ErrMsg); #else ::midiInGetErrorText(ErrCode, m_ErrMsg, sizeof m_ErrMsg); #endif } const char *what() const throw() { return m_ErrMsg; } private: #ifdef _UNICODE WCHAR m_ErrMsgW[128]; char m_ErrMsg[256]; #else char m_ErrMsg[128]; #endif }; // Thrown when memory allocation fails within a CMIDIInDevice // object class CMIDIInMemFailure : public std::bad_alloc { public: const char *what() const throw() { return "Memory allocation within a CMIDIInDevice object " "failed."; } }; // Thrown when a CMIDIInDevice is unable to create a signalling // event class CMIDIInEventFailure : public std::exception { public: const char *what() const throw() { return "Unable to create a signalling event for " "CMIDIInDevice object."; } }; // Thrown when a CMIDIInDevice is unable to create a worker thread class CMIDIInThreadFailure : public std::exception { public: const char *what() const throw() { return "Unable to create worker thread for CMIDIInDevice " "object."; } }; //---------------------------------------------------------------- // CMIDIInDevice // // This class represents MIDI input devices. //---------------------------------------------------------------- class CMIDIInDevice { public: enum ThreadPriority { MIDI_THREAD_PRIORITY_LOWEST = 0, MIDI_THREAD_PRIORITY_BELOW_NORMAL = 1, MIDI_THREAD_PRIORITY_NORMAL = 2, MIDI_THREAD_PRIORITY_ABOVE_NORMAL = 3, MIDI_THREAD_PRIORITY_HIGHEST = 4 }; // For constructing a CMIDIInDevice object in an closed state CMIDIInDevice(); // For constructing a CMIDIInDevice object in an closed state and // initializing the MIDI receiver CMIDIInDevice(CMIDIReceiver &Receiver); // For constructing a CMIDIInDevice object in an opened state CMIDIInDevice(UINT DeviceId, CMIDIReceiver &Receiver); // Destruction ~CMIDIInDevice(); // Opens the MIDI input device void Open(UINT DeviceId); // Closes the MIDI input device void Close(); // Adds a buffer to receive system exclusive messages void AddSysExBuffer(LPSTR Buffer, DWORD BufferLength); // Starts the recording process void StartRecording(ThreadPriority RecordingThreadPriority = MIDI_THREAD_PRIORITY_NORMAL); // Stops the recording process void StopRecording(); // Sets the current MIDI receiver. Returns the previous // receiver. CMIDIReceiver *SetReceiver(CMIDIReceiver &Receiver); // Returns true if the device is open bool IsOpen() const; // Returns true if the device is recording bool IsRecording() const; // Gets Id for this device UINT GetDevID() const; // Gets the number of MIDI input devices on this system static UINT GetNumDevs() { return midiInGetNumDevs(); } // Gets the capabilities of a particular MIDI input device // The results are stored in the MIDIINCAPS parameter. static void GetDevCaps(UINT DeviceId, MIDIINCAPS &Caps); // Private methods private: // Copying and assignment not allowed CMIDIInDevice(const CMIDIInDevice &); CMIDIInDevice &operator = (const CMIDIInDevice &); // Creates an event for signalling the header thread bool CreateEvent(); // Called by Windows when a MIDI input event occurs static void CALLBACK MidiInProc(HMIDIIN MidiIn, UINT Msg, DWORD_PTR Instance, DWORD_PTR Param1, DWORD_PTR Param2); // Thread function for managing headers static DWORD WINAPI HeaderProc(LPVOID Parameter); // Private class declarations private: // Encapsulates the MIDIHDR structure for MIDI input class CMIDIInHeader { public: CMIDIInHeader(HMIDIIN DevHandle, LPSTR Buffer, DWORD BufferLength); ~CMIDIInHeader(); // Add the buffer for receiving system exclusive messages void AddSysExBuffer(); private: HMIDIIN m_DevHandle; MIDIHDR m_MIDIHdr; }; // Thread safe queue for storing CMIDIInHeader objects class CHeaderQueue { public: CHeaderQueue(); ~CHeaderQueue(); void AddHeader(CMIDIInHeader *Header); void RemoveHeader(); void RemoveAll(); bool IsEmpty(); private: std::queue m_HdrQueue; CRITICAL_SECTION m_CriticalSection; }; // Private attributes and constants private: HMIDIIN m_DevHandle; HANDLE m_Event; //CWinThread *m_Thread; HANDLE m_hThread; DWORD m_threadID; CMIDIReceiver *m_Receiver; CHeaderQueue m_HdrQueue; enum State { CLOSED, OPENED, RECORDING } m_State; }; } #endif MilkyTracker-1.02.00/src/midi/win32/MIDIMsg.h000066400000000000000000000040731324432207300202740ustar00rootroot00000000000000#ifndef MIDI_MSG_H #define MIDI_MSG_H /* MIDIMsg.h Interface for the CMIDIMsg class. This is the base class for all MIDI message classes. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Contact: Leslie Sanford (jabberdabber@hotmail.com) Last modified: 12/14/2002 */ //--------------------------------------------------------------------- // Dependencies //--------------------------------------------------------------------- #include // For DWORD data type //--------------------------------------------------------------------- // Forward declarations //--------------------------------------------------------------------- namespace midi { class CMIDIOutDevice; } namespace midi { //------------------------------------------------------------------ // CMIDIMsg class // // This class represents the base class for all MIDI messages. //------------------------------------------------------------------ class CMIDIMsg { public: virtual ~CMIDIMsg() {} // Gets the MIDI message length virtual DWORD GetLength() const = 0; // Gets the MIDI message virtual const char *GetMsg() const = 0; // Get/Set time stamp DWORD GetTimeStamp() const { return m_TimeStamp; } void SetTimeStamp(DWORD TimeStamp) { m_TimeStamp = TimeStamp; } private: DWORD m_TimeStamp; }; } #endif MilkyTracker-1.02.00/src/midi/win32/MidiReceiver_win32.cpp000066400000000000000000000054511324432207300230300ustar00rootroot00000000000000/* * midi/win32/MidiReceiver_win32.cpp * * Copyright 2008 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "MidiReceiver_win32.h" #include #include "ShortMsg.h" #include "Tracker.h" #include "PPMutex.h" #include "MidiTools.h" using midi::CMIDIInDevice; using midi::CMIDIReceiver; MidiReceiver::MidiReceiver(Tracker& theTracker, PPMutex& mutex) : tracker(theTracker), criticalSection(mutex), recordVelocity(false), velocityAmplify(100) { } // Function called to receive short messages void MidiReceiver::ReceiveMsg(DWORD Msg, DWORD TimeStamp) { midi::CShortMsg ShortMsg(Msg, TimeStamp); int command = static_cast(ShortMsg.GetCommand()); if (command >= 128 && command <= 143) { int note = static_cast(ShortMsg.GetData1()); // One octave less note -= 12; if (note < 1) note = 1; criticalSection.lock(); tracker.sendNoteUp(note); criticalSection.unlock(); } else if (command >= 144 && command <= 159) { int note = static_cast(ShortMsg.GetData1()); // One octave less note -= 12; if (note < 1) note = 1; int velocity = static_cast(ShortMsg.GetData2()); if (velocity == 0) { criticalSection.lock(); tracker.sendNoteUp(note); criticalSection.unlock(); } else { criticalSection.lock(); tracker.sendNoteDown(note, recordVelocity ? vol126to255(velocity-1, velocityAmplify) : -1); criticalSection.unlock(); } } /*std::cout << "Command: " << static_cast(ShortMsg.GetCommand()); std::cout << "\nChannel: " << static_cast(ShortMsg.GetChannel()); std::cout << "\nDataByte1: " << static_cast(ShortMsg.GetData1()); std::cout << "\nDataByte2: " << static_cast(ShortMsg.GetData2()); std::cout << "\nTimeStamp: " << static_cast(ShortMsg.GetTimeStamp()); std::cout << "\n\n";*/ } // Receives long messages void MidiReceiver::ReceiveMsg(LPSTR Msg, DWORD BytesRecorded, DWORD TimeStamp) { } // Called when an invalid short message is received void MidiReceiver::OnError(DWORD Msg, DWORD TimeStamp) { } // Called when an invalid long message is received void MidiReceiver::OnError(LPSTR Msg, DWORD BytesRecorded, DWORD TimeStamp) { } MilkyTracker-1.02.00/src/midi/win32/MidiReceiver_win32.h000066400000000000000000000032501324432207300224700ustar00rootroot00000000000000/* * midi/win32/MidiReceiver_win32.h * * Copyright 2008 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #ifndef __MIDIRECEIVER_H__ #define __MIDIRECEIVER_H__ #include "MIDIInDevice.h" class Tracker; class PPMutex; class MidiReceiver : public midi::CMIDIReceiver { private: Tracker& tracker; PPMutex& criticalSection; bool recordVelocity; int velocityAmplify; public: MidiReceiver(Tracker& theTracker, PPMutex& mutex); void setRecordVelocity(bool recVelocity) { recordVelocity = recVelocity; } void setVelocityAmplify(int amplify) { velocityAmplify = amplify; } // Receives short messages virtual void ReceiveMsg(DWORD Msg, DWORD TimeStamp); // Receives long messages virtual void ReceiveMsg(LPSTR Msg, DWORD BytesRecorded, DWORD TimeStamp); // Called when an invalid short message is received virtual void OnError(DWORD Msg, DWORD TimeStamp); // Called when an invalid long message is received virtual void OnError(LPSTR Msg, DWORD BytesRecorded, DWORD TimeStamp); }; #endif MilkyTracker-1.02.00/src/midi/win32/ShortMsg.cpp000066400000000000000000000135521324432207300212060ustar00rootroot00000000000000/* ShortMsg.cpp Implementation for the CShortMsg class This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Contact: Leslie Sanford (jabberdabber@hotmail.com) Last modified: 08/19/2003 */ //--------------------------------------------------------------------- // Dependencies //--------------------------------------------------------------------- #include "midi.h" #include "ShortMsg.h" #include "MIDIInDevice.h" // Using declaration using midi::CShortMsg; //--------------------------------------------------------------------- // CShortMsg implementation //--------------------------------------------------------------------- // Constructor CShortMsg::CShortMsg(DWORD TimeStamp) : m_Msg(0), m_MsgNoStatus(0) { SetTimeStamp(TimeStamp); } // Constructor CShortMsg::CShortMsg(DWORD Msg, DWORD TimeStamp) : m_Msg(Msg) { unsigned char DataByte1 = GetData1(); unsigned char DataByte2 = GetData2(); m_MsgNoStatus = PackShortMsg(DataByte1, DataByte2); SetTimeStamp(TimeStamp); } // Constructor CShortMsg::CShortMsg(unsigned char Status, unsigned char Data1, unsigned char Data2, DWORD TimeStamp) { SetMsg(Status, Data1, Data2); m_MsgNoStatus = PackShortMsg(Data1, Data2); SetTimeStamp(TimeStamp); } // Constructor CShortMsg::CShortMsg(unsigned char Command, unsigned char Channel, unsigned char Data1, unsigned char Data2, DWORD TimeStamp) { SetMsg(Command, Channel, Data1, Data2); m_MsgNoStatus = PackShortMsg(Data1, Data2); SetTimeStamp(TimeStamp); } // Gets message const char *CShortMsg::GetMsg() const { return reinterpret_cast(&m_Msg); } // Gets status byte unsigned char CShortMsg::GetStatus() const { unsigned char Status; unsigned char Dummy; UnpackShortMsg(m_Msg, Status, Dummy, Dummy); return Status; } // Gets MIDI channel unsigned char CShortMsg::GetChannel() const { unsigned char Channel; unsigned char Dummy; UnpackShortMsg(m_Msg, Dummy, Channel, Dummy, Dummy); return Channel; } // Gets command code unsigned char CShortMsg::GetCommand() const { unsigned char Command; unsigned char Dummy; UnpackShortMsg(m_Msg, Command, Dummy, Dummy, Dummy); return Command; } // Gets data byte 1 unsigned char CShortMsg::GetData1() const { unsigned char Data1; unsigned char Dummy; UnpackShortMsg(m_Msg, Dummy, Dummy, Data1, Dummy); return Data1; } // Gets data byte 2 unsigned char CShortMsg::GetData2() const { unsigned char Data2; unsigned char Dummy; UnpackShortMsg(m_Msg, Dummy, Dummy, Dummy, Data2); return Data2; } // Sets message void CShortMsg::SetMsg(unsigned char Status, unsigned char Data1, unsigned char Data2) { m_Msg = PackShortMsg(Status, Data1, Data2); m_MsgNoStatus = PackShortMsg(Data1, Data2); } // Sets message void CShortMsg::SetMsg(unsigned char Command, unsigned char Channel, unsigned char Data1, unsigned char Data2) { m_Msg = PackShortMsg(Command, Channel, Data1, Data2); m_MsgNoStatus = PackShortMsg(Data1, Data2); } // Packs data into short message without status byte DWORD CShortMsg::PackShortMsg(unsigned char DataByte1, unsigned char DataByte2) { DWORD Msg = DataByte1; Msg |= DataByte2 << midi::SHORT_MSG_SHIFT; return Msg; } // Packs data into short message with status byte DWORD CShortMsg::PackShortMsg(unsigned char Status, unsigned char DataByte1, unsigned char DataByte2) { DWORD Msg = Status; Msg |= DataByte1 << midi::SHORT_MSG_SHIFT; Msg |= DataByte2 << midi::SHORT_MSG_SHIFT * 2; return Msg; } // Packs data into short channel message DWORD CShortMsg::PackShortMsg(unsigned char Command, unsigned char Channel, unsigned char DataByte1, unsigned char DataByte2) { DWORD Msg = Command | Channel; Msg |= DataByte1 << midi::SHORT_MSG_SHIFT; Msg |= DataByte2 << midi::SHORT_MSG_SHIFT * 2; return Msg; } // Unpacks short message void CShortMsg::UnpackShortMsg(DWORD Msg, unsigned char &Status, unsigned char &DataByte1, unsigned char &DataByte2) { Status = static_cast(Msg); DataByte1 = static_cast (Msg >> midi::SHORT_MSG_SHIFT); DataByte2 = static_cast (Msg >> midi::SHORT_MSG_SHIFT * 2); } // Unpacks short channel message void CShortMsg::UnpackShortMsg(DWORD Msg, unsigned char &Command, unsigned char &Channel, unsigned char &DataByte1, unsigned char &DataByte2) { Command = static_cast(Msg & ~midi::SHORT_MSG_MASK); Channel = static_cast(Msg & midi::SHORT_MSG_MASK); DataByte1 = static_cast (Msg >> midi::SHORT_MSG_SHIFT); DataByte2 = static_cast (Msg >> midi::SHORT_MSG_SHIFT * 2); } MilkyTracker-1.02.00/src/midi/win32/ShortMsg.h000066400000000000000000000074141324432207300206530ustar00rootroot00000000000000#ifndef SHORT_MSG_H #define SHORT_MSG_H /* ShortMsg.h CShortMsg class declaration. This class represents short MIDI messages. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Contact: Leslie Sanford (jabberdabber@hotmail.com) Last modified: 08/19/2003 */ //--------------------------------------------------------------------- // Dependencies //--------------------------------------------------------------------- #include "MIDIMsg.h" // For CMIDIMsg base class namespace midi { // Constants const DWORD SHORT_MSG_LENGTH = 3; //----------------------------------------------------------------- // CShortMsg class // // This class represents short MIDI messages. //----------------------------------------------------------------- class CShortMsg : public CMIDIMsg { public: // Constructors explicit CShortMsg(DWORD TimeStamp = 0); CShortMsg(DWORD Msg, DWORD TimeStamp = 0); CShortMsg(unsigned char Status, unsigned char Data1, unsigned char Data2, DWORD TimeStamp); CShortMsg(unsigned char Command, unsigned char Channel, unsigned char Data1, unsigned char Data2, DWORD TimeStamp); // // Accessors // DWORD GetLength() const { return midi::SHORT_MSG_LENGTH; } const char *GetMsg() const; unsigned char GetStatus() const; unsigned char GetChannel() const; unsigned char GetCommand() const; unsigned char GetData1() const; unsigned char GetData2() const; // // Mutators // void SetMsg(unsigned char Status, unsigned char Data1, unsigned char Data2); void SetMsg(unsigned char Command, unsigned char Channel, unsigned char Data1, unsigned char Data2); // // Class methods // // Packs short messages without status byte static DWORD PackShortMsg(unsigned char DataByte1, unsigned char DataByte2); // Packs short messages with status byte static DWORD PackShortMsg(unsigned char Status, unsigned char DataByte1, unsigned char DataByte2); // Packs short channel messages static DWORD PackShortMsg(unsigned char Command, unsigned char Channel, unsigned char DataByte1, unsigned char DataByte2); // Unpacks short messages static void UnpackShortMsg(DWORD Msg, unsigned char &Status, unsigned char &DataByte1, unsigned char &DataByte2); // Unpacks short channel messages static void UnpackShortMsg(DWORD Msg, unsigned char &Command, unsigned char &Channel, unsigned char &DataByte1, unsigned char &DataByte2); private: DWORD m_Msg; DWORD m_MsgNoStatus; }; } #endif MilkyTracker-1.02.00/src/midi/win32/midi.h000066400000000000000000000061311324432207300200220ustar00rootroot00000000000000#ifndef MIDI_H #define MIDI_H /******************************************************************************* * midi.h - Common MIDI declarations. * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact: jabberdabber@hotmail.com * * Last modified: 09/22/2003 ******************************************************************************/ namespace midi { //---------------------------------------------------------------- // Constants //---------------------------------------------------------------- // Status byte for Active Sensing message const unsigned char ACTIVE_SENSING = 0xFE; // Command value for Channel Pressure (Aftertouch) const unsigned char CHANNEL_PRESSURE = 0xD0; // Status byte for Continue message const unsigned char CONTINUE = 0xFB; // Command value for Control Change message const unsigned char CONTROL_CHANGE = 0xB0; // Status byte for System Exclusive message const unsigned char SYSTEM_EXCLUSIVE = 0xF0; // Status byte for End of System Exclusive message const unsigned char END_OF_EXCLUSIVE = 0xF7; // Status byte for MIDI Time Code Quarter Fram message const unsigned char MIDI_TIME_CODE = 0xF1; // Command value for Note Off message const unsigned char NOTE_OFF = 0x80; // Command value for Note On message const unsigned char NOTE_ON = 0x90; // Command value for Pitch Bend message const unsigned char PITCH_BEND = 0xE0; // Command value for Polyphonic Key Pressure (Aftertouch) const unsigned char POLY_PRESSURE = 0xA0; // Command value for Program Change message const unsigned char PROGRAM_CHANGE = 0xC0; // Status byte for Song Position Pointer message const unsigned char SONG_POSITION_POINTER = 0xF2; // Status byte for MIDI Song Select message const unsigned char SONG_SELECT = 0xF3; // Status byte for Start message const unsigned char START = 0xFA; // Status byte for Stop message const unsigned char STOP = 0xFC; // Status byte for System Reset message const unsigned char SYSTEM_RESET = 0xFF; // Status byte for Timing Clock message const unsigned char TIMING_CLOCK = 0xF8; // Status byte for Tune Request message const unsigned char TUNE_REQUEST = 0xF6; // // For unpacking and packing short messages // const unsigned char SHORT_MSG_MASK = 15; const unsigned char SHORT_MSG_SHIFT = 8; } #endif MilkyTracker-1.02.00/src/milkyplay/000077500000000000000000000000001324432207300170555ustar00rootroot00000000000000MilkyTracker-1.02.00/src/milkyplay/AudioDriverBase.cpp000066400000000000000000000057421324432207300226010ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * AudioDriverBase.cpp * MilkyPlay * * Created by Peter Barth on 15.12.07. * */ #include "AudioDriverBase.h" #include "MasterMixer.h" #if defined(__PSP__) #include #elif !defined(WIN32) && !defined(_WIN32_WCE) #include #else #include #endif void AudioDriverBase::msleep(mp_uint32 msecs) { #ifdef WIN32 ::Sleep(msecs); #elif defined(__PSP__) sceKernelDelayThreadCB(msecs*1000); #elif defined(__AROS__) // usleep is not implemented on AROS if(msecs < 1000) msecs = 1000; sleep(msecs/1000); #else usleep(msecs*1000); #endif } bool AudioDriverBase::isMixerActive() { if (idle) return false; if (markedAsIdle) { markedAsIdle = false; idle = true; return false; } return (mixer && mixer->isPlaying()); } void AudioDriverBase::setIdle(bool idle) { if (mixer == 0) return; if (idle) { if (markedAsIdle || this->idle) return; markedAsIdle = true; // this is going to loop infinitely when the audio device is not running double waitMillis = ((double)(bufferSize/2) / (double)mixFrequency) * 1000.0 * 2.0; if (waitMillis < 1.0) waitMillis = 1.0; if (waitMillis > 5000.0) waitMillis = 5000.0; mp_uint32 time = 0; const mp_uint32 sleepTime = 10; while (!this->idle && time <= (mp_uint32)waitMillis) { msleep(sleepTime); time+=sleepTime; } if (!this->idle) this->idle = true; } else { this->idle = false; this->markedAsIdle = false; } } MilkyTracker-1.02.00/src/milkyplay/AudioDriverBase.h000066400000000000000000000135421324432207300222430ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * AudioDriverBase.h * MilkyPlay * * Created by Peter Barth on Fri Feb 25 2005. * */ #ifndef __AUDIODRIVERBASE_H__ #define __AUDIODRIVERBASE_H__ #include "MilkyPlayTypes.h" #include "MilkyPlayResults.h" // WAV Header & mixing buffer info #define MP_NUMCHANNELS 2 #define MP_NUMBITS 16 #define MP_NUMBYTES (NUMBITS>>3) class MasterMixer; class AudioDriverInterface { public: virtual ~AudioDriverInterface() { } // init device, hook resources virtual mp_sint32 initDevice(mp_sint32 bufferSizeInWords, mp_uint32 mixFrequency, MasterMixer* mixer) = 0; virtual mp_uint32 getMixFrequency() const = 0; // close device, unhook resources virtual mp_sint32 closeDevice() = 0; // start device virtual mp_sint32 start() = 0; // stop device virtual mp_sint32 stop() = 0; // pause the device: // this is actually a little bit awkward, because it was meant to // be an interface for waveOutPause (win32) which immediately pauses the // device no matter how large the buffer size is whereas stop waits // until all pending buffers have been played which is not suitable for // a client player application. // You *should* implement this anyway, just set a flag and don't // output any audio when the flag is set or something virtual mp_sint32 pause() = 0; // resume the device from paused state virtual mp_sint32 resume() = 0; // if the device supports query of how many samples are played since // start has been called, return number of samples here virtual mp_uint32 getNumPlayedSamples() const = 0; // returns the position within the buffer virtual mp_uint32 getBufferPos() const = 0; // if the device supports query of how many samples are played since // start has been called, return true here virtual bool supportsTimeQuery() const = 0; // should be kinda unique virtual const char* getDriverID() = 0; // required by wav/null drivers, ignore if you're not writing a wav writer virtual void advance() = 0; // return preferred sample rate here virtual mp_sint32 getPreferredSampleRate() const = 0; // should return preferred buffer size for preferred sample rate (see above) virtual mp_sint32 getPreferredBufferSize() const = 0; virtual void msleep(mp_uint32 msecs) = 0; virtual bool isMixerActive() = 0; virtual void setIdle(bool idle) = 0; }; // ------------------------------------------------------------------------- // Important note: On construction an AudioDriver instance should not // hook any real resources, so it should be possible to instantiate // different audio driver implementations on the same plattform // accessing the same audio device without interfering each other. // ------------------------------------------------------------------------- // For error codes see MilkyPlayResults.h // ------------------------------------------------------------------------- class AudioDriverBase : public AudioDriverInterface { protected: MasterMixer* mixer; mp_sint32 bufferSize; mp_uint32 mixFrequency; bool mono; bool idle; bool markedAsIdle; public: AudioDriverBase() : mixer(0), bufferSize(0), mixFrequency(1), mono(false), idle(false), markedAsIdle(false) { } virtual ~AudioDriverBase() {} // init device, hook resources virtual mp_sint32 initDevice(mp_sint32 bufferSizeInWords, mp_uint32 mixFrequency, MasterMixer* mixer) { this->mixer = mixer; bufferSize = bufferSizeInWords; this->mixFrequency = mixFrequency; return MP_OK; } mp_uint32 getMixFrequency() const { return mixFrequency; } // if the device supports query of how many samples are played since // start has been called, return number of samples here virtual mp_uint32 getNumPlayedSamples() const { return 0; } // returns the position within the buffer virtual mp_uint32 getBufferPos() const { return 0; } // if the device supports query of how many samples are played since // start has been called, return true here virtual bool supportsTimeQuery() const { return false; } // required by wav/null drivers, ignore if you're not writing a wav writer virtual void advance() { } // return preferred sample rate here virtual mp_sint32 getPreferredSampleRate() const { return 48000; } virtual void msleep(mp_uint32 msecs); virtual bool isMixerActive(); virtual void setIdle(bool idle); }; #endif MilkyTracker-1.02.00/src/milkyplay/AudioDriverManager.cpp000066400000000000000000000174431324432207300233020ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ #include "AudioDriverManager.h" #include "AudioDriverBase.h" #include "MilkyPlayCommon.h" #ifdef HAVE_CONFIG_H #include "config.h" #endif #define ALLOC_DRIVERLIST(NUMDRIVERS) \ enumerationIndex = -1; \ numDrivers = (NUMDRIVERS); \ driverList = new AudioDriverInterface*[numDrivers]; \ memset(driverList, 0, numDrivers*sizeof(AudioDriverInterface*)); #define CLEANUP_DRIVERLIST \ for (mp_sint32 i = 0; i < numDrivers; i++) \ delete driverList[i]; \ delete[] driverList; #if defined(DRIVER_WIN32) ////////////////////////////////////////////////////////////////// // Windows implementation ////////////////////////////////////////////////////////////////// #include "AudioDriver_MMSYSTEM.h" #if !defined(_WIN32_WCE) && !defined(__SKIPRTAUDIO__) #include "AudioDriver_RTAUDIO.h" /* Taken from VersionHelpers.h in the Windows 8 SDK; not present in the XP-compatible SDKs */ static bool IsWindowsVistaOrGreater() { OSVERSIONINFOEXW osvi = { sizeof(osvi), 0, 0, 0, 0, { 0 }, 0, 0 }; DWORDLONG const dwlConditionMask = VerSetConditionMask( VerSetConditionMask( VerSetConditionMask( 0, VER_MAJORVERSION, VER_GREATER_EQUAL), VER_MINORVERSION, VER_GREATER_EQUAL), VER_SERVICEPACKMAJOR, VER_GREATER_EQUAL); osvi.dwMajorVersion = HIBYTE(_WIN32_WINNT_VISTA); osvi.dwMinorVersion = LOBYTE(_WIN32_WINNT_VISTA); osvi.wServicePackMajor = 0; return VerifyVersionInfoW(&osvi, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR, dwlConditionMask) != FALSE; } #endif #if !defined(_WIN32_WCE) && defined(__WASAPI__) #include "AudioDriver_PORTAUDIO.h" #endif AudioDriverManager::AudioDriverManager() : defaultDriverIndex(0) { mp_sint32 driverListSize = 1; #if !defined(_WIN32_WCE) && !defined(__SKIPRTAUDIO__) driverListSize+=4; #endif #if !defined(_WIN32_WCE) && defined(__WASAPI__) driverListSize++; #endif mp_sint32 i = 0; ALLOC_DRIVERLIST(driverListSize); driverList[i++] = new AudioDriver_MMSYSTEM(); #if !defined(_WIN32_WCE) && !defined(__SKIPRTAUDIO__) driverList[i++] = new AudioDriver_RTAUDIO(); driverList[i++] = new AudioDriver_RTAUDIO(AudioDriver_RTAUDIO::WINDOWS_ASIO); driverList[i++] = new AudioDriver_RTAUDIO(AudioDriver_RTAUDIO::WINDOWS_DS); driverList[i++] = new AudioDriver_RTAUDIO(AudioDriver_RTAUDIO::WINDOWS_WASAPI); #ifndef _WIN32_WCE // On Windows Vista we set the DS driver to be the default if (IsWindowsVistaOrGreater()) defaultDriverIndex = i-2; #endif #endif #if !defined(_WIN32_WCE) && defined(__WASAPI__) driverList[i++] = new AudioDriver_PORTAUDIO(); #endif } #elif defined(DRIVER_OSX) ////////////////////////////////////////////////////////////////// // Mac OS X implementation ////////////////////////////////////////////////////////////////// #include "AudioDriver_COREAUDIO.h" AudioDriverManager::AudioDriverManager() : defaultDriverIndex(0) { mp_uint32 deviceCount = 0; AudioObjectID* deviceIDs = NULL; OSStatus err = AudioDriver_COREAUDIO::getAudioDevices(deviceCount, deviceIDs); if (err) fprintf(stderr, "Core Audio: Error while enumerating devices (%d)\n", err); ALLOC_DRIVERLIST(deviceCount + 1); // First device: system default output driverList[0] = new AudioDriver_COREAUDIO(); // List all output devices int i; for (i = 0; i < deviceCount; i++) { driverList[i + 1] = new AudioDriver_COREAUDIO(deviceIDs[i]); } if (deviceIDs) delete[] deviceIDs; } #elif defined(DRIVER_UNIX) ////////////////////////////////////////////////////////////////// // UNIX implementation ////////////////////////////////////////////////////////////////// #include "AudioDriver_SDL.h" // #include "AudioDriver_RTAUDIO.h" #ifdef HAVE_LIBASOUND #include "drivers/alsa/AudioDriver_ALSA.h" #endif #ifdef HAVE_JACK_JACK_H #include "AudioDriver_JACK.h" #endif AudioDriverManager::AudioDriverManager() : defaultDriverIndex(0) { int count = 1; #ifdef HAVE_LIBASOUND count++; #endif #ifdef HAVE_JACK_JACK_H count++; #endif ALLOC_DRIVERLIST(count); count = 0; driverList[count++] = new AudioDriver_SDL(); #ifdef HAVE_LIBASOUND driverList[count++] = new AudioDriver_ALSA(); #endif #if HAVE_JACK_JACK_H driverList[count++] = new AudioDriver_JACK(); #endif } #elif defined(DRIVER_SDL) ////////////////////////////////////////////////////////////////// // SDL implementation ////////////////////////////////////////////////////////////////// #include "AudioDriver_SDL.h" AudioDriverManager::AudioDriverManager() : defaultDriverIndex(0) { ALLOC_DRIVERLIST(1); driverList[0] = new AudioDriver_SDL(); } #elif defined(DRIVER_PSP) ////////////////////////////////////////////////////////////////// // PSP implementation ////////////////////////////////////////////////////////////////// #include "AudioDriver_PSP.h" AudioDriverManager::AudioDriverManager() : defaultDriverIndex(0) { ALLOC_DRIVERLIST(1); driverList[0] = new AudioDriver_PSP(); } #elif defined(DRIVER_HAIKU) ////////////////////////////////////////////////////////////////// // Haiku implementation ////////////////////////////////////////////////////////////////// #include "AudioDriver_Haiku.h" AudioDriverManager::AudioDriverManager() : defaultDriverIndex(0) { ALLOC_DRIVERLIST(1); driverList[0] = new AudioDriver_Haiku(); } #endif AudioDriverInterface* AudioDriverManager::getPreferredAudioDriver() { return driverList[defaultDriverIndex]; } AudioDriverManager::~AudioDriverManager() { CLEANUP_DRIVERLIST; } AudioDriverInterface* AudioDriverManager::getAudioDriverByName(const char* name) { if (name == NULL) return NULL; for (mp_sint32 i = 0; i < numDrivers; i++) { if (strcmp(driverList[i]->getDriverID(), name) == 0) return driverList[i]; } return NULL; } const char* AudioDriverManager::getFirstDriverName() const { enumerationIndex = 0; if (enumerationIndex < numDrivers) return driverList[enumerationIndex]->getDriverID(); else return NULL; } const char* AudioDriverManager::getNextDriverName() const { enumerationIndex++; if (enumerationIndex >= numDrivers) { enumerationIndex = -1; return NULL; } return driverList[enumerationIndex]->getDriverID(); } mp_sint32 AudioDriverManager::getPreferredAudioDriverSampleRate() const { return driverList[defaultDriverIndex]->getPreferredSampleRate(); } mp_sint32 AudioDriverManager::getPreferredAudioDriverBufferSize() const { return driverList[defaultDriverIndex]->getPreferredBufferSize(); } MilkyTracker-1.02.00/src/milkyplay/AudioDriverManager.h000066400000000000000000000051041324432207300227360ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * AudioDriverManager.h * * This class serves as provider and manager of different kind of * AudioDriver instances. Different kinds of AudioDrivers can be * requested on the same system. * * */ #ifndef __AUDIODRIVERMANAGER_H__ #define __AUDIODRIVERMANAGER_H__ #include "MilkyPlayTypes.h" class AudioDriverInterface; class AudioDriverManager { private: AudioDriverInterface** driverList; mp_sint32 numDrivers; mp_sint32 defaultDriverIndex; mutable mp_sint32 enumerationIndex; public: AudioDriverManager(); ~AudioDriverManager(); /** * Get the preferred audio driver for this system * NULL is returned if either none is available or an alloc error occurred * @return audio driver instance */ AudioDriverInterface* getPreferredAudioDriver(); AudioDriverInterface* getAudioDriverByName(const char* name); const char* getFirstDriverName() const; const char* getNextDriverName() const; mp_sint32 getPreferredAudioDriverSampleRate() const; mp_sint32 getPreferredAudioDriverBufferSize() const; }; #endif MilkyTracker-1.02.00/src/milkyplay/AudioDriver_COMPENSATE.h000066400000000000000000000050511324432207300231620ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * AudioDriver_COMPENSATE.h * MilkyPlay * * Created by Peter Barth on 22.04.06. * */ #ifndef __AUDIODRIVER_COMPENSATE_H__ #define __AUDIODRIVER_COMPENSATE_H__ #include "AudioDriverBase.h" #include "MilkyPlayCommon.h" #include "MasterMixer.h" class AudioDriver_COMPENSATE : public AudioDriverBase { protected: bool deviceHasStarted; mp_uint32 sampleCounter; public: AudioDriver_COMPENSATE() : deviceHasStarted(false), sampleCounter(0) { } virtual ~AudioDriver_COMPENSATE() { } virtual mp_uint32 getNumPlayedSamples() const { return sampleCounter; } void fillAudioWithCompensation(char* stream, int length) { // sanity check if (!this->deviceHasStarted) return; MasterMixer* mixer = this->mixer; // Attention: Sample buffer MUST be 16 bit stereo, otherwise this will not work this->sampleCounter+=length>>2; //mixer->updateSampleCounter(length>>2); if (isMixerActive()) mixer->mixerHandler((mp_sword*)stream); else memset(stream, 0, length); } }; #endif MilkyTracker-1.02.00/src/milkyplay/AudioDriver_NULL.cpp000066400000000000000000000052071324432207300226340ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * AudioDriver_NULL.cpp * MilkyPlay * * Created by Peter Barth on 29.07.05. * */ #include "AudioDriver_NULL.h" #include "MasterMixer.h" AudioDriver_NULL::AudioDriver_NULL() : numSamplesWritten(0), compensateBuffer(0) { } AudioDriver_NULL::~AudioDriver_NULL() { delete[] compensateBuffer; } mp_sint32 AudioDriver_NULL::initDevice(mp_sint32 bufferSizeInWords, mp_uint32 mixFrequency, MasterMixer* mixer) { mp_sint32 res = AudioDriverBase::initDevice(bufferSizeInWords, mixFrequency, mixer); if (res < 0) return res; numSamplesWritten = 0; delete[] compensateBuffer; compensateBuffer = new mp_sword[bufferSizeInWords]; return MP_OK; } mp_sint32 AudioDriver_NULL::stop() { return MP_OK; } mp_sint32 AudioDriver_NULL::closeDevice() { return MP_OK; } mp_sint32 AudioDriver_NULL::start() { return MP_OK; } mp_sint32 AudioDriver_NULL::pause() { return MP_OK; } mp_sint32 AudioDriver_NULL::resume() { return MP_OK; } void AudioDriver_NULL::advance() { numSamplesWritten+=bufferSize / MP_NUMCHANNELS; if (mixer->isPlaying()) mixer->mixerHandler(compensateBuffer); } MilkyTracker-1.02.00/src/milkyplay/AudioDriver_NULL.h000066400000000000000000000047141324432207300223030ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * AudioDriver_NULL.h * MilkyPlay * * Created by Peter Barth on 29.07.05. * */ #ifndef __AUDIODRIVER_NULL_H__ #define __AUDIODRIVER_NULL_H__ #include "AudioDriverBase.h" #include "MilkyPlayTypes.h" class AudioDriver_NULL : public AudioDriverBase { protected: mp_uint32 numSamplesWritten; mp_sword* compensateBuffer; public: AudioDriver_NULL(); virtual ~AudioDriver_NULL(); virtual mp_sint32 initDevice(mp_sint32 bufferSizeInWords, mp_uint32 mixFrequency, MasterMixer* mixer); virtual mp_sint32 closeDevice(); virtual mp_sint32 start(); virtual mp_sint32 stop(); virtual mp_sint32 pause(); virtual mp_sint32 resume(); virtual mp_uint32 getNumPlayedSamples() const { return numSamplesWritten; }; virtual const char* getDriverID() { return "NULL"; } virtual mp_sint32 getPreferredBufferSize() const { return 0; } virtual void advance(); }; #endif MilkyTracker-1.02.00/src/milkyplay/AudioDriver_WAVWriter.cpp000066400000000000000000000105631324432207300237150ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * AudioDriver_WAVWriter.cpp * MilkyPlay * * Created by Peter Barth on 29.07.05. * */ #include "AudioDriver_WAVWriter.h" struct TWAVHeader { mp_ubyte RIFF[4]; // "RIFF" mp_dword length; // filesize - 8 mp_ubyte WAVE[4]; // "WAVE" mp_ubyte FMT[4]; // "fmt " mp_dword fmtDataLength; // = 16 mp_uword encodingTag; mp_uword numChannels; // Channels: 1 = mono, 2 = stereo mp_dword sampleRate; // Samples per second: e.g., 44100 mp_dword bytesPerSecond; // sample rate * block align mp_uword blockAlign; // channels * numBits / 8 mp_uword numBits; // 8 or 16 mp_ubyte DATA[4]; // "data" mp_dword dataLength; // sample data size }; static void writeWAVHeader(XMFile* f, const TWAVHeader& hdr) { f->write(hdr.RIFF, 1, 4); f->writeDword(hdr.length); f->write(hdr.WAVE, 1, 4); f->write(hdr.FMT, 1, 4); f->writeDword(hdr.fmtDataLength); f->writeWord(hdr.encodingTag); f->writeWord(hdr.numChannels); f->writeDword(hdr.sampleRate); f->writeDword(hdr.bytesPerSecond); f->writeWord(hdr.blockAlign); f->writeWord(hdr.numBits); f->write(hdr.DATA, 1, 4); f->writeDword(hdr.dataLength); } WAVWriter::WAVWriter(const SYSCHAR* fileName) : AudioDriver_NULL(), f(NULL), mixFreq(44100) { TWAVHeader hdr; f = new XMFile(fileName, true); if (!f->isOpenForWriting()) { delete f; f = NULL; } else { // build wav header memcpy(hdr.RIFF, "RIFF", 4); hdr.length = 44 - 8; memcpy(hdr.WAVE, "WAVE", 4); memcpy(hdr.FMT, "fmt ", 4); hdr.fmtDataLength = 16; hdr.encodingTag = 1; hdr.numChannels = 2; hdr.sampleRate = mixFreq; hdr.numBits = 16; hdr.blockAlign = (hdr.numChannels*hdr.numBits) / 8; hdr.bytesPerSecond = hdr.sampleRate*hdr.blockAlign; memcpy(hdr.DATA, "data", 4); hdr.dataLength = 0; writeWAVHeader(f, hdr); } } WAVWriter::~WAVWriter() { if (f) delete f; } mp_sint32 WAVWriter::initDevice(mp_sint32 bufferSizeInWords, mp_uint32 mixFrequency, MasterMixer* mixer) { mp_sint32 res = AudioDriver_NULL::initDevice(bufferSizeInWords, mixFrequency, mixer); if (res < 0) return res; mixFreq = mixFrequency; return MP_OK; } mp_sint32 WAVWriter::closeDevice() { if (!f) return MP_DEVICE_ERROR; TWAVHeader hdr; // build wav header memcpy(hdr.RIFF, "RIFF", 4); hdr.length = 44 + numSamplesWritten*4 - 8; memcpy(hdr.WAVE, "WAVE", 4); memcpy(hdr.FMT, "fmt ", 4); hdr.fmtDataLength = 16; hdr.encodingTag = 1; hdr.numChannels = 2; hdr.sampleRate = mixFreq; hdr.numBits = 16; hdr.blockAlign = (hdr.numChannels*hdr.numBits) / 8; hdr.bytesPerSecond = hdr.sampleRate*hdr.blockAlign; memcpy(hdr.DATA, "data", 4); hdr.dataLength = (numSamplesWritten*2*hdr.numBits)/8; f->seek(0); writeWAVHeader(f, hdr); return MP_OK; } void WAVWriter::advance() { AudioDriver_NULL::advance(); if (!f) return; f->writeWords((mp_uword*)compensateBuffer, bufferSize); } MilkyTracker-1.02.00/src/milkyplay/AudioDriver_WAVWriter.h000066400000000000000000000043201324432207300233540ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * AudioDriver_WAVWriter.h * MilkyPlay * * Created by Peter Barth on 29.07.05. * */ #ifndef __AUDIODRIVER_WAVWRITER_H__ #define __AUDIODRIVER_WAVWRITER_H__ #include "AudioDriver_NULL.h" #include "XMFile.h" class WAVWriter : public AudioDriver_NULL { private: XMFile* f; mp_sint32 mixFreq; public: WAVWriter(const SYSCHAR* fileName); virtual ~WAVWriter(); virtual mp_sint32 initDevice(mp_sint32 bufferSizeInWords, mp_uint32 mixFrequency, MasterMixer* mixer); virtual mp_sint32 closeDevice(); virtual const char* getDriverID() { return "WAVWriter"; } virtual void advance(); bool isOpen() { return f != NULL; } }; #endif MilkyTracker-1.02.00/src/milkyplay/CMakeLists.txt000066400000000000000000000151531324432207300216220ustar00rootroot00000000000000# # src/milkyplay/CMakeLists.txt # # Copyright 2016 Dale Whinham # # This file is part of MilkyTracker. # # MilkyTracker 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. # # MilkyTracker 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 MilkyTracker. If not, see . # set( SOURCES AudioDriverBase.cpp AudioDriverManager.cpp AudioDriver_NULL.cpp AudioDriver_WAVWriter.cpp ChannelMixer.cpp ExporterXM.cpp LittleEndian.cpp Loader669.cpp LoaderAMF.cpp LoaderAMS.cpp LoaderCBA.cpp LoaderDBM.cpp LoaderDIGI.cpp LoaderDSM.cpp LoaderDTM.cpp LoaderFAR.cpp LoaderGDM.cpp LoaderIMF.cpp LoaderIT.cpp LoaderMDL.cpp LoaderMOD.cpp LoaderMTM.cpp LoaderMXM.cpp LoaderOKT.cpp LoaderPLM.cpp LoaderPSM.cpp LoaderPTM.cpp LoaderS3M.cpp LoaderSTM.cpp LoaderULT.cpp LoaderUNI.cpp LoaderXM.cpp MasterMixer.cpp PlayerBase.cpp PlayerFAR.cpp PlayerGeneric.cpp PlayerIT.cpp PlayerSTD.cpp ResamplerFactory.cpp SampleLoaderAIFF.cpp SampleLoaderALL.cpp SampleLoaderAbstract.cpp SampleLoaderGeneric.cpp SampleLoaderIFF.cpp SampleLoaderWAV.cpp XIInstrument.cpp XMFile.cpp XModule.cpp ) set( HEADERS AudioDriverBase.h AudioDriverManager.h AudioDriver_COMPENSATE.h AudioDriver_NULL.h AudioDriver_WAVWriter.h ChannelMixer.h LittleEndian.h Loaders.h MasterMixer.h MilkyPlay.h MilkyPlayCommon.h MilkyPlayResults.h MilkyPlayTypes.h Mixable.h PlayerBase.h PlayerFAR.h PlayerGeneric.h PlayerIT.h PlayerSTD.h ResamplerAmiga.h ResamplerCubic.h ResamplerFactory.h ResamplerFast.h ResamplerMacros.h ResamplerSinc.h SampleLoaderAIFF.h SampleLoaderALL.h SampleLoaderAbstract.h SampleLoaderGeneric.h SampleLoaderIFF.h SampleLoaderWAV.h XIInstrument.h XMFile.h XModule.h computed-blep.h ) # Add platform-specific sources, include paths and definitions if(APPLE) list(APPEND SOURCES drivers/osx/AudioDriver_COREAUDIO.mm) list(APPEND HEADERS drivers/osx/AudioDriver_COREAUDIO.h) include_directories( ${PROJECT_SOURCE_DIR}/src/milkyplay/drivers/osx ) message(STATUS "Enabled Core Audio support") elseif(WIN32) # Basic WaveOut support list(APPEND SOURCES drivers/windows/AudioDriver_MMSYSTEM.cpp) list(APPEND HEADERS drivers/windows/AudioDriver_MMSYSTEM.h) include_directories(${PROJECT_SOURCE_DIR}/src/milkyplay/drivers/windows) message(STATUS "Enabled WaveOut support") # Build sources from RtAudio Git submodule if present set(RTAUDIO_SUBMODULE_DIR ${PROJECT_SOURCE_DIR}/src/submodules/rtaudio) if(EXISTS ${RTAUDIO_SUBMODULE_DIR}/RtAudio.cpp) message(STATUS "Enabled RtAudio support") list( APPEND SOURCES ${RTAUDIO_SUBMODULE_DIR}/include/asio.cpp ${RTAUDIO_SUBMODULE_DIR}/include/asiodrivers.cpp ${RTAUDIO_SUBMODULE_DIR}/include/asiolist.cpp ${RTAUDIO_SUBMODULE_DIR}/include/iasiothiscallresolver.cpp ${RTAUDIO_SUBMODULE_DIR}/RtAudio.cpp drivers/generic/AudioDriver_RTAUDIO.cpp drivers/generic/RtAudio4Impl.cpp ) list( APPEND HEADERS ${RTAUDIO_SUBMODULE_DIR}/include/asio.h ${RTAUDIO_SUBMODULE_DIR}/include/asiodrivers.h ${RTAUDIO_SUBMODULE_DIR}/include/asiodrvr.h ${RTAUDIO_SUBMODULE_DIR}/include/asiolist.h ${RTAUDIO_SUBMODULE_DIR}/include/asiosys.h ${RTAUDIO_SUBMODULE_DIR}/include/dsound.h ${RTAUDIO_SUBMODULE_DIR}/include/FunctionDiscoveryKeys_devpkey.h ${RTAUDIO_SUBMODULE_DIR}/include/ginclude.h ${RTAUDIO_SUBMODULE_DIR}/include/iasiodrv.h ${RTAUDIO_SUBMODULE_DIR}/include/iasiothiscallresolver.h ${RTAUDIO_SUBMODULE_DIR}/include/soundcard.h ${RTAUDIO_SUBMODULE_DIR}/RtAudio.h drivers/generic/AudioDriver_RTAUDIO.h ) include_directories( ${PROJECT_SOURCE_DIR}/src/milkyplay/drivers/generic ${RTAUDIO_SUBMODULE_DIR} ${RTAUDIO_SUBMODULE_DIR}/include ) add_definitions( -D__WINDOWS_DS__ -D__WINDOWS_ASIO__ -D__WINDOWS_WASAPI__ ) else() add_definitions(-D__SKIPRTAUDIO__) message("RtAudio support disabled (RtAudio unavailable)") endif() else() add_definitions(-DDRIVER_UNIX) if(ALSA_FOUND) list(APPEND SOURCES drivers/alsa/AudioDriver_ALSA.cpp) list(APPEND HEADERS drivers/alsa/AudioDriver_ALSA.h) add_definitions(-DHAVE_LIBASOUND) include_directories( ${PROJECT_SOURCE_DIR}/src/milkyplay/drivers/alsa ${ALSA_INCLUDE_DIRS} ) message(STATUS "Enabled ALSA support") endif() if(JACK_FOUND) list(APPEND SOURCES drivers/jack/AudioDriver_JACK.cpp) list(APPEND HEADERS drivers/jack/AudioDriver_JACK.h) add_definitions(-DHAVE_JACK_JACK_H) include_directories( ${PROJECT_SOURCE_DIR}/src/milkyplay/drivers/jack ${JACK_INCLUDE_DIRS} ) message(STATUS "Enabled JACK support") endif() if(SDL2_FOUND) list(APPEND SOURCES drivers/sdl/AudioDriver_SDL.cpp) list(APPEND HEADERS drivers/sdl/AudioDriver_SDL.h) include_directories( ${PROJECT_SOURCE_DIR}/src/milkyplay/drivers/sdl ${SDL2_INCLUDE_DIRS} ) message(STATUS "Enabled SDL2 support") endif() endif() add_definitions(-DMILKYTRACKER) include_directories( # Include the CMake-generated version header from the build directory # (version string required when saving modules) ${PROJECT_BINARY_DIR}/src/tracker ${PROJECT_SOURCE_DIR}/src/milkyplay ) add_library(milkyplay ${SOURCES} ${HEADERS}) if(APPLE) target_link_libraries( milkyplay ${COCOA_LIBRARY} ${CORE_AUDIO_LIBRARY} ${CORE_FOUNDATION_LIBRARY} ) elseif(WIN32) target_link_libraries(milkyplay winmm dsound) else() target_link_libraries(milkyplay ${CMAKE_DL_LIBS} ${ALSA_LIBRARIES}) endif() MilkyTracker-1.02.00/src/milkyplay/ChannelMixer.cpp000066400000000000000000001124241324432207300221420ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * ChannelMixer.cpp * MilkyPlay mixer class * * * "- Be prepared! Are you sure you want to know? :-)" * * This class is pretty much emulating a Gravis Ultrasound with a timer set to 250Hz * I.e. the mixer() routine will call a user specified handler 250 times per second * while mixing the audio stream in between. */ #include "ChannelMixer.h" #include "ResamplerFactory.h" #include "ResamplerMacros.h" #include "AudioDriverManager.h" #include // Ramp out will last (THEBEATLENGTH*RAMPDOWNFRACTION)>>8 samples #define RAMPDOWNFRACTION 256 static inline mp_sint32 myMod(mp_sint32 a, mp_sint32 b) { mp_sint32 r = a % b; return r < 0 ? b + r : r; } /* "I've found out that FT2 uses the square root pan law, which is close to the linear pan law, but it stresses samples that are played on the far left and right. Note that its indices range from 0 to 256, while the internal panning ranges from 0 to 255, meaning that there is no true 100% right panning, only 100% left is possible." - Saga_Musix @ http://modarchive.org/forums/index.php?topic=3517.0 */ mp_sint32 ChannelMixer::panLUT[257]; void ChannelMixer::panToVol (ChannelMixer::TMixerChannel *chn, mp_sint32 &volL, mp_sint32 &volR) { mp_sint32 pan = (((chn->pan - 128)*panningSeparation) >> 8) + 128; if (pan < 0) pan = 0; if (pan > 255) pan = 255; volL = (chn->vol*panLUT[256-pan]*masterVolume); volR = (chn->vol*panLUT[pan]*masterVolume); if (chn->flags&MP_SAMPLE_MUTE) volL = volR = 0; } void ChannelMixer::ResamplerBase::addChannelsNormal(ChannelMixer* mixer, mp_uint32 numChannels, mp_sint32* buffer32,mp_sint32 beatNum, mp_sint32 beatlength) { ChannelMixer::TMixerChannel* channel = mixer->channel; ChannelMixer::TMixerChannel* newChannel = mixer->newChannel; for (mp_uint32 c=0;cindex = c; // For Amiga resampler if (!(chn->flags & MP_SAMPLE_PLAY)) continue; switch (chn->flags&(MP_SAMPLE_FADEOUT|MP_SAMPLE_FADEIN|MP_SAMPLE_FADEOFF)) { case MP_SAMPLE_FADEOFF: { chn->flags&=~(MP_SAMPLE_PLAY | MP_SAMPLE_FADEOFF); continue; } case MP_SAMPLE_FADEOUT: { chn->sample = newChannel[c].sample; chn->smplen = newChannel[c].smplen; chn->loopstart = newChannel[c].loopstart; chn->loopend = newChannel[c].loopend; chn->smppos = newChannel[c].smppos; chn->smpposfrac = newChannel[c].smpposfrac; chn->flags = newChannel[c].flags; chn->loopendcopy = newChannel[c].loopendcopy; chn->fixedtime = newChannel[c].fixedtimefrac; chn->fixedtimefrac = newChannel[c].fixedtimefrac; // break is missing here intentionally!!! } default: { mixer->panToVol(chn, chn->finalvoll, chn->finalvolr); break; } } // mix here addChannel(chn, buffer32, beatlength, beatlength); } } void ChannelMixer::ResamplerBase::addChannelsRamping(ChannelMixer* mixer, mp_uint32 numChannels, mp_sint32* buffer32,mp_sint32 beatNum, mp_sint32 beatlength) { ChannelMixer::TMixerChannel* channel = mixer->channel; ChannelMixer::TMixerChannel* newChannel = mixer->newChannel; for (mp_uint32 c=0;cindex = c; // For Amiga resampler if (!(chn->flags & MP_SAMPLE_PLAY)) continue; switch (chn->flags&(MP_SAMPLE_FADEOUT|MP_SAMPLE_FADEIN|MP_SAMPLE_FADEOFF)) { case MP_SAMPLE_FADEOFF: { mp_sint32 maxramp = (beatlength*RAMPDOWNFRACTION)>>8; mp_sint32 beatl = (!(chn->flags & 3)) ? (ChannelMixer::fixedmul(chn->loopend,chn->rsmpadd) >> 1) : maxramp; if (beatl > maxramp || beatl <= 0) beatl = maxramp; chn->rampFromVolStepL = (-chn->finalvoll)/beatl; chn->rampFromVolStepR = (-chn->finalvolr)/beatl; if (beatl) addChannel(chn, buffer32, beatl, beatlength); chn->flags&=~(MP_SAMPLE_PLAY | MP_SAMPLE_FADEOFF); continue; } case MP_SAMPLE_FADEIN: { chn->flags = (chn->flags&~(MP_SAMPLE_FADEOUT|MP_SAMPLE_FADEIN))/*|MP_SAMPLE_FADEIN*/; //mp_sint32 beatl = (beatlength*RAMPDOWNFRACTION)>>8; mp_sint32 maxramp = (beatlength*RAMPDOWNFRACTION)>>8; mp_sint32 beatl = (!(chn->flags & 3)) ? (ChannelMixer::fixedmul(chn->loopend,chn->rsmpadd) >> 1) : maxramp; if (beatl > maxramp || beatl <= 0) beatl = maxramp; mp_sint32 volL, volR; mixer->panToVol(chn, volL, volR); chn->rampFromVolStepL = (volL-chn->finalvoll)/beatl; chn->rampFromVolStepR = (volR-chn->finalvolr)/beatl; // mix here if (beatl) addChannel(chn, buffer32, beatl, beatlength); //chn->finalvoll = volL; //chn->finalvolr = volR; chn->rampFromVolStepL = 0; chn->rampFromVolStepR = 0; mp_sint32 offset = beatl; beatl = beatlength - beatl; if (beatl) addChannel(chn, buffer32+offset*MP_NUMCHANNELS, beatl, beatlength); break; } case MP_SAMPLE_FADEOUT: { mp_sint32 maxramp = (beatlength*RAMPDOWNFRACTION)>>8; mp_sint32 beatl = (!(chn->flags & 3)) ? (ChannelMixer::fixedmul(chn->loopend,chn->rsmpadd) >> 1) : maxramp; if (beatl > maxramp || beatl <= 0) beatl = maxramp; chn->rampFromVolStepL = (0-chn->finalvoll)/beatl; chn->rampFromVolStepR = (0-chn->finalvolr)/beatl; chn->flags = (chn->flags&~(MP_SAMPLE_FADEOUT|MP_SAMPLE_FADEIN))/*|MP_SAMPLE_FADEIN*/; // for the last active sample we need to retrieve the last active sample rate // which is temporarly stored in newChannel[c] // get it, fill it in and restore the original value later mp_sint32 tmpsmpadd = chn->smpadd; mp_sint32 tmprsmpadd = chn->rsmpadd; mp_sint32 tmpcurrsample = chn->currsample; mp_sint32 tmpprevsample = chn->prevsample; mp_sint32 tmpa = chn->a; mp_sint32 tmpb = chn->b; mp_sint32 tmpc = chn->c; chn->smpadd = newChannel[c].smpadd; chn->rsmpadd = newChannel[c].rsmpadd; chn->currsample = newChannel[c].currsample; chn->prevsample = newChannel[c].prevsample; chn->a = newChannel[c].a; chn->b = newChannel[c].b; chn->c = newChannel[c].c; if (beatl) addChannel(chn, buffer32, beatl, beatlength); chn->smpadd = tmpsmpadd; chn->rsmpadd = tmprsmpadd; chn->currsample = tmpcurrsample; chn->prevsample = tmpprevsample; chn->a = tmpa; chn->b = tmpb; chn->c = tmpc; // fade in new sample chn->sample = newChannel[c].sample; chn->smplen = newChannel[c].smplen; chn->loopstart = newChannel[c].loopstart; chn->loopend = newChannel[c].loopend; chn->smppos = newChannel[c].smppos; chn->smpposfrac = newChannel[c].smpposfrac; chn->flags = newChannel[c].flags; chn->loopendcopy = newChannel[c].loopendcopy; chn->fixedtime = newChannel[c].fixedtimefrac; chn->fixedtimefrac = newChannel[c].fixedtimefrac; beatl = (!(chn->flags & 3)) ? (ChannelMixer::fixedmul(chn->loopend,chn->rsmpadd) >> 1) : maxramp; if (beatl > maxramp || beatl <= 0) beatl = maxramp; mp_sint32 volL, volR; mixer->panToVol(chn, volL, volR); chn->rampFromVolStepL = volL/beatl; chn->rampFromVolStepR = volR/beatl; chn->finalvoll = chn->finalvolr = 0; if (beatl) addChannel(chn, buffer32, beatl, beatlength); chn->rampFromVolStepL = 0; chn->rampFromVolStepR = 0; mp_sint32 offset = beatl; beatl = beatlength - beatl; if (beatl) addChannel(chn, buffer32+offset*MP_NUMCHANNELS, beatl, beatlength); continue; } default: { mp_sint32 volL, volR; mixer->panToVol(chn, volL, volR); chn->rampFromVolStepL = (volL-chn->finalvoll)/beatlength; chn->rampFromVolStepR = (volR-chn->finalvolr)/beatlength; // mix here addChannel(chn, buffer32, beatlength, beatlength); //chn->finalvoll = volL; //chn->finalvolr = volR; break; } } } } void ChannelMixer::ResamplerBase::addChannels(ChannelMixer* mixer, mp_uint32 numChannels, mp_sint32* buffer32,mp_sint32 beatNum, mp_sint32 beatlength) { if (beatNum >= (signed)mixer->getNumBeatPackets()) beatNum = mixer->getNumBeatPackets(); if (isRamping()) addChannelsRamping(mixer, numChannels, buffer32, beatNum, beatlength); else addChannelsNormal(mixer, numChannels, buffer32, beatNum, beatlength); } void ChannelMixer::ResamplerBase::addChannel(TMixerChannel* chn, mp_sint32* buffer32, const mp_sint32 beatlength, const mp_sint32 beatSize) { if ((chn->flags&MP_SAMPLE_PLAY)) { /* check for computational work */ mp_sint32 d = ChannelMixer::fixedmul((chn->loopend - chn->loopstart)<<4,chn->rsmpadd); /* just a threshold value: */ /* if distance between loopend and loopstart is very small and sample */ /* step is "big" we need to many divisions to compute remaining sample */ /* packets so add a full checked channel */ if ((d<128 && supportsFullChecking()) || (supportsFullChecking() && !supportsNoChecking())) { addBlockFull((buffer32), chn, (beatlength)); } else { mp_sint32* tempBuffer32 = (buffer32); mp_sint32 todo = (beatlength); bool limit = false; while (todo>0) { if (chn->flags&MP_SAMPLE_BACKWARD) { mp_sint32 pos = ((todo*-chn->smpadd - chn->smpposfrac)>>16)+chn->smppos; if (pos>chn->loopstart) { addBlockNoCheck(tempBuffer32,chn,todo); break; } else { mp_sint32 length = MP_FP_CEIL(ChannelMixer::fixedmul((((chn->smppos-chn->loopstart)<<16)+chn->smpposfrac),chn->rsmpadd)); if (!length) length++; if (length>todo) { // Final mixing length is limited by the remaining buffer size length = todo; // Mark that we're limited limit = true; } /* sample is going to stop => fade out because of ending clicks*/ else if ((chn->flags & 3) == 0) { mp_sint32 maxramp = (beatSize*RAMPDOWNFRACTION)>>8; mp_sint32 rampl = ChannelMixer::fixedmul(chn->loopend,chn->rsmpadd) >> 1; if (rampl > maxramp || rampl <= 0) rampl = maxramp; if (rampl < length) { length = length-rampl; addBlockNoCheck(tempBuffer32,chn,length); tempBuffer32+=length*MP_NUMCHANNELS; length = rampl; } chn->rampFromVolStepL = (-chn->finalvoll)/length; chn->rampFromVolStepR = (-chn->finalvolr)/length; } addBlockNoCheck(tempBuffer32, chn, length); // Only stop when we're not limited, otherwise the sample will continue playing if ((chn->flags & 3) == 0 && !limit) { if (chn->flags & MP_SAMPLE_ONESHOT) { chn->flags &= ~MP_SAMPLE_ONESHOT; chn->flags |= 1; chn->loopstart = chn->loopendcopy; chn->smppos = chn->smplen - myMod(chn->smplen - chn->smppos, chn->loopend-chn->loopstart); } else chn->flags&=~MP_SAMPLE_PLAY; break; } else if ((chn->flags & 3) == 1) { // Is this correct looping?? chn->smppos = chn->loopend - myMod(chn->loopend - chn->smppos, chn->loopend-chn->loopstart); } // Check if we went out of ping-pong loop bounds else if (chn->smppos < chn->loopstart) { // Invert chn->flags&=~MP_SAMPLE_BACKWARD; BIDIR_REPOSITION(16, chn->smppos, chn->smpposfrac, chn->loopstart, chn->loopend); } tempBuffer32+=length*MP_NUMCHANNELS; todo-=length; } } else { mp_sint32 pos = ((todo*chn->smpadd + chn->smpposfrac)>>16)+chn->smppos; if (posloopend) { addBlockNoCheck(tempBuffer32,chn,todo); break; } else { mp_sint32 length = MP_FP_CEIL(ChannelMixer::fixedmul((((chn->loopend-chn->smppos)<<16)-chn->smpposfrac),chn->rsmpadd)); if (!length) length++; if (length>todo) { length = todo; limit = true; } /* sample is going to stop => fade out because of ending clicks */ else if ((chn->flags & 3) == 0) { mp_sint32 maxramp = (beatSize*RAMPDOWNFRACTION)>>8; mp_sint32 rampl = ChannelMixer::fixedmul(chn->loopend,chn->rsmpadd) >> 1; if (rampl > maxramp || rampl <= 0) rampl = maxramp; if (rampl < length) { length = length-rampl; addBlockNoCheck(tempBuffer32,chn,length); tempBuffer32+=length*MP_NUMCHANNELS; length = rampl; } chn->rampFromVolStepL = (-chn->finalvoll)/length; chn->rampFromVolStepR = (-chn->finalvolr)/length; } addBlockNoCheck(tempBuffer32,chn,length); if ((chn->flags & 3) == 0 && !limit) { if (chn->flags & MP_SAMPLE_ONESHOT) { chn->flags &= ~MP_SAMPLE_ONESHOT; chn->flags |= 1; chn->loopend = chn->loopendcopy; /*ASSERT(chn->loopend-chn->loopstart > 0);*/ chn->smppos = ((chn->smppos - chn->smplen)%(chn->loopend-chn->loopstart))+chn->loopstart; } else chn->flags&=~MP_SAMPLE_PLAY; break; } else if ((chn->flags & 3) == 1) { /*ASSERT(chn->loopend-chn->loopstart > 0);*/ chn->smppos = ((chn->smppos - chn->loopstart)%(chn->loopend-chn->loopstart))+chn->loopstart; /* correct if pre-calculation was a little bit incorrect*/ if (chn->smppos < 0) chn->smppos = 0; } else if (chn->smppos >= chn->loopend) { // Invert chn->flags|=MP_SAMPLE_BACKWARD; BIDIR_REPOSITION(16, chn->smppos, chn->smpposfrac, chn->loopstart, chn->loopend); } tempBuffer32+=length*MP_NUMCHANNELS; todo-=length; } } } } } } void ChannelMixer::muteChannel(mp_sint32 c, bool m) { channel[c].flags&=~MP_SAMPLE_MUTE; if (m) channel[c].flags|=MP_SAMPLE_MUTE; } bool ChannelMixer::isChannelMuted(mp_sint32 c) { return (channel[c].flags&MP_SAMPLE_MUTE) == MP_SAMPLE_MUTE; } void ChannelMixer::setFrequency(mp_sint32 frequency) { if (frequency == (signed)mixFrequency) return; mixFrequency = frequency; rMixFrequency = 0x7FFFFFFF / frequency; beatPacketSize = (MP_BEATLENGTH*frequency)/MP_BASEFREQ; if (mixbuffBeatPacket) { delete[] mixbuffBeatPacket; mixbuffBeatPacket = NULL; } mixbuffBeatPacket = new mp_sint32[beatPacketSize*MP_NUMCHANNELS]; // channels contain information based on beatPacketSize so this might // have been changed reallocChannels(); if (resamplerType != MIXER_INVALID && resamplerTable[resamplerType]) resamplerTable[resamplerType]->setFrequency(frequency); } void ChannelMixer::reallocChannels() { // optimization in case we already have the allocated number of channels if (mixerNumAllocatedChannels != mixerLastNumAllocatedChannels) { delete[] channel; channel = new TMixerChannel[mixerNumAllocatedChannels]; delete[] newChannel; newChannel = new TMixerChannel[mixerNumAllocatedChannels]; clearChannels(); } #if defined(MILKYTRACKER) || defined (__MPTIMETRACKING__) for (mp_uint32 i = 0; i < mixerNumAllocatedChannels; i++) channel[i].reallocTimeRecord(getNumBeatPackets()+1); #endif mixerLastNumAllocatedChannels = mixerNumAllocatedChannels; if (resamplerType != MIXER_INVALID && resamplerTable[resamplerType]) resamplerTable[resamplerType]->setNumChannels(mixerNumAllocatedChannels); } void ChannelMixer::clearChannels() { for (mp_uint32 i = 0; i < mixerNumAllocatedChannels; i++) { channel[i].clear(); newChannel[i].clear(); } } ChannelMixer::ChannelMixer(mp_uint32 numChannels, mp_uint32 frequency) : mixerNumAllocatedChannels(numChannels), mixerNumActiveChannels(numChannels), mixerLastNumAllocatedChannels(0), mixFrequency(0), mixbuffBeatPacket(NULL), mixBufferSize(0), channel(NULL), newChannel(NULL), resamplerType(MIXER_INVALID), paused(false), disableMixing(false), allowFilters(false), initialized(false), sampleCounter(0) { memset(resamplerTable, 0, sizeof(resamplerTable)); setFrequency(frequency); // full volume masterVolume = 256; panningSeparation = 256; for (mp_sint32 i = 0; i < NUMRESAMPLERTYPES; i++) { setFreqFuncTable[i] = &ChannelMixer::setChannelFrequency; resamplerTable[i] = NULL; } setResamplerType(MIXER_NORMAL); setBufferSize(BUFFERSIZE_DEFAULT); // FT2 panning law if (panLUT[1] == 0) for (int i = 0; i <= 256; i++) panLUT[i] = static_cast (8192.0 * sqrt(i/256.0) + 0.5); } ChannelMixer::~ChannelMixer() { if (initialized) { closeDevice(); } if (mixbuffBeatPacket) delete[] mixbuffBeatPacket; if (channel) delete[] channel; if (newChannel) delete[] newChannel; for (mp_uint32 i = 0; i < sizeof(resamplerTable) / sizeof(ResamplerBase*); i++) delete resamplerTable[i]; } void ChannelMixer::resetChannelsWithoutMuting() { mp_ubyte* isMuted = new mp_ubyte[mixerNumAllocatedChannels]; // save muting mp_uint32 i; for (i = 0; i < mixerNumAllocatedChannels; i++) isMuted[i] = (mp_ubyte)isChannelMuted(i); clearChannels(); for (i = 0; i < mixerNumAllocatedChannels; i++) muteChannel(i, isMuted[i] == 1); delete[] isMuted; lastBeatRemainder = 0; } void ChannelMixer::resetChannelsFull() { clearChannels(); lastBeatRemainder = 0; } void ChannelMixer::setResamplerType(ResamplerTypes type) { if (resamplerTable[type] == NULL) resamplerTable[type] = ResamplerFactory::createResampler(type); resamplerType = type; if (resamplerType != MIXER_INVALID && resamplerTable[resamplerType]) { resamplerTable[resamplerType]->setFrequency(mixFrequency); resamplerTable[resamplerType]->setNumChannels(mixerNumAllocatedChannels); } } void ChannelMixer::setNumChannels(mp_uint32 num) { if (num > mixerNumAllocatedChannels) { mixerNumAllocatedChannels = num; reallocChannels(); resetChannelsFull(); } else { mixerNumAllocatedChannels = num; resetChannelsWithoutMuting(); } } void ChannelMixer::setActiveChannels(mp_uint32 num) { if (num > mixerNumAllocatedChannels) { mixerNumAllocatedChannels = num; reallocChannels(); resetChannelsFull(); } mixerNumActiveChannels = num; } // Default lo precision calculations void ChannelMixer::setChannelFrequency(mp_sint32 c, mp_sint32 f) { channel[c].smpadd = ((mp_sint32)(((mp_int64)((mp_int64)f*(mp_int64)rMixFrequency))>>15))<<0; if (channel[c].smpadd) channel[c].rsmpadd = 0xFFFFFFFF/channel[c].smpadd; else channel[c].rsmpadd = 0; } void ChannelMixer::setFilterAttributes(mp_sint32 chn, mp_sint32 cutoff, mp_sint32 resonance) { if (!allowFilters || (channel[chn].cutoff == cutoff && channel[chn].resonance == resonance)) return; channel[chn].cutoff = cutoff; channel[chn].resonance = resonance; if (cutoff == MP_INVALID_VALUE || resonance == MP_INVALID_VALUE) return; // Thanks to DUMB for the filter coefficient computations const float LOG10 = 2.30258509299f; const mp_sint32 IT_ENVELOPE_SHIFT = 8; float a, b, c; { float sampfreq = this->mixFrequency; float inv_angle = (float)(sampfreq * pow(0.5, 0.25 + cutoff*(1.0/(24< 2.0f) d = 2.0f; d = (loss - d) * inv_angle; e = inv_angle * inv_angle; a = 1.0f / (1.0f + d + e); c = -e * a; b = 1.0f - a - c; #else a = 1.0f / (inv_angle*inv_angle + inv_angle*loss + loss); c = -(inv_angle*inv_angle) * a; b = 1.0f - a - c; #endif } channel[chn].a = (mp_sint32)(a * (1 << (MP_FILTERPRECISION+16))); channel[chn].b = (mp_sint32)(b * (1 << (MP_FILTERPRECISION+16))); channel[chn].c = (mp_sint32)(c * (1 << (MP_FILTERPRECISION+16))); } void ChannelMixer::playSample(mp_sint32 c, // channel mp_sbyte* smp, // sample buffer mp_sint32 smplen, // sample size mp_sint32 smpoffs, // sample offset mp_sint32 smpoffsfrac, bool smpOffsetWrap, mp_sint32 lstart, // loop start mp_sint32 len, // loop end mp_sint32 flags, bool ramp/* = true*/) { // doesn't play if (smp == NULL) return; // disable looping when loopstart = loopend if (lstart == len) { flags &= ~(3+32); lstart = 0; len = smplen; } // this is not allowed, assume bidir loop when both forward and biloop settings are made if ((flags & 3) == 3) flags &= ~1; // stupid check if artists are to stupid to use a valid sampleoffset // seems to be correct // treat bidir looped samples as normal samples if (((flags & 3) == 2) || !(flags&3)) { if (smpoffs >= len) { if (smpOffsetWrap) return; else { stopSample(c); return; } } } // below offset correction code only works for forward played samples // to-do: add offset correction code for bi-dir loops else if ((flags & 3) == 1) { if (smpOffsetWrap) { if (smpoffs > len) { smpoffs = ((smpoffs - lstart)%(len-lstart))+lstart; } else if (smpoffs == len && smpoffsfrac) { smpoffs = lstart; } } else { if (smpoffs >= len) { stopSample(c); return; } } } // play sample but don't ramp volume if (!ramp) { channel[c].sample=(mp_sbyte*)smp; channel[c].smplen = smplen; channel[c].loopstart=lstart; channel[c].loopend=len; if (flags & MP_SAMPLE_BACKWARD) channel[c].smppos = smplen - smpoffs; else channel[c].smppos = smpoffs; channel[c].smpposfrac = smpoffsfrac; channel[c].flags&=~MP_SAMPLE_FADEOFF; channel[c].flags=flags|MP_SAMPLE_PLAY|(channel[c].flags&MP_SAMPLE_MUTE); channel[c].currsample = channel[c].prevsample = 0; channel[c].fixedtime = 0; channel[c].fixedtimefrac = smpoffsfrac; } // currently no sample playing on that channel else if (!(channel[c].flags&MP_SAMPLE_PLAY)) { channel[c].sample=(mp_sbyte*)smp; channel[c].smplen = smplen; channel[c].loopstart=lstart; channel[c].loopend=len; if (flags & MP_SAMPLE_BACKWARD) channel[c].smppos = smplen - smpoffs; else channel[c].smppos = smpoffs; channel[c].smpposfrac = smpoffsfrac; channel[c].flags&=~MP_SAMPLE_FADEOFF; channel[c].flags=flags|MP_SAMPLE_PLAY|(channel[c].flags&MP_SAMPLE_MUTE)|MP_SAMPLE_FADEIN; // if a new sample is played, its volume is ramped from zero to current volume channel[c].finalvoll = 0; channel[c].finalvolr = 0; // one shot looping sample? if (flags & 32) { // Not looping yet channel[c].flags &= ~(3+32); channel[c].flags |= MP_SAMPLE_ONESHOT; if (flags & MP_SAMPLE_BACKWARD) { channel[c].loopendcopy = channel[c].loopstart; channel[c].loopstart = 0; } else { channel[c].loopendcopy = channel[c].loopend; channel[c].loopend = channel[c].smplen; } } channel[c].currsample = channel[c].prevsample = 0; channel[c].fixedtime = 0; channel[c].fixedtimefrac = smpoffsfrac; } // there is a sample playing on that channel, ramp volume of current sample down // then play new sample and ramp volume up else { newChannel[c].sample=(mp_sbyte*)smp; newChannel[c].smplen = smplen; newChannel[c].loopstart = lstart; newChannel[c].loopend = len; if (flags & MP_SAMPLE_BACKWARD) newChannel[c].smppos = smplen - smpoffs; else newChannel[c].smppos = smpoffs; newChannel[c].smpposfrac = smpoffsfrac; newChannel[c].flags=flags|MP_SAMPLE_PLAY|(channel[c].flags&MP_SAMPLE_MUTE); // if a new sample is played, its volume is ramped from zero to current volume newChannel[c].finalvoll = newChannel[c].finalvolr = 0; newChannel[c].currsample = newChannel[c].prevsample = 0; newChannel[c].fixedtime = 0; newChannel[c].fixedtimefrac = smpoffsfrac; // "fade off" current sample channel[c].flags = (channel[c].flags&~(MP_SAMPLE_FADEOUT|MP_SAMPLE_FADEIN|MP_SAMPLE_FADEOFF))|MP_SAMPLE_FADEOUT; // one shot looping sample? if (flags & 32) { // Not looping yet newChannel[c].flags &= ~(3+32); newChannel[c].flags |= MP_SAMPLE_ONESHOT; if (flags & MP_SAMPLE_BACKWARD) { newChannel[c].loopendcopy = newChannel[c].loopstart; newChannel[c].loopstart = 0; } else { newChannel[c].loopendcopy = newChannel[c].loopend; newChannel[c].loopend = newChannel[c].smplen; } } } } static inline void storeTimeRecordData(mp_sint32 nb, ChannelMixer::TMixerChannel* chn) { if (!(chn->flags & ChannelMixer::MP_SAMPLE_PLAY)) { if (chn->timeRecord) { chn->timeRecord[nb].flags = chn->flags; chn->timeRecord[nb].sample = NULL; chn->timeRecord[nb].volPan = 128 << 16; chn->timeRecord[nb].smppos = -1; } } else { if (chn->timeRecord) { chn->timeRecord[nb].flags = chn->flags; chn->timeRecord[nb].sample = chn->sample; chn->timeRecord[nb].smppos = chn->smppos; chn->timeRecord[nb].volPan = chn->vol + (chn->pan << 16); chn->timeRecord[nb].smpposfrac = chn->smpposfrac; chn->timeRecord[nb].smpadd = chn->smpadd; chn->timeRecord[nb].smplen = chn->smplen; if (chn->flags & ChannelMixer::MP_SAMPLE_ONESHOT) chn->timeRecord[nb].loopend = chn->loopendcopy; else chn->timeRecord[nb].loopend = chn->loopend; chn->timeRecord[nb].loopstart = chn->loopstart; chn->timeRecord[nb].fixedtime = chn->fixedtime; chn->timeRecord[nb].fixedtimefrac = chn->fixedtimefrac; } } } void ChannelMixer::mix(mp_sint32* mixbuff32, mp_uint32 bufferSize) { updateSampleCounter(bufferSize); if (!isPlaying()) return; if (!paused) { mp_sint32* buffer = mixbuff32; mp_sint32 beatLength = beatPacketSize; mp_sint32 mixSize = mixBufferSize; mp_sint32 done = 0; if (lastBeatRemainder) { mp_sint32 todo = lastBeatRemainder; if (lastBeatRemainder > mixBufferSize) { todo = mixBufferSize; mp_uint32 pos = beatLength - lastBeatRemainder; //memcpy(buffer, mixbuffBeatPacket + pos*MP_NUMCHANNELS, todo*MP_NUMCHANNELS*sizeof(mp_sint32)); const mp_sint32* src = mixbuffBeatPacket + pos*MP_NUMCHANNELS; mp_sint32* dst = buffer; for (mp_sint32 i = 0; i < todo*MP_NUMCHANNELS; i++, src++, dst++) *dst += *src; done = mixBufferSize; lastBeatRemainder-=done; } else { mp_uint32 pos = beatLength - lastBeatRemainder; //memcpy(buffer, mixbuffBeatPacket + pos*MP_NUMCHANNELS, todo*MP_NUMCHANNELS*sizeof(mp_sint32)); const mp_sint32* src = mixbuffBeatPacket + pos*MP_NUMCHANNELS; mp_sint32* dst = buffer; for (mp_sint32 i = 0; i < todo*MP_NUMCHANNELS; i++, src++, dst++) *dst += *src; buffer+=lastBeatRemainder*MP_NUMCHANNELS; mixSize-=lastBeatRemainder; done = lastBeatRemainder; lastBeatRemainder = 0; } } if (done < (mp_sint32)mixBufferSize) { const mp_sint32 numbeats = /*numBeatPackets*/mixSize / beatLength; done+=numbeats*beatLength; mp_sint32 nb; const bool isRamping = this->isRamping(); for (nb=0;nbmixerNumActiveChannels; if (allowFilters) { // this is crucial for volume ramping, store current // active sample rate (stored in the step values for each channel) // and also filter coefficients and last samples for (mp_uint32 c = 0; c < mixerNumActiveChannels; c++, src++, dst++) { dst->smpadd = src->smpadd; dst->rsmpadd = src->rsmpadd; dst->a = src->a; dst->b = src->b; dst->c = src->c; dst->currsample = src->currsample; dst->prevsample = src->prevsample; } } else { // this is crucial for volume ramping, store current // active sample rate (stored in the step values for each channel) // and also filter coefficients and last samples for (mp_uint32 c = 0; c < mixerNumActiveChannels; c++, src++, dst++) { dst->smpadd = src->smpadd; dst->rsmpadd = src->rsmpadd; } } } timer(nb); if (!disableMixing) { // do some in between state recording // to be able to show smooth updates even if the buffer is large for (mp_uint32 c=0;cmixerNumActiveChannels; if (allowFilters) { // this is crucial for volume ramping, store current // active sample rate (stored in the step values for each channel) // and also filter coefficients and last samples for (mp_uint32 c = 0; c < mixerNumActiveChannels; c++, src++, dst++) { dst->smpadd = src->smpadd; dst->rsmpadd = src->rsmpadd; dst->a = src->a; dst->b = src->b; dst->c = src->c; dst->currsample = src->currsample; dst->prevsample = src->prevsample; } } else { // this is crucial for volume ramping, store current // active sample rate (stored in the step values for each channel) // and also filter coefficients and last samples for (mp_uint32 c = 0; c < mixerNumActiveChannels; c++, src++, dst++) { dst->smpadd = src->smpadd; dst->rsmpadd = src->rsmpadd; } } } timer(numbeats); if (!disableMixing) { // do some in between state recording // to be able to show smooth updates even if the buffer is large for (mp_uint32 c=0;cmixBufferSize == bufferSize) return MP_OK; if (initialized) { mp_sint32 err = closeDevice(); if (err != MP_OK) return err; } this->mixBufferSize = bufferSize; // channels contain information depending up the buffer size // update those too reallocChannels(); return MP_OK; } mp_sint32 ChannelMixer::getNumActiveChannels() { mp_sint32 i = 0; for (mp_uint32 j = 0; j < mixerNumActiveChannels; j++) if (channel[j].flags & 256) i++; return i; } mp_sint32 ChannelMixer::getBeatIndexFromSamplePos(mp_uint32 smpPos) const { mp_sint32 maxLen = (mixBufferSize/beatPacketSize)-1; if (maxLen < 0) maxLen = 0; mp_sint32 maxSize = maxLen*(mp_sint32)beatPacketSize - 1; if (maxSize < 0) maxSize = 0; if ((signed)smpPos < 0) smpPos = 0; if (smpPos > (unsigned)maxSize) smpPos = maxSize; return smpPos / getBeatPacketSize(); } /*mp_sint32 ChannelMixer::getCurrentSample(mp_sint32 position,mp_sint32 channel) { if (position < 0) { position = abs(position); } if (position > (mp_sint32)mixBufferSize-1) { position %= mixBufferSize*2; position -= mixBufferSize; position = mixBufferSize-1-position; } mp_sint32 val = (mp_sword)mixbuff32[position*MP_NUMCHANNELS+channel]; if (val < -32768) val = -32768; if (val > 32767) val = 32767; return val; } mp_sint32 ChannelMixer::getCurrentSamplePeak(mp_sint32 position,mp_sint32 channel) { if (audioDriver->supportsTimeQuery()) { mp_sword peak = 0; for (mp_sint32 p = position-mixBufferSize; p <= position; p++) { mp_sword s = getCurrentSample(p, channel); if (s > peak) peak = s; if (-s > peak) peak = -s; } return peak; } else { mp_sword peak = 0; for (mp_uint32 pos = 0; pos < mixBufferSize; pos++) { mp_sint32 s = mixbuff32[pos*MP_NUMCHANNELS+channel]; if (s < -32768) s = -32768; if (s > 32767) s = 32767; if (s > peak) peak = s; if (-s > peak) peak = -s; } return peak; } }*/ mp_uint32 ChannelMixer::getSyncSampleCounter() { /*return audioDriver->getNumPlayedSamples();*/ return 0; } #ifdef __MPTIMETRACKING__ #define FULLMIXER_8BIT_NORMAL_TEMP \ if (sample) { \ sd1 = ((mp_sbyte)sample[smppos])<<8; \ sd2 = ((mp_sbyte)sample[smppos+1])<<8; \ sd1 =((sd1<<12)+(smpposfrac>>4)*(sd2-sd1))>>12; \ buffer[i] = (sd1*vol)>>9; \ } \ else buffer[i] = 0; \ i++; #define FULLMIXER_16BIT_NORMAL_TEMP \ if (sample) { \ sd1 = ((mp_sword*)(sample))[smppos]; \ sd2 = ((mp_sword*)(sample))[smppos+1]; \ sd1 =((sd1<<12)+(smpposfrac>>4)*(sd2-sd1))>>12; \ buffer[i] = (sd1*vol)>>9; \ } \ else buffer[i] = 0; \ i++; #include "ResamplerMacros.h" ///////////////////////////////////////////////////////// // SIMPLE MIXER, NO INTERPOLATION, NO RAMPING // ///////////////////////////////////////////////////////// class ResamplerDummy : public ChannelMixer::ResamplerBase { private: mp_sint32 vol; public: ResamplerDummy(mp_sint32 vol) : vol(vol) { } virtual bool isRamping() { return false; } virtual bool supportsFullChecking() { return true; } virtual bool supportsNoChecking() { return false; } virtual void addBlockFull(mp_sint32* buffer, ChannelMixer::TMixerChannel* chn, mp_uint32 count) { mp_sint32 vol = this->vol; mp_sint32 i = 0; FULLMIXER_TEMPLATE(FULLMIXER_8BIT_NORMAL_TEMP,FULLMIXER_16BIT_NORMAL_TEMP, 16, 0); } }; void ChannelMixer::mixData(mp_sint32 c, mp_sint32* buffer, mp_sint32 count, mp_sint32 sampleShift, mp_sint32 fMul/* = 0*/, mp_sint32 bufferIndex/* = -1*/, mp_sint32 packetIndex/* = -1*/) const { if (fMul == 0) fMul = count; if (packetIndex < 0) packetIndex = 0; const ChannelMixer::TMixerChannel* tempchn = &channel[c]; ChannelMixer::TMixerChannel channel; channel.flags = tempchn->timeRecord[packetIndex].flags; channel.sample = tempchn->timeRecord[packetIndex].sample; channel.smppos = tempchn->timeRecord[packetIndex].smppos; channel.smpposfrac = tempchn->timeRecord[packetIndex].smpposfrac; channel.smpadd = tempchn->timeRecord[packetIndex].smpadd; channel.smplen = tempchn->timeRecord[packetIndex].smplen; channel.loopend = channel.loopendcopy = tempchn->timeRecord[packetIndex].loopend; channel.loopstart = tempchn->timeRecord[packetIndex].loopstart; channel.vol = tempchn->timeRecord[packetIndex].volPan & 0xFFFF; channel.pan = tempchn->timeRecord[packetIndex].volPan >> 16; ChannelMixer::TMixerChannel* chn = &channel; if (startPlay && (chn->flags & MP_SAMPLE_PLAY)) { chn->smpadd = (chn->smpadd*fMul) / (count ? count : 1); mp_sint32 vol = (chn->vol*masterVolume) >> (8 + sampleShift); ResamplerDummy resampler(vol); resampler.addBlockFull(buffer, chn, count); } else { memset(buffer, 0, sizeof(mp_sint32)*count); } } #endif MilkyTracker-1.02.00/src/milkyplay/ChannelMixer.h000066400000000000000000000405351324432207300216120ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * ChannelMixer.h * MilkyPlay * * Created by Peter Barth on Tue Oct 19 2004. * * This class is pretty much emulating a Gravis Ultrasound with a timer set to 250Hz * i.e. mixerHandler() will call a timer routine 250 times per second while mixing * the audio stream in between. */ #ifndef __CHANNELMIXER_H__ #define __CHANNELMIXER_H__ #include "MilkyPlayCommon.h" #include "AudioDriverBase.h" #include "Mixable.h" #define MP_FP_CEIL(x) (((x)+65535)>>16) #define MP_FP_MUL(a, b) ((mp_sint32)(((mp_int64)(a)*(mp_int64)(b))>>16)) #define MP_INCREASESMPPOS(intpart, fracpart, fp, fractbits) \ intpart+=((fp)>>(fractbits)); \ fracpart+=((fp)&(1<<(fractbits))-1); \ if (((fracpart)>>(fractbits))==1) \ { \ intpart++; \ fracpart&=(1<<(fractbits))-1; \ } class ChannelMixer; typedef void (ChannelMixer::*TSetFreq)(mp_sint32 c, mp_sint32 f); class MixerSettings { protected: enum { NUMRESAMPLERTYPES = 21, }; public: // These are arranged in a way, so that the ramping flag toggles with the // LSB (bit 0) if you count through them enum ResamplerTypes { MIXER_NORMAL, MIXER_NORMAL_RAMPING, MIXER_LERPING, MIXER_LERPING_RAMPING, MIXER_LAGRANGE, MIXER_LAGRANGE_RAMPING, MIXER_SPLINE, MIXER_SPLINE_RAMPING, MIXER_SINCTABLE, MIXER_SINCTABLE_RAMPING, MIXER_SINC, MIXER_SINC_RAMPING, MIXER_AMIGA500, MIXER_AMIGA500_RAMPING, MIXER_AMIGA500LED, MIXER_AMIGA500LED_RAMPING, MIXER_AMIGA1200, MIXER_AMIGA1200_RAMPING, MIXER_AMIGA1200LED, MIXER_AMIGA1200LED_RAMPING, MIXER_DUMMY, MIXER_INVALID }; enum { // pretty large buffer for most systems BUFFERSIZE_DEFAULT = 8192 }; }; class ChannelMixer : public MixerSettings, public Mixable { public: enum { // This is the basis for timing & mixing // 250hz timer MP_TIMERFREQ = 250, MP_BASEFREQ = 48000, // is chosen because (48000 % 250) == 0 // period in samples for MP_TIMERFREQ MP_BEATLENGTH = (MP_BASEFREQ/MP_TIMERFREQ), // mixer state flags MP_SAMPLE_FILTERLP = 65536, MP_SAMPLE_MUTE = 32768, MP_SAMPLE_ONESHOT = 8192, MP_SAMPLE_FADEOFF = 4096, MP_SAMPLE_FADEOUT = 2048, MP_SAMPLE_FADEIN = 1024, MP_SAMPLE_PLAY = 256, MP_SAMPLE_BACKWARD = 128, MP_INVALID_VALUE = 0x7FFFFFFF, MP_FILTERPRECISION = 8 }; static inline mp_sint32 fixedmul(mp_sint32 a,mp_sint32 b) { return MP_FP_MUL(a,b); } static inline mp_sint32 fixeddiv(mp_sint32 a,mp_sint32 b) { return ((mp_sint32)(((mp_int64)(a)*65536/(mp_int64)(b)))); } // this is a subset of the channel state which is stored along // with the time progress, so you can do a look up of the state // even with large buffer sizes struct TTimeRecord { mp_uint32 flags; // bit 8 = sample played // bit 9 = sample direction (0 = forward, 1 = backward) // bit 10-11 = sample ticker used to represent ramping states // bit 12 = scheduled to stop // bit 13 = one shot looping // bit 15 = mute channel const mp_sbyte* sample; // pointer to sample mp_sint32 smppos; // 32 bit integer part of sample position mp_sint32 volPan; // 32 bits, upper 16 bits = pan, lower 16 bits = vol mp_sint32 smplen; mp_sint32 smpposfrac; // 16 bit fractional part of sample position mp_sint32 smpadd; // 16:16 fixedpoint increment mp_sint32 loopend; mp_sint32 loopstart; mp_sint32 fixedtime; // for amiga resampler (running time) mp_sint32 fixedtimefrac; // for sinc/amiga resamplers (running time fraction) TTimeRecord() : flags(0), sample(NULL), smppos(0), volPan(0), smplen(0), smpposfrac(0), smpadd(0), loopend(0), loopstart(0), fixedtime(0), fixedtimefrac(0) { } }; struct TMixerChannel { mp_uint32 flags; // bit 8 = sample played // bit 9 = sample direction (0 = forward, 1 = backward) // bit 10-11 = sample ticker used to represent ramping states // bit 12 = scheduled to stop // bit 13 = one shot looping // bit 15 = mute channel const mp_sbyte* sample; // pointer to sample mp_sint32 smplen; mp_sint32 smppos; // 32 bit integer part of sample position mp_sint32 smpposfrac; // 16 bit fractional part of sample position mp_sint32 smpadd; // 16:16 fixed point increment mp_sint32 rsmpadd; // fixed point reciprocal of the increment mp_sint32 loopend; // loop end mp_sint32 loopendcopy; // Temporary placeholder for one-shot looping mp_sint32 loopstart; // loop start mp_sint32 finalvolr; mp_sint32 finalvoll; mp_sint32 vol; mp_sint32 pan; mp_sint32 rampFromVolStepR; mp_sint32 rampFromVolStepL; mp_sint32 a,b,c; // Filter coefficients mp_sint32 currsample; // sample history for filtering mp_sint32 prevsample; // see above mp_sint32 cutoff; mp_sint32 resonance; mp_sint32 fixedtime; // for amiga resampler (running time) mp_sint32 fixedtimefrac; // for sinc/amiga resamplers (running time fraction) mp_uint32 timeRecordSize; TTimeRecord* timeRecord; mp_sint32 index; // For Amiga resampler TMixerChannel() : timeRecordSize(0), timeRecord(NULL) { clear(); } TMixerChannel(bool fastContruction) : timeRecordSize(0), timeRecord(NULL) { } ~TMixerChannel() { if (timeRecord) delete[] timeRecord; } void clear() { flags = 0; sample = NULL; smplen = 0; smppos = 0; smpposfrac = 0; smpadd = 0; rsmpadd = 0; loopend = 0; loopendcopy = 0; loopstart = 0; finalvolr = 0; finalvoll = 0; vol = 0; pan = 128; rampFromVolStepR = 0; rampFromVolStepL = 0; a = b = c = 0; currsample = 0; prevsample = 0; cutoff = MP_INVALID_VALUE; resonance = MP_INVALID_VALUE; fixedtime = 0; fixedtimefrac = 0; index = -1; // is filled during runtime if (timeRecord) memset(timeRecord, 0, sizeof(TTimeRecord) * timeRecordSize); } void reallocTimeRecord(mp_uint32 size) { delete[] timeRecord; timeRecordSize = size; timeRecord = new TTimeRecord[size]; } }; class ResamplerBase { private: // add channels without volume ramping void addChannelsNormal(ChannelMixer* mixer, mp_uint32 numChannels, mp_sint32* buffer32,mp_sint32 beatNum, mp_sint32 beatlength); // add channels with volume ramping void addChannelsRamping(ChannelMixer* mixer, mp_uint32 numChannels, mp_sint32* buffer32,mp_sint32 beatNum, mp_sint32 beatlength); public: virtual ~ResamplerBase() { } void addChannels(ChannelMixer* mixer, mp_uint32 numChannels, mp_sint32* buffer32,mp_sint32 beatNum, mp_sint32 beatlength); void addChannel(TMixerChannel* chn, mp_sint32* buffer32, const mp_sint32 beatlength, const mp_sint32 beatSize); // walk along the sample // intpart is the 32 bit integer part of the position // fracpart is the fractional part of the position // fp is the amount of samples to advance // is the resolution of the fractional part in bits (default is 16) static inline void advanceSamplePosition(mp_sint32& intpart, mp_sint32& fracpart, const mp_sint32 fp, const mp_sint32 fracbits = 16) { MP_INCREASESMPPOS(intpart, fracpart, fp, fracbits); } // if this resampler is doing ramping virtual bool isRamping() = 0; // this resampler can perform a normal block add to the mixing buffer virtual bool supportsNoChecking() = 0; // optional: if this resampler is able to perform a full checked walk along the sample virtual bool supportsFullChecking() = 0; // see above, you will need to implement at least one of the following virtual void addBlockNoCheck(mp_sint32* buffer, TMixerChannel* chn, mp_uint32 count) { // if this is called your own derived resampler is not properly working ASSERT(false); } // see above for comments virtual void addBlockFull(mp_sint32* buffer, TMixerChannel* chn, mp_uint32 count) { ASSERT(false); } // in case the resampler needs to get hold of the current mixing frequency virtual void setFrequency(mp_sint32 frequency) { } // in case the resampler needs to get hold of the current number of channels virtual void setNumChannels(mp_sint32 num) { } }; friend class ChannelMixer::ResamplerBase; private: mp_uint32 mixerNumAllocatedChannels; // Number of channels to be allocated by mixer mp_uint32 mixerNumActiveChannels; // Number of channels to be mixed mp_uint32 mixerLastNumAllocatedChannels; mp_uint32 mixFrequency; // Mixing frequency mp_uint32 rMixFrequency; // 0x7FFFFFFF/mixFrequency mp_sint32* mixbuffBeatPacket; mp_uint32 mixBufferSize; // this is the resulting buffer size in 16 bit words mp_uint32 beatPacketSize; // size of 1/250 of a second in samples mp_uint32 numBeatPackets; // how many of these fit in our buffer size mp_uint32 lastBeatRemainder; // used while filling the buffer, if the buffer is not an exact multiple of beatPacketSize TMixerChannel* channel; TMixerChannel* newChannel; mp_sint32 masterVolume; // mixer master volume mp_sint32 panningSeparation; // panning separation from 0 (mono) to 256 (full stereo) ResamplerTypes resamplerType; TSetFreq setFreqFuncTable[NUMRESAMPLERTYPES]; // If different precisions are used, use other frequency calculation procedures ResamplerBase* resamplerTable[NUMRESAMPLERTYPES]; bool paused; bool disableMixing; bool allowFilters; void setFrequency(mp_sint32 frequency); void mixBeatPacket(mp_uint32 numChannels, mp_sint32* buffer32, mp_sint32 beatPacketIndex, mp_sint32 beatPacketSize) { resamplerTable[resamplerType]->addChannels(this, numChannels, buffer32, beatPacketIndex, beatPacketSize); } inline void timer(mp_uint32 beatIndex) { timerHandler(beatIndex <= getNumBeatPackets() ? beatIndex : getNumBeatPackets()); } void reallocChannels(); void clearChannels(); public: ChannelMixer(mp_uint32 numChannels, mp_uint32 frequency); virtual ~ChannelMixer(); mp_uint32 getMixBufferSize() const { return mixBufferSize; } void mix(mp_sint32* buffer, mp_uint32 numSamples); void updateSampleCounter(mp_sint32 numSamples) { sampleCounter+=numSamples; } void resetSampleCounter() { sampleCounter=0; } mp_sint32 initDevice(); mp_sint32 closeDevice(); void stop(); mp_sint32 pause(); mp_sint32 resume(); void setDisableMixing(bool disableMixing) { this->disableMixing = disableMixing; } void setAllowFilters(bool allowFilters) { this->allowFilters = allowFilters; } bool getAllowFilters() const { return allowFilters; } void resetChannelsFull(); void resetChannelsWithoutMuting(); void setResamplerType(ResamplerTypes type); ResamplerTypes getResamplerType() const { return resamplerType; } bool isRamping() const { return resamplerTable[resamplerType]->isRamping(); } virtual mp_sint32 adjustFrequency(mp_uint32 frequency); mp_sint32 getMixFrequency() { return mixFrequency; } static mp_sint32 beatPacketsToBufferSize(mp_uint32 mixFrequency, mp_uint32 numBeats); virtual mp_sint32 setBufferSize(mp_uint32 bufferSize); mp_uint32 getBeatPacketSize() const { return beatPacketSize; } mp_uint32 getNumBeatPackets() const { return mixBufferSize / beatPacketSize; } // volume control void setMasterVolume(mp_sint32 vol) { masterVolume = vol; } mp_sint32 getMasterVolume() const { return masterVolume; } // panning control void setPanningSeparation(mp_sint32 separation) { panningSeparation = separation; } mp_sint32 getPanningSeparation() const { return panningSeparation; } bool isInitialized() const { return initialized; } bool isPlaying() const { return startPlay; } mp_sint32 getNumActiveChannels(); mp_sint32 getNumAllocatedChannels() const { return mixerNumActiveChannels; } mp_int64 getSampleCounter() const { return sampleCounter; } mp_sint32 getBeatIndexFromSamplePos(mp_uint32 smpPos) const; ResamplerBase* getCurrentResampler() const { return resamplerTable[resamplerType]; } protected: bool initialized; bool startPlay; mp_int64 sampleCounter; // number of samples played (per song) void startMixer() { lastBeatRemainder = 0; } void setNumChannels(mp_uint32 num); void setActiveChannels(mp_uint32 num); public: void setVol(mp_sint32 c,mp_sint32 v) { channel[c].vol = v; } mp_sint32 getVol(mp_sint32 c) { return channel[c].vol; } void setPan(mp_sint32 c,mp_sint32 p) { channel[c].pan = p; } void setFreq(mp_sint32 c,mp_sint32 f) { (this->*setFreqFuncTable[resamplerType])(c,f); } // Default low precision calculations void setChannelFrequency(mp_sint32 c, mp_sint32 f); void setFilterAttributes(mp_sint32 c, mp_sint32 cutoff, mp_sint32 resonance); void playSample(mp_sint32 c, // channel mp_sbyte* smp, // sample buffer mp_sint32 smplen, // sample size mp_sint32 smpoffs, // sample offset mp_sint32 smpoffsfrac, bool smpOffsetWrap, mp_sint32 lstart, // loop start mp_sint32 len, // loop end mp_sint32 flags, bool ramp = true); bool isChannelPlaying(mp_sint32 c) { return (channel[c].flags&MP_SAMPLE_PLAY) != 0; } void stopSample(mp_sint32 c) { channel[c].flags&=~(MP_SAMPLE_FADEIN|MP_SAMPLE_FADEOUT); channel[c].flags|=MP_SAMPLE_FADEOFF; } void breakLoop(mp_sint32 c) { channel[c].flags&=~3; channel[c].loopend = channel[c].smplen; } // handle with care void setSamplePos(mp_sint32 c, mp_sint32 pos) { channel[c].smppos = pos; channel[c].smpposfrac = 0; } mp_sint32 getSamplePos(mp_sint32 c) { return channel[c].smppos; } mp_sint32 getSamplePosFrac(mp_sint32 c) { return channel[c].smpposfrac; } void setBackward(mp_sint32 c) { if (channel[c].flags & MP_SAMPLE_PLAY) { channel[c].flags |= MP_SAMPLE_BACKWARD; if (channel[c].smppos < channel[c].loopstart) { channel[c].smppos = channel[c].loopend; } } } void setForward(mp_sint32 c) { if (channel[c].flags & MP_SAMPLE_PLAY) { channel[c].flags &= ~MP_SAMPLE_BACKWARD; if (channel[c].smppos > channel[c].loopend) { channel[c].smppos = channel[c].loopstart; } } } void muteChannel(mp_sint32 c, bool m); bool isChannelMuted(mp_sint32 c); mp_uint32 getSyncSampleCounter(); protected: // timer procedure for mixing virtual void timerHandler(mp_sint32 currentBeatPacket) = 0; void panToVol(ChannelMixer::TMixerChannel *chn, mp_sint32 &left, mp_sint32 &right); static mp_sint32 panLUT[257]; #ifdef MILKYTRACKER friend class PlayerController; #endif #ifdef __MPTIMETRACKING__ public: void mixData(mp_sint32 c, mp_sint32* buffer, mp_sint32 count, mp_sint32 sampleShift, mp_sint32 fMul = 0, mp_sint32 bufferIndex = -1, mp_sint32 packetIndex = -1) const; #endif }; #endif MilkyTracker-1.02.00/src/milkyplay/ExporterXM.cpp000066400000000000000000001547351324432207300216550ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * ExporterXM.cpp * MilkyPlay XM writer (trying hard to export something useful) * * -------------------------------- * Version History: * -------------------------------- * 26/03/06: PLM Far position jump fix & effects are relocated to other channels if possible * 01/01/06: Happy new year ;) MilkyTracker XMs are now even smaller than FT2 XMs * 02/12/05: Fixed problems with last operand restoration for S3M and MDL commands. VERY SLOW(!!) but working * 06/02/05: Added simulation of multitracker behaviour with FT2 features * 05/02/05: Added simulation of protracker behaviour with FT2 features * 07/12/04: Writes all other instrument related stuff too (envelopes, auto-vibrato etc.) * 06/12/04: Added sample relative note remapper when note range exceeds regular XM note range (RIGHT.PTM) * 05/12/04: First acceptable results with one-effect modules (.MOD / .MTM) * 04/12/04: Started work * */ #include "MilkyPlay.h" #ifdef VERBOSE #include "stdio.h" #endif struct TWorkBuffers { mp_sint32 noteRangeRemapper[256]; mp_ubyte lastArpeggio[256]; mp_ubyte lastVolSlide[256]; mp_ubyte lastGVolSlide[256]; mp_ubyte lastPorta[256]; mp_ubyte lastTempoSlide[256]; mp_sint32 globalVolume; mp_sint32 bpm, baseBpm, speed; mp_ubyte lastIns[256]; mp_ubyte lastNote[256]; void clearBuffers() { memset(lastArpeggio, 0, sizeof(lastArpeggio)); memset(lastVolSlide, 0, sizeof(lastVolSlide)); memset(lastGVolSlide, 0, sizeof(lastGVolSlide)); memset(lastPorta, 0, sizeof(lastPorta)); memset(lastTempoSlide, 0, sizeof(lastTempoSlide)); memset(lastIns, 0, sizeof(lastIns)); memset(lastNote, 0, sizeof(lastNote)); globalVolume = 64; baseBpm = 125; bpm = 125; speed = 6; } TWorkBuffers() { clearBuffers(); memset(noteRangeRemapper, 0, sizeof(noteRangeRemapper)); } }; static void convertEffect(mp_ubyte effIn, mp_ubyte opIn, mp_ubyte& effOut, mp_ubyte& opOut, mp_sint32 curChan, TWorkBuffers& workBuffers, bool convertITTempoSlides) { mp_ubyte* lastArpeggio = workBuffers.lastArpeggio; mp_ubyte* lastVolSlide = workBuffers.lastVolSlide; mp_ubyte* lastGVolSlide = workBuffers.lastGVolSlide; mp_ubyte* lastPorta = workBuffers.lastPorta; mp_ubyte* lastTempoSlide = workBuffers.lastTempoSlide; effOut = opOut = 0; // Protracker commands if (effIn > 0 && effIn <= 0x11) { effOut = effIn; opOut = opIn; if (effIn == 0x0C || effIn == 0x10) opOut = (mp_ubyte)(((mp_sint32)opOut*64)/255); if (effIn == 0x10) workBuffers.globalVolume = (mp_ubyte)(((mp_sint32)opOut*64)/255); // Cope with set BPM in case we're having a DBM "set real BPM command" if (effIn == 0x0f && opIn >= 32) { // real BPM is not the default value => recalculate BPM if (workBuffers.baseBpm != 125) { // First store current BPM workBuffers.bpm = opIn; // Now calculate new BPM (see DBM player source) mp_sint32 realCiaTempo = (workBuffers.bpm * (workBuffers.baseBpm << 8) / 125) >> 8; // clip if necessary if (realCiaTempo > 255) realCiaTempo = 255; if (realCiaTempo < 32) realCiaTempo = 32; // This is our new set BPM opOut = realCiaTempo; } } } // set envelope position else if (effIn == 0x14 || effIn == 0x51) { effOut = 0x14; opOut = opIn; } // set envelope position else if (effIn == 0x15) { effOut = effIn; opOut = opIn; } // set tempo else if (effIn == 0x16) { if (opIn >= 32) { // First store current BPM workBuffers.bpm = opIn; // Cope with set BPM in case we're having a DBM "set real BPM command" if (workBuffers.baseBpm != 125) { // Now calculate new BPM (see DBM player source) mp_sint32 realCiaTempo = (workBuffers.bpm * (workBuffers.baseBpm << 8) / 125) >> 8; // clip if (realCiaTempo > 255) realCiaTempo = 255; if (realCiaTempo < 32) realCiaTempo = 32; // new effect 0xF with new BPM effOut = 0x0F; opOut = realCiaTempo; } else { if (opIn < 32) opIn = 32; effOut = 0x0F; opOut = opIn; } } else if (convertITTempoSlides) { if (opIn) lastTempoSlide[curChan] = opIn; if (lastTempoSlide[curChan]) { mp_ubyte y = lastTempoSlide[curChan]>>4; mp_ubyte x = lastTempoSlide[curChan]&0xf; // tempo slide up if (y) { effOut = 0x0F; workBuffers.bpm+=x*(workBuffers.speed-1); if (workBuffers.bpm > 255) workBuffers.bpm = 255; opOut = workBuffers.bpm; } // tempo slide down else { effOut = 0xF; workBuffers.bpm-=x*(workBuffers.speed-1); if (workBuffers.bpm < 32) workBuffers.bpm = 32; opOut = workBuffers.bpm; } } } } // Panning slide / Multi retrig / tremor else if (effIn == 0x19 || effIn == 0x1B || effIn == 0x1D) { effOut = effIn; opOut = opIn; } // set speed else if (effIn == 0x1C) { if (opIn) { if (opIn > 31) opIn = 31; effOut = 0x0F; opOut = opIn; } } // MDL set sample offset else if (effIn == 0x1F) { effOut = 0x09; opOut = opIn; } // PLM position jump else if (effIn == 0x2B) { effOut = 0x0B; opOut = opIn; } // Protracker subcommands (most likely) else if (effIn >= 0x30 && effIn <= 0x3F) { effOut = 0x0E; opOut = ((effIn-0x30)<<4)+(opIn&0xF); } // arpeggio else if (effIn == 0x20) { if (!opIn) opIn = lastArpeggio[curChan]; if (opIn) { effOut = 0; opOut = opIn; lastArpeggio[curChan] = opIn; } } // extra fine porta commands else if (effIn == 0x41) { effOut = 0x21; opOut = 0x10 + (opIn <= 0xf ? opIn&0xF : 0xF); } else if (effIn == 0x42) { effOut = 0x21; opOut = 0x20 + (opIn <= 0xf ? opIn&0xF : 0xF); } // MDL porta up else if (effIn == 0x43) { if (opIn) lastPorta[curChan] = opIn; if (lastPorta[curChan] >= 0xE0) { mp_ubyte y = lastPorta[curChan]>>4; mp_ubyte x = lastPorta[curChan]&0xf; switch (y) { case 0xF: effOut = 0xE; opOut = 0x10 + x; break; case 0xE: effOut = 0x21; opOut = 0x10 + (x>>1); break; } } else if (lastPorta[curChan]) { effOut = 0x1; opOut = lastPorta[curChan]; } } // MDL porta down else if (effIn == 0x44) { if (opIn) lastPorta[curChan] = opIn; if (lastPorta[curChan] >= 0xE0) { mp_ubyte y = lastPorta[curChan] >> 4; mp_ubyte x = lastPorta[curChan] & 0xf; switch (y) { case 0xF: effOut = 0xE; opOut = 0x20 + x; break; case 0xE: effOut = 0x21; opOut = 0x20 + (x>>1); break; } } else if (lastPorta[curChan]) { effOut = 0x2; opOut = lastPorta[curChan]; } } // MDL volslide up else if (effIn == 0x45) { if (opIn) lastVolSlide[curChan] = opIn; if (lastVolSlide[curChan] >= 0xE0) { mp_ubyte y = lastVolSlide[curChan]>>4; mp_ubyte x = lastVolSlide[curChan]&0xf; switch (y) { case 0xF: effOut = 0xE; opOut = 0xA0 + x; break; case 0xE: effOut = 0xE; opOut = 0xA0 + (x>>2); break; } } else if (lastVolSlide[curChan]) { effOut = 0xA; opOut = (lastVolSlide[curChan]>>2) <= 0xF ? (lastVolSlide[curChan]>>2)<<4 : 0xF0; } } // MDL volslide down else if (effIn == 0x46) { if (opIn) lastVolSlide[curChan] = opIn; if (lastVolSlide[curChan] >= 0xE0) { mp_ubyte y = lastVolSlide[curChan] >> 4; mp_ubyte x = lastVolSlide[curChan] & 0xf; switch (y) { case 0xF: effOut = 0xE; opOut = 0xB0 + x; break; case 0xE: effOut = 0xE; opOut = 0xB0 + (x>>2); break; } } else if (lastVolSlide[curChan]) { effOut = 0xA; opOut = (lastVolSlide[curChan]>>2) <= 0xF ? (lastVolSlide[curChan]>>2) : 0xF; } } // S3M porta up else if (effIn == 0x47) { if (opIn) lastPorta[curChan] = opIn; if (lastPorta[curChan] >= 0xE0) { mp_ubyte y = lastPorta[curChan] >> 4; mp_ubyte x = lastPorta[curChan] & 0xf; switch (y) { case 0xF: effOut = 0xE; opOut = 0x10 + x; break; case 0xE: effOut = 0x21; opOut = 0x10 + x; break; } } else if (lastPorta[curChan]) { effOut = 0x1; opOut = lastPorta[curChan]; } } // S3M porta down else if (effIn == 0x48) { if (opIn) lastPorta[curChan] = opIn; if (lastPorta[curChan] >= 0xE0) { mp_ubyte y = lastPorta[curChan] >> 4; mp_ubyte x = lastPorta[curChan] & 0xf; switch (y) { case 0xF: effOut = 0xE; opOut = 0x20 + x; break; case 0xE: effOut = 0x21; opOut = 0x20 + x; break; } } else if (lastPorta[curChan]) { effOut = 0x2; opOut = lastPorta[curChan]; } } // S3M volslide else if (effIn == 0x49) { if (opIn) lastVolSlide[curChan] = opIn; if (lastVolSlide[curChan]) { mp_ubyte y = lastVolSlide[curChan]>>4; mp_ubyte x = lastVolSlide[curChan]&0xf; if (!(x == 0xF && y)&&!(y == 0xF && x)) { if (x && y) x = 0; if (y) { effOut = 0xA; opOut = y<<4; } else if (x) { effOut = 0xA; opOut = x; } } else { if (!(x==0x0F && !y) && !(y==0x0F && !x)) { if (x==0x0F) { effOut = 0xE; opOut = 0xA0+y; } else if (y==0x0F) { effOut = 0xE; opOut = 0xB0+x; } } } } } // PSM fine volslide up else if (effIn == 0x4B) { effOut = 0x0E; opOut = opIn>>2; if (opOut>0xF) opOut=0x0F; opOut+=0xA0; } // PSM fine volslide down else if (effIn == 0x4C) { effOut = 0x0E; opOut = opIn>>2; if (opOut>0xF) opOut=0x0F; opOut+=0xB0; } // PSM porta up else if (effIn == 0x4D) { effOut = 0x01; opOut = opIn>>2; } // PSM porta down else if (effIn == 0x4E) { effOut = 0x02; opOut = opIn>>2; } // "S3M" global volslide, this is an IT/MODPLUG feature else if (effIn == 0x59) { if (opIn) lastGVolSlide[curChan] = opIn; if (lastGVolSlide[curChan]) { mp_ubyte y = lastGVolSlide[curChan]>>4; mp_ubyte x = lastGVolSlide[curChan]&0xf; if (!(x == 0xF && y)&&!(y == 0xF && x)) { if (x && y) x = 0; if (y) { effOut = 0x11; opOut = y<<4; workBuffers.globalVolume+=y*(workBuffers.speed-1); if (workBuffers.globalVolume > 64) workBuffers.globalVolume = 64; } else if (x) { effOut = 0x11; opOut = x; workBuffers.globalVolume-=x*(workBuffers.speed-1); if (workBuffers.globalVolume < 0) workBuffers.globalVolume = 0; } } else { // SUCKS if (!(x==0x0F && !y) && !(y==0x0F && !x)) { if (x==0x0F) { workBuffers.globalVolume += y; if (workBuffers.globalVolume > 64) workBuffers.globalVolume = 64; effOut = 0x10; opOut = (mp_ubyte)workBuffers.globalVolume; } else if (y==0x0F) { workBuffers.globalVolume -= x; if (workBuffers.globalVolume < 0) workBuffers.globalVolume = 0; effOut = 0x10; opOut = (mp_ubyte)workBuffers.globalVolume; } } } } } // set digibooster real BPM else if (effIn == 0x52) { // store new BPM base workBuffers.baseBpm = opIn; // if it's not the default value recalculate BPM if (workBuffers.baseBpm != 125) { // see digibooster pro player source mp_sint32 realCiaTempo = (workBuffers.bpm * (workBuffers.baseBpm << 8) / 125) >> 8; // clip if necessary if (realCiaTempo > 255) realCiaTempo = 255; if (realCiaTempo < 32) realCiaTempo = 32; // write new command: 0xF with new operand effOut = 0x0F; opOut = realCiaTempo; } } // FAR/669 (effects are really different, conversion doesn't make much sense) else if (effIn == 0x70) { switch (opIn>>4) { case 0x0f: effOut = 0xf; opOut = opIn&0xf; break; } } else if (effIn) { #ifdef VERBOSE printf("Missing effect %i, %i\n", effIn, opIn); #endif } } // convert FT2 compatible effect to volumn column effect if possible static mp_ubyte convertToVolume(mp_ubyte eff, mp_ubyte op) { mp_ubyte vol = 0; /*if (eff && eff != 0x0C) { printf("%i, %i\n", eff, op); }*/ // set volume if (eff == 0x0C) { vol = 0x10 + op; } // volslide else if (eff == 0x0A) { // use last operand? if (!op) { vol = 0x60; } // volslide down else if (op & 0xF) { vol = 0x60 + (op&0xF); } // volslide up else if (op >> 4) { vol = 0x70 + (op>>4); } } // extra fine volslide up else if (eff == 0xE && ((op>>4)==0xA)) { vol = 0x90 + (op & 0xF); } // extra fine volslide down else if (eff == 0xE && ((op>>4)==0xB)) { vol = 0x80 + (op & 0xF); } // extra vibrato else if (eff == 0x4) { if ((op>>4) && !(op&0xF)) { vol = 0xA0 + (op>>4); } else if (!(op>>4)/* && (op&0xF)*/) { vol = 0xB0 + op; } } // set panning else if (eff == 0x8) { vol = 0xC0 + (op>>4); } // panning slide else if (eff == 0x19) { // use last operand? if (!op) { vol = 0xD0; } // panning slide left else if (op & 0xF) { vol = 0xD0 + (op&0xF); } // panning slide right else if (op >> 4) { vol = 0xE0 + (op>>4); } } // porta to note else if (eff == 0x03) { vol = 0xF0 + (op>>4); } return vol; } // Convert a bunch of effects (srcSlot with numEffects) // into volume, eff and op (XM operands) // curChan is the current channel // workBuffers holds the last effect operands while processing // effectBuffer holds a bunch (numEffectsInBuffer) of remaining // effects from the last columns which might be allowed to go // into another channel // swapBuffer must be at least of effectBuffer size static void convertEffects(mp_ubyte* srcSlot, mp_sint32 numEffects, mp_ubyte& volume, mp_ubyte& eff, mp_ubyte& op, mp_sint32 curChan, TWorkBuffers& workBuffers, mp_ubyte* effectBuffer, mp_sint32& numEffectsInBuffer, mp_ubyte* swapBuffer, bool convertITTempoSlides) { mp_sint32 i; // If there is only one effect this goes into the effect column if (numEffects == 1) { volume = 0; convertEffect(srcSlot[2], srcSlot[3], eff, op, curChan, workBuffers, convertITTempoSlides); } else if (numEffects >= 2) { mp_sint32 oldNum = numEffects; numEffects+=numEffectsInBuffer; mp_ubyte* effects = swapBuffer; // Convert effects to be FT2 compatible // Result will be written in effects for (i = 0; i < oldNum; i++) { effects[i*2] = effects[i*2+1] = 0; convertEffect(srcSlot[2+i*2], srcSlot[2+i*2+1], effects[i*2], effects[i*2+1], curChan, workBuffers, convertITTempoSlides); } // Append replacable effects which are left from other columns for (i = 0; i < numEffectsInBuffer; i++) { mp_uint32 j = oldNum + i; effects[j*2] = effectBuffer[i*2]; effects[j*2+1] = effectBuffer[i*2+1]; } // Now "effects" contains all effects+operands // We try to find a home for them for (i = 0; i < numEffects; i++) { // could be MDL portamento + volslide if (numEffects >= 3 && effects[i*2] == 0x3 && effects[i*2+1] == 0) { for (mp_sint32 j = 0; j < numEffects; j++) { if (effects[j*2] == 0xA && effects[j*2+1] != 0) { effects[i*2] = 0x5; effects[i*2+1] = effects[j*2+1]; // clear out effects[j*2] = 0; effects[j*2+1] = 0; } } } // could be MDL vibrato + volslide if (numEffects >= 3 && effects[i*2] == 0x4 && effects[i*2+1] == 0) { for (mp_sint32 j = 0; j < numEffects; j++) { if (effects[j*2] == 0xA && effects[j*2+1] != 0) { effects[i*2] = 0x6; effects[i*2+1] = effects[j*2+1]; // clear out effects[j*2] = 0; effects[j*2+1] = 0; } } } } volume = 0; eff = 0; op = 0; for (i = 0; i < numEffects; i++) { // Effect nr. 1 => try to stuff into volume column first if (i == 0) { // If this is a portamento to note command and it's // volume column compatible we'll place it in the // volume column bool notePortaNotVolumeCompatible = ((effects[i*2] == 0x03) && (effects[i*2+1]&0xF)); if (convertToVolume(effects[i*2], effects[i*2+1]) && !volume && !notePortaNotVolumeCompatible) { volume = convertToVolume(effects[i*2], effects[i*2+1]); // clear out effects[i*2] = effects[i*2+1] = 0; } // didn't work else if ((effects[i*2] || effects[i*2+1]) && (!eff && !op)) { eff = effects[i*2]; op = effects[i*2+1]; // clear out effects[i*2] = effects[i*2+1] = 0; } } // for the rest of the effects, try to find // free space, take effect column first, volume column secondly else { if ((effects[i*2] || effects[i*2+1]) && (!eff && !op)) { eff = effects[i*2]; op = effects[i*2+1]; // clear out effects[i*2] = effects[i*2+1] = 0; } else if (convertToVolume(effects[i*2], effects[i*2+1]) && !volume) { volume = convertToVolume(effects[i*2], effects[i*2+1]); // clear out effects[i*2] = effects[i*2+1] = 0; } } } mp_uint32 numOutEffs = 0; // Scan what's left and sort out effects which are not allowed to go into another channel for (i = 0; i < numEffects; i++) { switch (effects[i*2]) { case 0x0B: case 0x0D: case 0x0E: switch (effects[i*2+1] >> 4) { case 0xE: goto takeEffect; } break; case 0x0F: takeEffect: effectBuffer[numOutEffs*2] = effects[i*2]; effectBuffer[numOutEffs*2+1] = effects[i*2+1]; numOutEffs++; break; } } numEffectsInBuffer = numOutEffs; //if (numOutEffs) // printf("%i\n", numOutEffs); } } static void fillWorkBuffers(const XModule* module, mp_uint32 orderListIndex, TWorkBuffers& workBuffers) { workBuffers.clearBuffers(); mp_ubyte* lastArpeggio = workBuffers.lastArpeggio; mp_ubyte* lastVolSlide = workBuffers.lastVolSlide; mp_ubyte* lastGVolSlide = workBuffers.lastGVolSlide; mp_ubyte* lastPorta = workBuffers.lastPorta; mp_ubyte* lastNote = workBuffers.lastNote; mp_ubyte* lastIns = workBuffers.lastIns; mp_ubyte* lastTempoSlide = workBuffers.lastTempoSlide; for (mp_uint32 orderIndex = 0; orderIndex < orderListIndex; orderIndex++) { mp_uint32 patIndex = module->header.ord[orderIndex]; TXMPattern* pattern = &module->phead[patIndex]; mp_sint32 slotSize = pattern->effnum*2+2; mp_sint32 channum = pattern->channum, effnum = pattern->effnum; mp_ubyte* srcSlot = pattern->patternData; for (mp_sint32 rows = 0; rows < pattern->rows; rows++) { for (mp_sint32 c = 0; c < channum; c++) { if (srcSlot[0]) lastNote[c] = srcSlot[0]; if (srcSlot[1]) lastIns[c] = srcSlot[1]; // ----------- store last operands for S3M/MDL/DBM effects --------------- const mp_ubyte* effSlot = srcSlot+2; for (mp_sint32 effCnt = 0; effCnt < effnum; effCnt++) { mp_ubyte effIn = *effSlot; mp_ubyte opIn = *(effSlot+1); effSlot+=2; if (effIn < 0x0f || effIn > 0x5a) continue; switch (effIn) { case 0x0f: if (opIn >= 32) workBuffers.bpm = opIn; break; case 0x10: workBuffers.globalVolume = (mp_ubyte)(((mp_sint32)opIn*64)/255); break; case 0x16: if (opIn >= 32) { workBuffers.bpm = opIn; } else { if (opIn) lastTempoSlide[c] = opIn; if (lastTempoSlide[c]) { mp_ubyte y = lastTempoSlide[c]>>4; mp_ubyte x = lastTempoSlide[c]&0xf; // tempo slide up if (y) { workBuffers.bpm+=x*(workBuffers.speed-1); if (workBuffers.bpm > 255) workBuffers.bpm = 255; } // tempo slide down else { workBuffers.bpm-=x*(workBuffers.speed-1); if (workBuffers.bpm < 32) workBuffers.bpm = 32; } } } break; case 0x1C: if (opIn) workBuffers.speed = opIn; break; case 0x20: if (!opIn) break; lastArpeggio[c] = opIn; break; case 0x43: if (!opIn) break; lastPorta[c] = opIn; break; case 0x44: if (!opIn) break; lastPorta[c] = opIn; break; case 0x45: if (!opIn) break; lastVolSlide[c] = opIn; break; case 0x46: if (!opIn) break; lastVolSlide[c] = opIn; break; case 0x47: if (!opIn) break; lastPorta[c] = opIn; break; case 0x48: if (!opIn) break; lastPorta[c] = opIn; break; case 0x49: if (!opIn) break; lastVolSlide[c] = opIn; break; case 0x52: workBuffers.baseBpm = opIn; break; case 0x59: { if (opIn) lastGVolSlide[c] = opIn; if (lastGVolSlide[c]) { mp_ubyte y = lastGVolSlide[c]>>4; mp_ubyte x = lastGVolSlide[c]&0xf; if (!(x == 0xF && y)&&!(y == 0xF && x)) { if (x && y) x = 0; if (y) { workBuffers.globalVolume+=y*(workBuffers.speed-1); if (workBuffers.globalVolume > 64) workBuffers.globalVolume = 64; } else if (x) { workBuffers.globalVolume-=x*(workBuffers.speed-1); if (workBuffers.globalVolume < 0) workBuffers.globalVolume = 0; } } else { // SUCKS if (!(x==0x0F && !y) && !(y==0x0F && !x)) { if (x==0x0F) { workBuffers.globalVolume += y; if (workBuffers.globalVolume > 64) workBuffers.globalVolume = 64; } else if (y==0x0F) { workBuffers.globalVolume -= x; if (workBuffers.globalVolume < 0) workBuffers.globalVolume = 0; } } } } break; } } } srcSlot+=slotSize; } } } } static mp_sint32 convertPattern(const XModule* module, const TXMPattern* srcPattern, mp_ubyte* dstPattern, mp_sint32 numChannels, TWorkBuffers& workBuffers, bool verbose) { bool convertITTempoSlides = module ? (module->getType() == XModule::ModuleType_IT) : false; bool newInsPTFlag = module ? ((module->header.flags & XModule::MODULE_PTNEWINSTRUMENT) != 0) : false; bool newInsST3Flag = module ? ((module->header.flags & XModule::MODULE_ST3NEWINSTRUMENT) != 0) : false; if (module) { mp_sint32 patNum = -1; for (mp_uint32 i = 0; i < module->header.patnum; i++) { if (srcPattern == &module->phead[i]) { patNum = i; break; } } if (patNum != -1) { mp_sint32 orderListPos = -1; for (mp_uint32 i = 0; i < module->header.ordnum; i++) { if (module->header.ord[i] == patNum) { orderListPos = i; break; } } if (orderListPos != -1) { fillWorkBuffers(module, orderListPos, workBuffers); } } } mp_ubyte* lastNote = workBuffers.lastNote; mp_ubyte* lastIns = workBuffers.lastIns; #ifdef MILKYTRACKER newInsPTFlag = false; #endif mp_ubyte* effectBuffer = new mp_ubyte[srcPattern->rows * numChannels * srcPattern->effnum]; mp_ubyte* swapBuffer = new mp_ubyte[srcPattern->rows * numChannels * srcPattern->effnum]; mp_sint32 numEffectsInBuffer = 0; for (mp_sint32 rows = 0; rows < srcPattern->rows; rows++) { bool correctPLMFarJump = false; mp_uint32 correctPLMFarJumpChannel = 0; mp_sint32 PLMFarJumpPos = 0; mp_sint32 PLMFarJumpRow = 0; mp_sint32 c; for (c = 0; c < srcPattern->channum; c++) { if (c < numChannels) { mp_ubyte* dstSlot = dstPattern+(rows*(numChannels*5) + (c*5)); mp_ubyte* srcSlot = srcPattern->patternData+(rows*(srcPattern->channum*(srcPattern->effnum*2+2)) + c*(srcPattern->effnum*2+2)); if (srcSlot[0]) lastNote[c] = srcSlot[0]; if (srcSlot[1]) { lastIns[c] = srcSlot[1]; //if (srcSlot[0]) // lastIns2[c] = srcSlot[1]; } mp_sint32 srcNote = (mp_sint32)srcSlot[0]; if (lastIns[c] && srcNote > 0 && srcNote <= XModule::NOTE_LAST) { srcNote+=workBuffers.noteRangeRemapper[lastIns[c]-1]; if (srcNote > XModule::NOTE_LAST || srcNote < 0) srcNote = 0; } if (srcNote == XModule::NOTE_OFF || srcNote == XModule::NOTE_CUT) srcNote = 97; else if (srcNote > 96) srcNote = 0; dstSlot[0] = srcNote; // instrument dstSlot[1] = srcSlot[1]; convertEffects(srcSlot, srcPattern->effnum, dstSlot[2], dstSlot[3], dstSlot[4], c, workBuffers, effectBuffer, numEffectsInBuffer, swapBuffer, convertITTempoSlides); // try to find workaround for PLM far-jump if (module && module->getType() == XModule::ModuleType_PLM && dstSlot[3] == 0x0B) { mp_ubyte* eff = srcSlot+2; for (mp_sint32 i = 0; i < srcPattern->effnum; i++) { if (eff[i*2] == 0x2B) { PLMFarJumpPos = eff[i*2+1]; PLMFarJumpRow = eff[((i+1)%srcPattern->effnum)*2+1]; correctPLMFarJump = true; correctPLMFarJumpChannel = c; break; } } } // * some nasty protracker style fixes // * trying to emulate protracker 3.15 behaviour with FT2 methods mp_sint32 i = srcSlot[1]; if (module && i && newInsPTFlag) { if (!dstSlot[0]) { if (module->instr[i-1].samp == 0 || module->instr[i-1].snum[0] == -1) { dstSlot[0] = 97; } else { mp_sint32 s = module->instr[i-1].snum[0]; if (s != -1 && !dstSlot[2]) dstSlot[2] = (mp_ubyte)(((mp_sint32)module->smp[s].vol*64)/255)+0x10; } } else { if (module->instr[i-1].samp == 0 || module->instr[i-1].snum[dstSlot[0]] == -1) { dstSlot[0] = 97; } } } else if (module && i && newInsST3Flag) { if (!dstSlot[0]) { if (!(module->instr[i-1].samp == 0 || module->instr[i-1].snum[0] == -1)) { mp_sint32 s = module->instr[i-1].snum[0]; if (s != -1 && !dstSlot[2]) dstSlot[2] = (mp_ubyte)(((mp_sint32)module->smp[s].vol*64)/255)+0x10; } else { dstSlot[0] = 0; } } } // * trying to emulate MTM behaviour // * Sample offset command triggers last note again if (module && module->getType() == XModule::ModuleType_MTM && !dstSlot[0] && dstSlot[3] == 0x9) dstSlot[0] = lastNote[c]; } if (correctPLMFarJump) { for (c = 0; c < srcPattern->channum; c++) { mp_ubyte* dstSlot = dstPattern+(rows*(numChannels*5) + (c*5)); if (dstSlot[3] == 0) { if (c > (signed)correctPLMFarJumpChannel) { dstSlot[3] = 0x0D; dstSlot[4] = (PLMFarJumpRow/10)*16+(PLMFarJumpRow%10); } else { mp_ubyte* srcSlot = dstPattern+(rows*(numChannels*5) + (correctPLMFarJumpChannel*5)); dstSlot[3] = srcSlot[3]; dstSlot[4] = srcSlot[4]; srcSlot[3] = 0x0D; srcSlot[4] = (PLMFarJumpRow/10)*16+(PLMFarJumpRow%10); } break; } } } } } delete[] swapBuffer; delete[] effectBuffer; return MP_OK; } mp_sint32 packPattern(const mp_ubyte* pattern, mp_ubyte* outputPattern, mp_sint32 numRows, mp_sint32 numChannels) { mp_sint32 i,j,z,b1,x,y; mp_ubyte pack[6]; /*i = numRows*numChannels*5 - 1; while (i > 0 && !pattern[i]) i--; mp_sint32 max = i; printf("%i, %i\n", numRows*numChannels*5, max); */ // ------------------------- // pack pattern (xm packing) // ------------------------- j = z = b1 = 0; for (x=0; x < numRows; x++) for (y=0; y < numChannels; y++) { //if (z > max) // goto finishedPacking; memset(&pack,0,6); i=0; if (pattern[z]) { b1=1; pack[0]|=1; pack[i+1]=pattern[z]; i++; } if (pattern[z+1]) { b1=1; pack[0]|=2; pack[i+1]=pattern[z+1]; i++; } if (pattern[z+2]) { b1=1; pack[0]|=4; pack[i+1]=pattern[z+2]; i++; } if (pattern[z+3]) { b1=1; pack[0]|=8; pack[i+1]=pattern[z+3]; i++; } if (pattern[z+4]) { b1=1; pack[0]|=16; pack[i+1]=pattern[z+4]; i++; } if (i<5) { pack[0]|=128; memcpy(outputPattern+j,&pack,i+1); j+=i+1; } else { memcpy(outputPattern+j,pattern+z,5); j+=5; } z+=5; } //finishedPacking: return j; } static void sort(mp_sword* array,mp_sint32 l, mp_sint32 r) { mp_sint32 i,j; mp_sword x,y; i=l; j=r; x=array[(l+r)/2]; do { while (array[i](titleBuffer), reinterpret_cast(header.name), MP_MAXTEXT); if (strlen(titleBuffer) > 20) { mp_sint32 i = 0; mp_sint32 len = (mp_sint32)strlen(titleBuffer); while (titleBuffer[i] <= ' ' && i < len) i++; memcpy(titleBufferTemp, titleBuffer+i, strlen(titleBuffer) - i); f.write(titleBufferTemp, 1, 20); } else f.write(header.name, 1, 20); header.whythis1a = 0x1a; f.writeByte(header.whythis1a); #ifdef MILKYTRACKER #include "../tracker/version.h" f.write(MILKYTRACKER_VERSION_STRING, 1, 20); #else f.write(header.tracker, 1, 20); #endif header.ver = 0x104; f.writeWord(header.ver); header.hdrsize = 276; f.writeDword(header.hdrsize); f.writeWord(header.ordnum); f.writeWord(header.restart); mp_uword numChannels = header.channum&1 ? header.channum+1 : header.channum; f.writeWord(numChannels); f.writeWord(patNum); f.writeWord(insNum); f.writeWord(header.freqtab); f.writeWord(header.tempo); f.writeWord(header.speed); f.write(header.ord,1,256); mp_ubyte lowerNoteBound[256]; mp_ubyte upperNoteBound[256]; for (i = 0; i < 256; i++) { lowerNoteBound[i] = XModule::NOTE_LAST; upperNoteBound[i] = 0; } mp_ubyte* lastIns = new mp_ubyte[header.channum]; memset(lastIns, 0, header.channum); for (i = 0; i < patNum; i++) { TXMPattern* srcPattern = &phead[i]; mp_sint32 channum = srcPattern->channum >= header.channum ? header.channum : srcPattern->channum; for (mp_sint32 rows = 0; rows < srcPattern->rows; rows++) for (mp_sint32 c = 0; c < channum; c++) { mp_ubyte* srcSlot = srcPattern->patternData+(rows*(srcPattern->channum*(srcPattern->effnum*2+2)) + c*(srcPattern->effnum*2+2)); if (srcSlot[1]) lastIns[c] = srcSlot[1]; if (lastIns[c] && srcSlot[0] && srcSlot[0] < XModule::NOTE_OFF) { if (srcSlot[0] > upperNoteBound[lastIns[c]-1]) upperNoteBound[lastIns[c]-1] = srcSlot[0]; if (srcSlot[0] < lowerNoteBound[lastIns[c]-1]) lowerNoteBound[lastIns[c]-1] = srcSlot[0]; } } } delete[] lastIns; for (i = 0; i < insNum; i++) { mp_sint32 remapper = 0; if (upperNoteBound[i] > 96) remapper = upperNoteBound[i] - 96; if (remapper < lowerNoteBound[i]) workBuffers.noteRangeRemapper[i] = -remapper; #ifdef VERBOSE printf("%i - %i (%i)\n", lowerNoteBound[i], upperNoteBound[i], workBuffers.noteRangeRemapper[i]); #endif } for (i = 0; i < patNum; i++) { mp_sint32 numRows = phead[i].rows; if (numRows == 0) numRows = 1; mp_sint32 patChNum = (phead[i].channum+(phead[i].channum&1)); if (patChNum < numChannels) patChNum = numChannels; mp_sint32 len = numRows * patChNum * 5; mp_ubyte* srcPattern = new mp_ubyte[len]; mp_ubyte* dstPattern = new mp_ubyte[len]; memset(srcPattern, 0, len); memset(dstPattern, 0, len); convertPattern(this, &phead[i], srcPattern, numChannels, workBuffers, false); len = packPattern(srcPattern, dstPattern, numRows, numChannels); #ifdef VERBOSE printf("Uncompressed pattern size: %i, compressed: %i\n", numRows * numChannels * 5, len); #endif f.writeDword(9); f.writeByte(0); f.writeWord(numRows); f.writeWord(len); f.write(dstPattern, 1, len); //printf("Packed Size: %i\n", len); delete[] srcPattern; delete[] dstPattern; } for (i = 0; i < insNum; i++) { //mp_sint32 maxSample = instr[i].samp - 1; if (instr[i].samp > 0) { mp_sword usedSamples[256]; memset(usedSamples, 0, sizeof(usedSamples)); mp_sint32 numUsedSamples = 0; #ifdef MILKYTRACKER if (type == ModuleType_XM && header.smpnum == header.insnum*16) { // save all samples within an instrument rather than the // used ones (referenced by note mapping) for (j = 0; j < 16; j++) usedSamples[j] = i*16+j; numUsedSamples = 0; // find last used sample in instrument for (j = 15; j >= 0; j--) { mp_sint32 index = usedSamples[j]; char buffer[MP_MAXTEXT+1]; convertStr(buffer, reinterpret_cast(smp[index].name), MP_MAXTEXT); if (strlen(buffer) || smp[index].samplen) { numUsedSamples = j+1; break; } } } else #endif { // find referenced samples in instrument and save those for (j = 0; j < 96; j++) { mp_sword s = instr[i].snum[j]; if (s == -1) continue; bool used = false; for (k = 0; k < numUsedSamples; k++) { if (usedSamples[k] == s) { used = true; break; } } if (!used && smp[s].sample && smp[s].samplen) usedSamples[numUsedSamples++] = s; } sort(usedSamples, 0, numUsedSamples-1); } f.writeDword(numUsedSamples > 0 ? 263 : 29); f.write(&instr[i].name,1,22); f.writeByte(0); f.writeWord(numUsedSamples); if (!numUsedSamples) continue; f.writeDword(40); mp_ubyte nbu[96]; for (j = 0; j < 96; j++) { mp_sword s = instr[i].snum[j]; for (k = 0; k < numUsedSamples; k++) if (usedSamples[k] == s) { nbu[j] = k; break; } } f.write(nbu, 1, 96); mp_sint32 venvIndex = -1; mp_sint32 penvIndex = -1; for (j = 0; j < numUsedSamples; j++) { if (smp[usedSamples[j]].venvnum && venvIndex == -1) venvIndex = smp[usedSamples[j]].venvnum - 1; if (smp[usedSamples[j]].penvnum && penvIndex == -1) penvIndex = smp[usedSamples[j]].penvnum - 1; } #ifdef VERBOSE printf("%i, %i\n", venvIndex, penvIndex); #endif mp_sint32 step = 0; if (venvIndex >= 0 && venvIndex < header.volenvnum) { step = venvs[venvIndex].num > 12 ? venvs[venvIndex].num*256 / 12 : 256; l = 0; for (k = 0; k < 12; k++) { f.writeWord(venvs[venvIndex].env[l>>8][0]); f.writeWord(venvs[venvIndex].env[l>>8][1]>>2); l+=step; } } else { // emptyness for (k = 0; k < 12; k++) { f.writeWord(0); f.writeWord(0); } } if (penvIndex >= 0 && penvIndex < header.panenvnum) { step = penvs[penvIndex].num > 12 ? penvs[penvIndex].num*256 / 12 : 256; l = 0; for (k = 0; k < 12; k++) { f.writeWord(penvs[penvIndex].env[l>>8][0]); f.writeWord(penvs[penvIndex].env[l>>8][1]>>2); l+=step; } } else { // emptyness for (k = 0; k < 12; k++) { f.writeWord(0); f.writeWord(0); } } if (venvIndex >= 0 && venvIndex < header.volenvnum) f.writeByte(venvs[venvIndex].num > 12 ? 12 : venvs[venvIndex].num); // number of volume points else f.writeByte(0); // number of volume points if (penvIndex >= 0 && penvIndex < header.panenvnum) f.writeByte(penvs[penvIndex].num > 12 ? 12 : penvs[penvIndex].num); // number of panning points else f.writeByte(0); // number of panning points if (venvIndex >= 0 && venvIndex < header.volenvnum) { f.writeByte(venvs[venvIndex].sustain); // volume sustain point f.writeByte(venvs[venvIndex].loops); // volume start point f.writeByte(venvs[venvIndex].loope); // volume end point } else { f.writeByte(0); f.writeByte(0); f.writeByte(0); } if (penvIndex >= 0 && penvIndex < header.panenvnum) { f.writeByte(penvs[penvIndex].sustain); // panning sustain point f.writeByte(penvs[penvIndex].loops); // panning start point f.writeByte(penvs[penvIndex].loope); // panning end point } else { f.writeByte(0); f.writeByte(0); f.writeByte(0); } if (venvIndex >= 0 && venvIndex < header.volenvnum) f.writeByte(venvs[venvIndex].type); // volume type else f.writeByte(0); if (penvIndex >= 0 && penvIndex < header.panenvnum) f.writeByte(penvs[penvIndex].type); // panning type else f.writeByte(0); // take rest of the instrument info from first sample in the instrument // will probably not work for exported .MDL songs. // solution might be to create one instrument for each // sample and remap instrument field in the patterns l = usedSamples[0]; f.writeByte(smp[l].vibtype); // vibrato type f.writeByte(smp[l].vibsweep); // vibrato sweep f.writeByte(smp[l].vibdepth>>1); // vibrato depth f.writeByte(smp[l].vibrate); // vibrato rate if (instr[i].flags & TXMInstrument::IF_ITFADEOUT) f.writeWord(instr[i].volfade>>1); // volume fadeout else f.writeWord(smp[l].volfade>>1); // volume fadeout f.writeWord(0); // reserved mp_ubyte extra[20]; memset(extra, 0, sizeof(extra)); f.write(extra, 1, 20); for (j = 0; j < numUsedSamples; j++) { k = usedSamples[j]; f.writeDword((smp[k].type&16) ? smp[k].samplen <<1 : smp[k].samplen); f.writeDword((smp[k].type&16) ? smp[k].loopstart << 1 : smp[k].loopstart); f.writeDword((smp[k].type&16) ? smp[k].looplen << 1 : smp[k].looplen); mp_sint32 relnote = smp[k].relnote - workBuffers.noteRangeRemapper[i] + header.relnote; if (relnote<-96) relnote = -96; if (relnote>95) relnote = 95; mp_sint32 finetune = smp[k].finetune; // make some ULT linear finetune to finetune & relative note num approximation if (smp[k].freqadjust != 0) { mp_sint32 c4spd = getc4spd(relnote,finetune); c4spd+=((c4spd*smp[k].freqadjust)/32768); mp_sbyte rn,ft; convertc4spd(c4spd, &ft, &rn); finetune = ft; relnote = rn; } f.writeByte(smp[k].vol*64/255); f.writeByte((mp_sbyte)finetune); mp_ubyte type = smp[k].type; // Only alowed bits 0,1 and 3 type &= 3+16; // Bits 0 and 1 are not allowed to be set at the same time if ((type & 3) == 3) type &= ~1; f.writeByte(type); f.writeByte((smp[k].flags & 2) ? smp[k].pan : 0x80); f.writeByte((mp_sbyte)relnote); f.writeByte(0); f.write(smp[k].name, 1, 22); } for (j = 0; j < numUsedSamples; j++) { k = usedSamples[j]; if (!smp[k].sample) continue; if (smp[k].type & 16) { mp_sword* packedSampleData = new mp_sword[smp[k].samplen]; mp_sword b1,b2,b3; b1=0; for (mp_uint32 j = 0; j < smp[k].samplen; j++) { b3 = smp[k].getSampleValue(j); b2 = b3-b1; packedSampleData[j] = b2; b1 = b3; } f.writeWords((mp_uword*)packedSampleData, smp[k].samplen); delete[] packedSampleData; } else { mp_sbyte* packedSampleData = new mp_sbyte[smp[k].samplen]; mp_sbyte b1,b2,b3; b1=0; for (mp_uint32 j = 0; j < smp[k].samplen; j++) { b3 = smp[k].getSampleValue(j); b2 = b3-b1; packedSampleData[j] = b2; b1 = b3; } f.write(packedSampleData, 1, smp[k].samplen); delete[] packedSampleData; } } } else { f.writeDword(instr[i].samp > 0 ? 263 : 29); f.write(&instr[i].name,1,22); f.writeByte(0); f.writeWord(instr[i].samp); } } return MP_OK; } static mp_uword swap(mp_uword x) { return (x>>8)+((x&255)<<8); } static mp_uword prep(mp_sint32 v) { const int MAXSIZE = 0x1ffff; if (v&1) v++; if (v > MAXSIZE) v = MAXSIZE; return (mp_uword)(v >> 1); } mp_sint32 XModule::saveProtrackerModule(const SYSCHAR* fileName) { static const mp_sint32 periods[12] = {1712,1616,1524,1440,1356,1280,1208,1140,1076,1016,960,907}; static const mp_sint32 originalPeriods[] = {1712,1616,1524,1440,1356,1280,1208,1140,1076,1016,960,906, 856,808,762,720,678,640,604,570,538,508,480,453, 428,404,381,360,339,320,302,285,269,254,240,226, 214,202,190,180,170,160,151,143,135,127,120,113, 107,101,95,90,85,80,75,71,67,63,60,56}; TWorkBuffers workBuffers; XMFile f(fileName, true); if (!f.isOpenForWriting()) return MP_DEVICE_ERROR; f.write(header.name,1,20); mp_sint32 i,j,k; // - instruments ------------------------------------------- for (i = 0; i < 31; i++) { f.write(instr[i].name, 1, 22); // sample seems to be used if (instr[i].samp) { mp_sint32 s = -1; for (j = 0; j < 120; j++) if (instr[i].snum[j] >= 0) { s = instr[i].snum[j]; break; } if (s == -1) goto unused; mp_sint32 fti = (mp_sint32)smp[s].finetune + 128; if (!(fti & 0xF) && !smp[s].relnote) { k = (((mp_uint32)(fti-128)) >> 4) & 0xF; } else { mp_sint32 c4spd = getc4spd(smp[s].relnote, smp[s].finetune); mp_sint32 dc4 = abs(sfinetunes[0]-c4spd); k = 0; for (j = 1; j < 16; j++) if (abs(sfinetunes[j]-c4spd) < dc4) { dc4 = abs(sfinetunes[j]-c4spd); k = j; } } f.writeWord(swap(prep(smp[s].samplen))); f.writeByte(k); f.writeByte((mp_ubyte)(((mp_sint32)smp[s].vol*64)/255)); if (smp[s].type & 3) { mp_sint32 loopend = /*smp[s].loopstart + */smp[s].looplen; if (smp[s].type & 32) { f.writeWord(0); } else { if (!smp[s].loopstart && smp[s].looplen != smp[s].samplen) { f.writeWord(swap(1)); } else if (!smp[s].loopstart && smp[s].looplen == smp[s].samplen) { f.writeWord(0); } else f.writeWord(swap(prep(smp[s].loopstart))); } f.writeWord(swap(prep(loopend))); } else { f.writeWord(swap(0)); f.writeWord(swap(1)); } } else { unused: f.writeWord(swap(0)); f.writeByte(0); f.writeByte(0); f.writeWord(swap(0)); f.writeWord(swap(1)); } } // - orderlist ------------------------------------------- f.writeByte((mp_ubyte)header.ordnum); f.writeByte(127); mp_ubyte ord[128]; memset(ord, 0, sizeof(ord)); j = 0; for (i = 0; i < 128; i++) { if (header.ord[i] < 254) ord[j++] = header.ord[i]; else if (header.ord[i] == 255) break; } f.write(ord, 1, 128); mp_uword numChannels = header.channum&1 ? header.channum+1 : header.channum; if (numChannels < 1 || numChannels > 99) return MP_UNSUPPORTED; // - patterns ------------------------------------------- mp_sint32 numPatterns = 0; for (i = 0; i < 128; i++) { if (ord[i] > numPatterns) numPatterns = ord[i]; } char modMagic[4]; if(numChannels == 4) { // ProTracker may not load files with more than 64 patterns correctly if we do not specify the M!K! magic. if(numPatterns <= 63) memcpy(modMagic, "M.K.", 4); else memcpy(modMagic, "M!K!", 4); } else if(numChannels < 10) { memcpy(modMagic, "0CHN", 4); modMagic[0] += static_cast(numChannels); } else { memcpy(modMagic, "00CH", 4); modMagic[0] += static_cast(numChannels / 10u); modMagic[1] += static_cast(numChannels % 10u); } f.write(modMagic, 1, 4); for (i = 0; i < numPatterns+1; i++) { mp_sint32 numRows = phead[i].rows; if (numRows == 0) numRows = 1; mp_sint32 patChNum = (phead[i].channum+(phead[i].channum&1)); if (patChNum < numChannels) patChNum = numChannels; mp_sint32 len = numRows * patChNum * 5; mp_sint32 lenDst = (numRows < 64 ? 64 : numRows) * patChNum * 4; mp_ubyte* srcPattern = new mp_ubyte[len]; mp_ubyte* dstPattern = new mp_ubyte[lenDst]; memset(srcPattern, 0, len); memset(dstPattern, 0, lenDst); convertPattern(this, &phead[i], srcPattern, numChannels, workBuffers, false); for (mp_sint32 r = 0; r < 64; r++) for (mp_sint32 c = 0; c < numChannels; c++) { if (r < numRows) { mp_sint32 srcIndex = (r*numChannels*5)+(c*5); mp_sint32 dstIndex = (r*numChannels*4)+(c*4); mp_sint32 period = 0; mp_ubyte note = srcPattern[srcIndex]; //note = r+24+1; if (note) { note--; if (note >= 24 && note < 24+12*5) period = originalPeriods[note-24]; else period = (periods[note%12]*16>>((note/12)))>>2; } mp_ubyte ins = srcPattern[srcIndex+1]; if (ins > 31) ins = 0; mp_ubyte eff = 0; mp_ubyte op = 0; // First convert volume command to PT compatible effect again :) XModule::convertXMVolumeEffects(srcPattern[srcIndex+2], eff, op); mp_ubyte tmpEff = eff, tmpOp = op; convertEffect(tmpEff, tmpOp, eff, op, c, workBuffers, getType() == XModule::ModuleType_IT); // Having an effect? Overwrite what we already have... if (srcPattern[srcIndex+3] || srcPattern[srcIndex+4]) { eff = srcPattern[srcIndex+3]; op = srcPattern[srcIndex+4]; } if (eff > 0x0f) { eff = op = 0; } /*if (srcPattern[srcIndex+2] >= 0x10 && srcPattern[srcIndex+2] <= 0x50 && eff == 0 && op == 0) { eff = 0x0C; op = srcPattern[srcIndex+2] - 0x10; }*/ dstPattern[dstIndex] = (ins & 0xF0) + ((period>>8)&0x0F); dstPattern[dstIndex+1] = (mp_ubyte)(period&0xFF); dstPattern[dstIndex+2] = ((ins & 0x0F) << 4) + (eff); dstPattern[dstIndex+3] = op; } } f.write(dstPattern, 4, numChannels*64); delete[] srcPattern; delete[] dstPattern; } for (i = 0; i < header.smpnum; i++) { mp_uint32 smplen = prep(smp[i].samplen) << 1; mp_uint32 j = 0; // Ensure first 2 bytes are zero in non-looping // samples (for Protracker/Amiga compatibility) if(!(smp[i].type & 0xef) && smplen >= 2) { f.writeWord(0); j = 2;; } if (smp[i].type & 16) { for (; j < smplen; j++) f.writeByte(smp[i].getSampleValue(j) >> 8); } else { for (; j < smplen; j++) f.writeByte(smp[i].getSampleValue(j)); } } return MP_OK; } #ifdef MILKYTRACKER bool TXMPattern::saveExtendedPattern(const SYSCHAR* fileName) const { // Note: For FT2 compatibility, .XP files are fixed at 32 channels. // TODO: Create a version 2 format for variable channel counts TWorkBuffers workBuffers; // ------ start --------------------------------- XMFile f(fileName, true); if (!f.isOpenForWriting()) return false; f.writeWord(0x1); f.writeWord(rows); mp_sint32 len = rows * 32 * 5; mp_ubyte* srcPattern = new mp_ubyte[len]; memset(srcPattern, 0, len); convertPattern(NULL, this, srcPattern, 32, workBuffers, false); f.write(srcPattern, 1, len); delete[] srcPattern; return true; } bool TXMPattern::saveExtendedTrack(const SYSCHAR* fileName, mp_uint32 channel) const { if (channel >= channum) return false; TWorkBuffers workBuffers; // ------ start --------------------------------- XMFile f(fileName, true); if (!f.isOpenForWriting()) return false; f.writeWord(0x1); f.writeWord(rows); mp_sint32 len = rows * 5; mp_ubyte* srcPattern = new mp_ubyte[rows * channum * 5]; mp_ubyte* dstPattern = new mp_ubyte[len]; convertPattern(NULL, this, srcPattern, channum, workBuffers, false); for (mp_sint32 r = 0; r < rows; r++) { mp_sint32 srcIndex = r*this->channum*5 + channel*5; dstPattern[r*5] = srcPattern[srcIndex]; dstPattern[r*5+1] = srcPattern[srcIndex+1]; dstPattern[r*5+2] = srcPattern[srcIndex+2]; dstPattern[r*5+3] = srcPattern[srcIndex+3]; dstPattern[r*5+4] = srcPattern[srcIndex+4]; } f.write(dstPattern, 1, len); delete[] srcPattern; delete[] dstPattern; return true; } bool TXMPattern::loadExtendedPattern(const SYSCHAR* fileName) { XMFile f(fileName); if (f.readWord() != 0x01) return false; mp_uword rows = f.readWord(); if (rows == 0 || rows > 256) return false; mp_sint32 len = rows * 32 * 5; mp_ubyte* srcPattern = new mp_ubyte[len]; f.read(srcPattern, 1, len); // throw away old pattern delete[] patternData; this->rows = rows; this->channum = 32; this->effnum = 2; patternData = new mp_ubyte[rows*channum*(effnum*2+2)]; mp_ubyte* slot = srcPattern; mp_sint32 bc = 0; for (mp_sint32 r=0;r>4)+0x30; slot[4]=slot[4]&0xf; } if (slot[3]==0x21) { slot[3]=(slot[4]>>4)+0x40; slot[4]=slot[4]&0xf; } if (slot[0]==97) slot[0]=XModule::NOTE_OFF; patternData[bc]=slot[0]; patternData[bc+1]=slot[1]; XModule::convertXMVolumeEffects(slot[2], patternData[bc+2], patternData[bc+3]); patternData[bc+4]=slot[3]; patternData[bc+5]=slot[4]; bc+=6; slot+=5; } // for c } // for r delete[] srcPattern; return true; } bool TXMPattern::loadExtendedTrack(const SYSCHAR* fileName, mp_uint32 channel) { XMFile f(fileName); if (f.readWord() != 0x01) return false; mp_uword rows = f.readWord(); if (rows == 0 || rows > 256) return false; if (rows > this->rows) rows = this->rows; mp_sint32 len = rows * 32 * 5; mp_ubyte* srcPattern = new mp_ubyte[len]; f.read(srcPattern, 1, len); // throw away old pattern mp_ubyte* slot = srcPattern; mp_sint32 bc = 0, r; for (r=0;rchannum*(this->effnum*2+2) + channel*(this->effnum*2+2); char gl=0; for (mp_sint32 i=0;i>4)+0x30; slot[4]=slot[4]&0xf; } if (slot[3]==0x21) { slot[3]=(slot[4]>>4)+0x40; slot[4]=slot[4]&0xf; } if (slot[0]==97) slot[0]=XModule::NOTE_OFF; patternData[bc]=slot[0]; patternData[bc+1]=slot[1]; XModule::convertXMVolumeEffects(slot[2], patternData[bc+2], patternData[bc+3]); patternData[bc+4]=slot[3]; patternData[bc+5]=slot[4]; slot+=5; } // for r for (r = rows; r < this->rows; r++) { bc = r*this->channum*(this->effnum*2+2) + channel*(this->effnum*2+2); memset(patternData + bc, 0, (this->effnum*2+2)); } delete[] srcPattern; return true; } #endif mp_sint32 XModule::getNumUsedPatterns() { mp_sint32 i; mp_sint32 patNum = header.patnum; for (i = header.patnum - 1; i > 0; i--) { TXMPattern* pattern = &phead[i]; if (pattern->patternData == NULL) continue; mp_sint32 slotSize = pattern->effnum * 2 + 2; mp_sint32 patternSize = slotSize * pattern->channum * pattern->rows; bool empty = true; for (mp_sint32 j = 0; j < patternSize; j++) if (pattern->patternData[j]) { empty = false; patNum = i+1; break; } if (empty) { bool found = false; for (mp_sint32 j = 0; j < header.ordnum; j++) if (header.ord[j] == i) { found = true; break; } if (found) { patNum = i+1; break; } } else { patNum = i+1; break; } } if (i == 0) return 0; return patNum; } mp_sint32 XModule::getNumUsedInstruments() { mp_sint32 i; mp_sint32 insNum = header.insnum; for (i = header.insnum - 1; i > 0; i--) { mp_ubyte buffer[MP_MAXTEXT+1]; convertStr(reinterpret_cast(buffer), reinterpret_cast(instr[i].name), MP_MAXTEXT, false); if (strlen((char*)buffer)) { insNum = i+1; break; } if (instr[i].samp) { for (mp_sint32 j = 0; j < 120; j++) { mp_sint32 s = instr[i].snum[j]; if (s >= 0) { convertStr(reinterpret_cast(buffer), reinterpret_cast(smp[s].name), MP_MAXTEXT, false); if (strlen((char*)buffer) || (smp[s].sample && smp[s].samplen)) { insNum = i+1; goto insFound; } } } } } insFound: if (i == 0) return 0; return insNum; } MilkyTracker-1.02.00/src/milkyplay/LittleEndian.cpp000066400000000000000000000053211324432207300221360ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ #include "LittleEndian.h" ////////////////////////////////////////////////////////////////////////// // system independent loading of little endian numbers // ////////////////////////////////////////////////////////////////////////// mp_uword LittleEndian::GET_WORD(const void* ptr) { const mp_ubyte* buffer = (const mp_ubyte*)ptr; return ((mp_uword)buffer[0]+((mp_uword)buffer[1]<<8)); } mp_uint32 LittleEndian::GET_DWORD(const void* ptr) { const mp_ubyte* buffer = (const mp_ubyte*)ptr; return ((mp_uint32)buffer[0]+((mp_uint32)buffer[1]<<8)+((mp_uint32)buffer[2]<<16)+((mp_uint32)buffer[3]<<24)); } ////////////////////////////////////////////////////////////////////////// // system independent loading of big endian numbers // ////////////////////////////////////////////////////////////////////////// mp_uword BigEndian::GET_WORD(const void* ptr) { const mp_ubyte* buffer = (const mp_ubyte*)ptr; return ((mp_uword)buffer[1]+((mp_uword)buffer[0]<<8)); } mp_uint32 BigEndian::GET_DWORD(const void* ptr) { const mp_ubyte* buffer = (const mp_ubyte*)ptr; return ((mp_uint32)buffer[3]+((mp_uint32)buffer[2]<<8)+((mp_uint32)buffer[1]<<16)+((mp_uint32)buffer[0]<<24)); } MilkyTracker-1.02.00/src/milkyplay/LittleEndian.h000066400000000000000000000037341324432207300216110ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * LittleEndian.h * MilkyPlay * * Created by Peter Barth on Tue Oct 19 2004. * */ #ifndef __LITTLEENDIAN_H__ #define __LITTLEENDIAN_H__ #include "MilkyPlayTypes.h" class LittleEndian { public: static mp_uword GET_WORD(const void* ptr); static mp_uint32 GET_DWORD(const void* ptr); }; class BigEndian { public: static mp_uword GET_WORD(const void* ptr); static mp_uint32 GET_DWORD(const void* ptr); }; #endif MilkyTracker-1.02.00/src/milkyplay/Loader669.cpp000066400000000000000000000167301324432207300212430ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * Loader669.cpp * MilkyPlay Module Loader: 669 * * Warning: This is an one-by-one conversion of an assembler version ;) * * -------------------------------- * Version History: * -------------------------------- * 01/24/05: 669 loader is now handled by the FAR replayer * */ #include "Loaders.h" const char* Loader669::identifyModule(const mp_ubyte* buffer) { mp_sint32 i; // check for .669 module if (!memcmp(buffer,"if",2) || !memcmp(buffer,"JN",2)) { // NOS if ((mp_ubyte)buffer[0x6e] > 64) return NULL; // NOP if ((mp_ubyte)buffer[0x6f] > 128) return NULL; if ((mp_ubyte)buffer[0x70] > 127) return NULL; for (i = 0; i < 0x80; i++) { if ((mp_ubyte)buffer[0x71 + i] > 128 && (mp_ubyte)buffer[0x71 + i] != 255) return NULL; if ((mp_ubyte)buffer[0xf1 + i] > 32) return NULL; if ((mp_ubyte)buffer[0x171 + i] > 63) return NULL; } return "669"; } return NULL; } mp_sint32 Loader669::load(XMFileBase& f, XModule* module) { mp_ubyte buffer[2048]; module->cleanUp(); // this will make code much easier to read TXMHeader* header = &module->header; TXMInstrument* instr = module->instr; TXMSample* smp = module->smp; TXMPattern* phead = module->phead; // we're already out of memory here if (!phead || !instr || !smp) return MP_OUT_OF_MEMORY; f.read(buffer,1,0x1f1); memcpy(header->sig, buffer, 2); memcpy(header->name, buffer+2, 30); mp_sint32 i; for (i = 0; i < 256; i++) { if (buffer[i + 0x71] == 0xFF) break; header->ord[i] = buffer[i + 0x71]; } header->ordnum = i; // song message char* unpackedSongMessage = reinterpret_cast(buffer+2); mp_sint32 size = 108; // song message isn't null terminated for (i = 0; i < size; i++) if (unpackedSongMessage[i] == '\0') unpackedSongMessage[i] = ' '; for (i = 0; i < size; i++) { char line[40]; memset(line, 0, sizeof(line)); if (size - i >= 35) { XModule::convertStr(line, unpackedSongMessage+i, 36, false); i+=35; } else { XModule::convertStr(line, unpackedSongMessage+i, size-i, false); i+=size-i; } module->addSongMessageLine(line); } #ifdef VERBOSE printf("%s\n",module->message); #endif header->restart = LittleEndian::GET_WORD(buffer + 0x70); header->insnum = buffer[0x6e]; // number of instruments header->patnum = buffer[0x6f]; // number of patterns header->speed = 80; // default tickspeed header->tempo = 4; // default tempo header->mainvol = 255; header->channum = 9; // add one more channel for speed settings header->freqtab = 1; mp_uint32 s = 0; for (i = 0; i < header->insnum; i++) { f.read(buffer + 0x1f1,1,25); memcpy(instr[i].name, buffer + 0x1f1, 12); if (LittleEndian::GET_DWORD(buffer + 13 + 0x1f1) != 0) { mp_uint32 size = LittleEndian::GET_DWORD(buffer + 13 + 0x1f1); mp_uint32 loopstart = LittleEndian::GET_DWORD(buffer + 17 + 0x1f1); mp_uint32 loopend = LittleEndian::GET_DWORD(buffer + 21 + 0x1f1); if (size > 0) { instr[i].samp = 1; for (mp_sint32 j = 0; j < 120; j++) instr[i].snum[j] = s; smp[s].samplen = size; smp[s].flags = 0; smp[s].finetune = 0; if (loopend != 1048575 && loopend <= size) { smp[s].loopstart = loopstart; smp[s].looplen = loopend - loopstart; smp[s].type = 1; } s++; } } } header->smpnum = s; for (i = 0; i < header->patnum;i++) { f.read(buffer + 0x1f1, 1, 0x600); phead[i].rows = buffer[0x171 + i] + 1; #ifdef VERBOSE printf("%i\n",phead[i].rows); #endif phead[i].effnum = 2; phead[i].channum = (mp_ubyte)header->channum; phead[i].patternData = new mp_ubyte[phead[i].rows*header->channum * (phead[i].effnum * 2 + 2)]; // out of memory? if (phead[i].patternData == NULL) { return MP_OUT_OF_MEMORY; } memset(phead[i].patternData,0,phead[i].rows*header->channum * (phead[i].effnum * 2 + 2)); mp_sint32 r,c,cnt = 0x1f1; mp_sint32 offs = 0; for (r=0;r < phead[i].rows; r++) { // add speed into first channel if (r == 0 && buffer[i+0xf1]) { phead[i].patternData[offs+4] = 0x70; phead[i].patternData[offs+5] = 0xF0 + (buffer[i+0xf1]&0xF); } offs+=(phead[i].effnum * 2 + 2); for (c=1;c < header->channum;c++) { mp_ubyte note = (buffer[cnt] >> 2) + 25; mp_ubyte ins = ((((buffer[cnt]&3)<<4) + (buffer[cnt+1] >> 4))) + 1; mp_sint32 vol = (((mp_sint32)buffer[cnt+1] & 0xf) + 1) * 16; if (vol >= 256) vol = 255; mp_ubyte eff1 = 0xC; mp_ubyte op1 = vol; if (buffer[cnt+2] != 0xff) { mp_ubyte eff2 = buffer[cnt+2] >> 4; mp_ubyte op2 = buffer[cnt+2] & 0xf; switch (eff2) { case 0x00: eff2 = 0x70; op2 |= 0x10; #ifdef VERBOSE printf("porta up\n"); #endif break; case 0x01: eff2 = 0x70; op2 |= 0x20; #ifdef VERBOSE printf("porta down\n"); #endif break; case 0x02: eff2 = 0x70; op2 |= 0x30; break; case 0x04: eff2 = 0x70; op2 |= 0x40; break; case 0x05: eff2 = 0x70; op2 |= 0xF0; break; default: #ifdef VERBOSE printf("%i, %i\n",eff2, op2); #endif eff2 = op2 = 0; } phead[i].patternData[offs+4]=eff2; phead[i].patternData[offs+5]=op2; } if (buffer[cnt] == 0xfe) { note = ins = 0; } else if (buffer[cnt] == 0xff) { note = ins = eff1 = op1 = 0; } phead[i].patternData[offs]=note; phead[i].patternData[offs+1]=ins; phead[i].patternData[offs+2]=eff1; phead[i].patternData[offs+3]=op1; offs+=(phead[i].effnum * 2 + 2); cnt+=3; } } } mp_sint32 result = module->loadModuleSamples(f, XModule::ST_UNSIGNED); if (result != MP_OK) return result; strcpy(header->tracker,"Composer669"); module->setDefaultPanning(); module->postProcessSamples(true); return MP_OK; } MilkyTracker-1.02.00/src/milkyplay/LoaderAMF.cpp000066400000000000000000000700171324432207300213200ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * LoaderAMF.cpp * MilkyPlay Module Loaders: Asylum Music Format 1.0 and DSMI AMF * * Thanks to Grom PE for the additional DMF loader which is a DSMI AMF variant * used in the Tronic, game by Webfoot Technologies inc. * * Warning: This is an one-by-one conversion of an assembler version ;) * */ #include "Loaders.h" const char* LoaderAMF_1::identifyModule(const mp_ubyte* buffer) { // check for .AMF module if (!memcmp(buffer,"ASYLUM Music Format",19)) { return "AMF_1"; } return NULL; } mp_sint32 LoaderAMF_1::load(XMFileBase& f, XModule* module) { mp_ubyte buffer[2048]; module->cleanUp(); // this will make code much easier to read TXMHeader* header = &module->header; TXMInstrument* instr = module->instr; TXMSample* smp = module->smp; TXMPattern* phead = module->phead; // we're already out of memory here if (!phead || !instr || !smp) return -7; f.read(buffer,1,294); memcpy(header->sig,buffer,6); header->ordnum = buffer[36]; // song length header->insnum = buffer[34]; // number of instruments header->patnum = buffer[35]; // number of patterns header->speed = buffer[33]; // default tickspeed header->tempo = buffer[32]; // default tempo header->mainvol = 255; header->channum = 8; header->flags = XModule::MODULE_PTNEWINSTRUMENT; memcpy(header->ord,buffer+38,256); // order list mp_sint32 i, s = 0; for (i = 0; i < header->insnum; i++) { f.read(smp[s].name,1,22); memcpy(instr[i].name,smp[s].name,22); mp_ubyte finetune = f.readByte(); mp_ubyte volume = module->vol64to255(f.readByte()); f.readByte(); // skip something (maybe volume is a 16bit word?) mp_uint32 size = f.readDword(); mp_uint32 loopstart = f.readDword(); mp_uint32 loopend = f.readDword(); module->convertc4spd(module->sfinetunes[finetune],&smp[s].finetune,&smp[s].relnote); smp[s].flags = 1; smp[s].samplen = size; smp[s].loopstart = loopstart; smp[s].looplen = loopend; smp[s].vol = volume; if (smp[s].samplen <= 2) { instr[i].samp = 0; } else { instr[i].samp = 1; for (mp_sint32 j = 0; j < 120; j++) instr[i].snum[j] = s; if ((smp[s].loopstart+smp[s].looplen)>smp[s].samplen) smp[s].looplen-=(smp[s].loopstart+smp[s].looplen)-smp[s].samplen; if (smp[s].loopstart<=2) smp[s].loopstart=0; if (smp[s].looplen<=2) smp[s].looplen=0; else smp[s].type=1; s++; } } header->smpnum = s; f.read(buffer,1,2663-1442); for (i = 0; i < header->patnum;i++) { f.read(buffer,1,2048); phead[i].rows=64; phead[i].effnum=1; phead[i].channum = (mp_ubyte)header->channum; phead[i].patternData = new mp_ubyte[phead[i].rows*header->channum*4]; // out of memory? if (phead[i].patternData == NULL) { return -7; } memset(phead[i].patternData,0,phead[i].rows*header->channum*4); mp_sint32 r,c,cnt=0; for (r=0;r<64;r++) { for (c=0;cchannum;c++) { mp_ubyte note = buffer[cnt]; mp_ubyte ins = buffer[cnt+1]; mp_ubyte eff = buffer[cnt+2]; mp_ubyte op = buffer[cnt+3]; if (note) note++; if (eff==0xE) { eff=(op>>4)+0x30; op&=0xf; if (eff == 0x38) { eff = 0x08; op<<=4; } } if ((!eff)&&op) eff=0x20; // old style modules don't support last effect for: // - portamento up/down // - volume slide if (eff==0x1&&(!op)) eff = 0; if (eff==0x2&&(!op)) eff = 0; if (eff==0xA&&(!op)) eff = 0; if (eff==0x5&&(!op)) eff=0x3; if (eff==0x6&&(!op)) eff=0x4; if (eff==0xC) { op = XModule::vol64to255(op); } phead[i].patternData[cnt]=note; phead[i].patternData[cnt+1]=ins; phead[i].patternData[cnt+2]=eff; phead[i].patternData[cnt+3]=op; cnt+=4; } } } mp_sint32 result = module->loadModuleSamples(f); if (result != MP_OK) return result; strcpy(header->tracker,"..converted.."); module->setDefaultPanning(); module->postProcessSamples(); return MP_OK; } #if 0 const char* LoaderAMF_2::identifyModule(const mp_ubyte* buffer) { // check for .AMF module if (!memcmp(buffer,"AMF", 3)) { // check for version if (buffer[3] < 0xA || buffer[3] > 0xE) return NULL; return "AMF_2"; } return NULL; } // shamelessly copied from MikMod struct AMFNoteSlot { mp_ubyte note,instr,fxcnt; mp_ubyte effect[3]; mp_sbyte parameter[3]; }; #define CLEAN_UP \ for (j = 0; j < maxTracks; j++) \ delete[] tracks[j]; \ delete[] tracks; \ delete[] trackTable; \ delete[] rows; \ delete[] amfOrders; mp_sint32 LoaderAMF_2::load(XMFileBase& f, XModule* module) { module->cleanUp(); // this will make code much easier to read TXMHeader* header = &module->header; TXMInstrument* instr = module->instr; TXMSample* smp = module->smp; TXMPattern* phead = module->phead; // we're already out of memory here if (!phead || !instr || !smp) return -7; // ---- read header info ---- f.read(header->sig, 1, 3); mp_ubyte ver = f.readByte(); f.read(header->name, 1, 32); header->insnum = f.readByte(); header->ordnum = header->patnum = f.readByte(); mp_uword numTracks = f.readWord(); header->channum = f.readByte(); mp_sint32 channelRemap[16]; if (ver >= 11) { mp_ubyte panpos[32]; f.read(panpos, 1, (ver >= 13) ? 32 : 16); } else { for (mp_sint32 i = 0; i < 16; i++) channelRemap[i] = f.readByte(); } if (ver >= 13) { // read BPM header->speed = f.readByte(); // read speed header->tempo = f.readByte(); } else { header->speed = 125; header->tempo = 6; } header->mainvol = 255; mp_sint32 i,j,k; for (i = 0; i < header->ordnum; i++) header->ord[i] = i; mp_uword* amfOrders = new mp_uword[header->channum*header->ordnum]; mp_uword* rows = new mp_uword[header->ordnum]; for (i = 0; i < header->ordnum; i++) { rows[i] = 64; if (ver >= 14) rows[i] = f.readWord(); if (ver > 10) f.readWords(amfOrders+(i*header->channum), header->channum); else { for(j = 0; j < header->channum; j++) amfOrders[i*header->channum+channelRemap[j]]=f.readWord(); } } // ---- read sample info ---- j = 0; for (i = 0; i < header->insnum; i++) { mp_ubyte type = f.readByte(); f.read(instr[i].name, 1, 32); mp_ubyte dosname[13]; f.read(dosname, 1, 13); mp_sint32 offset = f.readDword(); mp_sint32 length = f.readDword(); mp_dword c2spd = f.readWord(); mp_ubyte vol = f.readByte(); mp_sint32 loopstart; mp_sint32 loopend; if (ver >= 10) { loopstart = f.readDword(); loopend = f.readDword(); } else { loopstart = f.readWord(); loopend = length; } if (type) { memcpy(smp[j].name, dosname, 13); module->convertc4spd(c2spd, &smp[j].finetune, &smp[j].relnote); if (loopend - loopstart > 2) smp[j].type = 1; smp[j].flags = 1; smp[j].samplen = length; smp[j].loopstart = loopstart; smp[j].looplen = loopend; smp[j].vol = XModule::vol64to255(vol); instr[i].samp = 1; for (mp_sint32 k = 0; k < 120; k++) instr[i].snum[k] = j; j++; } } header->smpnum = j; mp_uword* trackTable = new mp_uword[numTracks]; mp_uword maxTracks = 0; f.readWords(trackTable, numTracks); for (i = 0; i < numTracks; i++) if (trackTable[i] > maxTracks) maxTracks = trackTable[i]; // ---- read tracks ---- AMFNoteSlot** tracks = new AMFNoteSlot*[maxTracks]; memset(tracks, 0, sizeof(AMFNoteSlot*)*maxTracks); for (i = 0; i < maxTracks; i++) { tracks[i] = new AMFNoteSlot[64]; memset(tracks[i], 0, sizeof(AMFNoteSlot)*64); AMFNoteSlot* track = tracks[i]; // shamelessly copied from MikMod mp_sint32 tracksize; mp_ubyte row,cmd; mp_sbyte arg; tracksize = f.readWord(); tracksize+=((mp_sint32)f.readByte()) << 16; if (tracksize) while(tracksize--) { row = f.readByte(); cmd = f.readByte(); arg = f.readByte(); // unexpected end of track if (!tracksize) { if((row==0xff) && (cmd==0xff) && (arg==-1)) break; /* the last triplet should be FF FF FF, but this is not always the case... maybe a bug in m2amf ? else return 0; */ } // invalid row (probably unexpected end of row) if (row>=64) { CLEAN_UP return -8; } if (cmd<0x7f) { // note, vol track[row].note=cmd+1; if (track[row].fxcnt<3) { track[row].effect[track[row].fxcnt] = 0x03; track[row].parameter[track[row].fxcnt] = (mp_ubyte)arg; track[row].fxcnt++; } } else if (cmd==0x7f) { // duplicate row if ((arg<0)&&(row+arg>=0)) { memcpy(track+row,track+(row+arg),sizeof(AMFNoteSlot)); } } else if (cmd==0x80) { // instr track[row].instr=arg+1; } else if (cmd==0xff) { // apparently, some M2AMF version fail to estimate the // size of the compressed patterns correctly, and end // up with blanks, i.e. dead triplets. Those are marked // with cmd == 0xff. Let's ignore them. } else if (track[row].fxcnt<3) { // effect, param if (cmd > 0x97) { CLEAN_UP return -8; } track[row].effect[track[row].fxcnt]=cmd&0x7f; track[row].parameter[track[row].fxcnt]=arg; track[row].fxcnt++; } else { CLEAN_UP return -8; } } } // ---- convert tracks to patterns ---- for (i = 0; i < header->ordnum; i++) { phead[i].rows = rows[i]; phead[i].channum = (mp_ubyte)header->channum; phead[i].effnum = 3; mp_sint32 slotSize = (mp_sint32)(2+phead[i].effnum*2); mp_sint32 patSize = (mp_sint32)phead[i].rows*(mp_sint32)header->channum*slotSize; phead[i].patternData = new mp_ubyte[patSize]; // out of memory? if (phead[i].patternData == NULL) { CLEAN_UP return -7; } memset(phead[i].patternData, 0, patSize); for (mp_sint32 row = 0; row < phead[i].rows; row++) for (mp_sint32 chn = 0; chn < phead[i].channum; chn++) { j = amfOrders[i*phead[i].channum+chn]; if (j && j <= numTracks) { j = trackTable[j-1]; if (j && j <= maxTracks) { AMFNoteSlot* track = tracks[j-1]; mp_ubyte* dstSlot = phead[i].patternData+row*phead[i].channum*slotSize+chn*slotSize; // convert note slot if (track[row].note) dstSlot[0] = track[row].note - 12; dstSlot[1] = track[row].instr; mp_sint32 l = 0; for (k = 0; k < track[row].fxcnt; k++) { mp_ubyte nEff = 0; mp_ubyte nOp = 0; mp_sbyte op = track[row].parameter[k]; switch (track[row].effect[k]) { // Set speed (ticks) case 0x01: nEff = 0x1C; nOp = op; break; // Volume slide case 2: nEff = 0x0A; if (op) { if (op>=0) nOp = ((op&0xf)<<4); else nOp = (-op)&0xf; } break; // set volume case 0x03: nEff = 0x0C; nOp = XModule::vol64to255(op); break; // portamento up/down case 0x04: if (op >= 0) { nEff = 0x02; nOp = op & 0xf; } else { nEff = 0x01; nOp = (-op) & 0xf; } break; // Porta to note case 0x06: nEff = 0x03; nOp = op; break; // tremor case 0x07: nEff = 0x1D; nOp = op; break; // arpeggio case 0x08: nEff = 0x20; nOp = op; break; // vibrato case 0x09: nEff = 0x04; nOp = op; break; // Porta + Volume slide case 0xA: nEff = 0x05; if (op) { if (op>=0) nOp = ((op&0xf)<<4); else nOp = (-op) & 0xf; } break; // Vibrato + Volume slide case 0xB: nEff = 0x06; if (op) { if (op>=0) nOp = ((op&0xf)<<4); else nOp = (-op) & 0xf; } break; // Pattern break (in hex) case 0xC: nEff = 0x0D; nOp = (op/10)*16 + (op%10); break; // Pos. jump case 0xD: nEff = 0x0B; nOp = op; break; // Retrig case 0xF: nEff = 0x1B; nOp = op; break; // Sample offset case 0x10: nEff = 0x09; nOp = op; break; // Fine Volume slide case 0x11: if (op) { if (op>=0) { nEff = 0x3A; nOp = op & 0x0f; } else { nEff = 0x3B; nOp = (-op) & 0x0f; } } break; // Fine Porta case 0x12: if (op) { if (op>=0) { nEff = 0x32; nOp = op & 0x0f; } else { nEff = 0x31; nOp = (-op) & 0x0f; } } break; // Note delay case 0x13: nEff = 0x3D; nOp = op; break; // Note cut case 0x14: nEff = 0x3C; nOp = op; break; // Set tempo (bpm) case 0x15: nEff = 0x16; nOp = op; break; // Set panning case 0x17: if (op > 64) { nEff = 0x08; nOp = XModule::vol64to255(op); } break; } // put volume in first command // otherwise in second if (l == 0 && nEff != 0x0C) { l = 1; } // if not first effect search for empty effect slot else { for (mp_sint32 m = 0; m < phead[i].effnum; m++) if (!dstSlot[2+m*2]) { l = m; break; } } if (nEff) { dstSlot[2+l*2] = nEff; dstSlot[2+l*2+1] = nOp; } } } } } } CLEAN_UP mp_sint32 result = module->loadModuleSamples(f, XModule::ST_UNSIGNED); if (result != MP_OK) return result; // --- kick out duplicate patterns --- mp_ubyte patReloc[255]; memset(patReloc, 0xFF, sizeof(patReloc)); for (i = 0; i < header->patnum; i++) { if (patReloc[i] == 0xFF) { for (j = 0; j < header->patnum; j++) { if ((j != i && patReloc[j] == 0xFF) && phead[i].rows == phead[j].rows && phead[i].channum == phead[j].channum && phead[i].effnum == phead[j].effnum) { mp_sint32 slotSize = (mp_sint32)(2+phead[i].effnum*2); mp_sint32 patSize = (mp_sint32)phead[i].rows*(mp_sint32)header->channum*slotSize; if (memcmp(phead[i].patternData, phead[j].patternData, patSize) == 0) { patReloc[j] = i; } } } } } for (i = 0; i < header->ordnum; i++) { if (patReloc[header->ord[i]] != 255) header->ord[i] = patReloc[header->ord[i]]; } module->removeUnusedPatterns(false); strcpy(header->tracker,"..converted.."); module->setDefaultPanning(); module->postProcessSamples(); return MP_OK; } // --------------- #else const char* LoaderAMF_2::identifyModule(const mp_ubyte* buffer) { // check for .AMF module if (!memcmp(buffer,"DMF", 3)) { // check for version if (buffer[3] < 0xA || buffer[3] > 0xE) return NULL; return "AMF_2"; } return NULL; } // shamelessly copied from MikMod struct AMFNoteSlot { mp_ubyte note,instr,fxcnt; mp_ubyte effect[3]; mp_sbyte parameter[3]; }; #define CLEAN_UP \ for (j = 0; j < maxTracks; j++) \ delete[] tracks[j]; \ delete[] tracks; \ delete[] trackTable; \ delete[] rows; \ delete[] amfOrders; mp_sint32 LoaderAMF_2::load(XMFileBase& f, XModule* module) { module->cleanUp(); // this will make code much easier to read TXMHeader* header = &module->header; TXMInstrument* instr = module->instr; TXMSample* smp = module->smp; TXMPattern* phead = module->phead; // we're already out of memory here if (!phead || !instr || !smp) return MP_OUT_OF_MEMORY; // ---- read header info ---- f.read(header->sig, 1, 3); mp_ubyte ver = f.readByte(); // f.read(header->name, 1, 32); header->insnum = f.readByte(); header->ordnum = header->patnum = f.readByte(); mp_uword numTracks = f.readWord(); header->channum = f.readByte(); mp_sint32 channelRemap[16]; if (ver >= 11) { mp_ubyte panpos[32]; f.read(panpos, 1, (ver >= 13) ? 32 : 16); } else { for (mp_sint32 i = 0; i < 16; i++) channelRemap[i] = f.readByte(); } if (ver >= 13) { // read BPM header->speed = f.readByte(); // read speed header->tempo = f.readByte(); } else { header->speed = 125; header->tempo = 6; } header->mainvol = 255; mp_sint32 i,j,k; for (i = 0; i < header->ordnum; i++) header->ord[i] = i; mp_uword* amfOrders = new mp_uword[header->channum*header->ordnum]; mp_uword* rows = new mp_uword[header->ordnum]; for (i = 0; i < header->ordnum; i++) { rows[i] = 64; if (ver >= 14) rows[i] = f.readWord(); if (ver > 10) f.readWords(amfOrders+(i*header->channum), header->channum); else { for(j = 0; j < header->channum; j++) amfOrders[i*header->channum+channelRemap[j]]=f.readWord(); } } // ---- read sample info ---- j = 0; for (i = 0; i < header->insnum; i++) { mp_ubyte type = f.readByte(); // f.read(instr[i].name, 1, 32); // mp_ubyte dosname[13]; // f.read(dosname, 1, 13); // f.readByte(); // FIXME: where's missing byte? mp_sint32 offset = f.readDword() >> 8; mp_sint32 length = f.readDword() >> 8; mp_ubyte vol = f.readByte(); mp_dword c2spd = f.readWord(); // f.seek(-1, f.SeekOffsetTypeCurrent); // Restore missing byte mp_sint32 loopstart; mp_sint32 loopend; if (ver >= 10) { loopstart = f.readDword() >> 8; loopend = f.readDword() >> 8; } else { loopstart = f.readWord(); loopend = length; } if (type) { // memcpy(smp[j].name, dosname, 13); module->convertc4spd(c2spd, &smp[j].finetune, &smp[j].relnote); if (loopend - loopstart > 2) smp[j].type = 1; smp[j].flags = 1; smp[j].samplen = length; smp[j].loopstart = loopstart; smp[j].looplen = loopend; smp[j].vol = XModule::vol64to255(vol); instr[i].samp = 1; for (mp_sint32 k = 0; k < 120; k++) instr[i].snum[k] = j; j++; } } header->smpnum = j; mp_uword* trackTable = new mp_uword[numTracks]; mp_uword maxTracks = 0; f.readWords(trackTable, numTracks); for (i = 0; i < numTracks; i++) if (trackTable[i] > maxTracks) maxTracks = trackTable[i]; // ---- read tracks ---- AMFNoteSlot** tracks = new AMFNoteSlot*[maxTracks]; memset(tracks, 0, sizeof(AMFNoteSlot*)*maxTracks); for (i = 0; i < maxTracks; i++) { tracks[i] = new AMFNoteSlot[64]; memset(tracks[i], 0, sizeof(AMFNoteSlot)*64); AMFNoteSlot* track = tracks[i]; // shamelessly copied from MikMod mp_sint32 tracksize; mp_ubyte row,cmd; mp_sbyte arg; tracksize = f.readWord(); tracksize+=((mp_sint32)f.readByte()) << 16; if (tracksize) while(tracksize--) { row = f.readByte(); cmd = f.readByte(); arg = f.readByte(); // unexpected end of track if (!tracksize) { if((row==0xff) && (cmd==0xff) && (arg==-1)) break; /* the last triplet should be FF FF FF, but this is not always the case... maybe a bug in m2amf ? else return 0; */ } // invalid row (probably unexpected end of row) if (row>=64) { CLEAN_UP return MP_LOADER_FAILED; } if (cmd<0x7f) { // note, vol track[row].note=cmd+1; if (track[row].fxcnt<3) { track[row].effect[track[row].fxcnt] = 0x03; track[row].parameter[track[row].fxcnt] = (mp_ubyte)arg; track[row].fxcnt++; } } else if (cmd==0x7f) { // duplicate row if ((arg<0)&&(row+arg>=0)) { memcpy(track+row,track+(row+arg),sizeof(AMFNoteSlot)); } } else if (cmd==0x80) { // instr track[row].instr=arg+1; } else if (cmd==0xff) { // apparently, some M2AMF version fail to estimate the // size of the compressed patterns correctly, and end // up with blanks, i.e. dead triplets. Those are marked // with cmd == 0xff. Let's ignore them. } else if (track[row].fxcnt<3) { // effect, param if (cmd > 0x97) { CLEAN_UP return MP_LOADER_FAILED; } track[row].effect[track[row].fxcnt]=cmd&0x7f; track[row].parameter[track[row].fxcnt]=arg; track[row].fxcnt++; } else { CLEAN_UP return MP_LOADER_FAILED; } } } // ---- convert tracks to patterns ---- for (i = 0; i < header->ordnum; i++) { phead[i].rows = rows[i]; phead[i].channum = (mp_ubyte)header->channum; phead[i].effnum = 3; mp_sint32 slotSize = (mp_sint32)(2+phead[i].effnum*2); mp_sint32 patSize = (mp_sint32)phead[i].rows*(mp_sint32)header->channum*slotSize; phead[i].patternData = new mp_ubyte[patSize]; // out of memory? if (phead[i].patternData == NULL) { CLEAN_UP return MP_OUT_OF_MEMORY; } memset(phead[i].patternData, 0, patSize); for (mp_sint32 row = 0; row < phead[i].rows; row++) for (mp_sint32 chn = 0; chn < phead[i].channum; chn++) { j = amfOrders[i*phead[i].channum+chn]; if (j && j <= numTracks) { j = trackTable[j-1]; if (j && j <= maxTracks) { AMFNoteSlot* track = tracks[j-1]; mp_ubyte* dstSlot = phead[i].patternData+row*phead[i].channum*slotSize+chn*slotSize; // convert note slot if (track[row].note) dstSlot[0] = track[row].note - 12; dstSlot[1] = track[row].instr; mp_sint32 l = 0; for (k = 0; k < track[row].fxcnt; k++) { mp_ubyte nEff = 0; mp_ubyte nOp = 0; mp_sbyte op = track[row].parameter[k]; switch (track[row].effect[k]) { // Set speed (ticks) case 0x01: nEff = 0x1C; nOp = op; break; // Volume slide case 2: nEff = 0x0A; if (op) { if (op>=0) nOp = ((op&0xf)<<4); else nOp = (-op)&0xf; } break; // set volume case 0x03: nEff = 0x0C; nOp = XModule::vol64to255(op); break; // portamento up/down case 0x04: if (op >= 0) { nEff = 0x02; nOp = op & 0xf; } else { nEff = 0x01; nOp = (-op) & 0xf; } break; // Porta to note case 0x06: nEff = 0x03; nOp = op; break; // tremor case 0x07: nEff = 0x1D; nOp = op; break; // arpeggio case 0x08: nEff = 0x20; nOp = op; break; // vibrato case 0x09: nEff = 0x04; nOp = op; break; // Porta + Volume slide case 0xA: nEff = 0x05; if (op) { if (op>=0) nOp = ((op&0xf)<<4); else nOp = (-op) & 0xf; } break; // Vibrato + Volume slide case 0xB: nEff = 0x06; if (op) { if (op>=0) nOp = ((op&0xf)<<4); else nOp = (-op) & 0xf; } break; // Pattern break (in hex) case 0xC: nEff = 0x0D; nOp = (op/10)*16 + (op%10); break; // Pos. jump case 0xD: nEff = 0x0B; nOp = op; break; // Retrig case 0xF: nEff = 0x1B; nOp = op; break; // Sample offset case 0x10: nEff = 0x09; nOp = op; break; // Fine Volume slide case 0x11: if (op) { if (op>=0) { nEff = 0x3A; nOp = op & 0x0f; } else { nEff = 0x3B; nOp = (-op) & 0x0f; } } break; // Fine Porta case 0x12: if (op) { if (op>=0) { nEff = 0x32; nOp = op & 0x0f; } else { nEff = 0x31; nOp = (-op) & 0x0f; } } break; // Note delay case 0x13: nEff = 0x3D; nOp = op; break; // Note cut case 0x14: nEff = 0x3C; nOp = op; break; // Set tempo (bpm) case 0x15: nEff = 0x16; nOp = op; break; // Set panning case 0x17: if (op > 64) { nEff = 0x08; nOp = XModule::vol64to255(op); } break; } // put volume in first command // otherwise in second if (l == 0 && nEff != 0x0C) { l = 1; } // if not first effect search for empty effect slot else { for (mp_sint32 m = 0; m < phead[i].effnum; m++) if (!dstSlot[2+m*2]) { l = m; break; } } if (nEff) { dstSlot[2+l*2] = nEff; dstSlot[2+l*2+1] = nOp; } } } } } } CLEAN_UP mp_sint32 result = module->loadModuleSamples(f, XModule::ST_DEFAULT); if (result != MP_OK) return result; // --- kick out duplicate patterns --- mp_ubyte patReloc[255]; memset(patReloc, 0xFF, sizeof(patReloc)); for (i = 0; i < header->patnum; i++) { if (patReloc[i] == 0xFF) { for (j = 0; j < header->patnum; j++) { if ((j != i && patReloc[j] == 0xFF) && phead[i].rows == phead[j].rows && phead[i].channum == phead[j].channum && phead[i].effnum == phead[j].effnum) { mp_sint32 slotSize = (mp_sint32)(2+phead[i].effnum*2); mp_sint32 patSize = (mp_sint32)phead[i].rows*(mp_sint32)header->channum*slotSize; if (memcmp(phead[i].patternData, phead[j].patternData, patSize) == 0) { patReloc[j] = i; } } } } } for (i = 0; i < header->ordnum; i++) { if (patReloc[header->ord[i]] != 255) header->ord[i] = patReloc[header->ord[i]]; } module->removeUnusedPatterns(false); strcpy(header->tracker,"..converted.."); module->setDefaultPanning(); module->postProcessSamples(); return MP_OK; } #endif MilkyTracker-1.02.00/src/milkyplay/LoaderAMS.cpp000066400000000000000000001007641324432207300213400ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * LoaderAMS.cpp * MilkyPlay Module Loader: Velvet Studio and Extreme Tracker formats * * Created by Peter Barth on 17.12.04. * */ #include "Loaders.h" #ifdef VERBOSE #include #endif // Hm well, AMS can handle up to 7 effects but my player is only configured to handle 4 #define MAXEFFECTS MP_NUMEFFECTS static void convertAMSEffects(mp_ubyte& effect, mp_ubyte& operand) { switch (effect) { case 0x00: case 0x01: case 0x02: case 0x03: case 0x04: case 0x05: case 0x06: case 0x07: case 0x09: case 0x0A: case 0x0B: case 0x0D: case 0x0F: break; case 0x0E: effect = 0x30 + (operand >> 4); operand &= 0xF; // break sample loop if (effect == 0x38 && !operand) { effect = 0x4F; operand = 0x3; } break; case 0x08: operand = (mp_ubyte)XModule::pan15to255(operand); break; case 0x10: effect = 0x4F; if (operand > 2) effect = operand = 0; break; case 0x11: effect = 0x41; break; case 0x12: effect = 0x42; break; case 0x13: effect = 0x1B; break; case 0x18: operand = ((operand & 0xf) << 4) | (operand>>4); break; case 0x1A: if (operand & 0xF) { effect = 0x46; operand = (operand&0xF)<<1; } else if (operand >> 4) { effect = 0x45; operand = (operand>>4)<<1; } break; case 0x1C: effect = 0x50; operand = XModule::vol127to255(operand); break; case 0x1E: switch (operand>>4) { case 0x01: effect = 0x31; operand &= 0xF; break; case 0x02: effect = 0x32; operand &= 0xF; break; // extra fine volume slide up case 0x0A: effect = 0x4B; operand = (operand&0xf)<<1; break; // extra fine volume slide down case 0x0B: effect = 0x4C; operand = (operand&0xf)<<1; break; default: #ifdef VERBOSE printf("Missing: E%x\n", operand>>4); #endif break; }; break; case 0x20: effect = 0x51; break; case 0x21: effect = 1; break; case 0x22: effect = 2; break; case 0x2A: effect = 0x1E; if (operand & 0xF) { operand = 0xB0 + ((((operand & 0xF) << 1) < 0x10) ? ((operand & 0xF) << 1) : 0xF); } else if (operand >> 4) { operand = 0xA0 + ((((operand >> 4) << 1) < 0x10) ? ((operand >> 4) << 1) : 0xF); } break; case 0x2C: effect = 0x10; operand = XModule::vol127to255(operand); break; case 0x0C: operand = XModule::vol127to255(operand); break; default: #ifdef VERBOSE printf("Missing: %x/%x\n", effect, operand); #endif effect = operand = 0; break; } } mp_uint32 UnpackMethod1(mp_ubyte* input, mp_ubyte* output, mp_uint32 inputsize); static mp_sint32 loadAMSSamples(XModule* module, XMFileBase& f) { // this will make code much easier to read TXMHeader* header = &module->header; TXMSample* smp = module->smp; mp_sint32 i,j; for (i = 0; i < header->smpnum; i++) { if (!(smp[i].flags & 64)) { if (smp[i].flags & 128) { mp_sint32 pos = f.posWithBaseOffset(); j = f.readDword(); mp_sint32 packedSize = f.readDword(); mp_ubyte* packedData = new mp_ubyte[j>(packedSize+9)?j:(packedSize*2+9)]; if (packedData == NULL) { return MP_OUT_OF_MEMORY; } f.seekWithBaseOffset(pos); f.read(packedData, 1, packedSize + 9); smp[i].sample = (mp_sbyte*)module->allocSampleMem(j); if (smp[i].sample == NULL) { delete[] packedData; return MP_OUT_OF_MEMORY; } UnpackMethod1(packedData, (mp_ubyte*)smp[i].sample, packedSize); if (smp[i].type&16) { mp_sword* buffer = (mp_sword*)smp[i].sample; for (j = 0; j < (signed)smp[i].samplen; j++) { mp_sword v = LittleEndian::GET_WORD(buffer); *buffer++ = v; } } delete[] packedData; } else { if (!(smp[i].type&16)) { smp[i].sample = (mp_sbyte*)module->allocSampleMem(smp[i].samplen); if (smp[i].sample == NULL) { return MP_OUT_OF_MEMORY; } if (!module->loadSample(f,smp[i].sample,smp[i].samplen,smp[i].samplen)) { return MP_OUT_OF_MEMORY; } } else { smp[i].sample = (mp_sbyte*)module->allocSampleMem(smp[i].samplen*2); if (smp[i].sample == NULL) { return MP_OUT_OF_MEMORY; } if (!module->loadSample(f,smp[i].sample, smp[i].samplen*2, smp[i].samplen, XModule::ST_16BIT)) { return MP_OUT_OF_MEMORY; } } } } } return MP_OK; } const char* LoaderAMSv1::identifyModule(const mp_ubyte* buffer) { // check for .AMS module if (!memcmp(buffer,"Extreme\x30\x1",9)) { return "AMSv1"; } return NULL; } mp_sint32 LoaderAMSv1::load(XMFileBase& f, XModule* module) { mp_sint32 i,j; module->cleanUp(); // this will make code much easier to read TXMHeader* header = &module->header; TXMInstrument* instr = module->instr; TXMSample* smp = module->smp; TXMPattern* phead = module->phead; // we're already out of memory here if (!phead || !instr || !smp) return MP_OUT_OF_MEMORY; f.read(header->sig, 1, 7); if (f.readWord() != 0x130) return MP_LOADER_FAILED; header->mainvol = 0xff; memcpy(header->tracker, "Extreme Tracker", 15); i = f.readByte(); header->channum = (i & 31) + 1; mp_ubyte effnum = i>>5; header->insnum = f.readByte(); header->patnum = f.readWord(); header->ordnum = f.readWord(); header->speed = 125; header->tempo = 6; f.readByte(); i = f.readWord(); f.seekWithBaseOffset(f.posWithBaseOffset() + i); mp_sint32 s = 0; for (i = 0; i < header->insnum; i++) { mp_sint32 smpLen = f.readDword(); if (smpLen) { instr[i].samp = 1; for (j = 0; j < 120; j++) instr[i].snum[j] = s; } mp_sint32 loopStart = f.readDword(); mp_sint32 loopEnd = f.readDword(); mp_ubyte panPosFinetune = f.readByte(); mp_sint32 c4spd = f.readWord(); mp_ubyte volume = f.readByte(); mp_ubyte infoByte = f.readByte(); if (instr[i].samp) { smp[s].samplen = smpLen; smp[s].loopstart = loopStart; smp[s].looplen = loopEnd - loopStart; mp_sint32 newC4spd = XModule::getc4spd(0, XModule::modfinetunes[panPosFinetune & 0xF]); newC4spd = (c4spd*newC4spd) / 8363; XModule::convertc4spd(newC4spd, &smp[s].finetune, &smp[s].relnote); smp[s].vol = XModule::vol127to255(volume); if (loopEnd) smp[s].type = 1; // 16 bit sample smp[s].type |= (infoByte&128)>>3; // mark as packed sample (for now) smp[s].flags = ((infoByte&1) << 7) | 1; if (panPosFinetune >> 4) { smp[s].flags |= 2; smp[s].pan = (((panPosFinetune >> 4)-1)*1259226) >> 16; } else { smp[s].pan = 0x80; } s++; } } header->smpnum = s; i = f.readByte(); f.read(header->name, 1, i); for (j = 0; j < header->insnum; j++) { i = f.readByte(); f.read(instr[j].name, 1, i); } for (j = 0; j < header->channum; j++) { i = f.readByte(); f.seekWithBaseOffset(f.posWithBaseOffset()+i); } for (j = 0; j < header->patnum; j++) { i = f.readByte(); f.seekWithBaseOffset(f.posWithBaseOffset()+i); } // read song message mp_sint32 size = f.readWord(); mp_ubyte* packedSongMessage = new mp_ubyte[size]; f.read(packedSongMessage, 1, size); j = 0; for (i = 0; i < size; i++) { if (packedSongMessage[i] & 0x80) j+=packedSongMessage[i] & 127; else j++; } char* unpackedSongMessage = new char[j+1]; j = 0; for (i = 0; i < size; i++) { if (packedSongMessage[i] & 0x80) { mp_sint32 len = packedSongMessage[i] & 0x7f; for (mp_sint32 k = 0; k < len; k++) unpackedSongMessage[j++] = ' '; } else unpackedSongMessage[j++] = packedSongMessage[i]; } unpackedSongMessage[j] = '\0'; delete[] packedSongMessage; for (i = 0; i < j; i++) { char line[80]; memset(line, 0, sizeof(line)); if (j - i >= 75) { XModule::convertStr(line, unpackedSongMessage+i, 76, false); i+=75; } else { XModule::convertStr(line, unpackedSongMessage+i, j-i, false); i+=j-i; } module->addSongMessageLine(line); } delete[] unpackedSongMessage; #ifdef VERBOSE printf("%s",module->message); #endif mp_uword* orders = new mp_uword[header->ordnum]; f.readWords(orders, header->ordnum); if (header->ordnum > 255) header->ordnum = 255; for (i = 0; i < header->ordnum; i++) header->ord[i] = (mp_ubyte)orders[i]; delete[] orders; for (i = 0; i < header->patnum; i++) { mp_sint32 patSize = f.readDword(); phead[i].rows = 64; phead[i].channum = (mp_ubyte)header->channum; phead[i].effnum = effnum; if (phead[i].effnum > MAXEFFECTS) phead[i].effnum = MAXEFFECTS; mp_sint32 slotSize = phead[i].effnum*2 + 2; phead[i].patternData = new mp_ubyte[slotSize * phead[i].channum * phead[i].rows]; if (phead[i].patternData == NULL) { return MP_OUT_OF_MEMORY; } memset(phead[i].patternData, 0, slotSize * phead[i].channum * phead[i].rows); if (patSize) { mp_ubyte* pattern = new mp_ubyte[patSize*2]; if (pattern == NULL) { return MP_OUT_OF_MEMORY; } memset(pattern, 0xff, patSize*2); f.read(pattern, 1, patSize); mp_ubyte fullRow[(7*2+2)*32]; mp_sint32 patOfs = 0; mp_sint32 rowOfs = 0; memset(fullRow, 0, sizeof(fullRow)); mp_sint32 rowCnt = 0; while (patOfs < patSize) { mp_ubyte ins = 0; mp_ubyte note = 0; mp_ubyte b = 0; mp_ubyte flag = 0; if ((b = pattern[patOfs++]) != 0xFF) { // channel rowOfs = (b & 31)*slotSize; flag = 1; // if bit 6 not set, read note and instrument if (!(b & 64)) { note = pattern[patOfs++]; ins = pattern[patOfs++]; flag = note>>7; note = note&127; if (note) note += 12; fullRow[rowOfs++] = note; fullRow[rowOfs++] = ins; } else rowOfs+=2; if (flag) { mp_sint32 numfx = 0; while (true) { mp_ubyte command = pattern[patOfs++]; // volume if (command & 64) { // add volume if (numfx < phead[i].effnum) { fullRow[rowOfs++] = 0x0C; fullRow[rowOfs++] = XModule::vol127to255((command&63)<<1); } else { #ifdef VERBOSE printf("Skipping"); #endif } numfx++; } else { mp_ubyte operand = pattern[patOfs++]; mp_ubyte effect = command & 63; convertAMSEffects(effect, operand); if (numfx < phead[i].effnum) { fullRow[rowOfs++] = effect; fullRow[rowOfs++] = operand; } else { #ifdef VERBOSE printf("Skipping"); #endif } numfx++; } if (!(command & 128)) break; } } } // row finished? if ((b & 128)) { ASSERT(rowCnt < phead[i].rows); memcpy(phead[i].patternData + rowCnt * phead[i].channum * slotSize, fullRow, slotSize * phead[i].channum); memset(fullRow, 0, sizeof(fullRow)); rowCnt++; } } #ifdef VERBOSE printf("Pattern (%i) finished %i/%i, %i/%i\n", i, patOfs, patSize, rowCnt, phead[i].rows); #endif delete[] pattern; } } mp_sint32 result = loadAMSSamples(module, f); if (result != MP_OK) return result; module->setDefaultPanning(); module->postProcessSamples(); return MP_OK; } const char* LoaderAMSv2::identifyModule(const mp_ubyte* buffer) { // check for .AMS module if (!memcmp(buffer,"AMShdr\x1a",7)) { return "AMSv2"; } return NULL; } mp_sint32 LoaderAMSv2::load(XMFileBase& f, XModule* module) { mp_sint32 i,j,k; module->cleanUp(); // this will make code much easier to read TXMHeader* header = &module->header; TXMInstrument* instr = module->instr; TXMSample* smp = module->smp; TXMPattern* phead = module->phead; // we're already out of memory here if (!phead || !instr || !smp) return MP_OUT_OF_MEMORY; f.read(header->sig, 1, 6); f.readByte(); i = f.readByte(); f.read(header->name, 1, i); mp_sint32 ver = f.readWord(); if ((ver != 0x202) && (ver != 0x201)) return MP_LOADER_FAILED; header->mainvol = 0xff; memcpy(header->tracker, "Velvet Studio", 13); header->insnum = f.readByte(); header->patnum = f.readWord(); header->ordnum = f.readWord(); if (ver == 0x202) header->speed = f.readWord() >> 8; else header->speed = f.readByte(); header->tempo = f.readByte(); mp_sint32 defaultChannels, defaultCommands, defaultRows, flags; if (ver == 0x202) { defaultChannels = f.readByte(); defaultCommands = f.readByte(); defaultRows = f.readByte(); flags = f.readWord(); } else flags = f.readByte(); header->freqtab = (flags>>6)&1; mp_ubyte* shadowInsLut = new mp_ubyte[header->insnum*16]; mp_sint32 s = 0; for (i = 0; i < header->insnum; i++) { j = f.readByte(); f.read(instr[i].name, 1, j); instr[i].samp = f.readByte(); if (instr[i].samp) { mp_ubyte nbu[120]; f.read(nbu, 1, 120); for (j = 0; j < 120; j++) instr[i].snum[j] = nbu[j] + s; mp_sint32 envSpeed; mp_sint32 susPt; mp_sint32 loopStart; mp_sint32 loopEnd; mp_sint32 numPts; mp_ubyte envelope[64*3]; TEnvelope env; // read volume envelope envSpeed = f.readByte(); susPt = f.readByte(); loopStart = f.readByte(); loopEnd = f.readByte(); numPts = f.readByte(); f.read(envelope, 3, numPts); if (numPts) { memset(&env,0,sizeof(env)); mp_uword x = 0; for (j = 0; j < numPts; j++) { mp_uword dx = (mp_uword)envelope[j*3] + (((mp_uword)envelope[j*3+1] << 8) & 256); x+=dx; env.env[j][0] = x; env.env[j][1] = XModule::vol127to255(envelope[j*3+2]); } env.num = numPts; env.sustain = susPt; env.loops = loopStart; env.loope = loopEnd; env.speed = envSpeed; if (!module->addVolumeEnvelope(env)) { delete[] shadowInsLut; return MP_OUT_OF_MEMORY; } } // read panning envelope envSpeed = f.readByte(); susPt = f.readByte(); loopStart = f.readByte(); loopEnd = f.readByte(); numPts = f.readByte(); f.read(envelope, 3, numPts); if (numPts) { memset(&env,0,sizeof(env)); mp_uword x = 0; for (j = 0; j < numPts; j++) { mp_uword dx = (mp_uword)envelope[j*3] + (((mp_uword)envelope[j*3+1] << 8) & 256); x+=dx; env.env[j][0] = x; env.env[j][1] = envelope[j*3+2]; } env.num = numPts; env.sustain = susPt; env.loops = loopStart; env.loope = loopEnd; env.speed = envSpeed; if (!module->addPanningEnvelope(env)) { delete[] shadowInsLut; return MP_OUT_OF_MEMORY; } } // read vibrato envelope envSpeed = f.readByte(); susPt = f.readByte(); loopStart = f.readByte(); loopEnd = f.readByte(); numPts = f.readByte(); f.read(envelope, 3, numPts); if (numPts) { memset(&env,0,sizeof(env)); mp_uword x = 0; for (j = 0; j < numPts; j++) { mp_uword dx = (mp_uword)envelope[j*3] + (((mp_uword)envelope[j*3+1] << 8) & 256); x+=dx; env.env[j][0] = x; env.env[j][1] = envelope[j*3+2]; } env.num = numPts; env.sustain = susPt; env.loops = loopStart; env.loope = loopEnd; env.speed = envSpeed; if (!module->addVibratoEnvelope(env)) { delete[] shadowInsLut; return MP_OUT_OF_MEMORY; } } mp_sint32 shadowIns = f.readByte(); instr[i].res = shadowIns; mp_sint32 vibAmpVolFade = f.readWord(); mp_sint32 envFlags = f.readWord(); // convert volume envelope flags if ((envFlags & 4) && module->numVEnvs) { module->venvs[module->numVEnvs-1].type |= 1; } if ((envFlags & 2) && module->numVEnvs) { module->venvs[module->numVEnvs-1].type |= 2; } if ((envFlags & 1) && module->numVEnvs) { module->venvs[module->numVEnvs-1].type |= 4; } if ((envFlags & 512) && module->numVEnvs) { module->venvs[module->numVEnvs-1].type |= 8; } // convert panning envelope flags if ((envFlags & 32) && module->numPEnvs) { module->penvs[module->numPEnvs-1].type |= 1; } if ((envFlags & 16) && module->numPEnvs) { module->penvs[module->numPEnvs-1].type |= 2; } if ((envFlags & 8) && module->numPEnvs) { module->penvs[module->numPEnvs-1].type |= 4; } if ((envFlags & 1024) && module->numPEnvs) { module->penvs[module->numPEnvs-1].type |= 8; } // convert vibrato envelope flags if ((envFlags & 256) && module->numVibEnvs) { module->vibenvs[module->numVibEnvs-1].type |= 1; module->vibenvs[module->numVibEnvs-1].type |= (vibAmpVolFade>>12)<<(8-2); } if ((envFlags & 128) && module->numVibEnvs) { module->vibenvs[module->numVibEnvs-1].type |= 2; } if ((envFlags & 64) && module->numVibEnvs) { module->vibenvs[module->numVibEnvs-1].type |= 4; } if ((envFlags & 2048) && module->numVibEnvs) { module->vibenvs[module->numVibEnvs-1].type |= 8; } for (j = 0; j < instr[i].samp; j++) { shadowInsLut[i*16+j] = s; //instr[i].extra[j] = s; k = f.readByte(); f.read(smp[s].name, 1, k); mp_sint32 smpLen = f.readDword(); mp_sint32 loopStart = f.readDword(); mp_sint32 loopEnd = f.readDword(); mp_sint32 smpRate = f.readWord(); mp_ubyte panPosFinetune = f.readByte(); mp_sint32 c4spd = f.readWord(); // achtung signed byte mp_sbyte relNote = f.readByte(); mp_ubyte volume = f.readByte(); mp_ubyte infoByte = f.readByte(); if (envFlags & 4) smp[s].venvnum = module->numVEnvs; if (envFlags & 32) smp[s].penvnum = module->numPEnvs; if (envFlags & 256) smp[s].vibenvnum = module->numVibEnvs; smp[s].volfade = (vibAmpVolFade & 4095) << 1; smp[s].samplen = smpLen; smp[s].loopstart = loopStart; smp[s].looplen = loopEnd - loopStart; mp_sint32 newC4spd = XModule::getc4spd(relNote, XModule::modfinetunes[panPosFinetune & 0xF]); newC4spd = (c4spd*newC4spd) / 8363; XModule::convertc4spd(newC4spd, &smp[s].finetune, &smp[s].relnote); smp[s].vol = XModule::vol127to255(volume); // looping if ((infoByte&8) && !(infoByte&16)) smp[s].type = 1; else if (infoByte&16) smp[s].type = 2; // 16 bit sample smp[s].type |= (infoByte&4)<<2; // reversed smp[s].type |= (infoByte&64)<<1; // mark as packed sample (for now) smp[s].flags = ((infoByte&1) << 7) | 1; smp[s].flags |= (shadowIns?64:0); if (panPosFinetune >> 4) { smp[s].flags |= 2; smp[s].pan = (((panPosFinetune >> 4)-1)*1259226) >> 16; } else { smp[s].pan = 0x80; } s++; } } } header->smpnum = s; header->volenvnum = module->numVEnvs; header->panenvnum = module->numPEnvs; header->vibenvnum = module->numVibEnvs; // skip composer, who needs to know the composer? :D i = f.readByte(); f.seekWithBaseOffset(f.posWithBaseOffset() + i); // skip channel names for (j = 0; j < 32; j++) { i = f.readByte(); f.seekWithBaseOffset(f.posWithBaseOffset() + i); } // read song message i = f.readDword() - 4; mp_ubyte* packedSongMessage = new mp_ubyte[i]; f.read(packedSongMessage, 1, i); mp_sint32 size = LittleEndian::GET_DWORD(packedSongMessage); char* unpackedSongMessage = new char[size+1]; mp_ubyte* srcPtr = packedSongMessage + 7; // preferred because of bounds check mp_sint32 dstPtr = 0; j = i-7; while (j>0) { if (*srcPtr == 255) { char c = *(++srcPtr); srcPtr++; for (k = 0; k < *srcPtr; k++) if (dstPtr < size) unpackedSongMessage[dstPtr++] = c; srcPtr++; j-=3; } else { if (dstPtr < size) unpackedSongMessage[dstPtr++] = *srcPtr++; j--; } } unpackedSongMessage[size] = '\0'; delete[] packedSongMessage; /*for (i = 0; i < size; i++) { printf("%c", unpackedSongMessage[i]); if ((i % 74) == 73) printf("\n"); }*/ for (i = 0; i < size; i++) { char line[80]; memset(line, 0, sizeof(line)); if (size - i >= 73) { XModule::convertStr(line, unpackedSongMessage+i, 74, false); i+=73; } else { XModule::convertStr(line, unpackedSongMessage+i, size-i, false); i+=size-i; } module->addSongMessageLine(line); } delete[] unpackedSongMessage; #ifdef VERBOSE printf("%s",module->message); #endif mp_uword* orders = new mp_uword[header->ordnum]; f.readWords(orders, header->ordnum); if (header->ordnum > 255) header->ordnum = 255; for (i = 0; i < header->ordnum; i++) header->ord[i] = (mp_ubyte)orders[i]; delete[] orders; header->channum = 0; for (i = 0; i < header->patnum; i++) { mp_sint32 patSize = f.readDword(); phead[i].rows = f.readByte()+1; mp_sint32 numEffectsChannels = f.readByte(); phead[i].channum = (numEffectsChannels & 31) + 1; if (phead[i].channum > header->channum) header->channum = phead[i].channum; phead[i].effnum = numEffectsChannels >> 5; if (phead[i].effnum > MAXEFFECTS) phead[i].effnum = MAXEFFECTS; mp_sint32 slotSize = phead[i].effnum*2 + 2; phead[i].patternData = new mp_ubyte[slotSize * phead[i].channum * phead[i].rows]; if (phead[i].patternData == NULL) { delete[] shadowInsLut; return MP_OUT_OF_MEMORY; } memset(phead[i].patternData, 0, slotSize * phead[i].channum * phead[i].rows); j = f.readByte(); f.seekWithBaseOffset(f.posWithBaseOffset() + j); patSize-=(3+j); if (patSize) { mp_ubyte* pattern = new mp_ubyte[patSize*2]; if (pattern == NULL) { delete[] shadowInsLut; return MP_OUT_OF_MEMORY; } memset(pattern, 0xff, patSize*2); f.read(pattern, 1, patSize); mp_ubyte fullRow[(7*2+2)*32]; mp_sint32 patOfs = 0; mp_sint32 rowOfs = 0; memset(fullRow, 0, sizeof(fullRow)); mp_sint32 rowCnt = 0; while (patOfs < patSize) { mp_ubyte ins = 0; mp_ubyte note = 0; mp_ubyte b = 0; mp_ubyte flag = 0; if ((b = pattern[patOfs++]) != 0xFF) { // channel rowOfs = (b & 31)*slotSize; flag = 1; // if bit 6 not set, read note and instrument if (!(b & 64)) { note = pattern[patOfs++]; ins = pattern[patOfs++]; /*if (ins == 0x1B) { printf("%i: %i\n",i,b&31); }*/ flag = note>>7; note = note&127; if (note) note = (note == 1)?XModule::NOTE_OFF:(note-1); fullRow[rowOfs++] = note; fullRow[rowOfs++] = ins; } else rowOfs+=2; if (flag) { mp_sint32 numfx = 0; while (true) { mp_ubyte command = pattern[patOfs++]; // volume if (command & 64) { // add volume if (numfx < phead[i].effnum) { fullRow[rowOfs++] = 0x0C; fullRow[rowOfs++] = XModule::vol127to255((command&63)<<1); } else { #ifdef VERBOSE printf("Skipping"); #endif } numfx++; } else { mp_ubyte operand = pattern[patOfs++]; mp_ubyte effect = command & 63; convertAMSEffects(effect, operand); if (numfx < phead[i].effnum) { fullRow[rowOfs++] = effect; fullRow[rowOfs++] = operand; } else { #ifdef VERBOSE printf("Skipping"); #endif } numfx++; } if (!(command & 128)) break; } } } // row finished? if ((b & 128)) { ASSERT(rowCnt < phead[i].rows); memcpy(phead[i].patternData + rowCnt * phead[i].channum * slotSize, fullRow, slotSize * phead[i].channum); memset(fullRow, 0, sizeof(fullRow)); rowCnt++; } } delete[] pattern; } } if (loadAMSSamples(module, f) != 0) { delete[] shadowInsLut; return MP_OUT_OF_MEMORY; } // duplicate shadowed samples for (i = 0; i < header->smpnum; i++) { if ((smp[i].flags & 64)) { for (j = 0; j < header->insnum; j++) { for (k = 0; k < instr[j].samp; k++) // that's where i am //if (instr[j].extra[k] == i) if (shadowInsLut[j*16+k] == i) { mp_sint32 shadowIns = instr[j].res-1; // copy sample mp_sint32 size = (smp[i].type & 16)?(smp[i].samplen<<1):smp[i].samplen; smp[i].sample = (mp_sbyte*)module->allocSampleMem(size); //memcpy(smp[i].sample, smp[instr[shadowIns].extra[k]].sample, size); memcpy(smp[i].sample, smp[shadowInsLut[shadowIns*16+k]].sample, size); } } } } delete[] shadowInsLut; header->flags |= module->MODULE_AMSENVELOPES; module->setDefaultPanning(); module->postProcessSamples(); return MP_OK; } /////////////////////////////////////////////////////////////////////////////////////////// // You better don't look at what's coming next: // I was so lazy and i had to find a way to way to decompress AMS samples packed samples // and all i had was this assembler source for unpacking so guess what? I converted // the assembler stuff right into C++ using a little helper class for representing // an x86 32bit register // No more comments... /////////////////////////////////////////////////////////////////////////////////////////// struct Reg { mp_ubyte hh,hl,lh,ll; Reg() { hh = hl = lh = ll = 0; } mp_uint32 ex() { return (mp_uint32)ll + (mp_uint32)(lh << 8) + (mp_uint32)(hl << 16) + (mp_uint32)(hh << 24); } mp_uword x() { return (mp_uword)ll + (mp_uword)(lh << 8); } void setEx(mp_uint32 v) { hh = (mp_ubyte)(v>>24); hl = (mp_ubyte)(v>>16); lh = (mp_ubyte)(v>>8); ll = (mp_ubyte)(v); } void setX(mp_uword v) { lh = (mp_ubyte)(v>>8); ll = (mp_ubyte)(v); } void add(mp_uint32 v) { setEx(ex()+v); } void sub(mp_uint32 v) { setEx(ex()-v); } void shr(mp_uint32 v) { setEx(ex()>>v); } void shl(mp_uint32 v) { setEx(ex()<>c | (b>>c))); /*; ; UnPack sample method 1 ; ; Input: ; esi = input offset ; edi = dest offset ; ecx = input size ; Output: ; ecx = output size ;*/ mp_uint32 UnpackMethod1(mp_ubyte* input, mp_ubyte* output, mp_uint32 inputsize) { Reg a, b, d; mp_sint32 c, di, si, bp, cx2; mp_ubyte cl; mp_ubyte packcharacter; si = 0; // mov esi,cs:inputoffset di = 0; // mov edi,cs:outputoffset inputsize = getDword(input+si); // mov ecx,fs:[esi]; mov cs:inputsize,ecx c = getDword(input+si+4); // mov ecx,fs:[esi+4] packcharacter = a.ll = *(input+si+8); // mov al,fs:[esi+8]; mov cs:packcharacter,al si+=9; // add esi,9 unpackloop: a.ll = *(input+si); // mov al,fs:[esi] si+=1; // inc esi if (a.ll == packcharacter) // cmp al,cs:packcharacter goto unpacka; // jz unpacka *(output+di) = a.ll; // mov fs:[edi],al di+=1; // inc edi c--; if (c != 0) goto unpackloop; // loop unpackloop goto endofunpack; // endofunpack unpacka: a.ll = *(input+si); // mov al,fs:[esi] si+=1; // inc esi c--; // dec ecx if (a.ll == 0) // or al,al goto putpackcharacter; // jz putpackcharacter cx2 = a.ll; // movzx ecx,al a.ll = *(input+si); // mov al,fs:[esi] si+=1; // inc esi if (cx2 == 0) // or ecx,ecx goto stosbd1; // jz @stosbd1 stosbl1: *(output+di) = a.ll; // mov fs:[edi],al di+=1; // inc edi cx2--; // dec ecx if (cx2 != 0) goto stosbl1; // jnz @stosbl1 stosbd1: c--; // dec ecx c--; // again because of the loop if (c != 0) goto unpackloop; // loop unpackloop goto endofunpack; // jmp endofunpack putpackcharacter: a.ll = packcharacter; // mov al,cs:packcharacter *(output+di) = a.ll; // mov fs:[edi],al di+=1; // inc edi c--; if (c != 0) goto unpackloop; // loop unpackloop endofunpack: di = 0; // mov edi,cs:inputoffset c = inputsize; // mov ecx,cs:inputsize a.setEx(0); // xor eax,eax d.setEx(c); // mov edx,ecx c >>= 2; // shr ecx,2 if (c == 0) // or ecx,ecx goto stosdd1; // jz @stosdd1 stosdl1: *(input+di) = a.ll; // mov fs:[edi],eax *(input+di+1) = a.lh; *(input+di+2) = a.hl; *(input+di+3) = a.hh; di+=4; // add edi,4 c--; // dec ecx if (c != 0) goto stosdl1; // jnz @stosdl1 stosdd1: c = d.ex()&3; // mov ecx,edx; and ecx,3 if (c==0) // or ecx,ecx goto stosbd2; // jz @stosbd2 stosbl2: *(input+di) = a.ll; // mov fs:[edi],al di+=1; // inc edi c--; // dec ecx if (c != 0) goto stosbl2; // jnz @stosbl2 stosbd2: di = 0; // mov edi,cs:inputoffset si = 0; // mov esi,cs:outputoffset bp = di; // mov ebp,edi c = inputsize; // mov ecx,cs:inputsize bp+=c; // add ebp,ecx d.ll = 128; // mov dl,10000000b bitunpackloop: d.lh = 0; // xor dh,dh a.ll = *(output + si); // mov al,fs:[esi] si+=1; // inc esi cl = 8; // mov cl,8 bitunpack2: b.ll = a.ll; // mov bl,al b.ll &= d.ll; // and bl,dl cl += d.lh; // add cl,dh b.ll = ror(b.ll, cl); // ror bl,cl cl -= d.lh; // sub cl,dh d.ll = ror(d.ll, 1); // ror dl,1 *(input + di) |= b.ll; // or fs:[edi],bl di+=1; // inc edi if (di != bp) // cmp edi,ebp goto notsettaback; // jnz notsettaback di = 0; // mov edi,cs:inputoffset d.lh++; // inc dh notsettaback: cl--; // dec ecx if (cl != 0) goto bitunpack2; // jnz bitunpack2 cl = d.lh; // mov cl,dh d.ll = ror(d.ll, cl); // ror dl,cl c--; if (c != 0) goto bitunpackloop; // loop bitunpackloop si = 0; // cs:inputoffset di = 0; // cs:outputoffset c = inputsize; // cs:inputsize b.ll = 0; // xor bl,bl deltaunpack: a.ll = *(input+si); // mov al,fs:[esi] si+=1; // inc esi if (a.ll == 128) // cmp al,128 goto notnegative; // jz notnegative if (!(a.ll&128)) // test al,10000000b goto notnegative; // jz notnegative a.ll&=127; // and al,01111111b a.ll = -a.ll; // neg al notnegative: b.ll-=a.ll; // sub bl,al *(output+di) = b.ll; // mov fs:[edi],bl di+=1; // inc edi c--; if (c != 0) goto deltaunpack; // loop deltaunpack return di; } MilkyTracker-1.02.00/src/milkyplay/LoaderCBA.cpp000066400000000000000000000166641324432207300213120ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * LoaderCBA.cpp * MilkyPlay Module Loader: Chuck Biscuits Music whatever * */ #include "Loaders.h" const char* LoaderCBA::identifyModule(const mp_ubyte* buffer) { // check for .AMF module if (!memcmp(buffer,"CBA\xF9",4)) { return "CBA"; } return NULL; } static void convertEffect(mp_ubyte& eff, mp_ubyte& op) { switch (eff) { case 0x01: // arpeggio eff = 0x20; break; case 0x02: // porta up eff = 0x47; break; case 0x03: // porta down eff = 0x48; break; case 0x04: // porta to note eff = 0x03; break; case 0x05: // vibrato eff = 0x04; break; case 0x06: // porta to note + volslide eff = 0x05; break; case 0x07: // vibrato + volslide eff = 0x06; break; case 0x08: // tremolo eff = 0x07; break; case 0x09: // set panning eff = 0x08; break; case 0x0a: // sample offset eff = 0x9; break; case 0x0B: // volslide eff = 0x49; break; case 0x0C: // position jump eff = 0x0B; break; case 0x0e: // pattern break eff = 0x0D; break; /*case 0x0f: eff = 0x4A; break;*/ case 0x10: // fine porta up eff = 0x31; break; case 0x11: // fine porta down eff = 0x32; break; case 0x12: eff = 0x33; break; case 0x13: eff = 0x34; break; case 0x14: eff = 0x35; break; case 0x15: // loop eff = 0x36; break; case 0x16: eff = 0x37; break; case 0x17: // set panning eff = 0x8; op<<=4; break; case 0x18: // retrig with volslide eff = 0x1B; break; case 0x19: // fine volslide up eff = 0x3a; break; case 0x1a: // fine volslide down eff = 0x3b; break; case 0x1b: // note cut eff = 0x3c; break; case 0x1c: // note delay eff = 0x3d; break; case 0x1d: // pattern delay eff = 0x3e; break; case 0x1f: // set speed eff = 0x1C; break; case 0x20: // set tempo eff = 0x16; break; case 0: op = 0; break; default: #ifdef VERBOSE printf("Missing CBA Effect: %x, %x\n", eff, op); #endif eff = op = 0; } } mp_sint32 LoaderCBA::load(XMFileBase& f, XModule* module) { module->cleanUp(); // this will make code much easier to read TXMHeader* header = &module->header; TXMInstrument* instr = module->instr; TXMSample* smp = module->smp; TXMPattern* phead = module->phead; // we're already out of memory here if (!phead || !instr || !smp) return MP_OUT_OF_MEMORY; f.read(header->sig, 1, 3); f.readByte(); // skip 0xF9 f.read(header->name, 1, 32); f.readByte(); // skip 0x1A mp_sint32 songMsgLen = f.readWord(); header->channum = f.readByte(); header->patnum = f.readByte()+1; // number of patterns header->ordnum = f.readByte(); // song length header->insnum = f.readByte(); // number of instruments header->tempo = f.readByte(); // default tickspeed header->speed = f.readByte(); // default tempo header->flags = XModule::MODULE_ST3NEWINSTRUMENT; header->mainvol = 255; f.read(header->pan, 1, 32); f.read(header->ord, 1, 255); mp_sint32 i, s = 0; for (i = 0; i < header->insnum; i++) { mp_ubyte name[32]; mp_ubyte flags; mp_ubyte vol; mp_uword c4spd; mp_sint32 len; mp_sint32 loopstart; mp_sint32 loopend; f.read(name, 1, 32); flags = f.readByte(); vol = f.readByte(); c4spd = f.readWord(); len = f.readDword(); loopstart = f.readDword(); loopend = f.readDword(); memcpy(instr[i].name, name, 32); if ((flags & 0x02) && len) { instr[i].samp = 1; memcpy(smp[s].name, name, 32); for (mp_sint32 j = 0; j < 120; j++) instr[i].snum[j] = s; smp[s].flags = 1; smp[s].samplen = len; mp_sint32 looplen = (loopend - loopstart); if (looplen < 0) looplen = 0; smp[s].looplen = looplen; smp[s].loopstart = loopstart; smp[s].vol = XModule::vol64to255(vol); if (flags & 0x08) smp[s].type = 1; XModule::convertc4spd(c4spd, &smp[s].finetune, &smp[s].relnote); s++; } } header->smpnum = s; mp_ubyte* pattern = new mp_ubyte[header->channum*64*5]; if (pattern == NULL) return MP_OUT_OF_MEMORY; for (i = 0; i < header->patnum;i++) { f.read(pattern, 1, header->channum*64*5); phead[i].rows = 64; phead[i].effnum = 2; phead[i].channum = (mp_ubyte)header->channum; phead[i].patternData = new mp_ubyte[phead[i].rows*header->channum * (phead[i].effnum * 2 + 2)]; // out of memory? if (phead[i].patternData == NULL) { delete[] pattern; return MP_OUT_OF_MEMORY; } memset(phead[i].patternData,0,phead[i].rows*header->channum * (phead[i].effnum * 2 + 2)); mp_sint32 r,c,cnt = 0; mp_sint32 offs = 0; for (r=0; r < 64; r++) { for (c = 0; c < header->channum; c++) { mp_ubyte ins = pattern[cnt]; mp_ubyte note = pattern[cnt+1]; mp_ubyte vol = pattern[cnt+2]; mp_ubyte eff = pattern[cnt+3]; mp_ubyte op = pattern[cnt+4]; if (note == 255) note = 122; phead[i].patternData[offs] = note; phead[i].patternData[offs+1] = ins; if (vol) { phead[i].patternData[offs+2] = 0x0C; phead[i].patternData[offs+3] = XModule::vol64to255(vol-1); } convertEffect(eff, op); #ifdef VERBOSE if (eff == 0 && pattern[cnt+3]) { printf("pattern: %i, row: %i, channel %i: %x, %x\n", i, r, c, pattern[cnt+3], pattern[cnt+4]); } #endif phead[i].patternData[offs+4] = eff; phead[i].patternData[offs+5] = op; cnt+=5; offs+=(phead[i].effnum * 2 + 2); } } } delete[] pattern; mp_sint32 result = module->loadModuleSamples(f, XModule::ST_DELTA); if (result != MP_OK) return result; module->allocateSongMessage(songMsgLen+1); if (module->message) { memset(module->message, 0, songMsgLen+1); f.read(module->message, 1, songMsgLen); } strcpy(header->tracker,"..converted.."); //module->setDefaultPanning(); module->postProcessSamples(); return MP_OK; } MilkyTracker-1.02.00/src/milkyplay/LoaderDBM.cpp000066400000000000000000000402401324432207300213120ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * LoaderDBM.cpp * MilkyPlay Module Loader: Digibooster Pro * * Created by Peter Barth on 06.03.06. * */ #include "Loaders.h" // to-do: improve detection const char* LoaderDBM::identifyModule(const mp_ubyte* buffer) { // check for .DTM module if (memcmp(buffer,"DBM0",4)) return NULL; return "DBM"; } #define CLEAN_DBM \ { \ mp_uint32 i; \ delete[] srcIns; \ for (i = 0; i < header->smpnum; i++) \ delete[] srcSmp[i].sample; \ delete[] srcSmp; \ delete[] orderListLengths; \ for (i = 0; i < numSubSongs; i++) \ delete[] orderLists[i]; \ for (i = 0; i < header->patnum; i++) \ delete[] patterns[i]; \ delete[] orderLists; \ delete[] patterns; \ } struct DBMInstrument { mp_ubyte name[30]; mp_uword sampnum; mp_uword volume; mp_uint32 finetune; mp_uint32 repstart; mp_uint32 replen; mp_uword panning; mp_uword flags; // added by ME mp_sint32 venvnum; mp_sint32 penvnum; }; struct DBMSample { mp_uint32 flags; mp_uint32 samplen; // bit 0 set - 8 bit sample // bit 1 set - 16 bit sample // bit 2 set - 32 bit sample mp_ubyte* sample; }; static void convertDBMffects(mp_ubyte& effect, mp_ubyte& operand) { //static const char eff[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'}; switch (effect) { case 0x00: if (operand) effect = 0x20; break; case 0x01: if ((operand & 0xF0) == 0xF0) { // doc says: 1Fx == fine portamento up effect = 0x31; operand &= 0x0F; } break; case 0x02: if ((operand & 0xF0) == 0xF0) { // doc says: 2Fx == fine portamento down effect = 0x32; operand &= 0x0F; } break; case 0x03: case 0x04: break; case 0x05: if ((operand & 0x0F) == 0x0F) { // doc says: 5xF == Tone portamento+Fine Volume slide up // !! unsupported !! // Might be possible with MDL way of combining portamento + volume slide // but with S3M volslide instead of MDL volslide goto missing; } else if ((operand & 0xF0) == 0xF0) { // doc says: 5Fx == Tone portamento+Fine Volume slide down // !! unsupported !! // Might be possible with MDL way of combining portamento + volume slide // but with S3M volslide instead of MDL volslide goto missing; } break; case 0x06: if ((operand & 0x0F) == 0x0F) { // doc says: 6xF == Vibrato+Fine Volume slide up // !! unsupported !! // Might be possible with MDL way of combining vibrato + volume slide // but with S3M volslide instead of MDL volslide goto missing; } else if ((operand & 0xF0) == 0xF0) { // doc says: 6Fx == Vibrato+Fine Volume slide down // !! unsupported !! // Might be possible with MDL way of combining vibrato + volume slide // but with S3M volslide instead of MDL volslide goto missing; } break; // Tremolo doesn't exist, huh? case 0x07: // Panning case 0x08: // Sample offset case 0x09: break; // Volslide (S3M volslide fits best probably) case 0x0A: effect = 0x49; break; // Position jump case 0x0B: break; // set volume case 0x0C: // set global volume case 0x10: operand = XModule::vol64to255(operand); break; // Pattern break case 0x0D: break; // subcommands case 0x0E: { effect = 0x30 + (operand >> 4); operand &= 0xF; switch (effect) { // Set filter: unsupported case 0x30: goto missing; break; // Play backwards case 0x33: // AMS can do that effect = 0x4F; operand = 1; break; // Turn off sound in channel? // can probably be emulated with AMS set channel volume // right now unsupported case 0x34: goto missing; break; // Turn on/off sound in channel? // can probably be emulated with AMS set channel volume // right now unsupported case 0x35: goto missing; break; // set loop/loop case 0x36: goto missing; break; // set offset for loop or what? case 0x37: goto missing; break; } break; } // Pattern break case 0x0F: break; case 0x11: break; // key off case 0x14: if (operand == 0) // AMS key of at tick effect = 0x51; break; // Set envelope position case 0x15: break; // Sample offset slide (unsupported) case 0x18: goto missing; break; // set real BPM case 0x1C: effect = 0x52; break; // echo effects (unsupported) case 0x1f: case 0x20: case 0x21: case 0x22: case 0x23: goto missing; break; default: #ifdef VERBOSE printf("Unknown DBM effect %x with operand %x\n", effect, operand); #endif missing: #ifdef VERBOSE printf("Missing DBM effect %x with operand %x\n", effect, operand); #endif effect = operand = 0; } } static void convertDBMEnvelope(TEnvelope& outEnv, const mp_ubyte* inEnv) { memset(&outEnv, 0, sizeof(TEnvelope)); outEnv.type = *inEnv & 7; #ifdef VERBOSE if (*inEnv >> 3) { printf("Second sustain point used"); } #endif // one single point? // disable envelope if (!*(inEnv+1)) { outEnv.type &= ~1; return; } // DBM stores numpoints-1 outEnv.num = *(inEnv+1) + 1; outEnv.sustain = *(inEnv+2); outEnv.loops = *(inEnv+3); outEnv.loope = *(inEnv+4); inEnv+=6; for (mp_sint32 i = 0; i < outEnv.num; i++) { outEnv.env[i][0] = BigEndian::GET_WORD(inEnv); outEnv.env[i][1] = BigEndian::GET_WORD(inEnv+2) << 2; inEnv+=4; } } mp_sint32 LoaderDBM::load(XMFileBase& f, XModule* module) { module->cleanUp(); // this will make code much easier to read TXMHeader* header = &module->header; TXMInstrument* instr = module->instr; TXMSample* smp = module->smp; TXMPattern* phead = module->phead; // we're already out of memory here if (!phead || !instr || !smp) return MP_OUT_OF_MEMORY; mp_sint32 i,j; mp_uword numSubSongs = 0; mp_uword** orderLists = NULL; mp_uword* orderListLengths = NULL; DBMInstrument* srcIns = NULL; mp_ubyte** patterns = NULL; DBMSample* srcSmp = NULL; while (true) { mp_ubyte ID[4], buffer[4]; mp_uint32 bytesRead = f.read(ID, 4, 1); if (bytesRead != 4) break; bytesRead = f.read(buffer, 4, 1); if (bytesRead != 4) break; mp_uint32 chunkLen = BigEndian::GET_DWORD(buffer); switch (BigEndian::GET_DWORD(ID)) { case 0x44424D30: // 'DBM0' memcpy(header->sig, ID, 4); break; case 0x4E414D45: // 'NAME' { mp_ubyte* name = new mp_ubyte[chunkLen]; f.read(name, 1, chunkLen); memcpy(header->name, name, chunkLen > MP_MAXTEXT ? MP_MAXTEXT : chunkLen); delete[] name; break; } case 0x494E464F: // 'INFO' f.read(buffer, 1, 2); header->insnum = BigEndian::GET_WORD(buffer); f.read(buffer, 1, 2); header->smpnum = BigEndian::GET_WORD(buffer); srcSmp = new DBMSample[header->smpnum]; f.read(buffer, 1, 2); numSubSongs = BigEndian::GET_WORD(buffer); // Allocate order list table orderLists = new mp_uword*[numSubSongs]; orderListLengths = new mp_uword[numSubSongs]; f.read(buffer, 1, 2); header->patnum = BigEndian::GET_WORD(buffer); patterns = new mp_ubyte*[header->patnum]; f.read(buffer, 1, 2); header->channum = BigEndian::GET_WORD(buffer); break; case 0x534F4E47: // 'SONG' { // Skip name for (i = 0; i < numSubSongs; i++) { mp_ubyte name[44]; f.read(name, 1, 44); f.read(buffer, 1, 2); orderListLengths[i] = BigEndian::GET_WORD(buffer); orderLists[i] = new mp_uword[BigEndian::GET_WORD(buffer)]; for (j = 0; j < orderListLengths[i]; j++) { f.read(buffer, 1, 2); orderLists[i][j] = BigEndian::GET_WORD(buffer); } } break; } case 0x494E5354: // 'INST' { mp_uword insNum = chunkLen / 50; srcIns = new DBMInstrument[insNum]; for (i = 0; i < insNum; i++) { f.read(srcIns[i].name, 1, 30); f.read(buffer, 2, 1); srcIns[i].sampnum = BigEndian::GET_WORD(buffer); f.read(buffer, 2, 1); srcIns[i].volume = BigEndian::GET_WORD(buffer); f.read(buffer, 4, 1); srcIns[i].finetune = BigEndian::GET_DWORD(buffer); f.read(buffer, 4, 1); srcIns[i].repstart = BigEndian::GET_DWORD(buffer); f.read(buffer, 4, 1); srcIns[i].replen = BigEndian::GET_DWORD(buffer); f.read(buffer, 2, 1); srcIns[i].panning = BigEndian::GET_WORD(buffer); f.read(buffer, 2, 1); srcIns[i].flags = BigEndian::GET_WORD(buffer); srcIns[i].venvnum = srcIns[i].penvnum = -1; } break; } case 0x50415454: // 'PATT' { for (i = 0; i < header->patnum; i++) { f.read(buffer, 2, 1); phead[i].rows = BigEndian::GET_WORD(buffer); f.read(buffer, 4, 1); phead[i].len = BigEndian::GET_DWORD(buffer); patterns[i] = new mp_ubyte[phead[i].len]; f.read(patterns[i], 1, phead[i].len); } break; } case 0x534D504C: // 'SMPL' { for (i = 0; i < header->smpnum; i++) { f.read(buffer, 4, 1); srcSmp[i].flags = BigEndian::GET_DWORD(buffer); f.read(buffer, 4, 1); srcSmp[i].samplen = BigEndian::GET_DWORD(buffer); if (srcSmp[i].flags == 1) { srcSmp[i].sample = new mp_ubyte[srcSmp[i].samplen]; module->loadSample(f, srcSmp[i].sample, srcSmp[i].samplen, srcSmp[i].samplen); } else if (srcSmp[i].flags == 2) { srcSmp[i].sample = new mp_ubyte[srcSmp[i].samplen*2]; module->loadSample(f, srcSmp[i].sample, srcSmp[i].samplen*2, srcSmp[i].samplen, XModule::ST_16BIT | XModule::ST_BIGENDIAN); } else { #ifdef VERBOSE printf("Unsupported sample type"); #endif } } break; } case 0x56454E56: // 'VENV' { f.read(buffer, 2, 1); mp_uword numEnvelopes = BigEndian::GET_WORD(buffer); for (i = 0; i < numEnvelopes; i++) { f.read(buffer, 2, 1); mp_uword index = BigEndian::GET_WORD(buffer); if (index) srcIns[index-1].venvnum = module->numVEnvs; mp_ubyte env[134]; f.read(env, 1, 134); TEnvelope venv; convertDBMEnvelope(venv, env); if (!module->addVolumeEnvelope(venv)) { CLEAN_DBM; return MP_OUT_OF_MEMORY; } } break; } case 0x50454E56: // 'PENV' { f.read(buffer, 2, 1); mp_uword numEnvelopes = BigEndian::GET_WORD(buffer); for (i = 0; i < numEnvelopes; i++) { f.read(buffer, 2, 1); mp_uword index = BigEndian::GET_WORD(buffer); if (index) srcIns[index-1].penvnum = module->numPEnvs; mp_ubyte env[134]; f.read(env, 1, 134); TEnvelope penv; convertDBMEnvelope(penv, env); if (!module->addPanningEnvelope(penv)) { CLEAN_DBM; return MP_OUT_OF_MEMORY; } } break; } default: f.seekWithBaseOffset(f.posWithBaseOffset() + chunkLen); } } if (!(orderListLengths && srcIns && patterns && srcSmp)) return MP_LOADER_FAILED; // Convert orderlist, subsongs are not supported yet j = 0; for (i = 0; i < orderListLengths[j]; i++) { if (i < 256) header->ord[i] = (mp_ubyte)orderLists[j][i]; } header->ordnum = orderListLengths[j]; header->mainvol = 255; header->speed = 125; header->tempo = 6; header->flags = XModule::MODULE_OLDPTINSTRUMENTCHANGE | XModule::MODULE_PTNEWINSTRUMENT; header->volenvnum = module->numVEnvs; header->panenvnum = module->numPEnvs; // Convert patterns for (i = 0; i < header->patnum; i++) { phead[i].effnum = 2; phead[i].channum = (mp_ubyte)header->channum; const mp_sint32 bps = phead[i].effnum*2+2; phead[i].patternData = new mp_ubyte[phead[i].rows*header->channum*bps]; // out of memory? if (phead[i].patternData == NULL) { CLEAN_DBM; return MP_OUT_OF_MEMORY; } memset(phead[i].patternData, 0, phead[i].rows*header->channum*bps); mp_uint32 currentRow = 0; j = 0; mp_ubyte* src = patterns[i]; while (j < (signed)phead[i].len && currentRow < phead[i].rows) { mp_ubyte pack = src[j]; j++; if (!pack) currentRow++; else { mp_ubyte note = 0, ins = 0; mp_ubyte eff1 = 0, op1 = 0, eff2 = 0, op2 = 0; mp_ubyte channel = pack-1; pack = src[j]; j++; // Note present? if (pack & 0x01) { if (src[j] == 0x1F) note = XModule::NOTE_OFF; else note = (src[j] >> 4) * 12 + ((src[j] & 0xF)+1); j++; } // Instrument present? if (pack & 0x02) { ins = src[j]; j++; } // Effect 1 present? if (pack & 0x04) { eff1 = src[j]; j++; } // Operand 1 present? if (pack & 0x08) { op1 = src[j]; j++; } // Effect 2 present? if (pack & 0x10) { eff2 = src[j]; j++; } // Operand 1 present? if (pack & 0x20) { op2 = src[j]; j++; } convertDBMffects(eff1, op1); convertDBMffects(eff2, op2); mp_ubyte* dstSlot = phead[i].patternData + currentRow * header->channum*bps + channel*bps; *dstSlot++ = note; *dstSlot++ = ins; *dstSlot++ = eff1; *dstSlot++ = op1; *dstSlot++ = eff2; *dstSlot++ = op2; } } } // convert instrument data for (i = 0; i < header->insnum; i++) { memcpy(instr[i].name, srcIns[i].name, MP_MAXTEXT); for (j = 0; j < 120; j++) instr[i].snum[j] = i; j = srcIns[i].sampnum; if (j && j <= header->smpnum) { j--; if (srcSmp[j].samplen) { instr[i].samp = 1; smp[i].flags = 1 | (srcIns[i].panning ? 2 : 0); smp[i].pan = (srcIns[i].panning ? srcIns[i].panning - 1 : 0x80); smp[i].vol = XModule::vol64to255(srcIns[i].volume); smp[i].samplen = srcSmp[j].samplen; if (srcSmp[j].flags == 1) { smp[i].sample = (mp_sbyte*)module->allocSampleMem(smp[i].samplen); memcpy(smp[i].sample, srcSmp[j].sample, smp[i].samplen); } else if (srcSmp[j].flags == 2) { smp[i].sample = (mp_sbyte*)module->allocSampleMem(smp[i].samplen*2); memcpy(smp[i].sample, srcSmp[j].sample, smp[i].samplen*2); smp[i].type |= 16; } XModule::convertc4spd(srcIns[i].finetune, &smp[i].finetune, &smp[i].relnote); smp[i].loopstart = srcIns[i].repstart; smp[i].looplen = srcIns[i].replen; if (((srcIns[i].flags & 3) == 1) && smp[i].looplen) smp[i].type |= 1; else if (((srcIns[i].flags & 2) == 2) && smp[i].looplen) smp[i].type |= 2; if (srcIns[i].venvnum >= 0) smp[i].venvnum = srcIns[i].venvnum+1; if (srcIns[i].penvnum >= 0) smp[i].penvnum = srcIns[i].penvnum+1; } } } CLEAN_DBM; header->smpnum = header->insnum; strcpy(header->tracker,"Digibooster Pro"); module->setDefaultPanning(); module->postProcessSamples(); return MP_OK; } MilkyTracker-1.02.00/src/milkyplay/LoaderDIGI.cpp000066400000000000000000000215441324432207300214320ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * LoaderDIGI.cpp * MilkyPlay Module Loader: Digibooster 1.0 - 1.7 */ #include "Loaders.h" const char* LoaderDIGI::identifyModule(const mp_ubyte* buffer) { if (strcmp((const char*)buffer, "DIGI Booster module") == 0) { return "DIGI"; } return NULL; } static void convertEvent(mp_ubyte* dst, mp_ubyte* src) { mp_ubyte b1 = src[0]; mp_ubyte b2 = src[1]; mp_ubyte b3 = src[2]; mp_ubyte b4 = src[3]; mp_sint32 note,ins,eff,notenum = 0; note = ((b1&0xf)<<8)+b2; ins = (b1&0xf0)+(b3>>4); eff = b3&0xf; if (eff==0xE) { eff=(b4>>4)+0x30; b4&=0xf; if (eff == 0x33) { eff = 0x4F; b4 = 1; } if (eff == 0x34) { eff = 0x51; // key off at tick 0 b4 = 0; } if (eff == 0x35) { if (b4 == 0) { eff = 0x50; // AMS set channel mastervolume to zero b4 = 0; } else if (b4 == 1) { eff = 0x50; // AMS set channel mastervolume to 255 b4 = 255; } } if (eff == 0x38) { #ifdef VERBOSE printf("Unsupported Digibooster effect: extended offset\n"); #endif eff = b4 = 0; } if (eff == 0x39) { #ifdef VERBOSE printf("Unsupported Digibooster effect: retrace\n"); #endif eff = b4 = 0; } } if ((!eff)&&b4) eff=0x20; if (eff==0x8) eff = b4 = 0; // old style modules don't support last effect for: // - portamento up/down // - volume slide if (eff==0x1&&(!b4)) eff = 0; if (eff==0x2&&(!b4)) eff = 0; if (eff==0xA&&(!b4)) eff = 0; if (eff==0x5&&(!b4)) eff = 0x3; if (eff==0x6&&(!b4)) eff = 0x4; if (eff==0xC) { b4 = XModule::vol64to255(b4); } if (note) notenum = XModule::amigaPeriodToNote(note); dst[0] = notenum; dst[1] = ins; dst[2] = eff; dst[3] = b4; } mp_sint32 LoaderDIGI::load(XMFileBase& f, XModule* module) { module->cleanUp(); // this will make code much easier to read TXMHeader* header = &module->header; TXMInstrument* instr = module->instr; TXMSample* smp = module->smp; TXMPattern* phead = module->phead; // we're already out of memory here if (!phead || !instr || !smp) return MP_OUT_OF_MEMORY; mp_sint32 i,j; mp_ubyte buffer[31*4]; // read header f.read(header->sig, 1, 16); // skip 4 bytes (ule\0) f.readDword(); // skip version string f.readDword(); // check version mp_ubyte ver = f.readByte(); if (ver < 0x10 || ver > 0x17) return MP_LOADER_FAILED; // read numchannels header->channum = f.readByte(); // packenable mp_ubyte pack = f.readByte(); f.read(buffer, 1, 19); // read numpatterns header->patnum = (mp_sword)f.readByte() + 1; // read songlength header->ordnum = (mp_sword)f.readByte() + 1; f.read(header->ord, 1, 128); header->insnum = 31; f.read(buffer, 4, 31); mp_sint32 s = 0; for (i = 0; i < header->insnum; i++) { mp_sint32 slen = BigEndian::GET_DWORD(buffer+i*4); if (slen) { instr[i].samp = 1; for (j = 0; j < 120; j++) instr[i].snum[j] = s; smp[s].samplen = slen; s++; } } header->smpnum = s; // loop starts f.read(buffer, 4, 31); for (i = 0; i < header->insnum; i++) { if (instr[i].samp) { s = instr[i].snum[0]; smp[s].loopstart = BigEndian::GET_DWORD(buffer+i*4); } } // loop lengths f.read(buffer, 4, 31); for (i = 0; i < header->insnum; i++) { if (instr[i].samp) { s = instr[i].snum[0]; smp[s].looplen = BigEndian::GET_DWORD(buffer+i*4); if (smp[s].looplen) smp[s].type = 1; } } // volumes & finetunes f.read(buffer, 1, 31); f.read(buffer+31, 1, 31); for (i = 0; i < header->insnum; i++) { if (instr[i].samp) { s = instr[i].snum[0]; smp[s].vol = XModule::vol64to255(buffer[i]); smp[s].pan = 0x80; smp[s].flags = 1; smp[s].finetune = ((mp_sbyte)buffer[i+31])*16; } } f.read(header->name, 1, 32); for (i = 0; i < header->insnum; i++) { f.read(instr[i].name, 1, 30); if (instr[i].samp) { s = instr[i].snum[0]; memcpy(smp[s].name, instr[i].name, 30); } } // read patterns for (i = 0; i < header->patnum; i++) { phead[i].rows = 64; phead[i].effnum = 1; phead[i].channum = (mp_ubyte)header->channum; phead[i].patternData = new mp_ubyte[phead[i].rows*header->channum*4]; // out of memory? if (phead[i].patternData == NULL) { return MP_OUT_OF_MEMORY; } memset(phead[i].patternData,0,phead[i].rows*header->channum*4); mp_sint32 pSize = 64*header->channum*4 + 64; if (pack) { f.read(buffer, 1, 2); pSize = BigEndian::GET_WORD(buffer); if (pSize && pSize < 64) return MP_LOADER_FAILED; // read packing mask f.read(buffer, 1, 64); } else { memset(buffer, 0xFF, 64); } if (!pSize) continue; mp_ubyte* pattern = new mp_ubyte[pSize-64]; if (pattern == NULL) return MP_OUT_OF_MEMORY; f.read(pattern, 1, pSize-64); mp_ubyte* patPtr = pattern; mp_sint32 r,c,cnt=0; if (pack) { for (r=0;r<64;r++) { for (c=0;cchannum;c++) { if (buffer[r] & (1 << (7-c))) { convertEvent(phead[i].patternData + cnt, patPtr); patPtr+=4; } cnt+=4; } } } else { for (c=0;cchannum;c++) { for (r=0;r<64;r++) { cnt = r*header->channum*4+c*4; convertEvent(phead[i].patternData + cnt, patPtr); patPtr+=4; } } } delete[] pattern; } // No for something really stupid: Pattern loop correction for (mp_sint32 p = 0; p < header->patnum; p++) { struct Position { mp_sint32 row, channel; }; mp_ubyte* pattern = phead[p].patternData; Position loopStart = {-1, -1}, loopEnd = {-1, -1}; for (i = 0; i < 64; i++) { for (j = 0; j < header->channum; j++) { mp_ubyte* slot = pattern + i*header->channum*4 + j*4; // Loop start if (slot[2] == 0x36 && !slot[3]) { loopStart.row = i; loopStart.channel = j; } else if (slot[2] == 0x36 && slot[3]) { loopEnd.row = i; loopEnd.channel = j; } } if (loopEnd.row != -1 && loopEnd.channel != -1 && loopStart.row != -1 && loopStart.channel != -1 && loopStart.channel != loopEnd.channel) { // sanity check if (loopStart.row == loopEnd.row) { mp_ubyte* slot = pattern + loopStart.row*header->channum*4 + loopStart.channel*4; slot[2] = slot[3] = 0; slot = pattern + loopEnd.row*header->channum*4 + loopEnd.channel*4; slot[2] = slot[3] = 0; } else { for (j = 0; j < header->channum; j++) { mp_ubyte* slotStart = pattern + loopStart.row*header->channum*4 + j*4; mp_ubyte* slotEnd = pattern + loopEnd.row*header->channum*4 + j*4; if (!slotStart[2] && !slotEnd[2] && !slotStart[3] && !slotEnd[3]) { mp_ubyte* slot = pattern + loopStart.row*header->channum*4 + loopStart.channel*4; slotStart[2] = slot[2]; slotStart[3] = slot[3]; slot[2] = slot[3] = 0; slot = pattern + loopEnd.row*header->channum*4 + loopEnd.channel*4; slotEnd[2] = slot[2]; slotEnd[3] = slot[3]; slot[2] = slot[3] = 0; break; } } } loopStart.row = loopStart.channel = loopEnd.row = loopEnd.channel = -1; } } } mp_sint32 result = module->loadModuleSamples(f); if (result != MP_OK) return result; header->speed = 125; header->tempo = 6; header->mainvol = 255; strcpy(header->tracker,"Digibooster"); module->setDefaultPanning(); module->postProcessSamples(); return MP_OK; } MilkyTracker-1.02.00/src/milkyplay/LoaderDSM.cpp000066400000000000000000000444371324432207300213470ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * LoaderDSM.cpp * MilkyPlay Module Loader: Dynamic Studio & DSIK old and new Internal file formats */ #include "Loaders.h" ///////////////////////////////////////////////// // Dynamic Studio DSM ///////////////////////////////////////////////// const char* LoaderDSm::identifyModule(const mp_ubyte* buffer) { // check for .DSM module if (!memcmp(buffer,"DSm\x1A\x20",5)) { return "DSm"; } return NULL; } mp_sint32 LoaderDSm::load(XMFileBase& f, XModule* module) { module->cleanUp(); // this will make code much easier to read TXMHeader* header = &module->header; TXMInstrument* instr = module->instr; TXMSample* smp = module->smp; TXMPattern* phead = module->phead; // we're already out of memory here if (!phead || !instr || !smp) return MP_OUT_OF_MEMORY; strcpy(header->tracker,"Dynamic Studio"); f.read(header->sig, 1, 3); f.readByte(); if (f.readByte() != 0x20) return MP_LOADER_FAILED; f.read(header->name, 1, 20); f.readDword(); f.readDword(); f.readDword(); f.readDword(); f.readDword(); header->channum = f.readByte(); header->insnum = f.readByte(); header->ordnum = f.readByte(); header->tempo = 6; header->speed = 125; f.readByte(); header->mainvol = ((mp_sint32)f.readByte() * 255) / 100; f.readDword(); f.readDword(); f.readDword(); f.readWord(); mp_sint32 i,j; for (i = 0; i < header->channum; i++) header->pan[i] = (mp_ubyte)XModule::pan15to255(f.readByte()); f.read(header->ord, 1, header->ordnum); header->patnum=0; for (i=0;iordnum;i++) if (header->ord[i]>header->patnum) header->patnum=header->ord[i]; header->patnum++; // skip trackinfo for (i = 0; i < header->patnum * header->channum * 2; i++) f.readDword(); mp_sint32 s = 0; for (i = 0; i < header->insnum; i++) { f.read(instr[i].name, 1, 22); mp_ubyte type = f.readByte(); mp_sint32 len = f.readWord(); mp_ubyte ft = f.readByte(); mp_ubyte vol = f.readByte(); mp_sint32 repstart = f.readWord(); mp_sint32 replen = f.readWord(); f.readByte(); if ((len>2) && type) { memcpy(smp[s].name, instr[i].name, 22); instr[i].samp=1; for (j = 0; j < 120; j++) instr[i].snum[j] = s; module->convertc4spd(module->sfinetunes[ft],&smp[s].finetune,&smp[s].relnote); smp[s].flags = 1; smp[s].samplen = len; smp[s].loopstart = repstart; smp[s].looplen = replen; smp[s].vol = XModule::vol64to255(vol); if (replen > 2) smp[s].type = 1; if (type == 16) smp[s].type |= 16; s++; } } header->smpnum = s; // read patterns for (i = 0; i < header->patnum; i++) { mp_ubyte* pattern = new mp_ubyte[header->channum * 4 * 64]; f.read(pattern, 1, header->channum * 4 * 64); phead[i].rows = 64; phead[i].effnum = 1; phead[i].channum = (mp_ubyte)header->channum; phead[i].patternData = new mp_ubyte[phead[i].rows*header->channum * (phead[i].effnum * 2 + 2)]; // out of memory? if (phead[i].patternData == NULL) { delete[] pattern; return MP_OUT_OF_MEMORY; } memset(phead[i].patternData,0,phead[i].rows*header->channum * (phead[i].effnum * 2 + 2)); mp_sint32 r,c,cnt = 0; mp_sint32 offs = 0; for (r = 0; r < phead[i].rows; r++) { for (c = 0; c < header->channum;c++) { mp_ubyte note = pattern[cnt+1]; if (note) { note >>= 1; note+=12*2; } mp_ubyte ins = pattern[cnt]; mp_ubyte eff = pattern[cnt+2]; mp_ubyte op = pattern[cnt+3]; phead[i].patternData[offs] = note; phead[i].patternData[offs+1] = ins; switch (eff) { case 0x00: if (op) eff = 0x20; break; case 0x01: case 0x02: case 0x03: case 0x04: case 0x05: case 0x06: case 0x07: case 0x09: case 0x0A: case 0x0B: case 0x0D: case 0x0F: break; case 0x08: { switch (op >> 4) { // set panning case 0x0: op=(mp_ubyte)XModule::pan15to255(op); break; // fine porta up case 0x3: eff = 0x31; op &= 0xf; break; // fine porta down case 0x4: eff = 0x32; op &= 0xf; break; default: #ifdef VERBOSE printf("Unsupported command: %i/%i\n", eff, op); #endif break; } } break; case 0x0C: op = XModule::vol64to255(op); break; case 0x0E: eff = 0x30 + (op >> 4); op &= 0xF; break; case 0x11: eff = 0x01; break; case 0x12: eff = 0x02; break; default: #ifdef VERBOSE printf("Unsupported command: %i/%i\n", eff, op); #endif eff = op = 0; } // old style modules don't support last effect for: // - portamento up/down // - volume slide if (eff==0x1&&(!op)) eff = 0; if (eff==0x2&&(!op)) eff = 0; if (eff==0xA&&(!op)) eff = 0; if (eff==0x5&&(!op)) eff=0x3; if (eff==0x6&&(!op)) eff=0x4; phead[i].patternData[offs+2] = eff; phead[i].patternData[offs+3] = op; offs+=(phead[i].effnum * 2 + 2); cnt+=4; } } delete[] pattern; } mp_sint32 result = module->loadModuleSamples(f); if (result != MP_OK) return result; //module->setDefaultPanning(); module->postProcessSamples(); return MP_OK; } ///////////////////////////////////////////////// // Old DSIK ///////////////////////////////////////////////// const char* LoaderDSMv1::identifyModule(const mp_ubyte* buffer) { // check for .DSM module if (!memcmp(buffer,"DSM\x10",4)) { return "DSMv1"; } return NULL; } static mp_sint32 convertDSMPattern(TXMPattern* XMPattern, const mp_ubyte* srcPattern, mp_uint32 maxChannels, mp_sint32 patCnt, mp_sint32 octaveAdjust = 24) { XMPattern->channum = maxChannels; XMPattern->effnum = 2; XMPattern->rows = 64; XMPattern->patternData = new mp_ubyte[maxChannels*6*64]; if (XMPattern->patternData == NULL) { return MP_OUT_OF_MEMORY; } memset(XMPattern->patternData,0,maxChannels*6*64); mp_ubyte* dstSlot = XMPattern->patternData; for (mp_sint32 row = 0; row < 64; row++) for (mp_uint32 c = 0; c < maxChannels; c++) { const mp_ubyte* srcSlot = srcPattern+row*32*5+c*5; mp_ubyte note = srcSlot[0]; if (note) note+=octaveAdjust; dstSlot[0] = note; dstSlot[1] = srcSlot[1]; if (srcSlot[2]<=64) { dstSlot[2] = 0xC; dstSlot[3] = XModule::vol64to255(srcSlot[2]); } mp_ubyte eff = srcSlot[3]; mp_ubyte op = srcSlot[4]; if (eff <= 0xF) { if (eff==0xE) { eff=(op>>4)+0x30; op&=0xf; } if ((!eff)&&op) eff=0x20; if (eff==0x5&&(!op)) eff=0x3; if (eff==0x6&&(!op)) eff=0x4; if (eff==0xC) { op = XModule::vol64to255(op); } if (eff == 0x38) { eff = 0x8; op = XModule::pan15to255(op); } dstSlot[4] = eff; dstSlot[5] = op; } dstSlot+=6; } return MP_OK; } mp_sint32 LoaderDSMv1::load(XMFileBase& f, XModule* module) { mp_sint32 i,j; module->cleanUp(); // this will make code much easier to read TXMHeader* header = &module->header; TXMInstrument* instr = module->instr; TXMSample* smp = module->smp; TXMPattern* phead = module->phead; // we're already out of memory here if (!phead || !instr || !smp) return MP_OUT_OF_MEMORY; f.read(header->sig,3,1); f.readByte(); f.read(&header->name,1,28); f.readDword(); // skip next 5 bytes f.readByte(); header->channum = f.readByte(); // number of channels header->ordnum = f.readByte(); // songlength header->insnum = f.readByte(); header->patnum = f.readByte(); header->tempo = f.readByte(); header->speed = f.readByte(); header->mainvol = XModule::vol64to255(f.readByte()); // initial main volume f.readDword(); // skip next 4 bytes f.read(header->ord,1,128); mp_uword* insParaPtrs = new mp_uword[header->insnum]; if (insParaPtrs == NULL) return MP_OUT_OF_MEMORY; f.readWords(insParaPtrs,header->insnum); mp_uword* patParaPtrs = new mp_uword[header->patnum]; if (patParaPtrs == NULL) { delete[] insParaPtrs; return MP_OUT_OF_MEMORY; } f.readWords(patParaPtrs,header->patnum); //for (i = 0; i < header->insnum; i++) //{ // printf("%x\n",insParaPtrs[i]*16); //} ////////////////////// // read instruments // ////////////////////// mp_uint32* samplePtrs = new mp_uint32[header->insnum]; if (samplePtrs == NULL) { delete[] insParaPtrs; delete[] patParaPtrs; return MP_OUT_OF_MEMORY; } memset(samplePtrs,0,sizeof(mp_uint32)*header->insnum); mp_sint32 s = 0; for (i = 0; i < header->insnum; i++) { mp_uint32 insOffs = insParaPtrs[i]*16; if (insOffs) { f.seekWithBaseOffset(insOffs); //f.read(buffer,1,64); if (f.readDword() == 0x10495344) // "DSI"+0x10 { f.read(instr[i].name,1,30); // instrument name memcpy(smp[s].name,instr[i].name,30); f.readByte(); // zero terminator maybe? mp_ubyte bOffs = f.readByte(); mp_uword wOffs = f.readWord(); // stupid fileoffsets samplePtrs[s] = (((mp_uint32)bOffs<<16)+(mp_uint32)wOffs)*16; smp[s].flags = 1; smp[s].pan = 0x80; smp[s].samplen = f.readWord(); smp[s].loopstart = f.readWord(); mp_sint32 looplen = ((mp_uint32)f.readWord() - (mp_uint32)smp[s].loopstart); if (looplen < 0) looplen = 0; smp[s].looplen = looplen; XModule::convertc4spd(f.readWord(),&smp[s].finetune,&smp[s].relnote); smp[s].vol = XModule::vol64to255(f.readByte()); if (looplen>0) smp[s].type=1; // looped sample if (smp[s].samplen) { instr[i].samp=1; for (j=0;j<120;j++) instr[i].snum[j] = s; s++; } //f.readDword(); //f.readDword(); //f.readDword(); //f.readDword(); //f.readByte(); } } } header->smpnum = s; ////////////////////// // read patterns // ////////////////////// mp_ubyte* pattern = new mp_ubyte[64*32*5]; if (pattern == NULL) { delete[] insParaPtrs; delete[] patParaPtrs; delete[] samplePtrs; return MP_OUT_OF_MEMORY; } for (i = 0; i < header->patnum; i++) { for (j = 0; j < 32*64; j++) { pattern[j*5] = 0; pattern[j*5+1] = 0; pattern[j*5+2] = 0xFF; pattern[j*5+3] = 0; pattern[j*5+4] = 0; } mp_uint32 maxChannels = 1; mp_uint32 patOffs = patParaPtrs[i]*16; if (patOffs) { f.seekWithBaseOffset(patOffs); mp_uint32 size = f.readWord()-2; mp_ubyte* packed = new mp_ubyte[size]; if (packed == NULL) { delete[] insParaPtrs; delete[] patParaPtrs; delete[] samplePtrs; delete[] pattern; return MP_OUT_OF_MEMORY; } f.read(packed,1,size); mp_uint32 index = 0; mp_uint32 row = 0; mp_ubyte obfuscate = 3; while (indexmaxChannels) maxChannels = chn; mp_ubyte* slot = pattern+(row*32*5)+chn*5; if (pi & 128) { slot[0] = packed[index++]; obfuscate++; } if (pi & 64) { slot[1] = packed[index++]; obfuscate++; } if (pi & 32) { slot[2] = packed[index++]; obfuscate++; } if (pi & 16) { slot[3] = packed[index++]; slot[4] = packed[index++]; obfuscate++; obfuscate++; } } maxChannels++; if (maxChannels > header->channum) maxChannels = header->channum; delete[] packed; } convertDSMPattern(&phead[i],pattern, maxChannels, i); } delete[] pattern; delete[] insParaPtrs; delete[] patParaPtrs; for (i = 0; i < header->smpnum; i++) { f.seekWithBaseOffset(samplePtrs[i]); if (module->loadModuleSample(f,i) != 0) { delete[] samplePtrs; return MP_OUT_OF_MEMORY; } } strcpy(header->tracker,"Digisound Interface Kit"); module->setDefaultPanning(); module->postProcessSamples(); return MP_OK; } ///////////////////////////////////////////////// // New DSIK ///////////////////////////////////////////////// const char* LoaderDSMv2::identifyModule(const mp_ubyte* buffer) { // check for .DSM module if (!memcmp(buffer,"RIFF",4) && !memcmp(buffer+8,"DSMFSONG",8)) { return "DSMv2"; } return NULL; } mp_sint32 LoaderDSMv2::load(XMFileBase& f, XModule* module) { module->cleanUp(); // this will make code much easier to read TXMHeader* header = &module->header; TXMInstrument* instr = module->instr; TXMSample* smp = module->smp; TXMPattern* phead = module->phead; // we're already out of memory here if (!phead || !instr || !smp) return MP_OUT_OF_MEMORY; // Even though the new DSM format is chunk based we don't read it // in a real chunk fashion i.e. we're assuming fixed structure // skip RIFF and chunk length f.seekWithBaseOffset(8); f.read(header->sig, 1, 4); // skip "SONG" & chunk length f.readDword(); if (f.readDword() != 0xC0) return MP_LOADER_FAILED; f.read(header->name, 1, 28); mp_uword ver = f.readWord(); mp_uword flags = f.readWord(); f.readDword(); header->ordnum = f.readWord(); header->insnum = f.readWord(); header->patnum = f.readWord(); header->channum = f.readWord(); header->mainvol = XModule::vol64to255(f.readByte()); mp_ubyte mainvol = f.readByte(); header->tempo = f.readByte(); header->speed = f.readByte(); mp_ubyte panpos[16]; f.read(panpos, 1, 16); f.read(header->ord, 1, 128); mp_sint32 patcnt = 0; mp_sint32 inscnt = 0; mp_sint32 smpcnt = 0; mp_uint32 size = f.sizeWithBaseOffset(); while (f.posWithBaseOffset() < size && (patcnt < header->patnum || inscnt < header->insnum)) { mp_ubyte ID[4]; f.read(ID, 1, 4); mp_dword chunkLen = f.readDword(); switch (BigEndian::GET_DWORD(&ID)) { // "PATT" case 0x50415454: { mp_sint32 j; mp_uint32 size = f.readWord()-2; mp_ubyte* packed = new mp_ubyte[size]; if (packed == NULL) { return MP_OUT_OF_MEMORY; } f.read(packed, 1, size); mp_ubyte* pattern = new mp_ubyte[64*32*5]; if (pattern == NULL) { delete[] packed; return MP_OUT_OF_MEMORY; } for (j = 0; j < 32*64; j++) { pattern[j*5] = 0; pattern[j*5+1] = 0; pattern[j*5+2] = 0xFF; pattern[j*5+3] = 0; pattern[j*5+4] = 0; } mp_uint32 maxChannels = 1; mp_uint32 index = 0; mp_uint32 row = 0; while (indexmaxChannels) maxChannels = chn; mp_ubyte* slot = pattern+(row*32*5)+chn*5; if (pi & 128) { slot[0] = packed[index++]; } if (pi & 64) { slot[1] = packed[index++]; } if (pi & 32) { slot[2] = packed[index++]; } if (pi & 16) { slot[3] = packed[index++]; slot[4] = packed[index++]; } } maxChannels++; if (maxChannels > header->channum) maxChannels = header->channum; delete[] packed; convertDSMPattern(&phead[patcnt], pattern, maxChannels, patcnt, 0); delete[] pattern; patcnt++; break; } // "INST" case 0x494E5354: { mp_ubyte dosname[13]; f.read(dosname, 1, 13); mp_uword flags = f.readWord(); mp_ubyte vol = f.readByte(); mp_dword length = f.readDword(); mp_dword loopstart = f.readDword(); mp_sint32 looplen = f.readDword() - loopstart; if (looplen < 0) looplen = 0; f.readDword(); mp_sint32 c2spd = f.readWord(); mp_sint32 period = f.readWord(); f.read(instr[inscnt].name, 1, 28); if (length) { instr[inscnt].samp = 1; for (mp_sint32 j = 0; j < 120; j++) instr[inscnt].snum[j] = smpcnt; TXMSample* s = &smp[smpcnt]; s->flags = 1; memcpy(s->name, dosname, sizeof(dosname)); s->samplen = length; s->loopstart = loopstart; s->looplen = looplen; if (flags & 1) s->type = 1; s->vol = XModule::vol64to255(vol); s->pan = 0x80; XModule::convertc4spd(c2spd, &s->finetune, &s->relnote); s->sample = (mp_sbyte*)module->allocSampleMem(length); if (s->sample == NULL) { return MP_OUT_OF_MEMORY; } if (!module->loadSample(f, s->sample, length, length, (flags & 2) ? XModule::ST_DEFAULT : XModule::ST_UNSIGNED)) { return MP_OUT_OF_MEMORY; } smpcnt++; } inscnt++; break; } } } strcpy(header->tracker,"Digisound Interface Kit"); module->setDefaultPanning(); module->postProcessSamples(); return MP_OK; } MilkyTracker-1.02.00/src/milkyplay/LoaderDTM.cpp000066400000000000000000000463341324432207300213460ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * LoaderDTM.cpp * MilkyPlay Module Loader: Digitrekker 3.0 and Digital Tracker * * Created by Peter Barth on 15.01.06. * */ #include "Loaders.h" const char* LoaderDTM_2::identifyModule(const mp_ubyte* buffer) { // check for .DTM module if (memcmp(buffer,"D.T.",4)) return NULL; bool hasPATT = false, hasINST = false, hasSEQ = false; mp_sint32 i = 8 + BigEndian::GET_DWORD(buffer+4); while (i < 2040 && !(hasPATT && hasINST && hasSEQ)) { mp_ubyte ID[4], lenBuf[4]; memcpy(ID, buffer + i, 4); i+=4; memcpy(lenBuf, buffer + i, 4); i+=4; mp_uint32 chunkLen = BigEndian::GET_DWORD(lenBuf); switch (BigEndian::GET_DWORD(ID)) { case 0x532E512E : hasSEQ = true; break; case 0x50415454: hasPATT = true; break; case 0x494E5354: hasINST = true; break; } i+=chunkLen; } if (hasPATT && hasINST && hasSEQ) return "DTM_2"; return NULL; } mp_sint32 LoaderDTM_2::load(XMFileBase& f, XModule* module) { enum PatternFormatTypes { PTStyle, DTStyle }; module->cleanUp(); // this will make code much easier to read TXMHeader* header = &module->header; TXMInstrument* instr = module->instr; TXMSample* smp = module->smp; TXMPattern* phead = module->phead; // we're already out of memory here if (!phead || !instr || !smp) return MP_OUT_OF_MEMORY; header->mainvol = 255; header->tempo = 6; header->speed = 125; header->flags = XModule::MODULE_OLDPTINSTRUMENTCHANGE | XModule::MODULE_PTNEWINSTRUMENT; mp_sint32 i = 0, s = 0; PatternFormatTypes patternFormat = DTStyle; while (true) { mp_ubyte ID[4], buffer[4]; mp_uint32 bytesRead = f.read(ID, 4, 1); if (bytesRead != 4) break; bytesRead = f.read(buffer, 4, 1); if (bytesRead != 4) break; mp_uint32 chunkLen = BigEndian::GET_DWORD(buffer); switch (BigEndian::GET_DWORD(ID)) { case 0x442E542E : // 'D.T.' { mp_sint32 pos = f.posWithBaseOffset(); f.read(buffer, 1, 2); mp_uword type = BigEndian::GET_WORD(buffer); if (type) { return MP_LOADER_FAILED; } f.read(buffer, 1, 4); f.read(buffer, 1, 2); if (BigEndian::GET_WORD(buffer)) header->tempo = BigEndian::GET_WORD(buffer); f.read(buffer, 1, 2); if (BigEndian::GET_WORD(buffer)) header->speed = BigEndian::GET_WORD(buffer); mp_uint32 len = chunkLen - 10; mp_ubyte* name = new mp_ubyte[len]; if (name == NULL) return MP_OUT_OF_MEMORY; f.read(name, 1, len); mp_uint32 i = 0; mp_uint32 fLen = len; while (i < len && (!name[i] || name[i] == 32)) { i++; fLen--; } memcpy(header->name, name+i, fLen < sizeof(header->name) ? fLen : sizeof(header->name)); for (i = 0; i < sizeof(header->name); i++) if (!header->name[i]) header->name[i] = 32; delete[] name; f.seekWithBaseOffset(pos + chunkLen); break; } case 0x532E512E: // 'S.Q.' { mp_uint32 pos = f.posWithBaseOffset(); f.read(buffer, 1, 2); header->ordnum = BigEndian::GET_WORD(buffer); f.read(buffer, 1, 2); header->restart = BigEndian::GET_WORD(buffer); f.read(buffer, 1, 4); f.read(header->ord, 1, header->ordnum); f.seekWithBaseOffset(pos + chunkLen); break; } case 0x50415454: // 'PATT' { mp_uint32 pos = f.posWithBaseOffset(); f.read(buffer, 1, 2); header->channum = BigEndian::GET_WORD(buffer); f.read(buffer, 1, 2); header->patnum = BigEndian::GET_WORD(buffer); f.read(buffer, 1, 4); if (!BigEndian::GET_DWORD(buffer)) patternFormat = PTStyle; else if (memcmp(buffer,"2.04",4) == 0) patternFormat = DTStyle; else return MP_LOADER_FAILED; f.seekWithBaseOffset(pos + chunkLen); break; } case 0x494E5354: // 'INST' { mp_uint32 pos = f.posWithBaseOffset(); f.read(buffer, 1, 2); header->insnum = BigEndian::GET_WORD(buffer); s = 0; for (i = 0; i < header->insnum; i++) { f.readDword(); // reserved f.read(buffer, 1, 4); smp[s].samplen = BigEndian::GET_DWORD(buffer); mp_ubyte fine = f.readByte(); smp[s].vol = module->vol64to255(f.readByte()); f.read(buffer, 1, 4); smp[s].loopstart = BigEndian::GET_DWORD(buffer); f.read(buffer, 1, 4); smp[s].looplen = BigEndian::GET_DWORD(buffer); f.read(instr[i].name, 1, 22); // instrument name f.read(buffer, 1, 2); mp_uword type = BigEndian::GET_WORD(buffer); mp_ubyte bits = (mp_ubyte)type; f.read(buffer, 1, 4); // MIDI f.read(buffer, 1, 4); mp_uint32 c4spd = BigEndian::GET_DWORD(buffer); mp_sint32 newC4spd = XModule::sfinetunes[fine & 0xF]; newC4spd = (c4spd*newC4spd) / 8363; XModule::convertc4spd(newC4spd, &smp[s].finetune, &smp[s].relnote); //XModule::convertc4spd(c4spd,&smp[s].finetune,&smp[s].relnote); smp[s].type = (bits == 16 ? 16 : 0); smp[s].flags = 1; smp[s].pan = 0x80; // 16 bit sample if (smp[s].type & 16) { smp[s].type |= 16; smp[s].samplen >>= 1; smp[s].loopstart >>= 1; smp[s].looplen >>= 1; } // looping if (smp[s].looplen > 2) smp[s].type |= 1; if (smp[s].samplen) { instr[i].samp = 1; for (mp_uint32 j = 0; j < 120; j++) instr[i].snum[j] = s; s++; } } header->smpnum = s; f.seekWithBaseOffset(pos + chunkLen); break; } case 0x44415054: { mp_uint32 pos = f.posWithBaseOffset(); f.readDword(); // reserved f.read(buffer, 1, 2); i = BigEndian::GET_WORD(buffer); f.read(buffer, 1, 2); mp_uint32 numRows = BigEndian::GET_WORD(buffer); if (i >= 0 && i < header->patnum) { mp_ubyte* patData = new mp_ubyte[chunkLen - 8]; phead[i].rows = numRows; phead[i].effnum = 2; phead[i].channum = (mp_ubyte)header->channum; phead[i].patternData = new mp_ubyte[phead[i].rows*header->channum*6]; memset(phead[i].patternData,0,phead[i].rows*header->channum*6); f.read(patData, 1, chunkLen - 8); mp_ubyte* pData = patData; mp_ubyte* dstSlot = phead[i].patternData; for (mp_uint32 r = 0; r < numRows; r++) { for (mp_sint32 c = 0; c < phead[i].channum; c++) { mp_ubyte ins = 0,eff = 0,notenum = 0, op = 0, vol = 0; if (patternFormat == PTStyle) { mp_sint32 note = 0; mp_ubyte b1 = pData[0]; mp_ubyte b2 = pData[1]; mp_ubyte b3 = pData[2]; mp_ubyte b4 = pData[3]; note = ((b1&0xf)<<8)+b2; ins = (b1&0xf0)+(b3>>4); eff = b3&0xf; if (note) notenum = XModule::amigaPeriodToNote(note); dstSlot[0] = notenum; op = b4; } else if (patternFormat == DTStyle) { mp_ubyte octave = pData[0] >> 4; notenum = pData[0]&0xF; vol = pData[1]>>2; ins = ((pData[1]&3)<<4) | (pData[2]>>4); eff = pData[2]&0xF; op = pData[3]; if (octave && notenum) { dstSlot[0] = octave*12 + notenum; } } else ASSERT(false); dstSlot[1] = ins; if (vol) { dstSlot[2] = 0xC; mp_sint32 finalVol = ((mp_sint32)(vol-1)*0x41CE8)>>16; if (finalVol > 255) finalVol = 255; dstSlot[3] = finalVol; } if (eff==0xE) { eff=(op>>4)+0x30; op&=0xf; } if ((!eff)&&op) eff=0x20; // old style modules don't support last effect for: // - portamento up/down // - volume slide if (eff==0x1&&(!op)) eff = 0; if (eff==0x2&&(!op)) eff = 0; if (eff==0xA&&(!op)) eff = 0; if (eff==0x5&&(!op)) eff = 0x3; if (eff==0x6&&(!op)) eff = 0x4; if (eff==0xC) { op = XModule::vol64to255(op); } dstSlot[4] = eff; dstSlot[5] = op; pData+=4; dstSlot+=6; } } delete[] patData; } f.seekWithBaseOffset(pos + chunkLen); break; } case 0x44414954: { mp_uint32 pos = f.posWithBaseOffset(); f.read(buffer, 1, 2); i = BigEndian::GET_WORD(buffer); if (instr[i].samp) { s = instr[i].snum[0]; if (module->loadModuleSample(f, s, XModule::ST_DEFAULT, XModule::ST_16BIT | XModule::ST_BIGENDIAN) != 0) return MP_OUT_OF_MEMORY; } f.seekWithBaseOffset(pos + chunkLen); break; } default: { mp_uint32 pos = f.posWithBaseOffset(); f.seekWithBaseOffset(pos + chunkLen); break; } } } strcpy(header->tracker,"Digital Tracker"); module->setDefaultPanning(); module->postProcessSamples(); return MP_OK; } #define CLEAN_DTM_1 \ if (trackSeq) delete[] trackSeq; \ if (tracks) for (mp_sint32 i = 0; i < numTracks; i++) delete[] tracks[i]; delete[] tracks; const char* LoaderDTM_1::identifyModule(const mp_ubyte* buffer) { // check for .DTM module if (memcmp(buffer,"SONG",4)) return NULL; bool hasINFO = false, hasINIT = false, hasPSEQ = false; mp_sint32 i = 8; while (i < 2040 && !(hasINFO && hasINIT && hasPSEQ)) { mp_ubyte ID[4], lenBuf[4]; memcpy(ID, buffer + i, 4); i+=4; memcpy(lenBuf, buffer + i, 4); i+=4; mp_uint32 chunkLen = LittleEndian::GET_DWORD(lenBuf); switch (BigEndian::GET_DWORD(ID)) { case 0x494E464F: hasINFO = true; break; case 0x494E4954: hasINIT = true; break; case 0x50534551 : hasPSEQ = true; break; } i+=chunkLen; } if (hasINFO && hasINIT && hasPSEQ) return "DTM_1"; return NULL; } mp_sint32 LoaderDTM_1::load(XMFileBase& f, XModule* module) { module->cleanUp(); // this will make code much easier to read TXMHeader* header = &module->header; TXMInstrument* instr = module->instr; TXMSample* smp = module->smp; TXMPattern* phead = module->phead; // we're already out of memory here if (!phead || !instr || !smp) return MP_OUT_OF_MEMORY; bool hasSong = false, hasInfo = false, hasInit = false, hasInst = false, hasTrak = false, hasSamp = false; bool insActive = false; mp_sint32 numTracks = 0; header->mainvol = 255; header->tempo = 6; header->speed = 125; mp_uword* trackSeq = NULL; mp_ubyte** tracks = NULL; mp_sint32 i = 0, s = 0, t = 0; while (true) { mp_ubyte ID[4], buffer[4]; mp_uint32 bytesRead = f.read(ID, 4, 1); if (bytesRead != 4) break; bytesRead = f.read(buffer, 4, 1); if (bytesRead != 4) break; mp_uint32 chunkLen = LittleEndian::GET_DWORD(buffer); switch (BigEndian::GET_DWORD(ID)) { case 0x534F4E47: // 'SONG' { hasSong = true; break; } case 0x4E414D45: // 'NAME' { mp_uint32 pos = f.posWithBaseOffset(); f.read(header->name, 1, chunkLen < sizeof(header->name) ? chunkLen : sizeof(header->name)); f.seekWithBaseOffset(pos + chunkLen); break; } case 0x494E464F: // 'INFO' { hasInfo = true; mp_uint32 pos = f.posWithBaseOffset(); // just assume everything is correct here header->channum = f.readWord(); header->ordnum = f.readWord(); header->patnum = f.readWord(); numTracks = f.readWord(); header->insnum = f.readWord(); tracks = new mp_ubyte*[numTracks]; if (tracks == NULL) { CLEAN_DTM_1 return MP_OUT_OF_MEMORY; } memset(tracks, 0, sizeof(mp_ubyte*)*numTracks); f.seekWithBaseOffset(pos + chunkLen); break; } case 0x494E4954: // 'INIT' hasInit = true; break; case 0x73706564: // 'sped' header->tempo = f.readWord(); header->speed = f.readWord(); break; case 0x50534551: // 'PSEQ' f.read(header->ord, 1, chunkLen); break; case 0x50415454: // 'PATT' { trackSeq = new mp_uword[header->patnum * header->channum]; if (trackSeq == NULL) { CLEAN_DTM_1 return MP_OUT_OF_MEMORY; } f.readWords(trackSeq, header->patnum * header->channum); break; } case 0x494E5354: // 'INST' hasInst = true; insActive = true; s = i = 0; break; case 0x53414D50 : // 'SAMP' hasSamp = true; insActive = false; s = i = 0; break; case 0x73616D70: // 'samp' { mp_uint32 pos = f.posWithBaseOffset(); if (insActive) { f.read(instr[i].name, 1, 32); // instrument name smp[s].samplen = f.readDword(); smp[s].loopstart = f.readDword(); mp_sint32 looplen = ((mp_sint32)f.readDword() - (mp_sint32)smp[s].loopstart); if (looplen < 0) looplen = 0; smp[s].looplen = looplen; mp_uint32 c4spd = f.readWord(); XModule::convertc4spd(c4spd,&smp[s].finetune,&smp[s].relnote); smp[s].vol = module->vol64to255(f.readByte()); mp_ubyte bits = f.readByte(); smp[s].type = (bits == 16 ? 16 : 0); f.read(smp[s].name,1,13); // read dos filename smp[s].flags = 1; smp[s].pan = 0x80; // looping if (smp[s].looplen) smp[s].type |= 1; // 16 bit sample /*if (flags & 4) { smp[s].type |= 16; smp[s].samplen >>= 1; smp[s].loopstart >>= 1; smp[s].looplen >>= 1; }*/ if (smp[s].samplen) { instr[i].samp = 1; for (mp_uint32 j = 0; j < 120; j++) instr[i].snum[j] = s; s++; } i++; } else { if (instr[i].samp) { if (module->loadModuleSample(f, s) != 0) { CLEAN_DTM_1 return MP_OUT_OF_MEMORY; } s++; header->smpnum = s; } i++; } f.seekWithBaseOffset(pos + chunkLen); break; } case 0x5452414B: // 'TRAK' { hasTrak = true; t = 0; break; } case 0x7472616B: // 'trak' { if (t >= numTracks) { CLEAN_DTM_1 return MP_LOADER_FAILED; } tracks[t] = new mp_ubyte[chunkLen]; if (tracks[t] == NULL) { CLEAN_DTM_1 return MP_OUT_OF_MEMORY; } f.read(tracks[t], 1, chunkLen); t++; break; } default: { mp_uint32 pos = f.posWithBaseOffset(); f.seekWithBaseOffset(pos + chunkLen); break; } } } if (!hasSong || !hasInfo || !hasInit || !hasInst || !hasTrak || !hasSamp) { CLEAN_DTM_1 return MP_LOADER_FAILED; } mp_ubyte lTab[256]; mp_ubyte rTab[256]; for (mp_sint32 pan = 0; pan < 256; pan++) { mp_sint32 left = 255-pan; if (left>128) left=128; mp_sint32 right = pan; if (right>128) right=128; lTab[pan] = left; rTab[pan] = right; } // rebuild pattern data mp_uword* pTrackSeq = trackSeq; for (i = 0; i < header->patnum;i++) { mp_sint32 numRows = 0; mp_sint32 c; for (c=0;cchannum;c++) { if (pTrackSeq[c] < numTracks) if (LittleEndian::GET_WORD(tracks[pTrackSeq[c]]) > numRows) numRows = LittleEndian::GET_WORD(tracks[*pTrackSeq]); } phead[i].rows = numRows; phead[i].effnum = 2; phead[i].channum = (mp_ubyte)header->channum; phead[i].patternData = new mp_ubyte[phead[i].rows*header->channum*6]; // out of memory? if (phead[i].patternData == NULL) { CLEAN_DTM_1 return MP_OUT_OF_MEMORY; } memset(phead[i].patternData,0,phead[i].rows*header->channum*6); for (c=0;cchannum;c++) { if (*pTrackSeq < numTracks) { mp_sint32 numRows = LittleEndian::GET_WORD(tracks[*pTrackSeq]); mp_ubyte *track = tracks[*pTrackSeq] + 2; for (mp_sint32 row = 0; row < numRows; row++) { mp_ubyte* dstSlot = phead[i].patternData+row*phead[i].channum*6+c*6; mp_ubyte note = (track[row] == 0x80 ? (mp_ubyte)XModule::NOTE_OFF : track[row]); mp_ubyte ins = track[row+numRows]; mp_ubyte eff1 = track[row+numRows*2] >= 1 ? 0x0C : 0; mp_ubyte op1 = track[row+numRows*2] >= 1 ? XModule::vol64to255(track[row+numRows*2]-1) : 0; mp_ubyte hi = track[row+numRows*4]; mp_ubyte lo = track[row+numRows*5]; //printf("%x, %x, %x\n", track[row+numRows*3], track[row+numRows*4], track[row+numRows*5]); mp_ubyte eff2 = 0; mp_ubyte op2 = 0; switch (track[row+numRows*3]-1) { case 0x07: eff2 = 0x07; op2 = ((hi > 0x0F ? 0x0F : hi) << 4) + (lo > 0x0F ? 0x0F : lo); break; case 0x09: eff2 = 0x09; op2 = (((((mp_uint32)hi) << 8) + (mp_uint32)lo)<<4)>>8; break; case 0x0A: // volume slide up if (hi != 0 && hi != 0xFF) { eff2 = 0x0A; op2 = ((hi > 0x0F) ? 0xF : hi) << 4; } else if (lo != 0 && lo != 0xFF) { eff2 = 0x0A; op2 = ((lo > 0x0F) ? 0xF : lo); } break; case 0x10: // set tempo eff2 = 0x16; op2 = lo; break; case 0x11: // set panning { if (hi > 64) hi = 64; if (lo > 64) lo = 64; mp_sint32 dist = 0x7FFFFFFF; mp_sint32 x = hi<<1; mp_sint32 y = lo<<1; mp_sint32 index = -1; for (mp_sint32 j = 0; j < 256; j++) { if (((lTab[j]-y)*(lTab[j]-y) + (rTab[j]-x)*(rTab[j]-x)) < dist) { dist = ((lTab[j]-y)*(lTab[j]-y) + (rTab[j]-x)*(rTab[j]-x)); index = j; } } if (index != -1) { eff2 = 0x08; op2 = index; } break; } } dstSlot[0] = note; dstSlot[1] = ins; dstSlot[2] = eff1; dstSlot[3] = op1; dstSlot[4] = eff2; dstSlot[5] = op2; } } pTrackSeq++; } } CLEAN_DTM_1 strcpy(header->tracker,"Digitrekker"); module->setDefaultPanning(); module->postProcessSamples(); return MP_OK; } MilkyTracker-1.02.00/src/milkyplay/LoaderFAR.cpp000066400000000000000000000165231324432207300213270ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * LoaderFAR.cpp * MilkyPlay Module Loader: Farandole Composer * */ #include "Loaders.h" const char* LoaderFAR::identifyModule(const mp_ubyte* buffer) { // check for .FAR module if (!memcmp(buffer,"FAR\xFE",4)) { return "FAR"; } return NULL; } mp_sint32 LoaderFAR::load(XMFileBase& f, XModule* module) { mp_ubyte buffer[2048]; module->cleanUp(); // this will make code much easier to read TXMHeader* header = &module->header; TXMInstrument* instr = module->instr; TXMSample* smp = module->smp; TXMPattern* phead = module->phead; // we're already out of memory here if (!phead || !instr || !smp) return MP_OUT_OF_MEMORY; mp_sint32 i,j; // read most of the header f.read(buffer, 1, 98); memcpy(header->sig, buffer, 3); memcpy(header->name, buffer + 4, 32); header->freqtab = 1; header->mainvol = 255; header->tempo = buffer[75]; header->speed = 80; header->tempo = 4; header->channum = 16; char* unpackedSongMessage = new char[LittleEndian::GET_WORD(buffer + 96)]; f.read(unpackedSongMessage, 1, LittleEndian::GET_WORD(buffer + 96)); mp_sint32 size = LittleEndian::GET_WORD(buffer + 96); // song message isn't null terminated for (i = 0; i < size; i++) if (unpackedSongMessage[i] == '\0') unpackedSongMessage[i] = ' '; for (i = 0; i < size; i++) { char line[140]; memset(line, 0, sizeof(line)); if (size - i >= 131) { XModule::convertStr(line, unpackedSongMessage+i, 132, false); i+=131; } else { XModule::convertStr(line, unpackedSongMessage+i, size-i, false); i+=size-i; } module->addSongMessageLine(line); } delete[] unpackedSongMessage; f.read(header->ord, 1, 256); header->patnum = f.readByte(); header->ordnum = f.readByte(); header->restart = f.readByte(); mp_uword patSizes[256]; f.readWords(patSizes, 256); j = LittleEndian::GET_WORD(buffer + 47) - (869 + LittleEndian::GET_WORD(buffer + 96)); for (i = 0; i < j; i++) f.readByte(); j = 0; for (i = 0; i < 256; i++) if (patSizes[i]) j = i; header->patnum = j+1; for (i = 0; i < header->patnum; i++) { if (patSizes[i]) { mp_ubyte* pattern = new mp_ubyte[patSizes[i]]; f.read(pattern, 1, patSizes[i]); // brauch ich des? mp_sint32 pNumRows = (patSizes[i] - 2) / (16*4); mp_sint32 numRows = *pattern + 2; // huh? if (numRows > pNumRows) numRows = pNumRows; phead[i].rows = numRows; phead[i].effnum = 2; phead[i].channum = (mp_ubyte)header->channum; phead[i].patternData = new mp_ubyte[phead[i].rows*header->channum * (phead[i].effnum * 2 + 2)]; // out of memory? if (phead[i].patternData == NULL) { delete[] pattern; return MP_OUT_OF_MEMORY; } memset(phead[i].patternData,0,phead[i].rows*header->channum * (phead[i].effnum * 2 + 2)); mp_sint32 r,c,cnt = 2; mp_sint32 offs = 0; for (r=0;r < phead[i].rows; r++) { for (c=0;c < header->channum;c++) { mp_ubyte note = pattern[cnt]; mp_ubyte ins = pattern[cnt+1]; mp_ubyte vol = pattern[cnt+2]; mp_ubyte eff = pattern[cnt+3] >> 4; mp_ubyte op = pattern[cnt+3] & 0x0F; if (vol) { vol = XModule::vol64to255(vol << 2); phead[i].patternData[offs+2] = 0x0C; phead[i].patternData[offs+3] = vol; } if (note) { note+=12*3; ins++; } phead[i].patternData[offs]=note; phead[i].patternData[offs+1]=ins; eff=0x70; op = pattern[cnt+3]; /*switch (eff) { // porta to note case 0x03: op <<= 4; break; // retrigger case 0x04: eff = 0x39; break; // vibrato depth case 0x5: vibDepth[c] = op; break; // vibrato case 0x6: eff = 0x04; op = (op<<4)|vibDepth[c]; break; // volslide up case 0x07: eff = 0x0A; op<<=4; break; // volslide down case 0x08: eff = 0x0A; break; // break case 0x0B: eff = 0x08; op <<= 4; break; case 0x00: break; case 0x0f: eff = 0x7f; break; default: printf("Missing effects %i,%i\n",eff,op); eff = op = 0; }*/ phead[i].patternData[offs+4]=eff; phead[i].patternData[offs+5]=op; offs+=(phead[i].effnum * 2 + 2); cnt+=4; } } delete[] pattern; } } char sampleMap[8]; f.read(sampleMap, 1, 8); j = 0; for (i = 0; i < 64; i++) if (sampleMap[i>>3]&(1<<(i&7))) j = i+1; header->insnum = j; mp_sint32 s = 0; for (i = 0; i < header->insnum; i++) { if (sampleMap[i>>3]&(1<<(i&7))) { instr[i].samp = 1; for (j = 0; j < 120; j++) instr[i].snum[j] = s; f.read(instr[i].name, 1, 32); memcpy(smp[s].name, instr[i].name, 32); mp_sint32 size = f.readDword(); mp_ubyte finetune = f.readByte(); mp_sint32 volume = f.readByte() << 4; if (volume>255) volume = 255; mp_sint32 repstart = f.readDword(); mp_sint32 repend = f.readDword(); mp_ubyte type = f.readByte(); mp_ubyte flags = f.readByte(); smp[s].vol = volume; smp[s].flags = 1; smp[s].samplen = size; smp[s].loopstart = repstart; mp_sint32 looplen = (repend - repstart); if (looplen < 0) looplen = 0; smp[s].looplen = looplen; if (flags & 8) smp[s].type = 1; if (type & 1) { smp[s].type |= 16; smp[s].samplen >>= 1; smp[s].loopstart >>=1; smp[s].looplen >>=1; } if (module->loadModuleSample(f, s) != 0) return MP_OUT_OF_MEMORY; s++; } } header->smpnum = s; strcpy(header->tracker,"Farandole Composer"); module->setDefaultPanning(); module->postProcessSamples(); return MP_OK; } MilkyTracker-1.02.00/src/milkyplay/LoaderGDM.cpp000066400000000000000000000271711324432207300213270ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * LoaderGDM.cpp * MilkyPlay Module Loader: GDM General Digimusic */ #include "Loaders.h" const char* LoaderGDM::identifyModule(const mp_ubyte* buffer) { // check for .GDM module if (!memcmp(buffer,"GDM\xFE",4)) { return "GDM"; } return NULL; } struct tgdmheader { mp_ubyte sig[4]; // 'GDM˛' 000 mp_ubyte name[32]; // name of the song 004 mp_ubyte composer[32]; // composer? 036 mp_uword returnword; // return word (0x0D0A) 068 mp_ubyte whythis1a; // unknown 070 mp_ubyte mainid[4]; // 'GFMS' 071 mp_ubyte crap[6]; // maybe some time in the future 075 mp_ubyte panset[32]; // Channel panning (0xFF=Unused channel) 081 mp_ubyte mainvol; // Main volume of the song (0-64) 113 mp_ubyte tickspd; // initial tickspeed 114 mp_ubyte bpmspd; // initial bpmspeed 115 mp_uword unknown1; // not known yet 116 mp_uint32 orderlistpos; // adress for orderlist (in the file) 118 mp_ubyte ordnum; // length of the song-1 122 mp_uint32 patternpos; // adress for first pattern (in the file) 123 mp_ubyte patnum; // number of patterns-1 127 mp_uint32 insinfopos; // adress for first instrument (in the file) 128 mp_uint32 samplepos; // adress for first sample (in the file) 132 mp_ubyte insnum; // number of instruments-1 136 mp_ubyte channum; // number of channels mp_ubyte ord[256]; // orderlist }; struct tgdmsample { mp_ubyte name[32]; // name of instrument 000 mp_ubyte filename[13]; // filename with 0 terminator 032 mp_uint32 samplen; // size of sample 045 mp_uint32 loopstart; // loop start 049 mp_uint32 loopend; // loop end+1 053 mp_ubyte unknown1; // not known yet 057 mp_uint32 c4speed; // c4speed of sample 058 mp_ubyte vol; // volume of sample 060 mp_ubyte unknown2; // not known yet 061 }; struct TXMNoteSlot { mp_uword Note,Ins,Eff[4],Op[4]; }; mp_sint32 LoaderGDM::load(XMFileBase& f, XModule* module) { mp_sint32 i,j; module->cleanUp(); // this will make code much easier to read TXMHeader* header = &module->header; TXMInstrument* instr = module->instr; TXMSample* smp = module->smp; TXMPattern* phead = module->phead; // we're already out of memory here if (!phead || !instr || !smp) return MP_OUT_OF_MEMORY; tgdmheader GDMHeader; tgdmsample GDMSmp; f.read(GDMHeader.sig, 1, 4); f.read(header->name, 1, 32); f.read(GDMHeader.composer, 1, 32); GDMHeader.returnword = f.readWord(); GDMHeader.whythis1a = f.readByte(); f.read(GDMHeader.mainid, 1, 4); f.read(GDMHeader.crap, 1, 6); f.read(GDMHeader.panset, 1, 32); GDMHeader.mainvol = f.readByte(); GDMHeader.tickspd = f.readByte(); GDMHeader.bpmspd = f.readByte(); GDMHeader.unknown1 = f.readWord(); GDMHeader.orderlistpos = f.readDword(); GDMHeader.ordnum = f.readByte(); GDMHeader.patternpos = f.readDword(); GDMHeader.patnum = f.readByte(); GDMHeader.insinfopos = f.readDword(); GDMHeader.samplepos = f.readDword(); GDMHeader.insnum = f.readByte(); memcpy(&header->sig, &GDMHeader.sig, 3); strcpy(header->tracker,"..converted.."); header->ordnum = GDMHeader.ordnum + 1; header->patnum = GDMHeader.patnum + 1; header->insnum = GDMHeader.insnum + 1; header->tempo = GDMHeader.tickspd; header->speed = GDMHeader.bpmspd; header->mainvol = XModule::vol64to255(GDMHeader.mainvol); f.seekWithBaseOffset(GDMHeader.orderlistpos); f.read(&header->ord, 1, header->ordnum); i = 0; do { i++; } while (i < sizeof(GDMHeader.panset) && GDMHeader.panset[i]!=0xFF); header->channum = i; f.seekWithBaseOffset(GDMHeader.insinfopos); mp_sint32 s = 0; for (i = 0; i < header->insnum; i++) { f.read(GDMSmp.name, 1, 32); #ifdef VERBOSE printf("%s\n",GDMSmp.name); #endif f.read(GDMSmp.filename, 1, 13); GDMSmp.samplen = f.readDword(); GDMSmp.loopstart = f.readDword(); GDMSmp.loopend = f.readDword() - 1; GDMSmp.unknown1 = f.readByte(); GDMSmp.c4speed = f.readWord(); GDMSmp.vol = f.readByte(); GDMSmp.unknown2 = f.readByte(); if (GDMSmp.samplen>2) { memcpy(instr[i].name, GDMSmp.name, 30); memcpy(smp[s].name, GDMSmp.filename, 12); smp[s].flags = 1; smp[s].pan = 0x80; smp[s].samplen = GDMSmp.samplen; smp[s].loopstart = GDMSmp.loopstart; mp_sint32 looplen = (GDMSmp.loopend - smp[s].loopstart); if (looplen < 0) looplen = 0; smp[s].looplen = looplen; XModule::convertc4spd(GDMSmp.c4speed,&smp[s].finetune,&smp[s].relnote); smp[s].vol = XModule::vol64to255(GDMSmp.vol); if (looplen>2) smp[s].type=1; // looped sample instr[i].samp=1; for (j=0;j<120;j++) instr[i].snum[j] = s; s++; } } header->smpnum = s; f.seekWithBaseOffset(GDMHeader.patternpos); for (i=0;ipatnum;i++) { //cprintf("converting pattern %x/%x\r",PatCnt+1,GDMHeader.patnum); mp_sint32 patsize = f.readWord(); patsize-=2; mp_sint32 slotSize = 2 + 4*2; phead[i].rows = 64; phead[i].effnum = 4; phead[i].channum= (mp_ubyte)header->channum; //phead[i].patternData = new mp_ubyte[phead[i].rows*header->channum*slotSize]; mp_ubyte* tempPattern = new mp_ubyte[phead[i].rows*header->channum*slotSize]; if (tempPattern == NULL) return MP_OUT_OF_MEMORY; // out of memory? //if (phead[i].patternData == NULL) // return MP_OUT_OF_MEMORY; //memset(phead[i].patternData,0,phead[i].rows*header->channum*slotSize); memset(tempPattern,0,phead[i].rows*header->channum*slotSize); if (patsize) { mp_ubyte* packed=new mp_ubyte[patsize*2]; if (packed==NULL) return MP_OUT_OF_MEMORY; memset(packed, 0, patsize*2); f.read(packed, 1, patsize); mp_sint32 offs = 0; mp_sint32 pos = 0; mp_uword b1 = 0; mp_uword b2 = 0; mp_sint32 maxEffects = 0; for (mp_sint32 RowCnt=0;RowCnt<64;RowCnt++) { do { b1=packed[offs++]; if (b1) { pos=(RowCnt*header->channum)+(b1&31); TXMNoteSlot XMSlot; memset(&XMSlot, 0, sizeof(XMSlot)); if ((b1&32)) { b2=packed[offs++]&127; XMSlot.Note=(b2>>4)*12+(b2&0xf); XMSlot.Ins=packed[offs++]; } if ((b1&64)) { mp_ubyte eff = 0; do { eff = packed[offs++]; XMSlot.Eff[eff>>6] = eff&0x1f; XMSlot.Op[eff>>6] = packed[offs++]; if ((eff>>6) + 1 > maxEffects) maxEffects = (eff>>6) + 1; /*if (b1==0x2C) { XMSlot.Vol=b2+0x10; XMSlot.Eff=packed[offs++]&0x1f; XMSlot.Op=packed[offs++]; } else { if (b1==0xC) XMSlot.Vol=b2+0x10; else { XMSlot.Eff=b1&0x1f; XMSlot.Op=b2; } }*/ } while (eff&32); } mp_sint32 dstOffs = pos * slotSize; tempPattern[dstOffs]=(mp_ubyte)XMSlot.Note; tempPattern[dstOffs+1]=(mp_ubyte)XMSlot.Ins; for (mp_sint32 j = 0; j < phead[i].effnum; j++) { switch (XMSlot.Eff[j]) { case 0x00: if (XMSlot.Op[j]) XMSlot.Eff[j]=0x20; break; case 0x01: case 0x02: case 0x03: case 0x04: case 0x05: case 0x06: case 0x07: case 0x09: case 0x0a: case 0x0b: case 0x0d: case 0x0e: break; case 0x0c: XMSlot.Op[j] = XModule::vol64to255(XMSlot.Op[j]); break; // tremor case 0x08: XMSlot.Eff[j] = XMSlot.Op[j] = 0; break; case 0x0f: XMSlot.Eff[j] = 0x1c; break; // arpeggio case 0x10: XMSlot.Eff[j] = 0x20; break; case 0x12: XMSlot.Eff[j] = 0x39; break; case 0x13: XMSlot.Eff[j] = 0x10; XMSlot.Op[j] = XModule::vol64to255(XMSlot.Op[j]); break; // fine vibrato case 0x14: XMSlot.Eff[j] = 0x4a; break; // set bpm case 0x1f: XMSlot.Eff[j] = 0x16; break; default: XMSlot.Eff[j] = XMSlot.Op[j] = 0; } //if ((!XMSlot.Eff[j])&&(XMSlot.Op[j])) XMSlot.Eff[j]=0x20; if (XMSlot.Eff[j]==0xE) { XMSlot.Eff[j]=(XMSlot.Op[j]>>4)+0x30; XMSlot.Op[j]=XMSlot.Op[j]&0xf; } tempPattern[dstOffs+2+j*2]=(mp_ubyte)XMSlot.Eff[j]; tempPattern[dstOffs+2+j*2+1]=(mp_ubyte)XMSlot.Op[j]; } } } while (b1); } delete[] packed; // sort out unused effects mp_sint32 newSlotSize = 2 + maxEffects*2; phead[i].rows = 64; phead[i].effnum = maxEffects; phead[i].channum= (mp_ubyte)header->channum; phead[i].patternData = new mp_ubyte[phead[i].rows*header->channum*newSlotSize]; // out of memory? if (phead[i].patternData == NULL) return MP_OUT_OF_MEMORY; memset(phead[i].patternData,0,phead[i].rows*header->channum*newSlotSize); for (mp_sint32 r = 0; r < phead[i].rows; r++) for (mp_sint32 c = 0; c < phead[i].channum; c++) { mp_sint32 srcOffs = (r * phead[i].channum + c) * slotSize; mp_sint32 dstOffs = (r * phead[i].channum + c) * newSlotSize; // lazyness here memcpy(phead[i].patternData + dstOffs, tempPattern + srcOffs, newSlotSize); } delete[] tempPattern; } } f.seekWithBaseOffset(GDMHeader.samplepos); mp_sint32 result = module->loadModuleSamples(f, XModule::ST_UNSIGNED); if (result != MP_OK) return result; strcpy(header->tracker,"General Digimusic"); module->setDefaultPanning(); module->postProcessSamples(); return MP_OK; } MilkyTracker-1.02.00/src/milkyplay/LoaderIMF.cpp000066400000000000000000000317751324432207300213400ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * LoaderIMF.cpp * MilkyPlay Module Loader: Imago Orpheus * * Much thanks to the MikMod team for providing lots of information about the format * * -------------------------------- * Version History: * -------------------------------- * 01/24/05: Started... */ #include "Loaders.h" //#define VERBOSE const char* LoaderIMF::identifyModule(const mp_ubyte* buffer) { // check for .IMF module first if (!memcmp(buffer+0x3c,"IM10",4)) { return "IMF"; } // this is not an .IMF return NULL; } struct IMFChannel { char name[12]; mp_ubyte chorus, reverb, panning, status; }; struct IMFInstrument { char name[32]; mp_ubyte snum[120]; mp_uword volenv[16*2]; mp_uword panenv[16*2]; mp_uword pitenv[16*2]; mp_ubyte volpts; mp_ubyte volsus; mp_ubyte volbeg; mp_ubyte volend; mp_ubyte volflg; mp_ubyte panpts; mp_ubyte pansus; mp_ubyte panbeg; mp_ubyte panend; mp_ubyte panflg; mp_ubyte pitpts; mp_ubyte pitsus; mp_ubyte pitbeg; mp_ubyte pitend; mp_ubyte pitflg; mp_uword volfade; mp_uword numsmp; char signature[4]; }; struct IMFSample { char name[13]; mp_uint32 length; mp_uint32 loopstart; mp_uint32 loopend; mp_uint32 samplerate; mp_ubyte volume; mp_ubyte pan; mp_ubyte flags; }; static void convertEffect(mp_ubyte& eff, mp_ubyte& op) { switch (eff) { case 0x01: // set speed eff = 0x1C; break; case 0x02: // set tempo eff = 0x16; break; case 0x03: // portamento to note break; case 0x04: // porta to note + volslide eff = 0x05; break; case 0x05: // vibrato eff = 0x04; break; case 0x06: // vibrato + volslide break; case 0x07: // fine vibrato eff = 0x4A; break; case 0x08: // tremolo eff = 0x07; break; case 0x09: // argpeggio eff = 0x20; break; case 0x0A: // set panning eff = 0x08; break; case 0x0B: // panning slide eff = 0x19; break; case 0x0C: // set volume op = XModule::vol64to255(op); break; case 0x0D: // volume slide eff = 0x0A; break; case 0x0E: // fine volume slide if (op) { if (op>>4) { eff = 0x49; op = 0x0f | (op & 0xF0); } else { eff = 0x49; op = 0xf0 | (op & 0xF); } } else eff = 0x49; break; case 0x0F: // set finetune eff = 0x35; break; case 0x12: // porta up eff = 0x01; break; case 0x13: // porta down eff = 0x02; break; case 0x14: // fine porta up eff = 0x41; break; case 0x15: // fine porta down eff = 0x42; break; case 0x18: // set sample offset eff = 0x09; break; case 0x1A: // set keyoff eff = 0x51; break; case 0x1B: // multi retrig break; case 0x1D: // pos jump eff = 0x0B; break; case 0x1E: // pattern break eff = 0x0D; break; case 0x1F: // set mainvol eff = 0x10; op = XModule::vol64to255(op); break; case 0x20: // mainvolslide eff = 0x11; break; case 0x21: switch (op >> 4) { case 0x0A: // loop eff = 0x36; op&=0x0f; break; case 0x0B: // pattern delay eff = 0x3e; op&=0x0f; break; case 0x0C: // note cut eff = 0x3c; op&=0x0f; break; case 0x0D: // note cut eff = 0x3d; op&=0x0f; break; default: #ifdef VERBOSE printf("Missing IMF Sub-Effect: %x, %x\n", op>>4, op&0xf); #endif eff = op = 0; break; } case 0: op = 0; break; default: #ifdef VERBOSE printf("Missing IMF Effect: %x, %x\n", eff, op); #endif eff = op = 0; } } mp_sint32 LoaderIMF::load(XMFileBase& f, XModule* module) { mp_sint32 i,j,k; module->cleanUp(); // this will make code much easier to read TXMHeader* header = &module->header; TXMInstrument* instr = module->instr; TXMSample* smp = module->smp; TXMPattern* phead = module->phead; // we're already out of memory here if (!phead || !instr || !smp) return MP_OUT_OF_MEMORY; memcpy(header->sig, "IM10", 4); f.read(header->name, 1, 32); header->ordnum = f.readWord(); header->patnum = f.readWord(); header->insnum = f.readWord(); header->freqtab = f.readWord() & 1; if(header->ordnum > MP_MAXORDERS || header->patnum > 256 || header->insnum > 256) return MP_LOADER_FAILED; f.readDword(); f.readDword(); header->tempo = f.readByte(); header->speed = f.readByte(); header->mainvol = XModule::vol64to255(f.readByte()); header->flags = XModule::MODULE_ST3DUALCOMMANDS; f.seekWithBaseOffset(64); IMFChannel channels[32]; for (i = 0; i < 32; i++) { f.read(channels[i].name, 1, 12); channels[i].chorus = f.readByte(); channels[i].reverb = f.readByte(); channels[i].panning = f.readByte(); channels[i].status = f.readByte(); } // ripped from MikMod loader :) if (!channels[0].status) { for (i = 1; i < 16; i++) if (channels[i].status!=1) break; if (i==16) for (i=1;i<16;i++) channels[i].status=0; } header->channum = 32; while (channels[header->channum-1].status == 2 && header->channum > 1) header->channum--; #ifdef VERBOSE for (i = 0; i < header->channum; i++) { printf("Channel: %i\n", channels[i].status); } #endif f.read(header->ord, 1, 256); for (i = 0; i < 256; i++) if (header->ord[i] == 255) header->ord[i]--; // we want patterns for (i = 0; i < header->patnum; i++) { if (i == header->ord[2]) { i = header->ord[2]; } mp_sint32 size = f.readWord() - 4; mp_sint32 rows = f.readWord(); if (size < 0 || rows > 256) return MP_LOADER_FAILED; phead[i].rows = rows; phead[i].effnum = 2; phead[i].channum = (mp_ubyte)header->channum; phead[i].patternData = new mp_ubyte[phead[i].rows*header->channum * (phead[i].effnum * 2 + 2)]; #ifdef VERBOSE printf("%i, %x, %i\n", i, f.posWithBaseOffset(), phead[i].rows); #endif // out of memory? if (phead[i].patternData == NULL) { return MP_OUT_OF_MEMORY; } memset(phead[i].patternData,0,phead[i].rows*header->channum * (phead[i].effnum * 2 + 2)); if (size) { mp_ubyte* packed = new mp_ubyte[size]; f.read(packed, 1, size); mp_sint32 index = 0; mp_uint32 row = 0; while (index= 0xa0) { #ifdef VERBOSE printf("blabla"); #endif note = XModule::NOTE_OFF; } else { note = ((slot[0]>>4)*12+(slot[0]&0x0f))+1; } } slot[0] = note; convertEffect(slot[2], slot[3]); convertEffect(slot[4], slot[5]); memcpy(phead[i].patternData + o, slot, sizeof(slot)); } } delete[] packed; } } mp_sint32 vEnvIdx = 0; mp_sint32 pEnvIdx = 0; // i think pitch envelope is pretty much AMS vibrato envelope => no it's not :( //mp_sint32 vibEnvIdx = 0; mp_sint32 s = 0; for (i = 0; i < header->insnum; i++) { IMFInstrument ins; f.read(ins.name, 1, 32); f.read(ins.snum, 1, 120); f.readDword(); f.readDword(); f.readWords(ins.volenv, 16*2); f.readWords(ins.panenv, 16*2); f.readWords(ins.pitenv, 16*2); ins.volpts = f.readByte(); ins.volsus = f.readByte(); ins.volbeg = f.readByte(); ins.volend = f.readByte(); ins.volflg = f.readByte(); f.readByte(); f.readByte(); f.readByte(); ins.panpts = f.readByte(); ins.pansus = f.readByte(); ins.panbeg = f.readByte(); ins.panend = f.readByte(); ins.panflg = f.readByte(); f.readByte(); f.readByte(); f.readByte(); ins.pitpts = f.readByte(); ins.pitsus = f.readByte(); ins.pitbeg = f.readByte(); ins.pitend = f.readByte(); ins.pitflg = f.readByte(); f.readByte(); f.readByte(); f.readByte(); ins.volfade = f.readWord(); ins.numsmp = f.readWord(); f.read(ins.signature, 1, 4); instr[i].samp = ins.numsmp; for (j = 0; j < 120; j++) instr[i].snum[j] = ins.snum[j]+s; memcpy(instr[i].name, ins.name, 32); if (ins.volflg) { vEnvIdx++; TEnvelope venv; memset(&venv,0,sizeof(venv)); for (k = 0; k < 16; k++) { venv.env[k][0] = ins.volenv[k*2]; venv.env[k][1] = ins.volenv[k*2+1] << 2; } venv.num = ins.volpts; venv.sustain = ins.volsus; venv.loops = ins.volbeg; venv.loope = ins.volend; venv.type = ins.volflg; if (!module->addVolumeEnvelope(venv)) return MP_OUT_OF_MEMORY; } if (ins.panflg) { pEnvIdx++; TEnvelope penv; memset(&penv,0,sizeof(penv)); for (k = 0; k < 16; k++) { penv.env[k][0] = ins.panenv[k*2]; penv.env[k][1] = ins.panenv[k*2+1]; } penv.num = ins.panpts; penv.sustain = ins.pansus; penv.loops = ins.panbeg; penv.loope = ins.panend; penv.type = ins.panflg; if (!module->addPanningEnvelope(penv)) return MP_OUT_OF_MEMORY; } /*if (ins.pitflg) { vibEnvIdx++; TEnvelope vibenv; memset(&vibenv,0,sizeof(vibenv)); for (k = 0; k < 16; k++) { vibenv.env[k][0] = ins.pitenv[k*2]; vibenv.env[k][1] = 256-ins.pitenv[k*2+1]; } vibenv.num = ins.pitpts; vibenv.sustain = ins.pitsus; vibenv.loops = ins.pitbeg; vibenv.loope = ins.pitend; vibenv.type = ins.pitflg + (2<<6); if (!module->addVibratoEnvelope(vibenv)) return MP_OUT_OF_MEMORY; } printf("%i\n",ins.pitflg);*/ for (j = 0; j < ins.numsmp; j++) { IMFSample samp; f.read(samp.name, 1, 13); f.readByte(); f.readByte(); f.readByte(); samp.length = f.readDword(); samp.loopstart = f.readDword(); samp.loopend = f.readDword(); samp.samplerate = f.readDword(); samp.volume = f.readByte(); samp.pan = f.readByte(); mp_ubyte buffer[14]; f.read(buffer, 1, 14); samp.flags = f.readByte(); f.read(buffer, 1, 15); memcpy(smp[s].name, samp.name, 13); smp[s].samplen = samp.length; smp[s].loopstart = samp.loopstart; smp[s].looplen = samp.loopend - samp.loopstart; smp[s].vol = XModule::vol64to255(samp.volume); smp[s].flags = 1; smp[s].pan = samp.pan; smp[s].volfade = ins.volfade<<1; if (ins.volflg) smp[s].venvnum = vEnvIdx; if (ins.panflg) smp[s].penvnum = pEnvIdx; /*if (ins.pitflg) smp[s].vibenvnum = vibEnvIdx;*/ XModule::convertc4spd(samp.samplerate, &smp[s].finetune, &smp[s].relnote); if (samp.flags&0x1) smp[s].type = 1; if (samp.flags&0x2) smp[s].type = 2; if (samp.flags&0x8) smp[s].flags |= 2; if (samp.flags&0x4) smp[s].type |= 16; if (smp[s].type & 16) { smp[s].samplen>>=1; smp[s].loopstart>>=1; smp[s].looplen>>=1; } mp_sint32 result = module->loadModuleSample(f, s); if (result != MP_OK) return result; s++; } } strcpy(header->tracker,"Imago Orpheus"); header->volenvnum = vEnvIdx; header->panenvnum = pEnvIdx; //header->vibenvnum = vibEnvIdx; header->smpnum = s; module->setDefaultPanning(); module->postProcessSamples(); return MP_OK; } MilkyTracker-1.02.00/src/milkyplay/LoaderIT.cpp000066400000000000000000000645611324432207300212400ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * LoaderIT.cpp * MilkyPlay Module Loader: Impulse Tracker */ #include "Loaders.h" const char* LoaderIT::identifyModule(const mp_ubyte* buffer) { // check for .IT module if (!memcmp(buffer,"IMPM",4)) { return "IT"; } // this is not an .IT return NULL; } struct ITEnvelope { mp_ubyte Flg; mp_ubyte Num; mp_ubyte LpB; mp_ubyte LpE; mp_ubyte SLB; mp_ubyte SLE; mp_sbyte Nodes[75]; mp_ubyte unused; }; struct ITInstrument { char sig[4]; char dosName[12]; mp_ubyte unused1; mp_ubyte NNA; mp_ubyte DCT; mp_ubyte DCA; mp_uword FadeOut; mp_ubyte PPS; mp_ubyte PPCxx; mp_ubyte GbV; mp_ubyte DfP; mp_ubyte RV; mp_ubyte RP; mp_uword TrkVers; mp_ubyte NoS; mp_ubyte unused2; char name[26]; mp_ubyte IFC; mp_ubyte IFR; mp_ubyte MCh; mp_ubyte MPr; mp_uword MIDIBnk; mp_ubyte snum[240]; ITEnvelope volEnv; ITEnvelope panEnv; ITEnvelope pitchEnv; }; struct ITSample { char sig[4]; char dosName[12]; mp_ubyte unused1; mp_ubyte GvL; mp_ubyte Flg; mp_ubyte Vol; char name[26]; mp_ubyte Cvt; mp_ubyte DfP; mp_dword Length; mp_dword LoopBeg; mp_dword LoopEnd; mp_dword C5Speed; mp_dword SusLBeg; mp_dword SusLEnd; mp_dword SmpPoint; mp_ubyte ViS; mp_ubyte ViD; mp_ubyte ViR; mp_ubyte ViT; }; static void readITEnvelope(XMFileBase& f, ITEnvelope& itEnv) { itEnv.Flg = f.readByte(); itEnv.Num = f.readByte(); itEnv.LpB = f.readByte(); itEnv.LpE = f.readByte(); itEnv.SLB = f.readByte(); itEnv.SLE = f.readByte(); f.read(itEnv.Nodes, 1, 75); itEnv.unused = f.readByte(); } static void convertITEnvelope(TEnvelope& outEnv, const ITEnvelope& itEnv, mp_sword center = 0) { memset(&outEnv, 0, sizeof(TEnvelope)); outEnv.type = (itEnv.Flg & 1) | (((itEnv.Flg>>1) & 1)<<2) | ((itEnv.SLB == itEnv.SLE) ? (((itEnv.Flg>>2) & 1)<<1) : (((itEnv.Flg>>2) & 1)<<4)); outEnv.num = itEnv.Num; outEnv.sustain = itEnv.SLB; outEnv.susloope = itEnv.SLE; outEnv.loops = itEnv.LpB; outEnv.loope = itEnv.LpE; for (mp_sint32 i = 0; i < outEnv.num; i++) { outEnv.env[i][0] = LittleEndian::GET_WORD(itEnv.Nodes+(i*3+1)); outEnv.env[i][1] = ((mp_sword)itEnv.Nodes[i*3] + center) << 2; } } static void replace(char* str, mp_uint32 size, char from, char to) { for (mp_uint32 i = 0; i < size; i++) if (str[i] == from) str[i] = to; } mp_sint32 LoaderIT::load(XMFileBase& f, XModule* module) { mp_sint32 i,j; module->cleanUp(); // this will make code much easier to read TXMHeader* header = &module->header; TXMInstrument* instr = module->instr; TXMSample* smp = module->smp; TXMPattern* phead = module->phead; // we're already out of memory here if (!phead || !instr || !smp) return MP_OUT_OF_MEMORY; f.read(header->sig, 1, 4); f.read(header->name, 1, 26); f.readWord(); mp_uword ordnum = f.readWord(); if(ordnum > MP_MAXORDERS) return MP_LOADER_FAILED; header->ordnum = ordnum; header->insnum = f.readWord(); header->smpnum = f.readWord(); header->patnum = f.readWord(); mp_uword cwt = f.readWord(); mp_uword cmwt = f.readWord(); mp_uword flags = f.readWord(); mp_uword special = f.readWord(); header->freqtab = (flags >> 3) & 1; header->mainvol = XModule::vol128to255(f.readByte()); header->flags = XModule::MODULE_ITNOTEOFF | XModule::MODULE_ST3DUALCOMMANDS | XModule::MODULE_ST3NEWINSTRUMENT | XModule::MODULE_ITTEMPOSLIDE | XModule::MODULE_XMPORTANOTEBUFFER; if (!(flags & 16)) header->flags |= XModule::MODULE_ITNEWEFFECTS; if (!(flags & 32)) header->flags |= XModule::MODULE_ITNEWGXX; else header->flags |= XModule::MODULE_ITLINKPORTAMEM; header->relnote = -12; // skip mixer volume f.readByte(); header->tempo = f.readByte(); header->speed = f.readByte(); // skip Sep f.readByte(); // skip PWD f.readByte(); mp_uword messageLength = f.readWord(); mp_dword messageOffset = f.readDword(); // skip reserved f.readDword(); mp_ubyte chnPan[64]; f.read(chnPan, 1, 64); mp_ubyte chnVol[64]; f.read(chnVol, 1, 64); // just assume the order list is smaller than 256 entries mp_ubyte orders[256]; f.read(orders, 1, header->ordnum); j = 0; for (i = 0; i < header->ordnum; i++) { if (orders[i] == 255) break; header->ord[j++] = orders[i]; } header->ordnum = j; // final songlength mp_dword insOffs[256]; mp_dword smpOffs[256]; mp_dword patOffs[256]; // creating some nice potential buffer overflows here f.readDwords(insOffs, header->insnum); f.readDwords(smpOffs, header->smpnum); f.readDwords(patOffs, header->patnum); // read instruments for (i = 0; i < header->insnum; i++) { f.seekWithBaseOffset(insOffs[i]); ITInstrument ins; f.read(ins.sig, 1, 4); // should match "IMPI" if (LittleEndian::GET_DWORD(ins.sig) != 0x49504D49) return MP_LOADER_FAILED; f.read(ins.dosName, 1, 12); // 0x00? ins.unused1 = f.readByte(); // enable note remapping instr[i].flags = TXMInstrument::IF_ITNOTEREMAPPING | TXMInstrument::IF_ITFADEOUT | TXMInstrument::IF_ITENVELOPES | TXMInstrument::IF_ITGOBALINSVOL; if (cmwt >= 0x200) { ins.NNA = f.readByte(); ins.DCT = f.readByte(); ins.DCA = f.readByte(); // sanity checks if (ins.NNA > 3) ins.NNA = 0; if (ins.DCT > 3) ins.DCT = 0; if (ins.DCA > 3) ins.DCA = 0; // fill in NNA stuff instr[i].flags |= (((mp_uword)ins.NNA) << 4); instr[i].flags |= (((mp_uword)ins.DCT) << 6); instr[i].flags |= (((mp_uword)ins.DCA) << 8); ins.FadeOut = f.readWord(); mp_sint32 fade = (mp_sint32)ins.FadeOut*64; if (fade > 65535) fade = 65535; instr[i].volfade = fade; ins.PPS = f.readByte(); ins.PPCxx = f.readByte(); ins.GbV = f.readByte(); instr[i].res = XModule::vol128to255(ins.GbV); ins.DfP = f.readByte(); ins.RV = f.readByte(); ins.RP = f.readByte(); ins.TrkVers = f.readWord(); ins.NoS = f.readByte(); // x? ins.unused2 = f.readByte(); f.read(ins.name, 1, 26); replace(ins.name, 26, '\0', ' '); memcpy(instr[i].name, ins.name, 26); ins.IFC = f.readByte(); ins.IFR = f.readByte(); ins.MCh = f.readByte(); ins.MPr = f.readByte(); ins.MIDIBnk = f.readWord(); instr[i].ifc = ins.IFC; instr[i].ifr = ins.IFR; //printf("%i, %i\n", ins.IFC, ins.IFR); f.read(ins.snum, 1, 240); for (j = 0; j < 120; j++) { instr[i].snum[j] = -1; instr[i].notemap[j] = 0xff; } mp_ubyte sampleTable[256]; memset(sampleTable, 0, sizeof(sampleTable)); for (j = 0; j < 120; j++) { if (ins.snum[j*2] != 0xff) { mp_sint32 index = (mp_sword)ins.snum[j*2+1]-1; instr[i].snum[j] = index; instr[i].notemap[j] = ins.snum[j*2]; //if ((j - 12) >= 0) // instr[i].snum[j-12] = index; //if ((j - 12) >= 0 && (ins.snum[j*2] >= 12)) // instr[i].notemap[j-12] = ins.snum[j*2] - 12; if (index >= 0 && index < 256) sampleTable[index] = 1; } } mp_sint32 smpNum = 0; for (j = 0; j < 256; j++) if (sampleTable[j]) smpNum++; instr[i].samp = smpNum; readITEnvelope(f, ins.volEnv); readITEnvelope(f, ins.panEnv); readITEnvelope(f, ins.pitchEnv); // convert envelope TEnvelope venv, penv, pitchenv; convertITEnvelope(venv, ins.volEnv); if (!module->addVolumeEnvelope(venv)) { return MP_OUT_OF_MEMORY; } instr[i].venvnum = ++header->volenvnum; convertITEnvelope(penv, ins.panEnv, 32); if (!module->addPanningEnvelope(penv)) { return MP_OUT_OF_MEMORY; } instr[i].penvnum = ++header->panenvnum; convertITEnvelope(pitchenv, ins.pitchEnv, 32); if (ins.pitchEnv.Flg & 128) pitchenv.type |= 128; if (!module->addPitchEnvelope(pitchenv)) { return MP_OUT_OF_MEMORY; } instr[i].pitchenvnum = ++header->pitchenvnum; } else { // Deal with old format ins.volEnv.Flg = f.readByte(); ins.volEnv.LpB = f.readByte(); ins.volEnv.LpE = f.readByte(); ins.volEnv.SLB = f.readByte(); ins.volEnv.SLE = f.readByte(); f.readWord(); ins.FadeOut = f.readWord(); mp_sint32 fade = (mp_sint32)ins.FadeOut*128; if (fade > 65535) fade = 65535; instr[i].volfade = fade; instr[i].res = 255; ins.NNA = f.readByte(); ins.DCT = f.readByte(); // sanity checks if (ins.NNA > 3) ins.NNA = 0; if (ins.DCT > 3) ins.DCT = 0; // fill in NNA stuff instr[i].flags |= (((mp_uword)ins.NNA) << 4); instr[i].flags |= (((mp_uword)ins.DCT) << 6); ins.TrkVers = f.readWord(); ins.NoS = f.readByte(); // x? ins.unused2 = f.readByte(); f.read(ins.name, 1, 26); replace(ins.name, 26, '\0', ' '); memcpy(instr[i].name, ins.name, 26); f.readDword(); f.readWord(); f.read(ins.snum, 1, 240); mp_ubyte envelope[200]; f.read(envelope, 1, 200); mp_ubyte nodeData[25*2]; f.read(nodeData, 1, 25*2); for (j = 0; j < 25; j++) { if (nodeData[j*2] == 0xff) break; ins.volEnv.Nodes[j*3] = nodeData[j*2+1]; ins.volEnv.Nodes[j*3+1] = nodeData[j*2]; ins.volEnv.Nodes[j*3+2] = 0; } ins.volEnv.Num = j; // convert envelope TEnvelope venv; convertITEnvelope(venv, ins.volEnv); if (!module->addVolumeEnvelope(venv)) { return MP_OUT_OF_MEMORY; } instr[i].venvnum = ++header->volenvnum; for (j = 0; j < 120; j++) { instr[i].snum[j] = -1; instr[i].notemap[j] = 0xff; } mp_ubyte sampleTable[256]; memset(sampleTable, 0, sizeof(sampleTable)); for (j = 0; j < 120; j++) { if (ins.snum[j*2] != 0xff) { mp_sint32 index = (mp_sword)ins.snum[j*2+1]-1; instr[i].snum[j] = index; instr[i].snum[j] = index; instr[i].notemap[j] = ins.snum[j*2]; //if ((j - 12) >= 0) // instr[i].snum[j-12] = index; //if ((j - 12) >= 0 && (ins.snum[j*2] >= 12)) // instr[i].notemap[j-12] = ins.snum[j*2] - 12; if (index >= 0 && index < 256) sampleTable[index] = 1; } } mp_sint32 smpNum = 0; for (j = 0; j < 256; j++) if (sampleTable[j]) smpNum++; instr[i].samp = smpNum; } //printf("%i\n", instr[i].flags); } if (header->smpnum > MP_MAXSAMPLES) header->smpnum = MP_MAXSAMPLES; if (header->smpnum > 256) header->smpnum = 256; // read samples for (i = 0; i < header->smpnum; i++) { f.seekWithBaseOffset(smpOffs[i]); ITSample itSmp; f.read(itSmp.sig, 1, 4); // should match "IMPS" if (LittleEndian::GET_DWORD(itSmp.sig) != 0x53504D49) return MP_LOADER_FAILED; f.read(itSmp.dosName, 1, 12); // 0x00? itSmp.unused1 = f.readByte(); itSmp.GvL = f.readByte(); itSmp.Flg = f.readByte(); itSmp.Vol = f.readByte(); f.read(itSmp.name, 1, 26); replace(itSmp.name, 26, '\0', ' '); memcpy(smp[i].name, itSmp.name, 26); // sample mode, don't use instruments if (!(flags & 4)) { instr[i].samp = 1; for (j = 0; j < 120; j++) instr[i].snum[j] = i; memcpy(instr[i].name, itSmp.name, 26); } itSmp.Cvt = f.readByte(); itSmp.DfP = f.readByte(); itSmp.Length = f.readDword(); itSmp.LoopBeg = f.readDword(); itSmp.LoopEnd = f.readDword(); itSmp.C5Speed = f.readDword(); itSmp.SusLBeg = f.readDword(); itSmp.SusLEnd = f.readDword(); itSmp.SmpPoint = f.readDword(); itSmp.ViS = f.readByte(); itSmp.ViD = f.readByte(); itSmp.ViR = f.readByte(); itSmp.ViT = f.readByte(); switch (itSmp.ViT) { case 0: // = Sine wave smp[i].vibtype = 0; break; case 1: // = Ramp down smp[i].vibtype = 2; break; case 2: // = Square wave smp[i].vibtype = 1; break; case 3: // = Random (speed is irrelevant) default: smp[i].vibtype = 0; break; } smp[i].vibsweep = itSmp.ViR; smp[i].vibdepth = itSmp.ViD<<1; smp[i].vibrate = itSmp.ViS; smp[i].vol = XModule::vol64to255(itSmp.Vol); smp[i].pan = (itSmp.DfP & 0x80) ? 0x80 : XModule::vol127to255(itSmp.DfP & 0x7f); smp[i].flags = (itSmp.DfP & 0x80) ? 3 : 1; // res field of sample becomes global sample volume // and use IT auto vibrato instead of XM one smp[i].flags |= (8+16); smp[i].res = XModule::vol64to255(itSmp.GvL); smp[i].samplen = itSmp.Length; smp[i].loopstart = itSmp.LoopBeg; mp_sint32 looplen = ((mp_sint32)itSmp.LoopEnd - (mp_sint32)smp[i].loopstart); if (looplen < 0) looplen = 0; smp[i].looplen = looplen; smp[i].type |= (itSmp.Flg & 2) ? 16 : 0; smp[i].type |= (itSmp.Flg & 80) == 80 ? 2 : ((itSmp.Flg & 80) == 16 ? 1 : 0); XModule::convertc4spd(itSmp.C5Speed, &smp[i].finetune, &smp[i].relnote); f.seekWithBaseOffset(itSmp.SmpPoint); if ((itSmp.Flg & 1)) { if (!(smp[i].type&16)) { smp[i].sample = (mp_sbyte*)module->allocSampleMem(smp[i].samplen); if (smp[i].sample == NULL) { return MP_OUT_OF_MEMORY; } if (itSmp.Flg & 8) { if (!module->loadSample(f, smp[i].sample, smp[i].samplen, smp[i].samplen, (itSmp.Cvt & 4) ? XModule::ST_PACKING_IT215 : XModule::ST_PACKING_IT)) { return MP_OUT_OF_MEMORY; } } else if (!module->loadSample(f,smp[i].sample,smp[i].samplen,smp[i].samplen, (itSmp.Cvt & 1) ? XModule::ST_DEFAULT : XModule::ST_UNSIGNED)) { return MP_OUT_OF_MEMORY; } } else { smp[i].sample = (mp_sbyte*)module->allocSampleMem(smp[i].samplen*2); if (smp[i].sample == NULL) { return MP_OUT_OF_MEMORY; } if (itSmp.Flg & 8) { if (!module->loadSample(f, smp[i].sample, smp[i].samplen, smp[i].samplen, (itSmp.Cvt & 4) ? (XModule::ST_PACKING_IT215 | XModule::ST_16BIT) : (XModule::ST_PACKING_IT | XModule::ST_16BIT))) { return MP_OUT_OF_MEMORY; } } else if (!module->loadSample(f,smp[i].sample,smp[i].samplen<<1,smp[i].samplen, XModule::ST_16BIT | ((itSmp.Cvt & 1) ? XModule::ST_DEFAULT : XModule::ST_UNSIGNED))) { return MP_OUT_OF_MEMORY; } } } } if (!(flags & 4)) header->insnum = header->smpnum; /*else { for (i = 0; i < header->insnum; i++) { if (instr[i].samp) { for (j = 0; j < 120; j++) { if (instr[i].snum[j] >= 0) { smp[instr[i].snum[j]].venvnum = i+1; smp[instr[i].snum[j]].penvnum = i+1; } } } } }*/ // read patterns => find number of used channels for (i = 0; i < header->patnum; i++) { if (patOffs[i]) { f.seekWithBaseOffset(patOffs[i]); mp_sint32 length = f.readWord(); mp_sint32 rows = f.readWord(); f.readDword(); mp_ubyte* buffer = new mp_ubyte[length]; f.read(buffer, 1, length); j = 0; mp_ubyte maskVariable = 0; mp_ubyte previousMaskVariable[256]; memset(previousMaskVariable, 0, sizeof(previousMaskVariable)); while (j < length) { mp_ubyte channelVariable = buffer[j++]; if (channelVariable) { mp_ubyte channel = (channelVariable-1) & 63; if (channel+1 >= header->channum) header->channum = channel+1; if (channelVariable & 128) maskVariable = previousMaskVariable[channel] = buffer[j++]; else maskVariable = previousMaskVariable[channel]; if (maskVariable & 1) j++; if (maskVariable & 2) j++; if (maskVariable & 4) j++; if (maskVariable & 8) j+=2; } } delete[] buffer; } } // read patterns for (i = 0; i < header->patnum; i++) { /*if (i == 6) { int k = 0; k++; k--; }*/ if (patOffs[i]) { f.seekWithBaseOffset(patOffs[i]); mp_sint32 length = f.readWord(); phead[i].rows = f.readWord(); f.readDword(); phead[i].effnum = 2; phead[i].channum = (mp_ubyte)header->channum; phead[i].patternData = new mp_ubyte[phead[i].rows*header->channum*6]; // out of memory? if (phead[i].patternData == NULL) return MP_OUT_OF_MEMORY; memset(phead[i].patternData, 0, phead[i].rows*header->channum*6); mp_ubyte* buffer = new mp_ubyte[length]; f.read(buffer, 1, length); j = 0; mp_ubyte maskVariable = 0; mp_ubyte previousMaskVariable[256]; mp_ubyte previousNote[256]; mp_ubyte previousInstrument[256]; mp_ubyte previousVolume[256]; mp_ubyte previousCommand[256]; mp_ubyte previousOperand[256]; memset(previousMaskVariable, 0, sizeof(previousMaskVariable)); memset(previousNote, 0, sizeof(previousNote)); memset(previousInstrument, 0, sizeof(previousInstrument)); memset(previousVolume, 0, sizeof(previousVolume)); memset(previousCommand, 0, sizeof(previousCommand)); memset(previousOperand, 0, sizeof(previousOperand)); mp_sint32 row = 0; while (j < length && row < phead[i].rows) { mp_ubyte channelVariable = buffer[j++]; if (channelVariable && row < phead[i].rows) { mp_sint32 channel = (channelVariable-1) & 63; ASSERT(channel < phead[i].channum); ASSERT(row < phead[i].rows); mp_ubyte* slot = phead[i].patternData + (row*header->channum*6) + channel*6; if (channel+1 >= header->channum) header->channum = channel+1; if (channelVariable & 128) maskVariable = previousMaskVariable[channel] = buffer[j++]; else maskVariable = previousMaskVariable[channel]; mp_sint32 note = -1, instrument = -1, volume = -1, command = -1, operand = -1; if (maskVariable & 1) note = previousNote[channel] = buffer[j++]; if (maskVariable & 2) instrument = previousInstrument[channel] = buffer[j++]; if (maskVariable & 4) volume = previousVolume[channel] = buffer[j++]; if (maskVariable & 8) { command = previousCommand[channel] = buffer[j++]; operand = previousOperand[channel] = buffer[j++]; } if (maskVariable & 16) note = previousNote[channel]; if (maskVariable & 32) instrument = previousInstrument[channel]; if (maskVariable & 64) volume = previousVolume[channel]; if (maskVariable & 128) { command = previousCommand[channel]; operand = previousOperand[channel]; } if (note >= 0) { if (note == 255) slot[0] = XModule::NOTE_OFF; // key off else if (note == 254) slot[0] = 122; // note cut else if (note >= 12*10) slot[0] = XModule::NOTE_FADE; // fade out else if (note < 12*10) { note++; //note -= 11; if (note >= 1) slot[0] = note; } } if (instrument >= 1) slot[1] = instrument; if (volume >= 0) { // convert volume if (volume <= 64) { slot[2] = 0x0C; slot[3] = XModule::vol64to255(volume); } // convert Fine volume up else if (volume >= 65 && volume <= 74) { mp_ubyte op = (volume - 65); slot[2] = 0x49; slot[3] = op ? ((op << 4) | 0xF) : 0; } // convert Fine volume down else if (volume >= 75 && volume <= 84) { mp_ubyte op = (volume - 75); slot[2] = 0x49; slot[3] = op ? (op | 0xF0) : 0; } // convert volume up else if (volume >= 85 && volume <= 94) { mp_ubyte op = (volume - 85); slot[2] = 0x49; slot[3] = op ? (op << 4) : 0; } // convert volume down else if (volume >= 95 && volume <= 104) { mp_ubyte op = (volume - 95); slot[2] = 0x49; slot[3] = op ? op : 0; } // convert pitch slide down else if (volume >= 105 && volume <= 114) { slot[2] = 0x48; slot[3] = ((volume - 105) << 4); } // convert pitch slide up else if (volume >= 115 && volume <= 124) { slot[2] = 0x47; slot[3] = (volume - 115); } // convert panning else if (volume >= 128 && volume <= 192) { slot[2] = 0x08; slot[3] = XModule::vol64to255(volume-128); } // portamento to note else if (volume >= 193 && volume <= 202) { static const mp_ubyte portaTab[] = {1, 4, 8, 16, 32, 64, 96, 128, 255}; slot[2] = 0x03; slot[3] = portaTab[volume-193]; } // vibrato else if (volume >= 203 && volume <= 212) { slot[2] = 0x04; slot[3] = volume - 203; } } if (command >= 1) { mp_ubyte op = operand, nEff = 0, nOp = 0, eff; switch (command) { // Axx Set speed case 0x01: nEff = 0x1C; nOp = op; break; // Bxx Jump to Order case 0x02: nEff = 0x0B; nOp = op; break; // Cxx Break to Row case 0x03: nEff = 0x0D; nOp = op; break; // Dxx Volume slide down case 0x04: nEff = 0x49; nOp = op; break; // Exx porta down case 0x05: nEff = 0x48; nOp = op; break; // Fxx porta up case 0x06: nEff = 0x47; nOp = op; break; // Gxx tone porta case 0x07: nEff = 0x03; nOp = op; break; // Hxy Vibrato case 0x08: nEff = 0x04; nOp = op; break; // Ixy Tremor, ontime x, offtime y case 0x09: nEff = 0x1D; nOp = op; break; // Jxy arpeggio case 0x0A: nEff = 0x20; nOp = op; break; // Kxy vibrato & volslide case 0x0B: nEff = 0x06; nOp = op; break; // Lxx tone porta & volslide case 0x0C: nEff = 0x05; nOp = op; break; // Mxx set channel volume case 0x0D: if (nOp <= 64) { nEff = 0x50; nOp = XModule::vol64to255(op); } break; // Nxx channel volslide case 0x0E: nEff = 0x5A; nOp = op; break; // Oxx set sample offset case 0x0F: nEff = 0x09; nOp = op; break; // Pxx panning slide (TO-DO) case 0x10: nEff = 0x5B; nOp = op; break; // Qxx retrig case 0x11: nEff = 0x1B; nOp = op; break; // Rxy tremolo case 0x12: nEff = 0x07; nOp = op; break; // various subeffects case 0x13: eff = op>>4; op&=0xf; switch (eff) { case 0x0: break; // past note actions/envelope trigger control etc. case 0x7: nEff = 0x1E; nOp = 0x70 + op; break; // set panning case 0x8: nEff = 0x08; nOp = XModule::pan15to255(op); break; // set high sample offset case 0xA: nEff = 0x1E; nOp = 0xF0 + op; break; // pattern loop case 0xB: nEff = 0x36; nOp = op; break; // note cut case 0xC: nEff = 0x3C; nOp = op; break; // note delay case 0xD: nEff = 0x3D; nOp = op; break; // pattern delay case 0xE: nEff = 0x3E; nOp = op; break; #ifdef VERBOSE default: printf("Unsupported effect: S%x Op:%x\n", eff, op); #endif } break; // Txx set tempo case 0x14: nEff = 0x16; nOp = op; break; // Uxx fine vibrato case 0x15: nEff = 0x4A; nOp = op; break; // Vxx set global volume case 0x16: if (op>128) op = 128; nEff = 0x10; nOp = XModule::vol128to255(op); break; // Wxx global volume slide (stupid IT/MPT) case 0x17: nEff = 0x59; nOp = op; break; // Xxx set panning (0->FF) case 0x18: nEff = 0x08; nOp = op; break; // Yxx panbrello case 0x19: nEff = 0x5C; nOp = op; break; #ifdef VERBOSE default: printf("Unsupported effect: %x\n", command); #endif } slot[4] = nEff; slot[5] = nOp; } } else row++; } delete[] buffer; } else { phead[i].rows = 64; phead[i].effnum = 2; phead[i].channum = (mp_ubyte)header->channum; phead[i].patternData = new mp_ubyte[phead[i].rows*header->channum*6]; // out of memory? if (phead[i].patternData == NULL) return MP_OUT_OF_MEMORY; memset(phead[i].patternData, 0, phead[i].rows*header->channum*6); } } if (messageOffset && messageLength) { f.seekWithBaseOffset(messageOffset); module->allocateSongMessage(messageLength+1); if (module->message == NULL) return MP_OUT_OF_MEMORY; // read song message f.read(module->message, 1, messageLength); } strcpy(header->tracker,"Impulse Tracker"); //module->setDefaultPanning(); for (i = 0; i < header->channum; i++) header->pan[i] = (chnPan[i] <= 64) ? XModule::vol64to255(chnPan[i]) : 0x80; module->postProcessSamples(); return MP_OK; } MilkyTracker-1.02.00/src/milkyplay/LoaderMDL.cpp000066400000000000000000000726131324432207300213350ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * LoaderMDL.cpp * MilkyPlay Module Loader: Digitracker 3 * -------------------------------- * Version History: * -------------------------------- * 01/16/05: Added loader for version 0.0 (no joke) * ??/??/04: Make it working with platform independent file loading routines * ??/??/98: First version of this MDL loader */ #include "Loaders.h" struct tmdlins { mp_ubyte sampnum; mp_ubyte playrangeend; mp_ubyte vol; mp_ubyte volenv; mp_ubyte pan; mp_ubyte panenv; mp_uint32 volfade; mp_ubyte vibspeed; mp_ubyte vibdepth; mp_ubyte vibsweep; mp_ubyte vibform; mp_ubyte reserved; mp_ubyte freqenv; }; struct tmdlsamp { mp_ubyte sampnum; mp_ubyte smpname[32]; mp_ubyte filename[8]; mp_uint32 c4spd; mp_uint32 samplen; mp_uint32 loopstart; mp_uint32 looplen; mp_ubyte reserved; mp_ubyte infobyte; mp_sbyte *smp; }; static inline mp_uint32 cvol(mp_ubyte vol) { return (((mp_sint32)(vol-1))*65795)>>16; } static inline mp_uint32 cpan(mp_ubyte pan) { return (((mp_uint32)pan)*131589)>>16; } const char* LoaderMDL::identifyModule(const mp_ubyte* buffer) { // check for .MDL module if (!memcmp(buffer,"DMDL",4)) { return "MDL"; } return NULL; } mp_sint32 LoaderMDL::load(XMFileBase& f, XModule* module) { mp_uint32 i,e; mp_ubyte dummy[256]; module->cleanUp(); TXMHeader* header = &module->header; TXMInstrument* instr = module->instr; TXMSample* smp = module->smp; TXMPattern* phead = module->phead; // we're already out of memory here if (!phead || !instr || !smp) return MP_OUT_OF_MEMORY; mp_ubyte sig[5]; f.read(&sig,1,5); if (memcmp(sig,"DMDL",4)) { return MP_LOADER_FAILED; } mp_ubyte hVer = sig[4]>>4; if (hVer > 1) { return MP_LOADER_FAILED; } memcpy(header->sig,sig,4); strcpy(header->tracker,"Digitracker 3"); mp_uint32 numtracks=0; mp_uint32 numins=0; mp_uint32 numsamples=0; mp_ubyte *tracks = NULL; // waste some memory tmdlins *mdlins = new tmdlins[16*256]; tmdlsamp *mdlsamp = new tmdlsamp[256]; mp_uint32 *trackseq = new mp_uint32[256*32]; if (mdlins == NULL || mdlsamp == NULL || trackseq == NULL) { if (mdlins) delete[] mdlins; if (mdlsamp) delete[] mdlsamp; if (trackseq) delete[] trackseq; return MP_OUT_OF_MEMORY; } memset(mdlins,0,sizeof(tmdlins)*16*256); memset(mdlsamp,0,sizeof(tmdlsamp)*256); memset(trackseq,0,256*32*4); header->ver=sig[4]; mp_ubyte blockhead[6]; while (f.read(&blockhead,1,6)) { mp_ubyte id[3]; memcpy(id,blockhead,2); id[2]=0; mp_uint32 blocklen = LittleEndian::GET_DWORD(blockhead+2); if (!memcmp(&blockhead,"IN",2)) { f.read(&header->name,1,32); f.read(&dummy,1,20); mp_uword ordnum = 0; f.readWords(&ordnum,1); if(ordnum > MP_MAXORDERS) { return MP_LOADER_FAILED; } header->ordnum = ordnum; f.readWords(&header->restart,1); header->mainvol = f.readByte(); header->tempo = f.readByte(); header->speed = f.readByte(); f.read(&dummy,1,32); mp_uint32 c=32; while ((dummy[c-1]&128)) c--; header->channum=c; for (i=0;ipan[i]=cpan(dummy[i]&127); f.read(&header->ord,1,header->ordnum); for (i=0;ipatnum = f.readByte(); for (mp_sint32 p=0;ppatnum;p++) { mp_ubyte numch = 0; mp_sint32 numrows=0; if (hVer == 1) { numch = f.readByte(); numrows = f.readByte(); f.read(&dummy,1,16); } else if (hVer == 0) { numch = 32; numrows = 63; } for (mp_sint32 c=0;cheader->channum) numch=(char)header->channum; numch=(mp_ubyte)header->channum; numrows++; phead[p].rows=numrows; phead[p].effnum=3; phead[p].channum=numch < (mp_ubyte)header->channum ? numch : (mp_ubyte)header->channum; phead[p].patternData=new mp_ubyte[phead[p].rows*phead[p].channum*8]; // out of memory? if (phead[p].patternData == NULL) { if (mdlins) delete[] mdlins; if (mdlsamp) delete[] mdlsamp; if (trackseq) delete[] trackseq; return MP_OUT_OF_MEMORY; } memset(phead[p].patternData,0,phead[p].rows*phead[p].channum*8); } } else if (!memcmp(&blockhead,"TR",2)) { mp_ubyte *buffer = new mp_ubyte[2048]; numtracks = f.readWord(); tracks = new mp_ubyte[(mp_uint32)numtracks*256*6]; if (buffer == NULL || tracks == NULL) { if (mdlins) delete[] mdlins; if (mdlsamp) delete[] mdlsamp; if (trackseq) delete[] trackseq; if (buffer) delete[] buffer; if (tracks) delete[] tracks; return MP_OUT_OF_MEMORY; } for (mp_uint32 t=0;t>2; switch (pb) { case 0: { for (i=0;i<(op+1);i++) { memset(track+(p*6),0,6); p++; } break; }; case 1: { mp_sint32 lp=p-1; for (i=0;i<(op+1);i++) { memcpy(track+(p*6),track+(lp*6),6); p++; } break; }; case 2: { memcpy(track+(p*6),track+(op*6),6); p++; break; }; case 3: { if ((op&1)) track[p*6]=buffer[d++]; if ((op&2)) track[p*6+1]=buffer[d++]; if ((op&4)) track[p*6+2]=buffer[d++]; if ((op&8)) track[p*6+3]=buffer[d++]; if ((op&16)) track[p*6+4]=buffer[d++]; if ((op&32)) track[p*6+5]=buffer[d++]; p++; break; }; } } // something went wrong here if (d!=tracksize) { if (mdlins) delete[] mdlins; if (mdlsamp) delete[] mdlsamp; if (trackseq) delete[] trackseq; if (buffer) delete[] buffer; if (tracks) delete[] tracks; return MP_LOADER_FAILED; } } delete[] buffer; } else if (!memcmp(&blockhead,"II",2)) { mp_uint32 insnum = 0,numsamples = 0; numins = f.readByte(); for (i=0;iinsnum=insnum; } else if (!memcmp(&blockhead,"IS",2)) { numsamples = f.readByte(); for (mp_uint32 s=0;s>2)&3; switch (pb) { case 0: { if (!(mdlsamp[s].infobyte&1)) { mdlsamp[s].smp = (mp_sbyte*)module->allocSampleMem(mdlsamp[s].samplen); // out of memory if (mdlsamp[s].smp==NULL) { if (mdlins) delete[] mdlins; if (mdlsamp) delete[] mdlsamp; if (trackseq) delete[] trackseq; if (tracks) delete[] tracks; return MP_OUT_OF_MEMORY; } if (!module->loadSample(f,mdlsamp[s].smp,mdlsamp[s].samplen,mdlsamp[s].samplen)) { if (mdlins) delete[] mdlins; if (mdlsamp) delete[] mdlsamp; if (trackseq) delete[] trackseq; if (tracks) delete[] tracks; return MP_OUT_OF_MEMORY; } } else { mdlsamp[s].smp = (mp_sbyte*)module->allocSampleMem(mdlsamp[s].samplen); // out of memory if (mdlsamp[s].smp==NULL) { if (mdlins) delete[] mdlins; if (mdlsamp) delete[] mdlsamp; if (trackseq) delete[] trackseq; if (tracks) delete[] tracks; return MP_OUT_OF_MEMORY; } if (!module->loadSample(f,mdlsamp[s].smp,mdlsamp[s].samplen,mdlsamp[s].samplen>>1,XModule::ST_16BIT)) { if (mdlins) delete[] mdlins; if (mdlsamp) delete[] mdlsamp; if (trackseq) delete[] trackseq; if (tracks) delete[] tracks; return MP_OUT_OF_MEMORY; } //mp_uint32 samplen = mdlsamp[s].samplen>>1; //mp_uint32 loopstart = mdlsamp[s].loopstart>>1; //mp_uint32 looplen = mdlsamp[s].looplen>>1; } }; break; case 1: { mp_sint32 size = (mp_sint32)f.readDword(); mdlsamp[s].smp = (mp_sbyte*)module->allocSampleMem(mdlsamp[s].samplen); // out of memory if (mdlsamp[s].smp==NULL) { if (mdlins) delete[] mdlins; if (mdlsamp) delete[] mdlsamp; if (trackseq) delete[] trackseq; if (tracks) delete[] tracks; return MP_OUT_OF_MEMORY; } if (!module->loadSample(f,mdlsamp[s].smp,size,mdlsamp[s].samplen,XModule::ST_PACKING_MDL)) { if (mdlins) delete[] mdlins; if (mdlsamp) delete[] mdlsamp; if (trackseq) delete[] trackseq; if (tracks) delete[] tracks; return MP_OUT_OF_MEMORY; } }; break; case 2: { mp_sint32 size = (mp_sint32)f.readDword(); mdlsamp[s].smp = (mp_sbyte*)module->allocSampleMem(mdlsamp[s].samplen); // out of memory if (mdlsamp[s].smp==NULL) { if (mdlins) delete[] mdlins; if (mdlsamp) delete[] mdlsamp; if (trackseq) delete[] trackseq; if (tracks) delete[] tracks; return MP_OUT_OF_MEMORY; } mp_uint32 samplen = mdlsamp[s].samplen>>1; //mp_uint32 loopstart = mdlsamp[s].loopstart>>1; //mp_uint32 looplen = mdlsamp[s].looplen>>1; if (!module->loadSample(f,mdlsamp[s].smp,size,samplen,XModule::ST_PACKING_MDL | XModule::ST_16BIT)) { if (mdlins) delete[] mdlins; if (mdlsamp) delete[] mdlsamp; if (trackseq) delete[] trackseq; if (tracks) delete[] tracks; return MP_OUT_OF_MEMORY; } }; break; } } } else if (!memcmp(&blockhead,"VE",2)) { mp_uint32 numenvs = f.readByte(); mp_ubyte *envelopes = new mp_ubyte[numenvs*33]; // out of memory if (envelopes==NULL) { if (mdlins) delete[] mdlins; if (mdlsamp) delete[] mdlsamp; if (trackseq) delete[] trackseq; if (tracks) delete[] tracks; return MP_OUT_OF_MEMORY; } f.read(envelopes,33,numenvs); mp_ubyte *env=envelopes; mp_ubyte num; mp_uint32 envnum = 0; mp_uint32 lastEnv = 0; for (e=0;elastEnv) lastEnv = envnum; } module->venvs = new TEnvelope[lastEnv+1]; if (module->venvs == NULL) { if (mdlins) delete[] mdlins; if (mdlsamp) delete[] mdlsamp; if (trackseq) delete[] trackseq; if (tracks) delete[] tracks; return MP_OUT_OF_MEMORY; } memset(module->venvs, 0, sizeof(TEnvelope)*(lastEnv+1)); module->numVEnvsAlloc = lastEnv+1; module->numVEnvs = lastEnv+1; for (e=0;e>16; module->venvs[envnum].env[num][0]=x-1; module->venvs[envnum].env[num][1]=y; num++; } module->venvs[envnum].num=num; module->venvs[envnum].sustain=env[31]&0xf; module->venvs[envnum].loops=env[32]&0xf; module->venvs[envnum].loope=env[32]>>4; module->venvs[envnum].type=1; if ((env[31]&16)) module->venvs[envnum].type|=2; if ((env[31]&32)) module->venvs[envnum].type|=4; env+=33; } header->volenvnum=envnum+1; delete[] envelopes; } else if (!memcmp(&blockhead,"PE",2)) { mp_uint32 numenvs = f.readByte(); mp_ubyte *envelopes = new mp_ubyte[numenvs*33]; // out of memory if (envelopes==NULL) { if (mdlins) delete[] mdlins; if (mdlsamp) delete[] mdlsamp; if (trackseq) delete[] trackseq; if (tracks) delete[] tracks; return MP_OUT_OF_MEMORY; } f.read(envelopes,33,numenvs); mp_ubyte *env=envelopes; mp_ubyte num; mp_uint32 envnum = 0; mp_uint32 lastEnv = 0; for (e=0;elastEnv) lastEnv = envnum; } module->penvs = new TEnvelope[lastEnv+1]; if (module->penvs == NULL) { if (mdlins) delete[] mdlins; if (mdlsamp) delete[] mdlsamp; if (trackseq) delete[] trackseq; if (tracks) delete[] tracks; return MP_OUT_OF_MEMORY; } memset(module->penvs, 0, sizeof(TEnvelope)*(lastEnv+1)); module->numPEnvsAlloc = lastEnv+1; module->numPEnvs = lastEnv+1; for (e=0;e>16; module->penvs[envnum].env[num][0]=x-1; module->penvs[envnum].env[num][1]=y; num++; } module->penvs[envnum].num=num; module->penvs[envnum].sustain=env[31]&0xf; module->penvs[envnum].loops=env[32]&0xf; module->penvs[envnum].loope=env[32]>>4; module->penvs[envnum].type=1; if ((env[31]&16)) module->penvs[envnum].type|=2; if ((env[31]&32)) module->penvs[envnum].type|=4; env+=33; } header->panenvnum=envnum+1; delete[] envelopes; } else if (!memcmp(&blockhead,"FE",2)) { mp_uint32 numenvs = f.readByte(); mp_ubyte *envelopes = new mp_ubyte[numenvs*33]; // out of memory if (envelopes==NULL) { if (mdlins) delete[] mdlins; if (mdlsamp) delete[] mdlsamp; if (trackseq) delete[] trackseq; if (tracks) delete[] tracks; return MP_OUT_OF_MEMORY; } f.read(envelopes,33,numenvs); mp_ubyte *env=envelopes; mp_ubyte num; mp_uint32 envnum = 0; mp_uint32 lastEnv = 0; for (e=0;elastEnv) lastEnv = envnum; } module->fenvs = new TEnvelope[lastEnv+1]; if (module->fenvs == NULL) { if (mdlins) delete[] mdlins; if (mdlsamp) delete[] mdlsamp; if (trackseq) delete[] trackseq; if (tracks) delete[] tracks; return MP_OUT_OF_MEMORY; } memset(module->fenvs, 0, sizeof(TEnvelope)*(lastEnv+1)); module->numFEnvsAlloc = lastEnv+1; module->numFEnvs = lastEnv+1; for (e=0;e>16; module->fenvs[envnum].env[num][0]=x-1; module->fenvs[envnum].env[num][1]=y; num++; } module->fenvs[envnum].num=num; module->fenvs[envnum].sustain=env[31]&0xf; module->fenvs[envnum].loops=env[32]&0xf; module->fenvs[envnum].loope=env[32]>>4; module->fenvs[envnum].type=1; if ((env[31]&16)) module->fenvs[envnum].type|=2; if ((env[31]&32)) module->fenvs[envnum].type|=4; env+=33; } header->frqenvnum=envnum+1; delete[] envelopes; } else if (!memcmp(&blockhead,"ME",2)) { // MDL doc says song message is always 0 terminated, // well allocate one more byte to make sure it's really, really 0-terminated module->allocateSongMessage(blocklen+1); if (module->message == NULL) { if (mdlins) delete[] mdlins; if (mdlsamp) delete[] mdlsamp; if (trackseq) delete[] trackseq; if (tracks) delete[] tracks; return MP_OUT_OF_MEMORY; } // read song message f.read(module->message, 1, blocklen); } else { /*mp_ubyte *buffer = new mp_ubyte[blocklen]; if (buffer == NULL) { // out of memory if (mdlins) delete[] mdlins; if (mdlsamp) delete[] mdlsamp; if (trackseq) delete[] trackseq; if (tracks) delete[] tracks; return MP_OUT_OF_MEMORY; } f.read(buffer,1,blocklen); delete[] buffer;*/ f.seekWithBaseOffset(f.posWithBaseOffset() + blocklen); } } // --------------------------------------------------------------- // build new song structure // --------------------------------------------------------------- if (hVer == 1) { // create static envelope for samples samples without volume envelope TEnvelope venv; //venvs[header->volenvnum].type=5; //venvs[header->volenvnum].num=2; //venvs[header->volenvnum].loops=0; //venvs[header->volenvnum].loope=1; //venvs[header->volenvnum].env[0][0]=0; //venvs[header->volenvnum].env[0][1]=256; //venvs[header->volenvnum].env[1][0]=128; //venvs[header->volenvnum].env[1][1]=256; venv.type=5; venv.num=2; venv.loops=0; venv.loope=1; venv.env[0][0]=0; venv.env[0][1]=256; venv.env[1][0]=128; venv.env[1][1]=256; if (!module->addVolumeEnvelope(venv)) { if (mdlins) delete[] mdlins; if (mdlsamp) delete[] mdlsamp; if (trackseq) delete[] trackseq; if (tracks) delete[] tracks; return MP_OUT_OF_MEMORY; } header->volenvnum++; mp_uint32 sampcnt=0; for (i=0;iinsnum;i++) { //cprintf("%i\r\n",instr[i].samp); if (instr[i].samp) { mp_sint32 bs=0; for (mp_uint32 s=0;svolenvnum; if ((mdlins[i*16+s].panenv&128)) smp[sampcnt].penvnum=(mdlins[i*16+s].panenv&63)+1; if ((mdlins[i*16+s].freqenv&128)) smp[sampcnt].fenvnum=(mdlins[i*16+s].freqenv&63)+1; smp[sampcnt].vol=cvol(mdlins[i*16+s].vol); XModule::convertc4spd(mdlsamp[l].c4spd,&smp[sampcnt].finetune,&smp[sampcnt].relnote); if (mdlsamp[l].looplen&&(mdlsamp[l].infobyte&2)) smp[sampcnt].type=2; else if (mdlsamp[l].looplen&&(!(mdlsamp[l].infobyte&2))) smp[sampcnt].type=1; if ((mdlsamp[l].infobyte&1)) { smp[sampcnt].samplen>>=1; smp[sampcnt].loopstart>>=1; smp[sampcnt].looplen>>=1; smp[sampcnt].type|=16; } smp[sampcnt].pan=cpan(mdlins[i*16+s].pan); smp[sampcnt].vibtype=mdlins[i*16+s].vibform; smp[sampcnt].vibsweep=mdlins[i*16+s].vibsweep; smp[sampcnt].vibdepth=mdlins[i*16+s].vibdepth; smp[sampcnt].vibrate=mdlins[i*16+s].vibspeed; smp[sampcnt].volfade=mdlins[i*16+s].volfade; smp[sampcnt].sample=mdlsamp[l].smp; memcpy(&smp[sampcnt].name,&mdlsamp[l].smpname,32); sampcnt++; continue; } } } } } header->smpnum=sampcnt; } else if (hVer == 0) { header->insnum = 0; for (mp_uint32 s = 0; s < numsamples; s++) { if(mdlsamp[s].sampnum == 0) continue; i = mdlsamp[s].sampnum - 1; if ((i+1) > header->insnum) header->insnum = i + 1; instr[i].samp = 1; for (mp_sint32 j = 0; j < 120; j++) instr[i].snum[j] = s; memcpy(instr[i].name, mdlsamp[s].smpname, 32); memcpy(smp[s].name, mdlsamp[s].filename, 8); XModule::convertc4spd(mdlsamp[s].c4spd,&smp[s].finetune,&smp[s].relnote); smp[s].vol=cvol(mdlsamp[s].reserved); smp[s].flags = 1; smp[s].samplen = mdlsamp[s].samplen; smp[s].loopstart = mdlsamp[s].loopstart; smp[s].looplen= mdlsamp[s].looplen; if (mdlsamp[s].looplen&&(mdlsamp[s].infobyte&2)) smp[s].type=2; else if (mdlsamp[s].looplen&&(!(mdlsamp[s].infobyte&2))) smp[s].type=1; if ((mdlsamp[s].infobyte&1)) { smp[s].samplen>>=1; smp[s].loopstart>>=1; smp[s].looplen>>=1; smp[s].type|=16; } smp[s].sample = mdlsamp[s].smp; /*mdlsamp[s].samplen = f.readDword(); mdlsamp[s].loopstart = f.readDword(); mdlsamp[s].looplen = f.readDword(); mdlsamp[s].reserved = f.readByte(); mdlsamp[s].infobyte = f.readByte();*/ } header->smpnum = numsamples; } for (i=0;ipatnum;i++) { mp_ubyte* pattern = phead[i].patternData; mp_uint32 numrows = phead[i].rows; mp_uint32 numch = phead[i].channum; for (mp_uint32 r=0;r>4; switch (eff1) { case 0x1 : { pattern[pos+4]=0x43; pattern[pos+5]=track[4]; }; break; case 0x2 : { pattern[pos+4]=0x44; pattern[pos+5]=track[4]; }; break; case 0x3 : { pattern[pos+4]=0x03; pattern[pos+5]=track[4]; }; break; case 0x4 : { pattern[pos+4]=0x04; pattern[pos+5]=track[4]; }; break; case 0x5 : { pattern[pos+4]=0x20; pattern[pos+5]=track[4]; }; break; case 0x7 : { pattern[pos+4]=0x16; pattern[pos+5]=track[4]; }; break; case 0x8 : { pattern[pos+4]=0x08; pattern[pos+5]=cpan(track[4]); }; break; case 0xB : { pattern[pos+4]=0x0B; pattern[pos+5]=track[4]; }; break; case 0xC : { pattern[pos+4]=0x10; pattern[pos+5]=cvol(track[4]); }; break; case 0xD : { pattern[pos+4]=0x0D; pattern[pos+5]=track[4]; }; break; case 0xE : { switch (track[4]>>4) { case 0x1 : { pattern[pos+4]=0x1E; pattern[pos+5]=track[4]; }; break; case 0x2 : { pattern[pos+4]=0x1E; pattern[pos+5]=track[4]; }; break; case 0x6 : { pattern[pos+4]=0x36; pattern[pos+5]=track[4]&0xf; }; break; case 0x7 : { pattern[pos+4]=0x37; pattern[pos+5]=track[4]&0xf; }; break; case 0x9 : { pattern[pos+4]=0x39; pattern[pos+5]=track[4]&0xf; }; break; case 0xA : { pattern[pos+4]=0x1E; pattern[pos+5]=track[4]; }; break; case 0xB : { pattern[pos+4]=0x1E; pattern[pos+5]=track[4]; }; break; case 0xC : { pattern[pos+4]=0x3C; pattern[pos+5]=track[4]&0xf; }; break; case 0xD : { pattern[pos+4]=0x3D; pattern[pos+5]=track[4]&0xf; }; break; case 0xE : { pattern[pos+4]=0x3E; pattern[pos+5]=track[4]&0xf; }; break; case 0xF : { pattern[pos+4]=0x1F; pattern[pos+5]=track[5]; pattern[pos+6]=0; pattern[pos+7]=track[4]&0xf; }; break; } }; break; case 0xF : { pattern[pos+4]=0x1C; pattern[pos+5]=track[4]; }; break; default : { if (eff1) { //cprintf("Eff1: %i, %i\r\n",eff1,track[4]); //getch(); } }; break; } switch (eff2) { case 0x1 : { pattern[pos+6]=0x45; pattern[pos+7]=track[5]; }; break; case 0x2 : { pattern[pos+6]=0x46; pattern[pos+7]=track[5]; }; break; case 0x3 : { pattern[pos+6]=0x1B; pattern[pos+7]=track[5]; }; break; case 0x4 : { pattern[pos+6]=0x07; pattern[pos+7]=track[5]; }; break; case 0x7 : { pattern[pos+6]=0x16; pattern[pos+7]=track[5]; }; break; case 0x8 : { pattern[pos+6]=0x08; pattern[pos+7]=cpan(track[5]); }; break; case 0xB : { pattern[pos+6]=0x0B; pattern[pos+7]=track[5]; }; break; case 0xC : { pattern[pos+6]=0x10; pattern[pos+7]=cvol(track[5]); }; break; case 0xD : { pattern[pos+6]=0x0D; pattern[pos+7]=track[5]; }; break; case 0xE : { switch (track[5]>>4) { case 0x1 : { pattern[pos+6]=0x1E; pattern[pos+7]=track[5]; }; break; case 0x2 : { pattern[pos+6]=0x1E; pattern[pos+7]=track[5]; }; break; case 0x6 : { pattern[pos+6]=0x36; pattern[pos+7]=track[5]&0xf; }; break; case 0x7 : { pattern[pos+6]=0x37; pattern[pos+7]=track[5]&0xf; }; break; case 0x9 : { pattern[pos+6]=0x39; pattern[pos+7]=track[5]&0xf; }; break; case 0xA : { pattern[pos+6]=0x1E; pattern[pos+7]=track[5]; }; break; case 0xB : { pattern[pos+6]=0x1E; pattern[pos+7]=track[5]; }; break; case 0xC : { pattern[pos+6]=0x3C; pattern[pos+7]=track[5]&0xf; }; break; case 0xD : { pattern[pos+6]=0x3D; pattern[pos+7]=track[5]&0xf; }; break; case 0xE : { pattern[pos+6]=0x3E; pattern[pos+7]=track[5]&0xf; }; break; case 0xF : { pattern[pos+4]=0x1F; pattern[pos+5]=track[4]; pattern[pos+6]=0; pattern[pos+7]=track[5]&0xf; }; break; } }; break; case 0xF : { pattern[pos+6]=0x1C; pattern[pos+7]=track[5]; }; break; default : { if (eff2) { //cprintf("Eff2: %i, %i\r\n",eff2,track[5]); //getch(); } }; break; } } } } } //cprintf("%i\r\n",phead[1].channum); //for (mp_sint32 r=0;r<64;r++) { //mp_sint32 o=(24*8)*r-2; //for (i=15;i<16;i++) { // cprintf("n: %x, i: %x\r\n",phead[1].pattern[i*8+6+o],phead[1].pattern[i*8+7+o]); // getch(); //} //} delete[] tracks; delete[] trackseq; delete[] mdlins; delete[] mdlsamp; module->postProcessSamples(); return MP_OK; } MilkyTracker-1.02.00/src/milkyplay/LoaderMOD.cpp000066400000000000000000000473441324432207300213430ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * LoaderMOD.cpp * MilkyPlay Module Loader: Protracker compatible * MilkyPlay Module Loader: Game Music Creator (very similiar to MOD, kept in here) * MilkyPlay Module Loader: SoundFX (very similiar to MOD, kept in here) */ #include "Loaders.h" // get number of channels of protracker compatible song static mp_sint32 getPTnumchannels(char *id) { if(!memcmp(id, "M.K.", 4) || !memcmp(id, "M!K!", 4) || !memcmp(id, "FLT4", 4)) { return 4; } if(!memcmp(id, "FLT8", 4) || !memcmp(id, "OKTA", 4) || !memcmp(id, "OCTA", 4) || !memcmp(id, "FA08", 4) || !memcmp(id, "CD81", 4)) { return 8; } if(id[0] >= '1' && id[0] <= '9' && !memcmp(id + 1, "CHN", 3)) { return id[0] - '0'; } if(id[0] >= '1' && id[0] <= '9' && id[1]>='0' && id[1] <= '9' && (!memcmp(id + 2, "CH", 2) || !memcmp(id + 2, "CN", 2))) { return (id[0] - '0') * 10 + id[1] - '0'; } return 0; } static mp_sint32 mot2int(mp_sint32 x) { return (x>>8)+((x&255)<<8); } const char* LoaderMOD::identifyModule(const mp_ubyte* buffer) { // check for .MOD if (getPTnumchannels((char*)buffer+1080)) { return "MOD"; } mp_sint32 i,j; mp_ubyte* uBuffer = (mp_ubyte*)buffer; // see if we're getting a song title for (i = 0; i < 20; i++) if (uBuffer[i] >= 126 || (uBuffer[i] < 32 && uBuffer[i])) return NULL; uBuffer+=20; mp_sint32 lastAsciiValues = -1; for (j = 0; j < 15; j++) { if (uBuffer[24]) break; if (uBuffer[25] > 64) break; bool ascii = true; for (i = 0; i < 22; i++) { if (uBuffer[i] >= 126 || (uBuffer[i] < 14 && uBuffer[i])) { ascii = false; break; } } if (ascii) lastAsciiValues = j; else break; uBuffer+=30; } if (lastAsciiValues != 14) return NULL; if (!*uBuffer || *uBuffer > 128) return NULL; *uBuffer+=2; for (i = 0; i < 128; i++) if (uBuffer[i] > 128) return NULL; return "M15"; } mp_sint32 LoaderMOD::load(XMFileBase& f, XModule* module) { enum ModuleTypes { ModuleTypeUnknown, ModuleTypeIns31, ModuleTypeIns15 }; module->cleanUp(); // this will make code much easier to read TXMHeader* header = &module->header; TXMInstrument* instr = module->instr; TXMSample* smp = module->smp; TXMPattern* phead = module->phead; // we're already out of memory here if (!phead || !instr || !smp) return MP_OUT_OF_MEMORY; char block[2048]; f.read(block, 1, 2048); const char* id = identifyModule((mp_ubyte*)block); if (!id) return MP_LOADER_FAILED; ModuleTypes moduleType = ModuleTypeUnknown; if (strcmp(id, "M15") == 0) moduleType = ModuleTypeIns15; else if (strcmp(id, "MOD") == 0) moduleType = ModuleTypeIns31; if (moduleType == ModuleTypeUnknown) return MP_LOADER_FAILED; f.seekWithBaseOffset(0); f.read(&header->name,1,20); switch (moduleType) { case ModuleTypeIns15: header->insnum = 15; break; case ModuleTypeIns31: header->insnum = 31; break; default: return MP_LOADER_FAILED; } #ifdef VERBOSE printf("Loading...\n"); #endif mp_sint32 i, s = 0; for (i = 0; i < header->insnum; i++) { mp_ubyte insname[22]; mp_uword smplen=0; mp_ubyte finetune=0; mp_ubyte vol=0; mp_uword loopstart=0; mp_uword looplen=0; f.read(&insname,1,22); smplen = f.readWord(); f.read(&finetune,1,1); f.read(&vol,1,1); loopstart = f.readWord(); looplen = f.readWord(); #ifdef VERBOSE printf("Ins %i, smplen: %i, loopstart: %i, looplen: %i\n", i, mot2int(smplen), mot2int(loopstart), mot2int(looplen)); #endif memcpy(instr[i].name, insname, 22); // valid sample? if ((mot2int(smplen)<<1) > 2) { TXMSample* smp = &module->smp[s]; memcpy(smp->name, insname, 22); instr[i].samp=1; for (mp_sint32 j=0;j<120;j++) instr[i].snum[j] = s; smp->finetune = XModule::modfinetunes[finetune & 15]; smp->relnote = 0; //module->convertc4spd(module->sfinetunes[finetune],&smp->finetune,&smp->relnote); smp->flags=1; smp->samplen=mot2int(smplen)<<1; smp->loopstart=mot2int(loopstart)<<1; smp->looplen=mot2int(looplen)<<1; smp->vol=XModule::vol64to255(vol); if (smp->samplen<=2) { smp->samplen=0; instr[s].samp=0; } if ((smp->loopstart+smp->looplen)>smp->samplen) { // first correct loop start mp_sint32 dx = (smp->loopstart+smp->looplen)-smp->samplen; smp->loopstart-=dx; // still incorrect? => correct loop length if ((smp->loopstart+smp->looplen)>smp->samplen) { dx = (smp->loopstart+smp->looplen)-smp->samplen; smp->looplen-=dx; } } if (smp->loopstart<2 && smp->looplen>2) { if (smp->looplen < smp->samplen) // smp->loopstart=0; smp->type |= 32; #ifdef VERBOSE printf("Contains one shot samples %i...\n", s); #endif } if (smp->looplen<=2) smp->looplen=0; else { /*if (smp->loopstart > 2) { smp->loopstart -=2; smp->looplen+=2; }*/ smp->type|=1; } smp->pan=0x80; s++; } //ins[i].c4spd=sfinetunes[ins[i].finetune]; } header->smpnum = s; header->ordnum = f.readByte(); f.read(&header->whythis1a,1,1); f.read(&header->ord,1,128); if (moduleType == ModuleTypeIns31) f.read(header->sig,1,4); if ((memcmp(header->sig+2,"CH",2) != 0 && memcmp(header->sig+1,"CHN",3) != 0) || moduleType == ModuleTypeIns15) header->flags = XModule::MODULE_PTNEWINSTRUMENT; header->patnum=0; for (i=0;i<128;i++) if (header->ord[i]>header->patnum) header->patnum=header->ord[i]; header->patnum++; //patterns = new mp_ubyte*[modhead.numpatts]; if (moduleType == ModuleTypeIns31) header->channum = getPTnumchannels((char*)&header->sig); else if (moduleType == ModuleTypeIns15) header->channum = 4; if (!header->channum) { return MP_LOADER_FAILED; } //mp_sint32 patternsize = modhead.numchannels*modhead.numrows*5; mp_sint32 modpatternsize = header->channum*64*4; mp_ubyte *buffer = new mp_ubyte[modpatternsize]; if (buffer == NULL) { return MP_OUT_OF_MEMORY; } for (i=0;ipatnum;i++) { f.read(buffer,1,modpatternsize); phead[i].rows=64; phead[i].effnum=1; phead[i].channum=(mp_ubyte)header->channum; phead[i].patternData=new mp_ubyte[phead[i].rows*header->channum*4]; // out of memory? if (phead[i].patternData == NULL) { delete[] buffer; return MP_OUT_OF_MEMORY; } memset(phead[i].patternData,0,phead[i].rows*header->channum*4); mp_sint32 r,c,cnt=0; for (r=0;r<64;r++) { for (c=0;cchannum;c++) { mp_ubyte b1 = buffer[cnt]; mp_ubyte b2 = buffer[cnt+1]; mp_ubyte b3 = buffer[cnt+2]; mp_ubyte b4 = buffer[cnt+3]; mp_sint32 note,ins,eff,notenum = 0; note = ((b1&0xf)<<8)+b2; ins = (b1&0xf0)+(b3>>4); eff = b3&0xf; if (eff==0xE) { eff=(b4>>4)+0x30; b4&=0xf; } if ((!eff)&&b4) eff=0x20; // old style modules don't support last effect for: // - portamento up/down // - volume slide if (eff==0x1&&(!b4)) eff = 0; if (eff==0x2&&(!b4)) eff = 0; if (eff==0xA&&(!b4)) eff = 0; if (eff==0x5&&(!b4)) eff = 0x3; if (eff==0x6&&(!b4)) eff = 0x4; if (eff==0xC) { b4 = XModule::vol64to255(b4); } if (note) notenum = XModule::amigaPeriodToNote(note); phead[i].patternData[cnt]=notenum; phead[i].patternData[cnt+1]=ins; phead[i].patternData[cnt+2]=eff; phead[i].patternData[cnt+3]=b4; cnt+=4; } } } delete[] buffer; for (i=0; i < header->smpnum; i++) { // Take a peek of the sample and check if we have to do some nasty MODPLUG ADPCM decompression bool adpcm = false; if (f.posWithBaseOffset() + 5 <= f.sizeWithBaseOffset()) { f.read(block, 1, 5); adpcm = memcmp(block, "ADPCM", 5) == 0; if (!adpcm) f.seekWithBaseOffset(f.posWithBaseOffset() - 5); } mp_sint32 result = module->loadModuleSample(f, i, adpcm ? XModule::ST_PACKING_ADPCM : XModule::ST_DEFAULT); if (result != MP_OK) return result; } header->speed=125; header->tempo=6; header->mainvol=255; //header->freqtab=1; if (moduleType == ModuleTypeIns15) strcpy(header->tracker,"Soundtracker"); else strcpy(header->tracker,"Protracker"); module->postLoadAnalyser(); // Amiga panning LRRL for (i = 0; i < header->channum; i++) { switch (i & 3) { case 0: case 3: header->pan[i] = 0; break; case 1: case 2: header->pan[i] = 255; break; } } module->postProcessSamples(); #ifdef VERBOSE printf("%i / %i\n", f.pos(), f.size()); #endif return MP_OK; } const char* LoaderGMC::identifyModule(const mp_ubyte* buffer) { mp_sint32 i = 0; // check instrument volume for value from 0x00 to 0x40 const mp_ubyte* ptr = buffer + 7; bool ok = true; for (i = 0; i < 15 && ok; i++) { if (*ptr > 0x40) ok = false; ptr+=16; } if (!ok) return NULL; // Those 3 bytes should all be zero if (buffer[0xF0] || buffer[0xF1] || buffer[0xF2]) return NULL; // this should not be zero if (!buffer[0xF3]) return NULL; ptr = buffer + 0xF4; ok = true; // check orders to be divisible by 0x400 for (i = 0; i < *(buffer + 0xF3) && ok; i++) { if (BigEndian::GET_WORD(ptr) & 0x3ff) ok = false; ptr+=2; } if (!ok) return NULL; return "GMC"; } mp_sint32 LoaderGMC::load(XMFileBase& f, XModule* module) { module->cleanUp(); // this will make code much easier to read TXMHeader* header = &module->header; TXMInstrument* instr = module->instr; TXMSample* smp = module->smp; TXMPattern* phead = module->phead; // we're already out of memory here if (!phead || !instr || !smp) return MP_OUT_OF_MEMORY; mp_sint32 i,j,k; // read GMC instruments, always 15 header->insnum = 15; // channels always 4 header->channum = 4; j = 0; for (i = 0; i < header->insnum; i++) { // Ignore DWORD (probably some address) f.readDword(); mp_uint32 samplen = mot2int(f.readWord()) << 1; mp_ubyte finetune = f.readByte(); mp_ubyte vol = f.readByte(); // Ignore DWORD (probably some address) f.readDword(); mp_sint32 looplen = mot2int(f.readWord()) << 1; mp_sint32 loopstart = mot2int(f.readWord()) << 1; mp_sint32 newloopstart = samplen - looplen; mp_sint32 newloopend = samplen - loopstart; if (looplen > 4) { loopstart = newloopstart; looplen = newloopend - loopstart; } // valid sample? if (samplen) { TXMSample* smp = &module->smp[j]; instr[i].samp=1; for (k = 0; k < 120; k++) instr[i].snum[k] = j; smp->finetune = XModule::modfinetunes[finetune & 15]; smp->relnote = 0; smp->flags = 1; smp->samplen = samplen; smp->loopstart = loopstart; smp->looplen = looplen; smp->vol = XModule::vol64to255(vol); if (smp->samplen <= 4) { smp->samplen = 0; instr[i].samp = 0; } if (smp->looplen <= 4) smp->looplen = 0; else { smp->type|=1; } smp->pan = 0x80; j++; } } header->smpnum = j; // skip something f.readByte(); f.readByte(); f.readByte(); header->ordnum = f.readByte(); mp_uword ord[100]; f.readWords(ord, 100); mp_sint32 patnum = 0; for (i = 0; i < 100; i++) { header->ord[i] = mot2int(ord[i]) >> 10; if (header->ord[i] > patnum) patnum = header->ord[i]; } header->patnum = patnum+1; mp_sint32 modpatternsize = header->channum*64*4; mp_ubyte *buffer = new mp_ubyte[modpatternsize]; if (buffer == NULL) { return MP_OUT_OF_MEMORY; } for ( i = 0; i < header->patnum; i++) { f.read(buffer, 1, modpatternsize); phead[i].rows = 64; phead[i].effnum = 1; phead[i].channum = (mp_ubyte)header->channum; phead[i].patternData = new mp_ubyte[phead[i].rows*header->channum*4]; // out of memory? if (phead[i].patternData == NULL) { delete[] buffer; return MP_OUT_OF_MEMORY; } memset(phead[i].patternData, 0, phead[i].rows*header->channum*4); mp_sint32 r,c,cnt=0; for (r = 0; r < 64; r++) { for ( c = 0; c < header->channum; c++) { mp_ubyte b1 = buffer[cnt]; mp_ubyte b2 = buffer[cnt+1]; mp_ubyte b3 = buffer[cnt+2]; mp_ubyte b4 = buffer[cnt+3]; mp_sint32 note,ins,eff,notenum = 0; note = ((b1&0xf)<<8)+b2; ins = (b1&0xf0)+(b3>>4); eff = b3&0xf; switch (eff) { case 0x01: case 0x02: break; case 0x03: eff = 0x0C; b4 = XModule::vol64to255(b4); break; case 0x04: eff = 0x0D; break; case 0x05: eff = 0x0B; break; case 0x08: eff = 0x0F; break; default: eff = b4 = 0; } if (note) notenum = XModule::amigaPeriodToNote(note); phead[i].patternData[cnt] = notenum; phead[i].patternData[cnt+1] = ins; phead[i].patternData[cnt+2] = eff; phead[i].patternData[cnt+3] = b4; cnt+=4; } } } delete[] buffer; mp_sint32 result = module->loadModuleSamples(f); if (result != MP_OK) return result; header->speed = 125; header->tempo = 6; header->mainvol = 255; // Amiga panning LRRL for (i = 0; i < header->channum; i++) { switch (i & 3) { case 0: case 3: header->pan[i] = 0; break; case 1: case 2: header->pan[i] = 255; break; } } module->postProcessSamples(); strcpy(header->tracker,"Game Music Creator"); return MP_OK; } const char* LoaderSFX::identifyModule(const mp_ubyte* buffer) { // check for .SFX module if (!memcmp(buffer+60,"SONG",4)) { // Check if first 15 big endian DWORDS contain valid sample sizes for (mp_sint32 i = 0; i < 15; i++) if (BigEndian::GET_DWORD(buffer+i*4) > 65536*2) return NULL; return "SFX"; } return NULL; } mp_sint32 LoaderSFX::load(XMFileBase& f, XModule* module) { module->cleanUp(); // this will make code much easier to read TXMHeader* header = &module->header; TXMInstrument* instr = module->instr; TXMSample* smp = module->smp; TXMPattern* phead = module->phead; // we're already out of memory here if (!phead || !instr || !smp) return MP_OUT_OF_MEMORY; mp_sint32 i,j,k; // read SoundFX instruments, always 15 header->insnum = header->smpnum = 15; // channels always 4 header->channum = 4; mp_dword sampSizeTab[15]; for (i = 0; i < header->smpnum; i++) { mp_ubyte temp[4]; f.read(temp, 1, 4); sampSizeTab[i] = BigEndian::GET_DWORD(temp); } // read signature f.read(header->sig, 1, 4); mp_sint32 delayValue = mot2int(f.readWord()); // skip 14 bytes garbage f.readDword(); f.readDword(); f.readDword(); f.readWord(); header->speed = 122 * 14565 / delayValue; header->tempo = 6; header->mainvol = 255; j = 0; for (i = 0; i < header->insnum; i++) { f.read(instr[i].name, 1, 22); mp_uint32 samplen = mot2int(f.readWord()) << 1; samplen = sampSizeTab[i]; mp_ubyte finetune = f.readByte(); mp_ubyte vol = f.readByte(); mp_sint32 loopstart = mot2int(f.readWord()); mp_sint32 looplen = mot2int(f.readWord()) << 1; // valid sample? if (samplen > 4) { TXMSample* smp = &module->smp[j]; instr[i].samp=1; for (k = 0; k < 120; k++) instr[i].snum[k] = j; smp->finetune = XModule::modfinetunes[finetune & 15]; smp->relnote = 0; smp->flags = 1; smp->samplen = samplen; smp->loopstart = loopstart; smp->looplen = looplen; smp->vol = XModule::vol64to255((mp_sint32)vol*64/63); if (smp->samplen <= 4) { smp->samplen = 0; instr[i].samp = 0; } if (smp->looplen <= 4) smp->looplen = 0; else { smp->type|=1; } smp->pan = 0x80; j++; } } header->smpnum = j; header->ordnum = f.readByte(); header->restart = f.readByte(); f.read(&header->ord, 1, 128); header->patnum = 0; for (i = 0; i < 128; i++) if (header->ord[i] > header->patnum) header->patnum = header->ord[i]; header->patnum++; mp_sint32 modpatternsize = header->channum*64*4; mp_ubyte *buffer = new mp_ubyte[modpatternsize]; if (buffer == NULL) { return MP_OUT_OF_MEMORY; } for ( i = 0; i < header->patnum; i++) { f.read(buffer, 1, modpatternsize); phead[i].rows = 64; phead[i].effnum = 1; phead[i].channum = (mp_ubyte)header->channum; phead[i].patternData = new mp_ubyte[phead[i].rows*header->channum*4]; // out of memory? if (phead[i].patternData == NULL) { delete[] buffer; return MP_OUT_OF_MEMORY; } memset(phead[i].patternData, 0, phead[i].rows*header->channum*4); mp_sint32 r,c,cnt=0; for (r = 0; r < 64; r++) { for ( c = 0; c < header->channum; c++) { mp_ubyte b1 = buffer[cnt]; mp_ubyte b2 = buffer[cnt+1]; mp_ubyte b3 = buffer[cnt+2]; mp_ubyte b4 = buffer[cnt+3]; mp_sint32 note,ins,eff,notenum = 0; note = ((b1&0xf)<<8)+b2; ins = (b1&0xf0)+(b3>>4); eff = b3&0xf; if (b1 == 0xFF && b2 >= 0xFC) { if (b2 == 0xFE) { note = notenum = ins = 0; eff = 0x0C; b4 = 0; } else if (b2 == 0xFD) { ins = eff = b4 = 0; } else if (b2 == 0xFC) { note = notenum = 0; } } else { switch (eff) { // arpeggio? case 0x01: if (b4) eff = 0x20; break; // pitch bend? case 0x02: // portamento up if (b4 & 0xf) eff = 0x01; // porta down else if (b4 >> 4) { eff = 0x02; b4>>=4; } break; // add something to the volume? case 0x05: eff = 0x3A; break; // set volume case 0x06: eff = 0x0C; b4 = 255-XModule::vol64to255(b4); break; // portamento again? case 0x07: eff = 0x01; break; // portamento again? case 0x08: eff = 0x02; break; default: eff = b4 = 0; } } if (note) notenum = XModule::amigaPeriodToNote(note); phead[i].patternData[cnt] = notenum; phead[i].patternData[cnt+1] = ins; phead[i].patternData[cnt+2] = eff; phead[i].patternData[cnt+3] = b4; cnt+=4; } } } delete[] buffer; mp_sint32 result = module->loadModuleSamples(f); if (result != MP_OK) return result; // Amiga panning LRRL for (i = 0; i < header->channum; i++) { switch (i & 3) { case 0: case 3: header->pan[i] = 0; break; case 1: case 2: header->pan[i] = 255; break; } } module->postProcessSamples(); strcpy(header->tracker,"SoundFX"); return MP_OK; } MilkyTracker-1.02.00/src/milkyplay/LoaderMTM.cpp000066400000000000000000000161071324432207300213520ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * LoaderMTM.cpp * MilkyPlay Module Loader: Multitracker * * Warning: This is an one-by-one conversion of an assembler version ;) * */ #include "Loaders.h" const char* LoaderMTM::identifyModule(const mp_ubyte* buffer) { // check for .MTM module if (!memcmp(buffer,"MTM\x10",4)) { return "MTM"; } return NULL; } mp_sint32 LoaderMTM::load(XMFileBase& f, XModule* module) { module->cleanUp(); // this will make code much easier to read TXMHeader* header = &module->header; TXMInstrument* instr = module->instr; TXMSample* smp = module->smp; TXMPattern* phead = module->phead; // we're already out of memory here if (!phead || !instr || !smp) return MP_OUT_OF_MEMORY; f.read(header->sig, 1, 3); // read signature if (f.readByte() != 0x10) return MP_LOADER_FAILED; f.read(header->name, 1, 20); mp_uword numTracks = f.readWord(); header->flags = XModule::MODULE_PTNEWINSTRUMENT; header->mainvol = 255; header->tempo = 6; header->speed = 125; header->patnum = f.readByte() + 1; header->ordnum = f.readByte() + 1; mp_uword locf = f.readWord(); header->insnum = f.readByte(); header->smpnum = header->insnum; f.readByte(); mp_sint32 numRows = f.readByte(); mp_sint32 trackSize = numRows*3; header->channum = f.readByte(); mp_ubyte panPositions[32]; f.read(panPositions, 1, 32); mp_sint32 i,s = 0; for (i = 0; i < header->insnum; i++) { f.read(instr[i].name,1,22); mp_uint32 size = f.readDword(); mp_uint32 loopstart = f.readDword(); mp_uint32 loopend = f.readDword(); mp_sbyte finetune = f.readByte()*16; mp_ubyte volume = XModule::vol64to255(f.readByte()); /*mp_ubyte flags = */f.readByte(); if (size) { instr[i].samp = 1; memcpy(smp[s].name,instr[i].name,22); smp[s].flags = 1; smp[s].samplen = size; smp[s].loopstart = loopstart; smp[s].looplen = loopend - loopstart; smp[s].vol = volume; smp[s].finetune = finetune; for (mp_sint32 j = 0; j < 120; j++) instr[i].snum[j] = s; if ((smp[s].loopstart+smp[s].looplen)>smp[s].samplen) smp[s].looplen-=(smp[s].loopstart+smp[s].looplen)-smp[s].samplen; if (smp[s].loopstart<=2) smp[s].loopstart=0; if (smp[s].looplen<=2) smp[s].looplen=0; else smp[s].type=1; s++; } } header->smpnum = s; mp_ubyte orders[128]; f.read(orders, 1, 128); for (i = 0; i < header->ordnum; i++) header->ord[i] = orders[i]; mp_ubyte* tracks = new mp_ubyte[trackSize*numTracks]; if (tracks == NULL) return MP_OUT_OF_MEMORY; f.read(tracks, trackSize, numTracks); mp_uword* trackSeq = new mp_uword[header->patnum * 32]; if (trackSeq == NULL) { delete[] tracks; return MP_OUT_OF_MEMORY; } f.readWords(trackSeq, header->patnum * 32); mp_uword* pTrackSeq = trackSeq; for (i = 0; i < header->patnum;i++) { phead[i].rows = numRows; phead[i].effnum = 1; phead[i].channum = (mp_ubyte)header->channum; phead[i].patternData = new mp_ubyte[phead[i].rows*header->channum*4]; // out of memory? if (phead[i].patternData == NULL) { delete[] tracks; delete[] trackSeq; return MP_OUT_OF_MEMORY; } memset(phead[i].patternData,0,phead[i].rows*header->channum*4); mp_sint32 c; for (c=0;c<32;c++) { if (*pTrackSeq && (*pTrackSeq-1) < numTracks && c < header->channum) { mp_ubyte *track = (*pTrackSeq-1)*trackSize + tracks; #ifdef VERBOSE if ((*pTrackSeq-1) >= numTracks) printf("piiiiep"); #endif for (mp_sint32 row = 0; row < numRows; row++) { mp_ubyte* dstSlot = phead[i].patternData+row*phead[i].channum*4+c*4; mp_ubyte note = track[0]>>2; if (note) note+=25; mp_ubyte ins = ((track[0]&0x03)<<4)+(track[1]>>4); mp_ubyte eff = track[1]&0x0f; mp_ubyte op = track[2]; if (eff==0xE) { eff=(op>>4)+0x30; op&=0xf; if (eff == 0x38) { eff = 0x08; op <<= 4; } } if ((!eff)&&op) eff=0x20; // old style modules don't support last effect for: // - portamento up/down // - volume slide if (eff==0x1&&(!op)) eff = 0; if (eff==0x2&&(!op)) eff = 0; if (eff==0xA&&(!op)) eff = 0; if (eff==0x5&&(!op)) eff=0x3; if (eff==0x6&&(!op)) eff=0x4; if (eff==0xC) op = XModule::vol64to255(op); dstSlot[0] = note; dstSlot[1] = ins; dstSlot[2] = eff; dstSlot[3] = op; track+=3; } } pTrackSeq++; } } delete[] trackSeq; delete[] tracks; /*for (i = 0; i < locf; i++) { printf("%c",f.readByte()); } printf("\n");*/ // song message if (locf) { char* unpackedSongMessage = new char[locf]; f.read(unpackedSongMessage, 1, locf); mp_sint32 size = locf; // song message isn't null terminated for (i = 0; i < size; i++) if (unpackedSongMessage[i] == '\0') unpackedSongMessage[i] = ' '; for (i = 0; i < size; i++) { char line[50]; memset(line, 0, sizeof(line)); if (size - i >= 39) { XModule::convertStr(line, unpackedSongMessage+i, 40, false); i+=39; } else { XModule::convertStr(line, unpackedSongMessage+i, size-i, false); i+=size-i; } module->addSongMessageLine(line); } delete[] unpackedSongMessage; #ifdef VERBOSE printf("%s\n",module->message); #endif } mp_sint32 result = module->loadModuleSamples(f, XModule::ST_UNSIGNED); if (result != MP_OK) return result; strcpy(header->tracker,"Multitracker"); module->setDefaultPanning(); module->postProcessSamples(); return MP_OK; } MilkyTracker-1.02.00/src/milkyplay/LoaderMXM.cpp000066400000000000000000000550671324432207300213660ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * LoaderMXM.cpp * MilkyPlay Module Loader: Cubic Tiny XM (.MXM) * * -------------------------------- * Version History: * -------------------------------- * 07/30/05: Added the worst hack ever to load original orbitalism.mxm by netpoet * 11/23/04: Corrected bugs in 16 bit support, added new MXM format (Elitegroup modifications) * 11/17/04: First work */ #include "Loaders.h" //#define FR_HACK //#define VERBOSE ///////////////////////////////////////////////////// // MXM structures ///////////////////////////////////////////////////// struct TMXMHeader { mp_uint32 sig; mp_uint32 ordnum; mp_uint32 restart; mp_uint32 channum; mp_uint32 patnum; mp_uint32 insnum; mp_ubyte tempo; mp_ubyte speed; mp_uword opt; mp_uint32 sampstart; mp_uint32 samples8; mp_uint32 samples16; mp_sint32 lowpitch; mp_sint32 highpitch; mp_ubyte panpos[32]; }; struct TMXMInstrument { mp_uint32 sampnum; mp_ubyte snum[96]; mp_uword volfade; mp_ubyte vibtype, vibsweep, vibdepth, vibrate; mp_ubyte vnum, vsustain, vloops, vloope; mp_uword venv[12][2]; mp_ubyte pnum, psustain, ploops, ploope; mp_uword penv[12][2]; mp_ubyte res[46]; }; struct TMXMSample { mp_uword gusstartl; mp_ubyte gusstarth; mp_uword gusloopstl; mp_ubyte gusloopsth; mp_uword gusloopendl; mp_ubyte gusloopendh; mp_ubyte gusmode; mp_ubyte vol; mp_ubyte pan; mp_uword relpitch; mp_ubyte res[2]; }; /*struct TMXMSampleNew { unsigned long loopstart; unsigned long end; mp_ubyte gusmode; mp_ubyte vol; mp_ubyte pan; mp_uword relpitch; mp_uword offsindex; mp_ubyte res; };*/ struct TNoteSlot { mp_ubyte Note,Ins,Vol,Eff,Op; }; const char* LoaderMXM::identifyModule(const mp_ubyte* buffer) { // check for .MXM module first if (!memcmp(buffer,"MXM",3)) { return "MXM"; } // this is not an .MXM return NULL; } mp_sint32 LoaderMXM::load(XMFileBase& f, XModule* module) { TMXMHeader MXMHeader; TMXMInstrument MXMIns; TMXMSample MXMSmp; TNoteSlot Row[32]; mp_ubyte packbyte,*smpbuffer; mp_sword *smpbuffer16; mp_ubyte note,ins,vol,eff,op,b1; mp_sword b1_2; mp_uint32 patofs[256]; mp_uint32 insofs[128]; mp_uint32* smpofs = new mp_uint32[2048]; if (smpofs == NULL) return MP_OUT_OF_MEMORY; mp_uint32 inscnt,smpcnt,patcnt,rowcnt,x,y,z; mp_uint32 numrows,j,i; module->cleanUp(); // this will make code much easier to read TXMHeader* header = &module->header; TXMInstrument* instr = module->instr; TXMSample* smp = module->smp; TXMPattern* phead = module->phead; // we're already out of memory here if (!phead || !instr || !smp) { delete[] smpofs; return MP_OUT_OF_MEMORY; } mp_uword* lut = new mp_uword[65536]; if (lut == NULL) { delete[] smpofs; return MP_OUT_OF_MEMORY; } // calculate nifty table :) for (i = 0; i < 256; i++) for (j = 0; j < 256; j++) lut[i*256+j] = (mp_uword)((i-96)*256+(j-128)*2); //fread(&MXMHeader,1,sizeof(TMXMHeader),f); MXMHeader.sig = f.readDword(); MXMHeader.ordnum = f.readDword(); MXMHeader.restart = f.readDword(); MXMHeader.channum = f.readDword(); MXMHeader.patnum = f.readDword(); MXMHeader.insnum = f.readDword(); MXMHeader.tempo = f.readByte(); MXMHeader.speed = f.readByte(); MXMHeader.opt = f.readWord(); MXMHeader.sampstart = f.readDword(); MXMHeader.samples8 = f.readDword(); MXMHeader.samples16 = f.readDword(); MXMHeader.lowpitch = f.readDword(); MXMHeader.highpitch = f.readDword(); if(MXMHeader.ordnum > 256 || MXMHeader.patnum > 256 || MXMHeader.insnum > 256) return MP_LOADER_FAILED; f.read(MXMHeader.panpos,1,32); f.read(&header->ord, 1, 256); memcpy(&header->sig, &MXMHeader.sig, 3); strcpy(header->tracker,"..converted.."); header->ordnum = (mp_uword)MXMHeader.ordnum; header->restart = (mp_uword)MXMHeader.restart; header->channum = (mp_uword)MXMHeader.channum; header->patnum = (mp_uword)MXMHeader.patnum; header->insnum = (mp_uword)MXMHeader.insnum; header->tempo = MXMHeader.tempo; header->speed = MXMHeader.speed; header->freqtab = MXMHeader.opt&1; header->mainvol = 255; header->flags = XModule::MODULE_XMNOTECLIPPING | XModule::MODULE_XMARPEGGIO | XModule::MODULE_XMPORTANOTEBUFFER | XModule::MODULE_XMVOLCOLUMNVIBRATO; header->uppernotebound = 119; f.readDwords(insofs,512/4); f.readDwords(patofs,1024/4); // old version mp_uint32 mxmVer = 0; // detect MXM version mp_uint32 curPos = f.posWithBaseOffset(); // read number of samples for first instrument mp_uint32 dummy = f.readDword(); // must be smaller or equal 16 if (dummy <= 16) { mp_ubyte nbu[96]; // read sample layout f.read(nbu, 1, 96); for (i = 0; i < 96; i++) if (nbu[i] > (dummy-1)) { // invalid entry => should be new version of MXM format mxmVer = 1; break; } } else mxmVer = 1; f.seekWithBaseOffset(curPos); // read smp offsets for MXM format rev. 2 if (mxmVer == 1) f.readDwords(smpofs,2048); #ifdef FR_HACK ////////// blabla { fpos_t filesize; mxmVer = 1; static char hexTab[] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; char fileName[] = "/Volumes/192.168.1.3/deus-ex - MXM ohne Samples.rar Folder/xx.wav"; mp_sint32 size = 0; for (i = 1; i <= 0x15; i++) { fileName[59] = hexTab[(i>>4)&0xf]; fileName[60] = hexTab[i&0xf]; FILE *f = fopen(fileName,"rb"); fseek(f,0,SEEK_END); fgetpos(f,&filesize); fclose(f); smpofs[i-1] = size; size+=filesize - 44; } } ///////////////// #endif /////////////////////////////////////////////////// // read instruments /////////////////////////////////////////////////// mp_sint32 sampleIndex = 0; mp_sint32 envelopeIndex = 0; mp_sint32 smpOffset16 = 0; bool correctSmpSize16 = false; mp_sint32 smpOffset8 = 0; bool correctSmpSize8 = false; for (inscnt=0;inscnt(MXMIns.sampnum-1)) instr[inscnt].snum[x] = 255; else instr[inscnt].snum[x] = nbu[x]+sampleIndex; TEnvelope venv; TEnvelope penv; memset(&venv,0,sizeof(venv)); memset(&penv,0,sizeof(penv)); if (MXMIns.vnum !=0 && MXMIns.vnum<24) { venv.num = MXMIns.vnum + 1; venv.type|=1; x=0; for (j = 0;j <= MXMIns.vnum; j++) { venv.env[j][0] = x; venv.env[j][1] = MXMIns.venv[j][1]; x+=MXMIns.venv[j][0]; } } if (MXMIns.vsustain < 24) { venv.type|=2; venv.sustain=MXMIns.vsustain; } if (MXMIns.vloope<24) { venv.type|=4; venv.loops=MXMIns.vloops; venv.loope=MXMIns.vloope; } if (MXMIns.pnum!=0 && MXMIns.pnum<24) { penv.num=MXMIns.pnum+1; penv.type|=1; x=0; for (j=0;j<=MXMIns.pnum;j++) { penv.env[j][0]=x; penv.env[j][1]=MXMIns.penv[j][1]; x+=MXMIns.penv[j][0]; } } if (MXMIns.psustain<24) { penv.type|=2; penv.sustain=MXMIns.psustain; } if (MXMIns.ploope<24) { penv.type|=4; penv.loops=MXMIns.ploops; penv.loope=MXMIns.ploope; } for (mp_sint32 l=0;l<24;l++) { venv.env[l][1]<<=2; penv.env[l][1]<<=2; } if (!module->addVolumeEnvelope(venv)) { delete[] lut; delete[] smpofs; return MP_OUT_OF_MEMORY; } if (!module->addPanningEnvelope(penv)) { delete[] lut; delete[] smpofs; return MP_OUT_OF_MEMORY; } //XMIns.volfade=MXMIns.volfade; //XMIns.vibsweep=MXMIns.vibsweep; //XMIns.vibdepth=MXMIns.vibdepth; //XMIns.vibrate=MXMIns.vibrate; //XMIns.vibtype=(MXMIns.vibtype==2)?1:(MXMIns.vibtype==3)?2:(MXMIns.vibtype==1)?3:0; //fwrite(&XMIns,1,sizeof(XMIns),f2); //fwrite(&XMIns.name,1,20,f2); for (smpcnt=0;smpcnt>2)&1) { smppos = (smpofs[sampleIndex]-MXMHeader.samples8-MXMHeader.sampstart)>>1; if (!smpOffset16) smpOffset16 = smpofs[sampleIndex]; if (smppos > (signed)MXMHeader.samples16) correctSmpSize16 = true; } else { smppos = (smpofs[sampleIndex]-MXMHeader.sampstart); if (!smpOffset8) smpOffset8 = smpofs[sampleIndex]; if (smppos > (signed)MXMHeader.samples8) correctSmpSize8 = true; } MXMSmp.gusstartl = (mp_uword)(smppos&0xFFFF); MXMSmp.gusstarth = (mp_ubyte)((smppos>>16)&0xFF); MXMSmp.gusloopstl = (mp_uword)(loopstart+smppos)&0xFFFF; MXMSmp.gusloopsth = (mp_ubyte)((loopstart+smppos)>>16)&0xFF; MXMSmp.gusloopendl = (mp_uword)(end+smppos)&0xFFFF; MXMSmp.gusloopendh = (mp_ubyte)((end+smppos)>>16)&0xFF; } else { delete[] lut; delete[] smpofs; return MP_LOADER_FAILED; } //fread(&MXMSmp,1,sizeof(MXMSmp),f); //memset(&XMSmp[0],0,sizeof(TXMSample)); smp[sampleIndex].samplen = ((mp_uint32)MXMSmp.gusstarth<<16)+(mp_uint32)MXMSmp.gusstartl; smp[sampleIndex].loopstart=((mp_uint32)MXMSmp.gusloopsth<<16)+(mp_uint32)MXMSmp.gusloopstl; smp[sampleIndex].looplen=((mp_uint32)MXMSmp.gusloopendh<<16)+(mp_uint32)MXMSmp.gusloopendl; smp[sampleIndex].vol = XModule::vol64to255(MXMSmp.vol); smp[sampleIndex].pan = MXMSmp.pan; bool bFound = false; mp_sint32 relNote = -1; mp_sint32 fineTune = -1; for (mp_sint32 i = 0; i < 256; i++) for (mp_sint32 j = 0; j < 256; j++) { if (lut[i*256+j] == MXMSmp.relpitch) { bFound = true; relNote = i-96; fineTune = j-128; break; } if (bFound) break; } if (!bFound) { relNote = fineTune = 0; } smp[sampleIndex].relnote = relNote; smp[sampleIndex].finetune = fineTune; y=(MXMSmp.gusmode>>3)&1; if (y) smp[sampleIndex].type=1; y=(MXMSmp.gusmode>>4)&1; if (y) smp[sampleIndex].type=2; y=(MXMSmp.gusmode>>2)&1; if (y) smp[sampleIndex].type|=16; sampleIndex++; } envelopeIndex++; } if (!correctSmpSize8) smpOffset8 = 0; if (!correctSmpSize16) smpOffset16 = 0; header->smpnum = sampleIndex; header->volenvnum = header->panenvnum = envelopeIndex; delete[] lut; /////////////////////////////////////////////////// // read patterns /////////////////////////////////////////////////// for (patcnt=0;patcntpatnum;patcnt++) { f.seekWithBaseOffset(patofs[patcnt]); numrows = f.readDword(); //pattern = new TNoteSlot[numrows*XMHeader.channum]; //if (pattern==NULL) { //cprintf("Pattern to big (%d)\n",numrows*XMHeader.channum*5); // exit(1); //} phead[patcnt].rows = numrows; phead[patcnt].effnum = 2; phead[patcnt].channum= (mp_ubyte)header->channum; phead[patcnt].patternData = new mp_ubyte[phead[patcnt].rows*header->channum*6]; // out of memory? if (phead[patcnt].patternData == NULL) { delete[] smpofs; return MP_OUT_OF_MEMORY; } memset(phead[patcnt].patternData,0,phead[patcnt].rows*header->channum*6); z=0; for (rowcnt=0;rowcnt>5)&1; if (packbyte>0) { if (y) { note = f.readByte(); ins = f.readByte(); } y=(packbyte>>6)&1; if (y) { vol = f.readByte(); } y=(packbyte>>7)&1; if (y) { eff = f.readByte(); op = f.readByte(); if (eff>=36) { op=((eff-36)<<4)|op; eff=0xE; } } y=packbyte&0x1F; Row[y].Note=note; Row[y].Ins=ins; Row[y].Vol=vol; Row[y].Eff=eff; Row[y].Op=op; } } while (packbyte!=0); for (x=0;xchannum;x++) { /*pattern[z].Note=Row[x].Note; pattern[z].Ins=Row[x].Ins; pattern[z].Vol=Row[x].Vol; pattern[z].Eff=Row[x].Eff; pattern[z].Op=Row[x].Op;*/ mp_ubyte slot[5]; slot[0] = Row[x].Note; slot[1] = Row[x].Ins; slot[2] = Row[x].Vol; slot[3] = Row[x].Eff; slot[4] = Row[x].Op; // filter invalid effects // they could have a different meaning in my playercode bool valid = false; for (i=0;i64) bl=64; //slot[4]=(bl*261120)>>16; } if ((!slot[3])&&(slot[4])) slot[3]=0x20; if (slot[3]==0xE) { slot[3]=(slot[4]>>4)+0x30; slot[4]=slot[4]&0xf; } if (slot[3]==0x21) { slot[3]=(slot[4]>>4)+0x40; slot[4]=slot[4]&0xf; } if (slot[0]==97) slot[0]=XModule::NOTE_OFF; phead[patcnt].patternData[z]=slot[0]; phead[patcnt].patternData[z+1]=slot[1]; XModule::convertXMVolumeEffects(Row[x].Vol, phead[patcnt].patternData[z+2], phead[patcnt].patternData[z+3]); phead[patcnt].patternData[z+4]=slot[3]; phead[patcnt].patternData[z+5]=slot[4]; z+=6; } } } /////////////////////////////////////////////////// // read samples /////////////////////////////////////////////////// mp_uint32* gusstart = new mp_uint32[16*256]; mp_uint32* gusend = new mp_uint32[16*256]; mp_uint32* smpOffsets8 = new mp_uint32[256*16]; mp_uint32* smpOffsets16 = new mp_uint32[256*16]; smpbuffer = NULL; smpbuffer16 = NULL; #ifdef FR_HACK ////////// blabla { smpbuffer16 = new mp_sword[3220000>>1]; fpos_t filesize; mxmVer = 1; static char hexTab[] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; char fileName[] = "/Volumes/192.168.1.3/deus-ex - MXM ohne Samples.rar Folder/xx.wav"; mp_sint32 size = 0; for (i = 1; i <= 0x15; i++) { fileName[59] = hexTab[(i>>4)&0xf]; fileName[60] = hexTab[i&0xf]; XMFile* f2 = new XMFile(fileName); filesize = f2->sizeWithBaseOffset(); f2->seekWithBaseOffset(44); f2->readWords(smpbuffer16+size, (filesize-44)>>1); delete f2; size+=(filesize-44)>>1; } goto hack; } #endif f.seekWithBaseOffset(MXMHeader.sampstart); if (smpOffset8) MXMHeader.samples8 = f.sizeWithBaseOffset() - f.posWithBaseOffset(); if (MXMHeader.samples8!=0) { smpbuffer = new mp_ubyte[MXMHeader.samples8]; if (smpbuffer==NULL) { //cprintf("Not enough memory for 8 bit samples (%u)",MXMHeader.samples8); delete[] gusstart; delete[] gusend; delete[] smpOffsets8; delete[] smpOffsets16; delete[] smpofs; return MP_OUT_OF_MEMORY; } } if (smpOffset16) { f.seekWithBaseOffset(smpOffset16); MXMHeader.samples16 = (f.sizeWithBaseOffset() - f.posWithBaseOffset())>>1; } if (MXMHeader.samples16!=0) { smpbuffer16 = new mp_sword[MXMHeader.samples16]; if (smpbuffer16==NULL) { //cprintf("Not enough memory for 16 bit samples (%u)",MXMHeader.samples16*2); delete[] smpbuffer; delete[] gusstart; delete[] gusend; delete[] smpOffsets8; delete[] smpOffsets16; delete[] smpofs; return MP_OUT_OF_MEMORY; } } f.seekWithBaseOffset(MXMHeader.sampstart); f.read(smpbuffer, 1, MXMHeader.samples8); if (smpOffset16) { f.seekWithBaseOffset(smpOffset16); } f.readWords((mp_uword*)smpbuffer16, MXMHeader.samples16); y=(MXMHeader.opt>>2)&1; if (y) { if (MXMHeader.samples8!=0) { b1=0; for (j = 0; jsmpnum;smpcnt++) { if (!(smp[smpcnt].type & 16)) { smpOffsets8[nSmpCnt8++] = smp[smpcnt].samplen; } else { smpOffsets16[nSmpCnt16++] = smp[smpcnt].samplen; } } mp_uint32 nNumSamples8 = nSmpCnt8; mp_uint32 nNumSamples16 = nSmpCnt16; mp_uint32 baseOffset = smpOffsets16[0]; for (inscnt = 0; inscnt < nSmpCnt16; inscnt++) smpOffsets16[inscnt]-=baseOffset; #ifdef VERBOSE for (inscnt = 0; inscnt < nSmpCnt16; inscnt++) printf("New sampleoffsets: %x\n",smpOffsets16[inscnt]); printf("8 bit (complete) samplesize: %i\n",MXMHeader.samples8); printf("8 bit (numsamples): %i\n",nSmpCnt8); printf("16 bit (complete) samplesize: %i\n",MXMHeader.samples16); printf("16 bit (numsamples): %i\n",nSmpCnt16); #endif nSmpCnt8 = nSmpCnt16 = 0; for (smpcnt=0;smpcntsmpnum;smpcnt++) { if (!(smp[smpcnt].type&16)) { if (nSmpCnt8 == (nNumSamples8-1)) { gusstart[smpcnt] = smpOffsets8[nSmpCnt8]; gusend[smpcnt] = MXMHeader.samples8; } else { gusstart[smpcnt] = smpOffsets8[nSmpCnt8]; gusend[smpcnt] = smpOffsets8[nSmpCnt8+1]; } nSmpCnt8++; } else { if (nSmpCnt16 == (nNumSamples16-1)) { gusstart[smpcnt] = smpOffsets16[nSmpCnt16]; gusend[smpcnt] = MXMHeader.samples16; } else { gusstart[smpcnt] = smpOffsets16[nSmpCnt16]; gusend[smpcnt] = smpOffsets16[nSmpCnt16+1]; } nSmpCnt16++; } mp_sint32 loopstart = smp[smpcnt].loopstart; smp[smpcnt].loopstart = smp[smpcnt].loopstart-smp[smpcnt].samplen; smp[smpcnt].samplen = smp[smpcnt].looplen-smp[smpcnt].samplen; #ifdef VERBOSE printf("Len:%i Pos:%i All:%i\n",smp[smpcnt].samplen, gusstart[smpcnt], MXMHeader.samples8); #endif if (smp[smpcnt].type&3) { smp[smpcnt].looplen = smp[smpcnt].looplen-loopstart;//smp[smpcnt].loopstart; if (smp[smpcnt].looplen > smp[smpcnt].samplen || smp[smpcnt].loopstart > smp[smpcnt].samplen) { if (smpbuffer) delete[] smpbuffer; if (smpbuffer16) delete[] smpbuffer16; delete[] gusstart; delete[] gusend; delete[] smpOffsets8; delete[] smpOffsets16; delete[] smpofs; return MP_LOADER_FAILED; } } else smp[smpcnt].looplen = smp[smpcnt].loopstart = 0; } for (smpcnt=0;smpcntsmpnum;smpcnt++) { y=(smp[smpcnt].type>>4)&1; if (!y) { if (gusstart[smpcnt] + smp[smpcnt].samplen > MXMHeader.samples8) continue; smp[smpcnt].sample = (mp_sbyte*)module->allocSampleMem(smp[smpcnt].samplen); if (smp[smpcnt].sample == NULL || smpbuffer == NULL) { if (smpbuffer) delete[] smpbuffer; if (smpbuffer16) delete[] smpbuffer16; delete[] gusstart; delete[] gusend; delete[] smpOffsets8; delete[] smpOffsets16; delete[] smpofs; return MP_OUT_OF_MEMORY; } memcpy(smp[smpcnt].sample,smpbuffer+gusstart[smpcnt],smp[smpcnt].samplen); } else { if (gusstart[smpcnt] + smp[smpcnt].samplen > MXMHeader.samples16) continue; smp[smpcnt].sample = (mp_sbyte*)module->allocSampleMem(smp[smpcnt].samplen*2); if (smp[smpcnt].sample == NULL || smpbuffer16 == NULL) { if (smpbuffer) delete[] smpbuffer; if (smpbuffer16) delete[] smpbuffer16; delete[] gusstart; delete[] gusend; delete[] smpOffsets8; delete[] smpOffsets16; delete[] smpofs; return MP_OUT_OF_MEMORY; } memcpy(smp[smpcnt].sample,smpbuffer16+gusstart[smpcnt],smp[smpcnt].samplen*2); } } if (smpbuffer) delete[] smpbuffer; if (smpbuffer16) delete[] smpbuffer16; delete[] gusstart; delete[] gusend; delete[] smpOffsets8; delete[] smpOffsets16; delete[] smpofs; module->postProcessSamples(); return MP_OK; } MilkyTracker-1.02.00/src/milkyplay/LoaderOKT.cpp000066400000000000000000000214551324432207300213540ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * LoaderOKT.cpp * MilkyPlay Module Loader: Oktalyzer * */ #include "Loaders.h" const char* LoaderOKT::identifyModule(const mp_ubyte* buffer) { // check for .OKT module if (!memcmp(buffer,"OKTASONG",8)) { return "OKT"; } return NULL; } static void convertOKTEffects(mp_ubyte& eff, mp_ubyte& op) { switch (eff) { case 00: op = 0; break; case 10: // arpeggio I case 11: // arpeggio II case 12: // arpeggio III eff = (eff-10)+0x56; break; case 13: // note slide down eff = 0x54; break; case 17: // note slide up eff = 0x55; break; case 21: // fine note slide down eff = 0x54; break; case 25: // position jump eff = 0x0B; break; case 30: // fine note slide up eff = 0x55; break; case 27: // play release part eff = 0x4F; op = 3; break; case 28: // set speed eff = 0x0f; break; case 31: // volume stuff { if (op <= 0x40) { eff = 0x0c; op = XModule::vol64to255(op); } else if (op > 0x40 && op <= 0x50) // volslide down { eff = 0x0A; op = (op-0x40); } else if (op > 0x50 && op <= 0x60) // volslide up { eff = 0x0A; op = (op-0x50) << 4; } else if (op > 0x60 && op <= 0x70) // fine volslide down { eff = 0x3B; op = (op-0x60); } else if (op > 0x70 && op <= 0x80) // fine volslide up { eff = 0x3A; op = (op-0x70); } else { #ifdef VERBOSE printf("Unsupported Oktalyzer effect: %i/%i\n", eff, op); #endif eff = op = 0; } break; } default: #ifdef VERBOSE printf("Unsupported Oktalyzer effect: %i/%i\n", eff, op); #endif eff = op = 0; } } mp_sint32 LoaderOKT::load(XMFileBase& f, XModule* module) { // max pattern size mp_ubyte buffer[8192]; module->cleanUp(); // this will make code much easier to read TXMHeader* header = &module->header; TXMInstrument* instr = module->instr; TXMSample* smp = module->smp; TXMPattern* phead = module->phead; // we're already out of memory here if (!phead || !instr || !smp) return MP_OUT_OF_MEMORY; f.read(header->sig, 1, 8); header->speed = 125; header->tempo = 6; header->mainvol = 255; mp_sint32 pc = 0; mp_sint32 sc = 0; while (true) { mp_ubyte ID[4]; mp_uint32 bytesRead = f.read(&ID, 4, 1); if (bytesRead != 4) break; switch (BigEndian::GET_DWORD(ID)) { case 0x434D4F44: // 'CMOD' { f.read(buffer, 4, 1); if (BigEndian::GET_DWORD(buffer) != 8) return MP_LOADER_FAILED; for (mp_sint32 i = 0; i < 4; i++) { f.read(buffer, 2, 1); if (!BigEndian::GET_WORD(buffer)) header->channum++; else header->channum+=2; } break; } case 0x53414D50: // 'SAMP' { f.read(buffer, 4, 1); header->insnum = BigEndian::GET_DWORD(buffer) / 32; mp_sint32 s = 0; for (mp_sint32 i = 0; i < header->insnum; i++) { f.read(buffer, 1, 32); memcpy(instr[i].name, buffer, 20); if (BigEndian::GET_DWORD(buffer+20)) { instr[i].samp = 1; memcpy(smp[s].name, buffer, 20); smp[s].samplen = BigEndian::GET_DWORD(buffer+20); smp[s].loopstart = BigEndian::GET_WORD(buffer+24) << 1; smp[s].looplen = BigEndian::GET_WORD(buffer+26) << 1; smp[s].vol = XModule::vol64to255(BigEndian::GET_WORD(buffer+29)); smp[s].flags = 1; if (smp[s].looplen > 2) smp[s].type = 1; for (mp_sint32 j = 0; j < 120; j++) instr[i].snum[j] = s; s++; } header->smpnum = s; } break; } case 0x53504545: // 'SPEE' { f.read(buffer, 4, 1); if (BigEndian::GET_DWORD(buffer) != 2) return MP_LOADER_FAILED; f.read(buffer, 2, 1); header->tempo = BigEndian::GET_WORD(buffer); break; } case 0x534C454E: // 'SLEN' { f.read(buffer, 4, 1); if (BigEndian::GET_DWORD(buffer) != 2) return MP_LOADER_FAILED; f.read(buffer, 2, 1); header->patnum = BigEndian::GET_WORD(buffer); break; } case 0x504C454E: // 'PLEN' { f.read(buffer, 4, 1); if (BigEndian::GET_DWORD(buffer) != 2) return MP_LOADER_FAILED; f.read(buffer, 2, 1); header->ordnum = BigEndian::GET_WORD(buffer); break; } case 0x50415454: // 'PATT' { f.read(buffer, 4, 1); if (BigEndian::GET_DWORD(buffer) > 256) return MP_LOADER_FAILED; f.read(header->ord, 1, BigEndian::GET_DWORD(buffer)); break; } case 0x50424F44 : // 'PBOD' { f.read(buffer, 4, 1); mp_sint32 chunkLen = BigEndian::GET_DWORD(buffer); mp_sint32 i = pc; if (chunkLen) { f.read(buffer, 1, chunkLen); phead[i].rows = BigEndian::GET_WORD(buffer); phead[i].effnum = 1; phead[i].channum = (mp_ubyte)header->channum; phead[i].patternData = new mp_ubyte[phead[i].rows*header->channum * (phead[i].effnum * 2 + 2)]; // out of memory? if (phead[i].patternData == NULL) { return MP_OUT_OF_MEMORY; } memset(phead[i].patternData,0,phead[i].rows*header->channum * (phead[i].effnum * 2 + 2)); mp_ubyte* pattern = buffer+2; mp_sint32 r,c,cnt = 0; mp_sint32 offs = 0; for (r = 0; r < phead[i].rows; r++) { for (c = 0; c < header->channum;c++) { mp_ubyte note = pattern[cnt]; if (note) note+=12*3; mp_ubyte ins = pattern[cnt+1]; if (note) ins++; else ins = 0; mp_ubyte eff = pattern[cnt+2]; mp_ubyte op = pattern[cnt+3]; convertOKTEffects(eff, op); #ifdef VERBOSE if (pattern[cnt+2] && !eff) { printf("Pattern: %i, %i, %i\n", i, c, r); } #endif phead[i].patternData[offs] = note; phead[i].patternData[offs+1] = ins; phead[i].patternData[offs+2] = eff; phead[i].patternData[offs+3] = op; offs+=(phead[i].effnum * 2 + 2); cnt+=4; } } } else // empty pattern { phead[i].rows = 64; phead[i].effnum = 1; phead[i].channum = (mp_ubyte)header->channum; phead[i].patternData = new mp_ubyte[phead[i].rows*header->channum * (phead[i].effnum * 2 + 2)]; // out of memory? if (phead[i].patternData == NULL) { return MP_OUT_OF_MEMORY; } memset(phead[i].patternData,0,phead[i].rows*header->channum * (phead[i].effnum * 2 + 2)); } pc++; break; } case 0x53424F44 : // 'SBOD' { f.read(buffer, 4, 1); mp_sint32 sampLen = BigEndian::GET_DWORD(buffer); mp_uint32 allocMem = sampLen; if (smp[sc].samplen > allocMem) allocMem = smp[sc].samplen; smp[sc].sample = (mp_sbyte*)module->allocSampleMem(allocMem); memset(smp[sc].sample, 0, allocMem); if (smp[sc].sample == NULL) { return MP_OUT_OF_MEMORY; } if (!module->loadSample(f,smp[sc].sample,sampLen,sampLen)) { return MP_OUT_OF_MEMORY; } sc++; } } } strcpy(header->tracker,"Oktalyzer"); module->setDefaultPanning(); module->postProcessSamples(); return MP_OK; } MilkyTracker-1.02.00/src/milkyplay/LoaderPLM.cpp000066400000000000000000000352571324432207300213540ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * LoaderPLM.cpp * MilkyPlay Module Loader: DisorderTracker PLM Loader * * -------------------------------- * Version History: * -------------------------------- * 02/24/05: Added a flag in the sample field (bit 2 = 4) to take the sample * volume as channel mastervolume (see PlayerSTD.h) * 11/22/04: Position jump (tested) & pattern break (untested) support * 11/21/04: Overlapping patterns * 11/19/04: First work */ #include "Loaders.h" #define PATTERNSIZE 64 struct TOrdHdr { mp_uword startPos; mp_ubyte startChannel; mp_ubyte patternIndex; }; const char* LoaderPLM::identifyModule(const mp_ubyte* buffer) { // check for .PLM module first if (!memcmp(buffer,"PLM\x1A",4)) { return "PLM"; } // this is not an .PLM return NULL; } ////////////////////////////////////////////////////// // Load DisorderTracker II module ////////////////////////////////////////////////////// mp_sint32 LoaderPLM::load(XMFileBase& f, XModule* module) { mp_sint32 i,j; module->cleanUp(); // this will make code much easier to read TXMHeader* header = &module->header; TXMInstrument* instr = module->instr; TXMSample* smp = module->smp; TXMPattern* phead = module->phead; // we're already out of memory here if (!phead || !instr || !smp) return MP_OUT_OF_MEMORY; /////////////////////////////////////////////////// // read header /////////////////////////////////////////////////// f.read(header->sig,1,3); f.readByte(); mp_uint32 hdrSize = f.readByte(); mp_ubyte ver = f.readByte(); if (ver != 0x10) return MP_LOADER_FAILED; f.read(header->name, 1, 32); // skip remaining bytes from the song name f.readDword(); // 36 f.readDword(); // 40 f.readDword(); // 44 f.readDword(); // 48 => skipped rest of song name :) header->channum = f.readByte(); f.readByte(); // doc says ignore flags byte mp_ubyte maxVol = f.readByte(); f.readByte(); // skip soundblaster amplify header->speed = f.readByte(); header->tempo = f.readByte(); // panning positions for (i = 0; i < 32; i++) header->pan[i] = (mp_ubyte)XModule::pan15to255(f.readByte()); header->smpnum = header->insnum = f.readByte(); mp_sint32 numPatterns = f.readByte(); mp_sint32 numOrders = f.readWord(); header->mainvol = 255; /////////////////////////////////////////////////// // read orderlist, special with PLM /////////////////////////////////////////////////// f.seekWithBaseOffset(hdrSize); TOrdHdr* ordHeaders = new TOrdHdr[numOrders]; for (i = 0; i < numOrders; i++) { ordHeaders[i].startPos = f.readWord(); ordHeaders[i].startChannel = f.readByte(); ordHeaders[i].patternIndex = f.readByte(); /*printf("%x, %i, %i, %i\n",f.posWithBaseOffset(), ordHeaders[i].startPos, ordHeaders[i].startChannel, ordHeaders[i].patternIndex); getch();*/ } mp_uint32* patOffsets = new mp_uint32[numPatterns]; mp_uint32* smpOffsets = new mp_uint32[header->insnum]; f.readDwords(patOffsets, numPatterns); f.readDwords(smpOffsets, header->insnum); /////////////////////////////////////////////////// // read patterns /////////////////////////////////////////////////// mp_ubyte* patterns[256]; for (i = 0; i < numPatterns; i++) { if (patOffsets[i] != 0) { f.seekWithBaseOffset(patOffsets[i]); mp_uint32 size = f.readDword(); patterns[i] = new mp_ubyte[size]; if (patterns[i] == NULL) { for (j = 0; j < i; j++) delete[] patterns[j]; delete[] smpOffsets; delete[] patOffsets; delete[] ordHeaders; return MP_OUT_OF_MEMORY; } f.read(patterns[i], 1, size); } else { patterns[i] = NULL; } } /////////////////////////////////////////////////// // read instruments (+samples) /////////////////////////////////////////////////// /* Sample layout: id 4 bytes 0 ; ID (PLS+28) headersize 1 byte 4 ; size of header in bytes, including ID etc version 1 byte 5 fullname 32 byte 6 ; NOT asciiz filename 12 byte 38 ; ditto pan byte 50 ; default pan, 0..f, >f=none vol byte 51 ; default vol 0..40h flags byte 52 ; 1 = 16 bit , 0=8 bit c4spd word 53 ; c4spd (as for S3M) gusloc dword 55 ; posn in gusram (not used in file) loopst dword 59 ; loopstart loopen dword 63 ; loopend len dword 67 ; data size IN BYTES data lots of bytes ; unsigned data*/ for (i = 0; i < header->insnum; i++) { if (!smpOffsets[i]) continue; f.seekWithBaseOffset(smpOffsets[i]); mp_uint32 id = f.readDword(); if (id != 0x1a534c50) { for (j = 0; j < numPatterns; j++) delete[] patterns[j]; delete[] smpOffsets; delete[] patOffsets; delete[] ordHeaders; return MP_LOADER_FAILED; } mp_uint32 sHdrSize = f.readByte(); mp_ubyte ver = f.readByte(); f.read(instr[i].name, 1, 32); f.read(smp[i].name, 1, 12); mp_ubyte pan = f.readByte(); smp[i].flags = 4; if (pan <= 0xf) { smp[i].pan = (mp_ubyte)XModule::pan15to255(pan); smp[i].flags|=2; } mp_ubyte vol = f.readByte(); smp[i].vol = vol <= 64 ? XModule::vol64to255(vol) : 255/*0xff*/; mp_ubyte flags = f.readByte(); smp[i].type = (flags&1)?16:0; XModule::convertc4spd(f.readWord(), &smp[i].finetune, &smp[i].relnote); f.readDword(); // skip guspos smp[i].loopstart = f.readDword(); //smp[i].looplen = f.readDword(); mp_sint32 looplen = ((mp_sint32)f.readDword() - (mp_sint32)smp[i].loopstart) - ((flags&1)?2:1); if (looplen < 0) looplen = 0; smp[i].looplen = looplen; if (smp[i].looplen) { smp[i].type = (flags & 2) ? 2 : 1; } smp[i].samplen = f.readDword(); #ifdef VERBOSE printf("%i: %i, %i, %x\n",i+1,vol,flags,smp[i].samplen); #endif if (smp[i].samplen) { instr[i].samp = 1; for (j = 0; j < 120; j++) { instr[i].snum[j] = i; } smp[i].sample = (mp_sbyte*)module->allocSampleMem(smp[i].samplen); if (smp[i].sample == NULL) { for (j = 0; j < numPatterns; j++) delete[] patterns[j]; delete[] smpOffsets; delete[] patOffsets; delete[] ordHeaders; return MP_OUT_OF_MEMORY; } if (flags&1) { module->loadSample(f, smp[i].sample, smp[i].samplen, smp[i].samplen>>1, XModule::ST_UNSIGNED); smp[i].samplen>>=1; } else { module->loadSample(f, smp[i].sample, smp[i].samplen, smp[i].samplen, XModule::ST_UNSIGNED); // due to some bug in DT2 it seems all samples are starting with // signed byte -47 // we're trying to apply some correction to that if (smp[i].samplen) smp[i].sample[0] = smp[i].sample[1]; } } } delete[] smpOffsets; delete[] patOffsets; /////////////////////////////////////////////////// // convert song /////////////////////////////////////////////////// mp_sint32 maxLen = 0; for (i = 0; i < numOrders; i++) { j = ordHeaders[i].patternIndex; if (patterns[j] != NULL) { mp_sint32 rows = *patterns[j]; if ((ordHeaders[i].startPos + rows) > maxLen) maxLen = ordHeaders[i].startPos + rows; } } mp_sint32 numConvertedPatterns = maxLen / PATTERNSIZE; mp_sint32 lastPatternLength = maxLen & (PATTERNSIZE-1); if (lastPatternLength) numConvertedPatterns++; if (numConvertedPatterns > 255) numConvertedPatterns = 255; #ifdef VERBOSE printf("Number of rows in song %i => %i patterns\n", maxLen, numConvertedPatterns); #endif header->patnum = numConvertedPatterns; header->ordnum = numConvertedPatterns; mp_uint32 rowCnt = 0; mp_uword* ordTable = new mp_uword[65536]; for (i = 0; i < numConvertedPatterns; i++) { header->ord[i] = i; phead[i].rows = PATTERNSIZE; phead[i].effnum = 3; phead[i].channum = (mp_ubyte)header->channum; phead[i].patternData = new mp_ubyte[phead[i].rows*header->channum*8]; memset(phead[i].patternData, 0, phead[i].rows*header->channum*8); // find possible hits within this pattern mp_sint32 numResults = 0; for (j = 0; j < numOrders; j++) { // valid pattern? if (patterns[ordHeaders[j].patternIndex] != NULL) { // pattern intersection scenario if ((mp_uint32)ordHeaders[j].startPos+(mp_uint32)*patterns[ordHeaders[j].patternIndex] < rowCnt || ordHeaders[j].startPos > (rowCnt+PATTERNSIZE)) { continue; } ordTable[numResults++] = j; } } for (mp_sint32 rows = 0; rows < PATTERNSIZE; rows++) { for (mp_sint32 c = 0; c < header->channum; c++) { mp_sint32 lastStartPos = -1; mp_sint32 lastIndex = -1; mp_sint32 theIndex = -1; for (j = 0; j < numResults/*numOrders*/; j++) { mp_sint32 index = ordTable[j]; //mp_sint32 index = j; if (ordHeaders[index].startPos <= rowCnt && ((mp_uint32)ordHeaders[index].startPos + (mp_uint32)*patterns[ordHeaders[index].patternIndex]) > rowCnt && ordHeaders[index].startChannel <= c && ordHeaders[index].startChannel + *(patterns[ordHeaders[index].patternIndex]+1) > c /*&& ordHeaders[index].startPos >= lastStartPos*/) { if (ordHeaders[index].startPos == lastStartPos) { if (ordHeaders[index].patternIndex > lastIndex) { theIndex = index; lastIndex = ordHeaders[index].patternIndex; lastStartPos = ordHeaders[index].startPos; } } else { theIndex = index; lastIndex = ordHeaders[index].patternIndex; lastStartPos = ordHeaders[index].startPos; } } } if (theIndex != -1) { // position within pattern mp_sint32 baseRow = rowCnt - ordHeaders[theIndex].startPos; mp_sint32 numChannels = *(patterns[ordHeaders[theIndex].patternIndex]+1); mp_ubyte* pattern = patterns[ordHeaders[theIndex].patternIndex]+28; mp_ubyte* srcSlot = pattern + ((c-ordHeaders[theIndex].startChannel)*5 + baseRow*numChannels*5); mp_ubyte* dstSlot = phead[i].patternData + (c*8 + rows*header->channum*8); mp_ubyte note = srcSlot[0]; mp_ubyte ins = srcSlot[1]; mp_ubyte vol = srcSlot[2]; mp_ubyte eff = srcSlot[3]; mp_ubyte op = srcSlot[4]; dstSlot[0] = note ? (((note>>4)*12+(note&0xf))+1) : 0; dstSlot[1] = ins; if (vol!=255) { dstSlot[2] = 0xC; dstSlot[3] = vol<=64 ? XModule::vol64to255(vol) : 255; } mp_ubyte dstEff = 0; mp_ubyte dstOp = 0; switch (eff) { case 0x00: break; // s3m porta up case 0x01: dstEff = 0x47; dstOp = op; break; // s3m porta down case 0x02: dstEff = 0x48; dstOp = op; break; // porta to note case 0x03: dstEff = 0x03; dstOp = op; break; // s3m volslide case 0x04: dstEff = 0x49; dstOp = op; break; case 0x05: dstEff = 0x07; dstOp = op; break; case 0x06: dstEff = 0x04; dstOp = op; break; case 0x07: dstEff = 0x37; dstOp = op; break; case 0x08: dstEff = 0x34; dstOp = op; break; case 0x09: dstEff = 0x16; dstOp = op; break; case 0x0A: dstEff = 0x1C; dstOp = op; break; // position jump case 0x0B: dstEff = 0x2B; dstOp = (ordHeaders[op].startPos / PATTERNSIZE); dstSlot[7] = ordHeaders[op].startPos & (PATTERNSIZE-1); break; // pattern break case 0x0C: dstEff = 0x2B; dstOp = ((ordHeaders[theIndex+1].startPos+op) / PATTERNSIZE); dstSlot[7] = (ordHeaders[theIndex+1].startPos+op) & (PATTERNSIZE-1); break; case 0x0D: dstEff = 0x09; dstOp = op; break; case 0x0E: dstEff = 0x08; dstOp = (mp_ubyte)XModule::pan15to255(op); break; case 0x0F: dstEff = 0x1B; dstOp = op; break; case 0x10: dstEff = 0x3D; dstOp = op; break; case 0x11: dstEff = 0x3C; dstOp = op; break; case 0x12: dstEff = 0x3E; dstOp = op; break; case 0x13: dstEff = 0x4A; dstOp = op; break; case 0x14: dstEff = 0x6; dstOp = op; break; case 0x15: dstEff = 0x5; dstOp = op; break; case 0x16: dstEff = 0x8; dstOp = op; break; #ifdef VERBOSE default: printf("%x:%x\n",eff,op); #endif } dstSlot[4] = dstEff; dstSlot[5] = dstOp; #ifdef VERBOSE if (c >= 0x02 && c < 0x3 && rowCnt >= 0xA0 && rowCnt <= 0xB0) { printf("row %i: %i, %i, %i, %x, %x (source: %i, %i, %i)\n",rowCnt,srcSlot[0],srcSlot[1],srcSlot[2],srcSlot[3],srcSlot[4],ordHeaders[theIndex].patternIndex,ordHeaders[theIndex].startChannel,numChannels); } #endif } } rowCnt++; } } delete[] ordTable; for (j = 0; j < numPatterns; j++) delete[] patterns[j]; delete[] ordHeaders; strcpy(header->tracker,"DisorderTracker 2"); // take panning positions from start //module->setDefaultPanning(); module->postProcessSamples(true); return MP_OK; } MilkyTracker-1.02.00/src/milkyplay/LoaderPSM.cpp000066400000000000000000000675211324432207300213620ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * LoaderPSM.cpp * MilkyPlay Module Loader: Version 1/2 of Epic MegaGames MASI */ #include "Loaders.h" #include static bool PATTTest(mp_ubyte* p, mp_sint32& size) { if (p[0] != 'P') return false; // type Pxxx if (p[1] != 'A') { if (p[1] < '0' || p[1] > '9') return false; if ((p[2] < '0' || p[2] > '9') && p[2] != ' ') return false; if ((p[3] < '0' || p[3] > '9') && p[3] != ' ') return false; size = 4; return true; } // type PATTxxxx else { if (p[2] != 'T' || p[3] != 'T') return false; if (p[4] < '0' || p[4] > '9') return false; if ((p[5] < '0' || p[5] > '9') && p[5] != ' ') return false; if ((p[6] < '0' || p[6] > '9') && p[6] != ' ') return false; if ((p[7] < '0' || p[7] > '9') && p[7] != ' ') return false; size = 8; return true; } } #define RELEASE_PATTERNS { \ for (mp_sint32 i = 0; i < 1024; i++) \ if (patterns[i]) \ { \ delete[] patterns[i]; \ patterns[i] = NULL; \ } \ delete[] patterns; \ } const char* LoaderPSMv2::identifyModule(const mp_ubyte* buffer) { // check for .PSM (new) module if (!memcmp(buffer,"PSM\x20",4)) { return "PSMv2"; } // this is not an .PSM return NULL; } mp_sint32 LoaderPSMv2::load(XMFileBase& f, XModule* module) { module->cleanUp(); // this will make code much easier to read TXMHeader* header = &module->header; TXMInstrument* instr = module->instr; TXMSample* smp = module->smp; TXMPattern* phead = module->phead; // we're already out of memory here if (!phead || !instr || !smp) return MP_OUT_OF_MEMORY; // size for 1024 patterns // should be enough, really mp_ubyte** patterns = new mp_ubyte*[1024]; if (patterns == NULL) return MP_OUT_OF_MEMORY; mp_uint32* patternSizes = new mp_uint32[1024]; if (patternSizes == NULL) { delete[] patterns; return MP_OUT_OF_MEMORY; } for (mp_sint32 j = 0; j < 1024; j++) patterns[j] = NULL; memset(patternSizes,0,1024*sizeof(mp_uint32)); //mp_uint32 songSize = 0; mp_uint32 patIndex = 0; mp_uint32 insIndex = 0; mp_uint32 smpIndex = 0; mp_ubyte* songSignature = NULL; mp_uint32 signatureSize = 0; bool sinaria = false; while (true) { mp_ubyte ID[4]; mp_uint32 bytesRead = f.read(&ID,4,1); if (bytesRead != 4) break; switch (LittleEndian::GET_DWORD(ID)) { // 'PSM ' case 0x204d5350: memcpy(header->sig,"PSM",3); f.readDword(); // consume chunk size (song size) break; // 'FILE' case 0x454c4946: // just eat ID break; // 'SDFT' case 0x54464453: // whatever this is signatureSize = f.readDword(); // get chunk size delete[] songSignature; songSignature = new mp_ubyte[signatureSize]; // typically size is 8 and buffer will contain "MAINSONG" f.read(songSignature,1,signatureSize); break; // 'TITL' case 0x4c544954: // title chunk... song contains title { mp_uint32 size = f.readDword(); // get chunk size mp_ubyte* buffer = new mp_ubyte[size]; f.read(buffer,1,size); // just make sure title fits into our name field if (size > sizeof(header->name)) size = sizeof(header->name); memcpy(header->name,buffer,size); delete[] buffer; break; } // 'PBOD' case 0x444f4250: // pattern chunk { mp_uint32 size = f.readDword(); // get chunk size patterns[patIndex] = new mp_ubyte[size]; patternSizes[patIndex] = size; f.read(patterns[patIndex++],1,size); break; } // 'SONG' case 0x474E4F53: // song chunk { f.readDword(); // consume chunk size mp_ubyte buffer[9]; f.read(buffer,1,8); buffer[8] = '\0'; /*if (memcmp(buffer,songSignature,signatureSize)!=0) { printf("Something went wrong here!"); exit(0); } delete buffer;*/ #ifdef VERBOSE printf("Song (pos: %i): %s\n",header->ordnum,buffer); #endif f.readByte(); // what's this? f.readByte(); // what's this? mp_ubyte numchannels = f.readByte(); if (numchannels > header->channum) header->channum = numchannels; break; } // 'OPLH' case 0x484c504f: { mp_uint32 size = f.readDword(); // the following is a little bit messy, but i dunno all the fields // so the data i'll need is looked up by a brute force search mp_ubyte* buffer = new mp_ubyte[size]; f.read(buffer,1,size); bool helperPattern = false; mp_uint32 i = 0; for (;;) { if (buffer[i] == 0x07 && buffer[i+2] == 0x08) { i++; if (header->ordnum == 0) { header->tempo = buffer[i]; // tickspeed header->speed = buffer[i+2]; // BPM } // if there are more then 1 songs contained in the file we need to create a little // helper pattern to set speed and tempo for that particular song else { char patSig[10]; sprintf(patSig, "P%i ", patIndex % 999); patterns[patIndex] = new mp_ubyte[20]; memset(patterns[patIndex],0,20); memcpy(patterns[patIndex]+4, patSig, 4); patternSizes[patIndex] = 20; mp_ubyte* pattern = patterns[patIndex]; pattern[0] = 0xFF; pattern[1] = 0xFF; pattern[2] = 0xFF; pattern[3] = 0xFF; pattern[8] = 0x01; // just one row pattern[10] = 0x0A; // 10 bytes in size pattern[12] = 0x10; // read effect + operand pattern[13] = 0x00; // channel 0 and pattern[14] = 0x3E; // set BPM pattern[15] = buffer[i+2]; pattern[16] = 0x10; // read effect + operand pattern[17] = 0x01; // channel 1 pattern[18] = 0x3D; // set speed pattern[19] = buffer[i]; helperPattern = true; patIndex++; } break; } i++; if (i >= size) break; } mp_sint32 patIDSize = 0; while (!PATTTest(buffer+i+1, patIDSize) && i < size) i++; if (patIDSize == 8) sinaria = true; // hier lief was schief if (i >= size || (patIDSize != 4 && patIDSize != 8)) { delete[] buffer; RELEASE_PATTERNS; return MP_LOADER_FAILED; } //header->ordnum = 0; // place helper pattern right before the song if (header->ordnum != 0 && helperPattern) header->ord[header->ordnum++] = patIndex-1; while (buffer[i+1]=='P' && i < (size-5)) { for (mp_uint32 j = 0; j < patIndex; j++) { if (memcmp(buffer+i+1,patterns[j]+4,patIDSize) == 0) { header->ord[header->ordnum] = j; break; } } i+=patIDSize+1; header->ordnum++; } delete[] buffer; break; } // 'DATE' case 0x45544144: // date chunk (ASCII string) // 'PPAN' case 0x4E415050: // panning found in sinaria PSM modules // 'PATT' case 0x54544150: // list of used patterns? pretty useless to me... // 'DSAM' case 0x4d415344: // another useless chunk... { mp_uint32 size = f.readDword(); // read and discard mp_ubyte* buffer = new mp_ubyte[size]; f.read(buffer,1,size); delete[] buffer; break; } // 'DSMP' case 0x504d5344: { mp_uint32 size = f.readDword(); mp_uint32 infoSize = size>96 ? 96:size; // read sample info first mp_ubyte* buffer = new mp_ubyte[infoSize]; f.read(buffer,1,infoSize); if (infoSize == 96) { mp_sint32 offsetName = 13; mp_sint32 offsetSamplen = 54; mp_sint32 offsetLoopstart = 58; mp_sint32 offsetLoopEnd = 62; mp_sint32 offsetVolume = 68; mp_sint32 offsetC4spd = 73; if (sinaria) { offsetName += 4; offsetSamplen += 4; offsetLoopstart += 4; offsetLoopEnd += 4; offsetVolume += 5; offsetC4spd += 5; } memcpy(instr[insIndex].name, buffer+offsetName, 24); if (size > 96) { instr[insIndex].samp = 1; // one sample used for (mp_sint32 j = 0; j < 120; j++) instr[insIndex].snum[j] = smpIndex; // build sample table smp[smpIndex].samplen = (mp_sint32)LittleEndian::GET_DWORD(buffer+offsetSamplen); // sample size smp[smpIndex].loopstart = (mp_sint32)LittleEndian::GET_DWORD(buffer+offsetLoopstart); // loop start smp[smpIndex].looplen = ((mp_sint32)LittleEndian::GET_DWORD(buffer+offsetLoopEnd)) - ((mp_sint32)LittleEndian::GET_DWORD(buffer+offsetLoopstart))+1; // loop length mp_sint32 finetune = 0; if (sinaria) finetune = buffer[offsetVolume-1] & 0xf; smp[smpIndex].vol = module->vol127to255(buffer[offsetVolume]); // volume smp[smpIndex].flags = 1; // set volume flag if (buffer[0] & 0x80) { smp[smpIndex].type = 1; // looped sample // correct looplen if necessary if ((smp[smpIndex].loopstart+smp[smpIndex].looplen)>smp[smpIndex].samplen) smp[smpIndex].looplen-=(smp[smpIndex].loopstart+smp[smpIndex].looplen)-smp[smpIndex].samplen; } mp_uint32 c4speed = (mp_uword)LittleEndian::GET_WORD(buffer+offsetC4spd); mp_uint32 ftC4Speed = module->sfinetunes[finetune]; module->convertc4spd(c4speed*ftC4Speed/8448, &smp[smpIndex].finetune,&smp[smpIndex].relnote); //module->convertc4spd((mp_uword)LittleEndian::GET_WORD(buffer+offsetC4spd),&smp[smpIndex].finetune,&smp[smpIndex].relnote); ASSERT(smp[smpIndex].samplen+96 == size); if (module->loadModuleSample(f, smpIndex, XModule::ST_DELTA) != 0) { delete[] buffer; RELEASE_PATTERNS; return MP_OUT_OF_MEMORY; } //if (sinaria) //{ // if (smp[smpIndex].samplen > 2) // smp[smpIndex].samplen-=2; // if (smp[smpIndex].looplen > 2) // smp[smpIndex].looplen-=2; //} smpIndex++; } insIndex++; } delete[] buffer; break; } default: #ifdef VERBOSE printf("Unknown chunk: %X\n",ID); #endif return MP_LOADER_FAILED; break; } } if (songSignature) delete[] songSignature; mp_ubyte* pattern = new mp_ubyte[32*256*5]; if (pattern == NULL) { RELEASE_PATTERNS; return MP_OUT_OF_MEMORY; } for (mp_uint32 i = 0; i < patIndex; i++) { for (mp_sint32 j = 0; j < 32*256; j++) { pattern[j*5] = 0xFF; pattern[j*5+1] = 0xFF; pattern[j*5+2] = 0xFF; pattern[j*5+3] = 0; pattern[j*5+4] = 0; } mp_sint32 patIDSize = 0; if (!PATTTest(patterns[i]+4, patIDSize)) { RELEASE_PATTERNS; return MP_LOADER_FAILED; } mp_sint32 offset = 6+patIDSize; mp_ubyte* packed = patterns[i]+offset; mp_uint32 index = 0; mp_uint32 row = 0; mp_uint32 maxChannels = 0; while (index<(patternSizes[i]-offset)) { mp_uint32 size = ((mp_uword)LittleEndian::GET_WORD(packed+index))-2; index+=2; // advance pointer mp_uint32 dstIndex = index+size; if (size) { do { mp_ubyte pi = packed[index++]; mp_uint32 chn = packed[index++]; if (chn>maxChannels) maxChannels = chn; mp_ubyte* slot = pattern+(row*32*5)+chn*5; // note if (pi & 0x80) { mp_ubyte note = packed[index++]; // key off note if (note == 255) note = 254; else if (patIDSize == 8) { note = ((note+23) / 12) * 16 + (((note+23)) % 12); } slot[0] = note; } // instrument if (pi & 0x40) { slot[1] = packed[index++]; } // volume if (pi & 0x20) { slot[2] = packed[index++]; } // effect & operand if (pi & 0x10) { slot[3] = packed[index++]; slot[4] = packed[index++]; if (slot[3] == 0x29) { slot[4] = packed[index+=2]; } else if (slot[3] == 0x2D) { slot[4] = packed[index+=3]; } } } while (index < dstIndex); #ifdef VERBOSE if (index!=dstIndex) printf("nagnag "); #endif } row++; } delete[] patternSizes; maxChannels++; if (maxChannels > header->channum) maxChannels = header->channum; // convert pattern here: phead[i].rows = (mp_uword)LittleEndian::GET_WORD(patterns[i]+offset-2); phead[i].effnum = 3; phead[i].channum = maxChannels; phead[i].patternData = new mp_ubyte[phead[i].rows*maxChannels*8]; if (phead[i].patternData == NULL) { delete[] pattern; RELEASE_PATTERNS; return MP_OUT_OF_MEMORY; } memset(phead[i].patternData,0,maxChannels*8*phead[i].rows); mp_ubyte* dstSlot = phead[i].patternData; for (row = 0; row < phead[i].rows; row++) { for (mp_uint32 c = 0; c < maxChannels; c++) { const mp_ubyte* srcSlot = pattern+row*32*5+c*5; mp_ubyte note = srcSlot[0]; mp_ubyte finalNote = 0; if (note<254) { finalNote = ((note>>4)*12+(note&0x0f))+1; if (finalNote>120) { #ifdef VERBOSE printf("Wrong note: %i",finalNote); #endif finalNote = 0; } } else if (note==254) { finalNote = 122; // key off, s3m style } dstSlot[0] = finalNote; if (srcSlot[1] != 0xFF) dstSlot[1] = srcSlot[1]+1; if (srcSlot[2]<=128) { dstSlot[2] = 0xC; dstSlot[3] = XModule::vol127to255(srcSlot[2]); } mp_ubyte eff = srcSlot[3]; mp_ubyte op = srcSlot[4]; switch (eff) { // set sample offset case 0x29: eff = 0x09; break; // set BPM case 0x3D: eff = 0x1C; break; // set tickspeed case 0x3E: eff = 0x16; break; // pattern break case 0x34: eff = 0x0D; break; // vibrato case 0x15: eff = 0x04; break; // tone porta case 0x0F: eff = 0x03; break; // arpeggio case 0x47: eff = 0x20; break; // portamento up case 0x0C: eff = 0x4D; break; // portamento down case 0x0E: eff = 0x4E; break; // volume slide up = MDL volslide up case 02: eff = 0x45; op<<=1; break; // volume slide down = MDL volslide down case 04: eff = 0x46; op<<=1; break; // extra fine volume slide up case 01: eff = 0x4B; op<<=1; break; // extra fine volume slide down case 03: eff = 0x4C; op<<=1; break; // retrig note case 0x2A: eff = 0x1B; break; // fine portamento up case 11: eff = 0x31; break; // fine portamento down case 13: eff = 0x32; break; // note-cut case 0x2B: eff = 0x3C; break; // note-delay case 0x2C: eff = 0x3D; break; // jump loop case 0x35: eff = 0x36; break; // pattern delay case 0x36: eff = 0x3E; break; // position jump case 50: eff = 0x0B; break; /*// tone porta + volslide case 17: eff = 0x05; if (op) op >>= 1; break;*/ // tone porta + volslide up case 16: dstSlot[6] = 0x45; dstSlot[7] = op<<1; eff = 0x03; op = 0; break; // tone porta + volslide down case 17: dstSlot[6] = 0x46; dstSlot[7] = op<<1; eff = 0x03; op = 0; break; // vibrato + volslide up case 0x17: dstSlot[6] = 0x45; dstSlot[7] = op<<1; eff = 0x04; op = 0; break; // vibrato + volslide down case 0x18: dstSlot[6] = 0x46; dstSlot[7] = op<<1; eff = 0x04; op = 0; break; // tremolo case 0x1F: eff = 0x07; break; // set panning case 0x49: eff = 0x08; break; default: #ifdef VERBOSE if (eff != 0) { printf("%i, %x, %x\n",i,eff,op); } #endif //eff = op = 0; break; } //eff = op = 0; /*if (i == 13 && c == 0) { printf("%x, %x, %x, %x\n",finalNote,dstSlot[1],eff,op); }*/ dstSlot[4] = eff; dstSlot[5] = op; dstSlot+=8; } } bool dummyPattern = (*(patterns[i]) == 0xFF && *(patterns[i]+1) == 0xFF && *(patterns[i]+2) == 0xFF && *(patterns[i]+3) == 0xFF); // mark song start with effect 0x1E + operand 0xFF if (dummyPattern && phead[i].rows == 1) { phead[i].patternData[2] = XModule::SubSongMarkEffect; phead[i].patternData[3] = XModule::SubSongMarkOperand; } } delete[] pattern; RELEASE_PATTERNS; header->smpnum = smpIndex; header->insnum = insIndex; header->patnum = patIndex; header->mainvol = 255; module->setDefaultPanning(); module->postProcessSamples(); strcpy(header->tracker,"Epic Megagames MASI "); return MP_OK; } ////////////////////////////////////////////////////////////////////////// // Old epic pinball PSM loader. Not much tested yet // // Warning: This is an one-by-one conversion of an assembler version ;) // ////////////////////////////////////////////////////////////////////////// #define MEMREAD(dst,size,count) \ memcpy(dst,buffer+memPos,size*count); \ memPos+=size*count #define MEMSEEK(position) \ memPos=position; #define MEMADVANCE(amount) \ memPos+=amount; const char* LoaderPSMv1::identifyModule(const mp_ubyte* buffer) { // check for .PSM (old) module if (!memcmp(buffer,"PSM\xFE",4)) { return "PSMv1"; } // this is not an .PSM return NULL; } mp_sint32 LoaderPSMv1::load(XMFileBase& f, XModule* module) { mp_uint32 memPos = 0; module->cleanUp(); // this will make code much easier to read TXMHeader* header = &module->header; TXMInstrument* instr = module->instr; TXMSample* smp = module->smp; TXMPattern* phead = module->phead; // we're already out of memory here if (!phead || !instr || !smp) return MP_OUT_OF_MEMORY; mp_ubyte* buffer = new mp_ubyte[f.sizeWithBaseOffset()]; if (buffer == NULL) return MP_OUT_OF_MEMORY; f.read(buffer,1,f.sizeWithBaseOffset()); MEMSEEK(0); MEMREAD(header->sig, 1, 3); // PSM signature MEMADVANCE(1); MEMREAD(header->name,1,20); // Don't know how long this is actually header->tempo = buffer[67]; // Tickspeed header->speed = buffer[68]; // BPM header->mainvol = 255; header->ordnum = buffer[72]; header->insnum = header->smpnum = buffer[76]; header->patnum = buffer[74]; MEMSEEK((mp_sint32)LittleEndian::GET_DWORD(buffer+82)); MEMREAD(header->ord,1,header->ordnum); MEMSEEK((mp_sint32)LittleEndian::GET_DWORD(buffer+94)); mp_uint32 samplePtrs[256]; mp_uint32 maxInstruments = 0; mp_sint32 i; for (i = 0; i < header->insnum; i++) { mp_ubyte ins[64]; MEMREAD(ins,1,64); // sample size if ((mp_sint32)LittleEndian::GET_DWORD(ins+48) > 0) { mp_uint32 insIndex = ins[45]-1; if (insIndex > maxInstruments) maxInstruments = insIndex; memcpy(smp[i].name,ins,12); memcpy(instr[insIndex].name,ins+13,22); samplePtrs[i] = (mp_sint32)LittleEndian::GET_DWORD(ins+37); // store sample offset instr[insIndex].samp = 1; // one sample used for (mp_sint32 j = 0; j < 120; j++) instr[insIndex].snum[j] = i; // build sample table smp[i].samplen = (mp_sint32)LittleEndian::GET_DWORD(ins+48); // sample size smp[i].loopstart = (mp_sint32)LittleEndian::GET_DWORD(ins+52); // loop start smp[i].looplen = ((mp_sint32)LittleEndian::GET_DWORD(ins+56)) - ((mp_sint32)LittleEndian::GET_DWORD(ins+52)); // loop length smp[i].vol = module->vol64to255(ins[61]); // volume smp[i].flags = 1; // set volume flag if ((mp_sint32)LittleEndian::GET_DWORD(ins+56) > 0 && (ins[47]&0x80)) { smp[i].type = 1; // looped sample } mp_uint32 c4speed = ((mp_uword)LittleEndian::GET_WORD(ins+62)); mp_sint32 finetune = ins[60]&0xf; mp_uint32 ftC4Speed = module->sfinetunes[finetune]; module->convertc4spd(c4speed*ftC4Speed/8363, &smp[i].finetune,&smp[i].relnote); } } maxInstruments++; header->insnum = maxInstruments; MEMSEEK((mp_sint32)LittleEndian::GET_DWORD(buffer+90)); ////////////////////// // read patterns // ////////////////////// mp_ubyte* pattern = new mp_ubyte[256*32*5]; if (pattern == NULL) { delete[] buffer; return MP_OUT_OF_MEMORY; } for (i = 0; i < header->patnum; i++) { for (mp_sint32 j = 0; j < 32*256; j++) { pattern[j*5] = 0x00; pattern[j*5+1] = 0x00; pattern[j*5+2] = 0xFF; pattern[j*5+3] = 0x00; pattern[j*5+4] = 0x00; } mp_uword size; mp_ubyte numRows, numChannels; MEMREAD(&size,2,1); size = LittleEndian::GET_WORD((mp_ubyte*)&size); MEMREAD(&numRows,1,1); MEMREAD(&numChannels,1,1); mp_ubyte* packed = new mp_ubyte[size-4+5]; if (packed == NULL) { delete[] buffer; delete[] pattern; return MP_OUT_OF_MEMORY; } memset(packed,0,size-4+5); MEMREAD(packed,1,size-4); mp_uint32 index = 0; mp_uint32 row = 0; mp_uint32 maxChannels = 0; while (indexmaxChannels) maxChannels = chn; mp_ubyte* slot = pattern+(row*32*5)+chn*5; if (pi & 128) { slot[0] = packed[index++]; slot[1] = packed[index++]; } if (pi & 64) { slot[2] = packed[index++]; } if (pi & 32) { slot[3] = packed[index++]; slot[4] = packed[index++]; } } maxChannels++; if (maxChannels > numChannels) maxChannels = numChannels; if (maxChannels > header->channum) header->channum = maxChannels; delete[] packed; phead[i].rows = numRows; phead[i].effnum = 3; phead[i].channum = maxChannels; phead[i].patternData = new mp_ubyte[phead[i].rows*maxChannels*8]; if (phead[i].patternData == NULL) { delete[] buffer; delete[] pattern; return MP_OUT_OF_MEMORY; } memset(phead[i].patternData,0,maxChannels*8*phead[i].rows); mp_ubyte* dstSlot = phead[i].patternData; for (row = 0; row < phead[i].rows; row++) for (mp_uint32 c = 0; c < maxChannels; c++) { const mp_ubyte* srcSlot = pattern+row*32*5+c*5; mp_ubyte note = srcSlot[0]; if (note && (note!=254)) note+=24; else if (note == 254) note = 122; dstSlot[0] = note; dstSlot[1] = srcSlot[1]; if (srcSlot[2]<=64) { dstSlot[2] = 0xC; dstSlot[3] = XModule::vol64to255(srcSlot[2]); } mp_ubyte eff = srcSlot[3]; mp_ubyte op = srcSlot[4]; switch (eff) { // fine volume slide up case 01: eff = 0x3A; break; // volume slide up = MDL volslide up case 02: eff = 0x45; op<<=2; break; // fine volume slide down case 03: eff = 0x3B; break; // volume slide down = MDL volslide down case 04: eff = 0x46; op<<=2; break; // fine portamento up case 10: eff = 0x31; break; // portamento up case 11: eff = 0x01; break; // fine portamento down case 12: eff = 0x32; break; // portamento down case 13: eff = 0x02; break; // tone porta case 14: eff = 0x03; break; // glissando control case 15: eff = 0x33; break; // tone porta + volslide up case 16: dstSlot[6] = 0x45; dstSlot[7] = op<<2; eff = 0x03; op = 0; break; // tone porta + volslide down case 17: dstSlot[6] = 0x46; dstSlot[7] = op<<2; eff = 0x03; op = 0; break; // vibrato case 20: eff = 0x04; break; // set vibrato waveform case 21: eff = 0x34; break; // vibrato + volslide up case 22: dstSlot[6] = 0x45; dstSlot[7] = op<<2; eff = 0x04; op = 0; break; // vibrato + volslide down case 23: dstSlot[6] = 0x46; dstSlot[7] = op<<2; eff = 0x04; op = 0; break; // tremolo case 30: eff = 0x07; break; // set tremolo waveform case 31: eff = 0x37; break; // set sample offset case 40: eff = 0x09; break; // retrig note case 41: eff = 0x1B; break; // note-cut case 42: eff = 0x3C; break; // note-delay case 43: eff = 0x3D; break; // position jump case 50: eff = 0x0B; break; // pattern break case 51: eff = 0x0D; break; // jump loop case 52: eff = 0x36; break; // pattern delay case 53: eff = 0x3E; break; // set tickspeed case 60: eff = 0x1C; break; // set BPM case 61: eff = 0x16; break; // arpeggio case 70: eff = 0x20; break; // set finetune case 71: eff = 0x35; break; // set panning case 72: eff = 0x08; op*=17; break; default: #ifdef VERBOSE if (eff != 0) { printf("%i, %x, %x\n",i,eff,op); } #endif //eff = op = 0; break; } dstSlot[4] = eff; dstSlot[5] = op; dstSlot+=8; } } /*for (i = 0; i < header->ordnum; i++) printf("%i ",header->ord[i]); header->ord[0] = 0; header->ord[1] = 0; header->ord[2] = 6;*/ delete[] pattern; for (i=0;ismpnum;i++) { MEMSEEK(samplePtrs[i]); smp[i].sample = (mp_sbyte*)module->allocSampleMem(smp[i].samplen); if (smp[i].sample == NULL) { delete[] buffer; return MP_OUT_OF_MEMORY; } MEMREAD(smp[i].sample,1,smp[i].samplen); mp_sbyte b1=0; for (mp_uint32 j = 0; j < smp[i].samplen; j++) smp[i].sample[j] = b1+=smp[i].sample[j]; } delete[] buffer; module->setDefaultPanning(); module->postProcessSamples(); strcpy(header->tracker,"Epic Megagames MASI "); return MP_OK; } MilkyTracker-1.02.00/src/milkyplay/LoaderPTM.cpp000066400000000000000000000235251324432207300213570ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * LoaderPTM.cpp * MilkyPlay Module Loader: PolyTracker */ #include "Loaders.h" const char* LoaderPTM::identifyModule(const mp_ubyte* buffer) { // check for .PTM module if (!memcmp(buffer+44,"PTMF",4)) { return "PTM"; } // this is not an .PTM return NULL; } static mp_sint32 convertPTMPattern(TXMPattern* XMPattern, const mp_ubyte* srcPattern, mp_uint32 maxChannels, mp_sint32 patCnt) { XMPattern->channum = maxChannels; XMPattern->effnum = 2; XMPattern->rows = 64; XMPattern->patternData = new mp_ubyte[maxChannels*6*64]; if (XMPattern->patternData == NULL) { return MP_OUT_OF_MEMORY; } memset(XMPattern->patternData,0,maxChannels*6*64); mp_ubyte* dstSlot = XMPattern->patternData; for (mp_sint32 row = 0; row < 64; row++) for (mp_uint32 c = 0; c < maxChannels; c++) { const mp_ubyte* srcSlot = srcPattern+row*32*5+c*5; dstSlot[0] = (srcSlot[0]==254 ? (mp_ubyte)XModule::NOTE_CUT : srcSlot[0]); dstSlot[1] = srcSlot[1]; if (srcSlot[2]<=64) { dstSlot[2] = 0xC; dstSlot[3] = XModule::vol64to255(srcSlot[2]); } mp_ubyte eff = srcSlot[3]; mp_ubyte op = srcSlot[4]; mp_ubyte nEff = 0; mp_ubyte nOp = 0; switch (eff) { // arpeggio case 0x00: if (op) { nEff = 0x20; nOp = op; } break; // porta up case 0x01: nEff = 0x47; nOp = op; break; // porta down case 0x02: nEff = 0x48; nOp = op; break; // tone porta case 0x03: nEff = 0x03; nOp = op; break; // vibrato case 0x04: nEff = 0x04; nOp = op; break; // tone porta & volslide case 0x05: nEff = 0x05; nOp = op; break; // vibrato & volslide case 0x06: nEff = 0x06; nOp = op; break; // tremolo case 0x07: nEff = 0x07; nOp = op; break; // set sample offset case 0x09: nEff = 0x09; nOp = op; break; // volume slide case 0x0A: nEff = 0x49; nOp = op; break; // Jump to order case 0x0B: nEff = 0x0B; nOp = op; break; // Jump to order case 0x0C: nEff = 0x0C; nOp = XModule::vol64to255(op); break; // Pattern break case 0x0D: nEff = 0x0D; nOp = op; break; // PT subeffects case 0x0E: nEff=(op>>4)+0x30; nOp = op&0xf; if (nEff == 0x38) { nEff = 0x08; nOp<<=4; } break; // Set speed case 0x0F: nEff = 0x0F; nOp = op; break; // set global volume case 0x10: nEff = 0x10; nOp = XModule::vol64to255(op); break; // retrig case 0x11: nEff = 0x1B; nOp = op; break; // fine vibrato case 0x12: nEff = 0x4A; nOp = op; break; default: #ifdef VERBOSE if (eff!=255) { printf("Unsupported command: %x,%x\n",eff,op); } #endif break; } dstSlot[4] = nEff; dstSlot[5] = nOp; dstSlot+=6; } return MP_OK; } mp_sint32 LoaderPTM::load(XMFileBase& f, XModule* module) { mp_ubyte orders[256]; mp_uword patParaPtrs[129]; mp_uint32 samplePtrs[256]; module->cleanUp(); // this will make code much easier to read TXMHeader* header = &module->header; TXMInstrument* instr = module->instr; TXMSample* smp = module->smp; TXMPattern* phead = module->phead; // we're already out of memory here if (!phead || !instr || !smp) return MP_OUT_OF_MEMORY; f.read(&header->name,1,28); header->whythis1a = f.readByte(); if (f.readWord() != 0x203) return MP_LOADER_FAILED; // can't read this one f.readByte(); // skip something header->ordnum = f.readWord(); // number of positions in order list (songlength) header->insnum = f.readWord(); // number of instruments header->smpnum = header->insnum; header->patnum = f.readWord(); // number of patterns if(header->insnum > 256 || header->patnum > 256) return MP_LOADER_FAILED; header->channum = f.readWord(); f.readDword(); f.read(header->sig,1,4); f.readDword(); f.readDword(); f.readDword(); f.readDword(); mp_ubyte channelSettings[32]; f.read(channelSettings,1,32); header->flags = XModule::MODULE_ST3NEWINSTRUMENT; // not sure about this though header->mainvol = 255; // initial main volume header->tempo = 6; // tempo header->speed = 125; // speed f.read(orders,1,256); mp_sint32 i,j; for (i = 0; i < header->ordnum; i++) header->ord[i] = orders[i]; f.readWords(patParaPtrs,128); ////////////////////// // read instruments // ////////////////////// memset(samplePtrs,0,sizeof(mp_uint32)*header->insnum); bool bPatOffsetWorkaround = false; mp_sint32 s = 0; for (i = 0; i < header->insnum; i++) { mp_ubyte type = f.readByte(); f.read(smp[s].name,1,12); // read dos filename smp[s].vol = module->vol64to255(f.readByte()); mp_uint32 c4spd = f.readWord(); module->convertc4spd(c4spd,&smp[s].finetune,&smp[s].relnote); f.readWord(); // stupid fileoffsets samplePtrs[s] = f.readDword(); // pattern size workaround / see ptm doc for details if (samplePtrs[s] && !bPatOffsetWorkaround) { patParaPtrs[header->patnum] = samplePtrs[i]>>4; bPatOffsetWorkaround = true; } mp_sint32 correct = ((type&16)>>4)+1; smp[s].samplen = f.readDword(); smp[s].loopstart = f.readDword(); mp_sint32 looplen = ((mp_sint32)f.readDword() - correct - (mp_sint32)smp[s].loopstart); if (looplen < 0) looplen = 0; smp[s].looplen = looplen; smp[s].flags = 1; smp[s].pan = 0x80; f.readDword(); // skip gus stuff f.readDword(); f.readDword(); f.readByte(); f.readByte(); f.read(instr[i].name,1,28); // instrument name f.readDword(); // should be 0x534d5450, can also be 0 // looping if (type & 4) { if (type & 8) smp[s].type = 2; else smp[s].type = 1; } // 16 bit sample if (type & 16) { smp[s].type |= 16; smp[s].samplen >>= 1; smp[s].loopstart >>= 1; smp[s].looplen >>= 1; } if ((type & 3) && (smp[s].samplen != 0)) { instr[i].samp=1; for (j=0;j<120;j++) instr[i].snum[j] = s; s++; } } header->smpnum = s; ////////////////////// // read patterns // ////////////////////// mp_ubyte* pattern = new mp_ubyte[64*32*5]; if (pattern == NULL) { return MP_OUT_OF_MEMORY; } for (i = 0; i < header->patnum; i++) { for (j = 0; j < 32*64; j++) { pattern[j*5] = 0x00; pattern[j*5+1] = 0; pattern[j*5+2] = 0xFF; pattern[j*5+3] = 0; pattern[j*5+4] = 0; } mp_uint32 patOffs = patParaPtrs[i]*16; mp_uint32 maxChannels = 1; if (patOffs) { f.seekWithBaseOffset(patOffs); mp_sint32 size = (patParaPtrs[i+1]-patParaPtrs[i])<<4; mp_ubyte* packed = new mp_ubyte[size]; if (packed == NULL) { delete[] pattern; return MP_OUT_OF_MEMORY; } f.read(packed,1,size); mp_sint32 index = 0; mp_uint32 row = 0; while (indexmaxChannels) maxChannels = chn; mp_ubyte* slot = pattern+(row*32*5)+chn*5; if (pi & 32) { if (row<64) { slot[0] = packed[index++]; slot[1] = packed[index++]; } else index+=2; } if (pi & 64) { if (row<64) { slot[3] = packed[index++]; slot[4] = packed[index++]; } else index+=2; } if (pi & 128) { if (row<64) slot[2] = packed[index++]; else index++; } } maxChannels++; if (maxChannels > header->channum) maxChannels = header->channum; delete[] packed; } convertPTMPattern(&phead[i],pattern,maxChannels,i); } delete[] pattern; for (i = 0; i < header->smpnum; i++) { mp_uint32 smpOffs = samplePtrs[i]; if (smpOffs) { f.seekWithBaseOffset(smpOffs); mp_sint32 result = module->loadModuleSample(f, i, XModule::ST_DELTA, XModule::ST_16BIT | XModule::ST_DELTA_PTM); if (result != MP_OK) return result; } } strcpy(header->tracker,"Polytracker"); module->setDefaultPanning(); module->postProcessSamples(); return MP_OK; } MilkyTracker-1.02.00/src/milkyplay/LoaderS3M.cpp000066400000000000000000000346671324432207300213320ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * LoaderS3M.cpp * MilkyPlay Module Loader: ScreamTracker 3 */ #include "Loaders.h" const char* LoaderS3M::identifyModule(const mp_ubyte* buffer) { // check for .S3M module if (!memcmp(buffer+0x2C,"SCRM",4)) { return "S3M"; } // this is not an .S3M return NULL; } static mp_sint32 convertS3MPattern(TXMPattern* XMPattern, const mp_ubyte* srcPattern, mp_uint32 maxChannels, mp_sint32 patCnt) { XMPattern->channum = maxChannels; XMPattern->effnum = 2; XMPattern->rows = 64; XMPattern->patternData = new mp_ubyte[maxChannels*6*64]; if (XMPattern->patternData == NULL) { return MP_OUT_OF_MEMORY; } memset(XMPattern->patternData,0,maxChannels*6*64); mp_ubyte* dstSlot = XMPattern->patternData; for (mp_sint32 row = 0; row < 64; row++) for (mp_uint32 c = 0; c < maxChannels; c++) { const mp_ubyte* srcSlot = srcPattern+row*32*5+c*5; mp_ubyte note = srcSlot[0]; mp_ubyte finalNote = 0; if (note<254) { finalNote = ((note>>4)*12+(note&0x0f))+1; if (finalNote>120) { #ifdef VERBOSE printf("Wrong note: %i",finalNote); #endif finalNote = 0; } } else if (note==254) { finalNote = 122; // key off, s3m style } dstSlot[0] = finalNote; dstSlot[1] = srcSlot[1]; if (srcSlot[2]<=64) { //if (note != 254) //{ dstSlot[2] = 0xC; dstSlot[3] = XModule::vol64to255(srcSlot[2]); //} } mp_ubyte eff = srcSlot[3]; mp_ubyte op = srcSlot[4]; /*if (patCnt == 51 && c == 7) { printf("%i, %i\n",srcSlot[0],srcSlot[1]); getch(); }*/ mp_ubyte nEff = 0; mp_ubyte nOp = 0; switch (eff) { // Set speed (ticks) case 0x01: nEff = 0x1C; nOp = op; break; // Jump to order case 0x02: nEff = 0x0B; nOp = op; break; // Pattern break case 0x03: nEff = 0x0D; nOp = op; break; // volume slide case 0x04: nEff = 0x49; nOp = op; break; // porta down case 0x05: nEff = 0x48; nOp = op; break; // porta up case 0x06: nEff = 0x47; nOp = op; break; // tone porta case 0x07: nEff = 0x03; nOp = op; break; // vibrato case 0x08: nEff = 0x04; nOp = op; break; // tremor case 0x09: nEff = 0x1D; nOp = op; break; // arpeggio case 0x0A: nEff = 0x20; nOp = op; break; // vibrato & volslide case 0x0B: nEff = 0x06; nOp = op; break; // tone porta & volslide case 0x0C: nEff = 0x05; nOp = op; break; // set sample offset case 0x0F: nEff = 0x09; nOp = op; break; // retrig case 0x11: nEff = 0x1B; nOp = op; break; // tremolo case 0x12: nEff = 0x07; nOp = op; break; // various subeffects case 0x13: eff = op>>4; op&=0xf; switch (eff) { // set panning case 0x8: nEff = 0x08; nOp = XModule::pan15to255(op); break; // pattern loop case 0xB: nEff = 0x36; nOp = op; break; // note cut case 0xC: nEff = 0x3C; nOp = op; break; // note delay case 0xD: nEff = 0x3D; nOp = op; break; // pattern delay case 0xE: nEff = 0x3E; nOp = op; break; default: #ifdef VERBOSE printf("Unsupported subcommand in Pattern %i, Channel %i, Row %i: %x,%x\n",patCnt,c,row,eff,op); #endif break; } break; // set tempo case 0x14: nEff = 0x16; nOp = op; break; // fine vibrato case 0x15: nEff = 0x4A; nOp = op; break; // set global volume case 0x16: if (op>64) op = 64; nEff = 0x10; nOp = XModule::vol64to255(op); break; // global volume slide (stupid IT/MPT) case 0x17: nEff = 0x59; nOp = op; break; default: #ifdef VERBOSE if (eff!=255) { printf("Unsupported command: %x,%x\n",eff,op); } #endif break; } /*if (patCnt == 3 && c == 6) { printf("%x, %x, %x\n",finalNote,nEff,nOp); }*/ dstSlot[4] = nEff; dstSlot[5] = nOp; dstSlot+=6; } return MP_OK; } static inline mp_ubyte safeRead(const mp_ubyte* buffer, mp_uint32& index, mp_uint32 size, mp_ubyte errorValue = 0) { if (index < size) { return buffer[index++]; } index++; return errorValue; } mp_sint32 LoaderS3M::load(XMFileBase& f, XModule* module) { module->cleanUp(); // this will make code much easier to read TXMHeader* header = &module->header; TXMInstrument* instr = module->instr; TXMSample* smp = module->smp; TXMPattern* phead = module->phead; // we're already out of memory here if (!phead || !instr || !smp) return MP_OUT_OF_MEMORY; f.read(&header->name,1,28); header->whythis1a = f.readByte(); if (f.readByte() != 16) return MP_LOADER_FAILED; // no ST3 module f.readByte(); // skip something f.readByte(); // skip something header->ordnum = f.readWord(); // number of positions in order list (songlength) mp_ubyte* orders = new mp_ubyte[header->ordnum]; if (orders == NULL) return MP_OUT_OF_MEMORY; header->insnum = f.readWord(); // number of instruments header->patnum = f.readWord(); // number of patterns mp_sint32 flags = f.readWord(); // st3 flags mp_sint32 Cvt = f.readWord(); header->flags = XModule::MODULE_ST3NEWINSTRUMENT | XModule::MODULE_ST3DUALCOMMANDS; if (Cvt == 0x1300 || (flags & 64)) header->flags |= module->MODULE_OLDS3MVOLSLIDES; header->flags |= module->MODULE_ST3NOTECUT; /*mp_uword Ffi = */f.readWord(); f.read(header->sig,1,4); header->mainvol = module->vol64to255(f.readByte()); // initial main volume header->tempo = f.readByte(); // tempo header->speed = f.readByte(); // speed f.readByte(); // global volume? skipped... f.readByte(); // ignore GUS click removal /*mp_ubyte dp = */f.readByte(); f.readDword(); // skip something f.readDword(); // skip something f.readWord(); // skip some more... mp_ubyte channelSettings[32]; f.read(channelSettings,1,32); mp_sint32 numChannels = 0; for (numChannels = 0; numChannels < 32; numChannels++) if (channelSettings[numChannels] == 255) break; header->channum = numChannels; // number of channels f.read(orders,1,header->ordnum); mp_sint32 j = 0, i = 0; for (i = 0; i < header->ordnum; i++) { if (orders[i] == 255) break; header->ord[j++] = orders[i]; } header->ordnum = j; // final songlength delete[] orders; mp_uword* insParaPtrs = new mp_uword[header->insnum]; if (insParaPtrs == NULL) return MP_OUT_OF_MEMORY; f.readWords(insParaPtrs,header->insnum); mp_uword* patParaPtrs = new mp_uword[header->patnum]; if (patParaPtrs == NULL) { delete[] insParaPtrs; return MP_OUT_OF_MEMORY; } f.readWords(patParaPtrs,header->patnum); //for (i = 0; i < header->insnum; i++) //{ // printf("%x\n",insParaPtrs[i]*16); //} ////////////////////// // read instruments // ////////////////////// mp_uint32* samplePtrs = new mp_uint32[header->insnum]; if (samplePtrs == NULL) { delete[] insParaPtrs; delete[] patParaPtrs; return MP_OUT_OF_MEMORY; } memset(samplePtrs,0,sizeof(mp_uint32)*header->insnum); mp_sint32 s = 0; for (i = 0; i < header->insnum; i++) { mp_uint32 insOffs = insParaPtrs[i]*16; if (insOffs) { f.seekWithBaseOffset(insOffs); // We can only read that if it's a sample mp_ubyte type = f.readByte(); if (type == 1) { f.read(smp[s].name,1,12); // read dos filename mp_ubyte bOffs = f.readByte(); mp_uword wOffs = f.readWord(); // stupid fileoffsets samplePtrs[i] = (((mp_uint32)bOffs<<16)+(mp_uint32)wOffs)*16; smp[s].flags = 1; smp[s].pan = 0x80; smp[s].samplen = f.readDword(); smp[s].loopstart = f.readDword(); mp_sint32 looplen = ((mp_sint32)f.readDword() - (mp_sint32)smp[s].loopstart); if (looplen < 0) looplen = 0; smp[s].looplen = looplen; smp[s].vol = module->vol64to255(f.readByte()); f.readByte(); // skip something smp[s].res = f.readByte() == 0x04 ? 0xAD : 0; // packing mp_ubyte flags = f.readByte(); // looping if (flags & 1) { smp[s].type = 1; } // 16 bit sample if (flags & 4) { smp[s].type |= 16; smp[s].samplen >>= 1; smp[s].loopstart >>= 1; smp[s].looplen >>= 1; } mp_uint32 c4spd = f.readDword(); XModule::convertc4spd(c4spd,&smp[s].finetune,&smp[s].relnote); #ifdef VERBOSE printf("%i, %i\n",c4spd,module->getc4spd(smp[s].relnote,smp[s].finetune)); #endif f.readDword(); // skip something f.readDword(); // skip two internal words f.readDword(); // skip internal dword f.read(instr[i].name,1,28); // instrument name f.readDword(); // skip signature if (samplePtrs[i] && smp[s].samplen) { instr[i].samp=1; for (j=0;j<120;j++) instr[i].snum[j] = s; s++; } } else if (type == 0) { samplePtrs[i] = 0; mp_ubyte buffer[12]; f.read(buffer,1,12); // read dos filename f.readByte(); f.readWord(); f.readDword(); f.readDword(); f.readDword(); f.readByte(); f.readByte(); // skip something f.readByte(); // skip packing f.readByte(); f.readDword(); f.readDword(); // skip something f.readDword(); // skip two internal words f.readDword(); // skip internal dword f.read(instr[i].name,1,28); // instrument name f.readDword(); // skip signature } else { samplePtrs[i] = 0; } } } ////////////////////// // read patterns // ////////////////////// mp_ubyte* pattern = new mp_ubyte[64*32*5]; if (pattern == NULL) { delete[] insParaPtrs; delete[] patParaPtrs; delete[] samplePtrs; return MP_OUT_OF_MEMORY; } mp_uint32 songMaxChannels = 1; for (i = 0; i < header->patnum; i++) { for (j = 0; j < 32*64; j++) { pattern[j*5] = 0xFF; pattern[j*5+1] = 0; pattern[j*5+2] = 0xFF; pattern[j*5+3] = 0xFF; pattern[j*5+4] = 0; } mp_uint32 patOffs = patParaPtrs[i]*16; mp_uint32 maxChannels = 1; if (patOffs) { f.seekWithBaseOffset(patOffs); mp_uint32 size = f.readWord(); if (size > 2) { size-=2; mp_ubyte* packed = new mp_ubyte[size+5]; if (packed == NULL) { delete[] insParaPtrs; delete[] patParaPtrs; delete[] samplePtrs; delete[] pattern; return MP_OUT_OF_MEMORY; } memset(packed, 0, size); f.read(packed, 1, size); mp_uint32 index = 0; mp_uint32 row = 0; while (index= 64) { int i = 0; i++; i--; break; } continue; } mp_uint32 chn = pi&31; if (chn>maxChannels && (pi & (32+64+128))) { maxChannels = chn; } mp_ubyte* slot = pattern+(row*32*5)+chn*5; if (pi & 32) { slot[0] = safeRead(packed, index, size, 0xFF); slot[1] = safeRead(packed, index, size); } if (pi & 64) { slot[2] = safeRead(packed, index, size, 0xFF); } if (pi & 128) { slot[3] = safeRead(packed, index, size, 0xFF); slot[4] = safeRead(packed, index, size); } } maxChannels++; if (maxChannels > header->channum) maxChannels = header->channum; delete[] packed; } if (maxChannels > songMaxChannels) songMaxChannels = maxChannels; } convertS3MPattern(&phead[i], pattern, maxChannels, i); } if (header->channum > songMaxChannels) header->channum = songMaxChannels; delete[] pattern; delete[] insParaPtrs; delete[] patParaPtrs; s = 0; for (i = 0; i < header->insnum; i++) { mp_uint32 smpOffs = samplePtrs[i]; if (smpOffs) { f.seekWithBaseOffset(smpOffs); if (!smp[s].samplen) continue; bool adpcm = (smp[s].res == 0xAD); mp_sint32 result = module->loadModuleSample(f, s, adpcm ? XModule::ST_PACKING_ADPCM : XModule::ST_UNSIGNED, adpcm ? (XModule::ST_16BIT | XModule::ST_PACKING_ADPCM) : (XModule::ST_16BIT | XModule::ST_UNSIGNED)); if (result != MP_OK) { delete[] samplePtrs; return result; } if (adpcm) // no longer needed smp[s].res = 0; s++; } } delete[] samplePtrs; header->smpnum = s; strcpy(header->tracker,"Screamtracker 3"); module->setDefaultPanning(); module->postProcessSamples(); return MP_OK; } MilkyTracker-1.02.00/src/milkyplay/LoaderSTM.cpp000066400000000000000000000165221324432207300213610ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * LoaderSTM.cpp * MilkyPlay Module Loader: ScreamTracker 2 * * Warning: This is an one-by-one conversion of an assembler version ;) * */ #include "Loaders.h" const char* LoaderSTM::identifyModule(const mp_ubyte* buffer) { // check for .STM module if (!memcmp(buffer+20,"!Scream!",8) || !memcmp(buffer+20,"BMOD2STM",8)) { return "STM"; } // this is not an .STM return NULL; } mp_sint32 LoaderSTM::load(XMFileBase& f, XModule* module) { mp_sint32 i,j; mp_ubyte buffer[128]; mp_uint32 samplePtrs[31]; module->cleanUp(); // this will make code much easier to read TXMHeader* header = &module->header; TXMInstrument* instr = module->instr; TXMSample* smp = module->smp; TXMPattern* phead = module->phead; // we're already out of memory here if (!phead || !instr || !smp) return MP_OUT_OF_MEMORY; f.read(buffer,1,48); memcpy(header->name,buffer,20); memcpy(header->sig,buffer+20,8); header->tempo = buffer[32]>>4; // default tickspeed header->speed = 124; // default tempo header->patnum = buffer[33]; // number of patterns header->mainvol = XModule::vol64to255(buffer[34]); header->flags = module->MODULE_OLDS3MVOLSLIDES | module->MODULE_STMARPEGGIO; header->insnum = 31; // number of instruments //header->smpnum = 31; // number of samples header->channum = 4; mp_uint32 s = 0; for (i = 0; i < header->insnum; i++) { f.read(buffer,1,32); memcpy(instr[i].name,buffer,12); mp_uint32 size = LittleEndian::GET_WORD(buffer+16); mp_uint32 loopstart = LittleEndian::GET_WORD(buffer+18); mp_uint32 loopend = LittleEndian::GET_WORD(buffer+20); mp_ubyte volume = XModule::vol64to255(buffer[22]); // fix for janis.stm if (size < 32) { instr[i].samp = 0; } else { memcpy(smp[s].name,buffer,12); samplePtrs[s] = (mp_uint32)LittleEndian::GET_WORD(buffer+14)<<4; XModule::convertc4spd((LittleEndian::GET_WORD(buffer+24)*8363)/8448,&smp[s].finetune,&smp[s].relnote); smp[s].flags = 1; smp[s].samplen = size; smp[s].loopstart = loopstart; smp[s].looplen = loopend; smp[s].vol = volume; instr[i].samp = 1; for (mp_sint32 j = 0; j < 120; j++) instr[i].snum[j] = s; if (smp[s].looplen < 0xFFFF && smp[s].looplen != 0) { if (smp[s].looplen > smp[s].samplen) smp[s].looplen = smp[s].samplen; if ((smp[s].loopstart+smp[s].looplen)>smp[s].samplen) smp[s].looplen-=(smp[s].loopstart+smp[s].looplen)-smp[s].samplen; smp[s].type=1; } else smp[s].looplen = 0; s++; } } header->smpnum = s; f.read(buffer,1,128); j = 0; for (i = 0; i < 128; i++) { if (buffer[i] == 'c') break; else header->ord[j++] = buffer[i]; } header->ordnum = j; mp_ubyte* srcPattern = new mp_ubyte[64*4*4]; if (srcPattern == NULL) return MP_OUT_OF_MEMORY; for (i = 0; i < header->patnum;i++) { f.read(srcPattern,1,64*4*4); phead[i].rows = 64; phead[i].effnum = 2; phead[i].channum = (mp_ubyte)header->channum; phead[i].patternData = new mp_ubyte[phead[i].rows*header->channum*6]; // out of memory? if (phead[i].patternData == NULL) { delete[] srcPattern; return MP_OUT_OF_MEMORY; } memset(phead[i].patternData,0,phead[i].rows*header->channum*6); mp_sint32 r,c,cnt = 0,offs = 0; for (r=0;r<64;r++) { for (c=0;cchannum;c++) { mp_ubyte note = srcPattern[offs]; mp_ubyte ins = 0; mp_ubyte b1 = srcPattern[offs+1]; mp_ubyte b2 = srcPattern[offs+2]; mp_ubyte op = srcPattern[offs+3]; mp_ubyte nEff = 0; mp_ubyte nOp = 0; if (note != 255) { note = (((note>>4)+2)*12+(note&0xf))+1; } else note = 0; ins = b1>>3; mp_ubyte vol = (b1&0x07)+((b2&0xF0)>>1); if (vol<=64) { phead[i].patternData[cnt+2] = 0x0C; phead[i].patternData[cnt+3] = XModule::vol64to255(vol); } switch (b2&0xf) { // Arpeggio case 0x00: if (op != 00) { nEff = 0x20; nOp = op; } break; // set tickspeed case 0x01: nEff = 0x1C; nOp = op>>4; break; // position jump case 0x02: nEff = 0x0B; nOp = op; // pattern break case 0x03: nEff = 0x0D; nOp = op; break; // s3m volslide case 0x04: nEff = 0x49; nOp = op; break; // porta down case 0x05: nEff = 0x48; nOp = op; break; // porta up case 0x06: nEff = 0x47; nOp = op; break; // porta to note case 0x07: nEff = 0x03; nOp = op; break; // vibrato case 0x08: nEff = 0x04; nOp = op; break; // tremor case 0x09: nEff = 0x1D; nOp = op; break; // s3m arpeggio (in combination with the STMARPEGGIO flag) case 0x0A: nEff = 0x20; nOp = op; break; // vibrato + volume slide case 0x0B: nEff = 0x06; nOp = op; break; // tone porta + volume slide case 0x0C: nEff = 0x05; nOp = op; break; // tremolo case 0x0D: nEff = 0x07; nOp = op; break; // sample offset case 0x0E: case 0x0F: nEff = 0x09; nOp = op; break; } phead[i].patternData[cnt]=note; phead[i].patternData[cnt+1]=ins; phead[i].patternData[cnt+4]=nEff; phead[i].patternData[cnt+5]=nOp; cnt+=6; offs+=4; } } } delete[] srcPattern; for (i = 0; i < header->smpnum; i++) { mp_uint32 smpOffs = samplePtrs[i]; if (smpOffs) { f.seekWithBaseOffset(smpOffs); mp_sint32 result = module->loadModuleSample(f, i); if (result != MP_OK) return result; } } strcpy(header->tracker,"Screamtracker 2"); module->setDefaultPanning(); module->postProcessSamples(); return MP_OK; } MilkyTracker-1.02.00/src/milkyplay/LoaderULT.cpp000066400000000000000000000220041324432207300213520ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * LoaderULT.cpp * MilkyPlay Module Loader: Ultratracker */ #include "Loaders.h" const char* LoaderULT::identifyModule(const mp_ubyte* buffer) { if (memcmp(buffer, "MAS_UTrack_V00", 14) == 0) { if (buffer[14] < '1' || buffer[14] > '4') return NULL; return "ULT"; } // check for .ULT return NULL; } static void convertULTEffects(mp_ubyte& effect, mp_ubyte& operand) { switch (effect) { case 0x00: case 0x01: case 0x02: case 0x03: case 0x04: case 0x07: case 0x0A: case 0x0C: case 0x0D: break; case 0x05: effect = 0x23; break; case 0x09: effect = 0x21; break; case 0x0B: effect = 0x08; operand=(mp_ubyte)XModule::pan15to255(operand); break; case 0x0E: effect = 0x30 + (operand >> 4); operand &= 0xF; break; case 0x0F: if (operand >= 0x30) effect = 0x16; else effect = 0x1C; break; default: effect = operand = 0; } } mp_sint32 LoaderULT::load(XMFileBase& f, XModule* module) { module->cleanUp(); // this will make code much easier to read TXMHeader* header = &module->header; TXMInstrument* instr = module->instr; TXMSample* smp = module->smp; TXMPattern* phead = module->phead; // we're already out of memory here if (!phead || !instr || !smp) return MP_OUT_OF_MEMORY; mp_sint32 i,j,k; // read header f.read(header->sig, 1, 15); mp_ubyte ver = header->sig[14]; f.read(header->name, 1, 32); i = f.readByte(); // read song message? if (ver >= '2') { char line[33], dummy[40]; for (j = 0; j < i; j++) { memset(line, 0, sizeof(line)); memset(dummy, 0, sizeof(dummy)); f.read(dummy, 1, 32); XModule::convertStr(line, dummy, 33, false); if (*line) module->addSongMessageLine(line); } } // read instruments header->insnum = f.readByte(); mp_sint32 s = 0; for (i = 0; i < header->insnum; i++) { mp_ubyte sampleName[32]; mp_ubyte dosName[12]; mp_sint32 loopstart; mp_sint32 loopend; mp_sint32 sizestart; mp_sint32 sizeend; mp_ubyte vol; mp_ubyte looptype; mp_sword finetune; mp_sint32 c2spd = 8363; f.read(sampleName, 1, 32); f.read(dosName, 1, 12); loopstart = f.readDword(); loopend = f.readDword(); sizestart = f.readDword(); sizeend = f.readDword(); vol = f.readByte(); looptype = f.readByte(); if (ver >= '4') c2spd = f.readWord(); finetune = f.readWord(); mp_sint32 smplen = sizeend - sizestart; memcpy(instr[i].name, sampleName, 32); if (smplen) { memcpy(smp[s].name, dosName, 12); instr[i].samp = 1; for (j=0;j<120;j++) instr[i].snum[j] = s; mp_sint32 finalc4spd = c2spd/*+((c2spd*finetune)/32768)*/; XModule::convertc4spd(finalc4spd, &smp[s].finetune, &smp[s].relnote); smp[s].freqadjust = finetune; smp[s].flags = 1; smp[s].vol = vol; smp[s].pan = 0x80; smp[s].samplen = smplen; mp_sint32 looplen = loopend - loopstart; if (looplen < 0) looplen = 0; smp[s].loopstart = loopstart; smp[s].looplen = looplen; if (looptype & 4) { smp[s].loopstart >>= 1; smp[s].looplen >>= 1; smp[s].type |= 16; } if ((looptype & (8+16)) == 24) smp[s].type |= 2; else if (looptype & 8) smp[s].type |= 1; s++; } } header->smpnum = s; f.read(header->ord, 1, 256); bool slenFound = false; for (i = 0; i < 256; i++) { if (header->ord[i] != 255 && !slenFound) header->ordnum = i+1; else { header->ord[i] = 0; slenFound = true; } } header->channum = (mp_sword)f.readByte()+1; header->patnum = (mp_sword)f.readByte()+1; // panning positions module->setDefaultPanning(); if (ver >= '3') { for (i = 0; i < header->channum; i++) header->pan[i] = (mp_ubyte)XModule::pan15to255(f.readByte()); } mp_sint32 numTracks = header->channum*header->patnum; mp_uword* trackSeq = new mp_uword[numTracks]; if (trackSeq == NULL) { return MP_OUT_OF_MEMORY; } k = 0; for (i = 0; i < header->channum; i++) for (j = 0; j < header->patnum; j++) trackSeq[j*header->channum+i] = k++; mp_sint32 trackSize = 64*5; mp_ubyte* tracks = new mp_ubyte[trackSize*numTracks]; if (tracks == NULL) { delete[] trackSeq; return MP_OUT_OF_MEMORY; } // decode tracks mp_ubyte* track = tracks; for (i = 0; i < numTracks; i++) { mp_sint32 row = 0; while (row < 64) { mp_sint32 rep = 1; mp_ubyte note, ins, eff, op1, op2; note = f.readByte(); if (note == 0xFC) { rep = f.readByte(); note = f.readByte(); } ins = f.readByte(); eff = f.readByte(); op1 = f.readByte(); op2 = f.readByte(); for (j = 0; j < rep; j++) { *track++ = note; *track++ = ins; *track++ = eff; *track++ = op1; *track++ = op2; row++; } } } // build patterns mp_uword* pTrackSeq = trackSeq; for (i = 0; i < header->patnum;i++) { phead[i].rows = 64; phead[i].effnum = 2; phead[i].channum = (mp_ubyte)header->channum; mp_sint32 slotSize = 2+(2*phead[i].effnum); phead[i].patternData = new mp_ubyte[phead[i].rows*header->channum*slotSize]; // out of memory? if (phead[i].patternData == NULL) { delete[] tracks; delete[] trackSeq; return MP_OUT_OF_MEMORY; } memset(phead[i].patternData,0,phead[i].rows*header->channum*slotSize); mp_sint32 c; for (c=0;cchannum;c++) { if (*pTrackSeq < numTracks && c < header->channum) { mp_ubyte *track = *pTrackSeq*trackSize + tracks; bool portaNote1 = false; bool portaNote2 = false; for (mp_sint32 row = 0; row < 64; row++) { mp_ubyte* dstSlot = phead[i].patternData+row*phead[i].channum*slotSize+c*slotSize; mp_ubyte note = 0, ins = 0, eff1 = 0, op1 = 0, eff2 = 0, op2 = 0; if (*track) note = *track + 24; ins = *(track+1); eff1 = *(track+2) >> 4; eff2 = *(track+2) & 0xF; op2 = *(track+3); op1 = *(track+4); if (*(track+2) != 0x99) { convertULTEffects(eff1, op1); convertULTEffects(eff2, op2); } else { eff1 = 0x22; eff2 = 0x0; } // I need to fill in some portamento to note commands on the first effect if (portaNote1 && !note/* && !(eff1 == 0x03 && op1)*/) { eff1 = 0x03; op1 = 0; } // I need to fill in some portamento to note commands on the second effect if (portaNote2 && !note/* && !(eff2 == 0x03 && op2)*/) { eff2 = 0x03; op2 = 0; } dstSlot[0] = note; dstSlot[1] = ins; dstSlot[2] = eff1; dstSlot[3] = op1; dstSlot[4] = eff2; dstSlot[5] = op2; // we're having a portamento to note, set flag to continue on following // rows if no other note intersects if (eff1 == 0x03 && op1 && note) portaNote1 = true; // note intersects, stop portamento to note else if (note) portaNote1 = false; // we're having a portamento to note, set flag to continue on following // rows if no other note intersects if (eff2 == 0x03 && op2 && note) portaNote2 = true; // note intersects, stop portamento to note else if (note) portaNote2 = false; track+=5; } } pTrackSeq++; } } delete[] trackSeq; delete[] tracks; mp_sint32 result = module->loadModuleSamples(f); if (result != MP_OK) return result; header->speed=125; header->tempo=6; header->mainvol=255; strcpy(header->tracker,"Ultratracker"); module->postProcessSamples(); return MP_OK; } MilkyTracker-1.02.00/src/milkyplay/LoaderUNI.cpp000066400000000000000000000547641324432207300213630ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * LoaderUNI.cpp * MilkyPlay Module Loader: MikMod UNIversal Module * * Warning: This is an one-by-one conversion of my pascal uni2xm converter ;) * */ #include "Loaders.h" //#define VERBOSE struct Uniheader { mp_ubyte FileID[4]; mp_ubyte NumChannels; mp_uword SongLength; mp_uword RepeatPos; mp_uword NumPatterns; mp_uword NumTracks; mp_uword NumIns; mp_ubyte InitSpeed; mp_ubyte InitTempo; mp_ubyte OrderList[256]; mp_ubyte DefPanning[32]; mp_ubyte Flags; }; struct Uniinstrument { mp_ubyte NumSamps; mp_ubyte SampleNums[96]; mp_ubyte volflg; mp_ubyte volpts; mp_ubyte volsus; mp_ubyte volbeg; mp_ubyte volend; mp_sword VolPoints[12*2]; mp_ubyte panflg; mp_ubyte panpts; mp_ubyte pansus; mp_ubyte panbeg; mp_ubyte panend; mp_sword PanPoints[12*2]; mp_ubyte vibtype; mp_ubyte vibsweep; mp_ubyte vibdepth; mp_ubyte vibrate; mp_uword volfade; }; struct Unisample { mp_uword C2spd; mp_sbyte relnotenum; mp_ubyte volume; mp_ubyte panning; mp_uint32 smplength; mp_uint32 smploopstart; mp_uint32 smploopend; mp_uword flags; }; struct MytrackSlot { mp_ubyte note, instrument; mp_ubyte effects[7]; mp_ubyte operands[7]; }; const char* LoaderUNI::identifyModule(const mp_ubyte* buffer) { // check for .UNI module if (!memcmp(buffer,"UN0",3)) { if (buffer[3] != '4' && buffer[3] != '5') return NULL; return "UNI"; } return NULL; } static mp_sint32 getMaxEffectsFromTrack(mp_ubyte* track) { mp_sint32 y; mp_sint32 i = 0; mp_sint32 rowcnt = 0; mp_sint32 effectCnt = 1; mp_sint32 maxEffectsPerRow = 0; do { mp_ubyte x = track[i]; mp_ubyte rep = x >> 5; mp_ubyte len = x & 31; for (mp_ubyte repcnt = 0; repcnt <= rep; repcnt++) { y = 1; if (len > 1) { for (mp_ubyte c = 1; c <= len-1; c++) { if (track[y+i]) { switch (track[y+i]) { case 1: //DeTrack[rowcnt].Note:=Track[y+i+1]+1; y+=2; c++; break; case 2: //DeTrack[rowcnt].Instrument:=Track[y+i+1]+1; y+=2; c++; break; case 13: //if (track[y+i+1]) { //DeTrack[rowcnt].Effect:=$A; //DeTrack[rowcnt].Operand:=Track[y+i+1]; //} //else { //DeTrack[rowcnt].Effect:=0; //DeTrack[rowcnt].Operand:=0; //} y+=2; c++; effectCnt++; break; case 15: //DeTrack[rowcnt].Volume:=Track[y+i+1]+$10 y+=2; c++; break; case 19: //DeTrack[rowcnt].Effect:=$F; //DeTrack[rowcnt].Operand:=Track[y+i+1]; y+=2; c++; effectCnt++; break; case 20: //DeTrack[rowcnt].Effect:=250; //DeTrack[rowcnt].Operand:=Track[y+i+1]; y+=2; c++; effectCnt++; break; case 21: //DeTrack[rowcnt].Effect:=251; //DeTrack[rowcnt].Operand:=Track[y+i+1]; y+=2; c++; effectCnt++; break; case 22: //DeTrack[rowcnt].Effect:=252; //DeTrack[rowcnt].Operand:=Track[y+i+1]; y+=2; c++; effectCnt++; break; case 23: //DeTrack[rowcnt].Effect:=29; //DeTrack[rowcnt].Operand:=Track[y+i+1]; y+=2; c++; effectCnt++; break; case 24: //DeTrack[rowcnt].Effect:=27; //DeTrack[rowcnt].Operand:=Track[y+i+1]; y+=2; c++; effectCnt++; break; case 25: //DeTrack[rowcnt].Effect:=$F; //DeTrack[rowcnt].Operand:=Track[y+i+1]; y+=2; c++; effectCnt++; break; case 26: //DeTrack[rowcnt].Effect:=$A; //DeTrack[rowcnt].Operand:=Track[y+i+1]; y+=2; c++; effectCnt++; break; case 27: //DeTrack[rowcnt].Effect:=$14; //DeTrack[rowcnt].Operand:=Track[y+i+1]; y+=2; c++; effectCnt++; break; default: //DeTrack[rowcnt].Effect:=Track[y+i]-3; //DeTrack[rowcnt].Operand:=Track[y+i+1]; y+=2; c++; effectCnt++; } } } } /*if Detrack[rowcnt].Effect = $E then if Detrack[rowcnt].Operand shr 4 = 8 then begin Detrack[rowcnt].Effect:=8; Detrack[rowcnt].Operand:=(Detrack[rowcnt].Operand and $F) shl 4; end; if modeffmode then begin if (Detrack[rowcnt].Effect=5) and (Detrack[rowcnt].Operand=0) then Detrack[rowcnt].Effect:=3; if (Detrack[rowcnt].Effect=6) and (Detrack[rowcnt].Operand=0) then Detrack[rowcnt].Effect:=4; if (Detrack[rowcnt].Effect=$A) and (Detrack[rowcnt].Operand=0) then begin Detrack[rowcnt].Effect:=0; Detrack[rowcnt].Operand:=0; end; end;*/ rowcnt++; if (effectCnt > maxEffectsPerRow) maxEffectsPerRow = effectCnt; effectCnt = 1; } i+=len; } while (rowcnt<256); return maxEffectsPerRow; } static void demuxTrack(mp_ubyte* track, MytrackSlot* deTrack) { memset(deTrack, 0, sizeof(MytrackSlot)*256); mp_sint32 y; mp_sint32 i = 0; mp_sint32 rowcnt = 0; mp_sint32 effectCnt = 1; mp_sint32 maxEffectsPerRow = 0; do { mp_ubyte x = track[i]; mp_ubyte rep = x >> 5; mp_ubyte len = x & 31; for (mp_ubyte repcnt = 0; repcnt <= rep; repcnt++) { y = 1; if (len > 1) { for (mp_ubyte c = 1; c <= len-1; c++) { if (track[y+i]) { switch (track[y+i]) { case 1: deTrack[rowcnt].note = track[y+i+1]+1; if (deTrack[rowcnt].note == 97) deTrack[rowcnt].note = XModule::NOTE_OFF; y+=2; c++; break; case 2: deTrack[rowcnt].instrument = track[y+i+1]+1; y+=2; c++; break; case 13: if (track[y+i+1]) { deTrack[rowcnt].effects[effectCnt] = 0xA; deTrack[rowcnt].operands[effectCnt] = track[y+i+1]; } else { deTrack[rowcnt].effects[effectCnt] = 0; deTrack[rowcnt].operands[effectCnt] = 0; } y+=2; c++; effectCnt++; break; case 15: deTrack[rowcnt].effects[0] = 0x0C; deTrack[rowcnt].operands[0] = XModule::vol64to255(track[y+i+1]); y+=2; c++; break; case 19: deTrack[rowcnt].effects[effectCnt] = 0xF; deTrack[rowcnt].operands[effectCnt] = track[y+i+1]; y+=2; c++; effectCnt++; break; case 20: deTrack[rowcnt].effects[effectCnt] = 0x49; deTrack[rowcnt].operands[effectCnt] = track[y+i+1]; y+=2; c++; effectCnt++; break; case 21: deTrack[rowcnt].effects[effectCnt] = 0x48; deTrack[rowcnt].operands[effectCnt] = track[y+i+1]; y+=2; c++; effectCnt++; break; case 22: deTrack[rowcnt].effects[effectCnt] = 0x47; deTrack[rowcnt].operands[effectCnt] = track[y+i+1]; y+=2; c++; effectCnt++; break; case 23: // key off? deTrack[rowcnt].effects[effectCnt] = 51; deTrack[rowcnt].operands[effectCnt] = track[y+i+1]; y+=2; c++; effectCnt++; break; case 24: deTrack[rowcnt].effects[effectCnt] = 27; deTrack[rowcnt].operands[effectCnt] = track[y+i+1]; y+=2; c++; effectCnt++; break; case 25: deTrack[rowcnt].effects[effectCnt] = 0x0F; deTrack[rowcnt].operands[effectCnt] = track[y+i+1]; y+=2; c++; effectCnt++; break; case 26: deTrack[rowcnt].effects[effectCnt] = 0x0A; deTrack[rowcnt].operands[effectCnt] = track[y+i+1]; y+=2; c++; effectCnt++; break; case 27: deTrack[rowcnt].effects[effectCnt] = 0x14; deTrack[rowcnt].operands[effectCnt] = track[y+i+1]; y+=2; c++; effectCnt++; break; default: deTrack[rowcnt].effects[effectCnt] = track[y+i]-3; deTrack[rowcnt].operands[effectCnt] = track[y+i+1]; if (deTrack[rowcnt].effects[effectCnt] == 0xC) { deTrack[rowcnt].operands[effectCnt] = XModule::vol64to255(deTrack[rowcnt].operands[effectCnt]); } else if (deTrack[rowcnt].effects[effectCnt] == 0xE) { deTrack[rowcnt].effects[effectCnt] = (deTrack[rowcnt].operands[effectCnt]>>4)+0x30; deTrack[rowcnt].operands[effectCnt]&=0x0F; } else if (deTrack[rowcnt].effects[effectCnt] == 0xD) { deTrack[rowcnt].operands[effectCnt] = ((deTrack[rowcnt].operands[effectCnt]/10)<<4) + (deTrack[rowcnt].operands[effectCnt]%10); } else if (deTrack[rowcnt].effects[effectCnt] == 0) { deTrack[rowcnt].effects[effectCnt] = 0x20; } y+=2; c++; effectCnt++; } } } } /*if (detrack[rowcnt].Effect = $E then if Detrack[rowcnt].Operand shr 4 = 8 then begin Detrack[rowcnt].Effect:=8; Detrack[rowcnt].Operand:=(Detrack[rowcnt].Operand and $F) shl 4; end; if modeffmode then begin if (Detrack[rowcnt].Effect=5) and (Detrack[rowcnt].Operand=0) then Detrack[rowcnt].Effect:=3; if (Detrack[rowcnt].Effect=6) and (Detrack[rowcnt].Operand=0) then Detrack[rowcnt].Effect:=4; if (Detrack[rowcnt].Effect=$A) and (Detrack[rowcnt].Operand=0) then begin Detrack[rowcnt].Effect:=0; Detrack[rowcnt].Operand:=0; end; end;*/ rowcnt++; if (effectCnt > maxEffectsPerRow) maxEffectsPerRow = effectCnt; effectCnt = 1; } i+=len; } while (rowcnt<256); } mp_sint32 LoaderUNI::load(XMFileBase& f, XModule* module) { Uniheader uniheader; Uniinstrument uniinstrument; Unisample unisample; mp_uint32 i,j; module->cleanUp(); // this will make code much easier to read TXMHeader* header = &module->header; TXMInstrument* instr = module->instr; TXMSample* smp = module->smp; TXMPattern* phead = module->phead; // we're already out of memory here if (!phead || !instr || !smp) return MP_OUT_OF_MEMORY; f.read(uniheader.FileID, 1, 4); mp_sbyte uniVersion = -1; uniheader.NumChannels = f.readByte(); uniheader.SongLength = f.readWord(); if (uniheader.FileID[3] == '4') uniVersion = 4; else if (uniheader.FileID[3] == '5') uniVersion = 5; if (uniVersion == -1) return MP_LOADER_FAILED; if (uniVersion == 5) uniheader.RepeatPos = f.readWord(); else uniheader.RepeatPos = 0; uniheader.NumPatterns = f.readWord(); uniheader.NumTracks = f.readWord(); uniheader.NumIns = f.readWord(); uniheader.InitSpeed = f.readByte(); uniheader.InitTempo = f.readByte(); //f.read(uniheader.OrderList, 1, 256); f.read(header->ord, 1, 256); f.read(uniheader.DefPanning, 1, 32); uniheader.Flags = f.readByte(); i = f.readWord(); mp_ubyte* text = new mp_ubyte[i]; if (text == NULL) return MP_OUT_OF_MEMORY; f.read(text, 1, i); if (i > 32) i = 32; memcpy(header->name, text, i); delete[] text; i = f.readWord(); text = new mp_ubyte[i]; if (text == NULL) return MP_OUT_OF_MEMORY; f.read(text, 1, i); if (i > 16) i = 16; memcpy(header->sig, text, i); delete[] text; i = f.readWord(); f.seekWithBaseOffset(f.posWithBaseOffset() + i); // convert header data header->ordnum = (mp_uword)uniheader.SongLength; header->restart = (mp_uword)uniheader.RepeatPos; header->channum = (mp_uword)uniheader.NumChannels; header->patnum = (mp_uword)uniheader.NumPatterns; header->insnum = (mp_uword)uniheader.NumIns; header->tempo = uniheader.InitSpeed; header->speed = uniheader.InitTempo; header->freqtab = (uniheader.Flags>>1)&1; header->mainvol = 255; mp_sint32 s = 0; mp_sint32 e = 0; for (i = 0; i < uniheader.NumIns; i++) { uniinstrument.NumSamps = f.readByte(); f.read(uniinstrument.SampleNums, 1, 96); uniinstrument.volflg = f.readByte(); uniinstrument.volpts = f.readByte(); uniinstrument.volsus = f.readByte(); uniinstrument.volbeg = f.readByte(); uniinstrument.volend = f.readByte(); f.readWords((mp_uword*)uniinstrument.VolPoints, 12*2); uniinstrument.panflg = f.readByte(); uniinstrument.panpts = f.readByte(); uniinstrument.pansus = f.readByte(); uniinstrument.panbeg = f.readByte(); uniinstrument.panend = f.readByte(); f.readWords((mp_uword*)uniinstrument.PanPoints, 12*2); uniinstrument.vibtype = f.readByte(); uniinstrument.vibsweep = f.readByte(); uniinstrument.vibdepth = f.readByte(); uniinstrument.vibrate = f.readByte(); uniinstrument.volfade = f.readWord(); mp_sint32 len = f.readWord(); text = new mp_ubyte[len]; if (text == NULL) return MP_OUT_OF_MEMORY; f.read(text, 1, len); if (len > 32) len = 32; memcpy(instr[i].name, text, len); delete[] text; #ifdef VERBOSE printf("%s\n",text); #endif // convert instrument data instr[i].samp = uniinstrument.NumSamps; for (j = 0; j < 96; j++) instr[i].snum[j] = uniinstrument.SampleNums[j] + s; //memcpy(instr[i].name, text, len); // envelopes TEnvelope venv; TEnvelope penv; memset(&venv,0,sizeof(venv)); memset(&penv,0,sizeof(penv)); mp_sint32 k; for (k = 0; k < 12; k++) { venv.env[k][0] = uniinstrument.VolPoints[k*2]; venv.env[k][1] = uniinstrument.VolPoints[k*2+1]; } for (k = 0; k < 12; k++) { penv.env[k][0] = uniinstrument.PanPoints[k*2]; penv.env[k][1] = uniinstrument.PanPoints[k*2+1]; } venv.num = uniinstrument.volpts; penv.num = uniinstrument.panpts; venv.sustain = uniinstrument.volsus; venv.loops = uniinstrument.volbeg; venv.loope = uniinstrument.volend; penv.sustain = uniinstrument.pansus; penv.loops = uniinstrument.panbeg; penv.loope = uniinstrument.panend; venv.type = uniinstrument.volflg; penv.type = uniinstrument.panflg; if (!module->addVolumeEnvelope(venv)) return MP_OUT_OF_MEMORY; if (!module->addPanningEnvelope(penv)) return MP_OUT_OF_MEMORY; for (j = 0; j < uniinstrument.NumSamps; j++) { unisample.C2spd = f.readWord(); unisample.relnotenum = f.readByte(); unisample.volume = f.readByte(); unisample.panning = f.readByte(); unisample.smplength = f.readDword(); unisample.smploopstart = f.readDword(); unisample.smploopend = f.readDword(); unisample.flags = f.readWord(); mp_sint32 len = f.readWord(); text = new mp_ubyte[len]; if (text == NULL) return MP_OUT_OF_MEMORY; f.read(text, 1, len); if (len > 32) len = 32; memcpy(smp[s].name, text, len); delete[] text; // convert sample data smp[s].vibtype = uniinstrument.vibtype; smp[s].vibsweep = uniinstrument.vibsweep; smp[s].vibdepth = uniinstrument.vibdepth << 1; smp[s].vibrate = uniinstrument.vibrate; smp[s].volfade = uniinstrument.volfade << 1; smp[s].venvnum = e + 1; smp[s].penvnum = e + 1; if (uniVersion == 4) { if ((unisample.flags & 32) == 0) smp[s].flags |= 128; // no delta if ((unisample.flags & 4) == 0) smp[s].flags |= 64; // usigned } else { if ((unisample.flags & 4) == 0) smp[s].flags |= 128; // no delta if ((unisample.flags & 2) == 0) smp[s].flags |= 64; // unsigned } // 16 bit sample /*if (unisample.flags & 1) { unisample.smplength <<= 1; unisample.smploopstart <<= 1; unisample.smploopend <<= 1; }*/ //memcpy(smp[s].name, text, len); smp[s].vol = XModule::vol64to255(unisample.volume); smp[s].pan = unisample.panning; smp[s].samplen = unisample.smplength; smp[s].loopstart = unisample.smploopstart; smp[s].looplen = unisample.smploopend - unisample.smploopstart; smp[s].flags |= 3; mp_ubyte type = 0; if (uniVersion == 4) { type=0; if ((unisample.flags & 8) == 8) type = 1; if ((unisample.flags & 16) == 16) type = 2; if ((unisample.flags & 1) == 1) type+=16; } else if (uniVersion == 5) { if (((unisample.flags>>4) & 3) == 0) type = 0; if (((unisample.flags>>4) & 3) == 1) type = 1; if (((unisample.flags>>4) & 3) == 3) type = 2; if (unisample.flags&1) type+=16; } smp[s].type = type; if (!(uniheader.Flags&1)) { mp_sbyte rnn = 0; mp_sbyte ft = 0; switch (unisample.C2spd) { case 8280: ft=-16; break; case 8232: ft=-32; break; case 8169: ft=-48; break; case 8107: ft=-64; break; case 8046: ft=-80; break; case 7985: ft=-96; break; case 7941: ft=-112; break; case 7895: ft=-128; break; case 8363: ft=0; break; case 8413: ft=16; break; case 8463: ft=32; break; case 8529: ft=48; break; case 8581: ft=64; break; case 8651: ft=96; break; case 8723: ft=112; break; case 8757: ft=127; break; default: XModule::convertc4spd(unisample.C2spd, &ft, &rnn); break; } smp[s].relnote = rnn; smp[s].finetune = ft; } else { smp[s].finetune = (mp_sbyte)(unisample.C2spd - 128); smp[s].relnote = unisample.relnotenum; } s++; } e++; } header->smpnum = s; mp_uword* patternRows = new mp_uword[uniheader.NumPatterns]; mp_uword* trackSeq = new mp_uword[uniheader.NumPatterns*uniheader.NumChannels]; f.readWords(patternRows, uniheader.NumPatterns); f.readWords(trackSeq, uniheader.NumPatterns*uniheader.NumChannels); mp_ubyte** tracks = new mp_ubyte*[uniheader.NumTracks]; for (i = 0; i < uniheader.NumTracks; i++) { mp_uint32 len = f.readWord(); tracks[i] = new mp_ubyte[len]; f.read(tracks[i], 1, len); #ifdef VERBOSE printf("Maximum number of effects in track %i: %i\n",i,getMaxEffectsFromTrack(tracks[i])); #endif } MytrackSlot* deTrack = new MytrackSlot[256]; mp_sint32 trackIndex = 0; for (i = 0; i < uniheader.NumPatterns; i++) { mp_sint32 maxEffects = 0; for (j = 0; j < uniheader.NumChannels; j++) { #ifdef VERBOSE printf("%i, ",trackSeq[trackIndex]); #endif if ((s=getMaxEffectsFromTrack(tracks[trackSeq[trackIndex]])) > maxEffects) maxEffects = s; trackIndex++; } trackIndex-=uniheader.NumChannels; #ifdef VERBOSE printf("Maxeffects for pattern %i: %i\n", i, maxEffects); #endif phead[i].rows = patternRows[i]; phead[i].effnum = maxEffects; phead[i].channum = uniheader.NumChannels; mp_sint32 slotSize = (phead[i].effnum * 2 + 2); phead[i].patternData = new mp_ubyte[phead[i].rows*header->channum * slotSize]; // out of memory? if (phead[i].patternData == NULL) { delete[] deTrack; for (i = 0; i < uniheader.NumTracks; i++) delete[] tracks[i]; delete[] tracks; delete[] trackSeq; delete[] patternRows; return MP_OUT_OF_MEMORY; } memset(phead[i].patternData, 0, phead[i].rows*header->channum * slotSize); mp_ubyte* pattern = phead[i].patternData; for (mp_sint32 c = 0; c < uniheader.NumChannels; c++) { demuxTrack(tracks[trackSeq[trackIndex]], deTrack); for (mp_sint32 rows = 0; rows < phead[i].rows; rows++) { mp_sint32 offset = (rows * slotSize*uniheader.NumChannels) + (slotSize * c); pattern[offset++] = deTrack[rows].note; pattern[offset++] = deTrack[rows].instrument; for (mp_sint32 eff = 0; eff < phead[i].effnum; eff++) { pattern[offset++] = deTrack[rows].effects[eff]; pattern[offset++] = deTrack[rows].operands[eff]; #ifdef VERBOSE if (c == 9 && i == 1 && eff == 1) { printf("%x, %x\n",deTrack[rows].effects[eff],deTrack[rows].operands[eff]); } #endif } } trackIndex++; } } delete[] deTrack; for (i = 0; i < uniheader.NumTracks; i++) delete[] tracks[i]; delete[] tracks; delete[] trackSeq; delete[] patternRows; // lad ma samples du penner for (i=0;ismpnum;i++) { #ifdef VERBOSE printf("%i\n",smp[i].type); #endif //if (!smp[i].samplen) // continue; if (smp[i].type & 16) smp[i].sample = (mp_sbyte*)module->allocSampleMem(smp[i].samplen<<1); else smp[i].sample = (mp_sbyte*)module->allocSampleMem(smp[i].samplen); if (smp[i].sample == NULL) { return MP_OUT_OF_MEMORY; } mp_sint32 loadFlags = XModule::ST_DEFAULT; if (smp[i].type & 16) loadFlags |= XModule::ST_16BIT; if (((smp[i].flags >> 7) & 1) == 0) loadFlags |= XModule::ST_DELTA; if (((smp[i].flags >> 6) & 1) == 1) loadFlags |= XModule::ST_UNSIGNED; // 16bit sample if (smp[i].type & 16) { if (!module->loadSample(f,smp[i].sample,smp[i].samplen<<1,smp[i].samplen,loadFlags)) { return MP_OUT_OF_MEMORY; } } // 8bit sample else { if (!module->loadSample(f,smp[i].sample,smp[i].samplen,smp[i].samplen,loadFlags)) { return MP_OUT_OF_MEMORY; } } } header->volenvnum = module->numVEnvs; header->panenvnum = module->numPEnvs; strcpy(header->tracker,"..converted.."); module->setDefaultPanning(); module->postProcessSamples(); return MP_OK; } MilkyTracker-1.02.00/src/milkyplay/LoaderXM.cpp000066400000000000000000000515701324432207300212440ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * LoaderXM.cpp * MilkyPlay Module Loader: Fasttracker 2 * * -------------------------------- * Version History: * -------------------------------- * 02/27/05: Added support for MODPLUG song message * 10/19/04: Fixed MOOH.XM loading problems. Header says there are more instruments than actually stored in the file. * 10/14/04: Added sample relocation technique to get rid of unused samples * ??/??/98: First version of this XM loader */ #include "Loaders.h" //#define VERBOSE #define XM_ENVELOPENUMPOINTS 12 const char* LoaderXM::identifyModule(const mp_ubyte* buffer) { // check for .XM module first if (!memcmp(buffer,"Extended Module:",16)) { return "XM"; } // this is not an .XM return NULL; } ////////////////////////////////////////////////////// // load fasttracker II extended module ////////////////////////////////////////////////////// mp_sint32 LoaderXM::load(XMFileBase& f, XModule* module) { mp_ubyte insData[230]; mp_sint32 smpReloc[96]; mp_ubyte nbu[96]; mp_uint32 fileSize = 0; module->cleanUp(); // this will make code much easier to read TXMHeader* header = &module->header; TXMInstrument* instr = module->instr; TXMSample* smp = module->smp; TXMPattern* phead = module->phead; // we're already out of memory here if (!phead || !instr || !smp) return MP_OUT_OF_MEMORY; fileSize = f.sizeWithBaseOffset(); f.read(&header->sig,1,17); f.read(&header->name,1,20); f.read(&header->whythis1a,1,1); header->whythis1a=0; f.read(&header->tracker,1,20); f.readWords(&header->ver,1); if (header->ver != 0x102 && header->ver != 0x103 && // untested header->ver != 0x104) return MP_LOADER_FAILED; f.readDwords(&header->hdrsize,1); header->hdrsize-=4; mp_uint32 hdrSize = 0x110; if (header->hdrsize > hdrSize) hdrSize = header->hdrsize; mp_ubyte* hdrBuff = new mp_ubyte[hdrSize]; memset(hdrBuff, 0, hdrSize); f.read(hdrBuff, 1, header->hdrsize); header->ordnum = LittleEndian::GET_WORD(hdrBuff); header->restart = LittleEndian::GET_WORD(hdrBuff+2); header->channum = LittleEndian::GET_WORD(hdrBuff+4); header->patnum = LittleEndian::GET_WORD(hdrBuff+6); header->insnum = LittleEndian::GET_WORD(hdrBuff+8); header->freqtab = LittleEndian::GET_WORD(hdrBuff+10); header->tempo = LittleEndian::GET_WORD(hdrBuff+12); header->speed = LittleEndian::GET_WORD(hdrBuff+14); memcpy(header->ord, hdrBuff+16, 256); if(header->ordnum > MP_MAXORDERS) header->ordnum = MP_MAXORDERS; delete[] hdrBuff; header->mainvol=255; header->flags = XModule::MODULE_XMNOTECLIPPING | XModule::MODULE_XMARPEGGIO | XModule::MODULE_XMPORTANOTEBUFFER | XModule::MODULE_XMVOLCOLUMNVIBRATO; header->uppernotebound = 119; mp_sint32 i,y,sc; for (i=0;i<32;i++) header->pan[i]=0x80; // old version? if (header->ver == 0x102 || header->ver == 0x103) { mp_sint32 s = 0; mp_sint32 e = 0; for (y=0;yinsnum;y++) { f.readDwords(&instr[y].size,1); f.read(&instr[y].name,1,22); f.read(&instr[y].type,1,1); mp_uword numSamples = 0; f.readWords(&numSamples,1); if(numSamples > 96) return MP_LOADER_FAILED; instr[y].samp = numSamples; if (instr[y].size == 29) { #ifdef MILKYTRACKER s+=16; #endif for (mp_sint32 i = 0; i < 120; i++) instr[y].snum[i] = -1; continue; } f.readDwords(&instr[y].shsize,1); memset(insData, 0, 230); if (instr[y].size - 33 > 230) return MP_OUT_OF_MEMORY; f.read(insData, 1, instr[y].size - 33); if (instr[y].samp) { mp_ubyte* insDataPtr = insData; memcpy(nbu, insDataPtr, 96); insDataPtr+=96; TEnvelope venv; TEnvelope penv; memset(&venv,0,sizeof(venv)); memset(&penv,0,sizeof(penv)); mp_sint32 k; for (k = 0; k < XM_ENVELOPENUMPOINTS; k++) { venv.env[k][0] = LittleEndian::GET_WORD(insDataPtr); venv.env[k][1] = LittleEndian::GET_WORD(insDataPtr+2); insDataPtr+=4; } for (k = 0; k < XM_ENVELOPENUMPOINTS; k++) { penv.env[k][0] = LittleEndian::GET_WORD(insDataPtr); penv.env[k][1] = LittleEndian::GET_WORD(insDataPtr+2); insDataPtr+=4; } venv.num = *insDataPtr++; if (venv.num > XM_ENVELOPENUMPOINTS) venv.num = XM_ENVELOPENUMPOINTS; penv.num = *insDataPtr++; if (penv.num > XM_ENVELOPENUMPOINTS) penv.num = XM_ENVELOPENUMPOINTS; venv.sustain = *insDataPtr++; venv.loops = *insDataPtr++; venv.loope = *insDataPtr++; penv.sustain = *insDataPtr++; penv.loops = *insDataPtr++; penv.loope = *insDataPtr++; venv.type = *insDataPtr++; penv.type = *insDataPtr++; mp_ubyte vibtype, vibsweep, vibdepth, vibrate; mp_uword volfade; vibtype = *insDataPtr++; vibsweep = *insDataPtr++; vibdepth = *insDataPtr++; vibrate = *insDataPtr++; vibdepth<<=1; volfade = LittleEndian::GET_WORD(insDataPtr); insDataPtr+=2; volfade<<=1; //instr[y].res = LittleEndian::GET_WORD(insDataPtr); insDataPtr+=2; for (mp_sint32 l=0;laddVolumeEnvelope(venv)) return MP_OUT_OF_MEMORY; if (!module->addPanningEnvelope(penv)) return MP_OUT_OF_MEMORY; mp_sint32 g=0, sc; for (sc=0;scaddSongMessageLine(line); // ignore empty samples #ifndef MILKYTRACKER // ignore empty samples when not being a tracker if (smp[g+s].samplen) { smpReloc[sc] = g; g++; } else smpReloc[sc] = -1; #else smpReloc[sc] = g; g++; #endif } instr[y].samp = g; for (sc = 0; sc < 96; sc++) { if (smpReloc[nbu[sc]] == -1) instr[y].snum[sc] = -1; else instr[y].snum[sc] = smpReloc[nbu[sc]]+s; } e++; } else { for (mp_sint32 i = 0; i < 120; i++) instr[y].snum[i] = -1; } #ifdef MILKYTRACKER s+=16; #else s+=instr[y].samp; #endif } header->smpnum=s; header->volenvnum=e; header->panenvnum=e; } for (y=0;ypatnum;y++) { if (header->ver == 0x104 || header->ver == 0x103) { f.readDwords(&phead[y].len,1); f.read(&phead[y].ptype,1,1); f.readWords(&phead[y].rows,1); f.readWords(&phead[y].patdata,1); } else { f.readDwords(&phead[y].len,1); f.read(&phead[y].ptype,1,1); phead[y].rows = (mp_uword)f.readByte()+1; f.readWords(&phead[y].patdata,1); } phead[y].effnum=2; phead[y].channum=(mp_ubyte)header->channum; phead[y].patternData = new mp_ubyte[phead[y].rows*header->channum*6]; // out of memory? if (phead[y].patternData == NULL) { return MP_OUT_OF_MEMORY; } memset(phead[y].patternData,0,phead[y].rows*header->channum*6); if (phead[y].patdata) { mp_ubyte *buffer = new mp_ubyte[phead[y].patdata]; // out of memory? if (buffer == NULL) { return MP_OUT_OF_MEMORY; } f.read(buffer,1,phead[y].patdata); //printf("%i\n", phead[y].patdata); mp_sint32 pc = 0, bc = 0; for (mp_sint32 r=0;rchannum;c++) { mp_ubyte slot[5]; memset(slot,0,5); if ((buffer[pc]&128)) { mp_ubyte pb = buffer[pc]; pc++; if ((pb&1)) { //phead[y].patternData[bc]=buffer[pc]; slot[0]=buffer[pc]; pc++; } if ((pb&2)) { //phead[y].patternData[bc+1]=buffer[pc]; slot[1]=buffer[pc]; pc++; } if ((pb&4)) { //phead[y].patternData[bc+2]=buffer[pc]; slot[2]=buffer[pc]; pc++; } if ((pb&8)) { //phead[y].patternData[bc+3]=buffer[pc]; slot[3]=buffer[pc]; pc++; } if ((pb&16)) { //phead[y].patternData[bc+4]=buffer[pc]; slot[4]=buffer[pc]; pc++; } } else { //memcpy(phead[y].patternData+bc,buffer+pc,5); memcpy(slot,buffer+pc,5); pc+=5; } char gl=0; for (mp_sint32 i=0;i64) bl=64; slot[4]=(bl*261120)>>16;*/ } if ((!slot[3])&&(slot[4])) slot[3]=0x20; if (slot[3]==0xE) { slot[3]=(slot[4]>>4)+0x30; slot[4]=slot[4]&0xf; } if (slot[3]==0x21) { slot[3]=(slot[4]>>4)+0x40; slot[4]=slot[4]&0xf; } if (slot[0]==97) slot[0]=XModule::NOTE_OFF; phead[y].patternData[bc]=slot[0]; phead[y].patternData[bc+1]=slot[1]; XModule::convertXMVolumeEffects(slot[2], phead[y].patternData[bc+2], phead[y].patternData[bc+3]); phead[y].patternData[bc+4]=slot[3]; phead[y].patternData[bc+5]=slot[4]; /*if ((y==3)&&(c==2)) { for (mp_sint32 bl=0;bl<6;bl++) cprintf("%x ",phead[y].patternData[bc+bl]); cprintf("\r\n"); getch(); };*/ /*printf("Note : %i\r\n",phead[y].patternData[bc]); printf("Ins : %i\r\n",phead[y].patternData[bc+1]); printf("Vol : %i\r\n",phead[y].patternData[bc+2]); printf("Eff : %i\r\n",phead[y].patternData[bc+3]); printf("Effop: %i\r\n",phead[y].patternData[bc+4]); getch();*/ bc+=6; } // for c } // for r delete[] buffer; } } if (header->ver == 0x104) { mp_sint32 s = 0; mp_sint32 e = 0; for (y=0;yinsnum;y++) { // fixes MOOH.XM loading problems // seems to store more instruments in the header than in the actual file if (f.posWithBaseOffset() >= fileSize) break; //TXMInstrument* ins = &instr[y]; f.readDwords(&instr[y].size,1); if (instr[y].size < 29) { mp_ubyte buffer[29]; memset(buffer, 0, sizeof(buffer)); f.read(buffer, 1, instr[y].size - 4); memcpy(instr[y].name, buffer, 22); instr[y].type = buffer[22]; instr[y].samp = LittleEndian::GET_WORD(buffer + 23); } else { f.read(&instr[y].name,1,22); f.read(&instr[y].type,1,1); f.readWords(&instr[y].samp,1); } //printf("%i, %i\n", instr[y].size, instr[y].samp); if (instr[y].size <= 29) { #ifdef MILKYTRACKER s+=16; #endif for (mp_sint32 i = 0; i < 120; i++) instr[y].snum[i] = -1; continue; } f.readDwords(&instr[y].shsize,1); #ifdef VERBOSE printf("%i/%i: %i, %i, %i, %s\n",y,header->insnum-1,instr[y].size,instr[y].shsize,instr[y].samp,instr[y].name); #endif memset(insData, 0, 230); if (instr[y].size - 33 > 230) { //return -7; break; } f.read(insData, 1, instr[y].size - 33); /*printf("%i\r\n",instr[y].size); printf("%s\r\n",instr[y].name); printf("%i\r\n",instr[y].type); printf("%i\r\n",instr[y].samp); printf("%i\r\n",instr[y].shsize);*/ //getch(); memset(smpReloc, 0, sizeof(smpReloc)); if (instr[y].samp) { mp_ubyte* insDataPtr = insData; //f.read(&nbu,1,96); memcpy(nbu, insDataPtr, 96); insDataPtr+=96; TEnvelope venv; TEnvelope penv; memset(&venv,0,sizeof(venv)); memset(&penv,0,sizeof(penv)); mp_sint32 k; for (k = 0; k < XM_ENVELOPENUMPOINTS; k++) { venv.env[k][0] = LittleEndian::GET_WORD(insDataPtr); venv.env[k][1] = LittleEndian::GET_WORD(insDataPtr+2); insDataPtr+=4; } for (k = 0; k < XM_ENVELOPENUMPOINTS; k++) { penv.env[k][0] = LittleEndian::GET_WORD(insDataPtr); penv.env[k][1] = LittleEndian::GET_WORD(insDataPtr+2); insDataPtr+=4; } venv.num = *insDataPtr++; if (venv.num > XM_ENVELOPENUMPOINTS) venv.num = XM_ENVELOPENUMPOINTS; penv.num = *insDataPtr++; if (penv.num > XM_ENVELOPENUMPOINTS) penv.num = XM_ENVELOPENUMPOINTS; venv.sustain = *insDataPtr++; venv.loops = *insDataPtr++; venv.loope = *insDataPtr++; penv.sustain = *insDataPtr++; penv.loops = *insDataPtr++; penv.loope = *insDataPtr++; venv.type = *insDataPtr++; penv.type = *insDataPtr++; mp_ubyte vibtype, vibsweep, vibdepth, vibrate; mp_uword volfade; vibtype = *insDataPtr++; vibsweep = *insDataPtr++; vibdepth = *insDataPtr++; vibrate = *insDataPtr++; vibdepth<<=1; //f.readWords(&volfade,1); volfade = LittleEndian::GET_WORD(insDataPtr); insDataPtr+=2; volfade<<=1; //instr[y].res = LittleEndian::GET_WORD(insDataPtr); insDataPtr+=2; for (mp_sint32 l=0;laddVolumeEnvelope(venv)) return MP_OUT_OF_MEMORY; if (!module->addPanningEnvelope(penv)) return MP_OUT_OF_MEMORY; mp_sint32 g=0, sc; for (sc=0;scaddSongMessageLine(line); #ifndef MILKYTRACKER // ignore empty samples when not being a tracker if (smp[g+s].samplen) { smpReloc[sc] = g; g++; } else smpReloc[sc] = -1; #else smpReloc[sc] = g; g++; #endif } instr[y].samp = g; for (sc = 0; sc < 96; sc++) { if (smpReloc[nbu[sc]] == -1) instr[y].snum[sc] = -1; else instr[y].snum[sc] = smpReloc[nbu[sc]]+s; } for (sc=0;sc>=1; smp[s].loopstart>>=1; smp[s].looplen>>=1; } mp_sint32 result = module->loadModuleSample(f, s, adpcm ? XModule::ST_PACKING_ADPCM : XModule::ST_DELTA, adpcm ? (XModule::ST_PACKING_ADPCM | XModule::ST_16BIT) : (XModule::ST_DELTA | XModule::ST_16BIT), oldSize); if (result != MP_OK) return result; if (adpcm) smp[s].res = 0; } s++; if (s>=MP_MAXSAMPLES) return MP_OUT_OF_MEMORY; } e++; } else { for (mp_sint32 i = 0; i < 120; i++) instr[y].snum[i] = -1; } #ifdef MILKYTRACKER s+=16 - instr[y].samp; #endif } header->smpnum=s; header->volenvnum=e; header->panenvnum=e; } else { mp_sint32 s = 0; for (y=0;yinsnum;y++) { for (sc=0;sc>=1; smp[s].loopstart>>=1; smp[s].looplen>>=1; } mp_sint32 result = module->loadModuleSample(f, s, XModule::ST_DELTA, XModule::ST_DELTA | XModule::ST_16BIT, oldSize); if (result != MP_OK) return result; } s++; if (s>=MP_MAXSAMPLES) return MP_OUT_OF_MEMORY; } #ifdef MILKYTRACKER s+=16 - instr[y].samp; #endif } } // convert modplug stereo samples for (mp_sint32 s = 0; s < header->smpnum; s++) { if (smp[s].type & 32) { // that's what's allowed, stupid modplug tracker smp[s].type &= 3+16; if (smp[s].sample == NULL) continue; if (!(smp[s].type&16)) { smp[s].samplen>>=1; smp[s].loopstart>>=1; smp[s].looplen>>=1; mp_sbyte* sample = (mp_sbyte*)smp[s].sample; mp_sint32 samplen = smp[s].samplen; for (mp_sint32 i = 0; i < samplen; i++) { mp_sint32 s = ((mp_sint32)sample[i] + (mp_sint32)sample[i + samplen]) >> 1; if (s < -128) s = -128; if (s > 127) s = 127; sample[i] = (mp_sbyte)s; } } else { smp[s].samplen>>=1; smp[s].loopstart>>=1; smp[s].looplen>>=1; mp_sword* sample = (mp_sword*)smp[s].sample; mp_sint32 samplen = smp[s].samplen; for (mp_sint32 i = 0; i < samplen; i++) { mp_sint32 s = ((mp_sint32)sample[i] + (mp_sint32)sample[i + samplen]) >> 1; if (s < -32768) s = -32768; if (s > 32767) s = 32767; sample[i] = (mp_sword)s; } } } // correct loop type 0x03 (undefined) // will become ping pong loop // note that FT2 will refuse to load XM files with such a loop type if ((smp[s].type & 0x3) == 0x3) smp[s].type&=~1; } // correct number of patterns if necessary, otherwise the post processing will remove // the "invalid" patterns from the order list bool addPatterns = false; for (i = 0; i < header->ordnum; i++) if (header->ord[i]+1 > header->patnum) { header->patnum = header->ord[i]+1; addPatterns = true; } // if the pattern number has been adjusted, add some empty patterns if (addPatterns) { for (i = 0; i < header->patnum; i++) if (phead[i].patternData == NULL) { phead[i].rows = 64; phead[i].effnum = 2; phead[i].channum = (mp_ubyte)header->channum; phead[i].patternData = new mp_ubyte[phead[i].rows*header->channum*6]; // out of memory? if (phead[i].patternData == NULL) { return MP_OUT_OF_MEMORY; } memset(phead[i].patternData,0,phead[i].rows*header->channum*6); } } // check for MODPLUG extensions if (f.posWithBaseOffset() + 8 <= fileSize) { char buffer[4]; f.read(buffer, 1, 4); if (memcmp(buffer, "text", 4) == 0) { mp_uint32 len = f.readDword(); module->allocateSongMessage(len+1); memset(module->message, 0, len+1); f.read(module->message, 1, len); } } module->postProcessSamples(); return MP_OK; } MilkyTracker-1.02.00/src/milkyplay/Loaders.h000066400000000000000000000100731324432207300206200ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * Loaders.h * MilkyPlay * * Created by Peter Barth on Tue Oct 19 2004. * */ #ifndef __LOADERS_H__ #define __LOADERS_H__ #include "XModule.h" #include "LittleEndian.h" // i'm a lazy guy #define DECLARE_LOADERCLASS(LOADERNAME) \ class LOADERNAME : public XModule::LoaderInterface \ { \ public: \ const char* identifyModule(const mp_ubyte* buffer); \ mp_sint32 load(XMFileBase& f, XModule* module); \ }; \ DECLARE_LOADERCLASS(Loader669) // 669 Composer (Uses special FAR Player) DECLARE_LOADERCLASS(LoaderAMF_1) // Asylum Music Format 1.0 DECLARE_LOADERCLASS(LoaderAMF_2) // Digital Sound And Music Interface (DMP module format) DECLARE_LOADERCLASS(LoaderAMSv1) // Extreme Tracker AMS DECLARE_LOADERCLASS(LoaderAMSv2) // Velvet Studio AMS DECLARE_LOADERCLASS(LoaderDBM) // Digibooster Pro DECLARE_LOADERCLASS(LoaderCBA) // Chuck Biscuits / Black Artist special format (only one Music Disk) DECLARE_LOADERCLASS(LoaderDIGI) // Digibooster 1.x DECLARE_LOADERCLASS(LoaderDSMv1) // old digisound interface kit DECLARE_LOADERCLASS(LoaderDSMv2) // new digisound interface kit DECLARE_LOADERCLASS(LoaderDSm) // dynamic studio DECLARE_LOADERCLASS(LoaderDTM_1) // Digitrekker 3.0 (NOT DigiTrakker!!!) DECLARE_LOADERCLASS(LoaderDTM_2) // Digital Tracker DECLARE_LOADERCLASS(LoaderFAR) // Farandole Composer (Uses special Player) //DECLARE_LOADERCLASS(LoaderFNK) DECLARE_LOADERCLASS(LoaderGDM) // General Digimusic DECLARE_LOADERCLASS(LoaderGMC) // Game Music Creator (very similiar to SoundTracker, 15 ins, kept in LoaderMOD.cpp) DECLARE_LOADERCLASS(LoaderIMF) // Imago Orpheus DECLARE_LOADERCLASS(LoaderIT) // Impulse Tracker DECLARE_LOADERCLASS(LoaderMDL) // Digitrakker 2.0/3.0 DECLARE_LOADERCLASS(LoaderMOD) // Protracker and compatible (1..32 channels) DECLARE_LOADERCLASS(LoaderMTM) // MultiTracker DECLARE_LOADERCLASS(LoaderMXM) // Cubic Tiny XM DECLARE_LOADERCLASS(LoaderOKT) // Oktalyzer DECLARE_LOADERCLASS(LoaderPLM) // DisorderTracker II DECLARE_LOADERCLASS(LoaderPSMv1) // old Epic MegaGames MASI (Epic Pinball, ...) DECLARE_LOADERCLASS(LoaderPSMv2) // new Epic MegaGames MASI (Jazz Jack Rabbit, ...) DECLARE_LOADERCLASS(LoaderPTM) // PolyTracker DECLARE_LOADERCLASS(LoaderS3M) // ScreamTracker III DECLARE_LOADERCLASS(LoaderSTM) // ScreamTracker II DECLARE_LOADERCLASS(LoaderSFX) // SoundFX module (very similiar to SoundTracker, 15 ins, kept in LoaderMOD.cpp) DECLARE_LOADERCLASS(LoaderULT) // Ultratracker DECLARE_LOADERCLASS(LoaderUNI) // MikMod internal module DECLARE_LOADERCLASS(LoaderXM) // FT2 Extended Module #endif MilkyTracker-1.02.00/src/milkyplay/MasterMixer.cpp000066400000000000000000000317161324432207300220310ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * MasterMixer.cpp * MilkyPlay * * Created by Peter Barth on 14.12.07. * */ #include "MasterMixer.h" #include "MilkyPlayCommon.h" #include "AudioDriverBase.h" #include "AudioDriverManager.h" enum { BlockTimeOut = 5000 }; MasterMixer::MasterMixer(mp_uint32 sampleRate, mp_uint32 bufferSize/* = 0*/, mp_uint32 numDevices/* = 1*/, AudioDriverInterface* audioDriver/* = 0*/) : listener(0), sampleRate(sampleRate), bufferSize(bufferSize), buffer(0), sampleShift(0), disableMixing(false), numDevices(numDevices), filterHook(0), devices(new DeviceDescriptor[numDevices]), audioDriverManager(0), audioDriver(audioDriver), initialized(false), started(false), paused(false) { } MasterMixer::~MasterMixer() { cleanup(); delete audioDriverManager; delete[] devices; } void MasterMixer::setMasterMixerNotificationListener(MasterMixerNotificationListener* listener) { this->listener = listener; } mp_sint32 MasterMixer::openAudioDevice() { if (initialized) return 0; if (audioDriver == 0) { if (audioDriverManager == 0) audioDriverManager = new AudioDriverManager(); audioDriver = audioDriverManager->getPreferredAudioDriver(); } if (bufferSize == 0) { bufferSize = audioDriver->getPreferredBufferSize(); notifyListener(MasterMixerNotificationBufferSizeChanged); } cleanup(); mp_sint32 res = audioDriver->initDevice(bufferSize*MP_NUMCHANNELS, sampleRate, this); if (res < 0) return res; if (res > 0) { // if the result is positive it reflects the number of 16 bit words // in the obtained buffer => divide by MP_NUMCHANNELS is the correct buffer size bufferSize = res / MP_NUMCHANNELS; notifyListener(MasterMixerNotificationBufferSizeChanged); } if (audioDriver->getMixFrequency() != sampleRate) { sampleRate = audioDriver->getMixFrequency(); notifyListener(MasterMixerNotificationSampleRateChanged); } buffer = new mp_sint32[bufferSize*MP_NUMCHANNELS]; initialized = true; return 0; } mp_sint32 MasterMixer::closeAudioDevice() { if (started) stop(); if (!initialized) return 0; mp_sint32 res = 0; if (audioDriver) { res = audioDriver->closeDevice(); if (res == 0) initialized = false; } else { initialized = false; } return res; } mp_sint32 MasterMixer::start() { if (started) return 0; mp_sint32 res = 0; if (!initialized) { res = openAudioDevice(); if (res < 0) return res; } res = audioDriver->start(); if (res != 0) return res; started = true; return 0; } mp_sint32 MasterMixer::stop() { if (!started) return 0; mp_sint32 res = audioDriver->stop(); if (res == 0) started = false; return res; } mp_sint32 MasterMixer::pause() { mp_sint32 res = audioDriver->pause(); paused = true; return res; } mp_sint32 MasterMixer::resume() { paused = false; return audioDriver->resume(); } mp_sint32 MasterMixer::setBufferSize(mp_uint32 bufferSize) { if (bufferSize != this->bufferSize) { mp_sint32 res = closeAudioDevice(); if (res != 0) return res; this->bufferSize = bufferSize; delete[] buffer; buffer = NULL; notifyListener(MasterMixerNotificationBufferSizeChanged); } return 0; } mp_sint32 MasterMixer::setSampleRate(mp_uint32 sampleRate) { if (sampleRate != this->sampleRate) { mp_sint32 res = closeAudioDevice(); if (res != 0) return res; this->sampleRate = sampleRate; notifyListener(MasterMixerNotificationSampleRateChanged); } return 0; } bool MasterMixer::addDevice(Mixable* device, bool paused/* = false*/) { for (mp_uint32 i = 0; i < numDevices; i++) { if (devices[i].mixable == NULL) { devices[i].mixable = device; devices[i].markedForRemoval = false; devices[i].markedForPause = false; devices[i].paused = paused; return true; } } return false; } bool MasterMixer::removeDevice(Mixable* device, bool blocking/* = true*/) { for (mp_uint32 i = 0; i < numDevices; i++) { if (devices[i].mixable == device) { if (!started) { devices[i].markedForRemoval = false; devices[i].mixable = 0; return true; } devices[i].markedForRemoval = true; if (blocking) { // this is going to loop infinitely when the audio device is not running double waitMillis = ((double)(bufferSize/2) / (double)sampleRate) * 1000.0 * 2.0; if (waitMillis < 1.0) waitMillis = 1.0; if (waitMillis > (double)BlockTimeOut) waitMillis = (double)BlockTimeOut; mp_uint32 time = 0; const mp_uint32 sleepTime = 10; while (devices[i].mixable && time < (mp_uint32)waitMillis) { audioDriver->msleep(sleepTime); time+=sleepTime; } // timeout if (time >= waitMillis && devices[i].mixable) { devices[i].mixable = 0; devices[i].markedForRemoval = false; } } return true; } } return false; } bool MasterMixer::isDeviceRemoved(Mixable* device) { for (mp_uint32 i = 0; i < numDevices; i++) { if (devices[i].mixable == device) { return false; } } return true; } bool MasterMixer::pauseDevice(Mixable* device, bool blocking/* = true*/) { for (mp_uint32 i = 0; i < numDevices; i++) { if (devices[i].mixable == device) { if (!started) { devices[i].markedForPause = false; devices[i].paused = true; return true; } devices[i].markedForPause = true; if (blocking) { // this is going to loop infinitely when the audio device is not running double waitMillis = ((double)(bufferSize/2) / (double)sampleRate) * 1000.0 * 2.0; if (waitMillis < 1.0) waitMillis = 1.0; if (waitMillis > (double)BlockTimeOut) waitMillis = (double)BlockTimeOut; mp_uint32 time = 0; const mp_uint32 sleepTime = 10; while (!devices[i].paused && time < (mp_uint32)waitMillis) { audioDriver->msleep(sleepTime); time+=sleepTime; } // timeout if (time >= waitMillis && !devices[i].paused) { devices[i].paused = true; devices[i].markedForPause = false; } } return true; } } return false; } bool MasterMixer::resumeDevice(Mixable* device) { for (mp_uint32 i = 0; i < numDevices; i++) { if (devices[i].mixable == device && devices[i].paused) { devices[i].paused = false; return true; } } return false; } bool MasterMixer::isDevicePaused(Mixable* device) { for (mp_uint32 i = 0; i < numDevices; i++) { if (devices[i].mixable == device) { return devices[i].paused; } } return false; } void MasterMixer::mixerHandler(mp_sword* buffer) { if (!disableMixing) prepareBuffer(); const register mp_sint32 numDevices = this->numDevices; const register mp_uint32 bufferSize = this->bufferSize; mp_sint32* mixBuffer = this->buffer; DeviceDescriptor* device = this->devices; for (mp_sint32 i = 0; i < numDevices; i++, device++) { if (device->markedForRemoval && device->mixable) { device->markedForRemoval = false; device->mixable = 0; } else if (device->mixable && device->markedForPause) { device->markedForPause = false; device->paused = true; } else if (device->mixable && !device->paused) { device->mixable->mix(mixBuffer, bufferSize); } } if (!disableMixing) swapOutBuffer(buffer); } void MasterMixer::notifyListener(MasterMixerNotifications notification) { if (listener) listener->masterMixerNotification(notification); } void MasterMixer::cleanup() { if (started) stop(); if (initialized) closeAudioDevice(); if (buffer) { delete[] buffer; buffer = 0; } } inline void MasterMixer::prepareBuffer() { memset(buffer, 0, bufferSize*MP_NUMCHANNELS*sizeof(mp_sint32)); } inline void MasterMixer::swapOutBuffer(mp_sword* bufferOut) { if (filterHook) filterHook->mix(buffer, bufferSize); register mp_sint32* bufferIn = buffer; const register mp_sint32 sampleShift = this->sampleShift; const register mp_sint32 lowerBound = -((128<bufferSize*MP_NUMCHANNELS; for (mp_sint32 i = 0; i < bufferSize; i++) { mp_sint32 b = *bufferIn++; if (b>upperBound) b = upperBound; else if (b>sampleShift; } /* mp_sint32* buffer32 = mixbuff32; mp_sint32 lsampleShift = sampleShift; mp_sint32 lowerBound = -((128<upperBound) b = upperBound; else if (b>lsampleShift; } } else { lsampleShift = sampleShift; lowerBound = -((128<upperBound) { if (abs(b) > lastPeakValue) lastPeakValue = abs(b); b = upperBound; } else if (b lastPeakValue) lastPeakValue = abs(b); b = lowerBound; } *buffer16++ = b>>lsampleShift; } if (lastPeakValue) { float v = 32768.0f*(1< 256) masterVolume = 256; } //else //{ // masterVolume = 256; // sampleShift = 0; //} }*/ } const char* MasterMixer::getCurrentAudioDriverName() const { if (audioDriver) return audioDriver->getDriverID(); return NULL; } bool MasterMixer::setCurrentAudioDriverByName(const char* name) { bool result = true; if (audioDriverManager == 0) audioDriverManager = new AudioDriverManager(); AudioDriverInterface* newAudioDriver = audioDriverManager->getAudioDriverByName(name); if (newAudioDriver == 0) { newAudioDriver = audioDriverManager->getPreferredAudioDriver(); result = false; } // Same instance, don't allocate new audio driver if (audioDriver == newAudioDriver) return result; mp_sint32 err = 0; if (initialized) { err = closeAudioDevice(); } audioDriver = newAudioDriver; return result; } const AudioDriverManager* MasterMixer::getAudioDriverManager() const { if (audioDriverManager == 0) audioDriverManager = new AudioDriverManager(); return audioDriverManager; } mp_sint32 MasterMixer::getCurrentSample(mp_sint32 position, mp_sint32 channel) { if (position < 0) { position = abs(position); } if (position > (mp_sint32)bufferSize-1) { position %= bufferSize*2; position -= bufferSize; position = bufferSize-1-position; } mp_sint32 val = (mp_sword)this->buffer[position*MP_NUMCHANNELS+channel]; if (val < -32768) val = -32768; if (val > 32767) val = 32767; return val; } mp_sint32 MasterMixer::getCurrentSamplePeak(mp_sint32 position, mp_sint32 channel) { if (audioDriver == 0) return 0; const mp_uint32 mixBufferSize = bufferSize; const mp_sint32* mixbuff32 = this->buffer; if (audioDriver->supportsTimeQuery()) { mp_sword peak = 0; for (mp_sint32 p = position-mixBufferSize; p <= position; p++) { mp_sword s = getCurrentSample(p, channel); if (s > peak) peak = s; if (-s > peak) peak = -s; } return peak; } else { mp_sword peak = 0; for (mp_uint32 pos = 0; pos < mixBufferSize; pos++) { mp_sint32 s = mixbuff32[pos*MP_NUMCHANNELS+channel]; if (s < -32768) s = -32768; if (s > 32767) s = 32767; if (s > peak) peak = s; if (-s > peak) peak = -s; } return peak; } } MilkyTracker-1.02.00/src/milkyplay/MasterMixer.h000066400000000000000000000116241324432207300214720ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * MasterMixer.h * MilkyPlay * * Created by Peter Barth on 14.12.07. * */ #ifndef __MASTERMIXER_H__ #define __MASTERMIXER_H__ #include "Mixable.h" class MasterMixer { public: enum MasterMixerNotifications { MasterMixerNotificationBufferSizeChanged, MasterMixerNotificationSampleRateChanged }; class MasterMixerNotificationListener { public: virtual ~MasterMixerNotificationListener() { } virtual void masterMixerNotification(MasterMixerNotifications notification) = 0; }; MasterMixer(mp_uint32 sampleRate, mp_uint32 bufferSize = 0, mp_uint32 numDevices = 1, class AudioDriverInterface* audioDriver = 0); virtual ~MasterMixer(); void setMasterMixerNotificationListener(MasterMixerNotificationListener* listener); mp_sint32 openAudioDevice(); mp_sint32 closeAudioDevice(); mp_sint32 start(); mp_sint32 stop(); mp_sint32 pause(); mp_sint32 resume(); bool isPlaying() const { return started; } bool isPaused() const { return paused; } bool isInitialized() const { return initialized; } bool isActive() const { return started && !paused; } mp_sint32 setBufferSize(mp_uint32 bufferSize); mp_uint32 getBufferSize() const { return bufferSize; } mp_sint32 setSampleRate(mp_uint32 sampleRate); mp_uint32 getSampleRate() const { return sampleRate; } bool addDevice(Mixable* device, bool paused = false); bool removeDevice(Mixable* device, bool blocking = true); bool isDeviceRemoved(Mixable* device); bool pauseDevice(Mixable* device, bool blocking = true); bool resumeDevice(Mixable* device); bool isDevicePaused(Mixable* device); void mixerHandler(mp_sword* buffer); // allows to control the loudness of the resulting output stream // by bit-shifting the output *right* (dividing by 2^shift) void setSampleShift(mp_sint32 shift) { sampleShift = shift; } mp_uint32 getSampleShift() const { return sampleShift; } // disable mixing... you don't need to understand this void setDisableMixing(bool disableMixing) { this->disableMixing = disableMixing; } void setFilterHook(Mixable* filterHook) { this->filterHook = filterHook; } Mixable* getFilterHook(Mixable* filterHook) const { return filterHook; } // some legacy functions used by milkytracker const class AudioDriverInterface* getAudioDriver() const { return audioDriver; } const char* getCurrentAudioDriverName() const; bool setCurrentAudioDriverByName(const char* name); const class AudioDriverManager* getAudioDriverManager() const; mp_sint32 getCurrentSample(mp_sint32 position, mp_sint32 channel); mp_sint32 getCurrentSamplePeak(mp_sint32 position, mp_sint32 channel); private: MasterMixerNotificationListener* listener; mp_uint32 sampleRate; mp_uint32 bufferSize; mp_sint32* buffer; mp_uint32 sampleShift; bool disableMixing; mp_uint32 numDevices; Mixable* filterHook; struct DeviceDescriptor { Mixable* mixable; bool markedForRemoval; bool markedForPause; bool paused; DeviceDescriptor() : mixable(0), markedForRemoval(false), markedForPause(false), paused(false) { } }; DeviceDescriptor* devices; mutable class AudioDriverManager* audioDriverManager; AudioDriverInterface* audioDriver; bool initialized; bool started; bool paused; void notifyListener(MasterMixerNotifications notification); void cleanup(); inline void prepareBuffer(); inline void swapOutBuffer(mp_sword* bufferOut); }; #endif MilkyTracker-1.02.00/src/milkyplay/MilkyPlay.h000066400000000000000000000041261324432207300211440ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * MilkyPlay.h * MilkyPlay * * Created by Peter Barth on Thu Jan 20 2005. * */ #ifndef __MILKYPLAY_H__ #define __MILKYPLAY_H__ #include "AudioDriverManager.h" #include "MasterMixer.h" #include "PlayerSTD.h" #include "PlayerGeneric.h" #include "XModule.h" #ifdef MILKYTRACKER #include "XIInstrument.h" #include "SampleLoaderAbstract.h" #include "SampleLoaderGeneric.h" #else #include "PlayerFAR.h" #include "PlayerIT.h" #endif #define MILKYPLAY_HIVER (mp_uint32)((0<<16) + (0)) #define MILKYPLAY_LOVER (mp_uint32)((2<<16) + (0)) #endif MilkyTracker-1.02.00/src/milkyplay/MilkyPlayCommon.h000066400000000000000000000060561324432207300223210ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * MilkyPlayCommon.h * MilkyPlay * * Created by Peter Barth on 23.12.04. * */ #ifndef __MILKYPLAYCOMMON_H__ #define __MILKYPLAYCOMMON_H__ #include "MilkyPlayTypes.h" #include "MilkyPlayResults.h" #if defined WIN32 && !defined _WIN32_WCE #include #define ASSERT assert #endif #if defined WIN32 || defined _WIN32_WCE #include #elif defined __PSP__ #include #define ASSERT assert #include #include #include #include #include #else #include #define ASSERT assert #include #include #include #include #include #endif #if defined WIN32 || defined _WIN32_WCE typedef TCHAR SYSCHAR; typedef HANDLE FHANDLE; #ifdef __GNUWIN32__ typedef long long mp_int64; #else typedef __int64 mp_int64; #endif #else typedef long long mp_int64; typedef char SYSCHAR; typedef FILE* FHANDLE; #endif #ifdef MILKYTRACKER #define MP_MAXSAMPLES 256*16 #else #define MP_MAXSAMPLES 256 #endif #define MP_NUMEFFECTS 4 #if defined(WIN32) || defined(_WIN32_WCE) && !defined(__FORCE_SDL_AUDIO__) #define DRIVER_WIN32 #elif defined(__APPLE__) && !defined(__FORCE_SDL_AUDIO__) #define DRIVER_OSX #elif defined(__MILKYPLAY_UNIX__) && !defined(__FORCE_SDL_AUDIO__) #define DRIVER_UNIX #elif defined(__PSP__) && !defined(__FORCE_SDL_AUDIO__) #define DRIVER_PSP #elif defined(__HAIKU__) && !defined(__FORCE_SDL_AUDIO__) #define DRIVER_HAIKU #else #define DRIVER_SDL #endif #endif MilkyTracker-1.02.00/src/milkyplay/MilkyPlayResults.h000066400000000000000000000036651324432207300225350ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * MilkyPlayResults.h * MilkyPlay * * Created by Peter Barth on 01.05.10. * */ #ifndef __MILKYPLAYRESULTS_H__ #define __MILKYPLAYRESULTS_H__ #define MP_OK 0 #define MP_DEVICE_ERROR -1 #define MP_UNSUPPORTED_FORMAT -2 #define MP_OUT_OF_MEMORY -7 #define MP_UNSPECIFIED -8 #define MP_UNKNOWN_FORMAT -9 #define MP_UNSUPPORTED -10 #define MP_LOADER_FAILED -11 #endif MilkyTracker-1.02.00/src/milkyplay/MilkyPlayTypes.h000066400000000000000000000036701324432207300221740ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * Types.h * MilkyPlay * * Created by Peter Barth on Tue Oct 19 2004. * */ #ifndef __MILKYPLAYTYPES_H__ #define __MILKYPLAYTYPES_H__ typedef signed char mp_sbyte; typedef unsigned char mp_ubyte; typedef char mp_char; typedef signed short mp_sword; typedef unsigned short mp_uword; typedef unsigned int mp_dword; typedef unsigned int mp_uint32; typedef int mp_sint32; #endif MilkyTracker-1.02.00/src/milkyplay/Mixable.h000066400000000000000000000035011324432207300206060ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * Mixable.h * MilkyPlay * * Created by Peter Barth on 14.12.07. * */ #ifndef __MIXABLE_H__ #define __MIXABLE_H__ #include "MilkyPlayTypes.h" struct Mixable { virtual ~Mixable() { } virtual void mix(mp_sint32* buffer, mp_uint32 numSamples) = 0; }; #endif MilkyTracker-1.02.00/src/milkyplay/PlayerBase.cpp000066400000000000000000000163051324432207300216150ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * PlayerBase.cpp * MilkyPlay * * Created by Peter Barth on Thu Jan 20 2005. * */ #include "PlayerBase.h" #include "XModule.h" mp_sint32 PlayerBase::kick() { // if the player hasn't been initialized until now => DO IT if (!isInitialized()) { mp_sint32 err = initDevice(); if (err != MP_OK) { return err; } } // - configure player: -------------- // playing => song is not paused yet paused = false; // playing => song has not stopped yet halted = false; // set idle mode setIdle(idle); // - configure mixer: --------------- // mixer reset resetChannelsWithoutMuting(); // start playing (mixer flag) startPlay = true; // mix buffers startMixer(); // reset sample counters sampleCounter = 0; return MP_OK; } PlayerBase::PlayerBase(mp_uint32 frequency) : ChannelMixer(32, frequency), timeRecord(NULL) { module = NULL; initialNumChannels = 8; mainVolume = 255; rowcnt = 0; // counts through each row in a pattern poscnt = 0; // counts through each index the pattern index table synccnt = 0; lastUnvisitedPos = 0; startPlay = false; paused = false; halted = false; idle = false; resetOnStopFlag = false; resetMainVolumeOnStartPlayFlag = true; adder = BPMCounter = 0; patternIndexToPlay = -1; playMode = PlayMode_Auto; reallocTimeRecord(); } PlayerBase::~PlayerBase() { //if (isPlaying()) // stopPlaying(); ChannelMixer::closeDevice(); delete[] timeRecord; } mp_sint32 PlayerBase::adjustFrequency(mp_uint32 frequency) { mp_uint32 lastNumBeatPackets = getNumBeatPackets()+1; mp_sint32 res = ChannelMixer::adjustFrequency(frequency); if (res < 0) return res; // nothing has changed if (lastNumBeatPackets == getNumBeatPackets()+1) return MP_OK; reallocTimeRecord(); return MP_OK; } mp_sint32 PlayerBase::setBufferSize(mp_uint32 bufferSize) { mp_uint32 lastNumBeatPackets = getNumBeatPackets()+1; mp_sint32 res = ChannelMixer::setBufferSize(bufferSize); if (res < 0) return res; // nothing has changed if (lastNumBeatPackets == getNumBeatPackets()+1) return MP_OK; reallocTimeRecord(); return MP_OK; } void PlayerBase::restart(mp_uint32 startPosition/* = 0*/, mp_uint32 startRow/* = 0*/, bool resetMixer/* = true*/, const mp_ubyte* customPanningTable/* = NULL*/, bool playOneRowOnly /* = false*/) { if (module == NULL) return; if (resetMixer) resetChannelsWithoutMuting(); // initialise crappy global variables baseBpm = 125; halted = false; synccnt = 0; rowcnt = startRow; poscnt = startPosition; lastUnvisitedPos = poscnt; synccnt = 0; this->playOneRowOnly = playOneRowOnly; if (resetMainVolumeOnStartPlayFlag) mainVolume = module->header.mainvol; // Clear position/speed lookup tables updateTimeRecord(); } ////////////////////////////////////////////////////// // setup mixer and start playing ////////////////////////////////////////////////////// mp_sint32 PlayerBase::startPlaying(XModule *module, bool repeat /* = false*/, mp_uint32 startPosition /* = 0*/, mp_uint32 startRow /* = 0*/, mp_sint32 numChannels /* = -1*/, const mp_ubyte* customPanningTable /* = NULL*/, bool idle /* = false*/, mp_sint32 patternIndex /* = -1*/, bool playOneRowOnly /* = false*/) { this->module = module; if (numChannels == -1) initialNumChannels = module->header.channum; else initialNumChannels = numChannels; ChannelMixer::setNumChannels(initialNumChannels); this->idle = idle; this->repeat = repeat; mp_sint32 res = allocateStructures(); if (res != MP_OK) return res; patternIndexToPlay = patternIndex; restart(startPosition, startRow, true, customPanningTable, playOneRowOnly); return PlayerBase::kick(); } mp_sint32 PlayerBase::stopPlaying() { stop(); mp_sint32 err = closeDevice(); module = NULL; return err; } mp_sint32 PlayerBase::pausePlaying() { if (!paused) { ChannelMixer::pause(); paused = true; } return MP_OK; } mp_sint32 PlayerBase::resumePlaying(bool unpause/* = true*/) { if (paused && unpause) { paused = false; return resume(); } if (module) { // if the player hasn't been initialized until now => DO IT if (!isInitialized()) { mp_sint32 err = initDevice(); if (err != MP_OK) { return err; } } startMixer(); startPlay = true; } return MP_OK; } void PlayerBase::nextPattern() { if (!module) return; if (startPlay && !paused) { if (poscntheader.ordnum-1) { ChannelMixer::resetChannelsWithoutMuting(); rowcnt = 0; poscnt++; lastUnvisitedPos = poscnt; clearEffectMemory(); } } } void PlayerBase::lastPattern() { if (!module) return; if (startPlay && !paused) { if (poscnt>0) { //memset(chninfo,0,sizeof(TModuleChannel)*module->header.channum); ChannelMixer::resetChannelsWithoutMuting(); rowcnt = 0; poscnt--; lastUnvisitedPos = poscnt; clearEffectMemory(); } } } void PlayerBase::setPatternPos(mp_uint32 pos, mp_uint32 row/* = 0*/, bool resetChannels/* = true*/, bool resetFXMemory/* = true*/) { if (!module) return; if (startPlay && !paused && (pos < module->header.ordnum)) { //memset(chninfo,0,sizeof(TModuleChannel)*module->header.channum); if (resetChannels) ChannelMixer::resetChannelsWithoutMuting(); poscnt = pos; rowcnt = row; lastUnvisitedPos = poscnt; updateTimeRecord(); if (resetFXMemory) clearEffectMemory(); } } void PlayerBase::timerHandler(mp_sint32 currentBeatPacket) { timeRecord[currentBeatPacket] = TimeRecord(poscnt, rowcnt, bpm, tickSpeed, mainVolume, ticker); } MilkyTracker-1.02.00/src/milkyplay/PlayerBase.h000066400000000000000000000232121324432207300212550ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * PlayerBase.h * MilkyPlay * * Created by Peter Barth on Thu Jan 20 2005. * */ #ifndef __PLAYERBASE_H__ #define __PLAYERBASE_H__ #include "ChannelMixer.h" class XModule; struct TPlayerChannelInfo { mp_ubyte note; mp_ubyte instrument; mp_ubyte volume; mp_ubyte panning; mp_ubyte numeffects; mp_ubyte effects[MP_NUMEFFECTS]; mp_ubyte operands[MP_NUMEFFECTS]; void clear() { memset(this, 0, sizeof(TPlayerChannelInfo)); } }; class PlayModeSettings { public: enum PlayModes { PlayMode_Auto, PlayMode_ProTracker2, PlayMode_ProTracker3, PlayMode_ScreamTracker3, PlayMode_FastTracker2, PlayMode_ImpulseTracker }; enum PlayModeOptions { PlayModeOptionFirst = 0, PlayModeOptionPanning8xx = 0, PlayModeOptionPanningE8x = 1, // Only affects PTK playback mode PlayModeOptionForcePTPitchLimit = 2, PlayModeOptionLast }; protected: bool options[PlayModeOptionLast]; PlayModes playMode; }; class PlayerBase : public ChannelMixer, public PlayModeSettings { private: struct TimeRecord { enum BITPOSITIONS { BITPOS_POS = 0, BITPOS_ROW = 8, BITPOS_TEMPO = 16, BITPOS_SPEED = 24, BITPOS_MAINVOL = 0, BITPOS_TICKER = 8 }; mp_uint32 posRowTempoSpeed; mp_sint32 mainVolumeTicker; TimeRecord() { } TimeRecord(mp_uint32 pos, mp_uint32 row, mp_uint32 tempo, mp_uint32 speed, mp_sint32 mainVol, mp_sint32 ticker) : posRowTempoSpeed((pos << BITPOS_POS) + (row << BITPOS_ROW) + (tempo << BITPOS_TEMPO) + (speed << BITPOS_SPEED)), mainVolumeTicker((mainVol << BITPOS_MAINVOL) + (ticker << BITPOS_TICKER)) { } }; TimeRecord* timeRecord; void reallocTimeRecord() { delete[] timeRecord; timeRecord = new TimeRecord[getNumBeatPackets()+1]; updateTimeRecord(); } void updateTimeRecord() { for (mp_uint32 i = 0; i < getNumBeatPackets()+1; i++) { timeRecord[i] = TimeRecord(poscnt, rowcnt, bpm, tickSpeed, mainVolume, ticker); } } public: enum PlayerTypes { PlayerType_Generic, // generic module player, can play most of the Protracker style formats PlayerType_FAR, // Farandole composer player PlayerType_IT, // Supposed to be a compatible IT replayer PlayerType_INVALID = -1 // NULL player :D }; protected: XModule* module; bool paused; // Player is paused bool halted; // Playing has been stopped (song is over) bool repeat; // Player will repeat song bool idle; // Player is mixing, but not processing song bool playOneRowOnly; // Player will only play one row and not advance to the next row (used for milkytracker) bool resetOnStopFlag; bool resetMainVolumeOnStartPlayFlag; mp_sint32 initialNumChannels; // Fixed number of channels, can be set manually in StartPlaying // otherwise it will be module->header.channum mp_sint32 mainVolume; // current song's main volume mp_sint32 tickSpeed; // our tickspeed mp_sint32 baseBpm; // Support digibooster REAL BPM value mp_sint32 bpm; // BPM speed mp_sint32 ticker; // runs from 0 to tickspeed-1 mp_sint32 rowcnt; // counts through each row in a pattern mp_sint32 poscnt; // counts through each index the pattern index table mp_int64 synccnt; // will increment 250 times per mixed second mp_sint32 lastUnvisitedPos; // the last order we visited before a new order has been set mp_uint32 adder, BPMCounter; mp_sint32 patternIndexToPlay; // Play special pattern, -1 = Play entire song mp_sint32 kick(); virtual mp_sint32 allocateStructures() { return 0; } virtual void clearEffectMemory() { } public: PlayerBase(mp_uint32 frequency); virtual ~PlayerBase(); virtual mp_sint32 adjustFrequency(mp_uint32 frequency); virtual mp_sint32 setBufferSize(mp_uint32 bufferSize); void setPlayMode(PlayModes mode) { playMode = mode; } PlayModes getPlayMode() const { return playMode; } void enable(PlayModeOptions option, bool b) { ASSERT(option>=PlayModeOptionFirst && option=PlayModeOptionFirst && optionidle = idle; } bool isIdle() const { return idle; } virtual void setRepeat(bool repeat) { this->repeat = repeat; } bool isRepeating() const { return repeat; } mp_sint32 pausePlaying(); mp_sint32 resumePlaying(bool unpause = true); bool isPaused() const { return paused; } // Set song main volume void setSongMainVolume(mp_ubyte volume) { mainVolume = volume; } mp_sint32 getSongMainVolume(mp_uint32 i = 0) const { return (timeRecord[i].mainVolumeTicker >> TimeRecord::BITPOS_MAINVOL) & 255; } // Reset sound mixer on song stop void resetOnStop(bool b) { resetOnStopFlag = b; } // Reset main volume when song is started void resetMainVolumeOnStartPlay(bool b) { resetMainVolumeOnStartPlayFlag = b; } virtual mp_sint32 getOrder(mp_uint32 i = 0) const { return (timeRecord[i].posRowTempoSpeed >> TimeRecord::BITPOS_POS) & 255; } virtual mp_sint32 getRow(mp_uint32 i = 0) const { return (timeRecord[i].posRowTempoSpeed >> TimeRecord::BITPOS_ROW) & 255; } virtual void getPosition(mp_sint32& order, mp_sint32& row, mp_uint32 i = 0) const { order = (timeRecord[i].posRowTempoSpeed >> TimeRecord::BITPOS_POS) & 255; row = (timeRecord[i].posRowTempoSpeed >> TimeRecord::BITPOS_ROW) & 255; } virtual mp_sint32 getLastUnvisitedPosition() const { return lastUnvisitedPos; } virtual void getPosition(mp_sint32& order, mp_sint32& row, mp_sint32& ticker, mp_uint32 i = 0) const { order = (timeRecord[i].posRowTempoSpeed >> TimeRecord::BITPOS_POS) & 255; row = (timeRecord[i].posRowTempoSpeed >> TimeRecord::BITPOS_ROW) & 255; ticker = (timeRecord[i].mainVolumeTicker >> TimeRecord::BITPOS_TICKER) & 255; } virtual mp_int64 getSyncCount() const { return synccnt; } virtual void nextPattern(); virtual void lastPattern(); virtual void setPatternPos(mp_uint32 pos, mp_uint32 row = 0, bool resetChannels = true, bool resetFXMemory = true); virtual void setTempo(mp_sint32 tempo) { bpm = tempo; updateTimeRecord(); } virtual void setSpeed(mp_sint32 speed) { if (speed != tickSpeed) { tickSpeed = speed; if (ticker >= speed) ticker = 0; updateTimeRecord(); } } virtual mp_sint32 getTempo(mp_uint32 i = 0) const { if (isPlaying() && !isIdle()) { return (timeRecord[i].posRowTempoSpeed >> TimeRecord::BITPOS_TEMPO) & 255; } return bpm; } virtual mp_sint32 getSpeed(mp_uint32 i = 0) const { if (isPlaying() && !isIdle()) { return (timeRecord[i].posRowTempoSpeed >> TimeRecord::BITPOS_SPEED) & 255;; } return tickSpeed; } virtual bool grabChannelInfo(mp_sint32 chn, TPlayerChannelInfo& channelInfo) const { channelInfo.clear(); return false; } // milkytracker virtual void playNote(mp_ubyte chn, mp_sint32 note, mp_sint32 ins, mp_sint32 vol = -1) {} virtual void setPanning(mp_ubyte chn, mp_ubyte pan) {} }; #endif MilkyTracker-1.02.00/src/milkyplay/PlayerFAR.cpp000066400000000000000000000567371324432207300213700ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * PlayerFAR.cpp * * Created by Peter Barth on Thu Jan 20 2005. * * I'm not responsible for some very twisted algorithms used in here. * It seems to work so i'm not going to rewrite any of this :) * * -------------------------------- * Version History: * -------------------------------- * 01/24/05: 669 modules are now handled by the FAR replayer * 01/20/05: Created PlayerFAR.cpp * */ // sin() #include #include "PlayerFAR.h" #include "XModule.h" #define TRUE 1 #define FALSE 0 // GUS Frequencies for 16 channels mp_uword PlayerFAR::Freqs[120] = { /*14,14,16,16,18,18,20,22,24,24,26,28, 30,32,32,34,38,40,42,44,46,50,52,56, 58,62,66,70,74,78,84,88,94,98,104,110, 118,124,132,140,148,157,167,176,187,198,211,223, 236,250,264,280,297,315,334,355,375,397,420,446, 472,500,530,559,592,630,667,705,746,792,838,890, 939,995,1057,1115,1179,1252,1318,1410,1493,1561,1664,1750, 1880,2051,2071,2206,2360,2476,2603,2743,3076,3275,3661,3797, 3905,4061,4415,4615,4836,5077,5344,5641,5973,6346,6769,7254, 7718,8181,8703,9090,9739,10226,11055,11687,12395,13195,13635,14609*/ 14,15,16,17,18,19,20,22,23,24,26,27,29, 31,33,34,37,39,41,44,46,49,52,55,58,62, 66,70,74,78,83,88,93,99,105,111,117,124, 132,140,148,157,166,176,187,198,210,222, 235,249,264,280,297,315,333,353,374,396, 420,444,471,499,529,560,594,630,667,707, 749,793,840,890,942,998,1058,1120,1189, 1260,1335,1415,1499,1587,1680,1784,1884, 1996,2122,2240,2386,2520,2670,2840,3009, 3175,3360,3568,3769,3993,4245,4481,4801, 5041,5377,5680,6019,6401,6721,7201,7609, 8065,8580,8962,9602,10082,10899,11522, 12221,13009,13443,14403 // with finetune to 22 /*14,15,16,17,18,19,20,22,23,24,26,28,29, 31,33,35,37,39,41,44,47,49,52,56,59,62, 66,70,74,79,83,88,94,99,105,112,118,125, 133,141,149,158,167,177,188,199,211,224, 237,251,266,282,298,317,335,355,377,399, 423,448,475,503,533,564,598,635,672,712, 755,800,847,898,951,1008,1066,1129,1196, 1272,1344,1425,1510,1600,1694,1800,1902, 2016,2133,2265,2400,2552,2688,2860,3032, 3200,3389,3600,3804,4032,4290,4531,4801, 5105,5377,5761,6110,6401,6835,7201,7609, 8065,8580,9165,9602,10340,10899,11522, 12221,13009,13906,14403 */ }; mp_uword PlayerFAR::VolTab[64]; mp_sint32 PlayerFAR::SinTable[16][128]; mp_sint32 PlayerFAR::mTempo[16]; void PlayerFAR::SetFreq(mp_sint32 chn, mp_sint32 freq) { setFreq(chn, /*freq*35*/(freq*72704)>>11); } /////////////////////////////////////// // FAR set volume, vol:[0-512] /////////////////////////////////////// void PlayerFAR::SetVolume(mp_sint32 chn, mp_sint32 vol) { setVol(chn, (vol*mainVolume)>>8); } /////////////////////////////////////// // FAR set panning, balance:[0-15] /////////////////////////////////////// void PlayerFAR::SetBalance(mp_sint32 chn, mp_ubyte balance) { setPan(chn, balance*0x11); } /////////////////////////////////////// // FAR player constructor /////////////////////////////////////// PlayerFAR::PlayerFAR(mp_uint32 frequency) : PlayerBase(frequency), OverFlow(0), OCount(0), PlayOrder(0), VibAmp(4),TempoType(1), PlayTempo(4), TempoBend(0) { bpm = 80; tickSpeed = 4; mp_sint32 i = 0; static bool done = false; // create sine table used for vibrato if (!done) { double t,f=1,y,amp; for (amp=0;amp<16;amp++) for (t=0;t<1;t+=(1.0/128)) { y=sin(2*3.1415*f*t)*amp; SinTable[(mp_sint32)amp][(mp_sint32)(t*128)]=(mp_sint32)y; } // create volume table for volumes 0-512 for (i = 0; i < 64; i++) VolTab[i] = i<<3; done = true; } // debugging /*for (i = 0; i < 120; i++) { Freqs[i] = player->getlogfreq(player->getlogperiod(i+1,0,0)); }*/ memset(PitchWheel,0,sizeof(PitchWheel)); memset(VibOn,0,sizeof(VibOn)); memset(VibPtr,0,sizeof(VibPtr)); memset(VibInc,0,sizeof(VibInc)); memset(RetLeft,0,sizeof(RetLeft)); // setup default values for (i = 0; i < 16; i++) { CurVols[i] = 0xF; CurBalance[i] = 0x8; DestPitch[i] = 0; Increment[i] = 0; PresPitch[i] = 0; VolWheel[i] = 0; DestVol[i] = 0; VIncrement[i] = 0; PresVol[i] = 0; RetSpc[i] = 0; CurSpc[i] = 0; RetSmp[i] = 0; RetVol[i] = 0; OfftCnt[i] = 0; RetCnt[i] = 0; CurFreqs[i] = 0; CurChSmp[i] = 0; CurNote[i] = 0; CurEff[i] = 0; } CalcTempo(); } /////////////////////////////////////// // FAR player destructor /////////////////////////////////////// PlayerFAR::~PlayerFAR() { } /////////////////////////////////////// // FAR restart (see PlayerBase) /////////////////////////////////////// void PlayerFAR::restart(mp_uint32 startPosition/* = 0*/, mp_uint32 startRow/* = 0*/, bool resetMixer/* = true*/, const mp_ubyte* customPanningTable/* = NULL*/, bool playOneRowOnly/* = false*/) { // base class restart PlayerBase::restart(startPosition, startRow, resetMixer, customPanningTable, playOneRowOnly); VibAmp=4; // 669 uses a different tempo scheme switch (module->getType()) { case XModule::ModuleType_669: TempoType = 0; break; default: TempoType = 1; } //TempoType = 1; PlayTempo = tickSpeed = module->header.tempo; TempoBend = 0; memset(PitchWheel,0,sizeof(PitchWheel)); memset(VibOn,0,sizeof(VibOn)); memset(VibPtr,0,sizeof(VibPtr)); memset(VibInc,0,sizeof(VibInc)); memset(RetLeft,0,sizeof(RetLeft)); for (mp_sint32 i = 0; i < 16; i++) { CurVols[i] = 0xF; CurBalance[i] = 0x8; } CalcTempo(); } /////////////////////////////////////// // Compute FAR tempos /////////////////////////////////////// void PlayerFAR::CalcTempo() { mp_uword q; mTempo[0]=256; for (q=1;q<16;q++) mTempo[q]=128/q; UpdateTempo(mTempo[4]); } /////////////////////////////////////// // Set new tempo // My mixer class emulates a // 250Hz timer so we need to convert // the PC-Int8 timing into our 250Hz // model /////////////////////////////////////// void PlayerFAR::UpdateTempo(mp_sint32 tps) { // original FAR replaying... 669 tempo not supported because of hi timer resolution mp_uint32 eax,di,cx; eax=1197255/tps; cx=0; di=0; while (eax>0xFFFF) { eax>>=1; di++; cx++; } if (cx>=2) di++; di+=3; OverFlow=di; OCount=di; // convert timer frequency into 250Hz base float t = (1197255.0f / (float)eax); t = 1.0f/(250.0f/t); // for tempo 0 we get a period that is slightly shorter than what we can // do with 250Hz but the difference is very small so just correct it by // clamping if (t > 1.0f) t = 1.0f; adder = (mp_uint32)((mp_int64)(t*65536.0*65536.0)); // see above if (!adder) adder = 0xFFFFFFFF; } /////////////////////////////////////// // FAR replay routine timer handler // for 250Hz base timer /////////////////////////////////////// void PlayerFAR::timerHandler(mp_sint32 currentBeatPacket) { PlayerBase::timerHandler(currentBeatPacket); if (paused) return; if (module == NULL) return; // make sure this is a FAR tune if (module->getType() != XModule::ModuleType_FAR && module->getType() != XModule::ModuleType_669) return; // make sure we're dealing with less or equal 16 channels if (module->header.channum > 16) return; setActiveChannels(/*numChannels*/module->header.channum); mp_int64 dummy = (mp_int64)BPMCounter; dummy+=(mp_int64)adder; BPMCounter=(mp_sint32)dummy; // check overflow-carry if ((dummy>>32)) { mp_uword c,/*ov,*/m,q; mp_sint32 fp,sp,t,ch; mp_ubyte fekt; mp_ubyte* Pattern = module->phead[module->header.ord[poscnt]].patternData; mp_sint32 numChannels = module->phead[module->header.ord[poscnt]].channum; mp_sint32 BreakLoc = module->phead[module->header.ord[poscnt]].rows - 2; mp_sint32 CurSpot = rowcnt * module->header.channum * 6; for (ch=0;ch=128) // Reset counter VibPtr[ch]=0; if (!Increment[ch]) // Note port doing it for us? SetFreq(ch,CurFreqs[ch]+PitchWheel[ch]+SinTable[VibAmp][VibPtr[ch]]); } if (Increment[ch]) { // Deal with note port t=(CurFreqs[ch]+PitchWheel[ch]); if (Increment[ch]<0) { if (t<=DestPitch[ch]) { Increment[ch]=0; PresPitch[ch]=0; CurFreqs[ch]=DestPitch[ch]; DestPitch[ch]=0; } else PresPitch[ch]+=Increment[ch]; } else { if (t>=DestPitch[ch]) { Increment[ch]=0; PresPitch[ch]=0; CurFreqs[ch]=DestPitch[ch]; DestPitch[ch]=0; } else PresPitch[ch]+=Increment[ch]; } } PitchWheel[ch]=PresPitch[ch]/256; SetFreq(ch,CurFreqs[ch]+PitchWheel[ch]+SinTable[VibAmp][VibPtr[ch]]); if (VIncrement[ch]) { // Deal with vol port t=(CurVols[ch]*4)+VolWheel[ch]; if (VIncrement[ch]<0) { if (t<=DestVol[ch]) { VIncrement[ch]=0; PresVol[ch]=0; CurVols[ch]=DestVol[ch]/4; DestVol[ch]=0; } else PresVol[ch]+=VIncrement[ch]; } else { if (t>=DestVol[ch]) { VIncrement[ch]=0; PresVol[ch]=0; CurVols[ch]=DestVol[ch]/4; DestPitch[ch]=0; } else PresVol[ch]+=VIncrement[ch]; } VolWheel[ch]=PresVol[ch]; if ( ((CurVols[ch]*4)+VolWheel[ch])< 0) { VIncrement[ch]=0; PresVol[ch]=0; CurVols[ch]=DestVol[ch]/4; DestVol[ch]=0; SetVolume(ch,VolTab[0]); } else SetVolume(ch,VolTab[(CurVols[ch]*4)+VolWheel[ch]]); } if (RetLeft[ch]) { // Deal with retrigger CurSpc[ch]+=2; if (CurSpc[ch]>=RetSpc[ch]) { if (!OfftCnt[ch]) goto DoNote1; // No note offset (retrig) if (OfftCnt[ch]==RetCnt[ch]) goto DoNote1; // Time for output of note goto NoNote1; DoNote1: q=RetSmp[ch]; m=module->smp[module->instr[q].snum[0]].type; CurVols[ch]=RetVol[ch]-1; CurChSmp[ch]=q; if ((m&3) && module->instr[q].snum[0] != -1) { playSample(CurVoice, module->smp[module->instr[q].snum[0]].sample, // sample buffer module->smp[module->instr[q].snum[0]].samplen, // sample size 0, // sample offset 0, // sample offset fraction false, // wrap sample offset when exceeding sample length module->smp[module->instr[q].snum[0]].loopstart, // loop start module->smp[module->instr[q].snum[0]].loopstart+module->smp[module->instr[q].snum[0]].looplen, // loop end m); } else { playSample(CurVoice, module->smp[module->instr[q].snum[0]].sample, // sample buffer module->smp[module->instr[q].snum[0]].samplen, // sample size 0, // sample offset 0, // sample offset fraction false, // wrap sample offset when exceeding sample length 0, // loop start module->smp[module->instr[q].snum[0]].samplen, // loop end m); } SetVolume(ch,VolTab[(CurVols[ch]*4)+VolWheel[ch]]); RetLeft[ch]--; CurSpc[ch]=0; NoNote1: RetCnt[ch]++; } } } //oo: if (OCount--) return; OCount=OverFlow; for (c=0;csmp[module->instr[q].snum[0]].type; //if (Sample[Pattern[CurSpot+1]].SType&1) m|=(1<<2); CurFreqs[CurVoice]=Freqs[Pattern[CurSpot]-1/*-3*12*/]; SetFreq(CurVoice,CurFreqs[CurVoice]); CurChSmp[CurVoice]=q; /*if (m&(1<<2)) PlaySample(module->smp[module->instr[q].snum[0]].Seg/2, module->smp[module->instr[q].snum[0]].Off/2, module->smp[module->instr[q].snum[0]].Rep/2, module->smp[module->instr[q].snum[0]].RepEnd/2, CurVoice,m); else PlaySample(module->smp[module->instr[q].snum[0]].Seg, module->smp[module->instr[q].snum[0]].Off, module->smp[module->instr[q].snum[0]].Rep, module->smp[module->instr[q].snum[0]].RepEnd, CurVoice,m);*/ if ((m&3) && module->instr[q].snum[0] != -1) { playSample(CurVoice, module->smp[module->instr[q].snum[0]].sample, // sample buffer module->smp[module->instr[q].snum[0]].samplen, // sample size 0, // sample offset 0, // sample offset fraction false, // wrap sample offset when exceeding sample length module->smp[module->instr[q].snum[0]].loopstart, // loop start module->smp[module->instr[q].snum[0]].loopstart+module->smp[module->instr[q].snum[0]].looplen, // loop end m); } else { playSample(CurVoice, module->smp[module->instr[q].snum[0]].sample, // sample buffer module->smp[module->instr[q].snum[0]].samplen, // sample size 0, // sample offset 0, // sample offset fraction false, // wrap sample offset when exceeding sample length 0, // loop start module->smp[module->instr[q].snum[0]].samplen, // loop end m); } PresPitch[CurVoice]=0; DestPitch[CurVoice]=0; Increment[CurVoice]=0; // Bars[CurVoice]=(Pattern[CurSpot+2]*fs)/16; } SetBalance(CurVoice,CurBalance[CurVoice]); if ((Pattern[CurSpot+3]) && fekt!=0xa0) { PresVol[CurVoice]=0; VolWheel[CurVoice]=0; DestVol[CurVoice]=0; VIncrement[CurVoice]=0; CurVols[CurVoice]=((Pattern[CurSpot+3]>>4)-1); SetVolume(CurVoice,VolTab[(CurVols[CurVoice]*4)]); // Bars[CurVoice]=(Pattern[CurSpot+2]*fs)/16; } if (Pattern[CurSpot+5]) { switch(Pattern[CurSpot+5]&0xF0) { case 0xf0: // Modify tempo tickSpeed=Pattern[CurSpot+5]&0xF; PlayTempo=tickSpeed; if (TempoType) UpdateTempo(mTempo[PlayTempo]+TempoBend); else UpdateTempo(mTempo[PlayTempo]+(TempoBend*2)); break; case 0xe0: // Fine tempo up/cancel if (Pattern[CurSpot+5]&0xF) { TempoBend+=Pattern[CurSpot+5]&0xF; if ((TempoBend+mTempo[PlayTempo])>=100) TempoBend=100; } else TempoBend=0; if (TempoType) UpdateTempo(mTempo[PlayTempo]+TempoBend); else UpdateTempo(mTempo[PlayTempo]+(TempoBend*2)); break; case 0xd0: // Fine tempo down/cancel if (Pattern[CurSpot+5]&0xF) { TempoBend-=Pattern[CurSpot+5]&0xF; if ((TempoBend+mTempo[PlayTempo])<=0) TempoBend=0; } else TempoBend=0; if (TempoType) UpdateTempo(mTempo[PlayTempo]+TempoBend); else UpdateTempo(mTempo[PlayTempo]+(TempoBend*2)); break; case 0xb0: // Set Balance CurBalance[CurVoice]=Pattern[CurSpot+5]&0xF; SetBalance(CurVoice,CurBalance[CurVoice]); break; case 0x10: // raise pitch PresPitch[CurVoice]+=((Pattern[CurSpot+5]&0xF)*4)*256; PitchWheel[CurVoice]=PresPitch[CurVoice]/256; DestPitch[CurVoice]=0; Increment[CurVoice]=0; SetFreq(ch,CurFreqs[ch]+PitchWheel[ch]+SinTable[VibAmp][VibPtr[ch]]); break; case 0x20: // lower pitch PresPitch[CurVoice]-=((Pattern[CurSpot+5]&0xF)*4)*256; PitchWheel[CurVoice]=PresPitch[CurVoice]/256; DestPitch[CurVoice]=0; Increment[CurVoice]=0; SetFreq(ch,CurFreqs[ch]+PitchWheel[ch]+SinTable[VibAmp][VibPtr[ch]]); break; case 0x30: // Port to note if (Pattern[CurSpot]) { t=0; fp=CurFreqs[CurVoice]+PitchWheel[CurVoice]; sp=Freqs[Pattern[CurSpot]-1/*-3*12*/]; DestPitch[CurVoice]=sp; if (fp>sp) {t=sp;sp=fp;fp=t;} if (module->getType() == XModule::ModuleType_669) { if (Pattern[CurSpot+5]&0xF) Increment[CurVoice]=((sp-fp)*256)/((Pattern[CurSpot+5]&0xF)* (mTempo[PlayTempo]+TempoBend)/4); else Increment[CurVoice]=((sp-fp)*256)/(1* (mTempo[PlayTempo]+TempoBend)/4); } else { if (Pattern[CurSpot+5]&0xF) Increment[CurVoice]=((sp-fp)*256)/((Pattern[CurSpot+5]&0xF)* (mTempo[PlayTempo]+TempoBend)); else Increment[CurVoice]=((sp-fp)*256)/(1* (mTempo[PlayTempo]+TempoBend)); } Increment[CurVoice]*=8; if (t) Increment[CurVoice]=-Increment[CurVoice]; } break; case 0xC0: // Note Offset OfftCnt[CurVoice]=Pattern[CurSpot+5]&0xF; if (Pattern[CurSpot]) { RetLeft[CurVoice]=0xE; if (TempoType) RetSpc[CurVoice]=((mTempo[PlayTempo]+TempoBend)/(RetLeft[CurVoice]+1))/4; else RetSpc[CurVoice]=((mTempo[PlayTempo]+TempoBend)/(RetLeft[CurVoice]+1))/2; RetSmp[CurVoice]=Pattern[CurSpot+1]-1; RetVol[CurVoice]=(Pattern[CurSpot+3]>>4); CurSpc[CurVoice]=0; } break; case 0x40: // Retrigger if (Pattern[CurSpot]) { RetLeft[CurVoice]=(Pattern[CurSpot+5]&0xF)-1; if (TempoType) RetSpc[CurVoice]=((mTempo[PlayTempo]+TempoBend)/(RetLeft[CurVoice]+1))/4; else RetSpc[CurVoice]=((mTempo[PlayTempo]+TempoBend)/(RetLeft[CurVoice]+1))/2; RetSmp[CurVoice]=Pattern[CurSpot+1]-1; RetVol[CurVoice]=(Pattern[CurSpot+3]>>4); CurSpc[CurVoice]=0; } break; case 0x50: // Set vibrato amplitude VibAmp=Pattern[CurSpot+5]&0xF; break; case 0x60: // Vibrato Control if (!VibOn[CurVoice]) { VibOn[CurVoice]=1; VibInc[CurVoice]=(Pattern[CurSpot+5]&0xF)*6; VibPtr[CurVoice]=0; } else VibInc[CurVoice]=(Pattern[CurSpot+5]&0xF)*6; break; case 0x90: // Sustained vibrato control if (Pattern[CurSpot+5]&0xF) { // On if (!VibOn[CurVoice]) { VibOn[CurVoice]=2; VibInc[CurVoice]=(Pattern[CurSpot+5]&0xF)*6; VibPtr[CurVoice]=0; } else VibInc[CurVoice]=(Pattern[CurSpot+5]&0xF)*6; } else { // Off VibPtr[CurVoice]=0; VibInc[CurVoice]=0; VibOn[CurVoice]=FALSE; } break; case 0x70: // VolSldUp q=Pattern[CurSpot+5]&0xF; CurVols[CurVoice]+=q; if (CurVols[CurVoice]>0xF) CurVols[CurVoice]=0xF; SetVolume(CurVoice,VolTab[(CurVols[CurVoice]*4)+VolWheel[CurVoice]]); // Bars[CurVoice]=((CurVols[CurVoice]+1)*fs)/16; break; case 0x80: // VolSldDn q=Pattern[CurSpot+5]&0xF; CurVols[CurVoice]-=q; if (CurVols[CurVoice]<0) CurVols[CurVoice]=0; SetVolume(CurVoice,VolTab[(CurVols[CurVoice]*4)+VolWheel[CurVoice]]); // Bars[CurVoice]=((CurVols[CurVoice]+1)*fs)/16; break; case 0xA0: // Port to Vol if ((Pattern[CurSpot+5])) { t=0; fp=(CurVols[CurVoice]*4)+VolWheel[CurVoice]; sp=((Pattern[CurSpot+3]>>4)*4)-1; DestVol[CurVoice]=sp; if (fp>sp) {t=sp;sp=fp;fp=t;} if (Pattern[CurSpot+5]&0xF) VIncrement[CurVoice]=((sp-fp)*16)/((Pattern[CurSpot+5]&0xF)* (mTempo[PlayTempo]+TempoBend)); else VIncrement[CurVoice]=((sp-fp)*16)/(1* (mTempo[PlayTempo]+TempoBend)); if (t) VIncrement[CurVoice]=-VIncrement[CurVoice]; } break; case 0x00: // Global funct switch(Pattern[CurSpot+5]&0xF) { case 1: // Ramp off case 2: // Ramp on //VolRamps=(Pattern[CurSpot+5]&0xF)-1; break; case 3: q=CurChSmp[CurVoice]; //SetLoops(Sample[q].Seg,Sample[q].Off,Sample[q].Len, // Sample[q].LoopMode&0xf7,CurVoice); break; case 4: // 669 tempos case 5: // far tempos TempoType=(Pattern[CurSpot+5]&0xF)-4; if (TempoType) UpdateTempo(mTempo[PlayTempo]+TempoBend); else UpdateTempo(mTempo[PlayTempo]+(TempoBend*2)); break; } break; } } if (VibOn[CurVoice]==1 && (Pattern[CurSpot+5]&0xF0)!=0x60) { VibPtr[CurVoice]=0; VibInc[CurVoice]=0; VibOn[CurVoice]=FALSE; } /* if (Bars[CurVoice]>=fs) Bars[CurVoice]=fs-1; if (Bars[CurVoice]<1) Bars[CurVoice]=1; */ CurSpot+=6; } //CurVoice=ov; if (rowcnt<=BreakLoc) { rowcnt++; } else { //PutAwayPat(CurPattern); if (poscnt + 1 == module->header.ordnum || module->header.ord[poscnt+1] >= 0xFF) { if (repeat) poscnt=module->header.restart; else { halted = true; BPMCounter = adder = 0; if (resetOnStopFlag) resetChannelsWithoutMuting(); return; } } else { poscnt++; } CurPattern=module->header.ord[poscnt]; //GetPat(CurPattern); rowcnt=0; } } } /////////////////////////////////////// // clear effect memory for song seeking // see PlayerBase /////////////////////////////////////// void PlayerFAR::clearEffectMemory() { mp_sint32 i; OCount=OverFlow; memset(PitchWheel,0,sizeof(PitchWheel)); memset(VibOn,0,sizeof(VibOn)); memset(VibPtr,0,sizeof(VibPtr)); memset(VibInc,0,sizeof(VibInc)); memset(RetLeft,0,sizeof(RetLeft)); for (i = 0; i < 16; i++) { DestPitch[i] = 0; Increment[i] = 0; PresPitch[i] = 0; VolWheel[i] = 0; DestVol[i] = 0; VIncrement[i] = 0; PresVol[i] = 0; RetSpc[i] = 0; CurSpc[i] = 0; RetSmp[i] = 0; RetVol[i] = 0; OfftCnt[i] = 0; RetCnt[i] = 0; CurFreqs[i] = 0; CurChSmp[i] = 0; CurNote[i] = 0; CurEff[i] = 0; } } bool PlayerFAR::grabChannelInfo(mp_sint32 chn, TPlayerChannelInfo& channelInfo) const { channelInfo.note = CurNote[chn]; channelInfo.instrument = CurChSmp[chn]+1; channelInfo.volume = (CurVols[chn] == 0xF) ? 0xFF : CurVols[chn]*0x10; channelInfo.panning = CurBalance[chn]*0x11; channelInfo.numeffects = 2; memset(channelInfo.effects, 0, sizeof(channelInfo.effects)); memset(channelInfo.operands, 0, sizeof(channelInfo.operands)); channelInfo.effects[0] = 0x70; channelInfo.operands[0] = CurEff[chn]; //memcpy(channelInfo.effects, chninfo[chn].eff, sizeof(chninfo[chn].eff)); //memcpy(channelInfo.operands, chninfo[chn].eop, sizeof(chninfo[chn].eop)); return true; } MilkyTracker-1.02.00/src/milkyplay/PlayerFAR.h000066400000000000000000000064311324432207300210170ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * PlayerFAR.h * MilkyPlay core * * Created by Peter Barth on Thu Jan 20 2005. * */ #ifndef __PLAYERFAR_H__ #define __PLAYERFAR_H__ #include "PlayerBase.h" class PlayerFAR : public PlayerBase { private: static mp_uword Freqs[]; static mp_uword VolTab[]; static mp_sint32 SinTable[16][128]; static mp_sint32 mTempo[16]; // from TRAK.C mp_uword OverFlow,OCount,PlayOrder; mp_sint32 PitchWheel[16],DestPitch[16],Increment[16],PresPitch[16]; mp_sint32 VolWheel[16],DestVol[16],VIncrement[16],PresVol[16]; mp_sint32 RetLeft[16],RetSpc[16],CurSpc[16],RetSmp[16],RetVol[16]; mp_sint32 OfftCnt[16],RetCnt[16]; mp_sint32 VibOn[16]; mp_sint32 VibPtr[16],VibInc[16]; mp_sint32 CurVols[16]; mp_ubyte CurBalance[16]; mp_sint32 CurFreqs[16]; mp_sint32 CurNote[16]; mp_sint32 CurEff[16]; mp_sint32 VibAmp; mp_ubyte TempoType; mp_sint32 PlayTempo,TempoBend,CurVoice,CurPattern; mp_sint32 CurChSmp[16]; mp_ubyte GrabBuf[64]; private: void CalcTempo(); void UpdateTempo(mp_sint32 tps); void SetFreq(mp_sint32 chn, mp_sint32 freq); void SetVolume(mp_sint32 chn, mp_sint32 vol); void SetBalance(mp_sint32 chn, mp_ubyte balance); protected: virtual void clearEffectMemory(); public: PlayerFAR(mp_uint32 frequency); virtual ~PlayerFAR(); virtual PlayerTypes getType() const { return PlayerType_FAR; } // virtual from mixer class, perform playing here virtual void timerHandler(mp_sint32 currentBeatPacket); virtual void restart(mp_uint32 startPosition = 0, mp_uint32 startRow = 0, bool resetMixer = true, const mp_ubyte* customPanningTable = NULL, bool playOneRowOnly = false); virtual bool grabChannelInfo(mp_sint32 chn, TPlayerChannelInfo& channelInfo) const; }; #endif MilkyTracker-1.02.00/src/milkyplay/PlayerGeneric.cpp000066400000000000000000000557361324432207300223320ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * PlayerGeneric.cpp * MilkyPlay * * PlayerGeneric is a wrapper that allocates a suiting type of player * for a module while providing the same player interfaces. * Currently there are three types of players: PlayerFAR, PlayerSTD and PlayerIT * */ #include "PlayerGeneric.h" #include "MasterMixer.h" #include "XModule.h" #include "AudioDriver_WAVWriter.h" #include "AudioDriverManager.h" #include "PlayerBase.h" #include "PlayerSTD.h" #ifndef MILKYTRACKER #include "PlayerIT.h" #include "PlayerFAR.h" #endif #undef __VERBOSE__ class MixerNotificationListener : public MasterMixer::MasterMixerNotificationListener { private: class PlayerGeneric& player; public: MixerNotificationListener(PlayerGeneric& player) : player(player) { } virtual void masterMixerNotification(MasterMixer::MasterMixerNotifications notification) { player.adjustSettings(); } }; void PlayerGeneric::adjustSettings() { mp_uint32 bufferSize = mixer->getBufferSize(); mp_uint32 sampleRate = mixer->getSampleRate(); this->bufferSize = bufferSize; this->frequency = sampleRate; if (player) { player->setBufferSize(bufferSize); player->adjustFrequency(sampleRate); } } PlayerBase::PlayerTypes PlayerGeneric::getPreferredPlayerType(XModule* module) { if (module == NULL) return PlayerBase::PlayerType_INVALID; switch (module->getType()) { case XModule::ModuleType_669: case XModule::ModuleType_FAR: #ifndef MILKYTRACKER return PlayerBase::PlayerType_FAR; break; #endif case XModule::ModuleType_IT: #ifndef MILKYTRACKER return PlayerBase::PlayerType_IT; break; #endif case XModule::ModuleType_UNKNOWN: // just assume our standard player can handle this //case XModule::ModuleType_669: case XModule::ModuleType_AMF: case XModule::ModuleType_AMS: case XModule::ModuleType_CBA: case XModule::ModuleType_DBM: case XModule::ModuleType_DIGI: case XModule::ModuleType_DSM: case XModule::ModuleType_DSm: case XModule::ModuleType_DTM_1: case XModule::ModuleType_DTM_2: case XModule::ModuleType_GDM: case XModule::ModuleType_GMC: case XModule::ModuleType_IMF: case XModule::ModuleType_MDL: case XModule::ModuleType_MOD: case XModule::ModuleType_MTM: case XModule::ModuleType_MXM: case XModule::ModuleType_OKT: case XModule::ModuleType_PLM: case XModule::ModuleType_PSM: case XModule::ModuleType_PTM: case XModule::ModuleType_S3M: case XModule::ModuleType_STM: case XModule::ModuleType_SFX: case XModule::ModuleType_UNI: case XModule::ModuleType_ULT: case XModule::ModuleType_XM: case XModule::ModuleType_NONE: return PlayerBase::PlayerType_Generic; break; default: return PlayerBase::PlayerType_INVALID; } } PlayerBase* PlayerGeneric::getPreferredPlayer(XModule* module) const { switch (getPreferredPlayerType(module)) { #ifndef MILKYTRACKER case PlayerBase::PlayerType_FAR: return new PlayerFAR(frequency); case PlayerBase::PlayerType_IT: return new PlayerIT(frequency); #endif case PlayerBase::PlayerType_Generic: return new PlayerSTD(frequency); default: return NULL; } } PlayerGeneric::PlayerGeneric(mp_sint32 frequency, AudioDriverInterface* audioDriver/* = NULL*/) : mixer(NULL), player(NULL), frequency(frequency), audioDriver(audioDriver), audioDriverName(NULL) { listener = new MixerNotificationListener(*this); bufferSize = 0; sampleShift = 0; resamplerType = MIXER_NORMAL; idle = false; playOneRowOnly = false; paused = false; repeat = false; resetOnStopFlag = false; autoAdjustPeak = false; disableMixing = false; allowFilters = false; #ifdef __FORCEPOWEROFTWOBUFFERSIZE__ compensateBufferFlag = true; #else compensateBufferFlag = false; #endif masterVolume = panningSeparation = numMaxVirChannels = 256; resetMainVolumeOnStartPlayFlag = true; playMode = PlayMode_Auto; // Special playmode settings options[PlayModeOptionPanning8xx] = true; options[PlayModeOptionPanningE8x] = false; options[PlayModeOptionForcePTPitchLimit] = true; AudioDriverManager audioDriverManager; const char* defaultName = audioDriverManager.getPreferredAudioDriver()->getDriverID(); if (defaultName) { audioDriverName = new char[strlen(defaultName)+1]; strcpy(audioDriverName, defaultName); } } PlayerGeneric::~PlayerGeneric() { if (mixer) delete mixer; if (player) { if (mixer->isActive() && !mixer->isDeviceRemoved(player)) mixer->removeDevice(player); delete player; } delete[] audioDriverName; delete listener; } // -- wrapping mixer specific stuff ---------------------- void PlayerGeneric::setResamplerType(ResamplerTypes type) { resamplerType = type; if (player) player->setResamplerType(type); } void PlayerGeneric::setResamplerType(bool interpolation, bool ramping) { if (interpolation) { if (ramping) resamplerType = MIXER_LERPING_RAMPING; else resamplerType = MIXER_LERPING; } else { if (ramping) resamplerType = MIXER_NORMAL_RAMPING; else resamplerType = MIXER_NORMAL; } if (player) player->setResamplerType(resamplerType); } ChannelMixer::ResamplerTypes PlayerGeneric::getResamplerType() const { if (player) return player->getResamplerType(); return resamplerType; } void PlayerGeneric::setSampleShift(mp_sint32 shift) { sampleShift = shift; if (mixer) mixer->setSampleShift(shift); } mp_sint32 PlayerGeneric::getSampleShift() const { if (mixer) return mixer->getSampleShift(); return sampleShift; } void PlayerGeneric::setPeakAutoAdjust(bool b) { this->autoAdjustPeak = b; } mp_sint32 PlayerGeneric::adjustFrequency(mp_uint32 frequency) { this->frequency = frequency; mp_sint32 res = MP_OK; if (mixer) res = mixer->setSampleRate(frequency); return res; } mp_sint32 PlayerGeneric::getMixFrequency() const { if (player) return player->getMixFrequency(); return frequency; } mp_sint32 PlayerGeneric::beatPacketsToBufferSize(mp_uint32 numBeats) { return ChannelMixer::beatPacketsToBufferSize(getMixFrequency(), numBeats); } mp_sint32 PlayerGeneric::adjustBufferSize(mp_uint32 numBeats) { return setBufferSize(beatPacketsToBufferSize(numBeats)); } mp_sint32 PlayerGeneric::setBufferSize(mp_uint32 bufferSize) { mp_sint32 res = 0; this->bufferSize = bufferSize; if (mixer) { // If we're told to compensate the samples until we // we reached 2^n buffer sizes if (compensateBufferFlag) { for (mp_uint32 i = 0; i < 16; i++) { if ((unsigned)(1 << i) >= (unsigned)bufferSize) { bufferSize = 1 << i; break; } } } res = mixer->setBufferSize(bufferSize); } return res; } mp_sint32 PlayerGeneric::setPowerOfTwoCompensationFlag(bool b) { if (mixer && compensateBufferFlag != b) { compensateBufferFlag = b; setBufferSize(bufferSize); } return MP_OK; } bool PlayerGeneric::getPowerOfTwoCompensationFlag() const { return compensateBufferFlag; } const char* PlayerGeneric::getCurrentAudioDriverName() const { if (mixer) return mixer->getCurrentAudioDriverName(); return audioDriverName; } bool PlayerGeneric::setCurrentAudioDriverByName(const char* name) { if (name == NULL) return false; if (mixer) { bool res = mixer->setCurrentAudioDriverByName(name); if (audioDriverName) delete[] audioDriverName; const char* curDrvName = getCurrentAudioDriverName(); ASSERT(curDrvName); audioDriverName = new char[strlen(curDrvName)+1]; strcpy(audioDriverName, curDrvName); return res; } AudioDriverManager audioDriverManager; if (audioDriverManager.getAudioDriverByName(name)) { if (audioDriverName) delete[] audioDriverName; audioDriverName = new char[strlen(name)+1]; strcpy(audioDriverName, name); return true; } return false; } bool PlayerGeneric::isInitialized() const { if (mixer) return mixer->isInitialized(); return false; } bool PlayerGeneric::isPlaying() const { if (mixer) return mixer->isPlaying(); return false; } mp_int64 PlayerGeneric::getSampleCounter() const { if (player) return player->getSampleCounter(); return 0; } void PlayerGeneric::resetSampleCounter() { if (player) player->resetSampleCounter(); } mp_sint32 PlayerGeneric::getCurrentSamplePosition() const { if (mixer && mixer->getAudioDriver()) return mixer->getAudioDriver()->getBufferPos(); return 0; } mp_sint32 PlayerGeneric::getCurrentBeatIndex() { if (player) return player->getBeatIndexFromSamplePos(getCurrentSamplePosition()); return 0; } mp_sint32 PlayerGeneric::getCurrentSample(mp_sint32 position, mp_sint32 channel) { if (mixer) return mixer->getCurrentSample(position, channel); return 0; } mp_sint32 PlayerGeneric::getCurrentSamplePeak(mp_sint32 position, mp_sint32 channel) { if (mixer) return mixer->getCurrentSamplePeak(position, channel); return 0; } void PlayerGeneric::resetChannels() { if (player) player->resetChannelsFull(); } mp_sint32 PlayerGeneric::getNumAllocatedChannels() const { if (player) return player->getNumAllocatedChannels(); return 0; } mp_sint32 PlayerGeneric::getNumActiveChannels() const { if (player) return player->getNumActiveChannels(); return 0; } // -- wrapping player specific stuff ---------------------- void PlayerGeneric::setPlayMode(PlayModes mode) { playMode = mode; if (player) player->setPlayMode(mode); } PlayerGeneric::PlayModes PlayerGeneric::getPlayMode() const { if (player) return player->getPlayMode(); return playMode; } void PlayerGeneric::enable(PlayModeOptions option, bool b) { ASSERT(option>=PlayModeOptionFirst && optionenable(option, b); } bool PlayerGeneric::isEnabled(PlayModeOptions option) const { ASSERT(option>=PlayModeOptionFirst && optionisEnabled(option); } void PlayerGeneric::restart(mp_uint32 startPosition/* = 0*/, mp_uint32 startRow/* = 0*/, bool resetMixer/* = true*/, const mp_ubyte* customPanningTable/* = NULL*/, bool playOneRowOnly/* = false*/) { if (player) player->restart(startPosition, startRow, resetMixer, customPanningTable, playOneRowOnly); } void PlayerGeneric::reset() { if (player) player->reset(); } void PlayerGeneric::resetAllSpeed() { if (player) player->resetAllSpeed(); } mp_sint32 PlayerGeneric::startPlaying(XModule* module, bool repeat/* = false*/, mp_uint32 startPosition/* = 0*/, mp_uint32 startRow/* = 0*/, mp_sint32 numChannels/* = -1*/, const mp_ubyte* customPanningTable/* = NULL*/, bool idle/* = false*/, mp_sint32 patternIndex/* = -1*/, bool playOneRowOnly/* = false*/) { this->idle = idle; this->repeat = repeat; this->playOneRowOnly = playOneRowOnly; if (mixer == NULL) { mixer = new MasterMixer(frequency, bufferSize, 1, audioDriver); mixer->setMasterMixerNotificationListener(listener); mixer->setSampleShift(sampleShift); if (audioDriver == NULL) mixer->setCurrentAudioDriverByName(audioDriverName); } if (!player || player->getType() != getPreferredPlayerType(module)) { if (player) { if (!mixer->isDeviceRemoved(player)) mixer->removeDevice(player); delete player; } player = getPreferredPlayer(module); if (player) { // apply our own "state" to the state of the newly allocated player player->resetMainVolumeOnStartPlay(resetMainVolumeOnStartPlayFlag); player->resetOnStop(resetOnStopFlag); player->setBufferSize(bufferSize); player->setResamplerType(resamplerType); player->setMasterVolume(masterVolume); player->setPanningSeparation(panningSeparation); player->setPlayMode(playMode); for (mp_sint32 i = PlayModeOptionFirst; i < PlayModeOptionLast; i++) player->enable((PlayModeOptions)i, options[i]); player->setDisableMixing(disableMixing); player->setAllowFilters(allowFilters); //if (paused) // player->pausePlaying(); // adjust number of virtual channels if necessary setNumMaxVirChannels(numMaxVirChannels); } } if (player && mixer) { if (!mixer->isDeviceRemoved(player)) mixer->removeDevice(player); player->startPlaying(module, repeat, startPosition, startRow, numChannels, customPanningTable, idle, patternIndex, playOneRowOnly); mixer->addDevice(player); if (!mixer->isPlaying()) return mixer->start(); } return MP_OK; } void PlayerGeneric::setPatternToPlay(mp_sint32 patternIndex) { if (player) player->setPatternToPlay(patternIndex); } mp_sint32 PlayerGeneric::stopPlaying() { if (player) player->stopPlaying(); if (mixer) return mixer->stop(); return MP_OK; } bool PlayerGeneric::hasSongHalted() const { if (player) return player->hasSongHalted(); return true; } void PlayerGeneric::setIdle(bool idle) { this->idle = idle; if (player) player->setIdle(idle); } bool PlayerGeneric::isIdle() const { if (player) return player->isIdle(); return idle; } void PlayerGeneric::setRepeat(bool repeat) { this->repeat = repeat; if (player) player->setRepeat(repeat); } bool PlayerGeneric::isRepeating() const { if (player) return player->isRepeating(); return repeat; } mp_sint32 PlayerGeneric::pausePlaying() { paused = true; if (mixer) return mixer->pause(); return MP_OK; } mp_sint32 PlayerGeneric::resumePlaying() { if (player && !player->isPlaying()) player->resumePlaying(); if (mixer && mixer->isPaused()) return mixer->resume(); else if (mixer && !mixer->isPlaying()) return mixer->start(); return MP_OK; } bool PlayerGeneric::isPaused() const { if (mixer) return mixer->isPaused(); return paused; } void PlayerGeneric::setDisableMixing(bool b) { disableMixing = b; if (player) player->setDisableMixing(disableMixing); } void PlayerGeneric::setAllowFilters(bool b) { allowFilters = b; if (player) player->setAllowFilters(allowFilters); } bool PlayerGeneric::getAllowFilters() const { if (player) return player->getAllowFilters(); return allowFilters; } // volume control void PlayerGeneric::setMasterVolume(mp_sint32 vol) { masterVolume = vol; if (player) player->setMasterVolume(vol); } mp_sint32 PlayerGeneric::getMasterVolume() const { if (player) return player->getMasterVolume(); return masterVolume; } // panning control void PlayerGeneric::setPanningSeparation(mp_sint32 separation) { panningSeparation = separation; if (player) player->setPanningSeparation(separation); } mp_sint32 PlayerGeneric::getPanningSeparation() const { if (player) return player->getPanningSeparation(); return panningSeparation; } mp_sint32 PlayerGeneric::getSongMainVolume() const { if (player) { mp_uint32 index = player->getBeatIndexFromSamplePos(getCurrentSamplePosition()); return player->getSongMainVolume(index); } return 255; } mp_sint32 PlayerGeneric::getRow() const { if (player) { mp_uint32 index = player->getBeatIndexFromSamplePos(getCurrentSamplePosition()); return player->getRow(index); } return 0; } mp_sint32 PlayerGeneric::getOrder() const { if (player) { mp_uint32 index = player->getBeatIndexFromSamplePos(getCurrentSamplePosition()); return player->getOrder(index); } return 0; } void PlayerGeneric::getPosition(mp_sint32& order, mp_sint32& row) const { if (player) { mp_uint32 index = player->getBeatIndexFromSamplePos(getCurrentSamplePosition()); player->getPosition(order, row, index); return; } order = row = 0; } mp_sint32 PlayerGeneric::getLastUnvisitedPosition() const { if (player) return player->getLastUnvisitedPosition(); return 0; } void PlayerGeneric::getPosition(mp_sint32& order, mp_sint32& row, mp_sint32& ticker) const { if (player) { mp_uint32 index = player->getBeatIndexFromSamplePos(getCurrentSamplePosition()); player->getPosition(order, row, ticker, index); return; } order = row = ticker = 0; } mp_int64 PlayerGeneric::getSyncCount() const { if (player) return player->getSyncCount(); return 0; } mp_uint32 PlayerGeneric::getSyncSampleCounter() const { if (player) return player->getSyncSampleCounter(); return 0; } void PlayerGeneric::nextPattern() { if (player) player->nextPattern(); } void PlayerGeneric::lastPattern() { if (player) player->lastPattern(); } void PlayerGeneric::setPatternPos(mp_uint32 pos, mp_uint32 row/* = 0*/, bool resetChannels/* = true*/, bool resetFXMemory/* = true*/) { if (player) player->setPatternPos(pos, row, resetChannels, resetFXMemory); } mp_sint32 PlayerGeneric::getTempo() const { if (player) { mp_uint32 index = player->getBeatIndexFromSamplePos(getCurrentSamplePosition()); return player->getTempo(index); } return 0; } mp_sint32 PlayerGeneric::getSpeed() const { if (player) { mp_uint32 index = player->getBeatIndexFromSamplePos(getCurrentSamplePosition()); return player->getSpeed(index); } return 0; } void PlayerGeneric::resetOnStop(bool b) { resetOnStopFlag = b; if (player) player->resetOnStop(b); } void PlayerGeneric::resetMainVolumeOnStartPlay(bool b) { resetMainVolumeOnStartPlayFlag = b; if (player) player->resetMainVolumeOnStartPlay(b); } struct PeakAutoAdjustFilter : public Mixable { mp_uint32 mixerShift; mp_uint32 masterVolume; mp_sint32 lastPeakValue; PeakAutoAdjustFilter() : mixerShift(0), masterVolume(256), lastPeakValue(0) { } virtual void mix(mp_sint32* buffer, mp_uint32 bufferSize) { const mp_sint32* buffer32 = buffer; for (mp_uint32 i = 0; i < bufferSize*MP_NUMCHANNELS; i++) { mp_sint32 b = *buffer32++; if (abs(b) > lastPeakValue) lastPeakValue = abs(b); } } void calculateMasterVolume() { if (lastPeakValue) { float v = 32768.0f*(1< 256) masterVolume = 256; } } }; // export to 16bit stereo WAV mp_sint32 PlayerGeneric::exportToWAV(const SYSCHAR* fileName, XModule* module, mp_sint32 startOrder/* = 0*/, mp_sint32 endOrder/* = -1*/, const mp_ubyte* mutingArray/* = NULL*/, mp_uint32 mutingNumChannels/* = 0*/, const mp_ubyte* customPanningTable/* = NULL*/, AudioDriverBase* preferredDriver/* = NULL*/, mp_sint32* timingLUT/* = NULL*/) { PlayerBase* player = NULL; AudioDriverBase* wavWriter = preferredDriver; bool isWAVWriterDriver = false; if (wavWriter == NULL) { wavWriter = new WAVWriter(fileName); isWAVWriterDriver = true; if (!static_cast(wavWriter)->isOpen()) { delete wavWriter; return MP_DEVICE_ERROR; } } MasterMixer mixer(frequency, bufferSize, 1, wavWriter); mixer.setSampleShift(sampleShift); mixer.setDisableMixing(disableMixing); player = getPreferredPlayer(module); PeakAutoAdjustFilter filter; if (autoAdjustPeak) mixer.setFilterHook(&filter); if (player) { player->adjustFrequency(frequency); player->resetOnStop(resetOnStopFlag); player->setBufferSize(bufferSize); player->setResamplerType(resamplerType); player->setMasterVolume(masterVolume); player->setPlayMode(playMode); player->setDisableMixing(disableMixing); player->setAllowFilters(allowFilters); #ifndef MILKYTRACKER if (player->getType() == PlayerBase::PlayerType_IT) { static_cast(player)->setNumMaxVirChannels(numMaxVirChannels); } #endif mixer.addDevice(player); } if (player) { if (mutingArray && mutingNumChannels > 0 && mutingNumChannels <= module->header.channum) { for (mp_uint32 i = 0; i < mutingNumChannels; i++) player->muteChannel(i, mutingArray[i] == 1); } player->startPlaying(module, false, startOrder, 0, -1, customPanningTable, false, -1); mixer.start(); } if (endOrder == -1 || endOrder < startOrder || endOrder > module->header.ordnum - 1) endOrder = module->header.ordnum - 1; mp_sint32 curOrderPos = startOrder; if (timingLUT) { for (mp_sint32 i = 0; i < module->header.ordnum; i++) timingLUT[i] = -1; timingLUT[curOrderPos] = 0; } while (!player->hasSongHalted() && player->getOrder(0) <= endOrder) { wavWriter->advance(); if (player->getOrder(0) != curOrderPos) { #ifdef __VERBOSE__ printf("%f\n", (float)wavWriter->getNumPlayedSamples() / (float)getMixFrequency()); #endif curOrderPos = player->getOrder(0); if (timingLUT && curOrderPos < module->header.ordnum && timingLUT[curOrderPos] == -1) timingLUT[curOrderPos] = wavWriter->getNumPlayedSamples(); } } player->stopPlaying(); mixer.stop(); // important step, otherwise destruction of the audio driver will cause // trouble if the mixer instance is removed from this function's stack // and trys to access the driver which is no longer existant mixer.closeAudioDevice(); // Sync value sampleShift = mixer.getSampleShift(); filter.mixerShift = sampleShift; filter.calculateMasterVolume(); masterVolume = filter.masterVolume; delete player; mp_sint32 numWrittenSamples = wavWriter->getNumPlayedSamples(); if (isWAVWriterDriver) delete wavWriter; return numWrittenSamples; } bool PlayerGeneric::grabChannelInfo(mp_sint32 chn, TPlayerChannelInfo& channelInfo) const { if (player) return player->grabChannelInfo(chn, channelInfo); return false; } void PlayerGeneric::setNumMaxVirChannels(mp_sint32 max) { numMaxVirChannels = max; #ifndef MILKYTRACKER if (player) { if (player->getType() == PlayerBase::PlayerType_IT) { static_cast(player)->setNumMaxVirChannels(max); } } #endif } mp_sint32 PlayerGeneric::getNumMaxVirChannels() const { #ifndef MILKYTRACKER if (player) { if (player->getType() == PlayerBase::PlayerType_IT) { return static_cast(player)->getNumMaxVirChannels(); } } #endif return numMaxVirChannels; } // milkytracker void PlayerGeneric::setPanning(mp_ubyte chn, mp_ubyte pan) { if (player) player->setPanning(chn, pan); } MilkyTracker-1.02.00/src/milkyplay/PlayerGeneric.h000066400000000000000000000561161324432207300217700ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * PlayerGeneric.h * MilkyPlay * * This class is meant to be a wrapper class that handles all * different sorts of players for different Module types. * * Created by Peter Barth on 21.01.05. * */ #ifndef __PLAYERGENERIC_H__ #define __PLAYERGENERIC_H__ #include "MilkyPlayTypes.h" #include "XMFile.h" #include "ChannelMixer.h" #include "PlayerBase.h" class XModule; class AudioDriverInterface; class PlayerGeneric : public MixerSettings, public PlayModeSettings { private: class MasterMixer* mixer; class MixerNotificationListener* listener; // the current PlayerBase instance PlayerBase* player; // ---------------------------------------------------------- // Since we are destroying and creating PlayerBase instances // within this class there is no way to keep the settings // we set for this special instance, so we need to store them // not only in the instance but also in this class: // ---------------------------------------------------------- // remember mixer type ChannelMixer::ResamplerTypes resamplerType; // remember mixing frequency mp_uint32 frequency; // overwrite default audiodriver AudioDriverInterface* audioDriver; // remember buffersize mp_uint32 bufferSize; // remember sample shift mp_uint32 sampleShift; // this flag indicates if audiodriver tries to compensate for 2^n buffer sizes bool compensateBufferFlag; // This contains the string of the selected audio driver char* audioDriverName; // remember paused state bool paused; // remember if mixing has been disabled bool disableMixing; // remember if filters are allowed bool allowFilters; // remember idle state bool idle; // remember to play only one row bool playOneRowOnly; // remember to repeat the song bool repeat; // remember to reset on stop bool resetOnStopFlag; // remember to reset main volume on start bool resetMainVolumeOnStartPlayFlag; // remember to auto adjust the peak bool autoAdjustPeak; // remember our mixer mastervolume mp_sint32 masterVolume; // remember our mixer panning separation mp_sint32 panningSeparation; // remember maximum amount of virtual channels mp_sint32 numMaxVirChannels; void adjustSettings(); /** * Determine the best player type for a given module * @param module the module which should be played * @return an enum with identifies the player type */ static PlayerBase::PlayerTypes getPreferredPlayerType(XModule* module); /** * Return an actual player instance for a given module * This instance MUST be deleted after usage * @param module the module which should be played * @param audioDriver you can specify your own audioDriver instance, if this is NULL the default driver will be selected * @return a PlayerBase instance is returned */ PlayerBase* getPreferredPlayer(XModule* module) const; public: /** * Construct a PlayerGeneric object for a given output frequency * @param frequency output frequency for the mixer */ PlayerGeneric(mp_sint32 frequency, AudioDriverInterface* audioDriver = NULL); /** * Destructor */ ~PlayerGeneric(); /////////////////////////////////////////////////////////////////////////////////////////// // -------------------------- wrapping mixer specific stuff ------------------------------- /////////////////////////////////////////////////////////////////////////////////////////// /** * Specify mixer type. This basically selects the output quality * @param type mixer type * @see MixerSettings */ void setResamplerType(ResamplerTypes type); /** * Specify mixer type with two flags indicating whether to interpolate or to do volume ramping. * @param type mixer type * @see MixerSettings */ void setResamplerType(bool interpolation, bool ramping); /** * Get the mixer type * @return mixer type * @see setResamplerType */ ChannelMixer::ResamplerTypes getResamplerType() const; /** * Specify the amount of which the sample data is right-shifted before sent to the sound driver * This is an amplify in the opposite direction (shift value of 2 means 25% of the original volume) * @param shift sample data shift amount */ void setSampleShift(mp_sint32 shift); /** * Get the shift amount * @return shift amount * @see setSampleShift */ mp_sint32 getSampleShift() const; /** * Doesn't work. Don't call. * @param b true or false */ void setPeakAutoAdjust(bool b); /** * Set the desired output frequency * It's up the the driver if the wanted frequency is possible or not * Note that there is no fallback, if the driver can't handle the frequency * your song will probably sound to fast or to slow * @param frequency output frequency for the mixer */ mp_sint32 adjustFrequency(mp_uint32 frequency); /** * Get the current mixer output frequency * @return output frequency * @see adjustFrequency */ mp_sint32 getMixFrequency() const; /** * Convert number of beat backets to buffer size: * The ChannelMixer class uses a fixed 250Hz timer so the mixer size is * always a multiple of CurrentOutputFrequency / 250 * E.g. if you're mixing at 44100Hz the buffer size is always a multiple * of 176 samples. * Thus specifying a value of 10 will result in a buffer of 1760 samples size. * Important: Some sound device drivers don't allow buffer sizes which are * not multiple of 2^n that's why on some systems setting up the sound * device with such a buffer size might not work. Use adjustBufferSize with * a 2^n buffer size or call setPowerOfTwoCompensationFlag(true). * * @param numBeats The number of beat "packets" */ mp_sint32 beatPacketsToBufferSize(mp_uint32 numBeats); /** * Here for legacy reasons, sets the buffer size according to the number * of beat packets (see function above) */ mp_sint32 adjustBufferSize(mp_uint32 numBeats); /** * Set the desired buffer size * Important: Some sound device drivers don't allow buffer sizes which are * not multiple of 2^n that's why on some systems you might call * setPowerOfTwoCompensationFlag(true) to always round to the next 2^n buffer size * * @param bufferSize buffer size description */ mp_sint32 setBufferSize(mp_uint32 bufferSize); /** * Tell the sound driver to force forcing 2^n buffer blocks if possible * @param b true or false * @see getPowerOfTwoCompensationFlag, audioDriverSupportsPowerOfTwoCompensation */ mp_sint32 setPowerOfTwoCompensationFlag(bool b); /** * Query if the sound driver is currently forcing 2^n buffer blocks * @return true or false * @see setPowerOfTwoCompensationFlag, audioDriverSupportsPowerOfTwoCompensation */ bool getPowerOfTwoCompensationFlag() const; /** * Query the the sound drivers name * @return Name of the audio driver. Do NOT save this value. It's only temporary and may change. */ const char* getCurrentAudioDriverName() const; /** * Select an audio driver from the available list of audio drivers * specified by the given name * If the return value is false the select has failed but * the default driver has been selected instead so playback * is still possible * @param name Full qualified name of the audio driver * @return true or false indicating if the selection has succeeded */ bool setCurrentAudioDriverByName(const char* name); /** * Get state information about the mixer: Check if the mixer has been initialized * @return true or false */ bool isInitialized() const; /** * Get state information about the player: Check if we're playing a song * @return true or false */ bool isPlaying() const; /** * Get how many samples have been played since the player has started playing * this is only 32 bit and might overflow quickly depending on your output frequency * @return number of samples played */ mp_int64 getSampleCounter() const; /** * Reset the sample counter * @see getSampleCounter */ void resetSampleCounter(); /** * For hi latency audio drivers this might return * a pointer to the sample which is currently played * in the mixing BUFFER!!! Don't depend on this function * it might not work on your system * @return the position of the driver within the sample buffer */ mp_sint32 getCurrentSamplePosition() const; mp_sint32 getCurrentBeatIndex(); /** * Get a sample from the current mixing buffer * a pointer to the sample which is currently played * in the mixing BUFFER!!! Don't depend on this function * it might not work on your system * @param position position within the mixing buffer * @param channel the channel (0 = left, 1 = right [mixing is always stereo]) * @return a sample between -32768 and 32768 */ mp_sint32 getCurrentSample(mp_sint32 position, mp_sint32 channel); /** * Get some peaks around the position "pos" in the current mixing buffer * Just looks good when displayed, is not a perfect peak detector * @param position in the buffer, needs to be within the valid range * @param channel the channel (0 = left, 1 = right [mixing is always stereo]) */ mp_sint32 getCurrentSamplePeak(mp_sint32 position, mp_sint32 channel); /** * Reset channels. All channels will immediately stop playing after this has been called. */ void resetChannels(); /** * How many active channels do we have? * @return return the number of channels which are active in the mixing process */ mp_sint32 getNumActiveChannels() const; /** * How many channels have been allocated for playback? * @return return the number of channels allocated for playback */ mp_sint32 getNumAllocatedChannels() const; /////////////////////////////////////////////////////////////////////////////////////////// // -------------------------- wrapping player specific stuff ------------------------------ /////////////////////////////////////////////////////////////////////////////////////////// /** * Set a specified play mode * @param mode play mode * @see PlayModeSettings */ void setPlayMode(PlayModes mode); /** * Get current selected play mode * @return current play mode * @see setPlayMode */ PlayModes getPlayMode() const; /** * Switch special playmode flags, only applies to players * which are able to play the kind of modules of interest * @param option option to enable or disable * @param b enable or disable option */ void enable(PlayModeOptions option, bool b); /** * See if a special flags is enabled for the current player * @param option option to enable or disable * @return true if option is enabled, false otherwise */ bool isEnabled(PlayModeOptions option) const; /** * Restart playback * @param startPosition start position within the song * @param startRow start position within the pattern * @param resetMixer whether or not to reset the mixer * @param customPanningTable When specifying a custom panning table the panning default from the module is ignored * @param playOneRowOnly stop after playing exactly ONE row */ void restart(mp_uint32 startPosition = 0, mp_uint32 startRow = 0, bool resetMixer = true, const mp_ubyte* customPanningTable = NULL, bool playOneRowOnly = false); /** * Reset everything. Includes audio device if there is one. */ void reset(); /** * Reset speed settings to the default. */ void resetAllSpeed(); /** * Start playback * @param module module to play * @param repeat repeat song? * @param startPosition start position within the song * @param startRow start position within the pattern * @param numChannels number of channels to be allocated for playback, supply -1 for auto adjust * @param customPanningTable When specifying a custom panning table the panning default from the module is ignored * @param idle whether or not to start in idle mode * @param patternIndex this specifies to play a given pattern only, supply -1 to play entire song instead of just one pattern */ mp_sint32 startPlaying(XModule* module, bool repeat = false, mp_uint32 startPosition = 0, mp_uint32 startRow = 0, mp_sint32 numChannels = -1, const mp_ubyte* customPanningTable = NULL, bool idle = false, mp_sint32 patternIndex = -1, bool playOneRowOnly = false); /** * Specify a pattern to be played instead of playing the entire song * @param patternIndex this specifies to play a given pattern only, supply -1 to play entire song instead of just one pattern */ void setPatternToPlay(mp_sint32 patternIndex); /** * Stop playing, also stops audio device (easy, huh?) * @return error code (0 = everything is fine) */ mp_sint32 stopPlaying(); /** * Check if song has been stopped (either the song did something stupid or it played once and repeat is false) * NOTE: This will not mean that audio streaming has stopped, it only tells you that the song hit a position * that was already played and if it's not in repeat mode it will halt. * If the player is in repeat mode this will most probably always return false and even if it is true you need * to still call stopPlaying() if you want to play another song. * @return true or false */ bool hasSongHalted() const; /** * This is probably only used by MilkyTracker * You can tell the core not to play any song, but the mixer is still active * So if you play samples on the channels manually they will still be mixed * @param idle true = go into idle mode stop song but mixer stays active, false = start playing the song again */ void setIdle(bool idle); /** * Check if player is in idle state * @return true or false * @see setIdle */ bool isIdle() const; /** * Tell the player to enable/disable repeating * @param repeat true or false */ void setRepeat(bool repeat); /** * Check if player is repeating * @return true or false * @see setRepeat */ bool isRepeating() const; /** * Pause the player */ mp_sint32 pausePlaying(); /** * Resume from paused state * @see pausePlaying */ mp_sint32 resumePlaying(); /** * Check if player is in paused state * @return true or false * @see pausePlaying */ bool isPaused() const; /** * Turn mixer off, but song is still played * This is used for calculating the song length: * Song is played internally but the entire mixer * is disabled so playing will be really fast * @param b true or false */ void setDisableMixing(bool b); /** * Allow DSP filters. * IT uses a low pass resonanance IIR filter * which can be disabled to save CPU power. * @param b true or false */ void setAllowFilters(bool b); /** * Tell if filters are allowed. * @return true if filters are enabled. * @see setAllowFilters */ bool getAllowFilters() const; /** * Set master volume for the mixer * @param vol Master volume between 0 and 256 */ void setMasterVolume(mp_sint32 vol); /** * Return the master volume for the mixer * @return master volume (usually a volume between 0 and 256) * @see setMasterVolume */ mp_sint32 getMasterVolume() const; /** * Set panning separation for the mixer * @param separation Panning separation between 0 (none) and 256 (full) */ void setPanningSeparation(mp_sint32 separation); /** * Return the panning separation for the mixer * @return Panning separation between 0 (none) and 256 (full) * @see setPanningSeparation */ mp_sint32 getPanningSeparation() const; /** * Return the main volume of the currently played song, this is NOT the mixer master volume * @return main volume between 0 and 255 */ mp_sint32 getSongMainVolume() const; /** * Which row in the current pattern is the player at? * @return current row in current pattern */ mp_sint32 getRow() const; /** * Which order position is the player at? * @return order position from 0 to 255 (might return bigger values in future) */ mp_sint32 getOrder() const; /** * Return both, order and row at the same time, * might be needed for sync reasons (MilkyTracker) * Retrieving the row requires very low latency output, so it might * not be as precise as you want to have it * @param order reference to an 32 bit integer to hold the order * @param row reference to an 32 bit integer to hold the row */ void getPosition(mp_sint32& order, mp_sint32& row) const; mp_sint32 getLastUnvisitedPosition() const; /** * Return order, row and ticker at the same time, * might be needed for sync reasons (MilkyTracker) * Retrieving the ticker/row requires very low latency output, so it might * not be as precise as you want to have it * @param order reference to an 32 bit integer to hold the order * @param row reference to an 32 bit integer to hold the row * @param ticker reference to an 32 bit integer to hold the ticker */ void getPosition(mp_sint32& order, mp_sint32& row, mp_sint32& ticker) const; /** * Return the number of rows played since the player has started * Might become handy for sync reasons. * @return number of rows played since start */ mp_int64 getSyncCount() const; /** * Return number of samples played but this time the * audio driver will return this value. * This is also used for VERY accurate synching especially * using MMSYSTEM. The value will be resettet on calling stopPlaying() * @return number of samples the audiodriver has played since start */ mp_uint32 getSyncSampleCounter() const; /** * Jump to next pattern */ void nextPattern(); /** * Jump to previous pattern */ void lastPattern(); /** * Select a new position within the song * @param pos new order position * @param row new row * @param resetChannels reset channels, yes or no */ void setPatternPos(mp_uint32 pos, mp_uint32 row = 0, bool resetChannels = true, bool resetFXMemory = true); /** * Return the tempo of the song at the current position (in BPM) * When there is no song playing the last active tempo will be returned * @return current tempo in BPM */ mp_sint32 getTempo() const; /** * Return the speed of the current position in ticks * When there is no song playing the last active tick speed will be returned * @return current speed in ticks */ mp_sint32 getSpeed() const; /** * Tell the player to reset the channels when the song stops (= is played once) * When the player is in repeat mode the channels will never be resettet, not * even when the song loops * @param b reset on stop, yes or no */ void resetOnStop(bool b); /** * Tell the player to reset the main volume of the player (not the mixer master volume) * when the song is restarted (MilkyTracker does not want the volume to be reset) * @param b reset volume on start, yes or no */ void resetMainVolumeOnStartPlay(bool b); /** * Export the song as WAV file * @param fileName the path and the filename to export to * @param module the module to export * @param startOrder the start position within the order list of the song * @param endOrder the last order to be played * @param mutingArray optional: an array telling which channels to mute * @param mutingNumChannels optional: many channels does the muting array contain? * @param customPanningTable When specifying a custom panning table the panning default from the module is ignored * @param preferredDriver optional: specify another output audio driver here (NULL = WAV driver) * @param timingLUT optional: specify a pointer to a buffer which will hold the * number of samples played up to this position in the orderlist * the buffer needs at least module->header.ordnum entries */ mp_sint32 exportToWAV(const SYSCHAR* fileName, XModule* module, mp_sint32 startOrder = 0, mp_sint32 endOrder = -1, const mp_ubyte* mutingArray = NULL, mp_uint32 mutingNumChannels = 0, const mp_ubyte* customPanningTable = NULL, AudioDriverBase* preferredDriver = NULL, mp_sint32* timingLUT = NULL); /** * Grab current channel data from a module channel * @param chn the channel index to grab the data from * @param channelInfo reference to a channelInfo structure to be filled */ bool grabChannelInfo(mp_sint32 chn, TPlayerChannelInfo& channelInfo) const; /** * Set the maximum number of virtual channels to be allocated while playing. * This might reduce CPU consumption a lot but only if the current player is using * virtual channels (like PlayerIT for example). If the current player doesn't * support virtual channels, this function has no effect. * * IMPORTANT: call this only before startPlaying, otherwise it will have no effect. * * @param max maximum amount of virtual channels (default is 256) */ void setNumMaxVirChannels(mp_sint32 max); /** * Return the maximum number of virtual channels to be allocated while playing. * @return maximum amount of virtual channels (default is 256) */ mp_sint32 getNumMaxVirChannels() const; // ---------------------------- milkytracker ---------------------------- /** * Change panning of a current playing channel * @param chn the channel * @param pan new panning value Left(0..255)Right */ void setPanning(mp_ubyte chn, mp_ubyte pan); /** * Return the currently used player instance (handle with care) * @return a PlayerBase instance is returned or NULL if there is none right now */ PlayerBase* getPlayerInstance() { return player; } friend class MixerNotificationListener; }; #endif MilkyTracker-1.02.00/src/milkyplay/PlayerIT.cpp000066400000000000000000003232551324432207300212640ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * PlayerIT.cpp * MilkyPlay IT player. Note that this evolved out of the standard player which * aims at correct XM replay, so many things might still be not correct for * impulse tracker. So this code is subject to change. * * */ #include "PlayerIT.h" // if we're in background we work on our own state // if not, we're just going to work on the host state PlayerIT::TChnState& PlayerIT::TVirtualChannel::chnstat() { return host ? host->state : state; } #define CHANNEL_FLAGS_DVS 0x10000 #define CHANNEL_FLAGS_DFS 0x20000 #define CHANNEL_FLAGS_DPS 0x40000 #define CHANNEL_FLAGS_FORCE_FORWARD 0x00001 #define CHANNEL_FLAGS_FORCE_BACKWARD 0x00002 #define CHANNEL_FLAGS_FORCE_BILOOP 0x00004 #define CHANNEL_FLAGS_UPDATE_IGNORE 0x00100 //#define MINPERIOD (113*4) // must be called after the poscnt has been properly set #define RESETLOOPING \ { \ chnInf->loopstart=chnInf->loopcounter=chnInf->execloop=0; \ chnInf->isLooping = false; \ chnInf->loopingValidPosition = poscnt; \ } #define RESET_ALL_LOOPING \ { \ for (mp_sint32 c = 0; c < numModuleChannels; c++) \ { \ TModuleChannel *chnInf = &chninfo[c]; \ RESETLOOPING \ } \ } static inline mp_sint32 myMod(mp_sint32 a, mp_sint32 b) { mp_sint32 r = a % b; return r < 0 ? b + r : r; } const mp_sint32 PlayerIT::vibtab[32] = { 0,24,49,74,97,120,141,161, 180,197,212,224,235,244,250,253, 255,253,250,244,235,224,212,197, 180,161,141,120,97,74,49,24 }; const mp_sint32 PlayerIT::finesintab[256] = { 0, 2, 3, 5, 6, 8, 9, 11, 12, 14, 16, 17, 19, 20, 22, 23, 24, 26, 27, 29, 30, 32, 33, 34, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 56, 57, 58, 59, 59, 60, 60, 61, 61, 62, 62, 62, 63, 63, 63, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 63, 63, 63, 62, 62, 62, 61, 61, 60, 60, 59, 59, 58, 57, 56, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 39, 38, 37, 36, 34, 33, 32, 30, 29, 27, 26, 24, 23, 22, 20, 19, 17, 16, 14, 12, 11, 9, 8, 6, 5, 3, 2, 0, -2, -3, -5, -6, -8, -9,-11,-12,-14,-16,-17,-19,-20,-22,-23, -24,-26,-27,-29,-30,-32,-33,-34,-36,-37,-38,-39,-41,-42,-43,-44, -45,-46,-47,-48,-49,-50,-51,-52,-53,-54,-55,-56,-56,-57,-58,-59, -59,-60,-60,-61,-61,-62,-62,-62,-63,-63,-63,-64,-64,-64,-64,-64, -64,-64,-64,-64,-64,-64,-63,-63,-63,-62,-62,-62,-61,-61,-60,-60, -59,-59,-58,-57,-56,-56,-55,-54,-53,-52,-51,-50,-49,-48,-47,-46, -45,-44,-43,-42,-41,-39,-38,-37,-36,-34,-33,-32,-30,-29,-27,-26, -24,-23,-22,-20,-19,-17,-16,-14,-12,-11, -9, -8, -6, -5, -3, -2 }; #define MAXNOTES (16*12) #define LINEAR_PERIOD_MAX (MAXNOTES*16*4) const mp_uword PlayerIT::lintab[769] = { 16726,16741,16756,16771,16786,16801,16816,16832,16847,16862,16877,16892,16908,16923,16938,16953, 16969,16984,16999,17015,17030,17046,17061,17076,17092,17107,17123,17138,17154,17169,17185,17200, 17216,17231,17247,17262,17278,17293,17309,17325,17340,17356,17372,17387,17403,17419,17435,17450, 17466,17482,17498,17513,17529,17545,17561,17577,17593,17608,17624,17640,17656,17672,17688,17704, 17720,17736,17752,17768,17784,17800,17816,17832,17848,17865,17881,17897,17913,17929,17945,17962, 17978,17994,18010,18027,18043,18059,18075,18092,18108,18124,18141,18157,18174,18190,18206,18223, 18239,18256,18272,18289,18305,18322,18338,18355,18372,18388,18405,18421,18438,18455,18471,18488, 18505,18521,18538,18555,18572,18588,18605,18622,18639,18656,18672,18689,18706,18723,18740,18757, 18774,18791,18808,18825,18842,18859,18876,18893,18910,18927,18944,18961,18978,18995,19013,19030, 19047,19064,19081,19099,19116,19133,19150,19168,19185,19202,19220,19237,19254,19272,19289,19306, 19324,19341,19359,19376,19394,19411,19429,19446,19464,19482,19499,19517,19534,19552,19570,19587, 19605,19623,19640,19658,19676,19694,19711,19729,19747,19765,19783,19801,19819,19836,19854,19872, 19890,19908,19926,19944,19962,19980,19998,20016,20034,20052,20071,20089,20107,20125,20143,20161, 20179,20198,20216,20234,20252,20271,20289,20307,20326,20344,20362,20381,20399,20418,20436,20455, 20473,20492,20510,20529,20547,20566,20584,20603,20621,20640,20659,20677,20696,20715,20733,20752, 20771,20790,20808,20827,20846,20865,20884,20902,20921,20940,20959,20978,20997,21016,21035,21054, 21073,21092,21111,21130,21149,21168,21187,21206,21226,21245,21264,21283,21302,21322,21341,21360, 21379,21399,21418,21437,21457,21476,21496,21515,21534,21554,21573,21593,21612,21632,21651,21671, 21690,21710,21730,21749,21769,21789,21808,21828,21848,21867,21887,21907,21927,21946,21966,21986, 22006,22026,22046,22066,22086,22105,22125,22145,22165,22185,22205,22226,22246,22266,22286,22306, 22326,22346,22366,22387,22407,22427,22447,22468,22488,22508,22528,22549,22569,22590,22610,22630, 22651,22671,22692,22712,22733,22753,22774,22794,22815,22836,22856,22877,22897,22918,22939,22960, 22980,23001,23022,23043,23063,23084,23105,23126,23147,23168,23189,23210,23230,23251,23272,23293, 23315,23336,23357,23378,23399,23420,23441,23462,23483,23505,23526,23547,23568,23590,23611,23632, 23654,23675,23696,23718,23739,23761,23782,23804,23825,23847,23868,23890,23911,23933,23954,23976, 23998,24019,24041,24063,24084,24106,24128,24150,24172,24193,24215,24237,24259,24281,24303,24325, 24347,24369,24391,24413,24435,24457,24479,24501,24523,24545,24567,24590,24612,24634,24656,24679, 24701,24723,24746,24768,24790,24813,24835,24857,24880,24902,24925,24947,24970,24992,25015,25038, 25060,25083,25105,25128,25151,25174,25196,25219,25242,25265,25287,25310,25333,25356,25379,25402, 25425,25448,25471,25494,25517,25540,25563,25586,25609,25632,25655,25678,25702,25725,25748,25771, 25795,25818,25841,25864,25888,25911,25935,25958,25981,26005,26028,26052,26075,26099,26123,26146, 26170,26193,26217,26241,26264,26288,26312,26336,26359,26383,26407,26431,26455,26479,26502,26526, 26550,26574,26598,26622,26646,26670,26695,26719,26743,26767,26791,26815,26839,26864,26888,26912, 26937,26961,26985,27010,27034,27058,27083,27107,27132,27156,27181,27205,27230,27254,27279,27304, 27328,27353,27378,27402,27427,27452,27477,27502,27526,27551,27576,27601,27626,27651,27676,27701, 27726,27751,27776,27801,27826,27851,27876,27902,27927,27952,27977,28003,28028,28053,28078,28104, 28129,28155,28180,28205,28231,28256,28282,28307,28333,28359,28384,28410,28435,28461,28487,28513, 28538,28564,28590,28616,28642,28667,28693,28719,28745,28771,28797,28823,28849,28875,28901,28927, 28953,28980,29006,29032,29058,29084,29111,29137,29163,29190,29216,29242,29269,29295,29322,29348, 29375,29401,29428,29454,29481,29507,29534,29561,29587,29614,29641,29668,29694,29721,29748,29775, 29802,29829,29856,29883,29910,29937,29964,29991,30018,30045,30072,30099,30126,30154,30181,30208, 30235,30263,30290,30317,30345,30372,30400,30427,30454,30482,30509,30537,30565,30592,30620,30647, 30675,30703,30731,30758,30786,30814,30842,30870,30897,30925,30953,30981,31009,31037,31065,31093, 31121,31149,31178,31206,31234,31262,31290,31319,31347,31375,31403,31432,31460,31489,31517,31546, 31574,31602,31631,31660,31688,31717,31745,31774,31803,31832,31860,31889,31918,31947,31975,32004, 32033,32062,32091,32120,32149,32178,32207,32236,32265,32295,32324,32353,32382,32411,32441,32470, 32499,32529,32558,32587,32617,32646,32676,32705,32735,32764,32794,32823,32853,32883,32912,32942, 32972,33002,33031,33061,33091,33121,33151,33181,33211,33241,33271,33301,33331,33361,33391,33421, 33451 // one more value because of linear interpolation }; #define LOGFAC 2*16 const mp_uint32 PlayerIT::logtab[] = { LOGFAC*907,LOGFAC*900,LOGFAC*894,LOGFAC*887,LOGFAC*881,LOGFAC*875,LOGFAC*868,LOGFAC*862, LOGFAC*856,LOGFAC*850,LOGFAC*844,LOGFAC*838,LOGFAC*832,LOGFAC*826,LOGFAC*820,LOGFAC*814, LOGFAC*808,LOGFAC*802,LOGFAC*796,LOGFAC*791,LOGFAC*785,LOGFAC*779,LOGFAC*774,LOGFAC*768, LOGFAC*762,LOGFAC*757,LOGFAC*752,LOGFAC*746,LOGFAC*741,LOGFAC*736,LOGFAC*730,LOGFAC*725, LOGFAC*720,LOGFAC*715,LOGFAC*709,LOGFAC*704,LOGFAC*699,LOGFAC*694,LOGFAC*689,LOGFAC*684, LOGFAC*678,LOGFAC*675,LOGFAC*670,LOGFAC*665,LOGFAC*660,LOGFAC*655,LOGFAC*651,LOGFAC*646, LOGFAC*640,LOGFAC*636,LOGFAC*632,LOGFAC*628,LOGFAC*623,LOGFAC*619,LOGFAC*614,LOGFAC*610, LOGFAC*604,LOGFAC*601,LOGFAC*597,LOGFAC*592,LOGFAC*588,LOGFAC*584,LOGFAC*580,LOGFAC*575, LOGFAC*570,LOGFAC*567,LOGFAC*563,LOGFAC*559,LOGFAC*555,LOGFAC*551,LOGFAC*547,LOGFAC*543, LOGFAC*538,LOGFAC*535,LOGFAC*532,LOGFAC*528,LOGFAC*524,LOGFAC*520,LOGFAC*516,LOGFAC*513, LOGFAC*508,LOGFAC*505,LOGFAC*502,LOGFAC*498,LOGFAC*494,LOGFAC*491,LOGFAC*487,LOGFAC*484, LOGFAC*480,LOGFAC*477,LOGFAC*474,LOGFAC*470,LOGFAC*467,LOGFAC*463,LOGFAC*460,LOGFAC*457, LOGFAC*453,LOGFAC*450,LOGFAC*447,LOGFAC*443,LOGFAC*440,LOGFAC*437,LOGFAC*434,LOGFAC*431, LOGFAC*428 // one more value because of linear interpolation }; // 2^(SlideValue/768) in 16.16 fixed point // SlideValue in [-256..256] const mp_uint32 PlayerIT::powtab[] = { 52015, 52062, 52109, 52156, 52204, 52251, 52298, 52345, 52392, 52440, 52487, 52534, 52582, 52629, 52677, 52724, 52772, 52820, 52867, 52915, 52963, 53011, 53059, 53107, 53154, 53202, 53250, 53299, 53347, 53395, 53443, 53491, 53540, 53588, 53636, 53685, 53733, 53782, 53830, 53879, 53928, 53976, 54025, 54074, 54123, 54172, 54220, 54269, 54318, 54367, 54417, 54466, 54515, 54564, 54613, 54663, 54712, 54761, 54811, 54860, 54910, 54959, 55009, 55059, 55108, 55158, 55208, 55258, 55308, 55358, 55408, 55458, 55508, 55558, 55608, 55658, 55709, 55759, 55809, 55860, 55910, 55961, 56011, 56062, 56112, 56163, 56214, 56264, 56315, 56366, 56417, 56468, 56519, 56570, 56621, 56672, 56723, 56775, 56826, 56877, 56928, 56980, 57031, 57083, 57134, 57186, 57238, 57289, 57341, 57393, 57445, 57496, 57548, 57600, 57652, 57704, 57757, 57809, 57861, 57913, 57965, 58018, 58070, 58123, 58175, 58228, 58280, 58333, 58385, 58438, 58491, 58544, 58597, 58650, 58702, 58755, 58809, 58862, 58915, 58968, 59021, 59075, 59128, 59181, 59235, 59288, 59342, 59395, 59449, 59503, 59556, 59610, 59664, 59718, 59772, 59826, 59880, 59934, 59988, 60042, 60096, 60151, 60205, 60259, 60314, 60368, 60423, 60477, 60532, 60586, 60641, 60696, 60751, 60806, 60860, 60915, 60970, 61025, 61081, 61136, 61191, 61246, 61301, 61357, 61412, 61468, 61523, 61579, 61634, 61690, 61746, 61801, 61857, 61913, 61969, 62025, 62081, 62137, 62193, 62249, 62305, 62362, 62418, 62474, 62531, 62587, 62644, 62700, 62757, 62814, 62870, 62927, 62984, 63041, 63098, 63155, 63212, 63269, 63326, 63383, 63440, 63498, 63555, 63612, 63670, 63727, 63785, 63842, 63900, 63958, 64016, 64073, 64131, 64189, 64247, 64305, 64363, 64421, 64479, 64538, 64596, 64654, 64713, 64771, 64830, 64888, 64947, 65005, 65064, 65123, 65182, 65240, 65299, 65358, 65417, 65476, 65536, 65595, 65654, 65713, 65773, 65832, 65891, 65951, 66010, 66070, 66130, 66189, 66249, 66309, 66369, 66429, 66489, 66549, 66609, 66669, 66729, 66789, 66850, 66910, 66971, 67031, 67092, 67152, 67213, 67273, 67334, 67395, 67456, 67517, 67578, 67639, 67700, 67761, 67822, 67883, 67945, 68006, 68067, 68129, 68190, 68252, 68314, 68375, 68437, 68499, 68561, 68623, 68685, 68747, 68809, 68871, 68933, 68995, 69057, 69120, 69182, 69245, 69307, 69370, 69432, 69495, 69558, 69621, 69684, 69747, 69809, 69873, 69936, 69999, 70062, 70125, 70189, 70252, 70315, 70379, 70442, 70506, 70570, 70633, 70697, 70761, 70825, 70889, 70953, 71017, 71081, 71145, 71209, 71274, 71338, 71403, 71467, 71532, 71596, 71661, 71725, 71790, 71855, 71920, 71985, 72050, 72115, 72180, 72245, 72310, 72376, 72441, 72507, 72572, 72638, 72703, 72769, 72834, 72900, 72966, 73032, 73098, 73164, 73230, 73296, 73362, 73429, 73495, 73561, 73628, 73694, 73761, 73827, 73894, 73961, 74027, 74094, 74161, 74228, 74295, 74362, 74429, 74497, 74564, 74631, 74699, 74766, 74833, 74901, 74969, 75036, 75104, 75172, 75240, 75308, 75376, 75444, 75512, 75580, 75648, 75717, 75785, 75853, 75922, 75991, 76059, 76128, 76197, 76265, 76334, 76403, 76472, 76541, 76610, 76679, 76749, 76818, 76887, 76957, 77026, 77096, 77165, 77235, 77305, 77375, 77445, 77514, 77584, 77655, 77725, 77795, 77865, 77935, 78006, 78076, 78147, 78217, 78288, 78359, 78429, 78500, 78571, 78642, 78713, 78784, 78855, 78926, 78998, 79069, 79140, 79212, 79283, 79355, 79427, 79498, 79570, 79642, 79714, 79786, 79858, 79930, 80002, 80074, 80147, 80219, 80292, 80364, 80437, 80509, 80582, 80655, 80727, 80800, 80873, 80946, 81019, 81093, 81166, 81239, 81312, 81386, 81459, 81533, 81607, 81680, 81754, 81828, 81902, 81976, 82050, 82124, 82198, 82272, 82346, 82421, 82495, 82570 // one more value because of linear interpolation }; mp_sint32 PlayerIT::interpolate(mp_sint32 eax,mp_sint32 ebx,mp_sint32 ecx,mp_sint32 edi,mp_sint32 esi) { if (ebx==ecx) return edi; mp_sint32 di = ((eax-ebx)*(esi-edi))/(ecx-ebx)+edi; return (mp_sint32)di; } // This takes the period with 8 bit fractional part mp_sint32 PlayerIT::getlinfreq(mp_sint32 per) { if (per<0) per=0; if (per>LINEAR_PERIOD_MAX*256) per=LINEAR_PERIOD_MAX*256; mp_sint32 t = (LINEAR_PERIOD_MAX*256-per)/(768*256); mp_sint32 r = myMod(LINEAR_PERIOD_MAX*256-per, 768*256); // Linear interpolation seems to be wrong here /*mp_sint32 frac = r & 255; mp_sint32 r1 = ((lintab[r>>8])<>5; mp_sint32 r2 = ((lintab[(r>>8)+1])<>5; return ((255-frac)*r1 + frac*r2) >> 8;*/ return t >= 0 ? (((lintab[r>>8])<>5) : (((lintab[r>>8])>>(-t))>>5); } // This takes the period with 8 bit fractional part mp_sint32 PlayerIT::getlogfreq(mp_sint32 per) { return fixeddiv(14317056, per)>>8; } mp_sint32 PlayerIT::getlinperiod(mp_sint32 note,mp_sint32 relnote,mp_sint32 finetune) { note+=relnote+(mp_sint32)module->header.relnote; //if (note<1) note = 1; if (note>MAXNOTES) note = MAXNOTES; // t=(24L*OCTAVE+2-note)*32L-(fine>>1); return ((LINEAR_PERIOD_MAX-((note-1)*16*4)-(finetune/2))); } mp_sint32 PlayerIT::getlogperiod(mp_sint32 note,mp_sint32 relnote,mp_sint32 finetune) { note+=relnote+(mp_sint32)module->header.relnote; //if (note<1) note = 1; if (note>MAXNOTES) note = MAXNOTES; mp_sint32 ft = finetune; ft+=128; mp_sint32 octave = (note-1)/12; mp_sint32 n = myMod(note-1, 12)<<3; mp_sint32 pi = (ft>>4)+n; mp_sint32 v1 = logtab[pi]; mp_sint32 v2 = logtab[pi+1]; mp_sint32 t = (ft>>4)-8; //mp_sint32 t = (ft>>4); return octave >= 0 ? (interpolate(t,0,15,v1,v2)>>octave) : (interpolate(t,0,15,v1,v2)<<(-octave)); } PlayerIT::PlayerIT(mp_uint32 frequency) : PlayerBase(frequency) { chninfo = NULL; vchninfo = NULL; attick = NULL; // fill in some default values, don't know if this is necessary tickSpeed = 6; // our tickspeed bpm = 125; // BPM speed ticker = tickSpeed-1; // runs from 0 to tickspeed-1 patternIndex = 0; // holds current pattern index numEffects = 0; // current number of effects numChannels = 0; // current number of channels numMaxVirChannels = 256; // maximum amount of virtual channels //loopstart = execloop = loopcounter=0; patDelay = false; patDelayCount = 0; haltFlag = false; options[PlayModeOptionPanning8xx] = true; options[PlayModeOptionPanningE8x] = false; options[PlayModeOptionForcePTPitchLimit] = true; } PlayerIT::~PlayerIT() { freeMemory(); } #define MYMAX(a, b) (mp_sint32)((a) > (b) ? (a) : (b)) void PlayerIT::timerHandler(mp_sint32 currentBeatPacket) { PlayerBase::timerHandler(currentBeatPacket); if (paused) return; // get current maximum virtual channels mp_sint32 oldMaxVirChannels = curMaxVirChannels; mp_int64 dummy = (mp_int64)BPMCounter; dummy+=(mp_int64)adder; BPMCounter=(mp_sint32)dummy; // check overflow-carry if ((dummy>>32)) { tickhandler(); } if (module->header.flags & XModule::MODULE_AMSENVELOPES) updateBPMIndependent(); // if the new maximum of virtual channels is greater than the old one // set it to the new one, else keep the old one, because if some channels were // cut by stopSample() the mixer needs to shut these off setActiveChannels(MYMAX(curMaxVirChannels, oldMaxVirChannels)); } mp_sint32 PlayerIT::startPlaying(XModule* module, bool repeat/* = false*/, mp_uint32 startPosition/* = 0*/, mp_uint32 startRow/* = 0*/, mp_sint32 numChannels/* = -1*/, const mp_ubyte* customPanningTable/* = NULL*/, bool idle/* = false*/, mp_sint32 patternIndex/* = -1*/, bool playOneRowOnly/* = false*/) { /*for (mp_sint32 vmd = -256; vmd < 257; vmd++) { double fac = pow(2.0, vmd/768.0); printf("%d, ", (mp_sint32)(fac * 65536.0)); }*/ numModuleChannels = module->header.channum; numVirtualChannels = numMaxVirChannels < numModuleChannels ? numModuleChannels : numMaxVirChannels; return PlayerBase::startPlaying(module, repeat, startPosition, startRow, numVirtualChannels, customPanningTable, idle, patternIndex, playOneRowOnly); } void PlayerIT::restart(mp_uint32 startPosition/* = 0*/, mp_uint32 startRow/* = 0*/, bool resetMixer/* = true*/, const mp_ubyte* customPanningTable/* = NULL*/, bool playOneRowOnly/* = false*/) { if (chninfo == NULL) return; bpm = module->header.speed; tickSpeed = module->header.tempo; ticker = 0; // after the speed has been assigned, it's time to call PlayerBase::restart PlayerBase::restart(startPosition, startRow, resetMixer, customPanningTable, playOneRowOnly); this->adder = getbpmrate(this->bpm); mp_sint32 i,j; // clean up player specific variables patternIndex = 0; numEffects = 0; numChannels = 0; patDelay = false; patDelayCount = 0; haltFlag = false; startNextRow = -1; reset(); for (i = 0; i < numModuleChannels; i++) { chninfo[i].setMasterVol(0xff); chninfo[i].setPan(customPanningTable ? customPanningTable[i] : module->header.pan[i]); } memset(rowHits, 0, sizeof(rowHits)); for (i = 0; i < (signed)startPosition; i++) for (j = 0; j < 256; j++) visitRow(i*256+j); for (i = 0; i < (signed)startRow; i++) visitRow(startPosition*256+i); } void PlayerIT::reset() { curMaxVirChannels = 0; memset(chninfo, 0, sizeof(TModuleChannel)*numModuleChannels); memset(vchninfo, 0, sizeof(TVirtualChannel)*numVirtualChannels); RESET_ALL_LOOPING } void PlayerIT::resetAllSpeed() { bpm = module->header.speed; tickSpeed = module->header.tempo; ticker = 0; this->adder = getbpmrate(this->bpm); } mp_sint32 PlayerIT::allocateStructures() { freeMemory(); chninfo = new TModuleChannel[numModuleChannels]; vchninfo = new TVirtualChannel[numVirtualChannels]; attick = new mp_ubyte[numModuleChannels]; return MP_OK; } void PlayerIT::freeMemory() { if (chninfo) { delete[] chninfo; chninfo = NULL; } if (vchninfo) \ { delete[] vchninfo; vchninfo = NULL; } if (attick) { delete[] attick; attick = NULL; } } /////////////////////////////////////////////////////////////////////////////////// // controlling current song position // /////////////////////////////////////////////////////////////////////////////////// void PlayerIT::clearEffectMemory() { if (!module || !chninfo) return; ticker = 0; //loopstart = execloop = loopcounter=0; mp_sint32 i; for (i = 0; i < numModuleChannels; i++) { TModuleChannel *chnInf = &chninfo[i]; RESETLOOPING } patDelay = false; patDelayCount = 0; haltFlag = false; startNextRow = -1; memset(rowHits, 0, sizeof(rowHits)); for (i = 0; i < poscnt; i++) for (mp_sint32 j = 0; j < 256; j++) visitRow(i*256+j); for (i = 0; i < (signed)rowcnt; i++) visitRow(poscnt*256+i); } PlayerIT::TVirtualChannel* PlayerIT::allocateVirtualChannel() { const mp_sint32 numVirtualChannels = this->numVirtualChannels; mp_sint32 i; TVirtualChannel* vchn = vchninfo; for (i = 0; i < numVirtualChannels; i++, vchn++) { if (vchn->getBackground()) { if (!vchn->getActive()) { if (i+1 > curMaxVirChannels) curMaxVirChannels = i+1; vchn->setChannelIndex(i); return vchn; } } } mp_sint32 chnIndex = -1; mp_sint32 vol = 0x7FFFFFFF; vchn = vchninfo; for (i = 0; i < curMaxVirChannels; i++, vchn++) { if (vchn->getBackground()) { mp_sint32 newVol = vchn->getResultingVolume(); if (newVol < vol) { vol = newVol; chnIndex = i; } } } if (chnIndex != -1) { vchn = vchninfo + chnIndex; vchn->setChannelIndex(chnIndex); return vchn; } return NULL; } void PlayerIT::handleNoteOFF(TChnState& state) { const mp_sint32 ins = state.getIns(); if (ins && ins <= module->header.insnum) { // IT style fadeout also works without active envelope if (module->instr[ins-1].flags & TXMInstrument::IF_ITFADEOUT) { if (state.getVenv().envstruc!=NULL) { // envelope is off or on and looping if (!state.getVenv().isEnabled() || (state.getVenv().isEnabled() && (state.getVenv().envstruc->type&4))) { state.setFadeout(true); } } // no envelope at all else { state.setFadeout(true); } } // XM style (envelope is off) else if (!state.getVenv().isEnabled()) { state.setVol(0); state.adjustTremoloTremorVol(); } } state.setKeyon(false); } void PlayerIT::handlePastNoteAction(TModuleChannel* chnInf, mp_ubyte pastNoteActionType) { TVirtualChannel* vchn = vchninfo; const mp_sint32 curMaxVirChannels = this->curMaxVirChannels; switch (pastNoteActionType) { case 0: { for (mp_sint32 i = 0; i < curMaxVirChannels; i++, vchn++) if (vchn->getActive() && (vchn->getOldHost() == chnInf)) { mp_sint32 index = vchn->getChannelIndex(); stopSample(index); releaseVirtualChannel(vchn); } break; } case 1: { for (mp_sint32 i = 0; i < curMaxVirChannels; i++, vchn++) if (vchn->getActive() && (vchn->getOldHost() == chnInf)) handleNoteOFF(vchn->getRealState()); break; } case 2: { for (mp_sint32 i = 0; i < curMaxVirChannels; i++, vchn++) if (vchn->getActive() && (vchn->getOldHost() == chnInf)) vchn->getRealState().setFadeout(true); break; } } } bool PlayerIT::handleDCT(TModuleChannel* chnInf, const TNNATriggerInfo& triggerInfo, mp_ubyte DCT, mp_ubyte DCA) { TVirtualChannel* vchn = vchninfo; const mp_sint32 curMaxVirChannels = this->curMaxVirChannels; for (mp_sint32 i = 0; i < curMaxVirChannels; i++, vchn++) { if (vchn->getActive() && (vchn->getOldHost() == chnInf || vchn->getHost() == chnInf)) { bool matchDCT; // normal case (instrument supplied with note) if (triggerInfo.ins) { // must always be the same instrument matchDCT = (vchn->getIns() == triggerInfo.ins); // check for note if (DCT == 1) matchDCT &= (vchn->getNote() == triggerInfo.note); // check for sample else if (DCT == 2) matchDCT &= (vchn->getSmp() == triggerInfo.smp); } // no instrument supplied with note else { matchDCT = true; // note check doesn't do anything if instrument is 0 if (DCT == 1) continue; } if (!matchDCT) continue; // cut = keep channel if (DCA == 0) { mp_sint32 index = vchn->getChannelIndex(); stopSample(index); releaseVirtualChannel(vchn); } // note off else if (DCA == 1) { // virtual channel is no longer linked to host if (vchn->getOldHost() == chnInf) handleNoteOFF(vchn->getRealState()); // virtual channel is linked to host, unlink and handle note off else { // important: first set host to NULL // THEN set key on flag TVirtualChannel* oldvchn = chnInf->unlinkVchn(); handleNoteOFF(oldvchn->getRealState()); } } // note fade else if (DCA == 2) { // virtual channel is no longer linked to host if (vchn->getOldHost() == chnInf) vchn->getRealState().setFadeout(true); // virtual channel is linked to host, unlink and handle fade out else { // important: first set host to NULL // THEN set fade out chnInf->unlinkVchn()->setFadeout(true); } } } } // deal with no instrument case if (!triggerInfo.ins) { // if DCT is set to note, just continue with playing the note if (DCT == 1) return true; // if DCT is set to ins/smp and DCA is set to cut, cut and don't play the current note else if (DCA == 0) return false; } return true; } bool PlayerIT::handleNNAs(TModuleChannel* chnInf, const TNNATriggerInfo& triggerInfo) { /*if (poscnt == 7 && rowcnt == 00) { int i=0; i++; i--; }*/ // sanity checks if (triggerInfo.ins > module->header.insnum || !triggerInfo.note || triggerInfo.smp < 0) return true; TVirtualChannel* newVchn = allocateVirtualChannel(); if (newVchn == NULL) return false; mp_uword insflags = chnInf->getInsflags(); mp_ubyte NNA = (insflags>>4) & 3; mp_ubyte DCT = (insflags>>6) & 3; mp_ubyte DCA = (insflags>>8) & 3; if (DCT) { if (!handleDCT(chnInf, triggerInfo, DCT, DCA)) return false; } // do we have some virtual channel already? if (chnInf->hasVchn()) { // NNA = CUT? Use the same virtual channel for playback if (NNA == 0) return true; // NNA = continue else if (NNA == 1) { chnInf->unlinkVchn(); chnInf->linkVchn(newVchn); return true; } // NNA = note off else if (NNA == 2) { // important: first set host to NULL // THEN set key on flag TVirtualChannel* oldvchn = chnInf->unlinkVchn(); handleNoteOFF(oldvchn->getRealState()); chnInf->linkVchn(newVchn); return true; } // NNA = note fade else if (NNA == 3) { // important: first set host to NULL // THEN set fade out chnInf->unlinkVchn()->setFadeout(true); chnInf->linkVchn(newVchn); return true; } } else { chnInf->linkVchn(newVchn); } return true; } void PlayerIT::adjustVirtualChannels() { mp_sint32 i; TVirtualChannel* vchn = vchninfo; for (i = 0; i < curMaxVirChannels; i++, vchn++) { if (!vchn->getActive()) continue; if (vchn->getBackground()) { if (!isChannelPlaying(i) || !vchn->getVol() || !vchn->getMasterVol() || !vchn->getFadevolstart() || vchn->getVenv().cutted(vchn->getKeyon())) { //bool cutted = vchn->getVenv().cutted(vchn->getKeyon()); mp_sint32 index = vchn->getChannelIndex(); stopSample(index); releaseVirtualChannel(vchn); continue; } } /*else { if (!vchn->getFadevolstart() || vchn->getVenv().cutted(vchn->getKeyon())) { mp_sint32 index = vchn->getChannelIndex(); stopSample(index); continue; } }*/ } } void PlayerIT::prenvelope(TPrEnv *env, bool keyon, bool timingIT) { if (env->isEnabled()) { // if we're sitting on a sustain point and key is on, we don't advance further if ((env->envstruc->type&2) && (env->a==env->envstruc->sustain) && (env->step == env->envstruc->env[env->a][0]) && keyon) return; // IT-style envelopes count differently if (timingIT) { if ((env->step<=env->envstruc->env[env->b][0]) && (env->b < env->envstruc->num)) env->step++; if (env->step > env->envstruc->env[env->b][0]) { // normal loop if ((env->envstruc->type&4)) { // check for envelope loop break (AMS) if ((!(env->envstruc->type&8) || keyon) && !(!keyon && (env->envstruc->type&2) && env->envstruc->sustain == env->envstruc->loope)) // Break envelope if sustain pt == loop end point AND sustain is enabled AND key off is send { if (env->b==env->envstruc->loope) { env->a=env->envstruc->loops; env->b=env->envstruc->loops+1; env->step=env->envstruc->env[env->a][0]; return; } } } // sustain loop (IT) if ((env->envstruc->type&16)) { if (keyon) { if (env->b==env->envstruc->susloope) { env->a=env->envstruc->sustain; env->b=env->envstruc->sustain+1; env->step=env->envstruc->env[env->a][0]; return; } } } // Increase envelope position if there are more points to come if (env->b < env->envstruc->num - 1) { env->a++; env->b++; } //else //{ // // fuck you // printf("fuck"); //} } } else { if ((env->step!=env->envstruc->env[env->b][0]) && (env->b < env->envstruc->num)) env->step++; if (env->step == env->envstruc->env[env->b][0]) { // normal loop if ((env->envstruc->type&4)) { // check for envelope loop break (AMS) if ((!(env->envstruc->type&8) || keyon) && !(!keyon && (env->envstruc->type&2) && env->envstruc->sustain == env->envstruc->loope)) // Break envelope if sustain pt == loop end point AND sustain is enabled AND key off is send { if (env->b==env->envstruc->loope) { env->a=env->envstruc->loops; env->b=env->envstruc->loops+1; env->step=env->envstruc->env[env->a][0]; return; } } } // sustain loop (IT) if ((env->envstruc->type&16)) { if (keyon) // Break envelope if sustain pt == loop end point AND sustain is enabled AND key off is send { if (env->b==env->envstruc->susloope) { env->a=env->envstruc->sustain; env->b=env->envstruc->sustain+1; env->step=env->envstruc->env[env->a][0]; return; } } } // Increase envelope position if there are more points to come if (env->b < env->envstruc->num - 1) { env->a++; env->b++; } } } } } mp_sint32 PlayerIT::getenvval(TPrEnv *env,mp_sint32 n) { if (env->isEnabled()) { mp_sint32 step = env->step; if (step > env->envstruc->env[env->b][0]) step = env->envstruc->env[env->b][0]; mp_sint32 dx = (env->envstruc->env[env->b][0]-env->envstruc->env[env->a][0]); if (dx==0) dx=1; mp_sint32 t = (env->envstruc->env[env->b][0]-step)*65536/dx; mp_sint32 y0 = env->envstruc->env[env->a][1]; mp_sint32 y1 = env->envstruc->env[env->b][1]; mp_sint32 y = (y0*t)+(y1*(65536-t)); return y>>16; } return n; } mp_sint32 PlayerIT::getFinalPeriod(TChnState& state, mp_sint32 p) { mp_sint32 envVib = 0; p<<=8; if (state.vibenv.isEnabled()) { mp_sint32 eval = (getenvval(&state.vibenv,128)-128) << (state.vibenv.envstruc->type>>6); // AMS doc says vibrato with amplify set to 8 equals vibrato 0xF // => alright envVib = (eval*61408)>>(3+16-8); } if (state.avibused & 127) { // if this is XM style auto vibrato, the running counter is divided by 4 mp_ubyte vp = state.avibcnt >> ((state.avibused & 128) ? 0 : 2); mp_ubyte vd = state.avibdepth; mp_sint32 vm = 0; mp_sint32 vl = 0; switch (state.avibused & 127) { // sine case 1 : vl=vibtab[vp&31]; break; // square case 2 : vl=255; break; // ramp down case 3 : { vl=((vp&31)*539087)>>16; if ((vp&63)>31) vl=255-vl; vl=-vl; }; break; // ramp up case 4 : { vl=((vp&31)*539087)>>16; if ((vp&63)>31) vl=255-vl; }; break; } // IT style vibrato sweep if (state.avibused & 128) { if (state.avibsweep && state.avibswcnt < (vd << 8)) vm = (vl*state.avibswcnt)>>(1+8); else vm = (vl*vd)>>1; } // XM style vibrato sweep else { vm = (vl*vd)>>1; if (state.avibsweep) { vm*=(mp_sint32)state.avibswcnt * 256; vm/=state.avibsweep; vm>>=8; } } if ((vp&63)>31) vm=-vm; // IT style envelope and amiga periods? if (!(module->header.freqtab&1) && (state.avibused & 128)) { // vibrato value has 8 bit fractional part mp_uint32 vmi = vm >> 8; // convert fraction to 16 bit mp_uint32 vmf = (vm & 255) << 8; // table ranges from [-256..256] // elevate index to start by 0 mp_uint32 fac1 = powtab[vmi+256]; mp_uint32 fac2 = powtab[vmi+256+1]; // interpolate between two array values mp_uint32 fac = fixedmul(65536-vmf, fac1) + fixedmul(vmf, fac2); return (fixedmul(p<<8, fac)>>8) + envVib; // see ITTECH.TXT //double fac = pow(2.0, vm/(768.0*256.0)); //return (mp_sint32)(p*fac) + envVib; } // linear periods return (p+vm+envVib); } else return (p+envVib); } void PlayerIT::playInstrument(TModuleChannel* chnInf, bool bNoRestart/* = false*/) { const mp_sint32 ins = chnInf->getIns(); const mp_sint32 smp = chnInf->getSmp(); const mp_sint32 chn = chnInf->getPlaybackChannelIndex(); if (chn < 0 || !ins || ins > module->header.insnum) return; if (module->instr[ins-1].samp && smp != -1) { chnInf->resetFlag(CHANNEL_FLAGS_UPDATE_IGNORE); const mp_sint32 i = smp; // start out with the flags for 16bit sample mp_sint32 flags = ((module->smp[i].type&16)>>4)<<2; // add looping + backward flags flags |= module->smp[i].type&(3+128); // one shot forward looping? flags |= module->smp[i].type & 32; // force forward playing if (chnInf->isFlagSet(CHANNEL_FLAGS_FORCE_FORWARD)) flags &= ~128; // force backward playing if (chnInf->isFlagSet(CHANNEL_FLAGS_FORCE_BACKWARD)) flags |= 128; if (flags&3) { if (chnInf->isFlagSet(CHANNEL_FLAGS_FORCE_BILOOP)) flags = (flags & ~3) | 2; // bNoRestart = false means play new sample from beginning or sample offset if (!bNoRestart) { playSample(chn, (mp_sbyte*)module->smp[i].sample, module->smp[i].samplen, chnInf->smpoffs + chnInf->smpoffshigh, 0, // sample offset fraction !playModeChopSampleOffset, module->smp[i].loopstart, module->smp[i].loopstart+module->smp[i].looplen, flags); } // bNoRestart = true means play new sample from beginning of the last sample else { mp_sint32 smpoffset = chnInf->smpoffs ? (chnInf->smpoffs+chnInf->smpoffshigh) : getSamplePos(chn); mp_sint32 smpoffsetfrac = chnInf->smpoffs ? 0 : getSamplePosFrac(chn); playSample(chn, (mp_sbyte*)module->smp[i].sample, module->smp[i].samplen, smpoffset, smpoffsetfrac, // sample offset fraction true, module->smp[i].loopstart, module->smp[i].loopstart+module->smp[i].looplen, flags); } } else { // bNoRestart = false means play new sample from beginning or sample offset if (!bNoRestart) { playSample(chn,(mp_sbyte*)module->smp[i].sample, module->smp[i].samplen, chnInf->smpoffs + chnInf->smpoffshigh, 0, // sample offset fraction !playModeChopSampleOffset, 0, module->smp[i].samplen, flags); } // bNoRestart = true means play new sample from beginning of the last sample AND don't ramp volume up else { mp_sint32 smpoffset = chnInf->smpoffs ? (chnInf->smpoffs+chnInf->smpoffshigh) : getSamplePos(chn); mp_sint32 smpoffsetfrac = chnInf->smpoffs ? 0 : getSamplePosFrac(chn); playSample(chn,(mp_sbyte*)module->smp[i].sample, module->smp[i].samplen, smpoffset, smpoffsetfrac, // sample offset fraction true, 0, module->smp[i].samplen, flags); } } } else { stopSample(chn); } } void PlayerIT::updatePlayModeFlags() { // the following flags are exclusive newInsPTFlag = (module->header.flags & XModule::MODULE_PTNEWINSTRUMENT); newInsST3Flag = (module->header.flags & XModule::MODULE_ST3NEWINSTRUMENT); oldPTInsChangeFlag = (module->header.flags & XModule::MODULE_OLDPTINSTRUMENTCHANGE); // 4-channel Protracker module = EXACT PTK replay should be applied playModePT = ((module->header.flags & XModule::MODULE_PTNEWINSTRUMENT) && (module->header.channum == 4) && playMode == PlayMode_Auto) || (playMode == PlayMode_ProTracker2) || (playMode == PlayMode_ProTracker3); // This is a module with PTK limits playModePTPitchLimit = ((module->header.flags & XModule::MODULE_PTNEWINSTRUMENT) && playMode == PlayMode_Auto) || (playMode == PlayMode_ProTracker2) || (playMode == PlayMode_ProTracker3); // Override module playmode settings switch (playMode) { case PlayMode_ProTracker2: newInsPTFlag = true; newInsST3Flag = false; oldPTInsChangeFlag = true; break; case PlayMode_ProTracker3: newInsPTFlag = true; newInsST3Flag = false; oldPTInsChangeFlag = false; break; case PlayMode_ScreamTracker3: case PlayMode_ImpulseTracker: newInsPTFlag = false; newInsST3Flag = true; oldPTInsChangeFlag = false; break; case PlayMode_FastTracker2: newInsPTFlag = false; newInsST3Flag = false; oldPTInsChangeFlag = false; break; case PlayMode_Auto: break; } playModeFT2 = (playMode == PlayMode_FastTracker2 ? true : false); if (playMode == PlayMode_Auto && (module->header.flags & XModule::MODULE_XMARPEGGIO)) playModeFT2 = true; // Chop off samples which sample offsets greater sample length? playModeChopSampleOffset = playModeFT2 || (playMode == PlayMode_ProTracker3); } mp_sint32 PlayerIT::calcVibrato(TModuleChannel* chnInf, mp_sint32 effcnt, mp_sint32 depthShift/* = 5*/) { mp_sint32 vp = chnInf->vibpos[effcnt]; mp_sint32 vd = chnInf->vibdepth[effcnt]; mp_sint32 vm = (vibtab[vp&31]*vd) >> ((module->header.flags & XModule::MODULE_ITNEWEFFECTS) ? (depthShift+1) : depthShift); if ((vp&63)>31) vm=-vm; return vm; } void PlayerIT::doTickVolslidePT(TModuleChannel* chnInf, mp_sint32 effcnt) { mp_ubyte x = chnInf->old[effcnt].volslide>>4; mp_ubyte y = chnInf->old[effcnt].volslide&0xf; // 08/31/04: fixed... // don't reject volume slide if both operands are set // instead, slide up // see other volume slides as well if (x&&y) y = 0; if (ticker) { if (x) { chnInf->incVol(x*4); } if (y) { chnInf->decVol(y*4); } chnInf->adjustTremoloTremorVol(); } } void PlayerIT::doTickVolslideST(TModuleChannel* chnInf, mp_sint32 effcnt) { if (!(module->header.flags & XModule::MODULE_OLDS3MVOLSLIDES) && ticker == 0) return; mp_ubyte x = chnInf->old[effcnt].volslide>>4; mp_ubyte y = chnInf->old[effcnt].volslide&0xf; if (x == 0xF && y) return; if (y == 0xF && x) return; if (x && y) y = 0; if (x) { chnInf->incVol(x*4); } if (y) { chnInf->decVol(y*4); } chnInf->adjustTremoloTremorVol(); } void PlayerIT::doTickEffect(TModuleChannel* chnInf, mp_sint32 effcnt) { const mp_sint32 chn = chnInf->getPlaybackChannelIndex(); mp_ubyte x,y; mp_ubyte vp,vd; mp_sint32 vm; // IN PTK playmode, we've got a bunch of tick 0 effects // which are repeated as long as the pattern delay applies // ONLY valid for PTK playmode & effects, for other effects this leads to undefined results if (playModePT) { if (patDelay && ticker && // Those effects are NOT executed chnInf->eff[effcnt] > 0x09 && chnInf->eff[effcnt] != 0x33 && chnInf->eff[effcnt] != 0x34 && chnInf->eff[effcnt] != 0x35 && chnInf->eff[effcnt] != 0x36 && chnInf->eff[effcnt] != 0x37 && chnInf->eff[effcnt] != 0x38 && chnInf->eff[effcnt] < 0x3C) { if (!(ticker % tickSpeed)) doEffect(chnInf, effcnt); } } switch (chnInf->eff[effcnt]) { // portamento up case 0x01: if (ticker) { chnInf->decPer(chnInf->old[effcnt].portaup*4); handlePeriodUnderflow(chnInf); chnInf->adjustVibratoPer(); } break; // portamento down case 0x02: if (ticker) { chnInf->incPer(chnInf->old[effcnt].portadown*4); handlePeriodOverflow(chnInf); chnInf->adjustVibratoPer(); } break; // note portamento case 0x03: { if (ticker&&chnInf->destnote) { // If this is an XM module we need to store the last portamento operand always in the buffer for the second effect mp_sint32 op = ((module->header.flags & XModule::MODULE_XMPORTANOTEBUFFER) && numEffects == 2) ? chnInf->old[1].portanote : chnInf->old[effcnt].portanote; chnInf->slideToPer(op*4); chnInf->adjustVibratoPer(); } break; } // vibrato (applying extra hacks for XM compatibility) // In FT2 the vibrato contained in the volume column works a bit different // than the vibrato in the effect column: // After the vibrato has occured in the volumn column the pitch of the last // vibrato calculation stays on until the next pitch effect occurs case 0x04: { x = chnInf->eop[effcnt]>>4; y = chnInf->eop[effcnt]&0xf; mp_sint32 effNum = effcnt; // in FT2 play mode the last vibrato // value comes always from the effect column (index 1) if ((module->header.flags & XModule::MODULE_XMPORTANOTEBUFFER) && numEffects == 2) { effNum = 1; } if (x) chnInf->vibspeed[effNum]=x; if (y) chnInf->vibdepth[effNum]=y; mp_sint32 vmp = chnInf->getPer(); vm = calcVibrato(chnInf, effNum); if (ticker || (module->header.flags & XModule::MODULE_ITNEWEFFECTS)) chnInf->vibpos[effNum]+=chnInf->vibspeed[effNum]; vmp+=vm; mp_sint32 maxTicks = patDelay ? patDelayCount : tickSpeed; // the vibrato in the volumn volumn (index 0) works differently // before applying that, we assure that this is an XM module by checking // the module header if ((module->header.flags & XModule::MODULE_XMVOLCOLUMNVIBRATO) && ticker == maxTicks - 1) { if (!effcnt) chnInf->setFinalVibratoPer(vmp); else chnInf->adjustVibratoPer(); } if (chn >= 0) setFreq(chn,getFinalFreq(chnInf->chnstat(),getFinalPeriod(chnInf->chnstat(),vmp))); break; } // note porta + volume slide case 0x05: { if (ticker&&chnInf->destnote) { // If this is an XM module we need to store the last portamento operand always in the buffer for the second effect mp_sint32 op = (module->header.flags & XModule::MODULE_XMPORTANOTEBUFFER) ? chnInf->old[1].portanote : chnInf->old[effcnt].portanote; chnInf->slideToPer(op*4); chnInf->adjustVibratoPer(); } if (module->header.flags & XModule::MODULE_ST3DUALCOMMANDS) doTickVolslideST(chnInf, effcnt); else doTickVolslidePT(chnInf, effcnt); break; } // vibrato + volume slide case 0x06: { vm = calcVibrato(chnInf, effcnt); if (ticker) chnInf->vibpos[effcnt]+=chnInf->vibspeed[effcnt]; if (chn >= 0) setFreq(chn,getFinalFreq(chnInf->chnstat(),getFinalPeriod(chnInf->chnstat(),chnInf->getPer()+vm))); if (module->header.flags & XModule::MODULE_ST3DUALCOMMANDS) doTickVolslideST(chnInf, effcnt); else doTickVolslidePT(chnInf, effcnt); break; } // tremolo, this is not the exact FT2 way. FT2 way doesn't make sense at all, fuck it // (applying extra hacks for XM compatibility) case 0x07: { x = chnInf->eop[effcnt]>>4; y = chnInf->eop[effcnt]&0xf; if (x) chnInf->trmspeed[effcnt]=x; if (y) chnInf->trmdepth[effcnt]=y; vp = chnInf->trmpos[effcnt]; vd = chnInf->trmdepth[effcnt]; mp_sint32 vmp = playModeFT2 ? (ticker == 0 ? chnInf->getVolume() : chnInf->getTremoloVol()) : chnInf->getVolume(); // IT in new effects mode processes at non row tick if (ticker || (module->header.flags & XModule::MODULE_ITNEWEFFECTS)) { // IT in new effects mode is two times finer vm = (vibtab[vp&31]*vd) >> ((module->header.flags & XModule::MODULE_ITNEWEFFECTS) ? (6-1) : (6-2)); if ((vp&63)>31) vm=-vm; vmp+=vm; if (vmp<0) vmp=0; if (vmp>255) vmp=255; chnInf->trmpos[effcnt]+=chnInf->trmspeed[effcnt]; } // FT2 hack... final tremolo volume stays on if (playModeFT2 && (ticker == tickSpeed - 1)) { chnInf->setFinalTremVol(vmp); } if (chn >= 0) setVol(chn, getFinalVolume(chnInf->chnstat(), vmp, mainVolume)); break; } // volume slide case 0x0A: { doTickVolslidePT(chnInf, effcnt); break; } // global volume slide case 0x11: { x = chnInf->old[effcnt].gvolslide>>4; y = chnInf->old[effcnt].gvolslide&0xf; if (x&&y) y = 0; if (ticker) { if (x) { mainVolume+=x*4; if (mainVolume>255) mainVolume=255; } if (y) { mainVolume-=y*4; if (mainVolume<0) mainVolume=0; } } break; } // deal with eventual tempo slide case 0x16: { if (!ticker || chnInf->old[effcnt].temposlide >= 0x20 || !(module->header.flags & XModule::MODULE_ITTEMPOSLIDE)) break; x = chnInf->old[effcnt].temposlide>>4; y = chnInf->old[effcnt].temposlide&0xf; switch (x >> 4) { case 0: bpm-=y & 0x0F; if (bpm < 32) bpm = 32; break; case 1: bpm+=y & 0x0F; if (bpm > 255) bpm = 255; break; } this->adder = getbpmrate(bpm); break; } // panning slide case 0x19: { x = chnInf->old[effcnt].panslide>>4; y = chnInf->old[effcnt].panslide&0xf; if (x&&y) y = 0; if (ticker) { if (x) { chnInf->incPan(x); } if (y) { chnInf->decPan(y); } } break; } // retrig + volslide (I worked my ass OFF on this fucking shit) // A few notes about FT2 playback: // Rxx Retrig doesn't restart envelopes, even with instrument set // It only retrigs if the last note has been been within valid range: 1 <= note <= XModule::NOTE_LAST case 0x1B: { if ((chnInf->old[effcnt].retrig&0xf)) { if (chnInf->retrigcounterRxx[effcnt] >= chnInf->retrigmaxRxx[effcnt]) { chnInf->retrigcounterRxx[effcnt] = 0; chnInf->retrigmaxRxx[effcnt] = chnInf->old[effcnt].retrig&0xf; switch (chnInf->old[effcnt].retrig>>4) { case 0x1 : chnInf->decVol(4); break; case 0x2 : chnInf->decVol(8); break; case 0x3 : chnInf->decVol(16); break; case 0x4 : chnInf->decVol(32); break; case 0x5 : chnInf->decVol(64); break; case 0x6 : chnInf->setVol(chnInf->getVol()*2/3); break; case 0x7 : chnInf->setVol(chnInf->getVol()>>1); break; case 0x9 : chnInf->incVol(4); break; case 0xA : chnInf->incVol(8); break; case 0xB : chnInf->incVol(16); break; case 0xC : chnInf->incVol(32); break; case 0xD : chnInf->incVol(64); break; case 0xE : { mp_sint32 vol = (chnInf->getVol()*3) >> 1; if (vol > 255) vol = 255; chnInf->setVol(vol); break; } case 0xF : { mp_sint32 vol = chnInf->getVol() << 1; if (vol > 255) vol = 255; chnInf->setVol(vol); break; } } chnInf->adjustTremoloTremorVol(); if (chnInf->validnote) playInstrument(chnInf); } chnInf->retrigcounterRxx[effcnt]++; } break; } // tremor (I worked my ass OFF on this fucking shit) case 0x1D: { x = (chnInf->old[effcnt].tremor>>4) + 1; y = (chnInf->old[effcnt].tremor&0xf) + 1; mp_sint32 v = (ticker == 0 ? chnInf->getVol() : chnInf->getTremorVol()); if (ticker && chnInf->tremorcnt[effcnt] % (x+y) >= x) v = 0; if (ticker) chnInf->tremorcnt[effcnt]++; if (ticker == tickSpeed - 1) { chnInf->setVol(v); chnInf->adjustTremoloVol(); } if (chn >= 0) setVol(chn,getFinalVolume(chnInf->chnstat(), v, mainVolume)); break; } // MDL/IT Subcommands case 0x1E: { mp_ubyte eff = chnInf->eop[effcnt]>>4; mp_ubyte eop = chnInf->eop[effcnt]&0xf; switch (eff) { case 0x1 : if (ticker) { chnInf->decPan(eop); } break; case 0x2 : if (ticker) { chnInf->incPan(eop); } break; case 0xA : if (ticker) { mainVolume+=eop; if (mainVolume>255) mainVolume=255; } break; case 0xB : if (ticker) { mainVolume-=eop; if (mainVolume<0) mainVolume=0; } break; } break; } // arpeggio case 0x20: { if (chnInf->getNote()) { mp_ubyte arpegLUT[3]; mp_sint32 r = 0; mp_sint32 note = 0, onote = chnInf->getNote(); //mp_sint32 c4spd = chnInf->c4spd; mp_sint32 relnote = chnInf->getRelnote(); mp_sint32 finetune = chnInf->getFinetune(); mp_sint32 per,nper; mp_ubyte eop = chnInf->old[effcnt].arpeg; mp_sint32 x = eop>>4; mp_sint32 y = eop&0xf; if (playModeFT2) { // dammit, FT2 arpeggios are so screwed: // the first 11 tick speeds and their arpeggio patterns (0 is note, 3 is fx digit 3, 2 is fx digit 2): // 0: Totally fucked up. Just test it. // 1: 0 // 2: 02 // 3: 032 // 4: 0032 // 5: 02320 // 6: 032032 // 7: 0032032 // 8: 02032032 // 9: 032032032 // A: 0032032032 if (ticker == 0) r = 0; else r = myMod(ticker-tickSpeed,3); arpegLUT[0] = 0; arpegLUT[1] = 2; arpegLUT[2] = 1; } else { r = (ticker)%3; arpegLUT[0] = 0; arpegLUT[1] = 1; arpegLUT[2] = 2; } if (arpegLUT[r] == 0) { note=chnInf->getNote(); } else if (arpegLUT[r] == 1) { note=chnInf->getNote()+x; } else if (arpegLUT[r] == 2) { note=chnInf->getNote()+y; } // Perform note clipping for XM note range if necessary if ((arpegLUT[r] != 0) && // Only done for arpeggio tick 1 & 2 (module->header.flags & XModule::MODULE_XMNOTECLIPPING) && // Only when enabled (note + relnote > 96)) // Only when exceeding range { note-=((note+relnote) - 97); } // special case for STM arpeggio (thanks to Skaven/FC) // Will not work in combination with other period // related effects if (module->header.flags & XModule::MODULE_STMARPEGGIO) { chnInf->setPer(getperiod(note,relnote,finetune)); if (chn >= 0) setFreq(chn,getFinalFreq(chnInf->chnstat(),getFinalPeriod(chnInf->chnstat(),chnInf->getPer()))); } else { nper=getperiod(note,relnote,finetune); per=getperiod(onote,relnote,finetune); //nper = (8363*periods[(note-1)%12]*16>>(((note-1)/12)))/c4spd; //per = (8363*periods[(onote-1)%12]*16>>(((onote-1)/12)))/c4spd; nper-=per; nper+=chnInf->getPer(); if (chn >= 0) setFreq(chn,getFinalFreq(chnInf->chnstat(),getFinalPeriod(chnInf->chnstat(),nper))); } } break; } // normal retrig // A few notes about FT2 playback: // E9x Retrig does!!! (while Rxx doesn't) restart envelopes, even without instrument set // It only retrigs if the last note has been been within valid range: 1 <= note <= XModule::NOTE_LAST case 0x39: { if ((chnInf->eop[effcnt]&0xf) && ticker) { if (chnInf->retrigcounterE9x[effcnt] >= chnInf->retrigmaxE9x[effcnt]) { chnInf->retrigcounterE9x[effcnt] = 0; chnInf->retrigmaxE9x[effcnt] = chnInf->eop[effcnt]&0xf; // trigger envelopes ALWAYS triggerInstrumentFX(chnInf); chnInf->setKeyon(true); // trigger replay only when last note has been valid if (chnInf->validnote) playInstrument(chnInf); } chnInf->retrigcounterE9x[effcnt]++; } break; } // note cut case 0x3C: // S3M ignores tick 0 note cut if ((module->header.flags & XModule::MODULE_ST3NOTECUT) && !chnInf->eop[effcnt]) break; // Fasttracker cuts note at tick 0 //if (chnInf->eop[effcnt]) { if (ticker == chnInf->eop[effcnt]) { chnInf->setVol(0); chnInf->adjustTremoloTremorVol(); } //} break; // MDL porta up case 0x43: if (ticker) { if (chnInf->old[effcnt].portaup<=0xDF) { chnInf->decPer(chnInf->old[effcnt].portaup*4); handlePeriodUnderflow(chnInf); chnInf->adjustVibratoPer(); } } break; // MDL porta down case 0x44: if (ticker) { if (chnInf->old[effcnt].portaup<=0xDF) { chnInf->incPer(chnInf->old[effcnt].portaup*4); handlePeriodOverflow(chnInf); chnInf->adjustVibratoPer(); } } break; // MDL volslide up case 0x45: if (ticker) { if (chnInf->old[effcnt].volslide<=0xDF) { chnInf->incVol(chnInf->old[effcnt].volslide); chnInf->adjustTremoloTremorVol(); } } break; // MDL volslide down case 0x46: if (ticker) { if (chnInf->old[effcnt].volslide<=0xDF) { chnInf->decVol(chnInf->old[effcnt].volslide); chnInf->adjustTremoloTremorVol(); } } break; // S3M porta up case 0x47: if (ticker) { const mp_sint32 effidx = ((module->header.flags & XModule::MODULE_XMPORTANOTEBUFFER) && numEffects == 2) ? 1 : effcnt; mp_ubyte* op = (module->header.flags & XModule::MODULE_ITLINKPORTAMEM) ? &chnInf->old[effidx].portanote : &chnInf->old[effidx].portaup; if (*op<=0xDF) { chnInf->decPer(*op*4); // Special for ST3 if (chnInf->getPer() <= 0 && chn >= 0) stopSample(chn); chnInf->adjustVibratoPer(); } } break; // S3M porta down case 0x48: if (ticker) { const mp_sint32 effidx = ((module->header.flags & XModule::MODULE_XMPORTANOTEBUFFER) && numEffects == 2) ? 1 : effcnt; mp_ubyte* op = (module->header.flags & XModule::MODULE_ITLINKPORTAMEM) ? &chnInf->old[effidx].portanote : &chnInf->old[effidx].portaup; if (*op<=0xDF) { chnInf->incPer(*op*4); chnInf->adjustVibratoPer(); } } break; // S3M volslide case 0x49: { doTickVolslideST(chnInf, effcnt); break; } // fine vibrato case 0x4A: { x = chnInf->eop[effcnt]>>4; y = chnInf->eop[effcnt]&0xf; if (x) chnInf->vibspeed[effcnt]=x; if (y) chnInf->vibdepth[effcnt]=y; mp_sint32 vmp = chnInf->getPer(); vm = calcVibrato(chnInf, effcnt, 7); vp = chnInf->vibpos[effcnt]; if (ticker || (module->header.flags & XModule::MODULE_ITNEWEFFECTS)) chnInf->vibpos[effcnt]+=chnInf->vibspeed[effcnt]; vmp+=vm; if (chn >= 0) setFreq(chn,getFinalFreq(chnInf->chnstat(),getFinalPeriod(chnInf->chnstat(),vmp))); break; } // high precision portamento up case 0x4D: if (ticker) { chnInf->decPer(chnInf->old[effcnt].portaup); handlePeriodUnderflow(chnInf); chnInf->adjustVibratoPer(); } break; // high precision portamento down case 0x4E: if (ticker) { chnInf->incPer(chnInf->old[effcnt].portaup); handlePeriodOverflow(chnInf); chnInf->adjustVibratoPer(); } break; // XM: Key off at tick case 0x14: // not at tick 0 if (!ticker) break; // AMS: Key off at tick case 0x51: if (ticker == chnInf->eop[effcnt]) { if (chnInf->getVenv().envstruc!=NULL) { if (!chnInf->getVenv().isEnabled()) chnInf->setVol(0); } else chnInf->setVol(0); chnInf->adjustTremoloTremorVol(); chnInf->setKeyon(false); } break; // Oktalyzer arpeggio I, II, III case 0x56: case 0x57: case 0x58: { if (chnInf->getNote()) { mp_sint32 eff = chnInf->eff[effcnt]-0x56; mp_sint32 r; if (eff == 1) r = (ticker)&3; else r = (ticker)%3; mp_sint32 note = 0,onote = chnInf->getNote(); mp_sint32 relnote = chnInf->getRelnote(); mp_sint32 finetune = chnInf->getFinetune(); mp_sint32 per,nper; mp_ubyte eop = chnInf->eop[effcnt]; mp_sint32 x = eop>>4; mp_sint32 y = eop&0xf; switch (eff) { case 0x00: { switch (r) { case 0 : note=chnInf->getNote()-x; break; case 1 : note=chnInf->getNote(); break; case 2 : note=chnInf->getNote()+y; break; } break; } case 0x01: { switch (r) { case 0 : note=chnInf->getNote(); break; case 1 : note=chnInf->getNote()+y; break; case 2 : note=chnInf->getNote(); break; case 3 : note=chnInf->getNote()-x; break; } break; } case 0x02: { switch (r) { case 0 : note=chnInf->getNote()+y; break; case 1 : note=chnInf->getNote()+y; break; case 2 : note=chnInf->getNote(); break; } break; } } nper=getperiod(note,relnote,finetune); per=getperiod(onote,relnote,finetune); nper-=per; nper+=chnInf->getPer(); if (chn >= 0) setFreq(chn,getFinalFreq(chnInf->chnstat(),getFinalPeriod(chnInf->chnstat(),nper))); } break; } // Global volslide case 0x59: { if (!(module->header.flags & XModule::MODULE_OLDS3MVOLSLIDES) && ticker == 0) break; x = chnInf->old[effcnt].gvolslide>>4; y = chnInf->old[effcnt].gvolslide&0xf; if (x == 0xF && y) break; if (y == 0xF && x) break; if (x && y) y = 0; if (x) { // IT modules increment by 2, all others by 4 mainVolume+=x*((module->header.flags & XModule::MODULE_ITNOTEOFF) ? 2 : 4); if (mainVolume>255) mainVolume=255; } if (y) { // IT modules decrement by 2, all others by 4 mainVolume-=y*((module->header.flags & XModule::MODULE_ITNOTEOFF) ? 2 : 4); if (mainVolume<0) mainVolume=0; } break; } // IT/S3M Channel volslide case 0x5A: { if (!(module->header.flags & XModule::MODULE_OLDS3MVOLSLIDES) && ticker == 0) break; x = chnInf->old[effcnt].chnvolslide>>4; y = chnInf->old[effcnt].chnvolslide&0xf; if (x == 0xF && y) break; if (y == 0xF && x) break; if (x && y) y = 0; if (x) { chnInf->incMasterVol(x*4); } if (y) { chnInf->decMasterVol(y*4); } break; } // IT panning slide case 0x5B: { if (!(module->header.flags & XModule::MODULE_OLDS3MVOLSLIDES) && ticker == 0) break; x = chnInf->old[effcnt].panslide>>4; y = chnInf->old[effcnt].panslide&0xf; if (x == 0xF && y) break; if (y == 0xF && x) break; if (x && y) y = 0; if (x) { chnInf->decPan(x*4); } if (y) { chnInf->incPan(y*4); } break; } // panbrello (Impulse Tracker only) case 0x5C: { x = chnInf->eop[effcnt]>>4; y = chnInf->eop[effcnt]&0xf; if (x) chnInf->panbrellospeed[effcnt]=x; if (y) chnInf->panbrellodepth[effcnt]=y; vp = chnInf->panbrellopos[effcnt]; vd = chnInf->panbrellodepth[effcnt]; mp_sint32 vmp = chnInf->getPan(); // IT in new effects mode processes at non row tick if (ticker || (module->header.flags & XModule::MODULE_ITNEWEFFECTS)) { // IT in new effects mode is two times finer vm = (finesintab[vp&255]*vd) >> ((module->header.flags & XModule::MODULE_ITNEWEFFECTS) ? (3-1) : (3-2)); vmp+=vm; if (vmp<0) vmp=0; if (vmp>255) vmp=255; chnInf->panbrellopos[effcnt]+=chnInf->panbrellospeed[effcnt]; } if (chn >= 0) setPan(chn, getFinalPanning(chnInf->chnstat(), vmp)); break; } } } void PlayerIT::doVolslidePT(TModuleChannel* chnInf, mp_sint32 effcnt, mp_ubyte eop) { if (eop) chnInf->old[effcnt].volslide=eop; } void PlayerIT::doVolslideST(TModuleChannel* chnInf, mp_sint32 effcnt, mp_ubyte eop) { if (eop) chnInf->old[effcnt].volslide=eop; if (chnInf->old[effcnt].volslide) { mp_ubyte y=chnInf->old[effcnt].volslide>>4; mp_ubyte x=chnInf->old[effcnt].volslide&0xf; if ((x!=0x0F)&&(y!=0x0F)) return; if (x==0x0F && !y) return; if (y==0x0F && !x) return; if (x==0x0F) { chnInf->incVol(y*4); chnInf->adjustTremoloTremorVol(); return; } if (y==0x0F) { chnInf->decVol(x*4); chnInf->adjustTremoloTremorVol(); return; } } } void PlayerIT::doEffect(TModuleChannel* chnInf, mp_sint32 effcnt) { const mp_sint32 chn = chnInf->getPlaybackChannelIndex(); mp_ubyte x,y; mp_sint32 eop=chnInf->eop[effcnt]; switch (chnInf->eff[effcnt]) { case 0x01 : if (eop) chnInf->old[effcnt].portaup=eop; break; case 0x02 : if (eop) chnInf->old[effcnt].portadown=eop; break; case 0x03 : if (module->header.flags & XModule::MODULE_XMPORTANOTEBUFFER) { ASSERT(numEffects >= 2); if (eop) chnInf->old[1].portanote=eop; } else { if (eop) chnInf->old[effcnt].portanote=eop; } break; case 0x05 : case 0x06 : { if (module->header.flags & XModule::MODULE_ST3DUALCOMMANDS) doVolslideST(chnInf, effcnt, eop); else doVolslidePT(chnInf, effcnt, eop); break; } case 0x08 : if (options[PlayModeOptionPanning8xx]) chnInf->setPan(eop); break; case 0x09 : { if (eop) chnInf->old[effcnt].smpoffset = eop; chnInf->smpoffs = chnInf->old[effcnt].smpoffset<<8; }; break; case 0x0A : doVolslidePT(chnInf, effcnt, eop); break; case 0x0B : { pjump = 1; pjumppos = eop; pjumprow = 0; pjumpPriority = MP_NUMEFFECTS*chnInf->channelIndex + effcnt; }; break; case 0x0C : chnInf->setVol(eop); chnInf->adjustTremoloTremorVol(); chnInf->hasSetVolume = true; break; case 0x0D : { pbreak=1; pbreakpos = (eop>>4)*10+(eop&0xf); if (pbreakpos > 63) pbreakpos = 0; pbreakPriority = MP_NUMEFFECTS*chnInf->channelIndex + effcnt; }; break; case 0x0F : { if (eop) { if (eop>=32) { bpm=eop; this->adder = getbpmrate(eop); } } else { haltFlag = true; } }; break; case 0x10 : mainVolume=eop; break; case 0x11 : if (eop) chnInf->old[effcnt].gvolslide=eop; break; // set envelope position case 0x15 : { if (chnInf->getVenv().envstruc == NULL) break; bool bSet = false; TPrEnv* env = &chnInf->getVenv(); for (mp_sint32 i = 0; i < env->envstruc->num-1; i++) { if (eop >= env->envstruc->env[i][0] && eop < env->envstruc->env[i+1][0]) { env->a = i; env->b = i+1; env->step = eop; bSet = true; break; } } if (!bSet) { // if position is beyond the last envelope point // we limit it to the last point and exit bool beyond = eop > env->envstruc->env[env->envstruc->num-1][0]; env->a = env->envstruc->num-1; env->b = env->envstruc->num; env->step = env->envstruc->env[env->envstruc->num-1][0]; if (beyond) break; } // check if we set envelope position to a loop end point // in that case wrap to the loop start, otherwise the loop // end is skipped and the envelope will roll out without // looping if ((env->envstruc->type & 4) && env->step == env->envstruc->env[env->envstruc->loope][0]) { env->a=env->envstruc->loops; env->b=env->envstruc->loops+1; env->step=env->envstruc->env[env->a][0]; } break; } // set BPM case 0x16 : { if (eop) { chnInf->old[effcnt].temposlide = eop; if ((module->header.flags & XModule::MODULE_ITTEMPOSLIDE) && eop < 0x20) break; bpm=eop; this->adder = getbpmrate(eop); } }; break; case 0x19 : if (eop) chnInf->old[effcnt].panslide=eop; break; case 0x1B : { x = eop & 0xf; y = eop & 0xF0; if (x) chnInf->old[effcnt].retrig = (chnInf->old[effcnt].retrig & 0xF0) | x; if (y) chnInf->old[effcnt].retrig = (chnInf->old[effcnt].retrig & 0x0F) | y; eop = chnInf->old[effcnt].retrig; chnInf->retrigmaxRxx[effcnt] = eop & 0xF; // Simulate really nasty FT2 bug: // When a volume is set in the volume column // the interval for the first retrig is lengthen by one tick if (chnInf->hasSetVolume && playModeFT2) { chnInf->retrigcounterRxx[effcnt] = -1; chnInf->hasSetVolume = false; } // If a note is playing on tick 0, increase counter if (chnInf->currentnote && chnInf->validnote) chnInf->retrigcounterRxx[effcnt]++; break; } // Tremor case 0x1D : if (eop) chnInf->old[effcnt].tremor=eop; break; // MDL/IT Subcommands case 0x1E: { mp_ubyte eff = chnInf->eop[effcnt] >> 4; mp_ubyte eop = chnInf->eop[effcnt] & 0xf; switch (eff) { // past note actions/envelope trigger control etc. case 0x7: { switch (eop) { case 0x0: case 0x1: case 0x2: handlePastNoteAction(chnInf, eop); break; // set NNA to cut/continue/note off/note fade case 0x3: case 0x4: case 0x5: case 0x6: // clear out bits 4 and 5 // shift new NNA value into the position chnInf->setInsflags((chnInf->getInsflags() & ~(3 << 4)) | ((eop-0x03) << 4)); break; // turn off volume envelope case 0x7: chnInf->getVenv().setEnabled(false); break; // turn on volume envelope case 0x8: chnInf->getVenv().setEnabled(true); break; // turn off panning envelope case 0x9: chnInf->getPenv().setEnabled(false); break; // turn on panning envelope case 0xA: chnInf->getPenv().setEnabled(true); break; // turn off pitch envelope case 0xB: chnInf->getPitchenv().setEnabled(false); break; // turn on pitch envelope case 0xC: chnInf->getPitchenv().setEnabled(true); break; } break; } // set high sample offset case 0xF: { chnInf->smpoffshigh = (mp_uint32)eop << 16; break; } } break; } // MDL set sample offset case 0x1F : { chnInf->smpoffs=((mp_sint32)eop<<8)+((mp_sint32)chnInf->eop[(effcnt+1)%numEffects]<<16); }; break; case 0x20 : if (eop) chnInf->old[effcnt].arpeg=eop; break; // ULT set sample offset case 0x21 : { chnInf->smpoffs=((mp_sint32)eop<<10); }; break; // ULT Fine set sample offset case 0x22 : { mp_sint32 op = (((mp_sint32)eop)<<8) + ((mp_sint32)chnInf->eop[(effcnt+1)%numEffects]); chnInf->smpoffs=op<<2; }; break; // ULT special commands case 0x23 : { if (((eop >> 4) == 1 || (eop&0xF) == 1) || ((eop >> 4) == 12 || (eop&0xF) == 12)) { if (chn < 0) break; breakLoop(chn); } if ((eop >> 4) == 2 || (eop&0xF) == 2) { chnInf->resetFlag(CHANNEL_FLAGS_FORCE_FORWARD); chnInf->setFlag(CHANNEL_FLAGS_FORCE_BACKWARD); if (chn < 0) break; setBackward(chn); } }; break; // Far position jump (PLM support) case 0x2B : { pjump = 1; pjumppos = eop; pjumprow = chnInf->eop[(effcnt+1)%numEffects]; pjumpPriority = MP_NUMEFFECTS*chnInf->channelIndex + effcnt; }; break; // Fine porta up case 0x31 : { if (eop) chnInf->old[effcnt].fineportaup=eop; chnInf->decPer(chnInf->old[effcnt].fineportaup*4); handlePeriodUnderflow(chnInf); chnInf->adjustVibratoPer(); }; break; // Fine porta down case 0x32 : { if (eop) chnInf->old[effcnt].fineportadown=eop; chnInf->incPer(chnInf->old[effcnt].fineportadown*4); handlePeriodOverflow(chnInf); chnInf->adjustVibratoPer(); }; break; case 0x36 : { mp_ubyte op = eop; // Imitate IT/ST3 behaviour // not only S60 can be the loop start point // if we jump back to the start row, ignore the argument of this S6x if (newInsST3Flag && (chnInf->loopstart==rowcnt) && chnInf->isLooping) op = 0; if (!op) { chnInf->execloop=0; chnInf->loopstart=rowcnt; chnInf->loopingValidPosition = poscnt; } else { if (chnInf->loopcounter==op) { // Imitate nasty XM bug here: if (playModeFT2) { startNextRow = chnInf->loopstart; } RESETLOOPING // Imitate IT/ST3 behaviour // not only S60 can be the loop start point if (newInsST3Flag) { chnInf->execloop=0; chnInf->loopstart=rowcnt; chnInf->loopingValidPosition = poscnt; } } else { chnInf->execloop=1; chnInf->loopcounter++; } } }; break; case 0x38 : if (options[PlayModeOptionPanningE8x]) chnInf->setPan((mp_ubyte)XModule::pan15to255(eop)); break; case 0x39 : { chnInf->retrigcounterE9x[effcnt] = 0; if (eop) { chnInf->retrigmaxE9x[effcnt] = eop & 0xF; // If a note is playing on tick 0, increase counter if (chnInf->currentnote && chnInf->validnote) chnInf->retrigcounterE9x[effcnt]++; } else if (!chnInf->currentnote) { // trigger envelopes ALWAYS triggerInstrumentFX(chnInf); chnInf->setKeyon(true); // trigger replay only when last note has been valid if (chnInf->validnote) playInstrument(chnInf); } }; break; case 0x3A : { if (eop) chnInf->old[effcnt].finevolslide=eop; chnInf->incVol(chnInf->old[effcnt].finevolslide*4); chnInf->adjustTremoloTremorVol(); }; break; case 0x3B : { if (eop) chnInf->old[effcnt].finevolslide=eop; chnInf->decVol(chnInf->old[effcnt].finevolslide*4); chnInf->adjustTremoloTremorVol(); }; break; // Note delay triggers envelopes/autovibrato/fade out again case 0x3D : { triggerInstrumentFX(chnInf); chnInf->setKeyon(true); }; break; case 0x3E : { patDelay = true; patDelayCount = (mp_sint32)tickSpeed*((mp_sint32)eop+1); }; break; // Xtra fine porta up case 0x41 : { if (eop) chnInf->old[effcnt].xfineportaup=eop; chnInf->decPer(chnInf->old[effcnt].xfineportaup); handlePeriodUnderflow(chnInf); chnInf->adjustVibratoPer(); }; break; case 0x42 : { if (eop) chnInf->old[effcnt].xfineportadown=eop; chnInf->incPer(chnInf->old[effcnt].xfineportadown); handlePeriodOverflow(chnInf); chnInf->adjustVibratoPer(); }; break; // MDL fine portas up case 0x43 : { if (eop) chnInf->old[effcnt].portaup=eop; if (chnInf->old[effcnt].portaup>=0xE0) { y=chnInf->old[effcnt].portaup>>4; x=chnInf->old[effcnt].portaup&0xf; switch (y) { case 0xF: chnInf->decPer(x*4); handlePeriodUnderflow(chnInf); chnInf->adjustVibratoPer(); break; case 0xE: chnInf->decPer(x>>1); handlePeriodUnderflow(chnInf); chnInf->adjustVibratoPer(); break; } } }; break; case 0x44 : { if (eop) chnInf->old[effcnt].portaup=eop; if (chnInf->old[effcnt].portaup>=0xE0) { y=chnInf->old[effcnt].portaup>>4; x=chnInf->old[effcnt].portaup&0xf; switch (y) { case 0xF : chnInf->incPer(x*4); handlePeriodOverflow(chnInf); chnInf->adjustVibratoPer(); break; case 0xE : chnInf->incPer(x>>1); handlePeriodOverflow(chnInf); chnInf->adjustVibratoPer(); break; } } }; break; case 0x45 : { if (eop) chnInf->old[effcnt].volslide=eop; if (chnInf->old[effcnt].volslide>=0xE0) { y=chnInf->old[effcnt].volslide>>4; x=chnInf->old[effcnt].volslide&0xf; switch (y) { case 0xF : chnInf->incVol(x*4); chnInf->adjustTremoloTremorVol(); break; case 0xE : chnInf->incVol(x); chnInf->adjustTremoloTremorVol(); break; } } } break; case 0x46 : { if (eop) chnInf->old[effcnt].volslide=eop; if (chnInf->old[effcnt].volslide>=0xE0) { y=chnInf->old[effcnt].volslide>>4; x=chnInf->old[effcnt].volslide&0xf; switch (y) { case 0xF : chnInf->decVol(x*4); chnInf->adjustTremoloTremorVol(); break; case 0xE : chnInf->decVol(x); chnInf->adjustTremoloTremorVol(); break; } } }; break; // S3M porta up case 0x47 : { // when MODULE_XMPORTANOTEBUFFER is set // we link all effects to the second effect memory const mp_sint32 effidx = ((module->header.flags & XModule::MODULE_XMPORTANOTEBUFFER) && numEffects == 2) ? 1 : effcnt; mp_ubyte* op = (module->header.flags & XModule::MODULE_ITLINKPORTAMEM) ? &chnInf->old[effidx].portanote : &chnInf->old[effidx].portaup; if (eop) *op=eop; if (*op>=0xE0) { y=*op>>4; x=*op&0xf; switch (y) { case 0xF: chnInf->decPer(x*4); // Special for ST3 if (chnInf->getPer() <= 0 && chn >= 0) stopSample(chn); chnInf->adjustVibratoPer(); break; case 0xE: chnInf->decPer(x); // Special for ST3 if (chnInf->getPer() <= 0 && chn >= 0) stopSample(chn); chnInf->adjustVibratoPer(); break; } } }; break; // S3M porta down case 0x48 : { // when MODULE_XMPORTANOTEBUFFER is set // we link all effects to the second effect memory const mp_sint32 effidx = ((module->header.flags & XModule::MODULE_XMPORTANOTEBUFFER) && numEffects == 2) ? 1 : effcnt; mp_ubyte* op = (module->header.flags & XModule::MODULE_ITLINKPORTAMEM) ? &chnInf->old[effidx].portanote : &chnInf->old[effidx].portaup; if (eop) *op=eop; if (*op>=0xE0) { y=*op>>4; x=*op&0xf; switch (y) { case 0xF : chnInf->incPer(x*4); handlePeriodOverflow(chnInf); chnInf->adjustVibratoPer(); break; case 0xE : chnInf->incPer(x); handlePeriodOverflow(chnInf); chnInf->adjustVibratoPer(); break; } } }; break; // S3M volslide case 0x49 : doVolslideST(chnInf, effcnt, eop); break; // extra fine volslide up (PSM support) case 0x4B : { if (eop) chnInf->old[effcnt].finevolslide=eop; chnInf->incVol(chnInf->old[effcnt].finevolslide); chnInf->adjustTremoloTremorVol(); }; break; // extra fine volslide down (PSM support) case 0x4C : { if (eop) chnInf->old[effcnt].finevolslide=eop; chnInf->decVol(chnInf->old[effcnt].finevolslide); chnInf->adjustTremoloTremorVol(); }; break; // high precision porta up (PSM support) // same as 0x01 but 4x more accurate case 0x4D : if (eop) chnInf->old[effcnt].portaup=eop; break; // high precision porta down (PSM support) // same as 0x02 but 4x more accurate case 0x4E : if (eop) chnInf->old[effcnt].portaup=eop; break; // AMS: Set sampleflags case 0x4F : if (!eop) { chnInf->resetFlag(CHANNEL_FLAGS_FORCE_BACKWARD); chnInf->setFlag(CHANNEL_FLAGS_FORCE_FORWARD); if (chn < 0) break; setForward(chn); } else if (eop == 1) { chnInf->resetFlag(CHANNEL_FLAGS_FORCE_FORWARD); chnInf->setFlag(CHANNEL_FLAGS_FORCE_BACKWARD); if (chn < 0) break; setBackward(chn); } else if (eop == 2) { chnInf->setFlag(CHANNEL_FLAGS_FORCE_BILOOP); } else if (eop == 3) // break sampleloop / oktalyzer too { if (chn < 0) break; breakLoop(chn); } break; // AMS: Set channel mastervol case 0x50 : chnInf->setMasterVol(eop); break; // Digibooster set real BPM case 0x52 : { if (eop) { baseBpm = eop >= 32 ? eop : 32; // Simply recalculate this->adder = getbpmrate(bpm); } break; } // Oktalyzer: fine note slide down case 0x54: { if (chnInf->getNote() > eop) { mp_sint32 note = chnInf->getNote(); note-=eop; if (note < 3*12) note = 3*12; chnInf->setNote(note); chnInf->setPer(getperiod(chnInf->getNote(),chnInf->getRelnote(),chnInf->getFinetune())); chnInf->adjustVibratoPer(); } } break; // Oktalyzer: fine note slide up case 0x55: { if (chnInf->getNote() < XModule::NOTE_LAST-eop) { mp_sint32 note = chnInf->getNote(); note+=eop; if (note > 6*12) note = 6*12; chnInf->setNote(note); chnInf->setPer(getperiod(chnInf->getNote(),chnInf->getRelnote(),chnInf->getFinetune())); chnInf->adjustVibratoPer(); } } break; // IT/S3M global volslide (Impulse Tracker) case 0x59 : { if (eop) chnInf->old[effcnt].gvolslide=eop; if (chnInf->old[effcnt].gvolslide) { y=chnInf->old[effcnt].gvolslide>>4; x=chnInf->old[effcnt].gvolslide&0xf; if ((x!=0x0F)&&(y!=0x0F)) break; if (x==0x0F && !y) break; if (y==0x0F && !x) break; if (x==0x0F) { mainVolume+=y*((module->header.flags & XModule::MODULE_ITNOTEOFF) ? 2 : 4); if (mainVolume>255) mainVolume=255; break; } if (y==0x0F) { mainVolume-=x*((module->header.flags & XModule::MODULE_ITNOTEOFF) ? 2 : 4); if (mainVolume<0) mainVolume=0; break; } } break; } // IT Channel volslide case 0x5A : { if (eop) chnInf->old[effcnt].chnvolslide=eop; if (chnInf->old[effcnt].chnvolslide) { y=chnInf->old[effcnt].chnvolslide>>4; x=chnInf->old[effcnt].chnvolslide&0xf; if ((x!=0x0F)&&(y!=0x0F)) break; if (x==0x0F && !y) break; if (y==0x0F && !x) break; if (x==0x0F) { chnInf->incMasterVol(y*4); break; } if (y==0x0F) { chnInf->decMasterVol(x*4); break; } } }; break; // IT panning slide case 0x5B : { if (eop) chnInf->old[effcnt].panslide=eop; if (chnInf->old[effcnt].panslide) { y=chnInf->old[effcnt].panslide>>4; x=chnInf->old[effcnt].panslide&0xf; if ((x!=0x0F)&&(y!=0x0F)) break; if (x==0x0F && !y) break; if (y==0x0F && !x) break; if (x==0x0F) { chnInf->decPan(y*4); break; } if (y==0x0F) { chnInf->incPan(x*4); break; } } }; break; } // switch } void PlayerIT::doTickeffects() { TModuleChannel* chnInf = chninfo; for (mp_sint32 chn = 0; chn < numChannels; chn++, chnInf++) { for (mp_sint32 effcnt = 0; effcnt < numEffects; effcnt++) { doTickEffect(chnInf, effcnt); } } } void PlayerIT::triggerEnvelope(TPrEnv& dstEnv, TEnvelope& srcEnv) { // if the same envelope has been not been assigned already, // we take over the "enabled" flag from the envelope if (dstEnv.envstruc != &srcEnv) dstEnv.enabled = srcEnv.type & 1; dstEnv.envstruc = &srcEnv; dstEnv.a = 0; dstEnv.b = 1; dstEnv.step = 0; dstEnv.bpmCounter = 0; if (dstEnv.envstruc->speed) dstEnv.bpmAdder = getbpmrate(dstEnv.envstruc->speed); } void PlayerIT::triggerEnvelopes(TModuleChannel* chnInf) { const mp_sint32 smp = chnInf->getSmp(); const mp_sint32 ins = chnInf->getIns(); bool insEnv = (module->instr[ins-1].flags & TXMInstrument::IF_ITENVELOPES); mp_uword e = insEnv ? module->instr[ins-1].venvnum : module->smp[smp].venvnum; if (e) triggerEnvelope(chnInf->getVenv(), module->venvs[e-1]); else chnInf->getVenv().envstruc=NULL; e = insEnv ? module->instr[ins-1].penvnum : module->smp[smp].penvnum; if (e) triggerEnvelope(chnInf->getPenv(), module->penvs[e-1]); else chnInf->getPenv().envstruc=NULL; e = insEnv ? module->instr[ins-1].fenvnum : module->smp[smp].fenvnum; if (e) triggerEnvelope(chnInf->getFenv(), module->fenvs[e-1]); else chnInf->getFenv().envstruc=NULL; e = insEnv ? module->instr[ins-1].vibenvnum : module->smp[smp].vibenvnum; if (e) triggerEnvelope(chnInf->getVibenv(), module->vibenvs[e-1]); else chnInf->getVibenv().envstruc=NULL; e = insEnv ? module->instr[ins-1].pitchenvnum : module->smp[smp].pitchenvnum; if (e) triggerEnvelope(chnInf->getPitchenv(), module->pitchenvs[e-1]); else chnInf->getPitchenv().envstruc=NULL; } void PlayerIT::triggerAutovibrato(TModuleChannel* chnInf) { const mp_sint32 smp = chnInf->getSmp(); if (module->smp[smp].vibdepth&&module->smp[smp].vibrate) { //chnInf->avibused=1; chnInf->setAvibused((module->smp[smp].vibtype+1) | ((module->smp[smp].flags & 16) ? 128 : 0)); chnInf->setAvibdepth(module->smp[smp].vibdepth); chnInf->setAvibspd(module->smp[smp].vibrate); chnInf->setAvibswcnt(0); chnInf->setAvibsweep(module->smp[smp].vibsweep); } else chnInf->setAvibused(0); } void PlayerIT::triggerInstrumentFX(TModuleChannel* chnInf, bool triggerEnv/* = true*/) { const mp_sint32 smp = chnInf->getSmp(); const mp_sint32 ins = chnInf->getIns(); if (smp != -1) { if (triggerEnv) triggerEnvelopes(chnInf); triggerAutovibrato(chnInf); chnInf->setFadevolstart(65536); // Check for IT style fadeout (instrument rather than sample based) if (ins && (module->instr[ins-1].flags & TXMInstrument::IF_ITFADEOUT)) chnInf->setFadevolstep(module->instr[ins-1].volfade); else chnInf->setFadevolstep(module->smp[smp].volfade); } } #define INVALIDVALUE -12345678 void PlayerIT::progressRow() { mp_sint32 slotsize = (numEffects*2)+2; TXMPattern* pattern = &module->phead[patternIndex]; mp_ubyte *row = pattern->patternData+ (pattern->channum*slotsize*rowcnt); /*if (rowcnt == 3) { int i = 0; i++; i--; }*/ //for (mp_sint32 chn=4;chn<5;chn++) { for (mp_sint32 chn=0;chncurrentnote = row[pp]; mp_sint32 i = row[pp+1]; bool noteporta = false; bool notedelay = false; bool forcefade = false; mp_sint32 oldIns = chnInf->getIns(); mp_sint32 oldSmp = chnInf->getSmp(); // Effect preprocessor & get effect + operand from interleaved pattern data mp_sint32 effcnt, finetune = 0x7FFFFFFF; for (effcnt = 0; effcnt < numEffects; effcnt++) { chnInf->eff[effcnt] = row[(pp+2)+(effcnt*2)]; chnInf->eop[effcnt] = row[(pp+2)+(effcnt*2+1)]; switch (chnInf->eff[effcnt]) { // We need to know if we process the note as new note or or portamento destination period case 0x03: case 0x05: noteporta = true; break; // nasty FT2 "feature" // if there is a set volume in the first column // and note == NOTE_OFF set a flag for later use case 0x0C: { if (playModeFT2 && (note == XModule::NOTE_OFF || (effcnt == 0 && numEffects == 2 && chnInf->eff[effcnt+1] == 0x14))) { forcefade = true; } break; } // XM key off at tick with tick operand == 0 is like normal key off case 0x14: if (chnInf->eop[effcnt] == 0) note = XModule::NOTE_OFF; break; // set finetune will override the instrument setting case 0x35: finetune = XModule::modfinetunes[playModeFT2 ? ((chnInf->eop[effcnt] - 8) & 0xF) : (chnInf->eop[effcnt] & 0xF)]; break; // note delay without note retriggers last bnote case 0x3d: notedelay = true; if (!note && chnInf->eop[effcnt] && playModeFT2) note = chnInf->lastnoportanote; break; } } // Temporary placeholders, those will be applied after // having allocated a new virtual channel mp_sint32 finalNote = chnInf->getNote(); mp_sint32 finalIns = chnInf->getIns(); mp_uword finalInsflags = chnInf->getInsflags(); mp_sint32 finalSmp = chnInf->getSmp(); mp_sint32 finalPeriod = chnInf->getPer(); mp_sint32 finalFreqAdjust = chnInf->getFreqadjust(); mp_sint32 finalRelnote = chnInf->getRelnote(); mp_sint32 finalFinetune = chnInf->getFinetune(); mp_sint32 finalVolume = chnInf->getVolume(); bool stopChannel = false; // Check new instrument settings only if valid note or no note at all if (i && note <= XModule::NOTE_LAST) { // valid sample? bool invalidIns = true; bool invalidSmp = true; // invalid instrument if (i <= module->header.insnum && module->instr[i-1].samp) invalidIns = false; // invalid sample if (module->instr[i-1].samp && module->instr[i-1].snum[0] != -1) invalidSmp = false; if (!invalidIns) // valid sample finalIns = i; else if (note) // invalid sample { // cut means stop sample in FT2 if (!newInsPTFlag && !newInsST3Flag && !noteporta) { finalSmp = -1; finalIns = 0; stopChannel = true; } } // protracker sample cut when invalid instrument is triggered if (newInsPTFlag) { if (!note) { if (invalidSmp) { finalSmp = -1; finalIns = 0; finalVolume = 0; // cut means: volume to zero (no stop sample) } else { finalSmp = module->instr[i-1].snum[0]; } } else { if (invalidSmp) { finalSmp = -1; finalIns = 0; finalVolume = 0; // cut means: volume to zero (no stop sample) // NOT sure!!! //stopSample(chn); } } } // screamtracker continues playing when invalid instrument is triggered // applies new volume when instrument only is triggered else if (newInsST3Flag) { if (!note) { if (!invalidSmp) { finalSmp = module->instr[i-1].snum[0]; } // completely invalid instrument without note, does nothing at all else { i = 0; } } } } chnInf->validnote = true; if (note && note < XModule::NOTE_OFF) { const mp_sint32 ins = finalIns; if (ins) { finalSmp = module->instr[ins-1].snum[note-1]; if ((module->instr[ins-1].flags & 1) && module->instr[ins-1].notemap[note-1] != 0xFF) { chnInf->currentnote = note = module->instr[ins-1].notemap[note-1] + 1; } // if Impulse Tracker instrument, we only apply the sample finetune / relnote when // there is a note AND an instrument set, otherwise keep settings if (!(module->instr[ins-1].flags & 1) || ((module->instr[ins-1].flags & 1) && i)) { // invalid sample entry? // Only apply new fintune / relative note number when not doing portamento mp_sint32 smp = finalSmp; if (smp != -1 && !noteporta) { mp_sint32 finalNote = note + (mp_sint32)module->smp[smp].relnote; // limit to upper boundary is enabled (FT2) if (module->header.uppernotebound) { // Within current note range? if (finalNote >= 1 && finalNote <= (mp_sint32)module->header.uppernotebound) { finalFinetune = (finetune != 0x7FFFFFFF ? finetune : module->smp[smp].finetune); finalRelnote = module->smp[smp].relnote; finalFreqAdjust = module->smp[smp].freqadjust; } // This is not a valid note else { chnInf->validnote = false; note = finalNote; } } else { finalFinetune = (finetune != 0x7FFFFFFF ? finetune : module->smp[smp].finetune); finalRelnote = module->smp[smp].relnote; finalFreqAdjust = module->smp[smp].freqadjust; } } } } mp_sint32 relnote = finalRelnote; mp_sint32 finetune = finalFinetune; // If this is not a note portamento // and a valid note => keep that note and calculate new period if (!noteporta) { finalNote = chnInf->lastnoportanote = note; finalPeriod = getperiod(note,relnote,finetune); // if there is a valid note => destroy portamento to note memory when playing an S3M(?) if (/*newInsPTFlag||*/newInsST3Flag) { chnInf->destnote=0; chnInf->destper=0; } } // If this is a note portamento keep destination's note + period else { // if a note delay is happening while the portamento is set, AND we don't have a note (?) // we restore the original period, but the destination period keeps set if (playModeFT2 && notedelay && !chnInf->currentnote) finalPeriod=getperiod(note,relnote,finetune); else { chnInf->lastnoportanote=finalNote; chnInf->destnote=finalNote=note; chnInf->destper=getperiod(note,relnote,finetune); } } // If this has not been a valid note, do not trigger it if (!chnInf->validnote) note = 0; } // take over instrument flags (NNA/DCT/DCA) if ((i == finalIns) && finalIns) finalInsflags = module->instr[finalIns-1].flags; // --- this is the place to allocate new virtual channels --- if (finalSmp != -1 && !noteporta && note && note < XModule::NOTE_OFF) { TNNATriggerInfo triggerInfo; triggerInfo.ins = i; triggerInfo.smp = finalSmp; triggerInfo.note = note; if (!handleNNAs(chnInf, triggerInfo)) continue; } // apply new state to new channel if (finalNote != chnInf->getNote()) { chnInf->setNote(finalNote); } if (finalIns != chnInf->getIns()) { chnInf->setIns(finalIns); } if (finalInsflags != chnInf->getInsflags()) { chnInf->setInsflags(finalInsflags); } if (finalSmp != chnInf->getSmp()) { chnInf->setSmp(finalSmp); } if (finalPeriod != chnInf->getPer()) { chnInf->setPer(finalPeriod); chnInf->adjustVibratoPer(); } if (finalFreqAdjust != chnInf->getFreqadjust()) { chnInf->setFreqadjust(finalFreqAdjust); } if (finalRelnote != chnInf->getRelnote()) { chnInf->setRelnote(finalRelnote); } if (finalFinetune != chnInf->getFinetune()) { chnInf->setFinetune(finalFinetune); } if (finalVolume != chnInf->getVol()) { chnInf->setVol(finalVolume); chnInf->adjustTremoloTremorVol(); } if (stopChannel && chnInf->hasVchn()) { stopSample(chnInf->getPlaybackChannelIndex()); } // man this FT2 bug emulation starts getting on my nerves: // only take new instrument of there is no note porta if (playModeFT2 && i && (noteporta || !chnInf->validnote)) { i = oldIns; chnInf->setIns(i); chnInf->setSmp(oldSmp); } // when we have a new instrument we apply the settings for this instrument if (i && chnInf->getSmp() != -1 && note < XModule::NOTE_OFF) { if (module->instr[i-1].flags & TXMInstrument::IF_ITGOBALINSVOL) chnInf->setInsMasterVol(module->instr[i-1].res); else chnInf->setInsMasterVol(255); mp_sint32 smp = chnInf->getSmp(); if ((module->smp[smp].flags&1)) { chnInf->setVol(module->smp[smp].vol); chnInf->adjustTremoloTremorVol(); } if (playModeFT2 && (module->smp[smp].flags&2)) chnInf->setPan(module->smp[smp].pan); if ((module->smp[smp].flags&4)) chnInf->setMasterVol(module->smp[smp].vol); if ((module->smp[smp].flags&8)) chnInf->setSmpMasterVol(module->smp[smp].res); else chnInf->setSmpMasterVol(255); chnInf->setCutoff(module->instr[i-1].ifc); chnInf->setResonance(module->instr[i-1].ifr); if (noteporta && (module->header.flags & XModule::MODULE_ITNEWGXX)) triggerInstrumentFX(chnInf, false); else triggerInstrumentFX(chnInf); // reset vibrato/tremolo/tremor/retrig counters for (effcnt=0;effcntvibpos[effcnt] = chnInf->tremorcnt[effcnt] = chnInf->trmpos[effcnt] = chnInf->panbrellopos[effcnt] = chnInf->retrigcounterRxx[effcnt] = 0; if (playModePT) chnInf->smpoffs = 0; chnInf->setKeyon(true); } // ------ 11/05/05: it seems that note off commands are processed BEFORE effect commands // S3M style keyoff: // sample is stopped if (note == XModule::NOTE_CUT) { note=0; if (chnInf->getVenv().envstruc!=NULL) { if (!chnInf->getVenv().isEnabled()) { chnInf->setVol(0); chnInf->adjustTremoloTremorVol(); if (chnInf->getPlaybackChannelIndex() >= 0) stopSample(chnInf->getPlaybackChannelIndex()); } } else { chnInf->setVol(0); chnInf->adjustTremoloTremorVol(); if (chnInf->getPlaybackChannelIndex() >= 0) stopSample(chnInf->getPlaybackChannelIndex()); } } // XM/IT style keyoff: else if (note == XModule::NOTE_OFF) { note = 0; handleNoteOFF(chnInf->chnstat()); } chnInf->hasSetVolume = false; for (effcnt=0;effcnteff[effcnt] == 0x09 && !note && module->getType() == XModule::ModuleType_MTM) { note = chnInf->getNote(); } doEffect(chnInf, effcnt); } // for if (note) { if (note <= XModule::NOTE_OFF) { if (!noteporta) { playInstrument(chnInf); } else if (oldPTInsChangeFlag && newInsPTFlag && noteporta && i && chnInf->getSmp() != -1 && chnInf->getNote()) { playInstrument(chnInf, true); } } } // note else if (oldPTInsChangeFlag && newInsPTFlag && i && chnInf->getNote() && chnInf->getPer()) { playInstrument(chnInf, true); } } } } void PlayerIT::update() { mp_sint32 c; TVirtualChannel* chn = vchninfo; const mp_sint32 curMaxVirChannels = this->curMaxVirChannels; for (c = 0; c < curMaxVirChannels; c++, chn++) { if (!chn->getActive()) continue; if (chn->isFlagSet(CHANNEL_FLAGS_UPDATE_IGNORE)) continue; const mp_sint32 ins = chn->getIns(); bool ITEnvelopes = (ins && ins <= module->header.insnum) ? (module->instr[ins-1].flags & TXMInstrument::IF_ITENVELOPES) : false; mp_sint32 dfs = chn->getFlags() & CHANNEL_FLAGS_DFS; mp_sint32 dvs = chn->getFlags() & CHANNEL_FLAGS_DVS; mp_sint32 dps = chn->getFlags() & CHANNEL_FLAGS_DPS; if (chn->getPeriod() && !dfs) setFreq(c,getFinalFreq(chn->chnstat(),getFinalPeriod(chn->chnstat(),chn->getPeriod()))); if (!dvs) setVol(c,getFinalVolume(chn->chnstat(), chn->getVolume(), mainVolume)); if (!dps) setPan(c,getFinalPanning(chn->chnstat(),chn->getPan())); if (chn->getVenv().envstruc != NULL && !chn->getVenv().envstruc->speed) { prenvelope(&chn->getVenv(), chn->getKeyon(), ITEnvelopes); if (ins && ins <= module->header.insnum && (module->instr[ins-1].flags & TXMInstrument::IF_ITFADEOUT)) { if (chn->getVenv().finished(chn->getKeyon()) && !chn->getFadeout()) { chn->setFadeout(true); } } } // IT filter processing mp_sint32 cutoff = MP_INVALID_VALUE; if (chn->getCutoff() >= 128) cutoff = chn->getCutoff() - 128; mp_sint32 resonance = 0; if (chn->getResonance() >= 128) resonance = chn->getResonance() - 128; setFilterAttributes(c, getFinalCutoff(chn->chnstat(), cutoff), resonance); if (chn->getPenv().envstruc != NULL && !chn->getPenv().envstruc->speed) { prenvelope(&chn->getPenv(), chn->getKeyon(), ITEnvelopes); } if (chn->getFenv().envstruc != NULL && !chn->getFenv().envstruc->speed) { prenvelope(&chn->getFenv(), chn->getKeyon(), ITEnvelopes); } if (chn->getVibenv().envstruc != NULL && !chn->getVibenv().envstruc->speed) { prenvelope(&chn->getVibenv(), chn->getKeyon(), ITEnvelopes); } if (chn->getPitchenv().envstruc != NULL && !chn->getPitchenv().envstruc->speed) { prenvelope(&chn->getPitchenv(), chn->getKeyon(), ITEnvelopes); } if (ins && ins <= module->header.insnum) { // IT style fadeout also works without active envelope if ((module->instr[ins-1].flags & TXMInstrument::IF_ITFADEOUT) && chn->getFadeout()) { chn->decFadevolstart(); } // XM style fadeout works only with key off else if (!chn->getKeyon()) { chn->decFadevolstart(); } } if (chn->getAvibused()) { chn->avibAdvance(); } } adjustVirtualChannels(); } void PlayerIT::updateBPMIndependent() { mp_int64 dummy; TVirtualChannel* chn = vchninfo; const mp_sint32 curMaxVirChannels = this->curMaxVirChannels; for (mp_sint32 c = 0; c < curMaxVirChannels; c++,chn++) { TVirtualChannel* chn = &vchninfo[c]; if (!chn->getActive()) continue; if (chn->isFlagSet(CHANNEL_FLAGS_UPDATE_IGNORE)) continue; const mp_sint32 ins = chn->getIns(); bool ITEnvelopes = (ins && ins <= module->header.insnum) ? (module->instr[ins-1].flags & TXMInstrument::IF_ITENVELOPES) : false; mp_sint32 dfs = chn->getFlags() & CHANNEL_FLAGS_DFS, dvs = chn->getFlags() & CHANNEL_FLAGS_DVS; // Volume envelope if (chn->getVenv().envstruc != NULL && chn->getVenv().envstruc->speed) { dummy = (mp_int64)chn->getVenv().bpmCounter; dummy+=(mp_int64)chn->getVenv().bpmAdder; chn->getVenv().bpmCounter = (mp_sint32)dummy; // check overflow-carry if (dummy>>32) { prenvelope(&chn->getVenv(), chn->getKeyon(), ITEnvelopes); if (!dvs) setVol(c,getFinalVolume(chn->chnstat(), chn->getVolume(), mainVolume)); } } // Panning envelope if (chn->getPenv().envstruc != NULL && chn->getPenv().envstruc->speed) { dummy = (mp_int64)chn->getPenv().bpmCounter; dummy+=(mp_int64)chn->getPenv().bpmAdder; chn->getPenv().bpmCounter = (mp_sint32)dummy; // check overflow-carry if (dummy>>32) { prenvelope(&chn->getPenv(), chn->getKeyon(), ITEnvelopes); setPan(c,getFinalPanning(chn->chnstat(),chn->getPan())); } } // Frequency envelope: Digitracker MDL if (chn->getFenv().envstruc != NULL && chn->getFenv().envstruc->speed) { dummy = (mp_int64)chn->getFenv().bpmCounter; dummy+=(mp_int64)chn->getFenv().bpmAdder; chn->getFenv().bpmCounter = (mp_sint32)dummy; // check overflow-carry if (dummy>>32) { prenvelope(&chn->getFenv(), chn->getKeyon(), ITEnvelopes); if (chn->getPeriod()&&(!dfs)) setFreq(c,getFinalFreq(chn->chnstat(),getFinalPeriod(chn->chnstat(),chn->getPeriod()))); } } // Vibrato envelope: Velvet Studio AMS if (chn->getVibenv().envstruc != NULL && chn->getVibenv().envstruc->speed) { dummy = (mp_int64)chn->getVibenv().bpmCounter; dummy+=(mp_int64)chn->getVibenv().bpmAdder; chn->getVibenv().bpmCounter = (mp_sint32)dummy; // check overflow-carry if (dummy>>32) { prenvelope(&chn->getVibenv(), chn->getKeyon(), ITEnvelopes); if (chn->getPeriod()&&(!dfs)) setFreq(c,getFinalFreq(chn->chnstat(),getFinalPeriod(chn->chnstat(),chn->getPeriod()))); } } // Pitch envelope: Impulse Tracker if (chn->getPitchenv().envstruc != NULL && chn->getPitchenv().envstruc->speed) { dummy = (mp_int64)chn->getPitchenv().bpmCounter; dummy+=(mp_int64)chn->getPitchenv().bpmAdder; chn->getPitchenv().bpmCounter = (mp_sint32)dummy; // check overflow-carry if (dummy>>32) { prenvelope(&chn->getPitchenv(), chn->getKeyon(), ITEnvelopes); if (chn->getPeriod()&&(!dfs)) setFreq(c,getFinalFreq(chn->chnstat(),getFinalPeriod(chn->chnstat(),chn->getPeriod()))); } } } adjustVirtualChannels(); } void inline PlayerIT::setNewPosition(mp_sint32 poscnt) { if (poscnt == this->poscnt) return; if (poscnt>=module->header.ordnum) poscnt=module->header.restart; // reset looping flags RESET_ALL_LOOPING lastUnvisitedPos = this->poscnt; this->poscnt = poscnt; } void PlayerIT::tickhandler() { mp_sint32 maxTicks; if (!idle) { // Important! Without this, the different playmodes will not be recognized properly updatePlayModeFlags(); // sanity check 1 if (patternIndexToPlay == -1 && poscnt >= module->header.ordnum) { halt(); return; } // Play special pattern? if (patternIndexToPlay == -1) patternIndex = module->header.ord[poscnt]; else patternIndex = patternIndexToPlay; TXMPattern* pattern = &module->phead[patternIndex]; if (pattern->patternData == NULL) { halt(); return; } // sanity check 2 :) if (rowcnt >= pattern->rows) { if (patternIndexToPlay == -1) { //rowcnt = 0; ticker = 0; goto nextrow; } else { //halt(); //return; rowcnt = 0; ticker = 0; } } numEffects = pattern->effnum; numChannels = pattern->channum <= module->header.channum ? pattern->channum : module->header.channum; mp_sint32 c; if (ticker == 0) { // Keep track of visited rows mp_sint32 absolutePos = poscnt*256+rowcnt; if (isRowVisited(absolutePos) && !repeat) { // pattern loop active? bool b = false; for (c=0;cpatternData+(pattern->channum*slotsize*rowcnt); // process high priority effects in advance to other effects mp_ubyte* slot = row; for (c=0;c=maxTicks) { if (patDelay) patDelay = false; // reset ticker ticker=0; // if we're told to play this row only, we will stop now // and neither process any of those pattern jump/repeat stuff if (playOneRowOnly) { BPMCounter = adder = 0; return; } if (patternIndexToPlay == -1) { // break pattern? if (pbreak&&(poscnt<(module->header.ordnum-1))) { if (!pjump || (pjump && pjumpPriority > pbreakPriority)) setNewPosition(poscnt+1); rowcnt=pbreakpos-1; startNextRow = -1; } else if (pbreak&&(poscnt==(module->header.ordnum-1))) { // Pattern break on the last order? Break to restart position if (!pjump || (pjump && pjumpPriority > pbreakPriority)) setNewPosition(module->header.restart); rowcnt=pbreakpos-1; startNextRow = -1; } // pattern jump? if (pjump) { if (!pbreak || (pbreak && pjumpPriority > pbreakPriority)) rowcnt = pjumprow-1; setNewPosition(pjumppos); startNextRow = -1; } // it could be that our position has changed because // of position jumps, so make sure we're getting the real position here patternIndex = module->header.ord[poscnt]; } // We have one pattern to play else { // Position jump occurred and repeating is allowed, start again if (pjump || pbreak) { rowcnt = -1; startNextRow = -1; } //RESETLOOPING // macro } // handle loop for (c=0;c=module->phead[patternIndex].rows) { // start at row 0? if (startNextRow != -1) { rowcnt = startNextRow; startNextRow = -1; } else { rowcnt = 0; } if (patternIndexToPlay == -1) { // play next order setNewPosition(poscnt+1); } // We have one pattern to play but repeating isn't allowed, so stop here else if (!repeat) { halt(); return; } // We have one pattern to play and repeating is allowed so start again else { rowcnt = 0; // reset looping flags RESET_ALL_LOOPING } } // halting has been requested if (haltFlag) { halt(); } } } else { numChannels = module->header.channum; } update(); } void PlayerIT::halt() { halted = true; BPMCounter = adder = 0; if (resetOnStopFlag) resetChannelsWithoutMuting(); } bool PlayerIT::grabChannelInfo(mp_sint32 chn, TPlayerChannelInfo& channelInfo) const { channelInfo.note = chninfo[chn].currentnote; channelInfo.instrument = chninfo[chn].getIns(); channelInfo.volume = chninfo[chn].getVol(); channelInfo.panning = chninfo[chn].getPan(); channelInfo.numeffects = numEffects; memcpy(channelInfo.effects, chninfo[chn].eff, sizeof(chninfo[chn].eff)); memcpy(channelInfo.operands, chninfo[chn].eop, sizeof(chninfo[chn].eop)); return true; } MilkyTracker-1.02.00/src/milkyplay/PlayerIT.h000066400000000000000000000574111324432207300207270ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * PlayerIT.h * MilyPlay core * * Created by Peter Barth on Tue Oct 19 2004. * */ #ifndef __PLAYERIT_H__ #define __PLAYERIT_H__ #include "PlayerBase.h" #include "XModule.h" class PlayerIT : public PlayerBase { private: enum EXMMinPeriod { XM_MINPERIOD = 50 }; struct TPrEnv { TEnvelope *envstruc; bool enabled; mp_sint32 a,b,step; mp_uint32 bpmCounter, bpmAdder; private: bool reachedEnd(bool keyon) { bool reachedEnd = ((step >= envstruc->env[b][0]) && (b >= envstruc->num - 1)); if (!reachedEnd) return false; bool ITBreakLoop = (envstruc->type & 16); if (ITBreakLoop && keyon) return false; bool AMSBreakLoop = (envstruc->type & (4+8)) == (4+8); bool XMBreakLoop = ((envstruc->type & (2+4)) == (2+4)) && (envstruc->sustain == envstruc->loope); bool brokeLoop = !keyon && (AMSBreakLoop || XMBreakLoop); //bool res = ((envstruc->type & 4) && brokeLoop) || (!(envstruc->type & 4)); return ((envstruc->type & 4) && brokeLoop) || (!(envstruc->type & 4)); } public: bool finished(bool keyon) { if (envstruc == NULL || !enabled) return false; return reachedEnd(keyon); } bool cutted(bool keyon) { return (envstruc && reachedEnd(keyon) && envstruc->env[b][1] == 0); } void setEnabled(bool enabled) { this->enabled = enabled; } bool isEnabled() { return enabled && envstruc != NULL; } }; struct TLastOperands { mp_ubyte portaup; mp_ubyte portadown; mp_ubyte portanote; mp_ubyte fineportaup; mp_ubyte fineportadown; mp_ubyte xfineportaup; mp_ubyte xfineportadown; mp_ubyte volslide; mp_ubyte finevolslide; mp_ubyte gvolslide; mp_ubyte chnvolslide; mp_ubyte panslide; mp_ubyte arpeg; mp_ubyte retrig; mp_ubyte tremor; mp_ubyte smpoffset; mp_ubyte temposlide; }; #define DEFINE_STATINTERFACE \ mp_sint32 getNote() { return chnstat().note; } \ mp_sint32 getIns() { return chnstat().ins; } \ mp_uword getInsflags() { return chnstat().insflags; } \ mp_sint32 getSmp() { return chnstat().smp; } \ \ void setNote(mp_sint32 note) { chnstat().note = note; } \ void setIns(mp_sint32 ins) { chnstat().ins = ins; } \ void setInsflags(mp_uword insflags) { chnstat().insflags = insflags; } \ void setSmp(mp_sint32 smp) { chnstat().smp = smp; } \ \ mp_sint32 getFlags() { return chnstat().flags; } \ void setFlags(mp_uint32 flags) { chnstat().flags = flags; } \ void setFlag(mp_uint32 flag) { chnstat().flags |= flag; } \ void resetFlag(mp_uint32 flag) { chnstat().flags &= ~flag; } \ bool isFlagSet(mp_uint32 flag) { return (chnstat().flags & flag); } \ \ void setVol(mp_sint32 vol) { chnstat().vol = vol; } \ void incVol(mp_sint32 offs) { chnstat().vol+=offs; if (chnstat().vol>255) chnstat().vol=255; } \ void decVol(mp_sint32 offs) { chnstat().vol-=offs; if (chnstat().vol<0) chnstat().vol=0; } \ void adjustTremoloTremorVol() { chnstat().tremorVol = chnstat().tremoloVol = chnstat().vol; chnstat().hasTremolo = false; chnstat().finalTremoloVol = 0; } \ void adjustTremoloVol() { chnstat().tremoloVol = chnstat().vol; chnstat().hasTremolo = false; chnstat().finalTremoloVol = 0; } \ void setFinalTremVol(mp_sint32 vol) { chnstat().finalTremoloVol = vol; chnstat().hasTremolo = true; } \ \ void setPan(mp_sint32 pan) { chnstat().pan = pan; } \ void incPan(mp_sint32 offs) { chnstat().pan+=offs; if (chnstat().pan>255) chnstat().pan=255; } \ void decPan(mp_sint32 offs) { chnstat().pan-=offs; if (chnstat().pan<0) chnstat().pan=0; } \ \ void setPer(mp_sint32 per) { chnstat().per = per; } \ void decPer(mp_sint32 offs) { chnstat().per-=offs; } \ void incPer(mp_sint32 offs) { chnstat().per+=offs; } \ void adjustVibratoPer() { chnstat().hasVibrato = false; chnstat().finalVibratoPer = 0; } \ void setFinalVibratoPer(mp_sint32 per) { chnstat().finalVibratoPer = per; chnstat().hasVibrato = true; } \ \ void clampPerMax(mp_sint32 max) { if (chnstat().per > max) chnstat().per = max; } \ void clampPerMin(mp_sint32 min) { if (chnstat().per < min) chnstat().per = min; } \ \ void setMasterVol(mp_sint32 vol) { chnstat().masterVol = vol; } \ void incMasterVol(mp_sint32 offs) { chnstat().masterVol+=offs; if (chnstat().masterVol>255) chnstat().masterVol=255; } \ void decMasterVol(mp_sint32 offs) { chnstat().masterVol-=offs; if (chnstat().masterVol<0) chnstat().masterVol=0; } \ void setInsMasterVol(mp_sint32 vol) { chnstat().insMasterVol = vol; } \ void setSmpMasterVol(mp_sint32 vol) { chnstat().smpMasterVol = vol; } \ void setFreqadjust(mp_sword freqadjust) { chnstat().freqadjust = freqadjust; } \ void setRelnote(mp_sint32 relnote) { chnstat().relnote = relnote; } \ void setFinetune(mp_sint32 finetune) { chnstat().finetune = finetune; } \ \ mp_sint32 getVol() { return chnstat().vol; } \ mp_sint32 getTremoloVol() { return chnstat().tremoloVol; } \ mp_sint32 getTremorVol() { return chnstat().tremorVol; } \ mp_sint32 getVolume() { return chnstat().getVolumeInternal(); } \ \ mp_sint32 getPan() { return chnstat().pan; } \ mp_sint32 getPer() { return chnstat().per; } \ mp_sint32 getPeriod() { return chnstat().getPeriodInternal(); } \ \ mp_sint32 getMasterVol() { return chnstat().masterVol; } \ mp_sint32 getInsMasterVol() { return chnstat().insMasterVol; } \ mp_sint32 getSmpMasterVol() { return chnstat().smpMasterVol; } \ mp_sword getFreqadjust() { return chnstat().freqadjust; } \ mp_sint32 getRelnote() { return chnstat().relnote; } \ mp_sint32 getFinetune() { return chnstat().finetune; } \ \ bool getKeyon() { return chnstat().keyon; } \ \ TPrEnv& getVenv() { return chnstat().venv; } \ TPrEnv& getPenv() { return chnstat().penv; } \ TPrEnv& getFenv() { return chnstat().fenv; } \ TPrEnv& getVibenv() { return chnstat().vibenv; } \ TPrEnv& getPitchenv() { return chnstat().pitchenv; } \ \ mp_ubyte getAvibused() { return chnstat().avibused; } \ mp_ubyte getAvibspd() { return chnstat().avibspd; } \ mp_ubyte getAvibdepth() { return chnstat().avibdepth; } \ mp_ubyte getAvibcnt() { return chnstat().avibcnt; } \ mp_ubyte getAvibsweep() { return chnstat().avibsweep; } \ mp_sint32 getAvibswcnt() { return chnstat().avibswcnt; } \ \ void setKeyon(bool keyon) { chnstat().keyon = keyon; } \ void setAvibused(mp_ubyte avibused) { chnstat().avibused = avibused; } \ void setAvibspd(mp_ubyte avibspd) { chnstat().avibspd = avibspd; } \ void setAvibdepth(mp_ubyte avibdepth) { chnstat().avibdepth = avibdepth; } \ void setAvibcnt(mp_ubyte avibcnt) { chnstat().avibcnt = avibcnt; } \ void setAvibsweep(mp_ubyte avibsweep) { chnstat().avibsweep = avibsweep; } \ void setAvibswcnt(mp_sint32 avibswcnt) { chnstat().avibswcnt = avibswcnt; } \ \ void avibAdvance() \ { \ chnstat().avibcnt+=chnstat().avibspd; \ /* IT style auto vibrato */ \ if (chnstat().avibused & 128) \ { \ if (chnstat().avibswcnt < ((mp_sint32)chnstat().avibdepth << 8) && chnstat().avibsweep) \ /* Our vibrato depth is two times finer than the one from IT, increment by sweep*2 */ \ chnstat().avibswcnt+=(mp_sint32)chnstat().avibsweep<<1; \ } \ /* XM style auto vibrato */ \ else \ { \ if (chnstat().avibswcnt < chnstat().avibsweep) \ chnstat().avibswcnt = (chnstat().avibswcnt+1) & 0xFF; \ } \ } \ \ void setFadevolstart(mp_sint32 fadevolstart) { chnstat().fadevolstart = fadevolstart; } \ mp_sint32 getFadevolstart() { return chnstat().fadevolstart; } \ \ void setFadevolstep(mp_sint32 fadevolstep) { chnstat().fadevolstep = fadevolstep; } \ mp_sint32 getFadevolstep() { return chnstat().fadevolstep; } \ \ void decFadevolstart() { chnstat().fadevolstart-=chnstat().fadevolstep; if (chnstat().fadevolstart<0) chnstat().fadevolstart=0; } \ \ void setFadeout(bool fadeout) { chnstat().fadeout = fadeout; } \ bool getFadeout() { return chnstat().fadeout; } \ \ void setCutoff(mp_ubyte cutoff) { chnstat().cutoff = cutoff; } \ mp_ubyte getCutoff() { return chnstat().cutoff; } \ \ void setResonance(mp_ubyte resonance) { chnstat().resonance = resonance; } \ mp_ubyte getResonance() { return chnstat().resonance; } public: struct TChnState { TChnState& chnstat() { return *this; } mp_uint32 flags; mp_sint32 note; mp_sint32 ins; mp_uword insflags; mp_sint32 smp; mp_sint32 vol; mp_sint32 tremoloVol; mp_sint32 finalTremoloVol; mp_sint32 tremorVol; bool hasTremolo; mp_sint32 pan; mp_sint32 per; mp_sint32 finalVibratoPer; bool hasVibrato; mp_sint32 insMasterVol; mp_sint32 smpMasterVol; mp_sint32 masterVol; mp_sint32 relnote; mp_sint32 finetune; mp_sword freqadjust; bool keyon; bool fadeout; TPrEnv venv; TPrEnv penv; TPrEnv fenv; TPrEnv vibenv; TPrEnv pitchenv; mp_ubyte avibused; mp_ubyte avibspd; mp_ubyte avibdepth; mp_ubyte avibcnt; mp_ubyte avibsweep; mp_sint32 avibswcnt; mp_sint32 fadevolstart; mp_sint32 fadevolstep; mp_sint32 getVolumeInternal() { return hasTremolo ? finalTremoloVol : vol; } mp_sint32 getPeriodInternal() { return hasVibrato ? finalVibratoPer : per; } mp_ubyte cutoff; mp_ubyte resonance; DEFINE_STATINTERFACE }; private: struct TModuleChannel; struct TVirtualChannel { private: bool active; mp_sint32 channelIndex; TChnState state; TModuleChannel* host; TModuleChannel* oldHost; public: // if we're in background we work on our own state // if not, we're just going to work on the host state TChnState& chnstat(); TChnState& getRealState() { return state; } void updateState(const TChnState& src) { state = src; state.flags = 0; } void setActive(bool active) { this->active = active; } bool getActive() { return active; } void setHost(TModuleChannel* host) { this->host = host; } TModuleChannel* getHost() { return host; } bool getBackground() { return host == NULL; } void setOldHost(TModuleChannel* host) { this->oldHost = host; } TModuleChannel* getOldHost() { return oldHost; } void setChannelIndex(mp_sint32 channelIndex) { this->channelIndex = channelIndex; } mp_sint32 getChannelIndex() { return channelIndex; } DEFINE_STATINTERFACE mp_sint32 getResultingVolume() { mp_sint32 vol = (getVolume()*getFadevolstart())>>16; vol = (vol*getMasterVol()*getInsMasterVol())>>16; vol = (vol*getSmpMasterVol())>>8; return vol; } void clear() { mp_sint32 cIndex = channelIndex; memset(this, 0, sizeof(TVirtualChannel)); channelIndex = cIndex; } friend struct TModuleChannel; }; struct TModuleChannel { private: TChnState state; TVirtualChannel* vchn; public: // if we're having a virtual channel, we need to work on the state of the virtual channel // if not, we're just going to work on our own state TChnState& chnstat() { return vchn ? vchn->chnstat() : state; } TChnState& getRealState() { return state; } bool hasVchn() { return vchn != NULL; } TVirtualChannel* getVchn() { return vchn; } void linkVchn(TVirtualChannel* vchn) { vchn->clear(); vchn->setActive(true); this->vchn = vchn; vchn->setHost(this); } TVirtualChannel* unlinkVchn() { vchn->setHost(NULL); vchn->setOldHost(this); vchn->updateState(getRealState()); TVirtualChannel* result = vchn; vchn = NULL; return result; } mp_sint32 getPlaybackChannelIndex() { return ((vchn == NULL) ? -1 : vchn->getChannelIndex()); } DEFINE_STATINTERFACE void slideToPer(mp_sint32 op) { if (destper>chnstat().per) { chnstat().per+=op; if (chnstat().per>destper) chnstat().per=destper; } else if (destper>3]>>(row&7))&1; } void visitRow(mp_sint32 row) { rowHits[row>>3] |= (1<<(row&7)); } TVirtualChannel* allocateVirtualChannel(); void releaseVirtualChannel(TVirtualChannel* vchn) { vchn->setActive(false); if (vchn->getChannelIndex() == curMaxVirChannels-1) curMaxVirChannels--; } struct TNNATriggerInfo { mp_sint32 note; mp_sint32 ins; mp_sint32 smp; }; void handleNoteOFF(TChnState& state); void handlePastNoteAction(TModuleChannel* chnInf, mp_ubyte pastNoteActionType); bool handleDCT(TModuleChannel* chnInf, const TNNATriggerInfo& triggerInfo, mp_ubyte DCT, mp_ubyte DCA); bool handleNNAs(TModuleChannel* chnInf, const TNNATriggerInfo& triggerInfo); void adjustVirtualChannels(); static void prenvelope(TPrEnv* env, bool keyon, bool timingIT); // process envelopes static mp_sint32 getenvval(TPrEnv* env, mp_sint32 n); // get envelope value static mp_sint32 interpolate(mp_sint32 eax,mp_sint32 ebx,mp_sint32 ecx,mp_sint32 edi,mp_sint32 esi); // This takes the period *with* 8 bit fractional part static mp_sint32 getlinfreq(mp_sint32 per); // This takes the period *with* 8 bit fractional part static mp_sint32 getlogfreq(mp_sint32 per); // this returns a period *without* the 8 bit fractional part mp_sint32 getlinperiod(mp_sint32 note, mp_sint32 relnote, mp_sint32 finetune); // this returns a period *without* the 8 bit fractional part mp_sint32 getlogperiod(mp_sint32 note, mp_sint32 relnote, mp_sint32 finetune); mp_uint32 getbpmrate(mp_uint32 bpm) { // digibooster "real BPM" setting mp_uint32 realCiaTempo = (bpm * (baseBpm << 8) / 125) >> 8; if (!realCiaTempo) realCiaTempo++; mp_int64 t = ((mp_int64)realCiaTempo)<<(32+2); const mp_uint32 timerBase = (mp_uint32)(5.0f*500.0f*(MP_BEATLENGTH*MP_TIMERFREQ / (float)MP_BASEFREQ)); return (mp_uint32)(t/timerBase); } mp_sint32 getperiod(mp_sint32 note, mp_sint32 relnote, mp_sint32 finetune) { /*mp_sint32 logper = getlogperiod(note,relnote,finetune); mp_sint32 linper = getlinperiod(note,relnote,finetune); mp_sint32 logfreq = getlogfreq(logper<<8); mp_sint32 linfreq = getlinfreq(linper<<8); return (module->header.freqtab&1) ? linper : logper;*/ if (playModeFT2) { // FT2 doesn't support lower 3 bits if (finetune > 0) finetune &= ~3; else if (finetune < 0) { finetune = -((-finetune + 7) & ~3); if (finetune < -128) finetune = -128; } } return (module->header.freqtab&1) ? getlinperiod(note,relnote,finetune) : getlogperiod(note,relnote,finetune); } mp_sint32 getFinalVolume(TChnState& state, mp_sint32 nv, mp_sint32 mainVolume) { mp_sint32 vol = (nv*getenvval(&state.venv,256))>>7; vol = (vol*state.fadevolstart)>>16; vol = (vol*state.masterVol*state.insMasterVol)>>16; vol = (vol*state.smpMasterVol*mainVolume)>>16; return vol; } mp_sint32 getFinalCutoff(TChnState& state, mp_sint32 nc) { if (state.pitchenv.envstruc != NULL && state.pitchenv.envstruc->type & 128) return (nc != MP_INVALID_VALUE) ? nc*getenvval(&state.pitchenv, 256) : 127*getenvval(&state.pitchenv, 256); else return (nc != MP_INVALID_VALUE) ? (nc << 8) : nc; } mp_sint32 getFinalPanning(TChnState& state, mp_sint32 np) { mp_sint32 envpan = getenvval(&state.penv,128); //if (envpan!=256) cprintf("%i\r\n",envpan); mp_sint32 finalpan = np+(envpan-128)*(128-abs(np-128))/128; if (finalpan<0) finalpan=0; if (finalpan>255) finalpan=255; return finalpan; } mp_sint32 getFinalFreq(TChnState& state, mp_sint32 per) { if (per<1) return 0; // valid envelope and pitch envelope is not configured as filter envelope if (state.pitchenv.envstruc != NULL && !(state.pitchenv.envstruc->type & 128) && (state.pitchenv.envstruc->type & 1)) { // scale the envelope point that 256 units match one semitone mp_sint32 pitch = (getenvval(&state.pitchenv, 128) - 128) * 32; // add that semitone to the current note mp_sint32 note = state.getNote() + (pitch>>8); // the tone between two semitones mp_sint32 subnote = pitch & 255; // that would be the actual period we have mp_sint32 baseperiod = getperiod(state.getNote(), state.getRelnote(), state.getFinetune()); mp_sint32 period1 = getperiod(note, state.getRelnote(), state.getFinetune()); mp_sint32 period2 = getperiod(note+1, state.getRelnote(), state.getFinetune()); mp_sint32 finalperiod = (period1 * (256-subnote) + period2 * subnote); mp_sint32 diff = finalperiod - (baseperiod << 8); per+=diff; if (per < XM_MINPERIOD) per = XM_MINPERIOD; } mp_sint32 eval = getenvval(&state.fenv,128)-128; mp_uint32 freq = (module->header.freqtab&1) ? getlinfreq(per) : getlogfreq(per); mp_sint32 finalFreq = (freq+(eval*63))+(mp_sint32)state.freqadjust; if (finalFreq < 0) finalFreq = 0; return finalFreq; } mp_sint32 getFinalPeriod(TChnState& state, mp_sint32 p); void playInstrument(TModuleChannel* chnInf, bool bNoRestart = false); void triggerEnvelope(TPrEnv& dstEnv, TEnvelope& srcEnv); void triggerEnvelopes(TModuleChannel* chnInf); void triggerAutovibrato(TModuleChannel* chnInf); void triggerInstrumentFX(TModuleChannel* chnInf, bool triggerEnv = true); void updatePlayModeFlags(); void handlePeriodOverflow(TModuleChannel* chnInf) { // PTK/FT1 playmode if (playModePTPitchLimit && options[PlayModeOptionForcePTPitchLimit]) { chnInf->clampPerMax(856*4); } // FT2 playmode (does nothing right now) else { //if (chnInf->per > 14150) // chnInf->per %= 14150; } } void handlePeriodUnderflow(TModuleChannel* chnInf) { // PTK/FT1 playmode if (playModePTPitchLimit && options[PlayModeOptionForcePTPitchLimit]) { chnInf->clampPerMin(113*4); } // FT2 playmode (clamp on low value, not what FT2 does btw.) else { chnInf->clampPerMin(XM_MINPERIOD); //chninfo[channel].per &= 0x3FFF; } } mp_sint32 calcVibrato(TModuleChannel* chnInf, mp_sint32 effcnt, mp_sint32 depthShift = 5); void doTickVolslidePT(TModuleChannel* chnInf, mp_sint32 effcnt); void doTickVolslideST(TModuleChannel* chnInf, mp_sint32 effcnt); void doTickEffect(TModuleChannel* chnInf, mp_sint32 effcnt); void doVolslidePT(TModuleChannel* chnInf, mp_sint32 effcnt, mp_ubyte eop); void doVolslideST(TModuleChannel* chnInf, mp_sint32 effcnt, mp_ubyte eop); void doEffect(TModuleChannel* chnInf, mp_sint32 effcnt); void doTickeffects(); void progressRow(); void update(); void updateBPMIndependent(); void setNewPosition(mp_sint32 poscnt); void tickhandler(); mp_sint32 allocateStructures(); void freeMemory(); // stop song by setting flag and setting speed to zero void halt(); protected: virtual void clearEffectMemory(); public: PlayerIT(mp_uint32 frequency); virtual ~PlayerIT(); virtual PlayerTypes getType() const { return PlayerType_IT; } void setNumMaxVirChannels(mp_sint32 max) { numMaxVirChannels = max; } mp_sint32 getNumMaxVirChannels() const { return numMaxVirChannels; } // virtual from mixer class, perform playing here virtual void timerHandler(mp_sint32 currentBeatPacket); // override base class method virtual mp_sint32 startPlaying(XModule* module, bool repeat = false, mp_uint32 startPosition = 0, mp_uint32 startRow = 0, mp_sint32 numChannels = -1, const mp_ubyte* customPanningTable = NULL, bool idle = false, mp_sint32 patternIndex = -1, bool playOneRowOnly = false); virtual void restart(mp_uint32 startPosition = 0, mp_uint32 startRow = 0, bool resetMixer = true, const mp_ubyte* customPanningTable = NULL, bool playOneRowOnly = false); virtual void reset(); virtual void resetAllSpeed(); virtual bool grabChannelInfo(mp_sint32 chn, TPlayerChannelInfo& channelInfo) const; mp_sint32 getCurMaxVirChannels() const { return curMaxVirChannels; } }; #endif MilkyTracker-1.02.00/src/milkyplay/PlayerSTD.cpp000066400000000000000000002561351324432207300214040ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * PlayerSTD.cpp * MilkyPlay standard player * * */ #include "PlayerSTD.h" #define CHANNEL_FLAGS_DVS 0x10000 #define CHANNEL_FLAGS_DFS 0x20000 #define CHANNEL_FLAGS_FORCE_FORWARD 0x00001 #define CHANNEL_FLAGS_FORCE_BACKWARD 0x00002 #define CHANNEL_FLAGS_FORCE_BILOOP 0x00004 #define CHANNEL_FLAGS_UPDATE_IGNORE 0x00100 //#define MINPERIOD (113*4) #define FREEMEMORY \ #define CLEAROLDOPERANDS \ { \ for (mp_sint32 i = 0; i < numChannels; i++) { \ chninfo[i].ins = 0; \ /*memset(&chninfo[i].old,0,sizeof(TLastOperands));*/ \ } \ } // must be called after the poscnt has been properly set #define RESETLOOPING \ { \ chnInf->loopstart=chnInf->loopcounter=chnInf->execloop=0; \ chnInf->isLooping = false; \ chnInf->loopingValidPosition = poscnt; \ } #define RESET_ALL_LOOPING \ { \ for (mp_sint32 c = 0; c < module->header.channum; c++) \ { \ TModuleChannel *chnInf = &chninfo[c]; \ RESETLOOPING \ } \ } const mp_sint32 PlayerSTD::vibtab[32] = {0,24,49,74,97,120,141,161, 180,197,212,224,235,244,250,253, 255,253,250,244,235,224,212,197, 180,161,141,120,97,74,49,24}; const mp_uword PlayerSTD::lintab[768+1] = { 16726,16741,16756,16771,16786,16801,16816,16832,16847,16862,16877,16892,16908,16923,16938,16953, 16969,16984,16999,17015,17030,17046,17061,17076,17092,17107,17123,17138,17154,17169,17185,17200, 17216,17231,17247,17262,17278,17293,17309,17325,17340,17356,17372,17387,17403,17419,17435,17450, 17466,17482,17498,17513,17529,17545,17561,17577,17593,17608,17624,17640,17656,17672,17688,17704, 17720,17736,17752,17768,17784,17800,17816,17832,17848,17865,17881,17897,17913,17929,17945,17962, 17978,17994,18010,18027,18043,18059,18075,18092,18108,18124,18141,18157,18174,18190,18206,18223, 18239,18256,18272,18289,18305,18322,18338,18355,18372,18388,18405,18421,18438,18455,18471,18488, 18505,18521,18538,18555,18572,18588,18605,18622,18639,18656,18672,18689,18706,18723,18740,18757, 18774,18791,18808,18825,18842,18859,18876,18893,18910,18927,18944,18961,18978,18995,19013,19030, 19047,19064,19081,19099,19116,19133,19150,19168,19185,19202,19220,19237,19254,19272,19289,19306, 19324,19341,19359,19376,19394,19411,19429,19446,19464,19482,19499,19517,19534,19552,19570,19587, 19605,19623,19640,19658,19676,19694,19711,19729,19747,19765,19783,19801,19819,19836,19854,19872, 19890,19908,19926,19944,19962,19980,19998,20016,20034,20052,20071,20089,20107,20125,20143,20161, 20179,20198,20216,20234,20252,20271,20289,20307,20326,20344,20362,20381,20399,20418,20436,20455, 20473,20492,20510,20529,20547,20566,20584,20603,20621,20640,20659,20677,20696,20715,20733,20752, 20771,20790,20808,20827,20846,20865,20884,20902,20921,20940,20959,20978,20997,21016,21035,21054, 21073,21092,21111,21130,21149,21168,21187,21206,21226,21245,21264,21283,21302,21322,21341,21360, 21379,21399,21418,21437,21457,21476,21496,21515,21534,21554,21573,21593,21612,21632,21651,21671, 21690,21710,21730,21749,21769,21789,21808,21828,21848,21867,21887,21907,21927,21946,21966,21986, 22006,22026,22046,22066,22086,22105,22125,22145,22165,22185,22205,22226,22246,22266,22286,22306, 22326,22346,22366,22387,22407,22427,22447,22468,22488,22508,22528,22549,22569,22590,22610,22630, 22651,22671,22692,22712,22733,22753,22774,22794,22815,22836,22856,22877,22897,22918,22939,22960, 22980,23001,23022,23043,23063,23084,23105,23126,23147,23168,23189,23210,23230,23251,23272,23293, 23315,23336,23357,23378,23399,23420,23441,23462,23483,23505,23526,23547,23568,23590,23611,23632, 23654,23675,23696,23718,23739,23761,23782,23804,23825,23847,23868,23890,23911,23933,23954,23976, 23998,24019,24041,24063,24084,24106,24128,24150,24172,24193,24215,24237,24259,24281,24303,24325, 24347,24369,24391,24413,24435,24457,24479,24501,24523,24545,24567,24590,24612,24634,24656,24679, 24701,24723,24746,24768,24790,24813,24835,24857,24880,24902,24925,24947,24970,24992,25015,25038, 25060,25083,25105,25128,25151,25174,25196,25219,25242,25265,25287,25310,25333,25356,25379,25402, 25425,25448,25471,25494,25517,25540,25563,25586,25609,25632,25655,25678,25702,25725,25748,25771, 25795,25818,25841,25864,25888,25911,25935,25958,25981,26005,26028,26052,26075,26099,26123,26146, 26170,26193,26217,26241,26264,26288,26312,26336,26359,26383,26407,26431,26455,26479,26502,26526, 26550,26574,26598,26622,26646,26670,26695,26719,26743,26767,26791,26815,26839,26864,26888,26912, 26937,26961,26985,27010,27034,27058,27083,27107,27132,27156,27181,27205,27230,27254,27279,27304, 27328,27353,27378,27402,27427,27452,27477,27502,27526,27551,27576,27601,27626,27651,27676,27701, 27726,27751,27776,27801,27826,27851,27876,27902,27927,27952,27977,28003,28028,28053,28078,28104, 28129,28155,28180,28205,28231,28256,28282,28307,28333,28359,28384,28410,28435,28461,28487,28513, 28538,28564,28590,28616,28642,28667,28693,28719,28745,28771,28797,28823,28849,28875,28901,28927, 28953,28980,29006,29032,29058,29084,29111,29137,29163,29190,29216,29242,29269,29295,29322,29348, 29375,29401,29428,29454,29481,29507,29534,29561,29587,29614,29641,29668,29694,29721,29748,29775, 29802,29829,29856,29883,29910,29937,29964,29991,30018,30045,30072,30099,30126,30154,30181,30208, 30235,30263,30290,30317,30345,30372,30400,30427,30454,30482,30509,30537,30565,30592,30620,30647, 30675,30703,30731,30758,30786,30814,30842,30870,30897,30925,30953,30981,31009,31037,31065,31093, 31121,31149,31178,31206,31234,31262,31290,31319,31347,31375,31403,31432,31460,31489,31517,31546, 31574,31602,31631,31660,31688,31717,31745,31774,31803,31832,31860,31889,31918,31947,31975,32004, 32033,32062,32091,32120,32149,32178,32207,32236,32265,32295,32324,32353,32382,32411,32441,32470, 32499,32529,32558,32587,32617,32646,32676,32705,32735,32764,32794,32823,32853,32883,32912,32942, 32972,33002,33031,33061,33091,33121,33151,33181,33211,33241,33271,33301,33331,33361,33391,33421, 33451 // one more value because of linear interpolation }; #define LOGFAC 2*16 const mp_uint32 PlayerSTD::logtab[13*8+1] = { LOGFAC*907,LOGFAC*900,LOGFAC*894,LOGFAC*887,LOGFAC*881,LOGFAC*875,LOGFAC*868,LOGFAC*862, LOGFAC*856,LOGFAC*850,LOGFAC*844,LOGFAC*838,LOGFAC*832,LOGFAC*826,LOGFAC*820,LOGFAC*814, LOGFAC*808,LOGFAC*802,LOGFAC*796,LOGFAC*791,LOGFAC*785,LOGFAC*779,LOGFAC*774,LOGFAC*768, LOGFAC*762,LOGFAC*757,LOGFAC*752,LOGFAC*746,LOGFAC*741,LOGFAC*736,LOGFAC*730,LOGFAC*725, LOGFAC*720,LOGFAC*715,LOGFAC*709,LOGFAC*704,LOGFAC*699,LOGFAC*694,LOGFAC*689,LOGFAC*684, LOGFAC*678,LOGFAC*675,LOGFAC*670,LOGFAC*665,LOGFAC*660,LOGFAC*655,LOGFAC*651,LOGFAC*646, LOGFAC*640,LOGFAC*636,LOGFAC*632,LOGFAC*628,LOGFAC*623,LOGFAC*619,LOGFAC*614,LOGFAC*610, LOGFAC*604,LOGFAC*601,LOGFAC*597,LOGFAC*592,LOGFAC*588,LOGFAC*584,LOGFAC*580,LOGFAC*575, LOGFAC*570,LOGFAC*567,LOGFAC*563,LOGFAC*559,LOGFAC*555,LOGFAC*551,LOGFAC*547,LOGFAC*543, LOGFAC*538,LOGFAC*535,LOGFAC*532,LOGFAC*528,LOGFAC*524,LOGFAC*520,LOGFAC*516,LOGFAC*513, LOGFAC*508,LOGFAC*505,LOGFAC*502,LOGFAC*498,LOGFAC*494,LOGFAC*491,LOGFAC*487,LOGFAC*484, LOGFAC*480,LOGFAC*477,LOGFAC*474,LOGFAC*470,LOGFAC*467,LOGFAC*463,LOGFAC*460,LOGFAC*457, LOGFAC*453,LOGFAC*450,LOGFAC*447,LOGFAC*443,LOGFAC*440,LOGFAC*437,LOGFAC*434,LOGFAC*431, LOGFAC*428 // one more value because of linear interpolation }; // This takes the period with 8 bit fractional part mp_sint32 PlayerSTD::getlinfreq(mp_sint32 per) { if (per<0) per=0; if (per>7680*256) per=7680*256; mp_sint32 t = (7680*256-per)/(768*256); mp_sint32 r = (7680*256-per)%(768*256); // Linear interpolation seems to be wrong here /*mp_sint32 frac = r & 255; mp_sint32 r1 = ((lintab[r>>8])<>5; mp_sint32 r2 = ((lintab[(r>>8)+1])<>5; return ((255-frac)*r1 + frac*r2) >> 8;*/ return ((lintab[r>>8])<>5; } // This takes the period with 8 bit fractional part mp_sint32 PlayerSTD::getlogfreq(mp_sint32 per) { return fixeddiv(14317056, per)>>8; } mp_sint32 PlayerSTD::getlinperiod(mp_sint32 note,mp_sint32 relnote,mp_sint32 finetune) { note+=relnote; if (note<1) note=1; if (note>XModule::NOTE_LAST) note=XModule::NOTE_LAST; return ((7680-((note-1)<<6)-(finetune/2))); } mp_sint32 PlayerSTD::interpolate(mp_sint32 eax,mp_sint32 ebx,mp_sint32 ecx,mp_sint32 edi,mp_sint32 esi) { if (ebx==ecx) return edi; mp_sint32 di = ((eax-ebx)*(esi-edi))/(ecx-ebx)+edi; return (mp_sint32)di; } mp_sint32 PlayerSTD::getlogperiod(mp_sint32 note,mp_sint32 relnote,mp_sint32 finetune) { note+=relnote; if (note<1) note=1; if (note>XModule::NOTE_LAST) note=XModule::NOTE_LAST; mp_sint32 ft = finetune; ft+=128; mp_sint32 octave = (note-1)/12; mp_sint32 n = ((note-1)%12)<<3; mp_sint32 pi = (ft>>4)+n; mp_sint32 v1 = logtab[pi]; mp_sint32 v2 = logtab[pi+1]; mp_sint32 t = (ft>>4)-8; //mp_sint32 t = (ft>>4); return interpolate(t,0,15,v1,v2)>>octave; } PlayerSTD::PlayerSTD(mp_uint32 frequency, StatusEventListener* statusEventListener/* = NULL*/) : PlayerBase(frequency), statusEventListener(statusEventListener), chninfo(NULL), lastNumAllocatedChannels(-1) { smpoffs = NULL; attick = NULL; // fill in some default values, don't know if this is necessary tickSpeed = 6; // our tickspeed bpm = 125; // BPM speed ticker = tickSpeed-1; // runs from 0 to tickspeed-1 patternIndex = 0; // holds current pattern index numEffects = 0; // current number of effects numChannels = 0; // current number of channels patDelay = false; patDelayCount = 0; haltFlag = false; options[PlayModeOptionPanning8xx] = true; options[PlayModeOptionPanningE8x] = false; options[PlayModeOptionForcePTPitchLimit] = true; } PlayerSTD::~PlayerSTD() { freeMemory(); } mp_sint32 PlayerSTD::adjustFrequency(mp_uint32 frequency) { mp_uint32 lastNumBeatPackets = getNumBeatPackets()+1; mp_sint32 res = PlayerBase::adjustFrequency(frequency); if (res < 0) return res; // nothing has changed if (lastNumBeatPackets == getNumBeatPackets()+1) return MP_OK; res = allocateStructures(); return res; } mp_sint32 PlayerSTD::setBufferSize(mp_uint32 bufferSize) { mp_uint32 lastNumBeatPackets = getNumBeatPackets()+1; mp_sint32 res = PlayerBase::setBufferSize(bufferSize); if (res < 0) return res; // nothing has changed if (lastNumBeatPackets == getNumBeatPackets()+1) return MP_OK; res = allocateStructures(); return res; } void PlayerSTD::timerHandler(mp_sint32 currentBeatPacket) { PlayerBase::timerHandler(currentBeatPacket); if (paused) return; if (statusEventListener) statusEventListener->timerTickStarted(*this, *module); mp_int64 dummy = (mp_int64)BPMCounter; dummy+=(mp_int64)adder; BPMCounter=(mp_sint32)dummy; // check overflow-carry if ((dummy>>32)) { #ifdef MILKYTRACKER setActiveChannels(initialNumChannels); #else setActiveChannels(module->header.channum); #endif if (statusEventListener) statusEventListener->playerTickStarted(*this, *module); tickhandler(); if (statusEventListener) statusEventListener->playerTickEnded(*this, *module); } if (module->header.flags & XModule::MODULE_AMSENVELOPES) updateBPMIndependent(); #ifdef MILKYTRACKER TModuleChannel* chnInf = chninfo; for (mp_sint32 i = 0; i < initialNumChannels; i++) { // track envelope position state TPrEnv* env = &chnInf->venv; if ((env->envstruc && (env->envstruc->type & 1) && env->envstruc->num) && (env->step < env->envstruc->env[env->envstruc->num-1][0])) { env->timeRecord[currentBeatPacket].pos = env->step; env->timeRecord[currentBeatPacket].envstruc = env->envstruc; } else { env->timeRecord[currentBeatPacket].pos = 0; env->timeRecord[currentBeatPacket].envstruc = NULL; } env = &chnInf->penv; if ((env->envstruc && (env->envstruc->type & 1) && env->envstruc->num) && (env->step < env->envstruc->env[env->envstruc->num-1][0])) { env->timeRecord[currentBeatPacket].pos = env->step; env->timeRecord[currentBeatPacket].envstruc = env->envstruc; } else { env->timeRecord[currentBeatPacket].pos = 0; env->timeRecord[currentBeatPacket].envstruc = NULL; } chnInf++; } #endif if (statusEventListener) statusEventListener->timerTickStarted(*this, *module); } void PlayerSTD::restart(mp_uint32 startPosition/* = 0*/, mp_uint32 startRow/* = 0*/, bool resetMixer/* = true*/, const mp_ubyte* customPanningTable/* = NULL*/, bool playOneRowOnly/* = false*/) { if (chninfo == NULL) return; bpm = module->header.speed; tickSpeed = module->header.tempo; ticker = 0; // after the speed has been assigned, it's time to call PlayerBase::restart PlayerBase::restart(startPosition, startRow, resetMixer, customPanningTable, playOneRowOnly); this->adder = getbpmrate(this->bpm); mp_sint32 i,j; // clean up player specific variables patternIndex = 0; numEffects = 0; numChannels = 0; patDelay = false; patDelayCount = 0; haltFlag = false; startNextRow = -1; reset(); for (i = 0; i < initialNumChannels; i++) chninfo[i].masterVol = 0xff; for (i = 0; i < module->header.channum; i++) chninfo[i].pan = customPanningTable ? customPanningTable[i] : module->header.pan[i]; memset(rowHits, 0, sizeof(rowHits)); for (i = 0; i < (signed)startPosition; i++) for (j = 0; j < 256; j++) visitRow(i*256+j); for (i = 0; i < (signed)startRow; i++) visitRow(startPosition*256+i); } void PlayerSTD::reset() { for (mp_sint32 i = 0; i < initialNumChannels; i++) chninfo[i].clear(); RESET_ALL_LOOPING } void PlayerSTD::resetAllSpeed() { bpm = module->header.speed; tickSpeed = module->header.tempo; ticker = 0; this->adder = getbpmrate(this->bpm); } mp_sint32 PlayerSTD::allocateStructures() { if (lastNumAllocatedChannels != initialNumChannels) { freeMemory(); chninfo = new TModuleChannel[initialNumChannels]; smpoffs = new mp_uint32[initialNumChannels]; attick = new mp_ubyte[initialNumChannels]; lastNumAllocatedChannels = initialNumChannels; } #ifdef MILKYTRACKER for (mp_sint32 i = 0; i < initialNumChannels; i++) chninfo[i].reallocTimeRecord(getNumBeatPackets()+1); #endif return MP_OK; } void PlayerSTD::freeMemory() { if (chninfo) { delete[] chninfo; chninfo = NULL; lastNumAllocatedChannels = -1; } if (smpoffs) { delete[] smpoffs; smpoffs = NULL; } if (attick) { delete[] attick; attick = NULL; } } /////////////////////////////////////////////////////////////////////////////////// // controlling current song position // /////////////////////////////////////////////////////////////////////////////////// void PlayerSTD::clearEffectMemory() { if (!module || !chninfo) return; ticker = 0; //loopstart = execloop = loopcounter=0; mp_sint32 i; for (i = 0; i < module->header.channum; i++) { TModuleChannel *chnInf = &chninfo[i]; RESETLOOPING } patDelay = false; patDelayCount = 0; haltFlag = false; startNextRow = -1; memset(rowHits, 0, sizeof(rowHits)); for (i = 0; i < poscnt; i++) for (mp_sint32 j = 0; j < 256; j++) visitRow(i*256+j); for (i = 0; i < (signed)rowcnt; i++) visitRow(poscnt*256+i); } void PlayerSTD::prenvelope(mp_sint32 c,TPrEnv *env,mp_sint32 keyon) { if (env->envstruc!=NULL && (env->envstruc->type&1)) { // if we're sitting on a sustain point and key is on, we don't advance further if ((env->envstruc->type&2) && (env->a==env->envstruc->sustain) && (env->step == env->envstruc->env[env->a][0]) && keyon) return; if ((env->step != env->envstruc->env[env->b][0]) && (env->b < env->envstruc->num)) env->step++; if (env->step == env->envstruc->env[env->b][0]) { if ((env->envstruc->type&4)) { if ((!(env->envstruc->type&8) || keyon) && !(!keyon && (env->envstruc->type&2) && env->envstruc->sustain == env->envstruc->loope)) // Break envelope if sustain pt == loop end point AND sustain is enabled AND key off is send { if (env->b==env->envstruc->loope) { env->a=env->envstruc->loops; env->b=env->envstruc->loops+1; env->step=env->envstruc->env[env->a][0]; return; } } } // Increase envelope position if there are more points to come if (env->b < env->envstruc->num - 1) { env->a++; env->b++; } } } } mp_sint32 PlayerSTD::getenvval(mp_sint32 c,TPrEnv *env,mp_sint32 n) { if (env->envstruc==NULL) return n; if ((env->envstruc->type&1)) { mp_sint32 dx = (env->envstruc->env[env->b][0]-env->envstruc->env[env->a][0]); if (dx==0) dx=1; mp_sint32 t = (env->envstruc->env[env->b][0]-env->step)*65536/dx; mp_sint32 y0 = env->envstruc->env[env->a][1]; mp_sint32 y1 = env->envstruc->env[env->b][1]; mp_sint32 y = (y0*t)+(y1*(65536-t)); return y>>16; } else return n; } mp_sint32 PlayerSTD::getfinalperiod(mp_sint32 c,mp_sint32 p) { mp_sint32 envVib = 0; p<<=8; if (chninfo[c].vibenv.envstruc != NULL && (chninfo[c].vibenv.envstruc->type&1)) { mp_sint32 eval = (getenvval(c,&chninfo[c].vibenv,128)-128) << (chninfo[c].vibenv.envstruc->type>>6); // AMS doc says vibrato with amplify set to 8 equals vibrato 0xF // => alright envVib = (eval*61408)>>(3+16-8); } if (chninfo[c].avibused) { mp_ubyte vp = chninfo[c].avibcnt>>2; mp_ubyte vd = chninfo[c].avibdepth; mp_sint32 vm = 0; mp_sint32 vl = 0; switch (chninfo[c].avibused) { // sine case 1 : vl=vibtab[vp&31]; break; // square case 2 : vl=255; break; // ramp down case 3 : { vl=((vp&31)*539087)>>16; if ((vp&63)>31) vl=255-vl; vl=-vl; }; break; // ramp up case 4 : { vl=((vp&31)*539087)>>16; if ((vp&63)>31) vl=255-vl; }; break; } vm = ((vl*vd)>>1); if (chninfo[c].avibsweep) { vm*=(mp_sint32)chninfo[c].avibswcnt * 256; vm/=chninfo[c].avibsweep; vm>>=8; } if ((vp&63)>31) vm=-vm; return (p+vm+envVib); } else return (p+envVib); } void PlayerSTD::playInstrument(mp_sint32 chn, TModuleChannel* chnInf, bool bNoRestart/* = false*/) { if (chnInf->ins && chnInf->ins <= module->header.insnum) { if (module->instr[chnInf->ins-1].samp && chnInf->smp != -1) { chnInf->flags &= ~CHANNEL_FLAGS_UPDATE_IGNORE; mp_sint32 i = chnInf->smp; // start out with the flags for 16bit sample mp_sint32 flags = ((module->smp[i].type&16)>>4)<<2; // add looping + backward flags flags |= module->smp[i].type&(3+128); // one shot forward looping? flags |= module->smp[i].type & 32; // force forward playing if (chnInf->flags & CHANNEL_FLAGS_FORCE_FORWARD) flags &= ~128; // force backward playing if (chnInf->flags & CHANNEL_FLAGS_FORCE_BACKWARD) flags |= 128; if (flags&3) { if (chnInf->flags & CHANNEL_FLAGS_FORCE_BILOOP) flags = (flags & ~3) | 2; // bNoRestart = false means play new sample from beginning or sample offset if (!bNoRestart) { playSample(chn, (mp_sbyte*)module->smp[i].sample, module->smp[i].samplen, smpoffs[chn], 0, // sample offset fraction !playModeChopSampleOffset, module->smp[i].loopstart, module->smp[i].loopstart+module->smp[i].looplen, flags); } // bNoRestart = true means play new sample from beginning of the last sample else { mp_sint32 smpoffset = smpoffs[chn] ? smpoffs[chn] : getSamplePos(chn); mp_sint32 smpoffsetfrac = smpoffs[chn] ? 0 : getSamplePosFrac(chn); playSample(chn, (mp_sbyte*)module->smp[i].sample, module->smp[i].samplen, smpoffset, smpoffsetfrac, // sample offset fraction true, module->smp[i].loopstart, module->smp[i].loopstart+module->smp[i].looplen, flags); } } else { // bNoRestart = false means play new sample from beginning or sample offset if (!bNoRestart) { playSample(chn,(mp_sbyte*)module->smp[i].sample, module->smp[i].samplen, smpoffs[chn], 0, // sample offset fraction !playModeChopSampleOffset, 0, module->smp[i].samplen, flags); } // bNoRestart = true means play new sample from beginning of the last sample AND don't ramp volume up else { mp_sint32 smpoffset = smpoffs[chn] ? smpoffs[chn] : getSamplePos(chn); mp_sint32 smpoffsetfrac = smpoffs[chn] ? 0 : getSamplePosFrac(chn); playSample(chn,(mp_sbyte*)module->smp[i].sample, module->smp[i].samplen, smpoffset, smpoffsetfrac, // sample offset fraction true, 0, module->smp[i].samplen, flags); } } } else { stopSample(chn); } } } void PlayerSTD::updatePlayModeFlags() { // the following flags are exclusive newInsPTFlag = (module->header.flags & XModule::MODULE_PTNEWINSTRUMENT); newInsST3Flag = (module->header.flags & XModule::MODULE_ST3NEWINSTRUMENT); oldPTInsChangeFlag = (module->header.flags & XModule::MODULE_OLDPTINSTRUMENTCHANGE); // 4-channel Protracker module = EXACT PTK replay should be applied playModePT = ((module->header.flags & XModule::MODULE_PTNEWINSTRUMENT) && (module->header.channum == 4) && playMode == PlayMode_Auto) || (playMode == PlayMode_ProTracker2) || (playMode == PlayMode_ProTracker3); // This is a module with PTK limits playModePTPitchLimit = ((module->header.flags & XModule::MODULE_PTNEWINSTRUMENT) && playMode == PlayMode_Auto) || (playMode == PlayMode_ProTracker2) || (playMode == PlayMode_ProTracker3); // Override module playmode settings switch (playMode) { case PlayMode_ProTracker2: newInsPTFlag = true; newInsST3Flag = false; oldPTInsChangeFlag = true; break; case PlayMode_ProTracker3: newInsPTFlag = true; newInsST3Flag = false; oldPTInsChangeFlag = false; break; case PlayMode_ScreamTracker3: newInsPTFlag = false; newInsST3Flag = true; oldPTInsChangeFlag = false; break; case PlayMode_FastTracker2: newInsPTFlag = false; newInsST3Flag = false; oldPTInsChangeFlag = false; break; case PlayMode_ImpulseTracker: case PlayMode_Auto: break; } playModeFT2 = (playMode == PlayMode_FastTracker2 ? true : false); if (playMode == PlayMode_Auto && (module->header.flags & XModule::MODULE_XMARPEGGIO)) playModeFT2 = true; // Chop off samples which sample offsets greater sample length? playModeChopSampleOffset = playModeFT2 || (playMode == PlayMode_ProTracker3); } static inline mp_sint32 myMod(mp_sint32 a, mp_sint32 b) { mp_sint32 r = a % b; return r < 0 ? b + r : r; } mp_sint32 PlayerSTD::calcVibrato(TModuleChannel* chnInf, mp_sint32 effcnt) { mp_sint32 vp = chnInf->vibpos[effcnt]; mp_sint32 vd = chnInf->vibdepth[effcnt]; mp_sint32 vm = ((vibtab[vp&31]*vd)>>(7-2)); if ((vp&63)>31) vm=-vm; return vm; } void PlayerSTD::doTickEffect(mp_sint32 chn, TModuleChannel* chnInf, mp_sint32 effcnt) { mp_ubyte x,y; mp_ubyte vp,vd; mp_sint32 vm; // IN PTK playmode, we've got a bunch of tick 0 effects // which are repeated as long as the pattern delay applies // ONLY valid for PTK playmode & effects, for other effects this leads to undefined results if (playModePT) { if (patDelay && ticker && // Those effects are NOT executed chnInf->eff[effcnt] > 0x09 && chnInf->eff[effcnt] != 0x33 && chnInf->eff[effcnt] != 0x34 && chnInf->eff[effcnt] != 0x35 && chnInf->eff[effcnt] != 0x36 && chnInf->eff[effcnt] != 0x37 && chnInf->eff[effcnt] != 0x38 && chnInf->eff[effcnt] < 0x3C) { if (!(ticker % tickSpeed)) doEffect(chn, chnInf, effcnt); } } switch (chnInf->eff[effcnt]) { // portamento up case 0x01: if (ticker) { chnInf->per-=chnInf->old[effcnt].portaup*4; handlePeriodUnderflow(chn); chnInf->hasVibrato = false; chnInf->finalVibratoPer = 0; } break; // portamento down case 0x02: if (ticker) { chnInf->per+=chnInf->old[effcnt].portadown*4; handlePeriodOverflow(chn); chnInf->hasVibrato = false; chnInf->finalVibratoPer = 0; } break; // note portamento case 0x03: { if (ticker&&chnInf->destnote) { // If this is an XM module we need to store the last portamento operand always in the buffer for the second effect mp_sint32 op = ((module->header.flags & XModule::MODULE_XMPORTANOTEBUFFER) && numEffects == 2) ? chnInf->old[1].portanote : chnInf->old[effcnt].portanote; if (chnInf->destper>chnInf->per) { chnInf->per+=op*4; if (chnInf->per>chnInf->destper) chnInf->per=chnInf->destper; } else if (chnInf->destperper) { chnInf->per-=op*4; if (chnInf->perdestper) chnInf->per=chnInf->destper; } chnInf->hasVibrato = false; chnInf->finalVibratoPer = 0; } break; } // vibrato (applying extra hacks for XM compatibility) // In FT2 the vibrato contained in the volume column works a bit different // than the vibrato in the effect column: // After the vibrato has occured in the volumn column the pitch of the last // vibrato calculation stays on until the next pitch effect occurs case 0x04: { x = chnInf->eop[effcnt]>>4; y = chnInf->eop[effcnt]&0xf; mp_sint32 effNum = effcnt; // in FT2 play mode the last vibrato // value comes always from the effect column (index 1) if ((module->header.flags & XModule::MODULE_XMPORTANOTEBUFFER) && numEffects == 2) { effNum = 1; } if (x) chnInf->vibspeed[effNum]=x; if (y) chnInf->vibdepth[effNum]=y; mp_sint32 vmp = chnInf->per; vm = calcVibrato(chnInf, effNum); if (ticker) chnInf->vibpos[effNum]+=chnInf->vibspeed[effNum]; vmp+=vm; mp_sint32 maxTicks = patDelay ? patDelayCount : tickSpeed; // the vibrato in the volumn volumn (index 0) works differently // before applying that, we assure that this is an XM module by checking // the module header (checking for FT2 replay mode is not enough, // since it won't guarantee that there is volume and effect column) if ((module->header.flags & XModule::MODULE_XMVOLCOLUMNVIBRATO) && ticker == maxTicks - 1) { // if this is a volume column vibrato we keep the pitch if (!effcnt) { chnInf->finalVibratoPer = vmp; chnInf->hasVibrato = true; } // if not we reset that else { chnInf->finalVibratoPer = 0; chnInf->hasVibrato = false; } } setFreq(chn,getfreq(chn,getfinalperiod(chn,vmp),chnInf->freqadjust)); break; } // note porta + volume slide case 0x05: { if (ticker&&chnInf->destnote) { // If this is an XM module we need to store the last portamento operand always in the buffer for the second effect mp_sint32 op = (module->header.flags & XModule::MODULE_XMPORTANOTEBUFFER) ? chnInf->old[1].portanote : chnInf->old[effcnt].portanote; if (chnInf->destper>chnInf->per) { chnInf->per+=op*4; if (chnInf->per>chnInf->destper) chnInf->per=chnInf->destper; } else if (chnInf->destperper) { chnInf->per-=op*4; if (chnInf->perdestper) chnInf->per=chnInf->destper; } chnInf->hasVibrato = false; chnInf->finalVibratoPer = 0; } x = chnInf->old[effcnt].volslide>>4; y = chnInf->old[effcnt].volslide&0xf; if (x&&y) y = 0; // i'm not completely sure about this // that case isn't mentioned mp_sint32 the S3M docs if (!(module->header.flags & XModule::MODULE_OLDS3MVOLSLIDES) && ticker == 0) break; if (x) { chnInf->vol+=x*4; if (chnInf->vol>255) chnInf->vol=255; } if (y) { chnInf->vol-=y*4; if (chnInf->vol<0) chnInf->vol=0; } chnInf->tremorVol = chnInf->tremoloVol = chnInf->vol; chnInf->hasTremolo = false; chnInf->finalTremoloVol = 0; break; } // vibrato + volume slide case 0x06: { vm = calcVibrato(chnInf, effcnt); if (ticker) chnInf->vibpos[effcnt]+=chnInf->vibspeed[effcnt]; setFreq(chn,getfreq(chn,getfinalperiod(chn,chnInf->per+vm),chnInf->freqadjust)); x = chnInf->old[effcnt].volslide>>4; y = chnInf->old[effcnt].volslide&0xf; if (x&&y) y = 0; // i'm not completely sure about this // that case isn't mentioned in the S3M docs if (!(module->header.flags & XModule::MODULE_OLDS3MVOLSLIDES) && ticker == 0) break; if (x) { chnInf->vol+=x*4; if (chnInf->vol>255) chnInf->vol=255; } if (y) { chnInf->vol-=y*4; if (chnInf->vol<0) chnInf->vol=0; } chnInf->tremorVol = chnInf->tremoloVol = chnInf->vol; chnInf->hasTremolo = false; chnInf->finalTremoloVol = 0; break; } // tremolo, this is not the exact FT2 way. FT2 way doesn't make sense at all, fuck it // (applying extra hacks for XM compatibility) case 0x07: { x = chnInf->eop[effcnt]>>4; y = chnInf->eop[effcnt]&0xf; if (x) chnInf->trmspeed[effcnt]=x; if (y) chnInf->trmdepth[effcnt]=y; vp = chnInf->trmpos[effcnt]; vd = chnInf->trmdepth[effcnt]; mp_sint32 vmp = (ticker == 0 ? (chnInf->hasTremolo ? chnInf->finalTremoloVol : chnInf->vol) : chnInf->tremoloVol); if (ticker) { vm = ((vibtab[vp&31]*vd)>>(6-2)); if ((vp&63)>31) vm=-vm; vmp+=vm; if (vmp<0) vmp=0; if (vmp>255) vmp=255; chnInf->trmpos[effcnt]+=chnInf->trmspeed[effcnt]; } if (ticker == tickSpeed - 1) { chnInf->finalTremoloVol = vmp; chnInf->hasTremolo = true; } setVol(chn,getvolume(chn,vmp)); break; } // volume slide case 0x0A: { x = chnInf->old[effcnt].volslide>>4; y = chnInf->old[effcnt].volslide&0xf; // 08/31/04: fixed... // don't reject volume slide if both operands are set // instead, slide up // see other volume slides as well if (x&&y) y = 0; if (ticker) { if (x) { chnInf->vol+=x*4; if (chnInf->vol>255) chnInf->vol=255; } if (y) { chnInf->vol-=y*4; if (chnInf->vol<0) chnInf->vol=0; } chnInf->tremorVol = chnInf->tremoloVol = chnInf->vol; chnInf->hasTremolo = false; chnInf->finalTremoloVol = 0; } break; } // global volume slide case 0x11: { x = chnInf->old[effcnt].gvolslide>>4; y = chnInf->old[effcnt].gvolslide&0xf; if (x&&y) y = 0; if (ticker) { if (x) { mainVolume+=x*4; if (mainVolume>255) mainVolume=255; } if (y) { mainVolume-=y*4; if (mainVolume<0) mainVolume=0; } } break; } // panning slide case 0x19: { x = chnInf->old[effcnt].panslide>>4; y = chnInf->old[effcnt].panslide&0xf; if (x&&y) y = 0; if (ticker) { if (x) { chnInf->pan+=x; if (chnInf->pan>255) chnInf->pan=255; } if (y) { chnInf->pan-=y; if (chnInf->pan<0) chnInf->pan=0; } } break; } // retrig + volslide (I worked my ass OFF on this fucking shit) // A few notes about FT2 playback: // Rxx Retrig doesn't restart envelopes, even with instrument set // It only retrigs if the last note has been been within valid range: 1 <= note <= XModule::NOTE_LAST case 0x1B: { if ((chnInf->old[effcnt].retrig&0xf)) { if (chnInf->retrigcounterRxx[effcnt] >= chnInf->retrigmaxRxx[effcnt]) { chnInf->retrigcounterRxx[effcnt] = 0; chnInf->retrigmaxRxx[effcnt] = chnInf->old[effcnt].retrig&0xf; switch (chnInf->old[effcnt].retrig>>4) { case 0x1 : chnInf->vol-=4; if (chnInf->vol<0) chnInf->vol=0; break; case 0x2 : chnInf->vol-=8; if (chnInf->vol<0) chnInf->vol=0; break; case 0x3 : chnInf->vol-=16; if (chnInf->vol<0) chnInf->vol=0; break; case 0x4 : chnInf->vol-=32; if (chnInf->vol<0) chnInf->vol=0; break; case 0x5 : chnInf->vol-=64; if (chnInf->vol<0) chnInf->vol=0; break; case 0x6 : chnInf->vol=(chnInf->vol*2)/3; break; case 0x7 : chnInf->vol>>=1; break; case 0x9 : chnInf->vol+=4; if (chnInf->vol>255) chnInf->vol=255; break; case 0xA : chnInf->vol+=8; if (chnInf->vol>255) chnInf->vol=255; break; case 0xB : chnInf->vol+=16; if (chnInf->vol>255) chnInf->vol=255; break; case 0xC : chnInf->vol+=32; if (chnInf->vol>255) chnInf->vol=255; break; case 0xD : chnInf->vol+=64; if (chnInf->vol>255) chnInf->vol=255; break; case 0xE : chnInf->vol=(chnInf->vol*3)>>1; if (chnInf->vol>255) chnInf->vol=255; break; case 0xF : chnInf->vol<<=1; if (chnInf->vol>255) chnInf->vol=255; break; } chnInf->tremorVol = chnInf->tremoloVol = chnInf->vol; chnInf->hasTremolo = false; chnInf->finalTremoloVol = 0; if (chnInf->validnote) playInstrument(chn, chnInf); } chnInf->retrigcounterRxx[effcnt]++; } break; } // tremor (I worked my ass OFF on this fucking shit) case 0x1D: { x = (chnInf->old[effcnt].tremor>>4) + 1; y = (chnInf->old[effcnt].tremor&0xf) + 1; mp_sint32 v = (ticker == 0 ? chnInf->vol : chnInf->tremorVol); if (ticker && chnInf->tremorcnt[effcnt] % (x+y) >= x) v = 0; if (ticker) chnInf->tremorcnt[effcnt]++; if (ticker == tickSpeed - 1) { chnInf->vol = v; chnInf->tremoloVol = v; chnInf->hasTremolo = false; chnInf->finalTremoloVol = 0; } setVol(chn,getvolume(chn,v)); break; } // MDL Subcommands case 0x1E: { mp_ubyte eff = chnInf->eop[effcnt]>>4; mp_ubyte eop = chnInf->eop[effcnt]&0xf; switch (eff) { case 0x1 : if (ticker) { chnInf->pan-=eop; if (chnInf->pan<0) chnInf->pan=0; } break; case 0x2 : if (ticker) { chnInf->pan+=eop; if (chnInf->pan>255) chnInf->pan=255; } break; case 0xA : if (ticker) { mainVolume+=eop; if (mainVolume>255) mainVolume=255; } break; case 0xB : if (ticker) { mainVolume-=eop; if (mainVolume<0) mainVolume=0; } break; } break; } // arpeggio case 0x20: { if (chnInf->note) { mp_sint32 r = 0; mp_sint32 note = 0, onote = chnInf->note; //mp_sint32 c4spd = chnInf->c4spd; mp_sint32 relnote = chnInf->relnote; mp_sint32 finetune = chnInf->finetune; mp_sint32 per,nper; mp_ubyte eop = chnInf->old[effcnt].arpeg; mp_sint32 x = eop>>4; mp_sint32 y = eop&0xf; if (playModeFT2) { // Comment from Saga Musix/OpenMPT: // FT2 arpeggio is really screwed because the arpeggio note offset is computed using a LUT // instead of simply doing tick%3 or whatever. The problem is... this LUT only has 16 elements // so with more than 16 ticks/row, it overflows. The vibrato table happens to be placed right // after the arpeggio table in FT2, so it reads values from that table. The first value in the // vibrato table is 0, all values after that are greater than 1, which is interpreted as the // second arpeggio note. // Since FT2 counts ticks backwards, this also explains why arpeggio is "upside down" in FT2 // compared to e.g. MOD, S3M, IT - the LUT is read back to front. // Arpeggio at speed 0 is not emulated properly. if (ticker == 0) r = 0; else { // Emulate FT2 behaviour (thanks Saga_Musix/OpenMPT) r = tickSpeed - ticker; if(r > 16) r = 2; else if(r == 16) r = 0; else r %= 3; } } else { r = (ticker)%3; } if (r == 0) { note=chnInf->note; } else if (r == 1) { note=chnInf->note+x; } else if (r == 2) { note=chnInf->note+y; } // Perform note clipping for XM note range if necessary if ((r != 0) && // Only done for arpeggio tick 1 & 2 (module->header.flags & XModule::MODULE_XMNOTECLIPPING) && // Only when enabled (note + relnote > 96)) // Only when exceeding range { note-=((note+relnote) - 97); } // special case for STM arpeggio (thanks to Skaven/FC) // Will not work in combination with other period // related effects if (module->header.flags & XModule::MODULE_STMARPEGGIO) { chnInf->per = getperiod(note,relnote,finetune); setFreq(chn,getfreq(chn,getfinalperiod(chn,chnInf->per),chnInf->freqadjust)); } else { nper=getperiod(note,relnote,finetune); per=getperiod(onote,relnote,finetune); //nper = (8363*periods[(note-1)%12]*16>>(((note-1)/12)))/c4spd; //per = (8363*periods[(onote-1)%12]*16>>(((onote-1)/12)))/c4spd; nper-=per; nper+=chnInf->per; setFreq(chn,getfreq(chn,getfinalperiod(chn,nper),chnInf->freqadjust)); } } break; } // normal retrig // A few notes about FT2 playback: // E9x Retrig does!!! (while Rxx doesn't) restart envelopes, even without instrument set // It only retrigs if the last note has been been within valid range: 1 <= note <= XModule::NOTE_LAST case 0x39: { if ((chnInf->eop[effcnt]&0xf) && ticker) { if (chnInf->retrigcounterE9x[effcnt] >= chnInf->retrigmaxE9x[effcnt]) { chnInf->retrigcounterE9x[effcnt] = 0; chnInf->retrigmaxE9x[effcnt] = chnInf->eop[effcnt]&0xf; // trigger envelopes ALWAYS triggerInstrumentFX(chnInf); chnInf->keyon = true; // trigger replay only when last note has been valid if (chnInf->validnote) playInstrument(chn, chnInf); } chnInf->retrigcounterE9x[effcnt]++; } break; } // note cut case 0x3C: // S3M ignores tick 0 note cut if ((module->header.flags & XModule::MODULE_ST3NOTECUT) && !chnInf->eop[effcnt]) break; // Fasttracker cuts note at tick 0 //if (chnInf->eop[effcnt]) { if (ticker == chnInf->eop[effcnt]) { chnInf->vol=0; chnInf->tremorVol = chnInf->tremoloVol = chnInf->vol; chnInf->hasTremolo = false; chnInf->finalTremoloVol = 0; } //} break; // MDL porta up case 0x43: if (ticker) { if (chnInf->old[effcnt].portaup<=0xDF) { chnInf->per-=chnInf->old[effcnt].portaup*4; handlePeriodUnderflow(chn); chnInf->hasVibrato = false; chnInf->finalVibratoPer = 0; } } break; // MDL porta down case 0x44: if (ticker) { if (chnInf->old[effcnt].portaup<=0xDF) { chnInf->per+=chnInf->old[effcnt].portaup*4; handlePeriodOverflow(chn); chnInf->hasVibrato = false; chnInf->finalVibratoPer = 0; } } break; // MDL volslide up case 0x45: if (ticker) { if (chnInf->old[effcnt].volslide<=0xDF) { chnInf->vol+=chnInf->old[effcnt].volslide; if (chnInf->vol>255) chnInf->vol=255; } chnInf->tremorVol = chnInf->tremoloVol = chnInf->vol; chnInf->hasTremolo = false; chnInf->finalTremoloVol = 0; } break; // MDL volslide down case 0x46: if (ticker) { if (chnInf->old[effcnt].volslide<=0xDF) { chnInf->vol-=chnInf->old[effcnt].volslide; if (chnInf->vol<0) chnInf->vol=0; } chnInf->tremorVol = chnInf->tremoloVol = chnInf->vol; chnInf->hasTremolo = false; chnInf->finalTremoloVol = 0; } break; // S3M porta up case 0x47: if (ticker) { if (chnInf->old[effcnt].portaup<=0xDF) { chnInf->per-=chnInf->old[effcnt].portaup*4; // Special for ST3 if (chnInf->per <= 0) stopSample(chn); chnInf->hasVibrato = false; chnInf->finalVibratoPer = 0; } } break; // S3M porta down case 0x48: if (ticker) { if (chnInf->old[effcnt].portaup<=0xDF) { chnInf->per+=chnInf->old[effcnt].portaup*4; chnInf->hasVibrato = false; chnInf->finalVibratoPer = 0; } } break; // S3M volslide case 0x49: { if (!(module->header.flags & XModule::MODULE_OLDS3MVOLSLIDES) && ticker == 0) break; x = chnInf->old[effcnt].volslide>>4; y = chnInf->old[effcnt].volslide&0xf; if (x == 0xF && y) break; if (y == 0xF && x) break; if (x && y) y = 0; if (x) { chnInf->vol+=x*4; if (chnInf->vol>255) chnInf->vol=255; } if (y) { chnInf->vol-=y*4; if (chnInf->vol<0) chnInf->vol=0; } chnInf->tremorVol = chnInf->tremoloVol = chnInf->vol; chnInf->hasTremolo = false; chnInf->finalTremoloVol = 0; break; } // fine vibrato case 0x4A: { x = chnInf->eop[effcnt]>>4; y = chnInf->eop[effcnt]&0xf; if (x) chnInf->vibspeed[effcnt]=x; if (y) chnInf->vibdepth[effcnt]=y; mp_sint32 vmp = chnInf->per; vp = chnInf->vibpos[effcnt]; vd = chnInf->vibdepth[effcnt]; vm = ((vibtab[vp&31]*vd)>>7); if ((vp&63)>31) vm=-vm; vmp+=vm; if (ticker) chnInf->vibpos[effcnt]+=chnInf->vibspeed[effcnt]; setFreq(chn,getfreq(chn,getfinalperiod(chn,vmp),chnInf->freqadjust)); break; } // high precision portamento up case 0x4D: if (ticker) { chnInf->per-=chnInf->old[effcnt].portaup; handlePeriodUnderflow(chn); chnInf->hasVibrato = false; chnInf->finalVibratoPer = 0; } break; // high precision portamento down case 0x4E: if (ticker) { chnInf->per+=chnInf->old[effcnt].portaup; handlePeriodOverflow(chn); chnInf->hasVibrato = false; chnInf->finalVibratoPer = 0; } break; // XM: Key off at tick case 0x14: // not at tick 0 if (!ticker) break; // AMS: Key off at tick case 0x51: if (ticker == chnInf->eop[effcnt]) { if (chnInf->venv.envstruc!=NULL) { if (!(chnInf->venv.envstruc->type&1)) chnInf->vol = 0; } else chnInf->vol=0; chnInf->tremorVol = chnInf->tremoloVol = chnInf->vol; chnInf->hasTremolo = false; chnInf->finalTremoloVol = 0; chnInf->keyon = false; } break; // Oktalyzer: Note slide down /*case 0x52: if (ticker && chnInf->note) { if (chnInf->note > chnInf->eop[effcnt]) { chnInf->note-=chnInf->eop[effcnt]; if (chnInf->note < 3*12) chnInf->note = 3*12; chnInf->per = getperiod(chnInf->note,chnInf->relnote,chnInf->finetune); } } break; // Oktalyzer: Note slide up case 0x53: if (ticker && chnInf->note) { if (chnInf->note < 120-chnInf->eop[effcnt]) { chnInf->note+=chnInf->eop[effcnt]; if (chnInf->note > 6*12) chnInf->note = 6*12; chnInf->per = getperiod(chnInf->note,chnInf->relnote,chnInf->finetune); } } break;*/ // Oktalyzer arpeggio I, II, III case 0x56: case 0x57: case 0x58: { if (chnInf->note) { mp_sint32 eff = chnInf->eff[effcnt]-0x56; mp_sint32 r; if (eff == 1) r = (ticker)&3; else r = (ticker)%3; mp_sint32 note = 0,onote = chnInf->note; mp_sint32 relnote = chnInf->relnote; mp_sint32 finetune = chnInf->finetune; mp_sint32 per,nper; mp_ubyte eop = chnInf->eop[effcnt]; mp_sint32 x = eop>>4; mp_sint32 y = eop&0xf; switch (eff) { case 0x00: { switch (r) { case 0 : note=chnInf->note-x; break; case 1 : note=chnInf->note; break; case 2 : note=chnInf->note+y; break; } break; } case 0x01: { switch (r) { case 0 : note=chnInf->note; break; case 1 : note=chnInf->note+y; break; case 2 : note=chnInf->note; break; case 3 : note=chnInf->note-x; break; } break; } case 0x02: { switch (r) { case 0 : note=chnInf->note+y; break; case 1 : note=chnInf->note+y; break; case 2 : note=chnInf->note; break; } break; } } nper=getperiod(note,relnote,finetune); per=getperiod(onote,relnote,finetune); nper-=per; nper+=chnInf->per; setFreq(chn,getfreq(chn,getfinalperiod(chn,nper),chnInf->freqadjust)); } break; } // Global volslide case 0x59: { if (ticker == 0) break; x = chnInf->old[effcnt].gvolslide>>4; y = chnInf->old[effcnt].gvolslide&0xf; if (x == 0xF && y) break; if (y == 0xF && x) break; if (x && y) y = 0; if (x) { mainVolume+=x*4; if (mainVolume>255) mainVolume=255; } if (y) { mainVolume-=y*4; if (mainVolume<0) mainVolume=0; } break; } } } void PlayerSTD::doEffect(mp_sint32 chn, TModuleChannel* chnInf, mp_sint32 effcnt) { mp_ubyte x,y; mp_sint32 eop=chnInf->eop[effcnt]; switch (chnInf->eff[effcnt]) { case 0x01 : if (eop) chnInf->old[effcnt].portaup=eop; break; case 0x02 : if (eop) chnInf->old[effcnt].portadown=eop; break; case 0x03 : if (module->header.flags & XModule::MODULE_XMPORTANOTEBUFFER) { // XM compatible playing? /*if (!newInsPTFlag && !newInsST3Flag && !oldPTInsChangeFlag && !note && chnInf->note) { chnInf->destper=getperiod(chnInf->note,chnInf->relnote,chnInf->finetune); }*/ ASSERT(numEffects >= 2); if (eop) chnInf->old[1].portanote=eop; } else { if (eop) chnInf->old[effcnt].portanote=eop; } break; case 0x05 : if (eop) chnInf->old[effcnt].volslide=eop; break; case 0x06 : if (eop) chnInf->old[effcnt].volslide=eop; break; case 0x08 : if (options[PlayModeOptionPanning8xx]) chnInf->pan=eop; break; case 0x09 : { if (eop) chnInf->old[effcnt].smpoffset = eop; smpoffs[chn] = chnInf->old[effcnt].smpoffset<<8; }; break; case 0x0A : if (eop) chnInf->old[effcnt].volslide=eop; break; case 0x0B : { pjump = 1; pjumppos = eop; pjumprow = 0; pjumpPriority = MP_NUMEFFECTS*chn + effcnt; }; break; case 0x0C : chnInf->vol = chnInf->tremorVol = chnInf->tremoloVol = eop; chnInf->hasTremolo = false; chnInf->finalTremoloVol = 0; chnInf->hasSetVolume = true; break; case 0x0D : { pbreak=1; pbreakpos = (eop>>4)*10+(eop&0xf); if (pbreakpos > 63) pbreakpos = 0; pbreakPriority = MP_NUMEFFECTS*chn + effcnt; }; break; case 0x0F : { if (eop) { if (eop>=32) { bpm=eop; this->adder = getbpmrate(eop); } } else { haltFlag = true; } }; break; case 0x10 : mainVolume=eop; break; case 0x11 : if (eop) chnInf->old[effcnt].gvolslide=eop; break; // set envelope position case 0x15 : { chnInf->venv.setToTick(eop); if (chnInf->venv.envstruc && chnInf->venv.envstruc->type & 2) { // FT2 only updates the pan envelope position if the volume envelope's sustain point is enabled chnInf->penv.setToTick(eop); } break; } // set BPM case 0x16 : { if (eop) { bpm=eop; this->adder = getbpmrate(eop); } }; break; case 0x19 : if (eop) chnInf->old[effcnt].panslide=eop; break; case 0x1B : { x = eop & 0xf; y = eop & 0xF0; if (x) chnInf->old[effcnt].retrig = (chnInf->old[effcnt].retrig & 0xF0) | x; if (y) chnInf->old[effcnt].retrig = (chnInf->old[effcnt].retrig & 0x0F) | y; eop = chnInf->old[effcnt].retrig; chnInf->retrigmaxRxx[effcnt] = eop & 0xF; // Simulate really nasty FT2 bug: // When a volume is set in the volume column // the interval for the first retrig is lengthen by one tick if (chnInf->hasSetVolume && playModeFT2) { chnInf->retrigcounterRxx[effcnt] = -1; chnInf->hasSetVolume = false; } // If a note is playing on tick 0, increase counter if (chnInf->currentnote && chnInf->validnote) chnInf->retrigcounterRxx[effcnt]++; break; } // Tremor case 0x1D : if (eop) chnInf->old[effcnt].tremor=eop; break; // MDL set sample offset case 0x1F : { smpoffs[chn]=((mp_sint32)eop<<8)+((mp_sint32)chnInf->eop[(effcnt+1)%numEffects]<<16); }; break; case 0x20 : if (eop) chnInf->old[effcnt].arpeg=eop; break; // ULT set sample offset case 0x21 : { smpoffs[chn]=((mp_sint32)eop<<10); }; break; // ULT Fine set sample offset case 0x22 : { mp_sint32 op = (((mp_sint32)eop)<<8) + ((mp_sint32)chnInf->eop[(effcnt+1)%numEffects]); smpoffs[chn]=op<<2; }; break; // ULT special commands case 0x23 : { if (((eop >> 4) == 1 || (eop&0xF) == 1) || ((eop >> 4) == 12 || (eop&0xF) == 12)) { breakLoop(chn); } if ((eop >> 4) == 2 || (eop&0xF) == 2) { chnInf->flags &= ~CHANNEL_FLAGS_FORCE_FORWARD; chnInf->flags |= CHANNEL_FLAGS_FORCE_BACKWARD; setBackward(chn); } }; break; // Far position jump (PLM support) case 0x2B : { pjump = 1; pjumppos = eop; pjumprow = chnInf->eop[(effcnt+1)%numEffects]; pjumpPriority = MP_NUMEFFECTS*chn + effcnt; }; break; // Fine porta up case 0x31 : { if (eop) chnInf->old[effcnt].fineportaup=eop; chnInf->per-=chnInf->old[effcnt].fineportaup*4; handlePeriodUnderflow(chn); chnInf->hasVibrato = false; chnInf->finalVibratoPer = 0; }; break; // Fine porta down case 0x32 : { if (eop) chnInf->old[effcnt].fineportadown=eop; chnInf->per+=chnInf->old[effcnt].fineportadown*4; handlePeriodOverflow(chn); chnInf->hasVibrato = false; chnInf->finalVibratoPer = 0; }; break; case 0x36 : { if (!eop) { chnInf->execloop=0; chnInf->loopstart=rowcnt; chnInf->loopingValidPosition = poscnt; } else { if (chnInf->loopcounter==eop) { // Imitate nasty XM bug here: if (playModeFT2) { startNextRow = chnInf->loopstart; } RESETLOOPING } else { chnInf->execloop=1; chnInf->loopcounter++; } } }; break; case 0x38 : if (options[PlayModeOptionPanningE8x]) chnInf->pan=(mp_ubyte)XModule::pan15to255(eop); break; case 0x39 : { chnInf->retrigcounterE9x[effcnt] = 0; if (eop) { chnInf->retrigmaxE9x[effcnt] = eop & 0xF; // If a note is playing on tick 0, increase counter if (chnInf->currentnote && chnInf->validnote) chnInf->retrigcounterE9x[effcnt]++; } else if (!chnInf->currentnote) { // trigger envelopes ALWAYS triggerInstrumentFX(chnInf); chnInf->keyon = true; // trigger replay only when last note has been valid if (chnInf->validnote) playInstrument(chn, chnInf); } }; break; case 0x3A : { if (eop) chnInf->old[effcnt].finevolslide=eop; chnInf->vol+=chnInf->old[effcnt].finevolslide*4; if (chnInf->vol>255) chnInf->vol=255; chnInf->tremorVol = chnInf->tremoloVol = chnInf->vol; chnInf->hasTremolo = false; chnInf->finalTremoloVol = 0; }; break; case 0x3B : { if (eop) chnInf->old[effcnt].finevolslide=eop; chnInf->vol-=chnInf->old[effcnt].finevolslide*4; if (chnInf->vol<0) chnInf->vol=0; chnInf->tremorVol = chnInf->tremoloVol = chnInf->vol; chnInf->hasTremolo = false; chnInf->finalTremoloVol = 0; }; break; // Note delay triggers envelopes/autovibrato/fade out again case 0x3D : { triggerInstrumentFX(chnInf); chnInf->keyon = true; }; break; case 0x3E : { patDelay = true; patDelayCount = (mp_sint32)tickSpeed*((mp_sint32)eop+1); }; break; // Xtra fine porta up case 0x41 : { if (eop) chnInf->old[effcnt].xfineportaup=eop; chnInf->per-=chnInf->old[effcnt].xfineportaup; handlePeriodUnderflow(chn); chnInf->hasVibrato = false; chnInf->finalVibratoPer = 0; }; break; case 0x42 : { if (eop) chnInf->old[effcnt].xfineportadown=eop; chnInf->per+=chnInf->old[effcnt].xfineportadown; handlePeriodOverflow(chn); chnInf->hasVibrato = false; chnInf->finalVibratoPer = 0; }; break; // MDL fine portas up case 0x43 : { if (eop) chnInf->old[effcnt].portaup=eop; if (chnInf->old[effcnt].portaup>=0xE0) { y=chnInf->old[effcnt].portaup>>4; x=chnInf->old[effcnt].portaup&0xf; switch (y) { case 0xF: chnInf->per-=x*4; handlePeriodUnderflow(chn); chnInf->hasVibrato = false; chnInf->finalVibratoPer = 0; break; case 0xE: chnInf->per-=(x>>1); handlePeriodUnderflow(chn); chnInf->hasVibrato = false; chnInf->finalVibratoPer = 0; break; } } }; break; case 0x44 : { if (eop) chnInf->old[effcnt].portaup=eop; if (chnInf->old[effcnt].portaup>=0xE0) { y=chnInf->old[effcnt].portaup>>4; x=chnInf->old[effcnt].portaup&0xf; switch (y) { case 0xF : chnInf->per+=x*4; handlePeriodOverflow(chn); chnInf->hasVibrato = false; chnInf->finalVibratoPer = 0; break; case 0xE : chnInf->per+=(x>>1); handlePeriodOverflow(chn); chnInf->hasVibrato = false; chnInf->finalVibratoPer = 0; break; } } }; break; case 0x45 : { if (eop) chnInf->old[effcnt].volslide=eop; if (chnInf->old[effcnt].volslide>=0xE0) { y=chnInf->old[effcnt].volslide>>4; x=chnInf->old[effcnt].volslide&0xf; switch (y) { case 0xF : chnInf->vol+=x*4; if (chnInf->vol>255) chnInf->vol=255; break; case 0xE : chnInf->vol+=x; if (chnInf->vol>255) chnInf->vol=255; break; } chnInf->tremorVol = chnInf->tremoloVol = chnInf->vol; chnInf->hasTremolo = false; chnInf->finalTremoloVol = 0; } } break; case 0x46 : { if (eop) chnInf->old[effcnt].volslide=eop; if (chnInf->old[effcnt].volslide>=0xE0) { y=chnInf->old[effcnt].volslide>>4; x=chnInf->old[effcnt].volslide&0xf; switch (y) { case 0xF : chnInf->vol-=x*4; if (chnInf->vol<0) chnInf->vol=0; break; case 0xE : chnInf->vol-=x; if (chnInf->vol<0) chnInf->vol=0; break; } chnInf->tremorVol = chnInf->tremoloVol = chnInf->vol; chnInf->hasTremolo = false; chnInf->finalTremoloVol = 0; } }; break; // S3M porta up case 0x47 : { if (eop) chnInf->old[effcnt].portaup=eop; if (chnInf->old[effcnt].portaup>=0xE0) { y=chnInf->old[effcnt].portaup>>4; x=chnInf->old[effcnt].portaup&0xf; switch (y) { case 0xF: chnInf->per-=x*4; // Special for ST3 if (chnInf->per <= 0) stopSample(chn); chnInf->hasVibrato = false; chnInf->finalVibratoPer = 0; break; case 0xE: chnInf->per-=x; // Special for ST3 if (chnInf->per <= 0) stopSample(chn); chnInf->hasVibrato = false; chnInf->finalVibratoPer = 0; break; } } }; break; // S3M porta down case 0x48 : { if (eop) chnInf->old[effcnt].portaup=eop; if (chnInf->old[effcnt].portaup>=0xE0) { y=chnInf->old[effcnt].portaup>>4; x=chnInf->old[effcnt].portaup&0xf; switch (y) { case 0xF : chnInf->per+=x*4; handlePeriodOverflow(chn); chnInf->hasVibrato = false; chnInf->finalVibratoPer = 0; break; case 0xE : chnInf->per+=x; handlePeriodOverflow(chn); chnInf->hasVibrato = false; chnInf->finalVibratoPer = 0; break; } } }; break; // S3M volslide case 0x49 : { if (eop) chnInf->old[effcnt].volslide=eop; if (chnInf->old[effcnt].volslide) { y=chnInf->old[effcnt].volslide>>4; x=chnInf->old[effcnt].volslide&0xf; if ((x!=0x0F)&&(y!=0x0F)) break; if (x==0x0F && !y) break; if (y==0x0F && !x) break; if (x==0x0F) { chnInf->vol+=y*4; if (chnInf->vol>255) chnInf->vol=255; chnInf->tremorVol = chnInf->tremoloVol = chnInf->vol; chnInf->hasTremolo = false; chnInf->finalTremoloVol = 0; } if (y==0x0F) { chnInf->vol-=x*4; if (chnInf->vol<0) chnInf->vol=0; chnInf->tremorVol = chnInf->tremoloVol = chnInf->vol; chnInf->hasTremolo = false; chnInf->finalTremoloVol = 0; } } }; break; // extra fine volslide up (PSM support) case 0x4B : { if (eop) chnInf->old[effcnt].finevolslide=eop; chnInf->vol+=chnInf->old[effcnt].finevolslide; if (chnInf->vol>255) chnInf->vol=255; chnInf->tremorVol = chnInf->tremoloVol = chnInf->vol; chnInf->hasTremolo = false; chnInf->finalTremoloVol = 0; }; break; // extra fine volslide down (PSM support) case 0x4C : { if (eop) chnInf->old[effcnt].finevolslide=eop; chnInf->vol-=chnInf->old[effcnt].finevolslide; if (chnInf->vol<0) chnInf->vol=0; chnInf->tremorVol = chnInf->tremoloVol = chnInf->vol; chnInf->hasTremolo = false; chnInf->finalTremoloVol = 0; }; break; // high precision porta up (PSM support) // same as 0x01 but 4x more accurate case 0x4D : if (eop) chnInf->old[effcnt].portaup=eop; break; // high precision porta down (PSM support) // same as 0x02 but 4x more accurate case 0x4E : if (eop) chnInf->old[effcnt].portaup=eop; break; // AMS: Set sampleflags case 0x4F : if (!eop) { chnInf->flags &= ~CHANNEL_FLAGS_FORCE_BACKWARD; chnInf->flags |= CHANNEL_FLAGS_FORCE_FORWARD; setForward(chn); } else if (eop == 1) { chnInf->flags &= ~CHANNEL_FLAGS_FORCE_FORWARD; chnInf->flags |= CHANNEL_FLAGS_FORCE_BACKWARD; setBackward(chn); } else if (eop == 2) { chnInf->flags |= CHANNEL_FLAGS_FORCE_BILOOP; } else if (eop == 3) // break sampleloop / oktalyzer too { breakLoop(chn); } break; // AMS: Set channel mastervol case 0x50 : chnInf->masterVol=eop; break; // Digibooster set real BPM case 0x52 : { if (eop) { baseBpm = eop >= 32 ? eop : 32; // Simply recalculate this->adder = getbpmrate(bpm); } break; } // Oktalyzer: fine note slide down case 0x54: { if (chnInf->note > eop) { chnInf->note-=eop; if (chnInf->note < 3*12) chnInf->note = 3*12; chnInf->per = getperiod(chnInf->note,chnInf->relnote,chnInf->finetune); chnInf->hasVibrato = false; chnInf->finalVibratoPer = 0; } } break; // Oktalyzer: fine note slide up case 0x55: { if (chnInf->note < XModule::NOTE_LAST-eop) { chnInf->note+=eop; if (chnInf->note > 6*12) chnInf->note = 6*12; chnInf->per = getperiod(chnInf->note,chnInf->relnote,chnInf->finetune); chnInf->hasVibrato = false; chnInf->finalVibratoPer = 0; } } break; // S3M global volslide case 0x59 : { if (eop) chnInf->old[effcnt].gvolslide=eop; if (chnInf->old[effcnt].gvolslide) { y=chnInf->old[effcnt].gvolslide>>4; x=chnInf->old[effcnt].gvolslide&0xf; if ((x!=0x0F)&&(y!=0x0F)) break; if (x==0x0F && !y) break; if (y==0x0F && !x) break; if (x==0x0F) { mainVolume+=y*4; if (mainVolume>255) mainVolume=255; break; } if (y==0x0F) { mainVolume-=x*4; if (mainVolume<0) mainVolume=0; break; } } break; } } // switch } void PlayerSTD::doTickeffects() { for (mp_sint32 chn=0;chnspeed) dstEnv.bpmAdder = getbpmrate(dstEnv.envstruc->speed); } void PlayerSTD::triggerEnvelopes(TModuleChannel* chnInf) { mp_uword e = module->smp[chnInf->smp].venvnum; if (e) { triggerEnvelope(chnInf->venv, module->venvs[e-1]); } else chnInf->venv.envstruc=NULL; e = module->smp[chnInf->smp].penvnum; if (e) { triggerEnvelope(chnInf->penv, module->penvs[e-1]); } else chnInf->penv.envstruc=NULL; e = module->smp[chnInf->smp].fenvnum; if (e) { triggerEnvelope(chnInf->fenv, module->fenvs[e-1]); } else chnInf->fenv.envstruc=NULL; e = module->smp[chnInf->smp].vibenvnum; if (e) { triggerEnvelope(chnInf->vibenv, module->vibenvs[e-1]); } else chnInf->vibenv.envstruc=NULL; } void PlayerSTD::triggerAutovibrato(TModuleChannel* chnInf) { if (module->smp[chnInf->smp].vibdepth&&module->smp[chnInf->smp].vibrate) { //chnInf->avibused=1; chnInf->avibused=module->smp[chnInf->smp].vibtype+1; chnInf->avibdepth=module->smp[chnInf->smp].vibdepth; chnInf->avibspd=module->smp[chnInf->smp].vibrate; chnInf->avibswcnt=0; chnInf->avibsweep=module->smp[chnInf->smp].vibsweep; } else chnInf->avibused=0; } void PlayerSTD::triggerInstrumentFX(TModuleChannel* chnInf) { if (chnInf->smp != -1) { triggerEnvelopes(chnInf); triggerAutovibrato(chnInf); chnInf->fadevolstart = 65536; chnInf->fadevolstep = module->smp[chnInf->smp].volfade; } } void PlayerSTD::progressRow() { mp_sint32 slotsize = (numEffects*2)+2; TXMPattern* pattern = &module->phead[patternIndex]; mp_ubyte *row = pattern->patternData+ (pattern->channum*slotsize*rowcnt); //for (mp_sint32 chn=0;chn<1;chn++) { for (mp_sint32 chn=0;chncurrentnote = row[pp]; mp_sint32 i = row[pp+1]; bool noteporta = false; bool notedelay = false; mp_sint32 oldIns = chnInf->ins; mp_sint32 oldSmp = chnInf->smp; // Effect preprocessor & get effect + operand from interleaved pattern data mp_sint32 effcnt, finetune = 0x7FFFFFFF; for (effcnt = 0; effcnt < numEffects; effcnt++) { chnInf->eff[effcnt] = row[(pp+2)+(effcnt*2)]; chnInf->eop[effcnt] = row[(pp+2)+(effcnt*2+1)]; switch (chnInf->eff[effcnt]) { // We need to know if we process the note as new note or or portamento destination period case 0x03: case 0x05: noteporta = true; break; // XM key off at tick with tick operand == 0 is like normal key off case 0x14: if (chnInf->eop[effcnt] == 0) note = XModule::NOTE_OFF; break; // set finetune will override the instrument setting case 0x35: finetune = XModule::modfinetunes[playModeFT2 ? ((chnInf->eop[effcnt] - 8) & 0xF) : (chnInf->eop[effcnt] & 0xF)]; break; // note delay without note retriggers last note case 0x3d: if (chnInf->eop[effcnt]) { notedelay = true; if (!note && playModeFT2) note = chnInf->lastnoportanote; } break; } } // Check new instrument settings only if valid note or no note at all if (i && note <= XModule::NOTE_LAST) { // valid sample? bool invalidIns = true; bool invalidSmp = true; #ifdef MILKYTRACKER // ---------------------------------------------------------------- // When editing in MilkyTracker all instruments have 16 samples // So I need another way of finding out which instruments are // invalid ones // ---------------------------------------------------------------- mp_sint32 n = note; if (!note) n = chnInf->note; // here we have a little problem if (!n) { for (mp_sint32 j = 0; j < 120; j++) { if (module->instr[i-1].snum[j] != -1) { n = 1; break; } } } // invalid instrument if (i <= module->header.insnum && n && n <= 120) { mp_sint32 s = module->instr[i-1].snum[n-1]; if (module->smp[s].sample) invalidIns = false; } // invalid sample if (module->instr[i-1].samp && n && n <= 120) { mp_sint32 s = module->instr[i-1].snum[n-1]; if (s != -1 && module->smp[s].sample) invalidSmp = false; } #else // invalid instrument if (i <= module->header.insnum && module->instr[i-1].samp) invalidIns = false; // invalid sample if (module->instr[i-1].samp && module->instr[i-1].snum[0] != -1) invalidSmp = false; #endif if (!invalidIns) // valid sample chnInf->ins = i; else if (note) // invalid sample { // cut means stop sample in FT2 if (!newInsPTFlag && !newInsST3Flag && !noteporta) { chnInf->smp = -1; chnInf->ins = 0; stopSample(chn); } } // protracker sample cut when invalid instrument is triggered if (newInsPTFlag) { if (!note) { if (invalidSmp) { chnInf->smp = -1; chnInf->ins = 0; chnInf->vol = chnInf->tremorVol = chnInf->tremoloVol = 0; // cut means: volume to zero (no stop sample) chnInf->hasTremolo = false; chnInf->finalTremoloVol = 0; //stopSample(chn); } else { chnInf->smp = module->instr[i-1].snum[0]; } } else { if (invalidSmp) { chnInf->smp = -1; chnInf->ins = 0; chnInf->vol = chnInf->tremorVol = chnInf->tremoloVol = 0; // cut means: volume to zero (no stop sample) chnInf->hasTremolo = false; chnInf->finalTremoloVol = 0; // NOT sure!!! //stopSample(chn); } } } // screamtracker continues playing when invalid instrument is triggered // applies new volume when instrument only is triggered else if (newInsST3Flag) { if (!note) { if (!invalidSmp) { chnInf->smp = module->instr[i-1].snum[0]; } // completely invalid instrument without note, does nothing at all else { i = 0; } } } } chnInf->validnote = true; if (note && note < XModule::NOTE_OFF) { if (chnInf->ins) { chnInf->smp = module->instr[chnInf->ins-1].snum[note-1]; if ((module->instr[chnInf->ins-1].flags & 1) && module->instr[chnInf->ins-1].notemap[note-1] != 0xFF) { chnInf->currentnote = note = module->instr[chnInf->ins-1].notemap[note-1] + 1; } // invalid sample entry? // Only apply new fintune / relative note number when not doing portamento if (chnInf->smp != -1 && !noteporta) { mp_sint32 finalNote = note + (mp_sint32)module->smp[chnInf->smp].relnote; // Within current note range? if (finalNote >= 1 && finalNote <= 119) { chnInf->finetune = (finetune != 0x7FFFFFFF ? finetune : module->smp[chnInf->smp].finetune); chnInf->relnote = module->smp[chnInf->smp].relnote; chnInf->freqadjust = module->smp[chnInf->smp].freqadjust; } // This is not a valid note else { chnInf->validnote = false; note = chnInf->note; } } } mp_sint32 relnote = chnInf->relnote; mp_sint32 finetune = chnInf->finetune; // If this is not a note portamento // and a valid note => keep that note and calculate new period if (!noteporta) { chnInf->note=chnInf->lastnoportanote=note; chnInf->per=getperiod(note,relnote,finetune); chnInf->hasVibrato = false; chnInf->finalVibratoPer = 0; // if there is a valid note => destroy portamento to note memory when playing an S3M(?) if (/*newInsPTFlag||*/newInsST3Flag) { chnInf->destnote=0; chnInf->destper=0; } } // If this is a note portamento keep destination's note + period else { // if a note delay is happening while the portamento is set, [AND we don't have a note (?)] // we restore the original period, but the destination period keeps set if (playModeFT2 && notedelay/* && !chnInf->currentnote*/) { chnInf->per=getperiod(note,relnote,finetune); if (chnInf->currentnote) chnInf->lastnoportanote = chnInf->currentnote; noteporta = false; } else { chnInf->lastnoportanote=chnInf->note; chnInf->destnote=chnInf->note=note; chnInf->destper=getperiod(note,relnote,finetune); } } // If this has not been a valid note, do not trigger it if (!chnInf->validnote) note = 0; } // man this FT2 bug emulation starts getting on my nerves: // only take new instrument of there is no note porta if (playModeFT2 && i && (noteporta || !chnInf->validnote)) { i = chnInf->ins = oldIns; chnInf->smp = oldSmp; } // when we have a new instrument we apply the settings // for this instrument, but in FT2 mode we only do it, when we're not // having a note portamento at the same time if (i && chnInf->smp != -1 && note < XModule::NOTE_OFF) { if ((module->smp[chnInf->smp].flags&1)) { chnInf->vol = chnInf->tremorVol = chnInf->tremoloVol = module->smp[chnInf->smp].vol; chnInf->hasTremolo = false; chnInf->finalTremoloVol = 0; } if (playModeFT2 && (module->smp[chnInf->smp].flags&2)) chnInf->pan = module->smp[chnInf->smp].pan; if ((module->smp[chnInf->smp].flags&4)) chnInf->masterVol = module->smp[chnInf->smp].vol; triggerInstrumentFX(chnInf); // reset vibrato/tremolo/tremor/retrig counters for (effcnt=0;effcntvibpos[effcnt] = chnInf->tremorcnt[effcnt] = chnInf->trmpos[effcnt] = chnInf->retrigcounterRxx[effcnt] = 0; if (playModePT) smpoffs[chn] = 0; chnInf->keyon = true; } // ------ 11/05/05: it seems that note off commands are processed BEFORE effect commands // S3M style keyoff: // sample is stopped if (note == XModule::NOTE_CUT) { note=0; if (chnInf->venv.envstruc!=NULL) { if (!(chnInf->venv.envstruc->type&1)) { chnInf->vol = chnInf->tremorVol = chnInf->tremoloVol = 0; chnInf->hasTremolo = false; chnInf->finalTremoloVol = 0; stopSample(chn); } } else { chnInf->vol = chnInf->tremorVol = chnInf->tremoloVol = 0; chnInf->hasTremolo = false; chnInf->finalTremoloVol = 0; stopSample(chn); } } // XM style keyoff: // volume is set to zero else if (note == XModule::NOTE_OFF) { note=0; // no envelope or no volume envelope if (chnInf->venv.envstruc!=NULL) { if (!(chnInf->venv.envstruc->type&1)) { chnInf->vol = chnInf->tremorVol = chnInf->tremoloVol = 0; chnInf->hasTremolo = false; chnInf->finalTremoloVol = 0; } } else { chnInf->vol = chnInf->tremorVol = chnInf->tremoloVol = 0; chnInf->hasTremolo = false; chnInf->finalTremoloVol = 0; } chnInf->keyon = false; } chnInf->hasSetVolume = false; for (effcnt=0;effcnteff[effcnt] == 0x09 && !note && module->getType() == XModule::ModuleType_MTM) { note = chnInf->note; } // FT2 hack // when note delay appears, we ignore the portamento operand else if (chnInf->eff[effcnt] == 0x03 && notedelay && playModeFT2) { chnInf->eop[effcnt] = 0; } doEffect(chn, chnInf, effcnt); } // for if (note) { if (note <= XModule::NOTE_OFF) { if (!noteporta) { playInstrument(chn, chnInf); } else if (oldPTInsChangeFlag && newInsPTFlag && noteporta && i && chnInf->smp != -1 && chnInf->note) { playInstrument(chn, chnInf, true); } } } // note else if (oldPTInsChangeFlag && newInsPTFlag && i && chnInf->note && chnInf->per) { playInstrument(chn, chnInf, true); } } } } void PlayerSTD::update() { mp_sint32 c; //for (c=10;c<11;c++) { #ifdef MILKYTRACKER for (c=0;cflags & CHANNEL_FLAGS_UPDATE_IGNORE) continue; mp_sint32 dfs = chnInf->flags & CHANNEL_FLAGS_DFS, dvs = chnInf->flags & CHANNEL_FLAGS_DVS; if ((chnInf->per)&&(!dfs)) setFreq(c,getfreq(c,getfinalperiod(c,chnInf->hasVibrato ? chnInf->finalVibratoPer : chnInf->per),chnInf->freqadjust)); if (!dvs) setVol(c,getvolume(c,chnInf-> hasTremolo ? chnInf->finalTremoloVol : chnInf->vol)); setPan(c,getpanning(c,chnInf->pan)); if (chnInf->venv.envstruc != NULL && !chnInf->venv.envstruc->speed) { prenvelope(c,&chnInf->venv,chnInf->keyon); } if (chnInf->penv.envstruc != NULL && !chnInf->penv.envstruc->speed) { prenvelope(c,&chnInf->penv,chnInf->keyon); } if (chnInf->fenv.envstruc != NULL && !chnInf->fenv.envstruc->speed) { prenvelope(c,&chnInf->fenv,chnInf->keyon); } if (chnInf->vibenv.envstruc != NULL && !chnInf->vibenv.envstruc->speed) { prenvelope(c,&chnInf->vibenv,chnInf->keyon); } if (!chnInf->keyon) { chnInf->fadevolstart-=chnInf->fadevolstep; if (chnInf->fadevolstart<0) chnInf->fadevolstart=0; } if (chnInf->avibused) { chnInf->avibcnt+=chnInf->avibspd; if (chnInf->avibswcntavibsweep) chnInf->avibswcnt++; } } } void PlayerSTD::updateBPMIndependent() { mp_int64 dummy; mp_sint32 c; #ifdef MILKYTRACKER for (c=0;cflags & CHANNEL_FLAGS_UPDATE_IGNORE) continue; bool dfs = chnInf->flags & CHANNEL_FLAGS_DFS, dvs = chnInf->flags & CHANNEL_FLAGS_DVS; // Volume envelope if (chnInf->venv.envstruc != NULL && chnInf->venv.envstruc->speed) { dummy = (mp_int64)chnInf->venv.bpmCounter; dummy+=(mp_int64)chnInf->venv.bpmAdder; chnInf->venv.bpmCounter = (mp_sint32)dummy; // check overflow-carry if (dummy>>32) { prenvelope(c,&chnInf->venv,chnInf->keyon); if (!dvs) setVol(c,getvolume(c,chnInf-> hasTremolo ? chnInf->finalTremoloVol : chnInf->vol)); } } // Panning envelope if (chnInf->penv.envstruc != NULL && chnInf->penv.envstruc->speed) { dummy = (mp_int64)chnInf->penv.bpmCounter; dummy+=(mp_int64)chnInf->penv.bpmAdder; chnInf->penv.bpmCounter = (mp_sint32)dummy; // check overflow-carry if (dummy>>32) { prenvelope(c,&chnInf->penv,chnInf->keyon); setPan(c,getpanning(c,chnInf->pan)); } } // Frequency envelope: Digitracker MDL if (chnInf->fenv.envstruc != NULL && chnInf->fenv.envstruc->speed) { dummy = (mp_int64)chnInf->fenv.bpmCounter; dummy+=(mp_int64)chnInf->fenv.bpmAdder; chnInf->fenv.bpmCounter = (mp_sint32)dummy; // check overflow-carry if (dummy>>32) { prenvelope(c,&chnInf->fenv,chnInf->keyon); if ((chnInf->per)&&(!dfs)) setFreq(c,getfreq(c,getfinalperiod(c,chnInf->per),chnInf->freqadjust)); } } // Vibrato envelope: Velvet Studio AMS if (chnInf->vibenv.envstruc != NULL && chnInf->vibenv.envstruc->speed) { dummy = (mp_int64)chnInf->vibenv.bpmCounter; dummy+=(mp_int64)chnInf->vibenv.bpmAdder; chnInf->vibenv.bpmCounter = (mp_sint32)dummy; // check overflow-carry if (dummy>>32) { prenvelope(c,&chnInf->vibenv,chnInf->keyon); if ((chnInf->per)&&(!dfs)) setFreq(c,getfreq(c,getfinalperiod(c,chnInf->per),chnInf->freqadjust)); } } } } void inline PlayerSTD::setNewPosition(mp_sint32 poscnt) { if (statusEventListener) statusEventListener->patternEndReached(*this, *module, poscnt); if (poscnt == this->poscnt) return; if (poscnt>=module->header.ordnum) poscnt=module->header.restart; // reset looping flags RESET_ALL_LOOPING lastUnvisitedPos = this->poscnt; this->poscnt = poscnt; } void PlayerSTD::tickhandler() { mp_sint32 maxTicks; if (!idle) { // Important! Without this, the different playmodes will not be recognized properly updatePlayModeFlags(); // sanity check 1 if (patternIndexToPlay == -1 && poscnt >= module->header.ordnum) { halt(); return; } // Play special pattern? if (patternIndexToPlay == -1) patternIndex = module->header.ord[poscnt]; else patternIndex = patternIndexToPlay; TXMPattern* pattern = &module->phead[patternIndex]; if (pattern->patternData == NULL) { halt(); return; } // sanity check 2 :) if (rowcnt >= pattern->rows) { if (patternIndexToPlay == -1) { //rowcnt = 0; ticker = 0; goto nextrow; } else { //halt(); //return; rowcnt = 0; ticker = 0; } } numEffects = pattern->effnum; numChannels = pattern->channum <= module->header.channum ? pattern->channum : module->header.channum; mp_sint32 c; if (ticker == 0) { // Keep track of visited rows mp_sint32 absolutePos = poscnt*256+rowcnt; if (isRowVisited(absolutePos) && !repeat) { // pattern loop active? bool b = false; for (c=0;cpatternData+(pattern->channum*slotsize*rowcnt); // process high priority effects in advance to other effects mp_ubyte* slot = row; for (c=0;c=maxTicks) { if (patDelay) patDelay = false; // reset ticker ticker=0; // if we're told to play this row only, we will stop now // and neither process any of those pattern jump/repeat stuff if (playOneRowOnly) { BPMCounter = adder = 0; return; } if (patternIndexToPlay == -1) { // break pattern? if (pbreak&&(poscnt<(module->header.ordnum-1))) { if (!pjump || (pjump && pjumpPriority > pbreakPriority)) setNewPosition(poscnt+1); rowcnt=pbreakpos-1; startNextRow = -1; } else if (pbreak&&(poscnt==(module->header.ordnum-1))) { // Pattern break on the last order? Break to restart position if (!pjump || (pjump && pjumpPriority > pbreakPriority)) setNewPosition(module->header.restart); rowcnt=pbreakpos-1; startNextRow = -1; } // pattern jump? if (pjump) { if (!pbreak || (pbreak && pjumpPriority > pbreakPriority)) rowcnt = pjumprow-1; setNewPosition(pjumppos); startNextRow = -1; } // it could be that our position has changed because // of position jumps, so make sure we're getting the real position here patternIndex = module->header.ord[poscnt]; } // We have one pattern to play else { // Position jump occurred and repeating is allowed, start again if (pjump || pbreak) { rowcnt = -1; startNextRow = -1; if (statusEventListener) statusEventListener->patternEndReached(*this, *module, poscnt); } //RESETLOOPING // macro } // handle loop for (c=0;c=module->phead[patternIndex].rows) { // start at row 0? if (startNextRow != -1) { rowcnt = startNextRow; startNextRow = -1; } else { rowcnt = 0; } if (patternIndexToPlay == -1) { // play next order setNewPosition(poscnt+1); } // We have one pattern to play but repeating isn't allowed, so stop here else if (!repeat) { halt(); return; } // We have one pattern to play and repeating is allowed so start again else { rowcnt = 0; // reset looping flags RESET_ALL_LOOPING if (statusEventListener) statusEventListener->patternEndReached(*this, *module, poscnt); } } // halting has been requested if (haltFlag) { halt(); } } } else { numChannels = module->header.channum; } update(); } void PlayerSTD::halt() { halted = true; BPMCounter = adder = 0; if (resetOnStopFlag) resetChannelsWithoutMuting(); } bool PlayerSTD::grabChannelInfo(mp_sint32 chn, TPlayerChannelInfo& channelInfo) const { channelInfo.note = chninfo[chn].currentnote; channelInfo.instrument = chninfo[chn].ins; channelInfo.volume = chninfo[chn].vol; channelInfo.panning = chninfo[chn].pan; channelInfo.numeffects = numEffects; memcpy(channelInfo.effects, chninfo[chn].eff, sizeof(chninfo[chn].eff)); memcpy(channelInfo.operands, chninfo[chn].eop, sizeof(chninfo[chn].eop)); return true; } ////////////////////////////////////////////////////////////////////////////////////////// // for MilkyTracker use ////////////////////////////////////////////////////////////////////////////////////////// void PlayerSTD::playNote(mp_ubyte chn, mp_sint32 note, mp_sint32 i, mp_sint32 vol/* = -1*/) { if (!i) return; //stopSample(chn); smpoffs[chn] = 0; TModuleChannel *chnInf = &chninfo[chn]; bool invalidSample = false; #ifdef MILKYTRACKER for (mp_uint32 j = 0; j < 96; j++) #else for (mp_uint32 j = 0; j < 120; j++) #endif { mp_sword s = module->instr[i-1].snum[j]; if (s != -1 && module->smp[s].sample) { invalidSample = true; break; } } if (!invalidSample) return; chnInf->ins = i; if (note && note < XModule::NOTE_OFF) { if (chn >= module->header.channum) chnInf->pan = 0x80; if (chnInf->ins) { chnInf->smp = module->instr[chnInf->ins-1].snum[note-1]; // invalid sample entry if (chnInf->smp != -1) { if (module->smp[chnInf->smp].sample == NULL) { chnInf->ins = 0; return; } mp_sint32 finalNote = note + (mp_sint32)module->smp[chnInf->smp].relnote; // Within current note range? if (!(finalNote >= 1 && finalNote <= 119)) return; chnInf->finetune=module->smp[chnInf->smp].finetune; chnInf->relnote=module->smp[chnInf->smp].relnote; } } mp_sint32 relnote = chnInf->relnote; mp_sint32 finetune = chnInf->finetune; chnInf->note=note; chnInf->per=getperiod(note,relnote,finetune); } if (i && chnInf->smp != -1 && note < XModule::NOTE_OFF) { if ((module->smp[chnInf->smp].flags&1)) { chnInf->vol = chnInf->tremorVol = chnInf->tremoloVol = (vol == -1 ? module->smp[chnInf->smp].vol : vol); chnInf->hasTremolo = false; chnInf->finalTremoloVol = 0; } if ((playMode == PlayMode_FastTracker2) && (module->smp[chnInf->smp].flags&2)) chnInf->pan=module->smp[chnInf->smp].pan; if ((module->smp[chnInf->smp].flags&4)) chnInf->masterVol=module->smp[chnInf->smp].vol; triggerInstrumentFX(chnInf); // reset vibrato/tremolo/tremor counter for (mp_sint32 effcnt=0;effcntvibpos[effcnt] = chnInf->tremorcnt[effcnt] = chnInf->trmpos[effcnt] = 0; chnInf->keyon = true; } if (note) { // S3M style key-off // sample is stopped if (note == XModule::NOTE_CUT) { note=0; if (chnInf->venv.envstruc!=NULL) { if (!(chnInf->venv.envstruc->type&1)) { chnInf->vol = 0; stopSample(chn); } } else { chnInf->vol=0; stopSample(chn); } } // XM style-keyoff // volume is set to zero else if (note == XModule::NOTE_OFF) { note=0; if (chnInf->venv.envstruc!=NULL) { if (!(chnInf->venv.envstruc->type&1)) chnInf->vol = 0; } else chnInf->vol=0; chnInf->keyon = false; } else { playInstrument(chn, chnInf); } } } void PlayerSTD::TPrEnv::setToTick(mp_uint32 tick) { if (envstruc == NULL) return; bool bSet = false; for (mp_sint32 i = 0; i < envstruc->num-1; i++) { if (tick >= envstruc->env[i][0] && tick < envstruc->env[i+1][0]) { a = i; b = i+1; step = tick; bSet = true; break; } } if (!bSet) { // if position is beyond the last envelope point // we limit it to the last point and exit bool beyond = tick > envstruc->env[envstruc->num-1][0]; a = envstruc->num-1; b = envstruc->num; step = envstruc->env[envstruc->num-1][0]; if (beyond) return; } // check if we set envelope position to a loop end point // in that case wrap to the loop start, otherwise the loop // end is skipped and the envelope will roll out without // looping if ((envstruc->type & 4) && step == envstruc->env[envstruc->loope][0]) { a=envstruc->loops; b=envstruc->loops+1; step=envstruc->env[a][0]; } } MilkyTracker-1.02.00/src/milkyplay/PlayerSTD.h000066400000000000000000000317141324432207300210430ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * PlayerSTD.h * MilkyPlay * * Created by Peter Barth on Tue Oct 19 2004. * */ #ifndef __PLAYERSTD_H__ #define __PLAYERSTD_H__ #include "ChannelMixer.h" #include "PlayerBase.h" #include "XModule.h" class PlayerSTD : public PlayerBase { public: struct StatusEventListener { virtual ~StatusEventListener() { } virtual void playerTickStarted(PlayerSTD& player, XModule& module) { } virtual void playerTickEnded(PlayerSTD& player, XModule& module) { } virtual void timerTickStarted(PlayerSTD& player, XModule& module) { } virtual void timerTickEnded(PlayerSTD& player, XModule& module) { } virtual void patternEndReached(PlayerSTD& player, XModule& module, mp_sint32& newOrderIndex) { } }; private: enum { XM_MINPERIOD = 50 }; struct TPrEnv { TEnvelope* envstruc; mp_sint32 a,b,step; mp_uint32 bpmCounter, bpmAdder; mp_uint32 timeTrackSize; struct TTimeRecord { mp_sword pos; const TEnvelope* envstruc; }; TTimeRecord* timeRecord; TPrEnv() : timeTrackSize(0), timeRecord(NULL) { } ~TPrEnv() { delete[] timeRecord; } void clear() { envstruc = 0; a = b = step = 0; bpmCounter = bpmAdder = 0; if (timeTrackSize && timeRecord) memset(timeRecord, 0, sizeof(TTimeRecord)*timeTrackSize); } void reallocTimeRecord(mp_uint32 size) { timeTrackSize = size; delete[] timeRecord; timeRecord = new TTimeRecord[size]; } void setToTick(mp_uint32 tick); }; struct TLastOperands { mp_ubyte portaup; mp_ubyte portadown; mp_ubyte portanote; mp_ubyte fineportaup; mp_ubyte fineportadown; mp_ubyte xfineportaup; mp_ubyte xfineportadown; mp_ubyte volslide; mp_ubyte finevolslide; mp_ubyte gvolslide; mp_ubyte panslide; mp_ubyte arpeg; mp_ubyte retrig; mp_ubyte tremor; mp_ubyte smpoffset; }; struct TModuleChannel { mp_uint32 flags; mp_sint32 ins; mp_sint32 smp; bool hasSetVolume; mp_sint32 vol, tremoloVol, finalTremoloVol, tremorVol; bool hasTremolo; mp_sint32 masterVol; mp_sint32 pan; mp_sint32 per, finalVibratoPer, destper; bool hasVibrato; //mp_sint32 c4spd; mp_sint32 currentnote, relnote; mp_sint32 finetune; mp_sword freqadjust; mp_sint32 note, destnote, lastnoportanote; bool validnote; mp_ubyte eff[MP_NUMEFFECTS]; mp_ubyte eop[MP_NUMEFFECTS]; TLastOperands old[MP_NUMEFFECTS]; mp_sint32 loopstart; mp_sint32 execloop; mp_sint32 loopcounter; bool isLooping; mp_sint32 loopingValidPosition; mp_ubyte vibdepth[MP_NUMEFFECTS]; mp_ubyte vibspeed[MP_NUMEFFECTS]; mp_ubyte vibpos[MP_NUMEFFECTS]; mp_ubyte trmdepth[MP_NUMEFFECTS]; mp_ubyte trmspeed[MP_NUMEFFECTS]; mp_ubyte trmpos[MP_NUMEFFECTS]; mp_ubyte tremorcnt[MP_NUMEFFECTS]; mp_sint32 retrigcounterE9x[MP_NUMEFFECTS]; mp_ubyte retrigmaxE9x[MP_NUMEFFECTS]; mp_sint32 retrigcounterRxx[MP_NUMEFFECTS]; mp_ubyte retrigmaxRxx[MP_NUMEFFECTS]; bool keyon; TPrEnv venv; TPrEnv penv; TPrEnv fenv; TPrEnv vibenv; mp_sint32 fadevolstart; mp_sint32 fadevolstep; mp_ubyte avibused; mp_ubyte avibspd; mp_ubyte avibdepth; mp_ubyte avibcnt; mp_ubyte avibsweep; mp_ubyte avibswcnt; void clear() { flags = 0; ins = 0; smp = 0; hasSetVolume = 0; vol = tremoloVol = finalTremoloVol = tremorVol = 0; hasTremolo = false; masterVol = 0; pan = 0; per = finalVibratoPer = destper = 0; hasVibrato = 0; currentnote = relnote = 0; finetune = 0; freqadjust = 0; note = destnote = lastnoportanote = 0; validnote = false; memset(&eff, 0, sizeof(eff)); memset(&eop, 0, sizeof(eop)); memset(&old, 0, sizeof(old)); loopstart = 0; execloop = 0; loopcounter = 0; isLooping = false; loopingValidPosition = 0; memset(&vibdepth, 0, sizeof(vibdepth)); memset(&vibpos, 0, sizeof(vibpos)); memset(&trmdepth, 0, sizeof(trmdepth)); memset(&trmspeed, 0, sizeof(trmspeed)); memset(&trmpos, 0, sizeof(trmpos)); memset(&tremorcnt, 0, sizeof(tremorcnt)); memset(&retrigcounterE9x, 0, sizeof(retrigcounterE9x)); memset(&retrigmaxE9x, 0, sizeof(retrigmaxE9x)); memset(&retrigcounterRxx, 0, sizeof(retrigcounterRxx)); memset(&retrigmaxRxx, 0, sizeof(retrigmaxRxx)); keyon = false; venv.clear(); penv.clear(); fenv.clear(); vibenv.clear(); fadevolstart = 0; fadevolstep = 0; avibused = 0; avibspd = 0; avibdepth = 0; avibcnt = 0; avibsweep = 0; avibswcnt = 0; } void reallocTimeRecord(mp_uint32 size) { venv.reallocTimeRecord(size); penv.reallocTimeRecord(size); fenv.reallocTimeRecord(size); vibenv.reallocTimeRecord(size); } }; private: static const mp_sint32 vibtab[32]; static const mp_uword lintab[769]; static const mp_uint32 logtab[]; StatusEventListener* statusEventListener; TModuleChannel* chninfo; // our channel information mp_sint32 lastNumAllocatedChannels; mp_uint32* smpoffs; mp_ubyte* attick; mp_sint32 patternIndex; // holds current pattern index mp_sint32 numEffects; // current number of effects mp_sint32 numChannels; // current number of channels mp_ubyte pbreak; mp_ubyte pbreakpos; mp_sint32 pbreakPriority; mp_ubyte pjump; mp_ubyte pjumppos,pjumprow; mp_sint32 pjumpPriority; bool patDelay; bool haltFlag; mp_sint32 startNextRow; mp_sint32 patDelayCount; // keep track of what positions we already visited (bitmap) mp_ubyte rowHits[256*256/8]; bool isLooping; /////////////////////////////////////////////////////////////////////////////////////////////////// // this information is updated while the song plays /////////////////////////////////////////////////////////////////////////////////////////////////// bool newInsPTFlag; // New instrument PT like bool newInsST3Flag; // New instrument ST3 like bool oldPTInsChangeFlag; // sample without note flag (old PT style) bool playModePT; bool playModePTPitchLimit; bool playModeFT2; bool playModeChopSampleOffset; bool isRowVisited(mp_sint32 row) { return (rowHits[row>>3]>>(row&7))&1; } void visitRow(mp_sint32 row) { rowHits[row>>3] |= (1<<(row&7)); } static void prenvelope(mp_sint32 c, TPrEnv* env, mp_sint32 keyon); // process envelopes static mp_sint32 getenvval(mp_sint32 c, TPrEnv* env, mp_sint32 n); // get envelope value // This takes the period *with* 8 bit fractional part static mp_sint32 getlinfreq(mp_sint32 per); // This takes the period *with* 8 bit fractional part static mp_sint32 getlogfreq(mp_sint32 per); // this returns a period *without* the 8 bit fractional part static mp_sint32 getlinperiod(mp_sint32 note,mp_sint32 relnote,mp_sint32 finetune); static mp_sint32 interpolate(mp_sint32 eax,mp_sint32 ebx,mp_sint32 ecx,mp_sint32 edi,mp_sint32 esi); // this returns a period *without* the 8 bit fractional part static mp_sint32 getlogperiod(mp_sint32 note,mp_sint32 relnote,mp_sint32 finetune); mp_uint32 getbpmrate(mp_uint32 bpm) { // digibooster "real BPM" setting mp_uint32 realCiaTempo = (bpm * (baseBpm << 8) / 125) >> 8; if (!realCiaTempo) realCiaTempo++; mp_int64 t = ((mp_int64)realCiaTempo)<<(32+2); const mp_uint32 timerBase = (mp_uint32)(5.0f*500.0f*(MP_BEATLENGTH*MP_TIMERFREQ / (float)MP_BASEFREQ)); return (mp_uint32)(t/timerBase); } mp_sint32 getperiod(mp_sint32 note,mp_sint32 relnote,mp_sint32 finetune) { if (playModeFT2) { // FT2 doesn't support lower 3 bits if (finetune > 0) finetune &= 0xF8; else if (finetune < 0) { finetune = -((-finetune + 7) & 0xF8); if (finetune < -128) finetune = -128; } } return (module->header.freqtab&1) ? getlinperiod(note,relnote,finetune) : getlogperiod(note,relnote,finetune); } mp_sint32 getvolume(mp_sint32 c,mp_sint32 nv) { mp_sint32 vol = (nv*getenvval(c,&chninfo[c].venv,256))>>7; vol = (vol*chninfo[c].fadevolstart)>>16; vol = (vol*chninfo[c].masterVol)>>8; vol = (vol*mainVolume)>>8; return vol; } mp_sint32 getpanning(mp_sint32 c,mp_sint32 np) { mp_sint32 envpan = getenvval(c,&chninfo[c].penv,128); //if (envpan!=256) cprintf("%i\r\n",envpan); mp_sint32 finalpan = np+(envpan-128)*(128-abs(np-128))/128; if (finalpan<0) finalpan=0; if (finalpan>255) finalpan=255; return finalpan; } mp_sint32 getfreq(mp_sint32 c,mp_sint32 per,mp_sword freqadjust) { if (per<1) return 0; mp_sint32 eval = getenvval(c,&chninfo[c].fenv,128)-128; mp_uint32 freq; freq = (module->header.freqtab&1) ? getlinfreq(per) : getlogfreq(per); mp_sint32 finalFreq = (freq+(eval*63))+freqadjust; if (finalFreq < 0) finalFreq = 0; return finalFreq; } mp_sint32 getfinalperiod(mp_sint32 c, mp_sint32 p); void playInstrument(mp_sint32 chn, TModuleChannel* chnInf, bool bNoRestart = false); void triggerEnvelope(TPrEnv& dstEnv, TEnvelope& srcEnv); void triggerEnvelopes(TModuleChannel* chnInf); void triggerAutovibrato(TModuleChannel* chnInf); void triggerInstrumentFX(TModuleChannel* chnInf); void updatePlayModeFlags(); void handlePeriodOverflow(mp_sint32 channel) { // PTK/FT1 playmode if (playModePTPitchLimit && options[PlayModeOptionForcePTPitchLimit]) { if (chninfo[channel].per > 856*4) chninfo[channel].per = 856*4; } // FT2 playmode (does nothing right now) else { //if (chninfo[channel].per > 14150) // chninfo[channel].per %= 14150; } } void handlePeriodUnderflow(mp_sint32 channel) { // PTK/FT1 playmode if (playModePTPitchLimit && options[PlayModeOptionForcePTPitchLimit]) { if (chninfo[channel].per < 113*4) chninfo[channel].per = 113*4; } // FT2 playmode (clamp on low value, not what FT2 does btw.) else { if (chninfo[channel].per < XM_MINPERIOD) chninfo[channel].per = XM_MINPERIOD; //chninfo[channel].per &= 0x3FFF; } } mp_sint32 calcVibrato(TModuleChannel* chnInf, mp_sint32 effcnt); void doTickEffect(mp_sint32 chn, TModuleChannel* chnInf, mp_sint32 effcnt); void doEffect(mp_sint32 chn, TModuleChannel* chnInf, mp_sint32 effcnt); void doTickeffects(); void progressRow(); void update(); void updateBPMIndependent(); //void handleQueuedPositions(mp_sint32& poscnt); void setNewPosition(mp_sint32 poscnt); void tickhandler(); mp_sint32 allocateStructures(); void freeMemory(); // stop song by setting flag and setting speed to zero void halt(); protected: virtual void clearEffectMemory(); public: PlayerSTD(mp_uint32 frequency, StatusEventListener* statusEventListener = NULL); virtual ~PlayerSTD(); virtual PlayerTypes getType() const { return PlayerType_Generic; } virtual mp_sint32 adjustFrequency(mp_uint32 frequency); virtual mp_sint32 setBufferSize(mp_uint32 bufferSize); // virtual from mixer class, perform playing here virtual void timerHandler(mp_sint32 currentBeatPacket); virtual void restart(mp_uint32 startPosition = 0, mp_uint32 startRow = 0, bool resetMixer = true, const mp_ubyte* customPanningTable = NULL, bool playOneRowOnly = false); virtual void reset(); virtual void resetAllSpeed(); virtual bool grabChannelInfo(mp_sint32 chn, TPlayerChannelInfo& channelInfo) const; // milkytracker virtual void playNote(mp_ubyte chn, mp_sint32 note, mp_sint32 ins, mp_sint32 vol = -1); virtual void setPanning(mp_ubyte chn, mp_ubyte pan) { chninfo[chn].pan = pan; } #ifdef MILKYTRACKER friend class PlayerController; friend class PlayerGeneric; friend class PlayerStatusTracker; #endif }; #endif MilkyTracker-1.02.00/src/milkyplay/ResamplerAmiga.h000066400000000000000000000171001324432207300221160ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* Implementation of Antti Lankila's Amiga sound model, see: * http://bel.fi/~alankila/modguide/interpolate.txt * (a copy can be found in the resources/reference/Amiga_resampler) * * TODO: filter volume changes (maybe), add dithering on the output * * Chris (Deltafire) 13/1/2008 */ // Amiiiiiiiiiiiiigaaaaaaaaa #include "computed-blep.h" template class ResamplerAmiga : public ChannelMixer::ResamplerBase { private: // Some constants enum { BLEP_SCALE = 17, MAX_BLEPS = 32, MAX_AGE = 2048, PAULA_FREQ = 3546895 }; // the structure that holds data of bleps struct blepState_t { mp_sint32 level; mp_uword age; }; const int* table; // Storage mp_sint32 numChannels; blepState_t** bleps; mp_sint32* currentLevel; mp_sint32* activeBleps; mp_sint32 paulaAdvance; void cleanUp(mp_sint32 num) { for (mp_sint32 i = 0; i < num; i++) delete[] bleps[i]; delete[] bleps; delete[] currentLevel; delete[] activeBleps; } void realloc(mp_sint32 oldNum, mp_sint32 newNum) { cleanUp(oldNum); bleps = new blepState_t*[newNum]; for (mp_sint32 i = 0; i < newNum; i++) bleps[i] = new blepState_t[MAX_BLEPS]; currentLevel = new mp_sint32[newNum]; activeBleps = new mp_sint32[newNum]; } void clearState() { memset(currentLevel, 0, numChannels*sizeof(mp_uint32)); memset(activeBleps, 0, numChannels*sizeof(mp_sint32)); for (mp_sint32 i = 0; i < numChannels; i++) memset(bleps[i], 0, MAX_BLEPS*sizeof(blepState_t)); } public: ResamplerAmiga() : numChannels(0), bleps(NULL), currentLevel(NULL), activeBleps(NULL) { } virtual ~ResamplerAmiga() { cleanUp(numChannels); } virtual void setFrequency(mp_sint32 frequency) { paulaAdvance = PAULA_FREQ / frequency; } virtual void setNumChannels(mp_sint32 num) { // one more channel for the scope dummy num++; realloc(numChannels, num); numChannels = num; clearState(); } inline mp_sint32 interpolate_amiga_8bit(const mp_sint32 sample, const mp_sint32 channel, const ChannelMixer::TMixerChannel* chn) { if(sample != currentLevel[channel]) { // We have a newborn blep! // Make room for it memmove(&bleps[channel][1], &bleps[channel][0], sizeof(blepState_t) * activeBleps[channel]); if(++activeBleps[channel] == MAX_BLEPS) { #ifndef WIN32 fprintf(stderr, "AMIGA: Blep list truncated!\n"); #endif activeBleps[channel]--; } bleps[channel][0].level = sample - currentLevel[channel]; bleps[channel][0].age = ((chn->fixedtimefrac + (chn->fixedtime & 0xffff)) * paulaAdvance) >> 16; currentLevel[channel] = sample; } mp_sint32 s = 0; // Age teh bleps! for(mp_sint32 i = 0; i < activeBleps[channel]; i++) { s -= winsinc_integral[filterTable*WINSINCSIZE+bleps[channel][i].age] * bleps[channel][i].level; if((bleps[channel][i].age += paulaAdvance) >= MAX_AGE) activeBleps[channel] = i; // It died of old age :( } s >>= (BLEP_SCALE - 8); s += sample << 8; return s; } // Due to 32-bit limitations the 16-bit resampler is less precise // PS, copy & paste is quicker than messing around with templates ;) inline mp_sint32 interpolate_amiga_16bit(const mp_sint32 sample, const mp_sint32 channel, const ChannelMixer::TMixerChannel* chn) { if(sample != currentLevel[channel]) { // We have a newborn blep! // Make room for it memmove(&bleps[channel][1], &bleps[channel][0], sizeof(blepState_t) * activeBleps[channel]); if(++activeBleps[channel] == MAX_BLEPS) { #ifndef WIN32 fprintf(stderr, "AMIGA: Blep list truncated!\n"); #endif activeBleps[channel]--; } bleps[channel][0].level = sample - currentLevel[channel]; bleps[channel][0].age = ((chn->fixedtimefrac + (chn->fixedtime & 0xffff)) * paulaAdvance) >> 16; currentLevel[channel] = sample; } mp_sint32 s = 0; // Age teh bleps! for(mp_sint32 i = 0; i < activeBleps[channel]; i++) { s -= (winsinc_integral[filterTable*WINSINCSIZE+bleps[channel][i].age]>>3) * bleps[channel][i].level; if((bleps[channel][i].age += paulaAdvance) >= MAX_AGE) activeBleps[channel] = i; // It died of old age :( } s >>= BLEP_SCALE - 3; s += sample; return s; } virtual bool isRamping() { return false; } virtual bool supportsFullChecking() { return false; } virtual bool supportsNoChecking() { return true; } inline void addBlockNoCheck(mp_sint32* buffer, ChannelMixer::TMixerChannel* chn, mp_uint32 count) { // adding some local variables, will be faster to access than attributes of chn mp_sint32 voll = chn->finalvoll; mp_sint32 volr = chn->finalvolr; mp_sint32 smppos = chn->smppos; mp_sint32 smpposfrac = chn->smpposfrac; const mp_sint32 smpadd = (chn->flags&ChannelMixer::MP_SAMPLE_BACKWARD) ? -chn->smpadd : chn->smpadd; mp_sint32 fp = smpadd*count; MP_INCREASESMPPOS(chn->smppos,chn->smpposfrac,fp,16); // when the channel index is -1 we're going to use the dummy channel const mp_sint32 channel = (chn->index == -1 ? this->numChannels - 1 : chn->index); if (chn->flags & 4) { // 16 bit const mp_sword* sample = ((const mp_sword*) chn->sample) + smppos; smppos = smpposfrac; while (count--) { mp_sint32 s = sample[smppos>>16]; s = interpolate_amiga_16bit(s, channel, chn); (*buffer++)+=(s*(voll>>15))>>15; (*buffer++)+=(s*(volr>>15))>>15; smppos+=smpadd; MP_INCREASESMPPOS(chn->fixedtime, chn->fixedtimefrac, smpadd, 16); } } else { // 8 bit const mp_sbyte* sample = &chn->sample[smppos]; smppos = smpposfrac; while (count--) { mp_sint32 s = sample[smppos>>16]; s = interpolate_amiga_8bit(s, channel, chn); // Really, the volume should be applied before the interpolation (*buffer++)+=(s*(voll>>15))>>15; (*buffer++)+=(s*(volr>>15))>>15; smppos+=smpadd; // advance time, this is necessary because it's not being done // when not being used, so we'll do it here MP_INCREASESMPPOS(chn->fixedtime, chn->fixedtimefrac, smpadd, 16); } } } }; MilkyTracker-1.02.00/src/milkyplay/ResamplerCubic.h000066400000000000000000000162721324432207300221360ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * ResamplerCubic.h * MilkyPlay * * Created by Peter Barth on 03.01.08. * */ /* * Cubic 4 Point 3rd order polynomial interpolation resampler * * Formulas from: * Polynomial Interpolators for High-Quality Resampling of Oversampled Audio by * Olli Niemitalo ollinie@freenet.hut.fi * * Website: http://www.student.oulu.fi/~oniemita/DSP/INDEX.HTM * */ #define __DEIP__ #define fpmul MP_FP_MUL enum CubicResamplers { CubicResamplerLagrange, CubicResamplerSpline }; // here is some code to work around my VS6.1 backward compability template class CubicResamplerDummy { public: static inline mp_sint32 interpolate_lagrange4Point(const bufferType* sample, const mp_sint32 smppos) { // note that the sample buffer is padded with leading and // trailing space which is filled with samples from the // beginning/end, so even if it SEEMS we are crossing sample // boundaries by -1, +1 and +2, it doesn't happen #ifdef __DEIP__ const mp_sint32 v1 = (mp_sint32)sample[(smppos>>16)] << (16-shift); const mp_sint32 v2 = (mp_sint32)sample[(smppos>>16) + 1] << (16-shift); const mp_sint32 v0 = (mp_sint32)sample[(smppos>>16) - 1] << (16-shift); const mp_sint32 v3 = (mp_sint32)sample[(smppos>>16) + 2] << (16-shift); const mp_sint32 x = smppos & 65535; mp_sint32 c0 = v1; mp_sint32 c1 = v2 - ((v0*(65536/3))>>16) - ((v3*(65536/6))>>16) - (v1>>1); mp_sint32 c2 = ((v0+v2)>>1) - v1; mp_sint32 c3 = (((65536/6)*(v3-v0))>>16) + ((v1-v2)>>1); return fpmul(fpmul(fpmul(c3,x)+c2,x)+c1, x)+c0; #else const mp_sint32 v1 = sample[(smppos>>16)] << (16-shift); const mp_sint32 v2 = sample[(smppos>>16) + 1] << (16-shift); const mp_sint32 v0 = sample[(smppos>>16) - 1] << (16-shift); mp_sint32 v3 = sample[(smppos>>16) + 2] << 8; const mp_sint32 ofsf = (smppos&65535) + 65536; v3 += -3*v2 + 3*v1 - v0; v3 = fpmul(v3, ((ofsf - 2*65536) * (65536/6)) >> 16); v3 += v2 - v1 - v1 + v0; v3 = fpmul(v3, (ofsf - 65536) >> 1); v3 += v1 - v0; v3 = fpmul(v3, ofsf); v3 += v0; return v3; #endif } static inline mp_sint32 interpolate_spline4Point(const bufferType* sample, const mp_sint32 smppos) { #ifdef __DEIP__ const mp_sint32 v1 = sample[(smppos>>16)] << (16-shift); const mp_sint32 v2 = sample[(smppos>>16) + 1] << (16-shift); const mp_sint32 v0 = sample[(smppos>>16) - 1] << (16-shift); const mp_sint32 v3 = sample[(smppos>>16) + 2] << (16-shift); const mp_sint32 x = smppos & 65535; mp_sint32 ym1py1 = v0+v2; mp_sint32 c0 = (((65536/6)*ym1py1) + (65536*2/3)*v1) >> 16; mp_sint32 c1 = (v2-v0)>>1; mp_sint32 c2 = (ym1py1>>1) - v1; mp_sint32 c3 = ((v1-v2)>>1) + (((65536/6)*(v3-v0)) >> 16); return fpmul(fpmul(fpmul(c3,x)+c2,x)+c1, x)+c0; #else // this the stuff timidity uses, I have no clue what it does, but // it causes heavy gibbs phenomena and doesn't look nearly as the above const mp_sint32 v1 = sample[(smppos>>16)] << 8; const mp_sint32 v2 = sample[(smppos>>16) + 1] << 8; const mp_sint32 v0 = sample[(smppos>>16) - 1] << 8; const mp_sint32 v3 = sample[(smppos>>16) + 2] << 8; const mp_sint32 ofsf = smppos & 65535; const mp_sint32 temp = v2; const mp_sint32 temp2 = (5 * v3 - 11 * v2 + 7 * v1 - v0) >> 2; const mp_sint32 hres = fpmul(fpmul(fpmul(temp2, ofsf + 65536), (ofsf - 65536)) + 6*v2, ofsf); const mp_sint32 temp3 = (5 * v0 - 11 * v1 + 7 * temp - v3) >> 2; const mp_sint32 temp4 = fpmul(temp3, ofsf) >> 16; const mp_sint32 temp5 = fpmul(temp4, ofsf - 65536*2) >> 16; const mp_sint32 res = fpmul(6*v1+temp5, 65536 - ofsf); return fpmul(res + hres, 65536 / 6); #endif } static inline void addBlock(mp_sint32* buffer, ChannelMixer::TMixerChannel* chn, mp_uint32 count) { // adding some local variables, will be faster to access than attributes of chn mp_sint32 voll = chn->finalvoll; mp_sint32 volr = chn->finalvolr; const mp_sint32 rampFromVolStepL = ramping ? chn->rampFromVolStepL : 0; const mp_sint32 rampFromVolStepR = ramping ? chn->rampFromVolStepR : 0; mp_sint32 smppos = chn->smppos; mp_sint32 smpposfrac = chn->smpposfrac; const mp_sint32 smpadd = (chn->flags&ChannelMixer::MP_SAMPLE_BACKWARD) ? -chn->smpadd : chn->smpadd; mp_sint32 fp = smpadd*count; MP_INCREASESMPPOS(chn->smppos,chn->smpposfrac,fp,16); const bufferType* sample = ((const bufferType*)chn->sample) + smppos; smppos = smpposfrac; while (count--) { mp_sint32 s; switch (type) { case CubicResamplerLagrange: s = interpolate_lagrange4Point(sample, smppos); break; case CubicResamplerSpline: s = interpolate_spline4Point(sample, smppos); break; } (*buffer++)+=(s*(voll>>15))>>15; (*buffer++)+=(s*(volr>>15))>>15; // ramping is a template parameter // see explanation above if (ramping) { voll+=rampFromVolStepL; volr+=rampFromVolStepR; } smppos+=smpadd; } if (ramping) { chn->finalvoll = voll; chn->finalvolr = volr; } } }; template class ResamplerLagrange : public ChannelMixer::ResamplerBase { public: virtual bool isRamping() { return ramping; } virtual bool supportsFullChecking() { return false; } virtual bool supportsNoChecking() { return true; } virtual void addBlockNoCheck(mp_sint32* buffer, ChannelMixer::TMixerChannel* chn, mp_uint32 count) { if (chn->flags & 4) CubicResamplerDummy::addBlock(buffer, chn, count); else CubicResamplerDummy::addBlock(buffer, chn, count); } }; #undef __DEIP__ #undef fpmul MilkyTracker-1.02.00/src/milkyplay/ResamplerFactory.cpp000066400000000000000000000071511324432207300230470ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * Resampler.cpp * MilkyPlay * * Created by Peter Barth on 08.11.07. * */ #include "ResamplerFactory.h" #include "ResamplerCubic.h" #include "ResamplerFast.h" #include "ResamplerSinc.h" #include "ResamplerAmiga.h" ChannelMixer::ResamplerBase* ResamplerFactory::createResampler(ResamplerTypes type) { switch (type) { case MIXER_NORMAL: return new ResamplerSimple(); case MIXER_NORMAL_RAMPING: return new ResamplerSimpleRamp(); case MIXER_LERPING: return new ResamplerLerp(); case MIXER_LERPING_RAMPING: return new ResamplerLerpRampFilter(); case MIXER_LAGRANGE: return new ResamplerLagrange(); case MIXER_LAGRANGE_RAMPING: return new ResamplerLagrange(); case MIXER_SPLINE: return new ResamplerLagrange(); case MIXER_SPLINE_RAMPING: return new ResamplerLagrange(); case MIXER_SINCTABLE: return new ResamplerSincTable(); case MIXER_SINCTABLE_RAMPING: return new ResamplerSincTable(); case MIXER_SINC: return new ResamplerSinc(); case MIXER_SINC_RAMPING: return new ResamplerSinc(); case MIXER_AMIGA500: return new ResamplerAmiga<0>(); case MIXER_AMIGA500_RAMPING: return new ResamplerAmiga<0>(); case MIXER_AMIGA500LED: return new ResamplerAmiga<1>(); case MIXER_AMIGA500LED_RAMPING: return new ResamplerAmiga<1>(); case MIXER_AMIGA1200: return new ResamplerAmiga<2>(); case MIXER_AMIGA1200_RAMPING: return new ResamplerAmiga<2>(); case MIXER_AMIGA1200LED: return new ResamplerAmiga<3>(); case MIXER_AMIGA1200LED_RAMPING: return new ResamplerAmiga<3>(); /* There is also ResamplerAmiga<5> which is a generic 22khz LP filter, it still emulates Paula's pulse chain but does not emulate any of the Amiga's internal filter circuitry. Already we have many options here so it's probably not worth including. */ case MIXER_DUMMY: return new ResamplerDummy(); case MIXER_INVALID: return NULL; } } MilkyTracker-1.02.00/src/milkyplay/ResamplerFactory.h000066400000000000000000000035561324432207300225210ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * ResamplerFactory.h * MilkyPlay * * Created by Peter Barth on 08.11.07. * */ #ifndef __RESAMPLERFACTORY_H__ #define __RESAMPLERFACTORY_H__ #include "ChannelMixer.h" class ResamplerFactory : public MixerSettings { public: static ChannelMixer::ResamplerBase* createResampler(ResamplerTypes type); }; #endif MilkyTracker-1.02.00/src/milkyplay/ResamplerFast.h000066400000000000000000000346771324432207300220170ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * ResamplerFast.h * MilkyPlay * * Created by Peter Barth on 08.11.07. * * The goal of the resamplers in this file is to be as fast as possible. * No compromises have been made for readability nor maintainability. * (hence the use of some evil macro templates) */ #ifndef __RESAMPLERFAST_H__ #define __RESAMPLERFAST_H__ #include "ResamplerMacros.h" /* * Resampler without interpolation or ramping */ class ResamplerSimple : public ChannelMixer::ResamplerBase { public: virtual bool isRamping() { return false; } virtual bool supportsFullChecking() { return true; } virtual bool supportsNoChecking() { return true; } virtual void addBlockFull(mp_sint32* buffer, ChannelMixer::TMixerChannel* chn, mp_uint32 count) { mp_sint32 voll = chn->finalvoll; mp_sint32 volr = chn->finalvolr; FULLMIXER_TEMPLATE(FULLMIXER_8BIT_NORMAL, FULLMIXER_16BIT_NORMAL, 16, 0); } virtual void addBlockNoCheck(mp_sint32* buffer, ChannelMixer::TMixerChannel* chn, mp_uint32 count) { mp_sint32 voll = chn->finalvoll; mp_sint32 volr = chn->finalvolr; mp_sint32 smppos = chn->smppos; const mp_sint32 smpadd = (chn->flags&ChannelMixer::MP_SAMPLE_BACKWARD) ? -chn->smpadd : chn->smpadd; const mp_sint32 basepos = smppos; mp_sint32 posfixed = chn->smpposfrac; mp_sint32 fp = smpadd*count; MP_INCREASESMPPOS(chn->smppos,chn->smpposfrac,fp,16); if ((voll == 0) && (volr == 0)) return; mp_sint32 sd1,sd2; NOCHECKMIXER_TEMPLATE(NOCHECKMIXER_8BIT_NORMAL, NOCHECKMIXER_16BIT_NORMAL); } }; /* * Resampler without interpolation but with ramping. */ class ResamplerSimpleRamp : public ChannelMixer::ResamplerBase { public: virtual bool isRamping() { return true; } virtual bool supportsFullChecking() { return true; } virtual bool supportsNoChecking() { return true; } virtual void addBlockFull(mp_sint32* buffer, ChannelMixer::TMixerChannel* chn, mp_uint32 count) { mp_sint32 voll = chn->finalvoll; mp_sint32 volr = chn->finalvolr; mp_sint32 rampFromVolStepL = chn->rampFromVolStepL; mp_sint32 rampFromVolStepR = chn->rampFromVolStepR; if (rampFromVolStepL || rampFromVolStepR) { FULLMIXER_TEMPLATE(FULLMIXER_8BIT_NORMAL_RAMP(true), FULLMIXER_16BIT_NORMAL_RAMP(true), 16, 0); } else { FULLMIXER_TEMPLATE(FULLMIXER_8BIT_NORMAL_RAMP(false), FULLMIXER_16BIT_NORMAL_RAMP(false), 16, 1); } chn->finalvoll = voll; chn->finalvolr = volr; } virtual void addBlockNoCheck(mp_sint32* buffer, ChannelMixer::TMixerChannel* chn, mp_uint32 count) { mp_sint32 voll = chn->finalvoll; mp_sint32 volr = chn->finalvolr; mp_sint32 rampFromVolStepL = chn->rampFromVolStepL; mp_sint32 rampFromVolStepR = chn->rampFromVolStepR; mp_sint32 smppos = chn->smppos; const mp_sint32 smpadd = (chn->flags&ChannelMixer::MP_SAMPLE_BACKWARD) ? -chn->smpadd : chn->smpadd; const mp_sint32 basepos = smppos; mp_sint32 posfixed = chn->smpposfrac; mp_sint32 fp = smpadd*count; MP_INCREASESMPPOS(chn->smppos,chn->smpposfrac, fp, 16); if ((voll == 0 && rampFromVolStepL == 0) && (volr == 0 && rampFromVolStepR == 0)) return; mp_sint32 sd1,sd2; if (rampFromVolStepL || rampFromVolStepR) { NOCHECKMIXER_TEMPLATE(NOCHECKMIXER_8BIT_NORMAL_RAMP(true), NOCHECKMIXER_16BIT_NORMAL_RAMP(true)); } else { NOCHECKMIXER_TEMPLATE(NOCHECKMIXER_8BIT_NORMAL_RAMP(false), NOCHECKMIXER_16BIT_NORMAL_RAMP(false)); } chn->finalvoll = voll; chn->finalvolr = volr; } }; /* * Resampler using linear interpolation but without ramping. */ class ResamplerLerp : public ChannelMixer::ResamplerBase { public: virtual bool isRamping() { return false; } virtual bool supportsFullChecking() { return true; } virtual bool supportsNoChecking() { return true; } virtual void addBlockFull(mp_sint32* buffer, ChannelMixer::TMixerChannel* chn, mp_uint32 count) { mp_sint32 voll = chn->finalvoll; mp_sint32 volr = chn->finalvolr; FULLMIXER_TEMPLATE(FULLMIXER_8BIT_LERP, FULLMIXER_16BIT_LERP, 16, 0); } virtual void addBlockNoCheck(mp_sint32* buffer, ChannelMixer::TMixerChannel* chn, mp_uint32 count) { mp_sint32 voll = chn->finalvoll; mp_sint32 volr = chn->finalvolr; mp_sint32 smppos = chn->smppos; const mp_sint32 smpadd = (chn->flags&ChannelMixer::MP_SAMPLE_BACKWARD) ? -chn->smpadd : chn->smpadd; const mp_sint32 basepos = smppos; mp_sint32 posfixed = chn->smpposfrac; mp_sint32 fp = smpadd*count; MP_INCREASESMPPOS(chn->smppos, chn->smpposfrac, fp, 16); if ((voll == 0) && (volr == 0)) return; mp_sint32 sd1,sd2; NOCHECKMIXER_TEMPLATE(NOCHECKMIXER_8BIT_LERP,NOCHECKMIXER_16BIT_LERP); } }; /* * Resampler using linear interpolation and ramping. * Also supports the low pass filter used by Impulse Tracker */ class ResamplerLerpRampFilter : public ChannelMixer::ResamplerBase { public: virtual bool isRamping() { return true; } virtual bool supportsFullChecking() { return true; } virtual bool supportsNoChecking() { return true; } virtual void addBlockFull(mp_sint32* buffer, ChannelMixer::TMixerChannel* chn, mp_uint32 count) { mp_sint32 voll = chn->finalvoll; mp_sint32 volr = chn->finalvolr; mp_sint32 rampFromVolStepL = chn->rampFromVolStepL; mp_sint32 rampFromVolStepR = chn->rampFromVolStepR; // filter in use? if (chn->cutoff != ChannelMixer::MP_INVALID_VALUE && chn->resonance != ChannelMixer::MP_INVALID_VALUE) { const mp_sint32 a = chn->a; const mp_sint32 b = chn->b; const mp_sint32 c = chn->c; mp_sint32 currsample = chn->currsample; mp_sint32 prevsample = chn->prevsample; if (rampFromVolStepL || rampFromVolStepR) { FULLMIXER_TEMPLATE(FULLMIXER_8BIT_LERP_RAMP_FILTER(true), FULLMIXER_16BIT_LERP_RAMP_FILTER(true), 16, 0); } else { FULLMIXER_TEMPLATE(FULLMIXER_8BIT_LERP_RAMP_FILTER(false), FULLMIXER_16BIT_LERP_RAMP_FILTER(false), 16, 1); } chn->currsample = currsample; chn->prevsample = prevsample; } // no filter else { if (rampFromVolStepL || rampFromVolStepR) { FULLMIXER_TEMPLATE(FULLMIXER_8BIT_LERP_RAMP(true), FULLMIXER_16BIT_LERP_RAMP(true), 16, 2); } else { FULLMIXER_TEMPLATE(FULLMIXER_8BIT_LERP_RAMP(false), FULLMIXER_16BIT_LERP_RAMP(false), 16, 3); } } chn->finalvoll = voll; chn->finalvolr = volr; } virtual void addBlockNoCheck(mp_sint32* buffer, ChannelMixer::TMixerChannel* chn, mp_uint32 count) { mp_sint32 voll = chn->finalvoll; mp_sint32 volr = chn->finalvolr; mp_sint32 rampFromVolStepL = chn->rampFromVolStepL; mp_sint32 rampFromVolStepR = chn->rampFromVolStepR; mp_sint32 smppos = chn->smppos; const mp_sint32 smpadd = (chn->flags&ChannelMixer::MP_SAMPLE_BACKWARD) ? -chn->smpadd : chn->smpadd; const mp_sint32 basepos = smppos; mp_sint32 posfixed = chn->smpposfrac; mp_sint32 fp = smpadd*count; MP_INCREASESMPPOS(chn->smppos, chn->smpposfrac, fp, 16); mp_sint32 sd1,sd2; // filter in use? if (chn->cutoff != ChannelMixer::MP_INVALID_VALUE && chn->resonance != ChannelMixer::MP_INVALID_VALUE) { const mp_sint32 a = chn->a; const mp_sint32 b = chn->b; const mp_sint32 c = chn->c; mp_sint32 currsample = chn->currsample; mp_sint32 prevsample = chn->prevsample; // check if ramping has to be performed if (rampFromVolStepL || rampFromVolStepR) { NOCHECKMIXER_TEMPLATE(NOCHECKMIXER_8BIT_LERP_RAMP_FILTER(true), NOCHECKMIXER_16BIT_LERP_RAMP_FILTER(true)); } else { NOCHECKMIXER_TEMPLATE(NOCHECKMIXER_8BIT_LERP_RAMP_FILTER(false), NOCHECKMIXER_16BIT_LERP_RAMP_FILTER(false)); } chn->currsample = currsample; chn->prevsample = prevsample; } // no filter else { if ((voll == 0 && rampFromVolStepL == 0) && (volr == 0 && rampFromVolStepR == 0)) return; // check if ramping has to be performed if (rampFromVolStepL || rampFromVolStepR) { NOCHECKMIXER_TEMPLATE(NOCHECKMIXER_8BIT_LERP_RAMP(true), NOCHECKMIXER_16BIT_LERP_RAMP(true)); } else { NOCHECKMIXER_TEMPLATE(NOCHECKMIXER_8BIT_LERP_RAMP(false), NOCHECKMIXER_16BIT_LERP_RAMP(false)); } } chn->finalvoll = voll; chn->finalvolr = volr; } }; /* * only for testing purpose, some dummy resampler that can be used to * play around etc. */ class ResamplerDummy : public ChannelMixer::ResamplerBase { public: virtual bool isRamping() { return false; } virtual bool supportsFullChecking() { return false; } virtual bool supportsNoChecking() { return true; } virtual void addBlockNoCheck(mp_sint32* buffer, ChannelMixer::TMixerChannel* chn, mp_uint32 count) { mp_sint32 voll = chn->finalvoll; mp_sint32 volr = chn->finalvolr; //const mp_sint32 rampFromVolStepL = chn->rampFromVolStepL; //const mp_sint32 rampFromVolStepR = chn->rampFromVolStepR; mp_sint32 smppos = chn->smppos; mp_sint32 smpposfrac = chn->smpposfrac; const mp_sint32 smpadd = (chn->flags&ChannelMixer::MP_SAMPLE_BACKWARD) ? -chn->smpadd : chn->smpadd; mp_sint32 sd1,sd2; const mp_sint32 flags = chn->flags; const mp_sint32 loopstart = chn->loopstart; const mp_sint32 loopend = chn->loopend; const mp_sint32 smplen = chn->smplen; mp_sint32 fixedtimefrac = chn->fixedtimefrac; const mp_sint32 timeadd = chn->smpadd; if (!(flags&4)) { const mp_sbyte* sample = chn->sample; while (count--) { /*sd1 = sample[smppos] << 8; sd2 = sample[smppos+1] << 8; sd1 = ((sd1<<12)+(smpposfrac>>4)*(sd2-sd1))>>12; (*buffer++)+=((sd1*(voll>>15))>>15); (*buffer++)+=((sd1*(volr>>15))>>15); voll+=rampFromVolStepL; volr+=rampFromVolStepR; */ mp_sint32 ofsf, v0, v1, v2, v3; v1 = sample[smppos] << 8; v2 = sample[smppos + 1] << 8; v0 = sample[smppos - 1] << 8; v3 = sample[smppos + 2] << 8; ofsf = smpposfrac + 65536; v3 += -3*v2 + 3*v1 - v0; v3 = ChannelMixer::fixedmul(v3, (ofsf - 2*65536) / 6); v3 += v2 - v1 - v1 + v0; v3 = ChannelMixer::fixedmul(v3, (ofsf - 65536) >> 1); v3 += v1 - v0; v3 = ChannelMixer::fixedmul(v3, ofsf); v3 += v0; (*buffer++)+=((v3*(voll>>15))>>15); (*buffer++)+=((v3*(volr>>15))>>15); //voll+=rampFromVolStepL; //volr+=rampFromVolStepR; MP_INCREASESMPPOS(smppos, smpposfrac, smpadd, 16); } } else { const mp_sword* sample = (const mp_sword*)chn->sample; while (count--) { mp_sint32 ofsf, v0, v1, v2, v3; v1 = sample[smppos]; v2 = sample[smppos + 1]; v0 = sample[smppos - 1]; v3 = sample[smppos + 2]; ofsf = smpposfrac + 65536; v3 += -3*v2 + 3*v1 - v0; v3 = ChannelMixer::fixedmul(v3, (ofsf - 2*65536) / 6); v3 += v2 - v1 - v1 + v0; v3 = ChannelMixer::fixedmul(v3, (ofsf - 65536) >> 1); v3 += v1 - v0; v3 = ChannelMixer::fixedmul(v3, ofsf); v3 += v0; (*buffer++)+=((v3*(voll>>15))>>15); (*buffer++)+=((v3*(volr>>15))>>15); //voll+=rampFromVolStepL; //volr+=rampFromVolStepR; MP_INCREASESMPPOS(smppos, smpposfrac, smpadd, 16); } } chn->smppos = smppos; chn->smpposfrac = smpposfrac; chn->fixedtimefrac = fixedtimefrac; /*if (!(chn->flags&4)) { const mp_sbyte* sample = chn->sample + basepos; while (count--) { sd1 = sample[posfixed>>16]<<8; sd2 = sample[(posfixed>>16)+1]<<8; sd1 =((sd1<<12)+((posfixed>>4)&0xfff)*(sd2-sd1))>>12; (*buffer++)+=((sd1*(voll>>15))>>15); (*buffer++)+=((sd1*(volr>>15))>>15); voll+=rampFromVolStepL; volr+=rampFromVolStepR; posfixed+=smpadd; } } else { const mp_sword* sample = (const mp_sword*)chn->sample + basepos; while (count--) { sd1 = sample[posfixed>>16]; sd2 = sample[(posfixed>>16)+1]; sd1 =((sd1<<12)+((posfixed>>4)&0xfff)*(sd2-sd1))>>12; (*buffer++)+=((sd1*(voll>>15))>>15); (*buffer++)+=((sd1*(volr>>15))>>15); voll+=rampFromVolStepL; volr+=rampFromVolStepR; posfixed+=smpadd; } } */ /* if (chn->cutoff != MP_INVALID_VALUE && chn->resonance != MP_INVALID_VALUE) { const mp_sint32 a = chn->a; const mp_sint32 b = chn->b; const mp_sint32 c = chn->c; mp_sint32 currsample = chn->currsample; mp_sint32 prevsample = chn->prevsample; // check if ramping has to be performed if (rampFromVolStepL || rampFromVolStepR) { NOCHECKMIXER_TEMPLATE(NOCHECKMIXER_8BIT_LERP_RAMP_FILTER(true),NOCHECKMIXER_16BIT_LERP_RAMP_FILTER(true)); } else { NOCHECKMIXER_TEMPLATE(NOCHECKMIXER_8BIT_LERP_RAMP_FILTER(false),NOCHECKMIXER_16BIT_LERP_RAMP_FILTER(false)); } chn->currsample = currsample; chn->prevsample = prevsample; } else { if ((voll == 0 && rampFromVolStepL == 0) && (volr == 0 && rampFromVolStepR == 0)) return; // check if ramping has to be performed if (rampFromVolStepL || rampFromVolStepR) { NOCHECKMIXER_TEMPLATE(NOCHECKMIXER_8BIT_LERP_RAMP(true),NOCHECKMIXER_16BIT_LERP_RAMP(true)); } else { NOCHECKMIXER_TEMPLATE(NOCHECKMIXER_8BIT_LERP_RAMP(false),NOCHECKMIXER_16BIT_LERP_RAMP(false)); } }*/ //chn->finalvoll = voll; //chn->finalvolr = volr; } }; #endif MilkyTracker-1.02.00/src/milkyplay/ResamplerMacros.h000066400000000000000000000451241324432207300223330ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * ResamplerMacros.h * MilkyPlay mixer macros & "templates" * * * "- Be prepared! Are you sure you want to know? :-)" * */ #ifndef __RESAMPLERMACROS_H__ #define __RESAMPLERMACROS_H__ #define VALIDATE \ /*ASSERT((void*)(sample+(posfixed>>16)) >= (void*)chn->sample);*/ #define PROCESS_BLOCK(MIXER) \ mp_sint32 blockCount = count>>3; \ mp_sint32 remainCount = count & 7; \ while (blockCount) \ { \ VALIDATE \ MIXER \ posfixed+=smpadd; \ VALIDATE \ MIXER \ posfixed+=smpadd; \ VALIDATE \ MIXER \ posfixed+=smpadd; \ VALIDATE \ MIXER \ posfixed+=smpadd; \ VALIDATE \ MIXER \ posfixed+=smpadd; \ VALIDATE \ MIXER \ posfixed+=smpadd; \ VALIDATE \ MIXER \ posfixed+=smpadd; \ VALIDATE \ MIXER \ posfixed+=smpadd; \ blockCount--; \ } \ while (remainCount) \ { \ VALIDATE \ MIXER \ posfixed+=smpadd; \ remainCount--; \ } #define NOCHECKMIXER_TEMPLATE(MIXER_8BIT,MIXER_16BIT) \ if (!(chn->flags&4)) \ { \ const mp_sbyte* sample = chn->sample + basepos; \ PROCESS_BLOCK(MIXER_8BIT) \ } \ else \ { \ const mp_sword* sample = (const mp_sword*)chn->sample + basepos; \ PROCESS_BLOCK(MIXER_16BIT) \ } ///////////////////////////////////////////////////////// // NO INTERPOLATION AND NO VOLUME RAMPING // ///////////////////////////////////////////////////////// #define NOCHECKMIXER_8BIT_NORMAL \ sd1 = sample[posfixed>>16]<<8; \ \ /* adjust volume for left channel & mix */ \ (*buffer++)+=((sd1*(voll>>15))>>15); \ /* adjust volume for right channel & mix */ \ (*buffer++)+=((sd1*(volr>>15))>>15); #define NOCHECKMIXER_16BIT_NORMAL \ sd1 = sample[posfixed>>16]; \ \ /* adjust volume for left channel & mix */ \ (*buffer++)+=((sd1*(voll>>15))>>15); \ /* adjust volume for right channel & mix */ \ (*buffer++)+=((sd1*(volr>>15))>>15); ///////////////////////////////////////////////////////// // NO INTERPOLATION BUT VOLUME RAMPING // ///////////////////////////////////////////////////////// #define NOCHECKMIXER_8BIT_NORMAL_RAMP(_RAMP_) \ sd1 = sample[posfixed>>16]<<8; \ /* adjust volume for left channel & mix */ \ (*buffer++)+=((sd1*(voll>>15))>>15); \ /* adjust volume for right channel & mix */ \ (*buffer++)+=((sd1*(volr>>15))>>15); \ if ((_RAMP_)) \ { \ voll+=rampFromVolStepL; \ volr+=rampFromVolStepR; \ } #define NOCHECKMIXER_16BIT_NORMAL_RAMP(_RAMP_) \ sd1 = sample[posfixed>>16]; \ /* adjust volume for left channel & mix */ \ (*buffer++)+=((sd1*(voll>>15))>>15); \ /* adjust volume for right channel & mix */ \ (*buffer++)+=((sd1*(volr>>15))>>15); \ if ((_RAMP_)) \ { \ voll+=rampFromVolStepL; \ volr+=rampFromVolStepR; \ } ///////////////////////////////////////////////////////// // INTERPOLATION AND NO VOLUME RAMPING // ///////////////////////////////////////////////////////// #define NOCHECKMIXER_8BIT_LERP \ sd1 = sample[posfixed>>16]<<8; \ sd2 = sample[(posfixed>>16)+1]<<8; \ \ sd1 =((sd1<<12)+((posfixed>>4)&0xfff)*(sd2-sd1))>>12; \ \ /* adjust volume for left channel & mix */ \ (*buffer++)+=((sd1*(voll>>15))>>15); \ /* adjust volume for right channel & mix */ \ (*buffer++)+=((sd1*(volr>>15))>>15); #define NOCHECKMIXER_16BIT_LERP \ sd1 = sample[posfixed>>16]; \ sd2 = sample[(posfixed>>16)+1]; \ \ sd1 =((sd1<<12)+((posfixed>>4)&0xfff)*(sd2-sd1))>>12; \ \ /* adjust volume for left channel & mix */ \ (*buffer++)+=((sd1*(voll>>15))>>15); \ /* adjust volume for right channel & mix */ \ (*buffer++)+=((sd1*(volr>>15))>>15); ///////////////////////////////////////////////////////// // INTERPOLATION AND VOLUME RAMPING // ///////////////////////////////////////////////////////// #define NOCHECKMIXER_8BIT_LERP_RAMP(_RAMP_) \ sd1 = sample[posfixed>>16]<<8; \ sd2 = sample[(posfixed>>16)+1]<<8; \ \ sd1 =((sd1<<12)+((posfixed>>4)&0xfff)*(sd2-sd1))>>12; \ \ /* adjust volume for left channel & mix */ \ (*buffer++)+=((sd1*(voll>>15))>>15); \ /* adjust volume for right channel & mix */ \ (*buffer++)+=((sd1*(volr>>15))>>15); \ \ if ((_RAMP_)) \ { \ voll+=rampFromVolStepL; \ volr+=rampFromVolStepR; \ } #define NOCHECKMIXER_16BIT_LERP_RAMP(_RAMP_) \ sd1 = sample[posfixed>>16]; \ sd2 = sample[(posfixed>>16)+1]; \ \ sd1 =((sd1<<12)+((posfixed>>4)&0xfff)*(sd2-sd1))>>12; \ \ /* adjust volume for left channel & mix */ \ (*buffer++)+=((sd1*(voll>>15))>>15); \ /* adjust volume for right channel & mix */ \ (*buffer++)+=((sd1*(volr>>15))>>15); \ \ if ((_RAMP_)) \ { \ voll+=rampFromVolStepL; \ volr+=rampFromVolStepR; \ } ///////////////////////////////////////////////////////// // INTERPOLATION/VOLUME RAMPING and FILTERING // ///////////////////////////////////////////////////////// #define NOCHECKMIXER_8BIT_LERP_RAMP_FILTER(_RAMP_) \ sd1 = sample[posfixed>>16]<<8; \ sd2 = sample[(posfixed>>16)+1]<<8; \ \ sd1 =((sd1<<12)+((posfixed>>4)&0xfff)*(sd2-sd1))>>12; \ \ sd1 = (MP_FP_MUL(sd1, a) + MP_FP_MUL(currsample, b) + MP_FP_MUL(prevsample, c)) >> ChannelMixer::MP_FILTERPRECISION; \ prevsample = currsample; \ currsample = sd1; \ \ /* adjust volume for left/right channels & mix */ \ (*buffer++)+=MP_FP_MUL(sd1, voll>>14); \ (*buffer++)+=MP_FP_MUL(sd1, volr>>14); \ \ if ((_RAMP_)) \ { \ voll+=rampFromVolStepL; \ volr+=rampFromVolStepR; \ } #define NOCHECKMIXER_16BIT_LERP_RAMP_FILTER(_RAMP_) \ sd1 = sample[posfixed>>16]; \ sd2 = sample[(posfixed>>16)+1]; \ \ sd1 =((sd1<<12)+((posfixed>>4)&0xfff)*(sd2-sd1))>>12; \ \ sd1 = (MP_FP_MUL(sd1, a) + MP_FP_MUL(currsample, b) + MP_FP_MUL(prevsample, c)) >> ChannelMixer::MP_FILTERPRECISION; \ prevsample = currsample; \ currsample = sd1; \ \ /* adjust volume for left/right channels & mix */ \ (*buffer++)+=MP_FP_MUL(sd1, voll>>14); \ (*buffer++)+=MP_FP_MUL(sd1, volr>>14); \ \ if ((_RAMP_)) \ { \ voll+=rampFromVolStepL; \ volr+=rampFromVolStepR; \ } #define BIDIR_REPOSITION(FRACBITS, SMPPOS, SMPPOSFRAC, LOOPSTART, LOOPEND) \ if (!((SMPPOS == LOOPEND) && (SMPPOSFRAC == 0) ||\ (SMPPOS == LOOPSTART) && (SMPPOSFRAC == 0))) \ { \ do \ { \ if (SMPPOS >= LOOPEND) \ SMPPOS = LOOPEND-(SMPPOS-LOOPEND+1); \ else if (SMPPOS < LOOPSTART) \ SMPPOS = LOOPSTART + (LOOPSTART-SMPPOS - 1); \ SMPPOSFRAC = ((1<= LOOPSTART && SMPPOS <= LOOPEND)); \ } #define FULLMIXER_TEMPLATE(MIXER_8BIT, MIXER_16BIT, FRACBITS, LABELNO) \ mp_sint32 smppos = chn->smppos; \ mp_sint32 smpposfrac = chn->smpposfrac; \ mp_sint32 smpadd = chn->smpadd; \ mp_sint32 loopstart = chn->loopstart; \ mp_sint32 loopend = chn->loopend; \ mp_sint32 flags = chn->flags; \ const mp_sbyte* sample = chn->sample; \ mp_sint32 sd1,sd2; \ \ /* 8 bit version */ \ if (!(flags&4)) \ { \ \ if (((((flags&3) == 0 || (flags&3) == 1)) && !(flags&ChannelMixer::MP_SAMPLE_BACKWARD)) || \ ((flags&3) == 2 && (flags&ChannelMixer::MP_SAMPLE_BACKWARD) == 0)) \ { \ \ while (count) \ { \ MIXER_8BIT \ MP_INCREASESMPPOS(smppos,smpposfrac,smpadd,FRACBITS); \ /* stop playing if necessary */ \ if (smppos>=loopend) \ { \ if ((flags & 3) == 0) \ { \ if (flags & ChannelMixer::MP_SAMPLE_ONESHOT) \ { \ flags &= ~ChannelMixer::MP_SAMPLE_ONESHOT; \ flags |= 1; \ chn->loopend = chn->loopendcopy; \ loopend = chn->loopend; \ /*ASSERT(loopend-loopstart > 0);*/ \ smppos = ((smppos - loopstart)%(loopend-loopstart))+loopstart; \ } \ else \ { \ flags&=~ChannelMixer::MP_SAMPLE_PLAY; \ break; \ } \ } \ else if ((flags & 3) == 1) \ { \ /*if (smppos>=((loopend<<1)-loopstart))*/ \ /* smppos=loopstart;*/ \ /*else */\ /* smppos=loopstart+(smppos-loopend); */\ /*ASSERT(loopend-loopstart > 0);*/ \ smppos = ((smppos - loopstart)%(loopend-loopstart))+loopstart; \ } \ else \ { \ flags|=ChannelMixer::MP_SAMPLE_BACKWARD; \ BIDIR_REPOSITION(FRACBITS, smppos, smpposfrac, loopstart, loopend) \ /*ASSERT(smppos >= loopstart && smppos <= loopend);*/ \ goto continueWithBiDir8_## LABELNO; \ } \ } \ \ continueWithNormalDir8_## LABELNO: \ \ count--; \ \ } \ \ } \ /* bi-dir loop */ \ else \ { \ while (count) \ { \ MIXER_8BIT \ MP_INCREASESMPPOS(smppos,smpposfrac,-smpadd,FRACBITS); \ \ if (loopstart>smppos) \ { \ if ((flags & 3) == 0) \ { \ flags&=~ChannelMixer::MP_SAMPLE_PLAY; \ break; \ } \ else if ((flags & 3) == 1) \ { \ smppos = loopend-((loopstart-smppos)%(loopend-loopstart)); \ } \ else \ { \ flags&=~ChannelMixer::MP_SAMPLE_BACKWARD; \ BIDIR_REPOSITION(FRACBITS, smppos, smpposfrac, loopstart, loopend) \ /*ASSERT(smppos >= loopstart && smppos <= loopend);*/ \ goto continueWithNormalDir8_## LABELNO; \ } \ } \ \ continueWithBiDir8_## LABELNO: \ \ count--; \ \ } \ \ } \ \ } \ else \ { \ \ if (((((flags&3) == 0 || (flags&3) == 1)) && !(flags&ChannelMixer::MP_SAMPLE_BACKWARD)) || \ ((flags&3) == 2 && (flags&ChannelMixer::MP_SAMPLE_BACKWARD) == 0)) \ { \ \ while (count) \ { \ MIXER_16BIT \ MP_INCREASESMPPOS(smppos,smpposfrac,smpadd,FRACBITS); \ /* stop playing if necessary */ \ if (smppos>=loopend) \ { \ if ((flags & 3) == 0) \ { \ if (flags & ChannelMixer::MP_SAMPLE_ONESHOT) \ { \ flags &= ~ChannelMixer::MP_SAMPLE_ONESHOT; \ flags |= 1; \ chn->loopend = chn->loopendcopy; \ loopend = chn->loopend; \ smppos = ((smppos - loopstart)%(loopend-loopstart))+loopstart; \ } \ else \ { \ flags&=~ChannelMixer::MP_SAMPLE_PLAY; \ break; \ } \ } \ else if ((flags & 3) == 1) \ { \ /*if (smppos>=((loopend<<1)-loopstart))*/ \ /* smppos=loopstart;*/ \ /*else */\ /* smppos=loopstart+(smppos-loopend); */\ smppos = ((smppos - loopstart)%(loopend-loopstart))+loopstart; \ } \ else \ { \ flags|=ChannelMixer::MP_SAMPLE_BACKWARD; \ BIDIR_REPOSITION(FRACBITS, smppos, smpposfrac, loopstart, loopend) \ /*ASSERT(smppos >= loopstart && smppos <= loopend);*/ \ goto continueWithBiDir16_## LABELNO; \ } \ } \ \ continueWithNormalDir16_## LABELNO: \ \ count--; \ \ } \ \ } \ /* bi-dir loop */ \ else \ { \ while (count) \ { \ MIXER_16BIT \ MP_INCREASESMPPOS(smppos,smpposfrac,-smpadd,FRACBITS); \ \ if (loopstart>smppos) \ { \ if ((flags & 3) == 0) \ { \ flags&=~ChannelMixer::MP_SAMPLE_PLAY; \ break; \ } \ else if ((flags & 3) == 1) \ { \ smppos = loopend-((loopstart-smppos)%(loopend-loopstart)); \ } \ else \ { \ flags&=~ChannelMixer::MP_SAMPLE_BACKWARD; \ BIDIR_REPOSITION(FRACBITS, smppos, smpposfrac, loopstart, loopend) \ /*ASSERT(smppos >= loopstart && smppos <= loopend);*/ \ goto continueWithNormalDir16_## LABELNO; \ } \ } \ \ continueWithBiDir16_## LABELNO: \ \ count--; \ \ } \ \ } \ \ } \ chn->smppos = smppos; \ chn->smpposfrac = smpposfrac; \ /*chn->smpadd = smpadd;*/ \ chn->flags = flags; ///////////////////////////////////////////////////////// // NO INTERPOLATION AND NO VOLUME RAMPING // ///////////////////////////////////////////////////////// #define FULLMIXER_8BIT_NORMAL \ /* 8 bit sample */ \ sd1 = ((mp_sbyte)sample[smppos])<<8; \ /* adjust volume for left channel & mix */ \ (*buffer++)+=((sd1*(voll>>15))>>15); \ /* adjust volume for right channel & mix */ \ (*buffer++)+=((sd1*(volr>>15))>>15); #define FULLMIXER_16BIT_NORMAL \ /* 16 bit sample */ \ sd1 = ((mp_sword*)(sample))[smppos]; \ /* adjust volume for left channel & mix */ \ (*buffer++)+=((sd1*(voll>>15))>>15); \ /* adjust volume for right channel & mix */ \ (*buffer++)+=((sd1*(volr>>15))>>15); ///////////////////////////////////////////////////////// // NO INTERPOLATION BUT VOLUME RAMPING // ///////////////////////////////////////////////////////// #define FULLMIXER_8BIT_NORMAL_RAMP(_RAMP_) \ /* 8 bit sample */ \ sd1 = ((mp_sbyte)sample[smppos])<<8; \ /* adjust volume for left channel & mix */ \ (*buffer++)+=((sd1*(voll>>15))>>15); \ /* adjust volume for right channel & mix */ \ (*buffer++)+=((sd1*(volr>>15))>>15); \ if ((_RAMP_)) \ { \ voll+=rampFromVolStepL; \ volr+=rampFromVolStepR; \ } #define FULLMIXER_16BIT_NORMAL_RAMP(_RAMP_) \ /* 16 bit sample */ \ sd1 = ((mp_sword*)(sample))[smppos]; \ /* adjust volume for left channel & mix */ \ (*buffer++)+=((sd1*(voll>>15))>>15); \ /* adjust volume for right channel & mix */ \ (*buffer++)+=((sd1*(volr>>15))>>15); \ if ((_RAMP_)) \ { \ voll+=rampFromVolStepL; \ volr+=rampFromVolStepR; \ } ///////////////////////////////////////////////////////// // INTERPOLATION AND NO VOLUME RAMPING // ///////////////////////////////////////////////////////// #define FULLMIXER_8BIT_LERP \ /* 8 bit sample */ \ sd1 = ((mp_sbyte)sample[smppos])<<8; \ sd2 = ((mp_sbyte)sample[smppos+1])<<8; \ \ sd1 =((sd1<<12)+(smpposfrac>>4)*(sd2-sd1))>>12; \ \ /* adjust volume for left channel & mix */ \ (*buffer++)+=((sd1*(voll>>15))>>15); \ /* adjust volume for right channel & mix */ \ (*buffer++)+=((sd1*(volr>>15))>>15); #define FULLMIXER_16BIT_LERP \ /* 16 bit sample */ \ sd1 = ((mp_sword*)(sample))[smppos]; \ sd2 = ((mp_sword*)(sample))[smppos+1]; \ \ sd1 =((sd1<<12)+(smpposfrac>>4)*(sd2-sd1))>>12; \ \ /* adjust volume for left channel & mix */ \ (*buffer++)+=((sd1*(voll>>15))>>15); \ /* adjust volume for right channel & mix */ \ (*buffer++)+=((sd1*(volr>>15))>>15); ///////////////////////////////////////////////////////// // INTERPOLATION AND VOLUME RAMPING // ///////////////////////////////////////////////////////// #define FULLMIXER_8BIT_LERP_RAMP(_RAMP_) \ /* 8 bit sample */ \ sd1 = ((mp_sbyte)sample[smppos])<<8; \ sd2 = ((mp_sbyte)sample[smppos+1])<<8; \ \ sd1 =((sd1<<12)+(smpposfrac>>4)*(sd2-sd1))>>12; \ \ /* adjust volume for left channel & mix */ \ (*buffer++)+=((sd1*(voll>>15))>>15); \ /* adjust volume for right channel & mix */ \ (*buffer++)+=((sd1*(volr>>15))>>15); \ \ if ((_RAMP_)) \ { \ voll+=rampFromVolStepL; \ volr+=rampFromVolStepR; \ } #define FULLMIXER_16BIT_LERP_RAMP(_RAMP_) \ /* 16 bit sample */ \ sd1 = ((mp_sword*)(sample))[smppos]; \ sd2 = ((mp_sword*)(sample))[smppos+1]; \ \ sd1 =((sd1<<12)+(smpposfrac>>4)*(sd2-sd1))>>12; \ \ /* adjust volume for left channel & mix */ \ (*buffer++)+=((sd1*(voll>>15))>>15); \ /* adjust volume for right channel & mix */ \ (*buffer++)+=((sd1*(volr>>15))>>15); \ \ if ((_RAMP_)) \ { \ voll+=rampFromVolStepL; \ volr+=rampFromVolStepR; \ } ///////////////////////////////////////////////////////// // INTERPOLATION/VOLUME RAMPING and FILTERING // ///////////////////////////////////////////////////////// #define FULLMIXER_8BIT_LERP_RAMP_FILTER(_RAMP_) \ sd1 = ((mp_sbyte)sample[smppos])<<8; \ sd2 = ((mp_sbyte)sample[smppos+1])<<8; \ \ sd1 =((sd1<<12)+((smpposfrac>>4)&0xfff)*(sd2-sd1))>>12; \ \ sd1 = (MP_FP_MUL(sd1, a) + MP_FP_MUL(currsample, b) + MP_FP_MUL(prevsample, c)) >> ChannelMixer::MP_FILTERPRECISION; \ prevsample = currsample; \ currsample = sd1; \ \ /* adjust volume for left/right channels & mix */ \ (*buffer++)+=MP_FP_MUL(sd1, voll>>14); \ (*buffer++)+=MP_FP_MUL(sd1, volr>>14); \ \ if ((_RAMP_)) \ { \ voll+=rampFromVolStepL; \ volr+=rampFromVolStepR; \ } #define FULLMIXER_16BIT_LERP_RAMP_FILTER(_RAMP_) \ sd1 = ((mp_sword*)(sample))[smppos]; \ sd2 = ((mp_sword*)(sample))[smppos+1]; \ \ sd1 =((sd1<<12)+((smpposfrac>>4)&0xfff)*(sd2-sd1))>>12; \ \ sd1 = (MP_FP_MUL(sd1, a) + MP_FP_MUL(currsample, b) + MP_FP_MUL(prevsample, c)) >> ChannelMixer::MP_FILTERPRECISION; \ prevsample = currsample; \ currsample = sd1; \ \ /* adjust volume for left/right channels & mix */ \ (*buffer++)+=MP_FP_MUL(sd1, voll>>14); \ (*buffer++)+=MP_FP_MUL(sd1, volr>>14); \ \ if ((_RAMP_)) \ { \ voll+=rampFromVolStepL; \ volr+=rampFromVolStepR; \ } ///////////////////////////////////////////////////////// // INTERPOLATION AND VOLUME RAMPING HIRES // ///////////////////////////////////////////////////////// #define FULLMIXER_8BIT_LERP_RAMP_HIRES(_RAMP_) \ /* 8 bit sample */ \ sd1 = ((mp_sbyte)sample[smppos])<<8; \ sd2 = ((mp_sbyte)sample[smppos+1])<<8; \ \ sd1 =((sd1<<12)+(smpposfrac>>(4+12))*(sd2-sd1))>>12; \ \ /* adjust volume for left channel & mix */ \ (*buffer++)+=((sd1*(voll>>15))>>15); \ /* adjust volume for right channel & mix */ \ (*buffer++)+=((sd1*(volr>>15))>>15); \ \ if ((_RAMP_)) \ { \ voll+=rampFromVolStepL; \ volr+=rampFromVolStepR; \ } #define FULLMIXER_16BIT_LERP_RAMP_HIRES(_RAMP_) \ /* 16 bit sample */ \ sd1 = ((mp_sword*)(sample))[smppos]; \ sd2 = ((mp_sword*)(sample))[smppos+1]; \ \ sd1 =((sd1<<12)+(smpposfrac>>(4+12))*(sd2-sd1))>>12; \ \ /* adjust volume for left channel & mix */ \ (*buffer++)+=((sd1*(voll>>15))>>15); \ /* adjust volume for right channel & mix */ \ (*buffer++)+=((sd1*(volr>>15))>>15); \ \ if ((_RAMP_)) \ { \ voll+=rampFromVolStepL; \ volr+=rampFromVolStepR; \ } #endif MilkyTracker-1.02.00/src/milkyplay/ResamplerSinc.h000066400000000000000000000426421324432207300220050ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * ResamplerSinc.h * MilkyPlay * * Created by Peter Barth on 03.01.08. * */ #include /* * Sinc resamplers based on: * http://www.cs.princeton.edu/courses/archive/spr07/cos325/src/TimeStuf/srconvrt.c * */ #ifndef M_PI #define M_PI 3.14159265358979323846 #endif #define fpmul MP_FP_MUL #define advancePos(CHNsmppos, CHNflags, CHNloopstart, CHNloopend, CHNloopendcopy) \ if (((((CHNflags&3) == 0 || (CHNflags&3) == 1)) && !(CHNflags&ChannelMixer::MP_SAMPLE_BACKWARD)) || \ ((CHNflags&3) == 2 && (CHNflags&ChannelMixer::MP_SAMPLE_BACKWARD) == 0)) \ { \ CHNsmppos++; \ /* stop playing if necessary */ \ if (CHNsmppos>=CHNloopend) \ { \ if ((CHNflags & 3) == 0) \ { \ if (CHNflags & ChannelMixer::MP_SAMPLE_ONESHOT) \ { \ CHNflags &= ~ChannelMixer::MP_SAMPLE_ONESHOT; \ CHNflags |= 1; \ CHNloopend = CHNloopendcopy; \ CHNsmppos = CHNloopstart; \ } \ else \ { \ CHNflags&=~ChannelMixer::MP_SAMPLE_PLAY; \ } \ } \ else if ((CHNflags & 3) == 1) \ { \ CHNsmppos = CHNloopstart; \ } \ else \ { \ CHNflags|=ChannelMixer::MP_SAMPLE_BACKWARD; \ CHNsmppos = CHNloopend-1; \ } \ }\ } \ /* bi-dir loop */ \ else \ { \ CHNsmppos--; \ if (CHNloopstart>CHNsmppos) \ { \ if ((CHNflags & 3) == 0) \ { \ CHNflags&=~ChannelMixer::MP_SAMPLE_PLAY; \ } \ else if ((CHNflags & 3) == 1) \ { \ CHNsmppos = CHNloopend-1; \ } \ else \ { \ CHNflags&=~ChannelMixer::MP_SAMPLE_BACKWARD; \ CHNsmppos = CHNloopstart; \ } \ } \ } // double precision sinc without window function template class SincResamplerDummy { private: static inline double sinc(double x) { if (x==0.0) return 1.0; else { double temp = M_PI * x; return sin(temp) / (temp); } } enum { WINDOWSIZE = windowSize, // must be even WIDTH = (WINDOWSIZE / 2) }; public: static inline void addBlock(mp_sint32* buffer, ChannelMixer::TMixerChannel* chn, mp_uint32 count) { const bufferType* sample = (const bufferType*)chn->sample; mp_sint32 voll = chn->finalvoll; mp_sint32 volr = chn->finalvolr; const mp_sint32 rampFromVolStepL = ramping ? chn->rampFromVolStepL : 0; const mp_sint32 rampFromVolStepR = ramping ? chn->rampFromVolStepR : 0; mp_sint32 smppos = chn->smppos; mp_sint32 smpposfrac = chn->smpposfrac; const mp_sint32 smpadd = (chn->flags&ChannelMixer::MP_SAMPLE_BACKWARD) ? -chn->smpadd : chn->smpadd; const mp_sint32 flags = chn->flags; const mp_sint32 loopstart = chn->loopstart; const mp_sint32 loopend = chn->loopend; const mp_sint32 loopendcopy = chn->loopendcopy; const mp_sint32 smplen = chn->smplen; mp_sint32 fixedtimefrac = chn->fixedtimefrac; const mp_sint32 timeadd = chn->smpadd; ChannelMixer::TMixerChannel pos(true); while (count--) { double result = 0; const double time_now = fixedtimefrac * (1.0 / 65536.0); if (abs(smpadd)<65536) { pos.smppos = smppos; pos.loopstart = loopstart; pos.loopend = loopend; pos.loopendcopy = loopendcopy; pos.flags = smpadd < 0 ? (flags & ~ChannelMixer::MP_SAMPLE_BACKWARD) : ((flags & ~ChannelMixer::MP_SAMPLE_BACKWARD) | ChannelMixer::MP_SAMPLE_BACKWARD); // check whether we are outside loop points // if that's the case we're treating the sample as a normal finite signal // note that this is still not totally correct treatment const bool outSideLoop = !(((flags & 3) && pos.smppos >= loopstart && pos.smppos < loopend)); if (outSideLoop) { pos.loopstart = 0; pos.loopend = smplen; pos.flags &= ~3; } double time = time_now; if (!fixedtimefrac && (flags & ChannelMixer::MP_SAMPLE_BACKWARD)) time = 1.0; mp_sint32 j; for (j = 0; j 0 ? (flags & ~ChannelMixer::MP_SAMPLE_BACKWARD) : ((flags & ~ChannelMixer::MP_SAMPLE_BACKWARD) | ChannelMixer::MP_SAMPLE_BACKWARD); if (outSideLoop) pos.flags &= ~3; time = time_now; if (!fixedtimefrac && (flags & ChannelMixer::MP_SAMPLE_BACKWARD)) time = 1.0; for (j = 1; j= loopstart && pos.smppos < loopend)); if (outSideLoop) { pos.loopstart = 0; pos.loopend = smplen; pos.flags &= ~3; } double time = time_now; if (!fixedtimefrac && (flags & ChannelMixer::MP_SAMPLE_BACKWARD)) time = 1.0; mp_sint32 j; for (j = 0; j 0 ? (flags & ~ChannelMixer::MP_SAMPLE_BACKWARD) : ((flags & ~ChannelMixer::MP_SAMPLE_BACKWARD) | ChannelMixer::MP_SAMPLE_BACKWARD); if (outSideLoop) pos.flags &= ~3; time = time_now; if (!fixedtimefrac && (flags & ChannelMixer::MP_SAMPLE_BACKWARD)) time = 1.0; for (j = 1; j>15))>>15); (*buffer++)+=((final*(volr>>15))>>15); if (ramping) { voll+=rampFromVolStepL; volr+=rampFromVolStepR; } MP_INCREASESMPPOS(smppos, smpposfrac, smpadd, 16); fixedtimefrac=(fixedtimefrac+timeadd) & 65535; } chn->smppos = smppos; chn->smpposfrac = smpposfrac; chn->fixedtimefrac = fixedtimefrac; if (ramping) { chn->finalvoll = voll; chn->finalvolr = volr; } } }; template class ResamplerSinc : public ChannelMixer::ResamplerBase { private: public: virtual bool isRamping() { return ramping; } virtual bool supportsFullChecking() { return false; } virtual bool supportsNoChecking() { return true; } virtual void addBlockNoCheck(mp_sint32* buffer, ChannelMixer::TMixerChannel* chn, mp_uint32 count) { if (chn->flags & 4) SincResamplerDummy::addBlock(buffer, chn, count); else SincResamplerDummy::addBlock(buffer, chn, count); } }; // fixed point sinc with almost hamming window // you like that, eh? #define SINCTAB ResamplerSincTableBase::sinc_table #define WSIZE ResamplerSincTableBase::WIDTH #define SPZCSHIFT ResamplerSincTableBase::SAMPLES_PER_ZERO_CROSSING_SHIFT #define SINC(x) \ ((abs(x)>>16)>=(WSIZE-1) ? 0 : \ (SINCTAB[abs(x) >> (16-SPZCSHIFT)] + \ fpmul((SINCTAB[(abs(x) >> (16-SPZCSHIFT)) + 1] - \ SINCTAB[abs(x) >> (16-SPZCSHIFT)]), \ (abs(x) >> (16-SPZCSHIFT)) & 65535))) // share sinc lookup table template class ResamplerSincTableBase : public ChannelMixer::ResamplerBase { protected: enum { WINDOWSIZE = windowSize, // must be even WIDTH = (WINDOWSIZE / 2), SAMPLES_PER_ZERO_CROSSING_SHIFT = 10, SAMPLES_PER_ZERO_CROSSING = (1 << SAMPLES_PER_ZERO_CROSSING_SHIFT), TABLESIZE = SAMPLES_PER_ZERO_CROSSING*WIDTH, }; static mp_sint32* sinc_table; void make_sinc() { mp_sint32 i; double temp,win_freq,win; win_freq = M_PI / WIDTH / SAMPLES_PER_ZERO_CROSSING; sinc_table[0] = 65536; for (i=1;i bool ResamplerSincTableBase::tableInit = false; template mp_sint32* ResamplerSincTableBase::sinc_table = NULL; template class SincTableResamplerDummy : public ResamplerSincTableBase { public: static inline void addBlock(mp_sint32* buffer, ChannelMixer::TMixerChannel* chn, mp_uint32 count) { const bufferType* sample = (const bufferType*)chn->sample; mp_sint32 voll = chn->finalvoll; mp_sint32 volr = chn->finalvolr; const mp_sint32 rampFromVolStepL = ramping ? chn->rampFromVolStepL : 0; const mp_sint32 rampFromVolStepR = ramping ? chn->rampFromVolStepR : 0; mp_sint32 smppos = chn->smppos; mp_sint32 smpposfrac = chn->smpposfrac; const mp_sint32 smpadd = (chn->flags&ChannelMixer::MP_SAMPLE_BACKWARD) ? -chn->smpadd : chn->smpadd; const mp_sint32 rsmpadd = chn->rsmpadd; const mp_sint32 flags = chn->flags; const mp_sint32 loopstart = chn->loopstart; const mp_sint32 loopend = chn->loopend; const mp_sint32 loopendcopy = chn->loopendcopy; const mp_sint32 smplen = chn->smplen; mp_sint32 fixedtimefrac = chn->fixedtimefrac; const mp_sint32 timeadd = chn->smpadd; const mp_sint32 negflags = smpadd < 0 ? (flags & ~ChannelMixer::MP_SAMPLE_BACKWARD) : ((flags & ~ChannelMixer::MP_SAMPLE_BACKWARD) | ChannelMixer::MP_SAMPLE_BACKWARD); const mp_sint32 posflags = smpadd > 0 ? (flags & ~ChannelMixer::MP_SAMPLE_BACKWARD) : ((flags & ~ChannelMixer::MP_SAMPLE_BACKWARD) | ChannelMixer::MP_SAMPLE_BACKWARD); mp_sint32 tmpsmppos; mp_sint32 tmpflags; mp_sint32 tmploopstart; mp_sint32 tmploopend; if (timeadd < 65536) { while (count--) { mp_sint32 result = 0; tmpsmppos = smppos; tmploopstart = loopstart; tmploopend = loopend; tmpflags = negflags; // check whether we are outside loop points // if that's the case we're treating the sample as a normal finite signal // note that this is still not totally correct treatment const bool outSideLoop = !(((flags & 3) && tmpsmppos >= loopstart && tmpsmppos < loopend)); if (outSideLoop) { tmploopstart = 0; tmploopend = smplen; tmpflags &= ~3; } mp_sint32 time = fixedtimefrac; if (!time && (flags & ChannelMixer::MP_SAMPLE_BACKWARD)) time = 65536; mp_sint32 j; for (j = 0; j::WIDTH; j++) { result += (sample[tmpsmppos] * SINC(time)) >> shift; time+=65536; advancePos(tmpsmppos, tmpflags, tmploopstart, tmploopend, loopendcopy); if (!(tmpflags & ChannelMixer::MP_SAMPLE_PLAY)) break; } tmpsmppos = smppos; tmpflags = posflags; if (outSideLoop) tmpflags &= ~3; time = fixedtimefrac; if (!time && (flags & ChannelMixer::MP_SAMPLE_BACKWARD)) time = 65536; for (j = 1; j::WIDTH; j++) { advancePos(tmpsmppos, tmpflags, tmploopstart, tmploopend, loopendcopy); time-=65536; if (!(tmpflags & ChannelMixer::MP_SAMPLE_PLAY)) break; result += (sample[tmpsmppos] * SINC(time)) >> shift; } (*buffer++)+=(((result)*(voll>>15))>>15); (*buffer++)+=(((result)*(volr>>15))>>15); if (ramping) { voll+=rampFromVolStepL; volr+=rampFromVolStepR; } MP_INCREASESMPPOS(smppos, smpposfrac, smpadd, 16); fixedtimefrac=(fixedtimefrac+timeadd) & 65535; } } else { while (count--) { mp_sint32 result = 0; tmpsmppos = smppos; tmploopstart = loopstart; tmploopend = loopend; tmpflags = negflags; // check whether we are outside loop points // if that's the case we're treating the sample as a normal finite signal // note that this is still not totally correct treatment const bool outSideLoop = !(((flags & 3) && tmpsmppos >= loopstart && tmpsmppos < loopend)); if (outSideLoop) { tmploopstart = 0; tmploopend = smplen; tmpflags &= ~3; } mp_sint32 time = fpmul(fixedtimefrac, rsmpadd); if (!time && (flags & ChannelMixer::MP_SAMPLE_BACKWARD)) time = 65536; mp_sint32 j; for (j = 0; j::WIDTH; j++) { result += (sample[tmpsmppos] * fpmul(SINC(time), rsmpadd)) >> shift; advancePos(tmpsmppos, tmpflags, tmploopstart, tmploopend, loopendcopy); time+=rsmpadd; if (!(tmpflags & ChannelMixer::MP_SAMPLE_PLAY)) break; } tmpsmppos = smppos; tmpflags = posflags; if (outSideLoop) tmpflags &= ~3; time = fpmul(fixedtimefrac, rsmpadd); if (!time && (flags & ChannelMixer::MP_SAMPLE_BACKWARD)) time = 65536; for (j = 1; j::WIDTH; j++) { advancePos(tmpsmppos, tmpflags, tmploopstart, tmploopend, loopendcopy); time-=rsmpadd; if (!(tmpflags & ChannelMixer::MP_SAMPLE_PLAY)) break; result += (sample[tmpsmppos] * fpmul(SINC(time), rsmpadd)) >> shift; } (*buffer++)+=(((result)*(voll>>15))>>15); (*buffer++)+=(((result)*(volr>>15))>>15); if (ramping) { voll+=rampFromVolStepL; volr+=rampFromVolStepR; } MP_INCREASESMPPOS(smppos, smpposfrac, smpadd, 16); fixedtimefrac=(fixedtimefrac+timeadd) & 65535; } } chn->smppos = smppos; chn->smpposfrac = smpposfrac; chn->fixedtimefrac = fixedtimefrac; if (ramping) { chn->finalvoll = voll; chn->finalvolr = volr; } } }; template class ResamplerSincTable : public ResamplerSincTableBase { public: ResamplerSincTable() : ResamplerSincTableBase() { } virtual bool isRamping() { return ramping; } virtual bool supportsFullChecking() { return false; } virtual bool supportsNoChecking() { return true; } virtual void addBlockNoCheck(mp_sint32* buffer, ChannelMixer::TMixerChannel* chn, mp_uint32 count) { if (chn->flags & 4) SincTableResamplerDummy::addBlock(buffer, chn, count); else SincTableResamplerDummy::addBlock(buffer, chn, count); } }; #undef SINC #undef SPZCSHIFT #undef WSIZE #undef SINCTAB #undef fpmul MilkyTracker-1.02.00/src/milkyplay/SampleLoaderAIFF.cpp000066400000000000000000000230721324432207300225630ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * SampleLoaderAIFF.cpp * MilkyPlay * * Created by Peter Barth on 07.01.06. * */ #include "SampleLoaderAIFF.h" #include "XMFile.h" #include "XModule.h" #include "LittleEndian.h" const char* SampleLoaderAIFF::channelNames[] = {"Left","Right"}; SampleLoaderAIFF::SampleLoaderAIFF(const SYSCHAR* fileName, XModule& theModule) : SampleLoaderAbstract(fileName, theModule) { } bool SampleLoaderAIFF::identifySample() { return getNumChannels() != 0; } mp_sint32 SampleLoaderAIFF::getNumChannels() { mp_ubyte ID[4], buffer[4]; mp_dword chunkLen; XMFile f(theFileName); f.read(ID, 4, 1); if (memcmp(ID, "FORM", 4) != 0) return 0; f.seek(0); bool hasFORM = false; bool hasFVER = false; bool hasCOMM = false; bool hasSSND = false; mp_sint32 numChannels = 0; while (!(hasFORM && hasFVER && hasCOMM && hasSSND)) { mp_uint32 bytesRead = f.read(ID, 4, 1); if (bytesRead != 4) break; bytesRead = f.read(buffer, 4, 1); if (bytesRead != 4) break; chunkLen = BigEndian::GET_DWORD(buffer); switch (BigEndian::GET_DWORD(ID)) { case 0x464F524D: // 'FORM' { f.read(buffer, 4, 1); if (memcmp(buffer, "AIFC", 4) == 0) hasFORM = true; else if (memcmp(buffer, "AIFF", 4) == 0) hasFORM = hasFVER = true; break; } case 0x46564552 : // 'FVER' { hasFVER = true; mp_uint32 pos = f.pos(); f.seek(pos + chunkLen); break; } case 0x434F4D4D: // 'COMM' { hasCOMM = true; mp_uint32 pos = f.pos(); f.read(buffer, 2, 1); numChannels = BigEndian::GET_WORD(buffer); f.seek(pos + chunkLen); break; } case 0x53534E44 : // 'SSND' { hasSSND = true; mp_uint32 pos = f.pos(); f.seek(pos + chunkLen); break; } default: { mp_uint32 pos = f.pos(); f.seek(pos + chunkLen); } } } return (hasFORM && hasFVER && hasCOMM && hasSSND) ? numChannels : 0; } const char* SampleLoaderAIFF::getChannelName(mp_sint32 channelIndex) { if (channelIndex < 2) return channelNames[channelIndex]; else return SampleLoaderAbstract::getChannelName(channelIndex); } struct AIFC_CommChunk { mp_uword numChannels; //number of channels mp_uint32 numSampleFrames; //number of sample frames mp_uword sampleSize; //number of bits per sample mp_uint32 sampleRate; //number of frames per second mp_uint32 compressionType; //compression type ID AIFC_CommChunk() : numChannels(0), numSampleFrames(0), sampleSize(0), sampleRate(0), compressionType(0) { } }; mp_sint32 SampleLoaderAIFF::loadSample(mp_sint32 index, mp_sint32 channelIndex) { mp_ubyte ID[4], buffer[4]; mp_dword chunkLen; AIFC_CommChunk commChunk; XMFile f(theFileName); f.read(ID, 4, 1); if (memcmp(ID, "FORM", 4) != 0) return MP_LOADER_FAILED; f.seek(0); bool hasFORM = false; bool hasFVER = false; bool hasCOMM = false; bool hasSSND = false; bool aifc = false; bool sowt = false; mp_sbyte* sampleData = NULL; mp_sint32 sampleDataLen = 0; while (!(hasFORM && hasFVER && hasCOMM && hasSSND)) { mp_uint32 bytesRead = f.read(ID, 4, 1); if (bytesRead != 4) break; bytesRead = f.read(buffer, 4, 1); if (bytesRead != 4) break; chunkLen = BigEndian::GET_DWORD(buffer); switch (BigEndian::GET_DWORD(ID)) { case 0x464F524D: // 'FORM' { f.read(buffer, 4, 1); if (memcmp(buffer, "AIFC", 4) == 0) { hasFORM = true; aifc = true; } else if (memcmp(buffer, "AIFF", 4) == 0) { hasFORM = hasFVER = true; aifc = false; } break; } case 0x46564552 : // 'FVER' { hasFVER = true; mp_uint32 pos = f.pos(); f.seek(pos + chunkLen); break; } case 0x434F4D4D: // 'COMM' { hasCOMM = true; //mp_uint32 pos = f.pos(); mp_ubyte* temp = new mp_ubyte[chunkLen]; f.read(temp, chunkLen, 1); commChunk.numChannels = BigEndian::GET_WORD(temp); commChunk.numSampleFrames = BigEndian::GET_DWORD(temp+2); commChunk.sampleSize = BigEndian::GET_WORD(temp+6); commChunk.sampleRate = BigEndian::GET_DWORD(temp+10) >> 16; if (aifc) { commChunk.compressionType = BigEndian::GET_DWORD(temp+14); mp_dword compressionName = BigEndian::GET_DWORD(temp+18); sowt = (compressionName == 0x736F7774); } delete[] temp; if ((commChunk.compressionType != 0) && (commChunk.compressionType != 0x4E4F4E45/*NONE*/)) { return MP_LOADER_FAILED; } break; } case 0x53534E44 : // 'SSND' { hasSSND = true; sampleDataLen = chunkLen; sampleData = new mp_sbyte[chunkLen]; f.read(sampleData, chunkLen, 1); break; } default: { mp_uint32 pos = f.pos(); f.seek(pos + chunkLen); } } } if (hasFORM && hasFVER && hasCOMM && hasSSND) { if ((commChunk.numChannels >= 1) && (commChunk.numChannels <= 2) && (commChunk.sampleSize == 8 || commChunk.sampleSize == 16)) { sampleDataLen = (commChunk.numChannels * commChunk.numSampleFrames * commChunk.sampleSize) / 8; TXMSample* smp = &theModule.smp[index]; if (smp->sample) { theModule.freeSampleMem((mp_ubyte*)smp->sample); smp->sample = NULL; } smp->samplen = ((commChunk.sampleSize == 16) ? sampleDataLen >> 1 : sampleDataLen) / commChunk.numChannels; smp->sample = (mp_sbyte*)theModule.allocSampleMem((commChunk.sampleSize == 16) ? (smp->samplen<<1) : smp->samplen); if (smp->sample == NULL) { if (sampleData) delete[] sampleData; return MP_OUT_OF_MEMORY; } if (commChunk.sampleSize == 8) { mp_sbyte* ptr = (mp_sbyte*)smp->sample; mp_sbyte* src = (mp_sbyte*)sampleData; if (commChunk.numChannels == 1) { memcpy(ptr, src, smp->samplen); } else if (commChunk.numChannels == 2) { if (channelIndex == 0) { for (mp_uint32 i = 0; i < smp->samplen; i++) { *ptr = *src; ptr++; src+=2; } } else if (channelIndex == 1) { for (mp_uint32 i = 0; i < smp->samplen; i++) { *ptr = *(src+1); ptr++; src+=2; } } else if (channelIndex == -1) { for (mp_uint32 i = 0; i < smp->samplen; i++) { *ptr = (mp_sbyte)(((mp_sword)(*src) + (mp_sword)(*(src+1))) >> 1); ptr++; src+=2; } } } } else if (commChunk.sampleSize == 16) { mp_uword* ptr = (mp_uword*)smp->sample; mp_ubyte* src = (mp_ubyte*)sampleData; if (commChunk.numChannels == 1) { for (mp_uint32 i = 0; i < smp->samplen; i++) { *ptr = sowt ? LittleEndian::GET_WORD(src) : BigEndian::GET_WORD(src); ptr++; src+=2; } } else if (commChunk.numChannels == 2) { if (channelIndex == 0) { for (mp_uint32 i = 0; i < smp->samplen; i++) { *ptr = sowt ? LittleEndian::GET_WORD(src) : BigEndian::GET_WORD(src); ptr++; src+=4; } } else if (channelIndex == 1) { for (mp_uint32 i = 0; i < smp->samplen; i++) { *ptr = sowt ? LittleEndian::GET_WORD(src+2) : BigEndian::GET_WORD(src+2); ptr++; src+=4; } } else if (channelIndex == -1) { for (mp_uint32 i = 0; i < smp->samplen; i++) { *ptr = sowt ? (mp_sword)(((mp_sint32)((mp_sword)LittleEndian::GET_WORD(src)) + (mp_sint32)((mp_sword)LittleEndian::GET_WORD(src+2))) >> 1) : (mp_sword)(((mp_sint32)((mp_sword)BigEndian::GET_WORD(src)) + (mp_sint32)((mp_sword)BigEndian::GET_WORD(src+2))) >> 1); ptr++; src+=4; } } } } delete[] sampleData; smp->loopstart = 0; smp->looplen = 0; smp->type = 0; if (commChunk.sampleSize == 16) smp->type |= 16; nameToSample(preferredDefaultName, smp); XModule::convertc4spd(commChunk.sampleRate, &smp->finetune, &smp->relnote); return MP_OK; } } delete[] sampleData; return MP_LOADER_FAILED; } mp_sint32 SampleLoaderAIFF::saveSample(const SYSCHAR* fileName, mp_sint32 index) { return MP_UNSUPPORTED; } MilkyTracker-1.02.00/src/milkyplay/SampleLoaderAIFF.h000066400000000000000000000042561324432207300222330ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * SampleLoaderAIFF.h * MilkyPlay * * Created by Peter Barth on 07.01.06. * */ #ifndef SAMPLELOADERAIFF__H #define SAMPLELOADERAIFF__H #include "SampleLoaderAbstract.h" class SampleLoaderAIFF : public SampleLoaderAbstract { private: static const char* channelNames[]; public: SampleLoaderAIFF(const SYSCHAR* fileName, XModule& theModule); virtual bool identifySample(); virtual mp_sint32 getNumChannels(); virtual const char* getChannelName(mp_sint32 channelIndex); virtual mp_sint32 loadSample(mp_sint32 index, mp_sint32 channelIndex); virtual mp_sint32 saveSample(const SYSCHAR* fileName, mp_sint32); }; #endif MilkyTracker-1.02.00/src/milkyplay/SampleLoaderALL.cpp000066400000000000000000000061161324432207300224660ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * SampleLoaderALL.cpp * MilkyPlay * * Created by Peter Barth on 14.09.05. * */ #include "SampleLoaderALL.h" #include "XMFile.h" #include "XModule.h" SampleLoaderALL::SampleLoaderALL(const SYSCHAR* fileName, XModule& theModule) : SampleLoaderAbstract(fileName, theModule) { } bool SampleLoaderALL::identifySample() { return getNumChannels() != 0; } mp_sint32 SampleLoaderALL::getNumChannels() { return 1; } mp_sint32 SampleLoaderALL::loadSample(mp_sint32 index, mp_sint32 channelIndex) { XMFile f(theFileName); TXMSample* smp = &theModule.smp[index]; if (smp->sample) { theModule.freeSampleMem((mp_ubyte*)smp->sample); smp->sample = NULL; } smp->samplen = f.size(); // Bigger than 100mb? Probably someone's kidding here... if ((unsigned)smp->samplen > 100*1024*1024) smp->samplen = 100*1024*1024; smp->sample = (mp_sbyte*)theModule.allocSampleMem(smp->samplen); if (smp->sample == NULL) return MP_OUT_OF_MEMORY; smp->type = 0; smp->flags = 3; smp->looplen = smp->loopstart = 0; nameToSample(preferredDefaultName, smp); // assuming signed data theModule.loadSample(f, smp->sample, smp->samplen, smp->samplen); return MP_OK; } mp_sint32 SampleLoaderALL::saveSample(const SYSCHAR* fileName, mp_sint32 index) { TXMSample* smp = &theModule.smp[index]; XMFile f(fileName, true); if (smp->type & 16) { for (mp_uint32 i = 0; i < smp->samplen; i++) f.writeWord(smp->getSampleValue(i)); } else { for (mp_uint32 i = 0; i < smp->samplen; i++) f.writeByte(smp->getSampleValue(i)); } return MP_OK; } MilkyTracker-1.02.00/src/milkyplay/SampleLoaderALL.h000066400000000000000000000041541324432207300221330ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * SampleLoaderALL.h * MilkyPlay * * Created by Peter Barth on 14.09.05. * */ #ifndef SAMPLELOADERALL__H #define SAMPLELOADERALL__H #include "SampleLoaderAbstract.h" class SampleLoaderALL : public SampleLoaderAbstract { private: static const char* channelNames[]; public: SampleLoaderALL(const SYSCHAR* fileName, XModule& theModule); virtual bool identifySample(); virtual mp_sint32 getNumChannels(); virtual mp_sint32 loadSample(mp_sint32 index, mp_sint32 channelIndex); virtual mp_sint32 saveSample(const SYSCHAR* fileName, mp_sint32); }; #endif MilkyTracker-1.02.00/src/milkyplay/SampleLoaderAbstract.cpp000066400000000000000000000042721324432207300236220ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * SampleLoaderAbstract.cpp * MilkyPlay * * Created by Peter Barth on 14.09.05. * */ #include "SampleLoaderAbstract.h" #include "XModule.h" const char* SampleLoaderAbstract::emptyChannelName = ""; SampleLoaderAbstract::SampleLoaderAbstract(const SYSCHAR* fileName, XModule& module) : theModule(module), theFileName(fileName), preferredDefaultName(emptyChannelName) { } void SampleLoaderAbstract::nameToSample(const char* name, TXMSample* smp) { memset(smp->name, 0, sizeof(smp->name)); if (strlen(name) <= sizeof(smp->name)) { memcpy(smp->name, name, strlen(name)); } else { memcpy(smp->name, name, sizeof(smp->name)); } } MilkyTracker-1.02.00/src/milkyplay/SampleLoaderAbstract.h000066400000000000000000000050611324432207300232640ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * SampleLoaderAbstract.h * MilkyPlay * * Created by Peter Barth on 14.09.05. * */ #ifndef SAMPLELOADERABSTRACT__H #define SAMPLELOADERABSTRACT__H #include "XMFile.h" class XModule; struct TXMSample; class SampleLoaderAbstract { private: static const char* emptyChannelName; protected: XModule& theModule; const SYSCHAR* theFileName; const char* preferredDefaultName; void nameToSample(const char* name, TXMSample* smp); public: SampleLoaderAbstract(const SYSCHAR* fileName, XModule& module); virtual ~SampleLoaderAbstract() {} virtual bool identifySample() = 0; virtual mp_sint32 getNumChannels() { return 1; } virtual const char* getChannelName(mp_sint32 channelIndex) { return emptyChannelName; } virtual mp_sint32 loadSample(mp_sint32 index, mp_sint32 channelIndex) = 0; virtual mp_sint32 saveSample(const SYSCHAR* fileName, mp_sint32) { return 0; } void setPreferredDefaultName(const char* preferredDefaultName) { this->preferredDefaultName = preferredDefaultName; } }; #endif MilkyTracker-1.02.00/src/milkyplay/SampleLoaderGeneric.cpp000066400000000000000000000107311324432207300234300ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * SampleLoaderGeneric.cpp * MilkyPlay * * Created by Peter Barth on 16.09.05. * */ #include "SampleLoaderGeneric.h" #include "SampleLoaderWAV.h" #include "SampleLoaderIFF.h" #include "SampleLoaderAIFF.h" #include "SampleLoaderALL.h" SampleLoaderGeneric::SampleLoaderGeneric(const SYSCHAR* fileName, XModule& module, bool supportRawLoading/* = true*/) : SampleLoaderAbstract(fileName, module) , supportRawLoading(supportRawLoading) { } mp_sint32 SampleLoaderGeneric::getNumChannels() { SampleLoaderAbstract* loader = getSuitableLoader(); if (loader) { mp_sint32 res = loader->getNumChannels(); delete loader; return res; } return 0; } const char* SampleLoaderGeneric::getChannelName(mp_sint32 channelIndex) { SampleLoaderAbstract* loader = getSuitableLoader(); if (loader) { const char* res = loader->getChannelName(channelIndex); delete loader; return res; } return SampleLoaderAbstract::getChannelName(channelIndex); } bool SampleLoaderGeneric::identifySample() { SampleLoaderAbstract* loader = getSuitableLoader(); if (loader) { delete loader; return true; } return false; } mp_sint32 SampleLoaderGeneric::loadSample(mp_sint32 index, mp_sint32 channelIndex) { SampleLoaderAbstract* loader = getSuitableLoader(); if (loader) { loader->setPreferredDefaultName(this->preferredDefaultName); mp_sint32 res = loader->loadSample(index, channelIndex); delete loader; return res; } return MP_UNSUPPORTED_FORMAT; } mp_sint32 SampleLoaderGeneric::saveSample(const SYSCHAR* fileName, mp_sint32 index, OutputFiletypes type) { SampleLoaderAbstract* loader = NULL; switch (type) { case OutputFiletypeWAV: loader = new SampleLoaderWAV(theFileName, theModule); break; case OutputFiletypeIFF: loader = new SampleLoaderIFF(theFileName, theModule); break; case OutputFiletypeAIFF: loader = new SampleLoaderAIFF(theFileName, theModule); break; case OutputFiletypeRAW: if (!supportRawLoading) break; loader = new SampleLoaderALL(theFileName, theModule); break; } if (loader) { mp_sint32 res = loader->saveSample(fileName, index); delete loader; return res; } return MP_UNSUPPORTED_FORMAT; } SampleLoaderAbstract* SampleLoaderGeneric::getSuitableLoader() { // Try to find WAV first SampleLoaderAbstract* loader = new SampleLoaderWAV(theFileName, theModule); if (loader && loader->identifySample()) return loader; delete loader; // Try to find IFF then loader = new SampleLoaderIFF(theFileName, theModule); if (loader && loader->identifySample()) return loader; delete loader; // Try to find AIFF then loader = new SampleLoaderAIFF(theFileName, theModule); if (loader && loader->identifySample()) return loader; delete loader; if (supportRawLoading) { // Try to find something else loader = new SampleLoaderALL(theFileName, theModule); if (loader && loader->identifySample()) return loader; } delete loader; return NULL; } MilkyTracker-1.02.00/src/milkyplay/SampleLoaderGeneric.h000066400000000000000000000046031324432207300230760ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * SampleLoaderGeneric.h * MilkyPlay * * Created by Peter Barth on 16.09.05. * */ #ifndef SAMPLELOADERGENERIC__H #define SAMPLELOADERGENERIC__H #include "SampleLoaderAbstract.h" class SampleLoaderGeneric : public SampleLoaderAbstract { public: enum OutputFiletypes { OutputFiletypeWAV, OutputFiletypeIFF, OutputFiletypeAIFF, OutputFiletypeRAW }; SampleLoaderGeneric(const SYSCHAR* fileName, XModule& module, bool supportRawLoading = true); virtual bool identifySample(); virtual mp_sint32 getNumChannels(); virtual const char* getChannelName(mp_sint32 channelIndex); virtual mp_sint32 loadSample(mp_sint32 index, mp_sint32 channelIndex); mp_sint32 saveSample(const SYSCHAR* fileName, mp_sint32 index, OutputFiletypes type); private: SampleLoaderAbstract* getSuitableLoader(); bool supportRawLoading; }; #endif MilkyTracker-1.02.00/src/milkyplay/SampleLoaderIFF.cpp000066400000000000000000000314021324432207300224560ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * SampleLoaderIFF.cpp * MilkyPlay * * Created by Peter Barth on 07.01.06. * */ #include "SampleLoaderIFF.h" #include "XMFile.h" #include "XModule.h" #include "LittleEndian.h" SampleLoaderIFF::SampleLoaderIFF(const SYSCHAR* fileName, XModule& theModule) : SampleLoaderAbstract(fileName, theModule) { } bool SampleLoaderIFF::identifySample() { return getNumChannels() != 0; } mp_sint32 SampleLoaderIFF::getNumChannels() { mp_ubyte ID[4], buffer[4]; mp_dword chunkLen; XMFile f(theFileName); f.read(ID, 4, 1); if (memcmp(ID, "FORM", 4) != 0) return 0; f.seek(0); bool hasFORM = false; bool hasVHDR = false; bool hasBODY = false; while (!(hasFORM && hasVHDR && hasBODY)) { mp_uint32 bytesRead = f.read(ID, 4, 1); if (bytesRead != 4) break; bytesRead = f.read(buffer, 4, 1); if (bytesRead != 4) break; chunkLen = BigEndian::GET_DWORD(buffer); switch (BigEndian::GET_DWORD(ID)) { case 0x464F524D: // 'FORM' { f.read(buffer, 4, 1); if (memcmp(buffer, "8SVX", 4) == 0) hasFORM = true; else if (memcmp(buffer, "16SV", 4) == 0) hasFORM = true; break; } /*case 0x4E414D45: // 'NAME' { break; }*/ case 0x56484452: // 'VHDR' { hasVHDR = true; mp_uint32 pos = f.pos(); f.seek(pos + chunkLen); break; } case 0x424F4459: // 'BODY' { hasBODY = true; mp_uint32 pos = f.pos(); f.seek(pos + chunkLen); break; } default: { mp_uint32 pos = f.pos(); f.seek(pos + chunkLen); } } // odd chunks are padded with zero if (chunkLen&1) f.readByte(); } return (hasFORM && hasVHDR && hasBODY) ? 1 : 0; } /* 8SVX Voice8Header Structure Definition */ struct SVX8_Vhdr { mp_dword Oneshothi; /* Num Samples in high octave 1-shot part */ mp_dword Repeathi; /* Num Samples in high octave repeat part */ mp_dword Samplescycle; /* Num Samples/cycle in high octave, else 0 */ mp_uword Samplessec; /* Samples Per Second - Sampling Rate */ mp_ubyte Octaves; /* Number of Octaves */ mp_ubyte Compression; /* Compression algorithm used - see below */ mp_sint32 Volume; /* Volume from 0 to Unity - see below */ }; mp_sint32 SampleLoaderIFF::loadSample(mp_sint32 index, mp_sint32 channelIndex) { mp_ubyte ID[4], buffer[4]; mp_dword chunkLen; SVX8_Vhdr vhdr; XMFile f(theFileName); f.read(ID, 4, 1); if (memcmp(ID, "FORM", 4) != 0) return MP_LOADER_FAILED; f.seek(0); bool hasFORM = false; bool hires = false; bool hasVHDR = false; bool hasBODY = false; mp_ubyte* name = NULL; mp_ubyte* anno = NULL; mp_sbyte* sampleData = NULL; mp_sint32 sampleDataLen = 0; mp_dword iffSize = 0; while (!(hasFORM && hasVHDR && hasBODY)) { mp_uint32 bytesRead = f.read(ID, 4, 1); if (bytesRead != 4) break; bytesRead = f.read(buffer, 4, 1); if (bytesRead != 4) break; chunkLen = BigEndian::GET_DWORD(buffer); switch (BigEndian::GET_DWORD(ID)) { case 0x464F524D: // 'FORM' { f.read(buffer, 4, 1); if (memcmp(buffer, "8SVX", 4) == 0) { hasFORM = true; hires = false; } else if (memcmp(buffer, "16SV", 4) == 0) { hasFORM = true; hires = true; } iffSize = chunkLen; break; } case 0x4E414D45: // 'NAME' { if (name) delete[] name; name = new mp_ubyte[chunkLen+1]; if (name == NULL) { if (sampleData) delete[] sampleData; if (name) delete[] name; if (anno) delete[] anno; return MP_OUT_OF_MEMORY; } f.read(name, 1, chunkLen); name[chunkLen] = '\0'; break; } case 0x414E4E4F : // 'ANNO' { if (anno) delete[] anno; anno = new mp_ubyte[chunkLen+1]; if (anno == NULL) { if (sampleData) delete[] sampleData; if (name) delete[] name; if (anno) delete[] anno; return MP_OUT_OF_MEMORY; } f.read(anno, 1, chunkLen); anno[chunkLen] = '\0'; break; } case 0x56484452: // 'VHDR' { hasVHDR = true; mp_uint32 pos = f.pos(); if (chunkLen < 20) { if (sampleData) delete[] sampleData; if (name) delete[] name; if (anno) delete[] anno; return MP_LOADER_FAILED; } f.read(buffer, 1, 4); vhdr.Oneshothi = BigEndian::GET_DWORD(buffer); // sample len f.read(buffer, 1, 4); vhdr.Repeathi = BigEndian::GET_DWORD(buffer); // loop start f.read(buffer, 1, 4); vhdr.Samplescycle = BigEndian::GET_DWORD(buffer); // loop len f.read(buffer, 1, 2); vhdr.Samplessec = BigEndian::GET_WORD(buffer); // c4 speed vhdr.Octaves = f.readByte(); vhdr.Compression = f.readByte(); f.read(buffer, 1, 4); vhdr.Volume = BigEndian::GET_DWORD(buffer); // volume f.seek(pos + chunkLen); break; } case 0x424F4459: // 'BODY' { if (!hasVHDR) goto bail; mp_uint32 pos = f.pos(); switch (vhdr.Compression) { // uncompressed IFF case 0: { hasBODY = true; // check for some nasty invalid TFMX IFF // (contains zero length body but file contains actually some data) if (chunkLen == 0) { sampleDataLen = iffSize - f.pos(); } else { sampleDataLen = chunkLen; } if (vhdr.Oneshothi < chunkLen) vhdr.Oneshothi = chunkLen; if (sampleDataLen > (signed)vhdr.Oneshothi) sampleDataLen = vhdr.Oneshothi; else if (sampleDataLen < (signed)vhdr.Oneshothi) sampleDataLen = vhdr.Oneshothi; sampleData = new mp_sbyte[sampleDataLen]; if (sampleData == NULL) { if (sampleData) delete[] sampleData; if (name) delete[] name; if (anno) delete[] anno; return MP_OUT_OF_MEMORY; } memset(sampleData, 0, sampleDataLen); f.read(sampleData, 1, (signed)chunkLen > sampleDataLen ? sampleDataLen : chunkLen); break; } case 1: case 2: { if (hires) goto bail; hasBODY = true; mp_sbyte *Body,*src,*dst; mp_ubyte d; mp_sbyte x; mp_sint32 i,n,lim; mp_sbyte fibtab[16] = { -34,-21,-13,-8,-5,-3,-2,-1,0,1,2,3,5,8,13,21 }; mp_sbyte exptab[16] = {-128,-64,-32,-16,-8,-4,-2,-1,0,1,2,4,8,16,32,64}; Body = new mp_sbyte[chunkLen]; if (!Body) { if (sampleData) delete[] sampleData; if (name) delete[] name; if (anno) delete[] anno; return MP_OUT_OF_MEMORY; } f.read(Body, 1, chunkLen); sampleDataLen = chunkLen<<1; sampleData = new mp_sbyte[sampleDataLen]; if (!sampleData) { if (sampleData) delete[] sampleData; if (name) delete[] name; if (anno) delete[] anno; if (Body) delete[] Body; return MP_OUT_OF_MEMORY; } /* Fibonacci Delta Decompression */ mp_sbyte* CodeToDelta = NULL; if (vhdr.Compression == 1) CodeToDelta = fibtab; /* Exponential Delta Decompression */ else CodeToDelta = exptab; src = Body+2; dst = sampleData; n = chunkLen-2; x = Body[1]; lim = n << 1; for(i = 0; i < lim; ++i) { d = src[i >> 1]; if(i & 1) d &= 0xF; else d >>= 4; x += CodeToDelta[d]; dst[i] = x; } delete[] Body; if ((signed)vhdr.Oneshothi < sampleDataLen) vhdr.Oneshothi = sampleDataLen; break; } default: hasBODY = false; goto bail; } f.seek(pos + chunkLen); break; } default: { bail: mp_uint32 pos = f.pos(); f.seek(pos + chunkLen); } } // odd chunks are padded with zero if (chunkLen&1) f.readByte(); } if (hasFORM && hasVHDR && hasBODY) { TXMSample* smp = &theModule.smp[index]; if (smp->sample) { theModule.freeSampleMem((mp_ubyte*)smp->sample); smp->sample = NULL; } smp->samplen = hires ? sampleDataLen >> 1 : sampleDataLen; smp->sample = (mp_sbyte*)theModule.allocSampleMem(hires ? (smp->samplen<<1) : smp->samplen); if (smp->sample == NULL) { if (sampleData) delete[] sampleData; if (name) delete[] name; if (anno) delete[] anno; return MP_OUT_OF_MEMORY; } memcpy(smp->sample, sampleData, sampleDataLen); if (hires) { // huuuu? 16 bit IFF samples are little endian? how stupid is that? mp_uword* ptr = (mp_uword*)smp->sample; for (mp_uint32 i = 0; i < smp->samplen; i++) { *ptr = LittleEndian::GET_WORD(ptr); ptr++; } } delete[] sampleData; smp->loopstart = hires ? vhdr.Repeathi >> 1 : vhdr.Repeathi; smp->looplen = hires ? vhdr.Samplescycle >> 1 : vhdr.Samplescycle; mp_sint32 vol = (vhdr.Volume*255)>>16; smp->vol = (mp_ubyte)(vol > 255 ? 255 : vol); smp->pan = 0x80; smp->flags = 3; memset(smp->name, 0, sizeof(smp->name)); if (name || anno) { const char* buff = name ? (const char*)name : (const char*)anno; nameToSample(buff, smp); if (name) delete[] name; if (anno) delete[] anno; } else { nameToSample(preferredDefaultName, smp); } smp->type = 0; if (smp->looplen) smp->type |= 1; if (hires) smp->type |= 16; XModule::convertc4spd(vhdr.Samplessec, &smp->finetune, &smp->relnote); if (smp->samplen > vhdr.Oneshothi) smp->samplen = vhdr.Oneshothi; return MP_OK; } delete[] name; delete[] sampleData; return MP_LOADER_FAILED; } static inline mp_uword swapW(mp_uword x) { return (x>>8)+((x&255)<<8); } static inline mp_dword swapDW(mp_dword x) { return (mp_dword)swapW(x>>16) | (mp_dword)swapW(x&0xFFFF) << 16; } mp_sint32 SampleLoaderIFF::saveSample(const SYSCHAR* fileName, mp_sint32 index) { TXMSample* smp = &theModule.smp[index]; XMFile f(fileName, true); f.write("FORM", 1, 4); bool hires = (smp->type & 16) != 0; mp_dword chunkLen = 70 + (hires ? smp-> samplen << 1 : smp-> samplen); f.writeDword(swapDW(chunkLen)); f.write(hires ? "16SV" : "8SVX", 1, 4); f.write("NAME", 1, 4); f.writeDword(swapDW(22)); f.write(smp->name, 1, 22); SVX8_Vhdr vhdr; vhdr.Oneshothi = hires ? smp->samplen << 1 : smp->samplen; vhdr.Repeathi = (smp->type & 3) ? (hires ? smp->loopstart << 1 : smp->loopstart) : 0; vhdr.Samplescycle = (smp->type & 3) ? (hires ? smp->looplen << 1 : smp->looplen) : 0; vhdr.Samplessec = XModule::getc4spd(smp->relnote,smp->finetune); vhdr.Octaves = 1; vhdr.Compression = 0; vhdr.Volume = (smp->vol*65536)/255; f.write("VHDR", 1, 4); f.writeDword(swapDW(0x14)); f.writeDword(swapDW(vhdr.Oneshothi)); f.writeDword(swapDW(vhdr.Repeathi)); f.writeDword(swapDW(vhdr.Samplescycle)); f.writeWord(swapW(vhdr.Samplessec)); f.writeByte(vhdr.Octaves); f.writeByte(vhdr.Compression); f.writeDword(swapDW(vhdr.Volume)); f.write("BODY", 1, 4); f.writeDword(swapDW(hires ? smp->samplen << 16 : smp->samplen)); if (smp->type & 16) { for (mp_uint32 i = 0; i < smp->samplen; i++) f.writeWord(smp->getSampleValue(i)); } else { for (mp_uint32 i = 0; i < smp->samplen; i++) f.writeByte(smp->getSampleValue(i)); } return MP_OK; } MilkyTracker-1.02.00/src/milkyplay/SampleLoaderIFF.h000066400000000000000000000042571324432207300221330ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * SampleLoaderIFF.h * MilkyPlay * * Created by Peter Barth on 07.01.06. * */ #ifndef SAMPLELOADERIFF__H #define SAMPLELOADERIFF__H #include "SampleLoaderAbstract.h" class SampleLoaderIFF : public SampleLoaderAbstract { /*private: static const char* channelNames[];*/ public: SampleLoaderIFF(const SYSCHAR* fileName, XModule& theModule); virtual bool identifySample(); virtual mp_sint32 getNumChannels(); //virtual const char* getChannelName(mp_sint32 channelIndex); virtual mp_sint32 loadSample(mp_sint32 index, mp_sint32 channelIndex); virtual mp_sint32 saveSample(const SYSCHAR* fileName, mp_sint32); }; #endif MilkyTracker-1.02.00/src/milkyplay/SampleLoaderWAV.cpp000066400000000000000000000432221324432207300225120ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * SampleLoaderWAV.cpp * MilkyPlay * * Created by Peter Barth on 14.09.05. * */ #include "SampleLoaderWAV.h" #include "XMFile.h" #include "XModule.h" const char* SampleLoaderWAV::channelNames[] = {"Left","Right"}; SampleLoaderWAV::SampleLoaderWAV(const SYSCHAR* fileName, XModule& theModule) : SampleLoaderAbstract(fileName, theModule) { } bool SampleLoaderWAV::identifySample() { return getNumChannels() != 0; } mp_sint32 SampleLoaderWAV::parseFMTChunk(XMFile& f, TWAVHeader& hdr) { if (hdr.fmtDataLength < 16) return MP_LOADER_FAILED; hdr.encodingTag = f.readWord(); if (hdr.encodingTag != 0x1 && hdr.encodingTag != 0x3) return MP_LOADER_FAILED; hdr.numChannels = f.readWord(); if (hdr.numChannels < 1 || hdr.numChannels > 2) return MP_LOADER_FAILED; hdr.sampleRate = f.readDword(); hdr.bytesPerSecond = f.readDword(); hdr.blockAlign = f.readWord(); hdr.numBits = f.readWord(); if (hdr.numBits != 8 && hdr.numBits != 16 && hdr.numBits != 24 && hdr.numBits != 32) return MP_LOADER_FAILED; // skip rest of format structure if greater than 16 for (mp_uint32 i = 0; i < hdr.fmtDataLength - 16; i++) f.readByte(); return MP_OK; } mp_sint32 SampleLoaderWAV::parseDATAChunk(XMFile& f, TWAVHeader& hdr, mp_sint32 index, mp_sint32 channelIndex) { TXMSample* smp = &theModule.smp[index]; if (hdr.dataLength) { if (hdr.numBits == 8) { if (smp->sample) { theModule.freeSampleMem((mp_ubyte*)smp->sample); smp->sample = NULL; } smp->samplen = hdr.dataLength; if (hdr.numChannels == 2) { mp_sbyte* buffer = new mp_sbyte[smp->samplen]; if (buffer == NULL) return MP_OUT_OF_MEMORY; theModule.loadSample(f, buffer, smp->samplen, smp->samplen, XModule::ST_UNSIGNED); smp->samplen>>=1; smp->sample = (mp_sbyte*)theModule.allocSampleMem(smp->samplen); if (smp->sample == NULL) { delete[] buffer; return MP_OUT_OF_MEMORY; } // Downmix channels if (channelIndex < 0) { for (mp_uint32 i = 0; i < smp->samplen; i++) { mp_sint32 s1 = buffer[i*2]; mp_sint32 s2 = buffer[i*2+1]; smp->sample[i] = (mp_sbyte)((s1+s2)>>1); } } // take left channel else if (channelIndex == 0) { for (mp_uint32 i = 0; i < smp->samplen; i++) smp->sample[i] = buffer[i*2]; } // take right channel else if (channelIndex == 1) { for (mp_uint32 i = 0; i < smp->samplen; i++) smp->sample[i] = buffer[i*2+1]; } else ASSERT(false); delete[] buffer; } else { smp->sample = (mp_sbyte*)theModule.allocSampleMem(smp->samplen); if (smp->sample == NULL) return MP_OUT_OF_MEMORY; theModule.loadSample(f, smp->sample, smp->samplen, smp->samplen, XModule::ST_UNSIGNED); } smp->type = 0; } else if (hdr.numBits == 16) { if (smp->sample) { theModule.freeSampleMem((mp_ubyte*)smp->sample); smp->sample = NULL; } smp->samplen = hdr.dataLength>>1; if (hdr.numChannels == 2) { mp_sword* buffer = new mp_sword[smp->samplen]; if (buffer == NULL) return MP_OUT_OF_MEMORY; theModule.loadSample(f, buffer, hdr.dataLength, smp->samplen, XModule::ST_16BIT); smp->samplen>>=1; smp->sample = (mp_sbyte*)theModule.allocSampleMem(smp->samplen*2); if (smp->sample == NULL) { delete[] buffer; return MP_OUT_OF_MEMORY; } mp_sword* sample = (mp_sword*)smp->sample; // Downmix channels if (channelIndex < 0) { for (mp_uint32 i = 0; i < smp->samplen; i++) { mp_sint32 s1 = buffer[i*2]; mp_sint32 s2 = buffer[i*2+1]; sample[i] = (mp_sword)((s1+s2)>>1); } } // take left channel else if (channelIndex == 0) { for (mp_uint32 i = 0; i < smp->samplen; i++) sample[i] = buffer[i*2]; } // take right channel else if (channelIndex == 1) { for (mp_uint32 i = 0; i < smp->samplen; i++) sample[i] = buffer[i*2+1]; } else ASSERT(false); delete[] buffer; } else { smp->sample = (mp_sbyte*)theModule.allocSampleMem(smp->samplen*2); if (smp->sample == NULL) return MP_OUT_OF_MEMORY; theModule.loadSample(f, smp->sample, hdr.dataLength, smp->samplen, XModule::ST_16BIT); } smp->type = 16; } else if (hdr.numBits == 24) { if (smp->sample) { theModule.freeSampleMem((mp_ubyte*)smp->sample); smp->sample = NULL; } smp->samplen = hdr.dataLength/3; if (hdr.numChannels == 2) { mp_ubyte* buffer = new mp_ubyte[smp->samplen*3]; if (buffer == NULL) return MP_OUT_OF_MEMORY; f.read(buffer, 3, smp->samplen); smp->samplen>>=1; smp->sample = (mp_sbyte*)theModule.allocSampleMem(smp->samplen*2); if (smp->sample == NULL) { delete[] buffer; return MP_OUT_OF_MEMORY; } mp_sword* sample = (mp_sword*)smp->sample; // Downmix channels if (channelIndex < 0) { for (mp_uint32 i = 0; i < smp->samplen; i++) { mp_sword s1 = ((mp_sint32)buffer[i*6+1] + (((mp_sint32)buffer[i*6+2])<<8)); mp_sword s2 = ((mp_sint32)buffer[i*6+4] + (((mp_sint32)buffer[i*6+5])<<8)); sample[i] = ((mp_sint32)s1 + (mp_sint32)s2) >> 1; } } // take left channel else if (channelIndex == 0) { for (mp_uint32 i = 0; i < smp->samplen; i++) sample[i] = ((mp_sint32)buffer[i*6+1] + (((mp_sint32)buffer[i*6+2])<<8)); } // take right channel else if (channelIndex == 1) { for (mp_uint32 i = 0; i < smp->samplen; i++) sample[i] = ((mp_sint32)buffer[i*6+4] + (((mp_sint32)buffer[i*6+5])<<8)); } else ASSERT(false); delete[] buffer; } else { smp->sample = (mp_sbyte*)theModule.allocSampleMem(smp->samplen*2); if (smp->sample == NULL) return MP_OUT_OF_MEMORY; mp_ubyte* buffer = new mp_ubyte[smp->samplen*3]; if (buffer == NULL) return MP_OUT_OF_MEMORY; f.read(buffer, 3, smp->samplen); mp_sword* sample = (mp_sword*)smp->sample; for (mp_uint32 i = 0; i < smp->samplen; i++) sample[i] = ((mp_sint32)buffer[i*3+1] + (((mp_sint32)buffer[i*3+2])<<8)); delete[] buffer; } smp->type = 16; } else if (hdr.numBits == 32) { // 32 bit DWORD sample data? if (hdr.encodingTag == 0x01) { if (smp->sample) { theModule.freeSampleMem((mp_ubyte*)smp->sample); smp->sample = NULL; } smp->samplen = hdr.dataLength>>2; if (hdr.numChannels == 2) { mp_sint32* buffer = new mp_sint32[smp->samplen]; if (buffer == NULL) return MP_OUT_OF_MEMORY; f.readDwords((mp_dword*)buffer, smp->samplen); smp->samplen>>=1; smp->sample = (mp_sbyte*)theModule.allocSampleMem(smp->samplen*2); if (smp->sample == NULL) { delete[] buffer; return MP_OUT_OF_MEMORY; } mp_sword* sample = (mp_sword*)smp->sample; // Downmix channels if (channelIndex < 0) { for (mp_uint32 i = 0; i < smp->samplen; i++) { mp_sint32 s1 = buffer[i*2]>>16; mp_sint32 s2 = buffer[i*2+1]>>16; sample[i] = (mp_sword)((s1+s2)>>1); } } // take left channel else if (channelIndex == 0) { for (mp_uint32 i = 0; i < smp->samplen; i++) sample[i] = buffer[i*2]>>16; } // take right channel else if (channelIndex == 1) { for (mp_uint32 i = 0; i < smp->samplen; i++) sample[i] = buffer[i*2+1]>>16; } else ASSERT(false); delete[] buffer; } else { smp->sample = (mp_sbyte*)theModule.allocSampleMem(smp->samplen*2); if (smp->sample == NULL) return MP_OUT_OF_MEMORY; mp_sint32* buffer = new mp_sint32[smp->samplen]; if (buffer == NULL) return MP_OUT_OF_MEMORY; f.readDwords((mp_dword*)buffer, smp->samplen); mp_sword* sample = (mp_sword*)smp->sample; for (mp_uint32 i = 0; i < smp->samplen; i++) sample[i] = buffer[i]>>16; delete[] buffer; } } else if (hdr.encodingTag == 0x03) { if (smp->sample) { theModule.freeSampleMem((mp_ubyte*)smp->sample); smp->sample = NULL; } smp->samplen = hdr.dataLength>>2; if (hdr.numChannels == 2) { float* buffer = new float[smp->samplen]; if (buffer == NULL) return MP_OUT_OF_MEMORY; f.readDwords(reinterpret_cast(buffer), smp->samplen); smp->samplen>>=1; smp->sample = (mp_sbyte*)theModule.allocSampleMem(smp->samplen*2); if (smp->sample == NULL) { delete[] buffer; return MP_OUT_OF_MEMORY; } mp_sword* sample = (mp_sword*)smp->sample; // Downmix channels if (channelIndex < 0) { for (mp_uint32 i = 0; i < smp->samplen; i++) { mp_sint32 s1 = (mp_sint32)(buffer[i*2]*32767.0f); mp_sint32 s2 = (mp_sint32)(buffer[i*2+1]*32767.0f); sample[i] = (mp_sword)((s1+s2)>>1); } } // take left channel else if (channelIndex == 0) { for (mp_uint32 i = 0; i < smp->samplen; i++) sample[i] = (mp_sint32)(buffer[i*2]*32767.0f); } // take right channel else if (channelIndex == 1) { for (mp_uint32 i = 0; i < smp->samplen; i++) sample[i] = (mp_sint32)(buffer[i*2+1]*32767.0f); } else ASSERT(false); delete[] buffer; } else { smp->sample = (mp_sbyte*)theModule.allocSampleMem(smp->samplen*2); if (smp->sample == NULL) return MP_OUT_OF_MEMORY; float* buffer = new float[smp->samplen]; if (buffer == NULL) return MP_OUT_OF_MEMORY; f.readDwords(reinterpret_cast(buffer), smp->samplen); mp_sword* sample = (mp_sword*)smp->sample; for (mp_uint32 i = 0; i < smp->samplen; i++) sample[i] = (mp_sint32)(buffer[i]*32767.0f); delete[] buffer; } } smp->type = 16; } smp->loopstart = 0; smp->looplen = 0; nameToSample(preferredDefaultName, smp); XModule::convertc4spd(hdr.sampleRate, &smp->finetune, &smp->relnote); smp->vol = 255; smp->pan = 0x80; smp->flags = 3; } return MP_OK; } mp_sint32 SampleLoaderWAV::parseSMPLChunk(XMFile& f, TWAVHeader& hdr, TSamplerChunk& samplerChunk, TSampleLoop& sampleLoop) { mp_dword pos = (unsigned)f.pos() + (unsigned)hdr.dataLength; f.readDwords((mp_dword*)&samplerChunk, sizeof(TSamplerChunk) / sizeof(mp_dword)); if (samplerChunk.cSampleLoops) { f.readDwords((mp_dword*)&sampleLoop, sizeof(TSampleLoop) / sizeof(mp_dword)); } f.seek(pos); return MP_OK; } mp_sint32 SampleLoaderWAV::getNumChannels() { XMFile f(theFileName); TWAVHeader hdr; f.read(hdr.RIFF, 1, 4); if (memcmp(hdr.RIFF, "RIFF", 4)) return 0; hdr.length = f.readDword(); f.read(hdr.WAVE, 1, 4); if (memcmp(hdr.WAVE, "WAVE", 4)) return 0; hdr.numChannels = 0; do { f.read(hdr.FMT, 1, 4); hdr.fmtDataLength = f.readDword(); // found a "fmt " chunk? if (memcmp(hdr.FMT, "fmt ", 4) == 0) { mp_sint32 res = parseFMTChunk(f, hdr); if (res < 0) return 0; break; } else { mp_dword pos = (unsigned)f.pos() + (unsigned)hdr.fmtDataLength; if (pos >= f.size()) break; f.seek(pos); } } while (f.pos() < f.size()); return hdr.numChannels; } const char* SampleLoaderWAV::getChannelName(mp_sint32 channelIndex) { if (channelIndex < 2) return channelNames[channelIndex]; else return SampleLoaderAbstract::getChannelName(channelIndex); } mp_sint32 SampleLoaderWAV::loadSample(mp_sint32 index, mp_sint32 channelIndex) { XMFile f(theFileName); TWAVHeader hdr; f.read(hdr.RIFF, 1, 4); if (memcmp(hdr.RIFF, "RIFF", 4)) return MP_LOADER_FAILED; hdr.length = f.readDword(); f.read(hdr.WAVE, 1, 4); if (memcmp(hdr.WAVE, "WAVE", 4)) return MP_LOADER_FAILED; // Start looking for "fmt " chunk hdr.numChannels = 0; do { f.read(hdr.FMT, 1, 4); hdr.fmtDataLength = f.readDword(); // found a "fmt " chunk? if (memcmp(hdr.FMT, "fmt ", 4) == 0) { mp_sint32 res = parseFMTChunk(f, hdr); if (res < 0) return res; break; } else { mp_dword pos = (unsigned)f.pos() + (unsigned)hdr.fmtDataLength; if (pos >= f.size()) break; f.seek(pos); } } while (f.pos() < f.size()); // check if we found a "fmt " chunk, otherwise the number of channels will be 0 if (hdr.numChannels == 0) return MP_LOADER_FAILED; // process remaining chunks TSamplerChunk samplerChunk; TSampleLoop sampleLoop; bool hasSamplerChunk = false; bool hasData = false; do { mp_sint32 res = f.read(hdr.DATA, 1, 4); if (res < 4) break; hdr.dataLength = f.readDword(); if (memcmp(hdr.DATA, "data", 4) == 0) { mp_sint32 res = parseDATAChunk(f, hdr, index, channelIndex); if (res < 0) return res; hasData = true; } else if (memcmp(hdr.DATA, "smpl", 4) == 0) { mp_sint32 res = parseSMPLChunk(f, hdr, samplerChunk, sampleLoop); if (res == 0) hasSamplerChunk = true; } else { mp_sint32 pos = f.pos() + hdr.dataLength; if (pos >= (signed)f.size()) break; f.seek(pos); } } while (f.pos() < f.size()); if (!hasData) return MP_LOADER_FAILED; if (hasSamplerChunk && samplerChunk.cSampleLoops) { TXMSample* smp = &theModule.smp[index]; mp_dword start = sampleLoop.dwStart/* / (hdr.numBits*hdr.numChannels / 8)*/; mp_dword end = sampleLoop.dwEnd/* / (hdr.numBits*hdr.numChannels / 8)*/; if (end > smp->samplen) end = smp->samplen; if (start < end && end <= smp->samplen) { smp->loopstart = start; smp->looplen = end - start; switch (sampleLoop.dwType) { case 0: smp->type|=1; break; case 1: smp->type|=2; break; } } } return MP_OK; } mp_sint32 SampleLoaderWAV::saveSample(const SYSCHAR* fileName, mp_sint32 index) { TXMSample* smp = &theModule.smp[index]; XMFile f(fileName, true); TWAVHeader hdr; TSamplerChunk samplerChunk; TSampleLoop sampleLoop; bool hasLoop = (smp->type & 3) != 0; // build wav header memcpy(hdr.RIFF, "RIFF", 4); hdr.length = 44 + ((smp->type&16) ? smp->samplen*2 : smp->samplen) - 8 + (hasLoop ? (sizeof(TSamplerChunk) + sizeof(TSampleLoop) + 8) : 0); memcpy(hdr.WAVE, "WAVE", 4); memcpy(hdr.FMT, "fmt ", 4); hdr.fmtDataLength = 16; hdr.encodingTag = 1; hdr.numChannels = 1; hdr.sampleRate = XModule::getc4spd(smp->relnote,smp->finetune); hdr.numBits = ((smp->type&16) ? 16 : 8); hdr.blockAlign = (1*hdr.numBits) / 8; hdr.bytesPerSecond = hdr.sampleRate*hdr.blockAlign; f.write(hdr.RIFF, 1, 4); f.writeDword(hdr.length); f.write(hdr.WAVE, 1, 4); f.write(hdr.FMT, 1, 4); f.writeDword(hdr.fmtDataLength); f.writeWord(hdr.encodingTag); f.writeWord(hdr.numChannels); f.writeDword(hdr.sampleRate); f.writeDword(hdr.bytesPerSecond); f.writeWord(hdr.blockAlign); f.writeWord(hdr.numBits); if (hasLoop) { memcpy(hdr.DATA, "smpl", 4); hdr.dataLength = sizeof(TSamplerChunk) + sizeof(TSampleLoop); f.write(hdr.DATA, 1, 4); f.writeDword(hdr.dataLength); samplerChunk.cSampleLoops = 1; samplerChunk.dwSamplePeriod = (mp_dword)(1000.0*1000.0*1000.0 / hdr.sampleRate); sampleLoop.dwType = ((smp->type & 3) == 2 ? 1 : 0); sampleLoop.dwStart = smp->loopstart; sampleLoop.dwEnd = smp->loopstart + smp->looplen; f.writeDwords((mp_dword*)&samplerChunk, sizeof(samplerChunk) / sizeof(mp_dword)); f.writeDwords((mp_dword*)&sampleLoop, sizeof(sampleLoop) / sizeof(mp_dword)); } memcpy(hdr.DATA, "data", 4); hdr.dataLength = (smp->samplen*hdr.numBits)/8; f.write(hdr.DATA, 1, 4); f.writeDword(hdr.dataLength); if (smp->type & 16) { for (mp_uint32 i = 0; i < smp->samplen; i++) f.writeWord(smp->getSampleValue(i)); } else { // WAV 8 bit is unsigned mp_ubyte* dstPtr = new mp_ubyte[smp->samplen]; mp_ubyte* dst = dstPtr; for (mp_uint32 i = 0; i < smp->samplen; i++) *dstPtr++ = ((mp_sbyte)smp->getSampleValue(i))^127; f.write(dst, 1, smp->samplen); delete[] dst; } return MP_OK; } MilkyTracker-1.02.00/src/milkyplay/SampleLoaderWAV.h000066400000000000000000000073431324432207300221630ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * SampleLoaderWAV.h * MilkyPlay * * Created by Peter Barth on 14.09.05. * */ #ifndef SAMPLELOADERWAV__H #define SAMPLELOADERWAV__H #include "SampleLoaderAbstract.h" class SampleLoaderWAV : public SampleLoaderAbstract { private: struct TWAVHeader { mp_ubyte RIFF[4]; // "RIFF" mp_dword length; // filesize - 8 mp_ubyte WAVE[4]; // "WAVE" mp_ubyte FMT[4]; // "fmt " mp_dword fmtDataLength; // = 16 mp_uword encodingTag; mp_uword numChannels; // Channels: 1 = mono, 2 = stereo mp_dword sampleRate; // Samples per second: e.g., 44100 mp_dword bytesPerSecond; // sample rate * block align mp_uword blockAlign; // channels * numBits / 8 mp_uword numBits; // 8 or 16 mp_ubyte DATA[4]; // "data" mp_dword dataLength; // sample data size }; struct TSamplerChunk { mp_dword dwManufacturer; mp_dword dwProduct; mp_dword dwSamplePeriod; mp_dword dwMIDIUnityNote; mp_dword dwMIDIPitchFraction; mp_dword dwSMPTEFormat; mp_dword dwSMPTEOffset; mp_dword cSampleLoops; mp_dword cbSamplerData; TSamplerChunk() : dwManufacturer(0), dwProduct(0), dwSamplePeriod(0), dwMIDIUnityNote(0), dwMIDIPitchFraction(0), dwSMPTEFormat(0), dwSMPTEOffset(0), cSampleLoops(0), cbSamplerData(0) { } }; struct TSampleLoop { mp_dword dwIdentifier; mp_dword dwType; mp_dword dwStart; mp_dword dwEnd; mp_dword dwFraction; mp_dword dwPlayCount; TSampleLoop() : dwIdentifier(0), dwType(0), dwStart(0), dwEnd(0), dwFraction(0), dwPlayCount(0) { } }; static const char* channelNames[]; mp_sint32 parseFMTChunk(XMFile& f, TWAVHeader& hdr); mp_sint32 parseDATAChunk(XMFile& f, TWAVHeader& hdr, mp_sint32 index, mp_sint32 channelIndex); mp_sint32 parseSMPLChunk(XMFile& f, TWAVHeader& hdr, TSamplerChunk& samplerChunk, TSampleLoop& sampleLoop); public: SampleLoaderWAV(const SYSCHAR* fileName, XModule& theModule); virtual bool identifySample(); virtual mp_sint32 getNumChannels(); virtual const char* getChannelName(mp_sint32 channelIndex); virtual mp_sint32 loadSample(mp_sint32 index, mp_sint32 channelIndex); virtual mp_sint32 saveSample(const SYSCHAR* fileName, mp_sint32); }; #endif MilkyTracker-1.02.00/src/milkyplay/XIInstrument.cpp000066400000000000000000000454331324432207300222030ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * XIInstrument.cpp * MilkyPlay * * Created by Peter Barth on 07.03.05. * */ #include "XIInstrument.h" XIInstrument::XIInstrument() : owner(false) { memset(&samples, 0, sizeof(samples)); memset(sig, 0, sizeof(sig)); memset(name, 0, sizeof(name)); memset(tracker, 0, sizeof(tracker)); memset(nbu, 0, sizeof(nbu)); memset(&venv, 0, sizeof(venv)); memset(&penv, 0, sizeof(penv)); vibtype = vibsweep = vibdepth = vibrate = 0; volfade = 0; res = 0; memset(extra, 0, sizeof(extra)); numsamples = 0; } XIInstrument::XIInstrument(const XIInstrument& source) : owner(true) { memset(&samples, 0, sizeof(samples)); memcpy(sig, source.sig, sizeof(sig)); memcpy(name, source.name, sizeof(name)); memcpy(tracker, source.tracker, sizeof(tracker)); memcpy(nbu, source.nbu, sizeof(nbu)); venv = source.venv; penv = source.penv; vibtype = source.vibtype; vibsweep = source.vibsweep; vibdepth = source.vibdepth; vibrate = source.vibrate; volfade = source.volfade; res = source.res; memcpy(extra, source.extra, sizeof(extra)); numsamples = source.numsamples; for (mp_sint32 i = 0; i < numsamples; i++) { const TXMSample* src = &source.samples[i]; TXMSample* dst = &samples[i]; dst->samplen = src->samplen; dst->loopstart = src->loopstart; dst->looplen = src->looplen; dst->flags = src->flags; dst->vol = src->vol; dst->finetune = src->finetune; dst->type = src->type; dst->pan = src->pan; dst->relnote = src->relnote; dst->venvnum = src->venvnum; dst->penvnum = src->penvnum; dst->fenvnum = src->fenvnum; dst->vibenvnum = src->vibenvnum; dst->vibtype = src->vibtype; dst->vibsweep = src->vibsweep; dst->vibdepth = src->vibdepth; dst->vibrate = src->vibrate; dst->volfade = src->volfade; dst->res = src->res; memcpy(dst->name, src->name, sizeof(src->name)); dst->terminate = src->terminate; if (src->sample) { if (src->type & 16) { dst->sample = (mp_sbyte*)(TXMSample::allocPaddedMem(src->samplen*2)); TXMSample::copyPaddedMem(dst->sample, src->sample, src->samplen*2); } else { dst->sample = (mp_sbyte*)(TXMSample::allocPaddedMem(src->samplen)); TXMSample::copyPaddedMem(dst->sample, src->sample, src->samplen); } } } } XIInstrument::~XIInstrument() { mp_sint32 numSamples = sizeof(samples)/sizeof(TXMSample); if (owner) { for (mp_sint32 i = 0; i < numSamples; i++) TXMSample::freePaddedMem((mp_ubyte*)samples[i].sample); } } void XIInstrument::clean() { // find last used sample mp_sint32 numsmp = numsamples; mp_sint32 i; for (i = numsamples - 1; i >= 0; i--) { mp_ubyte buffer[MP_MAXTEXT+1]; XModule::convertStr(reinterpret_cast(buffer), reinterpret_cast(samples[i].name), MP_MAXTEXT, false); if (samples[i].sample || strlen(reinterpret_cast(buffer))) { numsmp = i+1; break; } } if (i == -1) numsmp = 0; numsamples = numsmp; } mp_sint32 XIInstrument::load(const SYSCHAR* fileName) { XMFile f(fileName); f.read(sig, 1, 21); if (memcmp(sig,"GF1PATCH",8) == 0) { f.seek(0); return loadPAT(f); } if (memcmp(sig,"Extended Instrument: ",21) != 0) return MP_LOADER_FAILED; f.read(name, 1, 22); if (f.readByte() != 0x1A) return MP_LOADER_FAILED; f.read(tracker, 1, 20); if (f.readWord() != 0x102) // read version return MP_LOADER_FAILED; // read note instrument table f.read(nbu, 1, 96); mp_sint32 k; for (k = 0; k < 96; k++) if (nbu[k]>15) nbu[k] = 15; // read envelopes memset(&venv,0,sizeof(venv)); memset(&penv,0,sizeof(penv)); for (k = 0; k < 12; k++) { venv.env[k][0] = f.readWord(); venv.env[k][1] = f.readWord()<<2; } for (k = 0; k < 12; k++) { penv.env[k][0] = f.readWord(); penv.env[k][1] = f.readWord()<<2; } // read envelope flags venv.num = f.readByte(); penv.num = f.readByte(); venv.sustain = f.readByte(); venv.loops = f.readByte(); venv.loope = f.readByte(); penv.sustain = f.readByte(); penv.loops = f.readByte(); penv.loope = f.readByte(); venv.type = f.readByte(); penv.type = f.readByte(); vibtype = f.readByte(); vibsweep = f.readByte(); vibdepth = f.readByte(); vibrate = f.readByte(); vibdepth<<=1; volfade = f.readWord(); volfade<<=1; res = f.readWord(); f.read(extra, 1, 20); numsamples = f.readWord(); if (numsamples > 16) numsamples = 16; // read sample infos for (k = 0; k < numsamples; k++) { samples[k].samplen = f.readDword(); samples[k].loopstart = f.readDword(); samples[k].looplen = f.readDword(); samples[k].vol = XModule::vol64to255(f.readByte()); samples[k].finetune = f.readByte(); samples[k].type = f.readByte(); samples[k].pan = f.readByte(); samples[k].relnote = f.readByte(); samples[k].res = f.readByte(); samples[k].volfade = volfade; samples[k].vibtype = vibtype; samples[k].vibsweep = vibsweep; samples[k].vibdepth = vibdepth; samples[k].vibrate = vibrate; f.read(samples[k].name, 1, 22); } // lazy guy TXMSample* smp = reinterpret_cast(&samples); // read samples for (k = 0; k < numsamples; k++) { if (!(smp[k].type&16) && smp[k].samplen) { smp[k].sample = (mp_sbyte*)TXMSample::allocPaddedMem(smp[k].samplen); if (smp[k].sample == NULL) { return MP_OUT_OF_MEMORY; } owner = true; if (!XModule::loadSample(f,smp[k].sample,smp[k].samplen,smp[k].samplen,XModule::ST_DELTA)) { return MP_OUT_OF_MEMORY; } } else if (smp[k].samplen) { smp[k].sample = (mp_sbyte*)TXMSample::allocPaddedMem(smp[k].samplen); if (smp[k].sample == NULL) { return MP_OUT_OF_MEMORY; } owner = true; if (!XModule::loadSample(f,smp[k].sample,smp[k].samplen,smp[k].samplen>>1,XModule::ST_DELTA | XModule::ST_16BIT)) { return MP_OUT_OF_MEMORY; } smp[k].samplen>>=1; smp[k].loopstart>>=1; smp[k].looplen>>=1; } } return MP_OK; } static mp_sint32 gusFreqToFT2Note(mp_dword freq) { static const mp_dword scale_table[109] = { /*C-0..B-*/ /* Octave 0 */ 16351, 17323, 18354, 19445, 20601, 21826, 23124, 24499, 25956, 27500, 29135, 30867, /* Octave 1 */ 32703, 34647, 36708, 38890, 41203, 43653, 46249, 48999, 51913, 54999, 58270, 61735, /* Octave 2 */ 65406, 69295, 73416, 77781, 82406, 87306, 92498, 97998, 103826, 109999, 116540, 123470, /* Octave 3 */ 130812, 138591, 146832, 155563, 164813, 174614, 184997, 195997, 207652, 219999, 233081, 246941, /* Octave 4 */ 261625, 277182, 293664, 311126, 329627, 349228, 369994, 391995, 415304, 440000, 466163, 493883, /* Octave 5 */ 523251, 554365, 587329, 622254, 659255, 698456, 739989, 783991, 830609, 880000, 932328, 987767, /* Octave 6 */ 1046503, 1108731, 1174660, 1244509, 1318511, 1396914, 1479979, 1567983, 1661220, 1760002, 1864657, 1975536, /* Octave 7 */ 2093007, 2217464, 2349321, 2489019, 2637024, 2793830, 2959960, 3135968, 3322443, 3520006, 3729316, 3951073, /* Octave 8 */ 4186073, 4434930, 4698645, 4978041, 5274051, 5587663, 5919922, 6271939, 6644889, 7040015, 7458636, 7902150, 0xFFFFFFFF }; if (scale_table[0] > freq) { return 0-12; } for (mp_uint32 no = 0; no < sizeof(scale_table)/sizeof(mp_dword)-1; no++) { if (scale_table[no] <= freq && scale_table[no+1] > freq) return (no-12); } return 4*12; } #define PAT_CLEAN \ for (mp_uint32 j = 0; j < sizeof(nbu); j++) \ if (nbu[j] == 0xFF) nbu[j] = 0; mp_sint32 XIInstrument::loadPAT(XMFile& f) { struct TGF1PatchHeader { mp_ubyte sig[22]; mp_ubyte desc[60]; mp_ubyte insnum; mp_ubyte voicenum; mp_ubyte channum; mp_uword waveforms; mp_uword mastervol; mp_uint32 datasize; mp_ubyte reserved1[36]; mp_uword insID; mp_ubyte insname[16]; mp_uint32 inssize; mp_ubyte layers; mp_ubyte reserved2[40]; mp_ubyte layerduplicate; mp_ubyte layer; mp_uint32 layersize; mp_ubyte smpnum; mp_ubyte reserved3[40]; }; struct TGF1PatchSampleHeader { mp_ubyte wavename[7]; mp_ubyte fractions; mp_uint32 samplesize; mp_sint32 loopstart; mp_sint32 loopend; mp_uword samplerate; mp_uint32 lofreq; mp_uint32 hifreq; mp_uint32 rtfreq; mp_uword tune; mp_ubyte panning; mp_ubyte envelopes[4*3]; mp_ubyte tremolo[3]; mp_ubyte vibrato[3]; mp_ubyte smpmode; mp_uword scalefreq; mp_uword scalefac; mp_ubyte reserved[36]; }; TGF1PatchHeader header; f.read(header.sig, 1, 22); f.read(header.desc, 1, 60); header.insnum = f.readByte(); header.voicenum = f.readByte(); header.channum = f.readByte(); header.waveforms = f.readWord(); header.mastervol = f.readWord(); header.datasize = f.readDword(); f.read(header.reserved1, 1, 36); header.insID = f.readWord(); f.read(header.insname, 1, 16); header.inssize = f.readDword(); header.layers = f.readByte(); f.read(header.reserved2, 1, 40); header.layerduplicate = f.readByte(); header.layer = f.readByte(); header.layersize = f.readDword(); header.smpnum = f.readByte(); f.read(header.reserved3, 1, 40); // apply data memcpy(name, header.insname, 16); numsamples = header.smpnum <= 16 ? header.smpnum : 16; // lazy guy TXMSample* smp = reinterpret_cast(&samples); memset(nbu, 0xFF, sizeof(nbu)); for (mp_sint32 i = 0; i < numsamples; i++) { TGF1PatchSampleHeader smphdr; f.read(smphdr.wavename, 1, 7); smphdr.fractions = f.readByte(); smphdr.samplesize = f.readDword(); smphdr.loopstart = f.readDword(); smphdr.loopend = f.readDword(); smphdr.samplerate = f.readWord(); smphdr.lofreq = f.readDword(); smphdr.hifreq = f.readDword(); smphdr.rtfreq = f.readDword(); mp_sint32 lo = gusFreqToFT2Note(smphdr.lofreq); mp_sint32 hi = gusFreqToFT2Note(smphdr.hifreq); if (lo < 0) lo = 0; if (hi < 0) hi = 0; if (lo > 95) lo = 95; if (hi > 95) hi = 95; // sanity check if (lo > hi) { mp_sint32 s = lo; lo = hi; hi = s; } //if (i == numsamples - 1) // hi = 96; for (mp_sint32 j = lo; j <= hi; j++) if (j >= 0 && j <= 95) if (nbu[j] == 0xFF) nbu[j] = i; //ld(x) = log(x)/log(2) #ifdef VERBOSE printf("%i:\nlo:%i,hi:%i,rt:%i,%i:%i\n", i, smphdr.lofreq, smphdr.hifreq, smphdr.rtfreq,lo,hi); #endif smphdr.tune = f.readWord(); smphdr.panning = f.readByte(); f.read(smphdr.envelopes, 3, 4); f.read(smphdr.tremolo, 1, 3); f.read(smphdr.vibrato, 1, 3); smphdr.smpmode = f.readByte(); smphdr.scalefreq = f.readWord(); smphdr.scalefac = f.readWord(); f.read(smphdr.reserved, 1, 36); samples[i].samplen = smphdr.samplesize; samples[i].loopstart = smphdr.loopstart; samples[i].looplen = smphdr.loopend - smphdr.loopstart; // disable looping on invalid loop range if ((mp_sint32)samples[i].looplen < 0) { samples[i].looplen = 0; smphdr.smpmode &= ~(1<<2); } samples[i].vol = XModule::vol127to255(header.mastervol); samples[i].pan = (mp_ubyte)XModule::pan15to255(smphdr.panning); #if 1 mp_sint32 no = gusFreqToFT2Note(smphdr.rtfreq); no-=48; //mp_sint32 rate = XModule::getc4spd(no, 0); XModule::convertc4spd(smphdr.samplerate/**rate/8363*/, &samples[i].finetune, &samples[i].relnote); mp_sint32 relnote = (mp_sint32)samples[i].relnote-no; // validate note range if (relnote < -96) relnote = -96; if (relnote > 95) relnote = 95; samples[i].relnote=relnote; #else XModule::convertc4spd(smphdr.samplerate, &samples[i].finetune, &samples[i].relnote); #endif // 16 bit sample if (smphdr.smpmode & 1) { samples[i].type = 16; } // looping if (smphdr.smpmode & 4) samples[i].type |= 1; // bi-loop if (smphdr.smpmode & 8) { samples[i].type &= ~3; samples[i].type |= 2; } memcpy(samples[i].name, smphdr.wavename, 7); if (!(smp[i].type&16) && smp[i].samplen) { smp[i].sample = (mp_sbyte*)TXMSample::allocPaddedMem(smp[i].samplen); if (smp[i].sample == NULL) { PAT_CLEAN; return MP_OUT_OF_MEMORY; } owner = true; if (smphdr.smpmode & 2) { if (!XModule::loadSample(f,smp[i].sample,smp[i].samplen,smp[i].samplen,XModule::ST_UNSIGNED)) { PAT_CLEAN; return MP_OUT_OF_MEMORY; } } else { if (!XModule::loadSample(f,smp[i].sample,smp[i].samplen,smp[i].samplen)) { PAT_CLEAN; return MP_OUT_OF_MEMORY; } } } else if (smp[i].samplen) { smp[i].sample = (mp_sbyte*)TXMSample::allocPaddedMem(smp[i].samplen); if (smp[i].sample == NULL) { PAT_CLEAN; return MP_OUT_OF_MEMORY; } owner = true; if (smphdr.smpmode & 2) { if (!XModule::loadSample(f,smp[i].sample,smp[i].samplen,smp[i].samplen>>1,XModule::ST_16BIT | XModule::ST_UNSIGNED)) { PAT_CLEAN; return MP_OUT_OF_MEMORY; } } else { if (!XModule::loadSample(f,smp[i].sample,smp[i].samplen,smp[i].samplen>>1,XModule::ST_16BIT)) { PAT_CLEAN; return MP_OUT_OF_MEMORY; } } smp[i].samplen>>=1; smp[i].loopstart>>=1; smp[i].looplen>>=1; } } PAT_CLEAN; return MP_OK; } mp_sint32 XIInstrument::save(const SYSCHAR* fileName) { clean(); XMFile f(fileName, true); f.write("Extended Instrument: ", 1, 21); f.write(name, 1, 22); f.writeByte(0x1A); f.write("FastTracker v2.00 ", 1, 20); f.writeWord(0x102); f.write(nbu, 1, 96); mp_sint32 k; for (k = 0; k < 12; k++) { f.writeWord(venv.env[k][0]); f.writeWord(venv.env[k][1]>>2); } for (k = 0; k < 12; k++) { f.writeWord(penv.env[k][0]); f.writeWord(penv.env[k][1]>>2); } // read envelope flags f.writeByte(venv.num); f.writeByte(penv.num); f.writeByte(venv.sustain); f.writeByte(venv.loops); f.writeByte(venv.loope); f.writeByte(penv.sustain); f.writeByte(penv.loops); f.writeByte(penv.loope); f.writeByte(venv.type); f.writeByte(penv.type); f.writeByte(vibtype); f.writeByte(vibsweep); f.writeByte(vibdepth>>1); f.writeByte(vibrate); f.writeWord(volfade>>1); f.writeWord(0); memset(extra, 0, sizeof(extra)); f.write(extra, 1, 20); f.writeWord(numsamples); // read sample infos for (k = 0; k < numsamples; k++) { if (samples[k].type&16) { f.writeDword(samples[k].samplen<<1); f.writeDword(samples[k].loopstart<<1); f.writeDword(samples[k].looplen<<1); } else { f.writeDword(samples[k].samplen); f.writeDword(samples[k].loopstart); f.writeDword(samples[k].looplen); } f.writeByte(samples[k].vol*64/255); f.writeByte(samples[k].finetune); f.writeByte(samples[k].type); f.writeByte(samples[k].pan); f.writeByte(samples[k].relnote); f.writeByte(samples[k].res); f.write(samples[k].name, 1, 22); } // lazy guy TXMSample* smp = reinterpret_cast(&samples); // write samples for (k = 0; k < numsamples; k++) { if ((smp[k].type&16) && smp[k].samplen && smp[k].sample) { mp_sword* dst = new mp_sword[smp[k].samplen]; mp_sword last = 0; for (mp_uint32 i = 0; i < smp[k].samplen; i++) { dst[i] = smp[k].getSampleValue(i)-last; last = smp[k].getSampleValue(i); } f.writeWords((mp_uword*)dst, smp[k].samplen); delete[] dst; } else if (smp[k].samplen && smp[k].sample) { mp_sbyte* dst = new mp_sbyte[smp[k].samplen]; mp_sbyte last = 0; for (mp_uint32 i = 0; i < smp[k].samplen; i++) { dst[i] = smp[k].getSampleValue(i)-last; last = smp[k].getSampleValue(i); } f.write(dst, 1, smp[k].samplen); delete[] dst; } } return MP_OK; } XIInstrument& XIInstrument::operator=(const XIInstrument& source) { // no self-assignment if (this != &source) { // free up whatever is in there if (owner) { mp_sint32 numSamples = sizeof(samples)/sizeof(TXMSample); for (mp_sint32 i = 0; i < numSamples; i++) TXMSample::freePaddedMem((mp_ubyte*)samples[i].sample); } memset(&samples, 0, sizeof(samples)); // owner is now true owner = true; // copy memcpy(sig, source.sig, sizeof(sig)); memcpy(name, source.name, sizeof(name)); memcpy(tracker, source.tracker, sizeof(tracker)); memcpy(nbu, source.nbu, sizeof(nbu)); venv = source.venv; penv = source.penv; vibtype = source.vibtype; vibsweep = source.vibsweep; vibdepth = source.vibdepth; vibrate = source.vibrate; volfade = source.volfade; res = source.res; memcpy(extra, source.extra, sizeof(extra)); numsamples = source.numsamples; for (mp_sint32 i = 0; i < numsamples; i++) { const TXMSample* src = &source.samples[i]; TXMSample* dst = &samples[i]; dst->samplen = src->samplen; dst->loopstart = src->loopstart; dst->looplen = src->looplen; dst->flags = src->flags; dst->vol = src->vol; dst->finetune = src->finetune; dst->type = src->type; dst->pan = src->pan; dst->relnote = src->relnote; dst->venvnum = src->venvnum; dst->penvnum = src->penvnum; dst->fenvnum = src->fenvnum; dst->vibenvnum = src->vibenvnum; dst->vibtype = src->vibtype; dst->vibsweep = src->vibsweep; dst->vibdepth = src->vibdepth; dst->vibrate = src->vibrate; dst->volfade = src->volfade; dst->res = src->res; memcpy(dst->name, src->name, sizeof(src->name)); dst->terminate = src->terminate; if (src->sample) { if (src->type & 16) { dst->sample = (mp_sbyte*)(TXMSample::allocPaddedMem(src->samplen*2)); TXMSample::copyPaddedMem(dst->sample, src->sample, src->samplen*2); } else { dst->sample = (mp_sbyte*)(TXMSample::allocPaddedMem(src->samplen)); TXMSample::copyPaddedMem(dst->sample, src->sample, src->samplen); } } } } return *this; } MilkyTracker-1.02.00/src/milkyplay/XIInstrument.h000066400000000000000000000046701324432207300216460ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * XIInstrument.h * MilkyPlay * * Created by Peter Barth on 07.03.05. * */ #ifndef XIINSTRUMENT__H #define XIINSTRUMENT__H #include "XModule.h" #include class XIInstrument { private: bool owner; public: mp_ubyte sig[21]; mp_ubyte name[22]; mp_ubyte tracker[20]; mp_ubyte nbu[96]; TEnvelope venv; TEnvelope penv; mp_ubyte vibtype, vibsweep, vibdepth, vibrate; mp_uword volfade; mp_uword res; mp_ubyte extra[20]; mp_uword numsamples; TXMSample samples[16]; public: XIInstrument(); XIInstrument(const XIInstrument& src); ~XIInstrument(); void clean(); // Load instrument, .XI by default, otherwise GUS Patch (.PAT) mp_sint32 load(const SYSCHAR* pszFile); // Load GUS Patch instrument (.PAT) mp_sint32 loadPAT(XMFile& f); mp_sint32 save(const SYSCHAR* pszFile); // assignment operator XIInstrument& operator=(const XIInstrument& src); }; #endif MilkyTracker-1.02.00/src/milkyplay/XMFile.cpp000066400000000000000000000271001324432207300207050ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ ////////////////////////////////////////////////////////////////////////// // System dependent file loading routines // // to make future porting easier // ////////////////////////////////////////////////////////////////////////// #include "XMFile.h" XMFileBase::XMFileBase() : baseOffset(0) { } XMFileBase::~XMFileBase() { } void XMFileBase::seekWithBaseOffset(mp_dword pos) { seek(pos+baseOffset); } mp_uint32 XMFileBase::sizeWithBaseOffset() { return size()-baseOffset; } mp_uint32 XMFileBase::posWithBaseOffset() { return pos()-baseOffset; } ////////////////////////////////////////////////////////////////////////// // Reading/writing of little endian stuff // ////////////////////////////////////////////////////////////////////////// mp_ubyte XMFileBase::readByte() { mp_ubyte c; mp_sint32 bytesRead = read(&c,1,1); //ASSERT(bytesRead == 1); if (!(bytesRead == 1)) c = 0; return (mp_ubyte)c; } mp_uword XMFileBase::readWord() { mp_ubyte c[2]; mp_sint32 bytesRead = read(&c,1,2); //ASSERT(bytesRead == 2); if (!(bytesRead == 2)) c[0] = c[1] = 0; return (mp_uword)((mp_uword)c[0]+((mp_uword)c[1]<<8)); } mp_dword XMFileBase::readDword() { mp_ubyte c[4]; mp_sint32 bytesRead = read(&c,1,4); //ASSERT(bytesRead == 4); if (!(bytesRead == 4)) c[0] = c[1] = c[2] = c[3] = 0; return (mp_dword)((mp_uint32)c[0]+ ((mp_uint32)c[1]<<8)+ ((mp_uint32)c[2]<<16)+ ((mp_uint32)c[3]<<24)); } void XMFileBase::readWords(mp_uword* buffer,mp_sint32 count) { for (mp_sint32 i = 0; i < count; i++) *buffer++ = readWord(); } void XMFileBase::readDwords(mp_dword* buffer,mp_sint32 count) { for (mp_sint32 i = 0; i < count; i++) *buffer++ = readDword(); } void XMFileBase::writeByte(mp_ubyte b) { mp_sint32 bytesWritten = write(&b, 1, 1); ASSERT(bytesWritten == 1); } void XMFileBase::writeWord(mp_uword w) { mp_ubyte c[2]; c[0] = (mp_ubyte)w; c[1] = (mp_ubyte)(w>>8); mp_sint32 bytesWritten = write(&c, 1, 2); ASSERT(bytesWritten == 2); } void XMFileBase::writeDword(mp_dword dw) { mp_ubyte c[4]; c[0] = (mp_ubyte)dw; c[1] = (mp_ubyte)(dw>>8); c[2] = (mp_ubyte)(dw>>16); c[3] = (mp_ubyte)(dw>>24); mp_sint32 bytesWritten = write(&c, 1, 4); ASSERT(bytesWritten == 4); } void XMFileBase::writeWords(const mp_uword* buffer,mp_sint32 count) { for (mp_sint32 i = 0; i < count; i++) { writeWord(*buffer); buffer++; } } void XMFileBase::writeDwords(const mp_dword* buffer,mp_sint32 count) { for (mp_sint32 i = 0; i < count; i++) { writeDword(*buffer); buffer++; } } void XMFileBase::writeString(const char* string) { write(string, 1, static_cast (strlen(string))); } #define BUFFERSIZE 16384 ////////////////////////////////////////////////////////////////////////// // WIN32 implentation // ////////////////////////////////////////////////////////////////////////// #ifdef WIN32 #include XMFile::XMFile(const SYSCHAR* fileName, bool writeAccess /* = false*/) : XMFileBase(), fileName(fileName), cacheBuffer(NULL) { this->writeAccess = writeAccess; bytesRead = 0; handle = CreateFile(fileName, writeAccess ? GENERIC_WRITE : GENERIC_READ, writeAccess ? FILE_SHARE_WRITE : FILE_SHARE_READ, NULL, writeAccess ? CREATE_ALWAYS : OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); //ASSERT(handle != INVALID_HANDLE_VALUE); if (writeAccess) { cacheBuffer = new mp_ubyte[BUFFERSIZE+16]; currentCacheBufferPtr = cacheBuffer; } } bool XMFile::isOpen() { return handle != INVALID_HANDLE_VALUE; } XMFile::~XMFile() { if (writeAccess && handle != INVALID_HANDLE_VALUE) flush(); if (cacheBuffer) delete[] cacheBuffer; CloseHandle(handle); } mp_sint32 XMFile::read(void* ptr,mp_sint32 size,mp_sint32 count) { unsigned long NumberOfBytesRead; bool bResult = (bool)ReadFile(handle,ptr,size*count,&NumberOfBytesRead,NULL); bytesRead+=(mp_uint32)NumberOfBytesRead; if (!bResult) return -1; return (mp_sint32)NumberOfBytesRead; } void XMFile::flush() { unsigned long NumberOfBytesWritten; bool bResult = (bool)WriteFile(handle,cacheBuffer, currentCacheBufferPtr-cacheBuffer, &NumberOfBytesWritten, NULL); bytesRead+=(mp_uint32)NumberOfBytesWritten; currentCacheBufferPtr = cacheBuffer; } mp_sint32 XMFile::write(const void* ptr,mp_sint32 size,mp_sint32 count) { #ifdef DEBUG unsigned long NumberOfBytesWritten; bool bResult = (bool)WriteFile(handle,ptr,size*count,&NumberOfBytesWritten,NULL); bytesRead+=(mp_uint32)NumberOfBytesWritten; if (!bResult) return -1; return (mp_sint32)NumberOfBytesWritten; FlushFileBuffers(handle); #else // Buffer to be written is bigger than our internal cache // => Write through if (size*count > BUFFERSIZE) { // Flush first flush(); unsigned long NumberOfBytesWritten; bool bResult = (bool)WriteFile(handle,ptr,size*count,&NumberOfBytesWritten,NULL); bytesRead+=(mp_uint32)NumberOfBytesWritten; if (!bResult) return -1; return (mp_sint32)NumberOfBytesWritten; } // Buffer to be written still fits into our cache buffer if (size*count + currentCacheBufferPtr <= cacheBuffer+BUFFERSIZE) { // Copy into cache memcpy(currentCacheBufferPtr, ptr, size*count); // Advance current cache ptr currentCacheBufferPtr += size*count; } else { // Buffer doesn't fit, flush buffer first flush(); // Copy into cache memcpy(currentCacheBufferPtr, ptr, size*count); // Advance currentCacheBufferPtr += size*count; } if (currentCacheBufferPtr == cacheBuffer + BUFFERSIZE) flush(); bytesRead+=size*count; return size*count; #endif } void XMFile::seek(mp_uint32 pos, SeekOffsetTypes seekOffsetType/* = SeekOffsetTypeStart*/) { if (writeAccess) { flush(); } DWORD moveMethod = FILE_BEGIN; if (seekOffsetType == XMFile::SeekOffsetTypeCurrent) moveMethod = FILE_CURRENT; else if (seekOffsetType == XMFile::SeekOffsetTypeEnd) moveMethod = FILE_END; SetFilePointer(handle, pos, NULL, moveMethod); } mp_uint32 XMFile::pos() { return SetFilePointer(handle, 0, NULL, FILE_CURRENT); } mp_uint32 XMFile::size() { mp_uint32 size = 0; mp_uint32 curPos = pos(); SetFilePointer(handle, 0, NULL, FILE_END); size = pos(); seek(curPos); return size; } bool XMFile::remove(const SYSCHAR* file) { return DeleteFile(file); } bool XMFile::exists(const SYSCHAR* file) { HANDLE handle = CreateFile(file, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); bool res = handle != INVALID_HANDLE_VALUE; if (res) CloseHandle(handle); return res; } const char* XMFile::getFileNameASCII() { const SYSCHAR* ptr = fileName+_tcslen(fileName); while (*ptr != '\\' && ptr > fileName) ptr--; if (*ptr == '\\') ptr++; fileNameASCII = new char[_tcslen(ptr)+1]; for (mp_uint32 i = 0; i <= _tcslen(ptr); i++) fileNameASCII[i] = (char)ptr[i]; //strcpy(fileNameASCII, ptr); return fileNameASCII; } ////////////////////////////////////////////////////////////////////////// // C compatible implentation // ////////////////////////////////////////////////////////////////////////// #else #include XMFile::XMFile(const SYSCHAR* fileName, bool writeAccess /* = false*/) : XMFileBase(), fileName(fileName), fileNameASCII(NULL), cacheBuffer(NULL) { this->writeAccess = writeAccess; bytesRead = 0; handle = fopen(fileName,writeAccess?"wb":"rb"); //ASSERT(handle != NULL); if (writeAccess) { cacheBuffer = new mp_ubyte[BUFFERSIZE]; currentCacheBufferPtr = cacheBuffer; } } XMFile::~XMFile() { if (writeAccess && handle != NULL) flush(); if (handle != NULL) fclose(handle); if (fileNameASCII) delete[] fileNameASCII; if (cacheBuffer) delete[] cacheBuffer; } bool XMFile::isOpen() { return handle != NULL; } mp_sint32 XMFile::read(void* ptr, mp_sint32 size, mp_sint32 count) { unsigned long NumberOfBytesRead = fread(ptr,size,count,handle)*size; bytesRead += NumberOfBytesRead; return (mp_sint32)NumberOfBytesRead; } void XMFile::flush() { fwrite(cacheBuffer, 1, currentCacheBufferPtr-cacheBuffer, handle); currentCacheBufferPtr = cacheBuffer; } mp_sint32 XMFile::write(const void* ptr, mp_sint32 size, mp_sint32 count) { // Buffer to be written is bigger than our internal cache // => Write through if (size*count > BUFFERSIZE) { // Flush first flush(); unsigned long NumberOfBytesWritten = fwrite(ptr,size,count,handle)*size; bytesRead += NumberOfBytesWritten; return (mp_sint32)NumberOfBytesWritten; } // Buffer to be written still fits into our cache buffer if (size*count + currentCacheBufferPtr <= cacheBuffer+BUFFERSIZE) { // Copy into cache memcpy(currentCacheBufferPtr, ptr, size*count); // Advance current cache ptr currentCacheBufferPtr += size*count; } else { // Buffer doesn't fit, flush buffer first flush(); // Copy into cache memcpy(currentCacheBufferPtr, ptr, size*count); // Advance currentCacheBufferPtr += size*count; } if (currentCacheBufferPtr == cacheBuffer + BUFFERSIZE) flush(); bytesRead+=size*count; return size*count; } void XMFile::seek(mp_uint32 pos, SeekOffsetTypes seekOffsetType/* = SeekOffsetTypeStart*/) { if (writeAccess) { flush(); fflush(handle); } int moveMethod = SEEK_SET; if (seekOffsetType == XMFile::SeekOffsetTypeCurrent) moveMethod = SEEK_CUR; else if (seekOffsetType == XMFile::SeekOffsetTypeEnd) moveMethod = SEEK_END; fseek(handle,pos,moveMethod); } mp_uint32 XMFile::pos() { return static_cast(ftell(handle)); } mp_uint32 XMFile::size() { mp_uint32 size = 0; mp_uint32 curPos = pos(); fseek(handle,0,SEEK_END); size = pos(); seek(curPos); return size; } bool XMFile::exists(const SYSCHAR* file) { FHANDLE handle = fopen(file,"rb"); bool res = handle != NULL; if (res) fclose(handle); return res; } bool XMFile::remove(const SYSCHAR* file) { return unlink(file) == 0; } const char* XMFile::getFileNameASCII() { const SYSCHAR* ptr = fileName+strlen(fileName); while (*ptr != '/' && ptr > fileName) ptr--; if (*ptr == '/') ptr++; fileNameASCII = new char[strlen(ptr)+1]; strcpy(fileNameASCII, ptr); return fileNameASCII; } #endif MilkyTracker-1.02.00/src/milkyplay/XMFile.h000066400000000000000000000100571324432207300203550ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * XMFile.h * MilkyPlay * * Created by Peter Barth on Tue Oct 19 2004. * */ #ifndef __XMFILE_H__ #define __XMFILE_H__ #include "MilkyPlayCommon.h" class XMFileBase { private: mp_dword baseOffset; public: XMFileBase(); virtual ~XMFileBase(); virtual mp_sint32 read(void* ptr,mp_sint32 size,mp_sint32 count) = 0; virtual mp_sint32 write(const void* ptr,mp_sint32 size,mp_sint32 count) = 0; enum SeekOffsetTypes { SeekOffsetTypeStart, SeekOffsetTypeCurrent, SeekOffsetTypeEnd }; virtual void seek(mp_uint32 pos, SeekOffsetTypes seekOffsetType = SeekOffsetTypeStart) = 0; virtual mp_uint32 pos() = 0; virtual mp_uint32 size() = 0; virtual bool isEOF() { return pos() >= size(); } virtual const SYSCHAR* getFileName() = 0; virtual const char* getFileNameASCII() = 0; virtual bool isOpen() = 0; virtual bool isOpenForWriting() = 0; mp_ubyte readByte(); mp_uword readWord(); mp_dword readDword(); void readWords(mp_uword* buffer,mp_sint32 count); void readDwords(mp_dword* buffer,mp_sint32 count); void writeByte(mp_ubyte b); void writeWord(mp_uword w); void writeDword(mp_dword dw); void writeWords(const mp_uword* buffer,mp_sint32 count); void writeDwords(const mp_dword* buffer,mp_sint32 count); void writeString(const char* string); void setBaseOffset(mp_dword baseOffset) { this->baseOffset = baseOffset; } mp_dword getBaseOffset() const { return baseOffset; } void seekWithBaseOffset(mp_dword pos); mp_uint32 sizeWithBaseOffset(); mp_uint32 posWithBaseOffset(); }; class XMFile : public XMFileBase { private: const SYSCHAR* fileName; char* fileNameASCII; FHANDLE handle; mp_uint32 bytesRead; bool writeAccess; mp_ubyte* cacheBuffer; mp_ubyte* currentCacheBufferPtr; void flush(); public: XMFile(const SYSCHAR* fileName, bool writeAccess = false); virtual ~XMFile(); virtual mp_sint32 read(void* ptr,mp_sint32 size,mp_sint32 count); virtual mp_sint32 write(const void* ptr,mp_sint32 size,mp_sint32 count); virtual void seek(mp_uint32 pos, SeekOffsetTypes seekOffsetType = SeekOffsetTypeStart); virtual mp_uint32 pos(); virtual mp_uint32 size(); virtual const SYSCHAR* getFileName() { return fileName; } virtual const char* getFileNameASCII(); virtual bool isOpen(); virtual bool isOpenForWriting() { return isOpen() && writeAccess; } static bool exists(const SYSCHAR* file); static bool remove(const SYSCHAR* file); }; #endif MilkyTracker-1.02.00/src/milkyplay/XModule.cpp000066400000000000000000002125241324432207300211440ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * XModule.cpp * MilkyPlay module (based on a hybrid of the XM, MDL, AMS and IT formats) * * */ #include "XModule.h" #include "Loaders.h" #undef VERBOSE #ifdef VERBOSE #include #endif // heavy processing removes some of the nasty clicks found // in 669 and PLM songs (found in 8 bit samples only) void TXMSample::smoothLooping() { if ((type&16) || (type & 3) != 1 || sample == NULL || samplen < 1024 || looplen <= 32) return; mp_sbyte* data = (mp_sbyte*)this->sample; const mp_sint32 blockSize = 8; mp_sint32 max,t; float v1 = data[loopstart]; float v2 = data[loopstart+looplen]; float avg = (v1+v2)*0.5f; // step 1: Fade to avg from what's coming before loopstart max = loopstart; if (max > blockSize) max = blockSize; for (t = 0; t < max; t++) { float ft = (float)t/(float)max; mp_sint32 index = loopstart - max + t; mp_sint32 src = data[index]; float final = src * (1.0f - ft) + (avg * ft); data[index] = (mp_sbyte)final; } // step 2: Fade from avg into what's coming after loopstart max = blockSize; for (t = 0; t < max; t++) { float ft = (float)t/(float)max; mp_sint32 index = loopstart + t; mp_sint32 dst = data[index]; float final = avg * (1.0f - ft) + (dst * ft); data[index] = (mp_sbyte)final; } // step 3 for (t = 0; t < blockSize; t++) { mp_sint32 index = loopstart+looplen - blockSize + t; mp_sint32 src = data[index]; float ft = (float)t/(float)blockSize; float final = src * (1.0f - ft) + (avg * ft); data[index] = (mp_sbyte)final; } } void TXMSample::restoreLoopArea() { if (sample == NULL) return; mp_ubyte* originalSample = getPadStartAddr((mp_ubyte*)sample) + sizeof(TLoopDoubleBuffProps); mp_uint32 saveLen = (type&16) ? LoopAreaBackupSize * sizeof(mp_sword) : LoopAreaBackupSize; TLoopDoubleBuffProps* loopBufferProps = (TLoopDoubleBuffProps*)getPadStartAddr((mp_ubyte*)sample); ASSERT(saveLen <= LeadingPadding / 2); // 16 bit sample if (type&16) { mp_sword* data = (mp_sword*)this->sample; // save "real" loop area back from double buffer to sample if ((loopBufferProps->state[1] & 16) == (type & 16)) memcpy(data+loopBufferProps->lastloopend, originalSample, saveLen); else { // buffer has been 8 bit, now we're 16 bit => convert upwards for (mp_sint32 i = 0; i < LoopAreaBackupSize; i++) data[loopBufferProps->lastloopend+i] = ((mp_sbyte*)originalSample)[i] << 8; } loopBufferProps->state[0] = TLoopDoubleBuffProps::StateUnused; } // 8 bit sample else { mp_sbyte* data = (mp_sbyte*)this->sample; // save "real" loop area back from double buffer to sample if ((loopBufferProps->state[1] & 16) == (type & 16)) memcpy(data+loopBufferProps->lastloopend, originalSample, saveLen); else { // buffer has been 16 bit, now we're 8 bit => convert downwards for (mp_sint32 i = 0; i < LoopAreaBackupSize; i++) data[loopBufferProps->lastloopend+i] = ((mp_sword*)originalSample)[i] >> 8; } loopBufferProps->state[0] = TLoopDoubleBuffProps::StateUnused; } } void TXMSample::restoreOriginalState() { if (sample == NULL) return; TLoopDoubleBuffProps* loopBufferProps = (TLoopDoubleBuffProps*)getPadStartAddr((mp_ubyte*)sample); if (loopBufferProps->state[0] == TLoopDoubleBuffProps::StateDirty || loopBufferProps->state[0] == TLoopDoubleBuffProps::StateUsed) { restoreLoopArea(); } } void TXMSample::postProcessSamples() { mp_ubyte buffer[8]; // Sanitize loop points if(loopstart > samplen) loopstart = samplen; if(looplen > samplen - loopstart) looplen = samplen - loopstart; mp_sint32 loopend = loopstart + looplen; mp_sint32 samplen = this->samplen; if (looplen == 0) type &= ~3; if (sample == NULL) return; mp_ubyte* originalSample = getPadStartAddr((mp_ubyte*)sample) + sizeof(TLoopDoubleBuffProps); mp_uint32 saveLen = (type&16) ? LoopAreaBackupSize * sizeof(mp_sword) : LoopAreaBackupSize; TLoopDoubleBuffProps* loopBufferProps = (TLoopDoubleBuffProps*)getPadStartAddr((mp_ubyte*)sample); ASSERT(saveLen <= sizeof(buffer)); ASSERT(saveLen <= LeadingPadding / 2); const mp_ubyte importantFlags = 3 + 16; if (loopBufferProps->state[0] == TLoopDoubleBuffProps::StateDirty || (((loopBufferProps->lastloopend != loopend) || (loopBufferProps->state[1] != (type & importantFlags))) && loopBufferProps->state[0] == TLoopDoubleBuffProps::StateUsed)) { restoreLoopArea(); } // 16 bit sample if (type&16) { mp_sword* data = (mp_sword*)this->sample; if (!(type&3)) { data[-1]=data[0]; data[-2]=data[1]; data[-3]=data[2]; data[-4]=data[3]; data[samplen]=data[samplen-1]; data[samplen+1]=data[samplen-2]; data[samplen+3]=data[samplen-3]; data[samplen+4]=data[samplen-4]; } else if ((type&3) && loopBufferProps->state[0] == TLoopDoubleBuffProps::StateUnused) { // forward loop if ((type&3) == 1) { // padding start data[-1] = data[loopend-1]; data[-2] = data[loopend-2]; data[-3] = data[loopend-3]; data[-4] = data[loopend-4]; // save portions after loopend, gets overwritten now memcpy(originalSample, data+loopend, saveLen); loopBufferProps->state[0] = TLoopDoubleBuffProps::StateUsed; loopBufferProps->state[1] = type & importantFlags; loopBufferProps->lastloopend = loopend; memcpy(buffer, data+loopstart, saveLen); memcpy(data+loopend, buffer, saveLen); } else if ((type&3) == 2) { data[-1] = data[0]; data[-2] = data[1]; data[-3] = data[2]; data[-4] = data[3]; // save portions after loopend, gets overwritten now memcpy(originalSample, data+loopend, saveLen); loopBufferProps->state[0] = TLoopDoubleBuffProps::StateUsed; loopBufferProps->state[1] = type & importantFlags; loopBufferProps->lastloopend = loopend; data[loopend] = data[loopend-1]; data[loopend+1] = data[loopend-2]; data[loopend+2] = data[loopend-3]; data[loopend+3] = data[loopend-4]; } } } // 8 bit sample else { mp_sbyte* data = (mp_sbyte*)this->sample; if (!(type&3)) { data[-1] = data[0]; data[-2] = data[1]; data[-3] = data[2]; data[-4] = data[3]; data[samplen] = data[samplen-1]; data[samplen+1] = data[samplen-2]; data[samplen+2] = data[samplen-3]; data[samplen+3] = data[samplen-4]; } else if ((type&3) && loopBufferProps->state[0] == TLoopDoubleBuffProps::StateUnused) { // forward loop if ((type&3) == 1) { // leading padding data[-1] = data[loopend-1]; data[-2] = data[loopend-2]; data[-3] = data[loopend-3]; data[-4] = data[loopend-4]; // save portions after loopend, gets overwritten now memcpy(originalSample, data+loopend, saveLen); loopBufferProps->state[0] = TLoopDoubleBuffProps::StateUsed; loopBufferProps->state[1] = type & importantFlags; loopBufferProps->lastloopend = loopend; memcpy(buffer, data+loopstart, saveLen); memcpy(data+loopend, buffer, saveLen); } // bidi loop else if ((type&3) == 2) { data[-1] = data[0]; data[-2] = data[1]; data[-3] = data[2]; data[-4] = data[3]; // save portions after loopend, gets overwritten now memcpy(originalSample, data+loopend, saveLen); loopBufferProps->state[0] = TLoopDoubleBuffProps::StateUsed; loopBufferProps->state[1] = type & importantFlags; loopBufferProps->lastloopend = loopend; data[loopend] = data[loopend-1]; data[loopend+1] = data[loopend-2]; data[loopend+2] = data[loopend-3]; data[loopend+3] = data[loopend-4]; } } } } // get sample value // values range from [-32768,32767] in case of a 16 bit sample // or from [-128,127] in case of an 8 bit sample mp_sint32 TXMSample::getSampleValue(mp_uint32 index) { if (type & 16) { if ((type & 3) && index >= loopstart+looplen && index < loopstart+looplen+LoopAreaBackupSize) { TLoopDoubleBuffProps* loopBufferProps = (TLoopDoubleBuffProps*)getPadStartAddr((mp_ubyte*)sample); if (loopBufferProps->state[0] == TLoopDoubleBuffProps::StateUnused) return *(((mp_sword*)sample)+index); mp_sword* buff = (mp_sword*)(getPadStartAddr((mp_ubyte*)sample) + sizeof(TLoopDoubleBuffProps)); return *(buff + (index - (loopstart+looplen))); } else return *(((mp_sword*)sample)+index); } else { if ((type & 3) && index >= loopstart+looplen && index < loopstart+looplen+LoopAreaBackupSize) { TLoopDoubleBuffProps* loopBufferProps = (TLoopDoubleBuffProps*)getPadStartAddr((mp_ubyte*)sample); if (loopBufferProps->state[0] == TLoopDoubleBuffProps::StateUnused) return *(sample+index); mp_sbyte* buff = (mp_sbyte*)(getPadStartAddr((mp_ubyte*)sample) + sizeof(TLoopDoubleBuffProps)); return *(buff + (index - (loopstart+looplen))); } else return *(sample+index); } } mp_sint32 TXMSample::getSampleValue(mp_ubyte* sample, mp_uint32 index) { if (type & 16) return *(((mp_sword*)sample)+index); else return *(sample+index); } void TXMSample::setSampleValue(mp_uint32 index, mp_sint32 value) { if (type & 16) { if ((type & 3) && index >= loopstart+looplen && index < loopstart+looplen+LoopAreaBackupSize) { TLoopDoubleBuffProps* loopBufferProps = (TLoopDoubleBuffProps*)getPadStartAddr((mp_ubyte*)sample); if (loopBufferProps->state[0] == TLoopDoubleBuffProps::StateUnused) { *(((mp_sword*)sample)+index) = (mp_sword)value; return; } mp_sword* buff = (mp_sword*)(getPadStartAddr((mp_ubyte*)sample) + sizeof(TLoopDoubleBuffProps)); *(buff + (index - (loopstart+looplen))) = (mp_sword)value; loopBufferProps->state[0] = TLoopDoubleBuffProps::StateDirty; } else if ((type & 3) && index >= loopstart && index < loopstart+LoopAreaBackupSize) { TLoopDoubleBuffProps* loopBufferProps = (TLoopDoubleBuffProps*)getPadStartAddr((mp_ubyte*)sample); if (loopBufferProps->state[0] == TLoopDoubleBuffProps::StateUsed) loopBufferProps->state[0] = TLoopDoubleBuffProps::StateUnused; *(((mp_sword*)sample)+index) = (mp_sword)value; } else *(((mp_sword*)sample)+index) = (mp_sword)value; } else { if ((type & 3) && index >= loopstart+looplen && index < loopstart+looplen+LoopAreaBackupSize) { TLoopDoubleBuffProps* loopBufferProps = (TLoopDoubleBuffProps*)getPadStartAddr((mp_ubyte*)sample); if (loopBufferProps->state[0] == TLoopDoubleBuffProps::StateUnused) { *(sample+index) = (mp_sbyte)value; return; } mp_sbyte* buff = (mp_sbyte*)(getPadStartAddr((mp_ubyte*)sample) + sizeof(TLoopDoubleBuffProps)); *(buff + (index - (loopstart+looplen))) = (mp_sbyte)value; loopBufferProps->state[0] = TLoopDoubleBuffProps::StateDirty; } else if ((type & 3) && index >= loopstart && index < loopstart+LoopAreaBackupSize) { TLoopDoubleBuffProps* loopBufferProps = (TLoopDoubleBuffProps*)getPadStartAddr((mp_ubyte*)sample); if (loopBufferProps->state[0] == TLoopDoubleBuffProps::StateUsed) loopBufferProps->state[0] = TLoopDoubleBuffProps::StateUnused; *(sample+index) = (mp_sbyte)value; } else *(sample+index) = (mp_sbyte)value; } } void TXMSample::setSampleValue(mp_ubyte* sample, mp_uint32 index, mp_sint32 value) { if (type & 16) { *(((mp_sword*)sample)+index) = (mp_sword)value; } else *(sample+index) = (mp_sbyte)value; } #define FUNCTION_SUCCESS MP_OK #define FUNCTION_FAILED MP_LOADER_FAILED ////////////////////////////////////////////////////////////////////////////////////////////////////////////// // // IT sample loading helper class // ////////////////////////////////////////////////////////////////////////////////////////////////////////////// class ITSampleLoader : public XModule::SampleLoader { private: mp_dword* source_buffer; /* source buffer */ mp_dword* source_position; /* actual reading position */ mp_ubyte source_remaining_bits; /* bits remaining in read dword */ bool it215; public: ITSampleLoader(XMFileBase& file, bool isIt215 = false) : SampleLoader(file), source_buffer(NULL), source_position(NULL), source_remaining_bits(0), it215(isIt215) { } virtual ~ITSampleLoader() { free_IT_compressed_block(); } mp_dword read_n_bits_from_IT_compressed_block(mp_ubyte p_bits_to_read); mp_sint32 read_IT_compressed_block (); void free_IT_compressed_block (); // second parameter is ignored virtual mp_sint32 load_sample_8bits(void* p_dest_buffer, mp_sint32 compressedSize, mp_sint32 p_buffsize); // second parameter is ignored virtual mp_sint32 load_sample_16bits(void* p_dest_buffer, mp_sint32 compressedSize, mp_sint32 p_buffsize); }; /* * NOTICE * NOTICE * NOTICE * NOTICE * NOTICE * NOTICE * NOTICE * NOTICE * NOTICE * NOTICE * NOTICE -The following sample decompression code is based on CheeseTracker code which is based on xmp's code.(http://xmp.helllabs.org) which is based in openCP code. :D * NOTICE * NOTICE * NOTICE * NOTICE * NOTICE * NOTICE * NOTICE * NOTICE * NOTICE * NOTICE * NOTICE */ mp_dword ITSampleLoader::read_n_bits_from_IT_compressed_block (mp_ubyte p_bits_to_read) { mp_dword aux_return_value; mp_dword val; mp_ubyte *buffer=(mp_ubyte*)source_position; if ( p_bits_to_read <= source_remaining_bits ) { val=buffer[3]; val<<=8; val|=buffer[2]; val<<=8; val|=buffer[1]; val<<=8; val|=buffer[0]; aux_return_value = val & ((1 << p_bits_to_read) - 1); val >>= p_bits_to_read; source_remaining_bits -= p_bits_to_read; buffer[3]=val>>24; buffer[2]=(val>>16)&0xFF; buffer[1]=(val>>8)&0xFF; buffer[0]=(val)&0xFF; } else { aux_return_value=buffer[3]; aux_return_value<<=8; aux_return_value|=buffer[2]; aux_return_value<<=8; aux_return_value|=buffer[1]; aux_return_value<<=8; aux_return_value|=buffer[0]; mp_dword nbits = p_bits_to_read - source_remaining_bits; // aux_return_value = *source_position; source_position++; buffer+=4; val=buffer[3]; val<<=8; val|=buffer[2]; val<<=8; val|=buffer[1]; val<<=8; val|=buffer[0]; aux_return_value |= ((val & ((1 << nbits) - 1)) << source_remaining_bits); val >>= nbits; source_remaining_bits = 32 - nbits; buffer[3]=val>>24; buffer[2]=(val>>16)&0xFF; buffer[1]=(val>>8)&0xFF; buffer[0]=(val)&0xFF; } return aux_return_value; } mp_sint32 ITSampleLoader::read_IT_compressed_block () { mp_uword size; size=f.readWord(); if (f.isEOF()) return FUNCTION_FAILED; mp_sint32 finalSize = 4 * ((size >> 2) + 2); source_buffer = (mp_dword*)new mp_ubyte[finalSize]; if (source_buffer==NULL) return FUNCTION_FAILED; memset(source_buffer, 0, finalSize); mp_sint32 res = f.read(source_buffer, 1, size); if (res != size) { delete[] (mp_ubyte*)source_buffer; source_buffer = NULL; return FUNCTION_FAILED; } source_position = source_buffer; source_remaining_bits = 32; return FUNCTION_SUCCESS; } void ITSampleLoader::free_IT_compressed_block () { if (source_buffer!=NULL) delete[] (mp_ubyte*)source_buffer; source_buffer = NULL; } mp_sint32 ITSampleLoader::load_sample_8bits(void* p_dest_buffer, mp_sint32 compressedSize, mp_sint32 p_buffsize) { mp_sbyte *dest_buffer; /* destination buffer which will be returned */ mp_uword block_length; /* length of compressed data block in samples */ mp_uword block_position; /* position in block */ mp_ubyte bit_width; /* actual "bit width" */ mp_uword aux_value; /* value read from file to be processed */ mp_sbyte d1, d2; /* integrator buffers (d2 for it2.15) */ mp_sbyte *dest_position; /* position in output buffer */ mp_sbyte v; /* sample value */ dest_buffer = (mp_sbyte *) p_dest_buffer; if (dest_buffer==NULL) return FUNCTION_FAILED; memset (dest_buffer, 0, p_buffsize); dest_position = dest_buffer; /* now unpack data till the dest buffer is full */ while (p_buffsize) { /* read a new block of compressed data and reset variables */ if ( read_IT_compressed_block() ) return FUNCTION_FAILED; block_length = (p_buffsize < 0x8000) ? p_buffsize : 0x8000; block_position = 0; bit_width = 9; /* start with width of 9 bits */ d1 = d2 = 0; /* reset integrator buffers */ /* now uncompress the data block */ while ( block_position < block_length ) { aux_value = read_n_bits_from_IT_compressed_block(bit_width); /* read bits */ if ( bit_width < 7 ) { /* method 1 (1-6 bits) */ if ( aux_value == (1 << (bit_width - 1)) ) { /* check for "100..." */ aux_value = read_n_bits_from_IT_compressed_block(3) + 1; /* yes -> read new width; */ bit_width = (aux_value < bit_width) ? aux_value : aux_value + 1; /* and expand it */ continue; /* ... next value */ } } else if ( bit_width < 9 ) { /* method 2 (7-8 bits) */ mp_ubyte border = (0xFF >> (9 - bit_width)) - 4; /* lower border for width chg */ if ( aux_value > border && aux_value <= (border + 8) ) { aux_value -= border; /* convert width to 1-8 */ bit_width = (aux_value < bit_width) ? aux_value : aux_value + 1; /* and expand it */ continue; /* ... next value */ } } else if ( bit_width == 9 ) { /* method 3 (9 bits) */ if ( aux_value & 0x100 ) { /* bit 8 set? */ bit_width = (aux_value + 1) & 0xff; /* new width... */ continue; /* ... and next value */ } } else { /* illegal width, abort */ free_IT_compressed_block(); return FUNCTION_FAILED; } /* now expand value to signed byte */ if ( bit_width < 8 ) { mp_ubyte tmp_shift = 8 - bit_width; v=(aux_value << tmp_shift); v>>=tmp_shift; } else v = (mp_sbyte) aux_value; /* integrate upon the sample values */ d1 += v; d2 += d1; /* ... and store it into the buffer */ *(dest_position++) = it215 ? d2 : d1; block_position++; } /* now subtract block lenght from total length and go on */ free_IT_compressed_block(); p_buffsize -= block_length; } return FUNCTION_SUCCESS; } mp_sint32 ITSampleLoader::load_sample_16bits(void* p_dest_buffer, mp_sint32 compressedSize, mp_sint32 p_buffsize) { mp_sword *dest_buffer; /* destination buffer which will be returned */ mp_uword block_length; /* length of compressed data block in samples */ mp_uword block_position; /* position in block */ mp_ubyte bit_width; /* actual "bit width" */ mp_dword aux_value; /* value read from file to be processed */ mp_sword d1, d2; /* integrator buffers (d2 for it2.15) */ mp_sword *dest_position; /* position in output buffer */ mp_sword v; /* sample value */ dest_buffer = (mp_sword *) p_dest_buffer; if (dest_buffer==NULL) return FUNCTION_FAILED; memset (dest_buffer, 0, p_buffsize*2); dest_position = dest_buffer; while (p_buffsize) { /* read a new block of compressed data and reset variables */ if ( read_IT_compressed_block() ) { return FUNCTION_FAILED; } block_length = (p_buffsize < 0x4000) ? p_buffsize : 0x4000; block_position = 0; bit_width = 17; /* start with width of 9 bits */ d1 = d2 = 0; /* reset integrator buffers */ while ( block_position < block_length ) { aux_value = read_n_bits_from_IT_compressed_block(bit_width); /* read bits */ if ( bit_width < 7 ) { /* method 1 (1-6 bits) */ if ( (signed)aux_value == (1 << (bit_width - 1)) ) { /* check for "100..." */ aux_value = read_n_bits_from_IT_compressed_block(4) + 1; /* yes -> read new width; */ bit_width = (aux_value < bit_width) ? aux_value : aux_value + 1; /* and expand it */ continue; /* ... next value */ } } else if ( bit_width < 17 ) { mp_uword border = (0xFFFF >> (17 - bit_width)) - 8; if ( (signed)aux_value > border && (signed)aux_value <= (border + 16) ) { aux_value -= border; /* convert width to 1-8 */ bit_width = (aux_value < bit_width) ? aux_value : aux_value + 1; /* and expand it */ continue; /* ... next value */ } } else if ( bit_width == 17 ) { if ( aux_value & 0x10000 ) { /* bit 8 set? */ bit_width = (aux_value + 1) & 0xff; /* new width... */ continue; /* ... and next value */ } } else { /* illegal width, abort */ //ERROR("Sample has illegal BitWidth "); free_IT_compressed_block(); return FUNCTION_FAILED; } /* now expand value to signed byte */ if ( bit_width < 16 ) { mp_ubyte tmp_shift = 16 - bit_width; v=(aux_value << tmp_shift); v>>=tmp_shift; } else v = (mp_sword) aux_value; /* integrate upon the sample values */ d1 += v; d2 += d1; /* ... and store it into the buffer */ *(dest_position++) = it215 ? d2 : d1; block_position++; } /* now subtract block lenght from total length and go on */ free_IT_compressed_block(); p_buffsize -= block_length; } return FUNCTION_SUCCESS; } ////////////////////////////////////////////////////////////////////////////////////////////////////////////// // // MDL sample loading helper class // ////////////////////////////////////////////////////////////////////////////////////////////////////////////// class MDLSampleLoader : public XModule::SampleLoader { private: mp_ubyte* tmpBuffer; mp_ubyte* dstBuffer; // MDL unpacking static mp_ubyte readbits(mp_ubyte* buffer,mp_uint32& bitcount,mp_uint32& bytecount,mp_sint32 numbits) { mp_ubyte val=0,bitti=0; for (mp_sint32 n=0;n>bitcount)&1)<<(bitti++); bitcount++; if (bitcount==8) { bitcount=0; bytecount++; } } return val; } // MDL unpacking static mp_ubyte depackbyte(mp_ubyte* packed,mp_uint32& bitcount,mp_uint32& bytecount) { mp_ubyte b = 0; mp_ubyte sign = readbits(packed,bitcount,bytecount,1); mp_ubyte bit = readbits(packed,bitcount,bytecount,1); if (bit) { b = readbits(packed,bitcount,bytecount,3); goto next; } else b=8; loop:; bit=readbits(packed,bitcount,bytecount,1); if (!bit) { b+=16; goto loop; } else b+=readbits(packed,bitcount,bytecount,4); next:; if (sign) b^=255; return b; } void cleanUp() { if (tmpBuffer) { delete[] tmpBuffer; tmpBuffer = NULL; } if (dstBuffer) { delete[] dstBuffer; dstBuffer = NULL; } } public: MDLSampleLoader(XMFileBase& file) : SampleLoader(file), tmpBuffer(NULL), dstBuffer(NULL) { } virtual ~MDLSampleLoader() { cleanUp(); } virtual mp_sint32 load_sample_8bits(void* p_dest_buffer, mp_sint32 compressedSize, mp_sint32 p_buffsize); virtual mp_sint32 load_sample_16bits(void* p_dest_buffer, mp_sint32 compressedSize, mp_sint32 p_buffsize); }; mp_sint32 MDLSampleLoader::load_sample_8bits(void* buffer, mp_sint32 size, mp_sint32 length) { cleanUp(); tmpBuffer = new mp_ubyte[size+32]; memset(tmpBuffer,0,size+32); if (tmpBuffer == NULL) return FUNCTION_FAILED; f.read(tmpBuffer,1,size); dstBuffer = new mp_ubyte[length+64]; if (dstBuffer == NULL) return FUNCTION_FAILED; memset(dstBuffer,0,length+64); mp_uint32 bitcount=0, bytecount=0; mp_sint32 i=0; while (bytecount < (unsigned)size && i < length) { dstBuffer[i++]=depackbyte((mp_ubyte*)tmpBuffer,bitcount,bytecount); } mp_sbyte b1=0; for (i = 0; i < length; i++) dstBuffer[i] = b1+=dstBuffer[i]; memcpy(buffer,dstBuffer,length); return FUNCTION_SUCCESS; } mp_sint32 MDLSampleLoader::load_sample_16bits(void* buffer, mp_sint32 size, mp_sint32 length) { cleanUp(); tmpBuffer = new mp_ubyte[size+32]; memset(tmpBuffer,0,size+32); if (tmpBuffer == NULL) return FUNCTION_FAILED; f.read(tmpBuffer,1,size); dstBuffer = new mp_ubyte[length*2+64]; if (dstBuffer == NULL) return FUNCTION_FAILED; memset(dstBuffer,0,length+64); mp_uint32 bitcount=0, bytecount=0; mp_sint32 i=0; while (bytecount<(unsigned)size && i < length*2) { dstBuffer[i++]=readbits((mp_ubyte*)tmpBuffer,bitcount,bytecount,8); dstBuffer[i++]=depackbyte((mp_ubyte*)tmpBuffer,bitcount,bytecount); } mp_sbyte b1=0; for (i = 0; i < length; i++) dstBuffer[i*2+1] = b1+=dstBuffer[i*2+1]; mp_sword* dstBuffer16 = (mp_sword*)buffer; mp_ubyte* srcBuffer = (mp_ubyte*)dstBuffer; for (i = 0; i < length; i++) *dstBuffer16++ = LittleEndian::GET_WORD(srcBuffer+=2); return FUNCTION_SUCCESS; } ////////////////////////////////////////////////////////////////////////////////////////////////////////////// // // ADPCM sample loading helper class: // // 4-bit ADPCM is coding the delta values between a sample and // the next in 4-bits (starting value is zero). The delta values are // stored as a 16-byte table at the start of the sample data: // [16-bytes delta values][(length+1)/2 bytes of 4-bit indexes...] // ////////////////////////////////////////////////////////////////////////////////////////////////////////////// class ADPCMSampleLoader : public XModule::SampleLoader { private: mp_ubyte* tmpBuffer; void cleanUp() { if (tmpBuffer) { delete[] tmpBuffer; tmpBuffer = NULL; } } public: ADPCMSampleLoader(XMFileBase& file) : SampleLoader(file), tmpBuffer(NULL) { } virtual ~ADPCMSampleLoader() { cleanUp(); } virtual mp_sint32 load_sample_8bits(void* p_dest_buffer, mp_sint32 compressedSize, mp_sint32 p_buffsize) { cleanUp(); mp_sbyte deltaValues[16]; // read delta values table f.read(deltaValues, 1, 16); // this is the actual size of the compressed size const mp_uint32 blockSize = (p_buffsize + 1) / 2; // allocate some memory for it tmpBuffer = new mp_ubyte[blockSize]; // read compressed data f.read(tmpBuffer, 1, blockSize); mp_sbyte b1 = 0; mp_sbyte* srcPtr = (mp_sbyte*)p_dest_buffer; for (mp_uint32 i = 0; i < blockSize; i++) { mp_uint32 index = tmpBuffer[i] & 0xF; *srcPtr++ = b1+=deltaValues[index]; index = tmpBuffer[i] >> 4; *srcPtr++ = b1+=deltaValues[index]; } return FUNCTION_SUCCESS; } virtual mp_sint32 load_sample_16bits(void* p_dest_buffer, mp_sint32 compressedSize, mp_sint32 p_buffsize) { cleanUp(); return FUNCTION_SUCCESS; } }; mp_sint32 TXMPattern::compress(mp_ubyte* dest) const { mp_sint32 patternSize = rows*channum*(2+effnum*2); mp_ubyte* srcPtr = patternData; mp_ubyte* dstPtr = dest; mp_sint32 i = 0; mp_sint32 len = 0; // retrieve buffer size only if (!dest) { while (i < patternSize) { if (*srcPtr > 0 && *srcPtr < 128) { srcPtr++; i++; len++; } else if (*srcPtr >= 128) { srcPtr++; i++; len+=2; } else { mp_sint32 j = 0; while (i < patternSize && j < 125 && *srcPtr == 0) { srcPtr++; j++; i++; } if (j == 1) { len++; } else { ASSERT(128+j < 255); len++; } } } return len; } // compress and store while (i < patternSize) { if (*srcPtr > 0 && *srcPtr < 128) { *dstPtr++ = *srcPtr++; i++; len++; } else if (*srcPtr >= 128) { *dstPtr++ = 255; *dstPtr++ = *srcPtr++; i++; len+=2; } else { mp_sint32 j = 0; while (i < patternSize && j < 125 && *srcPtr == 0) { srcPtr++; j++; i++; } if (j == 1) { *dstPtr++ = 0; len++; } else { *dstPtr++ = 128 + j; ASSERT(128+j < 255); len++; } } } return len; } mp_sint32 TXMPattern::decompress(mp_ubyte* src, mp_sint32 len) { mp_sint32 patternSize = rows*channum*(2+effnum*2); mp_ubyte* srcPtr = src; mp_ubyte* dstPtr = patternData; mp_sint32 i = 0; mp_sint32 j = 0; while (i < len && j < patternSize) { if (*srcPtr < 128) { *dstPtr++ = *srcPtr++; i++; j++; } else if (*srcPtr == 255) { srcPtr++; *dstPtr++ = *srcPtr++; i+=2; j++; } else { mp_sint32 k = *srcPtr++ & 127; for (mp_sint32 l = 0; l < k; l++) { if (j < patternSize) *dstPtr++ = 0; else { ASSERT(false); } j++; } i++; } } return MP_OK; } #ifdef MILKYTRACKER const TXMPattern& TXMPattern::operator=(const TXMPattern& src) { if (this != &src) { delete[] patternData; const mp_uint32 size = (mp_uint32)src.channum*(2+(mp_uint32)src.effnum*2)*(mp_uint32)src.rows; patternData = new mp_ubyte[size]; memcpy(patternData, src.patternData, size); channum = src.channum; effnum = src.effnum; len = src.len; patdata = src.patdata; ptype = src.ptype; rows = src.rows; } return *this; } #endif // Constructor for loader manager (private) XModule::LoaderManager::LoaderManager() : loaders(NULL), numLoaders(0), numAllocatedLoaders(0), iteratorCounter(-1) { #ifndef MP_XMONLY registerLoader(new Loader669(), ModuleType_669); registerLoader(new LoaderAMF_1(), ModuleType_AMF); registerLoader(new LoaderAMF_2(), ModuleType_AMF); registerLoader(new LoaderAMSv1(), ModuleType_AMS); registerLoader(new LoaderAMSv2(), ModuleType_AMS); registerLoader(new LoaderCBA(), ModuleType_CBA); registerLoader(new LoaderDBM(), ModuleType_DBM); registerLoader(new LoaderDIGI(), ModuleType_DIGI); registerLoader(new LoaderDSMv1(), ModuleType_DSM); registerLoader(new LoaderDSMv2(), ModuleType_DSM); registerLoader(new LoaderDSm(), ModuleType_DSm); registerLoader(new LoaderDTM_1(), ModuleType_DTM_1); registerLoader(new LoaderDTM_2(), ModuleType_DTM_2); registerLoader(new LoaderFAR(), ModuleType_FAR); registerLoader(new LoaderGDM(), ModuleType_GDM); registerLoader(new LoaderIMF(), ModuleType_IMF); registerLoader(new LoaderIT(), ModuleType_IT); //registerLoader(new LoaderFNK(), funk format sucks registerLoader(new LoaderMDL(), ModuleType_MDL); registerLoader(new LoaderMTM(), ModuleType_MTM); registerLoader(new LoaderMXM(), ModuleType_MXM); registerLoader(new LoaderOKT(), ModuleType_OKT); registerLoader(new LoaderPLM(), ModuleType_PLM); registerLoader(new LoaderPSMv1(), ModuleType_PSM); registerLoader(new LoaderPSMv2(), ModuleType_PSM); registerLoader(new LoaderPTM(), ModuleType_PTM); registerLoader(new LoaderS3M(), ModuleType_S3M); registerLoader(new LoaderSTM(), ModuleType_STM); registerLoader(new LoaderSFX(), ModuleType_SFX); registerLoader(new LoaderUNI(), ModuleType_UNI); registerLoader(new LoaderULT(), ModuleType_ULT); registerLoader(new LoaderXM(), ModuleType_XM); // Game Music Creator may not be recognized perfectly registerLoader(new LoaderGMC(), ModuleType_GMC); // Last loader is MOD because there is a slight chance that other formats will be misinterpreted as 15 ins. MODs registerLoader(new LoaderMOD(), ModuleType_MOD); #else registerLoader(new LoaderXM(), ModuleType_XM); #endif } XModule::LoaderManager::~LoaderManager() { for (mp_uint32 i = 0; i < numLoaders; i++) delete loaders[i].loader; delete[] loaders; } void XModule::LoaderManager::registerLoader(LoaderInterface* loader, ModuleTypes type) { if (numLoaders+1 > numAllocatedLoaders) { numAllocatedLoaders+=16; TLoaderInfo* newLoaders = new TLoaderInfo[numAllocatedLoaders]; for (mp_uint32 i = 0; i < numLoaders; i++) newLoaders[i] = loaders[i]; delete[] loaders; loaders = newLoaders; } loaders[numLoaders].loader = loader; loaders[numLoaders].moduleType = type; numLoaders++; } XModule::TLoaderInfo* XModule::LoaderManager::getFirstLoaderInfo() { if (numLoaders) { iteratorCounter = 0; return loaders; } else return NULL; } XModule::TLoaderInfo* XModule::LoaderManager::getNextLoaderInfo() { iteratorCounter++; if (iteratorCounter < (signed)numLoaders) return loaders+iteratorCounter; else { iteratorCounter = -1; return NULL; } } const mp_sint32 XModule::periods[12] = {1712,1616,1524,1440,1356,1280,1208,1140,1076,1016,960,907}; const mp_sint32 XModule::sfinetunes[16] = {8363,8413,8463,8529,8581,8651,8723,8757, 7895,7941,7985,8046,8107,8169,8232,8280}; const mp_sbyte XModule::modfinetunes[16] = {0,16,32,48,64,80,96,112,-128,-112,-96,-80,-64,-48,-32,-16}; const mp_ubyte XModule::numValidXMEffects = 24; const mp_ubyte XModule::validXMEffects[XModule::numValidXMEffects] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,20,21,25,27,29,33}; ////////////////////////////////////////////////////////////////////////// // various tools for loading and converting modules // ////////////////////////////////////////////////////////////////////////// mp_sint32 XModule::getc4spd(mp_sint32 relnote,mp_sint32 finetune) { static const mp_sint32 table[] = {65536,69432,73561,77935,82570,87480,92681,98193,104031,110217,116771,123715, 65536,65565,65595,65624,65654,65684,65713,65743,65773,65802,65832,65862,65891, 65921,65951,65981,66010,66040,66070,66100,66130,66160,66189,66219,66249,66279, 66309,66339,66369,66399,66429,66459,66489,66519,66549,66579,66609,66639,66669, 66699,66729,66759,66789,66820,66850,66880,66910,66940,66971,67001,67031,67061, 67092,67122,67152,67182,67213,67243,67273,67304,67334,67365,67395,67425,67456, 67486,67517,67547,67578,67608,67639,67669,67700,67730,67761,67792,67822,67853, 67883,67914,67945,67975,68006,68037,68067,68098,68129,68160,68190,68221,68252, 68283,68314,68344,68375,68406,68437,68468,68499,68530,68561,68592,68623,68654, 68685,68716,68747,68778,68809,68840,68871,68902,68933,68964,68995,69026,69057, 69089,69120,69151,69182,69213,69245,69276,69307,69339,69370,69401}; mp_sint32 c4spd = 8363; mp_sbyte xmfine = finetune; mp_sbyte octave = (relnote+96)/12; mp_sbyte note = (relnote+96)%12; mp_sbyte o2 = octave-8; if (xmfine<0) { xmfine+=(mp_sbyte)128; note--; if (note<0) { note+=12; o2--; } } if (o2>=0) { c4spd<<=o2; } else { c4spd>>=-o2; } mp_sint32 f = FixedMUL(table[(mp_ubyte)note],c4spd); return (FixedMUL(f,table[(mp_ubyte)xmfine+12])); } void XModule::convertc4spd(mp_uint32 c4spd,mp_sbyte *finetune,mp_sbyte *relnote) { mp_sint32 xmfine = 0; mp_sbyte cl = 0; mp_sbyte ch = 0; mp_uint32 ebp = 0xFFFFFFFF; mp_uint32 ebx = c4spd; aloop: mp_uint32 c4s2 = ebx; mp_uint32 c4s = getc4spd((mp_sint32)cl-48,0); if (c4s>((y/12)))>>2; if (period >= per) return y+1; } return 0; } //////////////////////////////////////////// // Load sample into given memory. // // Sample size is in BYTES not in samples // // Sample length is number of samples, // //////////////////////////////////////////// bool XModule::loadSample(XMFileBase& f,void* buffer,mp_uint32 size,mp_uint32 length,mp_sint32 flags /* = ST_DEFAULT */) { mp_ubyte* tmpBuffer = NULL; mp_ubyte* dstBuffer = NULL; // MDL style packing if (flags & ST_PACKING_MDL) { MDLSampleLoader sampleLoader(f); if (flags & ST_16BIT) { if (sampleLoader.load_sample_16bits(buffer, size, length)) return false; } else { if (sampleLoader.load_sample_8bits(buffer, size, length)) return false; } return true; } else if ((flags & ST_PACKING_IT) || (flags & ST_PACKING_IT215)) { ITSampleLoader sampleLoader(f, (flags & ST_PACKING_IT215)); if (flags & ST_16BIT) { if (sampleLoader.load_sample_16bits(buffer, -1, length)) return false; } else { if (sampleLoader.load_sample_8bits(buffer, -1, length)) return false; } return true; } else if (flags & ST_PACKING_ADPCM) { ADPCMSampleLoader sampleLoader(f); if (flags & ST_16BIT) { if (sampleLoader.load_sample_16bits(buffer, size, length)) return false; } else { if (sampleLoader.load_sample_8bits(buffer, size, length)) return false; } return true; } else { memset(buffer, 0, size); f.read(buffer,flags & ST_16BIT ? 2 : 1, length); } // 16 bit sample if (flags & ST_16BIT) { mp_sword* dstPtr = (mp_sword*)buffer; mp_ubyte* srcPtr = (mp_ubyte*)buffer; // PTM delta storing if (flags & ST_DELTA_PTM) { mp_sbyte b1=0; for (mp_uint32 i = 0; i < length*2; i++) srcPtr[i] = b1+=srcPtr[i]; } mp_uint32 i; if (flags & ST_BIGENDIAN) { for (i = 0; i < length; i++) dstPtr[i] = BigEndian::GET_WORD(srcPtr+i*2); } else { for (i = 0; i < length; i++) dstPtr[i] = LittleEndian::GET_WORD(srcPtr+i*2); } // delta-storing if (flags & ST_DELTA) { mp_sword b1=0; for (i = 0; i < length; i++) dstPtr[i] = b1+=dstPtr[i]; } // unsigned sample data if (flags & ST_UNSIGNED) { for (i = 0; i < length; i++) dstPtr[i] = (dstPtr[i]^32767); } } // 8 bit sample else { mp_sbyte* smpPtr = (mp_sbyte*)buffer; // delta-storing if (flags & ST_DELTA) { mp_sbyte b1=0; for (mp_uint32 i = 0; i < length; i++) smpPtr[i] = b1+=smpPtr[i]; } // unsigned sample data if (flags & ST_UNSIGNED) { for (mp_uint32 i = 0; i < length; i++) smpPtr[i] ^= 127; } } if (tmpBuffer) delete[] tmpBuffer; if (dstBuffer) delete[] dstBuffer; return true; } mp_sint32 XModule::loadModuleSample(XMFileBase& f, mp_sint32 index, mp_sint32 flags8/* = ST_DEFAULT*/, mp_sint32 flags16/* = ST_16BIT*/, mp_uint32 alternateSize/* = 0*/) { if (smp[index].type & 16) { mp_uint32 finalSize = alternateSize ? alternateSize : smp[index].samplen*2; if(finalSize < 8) finalSize = 8; smp[index].sample = (mp_sbyte*)allocSampleMem(finalSize); if (smp[index].sample == NULL) { return MP_OUT_OF_MEMORY; } if (!loadSample(f,smp[index].sample, finalSize, smp[index].samplen, flags16)) { return MP_OUT_OF_MEMORY; } } else { mp_uint32 finalSize = alternateSize ? alternateSize : smp[index].samplen; if(finalSize < 4) finalSize = 4; smp[index].sample = (mp_sbyte*)allocSampleMem(finalSize); if (smp[index].sample == NULL) { return MP_OUT_OF_MEMORY; } if (!loadSample(f,smp[index].sample, finalSize, smp[index].samplen, flags8)) { return MP_OUT_OF_MEMORY; } } return MP_OK; } mp_sint32 XModule::loadModuleSamples(XMFileBase& f, mp_sint32 flags8/* = ST_DEFAULT*/, mp_sint32 flags16/* = ST_16BIT*/) { for (mp_sint32 i = 0; i < header.smpnum; i++) { mp_sint32 res = loadModuleSample(f, i, flags8, flags16); if (res != MP_OK) return res; } return MP_OK; } //////////////////////////////////////////// // Before using the sample postprocessing // // please make sure that the memory // // allocated for the samples has another // // 16 bytes padding space // //////////////////////////////////////////// void XModule::postProcessSamples(bool heavy/* = false*/) { for (mp_uint32 i = 0; i < header.smpnum; i++) { TXMSample* smp = &this->smp[i]; #ifdef VERBOSE printf("%i: %i, %i, %i, %x\n",i,smp->samplen, smp->loopstart, smp->looplen,smp->pan); #endif if (smp->samplen == 0) { freeSampleMem((mp_ubyte*)smp->sample, false); smp->sample = NULL; continue; } if (heavy) smp->smoothLooping(); smp->postProcessSamples(); } } void XModule::setDefaultPanning() { for (mp_sint32 i = 0; i < header.channum; i++) { if (i & 1) header.pan[i] = 192; else header.pan[i] = 64; } } mp_ubyte* XModule::allocSampleMem(mp_uint32 size) { // sample is always padded at start and end with 16 bytes for (mp_sint32 i = 0; i < (signed)samplePointerIndex; i++) { if (samplePool[i] == NULL) { samplePool[i] = TXMSample::allocPaddedMem(size); return samplePool[i]; } } samplePool[samplePointerIndex] = TXMSample::allocPaddedMem(size); return samplePool[samplePointerIndex++]; } void XModule::freeSampleMem(mp_ubyte* mem, bool assertCheck/* = true*/) { bool found = false; for (mp_sint32 i = 0; i < (signed)samplePointerIndex; i++) { if (samplePool[i] == mem) { found = true; TXMSample::freePaddedMem(samplePool[i]); samplePool[i] = NULL; if (i == (signed)samplePointerIndex - 1) { samplePointerIndex--; break; } } } if (assertCheck) { ASSERT(found); } } #ifdef MILKYTRACKER void XModule::insertSamplePtr(mp_ubyte* ptr) { for (mp_sint32 i = 0; i < (signed)samplePointerIndex; i++) { if (samplePool[i] == NULL) { samplePool[i] = ptr; return; } } samplePool[samplePointerIndex++] = ptr; } void XModule::removeSamplePtr(mp_ubyte* ptr) { for (mp_sint32 i = 0; i < (signed)samplePointerIndex; i++) { if (samplePool[i] == ptr) { samplePool[i] = NULL; } } } #endif bool XModule::addEnvelope(TEnvelope*& envs, const TEnvelope& env, mp_uint32& numEnvsAlloc, mp_uint32& numEnvs) { if (envs == NULL) { numEnvsAlloc = 8; envs = new TEnvelope[numEnvsAlloc]; if (envs == NULL) return false; envs[numEnvs++] = env; return true; } else { if (numEnvs >= numEnvsAlloc) { numEnvsAlloc+=8; TEnvelope* tmpEnvs = new TEnvelope[numEnvsAlloc]; if (tmpEnvs == NULL) return false; memcpy(tmpEnvs,envs,numEnvs*sizeof(TEnvelope)); delete[] envs; envs = tmpEnvs; } envs[numEnvs++] = env; } return true; } // fix broken envelopes (1 point envelope for example) void XModule::fixEnvelopes(TEnvelope* envs, mp_uint32 numEnvs) { TEnvelope* env = envs; for (mp_uint32 i = 0; i < numEnvs; i++, env++) { // Check for envelope with single point (seen in a DBM module) if (env->num == 1) { // make sure point one starts at x-position 0 env->env[0][0] = 0; // add second point with y-coordinate from point one env->env[1][1] = env->env[0][1]; // x-coordinate is just a few ticks right from point one env->env[1][0] = env->env[0][0] + 64; env->num++; } } } // better destructor, should be called before loading a song // just in case loading of a module failed and someone tries to load another // module right after that bool XModule::cleanUp() { if (venvs) { delete[] venvs; venvs = NULL; numVEnvsAlloc = numVEnvs = 0; } if (penvs) { delete[] penvs; penvs = NULL; numPEnvsAlloc = numPEnvs = 0; } if (fenvs) { delete[] fenvs; fenvs = NULL; numFEnvsAlloc = numFEnvs = 0; } if (vibenvs) { delete[] vibenvs; vibenvs = NULL; numVibEnvsAlloc = numVibEnvs = 0; } if (pitchenvs) { delete[] pitchenvs; pitchenvs = NULL; numPitchEnvsAlloc = numPitchEnvs = 0; } if (message) { delete[] message; message = NULL; messageBytesAlloc = 0; } // release pattern memory mp_uint32 i; #ifdef MILKYTRACKER for (i = 0; i < 256; i++) #else for (i = 0; i < header.patnum; i++) #endif { if (phead[i].patternData) { delete[] phead[i].patternData; phead[i].patternData = NULL; } } // release sample-memory for (i = 0; i < samplePointerIndex; i++) { if (samplePool[i]) { TXMSample::freePaddedMem(samplePool[i]); samplePool[i] = NULL; } } samplePointerIndex = 0; memset(&header,0,sizeof(TXMHeader)); if (instr) memset(instr,0,sizeof(TXMInstrument)*256); if (smp) memset(smp,0,sizeof(TXMSample)*MP_MAXSAMPLES); if (phead) memset(phead,0,sizeof(TXMPattern)*256); // subsong stuff memset(subSongPositions, 0, sizeof(subSongPositions)); numSubSongs = 0; moduleLoaded = false; return true; } XModule::XModule() { // allocated necessary space for all possible patterns, instruments and samples phead = new TXMPattern[256]; instr = new TXMInstrument[256]; smp = new TXMSample[MP_MAXSAMPLES]; type = ModuleType_NONE; // no module loaded (empty song) moduleLoaded = false; // initialise all sample pointers to NULL memset(samplePool,0,sizeof(samplePool)); // reset current sample index samplePointerIndex = 0; memset(&header,0,sizeof(TXMHeader)); if (instr) memset(instr,0,sizeof(TXMInstrument)*256); if (smp) memset(smp,0,sizeof(TXMSample)*MP_MAXSAMPLES); if (phead) memset(phead,0,sizeof(TXMPattern)*256); // subsong stuff memset(subSongPositions, 0, sizeof(subSongPositions)); numSubSongs = 0; venvs = NULL; numVEnvsAlloc = numVEnvs = 0; penvs = NULL; numPEnvsAlloc = numPEnvs = 0; fenvs = NULL; numFEnvsAlloc = numFEnvs = 0; vibenvs = NULL; numVibEnvsAlloc = numVibEnvs = 0; pitchenvs = NULL; numPitchEnvsAlloc = numPitchEnvs = 0; message = NULL; messageBytesAlloc = 0; } XModule::~XModule() { cleanUp(); delete[] phead; delete[] instr; delete[] smp; } const char* XModule::identifyModule(const mp_ubyte* buffer) { // browse through all available loaders and find suitable LoaderManager loaderManager; TLoaderInfo* loaderInfo; loaderInfo = loaderManager.getFirstLoaderInfo(); while (loaderInfo) { // if loader can identify module return ID const char* id = loaderInfo->loader->identifyModule(buffer); if (id) { return id; } loaderInfo = loaderManager.getNextLoaderInfo(); } return NULL; } mp_sint32 XModule::loadModule(const SYSCHAR* fileName, bool scanForSubSongs/* = false*/) { XMFile f(fileName); return f.isOpen() ? loadModule(f, scanForSubSongs) : -8; } mp_sint32 XModule::loadModule(XMFileBase& f, bool scanForSubSongs/* = false*/) { mp_ubyte buffer[IdentificationBufferSize]; memset(buffer, 0, sizeof(buffer)); f.setBaseOffset(f.pos()); f.read(buffer, 1, sizeof(buffer)); // browse through all available loaders and find suitable LoaderManager loaderManager; TLoaderInfo* loaderInfo; loaderInfo = loaderManager.getFirstLoaderInfo(); while (loaderInfo) { // if loader can identify module take that loader if (loaderInfo->loader->identifyModule(buffer)) { // try to load module f.seekWithBaseOffset(0); mp_sint32 err = loaderInfo->loader->load(f, this); if (err == MP_OK) { moduleLoaded = true; bool res = validate(); if (!res) return MP_OUT_OF_MEMORY; type = loaderInfo->moduleType; if (scanForSubSongs) buildSubSongTable(); } return err; } loaderInfo = loaderManager.getNextLoaderInfo(); } #ifdef MILKYTRACKER return MP_UNKNOWN_FORMAT; #else return MP_UNSPECIFIED; #endif } bool XModule::validate() { if (header.channum == 0) header.channum++; if (header.insnum == 0) header.insnum++; /*for (mp_sint32 i = 0; i < header.ordnum; i++) if (header.ord[i] >= header.patnum) header.ord[i] = 0;*/ // if we're not having any pattern just create an empty dummy pattern if (!header.patnum) { header.patnum++; phead[0].rows = 64; #ifdef MILKYTRACKER phead[0].effnum = 2; #else phead[0].effnum = 1; #endif phead[0].channum = (mp_ubyte)header.channum; phead[0].patternData = new mp_ubyte[phead[0].rows*header.channum*(2+phead[0].effnum*2)]; // out of memory? if (phead[0].patternData == NULL) { return false; } memset(phead[0].patternData,0,phead[0].rows*header.channum*(2+phead[0].effnum*2)); } removeOrderSkips(); if (!header.ordnum) { header.ordnum++; header.ord[0] = 0; } fixEnvelopes(venvs, numVEnvs); fixEnvelopes(penvs, numPEnvs); fixEnvelopes(fenvs, numFEnvs); fixEnvelopes(vibenvs, numVibEnvs); fixEnvelopes(pitchenvs, numPitchEnvs); return true; } void XModule::convertStr(char* strIn, const char* strOut, mp_sint32 nLen, bool filter) { memset(strIn, 0, nLen); mp_sint32 i; for (i = 0; i < nLen; i++) { strIn[i] = strOut[i]; // must be an asciiz string if (strIn[i] == '\0') break; // Filter non-viewable characters if (filter && (strIn[i]<32 || (unsigned)strIn[i]>127)) strIn[i] = 32; } i = nLen-1; while (i>=0 && strIn[i]<=32) i--; i++; strIn[i] = '\0'; } void XModule::getTitle(char* str, bool filter /* = true */) const { if (!moduleLoaded) { memset(str, 0, 33); return; } convertStr(str, (const char*)&header.name, 32, filter); } void XModule::getSignature(char* str, bool filter /* = true */) const { if (!moduleLoaded) { memset(str, 0, 18); return; } convertStr(str, (const char*)&header.sig, 17, filter); } void XModule::getTracker(char* str, bool filter /* = true */) const { if (!moduleLoaded) { memset(str, 0, 33); return; } convertStr(str, (const char*)&header.tracker, 32, filter); } /////////////////////////////////////////////////// // dealing with song messages // /////////////////////////////////////////////////// void XModule::allocateSongMessage(mp_uint32 initialSize/* = 512*/) { if (message) { delete[] message; message = NULL; messageBytesAlloc = 0; } message = new char[initialSize]; if (message) { memset(message, 0, initialSize); messageBytesAlloc = initialSize; } } // add one more line of text to songmessage void XModule::addSongMessageLine(const char* line) { if (!message) { allocateSongMessage(); if (!message) return; } mp_uint32 oSize = (mp_uint32)strlen(message) + 1; mp_uint32 nSize = (mp_uint32)strlen(line) + 1; mp_uint32 size = oSize + nSize + 2; if (size > messageBytesAlloc) { char* tempMessage = new char[size]; if (tempMessage) { memset(tempMessage, 0, size); messageBytesAlloc = size; strcpy(tempMessage, message); delete[] message; message = tempMessage; } else return; } // if this is not the first line in song message, // add CR to the previous line if (strlen(message) != 0) { message[strlen(message)] = 0x0D; message[strlen(message)+1] = '\0'; } strcat(message, line); } // start iterating text lines (get size of line) mp_sint32 XModule::getFirstSongMessageLineLength() { if (message == NULL) return -1; // no song message at all if (*message == '\0') return -1; messagePtr = message; mp_sint32 i = 0; while (messagePtr[i] != 0x0D && messagePtr[i] != '\0') i++; return i; } // get next size text line mp_sint32 XModule::getNextSongMessageLineLength() { if (message == NULL) return -1; // advance to next line first while (*messagePtr != 0x0D && *messagePtr != '\0') messagePtr++; // we reached end of song message if (*messagePtr == '\0') return -1; ASSERT(*messagePtr == 0x0D); // skip CR messagePtr++; mp_sint32 i = 0; while (messagePtr[i] != 0x0D && messagePtr[i] != '\0') i++; return i; } // get line void XModule::getSongMessageLine(char* line) { mp_sint32 i = 0; while (messagePtr[i] != 0x0D && messagePtr[i] != '\0') { line[i] = messagePtr[i]; i++; } line[i] = '\0'; } // search for subsongs void XModule::buildSubSongTable() { if (!moduleLoaded) return; mp_ubyte* positionLookup = new mp_ubyte[header.ordnum*256]; if (positionLookup == NULL) return; memset(positionLookup, 0, header.ordnum*256); // entire song = first subsong, starts at 0 subSongPositions[numSubSongs*2] = 0; subSongPositions[numSubSongs*2+1] = 0; mp_ubyte pbreak = 0; mp_ubyte pbreakpos = 0; mp_ubyte pjump = 0; mp_ubyte pjumppos = 0, pjumprow = 0; mp_sint32 poscnt = 0, rowcnt = 0; mp_sint32 poscntMax = -1; while (true) { bool breakMain = false; while (!breakMain) { /*if (header.ord[poscnt]==254) { while (header.ord[poscnt]==254) { poscnt++; if (poscnt>=header.ordnum) { breakMain = true; break; } } }*/ if (!breakMain) { mp_sint32 ord = header.ord[poscnt]; if (ord < header.patnum) { mp_ubyte* pattern = phead[ord].patternData; mp_sint32 r = rowcnt; mp_sint32 i = poscnt*256+r; if (!positionLookup[i]) positionLookup[i]++; else { subSongPositions[numSubSongs*2+1] = poscntMax; numSubSongs++; breakMain = true; continue; } pbreak = pbreakpos = pjump = pjumppos = pjumprow = 0; for (mp_sint32 c = 0; c < phead[ord].channum; c++) { mp_sint32 slotSize = 2 + 2*phead[ord].effnum; mp_ubyte* slot = pattern + r*phead[ord].channum*slotSize + c*slotSize; for (mp_sint32 e = 0; e < phead[ord].effnum; e++) { mp_ubyte eff = slot[2+e*2]; mp_ubyte eop = slot[2+e*2+1]; switch (eff) { case 0x0B : { pjump = 1; pjumppos = eop; pjumprow = 0; break; } case 0x0D : { pbreak=1; pbreakpos = (eop>>4)*10+(eop&0xf); break; } case 0x0F: { if (eop == 0) { subSongPositions[numSubSongs*2+1] = poscntMax; numSubSongs++; breakMain = true; poscnt++; rowcnt = 0; goto skipChannels; } break; } case SubSongMarkEffect: { if (eop == SubSongMarkOperand) { subSongPositions[numSubSongs*2+1] = poscntMax; numSubSongs++; breakMain = true; continue; } } case 0x2B: { pjump = 1; pjumppos = eop; pjumprow = slot[2+((e+1)%phead[ord].effnum)*2+1]; break; } } } // effects } // channels if (poscnt > poscntMax) poscntMax = poscnt; // player logic // break pattern? if (pbreak&&(poscnt<(header.ordnum-1))) { if (!pjump) poscnt++; rowcnt=pbreakpos-1; } else if (pbreak&&(poscnt==(header.ordnum-1))) { if (!pjump) poscnt=0; rowcnt=pbreakpos-1; } // pattern jump? if (pjump) { if (!pbreak) rowcnt = pjumprow-1; if (pjumppos < header.ordnum) poscnt = pjumppos; } rowcnt++; // make sure we're getting the right pattern, position might // have changed because of position jumps or pattern breaks ord = header.ord[poscnt]; if (rowcnt >= phead[ord].rows) { poscnt++; rowcnt = 0; if (poscnt >= header.ordnum) { poscnt = 0; } } skipChannels:; } else { mp_sint32 i = poscnt*256; memset(positionLookup+i, 1, 256); poscnt++; rowcnt = 0; if (poscnt >= header.ordnum) poscnt = 0; } } } if (numSubSongs >= 256) break; bool allPlayed = true; for (poscnt = 0; poscnt < header.ordnum; poscnt++) { mp_sint32 ord = header.ord[poscnt]; if (ord < header.patnum) { bool played = false; mp_sint32 slotSize = 2 + 2*phead[ord].effnum; for (mp_sint32 i = 0; i < phead[ord].rows; i++) { if (positionLookup[poscnt*256+i]) { played = true; break; } } if (!played) { bool empty = true; mp_sint32 offs = 0; mp_ubyte* pattern = phead[ord].patternData; for (mp_sint32 i = 0; i < phead[ord].rows*phead[ord].channum; i++) { if (pattern[offs]) { empty = false; break; } offs+=slotSize; } if (empty) { memset(positionLookup+poscnt*256, 1, 256); played = true; } } if (!played) { subSongPositions[numSubSongs*2] = poscnt; // make it safe subSongPositions[numSubSongs*2+1] = poscnt; poscntMax = poscnt; //numSubSongs++; rowcnt = 0; allPlayed = false; break; } } } if (allPlayed) break; } delete[] positionLookup; #if 0 if (subSongPositions[(numSubSongs-1)*2+1] < header.ordnum - 1) { numSubSongs++; subSongPositions[(numSubSongs-1)*2] = subSongPositions[(numSubSongs-2)*2+1] + 1; subSongPositions[(numSubSongs-1)*2+1] = header.ordnum - 1; } #endif //subSongPositions[3*2] = 3; //subSongPositions[3*2+1] = 10; //for (mp_sint32 i = 0; i < numSubSongs*2; i++) // printf("%i: %i\n",i,subSongPositions[i]); //printf("\n\n"); mp_sint32 i,j = 0,k = 0; mp_sint32 tempSubSongPositions[256*2]; for (i = 0; i < numSubSongs*2; i++) tempSubSongPositions[i] = subSongPositions[i]; // find subsets of sub songs and merge them for (i = 0; i < numSubSongs; i++) { mp_sint32 start = tempSubSongPositions[i*2]; mp_sint32 end = tempSubSongPositions[i*2+1]; if (start != -1 && end != -1) { for (j = 0; j < numSubSongs; j++) { if (j != i) { if ((start <= tempSubSongPositions[j*2]) && (end >= tempSubSongPositions[j*2+1])) { tempSubSongPositions[j*2] = tempSubSongPositions[j*2+1] = -1; } else if ((start <= tempSubSongPositions[j*2]) && (end >= tempSubSongPositions[j*2])) { end = tempSubSongPositions[j*2+1]; tempSubSongPositions[j*2] = tempSubSongPositions[j*2+1] = -1; } else if ((start <= tempSubSongPositions[j*2+1]) && (end >= tempSubSongPositions[j*2+1])) { start = tempSubSongPositions[j*2]; tempSubSongPositions[j*2] = tempSubSongPositions[j*2+1] = -1; } } } } tempSubSongPositions[i*2] = start; tempSubSongPositions[i*2+1] = end; } // cut out sets which have been merged/replaced for (i = 0; i < numSubSongs; i++) { if ((tempSubSongPositions[i*2] != -1) && (tempSubSongPositions[i*2+1] != -1)) { subSongPositions[k*2] = (mp_ubyte)tempSubSongPositions[i*2]; subSongPositions[k*2+1] = (mp_ubyte)tempSubSongPositions[i*2+1]; k++; } } //printf("subsongs initial: %i, after: %i\n", numSubSongs, k); numSubSongs = k; //for (mp_sint32 i = 0; i < numSubSongs*2; i++) // printf("%i: %i\n",i,subSongPositions[i]); // one subsong is no subsong if (numSubSongs == 1) numSubSongs = 0; } // get subsong pos mp_sint32 XModule::getSubSongPosStart(mp_sint32 i) const { if (i >= 0 && i < numSubSongs) return subSongPositions[i*2]; return 0; } mp_sint32 XModule::getSubSongPosEnd(mp_sint32 i) const { if (i >= 0 && i < numSubSongs) return subSongPositions[i*2+1]; return 0; } // MilkyTracker additions void XModule::createEmptySong(bool clearPatterns/* = true*/, bool clearInstruments/* = true*/, mp_sint32 numChannels/* = 8*/) { moduleLoaded = true; type = ModuleType_XM; mp_uint32 i; if (clearPatterns) { #ifdef MILKYTRACKER for (i = 0; i < 256; i++) #else for (i = 0; i < header.patnum; i++) #endif { if (phead[i].patternData) { delete[] phead[i].patternData; phead[i].patternData = NULL; } } memset(header.ord, 0, sizeof(header.ord)); // song length header.ordnum = 1; header.patnum = 0; header.restart = 0; } if (clearInstruments) { if (venvs) { delete[] venvs; venvs = NULL; numVEnvsAlloc = numVEnvs = 0; } if (penvs) { delete[] penvs; penvs = NULL; numPEnvsAlloc = numPEnvs = 0; } if (fenvs) { delete[] fenvs; fenvs = NULL; numFEnvsAlloc = numFEnvs = 0; } if (vibenvs) { delete[] vibenvs; vibenvs = NULL; numVibEnvsAlloc = numVibEnvs = 0; } if (pitchenvs) { delete[] pitchenvs; pitchenvs = NULL; numPitchEnvsAlloc = numPitchEnvs = 0; } if (message) { delete[] message; message = NULL; messageBytesAlloc = 0; } // release sample-memory for (i = 0; i < samplePointerIndex; i++) { if (samplePool[i]) { TXMSample::freePaddedMem(samplePool[i]); samplePool[i] = NULL; } } samplePointerIndex = 0; if (instr) memset(instr,0,sizeof(TXMInstrument)*256); // some default values please if (smp) { memset(smp,0,sizeof(TXMSample)*MP_MAXSAMPLES); for (i = 0; i < MP_MAXSAMPLES; i++) { smp[i].vol = 0xff; smp[i].pan = 0x80; smp[i].flags = 3; smp[i].volfade = 65535; } } header.insnum = 128; header.smpnum = 128*16; header.volenvnum = 0; header.panenvnum = 0; header.frqenvnum = 0; header.vibenvnum = 0; header.pitchenvnum = 0; } // clear entire song if (clearPatterns && clearInstruments) { memset(&header,0,sizeof(TXMHeader)); header.insnum = 128; header.smpnum = 128*16; header.ordnum = 1; header.patnum = 0; header.restart = 0; header.channum = numChannels; header.freqtab = 1; header.mainvol = 255; // number of patterns header.speed = 125; header.tempo = 6; if (message) { delete[] message; message = NULL; messageBytesAlloc = 0; } setDefaultPanning(); } header.flags = XModule::MODULE_XMNOTECLIPPING | XModule::MODULE_XMARPEGGIO | XModule::MODULE_XMPORTANOTEBUFFER | XModule::MODULE_XMVOLCOLUMNVIBRATO; } void XModule::removeOrderSkips() { mp_sint32 newOrderListReloc[256]; mp_ubyte newOrderList[256]; mp_sint32 i,j; j = 0; for (i = 0; i < header.ordnum; i++) { if (header.ord[i] < header.patnum) { newOrderListReloc[i] = j; newOrderList[j++] = header.ord[i]; } else { newOrderListReloc[i] = -1; } } mp_sint32 newLen = j; for (i = 0; i < header.ordnum; i++) { if (newOrderListReloc[i] == -1) { j = i; mp_sint32 reloc = 0; while (newOrderListReloc[j] == -1 && j < header.ordnum) j++; if (j != header.ordnum) reloc = newOrderListReloc[j]; newOrderListReloc[i] = reloc; } } for (i = 0; i < header.patnum; i++) { if (phead[i].patternData) { mp_ubyte* data = phead[i].patternData; mp_sint32 slotSize = phead[i].effnum * 2 + 2; mp_sint32 patternSize = phead[i].channum * phead[i].rows; for (j = 0; j < patternSize; j++) { mp_ubyte* ptr = data+j*slotSize+2; for (mp_sint32 e = 0; e < phead[i].effnum; e++) { if (ptr[e*2] == 0x0B && ptr[e*2+1] < header.ordnum) { ptr[e*2+1] = newOrderListReloc[ptr[e*2+1]]; } } } } } header.ordnum = newLen; memset(header.ord, 0, sizeof(header.ord)); memcpy(header.ord, newOrderList, newLen); } mp_sint32 XModule::removeUnusedPatterns(bool evaluate) { if (!header.patnum) return 0; mp_sint32 i,j; mp_ubyte* bitMap = new mp_ubyte[header.patnum]; memset(bitMap, 0, sizeof(mp_ubyte)*header.patnum); mp_sint32 numUsedPatterns = 0; for (i = 0; i < header.ordnum; i++) { j = header.ord[i]; // this must *should* be always the case if (j < header.patnum && !bitMap[j]) { bitMap[j] = 1; numUsedPatterns++; } } if (!numUsedPatterns || numUsedPatterns == header.patnum) { delete[] bitMap; return 0; } mp_sint32 result = abs(header.patnum - numUsedPatterns); if (evaluate) { delete[] bitMap; return result; } mp_sint32* patRelocTable = new mp_sint32[header.patnum]; for (i = 0, j = 0; i < header.patnum; i++) { if (bitMap[i]) { patRelocTable[i] = j++; } } TXMPattern* tempPHeads = new TXMPattern[header.patnum]; memcpy(tempPHeads, phead, header.patnum*sizeof(TXMPattern)); memset(phead, 0, header.patnum*sizeof(TXMPattern)); for (i = 0; i < header.patnum; i++) { if (bitMap[i]) { j = patRelocTable[i]; phead[j] = tempPHeads[i]; } else { delete[] tempPHeads[i].patternData; tempPHeads[i].patternData = NULL; } } for (i = 0; i < header.ordnum; i++) { header.ord[i] = (mp_ubyte)patRelocTable[header.ord[i]]; } delete[] tempPHeads; delete[] patRelocTable; delete[] bitMap; header.patnum = numUsedPatterns; return result; } void XModule::postLoadAnalyser() { mp_sint32 i,r,c; bool oldPTProbability = false; for (i = 0; i < header.patnum; i++) { if (phead[i].patternData) { mp_ubyte* data = phead[i].patternData; mp_sint32 slotSize = phead[i].effnum * 2 + 2; mp_sint32 rowSize = slotSize * phead[i].channum; for (c = 0; c < phead[i].channum; c++) { mp_sint32 insCycleCounter = 0; mp_sint32 lastCycleIns = -1; mp_sint32 lastIns = -1; bool hasCycled = false; for (r = 0; r < phead[i].rows; r++) { mp_ubyte* slot = data + r*rowSize + c*slotSize; if (!oldPTProbability) { if (slot[1] && !slot[0] && (mp_sint32)slot[1] != lastCycleIns) { insCycleCounter++; hasCycled = true; lastCycleIns = slot[1]; } else if (slot[1] && slot[0] && hasCycled) { insCycleCounter = 0; hasCycled = false; lastCycleIns = -1; } if (insCycleCounter >= 3 && hasCycled) { #ifdef VERBOSE printf("pattern:%i, channel:%i, row:%i\n",i,c,r); #endif oldPTProbability = true; } // another try: if (lastIns != -1) { if (slot[0] && slot[1] && (slot[1] != lastIns) && (slot[2] == 0x03 || slot[2] == 0x05)) { #ifdef VERBOSE printf("pattern:%i, channel:%i, row:%i\n",i,c,r); #endif oldPTProbability = true; } } } if (slot[1]) lastIns = slot[1]; } } } } if (oldPTProbability) header.flags |= MODULE_OLDPTINSTRUMENTCHANGE; #ifdef VERBOSE printf("%s: %i\n", header.name, oldPTProbability); #endif } void XModule::convertXMVolumeEffects(mp_ubyte vol, mp_ubyte& effect, mp_ubyte& operand) { effect = 0; operand = 0; if (vol>=0x10&&vol<=0x50) { effect = 0x0C; operand = XModule::vol64to255(vol-0x10); } if (vol>=0x60) { mp_ubyte eff = vol>>4; mp_ubyte op = vol&0xf; /*printf("%x, %x\r\n",eff,op); getch();*/ if (op) { switch (eff) { case 0x6 : { effect=0x0A; operand=op; }; break; case 0x7 : { effect=0x0A; operand=op<<4; }; break; case 0x8 : { effect=0x3B; operand=op; }; break; case 0x9 : { effect=0x3A; operand=op; }; break; case 0xA : { effect=0x4; operand=op<<4; }; break; case 0xB : { effect=0x4; operand=op; }; break; case 0xC : { effect=0x8; operand=(mp_ubyte)XModule::pan15to255(op); }; break; case 0xD : { effect=0x19; operand=op; }; break; case 0xE : { effect=0x19; operand=op<<4; }; break; case 0xF : { effect=0x3; operand=op<<4; }; break; } } else { switch (eff) { case 0xB : { effect=0x4; operand=op; }; break; case 0xC : { effect=0x8; operand=(mp_ubyte)XModule::pan15to255(op); }; break; case 0xF : { effect=0x3; operand=op; }; break; } } } } XModule::IsPTCompatibleErrorCodes XModule::isPTCompatible() { mp_sint32 i; // step 1: linear frequencies are used if (header.freqtab & 1) return IsPTCompatibleErrorCodeLinearFrequencyUsed; // step 2: find last used instrument, if greater than 31 => too many samples mp_sint32 insNum = header.insnum; for (i = header.insnum - 1; i > 0; i--) { mp_ubyte buffer[MP_MAXTEXT+1]; convertStr(reinterpret_cast(buffer), reinterpret_cast(instr[i].name), MP_MAXTEXT, false); if (strlen((char*)buffer)) { insNum = i+1; break; } if (instr[i].samp) { mp_sint32 lasts = -1; #ifdef MILKYTRACKER for (mp_sint32 j = 0; j < 96; j++) #else for (mp_sint32 j = 0; j < 120; j++) #endif { mp_sint32 s = instr[i].snum[j]; if (lasts != -1 && s != lasts) return IsPTCompatibleErrorCodeIncompatibleInstruments; lasts = s; if (s >= 0) { convertStr(reinterpret_cast(buffer), reinterpret_cast(smp[s].name), MP_MAXTEXT, false); if (strlen((char*)buffer) || (smp[s].sample && smp[s].samplen)) { insNum = i+1; goto insFound; } } } } } insFound: if (i == 0) insNum = 1; if (insNum > 31) return IsPTCompatibleErrorCodeTooManyInstruments; // step 3: incompatible samples for (i = 0; i < MP_MAXSAMPLES; i++) { if (smp[i].samplen >= 0xffff || (smp[i].samplen && ((smp[i].type & 16) || (smp[i].type & 3) == 2 || smp[i].relnote || smp[i].pan != 0x80))) return IsPTCompatibleErrorCodeIncompatibleSamples; if (smp[i].venvnum) { if (venvs[smp[i].venvnum-1].type & 1) return IsPTCompatibleErrorCodeIncompatibleInstruments; } if (smp[i].penvnum) { if (penvs[smp[i].penvnum-1].type & 1) return IsPTCompatibleErrorCodeIncompatibleInstruments; } if (smp[i].vibdepth && smp[i].vibrate) return IsPTCompatibleErrorCodeIncompatibleInstruments; } // step 4: incompatible patterns for (i = 0; i < header.patnum; i++) { mp_sint32 slotSize = phead[i].effnum * 2 + 2; mp_sint32 rowSizeSrc = slotSize*phead[i].channum; if (phead[i].rows != 64) return IsPTCompatibleErrorCodeIncompatiblePatterns; for (mp_sint32 r = 0; r < phead[i].rows; r++) for (mp_sint32 c = 0; c < header.channum; c++) { if (c < phead[i].channum) { mp_ubyte* src = phead[i].patternData + r*rowSizeSrc+c*slotSize; // check note range mp_ubyte note = *src; if (note) { note--; if (!(note >= 36 && note < 36+12*3)) return IsPTCompatibleErrorCodeIncompatiblePatterns; } // check volume command mp_ubyte eff = *(src+2); if (eff) return IsPTCompatibleErrorCodeIncompatiblePatterns; // check for normal commands eff = *(src+4); if (eff > 0xF && (eff < 0x30 || eff >=0x3F) && eff != 0x20) return IsPTCompatibleErrorCodeIncompatiblePatterns; } } } return IsPTCompatibleErrorCodeNoError; } MilkyTracker-1.02.00/src/milkyplay/XModule.h000066400000000000000000000541531324432207300206130ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * XModule.h * MilkyPlay * * */ #ifndef __XMODULE_H__ #define __XMODULE_H__ #include "XMFile.h" #define MP_MAXTEXT 32 #define MP_MAXORDERS 256 struct TXMHeader { char sig[17]; char name[MP_MAXTEXT]; char whythis1a; char tracker[MP_MAXTEXT]; mp_uword ver; mp_uint32 hdrsize; mp_uword ordnum; mp_uword restart; mp_uword channum; mp_uword patnum; mp_uword insnum; mp_uword smpnum; // additional: number of samples in tune mp_uword volenvnum; // additional: number of volume envelopes mp_uword panenvnum; // additional: number of panning envelopes mp_uword frqenvnum; // additional: number of frequency envelopes (MDL) mp_uword vibenvnum; // additional: number of vibrato envelopes (AMS) mp_uword pitchenvnum; // additional: number of pitch envelopes (IT) mp_uword freqtab; mp_ubyte uppernotebound; // additional: note limit if not zero mp_sbyte relnote; // additional: semitone adjust value mp_dword flags; // additional: some flags mp_uword tempo; mp_uword speed; mp_uword mainvol; mp_ubyte ord[MP_MAXORDERS]; mp_ubyte pan[256]; }; // ** BEWARE :) ** // the order of the different elements concerning the envelope info // is not like in the xm format struct TEnvelope { mp_uword env[256][2]; mp_ubyte num,sustain,susloope,loops,loope,type,speed; }; struct TXMInstrument { enum Flags { IF_ITNOTEREMAPPING = 0x01, IF_ITFADEOUT = 0x02, IF_ITENVELOPES = 0x04, IF_ITGOBALINSVOL = 0x08 }; mp_uint32 size; char name[MP_MAXTEXT]; char type; mp_uword samp; mp_uint32 shsize; mp_sword snum[120]; // -1 is an invalid/empty sample mp_uword flags; // not in .XM => from myself // Also holds NNA (bit 4-5), DCT (bit 6-7), DCA (bit 8-9) mp_ubyte notemap[120]; // Impulse Tracker addition mp_uword volfade; // Impulse Tracker addition mp_uword venvnum; // Impulse Tracker envelopes can't be sample-based (different envelopes can map to the same sample) ... mp_uword penvnum; // ... (only when IF_ITENVELOPES flag is set) mp_uword fenvnum; mp_uword vibenvnum; mp_uword pitchenvnum; // IT pitch envelope mp_uword res; // when bit 3 (= 8) of flags is set, take this as global instrument vol (Impulse Tracker) mp_ubyte ifc; // IT Initial Filter cutoff mp_ubyte ifr; // IT Initial Filter resonance //char extra[20]; }; // some words about the samples: // although the sample buffer is freely available for acess, I would not recommend // accessing it directly if you don't exactly know what you are doing because // to avoid sample clicks when looping samples, it uses a tricky double buffering // technique between smoothed out sample loop areas and the original sample data // If you need to modify sample data yourself, use the provided methods // getSampleValue and setSampleValue and call postProcessSamples when you're done // modifying the sample, so the loop information is updated correctly // Also call postProcessSamples when you're changing the loop information struct TXMSample { private: struct TLoopDoubleBuffProps { enum { StateUnused, StateUsed, StateDirty, }; mp_uint32 samplesize; mp_ubyte state[4]; mp_uint32 lastloopend; }; enum { LoopAreaBackupSize = 4, LoopAreaBackupSizeMaxInBytes = 8, EmptySize = 8, LeadingPadding = sizeof(TLoopDoubleBuffProps) + LoopAreaBackupSizeMaxInBytes + EmptySize, TrailingPadding = 16, PaddingSpace = LeadingPadding+TrailingPadding }; void restoreLoopArea(); public: mp_uint32 samplen; mp_uint32 loopstart; mp_uint32 looplen; mp_ubyte flags; // Bit 0: Use volume // Bit 1: Use panning // Bit 2: Use sample volume as channel global volume (.PLM modules) // Bit 3: Use the res field as global sample volume // Bit 4: Use IT style auto vibrato (not implemented yet) mp_ubyte vol; mp_sbyte finetune; mp_ubyte type; // In Addition to XM: Bit 5: One shot forward looping sample (MOD backward compatibility) mp_ubyte pan; mp_sbyte relnote; mp_uword venvnum; mp_uword penvnum; mp_uword fenvnum; mp_uword vibenvnum; mp_uword pitchenvnum; mp_ubyte vibtype, vibsweep, vibdepth, vibrate; mp_uword volfade; mp_ubyte res; // when bit 3 (= 8) of flags is set, take this as global sample vol (Impulse Tracker) mp_sword freqadjust; char name[MP_MAXTEXT]; mp_ubyte terminate; mp_sbyte* sample; static mp_uint32 getPaddedSize(mp_uint32 size) { return size+TXMSample::PaddingSpace; } static mp_ubyte* getPadStartAddr(mp_ubyte* mem) { return mem-TXMSample::LeadingPadding; } static mp_ubyte* allocPaddedMem(mp_uint32 size) { mp_ubyte* result = new mp_ubyte[getPaddedSize(size)]; if (result == NULL) return NULL; // clear out padding space memset(result, 0, TXMSample::LeadingPadding); memset(result+size+TXMSample::LeadingPadding, 0, TXMSample::TrailingPadding); TLoopDoubleBuffProps* loopBufferProps = (TLoopDoubleBuffProps*)result; loopBufferProps->samplesize = size; return result + TXMSample::LeadingPadding; } static void freePaddedMem(mp_ubyte* mem) { // behave safely on NULL if (mem == NULL) return; delete[] getPadStartAddr(mem); } static void copyPaddedMem(void* dst, const void* src, mp_uint32 size) { mp_ubyte* _src = ((mp_ubyte*)src) - TXMSample::LeadingPadding; mp_ubyte* _dst = ((mp_ubyte*)dst) - TXMSample::LeadingPadding; memcpy(_dst, _src, getPaddedSize(size)); } static mp_uint32 getSampleSizeInBytes(mp_ubyte* mem) { TLoopDoubleBuffProps* loopBufferProps = (TLoopDoubleBuffProps*)getPadStartAddr(mem); return loopBufferProps->samplesize; } static mp_uint32 getSampleSizeInSamples(mp_ubyte* mem) { TLoopDoubleBuffProps* loopBufferProps = (TLoopDoubleBuffProps*)getPadStartAddr(mem); return (loopBufferProps->state[1] & 16) ? (loopBufferProps->samplesize >> 1) : loopBufferProps->samplesize; } void smoothLooping(); void restoreOriginalState(); void postProcessSamples(); // get sample value // values range from [-32768,32767] in case of a 16 bit sample // or from [-128,127] in case of an 8 bit sample mp_sint32 getSampleValue(mp_uint32 index); mp_sint32 getSampleValue(mp_ubyte* sample, mp_uint32 index); void setSampleValue(mp_uint32 index, mp_sint32 value); void setSampleValue(mp_ubyte* sample, mp_uint32 index, mp_sint32 value); #ifdef MILKYTRACKER bool equals(const TXMSample& sample) const { if (this->sample != sample.sample) return false; if (samplen != sample.samplen) return false; return true; } bool isMinimizable() const { return (loopstart + looplen < samplen && (type & 3)); } #endif friend class XModule; }; struct TXMPattern { mp_uint32 len; mp_ubyte ptype; mp_uword rows; mp_ubyte effnum; mp_ubyte channum; mp_uword patdata; mp_ubyte* patternData; mp_sint32 compress(mp_ubyte* dest) const; mp_sint32 decompress(mp_ubyte* src, mp_sint32 len); #ifdef MILKYTRACKER bool saveExtendedPattern(const SYSCHAR* fileName) const; bool loadExtendedPattern(const SYSCHAR* fileName); bool saveExtendedTrack(const SYSCHAR* fileName, mp_uint32 channel) const; bool loadExtendedTrack(const SYSCHAR* fileName, mp_uint32 channel); const TXMPattern& operator=(const TXMPattern& src); #endif }; ////////////////////////////////////////////////////////////////////////// // This is the class which handles a MilkyPlay module // ////////////////////////////////////////////////////////////////////////// class XModule { public: enum { IdentificationBufferSize = 2048, }; /////////////////////////////////////////////////////// // this is our loader interface (abstract class) // // each loader has to conform to this interface // /////////////////////////////////////////////////////// class LoaderInterface { public: // make GCC shut up virtual ~LoaderInterface() { } // returns c-string which identifies the module, NULL if loader can't identify module // IMPORTANT: buffer MUST contain eIdentifyBufferSize bytes of the beginning of the file virtual const char* identifyModule(const mp_ubyte* buffer) = 0; // try to load module (check with identifyModule first) virtual mp_sint32 load(XMFileBase& f, XModule* module) = 0; }; enum ModuleTypes { ModuleType_UNKNOWN, ModuleType_669, ModuleType_AMF, ModuleType_AMS, ModuleType_CBA, ModuleType_DBM, ModuleType_DIGI, ModuleType_DSM, ModuleType_DSm, ModuleType_DTM_1, ModuleType_DTM_2, ModuleType_FAR, ModuleType_GDM, ModuleType_GMC, ModuleType_IMF, ModuleType_IT, ModuleType_MDL, ModuleType_MOD, ModuleType_MTM, ModuleType_MXM, ModuleType_OKT, ModuleType_PLM, ModuleType_PSM, ModuleType_PTM, ModuleType_S3M, ModuleType_STM, ModuleType_SFX, ModuleType_UNI, ModuleType_ULT, ModuleType_XM, ModuleType_NONE = -1, }; class SampleLoader { protected: XMFileBase& f; public: SampleLoader(XMFileBase& file) : f(file) { } virtual ~SampleLoader() { } virtual mp_sint32 load_sample_8bits(void* p_dest_buffer, mp_sint32 compressedSize, mp_sint32 p_buffsize) = 0; virtual mp_sint32 load_sample_16bits(void* p_dest_buffer, mp_sint32 compressedSize, mp_sint32 p_buffsize) = 0; }; private: struct TLoaderInfo { LoaderInterface* loader; ModuleTypes moduleType; }; public: enum { ST_DEFAULT = 0x00, ST_DELTA = 0x01, ST_UNSIGNED = 0x02, ST_16BIT = 0x04, ST_PACKING_MDL = 0x08, ST_DELTA_PTM = 0x10, ST_BIGENDIAN = 0x20, ST_PACKING_IT = 0x40, ST_PACKING_IT215 = 0x80, ST_PACKING_ADPCM = 0x100 }; static const mp_sint32 periods[12]; static const mp_sint32 sfinetunes[16]; static const mp_sbyte modfinetunes[16]; static const mp_ubyte numValidXMEffects; static const mp_ubyte validXMEffects[]; ////////////////////////////////////////////////////////////////////////// // different stuff for importing different module types into own format // ////////////////////////////////////////////////////////////////////////// static mp_sint32 FixedMUL(mp_sint32 a,mp_sint32 b) { return ((mp_sint32)(((mp_int64)(a)*(mp_int64)(b))>>16)); } /////////////////////////////////////////////////////// // convert relative note + finetune into C4 speed // /////////////////////////////////////////////////////// static mp_sint32 getc4spd(mp_sint32 relnote, mp_sint32 finetune); /////////////////////////////////////////////////////// // convert C4 speed into relative note + finetune // /////////////////////////////////////////////////////// static void convertc4spd(mp_uint32 c4spd, mp_sbyte* finetune, mp_sbyte* relnote); static mp_uint32 amigaPeriodToNote(mp_uint32 period); /////////////////////////////////////////////////////// // load sample into memory // /////////////////////////////////////////////////////// static bool loadSample(XMFileBase& f, void* buffer, mp_uint32 size, mp_uint32 length, mp_sint32 flags = ST_DEFAULT); /////////////////////////////////////////////////////// // load a bunch of samples into memory // /////////////////////////////////////////////////////// mp_sint32 loadModuleSample(XMFileBase& f, mp_sint32 index, mp_sint32 flags8 = ST_DEFAULT, mp_sint32 flags16 = ST_16BIT, mp_uint32 alternateSize = 0); mp_sint32 loadModuleSamples(XMFileBase& f, mp_sint32 flags8 = ST_DEFAULT, mp_sint32 flags16 = ST_16BIT); static void convertXMVolumeEffects(mp_ubyte volume, mp_ubyte& eff, mp_ubyte& op); /////////////////////////////////////////////////////// // Allocate sample memory and store pointer in pool // // *Note* that this memory is always padded with 16 // // bytes at the start *AND* 16 bytes at the end. // /////////////////////////////////////////////////////// mp_ubyte* allocSampleMem(mp_uint32 size); /////////////////////////////////////////////////////// // Free sample memory /////////////////////////////////////////////////////// void freeSampleMem(mp_ubyte* mem, bool assertCheck = true); #ifdef MILKYTRACKER void insertSamplePtr(mp_ubyte* ptr); void removeSamplePtr(mp_ubyte* ptr); #endif /////////////////////////////////////////////////////// // Clean up! (Is called before loading a song) // /////////////////////////////////////////////////////// bool cleanUp(); /////////////////////////////////////////////////////// // scan through samples and post process to avoid // // interpolation clicks // /////////////////////////////////////////////////////// void postProcessSamples(bool heavy = false); /////////////////////////////////////////////////////// // set default panning // /////////////////////////////////////////////////////// void setDefaultPanning(); private: // Identify module ModuleTypes type; // Indicates whether a file is loaded or if it's just an empty song bool moduleLoaded; // each module comes with it's own sample-memory management (MILKYPLAY_MAXSAMPLES samples max.) mp_ubyte* samplePool[MP_MAXSAMPLES]; mp_uint32 samplePointerIndex; // song message retrieving char* messagePtr; // subsong position table mp_ubyte subSongPositions[256*2]; mp_sint32 numSubSongs; // add nother envelope to a given list and increase size of array if necessary static bool addEnvelope(TEnvelope*& envs,const TEnvelope& env,mp_uint32& numEnvsAlloc,mp_uint32& numEnvs); // fix broken envelopes (1 point envelope for example) static void fixEnvelopes(TEnvelope* envs, mp_uint32 numEnvs); // holds available loader instances class LoaderManager { private: TLoaderInfo* loaders; mp_uint32 numLoaders; mp_uint32 numAllocatedLoaders; mp_sint32 iteratorCounter; void registerLoader(LoaderInterface* loader, ModuleTypes type); public: LoaderManager(); ~LoaderManager(); TLoaderInfo* getFirstLoaderInfo(); TLoaderInfo* getNextLoaderInfo(); }; friend class LoaderManager; bool validate(); public: // Module flags enum { MODULE_OLDS3MVOLSLIDES = 1, MODULE_ST3NOTECUT = 2, MODULE_ST3DUALCOMMANDS = 4, MODULE_STMARPEGGIO = 8, MODULE_XMARPEGGIO = 16, MODULE_XMVOLCOLUMNVIBRATO = 32, MODULE_XMNOTECLIPPING = 64, MODULE_XMPORTANOTEBUFFER = 128, MODULE_AMSENVELOPES = 256, MODULE_PTNEWINSTRUMENT = 512, MODULE_ST3NEWINSTRUMENT = 1024, MODULE_OLDPTINSTRUMENTCHANGE = 2048, MODULE_ITNOTEOFF = 4096, MODULE_ITNEWEFFECTS = 8192, MODULE_ITNEWGXX = 16384, MODULE_ITLINKPORTAMEM = 32768, MODULE_ITTEMPOSLIDE = 65536, }; enum { NOTE_LAST = 120, NOTE_OFF = 121, NOTE_CUT = 122, NOTE_FADE = 123, SubSongMarkEffect = 0x1E, SubSongMarkOperand = 0xFF, }; TXMHeader header; // module header TXMInstrument* instr; // all instruments (256 of them) TXMSample* smp; // all samples (256 of them, only 255 can be used) TXMPattern* phead; // all pattern headers (256 of them) mp_uint32 messageBytesAlloc; char* message; // song message TEnvelope* venvs; mp_uint32 numVEnvsAlloc; mp_uint32 numVEnvs; // should be equal to header.venvnum bool addVolumeEnvelope(const TEnvelope& env) { return addEnvelope(venvs, env, numVEnvsAlloc, numVEnvs); } TEnvelope* penvs; mp_uint32 numPEnvsAlloc; mp_uint32 numPEnvs; // should be equal to header.penvnum bool addPanningEnvelope(const TEnvelope& env) { return addEnvelope(penvs, env, numPEnvsAlloc, numPEnvs); } TEnvelope* fenvs; mp_uint32 numFEnvsAlloc; mp_uint32 numFEnvs; // should be equal to header.fenvnum bool addFrequencyEnvelope(const TEnvelope& env) { return addEnvelope(fenvs, env, numFEnvsAlloc, numFEnvs); } TEnvelope* vibenvs; mp_uint32 numVibEnvsAlloc; mp_uint32 numVibEnvs; // should be equal to header.vibenvnum bool addVibratoEnvelope(TEnvelope& env) { return addEnvelope(vibenvs, env, numVibEnvsAlloc, numVibEnvs); } TEnvelope* pitchenvs; mp_uint32 numPitchEnvsAlloc; mp_uint32 numPitchEnvs; // should be equal to header.vibenvnum bool addPitchEnvelope(TEnvelope& env) { return addEnvelope(pitchenvs, env, numPitchEnvsAlloc, numPitchEnvs); } /////////////////////////////////////////////////////// // convert volume from range [0..64] to [0..255] // /////////////////////////////////////////////////////// static mp_sint32 vol64to255(mp_sint32 vol) { return ((vol>64?64:vol)*261120+65535)>>16; } /////////////////////////////////////////////////////// // convert volume from range [0..255] to [0..64] // /////////////////////////////////////////////////////// static mp_uint32 vol255to64(mp_uint32 vol) { return (vol*64)/255; } /////////////////////////////////////////////////////// // convert volume from range [0..127] to [0..255] // /////////////////////////////////////////////////////// static mp_sint32 vol127to255(mp_sint32 vol) { return ((vol>127?127:vol)*131588+65535)>>16; } /////////////////////////////////////////////////////// // convert volume from range [0..128] to [0..255] // /////////////////////////////////////////////////////// static mp_sint32 vol128to255(mp_sint32 vol) { return ((vol>128?128:vol)*130560+65535)>>16; } static mp_sint32 pan15to255(mp_sint32 pan) { return pan>=0xF?0xFF:(pan<<4); } /////////////////////////////////////////////////// // Allocate necessary memory for song structures // /////////////////////////////////////////////////// XModule(); /////////////////////////////////////////////////// // Clean up // /////////////////////////////////////////////////// ~XModule(); /////////////////////////////////////////////////// // Get type of module // /////////////////////////////////////////////////// ModuleTypes getType() const { return type; } /////////////////////////////////////////////////// // identify module type // // IMPORTANT: buffer MUST contain // // eIdentifyBufferSize bytes from the beginning // // of the file // /////////////////////////////////////////////////// static const char* identifyModule(const mp_ubyte* buffer); /////////////////////////////////////////////////// // generic module loader // /////////////////////////////////////////////////// mp_sint32 loadModule(XMFileBase& f, bool scanForSubSongs = false); mp_sint32 loadModule(const SYSCHAR* fileName, bool scanForSubSongs = false); /////////////////////////////////////////////////// // Module exporters // /////////////////////////////////////////////////// mp_sint32 saveExtendedModule(const SYSCHAR* fileName); // FT2 (.XM) mp_sint32 saveProtrackerModule(const SYSCHAR* fileName); // Protracker compatible (.MOD) /////////////////////////////////////////////////// // module loaded? // /////////////////////////////////////////////////// bool isModuleLoaded() const { return moduleLoaded; } /////////////////////////////////////////////////// // string processing // /////////////////////////////////////////////////// static void convertStr(char* strIn, const char* strOut, mp_sint32 nLen, bool filter = true); void getTitle(char* str, bool filter = true) const; void getSignature(char* str, bool filter = true) const; void getTracker(char* str, bool filter = true) const; /////////////////////////////////////////////////// // dealing with song message // /////////////////////////////////////////////////// // allocate empty song message void allocateSongMessage(mp_uint32 initialSize = 512); // add one more line of text to the song message void addSongMessageLine(const char* line); // start iterating text lines (get size of line) mp_sint32 getFirstSongMessageLineLength(); // get next size text line mp_sint32 getNextSongMessageLineLength(); // get line void getSongMessageLine(char* line); void buildSubSongTable(); mp_sint32 getNumSubSongs() const { return numSubSongs; } mp_sint32 getSubSongPosStart(mp_sint32 i) const; mp_sint32 getSubSongPosEnd(mp_sint32 i) const; /////////////////////////////////////////////////// // various post processing and analyzing // /////////////////////////////////////////////////// // Remove stupid empty = 0xFE orders void removeOrderSkips(); // Remove unused patterns mp_sint32 removeUnusedPatterns(bool evaluate); // these are located in ExporterXM.cpp mp_sint32 getNumUsedPatterns(); mp_sint32 getNumUsedInstruments(); // Analyse various things, for example if there is an old Protracker instrument change void postLoadAnalyser(); // MilkyTracker additions void createEmptySong(bool clearPatterns = true, bool clearInstruments = true, mp_sint32 numChannels = 8); enum IsPTCompatibleErrorCodes { IsPTCompatibleErrorCodeNoError = 0, IsPTCompatibleErrorCodeTooManyInstruments, IsPTCompatibleErrorCodeLinearFrequencyUsed, IsPTCompatibleErrorCodeIncompatibleSamples, IsPTCompatibleErrorCodeIncompatibleInstruments, IsPTCompatibleErrorCodeIncompatiblePatterns }; IsPTCompatibleErrorCodes isPTCompatible(); }; #endif MilkyTracker-1.02.00/src/milkyplay/computed-blep.h000066400000000000000000001471471324432207300220040ustar00rootroot00000000000000/* * This file taken from version 2.09 of the uade source code. * * Table generated by contrib/sinc-integral.py. */ #define WINSINCSIZE 2048 // this used to be a 2d array, but due to some stupid GCC bug I've // crunched it into a 1d array and did the 2d lookup manually static const int winsinc_integral[5*WINSINCSIZE] = { 131072,131072,131072,131072,131072,131072,131072,131072,131072,131072,131072, 131071,131071,131071,131071,131071,131071,131071,131071,131071,131071,131071,131070, 131070,131070,131070,131070,131069,131069,131069,131069,131068,131068,131067,131067, 131066,131066,131065,131065,131064,131063,131062,131062,131061,131060,131058,131057, 131056,131055,131053,131051,131050,131048,131046,131043,131041,131039,131036,131033, 131030,131027,131023,131019,131016,131011,131007,131002,130997,130992,130986,130980, 130973,130967,130959,130952,130944,130935,130926,130917,130907,130896,130885,130873, 130861,130848,130835,130820,130805,130789,130773,130756,130737,130718,130698,130677, 130655,130633,130609,130584,130557,130530,130502,130472,130441,130408,130375,130339, 130303,130265,130225,130184,130141,130096,130050,130002,129952,129900,129846,129790, 129732,129672,129609,129545,129478,129409,129337,129263,129186,129107,129025,128940, 128852,128762,128669,128572,128473,128370,128264,128155,128043,127927,127807,127684, 127558,127428,127293,127156,127014,126868,126718,126564,126406,126243,126076,125905, 125729,125549,125364,125174,124980,124780,124576,124367,124152,123933,123708,123478, 123243,123002,122756,122505,122247,121985,121716,121442,121162,120876,120584,120286, 119982,119672,119356,119033,118705,118370,118029,117682,117328,116967,116601,116228, 115848,115462,115069,114670,114264,113851,113432,113006,112573,112134,111688,111236, 110777,110311,109838,109359,108874,108381,107882,107377,106865,106346,105821,105290, 104752,104208,103657,103100,102537,101968,101392,100811,100224,99630,99031,98426, 97816,97199,96578,95950,95318,94680,94037,93389,92736,92079,91416,90749,90077,89401, 88721,88037,87348,86656,85960,85260,84557,83851,83141,82429,81713,80995,80274,79551, 78826,78098,77369,76638,75905,75171,74435,73699,72961,72223,71484,70745,70006,69266, 68527,67788,67050,66312,65576,64840,64106,63373,62641,61912,61184,60459,59736,59015, 58297,57582,56871,56162,55457,54755,54058,53364,52674,51989,51308,50632,49960,49294, 48632,47976,47325,46680,46041,45407,44780,44158,43543,42934,42332,41737,41148,40566, 39991,39424,38863,38310,37765,37227,36696,36173,35659,35152,34652,34161,33678,33204, 32737,32279,31828,31387,30953,30528,30112,29704,29304,28913,28530,28155,27790,27432, 27083,26743,26411,26087,25772,25465,25166,24875,24593,24318,24052,23794,23543,23300, 23066,22838,22619,22406,22202,22004,21814,21631,21454,21285,21122,20966,20816,20673, 20536,20404,20279,20160,20046,19938,19835,19738,19645,19558,19475,19396,19322,19253, 19187,19126,19068,19014,18963,18915,18871,18830,18791,18755,18721,18690,18661,18633, 18608,18584,18561,18540,18520,18501,18483,18465,18448,18431,18414,18398,18381,18364, 18347,18329,18310,18291,18270,18249,18226,18203,18177,18150,18122,18092,18060,18026, 17990,17951,17911,17868,17823,17775,17725,17672,17617,17559,17498,17434,17368,17298, 17226,17150,17072,16990,16906,16818,16727,16634,16537,16437,16334,16228,16119,16007, 15892,15774,15653,15529,15403,15273,15141,15006,14868,14728,14585,14440,14293,14143, 13990,13836,13680,13521,13361,13198,13035,12869,12702,12533,12363,12192,12019,11846, 11671,11496,11320,11143,10966,10789,10611,10433,10255,10076,9898,9721,9543,9367,9190, 9015,8840,8666,8493,8322,8151,7982,7814,7648,7484,7321,7160,7002,6845,6690,6537, 6387,6239,6094,5951,5811,5673,5538,5406,5277,5151,5027,4907,4790,4676,4565,4458, 4354,4253,4155,4061,3970,3882,3798,3718,3640,3567,3496,3430,3366,3306,3250,3197, 3147,3100,3057,3018,2981,2948,2918,2892,2868,2847,2830,2815,2804,2795,2789,2786, 2785,2787,2792,2799,2809,2820,2834,2851,2869,2889,2911,2935,2961,2988,3017,3048, 3079,3113,3147,3182,3218,3256,3294,3332,3372,3412,3452,3493,3534,3575,3616,3657, 3698,3739,3780,3820,3860,3899,3937,3975,4012,4048,4083,4118,4151,4183,4213,4243, 4271,4297,4323,4346,4368,4389,4407,4424,4440,4453,4465,4474,4482,4488,4492,4494, 4494,4491,4487,4481,4472,4462,4449,4435,4418,4399,4378,4355,4330,4303,4274,4243, 4210,4176,4139,4100,4060,4017,3973,3927,3880,3831,3780,3728,3674,3619,3562,3504, 3445,3384,3323,3260,3196,3132,3066,2999,2932,2864,2796,2727,2657,2587,2516,2446, 2375,2304,2232,2161,2090,2019,1948,1878,1807,1738,1668,1599,1531,1464,1397,1331, 1266,1201,1138,1076,1015,954,896,838,782,726,673,620,570,520,473,426,382,339,297, 258,220,184,149,116,86,56,29,4,-20,-42,-62,-80,-96,-111,-123,-134,-143,-151,-156, -160,-162,-162,-161,-158,-153,-147,-139,-130,-119,-107,-93,-78,-61,-43,-24,-4,17,40, 64,89,114,141,168,197,226,256,286,318,349,381,414,447,481,514,548,582,616,651,685, 719,753,787,821,854,887,920,953,985,1016,1047,1077,1107,1136,1164,1192,1218,1244, 1269,1293,1316,1338,1359,1379,1398,1416,1433,1449,1463,1477,1489,1500,1509,1518, 1525,1531,1536,1539,1541,1542,1542,1541,1538,1534,1528,1522,1514,1505,1495,1483, 1471,1457,1442,1426,1409,1391,1372,1352,1331,1309,1286,1262,1238,1212,1186,1159, 1131,1102,1073,1044,1013,983,951,919,887,855,822,789,755,722,688,654,620,586,552, 518,484,451,417,384,351,318,285,253,221,190,159,129,99,69,41,12,-15,-42,-68,-93, -118,-142,-165,-187,-209,-229,-249,-268,-285,-302,-318,-333,-347,-361,-373,-384, -394,-403,-412,-419,-425,-430,-435,-438,-440,-442,-442,-442,-440,-438,-435,-431, -426,-420,-413,-405,-397,-388,-378,-367,-356,-344,-331,-318,-304,-289,-274,-258, -242,-225,-208,-191,-173,-154,-136,-117,-97,-78,-58,-38,-18,2,22,43,63,83,104,124, 144,164,184,204,223,243,262,281,299,317,335,352,369,386,402,418,433,448,462,475, 488,501,513,524,535,545,554,563,571,579,586,592,597,602,606,610,612,615,616,617, 617,616,615,613,610,607,603,599,593,588,581,574,567,559,550,541,532,521,511,500, 488,476,464,451,438,424,411,397,382,368,353,338,322,307,291,275,259,243,227,211, 195,179,163,147,130,115,99,83,67,52,37,21,7,-8,-22,-36,-50,-64,-77,-90,-103,-115, -127,-138,-149,-160,-170,-180,-189,-198,-207,-215,-222,-229,-236,-242,-248,-253, -258,-262,-266,-269,-272,-274,-276,-277,-278,-278,-278,-278,-277,-275,-273,-271, -268,-265,-262,-258,-253,-248,-243,-238,-232,-226,-219,-212,-205,-198,-190,-182, -174,-166,-157,-148,-139,-130,-121,-112,-102,-92,-83,-73,-63,-53,-43,-33,-23,-13,-3, 7,17,27,36,46,55,65,74,83,92,101,109,118,126,134,141,149,156,163,170,177,183,189, 194,200,205,210,214,218,222,226,229,232,234,237,239,240,241,242,243,243,244,243, 243,242,241,239,237,235,233,230,227,224,221,217,213,209,205,200,196,191,186,180, 175,169,163,157,151,145,139,132,126,119,113,106,99,92,85,79,72,65,58,51,44,37,31, 24,17,11,4,-2,-9,-15,-21,-27,-33,-39,-44,-50,-55,-60,-65,-70,-74,-79,-83,-87,-91, -95,-98,-102,-105,-108,-110,-113,-115,-117,-119,-121,-122,-123,-124,-125,-126,-126, -126,-126,-126,-126,-125,-124,-123,-122,-121,-119,-118,-116,-114,-112,-110,-107, -105,-102,-99,-96,-93,-90,-86,-83,-80,-76,-72,-69,-65,-61,-57,-53,-49,-45,-41,-37, -33,-29,-25,-21,-17,-13,-8,-4,0,3,7,11,15,19,22,26,30,33,36,40,43,46,49,52,55,57, 60,62,65,67,69,71,73,74,76,78,79,80,81,82,83,84,84,85,85,85,85,85,85,85,85,84,83, 83,82,81,80,79,77,76,75,73,72,70,68,66,64,62,60,58,56,54,52,49,47,45,42,40,37,35, 32,30,27,25,22,20,17,15,12,10,8,5,3,0,-2,-4,-6,-9,-11,-13,-15,-17,-19,-21,-22,-24, -26,-27,-29,-30,-32,-33,-34,-35,-37,-38,-39,-39,-40,-41,-42,-42,-43,-43,-43,-44, -44,-44,-44,-44,-44,-44,-44,-43,-43,-42,-42,-41,-41,-40,-39,-39,-38,-37,-36,-35, -34,-33,-32,-31,-29,-28,-27,-26,-24,-23,-22,-20,-19,-18,-16,-15,-14,-12,-11,-9,-8, -6,-5,-4,-2,-1,0,2,3,4,6,7,8,9,10,12,13,14,15,16,17,18,18,19,20,21,22,22,23,23,24, 24,25,25,26,26,26,27,27,27,27,27,27,27,27,27,27,27,26,26,26,25,25,25,24,24,23,23, 22,22,21,21,20,19,19,18,17,16,16,15,14,13,13,12,11,10,9,9,8,7,6,5,5,4,3,2,2,1,0, -1,-1,-2,-3,-3,-4,-5,-5,-6,-6,-7,-8,-8,-9,-9,-9,-10,-10,-11,-11,-11,-12,-12,-12, -12,-13,-13,-13,-13,-13,-13,-13,-13,-13,-13,-13,-13,-13,-13,-13,-13,-13,-12,-12, -12,-12,-11,-11,-11,-11,-10,-10,-10,-9,-9,-9,-8,-8,-8,-7,-7,-6,-6,-5,-5,-5,-4,-4, -3,-3,-3,-2,-2,-1,-1,-1,0,0,1,1,1,2,2,2,3,3,3,4,4,4,5,5,5,5,6,6,6,6,6,6,7,7,7,7,7, 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,6,6,6,6,6,6,5,5,5,5,5,4,4,4,4,4,3,3,3,3,3, 2,2,2,2,2,1,1,1,1,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-2,-2,-2,-2,-2,-2,-2,-2,-3,-3,-3, -3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3, -3,-3,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0, 0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,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,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // ------------------------------------------------------------------------------------------ 131072,131072,131072,131072,131072,131072,131072,131072,131072,131072,131072, 131072,131071,131071,131071,131071,131071,131071,131071,131071,131071,131071,131071, 131071,131071,131071,131071,131071,131071,131071,131071,131071,131071,131071,131071, 131070,131070,131070,131070,131070,131070,131070,131070,131070,131070,131070,131070, 131070,131070,131070,131070,131070,131070,131070,131070,131070,131070,131069,131069, 131069,131069,131069,131069,131069,131069,131069,131069,131069,131069,131069,131069, 131069,131068,131068,131068,131068,131068,131068,131068,131068,131068,131068,131067, 131067,131067,131067,131067,131067,131067,131066,131066,131066,131066,131066,131065, 131065,131065,131065,131064,131064,131064,131064,131063,131063,131062,131062,131062, 131061,131061,131060,131060,131059,131059,131058,131058,131057,131056,131056,131055, 131054,131053,131052,131052,131051,131050,131049,131048,131046,131045,131044,131043, 131041,131040,131038,131037,131035,131034,131032,131030,131028,131026,131024,131022, 131020,131017,131015,131012,131010,131007,131004,131001,130998,130994,130991,130987, 130984,130980,130976,130972,130968,130963,130959,130954,130949,130944,130938,130933, 130927,130921,130915,130909,130902,130895,130888,130881,130873,130865,130857,130849, 130840,130831,130822,130813,130803,130793,130782,130771,130760,130749,130737,130725, 130712,130699,130685,130672,130657,130643,130628,130612,130596,130580,130563,130545, 130528,130509,130490,130471,130451,130430,130409,130388,130365,130343,130319,130295, 130270,130245,130219,130193,130165,130137,130109,130079,130049,130018,129987,129954, 129921,129887,129853,129817,129781,129744,129706,129667,129627,129587,129545,129503, 129459,129415,129370,129324,129276,129228,129179,129129,129078,129026,128972,128918, 128862,128806,128748,128690,128630,128569,128507,128443,128379,128313,128246,128178, 128109,128038,127966,127893,127819,127743,127667,127588,127509,127428,127346,127262, 127177,127091,127004,126915,126824,126732,126639,126545,126449,126351,126252,126152, 126050,125947,125842,125736,125628,125519,125408,125296,125182,125067,124950,124832, 124712,124591,124468,124344,124218,124090,123961,123830,123698,123564,123429,123292, 123154,123014,122872,122729,122585,122438,122291,122141,121990,121838,121684,121528, 121371,121212,121052,120891,120727,120562,120396,120228,120059,119888,119715,119541, 119366,119189,119011,118831,118649,118467,118282,118097,117909,117721,117531,117339, 117146,116952,116757,116560,116361,116161,115960,115758,115554,115349,115143,114935, 114726,114516,114305,114092,113878,113663,113447,113229,113011,112791,112570,112348, 112124,111900,111675,111448,111220,110992,110762,110531,110300,110067,109833,109598, 109363,109126,108889,108650,108411,108171,107930,107688,107445,107201,106957,106712, 106466,106219,105972,105723,105474,105225,104974,104723,104471,104219,103966,103712, 103458,103203,102948,102692,102435,102178,101920,101662,101403,101144,100885,100624, 100364,100103,99841,99579,99317,99054,98791,98527,98264,97999,97735,97470,97204,96939, 96673,96407,96140,95873,95606,95339,95071,94804,94536,94267,93999,93730,93461,93192, 92923,92653,92383,92114,91844,91573,91303,91033,90762,90491,90220,89949,89678,89407, 89136,88865,88593,88321,88050,87778,87506,87234,86962,86690,86418,86146,85874,85602, 85330,85057,84785,84513,84240,83968,83696,83423,83151,82878,82606,82333,82061,81789, 81516,81244,80971,80699,80427,80154,79882,79610,79337,79065,78793,78521,78249,77977, 77705,77433,77161,76889,76617,76345,76074,75802,75531,75259,74988,74717,74446,74175, 73904,73633,73362,73092,72821,72551,72280,72010,71740,71470,71201,70931,70661,70392, 70123,69854,69585,69317,69048,68780,68512,68244,67976,67709,67441,67174,66907,66641, 66374,66108,65842,65576,65311,65046,64781,64516,64252,63988,63724,63460,63197,62934, 62672,62409,62147,61886,61624,61363,61103,60843,60583,60323,60064,59805,59547,59289, 59031,58774,58517,58261,58005,57749,57494,57239,56985,56731,56478,56225,55973,55721, 55470,55219,54968,54718,54469,54220,53971,53724,53476,53229,52983,52737,52492,52247, 52003,51759,51516,51274,51032,50791,50550,50310,50070,49831,49593,49355,49118,48881, 48645,48410,48175,47941,47707,47474,47242,47010,46779,46549,46319,46090,45861,45633, 45406,45179,44953,44728,44503,44279,44056,43833,43611,43389,43168,42948,42728,42510, 42291,42074,41857,41640,41425,41210,40995,40782,40568,40356,40144,39933,39723,39513, 39304,39095,38887,38680,38473,38267,38062,37857,37653,37449,37247,37044,36843,36642, 36442,36242,36043,35845,35647,35450,35253,35057,34862,34667,34473,34280,34087,33894, 33703,33512,33321,33132,32942,32754,32566,32378,32192,32006,31820,31635,31451,31267, 31084,30901,30719,30538,30357,30177,29997,29818,29640,29462,29285,29108,28932,28756, 28581,28407,28233,28060,27888,27716,27545,27374,27204,27034,26865,26697,26529,26362, 26195,26029,25863,25699,25534,25371,25207,25045,24883,24722,24561,24401,24241,24082, 23924,23766,23609,23453,23297,23142,22987,22833,22679,22526,22374,22222,22071,21921, 21771,21622,21473,21325,21177,21031,20884,20739,20594,20449,20306,20162,20020,19878, 19737,19596,19456,19316,19178,19039,18902,18765,18628,18493,18358,18223,18089,17956, 17823,17691,17560,17429,17299,17169,17040,16912,16784,16657,16531,16405,16280,16155, 16031,15908,15785,15663,15541,15420,15300,15180,15061,14942,14824,14707,14590,14474, 14358,14243,14129,14015,13901,13789,13677,13565,13454,13344,13234,13125,13016,12908, 12801,12694,12588,12482,12377,12272,12168,12064,11961,11859,11757,11655,11554,11454, 11354,11255,11156,11058,10960,10863,10766,10670,10575,10480,10385,10291,10197,10104, 10012,9920,9828,9737,9646,9556,9466,9377,9289,9200,9113,9025,8939,8852,8766,8681, 8596,8512,8428,8344,8261,8178,8096,8014,7933,7852,7772,7692,7612,7533,7455,7376, 7299,7221,7144,7068,6992,6916,6841,6766,6692,6618,6544,6471,6398,6326,6254,6182, 6111,6041,5970,5901,5831,5762,5693,5625,5557,5490,5423,5356,5290,5224,5159,5093, 5029,4965,4901,4837,4774,4711,4649,4587,4525,4464,4404,4343,4283,4224,4164,4105, 4047,3989,3931,3874,3817,3760,3704,3648,3593,3538,3483,3429,3375,3321,3268,3215, 3163,3111,3059,3008,2957,2906,2856,2806,2756,2707,2658,2610,2562,2514,2466,2419, 2373,2326,2280,2235,2189,2144,2100,2056,2012,1968,1925,1882,1839,1797,1755,1714, 1672,1631,1591,1551,1511,1471,1432,1393,1354,1316,1278,1240,1203,1165,1129,1092, 1056,1020,984,949,914,879,845,811,777,743,710,677,644,612,580,548,516,485,454,423, 393,362,332,303,273,244,215,186,158,129,101,74,46,19,-8,-35,-61,-88,-114,-140,-165, -191,-216,-241,-265,-290,-314,-338,-362,-386,-409,-432,-455,-478,-501,-523,-545, -567,-589,-610,-632,-653,-674,-694,-715,-735,-756,-775,-795,-815,-834,-853,-872, -891,-910,-928,-947,-965,-983,-1000,-1018,-1035,-1052,-1069,-1086,-1103,-1119,-1136, -1152,-1168,-1184,-1199,-1215,-1230,-1245,-1260,-1275,-1289,-1304,-1318,-1332,-1346, -1360,-1373,-1387,-1400,-1413,-1426,-1439,-1452,-1464,-1477,-1489,-1501,-1513,-1524, -1536,-1547,-1558,-1570,-1581,-1591,-1602,-1612,-1623,-1633,-1643,-1653,-1663,-1672, -1682,-1691,-1700,-1709,-1718,-1727,-1735,-1744,-1752,-1760,-1768,-1776,-1784,-1792, -1799,-1807,-1814,-1821,-1828,-1835,-1842,-1848,-1855,-1861,-1867,-1873,-1879,-1885, -1891,-1896,-1902,-1907,-1913,-1918,-1923,-1928,-1932,-1937,-1942,-1946,-1950,-1955, -1959,-1963,-1967,-1971,-1974,-1978,-1981,-1985,-1988,-1991,-1994,-1997,-2000,-2003, -2006,-2009,-2011,-2013,-2016,-2018,-2020,-2022,-2024,-2026,-2028,-2030,-2032,-2033, -2035,-2036,-2037,-2039,-2040,-2041,-2042,-2043,-2044,-2045,-2045,-2046,-2047,-2047, -2048,-2048,-2048,-2049,-2049,-2049,-2049,-2049,-2049,-2049,-2049,-2048,-2048,-2048, -2047,-2047,-2046,-2046,-2045,-2044,-2043,-2043,-2042,-2041,-2040,-2039,-2038,-2036, -2035,-2034,-2033,-2031,-2030,-2028,-2027,-2025,-2024,-2022,-2020,-2019,-2017,-2015, -2013,-2011,-2009,-2007,-2005,-2003,-2001,-1998,-1996,-1994,-1992,-1989,-1987,-1984, -1982,-1979,-1977,-1974,-1971,-1969,-1966,-1963,-1960,-1957,-1954,-1952,-1949,-1946, -1942,-1939,-1936,-1933,-1930,-1927,-1923,-1920,-1917,-1913,-1910,-1906,-1903,-1899, -1896,-1892,-1889,-1885,-1881,-1878,-1874,-1870,-1866,-1863,-1859,-1855,-1851,-1847, -1843,-1839,-1835,-1831,-1827,-1823,-1819,-1814,-1810,-1806,-1802,-1798,-1793,-1789, -1785,-1780,-1776,-1771,-1767,-1763,-1758,-1754,-1749,-1745,-1740,-1736,-1731,-1726, -1722,-1717,-1713,-1708,-1703,-1698,-1694,-1689,-1684,-1680,-1675,-1670,-1665,-1660, -1656,-1651,-1646,-1641,-1636,-1631,-1626,-1622,-1617,-1612,-1607,-1602,-1597,-1592, -1587,-1582,-1577,-1572,-1567,-1562,-1557,-1552,-1547,-1542,-1537,-1532,-1527,-1522, -1517,-1512,-1507,-1502,-1497,-1492,-1487,-1482,-1477,-1471,-1466,-1461,-1456,-1451, -1446,-1441,-1436,-1431,-1426,-1421,-1416,-1411,-1406,-1401,-1395,-1390,-1385,-1380, -1375,-1370,-1365,-1360,-1355,-1350,-1345,-1340,-1335,-1330,-1325,-1320,-1315,-1310, -1305,-1300,-1295,-1290,-1285,-1280,-1275,-1270,-1265,-1260,-1255,-1250,-1245,-1240, -1235,-1230,-1225,-1220,-1215,-1210,-1205,-1200,-1195,-1190,-1185,-1180,-1175,-1171, -1166,-1161,-1156,-1151,-1146,-1141,-1136,-1131,-1127,-1122,-1117,-1112,-1107,-1102, -1098,-1093,-1088,-1083,-1078,-1074,-1069,-1064,-1059,-1055,-1050,-1045,-1040,-1036, -1031,-1026,-1022,-1017,-1012,-1007,-1003,-998,-994,-989,-984,-980,-975,-970,-966, -961,-957,-952,-948,-943,-938,-934,-929,-925,-920,-916,-911,-907,-902,-898,-894, -889,-885,-880,-876,-872,-867,-863,-858,-854,-850,-845,-841,-837,-833,-828,-824, -820,-816,-811,-807,-803,-799,-795,-790,-786,-782,-778,-774,-770,-766,-762,-757, -753,-749,-745,-741,-737,-733,-729,-725,-721,-717,-714,-710,-706,-702,-698,-694, -690,-686,-683,-679,-675,-671,-667,-664,-660,-656,-652,-649,-645,-641,-638,-634, -630,-627,-623,-620,-616,-612,-609,-605,-602,-598,-595,-591,-588,-584,-581,-577, -574,-571,-567,-564,-560,-557,-554,-550,-547,-544,-540,-537,-534,-530,-527,-524, -521,-518,-514,-511,-508,-505,-502,-499,-495,-492,-489,-486,-483,-480,-477,-474, -471,-468,-465,-462,-459,-456,-453,-450,-447,-444,-441,-438,-435,-433,-430,-427, -424,-421,-418,-416,-413,-410,-407,-405,-402,-399,-396,-394,-391,-388,-386,-383, -380,-378,-375,-373,-370,-367,-365,-362,-360,-357,-355,-352,-350,-347,-345,-342, -340,-337,-335,-333,-330,-328,-325,-323,-321,-318,-316,-314,-311,-309,-307,-305, -302,-300,-298,-296,-293,-291,-289,-287,-285,-282,-280,-278,-276,-274,-272,-270, -268,-266,-264,-261,-259,-257,-255,-253,-251,-249,-247,-246,-244,-242,-240,-238, -236,-234,-232,-230,-228,-227,-225,-223,-221,-219,-217,-216,-214,-212,-210,-209, -207,-205,-203,-202,-200,-198,-197,-195,-193,-192,-190,-188,-187,-185,-184,-182, -180,-179,-177,-176,-174,-173,-171,-170,-168,-167,-165,-164,-162,-161,-159,-158, -156,-155,-154,-152,-151,-149,-148,-147,-145,-144,-143,-141,-140,-139,-137,-136, -135,-133,-132,-131,-130,-128,-127,-126,-125,-123,-122,-121,-120,-119,-117,-116, -115,-114,-113,-112,-111,-109,-108,-107,-106,-105,-104,-103,-102,-101,-100,-99,-98, -97,-96,-95,-94,-93,-92,-91,-90,-89,-88,-87,-86,-85,-84,-83,-82,-81,-80,-79,-78, -78,-77,-76,-75,-74,-73,-72,-71,-71,-70,-69,-68,-67,-67,-66,-65,-64,-63,-63,-62, -61,-60,-60,-59,-58,-58,-57,-56,-55,-55,-54,-53,-53,-52,-51,-51,-50,-49,-49,-48, -47,-47,-46,-45,-45,-44,-44,-43,-42,-42,-41,-41,-40,-40,-39,-38,-38,-37,-37,-36, -36,-35,-35,-34,-34,-33,-33,-32,-32,-31,-31,-30,-30,-29,-29,-28,-28,-28,-27,-27, -26,-26,-25,-25,-25,-24,-24,-23,-23,-23,-22,-22,-21,-21,-21,-20,-20,-20,-19,-19, -19,-18,-18,-17,-17,-17,-17,-16,-16,-16,-15,-15,-15,-14,-14,-14,-13,-13,-13,-13, -12,-12,-12,-12,-11,-11,-11,-11,-10,-10,-10,-10,-9,-9,-9,-9,-9,-8,-8,-8,-8,-7,-7, -7,-7,-7,-7,-6,-6,-6,-6,-6,-5,-5,-5,-5,-5,-5,-5,-4,-4,-4,-4,-4,-4,-4,-3,-3,-3,-3, -3,-3,-3,-3,-3,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // ------------------------------------------------------------------------------------------ 131072,131072,131072,131072,131072,131072,131072,131072,131072,131072,131072, 131072,131072,131072,131071,131071,131071,131071,131071,131071,131070,131070,131070, 131070,131069,131069,131069,131068,131068,131067,131066,131066,131065,131064,131063, 131062,131061,131059,131058,131056,131055,131053,131051,131049,131046,131044,131041, 131038,131035,131031,131028,131024,131019,131015,131010,131004,130998,130992,130986, 130979,130971,130963,130955,130945,130936,130925,130914,130903,130890,130877,130863, 130849,130833,130816,130799,130781,130761,130740,130719,130696,130672,130646,130619, 130591,130562,130531,130498,130463,130427,130390,130350,130308,130265,130219,130172, 130122,130069,130015,129958,129898,129836,129772,129704,129633,129560,129483,129404, 129321,129235,129145,129051,128954,128854,128749,128640,128527,128410,128289,128163, 128033,127898,127758,127613,127463,127308,127147,126982,126810,126633,126450,126261, 126066,125864,125657,125443,125222,124994,124759,124518,124269,124013,123749,123478, 123199,122912,122617,122314,122003,121683,121355,121017,120672,120317,119953,119579, 119197,118805,118403,117992,117570,117139,116698,116246,115784,115312,114829,114336, 113831,113316,112790,112253,111705,111145,110575,109992,109399,108794,108177,107549, 106909,106257,105594,104918,104231,103532,102821,102098,101363,100616,99858,99087, 98304,97510,96703,95885,95054,94212,93358,92493,91616,90727,89827,88915,87992,87058, 86113,85157,84190,83212,82224,81225,80216,79196,78167,77128,76079,75021,73953,72877, 71792,70698,69596,68485,67367,66241,65108,63967,62820,61666,60506,59339,58168,56990, 55808,54621,53429,52234,51034,49832,48626,47417,46206,44994,43779,42563,41347,40130, 38913,37696,36480,35265,34052,32841,31632,30426,29223,28023,26828,25637,24451,23270, 22095,20926,19764,18609,17461,16321,15190,14067,12953,11849,10755,9671,8598,7537, 6487,5449,4423,3410,2411,1425,453,-504,-1447,-2375,-3287,-4184,-5064,-5928,-6775, -7605,-8417,-9212,-9989,-10747,-11487,-12208,-12910,-13592,-14255,-14898,-15521, -16124,-16706,-17268,-17809,-18329,-18829,-19306,-19763,-20198,-20612,-21004,-21374, -21723,-22050,-22355,-22639,-22900,-23140,-23358,-23555,-23729,-23883,-24014,-24124, -24213,-24281,-24328,-24353,-24359,-24343,-24307,-24251,-24175,-24079,-23964,-23830, -23677,-23505,-23314,-23106,-22879,-22636,-22375,-22097,-21804,-21494,-21168,-20827, -20472,-20102,-19718,-19320,-18909,-18486,-18050,-17603,-17144,-16674,-16194,-15705, -15205,-14697,-14181,-13657,-13125,-12587,-12042,-11491,-10936,-10375,-9810,-9242, -8670,-8096,-7520,-6942,-6363,-5783,-5204,-4625,-4047,-3471,-2897,-2325,-1756,-1191, -630,-74,477,1023,1563,2096,2623,3142,3654,4157,4652,5138,5614,6081,6537,6983,7418, 7842,8255,8655,9044,9420,9783,10134,10471,10795,11105,11401,11684,11952,12205,12444, 12669,12878,13073,13252,13417,13567,13701,13820,13924,14012,14086,14144,14187,14215, 14228,14226,14209,14178,14132,14071,13996,13907,13805,13688,13558,13415,13259,13089, 12908,12714,12508,12290,12061,11821,11570,11309,11038,10756,10466,10166,9858,9542, 9218,8886,8547,8201,7850,7492,7129,6761,6388,6011,5631,5247,4860,4471,4080,3687, 3294,2899,2504,2110,1716,1323,931,541,154,-231,-613,-991,-1365,-1736,-2101,-2462, -2817,-3166,-3510,-3847,-4177,-4500,-4816,-5124,-5424,-5716,-5999,-6273,-6539,-6795, -7042,-7279,-7506,-7722,-7929,-8125,-8310,-8485,-8649,-8802,-8943,-9074,-9193,-9300, -9397,-9481,-9555,-9617,-9667,-9706,-9733,-9749,-9754,-9748,-9730,-9701,-9661,-9610, -9548,-9476,-9393,-9300,-9196,-9083,-8960,-8827,-8685,-8534,-8373,-8204,-8027,-7842, -7648,-7447,-7238,-7023,-6801,-6572,-6337,-6096,-5849,-5598,-5341,-5080,-4815,-4545, -4273,-3997,-3718,-3436,-3153,-2867,-2581,-2293,-2004,-1715,-1425,-1136,-848,-560, -274,11,293,574,852,1127,1399,1667,1932,2192,2448,2699,2946,3187,3423,3653,3877, 4095,4306,4511,4709,4900,5084,5261,5430,5591,5744,5889,6026,6155,6276,6388,6492, 6587,6673,6750,6819,6879,6931,6973,7007,7031,7047,7055,7053,7043,7024,6997,6962, 6918,6866,6805,6737,6661,6577,6486,6387,6281,6168,6048,5922,5789,5650,5504,5353, 5196,5034,4866,4694,4517,4336,4150,3960,3767,3571,3371,3168,2963,2755,2546,2334, 2122,1907,1692,1477,1261,1044,828,612,397,183,-30,-241,-451,-659,-864,-1067,-1268, -1465,-1659,-1850,-2037,-2221,-2400,-2575,-2746,-2912,-3073,-3230,-3381,-3527,-3667, -3802,-3931,-4054,-4172,-4283,-4388,-4487,-4579,-4665,-4745,-4818,-4884,-4944,-4997, -5043,-5082,-5115,-5141,-5160,-5173,-5179,-5178,-5171,-5157,-5136,-5110,-5076,-5037, -4991,-4940,-4882,-4819,-4749,-4675,-4594,-4509,-4418,-4322,-4221,-4116,-4006,-3891, -3772,-3650,-3523,-3393,-3259,-3123,-2983,-2840,-2694,-2546,-2396,-2244,-2090,-1934, -1777,-1619,-1459,-1299,-1139,-978,-817,-655,-495,-334,-175,-16,141,298,452,605,757, 906,1053,1197,1339,1478,1615,1748,1878,2004,2127,2247,2362,2474,2582,2685,2785, 2880,2970,3056,3137,3214,3286,3353,3415,3473,3525,3572,3615,3652,3684,3711,3733, 3750,3762,3769,3771,3768,3760,3747,3729,3707,3680,3648,3611,3570,3525,3476,3422, 3364,3302,3236,3166,3093,3016,2936,2852,2766,2676,2583,2488,2390,2290,2187,2082, 1976,1867,1757,1645,1532,1418,1303,1187,1070,952,835,717,599,481,363,246,129,13, -102,-216,-329,-440,-550,-659,-766,-871,-974,-1075,-1174,-1270,-1364,-1456,-1544, -1630,-1714,-1794,-1871,-1945,-2016,-2084,-2148,-2209,-2267,-2321,-2372,-2418,-2462, -2502,-2538,-2570,-2599,-2624,-2645,-2662,-2676,-2686,-2693,-2695,-2694,-2690,-2682, -2670,-2655,-2636,-2614,-2589,-2560,-2528,-2493,-2455,-2414,-2370,-2323,-2274,-2221, -2167,-2109,-2050,-1988,-1923,-1857,-1789,-1719,-1647,-1574,-1499,-1422,-1345,-1266, -1186,-1105,-1023,-941,-858,-774,-690,-606,-522,-438,-354,-270,-187,-104,-21,61,142, 222,301,379,456,532,606,679,750,820,888,954,1018,1081,1141,1199,1255,1309,1361, 1410,1457,1502,1544,1584,1621,1655,1687,1717,1743,1768,1789,1808,1824,1838,1849, 1857,1863,1866,1867,1864,1860,1853,1843,1831,1816,1800,1780,1759,1735,1709,1681, 1651,1619,1585,1549,1511,1472,1431,1388,1344,1298,1251,1202,1153,1102,1050,997,943, 889,833,778,721,664,607,549,491,433,375,317,259,201,143,86,29,-27,-83,-138,-193, -246,-299,-351,-402,-452,-501,-548,-595,-640,-684,-726,-767,-807,-845,-882,-917, -950,-982,-1012,-1040,-1067,-1091,-1115,-1136,-1155,-1173,-1189,-1203,-1215,-1226, -1235,-1241,-1246,-1250,-1251,-1251,-1249,-1245,-1239,-1232,-1223,-1213,-1201,-1187, -1172,-1155,-1137,-1117,-1096,-1074,-1051,-1026,-1000,-973,-944,-915,-885,-854,-822, -789,-755,-720,-685,-650,-613,-577,-539,-502,-464,-426,-387,-349,-310,-272,-233, -194,-156,-118,-80,-42,-4,33,69,105,141,176,210,244,277,309,341,372,401,430,458,485, 512,537,561,584,606,626,646,665,682,698,713,727,740,751,762,771,778,785,791,795, 798,800,801,800,799,796,792,787,781,774,766,757,747,736,724,711,697,682,667,650, 633,616,597,578,558,538,517,496,474,452,429,406,382,359,335,311,286,262,237,213, 188,163,139,114,90,65,41,17,-6,-30,-53,-75,-98,-120,-141,-162,-183,-203,-222,-241, -260,-277,-295,-311,-327,-342,-357,-371,-384,-396,-408,-419,-429,-439,-448,-456, -463,-469,-475,-480,-484,-488,-490,-492,-493,-494,-493,-492,-491,-488,-485,-481, -477,-472,-466,-460,-453,-445,-437,-428,-419,-410,-399,-389,-378,-366,-354,-342, -329,-316,-303,-290,-276,-262,-248,-233,-218,-204,-189,-174,-159,-144,-129,-114,-99, -84,-69,-54,-39,-24,-10,4,18,32,46,59,73,85,98,110,122,134,145,156,167,177,186,196, 205,213,221,229,236,243,249,255,260,265,269,273,277,280,282,284,286,287,288,288, 288,287,286,285,283,281,278,275,272,268,264,259,254,249,244,238,232,225,219,212, 205,198,190,182,175,167,158,150,142,133,125,116,107,98,90,81,72,63,54,46,37,28,20, 11,3,-5,-13,-21,-29,-37,-45,-52,-59,-66,-73,-79,-86,-92,-98,-104,-109,-114,-119, -124,-128,-132,-136,-140,-143,-146,-149,-152,-154,-156,-158,-159,-160,-161,-162, -162,-163,-162,-162,-161,-161,-159,-158,-157,-155,-153,-151,-148,-146,-143,-140, -137,-133,-130,-126,-122,-118,-114,-110,-106,-101,-97,-92,-88,-83,-78,-73,-68,-64, -59,-54,-49,-44,-39,-34,-29,-24,-19,-14,-9,-5,0,5,9,14,18,22,26,30,34,38,42,45,49, 52,55,58,61,64,67,69,72,74,76,78,79,81,82,84,85,86,86,87,88,88,88,88,88,88,88,87, 87,86,85,84,83,82,80,79,77,75,74,72,70,68,66,64,61,59,57,54,52,49,47,44,42,39,36, 34,31,28,25,23,20,17,15,12,9,7,4,2,-1,-3,-6,-8,-10,-12,-15,-17,-19,-21,-23,-25, -26,-28,-30,-31,-33,-34,-36,-37,-38,-39,-40,-41,-42,-43,-43,-44,-45,-45,-45,-46, -46,-46,-46,-46,-46,-46,-45,-45,-45,-44,-44,-43,-42,-42,-41,-40,-39,-38,-37,-36, -35,-34,-33,-32,-30,-29,-28,-27,-25,-24,-23,-21,-20,-18,-17,-16,-14,-13,-11,-10,-9, -7,-6,-5,-3,-2,-1,1,2,3,4,5,7,8,9,10,11,12,13,14,14,15,16,17,17,18,19,19,20,20,21, 21,21,22,22,22,22,22,23,23,23,23,23,22,22,22,22,22,21,21,21,20,20,20,19,19,18,18, 17,16,16,15,15,14,13,13,12,11,11,10,9,9,8,7,7,6,5,5,4,3,3,2,1,1,0,-1,-1,-2,-2,-3, -3,-4,-4,-5,-5,-6,-6,-7,-7,-7,-8,-8,-8,-9,-9,-9,-9,-10,-10,-10,-10,-10,-10,-10, -10,-11,-11,-11,-11,-10,-10,-10,-10,-10,-10,-10,-10,-10,-9,-9,-9,-9,-8,-8,-8,-8,-7, -7,-7,-7,-6,-6,-6,-5,-5,-5,-4,-4,-4,-3,-3,-3,-2,-2,-2,-2,-1,-1,-1,0,0,0,0,1,1,1,2, 2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4, 4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2, -2,-2,-2,-2,-2,-2,-2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, // ------------------------------------------------------------------------------------------ 131072,131072,131072,131072,131072,131072,131072,131072,131072,131072,131072, 131072,131072,131072,131072,131072,131072,131072,131072,131072,131072,131072,131072, 131072,131072,131072,131072,131072,131072,131072,131071,131071,131071,131071,131071, 131071,131071,131071,131071,131071,131071,131071,131071,131071,131071,131071,131071, 131071,131071,131071,131071,131071,131071,131071,131071,131071,131071,131071,131071, 131071,131071,131071,131071,131071,131070,131070,131070,131070,131070,131070,131070, 131070,131070,131070,131070,131069,131069,131069,131069,131069,131069,131068,131068, 131068,131068,131068,131067,131067,131067,131066,131066,131066,131065,131065,131064, 131064,131064,131063,131062,131062,131061,131061,131060,131059,131058,131058,131057, 131056,131055,131054,131053,131052,131051,131049,131048,131047,131045,131044,131042, 131040,131039,131037,131035,131033,131031,131028,131026,131024,131021,131018,131015, 131012,131009,131006,131003,130999,130995,130991,130987,130983,130978,130974,130969, 130964,130959,130953,130947,130941,130935,130929,130922,130915,130908,130900,130892, 130884,130876,130867,130858,130848,130838,130828,130817,130806,130795,130783,130771, 130758,130745,130731,130717,130702,130687,130671,130655,130638,130621,130603,130585, 130566,130546,130526,130505,130483,130461,130437,130414,130389,130364,130338,130311, 130283,130255,130225,130195,130164,130132,130099,130065,130031,129995,129958,129920, 129881,129841,129800,129758,129715,129671,129625,129578,129531,129481,129431,129379, 129326,129272,129216,129159,129101,129041,128980,128918,128853,128788,128721,128652, 128582,128510,128437,128362,128285,128206,128126,128045,127961,127876,127789,127700, 127609,127517,127422,127326,127228,127128,127026,126922,126816,126708,126598,126486, 126371,126255,126137,126016,125894,125769,125642,125513,125382,125248,125112,124974, 124834,124691,124546,124399,124250,124098,123944,123787,123628,123467,123303,123137, 122969,122798,122625,122449,122271,122090,121907,121722,121534,121343,121150,120955, 120757,120557,120354,120149,119941,119731,119519,119304,119086,118866,118644,118419, 118192,117962,117730,117495,117258,117019,116777,116533,116287,116038,115787,115533, 115277,115019,114759,114496,114232,113965,113695,113424,113150,112874,112597,112317, 112035,111750,111464,111176,110886,110594,110300,110004,109706,109406,109105,108801, 108496,108189,107881,107571,107259,106945,106630,106313,105995,105675,105354,105032, 104708,104382,104056,103728,103398,103068,102736,102403,102070,101735,101398,101061, 100723,100384,100044,99704,99362,99020,98676,98333,97988,97643,97297,96950,96603, 96256,95908,95559,95211,94861,94512,94162,93812,93461,93111,92760,92409,92058,91707, 91356,91005,90654,90303,89952,89601,89250,88899,88549,88199,87849,87499,87150,86801, 86452,86104,85756,85408,85061,84715,84369,84023,83678,83334,82990,82646,82304,81962, 81620,81279,80939,80600,80261,79923,79586,79249,78914,78579,78244,77911,77578,77247, 76916,76585,76256,75927,75600,75273,74947,74622,74297,73974,73651,73329,73008,72688, 72369,72051,71733,71417,71101,70786,70472,70159,69847,69535,69225,68915,68606,68298, 67990,67684,67378,67073,66769,66466,66163,65861,65560,65260,64960,64661,64363,64066, 63769,63473,63178,62884,62590,62296,62004,61712,61421,61130,60840,60550,60262,59973, 59686,59399,59112,58826,58541,58256,57972,57688,57405,57122,56840,56558,56277,55996, 55715,55436,55156,54877,54599,54321,54043,53766,53490,53213,52938,52662,52387,52113, 51839,51565,51292,51019,50747,50475,50203,49932,49661,49391,49121,48852,48583,48314, 48046,47778,47511,47244,46978,46712,46446,46181,45917,45653,45389,45126,44864,44601, 44340,44079,43818,43558,43299,43040,42782,42524,42267,42010,41754,41499,41244,40990, 40737,40484,40232,39980,39729,39479,39230,38981,38733,38486,38239,37994,37749,37504, 37261,37018,36777,36536,36296,36056,35818,35580,35343,35108,34873,34639,34405,34173, 33942,33712,33482,33254,33026,32800,32574,32349,32126,31903,31682,31461,31242,31023, 30806,30589,30374,30160,29946,29734,29523,29313,29104,28896,28689,28483,28278,28074, 27872,27670,27470,27270,27072,26875,26678,26483,26289,26096,25904,25713,25524,25335, 25147,24961,24775,24591,24407,24225,24043,23863,23684,23505,23328,23152,22976,22802, 22628,22456,22285,22114,21945,21776,21608,21442,21276,21111,20947,20784,20622,20460, 20300,20140,19981,19823,19666,19510,19355,19200,19046,18893,18741,18589,18438,18288, 18139,17990,17843,17696,17549,17403,17258,17114,16970,16827,16685,16543,16402,16262, 16122,15983,15845,15707,15569,15433,15296,15161,15026,14891,14758,14624,14492,14359, 14228,14097,13966,13836,13707,13578,13449,13321,13194,13067,12941,12815,12689,12565, 12440,12317,12193,12071,11948,11826,11705,11584,11464,11344,11225,11107,10988,10871, 10753,10637,10521,10405,10290,10175,10061,9948,9835,9722,9610,9499,9388,9278,9168, 9059,8950,8842,8735,8628,8522,8416,8311,8206,8102,7998,7896,7793,7692,7591,7490, 7390,7291,7192,7094,6997,6900,6804,6709,6614,6520,6426,6333,6241,6149,6058,5968, 5878,5789,5700,5613,5526,5439,5353,5268,5184,5100,5017,4935,4853,4772,4691,4611, 4532,4454,4376,4299,4222,4146,4071,3997,3923,3849,3777,3705,3634,3563,3493,3423, 3354,3286,3219,3152,3085,3020,2954,2890,2826,2762,2700,2637,2576,2515,2454,2394, 2335,2276,2218,2160,2102,2046,1989,1934,1878,1824,1769,1716,1662,1610,1557,1505, 1454,1403,1352,1302,1253,1203,1155,1106,1058,1011,963,917,870,824,778,733,688,643, 599,555,512,468,425,383,341,299,257,216,175,134,93,53,13,-26,-65,-105,-143,-182, -220,-258,-296,-333,-370,-407,-444,-480,-516,-552,-588,-623,-659,-694,-728,-763, -797,-831,-865,-898,-932,-965,-997,-1030,-1062,-1094,-1126,-1158,-1189,-1220,-1251, -1282,-1312,-1343,-1373,-1402,-1432,-1461,-1490,-1519,-1547,-1575,-1603,-1631,-1659, -1686,-1713,-1739,-1766,-1792,-1818,-1844,-1869,-1894,-1919,-1944,-1968,-1992,-2016, -2039,-2063,-2086,-2108,-2131,-2153,-2175,-2196,-2218,-2239,-2259,-2280,-2300,-2320, -2339,-2359,-2378,-2396,-2415,-2433,-2451,-2469,-2486,-2503,-2520,-2536,-2552,-2568, -2584,-2599,-2614,-2629,-2644,-2658,-2672,-2686,-2699,-2712,-2725,-2738,-2750,-2762, -2774,-2786,-2797,-2808,-2819,-2829,-2840,-2850,-2860,-2869,-2878,-2888,-2896,-2905, -2914,-2922,-2930,-2938,-2945,-2953,-2960,-2967,-2973,-2980,-2986,-2992,-2998,-3004, -3010,-3015,-3020,-3026,-3030,-3035,-3040,-3044,-3048,-3053,-3057,-3060,-3064,-3068, -3071,-3074,-3077,-3080,-3083,-3086,-3089,-3091,-3094,-3096,-3098,-3100,-3102,-3104, -3106,-3108,-3109,-3111,-3112,-3113,-3115,-3116,-3117,-3118,-3119,-3120,-3120,-3121, -3122,-3122,-3123,-3123,-3123,-3124,-3124,-3124,-3124,-3124,-3124,-3124,-3124,-3123, -3123,-3123,-3122,-3122,-3121,-3121,-3120,-3120,-3119,-3118,-3117,-3116,-3115,-3114, -3113,-3112,-3111,-3110,-3108,-3107,-3105,-3104,-3102,-3101,-3099,-3097,-3096,-3094, -3092,-3090,-3088,-3086,-3083,-3081,-3079,-3076,-3074,-3071,-3069,-3066,-3063,-3061, -3058,-3055,-3052,-3049,-3045,-3042,-3039,-3035,-3032,-3028,-3025,-3021,-3017,-3013, -3010,-3005,-3001,-2997,-2993,-2989,-2984,-2980,-2975,-2971,-2966,-2961,-2956,-2951, -2946,-2941,-2936,-2931,-2925,-2920,-2915,-2909,-2903,-2898,-2892,-2886,-2880,-2874, -2868,-2862,-2856,-2850,-2843,-2837,-2830,-2824,-2817,-2811,-2804,-2797,-2791,-2784, -2777,-2770,-2763,-2756,-2749,-2742,-2734,-2727,-2720,-2713,-2705,-2698,-2690,-2683, -2675,-2668,-2660,-2653,-2645,-2637,-2630,-2622,-2614,-2606,-2599,-2591,-2583,-2575, -2567,-2559,-2551,-2544,-2536,-2528,-2520,-2512,-2504,-2496,-2488,-2480,-2472,-2464, -2456,-2448,-2440,-2432,-2424,-2416,-2408,-2400,-2392,-2384,-2376,-2368,-2360,-2352, -2344,-2336,-2328,-2321,-2313,-2305,-2297,-2289,-2281,-2273,-2266,-2258,-2250,-2242, -2234,-2227,-2219,-2211,-2203,-2196,-2188,-2180,-2172,-2165,-2157,-2149,-2142,-2134, -2127,-2119,-2111,-2104,-2096,-2089,-2081,-2074,-2066,-2059,-2051,-2044,-2036,-2029, -2021,-2014,-2006,-1999,-1991,-1984,-1976,-1969,-1962,-1954,-1947,-1939,-1932,-1925, -1917,-1910,-1902,-1895,-1888,-1880,-1873,-1865,-1858,-1851,-1843,-1836,-1829,-1821, -1814,-1806,-1799,-1792,-1784,-1777,-1770,-1762,-1755,-1747,-1740,-1733,-1725,-1718, -1711,-1703,-1696,-1689,-1681,-1674,-1667,-1659,-1652,-1644,-1637,-1630,-1622,-1615, -1608,-1600,-1593,-1586,-1578,-1571,-1564,-1556,-1549,-1542,-1535,-1527,-1520,-1513, -1506,-1498,-1491,-1484,-1477,-1469,-1462,-1455,-1448,-1441,-1433,-1426,-1419,-1412, -1405,-1398,-1391,-1384,-1377,-1370,-1363,-1356,-1349,-1342,-1335,-1328,-1321,-1314, -1307,-1300,-1293,-1287,-1280,-1273,-1266,-1260,-1253,-1246,-1240,-1233,-1226,-1220, -1213,-1207,-1200,-1193,-1187,-1181,-1174,-1168,-1161,-1155,-1149,-1142,-1136,-1130, -1123,-1117,-1111,-1105,-1099,-1093,-1087,-1081,-1074,-1068,-1062,-1057,-1051,-1045, -1039,-1033,-1027,-1021,-1015,-1010,-1004,-998,-992,-987,-981,-976,-970,-964,-959, -953,-948,-942,-937,-931,-926,-920,-915,-910,-904,-899,-894,-888,-883,-878,-873, -868,-862,-857,-852,-847,-842,-837,-832,-827,-822,-817,-812,-807,-802,-797,-792, -787,-782,-777,-772,-768,-763,-758,-753,-748,-744,-739,-734,-729,-725,-720,-715, -711,-706,-702,-697,-692,-688,-683,-679,-674,-670,-665,-661,-657,-652,-648,-643, -639,-635,-630,-626,-622,-617,-613,-609,-605,-600,-596,-592,-588,-584,-579,-575, -571,-567,-563,-559,-555,-551,-547,-543,-539,-535,-531,-527,-523,-519,-516,-512, -508,-504,-500,-497,-493,-489,-485,-482,-478,-474,-471,-467,-463,-460,-456,-453, -449,-446,-442,-439,-435,-432,-428,-425,-422,-418,-415,-412,-408,-405,-402,-399, -395,-392,-389,-386,-383,-379,-376,-373,-370,-367,-364,-361,-358,-355,-352,-349, -346,-343,-340,-338,-335,-332,-329,-326,-323,-321,-318,-315,-312,-310,-307,-304, -302,-299,-296,-294,-291,-289,-286,-283,-281,-278,-276,-273,-271,-268,-266,-264, -261,-259,-256,-254,-252,-249,-247,-245,-242,-240,-238,-236,-233,-231,-229,-227, -224,-222,-220,-218,-216,-214,-212,-209,-207,-205,-203,-201,-199,-197,-195,-193, -191,-189,-187,-185,-183,-181,-180,-178,-176,-174,-172,-170,-168,-166,-165,-163, -161,-159,-157,-156,-154,-152,-151,-149,-147,-145,-144,-142,-140,-139,-137,-136, -134,-132,-131,-129,-128,-126,-124,-123,-121,-120,-118,-117,-115,-114,-113,-111, -110,-108,-107,-105,-104,-103,-101,-100,-99,-97,-96,-95,-93,-92,-91,-89,-88,-87,-86, -84,-83,-82,-81,-80,-78,-77,-76,-75,-74,-73,-71,-70,-69,-68,-67,-66,-65,-64,-63, -62,-61,-60,-59,-58,-57,-56,-55,-54,-53,-52,-51,-50,-49,-48,-47,-46,-46,-45,-44, -43,-42,-41,-40,-40,-39,-38,-37,-36,-36,-35,-34,-33,-32,-32,-31,-30,-30,-29,-28, -27,-27,-26,-25,-25,-24,-23,-23,-22,-21,-21,-20,-19,-19,-18,-18,-17,-16,-16,-15, -15,-14,-14,-13,-12,-12,-11,-11,-10,-10,-9,-9,-8,-8,-7,-7,-6,-6,-5,-5,-5,-4,-4,-3, -3,-2,-2,-1,-1,-1,0,0,0,1,1,2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,7,7,7,8,8,8,9,9,9,9, 10,10,10,10,11,11,11,11,11,12,12,12,12,12,13,13,13,13,13,14,14,14,14,14,14,14,15, 15,15,15,15,15,15,16,16,16,16,16,16,16,16,16,16,17,17,17,17,17,17,17,17,17,17,17, 17,17,17,17,17,17,17,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18, 18,18,18,18,18,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,16,16, 16,16,16,16,16,16,16,16,16,16,16,15,15,15,15,15,15,15,15,15,15,14,14,14,14,14,14, 14,14,14,13,13,13,13,13,13,13,13,12,12,12,12,12,12,12,12,11,11,11,11,11,11,11,10, 10,10,10,10,10,10,9,9,9,9,9,9,8,8,8,8,8,8,8,7,7,7,7,7,7,6,6,6,6,6,6,5,5,5,5,5,5,4, 4,4,4,4,4,3,3,3,3,3,2,2,2,2,2,2,1,1,1,1,1,1,0,0,0, // ------------------------------------------------------------------------------------------ 131072,131072,131072,131072,131072,131072,131072,131072,131071,131071,131071, 131071,131071,131070,131070,131070,131069,131069,131068,131068,131067,131066,131066, 131065,131064,131063,131061,131060,131058,131057,131055,131053,131051,131048,131046, 131043,131040,131037,131033,131029,131025,131021,131016,131011,131005,130999,130993, 130986,130978,130970,130962,130953,130943,130933,130922,130910,130897,130884,130870, 130855,130839,130822,130804,130785,130765,130744,130721,130697,130672,130646,130618, 130589,130558,130525,130491,130455,130417,130377,130336,130292,130246,130198,130147, 130095,130039,129982,129921,129858,129792,129723,129651,129576,129497,129416,129330, 129242,129149,129053,128953,128849,128741,128628,128512,128390,128265,128134,127998, 127858,127712,127561,127405,127243,127076,126903,126723,126538,126346,126148,125944, 125733,125515,125290,125058,124818,124572,124317,124055,123785,123508,123222,122927, 122624,122313,121993,121664,121326,120978,120622,120255,119880,119494,119099,118693, 118278,117852,117415,116968,116510,116042,115562,115072,114570,114057,113532,112996, 112448,111889,111317,110734,110139,109532,108912,108280,107636,106980,106311,105630, 104936,104229,103510,102778,102034,101276,100506,99724,98928,98120,97299,96466,95620, 94761,93889,93005,92109,91200,90279,89345,88400,87442,86472,85490,84497,83492,82475, 81447,80408,79358,78297,77225,76142,75050,73947,72834,71712,70580,69439,68289,67130, 65963,64787,63604,62413,61215,60009,58797,57578,56354,55123,53887,52646,51401,50151, 48897,47639,46378,45115,43848,42580,41310,40039,38767,37495,36223,34951,33680,32410, 31142,29877,28614,27354,26098,24846,23598,22355,21118,19887,18662,17444,16233,15030, 13835,12649,11472,10304,9147,8001,6865,5741,4629,3529,2442,1368,308,-738,-1769,-2786, -3787,-4772,-5741,-6693,-7628,-8546,-9447,-10329,-11192,-12037,-12863,-13669,-14455, -15221,-15967,-16692,-17396,-18079,-18741,-19380,-19998,-20593,-21167,-21717,-22245, -22750,-23232,-23690,-24126,-24538,-24926,-25291,-25632,-25949,-26243,-26513,-26759, -26981,-27179,-27354,-27505,-27633,-27737,-27818,-27875,-27910,-27921,-27909,-27875, -27818,-27739,-27638,-27516,-27371,-27206,-27019,-26812,-26584,-26336,-26069,-25782, -25476,-25151,-24808,-24448,-24070,-23674,-23263,-22835,-22391,-21933,-21459,-20972, -20470,-19955,-19428,-18888,-18337,-17775,-17202,-16619,-16027,-15425,-14816,-14199, -13574,-12943,-12306,-11663,-11016,-10364,-9709,-9051,-8390,-7728,-7064,-6400,-5735, -5071,-4408,-3747,-3088,-2432,-1779,-1131,-486,153,786,1413,2034,2647,3253,3850,4439, 5018,5587,6147,6696,7233,7759,8274,8776,9265,9741,10204,10652,11087,11507,11912, 12303,12677,13037,13380,13707,14018,14313,14590,14851,15095,15321,15531,15723,15897, 16055,16194,16316,16420,16507,16577,16628,16663,16679,16679,16661,16627,16575,16507, 16422,16320,16203,16069,15920,15755,15575,15380,15170,14946,14708,14456,14191,13913, 13622,13319,13004,12678,12340,11992,11633,11265,10887,10501,10106,9703,9292,8875, 8451,8021,7585,7145,6699,6250,5797,5341,4883,4422,3960,3497,3033,2570,2106,1644, 1183,724,268,-186,-636,-1082,-1524,-1961,-2393,-2820,-3240,-3654,-4061,-4460,-4852, -5236,-5611,-5977,-6334,-6682,-7019,-7347,-7664,-7970,-8265,-8549,-8822,-9082,-9331, -9567,-9791,-10002,-10200,-10386,-10558,-10718,-10864,-10997,-11116,-11222,-11314, -11393,-11458,-11510,-11548,-11573,-11584,-11582,-11566,-11537,-11496,-11441,-11373, -11293,-11200,-11095,-10978,-10849,-10708,-10556,-10392,-10218,-10032,-9837,-9631, -9415,-9190,-8955,-8712,-8460,-8200,-7931,-7656,-7373,-7083,-6787,-6485,-6177,-5864, -5547,-5224,-4898,-4568,-4235,-3899,-3560,-3220,-2878,-2535,-2191,-1847,-1502,-1158, -816,-474,-134,204,540,872,1202,1528,1849,2167,2480,2788,3091,3388,3678,3963,4241, 4512,4776,5033,5281,5522,5754,5979,6194,6400,6598,6786,6965,7134,7293,7443,7582, 7711,7830,7939,8038,8126,8203,8271,8327,8373,8409,8434,8448,8452,8446,8429,8403, 8366,8319,8262,8195,8119,8033,7938,7834,7721,7599,7469,7330,7183,7028,6865,6695, 6518,6334,6143,5946,5743,5534,5319,5100,4875,4646,4412,4175,3934,3689,3442,3192, 2940,2685,2429,2172,1913,1654,1394,1135,875,616,359,102,-153,-406,-657,-906,-1152, -1394,-1634,-1870,-2101,-2329,-2552,-2771,-2985,-3193,-3396,-3594,-3785,-3971,-4150, -4323,-4490,-4649,-4802,-4947,-5086,-5217,-5340,-5456,-5564,-5665,-5757,-5842,-5919, -5987,-6048,-6101,-6145,-6181,-6209,-6229,-6241,-6245,-6241,-6229,-6210,-6182,-6147, -6104,-6053,-5996,-5930,-5858,-5779,-5693,-5600,-5501,-5395,-5283,-5165,-5041,-4911, -4777,-4637,-4491,-4341,-4187,-4028,-3865,-3699,-3528,-3354,-3177,-2998,-2815,-2630, -2444,-2255,-2064,-1872,-1680,-1486,-1292,-1097,-902,-708,-513,-320,-127,64,254,442, 629,813,995,1174,1351,1525,1695,1862,2026,2185,2341,2493,2640,2783,2921,3054,3183, 3306,3424,3537,3645,3746,3843,3933,4018,4097,4170,4237,4298,4353,4402,4445,4482, 4512,4536,4555,4567,4573,4573,4566,4554,4537,4513,4483,4448,4407,4361,4309,4252, 4190,4122,4050,3973,3891,3805,3714,3619,3520,3417,3310,3200,3086,2969,2849,2726, 2600,2472,2341,2209,2074,1938,1800,1660,1520,1378,1236,1093,950,806,663,520,377,235, 93,-48,-187,-325,-462,-597,-730,-862,-991,-1118,-1242,-1364,-1483,-1599,-1712, -1822,-1929,-2032,-2132,-2228,-2320,-2409,-2494,-2575,-2651,-2724,-2792,-2856,-2916, -2971,-3022,-3069,-3111,-3148,-3181,-3210,-3234,-3253,-3268,-3278,-3284,-3285,-3282, -3275,-3263,-3247,-3227,-3202,-3174,-3141,-3104,-3064,-3019,-2971,-2919,-2864,-2805, -2743,-2678,-2610,-2539,-2464,-2387,-2308,-2226,-2142,-2055,-1966,-1876,-1783,-1689, -1594,-1497,-1399,-1299,-1199,-1098,-996,-894,-791,-689,-586,-483,-380,-278,-176,-75, 26,126,224,322,418,513,606,698,788,877,963,1047,1129,1209,1287,1362,1434,1504, 1572,1637,1698,1757,1814,1867,1917,1964,2008,2049,2086,2121,2152,2180,2205,2227, 2245,2260,2272,2280,2286,2288,2287,2283,2276,2265,2252,2236,2216,2194,2169,2142, 2111,2078,2042,2004,1963,1921,1875,1828,1778,1727,1673,1618,1561,1502,1442,1380, 1317,1253,1187,1120,1053,984,915,846,775,705,633,562,491,419,348,277,206,135,65,-5, -74,-142,-209,-276,-341,-406,-469,-531,-592,-651,-709,-765,-820,-873,-924,-974, -1021,-1067,-1111,-1153,-1193,-1231,-1267,-1301,-1332,-1362,-1389,-1414,-1437,-1457, -1476,-1492,-1505,-1517,-1526,-1534,-1538,-1541,-1542,-1540,-1536,-1530,-1522,-1512, -1500,-1486,-1470,-1452,-1432,-1410,-1387,-1362,-1335,-1306,-1276,-1245,-1212,-1178, -1142,-1105,-1067,-1028,-987,-946,-904,-861,-817,-772,-727,-681,-635,-588,-541,-494, -446,-399,-351,-303,-255,-208,-160,-113,-66,-20,26,72,117,161,205,248,290,331,371, 411,449,486,523,558,592,624,656,686,715,743,769,794,817,839,860,879,897,913,928, 941,953,963,972,979,985,989,992,993,993,992,989,984,979,972,963,954,943,931,917, 903,887,870,852,833,813,792,771,748,724,700,675,649,623,596,568,540,512,483,453, 424,394,363,333,302,272,241,210,180,149,119,88,58,28,-1,-30,-59,-88,-115,-143,-170, -196,-222,-247,-272,-296,-319,-341,-363,-384,-404,-423,-441,-459,-476,-491,-506, -520,-533,-545,-557,-567,-576,-584,-592,-598,-604,-608,-612,-614,-616,-617,-616, -615,-613,-610,-607,-602,-597,-591,-583,-576,-567,-558,-548,-537,-526,-514,-501, -488,-474,-460,-445,-430,-414,-398,-382,-365,-347,-330,-312,-294,-276,-257,-239, -220,-201,-182,-163,-144,-126,-107,-88,-69,-51,-32,-14,4,22,39,56,73,90,106,122,137, 152,167,181,195,208,221,233,245,257,267,277,287,296,305,313,320,327,333,339,344, 348,352,355,358,360,362,363,363,363,362,361,359,357,354,351,347,343,338,333,327, 321,315,308,301,293,285,277,268,259,250,241,231,221,211,201,190,180,169,158,147, 136,125,114,103,91,80,69,58,47,36,25,15,4,-7,-17,-27,-37,-47,-56,-66,-75,-84,-92, -101,-109,-117,-124,-131,-138,-145,-151,-157,-163,-168,-173,-178,-182,-186,-189, -193,-196,-198,-200,-202,-204,-205,-206,-206,-206,-206,-206,-205,-204,-203,-201, -199,-197,-194,-191,-188,-185,-181,-178,-174,-169,-165,-160,-155,-150,-145,-140, -135,-129,-123,-117,-111,-105,-99,-93,-87,-81,-74,-68,-62,-55,-49,-43,-36,-30,-24, -18,-12,-6,0,6,12,18,23,29,34,39,44,49,54,58,63,67,71,75,79,82,86,89,92,95,97,100, 102,104,106,107,109,110,111,112,112,113,113,113,113,113,112,112,111,110,109,107, 106,104,103,101,99,97,94,92,89,87,84,81,78,75,72,69,66,63,60,56,53,50,46,43,39,36, 32,29,25,22,18,15,12,8,5,2,-1,-5,-8,-11,-14,-17,-19,-22,-25,-27,-30,-32,-35,-37, -39,-41,-43,-45,-46,-48,-50,-51,-52,-53,-54,-55,-56,-57,-58,-58,-59,-59,-59,-59, -59,-59,-59,-59,-58,-58,-57,-57,-56,-55,-54,-54,-53,-51,-50,-49,-48,-46,-45,-44, -42,-41,-39,-37,-36,-34,-32,-31,-29,-27,-25,-23,-22,-20,-18,-16,-14,-12,-11,-9,-7, -5,-4,-2,0,1,3,5,6,8,9,11,12,13,15,16,17,18,19,20,21,22,23,24,25,25,26,27,27,28, 28,29,29,29,29,29,30,30,30,30,29,29,29,29,29,28,28,27,27,27,26,25,25,24,24,23,22, 21,21,20,19,18,17,16,16,15,14,13,12,11,10,9,8,7,7,6,5,4,3,2,1,0,0,-1,-2,-3,-3,-4, -5,-6,-6,-7,-7,-8,-9,-9,-10,-10,-11,-11,-11,-12,-12,-12,-13,-13,-13,-13,-14,-14, -14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-13,-13,-13,-13,-13,-12,-12,-12,-11, -11,-11,-10,-10,-10,-9,-9,-9,-8,-8,-7,-7,-6,-6,-6,-5,-5,-4,-4,-3,-3,-3,-2,-2,-1,-1, -1,0,0,1,1,1,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, 6,6,6,6,5,5,5,5,5,5,5,4,4,4,4,4,4,3,3,3,3,3,2,2,2,2,2,2,1,1,1,1,1,0,0,0,0,0,0,-1, -1,-1,-1,-1,-1,-1,-1,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-3,-3,-3,-3,-3,-3, -3,-3,-3,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, }; MilkyTracker-1.02.00/src/milkyplay/drivers/000077500000000000000000000000001324432207300205335ustar00rootroot00000000000000MilkyTracker-1.02.00/src/milkyplay/drivers/alsa/000077500000000000000000000000001324432207300214535ustar00rootroot00000000000000MilkyTracker-1.02.00/src/milkyplay/drivers/alsa/AudioDriver_ALSA.cpp000066400000000000000000000201341324432207300251740ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * AudioDriver_ALSA.cpp * ALSA Audio * * Created by Christopher O'Neill on 19/1/2008 * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif // Hack to simplify build scripts #ifdef HAVE_LIBASOUND #include "AudioDriver_ALSA.h" void AudioDriver_ALSA::async_direct_callback(snd_async_handler_t *ahandler) { snd_pcm_t *handle = snd_async_handler_get_pcm(ahandler); AudioDriver_ALSA* audioDriver = (AudioDriver_ALSA*) snd_async_handler_get_callback_private(ahandler); const snd_pcm_channel_area_t *my_areas; snd_pcm_uframes_t offset, frames, size; snd_pcm_sframes_t avail, commitres; snd_pcm_state_t state; int first = 0, err; while (1) { state = snd_pcm_state(handle); if (state == SND_PCM_STATE_XRUN) { err = snd_pcm_recover(handle, -EPIPE, 0); if (err < 0) { fprintf(stderr, "ALSA: XRUN recovery failed: %s\n", snd_strerror(err)); } first = 1; } else if (state == SND_PCM_STATE_SUSPENDED) { err = snd_pcm_recover(handle, ESTRPIPE, 0); if (err < 0) { fprintf(stderr, "ALSA: SUSPEND recovery failed: %s\n", snd_strerror(err)); } } avail = snd_pcm_avail_update(handle); if (avail < 0) { err = snd_pcm_recover(handle, avail, 0); if (err < 0) { fprintf(stderr, "ALSA: avail update failed: %s\n", snd_strerror(err)); } first = 1; continue; } if (avail < audioDriver->period_size) { if (first) { first = 0; err = snd_pcm_start(handle); if (err < 0) { fprintf(stderr, "ALSA: Start error: %s\n", snd_strerror(err)); } } else { break; } continue; } frames = audioDriver->period_size; err = snd_pcm_mmap_begin(handle, &my_areas, &offset, &frames); if (err < 0) { if ((err = snd_pcm_recover(handle, err, 0)) < 0) { fprintf(stderr, "ALSA: MMAP begin avail error: %s\n", snd_strerror(err)); } first = 1; } if(frames != audioDriver->period_size) fprintf(stderr, "ALSA: Invalid buffer size: %lu (should be %lu), skipping..\n", frames, audioDriver->period_size); // Certain audio drivers will periodically request buffers of less than one period when // soft-resampling (ie, not running at native frequency). Milkytracker can't handle this, // and bad things happen - so best to warn the user and not process. // PS - I've disabled soft-resampling for now (see below) so this shouldn't happen. // PPS - The downside is that if the user has the wrong mixer rate, they will get an error // dialog - hopefully they'll read the message on stderr... else audioDriver->fillAudioWithCompensation(static_cast (my_areas->addr) + offset*4, frames * 2); commitres = snd_pcm_mmap_commit(handle, offset, frames); if (commitres < 0 || (snd_pcm_uframes_t)commitres != frames) { if ((err = snd_pcm_recover(handle, commitres >= 0 ? -EPIPE : commitres, 0)) < 0) { fprintf(stderr, "ALSA: MMAP commit error: %s\n", snd_strerror(err)); // What now? // exit(1); } first = 1; } } } AudioDriver_ALSA::AudioDriver_ALSA() : AudioDriver_COMPENSATE() { } AudioDriver_ALSA::~AudioDriver_ALSA() { } // On error return a negative value // If the requested buffer size can be served return 0, // otherwise return the number of 16 bit words contained in the obtained buffer mp_sint32 AudioDriver_ALSA::initDevice(mp_sint32 periodSizeAsSamples, const mp_uint32 mixFrequency, MasterMixer* mixer) { snd_pcm_sw_params_t *swparams; snd_pcm_uframes_t buffer_size; int err; snd_pcm_sw_params_alloca(&swparams); if ((err = snd_pcm_open(&pcm, "default", SND_PCM_STREAM_PLAYBACK, 0)) < 0) { fprintf(stderr, "ALSA: Failed to open device 'default' (%s)\n", snd_strerror(err)); return -1; } if ((err = snd_pcm_set_params(pcm, SND_PCM_FORMAT_S16, SND_PCM_ACCESS_MMAP_INTERLEAVED, 2, // channels mixFrequency, 0, // disallow soft resampling (2000000 * static_cast (periodSizeAsSamples)) / mixFrequency)) < 0) // period size in uS { fprintf(stderr, "ALSA: Playback open error (%s)\nALSA: Is your mixer frequency correct? Try 48000Hz\nALSA: If you are seeing \"Access type not available for PLAYBACK\" then your audio driver does not support MMAP access, and will not work with this version of MilkyTracker using the ALSA driver (try SDL instead).\n", snd_strerror(err)); return -1; } snd_pcm_prepare(pcm); period_size = periodSizeAsSamples * 2; snd_pcm_get_params(pcm, &buffer_size, &period_size); stream = new char[period_size * 2]; printf("ALSA: Period size = %lu frames (requested %i), buffer size = %lu frames\n", period_size, periodSizeAsSamples / 2, buffer_size); /* get the current swparams */ err = snd_pcm_sw_params_current(pcm, swparams); if (err < 0) { fprintf(stderr, "ALSA: Unable to determine current swparams for playback: %s\n", snd_strerror(err)); return -1; } AudioDriverBase::initDevice(period_size * 2, mixFrequency, mixer); return period_size * 2; // 2 = number of channels } mp_sint32 AudioDriver_ALSA::stop() { snd_pcm_drop(pcm); deviceHasStarted = false; return 0; } mp_sint32 AudioDriver_ALSA::closeDevice() { snd_pcm_close(pcm); delete[] stream; stream = NULL; deviceHasStarted = false; return 0; } mp_sint32 AudioDriver_ALSA::start() { const snd_pcm_channel_area_t *my_areas; snd_pcm_uframes_t offset, frames, size; snd_async_handler_t *ahandler; int err; err = snd_async_add_pcm_handler(&ahandler, pcm, async_direct_callback, this); if (err < 0) { fprintf(stderr, "ALSA: Unable to register async handler (%s)\n", snd_strerror(err)); } for (int count = 0; count < 2; count++) { size = period_size; while (size > 0) { frames = size; err = snd_pcm_mmap_begin(pcm, &my_areas, &offset, &frames); if (err < 0) { if ((err = snd_pcm_recover(pcm, err, 0)) < 0) { fprintf(stderr, "ALSA: MMAP begin error: %s\n", snd_strerror(err)); } } // Sanity check if (my_areas->step != 32 && my_areas->first != 0) fprintf(stderr, "ALSA: Unsupported audio format.\n"); memset(static_cast (my_areas->addr) + offset*4, 0, frames * 4); int commitres = snd_pcm_mmap_commit(pcm, offset, frames); if (err < 0 || (snd_pcm_uframes_t)commitres != frames) { if ((err = snd_pcm_recover(pcm, commitres >= 0 ? -EPIPE : commitres, 0)) < 0) { fprintf(stderr, "ALSA: MMAP commit error: %s\n", snd_strerror(err)); } } size -= frames; } } \ err = snd_pcm_start(pcm); if (err < 0) { fprintf(stderr, "ALSA: Could not start PCM device (%s)\n", snd_strerror(err)); return -1; } deviceHasStarted = true; return 0; } mp_sint32 AudioDriver_ALSA::pause() { snd_pcm_pause(pcm, true); return 0; } mp_sint32 AudioDriver_ALSA::resume() { snd_pcm_pause(pcm, false); return 0; } #endif MilkyTracker-1.02.00/src/milkyplay/drivers/alsa/AudioDriver_ALSA.h000066400000000000000000000047011324432207300246430ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * AudioDriver_ALSA.h * ALSA Audio * * Created by Christopher O'Neill on 19/1/2008 * */ #ifndef __AUDIODRIVER_ALSA_H__ #define __AUDIODRIVER_ALSA_H__ #include "AudioDriver_COMPENSATE.h" #include class AudioDriver_ALSA : public AudioDriver_COMPENSATE { private: snd_pcm_t *pcm; char *stream; snd_pcm_uframes_t period_size; static void async_direct_callback(snd_async_handler_t *ahandler); public: AudioDriver_ALSA(); virtual ~AudioDriver_ALSA(); virtual mp_sint32 initDevice(mp_sint32 periodSizeAsSamples, mp_uint32 mixFrequency, MasterMixer* mixer); virtual mp_sint32 closeDevice(); virtual mp_sint32 start(); virtual mp_sint32 stop(); virtual mp_sint32 pause(); virtual mp_sint32 resume(); virtual const char* getDriverID() { return "ALSA"; } virtual mp_sint32 getPreferredBufferSize() const { return 2048; } }; #endif MilkyTracker-1.02.00/src/milkyplay/drivers/generic/000077500000000000000000000000001324432207300221475ustar00rootroot00000000000000MilkyTracker-1.02.00/src/milkyplay/drivers/generic/AudioDriver_PORTAUDIO.cpp000066400000000000000000000123451324432207300265230ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * AudioDriver_PORTAUDIO.cpp * SDL Audio * * Created by Peter Barth on 09.06.05. * * Christopher O'Neill 16/3/06: * fill_audio() rewritten to solve issues on certain systems * * */ #include "AudioDriver_PORTAUDIO.h" const char* AudioDriver_PORTAUDIO::driverNames[] = { "WASAPI (PortAudio)" }; int AudioDriver_PORTAUDIO::refCount = 0; int AudioDriver_PORTAUDIO::patestCallback( const void *inputBuffer, void *outputBuffer, unsigned long framesPerBuffer, const PaStreamCallbackTimeInfo* timeInfo, PaStreamCallbackFlags statusFlags, void *userData ) { framesPerBuffer<<=2; AudioDriver_PORTAUDIO* audioDriver = (AudioDriver_PORTAUDIO*)userData; // Base class can handle this audioDriver->fillAudioWithCompensation((char*)outputBuffer, framesPerBuffer); return paContinue; } AudioDriver_PORTAUDIO::AudioDriver_PORTAUDIO() : AudioDriver_COMPENSATE(), stream(NULL) { if (++refCount == 1) Pa_Initialize(); } AudioDriver_PORTAUDIO::~AudioDriver_PORTAUDIO() { if (stream) closeDevice(); if (--refCount == 0) Pa_Terminate(); } // On error return a negative value // If the requested buffer size can be served return 0, // otherwise return the number of 16 bit words contained in the obtained buffer mp_sint32 AudioDriver_PORTAUDIO::initDevice(mp_sint32 bufferSizeInWords, mp_uint32 mixFrequency, MasterMixer* mixer) { mp_sint32 res = AudioDriverBase::initDevice(bufferSizeInWords, mixFrequency, mixer); if (res < 0) return res; int channels = 2; int sampleRate = mixFrequency; int bufferSize = bufferSizeInWords / channels; PaStreamParameters outputParameters; PaError err; //printf("PortAudio Test: output sine wave. SR = %d, BufSize = %d\n", SAMPLE_RATE, FRAMES_PER_BUFFER); err = Pa_Initialize(); if( err != paNoError ) return -1; outputParameters.device = Pa_GetDefaultOutputDevice(); /* default output device */ outputParameters.channelCount = channels; /* stereo output */ outputParameters.sampleFormat = paInt16; /* 32 bit floating point output */ outputParameters.suggestedLatency = Pa_GetDeviceInfo( outputParameters.device )->defaultLowOutputLatency; outputParameters.hostApiSpecificStreamInfo = NULL; err = Pa_OpenStream( &stream, NULL, /* no input */ &outputParameters, sampleRate, bufferSize, paClipOff, /* we won't output out of range samples so don't bother clipping them */ patestCallback, this); if( err != paNoError ) return -1; #ifndef WIN32 printf("Audio buffer: Wanted %d bytes, got %d\n", bufferSizeInWords / channels * 4, bufferSize * 4); #endif // If we got what we requested, return 0, // otherwise return the actual number of samples * number of channels return (bufferSizeInWords / channels == bufferSize) ? 0 : bufferSize * channels; } mp_sint32 AudioDriver_PORTAUDIO::stop() { PaError err = Pa_StopStream( stream ); if( err != paNoError ) return -1; deviceHasStarted = false; return 0; } mp_sint32 AudioDriver_PORTAUDIO::closeDevice() { if (deviceHasStarted) stop(); //Pa_Sleep(1000); PaError err = Pa_CloseStream( stream ); if( err != paNoError ) return -1; stream = NULL; //Pa_Sleep(1000); return 0; } mp_sint32 AudioDriver_PORTAUDIO::start() { // hopefully this works // no error checking performed PaError err = Pa_StartStream( stream ); if (err != paNoError) { deviceHasStarted = false; return -1; } deviceHasStarted = true; return 0; } mp_sint32 AudioDriver_PORTAUDIO::pause() { return 0; } mp_sint32 AudioDriver_PORTAUDIO::resume() { return 0; } MilkyTracker-1.02.00/src/milkyplay/drivers/generic/AudioDriver_PORTAUDIO.h000066400000000000000000000052311324432207300261640ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * AudioDriver_PORTAUDIO.h * SDL Audio * * Created by Peter Barth on 09.06.05. * */ #ifndef __AUDIODRIVER_PORTAUDIO_H__ #define __AUDIODRIVER_PORTAUDIO_H__ #include "portaudio.h" #include "AudioDriver_COMPENSATE.h" class AudioDriver_PORTAUDIO : public AudioDriver_COMPENSATE { private: static const char* driverNames[]; static int refCount; static int patestCallback(const void *inputBuffer, void *outputBuffer, unsigned long framesPerBuffer, const PaStreamCallbackTimeInfo* timeInfo, PaStreamCallbackFlags statusFlags, void *userData); PaStream* stream; public: AudioDriver_PORTAUDIO(); virtual ~AudioDriver_PORTAUDIO(); virtual mp_sint32 initDevice(mp_sint32 bufferSizeInWords, mp_uint32 mixFrequency, MasterMixer* mixer); virtual mp_sint32 closeDevice(); virtual mp_sint32 start(); virtual mp_sint32 stop(); virtual mp_sint32 pause(); virtual mp_sint32 resume(); virtual const char* getDriverID() { return driverNames[0]; } }; #endif MilkyTracker-1.02.00/src/milkyplay/drivers/generic/AudioDriver_RTAUDIO.cpp000066400000000000000000000067501324432207300262670ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * AudioDriver_RTAUDIO.cpp * MilkyPlay * * Created by Peter Barth on 09.06.05. * * Christopher O'Neill 16/3/06: * fill_audio() rewritten to solve issues on certain systems * * */ #include "AudioDriver_RTAUDIO.h" AudioDriver_RTAUDIO::AudioDriver_RTAUDIO(Api audioApi/* = UNSPECIFIED*/) : impl(0) { #ifdef __OSX_PANTHER__ createRt3Instance(audioApi); #else createRt4Instance(audioApi); #endif } AudioDriver_RTAUDIO::~AudioDriver_RTAUDIO() { delete impl; } mp_sint32 AudioDriver_RTAUDIO::initDevice(mp_sint32 bufferSizeInWords, mp_uint32 mixFrequency, MasterMixer* mixer) { return impl->initDevice(bufferSizeInWords, mixFrequency, mixer); } mp_uint32 AudioDriver_RTAUDIO::getMixFrequency() const { return impl->getMixFrequency(); } mp_sint32 AudioDriver_RTAUDIO::closeDevice() { return impl->closeDevice(); } mp_sint32 AudioDriver_RTAUDIO::start() { return impl->start(); } mp_sint32 AudioDriver_RTAUDIO::stop() { return impl->stop(); } mp_sint32 AudioDriver_RTAUDIO::pause() { return impl->pause(); } mp_sint32 AudioDriver_RTAUDIO::resume() { return impl->resume(); } mp_uint32 AudioDriver_RTAUDIO::getNumPlayedSamples() const { return impl->getNumPlayedSamples(); } mp_uint32 AudioDriver_RTAUDIO::getBufferPos() const { return impl->getBufferPos(); } bool AudioDriver_RTAUDIO::supportsTimeQuery() const { return impl->supportsTimeQuery(); } const char* AudioDriver_RTAUDIO::getDriverID() { return impl->getDriverID(); } void AudioDriver_RTAUDIO::advance() { impl->advance(); } mp_sint32 AudioDriver_RTAUDIO::getPreferredSampleRate() const { return impl->getPreferredSampleRate(); } mp_sint32 AudioDriver_RTAUDIO::getPreferredBufferSize() const { return impl->getPreferredBufferSize(); } void AudioDriver_RTAUDIO::msleep(mp_uint32 msecs) { impl->msleep(msecs); } bool AudioDriver_RTAUDIO::isMixerActive() { return impl->isMixerActive(); } void AudioDriver_RTAUDIO::setIdle(bool idle) { impl->setIdle(idle); } MilkyTracker-1.02.00/src/milkyplay/drivers/generic/AudioDriver_RTAUDIO.h000066400000000000000000000066511324432207300257340ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * AudioDriver_RTAUDIO.h * MilkyPlay * * Created by Peter Barth on 09.06.05. * */ #ifndef __AUDIODRIVER_RTAUDIO_H__ #define __AUDIODRIVER_RTAUDIO_H__ #include "AudioDriver_COMPENSATE.h" class AudioDriver_RTAUDIO : public AudioDriverInterface { private: AudioDriverInterface* impl; public: // The following enum is copied from RtAudio.h, keep synchronised enum Api { UNSPECIFIED, /*!< Search for a working compiled API. */ LINUX_ALSA, /*!< The Advanced Linux Sound Architecture API. */ LINUX_PULSE, /*!< The Linux PulseAudio API. */ LINUX_OSS, /*!< The Linux Open Sound System API. */ UNIX_JACK, /*!< The Jack Low-Latency Audio Server API. */ MACOSX_CORE, /*!< Macintosh OS-X Core Audio API. */ WINDOWS_WASAPI, /*!< The Microsoft WASAPI API. */ WINDOWS_ASIO, /*!< The Steinberg Audio Stream I/O API. */ WINDOWS_DS, /*!< The Microsoft Direct Sound API. */ RTAUDIO_DUMMY /*!< A compilable but non-functional API. */ }; AudioDriver_RTAUDIO(Api audioApi = UNSPECIFIED); virtual ~AudioDriver_RTAUDIO(); virtual mp_sint32 initDevice(mp_sint32 bufferSizeInWords, mp_uint32 mixFrequency, MasterMixer* mixer); virtual mp_uint32 getMixFrequency() const; virtual mp_sint32 closeDevice(); virtual mp_sint32 start(); virtual mp_sint32 stop(); virtual mp_sint32 pause(); virtual mp_sint32 resume(); virtual mp_uint32 getNumPlayedSamples() const; virtual mp_uint32 getBufferPos() const; virtual bool supportsTimeQuery() const; virtual const char* getDriverID(); virtual void advance(); virtual mp_sint32 getPreferredSampleRate() const; virtual mp_sint32 getPreferredBufferSize() const; virtual void msleep(mp_uint32 msecs); virtual bool isMixerActive(); virtual void setIdle(bool idle); void createRt4Instance(Api audioApi = UNSPECIFIED); void createRt3Instance(Api audioApi = UNSPECIFIED); }; #endif MilkyTracker-1.02.00/src/milkyplay/drivers/generic/RtAudio4Impl.cpp000066400000000000000000000212161324432207300251320ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * RtAudio4Impl.cpp * MilkyPlay * * Created by Peter Barth on 06.04.08. * * */ #include "AudioDriver_RTAUDIO.h" #ifndef __OSX_PANTHER__ #include "RtAudio.h" #ifdef DRIVER_UNIX #include #include #endif class Rt4AudioDriverImpl : public AudioDriver_COMPENSATE { private: RtAudio* audio; RtAudio::Api selectedAudioApi; static int fill_audio(void* stream, void*, unsigned int length, double streamTime, RtAudioStreamStatus status, void *udata) { // upgrade to reflect number of bytes, instead number of samples length<<=2; Rt4AudioDriverImpl* audioDriver = (Rt4AudioDriverImpl*)udata; // Base class can handle this audioDriver->fillAudioWithCompensation((char *) stream, length); return 0; } public: Rt4AudioDriverImpl(RtAudio::Api audioApi = RtAudio::UNSPECIFIED) : AudioDriver_COMPENSATE(), audio(NULL), selectedAudioApi(audioApi) { } virtual ~Rt4AudioDriverImpl() { } virtual mp_sint32 getPreferredBufferSize() const { switch (selectedAudioApi) { case RtAudio::UNSPECIFIED: return 1024; case RtAudio::LINUX_ALSA: return 2048; case RtAudio::LINUX_OSS: return 2048; case RtAudio::UNIX_JACK: return 1024; case RtAudio::MACOSX_CORE: return 1024; case RtAudio::WINDOWS_ASIO: return 1024; case RtAudio::WINDOWS_DS: return 2048; case RtAudio::WINDOWS_WASAPI: return 1024; default: return 2048; } } // On error return a negative value // If the requested buffer size can be served return MP_OK, // otherwise return the number of 16 bit words contained in the obtained buffer virtual mp_sint32 initDevice(mp_sint32 bufferSizeInWords, mp_uint32 mixFrequency, MasterMixer* mixer) { mp_sint32 res = AudioDriverBase::initDevice(bufferSizeInWords, mixFrequency, mixer); if (res < 0) { return res; } // construction will not throw any RtAudio specific exceptions audio = new RtAudio(selectedAudioApi); mp_uint32 numDevices = audio->getDeviceCount(); mp_uint32 deviceId = 0; for (mp_uint32 i = 0; i < numDevices; i++) { RtAudio::DeviceInfo deviceInfo = audio->getDeviceInfo(i); if (deviceInfo.isDefaultOutput) { deviceId = i; break; } } #ifdef DRIVER_UNIX int channels = 2; unsigned int sampleRate = mixFrequency; unsigned int bufferSize = bufferSizeInWords / channels; RtAudio::StreamParameters sStreamParams; sStreamParams.deviceId = deviceId; RtAudio::StreamOptions sStreamOptions; char streamName[32]; snprintf(streamName, sizeof(streamName), "Milkytracker %i", getpid()); sStreamOptions.streamName = streamName; sStreamOptions.numberOfBuffers = 2; sStreamParams.nChannels = 2; // Open a stream during RtAudio instantiation try { audio->openStream(&sStreamParams, NULL, RTAUDIO_SINT16, sampleRate, &bufferSize, &fill_audio, (void *)this, &sStreamOptions); } #else int channels = 2; unsigned int sampleRate = mixFrequency; unsigned int bufferSize = bufferSizeInWords / channels; RtAudio::StreamParameters sStreamParams; sStreamParams.deviceId = deviceId; sStreamParams.nChannels = 2; // Open a stream during RtAudio instantiation try { audio->openStream(&sStreamParams, NULL, RTAUDIO_SINT16, sampleRate, &bufferSize, &fill_audio, (void *)this); } #endif catch (RtAudioError &error) { error.printMessage(); return MP_DEVICE_ERROR; } #ifndef WIN32 printf("Audio buffer: Wanted %d bytes, got %d\n", bufferSizeInWords / channels * 4, bufferSize * 4); #endif // If we got what we requested, return MP_OK, // otherwise return the actual number of samples * number of channels return (bufferSizeInWords / channels == (signed)bufferSize) ? MP_OK : bufferSize * channels; } virtual mp_sint32 stop() { if (audio) { try { audio->stopStream(); deviceHasStarted = false; return MP_OK; } catch (RtAudioError &error) { error.printMessage(); return MP_DEVICE_ERROR; } } return MP_DEVICE_ERROR; } virtual mp_sint32 closeDevice() { if (audio) { try { audio->closeStream(); deviceHasStarted = false; return MP_OK; } catch (RtAudioError &error) { error.printMessage(); return MP_DEVICE_ERROR; } } return MP_DEVICE_ERROR; } virtual mp_sint32 start() { if (audio) { try { audio->startStream(); deviceHasStarted = true; return MP_OK; } catch (RtAudioError &error) { error.printMessage(); return MP_DEVICE_ERROR; } } return MP_DEVICE_ERROR; } virtual mp_sint32 pause() { if (audio) { try { audio->stopStream(); return MP_OK; } catch (RtAudioError &error) { error.printMessage(); return MP_DEVICE_ERROR; } } return MP_DEVICE_ERROR; } virtual mp_sint32 resume() { if (audio) { try { audio->startStream(); return MP_OK; } catch (RtAudioError &error) { error.printMessage(); return MP_DEVICE_ERROR; } } return MP_DEVICE_ERROR; } virtual const char* getDriverID() { // Needs to be kept synchronised with RtAudio.h static const char* driverNames[] = { "Unspecified (RtAudio)", "Alsa (RtAudio)", "Pulse (RtAudio)", "OSS (RtAudio)", "Jack (RtAudio)", "CoreAudio (RtAudio)", "WASAPI (RtAudio)", "ASIO (RtAudio)", "DirectSound (RtAudio)", "Dummy (RtAudio)" }; return driverNames[selectedAudioApi]; } }; void AudioDriver_RTAUDIO::createRt4Instance(Api audioApi/* = UNSPECIFIED*/) { if (impl) { delete impl; } impl = new Rt4AudioDriverImpl(static_cast (audioApi)); } #else void AudioDriver_RTAUDIO::createRt4Instance(Api audioApi/* = UNSPECIFIED*/) { } #endif MilkyTracker-1.02.00/src/milkyplay/drivers/generic/portaudio/000077500000000000000000000000001324432207300241555ustar00rootroot00000000000000MilkyTracker-1.02.00/src/milkyplay/drivers/generic/portaudio/portaudio.h000066400000000000000000001250761324432207300263470ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /* * The text above constitutes the entire PortAudio license; however, * the PortAudio community also makes the following non-binding requests: * * Any person wishing to distribute modifications to the Software is * requested to send the modifications to the original developer so that * they can be incorporated into the canonical version. It is also * requested that these non-binding requests be included along with the * license above. */ /** @file @brief The PortAudio API. */ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /** Retrieve the release number of the currently running PortAudio build, eg 1900. */ int Pa_GetVersion( void ); /** Retrieve a textual description of the current PortAudio build, eg "PortAudio V19-devel 13 October 2002". */ const char* Pa_GetVersionText( void ); /** Error codes returned by PortAudio functions. Note that with the exception of paNoError, all PaErrorCodes are negative. */ typedef int PaError; typedef enum PaErrorCode { paNoError = 0, paNotInitialized = -10000, paUnanticipatedHostError, paInvalidChannelCount, paInvalidSampleRate, paInvalidDevice, paInvalidFlag, paSampleFormatNotSupported, paBadIODeviceCombination, paInsufficientMemory, paBufferTooBig, paBufferTooSmall, paNullCallback, paBadStreamPtr, paTimedOut, paInternalError, paDeviceUnavailable, paIncompatibleHostApiSpecificStreamInfo, paStreamIsStopped, paStreamIsNotStopped, paInputOverflowed, paOutputUnderflowed, paHostApiNotFound, paInvalidHostApi, paCanNotReadFromACallbackStream, /**< @todo review error code name */ paCanNotWriteToACallbackStream, /**< @todo review error code name */ paCanNotReadFromAnOutputOnlyStream, /**< @todo review error code name */ paCanNotWriteToAnInputOnlyStream, /**< @todo review error code name */ paIncompatibleStreamHostApi, paBadBufferPtr } PaErrorCode; /** Translate the supplied PortAudio error code into a human readable message. */ const char *Pa_GetErrorText( PaError errorCode ); /** Library initialization function - call this before using PortAudio. This function initialises internal data structures and prepares underlying host APIs for use. With the exception of Pa_GetVersion(), Pa_GetVersionText(), and Pa_GetErrorText(), this function MUST be called before using any other PortAudio API functions. If Pa_Initialize() is called multiple times, each successful call must be matched with a corresponding call to Pa_Terminate(). Pairs of calls to Pa_Initialize()/Pa_Terminate() may overlap, and are not required to be fully nested. Note that if Pa_Initialize() returns an error code, Pa_Terminate() should NOT be called. @return paNoError if successful, otherwise an error code indicating the cause of failure. @see Pa_Terminate */ PaError Pa_Initialize( void ); /** Library termination function - call this when finished using PortAudio. This function deallocates all resources allocated by PortAudio since it was initializied by a call to Pa_Initialize(). In cases where Pa_Initialise() has been called multiple times, each call must be matched with a corresponding call to Pa_Terminate(). The final matching call to Pa_Terminate() will automatically close any PortAudio streams that are still open. Pa_Terminate() MUST be called before exiting a program which uses PortAudio. Failure to do so may result in serious resource leaks, such as audio devices not being available until the next reboot. @return paNoError if successful, otherwise an error code indicating the cause of failure. @see Pa_Initialize */ PaError Pa_Terminate( void ); /** The type used to refer to audio devices. Values of this type usually range from 0 to (Pa_GetDeviceCount()-1), and may also take on the PaNoDevice and paUseHostApiSpecificDeviceSpecification values. @see Pa_GetDeviceCount, paNoDevice, paUseHostApiSpecificDeviceSpecification */ typedef int PaDeviceIndex; /** A special PaDeviceIndex value indicating that no device is available, or should be used. @see PaDeviceIndex */ #define paNoDevice ((PaDeviceIndex)-1) /** A special PaDeviceIndex value indicating that the device(s) to be used are specified in the host api specific stream info structure. @see PaDeviceIndex */ #define paUseHostApiSpecificDeviceSpecification ((PaDeviceIndex)-2) /* Host API enumeration mechanism */ /** The type used to enumerate to host APIs at runtime. Values of this type range from 0 to (Pa_GetHostApiCount()-1). @see Pa_GetHostApiCount */ typedef int PaHostApiIndex; /** Retrieve the number of available host APIs. Even if a host API is available it may have no devices available. @return A non-negative value indicating the number of available host APIs or, a PaErrorCode (which are always negative) if PortAudio is not initialized or an error is encountered. @see PaHostApiIndex */ PaHostApiIndex Pa_GetHostApiCount( void ); /** Retrieve the index of the default host API. The default host API will be the lowest common denominator host API on the current platform and is unlikely to provide the best performance. @return A non-negative value ranging from 0 to (Pa_GetHostApiCount()-1) indicating the default host API index or, a PaErrorCode (which are always negative) if PortAudio is not initialized or an error is encountered. */ PaHostApiIndex Pa_GetDefaultHostApi( void ); /** Unchanging unique identifiers for each supported host API. This type is used in the PaHostApiInfo structure. The values are guaranteed to be unique and to never change, thus allowing code to be written that conditionally uses host API specific extensions. New type ids will be allocated when support for a host API reaches "public alpha" status, prior to that developers should use the paInDevelopment type id. @see PaHostApiInfo */ typedef enum PaHostApiTypeId { paInDevelopment=0, /* use while developing support for a new host API */ paDirectSound=1, paMME=2, paASIO=3, paSoundManager=4, paCoreAudio=5, paOSS=7, paALSA=8, paAL=9, paBeOS=10, paWDMKS=11, paJACK=12, paWASAPI=13, paAudioScienceHPI=14 } PaHostApiTypeId; /** A structure containing information about a particular host API. */ typedef struct PaHostApiInfo { /** this is struct version 1 */ int structVersion; /** The well known unique identifier of this host API @see PaHostApiTypeId */ PaHostApiTypeId type; /** A textual description of the host API for display on user interfaces. */ const char *name; /** The number of devices belonging to this host API. This field may be used in conjunction with Pa_HostApiDeviceIndexToDeviceIndex() to enumerate all devices for this host API. @see Pa_HostApiDeviceIndexToDeviceIndex */ int deviceCount; /** The default input device for this host API. The value will be a device index ranging from 0 to (Pa_GetDeviceCount()-1), or paNoDevice if no default input device is available. */ PaDeviceIndex defaultInputDevice; /** The default output device for this host API. The value will be a device index ranging from 0 to (Pa_GetDeviceCount()-1), or paNoDevice if no default output device is available. */ PaDeviceIndex defaultOutputDevice; } PaHostApiInfo; /** Retrieve a pointer to a structure containing information about a specific host Api. @param hostApi A valid host API index ranging from 0 to (Pa_GetHostApiCount()-1) @return A pointer to an immutable PaHostApiInfo structure describing a specific host API. If the hostApi parameter is out of range or an error is encountered, the function returns NULL. The returned structure is owned by the PortAudio implementation and must not be manipulated or freed. The pointer is only guaranteed to be valid between calls to Pa_Initialize() and Pa_Terminate(). */ const PaHostApiInfo * Pa_GetHostApiInfo( PaHostApiIndex hostApi ); /** Convert a static host API unique identifier, into a runtime host API index. @param type A unique host API identifier belonging to the PaHostApiTypeId enumeration. @return A valid PaHostApiIndex ranging from 0 to (Pa_GetHostApiCount()-1) or, a PaErrorCode (which are always negative) if PortAudio is not initialized or an error is encountered. The paHostApiNotFound error code indicates that the host API specified by the type parameter is not available. @see PaHostApiTypeId */ PaHostApiIndex Pa_HostApiTypeIdToHostApiIndex( PaHostApiTypeId type ); /** Convert a host-API-specific device index to standard PortAudio device index. This function may be used in conjunction with the deviceCount field of PaHostApiInfo to enumerate all devices for the specified host API. @param hostApi A valid host API index ranging from 0 to (Pa_GetHostApiCount()-1) @param hostApiDeviceIndex A valid per-host device index in the range 0 to (Pa_GetHostApiInfo(hostApi)->deviceCount-1) @return A non-negative PaDeviceIndex ranging from 0 to (Pa_GetDeviceCount()-1) or, a PaErrorCode (which are always negative) if PortAudio is not initialized or an error is encountered. A paInvalidHostApi error code indicates that the host API index specified by the hostApi parameter is out of range. A paInvalidDevice error code indicates that the hostApiDeviceIndex parameter is out of range. @see PaHostApiInfo */ PaDeviceIndex Pa_HostApiDeviceIndexToDeviceIndex( PaHostApiIndex hostApi, int hostApiDeviceIndex ); /** Structure used to return information about a host error condition. */ typedef struct PaHostErrorInfo{ PaHostApiTypeId hostApiType; /**< the host API which returned the error code */ long errorCode; /**< the error code returned */ const char *errorText; /**< a textual description of the error if available, otherwise a zero-length string */ }PaHostErrorInfo; /** Return information about the last host error encountered. The error information returned by Pa_GetLastHostErrorInfo() will never be modified asyncronously by errors occurring in other PortAudio owned threads (such as the thread that manages the stream callback.) This function is provided as a last resort, primarily to enhance debugging by providing clients with access to all available error information. @return A pointer to an immutable structure constaining information about the host error. The values in this structure will only be valid if a PortAudio function has previously returned the paUnanticipatedHostError error code. */ const PaHostErrorInfo* Pa_GetLastHostErrorInfo( void ); /* Device enumeration and capabilities */ /** Retrieve the number of available devices. The number of available devices may be zero. @return A non-negative value indicating the number of available devices or, a PaErrorCode (which are always negative) if PortAudio is not initialized or an error is encountered. */ PaDeviceIndex Pa_GetDeviceCount( void ); /** Retrieve the index of the default input device. The result can be used in the inputDevice parameter to Pa_OpenStream(). @return The default input device index for the default host API, or paNoDevice if no default input device is available or an error was encountered. */ PaDeviceIndex Pa_GetDefaultInputDevice( void ); /** Retrieve the index of the default output device. The result can be used in the outputDevice parameter to Pa_OpenStream(). @return The default output device index for the defualt host API, or paNoDevice if no default output device is available or an error was encountered. @note On the PC, the user can specify a default device by setting an environment variable. For example, to use device #1.
     set PA_RECOMMENDED_OUTPUT_DEVICE=1
    
    The user should first determine the available device ids by using the supplied application "pa_devs". */ PaDeviceIndex Pa_GetDefaultOutputDevice( void ); /** The type used to represent monotonic time in seconds that can be used for syncronisation. The type is used for the outTime argument to the PaStreamCallback and as the result of Pa_GetStreamTime(). @see PaStreamCallback, Pa_GetStreamTime */ typedef double PaTime; /** A type used to specify one or more sample formats. Each value indicates a possible format for sound data passed to and from the stream callback, Pa_ReadStream and Pa_WriteStream. The standard formats paFloat32, paInt16, paInt32, paInt24, paInt8 and aUInt8 are usually implemented by all implementations. The floating point representation (paFloat32) uses +1.0 and -1.0 as the maximum and minimum respectively. paUInt8 is an unsigned 8 bit format where 128 is considered "ground" The paNonInterleaved flag indicates that a multichannel buffer is passed as a set of non-interleaved pointers. @see Pa_OpenStream, Pa_OpenDefaultStream, PaDeviceInfo @see paFloat32, paInt16, paInt32, paInt24, paInt8 @see paUInt8, paCustomFormat, paNonInterleaved */ typedef unsigned long PaSampleFormat; #define paFloat32 ((PaSampleFormat) 0x00000001) /**< @see PaSampleFormat */ #define paInt32 ((PaSampleFormat) 0x00000002) /**< @see PaSampleFormat */ #define paInt24 ((PaSampleFormat) 0x00000004) /**< Packed 24 bit format. @see PaSampleFormat */ #define paInt16 ((PaSampleFormat) 0x00000008) /**< @see PaSampleFormat */ #define paInt8 ((PaSampleFormat) 0x00000010) /**< @see PaSampleFormat */ #define paUInt8 ((PaSampleFormat) 0x00000020) /**< @see PaSampleFormat */ #define paCustomFormat ((PaSampleFormat) 0x00010000)/**< @see PaSampleFormat */ #define paNonInterleaved ((PaSampleFormat) 0x80000000) /** A structure providing information and capabilities of PortAudio devices. Devices may support input, output or both input and output. */ typedef struct PaDeviceInfo { int structVersion; /* this is struct version 2 */ const char *name; PaHostApiIndex hostApi; /* note this is a host API index, not a type id*/ int maxInputChannels; int maxOutputChannels; /* Default latency values for interactive performance. */ PaTime defaultLowInputLatency; PaTime defaultLowOutputLatency; /* Default latency values for robust non-interactive applications (eg. playing sound files). */ PaTime defaultHighInputLatency; PaTime defaultHighOutputLatency; double defaultSampleRate; } PaDeviceInfo; /** Retrieve a pointer to a PaDeviceInfo structure containing information about the specified device. @return A pointer to an immutable PaDeviceInfo structure. If the device parameter is out of range the function returns NULL. @param device A valid device index in the range 0 to (Pa_GetDeviceCount()-1) @note PortAudio manages the memory referenced by the returned pointer, the client must not manipulate or free the memory. The pointer is only guaranteed to be valid between calls to Pa_Initialize() and Pa_Terminate(). @see PaDeviceInfo, PaDeviceIndex */ const PaDeviceInfo* Pa_GetDeviceInfo( PaDeviceIndex device ); /** Parameters for one direction (input or output) of a stream. */ typedef struct PaStreamParameters { /** A valid device index in the range 0 to (Pa_GetDeviceCount()-1) specifying the device to be used or the special constant paUseHostApiSpecificDeviceSpecification which indicates that the actual device(s) to use are specified in hostApiSpecificStreamInfo. This field must not be set to paNoDevice. */ PaDeviceIndex device; /** The number of channels of sound to be delivered to the stream callback or accessed by Pa_ReadStream() or Pa_WriteStream(). It can range from 1 to the value of maxInputChannels in the PaDeviceInfo record for the device specified by the device parameter. */ int channelCount; /** The sample format of the buffer provided to the stream callback, a_ReadStream() or Pa_WriteStream(). It may be any of the formats described by the PaSampleFormat enumeration. */ PaSampleFormat sampleFormat; /** The desired latency in seconds. Where practical, implementations should configure their latency based on these parameters, otherwise they may choose the closest viable latency instead. Unless the suggested latency is greater than the absolute upper limit for the device implementations should round the suggestedLatency up to the next practial value - ie to provide an equal or higher latency than suggestedLatency wherever possibe. Actual latency values for an open stream may be retrieved using the inputLatency and outputLatency fields of the PaStreamInfo structure returned by Pa_GetStreamInfo(). @see default*Latency in PaDeviceInfo, *Latency in PaStreamInfo */ PaTime suggestedLatency; /** An optional pointer to a host api specific data structure containing additional information for device setup and/or stream processing. hostApiSpecificStreamInfo is never required for correct operation, if not used it should be set to NULL. */ void *hostApiSpecificStreamInfo; } PaStreamParameters; /** Return code for Pa_IsFormatSupported indicating success. */ #define paFormatIsSupported (0) /** Determine whether it would be possible to open a stream with the specified parameters. @param inputParameters A structure that describes the input parameters used to open a stream. The suggestedLatency field is ignored. See PaStreamParameters for a description of these parameters. inputParameters must be NULL for output-only streams. @param outputParameters A structure that describes the output parameters used to open a stream. The suggestedLatency field is ignored. See PaStreamParameters for a description of these parameters. outputParameters must be NULL for input-only streams. @param sampleRate The required sampleRate. For full-duplex streams it is the sample rate for both input and output @return Returns 0 if the format is supported, and an error code indicating why the format is not supported otherwise. The constant paFormatIsSupported is provided to compare with the return value for success. @see paFormatIsSupported, PaStreamParameters */ PaError Pa_IsFormatSupported( const PaStreamParameters *inputParameters, const PaStreamParameters *outputParameters, double sampleRate ); /* Streaming types and functions */ /** A single PaStream can provide multiple channels of real-time streaming audio input and output to a client application. A stream provides access to audio hardware represented by one or more PaDevices. Depending on the underlying Host API, it may be possible to open multiple streams using the same device, however this behavior is implementation defined. Portable applications should assume that a PaDevice may be simultaneously used by at most one PaStream. Pointers to PaStream objects are passed between PortAudio functions that operate on streams. @see Pa_OpenStream, Pa_OpenDefaultStream, Pa_OpenDefaultStream, Pa_CloseStream, Pa_StartStream, Pa_StopStream, Pa_AbortStream, Pa_IsStreamActive, Pa_GetStreamTime, Pa_GetStreamCpuLoad */ typedef void PaStream; /** Can be passed as the framesPerBuffer parameter to Pa_OpenStream() or Pa_OpenDefaultStream() to indicate that the stream callback will accept buffers of any size. */ #define paFramesPerBufferUnspecified (0) /** Flags used to control the behavior of a stream. They are passed as parameters to Pa_OpenStream or Pa_OpenDefaultStream. Multiple flags may be ORed together. @see Pa_OpenStream, Pa_OpenDefaultStream @see paNoFlag, paClipOff, paDitherOff, paNeverDropInput, paPrimeOutputBuffersUsingStreamCallback, paPlatformSpecificFlags */ typedef unsigned long PaStreamFlags; /** @see PaStreamFlags */ #define paNoFlag ((PaStreamFlags) 0) /** Disable default clipping of out of range samples. @see PaStreamFlags */ #define paClipOff ((PaStreamFlags) 0x00000001) /** Disable default dithering. @see PaStreamFlags */ #define paDitherOff ((PaStreamFlags) 0x00000002) /** Flag requests that where possible a full duplex stream will not discard overflowed input samples without calling the stream callback. This flag is only valid for full duplex callback streams and only when used in combination with the paFramesPerBufferUnspecified (0) framesPerBuffer parameter. Using this flag incorrectly results in a paInvalidFlag error being returned from Pa_OpenStream and Pa_OpenDefaultStream. @see PaStreamFlags, paFramesPerBufferUnspecified */ #define paNeverDropInput ((PaStreamFlags) 0x00000004) /** Call the stream callback to fill initial output buffers, rather than the default behavior of priming the buffers with zeros (silence). This flag has no effect for input-only and blocking read/write streams. @see PaStreamFlags */ #define paPrimeOutputBuffersUsingStreamCallback ((PaStreamFlags) 0x00000008) /** A mask specifying the platform specific bits. @see PaStreamFlags */ #define paPlatformSpecificFlags ((PaStreamFlags)0xFFFF0000) /** Timing information for the buffers passed to the stream callback. */ typedef struct PaStreamCallbackTimeInfo{ PaTime inputBufferAdcTime; PaTime currentTime; PaTime outputBufferDacTime; } PaStreamCallbackTimeInfo; /** Flag bit constants for the statusFlags to PaStreamCallback. @see paInputUnderflow, paInputOverflow, paOutputUnderflow, paOutputOverflow, paPrimingOutput */ typedef unsigned long PaStreamCallbackFlags; /** In a stream opened with paFramesPerBufferUnspecified, indicates that input data is all silence (zeros) because no real data is available. In a stream opened without paFramesPerBufferUnspecified, it indicates that one or more zero samples have been inserted into the input buffer to compensate for an input underflow. @see PaStreamCallbackFlags */ #define paInputUnderflow ((PaStreamCallbackFlags) 0x00000001) /** In a stream opened with paFramesPerBufferUnspecified, indicates that data prior to the first sample of the input buffer was discarded due to an overflow, possibly because the stream callback is using too much CPU time. Otherwise indicates that data prior to one or more samples in the input buffer was discarded. @see PaStreamCallbackFlags */ #define paInputOverflow ((PaStreamCallbackFlags) 0x00000002) /** Indicates that output data (or a gap) was inserted, possibly because the stream callback is using too much CPU time. @see PaStreamCallbackFlags */ #define paOutputUnderflow ((PaStreamCallbackFlags) 0x00000004) /** Indicates that output data will be discarded because no room is available. @see PaStreamCallbackFlags */ #define paOutputOverflow ((PaStreamCallbackFlags) 0x00000008) /** Some of all of the output data will be used to prime the stream, input data may be zero. @see PaStreamCallbackFlags */ #define paPrimingOutput ((PaStreamCallbackFlags) 0x00000010) /** Allowable return values for the PaStreamCallback. @see PaStreamCallback */ typedef enum PaStreamCallbackResult { paContinue=0, paComplete=1, paAbort=2 } PaStreamCallbackResult; /** Functions of type PaStreamCallback are implemented by PortAudio clients. They consume, process or generate audio in response to requests from an active PortAudio stream. @param input and @param output are arrays of interleaved samples, the format, packing and number of channels used by the buffers are determined by parameters to Pa_OpenStream(). @param frameCount The number of sample frames to be processed by the stream callback. @param timeInfo The time in seconds when the first sample of the input buffer was received at the audio input, the time in seconds when the first sample of the output buffer will begin being played at the audio output, and the time in seconds when the stream callback was called. See also Pa_GetStreamTime() @param statusFlags Flags indicating whether input and/or output buffers have been inserted or will be dropped to overcome underflow or overflow conditions. @param userData The value of a user supplied pointer passed to Pa_OpenStream() intended for storing synthesis data etc. @return The stream callback should return one of the values in the PaStreamCallbackResult enumeration. To ensure that the callback continues to be called, it should return paContinue (0). Either paComplete or paAbort can be returned to finish stream processing, after either of these values is returned the callback will not be called again. If paAbort is returned the stream will finish as soon as possible. If paComplete is returned, the stream will continue until all buffers generated by the callback have been played. This may be useful in applications such as soundfile players where a specific duration of output is required. However, it is not necessary to utilise this mechanism as Pa_StopStream(), Pa_AbortStream() or Pa_CloseStream() can also be used to stop the stream. The callback must always fill the entire output buffer irrespective of its return value. @see Pa_OpenStream, Pa_OpenDefaultStream @note With the exception of Pa_GetStreamCpuLoad() it is not permissable to call PortAudio API functions from within the stream callback. */ typedef int PaStreamCallback( const void *input, void *output, unsigned long frameCount, const PaStreamCallbackTimeInfo* timeInfo, PaStreamCallbackFlags statusFlags, void *userData ); /** Opens a stream for either input, output or both. @param stream The address of a PaStream pointer which will receive a pointer to the newly opened stream. @param inputParameters A structure that describes the input parameters used by the opened stream. See PaStreamParameters for a description of these parameters. inputParameters must be NULL for output-only streams. @param outputParameters A structure that describes the output parameters used by the opened stream. See PaStreamParameters for a description of these parameters. outputParameters must be NULL for input-only streams. @param sampleRate The desired sampleRate. For full-duplex streams it is the sample rate for both input and output @param framesPerBuffer The number of frames passed to the stream callback function, or the preferred block granularity for a blocking read/write stream. The special value paFramesPerBufferUnspecified (0) may be used to request that the stream callback will recieve an optimal (and possibly varying) number of frames based on host requirements and the requested latency settings. Note: With some host APIs, the use of non-zero framesPerBuffer for a callback stream may introduce an additional layer of buffering which could introduce additional latency. PortAudio guarantees that the additional latency will be kept to the theoretical minimum however, it is strongly recommended that a non-zero framesPerBuffer value only be used when your algorithm requires a fixed number of frames per stream callback. @param streamFlags Flags which modify the behaviour of the streaming process. This parameter may contain a combination of flags ORed together. Some flags may only be relevant to certain buffer formats. @param streamCallback A pointer to a client supplied function that is responsible for processing and filling input and output buffers. If this parameter is NULL the stream will be opened in 'blocking read/write' mode. In blocking mode, the client can receive sample data using Pa_ReadStream and write sample data using Pa_WriteStream, the number of samples that may be read or written without blocking is returned by Pa_GetStreamReadAvailable and Pa_GetStreamWriteAvailable respectively. @param userData A client supplied pointer which is passed to the stream callback function. It could for example, contain a pointer to instance data necessary for processing the audio buffers. This parameter is ignored if streamCallback is NULL. @return Upon success Pa_OpenStream() returns paNoError and places a pointer to a valid PaStream in the stream argument. The stream is inactive (stopped). If a call to Pa_OpenStream() fails, a non-zero error code is returned (see PaError for possible error codes) and the value of stream is invalid. @see PaStreamParameters, PaStreamCallback, Pa_ReadStream, Pa_WriteStream, Pa_GetStreamReadAvailable, Pa_GetStreamWriteAvailable */ PaError Pa_OpenStream( PaStream** stream, const PaStreamParameters *inputParameters, const PaStreamParameters *outputParameters, double sampleRate, unsigned long framesPerBuffer, PaStreamFlags streamFlags, PaStreamCallback *streamCallback, void *userData ); /** A simplified version of Pa_OpenStream() that opens the default input and/or output devices. @param stream The address of a PaStream pointer which will receive a pointer to the newly opened stream. @param numInputChannels The number of channels of sound that will be supplied to the stream callback or returned by Pa_ReadStream. It can range from 1 to the value of maxInputChannels in the PaDeviceInfo record for the default input device. If 0 the stream is opened as an output-only stream. @param numOutputChannels The number of channels of sound to be delivered to the stream callback or passed to Pa_WriteStream. It can range from 1 to the value of maxOutputChannels in the PaDeviceInfo record for the default output dvice. If 0 the stream is opened as an output-only stream. @param sampleFormat The sample format of both the input and output buffers provided to the callback or passed to and from Pa_ReadStream and Pa_WriteStream. sampleFormat may be any of the formats described by the PaSampleFormat enumeration. @param sampleRate Same as Pa_OpenStream parameter of the same name. @param framesPerBuffer Same as Pa_OpenStream parameter of the same name. @param streamCallback Same as Pa_OpenStream parameter of the same name. @param userData Same as Pa_OpenStream parameter of the same name. @return As for Pa_OpenStream @see Pa_OpenStream, PaStreamCallback */ PaError Pa_OpenDefaultStream( PaStream** stream, int numInputChannels, int numOutputChannels, PaSampleFormat sampleFormat, double sampleRate, unsigned long framesPerBuffer, PaStreamCallback *streamCallback, void *userData ); /** Closes an audio stream. If the audio stream is active it discards any pending buffers as if Pa_AbortStream() had been called. */ PaError Pa_CloseStream( PaStream *stream ); /** Functions of type PaStreamFinishedCallback are implemented by PortAudio clients. They can be registered with a stream using the Pa_SetStreamFinishedCallback function. Once registered they are called when the stream becomes inactive (ie once a call to Pa_StopStream() will not block). A stream will become inactive after the stream callback returns non-zero, or when Pa_StopStream or Pa_AbortStream is called. For a stream providing audio output, if the stream callback returns paComplete, or Pa_StopStream is called, the stream finished callback will not be called until all generated sample data has been played. @param userData The userData parameter supplied to Pa_OpenStream() @see Pa_SetStreamFinishedCallback */ typedef void PaStreamFinishedCallback( void *userData ); /** Register a stream finished callback function which will be called when the stream becomes inactive. See the description of PaStreamFinishedCallback for further details about when the callback will be called. @param stream a pointer to a PaStream that is in the stopped state - if the stream is not stopped, the stream's finished callback will remain unchanged and an error code will be returned. @param streamFinishedCallback a pointer to a function with the same signature as PaStreamFinishedCallback, that will be called when the stream becomes inactive. Passing NULL for this parameter will un-register a previously registered stream finished callback function. @return on success returns paNoError, otherwise an error code indicating the cause of the error. @see PaStreamFinishedCallback */ PaError Pa_SetStreamFinishedCallback( PaStream *stream, PaStreamFinishedCallback* streamFinishedCallback ); /** Commences audio processing. */ PaError Pa_StartStream( PaStream *stream ); /** Terminates audio processing. It waits until all pending audio buffers have been played before it returns. */ PaError Pa_StopStream( PaStream *stream ); /** Terminates audio processing immediately without waiting for pending buffers to complete. */ PaError Pa_AbortStream( PaStream *stream ); /** Determine whether the stream is stopped. A stream is considered to be stopped prior to a successful call to Pa_StartStream and after a successful call to Pa_StopStream or Pa_AbortStream. If a stream callback returns a value other than paContinue the stream is NOT considered to be stopped. @return Returns one (1) when the stream is stopped, zero (0) when the stream is running or, a PaErrorCode (which are always negative) if PortAudio is not initialized or an error is encountered. @see Pa_StopStream, Pa_AbortStream, Pa_IsStreamActive */ PaError Pa_IsStreamStopped( PaStream *stream ); /** Determine whether the stream is active. A stream is active after a successful call to Pa_StartStream(), until it becomes inactive either as a result of a call to Pa_StopStream() or Pa_AbortStream(), or as a result of a return value other than paContinue from the stream callback. In the latter case, the stream is considered inactive after the last buffer has finished playing. @return Returns one (1) when the stream is active (ie playing or recording audio), zero (0) when not playing or, a PaErrorCode (which are always negative) if PortAudio is not initialized or an error is encountered. @see Pa_StopStream, Pa_AbortStream, Pa_IsStreamStopped */ PaError Pa_IsStreamActive( PaStream *stream ); /** A structure containing unchanging information about an open stream. @see Pa_GetStreamInfo */ typedef struct PaStreamInfo { /** this is struct version 1 */ int structVersion; /** The input latency of the stream in seconds. This value provides the most accurate estimate of input latency available to the implementation. It may differ significantly from the suggestedLatency value passed to Pa_OpenStream(). The value of this field will be zero (0.) for output-only streams. @see PaTime */ PaTime inputLatency; /** The output latency of the stream in seconds. This value provides the most accurate estimate of output latency available to the implementation. It may differ significantly from the suggestedLatency value passed to Pa_OpenStream(). The value of this field will be zero (0.) for input-only streams. @see PaTime */ PaTime outputLatency; /** The sample rate of the stream in Hertz (samples per second). In cases where the hardware sample rate is inaccurate and PortAudio is aware of it, the value of this field may be different from the sampleRate parameter passed to Pa_OpenStream(). If information about the actual hardware sample rate is not available, this field will have the same value as the sampleRate parameter passed to Pa_OpenStream(). */ double sampleRate; } PaStreamInfo; /** Retrieve a pointer to a PaStreamInfo structure containing information about the specified stream. @return A pointer to an immutable PaStreamInfo structure. If the stream parameter invalid, or an error is encountered, the function returns NULL. @param stream A pointer to an open stream previously created with Pa_OpenStream. @note PortAudio manages the memory referenced by the returned pointer, the client must not manipulate or free the memory. The pointer is only guaranteed to be valid until the specified stream is closed. @see PaStreamInfo */ const PaStreamInfo* Pa_GetStreamInfo( PaStream *stream ); /** Determine the current time for the stream according to the same clock used to generate buffer timestamps. This time may be used for syncronising other events to the audio stream, for example synchronizing audio to MIDI. @return The stream's current time in seconds, or 0 if an error occurred. @see PaTime, PaStreamCallback */ PaTime Pa_GetStreamTime( PaStream *stream ); /** Retrieve CPU usage information for the specified stream. The "CPU Load" is a fraction of total CPU time consumed by a callback stream's audio processing routines including, but not limited to the client supplied stream callback. This function does not work with blocking read/write streams. This function may be called from the stream callback function or the application. @return A floating point value, typically between 0.0 and 1.0, where 1.0 indicates that the stream callback is consuming the maximum number of CPU cycles possible to maintain real-time operation. A value of 0.5 would imply that PortAudio and the stream callback was consuming roughly 50% of the available CPU time. The return value may exceed 1.0. A value of 0.0 will always be returned for a blocking read/write stream, or if an error occurrs. */ double Pa_GetStreamCpuLoad( PaStream* stream ); /** Read samples from an input stream. The function doesn't return until the entire buffer has been filled - this may involve waiting for the operating system to supply the data. @param stream A pointer to an open stream previously created with Pa_OpenStream. @param buffer A pointer to a buffer of sample frames. The buffer contains samples in the format specified by the inputParameters->sampleFormat field used to open the stream, and the number of channels specified by inputParameters->numChannels. If non-interleaved samples were requested, buffer is a pointer to the first element of an array of non-interleaved buffer pointers, one for each channel. @param frames The number of frames to be read into buffer. This parameter is not constrained to a specific range, however high performance applications will want to match this parameter to the framesPerBuffer parameter used when opening the stream. @return On success PaNoError will be returned, or PaInputOverflowed if input data was discarded by PortAudio after the previous call and before this call. */ PaError Pa_ReadStream( PaStream* stream, void *buffer, unsigned long frames ); /** Write samples to an output stream. This function doesn't return until the entire buffer has been consumed - this may involve waiting for the operating system to consume the data. @param stream A pointer to an open stream previously created with Pa_OpenStream. @param buffer A pointer to a buffer of sample frames. The buffer contains samples in the format specified by the outputParameters->sampleFormat field used to open the stream, and the number of channels specified by outputParameters->numChannels. If non-interleaved samples were requested, buffer is a pointer to the first element of an array of non-interleaved buffer pointers, one for each channel. @param frames The number of frames to be written from buffer. This parameter is not constrained to a specific range, however high performance applications will want to match this parameter to the framesPerBuffer parameter used when opening the stream. @return On success PaNoError will be returned, or paOutputUnderflowed if additional output data was inserted after the previous call and before this call. */ PaError Pa_WriteStream( PaStream* stream, const void *buffer, unsigned long frames ); /** Retrieve the number of frames that can be read from the stream without waiting. @return Returns a non-negative value representing the maximum number of frames that can be read from the stream without blocking or busy waiting or, a PaErrorCode (which are always negative) if PortAudio is not initialized or an error is encountered. */ signed long Pa_GetStreamReadAvailable( PaStream* stream ); /** Retrieve the number of frames that can be written to the stream without waiting. @return Returns a non-negative value representing the maximum number of frames that can be written to the stream without blocking or busy waiting or, a PaErrorCode (which are always negative) if PortAudio is not initialized or an error is encountered. */ signed long Pa_GetStreamWriteAvailable( PaStream* stream ); /* Miscellaneous utilities */ /** Retrieve the size of a given sample format in bytes. @return The size in bytes of a single sample in the specified format, or paSampleFormatNotSupported if the format is not supported. */ PaError Pa_GetSampleSize( PaSampleFormat format ); /** Put the caller to sleep for at least 'msec' milliseconds. This function is provided only as a convenience for authors of portable code (such as the tests and examples in the PortAudio distribution.) The function may sleep longer than requested so don't rely on this for accurate musical timing. */ void Pa_Sleep( long msec ); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* PORTAUDIO_H */ MilkyTracker-1.02.00/src/milkyplay/drivers/haiku/000077500000000000000000000000001324432207300216345ustar00rootroot00000000000000MilkyTracker-1.02.00/src/milkyplay/drivers/haiku/AudioDriver_Haiku.cpp000066400000000000000000000103111324432207300256720ustar00rootroot00000000000000/* * Copyright (c) 2012, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ #include "AudioDriver_Haiku.h" #include "MasterMixer.h" #include #include #include #include #include #include AudioDriver_Haiku::AudioDriver_Haiku() : AudioDriverBase(), fSoundPlayer(NULL) { } AudioDriver_Haiku::~AudioDriver_Haiku() { delete fSoundPlayer; } // #pragma mark - AudioDriverBase API mp_sint32 AudioDriver_Haiku::initDevice(mp_sint32 bufferSizeInWords, mp_uint32 mixFrequency, MasterMixer* mixer) { mp_sint32 result = AudioDriverBase::initDevice(bufferSizeInWords, mixFrequency, mixer); if (result < 0) return result; media_raw_audio_format format; format.frame_rate = mixFrequency; format.channel_count = kChannelCount; format.format = media_raw_audio_format::B_AUDIO_SHORT; format.byte_order = B_MEDIA_LITTLE_ENDIAN; format.buffer_size = bufferSizeInWords * sizeof(mp_sword); fSoundPlayer = new BSoundPlayer(&format, "Milky sound", _FillBuffer, NULL, this); status_t status = fSoundPlayer->InitCheck(); if (status != B_OK) { fprintf(stderr, "AudioDriver_Haiku: failed to initialize " "BSoundPlayer\n"); return MP_DEVICE_ERROR; } return MP_OK; } mp_sint32 AudioDriver_Haiku::closeDevice() { fSoundPlayer->SetHasData(false); fSoundPlayer->Stop(true); delete fSoundPlayer; fSoundPlayer = NULL; return MP_OK; } mp_sint32 AudioDriver_Haiku::start() { status_t status = fSoundPlayer->Start(); if (status != B_OK) { fprintf(stderr, "AudioDriver_Haiku: failed to start BSoundPlayer\n"); return MP_DEVICE_ERROR; } fSoundPlayer->SetHasData(true); return MP_OK; } mp_sint32 AudioDriver_Haiku::stop() { fSoundPlayer->SetHasData(false); fSoundPlayer->Stop(true); return MP_OK; } mp_sint32 AudioDriver_Haiku::pause() { fSoundPlayer->SetHasData(false); } mp_sint32 AudioDriver_Haiku::resume() { fSoundPlayer->SetHasData(true); } mp_uint32 AudioDriver_Haiku::getNumPlayedSamples() const { bigtime_t time = fSoundPlayer->CurrentTime(); float samples = ((float)time / 1000000.0f) * mixFrequency; return (mp_uint32)samples; } mp_sint32 AudioDriver_Haiku::getPreferredBufferSize() const { float frameRate = getPreferredSampleRate(); return BMediaRoster::Roster()->AudioBufferSizeFor(kChannelCount, media_raw_audio_format::B_AUDIO_SHORT, frameRate, B_UNKNOWN_BUS); } // #pragma mark - MediaKit playback void AudioDriver_Haiku::_FillBuffer(void* theCookie, void* buffer, size_t size, const media_raw_audio_format& format) { AudioDriver_Haiku* audioDriver = (AudioDriver_Haiku*)theCookie; MasterMixer* mixer = audioDriver->mixer; if (audioDriver->isMixerActive()) mixer->mixerHandler((mp_sword*)buffer); else memset(buffer, 0, size); } MilkyTracker-1.02.00/src/milkyplay/drivers/haiku/AudioDriver_Haiku.h000066400000000000000000000053261324432207300253510ustar00rootroot00000000000000/* * Copyright (c) 2012, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ #ifndef __AUDIODRIVER_HAIKU_H__ #define __AUDIODRIVER_HAIKU_H__ #include "AudioDriverBase.h" #include class BSoundPlayer; struct media_raw_audio_format; enum { kChannelCount = 2 }; class AudioDriver_Haiku : public AudioDriverBase { public: AudioDriver_Haiku(); virtual ~AudioDriver_Haiku(); // --- AudioDriverBase API ---------------------------------------------------- public: virtual mp_sint32 initDevice(mp_sint32 bufferSizeInWords, mp_uint32 mixFrequency, MasterMixer* mixer); virtual mp_sint32 closeDevice(); virtual mp_sint32 start(); virtual mp_sint32 stop(); virtual mp_sint32 pause(); virtual mp_sint32 resume(); virtual mp_uint32 getNumPlayedSamples() const; virtual bool supportsTimeQuery() const { return false; } virtual const char* getDriverID() { return "Haiku MediaKit"; } virtual mp_sint32 getPreferredBufferSize() const; // --- MediaKit playback ------------------------------------------------------ private: static void _FillBuffer(void* theCookie, void* buffer, size_t size, const media_raw_audio_format& format); BSoundPlayer* fSoundPlayer; }; #endif // __AUDIODRIVER_HAIKU_H__ MilkyTracker-1.02.00/src/milkyplay/drivers/jack/000077500000000000000000000000001324432207300214435ustar00rootroot00000000000000MilkyTracker-1.02.00/src/milkyplay/drivers/jack/AudioDriver_JACK.cpp000066400000000000000000000156541324432207300251670ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * AudioDriver_JACK.cpp * JACK Audio * * Created by Christopher O'Neill on 8/12/07 * * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif // Hack to simplify build scripts #ifdef HAVE_JACK_JACK_H #include #include #include #include #include "AudioDriver_JACK.h" int AudioDriver_JACK::jackProcess(jack_nframes_t nframes, void *arg) { jack_default_audio_sample_t *leftBuffer, *rightBuffer; AudioDriver_JACK* audioDriver = (AudioDriver_JACK*)arg; if(audioDriver->paused) return 0; // This could change, we need to setup a callback to deal with it // But for now, just panic assert(nframes == audioDriver->jackFrames); leftBuffer = (jack_default_audio_sample_t*) audioDriver->jack_port_get_buffer(audioDriver->leftPort, nframes); rightBuffer = (jack_default_audio_sample_t*) audioDriver->jack_port_get_buffer(audioDriver->rightPort, nframes); audioDriver->fillAudioWithCompensation((char*)audioDriver->rawStream, nframes * 4); // JACK uses non-interleaved floating-point samples, we need to convert for(int out = 0, in = 0; in < nframes; in++) { leftBuffer[in] = audioDriver->rawStream[out++] * (1.0/32768.0); rightBuffer[in] = audioDriver->rawStream[out++] * (1.0/32768.0); } return 0; } AudioDriver_JACK::AudioDriver_JACK() : AudioDriver_COMPENSATE(), paused(false), rawStream(NULL) { } AudioDriver_JACK::~AudioDriver_JACK() { if(rawStream) delete[] rawStream; } // On error return a negative value // If the requested buffer size can be served return 0, // otherwise return the number of 16 bit words contained in the obtained buffer mp_sint32 AudioDriver_JACK::initDevice(mp_sint32 bufferSizeInWords, mp_uint32 mixFrequency, MasterMixer* mixer) { // First load libjack libJack = dlopen("libjack.so", RTLD_LAZY); if(!libJack) { fprintf(stderr, "JACK: Can't load libjack (is it installed?)\n"); return -1; } // Get function addresses // Each function has to be cast.. surely there must be an easier way? dlerror(); jack_port_get_buffer = (void* (*)(jack_port_t*, jack_nframes_t)) dlsym(libJack, "jack_port_get_buffer"); jack_client_new = (jack_client_t* (*)(const char*)) dlsym(libJack, "jack_client_new"); jack_port_register = (jack_port_t* (*)(jack_client_t*, const char*, const char*, long unsigned int, long unsigned int)) dlsym(libJack, "jack_port_register"); jack_set_process_callback = (int (*)(jack_client_t*, int (*)(jack_nframes_t, void*), void*)) dlsym(libJack, "jack_set_process_callback"); jack_get_buffer_size = (jack_nframes_t (*)(jack_client_t*)) dlsym(libJack, "jack_get_buffer_size"); jack_deactivate = (int (*)(jack_client_t*)) dlsym(libJack, "jack_deactivate"); jack_client_close = (int (*)(jack_client_t*)) dlsym(libJack, "jack_client_close"); jack_activate = (int (*)(jack_client_t*)) dlsym(libJack, "jack_activate"); jack_get_sample_rate = (jack_nframes_t (*)(jack_client_t *)) dlsym(libJack, "jack_get_sample_rate"); jack_get_ports = (const char** (*)(jack_client_t *, const char *, const char *, unsigned long)) dlsym(libJack, "jack_get_ports"); jack_connect = (int (*)(jack_client_t *, const char *source_port, const char *destination_port)) dlsym(libJack, "jack_connect"); jack_port_name = (const char* (*)(const jack_port_t *)) dlsym(libJack, "jack_port_name"); if(dlerror()) { fprintf(stderr, "JACK: An error occurred whilst loading symbols, aborting.\n"); return -1; } mp_sint32 res = AudioDriverBase::initDevice(bufferSizeInWords, mixFrequency, mixer); if (res < 0) return res; // Connect to JACK hJack = jack_client_new("Milkytracker"); if (!hJack) { fprintf(stderr, "JACK: Can't connect to JACK (is it running?)\n"); return -1; } // Register ports leftPort = jack_port_register(hJack, "Left", JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0); rightPort = jack_port_register(hJack, "Right", JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0); if(!leftPort || !rightPort) { fprintf(stderr, "JACK: Failed to register ports\n"); return -1; } // Set callback jack_set_process_callback(hJack, jackProcess, (void *) this); // Get buffer-size jackFrames = jack_get_buffer_size(hJack); bufferSize = jackFrames * 2; this->mixFrequency = jack_get_sample_rate(hJack); printf("JACK: Mixer frequency: %i\n", this->mixFrequency); //delete[] rawStream; // pailes: make sure this isn't allocated yet assert(!rawStream); // If it is allocated, something went wrong and we need to know about it rawStream = new mp_sword[bufferSize]; printf("JACK: Latency = %i frames\n", jackFrames); return bufferSize; } mp_sint32 AudioDriver_JACK::stop() { jack_deactivate(hJack); deviceHasStarted = false; return 0; } mp_sint32 AudioDriver_JACK::closeDevice() { deviceHasStarted = false; jack_client_close(hJack); if(rawStream) delete[] rawStream; rawStream = NULL; dlclose(libJack); libJack = NULL; return 0; } mp_sint32 AudioDriver_JACK::start() { jack_get_ports = (const char** (*)(jack_client_t *, const char *, const char *, unsigned long)) dlsym(libJack, "jack_get_ports"); jack_connect = (int (*)(jack_client_t *, const char *source_port, const char *destination_port)) dlsym(libJack, "jack_connect"); jack_port_name = (const char* (*)(const jack_port_t *)) dlsym(libJack, "jack_port_name"); jack_activate(hJack); deviceHasStarted = true; return 0; } mp_sint32 AudioDriver_JACK::pause() { paused = true; return 0; } mp_sint32 AudioDriver_JACK::resume() { paused = false; return 0; } #endif MilkyTracker-1.02.00/src/milkyplay/drivers/jack/AudioDriver_JACK.h000066400000000000000000000070761324432207300246330ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * AudioDriver_JACK.h * JACK Audio * * Created by Christopher O'Neill on 8/12/07 * * */ #ifndef __AUDIODRIVER_JACK_H__ #define __AUDIODRIVER_JACK_H__ #include "AudioDriver_COMPENSATE.h" #include class AudioDriver_JACK : public AudioDriver_COMPENSATE { private: jack_client_t *hJack; jack_port_t *leftPort, *rightPort; mp_sword *rawStream; int jackFrames; bool paused; void *libJack; static int jackProcess(jack_nframes_t nframes, void *arg); // Jack library functions jack_client_t *(*jack_client_new) (const char *client_name); int (*jack_client_close) (jack_client_t *client); int (*jack_set_process_callback) (jack_client_t *client, JackProcessCallback process_callback, void *arg); int (*jack_activate) (jack_client_t *client); int (*jack_deactivate) (jack_client_t *client); jack_port_t *(*jack_port_register) (jack_client_t *client, const char *port_name, const char *port_type, unsigned long flags, unsigned long buffer_size); void *(*jack_port_get_buffer) (jack_port_t *, jack_nframes_t); jack_nframes_t (*jack_get_buffer_size) (jack_client_t *); jack_nframes_t (*jack_get_sample_rate) (jack_client_t *); const char ** (*jack_get_ports) (jack_client_t *, const char *port_name_pattern, const char *type_name_pattern, unsigned long flags); int (*jack_connect) (jack_client_t *, const char *source_port, const char *destination_port); const char* (*jack_port_name) (const jack_port_t *); public: AudioDriver_JACK(); virtual ~AudioDriver_JACK(); virtual mp_sint32 initDevice(mp_sint32 bufferSizeInWords, mp_uint32 mixFrequency, MasterMixer* mixer); virtual mp_sint32 closeDevice(); virtual mp_sint32 start(); virtual mp_sint32 stop(); virtual mp_sint32 pause(); virtual mp_sint32 resume(); virtual bool supportsPowerOfTwoCompensation() { return true; } virtual const char* getDriverID() { return "JACK"; } virtual mp_sint32 getPreferredBufferSize() const { return 2048; } }; #endif MilkyTracker-1.02.00/src/milkyplay/drivers/osx/000077500000000000000000000000001324432207300213445ustar00rootroot00000000000000MilkyTracker-1.02.00/src/milkyplay/drivers/osx/AudioDriver_COREAUDIO.h000066400000000000000000000060061324432207300253260ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * AudioDriver.h * MilkyPlay * * Created by Peter Barth on Fri Sep 10 2004. * */ #ifndef __AUDIODRIVER_COREAUDIO_H__ #define __AUDIODRIVER_COREAUDIO_H__ #include #include #include "AudioDriverBase.h" class AudioDriver_COREAUDIO : public AudioDriverBase { private: bool defaultDevice; char* driverID; mp_uint32 sampleCounter; mp_sword* compensateBuffer; AudioObjectID audioDeviceID; mp_sint32 lastError; AudioDeviceIOProcID audioIOProcID; bool deviceHasStarted; static OSStatus audioIOProc(AudioObjectID inDevice, const AudioTimeStamp* inNow, const AudioBufferList* inInputData, const AudioTimeStamp* inInputTime, AudioBufferList* outOutputData, const AudioTimeStamp* inOutputTime, void* inClientData); public: AudioDriver_COREAUDIO(); AudioDriver_COREAUDIO(AudioObjectID deviceID); virtual ~AudioDriver_COREAUDIO(); virtual mp_sint32 initDevice(mp_sint32 bufferSizeInWords, mp_uint32 mixFrequency, MasterMixer* mixer); virtual mp_sint32 closeDevice(); virtual mp_sint32 start(); virtual mp_sint32 stop(); virtual mp_sint32 pause(); virtual mp_sint32 resume(); virtual mp_uint32 getNumPlayedSamples() const { return sampleCounter; } virtual const char* getDriverID(); virtual mp_sint32 getPreferredBufferSize() const { return 1024; } static OSStatus getAudioDevices(mp_uint32 &numDevices, AudioObjectID* &deviceIDs); }; #endif MilkyTracker-1.02.00/src/milkyplay/drivers/osx/AudioDriver_COREAUDIO.mm000066400000000000000000000315641324432207300255170ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * AudioDriver_COREAUDIO.cpp * MilkyPlay * * The base of this code was a MikMod CoreAudio driver by Fruitz^Dojo * It was heavily modified and improved to deal with some strange behaviour * of my G4 Cube USB speakers. It seems to be rather solid now. */ #include "AudioDriver_COREAUDIO.h" #include "MasterMixer.h" #include #define CHECK_ERROR(ERRNO, RESULT) \ if (RESULT != kAudioHardwareNoError) \ { \ lastError = ERRNO; \ return MP_DEVICE_ERROR; \ } #define MPERR_DETECTING_DEVICE -1 #define MPERR_OSX_UNKNOWN_DEVICE -2 #define MPERR_OSX_BAD_PROPERTY -3 #define MPERR_OSX_UNSUPPORTED_FORMAT -4 #define MPERR_OSX_BUFFER_ALLOC -5 #define MPERR_OSX_ADD_IO_PROC -6 #define MPERR_OUT_OF_MEMORY -7 #define MPERR_OSX_DEVICE_START -8 OSStatus AudioDriver_COREAUDIO::audioIOProc(AudioObjectID inDevice, const AudioTimeStamp* inNow, const AudioBufferList* inInputData, const AudioTimeStamp* inInputTime, AudioBufferList* outOutputData, const AudioTimeStamp* inOutputTime, void* inClientData) { float* outputBuffer = (float *) outOutputData->mBuffers[0].mData; AudioDriver_COREAUDIO* audioDriver = reinterpret_cast(inClientData); MasterMixer* mixer = audioDriver->mixer; mp_sword* inputBuffer = audioDriver->compensateBuffer; UInt32 numFrames = outOutputData->mBuffers[0].mDataByteSize / outOutputData->mBuffers[0].mNumberChannels / sizeof(float); audioDriver->sampleCounter += numFrames; if (audioDriver->isMixerActive()) mixer->mixerHandler(inputBuffer); else memset(inputBuffer, 0, numFrames * MP_NUMCHANNELS * sizeof(mp_sword)); // Core Audio always uses floats for its buffers, so we need to do a conversion if (audioDriver->mono) { for (int i = 0; i < numFrames; i++) { outputBuffer[i] = (inputBuffer[i * 2] + inputBuffer[i * 2 + 1]) / (32768.0f * 2.0f); } } else { UInt32 channelsPerFrame = outOutputData->mBuffers[0].mNumberChannels; for (int i = 0; i < numFrames; i++) { outputBuffer[i * channelsPerFrame] = inputBuffer[i * 2] / 32768.0f; outputBuffer[i * channelsPerFrame + 1] = inputBuffer[i * 2 + 1] / 32768.0f; } } return kAudioHardwareNoError; } AudioDriver_COREAUDIO::AudioDriver_COREAUDIO() : AudioDriverBase(), defaultDevice(true), driverID(NULL), sampleCounter(0), compensateBuffer(NULL), audioIOProcID(NULL), deviceHasStarted(false) { } AudioDriver_COREAUDIO::AudioDriver_COREAUDIO(AudioObjectID deviceID) : AudioDriverBase(), defaultDevice(false), driverID(NULL), sampleCounter(0), compensateBuffer(NULL), audioDeviceID(deviceID), audioIOProcID(NULL), deviceHasStarted(false) { } AudioDriver_COREAUDIO::~AudioDriver_COREAUDIO() { delete[] compensateBuffer; if (driverID) delete[] driverID; } // -------------------------------------------------- // Get the name of the sound device from Core Audio // -------------------------------------------------- const char* AudioDriver_COREAUDIO::getDriverID() { if (defaultDevice) return "Default Output Device"; if (!driverID) { OSStatus err = noErr; mp_uint32 dataSize = sizeof(CFStringRef); CFStringRef deviceName; AudioObjectPropertyAddress propertyAddress = { kAudioObjectPropertyName, kAudioObjectPropertyScopeGlobal, kAudioObjectPropertyElementMaster }; err = AudioObjectGetPropertyData(audioDeviceID, &propertyAddress, 0, NULL, &dataSize, &deviceName); if (err != kAudioHardwareNoError) return "Unnamed Device"; CFIndex strLen = CFStringGetLength(deviceName); CFIndex bufSize = CFStringGetMaximumSizeForEncoding(strLen, kCFStringEncodingUTF8); driverID = new char[bufSize]; CFStringGetCString(deviceName, driverID, bufSize, kCFStringEncodingUTF8); CFRelease(deviceName); } return driverID; } // ---------------------------------------------------------------------- // Gets number of output devices, creates an array of output device IDs // ---------------------------------------------------------------------- OSStatus AudioDriver_COREAUDIO::getAudioDevices(mp_uint32 &numDevices, AudioObjectID* &deviceIDs) { OSStatus err = noErr; mp_uint32 dataSize = 0; mp_uint32 numAudioDevices = 0; mp_uint32 numOutputDevices = 0; AudioObjectPropertyAddress propertyAddress = { kAudioHardwarePropertyDevices, kAudioObjectPropertyScopeGlobal, kAudioObjectPropertyElementMaster }; // Find out how many audio devices exist on the system (including input devices) err = AudioObjectGetPropertyDataSize(kAudioObjectSystemObject, &propertyAddress, 0, NULL, &dataSize); if (err) return err; // Temporary arrays to hold device IDs numAudioDevices = dataSize / sizeof(AudioObjectID); AudioObjectID allDeviceIDs[numAudioDevices]; AudioObjectID outputDeviceIDs[numAudioDevices]; // Get all of the device IDs err = AudioObjectGetPropertyData(kAudioObjectSystemObject, &propertyAddress, 0, NULL, &dataSize, allDeviceIDs); if (err) return err; // Check each device ID for output channels propertyAddress.mSelector = kAudioDevicePropertyStreams; propertyAddress.mScope = kAudioDevicePropertyScopeOutput; for (int i = 0; i < numAudioDevices; i++) { dataSize = 0; err = AudioObjectGetPropertyDataSize(allDeviceIDs[i], &propertyAddress, 0, NULL, &dataSize); if (err) return err; mp_uint32 numOutputChannels = dataSize / sizeof(AudioObjectID); // Skip this device ID if there are no output channels if (numOutputChannels < 1) continue; // Otherwise add it to our array outputDeviceIDs[numOutputDevices] = allDeviceIDs[i]; numOutputDevices++; } // Store device count and output device IDs numDevices = numOutputDevices; deviceIDs = new AudioObjectID[numOutputDevices]; memcpy(deviceIDs, outputDeviceIDs, numOutputDevices * sizeof(AudioObjectID)); return kAudioHardwareNoError; } mp_sint32 AudioDriver_COREAUDIO::initDevice(mp_sint32 bufferSizeInWords, mp_uint32 mixFrequency, MasterMixer* mixer) { mp_sint32 res = AudioDriverBase::initDevice(bufferSizeInWords, mixFrequency, mixer); if (res < 0) return res; // Reset the sample counter sampleCounter = 0; UInt32 propertySize; AudioObjectPropertyAddress propertyAddress = { 0, kAudioObjectPropertyScopeGlobal, kAudioObjectPropertyElementMaster }; if (defaultDevice) { // Get the default output device propertySize = sizeof (audioDeviceID); propertyAddress.mSelector = kAudioHardwarePropertyDefaultOutputDevice; CHECK_ERROR ( MPERR_DETECTING_DEVICE, AudioObjectGetPropertyData(kAudioObjectSystemObject, &propertyAddress, 0, NULL, &propertySize, &audioDeviceID) ); if (audioDeviceID == kAudioDeviceUnknown) { lastError = MPERR_OSX_UNKNOWN_DEVICE; return MP_DEVICE_ERROR; } } // Get the stream format AudioStreamBasicDescription basicDescription; propertySize = sizeof (basicDescription); propertyAddress.mSelector = kAudioStreamPropertyVirtualFormat; CHECK_ERROR ( MPERR_OSX_BAD_PROPERTY, AudioObjectGetPropertyData(audioDeviceID, &propertyAddress, 0, NULL, &propertySize, &basicDescription) ); // Linear PCM is required if (basicDescription.mFormatID != kAudioFormatLinearPCM) { lastError = MPERR_OSX_UNSUPPORTED_FORMAT; return MP_DEVICE_ERROR; } // Check we actually have an output channel if (basicDescription.mChannelsPerFrame < 1) return MP_DEVICE_ERROR; // Check the requested mix frequency if (basicDescription.mSampleRate != mixFrequency) { // Get the supported sample rates CHECK_ERROR ( MPERR_OSX_BAD_PROPERTY, AudioObjectGetPropertyDataSize(audioDeviceID, &propertyAddress, 0, NULL, &propertySize) ); UInt32 numRates = propertySize / sizeof(AudioValueRange); AudioValueRange supportedSampleRates[numRates]; propertyAddress.mSelector = kAudioDevicePropertyAvailableNominalSampleRates; CHECK_ERROR ( MPERR_OSX_BAD_PROPERTY, AudioObjectGetPropertyData(audioDeviceID, &propertyAddress, 0, NULL, &propertySize, &supportedSampleRates) ); // See if our requested mix frequency is supported by the device AudioValueRange* newSampleRate = NULL; for (size_t i = 0; i < numRates; i++) { if (supportedSampleRates[i].mMinimum == mixFrequency) { newSampleRate = &supportedSampleRates[i]; break; } } // No: bail out if (!newSampleRate) { NSLog(@"Core Audio: Device doesn't support mix frequency of %dHz\n", mixFrequency); lastError = MPERR_OSX_UNSUPPORTED_FORMAT; return MP_DEVICE_ERROR; } // Yes: set it propertySize = sizeof (AudioValueRange); propertyAddress.mSelector = kAudioDevicePropertyNominalSampleRate; CHECK_ERROR ( MPERR_OSX_BAD_PROPERTY, AudioObjectSetPropertyData(audioDeviceID, &propertyAddress, 0, NULL, propertySize, newSampleRate) ); } // Force stereo -> mono conversion if driver only supports mono if (basicDescription.mChannelsPerFrame == 1) mono = true; // Find valid frame size range AudioValueRange frameSizeRange; propertySize = sizeof(AudioValueRange); propertyAddress.mSelector = kAudioDevicePropertyBufferFrameSizeRange; CHECK_ERROR ( MPERR_OSX_BUFFER_ALLOC, AudioObjectGetPropertyData(audioDeviceID, &propertyAddress, 0, NULL, &propertySize, &frameSizeRange) ); // Number of frames = buffer size / 2 UInt32 bufferFrameSize = bufferSizeInWords >> 1 >> (mono ? 1 : 0); // If requested buffer size is too large, set it to the device's maximum if (bufferFrameSize > frameSizeRange.mMaximum) bufferFrameSize = frameSizeRange.mMaximum; // Set buffer size propertyAddress.mSelector = kAudioDevicePropertyBufferFrameSize; CHECK_ERROR ( MPERR_OSX_BUFFER_ALLOC, AudioObjectSetPropertyData(audioDeviceID, &propertyAddress, 0, NULL, sizeof(bufferFrameSize), &bufferFrameSize) ); bufferSize = bufferFrameSize; // Add our audio IO procedure CHECK_ERROR ( MPERR_OSX_ADD_IO_PROC, AudioDeviceCreateIOProcID(audioDeviceID, audioIOProc, (void*)this, &audioIOProcID) ); // If the IOProcID is null, something went wrong if (!audioIOProcID) { lastError = MPERR_OSX_ADD_IO_PROC; return MP_DEVICE_ERROR; } deviceHasStarted = false; // Allocate a buffer for the mixer to fill during our IOProc if (compensateBuffer) delete[] compensateBuffer; compensateBuffer = new mp_sword[bufferSizeInWords]; NSLog(@"Core Audio: Wanted %d bytes, got %d\n", bufferSizeInWords / 2 * 4, bufferFrameSize * 4); // If we got what we requested, return MP_OK, otherwise return the actual number of frames * number of channels return bufferSizeInWords / 2 == (signed) bufferSize ? MP_OK : bufferFrameSize * 2; } mp_sint32 AudioDriver_COREAUDIO::closeDevice() { if (audioIOProcID) { AudioDeviceDestroyIOProcID(audioDeviceID, audioIOProcID); deviceHasStarted = false; } return MP_OK; } mp_sint32 AudioDriver_COREAUDIO::start() { if (!deviceHasStarted) { // Start the audio IO Proc if (AudioDeviceStart(audioDeviceID, audioIOProcID)) { lastError = MPERR_OSX_DEVICE_START; return MP_DEVICE_ERROR; } deviceHasStarted = true; } return MP_OK; } mp_sint32 AudioDriver_COREAUDIO::stop() { AudioDeviceStop(audioDeviceID, audioIOProcID); deviceHasStarted = false; return MP_OK; } mp_sint32 AudioDriver_COREAUDIO::pause() { return stop(); } mp_sint32 AudioDriver_COREAUDIO::resume() { return start(); } MilkyTracker-1.02.00/src/milkyplay/drivers/psp/000077500000000000000000000000001324432207300213355ustar00rootroot00000000000000MilkyTracker-1.02.00/src/milkyplay/drivers/psp/AudioDriver_PSP.cpp000066400000000000000000000222441324432207300250040ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * AudioDriver_PSP.cpp * PSP Audio * * Created by Shazz * * * */ #include "AudioDriver_PSP.h" #include #include "MasterMixer.h" #include #include #include #include #include #include #include #include #include #define PSP_AUDIO_CHANNEL 0 #define PSP_NB_CHANNELS 2 #define PSP_NUM_AUDIO_CHANNELS 4 /** This is the number of frames you can update per callback, a frame being * 1 sample for mono, 2 samples for stereo etc. */ #define PSP_NUM_AUDIO_SAMPLES 1024 #define PSP_VOLUME_MAX 0x8000 typedef void (* pspAudioCallback_t)(void *buf, unsigned int reqn, void *pdata); typedef struct { int threadhandle; int handle; int volumeleft; int volumeright; pspAudioCallback_t callback; void *pdata; } psp_audio_channelinfo; typedef int (* pspAudioThreadfunc_t)(int args, void *argp); // some function forward declarations static int pspAudioInit(); static void pspAudioEnd(); static void pspAudioSetChannelCallback(int channel, pspAudioCallback_t callback, void *pdata); static void pspAudioSetVolume(int channel, int left, int right); // ------------------------------ driver starts here ------------------------------ void AudioDriver_PSP::fill_audio(void *udata, unsigned int numSamples, void *userdata) { AudioDriver_PSP * audioDriver = (AudioDriver_PSP *)userdata; if(audioDriver->deviceHasStarted && audioDriver->mixer->isPlaying()) { audioDriver->fillAudioWithCompensation((char*)udata, numSamples*4); } else { // Not Playing , so clear buffer short * _buf = (short *) udata; unsigned int count; for (count = 0; count < numSamples * 2; count++) *(_buf + count) = 0; } } AudioDriver_PSP::AudioDriver_PSP() : AudioDriver_COMPENSATE(), didInit(false) { } AudioDriver_PSP::~AudioDriver_PSP() { stop(); if (didInit) { pspAudioEnd(); } } // On error return a negative value // If the requested buffer size can be served return 0, mp_sint32 AudioDriver_PSP::initDevice(mp_sint32 bufferSizeInWords, mp_uint32 mixFrequency, MasterMixer* mixer) { mp_sint32 res = AudioDriverBase::initDevice(bufferSizeInWords, mixFrequency, mixer); if (res < 0) return res; if (!didInit) { //printf("Opening audio PSPdriver, buffer size %u bytes at %u Hz\n", bufferSizeInWords, mixFrequency); pspAudioInit(); didInit = true; } return PSP_NUM_AUDIO_SAMPLES*PSP_NB_CHANNELS; } mp_sint32 AudioDriver_PSP::stop() { deviceHasStarted = false; pspAudioSetChannelCallback(PSP_AUDIO_CHANNEL, 0, NULL); return 0; } mp_sint32 AudioDriver_PSP::closeDevice() { if (deviceHasStarted) { deviceHasStarted = false; pspAudioSetChannelCallback(PSP_AUDIO_CHANNEL, 0, NULL); } return 0; } mp_sint32 AudioDriver_PSP::start() { deviceHasStarted = true; pspAudioSetChannelCallback(PSP_AUDIO_CHANNEL, fill_audio, (void*)this); return 0; } mp_sint32 AudioDriver_PSP::pause() { deviceHasStarted = false; pspAudioSetChannelCallback(PSP_AUDIO_CHANNEL, 0, NULL); return 0; } mp_sint32 AudioDriver_PSP::resume() { if (!deviceHasStarted) { deviceHasStarted = true; pspAudioSetChannelCallback(PSP_AUDIO_CHANNEL, fill_audio, (void*)this); } return 0; } // ------------------------------ modified PSP audiolib here ------------------------------ static int audio_ready=0; static short audio_sndbuf[PSP_NUM_AUDIO_CHANNELS][2][PSP_NUM_AUDIO_SAMPLES][2]; static psp_audio_channelinfo AudioStatus[PSP_NUM_AUDIO_CHANNELS]; static volatile int audio_terminate=0; static SceUID semaID; static void enterCriticalSection() { if(semaID > 0) { sceKernelWaitSema(semaID, 1, NULL); } } static void leaveCriticalSection() { if(semaID > 0) { sceKernelSignalSema(semaID, 1); } } static void pspAudioSetVolume(int channel, int left, int right) { AudioStatus[channel].volumeright = right; AudioStatus[channel].volumeleft = left; } //static void pspAudioChannelThreadCallback(int channel, void *buf, unsigned int reqn) //{ // pspAudioCallback_t callback; // callback=AudioStatus[channel].callback; //} static void pspAudioSetChannelCallback(int channel, pspAudioCallback_t callback, void *pdata) { enterCriticalSection(); volatile psp_audio_channelinfo *pci = &AudioStatus[channel]; pci->callback=0; pci->pdata=pdata; pci->callback=callback; leaveCriticalSection(); } static int pspAudioOutBlocking(unsigned int channel, unsigned int vol1, unsigned int vol2, void *buf) { if (!audio_ready) return -1; if (channel>=PSP_NUM_AUDIO_CHANNELS) return -1; if (vol1>PSP_VOLUME_MAX) vol1=PSP_VOLUME_MAX; if (vol2>PSP_VOLUME_MAX) vol2=PSP_VOLUME_MAX; return sceAudioOutputPannedBlocking(AudioStatus[channel].handle,vol1,vol2,buf); } static int AudioChannelThread(SceSize args, void *argp) { volatile int bufidx=0; int channel=*(int *)argp; while (audio_terminate==0) { void *bufptr=&audio_sndbuf[channel][bufidx]; pspAudioCallback_t callback; enterCriticalSection(); callback=AudioStatus[channel].callback; if (callback) { callback(bufptr, PSP_NUM_AUDIO_SAMPLES, AudioStatus[channel].pdata); } else { unsigned int *ptr=(unsigned int*)bufptr; int i; for (i=0; i 0) sceKernelDeleteSema(semaID); } /**************************************************************************************/ MilkyTracker-1.02.00/src/milkyplay/drivers/psp/AudioDriver_PSP.h000066400000000000000000000047311324432207300244520ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * AudioDriver_PSP.h * PSPAudio * * Created by Shazz * */ #ifndef __AUDIODRIVER_PSP_H__ #define __AUDIODRIVER_PSP_H__ #include "AudioDriver_COMPENSATE.h" class AudioDriver_PSP : public AudioDriver_COMPENSATE { private: mp_uint32 psp_channel; bool didInit; static void fill_audio(void *udata, unsigned int numSamples, void *userdata); public: AudioDriver_PSP(); virtual ~AudioDriver_PSP(); virtual mp_sint32 initDevice(mp_sint32 bufferSizeInWords, mp_uint32 mixFrequency, MasterMixer* mixer); virtual mp_sint32 closeDevice(); virtual mp_sint32 start(); virtual mp_sint32 stop(); virtual mp_sint32 pause(); virtual mp_sint32 resume(); virtual const char* getDriverID() { return "PSPAudio"; } virtual mp_sint32 getPreferredSampleRate() const { return 44100; } virtual mp_sint32 getPreferredBufferSize() const { return 1024; } }; #endif /* __AUDIODRIVER_PSP_H__ */ MilkyTracker-1.02.00/src/milkyplay/drivers/sdl/000077500000000000000000000000001324432207300213155ustar00rootroot00000000000000MilkyTracker-1.02.00/src/milkyplay/drivers/sdl/AudioDriver_SDL.cpp000066400000000000000000000116761324432207300247530ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. * * AudioDriver_SDL.cpp * MilkyPlay * * Created by Peter Barth on 09.06.05. * * 12/5/14 - Dale Whinham * - Port to SDL2 * * 16/3/06 - Christopher O'Neill * - fill_audio() rewritten to solve issues on certain systems * */ #include "AudioDriver_SDL.h" void SDLCALL AudioDriver_SDL::fill_audio(void *udata, Uint8 *stream, int length) { AudioDriver_SDL* audioDriver = (AudioDriver_SDL*)udata; if(length>>2 != audioDriver->periodSize) { fprintf(stderr, "SDL: Invalid buffer size: %i (should be %i), skipping..\n", length >> 2, audioDriver->periodSize); } // See comment in AudioDriver_ALSA.cpp else { audioDriver->fillAudioWithCompensation((char*)stream, length); } } AudioDriver_SDL::AudioDriver_SDL() : AudioDriver_COMPENSATE() { } AudioDriver_SDL::~AudioDriver_SDL() { } // On error return a negative value // If the requested buffer size can be served return MP_OK, // otherwise return the number of 16 bit words contained in the obtained buffer mp_sint32 AudioDriver_SDL::initDevice(mp_sint32 bufferSizeInWords, mp_uint32 mixFrequency, MasterMixer* mixer) { SDL_AudioSpec wanted, obtained, saved; char name[32]; mp_sint32 res = AudioDriverBase::initDevice(bufferSizeInWords, mixFrequency, mixer); if (res < 0) { return res; } wanted.freq = mixFrequency; wanted.format = AUDIO_S16SYS; wanted.channels = 2; /* 1 = mono, 2 = stereo */ wanted.samples = bufferSizeInWords / wanted.channels; /* Good low-latency value for callback */ wanted.callback = fill_audio; wanted.userdata = (void*)this; mp_sint32 finalWantedSize = wanted.samples * wanted.channels; // Some soundcard drivers modify the wanted structure, so we copy it here memcpy(&saved, &wanted, sizeof(wanted)); if(SDL_OpenAudio(&wanted, &obtained) < 0) { memcpy(&wanted, &saved, sizeof(wanted)); fprintf(stderr, "SDL: Failed to open audio device! (buffer = %d bytes)..\n", saved.samples*4); fprintf(stderr, "SDL: Try setting \"Force 2^n sizes\" in the config menu and restarting.\n"); return MP_DEVICE_ERROR; } printf("SDL: Using audio driver: %s\n", SDL_GetCurrentAudioDriver()); if(wanted.format != obtained.format) { fprintf(stderr, "SDL: Audio driver doesn't support 16-bit signed samples!\n"); return MP_DEVICE_ERROR; } if (wanted.channels != obtained.channels) { fprintf(stderr, "SDL: Failed to obtain requested audio format. Suggested format:\n"); fprintf(stderr, "SDL: Frequency: %d\nChannels: %d\n", obtained.freq, obtained.channels); return MP_DEVICE_ERROR; } // fallback for obtained sample rate if (wanted.freq != obtained.freq) { this->mixFrequency = obtained.freq; } printf("SDL: Buffer size = %i samples (requested %i)\n", obtained.samples, finalWantedSize / wanted.channels); periodSize = obtained.samples; // If we got what we requested, return MP_OK, // otherwise return the actual number of samples * number of channels return (bufferSizeInWords / wanted.channels == obtained.samples) ? MP_OK : obtained.samples * obtained.channels; } mp_sint32 AudioDriver_SDL::stop() { SDL_PauseAudio(1); deviceHasStarted = false; return MP_OK; } mp_sint32 AudioDriver_SDL::closeDevice() { SDL_CloseAudio(); deviceHasStarted = false; return MP_OK; } mp_sint32 AudioDriver_SDL::start() { SDL_PauseAudio(0); deviceHasStarted = true; return MP_OK; } mp_sint32 AudioDriver_SDL::pause() { SDL_PauseAudio(1); return MP_OK; } mp_sint32 AudioDriver_SDL::resume() { SDL_PauseAudio(0); return MP_OK; } MilkyTracker-1.02.00/src/milkyplay/drivers/sdl/AudioDriver_SDL.h000066400000000000000000000046141324432207300244120ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * AudioDriver_SDL.h * MilkyPlay * * Created by Peter Barth on 09.06.05. * */ #ifndef __AUDIODRIVER_SDL_H__ #define __AUDIODRIVER_SDL_H__ #include #include #include "AudioDriver_COMPENSATE.h" class AudioDriver_SDL : public AudioDriver_COMPENSATE { private: mp_uint32 periodSize; static void SDLCALL fill_audio(void *udata, Uint8 *stream, int len); public: AudioDriver_SDL(); virtual ~AudioDriver_SDL(); virtual mp_sint32 initDevice(mp_sint32 bufferSizeInWords, mp_uint32 mixFrequency, MasterMixer* mixer); virtual mp_sint32 closeDevice(); virtual mp_sint32 start(); virtual mp_sint32 stop(); virtual mp_sint32 pause(); virtual mp_sint32 resume(); virtual const char* getDriverID() { return "SDLAudio"; } virtual mp_sint32 getPreferredBufferSize() const { return 2048; } }; #endif MilkyTracker-1.02.00/src/milkyplay/drivers/windows/000077500000000000000000000000001324432207300222255ustar00rootroot00000000000000MilkyTracker-1.02.00/src/milkyplay/drivers/windows/AudioDriver_MMSYSTEM.cpp000066400000000000000000000204071324432207300265070ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * AudioDriver_MMSYSTEM.cpp * MilkyPlay audiodriver */ #include "AudioDriver_MMSYSTEM.h" #include "MasterMixer.h" DWORD WINAPI AudioDriver_MMSYSTEM::ThreadProc(_In_ LPVOID lpParameter) { AudioDriver_MMSYSTEM* audioDriver = (AudioDriver_MMSYSTEM*)lpParameter; while (audioDriver->deviceOpen) { MSG msg; // Blocks until message received from waveOut GetMessage(&msg, NULL, 0, 0); if (msg.message == WOM_DONE) { ::waveOutUnprepareHeader(audioDriver->hwo, &audioDriver->wavhdr[audioDriver->currentBufferIndex], sizeof(WAVEHDR)); if (!audioDriver->deviceHasStarted) continue; EnterCriticalSection(&audioDriver->cs); audioDriver->sampleCounterTotal += audioDriver->bufferSize >> 1; audioDriver->kick(); LeaveCriticalSection(&audioDriver->cs); } } return 0; } AudioDriver_MMSYSTEM::AudioDriver_MMSYSTEM() : AudioDriverBase(), paused(false), deviceOpen(false), deviceHasStarted(false), currentBufferIndex(0), sampleCounterTotal(0) { memset(&mixbuff16, 0, sizeof(mixbuff16)); memset(&wavhdr, 0, sizeof(wavhdr)); InitializeCriticalSection(&cs); } AudioDriver_MMSYSTEM::~AudioDriver_MMSYSTEM() { if (deviceHasStarted) stop(); for (mp_sint32 c = 0; c < NUMBUFFERS; c++) { if (mixbuff16[NUMBUFFERS-1-c]) delete[] mixbuff16[NUMBUFFERS-1-c]; } DeleteCriticalSection(&cs); } mp_sint32 AudioDriver_MMSYSTEM::initDevice(mp_sint32 bufferSizeInWords, mp_uint32 mixFrequency, MasterMixer* pMixer) { mp_sint32 res = AudioDriverBase::initDevice(bufferSizeInWords, mixFrequency, pMixer); if (res != MP_OK) return res; sampleRate = mixFrequency; mp_uint32 supportedFormats[] = { WAVE_FORMAT_48S16, 48000, WAVE_FORMAT_4S16, 44100, WAVE_FORMAT_2S16, 22050, WAVE_FORMAT_1S16, 11025 }; bool modeFound = false; DWORD dwFormat = 0; for (mp_uint32 i = 0; i < sizeof(supportedFormats)>>1; i++) { if (supportedFormats[i*2+1] == mixFrequency) { dwFormat = supportedFormats[i*2]; modeFound = TRUE; break; } } if (!modeFound) return MP_DEVICE_ERROR; WAVEFORMATEX format; format.wFormatTag = WAVE_FORMAT_PCM; format.nChannels = NUMCHANNELS; format.nSamplesPerSec = mixFrequency; format.wBitsPerSample = NUMBITS; format.nAvgBytesPerSec = (format.nChannels*format.nSamplesPerSec*format.wBitsPerSample)/8; format.nBlockAlign = (format.nChannels*format.wBitsPerSample)/8; format.cbSize=0; // Find a usable waveOut device and open it for (UINT devid = 0; devid < ::waveOutGetNumDevs(); devid++) { if (devid == ::waveOutGetNumDevs()) return MP_DEVICE_ERROR; if (::waveOutOpen(&hwo, WAVE_MAPPER, &format, 0, 0, CALLBACK_NULL) == MMSYSERR_NOERROR) { // Usable device found, stop searching break; } } UINT waveOutID; if (::waveOutGetID(hwo,(LPUINT)&waveOutID) != MMSYSERR_NOERROR) return MP_DEVICE_ERROR; MMRESULT r = ::waveOutGetDevCaps((UINT)waveOutID, &waveoutcaps, sizeof(waveoutcaps)); if (r != MMSYSERR_NOERROR) return MP_DEVICE_ERROR; if (!(waveoutcaps.dwFormats & dwFormat)) return MP_DEVICE_ERROR; ::waveOutReset(hwo); if (::waveOutClose(hwo)!= MMSYSERR_NOERROR) return MP_DEVICE_ERROR; // Setup thread to handle buffering deviceOpen = true; bufferThreadHandle = CreateThread(0, 0, &ThreadProc, this, 0, &bufferThreadId); if (::waveOutOpen(&hwo, WAVE_MAPPER, &format, bufferThreadId, (DWORD_PTR)this, CALLBACK_THREAD) != MMSYSERR_NOERROR) { deviceOpen = false; return MP_DEVICE_ERROR; } lastSampleIndex = 0; for (mp_sint32 c = 0; c < NUMBUFFERS; c++) { delete[] mixbuff16[c]; // cope with out of memory someday mixbuff16[c] = new mp_sword[bufferSizeInWords]; } deviceHasStarted = false; sampleCounterTotal = 0; return MP_OK; } mp_sint32 AudioDriver_MMSYSTEM::stop() { if (!deviceHasStarted) return MP_OK; bool resetVolume = false; DWORD dwVol; if (paused) { ::waveOutGetVolume(hwo, &dwVol); ::waveOutSetVolume(hwo, 0); resetVolume = true; resume(); } // wait for buffers to be played deviceHasStarted = false; // wait at least 2 seconds const mp_sint32 timeOutVal = 2000; mp_sint32 timeCounter = 0; const mp_sint32 waitTime = 60; while (true/* && timeCounter < timeOutVal*/) { bool notDone = false; for (mp_sint32 i = 0; i < NUMBUFFERS; i++) { if (! (wavhdr[i].dwFlags & WHDR_DONE)) { notDone = TRUE; break; } } ::Sleep(waitTime); if (!notDone) break; } for (mp_sint32 i = 0; i < NUMBUFFERS; i++) { if (wavhdr[i].dwFlags & WHDR_PREPARED) { ::waveOutUnprepareHeader(hwo,&wavhdr[i],sizeof(WAVEHDR)); wavhdr[i].dwFlags &= ~WHDR_PREPARED; break; } } // reset device ::waveOutReset(hwo); if (resetVolume) ::waveOutSetVolume(hwo, dwVol); lastSampleIndex = 0; sampleCounterTotal = 0; return MP_OK; } mp_sint32 AudioDriver_MMSYSTEM::closeDevice() { deviceOpen = false; if (waveOutClose(hwo)!=MMSYSERR_NOERROR) return MP_DEVICE_ERROR; return MP_OK; } void AudioDriver_MMSYSTEM::kick() { if (isMixerActive()) mixer->mixerHandler(mixbuff16[currentBufferIndex]); else memset(mixbuff16[currentBufferIndex], 0, bufferSize*sizeof(mp_sword)); wavhdr[currentBufferIndex].lpData = (char*)mixbuff16[currentBufferIndex]; wavhdr[currentBufferIndex].dwBufferLength = (bufferSize*NUMBITS)/8; wavhdr[currentBufferIndex].dwFlags = 0; wavhdr[currentBufferIndex].dwLoops = 0; wavhdr[currentBufferIndex].dwUser = (DWORD_PTR)mixbuff16[currentBufferIndex]; if (::waveOutPrepareHeader(hwo, &wavhdr[currentBufferIndex], sizeof(WAVEHDR)) != MMSYSERR_NOERROR) return; if (::waveOutWrite(hwo, &wavhdr[currentBufferIndex], sizeof(WAVEHDR)) != MMSYSERR_NOERROR) return; currentBufferIndex = (currentBufferIndex+1) % NUMBUFFERS; } mp_sint32 AudioDriver_MMSYSTEM::start() { deviceHasStarted = true; for (int i = 0; i < NUMBUFFERS; i++) kick(); sampleCounterTotal = 0; return MP_OK; } mp_sint32 AudioDriver_MMSYSTEM::pause() { ::waveOutPause(hwo); paused = true; return MP_OK; } mp_sint32 AudioDriver_MMSYSTEM::resume() { ::waveOutRestart(hwo); paused = false; return MP_OK; } mp_uint32 AudioDriver_MMSYSTEM::getNumPlayedSamples() const { EnterCriticalSection(&cs); MMTIME mmtime; mmtime.wType = TIME_SAMPLES; if (::waveOutGetPosition(hwo,&mmtime,sizeof(mmtime)) == MMSYSERR_NOERROR) { if (mmtime.u.sample > lastSampleIndex) lastSampleIndex = mmtime.u.sample; LeaveCriticalSection(&cs); return lastSampleIndex; } LeaveCriticalSection(&cs); return lastSampleIndex; } mp_uint32 AudioDriver_MMSYSTEM::getBufferPos() const { mp_sint32 smpPos = (mp_sint32)getNumPlayedSamples() - (mp_sint32)sampleCounterTotal; mp_sint32 maxSize = bufferSize >> 1; if (smpPos < 0) smpPos = 0; if (smpPos > maxSize) smpPos = maxSize; return smpPos; } MilkyTracker-1.02.00/src/milkyplay/drivers/windows/AudioDriver_MMSYSTEM.h000066400000000000000000000064201324432207300261530ustar00rootroot00000000000000/* * Copyright (c) 2009, The MilkyTracker Team. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * 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 HOLDER 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. */ /* * AudioDriver_MMSYSTEM.h * MilkyPlay core * * Created by Peter Barth on Fri Sep 10 2004. * */ #ifndef __AUDIODRIVER_MMSYSTEM_H__ #define __AUDIODRIVER_MMSYSTEM_H__ #include #ifndef _WIN32_WCE #include #endif #include "AudioDriverBase.h" class AudioDriver_MMSYSTEM : public AudioDriverBase { private: enum { // WAV Header & mixing buffer info NUMCHANNELS = MP_NUMCHANNELS, NUMBITS = MP_NUMBITS, NUMBYTES = MP_NUMBYTES, NUMBUFFERS = 2 }; bool paused; bool deviceOpen; bool deviceHasStarted; DWORD bufferThreadId; HANDLE bufferThreadHandle; HWAVEOUT hwo; WAVEOUTCAPS waveoutcaps; WAVEHDR wavhdr[NUMBUFFERS]; mp_sword* mixbuff16[NUMBUFFERS]; mp_sint32 currentBufferIndex; mp_uint32 sampleCounterTotal; mp_uint32 sampleRate; mutable mp_uint32 lastSampleIndex; mutable mp_uint32 timeInSamples; mutable mp_uint32 sampleCounter; mutable CRITICAL_SECTION cs; static DWORD WINAPI ThreadProc(_In_ LPVOID lpParameter); void kick(); public: AudioDriver_MMSYSTEM(); virtual ~AudioDriver_MMSYSTEM(); virtual mp_sint32 initDevice(mp_sint32 bufferSizeInWords, mp_uint32 mixFrequency, MasterMixer* mixer); virtual mp_sint32 closeDevice(); virtual mp_sint32 start(); virtual mp_sint32 stop(); virtual mp_sint32 pause(); virtual mp_sint32 resume(); virtual mp_uint32 getNumPlayedSamples() const; virtual mp_uint32 getBufferPos() const; virtual bool supportsTimeQuery() const { return true; } virtual const char* getDriverID() { return "WaveOut"; } virtual mp_sint32 getPreferredSampleRate() const { return 44100; } virtual mp_sint32 getPreferredBufferSize() const { return 8192; } }; #endif MilkyTracker-1.02.00/src/ppui/000077500000000000000000000000001324432207300160175ustar00rootroot00000000000000MilkyTracker-1.02.00/src/ppui/BasicTypes.h000066400000000000000000000277371324432207300202560ustar00rootroot00000000000000/* * ppui/BasicTypes.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #ifndef BASICTYPES__H #define BASICTYPES__H typedef unsigned char pp_uint8; typedef signed char pp_int8; typedef unsigned short pp_uint16; typedef signed short pp_int16; typedef unsigned int pp_uint32; typedef signed int pp_int32; #include "ScanCodes.h" #if defined(WIN32) || defined(_WIN32_WCE) #include #include #define VK_ALT VK_MENU #define __PPUI_WINDOWS__ #endif #if !defined(__PPUI_WINDOWS__) #include #include #include #include #include "VirtualKeys.h" #include "PPSystemString_POSIX.h" #endif #if defined(__PPUI_WINDOWS__) && defined(UNICODE) #include "PPSystemString_WIN32.h" #else #define PPSystemString PPString #endif #ifdef __GNUC__ typedef long long pp_int64; #else typedef __int64 pp_int64; #endif #ifndef VK_OEM_3 #define VK_OEM_3 0xC0 #endif #ifndef VK_OEM_102 #define VK_OEM_102 0xC0 #endif // Little helper macro #define PPSTR_PERIODS "\xef" // ------ This has to be defined somewhere ------ pp_uint32 PPGetTickCount(); struct PPPoint { pp_int32 x, y; PPPoint(pp_int32 theX, pp_int32 theY) : x(theX), y(theY) {} PPPoint() {} }; struct PPSize { pp_int32 width, height; PPSize(pp_int32 theWidth, pp_int32 theHeight) : width(theWidth), height(theHeight) {} PPSize() {} bool operator==(const PPSize& source) const { return (width == source.width && height == source.height); } bool operator!=(const PPSize& source) const { return !(width == source.width && height == source.height); } bool match(pp_int32 width, pp_int32 height) const { return (this->width == width && this->height == height); } }; struct PPRect { pp_int32 x1, y1, x2, y2; PPRect(pp_int32 px1, pp_int32 py1, pp_int32 px2, pp_int32 py2) : x1(px1), y1(py1), x2(px2), y2(py2) {} PPRect() {} pp_int32 width() const { return x2-x1; } pp_int32 height() const { return y2-y1; } void scale(pp_int32 scaleFactor) { x1 *= scaleFactor; y1 *= scaleFactor; x2 *= scaleFactor; y2 *= scaleFactor; } bool intersect(const PPRect& rc) const { pp_int32 left1, left2; pp_int32 right1, right2; pp_int32 top1, top2; pp_int32 bottom1, bottom2; left1 = this->x1; left2 = rc.x1; right1 = this->x1 + this->width(); right2 = rc.x1 + rc.width(); top1 = this->y1; top2 = rc.y1; bottom1 = this->y1 + this->height(); bottom2 = rc.y1 + rc.height(); if (bottom1 < top2) return false; if (top1 > bottom2) return false; if (right1 < left2) return false; if (left1 > right2) return false; return true; } }; struct PPColor { pp_int32 r,g,b; PPColor(pp_int32 red, pp_int32 green, pp_int32 blue) : r(red), g(green), b(blue) {} PPColor() {} void validate() { if (r > 255) r = 255; if (g > 255) g = 255; if (b > 255) b = 255; } void scale(float f) { r = (pp_int32)((float)r*f); g = (pp_int32)((float)g*f); b = (pp_int32)((float)b*f); validate(); } void scale(float fr, float fg, float fb) { r = (pp_int32)((float)r*fr); g = (pp_int32)((float)g*fg); b = (pp_int32)((float)b*fb); validate(); } void scaleFixed(pp_int32 f) { r = (r*f)>>16; g = (g*f)>>16; b = (b*f)>>16; validate(); } void interpolateFixed(const PPColor& col, pp_int32 f) { r = (f*r + col.r*(65536-f)) >> 16; g = (f*g + col.g*(65536-f)) >> 16; b = (f*b + col.b*(65536-f)) >> 16; validate(); } PPColor invert() const { PPColor c(255-r, 255-g, 255-b); return c; } void set(pp_int32 red, pp_int32 green, pp_int32 blue) { r = red; g = green; b = blue; } void clamp() { if (r < 0) r = 0; if (g < 0) g = 0; if (b < 0) b = 0; validate(); } void operator+=(const PPColor& source) { r+=source.r; g+=source.g; b+=source.b; validate(); } bool operator==(const PPColor& source) const { return (r == source.r && g == source.g && b == source.b); } bool operator!=(const PPColor& source) const { return !(r == source.r && g == source.g && b == source.b); } }; #ifdef WIN32 #define STRINGCOMPARE_NOCASE(left, right) _stricmp(left, right) #else #define STRINGCOMPARE_NOCASE(left, right) strcasecmp(left, right) #endif // C-String wrapper class PPString { private: char* strBuffer; pp_uint32 allocatedSize; void reAlloc(pp_uint32 newSize) { if (newSize <= allocatedSize) return; char* newStrBuffer = new char[newSize]; memcpy(newStrBuffer, strBuffer, allocatedSize); delete[] strBuffer; strBuffer = newStrBuffer; allocatedSize = newSize; } public: // Empty string PPString() : strBuffer(new char[8]), allocatedSize(8) { *strBuffer = 0; } // String from single character PPString(char c) : strBuffer(new char[8]), allocatedSize(8) { *strBuffer = c; *(strBuffer+1) = 0; } PPString(const char* str) : strBuffer(new char[strlen(str) + 1]), allocatedSize((pp_uint32)strlen(str) + 1) { strcpy(strBuffer, str); } PPString(const char* str, pp_uint32 length) : strBuffer(new char[length + 1]), allocatedSize(length + 1) { memcpy(strBuffer, str, length); strBuffer[length] = 0; } // copy c'tor PPString(const PPString& str) : strBuffer(new char[str.allocatedSize]), allocatedSize(str.allocatedSize) { memcpy(strBuffer, str.strBuffer, str.allocatedSize); } operator const char*() const { return strBuffer; } const char* getStrBuffer() const { return strBuffer; } // assignment operator PPString& operator=(const PPString& str) { if (this != &str) { if (str.allocatedSize <= allocatedSize) { memcpy(strBuffer, str.strBuffer, str.allocatedSize); } else { delete[] strBuffer; strBuffer = new char[str.allocatedSize]; memcpy(strBuffer, str.strBuffer, str.allocatedSize); allocatedSize = str.allocatedSize; } } return *this; } PPString& operator=(const char* str) { pp_uint32 len = (unsigned)strlen(str)+1; if (len <= allocatedSize) { strcpy(strBuffer, str); } else { delete[] strBuffer; strBuffer = new char[len]; strcpy(strBuffer, str); allocatedSize = len; } return *this; } // comparison is necessary too bool operator==(const PPString& str) const { return strcmp(strBuffer, str.strBuffer) == 0; } bool operator!=(const PPString& str) const { return strcmp(strBuffer, str.strBuffer) != 0; } pp_int32 compareTo(const PPString& str) const { return strcmp(strBuffer, str.strBuffer); } pp_int32 compareToNoCase(const PPString& str) const { return STRINGCOMPARE_NOCASE(strBuffer, str.strBuffer); } bool startsWith(const PPString& str) const { if (length() < str.length()) return false; for (pp_uint32 i = 0; i < str.length(); i++) if (strBuffer[i] != str.strBuffer[i]) return false; return true; } ~PPString() { delete[] strBuffer; } pp_uint32 length() const { return (pp_uint32)strlen(strBuffer); } char charAt(pp_uint32 index) const { if (index < length()) return strBuffer[index]; return 0; } void insertAt(pp_uint32 i, const PPString& s) { // doesn't work if (i > length()) return; allocatedSize = length() + s.length() + 1; char* newStr = new char[allocatedSize]; memcpy(newStr, strBuffer, i); memcpy(newStr + i, s.strBuffer, s.length()); memcpy(newStr + i + s.length(), strBuffer + i, length() - i); newStr[length() + s.length()] = 0; delete[] strBuffer; strBuffer = newStr; } void append(const PPString& s) { insertAt(length(), s); } void deleteAt(pp_uint32 i, pp_uint32 numChars) { // not possible if (i > length()) return; // nothing to delete if ((signed)length() - (signed)numChars < 0) return; // nothing to delete if (strBuffer[i] == 0) return; allocatedSize = length() - numChars + 1; char* newStr = new char[allocatedSize]; memcpy(newStr, strBuffer, i); memcpy(newStr + i, strBuffer + i + numChars, length() - i - numChars); newStr[length() - numChars] = 0; delete[] strBuffer; strBuffer = newStr; } PPString subString(pp_uint32 leftIndex, pp_uint32 rightIndex) const { PPString newString; for (pp_uint32 i = leftIndex; i < rightIndex && i < length(); i++) newString.append(charAt(i)); return newString; } void replace(const PPString& str) { delete[] strBuffer; strBuffer = new char[str.allocatedSize]; memcpy(strBuffer, str.strBuffer, str.allocatedSize); allocatedSize = str.allocatedSize; } pp_int32 getIntValue() const { pp_uint32 v; sscanf(strBuffer, "%d", &v); return v; } pp_int32 countLines() { pp_int32 numLines = 1; pp_int32 len = this->length(); for (pp_int32 i = 0; i < len; i++) { if (strBuffer[i] == '\n' && i != len-1) numLines++; } return numLines; } void toUpper() { for (pp_uint32 i = 0; i < length(); i++) if (strBuffer[i] >= 'a' && strBuffer[i] <= 'z') strBuffer[i] -= 'a'-'A'; } PPString stripPath() const { char* ptr = strBuffer+strlen(strBuffer); while (ptr > strBuffer && *ptr != '/' && *ptr != '\\') ptr--; if (ptr != strBuffer) ptr++; PPString str = ptr; return str; } PPString stripExtension() const { char* ptr = strBuffer+strlen(strBuffer); while (ptr > strBuffer && *ptr != '.' && *ptr != '/' && *ptr != '\\') ptr--; if (*ptr == '/' || *ptr == '\\') return strBuffer; if (ptr != strBuffer) { PPString str; delete[] str.strBuffer; str.allocatedSize = (pp_uint32)((ptr-strBuffer)+1); str.strBuffer = new char[str.allocatedSize]; memcpy(str.strBuffer, strBuffer, (ptr-strBuffer)); str.strBuffer[(ptr-strBuffer)] = '\0'; return str; } else { return ptr; } } PPString getExtension() const { char* ptr = strBuffer+strlen(strBuffer); while (ptr > strBuffer && *ptr != '.' && *ptr != '/' && *ptr != '\\') ptr--; if (*ptr != '.') return ""; return ptr; } pp_int32 compareExtensions(const PPString& str) const { char* ptrSrc = strBuffer+strlen(strBuffer); while (ptrSrc > strBuffer && *ptrSrc != '.' && *ptrSrc != '/') ptrSrc--; bool noExt1 = false; if (*ptrSrc != '.') noExt1 = true; ptrSrc++; if (*ptrSrc == '\0') noExt1 = true; char* ptrDst = str.strBuffer+strlen(str.strBuffer); while (ptrDst > str.strBuffer && *ptrDst != '.' && *ptrDst != '/') ptrDst--; if (*ptrDst != '.') return noExt1 ? 0 : 1; ptrDst++; if (*ptrDst == '\0') return noExt1 ? 0 : 1; return STRINGCOMPARE_NOCASE(ptrSrc, ptrDst); } bool compareToExtension(const PPString& extension) const { char* ptrSrc = strBuffer+strlen(strBuffer); while (ptrSrc > strBuffer && *ptrSrc != '.' && *ptrSrc != '/') ptrSrc--; if (*ptrSrc != '.') return false; ptrSrc++; if (*ptrSrc == '\0') return false; return STRINGCOMPARE_NOCASE(ptrSrc, extension.strBuffer) == 0; } void ensureTrailingCharacter(char chr) { pp_uint32 len = length(); if (len) { char* ptr = strBuffer+(len-1); if (*ptr != chr) append(chr); } } // Delete this pointer after usage char* toASCIIZ() const { char* newStr = new char[length() + 1]; strcpy(newStr, strBuffer); return newStr; } }; struct Descriptor { PPString extension; PPString description; Descriptor(const PPString& ext, const PPString& desc) : extension(ext), description(desc) { } Descriptor(const Descriptor& source) : extension(source.extension), description(source.description) { } }; #endif MilkyTracker-1.02.00/src/ppui/Button.cpp000066400000000000000000000171201324432207300177770ustar00rootroot00000000000000/* * ppui/Button.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "Button.h" #include "GraphicsAbstract.h" #include "Event.h" #include "Screen.h" #include "Font.h" #include "PPUIConfig.h" PPButton::PPButton(pp_int32 id, PPScreen* parentScreen, EventListenerInterface* eventListener, const PPPoint& location, const PPSize& size, bool border/*= true*/, bool clickable/*= true*/, bool update/*=true*/) : PPControl(id, parentScreen, eventListener, location, size), color(&PPUIConfig::getInstance()->getColor(PPUIConfig::ColorDefaultButton)), textColor(&PPUIConfig::getInstance()->getColor(PPUIConfig::ColorDefaultButtonText)), border(border), clickable(clickable), update(update), verticalText(false), flat(false), autoSizeFont(true), offset(0,0), invertShading(false), lMouseDown(false), rMouseDown(false) { // default colors pressed = false; font = PPFont::getFont(PPFont::FONT_SYSTEM); } PPButton::~PPButton() { } void PPButton::paint(PPGraphicsAbstract* g) { if (!isVisible()) return; PPPoint location = this->location; g->setRect(location.x, location.y, location.x + size.width, location.y + size.height); g->setColor(*color); //g->fill(); { PPColor nsdColor = *color, nsbColor = *color; if (!pressed) { // adjust not so dark color nsdColor.scaleFixed(flat ? 65536 : 40000); // adjust bright color nsbColor.scaleFixed(flat ? 65536 : 80000); } else { // adjust not so dark color nsdColor.scaleFixed(flat ? 65536 : 30000); // adjust bright color nsbColor.scaleFixed(flat ? 65536 : 60000); } g->fillVerticalShaded(nsbColor, nsdColor, invertShading); } PPColor bColor = *color; g->setFont(font); if (!pressed) { // adjust bright color bColor.scaleFixed(87163); g->setColor(bColor); g->drawHLine(location.x, location.x + size.width, location.y); g->drawVLine(location.y, location.y + size.height, location.x); // adjust dark color bColor = *color; bColor.scaleFixed(20000); g->setColor(bColor); g->drawHLine(location.x, location.x + size.width, location.y + size.height - 1); g->drawVLine(location.y, location.y + size.height, location.x + size.width - 1); if (text) { PPColor tColor = *textColor; if (!clickable || !enabled) { tColor.r = (tColor.r + color->r)>>1; tColor.g = (tColor.g + color->g)>>1; tColor.b = (tColor.b + color->b)>>1; } g->setColor(tColor); if (!verticalText) { pp_int32 cx = (size.width>>1)-(font->getStrWidth(text)>>1) + location.x; pp_int32 cy = (size.height>>1)-(font->getCharHeight()>>1) + location.y + 1; g->drawString(text, cx+offset.x, cy+offset.y); } else { pp_int32 cx = (size.width>>1)-(font->getCharWidth()>>1) + location.x; pp_int32 cy = (size.height>>1)-((font->getCharHeight()*text.length())>>1) + location.y + 1; g->drawStringVertical(text, cx+offset.x, cy+offset.y); } } } else { // adjust dark color bColor = *color; bColor.scaleFixed(32768); g->setColor(bColor); g->drawHLine(location.x, location.x + size.width, location.y); g->drawVLine(location.y, location.y + size.height, location.x); g->setColor(bColor.r>>1,bColor.g>>1,bColor.b>>1); g->drawHLine(location.x, location.x + size.width, location.y + size.height - 1); g->drawVLine(location.y, location.y + size.height, location.x + size.width - 1); //g->drawHLine(location.x, location.x + size.width, location.y + size.height - 1); //g->drawVLine(location.y, location.y + size.height, location.x + size.width - 1); if (text) { g->setColor(*textColor); if (!verticalText) { pp_int32 cx = (size.width>>1)-(font->getStrWidth(text)>>1) + location.x + 1; pp_int32 cy = (size.height>>1)-(font->getCharHeight()>>1) + location.y + 2; g->drawString(text, cx+offset.x, cy+offset.y); } else { pp_int32 cx = (size.width>>1)-(font->getCharWidth()>>1) + location.x + 1; pp_int32 cy = (size.height>>1)-((font->getCharHeight()*text.length())>>1) + location.y + 2; g->drawStringVertical(text, cx+offset.x, cy+offset.y); } } } if (border && enabled) { bColor.r = bColor.g = bColor.b = 0; g->setColor(bColor); g->setRect(location.x-1, location.y-1, location.x + size.width+1, location.y + size.height+1); g->drawHLine(location.x, location.x + size.width, location.y-1); g->drawVLine(location.y, location.y + size.height, location.x-1); g->drawHLine(location.x, location.x + size.width, location.y + size.height); g->drawVLine(location.y, location.y + size.height, location.x + size.width); } } pp_int32 PPButton::dispatchEvent(PPEvent* event) { if (eventListener == NULL) return -1; //if (!visible) // return 0; switch (event->getID()) { case eLMouseDrag: case eRMouseDrag: { PPPoint p = *reinterpret_cast(event->getDataPtr()); if (!hit(p) && clickable && pressed && update) { pressed = false; parentScreen->paintControl(this); } else if (hit(p) && clickable && !pressed && update) { pressed = true; parentScreen->paintControl(this); } } break; case eLMouseDown: handleButtonPress(lMouseDown, rMouseDown); break; case eLMouseUp: handleButtonRelease(lMouseDown, rMouseDown, event, eCommand); break; case eRMouseDown: handleButtonPress(rMouseDown, lMouseDown); break; case eRMouseUp: handleButtonRelease(rMouseDown, lMouseDown, event, eCommandRight); break; case eLMouseRepeat: case eRMouseRepeat: if (clickable && pressed) { PPEvent e(eCommandRepeat); eventListener->handleEvent(reinterpret_cast(this), &e); } break; default: break; } return eventListener->handleEvent(reinterpret_cast(this), event); } void PPButton::setText(const PPString& text) { bool lastCharIsPeriod = text.length() ? (text[text.length()-1] == '.') : false; this->text = text; // Fall back to tiny font if string doesn't fit with current font if (autoSizeFont && font != PPFont::getFont(PPFont::FONT_TINY) && !verticalText && ((signed)font->getStrWidth(text) > size.width - (lastCharIsPeriod ? -6 : 2) || (signed)font->getCharHeight() > size.height)) { font = PPFont::getFont(PPFont::FONT_TINY); } } void PPButton::handleButtonPress(bool& lMouseDown, bool& rMouseDown) { if (rMouseDown) { lMouseDown = false; pressed = false; if (update) parentScreen->paintControl(this); return; } lMouseDown = true; if (clickable) { pressed = true; if (update) parentScreen->paintControl(this); } } void PPButton::handleButtonRelease(bool& lMouseDown, bool& rMouseDown, PPEvent* event, EEventDescriptor postEvent) { lMouseDown = false; if (clickable && !rMouseDown && pressed) { pressed = false; if (update) parentScreen->paintControl(this); if (hit(*reinterpret_cast(event->getDataPtr()))) { PPEvent e(postEvent); eventListener->handleEvent(reinterpret_cast(this), &e); } } } MilkyTracker-1.02.00/src/ppui/Button.h000066400000000000000000000061151324432207300174460ustar00rootroot00000000000000/* * ppui/Button.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ ///////////////////////////////////////////////////////////////// // // PPButton control class // ///////////////////////////////////////////////////////////////// #ifndef BUTTON__H #define BUTTON__H #include "BasicTypes.h" #include "Control.h" #include "Event.h" // Forwards class PPGraphicsAbstract; class PPFont; class PPButton : public PPControl { private: const PPColor* color; const PPColor* textColor; bool border; bool clickable; bool update; bool verticalText; bool flat; bool autoSizeFont; PPPoint offset; bool pressed; bool invertShading; bool lMouseDown; bool rMouseDown; PPFont* font; PPString text; public: PPButton(pp_int32 id, PPScreen* parentScreen, EventListenerInterface* eventListener, const PPPoint& location, const PPSize& size, bool border = true, bool clickable = true, bool update = true); virtual ~PPButton(); virtual void setSize(const PPSize& size) { this->size = size; if (this->size.width < 8) this->size.width = 8; if (this->size.height < 8) this->size.height = 8; } void setColor(const PPColor& color) { this->color = &color; } const PPColor* getColor() const { return color; } void setXOffset(pp_int32 offset) { this->offset.x = offset; } void setYOffset(pp_int32 offset) { this->offset.y = offset; } void setText(const PPString& text); const PPString& getText() const { return text; } void setTextColor(const PPColor& color) { this->textColor = &color; } const PPColor* getTextColor() const { return textColor; } void setVerticalText(bool b) { verticalText = b; } void setFont(PPFont* font) { this->font = font; } PPFont* getFont() const { return font; } void setPressed(bool pressed) { this->pressed = pressed; } bool isPressed() const { return pressed; } void setUpdateable(bool b) { update = b; } void setClickable(bool b) { clickable = b; } bool isClickable() const { return clickable; } void setInvertShading(bool b) { invertShading = b; } void setFlat(bool b) { flat = b; } void setAutoSizeFont(bool autoSizeFont) { this->autoSizeFont = autoSizeFont; } virtual void paint(PPGraphicsAbstract* graphics); virtual pp_int32 dispatchEvent(PPEvent* event); private: void handleButtonPress(bool& lMouseDown, bool& rMouseDown); void handleButtonRelease(bool& lMouseDown, bool& rMouseDown, PPEvent* event, EEventDescriptor postEvent); }; #endif MilkyTracker-1.02.00/src/ppui/CMakeLists.txt000066400000000000000000000066361324432207300205720ustar00rootroot00000000000000# # src/ppui/CMakeLists.txt # # Copyright 2016 Dale Whinham # # This file is part of MilkyTracker. # # MilkyTracker 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. # # MilkyTracker 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 MilkyTracker. If not, see . # add_subdirectory(osinterface) set( SOURCES Button.cpp CheckBox.cpp CheckBoxLabel.cpp Container.cpp ContextMenu.cpp Control.cpp DialogBase.cpp DialogFileSelector.cpp Dictionary.cpp DictionaryKey.cpp Event.cpp Font.cpp Graphics_15BIT.cpp Graphics_16BIT.cpp Graphics_24bpp_generic.cpp Graphics_32bpp_generic.cpp Graphics_ARGB32.cpp Graphics_BGR24.cpp Graphics_BGR24_SLOW.cpp # Graphics_OGL.cpp KeyboardBindingHandler.cpp ListBox.cpp ListBoxFileBrowser.cpp Menu.cpp MessageBoxContainer.cpp PPUIConfig.cpp RadioGroup.cpp Screen.cpp Scrollbar.cpp Seperator.cpp Slider.cpp StaticText.cpp Tools.cpp TransparentContainer.cpp ) set( HEADERS BasicTypes.h Button.h CheckBox.h CheckBoxLabel.h Container.h ContextMenu.h Control.h DialogBase.h DialogFileSelector.h Dictionary.h DictionaryKey.h DisplayDeviceBase.h Event.h fastfill.h Font.h GraphicsAbstract.h Graphics.h # Graphics_OGL.h KeyBindings.h KeyboardBindingHandler.h ListBoxFileBrowser.h ListBox.h Menu.h MessageBoxContainer.h Object.h PPPath.h PPUIConfig.h PPUI.h RadioGroup.h ScanCodes.h Screen.h ScrollBar.h Seperator.h SimpleVector.h Singleton.h Slider.h StaticText.h Tools.h TransparentContainer.h UndoStack.h VirtualKeys.h ) # Add platform-specific sources and include paths if(APPLE) list(APPEND SOURCES cocoa/DisplayDevice_COCOA.mm) list(APPEND HEADERS cocoa/DisplayDevice_COCOA.h) include_directories( ${PROJECT_SOURCE_DIR}/src/ppui/osinterface/posix ${PROJECT_SOURCE_DIR}/src/tracker/cocoa ) elseif(WIN32) list(APPEND SOURCES win32/DisplayDevice_WIN32.cpp) list(APPEND HEADERS win32/DisplayDevice_WIN32.h) include_directories( ${PROJECT_SOURCE_DIR}/src/ppui/osinterface/win32 ${PROJECT_SOURCE_DIR}/src/milkyplay ) else() list(APPEND SOURCES sdl/DisplayDeviceFB_SDL.cpp sdl/DisplayDevice_SDL.cpp ) list(APPEND HEADERS sdl/DisplayDeviceFB_SDL.h sdl/DisplayDevice_SDL.h ) include_directories( ${PROJECT_SOURCE_DIR}/src/ppui/osinterface/posix ${SDL2_INCLUDE_DIRS} ) endif() include_directories( ${PROJECT_SOURCE_DIR}/src/ppui ${PROJECT_SOURCE_DIR}/src/ppui/osinterface ) add_library(ppui ${SOURCES} ${HEADERS}) if(APPLE) # Enable ARC (automatic reference counting) for OS X build set_property( TARGET ppui APPEND_STRING PROPERTY COMPILE_FLAGS "-fobjc-arc" ) endif() target_link_libraries( ppui osinterface ) MilkyTracker-1.02.00/src/ppui/CheckBox.cpp000066400000000000000000000047341324432207300202210ustar00rootroot00000000000000/* * ppui/CheckBox.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "CheckBox.h" #include "Button.h" #include "GraphicsAbstract.h" #include "Event.h" #include "Screen.h" #include "Font.h" static const char* checked = "\xFF"; static const char* notChecked = "\x20"; PPCheckBox::PPCheckBox(pp_int32 id, PPScreen* parentScreen, EventListenerInterface* eventListener, const PPPoint& location, bool checked /* = true */) : PPControl(id, parentScreen, eventListener, location, PPSize(10,10)) { button = new PPButton(id, parentScreen, this, location, this->size); button->setText(checked ? ::checked : ::notChecked); } PPCheckBox::~PPCheckBox() { delete button; } bool PPCheckBox::isChecked() const { return button->getText().compareTo(checked) == 0; } void PPCheckBox::checkIt(bool checked) { button->setText(checked ? ::checked : ::notChecked); } // from control void PPCheckBox::paint(PPGraphicsAbstract* graphics) { if (!isVisible()) return; button->paint(graphics); } pp_int32 PPCheckBox::dispatchEvent(PPEvent* event) { //if (!visible) // return 0; if (event->getID() == eLMouseDown) { button->dispatchEvent(event); } else if (event->getID() == eLMouseUp) { button->setText(isChecked() ? ::notChecked : ::checked); button->dispatchEvent(event); } parentScreen->paintControl(this); return 0; } pp_int32 PPCheckBox::handleEvent(PPObject* sender, PPEvent* event) { return eventListener->handleEvent(reinterpret_cast(this), event); } void PPCheckBox::enable(bool b) { PPControl::enable(b); button->enable(b); } void PPCheckBox::setSize(const PPSize& size) { PPControl::setSize(size); button->setSize(size); } void PPCheckBox::setLocation(const PPPoint& location) { PPControl::setLocation(location); button->setLocation(location); } MilkyTracker-1.02.00/src/ppui/CheckBox.h000066400000000000000000000033771324432207300176700ustar00rootroot00000000000000/* * ppui/CheckBox.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ ///////////////////////////////////////////////////////////////// // // PPButton control class // ///////////////////////////////////////////////////////////////// #ifndef CHECKBOX__H #define CHECKBOX__H #include "BasicTypes.h" #include "Control.h" #include "Event.h" // Forwards class PPGraphicsAbstract; class PPFont; class PPButton; class PPCheckBox : public PPControl, public EventListenerInterface { private: PPButton* button; public: PPCheckBox(pp_int32 id, PPScreen* parentScreen, EventListenerInterface* eventListener, const PPPoint& location, bool checked = true); virtual ~PPCheckBox(); bool isChecked() const; void checkIt(bool checked); // from control virtual void paint(PPGraphicsAbstract* graphics); virtual pp_int32 dispatchEvent(PPEvent* event); virtual void enable(bool b); virtual void setSize(const PPSize& size); virtual void setLocation(const PPPoint& location); // from EventListenerInterface pp_int32 handleEvent(PPObject* sender, PPEvent* event); }; #endif MilkyTracker-1.02.00/src/ppui/CheckBoxLabel.cpp000066400000000000000000000035601324432207300211550ustar00rootroot00000000000000/* * ppui/CheckBoxLabel.h * * Copyright 2017 Henri Isojrvi * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "CheckBoxLabel.h" PPCheckBoxLabel::PPCheckBoxLabel(pp_int32 id, PPScreen* parentScreen, EventListenerInterface* eventListener, const PPPoint& location, const PPString& text, PPCheckBox* checkBox, bool drawShadow, bool drawUnderlined, bool autoShrink) : PPStaticText(id, parentScreen, eventListener, location, text, drawShadow, drawUnderlined, autoShrink) { this->checkBox = checkBox; } PPCheckBoxLabel::~PPCheckBoxLabel() { } // Toggles the associated check box when the label text is clicked pp_int32 PPCheckBoxLabel::dispatchEvent(PPEvent * event) { if (!eventListener) return -1; switch (event->getID()) { case eLMouseDown: case eLMouseUp: { // Create a new event with location on top of the check box. // Event location matters because the checkbox button will fire // a command event only when mouse button is raised on top of the button. const PPPoint checkBoxHitLocation = checkBox->getLocation(); PPEvent checkBoxEvent = PPEvent(event->getID(), (void*)&checkBoxHitLocation, sizeof(checkBoxHitLocation)); return checkBox->dispatchEvent(&checkBoxEvent); } default: return -1; } } MilkyTracker-1.02.00/src/ppui/CheckBoxLabel.h000066400000000000000000000026601324432207300206220ustar00rootroot00000000000000/* * ppui/CheckBoxLabel.h * * Copyright 2017 Henri Isojrvi * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ ///////////////////////////////////////////////////////////////// // // Check box label control class // ///////////////////////////////////////////////////////////////// #ifndef CHECKBOXLABEL__H #define CHECKBOXLABEL__H #include "StaticText.h" #include "CheckBox.h" class PPCheckBoxLabel : public PPStaticText { private: PPCheckBox* checkBox; public: PPCheckBoxLabel(pp_int32 id, PPScreen* parentScreen, EventListenerInterface* eventListener, const PPPoint& location, const PPString& text, PPCheckBox* checkBox, bool drawShadow = false, bool drawUnderlined = false, bool autoShrink = false); virtual ~PPCheckBoxLabel(); virtual pp_int32 dispatchEvent(PPEvent* event); }; #endifMilkyTracker-1.02.00/src/ppui/Container.cpp000066400000000000000000000265331324432207300204560ustar00rootroot00000000000000/* * ppui/Container.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "Container.h" #include "Event.h" #include "Screen.h" #include "PPUIConfig.h" PPContainer::PPContainer(pp_int32 id, PPScreen* parentScreen, EventListenerInterface* eventListener, const PPPoint& location, const PPSize& size, bool border /* = true */) : PPControl(id, parentScreen, eventListener, location, size), color(&PPUIConfig::getInstance()->getColor(PPUIConfig::ColorContainer)), focusedControl(NULL), lastMouseOverControl(NULL), lastMousePoint(PPPoint(0,0)), caughtControl(NULL), currentlyPressedMouseButtons(0) { this->border = border; backgroundButton = new PPButton(0, parentScreen, NULL, location, size, border, false); backgroundButton->setColor(*color); timerEventControls = new PPSimpleVector(16, false); } PPContainer::~PPContainer() { delete timerEventControls; for (pp_int32 i = 0; i < controls.size(); i++) { if (controls.get(i)->receiveTimerEvent()) { parentScreen->removeTimerEventControl(controls.get(i)); } } delete backgroundButton; } void PPContainer::paint(PPGraphicsAbstract* g) { if (!isVisible()) return; backgroundButton->paint(g); paintControls(g); } pp_int32 PPContainer::dispatchEvent(PPEvent* event) { if (event->getID() == eInvalid) return 0; pp_int32 i, res = 0; bool handleEvent = false; if (caughtControl) { PPControl* control = caughtControl; switch (event->getID()) { case eLMouseDown: case eRMouseDown: case eMMouseDown: currentlyPressedMouseButtons++; res = control->dispatchEvent(event); goto exit; case eLMouseUp: case eRMouseUp: case eMMouseUp: currentlyPressedMouseButtons--; if (currentlyPressedMouseButtons == 0) { caughtControl = NULL; if (control->gainedFocusByMouse()) { setFocus(control); } } // break is missing intentionally case eLMouseDoubleClick: case eRMouseDoubleClick: case eMMouseDoubleClick: case eLMouseDrag: case eLMouseRepeat: case eRMouseDrag: case eRMouseRepeat: case eMMouseDrag: case eMMouseRepeat: case eMouseMoved: res = control->dispatchEvent(event); goto exit; default: break; } } if (focusedControl) { PPControl* control = focusedControl; bool mouseEvent = false; switch (event->getID()) { case eLMouseDown: case eRMouseDown: case eMMouseDown: case eLMouseUp: case eRMouseUp: case eMMouseUp: case eLMouseDoubleClick: case eRMouseDoubleClick: case eMMouseDoubleClick: case eLMouseDrag: case eLMouseRepeat: case eRMouseDrag: case eRMouseRepeat: case eMMouseDrag: case eMMouseRepeat: case eMouseMoved: case eMouseWheelMoved: mouseEvent = true; break; default: break; } if (!mouseEvent) { res = control->dispatchEvent(event); // we're getting send an focus lost event // so remove all references to focused controls if (event->getID() == eFocusLost || event->getID() == eFocusLostNoRepaint) { focusedControl = NULL; } goto exit; } } switch (event->getID()) { case eLMouseDown: case eRMouseDown: case eMMouseDown: case eMouseWheelMoved: case eMouseMoved: handleEvent = true; break; // we got a focus gained message // if we don't have some focused control set, // we simply search for a control that could gain the focus // and assign focus to that case eFocusGainedNoRepaint: case eFocusGained: if (focusedControl != NULL || caughtControl != NULL) break; for (pp_int32 j = 0; j < controls.size(); j++) { PPControl* control = controls.get(j); if (control->gainsFocus()) { setFocus(control, event->getID() == eFocusGained); break; } } break; default: break; } if (!handleEvent) goto exit; // handle other events for (i = 0; i < controls.size(); i++) { PPControl* control = controls.get(i); if (!control->isVisible() || !control->isEnabled()) continue; bool abortLoop = false; switch (event->getID()) { // mouse wheel has moved case eMouseWheelMoved: { TMouseWheelEventParams* params = (TMouseWheelEventParams*)event->getDataPtr(); if (control->hit(params->pos) && control->isActive()) { control->dispatchEvent(event); abortLoop = true; } break; } // mouse has been moved also gets this case eMouseMoved: { PPPoint* p = (PPPoint*)event->getDataPtr(); if (control->isActive()) { bool bHit = control->hit(*p); bool bLastHit = control->hit(lastMousePoint); if (!bLastHit && bHit) { PPEvent e(eMouseEntered, p, sizeof(PPPoint)); control->dispatchEvent(&e); } else if (bLastHit && !bHit) { PPEvent e(eMouseLeft, p, sizeof(PPPoint)); control->dispatchEvent(&e); } if (bHit) { if (control != lastMouseOverControl && lastMouseOverControl) lastMouseOverControl->dispatchEvent(event); res = control->dispatchEvent(event); lastMouseOverControl = control; abortLoop = true; } } break; } // Mouse button down event case eLMouseDown: case eRMouseDown: case eMMouseDown: if (control->hit(*(PPPoint*)event->getDataPtr()) && control->isActive() && caughtControl == NULL) { currentlyPressedMouseButtons++; caughtControl = control; control->dispatchEvent(event); abortLoop = true; } break; default: break; } if (abortLoop || event->getID() == eInvalid) break; } exit: if (event->getID() == eMouseMoved) { PPPoint* p = (PPPoint*)event->getDataPtr(); lastMousePoint = *p; } return res; } PPControl* PPContainer::getControlByID(pp_int32 id) { pp_int32 i; for (i = 0; i < controls.size(); i++) { pp_int32 cID = controls.get(i)->getID(); if (cID == id) return controls.get(i); } // not found, try recursive in sub-containers if any for (i = 0; i < controls.size(); i++) { PPControl* control = controls.get(i); if (control->isContainer()) { PPControl* newCtrl = static_cast(control)->getControlByID(id); if (newCtrl) return newCtrl; } } return NULL; } void PPContainer::addControl(PPControl* control) { control->setOwnerControl(this); controls.add(control); if (control->receiveTimerEvent()) { if (this->isVisible()) parentScreen->addTimerEventControl(control); else timerEventControls->add(control); } } bool PPContainer::removeControl(PPControl* control) { pp_int32 i; bool res = false; if (control->receiveTimerEvent()) { parentScreen->removeTimerEventControl(control); } for (i = 0; i < controls.size(); i++) { if (controls.get(i) == control) { controls.remove(i); res = true; } } return res; } bool PPContainer::gainsFocus() const { if (caughtControl && caughtControl->gainsFocus()) return true; if (focusedControl) return true; return false; } bool PPContainer::gainedFocusByMouse() const { if (caughtControl && caughtControl->gainedFocusByMouse()) return true; return false; } void PPContainer::show(bool visible) { PPControl::show(visible); if (visible) { // add timer event controls to parent screen for (pp_int32 i = 0; i < timerEventControls->size(); i++) { parentScreen->addTimerEventControl(timerEventControls->get(i)); } timerEventControls->clear(); } else { // remove timer event controls from parent screen // and add them to our internal list for (pp_int32 i = 0; i < controls.size(); i++) { if (controls.get(i)->receiveTimerEvent()) { parentScreen->removeTimerEventControl(controls.get(i)); timerEventControls->add(controls.get(i)); } } } } void PPContainer::hide(bool hidden) { PPControl::hide(hidden); if (!hidden) { // add timer event controls to parent screen for (pp_int32 i = 0; i < timerEventControls->size(); i++) { parentScreen->addTimerEventControl(timerEventControls->get(i)); } timerEventControls->clear(); } else { // remove timer event controls from parent screen // and add them to our internal list for (pp_int32 i = 0; i < controls.size(); i++) { if (controls.get(i)->receiveTimerEvent()) { parentScreen->removeTimerEventControl(controls.get(i)); timerEventControls->add(controls.get(i)); } } } } void PPContainer::setSize(const PPSize& size) { this->size = size; backgroundButton->setSize(size); } void PPContainer::setLocation(const PPPoint& location) { /*PPPoint offset(location.x - this->location.x, location.y - this->location.y); move(offset);*/ this->location = location; backgroundButton->setLocation(location); } void PPContainer::setFocus(PPControl* control, bool repaint/* = true*/) { // nothing to do if (control == this->focusedControl) return; // the current control is about to lose focus if (this->focusedControl) { PPEvent e(repaint ? eFocusLost : eFocusLostNoRepaint); this->focusedControl->dispatchEvent(&e); } this->focusedControl = control; if (this->focusedControl) { PPEvent e(repaint ? eFocusGained : eFocusGainedNoRepaint); this->focusedControl->dispatchEvent(&e); } #if 0 if (verbose) { /*if (focusedControl != control && focusedControl) { PPEvent e(eFocusLost); focusedControl->dispatchEvent(&e); }*/ PPEvent eLost(eFocusLost); for (pp_int32 i = 0; i < controls.size(); i++) { PPControl* ctrl = controls.get(i); if (ctrl != control) ctrl->dispatchEvent(&eLost); } if (reGain && control) { PPEvent eGained(eFocusGained); control->dispatchEvent(&eGained); lastFocusedControl = control; } } focusedControl = control; #endif } bool PPContainer::hasFocus(PPControl* control) const { return focusedControl == control; } void PPContainer::move(const PPPoint& offset) { PPPoint p = getLocation(); p.x+=offset.x; p.y+=offset.y; location = p; backgroundButton->setLocation(p); PPSimpleVector& controls = getControls(); for (pp_int32 i = 0; i < controls.size(); i++) { PPControl* control = controls.get(i); if (!control->isContainer()) { p = control->getLocation(); p.x+=offset.x; p.y+=offset.y; control->setLocation(p); } else static_cast(control)->move(offset); } } void PPContainer::adjustContainerSize() { PPSimpleVector& controls = getControls(); pp_int32 x1 = parentScreen->getWidth(); pp_int32 y1 = parentScreen->getHeight(); pp_int32 x2 = 0; pp_int32 y2 = 0; for (pp_int32 i = 0; i < controls.size(); i++) { PPControl* control = controls.get(i); PPPoint p = control->getLocation(); if (p.x < x1) x1 = p.x; if (p.y < y1) y1 = p.y; p.x+=control->getSize().width; p.y+=control->getSize().height; if (p.x > x2) x2 = p.x; if (p.y > y2) y2 = p.y; } setLocation(PPPoint(x1, y1)); setSize(PPSize(x2-x1, y2-y1)); } MilkyTracker-1.02.00/src/ppui/Container.h000066400000000000000000000057551324432207300201260ustar00rootroot00000000000000/* * ppui/Container.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ ///////////////////////////////////////////////////////////////// // // PPContainer control class (can contain other controls) // ///////////////////////////////////////////////////////////////// #ifndef CONTAINER__H #define CONTAINER__H #include "BasicTypes.h" #include "Control.h" #include "Button.h" #include "SimpleVector.h" class PPContainer : public PPControl { protected: const PPColor* color; bool border; private: PPButton* backgroundButton; PPSimpleVector controls; PPSimpleVector* timerEventControls; PPControl* focusedControl; PPPoint lastMousePoint; PPControl* lastMouseOverControl; // Control caught by mouse button press (left & right) PPControl* caughtControl; pp_int32 currentlyPressedMouseButtons; public: PPContainer(pp_int32 id, PPScreen* parentScreen, EventListenerInterface* eventListener, const PPPoint& location, const PPSize& size, bool border = true); virtual ~PPContainer(); virtual void setSize(const PPSize& size); virtual void setLocation(const PPPoint& location); //void setColor(pp_int32 r,pp_int32 g,pp_int32 b) { color.r = r; color.g = g; color.b = b; backgroundButton->setColor(color); } void setColor(const PPColor& color) { this->color = &color; backgroundButton->setColor(color); } const PPColor& getColor() const { return *color; } void addControl(PPControl* control); bool removeControl(PPControl* control); virtual void paint(PPGraphicsAbstract* graphics); virtual pp_int32 dispatchEvent(PPEvent* event); virtual bool gainsFocus() const; virtual bool gainedFocusByMouse() const; virtual void show(bool visible); virtual void hide(bool hidden); virtual bool isContainer() const { return true; } PPControl* getControlByID(pp_int32 id); PPControl* getFocusedControl() { return focusedControl; } PPSimpleVector& getControls() { return controls; } void setFocus(PPControl* control, bool repaint = true); bool hasFocus(PPControl* control) const; void move(const PPPoint& offset); void adjustContainerSize(); protected: void paintControls(PPGraphicsAbstract* g) { for (pp_int32 i = 0; i < controls.size(); i++) { PPControl* ctrl = controls.get(i); if (ctrl->isVisible()) ctrl->paint(g); } } friend class PPScreen; }; #endif MilkyTracker-1.02.00/src/ppui/ContextMenu.cpp000066400000000000000000000221511324432207300207750ustar00rootroot00000000000000/* * ppui/ContextMenu.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "ContextMenu.h" #include "GraphicsAbstract.h" #include "Event.h" #include "Screen.h" #include "Font.h" #include "Menu.h" #include "PPUIConfig.h" PPContextMenu::PPContextMenu(pp_int32 id, PPScreen* parentScreen, EventListenerInterface* eventListener, const PPPoint& location, const PPColor& selColor, bool doAutoAddHide/* = false*/, PPFont* font/* = NULL*/) : PPControl(id, parentScreen, eventListener, location, PPSize(0,0)), color(&PPUIConfig::getInstance()->getColor(PPUIConfig::ColorMenuBackground)), selectionColor(&selColor), autoAddHide(doAutoAddHide), notifyParentOnHide(false), menuSelection(-1), hasDragged(false) { // default color if (font == NULL) font = PPFont::getFont(PPFont::FONT_SYSTEM); menu = new PPMenu(font, *selectionColor, *color); menu->setTextBrightColor(PPUIConfig::getInstance()->getColor(PPUIConfig::ColorMenuTextBright)); menu->setTextDarkColor(PPUIConfig::getInstance()->getColor(PPUIConfig::ColorMenuTextDark)); } PPContextMenu::~PPContextMenu() { delete menu; } void PPContextMenu::paint(PPGraphicsAbstract* g) { if (!isVisible()) return; g->setRect(location.x, location.y, location.x + size.width, location.y + size.height); // update menu selection before drawing the menu pp_int32 menuSelection = this->menuSelection; PPContextMenu* subMenu = static_cast(parentScreen->getLastContextMenuControl()); for (pp_int32 i = 0; i < menu->items.size(); i++) { if (menu->items.get(i)->subMenu == subMenu) menuSelection = i; } menu->paint(g, location.x, location.y, menuSelection); } void PPContextMenu::showSubMenu(PPContextMenu* subMenu) { if (parentScreen->getLastContextMenuControl() == subMenu) return; PPPoint p; p.x = getLocation().x + getSize().width - 2; p.y = getLocation().y - 2 + menuSelection * menu->getEntryHeight(); if (p.x + subMenu->getSize().width > parentScreen->getWidth() + (subMenu->getSize().width >> 1)) p.x = getLocation().x - subMenu->getSize().width; subMenu->setLocation(p); parentScreen->addContextMenuControl(subMenu); } pp_int32 PPContextMenu::dispatchEvent(PPEvent* event) { if (eventListener == NULL) return -1; //if (!visible) // return 0; switch (event->getID()) { case eLMouseDown: { hasDragged = false; pressInvoke = false; PPPoint* p = (PPPoint*)event->getDataPtr(); processMenuHit(*p); if (menuSelection >= 0) { if (menu->items.get(menuSelection)->subMenu) { PPContextMenu* subMenu = menu->items.get(menuSelection)->subMenu; if (parentScreen->getLastContextMenuControl() == subMenu) { parentScreen->removeLastContextMenuControl(); break; } if (parentScreen->getLastContextMenuControl() != this && parentScreen->getLastContextMenuControl() != subMenu) parentScreen->removeLastContextMenuControl(); showSubMenu(subMenu); } } break; } case eRMouseUp: case eLMouseUp: { if (event->getID() == eRMouseUp && !hasDragged) break; if (event->getID() && pressInvoke) break; PPPoint* p = (PPPoint*)event->getDataPtr(); processMenuHit(*p); if (menuSelection >= 0) { if (!menu->items.get(menuSelection)->subMenu) { pp_int32 theId = menu->items.get(menuSelection)->identifier; if (theId == -1) break; PPEvent e(eCommand, &theId, sizeof(theId)); eventListener->handleEvent(reinterpret_cast(this), &e); parentScreen->setContextMenuControl(NULL); menuSelection = -1; } } break; } case eLMouseRepeat: break; case eMouseMoved: case eLMouseDrag: case eRMouseDrag: { PPPoint* p = (PPPoint*)event->getDataPtr(); if (hit(*p) && !hadCursor) { hadCursor = true; } else if (!hit(*p) && hadCursor && isSubMenu() && getParentMenu() && getParentMenu()->hit(*p)) { parentScreen->removeLastContextMenuControl(); break; } if (event->getID() == eLMouseDrag || event->getID() == eRMouseDrag) hasDragged = true; processMenuHit(*p); if (menuSelection >= 0 && menuSelection < menu->items.size()) { PPContextMenu* subMenu = menu->items.get(menuSelection)->subMenu; if (subMenu && parentScreen->getLastContextMenuControl() != subMenu) { PPContextMenu* lastMenu = (PPContextMenu*)parentScreen->getLastContextMenuControl(); if (lastMenu->getParentMenu()) { parentScreen->removeLastContextMenuControl(); } showSubMenu(subMenu); } else if (!subMenu && parentScreen->getLastContextMenuControl() != this) { parentScreen->removeLastContextMenuControl(); } } else if (menuSelection == -1 && parentScreen->getLastContextMenuControl() != this && !parentScreen->getLastContextMenuControl()->hit(*p) && hit(*p)) { parentScreen->removeLastContextMenuControl(); } break; } case eFocusGained: case eFocusGainedNoRepaint: { menuSelection = -1; pressInvoke = true; hasDragged = false; hadCursor = false; break; } case eFocusLost: case eFocusLostNoRepaint: menuSelection = -1; hasDragged = false; pressInvoke = false; hadCursor = false; break; default: break; } return eventListener->handleEvent(reinterpret_cast(this), event); } void PPContextMenu::addEntry(const PPString& s, pp_int32 theId, PPContextMenu* contextMenu) { if (menu) { if (autoAddHide && menu->items.size() > 0) { pp_int32 i = menu->items.size(); if (menu->items.get(i-1)->identifier == MenuCommandIDHide) { menu->items.remove(i-1); pp_int32 i = menu->items.size(); if (menu->items.get(i-1)->identifier == -1) menu->items.remove(i-1); } } menu->items.add(new PPMenu::Entry(s, theId, 0, contextMenu)); // add a hide option automatically if (autoAddHide) { pp_uint32 maxLen = 0; pp_int32 i; for (i = 0; i < menu->items.size(); i++) { if (menu->items.get(i)->name.length() > maxLen) maxLen = menu->items.get(i)->name.length(); } if (maxLen < 9) maxLen = 9; char* buffer = new char[maxLen+1]; memset(buffer, 0, maxLen+1); memset(buffer, '\xc4', maxLen); menu->items.add(new PPMenu::Entry(buffer, -1, 0, NULL)); delete[] buffer; menu->items.add(new PPMenu::Entry("Hide menu", MenuCommandIDHide, 0, NULL)); } if (contextMenu) contextMenu->setParentMenu(this); PPRect r = menu->getBoundingRect(); setSize(PPSize(r.width(), r.height())); } } bool PPContextMenu::hitMenu(const PPPoint& p) const { pp_int32 py = location.x; pp_int32 px = location.y; PPRect r = menu->getBoundingRect(); if ((p.x >= px && p.x < px + r.x2 - 4) && (p.y >= py && p.y < py + r.y2 - 4)) return true; return false; } void PPContextMenu::processMenuHit(const PPPoint& p) { PPPoint cp = p; pp_int32 px = location.x; pp_int32 py = location.y; cp.x -= px; cp.y -= py; cp.y -= 4; pp_int32 lastMenuSelection = menuSelection; if (cp.x < 0 || cp.x >= menu->getBoundingRect().width() || cp.y < 0) { menuSelection = -1; if (lastMenuSelection != menuSelection) parentScreen->paintContextMenuControl(this); return; } menuSelection = cp.y / menu->getEntryHeight(); if (menuSelection >= menu->items.size()) { menuSelection = -1; if (lastMenuSelection != menuSelection) parentScreen->paintContextMenuControl(this); } else { if (menuSelection >= 0 && menuSelection < menu->items.size()) { if ((menu->items.get(menuSelection)->state & 1) || (menu->items.get(menuSelection)->identifier==-1)) menuSelection = -1; } if (lastMenuSelection != menuSelection) parentScreen->paintContextMenuControl(this); } } void PPContextMenu::setSize(const PPSize& size) { this->size = size; if (location.x + size.width+2 > parentScreen->getWidth()) location.x-=((location.x + size.width+2)-parentScreen->getWidth()); if (location.y + size.height+2 > parentScreen->getHeight()) location.y-=((location.y + size.height+2)-parentScreen->getHeight()); } void PPContextMenu::setLocation(const PPPoint& location) { PPPoint loc = location; if (loc.x + size.width+2 > parentScreen->getWidth()) loc.x-=((loc.x + size.width+2)-parentScreen->getWidth()); if (loc.y + size.height+2 > parentScreen->getHeight()) loc.y-=((loc.y + size.height+2)-parentScreen->getHeight()); if (loc.x < 0) loc.x = 0; if (loc.y < 0) loc.y = 0; this->location = loc; } MilkyTracker-1.02.00/src/ppui/ContextMenu.h000066400000000000000000000055211324432207300204440ustar00rootroot00000000000000/* * ppui/ContextMenu.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ ///////////////////////////////////////////////////////////////// // // Contextmenu control class // ///////////////////////////////////////////////////////////////// #ifndef CONTEXTMENU__H #define CONTEXTMENU__H #include "BasicTypes.h" #include "Control.h" #include "Menu.h" // Forwards class PPGraphicsAbstract; class PPFont; class PPContextMenu; class PPContextMenu : public PPControl { private: const PPColor* color; const PPColor* selectionColor; bool autoAddHide; bool notifyParentOnHide; PPFont* font; PPMenu* menu; pp_int32 menuSelection; bool hasDragged; bool pressInvoke; bool hadCursor; void showSubMenu(PPContextMenu* subMenu); public: PPContextMenu(pp_int32 id, PPScreen* parentScreen, EventListenerInterface* eventListener, const PPPoint& location, const PPColor& selColor, bool doAutoAddHide = false, PPFont* font = NULL); virtual ~PPContextMenu(); void setColor(const PPColor& color) { this->color = &color; } void setFont(PPFont* font) { this->font = font; menu->setFont(font); PPRect r = menu->getBoundingRect(); setSize(PPSize(r.width(), r.height())); } PPFont* getFont() const { return font; } virtual void paint(PPGraphicsAbstract* graphics); virtual pp_int32 dispatchEvent(PPEvent* event); virtual void setSize(const PPSize& size); virtual void setLocation(const PPPoint& location); // menu controlling void addEntry(const PPString& s, pp_int32 theId, PPContextMenu* contextMenu = NULL); bool setState(pp_int32 theId, pp_uint32 newState) { return menu->setState(theId, newState); } bool hitMenu(const PPPoint& p) const; void processMenuHit(const PPPoint& p); void setSubMenu(bool bSubMenu) { menu->setSubMenu(bSubMenu); } bool isSubMenu() const { return menu->isSubMenu(); } void setParentMenu(PPContextMenu* parent) { menu->setParentMenu(parent); } PPContextMenu* getParentMenu() const { return menu->getParentMenu(); } void setNotifyParentOnHide(bool notifyParentOnHide) { this->notifyParentOnHide = notifyParentOnHide; } bool getNotifyParentOnHide() const { return notifyParentOnHide; } }; #endif MilkyTracker-1.02.00/src/ppui/Control.cpp000066400000000000000000000101731324432207300201450ustar00rootroot00000000000000/* * ppui/Control.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "Control.h" #include "Event.h" #include "Screen.h" #include "GraphicsAbstract.h" ////////////////////////////////////////////////////////////////////////////// // PPControl construction // ------------------------------------------------------------------------ // In: Parent screen object // ------------------------------------------------------------------------ // Note: All controls are placed within a valid screen object. // The screen is responsible for drawing the controls, if a control // needs to repaint itself it must tell the parent screen to draw it ////////////////////////////////////////////////////////////////////////////// PPControl::PPControl(pp_int32 id, PPScreen* parentScreen, EventListenerInterface* eventListener /* = NULL */) : id(id), parentScreen(parentScreen), eventListener(eventListener), ownerControl(NULL), location(0,0), size(0,0), visible(true), enabled(true), hasFocus(false) { } PPControl::PPControl(pp_int32 id, PPScreen* parentScreen, EventListenerInterface* eventListener, const PPPoint& location, const PPSize& size) : id(id), parentScreen(parentScreen), eventListener(eventListener), ownerControl(NULL), location(location), size(size), visible(true), enabled(true), hasFocus(false) { } pp_int32 PPControl::dispatchEvent(PPEvent* event) { if (eventListener == NULL) return -1; return eventListener->handleEvent(reinterpret_cast(this), event); } bool PPControl::hit(const PPPoint& p) const { if (!visible) return false; return ((p.x >= location.x && p.x < location.x + size.width) && (p.y >= location.y && p.y < location.y + size.height)); } void PPControl::notifyChanges() { PPEvent e(eUpdateChanged); eventListener->handleEvent(reinterpret_cast(this), &e); } void PPControl::drawBorder(PPGraphicsAbstract* g, const PPColor& borderColor) { PPColor bColor = borderColor, dColor = borderColor; // adjust dark color dColor.scaleFixed(32768); // adjust bright color bColor.scaleFixed(87163); g->setColor(dColor); g->drawHLine(location.x, location.x + size.width, location.y); g->drawVLine(location.y, location.y + size.height, location.x); g->setColor(bColor); g->drawHLine(location.x, location.x + size.width, location.y + size.height - 1); g->drawVLine(location.y, location.y + size.height, location.x + size.width - 1); } void PPControl::drawThickBorder(PPGraphicsAbstract* g, const PPColor& borderColor) { PPColor bColor = borderColor, dColor = borderColor; // adjust dark color dColor.scaleFixed(32768); // adjust bright color bColor.scaleFixed(87163); g->setColor(borderColor); g->drawHLine(location.x, location.x + size.width, location.y); g->drawVLine(location.y, location.y + size.height, location.x); g->drawHLine(location.x, location.x + size.width, location.y + size.height - 1); g->drawVLine(location.y, location.y + size.height, location.x + size.width - 1); g->setColor(dColor); g->drawHLine(location.x+1, location.x + size.width-2, location.y+1); g->drawVLine(location.y+1, location.y + size.height-2, location.x+1); g->setColor(bColor); g->drawHLine(location.x+1, location.x + size.width-1, location.y + size.height - 2); g->drawVLine(location.y+1, location.y + size.height-2, location.x + size.width - 2); } bool PPControl::isVisible() const { bool visible = this->visible; if (ownerControl) visible = visible && ownerControl->isVisible(); return visible; } MilkyTracker-1.02.00/src/ppui/Control.h000066400000000000000000000072461324432207300176210ustar00rootroot00000000000000/* * ppui/Control.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ ///////////////////////////////////////////////////////////////// // // Basic control class // ///////////////////////////////////////////////////////////////// #ifndef CONTROL__H #define CONTROL__H // our basic types #include "Object.h" #include "BasicTypes.h" // Forwards class PPEvent; class EventListenerInterface; class PPGraphicsAbstract; class PPScreen; ///////////////////////////////////////////////////////////////// // Basic interface for all controls ///////////////////////////////////////////////////////////////// class PPControl : public PPObject { private: pp_int32 id; protected: PPScreen* parentScreen; EventListenerInterface* eventListener; // this object will receive events PPControl* ownerControl; PPPoint location; PPSize size; bool visible; bool enabled; bool hasFocus; PPControl(pp_int32 id, PPScreen* parentScreen, EventListenerInterface* eventListener = NULL); PPControl(pp_int32 id, PPScreen* parentScreen, EventListenerInterface* eventListener, const PPPoint& location, const PPSize& size); public: virtual ~PPControl() {} void setEventListener(EventListenerInterface* eventListener) { this->eventListener = eventListener; } EventListenerInterface* getEventListener() { return eventListener; } void setOwnerControl(PPControl* ownerControl) { this->ownerControl = ownerControl; } PPControl* getOwnerControl() const { return ownerControl; } virtual pp_int32 dispatchEvent(PPEvent* event); virtual void paint(PPGraphicsAbstract* graphics) = 0; virtual bool gainsFocus() const { return false; } virtual bool gainedFocusByMouse() const { return gainsFocus(); } virtual bool isActive() const { return true; } virtual bool hit(const PPPoint& p) const; virtual void show(bool visible) { this->visible = visible; } virtual void hide(bool hidden) { show(!hidden); } virtual bool isVisible() const; virtual bool isHidden() const { return !isVisible(); } virtual void enable(bool b) { enabled = b; } virtual bool isEnabled() const { return enabled; } const PPPoint& getLocation() const { return location; } const PPSize& getSize() const { return size; } PPRect getBoundingRect() const { PPRect result(location.x, location.y, location.x + size.width, location.y + size.height); return result; } pp_int32 getID() const { return id; } virtual void setSize(const PPSize& size) { this->size = size; } virtual void setLocation(const PPPoint& location) { this->location = location; } virtual bool isContainer() const { return false; } virtual bool isListBox() const { return false; } virtual bool receiveTimerEvent() const { return false; } virtual bool gotFocus() const { return hasFocus; } protected: virtual void translateCoordinates(PPPoint& cp) { cp.x-=location.x; cp.y-=location.y; } virtual void notifyChanges(); void drawBorder(PPGraphicsAbstract* g, const PPColor& borderColor); void drawThickBorder(PPGraphicsAbstract* g, const PPColor& borderColor); }; #endif MilkyTracker-1.02.00/src/ppui/DialogBase.cpp000066400000000000000000000312261324432207300205210ustar00rootroot00000000000000/* * ppui/DialogBase.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * DialogBase.cpp * MilkyTracker * * Created by Peter Barth on 06.10.05. * */ #include "DialogBase.h" #include "Screen.h" #include "StaticText.h" #include "MessageBoxContainer.h" #include "Font.h" #include "SimpleVector.h" // parse string and create a string vector with substrings // all fitting into width when drawn with font f static void wrapString(PPSimpleVector& stringParts, PPFont& f, const PPString& str, pp_int32 width) { if (f.getStrWidth(str) <= (unsigned)width) { stringParts.add(new PPString(str)); return; } PPString strCopy = str; stringParts.clear(); while (strCopy.length() > 0) { pp_int32 i = 0; pp_int32 j = -1; do { if (i < (signed)strCopy.length() && strCopy.charAt(i) == ' ') j = i; i++; } while (i <= (signed)strCopy.length() && (signed)f.getStrWidth(strCopy.subString(0,i)) <= width); i--; if (i != (signed)strCopy.length() && j >= 0) i = j+1; stringParts.add(new PPString(strCopy.subString(0,i))); strCopy = strCopy.subString(i,strCopy.length()); } } void PPDialogBase::initCommon(PPScreen* screen, DialogResponder* responder, pp_int32 id, const PPString& caption, pp_int32 width, pp_int32 height, pp_int32& x, pp_int32& y) { respondListener = responder; parentScreen = screen; messageBoxContainerGeneric = NULL; /*#ifdef __LOWRES__ height+=15; #endif*/ x = screen->getWidth() / 2 - width/2; y = screen->getHeight() / 2 - height/2; messageBoxContainerGeneric = new PPMessageBoxContainer(id, screen, this, PPPoint(x, y), PPSize(width,height), "System request"); messageBoxContainerGeneric->show(false); pp_int32 x2 = x + width / 2 - (PPFont::getFont(PPFont::FONT_SYSTEM)->getStrWidth(caption) / 2); pp_int32 y2 = y + 28; messageBoxContainerGeneric->addControl(new PPStaticText(MESSAGEBOX_STATICTEXT_MAIN_CAPTION, screen, this, PPPoint(x2, y2), caption, true)); } void PPDialogBase::initDialog(PPScreen* screen, DialogResponder* responder, pp_int32 id, const PPString& caption, const PPString& message, pp_int32 captionOffset, const PPString& buttonYesCaption) { respondListener = responder; parentScreen = screen; messageBoxContainerGeneric = NULL; pp_uint32 width = 290; PPFont* font = PPFont::getFont(PPFont::FONT_SYSTEM); PPSimpleVector stringList; wrapString(stringList, *font, message, width - (font->getCharWidth()*2 + 4)); pp_uint32 height = 62 + stringList.size()*12; /*#ifdef __LOWRES__ height+=15; #endif*/ pp_int32 x = screen->getWidth() / 2 - width/2; pp_int32 y = screen->getHeight() / 2 - height/2; messageBoxContainerGeneric = new PPMessageBoxContainer(id, screen, this, PPPoint(x, y), PPSize(width,height), caption); messageBoxContainerGeneric->show(false); pp_int32 y2 = y + 28; for (pp_int32 i = 0; i < stringList.size(); i++) { pp_int32 x2 = x + width / 2 - (font->getStrWidth(*stringList.get(i)) / 2); messageBoxContainerGeneric->addControl(new PPStaticText(MESSAGEBOX_STATICTEXT_MAIN_CAPTION+i, screen, this, PPPoint(x2, y2), *stringList.get(i), true)); y2+=12; } /*#ifdef __LOWRES__ pp_int32 y3 = y + height - (26 + 15); #else pp_int32 y3 = y + height - 26; #endif*/ pp_int32 y3 = y + height - captionOffset; PPButton* button; button = new PPButton(PP_MESSAGEBOX_BUTTON_YES, screen, this, PPPoint(x+width/2 - 30, y3), PPSize(60, 11)); button->setText(buttonYesCaption); messageBoxContainerGeneric->addControl(button); } void PPDialogBase::initDialog(PPScreen* screen, DialogResponder* responder, pp_int32 id, const PPString& caption, pp_int32 width, pp_int32 height, pp_int32 captionOffset, const PPString& buttonYesCaption) { pp_int32 x,y; initCommon(screen, responder, id, caption, width, height, x, y); /*#ifdef __LOWRES__ pp_int32 y3 = y + height - (26 + 15); #else pp_int32 y3 = y + height - 26; #endif*/ pp_int32 y3 = y + height - captionOffset; PPButton* button; button = new PPButton(PP_MESSAGEBOX_BUTTON_YES, screen, this, PPPoint(x+width/2-30, y3), PPSize(60, 11)); button->setText(buttonYesCaption); messageBoxContainerGeneric->addControl(button); } void PPDialogBase::initDialog(PPScreen* screen, DialogResponder* responder, pp_int32 id, const PPString& caption, pp_int32 width, pp_int32 height, pp_int32 captionOffset, const PPString& buttonYesCaption, const PPString& buttonCancelCaption) { pp_int32 x,y; initCommon(screen, responder, id, caption, width, height, x, y); /*#ifdef __LOWRES__ pp_int32 y3 = y + height - (26 + 15); #else pp_int32 y3 = y + height - 26; #endif*/ pp_int32 y3 = y + height - captionOffset; PPButton* button; button = new PPButton(PP_MESSAGEBOX_BUTTON_YES, screen, this, PPPoint(x+width/2-65, y3), PPSize(60, 11)); button->setText(buttonYesCaption); messageBoxContainerGeneric->addControl(button); button = new PPButton(PP_MESSAGEBOX_BUTTON_CANCEL, screen, this, PPPoint(x+width/2+5, y3), PPSize(60, 11)); button->setText(buttonCancelCaption); messageBoxContainerGeneric->addControl(button); } void PPDialogBase::initDialog(PPScreen* screen, DialogResponder* responder, pp_int32 id, const PPString& caption, pp_int32 width, pp_int32 height, pp_int32 captionOffset, const PPString& buttonYesCaption, const PPString& buttonNoCaption, const PPString& buttonCancelCaption) { pp_int32 x,y; initCommon(screen, responder, id, caption, width, height, x, y); /*#ifdef __LOWRES__ pp_int32 y3 = y + height - (26 + 15); #else pp_int32 y3 = y + height - 26; #endif*/ pp_int32 y3 = y + height - captionOffset; PPButton* button; button = new PPButton(PP_MESSAGEBOX_BUTTON_YES, screen, this, PPPoint(x+width/2-100, y3), PPSize(60, 11)); button->setText(buttonYesCaption); messageBoxContainerGeneric->addControl(button); button = new PPButton(PP_MESSAGEBOX_BUTTON_NO, screen, this, PPPoint(x+width/2-30, y3), PPSize(60, 11)); button->setText(buttonNoCaption); messageBoxContainerGeneric->addControl(button); button = new PPButton(PP_MESSAGEBOX_BUTTON_CANCEL, screen, this, PPPoint(x+width/2+40, y3), PPSize(60, 11)); button->setText(buttonCancelCaption); messageBoxContainerGeneric->addControl(button); } PPDialogBase::PPDialogBase(PPScreen* screen, DialogResponder* responder, pp_int32 id, const PPString& caption, MessageBoxTypes type/* = MessageBox_OKCANCEL*/) : keyDownInvokeKeyCode(-1) { switch (type) { case MessageBox_OK: initDialog(screen, responder, id, "System Request", caption, 26, "Okay"); break; case MessageBox_OKCANCEL: initDialog(screen, responder, id, caption, 290, 74, 26, "Yes", "No"); break; case MessageBox_YESNOCANCEL: initDialog(screen, responder, id, caption, 290, 74, 26, "Yes", "No", "Cancel"); break; } } PPDialogBase::PPDialogBase(PPScreen* screen, DialogResponder* responder, pp_int32 id, const PPString& caption, const PPString& message) : keyDownInvokeKeyCode(-1) { initDialog(screen, responder, id, caption, message, 26, "Okay"); } PPDialogBase::~PPDialogBase() { delete messageBoxContainerGeneric; } void PPDialogBase::show(bool b/* = true*/) { if (b) parentScreen->setModalControl(messageBoxContainerGeneric); else parentScreen->setModalControl(NULL); } void PPDialogBase::sendKey(EEventDescriptor event, pp_uint16 vk, pp_uint16 sc, pp_uint16 chr) { if (event == eKeyDown || event == eKeyUp) { pp_uint16 vksc[3] = {vk, sc, chr}; PPEvent keyDown(event, &vksc, sizeof(vksc)); PPControl* ctrl = messageBoxContainerGeneric->getFocusedControl(); if (ctrl && ctrl->isListBox()) ctrl->dispatchEvent(&keyDown); } else if (event == eKeyChar) { pp_uint16 vksc[2] = {vk, sc}; PPEvent keyDown(event, &vksc, sizeof(vksc)); PPControl* ctrl = messageBoxContainerGeneric->getFocusedControl(); if (ctrl && ctrl->isListBox()) ctrl->dispatchEvent(&keyDown); } } #define CALLHANDLER(HANDLERFUNC) \ if (event->getID() != eCommand) \ break; \ if (respondListener && respondListener->HANDLERFUNC(reinterpret_cast(this)) == 0) \ show(false); \ else if (respondListener == NULL) \ show(false); pp_int32 PPDialogBase::handleEvent(PPObject* sender, PPEvent* event) { #ifdef __LOWRES__ static const pp_uint16 scanCodesNumbers[] = {SC_1, SC_2, SC_3, SC_4, SC_5, SC_6, SC_7, SC_8, SC_9, SC_0, SC_PLUS, SC_MINUS, SC_PERIOD, 0, 0, 0, 0}; static const pp_uint16 asciiCodesNumbers[] = {'1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '+', '-', '.', VK_LEFT, VK_RIGHT, VK_DELETE, VK_BACK}; #endif if (event->getID() == eKeyDown && keyDownInvokeKeyCode > 0 && *(((pp_int16*)event->getDataPtr())) == keyDownInvokeKeyCode) { event->cancel(); return 0; } else if (event->getID() == eKeyChar && keyDownInvokeKeyCode > 0) { event->cancel(); } else if (event->getID() == eKeyUp && keyDownInvokeKeyCode > 0 && *(((pp_int16*)event->getDataPtr())) == keyDownInvokeKeyCode) { keyDownInvokeKeyCode = -1; event->cancel(); } if (event->getID() == eCommand || event->getID() == eCommandRepeat) { switch (reinterpret_cast(sender)->getID()) { case PP_MESSAGEBOX_BUTTON_YES: { CALLHANDLER(ActionOkay); break; } case PP_MESSAGEBOX_BUTTON_CANCEL: { CALLHANDLER(ActionCancel); break; } case PP_MESSAGEBOX_BUTTON_NO: { CALLHANDLER(ActionNo); break; } case PP_MESSAGEBOX_BUTTON_USER1: { CALLHANDLER(ActionUser1); break; } case PP_MESSAGEBOX_BUTTON_USER2: { CALLHANDLER(ActionUser2); break; } case PP_MESSAGEBOX_BUTTON_USER3: { CALLHANDLER(ActionUser3); break; } case PP_MESSAGEBOX_BUTTON_USER4: { CALLHANDLER(ActionUser4); break; } // Input keys #ifdef __LOWRES__ case MESSAGEBOX_BUTTON_KEYS_BASE: // 1 case MESSAGEBOX_BUTTON_KEYS_BASE+1: // 2 case MESSAGEBOX_BUTTON_KEYS_BASE+2: // 3 case MESSAGEBOX_BUTTON_KEYS_BASE+3: // 4 case MESSAGEBOX_BUTTON_KEYS_BASE+4: // 5 case MESSAGEBOX_BUTTON_KEYS_BASE+5: // 6 case MESSAGEBOX_BUTTON_KEYS_BASE+6: // 7 case MESSAGEBOX_BUTTON_KEYS_BASE+7: // 8 case MESSAGEBOX_BUTTON_KEYS_BASE+8: // 9 case MESSAGEBOX_BUTTON_KEYS_BASE+9: // 0 case MESSAGEBOX_BUTTON_KEYS_BASE+10: // + case MESSAGEBOX_BUTTON_KEYS_BASE+11: // - case MESSAGEBOX_BUTTON_KEYS_BASE+12: // . { pp_int32 i = (reinterpret_cast(sender)->getID() - MESSAGEBOX_BUTTON_KEYS_BASE); pp_uint16 key[3]; key[0] = key[2] = (pp_uint16)asciiCodesNumbers[i]; key[1] = scanCodesNumbers[i]; sendKey(eKeyDown, key[0], key[1], key[2]); sendKey(eKeyChar, key[0], key[1], 0); sendKey(eKeyUp, key[0], key[1], key[2]); break; } case MESSAGEBOX_BUTTON_KEYS_BASE+13: // LEFT case MESSAGEBOX_BUTTON_KEYS_BASE+14: // RIGHT case MESSAGEBOX_BUTTON_KEYS_BASE+15: // DEL case MESSAGEBOX_BUTTON_KEYS_BASE+16: // BACK { pp_int32 i = (reinterpret_cast(sender)->getID() - MESSAGEBOX_BUTTON_KEYS_BASE); pp_uint16 key[2]; key[0] = (pp_uint16)asciiCodesNumbers[i]; key[1] = scanCodesNumbers[i]; key[2] = 0; sendKey(eKeyDown, key[0], key[1], key[2]); sendKey(eKeyUp, key[0], key[1], key[2]); break; } #endif } } return 0; } void PPDialogBase::setUserButtonText(pp_int32 index, const PPString& caption) { PPButton* button = static_cast(messageBoxContainerGeneric->getControlByID(PP_MESSAGEBOX_BUTTON_USER1+index)); if (button) button->setText(caption); } pp_int32 PPDialogBase::getID() const { if (messageBoxContainerGeneric) return messageBoxContainerGeneric->getID(); return 0; } void PPDialogBase::setMessageBoxContainer(PPMessageBoxContainer* container) { delete messageBoxContainerGeneric; messageBoxContainerGeneric = container; } MilkyTracker-1.02.00/src/ppui/DialogBase.h000066400000000000000000000110631324432207300201630ustar00rootroot00000000000000/* * ppui/DialogBase.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * DialogBase.h * MilkyTracker * * Created by Peter Barth on 06.10.05. * */ #ifndef __DIALOGBASE_H__ #define __DIALOGBASE_H__ #include "BasicTypes.h" #include "Event.h" class PPScreen; class PPMessageBoxContainer; class PPDialogBase : public EventListenerInterface { public: enum MessageBoxTypes { MessageBox_OK, MessageBox_OKCANCEL, MessageBox_YESNOCANCEL }; private: DialogResponder* respondListener; pp_int16 keyDownInvokeKeyCode; protected: PPScreen* parentScreen; PPMessageBoxContainer* messageBoxContainerGeneric; enum { MESSAGEBOX_STATICTEXT_MAIN_CAPTION = 1, MESSAGEBOX_STATICTEXT_VALUE_ONE_CAPTION = 2, MESSAGEBOX_STATICTEXT_VALUE_TWO_CAPTION = 3, MESSAGEBOX_STATICTEXT_USER1 = 4, MESSAGEBOX_STATICTEXT_USER2 = 5, MESSAGEBOX_LISTBOX_VALUE_ONE = 100, MESSAGEBOX_LISTBOX_VALUE_TWO = 200, MESSAGEBOX_LISTBOX_VALUE_THREE = 300, MESSAGEBOX_LISTBOX_USER1 = 400, MESSAGEBOX_CONTROL_USER1 = 500, MESSAGEBOX_CONTROL_USER2, MESSAGEBOX_CONTROL_USER3, MESSAGEBOX_BUTTON_INCREASE_VALUEONE = (MESSAGEBOX_LISTBOX_VALUE_ONE+1), MESSAGEBOX_BUTTON_DECREASE_VALUEONE = (MESSAGEBOX_LISTBOX_VALUE_ONE+2), MESSAGEBOX_BUTTON_INCREASE_VALUETWO = (MESSAGEBOX_LISTBOX_VALUE_TWO+1), MESSAGEBOX_BUTTON_DECREASE_VALUETWO = (MESSAGEBOX_LISTBOX_VALUE_TWO+2), MESSAGEBOX_BUTTON_INCREASE_VALUETHREE = (MESSAGEBOX_LISTBOX_VALUE_THREE+1), MESSAGEBOX_BUTTON_DECREASE_VALUETHREE = (MESSAGEBOX_LISTBOX_VALUE_THREE+2), MESSAGEBOX_BUTTON_KEYS_BASE = 1000 }; void initDialog(PPScreen* screen, DialogResponder* responder, pp_int32 id, const PPString& caption, const PPString& message, pp_int32 captionOffset, const PPString& buttonYesCaption); void initDialog(PPScreen* screen, DialogResponder* responder, pp_int32 id, const PPString& caption, pp_int32 width, pp_int32 height, pp_int32 captionOffset, const PPString& buttonYesCaption); void initDialog(PPScreen* screen, DialogResponder* responder, pp_int32 id, const PPString& caption, pp_int32 width, pp_int32 height, pp_int32 captionOffset, const PPString& buttonYesCaption, const PPString& buttonCancelCaption); void initDialog(PPScreen* screen, DialogResponder* responder, pp_int32 id, const PPString& caption, pp_int32 width, pp_int32 height, pp_int32 captionOffset, const PPString& buttonYesCaption, const PPString& buttonNoCaption, const PPString& buttonCancelCaption); protected: PPDialogBase() : respondListener(NULL), keyDownInvokeKeyCode(-1), parentScreen(NULL), messageBoxContainerGeneric(NULL) { } public: PPDialogBase(PPScreen* screen, DialogResponder* responder, pp_int32 id, const PPString& caption, MessageBoxTypes type = MessageBox_OKCANCEL); PPDialogBase(PPScreen* screen, DialogResponder* responder, pp_int32 id, const PPString& caption, const PPString& message); virtual ~PPDialogBase(); void setResponder(DialogResponder* responder) { respondListener = responder; } PPMessageBoxContainer* getMessageBoxContainer() const { return messageBoxContainerGeneric; } void setMessageBoxContainer(PPMessageBoxContainer* container); virtual void show(bool b = true); virtual pp_int32 handleEvent(PPObject* sender, PPEvent* event); void setUserButtonText(pp_int32 index, const PPString& caption); void setKeyDownInvokeKeyCode(pp_int16 keyCode) { keyDownInvokeKeyCode = keyCode; } pp_int32 getID() const; private: void initCommon(PPScreen* screen, DialogResponder* responder, pp_int32 id, const PPString& caption, pp_int32 width, pp_int32 height, pp_int32& x, pp_int32& y); void sendKey(EEventDescriptor event, pp_uint16 vk, pp_uint16 sc, pp_uint16 chr); }; #endif MilkyTracker-1.02.00/src/ppui/DialogFileSelector.cpp000066400000000000000000000367521324432207300222400ustar00rootroot00000000000000/* * ppui/DialogFileSelector.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * DialogFileSelector.cpp * MilkyTracker * * Created by Peter Barth on 25.10.05. * */ #include "DialogFileSelector.h" #include "Screen.h" #include "StaticText.h" #include "MessageBoxContainer.h" #include "Font.h" #include "ListBox.h" #include "ListBoxFileBrowser.h" #include "CheckBox.h" #include "CheckBoxLabel.h" #include "PPPathFactory.h" enum ControlIDs { DISKMENU_STATICTEXT_FILTEREXTENSIONS = PP_MESSAGEBOX_BUTTON_USER6, DISKMENU_CHECKBOX_FILTEREXTENSIONS, DISKMENU_STATICTEXT_SORTBY, DISKMENU_BUTTON_SORTBY, DISKMENU_BUTTON_SORTORDER, }; pp_int32 DialogFileSelector::OverwritePromptResponder::ActionOkay(PPObject* sender) { PPEvent event(eCommand); return dialogFileSelector.baseClassHandleEvent(dialogFileSelector.getMessageBoxContainer()->getControlByID(PP_MESSAGEBOX_BUTTON_OK), &event); } pp_int32 DialogFileSelector::OverwritePromptResponder::ActionCancel(PPObject* sender) { dialogFileSelector.show(); // avoid removal of modal dialog box after we're out of here return 1; } DialogFileSelector::DialogFileSelector(PPScreen* screen, DialogResponder* responder, pp_int32 id, const PPString& caption, bool editfileName/* = false*/, bool overwritePrompt/* = false*/, bool selectDirectories/* = false*/) : PPDialogBase(), doOverwritePrompt(overwritePrompt), allowSelectDirectories(selectDirectories), allowEditFileName(editfileName), sortAscending(true) { initDialog(screen, responder, id, caption, 310, 230, 26, "Ok", "Cancel"); PPControl* text = getMessageBoxContainer()->getControlByID(MESSAGEBOX_STATICTEXT_MAIN_CAPTION); text->setLocation(PPPoint(text->getLocation().x, text->getLocation().y - 4)); pp_int32 x = getMessageBoxContainer()->getLocation().x; pp_int32 width = getMessageBoxContainer()->getSize().width; pp_int32 height = getMessageBoxContainer()->getSize().height; PPButton* button = static_cast(messageBoxContainerGeneric->getControlByID(PP_MESSAGEBOX_BUTTON_YES)); pp_int32 y2 = button->getLocation().y; pp_int32 x2 = x + width / 2 - 65; button->setLocation(PPPoint(x2+5,y2)); button = static_cast(messageBoxContainerGeneric->getControlByID(PP_MESSAGEBOX_BUTTON_CANCEL)); x2 = x + width / 2 + 5; button->setLocation(PPPoint(x2+5,y2)); y2 = getMessageBoxContainer()->getControlByID(MESSAGEBOX_STATICTEXT_MAIN_CAPTION)->getLocation().y + 14 + 16; pp_int32 listBoxWidth = (240*width)>>8; x2 = x + width / 2 - (listBoxWidth>>1); pp_uint32 x3 = x2+3; pp_uint32 size = 6*8+4; pp_uint32 space = 6; button = new PPButton(PP_MESSAGEBOX_BUTTON_USER4, screen, this, PPPoint(x3, y2 - 16), PPSize(size, 12)); button->setText("Prev."); messageBoxContainerGeneric->addControl(button); x3+=button->getSize().width + space; button = new PPButton(PP_MESSAGEBOX_BUTTON_USER5, screen, this, PPPoint(x3, y2 - 16), PPSize(size, 12)); button->setText("Next"); messageBoxContainerGeneric->addControl(button); x3+=button->getSize().width + space; button = new PPButton(PP_MESSAGEBOX_BUTTON_USER2, screen, this, PPPoint(x3, y2 - 16), PPSize(size, 12)); button->setText("Parent"); messageBoxContainerGeneric->addControl(button); x3+=button->getSize().width + space; button = new PPButton(PP_MESSAGEBOX_BUTTON_USER3, screen, this, PPPoint(x3, y2 - 16), PPSize(size, 12)); button->setText("Root"); messageBoxContainerGeneric->addControl(button); x3+=button->getSize().width + space; button = new PPButton(PP_MESSAGEBOX_BUTTON_USER1, screen, this, PPPoint(x3, y2 - 16), PPSize(size+2, 12)); button->setText("Home"); messageBoxContainerGeneric->addControl(button); x3+=button->getSize().width + space; { pp_uint32 x3 = x2+3; pp_uint32 y3 = y2 + 3; PPControl* ctrl; ctrl = new PPStaticText(DISKMENU_STATICTEXT_SORTBY, NULL, NULL, PPPoint(x3, y3), "Sort by:", true); messageBoxContainerGeneric->addControl(ctrl); x3+=8*8; button = new PPButton(DISKMENU_BUTTON_SORTBY, screen, this, PPPoint(x3, y3-1), PPSize(51, 11), false); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Extension"); messageBoxContainerGeneric->addControl(button); button = new PPButton(DISKMENU_BUTTON_SORTORDER, screen, this, PPPoint(x3+button->getSize().width, y3-1), PPSize(13, 11), false); button->setText(sortAscending ? "\xfd" : "\xfe"); messageBoxContainerGeneric->addControl(button); x3+=114; PPCheckBox* checkBox = new PPCheckBox(DISKMENU_CHECKBOX_FILTEREXTENSIONS, screen, this, PPPoint(x3 + 12 * 8 + 2, y3 - 1)); messageBoxContainerGeneric->addControl(checkBox); messageBoxContainerGeneric->addControl(new PPCheckBoxLabel(DISKMENU_STATICTEXT_FILTEREXTENSIONS, screen, this, PPPoint(x3, y3), "Type filter:", checkBox, true)); } y2 = getMessageBoxContainer()->getControlByID(DISKMENU_STATICTEXT_SORTBY)->getLocation().y + 14; listBoxFiles = new PPListBoxFileBrowser(MESSAGEBOX_LISTBOX_USER1, screen, this, PPPoint(x2, y2), PPSize(listBoxWidth, height - (122))); listBoxFiles->setFilePrefix(""); listBoxFiles->setDirectoryPrefix(""); listBoxFiles->setDirectorySuffixPathSeperator(); listBoxFiles->setSortAscending(sortAscending); messageBoxContainerGeneric->addControl(listBoxFiles); editFieldCurrentFile = new PPListBox(MESSAGEBOX_LISTBOX_USER1+1, screen, this, PPPoint(x2, y2+listBoxFiles->getSize().height + 4), PPSize(listBoxWidth,12), true, editfileName, false); editFieldCurrentFile->setBorderColor(messageBoxContainerGeneric->getColor()); editFieldCurrentFile->showSelection(false); editFieldCurrentFile->setMaxEditSize(4096); editFieldCurrentFile->addItem(""); editFieldCurrentFile->setSingleButtonClickEdit(true); messageBoxContainerGeneric->addControl(editFieldCurrentFile); overwritePrompResponder = new OverwritePromptResponder(*this); overwritePromptMessageBox = new PPDialogBase(screen, overwritePrompResponder, PP_DEFAULT_ID, "Overwrite existing file?"); fileFullPath = new PPSystemString(); initialPath = new PPSystemString(listBoxFiles->getCurrentPathAsString()); } DialogFileSelector::~DialogFileSelector() { delete initialPath; delete fileFullPath; delete overwritePromptMessageBox; } pp_int32 DialogFileSelector::handleEvent(PPObject* sender, PPEvent* event) { if (event->getID() == eKeyDown || event->getID() == eKeyUp || event->getID() == eKeyChar) { return processKeys(sender, event); } else if (event->getID() == eCommand) { switch (reinterpret_cast(sender)->getID()) { case PP_MESSAGEBOX_BUTTON_OK: { return confirm(); } case PP_MESSAGEBOX_BUTTON_USER1: { gotoHome(); break; } case PP_MESSAGEBOX_BUTTON_USER2: { gotoParent(); break; } case PP_MESSAGEBOX_BUTTON_USER3: { gotoRoot(); break; } case PP_MESSAGEBOX_BUTTON_USER4: { prev(); break; } case PP_MESSAGEBOX_BUTTON_USER5: { next(); break; } case DISKMENU_BUTTON_SORTBY: listBoxFiles->cycleSorting(); refresh(); break; case DISKMENU_BUTTON_SORTORDER: sortAscending = !sortAscending; listBoxFiles->setSortAscending(sortAscending); refresh(); break; case DISKMENU_CHECKBOX_FILTEREXTENSIONS: updateFilter(); break; default: return PPDialogBase::handleEvent(sender, event); } } else if (reinterpret_cast(sender) == listBoxFiles && event->getID() == eConfirmed) { pp_int32 index = *((pp_int32*)event->getDataPtr()); return confirm(*listBoxFiles->getPathEntry(index)); } else if (reinterpret_cast(sender) == listBoxFiles && event->getID() == eSelection) { updateSelection(*((pp_int32*)event->getDataPtr())); return PPDialogBase::handleEvent(sender, event); } else if (event->getID() == eValueChanged) { switch (reinterpret_cast(sender)->getID()) { case MESSAGEBOX_LISTBOX_USER1+1: { const PPString* str = *(reinterpret_cast(event->getDataPtr())); *fileFullPath = listBoxFiles->getCurrentPathAsString(); PPSystemString newStr(*str); fileFullPath->append(newStr); break; } } } else return PPDialogBase::handleEvent(sender, event); return 0; } void DialogFileSelector::show(bool b/* = true*/) { if (b) { refreshExtensions(); refresh(false); } PPDialogBase::show(b); } const PPSystemString& DialogFileSelector::getSelectedPathFull() { editFieldCurrentFile->commitChanges(); PPString str = editFieldCurrentFile->getItem(0); *fileFullPath = listBoxFiles->getCurrentPathAsString(); PPSystemString newStr(str); fileFullPath->append(newStr); return *fileFullPath; } void DialogFileSelector::setCurrentEditFileName(const PPSystemString& name) { editFieldCurrentFile->clear(); char* nameASCIIZ = name.toASCIIZ(); PPString str(nameASCIIZ); editFieldCurrentFile->addItem(str); delete[] nameASCIIZ; *fileFullPath = listBoxFiles->getCurrentPathAsString(); fileFullPath->append(name); } void DialogFileSelector::updateButtonStates(bool repaint/* = true*/) { // Get home button PPButton* buttonHome = static_cast(getMessageBoxContainer()->getControlByID(PP_MESSAGEBOX_BUTTON_USER1)); buttonHome->setClickable(listBoxFiles->canGotoHome()); // Get previous button PPButton* buttonPrev = static_cast(getMessageBoxContainer()->getControlByID(PP_MESSAGEBOX_BUTTON_USER4)); buttonPrev->setClickable(listBoxFiles->canPrev()); // Get next button PPButton* buttonNext = static_cast(getMessageBoxContainer()->getControlByID(PP_MESSAGEBOX_BUTTON_USER5)); buttonNext->setClickable(listBoxFiles->canNext()); if (repaint) { parentScreen->paintControl(buttonHome); parentScreen->paintControl(buttonPrev); parentScreen->paintControl(buttonNext); } { PPButton* button; const char* stateText = sortAscending ? "\xfd" : "\xfe"; button = static_cast(getMessageBoxContainer()->getControlByID(DISKMENU_BUTTON_SORTORDER)); if (button->getText().compareTo(stateText) != 0) { button->setText(stateText); if (repaint) parentScreen->paintControl(button); } static const char* sortTypes[PPListBoxFileBrowser::NumSortRules] = {"Name", "Size", "Extension"}; stateText = sortTypes[listBoxFiles->getSortType()]; button = static_cast(getMessageBoxContainer()->getControlByID(DISKMENU_BUTTON_SORTBY)); if (button->getText().compareTo(stateText) != 0) { button->setText(stateText); if (repaint) parentScreen->paintControl(button); } } } pp_int32 DialogFileSelector::baseClassHandleEvent(PPObject* sender, PPEvent* event) { return PPDialogBase::handleEvent(sender, event); } pp_int32 DialogFileSelector::processKeys(PPObject* sender, PPEvent* event) { if (event->getID() == eKeyDown) { pp_uint16 keyCode = *((pp_uint16*)event->getDataPtr()); //pp_uint16 scanCode = *(((pp_uint16*)event->getDataPtr())+1); switch (keyCode) { case VK_ESCAPE: if (editFieldCurrentFile->isEditing()) goto callBaseClass; return discard(); break; case VK_RETURN: if (editFieldCurrentFile->isEditing()) goto callBaseClass; return confirm(); break; default: callBaseClass: return baseClassHandleEvent(sender, event); } } else if (event->getID() == eKeyUp) { return baseClassHandleEvent(sender, event); } return baseClassHandleEvent(sender, event); } pp_int32 DialogFileSelector::confirm() { pp_int32 i = listBoxFiles->getSelectedIndex(); PPSystemString currentSelectedName = listBoxFiles->getPathEntry(i)->getName(); PPString str = editFieldCurrentFile->getItem(0); PPSystemString currentEnteredName(str); if (currentEnteredName.compareTo(currentSelectedName) == 0 || currentEnteredName.length() == 0) return confirm(*listBoxFiles->getPathEntry(i)); pp_int32 res; PPPathEntry* newPathEntry = PPPathFactory::createPathEntry(); newPathEntry->create(listBoxFiles->getCurrentPathAsString(), currentEnteredName); res = confirm(*newPathEntry); delete newPathEntry; return res; } pp_int32 DialogFileSelector::confirm(const PPPathEntry& entry) { if (!allowSelectDirectories && entry.isDirectory()) { stepInto(entry); return 0; } else if (doOverwritePrompt && entry.isFile() && listBoxFiles->getCurrentPath().fileExists(getSelectedPathFull())) { overwritePromptMessageBox->show(); return 0; } // fake OK press PPEvent event(eCommand); return PPDialogBase::handleEvent(reinterpret_cast(getMessageBoxContainer()->getControlByID(PP_MESSAGEBOX_BUTTON_OK)), &event); } pp_int32 DialogFileSelector::discard() { // fake cancel button press PPEvent event(eCommand); return PPDialogBase::handleEvent(reinterpret_cast(getMessageBoxContainer()->getControlByID(PP_MESSAGEBOX_BUTTON_CANCEL)), &event); } void DialogFileSelector::refresh(bool repaint/* = true*/) { listBoxFiles->refreshFiles(); updateButtonStates(false); refreshCurrentFileEditField(false); if (repaint) parentScreen->paintControl(messageBoxContainerGeneric); } void DialogFileSelector::refreshCurrentFileEditField(bool repaint/* = true*/) { const PPPathEntry* entry = listBoxFiles->getCurrentSelectedPathEntry(); if (!entry || (allowEditFileName && !entry->isFile())) return; editFieldCurrentFile->clear(); char* nameASCIIZ = entry->getName().toASCIIZ(); PPString str(nameASCIIZ); editFieldCurrentFile->addItem(str); delete[] nameASCIIZ; if (repaint) parentScreen->paintControl(editFieldCurrentFile); } void DialogFileSelector::updateSelection(pp_int32 index, bool repaint/* = true*/) { refreshCurrentFileEditField(repaint); *fileFullPath = listBoxFiles->getCurrentPathAsString(); fileFullPath->append(listBoxFiles->getPathEntry(index)->getName()); } void DialogFileSelector::gotoHome() { listBoxFiles->gotoHome(); refresh(); } void DialogFileSelector::gotoRoot() { listBoxFiles->gotoRoot(); refresh(); } void DialogFileSelector::gotoParent() { listBoxFiles->gotoParent(); refresh(); } bool DialogFileSelector::stepInto(const PPPathEntry& entry) { if (listBoxFiles->stepInto(entry)) { refresh(); return true; } return false; } void DialogFileSelector::gotoPath(const PPSystemString& path) { listBoxFiles->gotoPath(path); refresh(); } // undo last changes void DialogFileSelector::prev() { listBoxFiles->prev(); refresh(); } // redo last changes void DialogFileSelector::next() { listBoxFiles->next(); refresh(); } void DialogFileSelector::addExtension(const PPString& ext, const PPString& desc) { extensions.add(new Descriptor(ext, desc)); } void DialogFileSelector::refreshExtensions() { listBoxFiles->clearExtensions(); for (pp_int32 i = 0; i < extensions.size(); i++) listBoxFiles->addExtension(extensions.get(i)->extension, extensions.get(i)->description); } void DialogFileSelector::updateFilter() { listBoxFiles->clearExtensions(); if (static_cast(messageBoxContainerGeneric->getControlByID(DISKMENU_CHECKBOX_FILTEREXTENSIONS))->isChecked()) { refreshExtensions(); } refresh(); } MilkyTracker-1.02.00/src/ppui/DialogFileSelector.h000066400000000000000000000060661324432207300217000ustar00rootroot00000000000000/* * ppui/DialogFileSelector.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * DialogFileSelector.h * MilkyTracker * * Created by Peter Barth on 08.03.06. * */ #ifndef __DIALOGFILESELECTOR_H__ #define __DIALOGFILESELECTOR_H__ #include "DialogBase.h" #include "SimpleVector.h" class PPListBoxFileBrowser; class PPListBox; class PPPath; class PPPathEntry; class PPSystemString; class DialogFileSelector : public PPDialogBase { private: PPListBoxFileBrowser* listBoxFiles; PPListBox* editFieldCurrentFile; PPSystemString* initialPath; PPSystemString* fileFullPath; PPDialogBase* overwritePromptMessageBox; bool doOverwritePrompt; bool allowSelectDirectories; bool allowEditFileName; bool sortAscending; class OverwritePromptResponder : public DialogResponder { private: DialogFileSelector& dialogFileSelector; public: OverwritePromptResponder(DialogFileSelector& responder) : dialogFileSelector(responder) { } virtual pp_int32 ActionOkay(PPObject* sender); virtual pp_int32 ActionCancel(PPObject* sender); }; OverwritePromptResponder* overwritePrompResponder; PPSimpleVector extensions; public: DialogFileSelector(PPScreen* screen, DialogResponder* responder, pp_int32 id, const PPString& caption, bool editfileName = false, bool overwritePrompt = false, bool selectDirectories = false); virtual ~DialogFileSelector(); virtual pp_int32 handleEvent(PPObject* sender, PPEvent* event); virtual void show(bool b = true); const PPSystemString& getSelectedPathFull(); void setCurrentEditFileName(const PPSystemString& name); void addExtension(const PPString& ext, const PPString& desc); private: void updateButtonStates(bool repaint = true); pp_int32 baseClassHandleEvent(PPObject* sender, PPEvent* event); pp_int32 processKeys(PPObject* sender, PPEvent* event); pp_int32 confirm(const PPPathEntry& entry); pp_int32 confirm(); pp_int32 discard(); void refresh(bool repaint = true); void refreshCurrentFileEditField(bool repaint = true); void updateSelection(pp_int32 index, bool repaint = true); void gotoHome(); void gotoRoot(); void gotoParent(); bool stepInto(const PPPathEntry& entry); void gotoPath(const PPSystemString& path); void prev(); void next(); void refreshExtensions(); void updateFilter(); friend class OverwritePromptResponder; }; #endif MilkyTracker-1.02.00/src/ppui/Dictionary.cpp000066400000000000000000000104321324432207300206300ustar00rootroot00000000000000/* * ppui/Dictionary.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * PPDictionary.cpp * MilkyTracker * * Created by Peter Barth on Mon Mar 14 2005. * */ #include "Dictionary.h" #include "SimpleVector.h" PPDictionary::PPDictionary() : enumerating(false), enumerationIndex(0) { keys = new PPSimpleVector; } PPDictionary::~PPDictionary() { delete keys; } // copy c'tor PPDictionary::PPDictionary(const PPDictionary& source) { keys = source.keys->clone(); } PPDictionary& PPDictionary::operator=(const PPDictionary& source) { // no self-assignment if (this != &source) { delete keys; keys = source.keys->clone(); } return *this; } PPDictionaryKey* PPDictionary::getKeyToModify(const PPString& key) const { for (pp_int32 i = 0; i < keys->size(); i++) { PPDictionaryKey* theKey = keys->get(i); if (theKey->getKey().compareTo(key) == 0) return theKey; } return NULL; } void PPDictionary::store(const PPString& key, const PPString& value) { PPDictionaryKey* theKey = getKeyToModify(key); if (theKey) theKey->store(value); else keys->add(new PPDictionaryKey(key, value)); } void PPDictionary::store(const PPString& key, const pp_uint32 value) { PPDictionaryKey* theKey = getKeyToModify(key); if (theKey) theKey->store(value); else keys->add(new PPDictionaryKey(key, value)); } PPDictionaryKey* PPDictionary::restore(const PPString& key) { return getKeyToModify(key); } pp_int32 PPDictionary::size() const { return keys->size(); } PPDictionaryKey* PPDictionary::getFirstKey() { if (keys->size() == 0) return NULL; enumerationIndex = 0; enumerating = true; PPDictionaryKey* theKey = keys->get(enumerationIndex); enumerationIndex++; return theKey; } PPDictionaryKey* PPDictionary::getNextKey() { if (!enumerating) return NULL; PPDictionaryKey* theKey = keys->get(enumerationIndex); enumerationIndex++; if (enumerationIndex == keys->size()) { enumerationIndex = 0; enumerating = false; } return theKey; } void PPDictionary::stopEnumeration() { enumerating = false; enumerationIndex = 0; } PPString PPDictionary::serializeToString() { PPString result; for (pp_int32 i = 0; i < keys->size(); i++) { PPDictionaryKey* theKey = keys->get(i); if (i) result.append(";"); result.append(theKey->getKey()); result.append("="); result.append(theKey->getStringValue()); } return result; } PPDictionary* PPDictionary::createFromString(const PPString& string) { PPDictionary* dictionary = new PPDictionary(); const char* str = string; pp_uint32 index = 0; bool invalid = false; pp_uint32 startIndex = 0; while (index < string.length()) { while (str[index] && str[index] != '=') index++; PPString key; if (str[index] == '=') { key = string.subString(startIndex, index); startIndex = ++index; } else { invalid = true; break; } while (str[index] && str[index] != ';') index++; PPString value; if (index > startIndex) { value = string.subString(startIndex, index); startIndex = ++index; } dictionary->store(key, value); } if (invalid || (string.length() == 0)) { delete dictionary; dictionary = NULL; } return dictionary; } pp_uint32 PPDictionary::convertFloatToIntNonLossy(float value) { pp_uint32 result; // not compatible if (sizeof(float) != sizeof(result)) return 0; memcpy(&result, &value, sizeof(result)); return result; } float PPDictionary::convertIntToFloatNonLossy(pp_uint32 value) { float result; // not compatible if (sizeof(float) != sizeof(result)) return 0; memcpy(&result, &value, sizeof(result)); return result; } MilkyTracker-1.02.00/src/ppui/Dictionary.h000066400000000000000000000035031324432207300202760ustar00rootroot00000000000000/* * ppui/Dictionary.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * Dictionary.h * MilkyTracker * * Created by Peter Barth on Mon Mar 14 2005. * */ #ifndef DICTIONARY__H #define DICTIONARY__H #include "BasicTypes.h" #include "DictionaryKey.h" template class PPSimpleVector; class PPDictionary { private: PPSimpleVector* keys; bool enumerating; pp_int32 enumerationIndex; PPDictionaryKey* getKeyToModify(const PPString& key) const; public: PPDictionary(); ~PPDictionary(); // copy c'tor PPDictionary(const PPDictionary& source); PPDictionary& operator=(const PPDictionary& source); void store(const PPString& key, const PPString& value); void store(const PPString& key, const pp_uint32 value); PPDictionaryKey* restore(const PPString& key); pp_int32 size() const; PPDictionaryKey* getFirstKey(); PPDictionaryKey* getNextKey(); void stopEnumeration(); PPString serializeToString(); static PPDictionary* createFromString(const PPString& string); static pp_uint32 convertFloatToIntNonLossy(float value); static float convertIntToFloatNonLossy(pp_uint32 value); }; #endif MilkyTracker-1.02.00/src/ppui/DictionaryKey.cpp000066400000000000000000000030621324432207300213020ustar00rootroot00000000000000/* * ppui/DictionaryKey.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * PPDictionaryKey.cpp * MilkyTracker * * Created by Peter Barth on Mon Mar 14 2005. * */ #include "DictionaryKey.h" #include PPDictionaryKey::PPDictionaryKey(const PPString& newKey, const PPString& newValue) : key(newKey), value(newValue) { } PPDictionaryKey::PPDictionaryKey(const PPString& newKey, const pp_uint32 value) : key(newKey) { store(value); } PPDictionaryKey::PPDictionaryKey(const PPDictionaryKey& source) { key = source.key; value = source.value; } void PPDictionaryKey::store(const PPString& newValue) { value = newValue; } void PPDictionaryKey::store(const pp_uint32 value) { char buffer[100]; sprintf(buffer,"%i",value); this->value = buffer; } pp_uint32 PPDictionaryKey::getIntValue() const { pp_uint32 v; sscanf(value, "%i", &v); return v; } MilkyTracker-1.02.00/src/ppui/DictionaryKey.h000066400000000000000000000027451324432207300207560ustar00rootroot00000000000000/* * ppui/DictionaryKey.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * DictionaryKey.h * MilkyTracker * * Created by Peter Barth on Mon Mar 14 2005. * */ #ifndef DICTIONARYKEY__H #define DICTIONARYKEY__H #include "BasicTypes.h" class PPDictionaryKey { private: PPString key; PPString value; public: PPDictionaryKey(const PPString& newKey, const PPString& newValue); PPDictionaryKey(const PPString& newKey, const pp_uint32 value); // copy c'tor PPDictionaryKey(const PPDictionaryKey& source); void store(const PPString& newValue); void store(const pp_uint32 value); const PPString& getStringValue() const { return value; } pp_uint32 getIntValue() const; bool getBoolValue() const { return getIntValue() != 0; } const PPString& getKey() const { return key; } }; #endif MilkyTracker-1.02.00/src/ppui/DisplayDeviceBase.h000066400000000000000000000142151324432207300215130ustar00rootroot00000000000000/* * ppui/DisplayDeviceBase.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #ifndef __DISPLAYDEVICEBASE_H__ #define __DISPLAYDEVICEBASE_H__ // Some default values #ifndef __LOWRES__ #define DISPLAYDEVICE_WIDTH 640 #define DISPLAYDEVICE_HEIGHT 480 #else #define DISPLAYDEVICE_WIDTH 320 #define DISPLAYDEVICE_HEIGHT 240 #endif #include "BasicTypes.h" #include "Font.h" class PPGraphicsAbstract; ////////////////////////////////////////////////////////////////////////////////////////////////////////// // ------------------------------------ really shitty stuff ---------------------------------------------- ////////////////////////////////////////////////////////////////////////////////////////////////////////// typedef void (*DrawPixelFunc)(void* buffer, pp_int32 x, pp_int32 y, pp_int32 pitch, const PPColor& color); static void DrawString(const char* textBuffer, pp_int32 posx, pp_int32 posy, const PPColor& color, void* buffer, pp_int32 pitch, DrawPixelFunc drawPixelFuncPtr) { PPFont* font = PPFont::getFont(PPFont::FONT_SYSTEM); while (*textBuffer) { pp_uint8 chr = *textBuffer++; { unsigned int j,i; for (i=0;i<8;i++) for (j=0;j<8;j++) if (font->getPixelBit(chr, j, i)) (*drawPixelFuncPtr)(buffer, posx+j, posy+i, pitch, color); } posx+=8; } } static void DrawWaitBar(const pp_int32 width, const pp_int32 height, const pp_int32 barWidth, const pp_int32 barHeight, const pp_int32 BAR_BRIGHT_COLOR, const pp_int32 BAR_DARK_COLOR, void* buffer, pp_int32 pitch, DrawPixelFunc drawPixelFuncPtr) { pp_int32 x,y; static int offset = 0; // background pattern, must be of type pp_uint8 static pp_uint8 pattern[] = {224, 210, 198, 210, 224}; for (y = 0; y < height; y++) { PPColor back; back.r = back.g = back.b = pattern[y % sizeof(pattern)]; for (x = 0; x < width; x++) (*drawPixelFuncPtr)(buffer, x, y, pitch, back); } PPColor textColor(0,0,0); ::DrawString("please wait" PPSTR_PERIODS, (width>>1)-(14*4), (height>>1)-16, textColor, buffer, pitch, drawPixelFuncPtr); int hBarPos = (width >> 1) - (barWidth>>1); int vBarPos = (height >> 1) - (barHeight>>1) + (height>>3); for (y = 0; y < barHeight; y++) { for (x = 0; x < barWidth; x++) { PPColor col; // little border for the lazy guys if ((y == 0) || (y == barHeight-1) || (x == 0) || (x == barWidth-1)) { col.r = col.g = col.b = 128; } else { int c = (x+y+(offset)) & 0x1f; int shade = 0; if (c <= 31) shade = c; else shade = 31 - (c - 32); shade = 255-(shade*8); col.r = ((BAR_BRIGHT_COLOR >> 16) * shade + (BAR_DARK_COLOR >> 16) * (255-shade)) >> 8; col.g = (((BAR_BRIGHT_COLOR >> 8) & 0xff) * shade + ((BAR_DARK_COLOR >> 8) & 0xff) * (255-shade)) >> 8; col.b = ((BAR_BRIGHT_COLOR & 0xff) * shade + (BAR_DARK_COLOR & 0xff) * (255-shade)) >> 8; } (*drawPixelFuncPtr)(buffer, hBarPos+x, vBarPos+y, pitch, col); } } offset+=8; } ////////////////////////////////////////////////////////////////////////////////////////////////////////// enum MouseCursorTypes { MouseCursorTypeStandard, MouseCursorTypeResizeLeft, MouseCursorTypeResizeRight, MouseCursorTypeHand, MouseCursorTypeWait }; class PPDisplayDeviceBase { protected: PPGraphicsAbstract* currentGraphics; PPSize size; pp_int32 scaleFactor; pp_int32 updateStackPtr; pp_int32 disabledStackPtr; // ----------------------------- ex. PPWindow ---------------------------- bool bFullScreen; PPColor waitBarColor; MouseCursorTypes currentCursorType; public: PPDisplayDeviceBase(pp_int32 theWidth = DISPLAYDEVICE_WIDTH, pp_int32 theHeight = DISPLAYDEVICE_HEIGHT, pp_int32 scaleFactor = 1) : currentGraphics(0), size(PPSize(theWidth, theHeight)), scaleFactor(scaleFactor), updateStackPtr(0), disabledStackPtr(0), bFullScreen(false), currentCursorType(MouseCursorTypeStandard) { } virtual ~PPDisplayDeviceBase() { } void enable(bool b) { if (!b) disabledStackPtr++; else if (disabledStackPtr > 0) --disabledStackPtr; } void allowForUpdates(bool b) { if (!b) updateStackPtr++; else if (updateStackPtr > 0) --updateStackPtr; } bool isEnabled() const { return disabledStackPtr == 0; } bool isUpdateAllowed() const { return updateStackPtr == 0; } virtual PPGraphicsAbstract* open() = 0; virtual void close() = 0; virtual void update() = 0; virtual void update(const PPRect& r) = 0; virtual void setSize(const PPSize& size) { this->size = size; } virtual const PPSize& getSize() const { return this->size; } pp_int32 getScaleFactor() const { return scaleFactor; } virtual bool supportsScaling() const { return false; } static pp_int32 getDefaultWidth() { return DISPLAYDEVICE_WIDTH; } static pp_int32 getDefaultHeight() { return DISPLAYDEVICE_HEIGHT; } // ----------------------------- ex. PPWindow ---------------------------- public: virtual bool init() { return true; } virtual void setTitle(const PPSystemString& title) { } virtual bool goFullScreen(bool b) { return true; } virtual bool isFullScreen() { return bFullScreen; } virtual PPSize getDisplayResolution() const { return PPSize(-1, -1); } virtual void shutDown() = 0; virtual void signalWaitState(bool b, const PPColor& color) { } virtual void setMouseCursor(MouseCursorTypes type) { currentCursorType = type; } virtual MouseCursorTypes getCurrentActiveMouseCursor() { return currentCursorType; } }; #endif MilkyTracker-1.02.00/src/ppui/Event.cpp000066400000000000000000000025471324432207300176140ustar00rootroot00000000000000/* * ppui/Event.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * PPEvent.cpp * MilkyTracker * * Created by Peter Barth on 23.05.05. * */ #include "Event.h" pp_uint32 keyModifier = 0; pp_uint32 forceKeyModifier = 0; void QueryKeyModifiers(); void setKeyModifier(KeyModifiers eModifier) { keyModifier |= eModifier; } void clearKeyModifier(KeyModifiers eModifier) { keyModifier &= ~eModifier; } void setForceKeyModifier(KeyModifiers eModifier) { forceKeyModifier |= eModifier; } void clearForceKeyModifier(KeyModifiers eModifier) { forceKeyModifier &= ~eModifier; } pp_uint32 getKeyModifier() { QueryKeyModifiers(); return keyModifier | forceKeyModifier; } MilkyTracker-1.02.00/src/ppui/Event.h000066400000000000000000000127271324432207300172620ustar00rootroot00000000000000/* * ppui/Event.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ ///////////////////////////////////////////////////////////////// // // PPEvent classes // ///////////////////////////////////////////////////////////////// #ifndef EVENT__H #define EVENT__H #include "Object.h" #include "BasicTypes.h" // key states enum KeyModifiers { KeyModifierALT = 1, KeyModifierSHIFT = 2, KeyModifierCTRL = 4 }; struct TMouseWheelEventParams { PPPoint pos; pp_int32 deltaX; pp_int32 deltaY; }; void setKeyModifier(KeyModifiers eModifier); void clearKeyModifier(KeyModifiers eModifier); void setForceKeyModifier(KeyModifiers eModifier); void clearForceKeyModifier(KeyModifiers eModifier); pp_uint32 getKeyModifier(); enum EEventDescriptor { eInvalid = 0, eLMouseDown, eLMouseUp, eLMouseDoubleClick, eLMouseDrag, eLMouseRepeat, eRMouseDown, eRMouseUp, eRMouseDoubleClick, eRMouseDrag, eRMouseRepeat, eMMouseDown, eMMouseUp, eMMouseDoubleClick, eMMouseDrag, eMMouseRepeat, eMouseMoved, eMouseEntered, eMouseLeft, eMouseWheelMoved, eBarPosChanged, eBarScrollUp, eBarScrollDown, eKeyDown, eKeyChar, eKeyUp, eFileDragDropped, eFileSystemChanged, eFocusGained, eFocusLost, eFocusGainedNoRepaint, eFocusLostNoRepaint, eRemovedContextMenu, eCommand, // e.g. button pressed once eCommandRight, // e.g. right button pressed once eCommandRepeat, // e.g. button stays pressed ePreSelection, // e.g. list box selection is about to change eSelection, // e.g. list box selection has been made eValueChanged, eUpdated, eUpdateChanged, eConfirmed, // e.g. ok-press eCanceled, // e.g. cancel-press eTimer, eFullScreen, eAppQuit }; ///////////////////////////////////////////////////////////////// // Basic event class ///////////////////////////////////////////////////////////////// class PPEvent : public PPObject { private: EEventDescriptor ID; unsigned char userData[256]; pp_int32 dataSize; pp_int32 metaData; public: PPEvent() : ID(eInvalid), dataSize(0), metaData(0) { } PPEvent(EEventDescriptor ID, pp_int32 theMetaData = 0) : ID(ID), dataSize(0), metaData(theMetaData) { } PPEvent(EEventDescriptor ID, void* dataPtr, pp_int32 dSize, pp_int32 theMetaData = 0) : ID(ID), dataSize(dSize), metaData(theMetaData) { if (dSize <= (signed)sizeof(userData)) memcpy(userData, dataPtr, dataSize); else exit(0); } PPEvent(const PPEvent& event) : ID(event.ID), dataSize(event.dataSize), metaData(event.metaData) { memcpy(this->userData, event.userData, event.dataSize); } EEventDescriptor getID() const { return ID; } const void* getDataPtr() const { return userData; } pp_int32 getDataSize() const { return dataSize; } pp_int32 getMetaData() const { return metaData; } void cancel() { ID = eInvalid; } bool isMouseEvent() const { switch (ID) { case eLMouseDown: case eLMouseUp: case eLMouseDoubleClick: case eLMouseDrag: case eLMouseRepeat: case eRMouseDown: case eRMouseUp: case eRMouseDoubleClick: case eRMouseDrag: case eRMouseRepeat: case eMMouseDown: case eMMouseUp: case eMMouseDoubleClick: case eMMouseDrag: case eMMouseRepeat: case eMouseMoved: case eMouseEntered: case eMouseLeft: case eMouseWheelMoved: return true; default: return false; } } }; ///////////////////////////////////////////////////////////////// // Interface for EventListenerInterface ///////////////////////////////////////////////////////////////// class EventListenerInterface : public PPObject { public: virtual pp_int32 handleEvent(PPObject* sender, PPEvent* event) = 0; }; enum { PP_MESSAGEBOX_BUTTON_YES = 31000, PP_MESSAGEBOX_BUTTON_OK = 31000, PP_MESSAGEBOX_BUTTON_NO = 31001, PP_MESSAGEBOX_BUTTON_CANCEL = 31002, PP_MESSAGEBOX_BUTTON_USER1 = 31003, PP_MESSAGEBOX_BUTTON_USER2 = 31004, PP_MESSAGEBOX_BUTTON_USER3 = 31005, PP_MESSAGEBOX_BUTTON_USER4 = 31006, PP_MESSAGEBOX_BUTTON_USER5 = 31007, PP_MESSAGEBOX_BUTTON_USER6 = 31008, PP_MESSAGEBOX_BUTTON_USER7 = 31009, PP_MESSAGEBOX_BUTTON_USER8 = 31010, PP_MESSAGEBOX_BUTTON_USER9 = 31011, PP_MESSAGEBOX_BUTTON_USER10 = 31012, PP_MESSAGEBOX_BUTTON_USER11 = 31013, PP_MESSAGEBOX_BUTTON_USER12 = 31014, PP_MESSAGEBOX_BUTTON_USER13 = 31015, PP_MESSAGEBOX_BUTTON_USER14 = 31016, PP_MESSAGEBOX_BUTTON_USER15 = 31017, PP_DEFAULT_ID = 0x12345678 }; class DialogResponder { public: virtual pp_int32 ActionOkay(PPObject* sender) { return 0; } virtual pp_int32 ActionCancel(PPObject* sender) { return 0; } virtual pp_int32 ActionNo(PPObject* sender) { return 0; } virtual pp_int32 ActionUser1(PPObject* sender) { return 0; } virtual pp_int32 ActionUser2(PPObject* sender) { return 0; } virtual pp_int32 ActionUser3(PPObject* sender) { return 0; } virtual pp_int32 ActionUser4(PPObject* sender) { return 0; } }; #endif MilkyTracker-1.02.00/src/ppui/Font.cpp000066400000000000000000011466251324432207300174500ustar00rootroot00000000000000/* * ppui/Font.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ ////////////////////////////////////////////////////////////////////// // // PPFont.cpp: implementation of the PPFont class. // ////////////////////////////////////////////////////////////////////// #include "Font.h" #include struct FontEntry { FontEntry(const char* theName, const unsigned int theWidth, const unsigned int theHeight, const char* theData) : name(theName), width(theWidth), height(theHeight), data(theData) { } const char* name; const unsigned int width, height; const char* data; }; FontEntry fontEntries[] = { // Font no. 0 FontEntry("ARIEL", 8, 8, "\x0\x0\x0\x0\x0\x0\x0\x0\x7e\x81\xa5\x81\xbd\x99\x81\x7e\x7e\xff\xdb\xff\xff\xc3\xe7\x7e\x0\x77\x7f\x7f\x3e\x1c\x8\x0\x8\x1c\x3e\x7f\x3e\x1c\x8\x0\x18\x3c\x18\xff\xff\x52\x18\x0\x8\x1c\x3e\x7f\x7f\x49\x1c\x0\x0\x0\x18\x3c\x18\x0\x0\x0" "\xff\xff\xe7\xc3\xe7\xff\xff\xff\x0\x3c\x42\x81\x81\x42\x3c\x0\xff\xc3\xbd\x7e\x7e\xbd\xc3\xff\xf8\xe0\xb0\x3e\x63\x63\x3e\x0\x0\x7e\xc3\xc3\x7e\x18\x7e\x18\x20\x60\xe0\x20\x20\x3f\x1f\x0\x30\x50\xb0\xd0\x9f\x8f\xf0\xf0\x81\xc2\xbc\xe4\xa4\xfc\xea\xff" "\x0\x0\x6\x1e\x7e\x1e\x6\x0\x0\x0\x60\x78\x7e\x78\x60\x0\x18\x7e\x18\x18\x18\x18\x7e\x18\x66\x66\x66\x66\x66\x0\x66\x0\xff\x6d\x6e\x6c\x6c\x6c\x6c\x0\x7e\x81\x3e\x42\x42\x7c\x81\x7e\x0\x0\x0\x7e\x7e\x0\x0\x0\x18\x7e\x18\x18\x7e\x18\x0\xff" "\x18\x7e\x18\x18\x18\x18\x18\x0\x18\x18\x18\x18\x18\x7e\x18\x0\x0\x20\x60\xff\x60\x20\x0\x0\x0\x4\x6\xff\x6\x4\x0\x0\x0\x0\x0\x3\x3\x3\xff\x0\x0\x24\x66\xff\x66\x24\x0\x0\x0\x0\x8\x1c\x3e\x7f\x0\x0\x0\x0\x0\x7f\x3e\x1c\x8\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\xc\xc\xc\xc\xc\x0\xc\x0\x66\x66\x0\x0\x0\x0\x0\x0\xa\x1f\xa\x1f\xa\x0\x0\x0\x3e\x4b\xb\x3e\x68\x6b\x3e\x8\xc7\x65\x37\x18\xec\xa6\xe3\x0\x1c\x32\x1c\xa2\x63\x73\x5e\x80\x30\x30\x18\x0\x0\x0\x0\x0" "\x8\x6\x3\x3\x3\x6\x8\x0\x8\x30\x60\x60\x60\x30\x8\x0\x0\x2a\x1c\x7f\x1c\x2a\x0\x0\x0\x18\x18\x7e\x18\x18\x0\x0\x0\x0\x0\x0\x0\x0\x18\xe\x0\x0\x0\x7e\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x30\x0\x80\xc0\x60\x30\x18\xc\x6\x3" "\x3c\x66\x66\x66\x66\x66\x3c\x0\x18\x1c\x18\x18\x18\x18\x3c\x0\x3e\x63\x60\x30\xc\x6\x7f\x0\x3e\x63\x60\x3c\x60\x63\x3e\x0\x70\x78\x6c\x66\x7f\x60\x60\x0\x7f\x3\x3\x3f\x60\x60\x3f\x0\x3e\x63\x3\x3f\x63\x63\x3e\x0\x7f\x60\x30\x18\xc\xc\xc\x0" "\x3e\x63\x63\x3e\x63\x63\x3e\x0\x3e\x63\x63\x7e\x60\x63\x3e\x0\x0\xc\x0\x0\x0\xc\x0\x0\x0\xc\x0\x0\x0\xc\x4\x0\x0\x38\xc\x6\xc\x38\x0\x0\x0\x0\x7e\x0\x7e\x0\x0\x0\x0\xe\x18\x30\x18\xe\x0\x0\x3e\x63\x30\x18\xc\x0\xc\x0" "\x3e\x41\x5d\x55\x7d\x1\x3e\x0\x1c\x36\x63\x63\x7f\x63\x63\x0\x3f\x63\x63\x3f\x63\x63\x3f\x0\x3e\x63\x3\x3\x63\x63\x3e\x0\x3f\x63\x63\x63\x63\x63\x3f\x0\x7f\x3\x3\x1f\x3\x3\x7f\x0\x7f\x43\x3\x1f\x13\x3\x3\x0\x3e\x63\x3\x7b\x43\x63\x5e\x0" "\x63\x63\x63\x7f\x63\x63\x63\x0\x7e\x18\x18\x18\x18\x18\x7e\x0\x78\x30\x30\x30\x30\x33\x1e\x0\x63\x33\x1b\xf\x1b\x33\x63\x0\xf\x6\x6\x6\x6\x46\x7f\x0\x63\x77\x7f\x6b\x6b\x63\x63\x0\x63\x67\x6f\x7b\x73\x63\x63\x0\x3e\x63\x63\x63\x63\x63\x3e\x0" "\x3f\x66\x66\x3e\x6\x6\xf\x0\x3e\x63\x63\x63\x7b\x73\x3e\x60\x3f\x66\x66\x3e\x66\x66\x67\xc0\x3e\x43\x3\x3e\x60\x63\x3e\x0\x7e\x18\x18\x18\x18\x18\x18\x0\x63\x63\x63\x63\x63\x63\x3e\x0\x63\x63\x63\x63\x63\x36\x1c\x0\x63\x63\x6b\x6b\x6b\x77\x63\x0" "\x63\x36\x1c\x8\x1c\x36\x63\x0\x41\x63\x36\x1c\x8\x8\x1c\x0\x7f\x61\x30\x18\xc\x46\x7f\x0\x38\x18\x18\x18\x18\x18\x18\x38\x3\x6\xc\x18\x30\x60\xc0\x80\xe\xc\xc\xc\xc\xc\xc\xe\x8\x1c\x36\x63\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xff" "\xc\xc\x18\x0\x0\x0\x0\x0\x0\x0\x3e\x60\x7e\x63\x7e\x0\x3\x3\x3f\x63\x63\x63\x3f\x0\x0\x0\x3e\x63\x3\x63\x3e\x0\x60\x60\x7e\x63\x63\x63\x7e\x0\x0\x0\x3e\x63\x7f\x3\x3e\x0\x3c\x66\x6\x3f\x6\x6\x6\x0\x0\x0\xbe\x63\x63\x7e\x60\x3e" "\x3\x3\x3f\x63\x63\x63\x63\x0\x18\x0\x1c\x18\x18\x18\x3c\x0\x30\x0\x38\x30\x30\x30\x33\x1e\x3\x3\x63\x1b\xf\x1b\x63\x0\x1c\x18\x18\x18\x18\x18\x38\x0\x0\x0\x63\x7f\x6b\x6b\x63\x0\x0\x0\x3f\x63\x63\x63\x63\x0\x0\x0\x3e\x63\x63\x63\x3e\x0" "\x0\x0\x3f\x63\x63\x3f\x3\x3\x0\x0\x7e\x63\x63\x7e\x60\xe0\x0\x0\x7b\x6e\x66\x6\x6\x0\x0\x0\x7e\x3\x3e\x60\x3f\x0\x18\x18\x7e\x18\x18\x18\x78\x0\x0\x0\x63\x63\x63\x63\x7e\x0\x0\x0\x63\x63\x63\x36\x1c\x0\x0\x0\x63\x6b\x6b\x77\x63\x0" "\x0\x0\x63\x36\x1c\x36\x63\x0\x0\x0\x63\x63\x63\x7e\x60\x3f\x0\x0\x7f\x30\x8\x46\x7f\x0\x70\x18\x18\xe\x18\x18\x70\x0\x18\x18\x18\x0\x18\x18\x18\x0\x7\xc\xc\x38\xc\xc\x7\x0\xe\xd9\x70\x0\x0\x0\x0\x0\x0\x0\x8\x14\x22\x7f\x0\x0" "\xff\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\x1\x80\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\xff" "\x1\x0\x0\x0\x0\x0\x0\x0\x80\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x1\x0\x0\x0\x0\x0\x0\x0\x80\x1\x3\x7\xf\x1f\x3f\x7f\xff\xff\xfe\xfc\xf8\xf0\xe0\xc0\x80\xff\xff\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0" "\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\x3\x3\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\xff\xff\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\x0\x55\x0\x0\x0\x0\x0\x3f\x3f\x3f\x3f\x3f\x3f\x0\x0\x7e\x7e\x7e\x7e\x7e\x7e\x0\x0\xfc\xfc\xfc\xfc\xfc\xfc\x0\x0\xf8\xf8\xf8\xf8\xf8\xf8\x0\x0\xf0\xf0\xf0\xf0\xf0\xf0\x0" "\x0\xe0\xe0\xe0\xe0\xe0\xe0\x0\x0\xc0\xc0\xc0\xc0\xc0\xc0\x0\x0\x80\x80\x80\x80\x80\x80\x0\x0\x1\x1\x1\x1\x1\x1\x0\x0\x3\x3\x3\x3\x3\x3\x0\x0\x7\x7\x7\x7\x7\x7\x0\x0\xf\xf\xf\xf\xf\xf\x0\x0\x1f\x1f\x1f\x1f\x1f\x1f\x0" "\x55\x6b\x55\x6b\x55\x6b\x55\x6b\xff\xff\x0\x0\x0\x8\x1c\x3e\xff\xff\x0\x0\x0\x0\x0\x7f\xff\xff\x0\x0\x8\x1c\x3e\x7f\xff\xff\x0\xc3\xe7\xff\xdb\xc3\x0\x0\x0\x0\x18\x0\x0\x0\x0\x3\x3\x3\x3\x3\x3\x3\x0\x1b\x1b\x1b\x1b\x1b\x1b\x1b" "\x0\xdb\xdb\xdb\xdb\xdb\xdb\xdb\x0\x6\x6\x6\x6\x6\x6\x6\x0\x36\x36\x36\x36\x36\x36\x36\x0\xb6\xb6\xb6\xb6\xb6\xb6\xb6\x0\x1\x1\x1\x1\x1\x1\x1\x0\xd\xd\xd\xd\xd\xd\xd\x0\x6d\x6d\x6d\x6d\x6d\x6d\x6d\x0\x0\x18\x3c\x3c\x18\x0\x0" "\x0\x0\x0\x1f\x18\x1f\x18\x18\x6c\x6c\x6c\x6f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x0\x0\x0\x7f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6f\x60\x7f\x0\x0\x6c\x6c\x6c\x7f\x0\x0\x0\x0\x18\x18\x18\x1f\x18\x1f\x0\x0\x0\x0\x0\x1f\x18\x18\x18\x18" "\x18\x18\x18\xf8\x0\x0\x0\x0\x18\x18\x18\xff\x0\x0\x0\x0\x0\x0\x0\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\x18\x18\x18\x0\x0\x0\x0\xff\x0\x0\x0\x18\x18\x18\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\xf8\x18\x18\x6c\x6c\x6c\xec\x6c\x6c\x6c\x6c" "\x6c\x6c\x6c\xec\xc\xfc\x0\x0\x0\x0\x0\xfc\xc\xec\x6c\x6c\x6c\x6c\x6c\xef\x0\xff\x0\x0\x0\x0\x0\xff\x0\xef\x6c\x6c\x6c\x6c\x6c\xec\xc\xec\x6c\x6c\x0\x0\x0\xff\x0\xff\x0\x0\x6c\x6c\x6c\xef\x0\xef\x6c\x6c\x18\x18\x18\xff\x0\xff\x0\x0" "\x6c\x6c\x6c\xff\x0\x0\x0\x0\x0\x0\x0\xff\x0\xff\x18\x18\x0\x0\x0\xff\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xfc\x0\x0\x0\x0\x18\x18\x18\xf8\x18\xf8\x0\x0\x0\x0\x0\xf8\x18\xf8\x18\x18\x0\x0\x0\xfc\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xff\x6c\x6c\x6c\x6c" "\x18\x18\x18\xff\x18\xff\x18\x18\x18\x18\x18\x1f\x0\x0\x0\x0\x0\x0\x0\xf8\x18\x18\x18\x18\xff\xff\xff\xff\xff\xff\xff\xff\x0\x0\x0\x0\xff\xff\xff\xff\xf\xf\xf\xf\xf\xf\xf\xf\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xff\xff\xff\xff\x0\x0\x0\x0" "\x0\x0\xee\x19\x19\xee\x0\x0\x38\x6c\x66\x3f\x63\x63\x3f\x3\x7f\x46\x6\x6\x6\x6\x6\x0\x0\x0\xff\x66\x66\x66\x66\x0\x7f\x46\xc\x18\xc\x46\x7f\x0\x0\x0\xfc\x66\x63\x33\x1e\x0\x0\x0\xcc\xcc\xcc\x7c\xc\xf\x0\x0\xff\x18\x18\x18\x18\x0" "\x3c\x18\x3c\x66\x66\x3c\x18\x3c\x0\x3e\x63\x7f\x63\x3e\x0\x0\x0\x7e\xc3\xc3\xc3\x66\xe7\x0\x78\x98\x3c\x66\x63\x33\x1e\x0\x0\x0\x66\x99\x99\x66\x0\x0\x0\xc0\x3e\x73\x67\x3e\x3\x0\x0\x7c\x3\x7f\x3\x7c\x0\x0\x0\x0\x0\x0\x0\xdb\xdb\x0" "\x0\x7e\x0\x7e\x0\x7e\x0\x0\x0\xf8\x8\x8\x8\x8\xf8\x0\x0\xff\x0\x0\x0\x0\xff\x0\x0\x1f\x10\x10\x10\x10\x1f\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x0\x2\x1\x0\x0\x0\x20\x30\x28\x24\x22\xa1\x60\x20\x0\x0\x0\x1\x2\x0\x0\x0" "\x20\x60\xa1\x22\x24\x28\x30\x20\x0\x0\x0\x40\x40\x40\x40\x7f\xff\x81\x81\x81\x81\x80\x80\x80\x0\x0\x0\x20\x20\x11\x11\xe\x38\x44\x44\x82\x82\x0\x0\x0\x0\x0\xfe\x7c\x38\x10\x0\x0\x0\x0\x10\x38\x7c\xfe\x0\x0\x80\xc1\x63\x36\x1c\x8\x0\x0" ), // Font no. 1 FontEntry("ATHENA", 12, 12, "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x70\x80\xf\xf8\x80\xf\xf8\x0\x7\x70\x0\x0\x0\x0\x7\x70\x0\x0\xdc\xc1\x1d\x10\x1\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xe0\x38\x8e\xf3\x7f\x8e\xe3\x38\x8e" "\xe3\x38\xff\xe7\x38\x8e\x3\x0\x50\x0\x5\xfe\x73\x5\x57\xe0\x3f\x50\x7\x75\xfe\x3\x5\x50\x0\x0\x0\x0\x1c\xc7\x71\xe\xe0\x0\x7\x70\x80\x3\x38\xc7\x71\x1c\x0\x0\xfe\x70\x18\x87\xf1\xc\x7e\xc0\x3\x76\x32\x3e\xc3\x71\x3c\x7e\x7\x0\x70\x0" "\x7\x40\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xf0\x80\x3\x38\x80\x3\x38\x80\x3\x38\x80\x3\x38\x80\x3\xf0\x0\x0\x78\x0\xe\xe0\x0\xe\xe0\x0\xe\xe0\x0\xe\xe0\x0\xe\x78\x0\x0\x0\x0\x2\x70\x80\xf\xff\xe7\x3f\xfc\xc1\x1f" "\x8e\x33\x60\x0\x0\x0\x0\x0\x7\x70\x0\x7\x70\xf0\x7f\x70\x0\x7\x70\x0\x7\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x7\x70\x0\x4\x0\x0\x0\x0\x0\x0\x0\xf0\x7f\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x7\x70\x0\x0\x0\x0\x1c\xc0\x1\xe\xe0\x0\x7\x70\x80\x3\x38\xc0\x1\x1c\x0\x0\xfe\x73\x70\x7\x77\x70\x7\x77\x70\x7\x77\x70\x7\x77\x70\xfe\x3\x0\x70\x80\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\x70\x0" "\x7\xfe\x3\x0\xfe\x73\x70\x7\x7\x38\xc0\x1\xe\x70\x80\x3\x1c\xe0\x0\xff\x7\x0\xfe\x73\x70\x7\x7\x70\xe0\x3\x70\x0\x7\x70\x7\x77\x70\xfe\x3\x0\x7\x77\x70\x7\x77\x70\xfe\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\x0\xff\x77\x0\x7\x70\x0" "\xff\x3\x70\x0\x7\x70\x7\x77\x70\xfe\x3\x0\xfe\x73\x0\x7\x70\x0\xff\x73\x70\x7\x77\x70\x7\x77\x70\xfe\x3\x0\xff\x7\x70\x0\x7\x38\x80\x3\x7f\xc0\x1\xe\xe0\x0\x7\x70\x0\x0\xfe\x73\x70\x7\x77\x70\xfe\x73\x70\x7\x77\x70\x7\x77\x70\xfe" "\x3\x0\xfe\x73\x70\x7\x77\x70\x7\x77\x70\xfe\x7\x70\x0\x7\x70\xfe\x3\x0\x0\x0\x0\x0\x0\x0\x0\x0\x7\x70\x0\x0\x0\x0\x7\x70\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x7\x70\x0\x0\x0\x0\x7\x70\x0\x4\x0\x0\x0\xc0\x1\xe\x70\x80" "\x3\x1c\x80\x3\x70\x0\xe\xc0\x1\x0\x0\x0\x0\x0\xe0\x3f\x0\x0\x0\x0\xe0\x3f\x0\x0\x0\x0\x0\x0\x0\x0\x0\x1c\x80\x3\x70\x0\xe\xc0\x1\xe\x70\x80\x3\x1c\x0\x0\xfe\x73\x70\x0\x7\x70\x0\x7\x3e\x70\x0\x7\x0\x0\x7\x70\x0\x0" "\xfc\xe1\x38\x67\x77\x7b\x37\x77\x73\x37\x77\x73\xe7\xe3\x0\xfc\x1\x0\xfe\x73\x70\x7\x77\x70\xff\x77\x70\x7\x77\x70\x7\x77\x70\x7\x7\x0\xff\x73\x70\x7\x77\x70\xff\x73\x70\x7\x77\x70\x7\x77\x70\xff\x3\x0\xfe\x73\x70\x7\x70\x0\x7\x70\x0\x7" "\x70\x0\x7\x70\x70\xfe\x3\x0\xff\x71\x38\x7\x77\x70\x7\x77\x70\x7\x77\x70\x7\x77\x38\xff\x1\x0\xff\x77\x0\x7\x70\x0\x7f\x70\x0\x7\x70\x0\x7\x70\x0\xff\x7\x0\xff\x77\x0\x7\x70\x0\x7f\x70\x0\x7\x70\x0\x7\x70\x0\x7\x0\x0\xfe\x73" "\x70\x7\x70\x0\xc7\x77\x70\x7\x77\x70\x7\x77\x70\xfe\x3\x0\x7\x77\x70\x7\x77\x70\xff\x77\x70\x7\x77\x70\x7\x77\x70\x7\x7\x0\xff\x7\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\xff\x7\x0\xfe\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\x70" "\x0\x77\x70\xfe\x3\x0\x7\x77\x70\x7\x77\x38\xff\x71\x38\x7\x77\x70\x7\x77\x70\x7\x7\x0\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\x70\x0\xff\x7\x0\x3\x76\x70\x8f\xf7\x7d\xff\x77\x77\x27\x77\x70\x7\x77\x70\x7\x7\x0\x3\x77\x70\xf" "\xf7\x71\x3f\x77\x77\xe7\x77\x7c\x87\x77\x70\x7\x6\x0\xfe\x73\x70\x7\x77\x70\x7\x77\x70\x7\x77\x70\x7\x77\x70\xfe\x3\x0\xff\x73\x70\x7\x77\x70\xff\x73\x0\x7\x70\x0\x7\x70\x0\x7\x0\x0\xfe\x73\x70\x7\x77\x70\x7\x77\x70\x7\x77\x76\xe7\x77" "\x7c\xbe\x3\x30\xff\x73\x70\x7\x77\x70\xff\x73\x70\x7\x77\x70\x7\x77\x70\x7\x7\x0\xfe\x73\x70\x7\x70\x0\xfe\x3\x70\x0\x7\x70\x0\x77\x70\xfe\x3\x0\xff\x7\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\x70\x0\x0\x7\x77\x70\x7\x77\x70" "\x7\x77\x70\x7\x77\x70\x7\x77\x70\xfe\x3\x0\x7\x77\x70\x7\x77\x70\x7\x77\x70\x7\x77\x70\x8e\xc3\x1d\xf8\x0\x0\x7\x77\x70\x7\x77\x70\x27\x77\x77\xff\xf7\x7d\x8f\x77\x70\x3\x6\x0\x7\x77\x70\x7\xe7\x38\xfc\xe1\x38\x7\x77\x70\x7\x77\x70\x7" "\x7\x0\x7\x77\x70\x7\x77\x70\xfe\x7\x70\x0\x7\x70\x0\x7\x70\xfc\x3\x0\xff\x7\x70\x80\x3\x1c\xe0\x0\x7\x38\xc0\x1\xe\x70\x0\xff\x7\x0\xf8\x80\x3\x38\x80\x3\x38\x80\x3\x38\x80\x3\x38\x80\x3\xf8\x0\x0\x0\xc0\x1\x1c\x80\x3\x38\x0" "\x7\x70\x0\xe\xe0\x0\x1c\xc0\x1\x0\xf8\x0\xe\xe0\x0\xe\xe0\x0\xe\xe0\x0\xe\xe0\x0\xe\xf8\x0\x0\x20\x0\x7\xf8\xc0\x1d\x8e\x3\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xff\x7\x0" "\x70\x0\x7\x40\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xe0\x3f\x0\x7\x70\xfe\x77\x70\x7\x77\x70\xfe\x7\x0\x7\x70\x0\x7\xf0\x3f\x7\x77\x70\x7\x77\x70\x7\x77\x70\xff\x3\x0\x0\x0\x0\x0\xe0\x3f\x7\x77\x0\x7" "\x70\x0\x7\x70\x70\xfe\x3\x0\x0\x7\x70\x0\xe7\x7f\x7\x77\x70\x7\x77\x70\x7\x77\x70\xfe\x7\x0\x0\x0\x0\x0\xe0\x3f\x7\x77\x70\xff\x77\x0\x7\x70\x70\xfe\x3\x0\xe0\x3\x7\x70\x0\x7\x70\xe0\x3f\x70\x0\x7\x70\x0\x7\x70\x0\x0\x0\x0" "\x0\x0\xe0\x3f\x7\x77\x70\xfe\x7\x70\x0\x77\x70\xfe\x3\x0\x7\x70\x0\x7\xf0\x3f\x7\x77\x70\x7\x77\x70\x7\x77\x70\x7\x7\x0\x0\x0\x7\x0\xe0\x3f\x70\x0\x7\x70\x0\x7\x70\x0\x7\xfe\x3\x0\x0\x0\x70\x0\x0\x70\x0\x7\x70\x0\x7\x70" "\x0\x77\x70\xfe\x3\x0\x7\x70\x0\x7\x77\x70\x7\x77\x38\xff\x71\x38\x7\x77\x70\x7\x7\x0\x0\x80\x3\x38\x80\x3\x38\x80\x3\x38\x80\x3\x38\x80\x3\xf0\x1\x0\x0\x0\x0\x0\xe0\x3f\x27\x77\x72\x27\x77\x72\x7\x77\x70\x7\x7\x0\x0\x0\x0\x0" "\xe0\x3f\x7\x77\x70\x7\x77\x70\x7\x77\x70\x7\x7\x0\x0\x0\x0\x0\xe0\x3f\x7\x77\x70\x7\x77\x70\x7\x77\x70\xfe\x3\x0\x0\x0\x0\x0\xf0\x3f\x7\x77\x70\x7\x77\x70\x7\xf7\x3f\x7\x70\x0\x0\x0\x0\x0\xe0\x7f\x7\x77\x70\x7\x77\x70\x7\xe7" "\x7f\x0\x7\x70\x0\x0\x0\x0\xe0\x3f\x7\x77\x0\x7\x70\x0\x7\x70\x0\x7\x0\x0\x0\x0\x0\x0\xe0\x3f\x7\x70\x0\xfe\x1\x70\x0\x7\x70\xfe\x3\x0\x0\x70\x0\x7\x70\x0\x7\xf0\x3\x7\x70\x0\x7\x77\x70\xfe\x3\x0\x0\x0\x0\x0\x70\x70" "\x7\x77\x70\x7\x77\x70\x7\x77\x70\xfe\x3\x0\x0\x0\x0\x0\x70\x70\x7\x77\x70\x7\x77\x70\x8e\xc3\x1d\xf8\x0\x0\x0\x0\x0\x0\x70\x70\x7\x77\x70\x27\x77\x72\x27\x77\x72\xfe\x3\x0\x0\x0\x0\x0\x70\x70\x7\x77\x70\xfe\x73\x70\x7\x77\x70\x7" "\x7\x0\x0\x0\x0\x0\x70\x70\x7\x77\x70\xfe\x7\x70\x0\x77\x70\xfe\x3\x0\x0\x0\x0\x0\xf0\x7f\xc0\x3\x1e\xf0\x80\x7\x3c\xe0\x1\xff\x7\x0\xf0\x80\x3\x38\x80\x3\x70\xc0\xf\x70\x80\x3\x38\x80\x3\xf0\x0\x0\x70\x0\x7\x70\x0\x7\x70\x0" "\x7\x70\x0\x7\x70\x0\x7\x70\x0\x0\x78\x0\xe\xe0\x0\xe\x70\x80\x1f\x70\x0\xe\xe0\x0\xe\x78\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xf0\xff\xff\xf\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xf0\xff\x7\x70\x0\x7\x70\x0\xff\xf" "\x0\x0\x0\x0\x0\x0\x0\x0\xf0\xff\x0\x0\x0\x0\x0\x0\xff\xf\x0\x0\x0\x0\x0\x0\x0\x0\xf0\xff\x0\xe\xe0\x0\xe\xe0\xff\xf\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xc0\x1f\xf8\x80\xf\x70\x0\x7\x20\x0\x2\x0\x0\x0\x0\x0\x0\x20\x0\x2\x70\x0\x7\xf8\x80\xf\xfc\x1\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" ), // Font no. 2 FontEntry("ATHENA_SPACED", 12, 12, "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x70\x80\xf\xf8\x80\xf\xf8\x0\x7\x70\x0\x0\x70\x0\x7\x0\x0\x0\xdc\xc1\x1d\x10\x1\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xe0\x38\x8e\xf3\x7f\x8e\xe3\x38\x8e" "\xf3\x7f\x8e\xe3\x38\x0\x0\x0\x50\x0\x5\xfe\x73\x5\xfe\x3\x75\x50\xe7\x3f\x50\x0\x5\x0\x0\x0\x0\x0\x0\xe7\x70\xe\x70\x0\x7\x38\x80\x3\x1c\xc7\x71\x0\x0\x0\xfe\x70\x18\xcf\xe0\x7\x3c\x60\x27\xe3\x33\x1c\xc7\xe3\x77\x0\x0\x0\x70\x0" "\x7\x40\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xf0\x80\x3\x38\x80\x3\x38\x80\x3\x38\x80\x3\x38\x0\xf\x0\x0\x0\x78\x0\xe\xe0\x0\xe\xe0\x0\xe\xe0\x0\xe\xe0\x80\x7\x0\x0\x0\x0\x0\x2\x70\x80\xf\xff\xe7\x3f\xfc\xc1\x1f" "\x8e\x33\x60\x0\x0\x0\x0\x0\x0\x70\x0\x7\x70\xf0\x7f\x70\x0\x7\x70\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x70\x0\x7\x40\x0\x0\x0\x0\x0\x0\x0\x0\x0\xf0\x7f\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x70\x0\x7\x0\x0\x0\xc0\x1\x1c\xe0\x0\xe\x70\x0\x7\x38\x80\x3\x1c\xc0\x1\x0\x0\x0\xfe\x73\x70\x7\x77\x70\x7\x77\x70\x7\x77\x70\x7\xe7\x3f\x0\x0\x0\x70\x80\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\x70\xe0" "\x3f\x0\x0\x0\xfe\x73\x70\x87\x3\x1c\xe0\x0\x7\x38\xc0\x1\xe\xf0\x7f\x0\x0\x0\xfe\x73\x70\x7\x7\x70\xe0\x3\x70\x0\x77\x70\x7\xe7\x3f\x0\x0\x0\x7\x77\x70\x7\x77\x70\xfe\x7\x70\x0\x7\x70\x0\x7\x70\x0\x0\x0\xff\x77\x0\x7\x70\x0" "\xff\x3\x70\x0\x77\x70\x7\xe7\x3f\x0\x0\x0\xfe\x73\x0\x7\x70\x0\xff\x73\x70\x7\x77\x70\x7\xe7\x3f\x0\x0\x0\xff\x7\x70\x0\x7\x38\x80\x3\x7f\xc0\x1\xe\xe0\x0\x7\x0\x0\x0\xfe\x73\x70\x7\x77\x70\xfe\x73\x70\x7\x77\x70\x7\xe7\x3f\x0" "\x0\x0\xfe\x73\x70\x7\x77\x70\x7\xe7\x7f\x0\x7\x70\x0\xe7\x3f\x0\x0\x0\x0\x0\x0\x0\x0\x0\x70\x0\x7\x0\x0\x0\x70\x0\x7\x0\x0\x0\x0\x0\x0\x0\x0\x0\x70\x0\x7\x0\x0\x0\x70\x0\x7\x40\x0\x0\x0\x0\x1c\xe0\x0\x7\x38\xc0" "\x1\x38\x0\x7\xe0\x0\x1c\x0\x0\x0\x0\x0\x0\x0\xe0\x3f\x0\x0\x0\x0\xe0\x3f\x0\x0\x0\x0\x0\x0\x0\xc0\x1\x38\x0\x7\xe0\x0\x1c\xe0\x0\x7\x38\xc0\x1\x0\x0\x0\xfe\x73\x70\x0\x7\x70\xe0\x3\x7\x70\x0\x0\x70\x0\x7\x0\x0\x0" "\xfc\xe1\x38\x67\x77\x7b\x37\x77\x73\x37\x77\x3e\xe\xc0\x1f\x0\x0\x0\xfe\x73\x70\x7\x77\x70\xff\x77\x70\x7\x77\x70\x7\x77\x70\x0\x0\x0\xff\x73\x70\x7\x77\x70\xff\x73\x70\x7\x77\x70\x7\xf7\x3f\x0\x0\x0\xfe\x73\x70\x7\x70\x0\x7\x70\x0\x7" "\x70\x0\x7\xe7\x3f\x0\x0\x0\xff\x71\x38\x7\x77\x70\x7\x77\x70\x7\x77\x70\x87\xf3\x1f\x0\x0\x0\xff\x77\x0\x7\x70\x0\x7f\x70\x0\x7\x70\x0\x7\xf0\x7f\x0\x0\x0\xff\x77\x0\x7\x70\x0\x7f\x70\x0\x7\x70\x0\x7\x70\x0\x0\x0\x0\xfe\x73" "\x70\x7\x70\x0\xc7\x77\x70\x7\x77\x70\x7\xe7\x3f\x0\x0\x0\x7\x77\x70\x7\x77\x70\xff\x77\x70\x7\x77\x70\x7\x77\x70\x0\x0\x0\xff\x7\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\x70\xf0\x7f\x0\x0\x0\xfe\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\x70" "\x7\xe7\x3f\x0\x0\x0\x7\x77\x70\x7\x77\x38\xff\x71\x38\x7\x77\x70\x7\x77\x70\x0\x0\x0\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\xf0\x7f\x0\x0\x0\x3\x76\x70\x8f\xf7\x7d\xff\x77\x77\x27\x77\x70\x7\x77\x70\x0\x0\x0\x3\x77\x70\xf" "\xf7\x71\x3f\x77\x77\xe7\x77\x7c\x87\x77\x70\x0\x0\x0\xfe\x73\x70\x7\x77\x70\x7\x77\x70\x7\x77\x70\x7\xe7\x3f\x0\x0\x0\xff\x73\x70\x7\x77\x70\xff\x73\x0\x7\x70\x0\x7\x70\x0\x0\x0\x0\xfe\x73\x70\x7\x77\x70\x7\x77\x70\x67\x77\x7e\xc7\xe7" "\x3b\x0\x3\x0\xff\x73\x70\x7\x77\x70\xff\x73\x70\x7\x77\x70\x7\x77\x70\x0\x0\x0\xfe\x73\x70\x7\x70\x0\xfe\x3\x70\x0\x7\x70\x7\xe7\x3f\x0\x0\x0\xff\x7\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\x0\x0\x0\x7\x77\x70\x7\x77\x70" "\x7\x77\x70\x7\x77\x70\x7\xe7\x3f\x0\x0\x0\x7\x77\x70\x7\x77\x70\x7\x77\x70\x7\x77\x70\x8e\xc3\x1d\xf8\x0\x0\x7\x77\x70\x7\x77\x72\x77\xf7\x7f\xdf\xf7\x78\x7\x37\x60\x0\x0\x0\x7\x77\x70\x7\xe7\x38\xfc\xe1\x38\x7\x77\x70\x7\x77\x70\x0" "\x0\x0\x7\x77\x70\x7\x77\x70\xfe\x7\x70\x0\x7\x70\x0\xc7\x3f\x0\x0\x0\xff\x7\x70\x80\x3\x1c\xe0\x0\x7\x38\xc0\x1\xe\xf0\x7f\x0\x0\x0\xf8\x80\x3\x38\x80\x3\x38\x80\x3\x38\x80\x3\x38\x80\xf\x0\x0\x0\x1c\xc0\x1\x38\x80\x3\x70\x0" "\x7\xe0\x0\xe\xc0\x1\x1c\x0\x0\x0\xf8\x0\xe\xe0\x0\xe\xe0\x0\xe\xe0\x0\xe\xe0\x80\xf\x0\x0\x0\x20\x0\x7\xf8\xc0\x1d\x8e\x3\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xf0\x7f\x0\x0\x0" "\x70\x0\x7\x40\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xfe\x3\x70\x0\xe7\x7f\x7\x77\x70\x7\xe7\x7f\x0\x0\x0\x7\x70\x0\xff\x73\x70\x7\x77\x70\x7\x77\x70\x7\xf7\x3f\x0\x0\x0\x0\x0\x0\xfe\x73\x70\x7\x70\x0\x7" "\x70\x0\x7\xe7\x3f\x0\x0\x0\x0\x7\x70\xfe\x77\x70\x7\x77\x70\x7\x77\x70\x7\xe7\x7f\x0\x0\x0\x0\x0\x0\xfe\x73\x70\x7\xf7\x7f\x7\x70\x0\x7\xe7\x3f\x0\x0\x0\xe0\x3\x7\x70\x0\x7\xfe\x3\x7\x70\x0\x7\x70\x0\x7\x0\x0\x0\x0\x0" "\x0\xfe\x73\x70\x7\xe7\x7f\x0\x7\x70\x7\xe7\x3f\x0\x0\x0\x7\x70\x0\xff\x73\x70\x7\x77\x70\x7\x77\x70\x7\x77\x70\x0\x0\x0\x70\x0\x0\xfe\x3\x7\x70\x0\x7\x70\x0\x7\x70\xe0\x3f\x0\x0\x0\x0\x7\x0\x0\x7\x70\x0\x7\x70\x0\x7\x70" "\x7\xe7\x3f\x0\x0\x0\x7\x70\x70\x7\x77\x70\x87\xf3\x1f\x87\x73\x70\x7\x77\x70\x0\x0\x0\x38\x80\x3\x38\x80\x3\x38\x80\x3\x38\x80\x3\x38\x0\x1f\x0\x0\x0\x0\x0\x0\xfe\x73\x72\x27\x77\x72\x27\x77\x70\x7\x77\x70\x0\x0\x0\x0\x0\x0\xfe" "\x73\x70\x7\x77\x70\x7\x77\x70\x7\x77\x70\x0\x0\x0\x0\x0\x0\xfe\x73\x70\x7\x77\x70\x7\x77\x70\x7\xe7\x3f\x0\x0\x0\x0\x0\x0\xff\x73\x70\x7\x77\x70\x7\x77\x70\xff\x73\x0\x7\x0\x0\x0\x0\x0\xfe\x77\x70\x7\x77\x70\x7\x77\x70\xfe\x7" "\x70\x0\x7\x0\x0\x0\x0\xfe\x73\x70\x7\x70\x0\x7\x70\x0\x7\x70\x0\x0\x0\x0\x0\x0\x0\xfe\x73\x0\x7\xe0\x1f\x0\x7\x70\x0\xe7\x3f\x0\x0\x0\x0\x70\x0\x7\x70\x0\x3f\x70\x0\x7\x70\x70\x7\xe7\x3f\x0\x0\x0\x0\x0\x0\x7\x77\x70" "\x7\x77\x70\x7\x77\x70\x7\xe7\x3f\x0\x0\x0\x0\x0\x0\x7\x77\x70\x7\x77\x70\x7\xe7\x38\xdc\x81\xf\x0\x0\x0\x0\x0\x0\x7\x77\x70\x7\x77\x72\x27\x77\x72\x27\xe7\x3f\x0\x0\x0\x0\x0\x0\x7\x77\x70\x7\xe7\x3f\x7\x77\x70\x7\x77\x70\x0" "\x0\x0\x0\x0\x0\x7\x77\x70\x7\xe7\x7f\x0\x7\x70\x7\xe7\x3f\x0\x0\x0\x0\x0\x0\xff\x7\x3c\xe0\x1\xf\x78\xc0\x3\x1e\xf0\x7f\x0\x0\x0\xf0\x80\x3\x38\x0\x7\xfc\x0\x7\x38\x80\x3\x38\x0\xf\x0\x0\x0\x70\x0\x7\x70\x0\x7\x70\x0" "\x7\x70\x0\x7\x70\x0\x7\x0\x0\x0\x78\x0\xe\xe0\x0\x7\xf8\x1\x7\xe0\x0\xe\xe0\x80\x7\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xf0\xff\xff\xf\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xf0\xff\x7\x70\x0\x7\x70\x0\xff\xf" "\x0\x0\x0\x0\x0\x0\x0\x0\xf0\xff\x0\x0\x0\x0\x0\x0\xff\xf\x0\x0\x0\x0\x0\x0\x0\x0\xf0\xff\x0\xe\xe0\x0\xe\xe0\xff\xf\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xc0\x1f\xf8\x80\xf\x70\x0\x7\x20\x0\x2\x0\x0\x0\x0\x0\x0\x20\x0\x2\x70\x0\x7\xf8\x80\xf\xfc\x1\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" ), // Font no. 3 FontEntry("DISORDERTRACKER2", 8, 8, "\x0\x0\x0\x0\x0\x0\x0\x0\x57\x51\x73\x54\x57\x0\x0\x0\x77\x21\x23\x21\x21\x0\x0\x0\x0\x0\x0\x0\x18\x0\x0\x0\xec\x4a\x42\x4a\x4e\x0\x0\x0\x13\x15\x13\x15\x75\x0\x0\x0\x3c\x42\x99\x85\x99\x42\x3c\x0\x20\x50\x70\x50\x50\x0\x0\x0" "\x71\x21\x21\x21\x27\x0\x0\x0\xf3\x1b\x7b\xdb\xdb\xdb\x73\x0\xf\xf\xf\xf\xf\xf\xf\xf\x0\x0\x0\xff\x0\x0\x0\x0\x18\x3c\x7e\x18\x18\x18\x18\x0\x18\x18\x18\x18\x7e\x3c\x18\x0\xfe\xc6\xfe\xc6\xc6\xe6\x67\x3\x0\x0\x0\x80\x41\x22\x14\x8" "\x0\x0\xf8\x8\x3e\x1c\x8\x0\xf\x7\xf\x5d\x78\x70\x78\x0\x18\x3c\x7e\x18\x18\x7e\x3c\x18\x66\x66\x66\x66\x66\x0\x66\x0\xfe\xdb\xdb\xde\xd8\xd8\xd8\x0\x7c\xc6\x1c\x36\x36\x1c\x61\x3f\x0\x0\x0\x0\x7e\x7e\x7e\x0\x18\x3c\x7e\x18\x7e\x3c\x18\xff" "\x18\x3c\x7e\x18\x18\x18\x18\x0\x18\x18\x18\x18\x7e\x3c\x18\x0\x0\x18\x30\x7f\x30\x18\x0\x0\x0\xc\x6\x7f\x6\xc\x0\x0\x0\x0\x3\x3\x3\x7f\x0\x0\x0\x24\x66\xff\x66\x24\x0\x0\x0\x0\x18\x3c\x3c\x18\x0\x0\x0\xff\xff\x7e\x3c\x18\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x18\x18\x18\x18\x18\x0\x18\x0\x36\x36\x36\x0\x0\x0\x0\x0\x0\x36\x7f\x36\x36\x7f\x36\x0\x8\x7e\xb\x3e\x68\x6b\x3e\x8\x0\x63\x33\x18\xc\x66\x63\x0\x1c\x36\x1c\x6e\x3b\x33\x6e\x0\xc\xc\x6\x0\x0\x0\x0\x0" "\xc\x6\x6\x6\x6\x6\xc\x0\x18\x30\x30\x30\x30\x30\x18\x0\x8\x2a\x1c\x7f\x1c\x2a\x8\x0\x0\x18\x18\x7e\x18\x18\x0\x0\x0\x0\x0\x0\x0\x18\x18\xc\x0\x0\x0\x7e\x0\x0\x0\x0\x0\x0\x0\x0\x0\x18\x18\x0\x60\x30\x18\xc\x6\x3\x1\x0" "\x3e\x63\x63\x6b\x63\x63\x3e\x0\x18\x1c\x18\x18\x18\x18\x3c\x0\x3e\x63\x60\x38\xe\x3\x7f\x0\x3e\x63\x60\x3c\x60\x63\x3e\x0\x63\x63\x63\x7e\x60\x60\x60\x0\x7f\x3\x3\x3f\x60\x63\x3e\x0\x3e\x3\x3\x3f\x63\x63\x3e\x0\x7f\x60\x30\x18\x18\x18\x18\x0" "\x3e\x63\x63\x3e\x63\x63\x3e\x0\x3e\x63\x63\x7e\x60\x63\x3e\x0\x0\x18\x18\x0\x0\x18\x18\x0\x0\x18\x18\x0\x0\x18\x18\xc\x18\xc\x6\x3\x6\xc\x18\x0\x0\x0\x7e\x0\x7e\x0\x0\x0\x6\xc\x18\x30\x18\xc\x6\x0\x3e\x63\x30\x18\x18\x0\x18\x0" "\x3e\x63\x7b\x7b\x3b\x3\x3e\x0\x3e\x63\x63\x7f\x63\x63\x63\x0\x3f\x63\x63\x3f\x63\x63\x3f\x0\x3e\x63\x3\x3\x3\x63\x3e\x0\x1f\x33\x63\x63\x63\x63\x3f\x0\x7f\x3\x3\x1f\x3\x3\x7f\x0\x7f\x3\x3\x1f\x3\x3\x3\x0\x7e\x3\x3\x7b\x63\x63\x3e\x0" "\x63\x63\x63\x7f\x63\x63\x63\x0\x1e\xc\xc\xc\xc\xc\x1e\x0\x7c\x60\x60\x60\x60\x63\x3e\x0\x63\x63\x3f\x33\x63\x63\x63\x0\x3\x3\x3\x3\x3\x3\x7f\x0\x63\x77\x7f\x6b\x63\x63\x63\x0\x63\x67\x6f\x7b\x73\x63\x63\x0\x3e\x63\x63\x63\x63\x63\x3e\x0" "\x3f\x63\x63\x3f\x3\x3\x3\x0\x3e\x63\x63\x63\x63\x7b\x3e\x60\x3f\x63\x63\x3f\x63\x63\x63\x0\x3e\x63\x3\x3e\x60\x63\x3e\x0\x3f\xc\xc\xc\xc\xc\xc\x0\x63\x63\x63\x63\x63\x63\x3e\x0\x63\x63\x63\x63\x63\x36\x1c\x0\x63\x63\x63\x6b\x7f\x77\x63\x0" "\x63\x63\x36\x1c\x36\x63\x63\x0\x63\x63\x63\x7e\x60\x63\x3e\x0\x7f\x30\x18\xc\x6\x3\x7f\x0\x1e\x6\x6\x6\x6\x6\x1e\x0\x3\x6\xc\x18\x30\x60\x40\x0\x1e\x18\x18\x18\x18\x18\x1e\x0\x8\x1c\x36\x63\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xff" "\xc\xc\x18\x0\x0\x0\x0\x0\x0\x0\x3e\x60\x7c\x66\x7c\x0\x6\x6\x3e\x66\x66\x66\x3e\x0\x0\x0\x3c\x66\x6\x66\x3c\x0\x60\x60\x7c\x66\x66\x66\x7c\x0\x0\x0\x3c\x66\x7e\x6\x3c\x0\x0\x3c\x66\x6\x1e\x6\x6\x0\x0\x0\x7c\x66\x66\x7c\x60\x3e" "\x6\x6\x3e\x66\x66\x66\x66\x0\x18\x0\x18\x18\x18\x18\x18\x0\x30\x0\x30\x30\x30\x30\x33\x1e\x6\x6\x66\x36\x1e\x36\x66\x0\x18\x18\x18\x18\x18\x18\x18\x0\x0\x0\x3e\x6b\x6b\x6b\x63\x0\x0\x0\x3c\x66\x66\x66\x66\x0\x0\x0\x3c\x66\x66\x66\x3c\x0" "\x0\x0\x3e\x66\x66\x3e\x6\x6\x0\x0\x7c\x66\x66\x7c\x60\x60\x0\x0\x3e\x66\x6\x6\x6\x0\x0\x0\x7c\x6\x3c\x60\x3e\x0\x6\x6\x3e\x6\x6\x66\x3c\x0\x0\x0\x66\x66\x66\x66\x3c\x0\x0\x0\x66\x66\x66\x3c\x18\x0\x0\x0\x63\x63\x6b\x6b\x3e\x0" "\x0\x0\x66\x66\x3c\x66\x66\x0\x0\x0\x66\x66\x66\x7c\x60\x3e\x0\x0\x7e\x30\x18\xc\x7e\x0\x38\xc\xc\x7\xc\xc\x38\x0\x18\x18\x18\x0\x18\x18\x18\x0\x7\xc\xc\x38\xc\xc\x7\x0\x6e\x3b\x0\x0\x0\x0\x0\x0\x0\x8\x1c\x36\x63\x63\x7f\x0" "\x3e\x63\x3\x63\x3e\x30\x60\x3e\x0\x33\x0\x33\x33\x33\x6e\x0\x38\x0\x1e\x33\x3f\x3\x1e\x0\x7e\x81\x3c\x60\x7c\x66\xdc\x0\x33\x0\x1e\x30\x3e\x33\x6e\x0\x7\x0\x1e\x30\x3e\x33\x6e\x0\xc\xc\x1e\x30\x3e\x33\x6e\x0\x0\x0\x3e\x63\x3\x1e\x30\x1c" "\x7e\x81\x3c\x66\x7e\x6\x3c\x0\x33\x0\x1e\x33\x3f\x3\x1e\x0\x7\x0\x1e\x33\x3f\x3\x1e\x0\x33\x0\xe\xc\xc\xc\x1e\x0\x3e\x41\x1c\x18\x18\x18\x3c\x0\x7\x0\xe\xc\xc\xc\x1e\x0\x63\x8\x3e\x63\x7f\x63\x63\x0\xc\xc\x0\x1e\x33\x3f\x33\x0" "\x38\x0\x3f\x6\x1e\x6\x3f\x0\x0\x0\xfe\x30\xfe\x33\xfe\x0\x7c\x36\x33\x7f\x33\x33\x73\x0\x1e\x21\x0\x1e\x33\x33\x1e\x0\x0\x33\x0\x1e\x33\x33\x1e\x0\x0\x7\x0\x1e\x33\x33\x1e\x0\x1e\x21\x0\x33\x33\x33\x6e\x0\x0\x7\x0\x33\x33\x33\x6e\x0" "\x0\x33\x0\x33\x33\x3e\x30\x1f\xc3\x18\x3c\x66\x66\x3c\x18\x0\x33\x0\x33\x33\x33\x33\x1e\x0\x18\x18\x7e\x3\x3\x7e\x18\x18\x1c\x36\x26\xf\x6\x67\x3f\x0\x33\x33\x1e\xc\x3f\xc\x3f\xc\x1f\x33\x33\x5f\x63\xf3\x63\xc3\x70\xd8\x18\x3c\x18\x18\x1b\xe" "\x38\x0\x1e\x30\x3e\x33\x6e\x0\x1c\x0\xe\xc\xc\xc\x1e\x0\x0\x38\x0\x1e\x33\x33\x1e\x0\x0\x38\x0\x33\x33\x33\x6e\x0\x0\x1f\x0\x1d\x33\x33\x33\x0\x3f\x0\x33\x37\x3f\x3b\x33\x0\x3c\x36\x36\x7c\x0\x7e\x0\x0\x1c\x36\x36\x1c\x0\x3e\x0\x0" "\x18\x0\x18\x18\xc\x66\x3c\x0\x0\x0\x0\x3f\x3\x3\x0\x0\x0\x0\x0\x3f\x30\x30\x0\x0\x63\x33\x1b\x6c\xd6\x43\x21\xf0\xc3\x63\x33\xdb\xec\xb6\xf3\xc0\x18\x0\x18\x18\x3c\x3c\x18\x0\x0\xcc\x66\x33\x66\xcc\x0\x0\x0\x33\x66\xcc\x66\x33\x0\x0" "\x44\x11\x44\x11\x44\x11\x44\x11\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xbb\xee\xbb\xee\xbb\xee\xbb\xee\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x1f\x18\x18\x18\x18\x18\x1f\x18\x1f\x18\x18\x18\x6c\x6c\x6c\x6c\x6f\x6c\x6c\x6c\x0\x0\x0\x0\x7f\x6c\x6c\x6c" "\x0\x0\x1f\x18\x1f\x18\x18\x18\x6c\x6c\x6f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x0\x0\x7f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6f\x60\x7f\x0\x0\x0\x6c\x6c\x6c\x6c\x7f\x0\x0\x0\x18\x18\x1f\x18\x1f\x0\x0\x0\x0\x0\x0\x0\x1f\x18\x18\x18" "\x18\x18\x18\x18\xf8\x0\x0\x0\x18\x18\x18\x18\xff\x0\x0\x0\x0\x0\x0\x0\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\x18\x18\x0\x0\x0\x0\xff\x0\x0\x0\x18\x18\x18\x18\xff\x18\x18\x18\x18\x18\xf8\x18\xf8\x18\x18\x18\x6c\x6c\x6c\x6c\xec\x6c\x6c\x6c" "\x6c\x6c\xec\xc\xfc\x0\x0\x0\x0\x0\xfc\xc\xec\x6c\x6c\x6c\x6c\x6c\xef\x0\xff\x0\x0\x0\x0\x0\xff\x0\xef\x6c\x6c\x6c\x6c\x6c\xec\xc\xec\x6c\x6c\x6c\x0\x0\xff\x0\xff\x0\x0\x0\x6c\x6c\xef\x0\xef\x6c\x6c\x6c\x18\x18\xff\x0\xff\x0\x0\x0" "\x6c\x6c\x6c\x6c\xff\x0\x0\x0\x0\x0\xff\x0\xff\x18\x18\x18\x0\x0\x0\x0\xff\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xfc\x0\x0\x0\x18\x18\xf8\x18\xf8\x0\x0\x0\x0\x0\xf8\x18\xf8\x18\x18\x18\x0\x0\x0\x0\xfc\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xff\x6c\x6c\x6c" "\x18\x18\xff\x18\xff\x18\x18\x18\x18\x18\x18\x18\x1f\x0\x0\x0\x0\x0\x0\x0\xf8\x18\x18\x18\xff\xff\xff\xff\xff\xff\xff\xff\x0\x0\x0\x0\xff\xff\xff\xff\xf\xf\xf\xf\xf\xf\xf\xf\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xff\xff\xff\xff\x0\x0\x0\x0" "\x0\x0\x6e\x3b\x13\x3b\x6e\x0\x0\x1e\x33\x1f\x33\x1f\x3\x3\x0\x3f\x33\x3\x3\x3\x3\x0\x0\x0\x7f\x36\x36\x36\x36\x0\x3f\x33\x6\xc\x6\x33\x3f\x0\x0\x0\x7e\x1b\x1b\x1b\xe\x0\x0\x66\x66\x66\x66\x3e\x6\x3\x0\x6e\x3b\x18\x18\x18\x18\x0" "\x3f\xc\x1e\x33\x33\x1e\xc\x3f\x1c\x36\x63\x7f\x63\x36\x1c\x0\x1c\x36\x63\x63\x36\x36\x77\x0\x38\xc\x18\x3e\x33\x33\x1e\x0\x0\x0\x7e\xdb\xdb\x7e\x0\x0\x60\x30\x7e\xdb\xdb\x7e\x6\x3\x1c\x6\x3\x1f\x3\x6\x1c\x0\x0\x0\x0\x0\x0\xdb\xdb\x0" "\x0\x7e\x0\x7e\x0\x7e\x0\x0\x0\xf8\x8\x8\x8\x8\xf8\x0\x0\xff\x0\x0\x0\x0\xff\x0\x0\x1f\x10\x10\x10\x10\x1f\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x0\x2\x1\x0\x0\x0\x20\x30\x28\x24\x22\xa1\x60\x20\x0\x0\x0\x1\x2\x0\x0\x0" "\x20\x60\xa1\x22\x24\x28\x30\x20\x0\x0\x0\x40\x40\x40\x40\x7f\xff\x81\x81\x81\x81\x80\x80\x80\x0\x0\x0\x20\x20\x11\x11\xe\x38\x44\x44\x82\x82\x0\x0\x0\x0\x0\xfe\x7c\x38\x10\x0\x0\x0\x0\x10\x38\x7c\xfe\x0\x0\x80\xc1\x63\x36\x1c\x8\x0\x0" ), // Font no. 4 FontEntry("DX-FUTUR", 8, 8, "\x0\x0\x0\x0\x0\x0\x0\x0\x7e\x81\xa5\x81\xbd\x99\x81\x7e\x7e\xff\xdb\xff\xff\xc3\xe7\x7e\x0\x77\x7f\x7f\x3e\x1c\x8\x0\x8\x1c\x3e\x7f\x3e\x1c\x8\x0\x18\x3c\x18\xff\xff\x52\x18\x0\x8\x1c\x3e\x7f\x7f\x49\x1c\x0\x0\x0\x18\x3c\x18\x0\x0\x0" "\xff\xff\xe7\xc3\xe7\xff\xff\xff\x0\x3c\x42\x81\x81\x42\x3c\x0\xff\xc3\xbd\x7e\x7e\xbd\xc3\xff\xf8\xe0\xb0\x3e\x63\x63\x3e\x0\x0\x7e\xc3\xc3\x7e\x18\x7e\x18\x20\x60\xe0\x20\x20\x3f\x1f\x0\x30\x50\xb0\xd0\x9f\x8f\xf0\xf0\x81\xc2\xbc\xe4\xa4\xfc\xea\xff" "\x0\x0\x6\x1e\x7e\x1e\x6\x0\x0\x0\x60\x78\x7e\x78\x60\x0\x18\x7e\x18\x18\x18\x18\x7e\x18\x66\x66\x66\x66\x66\x0\x66\x0\xff\x6d\x6e\x6c\x6c\x6c\x6c\x0\x7e\x81\x3e\x42\x42\x7c\x81\x7e\x0\x0\x0\x7e\x7e\x0\x0\x0\x18\x7e\x18\x18\x7e\x18\x0\xff" "\x18\x7e\x18\x18\x18\x18\x18\x0\x18\x18\x18\x18\x18\x7e\x18\x0\x0\x20\x60\xff\x60\x20\x0\x0\x0\x4\x6\xff\x6\x4\x0\x0\x0\x0\x0\x3\x3\x3\xff\x0\x0\x24\x66\xff\x66\x24\x0\x0\x0\x0\x8\x1c\x3e\x7f\x0\x0\x0\x0\x0\x7f\x3e\x1c\x8\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\xc\xc\xc\xc\xc\x0\xc\x0\x14\x14\x0\x0\x0\x0\x0\x0\x0\x14\x3e\x14\x3e\x14\x0\x0\x3e\x4b\xb\x3e\x68\x6b\x3e\x8\xc7\x65\x37\x18\xec\xa6\xe3\x0\x3e\x63\x6\x73\x63\x63\x3e\x0\x30\x30\x18\x0\x0\x0\x0\x0" "\xc\x6\x6\x6\x6\x6\xc\x0\xc\x18\x18\x18\x18\x18\xc\x0\x0\x22\x14\x36\x14\x22\x0\x0\x0\x18\x18\x7e\x18\x18\x0\x0\x0\x0\x0\x0\x0\x18\x18\xc\x0\x0\x0\x7e\x0\x0\x0\x0\x0\x0\x0\x0\x0\x18\x18\x0\xc0\x60\x30\x18\xc\x6\x3\x0" "\x7e\x63\x73\x6b\x67\x63\x3f\x0\x1c\x18\x18\x18\x18\x18\x3c\x0\x3f\x60\x3e\x3\x3\x3\x7f\x0\x7f\x60\x38\x60\x60\x60\x3f\x0\x63\x63\x7f\x60\x60\x60\x60\x0\x7f\x3\x3f\x60\x60\x60\x3f\x0\x7e\x3\x7f\x63\x63\x63\x3f\x0\x7f\x60\x30\x18\x18\x18\x18\x0" "\x7e\x63\x3e\x63\x63\x63\x3f\x0\x3e\x63\x7e\x60\x60\x60\x60\x0\x0\x18\x18\x0\x0\x18\x18\x0\x0\x18\x18\x0\x0\x18\x18\xc\x0\x0\x38\xc\x6\xc\x38\x0\x0\x0\x0\x7e\x0\x7e\x0\x0\x0\x0\xe\x18\x30\x18\xe\x0\x7e\x63\x63\x38\x0\x18\x18\x0" "\x3e\x41\x5d\x55\x7d\x1\x3e\x0\x70\x78\x6c\x66\x63\x63\x6f\x0\x3f\x60\x3b\x63\x63\x63\x3f\x0\x7e\x0\x3\x3\x3\x3\x7e\x0\x1f\x30\x63\x63\x63\x63\x3f\x0\x7f\x0\xf\x3\x3\x3\x7f\x0\x7f\x0\xf\x3\x3\x3\x3\x0\x7e\x0\x7b\x63\x63\x63\x3e\x0" "\x63\x63\x7f\x63\x63\x63\x63\x0\x3c\x0\x18\x18\x18\x18\x3c\x0\x30\x30\x30\x30\x30\x30\x1f\x0\x43\x63\x33\x7b\x63\x63\x63\x0\x6\x6\x6\x6\x6\x6\x7e\x0\x3f\x60\x6b\x6b\x6b\x63\x63\x0\x3f\x60\x63\x63\x63\x63\x63\x0\x7e\x60\x63\x63\x63\x63\x3f\x0" "\x7e\x60\x3e\x6\x6\x6\x6\x0\x7e\x63\x63\x63\x63\x3\x7f\x0\x7f\x60\x3f\x33\x63\x63\x63\x0\x7e\x3\x7f\x60\x60\x60\x3f\x0\x7e\x0\x18\x18\x18\x18\x18\x0\x63\x63\x63\x63\x63\x3\x7e\x0\x63\x63\x63\x63\x33\x1b\xf\x0\x63\x63\x6b\x6b\x6b\x63\x3f\x0" "\x63\x36\x1c\x0\x1c\x36\x63\x0\x63\x63\x3f\x0\xc\xc\xc\x0\x7f\x0\x30\x18\xc\x6\x7f\x0\x3c\xc\xc\xc\xc\xc\x3c\x0\x3\x6\xc\x18\x30\x60\xc0\x0\x3c\x30\x30\x30\x30\x30\x3c\x0\x8\x1c\x36\x63\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xff" "\xc\xc\x18\x0\x0\x0\x0\x0\x0\x0\x7f\x60\x6e\x63\x3f\x0\x3\x3\x7b\x63\x63\x63\x3e\x0\x0\x0\x7e\x3\x3\x3\x7e\x0\x60\x60\x6e\x63\x63\x63\x3f\x0\x0\x0\x7e\x63\x3b\x3\x7f\x0\x3c\x0\x1e\x6\x6\x6\x6\x0\x0\x0\x7e\x63\x63\x6f\x60\x3e" "\x3\x3\x3f\x63\x63\x63\x63\x0\x18\x0\x18\x18\x18\x18\x18\x0\x30\x0\x30\x30\x30\x30\x30\x1f\x3\x3\x63\x33\x7b\x63\x63\x0\x1c\x18\x18\x18\x18\x18\x18\x0\x0\x0\x3f\x63\x6b\x6b\x63\x0\x0\x0\x3f\x63\x63\x63\x63\x0\x0\x0\x7e\x63\x63\x63\x3f\x0" "\x0\x0\x7e\x63\x63\x3b\x3\x3\x0\x0\x7e\x63\x63\x6f\x60\x60\x0\x0\x7c\x6\x6\x6\x6\x0\x0\x0\x7e\x3\x7f\x60\x3f\x0\xc\x0\x3c\xc\xc\xc\x78\x0\x0\x0\x63\x63\x63\x63\x7e\x0\x0\x0\x63\x63\x63\x33\x1f\x0\x0\x0\x63\x6b\x6b\x63\x3f\x0" "\x0\x0\x63\x36\x14\x36\x63\x0\x0\x0\x63\x63\x63\x6f\x60\x3f\x0\x0\x7f\x0\xc\x6\x7f\x0\x70\x18\x18\xe\x18\x18\x70\x0\x18\x18\x18\x0\x18\x18\x18\x0\x7\xc\xc\x38\xc\xc\x7\x0\xe\x5a\x70\x0\x0\x0\x0\x0\x0\x0\x8\x14\x22\x7f\x0\x0" "\xff\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\x1\x80\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\xff" "\x1\x0\x0\x0\x0\x0\x0\x0\x80\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x1\x0\x0\x0\x0\x0\x0\x0\x80\x1\x3\x7\xf\x1f\x3f\x7f\xff\xff\xfe\xfc\xf8\xf0\xe0\xc0\x80\xff\xff\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0" "\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\x3\x3\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\xff\xff\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\x0\xff\x0\x0\x0\x0\x0\x1f\x31\x31\x31\x3f\x3e\x0\x0\x3e\x62\x62\x62\x7e\x7c\x0\x0\x7c\xc4\xc4\xc4\xfc\xf8\x0\x0\xf8\x88\x88\x88\xf8\xf0\x0\x0\xf0\x10\x10\x10\xf0\xe0\x0" "\x0\xe0\x20\x20\x20\xe0\xc0\x0\x0\xc0\x40\x40\x40\xc0\x80\x0\x0\x80\x80\x80\x80\x80\x0\x0\x0\x0\x1\x1\x1\x1\x1\x0\x0\x1\x3\x3\x3\x3\x3\x0\x0\x3\x6\x6\x6\x7\x7\x0\x0\x7\xc\xc\xc\xf\xf\x0\x0\xf\x18\x18\x18\x1f\x1f\x0" "\x18\x18\x18\x18\x18\x18\x18\x18\xff\xff\x0\x0\x0\x8\x1c\x3e\xff\xff\x0\x0\x0\x0\x0\x7f\xff\xff\x0\x0\x8\x1c\x3e\x7f\xff\xff\x0\xc3\xe7\xff\xdb\xc3\x0\x0\x0\x0\x8\x0\x0\x0\x0\x2\x2\x2\x2\x2\x2\x2\x0\x12\x12\x12\x12\x12\x12\x12" "\x0\x92\x92\x92\x92\x92\x92\x92\x0\x4\x4\x4\x4\x4\x4\x4\x0\x24\x24\x24\x24\x24\x24\x24\x0\x24\x24\x24\x24\x24\x24\x24\x0\x1\x1\x1\x1\x1\x1\x1\x0\x9\x9\x9\x9\x9\x9\x9\x0\x49\x49\x49\x49\x49\x49\x49\x0\x0\x0\x18\x18\x0\x0\x0" "\x0\x0\x0\x0\x55\x0\x0\x0\x0\x0\x70\x88\x4\x0\x0\x0\x0\x0\x0\x20\x11\xe\x0\x0\x0\x3e\x22\x22\x22\x22\xe3\x0\x0\x3e\x22\x22\x22\x22\x63\x0\x0\xc\x34\xc4\x4\x4\x4\x0\x0\x20\x20\x20\x23\x2c\x30\x0\x0\x60\x20\x20\x20\x20\x60\x0" "\x0\x3\x2\x2\x2\x2\x3\x0\x0\x0\x0\x18\x18\x0\x0\x0\x0\x0\x18\x3c\x3c\x18\x0\x0\x0\x0\x18\x3c\x3c\x18\x0\x0\x0\x0\x0\x0\xff\x0\x0\x0\x0\x0\x3c\x3c\x3c\x3c\x0\x0\x0\x18\x3c\x7e\x7e\x3c\x18\x0\x0\x18\x3c\x7e\x7e\x3c\x18\x0" "\x0\x3c\x7e\x7e\x7e\x7e\x3c\x0\x0\x3c\x7e\x7e\x7e\x7e\x3c\x0\x6c\x6c\x6c\xef\x0\xff\x0\x0\x0\x0\x0\xff\x0\xef\x6c\x6c\x6c\x6c\x6c\xec\xc\xec\x6c\x6c\x0\x0\x0\xff\x0\xff\x0\x0\x6c\x6c\x6c\xef\x0\xef\x6c\x6c\x18\x18\x18\xff\x0\xff\x0\x0" "\x6c\x6c\x6c\xff\x0\x0\x0\x0\x0\x0\x0\xff\x0\xff\x18\x18\x0\x0\x0\xff\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xfc\x0\x0\x0\x0\x18\x18\x18\xf8\x18\xf8\x0\x0\x0\x0\x0\xf8\x18\xf8\x18\x18\x0\x0\x0\xfc\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xff\x6c\x6c\x6c\x6c" "\x18\x18\x18\xff\x18\xff\x18\x18\x18\x18\x18\x1f\x0\x0\x0\x0\x0\x0\x0\xf8\x18\x18\x18\x18\xff\xff\xff\xff\xff\xff\xff\xff\x0\x0\x0\x0\xff\xff\xff\xff\xf\xf\xf\xf\xf\xf\xf\xf\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xff\xff\xff\xff\x0\x0\x0\x0" "\x0\x0\xee\x19\x19\xee\x0\x0\x38\x6c\x66\x3f\x63\x63\x3f\x3\x7f\x46\x6\x6\x6\x6\x6\x0\x0\x0\xff\x66\x66\x66\x66\x0\x7f\x46\xc\x18\xc\x46\x7f\x0\x0\x0\xfc\x66\x63\x33\x1e\x0\x0\x0\xcc\xcc\xcc\x7c\xc\xf\x0\x0\xff\x18\x18\x18\x18\x0" "\x3c\x18\x3c\x66\x66\x3c\x18\x3c\x0\x3e\x63\x7f\x63\x3e\x0\x0\x0\x7e\xc3\xc3\xc3\x66\xe7\x0\x78\x98\x3c\x66\x63\x33\x1e\x0\x0\x0\x66\x99\x99\x66\x0\x0\x0\xc0\x3e\x73\x67\x3e\x3\x0\x0\x7c\x3\x7f\x3\x7c\x0\x0\x0\x0\x0\x0\x0\xdb\xdb\x0" "\x0\x7e\x0\x7e\x0\x7e\x0\x0\x0\xf8\x8\x8\x8\x8\xf8\x0\x0\xff\x0\x0\x0\x0\xff\x0\x0\x1f\x10\x10\x10\x10\x1f\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x0\x2\x1\x0\x0\x0\x20\x30\x28\x24\x22\xa1\x60\x20\x0\x0\x0\x1\x2\x0\x0\x0" "\x20\x60\xa1\x22\x24\x28\x30\x20\x0\x0\x0\x40\x40\x40\x40\x7f\xff\x81\x81\x81\x81\x80\x80\x80\x0\x0\x0\x20\x20\x11\x11\xe\x38\x44\x44\x82\x82\x0\x0\x0\x0\x0\xfe\x7c\x38\x10\x0\x0\x0\x0\x10\x38\x7c\xfe\x0\x0\x80\xc1\x63\x36\x1c\x8\x0\x0" ), // Font no. 5 FontEntry("EK-MAC", 8, 8, "\x0\x0\x0\x0\x0\x0\x0\x0\x3e\x41\x55\x41\x5d\x22\x1c\x0\x3e\x49\x49\x7f\x5d\x22\x1c\x0\x36\x7f\x7f\x7f\x3e\x1c\x8\x0\x8\x1c\x3e\x7f\x3e\x1c\x8\x0\x1c\x1c\x6b\x7f\x6b\x8\x1c\x0\x8\x1c\x3e\x7f\x7f\x49\x1c\x0\x0\x18\x3c\x3c\x3c\x18\x0\x0" "\x7e\x66\x42\x42\x42\x66\x7e\x0\x0\x18\x24\x24\x24\x18\x0\x0\x7e\x66\x5a\x5a\x5a\x66\x7e\x0\x70\x60\x50\x3c\x66\x66\x3c\x0\x3c\x66\x66\x3c\x18\x7e\x18\x0\x30\x30\x30\x30\x30\x1c\xc\x0\x7c\x6c\x6c\x6c\x67\x3b\x18\x0\x80\xaa\x94\xaa\x94\xaa\x80\xff" "\x0\x6\x1e\x7e\x1e\x6\x0\x0\x0\x30\x3c\x3f\x3c\x30\x0\x0\x8\x3e\x8\x3e\x8\x8\x0\x0\x66\x66\x66\x66\x66\x0\x66\x0\x7c\x5a\x5a\x5a\x5c\x58\x58\x0\x3c\x46\x3e\x66\x7c\x62\x3c\x0\x0\x0\x0\x7e\x7e\x0\x0\x0\x8\x1c\x3e\x0\x3e\x1c\x8\x7f" "\x0\x8\x1c\x3e\x7f\x0\x0\x0\x0\x0\x7f\x3e\x1c\x8\x0\x0\x8\x18\x38\x78\x38\x18\x8\x0\x10\x18\x1c\x1e\x1c\x18\x10\x0\x0\x0\x0\x6\x6\x6\x7e\x0\x0\x14\x36\x77\x36\x14\x0\x0\x0\x0\x8\x1c\x3e\x7f\x0\x0\x0\x0\x0\x7f\x3e\x1c\x8\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\xc\xc\xc\xc\xc\x0\xc\x0\x36\x36\x14\x0\x0\x0\x0\x0\x14\x3e\x14\x3e\x14\x0\x0\x0\x18\x3c\x46\x3c\x62\x3c\x18\x0\x4\x6a\x34\x18\x2c\x56\x20\x0\x1c\x36\x1c\x26\x66\x66\x7c\x0\x18\x10\x8\x0\x0\x0\x0\x0" "\x30\x18\x18\x18\x18\x18\x30\x0\xc\x18\x18\x18\x18\x18\xc\x0\x18\x5a\x3c\x5a\x18\x0\x0\x0\x0\x18\x18\x7e\x18\x18\x0\x0\x0\x0\x0\x0\x0\x18\x18\xc\x0\x0\x0\x7e\x0\x0\x0\x0\x0\x0\x0\x0\x0\x18\x18\x0\x0\x60\x30\x18\xc\x6\x0\x0" "\x3c\x66\x66\x66\x66\x66\x3c\x0\x18\x1c\x18\x18\x18\x18\x18\x0\x3c\x66\x60\x30\x18\xc\x7e\x0\x3c\x66\x60\x38\x60\x66\x3c\x0\x70\x78\x6c\x66\x7e\x60\x60\x0\x7e\x6\x3e\x60\x60\x66\x3c\x0\x3c\x66\x6\x3e\x66\x66\x3c\x0\x7e\x60\x30\x18\x18\x18\x18\x0" "\x3c\x66\x66\x3c\x66\x66\x3c\x0\x3c\x66\x66\x7c\x60\x66\x3c\x0\x0\x18\x18\x0\x18\x18\x0\x0\x0\x18\x18\x0\x18\x10\x8\x0\x30\x18\xc\x6\xc\x18\x30\x0\x0\x0\x7e\x0\x7e\x0\x0\x0\x6\xc\x18\x30\x18\xc\x6\x0\x3c\x66\x60\x30\x18\x0\x18\x0" "\x3c\x62\x6a\x6a\x7a\x2\x3c\x0\x3c\x66\x66\x66\x7e\x66\x66\x0\x3e\x66\x66\x3e\x66\x66\x3e\x0\x3c\x66\x6\x6\x6\x66\x3c\x0\x3e\x66\x66\x66\x66\x66\x3e\x0\x7e\x6\x6\x1e\x6\x6\x7e\x0\x7e\x6\x6\x1e\x6\x6\x6\x0\x3c\x66\x6\x76\x66\x66\x3c\x0" "\x66\x66\x66\x7e\x66\x66\x66\x0\x18\x18\x18\x18\x18\x18\x18\x0\x60\x60\x60\x60\x60\x66\x3c\x0\x66\x66\x66\x3e\x66\x66\x66\x0\x6\x6\x6\x6\x6\x6\x3e\x0\x3f\x6b\x6b\x6b\x6b\x6b\x6b\x0\x3e\x66\x66\x66\x66\x66\x66\x0\x3c\x66\x66\x66\x66\x66\x3c\x0" "\x3e\x66\x66\x66\x3e\x6\x6\x0\x3c\x66\x66\x66\x66\x36\x6c\x0\x3e\x66\x66\x3e\x66\x66\x66\x0\x3c\x66\x6\x3c\x60\x66\x3c\x0\x7e\x18\x18\x18\x18\x18\x18\x0\x66\x66\x66\x66\x66\x66\x3c\x0\x66\x66\x66\x66\x66\x26\x1e\x0\x6b\x6b\x6b\x6b\x6b\x6b\x3f\x0" "\x66\x66\x66\x3c\x66\x66\x66\x0\x66\x66\x66\x3c\x18\x18\x18\x0\x7e\x60\x30\x18\xc\x6\x7e\x0\x78\x18\x18\x18\x18\x18\x18\x78\x0\x6\xc\x18\x30\x60\x0\x0\x1e\x18\x18\x18\x18\x18\x18\x1e\x8\x1c\x36\x63\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x7e" "\x18\x8\x10\x0\x0\x0\x0\x0\x0\x0\x3c\x62\x7c\x66\x7c\x0\x6\x6\x3e\x66\x66\x66\x3e\x0\x0\x0\x3c\x66\x6\x66\x3c\x0\x60\x60\x7c\x66\x66\x66\x7c\x0\x0\x0\x3c\x66\x7e\x6\x3c\x0\x38\x4c\x1e\xc\xc\xc\xc\x0\x0\x0\x7c\x66\x66\x7c\x62\x3c" "\x6\x6\x3e\x66\x66\x66\x66\x0\x18\x0\x1c\x18\x18\x18\x18\x0\x30\x0\x38\x30\x30\x30\x32\x1c\x6\x6\x66\x66\x3e\x66\x66\x0\x1c\x18\x18\x18\x18\x18\x18\x0\x0\x0\x3f\x6b\x6b\x6b\x6b\x0\x0\x0\x3e\x66\x66\x66\x66\x0\x0\x0\x3c\x66\x66\x66\x3c\x0" "\x0\x0\x3e\x66\x66\x66\x3e\x6\x0\x0\x7c\x66\x66\x66\x7c\x60\x0\x0\x3e\x66\x66\x6\x6\x0\x0\x0\x3c\x46\x3c\x62\x3c\x0\x0\x18\x3c\x18\x18\x18\x30\x0\x0\x0\x66\x66\x66\x66\x3c\x0\x0\x0\x66\x66\x66\x26\x1e\x0\x0\x0\x6b\x6b\x6b\x6b\x3f\x0" "\x0\x0\x66\x66\x3c\x66\x66\x0\x0\x0\x66\x66\x66\x7c\x62\x3c\x0\x0\x7e\x30\x18\xc\x7e\x0\x30\x18\x18\xc\x18\x18\x30\x0\x18\x18\x18\x18\x18\x18\x18\x18\xc\x18\x18\x30\x18\x18\xc\x0\xc\x5a\x30\x0\x0\x0\x0\x0\x0\x0\x18\x24\x66\x7e\x0\x0" "\xfe\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\x7f\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\x1\x80\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\xfe\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\x7f" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x1\x3\x7\xf\x1f\x3f\x7f\xff\xff\xfe\xfc\xf8\xf0\xe0\xc0\x80\xfc\xfe\x7\xf3\xb\xb\xb\xb\xff\xff\x0\xff\x0\x0\x0\x0" "\x3f\x7f\xe0\xcf\xd0\xd0\xd0\xd0\xb\xb\xb\xb\xb\xb\xb\xb\xd0\xd0\xd0\xd0\xd0\xd0\xd0\xd0\xb\xb\xb\xb\xf3\x7\xfe\xfc\x0\x0\x0\x0\xff\x0\xff\xff\xd0\xd0\xd0\xd0\xcf\xe0\x7f\x3f\xb\x9\x4\x3\x0\x0\x0\x0\xd0\x90\x20\xc0\x0\x0\x0\x0" "\x0\x0\x0\x0\x3\x4\x9\xb\x0\x0\x0\x0\xc0\x20\x90\xd0\x0\x0\x0\xaa\x0\x0\x0\x0\x0\x3f\x7e\x3f\x7e\x3f\x7e\x0\x0\x7e\x7e\x7e\x7e\x7e\x7e\x0\x0\x7e\xfc\x7e\xfc\x7e\xfc\x0\x0\xfe\xf0\xfe\xf0\xfe\xf0\x0\x0\xfe\xe0\xfe\xe0\xfe\xe0\x0" "\x0\xfc\xc0\xfc\xc0\xfc\xc0\x0\x0\xf0\x80\xf0\x80\xf0\x80\x0\x0\xc0\x0\xc0\x0\xc0\x0\x0\x0\x0\x3\x0\x3\x0\x3\x0\x0\x1\xf\x1\xf\x1\xf\x0\x0\x3\x3f\x3\x3f\x3\x3f\x0\x0\x7\x7f\x7\x7f\x7\x7f\x0\x0\xf\x7f\xf\x7f\xf\x7f\x0" "\x3c\x3c\x3c\x3c\x3c\x3c\x3c\x3c\xff\xff\x0\xff\x0\x18\x3c\x0\xff\xff\x0\xff\x0\x0\x0\x7e\xff\xff\x0\xff\x0\x18\x3c\x7e\xff\xff\x0\xff\x0\x3e\x56\x56\x0\x0\x0\x18\x18\x0\x0\x0\x0\x7\x7\x7\x7\x7\x7\x0\x0\x3f\x3f\x3f\x3f\x3f\x3f\x0" "\x0\xff\xff\xff\xff\xff\xff\x0\x0\x7\x7\x7\x7\x7\x7\x0\x0\x3f\x3f\x3f\x3f\x3f\x3f\x0\x0\xff\xff\xff\xff\xff\xff\x0\x0\x3\x3\x3\x3\x3\x3\x0\x0\x1f\x1f\x1f\x1f\x1f\x1f\x0\x0\xff\xff\xff\xff\xff\xff\x0\x0\x0\x3c\x3c\x3c\x3c\x0\x0" "\x0\x0\x0\xf\x18\x1f\x18\x18\x6c\x6c\x6c\x67\x60\x67\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x0\x0\x0\x3f\x60\x67\x6c\x6c\x6c\x6c\x6c\x67\x60\x3f\x0\x0\x6c\x6c\x6c\x3f\x0\x0\x0\x0\x18\x18\x18\x1f\x18\xf\x0\x0\x0\x0\x0\xf\x18\x18\x18\x18" "\x18\x18\x18\xf0\x0\x0\x0\x0\x18\x18\x18\xff\x0\x0\x0\x0\x0\x0\x0\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\x18\x18\x18\x0\x0\x0\x0\xff\x0\x0\x0\x18\x18\x18\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\xf8\x18\x18\x6c\x6c\x6c\xec\x6c\x6c\x6c\x6c" "\x6c\x6c\x6c\xcc\xc\xf8\x0\x0\x0\x0\x0\xf8\xc\xcc\x6c\x6c\x6c\x6c\x6c\xc7\x0\xff\x0\x0\x0\x0\x0\xff\x0\xc7\x6c\x6c\x6c\x6c\x6c\xcc\xc\xcc\x6c\x6c\x0\x0\x0\xff\x0\xff\x0\x0\x6c\x6c\x6c\xc7\x0\xc7\x6c\x6c\x18\x18\x18\xff\x0\xff\x0\x0" "\x6c\x6c\x6c\xff\x0\x0\x0\x0\x0\x0\x0\xff\x0\xff\x18\x18\x0\x0\x0\xff\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xf8\x0\x0\x0\x0\x18\x18\x18\xf8\x18\xf0\x0\x0\x0\x0\x0\xf0\x18\xf8\x18\x18\x0\x0\x0\xf8\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xff\x6c\x6c\x6c\x6c" "\x18\x18\x18\xff\x18\xff\x18\x18\x18\x18\x18\xf\x0\x0\x0\x0\x0\x0\x0\xf0\x18\x18\x18\x18\xff\xff\xff\xff\xff\xff\xff\xff\x0\x0\x0\x0\xff\xff\xff\xff\xf\xf\xf\xf\xf\xf\xf\xf\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xff\xff\xff\xff\x0\x0\x0\x0" "\x0\x0\x0\x6c\x36\x36\x6c\x0\x3c\x66\x66\x36\x66\x66\x36\x6\x3c\x46\x6\x6\x6\x6\x6\x0\x0\x0\xff\x66\x66\x66\x66\x0\x7e\x6\xc\x18\xc\x6\x7e\x0\x0\x0\xfc\x66\x66\x66\x3c\x0\x0\x0\x66\x66\x66\x66\x3e\x3\x0\x0\x3c\x18\x18\x18\x30\x0" "\x0\x18\x3c\x66\x66\x66\x3c\x18\x38\x64\x66\x7e\x66\x26\x1c\x0\x3c\x66\x66\x66\x24\x24\x66\x0\x70\x98\x3c\x66\x66\x66\x3c\x0\x0\x0\x36\x6b\x6b\x36\x0\x0\x0\x60\x3c\x66\x66\x66\x3c\x6\x0\x0\x7c\x6\x7e\x6\x7c\x0\x0\x0\x0\x0\x0\xdb\xdb\x0" "\x0\x7e\x0\x7e\x0\x7e\x0\x0\x0\xf8\x8\x8\x8\x8\xf8\x0\x0\xff\x0\x0\x0\x0\xff\x0\x0\x1f\x10\x10\x10\x10\x1f\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x0\x2\x1\x0\x0\x0\x20\x30\x28\x24\x22\xa1\x60\x20\x0\x0\x0\x1\x2\x0\x0\x0" "\x20\x60\xa1\x22\x24\x28\x30\x20\x0\x0\x0\x40\x40\x40\x40\x7f\xff\x81\x81\x81\x81\x80\x80\x80\x0\x0\x0\x20\x20\x11\x11\xe\x38\x44\x44\x82\x82\x0\x0\x0\x0\x0\xfe\x7c\x38\x10\x0\x0\x0\x0\x10\x38\x7c\xfe\x0\x0\x80\xc1\x63\x36\x1c\x8\x0\x0" ), // Font no. 6 FontEntry("EK-SPACE", 8, 8, "\x0\x0\x0\x0\x0\x0\x0\x0\x3e\x41\x55\x41\x5d\x22\x1c\x0\x3e\x49\x49\x7f\x5d\x22\x1c\x0\x36\x7f\x7f\x7f\x3e\x1c\x8\x0\x8\x1c\x3e\x7f\x3e\x1c\x8\x0\x1c\x1c\x6b\x7f\x6b\x8\x1c\x0\x8\x1c\x3e\x7f\x7f\x49\x1c\x0\x0\x1c\x3e\x3e\x3e\x1c\x0\x0" "\x7f\x63\x41\x41\x41\x63\x7f\x0\x0\x1c\x22\x22\x22\x1c\x0\x0\x7f\x63\x5d\x5d\x5d\x63\x7f\x0\x70\x60\x50\x3e\x63\x63\x3e\x0\x3e\x63\x63\x3e\x8\x3e\x8\x0\x30\x30\x30\x30\x30\x1c\xc\x0\x7c\x6c\x6c\x6c\x67\x3b\x18\x0\x80\xaa\x94\xaa\x94\xaa\x80\xff" "\x0\x6\x1e\x7e\x1e\x6\x0\x0\x0\x30\x3c\x3f\x3c\x30\x0\x0\x18\x7e\x18\x18\x18\x18\x7e\x18\x66\x66\x66\x66\x66\x0\x66\x0\x7e\x6b\x6b\x6b\x6e\x68\x68\x0\x7e\x3\x3f\x63\x7e\x60\x3f\x0\x0\x0\x0\x7e\x7e\x0\x0\x0\x8\x1c\x3e\x0\x3e\x1c\x8\x7f" "\x0\x8\x1c\x3e\x7f\x0\x0\x0\x0\x0\x7f\x3e\x1c\x8\x0\x0\x8\x18\x38\x78\x38\x18\x8\x0\x10\x18\x1c\x1e\x1c\x18\x10\x0\x0\x0\x0\x3\x3\x3\x7e\x0\x0\x14\x36\x77\x36\x14\x0\x0\x0\x0\x8\x1c\x3e\x7f\x0\x0\x0\x0\x0\x7f\x3e\x1c\x8\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\xc\xc\xc\xc\xc\x0\xc\x0\x36\x36\x14\x0\x0\x0\x0\x0\xa\x1f\xa\x1f\xa\x0\x0\x0\x3e\x6b\xb\x3e\x68\x6b\x3e\x0\x4c\x6a\x36\x18\x6c\x56\x32\x0\x1c\x36\x1c\x26\x63\x63\x7e\x0\x18\x18\xc\x0\x0\x0\x0\x0" "\x8\x6\x3\x3\x3\x6\x8\x0\x8\x30\x60\x60\x60\x30\x8\x0\x0\x2a\x1c\x7f\x1c\x2a\x0\x0\x0\x18\x18\x7e\x18\x18\x0\x0\x0\x0\x0\x0\x0\x18\x18\xc\x0\x0\x0\x3e\x0\x0\x0\x0\x0\x0\x0\x0\x0\x18\x18\x0\x0\x60\x30\x18\xc\x6\x0\x0" "\x3e\x63\x63\x6b\x63\x63\x3e\x0\x18\x1c\x18\x18\x18\x18\x7e\x0\x3e\x63\x60\x38\xe\x3\x7f\x0\x3e\x63\x60\x3c\x60\x63\x3e\x0\x70\x78\x6c\x66\x63\x7f\x60\x0\x7f\x3\x3\x3f\x60\x60\x3f\x0\x3e\x63\x3\x3f\x63\x63\x3e\x0\x7f\x30\x18\x3e\xc\xc\xc\x0" "\x3e\x63\x63\x3e\x63\x63\x3e\x0\x3e\x63\x63\x7e\x60\x63\x3e\x0\x0\x18\x18\x0\x18\x18\x0\x0\x0\x18\x18\x0\x18\x18\x8\x0\x30\x18\xc\x6\xc\x18\x30\x0\x0\x0\x3e\x0\x3e\x0\x0\x0\x6\xc\x18\x30\x18\xc\x6\x0\x3c\x62\x60\x30\x18\x0\x18\x0" "\x3c\x62\x6b\x6b\x7b\x3\x3e\x0\x1c\x36\x63\x63\x7f\x63\x63\x0\x3f\x63\x63\x3f\x63\x63\x3f\x0\x3e\x63\x3\x3\x3\x63\x3e\x0\x3f\x63\x63\x63\x63\x63\x3f\x0\x7f\x3\x3\x1f\x3\x3\x7f\x0\x7f\x3\x3\x1f\x3\x3\x3\x0\x3e\x63\x3\x7b\x63\x63\x3e\x0" "\x63\x63\x63\x7f\x63\x63\x63\x0\x3c\x18\x18\x18\x18\x18\x3c\x0\x78\x60\x60\x60\x60\x63\x3e\x0\x63\x33\x1b\xf\x1b\x33\x63\x0\x6\x6\x6\x6\x6\x6\x7e\x0\x63\x77\x7f\x6b\x6b\x63\x63\x0\x63\x67\x6f\x7b\x73\x63\x63\x0\x3e\x63\x63\x63\x63\x63\x3e\x0" "\x3f\x63\x63\x63\x3f\x3\x3\x0\x3e\x63\x63\x63\x6b\x33\x6e\x60\x3f\x63\x63\x63\x3f\x63\x63\x0\x3e\x63\x3\x3e\x60\x63\x3e\x0\x7e\x18\x18\x18\x18\x18\x18\x0\x63\x63\x63\x63\x63\x63\x3e\x0\x63\x63\x63\x63\x63\x36\x1c\x0\x63\x63\x6b\x6b\x6b\x77\x63\x0" "\x63\x63\x36\x1c\x36\x63\x63\x0\x66\x66\x66\x3c\x18\x18\x18\x0\x7f\x30\x18\x3e\xc\x6\x7f\x0\x78\x18\x18\x18\x18\x18\x18\x78\x0\x6\xc\x18\x30\x60\x0\x0\x1e\x18\x18\x18\x18\x18\x18\x1e\x8\x1c\x36\x63\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xff" "\x18\x18\x30\x0\x0\x0\x0\x0\x0\x0\x3e\x60\x7e\x63\x7e\x0\x3\x3\x3f\x63\x63\x63\x3f\x0\x0\x0\x3e\x63\x3\x63\x3e\x0\x60\x60\x7e\x63\x63\x63\x7e\x0\x0\x0\x3e\x63\x7f\x3\x3e\x0\x3c\x46\x6\x3f\x6\x6\x6\x0\x0\x0\x3e\x63\x63\x7e\x60\x3e" "\x3\x3\x3f\x63\x63\x63\x63\x0\x18\x0\x1c\x18\x18\x18\x18\x0\x30\x0\x38\x30\x30\x30\x31\x1e\x3\x3\x63\x3b\xf\x3b\x63\x0\x1c\x18\x18\x18\x18\x18\x18\x0\x0\x0\x36\x7f\x6b\x6b\x63\x0\x0\x0\x3e\x63\x63\x63\x63\x0\x0\x0\x3e\x63\x63\x63\x3e\x0" "\x0\x0\x3e\x63\x63\x63\x3f\x3\x0\x0\x3e\x63\x63\x63\x7e\x60\x0\x0\x3e\x63\x63\x3\x3\x0\x0\x0\x7e\x3\x3e\x60\x3f\x0\xc\xc\x3e\xc\xc\xc\x38\x0\x0\x0\x63\x63\x63\x63\x3e\x0\x0\x0\x63\x63\x63\x36\x1c\x0\x0\x0\x63\x6b\x6b\x77\x22\x0" "\x0\x0\x63\x36\x1c\x36\x63\x0\x0\x0\x63\x63\x63\x7e\x60\x3e\x0\x0\x7f\x30\x1c\x6\x7f\x0\x38\xc\xc\x6\xc\xc\x38\x0\x18\x18\x18\x18\x18\x18\x18\x18\xe\x18\x18\x30\x18\x18\xe\x0\xe\x99\x70\x0\x0\x0\x0\x0\x0\x0\x8\x14\x22\x7f\x0\x0" "\xfe\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\x7f\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\x1\x80\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\xfe\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\x7f" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x1\x1\x2\x2\x4\x8\x30\xc0\x3\xc\x10\x20\x40\x40\x80\x80\xf0\xfc\xe\x6\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0" "\xf\x3f\x70\x60\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\x3\x3\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x6\xe\xfc\xf0\x0\x0\x0\x0\x0\x0\xff\xff\xc0\xc0\xc0\xc0\x60\x70\x3f\xf\x1\x0\x0\x0\x0\x0\x0\x0\x80\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x1\x0\x0\x0\x0\x0\x0\x0\x80\x0\x0\x0\x55\xaa\x0\x0\x0\x0\x38\x7e\x7f\x7f\x7f\x3e\x0\x0\x3c\x7e\x7e\x7e\x7e\x3c\x0\x0\x1c\x7e\xfe\xfe\xfe\x7c\x0\x0\x0\x38\x7e\xfe\xfe\xfc\x0\x0\x0\x0\x0\x1e\xfe\xfc\x0" "\x0\x0\x0\x0\x0\xe\xfc\x0\x0\x0\x0\x0\x0\x80\xe0\x0\x0\x0\x0\x0\x0\x80\xc0\x0\x0\x0\x0\x0\x0\x1\x3\x0\x0\x0\x0\x0\x0\x1\x7\x0\x0\x0\x0\x0\x0\x70\x3f\x0\x0\x0\x0\x0\x78\x7f\x3f\x0\x0\x0\x1c\x7e\x7f\x7f\x3f\x0" "\x14\x2a\x14\x2a\x14\x2a\x14\x2a\xff\xff\x0\x0\x8\x1c\x3e\x0\xff\xff\x0\x0\x0\x0\x0\x2a\xff\xff\x0\x0\x8\x1c\x3e\x7f\xff\xff\x0\x36\x7f\x6b\x6b\x6b\x0\x0\x0\x18\x18\x0\x0\x0\x0\x6\x3\x3\x3\x3\x1\x0\x0\xe\x1b\x1b\x1b\x1b\x31\x0" "\x0\x8e\xdb\xdb\xdb\xdb\x71\x0\x0\x3\x6\x6\x6\x6\xc\x0\x0\x63\x36\x36\x36\x36\x1c\x0\x0\xe3\xb6\xb6\xb6\xb6\x1c\x0\x0\x0\x1\x1\x1\x1\x3\x0\x0\x18\xd\xd\xd\xd\x7\x0\x0\x38\x6d\x6d\x6d\x6d\xc7\x0\x0\x1c\x3e\x3e\x3e\x1c\x0\x0" "\x0\x0\x0\xf\x18\x1f\x18\x18\x6c\x6c\x6c\x67\x60\x67\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x0\x0\x0\x3f\x60\x67\x6c\x6c\x6c\x6c\x6c\x67\x60\x3f\x0\x0\x6c\x6c\x6c\x3f\x0\x0\x0\x0\x18\x18\x18\x1f\x18\xf\x0\x0\x0\x0\x0\xf\x18\x18\x18\x18" "\x18\x18\x18\xf0\x0\x0\x0\x0\x18\x18\x18\xff\x0\x0\x0\x0\x0\x0\x0\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\x18\x18\x18\x0\x0\x0\x0\xff\x0\x0\x0\x18\x18\x18\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\xf8\x18\x18\x6c\x6c\x6c\xec\x6c\x6c\x6c\x6c" "\x6c\x6c\x6c\xcc\xc\xf8\x0\x0\x0\x0\x0\xf8\xc\xcc\x6c\x6c\x6c\x6c\x6c\xc7\x0\xff\x0\x0\x0\x0\x0\xff\x0\xc7\x6c\x6c\x6c\x6c\x6c\xcc\xc\xcc\x6c\x6c\x0\x0\x0\xff\x0\xff\x0\x0\x6c\x6c\x6c\xc7\x0\xc7\x6c\x6c\x18\x18\x18\xff\x0\xff\x0\x0" "\x6c\x6c\x6c\xff\x0\x0\x0\x0\x0\x0\x0\xff\x0\xff\x18\x18\x0\x0\x0\xff\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xf8\x0\x0\x0\x0\x18\x18\x18\xf8\x18\xf0\x0\x0\x0\x0\x0\xf0\x18\xf8\x18\x18\x0\x0\x0\xf8\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xff\x6c\x6c\x6c\x6c" "\x18\x18\x18\xff\x18\xff\x18\x18\x18\x18\x18\xf\x0\x0\x0\x0\x0\x0\x0\xf0\x18\x18\x18\x18\xff\xff\xff\xff\xff\xff\xff\xff\x0\x0\x0\x0\xff\xff\xff\xff\xf\xf\xf\xf\xf\xf\xf\xf\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xff\xff\xff\xff\x0\x0\x0\x0" "\x0\x0\x0\x6e\x33\x33\x6e\x0\x3c\x66\x63\x3b\x63\x63\x3b\x3\x3c\x46\x6\x6\x6\x6\x6\x0\x0\x0\x7f\x36\x36\x36\x36\x0\x3c\x46\xc\x18\xc\x46\x3c\x0\x0\x0\xfc\x66\x63\x33\x1e\x0\x0\x0\x66\x66\x66\x66\x3e\x3\x0\x0\x3e\xc\xc\xc\x18\x0" "\x0\x8\x3e\x6b\x6b\x6b\x3e\x8\x3c\x66\x63\x7f\x63\x33\x1e\x0\x3e\x63\x63\x63\x36\x36\x63\x0\x70\x98\x3c\x66\x63\x33\x1e\x0\x0\x0\x36\x6b\x6b\x36\x0\x0\x0\x0\x5e\x33\x6b\x66\x3d\x0\x0\x0\x7e\x3\x7f\x3\x7e\x0\x0\x0\x0\x0\x0\xdb\xdb\x0" "\x0\x7e\x0\x7e\x0\x7e\x0\x0\x0\xf8\x8\x8\x8\x8\xf8\x0\x0\xff\x0\x0\x0\x0\xff\x0\x0\x1f\x10\x10\x10\x10\x1f\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x0\x2\x1\x0\x0\x0\x20\x30\x28\x24\x22\xa1\x60\x20\x0\x0\x0\x1\x2\x0\x0\x0" "\x20\x60\xa1\x22\x24\x28\x30\x20\x0\x0\x0\x40\x40\x40\x40\x7f\xff\x81\x81\x81\x81\x80\x80\x80\x0\x0\x0\x20\x20\x11\x11\xe\x38\x44\x44\x82\x82\x0\x0\x0\x0\x0\xfe\x7c\x38\x10\x0\x0\x0\x0\x10\x38\x7c\xfe\x0\x0\x80\xc1\x63\x36\x1c\x8\x0\x0" ), // Font no. 7 FontEntry("FINELINE", 8, 8, "\x0\x0\x0\x0\x0\x0\x0\x0\x7e\x81\xa5\x81\xbd\x99\x81\x7e\x7e\xff\xdb\xff\xff\xc3\xe7\x7e\x0\x77\x7f\x7f\x3e\x1c\x8\x0\x8\x1c\x3e\x7f\x3e\x1c\x8\x0\x18\x3c\x18\xff\xff\x52\x18\x0\x8\x1c\x3e\x7f\x7f\x49\x1c\x0\x0\x0\x18\x3c\x18\x0\x0\x0" "\xff\xff\xe7\xc3\xe7\xff\xff\xff\x0\x3c\x42\x42\x42\x42\x3c\x0\xff\xc3\xbd\xbd\xbd\xbd\xc3\xff\xf8\xe0\xb0\x3e\x63\x63\x3e\x0\x0\x7e\xc3\xc3\x7e\x18\x7e\x18\x20\x60\xe0\x20\x20\x3f\x1f\x0\x30\x50\xb0\xd0\x9f\x8f\xf0\xf0\x81\xc2\xbc\xe4\xa4\xfc\xea\xff" "\x0\x0\x6\x1e\x7e\x1e\x6\x0\x0\x0\x60\x78\x7e\x78\x60\x0\x18\x7e\x18\x18\x18\x18\x7e\x18\x66\x66\x66\x66\x66\x0\x66\x0\xff\x6d\x6e\x6c\x6c\x6c\x6c\x0\x7e\x81\x3e\x42\x42\x7c\x81\x7e\x0\x0\x0\x7e\x7e\x0\x0\x0\x18\x7e\x18\x18\x7e\x18\x0\xff" "\x18\x7e\x18\x18\x18\x18\x18\x0\x18\x18\x18\x18\x18\x7e\x18\x0\x0\x20\x60\xff\x60\x20\x0\x0\x0\x4\x6\xff\x6\x4\x0\x0\x0\x0\x0\x3\x3\x3\xff\x0\x0\x24\x66\xff\x66\x24\x0\x0\x0\x0\x8\x1c\x3e\x7f\x0\x0\x0\x0\x0\x7f\x3e\x1c\x8\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\xc\xc\xc\xc\xc\x0\xc\x0\x66\x66\x0\x0\x0\x0\x0\x0\xa\x1f\xa\x1f\xa\x0\x0\x0\x3e\x4b\xb\x3e\x68\x6b\x3e\x8\xc7\x65\x37\x18\xec\xa6\xe3\x0\x1c\x32\x1c\xa2\x63\x73\x5e\x80\x30\x30\x18\x0\x0\x0\x0\x0" "\x8\x6\x3\x3\x3\x6\x8\x0\x8\x30\x60\x60\x60\x30\x8\x0\x0\x2a\x1c\x7f\x1c\x2a\x0\x0\x0\x18\x18\x7e\x18\x18\x0\x0\x0\x0\x0\x0\x0\x0\x18\xe\x0\x0\x0\x7e\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x30\x0\x80\xc0\x60\x30\x18\xc\x6\x3" "\x1e\x21\x21\x21\x21\x21\x1e\x0\x8\xc\x8\x8\x8\x8\x1c\x0\x1e\x21\x10\x8\x4\x2\x3f\x0\x3e\x41\x40\x3c\x40\x41\x3e\x0\x30\x28\x24\x22\x7f\x20\x20\x0\x7f\x1\x1\x3f\x40\x40\x3f\x0\x3e\x41\x1\x3f\x41\x41\x3e\x0\x7f\x20\x10\x8\x8\x8\x8\x0" "\x3e\x41\x41\x3e\x41\x41\x3e\x0\x3e\x41\x41\x7e\x40\x41\x3e\x0\x0\xc\x0\x0\x0\xc\x0\x0\x0\xc\x0\x0\x0\xc\x4\x0\x0\x38\xc\x6\xc\x38\x0\x0\x0\x0\x7e\x0\x7e\x0\x0\x0\x0\xe\x18\x30\x18\xe\x0\x0\x3e\x63\x30\x18\xc\x0\xc\x0" "\x3e\x41\x5d\x55\x7d\x1\x3e\x0\x1c\x22\x41\x41\x7f\x41\x41\x0\x3f\x41\x41\x3f\x41\x41\x3f\x0\x3e\x41\x1\x1\x41\x41\x3e\x0\x3f\x41\x41\x41\x41\x41\x3f\x0\x7f\x1\x1\x1f\x1\x1\x7f\x0\x7f\x1\x1\x1f\x1\x1\x1\x0\x3e\x41\x1\x79\x41\x61\x5e\x0" "\x41\x41\x41\x7f\x41\x41\x41\x0\x3e\x8\x8\x8\x8\x8\x3e\x0\x78\x20\x20\x20\x20\x21\x1e\x0\x21\x11\x9\x7\x9\x11\x21\x0\x2\x2\x2\x2\x2\x2\x7e\x0\x63\x55\x55\x49\x49\x41\x41\x0\x41\x43\x45\x49\x51\x61\x41\x0\x3e\x41\x41\x41\x41\x41\x3e\x0" "\x3f\x42\x42\x3e\x2\x2\x7\x0\x3e\x41\x41\x49\x51\x61\x3e\x40\x1f\x21\x21\x1f\x11\x21\x21\x40\x3e\x41\x1\x3e\x40\x41\x3e\x0\x7f\x8\x8\x8\x8\x8\x8\x0\x41\x41\x41\x41\x41\x41\x3e\x0\x41\x41\x41\x41\x41\x22\x1c\x0\x41\x49\x49\x49\x55\x63\x41\x0" "\x41\x22\x14\x8\x14\x22\x41\x0\x41\x22\x14\x8\x8\x8\x8\x0\x7f\x20\x10\x8\x4\x2\x7f\x0\x38\x18\x18\x18\x18\x18\x18\x38\x3\x6\xc\x18\x30\x60\xc0\x80\xe\xc\xc\xc\xc\xc\xc\xe\x8\x1c\x36\x63\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xff" "\xc\xc\x18\x0\x0\x0\x0\x0\x0\x0\x3e\x40\x7e\x41\x7e\x0\x1\x1\x3f\x41\x41\x41\x3f\x0\x0\x0\x3e\x41\x1\x41\x3e\x0\x40\x40\x7e\x41\x41\x41\x7e\x0\x0\x0\x3e\x41\x7f\x1\x3e\x0\x3c\x42\x2\x3f\x2\x2\x2\x0\x0\x0\xbe\x41\x41\x7e\x40\x3e" "\x1\x1\x3f\x41\x41\x41\x41\x0\xc\x0\x8\x8\x8\x8\x1c\x0\x20\x0\x30\x20\x20\x20\x21\x1e\x1\x1\x31\x9\x7\x9\x31\x0\x8\x8\x8\x8\x8\x8\x18\x0\x0\x0\x63\x55\x49\x49\x41\x0\x0\x0\x3f\x41\x41\x41\x41\x0\x0\x0\x3e\x41\x41\x41\x3e\x0" "\x0\x0\x3f\x41\x41\x3f\x1\x1\x0\x0\x7e\x41\x41\x7e\x40\xc0\x0\x0\x39\x66\x2\x2\x2\x0\x0\x0\x7e\x1\x3e\x40\x3f\x0\x8\x8\x3e\x8\x8\x8\x18\x0\x0\x0\x41\x41\x41\x41\x7e\x0\x0\x0\x41\x41\x41\x22\x1c\x0\x0\x0\x41\x49\x55\x63\x41\x0" "\x0\x0\x22\x14\x8\x14\x22\x0\x0\x0\x41\x41\x41\x7e\x40\x3f\x0\x0\x7f\x10\x8\x4\x7f\x0\x70\x18\x18\xe\x18\x18\x70\x0\x18\x18\x18\x0\x18\x18\x18\x0\x7\xc\xc\x38\xc\xc\x7\x0\xe\xd9\x70\x0\x0\x0\x0\x0\x0\x0\x8\x14\x22\x7f\x0\x0" "\xff\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\x1\x80\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\xff" "\x1\x0\x0\x0\x0\x0\x0\x0\x80\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x1\x0\x0\x0\x0\x0\x0\x0\x80\x1\x3\x7\xf\x1f\x3f\x7f\xff\xff\xfe\xfc\xf8\xf0\xe0\xc0\x80\xff\xff\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0" "\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\x3\x3\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\xff\xff\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\x0\x55\x0\x0\x0\x0\x0\x1e\x33\x2d\x2d\x33\x1e\x0\x0\x3c\x66\x5a\x5a\x66\x3c\x0\x0\x78\xcc\xb4\xb4\xcc\x78\x0\x0\xf0\x98\x68\x68\x98\xf0\x0\x0\xe0\x30\xd0\xd0\x30\xe0\x0" "\x0\xc0\x60\xa0\xa0\x60\xc0\x0\x0\x80\xc0\x40\x40\xc0\x80\x0\x0\x0\x80\x80\x80\x80\x0\x0\x0\x0\x1\x1\x1\x1\x0\x0\x0\x1\x3\x2\x2\x3\x1\x0\x0\x3\x6\x5\x5\x6\x3\x0\x0\x7\xc\xb\xb\xc\x7\x0\x0\xf\x19\x16\x16\x19\xf\x0" "\x36\x2a\x36\x2a\x36\x2a\x36\x2a\xff\xff\x0\x0\x0\x8\x1c\x3e\xff\xff\x0\x0\x0\x0\x0\x7f\xff\xff\x0\x0\x8\x1c\x3e\x7f\xff\xff\x0\xc3\xe7\xff\xdb\xc3\x0\x0\x0\x0\x10\x0\x0\x0\x0\x3\x3\x3\x3\x3\x3\x3\x0\x1b\x1b\x1b\x1b\x1b\x1b\x1b" "\x0\xdb\xdb\xdb\xdb\xdb\xdb\xdb\x0\x6\x6\x6\x6\x6\x6\x6\x0\x36\x36\x36\x36\x36\x36\x36\x0\xb6\xb6\xb6\xb6\xb6\xb6\xb6\x0\x1\x1\x1\x1\x1\x1\x1\x0\xd\xd\xd\xd\xd\xd\xd\x0\x6d\x6d\x6d\x6d\x6d\x6d\x6d\x0\x0\x18\x3c\x3c\x18\x0\x0" "\x0\x0\x0\x1f\x18\x1f\x18\x18\x6c\x6c\x6c\x6f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x0\x0\x0\x7f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6f\x60\x7f\x0\x0\x6c\x6c\x6c\x7f\x0\x0\x0\x0\x18\x18\x18\x1f\x18\x1f\x0\x0\x0\x0\x0\x1f\x18\x18\x18\x18" "\x18\x18\x18\xf8\x0\x0\x0\x0\x18\x18\x18\xff\x0\x0\x0\x0\x0\x0\x0\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\x18\x18\x18\x0\x0\x0\x0\xff\x0\x0\x0\x18\x18\x18\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\xf8\x18\x18\x6c\x6c\x6c\xec\x6c\x6c\x6c\x6c" "\x6c\x6c\x6c\xec\xc\xfc\x0\x0\x0\x0\x0\xfc\xc\xec\x6c\x6c\x6c\x6c\x6c\xef\x0\xff\x0\x0\x0\x0\x0\xff\x0\xef\x6c\x6c\x6c\x6c\x6c\xec\xc\xec\x6c\x6c\x0\x0\x0\xff\x0\xff\x0\x0\x6c\x6c\x6c\xef\x0\xef\x6c\x6c\x18\x18\x18\xff\x0\xff\x0\x0" "\x6c\x6c\x6c\xff\x0\x0\x0\x0\x0\x0\x0\xff\x0\xff\x18\x18\x0\x0\x0\xff\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xfc\x0\x0\x0\x0\x18\x18\x18\xf8\x18\xf8\x0\x0\x0\x0\x0\xf8\x18\xf8\x18\x18\x0\x0\x0\xfc\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xff\x6c\x6c\x6c\x6c" "\x18\x18\x18\xff\x18\xff\x18\x18\x18\x18\x18\x1f\x0\x0\x0\x0\x0\x0\x0\xf8\x18\x18\x18\x18\xff\xff\xff\xff\xff\xff\xff\xff\x0\x0\x0\x0\xff\xff\xff\xff\xf\xf\xf\xf\xf\xf\xf\xf\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xff\xff\xff\xff\x0\x0\x0\x0" "\x0\x0\xee\x19\x19\xee\x0\x0\x38\x6c\x66\x3f\x63\x63\x3f\x3\x7f\x46\x6\x6\x6\x6\x6\x0\x0\x0\xff\x66\x66\x66\x66\x0\x7f\x46\xc\x18\xc\x46\x7f\x0\x0\x0\xfc\x66\x63\x33\x1e\x0\x0\x0\xcc\xcc\xcc\x7c\xc\xf\x0\x0\xff\x18\x18\x18\x18\x0" "\x3c\x18\x3c\x66\x66\x3c\x18\x3c\x0\x3e\x63\x7f\x63\x3e\x0\x0\x0\x7e\xc3\xc3\xc3\x66\xe7\x0\x78\x98\x3c\x66\x63\x33\x1e\x0\x0\x0\x66\x99\x99\x66\x0\x0\x0\xc0\x3e\x73\x67\x3e\x3\x0\x0\x7c\x3\x7f\x3\x7c\x0\x0\x0\x0\x0\x0\x0\xdb\xdb\x0" "\x0\x7e\x0\x7e\x0\x7e\x0\x0\x0\xf8\x8\x8\x8\x8\xf8\x0\x0\xff\x0\x0\x0\x0\xff\x0\x0\x1f\x10\x10\x10\x10\x1f\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x0\x2\x1\x0\x0\x0\x20\x30\x28\x24\x22\xa1\x60\x20\x0\x0\x0\x1\x2\x0\x0\x0" "\x20\x60\xa1\x22\x24\x28\x30\x20\x0\x0\x0\x40\x40\x40\x40\x7f\xff\x81\x81\x81\x81\x80\x80\x80\x0\x0\x0\x20\x20\x11\x11\xe\x38\x44\x44\x82\x82\x0\x0\x0\x0\x0\xfe\x7c\x38\x10\x0\x0\x0\x0\x10\x38\x7c\xfe\x0\x0\x80\xc1\x63\x36\x1c\x8\x0\x0" ), // Font no. 8 FontEntry("FN-ICE", 8, 8, "\x0\x0\x0\x0\x0\x0\x0\x0\x7e\x81\xa5\x81\xbd\x99\x81\x7e\x7e\xff\xdb\xff\xc3\xe7\xff\x7e\x36\x7f\x7f\x7f\x3e\x1c\x8\x0\x8\x1c\x3e\x7f\x3e\x1c\x8\x0\x1c\x3e\x1c\x7f\x7f\x49\x8\x3e\x0\x8\x1c\x3e\x7f\x3e\x1c\x3e\x0\x0\x18\x3c\x3c\x18\x0\x0" "\xff\xff\xe7\xc3\xc3\xe7\xff\xff\x0\x3c\x66\x42\x42\x66\x3c\x0\xff\xc3\x99\xbd\xbd\x99\xc3\xff\xf0\xe0\xf0\xbe\x33\x33\x33\x1e\x3c\x66\x66\x66\x3c\x18\x7e\x18\xfc\xcc\xfc\xc\xc\xe\xf\x7\xfe\xc6\xfe\xc6\xc6\xe6\x67\x3\x99\x5a\x3c\xe7\xe7\x3c\x5a\x99" "\x1\x7\x1f\x7f\x1f\x7\x1\x0\x40\x70\x7c\x7f\x7c\x70\x40\x0\x18\x3c\x7e\x18\x18\x7e\x3c\x18\x66\x66\x66\x66\x66\x0\x66\x0\xfe\xdb\xdb\xde\xd8\xd8\xd8\x0\x7c\xc6\x1c\x36\x36\x1c\x61\x3f\x0\x0\x0\x0\x7e\x7e\x7e\x0\x18\x3c\x7e\x18\x7e\x3c\x18\xff" "\x18\x3c\x7e\x18\x18\x18\x18\x0\x18\x18\x18\x18\x7e\x3c\x18\x0\x0\x18\x30\x7f\x30\x18\x0\x0\x0\xc\x6\x7f\x6\xc\x0\x0\x0\x0\x3\x3\x3\x7f\x0\x0\x0\x24\x66\xff\x66\x24\x0\x0\x0\x18\x3c\x7e\xff\xff\x0\x0\x0\xff\xff\x7e\x3c\x18\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x4\xc\x1c\x1c\x1c\x0\x1c\x0\x36\x36\x14\x0\x0\x0\x0\x0\x0\x14\x3e\x14\x3e\x14\x0\x0\x8\x3c\x6a\xc\x38\x6a\x3c\x8\x0\x7a\x25\x12\x8\x24\x52\x20\x10\x0\x18\x24\x4\x18\x0\x8\xc\xc\x6\x0\x0\x0\x0\x0" "\x30\x18\xc\xc\xc\xc\x18\x30\xc\x18\x30\x30\x30\x30\x18\xc\x0\x41\x36\x1c\x3e\x5d\x8\x8\x0\x18\x18\x7e\x18\x18\x0\x0\x0\x0\x0\x0\x0\x18\x18\xc\x0\x0\x0\x7e\x0\x0\x0\x0\x0\x0\x0\x0\x0\x18\x18\x0\x40\x60\x30\x18\xc\x6\x2\x0" "\x3e\x63\x63\x63\x63\x63\x3e\x0\x8\x8\xc\xe\xc\xc\x1e\x0\x1e\x23\x31\x18\x6\x23\x3f\x0\x1e\x23\x20\x1c\x20\x23\x1e\x0\x23\x23\x23\x23\x3e\x20\x20\x0\x3f\x3\x3\x3f\x20\x21\x1e\x0\x3e\x3\x3\x1f\x23\x23\x1e\x0\x3f\x23\x20\x10\x8\xc\xc\x0" "\x1e\x23\x23\x1e\x23\x23\x1e\x0\x1e\x23\x23\x3e\x20\x23\x1e\x0\x0\x18\x18\x0\x0\x18\x18\x0\x0\x18\x18\x0\x0\x18\x18\xc\x0\x60\x30\x18\xc\x18\x30\x60\x0\x0\x0\x7e\x0\x7e\x0\x0\x0\x6\xc\x18\x30\x18\xc\x6\x3e\x47\x20\x10\x18\x0\x18\x0" "\x3e\x41\x5d\x45\x5d\x41\x3e\x0\x7\xf\x1b\x33\x3f\x33\x33\x0\xf\x1b\x33\x7f\x33\x63\x3f\x0\x7\xf\x1b\x33\x3\x3\x3f\x0\x7\xf\x1b\x33\x63\x63\x3f\x0\x7\xf\x1b\x33\xf\x3\x3f\x0\x7\xf\x1b\x33\xf\x3\x3\x0\xf\x1f\x33\x23\x1b\x23\x3f\x0" "\x3\x3\x13\x33\x3f\x33\x33\x0\x8\x18\x18\x18\x18\x18\x18\x0\x20\x30\x30\x30\x33\x33\x3e\x0\x3\x1b\x33\x33\xf\x33\x33\x0\x3\x3\x3\x3\x3\x3\x7f\x0\x63\x77\x7f\x6b\x63\x63\x63\x0\x3\x17\x3b\x33\x33\x33\x33\x0\x6\xf\x1b\x33\x63\x63\x3e\x0" "\x7\xf\x1b\x33\x3f\x3\x3\x0\xe\x1b\x33\x63\x63\x33\x6e\x0\x7\xf\x1b\x33\x1f\x33\x33\x0\x7\xf\x1b\x3\x1e\x20\x1f\x0\x3\x6\xc\x1c\x2c\xc\xc\x0\x3\x3\x23\x63\x63\x63\x3e\x0\x3\x3\x23\x63\x36\x1c\x8\x0\x3\x3\x23\x6b\x6b\x6b\x3e\x0" "\x22\x63\x36\x8\x36\x63\x22\x0\x3\x13\x33\x36\x3c\x20\x1f\x0\x6\xd\x18\x18\xc\x6\x3f\x0\x38\xc\xc\xc\xc\xc\xc\x38\x2\x6\xc\x18\x30\x60\x40\x0\x1c\x30\x30\x30\x30\x30\x30\x1c\x8\x1c\x36\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xff" "\xc\xc\x18\x0\x0\x0\x0\x0\x0\x0\x0\x3e\x33\x33\x6e\x0\x1\x3\x3\x1f\x33\x33\x1f\x0\x0\x0\x0\x1e\x33\x3\x3e\x0\x30\x30\x30\x3e\x33\x33\x3e\x0\x0\x0\x0\x1e\x33\xf\x3e\x0\x1c\x36\x6\x6\x1f\x6\x6\x0\x0\x0\x0\x1e\x33\x3e\x31\x1e" "\x3\x3\x3\x1f\x33\x33\x33\x0\x0\xc\x0\xc\xc\xc\xc\x0\x0\x30\x0\x30\x30\x33\x33\x1e\x3\x3\x33\x1b\xf\x1b\x33\x0\xe\xc\xc\xc\xc\xc\xc\x0\x0\x0\x0\x37\x7f\x6b\x63\x0\x0\x0\x0\x1d\x33\x33\x33\x0\x0\x0\x0\x1e\x33\x33\x1e\x0" "\x0\x0\x0\x3b\x66\x3e\x6\xf\x0\x0\x0\x6e\x33\x3e\x30\x78\x0\x0\x0\x3c\x66\x6\x6\x0\x0\x0\x0\x3e\x7\x38\x1f\x0\x0\x8\xc\x3f\xc\x6c\x38\x0\x0\x0\x0\x33\x33\x33\x6e\x0\x0\x0\x0\x33\x33\x1e\xc\x0\x0\x0\x0\x6b\x6b\x7f\x36\x0" "\x0\x0\x0\x77\x18\xc\x77\x0\x0\x0\x0\x33\x33\x3e\x30\x1f\x0\x0\x0\x7f\x30\xe\x7f\x0\x38\xc\xc\x7\xc\xc\x38\x0\x18\x18\x18\x0\x18\x18\x18\x0\x7\xc\xc\x38\xc\xc\x7\x0\xff\x0\x0\x0\x0\x0\x0\x0\x0\x8\x1c\x36\x63\x63\x7f\x0" "\xff\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\x1\x80\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\xff" "\x1\x0\x0\x0\x0\x0\x0\x0\x80\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x1\x0\x0\x0\x0\x0\x0\x0\x80\x1\x3\x7\xf\x1f\x3f\x7f\xff\xff\xfe\xfc\xf8\xf0\xe0\xc0\x80\xff\xff\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0" "\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\x3\x3\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\xff\xff\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\xaa\x55\x55\xaa\x0\x0\x0\x0\xe\x7f\xff\x7f\xe\x0\x0\x0\x3c\x7e\xff\x7e\x3c\x0\x0\x0\x70\xfe\xff\xfe\x70\x0\x0\x0\xe0\xfc\xfe\xfc\xe0\x0\x0\x0\x0\xf0\xfc\xf0\x0\x0" "\x0\x0\x0\xc0\xf8\xc0\x0\x0\x0\x0\x0\x80\xf0\x80\x0\x0\x0\x0\x0\x80\xe0\x80\x0\x0\x0\x0\x0\x1\x7\x1\x0\x0\x0\x0\x0\x1\xf\x1\x0\x0\x0\x0\x0\x3\x1f\x3\x0\x0\x0\x0\x0\xf\x3f\xf\x0\x0\x0\x0\x7\x3f\x7f\x3f\x7\x0" "\x24\x18\x24\x18\x24\x18\x24\x18\xff\xff\x3e\x1c\x8\x8\x0\x0\xff\xff\x1c\x8\x8\x0\x0\x0\xff\xff\x3e\x3e\x1c\x1c\x8\x8\xff\xff\x0\x42\x66\x5a\x42\x42\x0\x0\x0\x18\x18\x0\x0\x0\x0\x0\x1\x3\x3\x3\x0\x0\x0\x1\x3\xb\x1b\x7\x6\x0" "\x0\xbb\xbb\x77\x77\x77\xee\xee\x0\x0\x1\x3\x7\x3\x1\x0\x0\x1\xb\x17\x37\x17\x6\x2\x0\xbb\xbb\x77\x77\x77\xee\xee\x0\x0\x1\x1\x1\x1\x0\x0\x0\x0\x3\x3\xf\x7\x2\x0\x0\xbb\xbb\x77\x77\x77\xee\xee\x0\x0\x18\x3c\x3c\x18\x0\x0" "\x0\x0\x1f\x18\x1f\x18\x18\x18\x6c\x6c\x6f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x0\x0\x7f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6f\x60\x7f\x0\x0\x0\x6c\x6c\x6c\x6c\x7f\x0\x0\x0\x18\x18\x1f\x18\x1f\x0\x0\x0\x0\x0\x0\x0\x1f\x18\x18\x18" "\x18\x18\x18\x18\xf8\x0\x0\x0\x18\x18\x18\x18\xff\x0\x0\x0\x0\x0\x0\x0\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\x18\x18\x0\x0\x0\x0\xff\x0\x0\x0\x18\x18\x18\x18\xff\x18\x18\x18\x18\x18\xf8\x18\xf8\x18\x18\x18\x6c\x6c\x6c\x6c\xec\x6c\x6c\x6c" "\x6c\x6c\xec\xc\xfc\x0\x0\x0\x0\x0\xfc\xc\xec\x6c\x6c\x6c\x6c\x6c\xef\x0\xff\x0\x0\x0\x0\x0\xff\x0\xef\x6c\x6c\x6c\x6c\x6c\xec\xc\xec\x6c\x6c\x6c\x0\x0\xff\x0\xff\x0\x0\x0\x6c\x6c\xef\x0\xef\x6c\x6c\x6c\x18\x18\xff\x0\xff\x0\x0\x0" "\x6c\x6c\x6c\x6c\xff\x0\x0\x0\x0\x0\xff\x0\xff\x18\x18\x18\x0\x0\x0\x0\xff\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xfc\x0\x0\x0\x18\x18\xf8\x18\xf8\x0\x0\x0\x0\x0\xf8\x18\xf8\x18\x18\x18\x0\x0\x0\x0\xfc\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xff\x6c\x6c\x6c" "\x18\x18\xff\x18\xff\x18\x18\x18\x18\x18\x18\x18\x1f\x0\x0\x0\x0\x0\x0\x0\xf8\x18\x18\x18\xff\xff\xff\xff\xff\xff\xff\xff\x0\x0\x0\x0\xff\xff\xff\xff\xf\xf\xf\xf\xf\xf\xf\xf\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xff\xff\xff\xff\x0\x0\x0\x0" "\x0\x0\x6e\x3b\x13\x3b\x6e\x0\x0\x1e\x33\x1f\x33\x1f\x3\x3\x0\x3f\x33\x3\x3\x3\x3\x0\x0\x0\x7f\x36\x36\x36\x36\x0\x3f\x33\x6\xc\x6\x33\x3f\x0\x0\x0\x7e\x1b\x1b\x1b\xe\x0\x0\x66\x66\x66\x66\x3e\x6\x3\x0\x6e\x3b\x18\x18\x18\x18\x0" "\x3f\xc\x1e\x33\x33\x1e\xc\x3f\x1c\x36\x63\x7f\x63\x36\x1c\x0\x1c\x36\x63\x63\x36\x36\x77\x0\x38\xc\x18\x3e\x33\x33\x1e\x0\x0\x0\x7e\xdb\xdb\x7e\x0\x0\x60\x30\x7e\xdb\xdb\x7e\x6\x3\x1c\x6\x3\x1f\x3\x6\x1c\x0\x0\x0\x0\x0\x0\xdb\xdb\x0" "\x0\x7e\x0\x7e\x0\x7e\x0\x0\x0\xf8\x8\x8\x8\x8\xf8\x0\x0\xff\x0\x0\x0\x0\xff\x0\x0\x1f\x10\x10\x10\x10\x1f\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x0\x2\x1\x0\x0\x0\x20\x30\x28\x24\x22\xa1\x60\x20\x0\x0\x0\x1\x2\x0\x0\x0" "\x20\x60\xa1\x22\x24\x28\x30\x20\x0\x0\x0\x40\x40\x40\x40\x7f\xff\x81\x81\x81\x81\x80\x80\x80\x0\x0\x0\x20\x20\x11\x11\xe\x38\x44\x44\x82\x82\x0\x0\x0\x0\x0\xfe\x7c\x38\x10\x0\x0\x0\x0\x10\x38\x7c\xfe\x0\x0\x80\xc1\x63\x36\x1c\x8\x0\x0" ), // Font no. 9 FontEntry("FN-LOWER", 8, 8, "\x0\x0\x0\x0\x0\x0\x0\x0\x7e\x81\xa5\x81\xbd\x99\x81\x7e\x7e\xff\xdb\xff\xc3\xe7\xff\x7e\x36\x7f\x7f\x7f\x3e\x1c\x8\x0\x8\x1c\x3e\x7f\x3e\x1c\x8\x0\x1c\x3e\x1c\x7f\x7f\x49\x8\x3e\x0\x8\x1c\x3e\x7f\x3e\x1c\x3e\x0\x0\x18\x3c\x3c\x18\x0\x0" "\xff\xff\xe7\xc3\xc3\xe7\xff\xff\x0\x3c\x66\x42\x42\x66\x3c\x0\xff\xc3\x99\xbd\xbd\x99\xc3\xff\xf0\xe0\xf0\xbe\x33\x33\x33\x1e\x3c\x66\x66\x66\x3c\x18\x7e\x18\xfc\xcc\xfc\xc\xc\xe\xf\x7\xfe\xc6\xfe\xc6\xc6\xe6\x67\x3\x99\x5a\x3c\xe7\xe7\x3c\x5a\x99" "\x1\x7\x1f\x7f\x1f\x7\x1\x0\x40\x70\x7c\x7f\x7c\x70\x40\x0\x18\x3c\x7e\x18\x18\x7e\x3c\x18\x66\x66\x66\x66\x66\x0\x66\x0\xfe\xdb\xdb\xde\xd8\xd8\xd8\x0\x7c\xc6\x1c\x36\x36\x1c\x61\x3f\x0\x0\x0\x0\x7e\x7e\x7e\x0\x18\x3c\x7e\x18\x7e\x3c\x18\xff" "\x18\x3c\x7e\x18\x18\x18\x18\x0\x18\x18\x18\x18\x7e\x3c\x18\x0\x0\x18\x30\x7f\x30\x18\x0\x0\x0\xc\x6\x7f\x6\xc\x0\x0\x0\x0\x3\x3\x3\x7f\x0\x0\x0\x24\x66\xff\x66\x24\x0\x0\x0\x18\x3c\x7e\xff\xff\x0\x0\x0\xff\xff\x7e\x3c\x18\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x18\x3c\x3c\x18\x18\x0\x18\x0\x36\x36\x36\x0\x0\x0\x0\x0\x0\x0\x14\x3e\x14\x3e\x14\x0\x18\x7e\x3\x3e\x60\x3f\x18\x0\x0\x63\x33\x18\xc\x66\x63\x0\x1c\x36\x1c\x6e\x3b\x33\x6e\x0\xc\xc\x6\x0\x0\x0\x0\x0" "\x18\xc\x6\x6\x6\xc\x18\x0\x6\xc\x18\x18\x18\xc\x6\x0\x0\x66\x3c\xff\x3c\x66\x0\x0\x0\x18\x18\x7e\x18\x18\x0\x0\x0\x0\x0\x0\x0\x18\x18\xc\x0\x0\x0\x0\x3e\x0\x0\x0\x0\x0\x0\x0\x0\x18\x18\x0\x60\x30\x18\xc\x6\x3\x1\x0" "\x3e\x73\x7b\x6f\x67\x63\x3e\x0\xc\xe\xc\xc\xc\xc\x3f\x0\x1e\x33\x30\x1c\x6\x33\x3f\x0\x1e\x33\x30\x1c\x30\x33\x1e\x0\x38\x3c\x36\x33\x7f\x30\x78\x0\x3f\x3\x1f\x30\x30\x33\x1e\x0\x1c\x6\x3\x1f\x33\x33\x1e\x0\x3f\x33\x30\x18\xc\xc\xc\x0" "\x1e\x33\x33\x1e\x33\x33\x1e\x0\x1e\x33\x33\x3e\x30\x18\xe\x0\x0\x18\x18\x0\x0\x18\x18\x0\x0\x18\x18\x0\x0\x18\x18\xc\x18\xc\x6\x3\x6\xc\x18\x0\x0\x0\x7e\x0\x7e\x0\x0\x0\x6\xc\x18\x30\x18\xc\x6\x0\x3c\x66\x30\x18\x18\x0\x18\x0" "\x3e\x63\x7b\x7b\x3b\x3\x3e\x0\x0\x0\x1e\x30\x3e\x33\x6e\x0\x7\x6\x6\x3e\x66\x66\x3b\x0\x0\x0\x1e\x33\x3\x33\x1e\x0\x38\x30\x30\x3e\x33\x33\x6e\x0\x0\x0\x1e\x33\x3f\x3\x1e\x0\x1c\x36\x26\xf\x6\x6\xf\x0\x0\x0\x6e\x33\x33\x3e\x30\x1f" "\x7\x6\x36\x6e\x66\x66\x67\x0\xc\x0\xe\xc\xc\xc\x1e\x0\x30\x0\x38\x30\x30\x33\x33\x1e\x7\x6\x66\x36\x1e\x36\x67\x0\xe\xc\xc\xc\xc\xc\x1e\x0\x0\x0\x33\x7f\x7f\x6b\x6b\x0\x0\x0\x1d\x33\x33\x33\x33\x0\x0\x0\x1e\x33\x33\x33\x1e\x0" "\x0\x0\x3b\x66\x66\x3e\x6\xf\x0\x0\x6e\x33\x33\x3e\x30\x78\x0\x0\x3b\x6e\x46\x6\xf\x0\x0\x0\x3e\x3\xe\x38\x1f\x0\x8\xc\x3f\xc\xc\x2c\x18\x0\x0\x0\x33\x33\x33\x33\x6e\x0\x0\x0\x33\x33\x33\x1e\xc\x0\x0\x0\x63\x63\x6b\x7f\x36\x0" "\x0\x0\x63\x36\x1c\x36\x63\x0\x0\x0\x33\x33\x33\x3e\x30\x1f\x0\x0\x3f\x19\xc\x26\x3f\x0\x1e\x6\x6\x6\x6\x6\x1e\x0\x3\x6\xc\x18\x30\x60\x40\x0\x1e\x18\x18\x18\x18\x18\x1e\x0\x8\x1c\x36\x63\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xff" "\xc\xc\x18\x0\x0\x0\x0\x0\x0\x0\x1e\x30\x3e\x33\x6e\x0\x7\x6\x6\x3e\x66\x66\x3b\x0\x0\x0\x1e\x33\x3\x33\x1e\x0\x38\x30\x30\x3e\x33\x33\x6e\x0\x0\x0\x1e\x33\x3f\x3\x1e\x0\x1c\x36\x26\xf\x6\x6\xf\x0\x0\x0\x6e\x33\x33\x3e\x30\x1f" "\x7\x6\x36\x6e\x66\x66\x67\x0\xc\x0\xe\xc\xc\xc\x1e\x0\x30\x0\x38\x30\x30\x33\x33\x1e\x7\x6\x66\x36\x1e\x36\x67\x0\xe\xc\xc\xc\xc\xc\x1e\x0\x0\x0\x33\x7f\x7f\x6b\x6b\x0\x0\x0\x1d\x33\x33\x33\x33\x0\x0\x0\x1e\x33\x33\x33\x1e\x0" "\x0\x0\x3b\x66\x66\x3e\x6\xf\x0\x0\x6e\x33\x33\x3e\x30\x78\x0\x0\x3b\x6e\x46\x6\xf\x0\x0\x0\x3e\x3\xe\x38\x1f\x0\x8\xc\x3f\xc\xc\x2c\x18\x0\x0\x0\x33\x33\x33\x33\x6e\x0\x0\x0\x33\x33\x33\x1e\xc\x0\x0\x0\x63\x63\x6b\x7f\x36\x0" "\x0\x0\x63\x36\x1c\x36\x63\x0\x0\x0\x33\x33\x33\x3e\x30\x1f\x0\x0\x3f\x19\xc\x26\x3f\x0\x38\xc\xc\x7\xc\xc\x38\x0\x18\x18\x18\x0\x18\x18\x18\x0\x7\xc\xc\x38\xc\xc\x7\x0\x6e\x3b\x0\x0\x0\x0\x0\x0\x0\x8\x1c\x36\x63\x63\x7f\x0" "\xff\xff\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\x3\x3\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\xff\xff" "\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x3\x1\x3\x7\xf\x1f\xbf\xff\xff\xfd\xf8\xf0\xe0\xc0\x80\xc0\xff\xff\x7\x7\x7\x7\x7\x7\xff\xff\x0\x0\x0\x0\x0\x0" "\xff\xff\xe0\xe0\xe0\xe0\xe0\xe0\x7\x7\x7\x7\x7\x7\x7\x7\xe0\xe0\xe0\xe0\xe0\xe0\xe0\xe0\x7\x7\x7\x7\x7\x7\xff\xff\x0\x0\x0\x0\x0\x0\xff\xff\xe0\xe0\xe0\xe0\xe0\xe0\xff\xff\x7\x7\x0\x0\x0\x0\x0\x0\xe0\xe0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x7\x7\x0\x0\x0\x0\x0\x0\xe0\xe0\x0\x0\x0\x0\x55\x0\x0\x0\x0\x3f\x3f\x3f\x3f\x3f\x3f\x0\x0\x7e\x7e\x7e\x7e\x7e\x7e\x0\x0\xfc\xfc\xfc\xfc\xfc\xfc\x0\x0\xf8\xf8\xf8\xf8\xf8\xf8\x0\x0\xf0\xf0\xf0\xf0\xf0\xf0\x0" "\x0\xe0\xe0\xe0\xe0\xe0\xe0\x0\x0\xc0\xc0\xc0\xc0\xc0\xc0\x0\x0\x80\x80\x80\x80\x80\x80\x0\x0\x1\x1\x1\x1\x1\x1\x0\x0\x3\x3\x3\x3\x3\x3\x0\x0\x7\x7\x7\x7\x7\x7\x0\x0\xf\xf\xf\xf\xf\xf\x0\x0\x1f\x1f\x1f\x1f\x1f\x1f\x0" "\x3c\x3c\x3c\x3c\x3c\x3c\x3c\x3c\xff\xff\x0\x18\x3c\x7e\xff\x0\xff\xff\x0\x0\x0\x0\x18\x18\xff\xff\x0\x18\x3c\x7e\xff\x18\xff\xff\x0\x42\x66\x5a\x42\x42\x0\x0\x0\x0\x18\x0\x0\x0\x0\x3\x3\x3\x3\x3\x3\x3\x0\x1b\x1b\x1b\x1b\x1b\x1b\x1b" "\x0\xdb\xdb\xdb\xdb\xdb\xdb\xdb\x0\x6\x6\x6\x6\x6\x6\x6\x0\x36\x36\x36\x36\x36\x36\x36\x0\xb6\xb6\xb6\xb6\xb6\xb6\xb6\x0\x1\x1\x1\x1\x1\x1\x1\x0\xd\xd\xd\xd\xd\xd\xd\x0\x6d\x6d\x6d\x6d\x6d\x6d\x6d\x0\x0\x0\x18\x3c\x18\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x38\x44\x82\x0\x0\x0\x0\x0\x0\x0\x0\x41\x22\x1c\x0\x0\xfc\x84\x84\x84\x80\x80\x0\x0\x0\x0\x10\x10\x10\x1f\x0\x0\x80\x80\x80\x8c\xb0\xc0\x0\x0\x1\x6\x18\x0\x0\x0\x0\x3c\x66\x30\x18\x18\x0\x18\x0" "\x3c\x66\x30\x18\x18\x0\x18\x0\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x8\x1c\x8\x0\x0\x0\x0\x0\x18\x3c\x18\x0\x0\x0\x0\x0\x0\xff\x0\x0\x0\x0\x0\x3c\x3c\x3c\x3c\x0\x0\x0\x18\x3c\x7e\x7e\x3c\x18\x0\x0\x3c\x7e\x7e\x7e\x7e\x3c\x0" "\x18\x7e\x7e\xff\xff\x7e\x7e\x18\x3c\x7e\xff\xff\xff\xff\x7e\x3c\x6c\x6c\xef\x0\xff\x0\x0\x0\x0\x0\xff\x0\xef\x6c\x6c\x6c\x6c\x6c\xec\xc\xec\x6c\x6c\x6c\x0\x0\xff\x0\xff\x0\x0\x0\x6c\x6c\xef\x0\xef\x6c\x6c\x6c\x18\x18\xff\x0\xff\x0\x0\x0" "\x6c\x6c\x6c\x6c\xff\x0\x0\x0\x0\x0\xff\x0\xff\x18\x18\x18\x0\x0\x0\x0\xff\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xfc\x0\x0\x0\x18\x18\xf8\x18\xf8\x0\x0\x0\x0\x0\xf8\x18\xf8\x18\x18\x18\x0\x0\x0\x0\xfc\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xff\x6c\x6c\x6c" "\x18\x18\xff\x18\xff\x18\x18\x18\x18\x18\x18\x18\x1f\x0\x0\x0\x0\x0\x0\x0\xf8\x18\x18\x18\xff\xff\xff\xff\xff\xff\xff\xff\x0\x0\x0\x0\xff\xff\xff\xff\xf\xf\xf\xf\xf\xf\xf\xf\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xff\xff\xff\xff\x0\x0\x0\x0" "\x0\x0\x6e\x3b\x13\x3b\x6e\x0\x0\x1e\x33\x1f\x33\x1f\x3\x3\x0\x3f\x33\x3\x3\x3\x3\x0\x0\x0\x7f\x36\x36\x36\x36\x0\x3f\x33\x6\xc\x6\x33\x3f\x0\x0\x0\x7e\x1b\x1b\x1b\xe\x0\x0\x66\x66\x66\x66\x3e\x6\x3\x0\x6e\x3b\x18\x18\x18\x18\x0" "\x3f\xc\x1e\x33\x33\x1e\xc\x3f\x1c\x36\x63\x7f\x63\x36\x1c\x0\x1c\x36\x63\x63\x36\x36\x77\x0\x38\xc\x18\x3e\x33\x33\x1e\x0\x0\x0\x7e\xdb\xdb\x7e\x0\x0\x60\x30\x7e\xdb\xdb\x7e\x6\x3\x1c\x6\x3\x1f\x3\x6\x1c\x0\x0\x0\x0\x0\x0\xdb\xdb\x0" "\x0\x7e\x0\x7e\x0\x7e\x0\x0\x0\xf8\x8\x8\x8\x8\xf8\x0\x0\xff\x0\x0\x0\x0\xff\x0\x0\x1f\x10\x10\x10\x10\x1f\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x0\x2\x1\x0\x0\x0\x20\x30\x28\x24\x22\xa1\x60\x20\x0\x0\x0\x1\x2\x0\x0\x0" "\x20\x60\xa1\x22\x24\x28\x30\x20\x0\x0\x0\x40\x40\x40\x40\x7f\xff\x81\x81\x81\x81\x80\x80\x80\x0\x0\x0\x20\x20\x11\x11\xe\x38\x44\x44\x82\x82\x0\x0\x0\x0\x0\xfe\x7c\x38\x10\x0\x0\x0\x0\x10\x38\x7c\xfe\x0\x0\x80\xc1\x63\x36\x1c\x8\x0\x0" ), // Font no. 10 FontEntry("FN-ROUND", 8, 8, "\x0\x0\x0\x0\x0\x0\x0\x0\x78\x84\xaa\x81\xb9\x9d\x81\x7e\x78\xfc\xd6\xff\xc7\xe3\xff\x7e\x0\x6c\xfe\xfe\x7c\x38\x10\x0\x10\x38\x7c\xfe\x7c\x38\x10\x0\x10\x38\x54\xfe\x54\x10\x38\x0\x10\x38\x7c\xfe\xd6\x10\x7c\x0\x0\x0\x18\x3c\x3c\x18\x0\x0" "\xff\xff\xe7\xc3\xc3\xe7\xff\xff\x0\x3c\x66\x42\x42\x66\x3c\x0\xff\xc3\x99\xbd\xbd\x99\xc3\xff\xe0\xc0\xae\x19\x11\x13\xe\x0\x38\x4c\x46\x46\x3c\x18\x7e\x18\xfc\xcc\xfc\xc\xc\xe\xf\x7\xfe\xc6\xfe\xc6\xc6\xe6\x67\x3\x99\x5a\x3c\xe7\xe7\x3c\x5a\x99" "\x1\x7\x1f\x7f\x1f\x7\x1\x0\x40\x70\x7c\x7f\x7c\x70\x40\x0\x18\x3c\x7e\x18\x18\x7e\x3c\x18\x66\x66\x66\x66\x66\x0\x66\x0\xfe\xdb\xdb\xde\xd8\xd8\xd8\x0\x7c\xc6\x1c\x36\x36\x1c\x61\x3f\x0\x0\x0\x0\x7e\x7e\x7e\x0\x18\x3c\x7e\x18\x7e\x3c\x18\xff" "\x18\x3c\x7e\x18\x18\x18\x18\x0\x18\x18\x18\x18\x7e\x3c\x18\x0\x0\x18\x30\x7f\x30\x18\x0\x0\x0\xc\x6\x7f\x6\xc\x0\x0\x0\x0\x3\x3\x3\x7f\x0\x0\x0\x24\x66\xff\x66\x24\x0\x0\x0\x18\x3c\x7e\xff\xff\x0\x0\x0\xff\xff\x7e\x3c\x18\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x30\x38\x38\x18\x18\x0\xc\x0\x6c\x36\x36\x0\x0\x0\x0\x0\x0\x6c\x6c\xff\x66\xff\x36\x36\x0\x10\x78\x16\x3c\x48\x3e\x8\x0\x6e\x35\x1a\x2c\x56\x3b\x0\x30\x0\x70\xc\x6\x3c\x0\x18\xc\xc\x6\x0\x0\x0\x0\x0" "\x70\x1c\x6\x6\x6\xc\x18\x0\x18\x30\x60\x60\x60\x38\xe\x0\x0\x10\x92\x7c\x38\x6c\x82\x0\x0\x0\x18\x18\x7e\x18\x18\x0\x0\x0\x0\x0\x20\x20\x30\x18\x0\x0\x0\x0\xff\x0\x0\x0\x0\x0\x0\x0\x0\x30\x38\x0\x60\x30\x18\xc\x6\x3\x1\x0" "\x30\x6c\x66\x63\x63\x63\x3e\x0\x30\x38\x30\x30\x18\x18\x3c\x0\x30\x6c\x66\x30\x18\x4c\x3e\x0\x30\x6c\x66\x30\x60\x66\x3c\x0\x60\x68\x6c\x66\x3e\x30\x30\x0\x70\xc\x6\x3e\x40\x62\x3c\x0\x70\x18\xc\x36\x4e\x46\x3c\x0\x70\x6e\x60\x30\x18\x18\xc\x0" "\x70\x58\x4c\x38\x44\x66\x3c\x0\x30\x4c\x66\x3c\x30\x18\xc\x0\x0\x0\x30\x30\x0\x18\x18\x0\x0\x0\x30\x30\x0\x18\x18\xc\x70\x1c\x6\x3\x6\xc\x18\x0\x0\x0\x0\xfc\x0\x7e\x0\x0\x18\x30\x60\xc0\x60\x38\xe\x0\x38\x4c\x66\x30\x30\x0\x18\x0" "\x78\x84\x9a\xa5\x79\x1\x7e\x0\x60\x78\x64\x66\x7f\x63\x63\x0\x30\x6c\x66\x37\x3b\x63\x3f\x0\x30\x6c\x66\x3\x3\x3\x7e\x0\x30\x6c\xc6\xc3\xc3\x63\x3f\x0\x30\x6c\x6\x3f\x3\x43\x3f\x0\x60\xd8\xc\x3f\x6\x6\x6\x0\x30\x6c\x6\x3\x73\x43\x3e\x0" "\x64\x64\x66\x3f\x33\x33\x33\x0\x1c\x18\x18\x1c\xc\xc\xc\x0\x60\x60\x60\x32\x33\x33\x1f\x0\x4c\x66\x36\x1f\x33\x63\x63\x0\x10\xc\x6\x3\x3\x3\x7f\x0\x44\x6e\x6e\x7a\x6b\x6b\x63\x0\x44\x6e\x6e\x6a\x7b\x73\x63\x0\x30\x6c\x66\x63\x63\x77\x3e\x0" "\x30\x6c\x66\x63\x3f\x3\x3\x0\x30\x6c\x66\x63\x63\x3b\x6e\x0\x30\x6c\x66\x63\x3f\x63\x63\x0\x30\x6c\x6\x7\x7e\x40\x3e\x0\x70\x1e\x18\x18\xc\xc\xe\x0\x68\x6c\x66\x63\x63\x63\x7e\x0\x68\x6c\x66\x63\x63\x36\x1c\x0\x68\x6c\x66\x63\x6b\x6b\x3e\x0" "\x80\xc3\x66\x1c\x38\xe6\xc3\x0\x6c\x66\x63\x33\x1e\xc\xc\x0\x7c\x4e\x63\x38\xc\x46\x3f\x0\x38\xc\xc\x6\x6\x6\x1e\x0\x4\xc\xc\x18\x30\x60\xc0\x0\x1c\x30\x30\x30\x18\x18\x1e\x0\x18\x2c\x6e\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xff" "\x18\xc\xc\x0\x0\x0\x0\x0\x0\x0\x70\x4c\x46\x66\x5c\x0\xc\x6\x36\x4e\x46\x26\x1c\x0\x0\x0\x70\xc\x6\x46\x3c\x0\x60\x60\x78\x64\x46\x46\x3c\x0\x0\x0\x70\x4c\x3e\x6\x3c\x0\x30\x28\xc\x6\x1f\x6\x6\x6\x0\x0\x70\x4c\x66\x7c\x60\x3c" "\x18\xc\x4\x36\x6e\x66\x66\x0\x0\x18\x0\x18\xc\xc\xc\x0\x0\x18\x0\x18\xc\xc\xc\x7\x8\xc\x64\x36\x2e\x66\x66\x0\x18\x18\x18\x18\xc\xc\xc\x0\x0\x0\x1a\x3e\x6b\x6b\x63\x0\x0\x0\x34\x7c\x66\x66\x66\x0\x0\x0\x30\x6c\x66\x66\x3c\x0" "\x0\x0\x34\x4c\x44\x3e\x6\x6\x0\x0\x58\x24\x26\x3e\x60\x60\x0\x0\x66\x1c\xe\x6\x6\x0\x0\x0\x70\xe\x3c\x60\x3e\x0\x30\x30\x18\x78\x1e\x18\xc\xc\x0\x0\x68\x6c\x66\x36\x6c\x0\x0\x0\x68\x6c\x66\x34\x18\x0\x0\x0\x64\x66\x63\x6b\x36\x0" "\x0\xc0\x63\x34\x18\x2c\xc6\x3\x0\x0\x68\x6c\x66\x3e\x30\x1e\x0\x0\x78\x44\x30\xc\x7e\x0\x20\x30\x18\xc\xc\x18\x10\x0\x30\x30\x30\x0\x18\x18\x18\x0\x8\x18\x30\x30\x18\xc\x4\x0\xff\x0\x0\x0\x0\x0\x0\x0\x0\x0\x8\x1c\x36\x7f\x0\x0" "\xff\xf\x3\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\xe0\xc0\xc0\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\x1\x80\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x3\x3\x7\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\xc0\xf0\xff" "\x7\x0\x0\x0\x0\x0\x0\x0\x80\x80\x80\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x1\x1\x1\x0\x0\x0\x0\x0\x0\x0\xe0\x1\x3\x7\xf\x1f\x3f\x7f\xff\xff\xfe\xfc\xf8\xf0\xe0\xc0\x80\xff\xff\x3f\xf\x7\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0" "\xff\xff\xf8\xf0\xe0\xe0\xc0\xc0\x3\x3\x3\x3\x3\x3\x3\x3\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x7\x7\xf\x1f\xff\xff\x0\x0\x0\x0\x0\x0\xff\xff\xc0\xc0\xc0\xe0\xf0\xfc\xff\xff\x3\x1\x0\x0\x0\x0\x0\x0\xc0\x80\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x1\x3\x0\x0\x0\x0\x0\x0\x80\xc0\x0\x0\x0\xff\xff\x0\x0\x0\x0\x0\x1c\x3f\x7e\x3f\x1c\x0\x0\x0\x18\x7e\xff\x7e\x18\x0\x0\x0\x38\xfc\x7e\xfc\x38\x0\x0\x0\xe0\x78\x3c\x78\xe0\x0\x0\x0\xc0\x70\x38\x70\xc0\x0" "\x0\x0\x0\xc0\x70\xc0\x0\x0\x0\x0\x0\x80\x40\x80\x0\x0\x0\x0\x80\x0\x0\x0\x80\x0\x0\x0\x1\x0\x0\x0\x1\x0\x0\x0\x0\x1\x2\x1\x0\x0\x0\x0\x0\x3\xe\x3\x0\x0\x0\x0\x3\x6\x1c\x6\x3\x0\x0\x0\x7\x1e\x3c\x1e\x7\x0" "\x18\x18\x18\x18\x18\x18\x18\x18\xff\xff\x0\x18\x3c\x7e\xff\x0\xff\xff\x0\x0\x0\x0\x18\x18\xff\xff\x0\x18\x3c\x7e\xff\x18\xff\xff\x0\x42\x66\x5a\x42\x42\x0\x0\x0\x18\x18\x0\x0\x0\x0\x1\x0\x3\x3\x0\x1\x0\x0\xd\x0\x1f\x1f\x0\xd\x0" "\x0\x6d\x0\xff\xff\x0\x6d\x0\x0\x3\x0\x7\x7\x0\x3\x0\x0\x1b\x0\x3f\x3f\x0\x1b\x0\x0\xdb\x0\xff\xff\x0\xdb\x0\x0\x0\x0\x1\x1\x0\x0\x0\x0\x6\x0\xf\xf\x0\x6\x0\x0\xb6\x0\xff\xff\x0\xb6\x0\x0\x0\x0\x0\x7f\x6c\x6c\x6c" "\x0\x0\x1f\x18\x1f\x18\x18\x18\x6c\x6c\x6f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x0\x0\x7f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6f\x60\x7f\x0\x0\x0\x6c\x6c\x6c\x6c\x7f\x0\x0\x0\x18\x18\x1f\x18\x1f\x0\x0\x0\x0\x0\x0\x0\x1f\x18\x18\x18" "\x18\x18\x18\x18\xf8\x0\x0\x0\x18\x18\x18\x18\xff\x0\x0\x0\x0\x0\x0\x0\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\x18\x18\x0\x0\x0\x0\xff\x0\x0\x0\x18\x18\x18\x18\xff\x18\x18\x18\x18\x18\xf8\x18\xf8\x18\x18\x18\x6c\x6c\x6c\x6c\xec\x6c\x6c\x6c" "\x6c\x6c\xec\xc\xfc\x0\x0\x0\x0\x0\xfc\xc\xec\x6c\x6c\x6c\x6c\x6c\xef\x0\xff\x0\x0\x0\x0\x0\xff\x0\xef\x6c\x6c\x6c\x6c\x6c\xec\xc\xec\x6c\x6c\x6c\x0\x0\xff\x0\xff\x0\x0\x0\x6c\x6c\xef\x0\xef\x6c\x6c\x6c\x18\x18\xff\x0\xff\x0\x0\x0" "\x6c\x6c\x6c\x6c\xff\x0\x0\x0\x0\x0\xff\x0\xff\x18\x18\x18\x0\x0\x0\x0\xff\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xfc\x0\x0\x0\x18\x18\xf8\x18\xf8\x0\x0\x0\x0\x0\xf8\x18\xf8\x18\x18\x18\x0\x0\x0\x0\xfc\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xff\x6c\x6c\x6c" "\x18\x18\xff\x18\xff\x18\x18\x18\x18\x18\x18\x18\x1f\x0\x0\x0\x0\x0\x0\x0\xf8\x18\x18\x18\xff\xff\xff\xff\xff\xff\xff\xff\x0\x0\x0\x0\xff\xff\xff\xff\xf\xf\xf\xf\xf\xf\xf\xf\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xff\xff\xff\xff\x0\x0\x0\x0" "\x0\x0\x6e\x3b\x13\x3b\x6e\x0\x0\x1e\x33\x1f\x33\x1f\x3\x3\x0\x3f\x33\x3\x3\x3\x3\x0\x0\x0\x7f\x36\x36\x36\x36\x0\x3f\x33\x6\xc\x6\x33\x3f\x0\x0\x0\x7e\x1b\x1b\x1b\xe\x0\x0\x66\x66\x66\x66\x3e\x6\x3\x0\x6e\x3b\x18\x18\x18\x18\x0" "\x3f\xc\x1e\x33\x33\x1e\xc\x3f\x1c\x36\x63\x7f\x63\x36\x1c\x0\x1c\x36\x63\x63\x36\x36\x77\x0\x38\xc\x18\x3e\x33\x33\x1e\x0\x0\x0\x7e\xdb\xdb\x7e\x0\x0\x60\x30\x7e\xdb\xdb\x7e\x6\x3\x1c\x6\x3\x1f\x3\x6\x1c\x0\x0\x0\x0\x0\x0\xdb\xdb\x0" "\x0\x7e\x0\x7e\x0\x7e\x0\x0\x0\xf8\x8\x8\x8\x8\xf8\x0\x0\xff\x0\x0\x0\x0\xff\x0\x0\x1f\x10\x10\x10\x10\x1f\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x0\x2\x1\x0\x0\x0\x20\x30\x28\x24\x22\xa1\x60\x20\x0\x0\x0\x1\x2\x0\x0\x0" "\x20\x60\xa1\x22\x24\x28\x30\x20\x0\x0\x0\x40\x40\x40\x40\x7f\xff\x81\x81\x81\x81\x80\x80\x80\x0\x0\x0\x20\x20\x11\x11\xe\x38\x44\x44\x82\x82\x0\x0\x0\x0\x0\xfe\x7c\x38\x10\x0\x0\x0\x0\x10\x38\x7c\xfe\x0\x0\x80\xc1\x63\x36\x1c\x8\x0\x0" ), // Font no. 11 FontEntry("GRAFPAPR", 8, 8, "\x0\x0\x0\x0\x0\x0\x0\x0\x7e\x81\xa5\x81\xbd\x99\x81\x7e\x7e\xff\xdb\xff\xff\xc3\xe7\x7e\x0\x77\x7f\x7f\x3e\x1c\x8\x0\x8\x1c\x3e\x7f\x3e\x1c\x8\x0\x18\x3c\x18\xff\xff\x52\x18\x0\x8\x1c\x3e\x7f\x7f\x49\x1c\x0\x0\x0\x18\x3c\x18\x0\x0\x0" "\xff\xff\xe7\xc3\xe7\xff\xff\xff\x0\x3c\x42\x81\x81\x42\x3c\x0\xff\xc3\xbd\x7e\x7e\xbd\xc3\xff\xf8\xe0\xb0\x3e\x63\x63\x3e\x0\x0\x7e\xc3\xc3\x7e\x18\x7e\x18\x20\x60\xe0\x20\x20\x3f\x1f\x0\x30\x50\xb0\xd0\x9f\x8f\xf0\xf0\x81\xc2\xbc\xe4\xa4\xfc\xea\xff" "\x0\x0\x6\x1e\x7e\x1e\x6\x0\x0\x0\x60\x78\x7e\x78\x60\x0\x18\x7e\x18\x18\x18\x18\x7e\x18\x66\x66\x66\x66\x66\x0\x66\x0\xff\x6d\x6e\x6c\x6c\x6c\x6c\x0\x7e\x81\x3e\x42\x42\x7c\x81\x7e\x0\x0\x0\x7e\x7e\x0\x0\x0\x18\x7e\x18\x18\x7e\x18\x0\xff" "\x18\x7e\x18\x18\x18\x18\x18\x0\x18\x18\x18\x18\x18\x7e\x18\x0\x0\x20\x60\xff\x60\x20\x0\x0\x0\x4\x6\xff\x6\x4\x0\x0\x0\x0\x0\x3\x3\x3\xff\x0\x0\x24\x66\xff\x66\x24\x0\x0\x0\x0\x8\x1c\x3e\x7f\x0\x0\x0\x0\x0\x7f\x3e\x1c\x8\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\xc\xc\xc\xc\xc\x0\xc\x0\x66\x66\x0\x0\x0\x0\x0\x0\xa\x1f\xa\x1f\xa\x0\x0\x0\x3e\x4b\xb\x3e\x68\x6b\x3e\x8\xc7\x65\x37\x18\xec\xa6\xe3\x0\x1c\x32\x1c\xa2\x63\x73\x5e\x80\x30\x30\x18\x0\x0\x0\x0\x0" "\x8\x6\x3\x3\x3\x6\x8\x0\x8\x30\x60\x60\x60\x30\x8\x0\x0\x2a\x1c\x7f\x1c\x2a\x0\x0\x0\x18\x18\x7e\x18\x18\x0\x0\x0\x0\x0\x0\x0\x0\x18\xe\x0\x0\x0\x7e\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x30\x0\x80\xc0\x60\x30\x18\xc\x6\x3" "\x0\x1c\x22\x22\x22\x22\x1c\x0\x18\x1c\x1e\x18\x18\x18\x3e\x0\x3e\x63\x60\x30\xc\x6\x7f\x0\x3e\x63\x60\x3c\x60\x63\x3e\x0\x70\x78\x6c\x66\x7f\x60\x60\x0\x7f\x3\x3\x3f\x60\x60\x3f\x0\x3e\x63\x3\x3f\x63\x63\x3e\x0\x7f\x60\x30\x18\xc\xc\xc\x0" "\x3e\x63\x63\x3e\x63\x63\x3e\x0\x3e\x63\x63\x7e\x60\x63\x3e\x0\x0\xc\x0\x0\x0\xc\x0\x0\x0\xc\x0\x0\x0\xc\x4\x0\x0\x38\xc\x6\xc\x38\x0\x0\x0\x0\x7e\x0\x7e\x0\x0\x0\x0\xe\x18\x30\x18\xe\x0\x0\x3e\x63\x30\x18\xc\x0\xc\x0" "\x3e\x41\x5d\x55\x7d\x1\x3e\x0\x0\x1c\x26\x43\x7f\x43\x43\x0\x0\x3f\x63\x3f\x63\x63\x3f\x0\x0\x3e\x63\x3\x3\x63\x3e\x0\x0\x3f\x63\x63\x63\x63\x3f\x0\x0\x7f\x3\x1f\x3\x3\x7f\x0\x0\x7f\x43\x1f\x13\x3\x3\x0\x0\x3e\x63\x3\x7b\x63\x5e\x0" "\x63\x63\x63\x7f\x63\x63\x63\x0\x7e\x18\x18\x18\x18\x18\x7e\x0\x78\x30\x30\x30\x30\x33\x1e\x0\x63\x33\x1b\xf\x1b\x33\x63\x0\xf\x6\x6\x6\x6\x46\x7f\x0\x63\x77\x7f\x6b\x6b\x63\x63\x0\x63\x67\x6f\x7b\x73\x63\x63\x0\x3e\x63\x63\x63\x63\x63\x3e\x0" "\x3f\x66\x66\x3e\x6\x6\xf\x0\x3e\x63\x63\x63\x7b\x73\x3e\x60\x3f\x66\x66\x3e\x66\x66\x67\xc0\x3e\x43\x3\x3e\x60\x63\x3e\x0\x7e\x18\x18\x18\x18\x18\x18\x0\x63\x63\x63\x63\x63\x63\x3e\x0\x63\x63\x63\x63\x63\x36\x1c\x0\x63\x63\x6b\x6b\x6b\x77\x63\x0" "\x63\x36\x1c\x8\x1c\x36\x63\x0\x41\x63\x36\x1c\x8\x8\x1c\x0\x7f\x61\x30\x18\xc\x46\x7f\x0\x38\x18\x18\x18\x18\x18\x18\x38\x3\x6\xc\x18\x30\x60\xc0\x80\xe\xc\xc\xc\xc\xc\xc\xe\x8\x1c\x36\x63\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xff" "\xc\xc\x18\x0\x0\x0\x0\x0\x0\x0\x3e\x60\x7e\x63\x7e\x0\x3\x3\x3f\x63\x63\x63\x3f\x0\x0\x0\x3e\x63\x3\x63\x3e\x0\x60\x60\x7e\x63\x63\x63\x7e\x0\x0\x0\x3e\x63\x7f\x3\x3e\x0\x3c\x66\x6\x3f\x6\x6\x6\x0\x0\x0\xbe\x63\x63\x7e\x60\x3e" "\x3\x3\x3f\x63\x63\x63\x63\x0\x18\x0\x1c\x18\x18\x18\x3c\x0\x30\x0\x38\x30\x30\x30\x33\x1e\x3\x3\x63\x1b\xf\x1b\x63\x0\x1c\x18\x18\x18\x18\x18\x38\x0\x0\x0\x63\x7f\x6b\x6b\x63\x0\x0\x0\x3f\x63\x63\x63\x63\x0\x0\x0\x3e\x63\x63\x63\x3e\x0" "\x0\x0\x3f\x63\x63\x3f\x3\x3\x0\x0\x7e\x63\x63\x7e\x60\xe0\x0\x0\x7b\x6e\x66\x6\x6\x0\x0\x0\x7e\x3\x3e\x60\x3f\x0\x18\x18\x7e\x18\x18\x18\x78\x0\x0\x0\x63\x63\x63\x63\x7e\x0\x0\x0\x63\x63\x63\x36\x1c\x0\x0\x0\x63\x6b\x6b\x77\x63\x0" "\x0\x0\x63\x36\x1c\x36\x63\x0\x0\x0\x63\x63\x63\x7e\x60\x3f\x0\x0\x7f\x30\x8\x46\x7f\x0\x70\x18\x18\xe\x18\x18\x70\x0\x18\x18\x18\x0\x18\x18\x18\x0\x7\xc\xc\x38\xc\xc\x7\x0\xe\xd9\x70\x0\x0\x0\x0\x0\x0\x0\x8\x14\x22\x7f\x0\x0" "\xff\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\x1\x80\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\xff" "\x1\x0\x0\x0\x0\x0\x0\x0\x80\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x1\x0\x0\x0\x0\x0\x0\x0\x80\x1\x3\x7\xf\x1f\x3f\x7f\xff\xff\xfe\xfc\xf8\xf0\xe0\xc0\x80\xff\xff\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0" "\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\x3\x3\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\xff\xff\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\x0\x55\x0\x0\x0\x0\x0\x3f\x3f\x3f\x3f\x3f\x3f\x0\x0\x7e\x7e\x7e\x7e\x7e\x7e\x0\x0\xfc\xfc\xfc\xfc\xfc\xfc\x0\x0\xf8\xf8\xf8\xf8\xf8\xf8\x0\x0\xf0\xf0\xf0\xf0\xf0\xf0\x0" "\x0\xe0\xe0\xe0\xe0\xe0\xe0\x0\x0\xc0\xc0\xc0\xc0\xc0\xc0\x0\x0\x80\x80\x80\x80\x80\x80\x0\x0\x1\x1\x1\x1\x1\x1\x0\x0\x3\x3\x3\x3\x3\x3\x0\x0\x7\x7\x7\x7\x7\x7\x0\x0\xf\xf\xf\xf\xf\xf\x0\x0\x1f\x1f\x1f\x1f\x1f\x1f\x0" "\x55\x6b\x55\x6b\x55\x6b\x55\x6b\xff\xff\x0\x0\x0\x8\x1c\x3e\xff\xff\x0\x0\x0\x0\x0\x7f\xff\xff\x0\x0\x8\x1c\x3e\x7f\xff\xff\x0\xc3\xe7\xff\xdb\xc3\xaa\xd5\xaa\xd5\xaa\xd5\xaa\xff\x0\x3\x3\x3\x3\x3\x3\x3\x0\x1b\x1b\x1b\x1b\x1b\x1b\x1b" "\x0\xdb\xdb\xdb\xdb\xdb\xdb\xdb\x0\x6\x6\x6\x6\x6\x6\x6\x0\x36\x36\x36\x36\x36\x36\x36\x0\xb6\xb6\xb6\xb6\xb6\xb6\xb6\x0\x1\x1\x1\x1\x1\x1\x1\x0\xd\xd\xd\xd\xd\xd\xd\x0\x6d\x6d\x6d\x6d\x6d\x6d\x6d\x0\x0\x18\x3c\x3c\x18\x0\x0" "\x0\x0\x0\x1f\x18\x1f\x18\x18\x6c\x6c\x6c\x6f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x0\x0\x0\x7f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6f\x60\x7f\x0\x0\x6c\x6c\x6c\x7f\x0\x0\x0\x0\x18\x18\x18\x1f\x18\x1f\x0\x0\x0\x0\x0\x1f\x18\x18\x18\x18" "\x18\x18\x18\xf8\x0\x0\x0\x0\x18\x18\x18\xff\x0\x0\x0\x0\x0\x0\x0\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\x18\x18\x18\x0\x0\x0\x0\xff\x0\x0\x0\x18\x18\x18\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\xf8\x18\x18\x6c\x6c\x6c\xec\x6c\x6c\x6c\x6c" "\x6c\x6c\x6c\xec\xc\xfc\x0\x0\x0\x0\x0\xfc\xc\xec\x6c\x6c\x6c\x6c\x6c\xef\x0\xff\x0\x0\x0\x0\x0\xff\x0\xef\x6c\x6c\x6c\x6c\x6c\xec\xc\xec\x6c\x6c\x0\x0\x0\xff\x0\xff\x0\x0\x6c\x6c\x6c\xef\x0\xef\x6c\x6c\x18\x18\x18\xff\x0\xff\x0\x0" "\x6c\x6c\x6c\xff\x0\x0\x0\x0\x0\x0\x0\xff\x0\xff\x18\x18\x0\x0\x0\xff\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xfc\x0\x0\x0\x0\x18\x18\x18\xf8\x18\xf8\x0\x0\x0\x0\x0\xf8\x18\xf8\x18\x18\x0\x0\x0\xfc\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xff\x6c\x6c\x6c\x6c" "\x18\x18\x18\xff\x18\xff\x18\x18\x18\x18\x18\x1f\x0\x0\x0\x0\x0\x0\x0\xf8\x18\x18\x18\x18\xff\xff\xff\xff\xff\xff\xff\xff\x0\x0\x0\x0\xff\xff\xff\xff\xf\xf\xf\xf\xf\xf\xf\xf\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xff\xff\xff\xff\x0\x0\x0\x0" "\x0\x0\xee\x19\x19\xee\x0\x0\x38\x6c\x66\x3f\x63\x63\x3f\x3\x7f\x46\x6\x6\x6\x6\x6\x0\x0\x0\xff\x66\x66\x66\x66\x0\x7f\x46\xc\x18\xc\x46\x7f\x0\x0\x0\xfc\x66\x63\x33\x1e\x0\x0\x0\xcc\xcc\xcc\x7c\xc\xf\x0\x0\xff\x18\x18\x18\x18\x0" "\x3c\x18\x3c\x66\x66\x3c\x18\x3c\x0\x3e\x63\x7f\x63\x3e\x0\x0\x0\x7e\xc3\xc3\xc3\x66\xe7\x0\x78\x98\x3c\x66\x63\x33\x1e\x0\x0\x0\x66\x99\x99\x66\x0\x0\x0\xc0\x3e\x73\x67\x3e\x3\x0\x0\x7c\x3\x7f\x3\x7c\x0\x0\x0\x0\x0\x0\x0\xdb\xdb\x0" "\x0\x7e\x0\x7e\x0\x7e\x0\x0\x0\xf8\x8\x8\x8\x8\xf8\x0\x0\xff\x0\x0\x0\x0\xff\x0\x0\x1f\x10\x10\x10\x10\x1f\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x0\x2\x1\x0\x0\x0\x20\x30\x28\x24\x22\xa1\x60\x20\x0\x0\x0\x1\x2\x0\x0\x0" "\x20\x60\xa1\x22\x24\x28\x30\x20\x0\x0\x0\x40\x40\x40\x40\x7f\xff\x81\x81\x81\x81\x80\x80\x80\x0\x0\x0\x20\x20\x11\x11\xe\x38\x44\x44\x82\x82\x0\x0\x0\x0\x0\xfe\x7c\x38\x10\x0\x0\x0\x0\x10\x38\x7c\xfe\x0\x0\x80\xc1\x63\x36\x1c\x8\x0\x0" ), // Font no. 12 FontEntry("GTHS-BUG", 8, 8, "\x0\x0\x0\x0\x0\x0\x0\x0\x7e\x81\xa5\x81\xbd\x99\x81\x7e\x7e\xff\xdb\xff\xc3\xe7\xff\x7e\x36\x7f\x7f\x7f\x3e\x1c\x8\x0\x8\x1c\x3e\x7f\x3e\x1c\x8\x0\x1c\x3e\x1c\x7f\x7f\x3e\x1c\x3e\x8\x8\x1c\x3e\x7f\x3e\x1c\x3e\x0\x0\x18\x3c\x3c\x18\x0\x0" "\xff\xff\xe7\xc3\xc3\xe7\xff\xff\x0\x3c\x66\x42\x42\x66\x3c\x0\xff\xc3\x99\xbd\xbd\x99\xc3\xff\xf0\xe0\xf0\xbe\x33\x33\x33\x1e\x3c\x66\x66\x66\x3c\x18\x7e\x18\xfc\xcc\xfc\xc\xc\xe\xf\x7\xfe\xc6\xfe\xc6\xc6\xe6\x67\x3\x0\x0\x0\x3c\x0\x3c\x0\x0" "\x1\x7\x1f\x7f\x1f\x7\x1\x0\x40\x70\x7c\x7f\x7c\x70\x40\x0\x18\x3c\x7e\x18\x18\x7e\x3c\x18\x66\x66\x66\x66\x66\x0\x66\x0\x0\x7c\x56\x56\x7c\x50\x50\x0\x3c\x66\x1c\x36\x36\x1c\x33\x1e\x0\x0\x0\x0\x7e\x7e\x7e\x0\x18\x3c\x7e\x18\x7e\x3c\x18\xff" "\x18\x3c\x7e\x18\x18\x18\x18\x0\x18\x18\x18\x18\x7e\x3c\x18\x0\x0\x18\x30\x7f\x30\x18\x0\x0\x0\xc\x6\x7f\x6\xc\x0\x0\x0\x0\x3\x3\x3\x7f\x0\x0\x0\x24\x66\xff\x66\x24\x0\x0\x0\x18\x3c\x66\xdb\xbd\x0\x0\x0\xbd\xdb\x66\x3c\x18\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x1c\x1c\x1c\x1c\x1c\x0\x1c\x0\x36\x36\x36\x0\x0\x0\x0\x0\x36\x36\x7f\x36\x7f\x36\x36\x0\xc\x3e\x3\x1e\x30\x1f\xc\x0\x0\x63\x33\x18\xc\x66\x63\x0\x1c\x36\x1c\x6e\x3b\x33\x6e\x0\x6\x6\x3\x0\x0\x0\x0\x0" "\x18\xc\x6\x6\x6\xc\x18\x0\x6\xc\x18\x18\x18\xc\x6\x0\x0\x66\x3c\xff\x3c\x66\x0\x0\x0\xc\xc\x3f\xc\xc\x0\x0\x0\x0\x0\x0\x0\x1c\x18\xc\x0\x0\x0\x3f\x0\x0\x0\x0\x0\x0\x0\x0\x0\x1c\x1c\x0\x60\x30\x18\xc\x6\x3\x1\x0" "\x3e\x63\x63\x6b\x63\x63\x3e\x0\x18\x1e\x18\x18\x18\x18\x7e\x0\x3e\x60\x60\x3e\x3\x3\x7f\x0\x3e\x60\x60\x3c\x60\x60\x3f\x0\x68\x6c\x66\x63\x7f\x60\x60\x0\x7f\x3\x1f\x30\x60\x60\x3f\x0\x3c\x6\x3\x3b\x63\x63\x3e\x0\x7f\x60\x30\x30\x18\x18\xc\x0" "\x7e\x63\x63\x3e\x63\x63\x3e\x0\x3e\x63\x63\x6e\x60\x30\x1e\x0\x0\x1c\x1c\x0\x0\x1c\x1c\x0\x0\x1c\x1c\x0\x0\x1c\x18\xc\x18\xc\x6\x3\x6\xc\x18\x0\x0\x0\x3f\x0\x0\x3f\x0\x0\x6\xc\x18\x30\x18\xc\x6\x0\x3f\x60\x30\x18\x18\x0\x18\x0" "\x3e\x63\x7b\x7b\x7b\x3\x1e\x0\x1e\x30\x63\x63\x7f\x63\x63\x40\x3f\x63\x63\x3b\x63\x33\x1f\x0\x7e\x3\x3\x3\x3\x6\x7c\x0\x3f\x63\x63\x63\x63\x33\x1f\x0\x3e\x63\x3\x3b\x3\x3\x7e\x0\x7c\x6\x6\x3f\x6\x6\x6\x0\x7e\x3\x3\x73\x63\x66\x7c\x40" "\x63\x63\x3\x7f\x63\x63\x63\x40\x3c\x0\x18\x18\x18\x18\x3c\x0\x78\x0\x60\x60\x60\x30\x1f\x0\x63\x33\x1b\xf\x33\x63\x63\x40\x3\x3\x3\x3\x3\x3\x7f\x0\x3f\x63\x6b\x6b\x6b\x6b\x63\x40\x1f\x30\x63\x63\x63\x63\x63\x40\x3e\x63\x63\x63\x63\x66\x3c\x0" "\x3f\x63\x63\x33\x1f\x3\x3\x0\x3e\x63\x63\x63\x6b\x2e\x18\x70\x3f\x63\x63\x33\x1f\x33\x63\x40\x7e\x3\x6\x3c\x60\x60\x3f\x0\x7e\x18\x18\x18\x18\x18\x18\x0\x63\x63\x63\x63\x63\x6\x7c\x0\x63\x63\x63\x63\x36\x1c\x8\x0\x6b\x6b\x6b\x6b\x6b\x63\x3f\x0" "\x43\x63\x36\x1c\x36\x63\x63\x40\x63\x63\x63\x66\x7c\x63\x3e\x0\x7f\x60\x30\x18\xc\x6\x7f\x0\x1e\x6\x6\x6\x6\x6\x1e\x0\x3\x6\xc\x18\x30\x60\x40\x0\x1e\x18\x18\x18\x18\x18\x1e\x0\x8\x1c\x36\x63\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xff" "\xc\xc\x18\x0\x0\x0\x0\x0\x0\x0\x7e\x63\x63\x63\x6e\x0\x3\x3\x1f\x33\x63\x63\x3b\x0\x0\x0\x7e\x63\x3\x6\x7c\x0\x60\x60\x7c\x66\x63\x63\x6e\x0\x0\x0\x7e\x63\x7f\x3\x7e\x0\x7c\x6\x6\x1f\x6\x6\x6\x0\x0\x0\x7e\x63\x63\x6e\x60\x3f" "\x3\x3\x1f\x33\x63\x63\x63\x0\x18\x0\x18\x18\x18\x18\x18\x0\x30\x0\x30\x30\x30\x30\x30\x1f\x3\x3\x7f\xf\x1b\x33\x63\x0\x10\x18\x18\x18\x18\x18\x18\x0\x0\x0\x3f\x6b\x6b\x6b\x63\x0\x0\x0\x3f\x63\x63\x63\x63\x0\x0\x0\x3e\x63\x63\x66\x3c\x0" "\x0\x0\x3b\x63\x63\x3f\x3\x3\x0\x0\x6e\x63\x63\x7e\x60\x60\x0\x0\x7b\xf\x7\x3\x3\x0\x0\x0\x7e\x3\x3e\x60\x3f\x0\x8\xc\x3f\xc\xc\xc\x38\x0\x0\x0\x63\x63\x63\x63\x6e\x0\x0\x0\x63\x63\x36\x1c\x8\x0\x0\x0\x63\x6b\x7f\x3e\x14\x0" "\x0\x0\x63\x36\x1c\x36\x63\x0\x0\x0\x63\x63\x63\x7e\x60\x3f\x0\x0\x7f\x30\x1c\x6\x7f\x0\x38\xc\xc\x7\xc\xc\x38\x0\x18\x18\x18\x0\x18\x18\x18\x0\x7\xc\xc\x38\xc\xc\x7\x0\x6e\x3b\x0\x0\x0\x0\x0\x0\x0\x8\x1c\x36\x63\x63\x7f\x0" "\xfe\x3\xf9\x5\x5\x5\x5\x5\xff\x0\xff\x0\x0\x0\x0\x0\x7f\xc0\x9f\xa0\xa0\xa0\xa0\xa0\x5\x5\x5\x5\x5\x5\x5\x5\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\x5\x5\x5\x5\x5\xf9\x3\xfe\x0\x0\x0\x0\x0\xff\x0\xff\xa0\xa0\xa0\xa0\xa0\x9f\xc0\x7f" "\x4\x6\x3\x0\x0\x0\x0\x0\x20\x60\xc0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x3\x6\x4\x0\x0\x0\x0\x0\xc0\x60\x20\x9\x12\x25\x4b\x97\x2f\x5e\xbc\x3d\x7a\xf4\xe9\xd2\xa4\x48\x90\xfc\xfe\x7\xf3\xb\xb\xb\xb\xff\xff\x0\xff\x0\x0\x0\x0" "\x3f\x7f\xe0\xcf\xd0\xd0\xd0\xd0\xb\xb\xb\xb\xb\xb\xb\xb\xd0\xd0\xd0\xd0\xd0\xd0\xd0\xd0\xb\xb\xb\xb\xf3\x7\xfe\xfc\x0\x0\x0\x0\xff\x0\xff\xff\xd0\xd0\xd0\xd0\xcf\xe0\x7f\x3f\xb\x9\xc\x7\x0\x0\x0\x0\xd0\x90\x30\xe0\x0\x0\x0\x0" "\x0\x0\x0\x0\x7\xc\x9\xb\x0\x0\x0\x0\xe0\x30\x90\xd0\x0\x0\x33\x66\x33\x0\x0\x0\x0\x0\xc\x16\x3e\x3f\x33\x0\x42\x18\xaa\x38\x3c\x7e\x32\x0\x0\x0\x30\x58\x7c\xfc\x30\x0\x0\x0\x0\x60\xb8\xf8\x30\x0\x0\x0\x0\xc0\x60\xf0\x30\x0" "\x0\x0\x0\x80\xc0\xe0\x20\x0\x0\x0\x0\x0\x80\xc0\x20\x0\x0\x0\x0\x0\x0\x80\x20\x0\x0\x0\x0\x0\x0\x1\x1\x0\x0\x0\x0\x0\x1\x3\x3\x0\x0\x0\x0\x1\x2\x7\x3\x0\x0\x0\x0\x3\x5\xf\x3\x0\x0\x0\x0\x6\x1b\x1f\x13\x0" "\x5a\x4a\x42\x52\x5a\x4a\x42\x52\xff\xff\x0\x18\x3c\x66\xc3\x81\xff\xff\x0\x0\x0\x0\x18\x3c\xff\xff\x0\x18\x3c\x66\xdb\xbd\xff\xff\x0\x22\x77\x7f\x6b\x22\x0\x0\x0\x18\x0\x0\x0\x0\x0\x7\x0\x4\x6\x0\x7\x0\x0\x1f\x0\xc\x6\x0\x1f\x0" "\x0\xff\x0\xcc\x66\x0\xff\x0\x0\x7\x0\x4\x6\x0\x7\x0\x0\x3f\x0\xc\x26\x0\x3f\x0\x0\xff\x0\xcc\x66\x0\xff\x0\x0\x1\x0\x0\x0\x0\x1\x0\x0\x1f\x0\xc\x6\x0\x1f\x0\x0\xff\x0\xcc\x66\x0\xff\x0\x0\x18\x3c\x66\x3c\x18\x0\x0" "\x0\x24\x7e\x3c\x7e\x24\x0\x0\x6c\x6c\x6f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x0\x0\x7f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6f\x60\x7f\x0\x0\x0\x6c\x6c\x6c\x6c\x7f\x0\x0\x0\x18\x18\x1f\x18\x1f\x0\x0\x0\x0\x0\x0\x0\x1f\x18\x18\x18" "\x18\x18\x18\x18\xf8\x0\x0\x0\x18\x18\x18\x18\xff\x0\x0\x0\x0\x0\x0\x0\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\x18\x18\x0\x0\x0\x0\xff\x0\x0\x0\x18\x18\x18\x18\xff\x18\x18\x18\x18\x18\xf8\x18\xf8\x18\x18\x18\x6c\x6c\x6c\x6c\xec\x6c\x6c\x6c" "\x6c\x6c\xec\xc\xfc\x0\x0\x0\x0\x0\xfc\xc\xec\x6c\x6c\x6c\x6c\x6c\xef\x0\xff\x0\x0\x0\x0\x0\xff\x0\xef\x6c\x6c\x6c\x6c\x6c\xec\xc\xec\x6c\x6c\x6c\x0\x0\xff\x0\xff\x0\x0\x0\x6c\x6c\xef\x0\xef\x6c\x6c\x6c\x18\x18\xff\x0\xff\x0\x0\x0" "\x6c\x6c\x6c\x6c\xff\x0\x0\x0\x0\x0\xff\x0\xff\x18\x18\x18\x0\x0\x0\x0\xff\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xfc\x0\x0\x0\x18\x18\xf8\x18\xf8\x0\x0\x0\x0\x0\xf8\x18\xf8\x18\x18\x18\x0\x0\x0\x0\xfc\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xff\x6c\x6c\x6c" "\x18\x18\xff\x18\xff\x18\x18\x18\x18\x18\x18\x18\x1f\x0\x0\x0\x0\x0\x0\x0\xf8\x18\x18\x18\xff\xff\xff\xff\xff\xff\xff\xff\x0\x0\x0\x0\xff\xff\xff\xff\xf\xf\xf\xf\xf\xf\xf\xf\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xff\xff\xff\xff\x0\x0\x0\x0" "\x0\x0\x6e\x3b\x13\x3b\x6e\x0\x0\x1e\x33\x1f\x33\x1f\x3\x3\x0\x3f\x33\x3\x3\x3\x3\x0\x0\x7f\x36\x36\x36\x36\x36\x0\x3f\x33\x6\xc\x6\x33\x3f\x0\x0\x0\x7e\x1b\x1b\x1b\xe\x0\x0\x66\x66\x66\x66\x3e\x6\x3\x0\x6e\x3b\x18\x18\x18\x18\x0" "\x3f\xc\x1e\x33\x33\x1e\xc\x3f\x1c\x36\x63\x7f\x63\x36\x1c\x0\x1c\x36\x63\x63\x36\x36\x77\x0\x38\xc\x18\x3e\x33\x33\x1e\x0\x0\x0\x7e\xdb\xdb\x7e\x0\x0\x60\x30\x7e\xdb\xdb\x7e\x6\x3\x1c\x6\x3\x1f\x3\x6\x1c\x0\x0\x0\x0\x0\x0\xdb\xdb\x0" "\x0\x7e\x0\x7e\x0\x7e\x0\x0\x0\xf8\x8\x8\x8\x8\xf8\x0\x0\xff\x0\x0\x0\x0\xff\x0\x0\x1f\x10\x10\x10\x10\x1f\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x0\x2\x1\x0\x0\x0\x20\x30\x28\x24\x22\xa1\x60\x20\x0\x0\x0\x1\x2\x0\x0\x0" "\x20\x60\xa1\x22\x24\x28\x30\x20\x0\x0\x0\x40\x40\x40\x40\x7f\xff\x81\x81\x81\x81\x80\x80\x80\x0\x0\x0\x20\x20\x11\x11\xe\x38\x44\x44\x82\x82\x0\x0\x0\x0\x0\xfe\x7c\x38\x10\x0\x0\x0\x0\x10\x38\x7c\xfe\x0\x0\x80\xc1\x63\x36\x1c\x8\x0\x0" ), // Font no. 13 FontEntry("IDC-Harmonica", 12, 12, "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x70\x0\x7\x70\x0\x7\x70\x0\x7\x70\x0\x0\x0\x0\x7\x70\x0\x0\xdc\xc1\x1d\xdc\xc1\xc\x44\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xc0\x39\x9c\xe3\x7f\xfe\xc7\x39\x9c" "\xe3\x7f\xfe\xc7\x39\x9c\x3\x0\x70\x0\x7\xfe\x77\x7\x77\xe0\x3f\x70\x7\x77\xff\x3\x7\x70\x0\x0\x0\xe0\xe0\x1b\xb7\x39\xce\x1\xe\x70\x80\x73\x9c\xed\xd8\x7\x7\x0\xfc\xe0\x1c\xce\xe1\xe\x7c\xe0\x73\xf7\x73\x1e\xe7\x71\x3f\x3e\x7\x0\xe0\x0" "\xe\xe0\x0\x7\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xe0\x0\x7\x38\x80\x3\x38\x80\x3\x38\x80\x3\x38\x0\x7\xe0\x0\x0\x38\x0\x7\xe0\x0\xe\xe0\x0\xe\xe0\x0\xe\xe0\x0\x7\x38\x0\x0\x8c\xe1\x3d\xff\xf7\x7f\xff\xf7\x7f\xfe\xc3\x1f" "\xf8\x0\x7\x20\x0\x0\x0\x0\x0\x70\x0\x7\x70\xe0\x3f\xfe\x3\x7\x70\x0\x7\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x70\x0\x7\x70\x80\x3\x0\x0\x0\x0\x0\x0\x0\xe0\x3f\xfe\x3\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x70\x0\x7\x70\x0\x0\x0\xc\xe0\x0\x7\x38\xc0\x1\xe\x70\x80\x3\x1c\xe0\x0\x7\x0\x0\x0\x0\x0\xfe\x71\x3c\xe7\x77\x77\x3f\xf7\x71\xf\x77\x70\xfe\x3\x0\x70\x0\x7\x78\x0\x7\x70\x0\x7\x70\x0\x7\x70\x0" "\x7\xfe\x3\x0\xfc\x3\x70\x0\xc7\x3f\x6\x70\x0\x7\x70\x0\x7\x70\x0\xff\x7\x0\xfe\x7\x70\x0\x7\x3f\x0\x7\x70\x0\x7\x70\x7\x77\x70\xfe\x3\x0\x38\x86\x73\x1c\xe7\x70\x7\x77\x70\x7\xf7\x7f\x0\x7\x70\x0\x7\x0\xff\x77\x0\x7\x70\x3f" "\xf\x7\x70\x0\x7\x70\x7\x77\x70\xfe\x3\x0\xfe\x73\x0\x7\x70\x3f\xf\x77\x70\x7\x77\x70\x7\x77\x70\xfe\x3\x0\xff\x7\x70\x0\x7\x38\xc0\x1\xe\x70\x0\x7\x70\x0\x7\x70\x0\x0\xfe\x73\x70\x7\xe7\x3f\x7\x77\x70\x7\x77\x70\x7\x77\x70\xfe" "\x3\x0\xfe\x73\x70\x7\x77\x70\x7\x77\x70\x87\xe7\x77\x0\x7\x70\xc0\x3\x0\x0\x0\x0\x70\x0\x7\x70\x0\x0\x0\x0\x7\x70\x0\x7\x0\x0\x0\x0\x0\x0\x70\x0\x7\x70\x0\x0\x0\x0\x7\x70\x0\x7\x38\x0\x0\x80\x3\x1c\xe0\x0\x7\x38\xc0" "\x1\x38\x0\x7\xe0\x0\x1c\x80\x3\x0\x0\x0\x0\x0\xc0\x3f\xfc\x3\x0\x0\xc0\x3f\xfc\x3\x0\x0\x0\x0\x1c\x80\x3\x70\x0\xe\xc0\x1\x38\xc0\x1\xe\x70\x80\x3\x1c\x0\x0\xfe\x73\x70\x0\x7\x70\xe0\x3\x7\x70\x0\x7\x0\x0\x7\x70\x0\x0" "\xfc\xe3\x70\x7\x77\x70\xe7\x77\x73\x37\x77\x73\xe7\x73\x0\xfe\x3\x0\xfc\xe3\x70\x7\x77\x70\xff\x77\x70\x7\x77\x70\x7\x77\x70\x7\x7\x0\xff\x71\x38\x87\xf3\x3f\x7\x77\x70\x7\x77\x70\x7\x77\x70\xff\x3\x0\xfc\xe3\x70\x7\x70\x0\x7\x70\x0\x7" "\x70\x0\x7\x70\x70\xfe\x3\x0\xff\x71\x38\x7\x77\x70\x7\x77\x70\x7\x77\x70\x7\x77\x70\xff\x3\x0\xff\x77\x0\x7\xf0\xf\x7\x70\x0\x7\x70\x0\x7\x70\x0\xff\x7\x0\xff\x77\x0\x7\xf0\xf\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\x0\x0\xfc\xe3" "\x70\x7\x70\x0\xc7\x77\x70\x7\x77\x70\x7\x77\x78\x7e\x7\x70\x7\x77\x70\x7\xf7\x7f\x7\x77\x70\x7\x77\x70\x7\x77\x70\x7\x7\x0\xff\x7\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\xff\x7\x0\xe0\x7\x70\x0\x7\x70\x0\x7\x70\x0\x77\x70" "\x7\x77\x70\xfe\x3\x0\x7\x77\x38\xc7\x71\xe\x77\xf0\x3\x77\x70\xe\xc7\x71\x38\x7\x7\x0\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\x70\x0\xff\x7\x0\x7\xf7\x78\xdf\xf7\x7f\x77\x77\x72\x7\x77\x70\x7\x77\x70\x7\x7\x0\x7\xf7\x70\x1f" "\xf7\x73\x77\x77\x7e\xc7\x77\x78\x7\x77\x70\x7\x7\x0\xfc\xe3\x70\x7\x77\x70\x7\x77\x70\x7\x77\x70\x7\x77\x38\xfe\x1\x0\xff\x73\x70\x7\x77\x70\x7\x77\x70\x7\xf7\x3f\x7\x70\x0\x7\x0\x0\xfc\xe3\x70\x7\x77\x70\x7\x77\x70\x7\x77\x70\xe7\x77" "\x3c\xbe\x3\x70\xff\x73\x70\x7\x77\x70\xff\x73\x7\xe7\x70\x1c\x87\x73\x70\x7\x7\x0\xfe\x73\x70\x7\xe0\x3\xfc\x1\x3e\x0\x67\x70\x7\x77\x70\xfe\x3\x0\xff\x7\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\x70\x0\x0\x7\x77\x70\x7\x77\x70" "\x7\x77\x70\x7\x77\x70\x7\x77\x70\xfe\x3\x0\x7\x77\x70\x7\x77\x70\x7\x77\x70\x7\x77\x38\xc7\x71\xe\x7e\x0\x0\x7\x77\x70\x7\x77\x70\x7\x77\x72\x77\xf7\x7f\xdf\xf7\x78\x7\x7\x0\x7\xe7\x38\xdc\x81\xf\xf8\x80\xf\xdc\xe1\x38\x7\x77\x70\x7" "\x7\x0\x7\x77\x70\x7\x77\x70\x7\xe7\x3f\xe0\x0\xe\xe0\x0\xe\xe0\x0\x0\xff\x7\x38\xc0\x1\xe\x70\x80\x3\x1c\xe0\x0\x7\x70\x0\xff\x7\x0\xf8\x80\x3\x38\x80\x3\x38\x80\x3\x38\x80\x3\x38\x80\x3\xf8\x0\x0\x7\xe0\x0\x1c\x80\x3\x70\x0" "\xe\xc0\x1\x38\x0\x7\x60\x0\x4\x0\xf8\x0\xe\xe0\x0\xe\xe0\x0\xe\xe0\x0\xe\xe0\x0\xe\xf8\x0\x0\x20\x0\x7\xf8\xc0\x1d\x8e\x3\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xf0\x7f" "\x70\x0\x7\x70\x0\xe\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xe0\x3f\x0\x7\x70\xfe\x77\x70\x7\x77\x70\xfe\x7\x0\x7\x70\x0\x7\xf0\x3f\x7\x77\x70\x7\x77\x70\x7\x77\x70\xff\x3\x0\x0\x0\x0\x0\xe0\x3f\x7\x77\x0\x7" "\x70\x0\x7\x70\x70\xfe\x3\x0\x0\x7\x70\x0\xe7\x7f\x7\x77\x70\x7\x77\x70\x7\x77\x70\xfe\x7\x0\x0\x0\x0\x0\xe0\x3f\x7\x77\x70\xff\x77\x0\x7\x70\x0\xfe\x7\x0\xf8\xc3\x1\x1c\xc0\x1\xfc\xc0\x1\x1c\xc0\x1\x1c\xc0\x1\x1c\xc0\x1\x0\x0" "\x0\x0\xe0\x7f\x7\x77\x70\x7\x77\x70\xfe\x7\x70\x0\xf7\x3f\x7\x70\x0\x7\xf0\x3f\x7\x77\x70\x7\x77\x70\x7\x77\x70\x7\x7\x0\x70\x0\x7\x0\xc0\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\xfe\x3\x0\x0\x7\x70\x0\x0\x7c\x0\x7\x70\x0\x7\x70" "\xe\xe7\x70\xfc\x3\x0\x7\x70\x0\x7\x77\x38\xc7\x71\xe\x7f\x70\xe\xc7\x71\x38\x7\x7\x0\x0\xc0\x1\x1c\xc0\x1\x1c\xc0\x1\x1c\xc0\x1\x1c\xc0\x1\xf8\x7\x0\x0\x0\x0\x0\xf0\x38\xdf\xf7\x7f\x77\x77\x72\x7\x77\x70\x7\x7\x0\x0\x0\x0\x0" "\xf0\x3f\x7\x77\x70\x7\x77\x70\x7\x77\x70\x7\x7\x0\x0\x0\x0\x0\xe0\x3f\x7\x77\x70\x7\x77\x70\x7\x77\x70\xfe\x3\x0\x0\x0\x0\x0\xf0\x3f\x7\x77\x70\x7\x77\x70\x7\xf7\x3f\x7\x70\x0\x0\x0\x0\x0\xe0\x7f\x7\x77\x70\x7\x77\x70\x7\xe7" "\x7f\x0\x7\x70\x0\x0\x0\x0\x70\x3f\xf\x77\x0\x7\x70\x0\x7\x70\x0\x7\x0\x0\x0\x0\x0\x0\xe0\x7f\x7\x70\x0\xfe\x3\x70\x6\x77\x70\xfe\x3\x0\x1c\xc0\x1\x1c\xe0\xf\x1c\xc0\x1\x1c\xc0\x1\x1c\xc0\x1\xf8\x7\x0\x0\x0\x0\x0\x70\x70" "\x7\x77\x70\x7\x77\x70\x7\x77\x70\xfe\x7\x0\x0\x0\x0\x0\x70\x70\x7\x77\x70\x8e\xe3\x38\x8e\xc3\x1d\xf8\x0\x0\x0\x0\x0\x0\x70\x70\x7\x77\x70\x27\x77\x77\xff\xf7\x7d\x8e\x3\x0\x0\x0\x0\x0\x70\x70\x8e\xc3\x1d\xf8\x80\xf\xdc\xe1\x38\x7" "\x7\x0\x0\x0\x0\x0\x70\x70\x7\x77\x70\x87\xe7\x77\x0\x7\x70\xff\x3\x0\x0\x0\x0\x0\xf0\x3f\xc0\x1\xe\x70\x80\x3\x1c\xe0\x0\xff\x7\x0\xe0\x3\x7\x70\x0\x7\x70\x80\x3\x70\x0\x7\x70\x0\x7\xe0\x3\x0\xff\xf\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x7c\x0\xe\xe0\x0\xe\xe0\x0\x1c\xe0\x0\xe\xe0\x0\xe\x7c\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xf0\xff\xff\xf\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xf0\xff\x7\x70\x0\x7\x70\x0\xff\xf" "\x0\x0\x0\x0\x0\x0\x0\x0\xf0\xff\x0\x0\x0\x0\x0\x0\xff\xf\x0\x0\x0\x0\x0\x0\x0\x0\xf0\xff\x0\xe\xe0\x0\xe\xe0\xff\xf\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xf0\x7f\xfe\xc3\x1f\xf8\x0\x7\x20\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x2\x70\x80\xf\xfc\xe1\x3f\xff\x7\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" ), // Font no. 14 FontEntry("IDC-Harmonica", 8, 8, "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x18\x18\x18\x18\x18\x0\x18\x0\x36\x36\x12\x0\x0\x0\x0\x0\x36\x36\x7f\x36\x7f\x36\x36\x0\x8\x7e\xb\x3e\x68\x3f\x8\x0\x6\x69\x36\x18\xc\x36\x4b\x30\x1e\x33\x16\x6e\x3b\x33\x6e\x0\x18\x18\xc\x0\x0\x0\x0\x0" "\x18\xc\x6\x6\x6\xc\x18\x0\xc\x18\x30\x30\x30\x18\xc\x0\x0\x36\x7f\x7f\x3e\x1c\x8\x0\x0\x18\x18\x7e\x18\x18\x0\x0\x0\x0\x0\x0\x0\x18\x18\xc\x0\x0\x0\x3e\x0\x0\x0\x0\x0\x0\x0\x0\x0\x18\x18\x0\xc0\x60\x30\x18\xc\x6\x3\x0" "\x0\x1e\x33\x7b\x6f\x67\x3e\x0\x18\x18\x1c\x18\x18\x18\x7e\x0\x3e\x60\x3e\x3\x3\x3\x7f\x0\x7e\x60\x38\x60\x60\x63\x3e\x0\xc\x4c\x66\x63\x7f\x60\x60\x0\x7f\x3\x3f\x60\x60\x63\x3e\x0\x3e\x3\x3f\x63\x63\x63\x3e\x0\x7f\x60\x30\x18\xc\xc\xc\x0" "\x3e\x63\x3e\x63\x63\x63\x3e\x0\x3e\x63\x63\x63\x7e\x60\x30\x0\x0\x18\x18\x0\x18\x18\x0\x0\x0\x18\x18\x0\x18\x18\x10\x0\x30\x18\xc\x6\xc\x18\x30\x0\x0\x0\x7e\x0\x7e\x0\x0\x0\xc\x18\x30\x60\x30\x18\xc\x0\x3e\x63\x60\x3c\xc\x0\xc\x0" "\x3c\x66\x63\x7b\x3b\x3\x7e\x0\x3c\x66\x63\x7f\x63\x63\x63\x0\x1f\x33\x3f\x63\x63\x63\x3f\x0\x3c\x66\x3\x3\x3\x63\x3e\x0\x1f\x33\x63\x63\x63\x63\x3f\x0\x7f\x3\x1f\x3\x3\x3\x7f\x0\x7f\x3\x1f\x3\x3\x3\x3\x0\x3c\x66\x3\x73\x63\x73\x6e\x60" "\x63\x63\x7f\x63\x63\x63\x63\x0\x7e\x18\x18\x18\x18\x18\x7e\x0\x78\x60\x60\x60\x63\x63\x3e\x0\x63\x33\x1b\xf\x1b\x33\x63\x0\x3\x3\x3\x3\x3\x3\x7f\x0\x63\x77\x7f\x6b\x63\x63\x63\x0\x63\x67\x6f\x7b\x73\x63\x63\x0\x3c\x66\x63\x63\x63\x33\x1e\x0" "\x3f\x63\x63\x63\x3f\x3\x3\x0\x3c\x66\x63\x63\x63\x3b\x36\x60\x3f\x63\x63\x3f\x1b\x33\x63\x0\x3e\x63\xe\x38\x62\x63\x3e\x0\x7e\x18\x18\x18\x18\x18\x18\x0\x63\x63\x63\x63\x63\x63\x3e\x0\x63\x63\x63\x63\x33\x1b\xe\x0\x63\x63\x63\x6b\x7f\x77\x63\x0" "\x63\x36\x1c\x1c\x36\x63\x63\x0\x63\x63\x63\x3e\x18\x18\x18\x0\x7f\x30\x18\xc\x6\x3\x7f\x0\x3c\xc\xc\xc\xc\xc\x3c\x0\x3\x6\xc\x18\x30\x60\x40\x0\x3c\x30\x30\x30\x30\x30\x3c\x0\x8\x1c\x36\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x7f" "\x18\x18\x30\x0\x0\x0\x0\x0\x0\x0\x3c\x60\x7e\x63\x7e\x0\x3\x3\x3f\x63\x63\x63\x3f\x0\x0\x0\x3e\x63\x3\x63\x3e\x0\x60\x60\x7e\x63\x63\x63\x7e\x0\x0\x0\x3e\x63\x7f\x3\x7e\x0\x7c\x6\x6\x3e\x6\x6\x6\x6\x0\x0\x7e\x63\x63\x7e\x60\x3f" "\x3\x3\x3f\x63\x63\x63\x63\x0\x18\x0\x1c\x18\x18\x18\x7e\x0\x60\x0\x70\x60\x60\x60\x66\x3c\x3\x3\x63\x33\x1f\x33\x63\x0\x6\x6\x6\x6\x6\x6\x7c\x0\x0\x0\x37\x7f\x6b\x63\x63\x0\x0\x0\x3f\x63\x63\x63\x63\x0\x0\x0\x3e\x63\x63\x63\x3e\x0" "\x0\x0\x3f\x63\x63\x63\x3f\x3\x0\x0\x7e\x63\x63\x63\x7e\x60\x0\x0\x3b\x67\x3\x3\x3\x0\x0\x0\x7e\x3\x3e\x60\x3f\x0\xc\xc\x3e\xc\xc\xc\x78\x0\x0\x0\x63\x63\x63\x63\x7e\x0\x0\x0\x63\x63\x36\x36\x1c\x0\x0\x0\x63\x63\x6b\x7f\x36\x0" "\x0\x0\x63\x36\x1c\x36\x63\x0\x0\x0\x63\x63\x63\x7e\x60\x3f\x0\x0\x3f\x18\xc\x6\x7f\x0\x70\x18\x18\xc\x18\x18\x70\x0\xff\x0\x0\x0\x0\x0\x0\x0\xe\x18\x18\x30\x18\x18\xe\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xff\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xdb\xdb\x0" "\x0\x7e\x0\x7e\x0\x7e\x0\x0\x0\xf8\x8\x8\x8\x8\xf8\x0\x0\xff\x0\x0\x0\x0\xff\x0\x0\x1f\x10\x10\x10\x10\x1f\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x0\x2\x1\x0\x0\x0\x20\x30\x28\x24\x22\xa1\x60\x20\x0\x0\x0\x1\x2\x0\x0\x0" "\x20\x60\xa1\x22\x24\x28\x30\x20\x0\x0\x0\x40\x40\x40\x40\x7f\xff\x81\x81\x81\x81\x80\x80\x80\x0\x0\x0\x20\x20\x11\x11\xe\x38\x44\x44\x82\x82\x0\x0\x0\x0\x0\xfe\x7c\x38\x10\x0\x0\x0\x0\x10\x38\x7c\xfe\x0\x0\x80\xc1\x63\x36\x1c\x8\x0\x0" ), // Font no. 15 FontEntry("IDC-Hoodlum", 8, 8, "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x18\x18\x18\x18\x18\x0\x18\x0\x6c\x6c\x6c\x0\x0\x0\x0\x0\x0\x6c\xfe\x6c\xfe\x6c\x0\x0\x10\xfe\x16\xfe\xd0\xfe\x10\x0\x0\x66\x36\x18\x6c\x66\x0\x0\x38\x6c\x38\xfc\x66\xde\x0\x0\x18\x18\xc\x0\x0\x0\x0\x0" "\x0\x30\x18\x18\x18\x30\x0\x0\x0\x18\x30\x30\x30\x18\x0\x0\x18\x42\x18\x3c\x18\x42\x18\x0\x0\x18\x18\x7e\x18\x18\x0\x0\x0\x0\x0\x0\x18\x18\xc\x0\x0\x0\x0\xfe\x0\x0\x0\x0\x0\x0\x0\x0\x18\x18\x0\x0\x0\xc0\x60\x30\x18\xc\x6\x0" "\x0\xfe\xc6\xc6\xc6\xfe\x0\x0\x0\x3c\x30\x30\x30\x30\x78\x0\x0\xfe\xc0\xfe\xe\xfe\x0\x0\x0\xfe\xc0\xf8\xc0\xfe\x0\x0\xe\xe\x6e\x6e\xfe\x60\x60\x0\x0\xfe\xe\x7e\xc0\x7e\x0\x0\xe\xe\xe\xe\xfe\xce\xfe\x0\x0\xfe\xc0\xc0\xc0\xc0\xc0\x0" "\x0\xfe\xce\xfe\xce\xfe\x0\x0\x0\xfe\xc6\xfe\xc0\xc0\xc0\xc0\x0\x18\x18\x0\x18\x18\x0\x0\x0\x18\x18\x0\x18\x18\xc\x0\x60\x30\x18\xc\x18\x30\x60\x0\x0\x0\xfe\x0\xfe\x0\x0\x0\xc\x18\x30\x60\x30\x18\xc\x0\x0\xfe\xc6\xf0\x30\x0\x30\x0" "\x7c\xc6\xf6\xd6\x76\x6\x7c\x0\x0\xff\xc0\xfe\xce\xce\x0\x0\x0\x7f\xc0\x7e\xce\x7e\x0\x0\x0\xfc\xe\xe\xe\xfc\x0\x0\x0\x7f\xc0\xce\xce\x7e\x0\x0\x0\xff\x0\xfe\xe\xfe\x0\x0\x0\xff\x0\xfe\xe\xe\x0\x0\x0\xfc\xe\xce\xce\xfc\x0\x0" "\x0\xce\xce\xfe\xce\xce\xe\x0\x0\x38\x38\x38\x38\x38\x0\x0\x0\xff\x30\x30\x30\x30\x3e\x0\x0\xce\x6e\x3e\x6e\xce\x0\x0\xe\xe\xe\xe\xe\xfe\x0\x0\x0\xc6\xee\xfe\xd6\xc6\x6\x2\x6\xce\xde\xfe\xee\xce\x80\x0\x0\x7f\xc0\xc6\xc6\x7c\x0\x0" "\x0\x7f\xc0\x7e\xe\xe\x0\x0\x0\x7f\xc0\xc6\xf6\x7c\xc0\x0\x0\x7f\xc0\x7e\x6e\xce\x0\x0\x0\xf0\x38\x38\x38\x1f\x0\x0\x0\xff\x38\x38\x38\x38\x0\x0\x0\xce\xce\xce\xce\x7c\x0\x0\x0\xce\xce\xce\x7c\x38\x0\x0\xc0\xc6\xd6\xfe\xee\xc6\x0\x0" "\x0\xce\xce\x7c\xce\xce\x0\x0\x0\xce\xce\xfe\x38\x38\x38\x0\x0\xff\x70\x38\x1c\xfe\x0\x0\x0\x18\x8\x8\x8\x18\x0\x0\x0\x6\xc\x18\x30\x60\xc0\x0\x0\x18\x10\x10\x10\x18\x0\x0\x10\x38\x6c\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xff" "\x18\x18\xc\x0\x0\x0\x0\x0\x0\xff\xc0\xfe\xce\xce\x0\x0\x0\x7f\xc0\x7e\xce\x7e\x0\x0\x0\xfc\xe\xe\xe\xfc\x0\x0\x0\x7f\xc0\xce\xce\x7e\x0\x0\x0\xff\x0\xfe\xe\xfe\x0\x0\x0\xff\x0\xfe\xe\xe\x0\x0\x0\xfc\xe\xce\xce\xfc\x0\x0" "\x0\xce\xce\xfe\xce\xce\xe\x0\x0\x38\x38\x38\x38\x38\x0\x0\x0\xff\x30\x30\x30\x30\x3e\x0\x0\xce\x6e\x3e\x6e\xce\x0\x0\xe\xe\xe\xe\xe\xfe\x0\x0\x0\xc6\xee\xfe\xd6\xc6\x6\x2\x6\xce\xde\xfe\xee\xce\x80\x0\x0\x7f\xc0\xc6\xc6\x7c\x0\x0" "\x0\x7f\xc0\x7e\xe\xe\x0\x0\x0\x7f\xc0\xc6\xf6\x7c\xc0\x0\x0\x7f\xc0\x7e\x6e\xce\x0\x0\x0\xf0\x38\x38\x38\x1f\x0\x0\x0\xff\x38\x38\x38\x38\x0\x0\x0\xce\xce\xce\xce\x7c\x0\x0\x0\xce\xce\xce\x7c\x38\x0\x0\xc0\xc6\xd6\xfe\xee\xc6\x0\x0" "\x0\xce\xce\x7c\xce\xce\x0\x0\x0\xce\xce\xfe\x38\x38\x38\x0\x0\xff\x30\x18\xc\xfe\x0\x0\x30\x18\x18\xc\x18\x18\x30\x0\x18\x18\x18\x18\x18\x18\x18\x0\xc\x18\x18\x30\x18\x18\xc\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xff\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xdb\xdb\x0" "\x0\x7e\x0\x7e\x0\x7e\x0\x0\x0\xf8\x8\x8\x8\x8\xf8\x0\x0\xff\x0\x0\x0\x0\xff\x0\x0\x1f\x10\x10\x10\x10\x1f\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x0\x2\x1\x0\x0\x0\x20\x30\x28\x24\x22\xa1\x60\x20\x0\x0\x0\x1\x2\x0\x0\x0" "\x20\x60\xa1\x22\x24\x28\x30\x20\x0\x0\x0\x40\x40\x40\x40\x7f\xff\x81\x81\x81\x81\x80\x80\x80\x0\x0\x0\x20\x20\x11\x11\xe\x38\x44\x44\x82\x82\x0\x0\x0\x0\x0\xfe\x7c\x38\x10\x0\x0\x0\x0\x10\x38\x7c\xfe\x0\x0\x80\xc1\x63\x36\x1c\x8\x0\x0" ), // Font no. 16 FontEntry("IDC-MicroKnight", 12, 12, "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x70\x0\x7\x70\x0\x7\x70\x0\x7\x70\x0\x0\x0\x0\x7\x70\x0\x0\xdc\xc1\x1d\xdc\x81\x19\x10\x1\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xc0\x39\x9c\xe3\x7f\xfe\xc7\x39\x9c" "\xe3\x7f\xfe\xc7\x39\x9c\x3\x0\x70\x0\x7\xfe\x73\x7\x77\xe0\x3f\x70\x7\x77\x70\xf7\x3f\x70\x0\x7\x0\xe0\xe0\x1b\xb7\x39\xce\x1\xe\x70\x80\x73\x9c\xed\xd8\x7\x7\x0\x7c\xe0\xe\xee\xe0\x6\x7c\xe7\x3b\xf7\x71\xe\xe7\x70\x1f\xbc\x3\x70\xe0\x0" "\xe\xe0\x0\x8\x60\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xe0\x0\x7\x38\x80\x3\x38\x80\x3\x38\x80\x3\x38\x0\x7\xe0\x0\x0\x38\x0\x7\xe0\x0\xe\xe0\x0\xe\xe0\x0\xe\xe0\x0\x7\x38\x0\x0\x0\x0\x0\x8e\xc3\x1d\xf8\xf0\x7f\xff\x87\xf" "\xdc\xe1\x38\x0\x0\x0\x0\x0\x0\x70\x0\x7\x70\xe0\x3f\xfe\x3\x7\x70\x0\x7\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x7\x70\x0\x7\x40\x0\x3\x0\x0\x0\x0\x0\x0\x0\xe0\x3f\xfe\x3\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x70\x0\x7\x70\x0\x0\x0\x0\xe0\x0\x7\x38\xc0\x1\xe\x70\x80\x3\x1c\xe0\x0\x7\x0\x0\x0\x0\x0\xfe\x71\x3c\xe7\x77\x77\x3f\xf7\x71\xf\x77\x70\xfe\x3\x0\x70\x0\x7\x78\x0\x7\x70\x0\x7\x70\x0\x7\x70\x0" "\x7\xfe\x3\x0\xfc\x3\x70\x0\xc7\x3f\x6\x70\x0\x7\x70\x0\x7\x70\x0\xff\x7\x0\xfc\x3\x70\x0\x7\x3f\x0\x7\x70\x0\x67\x70\x7\x77\x70\xfe\x3\x0\xc0\x1\x1c\xe0\x0\x7\xb8\xc3\x39\x8e\x73\x38\xff\x7\x38\x80\x3\x0\xff\x70\x0\x7\xf0\x3f" "\x0\x7\x70\x0\x7\x70\x7\x77\x38\xfe\x1\x0\x7e\x70\x0\x7\xf0\x3f\x7\x77\x70\x7\x77\x70\x7\x77\x38\xfe\x1\x0\xff\x7\x38\xc0\x1\xe\xe0\x0\x7\x70\x0\x7\x70\x0\x7\x70\x0\x0\xfe\x71\x38\x87\xe3\x3f\x7\x77\x70\x7\x77\x70\x7\x77\x38\xfe" "\x1\x0\xfe\x71\x38\x7\x77\x70\x7\x77\x70\x7\xe7\x7f\x0\x7\x70\xf0\x3\x0\x0\x0\x0\x70\x0\x7\x70\x0\x0\x0\x0\x7\x70\x0\x7\x0\x0\x0\x0\x0\x0\x70\x0\x7\x70\x0\x0\x0\x0\x7\x70\x0\x7\x40\x0\x3\x0\x0\x1c\xe0\x0\x7\x38\xc0" "\x1\x38\x0\x7\xe0\x0\x1c\x0\x0\x0\x0\x0\x0\x0\xc0\x1f\xfc\x1\x0\x0\xc0\x1f\xfc\x1\x0\x0\x0\x0\x0\x80\x3\x70\x0\xe\xc0\x1\x38\xc0\x1\xe\x70\x80\x3\x0\x0\x0\xfe\x73\x70\x0\x7\x70\xe0\x3\x7\x70\x0\x7\x0\x0\x7\x70\x0\x0" "\xfc\xe1\x38\xe7\x77\x77\x77\x77\x77\xe7\x73\x0\x7\xe0\x70\xfc\x3\x0\xfe\x71\x38\x7\x77\x70\xff\x77\x70\x7\x77\x70\x7\x77\x70\x7\x7\x0\xff\x71\x38\x87\xf3\x3f\x7\x77\x70\x7\x77\x70\x7\x77\x38\xff\x1\x0\xfe\x71\x38\x7\x70\x0\x7\x70\x0\x7" "\x70\x0\x7\x70\x70\xfe\x3\x0\xff\x71\x38\x7\x77\x70\x7\x77\x70\x7\x77\x70\x7\x77\x70\xff\x3\x0\xff\x77\x0\x7\xf0\x1f\x7\x70\x0\x7\x70\x0\x7\x70\x0\xff\x7\x0\xff\x77\x0\x7\xf0\x1f\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\x0\x0\x7c\xe0" "\x0\x7\x70\x0\xc7\x77\x70\x7\x77\x70\x7\x77\x78\x7e\x7\x70\x7\x77\x70\x7\xf7\x7f\x7\x77\x70\x7\x77\x70\x7\x77\x70\x7\x7\x0\xff\x7\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\xff\x7\x0\xc0\x7\x70\x0\x7\x70\x0\x7\x70\x0\x77\x70" "\x7\x77\x70\xfe\x3\x0\x7\x77\x38\xc7\x71\xe\x77\xf0\x3\x77\x70\xe\xc7\x71\x38\x7\x7\x0\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\x70\x0\xff\x7\x0\x7\xf7\x78\xdf\xf7\x7f\x77\x77\x72\x7\x77\x70\x7\x77\x70\x7\x7\x0\x7\xf7\x70\x1f" "\xf7\x73\x77\x77\x7e\xc7\x77\x78\x7\x77\x70\x7\x7\x0\xfe\x71\x38\x7\x77\x70\x7\x77\x70\x7\x77\x70\x7\x77\x70\xfe\x3\x0\xff\x71\x38\x7\x77\x70\x7\x77\x70\x7\xf7\x3f\x7\x70\x0\x7\x0\x0\xfe\x71\x38\x7\x77\x70\x7\x77\x70\x7\x77\x70\x77\x77" "\x3e\xfe\x3\x38\xff\x71\x38\x7\x77\x70\x7\xf7\x3f\x77\x70\xe\xc7\x71\x38\x7\x7\x70\x7e\x70\x0\x7\xe0\x3f\x0\x7\x70\x0\x67\x70\x7\x77\x70\xfe\x3\x0\xff\x7\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\x70\x0\x0\x7\x77\x70\x7\x77\x70" "\x7\x77\x70\x7\x77\x70\x7\x77\x70\xfe\x3\x0\x7\x77\x70\x7\x77\x70\x7\xe7\x38\x8e\xc3\x1d\xdc\x81\xf\xf8\x0\x0\x7\x77\x70\x7\x77\x70\x7\x77\x72\x77\xf7\x7f\xdf\xf7\x78\x7\x7\x0\x7\xe7\x38\xdc\x81\xf\xf8\x80\xf\xdc\xe1\x38\x7\x77\x70\x7" "\x7\x0\x7\x77\x70\x7\x77\x70\x7\xe7\x3f\x80\x3\x38\x80\x3\x38\x80\x3\x0\xff\x7\x38\xc0\x1\xe\x70\x80\x3\x1c\xe0\x0\x7\x70\x0\xff\x7\x0\xf8\x80\x3\x38\x80\x3\x38\x80\x3\x38\x80\x3\x38\x80\x3\xf8\x0\x0\x0\x70\x0\xe\xc0\x1\x38\x0" "\x7\xe0\x0\x1c\x80\x3\x70\x0\xe\x0\xf8\x0\xe\xe0\x0\xe\xe0\x0\xe\xe0\x0\xe\xe0\x0\xe\xf8\x0\x0\x20\x0\x7\xf8\xc0\x1d\x8e\x3\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xf0\x7f" "\x70\x0\x7\x70\x0\x4\x30\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xf8\x3\x70\x0\xe7\x7f\x7\x77\x70\x7\x77\x70\xfe\x7\x0\x7\x70\x0\xff\x71\x38\x7\x77\x70\x7\x77\x70\x7\x77\x70\xff\x3\x0\x0\x0\x0\xfe\x70\x38\x7\x70\x0\x7" "\x70\x0\x7\x70\x70\xfe\x3\x0\x0\x7\x70\xfc\xe7\x70\x7\x77\x70\x7\x77\x70\x7\x77\x70\xfe\x7\x0\x0\x0\x0\xfe\x70\x1c\x87\xf3\x3f\x7\x70\x0\x7\x70\x70\xfe\x3\x0\xf8\xc0\x1d\x1c\xc0\x1\x7c\xc0\x1\x1c\xc0\x1\x1c\xc0\x1\x1c\xc0\x1\x0\x0" "\x0\xfe\x77\x70\x7\x77\x70\x7\x77\x70\xfe\x7\x70\x0\xe7\x3f\x7\x70\x0\xff\x71\x38\x7\x77\x70\x7\x77\x70\x7\x77\x70\x7\x7\x0\x70\x0\x7\x0\xc0\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\xfe\x3\x0\x0\x7\x70\x0\x0\x7c\x0\x7\x70\x0\x7\x70" "\x6\x67\x70\xfc\x3\x0\x7\x70\x0\x87\x73\x1c\xe7\xf0\x7\x77\x70\xe\xc7\x71\x38\x7\x7\x0\x0\x80\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\xfe\x3\x0\x0\x0\x0\x7\xf3\x78\xdf\xf7\x7f\x77\x77\x72\x7\x77\x70\x7\x7\x0\x0\x0\x0\xff" "\x71\x38\x7\x77\x70\x7\x77\x70\x7\x77\x70\x7\x7\x0\x0\x0\x0\xfe\x71\x38\x7\x77\x70\x7\x77\x70\x7\x77\x70\xfe\x3\x0\x0\x0\x0\xff\x71\x38\x7\x77\x70\x7\x77\x70\x7\xf7\x3f\x7\x70\x0\x0\x0\x0\xfc\xe7\x70\x7\x77\x70\x7\x77\x70\x7\xe7" "\x7f\x0\x7\x70\x0\x0\x0\xff\x73\x70\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\x0\x0\x0\x0\x0\x7e\x70\x0\x7\xe0\x3f\x0\x7\x70\x6\x77\x70\xfe\x3\x0\x1c\xc0\x1\xfe\xc0\x1\x1c\xc0\x1\x1c\xc0\x1\x1c\xc0\x1\xf8\x7\x0\x0\x0\x0\x7\x77\x70" "\x7\x77\x70\x7\x77\x70\x7\x77\x70\xfe\x7\x0\x0\x0\x0\x7\x77\x70\x7\xe7\x38\x8e\xe3\x38\xdc\xc1\x1f\xf8\x0\x0\x0\x0\x0\x7\x77\x70\x27\x77\x77\xff\xe7\x3f\xde\xe3\x38\x6\x3\x0\x0\x0\x0\x7\xe7\x38\xdc\x81\xf\x70\x80\xf\xdc\xe1\x38\x7" "\x7\x0\x0\x0\x0\x0\x70\x70\x7\x77\x70\x7\xe7\x7f\x0\x7\x70\xfc\x3\x0\x0\x0\x0\xff\x7\x38\xc0\x1\xe\x70\x80\x3\x1c\xe0\x0\xff\x7\x0\xe0\x1\x7\x70\x0\x7\x70\x80\x3\x70\x0\x7\x70\x0\x7\xe0\x1\x0\x70\x0\x7\x70\x0\x7\x70\x0" "\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\x78\x0\xe\xe0\x0\xe\xe0\x0\x1c\xe0\x0\xe\xe0\x0\xe\x78\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xf0\xff\xff\xf\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xf0\xff\x7\x70\x0\x7\x70\x0\xff\xf" "\x0\x0\x0\x0\x0\x0\x0\x0\xf0\xff\x0\x0\x0\x0\x0\x0\xff\xf\x0\x0\x0\x0\x0\x0\x0\x0\xf0\xff\x0\xe\xe0\x0\xe\xe0\xff\xf\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xf0\x7f\xfe\xc3\x1f\xf8\x0\x7\x20\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x2\x70\x80\xf\xfc\xe1\x3f\xff\x7\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" ), // Font no. 17 FontEntry("IDC-MicroKnight", 8, 8, "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x18\x18\x18\x18\x18\x0\x18\x0\x36\x36\x24\x0\x0\x0\x0\x0\x36\x36\x7f\x36\x7f\x36\x36\x0\x8\x3e\xb\x3e\x68\x68\x3e\x8\x6\x69\x3e\x18\xc\x36\x4b\x30\xe\x1b\xe\x6f\x3b\x1b\x3e\x60\x18\x18\x10\x8\x0\x0\x0\x0" "\x18\xc\x6\x6\x6\xc\x18\x0\xc\x18\x30\x30\x30\x18\xc\x0\x0\x36\x1c\x7f\x1c\x36\x0\x0\x0\x18\x18\x7e\x18\x18\x0\x0\x0\x0\x0\x0\x18\x18\x10\x8\x0\x0\x0\x3e\x0\x0\x0\x0\x0\x0\x0\x0\x0\x18\x18\x0\x0\x60\x30\x18\xc\x6\x3\x0" "\x0\x1e\x33\x7b\x6f\x67\x3e\x0\x18\x18\x1c\x18\x18\x18\x7e\x0\x3e\x60\x3c\x6\x3\x3\x7f\x0\x3c\x60\x38\x60\x62\x63\x3e\x0\x18\x18\xc\x36\x33\x7f\x30\x0\x1f\x3\x3f\x60\x62\x33\x1e\x0\xe\x3\x3f\x63\x63\x33\x1e\x0\x7f\x60\x30\x18\x18\x18\x18\x0" "\x1e\x33\x3e\x63\x63\x33\x1e\x0\x1e\x33\x63\x63\x7e\x60\x38\x0\x0\x18\x18\x0\x0\x18\x18\x0\x0\x18\x18\x0\x0\x18\x10\x8\x0\x18\xc\x6\xc\x18\x0\x0\x0\x0\x3e\x0\x3e\x0\x0\x0\x0\xc\x18\x30\x18\xc\x0\x0\x3e\x63\x60\x3c\xc\x0\xc\x0" "\x1c\x36\x7b\x6f\x7b\x3\x66\x3c\x1e\x33\x63\x7f\x63\x63\x63\x0\x1f\x33\x3f\x63\x63\x33\x1f\x0\x1e\x33\x3\x3\x3\x63\x3e\x0\x1f\x33\x63\x63\x63\x63\x3f\x0\x7f\x3\x3f\x3\x3\x3\x7f\x0\x7f\x3\x3f\x3\x3\x3\x3\x0\x1c\x6\x3\x73\x63\x63\x7e\x60" "\x63\x63\x63\x7f\x63\x63\x63\x0\x7e\x18\x18\x18\x18\x18\x7e\x0\x70\x60\x60\x60\x63\x63\x3e\x0\x63\x33\x1b\xf\x1b\x33\x63\x0\x3\x3\x3\x3\x3\x3\x7f\x0\x63\x77\x7f\x6b\x63\x63\x63\x0\x63\x67\x6f\x7b\x73\x63\x63\x0\x1e\x33\x63\x63\x63\x63\x3e\x0" "\x1f\x33\x63\x63\x3f\x3\x3\x0\x1e\x33\x63\x63\x63\x6b\x3e\x30\x1f\x33\x63\x63\x3f\x1b\x33\x60\x1e\x3\x3e\x60\x62\x63\x3e\x0\x7e\x18\x18\x18\x18\x18\x18\x0\x63\x63\x63\x63\x63\x63\x3e\x0\x63\x63\x63\x36\x36\x1c\x1c\x0\x63\x63\x63\x6b\x7f\x77\x63\x0" "\x63\x36\x1c\x1c\x36\x63\x63\x0\x63\x63\x63\x3e\x30\x30\x30\x0\x7f\x30\x18\xc\x6\x3\x7f\x0\x1c\xc\xc\xc\xc\xc\x1c\x0\x0\x3\x6\xc\x18\x30\x60\x0\x1c\x18\x18\x18\x18\x18\x1c\x0\x8\x1c\x36\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x7f" "\x18\x18\x10\x8\x0\x0\x0\x0\x0\x3c\x60\x7e\x63\x63\x7e\x0\x3\x1f\x33\x63\x63\x63\x3f\x0\x0\x1e\x33\x3\x3\x63\x3e\x0\x60\x7c\x66\x63\x63\x63\x7e\x0\x0\x1e\x33\x3f\x3\x63\x3e\x0\x1c\x36\x6\x1e\x6\x6\x6\x6\x0\x7e\x63\x63\x63\x7e\x60\x3e" "\x3\x1f\x33\x63\x63\x63\x63\x0\x18\x0\x1c\x18\x18\x18\x7e\x0\x30\x0\x38\x30\x30\x30\x32\x1c\x3\x33\x1b\xf\x1b\x33\x63\x0\x1c\x18\x18\x18\x18\x18\x7e\x0\x0\x23\x77\x7f\x6b\x63\x63\x0\x0\x1f\x33\x63\x63\x63\x63\x0\x0\x1e\x33\x63\x63\x63\x3e\x0" "\x0\x1f\x33\x63\x63\x63\x3f\x3\x0\x7c\x66\x63\x63\x63\x7e\x60\x0\x3f\x63\x3\x3\x3\x3\x0\x0\x1e\x3\x3e\x60\x63\x3e\x0\xc\x3e\xc\xc\xc\x4c\x38\x0\x0\x63\x63\x63\x63\x63\x7e\x0\x0\x63\x63\x36\x36\x1c\x1c\x0\x0\x63\x6b\x7f\x3e\x36\x22\x0" "\x0\x63\x36\x1c\x1c\x36\x63\x0\x0\x63\x63\x63\x63\x7e\x60\x3e\x0\x7f\x30\x18\xc\x6\x7f\x0\x30\x18\x18\xc\x18\x18\x30\x0\x18\x18\x18\x18\x18\x18\x18\x18\xc\x18\x18\x30\x18\x18\xc\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xff\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xdb\xdb\x0" "\x0\x7e\x0\x7e\x0\x7e\x0\x0\x0\xf8\x8\x8\x8\x8\xf8\x0\x0\xff\x0\x0\x0\x0\xff\x0\x0\x1f\x10\x10\x10\x10\x1f\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x0\x2\x1\x0\x0\x0\x20\x30\x28\x24\x22\xa1\x60\x20\x0\x0\x0\x1\x2\x0\x0\x0" "\x20\x60\xa1\x22\x24\x28\x30\x20\x0\x0\x0\x40\x40\x40\x40\x7f\xff\x81\x81\x81\x81\x80\x80\x80\x0\x0\x0\x20\x20\x11\x11\xe\x38\x44\x44\x82\x82\x0\x0\x0\x0\x0\xfe\x7c\x38\x10\x0\x0\x0\x0\x10\x38\x7c\xfe\x0\x0\x80\xc1\x63\x36\x1c\x8\x0\x0" ), // Font no. 18 FontEntry("IDC-Topaz1.3", 8, 8, "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x18\x3c\x3c\x18\x18\x0\x18\x0\x36\x36\x0\x0\x0\x0\x0\x0\x36\x36\x7f\x36\x7f\x36\x36\x0\x18\x7c\x6\x3c\x60\x3e\x18\x0\x0\x63\x33\x18\xc\x66\x63\x0\x1c\x36\x16\x6e\x3b\x33\x6e\x0\x18\x18\xc\x0\x0\x0\x0\x0" "\x30\x18\xc\xc\xc\x18\x30\x0\xc\x18\x30\x30\x30\x18\xc\x0\x0\x66\x3c\xff\x3c\x66\x0\x0\x0\x18\x18\x7e\x18\x18\x0\x0\x0\x0\x0\x0\x0\x18\x18\xc\x0\x0\x0\x7e\x0\x0\x0\x0\x0\x0\x0\x0\x0\x18\x18\x0\xc0\x60\x30\x18\xc\x6\x3\x0" "\x3c\x66\x76\x7e\x6e\x66\x3c\x0\x18\x1c\x18\x18\x18\x18\x7e\x0\x3c\x66\x60\x38\xc\x66\x7e\x0\x3c\x66\x60\x38\x60\x66\x3c\x0\x38\x3c\x36\x33\x7f\x30\x78\x0\x7e\x6\x3e\x60\x60\x66\x3c\x0\x38\xc\x6\x3e\x66\x66\x3c\x0\x7e\x66\x60\x30\x18\x18\x18\x0" "\x3c\x66\x66\x3c\x66\x66\x3c\x0\x3c\x66\x66\x7c\x60\x30\x1c\x0\x0\x18\x18\x0\x0\x18\x18\x0\x0\x18\x18\x0\x0\x18\x18\x0\x30\x18\xc\x6\xc\x18\x30\x0\x0\x0\x7e\x0\x0\x7e\x0\x0\xc\x18\x30\x60\x30\x18\xc\x0\x3c\x66\x60\x30\x18\x0\x18\x0" "\x3e\x63\x7b\x7b\x7b\x3\x1e\x0\x18\x3c\x3c\x66\x7e\xc3\xc3\x0\x3f\x66\x66\x3e\x66\x66\x3f\x0\x3c\x66\x3\x3\x3\x66\x3c\x0\x1f\x36\x66\x66\x66\x36\x1f\x0\x7f\x66\x6\x1e\x6\x66\x7f\x0\x7f\x66\x6\x1e\x6\x6\xf\x0\x3c\x66\x3\x73\x63\x66\x7c\x0" "\x66\x66\x66\x7e\x66\x66\x66\x0\x7e\x18\x18\x18\x18\x18\x7e\x0\x70\x60\x60\x60\x66\x66\x3c\x0\x67\x66\x36\x1e\x36\x66\x67\x0\xf\x6\x6\x6\x46\x66\x7f\x0\x41\x63\x77\x7f\x6b\x63\x63\x0\x63\x67\x6f\x7b\x73\x63\x63\x0\x1c\x36\x63\x63\x63\x36\x1c\x0" "\x3f\x66\x66\x3e\x6\x6\xf\x0\x1c\x36\x63\x63\x63\x36\x3c\x60\x3f\x66\x66\x3e\x36\x66\xc7\x0\x3c\x66\xe\x1c\x70\x66\x3c\x0\x7e\x5a\x18\x18\x18\x18\x3c\x0\x66\x66\x66\x66\x66\x66\x7c\x0\xc3\xc3\x66\x66\x3c\x3c\x18\x0\x63\x63\x63\x6b\x7f\x77\x63\x0" "\xc3\x66\x3c\x18\x3c\x66\xc3\x0\xc3\xc3\x66\x3c\x18\x18\x3c\x0\x7f\x63\x31\x18\x4c\x66\x7f\x0\x3c\xc\xc\xc\xc\xc\x3c\x0\x3\x6\xc\x18\x30\x60\xc0\x0\x3c\x30\x30\x30\x30\x30\x3c\x0\x8\x1c\x36\x63\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x7f" "\x18\x18\x30\x0\x0\x0\x0\x0\x0\x0\x3c\x60\x78\x66\xdc\x0\x7\x6\x36\x6e\x66\x66\x3c\x0\x0\x0\x3c\x66\x6\x66\x3c\x0\x70\x60\x6c\x76\x66\x66\xdc\x0\x0\x0\x3c\x66\x7e\x6\x3c\x0\x38\x6c\xc\x1e\xc\xc\x1e\x0\x0\x0\xdc\x66\x66\x3c\x63\x3e" "\x7\x6\x36\x6e\x66\x66\x67\x0\x18\x0\x1c\x18\x18\x18\x3c\x0\x60\x0\x60\x60\x60\x60\x66\x3c\x7\x6\x66\x36\x1e\x36\x67\x0\x1c\x18\x18\x18\x18\x18\x3c\x0\x0\x0\x66\xee\xd6\xc6\xc6\x0\x0\x0\x3e\x66\x66\x66\x66\x0\x0\x0\x3c\x66\x66\x66\x3c\x0" "\x0\x0\x3b\x66\x66\x3e\x6\xf\x0\x0\xbc\x66\x66\x7c\x60\xe0\x0\x0\x37\x6e\x66\x6\xf\x0\x0\x0\x7c\x6\x3c\x60\x3e\x0\x10\x18\x7c\x18\x18\x58\x30\x0\x0\x0\x66\x66\x66\x66\xdc\x0\x0\x0\x66\x66\x66\x3c\x18\x0\x0\x0\xc6\xd6\xd6\x6c\x6c\x0" "\x0\x0\xc6\x6c\x38\x6c\xc6\x0\x0\x0\x66\x66\x66\x3c\x18\xe\x0\x0\x7e\x32\x18\x4c\x7e\x0\x70\x18\x18\xe\x18\x18\x70\x0\x18\x18\x18\x18\x18\x18\x18\x0\xe\x18\x18\x70\x18\x18\xe\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xff\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xdb\xdb\x0" "\x0\x7e\x0\x7e\x0\x7e\x0\x0\x0\xf8\x8\x8\x8\x8\xf8\x0\x0\xff\x0\x0\x0\x0\xff\x0\x0\x1f\x10\x10\x10\x10\x1f\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x0\x2\x1\x0\x0\x0\x20\x30\x28\x24\x22\xa1\x60\x20\x0\x0\x0\x1\x2\x0\x0\x0" "\x20\x60\xa1\x22\x24\x28\x30\x20\x0\x0\x0\x40\x40\x40\x40\x7f\xff\x81\x81\x81\x81\x80\x80\x80\x0\x0\x0\x20\x20\x11\x11\xe\x38\x44\x44\x82\x82\x0\x0\x0\x0\x0\xfe\x7c\x38\x10\x0\x0\x0\x0\x10\x38\x7c\xfe\x0\x0\x80\xc1\x63\x36\x1c\x8\x0\x0" ), // Font no. 19 FontEntry("IDC-Topaz2.0", 8, 8, "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x18\x18\x18\x18\x18\x0\x18\x0\x36\x36\x36\x0\x0\x0\x0\x0\x36\x36\x7f\x36\x7f\x36\x36\x0\x18\x7c\x6\x3c\x60\x3e\x18\x0\x0\x66\x35\x1b\x6c\x56\x33\x0\x1c\x36\x16\x6e\x3b\x73\xde\x0\x18\x18\xc\x0\x0\x0\x0\x0" "\x30\x18\xc\xc\xc\x18\x30\x0\xc\x18\x30\x30\x30\x18\xc\x0\x0\x66\x3c\xff\x3c\x66\x0\x0\x0\x18\x18\x7e\x18\x18\x0\x0\x0\x0\x0\x0\x0\x18\x18\xc\x0\x0\x0\x7e\x0\x0\x0\x0\x0\x0\x0\x0\x0\x18\x18\x0\xc0\x60\x30\x18\xc\x6\x3\x0" "\x3c\x66\x76\x7e\x6e\x66\x3c\x0\x18\x1c\x1e\x18\x18\x18\x18\x0\x3c\x66\x60\x30\x18\xc\x7e\x0\x3c\x66\x60\x38\x60\x66\x3c\x0\x38\x3c\x36\x33\x7f\x30\x30\x0\x7e\x6\x3e\x60\x60\x66\x3c\x0\x38\xc\x6\x3e\x66\x66\x3c\x0\x7e\x60\x60\x30\x18\x18\x18\x0" "\x3c\x66\x66\x3c\x66\x66\x3c\x0\x3c\x66\x66\x7c\x60\x30\x1c\x0\x0\x18\x18\x0\x0\x18\x18\x0\x0\x18\x18\x0\x0\x18\x18\xc\x0\x60\x18\x6\x18\x60\x0\x0\x0\x0\x7e\x0\x7e\x0\x0\x0\x0\x6\x18\x60\x18\x6\x0\x0\x3c\x66\x60\x30\x18\x0\x18\x0" "\x3e\x63\x7b\x6b\x7b\x3\x1e\x0\x3c\x66\x66\x7e\x66\x66\x66\x0\x3e\x66\x66\x3e\x66\x66\x3e\x0\x78\xc\x6\x6\x6\xc\x78\x0\x1e\x36\x66\x66\x66\x36\x1e\x0\x7e\x6\x6\x1e\x6\x6\x7e\x0\x7e\x6\x6\x1e\x6\x6\x6\x0\x3c\x66\x6\x76\x66\x66\x7c\x0" "\x66\x66\x66\x7e\x66\x66\x66\x0\x3c\x18\x18\x18\x18\x18\x3c\x0\x60\x60\x60\x60\x60\x66\x3c\x0\x63\x33\x1b\xf\x1b\x33\x63\x0\x6\x6\x6\x6\x6\x6\x7e\x0\x63\x77\x7f\x6b\x63\x63\x63\x0\x63\x67\x6f\x7b\x73\x63\x63\x0\x3c\x66\x66\x66\x66\x66\x3c\x0" "\x3e\x66\x66\x3e\x6\x6\x6\x0\x1e\x33\x33\x33\x33\x3b\x7e\x0\x3e\x66\x66\x3e\x36\x66\x66\x0\x3c\x66\xe\x3c\x70\x66\x3c\x0\x7e\x18\x18\x18\x18\x18\x18\x0\x66\x66\x66\x66\x66\x66\x3c\x0\x66\x66\x66\x66\x3c\x3c\x18\x0\x63\x63\x63\x6b\x7f\x77\x63\x0" "\xc3\x66\x3c\x18\x3c\x66\xc3\x0\xc3\x66\x3c\x18\x18\x18\x18\x0\x7f\x30\x18\xc\x6\x3\x7f\x0\x3c\xc\xc\xc\xc\xc\x3c\x0\x3\x6\xc\x18\x30\x60\xc0\x0\x3c\x30\x30\x30\x30\x30\x3c\x0\x8\x1c\x36\x63\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x7f" "\x18\x18\x30\x0\x0\x0\x0\x0\x0\x0\x3c\x60\x7c\x66\x7c\x0\x6\x6\x3e\x66\x66\x66\x3e\x0\x0\x0\x3c\x6\x6\x6\x3c\x0\x60\x60\x7c\x66\x66\x66\x7c\x0\x0\x0\x3c\x66\x7e\x6\x3c\x0\x38\xc\x3e\xc\xc\xc\xc\x0\x0\x0\x7c\x66\x66\x7c\x60\x3c" "\x6\x6\x3e\x66\x66\x66\x66\x0\x18\x0\x18\x18\x18\x18\x30\x0\x30\x0\x30\x30\x30\x30\x30\x1e\x6\x6\x66\x36\x1e\x36\x66\x0\x18\x18\x18\x18\x18\x18\x30\x0\x0\x0\x37\x7f\x6b\x63\x63\x0\x0\x0\x3e\x66\x66\x66\x66\x0\x0\x0\x3c\x66\x66\x66\x3c\x0" "\x0\x0\x3e\x66\x66\x3e\x6\x6\x0\x0\x7c\x66\x66\x7c\x60\x60\x0\x0\x3e\x66\x6\x6\x6\x0\x0\x0\x3c\x6\x3c\x60\x3e\x0\xc\xc\x3e\xc\xc\xc\x38\x0\x0\x0\x66\x66\x66\x66\x7c\x0\x0\x0\x66\x66\x66\x3c\x18\x0\x0\x0\x63\x63\x6b\x7f\x36\x0" "\x0\x0\x63\x36\x1c\x36\x63\x0\x0\x0\x66\x66\x66\x3c\x18\xc\x0\x0\x7e\x30\x18\xc\x7e\x0\x70\x18\x18\xe\x18\x18\x70\x0\x18\x18\x18\x18\x18\x18\x18\x0\xe\x18\x18\x70\x18\x18\xe\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xff\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xdb\xdb\x0" "\x0\x7e\x0\x7e\x0\x7e\x0\x0\x0\xf8\x8\x8\x8\x8\xf8\x0\x0\xff\x0\x0\x0\x0\xff\x0\x0\x1f\x10\x10\x10\x10\x1f\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x0\x2\x1\x0\x0\x0\x20\x30\x28\x24\x22\xa1\x60\x20\x0\x0\x0\x1\x2\x0\x0\x0" "\x20\x60\xa1\x22\x24\x28\x30\x20\x0\x0\x0\x40\x40\x40\x40\x7f\xff\x81\x81\x81\x81\x80\x80\x80\x0\x0\x0\x20\x20\x11\x11\xe\x38\x44\x44\x82\x82\x0\x0\x0\x0\x0\xfe\x7c\x38\x10\x0\x0\x0\x0\x10\x38\x7c\xfe\x0\x0\x80\xc1\x63\x36\x1c\x8\x0\x0" ), // Font no. 20 FontEntry("INVERSE", 8, 8, "\x0\x0\x0\x0\x0\x0\x0\x0\x7e\x81\xa5\x81\xbd\x99\x81\x7e\x7e\xff\xdb\xff\xff\xc3\xe7\x7e\x0\x77\x7f\x7f\x3e\x1c\x8\x0\x8\x1c\x3e\x7f\x3e\x1c\x8\x0\x18\x3c\x18\xff\xff\x52\x18\x0\x8\x1c\x3e\x7f\x7f\x49\x1c\x0\x0\x0\x18\x3c\x18\x0\x0\x0" "\xff\xff\xe7\xc3\xe7\xff\xff\xff\x0\x3c\x42\x81\x81\x42\x3c\x0\xff\xc3\xbd\x7e\x7e\xbd\xc3\xff\xf8\xe0\xb0\x3e\x63\x63\x3e\x0\x0\x7e\xc3\xc3\x7e\x18\x7e\x18\x20\x60\xe0\x20\x20\x3f\x1f\x0\x30\x50\xb0\xd0\x9f\x8f\xf0\xf0\x81\xc2\xbc\xe4\xa4\xfc\xea\xff" "\x0\x0\x6\x1e\x7e\x1e\x6\x0\x0\x0\x60\x78\x7e\x78\x60\x0\x18\x7e\x18\x18\x18\x18\x7e\x18\x66\x66\x66\x66\x66\x0\x66\x0\xff\x6d\x6e\x6c\x6c\x6c\x6c\x0\x7e\x81\x3e\x42\x42\x7c\x81\x7e\x0\x0\x0\x7e\x7e\x0\x0\x0\x18\x7e\x18\x18\x7e\x18\x0\xff" "\x18\x7e\x18\x18\x18\x18\x18\x0\x18\x18\x18\x18\x18\x7e\x18\x0\x0\x20\x60\xff\x60\x20\x0\x0\x0\x4\x6\xff\x6\x4\x0\x0\x0\x0\x0\x3\x3\x3\xff\x0\x0\x24\x66\xff\x66\x24\x0\x0\x0\x0\x8\x1c\x3e\x7f\x0\x0\x0\x0\x0\x7f\x3e\x1c\x8\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\xc\xc\xc\xc\xc\x0\xc\x0\x66\x66\x0\x0\x0\x0\x0\x0\xa\x1f\xa\x1f\xa\x0\x0\x0\x3e\x4b\xb\x3e\x68\x6b\x3e\x8\xc7\x65\x37\x18\xec\xa6\xe3\x0\x1c\x32\x1c\xa2\x63\x73\x5e\x80\x30\x30\x18\x0\x0\x0\x0\x0" "\x8\x6\x3\x3\x3\x6\x8\x0\x8\x30\x60\x60\x60\x30\x8\x0\x0\x2a\x1c\x7f\x1c\x2a\x0\x0\x0\x18\x18\x7e\x18\x18\x0\x0\x0\x0\x0\x0\x0\x0\x18\xe\x0\x0\x0\xff\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x30\x0\x80\xc0\x60\x30\x18\xc\x6\x3" "\xff\xc3\x99\x99\x99\x99\xc3\xff\xff\xe7\xe3\xe7\xe7\xe7\xc3\xff\xff\xc3\x99\xcf\xe7\xb3\x81\xff\xff\xc3\x9d\xcf\x9f\x99\xc3\xff\xff\xcf\xd7\xdb\x81\xdf\xdf\xff\xff\x81\xf9\xc1\x9f\x9d\xc3\xff\xff\xe3\xf9\xc1\x99\x99\xc3\xff\xff\x81\xbf\xcf\xe7\xe7\xe7\xff" "\xff\xc3\x99\xc3\x99\x99\xc3\xff\xff\xc3\x99\x99\x83\xdf\xe7\xff\x0\xc\x0\x0\x0\xc\x0\x0\x0\xc\x0\x0\x0\xc\x4\x0\x0\x38\xc\x6\xc\x38\x0\x0\x0\x0\x7e\x0\x7e\x0\x0\x0\x0\xe\x18\x30\x18\xe\x0\x0\x3e\x63\x30\x18\xc\x0\xc\x0" "\x3e\x41\x5d\x55\x7d\x1\x3e\x0\xff\xe7\xdb\xdb\x81\xbd\xbd\xff\xff\xc1\x99\xc1\x99\x99\xc1\xff\xff\x83\x39\xf9\xf9\x39\x83\xff\xff\xc1\x99\x99\x99\x99\xc1\xff\xff\x81\xb9\xe1\xe9\xb9\x81\xff\xff\x81\xb9\xe1\xe9\xf9\xf9\xff\xff\xc3\xb9\xf9\x89\xb9\x83\xff" "\x63\x63\x63\x7f\x63\x63\x63\x0\x7e\x18\x18\x18\x18\x18\x7e\x0\x78\x30\x30\x30\x30\x33\x1e\x0\x63\x33\x1b\xf\x1b\x33\x63\x0\xf\x6\x6\x6\x6\x46\x7f\x0\x63\x77\x7f\x6b\x6b\x63\x63\x0\x63\x67\x6f\x7b\x73\x63\x63\x0\x3e\x63\x63\x63\x63\x63\x3e\x0" "\x3f\x66\x66\x3e\x6\x6\xf\x0\x3e\x63\x63\x63\x7b\x73\x3e\x60\x3f\x66\x66\x3e\x66\x66\x67\xc0\x3e\x43\x3\x3e\x60\x63\x3e\x0\x7e\x18\x18\x18\x18\x18\x18\x0\x63\x63\x63\x63\x63\x63\x3e\x0\x63\x63\x63\x63\x63\x36\x1c\x0\x63\x63\x6b\x6b\x6b\x77\x63\x0" "\x63\x36\x1c\x8\x1c\x36\x63\x0\x41\x63\x36\x1c\x8\x8\x1c\x0\x7f\x61\x30\x18\xc\x46\x7f\x0\x38\x18\x18\x18\x18\x18\x18\x38\x3\x6\xc\x18\x30\x60\xc0\x80\xe\xc\xc\xc\xc\xc\xc\xe\x8\x1c\x36\x63\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xff" "\xc\xc\x18\x0\x0\x0\x0\x0\x0\x0\x3e\x60\x7e\x63\x7e\x0\x3\x3\x3f\x63\x63\x63\x3f\x0\x0\x0\x3e\x63\x3\x63\x3e\x0\x60\x60\x7e\x63\x63\x63\x7e\x0\x0\x0\x3e\x63\x7f\x3\x3e\x0\x3c\x66\x6\x3f\x6\x6\x6\x0\x0\x0\xbe\x63\x63\x7e\x60\x3e" "\x3\x3\x3f\x63\x63\x63\x63\x0\x18\x0\x1c\x18\x18\x18\x3c\x0\x30\x0\x38\x30\x30\x30\x33\x1e\x3\x3\x63\x1b\xf\x1b\x63\x0\x1c\x18\x18\x18\x18\x18\x38\x0\x0\x0\x63\x7f\x6b\x6b\x63\x0\x0\x0\x3f\x63\x63\x63\x63\x0\x0\x0\x3e\x63\x63\x63\x3e\x0" "\x0\x0\x3f\x63\x63\x3f\x3\x3\x0\x0\x7e\x63\x63\x7e\x60\xe0\x0\x0\x7b\x6e\x66\x6\x6\x0\x0\x0\x7e\x3\x3e\x60\x3f\x0\x18\x18\x7e\x18\x18\x18\x78\x0\x0\x0\x63\x63\x63\x63\x7e\x0\x0\x0\x63\x63\x63\x36\x1c\x0\x0\x0\x63\x6b\x6b\x77\x63\x0" "\x0\x0\x63\x36\x1c\x36\x63\x0\x0\x0\x63\x63\x63\x7e\x60\x3f\x0\x0\x7f\x30\x8\x46\x7f\x0\x70\x18\x18\xe\x18\x18\x70\x0\x18\x18\x18\x0\x18\x18\x18\x0\x7\xc\xc\x38\xc\xc\x7\x0\xe\xd9\x70\x0\x0\x0\x0\x0\x0\x0\x8\x14\x22\x7f\x0\x0" "\xff\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\x1\x80\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\xff" "\x1\x0\x0\x0\x0\x0\x0\x0\x80\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x1\x0\x0\x0\x0\x0\x0\x0\x80\x1\x3\x7\xf\x1f\x3f\x7f\xff\xff\xfe\xfc\xf8\xf0\xe0\xc0\x80\xff\xff\xff\x7\x7\x7\x7\x7\xff\xff\xff\x0\x0\x0\x0\x0" "\xff\xff\xff\xe0\xe0\xe0\xe0\xe0\x7\x7\x7\x7\x7\x7\x7\x7\xe0\xe0\xe0\xe0\xe0\xe0\xe0\xe0\x7\x7\x7\x7\x7\xff\xff\xff\x0\x0\x0\x0\x0\xff\xff\xff\xe0\xe0\xe0\xe0\xe0\xff\xff\xff\x7\x3\x1\x0\x0\x0\x0\x0\xe0\xc0\x80\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x1\x3\x7\x0\x0\x0\x0\x0\x80\xc0\xe0\x0\x0\x0\xee\x0\x0\x0\x0\x0\x3f\x3f\x3f\x3f\x3f\x3f\x0\x0\x7e\x7e\x7e\x7e\x7e\x7e\x0\x0\xfc\xfc\xfc\xfc\xfc\xfc\x0\x0\xf8\xf8\xf8\xf8\xf8\xf8\x0\x0\xf0\xf0\xf0\xf0\xf0\xf0\x0" "\x0\xe0\xe0\xe0\xe0\xe0\xe0\x0\x0\xc0\xc0\xc0\xc0\xc0\xc0\x0\x0\x80\x80\x80\x80\x80\x80\x0\x0\x1\x1\x1\x1\x1\x1\x0\x0\x3\x3\x3\x3\x3\x3\x0\x0\x7\x7\x7\x7\x7\x7\x0\x0\xf\xf\xf\xf\xf\xf\x0\x0\x1f\x1f\x1f\x1f\x1f\x1f\x0" "\x7e\x7e\x7e\x7e\x7e\x7e\x7e\x7e\xff\xff\x0\x18\x3c\x7e\xff\x0\xff\xff\x0\x0\x0\x0\x18\x18\xff\xff\x0\x18\x3c\x7e\xff\x18\xff\xff\x0\x42\x66\x5a\x42\x42\x0\x0\x0\x0\x18\x0\x0\x0\x0\x3\x3\x3\x3\x3\x3\x3\x0\x1b\x1b\x1b\x1b\x1b\x1b\x1b" "\x0\xdb\xdb\xdb\xdb\xdb\xdb\xdb\x0\x6\x6\x6\x6\x6\x6\x6\x0\x36\x36\x36\x36\x36\x36\x36\x0\xb6\xb6\xb6\xb6\xb6\xb6\xb6\x0\x1\x1\x1\x1\x1\x1\x1\x0\xd\xd\xd\xd\xd\xd\xd\x0\x6d\x6d\x6d\x6d\x6d\x6d\x6d\x0\x0\x18\x3c\x3c\x18\x0\x0" "\x0\x0\x0\x1f\x18\x1f\x18\x18\x6c\x6c\x6c\x6f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x0\x0\x0\x7f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6f\x60\x7f\x0\x0\x6c\x6c\x6c\x7f\x0\x0\x0\x0\x18\x18\x18\x1f\x18\x1f\x0\x0\x0\x0\x0\x1f\x18\x18\x18\x18" "\x18\x18\x18\xf8\x0\x0\x0\x0\x18\x18\x18\xff\x0\x0\x0\x0\x0\x0\x0\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\x18\x18\x18\x0\x0\x0\x0\xff\x0\x0\x0\x18\x18\x18\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\xf8\x18\x18\x6c\x6c\x6c\xec\x6c\x6c\x6c\x6c" "\x6c\x6c\x6c\xec\xc\xfc\x0\x0\x0\x0\x0\xfc\xc\xec\x6c\x6c\x6c\x6c\x6c\xef\x0\xff\x0\x0\x0\x0\x0\xff\x0\xef\x6c\x6c\x6c\x6c\x6c\xec\xc\xec\x6c\x6c\x0\x0\x0\xff\x0\xff\x0\x0\x6c\x6c\x6c\xef\x0\xef\x6c\x6c\x18\x18\x18\xff\x0\xff\x0\x0" "\x6c\x6c\x6c\xff\x0\x0\x0\x0\x0\x0\x0\xff\x0\xff\x18\x18\x0\x0\x0\xff\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xfc\x0\x0\x0\x0\x18\x18\x18\xf8\x18\xf8\x0\x0\x0\x0\x0\xf8\x18\xf8\x18\x18\x0\x0\x0\xfc\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xff\x6c\x6c\x6c\x6c" "\x18\x18\x18\xff\x18\xff\x18\x18\x18\x18\x18\x1f\x0\x0\x0\x0\x0\x0\x0\xf8\x18\x18\x18\x18\xff\xff\xff\xff\xff\xff\xff\xff\x0\x0\x0\x0\xff\xff\xff\xff\xf\xf\xf\xf\xf\xf\xf\xf\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xff\xff\xff\xff\x0\x0\x0\x0" "\x0\x0\xee\x19\x19\xee\x0\x0\x38\x6c\x66\x3f\x63\x63\x3f\x3\x7f\x46\x6\x6\x6\x6\x6\x0\x0\x0\xff\x66\x66\x66\x66\x0\x7f\x46\xc\x18\xc\x46\x7f\x0\x0\x0\xfc\x66\x63\x33\x1e\x0\x0\x0\xcc\xcc\xcc\x7c\xc\xf\x0\x0\xff\x18\x18\x18\x18\x0" "\x3c\x18\x3c\x66\x66\x3c\x18\x3c\x0\x3e\x63\x7f\x63\x3e\x0\x0\x0\x7e\xc3\xc3\xc3\x66\xe7\x0\x78\x98\x3c\x66\x63\x33\x1e\x0\x0\x0\x66\x99\x99\x66\x0\x0\x0\xc0\x3e\x73\x67\x3e\x3\x0\x0\x7c\x3\x7f\x3\x7c\x0\x0\x0\x0\x0\x0\x0\xdb\xdb\x0" "\x0\x7e\x0\x7e\x0\x7e\x0\x0\x0\xf8\x8\x8\x8\x8\xf8\x0\x0\xff\x0\x0\x0\x0\xff\x0\x0\x1f\x10\x10\x10\x10\x1f\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x0\x2\x1\x0\x0\x0\x20\x30\x28\x24\x22\xa1\x60\x20\x0\x0\x0\x1\x2\x0\x0\x0" "\x20\x60\xa1\x22\x24\x28\x30\x20\x0\x0\x0\x40\x40\x40\x40\x7f\xff\x81\x81\x81\x81\x80\x80\x80\x0\x0\x0\x20\x20\x11\x11\xe\x38\x44\x44\x82\x82\x0\x0\x0\x0\x0\xfe\x7c\x38\x10\x0\x0\x0\x0\x10\x38\x7c\xfe\x0\x0\x80\xc1\x63\x36\x1c\x8\x0\x0" ), // Font no. 21 FontEntry("J-CURSE", 8, 8, "\x0\x0\x0\x0\x0\x0\x0\x0\x7e\x81\xa5\x81\xbd\x99\x81\x7e\x7e\xff\xdb\xff\xff\xc3\xe7\x7e\x0\x77\x7f\x7f\x3e\x1c\x8\x0\x8\x1c\x3e\x7f\x3e\x1c\x8\x0\x18\x3c\x18\xff\xff\x52\x18\x0\x8\x1c\x3e\x7f\x7f\x49\x1c\x0\x0\x0\x18\x3c\x18\x0\x0\x0" "\xff\xff\xe7\xc3\xe7\xff\xff\xff\x0\x3c\x42\x81\x81\x42\x3c\x0\xff\xc3\xbd\x7e\x7e\xbd\xc3\xff\xf8\xe0\xb0\x3e\x63\x63\x3e\x0\x0\x7e\xc3\xc3\x7e\x18\x7e\x18\x20\x60\xe0\x20\x20\x3f\x1f\x0\x30\x50\xb0\xd0\x9f\x8f\xf0\xf0\x81\xc2\xbc\xe4\xa4\xfc\xea\xff" "\x0\x0\x6\x1e\x7e\x1e\x6\x0\x0\x0\x60\x78\x7e\x78\x60\x0\x18\x7e\x18\x18\x18\x18\x7e\x18\x66\x66\x66\x66\x66\x0\x66\x0\xff\x6d\x6e\x6c\x6c\x6c\x6c\x0\x7e\x81\x3e\x42\x42\x7c\x81\x7e\x0\x0\x0\x7e\x7e\x0\x0\x0\x18\x7e\x18\x18\x7e\x18\x0\xff" "\x18\x7e\x18\x18\x18\x18\x18\x0\x18\x18\x18\x18\x18\x7e\x18\x0\x0\x20\x60\xff\x60\x20\x0\x0\x0\x4\x6\xff\x6\x4\x0\x0\x0\x0\x0\x3\x3\x3\xff\x0\x0\x24\x66\xff\x66\x24\x0\x0\x0\x0\x8\x1c\x3e\x7f\x0\x0\x0\x0\x0\x7f\x3e\x1c\x8\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x18\x18\x18\xc\xc\x0\xc\x0\x6c\x36\x1b\x0\x0\x0\x0\x0\x0\x6c\xfe\x6c\x6c\xfe\x6c\x0\x18\x7e\x3\x3e\x60\x3f\xc\x0\x0\x66\x33\x18\xcc\x66\x0\x0\x1c\x36\x1c\xb6\x63\x73\xde\x0\x60\x30\x18\x0\x0\x0\x0\x0" "\x30\x18\x18\x18\x18\x18\x18\x30\x6\xc\xc\xc\xc\xc\xc\x6\x8\x2a\x1c\x7f\x1c\x2a\x8\x0\x0\x18\x18\x7e\x18\x18\x0\x0\x0\x0\x0\x0\x0\x0\x18\xc\x0\x0\x0\x7e\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xc\x0\x0\xc0\x60\x30\x18\xc\x6\x0" "\x3c\x66\x66\x6b\x6b\x63\x3e\x0\x30\x38\x30\x18\x18\x18\x18\x0\x3e\x63\x60\x3c\x6\x3\x7f\x0\x3c\x66\x60\x3c\x60\x63\x3e\x0\x66\x66\x66\x63\x7f\x60\x60\x0\x7e\x6\x6\x3e\x60\x60\x3f\x0\x3c\x66\x6\x3f\x63\x63\x3e\x0\x7f\x60\x30\x18\xc\xc\xc\x0" "\x3c\x66\x66\x3e\x63\x63\x3e\x0\x3c\x66\x66\x7c\x60\x60\x3f\x0\x0\xc\x0\x0\x0\xc\x0\x0\x0\xc\x0\x0\x0\xc\x6\x0\x0\x18\xc\x6\xc\x18\x0\x0\x0\x0\x7e\x0\x7e\x0\x0\x0\x0\xc\x18\x30\x18\xc\x0\x0\x3e\x63\x60\x38\xc\x0\xc\x0" "\x7e\xc3\xdb\xdb\x7b\x3\x3e\x0\x7c\x66\x66\x7f\x63\x63\x63\x0\x7c\x66\x66\x7f\x63\x63\x3f\x0\x7c\x66\x6\x3\x3\x63\x3f\x0\x7c\x66\x66\x63\x63\x63\x3f\x0\x7c\x6\x6\x7f\x3\x3\x7f\x0\x7c\x6\x6\x7f\x3\x3\x3\x0\x7c\x66\x6\x73\x63\x63\x3f\x0" "\xc6\xc6\xc6\x7f\x63\x63\x63\x0\x30\x30\x30\x18\x18\x18\x18\x0\x60\x60\x60\x60\x30\x33\x1e\x0\x66\x36\x1e\xf\x1b\x33\x63\x0\x6\x6\x6\x3\x3\x3\x7f\x0\x66\x7e\x7e\x6b\x6b\x63\x63\x0\x66\x6e\x7e\x7b\x73\x63\x63\x0\x3c\x66\x66\x63\x63\x63\x3e\x0" "\x3c\x66\x66\x3f\x3\x3\x3\x0\x3c\x66\x66\x63\x63\x5b\x36\x60\x3e\x66\x66\x3f\x63\x63\x63\x0\x3c\x66\x6\x3c\x60\x63\x3e\x0\xfe\x30\x30\x18\x18\x18\x18\x0\xc6\xc6\xc6\x63\x63\x63\x3e\x0\xc6\xc6\xc6\x63\x63\x36\x1c\x0\xc6\xc6\xc6\x63\x6b\x6b\x3e\x0" "\xc6\x6c\x38\x18\x3c\x66\xc3\x0\x66\x66\x3c\x18\xc\xc\xc\x0\x7f\x60\x30\x1c\x6\x3\x7f\x0\x38\x18\x18\x18\x18\x18\x18\x38\x0\x6\xc\x18\x30\x60\xc0\x0\xe\xc\xc\xc\xc\xc\xc\xe\x18\x3c\x66\xc3\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xff" "\xc\x18\x30\x0\x0\x0\x0\x0\x0\x0\x7c\xc0\xfe\x63\x7e\x0\x6\x6\x3e\x63\x63\x63\x3f\x0\x0\x0\x3c\x66\x3\x63\x3e\x0\xc0\xc0\xfc\x66\x63\x63\x7e\x0\x0\x0\x3c\x66\x7f\x3\x7e\x0\x38\xc\xc\x3f\x6\x6\x6\x0\x0\x0\x3c\x66\x63\x7e\x60\x3e" "\x6\x6\x3e\x63\x63\x63\x63\x0\x30\x0\x30\x30\x18\x18\x18\x0\x60\x0\x60\x60\x30\x30\x30\x1f\x6\x6\x36\x1b\xf\x1b\x33\x0\x30\x30\x30\x18\x18\x18\x18\x0\x0\x0\x3e\x6b\x6b\x6b\x6b\x0\x0\x0\x3c\x66\x63\x63\x63\x0\x0\x0\x3c\x66\x63\x63\x3e\x0" "\x0\x0\x3c\x66\x63\x3f\x3\x3\x0\x0\x7c\x66\x63\x7e\x60\x60\x0\x0\x3e\x63\x3\x3\x3\x0\x0\x0\x3c\x6\x3c\x60\x3e\x0\x30\x30\x7c\x18\x18\x18\x18\x0\x0\x0\x66\x66\x63\x63\x3e\x0\x0\x0\xc6\xc6\x66\x36\x1c\x0\x0\x0\x6b\x6b\x6b\x6b\x3f\x0" "\x0\x0\x63\x36\x1c\x36\x63\x0\x0\x0\xc6\xc6\x63\x7e\x60\x3f\x0\x0\x7f\x30\x1c\x6\x7f\x0\x30\x18\x18\xc\x18\x18\x30\x0\x18\x18\x18\x18\x18\x18\x18\x18\x6\xc\xc\x18\xc\xc\x6\x0\xe\xdb\x70\x0\x0\x0\x0\x0\x0\x0\x8\x14\x22\x7f\x0\x0" "\xff\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\x1\x80\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\xff" "\x1\x0\x0\x0\x0\x0\x0\x0\x80\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x1\x0\x0\x0\x0\x0\x0\x0\x80\x1\x3\x7\xf\x1f\x3f\x7f\xff\xff\xfe\xfc\xf8\xf0\xe0\xc0\x80\xff\xff\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0" "\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\x3\x3\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\xff\xff\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\x0\x55\x0\x0\x0\x0\x0\x3f\x3f\x3f\x3f\x3f\x3f\x0\x0\x7e\x7e\x7e\x7e\x7e\x7e\x0\x0\xfc\xfc\xfc\xfc\xfc\xfc\x0\x0\xf8\xf8\xf8\xf8\xf8\xf8\x0\x0\xf0\xf0\xf0\xf0\xf0\xf0\x0" "\x0\xe0\xe0\xe0\xe0\xe0\xe0\x0\x0\xc0\xc0\xc0\xc0\xc0\xc0\x0\x0\x80\x80\x80\x80\x80\x80\x0\x0\x1\x1\x1\x1\x1\x1\x0\x0\x3\x3\x3\x3\x3\x3\x0\x0\x7\x7\x7\x7\x7\x7\x0\x0\xf\xf\xf\xf\xf\xf\x0\x0\x1f\x1f\x1f\x1f\x1f\x1f\x0" "\x55\x6b\x55\x6b\x55\x6b\x55\x6b\xff\xff\x0\x0\x0\x8\x1c\x3e\xff\xff\x0\x0\x0\x0\x0\x7f\xff\xff\x0\x0\x8\x1c\x3e\x7f\xff\xff\x0\xc3\xe7\xff\xdb\xc3\x0\x0\x0\x0\x18\x0\x0\x0\x0\x3\x3\x3\x3\x3\x3\x3\x0\x1b\x1b\x1b\x1b\x1b\x1b\x1b" "\x0\xdb\xdb\xdb\xdb\xdb\xdb\xdb\x0\x6\x6\x6\x6\x6\x6\x6\x0\x36\x36\x36\x36\x36\x36\x36\x0\xb6\xb6\xb6\xb6\xb6\xb6\xb6\x0\x1\x1\x1\x1\x1\x1\x1\x0\xd\xd\xd\xd\xd\xd\xd\x0\x6d\x6d\x6d\x6d\x6d\x6d\x6d\x0\x0\x18\x3c\x3c\x18\x0\x0" "\x0\x0\x0\x1f\x18\x1f\x18\x18\x6c\x6c\x6c\x6f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x0\x0\x0\x7f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6f\x60\x7f\x0\x0\x6c\x6c\x6c\x7f\x0\x0\x0\x0\x18\x18\x18\x1f\x18\x1f\x0\x0\x0\x0\x0\x1f\x18\x18\x18\x18" "\x18\x18\x18\xf8\x0\x0\x0\x0\x18\x18\x18\xff\x0\x0\x0\x0\x0\x0\x0\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\x18\x18\x18\x0\x0\x0\x0\xff\x0\x0\x0\x18\x18\x18\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\xf8\x18\x18\x6c\x6c\x6c\xec\x6c\x6c\x6c\x6c" "\x6c\x6c\x6c\xec\xc\xfc\x0\x0\x0\x0\x0\xfc\xc\xec\x6c\x6c\x6c\x6c\x6c\xef\x0\xff\x0\x0\x0\x0\x0\xff\x0\xef\x6c\x6c\x6c\x6c\x6c\xec\xc\xec\x6c\x6c\x0\x0\x0\xff\x0\xff\x0\x0\x6c\x6c\x6c\xef\x0\xef\x6c\x6c\x18\x18\x18\xff\x0\xff\x0\x0" "\x6c\x6c\x6c\xff\x0\x0\x0\x0\x0\x0\x0\xff\x0\xff\x18\x18\x0\x0\x0\xff\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xfc\x0\x0\x0\x0\x18\x18\x18\xf8\x18\xf8\x0\x0\x0\x0\x0\xf8\x18\xf8\x18\x18\x0\x0\x0\xfc\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xff\x6c\x6c\x6c\x6c" "\x18\x18\x18\xff\x18\xff\x18\x18\x18\x18\x18\x1f\x0\x0\x0\x0\x0\x0\x0\xf8\x18\x18\x18\x18\xff\xff\xff\xff\xff\xff\xff\xff\x0\x0\x0\x0\xff\xff\xff\xff\xf\xf\xf\xf\xf\xf\xf\xf\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xff\xff\xff\xff\x0\x0\x0\x0" "\x0\x0\xee\x19\x19\xee\x0\x0\x38\x6c\x66\x3f\x63\x63\x3f\x3\x7f\x46\x6\x6\x6\x6\x6\x0\x0\x0\xff\x66\x66\x66\x66\x0\x7f\x46\xc\x18\xc\x46\x7f\x0\x0\x0\xfc\x66\x63\x33\x1e\x0\x0\x0\xcc\xcc\xcc\x7c\xc\xf\x0\x0\xff\x18\x18\x18\x18\x0" "\x3c\x18\x3c\x66\x66\x3c\x18\x3c\x0\x3e\x63\x7f\x63\x3e\x0\x0\x0\x7e\xc3\xc3\xc3\x66\xe7\x0\x78\x98\x3c\x66\x63\x33\x1e\x0\x0\x0\x66\x99\x99\x66\x0\x0\x0\xc0\x3e\x73\x67\x3e\x3\x0\x0\x7c\x3\x7f\x3\x7c\x0\x0\x0\x0\x0\x0\x0\xdb\xdb\x0" "\x0\x7e\x0\x7e\x0\x7e\x0\x0\x0\xf8\x8\x8\x8\x8\xf8\x0\x0\xff\x0\x0\x0\x0\xff\x0\x0\x1f\x10\x10\x10\x10\x1f\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x0\x2\x1\x0\x0\x0\x20\x30\x28\x24\x22\xa1\x60\x20\x0\x0\x0\x1\x2\x0\x0\x0" "\x20\x60\xa1\x22\x24\x28\x30\x20\x0\x0\x0\x40\x40\x40\x40\x7f\xff\x81\x81\x81\x81\x80\x80\x80\x0\x0\x0\x20\x20\x11\x11\xe\x38\x44\x44\x82\x82\x0\x0\x0\x0\x0\xfe\x7c\x38\x10\x0\x0\x0\x0\x10\x38\x7c\xfe\x0\x0\x80\xc1\x63\x36\x1c\x8\x0\x0" ), // Font no. 22 FontEntry("J-ELECTR", 8, 8, "\x0\x0\x0\x0\x0\x0\x0\x0\x7e\x81\xa5\x81\xbd\x99\x81\x7e\x7e\xff\xdb\xff\xc3\xe7\xff\x7e\x36\x7f\x7f\x7f\x3e\x1c\x8\x0\x8\x1c\x3e\x7f\x3e\x1c\x8\x0\x1c\x3e\x1c\x7f\x7f\x49\x8\x3e\x0\x8\x1c\x3e\x7f\x3e\x1c\x3e\x0\x0\x18\x3c\x3c\x18\x0\x0" "\xff\xff\xe7\xc3\xc3\xe7\xff\xff\x0\x3c\x66\x42\x42\x66\x3c\x0\xff\xc3\x99\xbd\xbd\x99\xc3\xff\xf0\xe0\xf0\xbe\x33\x33\x33\x1e\x3c\x66\x66\x66\x3c\x18\x7e\x18\xfc\xcc\xfc\xc\xc\xe\xf\x7\xfe\xc6\xfe\xc6\xc6\xe6\x67\x3\x99\x5a\x3c\xe7\xe7\x3c\x5a\x99" "\x1\x7\x1f\x7f\x1f\x7\x1\x0\x40\x70\x7c\x7f\x7c\x70\x40\x0\x18\x3c\x7e\x18\x18\x7e\x3c\x18\x66\x66\x66\x66\x66\x0\x66\x0\xfe\xdb\xdb\xde\xd8\xd8\xd8\x0\x7c\xc6\x1c\x36\x36\x1c\x61\x3f\x0\x0\x0\x0\x7e\x7e\x7e\x0\x18\x3c\x7e\x18\x7e\x3c\x18\xff" "\x18\x3c\x7e\x18\x18\x18\x18\x0\x18\x18\x18\x18\x7e\x3c\x18\x0\x0\x18\x30\x7f\x30\x18\x0\x0\x0\xc\x6\x7f\x6\xc\x0\x0\x0\x0\x3\x3\x3\x7f\x0\x0\x0\x24\x66\xff\x66\x24\x0\x0\x0\x18\x3c\x7e\xff\xff\x0\x0\x0\xff\xff\x7e\x3c\x18\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x8\x8\x8\x8\x8\x0\x8\x0\x24\x24\x24\x0\x0\x0\x0\x0\x22\x7f\x22\x22\x22\x7f\x22\x0\x14\x7e\x15\x3e\x54\x3f\x14\x0\x0\x44\x22\x10\x8\x44\x22\x0\x1c\x22\x14\x6a\x11\x11\x6e\x0\x10\x10\x10\x0\x0\x0\x0\x0" "\x10\x8\x4\x4\x4\x8\x10\x0\x4\x8\x10\x10\x10\x8\x4\x0\x8\x2a\x1c\x7f\x1c\x2a\x8\x0\x0\x8\x8\x3e\x8\x8\x0\x0\x0\x0\x0\x0\x0\x8\x4\x0\x0\x0\x0\x7e\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x8\x0\x0\x40\x20\x10\x8\x4\x2\x0" "\x1c\x22\x51\x49\x45\x22\x1c\x0\xe\x8\x8\x8\x8\x28\x3e\x0\x1f\x20\x20\x1e\x1\x1\x3f\x0\x1f\x20\x20\x1c\x20\x20\x1f\x0\x1\x21\x21\x21\x7f\x20\x20\x0\x3f\x1\x1\x1f\x20\x20\x1f\x0\x1\x1\x1\x3f\x41\x41\x3e\x0\x3f\x20\x20\x10\x8\x8\x8\x0" "\x1c\x22\x22\x3e\x41\x41\x3e\x0\x3e\x41\x41\x7e\x40\x40\x40\x0\x0\x0\x8\x0\x0\x8\x0\x0\x0\x0\x8\x0\x0\x8\x4\x0\x20\x10\x8\x4\x8\x10\x20\x0\x0\x0\x7e\x0\x7e\x0\x0\x0\x4\x8\x10\x20\x10\x8\x4\x0\x3c\x42\x40\x20\x10\x0\x10\x0" "\x3c\x42\x99\xa5\x59\x2\x7c\x0\x3c\x42\x41\x41\x7f\x41\x41\x0\x3f\x41\x41\x3f\x41\x41\x3f\x0\x7c\x2\x1\x1\x1\x2\x7c\x0\x3f\x41\x41\x41\x41\x41\x3f\x0\x7f\x1\x1\x7f\x1\x1\x7f\x0\x7f\x1\x1\x7f\x1\x1\x1\x0\x7c\x2\x1\x71\x41\x41\x3e\x0" "\x41\x41\x41\x7f\x41\x41\x41\x0\x8\x8\x8\x8\x8\x8\x8\x0\x40\x40\x40\x40\x40\x20\x1e\x0\x21\x11\x9\x7\x9\x11\x21\x0\x1\x1\x1\x1\x1\x1\x7f\x0\x1f\x29\x49\x49\x49\x49\x49\x0\x1f\x21\x41\x41\x41\x41\x41\x0\x3c\x42\x41\x41\x41\x21\x1e\x0" "\x3f\x41\x41\x41\x3f\x1\x1\x0\x3c\x42\x41\x41\x41\x51\x2e\x40\x3f\x41\x41\x21\x1f\x21\x41\x0\x7c\x2\x1\x3e\x40\x40\x3f\x0\x3e\x8\x8\x8\x8\x8\x8\x0\x41\x41\x41\x41\x41\x41\x3e\x0\x41\x41\x41\x41\x41\x22\x1c\x0\x49\x49\x49\x49\x49\x49\x3f\x0" "\x41\x41\x22\x1c\x22\x41\x41\x0\x41\x22\x14\x8\x8\x8\x8\x0\x7f\x40\x30\x8\x6\x1\x7f\x0\xe\x2\x2\x2\x2\x2\xe\x0\x0\x2\x4\x8\x10\x20\x40\x0\x1c\x10\x10\x10\x10\x10\x1c\x0\x8\x14\x22\x41\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xff" "\x4\x4\x4\x0\x0\x0\x0\x0\x0\x0\x3e\x40\x7e\x41\x7e\x0\x1\x1\x3f\x41\x41\x41\x3f\x0\x0\x0\x7e\x1\x1\x1\x7e\x0\x40\x40\x7e\x41\x41\x41\x7e\x0\x0\x0\x3e\x41\x7f\x1\x7e\x0\x3c\x2\x1f\x2\x2\x2\x2\x0\x0\x0\x3e\x41\x41\x7e\x40\x3f" "\x1\x1\x1f\x21\x41\x41\x41\x0\x10\x0\x1c\x10\x10\x10\x10\x0\x20\x0\x38\x20\x20\x20\x10\xf\x1\x1\x21\x11\xf\x11\x21\x0\x4\x4\x4\x4\x4\x4\x18\x0\x0\x0\x3f\x49\x49\x49\x49\x0\x0\x0\x1f\x21\x41\x41\x41\x0\x0\x0\x3e\x41\x41\x41\x3e\x0" "\x0\x0\x3f\x41\x41\x3f\x1\x1\x0\x0\x7e\x41\x41\x7e\x40\x40\x0\x0\x3f\x41\x1\x1\x1\x0\x0\x0\x3e\x1\x1e\x20\x1f\x0\x8\x8\x3e\x8\x8\x8\x30\x0\x0\x0\x41\x41\x41\x41\x3e\x0\x0\x0\x41\x41\x41\x22\x1c\x0\x0\x0\x49\x49\x49\x49\x3f\x0" "\x0\x0\x41\x22\x1c\x22\x41\x0\x0\x0\x41\x41\x41\x7e\x40\x3f\x0\x0\x7f\x20\x1c\x2\x7f\x0\x60\x10\x10\xc\x10\x10\x60\x0\x8\x8\x8\x8\x8\x8\x8\x8\x6\x8\x8\x30\x8\x8\x6\x0\x26\x19\x0\x0\x0\x0\x0\x0\x0\x8\x1c\x36\x63\x63\x7f\x0" "\xff\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\x1\x80\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\xff" "\x1\x0\x0\x0\x0\x0\x0\x0\x80\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x1\x0\x0\x0\x0\x0\x0\x0\x80\x1\x3\x7\xf\x1f\x3f\x7f\xff\xff\xfe\xfc\xf8\xf0\xe0\xc0\x80\xff\xff\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0" "\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\x3\x3\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\xff\xff\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\x0\xaa\x0\x0\x0\x0\x0\x3f\x3f\x3f\x3f\x3f\x3f\x0\x0\x7e\x7e\x7e\x7e\x7e\x7e\x0\x0\xfc\xfc\xfc\xfc\xfc\xfc\x0\x0\xf8\xf8\xf8\xf8\xf8\xf8\x0\x0\xf0\xf0\xf0\xf0\xf0\xf0\x0" "\x0\xe0\xe0\xe0\xe0\xe0\xe0\x0\x0\xc0\xc0\xc0\xc0\xc0\xc0\x0\x0\x80\x80\x80\x80\x80\x80\x0\x0\x1\x1\x1\x1\x1\x1\x0\x0\x3\x3\x3\x3\x3\x3\x0\x0\x7\x7\x7\x7\x7\x7\x0\x0\xf\xf\xf\xf\xf\xf\x0\x0\x1f\x1f\x1f\x1f\x1f\x1f\x0" "\x7e\x7e\x7e\x7e\x7e\x7e\x7e\x7e\xff\xff\x0\x18\x3c\x7e\xff\x0\xff\xff\x0\x0\x0\x0\x18\x18\xff\xff\x0\x18\x3c\x7e\xff\x18\xff\xff\x0\x42\x66\x5a\x42\x42\x0\x0\x0\x18\x18\x0\x0\x0\x0\x3\x3\x3\x3\x3\x3\x3\x0\x1b\x1b\x1b\x1b\x1b\x1b\x1b" "\x0\xdb\xdb\xdb\xdb\xdb\xdb\xdb\x0\x6\x6\x6\x6\x6\x6\x6\x0\x36\x36\x36\x36\x36\x36\x36\x0\xb6\xb6\xb6\xb6\xb6\xb6\xb6\x0\x1\x1\x1\x1\x1\x1\x1\x0\xd\xd\xd\xd\xd\xd\xd\x0\x6d\x6d\x6d\x6d\x6d\x6d\x6d\x0\x0\x18\x3c\x3c\x18\x0\x0" "\x0\x0\x1f\x18\x1f\x18\x18\x18\x6c\x6c\x6f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x0\x0\x7f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6f\x60\x7f\x0\x0\x0\x6c\x6c\x6c\x6c\x7f\x0\x0\x0\x18\x18\x1f\x18\x1f\x0\x0\x0\x0\x0\x0\x0\x1f\x18\x18\x18" "\x18\x18\x18\x18\xf8\x0\x0\x0\x18\x18\x18\x18\xff\x0\x0\x0\x0\x0\x0\x0\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\x18\x18\x0\x0\x0\x0\xff\x0\x0\x0\x18\x18\x18\x18\xff\x18\x18\x18\x18\x18\xf8\x18\xf8\x18\x18\x18\x6c\x6c\x6c\x6c\xec\x6c\x6c\x6c" "\x6c\x6c\xec\xc\xfc\x0\x0\x0\x0\x0\xfc\xc\xec\x6c\x6c\x6c\x6c\x6c\xef\x0\xff\x0\x0\x0\x0\x0\xff\x0\xef\x6c\x6c\x6c\x6c\x6c\xec\xc\xec\x6c\x6c\x6c\x0\x0\xff\x0\xff\x0\x0\x0\x6c\x6c\xef\x0\xef\x6c\x6c\x6c\x18\x18\xff\x0\xff\x0\x0\x0" "\x6c\x6c\x6c\x6c\xff\x0\x0\x0\x0\x0\xff\x0\xff\x18\x18\x18\x0\x0\x0\x0\xff\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xfc\x0\x0\x0\x18\x18\xf8\x18\xf8\x0\x0\x0\x0\x0\xf8\x18\xf8\x18\x18\x18\x0\x0\x0\x0\xfc\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xff\x6c\x6c\x6c" "\x18\x18\xff\x18\xff\x18\x18\x18\x18\x18\x18\x18\x1f\x0\x0\x0\x0\x0\x0\x0\xf8\x18\x18\x18\xff\xff\xff\xff\xff\xff\xff\xff\x0\x0\x0\x0\xff\xff\xff\xff\xf\xf\xf\xf\xf\xf\xf\xf\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xff\xff\xff\xff\x0\x0\x0\x0" "\x0\x0\x6e\x3b\x13\x3b\x6e\x0\x0\x1e\x33\x1f\x33\x1f\x3\x3\x0\x3f\x33\x3\x3\x3\x3\x0\x0\x0\x7f\x36\x36\x36\x36\x0\x3f\x33\x6\xc\x6\x33\x3f\x0\x0\x0\x7e\x1b\x1b\x1b\xe\x0\x0\x66\x66\x66\x66\x3e\x6\x3\x0\x6e\x3b\x18\x18\x18\x18\x0" "\x3f\xc\x1e\x33\x33\x1e\xc\x3f\x1c\x36\x63\x7f\x63\x36\x1c\x0\x1c\x36\x63\x63\x36\x36\x77\x0\x38\xc\x18\x3e\x33\x33\x1e\x0\x0\x0\x7e\xdb\xdb\x7e\x0\x0\x60\x30\x7e\xdb\xdb\x7e\x6\x3\x1c\x6\x3\x1f\x3\x6\x1c\x0\x0\x0\x0\x0\x0\xdb\xdb\x0" "\x0\x7e\x0\x7e\x0\x7e\x0\x0\x0\xf8\x8\x8\x8\x8\xf8\x0\x0\xff\x0\x0\x0\x0\xff\x0\x0\x1f\x10\x10\x10\x10\x1f\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x0\x2\x1\x0\x0\x0\x20\x30\x28\x24\x22\xa1\x60\x20\x0\x0\x0\x1\x2\x0\x0\x0" "\x20\x60\xa1\x22\x24\x28\x30\x20\x0\x0\x0\x40\x40\x40\x40\x7f\xff\x81\x81\x81\x81\x80\x80\x80\x0\x0\x0\x20\x20\x11\x11\xe\x38\x44\x44\x82\x82\x0\x0\x0\x0\x0\xfe\x7c\x38\x10\x0\x0\x0\x0\x10\x38\x7c\xfe\x0\x0\x80\xc1\x63\x36\x1c\x8\x0\x0" ), // Font no. 23 FontEntry("J-FLUX", 8, 8, "\x0\x0\x0\x0\x0\x0\x0\x0\x7e\x81\xa5\x81\xbd\x99\x81\x7e\x7e\xff\xdb\xff\xc3\xe7\xff\x7e\x36\x7f\x7f\x7f\x3e\x1c\x8\x0\x8\x1c\x3e\x7f\x3e\x1c\x8\x0\x1c\x3e\x1c\x7f\x7f\x49\x8\x3e\x0\x8\x1c\x3e\x7f\x3e\x1c\x3e\x0\x0\x18\x3c\x3c\x18\x0\x0" "\xff\xff\xe7\xc3\xc3\xe7\xff\xff\x0\x3c\x66\x42\x42\x66\x3c\x0\xff\xc3\x99\xbd\xbd\x99\xc3\xff\xf0\xe0\xf0\xbe\x33\x33\x33\x1e\x3c\x66\x66\x66\x3c\x18\x7e\x18\xfc\xcc\xfc\xc\xc\xe\xf\x7\xfe\xc6\xfe\xc6\xc6\xe6\x67\x3\x99\x5a\x3c\xe7\xe7\x3c\x5a\x99" "\x1\x7\x1f\x7f\x1f\x7\x1\x0\x40\x70\x7c\x7f\x7c\x70\x40\x0\x18\x3c\x7e\x18\x18\x7e\x3c\x18\x66\x66\x66\x66\x66\x0\x66\x0\xfe\xdb\xdb\xde\xd8\xd8\xd8\x0\x7c\xc6\x1c\x36\x36\x1c\x61\x3f\x0\x0\x0\x0\x7e\x7e\x7e\x0\x18\x3c\x7e\x18\x7e\x3c\x18\xff" "\x18\x3c\x7e\x18\x18\x18\x18\x0\x18\x18\x18\x18\x7e\x3c\x18\x0\x0\x18\x30\x7f\x30\x18\x0\x0\x0\xc\x6\x7f\x6\xc\x0\x0\x0\x0\x3\x3\x3\x7f\x0\x0\x0\x24\x66\xff\x66\x24\x0\x0\x0\x18\x3c\x7e\xff\xff\x0\x0\x0\xff\xff\x7e\x3c\x18\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\xc\xc\xc\xc\xc\x0\xc\x0\x36\x36\x36\x0\x0\x0\x0\x0\x36\x36\x7f\x36\x7f\x36\x36\x0\x18\x7e\x3\x3e\x60\x3f\x18\x0\x0\x66\x33\x18\xc\x66\x33\x0\x1c\x36\x1c\x6e\x3b\x33\x6e\x0\x30\x30\x30\x0\x0\x0\x0\x0" "\x18\xc\x6\x6\x6\xc\x18\x0\x6\xc\x18\x18\x18\xc\x6\x0\x0\x66\x3c\xff\x3c\x66\x0\x0\x0\x18\x18\x7e\x18\x18\x0\x0\x0\x0\x0\x0\x0\x18\xc\x0\x0\x0\x0\x7e\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x18\x0\x0\x60\x30\x18\xc\x6\x0\x0" "\x3e\x63\x6b\x6b\x6b\x63\x3e\x0\xe\xc\xc\xc\xc\x2c\x3e\x0\x1f\x30\x30\x1e\x3\x3\x3f\x0\x1f\x30\x30\x1e\x30\x30\x1f\x0\x3\x33\x33\x33\x7f\x30\x30\x0\x3f\x3\x3\x1f\x30\x30\x1f\x0\x3\x3\x3\x3f\x63\x63\x3e\x0\x3f\x30\x30\x18\xc\xc\xc\x0" "\x1c\x36\x36\x3e\x63\x63\x3e\x0\x3e\x63\x63\x7e\x60\x60\x60\x0\x0\x0\x18\x0\x0\x18\x0\x0\x0\x0\x18\x0\x0\x18\xc\x0\x0\x30\x18\xc\x18\x30\x0\x0\x0\x0\x7e\x0\x7e\x0\x0\x0\x0\xc\x18\x30\x18\xc\x0\x0\x3c\x66\x60\x30\x18\x0\x18\x0" "\x3c\x66\xdb\xdb\x73\x6\x3c\x0\x3c\x66\x63\x63\x7f\x63\x63\x0\x3f\x63\x63\x3f\x63\x63\x3f\x0\x7c\x6\x3\x3\x3\x6\x7c\x0\x3f\x63\x63\x63\x63\x63\x3f\x0\x7f\x3\x3\x7f\x3\x3\x7f\x0\x7f\x3\x3\x7f\x3\x3\x3\x0\x7c\x6\x3\x73\x63\x63\x3e\x0" "\x63\x63\x63\x7f\x63\x63\x63\x0\x18\x18\x18\x18\x18\x18\x18\x0\x60\x60\x60\x60\x60\x60\x3e\x0\x63\x33\x1b\xf\x1b\x33\x63\x0\x3\x3\x3\x3\x3\x3\x7f\x0\x3f\x6b\x6b\x6b\x6b\x6b\x6b\x0\x1f\x33\x63\x63\x63\x63\x63\x0\x3c\x66\x63\x63\x63\x63\x3e\x0" "\x3f\x63\x63\x63\x3f\x3\x3\x0\x3c\x66\x63\x63\x63\x5b\x36\x60\x3f\x63\x63\x63\x3f\x63\xc3\x0\x7c\x6\x3\x3e\x60\x60\x3f\x0\x7e\x18\x18\x18\x18\x18\x18\x0\x63\x63\x63\x63\x63\x63\x3e\x0\x63\x63\x63\x63\x63\x36\x1c\x0\x6b\x6b\x6b\x6b\x6b\x6b\x3f\x0" "\x63\x63\x63\x3e\x63\x63\x63\x0\x33\x33\x33\x1e\xc\xc\xc\x0\x7f\x60\x30\x18\xc\x6\x7f\x0\x1e\x6\x6\x6\x6\x6\x1e\x0\x0\x6\xc\x18\x30\x60\x0\x0\x1e\x18\x18\x18\x18\x18\x1e\x0\x18\x3c\x66\xc3\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xff" "\xc\xc\xc\x0\x0\x0\x0\x0\x0\x0\x3e\x60\x7e\x63\x7e\x0\x3\x3\x3f\x63\x63\x63\x3f\x0\x0\x0\x7e\x3\x3\x3\x7e\x0\x60\x60\x7e\x63\x63\x63\x7e\x0\x0\x0\x3e\x63\x7f\x3\x7e\x0\x3c\x6\x1f\x6\x6\x6\x6\x0\x0\x0\x3e\x63\x63\x7e\x60\x3f" "\x3\x3\x3f\x63\x63\x63\x63\x0\x18\x0\x1e\x18\x18\x18\x18\x0\x30\x0\x3c\x30\x30\x30\x30\x1f\x3\x3\x63\x33\x1f\x33\x63\x0\xc\xc\xc\xc\xc\xc\x38\x0\x0\x0\x3f\x6b\x6b\x6b\x6b\x0\x0\x0\x3f\x63\x63\x63\x63\x0\x0\x0\x3e\x63\x63\x63\x3e\x0" "\x0\x0\x3f\x63\x63\x3f\x3\x3\x0\x0\x7e\x63\x63\x7e\x60\x60\x0\x0\x3f\x63\x3\x3\x3\x0\x0\x0\x3e\x3\x1e\x30\x1f\x0\xc\xc\x3f\xc\xc\xc\x38\x0\x0\x0\x63\x63\x63\x63\x3e\x0\x0\x0\x63\x63\x63\x36\x1c\x0\x0\x0\x6b\x6b\x6b\x6b\x3f\x0" "\x0\x0\x63\x63\x3e\x63\x63\x0\x0\x0\x63\x63\x63\x7e\x60\x3f\x0\x0\x7f\x30\x1c\x6\x7f\x0\xe0\x30\x30\x1c\x30\x30\xe0\x0\x18\x18\x18\x18\x18\x18\x18\x18\x7\xc\xc\x38\xc\xc\x7\x0\x6e\x3b\x0\x0\x0\x0\x0\x0\x0\x8\x1c\x36\x63\x63\x7f\x0" "\xff\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\x1\x80\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\xff" "\x1\x0\x0\x0\x0\x0\x0\x0\x80\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x1\x0\x0\x0\x0\x0\x0\x0\x80\x1\x3\x7\xf\x1f\x3f\x7f\xff\xff\xfe\xfc\xf8\xf0\xe0\xc0\x80\xff\xff\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0" "\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\x3\x3\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\xff\xff\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\x0\xaa\x0\x0\x0\x0\x0\x3f\x3f\x3f\x3f\x3f\x3f\x0\x0\x7e\x7e\x7e\x7e\x7e\x7e\x0\x0\xfc\xfc\xfc\xfc\xfc\xfc\x0\x0\xf8\xf8\xf8\xf8\xf8\xf8\x0\x0\xf0\xf0\xf0\xf0\xf0\xf0\x0" "\x0\xe0\xe0\xe0\xe0\xe0\xe0\x0\x0\xc0\xc0\xc0\xc0\xc0\xc0\x0\x0\x80\x80\x80\x80\x80\x80\x0\x0\x1\x1\x1\x1\x1\x1\x0\x0\x3\x3\x3\x3\x3\x3\x0\x0\x7\x7\x7\x7\x7\x7\x0\x0\xf\xf\xf\xf\xf\xf\x0\x0\x1f\x1f\x1f\x1f\x1f\x1f\x0" "\x7e\x7e\x7e\x7e\x7e\x7e\x7e\x7e\xff\xff\x0\x18\x3c\x7e\xff\x0\xff\xff\x0\x0\x0\x0\x18\x18\xff\xff\x0\x18\x3c\x7e\xff\x18\xff\xff\x0\x42\x66\x5a\x42\x42\x0\x0\x0\x18\x18\x0\x0\x0\x0\x3\x3\x3\x3\x3\x3\x3\x0\x1b\x1b\x1b\x1b\x1b\x1b\x1b" "\x0\xdb\xdb\xdb\xdb\xdb\xdb\xdb\x0\x6\x6\x6\x6\x6\x6\x6\x0\x36\x36\x36\x36\x36\x36\x36\x0\xb6\xb6\xb6\xb6\xb6\xb6\xb6\x0\x1\x1\x1\x1\x1\x1\x1\x0\xd\xd\xd\xd\xd\xd\xd\x0\x6d\x6d\x6d\x6d\x6d\x6d\x6d\x0\x0\x18\x3c\x3c\x18\x0\x0" "\x0\x0\x1f\x18\x1f\x18\x18\x18\x6c\x6c\x6f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x0\x0\x7f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6f\x60\x7f\x0\x0\x0\x6c\x6c\x6c\x6c\x7f\x0\x0\x0\x18\x18\x1f\x18\x1f\x0\x0\x0\x0\x0\x0\x0\x1f\x18\x18\x18" "\x18\x18\x18\x18\xf8\x0\x0\x0\x18\x18\x18\x18\xff\x0\x0\x0\x0\x0\x0\x0\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\x18\x18\x0\x0\x0\x0\xff\x0\x0\x0\x18\x18\x18\x18\xff\x18\x18\x18\x18\x18\xf8\x18\xf8\x18\x18\x18\x6c\x6c\x6c\x6c\xec\x6c\x6c\x6c" "\x6c\x6c\xec\xc\xfc\x0\x0\x0\x0\x0\xfc\xc\xec\x6c\x6c\x6c\x6c\x6c\xef\x0\xff\x0\x0\x0\x0\x0\xff\x0\xef\x6c\x6c\x6c\x6c\x6c\xec\xc\xec\x6c\x6c\x6c\x0\x0\xff\x0\xff\x0\x0\x0\x6c\x6c\xef\x0\xef\x6c\x6c\x6c\x18\x18\xff\x0\xff\x0\x0\x0" "\x6c\x6c\x6c\x6c\xff\x0\x0\x0\x0\x0\xff\x0\xff\x18\x18\x18\x0\x0\x0\x0\xff\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xfc\x0\x0\x0\x18\x18\xf8\x18\xf8\x0\x0\x0\x0\x0\xf8\x18\xf8\x18\x18\x18\x0\x0\x0\x0\xfc\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xff\x6c\x6c\x6c" "\x18\x18\xff\x18\xff\x18\x18\x18\x18\x18\x18\x18\x1f\x0\x0\x0\x0\x0\x0\x0\xf8\x18\x18\x18\xff\xff\xff\xff\xff\xff\xff\xff\x0\x0\x0\x0\xff\xff\xff\xff\xf\xf\xf\xf\xf\xf\xf\xf\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xff\xff\xff\xff\x0\x0\x0\x0" "\x0\x0\x6e\x3b\x13\x3b\x6e\x0\x0\x1e\x33\x1f\x33\x1f\x3\x3\x0\x3f\x33\x3\x3\x3\x3\x0\x0\x0\x7f\x36\x36\x36\x36\x0\x3f\x33\x6\xc\x6\x33\x3f\x0\x0\x0\x7e\x1b\x1b\x1b\xe\x0\x0\x66\x66\x66\x66\x3e\x6\x3\x0\x6e\x3b\x18\x18\x18\x18\x0" "\x3f\xc\x1e\x33\x33\x1e\xc\x3f\x1c\x36\x63\x7f\x63\x36\x1c\x0\x1c\x36\x63\x63\x36\x36\x77\x0\x38\xc\x18\x3e\x33\x33\x1e\x0\x0\x0\x7e\xdb\xdb\x7e\x0\x0\x60\x30\x7e\xdb\xdb\x7e\x6\x3\x1c\x6\x3\x1f\x3\x6\x1c\x0\x0\x0\x0\x0\x0\xdb\xdb\x0" "\x0\x7e\x0\x7e\x0\x7e\x0\x0\x0\xf8\x8\x8\x8\x8\xf8\x0\x0\xff\x0\x0\x0\x0\xff\x0\x0\x1f\x10\x10\x10\x10\x1f\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x0\x2\x1\x0\x0\x0\x20\x30\x28\x24\x22\xa1\x60\x20\x0\x0\x0\x1\x2\x0\x0\x0" "\x20\x60\xa1\x22\x24\x28\x30\x20\x0\x0\x0\x40\x40\x40\x40\x7f\xff\x81\x81\x81\x81\x80\x80\x80\x0\x0\x0\x20\x20\x11\x11\xe\x38\x44\x44\x82\x82\x0\x0\x0\x0\x0\xfe\x7c\x38\x10\x0\x0\x0\x0\x10\x38\x7c\xfe\x0\x0\x80\xc1\x63\x36\x1c\x8\x0\x0" ), // Font no. 24 FontEntry("J-TERMO", 8, 8, "\x0\x0\x0\x0\x0\x0\x0\x0\x7e\x81\xa5\x81\xbd\x99\x81\x7e\x7e\xff\xdb\xff\xff\xc3\xe7\x7e\x0\x77\x7f\x7f\x3e\x1c\x8\x0\x8\x1c\x3e\x7f\x3e\x1c\x8\x0\x18\x3c\x18\xff\xff\x52\x18\x0\x8\x1c\x3e\x7f\x7f\x49\x1c\x0\x0\x0\x18\x3c\x18\x0\x0\x0" "\xff\xff\xe7\xc3\xe7\xff\xff\xff\x0\x3c\x42\x81\x81\x42\x3c\x0\xff\xc3\xbd\x7e\x7e\xbd\xc3\xff\xf8\xe0\xb0\x3e\x63\x63\x3e\x0\x0\x7e\xc3\xc3\x7e\x18\x7e\x18\x20\x60\xe0\x20\x20\x3f\x1f\x0\x30\x50\xb0\xd0\x9f\x8f\xf0\xf0\x81\xc2\xbc\xe4\xa4\xfc\xea\xff" "\x0\x0\x6\x1e\x7e\x1e\x6\x0\x0\x0\x60\x78\x7e\x78\x60\x0\x18\x7e\x18\x18\x18\x18\x7e\x18\x66\x66\x66\x66\x66\x0\x66\x0\xff\x6d\x6e\x6c\x6c\x6c\x6c\x0\x7e\x81\x3e\x42\x42\x7c\x81\x7e\x0\x0\x0\x7e\x7e\x0\x0\x0\x18\x7e\x18\x18\x7e\x18\x0\xff" "\x18\x7e\x18\x18\x18\x18\x18\x0\x18\x18\x18\x18\x18\x7e\x18\x0\x0\x20\x60\xff\x60\x20\x0\x0\x0\x4\x6\xff\x6\x4\x0\x0\x0\x0\x0\x3\x3\x3\xff\x0\x0\x24\x66\xff\x66\x24\x0\x0\x0\x0\x8\x1c\x3e\x7f\x0\x0\x0\x0\x0\x7f\x3e\x1c\x8\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x1c\x1c\x1c\x1c\x1c\x0\x1c\x0\x77\x77\x77\x0\x0\x0\x0\x0\x0\x6c\xfe\x6c\x6c\xfe\x6c\x0\x18\x7e\x7\x3e\x70\x3f\xc\x0\x0\x66\x33\x18\xcc\x66\x0\x0\x1c\x36\x1c\xb6\x63\x73\xde\x0\x60\x30\x18\x0\x0\x0\x0\x0" "\x30\x18\x18\x18\x18\x18\x18\x30\x6\xc\xc\xc\xc\xc\xc\x6\x8\x2a\x1c\x7f\x1c\x2a\x8\x0\x0\x18\x18\x7e\x18\x18\x0\x0\x0\x0\x0\x0\x0\x0\x18\xc\x0\x0\x0\x7e\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xc\x0\x0\xe0\x70\x38\x1c\xe\x7\x0" "\x3e\x77\x77\x7f\x77\x77\x3e\x0\x38\x3c\x38\x38\x38\x38\x7c\x0\x3e\x77\x70\x3c\xe\x7\x7f\x0\x3e\x70\x3c\x70\x77\x77\x3e\x0\x77\x77\x77\x77\x7e\x70\x70\x0\x7f\x7\x3f\x70\x77\x77\x3f\x0\x3e\x77\x7\x3f\x77\x77\x3e\x0\x7f\x60\x70\x38\x1c\x1c\x1c\x0" "\x3e\x77\x77\x3e\x77\x77\x3e\x0\x3e\x77\x7e\x70\x77\x77\x3e\x0\x0\xc\x0\x0\x0\xc\x0\x0\x0\xc\x0\x0\x0\xc\x6\x0\x0\x18\xc\x6\xc\x18\x0\x0\x0\x0\x7e\x0\x7e\x0\x0\x0\x0\xc\x18\x30\x18\xc\x0\x0\x3e\x77\x70\x38\x1c\x0\x1c\x0" "\x7e\xc3\xdb\xdb\x7b\x3\x3e\x0\x3e\x77\x7f\x77\x77\x77\x77\x0\x3f\x77\x3f\x77\x77\x77\x3f\x0\x3e\x77\x7\x7\x7\x77\x3e\x0\x3f\x77\x77\x77\x77\x77\x3f\x0\x7f\x7\x1f\x7\x77\x77\x7f\x0\x7f\x7\x1f\x7\x7\x7\x7\x0\x7e\x7\x77\x77\x77\x77\x3e\x0" "\x77\x77\x77\x7f\x77\x77\x77\x0\x1c\x1c\x1c\x1c\x1c\x1c\x1c\x0\x70\x70\x70\x70\x77\x77\x3e\x0\x77\x77\x3f\xf\x3f\x77\x77\x0\x7\x7\x7\x7\x77\x77\x7f\x0\x77\x7f\x77\x77\x77\x77\x77\x0\x3f\x77\x77\x77\x77\x77\x77\x0\x3e\x7f\x77\x77\x77\x7f\x3e\x0" "\x3f\x77\x3f\x7\x7\x7\x7\x0\x3e\x77\x77\x77\x77\x77\x7e\xe0\x3f\x77\x3f\x77\x77\x77\x77\x0\x3e\x7\x3e\x70\x77\x77\x3e\x0\x7f\x1c\x1c\x1c\x1c\x1c\x1c\x0\x77\x77\x77\x77\x77\x77\x3e\x0\x77\x77\x77\x77\x77\x36\x1c\x0\x77\x77\x77\x77\x77\x7f\x77\x0" "\x77\x77\x3e\x1c\x3e\x77\x77\x0\x77\x77\x3e\x1c\x1c\x1c\x1c\x0\x7f\x70\x38\x1c\xe\x7\x7f\x0\x38\x18\x18\x18\x18\x18\x18\x38\x0\x7\xe\x1c\x38\x70\xe0\x0\xe\xc\xc\xc\xc\xc\xc\xe\x18\x3c\x66\xc3\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xff" "\xc\x18\x30\x0\x0\x0\x0\x0\x0\x0\x3e\x70\x7e\x77\x7e\x0\x7\x7\x3f\x77\x77\x77\x3f\x0\x0\x0\x3e\x77\x7\x77\x3e\x0\x70\x70\x7e\x77\x77\x77\x7e\x0\x0\x0\x3e\x77\x7f\x7\x7e\x0\x3c\xe\xe\x3f\xe\xe\xe\x0\x0\x0\x3e\x77\x77\x7e\x70\x3e" "\x7\x7\x3f\x77\x77\x77\x77\x0\x38\x0\x38\x38\x38\x38\x38\x0\x70\x0\x70\x70\x70\x70\x70\x3f\x7\x7\x77\x37\x1f\x37\x77\x0\x1c\x1c\x1c\x1c\x1c\x1c\x1c\x0\x0\x0\x3f\x6b\x6b\x6b\x6b\x0\x0\x0\x3f\x77\x77\x77\x77\x0\x0\x0\x3e\x77\x77\x77\x3e\x0" "\x0\x0\x3f\x77\x77\x3f\x7\x7\x0\x0\x7e\x77\x77\x7e\x70\x70\x0\x0\x3f\x77\x7\x7\x7\x0\x0\x0\x7e\x7\x7e\xe0\x7e\x0\x1c\x1c\x7f\x1c\x1c\x1c\x1c\x0\x0\x0\x77\x77\x77\x77\x3e\x0\x0\x0\x77\x77\x77\x36\x1c\x0\x0\x0\x6b\x6b\x6b\x6b\x3f\x0" "\x0\x0\x77\x36\x1c\x36\x77\x0\x0\x0\x77\x77\x77\x7e\x70\x3f\x0\x0\x7f\x38\x1c\xe\x7f\x0\x30\x18\x18\xc\x18\x18\x30\x0\x18\x18\x18\x18\x18\x18\x18\x18\x6\xc\xc\x18\xc\xc\x6\x0\xe\xdb\x70\x0\x0\x0\x0\x0\x0\x0\x8\x14\x22\x7f\x0\x0" "\xff\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\x1\x80\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\xff" "\x1\x0\x0\x0\x0\x0\x0\x0\x80\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x1\x0\x0\x0\x0\x0\x0\x0\x80\x1\x3\x7\xf\x1f\x3f\x7f\xff\xff\xfe\xfc\xf8\xf0\xe0\xc0\x80\xff\xff\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0" "\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\x3\x3\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\xff\xff\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\x0\x55\x0\x0\x0\x0\x0\x3f\x3f\x3f\x3f\x3f\x3f\x0\x0\x7e\x7e\x7e\x7e\x7e\x7e\x0\x0\xfc\xfc\xfc\xfc\xfc\xfc\x0\x0\xf8\xf8\xf8\xf8\xf8\xf8\x0\x0\xf0\xf0\xf0\xf0\xf0\xf0\x0" "\x0\xe0\xe0\xe0\xe0\xe0\xe0\x0\x0\xc0\xc0\xc0\xc0\xc0\xc0\x0\x0\x80\x80\x80\x80\x80\x80\x0\x0\x1\x1\x1\x1\x1\x1\x0\x0\x3\x3\x3\x3\x3\x3\x0\x0\x7\x7\x7\x7\x7\x7\x0\x0\xf\xf\xf\xf\xf\xf\x0\x0\x1f\x1f\x1f\x1f\x1f\x1f\x0" "\x55\x6b\x55\x6b\x55\x6b\x55\x6b\xff\xff\x0\x0\x0\x8\x1c\x3e\xff\xff\x0\x0\x0\x0\x0\x7f\xff\xff\x0\x0\x8\x1c\x3e\x7f\xff\xff\x0\xc3\xe7\xff\xdb\xc3\x0\x0\x0\x0\x18\x0\x0\x0\x0\x3\x3\x3\x3\x3\x3\x3\x0\x1b\x1b\x1b\x1b\x1b\x1b\x1b" "\x0\xdb\xdb\xdb\xdb\xdb\xdb\xdb\x0\x6\x6\x6\x6\x6\x6\x6\x0\x36\x36\x36\x36\x36\x36\x36\x0\xb6\xb6\xb6\xb6\xb6\xb6\xb6\x0\x1\x1\x1\x1\x1\x1\x1\x0\xd\xd\xd\xd\xd\xd\xd\x0\x6d\x6d\x6d\x6d\x6d\x6d\x6d\x0\x0\x18\x3c\x3c\x18\x0\x0" "\x0\x0\x0\x1f\x18\x1f\x18\x18\x6c\x6c\x6c\x6f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x0\x0\x0\x7f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6f\x60\x7f\x0\x0\x6c\x6c\x6c\x7f\x0\x0\x0\x0\x18\x18\x18\x1f\x18\x1f\x0\x0\x0\x0\x0\x1f\x18\x18\x18\x18" "\x18\x18\x18\xf8\x0\x0\x0\x0\x18\x18\x18\xff\x0\x0\x0\x0\x0\x0\x0\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\x18\x18\x18\x0\x0\x0\x0\xff\x0\x0\x0\x18\x18\x18\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\xf8\x18\x18\x6c\x6c\x6c\xec\x6c\x6c\x6c\x6c" "\x6c\x6c\x6c\xec\xc\xfc\x0\x0\x0\x0\x0\xfc\xc\xec\x6c\x6c\x6c\x6c\x6c\xef\x0\xff\x0\x0\x0\x0\x0\xff\x0\xef\x6c\x6c\x6c\x6c\x6c\xec\xc\xec\x6c\x6c\x0\x0\x0\xff\x0\xff\x0\x0\x6c\x6c\x6c\xef\x0\xef\x6c\x6c\x18\x18\x18\xff\x0\xff\x0\x0" "\x6c\x6c\x6c\xff\x0\x0\x0\x0\x0\x0\x0\xff\x0\xff\x18\x18\x0\x0\x0\xff\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xfc\x0\x0\x0\x0\x18\x18\x18\xf8\x18\xf8\x0\x0\x0\x0\x0\xf8\x18\xf8\x18\x18\x0\x0\x0\xfc\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xff\x6c\x6c\x6c\x6c" "\x18\x18\x18\xff\x18\xff\x18\x18\x18\x18\x18\x1f\x0\x0\x0\x0\x0\x0\x0\xf8\x18\x18\x18\x18\xff\xff\xff\xff\xff\xff\xff\xff\x0\x0\x0\x0\xff\xff\xff\xff\xf\xf\xf\xf\xf\xf\xf\xf\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xff\xff\xff\xff\x0\x0\x0\x0" "\x0\x0\xee\x19\x19\xee\x0\x0\x38\x6c\x66\x3f\x63\x63\x3f\x3\x7f\x46\x6\x6\x6\x6\x6\x0\x0\x0\xff\x66\x66\x66\x66\x0\x7f\x46\xc\x18\xc\x46\x7f\x0\x0\x0\xfc\x66\x63\x33\x1e\x0\x0\x0\xcc\xcc\xcc\x7c\xc\xf\x0\x0\xff\x18\x18\x18\x18\x0" "\x3c\x18\x3c\x66\x66\x3c\x18\x3c\x0\x3e\x63\x7f\x63\x3e\x0\x0\x0\x7e\xc3\xc3\xc3\x66\xe7\x0\x78\x98\x3c\x66\x63\x33\x1e\x0\x0\x0\x66\x99\x99\x66\x0\x0\x0\xc0\x3e\x73\x67\x3e\x3\x0\x0\x7c\x3\x7f\x3\x7c\x0\x0\x0\x0\x0\x0\x0\xdb\xdb\x0" "\x0\x7e\x0\x7e\x0\x7e\x0\x0\x0\xf8\x8\x8\x8\x8\xf8\x0\x0\xff\x0\x0\x0\x0\xff\x0\x0\x1f\x10\x10\x10\x10\x1f\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x0\x2\x1\x0\x0\x0\x20\x30\x28\x24\x22\xa1\x60\x20\x0\x0\x0\x1\x2\x0\x0\x0" "\x20\x60\xa1\x22\x24\x28\x30\x20\x0\x0\x0\x40\x40\x40\x40\x7f\xff\x81\x81\x81\x81\x80\x80\x80\x0\x0\x0\x20\x20\x11\x11\xe\x38\x44\x44\x82\x82\x0\x0\x0\x0\x0\xfe\x7c\x38\x10\x0\x0\x0\x0\x10\x38\x7c\xfe\x0\x0\x80\xc1\x63\x36\x1c\x8\x0\x0" ), // Font no. 25 FontEntry("KANAFONT", 8, 8, "\x0\x0\x0\x0\x0\x0\x0\x0\x3c\x42\xa5\x81\xbd\x99\x42\x3c\x3c\x7e\xdb\xff\xc3\xe7\x7e\x3c\x0\x66\xff\xff\xff\x7e\x18\x0\x0\x0\x1c\x3e\x3e\x1c\x0\x0\x0\x18\x3c\x66\xe7\x18\x3c\x0\x18\x3c\x7e\xff\x7e\x18\x3c\x0\x0\x0\x3c\x7e\x7e\x3c\x0\x0" "\xff\xff\xc3\x81\x81\xc3\xff\xff\x0\x0\x3c\x7e\x66\x7e\x3c\x0\xff\xff\xc3\x81\x99\x81\xc3\xff\x78\x70\x58\x3e\x63\x63\x3e\x0\x3c\x66\x66\x3c\x18\x7e\x18\x18\xf8\x18\x18\xf8\x18\x1e\x1f\xe\xfe\xc6\xc6\xfe\xc6\xe6\x77\x3\xdb\xdb\x18\xff\xff\x18\xdb\xdb" "\xe\x1e\x3e\x7e\x3e\x1e\xe\x0\x70\x78\x7c\x7e\x7c\x78\x70\x0\x18\x3c\x7e\x18\x7e\x3c\x18\x0\x66\x66\x66\x66\x66\x0\x66\x0\xff\xff\x66\x66\x66\x66\x66\x0\x7e\x3\x3f\x66\x66\x7c\x60\x3f\x0\x0\x0\x0\xff\xff\xff\x0\x18\x3c\x7e\x18\x7e\x3c\x18\x7e" "\x18\x3c\x7e\x18\x18\x18\x18\x0\x18\x18\x18\x18\x7e\x3c\x18\x0\x0\x18\x30\x7f\x30\x18\x0\x0\x0\xc\x6\x7f\x6\xc\x0\x0\x0\x0\x3\x3\x7f\x7f\x0\x0\x0\x24\x66\xff\x66\x24\x0\x0\x0\x18\x3c\x7e\xff\xff\x0\x0\x0\x0\xff\xff\x7e\x3c\x18\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x18\x3c\x3c\x3c\x18\x0\x18\x0\x33\x77\x66\x0\x0\x0\x0\x0\x36\x7f\x7f\x36\x7f\x7f\x36\x0\x1c\x7e\xf\x3e\x78\x3f\x1c\x0\x0\x6e\x77\x38\x1c\xee\x76\x0\x1c\x3e\x36\xde\x77\x7f\xde\x0\x18\x1c\xc\x0\x0\x0\x0\x0" "\x38\x3c\xc\xc\xc\x3c\x38\x0\x1c\x3c\x30\x30\x30\x3c\x1c\x0\x0\x36\x1c\x7f\x7f\x1c\x36\x0\x0\x18\x18\x7e\x7e\x18\x18\x0\x0\x0\x0\x0\x0\x18\x1c\xc\x0\x0\x0\x7e\x7e\x0\x0\x0\x0\x0\x0\x0\x0\x18\x18\x0\x0\x60\x70\x38\x1c\xe\x6\x0" "\x3e\x7f\x67\x63\x73\x7f\x3e\x0\x1e\x1e\x18\x18\x18\x7e\x7e\x0\x3f\x7f\x60\x3e\x7\x7f\x7f\x0\x3f\x7f\x60\x3c\x70\x7f\x3f\x0\x63\x63\x63\x7f\x7f\x60\x60\x0\x7f\x7f\x3\x3f\x70\x7f\x3f\x0\x7c\x7e\x7\x3f\x63\x7f\x3e\x0\x7f\x7f\x60\x70\x1c\xe\xe\x0" "\x3e\x7f\x63\x3e\x63\x7f\x3e\x0\x3e\x7f\x63\x7f\x70\x7f\x3f\x0\x0\x18\x18\x0\x0\x18\x18\x0\x0\x18\x18\x0\x0\x18\x1c\xc\x0\x38\x1c\xe\xe\x1c\x38\x0\x0\x7f\x7f\x0\x0\x7f\x7f\x0\x0\x1c\x38\x70\x70\x38\x1c\x0\x3e\x7f\x70\x38\x1c\x0\x1c\x1c" "\x3e\x7f\x63\x7b\x3\x7f\x7e\x0\x3e\x7f\x63\x7f\x7f\x63\x63\x0\x3f\x7f\x63\x3f\x63\x7f\x3f\x0\x7c\x7e\x7\x3\x3\x7f\x7e\x0\x1f\x3f\x73\x63\x63\x7f\x3f\x0\x7c\x7e\x7\x7f\x3\x7f\x7f\x0\x7c\x7e\x7\x7f\x7f\x3\x3\x0\x7c\x7e\x7\x7b\x63\x7f\x3e\x0" "\x63\x63\x63\x7f\x7f\x63\x63\x0\x3c\x3c\x18\x18\x18\x3c\x3c\x0\x7c\x7c\x60\x60\x70\x7f\x3f\x0\x63\x63\x33\x1f\x3f\x73\x63\x0\x3\x3\x3\x3\x7\x7e\x7c\x0\x63\x7f\x7f\x63\x63\x63\x63\x0\x67\x6f\x7f\x7b\x73\x63\x63\x0\x3c\x7e\x67\x63\x63\x7f\x3e\x0" "\x3f\x7f\x63\x7f\x3f\x3\x3\x0\x3c\x7e\x67\x63\x5b\x3b\x76\x60\x3f\x7f\x63\x3f\x3f\x63\x63\x0\x7e\x7f\x3\x3f\x60\x7f\x3f\x0\x7e\x7e\x18\x18\x18\x18\x18\x0\x63\x63\x63\x63\x63\x7f\x3e\x0\x63\x63\x63\x63\x77\x3e\x1c\x0\x63\x63\x63\x63\x7f\x7f\x63\x0" "\x63\x63\x63\x3e\x3e\x63\x63\x0\x63\x63\x7f\x7e\x60\x7f\x3f\x0\xff\xff\x70\x38\xe\xff\xff\x0\x3c\x3c\xc\xc\xc\x3c\x3c\x0\x0\x6\xe\x1c\x38\x70\x60\x0\x3c\x3c\x30\x30\x30\x3c\x3c\x0\x1c\x3e\x77\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xff\xff" "\xc\x1c\x18\x0\x0\x0\x0\x0\x0\x0\x3e\x7f\x63\x7f\x7e\x0\x3\x3\x3f\x7f\x63\x7f\x3f\x0\x0\x0\x7e\x7f\x3\x7f\x7e\x0\x60\x60\x7e\x7f\x63\x7f\x7e\x0\x0\x3e\x7f\x63\x7f\x3\x7e\x0\x70\x78\x18\x7e\x18\x1e\xe\x0\x0\x3e\x7f\x63\x7e\x60\x7f\x3f" "\x3\x3\x3f\x7f\x63\x63\x63\x0\x1c\x1c\x0\x1e\x1e\x78\x70\x0\x70\x70\x0\x78\x78\x70\x3f\x1f\x3\x33\x33\x1f\x3f\x33\x33\x0\x18\x18\x18\x18\x18\x78\x70\x0\x0\x0\x3e\x7f\x6b\x63\x63\x0\x0\x0\x3f\x7f\x63\x63\x63\x0\x0\x0\x3e\x7f\x63\x7f\x3e\x0" "\x0\x3e\x7f\x63\x7f\x3f\x3\x3\x0\x7e\x7f\x63\x7f\x7e\x60\x60\x0\x0\x3f\x7f\x63\x3\x3\x0\x0\x0\x7e\xf\x3e\x78\x3f\x0\xc\xc\x3f\x3f\xc\x3c\x38\x0\x0\x0\x63\x63\x63\x7f\x3e\x0\x0\x0\x63\x63\x77\x3e\x1c\x0\x0\x0\x63\x63\x6b\x7f\x3e\x0" "\x0\x0\x63\x3e\x3e\x63\x63\x0\x0\x66\x66\x7e\x7c\x70\x3f\x1f\x0\x0\x7f\x78\x3e\x7\x7f\x0\x70\x78\x18\xe\xe\x18\x78\x70\x18\x18\x18\x18\x18\x18\x18\x18\xe\x1e\x18\x70\x70\x18\x1e\xe\x6e\x7f\x3b\x0\x0\x0\x0\x0\x0\x8\x1c\x3e\x77\x7f\x0\x0" "\xff\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\x1\x80\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\xff" "\x1\x0\x0\x0\x0\x0\x0\x0\x80\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x1\x0\x0\x0\x0\x0\x0\x0\x80\x1\x3\x7\xf\x1f\x3f\x7f\xff\xff\xfe\xfc\xf8\xf0\xe0\xc0\x80\xff\xff\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0" "\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\x3\x3\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\xff\xff\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\x0\xaa\x0\x0\x0\x0\x0\x3f\x3f\x3f\x3f\x3f\x3f\x0\x0\x7e\x7e\x7e\x7e\x7e\x7e\x0\x0\xfc\xfc\xfc\xfc\xfc\xfc\x0\x0\xf8\xf8\xf8\xf8\xf8\xf8\x0\x0\xf0\xf0\xf0\xf0\xf0\xf0\x0" "\x0\xe0\xe0\xe0\xe0\xe0\xe0\x0\x0\xc0\xc0\xc0\xc0\xc0\xc0\x0\x0\x80\x80\x80\x80\x80\x80\x0\x0\x1\x1\x1\x1\x1\x1\x0\x0\x3\x3\x3\x3\x3\x3\x0\x0\x7\x7\x7\x7\x7\x7\x0\x0\xf\xf\xf\xf\xf\xf\x0\x0\x1f\x1f\x1f\x1f\x1f\x1f\x0" "\x7e\x7e\x7e\x7e\x7e\x7e\x7e\x7e\xff\xff\x18\x3c\x66\xc3\x66\x66\xff\xff\x0\x0\x0\x0\x18\x18\xff\xff\x0\x18\x3c\x7e\x18\x18\xff\xff\x0\x66\x7e\x7e\x66\x66\x0\x0\x0\x8\x0\x0\x0\x0\x0\x3\x3\x3\x3\x3\x3\x3\x0\x1b\x1b\x1b\x1b\x1b\x1b\x1b" "\x0\xdb\xdb\xdb\xdb\xdb\xdb\xdb\x0\x6\x6\x6\x6\x6\x6\x6\x0\x36\x36\x36\x36\x36\x36\x36\x0\xb6\xb6\xb6\xb6\xb6\xb6\xb6\x0\x1\x1\x1\x1\x1\x1\x1\x0\xd\xd\xd\xd\xd\xd\xd\x0\x6d\x6d\x6d\x6d\x6d\x6d\x6d\x0\x0\x0\x18\x18\x0\x0\x0" "\x0\x0\x1f\x18\x1f\x18\x18\x18\x66\x66\x67\x60\x67\x66\x66\x66\x66\x66\x66\x66\x66\x66\x66\x66\x0\x0\x7f\x60\x67\x66\x66\x66\x66\x66\x67\x60\x7f\x0\x0\x0\x66\x66\x66\x66\x7f\x0\x0\x0\x18\x18\x1f\x18\x1f\x0\x0\x0\x0\x0\x0\x1f\x18\x18\x18\x18" "\x18\x18\x18\xf8\x0\x0\x0\x0\x18\x18\x18\xff\x0\x0\x0\x0\x0\x0\x0\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\x18\x18\x18\x0\x0\x0\x0\xff\x0\x0\x0\x18\x18\x18\xff\x18\x18\x18\x18\x18\x18\xf8\x18\xf8\x18\x18\x18\x66\x66\x66\x66\xe6\x66\x66\x66" "\x66\x66\xe6\x6\xfe\x0\x0\x0\x0\x0\xfe\x6\xe6\x66\x66\x66\x66\x66\xe7\x0\xff\x0\x0\x0\x0\x0\xff\x0\xe7\x66\x66\x66\x66\x66\xe6\x6\xe6\x66\x66\x66\x0\x0\xff\x0\xff\x0\x0\x0\x66\x66\xe7\x0\xe7\x66\x66\x66\x18\x18\xff\x0\xff\x0\x0\x0" "\x66\x66\x66\xff\x0\x0\x0\x0\x0\x0\xff\x0\xff\x18\x18\x18\x0\x0\x0\xff\x66\x66\x66\x66\x66\x66\x66\xfe\x0\x0\x0\x0\x18\x18\xf8\x18\xf8\x0\x0\x0\x0\x0\xf8\x18\xf8\x18\x18\x18\x0\x0\x0\xfe\x66\x66\x66\x66\x66\x66\x66\xff\x66\x66\x66\x66" "\x18\x18\xff\x18\xff\x18\x18\x18\x18\x18\x18\x1f\x0\x0\x0\x0\x0\x0\x0\xf8\x18\x18\x18\x18\xff\xff\xff\xff\xff\xff\xff\xff\x0\x0\x0\x0\xff\xff\xff\xff\xf\xf\xf\xf\xf\xf\xf\xf\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xff\xff\xff\xff\x0\x0\x0\x0" "\x0\x0\x6e\x7f\x33\x7f\x6e\x0\x3f\x7f\x63\x3f\x63\x7f\x3f\x3\x7f\x7f\x63\x3\x3\x3\x3\x0\x0\x3\xff\xff\x66\x66\x66\x0\x7f\x7f\xe\x1c\xe\x7f\x7f\x0\x0\xc0\xfe\x7f\x33\x3f\x1e\x0\x0\x0\x66\x66\x7e\x3e\x7\x3\x0\x0\xff\xff\x1b\x18\x18\x0" "\x0\x3c\x7e\x66\x66\x7e\x3c\x0\x3e\x7f\x63\x7f\x63\x7f\x3e\x0\x3e\x7f\x63\x77\x36\x77\x77\x0\x7e\x7\x3e\x7f\x63\x7f\x3e\x0\x0\x0\x7e\xdb\xdb\x7e\x0\x0\x30\x30\x7e\xdb\xdb\x7e\xc\xc\x3e\x3f\x3\x3f\x3\x3f\x3e\x0\x0\x0\x0\x0\x0\xdb\xdb\x0" "\x0\x7e\x0\x7e\x0\x7e\x0\x0\x0\xf8\x8\x8\x8\x8\xf8\x0\x0\xff\x0\x0\x0\x0\xff\x0\x0\x1f\x10\x10\x10\x10\x1f\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x0\x2\x1\x0\x0\x0\x20\x30\x28\x24\x22\xa1\x60\x20\x0\x0\x0\x1\x2\x0\x0\x0" "\x20\x60\xa1\x22\x24\x28\x30\x20\x0\x0\x0\x40\x40\x40\x40\x7f\xff\x81\x81\x81\x81\x80\x80\x80\x0\x0\x0\x20\x20\x11\x11\xe\x38\x44\x44\x82\x82\x0\x0\x0\x0\x0\xfe\x7c\x38\x10\x0\x0\x0\x0\x10\x38\x7c\xfe\x0\x0\x80\xc1\x63\x36\x1c\x8\x0\x0" ), // Font no. 26 FontEntry("MOTIF", 8, 8, "\x0\x0\x0\x0\x0\x0\x0\x0\x7e\x81\xa5\x81\xbd\x99\x81\x7e\x3e\x7f\x6b\x5d\x63\x7f\x3e\x0\x63\x77\x7f\x7f\x3e\x1c\x8\x0\x8\x1c\x3e\x7f\x3e\x1c\x8\x0\x8\x1c\x8\x77\x77\x8\x1c\x0\x1c\x3e\x7f\x7f\x36\x8\x1c\x0\x0\x18\x3c\x7e\x3c\x18\x0\x0" "\xff\xe7\xc3\x81\xc3\xe7\xff\xff\x0\x18\x3c\x66\x66\x3c\x18\x0\xff\xe7\xc3\x99\x99\xc3\xe7\xff\x78\x70\x78\x6c\x1e\x33\x33\x1e\x7e\xc3\xc3\x7e\x18\x7e\x18\x18\x78\x58\x78\x18\x18\xe\xf\x6\x7c\x7c\x6c\x6c\x6f\x66\x78\x30\xdb\x3c\x66\xe7\x66\x3c\xdb\x0" "\x1\x3\xf\x1f\xf\x3\x1\x0\x40\x60\x78\x7c\x78\x60\x40\x0\x18\x3c\x7e\x18\x7e\x3c\x18\x0\x66\x66\x66\x66\x66\x0\x66\x0\xfe\xdb\xde\xdc\xd8\xd8\xd8\x0\x3c\x66\x1c\x36\x36\x1c\x33\x1e\x0\x0\x0\x0\x7f\x7f\x7f\x0\x18\x3c\x7e\x18\x7e\x3c\x18\x7e" "\x18\x3c\x7e\x18\x18\x18\x18\x0\x18\x18\x18\x18\x7e\x3c\x18\x0\x0\x18\x38\x7f\x38\x18\x0\x0\x0\xc\xe\x7f\xe\xc\x0\x0\x0\x0\x3\x3\x3\x7f\x0\x0\x0\x24\x66\xff\x66\x24\x0\x0\x0\x8\x1c\x3e\x3e\x7f\x0\x0\x0\x7f\x3e\x3e\x1c\x8\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x18\x3c\x3c\x18\x18\x0\x18\x0\x36\x36\x36\x0\x0\x0\x0\x0\x36\x36\x7f\x36\x7f\x36\x36\x0\x18\x7e\x3\x3e\x60\x3f\x18\x0\x0\x63\x30\x18\xc\x6\x63\x0\x1c\x36\x1c\x6e\x33\x33\x6e\x0\x18\x18\xc\x0\x0\x0\x0\x0" "\x18\xc\x6\x6\x6\xc\x18\x0\x6\xc\x18\x18\x18\xc\x6\x0\x0\x77\x3e\x7f\x3e\x77\x0\x0\x0\x18\x18\x7e\x18\x18\x0\x0\x0\x0\x0\x0\x18\x18\xc\x0\x0\x0\x0\x7f\x0\x0\x0\x0\x0\x0\x0\x0\x0\x1c\x1c\x0\x60\x30\x18\xc\x6\x3\x1\x0" "\x0\x0\x3c\x76\x66\x6e\x3c\x0\x0\x0\x18\x1c\x18\x18\x3c\x0\x0\x0\x3c\x66\x30\xc\x7e\x0\x0\x7e\x30\x38\x60\x60\x30\x1e\x0\x34\x36\x36\x33\x7f\x30\x0\x0\x7e\x2\x3e\x66\x60\x30\x1e\x38\xc\x6\x3e\x66\x66\x3c\x0\x0\x7e\x60\x30\x38\x18\xc\xc" "\x3c\x66\x66\x3c\x66\x66\x3c\x0\x0\x3c\x66\x66\x7c\x60\x30\x1c\x0\x0\x4\x0\x0\x4\x0\x0\x0\x18\x18\x0\x0\x18\x18\xc\x30\x18\xc\x6\xc\x18\x30\x0\x0\x0\x7f\x0\x0\x7f\x0\x0\x6\xc\x18\x30\x18\xc\x6\x0\x3e\x63\x60\x30\x18\x0\x18\x0" "\x3e\x63\x63\x7b\x3b\x3\x7e\x0\x1c\x36\x63\x63\x7f\x63\x63\x0\x3f\x66\x66\x3e\x66\x66\x3f\x0\x3c\x66\x3\x3\x3\x66\x3c\x0\x1f\x36\x66\x66\x66\x36\x1f\x0\x3f\x33\x6\xc\x6\x33\x3f\x0\x1c\x6\x3\x1f\x3\x3\x3\x0\x3e\x63\x3\x3\x7b\x63\x3e\x0" "\x63\x63\x63\x7f\x63\x63\x63\x0\x3c\x18\x18\x18\x18\x18\x3c\x0\x18\x18\x18\x18\x1b\x1b\xe\x0\x63\x33\x1b\xf\x1b\x33\x63\x0\xf\x6\x6\x6\x6\x46\x7f\x0\x63\x77\x7f\x6b\x6b\x63\x63\x0\x1e\x33\x33\x33\x33\x33\x33\x0\x1c\x36\x63\x7f\x63\x36\x1c\x0" "\x3f\x66\x66\x3e\x6\x6\xf\x0\x3e\x63\x63\x63\x63\x6b\x3e\x60\x0\x3f\x33\x3\x3\x3\x3\x0\x3e\x63\x3\x3e\x60\x63\x3e\x0\x0\x6e\x3b\x18\x18\x18\x18\x0\x63\x63\x63\x63\x63\x63\x3e\x0\x63\x63\x63\x63\x36\x1c\x8\x0\x63\x63\x6b\x6b\x7f\x77\x63\x0" "\x63\x36\x1c\x1c\x1c\x36\x63\x0\x66\x66\x66\x66\x66\x7c\x60\xc0\x7f\x61\x30\x18\xc\x46\x7f\x0\x3e\x6\x6\x6\x6\x6\x3e\x0\x3\x6\xc\x18\x30\x60\x40\x0\x3e\x30\x30\x30\x30\x30\x3e\x0\x8\x1c\x36\x63\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xff" "\xc\xc\x18\x0\x0\x0\x0\x0\x0\x0\x6e\x3b\x13\x3b\x6e\x0\x0\x1e\x33\x1f\x33\x1f\x3\x3\x0\x0\x3e\x63\x3\x63\x3e\x0\x0\x0\x3f\x66\x66\x66\x3f\x0\x0\x1c\x6\x3\x1f\x3\x6\x1c\x0\x0\x7f\x3\x1f\x3\x3\x0\x0\x0\x3c\x66\x66\x38\x60\x38" "\x0\x0\x63\x63\x7f\x63\x63\x0\x0\x0\x3c\x18\x18\x18\x3c\x0\x0\x0\x30\x30\x30\x36\x1c\x0\x0\x0\x63\x33\x1f\x33\x63\x0\x0\x0\x3\x3\x3\x3\x3f\x0\x0\x0\x63\x77\x6b\x6b\x63\x0\x0\x0\x7e\x6c\x6c\x6c\x6c\x0\x0\x0\x3e\x63\x63\x63\x3e\x0" "\x0\x0\x3f\x66\x3e\x6\xf\x0\x0\x0\x3e\x63\x63\x3b\x6e\x0\x0\x0\x3f\x66\x3e\x36\x67\x0\x0\x0\x3e\x3\x3e\x60\x3e\x0\x0\x0\x7e\x5a\x18\x18\x3c\x0\x0\x0\x63\x63\x63\x63\x3e\x0\x0\x0\x63\x63\x36\x1c\x8\x0\x0\x0\x63\x6b\x6b\x77\x63\x0" "\x0\x0\x63\x36\x1c\x36\x63\x0\x0\x0\x66\x66\x3c\x18\x18\x0\x0\x0\x3f\x19\xc\x26\x3f\x0\x70\x18\x18\xe\x18\x18\x70\x0\x18\x18\x18\x0\x18\x18\x18\x0\xe\x18\x18\x70\x18\x18\xe\x0\x6e\x3b\x0\x0\x0\x0\x0\x0\x0\x8\x1c\x1c\x36\x36\x7f\x0" "\xff\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\x1\x80\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\xff" "\x1\x0\x0\x0\x0\x0\x0\x0\x80\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x1\x0\x0\x0\x0\x0\x0\x0\x80\x1\x3\x7\xf\x1f\x3f\x7f\xff\xff\xfe\xfc\xf8\xf0\xe0\xc0\x80\xff\xff\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0" "\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\x3\x3\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\xff\xff\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\xff\x30\xb7\x81\xed\xc\xff\x0\x3f\x29\x23\x31\x25\x3f\x0\x0\x7e\x52\x46\x62\x4a\x7e\x0\x0\xfc\xa4\x8c\xc4\x94\xfc\x0\x0\xf8\x48\x18\x88\x28\xf8\x0\x0\xf0\x90\x30\x10\x50\xf0\x0" "\x0\xe0\x20\x60\x20\xa0\xe0\x0\x0\xc0\x40\xc0\x40\x40\xc0\x0\x0\x80\x80\x80\x80\x80\x80\x0\x0\x1\x1\x1\x1\x1\x1\x0\x0\x3\x2\x2\x3\x2\x3\x0\x0\x7\x5\x4\x6\x4\x7\x0\x0\xf\xa\x8\xc\x9\xf\x0\x0\x1f\x14\x11\x18\x12\x1f\x0" "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xff\xff\x0\x18\x3c\x7e\xff\x0\xff\xff\x0\x0\x0\x0\x18\x18\xff\xff\x0\x18\x3c\x7e\xff\x3c\xff\xff\x0\x42\x66\x5a\x42\x42\x0\x0\x0\x18\x18\x0\x0\x0\x0\x0\x1\x1\x1\x1\x1\x0\x0\x0\x15\x15\x15\x15\x15\x0" "\x0\x0\x55\x55\x55\x55\x55\x0\x0\x0\x5\x5\x5\x5\x5\x0\x0\x0\x55\x55\x55\x55\x55\x0\x0\x0\x55\x55\x55\x55\x55\x0\x0\x0\x1\x1\x1\x1\x1\x0\x0\x0\x5\x5\x5\x5\x5\x0\x0\x0\x55\x55\x55\x55\x55\x0\x0\x0\x18\x3c\x3c\x18\x0\x0" "\x0\x0\x0\x66\x0\x0\x0\x0\x0\x78\x84\x2\x0\x0\x0\x0\x0\x0\x0\x41\x22\x1c\x0\x0\x0\x7c\x44\x44\x44\x44\xc6\x0\x0\x7c\x44\x44\x44\x44\xc7\x0\x0\xc\x34\xc4\x4\x4\x4\x0\x0\x20\x20\x20\x23\x2c\x30\x0\x0\x60\x20\x20\x20\x20\x60\x0" "\x0\x3\x2\x2\x2\x2\x3\x0\x0\x0\x0\x18\x18\x0\x0\x0\x0\x0\x18\x3c\x3c\x18\x0\x0\x0\x0\x18\x3c\x3c\x18\x0\x0\x0\x0\x0\x0\xff\x0\x0\x0\x0\x0\x3c\x3c\x3c\x3c\x0\x0\x0\x18\x3c\x7e\x7e\x3c\x18\x0\x0\x18\x3c\x7e\x7e\x3c\x18\x0" "\x0\x3c\x7e\x7e\x7e\x7e\x3c\x0\x0\x3c\x7e\x7e\x7e\x7e\x3c\x0\x6c\x6c\xef\x0\xff\x0\x0\x0\x0\x0\xff\x0\xef\x6c\x6c\x6c\x6c\x6c\xec\xc\xec\x6c\x6c\x6c\x0\x0\xff\x81\xff\x0\x0\x0\x6c\x6c\xef\x0\xef\x6c\x6c\x6c\x18\x18\xff\x0\xff\x0\x0\x0" "\x6c\x6c\x6c\x6c\xff\x0\x0\x0\x0\x0\xff\x0\xff\x18\x18\x18\x0\x0\x0\x0\xff\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xfc\x0\x0\x0\x18\x18\xf8\x18\xf8\x0\x0\x0\x0\x0\xf8\x18\xf8\x18\x18\x18\x0\x0\x0\x0\xfc\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xff\x6c\x6c\x6c" "\x18\x18\xff\x18\xff\x18\x18\x18\x18\x18\x18\x18\x1f\x0\x0\x0\x0\x0\x0\x0\xf8\x18\x18\x18\xff\xff\xff\xff\xff\xff\xff\xff\x0\x0\x0\x0\xff\xff\xff\xff\xf\xf\xf\xf\xf\xf\xf\xf\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xff\xff\xff\xff\x0\x0\x0\x0" "\x0\x0\x6e\x3b\x13\x3b\x6e\x0\x0\x1e\x33\x1f\x33\x1f\x3\x3\x0\x3f\x33\x3\x3\x3\x3\x0\x0\x0\x7f\x36\x36\x36\x36\x0\x3f\x33\x6\xc\x6\x33\x3f\x0\x0\x0\x7e\x1b\x1b\x1b\xe\x0\x0\x66\x66\x66\x66\x3e\x6\x3\x0\x6e\x3b\x18\x18\x18\x18\x0" "\x3f\xc\x1e\x33\x33\x1e\xc\x3f\x1c\x36\x63\x7f\x63\x36\x1c\x0\x1c\x36\x63\x63\x36\x36\x77\x0\x38\xc\x18\x3e\x33\x33\x1e\x0\x0\x0\x7e\xdb\xdb\x7e\x0\x0\x60\x30\x7e\xdb\xdb\x7e\x6\x3\x1c\x6\x3\x1f\x3\x6\x1c\x0\x0\x0\x0\x0\x0\xdb\xdb\x0" "\x0\x7e\x0\x7e\x0\x7e\x0\x0\x0\xf8\x8\x8\x8\x8\xf8\x0\x0\xff\x0\x0\x0\x0\xff\x0\x0\x1f\x10\x10\x10\x10\x1f\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x0\x2\x1\x0\x0\x0\x20\x30\x28\x24\x22\xa1\x60\x20\x0\x0\x0\x1\x2\x0\x0\x0" "\x20\x60\xa1\x22\x24\x28\x30\x20\x0\x0\x0\x40\x40\x40\x40\x7f\xff\x81\x81\x81\x81\x80\x80\x80\x0\x0\x0\x20\x20\x11\x11\xe\x38\x44\x44\x82\x82\x0\x0\x0\x0\x0\xfe\x7c\x38\x10\x0\x0\x0\x0\x10\x38\x7c\xfe\x0\x0\x80\xc1\x63\x36\x1c\x8\x0\x0" ), // Font no. 27 FontEntry("NOTCH", 8, 8, "\x0\x0\x0\x0\x0\x0\x0\x0\x7e\x81\xa5\x81\xbd\x99\x81\x7e\x7e\xff\xdb\xff\xff\xc3\xe7\x7e\x22\x77\x7f\x7f\x3e\x1c\x8\x0\x8\x1c\x3e\x7f\x3e\x1c\x8\x0\x18\x3c\x18\xff\xff\x52\x18\x0\x8\x1c\x3e\x7f\x7f\x49\x1c\x0\x0\x0\x18\x3c\x18\x0\x0\x0" "\xff\xff\xe7\xc3\xe7\xff\xff\xff\x0\x3c\x42\x42\x42\x42\x3c\x0\xff\xc3\xbd\xbd\xbd\xbd\xc3\xff\xf8\xe0\xb0\x3e\x63\x63\x3e\x0\x0\x7e\xc3\xc3\x7e\x18\x7e\x18\x20\x60\xe0\x20\x2e\x3f\x1f\xe\x30\x50\xb0\xd0\x9f\x8f\xf0\xf0\x81\xc2\xbc\xe4\xa4\xfc\xea\xff" "\x1\x3\x7\xf\xf\x7\x3\x1\x80\xc0\xe0\xf0\xf0\xe0\xc0\x80\xc\x1e\x3f\xc\xc\x3f\x1e\xc\x66\x66\x66\x66\x66\x0\x66\x0\xff\x6d\x6d\x6e\x6c\x6c\x6c\x0\x3e\x41\x1e\x22\x22\x3c\x41\x3e\x0\x0\x0\x0\x7f\x7f\x7f\x7f\x18\x7e\x18\x18\x7e\x18\x0\xff" "\x18\x3c\x7e\x18\x18\x18\x18\x0\x18\x18\x18\x18\x7e\x3c\x18\x0\x0\x20\x60\xff\x60\x20\x0\x0\x0\x4\x6\xff\x6\x4\x0\x0\x0\x0\x0\x3\x3\x3\xff\x0\x0\x24\x66\xff\x66\x24\x0\x0\x0\x0\x0\x0\x18\x3c\x7e\xff\xff\x7e\x3c\x18\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\xc\xc\xc\xc\xc\x0\xc\x0\x66\x66\x11\x0\x0\x0\x0\x0\xa\x1f\xa\x1f\xa\x0\x0\x0\x3e\x4b\xb\x3e\x68\x6b\x3e\x8\xc7\x65\x37\x18\xec\xa6\xe3\x0\x1c\x36\x1c\x6e\x3b\x33\x6e\x0\xc\xc\x6\x0\x0\x0\x0\x0" "\x40\x30\x18\x18\x18\x30\x40\x0\x1\x6\xc\xc\xc\x6\x1\x0\x0\x2a\x1c\x7f\x1c\x2a\x0\x0\x0\x18\x18\x7e\x18\x18\x0\x0\x0\x0\x0\x0\x0\xc\xc\x6\x0\x0\x0\x3f\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x30\x0\x80\xc0\x60\x30\x18\xc\x6\x3" "\x3e\x61\x63\x6b\x63\x63\x3e\x0\x18\x1c\x18\x18\x18\x18\x3c\x0\x3e\x63\x60\x30\xc\x6\x7f\x0\x3e\x43\x60\x3c\x60\x63\x3e\x0\x70\x78\x6c\x46\x7f\x60\x60\x0\x7f\x1\x3\x3f\x60\x60\x3f\x0\x3e\x63\x3\x3f\x63\x63\x3e\x0\x7f\x40\x30\x18\xc\xc\xc\x0" "\x3e\x63\x63\x3e\x63\x63\x3e\x0\x3e\x63\x63\x7e\x60\x30\x1c\x0\x0\xc\xc\x0\x0\xc\xc\x0\x0\xc\xc\x0\xc\xc\x6\x0\xc0\x60\x30\x18\x18\x30\x60\xc0\x0\x0\x7e\x0\x7e\x0\x0\x0\x3\x6\xc\x18\x18\xc\x6\x3\x3e\x63\x30\x18\xc\x0\xc\x0" "\x3e\x41\x5d\x55\x7d\x1\x3e\x0\x1c\x36\x63\x63\x7f\x63\x63\x0\x3f\x61\x63\x3f\x63\x63\x3f\x0\x3c\x66\x3\x3\x43\x66\x3c\x0\x3f\x61\x63\x63\x63\x63\x3f\x0\x7f\x1\x3\x1f\x3\x3\x7f\x0\x7f\x41\x3\x1f\x13\x3\x3\x0\x3e\x63\x3\x7b\x4b\x63\x5e\x0" "\x63\x63\x63\x7f\x63\x63\x63\x0\x7e\x8\x18\x18\x18\x18\x7e\x0\x78\x10\x30\x30\x30\x33\x1e\x0\x63\x33\x1b\xf\x1b\x33\x63\x0\xf\x2\x6\x6\x6\x46\x7f\x0\x63\x77\x7f\x6b\x6b\x63\x63\x0\x63\x67\x6f\x7b\x73\x63\x63\x0\x3e\x61\x63\x63\x63\x63\x3e\x0" "\x3f\x62\x66\x3e\x6\x6\xf\x0\x3e\x61\x63\x63\x7b\x73\x3e\x60\x3f\x62\x66\x3e\x66\x66\x67\xc0\x3e\x43\x3\x3e\x60\x63\x3e\x0\x7e\x8\x18\x18\x18\x18\x18\x0\x63\x63\x63\x63\x63\x63\x3e\x0\x63\x63\x63\x63\x63\x36\x1c\x0\x63\x63\x6b\x6b\x6b\x77\x63\x0" "\x63\x36\x1c\x8\x1c\x36\x63\x0\x41\x63\x36\x1c\xc\xc\x1e\x0\x7f\x61\x30\x18\xc\x46\x7f\x0\x70\x30\x30\x30\x30\x30\x30\x70\x3\x6\xc\x18\x30\x60\xc0\x80\xe\xc\xc\xc\xc\xc\xc\xe\x8\x1c\x36\x63\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xff" "\x18\x18\x30\x0\x0\x0\x0\x0\x0\x0\x3e\x60\x7e\x63\x7e\x0\x3\x3\x3f\x63\x63\x63\x3f\x0\x0\x0\x3e\x63\x3\x63\x3e\x0\x60\x60\x7e\x63\x63\x63\x7e\x0\x0\x0\x3e\x63\x7f\x3\x3e\x0\x3c\x66\x6\x3f\x6\x6\x7\x0\x0\x0\xbe\x63\x63\x7e\x60\x3e" "\x3\x3\x3f\x63\x63\x63\x63\x0\x18\x0\x1c\x18\x18\x18\x3c\x0\x30\x0\x38\x30\x30\x30\x33\x1e\x3\x3\x63\x1b\xf\x1b\x63\x0\x1c\x18\x18\x18\x18\x18\x38\x0\x0\x0\x63\x7f\x6b\x6b\x63\x0\x0\x0\x3f\x61\x63\x63\x63\x0\x0\x0\x3e\x63\x63\x63\x3e\x0" "\x0\x0\x3f\x61\x63\x3f\x3\x3\x0\x0\x7e\x43\x63\x7e\x60\xe0\x0\x0\x7b\x6e\x66\x6\x6\x0\x0\x0\x7e\x3\x3e\x60\x3f\x0\x18\x18\x7e\x18\x18\x18\x78\x0\x0\x0\x63\x63\x63\x63\x3e\x0\x0\x0\x63\x63\x63\x36\x1c\x8\x0\x0\x63\x6b\x6b\x7f\x63\x0" "\x0\x0\x63\x36\x1c\x36\x63\x0\x0\x0\x63\x63\x36\x1c\xc\x7\x0\x0\x7f\x30\x8\x46\x7f\x0\x70\x18\x18\xe\x18\x18\x70\x0\x18\x18\x18\x0\x18\x18\x18\x0\x7\xc\xc\x38\xc\xc\x7\x0\xe\xd9\x70\x0\x0\x0\x0\x0\x0\x0\x8\x14\x22\x7f\x0\x0" "\xff\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\x1\x80\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\xff" "\x1\x0\x0\x0\x0\x0\x0\x0\x80\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x1\x0\x0\x0\x0\x0\x0\x0\x80\x1\x3\x6\xd\x1a\x35\x6a\xd5\xab\x56\xac\x58\xb0\x60\xc0\x80\xff\xff\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0" "\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\x3\x3\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\xff\xff\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\x0\x55\x0\x0\x0\x0\x0\x3f\x3f\x3f\x3f\x3f\x3f\x0\x0\x7e\x7e\x7e\x7e\x7e\x7e\x0\x0\xfc\xfc\xfc\xfc\xfc\xfc\x0\x0\xf8\xf8\xf8\xf8\xf8\xf8\x0\x0\xf0\xf0\xf0\xf0\xf0\xf0\x0" "\x0\xe0\xe0\xe0\xe0\xe0\xe0\x0\x0\xc0\xc0\xc0\xc0\xc0\xc0\x0\x0\x80\x80\x80\x80\x80\x80\x0\x0\x1\x1\x1\x1\x1\x1\x0\x0\x3\x3\x3\x3\x3\x3\x0\x0\x7\x7\x7\x7\x7\x7\x0\x0\xf\xf\xf\xf\xf\xf\x0\x0\x1f\x1f\x1f\x1f\x1f\x1f\x0" "\x3e\x3e\x3e\x3e\x3e\x3e\x3e\x3e\xff\xff\x0\x0\x0\x8\x1c\x3e\xff\xff\x0\x0\x0\x0\x0\x7f\xff\xff\x0\x0\x8\x1c\x3e\x7f\xff\xff\x0\xc3\xe7\xff\xdb\xc3\x0\x0\x0\x0\x18\x0\x0\x0\x0\x3\x3\x3\x3\x3\x3\x3\x0\x1b\x1b\x1b\x1b\x1b\x1b\x1b" "\x0\xdb\xdb\xdb\xdb\xdb\xdb\xdb\x0\x6\x6\x6\x6\x6\x6\x6\x0\x36\x36\x36\x36\x36\x36\x36\x0\xb6\xb6\xb6\xb6\xb6\xb6\xb6\x0\x1\x1\x1\x1\x1\x1\x1\x0\xd\xd\xd\xd\xd\xd\xd\x0\x6d\x6d\x6d\x6d\x6d\x6d\x6d\x0\x0\x18\x3c\x3c\x18\x0\x0" "\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x3e\x7e\x7e\x7e\x7e\x7e\x7e\x3c\x0\x3f\x3f\x3f\x3f\x3f\x3f\xbf\x3f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x3c\x3c\x3c\x3c\x3c\x3c\xbc\x3e\x7c\x7c\x7c\x7c\x7c\x7c\x7c\x7e\x18\x18\x18\x1f\x18\x1f\x0\x0\x0\x0\x0\x1f\x18\x18\x18\x18" "\x18\x18\x18\xf8\x0\x0\x0\x0\x18\x18\x18\xff\x0\x0\x0\x0\x0\x0\x0\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\x18\x18\x18\x0\x0\x0\x0\xff\x0\x0\x0\x18\x18\x18\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\xf8\x18\x18\x6c\x6c\x6c\xec\x6c\x6c\x6c\x6c" "\x6c\x6c\x6c\xec\xc\xfc\x0\x0\x0\x0\x0\xfc\xc\xec\x6c\x6c\x6c\x6c\x6c\xef\x0\xff\x0\x0\x0\x0\x0\xff\x0\xef\x6c\x6c\x6c\x6c\x6c\xec\xc\xec\x6c\x6c\x0\x0\x0\xff\x0\xff\x0\x0\x6c\x6c\x6c\xef\x0\xef\x6c\x6c\x18\x18\x18\xff\x0\xff\x0\x0" "\x6c\x6c\x6c\xff\x0\x0\x0\x0\x0\x0\x0\xff\x0\xff\x18\x18\x0\x0\x0\xff\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xfc\x0\x0\x0\x0\x18\x18\x18\xf8\x18\xf8\x0\x0\x0\x0\x0\xf8\x18\xf8\x18\x18\x0\x0\x0\xfc\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xff\x6c\x6c\x6c\x6c" "\x18\x18\x18\xff\x18\xff\x18\x18\x18\x18\x18\x1f\x0\x0\x0\x0\x0\x0\x0\xf8\x18\x18\x18\x18\xff\xff\xff\xff\xff\xff\xff\xff\x0\x0\x0\x0\xff\xff\xff\xff\xf\xf\xf\xf\xf\xf\xf\xf\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xff\xff\xff\xff\x0\x0\x0\x0" "\x0\x0\xee\x19\x19\xee\x0\x0\x38\x6c\x66\x3f\x63\x63\x3f\x3\x7f\x46\x6\x6\x6\x6\x6\x0\x0\x0\xff\x66\x66\x66\x66\x0\x7f\x46\xc\x18\xc\x46\x7f\x0\x0\x0\xfc\x66\x63\x33\x1e\x0\x0\x0\xcc\xcc\xcc\x7c\xc\xf\x0\x0\xff\x18\x18\x18\x18\x0" "\x3c\x18\x3c\x66\x66\x3c\x18\x3c\x0\x3e\x63\x7f\x63\x3e\x0\x0\x0\x7e\xc3\xc3\xc3\x66\xe7\x0\x78\x98\x3c\x66\x63\x33\x1e\x0\x0\x0\x66\x99\x99\x66\x0\x0\x0\xc0\x3e\x73\x67\x3e\x3\x0\x0\x7c\x3\x7f\x3\x7c\x0\x0\x0\x0\x0\x0\x0\xdb\xdb\x0" "\x0\x7e\x0\x7e\x0\x7e\x0\x0\x0\xf8\x8\x8\x8\x8\xf8\x0\x0\xff\x0\x0\x0\x0\xff\x0\x0\x1f\x10\x10\x10\x10\x1f\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x0\x2\x1\x0\x0\x0\x20\x30\x28\x24\x22\xa1\x60\x20\x0\x0\x0\x1\x2\x0\x0\x0" "\x20\x60\xa1\x22\x24\x28\x30\x20\x0\x0\x0\x40\x40\x40\x40\x7f\xff\x81\x81\x81\x81\x80\x80\x80\x0\x0\x0\x20\x20\x11\x11\xe\x38\x44\x44\x82\x82\x0\x0\x0\x0\x0\xfe\x7c\x38\x10\x0\x0\x0\x0\x10\x38\x7c\xfe\x0\x0\x80\xc1\x63\x36\x1c\x8\x0\x0" ), // Font no. 28 FontEntry("PEANUT", 8, 8, "\x0\x0\x0\x0\x0\x0\x0\x0\x7e\x81\xa5\x81\xbd\x99\x81\x7e\x7e\xff\xdb\xff\xc3\xe7\xff\x7e\x36\x7f\x7f\x7f\x3e\x1c\x8\x0\x8\x1c\x3e\x7f\x3e\x1c\x8\x0\x1c\x3e\x1c\x7f\x7f\x49\x8\x3e\x0\x8\x1c\x3e\x7f\x3e\x1c\x3e\x0\x0\x18\x3c\x3c\x18\x0\x0" "\xff\xff\xe7\xc3\xc3\xe7\xff\xff\x0\x3c\x66\x42\x42\x66\x3c\x0\xff\xc3\x99\xbd\xbd\x99\xc3\xff\xf0\xe0\xf0\xbe\x33\x33\x33\x1e\x3c\x66\x66\x66\x3c\x18\x7e\x18\xfc\xcc\xfc\xc\xc\xe\xf\x7\xfe\xc6\xfe\xc6\xc6\xe6\x67\x3\x99\x5a\x3c\xe7\xe7\x3c\x5a\x99" "\x1\x7\x1f\x7f\x1f\x7\x1\x0\x40\x70\x7c\x7f\x7c\x70\x40\x0\x18\x3c\x7e\x18\x18\x7e\x3c\x18\x66\x66\x66\x66\x66\x0\x66\x0\xfe\xdb\xdb\xde\xd8\xd8\xd8\x0\x7c\xc6\x1c\x36\x36\x1c\x61\x3f\x0\x0\x0\x0\x7e\x7e\x7e\x0\x18\x3c\x7e\x18\x7e\x3c\x18\xff" "\x18\x3c\x7e\x18\x18\x18\x18\x0\x18\x18\x18\x18\x7e\x3c\x18\x0\x0\x18\x30\x7f\x30\x18\x0\x0\x0\xc\x6\x7f\x6\xc\x0\x0\x0\x0\x3\x3\x3\x7f\x0\x0\x0\x24\x66\xff\x66\x24\x0\x0\x0\x18\x3c\x7e\xff\xff\x0\x0\x0\xff\xff\x7e\x3c\x18\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x8\x1c\x1c\x8\x8\x0\x8\x0\x48\x24\x0\x0\x0\x0\x0\x0\x22\x7f\x22\x22\x22\x7f\x22\x0\x8\x3c\xa\x1c\x28\x1e\x8\x0\x0\x44\x22\x10\x8\x44\x22\x0\x1c\x22\x14\x6a\x11\x11\x6e\x0\x20\x10\x0\x0\x0\x0\x0\x0" "\x10\x8\x4\x4\x4\x8\x10\x0\x4\x8\x10\x10\x10\x8\x4\x0\x8\x2a\x1c\x7f\x1c\x2a\x8\x0\x0\x8\x8\x3e\x8\x8\x0\x0\x0\x0\x0\x0\x0\x8\x4\x0\x0\x0\x0\x7e\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x8\x0\x0\x40\x20\x10\x8\x4\x2\x0" "\x1c\x22\x32\x2a\x26\x22\x1c\x0\xc\x8\x8\x8\x8\x8\x8\x0\x1c\x22\x20\x18\x4\x2\x3e\x0\x1c\x22\x20\x18\x20\x22\x1c\x0\x0\x10\x8\x24\x22\x7e\x20\x0\x3f\x1\x1e\x20\x20\x11\xe\x0\x4\x2\x2\x3a\x46\x42\x3c\x0\x3c\x20\x20\x10\x10\x8\x8\x0" "\x3c\x12\xa\x3c\x42\x42\x3c\x0\x3c\x42\x62\x5c\x40\x40\x20\x0\x0\x0\x8\x0\x0\x8\x0\x0\x0\x0\x8\x0\x0\x8\x4\x0\x20\x10\x8\x4\x8\x10\x20\x0\x0\x0\x7e\x0\x7e\x0\x0\x0\x4\x8\x10\x20\x10\x8\x4\x0\x3c\x46\x46\x20\x10\x0\x10\x0" "\x3c\x42\x99\xa5\x59\x2\x7c\x0\x1c\x22\x42\x42\x7e\x42\x42\x0\x1e\x21\x21\x1f\x21\x21\x1f\x0\x3c\x2\x1\x1\x1\x2\x3c\x0\x3f\x41\x41\x41\x41\x41\x3f\x0\x3e\x1\x1\x1f\x1\x1\x3e\x0\x3c\x2\x2\x1e\x2\x2\x2\x0\x1e\x21\x1\x19\x21\x21\x1e\x0" "\x42\x42\x42\x42\x7e\x42\x42\x0\x1c\x8\x8\x8\x8\x8\x1c\x0\x30\x20\x20\x20\x20\x20\x1c\x0\x2\x22\x12\xa\xe\x12\x22\x0\x2\x2\x2\x2\x2\x2\x3e\x0\x1a\x2e\x2a\x2a\x2a\x2a\x2a\x0\x1a\x26\x22\x22\x22\x22\x22\x0\x1c\x22\x22\x22\x22\x22\x1c\x0" "\x3c\x42\x42\x3e\x2\x2\x2\x0\x3c\x42\x41\x41\x41\x51\x2e\x40\x3c\x42\x42\x3e\x12\x22\x42\x0\x1c\x22\x4\x8\x10\x22\x1c\x0\x3c\xa\x8\x8\x8\x8\x8\x0\x22\x22\x22\x22\x22\x32\x2c\x0\x22\x22\x22\x22\x22\x14\x8\x0\x2a\x2a\x2a\x2a\x2a\x2a\x1e\x0" "\x22\x22\x14\x8\x14\x22\x22\x0\x22\x22\x22\x32\x2c\x20\x18\x0\x3e\x20\x10\x8\x4\x2\x3e\x0\xe\x2\x2\x2\x2\x2\xe\x0\x0\x2\x4\x8\x10\x20\x40\x0\x1c\x10\x10\x10\x10\x10\x1c\x0\x8\x1c\x36\x1c\x8\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xff" "\x4\x4\x4\x0\x0\x0\x0\x0\x0\x0\x0\x3c\x42\x62\x5c\x0\x2\x2\x2\x3a\x46\x42\x3c\x0\x0\x0\x0\x3c\x2\x2\x3c\x0\x40\x40\x40\x5c\x62\x42\x3c\x0\x0\x0\x1c\x22\x3e\x2\x3c\x0\x0\x1c\x2\x1e\x2\x2\x2\x0\x0\x0\x3c\x42\x62\x5c\x40\x3c" "\x2\x2\x2\x2\x3a\x46\x42\x0\x0\x0\x8\x0\x8\x8\x8\x0\x0\x0\x20\x0\x20\x20\x20\x18\x2\x2\x2\x12\xa\x16\x22\x0\x8\x8\x8\x8\x8\x8\x8\x0\x0\x0\x0\x6a\x56\x52\x52\x0\x0\x0\x0\x3a\x26\x22\x22\x0\x0\x0\x0\x1c\x22\x22\x1c\x0" "\x0\x0\x3c\x42\x46\x3a\x2\x2\x0\x0\x3c\x42\x62\x5c\x40\x40\x0\x0\x1a\x26\x2\x2\x2\x0\x0\x0\x18\x24\x8\x12\xc\x0\x0\x0\x8\x38\xc\x8\x8\x0\x0\x0\x0\x42\x42\x62\x5c\x0\x0\x0\x0\x42\x42\x24\x18\x0\x0\x0\x0\x2a\x2a\x2a\x1e\x0" "\x0\x0\x20\x16\x8\x34\x2\x0\x0\x0\x42\x42\x62\x5c\x40\x3c\x0\x0\x2c\x12\x8\x24\x1a\x0\x60\x10\x10\xc\x10\x10\x60\x0\x8\x8\x8\x8\x8\x8\x8\x8\x6\x8\x8\x30\x8\x8\x6\x0\x26\x19\x0\x0\x0\x0\x0\x0\x0\x8\x1c\x36\x63\x63\x7f\x0" "\xfc\x2\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\x3f\x40\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\x1\x80\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x2\xfc\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x40\x3f" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x1\x3\x7\xf\x1f\x3f\x7e\xfc\x3f\x7e\xfc\xf8\xf0\xe0\xc0\x80\xc0\xb0\xec\x3c\x1a\xe\x7\x5\xff\x55\xff\x0\x0\x0\x0\x0" "\x3\xd\x3f\x34\x78\x50\xe0\xa0\x7\x5\x7\x5\x7\x5\x7\x5\xe0\xa0\xe0\xa0\xe0\xa0\xe0\xa0\x7\x5\xe\xa\x3c\xec\x70\xc0\x0\x0\x0\x0\x0\xff\x55\xff\xe0\xa0\x70\x58\x3c\x37\xd\x3\x7\x5\x7\x0\x0\x0\x0\x0\xe0\xa0\xe0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x7\x5\x7\x0\x0\x0\x0\x0\xe0\xa0\xe0\x0\x81\xc3\xe7\xff\x7e\x3c\x18\x0\x1e\x29\x23\x31\x25\x1e\x0\x0\x3c\x52\x46\x62\x4a\x3c\x0\x0\x78\xa4\x8c\xc4\x94\x78\x0\x0\xf0\x48\x18\x88\x28\xf0\x0\x0\xe0\x90\x30\x10\x50\xe0\x0" "\x0\xc0\x20\x60\x20\xa0\xc0\x0\x0\x80\x40\xc0\x40\x40\x80\x0\x0\x0\x80\x80\x80\x80\x0\x0\x0\x0\x1\x1\x1\x1\x0\x0\x0\x1\x2\x2\x3\x2\x1\x0\x0\x3\x5\x4\x6\x4\x3\x0\x0\x7\xa\x8\xc\x9\x7\x0\x0\xf\x14\x11\x18\x12\xf\x0" "\x78\x3c\x1e\x3c\x78\x3c\x1e\x3c\xff\xff\x0\x18\x3c\x7e\xff\x0\xff\xff\x0\x0\x0\x0\x18\x18\xff\xff\x0\x18\x3c\x7e\xff\x18\xff\xff\x0\x42\x66\x5a\x42\x42\x0\x0\x0\x0\x10\x0\x0\x0\x0\x3\x3\x3\x3\x3\x3\x3\x0\x1b\x1b\x1b\x1b\x1b\x1b\x1b" "\x0\xdb\xdb\xdb\xdb\xdb\xdb\xdb\x0\x6\x6\x6\x6\x6\x6\x6\x0\x36\x36\x36\x36\x36\x36\x36\x0\xb6\xb6\xb6\xb6\xb6\xb6\xb6\x0\x1\x1\x1\x1\x1\x1\x1\x0\xd\xd\xd\xd\xd\xd\xd\x0\x6d\x6d\x6d\x6d\x6d\x6d\x6d\x0\x0\x18\x3c\x3c\x18\x0\x0" "\x0\x0\x0\x66\x0\x0\x0\x0\x0\x78\x84\x2\x0\x0\x0\x0\x0\x0\x0\x41\x22\x1c\x0\x0\x0\x7c\x44\x44\x44\x44\xc6\x0\x0\x7c\x44\x44\x44\x44\xc7\x0\x0\xc\x34\xc4\x4\x4\x4\x0\x0\x20\x20\x20\x23\x2c\x30\x0\x0\x60\x20\x20\x20\x20\x60\x0" "\x0\x3\x2\x2\x2\x2\x3\x0\x0\x0\x0\x18\x18\x0\x0\x0\x0\x0\x18\x3c\x3c\x18\x0\x0\x0\x0\x18\x3c\x3c\x18\x0\x0\x0\x0\x0\x0\xff\x0\x0\x0\x0\x0\x3c\x3c\x3c\x3c\x0\x0\x0\x18\x3c\x7e\x7e\x3c\x18\x0\x0\x18\x3c\x7e\x7e\x3c\x18\x0" "\x0\x3c\x7e\x7e\x7e\x7e\x3c\x0\x0\x3c\x7e\x7e\x7e\x7e\x3c\x0\x6c\x6c\xef\x0\xff\x0\x0\x0\x0\x0\xff\x0\xef\x6c\x6c\x6c\x6c\x6c\xec\xc\xec\x6c\x6c\x6c\x0\x0\xff\x81\xff\x0\x0\x0\x6c\x6c\xef\x0\xef\x6c\x6c\x6c\x18\x18\xff\x0\xff\x0\x0\x0" "\x6c\x6c\x6c\x6c\xff\x0\x0\x0\x0\x0\xff\x0\xff\x18\x18\x18\x0\x0\x0\x0\xff\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xfc\x0\x0\x0\x18\x18\xf8\x18\xf8\x0\x0\x0\x0\x0\xf8\x18\xf8\x18\x18\x18\x0\x0\x0\x0\xfc\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xff\x6c\x6c\x6c" "\x18\x18\xff\x18\xff\x18\x18\x18\x18\x18\x18\x18\x1f\x0\x0\x0\x0\x0\x0\x0\xf8\x18\x18\x18\xff\xff\xff\xff\xff\xff\xff\xff\x0\x0\x0\x0\xff\xff\xff\xff\xf\xf\xf\xf\xf\xf\xf\xf\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xff\xff\xff\xff\x0\x0\x0\x0" "\x0\x0\x6e\x3b\x13\x3b\x6e\x0\x0\x1e\x33\x1f\x33\x1f\x3\x3\x0\x3f\x33\x3\x3\x3\x3\x0\x0\x0\x7f\x36\x36\x36\x36\x0\x3f\x33\x6\xc\x6\x33\x3f\x0\x0\x0\x7e\x1b\x1b\x1b\xe\x0\x0\x66\x66\x66\x66\x3e\x6\x3\x0\x6e\x3b\x18\x18\x18\x18\x0" "\x3f\xc\x1e\x33\x33\x1e\xc\x3f\x1c\x36\x63\x7f\x63\x36\x1c\x0\x1c\x36\x63\x63\x36\x36\x77\x0\x38\xc\x18\x3e\x33\x33\x1e\x0\x0\x0\x7e\xdb\xdb\x7e\x0\x0\x60\x30\x7e\xdb\xdb\x7e\x6\x3\x1c\x6\x3\x1f\x3\x6\x1c\x0\x0\x0\x0\x0\x0\xdb\xdb\x0" "\x0\x7e\x0\x7e\x0\x7e\x0\x0\x0\xf8\x8\x8\x8\x8\xf8\x0\x0\xff\x0\x0\x0\x0\xff\x0\x0\x1f\x10\x10\x10\x10\x1f\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x0\x2\x1\x0\x0\x0\x20\x30\x28\x24\x22\xa1\x60\x20\x0\x0\x0\x1\x2\x0\x0\x0" "\x20\x60\xa1\x22\x24\x28\x30\x20\x0\x0\x0\x40\x40\x40\x40\x7f\xff\x81\x81\x81\x81\x80\x80\x80\x0\x0\x0\x20\x20\x11\x11\xe\x38\x44\x44\x82\x82\x0\x0\x0\x0\x0\xfe\x7c\x38\x10\x0\x0\x0\x0\x10\x38\x7c\xfe\x0\x0\x80\xc1\x63\x36\x1c\x8\x0\x0" ), // Font no. 29 FontEntry("PERISOFT", 8, 8, "\x0\x0\x0\x0\x0\x0\x0\x0\x7e\x81\xa5\x81\xbd\x99\x81\x7e\x7e\xff\xdb\xff\xff\xc3\xe7\x7e\x0\x77\x7f\x7f\x3e\x1c\x8\x0\x8\x1c\x3e\x7f\x3e\x1c\x8\x0\x18\x3c\x18\xff\xff\x52\x18\x0\x8\x1c\x3e\x7f\x7f\x49\x1c\x0\x0\x0\x18\x3c\x18\x0\x0\x0" "\xff\xff\xe7\xc3\xe7\xff\xff\xff\x0\x3c\x42\x81\x81\x42\x3c\x0\xff\xc3\xbd\x7e\x7e\xbd\xc3\xff\xf8\xe0\xb0\x3e\x63\x63\x3e\x0\x0\x7e\xc3\xc3\x7e\x18\x7e\x18\x20\x60\xe0\x20\x20\x3f\x1f\x0\x30\x50\xb0\xd0\x9f\x8f\xf0\xf0\x81\xc2\xbc\xe4\xa4\xfc\xea\xff" "\x0\x0\x6\x1e\x7e\x1e\x6\x0\x0\x0\x60\x78\x7e\x78\x60\x0\x18\x7e\x18\x18\x18\x18\x7e\x18\x66\x66\x66\x66\x66\x0\x66\x0\xff\x6d\x6e\x6c\x6c\x6c\x6c\x0\x7e\x81\x3e\x42\x42\x7c\x81\x7e\x0\x0\x0\x7e\x7e\x0\x0\x0\x18\x7e\x18\x18\x7e\x18\x0\xff" "\x18\x7e\x18\x18\x18\x18\x18\x0\x18\x18\x18\x18\x18\x7e\x18\x0\x0\x20\x60\xff\x60\x20\x0\x0\x0\x4\x6\xff\x6\x4\x0\x0\x0\x0\x0\x3\x3\x3\xff\x0\x0\x24\x66\xff\x66\x24\x0\x0\x0\x8\x8\x14\x36\x6b\x0\x7f\x0\x0\x0\x7f\x3e\x1c\x8\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x8\xc\xc\xc\x4\x0\xc\x0\x66\x44\x0\x0\x0\x0\x0\x0\x12\x36\x7f\x36\x7f\x36\x12\x0\x3e\x6b\xb\xb\x3e\x69\x3e\x8\xce\x69\x35\x1a\x6c\x56\x33\x0\x1c\x26\xa6\x7c\x3e\x23\x5e\x80\x10\x18\xc\x0\x0\x0\x0\x0" "\xe0\x30\x18\x18\x18\x30\x60\xc0\x3\x6\xc\x18\x18\x18\xc\x7\x9\x2a\x1c\x7f\x1c\x2a\x48\x0\x8\x18\x18\x18\x7e\x18\x10\x0\x0\x0\x0\x0\x0\x10\x18\xe\x0\x0\x0\x7e\x1\x0\x0\x0\x0\x0\x0\x0\x0\x18\x38\x0\x80\xc0\x60\x30\x18\xc\x6\x3" "\x3c\x66\x76\x56\x4e\x2e\x1c\x0\xc\x18\x18\x18\x18\x18\x3c\x0\x3e\x63\x40\x60\x3e\x7\x7f\x0\x3e\x63\x60\x60\x38\x63\x3e\x0\x30\x58\x4c\x46\x43\x7e\x40\x0\x3f\x63\x3\x3\x3e\x40\x3f\x0\x3c\x66\x43\x3\x3f\x43\x3e\x0\x3f\x60\x30\x18\xc\x6\x3\x0" "\x3e\x43\x43\x43\x3e\x43\x3e\x0\x3e\x43\x43\x43\x7e\x41\x3e\x0\x0\x8\xc\x0\x0\xc\x8\x0\x0\x8\x8\x0\x8\xc\x4\x0\x0\x30\x18\xc\x6\xc\x18\x0\x0\x0\x40\x7e\x0\x7e\x2\x0\x0\x3\x6\xc\x18\xc\x6\x0\x3e\x63\x60\x60\x3c\x0\xc\x8" "\x1c\x22\x49\x55\x35\x9\x22\x1c\xe\x1b\x23\x43\x43\x7f\x43\x0\x3e\x43\x43\x23\x3f\x43\x3e\x0\x3e\x43\x43\x3\x43\x43\x3e\x0\x3e\x43\x43\x43\x43\x23\x1f\x0\x3e\x43\x3\x1b\x7\x43\x3e\x0\x3e\x43\x3\x1b\x7\x3\x2\x0\x3e\x43\x23\x3\x3b\x43\x3e\x0" "\x42\x43\x43\x63\x7f\x43\x42\x0\x7e\x18\x10\x10\x10\x18\x7e\x0\x18\x30\x20\x20\x21\x33\x1e\x0\x62\x33\x1b\xf\xf\x1b\x32\x0\x6\x3\x3\x3\x3\x43\x3e\x0\x22\x63\x63\x77\x7f\x6b\x22\x0\x42\x43\x43\x47\x4f\x5b\x72\x0\x3e\x43\x43\x43\x43\x43\x3e\x0" "\x3e\x43\x43\x43\x3f\x3\x6\x0\x3e\x43\x43\x43\x43\x53\x5e\x80\x3e\x43\x43\x23\x1f\x23\x42\x0\x3e\x43\x3\xe\x38\x43\x3e\x0\x7f\x1c\x18\x18\x18\x18\x8\x0\x42\x43\x43\x43\x43\x43\x3e\x0\x42\x43\x43\x43\x23\x13\xe\x0\x42\x43\x43\x43\x5b\x6f\x46\x0" "\x81\x43\x23\x16\x1c\x3e\x63\x0\x43\x43\x26\x2c\x18\x8\x8\x0\x3e\x61\x30\x18\x7f\x6\x7f\x0\x70\x18\x18\x18\x18\x18\x18\x70\x3\x6\xc\x18\x30\x60\xc0\x80\x7\xc\xc\xc\xc\xc\xc\x7\x8\x1c\x26\x43\x81\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xff" "\x8\xc\x18\x30\x0\x0\x0\x0\x0\x0\x1e\x20\x3e\x63\xde\x0\x2\x3\x3\x3b\x47\x43\x3e\x0\x0\x0\x1e\x23\x3\x43\x3e\x0\x20\x40\x5c\x66\x63\x43\x7e\x0\x0\x0\x1e\x23\x1f\x3\x3e\x0\x3c\x46\x46\x6\x6\x1f\x6\x0\x0\x0\x3e\x43\x63\x5e\x40\x3e" "\x2\x3\x3b\x6f\x47\x43\x42\x0\x18\x10\x4\x18\x18\x18\x38\x0\x40\x60\x0\x60\x20\x21\x31\x1e\x2\x23\x13\xb\x7\xb\x12\x0\xc\x18\x18\x18\x18\x18\x30\x0\x0\x0\x22\x77\x6b\x6b\x22\x0\x0\x0\x3e\x43\x43\x43\x43\x0\x0\x0\x3e\x43\x43\x43\x3e\x0" "\x0\x0\x1e\x23\x43\x3f\x3\x2\x0\x0\x3c\x46\x43\x7e\x40\x80\x0\x0\x38\x4f\x46\x6\x6\x0\x0\x0\x3e\x3\x1c\x30\x1f\x0\x8\xc\xc\xc\x7f\xc\x78\x0\x0\x0\x43\x43\x43\x46\xbc\x0\x0\x0\x42\x43\x43\x26\x1c\x0\x0\x0\x22\x6b\x6b\x77\x22\x0" "\x0\x0\x23\x16\xc\x16\x23\x0\x0\x0\x43\x43\x43\x7e\x40\x3f\x0\x0\x7e\x30\x8\x6\x7f\x0\x78\xc\x18\xe\x18\xc\x78\x0\x8\x18\x18\x18\x18\x18\x18\x10\x7\xc\x6\x3c\x6\xc\x7\x0\x6\x8d\x78\x0\x0\x0\x0\x0\x0\x0\x8\x14\x22\x7f\x0\x0" "\xfe\xff\x3\xf3\xb\xb\xb\xb\xff\xff\x0\xff\x0\x0\x0\x0\x7f\xff\xc0\xcf\xd0\xd0\xd0\xd0\xb\xb\xb\xb\xb\xb\xb\xb\xd0\xd0\xd0\xd0\xd0\xd0\xd0\xd0\xb\xb\xb\xb\xf3\x3\xff\xfe\x0\x0\x0\x0\xff\x0\xff\xff\xd0\xd0\xd0\xd0\xcf\xc0\xff\x7f" "\xb\xd\x6\x3\x0\x0\x0\x0\xd0\xb0\x60\xc0\x0\x0\x0\x0\x0\x0\x0\x0\x3\x6\xd\xb\x0\x0\x0\x0\xc0\x60\xb0\xd0\xb\xb\x13\x33\xc6\xe\xfc\xf0\xf\x3f\x70\x60\xc1\xc6\xc4\xc8\xfe\xff\x47\xa3\xd3\x6b\x37\x1b\xff\xff\x55\xaa\xff\x0\x0\x0" "\xff\xff\xd5\xea\xdf\xe8\xd8\xe8\x1b\x17\x1b\x17\x1b\x17\x1b\x17\xe8\xd8\xe8\xd8\xe8\xd8\xe8\xd8\x17\x1b\x17\xfb\x57\xab\xff\xff\x0\x0\x0\xff\x55\xaa\xff\xff\xd8\xe8\xd8\xef\xd5\xea\xff\xff\x17\x1b\x15\x1a\xf\x0\x0\x0\xd8\xe8\x58\xa8\xf0\x0\x0\x0" "\x0\x0\x0\xf\x15\x1a\x17\x1b\x0\x0\x0\xf0\x58\xa8\xd8\xe8\x0\x0\x0\x55\x0\xaa\x0\x0\x0\x1c\x26\x26\x26\x3e\x7f\x2a\x0\x0\x1c\x26\x26\x26\x3e\x7f\x0\x0\x1c\x26\xe6\xa6\x3e\x7f\x0\x0\x1c\x26\xe6\xa6\x3e\x7f\x0\x1c\x26\xa6\xe6\x3e\x7f\x0" "\xe0\x30\x30\x30\xf0\xf8\x0\x0\x80\xc0\xc0\xc0\xc0\xe0\x0\x0\x0\x0\x80\x80\x80\x80\xc0\x0\x0\x0\x0\x0\x1f\x1d\x0\x0\x0\x0\x0\x1\x1f\x3c\x10\x38\x0\x1\x5\xf\x19\x3b\x10\x38\x3\x4\x4\x1c\x37\x2f\x70\x38\x0\x7\x9\x9\x9\x1f\x3f\x38" "\x18\x2c\x26\x1c\x38\x64\x3c\x18\xff\xff\x0\x0\x8\x8\x14\x6b\xff\xff\x0\x0\x0\x0\x0\x7f\xff\xff\x0\x8\x8\x14\x2a\x5d\xff\x7e\x0\x42\xe7\xff\xdb\x42\x0\x0\x0\x8\x18\x0\x0\x0\x0\x3\x5\x5\x5\x5\x3\x0\x0\x7\x1d\x29\x29\x1d\x7\x0" "\x0\x0\xf\xf9\xc9\x3d\xf\x0\x0\x0\x6\x5\x5\x6\x0\x0\x0\x20\x3e\x33\x27\x3e\x20\x0\x0\xe0\xfe\x9b\x93\xde\xf0\x0\x0\xf\x1a\x12\x12\x12\x1b\xf\x0\x1f\x3a\x52\x52\x52\x3b\x1f\x0\x7f\xda\x92\x92\xd2\xfb\x1f\x0\x0\x18\x3c\x3c\x18\x0\x0" "\x0\x0\x0\x1f\x18\x1f\x18\x18\x6c\x6c\x6c\x6f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x0\x0\x0\x7f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6f\x60\x7f\x0\x0\x6c\x6c\x6c\x7f\x0\x0\x0\x0\x18\x18\x18\x1f\x18\x1f\x0\x0\x0\x0\x0\x1f\x18\x18\x18\x18" "\x18\x18\x18\xf8\x0\x0\x0\x0\x18\x18\x18\xff\x0\x0\x0\x0\x0\x0\x0\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\x18\x18\x18\x0\x0\x0\x0\xff\x0\x0\x0\x18\x18\x18\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\xf8\x18\x18\x6c\x6c\x6c\xec\x6c\x6c\x6c\x6c" "\x6c\x6c\x6c\xec\xc\xfc\x0\x0\x0\x0\x0\xfc\xc\xec\x6c\x6c\x6c\x6c\x6c\xef\x0\xff\x0\x0\x0\x0\x0\xff\x0\xef\x6c\x6c\x6c\x6c\x6c\xec\xc\xec\x6c\x6c\x0\x0\x0\xff\x0\xff\x0\x0\x6c\x6c\x6c\xef\x0\xef\x6c\x6c\x18\x18\x18\xff\x0\xff\x0\x0" "\x6c\x6c\x6c\xff\x0\x0\x0\x0\x0\x0\x0\xff\x0\xff\x18\x18\x0\x0\x0\xff\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xfc\x0\x0\x0\x0\x18\x18\x18\xf8\x18\xf8\x0\x0\x0\x0\x0\xf8\x18\xf8\x18\x18\x0\x0\x0\xfc\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xff\x6c\x6c\x6c\x6c" "\x18\x18\x18\xff\x18\xff\x18\x18\x18\x18\x18\x1f\x0\x0\x0\x0\x0\x0\x0\xf8\x18\x18\x18\x18\xff\xff\xff\xff\xff\xff\xff\xff\x0\x0\x0\x0\xff\xff\xff\xff\xf\xf\xf\xf\xf\xf\xf\xf\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xff\xff\xff\xff\x0\x0\x0\x0" "\x0\x0\xee\x19\x19\xee\x0\x0\x38\x6c\x66\x3f\x63\x63\x3f\x3\x7f\x46\x6\x6\x6\x6\x6\x0\x0\x0\xff\x66\x66\x66\x66\x0\x7f\x46\xc\x18\xc\x46\x7f\x0\x0\x0\xfc\x66\x63\x33\x1e\x0\x0\x0\xcc\xcc\xcc\x7c\xc\xf\x0\x0\xff\x18\x18\x18\x18\x0" "\x3c\x18\x3c\x66\x66\x3c\x18\x3c\x0\x3e\x63\x7f\x63\x3e\x0\x80\xc0\x20\xd0\xe8\xf4\x1a\x8d\xe6\xaa\x83\x7d\x4d\x75\x4d\x7a\x85\xaa\xff\xff\x9d\xad\xbb\xd9\xff\xaa\xff\x7f\xdd\xea\xab\x5d\xff\xaa\xcc\x77\xcc\xff\xe0\xdb\x7b\x0\x0\x0\x0\x0\xdb\xdb\x0" "\x0\x7e\x0\x7e\x0\x7e\x0\x0\x0\xf8\x8\x8\x8\x8\xf8\x0\x0\xff\x0\x0\x0\x0\xff\x0\x0\x1f\x10\x10\x10\x10\x1f\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x0\x2\x1\x0\x0\x0\x20\x30\x28\x24\x22\xa1\x60\x20\x0\x0\x0\x1\x2\x0\x0\x0" "\x20\x60\xa1\x22\x24\x28\x30\x20\x0\x0\x0\x40\x40\x40\x40\x7f\xff\x81\x81\x81\x81\x80\x80\x80\x0\x0\x0\x20\x20\x11\x11\xe\x38\x44\x44\x82\x82\x0\x0\x0\x0\x0\xfe\x7c\x38\x10\x0\x0\x0\x0\x10\x38\x7c\xfe\x0\x0\x80\xc1\x63\x36\x1c\x8\x0\x0" ), // Font no. 30 FontEntry("REZ-ASCII", 8, 8, "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x18\x18\x18\x18\x0\x18\x18\x0\x0\x6c\x6c\x6c\x0\x0\x0\x0\x0\x24\x7e\x24\x24\x7e\x24\x0\x18\x7c\xe\x3c\x70\x3e\x18\x0\x4e\x6a\x3e\x18\x7c\x56\x72\x0\x3c\x66\x66\x3c\x1e\x36\x6c\x0\x18\x18\xc\x0\x0\x0\x0\x0" "\x60\x30\x18\x18\x18\x30\x60\x0\x6\xc\x18\x18\x18\xc\x6\x0\x0\x10\x54\x38\x38\x54\x10\x0\x0\x0\x18\x18\x7e\x18\x18\x0\x0\x0\x0\x0\x0\x18\x18\xc\x0\x0\x0\x3c\x3c\x0\x0\x0\x0\x0\x0\x0\x0\x18\x18\x0\x40\x60\x30\x18\xc\x6\x2\x0" "\x3c\x66\x76\x7e\x6e\x66\x3c\x0\x18\x1c\x18\x18\x18\x18\x3c\x0\x3c\x66\x66\x30\x18\xc\x7e\x0\x3c\x66\x66\x30\x66\x66\x3c\x0\x6\x6\x66\x66\x7c\x60\x60\x0\x7e\x66\x6\x3e\x60\x66\x3c\x0\x3c\x66\x6\x3e\x66\x66\x3c\x0\x7e\x66\x60\x30\x18\xc\xc\x0" "\x3c\x66\x66\x3c\x66\x66\x3c\x0\x3c\x66\x66\x7c\x60\x66\x3c\x0\x0\x0\x18\x18\x0\x18\x18\x0\x0\x0\x18\x18\x0\x18\x18\xc\x20\x30\x18\xc\x18\x30\x20\x0\x0\x0\x3c\x3c\x0\x3c\x3c\x0\x8\x18\x30\x60\x30\x18\x8\x0\x3c\x66\x66\x30\x18\x0\x18\x0" "\x78\x84\xb2\xaa\xaa\x72\x4\xf8\x3c\x66\x66\x7e\x66\x66\x66\x0\x3e\x66\x66\x3e\x66\x66\x3e\x0\x3c\x66\x66\x6\x66\x66\x3c\x0\x3e\x66\x66\x66\x66\x66\x3e\x0\x7e\x66\x6\xe\x6\x66\x7e\x0\x7e\x66\x6\xe\x6\x6\x6\x0\x3c\x66\x6\x76\x66\x66\x3c\x0" "\x66\x66\x66\x7e\x66\x66\x66\x0\x3c\x18\x18\x18\x18\x18\x3c\x0\x78\x30\x30\x30\x36\x36\x1c\x0\x66\x66\x66\x3e\x66\x66\x66\x0\x6\x6\x6\x6\x6\x6\x7e\x0\x42\x66\x7e\x66\x66\x66\x66\x0\x62\x66\x6e\x7e\x76\x66\x46\x0\x3c\x66\x66\x66\x66\x66\x3c\x0" "\x3e\x66\x66\x3e\x6\x6\x6\x0\x3c\x66\x66\x66\x66\x76\x3c\x60\x3e\x66\x66\x3e\x66\x66\x66\x0\x3c\x66\x6\x3c\x60\x66\x3c\x0\x3e\x60\x60\x60\x60\x60\x60\x0\x66\x66\x66\x66\x66\x66\x3c\x0\x66\x66\x66\x66\x66\x6c\x38\x0\x66\x66\x66\x66\x7e\x66\x42\x0" "\x66\x66\x66\x3c\x66\x66\x66\x0\x66\x66\x66\x3c\x18\x18\x18\x0\x7e\x66\x30\x18\xc\x66\x7e\x0\x78\x18\x18\x18\x18\x18\x78\x0\x2\x6\xc\x18\x30\x60\x40\x0\x1e\x18\x18\x18\x18\x18\x1e\x0\x10\x38\x6c\x44\x0\x0\x0\x0\x0\x0\x0\x0\x0\x7e\x7e\x0" "\x0\x18\x18\x30\x0\x0\x0\x0\x0\x0\x3e\x60\x7e\x66\x7e\x0\x6\x6\x3e\x66\x66\x66\x3e\x0\x0\x0\x3c\x66\x6\x66\x3c\x0\x60\x60\x7c\x66\x66\x66\x7c\x0\x0\x0\x3c\x66\x7e\x6\x7c\x0\x3c\x66\x66\x6\xe\x6\x6\x0\x0\x0\x7c\x66\x66\x7c\x60\x3e" "\x6\x6\x3e\x66\x66\x66\x66\x0\x18\x0\x18\x18\x18\x18\x18\x0\x60\x0\x60\x60\x60\x66\x66\x3c\x6\x6\x66\x66\x3e\x66\x66\x0\x18\x18\x18\x18\x18\x18\x18\x0\x0\x0\x66\x7e\x66\x66\x66\x0\x0\x0\x3e\x66\x66\x66\x66\x0\x0\x0\x3c\x66\x66\x66\x3c\x0" "\x0\x0\x3e\x66\x66\x66\x3e\x6\x0\x0\x7c\x66\x66\x66\x7c\x60\x0\x0\x3e\x66\x66\x6\x6\x0\x0\x0\x7c\x6\x7e\x60\x3e\x0\xc\xc\x3c\xc\xc\x6c\x78\x0\x0\x0\x66\x66\x66\x66\x3c\x0\x0\x0\x66\x66\x66\x6c\x38\x0\x0\x0\x66\x66\x66\x7e\x66\x0" "\x0\x0\x66\x66\x3c\x66\x66\x0\x0\x0\x66\x66\x66\x7c\x60\x3e\x0\x0\x7e\x30\x18\xc\x7e\x0\x70\x18\x18\xc\x18\x18\x70\x0\x18\x18\x18\x0\x18\x18\x18\x0\xe\x18\x18\x30\x18\x18\xe\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xff\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xdb\xdb\x0" "\x0\x7e\x0\x7e\x0\x7e\x0\x0\x0\xf8\x8\x8\x8\x8\xf8\x0\x0\xff\x0\x0\x0\x0\xff\x0\x0\x1f\x10\x10\x10\x10\x1f\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x0\x2\x1\x0\x0\x0\x20\x30\x28\x24\x22\xa1\x60\x20\x0\x0\x0\x1\x2\x0\x0\x0" "\x20\x60\xa1\x22\x24\x28\x30\x20\x0\x0\x0\x40\x40\x40\x40\x7f\xff\x81\x81\x81\x81\x80\x80\x80\x0\x0\x0\x20\x20\x11\x11\xe\x38\x44\x44\x82\x82\x0\x0\x0\x0\x0\xfe\x7c\x38\x10\x0\x0\x0\x0\x10\x38\x7c\xfe\x0\x0\x80\xc1\x63\x36\x1c\x8\x0\x0" ), // Font no. 31 FontEntry("SCRIPT", 8, 8, "\x0\x0\x0\x0\x0\x0\x0\x0\x7e\x81\xa5\x81\xbd\x99\x81\x7e\x7e\xff\xdb\xff\xc3\xe7\xff\x7e\x36\x7f\x7f\x7f\x3e\x1c\x8\x0\x8\x1c\x3e\x7f\x3e\x1c\x8\x0\x1c\x3e\x1c\x7f\x7f\x49\x8\x3e\x0\x8\x1c\x3e\x7f\x3e\x1c\x3e\x0\x0\x18\x3c\x3c\x18\x0\x0" "\xff\xff\xe7\xc3\xc3\xe7\xff\xff\x0\x3c\x66\x42\x42\x66\x3c\x0\xff\xc3\x99\xbd\xbd\x99\xc3\xff\xf0\xe0\xf0\xbe\x33\x33\x33\x1e\x3c\x66\x66\x66\x3c\x18\x7e\x18\xfc\xcc\xfc\xc\xc\xe\xf\x7\xfe\xc6\xfe\xc6\xc6\xe6\x67\x3\x99\x5a\x3c\xe7\xe7\x3c\x5a\x99" "\x1\x7\x1f\x7f\x1f\x7\x1\x0\x40\x70\x7c\x7f\x7c\x70\x40\x0\x18\x3c\x7e\x18\x18\x7e\x3c\x18\x66\x66\x66\x66\x66\x0\x66\x0\xfe\xdb\xdb\xde\xd8\xd8\xd8\x0\x7c\xc6\x1c\x36\x36\x1c\x61\x3f\x0\x0\x0\x0\x7e\x7e\x7e\x0\x18\x3c\x7e\x18\x7e\x3c\x18\xff" "\x18\x3c\x7e\x18\x18\x18\x18\x0\x18\x18\x18\x18\x7e\x3c\x18\x0\x0\x18\x30\x7f\x30\x18\x0\x0\x0\xc\x6\x7f\x6\xc\x0\x0\x0\x0\x3\x3\x3\x7f\x0\x0\x0\x24\x66\xff\x66\x24\x0\x0\x0\x18\x3c\x7e\xff\xff\x0\x0\x0\xff\xff\x7e\x3c\x18\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x8\x8\x8\x8\x8\x0\x8\x0\x14\x14\x14\x0\x0\x0\x0\x0\x0\x14\x3e\x14\x3e\x14\x0\x0\x8\x3c\xa\x1c\x28\x1e\x8\x0\x0\x46\x26\x10\x8\x64\x62\x0\xc\x12\xc\x4c\x52\x22\x5c\x0\x8\x8\x4\x0\x0\x0\x0\x0" "\x10\x8\x8\x8\x8\x8\x10\x0\x8\x10\x10\x10\x10\x10\x8\x0\x0\x2a\x1c\x8\x1c\x2a\x0\x0\x0\x8\x8\x3e\x8\x8\x0\x0\x0\x0\x0\x0\x0\x8\x8\x4\x0\x0\x0\x7e\x0\x0\x0\x0\x0\x0\x0\x0\x0\x18\x18\x0\x40\x20\x10\x8\x4\x2\x1\x0" "\x3c\x42\x42\x5a\x42\x42\x3c\x0\x10\x18\x10\x10\x10\x10\x38\x0\x3c\x42\x40\x38\x4\x2\x7e\x0\x3c\x42\x40\x20\x40\x42\x3c\x0\x20\x30\x28\x24\x7e\x20\x20\x0\x7e\x2\x3e\x40\x40\x42\x3c\x0\x38\x44\x2\x3a\x46\x42\x3c\x0\x7e\x40\x20\x10\x10\x10\x10\x0" "\x3c\x42\x42\x3c\x42\x42\x3c\x0\x3c\x42\x42\x7c\x40\x42\x3c\x0\x0\x0\x18\x0\x0\x18\x0\x0\x0\x8\x8\x0\x0\x8\x8\x4\x20\x10\x8\x4\x8\x10\x20\x0\x0\x0\x7e\x0\x7e\x0\x0\x0\x4\x8\x10\x20\x10\x8\x4\x0\x3c\x42\x20\x10\x10\x0\x10\x0" "\x3c\x42\x5a\x5a\x32\x2\x7c\x0\x20\x30\x30\x28\xbc\x62\x31\x0\x3e\x44\x46\x3d\xc2\x62\x3f\x0\x38\x44\x6\x3\x82\x42\x3c\x0\x1e\x24\x46\x45\xc2\x62\x3f\x0\x38\x44\x2\x1d\xc2\x42\x3c\x0\x6c\x52\x41\x29\xb0\x50\x8\x0\x38\x44\x6\x73\xc2\x62\x5c\x0" "\x44\x44\x46\x3d\xa2\x62\x22\x0\x20\x18\x14\x13\x88\x48\x30\x0\x20\x30\x28\x35\xae\x62\x12\xc\x24\x14\xe\x7\x8a\x52\x22\x0\x10\xc\xa\x5\x84\x42\x3e\x0\x44\x64\x56\x2b\xaa\x61\x31\x0\x88\x8c\x4e\x55\xd4\x62\x22\x0\x78\x84\x86\x43\xc2\x62\x1c\x0" "\x3e\x44\x46\x23\x9f\x62\x2\x0\x78\x84\x86\x43\xd2\x62\x5c\x0\x3e\x44\x42\x3f\xa2\x61\x21\x0\x20\x20\x50\x48\xc5\x46\x39\x0\xc0\x3e\x9\x5\x82\x42\x3c\x0\x44\x44\x46\x43\xa2\x22\x1c\x0\x44\x44\x22\x63\x94\x14\x8\x0\x44\x44\x42\x23\xaa\x6a\x14\x0" "\x22\x26\x15\x9\x94\x62\x22\x0\x88\x44\x42\x43\xfc\x44\x42\x3c\x3c\x42\x41\x39\xe0\x5c\x42\x3c\x38\x8\x8\x8\x8\x8\x38\x0\x1\x2\x4\x8\x10\x20\x40\x0\x1c\x10\x10\x10\x10\x10\x1c\x0\x8\x14\x22\x41\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xff" "\x4\x4\x8\x0\x0\x0\x0\x0\x0\x0\x5c\x27\x92\x52\x2c\x0\x8\x4\x16\x2d\xa2\x52\x3c\x0\x0\x0\x3e\x25\x82\x42\x3c\x0\x80\x80\x5c\x67\xe2\x52\x4c\x0\x0\x0\x1c\x23\x9e\x42\x3c\x0\x30\x4c\x42\x71\xa8\x24\x14\x8\x0\x0\xbc\x47\xe2\x5c\x22\x1c" "\x8\xc\x36\x4d\xa4\x62\x32\x0\x0\x20\x0\x10\x99\x4e\x38\x0\x0\x40\x0\x70\xad\x72\x9\x7\x4\x4\x16\xb\x8e\x52\x32\x0\x20\x18\x14\xa\x89\x44\x38\x0\x0\x0\x2a\x57\xd2\x49\x29\x0\x0\x0\x34\x4f\xc4\x62\x22\x0\x0\x0\x3c\x47\xa2\x22\x1c\x0" "\x0\x0\x1a\x27\xa6\x5e\x2\x1\x0\x0\x5c\x23\xb2\x6c\x60\x20\x0\x0\x66\x59\xa0\x60\x30\x0\x0\x0\x30\x50\xcc\x43\x3c\x0\x20\x20\x7c\x13\x90\x48\x38\x0\x0\x0\x24\x27\x92\x52\x2c\x0\x0\x0\x26\x63\x92\xa\x4\x0\x0\x0\x46\x43\xaa\x2a\x14\x0" "\x0\x0\x22\x15\x88\x54\x22\x0\x0\x0\x44\x23\xa2\x7c\x22\x1c\x0\x0\x3c\x23\x98\x74\x12\xc\x20\x10\x10\x8\x10\x10\x20\x0\x8\x8\x8\x0\x8\x8\x8\x0\x4\x8\x8\x10\x8\x8\x4\x0\x24\x1a\x0\x0\x0\x0\x0\x0\x0\x8\x14\x22\x41\x41\x7f\x0" "\xff\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\x1\x80\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\xff" "\x1\x0\x0\x0\x0\x0\x0\x0\x80\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x1\x0\x0\x0\x0\x0\x0\x0\x80\x1\x3\x7\xf\x1f\x3f\x7f\xff\xff\xfe\xfc\xf8\xf0\xe0\xc0\x80\xff\xff\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0" "\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\x3\x3\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\xff\xff\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\x0\x55\x0\x0\x0\x0\x0\x1e\x3f\x3f\x3f\x3f\x1e\x0\x0\x3c\x7e\x7e\x7e\x7e\x3c\x0\x0\x78\xfc\xfc\xfc\xfc\x78\x0\x0\xf0\xf8\xf8\xf8\xf8\xf0\x0\x0\xe0\xf0\xf0\xf0\xf0\xe0\x0" "\x0\xc0\xe0\xe0\xe0\xe0\xc0\x0\x0\x80\xc0\xc0\xc0\xc0\x80\x0\x0\x0\x80\x80\x80\x80\x0\x0\x0\x0\x1\x1\x1\x1\x0\x0\x0\x1\x3\x3\x3\x3\x1\x0\x0\x3\x7\x7\x7\x7\x3\x0\x0\x7\xf\xf\xf\xf\x7\x0\x0\xf\x1f\x1f\x1f\x1f\xf\x0" "\x7e\x7e\x7e\x7e\x7e\x7e\x7e\x7e\xff\xff\x0\x18\x3c\x7e\xff\x0\xff\xff\x0\x0\x0\x0\x18\x18\xff\xff\x0\x18\x3c\x7e\xff\x18\xff\xff\x0\xe7\x5a\x42\x42\xe7\x0\x0\x0\x18\x18\x0\x0\x0\x0\x1\x1\x2\x2\x2\x1\x1\x0\x9\x9\x12\x12\x12\x9\x9" "\x0\x49\x49\x92\x92\x92\x49\x49\x0\x2\x2\x4\x4\x4\x2\x2\x0\x12\x12\x24\x24\x24\x12\x12\x0\x92\x92\x24\x24\x24\x92\x92\x0\x0\x0\x1\x1\x1\x0\x0\x0\x4\x4\x9\x9\x9\x4\x4\x0\x24\x24\x49\x49\x49\x24\x24\x0\x0\x18\x3c\x3c\x18\x0\x0" "\x0\x0\x1f\x18\x1f\x18\x18\x18\x6c\x6c\x6f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x0\x0\x7f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6f\x60\x7f\x0\x0\x0\x6c\x6c\x6c\x6c\x7f\x0\x0\x0\x18\x18\x1f\x18\x1f\x0\x0\x0\x0\x0\x0\x0\x1f\x18\x18\x18" "\x18\x18\x18\x18\xf8\x0\x0\x0\x18\x18\x18\x18\xff\x0\x0\x0\x0\x0\x0\x0\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\x18\x18\x0\x0\x0\x0\xff\x0\x0\x0\x18\x18\x18\x18\xff\x18\x18\x18\x18\x18\xf8\x18\xf8\x18\x18\x18\x6c\x6c\x6c\x6c\xec\x6c\x6c\x6c" "\x6c\x6c\xec\xc\xfc\x0\x0\x0\x0\x0\xfc\xc\xec\x6c\x6c\x6c\x6c\x6c\xef\x0\xff\x0\x0\x0\x0\x0\xff\x0\xef\x6c\x6c\x6c\x6c\x6c\xec\xc\xec\x6c\x6c\x6c\x0\x0\xff\x0\xff\x0\x0\x0\x6c\x6c\xef\x0\xef\x6c\x6c\x6c\x18\x18\xff\x0\xff\x0\x0\x0" "\x6c\x6c\x6c\x6c\xff\x0\x0\x0\x0\x0\xff\x0\xff\x18\x18\x18\x0\x0\x0\x0\xff\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xfc\x0\x0\x0\x18\x18\xf8\x18\xf8\x0\x0\x0\x0\x0\xf8\x18\xf8\x18\x18\x18\x0\x0\x0\x0\xfc\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xff\x6c\x6c\x6c" "\x18\x18\xff\x18\xff\x18\x18\x18\x18\x18\x18\x18\x1f\x0\x0\x0\x0\x0\x0\x0\xf8\x18\x18\x18\xff\xff\xff\xff\xff\xff\xff\xff\x0\x0\x0\x0\xff\xff\xff\xff\xf\xf\xf\xf\xf\xf\xf\xf\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xff\xff\xff\xff\x0\x0\x0\x0" "\x0\x0\x6e\x3b\x13\x3b\x6e\x0\x0\x1e\x33\x1f\x33\x1f\x3\x3\x0\x3f\x33\x3\x3\x3\x3\x0\x0\x0\x7f\x36\x36\x36\x36\x0\x3f\x33\x6\xc\x6\x33\x3f\x0\x0\x0\x7e\x1b\x1b\x1b\xe\x0\x0\x66\x66\x66\x66\x3e\x6\x3\x0\x6e\x3b\x18\x18\x18\x18\x0" "\x3f\xc\x1e\x33\x33\x1e\xc\x3f\x1c\x36\x63\x7f\x63\x36\x1c\x0\x1c\x36\x63\x63\x36\x36\x77\x0\x38\xc\x18\x3e\x33\x33\x1e\x0\x0\x0\x7e\xdb\xdb\x7e\x0\x0\x60\x30\x7e\xdb\xdb\x7e\x6\x3\x1c\x6\x3\x1f\x3\x6\x1c\x0\x0\x0\x0\x0\x0\xdb\xdb\x0" "\x0\x7e\x0\x7e\x0\x7e\x0\x0\x0\xf8\x8\x8\x8\x8\xf8\x0\x0\xff\x0\x0\x0\x0\xff\x0\x0\x1f\x10\x10\x10\x10\x1f\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x0\x2\x1\x0\x0\x0\x20\x30\x28\x24\x22\xa1\x60\x20\x0\x0\x0\x1\x2\x0\x0\x0" "\x20\x60\xa1\x22\x24\x28\x30\x20\x0\x0\x0\x40\x40\x40\x40\x7f\xff\x81\x81\x81\x81\x80\x80\x80\x0\x0\x0\x20\x20\x11\x11\xe\x38\x44\x44\x82\x82\x0\x0\x0\x0\x0\xfe\x7c\x38\x10\x0\x0\x0\x0\x10\x38\x7c\xfe\x0\x0\x80\xc1\x63\x36\x1c\x8\x0\x0" ), // Font no. 32 FontEntry("SMALLCAP", 8, 8, "\x0\x0\x0\x0\x0\x0\x0\x0\x7e\x81\xa5\x81\xbd\x99\x81\x7e\x3e\x7f\x6b\x5d\x63\x7f\x3e\x0\x63\x77\x7f\x7f\x3e\x1c\x8\x0\x8\x1c\x3e\x7f\x3e\x1c\x8\x0\x8\x1c\x8\x77\x77\x8\x1c\x0\x1c\x3e\x7f\x7f\x36\x8\x1c\x0\x0\x18\x3c\x7e\x3c\x18\x0\x0" "\xff\xe7\xc3\x81\xc3\xe7\xff\xff\x0\x18\x3c\x66\x66\x3c\x18\x0\xff\xe7\xc3\x99\x99\xc3\xe7\xff\x78\x70\x78\x6c\x1e\x33\x33\x1e\x7e\xc3\xc3\x7e\x18\x7e\x18\x18\x78\x58\x78\x18\x18\xe\xf\x6\x7c\x7c\x6c\x6c\x6f\x66\x78\x30\xdb\x3c\x66\xe7\x66\x3c\xdb\x0" "\x1\x3\xf\x1f\xf\x3\x1\x0\x40\x60\x78\x7c\x78\x60\x40\x0\x18\x3c\x7e\x18\x7e\x3c\x18\x0\x66\x66\x66\x66\x66\x0\x66\x0\xfe\xdb\xde\xdc\xd8\xd8\xd8\x0\x3c\x66\x1c\x36\x36\x1c\x33\x1e\x0\x0\x0\x0\x7f\x7f\x7f\x0\x18\x3c\x7e\x18\x7e\x3c\x18\x7e" "\x18\x3c\x7e\x18\x18\x18\x18\x0\x18\x18\x18\x18\x7e\x3c\x18\x0\x0\x18\x38\x7f\x38\x18\x0\x0\x0\xc\xe\x7f\xe\xc\x0\x0\x0\x0\x3\x3\x3\x7f\x0\x0\x0\x24\x66\xff\x66\x24\x0\x0\x0\x8\x1c\x3e\x3e\x7f\x0\x0\x0\x7f\x3e\x3e\x1c\x8\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x18\x3c\x3c\x18\x18\x0\x18\x0\x36\x36\x36\x0\x0\x0\x0\x0\x36\x36\x7f\x36\x7f\x36\x36\x0\x18\x7e\x3\x3e\x60\x3f\x18\x0\x0\x63\x30\x18\xc\x6\x63\x0\x1c\x36\x1c\x6e\x33\x33\x6e\x0\x18\x18\xc\x0\x0\x0\x0\x0" "\x18\xc\x6\x6\x6\xc\x18\x0\x6\xc\x18\x18\x18\xc\x6\x0\x0\x77\x3e\x7f\x3e\x77\x0\x0\x0\x18\x18\x7e\x18\x18\x0\x0\x0\x0\x0\x0\x18\x18\xc\x0\x0\x0\x0\x7f\x0\x0\x0\x0\x0\x0\x0\x0\x0\x1c\x1c\x0\x60\x30\x18\xc\x6\x3\x1\x0" "\x0\x0\x3c\x76\x66\x6e\x3c\x0\x0\x0\x18\x1c\x18\x18\x3c\x0\x0\x0\x3c\x66\x30\xc\x7e\x0\x0\x7e\x30\x38\x60\x60\x30\x1e\x0\x34\x36\x36\x33\x7f\x30\x0\x0\x7e\x2\x3e\x66\x60\x30\x1e\x38\xc\x6\x3e\x66\x66\x3c\x0\x0\x7e\x60\x30\x38\x18\xc\xc" "\x3c\x66\x66\x3c\x66\x66\x3c\x0\x0\x3c\x66\x66\x7c\x60\x30\x1c\x0\x38\x38\x0\x0\x38\x38\x0\x0\x18\x18\x0\x0\x18\x18\xc\x30\x18\xc\x6\xc\x18\x30\x0\x0\x0\x7f\x0\x0\x7f\x0\x0\x6\xc\x18\x30\x18\xc\x6\x0\x3e\x63\x60\x30\x18\x0\x18\x0" "\x3e\x63\x63\x7b\x3b\x3\x7e\x0\x1c\x36\x63\x63\x7f\x63\x63\x0\x3f\x66\x66\x3e\x66\x66\x3f\x0\x3c\x66\x3\x3\x3\x66\x3c\x0\x1f\x36\x66\x66\x66\x36\x1f\x0\x7f\x43\x3\x1f\x3\x43\x7f\x0\x7f\x46\x6\x3e\x6\x6\xf\x0\x3e\x63\x3\x3\x7b\x63\x3e\x0" "\x63\x63\x63\x7f\x63\x63\x63\x0\x3c\x18\x18\x18\x18\x18\x3c\x0\x3c\x18\x18\x18\x1b\x1b\xe\x0\x63\x33\x1b\xf\x1b\x33\x63\x0\xf\x6\x6\x6\x6\x46\x7f\x0\x63\x77\x7f\x6b\x6b\x63\x63\x0\x63\x67\x67\x6f\x7b\x73\x63\x0\x3e\x63\x63\x63\x63\x63\x3e\x0" "\x3f\x66\x66\x3e\x6\x6\xf\x0\x3e\x63\x63\x63\x63\x6b\x3e\x60\x3f\x63\x63\x3f\x1b\x33\x63\x0\x3e\x63\x3\x3e\x60\x63\x3e\x0\x7e\x5a\x18\x18\x18\x18\x3c\x0\x63\x63\x63\x63\x63\x63\x3e\x0\x63\x63\x63\x63\x36\x1c\x8\x0\x63\x63\x6b\x6b\x7f\x77\x63\x0" "\x63\x36\x1c\x1c\x1c\x36\x63\x0\x66\x66\x66\x3c\x18\x18\x3c\x0\x7f\x61\x30\x18\xc\x46\x7f\x0\x3e\x6\x6\x6\x6\x6\x3e\x0\x3\x6\xc\x18\x30\x60\x40\x0\x3e\x30\x30\x30\x30\x30\x3e\x0\x8\x1c\x36\x63\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xff" "\xc\xc\x18\x0\x0\x0\x0\x0\x0\x0\x3e\x63\x7f\x63\x63\x0\x0\x0\x3f\x66\x3e\x66\x3f\x0\x0\x0\x3e\x63\x3\x63\x3e\x0\x0\x0\x3f\x66\x66\x66\x3f\x0\x0\x0\x7f\x3\x1f\x3\x7f\x0\x0\x0\x7f\x3\x1f\x3\x3\x0\x0\x0\x7e\x3\x73\x63\x3e\x0" "\x0\x0\x63\x63\x7f\x63\x63\x0\x0\x0\x3c\x18\x18\x18\x3c\x0\x0\x0\x78\x30\x30\x33\x1e\x0\x0\x0\x63\x33\x1f\x33\x63\x0\x0\x0\x3\x3\x3\x3\x3f\x0\x0\x0\x63\x77\x6b\x6b\x63\x0\x0\x0\x67\x6f\x6b\x7b\x73\x0\x0\x0\x3e\x63\x63\x63\x3e\x0" "\x0\x0\x3f\x66\x3e\x6\xf\x0\x0\x0\x3e\x63\x63\x3b\x6e\x0\x0\x0\x3f\x66\x3e\x36\x67\x0\x0\x0\x3e\x3\x3e\x60\x3e\x0\x0\x0\x7e\x5a\x18\x18\x3c\x0\x0\x0\x63\x63\x63\x63\x3e\x0\x0\x0\x63\x63\x36\x1c\x8\x0\x0\x0\x63\x6b\x6b\x77\x63\x0" "\x0\x0\x63\x36\x1c\x36\x63\x0\x0\x0\x66\x66\x3c\x18\x18\x0\x0\x0\x3f\x19\xc\x26\x3f\x0\x70\x18\x18\xe\x18\x18\x70\x0\x18\x18\x18\x0\x18\x18\x18\x0\xe\x18\x18\x70\x18\x18\xe\x0\x6e\x3b\x0\x0\x0\x0\x0\x0\x0\x8\x1c\x1c\x36\x36\x7f\x0" "\xff\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\x1\x80\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\xff" "\x1\x0\x0\x0\x0\x0\x0\x0\x80\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x1\x0\x0\x0\x0\x0\x0\x0\x80\x1\x3\x7\xf\x1f\x3f\x7f\xff\xff\xfe\xfc\xf8\xf0\xe0\xc0\x80\xff\xff\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0" "\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\x3\x3\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\xff\xff\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\x40\xaa\x4\x0\x0\x0\x0\x1e\x33\x2d\x2d\x33\x1e\x0\x0\x7e\x66\x5a\x5a\x66\x7e\x0\x0\xfc\x84\xb4\xb4\x84\xfc\x0\x0\xf8\x48\x18\x88\x28\xf8\x0\x0\xf0\x30\x10\x10\x30\xf0\x0" "\x0\xc0\x60\x20\x20\x60\xc0\x0\x0\x80\xc0\x40\xc0\xc0\x80\x0\x0\x0\x80\x80\x80\x80\x0\x0\x0\x1\x1\x1\x1\x1\x1\x0\x0\x3\x3\x2\x2\x3\x3\x0\x0\x3\x6\x4\x4\x6\x3\x0\x0\x7\xd\xc\x8\xe\x7\x0\x0\xf\x19\x16\x16\x19\xf\x0" "\x7e\x7e\x7e\x7e\x7e\x7e\x7e\x7e\xff\xff\x0\x18\x3c\x7e\xff\x0\xff\xff\x0\x0\x0\x0\x18\x18\xff\xff\x0\x18\x3c\x7e\xff\x18\xff\xff\x0\x42\x66\x5a\x42\x42\x0\x0\x0\x18\x18\x0\x0\x0\x0\x0\x1\x3\x2\x3\x1\x0\x0\x0\x7\x9\x18\x9\x7\x0" "\x0\x1c\x63\xc1\x80\xc1\x63\x1c\x0\x0\x3\x5\x4\x5\x3\x0\x0\x0\x1f\x21\x10\x21\x1f\x0\x0\xfc\x7\xc1\x20\xc1\x7\xfc\x0\x0\x1\x2\x3\x2\x1\x0\x0\x7\xc\x9\x9\x9\xc\x7\x0\x1f\x70\xc1\x82\xc1\x70\x1f\x0\x0\x18\x3c\x3c\x18\x0\x0" "\x0\x0\x1f\x18\x1f\x18\x18\x18\x6c\x6c\x6f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x0\x0\x7f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6f\x60\x7f\x0\x0\x0\x6c\x6c\x6c\x6c\x7f\x0\x0\x0\x18\x18\x1f\x18\x1f\x0\x0\x0\x0\x0\x0\x0\x1f\x18\x18\x18" "\x18\x18\x18\x18\xf8\x0\x0\x0\x18\x18\x18\x18\xff\x0\x0\x0\x0\x0\x0\x0\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\x18\x18\x0\x0\x0\x0\xff\x0\x0\x0\x18\x18\x18\x18\xff\x18\x18\x18\x18\x18\xf8\x18\xf8\x18\x18\x18\x6c\x6c\x6c\x6c\xec\x6c\x6c\x6c" "\x6c\x6c\xec\xc\xfc\x0\x0\x0\x0\x0\xfc\xc\xec\x6c\x6c\x6c\x6c\x6c\xef\x0\xff\x0\x0\x0\x0\x0\xff\x0\xef\x6c\x6c\x6c\x6c\x6c\xec\xc\xec\x6c\x6c\x6c\x0\x0\xff\x0\xff\x0\x0\x0\x6c\x6c\xef\x0\xef\x6c\x6c\x6c\x18\x18\xff\x0\xff\x0\x0\x0" "\x6c\x6c\x6c\x6c\xff\x0\x0\x0\x0\x0\xff\x0\xff\x18\x18\x18\x0\x0\x0\x0\xff\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xfc\x0\x0\x0\x18\x18\xf8\x18\xf8\x0\x0\x0\x0\x0\xf8\x18\xf8\x18\x18\x18\x0\x0\x0\x0\xfc\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xff\x6c\x6c\x6c" "\x18\x18\xff\x18\xff\x18\x18\x18\x18\x18\x18\x18\x1f\x0\x0\x0\x0\x0\x0\x0\xf8\x18\x18\x18\xff\xff\xff\xff\xff\xff\xff\xff\x0\x0\x0\x0\xff\xff\xff\xff\xf\xf\xf\xf\xf\xf\xf\xf\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xff\xff\xff\xff\x0\x0\x0\x0" "\x0\x0\x6e\x3b\x13\x3b\x6e\x0\x0\x1e\x33\x1f\x33\x1f\x3\x3\x0\x3f\x33\x3\x3\x3\x3\x0\x0\x0\x7f\x36\x36\x36\x36\x0\x3f\x33\x6\xc\x6\x33\x3f\x0\x0\x0\x7e\x1b\x1b\x1b\xe\x0\x0\x66\x66\x66\x66\x3e\x6\x3\x0\x6e\x3b\x18\x18\x18\x18\x0" "\x3f\xc\x1e\x33\x33\x1e\xc\x3f\x1c\x36\x63\x7f\x63\x36\x1c\x0\x1c\x36\x63\x63\x36\x36\x77\x0\x38\xc\x18\x3e\x33\x33\x1e\x0\x0\x0\x7e\xdb\xdb\x7e\x0\x0\x60\x30\x7e\xdb\xdb\x7e\x6\x3\x1c\x6\x3\x1f\x3\x6\x1c\x0\x0\x0\x0\x0\x0\xdb\xdb\x0" "\x0\x7e\x0\x7e\x0\x7e\x0\x0\x0\xf8\x8\x8\x8\x8\xf8\x0\x0\xff\x0\x0\x0\x0\xff\x0\x0\x1f\x10\x10\x10\x10\x1f\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x0\x2\x1\x0\x0\x0\x20\x30\x28\x24\x22\xa1\x60\x20\x0\x0\x0\x1\x2\x0\x0\x0" "\x20\x60\xa1\x22\x24\x28\x30\x20\x0\x0\x0\x40\x40\x40\x40\x7f\xff\x81\x81\x81\x81\x80\x80\x80\x0\x0\x0\x20\x20\x11\x11\xe\x38\x44\x44\x82\x82\x0\x0\x0\x0\x0\xfe\x7c\x38\x10\x0\x0\x0\x0\x10\x38\x7c\xfe\x0\x0\x80\xc1\x63\x36\x1c\x8\x0\x0" ), // Font no. 33 FontEntry("THICK", 8, 8, "\x0\x0\x0\x0\x0\x0\x0\x0\x7e\x81\xa5\x81\xbd\x99\x81\x7e\x7e\xff\xdb\xff\xff\xc3\xe7\x7e\x0\x77\x7f\x7f\x3e\x1c\x8\x0\x8\x1c\x3e\x7f\x3e\x1c\x8\x0\x18\x3c\x18\xff\xff\x52\x18\x0\x8\x1c\x3e\x7f\x7f\x49\x1c\x0\x0\x0\x18\x3c\x18\x0\x0\x0" "\xff\xff\xe7\xc3\xe7\xff\xff\xff\x0\x3c\x42\x81\x81\x42\x3c\x0\xff\xc3\xbd\x7e\x7e\xbd\xc3\xff\xf8\xe0\xb0\x3e\x63\x63\x3e\x0\x0\x7e\xc3\xc3\x7e\x18\x7e\x18\x20\x60\xe0\x20\x20\x3f\x1f\x0\x30\x50\xb0\xd0\x9f\x8f\xf0\xf0\x81\xc2\xbc\xe4\xa4\xfc\xea\xff" "\x0\x0\x6\x1e\x7e\x1e\x6\x0\x0\x0\x60\x78\x7e\x78\x60\x0\x18\x7e\x18\x18\x18\x18\x7e\x18\x66\x66\x66\x66\x66\x0\x66\x0\xff\x6d\x6e\x6c\x6c\x6c\x6c\x0\x7e\x81\x3e\x42\x42\x7c\x81\x7e\x0\x0\x0\x7e\x7e\x0\x0\x0\x18\x7e\x18\x18\x7e\x18\x0\xff" "\x18\x7e\x18\x18\x18\x18\x18\x0\x18\x18\x18\x18\x18\x7e\x18\x0\x0\x20\x60\xff\x60\x20\x0\x0\x0\x4\x6\xff\x6\x4\x0\x0\x0\x0\x0\x3\x3\x3\xff\x0\x0\x24\x66\xff\x66\x24\x0\x0\x0\x0\x8\x1c\x3e\x7f\x0\x0\x0\x0\x0\x7f\x3e\x1c\x8\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\xc\x1e\x1e\x1e\xc\x0\xc\x0\x33\x66\xcc\x0\x0\x0\x0\x0\x0\x6c\xfe\x6c\x6c\xfe\x6c\x0\x3e\x6b\xb\x3e\x68\x6b\x3e\x8\xc7\x65\x37\x18\xec\xa6\xe3\x0\x1c\x32\x1c\xa2\x63\x73\x5e\x80\x60\x30\x18\x0\x0\x0\x0\x0" "\x30\x18\x18\x18\x18\x18\x18\x30\x6\xc\xc\xc\xc\xc\xc\x6\x8\x2a\x1c\x7f\x1c\x2a\x8\x0\x0\x18\x18\x7e\x18\x18\x0\x0\x0\x0\x0\x0\x0\x0\x18\xc\x0\x0\x0\x7e\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xc\x0\x0\xc0\x60\x30\x18\xc\x6\x0" "\x3e\x73\x7b\x7f\x77\x73\x3e\x0\x38\x3c\x38\x38\x38\x38\x38\x0\x3e\x73\x70\x38\x1c\xe\x7f\x0\x3e\x73\x70\x3c\x70\x73\x3e\x0\x73\x73\x73\x73\x7f\x70\x70\x0\x7f\x7\x7\x3f\x70\x70\x3f\x0\x3e\x67\x7\x3f\x67\x67\x3e\x0\x7f\x60\x70\x38\x1c\x1c\x1c\x0" "\x3e\x67\x67\x3e\x67\x67\x3e\x0\x3e\x73\x73\x7e\x70\x70\x3f\x0\x0\xc\x0\x0\x0\xc\x0\x0\x0\xc\x0\x0\x0\xc\x6\x0\x0\x18\xc\x6\xc\x18\x0\x0\x0\x0\x7e\x0\x7e\x0\x0\x0\x0\xc\x18\x30\x18\xc\x0\x0\x3e\x63\x70\x38\x1c\x0\x1c\x0" "\x3e\x63\x7b\x7b\x3b\x3\x3e\x0\x3e\x67\x67\x67\x7f\x67\x67\x0\x3f\x67\x67\x3f\x67\x67\x3f\x0\x3e\x67\x7\x7\x67\x67\x3e\x0\x3f\x67\x67\x67\x67\x67\x3f\x0\x7f\x7\x7\x7f\x7\x7\x7f\x0\x7f\x7\x7\x7f\x7\x7\x7\x0\x3e\x67\x7\x77\x67\x67\x3e\x0" "\x67\x67\x67\x7f\x67\x67\x67\x0\x1c\x1c\x1c\x1c\x1c\x1c\x1c\x0\x70\x70\x70\x70\x73\x73\x3e\x0\x67\x37\x1f\xf\x1f\x37\x67\x0\x7\x7\x7\x7\x7\x7\x7f\x0\x63\x77\x7f\x6b\x63\x63\x63\x0\x63\x67\x6f\x7f\x77\x67\x67\x0\x3e\x67\x67\x67\x67\x67\x3e\x0" "\x3f\x67\x67\x3f\x7\x7\x7\x0\x3e\x67\x67\x67\x67\x57\x2e\x40\x3f\x67\x67\x3f\x67\x67\x67\x0\x3e\x67\x7\x3e\x70\x73\x3e\x0\x7f\x1c\x1c\x1c\x1c\x1c\x1c\x0\x67\x67\x67\x67\x67\x67\x3e\x0\x67\x67\x67\x67\x67\x3e\x1c\x0\x63\x63\x63\x6b\x6b\x7f\x3f\x0" "\xc7\x6e\x3c\x18\x3c\x76\xe3\x0\x67\x67\x3e\x1c\x1c\x1c\x1c\x0\x7f\x70\x38\x1c\xe\x7\x7f\x0\x38\x18\x18\x18\x18\x18\x18\x38\x0\x6\xc\x18\x30\x60\xc0\x0\xe\xc\xc\xc\xc\xc\xc\xe\x18\x3c\x66\xc3\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xff" "\xc\x18\x30\x0\x0\x0\x0\x0\x0\x0\x3e\x70\x7e\x73\x7e\x0\x3\x3\x3f\x67\x67\x67\x3f\x0\x0\x0\x3e\x67\x7\x67\x3e\x0\x60\x60\x7e\x73\x73\x73\x7e\x0\x0\x0\x3e\x67\x7f\x7\x7e\x0\x3c\xe\xe\x3f\xe\xe\xe\x0\x0\x0\x3e\x73\x73\x7e\x70\x3e" "\x3\x3\x3f\x67\x67\x67\x67\x0\x18\x0\x18\x1c\x1c\x1c\x1c\x0\x30\x0\x30\x38\x38\x38\x38\x1f\x3\x3\x33\x1b\xf\x1b\x33\x0\x18\x18\x1c\x1c\x1c\x1c\x1c\x0\x0\x0\x3f\x6b\x6b\x6b\x6b\x0\x0\x0\x3f\x67\x67\x67\x67\x0\x0\x0\x3e\x67\x67\x67\x3e\x0" "\x0\x0\x3f\x67\x67\x3f\x7\x7\x0\x0\x7e\x73\x73\x7e\x70\x70\x0\x0\x3f\x67\x7\x7\x7\x0\x0\x0\x7e\x7\x3e\x70\x3f\x0\x18\x18\x7e\x1c\x1c\x1c\x1c\x0\x0\x0\x67\x67\x67\x67\x7e\x0\x0\x0\x67\x67\x67\x36\x1c\x0\x0\x0\x6b\x6b\x6b\x6b\x3f\x0" "\x0\x0\x67\x3e\x1c\x3e\x73\x0\x0\x0\x73\x73\x73\x7e\x70\x3f\x0\x0\x7f\x38\x1c\xe\x7f\x0\x30\x18\x18\xc\x18\x18\x30\x0\x18\x18\x18\x18\x18\x18\x18\x18\x6\xc\xc\x18\xc\xc\x6\x0\xe\xdb\x70\x0\x0\x0\x0\x0\x0\x0\x8\x14\x22\x7f\x0\x0" "\xff\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\x1\x80\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\xff" "\x1\x0\x0\x0\x0\x0\x0\x0\x80\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x1\x0\x0\x0\x0\x0\x0\x0\x80\x1\x3\x7\xf\x1f\x3f\x7f\xff\xff\xfe\xfc\xf8\xf0\xe0\xc0\x80\xff\xff\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0" "\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\x3\x3\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\xff\xff\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\x0\x55\x0\x0\x0\x0\x0\x3f\x3f\x3f\x3f\x3f\x3f\x0\x0\x7e\x7e\x7e\x7e\x7e\x7e\x0\x0\xfc\xfc\xfc\xfc\xfc\xfc\x0\x0\xf8\xf8\xf8\xf8\xf8\xf8\x0\x0\xf0\xf0\xf0\xf0\xf0\xf0\x0" "\x0\xe0\xe0\xe0\xe0\xe0\xe0\x0\x0\xc0\xc0\xc0\xc0\xc0\xc0\x0\x0\x80\x80\x80\x80\x80\x80\x0\x0\x1\x1\x1\x1\x1\x1\x0\x0\x3\x3\x3\x3\x3\x3\x0\x0\x7\x7\x7\x7\x7\x7\x0\x0\xf\xf\xf\xf\xf\xf\x0\x0\x1f\x1f\x1f\x1f\x1f\x1f\x0" "\x55\x6b\x55\x6b\x55\x6b\x55\x6b\xff\xff\x0\x0\x0\x8\x1c\x3e\xff\xff\x0\x0\x0\x0\x0\x7f\xff\xff\x0\x0\x8\x1c\x3e\x7f\xff\xff\x0\xc3\xe7\xff\xdb\xc3\x0\x0\x0\x0\x18\x0\x0\x0\x0\x3\x3\x3\x3\x3\x3\x3\x0\x1b\x1b\x1b\x1b\x1b\x1b\x1b" "\x0\xdb\xdb\xdb\xdb\xdb\xdb\xdb\x0\x6\x6\x6\x6\x6\x6\x6\x0\x36\x36\x36\x36\x36\x36\x36\x0\xb6\xb6\xb6\xb6\xb6\xb6\xb6\x0\x1\x1\x1\x1\x1\x1\x1\x0\xd\xd\xd\xd\xd\xd\xd\x0\x6d\x6d\x6d\x6d\x6d\x6d\x6d\x0\x0\x18\x3c\x3c\x18\x0\x0" "\x0\x0\x0\x1f\x18\x1f\x18\x18\x6c\x6c\x6c\x6f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x0\x0\x0\x7f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6f\x60\x7f\x0\x0\x6c\x6c\x6c\x7f\x0\x0\x0\x0\x18\x18\x18\x1f\x18\x1f\x0\x0\x0\x0\x0\x1f\x18\x18\x18\x18" "\x18\x18\x18\xf8\x0\x0\x0\x0\x18\x18\x18\xff\x0\x0\x0\x0\x0\x0\x0\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\x18\x18\x18\x0\x0\x0\x0\xff\x0\x0\x0\x18\x18\x18\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\xf8\x18\x18\x6c\x6c\x6c\xec\x6c\x6c\x6c\x6c" "\x6c\x6c\x6c\xec\xc\xfc\x0\x0\x0\x0\x0\xfc\xc\xec\x6c\x6c\x6c\x6c\x6c\xef\x0\xff\x0\x0\x0\x0\x0\xff\x0\xef\x6c\x6c\x6c\x6c\x6c\xec\xc\xec\x6c\x6c\x0\x0\x0\xff\x0\xff\x0\x0\x6c\x6c\x6c\xef\x0\xef\x6c\x6c\x18\x18\x18\xff\x0\xff\x0\x0" "\x6c\x6c\x6c\xff\x0\x0\x0\x0\x0\x0\x0\xff\x0\xff\x18\x18\x0\x0\x0\xff\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xfc\x0\x0\x0\x0\x18\x18\x18\xf8\x18\xf8\x0\x0\x0\x0\x0\xf8\x18\xf8\x18\x18\x0\x0\x0\xfc\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xff\x6c\x6c\x6c\x6c" "\x18\x18\x18\xff\x18\xff\x18\x18\x18\x18\x18\x1f\x0\x0\x0\x0\x0\x0\x0\xf8\x18\x18\x18\x18\xff\xff\xff\xff\xff\xff\xff\xff\x0\x0\x0\x0\xff\xff\xff\xff\xf\xf\xf\xf\xf\xf\xf\xf\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xff\xff\xff\xff\x0\x0\x0\x0" "\x0\x0\xee\x19\x19\xee\x0\x0\x38\x6c\x66\x3f\x63\x63\x3f\x3\x7f\x46\x6\x6\x6\x6\x6\x0\x0\x0\xff\x66\x66\x66\x66\x0\x7f\x46\xc\x18\xc\x46\x7f\x0\x0\x0\xfc\x66\x63\x33\x1e\x0\x0\x0\xcc\xcc\xcc\x7c\xc\xf\x0\x0\xff\x18\x18\x18\x18\x0" "\x3c\x18\x3c\x66\x66\x3c\x18\x3c\x0\x3e\x63\x7f\x63\x3e\x0\x0\x0\x7e\xc3\xc3\xc3\x66\xe7\x0\x78\x98\x3c\x66\x63\x33\x1e\x0\x0\x0\x66\x99\x99\x66\x0\x0\x0\xc0\x3e\x73\x67\x3e\x3\x0\x0\x7c\x3\x7f\x3\x7c\x0\x0\x0\x0\x0\x0\x0\xdb\xdb\x0" "\x0\x7e\x0\x7e\x0\x7e\x0\x0\x0\xf8\x8\x8\x8\x8\xf8\x0\x0\xff\x0\x0\x0\x0\xff\x0\x0\x1f\x10\x10\x10\x10\x1f\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x0\x2\x1\x0\x0\x0\x20\x30\x28\x24\x22\xa1\x60\x20\x0\x0\x0\x1\x2\x0\x0\x0" "\x20\x60\xa1\x22\x24\x28\x30\x20\x0\x0\x0\x40\x40\x40\x40\x7f\xff\x81\x81\x81\x81\x80\x80\x80\x0\x0\x0\x20\x20\x11\x11\xe\x38\x44\x44\x82\x82\x0\x0\x0\x0\x0\xfe\x7c\x38\x10\x0\x0\x0\x0\x10\x38\x7c\xfe\x0\x0\x80\xc1\x63\x36\x1c\x8\x0\x0" ), // Font no. 34 FontEntry("TINY", 6, 5, "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x28\xaf\xbc\x2\x0\x0\x0\x40\x4c\x44\x46\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xe2\x8\x0\x0\x0\x0\x0\x0\x1e\x0\x0\x0\x0\x6\x40\x44\x44\x0\x44\x29\x45\x0\x31\x84\x10\x60\x90\x11\xe\x18" "\x64\x90\x1\x42\x39\x84\x80\x13\xe\x19\xc0\x84\x53\x6\x38\x44\x8\x1\x44\x11\x45\x0\x51\xc\x19\x0\xc\x30\x0\x0\x0\x0\x0\x88\x8\x82\x0\xf0\xc0\x3\x20\x8\x22\x2\x0\x0\x0\x0\x0\x0\x0\x0\x51\xca\x29\x60\x94\x51\x6\x30\x21\x4\x3\x46" "\x29\x65\x80\x13\x4e\x38\xe0\x84\x11\x2\x30\xe1\x14\x3\x4a\x39\xa5\x0\x21\x84\x10\x40\x8\x21\x6\x28\x65\x94\x2\x42\x8\xe1\x80\xf4\x52\x4a\x20\xad\xd5\x12\x10\xa5\x14\x1\x46\x39\x21\x0\x51\x4a\x71\x60\x94\x51\xa\x30\x41\x90\x1\x8e\x10\x42\x80\x52" "\x4a\x39\xa0\x94\x52\x4\x48\x29\xbd\x4\x4a\x11\xa5\x80\x52\x84\x10\xe0\x10\x11\xe\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x88\x2\x0\x0\x0\x0\x0\x0\x0\x0\x0\x70\xd8\x7a\x0\x84\x51\x4\x0\x26\x4\x3\x10\x72\xc9\x1\x60\xd2\x71\x0\x30" "\x71\x4\x0\x6e\xb1\x1\x40\x38\xa5\x0\x20\x80\x10\x0\x8\x20\x6\x0\xa1\x8c\x2\x40\x8\xc1\x0\x90\x5e\x4a\x0\xb4\x95\x12\x0\xa2\x14\x1\xc0\x28\x23\x0\x70\xca\x21\x0\x94\x15\x2\x0\x26\x98\x1\x80\x38\xc2\x0\x50\x4a\x31\x0\x94\x52\x4\x0\x29" "\xbd\x4\x40\x11\xa5\x0\x50\x8a\x18\x0\x1c\x32\xe\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x6a\x5\x0\x30\xcf\x0\xf0\x42\x78\x0\x3e\x0\x1f\x80\xf\xe1\x7\x0\x10\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x20\xc4\x11\x0\x88\x23\x4\x0\x0\x0\x0" ), // Font no. 35 FontEntry("TINY_UPPERCASE", 6, 5, "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x28\xaf\xbc\x2\x0\x0\x0\x40\x4c\x44\x46\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xe2\x8\x0\x0\x0\x0\x0\x0\x1e\x0\x0\x0\x0\x6\x40\x44\x44\x0\x44\x29\x45\x0\x31\x84\x10\x60\x90\x11\xe\x18" "\x64\x90\x1\x42\x39\x84\x80\x13\xe\x19\xc0\x84\x53\x6\x38\x44\x8\x1\x44\x11\x45\x0\x51\xc\x19\x0\xc\x30\x0\x0\x0\x0\x0\x88\x8\x82\x0\xf0\xc0\x3\x20\x8\x22\x2\x0\x0\x0\x0\x0\x0\x0\x0\x51\xca\x29\x60\x94\x51\x6\x30\x21\x4\x3\x46" "\x29\x65\x80\x13\x4e\x38\xe0\x84\x11\x2\x30\xe1\x14\x3\x4a\x39\xa5\x0\x21\x84\x10\x40\x8\x21\x6\x28\x65\x94\x2\x42\x8\xe1\x80\xf4\x52\x4a\x20\xad\xd5\x12\x10\xa5\x14\x1\x46\x39\x21\x0\x51\x4a\x71\x60\x94\x51\xa\x30\x41\x90\x1\x8e\x10\x42\x80\x52" "\x4a\x39\xa0\x94\x52\x4\x48\x29\xbd\x4\x4a\x11\xa5\x80\x52\x84\x10\xe0\x10\x11\xe\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x88\x2\x0\x0\x0\x0\x0\x0\x0\x0\x0\x51\xca\x29\x60\x94\x51\x6\x30\x21\x4\x3\x46\x29\x65\x80\x13\x4e\x38\xe0\x84" "\x11\x2\x30\xe1\x14\x3\x4a\x39\xa5\x0\x21\x84\x10\x40\x8\x21\x6\x28\x65\x94\x2\x42\x8\xe1\x80\xf4\x52\x4a\x20\xad\xd5\x12\x10\xa5\x14\x1\x46\x39\x21\x0\x51\x4a\x71\x60\x94\x51\xa\x30\x41\x90\x1\x8e\x10\x42\x80\x52\x4a\x39\xa0\x94\x52\x4\x48\x29" "\xbd\x4\x4a\x11\xa5\x80\x52\x84\x10\xe0\x10\x11\xe\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x6a\x5\x0\x30\xcf\x0\xf0\x42\x78\x0\x3e\x0\x1f\x80\xf\xe1\x7\x0\x10\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x20\xc4\x11\x0\x88\x23\x4\x0\x0\x0\x0" ), // Font no. 36 FontEntry("XTSAMP", 8, 8, "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x20\x60\xff\xff\x60\x20\x0\x0\x4\x6\xff\xff\x6\x4\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x18\x3c\x7e\xff\x0\x0\x0\x0\x0\x0\xff\x7e\x3c\x18\x0\x4\xc\x1c\x3c\x3c\x1c\xc\x4\x20\x30\x38\x3c\x3c\x38\x30\x20\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x18\x18\x18\x18\x0\x18\x0\x0\x36\x12\x0\x0\x0\x0\x0\x0\x0\x24\x7e\x24\x7e\x24\x0\x0\x10\x78\x1c\x70\x3c\x10\x0\x0\x40\x66\x30\x18\xc\x66\x0\x0\x0\x1c\x36\x5c\x36\x5c\x0\x0\x18\x10\x0\x0\x0\x0\x0" "\x0\x18\xc\x6\x6\xc\x18\x0\x0\x18\x30\x60\x60\x30\x18\x0\x0\x0\x66\x3c\xff\x3c\x66\x0\x0\x0\x18\x18\x7e\x18\x18\x0\x0\x0\x0\x0\x0\x18\x10\x0\x0\x0\x0\x0\x7e\x0\x0\x0\x0\x0\x0\x0\x0\x0\x30\x0\x0\x40\x60\x30\x18\xc\x6\x0" "\x0\x3c\x66\x76\x6e\x66\x3c\x0\x0\x18\x1e\x18\x18\x18\x18\x0\x0\x3c\x66\x60\x30\x18\x7e\x0\x0\x3e\x60\x7e\x60\x60\x3e\x0\x0\x70\x78\x6c\x66\x7c\x60\x0\x0\x7e\x6\x3e\x60\x60\x3e\x0\x0\x7c\x6\x3e\x66\x66\x3c\x0\x0\x7e\x0\x30\x18\x18\x18\x0" "\x0\x3c\x66\x3c\x66\x66\x3c\x0\x0\x3c\x66\x66\x6c\x70\x1e\x0\x0\x0\x0\x18\x0\x0\x18\x0\x0\x0\x18\x0\x0\x18\x8\x0\x0\x30\x18\xc\x6\xc\x18\x0\x0\x0\x0\x3e\x0\x3e\x0\x0\x0\x6\xc\x18\x30\x18\xc\x0\x0\x3c\x60\x60\x38\x0\x18\x0" "\x0\x1c\x22\x32\x32\x2\x3c\x0\x0\x7c\xe\x66\x7e\x66\x66\x0\x0\x3c\x6\x66\x3e\x66\x3e\x0\x0\x7c\x0\x6\x6\xe\x7c\x0\x0\x3e\x70\x66\x66\x66\x3e\x0\x0\x7e\x0\x6\x36\x6\x7e\x0\x0\x7e\x0\x6\x76\x6\x6\x0\x0\x7c\xe\x6\x76\x66\x3c\x0" "\x0\x66\x66\x66\x76\x66\x66\x0\x0\x18\x18\x18\x18\x18\x18\x0\x0\x7e\x0\x60\x60\x70\x3e\x0\x0\x66\x66\x26\x1e\x76\x66\x0\x0\x6\x6\x6\x6\x0\x7e\x0\x0\x46\x6e\x7e\x36\x46\x66\x0\x0\x66\x6e\x5e\x3e\x76\x66\x0\x0\x3c\x70\x66\x66\x66\x3c\x0" "\x0\x3e\x60\x66\x36\x6\x6\x0\x0\x3c\x66\x66\x56\x36\x6c\x0\x0\x3e\x60\x66\x1e\x36\x66\x0\x0\x7c\x6\x6\x7c\x60\x3e\x0\x0\x7e\x0\x18\x18\x18\x18\x0\x0\x66\x66\x66\x66\x70\x3c\x0\x0\x66\x66\x66\x6e\x2c\x8\x0\x0\x46\x46\x56\x56\x56\x3c\x0" "\x0\x42\x66\x2c\x18\x66\x42\x0\x0\x66\x66\x34\x30\x18\x18\x0\x0\x7e\x0\x30\x18\xc\x7e\x0\x0\x3e\x6\x6\x6\x6\x3e\x0\x0\x2\x6\xc\x18\x30\x60\x0\x0\x78\x60\x60\x60\x60\x78\x0\x0\x18\x3c\x66\x42\x0\x0\x0\x0\x0\x0\x0\x0\x0\x7e\x0" "\x0\xc\x18\x0\x0\x0\x0\x0\x0\x0\x0\x3e\x6c\x66\x7c\x0\x0\x6\x6\x3e\x76\x66\x3e\x0\x0\x0\x0\x7c\xe\xe\x7c\x0\x0\x60\x60\x7c\x6e\x66\x7c\x0\x0\x0\x3e\x66\x76\x6\x7c\x0\x0\x78\x1c\xc\x3e\xc\xc\x0\x0\x0\x7c\x66\x7c\x60\x3c\x0" "\x0\x6\x6\x3e\x76\x66\x66\x0\x0\x0\x18\x0\x18\x18\x18\x0\x0\x18\x0\x18\x18\x18\xe\x0\x0\x6\x6\x36\x1e\x36\x66\x0\x0\x18\x18\x18\x18\x18\x18\x0\x0\x0\x0\x7f\xd6\xd6\xd6\x0\x0\x0\x0\x3f\x76\x66\x66\x0\x0\x0\x0\x3c\x66\x66\x3c\x0" "\x0\x0\x0\x3f\x66\x3e\x6\x0\x0\x0\x0\xfc\x66\x7c\x60\x0\x0\x0\x0\x78\x1c\xc\xc\x0\x0\x0\x0\x3c\xe\x78\x3e\x0\x0\xc\xc\xc\x1e\xc\xc\x0\x0\x0\x0\x0\x66\x66\x3e\x0\x0\x0\x0\x0\x66\x3c\x18\x0\x0\x0\x0\x56\x56\x7e\x6c\x0" "\x0\x0\x0\x0\x66\x3c\x66\x0\x0\x0\x0\x6c\x7c\x60\x3c\x0\x0\x0\x0\x7e\x30\x18\x7e\x0\x0\x30\x18\x18\x4\x18\x30\x0\x0\x18\x18\x18\x0\x18\x18\x0\x0\xc\x18\x18\x20\x18\xc\x0\x0\x0\x6c\x36\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x6c\x0\x3e\x6c\x66\x3e\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x66\x0\x7c\x6\x7e\x66\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x66\x0\x3c\x66\x66\x1c\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x66\x18\x6e\x66\x66\x3c\x0\x0\x66\x0\x66\x66\x66\x3c\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xff\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x3e\x3e\x3e\x3e\x3e\x3e\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xdb\xdb\x0" "\x0\x7e\x0\x7e\x0\x7e\x0\x0\x0\xf8\x8\x8\x8\x8\xf8\x0\x0\xff\x0\x0\x0\x0\xff\x0\x0\x1f\x10\x10\x10\x10\x1f\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x0\x2\x1\x0\x0\x0\x20\x30\x28\x24\x22\xa1\x60\x20\x0\x0\x0\x1\x2\x0\x0\x0" "\x20\x60\xa1\x22\x24\x28\x30\x20\x0\x0\x0\x40\x40\x40\x40\x7f\xff\x81\x81\x81\x81\x80\x80\x80\x0\x0\x0\x20\x20\x11\x11\xe\x38\x44\x44\x82\x82\x0\x0\x0\x0\x0\xfe\x7c\x38\x10\x0\x0\x0\x0\x10\x38\x7c\xfe\x0\x0\x80\xc1\x63\x36\x1c\x8\x0\x0" ), // Font no. 37 FontEntry("ZERO", 8, 8, "\x0\x0\x0\x0\x0\x0\x0\x0\x7e\x81\xa5\x81\xbd\x99\x81\x7e\x7e\xff\xdb\xff\xff\xc3\xe7\x7e\x0\x77\x7f\x7f\x3e\x1c\x8\x0\x8\x1c\x3e\x7f\x3e\x1c\x8\x0\x18\x3c\x18\xff\xff\x52\x18\x0\x8\x1c\x3e\x7f\x7f\x49\x1c\x0\x0\x0\x18\x3c\x18\x0\x0\x0" "\xff\xff\xe7\xc3\xe7\xff\xff\xff\x0\x3c\x42\x42\x42\x42\x3c\x0\xff\xc3\xbd\xbd\xbd\xbd\xc3\xff\xf8\xe0\xb0\x3e\x63\x63\x3e\x0\x0\x7e\xc3\xc3\x7e\x18\x7e\x18\x20\x60\xe0\x20\x2e\x3f\x1f\xe\xfe\xc6\xfe\xc6\xc6\xe6\x67\x3\x81\xc2\xbc\xe4\xa4\xfc\xea\xff" "\x0\x0\x6\x1e\x7e\x1e\x6\x0\x0\x0\x60\x78\x7e\x78\x60\x0\x18\x7e\x18\x18\x18\x18\x7e\x18\x66\x66\x66\x66\x66\x0\x66\x0\xff\x6d\x6e\x6c\x6c\x6c\x6c\x0\x7e\x81\x3e\x42\x42\x7c\x81\x7e\x0\x0\x0\x7e\x7e\x0\x0\x0\x18\x7e\x18\x18\x7e\x18\x0\xff" "\x18\x7e\x18\x18\x18\x18\x18\x0\x18\x18\x18\x18\x18\x7e\x18\x0\x0\x20\x60\xff\x60\x20\x0\x0\x0\x4\x6\xff\x6\x4\x0\x0\x0\x0\x0\x3\x3\x3\xff\x0\x0\x24\x66\xff\x66\x24\x0\x0\x0\x0\x8\x1c\x3e\x7f\x0\x0\x0\x0\x0\x7f\x3e\x1c\x8\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\xc\xc\xc\xc\xc\x0\xc\x0\x66\x66\x0\x0\x0\x0\x0\x0\xa\x1f\xa\x1f\xa\x0\x0\x0\x3e\x4b\xb\x3e\x68\x6b\x3e\x8\xc7\x65\x37\x18\xec\xa6\xe3\x0\x1c\x32\x1c\xa2\x63\x73\x5e\x80\x30\x30\x18\x0\x0\x0\x0\x0" "\x8\x6\x3\x3\x3\x6\x8\x0\x8\x30\x60\x60\x60\x30\x8\x0\x8\x2a\x1c\x7f\x1c\x2a\x8\x0\x0\x18\x18\x7e\x18\x18\x0\x0\x0\x0\x0\x0\x0\x0\x18\xe\x0\x0\x0\x7e\x0\x0\x0\x0\x0\x0\x0\x0\x0\x60\x60\x0\x80\xc0\x60\x30\x18\xc\x6\x3" "\x0\x18\x24\x24\x24\x24\x18\x0\x18\x1c\x1e\x18\x18\x18\x3e\x0\x3e\x63\x60\x30\xc\x6\x7f\x0\x3e\x63\x60\x3c\x60\x63\x3e\x0\x70\x78\x6c\x66\x7f\x60\x60\x0\x7f\x3\x3\x3f\x60\x60\x3f\x0\x3e\x63\x3\x3f\x63\x63\x3e\x0\x7f\x60\x30\x18\xc\xc\xc\x0" "\x3e\x63\x63\x3e\x63\x63\x3e\x0\x3e\x63\x63\x7e\x60\x63\x3e\x0\x0\xc\x0\x0\x0\xc\x0\x0\x0\xc\x0\x0\x0\xc\x4\x2\x80\xc0\x60\x30\x30\x60\xc0\x80\x0\x0\x7e\x0\x7e\x0\x0\x0\x3\x6\xc\x18\x18\xc\x6\x3\x3e\x63\x30\x18\xc\x0\xc\x0" "\x3e\x41\x5d\x55\x7d\x1\x3e\x0\x8\x1c\x36\x63\x63\x7f\x63\x41\x3f\x61\x63\x3f\x63\x63\x3f\x0\x3e\x61\x3\x3\x43\x63\x3e\x0\x1f\x31\x63\x63\x63\x33\x1f\x0\x7f\x1\x3\x1f\x3\x3\x7f\x0\x7f\x41\x3\x1f\x13\x3\x3\x0\x3e\x61\x3\x7b\x43\x63\x5e\x0" "\x63\x63\x63\x7f\x63\x63\x63\x0\x7e\x18\x18\x18\x18\x18\x7e\x0\x78\x30\x30\x30\x30\x33\x1e\x0\x63\x33\x1b\xf\x1b\x33\x63\x0\xf\x6\x6\x6\x6\x46\x7f\x0\x63\x77\x7f\x6b\x6b\x63\x63\x0\x63\x67\x6f\x7b\x73\x63\x63\x0\x3e\x63\x63\x63\x63\x63\x3e\x0" "\x3f\x66\x66\x3e\x6\x6\xf\x0\x3e\x63\x63\x63\x7b\x33\x3e\x60\x3f\x66\x66\x3e\x66\x66\x67\xc0\x3e\x43\x3\x3e\x60\x63\x3e\x0\x7e\x18\x18\x18\x18\x18\x18\x0\x63\x63\x63\x63\x63\x63\x3e\x0\x63\x63\x63\x63\x63\x36\x1c\x0\x63\x63\x6b\x6b\x6b\x77\x63\x0" "\x63\x36\x1c\x8\x1c\x36\x63\x0\x41\x63\x36\x1c\x8\x8\x1c\x0\x7f\x61\x30\x18\xc\x46\x7f\x0\x38\x18\x18\x18\x18\x18\x18\x38\x3\x6\xc\x18\x30\x60\xc0\x80\xe\xc\xc\xc\xc\xc\xc\xe\x8\x1c\x36\x63\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xff" "\xc\xc\x18\x0\x0\x0\x0\x0\x0\x0\x3e\x60\x7e\x63\x7e\x0\x3\x3\x3f\x63\x63\x63\x3f\x0\x0\x0\x3e\x63\x3\x63\x3e\x0\x60\x60\x7e\x63\x63\x63\x7e\x0\x0\x0\x3e\x63\x7f\x3\x3e\x0\x3c\x66\x6\x3f\x6\x6\x6\x0\x0\x0\xbe\x63\x63\x7e\x60\x3e" "\x3\x3\x3f\x63\x63\x63\x63\x0\x18\x0\x1c\x18\x18\x18\x3c\x0\x30\x0\x38\x30\x30\x30\x33\x1e\x3\x3\x63\x1b\xf\x1b\x63\x0\x1c\x18\x18\x18\x18\x18\x38\x0\x0\x0\x63\x7f\x6b\x6b\x63\x0\x0\x0\x3f\x63\x63\x63\x63\x0\x0\x0\x3e\x63\x63\x63\x3e\x0" "\x0\x0\x3f\x63\x63\x3f\x3\x3\x0\x0\x7e\x63\x63\x7e\x60\xe0\x0\x0\x7b\x6e\x66\x6\x6\x0\x0\x0\x7e\x3\x3e\x60\x3f\x0\x18\x18\x7e\x18\x18\x18\x78\x0\x0\x0\x63\x63\x63\x63\x7e\x0\x0\x0\x63\x63\x63\x36\x1c\x0\x0\x0\x63\x6b\x6b\x77\x63\x0" "\x0\x0\x63\x36\x1c\x36\x63\x0\x0\x0\x63\x63\x63\x7e\x60\x3f\x0\x0\x7f\x30\x8\x46\x7f\x0\x70\x18\x18\xe\x18\x18\x70\x0\x18\x18\x18\x0\x18\x18\x18\x0\x7\xc\xc\x38\xc\xc\x7\x0\xe\xd9\x70\x0\x0\x0\x0\x0\x0\x0\x8\x14\x22\x7f\x0\x0" "\xff\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\x1\x80\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\xff" "\x1\x0\x0\x0\x0\x0\x0\x0\x80\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x1\x0\x0\x0\x0\x0\x0\x0\x80\x1\x3\x7\xf\x1f\x3f\x7f\xff\xff\xfe\xfc\xf8\xf0\xe0\xc0\x80\xff\xff\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0" "\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\x3\x3\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\xff\xff\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x55\xaa\xff\x0\xff\xaa\x55\x0\x0\x3f\x3f\x3f\x3f\x3f\x3f\x0\x0\x7e\x7e\x7e\x7e\x7e\x7e\x0\x0\xfc\xfc\xfc\xfc\xfc\xfc\x0\x0\xf8\xf8\xf8\xf8\xf8\xf8\x0\x0\xf0\xf0\xf0\xf0\xf0\xf0\x0" "\x0\xe0\xe0\xe0\xe0\xe0\xe0\x0\x0\xc0\xc0\xc0\xc0\xc0\xc0\x0\x0\x80\x80\x80\x80\x80\x80\x0\x0\x1\x1\x1\x1\x1\x1\x0\x0\x3\x3\x3\x3\x3\x3\x0\x0\x7\x7\x7\x7\x7\x7\x0\x0\xf\xf\xf\xf\xf\xf\x0\x0\x1f\x1f\x1f\x1f\x1f\x1f\x0" "\x55\x6b\x55\x6b\x55\x6b\x55\x6b\xff\xff\x0\x0\x0\x8\x1c\x3e\xff\xff\x0\x0\x0\x0\x0\x7f\xff\xff\x0\x0\x8\x1c\x3e\x7f\xff\xff\x0\xc3\xe7\xff\xdb\xc3\x0\x0\x0\x8\x0\x0\x0\x0\x0\x3\x3\x3\x3\x3\x3\x3\x0\x1b\x1b\x1b\x1b\x1b\x1b\x1b" "\x0\xdb\xdb\xdb\xdb\xdb\xdb\xdb\x0\x6\x6\x6\x6\x6\x6\x6\x0\x36\x36\x36\x36\x36\x36\x36\x0\xb6\xb6\xb6\xb6\xb6\xb6\xb6\x0\x1\x1\x1\x1\x1\x1\x1\x0\xd\xd\xd\xd\xd\xd\xd\x0\x6d\x6d\x6d\x6d\x6d\x6d\x6d\x8\x10\x18\xbe\x7d\x18\x8\x10" "\x0\x0\x1f\x18\x1f\x18\x18\x18\x6c\x6c\x6f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x0\x0\x7f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6f\x60\x7f\x0\x0\x0\x6c\x6c\x6c\x6c\x7f\x0\x0\x0\x18\x18\x1f\x18\x1f\x0\x0\x0\x0\x0\x0\x1f\x18\x18\x18\x18" "\x18\x18\x18\xf8\x0\x0\x0\x0\x18\x18\x18\xff\x0\x0\x0\x0\x0\x0\x0\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\x18\x18\x18\x0\x0\x0\x0\xff\x0\x0\x0\x18\x18\x18\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\xf8\x18\x18\x6c\x6c\x6c\xec\x6c\x6c\x6c\x6c" "\x6c\x6c\x6c\xec\xc\xfc\x0\x0\x0\x0\x0\xfc\xc\xec\x6c\x6c\x6c\x6c\x6c\xef\x0\xff\x0\x0\x0\x0\x0\xff\x0\xef\x6c\x6c\x6c\x6c\x6c\xec\xc\xec\x6c\x6c\x0\x0\x0\xff\x0\xff\x0\x0\x6c\x6c\x6c\xef\x0\xef\x6c\x6c\x18\x18\x18\xff\x0\xff\x0\x0" "\x6c\x6c\x6c\xff\x0\x0\x0\x0\x0\x0\x0\xff\x0\xff\x18\x18\x0\x0\x0\xff\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xfc\x0\x0\x0\x0\x18\x18\x18\xf8\x18\xf8\x0\x0\x0\x0\x0\xf8\x18\xf8\x18\x18\x0\x0\x0\xfc\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xff\x6c\x6c\x6c\x6c" "\x18\x18\x18\xff\x18\xff\x18\x18\x18\x18\x18\x1f\x0\x0\x0\x0\x0\x0\x0\xf8\x18\x18\x18\x18\xff\xff\xff\xff\xff\xff\xff\xff\x0\x0\x0\x0\xff\xff\xff\xff\xf\xf\xf\xf\xf\xf\xf\xf\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xff\xff\xff\xff\x0\x0\x0\x0" "\x0\x0\xee\x19\x19\xee\x0\x0\x38\x6c\x66\x3f\x63\x63\x3f\x3\x7f\x46\x6\x6\x6\x6\x6\x0\x0\x0\xff\x66\x66\x66\x66\x0\x7f\x46\xc\x18\xc\x46\x7f\x0\x0\x0\xfc\x66\x63\x33\x1e\x0\x0\x0\xcc\xcc\xcc\x7c\xc\xf\x0\x0\xff\x18\x18\x18\x18\x0" "\x3c\x18\x3c\x66\x66\x3c\x18\x3c\x0\x3e\x63\x7f\x63\x3e\x0\x0\x0\x7e\xc3\xc3\xc3\x66\xe7\x0\x78\x98\x3c\x66\x63\x33\x1e\x0\x0\x0\x66\x99\x99\x66\x0\x0\x0\xc0\x3e\x73\x67\x3e\x3\x0\x0\x7c\x3\x7f\x3\x7c\x0\x0\x0\x0\x0\x0\x0\xdb\xdb\x0" "\x0\x7e\x0\x7e\x0\x7e\x0\x0\x0\xf8\x8\x8\x8\x8\xf8\x0\x0\xff\x0\x0\x0\x0\xff\x0\x0\x1f\x10\x10\x10\x10\x1f\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x0\x2\x1\x0\x0\x0\x20\x30\x28\x24\x22\xa1\x60\x20\x0\x0\x0\x1\x2\x0\x0\x0" "\x20\x60\xa1\x22\x24\x28\x30\x20\x0\x0\x0\x40\x40\x40\x40\x7f\xff\x81\x81\x81\x81\x80\x80\x80\x0\x0\x0\x20\x20\x11\x11\xe\x38\x44\x44\x82\x82\x0\x0\x0\x0\x0\xfe\x7c\x38\x10\x0\x0\x0\x0\x10\x38\x7c\xfe\x0\x0\x80\xc1\x63\x36\x1c\x8\x0\x0" ), // Font no. 38 FontEntry("ZIRCFONT", 8, 8, "\x0\x0\x0\x0\x0\x0\x0\x0\x7e\x81\xa5\x81\xbd\x99\x81\x7e\x7e\xff\xdb\xff\xc3\xe7\xff\x7e\x36\x7f\x7f\x7f\x3e\x1c\x8\x0\x8\x1c\x3e\x7f\x3e\x1c\x8\x0\x1c\x3e\x1c\x7f\x7f\x49\x8\x3e\x0\x8\x1c\x3e\x7f\x3e\x1c\x3e\x0\x0\x18\x3c\x3c\x18\x0\x0" "\xff\xff\xe7\xc3\xc3\xe7\xff\xff\x0\x3c\x66\x42\x42\x66\x3c\x0\xff\xc3\x99\xbd\xbd\x99\xc3\xff\xf0\xe0\xf0\xbe\x33\x33\x33\x1e\x3c\x66\x66\x66\x3c\x18\x7e\x18\xfc\xcc\xfc\xc\xc\xe\xf\x7\xfe\xc6\xfe\xc6\xc6\xe6\x67\x3\x99\x5a\x3c\xe7\xe7\x3c\x5a\x99" "\x1\x7\x1f\x7f\x1f\x7\x1\x0\x40\x70\x7c\x7f\x7c\x70\x40\x0\x18\x3c\x7e\x18\x18\x7e\x3c\x18\x66\x66\x66\x66\x66\x0\x66\x0\xfe\xdb\xdb\xde\xd8\xd8\xd8\x0\x7c\xc6\x1c\x36\x36\x1c\x61\x3f\x0\x0\x0\x0\x7e\x7e\x7e\x0\x18\x3c\x7e\x18\x7e\x3c\x18\xff" "\x18\x3c\x7e\x18\x18\x18\x18\x0\x18\x18\x18\x18\x7e\x3c\x18\x0\x0\x18\x30\x7f\x30\x18\x0\x0\x0\xc\x6\x7f\x6\xc\x0\x0\x0\x0\x3\x3\x3\x7f\x0\x0\x0\x24\x66\xff\x66\x24\x0\x0\x0\x18\x3c\x7e\xff\xff\x0\x0\x0\xff\xff\x7e\x3c\x18\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x10\x18\x18\x18\x8\x0\x18\x0\x22\x36\x34\x0\x0\x0\x0\x0\x0\x44\x7f\x64\x27\x7e\x22\x0\x10\x7e\x19\x3e\x6c\x3f\x4\x0\x0\x41\x63\x30\xc\x46\x63\x0\x1c\x26\x36\x1c\x7e\x19\x27\x0\x8\xc\x6\x0\x0\x0\x0\x0" "\x18\xc\x6\x2\x6\xc\x38\x0\xe\x18\x30\x20\x30\x18\xc\x0\x0\x4\x6c\x1f\x78\x16\x33\x0\x0\x8\x18\x78\x1e\x18\x10\x0\x0\x0\x0\x0\x0\x10\x18\xc\x0\x0\x0\x7c\x1f\x0\x0\x0\x0\x0\x0\x0\x0\x18\x10\x0\x60\x30\x10\x8\xc\x6\x3\x0" "\x1e\x30\x69\x4d\x67\x33\x1e\x0\x8\xc\x8\x8\x8\x3c\xe\x0\x3e\x67\x60\x38\xc\x76\x1f\x0\x7e\x60\x38\x6c\x41\x63\x3e\x0\x24\x26\x36\x32\x7f\x10\x10\x0\x3f\x1\x3f\x63\x40\x73\x3e\x0\x3c\x6\x3\x3b\x67\x66\x3c\x0\x3e\x67\x20\x30\x18\x18\x8\x0" "\x4e\x62\x36\x1c\x36\x33\x1e\x0\x5e\x63\x61\x73\x6c\x20\x20\x0\x0\x10\x18\x0\x0\x18\x8\x0\x0\x8\x18\x0\x0\x10\x18\xc\x18\xc\x6\x3\x6\x1c\x30\x0\x0\x0\x7e\x0\x1e\x78\x0\x0\x6\x1c\x30\x60\x30\x18\xc\x0\x3c\x66\x22\x30\x18\x0\x18\x0" "\x3c\x42\x79\x65\x79\x3\x3e\x0\x8\x8\x1c\x14\x3e\x63\xc1\x0\x3e\x63\x64\x3c\x64\x66\x3f\x0\x7c\xe\x3\x3\x43\x63\x3e\x0\x3e\x63\x40\x44\x64\x36\x1f\x0\x7c\x6\x2\x3f\x2\x6\x7c\x0\x7a\xf\x2\x1e\x7\x6\x6\x0\x1c\x32\x3\x39\x63\x66\x3c\x0" "\x20\x21\x21\x7f\x33\x22\x22\x0\x3c\x10\x18\x18\x18\x8\x3c\x0\x7c\x20\x20\x60\x60\x67\x3c\x0\x62\x32\x1a\xe\x1e\x33\x42\x0\x2\x2\x3\x3\x2\x7a\x3f\x0\x23\x37\x7d\x69\x49\x41\x41\x0\x21\x23\x63\x67\x65\x4d\x79\x0\x3c\xe\x43\x41\x63\x36\x1c\x0" "\x3e\x43\x64\x3e\x6\x6\x2\x0\x1e\x32\x60\x6d\x31\x3b\x6e\x0\x3e\x43\x64\x3e\xe\x36\x62\x0\x3c\x46\x2\x1c\x70\x61\x3e\x0\x78\x1f\x8\xc\xc\x4\x4\x0\x43\x43\x43\x61\x61\x33\x1e\x0\x41\x43\x62\x26\x24\x1c\x18\x0\x41\x41\x69\x6b\x2b\x3f\x36\x0" "\x1\x62\x36\x1c\x1c\x36\x63\x0\x41\x62\x66\x3c\x18\xc\x6\x0\x3f\x30\x18\x8\xc\x66\x3e\x0\x3e\x2\x6\x6\x6\x4\x1c\x0\x2\x6\xc\x8\x18\x30\x60\x0\x3c\x20\x30\x30\x30\x10\x1e\x0\x8\x3c\x66\x41\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xf8\x1f" "\x4\xc\x18\x0\x0\x0\x0\x0\x0\x0\x2c\x32\x61\x63\x5e\x0\x2\x2\x3b\x67\x43\x61\x3d\x0\x0\x0\x3c\x6\x3\x71\x3e\x0\x20\x20\x6e\x73\x61\x43\x5e\x0\x0\x0\x3e\x33\x1b\x6\x7c\x0\x38\xc\x4\x3c\xe\x8\x8\x0\x0\x0\x5e\x63\x61\x6e\x20\x1e" "\x1\x1\x1b\x37\x63\x42\x42\x0\x0\x10\x0\x10\x18\x18\x8\x0\x0\x8\x0\x8\x18\x18\x10\xe\x2\x2\x23\x1b\xf\x11\x21\x0\x8\x8\x18\x18\x18\x10\x10\x0\x0\x0\x35\x7f\x4b\x49\x49\x0\x0\x0\xd\x1b\x31\x31\x21\x0\x0\x0\x1e\x21\x63\x66\x3c\x0" "\x0\x0\x39\x4d\x67\x3b\x2\x2\x0\x0\x2e\x39\x33\x3e\x10\x10\x0\x0\x19\x37\x3\x2\x2\x0\x0\x0\x1e\x7\x3c\x60\x3e\x0\x10\x10\x7e\x18\x18\x8\x8\x0\x0\x0\x44\x46\x66\x72\x4c\x0\x0\x0\x61\x33\x16\x1c\x8\x0\x0\x0\x42\x43\x6b\x69\x36\x0" "\x0\x0\x31\x1e\xc\x16\x23\x0\x0\x0\x43\x26\x3c\x18\xc\x3\x0\x0\x3c\x33\x8\x6\x3f\x0\x18\xc\x4\x3\x4\xc\x38\x0\x8\x18\x8\x10\x18\x18\x10\x0\xe\x10\x10\x60\x10\x18\xe\x0\x4c\x3b\x0\x0\x0\x0\x0\x0\x0\x8\x1c\x36\x63\x63\x7f\x0" "\xff\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\x1\x80\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\xff" "\x1\x0\x0\x0\x0\x0\x0\x0\x80\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x1\x0\x0\x0\x0\x0\x0\x0\x80\x1\x3\x7\xf\x1f\x3f\x7f\xff\xff\xfe\xfc\xf8\xf0\xe0\xc0\x80\xff\xff\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0" "\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\x3\x3\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\xff\xff\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\x0\x41\x14\x0\x0\x0\x0\x18\x19\xf\x3c\x36\x6\x0\x0\x42\x76\x1c\x3c\x66\x43\x0\x0\x18\xd8\xf0\x3c\x6e\x60\x0\x0\x60\x60\xf8\xfc\x60\x40\x0\x0\x80\x98\xf0\xc0\x60\x60\x0" "\x0\x20\x60\xc0\xc0\x60\x30\x0\x0\x80\x80\x0\xc0\xe0\x0\x0\x0\x0\x0\x80\xc0\x0\x0\x0\x0\x0\x0\x3\x1\x0\x0\x0\x0\x1\x1\x0\x3\x3\x0\x0\x0\x4\x7\x1\x3\x6\x4\x0\x0\x1\x1d\xf\x3\x6\x6\x0\x0\x6\x6\x3f\x1f\x6\x4\x0" "\x7e\x7e\x7e\x7e\x7e\x7e\x7e\x7e\xff\xff\x0\x18\x24\x42\x3c\x0\xff\xff\x0\x18\x24\x42\x5a\x0\xff\xff\x0\x18\x3c\x7e\x3c\x0\xff\xff\x0\xe7\x5a\x42\x42\xe7\x0\x0\x0\x18\x18\x0\x0\x0\x0\x2\x3\x3\x2\x3\x1\x0\x0\x2\x3\x13\x3a\x1b\x11\x10" "\x0\x32\x33\x13\x3a\x1b\x11\x10\x1\x3\x1\x3\x6\x6\x0\x0\x1\x3\x1\x43\x26\x66\x30\x10\x1\x33\x71\x63\x26\x66\x30\x10\x0\x2\x3\x1\x0\x0\x0\x0\x0\x2\x33\x31\x6\x7\x3\x2\x20\x62\x73\x31\x26\x67\x63\x2\x0\x0\x18\x3c\x3c\x18\x0\x0" "\x0\x0\x1f\x18\x1f\x18\x18\x18\x6c\x6c\x6f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x0\x0\x7f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6f\x60\x7f\x0\x0\x0\x6c\x6c\x6c\x6c\x7f\x0\x0\x0\x18\x18\x1f\x18\x1f\x0\x0\x0\x0\x0\x0\x0\x1f\x18\x18\x18" "\x18\x18\x18\x18\xf8\x0\x0\x0\x18\x18\x18\x18\xff\x0\x0\x0\x0\x0\x0\x0\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\x18\x18\x0\x0\x0\x0\xff\x0\x0\x0\x18\x18\x18\x18\xff\x18\x18\x18\x18\x18\xf8\x18\xf8\x18\x18\x18\x6c\x6c\x6c\x6c\xec\x6c\x6c\x6c" "\x6c\x6c\xec\xc\xfc\x0\x0\x0\x0\x0\xfc\xc\xec\x6c\x6c\x6c\x6c\x6c\xef\x0\xff\x0\x0\x0\x0\x0\xff\x0\xef\x6c\x6c\x6c\x6c\x6c\xec\xc\xec\x6c\x6c\x6c\x0\x0\xff\x0\xff\x0\x0\x0\x6c\x6c\xef\x0\xef\x6c\x6c\x6c\x18\x18\xff\x0\xff\x0\x0\x0" "\x6c\x6c\x6c\x6c\xff\x0\x0\x0\x0\x0\xff\x0\xff\x18\x18\x18\x0\x0\x0\x0\xff\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xfc\x0\x0\x0\x18\x18\xf8\x18\xf8\x0\x0\x0\x0\x0\xf8\x18\xf8\x18\x18\x18\x0\x0\x0\x0\xfc\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xff\x6c\x6c\x6c" "\x18\x18\xff\x18\xff\x18\x18\x18\x18\x18\x18\x18\x1f\x0\x0\x0\x0\x0\x0\x0\xf8\x18\x18\x18\xff\xff\xff\xff\xff\xff\xff\xff\x0\x0\x0\x0\xff\xff\xff\xff\xf\xf\xf\xf\xf\xf\xf\xf\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xff\xff\xff\xff\x0\x0\x0\x0" "\x0\x0\x6e\x3b\x13\x3b\x6e\x0\x0\x1e\x33\x1f\x33\x1f\x3\x3\x0\x3f\x33\x3\x3\x3\x3\x0\x0\x0\x7f\x36\x36\x36\x36\x0\x3f\x33\x6\xc\x6\x33\x3f\x0\x0\x0\x7e\x1b\x1b\x1b\xe\x0\x0\x66\x66\x66\x66\x3e\x6\x3\x0\x6e\x3b\x18\x18\x18\x18\x0" "\x3f\xc\x1e\x33\x33\x1e\xc\x3f\x1c\x36\x63\x7f\x63\x36\x1c\x0\x1c\x36\x63\x63\x36\x36\x77\x0\x38\xc\x18\x3e\x33\x33\x1e\x0\x0\x0\x7e\xdb\xdb\x7e\x0\x0\x60\x30\x7e\xdb\xdb\x7e\x6\x3\x1c\x6\x3\x1f\x3\x6\x1c\x0\x0\x0\x0\x0\x0\xdb\xdb\x0" "\x0\x7e\x0\x7e\x0\x7e\x0\x0\x0\xf8\x8\x8\x8\x8\xf8\x0\x0\xff\x0\x0\x0\x0\xff\x0\x0\x1f\x10\x10\x10\x10\x1f\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x0\x2\x1\x0\x0\x0\x20\x30\x28\x24\x22\xa1\x60\x20\x0\x0\x0\x1\x2\x0\x0\x0" "\x20\x60\xa1\x22\x24\x28\x30\x20\x0\x0\x0\x40\x40\x40\x40\x7f\xff\x81\x81\x81\x81\x80\x80\x80\x0\x0\x0\x20\x20\x11\x11\xe\x38\x44\x44\x82\x82\x0\x0\x0\x0\x0\xfe\x7c\x38\x10\x0\x0\x0\x0\x10\x38\x7c\xfe\x0\x0\x80\xc1\x63\x36\x1c\x8\x0\x0" ), }; const unsigned int numFontsEntries = 39; PPFont* PPFont::fontInstances[MAXFONTS]; pp_uint32 PPFont::numFontInstances = 0; pp_uint8 PPFont::bigFont[256*16*16/8]; PPFont::FontFamilyDescription PPFont::fontFamilyDescriptions[FONT_LAST] = { FontFamilyDescription(PPSize(6,5), "Tiny (6x5)", "FONT_TINY", 35, 35, -1), FontFamilyDescription(PPSize(8,8), "System (8x8)", "FONT_SYSTEM", 23, 23, -1), FontFamilyDescription(PPSize(12,12), "Large (12x12)", "FONT_LARGE", 1, 1, -1), FontFamilyDescription(PPSize(16,16), "Huge (16x16)", "FONT_HUGE", 23, 23, -1) }; pp_int32 PPFont::enumerationIndex = -1; void PPFont::createLargeFromSystem(pp_uint32 index) { Bitstream bitstream(bigFont, (16*16*256)/8); bitstream.clear(); Bitstream stream2((pp_uint8*)fontEntries[index].data, (8*8*256)/8); for (pp_int32 k = 0; k < 256; k++) for (pp_int32 j = 0; j < 16; j++) for (pp_int32 i = 0; i < 16; i++) { pp_int32 srcOffset = ((j>>1)*8+(i>>1))+(8*8*k); pp_int32 dstOffset = (j*16+i)+(16*16*k); if (stream2.read(srcOffset)) { bitstream.write(dstOffset, 1); } } } PPFont::PPFont(pp_uint8* bits, const pp_uint32 chrWidth, const pp_uint32 chrHeight, pp_uint32 fontId) : charWidth(chrWidth), charHeight(chrHeight), charDim(chrHeight*chrWidth) { fontBits = bits; bitstream = new Bitstream(fontBits, 0); this->fontId = fontId; fontInstances[numFontInstances++] = this; } PPFont::~PPFont() { delete bitstream; } PPFont* PPFont::getFont(pp_uint32 fontId) { pp_uint32 i; for (i = 0; i < numFontInstances; i++) if (fontInstances[i]->fontId == fontId) return fontInstances[i]; if (numFontInstances >= MAXFONTS) return NULL; pp_uint32 index = fontFamilyDescriptions[fontId].fontEntryIndex; switch (fontId) { case FONT_TINY: { return new PPFont((pp_uint8*)fontEntries[index].data, 5, 6, fontId); } case FONT_SYSTEM: { return new PPFont((pp_uint8*)fontEntries[index].data, 8, 8, fontId); } case FONT_LARGE: { return new PPFont((pp_uint8*)fontEntries[index].data, 12, 12, fontId); } case FONT_HUGE: { createLargeFromSystem(index); return new PPFont(bigFont, 16, 16, fontId); break; } } return NULL; } pp_uint32 PPFont::getStrWidth(const char* str) const { if (str == NULL) return 0; return strlen(str)*getCharWidth(); } const char* PPFont::getFamilyInternalName(FontID fontID) { if (fontID >= FONT_LAST) return NULL; return fontFamilyDescriptions[fontID].internalName; } const char* PPFont::getFirstFontFamilyName() { enumerationIndex = FONT_TINY; if (enumerationIndex < FONT_LAST) return fontFamilyDescriptions[enumerationIndex].name; else return NULL; } const char* PPFont::getNextFontFamilyName() { enumerationIndex++; if (enumerationIndex >= FONT_LAST) { enumerationIndex = -1; return NULL; } return fontFamilyDescriptions[enumerationIndex].name; } const char* PPFont::getFirstFontEntryName(FontID fontID) { if (fontID >= FONT_LAST) return NULL; FontFamilyDescription* desc = &fontFamilyDescriptions[fontID]; PPSize size = desc->size; if (fontID == FONT_HUGE) { size.width >>= 1; size.height >>= 1; } pp_int32 i = 0; bool found = false; for (i = 0; i < (signed)numFontsEntries && !found; i++) if (size.match(fontEntries[i].width, fontEntries[i].height)) found = true; if (found) { desc->enumerationIndex = i-1; return fontEntries[i-1].name; } return NULL; } const char* PPFont::getNextFontEntryName(FontID fontID) { if (fontID >= FONT_LAST) return NULL; FontFamilyDescription* desc = &fontFamilyDescriptions[fontID]; PPSize size = desc->size; if (fontID == FONT_HUGE) { size.width >>= 1; size.height >>= 1; } pp_int32 i = desc->enumerationIndex+1; bool found = false; for (i = desc->enumerationIndex+1; i < (signed)numFontsEntries && !found; i++) if (size.match(fontEntries[i].width, fontEntries[i].height)) found = true; if (found) { desc->enumerationIndex = i-1; return fontEntries[i-1].name; } desc->enumerationIndex = -1; return NULL; } void PPFont::selectFontFace(FontID fontID, const char* faceName) { if (fontID >= FONT_LAST) return; FontFamilyDescription* desc = &fontFamilyDescriptions[fontID]; PPSize size = desc->size; if (fontID == FONT_HUGE) { size.width >>= 1; size.height >>= 1; } pp_int32 i = 0; bool found = false; for (i = 0; i < (signed)numFontsEntries && !found; i++) if (size.match(fontEntries[i].width, fontEntries[i].height) && strcmp(fontEntries[i].name, faceName) == 0) found = true; if (!found) return; i--; desc->fontEntryIndex = i; for (pp_uint32 j = 0; j < numFontInstances; j++) if ((unsigned)fontInstances[j]->fontId == (unsigned)fontID) { if (fontID == FONT_HUGE) createLargeFromSystem(i); else { fontInstances[j]->fontBits = (pp_uint8*)fontEntries[i].data; fontInstances[j]->bitstream->setSource(fontInstances[j]->fontBits, fontEntries[i].width*fontEntries[i].height / 8); } } } const char* PPFont::getCurrentFontFace(FontID fontID) { if (fontID >= FONT_LAST) return NULL; FontFamilyDescription* desc = &fontFamilyDescriptions[fontID]; return fontEntries[desc->fontEntryIndex].name; } MilkyTracker-1.02.00/src/ppui/Font.h000066400000000000000000000123631324432207300171030ustar00rootroot00000000000000/* * ppui/Font.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ // Font.h: interface for the PPFont class. // ////////////////////////////////////////////////////////////////////// #ifndef FONT__H #define FONT__H #include "BasicTypes.h" #include "SimpleVector.h" #define MAXFONTS 256 class PPGraphicsAbstract; class Bitstream { public: pp_uint8* buffer; pp_uint32 bufferSize; void setSource(const void* buffer, pp_uint32 bufferSize) { this->buffer = (pp_uint8*)buffer; this->bufferSize = bufferSize; } Bitstream(const void* buffer, pp_uint32 bufferSize) { setSource(buffer, bufferSize); } void clear() { for (pp_uint32 i = 0; i < bufferSize; i++) buffer[i] = 0; } bool read(pp_uint32 offset) const { return (buffer[offset>>3]>>(offset&7))&1; } void write(pp_uint32 offset, bool bit) { pp_uint8 mask = ~(1<<(offset&7));; buffer[offset>>3] &= mask; buffer[offset>>3] |= ((pp_uint8)bit<<(offset&7)); } }; class PPFont { private: // cache big font, is created from normal 8x8 font static pp_uint8 bigFont[]; public: enum FontID { FONT_TINY = 0, FONT_SYSTEM = 1, FONT_LARGE = 2, FONT_HUGE = 3, FONT_LAST }; private: static PPFont* fontInstances[MAXFONTS]; static pp_uint32 numFontInstances; pp_uint32 fontId; PPFont(pp_uint8* bits, pp_uint32 charWidth, pp_uint32 charHeight, pp_uint32 fontId); struct FontFamilyDescription { PPSize size; // Size of font character (width, height) const char* name; // Name of font familiy (Tiny, System, Large) const char* internalName; // Internal name pp_uint32 fontEntryIndex; // Index to font entry table (source for current selected font) const pp_uint32 defaultFontEntryIndex; // Default index to font entry table pp_int32 enumerationIndex; // Is currently enumerating entries FontFamilyDescription(PPSize theSize, const char* theName, const char* theInternalName, pp_uint32 theFontEntryIndex, const pp_uint32 theDefaultFontEntryIndex, pp_int32 theEnumerationIndex) : size(theSize), name(theName), internalName(theInternalName), fontEntryIndex(theFontEntryIndex), defaultFontEntryIndex(theDefaultFontEntryIndex), enumerationIndex(theEnumerationIndex) { } }; static FontFamilyDescription fontFamilyDescriptions[FONT_LAST]; static pp_int32 enumerationIndex; static void createLargeFromSystem(pp_uint32 index); public: pp_uint8* fontBits; Bitstream* bitstream; const pp_uint32 charWidth, charHeight; const pp_uint32 charDim; public: ~PPFont(); pp_uint32 getCharWidth() const { return charWidth; } pp_uint32 getCharHeight() const { return charHeight; } static PPFont* getFont(pp_uint32 fontId); bool getPixelBit(pp_uint8 chr, pp_uint32 x, pp_uint32 y) const { return bitstream->read(chr*charDim+y*charWidth+x); } pp_uint32 getStrWidth(const char* str) const; enum ShrinkTypes { ShrinkTypeMiddle, ShrinkTypeEnd }; void shrinkString(const char* text, char* result, pp_uint32 maxWidth, ShrinkTypes shrinkType = ShrinkTypeMiddle) { pp_uint32 numchars = maxWidth / getCharWidth(); pp_uint32 textLen = strlen(text); if (textLen <= numchars) { strcpy(result, text); return; } if (shrinkType == ShrinkTypeMiddle) { numchars-=(textLen & 1); char* temp = result; pp_uint32 i; for (i = 0; i < (numchars / 2) - ((textLen+1) & 1); i++) temp[i] = text[i]; while (temp[i-1] == ' ' && i > 1) i--; temp[i] = '\xef'; pp_uint32 j = i+1; pp_uint32 k = strlen(text) - (numchars / 2 + (textLen & 1)); while (text[k] == ' ' && k < textLen) k++; for (i = k; i < textLen; i++, j++) temp[j] = text[i]; temp[j] = '\0'; } else if (shrinkType == ShrinkTypeEnd) { pp_int32 i = 0; for (i = 0; i < (signed)numchars-1; i++) { result[i] = text[i]; } while (i > 0 && result[i-1] == '.') i--; result[i++] = '\xef'; result[i] = '\0'; } } PPString shrinkString(const PPString& text, pp_uint32 maxWidth, ShrinkTypes shrinkType = ShrinkTypeMiddle) { char* temp = new char[(text.length()+1)*2]; shrinkString(text, temp, maxWidth, shrinkType); PPString result(temp); delete[] temp; return result; } static const char* getFamilyInternalName(FontID fontID); static const char* getFirstFontFamilyName(); static const char* getNextFontFamilyName(); static const char* getFirstFontEntryName(FontID fontID); static const char* getNextFontEntryName(FontID fontID); static void selectFontFace(FontID fontID, const char* faceName); static const char* getCurrentFontFace(FontID fontID); }; #endif MilkyTracker-1.02.00/src/ppui/Graphics.h000066400000000000000000000101101324432207300177210ustar00rootroot00000000000000/* * ppui/Graphics.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ ///////////////////////////////////////////////////////////////// // // Graphics class // ///////////////////////////////////////////////////////////////// #ifndef __GRAPHICS_H__ #define __GRAPHICS_H__ #include "GraphicsAbstract.h" class PPGraphicsFrameBuffer : public PPGraphicsAbstract { protected: pp_int32 pitch; pp_uint8* buffer; public: PPGraphicsFrameBuffer(pp_int32 w, pp_int32 h, pp_int32 p, void* buff) : PPGraphicsAbstract(w, h), pitch(p), buffer((pp_uint8*)buff) { } void setBufferProperties(pp_int32 p, void* buff) { pitch = p; buffer = (pp_uint8*)buff; } }; #define __EMPTY__ #define SUBCLASS_GRAPHICS(baseclass, prologue, name, epilogue) \ class name : public baseclass \ { \ private: \ prologue \ public: \ name(pp_int32 w, pp_int32 h, pp_int32 p, void* buff); \ virtual void setPixel(pp_int32 x, pp_int32 y); \ virtual void setPixel(pp_int32 x, pp_int32 y, const PPColor& color); \ virtual void fill(PPRect r); \ virtual void fill(); \ virtual void drawHLine(pp_int32 x1, pp_int32 x2, pp_int32 y); \ virtual void drawVLine(pp_int32 y1, pp_int32 y2, pp_int32 x); \ virtual void drawLine(pp_int32 x1, pp_int32 y1, pp_int32 x2, pp_int32 y2); \ virtual void drawAntialiasedLine(pp_int32 x1, pp_int32 y1, pp_int32 x2, pp_int32 y2); \ virtual void blit(const pp_uint8* src, const PPPoint& p, const PPSize& size, pp_uint32 pitch, pp_uint32 bpp, pp_int32 intensity = 256); \ virtual void drawChar(pp_uint8 chr, pp_int32 x, pp_int32 y, bool underlined = false); \ virtual void drawString(const char* str, pp_int32 x, pp_int32 y, bool underlined = false); \ virtual void drawStringVertical(const char* str, pp_int32 x, pp_int32 y, bool underlined = false); \ epilogue \ }; \ // trans is level of transparency - 0 = opaque, 255 = transparent static inline void set_pixel_transp(PPGraphicsAbstract* g, pp_int32 x, pp_int32 y, PPColor* col, unsigned char trans) { PPColor newColor; newColor.r = (col->r * (unsigned int)(255-trans))>>8; newColor.g = (col->g * (unsigned int)(255-trans))>>8; newColor.b = (col->b * (unsigned int)(255-trans))>>8; g->setPixel(x, y, newColor); } // used for win32 SUBCLASS_GRAPHICS(PPGraphicsFrameBuffer, __EMPTY__, PPGraphics_BGR24, __EMPTY__) // OSX (carbon, 32 bits with alpha channel) SUBCLASS_GRAPHICS(PPGraphicsFrameBuffer, __EMPTY__, PPGraphics_ARGB32, __EMPTY__) // used for wince (GAPI) SUBCLASS_GRAPHICS(PPGraphicsFrameBuffer, __EMPTY__, PPGraphics_16BIT, __EMPTY__) // OSX (carbon, 16 bit color, one unused bit) SUBCLASS_GRAPHICS(PPGraphicsFrameBuffer, __EMPTY__, PPGraphics_15BIT, __EMPTY__) // currently unused, big endian compatible version of PPGraphics_BGR24 SUBCLASS_GRAPHICS(PPGraphicsFrameBuffer, __EMPTY__, PPGraphics_BGR24_SLOW, __EMPTY__) #define PROLOGUE \ pp_uint32 bitPosR, bitPosG, bitPosB; #define EPILOGUE \ void setComponentBitpositions(pp_uint32 bitPosR, pp_uint32 bitPosG, pp_uint32 bitPosB) \ { \ this->bitPosR = bitPosR; this->bitPosG = bitPosG; this->bitPosB = bitPosB; \ } // used in the SDL port, arbitrary bit positions but a little bit slower than the rest SUBCLASS_GRAPHICS(PPGraphicsFrameBuffer, PROLOGUE, PPGraphics_24bpp_generic, EPILOGUE) SUBCLASS_GRAPHICS(PPGraphicsFrameBuffer, PROLOGUE, PPGraphics_32bpp_generic, EPILOGUE) #undef EPILOGUE #undef PROLOGUE #undef SUBCLASS_GRAPHICSABSTRACT #undef __EMPTY__ #ifdef __OPENGL__ #include "Graphics_OGL.h" #endif #endif MilkyTracker-1.02.00/src/ppui/GraphicsAbstract.h000066400000000000000000000212331324432207300214150ustar00rootroot00000000000000/* * ppui/GraphicsAbstract.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #ifndef __GRAPHICSABSTRACT_H__ #define __GRAPHICSABSTRACT_H__ #include "BasicTypes.h" class PPFont; #define __PPGRAPHICSLINETEMPLATE \ if (x1 > currentClipRect.x2 || \ x2 < currentClipRect.x1 || \ y1 > currentClipRect.y2 || \ y2 < currentClipRect.y1) \ return; \ clipLine(x1, y1, x2, y2); \ if (x2 < x1) \ return; \ pp_int32 i, deltax, deltay, numpixels; \ pp_int32 d, dinc1, dinc2; \ pp_int32 x, xinc1, xinc2; \ pp_int32 y, yinc1, yinc2; \ /* Calculate deltax and deltay for initialisation */ \ deltax = abs(x2 - x1); \ deltay = abs(y2 - y1); \ /* Initialize all vars based on which is the independent variable */ \ if (deltax >= deltay) \ { \ /* x is independent variable */ \ numpixels = deltax + 1; \ d = (2 * deltay) - deltax; \ dinc1 = deltay << 1; \ dinc2 = (deltay - deltax) << 1; \ xinc1 = 1; \ xinc2 = 1; \ yinc1 = 0; \ yinc2 = 1; \ } \ else \ { \ /* y is independent variable */ \ numpixels = deltay + 1; \ d = (2 * deltax) - deltay; \ dinc1 = deltax << 1; \ dinc2 = (deltax - deltay) << 1; \ xinc1 = 0; \ xinc2 = 1; \ yinc1 = 1; \ yinc2 = 1; \ } \ /* Make sure x and y move in the right directions */ \ if (x1 > x2) \ { \ xinc1 = - xinc1; \ xinc2 = - xinc2; \ } \ if (y1 > y2) \ { \ yinc1 = - yinc1; \ yinc2 = - yinc2; \ } \ /* Start drawing at */ \ x = x1; \ y = y1; \ /* Draw the pixels */ \ for (i = 1; i<=numpixels; i++) \ { \ setPixel(x,y); \ if (d < 0) \ { \ d = d + dinc1; \ x = x + xinc1; \ y = y + yinc1; \ } \ else \ { \ d = d + dinc2; \ x = x + xinc2; \ y = y + yinc2; \ } \ } #define __PPGRAPHICSAALINETEMPLATE \ if (x1 > currentClipRect.x2 || \ x2 < currentClipRect.x1 || \ y1 > currentClipRect.y2 || \ y2 < currentClipRect.y1) \ return; \ clipLine(x1, y1, x2, y2); \ if (x2 < x1) \ return; \ PPColor* col = ¤tColor; \ pp_int32 x, y, inc; /* these must be >=32 bits */ \ pp_int32 dx, dy; \ dx = (x2 - x1); \ dy = (y2 - y1); \ if (abs(dx) > abs(dy)) { \ if (dx < 0) { \ dx = -dx; \ dy = -dy; \ swap(&x1, &x2); \ swap(&y1, &y2); \ } \ x = x1 << 16; \ y = y1 << 16; \ inc = (dx == 0 ? 0 : (dy * 65536) / dx); \ while ((x >> 16) < x2) { \ set_pixel_transp(this, x >> 16, y >> 16, \ col, (y >> 8) & 0xFF); \ set_pixel_transp(this, x >> 16, (y >> 16) + 1, \ col, (~y >> 8) & 0xFF); \ x += (1 << 16); \ y += inc; \ } \ } else { \ if (dy < 0) { \ dx = -dx; \ dy = -dy; \ swap(&x1, &x2); \ swap(&y1, &y2); \ } \ x = x1 << 16; \ y = y1 << 16; \ inc = (dy == 0 ? 0 : (dx * 65536) / dy); \ while ((y >> 16) < y2) { \ set_pixel_transp(this, x >> 16, y >> 16, \ col, (x >> 8) & 0xFF); \ set_pixel_transp(this, (x >> 16) + 1, (y >> 16), \ col, (~x >> 8) & 0xFF); \ x += inc; \ y += (1 << 16); \ } \ } class PPGraphicsAbstract { protected: static void swap(pp_int32* a, pp_int32* b) { pp_int32 h = *a; *a = *b; *b = h; } pp_int32 width, height; public: bool lock; protected: PPColor currentColor; pp_uint16 color16; PPRect currentClipRect, origRect; PPFont* currentFont; virtual void validateRect() { if ((currentClipRect.x1 < 0 && currentClipRect.x2 < 0) || (currentClipRect.y1 < 0 && currentClipRect.y2 < 0) || (currentClipRect.x1 > width && currentClipRect.x2 > width) || (currentClipRect.y1 > height && currentClipRect.y2 > height)) { currentClipRect.x1 = 0; currentClipRect.x2 = 0; currentClipRect.y1 = 0; currentClipRect.y2 = 0; return; } if (currentClipRect.x1 < 0) currentClipRect.x1 = 0; if (currentClipRect.y1 < 0) currentClipRect.y1 = 0; if (currentClipRect.x2 > width) currentClipRect.x2 = width; if (currentClipRect.y2 > height) currentClipRect.y2 = height; } void convertColorTo16() { color16 = (((pp_uint16)((currentColor.r)>>3)<<11)+((pp_uint16)((currentColor.g)>>2)<<5)+(pp_uint16)((currentColor.b)>>3)); } PPGraphicsAbstract(pp_int32 w, pp_int32 h) : width(w), height(h), lock(false), currentFont(NULL) { } public: virtual ~PPGraphicsAbstract() {} pp_int32 getWidth() { return width; } pp_int32 getHeight() { return height; } void setRect(pp_int32 x1, pp_int32 y1, pp_int32 x2, pp_int32 y2) { currentClipRect.x1 = x1; currentClipRect.y1 = y1; currentClipRect.x2 = x2; currentClipRect.y2 = y2; origRect = currentClipRect; validateRect(); } void setRect(PPRect r) { currentClipRect = origRect = r; validateRect(); } PPRect getRect() { return origRect; } void setFullRect() { currentClipRect.x1 = 0; currentClipRect.y1 = 0; currentClipRect.x2 = width-1; currentClipRect.y2 = height-1; origRect = currentClipRect; validateRect(); } void clipLine(pp_int32& x1, pp_int32& y1, pp_int32& x2, pp_int32& y2) { if (x1 < currentClipRect.x1) { float stepy = (float)(y2 - y1) / (float)(x2 - x1); y1 = (pp_int32)((float)y1 + stepy * (currentClipRect.x1-x1)); x1 = currentClipRect.x1; } if (x2 > currentClipRect.x2) { float stepy = (float)(y2 - y1) / (float)(x2 - x1); x2 = currentClipRect.x2; y2 = (pp_int32)((float)y1 + stepy * (x2-x1)); } } void setColor(pp_int32 r,pp_int32 g,pp_int32 b) { currentColor.r = r; currentColor.g = g; currentColor.b = b; convertColorTo16(); } void setColor(const PPColor& color) { currentColor = color; convertColorTo16(); } void setSafeColor(pp_int32 r,pp_int32 g,pp_int32 b) { if (r > 255) r = 255; if (g > 255) g = 255; if (b > 255) b = 255; currentColor.r = r; currentColor.g = g; currentColor.b = b; convertColorTo16(); } PPColor getColor() { return currentColor; } virtual void setFont(PPFont* font) { currentFont = font; } PPFont* getCurrentFont() { return currentFont; } // Interfaces to be implemented by sub class virtual void setPixel(pp_int32 x, pp_int32 y) = 0; virtual void setPixel(pp_int32 x, pp_int32 y, const PPColor& color) = 0; virtual void fill(PPRect r) = 0; virtual void fill() = 0; virtual void drawHLine(pp_int32 x1, pp_int32 x2, pp_int32 y) = 0; virtual void drawVLine(pp_int32 y1, pp_int32 y2, pp_int32 x) = 0; virtual void drawLine(pp_int32 x1, pp_int32 y1, pp_int32 x2, pp_int32 y2) = 0; virtual void drawAntialiasedLine(pp_int32 x1, pp_int32 y1, pp_int32 x2, pp_int32 y2) = 0; virtual void blit(const pp_uint8* src, const PPPoint& p, const PPSize& size, pp_uint32 pitch, pp_uint32 bpp, pp_int32 intensity = 256) = 0; virtual void drawChar(pp_uint8 chr, pp_int32 x, pp_int32 y, bool underlined = false) = 0; virtual void drawString(const char* str, pp_int32 x, pp_int32 y, bool underlined = false) = 0; virtual void drawStringVertical(const char* str, pp_int32 x, pp_int32 y, bool underlined = false) = 0; virtual void fillVerticalShaded(PPRect r, const PPColor& colSrc, const PPColor& colDst, bool invertShading) { const pp_int32 height = (r.y2 - r.y1); if (!height) return; pp_int32 addr = (colDst.r - colSrc.r)*65536 / height; pp_int32 addg = (colDst.g - colSrc.g)*65536 / height; pp_int32 addb = (colDst.b - colSrc.b)*65536 / height; if (invertShading) { addr = -addr; addg = -addg; addb = -addb; } pp_int32 rd = (invertShading ? colDst.r : colSrc.r) * 65536; pp_int32 gr = (invertShading ? colDst.g : colSrc.g) * 65536; pp_int32 bl = (invertShading ? colDst.b : colSrc.b) * 65536; const pp_int32 y1 = r.y1; const pp_int32 y2 = r.y2; for (pp_int32 i = y1; i < y2; i++) { setColor(rd>>16,gr>>16,bl>>16); drawHLine(r.x1, r.x2, i); rd+=addr; gr+=addg; bl+=addb; } } virtual void fillVerticalShaded(const PPColor& colSrc, const PPColor& colDst, bool invertShading) { fillVerticalShaded(currentClipRect, colSrc, colDst, invertShading); } }; #endif MilkyTracker-1.02.00/src/ppui/Graphics_15BIT.cpp000066400000000000000000000222271324432207300211340ustar00rootroot00000000000000/* * ppui/Graphics_15BIT.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "Graphics.h" #include "Font.h" #include "fastfill.h" #define BPP 2 #define _16TO15BIT(col) \ (((col) & 0x1f) + (((col)>>1)&0x3E0) + (((col)>>1)&0x7C00)) PPGraphics_15BIT::PPGraphics_15BIT(pp_int32 w, pp_int32 h, pp_int32 p, void* buff) : PPGraphicsFrameBuffer(w, h, p, buff) { } void PPGraphics_15BIT::setPixel(pp_int32 x, pp_int32 y) { if (y >= currentClipRect.y1 && y < currentClipRect.y2 && x >= currentClipRect.x1 && x < currentClipRect.x2) { pp_uint16* buff = (pp_uint16*)buffer+(pitch>>1)*y+x; *buff = _16TO15BIT(color16); } } void PPGraphics_15BIT::setPixel(pp_int32 x, pp_int32 y, const PPColor& color) { if (y >= currentClipRect.y1 && y < currentClipRect.y2 && x >= currentClipRect.x1 && x < currentClipRect.x2) { pp_uint16 col16 = (((pp_uint16)((color.r)>>3)<<11)+((pp_uint16)((color.g)>>2)<<5)+(pp_uint16)((color.b)>>3)); pp_uint16* buff = (pp_uint16*)buffer+(pitch>>1)*y+x; *buff = _16TO15BIT(col16); } } void PPGraphics_15BIT::fill(PPRect rect) { if (rect.y1 < currentClipRect.y1) rect.y1 = currentClipRect.y1; if (rect.x1 < currentClipRect.x1) rect.x1 = currentClipRect.x1; if (rect.y2 > currentClipRect.y2) rect.y2 = currentClipRect.y2; if (rect.x2 > currentClipRect.x2) rect.x2 = currentClipRect.x2; pp_uint32 col32 = (((pp_uint32)_16TO15BIT(color16)) << 16) + _16TO15BIT(color16); const pp_int32 hPitch = pitch>>1; pp_uint16* dest = (pp_uint16*)buffer+hPitch*rect.y1+rect.x1; const pp_int32 width = rect.x2 - rect.x1; const pp_int32 height = rect.y2 - rect.y1; for (pp_int32 y = 0; y < height; y++) { pp_uint16* buff = dest; pp_int32 len = width; if (reinterpret_cast (buff) & 3) { *buff++ = _16TO15BIT(color16); len--; } pp_uint32* buff32 = (pp_uint32*)buff; fill_dword(buff32, col32, len>>1); if (len&1) *((pp_uint16*)(buff32+(len>>1))) = _16TO15BIT(color16); dest+=hPitch; } } void PPGraphics_15BIT::fill() { fill(currentClipRect); } void PPGraphics_15BIT::drawHLine(pp_int32 x1, pp_int32 x2, pp_int32 y) { pp_int32 lx = x1; pp_int32 rx = x2; if (x1 > x2) { pp_int32 h = x2; x2 = x1; x1 = h; } if (lx < currentClipRect.x1) lx = currentClipRect.x1; if (rx > currentClipRect.x2) rx = currentClipRect.x2; if (y < currentClipRect.y1) return; if (y >= currentClipRect.y2) return; pp_uint32 col32 = (((pp_uint32)_16TO15BIT(color16)) << 16) + _16TO15BIT(color16); pp_uint16* buff = (pp_uint16*)buffer+(pitch>>1)*y+lx; pp_int32 len = rx-lx; if (len <= 0) return; if (reinterpret_cast (buff) & 3) { *buff++ = _16TO15BIT(color16); len--; } pp_uint32* buff32 = (pp_uint32*)buff; fill_dword(buff32, col32, len>>1); if (len&1) *((pp_uint16*)(buff32+(len>>1))) = _16TO15BIT(color16); } void PPGraphics_15BIT::drawVLine(pp_int32 y1, pp_int32 y2, pp_int32 x) { pp_int32 ly = y1; pp_int32 ry = y2; if (y1 > y2) { pp_int32 h = y2; y2 = y1; y1 = h; } if (ly < currentClipRect.y1) ly = currentClipRect.y1; if (ry > currentClipRect.y2) ry = currentClipRect.y2; if (x < currentClipRect.x1) return; if (x >= currentClipRect.x2) return; pp_uint16* buff = (pp_uint16*)buffer+(pitch>>1)*ly+x; for (pp_int32 y = ly; y < ry; y++) { *buff = _16TO15BIT(color16); buff+=pitch>>1; } } void PPGraphics_15BIT::drawLine(pp_int32 x1, pp_int32 y1, pp_int32 x2, pp_int32 y2) { __PPGRAPHICSLINETEMPLATE } void PPGraphics_15BIT::drawAntialiasedLine(pp_int32 x1, pp_int32 y1, pp_int32 x2, pp_int32 y2) { __PPGRAPHICSAALINETEMPLATE } void PPGraphics_15BIT::blit(const pp_uint8* src, const PPPoint& p, const PPSize& size, pp_uint32 pitch, pp_uint32 bpp, pp_int32 intensity/* = 256*/) { pp_int32 w = size.width; pp_int32 h = size.height; const pp_uint32 bytesPerPixel = bpp; if (intensity == 256) { pp_uint16* dst = (pp_uint16*)((pp_uint8*)buffer+(this->pitch*p.y+p.x*BPP)); for (pp_int32 y = 0; y < h; y++) { for (pp_int32 x = 0; x < w; x++) { *dst = (((pp_uint16)((src[0])>>3)<<10)+((pp_uint16)((src[1])>>3)<<5)+(pp_uint16)((src[2])>>3)); dst++; src+=bytesPerPixel; } dst+=this->pitch/BPP - w; src+=pitch - w*bytesPerPixel; } } else { pp_uint16* dst = (pp_uint16*)((pp_uint8*)buffer+(this->pitch*p.y+p.x*BPP)); for (pp_int32 y = 0; y < h; y++) { for (pp_int32 x = 0; x < w; x++) { *dst = (((pp_uint16)((src[0]*intensity/256)>>3)<<10)+((pp_uint16)((src[1]*intensity/256)>>3)<<5)+(pp_uint16)((src[2]*intensity/256)>>3)); dst++; src+=bytesPerPixel; } dst+=this->pitch/BPP - w; src+=pitch - w*bytesPerPixel; } } } void PPGraphics_15BIT::drawChar(pp_uint8 chr, pp_int32 x, pp_int32 y, bool underlined) { if (currentFont == NULL) return; pp_int32 charWidth = (signed)currentFont->getCharWidth(); pp_int32 charHeight = (signed)currentFont->getCharHeight(); pp_int32 charDim = currentFont->charDim; if (x + (signed)charWidth < currentClipRect.x1 || x > currentClipRect.x2 || y + (signed)charHeight < currentClipRect.y1 || y > currentClipRect.y2) return; /*pp_uint8 r = (pp_uint8)currentColor.r; pp_uint8 g = (pp_uint8)currentColor.g; pp_uint8 b = (pp_uint8)currentColor.b; if (x>= currentClipRect.x1 && x + (signed)currentFont->charWidth < currentClipRect.x2 && y>= currentClipRect.y1 && y + (signed)currentFont->charHeight < currentClipRect.y2) { for (pp_uint32 i = 0; i < currentFont->charHeight; i++) { pp_uint8* buff = (pp_uint8*)buffer + (y+i)*pitch + x*3; for (pp_uint32 j = 0; j < currentFont->charWidth; j++) { if (currentFont->getPixelBit(chr, j,i)) { buff[0] = b; buff[1] = g; buff[2] = r; } buff+=3; } } } else { for (pp_uint32 i = 0; i < currentFont->charHeight; i++) for (pp_uint32 j = 0; j < currentFont->charWidth; j++) { if (y+(signed)i >= currentClipRect.y1 && y+(signed)i < currentClipRect.y2 && x+(signed)j >= currentClipRect.x1 && x+(signed)j < currentClipRect.x2 && currentFont->getPixelBit(chr, j,i)) { pp_uint8* buff = (pp_uint8*)buffer+((y+i)*pitch+(x+j)*3); buff[0] = b; buff[1] = g; buff[2] = r; } } }*/ Bitstream* bitstream = currentFont->bitstream; pp_uint8* fontbuffer = bitstream->buffer; pp_uint16* buff = (pp_uint16*)buffer+(pitch>>1)*y+x; const pp_uint32 cchrDim = chr*charDim; const pp_uint32 incr = (pitch>>1)-(charWidth); if (x>= currentClipRect.x1 && x + charWidth < currentClipRect.x2 && y>= currentClipRect.y1 && y + charHeight < currentClipRect.y2) { pp_uint32 yChr = cchrDim; for (pp_uint32 i = 0; i < (unsigned)charHeight; i++) { pp_uint32 xChr = yChr; for (pp_uint32 j = 0; j < (unsigned)charWidth; j++) { if ((fontbuffer[xChr>>3]>>(xChr&7)&1)) { *buff = _16TO15BIT(color16); } buff++; xChr++; } buff+=incr; yChr+=charWidth; } } else { pp_uint32 yChr = cchrDim; for (pp_uint32 i = 0; i < (unsigned)charHeight; i++) { pp_uint32 xChr = yChr; for (pp_uint32 j = 0; j < (unsigned)charWidth; j++) { if (y+(signed)i >= currentClipRect.y1 && y+(signed)i < currentClipRect.y2 && x+(signed)j >= currentClipRect.x1 && x+(signed)j < currentClipRect.x2 && (fontbuffer[xChr>>3]>>(xChr&7)&1)) { pp_uint16* buff = (pp_uint16*)buffer+(pitch>>1)*(y+i)+(x+j); *buff = _16TO15BIT(color16); } xChr++; } yChr+=charWidth; } } if (underlined) drawHLine(x, x+charWidth, y+charHeight); } void PPGraphics_15BIT::drawString(const char* str, pp_int32 x, pp_int32 y, bool underlined/* = false*/) { if (currentFont == NULL) return; pp_int32 charWidth = (signed)currentFont->getCharWidth(); pp_int32 charHeight = (signed)currentFont->getCharHeight(); pp_int32 sx = x; while (*str) { switch (*str) { case '\xf4': setPixel(x+(charWidth>>1), y+(charHeight>>1)); break; case '\n': y+=charHeight; x=sx-charWidth; break; default: drawChar(*str, x, y, underlined); } x += charWidth; str++; } } void PPGraphics_15BIT::drawStringVertical(const char* str, pp_int32 x, pp_int32 y, bool underlined/* = false*/) { if (currentFont == NULL) return; pp_int32 charWidth = (signed)currentFont->getCharWidth(); pp_int32 charHeight = (signed)currentFont->getCharHeight(); while (*str) { switch (*str) { case '\xf4': setPixel(x+(charWidth>>1), y+(charHeight>>1)); break; default: drawChar(*str, x, y, underlined); } y += charHeight; str++; } } MilkyTracker-1.02.00/src/ppui/Graphics_16BIT.cpp000066400000000000000000000217131324432207300211340ustar00rootroot00000000000000/* * ppui/Graphics_16BIT.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "Graphics.h" #include "Font.h" #include "fastfill.h" #define BPP 2 PPGraphics_16BIT::PPGraphics_16BIT(pp_int32 w, pp_int32 h, pp_int32 p, void* buff) : PPGraphicsFrameBuffer(w, h, p, buff) { } void PPGraphics_16BIT::setPixel(pp_int32 x, pp_int32 y) { if (y >= currentClipRect.y1 && y < currentClipRect.y2 && x >= currentClipRect.x1 && x < currentClipRect.x2) { pp_uint16* buff = (pp_uint16*)buffer+(pitch>>1)*y+x; *buff = color16; } } void PPGraphics_16BIT::setPixel(pp_int32 x, pp_int32 y, const PPColor& color) { if (y >= currentClipRect.y1 && y < currentClipRect.y2 && x >= currentClipRect.x1 && x < currentClipRect.x2) { pp_uint16 col16 = (((pp_uint16)((color.r)>>3)<<11)+((pp_uint16)((color.g)>>2)<<5)+(pp_uint16)((color.b)>>3)); pp_uint16* buff = (pp_uint16*)buffer+(pitch>>1)*y+x; *buff = col16; } } void PPGraphics_16BIT::fill(PPRect rect) { if (rect.y1 < currentClipRect.y1) rect.y1 = currentClipRect.y1; if (rect.x1 < currentClipRect.x1) rect.x1 = currentClipRect.x1; if (rect.y2 > currentClipRect.y2) rect.y2 = currentClipRect.y2; if (rect.x2 > currentClipRect.x2) rect.x2 = currentClipRect.x2; pp_uint32 col32 = (((pp_uint32)color16) << 16) + color16; const pp_int32 hPitch = pitch>>1; pp_uint16* dest = (pp_uint16*)buffer+hPitch*rect.y1+rect.x1; const pp_int32 width = rect.x2 - rect.x1; const pp_int32 height = rect.y2 - rect.y1; const pp_int16 color16 = this->color16; for (pp_int32 y = 0; y < height; y++) { pp_uint16* buff = dest; pp_int32 len = width; if (reinterpret_cast (buff) & 3) { *buff++ = color16; len--; } pp_uint32* buff32 = (pp_uint32*)buff; fill_dword(buff32, col32, len>>1); if (len&1) *((pp_uint16*)(buff32+(len>>1))) = color16; dest+=hPitch; } } void PPGraphics_16BIT::fill() { fill(currentClipRect); } void PPGraphics_16BIT::drawHLine(pp_int32 x1, pp_int32 x2, pp_int32 y) { pp_int32 lx = x1; pp_int32 rx = x2; if (x1 > x2) { pp_int32 h = x2; x2 = x1; x1 = h; } if (lx < currentClipRect.x1) lx = currentClipRect.x1; if (rx > currentClipRect.x2) rx = currentClipRect.x2; if (y < currentClipRect.y1) return; if (y >= currentClipRect.y2) return; pp_uint32 col32 = (((pp_uint32)color16) << 16) + color16; pp_uint16* buff = (pp_uint16*)buffer+(pitch>>1)*y+lx; pp_int32 len = rx-lx; if (len <= 0) return; if (reinterpret_cast (buff) & 3) { *buff++ = color16; len--; } pp_uint32* buff32 = (pp_uint32*)buff; fill_dword(buff32, col32, len>>1); if (len&1) *((pp_uint16*)(buff32+(len>>1))) = color16; } void PPGraphics_16BIT::drawVLine(pp_int32 y1, pp_int32 y2, pp_int32 x) { pp_int32 ly = y1; pp_int32 ry = y2; if (y1 > y2) { pp_int32 h = y2; y2 = y1; y1 = h; } if (ly < currentClipRect.y1) ly = currentClipRect.y1; if (ry > currentClipRect.y2) ry = currentClipRect.y2; if (x < currentClipRect.x1) return; if (x >= currentClipRect.x2) return; pp_uint16* buff = (pp_uint16*)buffer+(pitch>>1)*ly+x; for (pp_int32 y = ly; y < ry; y++) { *buff = color16; buff+=pitch>>1; } } void PPGraphics_16BIT::drawLine(pp_int32 x1, pp_int32 y1, pp_int32 x2, pp_int32 y2) { __PPGRAPHICSLINETEMPLATE } void PPGraphics_16BIT::drawAntialiasedLine(pp_int32 x1, pp_int32 y1, pp_int32 x2, pp_int32 y2) { __PPGRAPHICSAALINETEMPLATE } void PPGraphics_16BIT::blit(const pp_uint8* src, const PPPoint& p, const PPSize& size, pp_uint32 pitch, pp_uint32 bpp, pp_int32 intensity/* = 256*/) { pp_int32 w = size.width; pp_int32 h = size.height; const pp_uint32 bytesPerPixel = bpp; if (intensity == 256) { pp_uint16* dst = (pp_uint16*)((pp_uint8*)buffer+(this->pitch*p.y+p.x*BPP)); for (pp_int32 y = 0; y < h; y++) { for (pp_int32 x = 0; x < w; x++) { *dst = (((pp_uint16)((src[0])>>3)<<11)+((pp_uint16)((src[1])>>2)<<5)+(pp_uint16)((src[2])>>3)); dst++; src+=bytesPerPixel; } dst+=this->pitch/BPP - w; src+=pitch - w*bytesPerPixel; } } else { pp_uint16* dst = (pp_uint16*)((pp_uint8*)buffer+(this->pitch*p.y+p.x*BPP)); for (pp_int32 y = 0; y < h; y++) { for (pp_int32 x = 0; x < w; x++) { *dst = (((pp_uint16)((src[0]*intensity/256)>>3)<<11)+((pp_uint16)((src[1]*intensity/256)>>2)<<5)+(pp_uint16)((src[2]*intensity/256)>>3)); dst++; src+=bytesPerPixel; } dst+=this->pitch/BPP - w; src+=pitch - w*bytesPerPixel; } } } void PPGraphics_16BIT::drawChar(pp_uint8 chr, pp_int32 x, pp_int32 y, bool underlined) { if (currentFont == NULL) return; pp_int32 charWidth = (signed)currentFont->getCharWidth(); pp_int32 charHeight = (signed)currentFont->getCharHeight(); pp_int32 charDim = currentFont->charDim; if (x + (signed)charWidth < currentClipRect.x1 || x > currentClipRect.x2 || y + (signed)charHeight < currentClipRect.y1 || y > currentClipRect.y2) return; /*pp_uint8 r = (pp_uint8)currentColor.r; pp_uint8 g = (pp_uint8)currentColor.g; pp_uint8 b = (pp_uint8)currentColor.b; if (x>= currentClipRect.x1 && x + (signed)currentFont->charWidth < currentClipRect.x2 && y>= currentClipRect.y1 && y + (signed)currentFont->charHeight < currentClipRect.y2) { for (pp_uint32 i = 0; i < currentFont->charHeight; i++) { pp_uint8* buff = (pp_uint8*)buffer + (y+i)*pitch + x*3; for (pp_uint32 j = 0; j < currentFont->charWidth; j++) { if (currentFont->getPixelBit(chr, j,i)) { buff[0] = b; buff[1] = g; buff[2] = r; } buff+=3; } } } else { for (pp_uint32 i = 0; i < currentFont->charHeight; i++) for (pp_uint32 j = 0; j < currentFont->charWidth; j++) { if (y+(signed)i >= currentClipRect.y1 && y+(signed)i < currentClipRect.y2 && x+(signed)j >= currentClipRect.x1 && x+(signed)j < currentClipRect.x2 && currentFont->getPixelBit(chr, j,i)) { pp_uint8* buff = (pp_uint8*)buffer+((y+i)*pitch+(x+j)*3); buff[0] = b; buff[1] = g; buff[2] = r; } } }*/ Bitstream* bitstream = currentFont->bitstream; pp_uint8* fontbuffer = bitstream->buffer; pp_uint16* buff = (pp_uint16*)buffer+(pitch>>1)*y+x; const pp_uint32 cchrDim = chr*charDim; const pp_uint32 incr = (pitch>>1)-(charWidth); if (x>= currentClipRect.x1 && x + charWidth < currentClipRect.x2 && y>= currentClipRect.y1 && y + charHeight < currentClipRect.y2) { pp_uint32 yChr = cchrDim; for (pp_uint32 i = 0; i < (unsigned)charHeight; i++) { pp_uint32 xChr = yChr; for (pp_uint32 j = 0; j < (unsigned)charWidth; j++) { if ((fontbuffer[xChr>>3]>>(xChr&7)&1)) { *buff = color16; } buff++; xChr++; } buff+=incr; yChr+=charWidth; } } else { pp_uint32 yChr = cchrDim; for (pp_uint32 i = 0; i < (unsigned)charHeight; i++) { pp_uint32 xChr = yChr; for (pp_uint32 j = 0; j < (unsigned)charWidth; j++) { if (y+(signed)i >= currentClipRect.y1 && y+(signed)i < currentClipRect.y2 && x+(signed)j >= currentClipRect.x1 && x+(signed)j < currentClipRect.x2 && (fontbuffer[xChr>>3]>>(xChr&7)&1)) { pp_uint16* buff = (pp_uint16*)buffer+(pitch>>1)*(y+i)+(x+j); *buff = color16; } xChr++; } yChr+=charWidth; } } if (underlined) drawHLine(x, x+charWidth, y+charHeight); } void PPGraphics_16BIT::drawString(const char* str, pp_int32 x, pp_int32 y, bool underlined/* = false*/) { if (currentFont == NULL) return; pp_int32 charWidth = (signed)currentFont->getCharWidth(); pp_int32 charHeight = (signed)currentFont->getCharHeight(); pp_int32 sx = x; while (*str) { switch (*str) { case '\xf4': setPixel(x+(charWidth>>1), y+(charHeight>>1)); break; case '\n': y+=charHeight; x=sx-charWidth; break; default: drawChar(*str, x, y, underlined); } x += charWidth; str++; } } void PPGraphics_16BIT::drawStringVertical(const char* str, pp_int32 x, pp_int32 y, bool underlined/* = false*/) { if (currentFont == NULL) return; pp_int32 charWidth = (signed)currentFont->getCharWidth(); pp_int32 charHeight = (signed)currentFont->getCharHeight(); while (*str) { switch (*str) { case '\xf4': setPixel(x+(charWidth>>1), y+(charHeight>>1)); break; default: drawChar(*str, x, y, underlined); } y += charHeight; str++; } } MilkyTracker-1.02.00/src/ppui/Graphics_24bpp_generic.cpp000066400000000000000000000234001324432207300227650ustar00rootroot00000000000000/* * ppui/Graphics_24bpp_generic.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * Graphics_24bpp_generic.cpp * milkytracker_sdl * * Created by Peter Barth on 06.12.07. * */ #include "Graphics.h" #include "Font.h" #define BPP 3 PPGraphics_24bpp_generic::PPGraphics_24bpp_generic(pp_int32 w, pp_int32 h, pp_int32 p, void* buff) : PPGraphicsFrameBuffer(w, h, p, buff), bitPosR(0), bitPosG(8), bitPosB(16) { } void PPGraphics_24bpp_generic::setPixel(pp_int32 x, pp_int32 y) { if (y >= currentClipRect.y1 && y < currentClipRect.y2 && x >= currentClipRect.x1 && x < currentClipRect.x2) { pp_uint8* buff = (pp_uint8*)buffer+pitch*y+x*BPP; const pp_uint32 rgb = (currentColor.r << bitPosR) + (currentColor.g << bitPosG) + (currentColor.b << bitPosB); #ifndef __ppc__ buff[0] = rgb & 255; buff[1] = (rgb >> 8) & 255; buff[2] = (rgb >> 16) & 255; #else buff[0] = (rgb >> 16) & 255; buff[1] = (rgb >> 8) & 255; buff[2] = rgb & 255; #endif } } void PPGraphics_24bpp_generic::setPixel(pp_int32 x, pp_int32 y, const PPColor& color) { if (y >= currentClipRect.y1 && y < currentClipRect.y2 && x >= currentClipRect.x1 && x < currentClipRect.x2) { pp_uint8* buff = (pp_uint8*)buffer+pitch*y+x*BPP; const pp_uint32 rgb = (color.r << bitPosR) + (color.g << bitPosG) + (color.b << bitPosB); #ifndef __ppc__ buff[0] = rgb & 255; buff[1] = (rgb >> 8) & 255; buff[2] = (rgb >> 16) & 255; #else buff[0] = (rgb >> 16) & 255; buff[1] = (rgb >> 8) & 255; buff[2] = rgb & 255; #endif } } void PPGraphics_24bpp_generic::fill(PPRect rect) { if (rect.y1 < currentClipRect.y1) rect.y1 = currentClipRect.y1; if (rect.x1 < currentClipRect.x1) rect.x1 = currentClipRect.x1; if (rect.y2 > currentClipRect.y2) rect.y2 = currentClipRect.y2; if (rect.x2 > currentClipRect.x2) rect.x2 = currentClipRect.x2; const pp_uint32 rgb = (currentColor.r << bitPosR) + (currentColor.g << bitPosG) + (currentColor.b << bitPosB); pp_int32 len = (rect.x2-rect.x1); pp_uint8* buff = (pp_uint8*)buffer+(pitch*rect.y1+rect.x1*BPP); for (pp_int32 y = rect.y1; y < rect.y2; y++) { pp_uint8* ptr = buff; pp_int32 i; for (i = 0; i < len; i++) { #ifndef __ppc__ *ptr = rgb & 255; *(ptr+1) = (rgb >> 8) & 255; *(ptr+2) = (rgb >> 16) & 255; #else *ptr = (rgb >> 16) & 255; *(ptr+1) = (rgb >> 8) & 255; *(ptr+2) = rgb & 255; #endif ptr+=3; } buff+=pitch; } } void PPGraphics_24bpp_generic::fill() { fill(currentClipRect); } void PPGraphics_24bpp_generic::drawHLine(pp_int32 x1, pp_int32 x2, pp_int32 y) { pp_int32 lx = x1; pp_int32 rx = x2; if (x1 > x2) { pp_int32 h = x2; x2 = x1; x1 = h; } if (lx < currentClipRect.x1) lx = currentClipRect.x1; if (rx > currentClipRect.x2) rx = currentClipRect.x2; if (y < currentClipRect.y1) return; if (y >= currentClipRect.y2) return; const pp_uint32 rgb = (currentColor.r << bitPosR) + (currentColor.g << bitPosG) + (currentColor.b << bitPosB); pp_int32 len = (rx-lx); pp_uint8* buff = (pp_uint8*)buffer+pitch*y+lx*BPP; pp_int32 i; for (i = 0; i < len; i++) { #ifndef __ppc__ *buff = rgb & 255; *(buff+1) = (rgb >> 8) & 255; *(buff+2) = (rgb >> 16) & 255; #else *buff = (rgb >> 16) & 255; *(buff+1) = (rgb >> 8) & 255; *(buff+2) = rgb & 255; #endif buff+=3; } } void PPGraphics_24bpp_generic::drawVLine(pp_int32 y1, pp_int32 y2, pp_int32 x) { pp_int32 ly = y1; pp_int32 ry = y2; if (y1 > y2) { pp_int32 h = y2; y2 = y1; y1 = h; } if (ly < currentClipRect.y1) ly = currentClipRect.y1; if (ry > currentClipRect.y2) ry = currentClipRect.y2; if (x < currentClipRect.x1) return; if (x >= currentClipRect.x2) return; pp_uint8* buff = (pp_uint8*)buffer+pitch*ly+x*BPP; const pp_uint32 rgb = (currentColor.r << bitPosR) + (currentColor.g << bitPosG) + (currentColor.b << bitPosB); for (pp_int32 y = ly; y < ry; y++) { #ifndef __ppc__ *buff = rgb & 255; *(buff+1) = (rgb >> 8) & 255; *(buff+2) = (rgb >> 16) & 255; #else *buff = (rgb >> 16) & 255; *(buff+1) = (rgb >> 8) & 255; *(buff+2) = rgb & 255; #endif buff+=pitch; } } void PPGraphics_24bpp_generic::drawLine(pp_int32 x1, pp_int32 y1, pp_int32 x2, pp_int32 y2) { __PPGRAPHICSLINETEMPLATE } void PPGraphics_24bpp_generic::drawAntialiasedLine(pp_int32 x1, pp_int32 y1, pp_int32 x2, pp_int32 y2) { __PPGRAPHICSAALINETEMPLATE } void PPGraphics_24bpp_generic::blit(const pp_uint8* src, const PPPoint& p, const PPSize& size, pp_uint32 pitch, pp_uint32 bpp, pp_int32 intensity/* = 256*/) { pp_int32 w = size.width; pp_int32 h = size.height; const pp_int32 bytesPerPixel = bpp; pp_uint8* dst = (pp_uint8*)buffer+(this->pitch*p.y+p.x*BPP); if (intensity == 256) { for (pp_int32 y = 0; y < h; y++) { for (pp_int32 x = 0; x < w; x++) { const pp_uint32 rgb = ((pp_uint32)src[0] << bitPosR) + ((pp_uint32)src[1] << bitPosG) + ((pp_uint32)src[2] << bitPosB); #ifndef __ppc__ dst[0] = rgb & 255; dst[1] = (rgb >> 8) & 255; dst[2] = (rgb >> 16) & 255; #else dst[0] = (rgb >> 16) & 255; dst[1] = (rgb >> 8) & 255; dst[2] = rgb & 255; #endif dst+=BPP; src+=bytesPerPixel; } dst+=this->pitch - w*BPP; src+=pitch - w*bytesPerPixel; } } else { for (pp_int32 y = 0; y < h; y++) { for (pp_int32 x = 0; x < w; x++) { const pp_uint32 rgb = ((((pp_uint32)src[0]*intensity)>>8) << bitPosR) + ((((pp_uint32)src[1]*intensity)>>8) << bitPosG) + ((((pp_uint32)src[2]*intensity)>>8) << bitPosB); #ifndef __ppc__ dst[0] = rgb & 255; dst[1] = (rgb >> 8) & 255; dst[2] = (rgb >> 16) & 255; #else dst[0] = (rgb >> 16) & 255; dst[1] = (rgb >> 8) & 255; dst[2] = rgb & 255; #endif dst+=BPP; src+=bytesPerPixel; } dst+=this->pitch - w*BPP; src+=pitch - w*bytesPerPixel; } } } void PPGraphics_24bpp_generic::drawChar(pp_uint8 chr, pp_int32 x, pp_int32 y, bool underlined) { if (currentFont == NULL) return; pp_int32 charWidth = (signed)currentFont->getCharWidth(); pp_int32 charHeight = (signed)currentFont->getCharHeight(); pp_int32 charDim = currentFont->charDim; if (x + (signed)charWidth < currentClipRect.x1 || x > currentClipRect.x2 || y + (signed)charHeight < currentClipRect.y1 || y > currentClipRect.y2) return; const pp_uint32 rgb = (currentColor.r << bitPosR) + (currentColor.g << bitPosG) + (currentColor.b << bitPosB); Bitstream* bitstream = currentFont->bitstream; pp_uint8* fontbuffer = bitstream->buffer; pp_uint8* buff = (pp_uint8*)buffer + y*pitch + x*BPP; pp_uint32 cchrDim = chr*charDim; if (x>= currentClipRect.x1 && x + charWidth < currentClipRect.x2 && y>= currentClipRect.y1 && y + charHeight < currentClipRect.y2) { pp_uint32 yChr = cchrDim; for (pp_uint32 i = 0; i < (unsigned)charHeight; i++) { pp_uint32 xChr = yChr; for (pp_uint32 j = 0; j < (unsigned)charWidth; j++) { if ((fontbuffer[xChr>>3]>>(xChr&7)&1)) { #ifndef __ppc__ buff[0] = rgb & 255; buff[1] = (rgb >> 8) & 255; buff[2] = (rgb >> 16) & 255; #else buff[0] = (rgb >> 16) & 255; buff[1] = (rgb >> 8) & 255; buff[2] = rgb & 255; #endif } buff+=BPP; xChr++; } buff+=pitch-(charWidth*BPP); yChr+=charWidth; } } else { pp_uint32 yChr = cchrDim; for (pp_uint32 i = 0; i < (unsigned)charHeight; i++) { pp_uint32 xChr = yChr; for (pp_uint32 j = 0; j < (unsigned)charWidth; j++) { if (y+(signed)i >= currentClipRect.y1 && y+(signed)i < currentClipRect.y2 && x+(signed)j >= currentClipRect.x1 && x+(signed)j < currentClipRect.x2 && (fontbuffer[xChr>>3]>>(xChr&7)&1)) { pp_uint8* buff = (pp_uint8*)buffer+((y+i)*pitch+(x+j)*BPP); #ifndef __ppc__ buff[0] = rgb & 255; buff[1] = (rgb >> 8) & 255; buff[2] = (rgb >> 16) & 255; #else buff[0] = (rgb >> 16) & 255; buff[1] = (rgb >> 8) & 255; buff[2] = rgb & 255; #endif } xChr++; } yChr+=charWidth; } } if (underlined) drawHLine(x, x+charWidth, y+charHeight); } void PPGraphics_24bpp_generic::drawString(const char* str, pp_int32 x, pp_int32 y, bool underlined/* = false*/) { if (currentFont == NULL) return; pp_int32 charWidth = (signed)currentFont->getCharWidth(); pp_int32 charHeight = (signed)currentFont->getCharHeight(); pp_int32 sx = x; while (*str) { switch (*str) { case '\xf4': setPixel(x+(charWidth>>1), y+(charHeight>>1)); break; case '\n': y+=charHeight; x=sx-charWidth; break; default: drawChar(*str, x, y, underlined); } x += charWidth; str++; } } void PPGraphics_24bpp_generic::drawStringVertical(const char* str, pp_int32 x, pp_int32 y, bool underlined/* = false*/) { if (currentFont == NULL) return; pp_int32 charWidth = (signed)currentFont->getCharWidth(); pp_int32 charHeight = (signed)currentFont->getCharHeight(); while (*str) { switch (*str) { case '\xf4': setPixel(x+(charWidth>>1), y+(charHeight>>1)); break; default: drawChar(*str, x, y, underlined); } y += charHeight; str++; } } MilkyTracker-1.02.00/src/ppui/Graphics_32bpp_generic.cpp000066400000000000000000000205001324432207300227620ustar00rootroot00000000000000/* * ppui/Graphics_32bpp_generic.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * Graphics_32bpp_generic.cpp * milkytracker_sdl * * Created by Peter Barth on 06.12.07. * */ #include "Graphics.h" #include "Font.h" #define BPP 4 #include "fastfill.h" PPGraphics_32bpp_generic::PPGraphics_32bpp_generic(pp_int32 w, pp_int32 h, pp_int32 p, void* buff) : PPGraphicsFrameBuffer(w, h, p, buff), bitPosR(0), bitPosG(8), bitPosB(16) { } void PPGraphics_32bpp_generic::setPixel(pp_int32 x, pp_int32 y) { if (y >= currentClipRect.y1 && y < currentClipRect.y2 && x >= currentClipRect.x1 && x < currentClipRect.x2) { pp_uint8* buff = (pp_uint8*)buffer+pitch*y+x*BPP; *(pp_uint32*)buff = (currentColor.r << bitPosR) + (currentColor.g << bitPosG) + (currentColor.b << bitPosB); } } void PPGraphics_32bpp_generic::setPixel(pp_int32 x, pp_int32 y, const PPColor& color) { if (y >= currentClipRect.y1 && y < currentClipRect.y2 && x >= currentClipRect.x1 && x < currentClipRect.x2) { pp_uint8* buff = (pp_uint8*)buffer+pitch*y+x*BPP; *(pp_uint32*)buff = (color.r << bitPosR) + (color.g << bitPosG) + (color.b << bitPosB); } } void PPGraphics_32bpp_generic::fill(PPRect rect) { if (rect.y1 < currentClipRect.y1) rect.y1 = currentClipRect.y1; if (rect.x1 < currentClipRect.x1) rect.x1 = currentClipRect.x1; if (rect.y2 > currentClipRect.y2) rect.y2 = currentClipRect.y2; if (rect.x2 > currentClipRect.x2) rect.x2 = currentClipRect.x2; pp_int32 len = (rect.x2-rect.x1); if (len <= 0) return; pp_uint32 rgb1 = (currentColor.r << bitPosR) + (currentColor.g << bitPosG) + (currentColor.b << bitPosB); pp_int32 inc = (pitch-len*BPP) / BPP; pp_uint8* buff = (pp_uint8*)buffer+(pitch*rect.y1+rect.x1*BPP); pp_uint32* ptr = reinterpret_cast(buff); for (pp_int32 y = rect.y1; y < rect.y2; y++) { fill_dword(ptr, rgb1, len); ptr+=len; ptr+=inc; } } void PPGraphics_32bpp_generic::fill() { fill(currentClipRect); } void PPGraphics_32bpp_generic::drawHLine(pp_int32 x1, pp_int32 x2, pp_int32 y) { pp_int32 lx = x1; pp_int32 rx = x2; if (x1 > x2) { pp_int32 h = x2; x2 = x1; x1 = h; } if (lx < currentClipRect.x1) lx = currentClipRect.x1; if (rx > currentClipRect.x2) rx = currentClipRect.x2; if (y < currentClipRect.y1) return; if (y >= currentClipRect.y2) return; if (lx > currentClipRect.x2) return; if (rx < currentClipRect.x1) return; pp_int32 len = (rx-lx); if (len <= 0) return; pp_uint8* buff = (pp_uint8*)buffer+pitch*y+lx*4; pp_uint32 rgb1 = (currentColor.r << bitPosR) + (currentColor.g << bitPosG) + (currentColor.b << bitPosB); fill_dword(reinterpret_cast(buff), rgb1, len); } void PPGraphics_32bpp_generic::drawVLine(pp_int32 y1, pp_int32 y2, pp_int32 x) { pp_int32 ly = y1; pp_int32 ry = y2; if (y1 > y2) { pp_int32 h = y2; y2 = y1; y1 = h; } if (ly < currentClipRect.y1) ly = currentClipRect.y1; if (ry > currentClipRect.y2) ry = currentClipRect.y2; if (x < currentClipRect.x1) return; if (x >= currentClipRect.x2) return; pp_int32 len = (ry-ly); if (len <= 0) return; pp_uint8* buff = (pp_uint8*)buffer+pitch*(ly)+x*4; pp_uint32 rgb1 = (currentColor.r << bitPosR) + (currentColor.g << bitPosG) + (currentColor.b << bitPosB); fill_dword_vertical(reinterpret_cast(buff), rgb1, len, pitch); } void PPGraphics_32bpp_generic::drawLine(pp_int32 x1, pp_int32 y1, pp_int32 x2, pp_int32 y2) { __PPGRAPHICSLINETEMPLATE } void PPGraphics_32bpp_generic::drawAntialiasedLine(pp_int32 x1, pp_int32 y1, pp_int32 x2, pp_int32 y2) { __PPGRAPHICSAALINETEMPLATE } void PPGraphics_32bpp_generic::blit(const pp_uint8* src, const PPPoint& p, const PPSize& size, pp_uint32 pitch, pp_uint32 bpp, pp_int32 intensity/* = 256*/) { pp_int32 w = size.width; pp_int32 h = size.height; pp_uint8* dst = (pp_uint8*)buffer+(this->pitch*p.y+p.x*BPP); const pp_uint32 bytesPerPixel = bpp; const pp_uint32 bitPosR = this->bitPosR; const pp_uint32 bitPosG = this->bitPosG; const pp_uint32 bitPosB = this->bitPosB; if (intensity != 256) { for (pp_int32 y = 0; y < h; y++) { for (pp_int32 x = 0; x < w; x++) { *(pp_uint32*)dst = (((src[0]*intensity)>>8) << bitPosR) + (((src[1]*intensity)>>8) << bitPosG) + (((src[2]*intensity)>>8) << bitPosB); dst+=BPP; src+=bytesPerPixel; } dst+=this->pitch - w*BPP; src+=pitch - w*bytesPerPixel; } } else { for (pp_int32 y = 0; y < h; y++) { for (pp_int32 x = 0; x < w; x++) { *(pp_uint32*)dst = ((pp_uint32)src[0] << bitPosR) + ((pp_uint32)src[1] << bitPosG) + ((pp_uint32)src[2] << bitPosB); dst+=BPP; src+=bytesPerPixel; } dst+=this->pitch - w*BPP; src+=pitch - w*bytesPerPixel; } } } void PPGraphics_32bpp_generic::drawChar(pp_uint8 chr, pp_int32 x, pp_int32 y, bool underlined/* = false*/) { if (currentFont == NULL) return; pp_int32 charWidth = (signed)currentFont->getCharWidth(); pp_int32 charHeight = (signed)currentFont->getCharHeight(); if (x + (signed)charWidth < currentClipRect.x1 || x > currentClipRect.x2 || y + (signed)charHeight < currentClipRect.y1 || y > currentClipRect.y2) return; pp_int32 charDim = currentFont->charDim; Bitstream* bitstream = currentFont->bitstream; pp_uint8* fontbuffer = bitstream->buffer; pp_uint32 rgb1 = (currentColor.r << bitPosR) + (currentColor.g << bitPosG) + (currentColor.b << bitPosB); pp_uint32 cchrDim = chr*charDim; if (x>= currentClipRect.x1 && x + charWidth < currentClipRect.x2 && y>= currentClipRect.y1 && y + charHeight < currentClipRect.y2) { pp_uint8* buff = (pp_uint8*)buffer + y*pitch + x*BPP; pp_uint32 yChr = cchrDim; for (pp_uint32 i = 0; i < charHeight; i++) { pp_uint32 xChr = yChr; for (pp_uint32 j = 0; j < charWidth; j++) { if ((fontbuffer[xChr>>3]>>(xChr&7)&1)) { *reinterpret_cast(buff) = rgb1; } buff+=BPP; xChr++; } buff+=pitch-(charWidth*BPP); yChr+=charWidth; } } else { pp_uint32 yChr = cchrDim; for (pp_int32 i = 0; i < charHeight; i++) { pp_uint32 xChr = yChr; for (pp_int32 j = 0; j < charWidth; j++) { if (y+(signed)i >= currentClipRect.y1 && y+(signed)i < currentClipRect.y2 && x+(signed)j >= currentClipRect.x1 && x+(signed)j < currentClipRect.x2 && (fontbuffer[xChr>>3]>>(xChr&7)&1)) { pp_uint8* buff = (pp_uint8*)buffer+((y+i)*pitch+(x+j)*BPP); *reinterpret_cast(buff) = rgb1; } xChr++; } yChr+=charWidth; } } if (underlined) drawHLine(x, x+charWidth, y+charHeight); } void PPGraphics_32bpp_generic::drawString(const char* str, pp_int32 x, pp_int32 y, bool underlined/* = false*/) { if (currentFont == NULL) return; pp_int32 charWidth = (signed)currentFont->getCharWidth(); pp_int32 charHeight = (signed)currentFont->getCharHeight(); pp_int32 sx = x; while (*str) { switch (*str) { case '\xf4': setPixel(x+(charWidth>>1), y+(charHeight>>1)); break; case '\n': y+=charHeight; x=sx-charWidth; break; default: drawChar(*str, x, y, underlined); } x += charWidth; str++; } } void PPGraphics_32bpp_generic::drawStringVertical(const char* str, pp_int32 x, pp_int32 y, bool underlined/* = false*/) { if (currentFont == NULL) return; pp_int32 charWidth = (signed)currentFont->getCharWidth(); pp_int32 charHeight = (signed)currentFont->getCharHeight(); while (*str) { switch (*str) { case '\xf4': setPixel(x+(charWidth>>1), y+(charHeight>>1)); break; default: drawChar(*str, x, y, underlined); } y += charHeight; str++; } } MilkyTracker-1.02.00/src/ppui/Graphics_ARGB32.cpp000066400000000000000000000213221324432207300212230ustar00rootroot00000000000000/* * ppui/Graphics_ARGB32.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "Graphics.h" #include "Font.h" #include "fastfill.h" #define BPP 4 PPGraphics_ARGB32::PPGraphics_ARGB32(pp_int32 w, pp_int32 h, pp_int32 p, void* buff) : PPGraphicsFrameBuffer(w, h, p, buff) { } void PPGraphics_ARGB32::setPixel(pp_int32 x, pp_int32 y) { if (y >= currentClipRect.y1 && y < currentClipRect.y2 && x >= currentClipRect.x1 && x < currentClipRect.x2) { pp_uint8* buff = (pp_uint8*)buffer+pitch*y+x*BPP; buff[1] = (pp_uint8)currentColor.r; buff[2] = (pp_uint8)currentColor.g; buff[3] = (pp_uint8)currentColor.b; } } void PPGraphics_ARGB32::setPixel(pp_int32 x, pp_int32 y, const PPColor& color) { if (y >= currentClipRect.y1 && y < currentClipRect.y2 && x >= currentClipRect.x1 && x < currentClipRect.x2) { pp_uint8* buff = (pp_uint8*)buffer+pitch*y+x*BPP; buff[1] = color.r; buff[2] = color.g; buff[3] = color.b; } } void PPGraphics_ARGB32::fill(PPRect rect) { if (rect.y1 < currentClipRect.y1) rect.y1 = currentClipRect.y1; if (rect.x1 < currentClipRect.x1) rect.x1 = currentClipRect.x1; if (rect.y2 > currentClipRect.y2) rect.y2 = currentClipRect.y2; if (rect.x2 > currentClipRect.x2) rect.x2 = currentClipRect.x2; pp_int32 len = (rect.x2-rect.x1); if (len <= 0) return; pp_uint8 r = (pp_uint8)currentColor.r; pp_uint8 g = (pp_uint8)currentColor.g; pp_uint8 b = (pp_uint8)currentColor.b; #ifdef __ppc__ pp_uint32 rgb1 = (((pp_uint32)r) << 16) + (((pp_uint32)g) << 8) + (((pp_uint32)b)); #else pp_uint32 rgb1 = (((pp_uint32)b) << 24) + (((pp_uint32)g) << 16) + (((pp_uint32)r) << 8); #endif pp_int32 inc = (pitch-len*BPP) / BPP; pp_uint8* buff = (pp_uint8*)buffer+(pitch*rect.y1+rect.x1*BPP); pp_uint32* ptr = reinterpret_cast(buff); for (pp_int32 y = rect.y1; y < rect.y2; y++) { fill_dword(ptr, rgb1, len); ptr+=len; ptr+=inc; } } void PPGraphics_ARGB32::fill() { fill(currentClipRect); } void PPGraphics_ARGB32::drawHLine(pp_int32 x1, pp_int32 x2, pp_int32 y) { pp_int32 lx = x1; pp_int32 rx = x2; if (x1 > x2) { pp_int32 h = x2; x2 = x1; x1 = h; } if (lx < currentClipRect.x1) lx = currentClipRect.x1; if (rx > currentClipRect.x2) rx = currentClipRect.x2; if (y < currentClipRect.y1) return; if (y >= currentClipRect.y2) return; if (lx > currentClipRect.x2) return; if (rx < currentClipRect.x1) return; pp_int32 len = (rx-lx); if (len <= 0) return; pp_uint8* buff = (pp_uint8*)buffer+pitch*y+lx*4; #ifdef __ppc__ pp_uint32 rgb1 = (((pp_uint32)currentColor.r) << 16) + (((pp_uint32)currentColor.g) << 8) + (((pp_uint32)currentColor.b)); #else pp_uint32 rgb1 = (((pp_uint32)currentColor.b) << 24) + (((pp_uint32)currentColor.g) << 16) + (((pp_uint32)currentColor.r) << 8); #endif fill_dword(reinterpret_cast(buff), rgb1, len); } void PPGraphics_ARGB32::drawVLine(pp_int32 y1, pp_int32 y2, pp_int32 x) { pp_int32 ly = y1; pp_int32 ry = y2; if (y1 > y2) { pp_int32 h = y2; y2 = y1; y1 = h; } if (ly < currentClipRect.y1) ly = currentClipRect.y1; if (ry > currentClipRect.y2) ry = currentClipRect.y2; if (x < currentClipRect.x1) return; if (x >= currentClipRect.x2) return; pp_int32 len = (ry-ly); if (len <= 0) return; pp_uint8* buff = (pp_uint8*)buffer+pitch*(ly)+x*4; #ifdef __ppc__ pp_uint32 rgb1 = (((pp_uint32)currentColor.r) << 16) + (((pp_uint32)currentColor.g) << 8) + (((pp_uint32)currentColor.b)); #else pp_uint32 rgb1 = (((pp_uint32)currentColor.b) << 24) + (((pp_uint32)currentColor.g) << 16) + (((pp_uint32)currentColor.r) << 8); #endif fill_dword_vertical(reinterpret_cast(buff), rgb1, len, pitch); } void PPGraphics_ARGB32::drawLine(pp_int32 x1, pp_int32 y1, pp_int32 x2, pp_int32 y2) { __PPGRAPHICSLINETEMPLATE } void PPGraphics_ARGB32::drawAntialiasedLine(pp_int32 x1, pp_int32 y1, pp_int32 x2, pp_int32 y2) { __PPGRAPHICSAALINETEMPLATE } void PPGraphics_ARGB32::blit(const pp_uint8* src, const PPPoint& p, const PPSize& size, pp_uint32 pitch, pp_uint32 bpp, pp_int32 intensity/* = 256*/) { pp_int32 w = size.width; pp_int32 h = size.height; pp_uint8* dst = (pp_uint8*)buffer+(this->pitch*p.y+p.x*BPP); const pp_uint32 bytesPerPixel = bpp; if (intensity != 256) { for (pp_int32 y = 0; y < h; y++) { for (pp_int32 x = 0; x < w; x++) { dst[1] = (src[0]*intensity)>>8; dst[2] = (src[1]*intensity)>>8; dst[3] = (src[2]*intensity)>>8; dst+=BPP; src+=bytesPerPixel; } dst+=this->pitch - w*BPP; src+=pitch - w*bytesPerPixel; } } else { for (pp_int32 y = 0; y < h; y++) { for (pp_int32 x = 0; x < w; x++) { dst[1] = src[0]; dst[2] = src[1]; dst[3] = src[2]; dst+=BPP; src+=bytesPerPixel; } dst+=this->pitch - w*BPP; src+=pitch - w*bytesPerPixel; } } } void PPGraphics_ARGB32::drawChar(pp_uint8 chr, pp_int32 x, pp_int32 y, bool underlined/* = false*/) { if (currentFont == NULL) return; const pp_int32 charWidth = (signed)currentFont->getCharWidth(); const pp_int32 charHeight = (signed)currentFont->getCharHeight(); if (x + (signed)charWidth < currentClipRect.x1 || x > currentClipRect.x2 || y + (signed)charHeight < currentClipRect.y1 || y > currentClipRect.y2) return; const pp_int32 charDim = currentFont->charDim; pp_uint8 r = (pp_uint8)currentColor.r; pp_uint8 g = (pp_uint8)currentColor.g; pp_uint8 b = (pp_uint8)currentColor.b; Bitstream* bitstream = currentFont->bitstream; pp_uint8* fontbuffer = bitstream->buffer; #ifdef __ppc__ pp_uint32 rgb1 = (((pp_uint32)r) << 16) + (((pp_uint32)g) << 8) + (((pp_uint32)b)); #else pp_uint32 rgb1 = (((pp_uint32)b) << 24) + (((pp_uint32)g) << 16) + (((pp_uint32)r) << 8); #endif const pp_uint32 cchrDim = chr*charDim; if (x>= currentClipRect.x1 && x + charWidth < currentClipRect.x2 && y>= currentClipRect.y1 && y + charHeight < currentClipRect.y2) { pp_uint8* buff = (pp_uint8*)buffer + y*pitch + x*BPP; pp_uint32 yChr = cchrDim; for (pp_uint32 i = 0; i < (unsigned)charHeight; i++) { pp_uint32 xChr = yChr; for (pp_uint32 j = 0; j < (unsigned)charWidth; j++) { if ((fontbuffer[xChr>>3]>>(xChr&7)&1)) { *reinterpret_cast(buff) = rgb1; } buff+=BPP; xChr++; } buff+=pitch-(charWidth*BPP); yChr+=charWidth; } } else { pp_uint32 yChr = cchrDim; for (pp_int32 i = 0; i < charHeight; i++) { pp_uint32 xChr = yChr; for (pp_int32 j = 0; j < charWidth; j++) { if (y+(signed)i >= currentClipRect.y1 && y+(signed)i < currentClipRect.y2 && x+(signed)j >= currentClipRect.x1 && x+(signed)j < currentClipRect.x2 && (fontbuffer[xChr>>3]>>(xChr&7)&1)) { pp_uint8* buff = (pp_uint8*)buffer+((y+i)*pitch+(x+j)*BPP); *reinterpret_cast(buff) = rgb1; } xChr++; } yChr+=charWidth; } } if (underlined) drawHLine(x, x+charWidth, y+charHeight); } void PPGraphics_ARGB32::drawString(const char* str, pp_int32 x, pp_int32 y, bool underlined/* = false*/) { if (currentFont == NULL) return; const pp_int32 charWidth = (signed)currentFont->getCharWidth(); const pp_int32 charHeight = (signed)currentFont->getCharHeight(); pp_int32 sx = x; while (*str) { switch (*str) { case '\xf4': setPixel(x+(charWidth>>1), y+(charHeight>>1)); break; case '\n': y+=charHeight; x=sx-charWidth; break; default: drawChar(*str, x, y, underlined); } x += charWidth; str++; } } void PPGraphics_ARGB32::drawStringVertical(const char* str, pp_int32 x, pp_int32 y, bool underlined/* = false*/) { if (currentFont == NULL) return; const pp_int32 charWidth = (signed)currentFont->getCharWidth(); const pp_int32 charHeight = (signed)currentFont->getCharHeight(); while (*str) { switch (*str) { case '\xf4': setPixel(x+(charWidth>>1), y+(charHeight>>1)); break; default: drawChar(*str, x, y, underlined); } y += charHeight; str++; } } MilkyTracker-1.02.00/src/ppui/Graphics_BGR24.cpp000066400000000000000000000243521324432207300211310ustar00rootroot00000000000000/* * ppui/Graphics_BGR24.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "Graphics.h" #include "Font.h" #define BPP 3 PPGraphics_BGR24::PPGraphics_BGR24(pp_int32 w, pp_int32 h, pp_int32 p, void* buff) : PPGraphicsFrameBuffer(w, h, p, buff) { } void PPGraphics_BGR24::setPixel(pp_int32 x, pp_int32 y) { if (y >= currentClipRect.y1 && y < currentClipRect.y2 && x >= currentClipRect.x1 && x < currentClipRect.x2) { pp_uint8* buff = (pp_uint8*)buffer+pitch*y+x*BPP; buff[0] = (pp_uint8)currentColor.b; buff[1] = (pp_uint8)currentColor.g; buff[2] = (pp_uint8)currentColor.r; } } void PPGraphics_BGR24::setPixel(pp_int32 x, pp_int32 y, const PPColor& color) { if (y >= currentClipRect.y1 && y < currentClipRect.y2 && x >= currentClipRect.x1 && x < currentClipRect.x2) { pp_uint8* buff = (pp_uint8*)buffer+pitch*y+x*BPP; buff[0] = (pp_uint8)color.b; buff[1] = (pp_uint8)color.g; buff[2] = (pp_uint8)color.r; } } void PPGraphics_BGR24::fill(PPRect rect) { if (rect.y1 < currentClipRect.y1) rect.y1 = currentClipRect.y1; if (rect.x1 < currentClipRect.x1) rect.x1 = currentClipRect.x1; if (rect.y2 > currentClipRect.y2) rect.y2 = currentClipRect.y2; if (rect.x2 > currentClipRect.x2) rect.x2 = currentClipRect.x2; pp_uint8 r = (pp_uint8)currentColor.r; pp_uint8 g = (pp_uint8)currentColor.g; pp_uint8 b = (pp_uint8)currentColor.b; pp_uint32 rgb1 = (((pp_uint32)currentColor.b) << 24) + (((pp_uint32)r) << 16) + (((pp_uint32)g) << 8) + (((pp_uint32)b)); pp_uint32 rgb2 = (((pp_uint32)currentColor.g) << 24) + (((pp_uint32)b) << 16) + (((pp_uint32)r) << 8) + (((pp_uint32)g)); pp_uint32 rgb3 = (((pp_uint32)currentColor.r) << 24) + (((pp_uint32)g) << 16) + (((pp_uint32)b) << 8) + (((pp_uint32)r)); pp_int32 realLen = (rect.x2-rect.x1)*BPP; pp_int32 len = realLen/12; pp_int32 remainder = (((rect.x2-rect.x1)*BPP)%12) / 3; pp_uint8* buff = (pp_uint8*)buffer+(pitch*rect.y1+rect.x1*BPP); for (pp_int32 y = rect.y1; y < rect.y2; y++) { pp_uint32* ptr = reinterpret_cast(buff); pp_int32 i; for (i = 0; i < len; i++) { *ptr = rgb1; *(ptr+1) = rgb2; *(ptr+2) = rgb3; ptr+=3; } buff = reinterpret_cast(ptr); for (i = 0; i < remainder; i++) { *buff++ = (pp_uint8)b; *buff++ = (pp_uint8)g; *buff++ = (pp_uint8)r; } buff+=(pitch - realLen); } } void PPGraphics_BGR24::fill() { fill(currentClipRect); } void PPGraphics_BGR24::drawHLine(pp_int32 x1, pp_int32 x2, pp_int32 y) { pp_int32 lx = x1; pp_int32 rx = x2; if (x1 > x2) { pp_int32 h = x2; x2 = x1; x1 = h; } if (lx < currentClipRect.x1) lx = currentClipRect.x1; if (rx > currentClipRect.x2) rx = currentClipRect.x2; if (y < currentClipRect.y1) return; if (y >= currentClipRect.y2) return; pp_uint8* buff = (pp_uint8*)buffer+pitch*y+lx*BPP; pp_int32 len = ((rx-lx)*BPP)/12; pp_int32 remainder = (((rx-lx)*BPP)%12) / 3; pp_uint32 rgb1 = (((pp_uint32)currentColor.b) << 24) + (((pp_uint32)currentColor.r) << 16) + (((pp_uint32)currentColor.g) << 8) + (((pp_uint32)currentColor.b)); pp_uint32 rgb2 = (((pp_uint32)currentColor.g) << 24) + (((pp_uint32)currentColor.b) << 16) + (((pp_uint32)currentColor.r) << 8) + (((pp_uint32)currentColor.g)); pp_uint32 rgb3 = (((pp_uint32)currentColor.r) << 24) + (((pp_uint32)currentColor.g) << 16) + (((pp_uint32)currentColor.b) << 8) + (((pp_uint32)currentColor.r)); pp_uint32* ptr = reinterpret_cast(buff); pp_int32 i; for (i = 0; i < len; i++) { *ptr++ = rgb1; *ptr++ = rgb2; *ptr++ = rgb3; } buff = reinterpret_cast(ptr); for (i = 0; i < remainder; i++) { *buff++ = (pp_uint8)currentColor.b; *buff++ = (pp_uint8)currentColor.g; *buff++ = (pp_uint8)currentColor.r; } } void PPGraphics_BGR24::drawVLine(pp_int32 y1, pp_int32 y2, pp_int32 x) { pp_int32 ly = y1; pp_int32 ry = y2; if (y1 > y2) { pp_int32 h = y2; y2 = y1; y1 = h; } if (ly < currentClipRect.y1) ly = currentClipRect.y1; if (ry > currentClipRect.y2) ry = currentClipRect.y2; if (x < currentClipRect.x1) return; if (x >= currentClipRect.x2) return; pp_uint8* buff = (pp_uint8*)buffer+pitch*ly+x*BPP; pp_uint16 col16 = (pp_uint16)((currentColor.g << 8) + currentColor.b); for (pp_int32 y = ly; y < ry; y++) { *((pp_uint16*)buff) = col16; buff[2] = (pp_uint8)currentColor.r; buff+=pitch; } } void PPGraphics_BGR24::drawLine(pp_int32 x1, pp_int32 y1, pp_int32 x2, pp_int32 y2) { __PPGRAPHICSLINETEMPLATE } void PPGraphics_BGR24::drawAntialiasedLine(pp_int32 x1, pp_int32 y1, pp_int32 x2, pp_int32 y2) { __PPGRAPHICSAALINETEMPLATE } void PPGraphics_BGR24::blit(const pp_uint8* src, const PPPoint& p, const PPSize& size, pp_uint32 pitch, pp_uint32 bpp, pp_int32 intensity/* = 256*/) { pp_int32 w = size.width; pp_int32 h = size.height; pp_uint8* dst = (pp_uint8*)buffer+(this->pitch*p.y+p.x*BPP); const pp_uint32 bytesPerPixel = bpp; if (intensity == 256) { for (pp_int32 y = 0; y < h; y++) { for (pp_int32 x = 0; x < w; x++) { dst[2] = src[0]; dst[1] = src[1]; dst[0] = src[2]; dst+=BPP; src+=bytesPerPixel; } dst+=this->pitch - w*BPP; src+=pitch - w*bytesPerPixel; } } else { for (pp_int32 y = 0; y < h; y++) { for (pp_int32 x = 0; x < w; x++) { dst[2] = (src[0]*intensity)>>8; dst[1] = (src[1]*intensity)>>8; dst[0] = (src[2]*intensity)>>8; dst+=BPP; src+=bytesPerPixel; } dst+=this->pitch - w*BPP; src+=pitch - w*bytesPerPixel; } } } void PPGraphics_BGR24::drawChar(pp_uint8 chr, pp_int32 x, pp_int32 y, bool underlined) { if (currentFont == NULL) return; pp_int32 charWidth = (signed)currentFont->getCharWidth(); pp_int32 charHeight = (signed)currentFont->getCharHeight(); pp_int32 charDim = currentFont->charDim; if (x + (signed)charWidth < currentClipRect.x1 || x > currentClipRect.x2 || y + (signed)charHeight < currentClipRect.y1 || y > currentClipRect.y2) return; /*pp_uint8 r = (pp_uint8)currentColor.r; pp_uint8 g = (pp_uint8)currentColor.g; pp_uint8 b = (pp_uint8)currentColor.b; if (x>= currentClipRect.x1 && x + (signed)currentFont->charWidth < currentClipRect.x2 && y>= currentClipRect.y1 && y + (signed)currentFont->charHeight < currentClipRect.y2) { for (pp_uint32 i = 0; i < currentFont->charHeight; i++) { pp_uint8* buff = (pp_uint8*)buffer + (y+i)*pitch + x*3; for (pp_uint32 j = 0; j < currentFont->charWidth; j++) { if (currentFont->getPixelBit(chr, j,i)) { buff[0] = b; buff[1] = g; buff[2] = r; } buff+=3; } } } else { for (pp_uint32 i = 0; i < currentFont->charHeight; i++) for (pp_uint32 j = 0; j < currentFont->charWidth; j++) { if (y+(signed)i >= currentClipRect.y1 && y+(signed)i < currentClipRect.y2 && x+(signed)j >= currentClipRect.x1 && x+(signed)j < currentClipRect.x2 && currentFont->getPixelBit(chr, j,i)) { pp_uint8* buff = (pp_uint8*)buffer+((y+i)*pitch+(x+j)*3); buff[0] = b; buff[1] = g; buff[2] = r; } } }*/ pp_uint8 r = (pp_uint8)currentColor.r; pp_uint8 g = (pp_uint8)currentColor.g; pp_uint8 b = (pp_uint8)currentColor.b; Bitstream* bitstream = currentFont->bitstream; pp_uint8* fontbuffer = bitstream->buffer; pp_uint8* buff = (pp_uint8*)buffer + y*pitch + x*BPP; pp_uint32 cchrDim = chr*charDim; if (x>= currentClipRect.x1 && x + charWidth < currentClipRect.x2 && y>= currentClipRect.y1 && y + charHeight < currentClipRect.y2) { pp_uint32 yChr = cchrDim; for (pp_uint32 i = 0; i < (unsigned)charHeight; i++) { pp_uint32 xChr = yChr; for (pp_uint32 j = 0; j < (unsigned)charWidth; j++) { if ((fontbuffer[xChr>>3]>>(xChr&7)&1)) { buff[0] = b; buff[1] = g; buff[2] = r; } buff+=BPP; xChr++; } buff+=pitch-(charWidth*BPP); yChr+=charWidth; } } else { pp_uint32 yChr = cchrDim; for (pp_uint32 i = 0; i < (unsigned)charHeight; i++) { pp_uint32 xChr = yChr; for (pp_uint32 j = 0; j < (unsigned)charWidth; j++) { if (y+(signed)i >= currentClipRect.y1 && y+(signed)i < currentClipRect.y2 && x+(signed)j >= currentClipRect.x1 && x+(signed)j < currentClipRect.x2 && (fontbuffer[xChr>>3]>>(xChr&7)&1)) { pp_uint8* buff = (pp_uint8*)buffer+((y+i)*pitch+(x+j)*BPP); buff[0] = b; buff[1] = g; buff[2] = r; } xChr++; } yChr+=charWidth; } } if (underlined) drawHLine(x, x+charWidth, y+charHeight); } void PPGraphics_BGR24::drawString(const char* str, pp_int32 x, pp_int32 y, bool underlined/* = false*/) { if (currentFont == NULL) return; pp_int32 charWidth = (signed)currentFont->getCharWidth(); pp_int32 charHeight = (signed)currentFont->getCharHeight(); pp_int32 sx = x; while (*str) { switch (*str) { case '\xf4': setPixel(x+(charWidth>>1), y+(charHeight>>1)); break; case '\n': y+=charHeight; x=sx-charWidth; break; default: drawChar(*str, x, y, underlined); } x += charWidth; str++; } } void PPGraphics_BGR24::drawStringVertical(const char* str, pp_int32 x, pp_int32 y, bool underlined/* = false*/) { if (currentFont == NULL) return; pp_int32 charWidth = (signed)currentFont->getCharWidth(); pp_int32 charHeight = (signed)currentFont->getCharHeight(); while (*str) { switch (*str) { case '\xf4': setPixel(x+(charWidth>>1), y+(charHeight>>1)); break; default: drawChar(*str, x, y, underlined); } y += charHeight; str++; } } MilkyTracker-1.02.00/src/ppui/Graphics_BGR24_SLOW.cpp000066400000000000000000000216741324432207300220010ustar00rootroot00000000000000/* * ppui/Graphics_BGR24_SLOW.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "Graphics.h" #include "Font.h" #define BPP 3 PPGraphics_BGR24_SLOW::PPGraphics_BGR24_SLOW(pp_int32 w, pp_int32 h, pp_int32 p, void* buff) : PPGraphicsFrameBuffer(w, h, p, buff) { } void PPGraphics_BGR24_SLOW::setPixel(pp_int32 x, pp_int32 y) { if (y >= currentClipRect.y1 && y < currentClipRect.y2 && x >= currentClipRect.x1 && x < currentClipRect.x2) { pp_uint8* buff = (pp_uint8*)buffer+pitch*y+x*BPP; buff[0] = (pp_uint8)currentColor.b; buff[1] = (pp_uint8)currentColor.g; buff[2] = (pp_uint8)currentColor.r; } } void PPGraphics_BGR24_SLOW::setPixel(pp_int32 x, pp_int32 y, const PPColor& color) { if (y >= currentClipRect.y1 && y < currentClipRect.y2 && x >= currentClipRect.x1 && x < currentClipRect.x2) { pp_uint8* buff = (pp_uint8*)buffer+pitch*y+x*BPP; buff[0] = (pp_uint8)color.b; buff[1] = (pp_uint8)color.g; buff[2] = (pp_uint8)color.r; } } void PPGraphics_BGR24_SLOW::fill(PPRect rect) { if (rect.y1 < currentClipRect.y1) rect.y1 = currentClipRect.y1; if (rect.x1 < currentClipRect.x1) rect.x1 = currentClipRect.x1; if (rect.y2 > currentClipRect.y2) rect.y2 = currentClipRect.y2; if (rect.x2 > currentClipRect.x2) rect.x2 = currentClipRect.x2; pp_uint8 r = (pp_uint8)currentColor.r; pp_uint8 g = (pp_uint8)currentColor.g; pp_uint8 b = (pp_uint8)currentColor.b; pp_int32 len = (rect.x2-rect.x1); pp_uint8* buff = (pp_uint8*)buffer+(pitch*rect.y1+rect.x1*BPP); for (pp_int32 y = rect.y1; y < rect.y2; y++) { pp_uint8* ptr = buff; pp_int32 i; for (i = 0; i < len; i++) { *ptr = b; *(ptr+1) = g; *(ptr+2) = r; ptr+=3; } buff+=pitch; } } void PPGraphics_BGR24_SLOW::fill() { fill(currentClipRect); } void PPGraphics_BGR24_SLOW::drawHLine(pp_int32 x1, pp_int32 x2, pp_int32 y) { pp_int32 lx = x1; pp_int32 rx = x2; if (x1 > x2) { pp_int32 h = x2; x2 = x1; x1 = h; } if (lx < currentClipRect.x1) lx = currentClipRect.x1; if (rx > currentClipRect.x2) rx = currentClipRect.x2; if (y < currentClipRect.y1) return; if (y >= currentClipRect.y2) return; pp_uint8 r = (pp_uint8)currentColor.r; pp_uint8 g = (pp_uint8)currentColor.g; pp_uint8 b = (pp_uint8)currentColor.b; pp_int32 len = (rx-lx); pp_uint8* buff = (pp_uint8*)buffer+pitch*y+lx*BPP; pp_int32 i; for (i = 0; i < len; i++) { *buff = b; *(buff+1) = g; *(buff+2) = r; buff+=3; } } void PPGraphics_BGR24_SLOW::drawVLine(pp_int32 y1, pp_int32 y2, pp_int32 x) { pp_int32 ly = y1; pp_int32 ry = y2; if (y1 > y2) { pp_int32 h = y2; y2 = y1; y1 = h; } if (ly < currentClipRect.y1) ly = currentClipRect.y1; if (ry > currentClipRect.y2) ry = currentClipRect.y2; if (x < currentClipRect.x1) return; if (x >= currentClipRect.x2) return; pp_uint8* buff = (pp_uint8*)buffer+pitch*ly+x*BPP; pp_uint8 r = (pp_uint8)currentColor.r; pp_uint8 g = (pp_uint8)currentColor.g; pp_uint8 b = (pp_uint8)currentColor.b; for (pp_int32 y = ly; y < ry; y++) { *buff = b; *(buff+1) = g; *(buff+2) = r; buff+=pitch; } } void PPGraphics_BGR24_SLOW::drawLine(pp_int32 x1, pp_int32 y1, pp_int32 x2, pp_int32 y2) { __PPGRAPHICSLINETEMPLATE } void PPGraphics_BGR24_SLOW::drawAntialiasedLine(pp_int32 x1, pp_int32 y1, pp_int32 x2, pp_int32 y2) { __PPGRAPHICSAALINETEMPLATE } void PPGraphics_BGR24_SLOW::blit(const pp_uint8* src, const PPPoint& p, const PPSize& size, pp_uint32 pitch, pp_uint32 bpp, pp_int32 intensity/* = 256*/) { pp_int32 w = size.width; pp_int32 h = size.height; const pp_int32 bytesPerPixel = bpp; pp_uint8* dst = (pp_uint8*)buffer+(this->pitch*p.y+p.x*BPP); if (intensity == 256) { for (pp_int32 y = 0; y < h; y++) { for (pp_int32 x = 0; x < w; x++) { dst[2] = src[0]; dst[1] = src[1]; dst[0] = src[2]; dst+=BPP; src+=bytesPerPixel; } dst+=this->pitch - w*BPP; src+=pitch - w*bytesPerPixel; } } else { for (pp_int32 y = 0; y < h; y++) { for (pp_int32 x = 0; x < w; x++) { dst[2] = (src[0]*intensity)>>8; dst[1] = (src[1]*intensity)>>8; dst[0] = (src[2]*intensity)>>8; dst+=BPP; src+=bytesPerPixel; } dst+=this->pitch - w*BPP; src+=pitch - w*bytesPerPixel; } } } void PPGraphics_BGR24_SLOW::drawChar(pp_uint8 chr, pp_int32 x, pp_int32 y, bool underlined) { if (currentFont == NULL) return; pp_int32 charWidth = (signed)currentFont->getCharWidth(); pp_int32 charHeight = (signed)currentFont->getCharHeight(); pp_int32 charDim = currentFont->charDim; if (x + (signed)charWidth < currentClipRect.x1 || x > currentClipRect.x2 || y + (signed)charHeight < currentClipRect.y1 || y > currentClipRect.y2) return; /*pp_uint8 r = (pp_uint8)currentColor.r; pp_uint8 g = (pp_uint8)currentColor.g; pp_uint8 b = (pp_uint8)currentColor.b; if (x>= currentClipRect.x1 && x + (signed)currentFont->charWidth < currentClipRect.x2 && y>= currentClipRect.y1 && y + (signed)currentFont->charHeight < currentClipRect.y2) { for (pp_uint32 i = 0; i < currentFont->charHeight; i++) { pp_uint8* buff = (pp_uint8*)buffer + (y+i)*pitch + x*3; for (pp_uint32 j = 0; j < currentFont->charWidth; j++) { if (currentFont->getPixelBit(chr, j,i)) { buff[0] = b; buff[1] = g; buff[2] = r; } buff+=3; } } } else { for (pp_uint32 i = 0; i < currentFont->charHeight; i++) for (pp_uint32 j = 0; j < currentFont->charWidth; j++) { if (y+(signed)i >= currentClipRect.y1 && y+(signed)i < currentClipRect.y2 && x+(signed)j >= currentClipRect.x1 && x+(signed)j < currentClipRect.x2 && currentFont->getPixelBit(chr, j,i)) { pp_uint8* buff = (pp_uint8*)buffer+((y+i)*pitch+(x+j)*3); buff[0] = b; buff[1] = g; buff[2] = r; } } }*/ pp_uint8 r = (pp_uint8)currentColor.r; pp_uint8 g = (pp_uint8)currentColor.g; pp_uint8 b = (pp_uint8)currentColor.b; Bitstream* bitstream = currentFont->bitstream; pp_uint8* fontbuffer = bitstream->buffer; pp_uint8* buff = (pp_uint8*)buffer + y*pitch + x*BPP; pp_uint32 cchrDim = chr*charDim; if (x>= currentClipRect.x1 && x + charWidth < currentClipRect.x2 && y>= currentClipRect.y1 && y + charHeight < currentClipRect.y2) { pp_uint32 yChr = cchrDim; for (pp_uint32 i = 0; i < (unsigned)charHeight; i++) { pp_uint32 xChr = yChr; for (pp_uint32 j = 0; j < (unsigned)charWidth; j++) { if ((fontbuffer[xChr>>3]>>(xChr&7)&1)) { buff[0] = b; buff[1] = g; buff[2] = r; } buff+=BPP; xChr++; } buff+=pitch-(charWidth*BPP); yChr+=charWidth; } } else { pp_uint32 yChr = cchrDim; for (pp_uint32 i = 0; i < (unsigned)charHeight; i++) { pp_uint32 xChr = yChr; for (pp_uint32 j = 0; j < (unsigned)charWidth; j++) { if (y+(signed)i >= currentClipRect.y1 && y+(signed)i < currentClipRect.y2 && x+(signed)j >= currentClipRect.x1 && x+(signed)j < currentClipRect.x2 && (fontbuffer[xChr>>3]>>(xChr&7)&1)) { pp_uint8* buff = (pp_uint8*)buffer+((y+i)*pitch+(x+j)*BPP); buff[0] = b; buff[1] = g; buff[2] = r; } xChr++; } yChr+=charWidth; } } if (underlined) drawHLine(x, x+charWidth, y+charHeight); } void PPGraphics_BGR24_SLOW::drawString(const char* str, pp_int32 x, pp_int32 y, bool underlined/* = false*/) { if (currentFont == NULL) return; pp_int32 charWidth = (signed)currentFont->getCharWidth(); pp_int32 charHeight = (signed)currentFont->getCharHeight(); pp_int32 sx = x; while (*str) { switch (*str) { case '\xf4': setPixel(x+(charWidth>>1), y+(charHeight>>1)); break; case '\n': y+=charHeight; x=sx-charWidth; break; default: drawChar(*str, x, y, underlined); } x += charWidth; str++; } } void PPGraphics_BGR24_SLOW::drawStringVertical(const char* str, pp_int32 x, pp_int32 y, bool underlined/* = false*/) { if (currentFont == NULL) return; pp_int32 charWidth = (signed)currentFont->getCharWidth(); pp_int32 charHeight = (signed)currentFont->getCharHeight(); while (*str) { switch (*str) { case '\xf4': setPixel(x+(charWidth>>1), y+(charHeight>>1)); break; default: drawChar(*str, x, y, underlined); } y += charHeight; str++; } } MilkyTracker-1.02.00/src/ppui/Graphics_OGL.cpp000066400000000000000000000236751324432207300210010ustar00rootroot00000000000000/* * ppui/Graphics_OGL.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "Graphics.h" #include "Font.h" #ifdef __OPENGL__ #ifdef __APPLE__ #include #else #include #endif static void setupOrtho(pp_uint32 width, pp_uint32 height) { glViewport(0, 0, width, height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0, width, height, 0, -1.0, 1.0); glTranslatef(0.5f, 0.5f, 0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } PPGraphics_OGL::PPGraphics_OGL(pp_int32 w, pp_int32 h) : PPGraphicsAbstract(w, h), fontCacheEntry(NULL) { setupOrtho(w, h); glDrawBuffer(GL_FRONT_AND_BACK); glEnable(GL_SCISSOR_TEST); glClearColor(0.0, 0.0, 0.0, 0.0); glClear(GL_COLOR_BUFFER_BIT); glDisable(GL_POINT_SMOOTH); glDisable(GL_LINE_SMOOTH); glLineWidth(1.0f); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_BLEND); } void PPGraphics_OGL::setPixel(pp_int32 x, pp_int32 y) { glBegin(GL_POINTS); glColor3ub(currentColor.r, currentColor.g, currentColor.b); glVertex2i(x, y); glEnd(); } void PPGraphics_OGL::setPixel(pp_int32 x, pp_int32 y, const PPColor& color) { glBegin(GL_POINTS); glColor3ub(color.r, color.g, color.b); glVertex2i(x, y); glEnd(); } void PPGraphics_OGL::fill(PPRect rect) { glBegin(GL_QUADS); glColor3ub(currentColor.r, currentColor.g, currentColor.b); glVertex2i(rect.x1, rect.y1); //glColor3ub(currentColor.r, currentColor.g, currentColor.b); glVertex2i(rect.x2, rect.y1); //glColor3ub(currentColor.r, currentColor.g, currentColor.b); glVertex2i(rect.x2, rect.y2); //glColor3ub(currentColor.r, currentColor.g, currentColor.b); glVertex2i(rect.x1, rect.y2); glEnd(); } void PPGraphics_OGL::fill() { fill(currentClipRect); } void PPGraphics_OGL::drawHLine(pp_int32 x1, pp_int32 x2, pp_int32 y) { glBegin(GL_LINES); glColor3ub(currentColor.r, currentColor.g, currentColor.b); glVertex2i(x1, y); glVertex2i(x2, y); glEnd(); } void PPGraphics_OGL::drawVLine(pp_int32 y1, pp_int32 y2, pp_int32 x) { glBegin(GL_LINES); glColor3ub(currentColor.r, currentColor.g, currentColor.b); glVertex2i(x, y1); glVertex2i(x, y2); glEnd(); } void PPGraphics_OGL::drawLine(pp_int32 x1, pp_int32 y1, pp_int32 x2, pp_int32 y2) { glBegin(GL_LINES); glColor3ub(currentColor.r, currentColor.g, currentColor.b); glVertex2i(x1, y1); glVertex2i(x2, y2); glEnd(); } void PPGraphics_OGL::drawAntialiasedLine(pp_int32 x1, pp_int32 y1, pp_int32 x2, pp_int32 y2) { glEnable(GL_LINE_SMOOTH); glBegin(GL_LINES); glColor3ub(currentColor.r, currentColor.g, currentColor.b); glVertex2i(x1, y1); glVertex2i(x2, y2); glEnd(); glDisable(GL_LINE_SMOOTH); } void PPGraphics_OGL::blit(const pp_uint8* src, const PPPoint& p, const PPSize& size, pp_uint32 pitch, pp_uint32 bpp, pp_int32 intensity/* = 256*/) { } void PPGraphics_OGL::drawChar(pp_uint8 chr, pp_int32 x, pp_int32 y, bool underlined) { if (!fontCacheEntry || !currentFont) return; glRasterPos2d(x, y); pp_uint32 offset = (pp_uint32)chr * fontCacheEntry->newWidth * fontCacheEntry->newHeight; glColor3ub(currentColor.r, currentColor.g, currentColor.b); glBitmap(currentFont->getCharWidth(), currentFont->getCharHeight(), 0, currentFont->getCharHeight()-1, 0, 0, (GLubyte*)fontCacheEntry->oglBitmapData+offset); if (underlined) { glBegin(GL_LINES); glVertex2i(x, y+currentFont->getCharHeight()); glVertex2i(x+currentFont->getCharWidth(), y+currentFont->getCharHeight()); glEnd(); } } void PPGraphics_OGL::drawString(const char* str, pp_int32 x, pp_int32 y, bool underlined/* = false*/) { if (!fontCacheEntry || !currentFont) return; glColor3ub(currentColor.r, currentColor.g, currentColor.b); // pp_int32 charWidth = (signed)currentFont->getCharWidth(); // pp_int32 charHeight = (signed)currentFont->getCharHeight(); // const GLubyte* data = (const GLubyte*)fontCacheEntry->oglBitmapData; glRasterPos2d(x, y); // Testing - No underline or \n support // Note: Even when using display lists, the opengl renderer is desperately slow // (on my Nvidia at least), it's unusable at fullscreen resolutions. Perhaps // using point-sprites would be quicker.. - Chris //glPushAttrib(GL_LIST_BIT); glCallLists(strlen(str), GL_UNSIGNED_BYTE, (GLubyte *) str); //glPopAttrib(); /* pp_int32 sx = x; while (*str) { switch (*str) { case '\xf4': glBegin(GL_POINTS); glVertex2i(x+(charWidth>>1), y+(charHeight>>1)); glEnd(); break; case '\n': y+=charHeight; x=sx-charWidth; glRasterPos2d(x, y); break; default: { pp_uint32 offset = ((pp_uint8)*str) * size; //glRasterPos2d(x, y); glBitmap(charWidth, charHeight, 0, charHeight-1, charWidth, 0, data+offset); if (underlined) { glBegin(GL_LINES); glVertex2i(x, y+charHeight); glVertex2i(x+charWidth, y+charHeight); glEnd(); } } } x += charWidth; str++; }*/ } void PPGraphics_OGL::drawStringVertical(const char* str, pp_int32 x, pp_int32 y, bool underlined/* = false*/) { if (!fontCacheEntry || !currentFont) return; glColor3ub(currentColor.r, currentColor.g, currentColor.b); pp_int32 charWidth = (signed)currentFont->getCharWidth(); pp_int32 charHeight = (signed)currentFont->getCharHeight(); const GLubyte* data = (const GLubyte*)fontCacheEntry->oglBitmapData; const pp_uint32 size = fontCacheEntry->newWidth * fontCacheEntry->newHeight; while (*str) { switch (*str) { case '\xf4': glBegin(GL_POINTS); glVertex2i(x+(charWidth>>1), y+(charHeight>>1)); glEnd(); break; default: { pp_uint32 offset = ((pp_uint8)*str) * size; glRasterPos2d(x, y); glBitmap(charWidth, charHeight, 0, charHeight-1, 0, 0, data+offset); if (underlined) { glBegin(GL_LINES); glVertex2i(x, y+charHeight); glVertex2i(x+charWidth, y+charHeight); glEnd(); } } } y += charHeight; str++; } } void PPGraphics_OGL::fillVerticalShaded(PPRect r, const PPColor& colSrc, const PPColor& colDst, bool invertShading) { if (invertShading) { glBegin(GL_QUADS); glColor3ub(colDst.r, colDst.g, colDst.b); glVertex2i(r.x1, r.y1); //glColor3ub(colSrc.r, colSrc.g, colSrc.b); glVertex2i(r.x2, r.y1); glColor3ub(colSrc.r, colSrc.g, colSrc.b); glVertex2i(r.x2, r.y2); //glColor3ub(currentColor.r, currentColor.g, currentColor.b); glVertex2i(r.x1, r.y2); glEnd(); } else { glBegin(GL_QUADS); glColor3ub(colSrc.r, colSrc.g, colSrc.b); glVertex2i(r.x1, r.y1); //glColor3ub(colSrc.r, colSrc.g, colSrc.b); glVertex2i(r.x2, r.y1); glColor3ub(colDst.r, colDst.g, colDst.b); glVertex2i(r.x2, r.y2); //glColor3ub(currentColor.r, currentColor.g, currentColor.b); glVertex2i(r.x1, r.y2); glEnd(); } } void PPGraphics_OGL::validateRect() { PPGraphicsAbstract::validateRect(); glScissor(currentClipRect.x1, this->height-currentClipRect.y1-(currentClipRect.y2-currentClipRect.y1), currentClipRect.x2-currentClipRect.x1, currentClipRect.y2-currentClipRect.y1); } void PPGraphics_OGL::setFont(PPFont* font) { PPGraphicsAbstract::setFont(font); pp_int32 charWidth = (signed)font->getCharWidth(); pp_int32 charHeight = (signed)font->getCharHeight(); bool found = false; for (pp_int32 i = 0; i < sizeof(fontCache) / sizeof(FontCacheEntry); i++) { if (fontCache[i].font && fontCache[i].oldFontBits == font->fontBits) { found = true; fontCacheEntry = &fontCache[i]; glListBase(fontCacheEntry->listOffset); break; } } if (!found) { glPixelStorei(GL_UNPACK_ALIGNMENT, 1); glPixelStorei(GL_UNPACK_LSB_FIRST, true); glPixelStorei(GL_UNPACK_SKIP_PIXELS, 0); glPixelStorei(GL_UNPACK_ROW_LENGTH, ((font->getCharWidth()+7) / 8) * 8); pp_int32 slot = 0; for (pp_int32 i = 0; i < sizeof(fontCache) / sizeof(FontCacheEntry); i++) { if (!fontCache[i].font) { slot = i; break; } } fontCache[slot].createFromFont(font); fontCacheEntry = &fontCache[slot]; fontCacheEntry->listOffset = glGenLists(256); glListBase(fontCacheEntry->listOffset); const GLubyte* data = (const GLubyte*)fontCacheEntry->oglBitmapData; const pp_uint32 size = fontCacheEntry->newWidth * fontCacheEntry->newHeight; for(pp_uint32 i = 0; i < 256; i++) { glNewList(fontCacheEntry->listOffset + i, GL_COMPILE); glBitmap(charWidth, charHeight, 0, charHeight-1, charWidth, 0, data+i*size); glEndList(); } } } void PPGraphics_OGL::FontCacheEntry::createFromFont(PPFont* font) { this->font = font; this->oldFontBits = font->fontBits; newWidth = (font->getCharWidth() + 7) / 8; newHeight = font->getCharHeight(); pp_uint32 size = newWidth*newHeight*256; delete[] oglBitmapData; oglBitmapData = new pp_uint8[size]; memset(oglBitmapData, 0, size); Bitstream stream(oglBitmapData, size); pp_uint32 dst = 0; for (pp_uint32 i = 0; i < 256; i++) { for (pp_uint32 y = 0; y < font->getCharHeight(); y++) { if ((dst & 7) != 0) dst = ((dst+7)/8)*8; for (pp_uint32 x = 0; x < font->getCharWidth(); x++) { stream.write(dst, font->getPixelBit(i, x, font->getCharHeight() - 1 - y)); dst++; } } } } PPGraphics_OGL::FontCacheEntry::~FontCacheEntry() { delete[] oglBitmapData; } #endifMilkyTracker-1.02.00/src/ppui/Graphics_OGL.h000066400000000000000000000047321324432207300204370ustar00rootroot00000000000000/* * ppui/Graphics_OGL.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #ifndef __GRAPHICSOGL_H__ #define __GRAPHICSOGL_H__ #ifdef __APPLE__ #include #else #include #endif class PPGraphics_OGL : public PPGraphicsAbstract { public: PPGraphics_OGL(pp_int32 w, pp_int32 h); virtual void setPixel(pp_int32 x, pp_int32 y); virtual void setPixel(pp_int32 x, pp_int32 y, const PPColor& color); virtual void fill(PPRect r); virtual void fill(); virtual void drawHLine(pp_int32 x1, pp_int32 x2, pp_int32 y); virtual void drawVLine(pp_int32 y1, pp_int32 y2, pp_int32 x); virtual void drawLine(pp_int32 x1, pp_int32 y1, pp_int32 x2, pp_int32 y2); virtual void drawAntialiasedLine(pp_int32 x1, pp_int32 y1, pp_int32 x2, pp_int32 y2); virtual void blit(const pp_uint8* src, const PPPoint& p, const PPSize& size, pp_uint32 pitch, pp_uint32 bpp, pp_int32 intensity = 256); virtual void drawChar(pp_uint8 chr, pp_int32 x, pp_int32 y, bool underlined = false); virtual void drawString(const char* str, pp_int32 x, pp_int32 y, bool underlined = false); virtual void drawStringVertical(const char* str, pp_int32 x, pp_int32 y, bool underlined = false); virtual void fillVerticalShaded(PPRect r, const PPColor& colSrc, const PPColor& colDst, bool invertShading); virtual void setFont(PPFont* font); protected: virtual void validateRect(); private: struct FontCacheEntry { PPFont* font; pp_uint8* oldFontBits; pp_uint8* oglBitmapData; GLuint listOffset; pp_uint32 newWidth; pp_uint32 newHeight; FontCacheEntry() : font(NULL), oldFontBits(NULL), oglBitmapData(NULL), newWidth(0), newHeight(0) { } ~FontCacheEntry(); void createFromFont(PPFont* font); }; FontCacheEntry fontCache[4]; FontCacheEntry* fontCacheEntry; }; #endif MilkyTracker-1.02.00/src/ppui/KeyBindings.h000066400000000000000000000037461324432207300204100ustar00rootroot00000000000000/* * ppui/KeyBindings.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * KeyBindings.h * MilkyTracker * * Created by Peter Barth on Sat Mar 12 2005. * */ #ifndef KEYBINDINGS__H #define KEYBINDINGS__H #include "BasicTypes.h" template class PPKeyBindings { private: struct TKeyBinding { pp_uint16 keyCode; pp_uint32 keyModifier; Type handlerFunc; }; TKeyBinding bindings[256]; pp_uint32 currentBindingIndex; public: PPKeyBindings() : currentBindingIndex(0) { memset(bindings, 0, sizeof(bindings)); } void addBinding(pp_uint16 keyCode, pp_uint32 keyModifier, Type handlerFunc) { if (currentBindingIndex < sizeof(bindings)/sizeof(TKeyBinding)) { bindings[currentBindingIndex].keyCode = keyCode; bindings[currentBindingIndex].keyModifier = keyModifier; bindings[currentBindingIndex].handlerFunc = handlerFunc; currentBindingIndex++; } } bool getBinding(pp_uint16 keyCode, pp_uint32 keyModifier, Type& handlerFunc) const { pp_int32 i = 0; while (bindings[i].handlerFunc && i < (signed)currentBindingIndex) { if (bindings[i].keyCode == keyCode && (bindings[i].keyModifier == 0xFFFF || bindings[i].keyModifier == keyModifier)) { handlerFunc = bindings[i].handlerFunc; return true; } i++; } return false; } }; #endif MilkyTracker-1.02.00/src/ppui/KeyboardBindingHandler.cpp000066400000000000000000000034201324432207300230530ustar00rootroot00000000000000/* * ppui/KeyboardBindingHandler.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * KeyboardBindingHandler.cpp * MilkyTracker * * Created by Peter Barth on 29.04.05. * */ #include "KeyboardBindingHandler.h" bool KeyboardBindingHandler::processKeyEvents(PPEvent* event) { switch (event->getID()) { case eKeyDown: { pp_uint16 keyCode = *((pp_uint16*)event->getDataPtr()); switch (keyCode) { // store key modifiers case VK_ALT: keyModifier |= KeyModifierALT; return true; case VK_SHIFT: keyModifier |= KeyModifierSHIFT; return true; case VK_CONTROL: keyModifier |= KeyModifierCTRL; return true; } break; } case eKeyUp: { pp_uint16 keyCode = *((pp_uint16*)event->getDataPtr()); switch (keyCode) { // store key modifiers case VK_ALT: keyModifier &= ~KeyModifierALT; return true; case VK_SHIFT: keyModifier &= ~KeyModifierSHIFT; return true; case VK_CONTROL: keyModifier &= ~KeyModifierCTRL; return true; } break; } default: break; } return false; } MilkyTracker-1.02.00/src/ppui/KeyboardBindingHandler.h000066400000000000000000000024061324432207300225230ustar00rootroot00000000000000/* * ppui/KeyboardBindingHandler.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * KeyboardBindingHandler.h * MilkyTracker * * Created by Peter Barth on 29.04.05. * */ #ifndef KEYBOARDBINDINGHANDLER__H #define KEYBOARDBINDINGHANDLER__H #include "BasicTypes.h" #include "Event.h" class KeyboardBindingHandler { private: pp_uint32 keyModifier; public: KeyboardBindingHandler() : keyModifier(0) { } protected: bool processKeyEvents(PPEvent* event); void resetKeyModifier() { keyModifier = 0; } pp_uint32 getKeyModifier() const { return keyModifier; } }; #endif MilkyTracker-1.02.00/src/ppui/ListBox.cpp000066400000000000000000001130031324432207300201050ustar00rootroot00000000000000/* * ppui/ListBox.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "ListBox.h" #include "GraphicsAbstract.h" #include "Event.h" #include "Screen.h" #include "Font.h" #include "ScrollBar.h" #include "Button.h" #include "PPUIConfig.h" #include "Tools.h" #define SCROLLBARWIDTH SCROLLBUTTONSIZE #define BLINKINTERVAL 40 void PPListBox::initialize() { // create background button //pp_int32 w = size.width - (scrollable?SCROLLBARWIDTH-2:0)-2; //pp_int32 h = horizontalScrollbar? size.height - (scrollable?SCROLLBARWIDTH-2:0)-2 : size.height-2; pp_int32 w = size.width - 2; pp_int32 h = size.height - 2; backgroundButton = new PPButton(0, parentScreen, NULL, PPPoint(location.x+1, location.y+1), PPSize(w, h), border, false); backgroundButton->setColor(*backGroundButtonColor); backgroundButton->setInvertShading(true); vScrollbar = new PPScrollbar(0, parentScreen, this, PPPoint(location.x + size.width - SCROLLBARWIDTH, location.y), size.height, false); hScrollbar = new PPScrollbar(0, parentScreen, this, PPPoint(location.x, location.y + size.height - SCROLLBARWIDTH), size.width - SCROLLBARWIDTH, true); if (vScrollbar) vScrollbar->show(!autoHideVScroll); if (hScrollbar) hScrollbar->show(!autoHideHScroll); } PPListBox::PPListBox(pp_int32 id, PPScreen* parentScreen, EventListenerInterface* eventListener, const PPPoint& location, const PPSize& size, bool border/*= true*/, bool editable/*= false*/, bool scrollable/* = true*/, bool showSelectionAlways/*= false*/) : PPControl(id, parentScreen, eventListener, location, size), borderColor(&PPUIConfig::getInstance()->getColor(PPUIConfig::ColorListBoxBorder)), backGroundButtonColor(&PPUIConfig::getInstance()->getColor(PPUIConfig::ColorListBoxBackground)), // default textcolor textColor(&PPUIConfig::getInstance()->getColor(PPUIConfig::ColorStaticText)), autoHideVScroll(true), autoHideHScroll(true), selectionVisible(true), onlyShowIndexSelection(false), keepsFocus(true), showFocus(true), centerSelection(false), selectOnScroll(false), singleButtonClickEdit(false), allowDragSelection(true), rightButtonConfirm(false), hScrollbar(NULL), vScrollbar(NULL), colorQueryListener(NULL) { this->border = border; this->editable = editable; this->scrollable = scrollable; this->showSelectionAlways = showSelectionAlways; showIndex = false; indexBaseCount = 1; // "unlimited" editing maxEditSize = -1; //this->clickable = clickable; // create char vector with 16 initial entries items = new PPSimpleVector(16); // create background button initialize(); caughtControl = NULL; controlCaughtByLMouseButton = controlCaughtByRMouseButton = false; lMouseDown = rMouseDown = false; font = PPFont::getFont(PPFont::FONT_SYSTEM); startIndex = 0; startPos = 0; timerTicker = 0; selectionIndex = showSelectionAlways ? 0 : -1; columnSelectionStart = -1; adjustScrollbars(); editCopy = NULL; } PPListBox::~PPListBox() { delete vScrollbar; delete hScrollbar; delete backgroundButton; delete items; } void PPListBox::paint(PPGraphicsAbstract* g) { if (!isVisible()) return; ColorQueryListener* colorQueryListener = this->colorQueryListener; PPColor bColor = *borderColor, dColor = *borderColor; // adjust dark color dColor.scaleFixed(32768); // adjust bright color bColor.scaleFixed(87163); pp_int32 xOffset = 2; pp_uint32 maxDigits = PPTools::getHexNumDigits(items->size() - 1 + indexBaseCount); if (maxDigits == 0) maxDigits++; if (showIndex) xOffset += (maxDigits * font->getCharWidth() + 5); pp_int32 yOffset = 2; backgroundButton->paint(g); if (border) { drawBorder(g, *borderColor); } g->setRect(location.x, location.y, location.x + size.width-2, location.y + size.height-2); g->setFont(font); pp_int32 pos = location.y + yOffset; pp_int32 selectionWidth = onlyShowIndexSelection ? (maxDigits * font->getCharWidth() + 5) : (size.width - 2); g->setColor(*textColor); for (pp_int32 i = startIndex; i < items->size(); i++) { if (i < 0) continue; if (pos >= location.y + size.height) break; if (i == selectionIndex /*&& columnSelectionStart < 0*/ && selectionVisible) { PPRect currentRect = g->getRect(); PPRect rect = PPRect(location.x + 2, pos, location.x + selectionWidth, pos + getItemHeight()); if (rect.y1 < currentRect.y1) rect.y1 = currentRect.y1; if (rect.x1 < currentRect.x1) rect.x1 = currentRect.x1; if (rect.y2 > currentRect.y2) rect.y2 = currentRect.y2; if (rect.x2 > currentRect.x2) rect.x2 = currentRect.x2; g->setRect(rect); if (hasFocus || !showFocus) g->setColor(PPUIConfig::getInstance()->getColor(PPUIConfig::ColorSelection)); else { PPColor c = PPUIConfig::getInstance()->getColor(PPUIConfig::ColorGrayedOutSelection); c.scale(0.5f); g->setColor(c); } g->fill(); g->setColor(*textColor); g->setRect(currentRect); } if (showIndex) { char hexIndex[10]; PPTools::convertToHex(hexIndex, i + indexBaseCount, maxDigits); g->drawString(hexIndex, location.x + 2, pos); } PPRect currentRect = g->getRect(); g->setRect(location.x + xOffset, location.y + yOffset, location.x + size.width-2, location.y + size.height-2); if (columnSelectionStart>=0 && selectionIndex == i) { if ((timerTicker % BLINKINTERVAL) < (BLINKINTERVAL>>1)) { if (hasFocus) { PPColor c = PPUIConfig::getInstance()->getColor(PPUIConfig::ColorSelection); if (showSelectionAlways) c.scale(0.65f); g->setColor(c); } else g->setColor(PPUIConfig::getInstance()->getColor(PPUIConfig::ColorGrayedOutSelection)); for (pp_int32 j = 0; j < 8; j++) g->drawVLine(pos, pos + getItemHeight(), location.x + xOffset - ((startPos-columnSelectionStart)*font->getCharWidth()) + j); } g->setColor(*textColor); } g->setColor(colorQueryListener ? colorQueryListener->getColor(i, *this) : *textColor); g->drawString(*items->get(i), location.x + xOffset - (startPos*font->getCharWidth()), pos); g->setRect(currentRect); pos+=getItemHeight(); } g->setRect(location.x, location.y, location.x + size.width, location.y + size.height-1); if (showIndex) { g->setColor(bColor); g->drawVLine(location.y + 1, location.y + size.height - 1, location.x + xOffset - 3); g->setColor(*borderColor); g->drawVLine(location.y, location.y + size.height, location.x + xOffset - 2); g->setColor(dColor); g->drawVLine(location.y + 1, location.y + size.height - 1, location.x + xOffset - 1); } if (hScrollbar) hScrollbar->paint(g); if (vScrollbar) vScrollbar->paint(g); } PPListBox::SelectReturnCodes PPListBox::select(const PPPoint* p) { if (singleButtonClickEdit) return SelectReturnCodePlaceCursor; timerTicker = 0; PPPoint cp = *p; cp.x-=location.x; cp.y-=location.y; pp_int32 xOffset = 2; pp_uint32 maxDigits = PPTools::getHexNumDigits(items->size() - 1 + indexBaseCount); if (maxDigits == 0) maxDigits++; if (showIndex) xOffset += (maxDigits * font->getCharWidth() + 5); pp_int32 yOffset = 2; cp.x -= xOffset; cp.y -= yOffset; if (cp.y > visibleHeight - getItemHeight()) cp.y = visibleHeight - getItemHeight(); pp_int32 selectionIndex = (cp.y / getItemHeight()) + startIndex; if (selectionIndex < 0 || selectionIndex >= items->size()) selectionIndex = -1; if (showSelectionAlways && selectionIndex == -1) return SelectReturnCodeBreak; // selected line is different from current line so commit changes first // then select other line if (selectionIndex != this->selectionIndex) { commitChanges(); //this->selectionIndex = selectionIndex; if (selectionIndex < 0 || selectionIndex >= items->size()) selectionIndex = -1; if (selectionIndex != -1) { PPEvent e(ePreSelection, &selectionIndex, sizeof(selectionIndex)); eventListener->handleEvent(reinterpret_cast(this), &e); } this->selectionIndex = selectionIndex; if (selectionIndex != -1) { PPEvent e(eSelection, &selectionIndex, sizeof(selectionIndex)); eventListener->handleEvent(reinterpret_cast(this), &e); } columnSelectionStart = -1; if (centerSelection) assureCursorVisible(); } else if (columnSelectionStart > 0 && this->selectionIndex >= 0) { pp_int32 columnSelStart = cp.x / font->getCharWidth() + startPos; if (columnSelStart <= (signed)getItem(selectionIndex).length()) columnSelectionStart = columnSelStart; else columnSelectionStart = (signed)getItem(selectionIndex).length(); } parentScreen->paintControl(this); return SelectReturnCodeDefault; } pp_int32 PPListBox::dispatchEvent(PPEvent* event) { if (eventListener == NULL) return -1; //if (!visible) // return 0; switch (event->getID()) { case eTimer: { if (!isEditing()) break; timerTicker++; bool timerState = (timerTicker % BLINKINTERVAL) < (BLINKINTERVAL>>1); if (timerState != lastTimerState) { lastTimerState = timerState; parentScreen->paintControl(this); } break; } case eFocusGainedNoRepaint: { timerTicker = 0; hasFocus = true; break; } case eFocusGained: { timerTicker = 0; hasFocus = true; parentScreen->paintControl(this); break; } case eFocusLost: { commitChanges(); hasFocus = false; parentScreen->paintControl(this); break; } case eFocusLostNoRepaint: { commitChanges(); hasFocus = false; break; } case eMouseWheelMoved: { TMouseWheelEventParams* params = (TMouseWheelEventParams*)event->getDataPtr(); // Vertical scrolling takes priority over horizontal scrolling and is mutually // exclusive from horizontal scrolling. if (vScrollbar && params->deltaY) { PPEvent e = params->deltaY < 0 ? PPEvent(eBarScrollDown) : PPEvent(eBarScrollUp); handleEvent(reinterpret_cast(vScrollbar), &e); } else if (hScrollbar && params->deltaX) { PPEvent e = params->deltaX > 0 ? PPEvent(eBarScrollDown) : PPEvent(eBarScrollUp); handleEvent(reinterpret_cast(hScrollbar), &e); } event->cancel(); break; } case eRMouseDown: { PPPoint* p = (PPPoint*)event->getDataPtr(); rMouseDown = true; // Clicked on horizontal scrollbar -> route event to scrollbar and catch scrollbar control if (hScrollbar && hScrollbar->isVisible() && hScrollbar->hit(*p)) { if (controlCaughtByLMouseButton) break; caughtControl = hScrollbar; caughtControl->dispatchEvent(event); controlCaughtByRMouseButton = true; } // Clicked on vertical scrollbar -> route event to scrollbar and catch scrollbar control else if (vScrollbar && vScrollbar->isVisible() && vScrollbar->hit(*p)) { if (controlCaughtByLMouseButton) break; caughtControl = vScrollbar; caughtControl->dispatchEvent(event); controlCaughtByRMouseButton = true; } else if (rightButtonConfirm) { switch (select(p)) { case SelectReturnCodeBreak: return 0; case SelectReturnCodePlaceCursor: goto placeCursor; case SelectReturnCodeDefault: break; } } break; } // implement some FT2 list box functionality // in FT2 you could click on a row and drag down, the while dragging // the list box would let you select other single rows case eRMouseRepeat: case eRMouseDrag: if (!rMouseDown) break; goto dragorautoscroll; case eLMouseRepeat: case eLMouseDrag: { if (!lMouseDown) break; dragorautoscroll: if (caughtControl == NULL) { PPPoint* p = (PPPoint*)event->getDataPtr(); PPPoint cp = *p; // check if we hit the items area: // below area => scroll up if (p->y < getVisibleRect().y1) { PPEvent e(eBarScrollUp); handleEvent(reinterpret_cast(vScrollbar), &e); // and limit the hit point to the start of the area cp.y = getVisibleRect().y1; } // above area => scroll down else if (p->y > getVisibleRect().y2) { PPEvent e(eBarScrollDown); handleEvent(reinterpret_cast(vScrollbar), &e); // and limit the hit point to the end of the area cp.y = getVisibleRect().y2 - getItemHeight(); } // handle selection by click point switch (select(&cp)) { case SelectReturnCodeBreak: return 0; case SelectReturnCodePlaceCursor: goto placeCursor; case SelectReturnCodeDefault: break; } } else caughtControl->dispatchEvent(event); break; } case eLMouseDown: { PPPoint* p = (PPPoint*)event->getDataPtr(); lMouseDown = true; // Clicked on horizontal scrollbar -> route event to scrollbar and catch scrollbar control if (hScrollbar && hScrollbar->isVisible() && hScrollbar->hit(*p)) { if (controlCaughtByRMouseButton) break; caughtControl = hScrollbar; caughtControl->dispatchEvent(event); controlCaughtByLMouseButton = true; } // Clicked on vertical scrollbar -> route event to scrollbar and catch scrollbar control else if (vScrollbar && vScrollbar->isVisible() && vScrollbar->hit(*p)) { if (controlCaughtByRMouseButton) break; caughtControl = vScrollbar; caughtControl->dispatchEvent(event); controlCaughtByLMouseButton = true; } // Clicked on text -> select text else { switch (select(p)) { case SelectReturnCodeBreak: return 0; case SelectReturnCodePlaceCursor: goto placeCursor; case SelectReturnCodeDefault: break; } } break; } case eRMouseUp: controlCaughtByRMouseButton = false; if (caughtControl && !controlCaughtByLMouseButton && !controlCaughtByRMouseButton) { caughtControl->dispatchEvent(event); caughtControl = NULL; break; } if (rMouseDown) rMouseDown = false; else break; case eLMouseDoubleClick: { placeCursor: timerTicker = 0; PPPoint cp = *((PPPoint*)event->getDataPtr()); cp.x-=location.x; cp.y-=location.y; pp_int32 xOffset = 2; pp_uint32 maxDigits = PPTools::getHexNumDigits(items->size() - 1 + indexBaseCount); if (maxDigits == 0) maxDigits++; if (showIndex) xOffset += (maxDigits * font->getCharWidth() + 5); pp_int32 yOffset = 2; cp.x-=xOffset; cp.y-=yOffset; bool b = (cp.x >= 0 && cp.y >= 0 && cp.x <= visibleWidth && cp.y <= visibleHeight); if (!editable && b) { pp_int32 selectionIndex = (cp.y / getItemHeight()) + startIndex; if (caughtControl == NULL && selectionIndex >= 0 && selectionIndex < items->size()) { PPEvent e(eConfirmed, &selectionIndex, sizeof(selectionIndex)); eventListener->handleEvent(reinterpret_cast(this), &e); } break; } if (b) { pp_int32 selectionIndex = (cp.y / getItemHeight()) + startIndex; if (selectionIndex < 0 || selectionIndex >= items->size()) { if (!showSelectionAlways) this->selectionIndex = -1; } else if (this->selectionIndex != selectionIndex || columnSelectionStart < 0) { // selected line is different from current line so commit changes first // then select other line commitChanges(); if (selectionIndex != -1) { PPEvent e(ePreSelection, &selectionIndex, sizeof(selectionIndex)); eventListener->handleEvent(reinterpret_cast(this), &e); } this->selectionIndex = selectionIndex; if (selectionIndex != -1) { PPEvent e(eSelection, &selectionIndex, sizeof(selectionIndex)); eventListener->handleEvent(reinterpret_cast(this), &e); } pp_int32 columnSelStart = cp.x / font->getCharWidth() + startPos; if (columnSelStart <= (signed)getItem(selectionIndex).length()) columnSelectionStart = columnSelStart; else columnSelectionStart = (signed)getItem(selectionIndex).length(); if (editCopy) delete editCopy; editCopy = new PPString(getItem(selectionIndex)); } else if (this->selectionIndex == selectionIndex && columnSelectionStart >= 0) { pp_int32 columnSelStart = cp.x / font->getCharWidth() + startPos; if (columnSelStart <= (signed)getItem(selectionIndex).length()) columnSelectionStart = columnSelStart; else columnSelectionStart = (signed)getItem(selectionIndex).length(); } parentScreen->paintControl(this); } break; } case eLMouseUp: controlCaughtByLMouseButton = false; lMouseDown = false; if (caughtControl == NULL) break; if (!controlCaughtByLMouseButton && !controlCaughtByRMouseButton) { caughtControl->dispatchEvent(event); caughtControl = NULL; break; } break; case eKeyChar: { if (caughtControl) break; if (!isEditing()) break; if (selectionIndex < 0 || selectionIndex >= items->size()/* || columnSelectionStart < 0*/) break; pp_uint16 keyCode = *((pp_uint16*)event->getDataPtr()); if (selectionIndex >= 0 && columnSelectionStart > (signed)getItem(selectionIndex).length()) columnSelectionStart = (signed)getItem(selectionIndex).length(); assureCursorVisible(); switch (keyCode) { default: if ((maxEditSize > -1) && ((signed)items->get(selectionIndex)->length() >= maxEditSize)) break; if (columnSelectionStart < 0 || selectionIndex < 0) break; items->get(selectionIndex)->insertAt(columnSelectionStart,(char)keyCode); columnSelectionStart++; break; } if (selectionIndex >= 0 && columnSelectionStart > (signed)getItem(selectionIndex).length()) columnSelectionStart = (signed)getItem(selectionIndex).length(); assureCursorVisible(); adjustScrollbars(); adjustScrollbarPositions(); parentScreen->paintControl(this); break; } case eKeyDown: { if (caughtControl) break; if (selectionIndex < 0 || selectionIndex >= items->size()/* || columnSelectionStart < 0*/) break; pp_uint16 keyCode = *((pp_uint16*)event->getDataPtr()); if (selectionIndex >= 0 && columnSelectionStart > (signed)getItem(selectionIndex).length()) columnSelectionStart = (signed)getItem(selectionIndex).length(); timerTicker = 0; switch (keyCode) { case VK_DELETE: if (columnSelectionStart < 0 || selectionIndex < 0) goto skiprefresh; assureCursorVisible(); items->get(selectionIndex)->deleteAt(columnSelectionStart, 1); break; case VK_BACK: if (columnSelectionStart < 0 || selectionIndex < 0) goto skiprefresh; if (columnSelectionStart) { assureCursorVisible(); columnSelectionStart--; items->get(selectionIndex)->deleteAt(columnSelectionStart, 1); } break; case VK_ESCAPE: if (!editable) goto skiprefresh; // discard changes assureCursorVisible(); discardChanges(); break; case VK_RETURN: if (!editable) goto skiprefresh; // commit changes assureCursorVisible(); commitChanges(); break; //case VK_ESCAPE: // selectionIndex = -1; // columnSelectionStart = 0; // break; case VK_LEFT: assureCursorVisible(); // Not editing, try to scroll left // might be handy on pocketpcs with very tight listboxes if (columnSelectionStart < 0) { PPEvent e(eBarScrollUp); handleEvent(reinterpret_cast(hScrollbar), &e); break; } if (columnSelectionStart) columnSelectionStart--; break; case VK_RIGHT: assureCursorVisible(); // Not editing, try to scroll right // might be handy on pocketpcs with very tight listboxes if (columnSelectionStart < 0) { PPEvent e(eBarScrollDown); handleEvent(reinterpret_cast(hScrollbar), &e); break; } if (columnSelectionStart < (signed)getItem(selectionIndex).length()) columnSelectionStart++; break; case VK_UP: assureCursorVisible(); if (columnSelectionStart >= 0) break; if (selectionIndex) { pp_int32 newSelectionIndex = selectionIndex-1; PPEvent ePre(ePreSelection, &newSelectionIndex, sizeof(newSelectionIndex)); eventListener->handleEvent(reinterpret_cast(this), &ePre); selectionIndex = newSelectionIndex; PPEvent e(eSelection, &selectionIndex, sizeof(selectionIndex)); eventListener->handleEvent(reinterpret_cast(this), &e); } break; case VK_DOWN: assureCursorVisible(); if (columnSelectionStart >= 0) break; if (selectionIndex < items->size() - 1) { pp_int32 newSelectionIndex = selectionIndex+1; PPEvent ePre(ePreSelection, &newSelectionIndex, sizeof(newSelectionIndex)); eventListener->handleEvent(reinterpret_cast(this), &ePre); selectionIndex = newSelectionIndex; PPEvent e(eSelection, &selectionIndex, sizeof(selectionIndex)); eventListener->handleEvent(reinterpret_cast(this), &e); } break; case VK_NEXT: { assureCursorVisible(); pp_int32 lastSelectionIndex = selectionIndex; pp_int32 newSelectionIndex = selectionIndex; pp_int32 visibleItems = getNumVisibleItems(); if (newSelectionIndex + visibleItems >= items->size() - 1) { newSelectionIndex = items->size() - 1; startIndex = newSelectionIndex - visibleItems; } else { newSelectionIndex+=visibleItems; if (newSelectionIndex > items->size() - 1) newSelectionIndex = items->size() - 1; if (newSelectionIndex != lastSelectionIndex) { startIndex = newSelectionIndex; if (startIndex + visibleItems > items->size()) { startIndex-=(startIndex + visibleItems)-(items->size()); if (startIndex < 0) startIndex = 0; newSelectionIndex = startIndex; } } } if (newSelectionIndex != lastSelectionIndex) { PPEvent ePre(ePreSelection, &newSelectionIndex, sizeof(newSelectionIndex)); eventListener->handleEvent(reinterpret_cast(this), &ePre); this->selectionIndex = newSelectionIndex; PPEvent e(eSelection, &selectionIndex, sizeof(selectionIndex)); eventListener->handleEvent(reinterpret_cast(this), &e); } break; } case VK_PRIOR: { assureCursorVisible(); pp_int32 lastSelectionIndex = selectionIndex; pp_int32 newSelectionIndex = selectionIndex; pp_int32 visibleItems = getNumVisibleItems(); newSelectionIndex-=visibleItems; if (newSelectionIndex < 0) newSelectionIndex = 0; if (newSelectionIndex != lastSelectionIndex) { PPEvent ePre(ePreSelection, &newSelectionIndex, sizeof(newSelectionIndex)); eventListener->handleEvent(reinterpret_cast(this), &ePre); this->selectionIndex = newSelectionIndex; PPEvent e(eSelection, &selectionIndex, sizeof(selectionIndex)); eventListener->handleEvent(reinterpret_cast(this), &e); } break; } default: goto skiprefresh; } if (selectionIndex >= 0 && columnSelectionStart > (signed)getItem(selectionIndex).length()) columnSelectionStart = (signed)getItem(selectionIndex).length(); assureCursorVisible(); adjustScrollbars(); adjustScrollbarPositions(); parentScreen->paintControl(this); skiprefresh: break; } //case eLMouseDrag: default: if (caughtControl == NULL) break; caughtControl->dispatchEvent(event); break; } return 0; } pp_int32 PPListBox::handleEvent(PPObject* sender, PPEvent* event) { pp_int32 lastSelectionIndex = selectionIndex; // Vertical scrollbar, scroll down if (sender == reinterpret_cast(vScrollbar) && vScrollbar && vScrollbar->isVisible() && event->getID() == eBarScrollDown) { if (selectOnScroll) { pp_int32 newSelectionIndex = selectionIndex; if (newSelectionIndex < items->size()-1) { newSelectionIndex++; } if (newSelectionIndex != lastSelectionIndex) { PPEvent ePre(ePreSelection, &newSelectionIndex, sizeof(newSelectionIndex)); eventListener->handleEvent(reinterpret_cast(this), &ePre); this->selectionIndex = newSelectionIndex; PPEvent e(eSelection, &selectionIndex, sizeof(selectionIndex)); eventListener->handleEvent(reinterpret_cast(this), &e); } assureCursorVisible(); } else { pp_int32 visibleItems = getNumVisibleItems(); if (startIndex + visibleItems < items->size()) startIndex++; float v = (float)(items->size() - visibleItems); vScrollbar->setBarPosition((pp_int32)(startIndex*(65536.0f/v))); } } // Vertical scrollbar, scroll up else if (sender == reinterpret_cast(vScrollbar) && vScrollbar && vScrollbar->isVisible() && event->getID() == eBarScrollUp) { if (selectOnScroll) { pp_int32 newSelectionIndex = selectionIndex; if (newSelectionIndex > 0) { newSelectionIndex--; } if (newSelectionIndex != lastSelectionIndex) { PPEvent ePre(ePreSelection, &newSelectionIndex, sizeof(newSelectionIndex)); eventListener->handleEvent(reinterpret_cast(this), &ePre); this->selectionIndex = newSelectionIndex; PPEvent e(eSelection, &selectionIndex, sizeof(selectionIndex)); eventListener->handleEvent(reinterpret_cast(this), &e); } assureCursorVisible(); } else { if (startIndex) startIndex--; pp_int32 visibleItems = getNumVisibleItems(); float v = (float)(items->size() - visibleItems); vScrollbar->setBarPosition((pp_int32)(startIndex*(65536.0f/v))); } } // Vertical scrollbar, position changed else if (sender == reinterpret_cast(vScrollbar) && vScrollbar && vScrollbar->isVisible() && event->getID() == eBarPosChanged) { float pos = vScrollbar->getBarPosition()/65536.0f; pp_int32 visibleItems = getNumVisibleItems(); float v = (float)(items->size() - visibleItems); startIndex = (pp_uint32)(v*pos); } // Horizontal scrollbar, scroll up (=left) else if (sender == reinterpret_cast(hScrollbar) && hScrollbar && hScrollbar->isVisible() && event->getID() == eBarScrollUp) { if (startPos) startPos--; pp_int32 visibleItems = (visibleWidth) / font->getCharWidth(); float v = (float)(getMaxWidth() - visibleItems); hScrollbar->setBarPosition((pp_int32)(startPos*(65536.0f/v))); } // Horizontal scrollbar, scroll down (=right) else if (sender == reinterpret_cast(hScrollbar) && hScrollbar && hScrollbar->isVisible() && event->getID() == eBarScrollDown) { pp_int32 visibleItems = (visibleWidth) / font->getCharWidth(); if (startPos + visibleItems < (signed)getMaxWidth()) startPos++; float v = (float)(getMaxWidth() - visibleItems); hScrollbar->setBarPosition((pp_int32)(startPos*(65536.0f/v))); } // Horizontal scrollbar, position changed else if (sender == reinterpret_cast(hScrollbar) && hScrollbar && hScrollbar->isVisible() && event->getID() == eBarPosChanged) { float pos = hScrollbar->getBarPosition()/65536.0f; pp_int32 visibleItems = (visibleWidth) / font->getCharWidth(); float v = (float)(getMaxWidth() - visibleItems); startPos = (pp_uint32)(v*pos); } parentScreen->paintControl(this); return 0; } void PPListBox::setSize(const PPSize& size) { PPControl::setSize(size); delete backgroundButton; if (vScrollbar) delete vScrollbar; if (hScrollbar) delete hScrollbar; initialize(); adjustScrollbars(); assureCursorVisible(); } void PPListBox::setLocation(const PPPoint& p) { PPControl::setLocation(p); delete backgroundButton; if (vScrollbar) delete vScrollbar; if (hScrollbar) delete hScrollbar; initialize(); adjustScrollbars(); assureCursorVisible(); } void PPListBox::addItem(const PPString& item) { items->add(new PPString(item)); adjustScrollbars(); } const PPString& PPListBox::getItem(pp_int32 index) const { return *items->get(index); } void PPListBox::updateItem(pp_int32 index, const PPString& item) { items->replace(index, new PPString(item)); } void PPListBox::clear() { items->clear(); startIndex = 0; startPos = 0; selectionIndex = showSelectionAlways ? 0 : -1; columnSelectionStart = -1; adjustScrollbars(); if (vScrollbar) vScrollbar->setBarPosition(0); if (hScrollbar) hScrollbar->setBarPosition(0); } void PPListBox::setSelectedIndex(pp_int32 index, bool adjustStartIndex/* = true*/, bool assureCursor/* = true*/) { selectionIndex = index < items->size() ? index : items->size()-1; if (adjustStartIndex) startIndex = selectionIndex; if (assureCursor) assureCursorVisible(); } void PPListBox::setSelectedIndexByItem(const PPString& item, bool adjustStartIndex/* = true*/) { for (pp_int32 i = 0; i < items->size(); i++) { if (items->get(i)->compareTo(item) == 0) { setSelectedIndex(i, adjustStartIndex); break; } } } void PPListBox::placeCursorAtEnd() { if (selectionIndex >= 0 && selectionIndex < items->size()) columnSelectionStart = getItem(selectionIndex).length(); else if (items->size()) { selectionIndex = 0; columnSelectionStart = getItem(0).length(); if (editCopy) delete editCopy; editCopy = new PPString(getItem(selectionIndex)); } } void PPListBox::placeCursorAtStart() { if (items->size()) { selectionIndex = 0; columnSelectionStart = 0; if (editCopy) delete editCopy; editCopy = new PPString(getItem(selectionIndex)); } } void PPListBox::setShowIndex(bool showIndex) { this->showIndex = showIndex; calcVisible(); } void PPListBox::calcVisible() { // calculate visible area if (hScrollbar->isVisible()) visibleHeight = size.height - (scrollable?SCROLLBARWIDTH:0); else visibleHeight = size.height; if (vScrollbar->isVisible()) visibleWidth = size.width - (scrollable?SCROLLBARWIDTH:0); else visibleWidth = size.width; if (border) { if (!hScrollbar->isVisible()) visibleHeight--; if (!vScrollbar->isVisible()) visibleWidth--; } if (showIndex) { pp_uint32 maxDigits = PPTools::getHexNumDigits(items->size() - 1 + indexBaseCount); if (maxDigits == 0) maxDigits++; visibleWidth -= (maxDigits * font->getCharWidth() + 5); } } void PPListBox::adjustScrollbarPositions() { // adjust scrollbar positions if (vScrollbar) { pp_int32 visibleItems = getNumVisibleItems(); float v = (float)(items->size() - visibleItems); vScrollbar->setBarPosition((pp_int32)(startIndex*(65536.0f/v))); } if (hScrollbar) { pp_int32 visibleItems = (visibleWidth) / font->getCharWidth(); float v = (float)(getMaxWidth() - visibleItems); hScrollbar->setBarPosition((pp_int32)(startPos*(65536.0f/v))); } } void PPListBox::adjustScrollbars() { if (!scrollable) { calcVisible(); return; } vScrollbar->show(!autoHideVScroll); hScrollbar->show(!autoHideHScroll); calcVisible(); if (items->size() == 0/* || getMaxWidth()*font->getCharWidth() == 0*/) { return; } const pp_int32 maxWidth = font->getCharWidth() * getMaxWidth(); // number of items fit into the current visible area (y direction) if (items->size() <= getNumVisibleItems()) { // if they exceed the current visible area in x direction // we need to activate the horizontal scroll bar if (maxWidth > getVisibleRect().width()) { hScrollbar->show(true); calcVisible(); // now if they no longer fit the visible area in y direction // we also need to activate the vertical scroll bar if (items->size() > getNumVisibleItems()) { vScrollbar->show(true); calcVisible(); } } } else { // they don't fit, we need the vertical scroll bar for sure vScrollbar->show(true); calcVisible(); // if the maximum x width exceeds the number of characters visible // we will also need to activate the horizontal scroll bar if (maxWidth > getVisibleRect().width()) { hScrollbar->show(true); calcVisible(); } } // adjust size of vertical scroll bar if (vScrollbar->isVisible()) { pp_int32 height = size.height; vScrollbar->setSize(height); } if (hScrollbar->isVisible()) { pp_int32 width = size.width - (vScrollbar->isVisible() ? SCROLLBARWIDTH : 0); hScrollbar->setSize(width); } float s = 1.0f; if (vScrollbar) { s = (float)(visibleHeight) / (float)(items->size()*(getItemHeight())); vScrollbar->setBarSize((pp_int32)(s*65536.0f), false); } if (hScrollbar) { s = (float)(visibleWidth) / (float)(getMaxWidth()*(font->getCharWidth())); hScrollbar->setBarSize((pp_int32)(s*65536.0f), false); } } void PPListBox::assureCursorVisible() { if (selectionIndex >= 0) { pp_int32 visiblePixels = (visibleHeight - getItemHeight()) - 1; pp_int32 visibleItems = visiblePixels / getItemHeight(); if (!centerSelection) { if ((startIndex <= selectionIndex) && ((selectionIndex - startIndex) * getItemHeight()) < visiblePixels) { } else if (selectionIndex > startIndex && selectionIndex + visibleItems < items->size()) { //startIndex = cursorPositionRow; startIndex+=(selectionIndex-(startIndex+visibleItems)); } else if (selectionIndex < startIndex && selectionIndex + visibleItems < items->size()) { //startIndex = cursorPositionRow; startIndex+=(selectionIndex-startIndex); } else { startIndex = selectionIndex - visibleItems; if (startIndex < 0) startIndex = 0; } } else { pp_int32 mid = (visibleHeight/2) / getItemHeight(); startIndex = selectionIndex - mid; if (startIndex < 0) startIndex = 0; } } if (columnSelectionStart >= 0) { pp_int32 visibleChars = (visibleWidth - font->getCharWidth()) / font->getCharWidth(); if ((startPos < columnSelectionStart) && ((columnSelectionStart - startPos) * font->getCharWidth()) < (visibleWidth - font->getCharWidth())) { } else if (columnSelectionStart + (signed)visibleChars < (signed)getMaxWidth()) startPos = columnSelectionStart; else { startPos = columnSelectionStart - visibleChars; if (startPos < 0) startPos = 0; } } adjustScrollbarPositions(); } void PPListBox::commitChanges() { if (selectionIndex < 0) return; if (selectionIndex >= items->size()) return; if (isEditing()) { PPString* str = items->get(selectionIndex); if (editCopy && str->compareTo(*editCopy) != 0) { PPEvent e(eValueChanged, &str, sizeof(PPString*)); eventListener->handleEvent(reinterpret_cast(this), &e); } if (!showSelectionAlways) selectionIndex = -1; columnSelectionStart = -1; if (editCopy) { delete editCopy; editCopy = NULL; } startPos = 0; // Reset horizontal scrollbar } } void PPListBox::discardChanges() { columnSelectionStart = -1; if (editCopy) { items->get(selectionIndex)->replace(*editCopy); delete editCopy; editCopy = NULL; } } // hack void PPListBox::saveState() { lastStartIndex = startIndex; lastStartPos = startPos; lastSelectionIndex = selectionIndex; hadVScrollbar = (vScrollbar != NULL && vScrollbar->isVisible()); hadHScrollbar = (hScrollbar != NULL && hScrollbar->isVisible()); } void PPListBox::restoreState(bool assureCursor/* = true*/) { if (lastStartIndex < items->size()) startIndex = lastStartIndex; if (startPos < (signed)getMaxWidth()) startPos = lastStartPos; if (lastSelectionIndex < items->size()) selectionIndex = lastSelectionIndex; else selectionIndex = items->size()-1; if (selectionIndex < 0 && showSelectionAlways && items->size()) selectionIndex = 0; // adjust scrollbar positions if (vScrollbar) { pp_int32 visibleItems = getNumVisibleItems(); float v = (float)(items->size() - visibleItems); vScrollbar->setBarPosition((pp_int32)(startIndex*(65536.0f/v))); // if scrollbar isn't visible, reset vertical position to start if (!vScrollbar->isVisible()) startIndex = 0; } else if (hadVScrollbar) { // if scrollbar isn't visible, reset vertical position to start startIndex = 0; } if (hScrollbar) { pp_int32 visibleItems = (visibleWidth) / font->getCharWidth(); float v = (float)(getMaxWidth() - visibleItems); hScrollbar->setBarPosition((pp_int32)(startPos*(65536.0f/v))); // if scrollbar isn't visible, reset horizontal position to start if (!hScrollbar->isVisible()) startPos = 0; } else if (hadHScrollbar) { // if scrollbar isn't visible, reset horizontal position to start startPos = 0; } if (assureCursor) assureCursorVisible(); } PPRect PPListBox::getVisibleRect() const { PPRect rect; rect.x1 = rect.x2 = location.x; rect.y1 = rect.y2 = location.y; rect.x2+=visibleWidth; rect.y2+=visibleHeight; return rect; } pp_int32 PPListBox::getItemHeight() const { return font->getCharHeight(); } pp_int32 PPListBox::getNumVisibleItems() const { return visibleHeight / getItemHeight(); //return (visibleHeight - (hScrollbar->isVisible() ? 4 : 0)) / getItemHeight(); } pp_uint32 PPListBox::getMaxWidth() const { pp_uint32 maxWidth = 0; for (pp_int32 i = 0; i < items->size(); i++) { pp_uint32 len = items->get(i)->length(); if (len > maxWidth) maxWidth = len; } return maxWidth+(editable ? 1 : 0); } MilkyTracker-1.02.00/src/ppui/ListBox.h000066400000000000000000000134001324432207300175520ustar00rootroot00000000000000/* * ppui/ListBox.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ ///////////////////////////////////////////////////////////////// // // PPListBox control class // ///////////////////////////////////////////////////////////////// #ifndef LISTBOX__H #define LISTBOX__H #include "BasicTypes.h" #include "Control.h" #include "Event.h" #include "SimpleVector.h" // Forwards class PPGraphicsAbstract; class PPScrollbar; class PPFont; class PPButton; class PPListBox : public PPControl, public EventListenerInterface { private: bool border; const PPColor* borderColor; const PPColor* backGroundButtonColor; const PPColor* textColor; bool editable; bool scrollable; bool autoHideVScroll; bool autoHideHScroll; bool showIndex; pp_int32 indexBaseCount; bool showSelectionAlways; bool selectionVisible; bool onlyShowIndexSelection; bool keepsFocus; bool showFocus; bool centerSelection; bool selectOnScroll; bool singleButtonClickEdit; bool allowDragSelection; bool rightButtonConfirm; PPSimpleVector* items; pp_int32 startIndex; pp_int32 startPos; pp_int32 selectionIndex; pp_int32 columnSelectionStart; pp_int32 columnSelectionEnd; pp_int32 maxEditSize; pp_int32 timerTicker; bool lastTimerState; pp_int32 visibleHeight; pp_int32 visibleWidth; PPButton* backgroundButton; PPScrollbar* hScrollbar; PPScrollbar* vScrollbar; PPControl* caughtControl; bool controlCaughtByLMouseButton, controlCaughtByRMouseButton; bool lMouseDown, rMouseDown; PPFont* font; // UNDO PPString* editCopy; // hack pp_int32 lastStartIndex; pp_int32 lastStartPos; pp_int32 lastSelectionIndex; bool hadVScrollbar; bool hadHScrollbar; public: class ColorQueryListener { public: virtual PPColor getColor(pp_uint32 index, PPListBox& sender) = 0; }; private: ColorQueryListener* colorQueryListener; public: PPListBox(pp_int32 id, PPScreen* parentScreen, EventListenerInterface* eventListener, const PPPoint& location, const PPSize& size, bool border = true, bool editable = false, bool scrollable = true, bool showSelectionAlways = false); virtual ~PPListBox(); void setFont(PPFont* font) { this->font = font; } PPFont* getFont() const { return font; } void setBorderColor(const PPColor& color) { this->borderColor = &color; } void setAutoHideVScroll(bool b) { autoHideVScroll = b; } void setAutoHideHScroll(bool b) { autoHideHScroll = b; } void setShowIndex(bool showIndex); void showSelection(bool b) { selectionVisible = b; } void setOnlyShowIndexSelection(bool b) { onlyShowIndexSelection = b; } void setKeepsFocus(bool keepsFocus) { this->keepsFocus = keepsFocus; } void setShowFocus(bool showFocus) { this->showFocus = showFocus; } void setCenterSelection(bool bCenter) { centerSelection = bCenter; } void setIndexBaseCount(pp_int32 indexBaseCount) { this->indexBaseCount = indexBaseCount; } void setSelectOnScroll(bool b) { selectOnScroll = b; } void setSingleButtonClickEdit(bool b) { singleButtonClickEdit = b; } void setAllowDragSelection(bool b) { allowDragSelection = b; } void setRightButtonConfirm(bool b) { rightButtonConfirm = b; } void setMaxEditSize(pp_int32 max) { maxEditSize = max; } void addItem(const PPString& item); const PPString& getItem(pp_int32 index) const; void updateItem(pp_int32 index, const PPString& item); pp_int32 getNumItems() const { return items->size(); } void clear(); pp_uint32 getSelectedIndex() const { return selectionIndex; } void setSelectedIndex(pp_int32 index, bool adjustStartIndex = true, bool assureCursor = true); void setSelectedIndexByItem(const PPString& item, bool adjustStartIndex = true); bool isLastEntry() const { return selectionIndex == getNumItems() - 1; } bool isFirstEntry() const { return selectionIndex == 0; } bool isEditing() const { return columnSelectionStart>=0; } void placeCursorAtEnd(); void placeCursorAtStart(); void saveState(); void restoreState(bool assureCursor = true); // from PPControl virtual void paint(PPGraphicsAbstract* graphics); virtual bool gainsFocus() const { return keepsFocus; } virtual bool gainedFocusByMouse() const { return keepsFocus && ((caughtControl == NULL) && (items->size() > 0)); } virtual pp_int32 dispatchEvent(PPEvent* event); virtual void setSize(const PPSize& size); virtual void setLocation(const PPPoint& location); // from EventListenerInterface pp_int32 handleEvent(PPObject* sender, PPEvent* event); virtual bool isListBox() const { return true; } virtual bool receiveTimerEvent() const { return true; } void commitChanges(); void discardChanges(); void setColorQueryListener(ColorQueryListener* listener) { colorQueryListener = listener; } private: enum SelectReturnCodes { SelectReturnCodeDefault, SelectReturnCodeBreak, SelectReturnCodePlaceCursor }; SelectReturnCodes select(const PPPoint* p); void initialize(); void calcVisible(); void adjustScrollbarPositions(); void adjustScrollbars(); void assureCursorVisible(); // new stuff PPRect getVisibleRect() const; pp_int32 getItemHeight() const; pp_int32 getNumVisibleItems() const; pp_uint32 getMaxWidth() const; }; #endif MilkyTracker-1.02.00/src/ppui/ListBoxFileBrowser.cpp000066400000000000000000000233001324432207300222510ustar00rootroot00000000000000/* * ppui/ListBoxFileBrowser.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * ListBoxFileBrowser.cpp * MilkyTracker * * Created by Peter Barth on 19.10.06. * */ #include "ListBoxFileBrowser.h" #include "Screen.h" #include "PPPathFactory.h" PPListBoxFileBrowser::PPListBoxFileBrowser(pp_int32 id, PPScreen* parentScreen, EventListenerInterface* eventListener, const PPPoint& location, const PPSize& size) : PPListBox(id, parentScreen, eventListener, location, size, true, false, true, true), filePrefix(" "), fileSuffix(""), directoryPrefix(" "), directorySuffix(""), sortAscending(true), cycleFilenames(true), sortType(SortByName) { setRightButtonConfirm(true); currentPath = PPPathFactory::createPath(); } PPListBoxFileBrowser::~PPListBoxFileBrowser() { delete currentPath; } pp_int32 PPListBoxFileBrowser::dispatchEvent(PPEvent* event) { if (event->getID() == eKeyChar && cycleFilenames) { pp_uint16 keyCode = *((pp_uint16*)event->getDataPtr()); if (keyCode < 255) cycle((char)keyCode); } return PPListBox::dispatchEvent(event); } void PPListBoxFileBrowser::clearExtensions() { items.clear(); } // must contain pairs of extensions / description // terminated by TWO NULL pointers void PPListBoxFileBrowser::addExtensions(const char* const extensions[]) { for (pp_uint32 i = 0; extensions[i] != NULL; i+=2) addExtension(extensions[i], extensions[i+1]); } void PPListBoxFileBrowser::addExtension(const PPString& ext, const PPString& desc) { Descriptor* d = new Descriptor(ext, desc); items.add(d); } PPSystemString PPListBoxFileBrowser::getCurrentPathAsString() const { return currentPath->getCurrent(); } PPString PPListBoxFileBrowser::getCurrentPathAsASCIIString() const { char* nameASCIIZ = currentPath->getCurrent().toASCIIZ(); PPString result(nameASCIIZ); delete[] nameASCIIZ; return result; } void PPListBoxFileBrowser::refreshFiles() { iterateFilesInFolder(); } const PPPathEntry* PPListBoxFileBrowser::getPathEntry(pp_int32 index) const { return pathEntries.get(index); } bool PPListBoxFileBrowser::canGotoHome() const { return currentPath->canGotoHome(); } void PPListBoxFileBrowser::gotoHome() { PPSystemString before = currentPath->getCurrent(); currentPath->gotoHome(); PPSystemString after = currentPath->getCurrent(); if (after.compareTo(before) != 0) { history.Push(before); history.Push(after); history.Pop(); } refreshFiles(); } bool PPListBoxFileBrowser::canGotoRoot() const { return currentPath->canGotoRoot(); } void PPListBoxFileBrowser::gotoRoot() { PPSystemString before = currentPath->getCurrent(); currentPath->gotoRoot(); PPSystemString after = currentPath->getCurrent(); if (after.compareTo(before) != 0) { history.Push(before); history.Push(after); history.Pop(); } refreshFiles(); } bool PPListBoxFileBrowser::canGotoParent() const { return currentPath->canGotoParent(); } void PPListBoxFileBrowser::gotoParent() { PPSystemString before = currentPath->getCurrent(); currentPath->gotoParent(); PPSystemString after = currentPath->getCurrent(); if (after.compareTo(before) != 0) { history.Push(before); history.Push(after); history.Pop(); } refreshFiles(); } bool PPListBoxFileBrowser::currentSelectionIsFile() { const PPPathEntry* entry = getPathEntry(PPListBox::getSelectedIndex()); return entry ? entry->isFile() : false; } bool PPListBoxFileBrowser::stepIntoCurrentSelection() { const PPPathEntry* entry = getPathEntry(PPListBox::getSelectedIndex()); return entry ? stepInto(*entry) : false; } bool PPListBoxFileBrowser::stepInto(const PPPathEntry& entry) { if (entry.isDirectory()) { PPSystemString before = currentPath->getCurrent(); // check if we can actually change to this directory if (!currentPath->stepInto(entry.getName())) return false; PPSystemString after = currentPath->getCurrent(); if (after.compareTo(before) != 0) { history.Push(before); history.Push(after); history.Pop(); } refreshFiles(); return true; } return false; } bool PPListBoxFileBrowser::gotoPath(const PPSystemString& path, bool reload/* = true*/) { bool res = currentPath->change(path); if (res && reload) refreshFiles(); return res; } bool PPListBoxFileBrowser::canPrev() const { return !history.IsEmpty(); } // undo last changes void PPListBoxFileBrowser::prev() { if (history.IsEmpty()) return; gotoPath(*history.Pop()); } bool PPListBoxFileBrowser::canNext() const { return !history.IsTop(); } // redo last changes void PPListBoxFileBrowser::next() { if (history.IsTop()) return; gotoPath(*history.Advance()); } void PPListBoxFileBrowser::setFilePrefix(const PPString& prefix) { filePrefix = prefix; } void PPListBoxFileBrowser::setFileSuffix(const PPString& suffix) { fileSuffix = suffix; } void PPListBoxFileBrowser::setDirectoryPrefix(const PPString& prefix) { directoryPrefix = prefix; } void PPListBoxFileBrowser::setDirectorySuffix(const PPString& suffix) { directorySuffix = suffix; } void PPListBoxFileBrowser::setDirectorySuffixPathSeperator() { directorySuffix = currentPath->getPathSeparatorAsASCII(); } void PPListBoxFileBrowser::iterateFilesInFolder() { pathEntries.clear(); const PPPathEntry* entry = currentPath->getFirstEntry(); while (entry) { if (!entry->isHidden() && checkExtension(*entry)) { pathEntries.add(entry->clone()); } entry = currentPath->getNextEntry(); } sortFileList(); buildFileList(); } void PPListBoxFileBrowser::buildFileList() { PPListBox::clear(); for (pp_int32 i = 0; i < pathEntries.size(); i++) { const PPPathEntry* entry = pathEntries.get(i); char* nameASCIIZ = entry->getName().toASCIIZ(); PPString str(entry->isDirectory() ? directoryPrefix : filePrefix); str.append(nameASCIIZ); str.append(entry->isDirectory() ? directorySuffix : fileSuffix); appendFileSize(str, *entry); PPListBox::addItem(str); delete[] nameASCIIZ; } } void PPListBoxFileBrowser::appendFileSize(PPString& name, const PPPathEntry& entry) { if (entry.isFile()) { pp_int64 size = entry.getSize(); char buffer[1024]; if (size < 1024) sprintf(buffer, " (%db)", (pp_int32)size); else if (size < 1024*1024) { size>>=10; sprintf(buffer, " (%dkb)", (pp_int32)size); } else { size>>=20; sprintf(buffer, " (%dmb)", (pp_int32)size); } name.append(buffer); } } void PPListBoxFileBrowser::sortFileList() { pp_int32 i; PPPathEntry** tempEntries; PPPathEntry** drives; PPPathEntry** parents; pp_int32 numEntries = pathEntries.size(); tempEntries = new PPPathEntry*[numEntries]; drives = new PPPathEntry*[numEntries]; parents = new PPPathEntry*[numEntries]; //for (i = 0; i < numEntries; i++) // tempEntries[i] = pathEntries.get(i)->clone(); pp_int32 numDrives = 0; pp_int32 numParents = 0; pp_int32 content = 0; for (i = 0; i < numEntries; i++) { if (pathEntries.get(i)->isParent()) { parents[numParents] = pathEntries.get(i)->clone(); numParents++; } else if (pathEntries.get(i)->isDrive()) { drives[numDrives] = pathEntries.get(i)->clone(); numDrives++; } else { tempEntries[content] = pathEntries.get(i)->clone(); content++; } } PPPathEntry::PathSortRuleInterface* sortRules[NumSortRules]; PPPathEntry::PathSortByFileRule sortByFileRule; PPPathEntry::PathSortBySizeRule sortBySizeRule; PPPathEntry::PathSortByExtRule sortByExtRule; sortRules[0] = &sortByFileRule; sortRules[1] = &sortBySizeRule; sortRules[2] = &sortByExtRule; if (content) PPPathEntry::sort(tempEntries, 0, content-1, *sortRules[sortType], !sortAscending); if (numDrives) PPPathEntry::sort(drives, 0, numDrives-1, *sortRules[0], false); pathEntries.clear(); for (i = 0; i < numParents; i++) { pathEntries.add(parents[i]->clone()); delete parents[i]; } for (i = 0; i < content; i++) { pathEntries.add(tempEntries[i]->clone()); delete tempEntries[i]; } for (i = 0; i < numDrives; i++) { pathEntries.add(drives[i]->clone()); delete drives[i]; } delete[] parents; delete[] drives; delete[] tempEntries; } void PPListBoxFileBrowser::cycle(char chr) { pp_int32 currentIndex = PPListBox::getSelectedIndex(); PPSystemString prefix(chr); prefix.toUpper(); pp_uint32 j = currentIndex+1; for (pp_int32 i = 0; i < pathEntries.size(); i++, j++) { PPSystemString str = pathEntries.get(j % pathEntries.size())->getName(); str.toUpper(); if (str.startsWith(prefix)) { PPListBox::setSelectedIndex(j % pathEntries.size(), false); pp_int32 selectionIndex = PPListBox::getSelectedIndex(); PPEvent e(eSelection, &selectionIndex, sizeof(selectionIndex)); eventListener->handleEvent(reinterpret_cast(this), &e); parentScreen->paintControl(this); break; } } } bool PPListBoxFileBrowser::checkExtension(const PPPathEntry& entry) { if (items.size() == 0 || entry.isDirectory()) return true; bool res = false; for (pp_int32 i = 0; i < items.size(); i++) { PPSystemString sysStr(items.get(i)->extension); if (entry.getName().compareToExtension(sysStr)) { res = true; break; } } return res; } MilkyTracker-1.02.00/src/ppui/ListBoxFileBrowser.h000066400000000000000000000074111324432207300217230ustar00rootroot00000000000000/* * ppui/ListBoxFileBrowser.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * ListBoxFileBrowser.h * MilkyTracker * * Created by Peter Barth on 19.10.06. * */ #ifndef __LISTBOXFILEBROWSER_H__ #define __LISTBOXFILEBROWSER_H__ #include "ListBox.h" #include "SimpleVector.h" #include "UndoStack.h" class PPListBoxFileBrowser : public PPListBox { public: enum SortTypes { SortByName, SortBySize, SortByExtension, NumSortRules }; private: class PPPath* currentPath; PPSystemString* initialPath; PPSystemString* fileFullPath; PPSimpleVector pathEntries; PPUndoStack history; PPString filePrefix, fileSuffix; PPString directoryPrefix, directorySuffix; bool sortAscending; bool cycleFilenames; PPSimpleVector items; SortTypes sortType; public: PPListBoxFileBrowser(pp_int32 id, PPScreen* parentScreen, EventListenerInterface* eventListener, const PPPoint& location, const PPSize& size); virtual ~PPListBoxFileBrowser(); virtual pp_int32 dispatchEvent(PPEvent* event); virtual bool receiveTimerEvent() const { return false; } void refreshFiles(); void setSortAscending(bool sortAscending) { this->sortAscending = sortAscending; } void setCycleFilenames(bool cycleFilenames) { this->cycleFilenames = cycleFilenames; } void cycleSorting() { sortType = (SortTypes)(((pp_int32)sortType+1) % NumSortRules); } void setSortType(SortTypes sortType) { this->sortType = sortType; if (this->sortType >= NumSortRules) this->sortType = SortByName; } SortTypes getSortType() const { return sortType; } void clearExtensions(); // must contain pairs of extensions / description // terminated by TWO NULL pointers void addExtensions(const char* const extensions[]); void addExtension(const PPString& ext, const PPString& desc); const PPPath& getCurrentPath() const { return *currentPath; } PPSystemString getCurrentPathAsString() const; PPString getCurrentPathAsASCIIString() const; const PPPathEntry* getPathEntry(pp_int32 index) const; const PPPathEntry* getCurrentSelectedPathEntry() const { return getPathEntry(PPListBox::getSelectedIndex()); } const PPSimpleVector& getPathEntries() const { return pathEntries; } bool canGotoHome() const; void gotoHome(); bool canGotoRoot() const; void gotoRoot(); bool canGotoParent() const; void gotoParent(); bool currentSelectionIsFile(); bool stepIntoCurrentSelection(); bool stepInto(const PPPathEntry& entry); bool gotoPath(const PPSystemString& path, bool reload = true); bool canPrev() const; void prev(); bool canNext() const; void next(); void setFilePrefix(const PPString& prefix); void setFileSuffix(const PPString& suffix); void setDirectoryPrefix(const PPString& prefix); void setDirectorySuffix(const PPString& suffix); void setDirectorySuffixPathSeperator(); private: void iterateFilesInFolder(); void buildFileList(); void sortFileList(); void cycle(char chr); static void appendFileSize(PPString& name, const PPPathEntry& entry); bool checkExtension(const PPPathEntry& entry); }; #endif // __LISTBOXFILEBROWSER_H__ MilkyTracker-1.02.00/src/ppui/Menu.cpp000066400000000000000000000113151324432207300174300ustar00rootroot00000000000000/* * ppui/Menu.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * PPMenu.cpp * MilkyTracker * * Created by Peter Barth on Fri Mar 04 2005. * */ #include "Menu.h" #include "Font.h" #include "GraphicsAbstract.h" // ------------- menu -------------------------------------------- PPMenu::PPMenu(PPFont* aFont, const PPColor& selectionColor, const PPColor& bgColor, bool bSubMenu/* = false*/) : font(aFont), backColor(&bgColor), borderColor(&bgColor), selectionColor(&selectionColor), textBrightColor(NULL), textDarkColor(NULL), subMenu(bSubMenu), parentMenu(NULL) //borderColor(128, 128, 128) { } pp_uint32 PPMenu::getMaxWidth() const { pp_uint32 maxWidth = 0; for (pp_int32 i = 0; i < items.size(); i++) { pp_uint32 len = items.get(i)->name.length(); if (len > maxWidth) maxWidth = len; } return maxWidth; } pp_uint32 PPMenu::getEntryHeight() const { #ifndef __LOWRES__ return font->getCharHeight()+2; #else return font->getCharHeight(); #endif } PPRect PPMenu::getBoundingRect() const { PPRect r; r.x1 = 0; r.y1 = 0; r.y2 = items.size()*getEntryHeight()+4; r.x2 = getMaxWidth()*font->getCharWidth()+5; return r; } bool PPMenu::setState(pp_int32 theId, pp_uint32 newState) { bool b = false; for (pp_int32 i = 0; i < items.size(); i++) { if (items.get(i)->identifier == theId) { items.get(i)->state = newState; b = true; } } return b; } void PPMenu::paint(PPGraphicsAbstract* g, pp_int32 px, pp_int32 py, pp_int32 menuSelection) { pp_int32 i; PPRect r = getBoundingRect(); #ifndef __LOWRES__ const pp_int32 yOffset = 1; #else const pp_int32 yOffset = 0; #endif { PPColor color = *backColor; g->setRect(px, py, px + r.x2 + 2, py + r.y2 + 2); g->setColor(color); static pp_uint8 pattern[] = {224, 210, 198, 210, 224}; for (pp_int32 i = py; i < py + r.y2; i++) { pp_int32 c = (pattern[(i-py)%5]-64); g->setColor(c,c,c); g->drawHLine(px, px + r.x2, i); } // border color = *borderColor; PPColor bColor = color; // adjust bright color bColor.scaleFixed(87163); PPPoint location(px,py); PPSize size(r.x2, r.y2); g->setColor(bColor); g->drawHLine(location.x, location.x + size.width, location.y); g->drawVLine(location.y, location.y + size.height, location.x); // adjust dark color bColor = color; bColor.scaleFixed(20000); g->setColor(bColor); g->drawHLine(location.x, location.x + size.width, location.y + size.height - 1); g->drawVLine(location.y, location.y + size.height, location.x + size.width - 1); g->setColor(0,0,0); g->drawHLine(location.x+1, location.x + size.width+1, location.y + size.height); g->drawVLine(location.y+1, location.y + size.height+1, location.x + size.width); g->drawHLine(location.x+1, location.x + size.width+2, location.y + size.height+1); g->drawVLine(location.y+1, location.y + size.height+2, location.x + size.width+1); } g->setFont(font); pp_int32 they = 0; for (i = 0; i < items.size(); i++) { if (i == menuSelection) { PPColor color = *selectionColor; PPColor nsdColor = color, nsbColor = color; nsdColor.scaleFixed(45000); // adjust bright color nsbColor.scaleFixed(75000); pp_int32 y = py + 2 + i*(getEntryHeight()) - 1; pp_int32 h = (getEntryHeight()+1); PPRect rect(px+1, y, px + 1 + r.x2 - 3, y + h/2); g->fillVerticalShaded(rect, nsbColor, nsdColor, true); rect.y1 += h/2; rect.y2 += h/2 + 1; g->fillVerticalShaded(rect, nsbColor, nsdColor, false); g->setColor(*textBrightColor); } else g->setColor(*textDarkColor); if (items.get(i)->state & 1) { g->setColor(*borderColor); g->drawString(items.get(i)->name, px + 2, py + 2 + they+yOffset); } else { PPColor curCol = g->getColor(); g->setColor((textBrightColor->r-curCol.r)>>1, (textBrightColor->g-curCol.g)>>1, (textBrightColor->b-curCol.b)>>1); g->drawString(items.get(i)->name, px + 3, py + 3 + they+yOffset); g->setColor(curCol); g->drawString(items.get(i)->name, px + 2, py + 2 + they+yOffset); } they+=getEntryHeight(); } } MilkyTracker-1.02.00/src/ppui/Menu.h000066400000000000000000000050771324432207300171050ustar00rootroot00000000000000/* * ppui/Menu.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * Menu.h * MilkyTracker * * Created by Peter Barth on Fri Mar 04 2005. * */ #ifndef MENU__H #define MENU__H #include "BasicTypes.h" #include "SimpleVector.h" class PPFont; class PPGraphicsAbstract; class PPContextMenu; enum MenuCommandIDs { MenuCommandIDNew = 0, MenuCommandIDCut = 1, MenuCommandIDCopy = 2, MenuCommandIDPaste = 3, MenuCommandIDSelectAll = 4, MenuCommandIDSelectNothing = 5, MenuCommandIDUndo = 7, MenuCommandIDRedo = 8, MenuCommandIDHide = 0x10000 }; struct PPMenu { struct Entry { PPString name; pp_int32 identifier; pp_uint32 state; PPContextMenu* subMenu; Entry(const PPString& s, pp_int32 theId, pp_uint32 stat = 0, PPContextMenu* aSubMenu = NULL) : name(s), identifier(theId), state(stat), subMenu(aSubMenu) { } }; PPSimpleVector items; PPFont* font; const PPColor* backColor; const PPColor* borderColor; const PPColor* selectionColor; const PPColor* textBrightColor; const PPColor* textDarkColor; bool subMenu; PPContextMenu* parentMenu; PPMenu(PPFont* aFont, const PPColor& selectionColor, const PPColor& bgColor, bool bSubMenu = false); pp_uint32 getMaxWidth() const; pp_uint32 getEntryHeight() const; PPRect getBoundingRect() const; bool setState(pp_int32 theId, pp_uint32 newState); void setSubMenu(bool bSubMenu) { subMenu = bSubMenu; } bool isSubMenu() const { return subMenu; } void setParentMenu(PPContextMenu* parent) { parentMenu = parent; } PPContextMenu* getParentMenu() const { return parentMenu; } void paint(PPGraphicsAbstract* g, pp_int32 px, pp_int32 py, pp_int32 menuSelection); void setFont(PPFont* font) { this->font = font; } void setTextBrightColor(const PPColor& color) { textBrightColor = &color; } void setTextDarkColor(const PPColor& color) { textDarkColor = &color; } }; #endif MilkyTracker-1.02.00/src/ppui/MessageBoxContainer.cpp000066400000000000000000000143131324432207300224250ustar00rootroot00000000000000/* * ppui/MessageBoxContainer.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "GraphicsAbstract.h" #include "Button.h" #include "MessageBoxContainer.h" #include "Font.h" #include "BasicTypes.h" #include "PPUIConfig.h" #include "Screen.h" #include "SimpleVector.h" PPMessageBoxContainer::PPMessageBoxContainer(pp_int32 id, PPScreen* parentScreen, EventListenerInterface* eventListener, const PPPoint& location, const PPSize& size, const PPString& caption) : PPContainer(id, parentScreen, eventListener, location, size), caption(caption), captured(false) { PPContainer::setColor(PPUIConfig::getInstance()->getColor(PPUIConfig::ColorMessageBoxContainer)); PPFont* font = PPFont::getFont(PPFont::FONT_SYSTEM); captionSize = 2 + 2*2 + font->getCharHeight() + 1; buttonLocation = location; buttonLocation.y+=captionSize; buttonSize = size; buttonSize.height-=captionSize; button = new PPButton(-1, NULL, NULL, buttonLocation, buttonSize, false, false, false); button->setColor(*PPContainer::color); } PPMessageBoxContainer::~PPMessageBoxContainer() { delete button; } void PPMessageBoxContainer::paint(PPGraphicsAbstract* g) { if (!isVisible()) return; PPColor bColor = *color, dColor = *color, vbColor = *color; // adjust dark color dColor.scaleFixed(32768); bColor.scaleFixed(87163); vbColor.scaleFixed(131072); g->setColor(*color); g->setRect(location.x, location.y, location.x + size.width, location.y + captionSize); g->fill(); //g->fill(); button->paint(g); g->setRect(location.x, location.y, location.x + size.width, location.y + size.height); g->setColor(bColor); g->drawHLine(location.x, location.x + size.width, location.y); g->drawVLine(location.y, location.y + size.height, location.x); g->drawHLine(location.x + 2, location.x + size.width - 2, location.y + size.height - 3); g->drawVLine(location.y + 2, location.y + size.height - 2, location.x + size.width - 3); g->setColor(dColor); g->drawHLine(location.x + 2, location.x + size.width - 2, location.y + 2); g->drawVLine(location.y + 2, location.y + size.height - 2, location.x + 2); g->drawHLine(location.x, location.x + size.width, location.y + size.height - 1); g->drawVLine(location.y, location.y + size.height, location.x + size.width - 1); // seperator g->setColor(dColor); PPFont* font = PPFont::getFont(PPFont::FONT_SYSTEM); g->drawHLine(location.x + 2, location.x + size.width - 3, location.y + captionSize-1); g->setColor(bColor); g->drawHLine(location.x + 3, location.x + size.width - 2, location.y + captionSize); pp_int32 cx = size.width / 2 - font->getStrWidth(caption) / 2; g->setColor(0,0,0); g->drawString(caption, location.x + cx + 1, location.y + 5); g->setColor(PPUIConfig::getInstance()->getColor(PPUIConfig::ColorStaticText)); g->drawString(caption, location.x + cx , location.y + 4); paintControls(g); } void PPMessageBoxContainer::setSize(const PPSize& size) { PPContainer::setSize(size); buttonSize = size; buttonSize.height-=captionSize; button->setSize(buttonSize); } void PPMessageBoxContainer::setLocation(const PPPoint& location) { PPContainer::setLocation(location); buttonLocation = location; buttonLocation.y+=captionSize; button->setLocation(buttonLocation); } pp_int32 PPMessageBoxContainer::dispatchEvent(PPEvent* event) { switch (event->getID()) { case eLMouseDown: lastCapturePoint = *reinterpret_cast(event->getDataPtr()); captured = isPointInCaption(lastCapturePoint); if (captured) return 0; break; case eLMouseDrag: if (handleMove(*reinterpret_cast(event->getDataPtr()))) return 0; break; case eLMouseUp: if (captured) { captured = false; return 0; } break; default: break; } return PPContainer::dispatchEvent(event); } bool PPMessageBoxContainer::isPointInCaption(const PPPoint& point) { PPSimpleVector& controls = getControls(); for (pp_int32 i = 0; i < controls.size(); i++) if (controls.get(i)->hit(point)) return false; return hit(point); //return (point.x >= location.x && point.x <= location.x + size.width && // point.y >= location.y && point.y <= location.y + captionSize); } bool PPMessageBoxContainer::handleMove(PPPoint point) { if (!captured) return false; const pp_int32 catchBound = 4; const pp_int32 dcatchBound = catchBound*2; const pp_int32 width = size.width; const pp_int32 height = size.height; bool ignorex = (point.x < -(width-dcatchBound)) || (point.x >= parentScreen->getWidth() + (width - dcatchBound)); bool ignorey = (point.y < -(height-dcatchBound)) || (point.y >= parentScreen->getHeight() + (height - dcatchBound));; PPPoint delta(ignorex ? 0 : point.x - lastCapturePoint.x, ignorey ? 0 : point.y - lastCapturePoint.y); if (!ignorex) lastCapturePoint.x = point.x; if (!ignorey) lastCapturePoint.y = point.y; if (location.x + delta.x < -(width-dcatchBound)) { delta.x += -(width-dcatchBound) - (location.x + delta.x); } if (location.y + delta.y < -(height-dcatchBound)) { delta.y += -(height-dcatchBound) - (location.y + delta.y); } if (location.x + delta.x >= parentScreen->getWidth() - dcatchBound) { delta.x -= (location.x + delta.x) - (parentScreen->getWidth() - dcatchBound); } if (location.y + delta.y >= parentScreen->getHeight() - dcatchBound) { delta.y -= (location.y + delta.y) - (parentScreen->getHeight() - dcatchBound); } move(delta); PPPoint buttonPos = button->getLocation(); buttonPos.x+=delta.x; buttonPos.y+=delta.y; button->setLocation(buttonPos); parentScreen->paint(); return true; } MilkyTracker-1.02.00/src/ppui/MessageBoxContainer.h000066400000000000000000000036241324432207300220750ustar00rootroot00000000000000/* * ppui/MessageBoxContainer.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ ///////////////////////////////////////////////////////////////// // // PPContainer control that looks like a Message box // (can contain other controls) // ///////////////////////////////////////////////////////////////// #ifndef MESSAGEBOXCONTAINER__H #define MESSAGEBOXCONTAINER__H #include "BasicTypes.h" #include "Container.h" class PPButton; class PPMessageBoxContainer : public PPContainer { private: PPString caption; pp_int32 captionSize; PPPoint buttonLocation; PPSize buttonSize; PPButton* button; bool captured; PPPoint lastCapturePoint; public: PPMessageBoxContainer(pp_int32 id, PPScreen* parentScreen, EventListenerInterface* eventListener, const PPPoint& location, const PPSize& size, const PPString& caption); virtual ~PPMessageBoxContainer(); virtual void paint(PPGraphicsAbstract* graphics); virtual void setSize(const PPSize& size); virtual void setLocation(const PPPoint& location); virtual pp_int32 dispatchEvent(PPEvent* event); void setCaption(const PPString& caption) { this->caption = caption; } private: bool isPointInCaption(const PPPoint& point); bool handleMove(PPPoint point); }; #endif MilkyTracker-1.02.00/src/ppui/Object.h000066400000000000000000000014751324432207300174050ustar00rootroot00000000000000/* * ppui/Object.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #ifndef OBJECT__H #define OBJECT__H class PPObject { }; #endif MilkyTracker-1.02.00/src/ppui/PPPath.h000066400000000000000000000157551324432207300173410ustar00rootroot00000000000000/* * ppui/PPPath.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * PPPath.h * MilkyTracker * * Created by Peter Barth on 12.10.06. * */ #ifndef __PPPATH_H__ #define __PPPATH_H__ #include "BasicTypes.h" class PPPathEntry { public: enum Type { Nonexistent, Hidden, File, Directory }; protected: PPSystemString name; Type type; pp_uint32 size; public: PPPathEntry() { } virtual ~PPPathEntry() { } virtual void create(const PPSystemString& path, const PPSystemString& name) { this->name = name; type = Nonexistent; size = 0; } virtual const PPSystemString& getName() const { return name; } virtual bool isFile() const { return type == File; } virtual bool isDirectory() const { return type == Directory; } virtual pp_uint32 getSize() const { return size; } virtual bool isHidden() const { return type == Hidden; } virtual bool isDrive() const { return false; } virtual bool isParent() const { static const PPSystemString temp(".."); return name.compareTo(temp) == 0; } virtual bool compareTo(const PPPathEntry& src) const { if (name.compareTo(src.name) != 0) return false; return (type == src.type && size == src.size); } virtual PPPathEntry* clone() const { // check if this is the correct type PPPathEntry* result = new PPPathEntry(); result->name = name; result->type = type; result->size = size; return result; } class PathSortRuleInterface { public: virtual pp_int32 compare(const PPPathEntry& left, const PPPathEntry& right) const = 0; }; class PathSortByFileRule : public PathSortRuleInterface { public: virtual pp_int32 compare(const PPPathEntry& left, const PPPathEntry& right) const { // no drives if (!left.isDrive() && !right.isDrive()) { if (left.isFile() && right.isFile()) { return left.getName().compareToNoCase(right.getName()); } else if (left.isDirectory() && right.isDirectory()) { if (!left.isParent() && !right.isParent()) return left.getName().compareToNoCase(right.getName()); else if (left.isParent()) return -1; else return 1; } else { if (left.isDirectory() && right.isFile()) return -1; else return 1; } } // drives else if (left.isDrive() && right.isDrive()) { return left.getName().compareToNoCase(right.getName()); } else { if (left.isDrive() && !right.isDrive()) return 1; else return -1; } } }; class PathSortBySizeRule : public PathSortRuleInterface { public: virtual pp_int32 compare(const PPPathEntry& left, const PPPathEntry& right) const { // both are files if (!left.isDirectory() && !right.isDirectory()) { if (left.getSize() != right.getSize()) return left.getSize() - right.getSize(); else return left.getName().compareToNoCase(right.getName()); } // directory else if (left.isDirectory() && right.isDirectory()) { PathSortByFileRule comparator; return comparator.compare(left, right); } else { if (left.isDirectory() && !right.isDirectory()) return -1; else return 1; } } }; class PathSortByExtRule : public PathSortRuleInterface { public: virtual pp_int32 compare(const PPPathEntry& left, const PPPathEntry& right) const { // both are files if (!left.isDirectory() && !right.isDirectory()) { pp_int32 diff = left.getName().compareExtensions(right.getName()); if (diff == 0) return left.getName().compareToNoCase(right.getName()); else return diff; } // directory else if (left.isDirectory() && right.isDirectory()) { PathSortByFileRule comparator; return comparator.compare(left, right); } else { if (left.isDirectory() && !right.isDirectory()) return -1; else return 1; } } }; private: static pp_int32 partition(PPPathEntry** a, pp_int32 left, pp_int32 right, const PathSortRuleInterface& sortRule, bool descending = false) { const pp_int32 sign = descending ? -1 : 1; pp_int32 first=left, pivot=right--; while(left<=right) { while(sortRule.compare(*a[left], *a[pivot])*sign < 0/*a[left]=first)&&(sortRule.compare(*a[right], *a[pivot])*sign >= 0/*a[right]>=a[pivot]*/)) right--; if(left=right) return; p = partition(array, left, right, sortRule, descending); sortInternal(array, left,p-1, sortRule, descending); sortInternal(array, p+1, right, sortRule, descending); /*const pp_int32 sign = descending ? -1 : 1; pp_int32 i,j; PPPathEntry* x; PPPathEntry* y; i=l; j=r; x=array[(l+r)/2]; do { while (sortRule.compare(*array[i], *x)*sign < 0) i++; while (sortRule.compare(*x, *array[j])*sign < 0 && j > 0) j--; if (i <= j) { y=array[i]; array[i]=array[j]; array[j]=y; i++; j--; } } while (i<=j); if (l. * */ ///////////////////////////////////////////////////////////////// // // PPUI main include // ///////////////////////////////////////////////////////////////// #ifndef PPUI__H #define PPUI__H #include "Object.h" #include "BasicTypes.h" #include "Tools.h" #include "Event.h" #include "Screen.h" #include "GraphicsAbstract.h" #include "Font.h" #include "Control.h" #include "Button.h" #include "ScrollBar.h" #include "Slider.h" #include "ListBox.h" #include "CheckBox.h" #include "Container.h" #include "MessageBoxContainer.h" #include "RadioGroup.h" #include "StaticText.h" #include "ContextMenu.h" #include "Seperator.h" #include "PPUIConfig.h" #endif MilkyTracker-1.02.00/src/ppui/PPUIConfig.cpp000066400000000000000000000032171324432207300204310ustar00rootroot00000000000000/* * ppui/PPUIConfig.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * PPUIConfig.cpp * MilkyTracker * * Created by Peter Barth on 01.07.05. * */ #include "PPUIConfig.h" PPUIConfig::PPUIConfig() { colors[ColorSelection] = PPColor(64*2, 64*2, 128*2-1); colors[ColorGrayedOutSelection] = PPColor(128, 128, 128); colors[ColorDefaultButton] = PPColor(192, 192, 192); colors[ColorDefaultButtonText] = PPColor(0, 0, 0); colors[ColorContainer] = PPColor(128, 128, 128); colors[ColorMessageBoxContainer] = PPColor(120, 120, 120); colors[ColorMenuBackground] = PPColor(224, 224, 224); colors[ColorMenuTextDark] = PPColor(0, 0, 0); colors[ColorMenuTextBright] = PPColor(255, 255, 255); colors[ColorListBoxBorder] = PPColor(192, 192, 192); colors[ColorListBoxBackground] = PPColor(32, 32, 48); colors[ColorScrollBarBackground] = PPColor(32, 48, 64); colors[ColorRadioGroupButton] = PPColor(128, 128, 0); colors[ColorStaticText] = PPColor(255, 255, 255); } MilkyTracker-1.02.00/src/ppui/PPUIConfig.h000066400000000000000000000032101324432207300200670ustar00rootroot00000000000000/* * ppui/PPUIConfig.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * PPUIConfig.h * MilkyTracker * * Created by Peter Barth on 01.07.05. * */ #ifndef PPUICONFIG__H #define PPUICONFIG__H #include "BasicTypes.h" #include "Singleton.h" class PPUIConfig : public PPSingleton { public: enum PPUIColors { ColorSelection = 0, ColorGrayedOutSelection, ColorDefaultButton, ColorDefaultButtonText, ColorContainer, ColorMessageBoxContainer, ColorMenuBackground, ColorMenuTextDark, ColorMenuTextBright, ColorListBoxBorder, ColorListBoxBackground, ColorScrollBarBackground, ColorRadioGroupButton, ColorStaticText, ColorLast }; private: PPColor colors[ColorLast]; PPUIConfig(); public: const PPColor& getColor(PPUIColors whichColor) const { return colors[whichColor]; } void setColor(PPUIColors whichColor, const PPColor& color) { colors[whichColor] = color; } friend class PPSingleton; }; #endif MilkyTracker-1.02.00/src/ppui/RadioGroup.cpp000066400000000000000000000130451324432207300206010ustar00rootroot00000000000000/* * ppui/RadioGroup.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "RadioGroup.h" #include "Event.h" #include "GraphicsAbstract.h" #include "Screen.h" #include "Font.h" #include "PPUIConfig.h" PPRadioGroup::PPRadioGroup(pp_int32 id, PPScreen* parentScreen, EventListenerInterface* eventListener, const PPPoint& location, const PPSize& size, pp_uint32 spacerHeight /* = 4 */) : PPControl(id, parentScreen, eventListener, location, size), radioButtonColor(&PPUIConfig::getInstance()->getColor(PPUIConfig::ColorRadioGroupButton)), textColor(&PPUIConfig::getInstance()->getColor(PPUIConfig::ColorStaticText)), spacerHeight(spacerHeight), choice(0), horizontal(false), maxWidth(0) { font = PPFont::getFont(PPFont::FONT_SYSTEM); } PPRadioGroup::~PPRadioGroup() { } void PPRadioGroup::paint(PPGraphicsAbstract* g) { if (!isVisible()) return; pp_int32 i,j,k; g->setRect(PPRect(location.x, location.y, location.x+size.width, location.y+size.height)); g->setFont(font); PPColor dark, ldark, bright, normal; normal = bright = ldark = dark = *radioButtonColor; bright.scale(1.25f); ldark.scale(0.75f); dark.scale(0.125f); if (!enabled) { normal.scaleFixed(40000); bright.scaleFixed(40000); ldark.scaleFixed(40000); dark.scaleFixed(40000); } PPColor textColor = *(this->textColor); if (!enabled) textColor.scaleFixed(40000); pp_uint32 spacerHeight = (font->getCharHeight()) + this->spacerHeight; pp_uint32 spacerWidth = maxWidth + DefaultRadioWidth; for (i = 0; i < items.size(); i++) { pp_int32 px = location.x + 2 + (horizontal ? i*spacerWidth : 0); pp_int32 py = location.y + 2 + (!horizontal ? (i*spacerHeight) : 0) + (spacerHeight>>1); if (i == (signed)choice) { for (j = 0; j < 5; j++) { g->setColor(ldark); for (k = px+j; k <= px+8-j; k++) g->setPixel(k, py-j); g->setColor(dark); g->setPixel(px+j, py-j-1); g->setPixel(px+8-j, py-j-1); g->setPixel(px+j, py-j); g->setPixel(px+8-j, py-j); } for (j = 0; j < 5; j++) { g->setColor(ldark); for (k = px+j; k <= px+8-j; k++) g->setPixel(k, py+j); g->setColor(normal); g->setPixel(px+j, py+j); g->setPixel(px+j-1, py+j); g->setPixel(px+8-j, py+j+1); g->setPixel(px+8-j+1, py+j+1); } for (j = 0; j < 3; j++) { g->setColor(textColor); for (k = px+j; k <= px+4-j; k++) g->setPixel(k+2, py-j+1); } for (j = 0; j < 3; j++) { g->setColor(textColor); for (k = px+j; k <= px+4-j; k++) g->setPixel(k+2, py+j+1); } } else { for (j = 0; j < 5; j++) { g->setColor(normal); for (k = px+j; k <= px+8-j; k++) g->setPixel(k, py-j); g->setColor(bright); g->setPixel(px+j, py-j-1); g->setPixel(px+8-j, py-j-1); } for (j = 0; j < 5; j++) { g->setColor(normal); for (k = px+j; k <= px+8-j; k++) g->setPixel(k, py+j); g->setColor(dark); g->setPixel(px+j, py+j+1); g->setPixel(px+j-1, py+j+1); g->setPixel(px+8-j, py+j+1); g->setPixel(px+8-j+1, py+j+1); } } g->setColor(0, 0, 0); g->drawString(*items.get(i), px + 12 + 1, py - (font->getCharHeight()>>1)+1 + 1); g->setColor(textColor); g->drawString(*items.get(i), px + 12, py - (font->getCharHeight()>>1)+1); } } pp_int32 PPRadioGroup::dispatchEvent(PPEvent* event) { if (eventListener == NULL) return -1; //if (!visible) // return 0; switch (event->getID()) { case eLMouseDown: { PPPoint* p = (PPPoint*)event->getDataPtr(); p->y -= location.y + 2; p->x -= location.x + 2; if (p->y < 0 || p->x < 0) break; pp_uint32 spacerHeight = (font->getCharHeight()) + this->spacerHeight; pp_uint32 spacerWidth = maxWidth + DefaultRadioWidth; pp_int32 index = -1; if (!horizontal) index = p->y / spacerHeight; else index = p->x / spacerWidth; if (index >= items.size() || index < 0) break; pp_int32 size = font->getStrWidth(*items.get(index)) + 12; if ((p->x % maxWidth) >= size) break; choice = index; PPEvent e(eSelection, &choice, sizeof(choice)); eventListener->handleEvent(reinterpret_cast(this), &e); parentScreen->paintControl(this); break; } case eLMouseUp: parentScreen->paintControl(this); break; default: break; } return 0; //return eventListener->handleEvent(reinterpret_cast(this), event); } void PPRadioGroup::addItem(const PPString& item) { items.add(new PPString(item)); pp_int32 width = font->getStrWidth(item); if (width > maxWidth) maxWidth = width; } const PPString& PPRadioGroup::getItem(pp_int32 index) const { return *items.get((index >= 0 && index < items.size()) ? index : 0); } void PPRadioGroup::fitSize() { size.height = items.size()*((font->getCharHeight()) + this->spacerHeight + 1); size.width = maxWidth + DefaultRadioWidth; } MilkyTracker-1.02.00/src/ppui/RadioGroup.h000066400000000000000000000043201324432207300202420ustar00rootroot00000000000000/* * ppui/RadioGroup.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ ///////////////////////////////////////////////////////////////// // // PPRadioGroup control class // ///////////////////////////////////////////////////////////////// #ifndef RADIOGROUP__H #define RADIOGROUP__H #include "BasicTypes.h" #include "Control.h" #include "SimpleVector.h" // Forwards class PPGraphicsAbstract; class PPFont; class PPButton; class PPRadioGroup : public PPControl { private: const PPColor* radioButtonColor; const PPColor* textColor; PPSimpleVector items; pp_uint32 spacerHeight; pp_uint32 choice; PPFont* font; bool horizontal; pp_int32 maxWidth; public: enum { DefaultSpacerHeight = 5, DefaultRadioWidth = 14 }; PPRadioGroup(pp_int32 id, PPScreen* parentScreen, EventListenerInterface* eventListener, const PPPoint& location, const PPSize& size, pp_uint32 spacerHeight = DefaultSpacerHeight); virtual ~PPRadioGroup(); void setColor(const PPColor& color) { this->radioButtonColor = &color; } void addItem(const PPString& item); const PPString& getItem(pp_int32 index) const; void setSpacerHeight(pp_uint32 spacerHeight) { this->spacerHeight = spacerHeight; } void setFont(PPFont* font) { this->font = font; } void setHorizontal(bool b) { horizontal = b; } void setChoice(pp_uint32 choice) { this->choice = choice; } pp_uint32 getChoice() const { return choice; } virtual void paint(PPGraphicsAbstract* graphics); virtual pp_int32 dispatchEvent(PPEvent* event); void fitSize(); }; #endif MilkyTracker-1.02.00/src/ppui/ScanCodes.h000066400000000000000000000034571324432207300200430ustar00rootroot00000000000000/* * ppui/ScanCodes.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * ScanCodes.h * MilkyTracker * * Created by Peter Barth on 21.05.05. * */ #ifndef SCANCODES__H #define SCANCODES__H #define SC_WTF 0x29 #define SC_1 0x02 #define SC_2 0x03 #define SC_3 0x04 #define SC_4 0x05 #define SC_5 0x06 #define SC_6 0x07 #define SC_7 0x08 #define SC_8 0x09 #define SC_9 0x0a #define SC_0 0x0b #define SC_SS 0x0c #define SC_TICK 0x0d #define SC_Q 0x10 #define SC_W 0x11 #define SC_E 0x12 #define SC_R 0x13 #define SC_T 0x14 #define SC_Z 0x15 #define SC_U 0x16 #define SC_I 0x17 #define SC_O 0x18 #define SC_P 0x19 #define SC_UE 0x1a #define SC_PLUS 0x1b #define SC_A 0x1e #define SC_S 0x1f #define SC_D 0x20 #define SC_F 0x21 #define SC_G 0x22 #define SC_H 0x23 #define SC_J 0x24 #define SC_K 0x25 #define SC_L 0x26 #define SC_OE 0x27 #define SC_AE 0x28 #define SC_SHARP 0x2b #define SC_SMALLERGREATER 0x56 #define SC_Y 0x2c #define SC_X 0x2d #define SC_C 0x2e #define SC_V 0x2f #define SC_B 0x30 #define SC_N 0x31 #define SC_M 0x32 #define SC_COMMA 0x33 #define SC_PERIOD 0x34 #define SC_MINUS 0x35 #define SC_CAPSLOCK 0x100 #endif MilkyTracker-1.02.00/src/ppui/Screen.cpp000066400000000000000000000445721324432207300177560ustar00rootroot00000000000000/* * ppui/Screen.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "DisplayDeviceBase.h" #include "GraphicsAbstract.h" #include "Screen.h" #include "Event.h" #include "ContextMenu.h" #include "TransparentContainer.h" void PPScreen::paintDragHighlite(PPGraphicsAbstract* g) { g->setRect(0,0,getWidth(), getHeight()); g->setColor(46517>>8, 54740>>8, 65535>>8); g->drawHLine(0, getWidth(), 0); g->drawHLine(0, getWidth(), 1); g->drawHLine(0, getWidth(), 2); g->drawHLine(0, getWidth(), getHeight() - 1); g->drawHLine(0, getWidth(), getHeight() - 2); g->drawHLine(0, getWidth(), getHeight() - 3); g->drawVLine(0, getHeight(), 0); g->drawVLine(0, getHeight(), 1); g->drawVLine(0, getHeight(), 2); g->drawVLine(0, getHeight(), getWidth() - 1); g->drawVLine(0, getHeight(), getWidth() - 2); g->drawVLine(0, getHeight(), getWidth() - 3); } PPScreen::PPScreen(PPDisplayDeviceBase* displayDevice, EventListenerInterface* eventListener /* = NULL */) : displayDevice(displayDevice), eventListener(eventListener), focusedControl(NULL), beforeModalFocusedControl(NULL), modalControl(NULL), showDragHilite(false), rootContainer(NULL), lastMouseOverControl(NULL) { contextMenuControls = new PPSimpleVector(16, false); timerEventControls = new PPSimpleVector(16, false); rootContainer = new PPTransparentContainer(-1, this, eventListener, PPPoint(0, 0), PPSize(displayDevice->getSize())); } PPScreen::~PPScreen() { delete contextMenuControls; delete timerEventControls; } void PPScreen::adjustEventMouseCoordinates(PPEvent* event) { if (!displayDevice->supportsScaling()) return; const pp_int32 scaleFactor = displayDevice->getScaleFactor(); if (scaleFactor == 1) return; PPPoint* p = (PPPoint*)event->getDataPtr(); p->x /= scaleFactor; p->y /= scaleFactor; } void PPScreen::raiseEvent(PPEvent* event) { if (event->isMouseEvent()) adjustEventMouseCoordinates(event); // route events to event listener first eventListener->handleEvent(reinterpret_cast(this), event); if (event->getID() == eInvalid) return; // route timer event if (event->getID() == eTimer) { for (pp_int32 i = 0; i < timerEventControls->size(); i++) { PPControl* control = timerEventControls->get(i); if (!control->isVisible() || !control->receiveTimerEvent()) continue; control->dispatchEvent(event); } return; } if (modalControl && modalControl->isVisible()) { // listener of the modal control also gets a chance to listen to these events if (modalControl->getEventListener() && modalControl->getEventListener() != eventListener) modalControl->getEventListener()->handleEvent(reinterpret_cast(this), event); // if the above listener removed the control we're out of here if (!modalControl) return; modalControl->dispatchEvent(event); return; } // ------- handle context menu ----------------------------------- if (contextMenuControls->size()) { pp_int32 i; bool handled = true; bool mouseMoveHandeled = false; if (event->getID() == eMouseMoved || event->getID() == eLMouseDrag) { for (i = 0; i < contextMenuControls->size(); i++) { PPControl* contextMenuControl = contextMenuControls->get(contextMenuControls->size()-1); PPPoint* p = (PPPoint*)event->getDataPtr(); if (contextMenuControl->hit(*p) && contextMenuControl->isActive()) { contextMenuControl->dispatchEvent(event); mouseMoveHandeled = true; } } } if (mouseMoveHandeled) return; for (i = 0; i < contextMenuControls->size(); i++) { PPControl* contextMenuControl = contextMenuControls->get(i); if (contextMenuControl && contextMenuControl->isVisible()) { switch (event->getID()) { case eLMouseDown: case eRMouseDown: { PPPoint* p = (PPPoint*)event->getDataPtr(); if (contextMenuControl->hit(*p) && contextMenuControl->isActive()) { contextMenuControl->dispatchEvent(event); } else { bool inOtherMenu = false; for (pp_int32 j = 0; j < contextMenuControls->size(); j++) if (contextMenuControls->get(j) != contextMenuControl && contextMenuControls->get(j)->hit(*p)) { inOtherMenu = true; break; } if (!inOtherMenu) { if (event->getID() == eRMouseDown || event->getID() == eLMouseDown) handled = true; if (static_cast(contextMenuControl)->getNotifyParentOnHide()) { setContextMenuControl(NULL, false); paint(false); EventListenerInterface* listener = contextMenuControl->getEventListener(); struct MetaData { pp_int32 id; PPPoint p; } metaData; metaData.id = event->getID(); metaData.p = *p; PPEvent e(eRemovedContextMenu, &metaData, sizeof(metaData)); listener->handleEvent(reinterpret_cast(contextMenuControl), &e); update(); } else { setContextMenuControl(NULL); } } } break; } default: contextMenuControl->dispatchEvent(event); } } } if (handled) return; } rootContainer->dispatchEvent(event); } void PPScreen::pauseUpdate(bool pause) { displayDevice->allowForUpdates(!pause); } void PPScreen::enableDisplay(bool enable) { displayDevice->enable(enable); } bool PPScreen::isDisplayEnabled() { return displayDevice->isEnabled(); } void PPScreen::clear() { PPGraphicsAbstract* g = displayDevice->open(); if (!g) return; g->setColor(0,0,0); g->setRect(0, 0, g->getWidth(), g->getHeight()); g->fill(); displayDevice->close(); displayDevice->update(); } void PPScreen::paint(bool update/*= true*/, bool clean/*=false*/) { if (displayDevice == NULL) return; PPGraphicsAbstract* g = displayDevice->open(); if (!g) return; if (clean) { g->setColor(0,0,0); g->setRect(0, 0, g->getWidth(), g->getHeight()); g->fill(); } /*g->setColor(255, 255, 255); pp_int32 step = 0; for (pp_int32 y = 0; y < sizeof(characters)/sizeof(pp_uint16); y++) { for (pp_int32 x = 0; x < 4; x++) { if ((characters[y]>>((3-x)<<2))&1) { g->setPixel(x+32,y+32+step); } } step += ((y%5)==4)*2; }*/ //g->setFont(PPFont::getFont(PPFont::FONT_SYSTEM)); //g->setColor(255, 255, 255); //g->drawChar('A',0,0); pp_int32 i; /*for (i = 0; i < controls.size(); i++) { PPControl* control = controls.get(i); if (control->isVisible()) controls.get(i)->paint(g); }*/ // modal control overlapping everything if (!(modalControl && modalControl->isVisible() && modalControl->getLocation().x == 0 && modalControl->getLocation().y == 0 && modalControl->getSize().width == getWidth() && modalControl->getSize().height == getHeight())) { rootContainer->paint(g); for (i = 0; i < contextMenuControls->size(); i++) { PPControl* control = contextMenuControls->get(i); control->paint(g); } } if (modalControl) modalControl->paint(g); if (showDragHilite) paintDragHighlite(g); displayDevice->close(); if (update) displayDevice->update(); } void PPScreen::paintContextMenuControl(PPControl* control, bool update/* = true*/) { if (displayDevice == NULL || !control->isVisible()) return; PPGraphicsAbstract* g = displayDevice->open(); if (!g) return; for (pp_int32 i = 0; i < contextMenuControls->size(); i++) { PPControl* ctrl = contextMenuControls->get(i); ctrl->paint(g); } if (modalControl) { PPControl* ctrl = modalControl; ctrl->paint(g); } displayDevice->close(); if (update) { PPRect rect = control->getBoundingRect(); rect.x1--; if (rect.x1 < 0) rect.x1 = 0; rect.y1--; if (rect.y1 < 0) rect.y1 = 0; rect.x2++; if (rect.x2 > getWidth()) rect.x2 = getWidth(); rect.y2++; if (rect.y2 > getHeight()) rect.y2 = getHeight(); displayDevice->update(rect); } } void PPScreen::paintControl(PPControl* control, bool update/*= true*/) { if (displayDevice == NULL || !control->isVisible()) return; PPGraphicsAbstract* g = displayDevice->open(); if (!g) return; // modal control overlapping everything if (modalControl && modalControl->isVisible() && modalControl->getLocation().x == 0 && modalControl->getLocation().y == 0 && modalControl->getSize().width == getWidth() && modalControl->getSize().height == getHeight()) { // see whether the control we shall paint is a child of the modal control // if it's not, we don't need to paint it, because the modal control overlaps us PPControl* parent = control->getOwnerControl(); bool isModalControlChild = (parent == NULL); while (parent != NULL) { if (parent == modalControl) { isModalControlChild = true; break; } control = parent; parent = control->getOwnerControl(); } if (!isModalControlChild) return; } control->paint(g); bool paintContextMenus = false; for (pp_int32 i = 0; i < contextMenuControls->size(); i++) { PPControl* ctrl = contextMenuControls->get(i); if (ctrl->getBoundingRect().intersect(control->getBoundingRect())) { paintContextMenus = true; break; } } if (paintContextMenus) { for (pp_int32 i = 0; i < contextMenuControls->size(); i++) { PPControl* ctrl = contextMenuControls->get(i); ctrl->paint(g); } } if (modalControl) { // if the modal control hits the control to draw we also need to refresh the modal control if (modalControl->getBoundingRect().intersect(control->getBoundingRect())) modalControl->paint(g); } displayDevice->close(); if (update) { updateControl(control); } } void PPScreen::paintSplash(const pp_uint8* rawData, pp_uint32 width, pp_uint32 height, pp_uint32 pitch, pp_uint32 bpp, pp_int32 intensity/* = 256*/) { PPGraphicsAbstract* g = displayDevice->open(); if (!g) return; PPPoint p; p.x = g->getWidth() / 2 - width / 2; p.y = g->getHeight() / 2 - height / 2; PPSize s; s.width = width; s.height = height; g->blit(rawData, p, s, pitch, bpp, intensity); displayDevice->close(); displayDevice->update(); } void PPScreen::update() { if (displayDevice) { if (showDragHilite) { PPGraphicsAbstract* g = displayDevice->open(); paintDragHighlite(g); displayDevice->close(); } displayDevice->update(); } } void PPScreen::updateControl(PPControl* control) { PPRect rect = control->getBoundingRect(); rect.x1--; if (rect.x1 < 0) rect.x1 = 0; rect.y1--; if (rect.y1 < 0) rect.y1 = 0; rect.x2++; if (rect.x2 > getWidth()) rect.x2 = getWidth(); rect.y2++; if (rect.y2 > getHeight()) rect.y2 = getHeight(); displayDevice->update(rect); } void PPScreen::setFocus(PPControl* control, bool repaint/* = true*/) { PPSimpleVector chain(0, false); PPControl* ctrl = NULL; if (control == NULL) { rootContainer->setFocus(NULL); return; } else { ctrl = control; chain.add(ctrl); } if (ctrl == NULL) return; while (ctrl->getOwnerControl()) { PPControl* parent = ctrl->getOwnerControl(); ctrl = parent; if (ctrl->isContainer()) chain.add(ctrl); } for (pp_int32 i = chain.size()-1; i > 0; i--) { if (chain.get(i)->isContainer()) { static_cast(chain.get(i))->setFocus(chain.get(i-1), repaint); } } } PPControl* PPScreen::getFocusedControl() const { // first we need to find the control which is at the end of the focus hierarchy PPControl* parent = rootContainer; while (parent->isContainer() && static_cast(parent)->getFocusedControl()) { parent = static_cast(parent)->getFocusedControl(); } // if this is still a container this is not what we want => NULL return parent->isContainer() ? NULL : parent; } bool PPScreen::hasFocus(PPControl* control) const { // if the client is asking for container focus we first need to find the control // which is at the end of the focus hierarchy (see above) PPControl* parent = control; while (parent->isContainer() && static_cast(parent)->getFocusedControl()) { parent = static_cast(parent)->getFocusedControl(); } // now if those controls match, we're in focus return getFocusedControl() == parent; } void PPScreen::addControl(PPControl* control) { rootContainer->addControl(control); } bool PPScreen::removeControl(PPControl* control) { return rootContainer->removeControl(control); } void PPScreen::addTimerEventControl(PPControl* control) { if (control->receiveTimerEvent() && !control->isContainer()) timerEventControls->add(control); } bool PPScreen::removeTimerEventControl(PPControl* control) { bool res = false; for (pp_int32 i = 0; i < timerEventControls->size(); i++) { if (timerEventControls->get(i) == control) { timerEventControls->remove(i); res = true; } } return res; } PPControl* PPScreen::getControlByID(pp_int32 id) const { return rootContainer->getControlByID(id); } void PPScreen::releaseCaughtControls() { // uncatch controls within containers PPControl* parent = rootContainer; while (parent->isContainer() && static_cast(parent)->caughtControl && static_cast(parent)->currentlyPressedMouseButtons != 0) { PPControl* caughtControl = static_cast(parent)->caughtControl; static_cast(parent)->caughtControl = NULL; static_cast(parent)->currentlyPressedMouseButtons = 0; parent = caughtControl; } } void PPScreen::setModalControl(PPControl* control, bool repaint/* = true*/) { // Hide open menus first setContextMenuControl(NULL, false); if (modalControl) { PPEvent event(eFocusLostNoRepaint); modalControl->dispatchEvent(&event); modalControl->show(false); } if (control) { // uncatch controls within containers releaseCaughtControls(); PPEvent event(eFocusGainedNoRepaint); control->dispatchEvent(&event); control->show(true); } else if (focusedControl) { PPEvent event(eFocusGainedNoRepaint); focusedControl->dispatchEvent(&event); } modalControl = control; if (repaint) paint(); } void PPScreen::setContextMenuControl(PPControl* control, bool repaint/* = true*/) { if (control == NULL && !contextMenuControls->size()) return; PPEvent event(eFocusLost); PPEvent event2(eFocusGained); for (pp_int32 i = 0; i < contextMenuControls->size(); i++) contextMenuControls->get(i)->dispatchEvent(&event); delete contextMenuControls; contextMenuControls = new PPSimpleVector(16, false); if (control) { // uncatch controls within containers releaseCaughtControls(); control->dispatchEvent(&event2); contextMenuControls->add(control); } if (repaint) paint(); } void PPScreen::addContextMenuControl(PPControl* control, bool repaint/* = true*/) { PPEvent event(eFocusLost); PPEvent event2(eFocusGained); if (control) { control->dispatchEvent(&event2); contextMenuControls->add(control); } if (repaint) paint(); } bool PPScreen::removeContextMenuControl(PPControl* control, bool repaint/* = true*/) { if (!contextMenuControls->size()) return false; bool res = false; for (pp_int32 i = 0; i < contextMenuControls->size(); i++) if (contextMenuControls->get(i) == control) { contextMenuControls->remove(i); res = true; } if (res && repaint) paint(); return res; } bool PPScreen::removeLastContextMenuControl(bool repaint/* = true*/) { if (contextMenuControls->size()) { contextMenuControls->remove(contextMenuControls->size()-1); if (repaint) paint(); return true; } return false; } bool PPScreen::hasContextMenu(PPControl* control) const { if (!contextMenuControls->size()) return false; for (pp_int32 i = 0; i < contextMenuControls->size(); i++) if (contextMenuControls->get(i) == control) return true; return false; } void PPScreen::setShowDragHilite(bool b) { showDragHilite = b; if (!b) { PPGraphicsAbstract* g = displayDevice->open(); paintDragHighlite(g); displayDevice->close(); } paint(); } pp_int32 PPScreen::getWidth() const { if (displayDevice == NULL) return -1; return displayDevice->getSize().width; } pp_int32 PPScreen::getHeight() const { if (displayDevice == NULL) return -1; return displayDevice->getSize().height; } pp_int32 PPScreen::getDefaultWidth() { return PPDisplayDeviceBase::getDefaultWidth(); } pp_int32 PPScreen::getDefaultHeight() { return PPDisplayDeviceBase::getDefaultHeight(); } void PPScreen::setTitle(const PPSystemString& title) { if (displayDevice) displayDevice->setTitle(title); } void PPScreen::setSize(const PPSize& size) { if (displayDevice) displayDevice->setSize(size); rootContainer->setSize(size); } bool PPScreen::supportsScaling() const { if (displayDevice) return displayDevice->supportsScaling(); return false; } pp_int32 PPScreen::getScaleFactor() const { if (displayDevice) return displayDevice->getScaleFactor(); return 1; } bool PPScreen::goFullScreen(bool b) { if (displayDevice) return displayDevice->goFullScreen(b); return false; } bool PPScreen::isFullScreen() const { if (displayDevice) return displayDevice->isFullScreen(); return false; } PPSize PPScreen::getDisplayResolution() const { PPSize size(-1, -1); if (displayDevice) size = displayDevice->getDisplayResolution(); return size; } void PPScreen::signalWaitState(bool b, const PPColor& color) { if (displayDevice) displayDevice->signalWaitState(b, color); } void PPScreen::setMouseCursor(MouseCursorTypes type) { if (displayDevice) displayDevice->setMouseCursor(type); } MouseCursorTypes PPScreen::getCurrentActiveMouseCursor() const { if (displayDevice) return (MouseCursorTypes)displayDevice->getCurrentActiveMouseCursor(); return MouseCursorTypeStandard; } void PPScreen::shutDown() { if (displayDevice) displayDevice->shutDown(); } MilkyTracker-1.02.00/src/ppui/Screen.h000066400000000000000000000114651324432207300174160ustar00rootroot00000000000000/* * ppui/Screen.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ ///////////////////////////////////////////////////////////////// // // PPScreen class // ----------------------------------------------------------- // The PPScreen object acts as container for controls // Each control is a rectangular area on screen. // The screen is responsible for drawing the controls if // necessary (although the actual painting is implemented by // the control itself) // The screen will also send low level events from the OS // to the affected control(s) ///////////////////////////////////////////////////////////////// #ifndef SCREEN__H #define SCREEN__H #include "Object.h" #include "DisplayDeviceBase.h" #include "SimpleVector.h" #include "Control.h" // Forwards class PPControl; class PPEvent; class EventListenerInterface; class PPContainer; class GraphicsAbstract; class PPScreen : public PPObject { protected: PPDisplayDeviceBase* displayDevice; EventListenerInterface* eventListener; PPControl* focusedControl; PPControl* beforeModalFocusedControl; //PPControl* contextMenuControl; PPSimpleVector* contextMenuControls; PPControl* modalControl; PPSimpleVector controls; PPSimpleVector* timerEventControls; bool showDragHilite; PPContainer* rootContainer; private: PPPoint lastMousePoint; PPControl* lastMouseOverControl; void paintDragHighlite(PPGraphicsAbstract* g); void adjustEventMouseCoordinates(PPEvent* event); public: PPScreen(PPDisplayDeviceBase* displayDevice, EventListenerInterface* eventListener = NULL); virtual ~PPScreen(); void attachEventListener(EventListenerInterface* eventListener) { this->eventListener = eventListener; } EventListenerInterface* detachEventListener() { EventListenerInterface* theListener = eventListener; eventListener = NULL; return theListener; } void raiseEvent(PPEvent* event); void clear(); void paint(bool update = true, bool clean = false); void paintContextMenuControl(PPControl* control, bool update = true); void paintControl(PPControl* control, bool update = true); void paintSplash(const pp_uint8* rawData, pp_uint32 width, pp_uint32 height, pp_uint32 pitch, pp_uint32 bpp, pp_int32 intensity = 256); void update(); void updateControl(PPControl* control); void pauseUpdate(bool pause); void enableDisplay(bool enable); bool isDisplayEnabled(); void setFocus(PPControl* control, bool repaint = true); PPControl* getFocusedControl() const; bool hasFocus(PPControl* control) const; void addControl(PPControl* control); bool removeControl(PPControl* control); void addTimerEventControl(PPControl* control); bool removeTimerEventControl(PPControl* control); PPControl* getControlByID(pp_int32 id) const; PPControl* getModalControl() const { return modalControl; } void releaseCaughtControls(); void setModalControl(PPControl* control, bool repaint = true); void setContextMenuControl(PPControl* control, bool repaint = true); void addContextMenuControl(PPControl* control, bool repaint = true); bool removeContextMenuControl(PPControl* control, bool repaint = true); bool removeLastContextMenuControl(bool repaint = true); bool hasContextMenu(PPControl* control) const; PPControl* getContextMenuControl(pp_int32 index = 0) const { return index < contextMenuControls->size() ? contextMenuControls->get(index) : NULL; } PPControl* getLastContextMenuControl() const { return contextMenuControls->size() ? contextMenuControls->get(contextMenuControls->size()-1) : NULL; } void setShowDragHilite(bool b); // -------------- PPDisplayDevice Delegates ------------------- pp_int32 getWidth() const; pp_int32 getHeight() const; static pp_int32 getDefaultWidth(); static pp_int32 getDefaultHeight(); void setSize(const PPSize& size); bool supportsScaling() const; pp_int32 getScaleFactor() const; bool goFullScreen(bool b); bool isFullScreen() const; PPSize getDisplayResolution() const; void setTitle(const PPSystemString& title); void signalWaitState(bool b, const PPColor& color); void setMouseCursor(MouseCursorTypes type); MouseCursorTypes getCurrentActiveMouseCursor() const; void shutDown(); }; #endif MilkyTracker-1.02.00/src/ppui/ScrollBar.h000066400000000000000000000047441324432207300200640ustar00rootroot00000000000000/* * ppui/ScrollBar.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ ///////////////////////////////////////////////////////////////// // // PPScrollbar control class // ///////////////////////////////////////////////////////////////// #ifndef SCROLLBAR__H #define SCROLLBAR__H //#ifndef __LOWRES__ #define SCROLLBUTTONSIZE 10 //#else // #define SCROLLBUTTONSIZE 8 //#endif #include "BasicTypes.h" #include "Control.h" #include "Event.h" // Forwards class PPGraphicsAbstract; class PPButton; class PPScrollbar : public PPControl, public EventListenerInterface { private: const PPColor* backgroundColor; pp_uint32 oneDimSize; bool horizontal; PPButton* backgroundButton; PPButton* buttonUp; PPButton* buttonDown; PPButton* buttonBar; PPControl* caughtControl; bool controlCaughtByLMouseButton, controlCaughtByRMouseButton; PPPoint caughtMouseLocation, caughtControlLocation; pp_int32 currentBarSize, currentBarPosition; //bool pressed; void initButtons(); public: PPScrollbar(pp_int32 id, PPScreen* parentScreen, EventListenerInterface* eventListener, const PPPoint& location, pp_int32 size, bool horizontal = false); virtual ~PPScrollbar(); void setBackgroundColor(const PPColor& color) { backgroundColor = &color; } // set bar size [none:0 - full:65536] void setBarSize(pp_int32 size, bool repaint = false); // set bar position [0 - 65536] void setBarPosition(pp_int32 pos, bool repaint = false); pp_uint32 getBarSize() const { return currentBarSize; } pp_uint32 getBarPosition() const { return currentBarPosition; } virtual void paint(PPGraphicsAbstract* graphics); virtual pp_int32 dispatchEvent(PPEvent* event); pp_int32 handleEvent(PPObject* sender, PPEvent* event); virtual void setLocation(const PPPoint& location); virtual void setSize(pp_uint32 size); }; #endif MilkyTracker-1.02.00/src/ppui/Scrollbar.cpp000066400000000000000000000440531324432207300204540ustar00rootroot00000000000000/* * ppui/Scrollbar.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "ScrollBar.h" #include "GraphicsAbstract.h" #include "Button.h" #include "Event.h" #include "Screen.h" #include "Seperator.h" #include "PPUIConfig.h" class SliderButton : public PPButton { private: bool horizontal; bool up; public: SliderButton(pp_int32 id, PPScreen* parentScreen, EventListenerInterface* eventListener, PPPoint location, PPSize size, bool horiz = true, bool up = true) : PPButton(id, parentScreen, eventListener, location, size, false, true, true), horizontal(horiz), up(up) { } virtual void paint(PPGraphicsAbstract* g) { if (!isVisible()) return; PPButton::paint(g); g->setColor(0,0,0); PPPoint location = this->location; if (isPressed()) { location.x++; location.y++; } PPSize b = getSize(); // draw fancy triangles if (up) { const pp_int32 size = (b.width>>1)-2; const pp_int32 xo = ((b.width >> 1) - size)-1; const pp_int32 yo = ((b.width >> 1) - (size>>1))-1; for (pp_int32 j = 0; j <= size; j++) for (pp_int32 i = 0; i < (size*2+1)-j*2; i++) { pp_int32 x = i+j, y = j; if (horizontal) g->setPixel(size-y+yo+location.x, x+xo+location.y); else g->setPixel(x+xo+location.x, size-y+yo+location.y); } } else { const pp_int32 size = (b.width>>1)-2; const pp_int32 xo = ((b.width >> 1) - size)-1; const pp_int32 yo = ((b.width >> 1) - (size>>1))-1; for (pp_int32 j = 0; j <= size; j++) for (pp_int32 i = 0; i < (size*2+1)-j*2; i++) { pp_int32 x = i+j, y = j; if (horizontal) g->setPixel(y+yo+location.x, x+xo+location.y); else g->setPixel(x+xo+location.x, y+yo+location.y); } } } }; class SliderBarButton : public PPButton { private: PPSeperator* seperators[3]; bool horizontal; public: SliderBarButton(pp_int32 id, PPScreen* parentScreen, EventListenerInterface* eventListener, PPPoint location, PPSize size, bool border = true, bool clickable = true, bool update = true, bool horiz = true) : PPButton(id, parentScreen, eventListener, location, size, border, clickable, update), horizontal(horiz) { seperators[0] = new PPSeperator(0, parentScreen, PPPoint(0, 0), SCROLLBUTTONSIZE - 6, *getColor(), !horizontal); seperators[1] = new PPSeperator(0, parentScreen, PPPoint(0, 0), SCROLLBUTTONSIZE - 6, *getColor(), !horizontal); seperators[2] = new PPSeperator(0, parentScreen, PPPoint(0, 0), SCROLLBUTTONSIZE - 6, *getColor(), !horizontal); } virtual ~SliderBarButton() { delete seperators[0]; delete seperators[1]; delete seperators[2]; } virtual void paint(PPGraphicsAbstract* g) { if (!isVisible()) return; PPButton::paint(g); if ((horizontal && getSize().width < 20) || (!horizontal && getSize().height < 20)) return; PPPoint p(horizontal ? getLocation().x + getSize().width / 2 - 4 : getLocation().x + 2, horizontal ? getLocation().y + 2 : getLocation().y + getSize().height / 2 - 3); if (isPressed()) { p.x++; p.y++; } for (pp_int32 i = 0; i < 3; i++) { seperators[0]->setLocation(p); seperators[0]->paint(g); if (horizontal) p.x+=3; else p.y+=2; } } }; void PPScrollbar::initButtons() { PPPoint buttonDownPos, buttonBarPos; PPSize buttonBarSize; if (horizontal) { this->size.height = SCROLLBUTTONSIZE; this->size.width = oneDimSize; buttonDownPos = PPPoint(location.x + oneDimSize - SCROLLBUTTONSIZE, location.y); buttonBarPos = PPPoint(location.x + SCROLLBUTTONSIZE, location.y); buttonBarSize = PPSize((oneDimSize - SCROLLBUTTONSIZE*2), SCROLLBUTTONSIZE); } else { this->size.width = SCROLLBUTTONSIZE; this->size.height = oneDimSize; buttonDownPos = PPPoint(location.x, location.y + oneDimSize - SCROLLBUTTONSIZE); buttonBarPos = PPPoint(location.x, location.y + SCROLLBUTTONSIZE); buttonBarSize = PPSize(SCROLLBUTTONSIZE, (oneDimSize - SCROLLBUTTONSIZE*2)); } backgroundButton = new PPButton(0, parentScreen, NULL, /*_Point(location.x + (horizontal?0:1), location.y + (horizontal?1:0))*/location, this->size, false); backgroundButton->setColor(*backgroundColor); backgroundButton->setInvertShading(true); buttonUp = new SliderButton(0, parentScreen, this, location, PPSize(SCROLLBUTTONSIZE,SCROLLBUTTONSIZE), horizontal, true); buttonDown = new SliderButton(0, parentScreen, this, buttonDownPos , PPSize(SCROLLBUTTONSIZE,SCROLLBUTTONSIZE), horizontal, false); buttonBar = new SliderBarButton(0, parentScreen, this, buttonBarPos, buttonBarSize, false, false, true, horizontal); setBarSize(currentBarSize); setBarPosition(currentBarPosition); } PPScrollbar::PPScrollbar(pp_int32 id, PPScreen* parentScreen, EventListenerInterface* eventListener, const PPPoint& location, pp_int32 size, bool horizontal) : PPControl(id, parentScreen, eventListener, location, PPSize(0,0)), oneDimSize(size), horizontal(horizontal), controlCaughtByLMouseButton(false), controlCaughtByRMouseButton(false), currentBarSize(65536), currentBarPosition(0), backgroundColor(&PPUIConfig::getInstance()->getColor(PPUIConfig::ColorScrollBarBackground)) { initButtons(); caughtControl = NULL; } PPScrollbar::~PPScrollbar() { delete backgroundButton; delete buttonUp; delete buttonDown; delete buttonBar; } void PPScrollbar::paint(PPGraphicsAbstract* g) { if (!isVisible()) return; backgroundButton->paint(g); buttonDown->paint(g); buttonUp->paint(g); buttonBar->paint(g); } void PPScrollbar::setBarSize(pp_int32 size, bool repaint /* = true */) { if (size < 0) size = 0; if (size > 65536) size = 65536; currentBarSize = size; pp_int32 newSize = (((horizontal?this->size.width:this->size.height) - SCROLLBUTTONSIZE*2) * size)>>16; if (horizontal) { buttonBar->setSize(PPSize(newSize, this->size.height)); } else { buttonBar->setSize(PPSize(this->size.width, newSize)); } if (repaint) parentScreen->paintControl(this); } void PPScrollbar::setBarPosition(pp_int32 pos, bool repaint /* = true */) { if (pos < 0) pos = 0; if (pos > 65536) pos = 65536; currentBarPosition = pos; pp_int32 size = (horizontal?buttonBar->getSize().width:buttonBar->getSize().height); pp_int32 entireSize = (horizontal?this->size.width:this->size.height) - SCROLLBUTTONSIZE*2; pp_int32 maxPos = entireSize-size; pp_int32 newPos = (maxPos*pos)>>16; PPPoint p = location; if (horizontal) p.x+=newPos + SCROLLBUTTONSIZE; else p.y+=newPos + SCROLLBUTTONSIZE; buttonBar->setLocation(p); if (repaint) parentScreen->paintControl(this); } pp_int32 PPScrollbar::dispatchEvent(PPEvent* event) { //if (!visible) // return 0; switch (event->getID()) { case eLMouseDown: { PPPoint* p = (PPPoint*)event->getDataPtr(); if (buttonUp->hit(*p)) { caughtControl = buttonUp; caughtControl->dispatchEvent(event); controlCaughtByLMouseButton = true; } else if (buttonDown->hit(*p)) { caughtControl = buttonDown; caughtControl->dispatchEvent(event); controlCaughtByLMouseButton = true; } else if (buttonBar->hit(*p)) { caughtControl = buttonBar; // ------------------------- buttonBar->setPressed(true); parentScreen->paintControl(buttonBar); // ------------------------- caughtMouseLocation = *p; caughtControlLocation = buttonBar->getLocation(); caughtControl->dispatchEvent(event); controlCaughtByLMouseButton = true; } else if (backgroundButton->hit(*p)) { handleEvent(reinterpret_cast(backgroundButton), event); } break; } case eLMouseUp: controlCaughtByLMouseButton = false; if (caughtControl == NULL) break; if (controlCaughtByRMouseButton) { caughtControl->dispatchEvent(event); break; } // ------------------------- if (reinterpret_cast(caughtControl) == buttonBar) { buttonBar->setPressed(false); parentScreen->paintControl(buttonBar); } // ------------------------- caughtControl->dispatchEvent(event); caughtControl = NULL; break; case eLMouseRepeat: { if (caughtControl) { caughtControl->dispatchEvent(event); break; } else { PPPoint* p = (PPPoint*)event->getDataPtr(); /*if (backgroundButton->hit(*p)) { handleEvent(reinterpret_cast(backgroundButton), event); } PPPoint* p = (PPPoint*)event->getDataPtr();*/ if (backgroundButton->hit(*p) && !buttonBar->hit(*p)) { handleEvent(reinterpret_cast(backgroundButton), event); } else if (buttonBar->hit(*p)) { // ------------------------- buttonBar->setPressed(true); parentScreen->paintControl(buttonBar); // ------------------------- caughtControl = buttonBar; caughtMouseLocation = *p; caughtControlLocation = buttonBar->getLocation(); caughtControl->dispatchEvent(event); } } break; } case eRMouseDown: { PPPoint* p = (PPPoint*)event->getDataPtr(); if (buttonUp->hit(*p)) { caughtControl = buttonUp; caughtControl->dispatchEvent(event); controlCaughtByRMouseButton = true; } else if (buttonDown->hit(*p)) { caughtControl = buttonDown; caughtControl->dispatchEvent(event); controlCaughtByRMouseButton = true; } else if (buttonBar->hit(*p)) { caughtControl = buttonBar; // ------------------------- buttonBar->setPressed(true); parentScreen->paintControl(buttonBar); // ------------------------- caughtMouseLocation = *p; caughtControlLocation = buttonBar->getLocation(); caughtControl->dispatchEvent(event); controlCaughtByRMouseButton = true; } else if (backgroundButton->hit(*p)) { handleEvent(reinterpret_cast(backgroundButton), event); } break; } case eRMouseUp: controlCaughtByRMouseButton = false; if (caughtControl == NULL) break; if (controlCaughtByLMouseButton) { caughtControl->dispatchEvent(event); break; } // ------------------------- if (reinterpret_cast(caughtControl) == buttonBar) { buttonBar->setPressed(false); parentScreen->paintControl(buttonBar); } // ------------------------- caughtControl->dispatchEvent(event); caughtControl = NULL; break; case eRMouseRepeat: { if (caughtControl) { caughtControl->dispatchEvent(event); break; } else { /*PPPoint* p = (PPPoint*)event->getDataPtr(); if (backgroundButton->hit(*p)) { handleEvent(reinterpret_cast(backgroundButton), event); }*/ PPPoint* p = (PPPoint*)event->getDataPtr(); if (backgroundButton->hit(*p) && !buttonBar->hit(*p)) { handleEvent(reinterpret_cast(backgroundButton), event); } else if (buttonBar->hit(*p)) { // ------------------------- buttonBar->setPressed(true); parentScreen->paintControl(buttonBar); // ------------------------- caughtControl = buttonBar; caughtMouseLocation = *p; caughtControlLocation = buttonBar->getLocation(); caughtControl->dispatchEvent(event); } } break; } //case eLMouseDrag: default: if (caughtControl == NULL) break; caughtControl->dispatchEvent(event); break; } return 0; } pp_int32 PPScrollbar::handleEvent(PPObject* sender, PPEvent* event) { if ( (event->getID() == eLMouseUp && sender == reinterpret_cast(buttonUp)) || (event->getID() == eLMouseRepeat && sender == reinterpret_cast(buttonUp)) || (event->getID() == eRMouseUp && sender == reinterpret_cast(buttonUp)) || (event->getID() == eRMouseRepeat && sender == reinterpret_cast(buttonUp)) ) { // Call parent event listener PPEvent e(eBarScrollUp); return eventListener->handleEvent(reinterpret_cast(this), &e); } if ( (event->getID() == eLMouseUp && sender == reinterpret_cast(buttonDown)) || (event->getID() == eLMouseRepeat && sender == reinterpret_cast(buttonDown)) || (event->getID() == eRMouseUp && sender == reinterpret_cast(buttonDown)) || (event->getID() == eRMouseRepeat && sender == reinterpret_cast(buttonDown)) ) { // Call parent event listener PPEvent e(eBarScrollDown); return eventListener->handleEvent(reinterpret_cast(this), &e); } else if (/*event->getID() == eLMouseDown &&*/ sender == reinterpret_cast(backgroundButton)) { if (horizontal) { PPPoint* p = (PPPoint*)event->getDataPtr(); if (p->x < buttonBar->getLocation().x) { pp_int32 bsize = buttonBar->getSize().width; pp_int32 entireSize = size.width - SCROLLBUTTONSIZE*2; float f = (float)entireSize/(float)(entireSize - bsize); currentBarPosition-=(pp_int32)(currentBarSize*f); if (currentBarPosition < 0) currentBarPosition = 0; setBarPosition(currentBarPosition); // Call parent event listener PPEvent e(eBarPosChanged); return eventListener->handleEvent(reinterpret_cast(this), &e); } else if (p->x > buttonBar->getLocation().x + buttonBar->getSize().width) { pp_int32 bsize = buttonBar->getSize().width; pp_int32 entireSize = size.width - SCROLLBUTTONSIZE*2; float f = (float)entireSize/(float)(entireSize - bsize); currentBarPosition+=(pp_int32)(currentBarSize*f); if (currentBarPosition > 65536) currentBarPosition = 65536; setBarPosition(currentBarPosition); // Call parent event listener PPEvent e(eBarPosChanged); return eventListener->handleEvent(reinterpret_cast(this), &e); } } else { PPPoint* p = (PPPoint*)event->getDataPtr(); if (p->y < buttonBar->getLocation().y) { pp_int32 bsize = buttonBar->getSize().height; pp_int32 entireSize = size.height - SCROLLBUTTONSIZE*2; float f = (float)entireSize/(float)(entireSize - bsize); currentBarPosition-=(pp_int32)(currentBarSize*f); if (currentBarPosition < 0) currentBarPosition = 0; setBarPosition(currentBarPosition); // Call parent event listener PPEvent e(eBarPosChanged); return eventListener->handleEvent(reinterpret_cast(this), &e); } else if (p->y > buttonBar->getLocation().y + buttonBar->getSize().height) { pp_int32 bsize = buttonBar->getSize().height; pp_int32 entireSize = size.height - SCROLLBUTTONSIZE*2; float f = (float)entireSize/(float)(entireSize - bsize); currentBarPosition+=(pp_int32)(currentBarSize*f); if (currentBarPosition > 65536) currentBarPosition = 65536; setBarPosition(currentBarPosition); // Call parent event listener PPEvent e(eBarPosChanged); return eventListener->handleEvent(reinterpret_cast(this), &e); } } } else if ((event->getID() == eLMouseDrag && sender == reinterpret_cast(buttonBar)) || (event->getID() == eRMouseDrag && sender == reinterpret_cast(buttonBar))) { PPPoint* p = (PPPoint*)event->getDataPtr(); pp_int32 pos = 0,dx,nx; if (horizontal) { dx = (p->x - caughtMouseLocation.x); /*if (dx < 0) { __asm { int 3 } }*/ nx = caughtControlLocation.x + dx; //if (nx < location.x + SCROLLBUTTONSIZE) // nx = location.x + SCROLLBUTTONSIZE; //if (nx > location.x + size.width - SCROLLBUTTONSIZE*2 - buttonBar->getSize().width) // nx = location.x + size.width - SCROLLBUTTONSIZE*2 - buttonBar->getSize().width; nx-=(location.x + SCROLLBUTTONSIZE); pp_int32 d = (size.width - buttonBar->getSize().width - SCROLLBUTTONSIZE*2); if (d != 0) pos = nx*65536 / d; } else { dx = (p->y - caughtMouseLocation.y); /*if (dx < 0) { __asm { int 3 } }*/ nx = caughtControlLocation.y + dx; //if (nx < location.x + SCROLLBUTTONSIZE) // nx = location.x + SCROLLBUTTONSIZE; //if (nx > location.x + size.width - SCROLLBUTTONSIZE*2 - buttonBar->getSize().width) // nx = location.x + size.width - SCROLLBUTTONSIZE*2 - buttonBar->getSize().width; nx-=(location.y + SCROLLBUTTONSIZE); pp_int32 d = (size.height - buttonBar->getSize().height - SCROLLBUTTONSIZE*2); if (d != 0) pos = nx*65536 / d; } setBarPosition(pos); // Call parent event listener PPEvent e(eBarPosChanged); return eventListener->handleEvent(reinterpret_cast(this), &e); } return 0; } void PPScrollbar::setLocation(const PPPoint& location) { PPControl::setLocation(location); delete backgroundButton; delete buttonUp; delete buttonDown; delete buttonBar; initButtons(); } void PPScrollbar::setSize(pp_uint32 size) { PPPoint buttonDownPos, buttonBarPos; PPSize buttonBarSize; if (horizontal) { this->size.height = SCROLLBUTTONSIZE; this->size.width = size; buttonDownPos = PPPoint(location.x + size - SCROLLBUTTONSIZE, location.y); buttonBarPos = PPPoint(location.x + SCROLLBUTTONSIZE, location.y); buttonBarSize = PPSize((size - SCROLLBUTTONSIZE*2), SCROLLBUTTONSIZE); } else { this->size.width = SCROLLBUTTONSIZE; this->size.height = size; buttonDownPos = PPPoint(location.x, location.y + size - SCROLLBUTTONSIZE); buttonBarPos = PPPoint(location.x, location.y + SCROLLBUTTONSIZE); buttonBarSize = PPSize(SCROLLBUTTONSIZE, (size - SCROLLBUTTONSIZE*2)); } backgroundButton->setLocation(location); backgroundButton->setSize(this->size); buttonUp->setLocation(location); buttonDown->setLocation(buttonDownPos); } MilkyTracker-1.02.00/src/ppui/Seperator.cpp000066400000000000000000000041101324432207300204630ustar00rootroot00000000000000/* * ppui/Seperator.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * PPSeperator.cpp * MilkyTracker * * Created by Peter Barth on 16.03.05. * */ #include "Seperator.h" #include "GraphicsAbstract.h" PPSeperator::PPSeperator(pp_int32 id, PPScreen* parentScreen, const PPPoint& location, pp_uint32 size, const PPColor& theColor, bool horizontal/* = true*/) : PPControl(id, parentScreen, NULL, location, PPSize(0,0)), horizontal(horizontal), color(&theColor) { if (horizontal) { this->size.width = size; this->size.height = 2; } else { this->size.height = size; this->size.width = 2; } } void PPSeperator::paint(PPGraphicsAbstract* g) { if (!isVisible()) return; g->setRect(location.x, location.y, location.x + size.width+1, location.y + size.height+1); //g->setColor(color); PPColor bColor = *color, dColor = *color; // adjust dark color dColor.scaleFixed(20000); // adjust bright color bColor.scaleFixed(87163); if (horizontal) { g->setColor(dColor); g->drawHLine(location.x, location.x + size.width, location.y); } else { g->setColor(dColor); g->drawVLine(location.y, location.y + size.height, location.x); } if (horizontal) { g->setColor(bColor); g->drawHLine(location.x+1, location.x +1+ size.width, location.y+1); } else { g->setColor(bColor); g->drawVLine(location.y+1, location.y +1+ size.height, location.x+1); } } MilkyTracker-1.02.00/src/ppui/Seperator.h000066400000000000000000000024531324432207300201400ustar00rootroot00000000000000/* * ppui/Seperator.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * Seperator.h * MilkyTracker * * Created by Peter Barth on 16.03.05. * */ #ifndef SEPERATOR__H #define SEPERATOR__H #include "BasicTypes.h" #include "Control.h" class PPSeperator : public PPControl { private: bool horizontal; const PPColor* color; public: PPSeperator(pp_int32 id, PPScreen* parentScreen, const PPPoint& location, pp_uint32 size, const PPColor& theColor, bool horizontal = true); void setColor(const PPColor& color) { this->color = &color; } virtual void paint(PPGraphicsAbstract* graphics); }; #endif MilkyTracker-1.02.00/src/ppui/SimpleVector.h000066400000000000000000000116231324432207300206070ustar00rootroot00000000000000/* * ppui/SimpleVector.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #ifndef SIMPLEVECTOR__H #define SIMPLEVECTOR__H #include "BasicTypes.h" template class PPSimpleVector { private: pp_int32 numValuesAllocated; Type** values; pp_int32 numValues; bool destroy; void reallocate() { Type** values = new Type*[numValuesAllocated]; for (pp_int32 i = 0; i < numValues; i++) { values[i] = this->values[i]; } delete[] this->values; this->values = values; } // no copy construction please PPSimpleVector(const PPSimpleVector&); PPSimpleVector& operator=(const PPSimpleVector&); public: PPSimpleVector(pp_int32 initialSize = 0, bool destroy = true) { this->destroy = destroy; if (initialSize == 0) initialSize = 16; numValuesAllocated = initialSize; if (initialSize) values = new Type*[initialSize]; else values = 0; numValues = 0; } ~PPSimpleVector() { if (values) { if (destroy) for (pp_int32 i = 0; i < numValues; i++) delete values[i]; delete[] values; } } PPSimpleVector* clone() { PPSimpleVector* clonedVector = new PPSimpleVector(numValuesAllocated, true); for (pp_int32 i = 0; i < numValues; i++) { clonedVector->values[i] = new Type(*values[i]); } clonedVector->numValues = numValues; return clonedVector; } void clear() { if (values) { if (destroy) for (pp_int32 i = 0; i < numValues; i++) delete values[i]; numValues = 0; } } Type* removeNoDestroy(pp_int32 index) { if (!numValues) return NULL; if (index < 0 || index >= numValues) return NULL; Type* result = values[index]; for (pp_int32 i = index; i < numValues-1; i++) values[i] = values[i+1]; numValues--; if (numValuesAllocated - numValues > 16) { numValuesAllocated-=16; reallocate(); } return result; } bool remove(pp_int32 index) { if (!numValues) return false; if (index < 0 || index >= numValues) return false; if (destroy) delete values[index]; for (pp_int32 i = index; i < numValues-1; i++) values[i] = values[i+1]; numValues--; if (numValuesAllocated - numValues > 16) { numValuesAllocated-=16; reallocate(); } return true; } void add(Type* value) { if (numValues >= numValuesAllocated) { numValuesAllocated += 16; reallocate(); } values[numValues++] = value; } // handle with care void replace(pp_int32 index, Type* value) { if (index < 0 || index >= numValues) return; if (destroy) delete values[index]; values[index] = value; } Type* get(pp_int32 index) const { if (index < numValues) { return values[index]; } else return 0; } pp_int32 size() const { return numValues; } bool isEmpty() const { return numValues == 0; } // -- sorting -------------------------------------------------------------- struct SortRule { virtual pp_int32 compare(const Type& left, const Type& right) const = 0; }; private: static pp_int32 partition(Type** a, pp_int32 left, pp_int32 right, const SortRule& sortRule, bool descending = false) { const pp_int32 sign = descending ? -1 : 1; pp_int32 first=left, pivot=right--; while(left<=right) { while(sortRule.compare(*a[left], *a[pivot])*sign < 0/*a[left]=first)&&(sortRule.compare(*a[right], *a[pivot])*sign >= 0/*a[right]>=a[pivot]*/)) right--; if(left=right) return; p = partition(array, left, right, sortRule, descending); sortInternal(array, left,p-1, sortRule, descending); sortInternal(array, p+1, right, sortRule, descending); } public: void sort(const SortRule& sortRule, pp_int32 l = 0, pp_int32 r = -1, const bool descending = false) { if (r == -1) r = size()-1; // no need to sort if (l == 0 && r <= 1) return; sortInternal(values, l, r, sortRule, descending); } }; #endif MilkyTracker-1.02.00/src/ppui/Singleton.h000066400000000000000000000022211324432207300201270ustar00rootroot00000000000000/* * ppui/Singleton.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * Singleton.h * MilkyTracker * * Created by Peter Barth on 10.04.08. * */ #ifndef __SINGLETON_H__ #define __SINGLETON_H__ template class PPSingleton { private: static type* instance; public: static type* getInstance() { if (instance == NULL) instance = new type(); return instance; } }; template type* PPSingleton::instance = NULL; #endif MilkyTracker-1.02.00/src/ppui/Slider.cpp000066400000000000000000000411641324432207300177530ustar00rootroot00000000000000/* * ppui/Slider.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "Slider.h" #include "GraphicsAbstract.h" #include "Button.h" #include "Event.h" #include "Screen.h" void PPSlider::initButtons() { PPPoint buttonDownPos, buttonBarPos; PPSize buttonBarSize; if (horizontal) { this->size.height = SLIDERBUTTONHEIGHT; this->size.width = oneDimSize; buttonDownPos = PPPoint(location.x + oneDimSize - SLIDERBUTTONWIDTH, location.y); buttonBarPos = PPPoint(location.x + SLIDERBUTTONWIDTH, location.y); buttonBarSize = PPSize((oneDimSize - SLIDERBUTTONWIDTH*2), SLIDERBUTTONHEIGHT); } else { this->size.width = SLIDERBUTTONWIDTH; this->size.height = oneDimSize; buttonDownPos = PPPoint(location.x, location.y + oneDimSize - SLIDERBUTTONHEIGHT); buttonBarPos = PPPoint(location.x, location.y + SLIDERBUTTONHEIGHT); buttonBarSize = PPSize(SLIDERBUTTONWIDTH, (oneDimSize - SLIDERBUTTONHEIGHT*2)); } backgroundButton = new PPButton(0, parentScreen, NULL, /*_Point(location.x + (horizontal?0:1), location.y + (horizontal?1:0))*/location, this->size, false); backgroundButton->setColor(backgroundColor); backgroundButton->setInvertShading(true); buttonUp = new PPButton(0, parentScreen, this, location, PPSize(SLIDERBUTTONWIDTH,SLIDERBUTTONHEIGHT), false); buttonUp->setText(!buttonSwap ? "-" : "+"); buttonDown = new PPButton(0, parentScreen, this, buttonDownPos , PPSize(SLIDERBUTTONWIDTH,SLIDERBUTTONHEIGHT), false); buttonDown->setText(!buttonSwap ? "+" : "-"); buttonBar = new PPButton(0, parentScreen, this, buttonBarPos, buttonBarSize, false, false); setBarSize(currentBarSize, false); setBarPosition(currentBarPosition, false); } PPSlider::PPSlider(pp_int32 id, PPScreen* parentScreen, EventListenerInterface* eventListener, const PPPoint& location, pp_int32 size, bool horizontal, bool buttonSwap) : PPControl(id, parentScreen, eventListener, location, PPSize(0,0)), oneDimSize(size), horizontal(horizontal), buttonSwap(buttonSwap), controlCaughtByLMouseButton(false), controlCaughtByRMouseButton(false) { // default color backgroundColor.r = 64; backgroundColor.g = 64; backgroundColor.b = 64; currentBarSize = 65536; currentBarPosition = 0; initButtons(); caughtControl = NULL; minValue = 0; maxValue = 255; currentValue = 0; } PPSlider::~PPSlider() { delete backgroundButton; delete buttonUp; delete buttonDown; delete buttonBar; } void PPSlider::paint(PPGraphicsAbstract* g) { if (!isVisible()) return; g->setRect(PPRect(location.x, location.y, location.x + size.width, location.y + size.height)); /*g->setColor(backgroundColor); g->fill();*/ backgroundButton->paint(g); buttonDown->paint(g); buttonUp->paint(g); buttonBar->paint(g); } void PPSlider::setBarSize(pp_int32 size, bool repaint /* = true */) { if (size < 0) size = 0; if (size > 65536) size = 65536; currentBarSize = size; pp_int32 newSize = (((horizontal?(this->size.width-SLIDERBUTTONWIDTH*2):(this->size.height-SLIDERBUTTONHEIGHT*2))) * size)>>16; if (horizontal) { buttonBar->setSize(PPSize(newSize, this->size.height)); } else { buttonBar->setSize(PPSize(this->size.width, newSize)); } if (repaint) parentScreen->paintControl(this); } void PPSlider::setLocation(const PPPoint& location) { PPControl::setLocation(location); delete backgroundButton; delete buttonUp; delete buttonDown; delete buttonBar; initButtons(); } void PPSlider::setBarPosition(pp_int32 pos, bool repaint /* = false */) { if (pos < 0) pos = 0; if (pos > 65536) pos = 65536; currentBarPosition = pos; pp_int32 size = (horizontal?buttonBar->getSize().width:buttonBar->getSize().height); pp_int32 entireSize = (horizontal?(this->size.width-SLIDERBUTTONWIDTH*2):(this->size.height-SLIDERBUTTONHEIGHT*2)); pp_int32 maxPos = entireSize-size; pp_int32 newPos = (maxPos*pos)>>16; PPPoint p = location; if (horizontal) p.x+=newPos + SLIDERBUTTONWIDTH; else p.y+=newPos + SLIDERBUTTONHEIGHT; buttonBar->setLocation(p); if (repaint) parentScreen->paintControl(this); } pp_int32 PPSlider::dispatchEvent(PPEvent* event) { //if (!visible) // return 0; switch (event->getID()) { /*case eMouseWheelMoved: { TMouseWheelEventParams* params = (TMouseWheelEventParams*)event->getDataPtr(); if (params->delta > 0) { PPEvent e(eLMouseUp); handleEvent(reinterpret_cast(buttonUp), &e); } else if (params->delta < 0) { PPEvent e(eLMouseUp); handleEvent(reinterpret_cast(buttonDown), &e); } event->cancel(); break; }*/ case eLMouseDown: { PPPoint* p = (PPPoint*)event->getDataPtr(); if (buttonUp->hit(*p)) { caughtControl = buttonUp; caughtControl->dispatchEvent(event); controlCaughtByLMouseButton = true; } else if (buttonDown->hit(*p)) { caughtControl = buttonDown; caughtControl->dispatchEvent(event); controlCaughtByLMouseButton = true; } else if (buttonBar->hit(*p)) { caughtControl = buttonBar; // ------------------------- buttonBar->setPressed(true); parentScreen->paintControl(buttonBar); // ------------------------- caughtMouseLocation = *p; caughtControlLocation = buttonBar->getLocation(); caughtControl->dispatchEvent(event); controlCaughtByLMouseButton = true; } else if (backgroundButton->hit(*p)) { handleEvent(reinterpret_cast(backgroundButton), event); } break; } case eLMouseUp: controlCaughtByLMouseButton = false; if (caughtControl == NULL) break; if (controlCaughtByRMouseButton) { caughtControl->dispatchEvent(event); break; } // ------------------------- if (reinterpret_cast(caughtControl) == buttonBar) { buttonBar->setPressed(false); parentScreen->paintControl(buttonBar); } // ------------------------- caughtControl->dispatchEvent(event); caughtControl = NULL; break; case eLMouseRepeat: { if (caughtControl) { caughtControl->dispatchEvent(event); break; } else { PPPoint* p = (PPPoint*)event->getDataPtr(); /*if (backgroundButton->hit(*p)) { handleEvent(reinterpret_cast(backgroundButton), event); } PPPoint* p = (PPPoint*)event->getDataPtr();*/ if (backgroundButton->hit(*p) && !buttonBar->hit(*p)) { handleEvent(reinterpret_cast(backgroundButton), event); } else if (buttonBar->hit(*p)) { // ------------------------- buttonBar->setPressed(true); parentScreen->paintControl(buttonBar); // ------------------------- caughtControl = buttonBar; caughtMouseLocation = *p; caughtControlLocation = buttonBar->getLocation(); caughtControl->dispatchEvent(event); } } break; } case eRMouseDown: { PPPoint* p = (PPPoint*)event->getDataPtr(); if (buttonUp->hit(*p)) { caughtControl = buttonUp; caughtControl->dispatchEvent(event); controlCaughtByRMouseButton = true; } else if (buttonDown->hit(*p)) { caughtControl = buttonDown; caughtControl->dispatchEvent(event); controlCaughtByRMouseButton = true; } else if (buttonBar->hit(*p)) { caughtControl = buttonBar; // ------------------------- buttonBar->setPressed(true); parentScreen->paintControl(buttonBar); // ------------------------- caughtMouseLocation = *p; caughtControlLocation = buttonBar->getLocation(); caughtControl->dispatchEvent(event); controlCaughtByRMouseButton = true; } else if (backgroundButton->hit(*p)) { handleEvent(reinterpret_cast(backgroundButton), event); } break; } case eRMouseUp: controlCaughtByRMouseButton = false; if (caughtControl == NULL) break; if (controlCaughtByLMouseButton) { caughtControl->dispatchEvent(event); break; } // ------------------------- if (reinterpret_cast(caughtControl) == buttonBar) { buttonBar->setPressed(false); parentScreen->paintControl(buttonBar); } // ------------------------- caughtControl->dispatchEvent(event); caughtControl = NULL; break; case eRMouseRepeat: { if (caughtControl) { caughtControl->dispatchEvent(event); break; } else { /*PPPoint* p = (PPPoint*)event->getDataPtr(); if (backgroundButton->hit(*p)) { handleEvent(reinterpret_cast(backgroundButton), event); }*/ PPPoint* p = (PPPoint*)event->getDataPtr(); if (backgroundButton->hit(*p) && !buttonBar->hit(*p)) { handleEvent(reinterpret_cast(backgroundButton), event); } else if (buttonBar->hit(*p)) { // ------------------------- buttonBar->setPressed(true); parentScreen->paintControl(buttonBar); // ------------------------- caughtControl = buttonBar; caughtMouseLocation = *p; caughtControlLocation = buttonBar->getLocation(); caughtControl->dispatchEvent(event); } } break; } //case eLMouseDrag: default: if (caughtControl == NULL) break; caughtControl->dispatchEvent(event); break; } return 0; } pp_int32 PPSlider::handleEvent(PPObject* sender, PPEvent* event) { if ( (event->getID() == eLMouseUp && sender == reinterpret_cast(buttonUp)) || (event->getID() == eLMouseRepeat && sender == reinterpret_cast(buttonUp)) || (event->getID() == eRMouseUp && sender == reinterpret_cast(buttonUp)) || (event->getID() == eRMouseRepeat && sender == reinterpret_cast(buttonUp)) ) { // Call parent event listener //PPEvent e(eBarScrollUp); //return eventListener->handleEvent(reinterpret_cast(this), &e); if (currentValue > minValue) currentValue--; float f = (float)(currentValue - minValue)/(maxValue - minValue); setBarPosition((pp_int32)(f*65536.0f)); parentScreen->paintControl(this); PPEvent e(eValueChanged); return eventListener->handleEvent(reinterpret_cast(this), &e); } if ( (event->getID() == eLMouseUp && sender == reinterpret_cast(buttonDown)) || (event->getID() == eLMouseRepeat && sender == reinterpret_cast(buttonDown)) || (event->getID() == eRMouseUp && sender == reinterpret_cast(buttonDown)) || (event->getID() == eRMouseRepeat && sender == reinterpret_cast(buttonDown)) ) { // Call parent event listener //PPEvent e(eBarScrollDown); //return eventListener->handleEvent(reinterpret_cast(this), &e); if (currentValue < maxValue) currentValue++; float f = (float)(currentValue - minValue)/(maxValue - minValue); setBarPosition((pp_int32)(f*65536.0f)); parentScreen->paintControl(this); PPEvent e(eValueChanged); return eventListener->handleEvent(reinterpret_cast(this), &e); } else if (/*event->getID() == eLMouseDown &&*/ sender == reinterpret_cast(backgroundButton)) { if (horizontal) { PPPoint* p = (PPPoint*)event->getDataPtr(); if (p->x < buttonBar->getLocation().x) { pp_int32 bsize = buttonBar->getSize().width; pp_int32 entireSize = size.width - SLIDERBUTTONWIDTH*2; float f = (float)entireSize/(float)(entireSize - bsize); currentBarPosition-=(pp_int32)(currentBarSize*f); if (currentBarPosition < 0) currentBarPosition = 0; setBarPosition(currentBarPosition); // Call parent event listener //PPEvent e(eBarPosChanged); //return eventListener->handleEvent(reinterpret_cast(this), &e); } else if (p->x > buttonBar->getLocation().x + buttonBar->getSize().width) { pp_int32 bsize = buttonBar->getSize().width; pp_int32 entireSize = size.width - SLIDERBUTTONWIDTH*2; float f = (float)entireSize/(float)(entireSize - bsize); currentBarPosition+=(pp_int32)(currentBarSize*f); if (currentBarPosition > 65536) currentBarPosition = 65536; setBarPosition(currentBarPosition); // Call parent event listener //PPEvent e(eBarPosChanged); //return eventListener->handleEvent(reinterpret_cast(this), &e); } } else { PPPoint* p = (PPPoint*)event->getDataPtr(); if (p->y < buttonBar->getLocation().y) { pp_int32 bsize = buttonBar->getSize().height; pp_int32 entireSize = size.height - SLIDERBUTTONHEIGHT*2; float f = (float)entireSize/(float)(entireSize - bsize); currentBarPosition-=(pp_int32)(currentBarSize*f); if (currentBarPosition < 0) currentBarPosition = 0; setBarPosition(currentBarPosition); // Call parent event listener //PPEvent e(eBarPosChanged); //return eventListener->handleEvent(reinterpret_cast(this), &e); } else if (p->y > buttonBar->getLocation().y + buttonBar->getSize().height) { pp_int32 bsize = buttonBar->getSize().height; pp_int32 entireSize = size.height - SLIDERBUTTONHEIGHT*2; float f = (float)entireSize/(float)(entireSize - bsize); currentBarPosition+=(pp_int32)(currentBarSize*f); if (currentBarPosition > 65536) currentBarPosition = 65536; setBarPosition(currentBarPosition); // Call parent event listener //PPEvent e(eBarPosChanged); //return eventListener->handleEvent(reinterpret_cast(this), &e); } } } else if ((event->getID() == eLMouseDrag && sender == reinterpret_cast(buttonBar)) || (event->getID() == eRMouseDrag && sender == reinterpret_cast(buttonBar))) { PPPoint* p = (PPPoint*)event->getDataPtr(); pp_int32 pos = 0,dx,nx; if (horizontal) { dx = (p->x - caughtMouseLocation.x); /*if (dx < 0) { __asm { int 3 } }*/ nx = caughtControlLocation.x + dx; //if (nx < location.x + SLIDERBUTTONSIZE) // nx = location.x + SLIDERBUTTONSIZE; //if (nx > location.x + size.width - SLIDERBUTTONSIZE*2 - buttonBar->getSize().width) // nx = location.x + size.width - SLIDERBUTTONSIZE*2 - buttonBar->getSize().width; nx-=(location.x + SLIDERBUTTONWIDTH); pp_int32 d = (size.width - buttonBar->getSize().width - SLIDERBUTTONWIDTH*2); if (d != 0) pos = nx*65536 / d; } else { dx = (p->y - caughtMouseLocation.y); /*if (dx < 0) __asm { { int 3 } }*/ nx = caughtControlLocation.y + dx; //if (nx < location.x + SLIDERBUTTONSIZE) // nx = location.x + SLIDERBUTTONSIZE; //if (nx > location.x + size.width - SLIDERBUTTONSIZE*2 - buttonBar->getSize().width) // nx = location.x + size.width - SLIDERBUTTONSIZE*2 - buttonBar->getSize().width; nx-=(location.y + SLIDERBUTTONHEIGHT); pp_int32 d = (size.height - buttonBar->getSize().height - SLIDERBUTTONHEIGHT*2); if (d != 0) pos = nx*65536 / d; } setBarPosition(pos); // Call parent event listener //PPEvent e(eBarPosChanged); //return eventListener->handleEvent(reinterpret_cast(this), &e); } else { return 0; } float f = getBarPosition() / 65536.0f; currentValue = (pp_int32)((f * (maxValue - minValue)) + minValue); parentScreen->paintControl(this); PPEvent e(eValueChanged); return eventListener->handleEvent(reinterpret_cast(this), &e); } void PPSlider::setSize(pp_uint32 size) { PPPoint buttonDownPos, buttonBarPos; PPSize buttonBarSize; if (horizontal) { this->size.height = SLIDERBUTTONHEIGHT; this->size.width = size; buttonDownPos = PPPoint(location.x + size - SLIDERBUTTONWIDTH, location.y); buttonBarPos = PPPoint(location.x + SLIDERBUTTONWIDTH, location.y); buttonBarSize = PPSize((size - SLIDERBUTTONWIDTH*2), SLIDERBUTTONHEIGHT); } else { this->size.width = SLIDERBUTTONWIDTH; this->size.height = size; buttonDownPos = PPPoint(location.x, location.y + size - SLIDERBUTTONHEIGHT); buttonBarPos = PPPoint(location.x, location.y + SLIDERBUTTONHEIGHT); buttonBarSize = PPSize(SLIDERBUTTONWIDTH, (size - SLIDERBUTTONHEIGHT*2)); } backgroundButton->setLocation(location); backgroundButton->setSize(this->size); buttonUp->setLocation(location); buttonDown->setLocation(buttonDownPos); } MilkyTracker-1.02.00/src/ppui/Slider.h000066400000000000000000000056071324432207300174220ustar00rootroot00000000000000/* * ppui/Slider.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ ///////////////////////////////////////////////////////////////// // // PPSlider control class // ///////////////////////////////////////////////////////////////// #ifndef SLIDER__H #define SLIDER__H #define SLIDERBUTTONSIZE 12 #define SLIDERBUTTONHEIGHT 10 #define SLIDERBUTTONWIDTH 12 #include "BasicTypes.h" #include "Control.h" #include "Event.h" // Forwards class PPGraphicsAbstract; class PPButton; class PPSlider : public PPControl, public EventListenerInterface { private: PPColor backgroundColor; pp_uint32 oneDimSize; bool horizontal; bool buttonSwap; PPButton* backgroundButton; PPButton* buttonUp; PPButton* buttonDown; PPButton* buttonBar; PPControl* caughtControl; bool controlCaughtByLMouseButton, controlCaughtByRMouseButton; PPPoint caughtMouseLocation, caughtControlLocation; pp_int32 currentBarSize, currentBarPosition; pp_uint32 minValue; pp_uint32 maxValue; pp_uint32 currentValue; //bool pressed; void initButtons(); public: PPSlider(pp_int32 id, PPScreen* parentScreen, EventListenerInterface* eventListener, const PPPoint& location, pp_int32 size, bool horizontal = false, bool buttonSwap = false); virtual ~PPSlider(); virtual void paint(PPGraphicsAbstract* graphics); virtual pp_int32 dispatchEvent(PPEvent* event); pp_int32 handleEvent(PPObject* sender, PPEvent* event); virtual void setLocation(const PPPoint& location); virtual void setSize(pp_uint32 size); void setMinValue(pp_uint32 min) { minValue = min; } void setMaxValue(pp_uint32 max) { maxValue = max; } void setCurrentValue(pp_uint32 newValue) { currentValue = newValue; float f = (float)(currentValue - minValue)/(maxValue - minValue); setBarPosition((pp_int32)(f*65536.0f)); } pp_uint32 getCurrentValue() { return currentValue; } void setBackgroundColor(const PPColor& color) { backgroundColor = color; } // set bar size [none:0 - full:65536] void setBarSize(pp_int32 size, bool repaint = false); // set bar position [0 - 65536] void setBarPosition(pp_int32 pos, bool repaint = false); pp_uint32 getBarSize() const { return currentBarSize; } pp_uint32 getBarPosition() const { return currentBarPosition; } }; #endif MilkyTracker-1.02.00/src/ppui/StaticText.cpp000066400000000000000000000110711324432207300206170ustar00rootroot00000000000000/* * ppui/StaticText.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "StaticText.h" #include "Event.h" #include "GraphicsAbstract.h" #include "Font.h" #include "Tools.h" #include "PPUIConfig.h" PPStaticText::PPStaticText(pp_int32 id, PPScreen* parentScreen, EventListenerInterface* eventListener, const PPPoint& location, const PPString& text, bool drawShadow /*= false*/, bool drawUnderlined /*= false*/, bool autoShrink /*= false*/) : PPControl(id, parentScreen, eventListener, location, PPSize(0,0)), color(&PPUIConfig::getInstance()->getColor(PPUIConfig::ColorStaticText)), drawShadow(drawShadow), underlined(drawUnderlined), autoShrink(autoShrink), shadowColor(0,0,0), text(text), extent(-1, -1) { font = PPFont::getFont(PPFont::FONT_SYSTEM); calcExtent(); } PPStaticText::~PPStaticText() { } void PPStaticText::paint(PPGraphicsAbstract* g) { if (!isVisible()) return; g->setFont(font); if (extent.width != -1 && extent.height != -1) g->setRect(location.x, location.y, location.x + extent.width, location.y + extent.height+1); else g->setRect(location.x, location.y, location.x + size.width, location.y + size.height+1); const char* text = this->text; char* temp = NULL; if (autoShrink && (signed)font->getStrWidth(text) > extent.width) { pp_uint32 numchars = extent.width / font->getCharWidth(); temp = new char[numchars+1]; pp_uint32 i; for (i = 0; i < (numchars / 2); i++) temp[i] = text[i]; temp[i] = '\xef'; pp_uint32 j = i+1; for (i = strlen(text)-(numchars / 2); i < strlen(text); i++, j++) temp[j] = text[i]; temp[j] = '\0'; text = temp; } if (drawShadow) { if (enabled) g->setColor(shadowColor); else { PPColor col(shadowColor); col.r+=color->r; col.g+=color->g; col.b+=color->b; col.scaleFixed(8192); g->setColor(col); } g->drawString(text, location.x+1, location.y+1, underlined); } if (enabled) g->setColor(*color); else { PPColor col(*color); col.scaleFixed(40000); g->setColor(col); } g->drawString(text, location.x, location.y, underlined); if (temp) delete[] temp; } pp_int32 PPStaticText::dispatchEvent(PPEvent* event) { if (!eventListener) return -1; switch (event->getID()) { case eLMouseDown: if (hit(*reinterpret_cast(event->getDataPtr()))) { PPEvent e(eCommand); return eventListener->handleEvent(reinterpret_cast(this), &e); } return 0; default: return -1; } } void PPStaticText::setText(const PPString& text) { this->text = text; calcExtent(); } void PPStaticText::setIntValue(pp_int32 value, pp_uint32 numDecDigits/* = 0*/, bool negative/*= false*/) { /*char text[15]; _itoa(value, text, 10); setText(text);*/ if (numDecDigits == 0) { if (negative) { numDecDigits = PPTools::getDecNumDigits(abs(value)); numDecDigits++; } else { numDecDigits = PPTools::getDecNumDigits(value); } } // enough memory to hold 32bit Dec value char Dec[15]; if (negative) { PPTools::convertToDec(Dec+1, abs(value), numDecDigits-1); if (value < 0) Dec[0] = '-'; else Dec[0] = '+'; } else { PPTools::convertToDec(Dec, value, numDecDigits); } setText(Dec); } void PPStaticText::setValue(pp_int32 value, bool hex, pp_uint32 numDigits/* = 0*/, bool negative/* = false*/) { if (hex) setHexValue(value, numDigits); else setIntValue(value, numDigits, negative); } void PPStaticText::setHexValue(pp_int32 value, pp_uint32 numHexDigits/*= 0*/) { if (numHexDigits == 0) numHexDigits = PPTools::getHexNumDigits(value); // enough memory to hold 32bit hex value char hex[10]; PPTools::convertToHex(hex, value, numHexDigits); setText(hex); } void PPStaticText::calcExtent() { size.height = font->getCharHeight()*text.countLines() + (drawShadow?1:0); size.width = font->getStrWidth(text) + (drawShadow?1:0); } MilkyTracker-1.02.00/src/ppui/StaticText.h000066400000000000000000000043631324432207300202720ustar00rootroot00000000000000/* * ppui/StaticText.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ ///////////////////////////////////////////////////////////////// // // Static text control class // ///////////////////////////////////////////////////////////////// #ifndef STATICTEXT__H #define STATICTEXT__H #include "BasicTypes.h" #include "Control.h" // Forwards class PPGraphicsAbstract; class PPFont; class PPButton; class PPStaticText : public PPControl { private: const PPColor* color; bool drawShadow; bool underlined; bool autoShrink; PPColor shadowColor; PPString text; PPFont* font; PPSize extent; public: PPStaticText(pp_int32 id, PPScreen* parentScreen, EventListenerInterface* eventListener, const PPPoint& location, const PPString& text, bool drawShadow = false, bool drawUnderlined = false, bool autoShrink = false); virtual ~PPStaticText(); void setColor(const PPColor& color) { this->color = &color; } void setText(const PPString& text); const PPString& getText() const { return text; } void setFont(PPFont* font) { this->font = font; calcExtent(); } virtual void paint(PPGraphicsAbstract* graphics); virtual pp_int32 dispatchEvent(PPEvent* event); void setUnderlined(bool b) { underlined = b; } void setValue(pp_int32 value, bool hex, pp_uint32 numDigits = 0, bool negative = false); void setIntValue(pp_int32 value, pp_uint32 numDecDigits = 0, bool negative = false); void setHexValue(pp_int32 value, pp_uint32 numHexDigits = 0); void setExtent(PPSize extent) { this->extent = extent; } private: void calcExtent(); }; #endif MilkyTracker-1.02.00/src/ppui/Tools.cpp000066400000000000000000000064031324432207300176260ustar00rootroot00000000000000/* * ppui/Tools.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "Tools.h" const char PPTools::hex[] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; pp_uint32 PPTools::getHexNumDigits(pp_uint32 value) { if (value == 0 || (signed)value < 0) return 1; pp_uint32 i = 0; while (value >> i*4) i++; return i; } void PPTools::convertToHex(char* name, pp_uint32 value, pp_uint32 numDigits) { pp_uint32 i; for (i = 0; i < numDigits; i++) name[i] = hex[((value>>(numDigits-1-i)*4)&0xF)]; name[i] = 0; } pp_uint32 PPTools::getDecNumDigits(pp_uint32 value) { if (value == 0) return 1; pp_uint32 i = 0; pp_uint32 start = 1; while (value / start) { i++; start*=10; } return i; } void PPTools::convertToDec(char* name, pp_uint32 value, pp_uint32 numDigits) { pp_uint32 i; pp_uint32 start = 1; for (i = 0; i < numDigits-1; i++) start*=10; for (i = 0; i < numDigits; i++) { name[i] = hex[(value / start)%10]; start/=10; } name[i] = 0; } // you're responsible for deleting this vector PPSimpleVector* PPTools::extractStringList(const PPString& str) { PPSimpleVector* stringList = new PPSimpleVector(); const char* sz = str; PPString* line = new PPString(); while (*sz) { if (*sz == '\n') { stringList->add(line); line = new PPString(); } else { line->append(*sz); } sz++; } if (!line->length()) delete line; else stringList->add(line); return stringList; } PPString PPTools::encodeByteArray(const pp_uint8* array, pp_uint32 size) { char buffer[10]; // Convert number of bytes convertToHex(buffer, size, 8); PPString str = buffer; for (pp_uint32 i = 0; i < size; i++) { convertToHex(buffer, array[i], 2); str.append(buffer); } return str; } pp_uint8 PPTools::getNibble(const char* str) { if (*str >= '0' && *str <= '9') return (*str - '0'); if (*str >= 'A' && *str <= 'F') return (*str - 'A' + 10); if (*str >= 'a' && *str <= 'f') return (*str - 'a' + 10); return 0; } pp_uint8 PPTools::getByte(const char* str) { return (getNibble(str)<<4) + getNibble(str+1); } pp_uint16 PPTools::getWord(const char* str) { return (getByte(str)<<8) + getByte(str+2); } pp_uint32 PPTools::getDWord(const char* str) { return (getWord(str)<<16) + getWord(str+4); } bool PPTools::decodeByteArray(pp_uint8* array, pp_uint32 size, const PPString& str) { const char* ptr = str; pp_uint32 length = getDWord(ptr); if (length != size) return false; ptr+=8; for (pp_uint32 i = 0; i < length; i++) { *array++ = getByte(ptr); ptr+=2; } return true; } MilkyTracker-1.02.00/src/ppui/Tools.h000066400000000000000000000031641324432207300172740ustar00rootroot00000000000000/* * ppui/Tools.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #ifndef PPUI_TOOLS__H #define PPUI_TOOLS__H #include "BasicTypes.h" #include "SimpleVector.h" class PPTools { private: static const char hex[]; public: static pp_uint32 getHexNumDigits(pp_uint32 value); static void convertToHex(char* name, pp_uint32 value, pp_uint32 numDigits); static pp_uint32 getDecNumDigits(pp_uint32 value); static void convertToDec(char* name, pp_uint32 value, pp_uint32 numDigits); // you're responsible for deleting this vector static PPSimpleVector* extractStringList(const PPString& str); static pp_uint8 getNibble(const char* str); static pp_uint8 getByte(const char* str); static pp_uint16 getWord(const char* str); static pp_uint32 getDWord(const char* str); static PPString encodeByteArray(const pp_uint8* array, pp_uint32 size); static bool decodeByteArray(pp_uint8* array, pp_uint32 size, const PPString& str); }; #endif MilkyTracker-1.02.00/src/ppui/TransparentContainer.cpp000066400000000000000000000024101324432207300226640ustar00rootroot00000000000000/* * ppui/TransparentContainer.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "GraphicsAbstract.h" #include "TransparentContainer.h" #include "BasicTypes.h" PPTransparentContainer::PPTransparentContainer(pp_int32 id, PPScreen* parentScreen, EventListenerInterface* eventListener, const PPPoint& location, const PPSize& size) : PPContainer(id, parentScreen, eventListener, location, size) { } PPTransparentContainer::~PPTransparentContainer() { } void PPTransparentContainer::paint(PPGraphicsAbstract* g) { if (!isVisible()) return; paintControls(g); } MilkyTracker-1.02.00/src/ppui/TransparentContainer.h000066400000000000000000000026141324432207300223370ustar00rootroot00000000000000/* * ppui/TransparentContainer.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ ///////////////////////////////////////////////////////////////// // // PPContainer control that can be used to group controls // ///////////////////////////////////////////////////////////////// #ifndef TRANSPARENTCONTAINER__H #define TRANSPARENTCONTAINER__H #include "BasicTypes.h" #include "Container.h" class PPButton; class PPTransparentContainer : public PPContainer { public: PPTransparentContainer(pp_int32 id, PPScreen* parentScreen, EventListenerInterface* eventListener, const PPPoint& location, const PPSize& size); virtual ~PPTransparentContainer(); virtual void paint(PPGraphicsAbstract* graphics); }; #endif MilkyTracker-1.02.00/src/ppui/UndoStack.h000066400000000000000000000116411324432207300200660ustar00rootroot00000000000000/* * ppui/UndoStack.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * UndoStack.h * MilkyTracker * * Created by Peter Barth on 14.03.06. * */ #ifndef __UNDOSTACK_H__ #define __UNDOSTACK_H__ #include "BasicTypes.h" //--- Undo-stack ------------------------------------------------------------ // The undo stack works like this: // // /--<--< New Entry pushed: Stack is full? => bottom element will be removed // | and all elements will be moved // | one step down and the new element // |###| is placed on top // |###| | // |###| | // |###| \!/ // |###| // | // \-->--> /dev/null :) (bottom element will be deleted) template class PPUndoStack { private: enum { DEFAULTSTACKSIZE = 1024 }; // Our stacksize pp_int32 m_nStackSize; // our stack type** m_pUndoStack; // index of current stack entry pp_int32 m_nCurIndex; // index of last valid stack entry pp_int32 m_nTopIndex; // stack has overflowed and bottom elements have been removed bool m_bOverflow; public: //--------------------------------------------------------------------------- // Pre : // Post : // Globals : // I/O : // Task : Construction: Create clean empty stack //--------------------------------------------------------------------------- PPUndoStack(pp_int32 nStackSize = DEFAULTSTACKSIZE) { // Remember size m_nStackSize = nStackSize; // create stack containing empty entries m_pUndoStack = new type*[nStackSize+1]; for (pp_int32 i = 0; i < nStackSize+1; i++) m_pUndoStack[i] = NULL; // empty stack m_nCurIndex = -1; m_nTopIndex = 0; // hasn't overflowed yet m_bOverflow = false; } //--------------------------------------------------------------------------- // Pre : // Post : // Globals : // I/O : // Task : Destruction //--------------------------------------------------------------------------- ~PPUndoStack() { for (pp_int32 i = 0; i < m_nStackSize; i++) if (m_pUndoStack[i]) delete m_pUndoStack[i]; delete[] m_pUndoStack; } //--------------------------------------------------------------------------- // Pre : // Post : // Globals : // I/O : // Task : Save entry on stack //--------------------------------------------------------------------------- void Push(const type& stackEntry) { // does new entry fit onto stack? if (m_nCurIndex < m_nStackSize-1) { // current index always points to the last entry m_nCurIndex++; } // nope, kill bottom entry and move content else { // delete first entry delete m_pUndoStack[0]; // move references for (pp_int32 i = 0; i <= m_nCurIndex; i++) m_pUndoStack[i] = m_pUndoStack[i+1]; m_bOverflow = true; } // make sure we don't leak something here if (m_pUndoStack[m_nCurIndex]) delete m_pUndoStack[m_nCurIndex]; // new entry m_pUndoStack[m_nCurIndex] = new type(stackEntry); m_nTopIndex = m_nCurIndex; } //--------------------------------------------------------------------------- // Pre : // Post : // Globals : // I/O : // Task : Get entry from stack (only by pointer) //--------------------------------------------------------------------------- const type* Pop() { // anything on stack yet? if (m_nCurIndex>=0) { // get entry return m_pUndoStack[m_nCurIndex--]; /*type* pStackEntry = m_pUndoStack[m_nCurIndex]; // decrease stackpointer m_nCurIndex--; return pStackEntry;*/ } else { return NULL; } } //--------------------------------------------------------------------------- // Pre : // Post : // Globals : // I/O : // Task : Get superimposed entry if possible (Redo) //--------------------------------------------------------------------------- const type* Advance() { // Nothing on stack if (m_nTopIndex == 0) { return NULL; } // Redo possible? if (m_nCurIndex. * */ /* * VirtualKeys.h * MilkyTracker * * Created by Peter Barth on Fri Feb 25 2005. * */ #ifndef VIRTUALKEYS__H #define VIRTUALKEYS__H // These might look familiar to windows programmers ;) enum { VK_UNDEFINED = 0x00, VK_LBUTTON = 0x01, VK_RBUTTON = 0x02, VK_CANCEL = 0x03, VK_MBUTTON = 0x04, VK_BACK = 0x08, VK_TAB = 0x09, VK_CLEAR = 0x0C, VK_RETURN = 0x0D, VK_SHIFT = 0x10, VK_CONTROL = 0x11, VK_MENU = 0x12, VK_PAUSE = 0x13, VK_CAPITAL = 0x14, VK_KANA = 0x15, VK_HANGEUL = 0x15 , VK_HANGUL = 0x15, VK_JUNJA = 0x17, VK_FINAL = 0x18, VK_HANJA = 0x19, VK_KANJI = 0x19, VK_ESCAPE = 0x1B, VK_CONVERT = 0x1C, VK_NONCONVERT = 0x1D, VK_ACCEPT = 0x1E, VK_MODECHANGE = 0x1F, VK_SPACE = 0x20, VK_PRIOR = 0x21, VK_NEXT = 0x22, VK_END = 0x23, VK_HOME = 0x24, VK_LEFT = 0x25, VK_UP = 0x26, VK_RIGHT = 0x27, VK_DOWN = 0x28, VK_SELECT = 0x29, VK_PRINT = 0x2A, VK_EXECUTE = 0x2B, VK_SNAPSHOT = 0x2C, VK_INSERT = 0x2D, VK_DELETE = 0x2E, VK_HELP = 0x2F, VK_LWIN = 0x5B, VK_RWIN = 0x5C, VK_APPS = 0x5D, VK_NUMPAD0 = 0x60, VK_NUMPAD1 = 0x61, VK_NUMPAD2 = 0x62, VK_NUMPAD3 = 0x63, VK_NUMPAD4 = 0x64, VK_NUMPAD5 = 0x65, VK_NUMPAD6 = 0x66, VK_NUMPAD7 = 0x67, VK_NUMPAD8 = 0x68, VK_NUMPAD9 = 0x69, VK_MULTIPLY = 0x6A, VK_ADD = 0x6B, VK_SEPARATOR = 0x6C, VK_SUBTRACT = 0x6D, VK_DECIMAL = 0x6E, VK_DIVIDE = 0x6F, VK_F1 = 0x70, VK_F2 = 0x71, VK_F3 = 0x72, VK_F4 = 0x73, VK_F5 = 0x74, VK_F6 = 0x75, VK_F7 = 0x76, VK_F8 = 0x77, VK_F9 = 0x78, VK_F10 = 0x79, VK_F11 = 0x7A, VK_F12 = 0x7B, VK_F13 = 0x7C, VK_F14 = 0x7D, VK_F15 = 0x7E, VK_F16 = 0x7F, VK_F17 = 0x80, VK_F18 = 0x81, VK_F19 = 0x82, VK_F20 = 0x83, VK_F21 = 0x84, VK_F22 = 0x85, VK_F23 = 0x86, VK_F24 = 0x87, VK_NUMLOCK = 0x90, VK_SCROLL = 0x91, VK_LSHIFT = 0xA0, VK_RSHIFT = 0xA1, VK_LCONTROL = 0xA2, VK_RCONTROL = 0xA3, VK_LMENU = 0xA4, VK_RMENU = 0xA5, VK_OEM_3 = 0xC0, VK_OEM_102 = 0xE2, VK_PROCESSKEY = 0xE5, VK_ATTN = 0xF6, VK_CRSEL = 0xF7, VK_EXSEL = 0xF8, VK_EREOF = 0xF9, VK_PLAY = 0xFA, VK_ZOOM = 0xFB, VK_NONAME = 0xFC, VK_PA1 = 0xFD, VK_OEM_CLEAR = 0xFE, VK_ALT = 0xFF }; #endif MilkyTracker-1.02.00/src/ppui/carbon/000077500000000000000000000000001324432207300172635ustar00rootroot00000000000000MilkyTracker-1.02.00/src/ppui/carbon/DisplayDevice_CARBON.cpp000066400000000000000000000367021324432207300235500ustar00rootroot00000000000000/* * ppui/carbon/DisplayDevice_CARBON.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "DisplayDevice_CARBON.h" #include "Graphics.h" #ifdef __DRAWSPROCKETS__ #include static DSpContextReference sDSpContext = NULL; static CGrafPtr frontBuffer; CGrafPtr SetScreenTo800x600() /* Returns a pointer to the front buffer (a port, on-screen, guaranteed 800x600x32 even if the screen can't be set to 800x600). Returns NULL if it fails. */ { DSpContextAttributes attr = { 0, 800, 600, // Resolution 0, 0, kDSpColorNeeds_Require, NULL, 0, kDSpDepthMask_32, kDSpDepthMask_32, 32, 32, 1, // Don't need back buffers { 0, 0, 0 }, 0, { 0, 0, 0, 0 }}; OSStatus err; GrafPtr savPort; Rect frame; CGrafPtr frontBuffer; DSpStartup(); err = DSpFindBestContext(&attr, &sDSpContext); switch (err) { case kDSpConfirmSwitchWarning: break; case noErr: break; default: return NULL; } /* Reserve the context */ attr.contextOptions = 0; err = DSpContext_Reserve(sDSpContext, &attr); if (err) { return NULL; } /* Fade out (because changing the resolution looks messy) */ DSpContext_FadeGammaOut(kDSpEveryContext, NULL); /* Activate context */ err = DSpContext_SetState(sDSpContext, kDSpContextState_Active); if (err) { DSpContext_FadeGammaIn(kDSpEveryContext, NULL); return NULL; } /* Fade in instantly (the screen will remain black) */ DSpContext_FadeGamma(sDSpContext, 100, NULL); /* Get a pointer to the front buffer */ err = DSpContext_GetFrontBuffer(sDSpContext, &frontBuffer); if (err) { return NULL; } return frontBuffer; } void RestoreScreen() { if (!sDSpContext) { return; } #if FADE_OUT_ON_EXIT /* 0 if your app will have left the screen black */ DSpContext_FadeGammaOut(sDSpContext, NULL); #else DSpContext_FadeGamma(sDSpContext, 0, NULL); #endif /* Deactivate context */ DSpContext_SetState(sDSpContext, kDSpContextState_Inactive); /* Fade in */ DSpContext_FadeGammaIn(kDSpEveryContext, NULL); /* Clean up */ DSpContext_Release(sDSpContext); DSpShutdown(); } #endif PPDisplayDevice::GWorldWrapper::GWorldWrapper(pp_uint32 width, pp_uint32 height, pp_uint32 bpp/* = 32*/) { visibleRgn = NewRgn(); SetRect(&pictSize, 0, 0, width, height); int err = NewGWorld(&offscreen, bpp, &pictSize, NULL, nil, 0); if (err) { printf("Could not create offscreen buffer\n"); exit(1); } } PPDisplayDevice::GWorldWrapper::~GWorldWrapper() { DisposeGWorld(offscreen); } void PPDisplayDevice::GWorldWrapper::UnlockGWorldMemory(unsigned char** Buffer, unsigned int* BytesPerRow) { OSErr err; BitMap* tempBitMap; ppixMap = (PixMap*)GetPortPixMap(offscreen); err = LockPixels((PixMapHandle)ppixMap); if (!err) printf("LockPixels Error"); tempBitMap = (BitMap*)*(GetPortPixMap(offscreen)); *Buffer = (unsigned char*)tempBitMap->baseAddr; *BytesPerRow = (unsigned int)tempBitMap->rowBytes&0x3fff; } void PPDisplayDevice::GWorldWrapper::LockGWorldMemory() { UnlockPixels((PixMapHandle)ppixMap); } PPDisplayDevice::PPDisplayDevice(WindowPtr mainWindow, WindowPtr waitWindow, pp_int32 width, pp_int32 height, pp_int32 scaleFactor/* = 1*/, pp_uint32 bpp/* = 32*/) : PPDisplayDeviceBase(width, height, scaleFactor), mainWindow(mainWindow), waitWindow(waitWindow), oldmode(NULL), mode(NULL), drawThread(NULL), waitWindowVisible(false) { mainGWorld = new GWorldWrapper(width, height, bpp); pp_uint8* buffer; pp_uint32 pitch; mainGWorld->UnlockGWorldMemory(&buffer,(unsigned int*)&pitch); mainGWorld->LockGWorldMemory(); switch (bpp) { case 16: currentGraphics = new PPGraphics_15BIT(getSize().width, getSize().height, pitch, buffer); break; case 32: currentGraphics = new PPGraphics_ARGB32(getSize().width, getSize().height, pitch, buffer); break; } this->size.width = width; this->size.height = height; SizeWindow(mainWindow, width * scaleFactor, height * scaleFactor, false); currentGraphics->lock = true; } PPDisplayDevice::~PPDisplayDevice() { delete mainGWorld; delete waitGWorld; delete currentGraphics; } PPGraphicsAbstract* PPDisplayDevice::open() { if (!isEnabled()) return NULL; pp_uint8* buffer; pp_uint32 pitch; mainGWorld->UnlockGWorldMemory(&buffer, (unsigned int*)&pitch); static_cast(currentGraphics)->setBufferProperties(pitch, buffer); currentGraphics->lock = false; return currentGraphics; } void PPDisplayDevice::close() { currentGraphics->lock = true; mainGWorld->LockGWorldMemory(); } void PPDisplayDevice::update() { if (!isUpdateAllowed() || !isEnabled()) return; GDHandle SaveGD; CGrafPtr SavePort; Rect windowRect; GetGWorld(&SavePort, &SaveGD); //our current world must be the window, otherwise the offscreen buffer is drawn somewhere outside SetGWorld(GetWindowPort(mainWindow), GetGDevice()); GetPortBounds(GetWindowPort(mainWindow), &windowRect); //copy our offscreen world into the window CopyBits((BitMap *) *(GetPortPixMap(mainGWorld->offscreen)), GetPortBitMapForCopyBits(GetWindowPort(mainWindow)), &mainGWorld->pictSize, &windowRect, srcCopy, nil); //we flush the window buffer by passing the window and its visible region QDFlushPortBuffer(GetWindowPort(mainWindow), GetPortVisibleRegion(GetWindowPort(mainWindow), mainGWorld->visibleRgn)); SetGWorld(SavePort, SaveGD); } void PPDisplayDevice::update(const PPRect& r) { if (!isUpdateAllowed() || !isEnabled()) return; GDHandle SaveGD; CGrafPtr SavePort; Rect windowRect; GetGWorld(&SavePort, &SaveGD); //our current world must be the window, otherwise the offscreen buffer is drawn somewhere outside SetGWorld(GetWindowPort(mainWindow), GetGDevice()); GetPortBounds(GetWindowPort(mainWindow), &windowRect); float xScale = (float)(windowRect.right - windowRect.left) / (float)getSize().width; float yScale = (float)(windowRect.bottom - windowRect.top) / (float)getSize().height; Rect srcRect; srcRect.top = r.y1; srcRect.left = r.x1; srcRect.bottom = r.y2; srcRect.right = r.x2; Rect dstRect; dstRect.top = (int)(srcRect.top*yScale); dstRect.left = (int)(srcRect.left*xScale); dstRect.bottom = (int)(srcRect.bottom*yScale); dstRect.right = (int)(srcRect.right*xScale); //copy our offscreen world into the window CopyBits((BitMap *) *(GetPortPixMap(mainGWorld->offscreen)), GetPortBitMapForCopyBits(GetWindowPort(mainWindow)), &srcRect, &dstRect, srcCopy, nil); //we flush the window buffer by passing the window and its visible region QDFlushPortBuffer(GetWindowPort(mainWindow), GetPortVisibleRegion(GetWindowPort(mainWindow), mainGWorld->visibleRgn)); SetGWorld(SavePort, SaveGD); } bool PPDisplayDevice::init() { Rect bounds; RepositionWindow (mainWindow, NULL, kWindowCenterOnMainScreen); // The windows were created hidden so show them. ShowWindow(mainWindow); GetWindowBounds (waitWindow, kWindowContentRgn, &bounds); waitWindowWidth = bounds.right - bounds.left; waitWindowHeight = bounds.bottom - bounds.top; // setup wait screen offscreen buffers waitGWorld = new GWorldWrapper(waitWindowWidth, waitWindowHeight); return true; } void PPDisplayDevice::setTitle(const PPSystemString& title) { CFStringRef CFTitleRef = CFStringCreateWithCString(NULL, title, kCFStringEncodingUTF8); SetWindowTitleWithCFString(mainWindow, CFTitleRef); CFRelease(CFTitleRef); } void PPDisplayDevice::setSize(const PPSize& size) { SizeWindow(mainWindow, size.width * scaleFactor, size.height * scaleFactor, false); if (!bFullScreen) RepositionWindow (mainWindow, NULL, kWindowCenterOnMainScreen); this->size = size; } bool PPDisplayDevice::goFullScreen(bool b) { OSStatus err; if (b && !bFullScreen) // switch display res { // switch screen resolution CGDirectDisplayID display=CGMainDisplayID(); boolean_t exact; oldmode = CGDisplayCurrentMode(display); mode = CGDisplayBestModeForParametersAndRefreshRate(display, 32, size.width * scaleFactor, size.height * scaleFactor, 75.0, &exact); if (exact) { HideWindow(mainWindow); err=CGDisplaySwitchToMode(display,mode); HideMenuBar(); Rect r1,r2; GetWindowBounds(mainWindow, kWindowStructureRgn, &oldRc); r1 = oldRc; r2 = r1; SInt32 dh = (r1.bottom - r1.top) - size.height * scaleFactor; r2.left-=r1.left; r2.top-=r1.top+dh; r2.right-=r1.left; r2.bottom-=r1.top+dh; SetWindowBounds(mainWindow, kWindowStructureRgn, &r2); bFullScreen = true; ShowWindow(mainWindow); return true; } return false; } else if (!b && bFullScreen) { HideWindow(mainWindow); // switch screen resolution CGDirectDisplayID display=CGMainDisplayID(); err=CGDisplaySwitchToMode(display,oldmode); ShowMenuBar(); SetWindowBounds(mainWindow, kWindowStructureRgn, &oldRc); ShowWindow(mainWindow); bFullScreen = false; return true; } return false; } PPSize PPDisplayDevice::getDisplayResolution() const { const int MAX_DISPLAYS = 32; CGDirectDisplayID displayArray [MAX_DISPLAYS]; CGDisplayCount numDisplays; CFNumberRef number; CFBooleanRef booleanValue; long height, width, refresh, mode, bpp, bps, spp, rowBytes, gui, ioflags; int i; CGGetActiveDisplayList (MAX_DISPLAYS, displayArray, &numDisplays); for (i = 0; i < numDisplays; i++) { width = CGDisplayPixelsWide (displayArray[i]); height = CGDisplayPixelsHigh (displayArray[i]); // we are only interested in display properties //bpp = CGDisplayBitsPerPixel (displayArray[i]); //bps = CGDisplayBitsPerSample (displayArray[i]); //spp = CGDisplaySamplesPerPixel (displayArray[i]); //rowBytes = CGDisplayBytesPerRow (displayArray[i]); //number = (CFNumberRef)CFDictionaryGetValue (CGDisplayCurrentMode (displayArray[i]), kCGDisplayMode); //CFNumberGetValue (number, kCFNumberLongType, &mode); //number =(CFNumberRef)CFDictionaryGetValue (CGDisplayCurrentMode (displayArray[i]), kCGDisplayRefreshRate); //CFNumberGetValue (number, kCFNumberLongType, &refresh); //booleanValue = (CFBooleanRef)CFDictionaryGetValue (CGDisplayCurrentMode(displayArray[i]), kCGDisplayModeUsableForDesktopGUI); //CFNumberGetValue (number, kCFNumberLongType, &gui); //number = (CFNumberRef)CFDictionaryGetValue (CGDisplayCurrentMode (displayArray[i]), kCGDisplayIOFlags); //CFNumberGetValue (number, kCFNumberLongType, &ioflags); } return PPSize(width, height); } void PPDisplayDevice::shutDown() { HICommandExtended aCommand; EventRef anEvent; // send quit event BlockZero(&aCommand, sizeof(aCommand)); aCommand.attributes = kHICommandFromControl; aCommand.commandID = 'quit'; CreateEvent(NULL, kEventClassCommand, kEventCommandProcess, GetCurrentEventTime(), kEventAttributeUserEvent, &anEvent); SetEventParameter(anEvent, kEventParamDirectObject, typeHICommand, sizeof(aCommand), &aCommand); SendEventToWindow(anEvent, mainWindow); ReleaseEvent(anEvent); } //////////////////////////////////////////////////////////////////////////////// // -------------------------- wait window rendering --------------------------- //////////////////////////////////////////////////////////////////////////////// void DrawPixel32(void* buffer, pp_int32 x, pp_int32 y, pp_int32 pitch, const PPColor& color) { unsigned char* buff = (unsigned char*)buffer; buff[y*pitch+x*4+1]=color.r; buff[y*pitch+x*4+2]=color.g; buff[y*pitch+x*4+3]=color.b; } void PPDisplayDevice::updateWaitWindow() { GDHandle SaveGD; CGrafPtr SavePort; Rect windowRect; GetGWorld(&SavePort, &SaveGD); //our current world must be the window, otherwise the offscreen buffer is drawn somewhere outside SetGWorld(GetWindowPort(waitWindow), GetGDevice()); GetPortBounds(GetWindowPort(waitWindow), &windowRect); //copy our offscreen world into the window CopyBits ((BitMap *) *(GetPortPixMap(waitGWorld->offscreen)), GetPortBitMapForCopyBits(GetWindowPort(waitWindow)), &waitGWorld->pictSize, &windowRect, srcCopy, nil); //we flush the window buffer by passing the window and its visible region QDFlushPortBuffer(GetWindowPort(waitWindow), GetPortVisibleRegion(GetWindowPort(waitWindow), waitGWorld->visibleRgn)); SetGWorld(SavePort, SaveGD); } void PPDisplayDevice::renderAndUpdateWaitWindow(pp_uint32 width, pp_uint32 height, const PPColor& waitBarColor) { unsigned int pitch; unsigned char* buffer; waitGWorld->UnlockGWorldMemory(&buffer,&pitch); DrawWaitBar(width, height, 160, 16, 0xFFFFFF, (waitBarColor.r << 16) + (waitBarColor.g << 8) + (waitBarColor.b), buffer, pitch, &DrawPixel32); waitGWorld->LockGWorldMemory(); updateWaitWindow(); } void* PPDisplayDevice::UpdateWaitWindowThreadProc(void* theID) { PPDisplayDevice* thisDisplayDevice = (PPDisplayDevice*)theID; while (true) { if (thisDisplayDevice->waitWindowVisible) thisDisplayDevice->renderAndUpdateWaitWindow(thisDisplayDevice->waitWindowWidth, thisDisplayDevice->waitWindowHeight, thisDisplayDevice->waitBarColor); System::msleep(100); } return NULL; } void PPDisplayDevice::signalWaitState(bool b, const PPColor& color) { waitBarColor = color; if (b) { // get main window boundaries Rect bounds; GetWindowBounds (mainWindow, kWindowContentRgn, &bounds); // move wait window to fit in the middle of the main window MoveWindow (waitWindow, bounds.left + ((bounds.right-bounds.left) >> 1) - (waitWindowWidth>>1), bounds.top + ((bounds.bottom-bounds.top) >> 1) - (waitWindowHeight>>1), false); renderAndUpdateWaitWindow(waitWindowWidth, waitWindowHeight, waitBarColor); ShowWindow(waitWindow); waitWindowVisible = true; if (!drawThread) { if (pthread_create(&drawThread, NULL, UpdateWaitWindowThreadProc , (void*)this)) { // error printf("could not create thread"); } } } else { waitWindowVisible = false; HideWindow(waitWindow); } } void PPDisplayDevice::setMouseCursor(MouseCursorTypes type) { currentCursorType = type; switch (type) { case MouseCursorTypeStandard: SetThemeCursor(kThemeArrowCursor); break; case MouseCursorTypeResizeLeft: SetThemeCursor(kThemeResizeLeftCursor); break; case MouseCursorTypeResizeRight: SetThemeCursor(kThemeResizeRightCursor); break; case MouseCursorTypeHand: SetThemeCursor(kThemeOpenHandCursor); break; } } MilkyTracker-1.02.00/src/ppui/carbon/DisplayDevice_CARBON.h000066400000000000000000000052341324432207300232110ustar00rootroot00000000000000/* * ppui/carbon/DisplayDevice_CARBON.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ ///////////////////////////////////////////////////////////////// // // Our display device // ///////////////////////////////////////////////////////////////// #ifndef DISPLAYDEVICE__H #define DISPLAYDEVICE__H #include "BasicTypes.h" #include "DisplayDeviceBase.h" #include #include #include "PPSystem.h" class PPDisplayDevice : public PPDisplayDeviceBase { private: struct GWorldWrapper { Rect pictSize; GWorldPtr offscreen; PixMap* ppixMap; RgnHandle visibleRgn; GWorldWrapper(pp_uint32 width, pp_uint32 height, pp_uint32 bpp = 32); ~GWorldWrapper(); void UnlockGWorldMemory(unsigned char** Buffer, unsigned int* BytesPerRow); void LockGWorldMemory(); }; WindowPtr mainWindow, waitWindow; GWorldWrapper* mainGWorld; GWorldWrapper* waitGWorld; CFDictionaryRef oldmode; CFDictionaryRef mode; Rect oldRc; public: PPDisplayDevice(WindowPtr mainWindow, WindowPtr waitWindow, pp_int32 width, pp_int32 height, pp_int32 scaleFactor = 1, pp_uint32 bpp = 32); virtual ~PPDisplayDevice(); virtual PPGraphicsAbstract* open(); virtual void close(); virtual void update(); virtual void update(const PPRect& r); // Window handling virtual bool init(); virtual void setTitle(const PPSystemString& title); virtual void setSize(const PPSize& size); virtual bool supportsScaling() const { return true; } virtual bool goFullScreen(bool b); virtual PPSize getDisplayResolution() const; virtual void shutDown(); virtual void signalWaitState(bool b, const PPColor& color); virtual void setMouseCursor(MouseCursorTypes type); private: pp_int32 waitWindowWidth; pp_int32 waitWindowHeight; pthread_t drawThread; bool waitWindowVisible; void updateWaitWindow(); void renderAndUpdateWaitWindow(pp_uint32 width, pp_uint32 height, const PPColor& waitBarColor); static void* UpdateWaitWindowThreadProc(void* theID); }; #endif MilkyTracker-1.02.00/src/ppui/cocoa/000077500000000000000000000000001324432207300171035ustar00rootroot00000000000000MilkyTracker-1.02.00/src/ppui/cocoa/DisplayDevice_COCOA.h000066400000000000000000000041031324432207300227030ustar00rootroot00000000000000/* * ppui/cocoa/DisplayDevice_COCOA.h * * Copyright 2014 Dale Whinham * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ ///////////////////////////////////////////////////////////////// // // Our display device // ///////////////////////////////////////////////////////////////// #ifndef DISPLAYDEVICE__H #define DISPLAYDEVICE__H #include "BasicTypes.h" #include "DisplayDeviceBase.h" #include "Graphics.h" #include "PPSystem.h" #include #include "AppDelegate.h" #include "MTTrackerView.h" class PPDisplayDevice : public PPDisplayDeviceBase { public: PPDisplayDevice(NSWindow* window, MTTrackerView* trackerView, pp_int32 width, pp_int32 height, pp_int32 scaleFactor = 1, pp_uint32 bpp = 32); virtual ~PPDisplayDevice(); virtual PPGraphicsAbstract* open(); virtual void close(); virtual void update(); virtual void update(const PPRect& r); // Window handling virtual void setTitle(const PPSystemString& title); virtual void setSize(const PPSize& size); virtual bool supportsScaling() const { return false; } virtual bool goFullScreen(bool b); virtual PPSize getDisplayResolution() const; virtual void shutDown(); virtual void signalWaitState(bool b, const PPColor& color); virtual void setMouseCursor(MouseCursorTypes type); void setImmediateUpdates(BOOL b) { immediateUpdates = b; }; private: NSWindow* theWindow; MTTrackerView* theTrackerView; uint8_t* pixelBuffer; BOOL immediateUpdates; }; #endif MilkyTracker-1.02.00/src/ppui/cocoa/DisplayDevice_COCOA.mm000066400000000000000000000076631324432207300231030ustar00rootroot00000000000000/* * ppui/cocoa/DisplayDevice_COCOA.mm * * Copyright 2014 Dale Whinham * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "DisplayDevice_COCOA.h" PPDisplayDevice::PPDisplayDevice(NSWindow* window, MTTrackerView* trackerView, pp_int32 width, pp_int32 height, pp_int32 scaleFactor, pp_uint32 bpp) : PPDisplayDeviceBase(width, height, scaleFactor), theWindow(window), theTrackerView(trackerView), immediateUpdates(NO) { // Allocate a pixel buffer and create a PPGraphics context pixelBuffer = new uint8_t[width * height * 3]; currentGraphics = static_cast(new PPGraphics_BGR24(width, height, 3 * width, pixelBuffer)); // Set up the TrackerView with pointer to pixel buffer and dimensions trackerView.pixelData = pixelBuffer; trackerView.width = width; trackerView.height = height; trackerView.bpp = bpp; // Set up texture for rendering [trackerView initTexture]; // Resize window NSSize size = NSMakeSize(width, height); [theWindow setContentSize:size]; // Set minimum size [theWindow setMinSize:theWindow.frame.size]; // Lock aspect ratio [theWindow setContentAspectRatio:size]; // Listen for mouse movement events [theWindow setAcceptsMouseMovedEvents:YES]; // Set responder and give window focus [theWindow makeFirstResponder:theTrackerView]; [theWindow makeKeyAndOrderFront:nil]; } PPDisplayDevice::~PPDisplayDevice() { delete currentGraphics; delete[] pixelBuffer; } PPGraphicsAbstract* PPDisplayDevice::open() { if (!isEnabled()) return NULL; currentGraphics->lock = false; return currentGraphics; } void PPDisplayDevice::close() { currentGraphics->lock = true; } void PPDisplayDevice::update() { // Full screen update if (immediateUpdates) [theTrackerView display]; else [theTrackerView setNeedsDisplay:YES]; } void PPDisplayDevice::update(const PPRect& r) { // Partial screen update NSRect r1 = NSMakeRect(r.x1, r.y1, r.width(), r.height()); if (immediateUpdates) [theTrackerView displayRect:r1]; else [theTrackerView setNeedsDisplayInRect:r1]; } void PPDisplayDevice::setTitle(const PPSystemString& title) { [theWindow setTitle:[NSString stringWithCString:title encoding:NSUTF8StringEncoding]]; } void PPDisplayDevice::setSize(const PPSize& size) { // Unused } bool PPDisplayDevice::goFullScreen(bool b) { if (b != bFullScreen) { [theWindow toggleFullScreen:nil]; bFullScreen = b; return true; } return false; } PPSize PPDisplayDevice::getDisplayResolution() const { CGSize screenSize = [NSScreen mainScreen].frame.size; return PPSize(screenSize.width, screenSize.height); } void PPDisplayDevice::shutDown() { [NSApp terminate:[NSApplication sharedApplication]]; } void PPDisplayDevice::signalWaitState(bool b, const PPColor& color) { AppDelegate* delegate = (AppDelegate *) [NSApp delegate]; [delegate showProgress:b]; } void PPDisplayDevice::setMouseCursor(MouseCursorTypes type) { currentCursorType = type; switch (type) { case MouseCursorTypeStandard: [[NSCursor arrowCursor] set]; break; case MouseCursorTypeResizeLeft: [[NSCursor resizeLeftCursor] set]; break; case MouseCursorTypeResizeRight: [[NSCursor resizeRightCursor] set]; break; case MouseCursorTypeHand: [[NSCursor pointingHandCursor] set]; break; case MouseCursorTypeWait: default: break; } } MilkyTracker-1.02.00/src/ppui/fastfill.h000066400000000000000000000052541324432207300200020ustar00rootroot00000000000000/* * ppui/fastfill.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * fastfill.h * MilkyTracker * * Created by Peter Barth on 28.12.07. * */ #ifdef __GNUC__ static __attribute__((noinline)) void fill_dword(pp_uint32* buff, pp_uint32 dw, pp_uint32 len) #else static inline void fill_dword(pp_uint32* buff, pp_uint32 dw, pp_uint32 len) #endif { #if defined(__ppc__) && defined(__GNUC__) // PPC assembly FTW!!1! // r3 = buff // r4 = dw // r5 = len asm volatile("li r9, 0\n" "srawi r10, r5, 2\n" "nop\n" // align loop start to 16 byte boundary "cmpw cr7,r10,r9\n" "nop\n" // see above "beq cr7,$+36\n" "2:\n" "stw r4,0(r3)\n" "stw r4,4(r3)\n" "stw r4,8(r3)\n" "stw r4,12(r3)\n" "addi r10,r10,-1\n" "addi r3,r3,16\n" // advance by 16 "cmpw cr7,r10,r9\n" "bne cr7,2b\n" "clrlwi r11, r5, 30\n" "nop\n" // align loop start to 16 byte boundary "cmpw cr7,r11,r9\n" "beq cr7,$+24\n" "1:\n" "stw r4,0(r3)\n" "addi r11,r11,-1\n" "addi r3,r3,4\n" // advance by 4 "cmpw cr7,r11,r9\n" "bne cr7,1b"); #else pp_uint32 newlen = len >> 2; pp_uint32 remlen = len & 3; if (newlen) { do { *buff = dw; *(buff+1) = dw; *(buff+2) = dw; *(buff+3) = dw; buff+=4; } while (--newlen); } if (remlen) { do { *buff++ = dw; } while (--remlen); } #endif } #ifdef __GNUC__ static __attribute__((noinline)) void fill_dword_vertical(pp_uint32* buff, pp_uint32 dw, pp_uint32 len, pp_uint32 pitch) #else static inline void fill_dword_vertical(pp_uint32* buff, pp_uint32 dw, pp_uint32 len, pp_uint32 pitch) #endif { #if defined(__ppc__) && defined(__GNUC__) asm volatile("nop\n" // align loop start to 16 byte boundary "nop\n" // same "nop\n" // same "li r9,0\n" "1:\n" "stw r4,0(r3)\n" "addi r5,r5,-1\n" "add r3,r3,r6\n" "cmpw cr7,r5,r9\n" "bne cr7,1b"); #else do { *buff = dw; buff+=(pitch>>2); } while (--len); #endif } MilkyTracker-1.02.00/src/ppui/haiku/000077500000000000000000000000001324432207300171205ustar00rootroot00000000000000MilkyTracker-1.02.00/src/ppui/haiku/DisplayDevice_Haiku.cpp000066400000000000000000000105771324432207300235040ustar00rootroot00000000000000/* * Copyright 2012 Julian Harnath * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "DisplayDevice_Haiku.h" #include "Graphics.h" #include "MilkyView.h" #include "MilkyWindow.h" #include "WaitWindow.h" #include #include #include #include #include #include DisplayDevice_Haiku::DisplayDevice_Haiku(MilkyView* milkyView, pp_int32 scaleFactor) : PPDisplayDeviceBase(milkyView->Bounds().IntegerWidth(), milkyView->Bounds().IntegerHeight(), scaleFactor), fMilkyView(milkyView), fDirtyRegion(milkyView->DirtyRegion()), fBitmapRect(milkyView->Bitmap()->Bounds()), fBitmapLock(milkyView->BitmapLock()), fWaitWindow(NULL) { // In general, the Tracker will hold the lock to the display buffer since // it could draw there anytime -- except when we block it, which we do in // the DisplayDevice_Haiku::update() method acquire_sem(fBitmapLock); PPGraphics_32bpp_generic* graphics = new PPGraphics_32bpp_generic( fMilkyView->Bounds().IntegerWidth(), fMilkyView->Bounds().IntegerHeight(), fMilkyView->Bitmap()->BytesPerRow(), fMilkyView->Bitmap()->Bits()); graphics->setComponentBitpositions(16, 8, 0); currentGraphics = graphics; currentGraphics->lock = true; } DisplayDevice_Haiku::~DisplayDevice_Haiku() { delete currentGraphics; } // #pragma mark - PPDisplayDeviceBase PPGraphicsAbstract* DisplayDevice_Haiku::open() { if (!isEnabled()) return NULL; currentGraphics->lock = false; return currentGraphics; } void DisplayDevice_Haiku::close() { currentGraphics->lock = true; } void DisplayDevice_Haiku::update() { fDirtyRegion->Include(fBitmapRect); release_sem(fBitmapLock); acquire_sem(fBitmapLock); } void DisplayDevice_Haiku::update(const PPRect&r) { // Translate coordinates: tracker -> view BRect updateRect(r.x1, r.y1, r.x2, r.y2); updateRect.OffsetBy(fMilkyView->TopLeft()); fDirtyRegion->Include(updateRect); release_sem(fBitmapLock); acquire_sem(fBitmapLock); } void DisplayDevice_Haiku::setSize(const PPSize& size) { // It seems this method is never used, and I'm not sure what it's supposed // to be used for. The other platforms resize the window, so we do it here // as well, but resizing the window doesn't resize its bitmap which makes // it kind of useless IMO. fMilkyView->Window()->ResizeTo(size.width, size.height); // TODO: move window in fullscreen mode? this->size = size; } // #pragma mark - ex. PPWindow void DisplayDevice_Haiku::setTitle(const PPSystemString& title) { fMilkyView->Window()->SetTitle(title); } bool DisplayDevice_Haiku::goFullScreen(bool b) { bool success = false; MilkyWindow* milkyWindow = (MilkyWindow*)fMilkyView->Window(); if (milkyWindow->LockLooper()) { success = milkyWindow->SetFullScreen(b); milkyWindow->UnlockLooper(); } else debugger("Failed to lock MilkyWindow looper"); if (success) bFullScreen = b; else fprintf(stderr, "ERROR: setting fullscreen mode failed\n"); return success; } PPSize DisplayDevice_Haiku::getDisplayResolution() const { BScreen screen; BRect frame = screen.Frame(); return PPSize(frame.IntegerWidth(), frame.IntegerHeight()); } void DisplayDevice_Haiku::shutDown() { fMilkyView->Window()->PostMessage(B_QUIT_REQUESTED); } void DisplayDevice_Haiku::signalWaitState(bool b, const PPColor& color) { if (b) { if (fWaitWindow != NULL) return; BWindow* window = fMilkyView->Window(); BRect frame = window->Frame(); fWaitWindow = new WaitWindow(frame.left + (frame.IntegerWidth() / 2), frame.top + (frame.IntegerHeight() / 2)); fWaitWindow->Show(); } else { if (fWaitWindow == NULL) return; fWaitWindow->LockLooper(); fWaitWindow->Quit(); fWaitWindow = NULL; } } void DisplayDevice_Haiku::setMouseCursor(MouseCursorTypes type) { } MilkyTracker-1.02.00/src/ppui/haiku/DisplayDevice_Haiku.h000066400000000000000000000037611324432207300231460ustar00rootroot00000000000000/* * Copyright 2012 Julian Harnath * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #ifndef __HAIKU_DISPLAYDEVICE_HAIKU_H__ #define __HAIKU_DISPLAYDEVICE_HAIKU_H__ #include "BasicTypes.h" #include "DisplayDeviceBase.h" #include #include class BRegion; class MilkyView; class WaitWindow; class DisplayDevice_Haiku : public PPDisplayDeviceBase { public: DisplayDevice_Haiku(MilkyView* milkyWindow, pp_int32 scaleFactor); virtual ~DisplayDevice_Haiku(); private: MilkyView* fMilkyView; BRegion* fDirtyRegion; BRect fBitmapRect; sem_id fBitmapLock; WaitWindow* fWaitWindow; // --- PPDisplayDeviceBase ------------------------------------------------ public: virtual PPGraphicsAbstract* open(); virtual void close(); virtual void update(); virtual void update(const PPRect&r); virtual void setSize(const PPSize& size); virtual bool supportsScaling() const { return false; } // --- ex. PPWindow ------------------------------------------------------- public: virtual void setTitle(const PPSystemString& title); virtual bool goFullScreen(bool b); virtual PPSize getDisplayResolution() const; virtual void shutDown(); virtual void signalWaitState(bool b, const PPColor& color); virtual void setMouseCursor(MouseCursorTypes type); }; #endif // __DISPLAYDEVICE_HAIKU_H__ MilkyTracker-1.02.00/src/ppui/haiku/KeyCodeMap.cpp000066400000000000000000000176331324432207300216170ustar00rootroot00000000000000/* * Copyright 2012 Julian Harnath * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "KeyCodeMap.h" #include "VirtualKeys.h" // Translation tables for Haiku key codes to SC/VK values as expected by // MilkyTracker. The comments below use US keyboard layout, but the key // codes are layout-invariant // Scancodes expected by MilkyTracker are Scancode Set 1 // For more information on Haiku key code assignments see: // BeBook -> Special Topics -> The Keyboard -> Key Codes uint16 gKeyCodeToSC[] = { // Code | Corresponding key // | in US layout // -----+------------------ 0x0, // 0x00 | [unassigned] 0x01, // 0x01 | Esc 0x3b, // 0x02 | F1 0x3c, // 0x03 | F2 0x3d, // 0x04 | F3 0x3e, // 0x05 | F4 0x3f, // 0x06 | F5 0x40, // 0x07 | F6 0x41, // 0x08 | F7 0x42, // 0x09 | F8 0x43, // 0x0a | F9 0x44, // 0x0b | F10 0x57, // 0x0c | F11 0x58, // 0x0d | F12 0x0, // 0x0e | Print Screen NOTE: 4 byte scancode, can't use it here 0x46, // 0x0f | Scroll Lock 0x0 , // 0x10 | Pause / Break NOTE: 4 byte scancode, can't use it here 0x29, // 0x11 | ` 0x02, // 0x12 | 1 0x03, // 0x13 | 2 0x04, // 0x14 | 3 0x05, // 0x15 | 4 0x06, // 0x16 | 5 0x07, // 0x17 | 6 0x08, // 0x18 | 7 0x09, // 0x19 | 8 0x0a, // 0x1a | 9 0x0b, // 0x1b | 0 0x0c, // 0x1c | - 0x0d, // 0x1d | = 0x0e, // 0x1e | Backspace 0xe152, // 0x1f | Insert 0xe147, // 0x20 | Home 0xe149, // 0x21 | Page Up 0xe147, // 0x22 | Num Lock 0xe135, // 0x23 | / (keypad) 0x37, // 0x24 | * (keypad) 0x4a, // 0x25 | - (keypad) 0x0f, // 0x26 | Tab 0x10, // 0x27 | Q 0x11, // 0x28 | W 0x12, // 0x29 | E 0x13, // 0x2a | R 0x14, // 0x2b | T 0x15, // 0x2c | Y 0x16, // 0x2d | U 0x17, // 0x2e | I 0x18, // 0x2f | O 0x19, // 0x30 | P 0x1a, // 0x31 | [ 0x1b, // 0x32 | ] 0x2b, // 0x33 | \ | 0xe153, // 0x34 | Del 0xe14f, // 0x35 | End 0xe151, // 0x36 | Page Down 0x47, // 0x37 | 7 (keypad) 0x48, // 0x38 | 8 (keypad) 0x49, // 0x39 | 9 (keypad) 0x4e, // 0x3a | + (keypad) 0x3a, // 0x3b | Caps Lock 0x1e, // 0x3c | A 0x1f, // 0x3d | S 0x20, // 0x3e | D 0x21, // 0x3f | F 0x22, // 0x40 | G 0x23, // 0x41 | H 0x24, // 0x42 | J 0x25, // 0x43 | K 0x26, // 0x44 | L 0x27, // 0x45 | ; 0x28, // 0x46 | ' 0x1c, // 0x47 | Enter 0x4b, // 0x48 | 4 (keypad) 0x4c, // 0x49 | 5 (keypad) 0x4d, // 0x4a | 6 (keypad) 0x2a, // 0x4b | Shift (left) 0x2c, // 0x4c | Z 0x2d, // 0x4d | X 0x2e, // 0x4e | C 0x2f, // 0x4f | V 0x30, // 0x50 | B 0x31, // 0x51 | N 0x32, // 0x52 | M 0x33, // 0x53 | , 0x34, // 0x54 | . 0x35, // 0x55 | / 0x36, // 0x56 | Shift (right) 0xe148, // 0x57 | Arrow Up 0x4f, // 0x58 | 1 (keypad) 0x50, // 0x59 | 2 (keypad) 0x51, // 0x5a | 3 (keypad) 0xe01c, // 0x5b | Enter (keypad) 0x1d, // 0x5c | Control (left) 0x38, // 0x5d | Alt (left) 0x39, // 0x5e | Spacebar 0xe038, // 0x5f | Alt (right) 0xe01d, // 0x60 | Control (right) 0xe14b, // 0x61 | Arrow Left 0xe150, // 0x62 | Arrow Down 0xe14d, // 0x63 | Arrow Right 0x52, // 0x64 | 0 (keypad) 0x53, // 0x65 | . (keypad) 0xe05b, // 0x66 | Option (left) 0xe05c, // 0x67 | Option (right) 0xe05d, // 0x68 | Menu 0x56 // 0x69 | Euro }; uint16 gKeyCodeToVK[] = { // Code | Corresponding key // | in US layout // -----+------------------ 0, // 0x00 | VK_ESCAPE, // 0x01 | Esc VK_F1, // 0x02 | F1 VK_F2, // 0x03 | F2 VK_F3, // 0x04 | F3 VK_F4, // 0x05 | F4 VK_F5, // 0x06 | F5 VK_F6, // 0x07 | F6 VK_F7, // 0x08 | F7 VK_F8, // 0x09 | F8 VK_F9, // 0x0a | F9 VK_F10, // 0x0b | F10 VK_F11, // 0x0c | F11 VK_F12, // 0x0d | F12 VK_PRINT, // 0x0e | Print Screen VK_SCROLL, // 0x0f | Scroll Lock VK_PAUSE, // 0x10 | Pause / Break 0, // 0x11 | ` 0, // 0x12 | 1 0, // 0x13 | 2 0, // 0x14 | 3 0, // 0x15 | 4 0, // 0x16 | 5 0, // 0x17 | 6 0, // 0x18 | 7 0, // 0x19 | 8 0, // 0x1a | 9 0, // 0x1b | 0 0, // 0x1c | - 0, // 0x1d | = VK_BACK, // 0x1e | Backspace VK_INSERT, // 0x1f | Insert VK_HOME, // 0x20 | Home VK_PRIOR, // 0x21 | Page Up VK_NUMLOCK, // 0x22 | Num Lock VK_DIVIDE, // 0x23 | / (keypad) VK_MULTIPLY, // 0x24 | * (keypad) VK_SUBTRACT, // 0x25 | - (keypad) VK_TAB, // 0x26 | Tab 0, // 0x27 | Q 0, // 0x28 | W 0, // 0x29 | E 0, // 0x2a | R 0, // 0x2b | T 0, // 0x2c | Y 0, // 0x2d | U 0, // 0x2e | I 0, // 0x2f | O 0, // 0x30 | P 0, // 0x31 | [ 0, // 0x32 | ] 0, // 0x33 | \ | VK_DELETE, // 0x34 | Del VK_END, // 0x35 | End VK_NEXT, // 0x36 | Page Down VK_NUMPAD7, // 0x37 | 7 (keypad) VK_NUMPAD8, // 0x38 | 8 (keypad) VK_NUMPAD9, // 0x39 | 9 (keypad) VK_ADD, // 0x3a | + (keypad) 0, // 0x3b | Caps Lock 0, // 0x3c | A 0, // 0x3d | S 0, // 0x3e | D 0, // 0x3f | F 0, // 0x40 | G 0, // 0x41 | H 0, // 0x42 | J 0, // 0x43 | K 0, // 0x44 | L 0, // 0x45 | ; 0, // 0x46 | ' VK_RETURN, // 0x47 | Enter VK_NUMPAD4, // 0x48 | 4 (keypad) VK_NUMPAD5, // 0x49 | 5 (keypad) VK_NUMPAD6, // 0x4a | 6 (keypad) VK_LSHIFT, // 0x4b | Shift (left) 0, // 0x4c | Z 0, // 0x4d | X 0, // 0x4e | C 0, // 0x4f | V 0, // 0x50 | B 0, // 0x51 | N 0, // 0x52 | M 0, // 0x53 | , 0, // 0x54 | . 0, // 0x55 | / VK_RSHIFT, // 0x56 | Shift (right) VK_UP, // 0x57 | Arrow Up VK_NUMPAD1, // 0x58 | 1 (keypad) VK_NUMPAD2, // 0x59 | 2 (keypad) VK_NUMPAD3, // 0x5a | 3 (keypad) VK_RETURN, // 0x5b | Enter (keypad) VK_LCONTROL, // 0x5c | Control (left) VK_LMENU, // 0x5d | Alt (left) VK_SPACE, // 0x5e | Spacebar VK_RMENU, // 0x5f | Alt (right) VK_RCONTROL, // 0x60 | Control (right) VK_LEFT, // 0x61 | Arrow Left VK_DOWN, // 0x62 | Arrow Down VK_RIGHT, // 0x63 | Arrow Right VK_NUMPAD0, // 0x64 | 0 (keypad) VK_DECIMAL, // 0x65 | . (keypad) TODO TEST VK_LWIN, // 0x66 | Option (left) VK_RWIN, // 0x67 | Option (right) VK_APPS, // 0x68 | Menu 0 // 0x69 | Euro }; uint16 KeyCodeToVK(int32 keyCode, char character) { uint16 vk = gKeyCodeToVK[keyCode]; if (vk != 0) return vk; if (character >= 'a' && character <= 'z') return (uint16)(character - 'a') + 0x41; if (character >= '0' && character <= '9') return (uint16)(character - 'a') + 0x30; return 0; } bool gSwapCommandControl = false; ModifierData gModifierDataShift = { B_SHIFT_KEY, B_LEFT_SHIFT_KEY, B_RIGHT_SHIFT_KEY, KeyModifierSHIFT, VK_SHIFT, VK_LSHIFT, VK_RSHIFT }; ModifierData gModifierDataControl = { B_CONTROL_KEY, B_LEFT_CONTROL_KEY, B_RIGHT_CONTROL_KEY, KeyModifierCTRL, VK_CONTROL, VK_LCONTROL, VK_RCONTROL }; ModifierData gModifierDataCommand = { B_COMMAND_KEY, B_LEFT_COMMAND_KEY, B_RIGHT_COMMAND_KEY, KeyModifierALT, VK_ALT, VK_LMENU, VK_RMENU }; MilkyTracker-1.02.00/src/ppui/haiku/KeyCodeMap.h000066400000000000000000000025621324432207300212570ustar00rootroot00000000000000/* * Copyright 2012 Julian Harnath * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #ifndef __HAIKU_KEYCODEMAP_H__ #define __HAIKU_KEYCODEMAP_H__ #include "Event.h" #include #include struct ModifierData { int32 modifier; int32 modifierLeft; int32 modifierRight; KeyModifiers keyModifiers; uint32 vk; uint32 vkLeft; uint32 vkRight; }; extern uint16 gKeyCodeToSC[]; inline uint16 KeyCodeToSC(int32 keyCode) { return gKeyCodeToSC[keyCode]; } uint16 KeyCodeToVK(int32 keyCode, char character); extern bool gSwapCommandControl; extern ModifierData gModifierDataShift; extern ModifierData gModifierDataControl; extern ModifierData gModifierDataCommand; #endif // __HAIKU_KEYCODEMAP_H__ MilkyTracker-1.02.00/src/ppui/haiku/MilkyView.cpp000066400000000000000000000305141324432207300215470ustar00rootroot00000000000000/* * Copyright 2012 Julian Harnath * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "MilkyView.h" #include "MilkyWindow.h" #include "Event.h" #include "KeyCodeMap.h" #include #include #include #include #include MilkyView::MilkyView(BRect frame, int32 scaleFactor, sem_id trackerLock) : BView(frame, "MilkyView", B_FOLLOW_ALL, B_PULSE_NEEDED | B_WILL_DRAW), fMouseDownButtons(0), fMouseDownTime(0), fBitmap(new BBitmap(frame, B_RGBA32)), fBitmapRect(frame) { SetViewColor(B_TRANSPARENT_32_BIT); fBitmapLock = create_sem(1, "Bitmap lock"); } MilkyView::~MilkyView() { // Stop drawing kill_thread(fDrawThread); // Release bitmap delete fBitmap; delete_sem(fBitmapLock); } void MilkyView::AttachedToWindow() { // Start drawing thread --------------------------------------------------- fDrawThread = spawn_thread(&_DrawThread, "Milky drawing", B_URGENT_DISPLAY_PRIORITY, this); if (fDrawThread < B_OK) debugger("Could not setup drawing thread"); status_t status = resume_thread(fDrawThread); if (status < B_OK) debugger("Could not start drawing thread"); // Various things --------------------------------------------------------- SetEventMask(0, B_NO_POINTER_HISTORY); // Receive less mouse move events MakeFocus(); // Get keyboard input focus } void MilkyView::MessageReceived(BMessage* message) { switch (message->what) { case B_SIMPLE_DATA: { // We received a drag & drop message, probably from Tracker // (the file manager in this case)... Check if there is a file // reference in it entry_ref ref; status_t status = message->FindRef("refs", &ref); if (status == B_OK) { // Forward message to the application which will check the file // type and try to open it be_app->RefsReceived(message); } } break; default: BView::MessageReceived(message); break; } } // #pragma mark - Graphics output void MilkyView::Draw(BRect updateRect) { // If our top left was moved, fill the border around the screen with black if (fBitmapRect.left != 0 || fBitmapRect.top != 0) { BRegion fillRegion(updateRect); fillRegion.Exclude(fBitmapRect); SetHighColor(0, 0, 0); FillRegion(&fillRegion); } // Blit the tracker screen bitmap BRect targetRect = updateRect & fBitmapRect; BRect sourceRect = targetRect.OffsetByCopy(-fBitmapRect.left, -fBitmapRect.top); DrawBitmap(fBitmap, sourceRect, targetRect, B_WAIT_FOR_RETRACE); } void MilkyView::DrawScreen() { bigtime_t beginTime = 0; MilkyWindow* milkyWindow = (MilkyWindow*)Window(); for(;;) { beginTime = system_time(); acquire_sem(fBitmapLock); milkyWindow->LockLooper(); const uint32 dirtyRectCount = fDirtyRegion.CountRects(); for (uint32 index = 0; index < dirtyRectCount; index++) Draw(fDirtyRegion.RectAt(index)); // Sync(); milkyWindow->UnlockLooper(); fDirtyRegion.MakeEmpty(); release_sem(fBitmapLock); // Limit framerate to 50 fps snooze_until(beginTime + 20000, B_SYSTEM_TIMEBASE); } } status_t MilkyView::_DrawThread(void* data) { MilkyView* milkyView = (MilkyView*)data; milkyView->DrawScreen(); return B_OK; } // #pragma mark - Keyboard input handling void MilkyView::KeyDown(const char* bytes, int32 numBytes) { MilkyWindow* milkyWindow = (MilkyWindow*)Window(); BMessage* message = Window()->CurrentMessage(); int32 key = message->FindInt32("key"); pp_uint16 keyArray[3]; _FillKeyArray(key, bytes, numBytes, keyArray); PPEvent event(eKeyDown, &keyArray, sizeof(keyArray)); milkyWindow->RaiseEvent(&event); // On Command+Enter, toggle fullscreen mode if (key == 0x47 && (modifiers() & B_COMMAND_KEY)) { PPEvent event(eFullScreen); milkyWindow->RaiseEvent(&event); } // For printable characters, also raise an eKeyChar event uint16 character = bytes[0]; if (character >= 32 && character <= 127) { PPEvent event(eKeyChar, &character, sizeof(character)); milkyWindow->RaiseEvent(&event); } } void MilkyView::KeyUp(const char* bytes, int32 numBytes) { MilkyWindow* milkyWindow = (MilkyWindow*)Window(); BMessage* message = Window()->CurrentMessage(); int32 key = message->FindInt32("key"); pp_uint16 keyArray[3]; _FillKeyArray(key, bytes, numBytes, keyArray); PPEvent event(eKeyUp, &keyArray, sizeof(keyArray)); milkyWindow->RaiseEvent(&event); } void MilkyView::ModifiersChanged(int32 oldModifiers, int32 modifiers) { _UpdateModifier(&gModifierDataShift, oldModifiers, modifiers); _UpdateModifier(&gModifierDataControl, oldModifiers, modifiers); _UpdateModifier(&gModifierDataCommand, oldModifiers, modifiers); } void MilkyView::_FillKeyArray(int32 keyCode, const char* bytes, int32 numBytes, pp_uint16* keyArray) { keyArray[0] = KeyCodeToVK(keyCode, *bytes); // virtualkey keyArray[1] = KeyCodeToSC(keyCode); // scancode uint8* charBytes = (uint8*)&keyArray[2]; // character charBytes[0] = bytes[0]; if (numBytes > 1) charBytes[1] = bytes[1]; } void MilkyView::_UpdateModifier(ModifierData* modifierData, int32 oldModifiers, int32 modifiers) { MilkyWindow* milkyWindow = (MilkyWindow*)Window(); bool oldState = (oldModifiers & modifierData->modifier) != 0; bool state = (modifiers & modifierData->modifier) != 0; pp_uint16 keyArray[3] = { modifierData->vk, 0, 0 }; if (!oldState && state) { // Key pressed ---------------------------------------------- setKeyModifier(modifierData->keyModifiers); // Send generic key event PPEvent event(eKeyDown, &keyArray, sizeof(keyArray)); milkyWindow->RaiseEvent(&event); // Send another key event for left or right key version if ((modifiers & modifierData->modifierLeft) != 0) { keyArray[0] = modifierData->vkLeft; PPEvent leftEvent(eKeyDown, &keyArray, sizeof(keyArray)); milkyWindow->RaiseEvent(&leftEvent); } else { keyArray[0] = modifierData->vkRight; PPEvent rightEvent(eKeyDown, &keyArray, sizeof(keyArray)); milkyWindow->RaiseEvent(&rightEvent); } } else if (oldState && !state) { // Key lifted ----------------------------------------------- clearKeyModifier(modifierData->keyModifiers); // Send generic key event PPEvent event(eKeyUp, &keyArray, sizeof(keyArray)); milkyWindow->RaiseEvent(&event); // Send another key event for left or right key version if ((oldModifiers & modifierData->modifierLeft) != 0) { keyArray[0] = modifierData->vkLeft; PPEvent leftEvent(eKeyDown, &keyArray, sizeof(keyArray)); milkyWindow->RaiseEvent(&leftEvent); } else { keyArray[0] = modifierData->vkRight; PPEvent rightEvent(eKeyDown, &keyArray, sizeof(keyArray)); milkyWindow->RaiseEvent(&rightEvent); } } } // #pragma mark - Mouse input handling void MilkyView::MouseDown(BPoint point) { // Ignore mouse events outside the bitmap area if (!fBitmapRect.Contains(point)) return; BMessage* message = Window()->CurrentMessage(); int32 buttons = message->FindInt32("buttons"); // Translate coordinates: view -> tracker point -= fBitmapRect.LeftTop(); PPPoint pPoint(point.x, point.y); // Raise event(s) EEventDescriptor singleClickEventDescriptor; EEventDescriptor doubleClickEventDescriptor; if (buttons & B_PRIMARY_MOUSE_BUTTON) { singleClickEventDescriptor = eLMouseDown; doubleClickEventDescriptor = eLMouseDoubleClick; } else if (buttons & B_SECONDARY_MOUSE_BUTTON) { singleClickEventDescriptor = eRMouseDown; doubleClickEventDescriptor = eRMouseDoubleClick; } else return; MilkyWindow* milkyWindow = (MilkyWindow*)Window(); PPEvent event(singleClickEventDescriptor, &pPoint, sizeof(PPPoint)); milkyWindow->RaiseEvent(&event); if (message->FindInt32("clicks") == 2) { PPEvent event(doubleClickEventDescriptor, &pPoint, sizeof(PPPoint)); milkyWindow->RaiseEvent(&event); } // Activate pulses which will be used to repeat click events when a mouse // button is held for longer than 500ms fMouseDownButtons = buttons & (B_PRIMARY_MOUSE_BUTTON | B_SECONDARY_MOUSE_BUTTON); fMouseDownTime = system_time(); Window()->SetPulseRate(20000); // We want to keep receive the following mouse up event even when it's // outside the window SetMouseEventMask(B_POINTER_EVENTS); } void MilkyView::MouseUp(BPoint point) { BMessage* message = Window()->CurrentMessage(); int32 buttons = message->FindInt32("buttons"); // Translate coordinates: view -> tracker point -= fBitmapRect.LeftTop(); PPPoint pPoint(point.x, point.y); // Raise event EEventDescriptor eventDescriptor; if (fMouseDownButtons & B_PRIMARY_MOUSE_BUTTON) eventDescriptor = eLMouseUp; else if (fMouseDownButtons & B_SECONDARY_MOUSE_BUTTON) eventDescriptor = eRMouseUp; else return; MilkyWindow* milkyWindow = (MilkyWindow*)Window(); PPEvent event(eventDescriptor, &pPoint, sizeof(PPPoint)); milkyWindow->RaiseEvent(&event); // Disable pulses when no more mouse button is depresseed fMouseDownButtons = buttons & (B_PRIMARY_MOUSE_BUTTON | B_SECONDARY_MOUSE_BUTTON); if (fMouseDownButtons == 0) Window()->SetPulseRate(0); } void MilkyView::MouseMoved(BPoint point, uint32 transit, const BMessage* message) { static bigtime_t sMouseMoveTime = 0; // Ignore mouse events outside the bitmap area if (!fBitmapRect.Contains(point)) return; BMessage* moveMessage = Window()->CurrentMessage(); int32 buttons = moveMessage->FindInt32("buttons"); // Translate coordinates: view -> tracker point -= fBitmapRect.LeftTop(); PPPoint pPoint(point.x, point.y); // Raise event (if a mouse button is depressed, make it a drag event) EEventDescriptor eventDescriptor = eMouseMoved; if (transit == B_INSIDE_VIEW) { if (buttons & B_PRIMARY_MOUSE_BUTTON) eventDescriptor = eLMouseDrag; else if (buttons & B_SECONDARY_MOUSE_BUTTON) eventDescriptor = eRMouseDrag; } // Limit the number of mouse move events to max 20 per second // Without the limit, dragging scrollbars is lagging because it can't // keep up with drawing bigtime_t currentTime = system_time(); if (currentTime > (sMouseMoveTime + 50000)) { sMouseMoveTime = currentTime; MilkyWindow* milkyWindow = (MilkyWindow*)Window(); PPEvent event(eventDescriptor, &pPoint, sizeof(PPPoint)); milkyWindow->RaiseEvent(&event); } } void MilkyView::MouseWheelChanged(float deltaX, float deltaY) { BPoint point; uint32 buttons; GetMouse(&point, &buttons); // Ignore mouse events outside the bitmap area if (!fBitmapRect.Contains(point)) return; // Translate coordinates: view -> tracker point -= fBitmapRect.LeftTop(); // Raise event TMouseWheelEventParams wheelEventParams; wheelEventParams.pos.x = (pp_int32)point.x; wheelEventParams.pos.y = (pp_int32)point.y; wheelEventParams.delta = (pp_int32)-deltaY; MilkyWindow* milkyWindow = (MilkyWindow*)Window(); PPEvent event(eMouseWheelMoved, &wheelEventParams, sizeof(wheelEventParams)); milkyWindow->RaiseEvent(&event); } void MilkyView::Pulse() { if (fMouseDownButtons == 0) { // This shouldn't happen, but it's not fatal, so print a warning. // If you see this warning, find and fix the bug :-) fprintf(stderr, "Warning: MilkyView::Pulse() called without pressed " "mouse buttons\n"); Window()->SetPulseRate(0); return; } // Do nothing if the button press was less than 500ms ago if (system_time() < (fMouseDownTime + 500000)) return; BPoint point; uint32 buttons; GetMouse(&point, &buttons); // Ignore mouse events in the black border in fullscreen mode if (!fBitmapRect.Contains(point)) return; // Translate coordinates: view -> tracker point -= fBitmapRect.LeftTop(); // Raise event EEventDescriptor eventDescriptor; if (buttons & B_PRIMARY_MOUSE_BUTTON) eventDescriptor = eLMouseRepeat; else if (buttons & B_SECONDARY_MOUSE_BUTTON) eventDescriptor = eRMouseRepeat; else return; MilkyWindow* milkyWindow = (MilkyWindow*)Window(); PPPoint pPoint(point.x, point.y); PPEvent event(eventDescriptor, &pPoint, sizeof(PPPoint)); milkyWindow->RaiseEvent(&event); } MilkyTracker-1.02.00/src/ppui/haiku/MilkyView.h000066400000000000000000000053251324432207300212160ustar00rootroot00000000000000/* * Copyright 2012 Julian Harnath * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #ifndef __HAIKU_MILKYVIEW_H__ #define __HAIKU_MILKYVIEW_H__ #include #include #include #include "Event.h" struct ModifierData; class MilkyView : public BView { public: MilkyView(BRect frame, int32 scaleFactor, sem_id trackerLock); virtual ~MilkyView(); virtual void AttachedToWindow(); void MessageReceived(BMessage* message); // --- Graphics output -------------------------------------------------------- public: virtual void Draw(BRect updateRect); void DrawScreen(); BBitmap* Bitmap() { return fBitmap; } sem_id BitmapLock() { return fBitmapLock; } BRegion* DirtyRegion() { return &fDirtyRegion; } void SetTopLeft(int x, int y) { fBitmapRect.OffsetTo(x, y); } BPoint TopLeft() { return fBitmapRect.LeftTop(); } private: static status_t _DrawThread(void* data); thread_id fDrawThread; BBitmap* fBitmap; // protected by fBitmapLock BRect fBitmapRect; sem_id fBitmapLock; BRegion fDirtyRegion; // protected by fBitmapLock // --- Keyboard input handling ------------------------------------------------ public: virtual void KeyDown(const char* bytes, int32 numBytes); virtual void KeyUp(const char* bytes, int32 numBytes); void ModifiersChanged(int32 oldModifiers, int32 modifiers); private: void _FillKeyArray(int32 keyCode, const char* bytes, int32 numBytes, pp_uint16* keyArray); void _UpdateModifier(ModifierData* modifierData, int32 oldModifiers, int32 modifiers); // --- Mouse input handling --------------------------------------------------- public: virtual void MouseDown(BPoint point); virtual void MouseUp(BPoint point); virtual void MouseMoved(BPoint point, uint32 transit, const BMessage* message); void MouseWheelChanged(float deltaX, float deltaY); virtual void Pulse(); private: int32 fMouseDownButtons; bigtime_t fMouseDownTime; }; #endif // __HAIKU_MILKYVIEW_H__ MilkyTracker-1.02.00/src/ppui/haiku/MilkyWindow.cpp000066400000000000000000000174261324432207300221130ustar00rootroot00000000000000/* * Copyright 2012 Julian Harnath * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "MilkyWindow.h" #include "DisplayDevice_Haiku.h" #include "MilkyApplication.h" #include "MilkyView.h" #include "Screen.h" #include "Tracker.h" #include #include #include #include #include MilkyWindow::MilkyWindow(BRect frame, int32 scaleFactor, bool fullScreen, Tracker* tracker, sem_id trackerLock) : BWindow(frame, "", B_TITLED_WINDOW, B_NOT_RESIZABLE | B_NOT_ZOOMABLE), fTracker(tracker), fTrackerLock(trackerLock), fEventThread(0), fEventPort(0), fSwitchFullscreenResolution(false) { SetPulseRate(0); status_t status ; // Setup view and connect it to the tracker screen ------------------------ fMilkyView = new MilkyView(Bounds(), scaleFactor, trackerLock); fDisplayDevice = new DisplayDevice_Haiku(fMilkyView, scaleFactor); // Important to add it _after_ creating the display device to prevent an // inter-task deadlock on fBitmapLock and the window's looper AddChild(fMilkyView); fTrackerScreen = new PPScreen(fDisplayDevice, fTracker); fTracker->setScreen(fTrackerScreen); // Enter fullscreen mode if requested ------------------------------------- BScreen screen; screen.GetMode(&fOriginalMode); if (fullScreen) SetFullScreen(true); // Start event forwarding ------------------------------------------------- fEventPort = create_port(64, "Milky event port"); fEventThread = spawn_thread(&_EventThread, "Milky event forwarder", B_DISPLAY_PRIORITY, this); if (fEventPort < B_OK || fEventThread < B_OK) debugger("Could not setup event thread"); status = resume_thread(fEventThread); if (status < B_OK) debugger("Could not start event thread"); } MilkyWindow::~MilkyWindow() { delete fTrackerScreen; delete fDisplayDevice; } bool MilkyWindow::QuitRequested() { // Do not allow quit while the tracker is still starting up // (that would crash it) if (be_app->IsLaunching()) return false; // Ask tracker to shutdown if (!fTracker->shutDown()) return false; PPEvent event(eAppQuit); RaiseEvent(&event); MilkyApplication* milkyApplication = (MilkyApplication*)be_app; milkyApplication->TrackerListening() = false; // Kill event forwarder kill_thread(fEventThread); close_port(fEventPort); be_app->PostMessage(B_QUIT_REQUESTED); return true; } // #pragma mark - Event forwarding void MilkyWindow::MessageReceived(BMessage* message) { switch (message->what) { case B_MOUSE_WHEEL_CHANGED: { float deltaX = message->FindFloat("be:wheel_delta_x"); float deltaY = message->FindFloat("be:wheel_delta_y"); fMilkyView->MouseWheelChanged(deltaX, deltaY); } break; case B_MODIFIERS_CHANGED: { int32 modifiers = message->FindInt32("modifiers"); int32 oldModifiers = message->FindInt32("be:old_modifiers"); fMilkyView->ModifiersChanged(oldModifiers, modifiers); break; } default: BWindow::MessageReceived(message); break; } } void MilkyWindow::DispatchMessage(BMessage* message, BHandler* target) { // Special treatment for B_KEY_DOWN messages when command or control // are pressed: forward them to the Tracker which handles shortcuts itself if (message->what == B_KEY_DOWN) { int32 modifiers = message->FindInt32("modifiers"); if (modifiers & (B_COMMAND_KEY | B_CONTROL_KEY)) { int32 rawChar = message->FindInt32("raw_char"); fMilkyView->KeyDown((const char*)&rawChar, 1); return; } } BWindow::DispatchMessage(message, target); } void MilkyWindow::ForwardEvents() { int32 messageCode; PPEvent event; ssize_t size; MilkyApplication* milkyApplication = (MilkyApplication*)be_app; // Forward events received through the event port to the tracker for (;;) { size = read_port(fEventPort, &messageCode, &event, sizeof(PPEvent)); if (size <= 0) debugger("Reading event port failed"); if (milkyApplication->TrackerListening()) { acquire_sem(fTrackerLock); fTrackerScreen->raiseEvent(&event); release_sem(fTrackerLock); } } } status_t MilkyWindow::_EventThread(void* data) { MilkyWindow* milkyWindow = (MilkyWindow*)data; milkyWindow->ForwardEvents(); return B_OK; } // #pragma mark - Fullscreen mode setting bool MilkyWindow::SetFullScreen(bool fullscreen) { BScreen screen; int milkyWidth = fMilkyView->Bitmap()->Bounds().IntegerWidth(); int milkyHeight = fMilkyView->Bitmap()->Bounds().IntegerHeight(); if (fullscreen) { // Switch to fullscreen mode ------------------------------------------ screen.GetMode(&fOriginalMode); if ( fOriginalMode.virtual_width == milkyWidth && fOriginalMode.virtual_height == milkyHeight) { MoveTo(0, 0); ResizeTo(milkyWidth, milkyHeight); return true; } display_mode* bestMatch = NULL; display_mode* modeList = NULL; if (fSwitchFullscreenResolution) { // MilkyPlayer's screen resolution is different from the physical // screen resolution. Try to find a fitting mode. uint32 modeCount; screen.GetModeList(&modeList, &modeCount); int tempWidth = INT_MAX; int tempHeight = INT_MAX; for (int i = 0; i < modeCount; i++) { display_mode* mode = &modeList[i]; // Choose a colour space that is either identical to the // current one or our preferred one, 32 bit if ( mode->space != fOriginalMode.space && mode->space != B_RGBA32) continue; // Choose a mode with identical refresh rate than current mode if (_ModeRefreshRate(&fOriginalMode) != _ModeRefreshRate(mode)) continue; // If the mode is an exact match in resolution, take it if ( mode->virtual_width == milkyWidth && mode->virtual_height == milkyHeight) { bestMatch = mode; break; } // Second best choice: a mode which is larger than necessary // Out of all larger modes, we want the smallest // (i.e. the tightest fit) if ( mode->virtual_width > milkyWidth && mode->virtual_height > milkyHeight && mode->virtual_width < tempWidth && mode->virtual_height < tempHeight) { bestMatch = mode; tempWidth = mode->virtual_width; tempHeight = mode->virtual_height; } } if (bestMatch == NULL) { free(modeList); return false; } screen.SetMode(bestMatch); } else bestMatch = &fOriginalMode; // If no exact match was found, center milkyview on screen with a // black border around it if ( bestMatch->virtual_width > milkyWidth || bestMatch->virtual_height > milkyHeight) { fMilkyView->SetTopLeft( (bestMatch->virtual_width - milkyWidth) / 2, (bestMatch->virtual_height - milkyHeight) / 2); } if (modeList != NULL) free(modeList); MoveTo(0, 0); ResizeTo(bestMatch->virtual_width, bestMatch->virtual_height); fMilkyView->Invalidate(); return true; } else { // Switch to window mode ---------------------------------------------- if (fSwitchFullscreenResolution) screen.SetMode(&fOriginalMode); MoveTo(100, 100); ResizeTo(milkyWidth, milkyHeight); fMilkyView->SetTopLeft(0, 0); fMilkyView->Invalidate(); } } uint32 MilkyWindow::_ModeRefreshRate(display_mode* mode) { return (1000 * (uint32)mode->timing.pixel_clock) / ((uint32)mode->timing.h_total * (uint32)mode->timing.v_total); } MilkyTracker-1.02.00/src/ppui/haiku/MilkyWindow.h000066400000000000000000000046101324432207300215470ustar00rootroot00000000000000/* * Copyright 2012 Julian Harnath * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #ifndef __HAIKU_MILKYWINDOW_H__ #define __HAIKU_MILKYWINDOW_H__ #include #include #include "Event.h" class DisplayDevice_Haiku; class MilkyView; class PPScreen; class Tracker; class MilkyWindow : public BWindow { public: MilkyWindow(BRect frame, int32 scaleFactor, bool fullScreen, Tracker* tracker, sem_id trackerLock); virtual ~MilkyWindow(); virtual bool QuitRequested(); PPScreen* TrackerScreen() { return fTrackerScreen; } private: MilkyView* fMilkyView; DisplayDevice_Haiku* fDisplayDevice; PPScreen* fTrackerScreen; Tracker* fTracker; sem_id fTrackerLock; // --- Event forwarding ------------------------------------------------------- public: virtual void MessageReceived(BMessage* message); virtual void DispatchMessage(BMessage* message, BHandler* target); void ForwardEvents(); status_t RaiseEvent(PPEvent* event); private: static status_t _EventThread(void* data); thread_id fEventThread; port_id fEventPort; // --- Fullscreen mode setting ------------------------------------------------ public: bool SetFullScreen(bool fullscreen); void SetSwitchFullscreenResolution(bool enabled) { fSwitchFullscreenResolution = enabled; } private: uint32 _ModeRefreshRate(display_mode* mode); display_mode fOriginalMode; bool fSwitchFullscreenResolution; }; inline status_t MilkyWindow::RaiseEvent(PPEvent* event) { status_t status = write_port_etc(fEventPort, 0, event, sizeof(PPEvent), B_TIMEOUT, 0); if (status == B_BAD_PORT_ID) debugger("Event port write failed: bad port ID"); } #endif // __HAIKU_MILKYWINDOW_H__ MilkyTracker-1.02.00/src/ppui/osinterface/000077500000000000000000000000001324432207300203215ustar00rootroot00000000000000MilkyTracker-1.02.00/src/ppui/osinterface/CMakeLists.txt000066400000000000000000000060421324432207300230630ustar00rootroot00000000000000# # src/ppui/osinterface/CMakeLists.txt # # Copyright 2016 Dale Whinham # # This file is part of MilkyTracker. # # MilkyTracker 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. # # MilkyTracker 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 MilkyTracker. If not, see . # set( SOURCES PPPathFactory.cpp ) set( HEADERS PPMessageBox.h PPModalDialog.h PPOpenPanel.h PPPathFactory.h PPQuitSaveAlert.h PPSavePanel.h PPSystem.h ) # Add platform-specific sources and include paths if(APPLE) list(APPEND SOURCES cocoa/PPMessageBox_COCOA.mm cocoa/PPOpenPanel_COCOA.mm cocoa/PPQuitSaveAlert_COCOA.mm cocoa/PPSavePanel_COCOA.mm posix/PPMutex.cpp posix/PPPath_POSIX.cpp posix/PPSystem_POSIX.cpp ) list(APPEND HEADERS posix/PPMutex.h posix/PPPath_POSIX.h posix/PPSystemString_POSIX.h posix/PPSystem_POSIX.h ) include_directories( ${PROJECT_SOURCE_DIR}/src/ppui/osinterface/posix ) elseif(WIN32) list(APPEND SOURCES win32/PPMessageBox_WIN32.cpp win32/PPMutex.cpp win32/PPOpenPanel_WIN32.cpp win32/PPPath_WIN32.cpp win32/PPQuitSaveAlert_WIN32.cpp win32/PPSavePanel_WIN32.cpp win32/PPSystem_WIN32.cpp win32/WaitWindow_WIN32.cpp ) list(APPEND HEADERS win32/PPMutex.h win32/PPPath_WIN32.h win32/PPSystemString_WIN32.h win32/PPSystem_WIN32.h win32/WaitWindow_WIN32.h ) include_directories( ${PROJECT_SOURCE_DIR}/src/milkyplay ${PROJECT_SOURCE_DIR}/src/ppui/osinterface/win32 ) else() list(APPEND SOURCES posix/PPPath_POSIX.cpp posix/PPSystem_POSIX.cpp sdl/PPMessageBox_SDL.cpp sdl/PPMutex.cpp sdl/PPOpenPanel_SDL.cpp sdl/PPQuitSaveAlert_SDL.cpp sdl/PPSavePanel_SDL.cpp sdl/SDL_ModalLoop.cpp ) list(APPEND HEADERS posix/PPMutex.h posix/PPPath_POSIX.h posix/PPSystemString_POSIX.h posix/PPSystem_POSIX.h sdl/PPMutex.h sdl/SDL_ModalLoop.h ) include_directories( ${PROJECT_SOURCE_DIR}/src/ppui/osinterface/posix ${SDL2_INCLUDE_DIRS} ) endif() include_directories( ${PROJECT_SOURCE_DIR}/src/ppui ${PROJECT_SOURCE_DIR}/src/ppui/osinterface ) add_library(osinterface ${SOURCES} ${HEADERS}) if(APPLE) # Enable ARC (automatic reference counting) for OS X build set_property( TARGET osinterface APPEND_STRING PROPERTY COMPILE_FLAGS "-fobjc-arc" ) endif() MilkyTracker-1.02.00/src/ppui/osinterface/PPMessageBox.h000066400000000000000000000023641324432207300227740ustar00rootroot00000000000000/* * ppui/osinterface/PPMessageBox.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * PPMessageBox.h * MilkyTracker * * Created by Peter Barth on 27.09.05. * */ #ifndef PPMESSAGEBOX__H #define PPMESSAGEBOX__H #include "PPModalDialog.h" class PPMessageBox : public PPModalDialog { private: PPSystemString caption, content; public: PPMessageBox(PPScreen* screen, const PPSystemString& strCaption, const PPSystemString& strContent) : PPModalDialog(screen), caption(strCaption), content(strContent) { } virtual ReturnCodes runModal(); }; #endif MilkyTracker-1.02.00/src/ppui/osinterface/PPModalDialog.h000066400000000000000000000023601324432207300231070ustar00rootroot00000000000000/* * ppui/osinterface/PPModalDialog.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * PPModalDialog.h * MilkyTracker * * Created by Peter Barth on 28.03.05. * */ #ifndef PPMODALDIALOG__H #define PPMODALDIALOG__H #include "BasicTypes.h" class PPScreen; class PPModalDialog { public: enum ReturnCodes { ReturnCodeOK, ReturnCodeCANCEL, ReturnCodeNO }; protected: PPScreen* screen; public: PPModalDialog(PPScreen* theScreen) : screen(theScreen) { } virtual ~PPModalDialog() { } virtual ReturnCodes runModal() = 0; }; #endif MilkyTracker-1.02.00/src/ppui/osinterface/PPOpenPanel.h000066400000000000000000000030161324432207300226130ustar00rootroot00000000000000/* * ppui/osinterface/PPOpenPanel.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #ifndef __PPOPENPANEL_H__ #define __PPOPENPANEL_H__ #include "PPModalDialog.h" #include "SimpleVector.h" class PPOpenPanel : public PPModalDialog { protected: PPSimpleVector items; PPSystemString fileName; char* caption; public: PPOpenPanel(PPScreen* screen, const char* caption); virtual ~PPOpenPanel(); // must contain pairs of extensions / description // terminated by TWO NULL pointers virtual void addExtensions(const char* const extensions[]) { for (pp_uint32 i = 0; extensions[i] != NULL; i+=2) addExtension(extensions[i], extensions[i+1]); } virtual void addExtension(const PPString& ext, const PPString& desc); virtual const PPSystemString& getFileName() { return fileName; } virtual ReturnCodes runModal(); }; #endif MilkyTracker-1.02.00/src/ppui/osinterface/PPPathFactory.cpp000066400000000000000000000030221324432207300235060ustar00rootroot00000000000000/* * ppui/osinterface/PPPathFactory.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * PPPathFactory.cpp * MilkyTracker * * Created by Peter Barth on 27.11.06. * */ #include "PPPathFactory.h" #include "BasicTypes.h" #if !defined(__PPUI_WINDOWS__) #include "PPPath_POSIX.h" PPPathEntry* PPPathFactory::createPathEntry() { return new PPPathEntry_POSIX(); } PPPath* PPPathFactory::createPath() { return new PPPath_POSIX(); } PPPath* PPPathFactory::createPathFromString(const PPSystemString& path) { return new PPPath_POSIX(path); } #else #include "PPPath_WIN32.h" PPPathEntry* PPPathFactory::createPathEntry() { return new PPPathEntry_WIN32(); } PPPath* PPPathFactory::createPath() { return new PPPath_WIN32(); } PPPath* PPPathFactory::createPathFromString(const PPSystemString& path) { return new PPPath_WIN32(path); } #endif MilkyTracker-1.02.00/src/ppui/osinterface/PPPathFactory.h000066400000000000000000000022531324432207300231600ustar00rootroot00000000000000/* * ppui/osinterface/PPPathFactory.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * PPPathFactory.h * MilkyTracker * * Created by Peter Barth on 27.11.06. * */ #ifndef __PPPATHFACTORY_POSIX_H__ #define __PPPATHFACTORY_POSIX_H__ #include "PPPath.h" class PPPathFactory { private: PPPathFactory() { } public: static PPPathEntry* createPathEntry(); static PPPath* createPath(); static PPPath* createPathFromString(const PPSystemString& path); }; #endif // __PPPATH_POSIX_H__ MilkyTracker-1.02.00/src/ppui/osinterface/PPQuitSaveAlert.h000066400000000000000000000021501324432207300234610ustar00rootroot00000000000000/* * ppui/osinterface/PPQuitSaveAlert.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * PPQuitSaveAlert.h * MilkyTracker * * Created by Peter Barth on 28.03.05. * */ #ifndef PPQUITSAVEALERT__H #define PPQUITSAVEALERT__H #include "PPModalDialog.h" class PPQuitSaveAlert : public PPModalDialog { public: PPQuitSaveAlert(PPScreen* screen) : PPModalDialog(screen) { } virtual ReturnCodes runModal(); }; #endif MilkyTracker-1.02.00/src/ppui/osinterface/PPSavePanel.h000066400000000000000000000024151324432207300226120ustar00rootroot00000000000000/* * ppui/osinterface/PPSavePanel.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * PPSavePanel.h * MilkyTracker * * Created by Peter Barth on Sat Mar 05 2005. * */ #ifndef PPSAVEPANEL__H #define PPSAVEPANEL__H #include "PPOpenPanel.h" class PPSavePanel : public PPOpenPanel { protected: PPSystemString defaultFileName; public: PPSavePanel(PPScreen* screen, const char* caption, const PPSystemString& defaultFileName) : PPOpenPanel(screen, caption) { this->defaultFileName = defaultFileName; } virtual ~PPSavePanel() {} virtual ReturnCodes runModal(); }; #endif MilkyTracker-1.02.00/src/ppui/osinterface/PPSystem.h000066400000000000000000000015571324432207300222260ustar00rootroot00000000000000/* * ppui/osinterface/PPSystem.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #if defined(__PPUI_WINDOWS__) #include "PPSystem_WIN32.h" #else #include "PPSystem_POSIX.h" #endif MilkyTracker-1.02.00/src/ppui/osinterface/carbon/000077500000000000000000000000001324432207300215655ustar00rootroot00000000000000MilkyTracker-1.02.00/src/ppui/osinterface/carbon/PPMessageBox_CARBON.cpp000066400000000000000000000024321324432207300256130ustar00rootroot00000000000000/* * ppui/osinterface/carbon/PPMessageBox_CARBON.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * PPMessageBox_CARBON.cpp * MilkyTracker * * Created by Peter Barth on 27.09.05. * */ #include #include "PPMessageBox.h" PPMessageBox::ReturnCodes PPMessageBox::runModal() { ReturnCodes res = ReturnCodeOK; OSStatus err = noErr; SInt16 out; Str255 caption, content; CopyCStringToPascal(this->caption, caption); CopyCStringToPascal(this->content, content); err = StandardAlert(kAlertNoteAlert, caption, content, NULL, &out); return res; } MilkyTracker-1.02.00/src/ppui/osinterface/carbon/PPOpenPanel_CARBON.cpp000066400000000000000000000054061324432207300254430ustar00rootroot00000000000000/* * ppui/osinterface/carbon/PPOpenPanel_CARBON.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * PPOpenPanel_CARBON.cpp * MilkyTracker * * Created by Peter Barth on Sun Feb 27 2005. * */ #include #include "PPOpenPanel.h" extern SInt32 globalWindowLevel; extern WindowGroupRef groupRef; PPOpenPanel::PPOpenPanel(PPScreen* screen, const char* caption) : PPModalDialog(screen) { this->caption = new char[strlen(caption)+1]; strcpy(this->caption, caption); } PPOpenPanel::~PPOpenPanel() { delete[] caption; } void PPOpenPanel::addExtension(const PPString& ext, const PPString& desc) { Descriptor* d = new Descriptor(ext, desc); items.add(d); } PPOpenPanel::ReturnCodes PPOpenPanel::runModal() { ReturnCodes result = ReturnCodeCANCEL; OSStatus err = noErr; NavDialogRef theOpenDialog; NavDialogCreationOptions dialogOptions; if ((err = NavGetDefaultDialogCreationOptions(&dialogOptions)) == noErr) { dialogOptions.modality = kWindowModalityAppModal; dialogOptions.windowTitle = CFStringCreateWithCString(NULL, caption, kCFStringEncodingASCII); err = NavCreateChooseFileDialog(&dialogOptions, NULL, NULL, NULL, NULL, NULL, &theOpenDialog); if (theOpenDialog) { err = NavDialogRun(theOpenDialog); NavReplyRecord reply; err = NavDialogGetReply (theOpenDialog, &reply); if (err == noErr) { // retrieve filename AEDesc actualDesc; FSRef fileToOpen; //HFSUniStr255 theFileName; //CFStringRef fileNameCFString; err = AECoerceDesc(&reply.selection, typeFSRef, &actualDesc); err = AEGetDescData(&actualDesc, reinterpret_cast(&fileToOpen), sizeof(FSRef)); // gib ihm int len = PATH_MAX; char* buffer = new char[PATH_MAX+1]; FSRefMakePath (&fileToOpen, (UInt8*)buffer, len); fileName = buffer; delete[] buffer; result = ReturnCodeOK; NavDisposeReply(&reply); } NavDialogDispose(theOpenDialog); } if (dialogOptions.windowTitle) CFRelease(dialogOptions.windowTitle); } return result; } MilkyTracker-1.02.00/src/ppui/osinterface/carbon/PPQuitSaveAlert_CARBON.cpp000066400000000000000000000037271324432207300263170ustar00rootroot00000000000000/* * ppui/osinterface/carbon/PPQuitSaveAlert_CARBON.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * PPQuitSaveAlert.cpp * MilkyTracker * * Created by Peter Barth on 28.03.05. * */ #include #include "PPQuitSaveAlert.h" PPQuitSaveAlert::ReturnCodes PPQuitSaveAlert::runModal() { ReturnCodes res = ReturnCodeCANCEL; OSStatus err = noErr; NavDialogRef theOpenDialog; NavDialogCreationOptions dialogOptions; if ((err = NavGetDefaultDialogCreationOptions(&dialogOptions)) == noErr) { dialogOptions.modality = kWindowModalityAppModal; dialogOptions.windowTitle = CFStringCreateWithCString(NULL, "You suck", kCFStringEncodingASCII); err = NavCreateAskSaveChangesDialog (&dialogOptions, kNavSaveChangesClosingDocument, NULL, NULL, &theOpenDialog); if (theOpenDialog) { err = NavDialogRun(theOpenDialog); NavUserAction action = NavDialogGetUserAction (theOpenDialog); switch (action) { case kNavUserActionSaveChanges: res = ReturnCodeOK; break; case kNavUserActionDontSaveChanges: res = ReturnCodeNO; break; case kNavUserActionCancel: res = ReturnCodeCANCEL; break; } NavDialogDispose(theOpenDialog); } } return res; } MilkyTracker-1.02.00/src/ppui/osinterface/carbon/PPSavePanel_CARBON.cpp000066400000000000000000000054431324432207300254410ustar00rootroot00000000000000/* * ppui/osinterface/carbon/PPSavePanel_CARBON.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * PPSavePanel.cpp * MilkyTracker * * Created by Peter Barth on Sat Mar 05 2005. * */ #include #include "PPSavePanel.h" PPSavePanel::ReturnCodes PPSavePanel::runModal() { ReturnCodes result = ReturnCodeCANCEL; OSStatus err = noErr; NavDialogRef theSaveDialog; NavDialogCreationOptions dialogOptions; if ((err = NavGetDefaultDialogCreationOptions(&dialogOptions)) == noErr) { dialogOptions.modality = kWindowModalityAppModal; dialogOptions.windowTitle = CFStringCreateWithCString(NULL, caption, kCFStringEncodingASCII); if (defaultFileName.length()) dialogOptions.saveFileName = CFStringCreateWithCString(NULL, defaultFileName, kCFStringEncodingASCII); err = NavCreatePutFileDialog(&dialogOptions, 0, 0, NULL, NULL, &theSaveDialog); if (theSaveDialog) { err = NavDialogRun(theSaveDialog); NavReplyRecord reply; err = NavDialogGetReply (theSaveDialog, &reply); if (err == noErr) { // retrieve filename AEDesc actualDesc; FSRef fileToSave; //HFSUniStr255 theFileName; //CFStringRef fileNameCFString; err = AECoerceDesc(&reply.selection, typeFSRef, &actualDesc); err = AEGetDescData(&actualDesc, reinterpret_cast(&fileToSave), sizeof(FSRef)); // gib ihm int len = 4096; char* buffer = new char[len+1]; FSRefMakePath (&fileToSave, (UInt8*)buffer, len); int len2 = CFStringGetLength(reply.saveFileName); char* buffer2 = new char[len2+1]; CFStringGetCString(reply.saveFileName, buffer2, len2+1, kCFStringEncodingASCII); fileName = buffer; fileName.append("/"); fileName.append(buffer2); delete[] buffer; delete[] buffer2; result = ReturnCodeOK; NavDisposeReply(&reply); } NavDialogDispose(theSaveDialog); } if (dialogOptions.windowTitle) CFRelease(dialogOptions.windowTitle); if (dialogOptions.saveFileName) CFRelease(dialogOptions.saveFileName); } return result; } MilkyTracker-1.02.00/src/ppui/osinterface/cocoa/000077500000000000000000000000001324432207300214055ustar00rootroot00000000000000MilkyTracker-1.02.00/src/ppui/osinterface/cocoa/PPMessageBox_COCOA.mm000066400000000000000000000023371324432207300251460ustar00rootroot00000000000000/* * ppui/osinterface/cocoa/PPMessageBox_COCOA.mm * * Copyright 2014 Dale Whinham * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include #include "PPMessageBox.h" PPMessageBox::ReturnCodes PPMessageBox::runModal() { NSAlert *messageBox = [[NSAlert alloc] init]; // Set message strings and style [messageBox setMessageText:[NSString stringWithUTF8String:caption]]; [messageBox setInformativeText:[NSString stringWithUTF8String:content]]; [messageBox setAlertStyle:NSCriticalAlertStyle]; // Open the dialog [messageBox runModal]; return ReturnCodeOK; } MilkyTracker-1.02.00/src/ppui/osinterface/cocoa/PPOpenPanel_COCOA.mm000066400000000000000000000155421324432207300247740ustar00rootroot00000000000000/* * ppui/osinterface/cocoa/PPOpenPanel_COCOA.mm * * Copyright 2014 Dale Whinham * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include #include "PPOpenPanel.h" // Padding to surround accessory view controls static const float kAccessoryViewPadding = 5.0f; // Objective-C delegate class with selectors for switching file type filter @interface MTFileTypeFilter : NSObject { NSOpenPanel* _openPanel; NSDictionary* _fileTypes; } -(id) initWithOpenPanel:(NSOpenPanel*)openPanel andFileTypes:(NSDictionary*) fileTypes; -(void) filterAllSupportedFileTypes:(id)sender; -(void) filterSingleFileType:(id)sender; -(void) removeFilter:(id)sender; @end @implementation MTFileTypeFilter -(id) initWithOpenPanel:(NSOpenPanel*)openPanel andFileTypes:(NSDictionary*) fileTypes { if (self = [super init]) { _openPanel = openPanel; _fileTypes = fileTypes; } return self; } -(void) filterAllSupportedFileTypes:(id)sender { [_openPanel setAllowedFileTypes:[_fileTypes allValues]]; } -(void) filterSingleFileType:(id)sender { NSPopUpButton* popUpButton = (NSPopUpButton*) sender; NSString* extension = [_fileTypes valueForKey:[[popUpButton selectedItem] title]]; [_openPanel setAllowedFileTypes:@[extension]]; } -(void) removeFilter:(id)sender { [_openPanel setAllowedFileTypes:nil]; } @end PPOpenPanel::PPOpenPanel(PPScreen* screen, const char* caption) : PPModalDialog(screen) { this->caption = new char[strlen(caption)+1]; strcpy(this->caption, caption); } PPOpenPanel::~PPOpenPanel() { if (caption) delete caption; } void PPOpenPanel::addExtension(const PPString& ext, const PPString& desc) { Descriptor* d = new Descriptor(ext, desc); items.add(d); } PPOpenPanel::ReturnCodes PPOpenPanel::runModal() { ReturnCodes returnCode = ReturnCodeCANCEL; NSMutableDictionary* fileTypes = [[NSMutableDictionary alloc] init]; NSOpenPanel* openPanel = [NSOpenPanel openPanel]; MTFileTypeFilter* fileTypeFilter = [[MTFileTypeFilter alloc] initWithOpenPanel:openPanel andFileTypes:fileTypes]; // Add file extensions and descriptions to MutableArrays for (pp_int32 i = 0; i < items.size(); i++) { NSString* ext = [NSString stringWithUTF8String:items.get(i)->extension.getStrBuffer()]; NSString* desc = [NSString stringWithUTF8String:items.get(i)->description.getStrBuffer()]; [fileTypes setObject:ext forKey:[NSString stringWithFormat:@"%@ (.%@)", desc, ext]]; } // Custom accessory view holds the file type selector popup button NSView* accessoryView = [[NSView alloc] initWithFrame:NSZeroRect]; NSTextField* label = [[NSTextField alloc] initWithFrame:NSZeroRect]; NSPopUpButton* popUpButton = [[NSPopUpButton alloc] initWithFrame:NSZeroRect pullsDown:NO]; // Set label properties [label setFont:[NSFont systemFontOfSize:0.0f]]; [label setStringValue:@"File types:"]; [label setEditable:NO]; [label setBordered:NO]; [label setBezeled:NO]; [label setDrawsBackground:NO]; [label sizeToFit]; // Setup popup menu items and actions for all supported types/all files NSMenuItem* allSupportedFilesMenuItem = [[NSMenuItem alloc] initWithTitle:@"All supported types" action:@selector(filterAllSupportedFileTypes:) keyEquivalent:@""]; NSMenuItem* allFilesMenuItem = [[NSMenuItem alloc] initWithTitle:@"All files" action:@selector(removeFilter:) keyEquivalent:@""]; [allSupportedFilesMenuItem setTarget:fileTypeFilter]; [allFilesMenuItem setTarget:fileTypeFilter]; [[popUpButton menu] addItem:allSupportedFilesMenuItem]; [[popUpButton menu] addItem:allFilesMenuItem]; [[popUpButton menu] addItem:[NSMenuItem separatorItem]]; // Set popup button action for menu items without their own actions (individual file types) [popUpButton setTarget:fileTypeFilter]; [popUpButton setAction:@selector(filterSingleFileType:)]; // Add file extensions and resize popup button to fit [popUpButton addItemsWithTitles:[[fileTypes allKeys] sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)]]; [popUpButton sizeToFit]; // Set container view dimensions float accViewWidth = 2 * kAccessoryViewPadding + label.frame.size.width + popUpButton.frame.size.width; float accViewHeight = 2 * kAccessoryViewPadding + fmax(label.frame.size.height, popUpButton.frame.size.height); [accessoryView setFrameSize:NSMakeSize(accViewWidth, accViewHeight)]; [accessoryView addSubview:label]; [accessoryView addSubview:popUpButton]; // Enable autolayout [accessoryView setTranslatesAutoresizingMaskIntoConstraints:NO]; [label setTranslatesAutoresizingMaskIntoConstraints:NO]; [popUpButton setTranslatesAutoresizingMaskIntoConstraints:NO]; NSDictionary* viewDic = NSDictionaryOfVariableBindings(label, popUpButton); NSDictionary* metricsDic = @{ @"padding":@(kAccessoryViewPadding) }; // Align popup button to right of label, with padding in between [accessoryView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|-[label]-padding-[popUpButton]-|" options:0 metrics:metricsDic views:viewDic]]; // Centre popup button vertically within container [accessoryView addConstraint:[NSLayoutConstraint constraintWithItem:popUpButton attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:accessoryView attribute:NSLayoutAttributeCenterY multiplier:1.0f constant:0.0f]]; // Align label's text baseline to popup's text baseline [accessoryView addConstraint:[NSLayoutConstraint constraintWithItem:label attribute:NSLayoutAttributeBaseline relatedBy:NSLayoutRelationEqual toItem:popUpButton attribute:NSLayoutAttributeBaseline multiplier:1.0f constant:0.0f]]; // Set dialog filetype filters and options [openPanel setTitle:[NSString stringWithUTF8String:caption]]; [openPanel setAllowedFileTypes:[fileTypes allValues]]; [openPanel setCanChooseFiles:YES]; [openPanel setCanChooseDirectories:NO]; [openPanel setAllowsMultipleSelection:NO]; [openPanel setAccessoryView:accessoryView]; // Open the dialog if ([openPanel runModal] == NSFileHandlingPanelOKButton) { fileName = PPSystemString([[[openPanel URL] path] UTF8String]); returnCode = ReturnCodeOK; } return returnCode; } MilkyTracker-1.02.00/src/ppui/osinterface/cocoa/PPQuitSaveAlert_COCOA.mm000066400000000000000000000031301324432207300256320ustar00rootroot00000000000000/* * ppui/osinterface/cocoa/PPQuitSaveAlert_COCOA.mm * * Copyright 2014 Dale Whinham * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include #include "PPQuitSaveAlert.h" PPQuitSaveAlert::ReturnCodes PPQuitSaveAlert::runModal() { ReturnCodes returnCode = ReturnCodeCANCEL; NSAlert *messageBox = [[NSAlert alloc] init]; // Add buttons and message strings [messageBox addButtonWithTitle:@"Save"]; [messageBox addButtonWithTitle:@"Cancel"]; [messageBox addButtonWithTitle:@"Don't Save"]; [messageBox setMessageText: @"Do you want to save the changes you made to this document?"]; [messageBox setInformativeText: @"Your changes will be lost if you don't save them."]; [messageBox setAlertStyle:NSWarningAlertStyle]; // Set return code switch ([messageBox runModal]) { case NSAlertFirstButtonReturn: returnCode = ReturnCodeOK; break; case NSAlertThirdButtonReturn: returnCode = ReturnCodeNO; }; return returnCode; } MilkyTracker-1.02.00/src/ppui/osinterface/cocoa/PPSavePanel_COCOA.mm000066400000000000000000000032731324432207300247670ustar00rootroot00000000000000/* * ppui/osinterface/cocoa/PPSavePanel_COCOA.mm * * Copyright 2014 Dale Whinham * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include #include "PPSavePanel.h" PPSavePanel::ReturnCodes PPSavePanel::runModal() { ReturnCodes returnCode = ReturnCodeCANCEL; NSSavePanel* saveDialog = [NSSavePanel savePanel]; NSMutableArray* fileExtensions = [[NSMutableArray alloc] init]; // Add file extensions and descriptions to MutableArray for (pp_int32 i = 0; i < items.size(); i++) { [fileExtensions addObject: [NSString stringWithUTF8String:items.get(i)->extension.getStrBuffer()]]; [fileExtensions addObject: [NSString stringWithUTF8String:items.get(i)->description.getStrBuffer()]]; } // Set filters and options [saveDialog setTitle: [NSString stringWithUTF8String:caption]]; [saveDialog setAllowedFileTypes: fileExtensions]; // Open the dialog if ([saveDialog runModal] == NSFileHandlingPanelOKButton) { fileName = PPSystemString([[[saveDialog URL] path] UTF8String]); returnCode = ReturnCodeOK; } return returnCode; } MilkyTracker-1.02.00/src/ppui/osinterface/haiku/000077500000000000000000000000001324432207300214225ustar00rootroot00000000000000MilkyTracker-1.02.00/src/ppui/osinterface/haiku/PPMessageBox_Haiku.cpp000066400000000000000000000017051324432207300255470ustar00rootroot00000000000000/* * Copyright 2012 Julian Harnath * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "PPMessageBox.h" #include PPMessageBox::ReturnCodes PPMessageBox::runModal() { BAlert* alert = new BAlert(caption, content, "OK"); alert->Go(); // (Alert deletes itself) return ReturnCodeOK; } MilkyTracker-1.02.00/src/ppui/osinterface/haiku/PPOpenPanel_Haiku.cpp000066400000000000000000000026411324432207300253730ustar00rootroot00000000000000/* * Copyright 2012 Julian Harnath * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "PPOpenPanel.h" #include "SynchronousFilePanel.h" PPOpenPanel::PPOpenPanel(PPScreen* screen, const char* caption) : PPModalDialog(screen) { this->caption = (char*)caption; } PPOpenPanel::~PPOpenPanel() { } void PPOpenPanel::addExtension(const PPString& ext, const PPString& desc) { Descriptor* d = new Descriptor(ext, desc); items.add(d); } PPOpenPanel::ReturnCodes PPOpenPanel::runModal() { SynchronousFilePanel* openPanel = new SynchronousFilePanel(B_OPEN_PANEL, caption); BString path = openPanel->Go(); // Quit() destroys the object openPanel->Quit(); if (path != "") { fileName = path.String(); return ReturnCodeOK; } else return ReturnCodeCANCEL; } MilkyTracker-1.02.00/src/ppui/osinterface/haiku/PPQuitSaveAlert_Haiku.cpp000066400000000000000000000025061324432207300262430ustar00rootroot00000000000000/* * Copyright 2012 Julian Harnath * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "PPQuitSaveAlert.h" #include PPQuitSaveAlert::ReturnCodes PPQuitSaveAlert::runModal() { BAlert* alert = new BAlert("Save changes?", "Do you want to save the changes you made to your documents?", "Cancel", "Don't save", "Save", B_WIDTH_AS_USUAL, B_OFFSET_SPACING, B_WARNING_ALERT); alert->SetShortcut(0, B_ESCAPE); int32 userChoice = alert->Go(); // (Alert deletes itself) switch (userChoice) { case 0: return ReturnCodeCANCEL; case 1: return ReturnCodeNO; case 2: return ReturnCodeOK; default: // This shouldn't be possible return ReturnCodeCANCEL; } } MilkyTracker-1.02.00/src/ppui/osinterface/haiku/PPSavePanel_Haiku.cpp000066400000000000000000000023071324432207300253670ustar00rootroot00000000000000/* * Copyright 2012 Julian Harnath * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "PPSavePanel.h" #include "SynchronousFilePanel.h" PPSavePanel::ReturnCodes PPSavePanel::runModal() { SynchronousFilePanel* savePanel = new SynchronousFilePanel(B_SAVE_PANEL, caption); savePanel->SetSaveText(defaultFileName); BString path = savePanel->Go(); // Quit() destroys the object, i.e. lack of delete is not a memory leak savePanel->Quit(); if (path != "") { fileName = path.String(); return ReturnCodeOK; } else return ReturnCodeCANCEL; } MilkyTracker-1.02.00/src/ppui/osinterface/haiku/SynchronousFilePanel.cpp000066400000000000000000000064621324432207300262500ustar00rootroot00000000000000/* * Copyright 2012 Julian Harnath * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "SynchronousFilePanel.h" #include "MilkyApplication.h" #include "MilkyView.h" #include #include #include #include BFilePanel* SynchronousFilePanel::fOpenPanel = NULL; BFilePanel* SynchronousFilePanel::fSavePanel = NULL; SynchronousFilePanel::SynchronousFilePanel(file_panel_mode mode, char* caption) : BLooper("File panel looper"), fSelectedPath("") { // Use static instances for open and save panel so file panels retain the // last opened directory. Otherwise, the user would have to start with the // home directory again every time he opens or saves something. if (mode == B_OPEN_PANEL) { if (fOpenPanel == NULL) { fOpenPanel = new BFilePanel(B_OPEN_PANEL, NULL, NULL, B_FILE_NODE, false, NULL, NULL, true); } fActivePanel = fOpenPanel; } else if (mode == B_SAVE_PANEL) { if (fSavePanel == NULL) { fSavePanel = new BFilePanel(B_SAVE_PANEL, NULL, NULL, B_FILE_NODE, false, NULL, NULL, true); } fActivePanel = fSavePanel; } fActivePanel->SetTarget(BMessenger(this)); fActivePanel->Window()->SetTitle(caption); fPanelClosedSemaphore = create_sem(0, "File panel message wait"); // Start looper thread BLooper::Run(); } SynchronousFilePanel::~SynchronousFilePanel() { } void SynchronousFilePanel::MessageReceived(BMessage* message) { switch (message->what) { case B_REFS_RECEIVED: { entry_ref ref; message->FindRef("refs", &ref); BPath path(&ref); if (path.InitCheck() == B_OK) fSelectedPath = path.Path(); release_sem(fPanelClosedSemaphore); } break; case B_SAVE_REQUESTED: { entry_ref directoryRef; message->FindRef("directory", &directoryRef); BString fileName; message->FindString("name", &fileName); BPath path(&directoryRef); if (path.InitCheck() == B_OK) { fSelectedPath = path.Path(); fSelectedPath << "/" << fileName; } release_sem(fPanelClosedSemaphore); } break; case B_CANCEL: release_sem(fPanelClosedSemaphore); break; default: BLooper::MessageReceived(message); break; } } void SynchronousFilePanel::Quit() { delete_sem(fPanelClosedSemaphore); // Stop looper thread BLooper::Lock(); BLooper::Quit(); } void SynchronousFilePanel::SetSaveText(const char* saveText) { fActivePanel->SetSaveText(saveText); } BString SynchronousFilePanel::Go() { MilkyApplication* milkyApplication = (MilkyApplication*)be_app; fSelectedPath = ""; milkyApplication->TrackerListening() = false; fActivePanel->Show(); acquire_sem(fPanelClosedSemaphore); milkyApplication->TrackerListening() = true; return fSelectedPath; } MilkyTracker-1.02.00/src/ppui/osinterface/haiku/SynchronousFilePanel.h000066400000000000000000000026371324432207300257150ustar00rootroot00000000000000/* * Copyright 2012 Julian Harnath * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #ifndef __HAIKU_SYNCHRONOUSFILEPANEL_H__ #define __HAIKU_SYNCHRONOUSFILEPANEL_H__ #include #include #include class SynchronousFilePanel : public BLooper { public: SynchronousFilePanel(file_panel_mode mode, char* caption); ~SynchronousFilePanel(); virtual void MessageReceived(BMessage* message); virtual void Quit(); void SetSaveText(const char* saveText); BString Go(); private: static BFilePanel* fOpenPanel; static BFilePanel* fSavePanel; BFilePanel* fActivePanel; BString fSelectedPath; sem_id fPanelClosedSemaphore; }; #endif // __HAIKU_SYNCHRONOUSFILEPANEL_H__ MilkyTracker-1.02.00/src/ppui/osinterface/haiku/WaitView.cpp000066400000000000000000000032621324432207300236700ustar00rootroot00000000000000/* * Copyright 2012 Julian Harnath * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "WaitView.h" #include enum { kPolygonSpacing = 40, kPolygonSpeed = 4 }; WaitView::WaitView(BRect frame) : BView(frame, "WaitView", B_FOLLOW_ALL, B_WILL_DRAW | B_PULSE_NEEDED) { SetViewColor(220, 220, 255); BPoint pointList[4]; pointList[0].Set(20, 0); pointList[1].Set(40, 0); pointList[2].Set(20, 30); pointList[3].Set( 0, 30); fPolygon.AddPoints(pointList, 4); for (int i = 0; i < kNumPolygons; i++) fPosition[i] = i * kPolygonSpacing; } WaitView::~WaitView() { } void WaitView::Draw(BRect updateRect) { BRect bounds = Bounds(); SetHighColor(100, 100, 255); for (int i = 0; i < kNumPolygons; i++) { SetOrigin(fPosition[i], 0); FillPolygon(&fPolygon); } } void WaitView::Pulse() { BRect bounds = Bounds(); for (int i = 0; i < kNumPolygons; i++) { fPosition[i] += kPolygonSpeed; if (fPosition[i] > bounds.IntegerWidth()) fPosition[i] -= bounds.IntegerWidth() + kPolygonSpacing; } Invalidate(); } MilkyTracker-1.02.00/src/ppui/osinterface/haiku/WaitView.h000066400000000000000000000021561324432207300233360ustar00rootroot00000000000000/* * Copyright 2012 Julian Harnath * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #ifndef __HAIKU_WAITVIEW_H__ #define __HAIKU_WAITVIEW_H__ #include #include enum { kNumPolygons = 6 }; class WaitView : public BView { public: WaitView(BRect frame); virtual ~WaitView(); virtual void Draw(BRect updateRect); virtual void Pulse(); private: BPolygon fPolygon; int32 fPosition[kNumPolygons]; }; #endif // __HAIKU_WAITVIEW_H__ MilkyTracker-1.02.00/src/ppui/osinterface/haiku/WaitWindow.cpp000066400000000000000000000021171324432207300242230ustar00rootroot00000000000000/* * Copyright 2012 Julian Harnath * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "WaitWindow.h" #include "WaitView.h" WaitWindow::WaitWindow(int centerX, int centerY) : BWindow(BRect(centerX - 100, centerY - 15, centerX + 100, centerY + 15), "Working...", B_MODAL_WINDOW, B_NOT_RESIZABLE | B_NOT_ZOOMABLE) { fWaitView = new WaitView(Bounds()); AddChild(fWaitView); SetPulseRate(20000); } WaitWindow::~WaitWindow() { } MilkyTracker-1.02.00/src/ppui/osinterface/haiku/WaitWindow.h000066400000000000000000000020111324432207300236610ustar00rootroot00000000000000/* * Copyright 2012 Julian Harnath * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #ifndef __HAIKU_WAITWINDOW_H__ #define __HAIKU_WAITWINDOW_H__ #include class WaitView; class WaitWindow : public BWindow { public: WaitWindow(int centerX, int centerY); virtual ~WaitWindow(); private: WaitView* fWaitView; }; #endif // __HAIKU_WAITWINDOW_H__ MilkyTracker-1.02.00/src/ppui/osinterface/posix/000077500000000000000000000000001324432207300214635ustar00rootroot00000000000000MilkyTracker-1.02.00/src/ppui/osinterface/posix/PPMutex.cpp000066400000000000000000000026261324432207300235370ustar00rootroot00000000000000/* * ppui/osinterface/posix/PPMutex.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * PPMutex.cpp * PPUI SDL * * Created by Peter Barth on 18.11.05. * */ #include "PPMutex.h" #include PPMutex::PPMutex() : mutexpth_p(NULL) { mutexpth_p = new pthread_mutex_t; if (pthread_mutex_init(mutexpth_p, NULL)) { delete mutexpth_p; mutexpth_p = NULL; } } PPMutex::~PPMutex() { delete mutexpth_p; } void PPMutex::lock() { if (mutexpth_p) { pthread_mutex_lock(mutexpth_p); } } bool PPMutex::tryLock() { if (mutexpth_p) { if (pthread_mutex_trylock(mutexpth_p) == EBUSY) return false; } return true; } void PPMutex::unlock() { if (mutexpth_p) { pthread_mutex_unlock(mutexpth_p); } } MilkyTracker-1.02.00/src/ppui/osinterface/posix/PPMutex.h000066400000000000000000000020631324432207300231770ustar00rootroot00000000000000/* * ppui/osinterface/posix/PPMutex.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * PPMutex.h * PPUI SDL * * Created by Peter Barth on 18.11.05. * */ #ifndef PPMUTEX__H #define PPMUTEX__H #include class PPMutex { private: pthread_mutex_t* mutexpth_p; public: PPMutex(); ~PPMutex(); void lock(); bool tryLock(); void unlock(); }; #endif MilkyTracker-1.02.00/src/ppui/osinterface/posix/PPPath_POSIX.cpp000066400000000000000000000102011324432207300242770ustar00rootroot00000000000000/* * ppui/osinterface/posix/PPPath_POSIX.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * PPPath_POSIX.cpp * MilkyTracker * * Created by Peter Barth on 10.03.06. * */ #include "PPPath_POSIX.h" #include #include #ifdef __PSP__ // Needed for PATH_MAX #include #endif #ifdef PATH_MAX #define PPMAX_DIR_PATH PATH_MAX #else #define PPMAX_DIR_PATH 1024 #endif void PPPathEntry_POSIX::create(const PPSystemString& path, const PPSystemString& name) { this->name = name; PPSystemString fullPath = path; fullPath.append(name); struct stat file_status; if (::stat(fullPath, &file_status) == 0) { size = file_status.st_size; if (S_ISDIR(file_status.st_mode)) type = Directory; //if (S_ISLNK(file_status.st_mode)) // printf("foo.txt is a symbolic link\n"); if (S_ISCHR(file_status.st_mode)) type = Hidden; if (S_ISBLK(file_status.st_mode)) type = Hidden; if (S_ISFIFO(file_status.st_mode)) type = Hidden; if (S_ISSOCK(file_status.st_mode)) type = Hidden; if (S_ISREG(file_status.st_mode)) type = File; } else { /* stat() call failed and returned '-1'. */ type = Nonexistent; } } bool PPPathEntry_POSIX::isHidden() const { return PPPathEntry::isHidden() || (name.startsWith(".") && name.compareTo("..") != 0); } bool PPPath_POSIX::updatePath() { return chdir(current) == 0; } PPPath_POSIX::PPPath_POSIX() { current = getCurrent(); updatePath(); } PPPath_POSIX::PPPath_POSIX(const PPSystemString& path) : current(path) { updatePath(); } const PPSystemString PPPath_POSIX::getCurrent() { char cwd[PPMAX_DIR_PATH+1]; memset(cwd, 0, sizeof(cwd)); getcwd(cwd, PPMAX_DIR_PATH+1); PPSystemString path(cwd); path.ensureTrailingCharacter(getPathSeparatorAsASCII()); return path; } bool PPPath_POSIX::change(const PPSystemString& path) { PPSystemString old = current; current = path; current.ensureTrailingCharacter(getPathSeparatorAsASCII()); bool res = updatePath(); if (res) return true; current = old; return false; } bool PPPath_POSIX::stepInto(const PPSystemString& directory) { PPSystemString old = current; current.append(directory); current.append(getPathSeparator()); bool res = updatePath(); if (res) return true; current = old; return false; } const PPPathEntry* PPPath_POSIX::getFirstEntry() { dir = ::opendir(current); if (!dir) { return NULL; } return getNextEntry(); } const PPPathEntry* PPPath_POSIX::getNextEntry() { struct dirent* entry; if ((entry = ::readdir(dir)) != NULL) { PPSystemString file(entry->d_name); this->entry.create(current, file); return &this->entry; } ::closedir(dir); return NULL; } bool PPPath_POSIX::canGotoHome() const { return getenv("HOME") ? true : false; } void PPPath_POSIX::gotoHome() { char* home = getenv("HOME"); if (home) { change(home); updatePath(); } } bool PPPath_POSIX::canGotoRoot() const { return true; } void PPPath_POSIX::gotoRoot() { change("/"); updatePath(); } bool PPPath_POSIX::canGotoParent() const { return true; } void PPPath_POSIX::gotoParent() { stepInto(".."); } char PPPath_POSIX::getPathSeparatorAsASCII() const { return '/'; } const PPSystemString PPPath_POSIX::getPathSeparator() const { return PPSystemString(getPathSeparatorAsASCII()); } bool PPPath_POSIX::fileExists(const PPSystemString& fileName) const { struct stat file_status; if (::stat(fileName, &file_status) == 0) { return (S_ISREG(file_status.st_mode)) != 0; } return false; } MilkyTracker-1.02.00/src/ppui/osinterface/posix/PPPath_POSIX.h000066400000000000000000000040101324432207300237450ustar00rootroot00000000000000/* * ppui/osinterface/posix/PPPath_POSIX.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * PPPath_POSIX.h * MilkyTracker * * Created by Peter Barth on 10.03.06. * */ #ifndef __PPPATH_POSIX_H__ #define __PPPATH_POSIX_H__ #include "PPPath.h" #include #include class PPPathEntry_POSIX : public PPPathEntry { public: PPPathEntry_POSIX() { } virtual void create(const PPSystemString& path, const PPSystemString& name); virtual bool isHidden() const; }; class PPPath_POSIX : public PPPath { protected: // POSIX DIR* dir; PPSystemString current; PPPathEntry_POSIX entry; virtual bool updatePath(); public: PPPath_POSIX(); PPPath_POSIX(const PPSystemString& path); virtual ~PPPath_POSIX() {} virtual const PPSystemString getCurrent(); virtual bool change(const PPSystemString& path); virtual bool stepInto(const PPSystemString& directory); virtual const PPPathEntry* getFirstEntry(); virtual const PPPathEntry* getNextEntry(); virtual bool canGotoHome() const; virtual void gotoHome(); virtual bool canGotoRoot() const; virtual void gotoRoot(); virtual bool canGotoParent() const; virtual void gotoParent(); virtual char getPathSeparatorAsASCII() const; virtual const PPSystemString getPathSeparator() const; virtual bool fileExists(const PPSystemString& fileName) const; }; #endif MilkyTracker-1.02.00/src/ppui/osinterface/posix/PPSystemString_POSIX.h000066400000000000000000000160271324432207300255370ustar00rootroot00000000000000/* * ppui/osinterface/posix/PPSystemString_POSIX.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * PPSystemString.h * MilkyTracker * * Created by Peter Barth on Sun Apr 03 2005. * */ #ifndef PPSYSTEMSTRING__H #define PPSYSTEMSTRING__H #include "BasicTypes.h" class PPSystemString { private: char* strBuffer; pp_uint32 allocatedSize; void reAlloc(pp_uint32 newSize) { if (newSize <= allocatedSize) return; char* newStrBuffer = new char[newSize]; memcpy(newStrBuffer, strBuffer, allocatedSize); delete[] strBuffer; strBuffer = newStrBuffer; allocatedSize = newSize; } public: // Empty string PPSystemString() : strBuffer(new char[1]), allocatedSize(1) { *strBuffer = 0; } // String from single character PPSystemString(char c) : strBuffer(new char[2]), allocatedSize(2) { *strBuffer = c; *(strBuffer+1) = 0; } PPSystemString(const char* str) : strBuffer(new char[strlen(str) + 1]), allocatedSize(static_cast (strlen(str) + 1)) { strcpy(strBuffer, str); } PPSystemString(const char* str, pp_uint32 length) : strBuffer(new char[length + 1]), allocatedSize(length + 1) { memcpy(strBuffer, str, length); strBuffer[length] = 0; } // copy c'tor PPSystemString(const PPSystemString& str) : strBuffer(new char[str.allocatedSize]), allocatedSize(str.allocatedSize) { memcpy(strBuffer, str.strBuffer, str.allocatedSize); } operator const char*() const { return strBuffer; } const char* getStrBuffer() const { return strBuffer; } // Delete this pointer after usage char* toASCIIZ() const { char* newStr = new char[length() + 1]; strcpy(newStr, strBuffer); return newStr; } // assignment operator PPSystemString& operator=(const PPSystemString& str) { if (this != &str) { delete[] strBuffer; strBuffer = new char[str.allocatedSize]; memcpy(strBuffer, str.strBuffer, str.allocatedSize); allocatedSize = str.allocatedSize; } return *this; } // comparison is necessary too bool operator==(const PPSystemString& str) const { return strcmp(strBuffer, str.strBuffer) == 0; } bool operator!=(const PPSystemString& str) const { return strcmp(strBuffer, str.strBuffer) != 0; } pp_int32 compareTo(const PPSystemString& str) const { return strcmp(strBuffer, str.strBuffer); } pp_int32 compareToNoCase(const PPSystemString& str) const { return strcasecmp(strBuffer, str.strBuffer); } void toUpper() { for (pp_uint32 i = 0; i < length(); i++) if (strBuffer[i] >= 'a' && strBuffer[i] <= 'z') strBuffer[i] -= 'a'-'A'; } ~PPSystemString() { delete[] strBuffer; } pp_uint32 length() const { return static_cast (strlen(strBuffer)); } void insertAt(pp_uint32 i, const PPSystemString& s) { // doesn't work if (i > length()) return; char* newStr = new char[length() + s.length() + 1]; allocatedSize = length() + s.length() + 1; memcpy(newStr, strBuffer, i); memcpy(newStr + i, s.strBuffer, s.length()); memcpy(newStr + i + s.length(), strBuffer + i, length() - i); newStr[length() + s.length()] = 0; delete[] strBuffer; strBuffer = newStr; } void append(const PPSystemString& s) { insertAt(length(), s); } void deleteAt(pp_uint32 i, pp_uint32 numChars) { // not possible if (i > length()) return; // nothing to delete if ((signed)length() - (signed)numChars < 0) return; // nothing to delete if (strBuffer[i] == 0) return; char* newStr = new char[length() - numChars + 1]; allocatedSize = length() - numChars + 1; memcpy(newStr, strBuffer, i); memcpy(newStr + i, strBuffer + i + numChars, length() - i - numChars); newStr[length() - numChars] = 0; delete[] strBuffer; strBuffer = newStr; } void replace(const PPSystemString& str) { delete[] strBuffer; strBuffer = new char[str.allocatedSize]; memcpy(strBuffer, str.strBuffer, str.allocatedSize); allocatedSize = str.allocatedSize; } PPSystemString stripPath() const { char* ptr = strBuffer+strlen(strBuffer); while (ptr > strBuffer && *ptr != '/') ptr--; if (ptr != strBuffer) ptr++; PPSystemString str = ptr; return str; } PPSystemString stripExtension() const { char* ptr = strBuffer+strlen(strBuffer); while (ptr > strBuffer && *ptr != '.' && *ptr != '/') ptr--; if (*ptr == '/') return strBuffer; if (ptr != strBuffer) { PPSystemString str; delete[] str.strBuffer; str.allocatedSize = static_cast (ptr-strBuffer+1); str.strBuffer = new char[str.allocatedSize]; memcpy(str.strBuffer, strBuffer, (ptr-strBuffer)); str.strBuffer[(ptr-strBuffer)] = '\0'; return str; } else { return ptr; } } PPSystemString getExtension() const { char* ptr = strBuffer+strlen(strBuffer); while (ptr > strBuffer && *ptr != '.' && *ptr != '/') ptr--; if (*ptr != '.') return ""; return ptr; } pp_int32 compareExtensions(const PPSystemString& str) const { char* ptrSrc = strBuffer+strlen(strBuffer); while (ptrSrc > strBuffer && *ptrSrc != '.' && *ptrSrc != '/') ptrSrc--; bool noExt1 = false; if (*ptrSrc != '.') noExt1 = true; ptrSrc++; if (*ptrSrc == '\0') noExt1 = true; char* ptrDst = str.strBuffer+strlen(str.strBuffer); while (ptrDst > str.strBuffer && *ptrDst != '.' && *ptrDst != '/') ptrDst--; if (*ptrDst != '.') return noExt1 ? 0 : 1; ptrDst++; if (*ptrDst == '\0') return noExt1 ? 0 : 1; return strcasecmp(ptrSrc, ptrDst); } bool compareToExtension(const PPSystemString& extension) const { char* ptrSrc = strBuffer+strlen(strBuffer); while (ptrSrc > strBuffer && *ptrSrc != '.' && *ptrSrc != '/') ptrSrc--; if (*ptrSrc != '.') return false; ptrSrc++; if (*ptrSrc == '\0') return false; return strcasecmp(ptrSrc, extension.strBuffer) == 0; } void ensureTrailingCharacter(char chr) { pp_uint32 len = length(); if (len) { char* ptr = strBuffer+(len-1); if (*ptr != chr) append(chr); } } bool startsWith(const PPSystemString& src) const { pp_uint32 srcLen = src.length(); pp_uint32 thisLen = length(); if (srcLen > thisLen) return false; if (srcLen == 0) return true; if (srcLen == thisLen) return compareTo(src) == 0; for (pp_uint32 i = 0; i < srcLen; i++) if (src.strBuffer[i] != strBuffer[i]) return false; return true; } }; #endif MilkyTracker-1.02.00/src/ppui/osinterface/posix/PPSystem_POSIX.cpp000066400000000000000000000073321324432207300247020ustar00rootroot00000000000000/* * ppui/osinterface/posix/PPSystem_POSIX.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * PPSystem_POSIX.cpp * MilkyTracker * * Created by Peter Barth on Thu Mar 10 2005. * */ #include "PPSystem_POSIX.h" #include #include #include #include #include #include #include #ifdef __PSP__ #include #include #endif #ifdef __AMIGA__ #include #endif #ifdef __HAIKU__ #include #include #include #include #endif SYSCHAR System::buffer[PATH_MAX+1]; const SYSCHAR* System::getTempFileName() { // Suppressed warning: "'tmpnam' is deprecated: This function is provided for // compatibility reasons only. Due to security concerns inherent in the // design of tmpnam(3), it is highly recommended that you use mkstemp(3) // instead." // Note: Replacing tmpnam() with mkstemp() requires modifying the module // load, export and decompressor functions to accept a file handle (XMFILE) // instead of a file name. #pragma clang diagnostic push #pragma GCC diagnostic ignored "-Wdeprecated-declarations" if ((tmpnam(buffer) == NULL)) #pragma clang diagnostic pop { // should not be the case, if it is the case, create something that // "might" work out char *home = getenv("HOME"); if(home) { strcpy(buffer, home); strcat(buffer, "/.milkytracker_temp"); } else strcpy(buffer, "milkytracker_temp"); } return buffer; } const SYSCHAR* System::getConfigFileName() { #ifdef __HAIKU__ BPath path; find_directory(B_USER_SETTINGS_DIRECTORY, &path); path.Append("MilkyTracker"); BEntry dirEntry(path.Path()); if (!dirEntry.Exists()) { // MilkyTracker settings dir doesn't exist, create it BDirectory temp; temp.CreateDirectory(path.Path(), NULL); } path.Append("milkytracker_config"); strcpy(buffer, path.Path()); return buffer; #endif char *home = getenv("HOME"); if(!home) { // If $HOME isn't set, save in the current dir strncpy(buffer, "milkytracker_config", PATH_MAX); return buffer; } // Old location was in the home directory char oldLoc[PATH_MAX]; strncpy(oldLoc, home, PATH_MAX); strncat(oldLoc, "/.milkytracker_config", PATH_MAX); // New location based on xdg basedir spec char *xdg_config_home = getenv("XDG_CONFIG_HOME"); if(xdg_config_home) strncpy(buffer, xdg_config_home, PATH_MAX); else { strncpy(buffer, home, PATH_MAX); strncat(buffer, "/.config", PATH_MAX); } mkdir(buffer, S_IRWXU); strncat(buffer, "/milkytracker", PATH_MAX); mkdir(buffer, S_IRWXU); strncat(buffer, "/config", PATH_MAX); // Move possible existing config into new location if not already present if(home && access(oldLoc, F_OK) == 0 && access(buffer, F_OK) != 0) rename(oldLoc, buffer); return buffer; } void System::msleep(int msecs) { if (msecs < 0) return; #ifdef __PSP__ sceKernelDelayThreadCB(msecs*1000); #elif defined(__AROS__) // usleep is not implemented on AROS sleep(msecs < 1000 ? 1 : msecs/1000); #else usleep(msecs*1000); #endif } MilkyTracker-1.02.00/src/ppui/osinterface/posix/PPSystem_POSIX.h000066400000000000000000000022301324432207300243370ustar00rootroot00000000000000/* * ppui/osinterface/posix/PPSystem_POSIX.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * PPSystem_POSIX.h * MilkyTracker * * Created by Peter Barth on Thu Mar 10 2005. * */ #ifndef SYSTEM_POSIX_H #define SYSTEM_POSIX_H #include "../../../milkyplay/MilkyPlayCommon.h" class System { private: static SYSCHAR buffer[]; public: static const SYSCHAR* getTempFileName(); static const SYSCHAR* getConfigFileName(); static void msleep(int msecs); }; #endif MilkyTracker-1.02.00/src/ppui/osinterface/sdl/000077500000000000000000000000001324432207300211035ustar00rootroot00000000000000MilkyTracker-1.02.00/src/ppui/osinterface/sdl/PPMessageBox_SDL.cpp000066400000000000000000000027741324432207300246200ustar00rootroot00000000000000/* * ppui/osinterface/sdl/PPMessageBox_SDL.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * PPMessageBox_SDL.cpp * MilkyTracker * * Created by Peter Barth on 27.09.05. * */ #include "PPMessageBox.h" #include #include "SDL_ModalLoop.h" #include "DialogFileSelector.h" PPMessageBox::ReturnCodes PPMessageBox::runModal() { // Convert texts char* captionASCIIZ = this->caption.toASCIIZ(); char* contentASCIIZ = this->content.toASCIIZ(); PPString caption(captionASCIIZ); PPString content(contentASCIIZ); delete[] captionASCIIZ; delete[] contentASCIIZ; // Create a message box (the message box will invoke the responder) PPDialogBase* dialog = new PPDialogBase(screen, NULL, PP_DEFAULT_ID, caption, content); ReturnCodes result = SDL_runModalLoop(screen, dialog); delete dialog; return result; } MilkyTracker-1.02.00/src/ppui/osinterface/sdl/PPMutex.cpp000066400000000000000000000021101324432207300231430ustar00rootroot00000000000000/* * ppui/osinterface/sdl/PPMutex.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * PPMutex.cpp * MilkyTracker * * Created by Peter Barth on 18.11.05. * */ #include "PPMutex.h" PPMutex::PPMutex() { mutex = SDL_CreateMutex(); } PPMutex::~PPMutex() { SDL_DestroyMutex(mutex); } void PPMutex::lock() { SDL_LockMutex(mutex); } void PPMutex::unlock() { SDL_UnlockMutex(mutex); } MilkyTracker-1.02.00/src/ppui/osinterface/sdl/PPMutex.h000066400000000000000000000020261324432207300226160ustar00rootroot00000000000000/* * ppui/osinterface/sdl/PPMutex.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * PPMutex.h * MilkyTracker * * Created by Peter Barth on 18.11.05. * */ #ifndef PPMUTEX__H #define PPMUTEX__H #include class PPMutex { private: SDL_mutex* mutex; public: PPMutex(); ~PPMutex(); void lock(); void unlock(); }; #endif MilkyTracker-1.02.00/src/ppui/osinterface/sdl/PPOpenPanel_SDL.cpp000066400000000000000000000037471324432207300244450ustar00rootroot00000000000000/* * ppui/osinterface/sdl/PPOpenPanel_SDL.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * PPOpenPanel_SDL.cpp * MilkyTracker * * Created by Peter Barth on Sun Feb 27 2005. * */ #include "PPOpenPanel.h" #include #include "SDL_ModalLoop.h" #include "DialogFileSelector.h" PPOpenPanel::PPOpenPanel(PPScreen* screen, const char* caption) : PPModalDialog(screen) { this->caption = new char[strlen(caption)+1]; strcpy(this->caption, caption); } PPOpenPanel::~PPOpenPanel() { if (caption) delete[] caption; } void PPOpenPanel::addExtension(const PPString& ext, const PPString& desc) { Descriptor* d = new Descriptor(ext, desc); items.add(d); } PPOpenPanel::ReturnCodes PPOpenPanel::runModal() { // Create a message box (the message box will invoke the responder) DialogFileSelector* dialog = new DialogFileSelector(screen, NULL, PP_DEFAULT_ID, this->caption); for (pp_int32 i = 0; i < items.size(); i++) { PPSystemString ext(items.get(i)->extension); PPSystemString desc(items.get(i)->description); dialog->addExtension(ext, desc); } ReturnCodes result = SDL_runModalLoop(screen, dialog); PPSystemString pathEntry(dialog->getSelectedPathFull()); // this is no longer needed delete dialog; fileName = ((result == ReturnCodeOK) ? pathEntry : ""); return result; } MilkyTracker-1.02.00/src/ppui/osinterface/sdl/PPQuitSaveAlert_SDL.cpp000066400000000000000000000025151324432207300253050ustar00rootroot00000000000000/* * ppui/osinterface/sdl/PPQuitSaveAlert_SDL.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * PPQuitSaveAlert_SDL.cpp * MilkyTracker * * Created by Peter Barth on 28.03.05. * */ #include "PPQuitSaveAlert.h" #include #include "SDL_ModalLoop.h" #include "DialogFileSelector.h" PPQuitSaveAlert::ReturnCodes PPQuitSaveAlert::runModal() { // Create a message box (the message box will invoke the responder) PPDialogBase* dialog = new PPDialogBase(screen, NULL, PP_DEFAULT_ID, "Save current changes?", PPDialogBase::MessageBox_YESNOCANCEL); ReturnCodes result = SDL_runModalLoop(screen, dialog); delete dialog; return result; } MilkyTracker-1.02.00/src/ppui/osinterface/sdl/PPSavePanel_SDL.cpp000066400000000000000000000032431324432207300244310ustar00rootroot00000000000000/* * ppui/osinterface/sdl/PPSavePanel_SDL.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * PPSavePanel.cpp * MilkyTracker * * Created by Peter Barth on Sat Mar 05 2005. * */ #include "PPSavePanel.h" #include #include "SDL_ModalLoop.h" #include "DialogFileSelector.h" PPSavePanel::ReturnCodes PPSavePanel::runModal() { // Create a message box (the message box will invoke the responder) DialogFileSelector* dialog = new DialogFileSelector(screen, NULL, PP_DEFAULT_ID, this->caption, true, true); dialog->setCurrentEditFileName(defaultFileName); for (pp_int32 i = 0; i < items.size(); i++) { PPSystemString ext(items.get(i)->extension); PPSystemString desc(items.get(i)->description); dialog->addExtension(ext, desc); } ReturnCodes result = SDL_runModalLoop(screen, dialog); PPSystemString pathEntry(dialog->getSelectedPathFull()); // this is no longer needed delete dialog; fileName = ((result == ReturnCodeOK) ? pathEntry : ""); return result; } MilkyTracker-1.02.00/src/ppui/osinterface/sdl/SDL_ModalLoop.cpp000066400000000000000000000077621324432207300242130ustar00rootroot00000000000000/* * ppui/osinterface/sdl/SDL_ModalLoop.cpp * * Copyright 2009 Peter Barth, Dale Whinham * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * SDL_ModalLoop.cpp * MilkyTracker * * Created by Peter Barth on 29.03.06. * * 12/5/14 - Dale Whinham * - Port to SDL2 */ #include #include "SDL_ModalLoop.h" #include "Event.h" #include "Screen.h" #include "DialogBase.h" #include "PPMutex.h" void processSDLEvents(const SDL_Event& event); void processSDLUserEvents(const SDL_UserEvent& event); extern PPMutex* globalMutex; ///////////////////////////////////////////////////////////////// // // Okay here goes a quick description of how a modal dialog // using the SDL is realized: // So when this modal dialog is invoked, we ARE actually between // two globalLoop mutex calls, because we were invoked // by some mouse click or other event // So now we first attach a new event listener to our screen // object (so that all events sent end up in our own listener) // and install our own event handler loop... But this can only // be done when the globalMutex is unlocked first and locked // after... // ///////////////////////////////////////////////////////////////// PPModalDialog::ReturnCodes SDL_runModalLoop(PPScreen* screen, PPDialogBase* dialog) { bool exitModalLoop = false; SDL_Event event; // screen might be disabled in a stackable fashion pp_uint32 screenEnableStackCount = 0; while (!screen->isDisplayEnabled()) { screen->enableDisplay(true); screenEnableStackCount++; } // This is the responder for buttons invoked by the modal dialog ModalLoopResponder modalLoopResponder(exitModalLoop); dialog->setResponder(&modalLoopResponder); // Detach the event listener from the screen, this will actually detach the entire tracker from the screen EventListenerInterface* eventListener = screen->detachEventListener(); // Instantinate our own event listener CustomEventListener customEventListener(eventListener); // Attach it screen->attachEventListener(&customEventListener); // Show it dialog->show(); // Now to the tricky part, since a modal dialog has been invoked through a OS event, globalMutex is in locked state // so to allow further event processing we must unlock the mutex first // -- really messy and critical -- if (globalMutex) globalMutex->unlock(); // Create our own event loop while (!exitModalLoop && SDL_WaitEvent(&event)) { switch (event.type) { case SDL_MOUSEMOTION: { // ignore old mouse motion events in the event queue SDL_Event new_event; if (SDL_PeepEvents(&new_event, 1, SDL_GETEVENT, SDL_MOUSEMOTION, SDL_MOUSEMOTION) > 0) { while (SDL_PeepEvents(&new_event, 1, SDL_GETEVENT, SDL_MOUSEMOTION, SDL_MOUSEMOTION) > 0); processSDLEvents(new_event); } else { processSDLEvents(event); } break; } case SDL_USEREVENT: processSDLUserEvents((const SDL_UserEvent&)event); break; default: processSDLEvents(event); break; } } // pretend nothing happened at all, continue with main event loop after we're finished here if (globalMutex) globalMutex->lock(); // re-attach tracker screen->attachEventListener(eventListener); // if screen was disabled we enable it again while (screenEnableStackCount > 0) { screen->enableDisplay(false); screenEnableStackCount--; } return modalLoopResponder.getReturnCode(); } MilkyTracker-1.02.00/src/ppui/osinterface/sdl/SDL_ModalLoop.h000066400000000000000000000044001324432207300236420ustar00rootroot00000000000000/* * ppui/osinterface/sdl/SDL_ModalLoop.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * SDL_ModalLoop.h * MilkyTracker * * Created by Peter Barth on 12.03.06. * */ #ifndef __CUSTOMEVENTLISTENER_H__ #define __CUSTOMEVENTLISTENER_H__ #include "BasicTypes.h" #include "Event.h" #include "PPModalDialog.h" class CustomEventListener : public EventListenerInterface { private: EventListenerInterface* oldEventListener; public: CustomEventListener(EventListenerInterface* oldListener) : oldEventListener(oldListener) { } virtual pp_int32 handleEvent(PPObject* sender, PPEvent* event) { if (event->getID() == eTimer) { return oldEventListener->handleEvent(sender, event); } return 0; } }; class ModalLoopResponder : public DialogResponder { private: bool& exitModalLoop; PPModalDialog::ReturnCodes returnCode; public: ModalLoopResponder(bool& exitModalLoopFlag) : exitModalLoop(exitModalLoopFlag), returnCode(PPModalDialog::ReturnCodeCANCEL) { } PPModalDialog::ReturnCodes getReturnCode() { return returnCode; } virtual pp_int32 ActionOkay(PPObject* sender) { exitModalLoop = true; returnCode = PPModalDialog::ReturnCodeOK; return 0; } virtual pp_int32 ActionCancel(PPObject* sender) { exitModalLoop = true; returnCode = PPModalDialog::ReturnCodeCANCEL; return 0; } virtual pp_int32 ActionNo(PPObject* sender) { exitModalLoop = true; returnCode = PPModalDialog::ReturnCodeNO; return 0; } }; class PPScreen; class PPDialogBase; PPModalDialog::ReturnCodes SDL_runModalLoop(PPScreen* screen, PPDialogBase* dialog); #endif MilkyTracker-1.02.00/src/ppui/osinterface/win32/000077500000000000000000000000001324432207300212635ustar00rootroot00000000000000MilkyTracker-1.02.00/src/ppui/osinterface/win32/PPMessageBox_WIN32.cpp000066400000000000000000000017641324432207300251560ustar00rootroot00000000000000/* * ppui/osinterface/win32/PPMessageBox_WIN32.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include #include "PPMessageBox.h" extern HWND hWnd; PPMessageBox::ReturnCodes PPMessageBox::runModal() { ReturnCodes res = ReturnCodeOK; ::MessageBox(hWnd, content, caption, MB_OK); return res; } MilkyTracker-1.02.00/src/ppui/osinterface/win32/PPMutex.cpp000066400000000000000000000021461324432207300233340ustar00rootroot00000000000000/* * ppui/osinterface/win32/PPMutex.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * PPMutex.cpp * PPUI SDL * * Created by Peter Barth on 18.11.05. * */ #include "PPMutex.h" PPMutex::PPMutex() { InitializeCriticalSection( &m_CS ); } PPMutex::~PPMutex() { DeleteCriticalSection( &m_CS ); } void PPMutex::lock() { EnterCriticalSection( &m_CS ); } void PPMutex::unlock() { LeaveCriticalSection( &m_CS ); } MilkyTracker-1.02.00/src/ppui/osinterface/win32/PPMutex.h000066400000000000000000000020351324432207300227760ustar00rootroot00000000000000/* * ppui/osinterface/win32/PPMutex.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * PPMutex.h * PPUI SDL * * Created by Peter Barth on 18.11.05. * */ #ifndef PPMUTEX__H #define PPMUTEX__H #include class PPMutex { private: CRITICAL_SECTION m_CS; public: PPMutex(); ~PPMutex(); void lock(); void unlock(); }; #endif MilkyTracker-1.02.00/src/ppui/osinterface/win32/PPOpenPanel_WIN32.cpp000066400000000000000000000055621324432207300250020ustar00rootroot00000000000000/* * ppui/osinterface/win32/PPOpenPanel_WIN32.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include #ifdef _WIN32_WCE #include #endif #include #include "OSInterface\PPOpenPanel.h" extern HWND hWnd; PPOpenPanel::PPOpenPanel(PPScreen* screen, const char* caption) : PPModalDialog(screen) { } PPOpenPanel::~PPOpenPanel() { } void PPOpenPanel::addExtension(const PPString& ext, const PPString& desc) { Descriptor* d = new Descriptor(ext, desc); items.add(d); } PPOpenPanel::ReturnCodes PPOpenPanel::runModal() { TCHAR szFile[MAX_PATH+1]; OPENFILENAME ofn; memset(szFile, 0, sizeof(szFile)); memset(&ofn, 0, sizeof(ofn)); ofn.lStructSize = sizeof(ofn); ofn.hwndOwner = hWnd; ofn.lpstrFile = szFile; ofn.nMaxFile = MAX_PATH; if (items.size() == 1) ofn.nFilterIndex = 0; else if (items.size() > 1) ofn.nFilterIndex = items.size()+1; PPString sourceFilter; pp_int32 i = 0; // single types for (i = 0; i < items.size(); i++) { sourceFilter.append(items.get(i)->description); sourceFilter.append(" (."); sourceFilter.append(items.get(i)->extension); sourceFilter.append(")|"); sourceFilter.append("*."); sourceFilter.append(items.get(i)->extension); sourceFilter.append("|"); } // all supported types if (items.size() > 1) { sourceFilter.append("All supported types|"); for (i = 0; i < items.size(); i++) { sourceFilter.append("*."); sourceFilter.append(items.get(i)->extension); if (i < items.size()-1) sourceFilter.append(";"); } sourceFilter.append("|"); } // all files sourceFilter.append("All files (*.*)|"); sourceFilter.append("*.*"); sourceFilter.append("|"); const char* src = sourceFilter; TCHAR* dstFilter = new TCHAR[sourceFilter.length()+2]; memset(dstFilter, 0, (sourceFilter.length()+2)*sizeof(TCHAR)); for (i = 0; i < (signed)sourceFilter.length(); i++) { if (src[i] == '|') dstFilter[i] = '\0'; else dstFilter[i] = src[i]; } ofn.lpstrFilter = dstFilter; ofn.lpstrTitle = _T("Open File"); ofn.Flags = OFN_EXPLORER; ReturnCodes err = ReturnCodeCANCEL; if (GetOpenFileName(&ofn)) { fileName = szFile; err = ReturnCodeOK; } delete[] dstFilter; return err; } MilkyTracker-1.02.00/src/ppui/osinterface/win32/PPPath_WIN32.cpp000066400000000000000000000204301324432207300240040ustar00rootroot00000000000000/* * ppui/osinterface/win32/PPPath_WIN32.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * PPPath_WIN32.cpp * PPUI SDL * * Created by Peter Barth on 10.03.06. * */ #include "PPPath_WIN32.h" #include #ifdef UNICODE #ifndef _WIN32_WCE #include #else #include #endif #endif #define PPMAX_DIR_PATH PATH_MAX void PPPathEntry_WIN32::create(const PPSystemString& path, const PPSystemString& name) { drive = false; this->name = name; PPSystemString fullPath = path; fullPath.append(name); if (name.compareTo("..") == 0 || name.compareTo(".") == 0) { type = Directory; size = 0; return; } WIN32_FIND_DATA fd; HANDLE hFind = FindFirstFile(fullPath, &fd); if (hFind == INVALID_HANDLE_VALUE) { /*DWORD err = GetLastError(); char* message; FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, err, 0, (char*)&message, 0, NULL); LocalFree(message);*/ type = Nonexistent; return; } else { size = fd.nFileSizeLow; if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) type = Directory; if (fd.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN) type = Hidden; if (!(fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) type = File; } FindClose(hFind); } void PPPathEntry_WIN32::createNoCheck(const PPSystemString& path, const PPSystemString& name, Type type, bool drive) { this->name = name; PPSystemString fullPath = path; fullPath.append(name); this->type = type; this->drive = drive; this->size = 0; } bool PPPathEntry_WIN32::isHidden() const { return PPPathEntry::isHidden() || (name.compareTo(".") == 0); } PPPathEntry* PPPathEntry_WIN32::clone() const { // check if this is the correct type PPPathEntry_WIN32* result = new PPPathEntry_WIN32(); result->name = name; result->type = type; result->size = size; result->drive = drive; return result; } bool PPPath_WIN32::updatePath() { #ifndef _WIN32_WCE return SetCurrentDirectory(current) == TRUE; #else if (current.length() == 0) return true; DWORD res = GetFileAttributes(current); if (res == 0xFFFFFFFF) return false; return (res & FILE_ATTRIBUTE_DIRECTORY) != 0; #endif } PPPath_WIN32::PPPath_WIN32() : hFind(NULL), #ifndef _WIN32_WCE drives(0), driveCount(-1) #else contentCount(0) #endif { #ifndef _WIN32_WCE current = getCurrent(); updatePath(); #else change(""); #endif } PPPath_WIN32::PPPath_WIN32(const PPSystemString& path) : hFind(NULL), #ifndef _WIN32_WCE drives(0), driveCount(-1), #else contentCount(0), #endif current(path) { updatePath(); } const PPSystemString PPPath_WIN32::getCurrent() { #ifndef _WIN32_WCE TCHAR szPath[MAX_PATH+1]; GetCurrentDirectory(MAX_PATH, szPath); PPSystemString path(szPath); path.ensureTrailingCharacter(getPathSeparatorAsASCII()); return path; #else PPSystemString path(current); path.ensureTrailingCharacter(getPathSeparatorAsASCII()); return path; #endif } bool PPPath_WIN32::change(const PPSystemString& path) { PPSystemString old = current; current = path; current.ensureTrailingCharacter(getPathSeparatorAsASCII()); bool res = updatePath(); if (res) return true; current = old; updatePath(); return false; } bool PPPath_WIN32::stepInto(const PPSystemString& directory) { PPSystemString old = current; #ifndef _WIN32_WCE // check for drive if (directory.length() == 2) { const TCHAR* str = directory.getStrBuffer(); if (str[1] == ':') { if (change(directory)) return true; else { current = old; return false; } } } #else if (directory.compareTo("..") == 0) { PPSystemString temp = current; temp.ensureTrailingCharacter(getPathSeparatorAsASCII()); temp.deleteAt(temp.length()-1, 1); const TCHAR* base = temp.getStrBuffer(); const TCHAR* ptr = base + temp.length(); while (*ptr != '\\' && ptr > base) ptr--; // TO-DO: make this safe :( TCHAR* tempStr = new TCHAR[ptr - base + 1]; memcpy(tempStr, base, (ptr - base)*sizeof(TCHAR)); tempStr[(ptr - base)] = '\0'; current = tempStr; delete[] tempStr; current.append(getPathSeparator()); if (updatePath()) return true; else { current = old; return false; } } #endif current.append(directory); current.append(getPathSeparator()); if (updatePath()) return true; current = old; return false; } const PPPathEntry* PPPath_WIN32::getFirstEntry() { // if we're not on Windows CE we're going to // enumerate drives first before actually // iterating folder contents #ifndef _WIN32_WCE if (driveCount == -1) { drives = GetLogicalDrives(); driveCount = 0; while (!((drives >> driveCount) & 1) && driveCount < 26) driveCount++; if (driveCount < 26) { char drive = 'A' + driveCount; driveCount++; PPSystemString driveName(drive); driveName.append(":"); entry.createNoCheck("", driveName, PPPathEntry::Directory, true); return &entry; } else driveCount = -1; } #else // if we're on Windows CE we're going to add "." and next time ".." if (contentCount == 0 && (current.length() != 0 && current.compareTo("\\") != 0)) { contentCount++; entry.createNoCheck("", ".", PPPathEntry::Directory, false); return &entry; } #endif PPSystemString current = this->current; current.append("*.*"); hFind = FindFirstFile(current, &fd); if (hFind == INVALID_HANDLE_VALUE) { return NULL; } PPSystemString file(fd.cFileName); entry.create(this->current, file); return &entry; } const PPPathEntry* PPPath_WIN32::getNextEntry() { // continue iterating drives if not finished #ifndef _WIN32_WCE if (driveCount != -1) { while (!((drives >> driveCount) & 1) && driveCount < 26) driveCount++; if (driveCount < 26) { char drive = 'A' + driveCount; driveCount++; PPSystemString driveName(drive); driveName.append(":"); entry.createNoCheck("", driveName, PPPathEntry::Directory, true); return &entry; } else { const PPPathEntry* entry = getFirstEntry(); driveCount = -1; return entry; } } #else // on windows CE add ".." to the folder contents first if (contentCount == 1) { contentCount++; entry.createNoCheck("", "..", PPPathEntry::Directory, false); return &entry; } else if (contentCount == 2) { const PPPathEntry* entry = getFirstEntry(); contentCount = 0; return entry; } #endif BOOL res = FindNextFile(hFind, &fd); if (res) { PPSystemString file(fd.cFileName); entry.create(current, file); return &entry; } FindClose(hFind); return NULL; } bool PPPath_WIN32::canGotoHome() const { // we're going to assume Unicode is for WinNT and higher // means SHGetFolderPath is available #ifdef UNICODE return true; #endif return false; } void PPPath_WIN32::gotoHome() { // we're going to assume Unicode is for WinNT and higher // means SHGetFolderPath is available #ifdef UNICODE TCHAR* pszPath = new TCHAR[MAX_PATH+1]; SHGetSpecialFolderPath(NULL, pszPath, CSIDL_PERSONAL, FALSE); change(pszPath); delete[] pszPath; #endif } bool PPPath_WIN32::canGotoRoot() const { return true; } void PPPath_WIN32::gotoRoot() { change("\\"); updatePath(); } bool PPPath_WIN32::canGotoParent() const { return true; } void PPPath_WIN32::gotoParent() { stepInto(".."); } char PPPath_WIN32::getPathSeparatorAsASCII() const { return '\\'; } const PPSystemString PPPath_WIN32::getPathSeparator() const { return PPSystemString(getPathSeparatorAsASCII()); } bool PPPath_WIN32::fileExists(const PPSystemString& fileName) const { HANDLE handle = CreateFile(fileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); bool res = handle != INVALID_HANDLE_VALUE; if (res) CloseHandle(handle); return res; } MilkyTracker-1.02.00/src/ppui/osinterface/win32/PPPath_WIN32.h000066400000000000000000000044211324432207300234530ustar00rootroot00000000000000/* * ppui/osinterface/win32/PPPath_WIN32.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * PPPath_WIN32.h * PPUI SDL * * Created by Peter Barth on 10.03.06. * */ #ifndef __PPPATH_WIN32_H__ #define __PPPATH_WIN32_H__ #include "PPPath.h" class PPPathEntry_WIN32 : public PPPathEntry { private: bool drive; public: PPPathEntry_WIN32() : drive(false) { } virtual void create(const PPSystemString& path, const PPSystemString& name); virtual bool isHidden() const; virtual bool isDrive() const { return drive; } void createNoCheck(const PPSystemString& path, const PPSystemString& name, Type type, bool drive); PPPathEntry* clone() const; }; class PPPath_WIN32 : public PPPath { protected: // WIN32 WIN32_FIND_DATA fd; HANDLE hFind; #ifndef _WIN32_WCE pp_uint32 drives; pp_int32 driveCount; #else pp_uint32 contentCount; #endif PPSystemString current; PPPathEntry_WIN32 entry; virtual bool updatePath(); public: PPPath_WIN32(); PPPath_WIN32(const PPSystemString& path); virtual const PPSystemString getCurrent(); bool change(const PPSystemString& path); virtual bool stepInto(const PPSystemString& directory); virtual const PPPathEntry* getFirstEntry(); virtual const PPPathEntry* getNextEntry(); virtual bool canGotoHome() const; virtual void gotoHome(); virtual bool canGotoRoot() const; virtual void gotoRoot(); virtual bool canGotoParent() const; virtual void gotoParent(); virtual char getPathSeparatorAsASCII() const; virtual const PPSystemString getPathSeparator() const; virtual bool fileExists(const PPSystemString& fileName) const; }; #endif MilkyTracker-1.02.00/src/ppui/osinterface/win32/PPQuitSaveAlert_WIN32.cpp000066400000000000000000000026211324432207300256430ustar00rootroot00000000000000/* * ppui/osinterface/win32/PPQuitSaveAlert_WIN32.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * PPQuitSaveAlert.cpp * MilkyTracker * * Created by Peter Barth on 28.03.05. * */ #include #include #include "PPQuitSaveAlert.h" extern HWND hWnd; PPQuitSaveAlert::ReturnCodes PPQuitSaveAlert::runModal() { ReturnCodes res = ReturnCodeCANCEL; int nID = MessageBox(hWnd, _T("Do you want to save the changes you made to your documents?"), _T("Save changes"), MB_YESNOCANCEL | MB_ICONQUESTION); if (nID == IDYES) { res = ReturnCodeOK; } else if (nID == IDNO) { res = ReturnCodeNO; } else if (nID == IDCANCEL) { res = ReturnCodeCANCEL; } return res; } MilkyTracker-1.02.00/src/ppui/osinterface/win32/PPSavePanel_WIN32.cpp000066400000000000000000000044551324432207300247770ustar00rootroot00000000000000/* * ppui/osinterface/win32/PPSavePanel_WIN32.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * PPSavePanel.cpp * MilkyTracker * * Created by Peter Barth on Sat Mar 05 2005. * */ #include #ifdef _WIN32_WCE #include #endif #include #include "PPSavePanel.h" extern HWND hWnd; PPSavePanel::ReturnCodes PPSavePanel::runModal() { TCHAR szFile[MAX_PATH+1]; OPENFILENAME ofn; memset(szFile, 0, sizeof(szFile)); _tcscpy(szFile, defaultFileName); memset(&ofn, 0, sizeof(ofn)); ofn.lStructSize = sizeof(ofn); ofn.hwndOwner = hWnd; ofn.lpstrFile = szFile; ofn.nMaxFile = MAX_PATH; PPString sourceFilter; pp_int32 i = 0; for (i = 0; i < items.size(); i++) { sourceFilter.append(items.get(i)->description); sourceFilter.append(" (."); sourceFilter.append(items.get(i)->extension); sourceFilter.append(")|"); sourceFilter.append("*."); sourceFilter.append(items.get(i)->extension); sourceFilter.append("|"); } const char* src = sourceFilter; TCHAR* dstFilter = new TCHAR[sourceFilter.length()+2]; memset(dstFilter, 0, (sourceFilter.length()+2)*sizeof(TCHAR)); for (i = 0; i < (signed)sourceFilter.length(); i++) { if (src[i] == '|') dstFilter[i] = '\0'; else dstFilter[i] = src[i]; } ofn.lpstrFilter = dstFilter; ofn.lpstrTitle = _T("Save File"); ofn.Flags = OFN_EXPLORER | OFN_OVERWRITEPROMPT; PPSystemString defaultExtension(items.get(0)->extension); ofn.lpstrDefExt = defaultExtension; ReturnCodes err = ReturnCodeCANCEL; if (GetSaveFileName(&ofn)) { fileName = szFile; err = ReturnCodeOK; } delete[] dstFilter; return err; } MilkyTracker-1.02.00/src/ppui/osinterface/win32/PPSystemString_WIN32.h000066400000000000000000000215641324432207300252410ustar00rootroot00000000000000/* * ppui/osinterface/win32/PPSystemString_WIN32.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * PPSystemString.h * MilkyTracker * * Created by Peter Barth on Sun Apr 03 2005. * */ #ifndef PPSYSTEMSTRING__H #define PPSYSTEMSTRING__H #include "BasicTypes.h" #include typedef TCHAR SYSCHAR; class PPSystemString { private: SYSCHAR* strBuffer; pp_uint32 allocatedSize; HRESULT __fastcall AnsiToUnicode(LPCSTR pszA, LPWSTR* ppszW) { ULONG cCharacters; DWORD dwError; // If input is null then just return the same. if (NULL == pszA) { *ppszW = NULL; return NOERROR; } // Determine number of wide characters to be allocated for the // Unicode string. cCharacters = strlen(pszA)+1; // Use of the OLE allocator is required if the resultant Unicode // string will be passed to another COM component and if that // component will free it. Otherwise you can use your own allocator. *ppszW = (LPWSTR) malloc(cCharacters*2); if (NULL == *ppszW) return E_OUTOFMEMORY; // Covert to Unicode. if (0 == MultiByteToWideChar(CP_ACP, 0, pszA, cCharacters, *ppszW, cCharacters)) { dwError = GetLastError(); free(*ppszW); *ppszW = NULL; return HRESULT_FROM_WIN32(dwError); } return NOERROR; } void reAlloc(pp_uint32 newSize) { if (newSize <= allocatedSize) return; SYSCHAR* newStrBuffer = new SYSCHAR[newSize]; memcpy(newStrBuffer, strBuffer, sizeof(SYSCHAR)*allocatedSize); delete[] strBuffer; strBuffer = newStrBuffer; allocatedSize = newSize; } public: // Empty string PPSystemString() { strBuffer = new SYSCHAR[1]; *strBuffer = 0; allocatedSize = 1; } // String from single character PPSystemString(SYSCHAR c) { strBuffer = new SYSCHAR[2]; *strBuffer = c; *(strBuffer+1) = 0; allocatedSize = 2; } PPSystemString(const SYSCHAR* str) { strBuffer = new SYSCHAR[_tcslen(str) + 1]; _tcscpy(strBuffer, str); allocatedSize = (pp_uint32)_tcslen(str) + 1; } PPSystemString(const char* str) { LPWSTR tempStr = NULL; if (AnsiToUnicode(str, &tempStr) == NOERROR) { strBuffer = new SYSCHAR[_tcslen(tempStr) + 1]; allocatedSize = (pp_uint32)_tcslen(tempStr) + 1; _tcscpy(strBuffer, tempStr); free(tempStr); } else { strBuffer = new SYSCHAR[1]; *strBuffer = 0; allocatedSize = 1; } } PPSystemString(const SYSCHAR* str, pp_uint32 length) { strBuffer = new SYSCHAR[length + 1]; memcpy(strBuffer, str, length*sizeof(SYSCHAR)); strBuffer[length] = 0; allocatedSize = length + 1; } // copy c'tor PPSystemString(const PPSystemString& str) { strBuffer = new SYSCHAR[str.allocatedSize]; memcpy(strBuffer, str.strBuffer, str.allocatedSize*sizeof(SYSCHAR)); allocatedSize = str.allocatedSize; } operator const SYSCHAR*() const { return strBuffer; } const SYSCHAR* getStrBuffer() const { return strBuffer; } // assignment operator PPSystemString& operator=(const PPSystemString& str) { if (this != &str) { delete[] strBuffer; strBuffer = new SYSCHAR[str.allocatedSize]; memcpy(strBuffer, str.strBuffer, str.allocatedSize*sizeof(SYSCHAR)); allocatedSize = str.allocatedSize; } return *this; } PPSystemString& operator=(const char* str) { delete[] strBuffer; allocatedSize = (pp_uint32)strlen(str)+1; strBuffer = new SYSCHAR[allocatedSize]; for (pp_uint32 i = 0; i < allocatedSize; i++) strBuffer[i] = str[i]; return *this; } // comparison is necessary too bool operator==(const PPSystemString& str) const { return _tcscmp(strBuffer, str.strBuffer) == 0; } bool operator!=(const PPSystemString& str) const { return _tcscmp(strBuffer, str.strBuffer) != 0; } pp_int32 compareTo(const PPSystemString& str) const { return _tcscmp(strBuffer, str.strBuffer); } pp_int32 compareToNoCase(const PPSystemString& str) const { return _tcsicmp(strBuffer, str.strBuffer); } void toUpper() { for (pp_uint32 i = 0; i < length(); i++) if (strBuffer[i] >= 'a' && strBuffer[i] <= 'z') strBuffer[i] -= 'a'-'A'; } ~PPSystemString() { delete[] strBuffer; } pp_uint32 length() const { return (pp_uint32)_tcslen(strBuffer); } void insertAt(pp_uint32 i, const PPSystemString& s) { // doesn't work if (i > length()) return; allocatedSize = length() + s.length() + 1; SYSCHAR* newStr = new SYSCHAR[allocatedSize]; memcpy(newStr, strBuffer, i*sizeof(SYSCHAR)); memcpy(newStr + i, s.strBuffer, s.length()*sizeof(SYSCHAR)); memcpy(newStr + i + s.length(), strBuffer + i, (length() - i)*sizeof(SYSCHAR)); newStr[length() + s.length()] = 0; delete[] strBuffer; strBuffer = newStr; } void append(const PPSystemString& s) { insertAt(length(), s); } void deleteAt(pp_uint32 i, pp_uint32 numChars) { // not possible if (i > length()) return; // nothing to delete if ((signed)length() - (signed)numChars < 0) return; // nothing to delete if (strBuffer[i] == 0) return; SYSCHAR* newStr = new SYSCHAR[length() - numChars + 1]; allocatedSize = length() - numChars + 1; memcpy(newStr, strBuffer, i*sizeof(SYSCHAR)); memcpy(newStr + i, strBuffer + i + numChars, (length() - i - numChars)*sizeof(SYSCHAR)); newStr[length() - numChars] = 0; delete[] strBuffer; strBuffer = newStr; } void replace(const PPSystemString& str) { delete[] strBuffer; strBuffer = new SYSCHAR[str.allocatedSize]; memcpy(strBuffer, str.strBuffer, str.allocatedSize*sizeof(SYSCHAR)); allocatedSize = str.allocatedSize; } PPSystemString stripPath() const { SYSCHAR* ptr = strBuffer+_tcslen(strBuffer); while (ptr > strBuffer && *ptr != '\\') ptr--; if (ptr != strBuffer) ptr++; PPSystemString str = ptr; return str; } PPSystemString stripExtension() const { SYSCHAR* ptr = strBuffer+_tcslen(strBuffer); while (ptr > strBuffer && *ptr != '.' && *ptr != '\\') ptr--; if (*ptr == '\\') return strBuffer; if (ptr != strBuffer) { PPSystemString str; delete[] str.strBuffer; str.allocatedSize = (pp_uint32)((ptr-strBuffer)+1); str.strBuffer = new SYSCHAR[str.allocatedSize]; memcpy(str.strBuffer, strBuffer, (ptr-strBuffer)*sizeof(SYSCHAR)); str.strBuffer[(ptr-strBuffer)] = '\0'; return str; } else { return ptr; } } PPSystemString getExtension() const { SYSCHAR* ptr = strBuffer+_tcslen(strBuffer); while (ptr > strBuffer && *ptr != '.' && *ptr != '/') ptr--; if (*ptr != '.') return _T(""); return ptr; } pp_int32 compareExtensions(const PPSystemString& str) const { SYSCHAR* ptrSrc = strBuffer+_tcslen(strBuffer); while (ptrSrc > strBuffer && *ptrSrc != '.' && *ptrSrc != '\\') ptrSrc--; bool noExt1 = false; if (*ptrSrc != '.') noExt1 = true; ptrSrc++; if (*ptrSrc == '\0') noExt1 = true; SYSCHAR* ptrDst = str.strBuffer+_tcslen(str.strBuffer); while (ptrDst > str.strBuffer && *ptrDst != '.' && *ptrDst != '\\') ptrDst--; if (*ptrDst != '.') return noExt1 ? 0 : 1; ptrDst++; if (*ptrDst == '\0') return noExt1 ? 0 : 1; return _tcsicmp(ptrSrc, ptrDst); } bool compareToExtension(const PPSystemString& extension) const { SYSCHAR* ptrSrc = strBuffer+_tcslen(strBuffer); while (ptrSrc > strBuffer && *ptrSrc != '.' && *ptrSrc != '\\') ptrSrc--; if (*ptrSrc != '.') return false; ptrSrc++; if (*ptrSrc == '\0') return false; return _tcsicmp(ptrSrc, extension.strBuffer) == 0; } void ensureTrailingCharacter(char chr) { pp_uint32 len = length(); if (len) { SYSCHAR* ptr = strBuffer+(len-1); if (*ptr != (SYSCHAR)chr) append(chr); } } bool startsWith(const PPSystemString& src) const { pp_uint32 srcLen = src.length(); pp_uint32 thisLen = length(); if (srcLen > thisLen) return false; if (srcLen == 0) return true; if (srcLen == thisLen) return compareTo(src) == 0; for (pp_uint32 i = 0; i < srcLen; i++) if (src.strBuffer[i] != strBuffer[i]) return false; return true; } // Delete this pointer after usage char* toASCIIZ() const { char* newStr = new char[length() + 1]; SYSCHAR* ptr = strBuffer; pp_int32 i = 0; while (*ptr) { newStr[i] = (char)(*ptr++); i++; } newStr[i] = '\0'; return newStr; } }; #endif MilkyTracker-1.02.00/src/ppui/osinterface/win32/PPSystem_WIN32.cpp000066400000000000000000000035561324432207300244060ustar00rootroot00000000000000/* * ppui/osinterface/win32/PPSystem_WIN32.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * System_WIN32.cpp * MilkyTracker * * Created by Peter Barth on Thu Mar 10 2005. * */ #include "PPSystem_WIN32.h" #include #include SYSCHAR System::buffer[MAX_PATH+1]; const SYSCHAR* System::getTempFileName() { TCHAR szPath[MAX_PATH+1]; UINT result = 0; DWORD dwRetVal = GetTempPath(MAX_PATH, szPath); if (dwRetVal != 0 || dwRetVal <= MAX_PATH) result = GetTempFileName(szPath, _T("mt"), ::GetTickCount(), buffer); if (result == 0) return getConfigFileName(_T("milkytracker_temp")); return buffer; } const SYSCHAR* System::getConfigFileName(SYSCHAR *fileName/* = NULL*/) { TCHAR szPath[MAX_PATH + 1]; DWORD size = GetEnvironmentVariable(_T("APPDATA"), szPath, MAX_PATH); if (size) { _tcscat_s(szPath, MAX_PATH, _T("\\MilkyTracker")); CreateDirectory(szPath, NULL); _tcscat_s(szPath, MAX_PATH, _T("\\")); } if (fileName) _tcscat_s(szPath, MAX_PATH, fileName); else _tcscat_s(szPath, MAX_PATH, _T("milkytracker.cfg")); _tcscpy(buffer, szPath); return buffer; } void System::msleep(int msecs) { if (msecs < 0) return; ::Sleep(msecs); } MilkyTracker-1.02.00/src/ppui/osinterface/win32/PPSystem_WIN32.h000066400000000000000000000022221324432207300240400ustar00rootroot00000000000000/* * ppui/osinterface/win32/PPSystem_WIN32.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * System_WIN32.h * MilkyTracker * * Created by Peter Barth on Thu Mar 10 2005. * */ #ifndef SYSTEM_WIN32_H #define SYSTEM_WIN32_H #include "XModule.h" class System { private: static SYSCHAR buffer[]; public: static const SYSCHAR* getTempFileName(); static const SYSCHAR* getConfigFileName(SYSCHAR* fileName = NULL); static void msleep(int msecs); }; #endif MilkyTracker-1.02.00/src/ppui/osinterface/win32/WaitWindow_WIN32.cpp000066400000000000000000000076661324432207300247640ustar00rootroot00000000000000/* * ppui/osinterface/win32/WaitWindow_WIN32.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "WaitWindow_WIN32.h" #include "DisplayDeviceBase.h" extern HINSTANCE g_hinst; /* My instance handle */ WaitWindow* WaitWindow::instance = NULL; TCHAR WaitWindow::szClassName[] = _T("MILKYTRACKERWAITWNDCLASS"); LRESULT CALLBACK WaitWindow::WndProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam) { switch (msg) { case WM_PAINT: WaitWindow::getInstance()->render(); break; } return DefWindowProc(hWnd, msg, wParam, lParam); } void WaitWindow::init() { m_BitmapInfo.biSize = sizeof(BITMAPINFOHEADER); m_BitmapInfo.biWidth = getWidth(); m_BitmapInfo.biHeight = -getHeight(); m_BitmapInfo.biPlanes = 1; m_BitmapInfo.biBitCount = 24; m_BitmapInfo.biCompression = BI_RGB; m_BitmapInfo.biSizeImage = 0; m_BitmapInfo.biXPelsPerMeter = 0; m_BitmapInfo.biYPelsPerMeter = 0; m_BitmapInfo.biClrUsed = 0; m_BitmapInfo.biClrImportant = 0; HDC hScreenDC = ::GetWindowDC(NULL); m_hBitmap = ::CreateDIBSection(hScreenDC, (LPBITMAPINFO)&m_BitmapInfo, DIB_RGB_COLORS,(LPVOID *)&m_pBits, NULL, 0); ::ReleaseDC(NULL, hScreenDC); m_hDC = NULL; } void DrawPixel24(void* buffer, pp_int32 x, pp_int32 y, pp_int32 pitch, const PPColor& color) { unsigned char* buff = (unsigned char*)buffer; buff[y*pitch+x*3] = (unsigned char)color.b; buff[y*pitch+x*3+1] = (unsigned char)color.g; buff[y*pitch+x*3+2] = (unsigned char)color.r; } void WaitWindow::render() { ::DrawWaitBar(getWidth(), getHeight(), 160, 16, 0xFFFFFF, (color.r << 16) + (color.g << 8) + (color.b), m_pBits, getWidth()*3, &DrawPixel24); m_hDC = ::GetDC(hWnd); blit(hWnd, m_hDC, 0, 0, getWidth(), getHeight()); ::ReleaseDC(hWnd, m_hDC); m_hDC = NULL; } void WaitWindow::blit(HWND hWnd, HDC pDC, pp_int32 x, pp_int32 y, pp_int32 width, pp_int32 height) { RECT r; ::GetClientRect(hWnd,&r); HDC hBitmapDC = ::CreateCompatibleDC(NULL); HBITMAP hOldBitmap = (HBITMAP)::SelectObject(hBitmapDC, m_hBitmap); ::BitBlt(pDC, x, y, width, height, hBitmapDC, x, y, SRCCOPY); ::SelectObject(hBitmapDC, hOldBitmap); ::DeleteDC(hBitmapDC); } WaitWindow::WaitWindow() { WNDCLASS wc; wc.hCursor = NULL; wc.hIcon = (HICON)::LoadIcon(NULL, IDI_APPLICATION); wc.lpszMenuName = NULL; wc.lpszClassName = szClassName; wc.hbrBackground = 0; wc.hInstance = g_hinst; wc.style = 0; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; ::RegisterClass(&wc); hWnd = ::CreateWindow(szClassName, _T("Working..."), 0/*|WS_MAXIMIZEBOX|WS_MINIMIZEBOX*/,CW_USEDEFAULT,CW_USEDEFAULT, getWidth()+::GetSystemMetrics(SM_CXEDGE)*2+2, getHeight()+::GetSystemMetrics(SM_CYCAPTION)+2+::GetSystemMetrics(SM_CYEDGE)*2, NULL, NULL, g_hinst, 0); init(); } WaitWindow* WaitWindow::getInstance() { if (instance == NULL) instance = new WaitWindow(); return instance; } WaitWindow::~WaitWindow() { ::SendMessage(hWnd, WM_CLOSE, 0, 0); } void WaitWindow::show() { ::ShowWindow(hWnd, SW_SHOW); } void WaitWindow::hide() { ::ShowWindow(hWnd, SW_HIDE); } void WaitWindow::move(pp_int32 x, pp_int32 y) { ::SetWindowPos(hWnd, HWND_TOPMOST, x, y, 0, 0, SWP_NOSIZE); } MilkyTracker-1.02.00/src/ppui/osinterface/win32/WaitWindow_WIN32.h000066400000000000000000000034651324432207300244220ustar00rootroot00000000000000/* * ppui/osinterface/win32/WaitWindow_WIN32.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #ifndef WAITWINDOW__H #define WAITWINDOW__H #include #include "tchar.h" #include "BasicTypes.h" class WaitWindow { private: static WaitWindow* instance; // Windows stuff static TCHAR szClassName[]; HWND hWnd; // Window callback static LRESULT CALLBACK WndProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam); // Render my own window content BITMAPINFOHEADER m_BitmapInfo; // <- this should be saved, eg make it a member variable HBITMAP m_hBitmap; LPBYTE m_pBits; HDC m_hDC; void init(); // Blit my content into DC void blit(HWND hWnd, HDC pDC, pp_int32 x, pp_int32 y, pp_int32 width, pp_int32 height); void render(); PPColor color; WaitWindow(); public: static WaitWindow* getInstance(); ~WaitWindow(); void show(); void hide(); void move(pp_int32 x, pp_int32 y); void update() { render(); } pp_int32 getWidth() { return 260; } pp_int32 getHeight() { return 80; } void setColor(const PPColor& color) { this->color = color; } }; #endif MilkyTracker-1.02.00/src/ppui/osinterface/wince/000077500000000000000000000000001324432207300214265ustar00rootroot00000000000000MilkyTracker-1.02.00/src/ppui/osinterface/wince/PPOpenPanel_WINCE.cpp000066400000000000000000000057771324432207300252200ustar00rootroot00000000000000/* * ppui/osinterface/wince/PPOpenPanel_WINCE.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include #ifdef _WIN32_WCE #include #include "gx.h" #endif #include #include "OSInterface\PPOpenPanel.h" extern HWND hWnd; // from FirstGX.cpp void SuspendFullScreen(); void ResumeFullScreen(); PPOpenPanel::PPOpenPanel(PPScreen* screen, const char* caption) : PPModalDialog(screen) { } PPOpenPanel::~PPOpenPanel() { } void PPOpenPanel::addExtension(const PPString& ext, const PPString& desc) { Descriptor* d = new Descriptor(ext, desc); items.add(d); } PPOpenPanel::ReturnCodes PPOpenPanel::runModal() { SuspendFullScreen(); TCHAR szFile[MAX_PATH+1]; OPENFILENAME ofn; memset(szFile, 0, sizeof(szFile)); memset(&ofn, 0, sizeof(ofn)); ofn.lStructSize = sizeof(ofn); ofn.hwndOwner = hWnd; ofn.lpstrFile = szFile; ofn.nMaxFile = MAX_PATH; if (items.size() == 1) ofn.nFilterIndex = 0; else if (items.size() > 1) ofn.nFilterIndex = items.size()+1; PPString sourceFilter; pp_int32 i = 0; // single types for (i = 0; i < items.size(); i++) { sourceFilter.append(items.get(i)->description); sourceFilter.append(" (."); sourceFilter.append(items.get(i)->extension); sourceFilter.append(")|"); sourceFilter.append("*."); sourceFilter.append(items.get(i)->extension); sourceFilter.append("|"); } // all supported types if (items.size() > 1) { sourceFilter.append("All supported types|"); for (i = 0; i < items.size(); i++) { sourceFilter.append("*."); sourceFilter.append(items.get(i)->extension); if (i < items.size()-1) sourceFilter.append(";"); } sourceFilter.append("|"); } // all files sourceFilter.append("All files (*.*)|"); sourceFilter.append("*.*"); sourceFilter.append("|"); const char* src = sourceFilter; TCHAR* dstFilter = new TCHAR[sourceFilter.length()+2]; memset(dstFilter, 0, (sourceFilter.length()+2)*sizeof(TCHAR)); for (i = 0; i < (signed)sourceFilter.length(); i++) { if (src[i] == '|') dstFilter[i] = '\0'; else dstFilter[i] = src[i]; } ofn.lpstrFilter = dstFilter; ofn.lpstrTitle = _T("Open File"); ofn.Flags = OFN_EXPLORER; ReturnCodes err = ReturnCodeCANCEL; if (GetOpenFileName(&ofn)) { fileName = szFile; err = ReturnCodeOK; } delete[] dstFilter; ResumeFullScreen(); return err; } MilkyTracker-1.02.00/src/ppui/osinterface/wince/PPQuitSaveAlert_WINCE.cpp000066400000000000000000000030261324432207300260510ustar00rootroot00000000000000/* * ppui/osinterface/wince/PPQuitSaveAlert_WINCE.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * PPQuitSaveAlert.cpp * MilkyTracker * * Created by Peter Barth on 28.03.05. * */ #include #include #include "gx.h" #include "PPQuitSaveAlert.h" extern HWND hWnd; // from FirstGX.cpp void SuspendFullScreen(); void ResumeFullScreen(); PPQuitSaveAlert::ReturnCodes PPQuitSaveAlert::runModal() { SuspendFullScreen(); ReturnCodes res = ReturnCodeCANCEL; int nID = MessageBox(hWnd, _T("Do you want to save the changes you made to your documents?"), _T("Save changes"), MB_YESNOCANCEL | MB_ICONQUESTION); if (nID == IDYES) { res = ReturnCodeOK; } else if (nID == IDNO) { res = ReturnCodeNO; } else if (nID == IDCANCEL) { res = ReturnCodeCANCEL; } ResumeFullScreen(); return res; } MilkyTracker-1.02.00/src/ppui/osinterface/wince/PPSavePanel_WINCE.cpp000066400000000000000000000047041324432207300252020ustar00rootroot00000000000000/* * ppui/osinterface/wince/PPSavePanel_WINCE.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * PPSavePanel.cpp * MilkyTracker * * Created by Peter Barth on Sat Mar 05 2005. * */ #include #ifdef _WIN32_WCE #include #include "gx.h" #endif #include #include "OSInterface\PPSavePanel.h" extern HWND hWnd; // from FirstGX.cpp void SuspendFullScreen(); void ResumeFullScreen(); PPSavePanel::ReturnCodes PPSavePanel::runModal() { SuspendFullScreen(); TCHAR szFile[MAX_PATH+1]; OPENFILENAME ofn; memset(szFile, 0, sizeof(szFile)); _tcscpy(szFile, defaultFileName); memset(&ofn, 0, sizeof(ofn)); ofn.lStructSize = sizeof(ofn); ofn.hwndOwner = hWnd; ofn.lpstrFile = szFile; ofn.nMaxFile = MAX_PATH; PPString sourceFilter; pp_int32 i = 0; for (i = 0; i < items.size(); i++) { sourceFilter.append(items.get(i)->description); sourceFilter.append(" (."); sourceFilter.append(items.get(i)->extension); sourceFilter.append(")|"); sourceFilter.append("*."); sourceFilter.append(items.get(i)->extension); sourceFilter.append("|"); } const char* src = sourceFilter; TCHAR* dstFilter = new TCHAR[sourceFilter.length()+2]; memset(dstFilter, 0, (sourceFilter.length()+2)*sizeof(TCHAR)); for (i = 0; i < (signed)sourceFilter.length(); i++) { if (src[i] == '|') dstFilter[i] = '\0'; else dstFilter[i] = src[i]; } ofn.lpstrFilter = dstFilter; ofn.lpstrTitle = _T("Save File"); ofn.Flags = OFN_EXPLORER | OFN_OVERWRITEPROMPT; PPSystemString defaultExtension(items.get(0)->extension); ofn.lpstrDefExt = defaultExtension; ReturnCodes err = ReturnCodeCANCEL; if (GetSaveFileName(&ofn)) { fileName = szFile; err = ReturnCodeOK; } delete[] dstFilter; ResumeFullScreen(); return err; } MilkyTracker-1.02.00/src/ppui/sdl/000077500000000000000000000000001324432207300166015ustar00rootroot00000000000000MilkyTracker-1.02.00/src/ppui/sdl/DisplayDeviceFB_SDL.cpp000066400000000000000000000510261324432207300227500ustar00rootroot00000000000000/* * ppui/sdl/DisplayDeviceFB_SDL.cpp * * Copyright 2009 Peter Barth, Christopher O'Neill, Dale Whinham * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * * 12/5/14 - Dale Whinham * - Port to SDL2 * - Resizable window which renders to a scaled texture * - Experimental, buggy Retina support (potential problems with mouse coordinates if letterboxing happens) * * TODO: - Test under Linux (only tested under OSX) * - Test/fix/remove scale factor and orientation code * - Look at the OpenGL stuff */ #include "DisplayDeviceFB_SDL.h" #include "Graphics.h" PPDisplayDeviceFB::PPDisplayDeviceFB(pp_int32 width, pp_int32 height, pp_int32 scaleFactor, pp_int32 bpp, bool fullScreen, Orientations theOrientation/* = ORIENTATION_NORMAL*/, bool swapRedBlue/* = false*/) : PPDisplayDevice(width, height, scaleFactor, bpp, fullScreen, theOrientation), needsTemporaryBuffer((orientation != ORIENTATION_NORMAL) || (scaleFactor != 1)), temporaryBuffer(NULL) { // Create an SDL window and surface theWindow = CreateWindow(realWidth, realHeight, bpp, #ifdef HIDPI_SUPPORT SDL_WINDOW_ALLOW_HIGHDPI | // Support for 'Retina'/Hi-DPI displays #endif SDL_WINDOW_RESIZABLE | // MilkyTracker's window is resizable (bFullScreen ? SDL_WINDOW_FULLSCREEN_DESKTOP : 0)); // Use 'fake fullscreen' because we can scale if (theWindow == NULL) { fprintf(stderr, "SDL: Could not create window.\n"); exit(EXIT_FAILURE); } // Create renderer for the window theRenderer = SDL_CreateRenderer(theWindow, -1, 0); if (theRenderer == NULL) { fprintf(stderr, "SDL: SDL_CreateRenderer failed: %s\n", SDL_GetError()); exit(EXIT_FAILURE); } #ifdef HIDPI_SUPPORT // Feed SDL_RenderSetLogicalSize() with output size, not GUI surface size, otherwise mouse coordinates will be wrong for Hi-DPI int rendererW, rendererH; SDL_GetRendererOutputSize(theRenderer, &rendererW, &rendererH); #endif // Log renderer capabilities SDL_RendererInfo theRendererInfo; if (!SDL_GetRendererInfo(theRenderer, &theRendererInfo)) { if (theRendererInfo.flags & SDL_RENDERER_SOFTWARE) printf("SDL: Using software renderer.\n"); if (theRendererInfo.flags & SDL_RENDERER_ACCELERATED) printf("SDL: Using accelerated renderer.\n"); if (theRendererInfo.flags & SDL_RENDERER_PRESENTVSYNC) printf("SDL: Vsync enabled.\n"); if (theRendererInfo.flags & SDL_RENDERER_TARGETTEXTURE) printf("SDL: Renderer supports rendering to texture.\n"); } // Lock aspect ratio and scale the UI up to fit the window #ifdef HIDPI_SUPPORT SDL_RenderSetLogicalSize(theRenderer, rendererW, rendererH); #else SDL_RenderSetLogicalSize(theRenderer, realWidth, realHeight); #endif // Use linear filtering for the scaling (make this optional eventually) SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "linear"); // Create surface for rendering graphics theSurface = SDL_CreateRGBSurface(0, realWidth, realHeight, bpp == -1 ? 32 : bpp, 0, 0, 0, 0); if (theSurface == NULL) { fprintf(stderr, "SDL: SDL_CreateSurface failed: %s\n", SDL_GetError()); exit(EXIT_FAILURE); } // Streaming texture for rendering the UI theTexture = SDL_CreateTexture(theRenderer, theSurface->format->format, SDL_TEXTUREACCESS_STREAMING, realWidth, realHeight); if (theTexture == NULL) { fprintf(stderr, "SDL: SDL_CreateTexture failed: %s\n", SDL_GetError()); exit(EXIT_FAILURE); } // We got a surface: update bpp value bpp = theSurface->format->BitsPerPixel; // Create a PPGraphics context based on bpp switch (bpp) { case 16: currentGraphics = new PPGraphics_16BIT(width, height, 0, NULL); break; case 24: { PPGraphics_24bpp_generic* g = new PPGraphics_24bpp_generic(width, height, 0, NULL); if (swapRedBlue) { g->setComponentBitpositions(theSurface->format->Bshift, theSurface->format->Gshift, theSurface->format->Rshift); } else { g->setComponentBitpositions(theSurface->format->Rshift, theSurface->format->Gshift, theSurface->format->Bshift); } currentGraphics = static_cast(g); break; } case 32: { PPGraphics_32bpp_generic* g = new PPGraphics_32bpp_generic(width, height, 0, NULL); if (swapRedBlue) { g->setComponentBitpositions(theSurface->format->Bshift, theSurface->format->Gshift, theSurface->format->Rshift); } else { g->setComponentBitpositions(theSurface->format->Rshift, theSurface->format->Gshift, theSurface->format->Bshift); } currentGraphics = static_cast(g); break; } default: fprintf(stderr, "SDL: Unsupported color depth (%i), try either 16, 24 or 32", bpp); exit(EXIT_FAILURE); } if (needsTemporaryBuffer) { temporaryBufferPitch = (width*bpp)/8; temporaryBufferBPP = bpp; temporaryBuffer = new pp_uint8[getSize().width*getSize().height*(bpp/8)]; } currentGraphics->lock = true; } PPDisplayDeviceFB::~PPDisplayDeviceFB() { SDL_FreeSurface(theSurface); SDL_DestroyRenderer(theRenderer); SDL_DestroyWindow(theWindow); delete[] temporaryBuffer; // base class is responsible for deleting currentGraphics } PPGraphicsAbstract* PPDisplayDeviceFB::open() { if (!isEnabled()) return NULL; if (currentGraphics->lock) { if (SDL_LockSurface(theSurface) < 0) return NULL; currentGraphics->lock = false; if (needsTemporaryBuffer) static_cast(currentGraphics)->setBufferProperties(temporaryBufferPitch, (pp_uint8*)temporaryBuffer); else static_cast(currentGraphics)->setBufferProperties(theSurface->pitch, (pp_uint8*)theSurface->pixels); return currentGraphics; } return NULL; } void PPDisplayDeviceFB::close() { SDL_UnlockSurface(theSurface); currentGraphics->lock = true; } void PPDisplayDeviceFB::update() { if (!isUpdateAllowed() || !isEnabled()) return; if (theSurface->locked) { return; } PPRect r(0, 0, getSize().width, getSize().height); swap(r); // Update entire texture and copy to renderer SDL_UpdateTexture(theTexture, NULL, theSurface->pixels, theSurface->pitch); SDL_RenderClear(theRenderer); SDL_RenderCopy(theRenderer, theTexture, NULL, NULL); SDL_RenderPresent(theRenderer); } void PPDisplayDeviceFB::update(const PPRect& r) { if (!isUpdateAllowed() || !isEnabled()) return; if (theSurface->locked) { return; } swap(r); PPRect r2(r); r2.scale(scaleFactor); transformInverse(r2); SDL_Rect r3 = { r2.x1, r2.y1, r2.width(), r2.height() }; // Calculate destination pixel data offset based on row pitch and x coordinate void* surfaceOffset = (char*) theSurface->pixels + r2.y1 * theSurface->pitch + r2.x1 * theSurface->format->BytesPerPixel; // Update dirty area of texture and copy to renderer SDL_UpdateTexture(theTexture, &r3, surfaceOffset, theSurface->pitch); SDL_RenderClear(theRenderer); SDL_RenderCopy(theRenderer, theTexture, NULL, NULL); SDL_RenderPresent(theRenderer); } void PPDisplayDeviceFB::swap(const PPRect& r2) { PPRect r(r2); pp_int32 h; if (r.x2 < r.x1) { h = r.x1; r.x1 = r.x2; r.x2 = h; } if (r.y2 < r.y1) { h = r.y1; r.y1 = r.y2; r.y2 = h; } switch (orientation) { case ORIENTATION_NORMAL: { if (!needsTemporaryBuffer) return; if (SDL_LockSurface(theSurface) < 0) return; const pp_uint32 srcBPP = temporaryBufferBPP/8; const pp_uint32 dstBPP = theSurface->format->BytesPerPixel; PPRect destRect(r); destRect.scale(scaleFactor); const pp_uint32 stepU = (r.x2 - r.x1) * 65536 / (destRect.x2 - destRect.x1); const pp_uint32 stepV = (r.y2 - r.y1) * 65536 / (destRect.y2 - destRect.y1); switch (temporaryBufferBPP) { case 16: { pp_uint32 srcPitch = temporaryBufferPitch; pp_uint32 dstPitch = theSurface->pitch; pp_uint8* src = (pp_uint8*)temporaryBuffer; pp_uint8* dst = (pp_uint8*)theSurface->pixels; pp_uint32 v = r.y1 * 65536; for (pp_uint32 y = destRect.y1; y < destRect.y2; y++) { pp_uint32 u = r.x1 * 65536; pp_uint16* dstPtr = (pp_uint16*)(dst + y*dstPitch + destRect.x1*dstBPP); pp_uint8* srcPtr = src + (v>>16)*srcPitch; for (pp_uint32 x = destRect.x1; x < destRect.x2; x++) { *dstPtr++ = *(pp_uint16*)(srcPtr + (u>>16) * srcBPP); u += stepU; } v += stepV; } break; } case 24: { pp_uint32 srcPitch = temporaryBufferPitch; pp_uint32 dstPitch = theSurface->pitch; pp_uint8* src = (pp_uint8*)temporaryBuffer; pp_uint8* dst = (pp_uint8*)theSurface->pixels; const pp_uint32 srcBPP = temporaryBufferBPP/8; const pp_uint32 dstBPP = theSurface->format->BytesPerPixel; pp_uint32 v = r.y1 * 65536; for (pp_uint32 y = destRect.y1; y < destRect.y2; y++) { pp_uint32 u = r.x1 * 65536; pp_uint8* dstPtr = (pp_uint8*)(dst + y*dstPitch + destRect.x1*dstBPP); pp_uint8* srcPtr = src + (v>>16)*srcPitch; for (pp_uint32 x = destRect.x1; x < destRect.x2; x++) { *dstPtr = *(pp_uint8*)(srcPtr + (u>>16) * srcBPP); *(dstPtr+1) = *(pp_uint8*)(srcPtr + (u>>16) * srcBPP + 1); *(dstPtr+2) = *(pp_uint8*)(srcPtr + (u>>16) * srcBPP + 2); dstPtr+=3; u += stepU; } v += stepV; } break; } case 32: { pp_uint32 srcPitch = temporaryBufferPitch; pp_uint32 dstPitch = theSurface->pitch; pp_uint8* src = (pp_uint8*)temporaryBuffer; pp_uint8* dst = (pp_uint8*)theSurface->pixels; const pp_uint32 srcBPP = temporaryBufferBPP/8; const pp_uint32 dstBPP = theSurface->format->BytesPerPixel; pp_uint32 v = r.y1 * 65536; for (pp_uint32 y = destRect.y1; y < destRect.y2; y++) { pp_uint32 u = r.x1 * 65536; pp_uint32* dstPtr = (pp_uint32*)(dst + y*dstPitch + destRect.x1*dstBPP); pp_uint8* srcPtr = src + (v>>16)*srcPitch; for (pp_uint32 x = destRect.x1; x < destRect.x2; x++) { *dstPtr++ = *(pp_uint32*)(srcPtr + (u>>16) * srcBPP); u += stepU; } v += stepV; } break; } default: fprintf(stderr, "SDL: Unsupported color depth for requested orientation"); exit(2); } SDL_UnlockSurface(theSurface); break; } case ORIENTATION_ROTATE90CCW: { if (SDL_LockSurface(theSurface) < 0) return; switch (temporaryBufferBPP) { case 16: { pp_uint32 srcPitch = temporaryBufferPitch >> 1; pp_uint32 dstPitch = theSurface->pitch >> 1; pp_uint16* src = (pp_uint16*)temporaryBuffer; pp_uint16* dst = (pp_uint16*)theSurface->pixels; if (scaleFactor != 1) { PPRect destRect(r); destRect.scale(scaleFactor); const pp_uint32 stepU = (r.x2 - r.x1) * 65536 / (destRect.x2 - destRect.x1); const pp_uint32 stepV = (r.y2 - r.y1) * 65536 / (destRect.y2 - destRect.y1); pp_uint32 v = r.y1 * 65536; for (pp_uint32 y = destRect.y1; y < destRect.y2; y++) { pp_uint32 u = r.x1 * 65536; pp_uint16* srcPtr = src + (v>>16)*srcPitch; pp_uint16* dstPtr = dst + y + (realHeight-destRect.x1)*dstPitch; for (pp_uint32 x = destRect.x1; x < destRect.x2; x++) { *(dstPtr-=dstPitch) = *(srcPtr+(u>>16)); u += stepU; } v += stepV; } } else { for (pp_uint32 y = r.y1; y < r.y2; y++) { pp_uint16* srcPtr = src + y*srcPitch + r.x1; pp_uint16* dstPtr = dst + y + (realHeight-r.x1)*dstPitch; for (pp_uint32 x = r.x1; x < r.x2; x++) *(dstPtr-=dstPitch) = *srcPtr++; } } break; } case 24: { pp_uint32 srcPitch = temporaryBufferPitch; pp_uint32 dstPitch = theSurface->pitch; pp_uint8* src = (pp_uint8*)temporaryBuffer; pp_uint8* dst = (pp_uint8*)theSurface->pixels; const pp_uint32 srcBPP = temporaryBufferBPP/8; const pp_uint32 dstBPP = theSurface->format->BytesPerPixel; if (scaleFactor != 1) { PPRect destRect(r); destRect.scale(scaleFactor); const pp_uint32 stepU = (r.x2 - r.x1) * 65536 / (destRect.x2 - destRect.x1); const pp_uint32 stepV = (r.y2 - r.y1) * 65536 / (destRect.y2 - destRect.y1); pp_uint32 v = r.y1 * 65536; for (pp_uint32 y = destRect.y1; y < destRect.y2; y++) { pp_uint32 u = r.x1 * 65536; pp_uint8* srcPtr = src + (v>>16)*srcPitch; pp_uint8* dstPtr = dst + y*dstBPP + dstPitch*(realHeight-1-destRect.x1); for (pp_uint32 x = destRect.x1; x < destRect.x2; x++) { dstPtr[0] = *(srcPtr+(u>>16) * srcBPP); dstPtr[1] = *(srcPtr+(u>>16) * srcBPP + 1); dstPtr[2] = *(srcPtr+(u>>16) * srcBPP + 2); dstPtr-=dstPitch; u += stepU; } v += stepV; } } else { for (pp_uint32 y = r.y1; y < r.y2; y++) { pp_uint8* srcPtr = src + y*srcPitch + r.x1*srcBPP; pp_uint8* dstPtr = dst + y*dstBPP + dstPitch*(realHeight-1-r.x1); for (pp_uint32 x = r.x1; x < r.x2; x++) { dstPtr[0] = srcPtr[0]; dstPtr[1] = srcPtr[1]; dstPtr[2] = srcPtr[2]; srcPtr+=srcBPP; dstPtr-=dstPitch; } } } break; } case 32: { pp_uint32 srcPitch = temporaryBufferPitch; pp_uint32 dstPitch = theSurface->pitch; pp_uint8* src = (pp_uint8*)temporaryBuffer; pp_uint8* dst = (pp_uint8*)theSurface->pixels; const pp_uint32 srcBPP = temporaryBufferBPP/8; const pp_uint32 dstBPP = theSurface->format->BytesPerPixel; if (scaleFactor != 1) { PPRect destRect(r); destRect.scale(scaleFactor); const pp_uint32 stepU = (r.x2 - r.x1) * 65536 / (destRect.x2 - destRect.x1); const pp_uint32 stepV = (r.y2 - r.y1) * 65536 / (destRect.y2 - destRect.y1); pp_uint32 v = r.y1 * 65536; for (pp_uint32 y = destRect.y1; y < destRect.y2; y++) { pp_uint32 u = r.x1 * 65536; pp_uint8* srcPtr = src + (v>>16)*srcPitch; pp_uint32* dstPtr = (pp_uint32*)(dst + y*dstBPP + dstPitch*(realHeight-1-destRect.x1)); for (pp_uint32 x = destRect.x1; x < destRect.x2; x++) { *(dstPtr-=(dstPitch>>2)) = *(pp_uint32*)(srcPtr + (u>>16) * srcBPP); u += stepU; } v += stepV; } } else { for (pp_uint32 y = r.y1; y < r.y2; y++) { pp_uint32* srcPtr = (pp_uint32*)(src + y*srcPitch + r.x1*srcBPP); pp_uint32* dstPtr = (pp_uint32*)(dst + y*dstBPP + dstPitch*(realHeight-1-r.x1)); for (pp_uint32 x = r.x1; x < r.x2; x++) *(dstPtr-=(dstPitch>>2)) = *srcPtr++; } } break; } default: fprintf(stderr, "SDL: Unsupported color depth for requested orientation"); exit(2); } SDL_UnlockSurface(theSurface); break; } case ORIENTATION_ROTATE90CW: { if (SDL_LockSurface(theSurface) < 0) return; switch (temporaryBufferBPP) { case 16: { pp_uint32 srcPitch = temporaryBufferPitch >> 1; pp_uint32 dstPitch = theSurface->pitch >> 1; pp_uint16* src = (pp_uint16*)temporaryBuffer; pp_uint16* dst = (pp_uint16*)theSurface->pixels; if (scaleFactor != 1) { PPRect destRect(r); destRect.scale(scaleFactor); const pp_uint32 stepU = (r.x2 - r.x1) * 65536 / (destRect.x2 - destRect.x1); const pp_uint32 stepV = (r.y2 - r.y1) * 65536 / (destRect.y2 - destRect.y1); pp_uint32 v = r.y1 * 65536; for (pp_uint32 y = destRect.y1; y < destRect.y2; y++) { pp_uint32 u = r.x1 * 65536; pp_uint16* srcPtr = src + (v>>16)*srcPitch; pp_uint16* dstPtr = dst + (realWidth-1-y) + (dstPitch*(destRect.x1)); for (pp_uint32 x = destRect.x1; x < destRect.x2; x++) { *(dstPtr+=dstPitch) = *(srcPtr+(u>>16)); u += stepU; } v += stepV; } } else { for (pp_uint32 y = r.y1; y < r.y2; y++) { pp_uint16* srcPtr = src + y*srcPitch + r.x1; pp_uint16* dstPtr = dst + (realWidth-1-y) + (dstPitch*r.x1); for (pp_uint32 x = r.x1; x < r.x2; x++) *(dstPtr+=dstPitch) = *srcPtr++; } } break; } case 24: { pp_uint32 srcPitch = temporaryBufferPitch; pp_uint32 dstPitch = theSurface->pitch; pp_uint8* src = (pp_uint8*)temporaryBuffer; pp_uint8* dst = (pp_uint8*)theSurface->pixels; const pp_uint32 srcBPP = temporaryBufferBPP/8; const pp_uint32 dstBPP = theSurface->format->BytesPerPixel; if (scaleFactor != 1) { PPRect destRect(r); destRect.scale(scaleFactor); const pp_uint32 stepU = (r.x2 - r.x1) * 65536 / (destRect.x2 - destRect.x1); const pp_uint32 stepV = (r.y2 - r.y1) * 65536 / (destRect.y2 - destRect.y1); pp_uint32 v = r.y1 * 65536; for (pp_uint32 y = destRect.y1; y < destRect.y2; y++) { pp_uint32 u = r.x1 * 65536; pp_uint8* srcPtr = src + (v>>16)*srcPitch; pp_uint8* dstPtr = dst + (realWidth-1-y)*dstBPP + (dstPitch*(destRect.x1)); for (pp_uint32 x = destRect.x1; x < destRect.x2; x++) { dstPtr[0] = *(srcPtr+(u>>16) * srcBPP); dstPtr[1] = *(srcPtr+(u>>16) * srcBPP + 1); dstPtr[2] = *(srcPtr+(u>>16) * srcBPP + 2); dstPtr+=dstPitch; u += stepU; } v += stepV; } } else { for (pp_uint32 y = r.y1; y < r.y2; y++) { pp_uint8* srcPtr = src + y*srcPitch + r.x1*srcBPP; pp_uint8* dstPtr = dst + (realWidth-1-y)*dstBPP + (dstPitch*r.x1); for (pp_uint32 x = r.x1; x < r.x2; x++) { dstPtr[0] = srcPtr[0]; dstPtr[1] = srcPtr[1]; dstPtr[2] = srcPtr[2]; srcPtr+=srcBPP; dstPtr+=dstPitch; } } } break; } case 32: { pp_uint32 srcPitch = temporaryBufferPitch; pp_uint32 dstPitch = theSurface->pitch; pp_uint8* src = (pp_uint8*)temporaryBuffer; pp_uint8* dst = (pp_uint8*)theSurface->pixels; const pp_uint32 srcBPP = temporaryBufferBPP/8; const pp_uint32 dstBPP = theSurface->format->BytesPerPixel; if (scaleFactor != 1) { PPRect destRect(r); destRect.scale(scaleFactor); const pp_uint32 stepU = (r.x2 - r.x1) * 65536 / (destRect.x2 - destRect.x1); const pp_uint32 stepV = (r.y2 - r.y1) * 65536 / (destRect.y2 - destRect.y1); pp_uint32 v = r.y1 * 65536; for (pp_uint32 y = destRect.y1; y < destRect.y2; y++) { pp_uint32 u = r.x1 * 65536; pp_uint8* srcPtr = src + (v>>16)*srcPitch; pp_uint32* dstPtr = (pp_uint32*)(dst + (realWidth-1-y)*dstBPP + (dstPitch*(destRect.x1))); for (pp_uint32 x = destRect.x1; x < destRect.x2; x++) { *(dstPtr+=(dstPitch>>2)) = *(pp_uint32*)(srcPtr + (u>>16) * srcBPP); u += stepU; } v += stepV; } } else { for (pp_uint32 y = r.y1; y < r.y2; y++) { pp_uint32* srcPtr = (pp_uint32*)(src + y*srcPitch + r.x1*srcBPP); pp_uint32* dstPtr = (pp_uint32*)(dst + (realWidth-1-y)*dstBPP + (dstPitch*r.x1)); for (pp_uint32 x = r.x1; x < r.x2; x++) *(dstPtr+=(dstPitch>>2)) = *srcPtr++; } } break; } default: fprintf(stderr, "SDL: Unsupported color depth for requested orientation"); exit(EXIT_FAILURE); } SDL_UnlockSurface(theSurface); break; } } } // This is unused at the moment, could be useful if we manage to get the GUI resizable in the future. void PPDisplayDeviceFB::setSize(const PPSize& size) { this->size = size; theSurface = SDL_CreateRGBSurface(0, size.width, size.height, theSurface->format->BitsPerPixel, 0, 0, 0, 0); theTexture = SDL_CreateTextureFromSurface(theRenderer, theSurface); theRenderer = SDL_GetRenderer(theWindow); } MilkyTracker-1.02.00/src/ppui/sdl/DisplayDeviceFB_SDL.h000066400000000000000000000035641324432207300224210ustar00rootroot00000000000000/* * ppui/sdl/DisplayDeviceFB_SDL.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * * 12/5/14 - Dale Whinham * - Port to SDL2 * */ ///////////////////////////////////////////////////////////////// // // Our display device // ///////////////////////////////////////////////////////////////// #ifndef __DISPLAYDEVICEFB_H__ #define __DISPLAYDEVICEFB_H__ #include "DisplayDevice_SDL.h" class PPDisplayDeviceFB : public PPDisplayDevice { private: bool needsTemporaryBuffer; pp_uint8* temporaryBuffer; pp_uint32 temporaryBufferPitch, temporaryBufferBPP; // used for rotating coordinates etc. void swap(const PPRect& r); public: PPDisplayDeviceFB(pp_int32 width, pp_int32 height, pp_int32 scaleFactor, pp_int32 bpp, bool fullScreen, Orientations theOrientation = ORIENTATION_NORMAL, bool swapRedBlue = false); virtual ~PPDisplayDeviceFB(); virtual bool supportsScaling() const { return true; } virtual void setSize(const PPSize& size); virtual PPGraphicsAbstract* open(); virtual void close(); void update(); void update(const PPRect& r); protected: SDL_Surface* theSurface; SDL_Texture* theTexture; SDL_Renderer* theRenderer; }; #endif MilkyTracker-1.02.00/src/ppui/sdl/DisplayDeviceOGL_SDL.cpp000066400000000000000000000060631324432207300231030ustar00rootroot00000000000000/* * ppui/sdl/DisplayDeviceOGL_SDL.cpp * * Copyright 2009 Peter Barth, Christopher O'Neill * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* Using the OpenGL API for drawing/font operations turned out to be very CPU * intensive.. This code left here for historic reasons (edit the relevant * parts of src/tracker/Makefile.am if you want to play around). */ #include "DisplayDeviceOGL_SDL.h" #include "Graphics.h" #ifdef __OPENGL__ #ifdef __APPLE__ #include #endif PPDisplayDeviceOGL::PPDisplayDeviceOGL(pp_int32 width, pp_int32 height, pp_int32 scaleFactor, pp_int32 bpp, bool fullScreen, Orientations theOrientation/* = ORIENTATION_NORMAL*/, bool swapRedBlue/* = false*/) : PPDisplayDevice(width, height, bpp, scaleFactor, fullScreen, theOrientation) { /* Set a video mode */ theWindow = CreateWindow(width, height, bpp, SDL_WINDOW_OPENGL | (bFullScreen==true ? SDL_WINDOW_FULLSCREEN_DESKTOP : 0)); if (theWindow == NULL) { fprintf(stderr, "SDL: Could not create window: %s\n", SDL_GetError()); exit(EXIT_FAILURE); } /* Get SDL OpenGL context */ glContext = SDL_GL_CreateContext(theWindow); if (glContext == NULL) { fprintf(stderr, "SDL: Could not create OpenGL context: %s\n", SDL_GetError()); exit(EXIT_FAILURE); } /* Sets up OpenGL double buffering */ SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); /* Use immediate updates; don't wait for Vblank */ SDL_GL_SetSwapInterval(0); #if 0 CGLError err; CGLContextObj ctx = CGLGetCurrentContext(); // Enable the multi-threading err = CGLEnable( ctx, kCGLCEMPEngine); if (err != kCGLNoError ) { exit(EXIT_FAILURE); } #endif currentGraphics = new PPGraphics_OGL(width, height); currentGraphics->lock = true; } PPDisplayDeviceOGL::~PPDisplayDeviceOGL() { SDL_GL_DeleteContext(glContext); // base class is responsible for deleting currentGraphics } PPGraphicsAbstract* PPDisplayDeviceOGL::open() { if (!isEnabled()) return NULL; if (currentGraphics->lock) { currentGraphics->lock = false; return currentGraphics; } return NULL; } void PPDisplayDeviceOGL::close() { currentGraphics->lock = true; } void PPDisplayDeviceOGL::update() { if (!isUpdateAllowed() || !isEnabled()) return; if (!currentGraphics->lock) return; SDL_GL_SwapWindow(theWindow); } void PPDisplayDeviceOGL::update(const PPRect& r) { update(); } #endif MilkyTracker-1.02.00/src/ppui/sdl/DisplayDeviceOGL_SDL.h000066400000000000000000000030661324432207300225500ustar00rootroot00000000000000/* * ppui/sdl/DisplayDeviceOGL_SDL.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* Using the OpenGL API for drawing/font operations turned out to be very CPU * intensive.. This code left here for historic reasons (edit the relevant * parts of src/tracker/Makefile.am if you want to play around). */ #ifndef __DISPLAYDEVICEOGL_H__ #define __DISPLAYDEVICEOGL_H__ #include "DisplayDevice_SDL.h" class PPDisplayDeviceOGL : public PPDisplayDevice { public: PPDisplayDeviceOGL(pp_int32 width, pp_int32 height, pp_int32 scaleFactor, pp_int32 bpp, bool fullScreen, Orientations theOrientation = ORIENTATION_NORMAL, bool swapRedBlue = false); virtual ~PPDisplayDeviceOGL(); virtual PPGraphicsAbstract* open(); virtual void close(); void update(); void update(const PPRect& r); protected: SDL_GLContext glContext; }; #endif MilkyTracker-1.02.00/src/ppui/sdl/DisplayDevice_SDL.cpp000066400000000000000000000130701324432207300225350ustar00rootroot00000000000000/* * ppui/sdl/DisplayDevice_SDL.cpp * * Copyright 2009 Peter Barth, Christopher O'Neill, Dale Whinham * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "DisplayDevice_SDL.h" #include "Graphics.h" SDL_Window* PPDisplayDevice::CreateWindow(pp_int32& w, pp_int32& h, pp_int32& bpp, Uint32 flags) { // Create SDL window SDL_Window* theWindow = SDL_CreateWindow("MilkyTracker", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, w, h, flags); if (theWindow == NULL) { fprintf(stderr, "SDL: SDL_CreateWindow (width: %d, height: %d) failed: %s\n", w, h, SDL_GetError()); fprintf(stderr, "Retrying with default size..."); w = getDefaultWidth(); h = getDefaultHeight(); theWindow = SDL_CreateWindow("MilkyTracker", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, w, h, flags); if (theWindow == NULL) { fprintf(stderr, "SDL: SDL_CreateWindow (width: %d, height: %d) failed: %s\n", w, h, SDL_GetError()); fprintf(stderr, "Giving up.\n"); return NULL; } } // Prevent window from being resized below minimum SDL_SetWindowMinimumSize(theWindow, w, h); fprintf(stderr, "SDL: Minimum window size set to %dx%d.\n", w, h); return theWindow; } PPDisplayDevice::PPDisplayDevice(pp_int32 width, pp_int32 height, pp_int32 scaleFactor, pp_int32 bpp, bool fullScreen, Orientations theOrientation/* = ORIENTATION_NORMAL*/) : PPDisplayDeviceBase(width, height, scaleFactor), realWidth(width), realHeight(height), orientation(theOrientation) { adjust(realWidth, realHeight); bFullScreen = fullScreen; initMousePointers(); } PPDisplayDevice::~PPDisplayDevice() { delete currentGraphics; } void PPDisplayDevice::adjust(pp_int32& x, pp_int32& y) { switch (orientation) { case ORIENTATION_NORMAL: break; case ORIENTATION_ROTATE90CCW: case ORIENTATION_ROTATE90CW: { pp_int32 h = x; x = y; y = h; break; } } x *= scaleFactor; y *= scaleFactor; } void PPDisplayDevice::transform(pp_int32& x, pp_int32& y) { pp_int32 h; switch (orientation) { case ORIENTATION_NORMAL: break; case ORIENTATION_ROTATE90CW: h = x; x = y; y = realWidth - 1 - h; break; case ORIENTATION_ROTATE90CCW: h = x; x = realHeight - 1 - y; y = h; break; } } void PPDisplayDevice::transformInverse(pp_int32& x, pp_int32& y) { pp_int32 h; switch (orientation) { case ORIENTATION_NORMAL: break; case ORIENTATION_ROTATE90CW: h = x; x = realWidth - y; y = h; break; case ORIENTATION_ROTATE90CCW: h = x; x = y; y = realHeight - h; break; } } void PPDisplayDevice::transformInverse(PPRect& r) { transformInverse((pp_int32&)r.x1, (pp_int32&)r.y1); transformInverse((pp_int32&)r.x2, (pp_int32&)r.y2); pp_int32 h; if (r.x2 < r.x1) { h = r.x1; r.x1 = r.x2; r.x2 = h; } if (r.y2 < r.y1) { h = r.y1; r.y1 = r.y2; r.y2 = h; } } void PPDisplayDevice::setTitle(const PPSystemString& title) { SDL_SetWindowTitle(theWindow, title); } bool PPDisplayDevice::goFullScreen(bool b) { // In X11, this will make MilkyTracker go fullscreen at the selected // resolution. if (!b && (SDL_SetWindowFullscreen(theWindow, SDL_FALSE) == 0)) { bFullScreen = false; return true; } else if (b && (SDL_SetWindowFullscreen(theWindow, SDL_WINDOW_FULLSCREEN_DESKTOP) == 0)) { bFullScreen = true; return true; } return false; } SDL_Window* PPDisplayDevice::getWindow() { return theWindow; } // Defined in main.cpp void exitSDLEventLoop(bool serializedEventInvoked = true); PPSize PPDisplayDevice::getDisplayResolution() const { // Find the monitor MilkyTracker is being displayed on int currentDisplay = SDL_GetWindowDisplayIndex(theWindow); // Structure to hold the display resolution SDL_DisplayMode displayMode; // If this fails, return -1 dimensions (makes MilkyTracker display an error) if (SDL_GetDesktopDisplayMode(currentDisplay, &displayMode) != 0) return PPSize(-1, -1); // Return the desktop size return PPSize(displayMode.w, displayMode.h); } void PPDisplayDevice::shutDown() { exitSDLEventLoop(); } void PPDisplayDevice::setMouseCursor(MouseCursorTypes type) { currentCursorType = type; switch (type) { case MouseCursorTypeStandard: SDL_SetCursor(cursorStandard); break; case MouseCursorTypeResizeLeft: case MouseCursorTypeResizeRight: SDL_SetCursor(cursorResizeHoriz); break; case MouseCursorTypeHand: SDL_SetCursor(cursorHand); break; case MouseCursorTypeWait: SDL_SetCursor(cursorEggtimer); break; } } void PPDisplayDevice::signalWaitState(bool b, const PPColor& color) { setMouseCursor(b ? MouseCursorTypeWait : MouseCursorTypeStandard); } void PPDisplayDevice::initMousePointers() { cursorStandard = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_ARROW); cursorResizeHoriz = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZEWE); cursorEggtimer = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_WAIT); cursorHand = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_HAND); } MilkyTracker-1.02.00/src/ppui/sdl/DisplayDevice_SDL.h000066400000000000000000000046741324432207300222140ustar00rootroot00000000000000/* * ppui/sdl/DisplayDevice_SDL.h * * Copyright 2009 Peter Barth, Dale Whinham * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ ///////////////////////////////////////////////////////////////// // // Our display device // ///////////////////////////////////////////////////////////////// #ifndef __DISPLAYDEVICE_H__ #define __DISPLAYDEVICE_H__ #include "BasicTypes.h" #include "DisplayDeviceBase.h" #include // Forwards class PPGraphicsAbstract; class PPDisplayDevice : public PPDisplayDeviceBase { public: enum Orientations { // Orientations ORIENTATION_NORMAL, ORIENTATION_ROTATE90CCW, ORIENTATION_ROTATE90CW }; protected: pp_int32 realWidth, realHeight; SDL_Window* theWindow; Orientations orientation; SDL_Window* CreateWindow(pp_int32& w, pp_int32& h, pp_int32& bpp, Uint32 flags); // used for rotating coordinates etc. void adjust(pp_int32& x, pp_int32& y); // Mouse pointers SDL_Cursor *cursorStandard, *cursorResizeHoriz, *cursorEggtimer, *cursorHand; void initMousePointers(); public: PPDisplayDevice(pp_int32 width, pp_int32 height, pp_int32 scaleFactor, pp_int32 bpp, bool fullScreen, Orientations theOrientation = ORIENTATION_NORMAL); virtual ~PPDisplayDevice(); void transform(pp_int32& x, pp_int32& y); void transformInverse(pp_int32& x, pp_int32& y); void transformInverse(PPRect& r); Orientations getOrientation() { return orientation; } SDL_Window* getWindow(); // ----------------------------- ex. PPWindow ---------------------------- virtual void setTitle(const PPSystemString& title); virtual bool goFullScreen(bool b); virtual PPSize getDisplayResolution() const; virtual void shutDown(); virtual void signalWaitState(bool b, const PPColor& color); virtual void setMouseCursor(MouseCursorTypes type); }; #endif MilkyTracker-1.02.00/src/ppui/win32/000077500000000000000000000000001324432207300167615ustar00rootroot00000000000000MilkyTracker-1.02.00/src/ppui/win32/DisplayDevice_WIN32.cpp000066400000000000000000000172061324432207300231020ustar00rootroot00000000000000/* * ppui/win32/DisplayDevice_WIN32.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "DisplayDevice_WIN32.h" #include "Graphics.h" #include "WaitWindow_WIN32.h" #include "PPSystem.h" PPDisplayDevice::PPDisplayDevice(HWND hWnd, pp_int32 width, pp_int32 height, pp_int32 scaleFactor/* = 1*/) : PPDisplayDeviceBase(width, height, scaleFactor), m_waitWindowVisible(false), m_hThread(NULL), m_threadID(0) { m_BitmapInfo.biSize = sizeof(BITMAPINFOHEADER); m_BitmapInfo.biWidth = getSize().width; m_BitmapInfo.biHeight = -getSize().height; m_BitmapInfo.biPlanes = 1; m_BitmapInfo.biBitCount = 24; m_BitmapInfo.biCompression = BI_RGB; m_BitmapInfo.biSizeImage = 0; m_BitmapInfo.biXPelsPerMeter = 0; m_BitmapInfo.biYPelsPerMeter = 0; m_BitmapInfo.biClrUsed = 0; m_BitmapInfo.biClrImportant = 0; HDC hScreenDC = ::GetWindowDC(NULL); m_hBitmap = ::CreateDIBSection(hScreenDC, (LPBITMAPINFO)&m_BitmapInfo, DIB_RGB_COLORS, (LPVOID *)&m_pBits, NULL, 0); ::ReleaseDC(NULL,hScreenDC); m_hWnd = hWnd; m_hDC = NULL; // initialise graphics instance currentGraphics = new PPGraphics_BGR24(getSize().width, getSize().height, (getSize().width * 24) / 8, m_pBits); currentGraphics->lock = true; } PPDisplayDevice::~PPDisplayDevice() { delete currentGraphics; } PPGraphicsAbstract* PPDisplayDevice::open() { if (!isEnabled()) return NULL; currentGraphics->lock = false; return currentGraphics; } void PPDisplayDevice::blit(HWND hWnd, HDC pDC, pp_int32 x, pp_int32 y, pp_int32 width, pp_int32 height) { RECT r; GetClientRect(hWnd,&r); HDC hBitmapDC = ::CreateCompatibleDC(NULL); HBITMAP hOldBitmap = (HBITMAP)::SelectObject(hBitmapDC, m_hBitmap); if (scaleFactor == 1) ::BitBlt(pDC, x, y, width, height, hBitmapDC, x, y, SRCCOPY); else ::StretchBlt(pDC, x*scaleFactor, y*scaleFactor, width*scaleFactor, height*scaleFactor, hBitmapDC, x, y, width, height, SRCCOPY); ::SelectObject(hBitmapDC, hOldBitmap); ::DeleteDC(hBitmapDC); } void PPDisplayDevice::close() { currentGraphics->lock = true; } void PPDisplayDevice::update() { if (m_hDC != NULL) return; if (!isUpdateAllowed() || !isEnabled()) return; m_hDC = ::GetDC(m_hWnd); blit(m_hWnd, m_hDC, 0, 0, getSize().width, getSize().height); ::ReleaseDC(m_hWnd, m_hDC); m_hDC = NULL; } void PPDisplayDevice::update(const PPRect& r) { if (m_hDC != NULL) return; if (!isUpdateAllowed() || !isEnabled()) return; m_hDC = ::GetDC(m_hWnd); blit(m_hWnd, m_hDC, r.x1, r.y1, r.width(), r.height()); ::ReleaseDC(m_hWnd, m_hDC); m_hDC = NULL; } extern HCURSOR g_cursorStandard; extern HCURSOR g_cursorResizeWE; extern HCURSOR g_cursorHand; void PPDisplayDevice::setTitle(const PPSystemString& title) { ::SetWindowText(m_hWnd, title); } void PPDisplayDevice::setSize(const PPSize& size) { // Important note: Save this size before the window // is actually resized using SetWindowPos (below) this->size = size; RECT rc; ::GetWindowRect(m_hWnd, &rc); rc.right = rc.left + size.width * scaleFactor; rc.bottom = rc.top + size.height * scaleFactor; ::AdjustWindowRect(&rc, GetWindowLong(m_hWnd, GWL_STYLE), false); ::SetWindowPos(m_hWnd, NULL, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, SWP_SHOWWINDOW | SWP_NOZORDER); } void PPDisplayDevice::adjustWindowSize() { PPSize size = this->size; setSize(size); } static BOOL SetFullScreen (HWND hWnd, int w, int h) { if (!::IsWindow(hWnd)) return FALSE; DEVMODE dmScreen; int frequency = -1; if (::EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &dmScreen)) { frequency = dmScreen.dmDisplayFrequency; } dmScreen.dmSize = sizeof ( DEVMODE ); dmScreen.dmPelsWidth = w; dmScreen.dmPelsHeight = h; if (frequency != -1) dmScreen.dmDisplayFrequency = frequency; dmScreen.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT | (frequency == -1 ? 0 : DM_DISPLAYFREQUENCY); // Try with current frequency first if ( ::ChangeDisplaySettings( &dmScreen, CDS_FULLSCREEN | CDS_RESET) == DISP_CHANGE_SUCCESSFUL ) return TRUE; // Try without setting frequency dmScreen.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT; if ( ::ChangeDisplaySettings( &dmScreen, CDS_FULLSCREEN | CDS_RESET) == DISP_CHANGE_SUCCESSFUL ) return TRUE; return FALSE; } bool PPDisplayDevice::goFullScreen(bool b) { if (b) { ::GetWindowRect(m_hWnd, &m_lastRect); if (::SetFullScreen(m_hWnd, size.width * scaleFactor, size.height * scaleFactor)) { m_lastWindowStyle = ::GetWindowLong(m_hWnd, GWL_STYLE); m_lastWindowExStyle = ::GetWindowLong(m_hWnd, GWL_EXSTYLE); ::SetWindowLong(m_hWnd, GWL_STYLE, WS_POPUP | WS_VISIBLE | WS_CLIPSIBLINGS); ::SetWindowLong(m_hWnd, GWL_EXSTYLE, WS_EX_TOPMOST); ::ShowWindow(m_hWnd, SW_SHOWMAXIMIZED); ::SetWindowPos(m_hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE); bFullScreen = true; } else { bFullScreen = false; return false; } } else { ::ChangeDisplaySettings(NULL, 0); ::SetWindowLong(m_hWnd, GWL_STYLE, m_lastWindowStyle); ::SetWindowLong(m_hWnd, GWL_EXSTYLE, m_lastWindowExStyle); ::SetWindowPos(m_hWnd, HWND_NOTOPMOST, m_lastRect.left, m_lastRect.top, m_lastRect.right - m_lastRect.left, m_lastRect.bottom - m_lastRect.top, SWP_SHOWWINDOW | SWP_FRAMECHANGED); bFullScreen = false; } return true; } void PPDisplayDevice::shutDown() { ::PostMessage(m_hWnd, WM_CLOSE, 0, 0); } DWORD WINAPI PPDisplayDevice::UpdateWindowThreadProc(LPVOID lpParameter) { PPDisplayDevice* thisDisplayDevice = (PPDisplayDevice*)lpParameter; while (true) { if (thisDisplayDevice->m_waitWindowVisible) WaitWindow::getInstance()->update(); System::msleep(100); } ::ExitThread(0); return 0; } void PPDisplayDevice::signalWaitState(bool b, const PPColor& color) { waitBarColor = color; if (b) { RECT bounds; ::GetWindowRect(m_hWnd, &bounds); WaitWindow::getInstance()->move(bounds.left + ((bounds.right-bounds.left) >> 1) - (WaitWindow::getInstance()->getWidth()>>1), bounds.top + ((bounds.bottom-bounds.top) >> 1) - (WaitWindow::getInstance()->getHeight()>>1)); WaitWindow::getInstance()->setColor(color); WaitWindow::getInstance()->show(); m_waitWindowVisible = true; if (!m_hThread) { m_hThread = CreateThread(NULL, 0, &UpdateWindowThreadProc, (void*)this, 0, &m_threadID); } } else { m_waitWindowVisible = false; WaitWindow::getInstance()->hide(); } } void PPDisplayDevice::setMouseCursor(MouseCursorTypes type) { currentCursorType = type; switch (type) { case MouseCursorTypeStandard: ::SetCursor(g_cursorStandard); break; case MouseCursorTypeResizeLeft: ::SetCursor(g_cursorResizeWE); break; case MouseCursorTypeResizeRight: ::SetCursor(g_cursorResizeWE); break; case MouseCursorTypeHand: ::SetCursor(g_cursorHand); break; } } MilkyTracker-1.02.00/src/ppui/win32/DisplayDevice_WIN32.h000066400000000000000000000043371324432207300225500ustar00rootroot00000000000000/* * ppui/win32/DisplayDevice_WIN32.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ ///////////////////////////////////////////////////////////////// // // Our display device // ///////////////////////////////////////////////////////////////// #ifndef DISPLAYDEVICE__H #define DISPLAYDEVICE__H #include "BasicTypes.h" #include "DisplayDeviceBase.h" #include // Forwards class PPGraphicsAbstract; class PPDisplayDevice : public PPDisplayDeviceBase { private: BITMAPINFOHEADER m_BitmapInfo; HBITMAP m_hBitmap; LPBYTE m_pBits; HWND m_hWnd; RECT m_lastRect; LONG m_lastWindowStyle, m_lastWindowExStyle; HDC m_hDC; bool m_waitWindowVisible; HANDLE m_hThread; DWORD m_threadID; void blit(HWND hWnd, HDC pDC, pp_int32 x, pp_int32 y, pp_int32 width, pp_int32 height); public: PPDisplayDevice(HWND hWnd, pp_int32 width, pp_int32 height, pp_int32 scaleFactor = 1); virtual ~PPDisplayDevice(); virtual PPGraphicsAbstract* open(); virtual void close(); void update(); void update(const PPRect& r); void adjustWindowSize(); virtual void setSize(const PPSize& size); virtual bool supportsScaling() const { return true; } // ----------------------------- ex. PPWindow ---------------------------- public: virtual void setTitle(const PPSystemString& title); virtual bool goFullScreen(bool b); virtual void shutDown(); virtual void signalWaitState(bool b, const PPColor& color); virtual void setMouseCursor(MouseCursorTypes type); static DWORD WINAPI UpdateWindowThreadProc(LPVOID lpParameter); }; #endif MilkyTracker-1.02.00/src/ppui/wince/000077500000000000000000000000001324432207300171245ustar00rootroot00000000000000MilkyTracker-1.02.00/src/ppui/wince/DisplayDevice_GAPI.cpp000066400000000000000000000041531324432207300231600ustar00rootroot00000000000000/* * ppui/wince/DisplayDevice_GAPI.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "DisplayDevice_GAPI.h" #include "Graphics.h" #include "gx.h" #include "WaitStateThread.h" // virtual screen comes from outside extern unsigned short *vScreen; // Also the Update functions void UpdateScreen(unsigned short* vScreen); void UpdateScreenRegion(unsigned short* vScreen, const PPRect& r); PPDisplayDevice::PPDisplayDevice(HWND hWnd, pp_uint32 width, pp_uint32 height) : PPDisplayDeviceBase(width, height) { currentGraphics = new PPGraphics_16BIT(width, height, (width * 16) / 8, (pp_uint8*)vScreen); this->hWnd = hWnd; } PPDisplayDevice::~PPDisplayDevice() { delete currentGraphics; } PPGraphicsAbstract* PPDisplayDevice::open() { if (!isEnabled()) return NULL; currentGraphics->lock = false; return currentGraphics; } void PPDisplayDevice::close() { currentGraphics->lock = true; } void PPDisplayDevice::update() { if (!isUpdateAllowed() || !isEnabled()) return; ::UpdateScreen(vScreen); } void PPDisplayDevice::update(const PPRect& r) { if (!isUpdateAllowed() || !isEnabled()) return; ::UpdateScreenRegion(vScreen, r); } void PPDisplayDevice::setTitle(const PPSystemString& title) { ::SetWindowText(hWnd, title); } void PPDisplayDevice::shutDown() { ::PostMessage(hWnd, WM_CLOSE, 0, 0); } void PPDisplayDevice::signalWaitState(bool b, const PPColor& color) { WaitStateThread::getInstance()->activate(b); } MilkyTracker-1.02.00/src/ppui/wince/DisplayDevice_GAPI.h000066400000000000000000000031301324432207300226170ustar00rootroot00000000000000/* * ppui/wince/DisplayDevice_GAPI.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ ///////////////////////////////////////////////////////////////// // // Our display device // ///////////////////////////////////////////////////////////////// #ifndef DISPLAYDEVICE__H #define DISPLAYDEVICE__H #include "BasicTypes.h" #include "DisplayDeviceBase.h" #include // Forwards class PPGraphicsAbstract; class PPDisplayDevice : public PPDisplayDeviceBase { private: HWND hWnd; public: PPDisplayDevice(HWND hWnd, pp_uint32 width, pp_uint32 height); virtual ~PPDisplayDevice(); virtual PPGraphicsAbstract* open(); virtual void close(); void update(); void update(const PPRect& r); // ----------------------------- ex. PPWindow ---------------------------- virtual void setTitle(const PPSystemString& title); virtual void shutDown(); virtual void signalWaitState(bool b, const PPColor& color); }; #endif MilkyTracker-1.02.00/src/submodules/000077500000000000000000000000001324432207300172245ustar00rootroot00000000000000MilkyTracker-1.02.00/src/submodules/lhasa/000077500000000000000000000000001324432207300203145ustar00rootroot00000000000000MilkyTracker-1.02.00/src/submodules/rtaudio/000077500000000000000000000000001324432207300206735ustar00rootroot00000000000000MilkyTracker-1.02.00/src/submodules/zlib/000077500000000000000000000000001324432207300201645ustar00rootroot00000000000000MilkyTracker-1.02.00/src/submodules/zziplib/000077500000000000000000000000001324432207300207075ustar00rootroot00000000000000MilkyTracker-1.02.00/src/tools/000077500000000000000000000000001324432207300162025ustar00rootroot00000000000000MilkyTracker-1.02.00/src/tools/FontLibrary.cpp000066400000000000000000010774411324432207300211570ustar00rootroot00000000000000struct FontEntry { const char* name; const unsigned int width, height; const unsigned char* data; }; FontEntry fontEntries[] = { // Font no. 0 FontEntry("ARIEL", 8, 8, "\x0\x0\x0\x0\x0\x0\x0\x0\x7e\x81\xa5\x81\xbd\x99\x81\x7e\x7e\xff\xdb\xff\xff\xc3\xe7\x7e\x0\x77\x7f\x7f\x3e\x1c\x8\x0\x8\x1c\x3e\x7f\x3e\x1c\x8\x0\x18\x3c\x18\xff\xff\x52\x18\x0\x8\x1c\x3e\x7f\x7f\x49\x1c\x0\x0\x0\x18\x3c\x18\x0\x0\x0" "\xff\xff\xe7\xc3\xe7\xff\xff\xff\x0\x3c\x42\x81\x81\x42\x3c\x0\xff\xc3\xbd\x7e\x7e\xbd\xc3\xff\xf8\xe0\xb0\x3e\x63\x63\x3e\x0\x0\x7e\xc3\xc3\x7e\x18\x7e\x18\x20\x60\xe0\x20\x20\x3f\x1f\x0\x30\x50\xb0\xd0\x9f\x8f\xf0\xf0\x81\xc2\xbc\xe4\xa4\xfc\xea\xff" "\x0\x0\x6\x1e\x7e\x1e\x6\x0\x0\x0\x60\x78\x7e\x78\x60\x0\x18\x7e\x18\x18\x18\x18\x7e\x18\x66\x66\x66\x66\x66\x0\x66\x0\xff\x6d\x6e\x6c\x6c\x6c\x6c\x0\x7e\x81\x3e\x42\x42\x7c\x81\x7e\x0\x0\x0\x7e\x7e\x0\x0\x0\x18\x7e\x18\x18\x7e\x18\x0\xff" "\x18\x7e\x18\x18\x18\x18\x18\x0\x18\x18\x18\x18\x18\x7e\x18\x0\x0\x20\x60\xff\x60\x20\x0\x0\x0\x4\x6\xff\x6\x4\x0\x0\x0\x0\x0\x3\x3\x3\xff\x0\x0\x24\x66\xff\x66\x24\x0\x0\x0\x0\x8\x1c\x3e\x7f\x0\x0\x0\x0\x0\x7f\x3e\x1c\x8\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\xc\xc\xc\xc\xc\x0\xc\x0\x66\x66\x0\x0\x0\x0\x0\x0\xa\x1f\xa\x1f\xa\x0\x0\x0\x3e\x4b\xb\x3e\x68\x6b\x3e\x8\xc7\x65\x37\x18\xec\xa6\xe3\x0\x1c\x32\x1c\xa2\x63\x73\x5e\x80\x30\x30\x18\x0\x0\x0\x0\x0" "\x8\x6\x3\x3\x3\x6\x8\x0\x8\x30\x60\x60\x60\x30\x8\x0\x0\x2a\x1c\x7f\x1c\x2a\x0\x0\x0\x18\x18\x7e\x18\x18\x0\x0\x0\x0\x0\x0\x0\x0\x18\xe\x0\x0\x0\x7e\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x30\x0\x80\xc0\x60\x30\x18\xc\x6\x3" "\x3c\x66\x66\x66\x66\x66\x3c\x0\x18\x1c\x18\x18\x18\x18\x3c\x0\x3e\x63\x60\x30\xc\x6\x7f\x0\x3e\x63\x60\x3c\x60\x63\x3e\x0\x70\x78\x6c\x66\x7f\x60\x60\x0\x7f\x3\x3\x3f\x60\x60\x3f\x0\x3e\x63\x3\x3f\x63\x63\x3e\x0\x7f\x60\x30\x18\xc\xc\xc\x0" "\x3e\x63\x63\x3e\x63\x63\x3e\x0\x3e\x63\x63\x7e\x60\x63\x3e\x0\x0\xc\x0\x0\x0\xc\x0\x0\x0\xc\x0\x0\x0\xc\x4\x0\x0\x38\xc\x6\xc\x38\x0\x0\x0\x0\x7e\x0\x7e\x0\x0\x0\x0\xe\x18\x30\x18\xe\x0\x0\x3e\x63\x30\x18\xc\x0\xc\x0" "\x3e\x41\x5d\x55\x7d\x1\x3e\x0\x1c\x36\x63\x63\x7f\x63\x63\x0\x3f\x63\x63\x3f\x63\x63\x3f\x0\x3e\x63\x3\x3\x63\x63\x3e\x0\x3f\x63\x63\x63\x63\x63\x3f\x0\x7f\x3\x3\x1f\x3\x3\x7f\x0\x7f\x43\x3\x1f\x13\x3\x3\x0\x3e\x63\x3\x7b\x43\x63\x5e\x0" "\x63\x63\x63\x7f\x63\x63\x63\x0\x7e\x18\x18\x18\x18\x18\x7e\x0\x78\x30\x30\x30\x30\x33\x1e\x0\x63\x33\x1b\xf\x1b\x33\x63\x0\xf\x6\x6\x6\x6\x46\x7f\x0\x63\x77\x7f\x6b\x6b\x63\x63\x0\x63\x67\x6f\x7b\x73\x63\x63\x0\x3e\x63\x63\x63\x63\x63\x3e\x0" "\x3f\x66\x66\x3e\x6\x6\xf\x0\x3e\x63\x63\x63\x7b\x73\x3e\x60\x3f\x66\x66\x3e\x66\x66\x67\xc0\x3e\x43\x3\x3e\x60\x63\x3e\x0\x7e\x18\x18\x18\x18\x18\x18\x0\x63\x63\x63\x63\x63\x63\x3e\x0\x63\x63\x63\x63\x63\x36\x1c\x0\x63\x63\x6b\x6b\x6b\x77\x63\x0" "\x63\x36\x1c\x8\x1c\x36\x63\x0\x41\x63\x36\x1c\x8\x8\x1c\x0\x7f\x61\x30\x18\xc\x46\x7f\x0\x38\x18\x18\x18\x18\x18\x18\x38\x3\x6\xc\x18\x30\x60\xc0\x80\xe\xc\xc\xc\xc\xc\xc\xe\x8\x1c\x36\x63\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xff" "\xc\xc\x18\x0\x0\x0\x0\x0\x0\x0\x3e\x60\x7e\x63\x7e\x0\x3\x3\x3f\x63\x63\x63\x3f\x0\x0\x0\x3e\x63\x3\x63\x3e\x0\x60\x60\x7e\x63\x63\x63\x7e\x0\x0\x0\x3e\x63\x7f\x3\x3e\x0\x3c\x66\x6\x3f\x6\x6\x6\x0\x0\x0\xbe\x63\x63\x7e\x60\x3e" "\x3\x3\x3f\x63\x63\x63\x63\x0\x18\x0\x1c\x18\x18\x18\x3c\x0\x30\x0\x38\x30\x30\x30\x33\x1e\x3\x3\x63\x1b\xf\x1b\x63\x0\x1c\x18\x18\x18\x18\x18\x38\x0\x0\x0\x63\x7f\x6b\x6b\x63\x0\x0\x0\x3f\x63\x63\x63\x63\x0\x0\x0\x3e\x63\x63\x63\x3e\x0" "\x0\x0\x3f\x63\x63\x3f\x3\x3\x0\x0\x7e\x63\x63\x7e\x60\xe0\x0\x0\x7b\x6e\x66\x6\x6\x0\x0\x0\x7e\x3\x3e\x60\x3f\x0\x18\x18\x7e\x18\x18\x18\x78\x0\x0\x0\x63\x63\x63\x63\x7e\x0\x0\x0\x63\x63\x63\x36\x1c\x0\x0\x0\x63\x6b\x6b\x77\x63\x0" "\x0\x0\x63\x36\x1c\x36\x63\x0\x0\x0\x63\x63\x63\x7e\x60\x3f\x0\x0\x7f\x30\x8\x46\x7f\x0\x70\x18\x18\xe\x18\x18\x70\x0\x18\x18\x18\x0\x18\x18\x18\x0\x7\xc\xc\x38\xc\xc\x7\x0\xe\xd9\x70\x0\x0\x0\x0\x0\x0\x0\x8\x14\x22\x7f\x0\x0" "\xff\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\x1\x80\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\xff" "\x1\x0\x0\x0\x0\x0\x0\x0\x80\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x1\x0\x0\x0\x0\x0\x0\x0\x80\x1\x3\x7\xf\x1f\x3f\x7f\xff\xff\xfe\xfc\xf8\xf0\xe0\xc0\x80\xff\xff\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0" "\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\x3\x3\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\xff\xff\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\x0\x55\x0\x0\x0\x0\x0\x3f\x3f\x3f\x3f\x3f\x3f\x0\x0\x7e\x7e\x7e\x7e\x7e\x7e\x0\x0\xfc\xfc\xfc\xfc\xfc\xfc\x0\x0\xf8\xf8\xf8\xf8\xf8\xf8\x0\x0\xf0\xf0\xf0\xf0\xf0\xf0\x0" "\x0\xe0\xe0\xe0\xe0\xe0\xe0\x0\x0\xc0\xc0\xc0\xc0\xc0\xc0\x0\x0\x80\x80\x80\x80\x80\x80\x0\x0\x1\x1\x1\x1\x1\x1\x0\x0\x3\x3\x3\x3\x3\x3\x0\x0\x7\x7\x7\x7\x7\x7\x0\x0\xf\xf\xf\xf\xf\xf\x0\x0\x1f\x1f\x1f\x1f\x1f\x1f\x0" "\x55\x6b\x55\x6b\x55\x6b\x55\x6b\xff\xff\x0\x0\x0\x8\x1c\x3e\xff\xff\x0\x0\x0\x0\x0\x7f\xff\xff\x0\x0\x8\x1c\x3e\x7f\xff\xff\x0\xc3\xe7\xff\xdb\xc3\x0\x0\x0\x0\x18\x0\x0\x0\x0\x3\x3\x3\x3\x3\x3\x3\x0\x1b\x1b\x1b\x1b\x1b\x1b\x1b" "\x0\xdb\xdb\xdb\xdb\xdb\xdb\xdb\x0\x6\x6\x6\x6\x6\x6\x6\x0\x36\x36\x36\x36\x36\x36\x36\x0\xb6\xb6\xb6\xb6\xb6\xb6\xb6\x0\x1\x1\x1\x1\x1\x1\x1\x0\xd\xd\xd\xd\xd\xd\xd\x0\x6d\x6d\x6d\x6d\x6d\x6d\x6d\x0\x0\x18\x3c\x3c\x18\x0\x0" "\x0\x0\x0\x1f\x18\x1f\x18\x18\x6c\x6c\x6c\x6f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x0\x0\x0\x7f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6f\x60\x7f\x0\x0\x6c\x6c\x6c\x7f\x0\x0\x0\x0\x18\x18\x18\x1f\x18\x1f\x0\x0\x0\x0\x0\x1f\x18\x18\x18\x18" "\x18\x18\x18\xf8\x0\x0\x0\x0\x18\x18\x18\xff\x0\x0\x0\x0\x0\x0\x0\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\x18\x18\x18\x0\x0\x0\x0\xff\x0\x0\x0\x18\x18\x18\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\xf8\x18\x18\x6c\x6c\x6c\xec\x6c\x6c\x6c\x6c" "\x6c\x6c\x6c\xec\xc\xfc\x0\x0\x0\x0\x0\xfc\xc\xec\x6c\x6c\x6c\x6c\x6c\xef\x0\xff\x0\x0\x0\x0\x0\xff\x0\xef\x6c\x6c\x6c\x6c\x6c\xec\xc\xec\x6c\x6c\x0\x0\x0\xff\x0\xff\x0\x0\x6c\x6c\x6c\xef\x0\xef\x6c\x6c\x18\x18\x18\xff\x0\xff\x0\x0" "\x6c\x6c\x6c\xff\x0\x0\x0\x0\x0\x0\x0\xff\x0\xff\x18\x18\x0\x0\x0\xff\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xfc\x0\x0\x0\x0\x18\x18\x18\xf8\x18\xf8\x0\x0\x0\x0\x0\xf8\x18\xf8\x18\x18\x0\x0\x0\xfc\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xff\x6c\x6c\x6c\x6c" "\x18\x18\x18\xff\x18\xff\x18\x18\x18\x18\x18\x1f\x0\x0\x0\x0\x0\x0\x0\xf8\x18\x18\x18\x18\xff\xff\xff\xff\xff\xff\xff\xff\x0\x0\x0\x0\xff\xff\xff\xff\xf\xf\xf\xf\xf\xf\xf\xf\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xff\xff\xff\xff\x0\x0\x0\x0" "\x0\x0\xee\x19\x19\xee\x0\x0\x38\x6c\x66\x3f\x63\x63\x3f\x3\x7f\x46\x6\x6\x6\x6\x6\x0\x0\x0\xff\x66\x66\x66\x66\x0\x7f\x46\xc\x18\xc\x46\x7f\x0\x0\x0\xfc\x66\x63\x33\x1e\x0\x0\x0\xcc\xcc\xcc\x7c\xc\xf\x0\x0\xff\x18\x18\x18\x18\x0" "\x3c\x18\x3c\x66\x66\x3c\x18\x3c\x0\x3e\x63\x7f\x63\x3e\x0\x0\x0\x7e\xc3\xc3\xc3\x66\xe7\x0\x78\x98\x3c\x66\x63\x33\x1e\x0\x0\x0\x66\x99\x99\x66\x0\x0\x0\xc0\x3e\x73\x67\x3e\x3\x0\x0\x7c\x3\x7f\x3\x7c\x0\x0\x0\x0\x0\x0\x0\xdb\xdb\x0" "\x0\x7e\x0\x7e\x0\x7e\x0\x0\x0\xf8\x8\x8\x8\x8\xf8\x0\x0\xff\x0\x0\x0\x0\xff\x0\x0\x1f\x10\x10\x10\x10\x1f\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x0\x2\x1\x0\x0\x0\x20\x30\x28\x24\x22\xa1\x60\x20\x0\x0\x0\x1\x2\x0\x0\x0" "\x20\x60\xa1\x22\x24\x28\x30\x20\x0\x0\x0\x40\x40\x40\x40\x7f\xff\x81\x81\x81\x81\x80\x80\x80\x0\x0\x0\x20\x20\x11\x11\xe\x38\x44\x44\x82\x82\x0\x0\x0\x0\x0\xfe\x7c\x38\x10\x0\x0\x0\x0\x10\x38\x7c\xfe\x0\x0\x80\xc1\x63\x36\x1c\x8\x0\x0" ), // Font no. 1 FontEntry("ATHENA", 12, 12, "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x70\x80\xf\xf8\x80\xf\xf8\x0\x7\x70\x0\x0\x0\x0\x7\x70\x0\x0\xdc\xc1\x1d\x10\x1\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xe0\x38\x8e\xf3\x7f\x8e\xe3\x38\x8e" "\xe3\x38\xff\xe7\x38\x8e\x3\x0\x50\x0\x5\xfe\x73\x5\x57\xe0\x3f\x50\x7\x75\xfe\x3\x5\x50\x0\x0\x0\x0\x1c\xc7\x71\xe\xe0\x0\x7\x70\x80\x3\x38\xc7\x71\x1c\x0\x0\xfe\x70\x18\x87\xf1\xc\x7e\xc0\x3\x76\x32\x3e\xc3\x71\x3c\x7e\x7\x0\x70\x0" "\x7\x40\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xf0\x80\x3\x38\x80\x3\x38\x80\x3\x38\x80\x3\x38\x80\x3\xf0\x0\x0\x78\x0\xe\xe0\x0\xe\xe0\x0\xe\xe0\x0\xe\xe0\x0\xe\x78\x0\x0\x0\x0\x2\x70\x80\xf\xff\xe7\x3f\xfc\xc1\x1f" "\x8e\x33\x60\x0\x0\x0\x0\x0\x7\x70\x0\x7\x70\xf0\x7f\x70\x0\x7\x70\x0\x7\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x7\x70\x0\x4\x0\x0\x0\x0\x0\x0\x0\xf0\x7f\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x7\x70\x0\x0\x0\x0\x1c\xc0\x1\xe\xe0\x0\x7\x70\x80\x3\x38\xc0\x1\x1c\x0\x0\xfe\x73\x70\x7\x77\x70\x7\x77\x70\x7\x77\x70\x7\x77\x70\xfe\x3\x0\x70\x80\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\x70\x0" "\x7\xfe\x3\x0\xfe\x73\x70\x7\x7\x38\xc0\x1\xe\x70\x80\x3\x1c\xe0\x0\xff\x7\x0\xfe\x73\x70\x7\x7\x70\xe0\x3\x70\x0\x7\x70\x7\x77\x70\xfe\x3\x0\x7\x77\x70\x7\x77\x70\xfe\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\x0\xff\x77\x0\x7\x70\x0" "\xff\x3\x70\x0\x7\x70\x7\x77\x70\xfe\x3\x0\xfe\x73\x0\x7\x70\x0\xff\x73\x70\x7\x77\x70\x7\x77\x70\xfe\x3\x0\xff\x7\x70\x0\x7\x38\x80\x3\x7f\xc0\x1\xe\xe0\x0\x7\x70\x0\x0\xfe\x73\x70\x7\x77\x70\xfe\x73\x70\x7\x77\x70\x7\x77\x70\xfe" "\x3\x0\xfe\x73\x70\x7\x77\x70\x7\x77\x70\xfe\x7\x70\x0\x7\x70\xfe\x3\x0\x0\x0\x0\x0\x0\x0\x0\x0\x7\x70\x0\x0\x0\x0\x7\x70\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x7\x70\x0\x0\x0\x0\x7\x70\x0\x4\x0\x0\x0\xc0\x1\xe\x70\x80" "\x3\x1c\x80\x3\x70\x0\xe\xc0\x1\x0\x0\x0\x0\x0\xe0\x3f\x0\x0\x0\x0\xe0\x3f\x0\x0\x0\x0\x0\x0\x0\x0\x0\x1c\x80\x3\x70\x0\xe\xc0\x1\xe\x70\x80\x3\x1c\x0\x0\xfe\x73\x70\x0\x7\x70\x0\x7\x3e\x70\x0\x7\x0\x0\x7\x70\x0\x0" "\xfc\xe1\x38\x67\x77\x7b\x37\x77\x73\x37\x77\x73\xe7\xe3\x0\xfc\x1\x0\xfe\x73\x70\x7\x77\x70\xff\x77\x70\x7\x77\x70\x7\x77\x70\x7\x7\x0\xff\x73\x70\x7\x77\x70\xff\x73\x70\x7\x77\x70\x7\x77\x70\xff\x3\x0\xfe\x73\x70\x7\x70\x0\x7\x70\x0\x7" "\x70\x0\x7\x70\x70\xfe\x3\x0\xff\x71\x38\x7\x77\x70\x7\x77\x70\x7\x77\x70\x7\x77\x38\xff\x1\x0\xff\x77\x0\x7\x70\x0\x7f\x70\x0\x7\x70\x0\x7\x70\x0\xff\x7\x0\xff\x77\x0\x7\x70\x0\x7f\x70\x0\x7\x70\x0\x7\x70\x0\x7\x0\x0\xfe\x73" "\x70\x7\x70\x0\xc7\x77\x70\x7\x77\x70\x7\x77\x70\xfe\x3\x0\x7\x77\x70\x7\x77\x70\xff\x77\x70\x7\x77\x70\x7\x77\x70\x7\x7\x0\xff\x7\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\xff\x7\x0\xfe\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\x70" "\x0\x77\x70\xfe\x3\x0\x7\x77\x70\x7\x77\x38\xff\x71\x38\x7\x77\x70\x7\x77\x70\x7\x7\x0\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\x70\x0\xff\x7\x0\x3\x76\x70\x8f\xf7\x7d\xff\x77\x77\x27\x77\x70\x7\x77\x70\x7\x7\x0\x3\x77\x70\xf" "\xf7\x71\x3f\x77\x77\xe7\x77\x7c\x87\x77\x70\x7\x6\x0\xfe\x73\x70\x7\x77\x70\x7\x77\x70\x7\x77\x70\x7\x77\x70\xfe\x3\x0\xff\x73\x70\x7\x77\x70\xff\x73\x0\x7\x70\x0\x7\x70\x0\x7\x0\x0\xfe\x73\x70\x7\x77\x70\x7\x77\x70\x7\x77\x76\xe7\x77" "\x7c\xbe\x3\x30\xff\x73\x70\x7\x77\x70\xff\x73\x70\x7\x77\x70\x7\x77\x70\x7\x7\x0\xfe\x73\x70\x7\x70\x0\xfe\x3\x70\x0\x7\x70\x0\x77\x70\xfe\x3\x0\xff\x7\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\x70\x0\x0\x7\x77\x70\x7\x77\x70" "\x7\x77\x70\x7\x77\x70\x7\x77\x70\xfe\x3\x0\x7\x77\x70\x7\x77\x70\x7\x77\x70\x7\x77\x70\x8e\xc3\x1d\xf8\x0\x0\x7\x77\x70\x7\x77\x70\x27\x77\x77\xff\xf7\x7d\x8f\x77\x70\x3\x6\x0\x7\x77\x70\x7\xe7\x38\xfc\xe1\x38\x7\x77\x70\x7\x77\x70\x7" "\x7\x0\x7\x77\x70\x7\x77\x70\xfe\x7\x70\x0\x7\x70\x0\x7\x70\xfc\x3\x0\xff\x7\x70\x80\x3\x1c\xe0\x0\x7\x38\xc0\x1\xe\x70\x0\xff\x7\x0\xf8\x80\x3\x38\x80\x3\x38\x80\x3\x38\x80\x3\x38\x80\x3\xf8\x0\x0\x0\xc0\x1\x1c\x80\x3\x38\x0" "\x7\x70\x0\xe\xe0\x0\x1c\xc0\x1\x0\xf8\x0\xe\xe0\x0\xe\xe0\x0\xe\xe0\x0\xe\xe0\x0\xe\xf8\x0\x0\x20\x0\x7\xf8\xc0\x1d\x8e\x3\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xff\x7\x0" "\x70\x0\x7\x40\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xe0\x3f\x0\x7\x70\xfe\x77\x70\x7\x77\x70\xfe\x7\x0\x7\x70\x0\x7\xf0\x3f\x7\x77\x70\x7\x77\x70\x7\x77\x70\xff\x3\x0\x0\x0\x0\x0\xe0\x3f\x7\x77\x0\x7" "\x70\x0\x7\x70\x70\xfe\x3\x0\x0\x7\x70\x0\xe7\x7f\x7\x77\x70\x7\x77\x70\x7\x77\x70\xfe\x7\x0\x0\x0\x0\x0\xe0\x3f\x7\x77\x70\xff\x77\x0\x7\x70\x70\xfe\x3\x0\xe0\x3\x7\x70\x0\x7\x70\xe0\x3f\x70\x0\x7\x70\x0\x7\x70\x0\x0\x0\x0" "\x0\x0\xe0\x3f\x7\x77\x70\xfe\x7\x70\x0\x77\x70\xfe\x3\x0\x7\x70\x0\x7\xf0\x3f\x7\x77\x70\x7\x77\x70\x7\x77\x70\x7\x7\x0\x0\x0\x7\x0\xe0\x3f\x70\x0\x7\x70\x0\x7\x70\x0\x7\xfe\x3\x0\x0\x0\x70\x0\x0\x70\x0\x7\x70\x0\x7\x70" "\x0\x77\x70\xfe\x3\x0\x7\x70\x0\x7\x77\x70\x7\x77\x38\xff\x71\x38\x7\x77\x70\x7\x7\x0\x0\x80\x3\x38\x80\x3\x38\x80\x3\x38\x80\x3\x38\x80\x3\xf0\x1\x0\x0\x0\x0\x0\xe0\x3f\x27\x77\x72\x27\x77\x72\x7\x77\x70\x7\x7\x0\x0\x0\x0\x0" "\xe0\x3f\x7\x77\x70\x7\x77\x70\x7\x77\x70\x7\x7\x0\x0\x0\x0\x0\xe0\x3f\x7\x77\x70\x7\x77\x70\x7\x77\x70\xfe\x3\x0\x0\x0\x0\x0\xf0\x3f\x7\x77\x70\x7\x77\x70\x7\xf7\x3f\x7\x70\x0\x0\x0\x0\x0\xe0\x7f\x7\x77\x70\x7\x77\x70\x7\xe7" "\x7f\x0\x7\x70\x0\x0\x0\x0\xe0\x3f\x7\x77\x0\x7\x70\x0\x7\x70\x0\x7\x0\x0\x0\x0\x0\x0\xe0\x3f\x7\x70\x0\xfe\x1\x70\x0\x7\x70\xfe\x3\x0\x0\x70\x0\x7\x70\x0\x7\xf0\x3\x7\x70\x0\x7\x77\x70\xfe\x3\x0\x0\x0\x0\x0\x70\x70" "\x7\x77\x70\x7\x77\x70\x7\x77\x70\xfe\x3\x0\x0\x0\x0\x0\x70\x70\x7\x77\x70\x7\x77\x70\x8e\xc3\x1d\xf8\x0\x0\x0\x0\x0\x0\x70\x70\x7\x77\x70\x27\x77\x72\x27\x77\x72\xfe\x3\x0\x0\x0\x0\x0\x70\x70\x7\x77\x70\xfe\x73\x70\x7\x77\x70\x7" "\x7\x0\x0\x0\x0\x0\x70\x70\x7\x77\x70\xfe\x7\x70\x0\x77\x70\xfe\x3\x0\x0\x0\x0\x0\xf0\x7f\xc0\x3\x1e\xf0\x80\x7\x3c\xe0\x1\xff\x7\x0\xf0\x80\x3\x38\x80\x3\x70\xc0\xf\x70\x80\x3\x38\x80\x3\xf0\x0\x0\x70\x0\x7\x70\x0\x7\x70\x0" "\x7\x70\x0\x7\x70\x0\x7\x70\x0\x0\x78\x0\xe\xe0\x0\xe\x70\x80\x1f\x70\x0\xe\xe0\x0\xe\x78\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xf0\xff\xff\xf\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xf0\xff\x7\x70\x0\x7\x70\x0\xff\xf" "\x0\x0\x0\x0\x0\x0\x0\x0\xf0\xff\x0\x0\x0\x0\x0\x0\xff\xf\x0\x0\x0\x0\x0\x0\x0\x0\xf0\xff\x0\xe\xe0\x0\xe\xe0\xff\xf\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xc0\x1f\xf8\x80\xf\x70\x0\x7\x20\x0\x2\x0\x0\x0\x0\x0\x0\x20\x0\x2\x70\x0\x7\xf8\x80\xf\xfc\x1\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" ), // Font no. 2 FontEntry("ATHENA_SPACED", 12, 12, "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x70\x80\xf\xf8\x80\xf\xf8\x0\x7\x70\x0\x0\x70\x0\x7\x0\x0\x0\xdc\xc1\x1d\x10\x1\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xe0\x38\x8e\xf3\x7f\x8e\xe3\x38\x8e" "\xf3\x7f\x8e\xe3\x38\x0\x0\x0\x50\x0\x5\xfe\x73\x5\xfe\x3\x75\x50\xe7\x3f\x50\x0\x5\x0\x0\x0\x0\x0\x0\xe7\x70\xe\x70\x0\x7\x38\x80\x3\x1c\xc7\x71\x0\x0\x0\xfe\x70\x18\xcf\xe0\x7\x3c\x60\x27\xe3\x33\x1c\xc7\xe3\x77\x0\x0\x0\x70\x0" "\x7\x40\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xf0\x80\x3\x38\x80\x3\x38\x80\x3\x38\x80\x3\x38\x0\xf\x0\x0\x0\x78\x0\xe\xe0\x0\xe\xe0\x0\xe\xe0\x0\xe\xe0\x80\x7\x0\x0\x0\x0\x0\x2\x70\x80\xf\xff\xe7\x3f\xfc\xc1\x1f" "\x8e\x33\x60\x0\x0\x0\x0\x0\x0\x70\x0\x7\x70\xf0\x7f\x70\x0\x7\x70\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x70\x0\x7\x40\x0\x0\x0\x0\x0\x0\x0\x0\x0\xf0\x7f\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x70\x0\x7\x0\x0\x0\xc0\x1\x1c\xe0\x0\xe\x70\x0\x7\x38\x80\x3\x1c\xc0\x1\x0\x0\x0\xfe\x73\x70\x7\x77\x70\x7\x77\x70\x7\x77\x70\x7\xe7\x3f\x0\x0\x0\x70\x80\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\x70\xe0" "\x3f\x0\x0\x0\xfe\x73\x70\x87\x3\x1c\xe0\x0\x7\x38\xc0\x1\xe\xf0\x7f\x0\x0\x0\xfe\x73\x70\x7\x7\x70\xe0\x3\x70\x0\x77\x70\x7\xe7\x3f\x0\x0\x0\x7\x77\x70\x7\x77\x70\xfe\x7\x70\x0\x7\x70\x0\x7\x70\x0\x0\x0\xff\x77\x0\x7\x70\x0" "\xff\x3\x70\x0\x77\x70\x7\xe7\x3f\x0\x0\x0\xfe\x73\x0\x7\x70\x0\xff\x73\x70\x7\x77\x70\x7\xe7\x3f\x0\x0\x0\xff\x7\x70\x0\x7\x38\x80\x3\x7f\xc0\x1\xe\xe0\x0\x7\x0\x0\x0\xfe\x73\x70\x7\x77\x70\xfe\x73\x70\x7\x77\x70\x7\xe7\x3f\x0" "\x0\x0\xfe\x73\x70\x7\x77\x70\x7\xe7\x7f\x0\x7\x70\x0\xe7\x3f\x0\x0\x0\x0\x0\x0\x0\x0\x0\x70\x0\x7\x0\x0\x0\x70\x0\x7\x0\x0\x0\x0\x0\x0\x0\x0\x0\x70\x0\x7\x0\x0\x0\x70\x0\x7\x40\x0\x0\x0\x0\x1c\xe0\x0\x7\x38\xc0" "\x1\x38\x0\x7\xe0\x0\x1c\x0\x0\x0\x0\x0\x0\x0\xe0\x3f\x0\x0\x0\x0\xe0\x3f\x0\x0\x0\x0\x0\x0\x0\xc0\x1\x38\x0\x7\xe0\x0\x1c\xe0\x0\x7\x38\xc0\x1\x0\x0\x0\xfe\x73\x70\x0\x7\x70\xe0\x3\x7\x70\x0\x0\x70\x0\x7\x0\x0\x0" "\xfc\xe1\x38\x67\x77\x7b\x37\x77\x73\x37\x77\x3e\xe\xc0\x1f\x0\x0\x0\xfe\x73\x70\x7\x77\x70\xff\x77\x70\x7\x77\x70\x7\x77\x70\x0\x0\x0\xff\x73\x70\x7\x77\x70\xff\x73\x70\x7\x77\x70\x7\xf7\x3f\x0\x0\x0\xfe\x73\x70\x7\x70\x0\x7\x70\x0\x7" "\x70\x0\x7\xe7\x3f\x0\x0\x0\xff\x71\x38\x7\x77\x70\x7\x77\x70\x7\x77\x70\x87\xf3\x1f\x0\x0\x0\xff\x77\x0\x7\x70\x0\x7f\x70\x0\x7\x70\x0\x7\xf0\x7f\x0\x0\x0\xff\x77\x0\x7\x70\x0\x7f\x70\x0\x7\x70\x0\x7\x70\x0\x0\x0\x0\xfe\x73" "\x70\x7\x70\x0\xc7\x77\x70\x7\x77\x70\x7\xe7\x3f\x0\x0\x0\x7\x77\x70\x7\x77\x70\xff\x77\x70\x7\x77\x70\x7\x77\x70\x0\x0\x0\xff\x7\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\x70\xf0\x7f\x0\x0\x0\xfe\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\x70" "\x7\xe7\x3f\x0\x0\x0\x7\x77\x70\x7\x77\x38\xff\x71\x38\x7\x77\x70\x7\x77\x70\x0\x0\x0\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\xf0\x7f\x0\x0\x0\x3\x76\x70\x8f\xf7\x7d\xff\x77\x77\x27\x77\x70\x7\x77\x70\x0\x0\x0\x3\x77\x70\xf" "\xf7\x71\x3f\x77\x77\xe7\x77\x7c\x87\x77\x70\x0\x0\x0\xfe\x73\x70\x7\x77\x70\x7\x77\x70\x7\x77\x70\x7\xe7\x3f\x0\x0\x0\xff\x73\x70\x7\x77\x70\xff\x73\x0\x7\x70\x0\x7\x70\x0\x0\x0\x0\xfe\x73\x70\x7\x77\x70\x7\x77\x70\x67\x77\x7e\xc7\xe7" "\x3b\x0\x3\x0\xff\x73\x70\x7\x77\x70\xff\x73\x70\x7\x77\x70\x7\x77\x70\x0\x0\x0\xfe\x73\x70\x7\x70\x0\xfe\x3\x70\x0\x7\x70\x7\xe7\x3f\x0\x0\x0\xff\x7\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\x0\x0\x0\x7\x77\x70\x7\x77\x70" "\x7\x77\x70\x7\x77\x70\x7\xe7\x3f\x0\x0\x0\x7\x77\x70\x7\x77\x70\x7\x77\x70\x7\x77\x70\x8e\xc3\x1d\xf8\x0\x0\x7\x77\x70\x7\x77\x72\x77\xf7\x7f\xdf\xf7\x78\x7\x37\x60\x0\x0\x0\x7\x77\x70\x7\xe7\x38\xfc\xe1\x38\x7\x77\x70\x7\x77\x70\x0" "\x0\x0\x7\x77\x70\x7\x77\x70\xfe\x7\x70\x0\x7\x70\x0\xc7\x3f\x0\x0\x0\xff\x7\x70\x80\x3\x1c\xe0\x0\x7\x38\xc0\x1\xe\xf0\x7f\x0\x0\x0\xf8\x80\x3\x38\x80\x3\x38\x80\x3\x38\x80\x3\x38\x80\xf\x0\x0\x0\x1c\xc0\x1\x38\x80\x3\x70\x0" "\x7\xe0\x0\xe\xc0\x1\x1c\x0\x0\x0\xf8\x0\xe\xe0\x0\xe\xe0\x0\xe\xe0\x0\xe\xe0\x80\xf\x0\x0\x0\x20\x0\x7\xf8\xc0\x1d\x8e\x3\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xf0\x7f\x0\x0\x0" "\x70\x0\x7\x40\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xfe\x3\x70\x0\xe7\x7f\x7\x77\x70\x7\xe7\x7f\x0\x0\x0\x7\x70\x0\xff\x73\x70\x7\x77\x70\x7\x77\x70\x7\xf7\x3f\x0\x0\x0\x0\x0\x0\xfe\x73\x70\x7\x70\x0\x7" "\x70\x0\x7\xe7\x3f\x0\x0\x0\x0\x7\x70\xfe\x77\x70\x7\x77\x70\x7\x77\x70\x7\xe7\x7f\x0\x0\x0\x0\x0\x0\xfe\x73\x70\x7\xf7\x7f\x7\x70\x0\x7\xe7\x3f\x0\x0\x0\xe0\x3\x7\x70\x0\x7\xfe\x3\x7\x70\x0\x7\x70\x0\x7\x0\x0\x0\x0\x0" "\x0\xfe\x73\x70\x7\xe7\x7f\x0\x7\x70\x7\xe7\x3f\x0\x0\x0\x7\x70\x0\xff\x73\x70\x7\x77\x70\x7\x77\x70\x7\x77\x70\x0\x0\x0\x70\x0\x0\xfe\x3\x7\x70\x0\x7\x70\x0\x7\x70\xe0\x3f\x0\x0\x0\x0\x7\x0\x0\x7\x70\x0\x7\x70\x0\x7\x70" "\x7\xe7\x3f\x0\x0\x0\x7\x70\x70\x7\x77\x70\x87\xf3\x1f\x87\x73\x70\x7\x77\x70\x0\x0\x0\x38\x80\x3\x38\x80\x3\x38\x80\x3\x38\x80\x3\x38\x0\x1f\x0\x0\x0\x0\x0\x0\xfe\x73\x72\x27\x77\x72\x27\x77\x70\x7\x77\x70\x0\x0\x0\x0\x0\x0\xfe" "\x73\x70\x7\x77\x70\x7\x77\x70\x7\x77\x70\x0\x0\x0\x0\x0\x0\xfe\x73\x70\x7\x77\x70\x7\x77\x70\x7\xe7\x3f\x0\x0\x0\x0\x0\x0\xff\x73\x70\x7\x77\x70\x7\x77\x70\xff\x73\x0\x7\x0\x0\x0\x0\x0\xfe\x77\x70\x7\x77\x70\x7\x77\x70\xfe\x7" "\x70\x0\x7\x0\x0\x0\x0\xfe\x73\x70\x7\x70\x0\x7\x70\x0\x7\x70\x0\x0\x0\x0\x0\x0\x0\xfe\x73\x0\x7\xe0\x1f\x0\x7\x70\x0\xe7\x3f\x0\x0\x0\x0\x70\x0\x7\x70\x0\x3f\x70\x0\x7\x70\x70\x7\xe7\x3f\x0\x0\x0\x0\x0\x0\x7\x77\x70" "\x7\x77\x70\x7\x77\x70\x7\xe7\x3f\x0\x0\x0\x0\x0\x0\x7\x77\x70\x7\x77\x70\x7\xe7\x38\xdc\x81\xf\x0\x0\x0\x0\x0\x0\x7\x77\x70\x7\x77\x72\x27\x77\x72\x27\xe7\x3f\x0\x0\x0\x0\x0\x0\x7\x77\x70\x7\xe7\x3f\x7\x77\x70\x7\x77\x70\x0" "\x0\x0\x0\x0\x0\x7\x77\x70\x7\xe7\x7f\x0\x7\x70\x7\xe7\x3f\x0\x0\x0\x0\x0\x0\xff\x7\x3c\xe0\x1\xf\x78\xc0\x3\x1e\xf0\x7f\x0\x0\x0\xf0\x80\x3\x38\x0\x7\xfc\x0\x7\x38\x80\x3\x38\x0\xf\x0\x0\x0\x70\x0\x7\x70\x0\x7\x70\x0" "\x7\x70\x0\x7\x70\x0\x7\x0\x0\x0\x78\x0\xe\xe0\x0\x7\xf8\x1\x7\xe0\x0\xe\xe0\x80\x7\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xf0\xff\xff\xf\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xf0\xff\x7\x70\x0\x7\x70\x0\xff\xf" "\x0\x0\x0\x0\x0\x0\x0\x0\xf0\xff\x0\x0\x0\x0\x0\x0\xff\xf\x0\x0\x0\x0\x0\x0\x0\x0\xf0\xff\x0\xe\xe0\x0\xe\xe0\xff\xf\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xc0\x1f\xf8\x80\xf\x70\x0\x7\x20\x0\x2\x0\x0\x0\x0\x0\x0\x20\x0\x2\x70\x0\x7\xf8\x80\xf\xfc\x1\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" ), // Font no. 3 FontEntry("DISORDERTRACKER2", 8, 8, "\x0\x0\x0\x0\x0\x0\x0\x0\x57\x51\x73\x54\x57\x0\x0\x0\x77\x21\x23\x21\x21\x0\x0\x0\x0\x0\x0\x0\x18\x0\x0\x0\xec\x4a\x42\x4a\x4e\x0\x0\x0\x13\x15\x13\x15\x75\x0\x0\x0\x3c\x42\x99\x85\x99\x42\x3c\x0\x20\x50\x70\x50\x50\x0\x0\x0" "\x71\x21\x21\x21\x27\x0\x0\x0\xf3\x1b\x7b\xdb\xdb\xdb\x73\x0\xf\xf\xf\xf\xf\xf\xf\xf\x0\x0\x0\xff\x0\x0\x0\x0\x18\x3c\x7e\x18\x18\x18\x18\x0\x18\x18\x18\x18\x7e\x3c\x18\x0\xfe\xc6\xfe\xc6\xc6\xe6\x67\x3\x0\x0\x0\x80\x41\x22\x14\x8" "\x0\x0\xf8\x8\x3e\x1c\x8\x0\xf\x7\xf\x5d\x78\x70\x78\x0\x18\x3c\x7e\x18\x18\x7e\x3c\x18\x66\x66\x66\x66\x66\x0\x66\x0\xfe\xdb\xdb\xde\xd8\xd8\xd8\x0\x7c\xc6\x1c\x36\x36\x1c\x61\x3f\x0\x0\x0\x0\x7e\x7e\x7e\x0\x18\x3c\x7e\x18\x7e\x3c\x18\xff" "\x18\x3c\x7e\x18\x18\x18\x18\x0\x18\x18\x18\x18\x7e\x3c\x18\x0\x0\x18\x30\x7f\x30\x18\x0\x0\x0\xc\x6\x7f\x6\xc\x0\x0\x0\x0\x3\x3\x3\x7f\x0\x0\x0\x24\x66\xff\x66\x24\x0\x0\x0\x0\x18\x3c\x3c\x18\x0\x0\x0\xff\xff\x7e\x3c\x18\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x18\x18\x18\x18\x18\x0\x18\x0\x36\x36\x36\x0\x0\x0\x0\x0\x0\x36\x7f\x36\x36\x7f\x36\x0\x8\x7e\xb\x3e\x68\x6b\x3e\x8\x0\x63\x33\x18\xc\x66\x63\x0\x1c\x36\x1c\x6e\x3b\x33\x6e\x0\xc\xc\x6\x0\x0\x0\x0\x0" "\xc\x6\x6\x6\x6\x6\xc\x0\x18\x30\x30\x30\x30\x30\x18\x0\x8\x2a\x1c\x7f\x1c\x2a\x8\x0\x0\x18\x18\x7e\x18\x18\x0\x0\x0\x0\x0\x0\x0\x18\x18\xc\x0\x0\x0\x7e\x0\x0\x0\x0\x0\x0\x0\x0\x0\x18\x18\x0\x60\x30\x18\xc\x6\x3\x1\x0" "\x3e\x63\x63\x6b\x63\x63\x3e\x0\x18\x1c\x18\x18\x18\x18\x3c\x0\x3e\x63\x60\x38\xe\x3\x7f\x0\x3e\x63\x60\x3c\x60\x63\x3e\x0\x63\x63\x63\x7e\x60\x60\x60\x0\x7f\x3\x3\x3f\x60\x63\x3e\x0\x3e\x3\x3\x3f\x63\x63\x3e\x0\x7f\x60\x30\x18\x18\x18\x18\x0" "\x3e\x63\x63\x3e\x63\x63\x3e\x0\x3e\x63\x63\x7e\x60\x63\x3e\x0\x0\x18\x18\x0\x0\x18\x18\x0\x0\x18\x18\x0\x0\x18\x18\xc\x18\xc\x6\x3\x6\xc\x18\x0\x0\x0\x7e\x0\x7e\x0\x0\x0\x6\xc\x18\x30\x18\xc\x6\x0\x3e\x63\x30\x18\x18\x0\x18\x0" "\x3e\x63\x7b\x7b\x3b\x3\x3e\x0\x3e\x63\x63\x7f\x63\x63\x63\x0\x3f\x63\x63\x3f\x63\x63\x3f\x0\x3e\x63\x3\x3\x3\x63\x3e\x0\x1f\x33\x63\x63\x63\x63\x3f\x0\x7f\x3\x3\x1f\x3\x3\x7f\x0\x7f\x3\x3\x1f\x3\x3\x3\x0\x7e\x3\x3\x7b\x63\x63\x3e\x0" "\x63\x63\x63\x7f\x63\x63\x63\x0\x1e\xc\xc\xc\xc\xc\x1e\x0\x7c\x60\x60\x60\x60\x63\x3e\x0\x63\x63\x3f\x33\x63\x63\x63\x0\x3\x3\x3\x3\x3\x3\x7f\x0\x63\x77\x7f\x6b\x63\x63\x63\x0\x63\x67\x6f\x7b\x73\x63\x63\x0\x3e\x63\x63\x63\x63\x63\x3e\x0" "\x3f\x63\x63\x3f\x3\x3\x3\x0\x3e\x63\x63\x63\x63\x7b\x3e\x60\x3f\x63\x63\x3f\x63\x63\x63\x0\x3e\x63\x3\x3e\x60\x63\x3e\x0\x3f\xc\xc\xc\xc\xc\xc\x0\x63\x63\x63\x63\x63\x63\x3e\x0\x63\x63\x63\x63\x63\x36\x1c\x0\x63\x63\x63\x6b\x7f\x77\x63\x0" "\x63\x63\x36\x1c\x36\x63\x63\x0\x63\x63\x63\x7e\x60\x63\x3e\x0\x7f\x30\x18\xc\x6\x3\x7f\x0\x1e\x6\x6\x6\x6\x6\x1e\x0\x3\x6\xc\x18\x30\x60\x40\x0\x1e\x18\x18\x18\x18\x18\x1e\x0\x8\x1c\x36\x63\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xff" "\xc\xc\x18\x0\x0\x0\x0\x0\x0\x0\x3e\x60\x7c\x66\x7c\x0\x6\x6\x3e\x66\x66\x66\x3e\x0\x0\x0\x3c\x66\x6\x66\x3c\x0\x60\x60\x7c\x66\x66\x66\x7c\x0\x0\x0\x3c\x66\x7e\x6\x3c\x0\x0\x3c\x66\x6\x1e\x6\x6\x0\x0\x0\x7c\x66\x66\x7c\x60\x3e" "\x6\x6\x3e\x66\x66\x66\x66\x0\x18\x0\x18\x18\x18\x18\x18\x0\x30\x0\x30\x30\x30\x30\x33\x1e\x6\x6\x66\x36\x1e\x36\x66\x0\x18\x18\x18\x18\x18\x18\x18\x0\x0\x0\x3e\x6b\x6b\x6b\x63\x0\x0\x0\x3c\x66\x66\x66\x66\x0\x0\x0\x3c\x66\x66\x66\x3c\x0" "\x0\x0\x3e\x66\x66\x3e\x6\x6\x0\x0\x7c\x66\x66\x7c\x60\x60\x0\x0\x3e\x66\x6\x6\x6\x0\x0\x0\x7c\x6\x3c\x60\x3e\x0\x6\x6\x3e\x6\x6\x66\x3c\x0\x0\x0\x66\x66\x66\x66\x3c\x0\x0\x0\x66\x66\x66\x3c\x18\x0\x0\x0\x63\x63\x6b\x6b\x3e\x0" "\x0\x0\x66\x66\x3c\x66\x66\x0\x0\x0\x66\x66\x66\x7c\x60\x3e\x0\x0\x7e\x30\x18\xc\x7e\x0\x38\xc\xc\x7\xc\xc\x38\x0\x18\x18\x18\x0\x18\x18\x18\x0\x7\xc\xc\x38\xc\xc\x7\x0\x6e\x3b\x0\x0\x0\x0\x0\x0\x0\x8\x1c\x36\x63\x63\x7f\x0" "\x3e\x63\x3\x63\x3e\x30\x60\x3e\x0\x33\x0\x33\x33\x33\x6e\x0\x38\x0\x1e\x33\x3f\x3\x1e\x0\x7e\x81\x3c\x60\x7c\x66\xdc\x0\x33\x0\x1e\x30\x3e\x33\x6e\x0\x7\x0\x1e\x30\x3e\x33\x6e\x0\xc\xc\x1e\x30\x3e\x33\x6e\x0\x0\x0\x3e\x63\x3\x1e\x30\x1c" "\x7e\x81\x3c\x66\x7e\x6\x3c\x0\x33\x0\x1e\x33\x3f\x3\x1e\x0\x7\x0\x1e\x33\x3f\x3\x1e\x0\x33\x0\xe\xc\xc\xc\x1e\x0\x3e\x41\x1c\x18\x18\x18\x3c\x0\x7\x0\xe\xc\xc\xc\x1e\x0\x63\x8\x3e\x63\x7f\x63\x63\x0\xc\xc\x0\x1e\x33\x3f\x33\x0" "\x38\x0\x3f\x6\x1e\x6\x3f\x0\x0\x0\xfe\x30\xfe\x33\xfe\x0\x7c\x36\x33\x7f\x33\x33\x73\x0\x1e\x21\x0\x1e\x33\x33\x1e\x0\x0\x33\x0\x1e\x33\x33\x1e\x0\x0\x7\x0\x1e\x33\x33\x1e\x0\x1e\x21\x0\x33\x33\x33\x6e\x0\x0\x7\x0\x33\x33\x33\x6e\x0" "\x0\x33\x0\x33\x33\x3e\x30\x1f\xc3\x18\x3c\x66\x66\x3c\x18\x0\x33\x0\x33\x33\x33\x33\x1e\x0\x18\x18\x7e\x3\x3\x7e\x18\x18\x1c\x36\x26\xf\x6\x67\x3f\x0\x33\x33\x1e\xc\x3f\xc\x3f\xc\x1f\x33\x33\x5f\x63\xf3\x63\xc3\x70\xd8\x18\x3c\x18\x18\x1b\xe" "\x38\x0\x1e\x30\x3e\x33\x6e\x0\x1c\x0\xe\xc\xc\xc\x1e\x0\x0\x38\x0\x1e\x33\x33\x1e\x0\x0\x38\x0\x33\x33\x33\x6e\x0\x0\x1f\x0\x1d\x33\x33\x33\x0\x3f\x0\x33\x37\x3f\x3b\x33\x0\x3c\x36\x36\x7c\x0\x7e\x0\x0\x1c\x36\x36\x1c\x0\x3e\x0\x0" "\x18\x0\x18\x18\xc\x66\x3c\x0\x0\x0\x0\x3f\x3\x3\x0\x0\x0\x0\x0\x3f\x30\x30\x0\x0\x63\x33\x1b\x6c\xd6\x43\x21\xf0\xc3\x63\x33\xdb\xec\xb6\xf3\xc0\x18\x0\x18\x18\x3c\x3c\x18\x0\x0\xcc\x66\x33\x66\xcc\x0\x0\x0\x33\x66\xcc\x66\x33\x0\x0" "\x44\x11\x44\x11\x44\x11\x44\x11\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xbb\xee\xbb\xee\xbb\xee\xbb\xee\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x1f\x18\x18\x18\x18\x18\x1f\x18\x1f\x18\x18\x18\x6c\x6c\x6c\x6c\x6f\x6c\x6c\x6c\x0\x0\x0\x0\x7f\x6c\x6c\x6c" "\x0\x0\x1f\x18\x1f\x18\x18\x18\x6c\x6c\x6f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x0\x0\x7f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6f\x60\x7f\x0\x0\x0\x6c\x6c\x6c\x6c\x7f\x0\x0\x0\x18\x18\x1f\x18\x1f\x0\x0\x0\x0\x0\x0\x0\x1f\x18\x18\x18" "\x18\x18\x18\x18\xf8\x0\x0\x0\x18\x18\x18\x18\xff\x0\x0\x0\x0\x0\x0\x0\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\x18\x18\x0\x0\x0\x0\xff\x0\x0\x0\x18\x18\x18\x18\xff\x18\x18\x18\x18\x18\xf8\x18\xf8\x18\x18\x18\x6c\x6c\x6c\x6c\xec\x6c\x6c\x6c" "\x6c\x6c\xec\xc\xfc\x0\x0\x0\x0\x0\xfc\xc\xec\x6c\x6c\x6c\x6c\x6c\xef\x0\xff\x0\x0\x0\x0\x0\xff\x0\xef\x6c\x6c\x6c\x6c\x6c\xec\xc\xec\x6c\x6c\x6c\x0\x0\xff\x0\xff\x0\x0\x0\x6c\x6c\xef\x0\xef\x6c\x6c\x6c\x18\x18\xff\x0\xff\x0\x0\x0" "\x6c\x6c\x6c\x6c\xff\x0\x0\x0\x0\x0\xff\x0\xff\x18\x18\x18\x0\x0\x0\x0\xff\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xfc\x0\x0\x0\x18\x18\xf8\x18\xf8\x0\x0\x0\x0\x0\xf8\x18\xf8\x18\x18\x18\x0\x0\x0\x0\xfc\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xff\x6c\x6c\x6c" "\x18\x18\xff\x18\xff\x18\x18\x18\x18\x18\x18\x18\x1f\x0\x0\x0\x0\x0\x0\x0\xf8\x18\x18\x18\xff\xff\xff\xff\xff\xff\xff\xff\x0\x0\x0\x0\xff\xff\xff\xff\xf\xf\xf\xf\xf\xf\xf\xf\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xff\xff\xff\xff\x0\x0\x0\x0" "\x0\x0\x6e\x3b\x13\x3b\x6e\x0\x0\x1e\x33\x1f\x33\x1f\x3\x3\x0\x3f\x33\x3\x3\x3\x3\x0\x0\x0\x7f\x36\x36\x36\x36\x0\x3f\x33\x6\xc\x6\x33\x3f\x0\x0\x0\x7e\x1b\x1b\x1b\xe\x0\x0\x66\x66\x66\x66\x3e\x6\x3\x0\x6e\x3b\x18\x18\x18\x18\x0" "\x3f\xc\x1e\x33\x33\x1e\xc\x3f\x1c\x36\x63\x7f\x63\x36\x1c\x0\x1c\x36\x63\x63\x36\x36\x77\x0\x38\xc\x18\x3e\x33\x33\x1e\x0\x0\x0\x7e\xdb\xdb\x7e\x0\x0\x60\x30\x7e\xdb\xdb\x7e\x6\x3\x1c\x6\x3\x1f\x3\x6\x1c\x0\x0\x0\x0\x0\x0\xdb\xdb\x0" "\x0\x7e\x0\x7e\x0\x7e\x0\x0\x0\xf8\x8\x8\x8\x8\xf8\x0\x0\xff\x0\x0\x0\x0\xff\x0\x0\x1f\x10\x10\x10\x10\x1f\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x0\x2\x1\x0\x0\x0\x20\x30\x28\x24\x22\xa1\x60\x20\x0\x0\x0\x1\x2\x0\x0\x0" "\x20\x60\xa1\x22\x24\x28\x30\x20\x0\x0\x0\x40\x40\x40\x40\x7f\xff\x81\x81\x81\x81\x80\x80\x80\x0\x0\x0\x20\x20\x11\x11\xe\x38\x44\x44\x82\x82\x0\x0\x0\x0\x0\xfe\x7c\x38\x10\x0\x0\x0\x0\x10\x38\x7c\xfe\x0\x0\x80\xc1\x63\x36\x1c\x8\x0\x0" ), // Font no. 4 FontEntry("DX-FUTUR", 8, 8, "\x0\x0\x0\x0\x0\x0\x0\x0\x7e\x81\xa5\x81\xbd\x99\x81\x7e\x7e\xff\xdb\xff\xff\xc3\xe7\x7e\x0\x77\x7f\x7f\x3e\x1c\x8\x0\x8\x1c\x3e\x7f\x3e\x1c\x8\x0\x18\x3c\x18\xff\xff\x52\x18\x0\x8\x1c\x3e\x7f\x7f\x49\x1c\x0\x0\x0\x18\x3c\x18\x0\x0\x0" "\xff\xff\xe7\xc3\xe7\xff\xff\xff\x0\x3c\x42\x81\x81\x42\x3c\x0\xff\xc3\xbd\x7e\x7e\xbd\xc3\xff\xf8\xe0\xb0\x3e\x63\x63\x3e\x0\x0\x7e\xc3\xc3\x7e\x18\x7e\x18\x20\x60\xe0\x20\x20\x3f\x1f\x0\x30\x50\xb0\xd0\x9f\x8f\xf0\xf0\x81\xc2\xbc\xe4\xa4\xfc\xea\xff" "\x0\x0\x6\x1e\x7e\x1e\x6\x0\x0\x0\x60\x78\x7e\x78\x60\x0\x18\x7e\x18\x18\x18\x18\x7e\x18\x66\x66\x66\x66\x66\x0\x66\x0\xff\x6d\x6e\x6c\x6c\x6c\x6c\x0\x7e\x81\x3e\x42\x42\x7c\x81\x7e\x0\x0\x0\x7e\x7e\x0\x0\x0\x18\x7e\x18\x18\x7e\x18\x0\xff" "\x18\x7e\x18\x18\x18\x18\x18\x0\x18\x18\x18\x18\x18\x7e\x18\x0\x0\x20\x60\xff\x60\x20\x0\x0\x0\x4\x6\xff\x6\x4\x0\x0\x0\x0\x0\x3\x3\x3\xff\x0\x0\x24\x66\xff\x66\x24\x0\x0\x0\x0\x8\x1c\x3e\x7f\x0\x0\x0\x0\x0\x7f\x3e\x1c\x8\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\xc\xc\xc\xc\xc\x0\xc\x0\x14\x14\x0\x0\x0\x0\x0\x0\x0\x14\x3e\x14\x3e\x14\x0\x0\x3e\x4b\xb\x3e\x68\x6b\x3e\x8\xc7\x65\x37\x18\xec\xa6\xe3\x0\x3e\x63\x6\x73\x63\x63\x3e\x0\x30\x30\x18\x0\x0\x0\x0\x0" "\xc\x6\x6\x6\x6\x6\xc\x0\xc\x18\x18\x18\x18\x18\xc\x0\x0\x22\x14\x36\x14\x22\x0\x0\x0\x18\x18\x7e\x18\x18\x0\x0\x0\x0\x0\x0\x0\x18\x18\xc\x0\x0\x0\x7e\x0\x0\x0\x0\x0\x0\x0\x0\x0\x18\x18\x0\xc0\x60\x30\x18\xc\x6\x3\x0" "\x7e\x63\x73\x6b\x67\x63\x3f\x0\x1c\x18\x18\x18\x18\x18\x3c\x0\x3f\x60\x3e\x3\x3\x3\x7f\x0\x7f\x60\x38\x60\x60\x60\x3f\x0\x63\x63\x7f\x60\x60\x60\x60\x0\x7f\x3\x3f\x60\x60\x60\x3f\x0\x7e\x3\x7f\x63\x63\x63\x3f\x0\x7f\x60\x30\x18\x18\x18\x18\x0" "\x7e\x63\x3e\x63\x63\x63\x3f\x0\x3e\x63\x7e\x60\x60\x60\x60\x0\x0\x18\x18\x0\x0\x18\x18\x0\x0\x18\x18\x0\x0\x18\x18\xc\x0\x0\x38\xc\x6\xc\x38\x0\x0\x0\x0\x7e\x0\x7e\x0\x0\x0\x0\xe\x18\x30\x18\xe\x0\x7e\x63\x63\x38\x0\x18\x18\x0" "\x3e\x41\x5d\x55\x7d\x1\x3e\x0\x70\x78\x6c\x66\x63\x63\x6f\x0\x3f\x60\x3b\x63\x63\x63\x3f\x0\x7e\x0\x3\x3\x3\x3\x7e\x0\x1f\x30\x63\x63\x63\x63\x3f\x0\x7f\x0\xf\x3\x3\x3\x7f\x0\x7f\x0\xf\x3\x3\x3\x3\x0\x7e\x0\x7b\x63\x63\x63\x3e\x0" "\x63\x63\x7f\x63\x63\x63\x63\x0\x3c\x0\x18\x18\x18\x18\x3c\x0\x30\x30\x30\x30\x30\x30\x1f\x0\x43\x63\x33\x7b\x63\x63\x63\x0\x6\x6\x6\x6\x6\x6\x7e\x0\x3f\x60\x6b\x6b\x6b\x63\x63\x0\x3f\x60\x63\x63\x63\x63\x63\x0\x7e\x60\x63\x63\x63\x63\x3f\x0" "\x7e\x60\x3e\x6\x6\x6\x6\x0\x7e\x63\x63\x63\x63\x3\x7f\x0\x7f\x60\x3f\x33\x63\x63\x63\x0\x7e\x3\x7f\x60\x60\x60\x3f\x0\x7e\x0\x18\x18\x18\x18\x18\x0\x63\x63\x63\x63\x63\x3\x7e\x0\x63\x63\x63\x63\x33\x1b\xf\x0\x63\x63\x6b\x6b\x6b\x63\x3f\x0" "\x63\x36\x1c\x0\x1c\x36\x63\x0\x63\x63\x3f\x0\xc\xc\xc\x0\x7f\x0\x30\x18\xc\x6\x7f\x0\x3c\xc\xc\xc\xc\xc\x3c\x0\x3\x6\xc\x18\x30\x60\xc0\x0\x3c\x30\x30\x30\x30\x30\x3c\x0\x8\x1c\x36\x63\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xff" "\xc\xc\x18\x0\x0\x0\x0\x0\x0\x0\x7f\x60\x6e\x63\x3f\x0\x3\x3\x7b\x63\x63\x63\x3e\x0\x0\x0\x7e\x3\x3\x3\x7e\x0\x60\x60\x6e\x63\x63\x63\x3f\x0\x0\x0\x7e\x63\x3b\x3\x7f\x0\x3c\x0\x1e\x6\x6\x6\x6\x0\x0\x0\x7e\x63\x63\x6f\x60\x3e" "\x3\x3\x3f\x63\x63\x63\x63\x0\x18\x0\x18\x18\x18\x18\x18\x0\x30\x0\x30\x30\x30\x30\x30\x1f\x3\x3\x63\x33\x7b\x63\x63\x0\x1c\x18\x18\x18\x18\x18\x18\x0\x0\x0\x3f\x63\x6b\x6b\x63\x0\x0\x0\x3f\x63\x63\x63\x63\x0\x0\x0\x7e\x63\x63\x63\x3f\x0" "\x0\x0\x7e\x63\x63\x3b\x3\x3\x0\x0\x7e\x63\x63\x6f\x60\x60\x0\x0\x7c\x6\x6\x6\x6\x0\x0\x0\x7e\x3\x7f\x60\x3f\x0\xc\x0\x3c\xc\xc\xc\x78\x0\x0\x0\x63\x63\x63\x63\x7e\x0\x0\x0\x63\x63\x63\x33\x1f\x0\x0\x0\x63\x6b\x6b\x63\x3f\x0" "\x0\x0\x63\x36\x14\x36\x63\x0\x0\x0\x63\x63\x63\x6f\x60\x3f\x0\x0\x7f\x0\xc\x6\x7f\x0\x70\x18\x18\xe\x18\x18\x70\x0\x18\x18\x18\x0\x18\x18\x18\x0\x7\xc\xc\x38\xc\xc\x7\x0\xe\x5a\x70\x0\x0\x0\x0\x0\x0\x0\x8\x14\x22\x7f\x0\x0" "\xff\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\x1\x80\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\xff" "\x1\x0\x0\x0\x0\x0\x0\x0\x80\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x1\x0\x0\x0\x0\x0\x0\x0\x80\x1\x3\x7\xf\x1f\x3f\x7f\xff\xff\xfe\xfc\xf8\xf0\xe0\xc0\x80\xff\xff\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0" "\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\x3\x3\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\xff\xff\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\x0\xff\x0\x0\x0\x0\x0\x1f\x31\x31\x31\x3f\x3e\x0\x0\x3e\x62\x62\x62\x7e\x7c\x0\x0\x7c\xc4\xc4\xc4\xfc\xf8\x0\x0\xf8\x88\x88\x88\xf8\xf0\x0\x0\xf0\x10\x10\x10\xf0\xe0\x0" "\x0\xe0\x20\x20\x20\xe0\xc0\x0\x0\xc0\x40\x40\x40\xc0\x80\x0\x0\x80\x80\x80\x80\x80\x0\x0\x0\x0\x1\x1\x1\x1\x1\x0\x0\x1\x3\x3\x3\x3\x3\x0\x0\x3\x6\x6\x6\x7\x7\x0\x0\x7\xc\xc\xc\xf\xf\x0\x0\xf\x18\x18\x18\x1f\x1f\x0" "\x18\x18\x18\x18\x18\x18\x18\x18\xff\xff\x0\x0\x0\x8\x1c\x3e\xff\xff\x0\x0\x0\x0\x0\x7f\xff\xff\x0\x0\x8\x1c\x3e\x7f\xff\xff\x0\xc3\xe7\xff\xdb\xc3\x0\x0\x0\x0\x8\x0\x0\x0\x0\x2\x2\x2\x2\x2\x2\x2\x0\x12\x12\x12\x12\x12\x12\x12" "\x0\x92\x92\x92\x92\x92\x92\x92\x0\x4\x4\x4\x4\x4\x4\x4\x0\x24\x24\x24\x24\x24\x24\x24\x0\x24\x24\x24\x24\x24\x24\x24\x0\x1\x1\x1\x1\x1\x1\x1\x0\x9\x9\x9\x9\x9\x9\x9\x0\x49\x49\x49\x49\x49\x49\x49\x0\x0\x0\x18\x18\x0\x0\x0" "\x0\x0\x0\x0\x55\x0\x0\x0\x0\x0\x70\x88\x4\x0\x0\x0\x0\x0\x0\x20\x11\xe\x0\x0\x0\x3e\x22\x22\x22\x22\xe3\x0\x0\x3e\x22\x22\x22\x22\x63\x0\x0\xc\x34\xc4\x4\x4\x4\x0\x0\x20\x20\x20\x23\x2c\x30\x0\x0\x60\x20\x20\x20\x20\x60\x0" "\x0\x3\x2\x2\x2\x2\x3\x0\x0\x0\x0\x18\x18\x0\x0\x0\x0\x0\x18\x3c\x3c\x18\x0\x0\x0\x0\x18\x3c\x3c\x18\x0\x0\x0\x0\x0\x0\xff\x0\x0\x0\x0\x0\x3c\x3c\x3c\x3c\x0\x0\x0\x18\x3c\x7e\x7e\x3c\x18\x0\x0\x18\x3c\x7e\x7e\x3c\x18\x0" "\x0\x3c\x7e\x7e\x7e\x7e\x3c\x0\x0\x3c\x7e\x7e\x7e\x7e\x3c\x0\x6c\x6c\x6c\xef\x0\xff\x0\x0\x0\x0\x0\xff\x0\xef\x6c\x6c\x6c\x6c\x6c\xec\xc\xec\x6c\x6c\x0\x0\x0\xff\x0\xff\x0\x0\x6c\x6c\x6c\xef\x0\xef\x6c\x6c\x18\x18\x18\xff\x0\xff\x0\x0" "\x6c\x6c\x6c\xff\x0\x0\x0\x0\x0\x0\x0\xff\x0\xff\x18\x18\x0\x0\x0\xff\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xfc\x0\x0\x0\x0\x18\x18\x18\xf8\x18\xf8\x0\x0\x0\x0\x0\xf8\x18\xf8\x18\x18\x0\x0\x0\xfc\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xff\x6c\x6c\x6c\x6c" "\x18\x18\x18\xff\x18\xff\x18\x18\x18\x18\x18\x1f\x0\x0\x0\x0\x0\x0\x0\xf8\x18\x18\x18\x18\xff\xff\xff\xff\xff\xff\xff\xff\x0\x0\x0\x0\xff\xff\xff\xff\xf\xf\xf\xf\xf\xf\xf\xf\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xff\xff\xff\xff\x0\x0\x0\x0" "\x0\x0\xee\x19\x19\xee\x0\x0\x38\x6c\x66\x3f\x63\x63\x3f\x3\x7f\x46\x6\x6\x6\x6\x6\x0\x0\x0\xff\x66\x66\x66\x66\x0\x7f\x46\xc\x18\xc\x46\x7f\x0\x0\x0\xfc\x66\x63\x33\x1e\x0\x0\x0\xcc\xcc\xcc\x7c\xc\xf\x0\x0\xff\x18\x18\x18\x18\x0" "\x3c\x18\x3c\x66\x66\x3c\x18\x3c\x0\x3e\x63\x7f\x63\x3e\x0\x0\x0\x7e\xc3\xc3\xc3\x66\xe7\x0\x78\x98\x3c\x66\x63\x33\x1e\x0\x0\x0\x66\x99\x99\x66\x0\x0\x0\xc0\x3e\x73\x67\x3e\x3\x0\x0\x7c\x3\x7f\x3\x7c\x0\x0\x0\x0\x0\x0\x0\xdb\xdb\x0" "\x0\x7e\x0\x7e\x0\x7e\x0\x0\x0\xf8\x8\x8\x8\x8\xf8\x0\x0\xff\x0\x0\x0\x0\xff\x0\x0\x1f\x10\x10\x10\x10\x1f\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x0\x2\x1\x0\x0\x0\x20\x30\x28\x24\x22\xa1\x60\x20\x0\x0\x0\x1\x2\x0\x0\x0" "\x20\x60\xa1\x22\x24\x28\x30\x20\x0\x0\x0\x40\x40\x40\x40\x7f\xff\x81\x81\x81\x81\x80\x80\x80\x0\x0\x0\x20\x20\x11\x11\xe\x38\x44\x44\x82\x82\x0\x0\x0\x0\x0\xfe\x7c\x38\x10\x0\x0\x0\x0\x10\x38\x7c\xfe\x0\x0\x80\xc1\x63\x36\x1c\x8\x0\x0" ), // Font no. 5 FontEntry("EK-MAC", 8, 8, "\x0\x0\x0\x0\x0\x0\x0\x0\x3e\x41\x55\x41\x5d\x22\x1c\x0\x3e\x49\x49\x7f\x5d\x22\x1c\x0\x36\x7f\x7f\x7f\x3e\x1c\x8\x0\x8\x1c\x3e\x7f\x3e\x1c\x8\x0\x1c\x1c\x6b\x7f\x6b\x8\x1c\x0\x8\x1c\x3e\x7f\x7f\x49\x1c\x0\x0\x18\x3c\x3c\x3c\x18\x0\x0" "\x7e\x66\x42\x42\x42\x66\x7e\x0\x0\x18\x24\x24\x24\x18\x0\x0\x7e\x66\x5a\x5a\x5a\x66\x7e\x0\x70\x60\x50\x3c\x66\x66\x3c\x0\x3c\x66\x66\x3c\x18\x7e\x18\x0\x30\x30\x30\x30\x30\x1c\xc\x0\x7c\x6c\x6c\x6c\x67\x3b\x18\x0\x80\xaa\x94\xaa\x94\xaa\x80\xff" "\x0\x6\x1e\x7e\x1e\x6\x0\x0\x0\x30\x3c\x3f\x3c\x30\x0\x0\x8\x3e\x8\x3e\x8\x8\x0\x0\x66\x66\x66\x66\x66\x0\x66\x0\x7c\x5a\x5a\x5a\x5c\x58\x58\x0\x3c\x46\x3e\x66\x7c\x62\x3c\x0\x0\x0\x0\x7e\x7e\x0\x0\x0\x8\x1c\x3e\x0\x3e\x1c\x8\x7f" "\x0\x8\x1c\x3e\x7f\x0\x0\x0\x0\x0\x7f\x3e\x1c\x8\x0\x0\x8\x18\x38\x78\x38\x18\x8\x0\x10\x18\x1c\x1e\x1c\x18\x10\x0\x0\x0\x0\x6\x6\x6\x7e\x0\x0\x14\x36\x77\x36\x14\x0\x0\x0\x0\x8\x1c\x3e\x7f\x0\x0\x0\x0\x0\x7f\x3e\x1c\x8\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\xc\xc\xc\xc\xc\x0\xc\x0\x36\x36\x14\x0\x0\x0\x0\x0\x14\x3e\x14\x3e\x14\x0\x0\x0\x18\x3c\x46\x3c\x62\x3c\x18\x0\x4\x6a\x34\x18\x2c\x56\x20\x0\x1c\x36\x1c\x26\x66\x66\x7c\x0\x18\x10\x8\x0\x0\x0\x0\x0" "\x30\x18\x18\x18\x18\x18\x30\x0\xc\x18\x18\x18\x18\x18\xc\x0\x18\x5a\x3c\x5a\x18\x0\x0\x0\x0\x18\x18\x7e\x18\x18\x0\x0\x0\x0\x0\x0\x0\x18\x18\xc\x0\x0\x0\x7e\x0\x0\x0\x0\x0\x0\x0\x0\x0\x18\x18\x0\x0\x60\x30\x18\xc\x6\x0\x0" "\x3c\x66\x66\x66\x66\x66\x3c\x0\x18\x1c\x18\x18\x18\x18\x18\x0\x3c\x66\x60\x30\x18\xc\x7e\x0\x3c\x66\x60\x38\x60\x66\x3c\x0\x70\x78\x6c\x66\x7e\x60\x60\x0\x7e\x6\x3e\x60\x60\x66\x3c\x0\x3c\x66\x6\x3e\x66\x66\x3c\x0\x7e\x60\x30\x18\x18\x18\x18\x0" "\x3c\x66\x66\x3c\x66\x66\x3c\x0\x3c\x66\x66\x7c\x60\x66\x3c\x0\x0\x18\x18\x0\x18\x18\x0\x0\x0\x18\x18\x0\x18\x10\x8\x0\x30\x18\xc\x6\xc\x18\x30\x0\x0\x0\x7e\x0\x7e\x0\x0\x0\x6\xc\x18\x30\x18\xc\x6\x0\x3c\x66\x60\x30\x18\x0\x18\x0" "\x3c\x62\x6a\x6a\x7a\x2\x3c\x0\x3c\x66\x66\x66\x7e\x66\x66\x0\x3e\x66\x66\x3e\x66\x66\x3e\x0\x3c\x66\x6\x6\x6\x66\x3c\x0\x3e\x66\x66\x66\x66\x66\x3e\x0\x7e\x6\x6\x1e\x6\x6\x7e\x0\x7e\x6\x6\x1e\x6\x6\x6\x0\x3c\x66\x6\x76\x66\x66\x3c\x0" "\x66\x66\x66\x7e\x66\x66\x66\x0\x18\x18\x18\x18\x18\x18\x18\x0\x60\x60\x60\x60\x60\x66\x3c\x0\x66\x66\x66\x3e\x66\x66\x66\x0\x6\x6\x6\x6\x6\x6\x3e\x0\x3f\x6b\x6b\x6b\x6b\x6b\x6b\x0\x3e\x66\x66\x66\x66\x66\x66\x0\x3c\x66\x66\x66\x66\x66\x3c\x0" "\x3e\x66\x66\x66\x3e\x6\x6\x0\x3c\x66\x66\x66\x66\x36\x6c\x0\x3e\x66\x66\x3e\x66\x66\x66\x0\x3c\x66\x6\x3c\x60\x66\x3c\x0\x7e\x18\x18\x18\x18\x18\x18\x0\x66\x66\x66\x66\x66\x66\x3c\x0\x66\x66\x66\x66\x66\x26\x1e\x0\x6b\x6b\x6b\x6b\x6b\x6b\x3f\x0" "\x66\x66\x66\x3c\x66\x66\x66\x0\x66\x66\x66\x3c\x18\x18\x18\x0\x7e\x60\x30\x18\xc\x6\x7e\x0\x78\x18\x18\x18\x18\x18\x18\x78\x0\x6\xc\x18\x30\x60\x0\x0\x1e\x18\x18\x18\x18\x18\x18\x1e\x8\x1c\x36\x63\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x7e" "\x18\x8\x10\x0\x0\x0\x0\x0\x0\x0\x3c\x62\x7c\x66\x7c\x0\x6\x6\x3e\x66\x66\x66\x3e\x0\x0\x0\x3c\x66\x6\x66\x3c\x0\x60\x60\x7c\x66\x66\x66\x7c\x0\x0\x0\x3c\x66\x7e\x6\x3c\x0\x38\x4c\x1e\xc\xc\xc\xc\x0\x0\x0\x7c\x66\x66\x7c\x62\x3c" "\x6\x6\x3e\x66\x66\x66\x66\x0\x18\x0\x1c\x18\x18\x18\x18\x0\x30\x0\x38\x30\x30\x30\x32\x1c\x6\x6\x66\x66\x3e\x66\x66\x0\x1c\x18\x18\x18\x18\x18\x18\x0\x0\x0\x3f\x6b\x6b\x6b\x6b\x0\x0\x0\x3e\x66\x66\x66\x66\x0\x0\x0\x3c\x66\x66\x66\x3c\x0" "\x0\x0\x3e\x66\x66\x66\x3e\x6\x0\x0\x7c\x66\x66\x66\x7c\x60\x0\x0\x3e\x66\x66\x6\x6\x0\x0\x0\x3c\x46\x3c\x62\x3c\x0\x0\x18\x3c\x18\x18\x18\x30\x0\x0\x0\x66\x66\x66\x66\x3c\x0\x0\x0\x66\x66\x66\x26\x1e\x0\x0\x0\x6b\x6b\x6b\x6b\x3f\x0" "\x0\x0\x66\x66\x3c\x66\x66\x0\x0\x0\x66\x66\x66\x7c\x62\x3c\x0\x0\x7e\x30\x18\xc\x7e\x0\x30\x18\x18\xc\x18\x18\x30\x0\x18\x18\x18\x18\x18\x18\x18\x18\xc\x18\x18\x30\x18\x18\xc\x0\xc\x5a\x30\x0\x0\x0\x0\x0\x0\x0\x18\x24\x66\x7e\x0\x0" "\xfe\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\x7f\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\x1\x80\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\xfe\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\x7f" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x1\x3\x7\xf\x1f\x3f\x7f\xff\xff\xfe\xfc\xf8\xf0\xe0\xc0\x80\xfc\xfe\x7\xf3\xb\xb\xb\xb\xff\xff\x0\xff\x0\x0\x0\x0" "\x3f\x7f\xe0\xcf\xd0\xd0\xd0\xd0\xb\xb\xb\xb\xb\xb\xb\xb\xd0\xd0\xd0\xd0\xd0\xd0\xd0\xd0\xb\xb\xb\xb\xf3\x7\xfe\xfc\x0\x0\x0\x0\xff\x0\xff\xff\xd0\xd0\xd0\xd0\xcf\xe0\x7f\x3f\xb\x9\x4\x3\x0\x0\x0\x0\xd0\x90\x20\xc0\x0\x0\x0\x0" "\x0\x0\x0\x0\x3\x4\x9\xb\x0\x0\x0\x0\xc0\x20\x90\xd0\x0\x0\x0\xaa\x0\x0\x0\x0\x0\x3f\x7e\x3f\x7e\x3f\x7e\x0\x0\x7e\x7e\x7e\x7e\x7e\x7e\x0\x0\x7e\xfc\x7e\xfc\x7e\xfc\x0\x0\xfe\xf0\xfe\xf0\xfe\xf0\x0\x0\xfe\xe0\xfe\xe0\xfe\xe0\x0" "\x0\xfc\xc0\xfc\xc0\xfc\xc0\x0\x0\xf0\x80\xf0\x80\xf0\x80\x0\x0\xc0\x0\xc0\x0\xc0\x0\x0\x0\x0\x3\x0\x3\x0\x3\x0\x0\x1\xf\x1\xf\x1\xf\x0\x0\x3\x3f\x3\x3f\x3\x3f\x0\x0\x7\x7f\x7\x7f\x7\x7f\x0\x0\xf\x7f\xf\x7f\xf\x7f\x0" "\x3c\x3c\x3c\x3c\x3c\x3c\x3c\x3c\xff\xff\x0\xff\x0\x18\x3c\x0\xff\xff\x0\xff\x0\x0\x0\x7e\xff\xff\x0\xff\x0\x18\x3c\x7e\xff\xff\x0\xff\x0\x3e\x56\x56\x0\x0\x0\x18\x18\x0\x0\x0\x0\x7\x7\x7\x7\x7\x7\x0\x0\x3f\x3f\x3f\x3f\x3f\x3f\x0" "\x0\xff\xff\xff\xff\xff\xff\x0\x0\x7\x7\x7\x7\x7\x7\x0\x0\x3f\x3f\x3f\x3f\x3f\x3f\x0\x0\xff\xff\xff\xff\xff\xff\x0\x0\x3\x3\x3\x3\x3\x3\x0\x0\x1f\x1f\x1f\x1f\x1f\x1f\x0\x0\xff\xff\xff\xff\xff\xff\x0\x0\x0\x3c\x3c\x3c\x3c\x0\x0" "\x0\x0\x0\xf\x18\x1f\x18\x18\x6c\x6c\x6c\x67\x60\x67\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x0\x0\x0\x3f\x60\x67\x6c\x6c\x6c\x6c\x6c\x67\x60\x3f\x0\x0\x6c\x6c\x6c\x3f\x0\x0\x0\x0\x18\x18\x18\x1f\x18\xf\x0\x0\x0\x0\x0\xf\x18\x18\x18\x18" "\x18\x18\x18\xf0\x0\x0\x0\x0\x18\x18\x18\xff\x0\x0\x0\x0\x0\x0\x0\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\x18\x18\x18\x0\x0\x0\x0\xff\x0\x0\x0\x18\x18\x18\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\xf8\x18\x18\x6c\x6c\x6c\xec\x6c\x6c\x6c\x6c" "\x6c\x6c\x6c\xcc\xc\xf8\x0\x0\x0\x0\x0\xf8\xc\xcc\x6c\x6c\x6c\x6c\x6c\xc7\x0\xff\x0\x0\x0\x0\x0\xff\x0\xc7\x6c\x6c\x6c\x6c\x6c\xcc\xc\xcc\x6c\x6c\x0\x0\x0\xff\x0\xff\x0\x0\x6c\x6c\x6c\xc7\x0\xc7\x6c\x6c\x18\x18\x18\xff\x0\xff\x0\x0" "\x6c\x6c\x6c\xff\x0\x0\x0\x0\x0\x0\x0\xff\x0\xff\x18\x18\x0\x0\x0\xff\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xf8\x0\x0\x0\x0\x18\x18\x18\xf8\x18\xf0\x0\x0\x0\x0\x0\xf0\x18\xf8\x18\x18\x0\x0\x0\xf8\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xff\x6c\x6c\x6c\x6c" "\x18\x18\x18\xff\x18\xff\x18\x18\x18\x18\x18\xf\x0\x0\x0\x0\x0\x0\x0\xf0\x18\x18\x18\x18\xff\xff\xff\xff\xff\xff\xff\xff\x0\x0\x0\x0\xff\xff\xff\xff\xf\xf\xf\xf\xf\xf\xf\xf\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xff\xff\xff\xff\x0\x0\x0\x0" "\x0\x0\x0\x6c\x36\x36\x6c\x0\x3c\x66\x66\x36\x66\x66\x36\x6\x3c\x46\x6\x6\x6\x6\x6\x0\x0\x0\xff\x66\x66\x66\x66\x0\x7e\x6\xc\x18\xc\x6\x7e\x0\x0\x0\xfc\x66\x66\x66\x3c\x0\x0\x0\x66\x66\x66\x66\x3e\x3\x0\x0\x3c\x18\x18\x18\x30\x0" "\x0\x18\x3c\x66\x66\x66\x3c\x18\x38\x64\x66\x7e\x66\x26\x1c\x0\x3c\x66\x66\x66\x24\x24\x66\x0\x70\x98\x3c\x66\x66\x66\x3c\x0\x0\x0\x36\x6b\x6b\x36\x0\x0\x0\x60\x3c\x66\x66\x66\x3c\x6\x0\x0\x7c\x6\x7e\x6\x7c\x0\x0\x0\x0\x0\x0\xdb\xdb\x0" "\x0\x7e\x0\x7e\x0\x7e\x0\x0\x0\xf8\x8\x8\x8\x8\xf8\x0\x0\xff\x0\x0\x0\x0\xff\x0\x0\x1f\x10\x10\x10\x10\x1f\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x0\x2\x1\x0\x0\x0\x20\x30\x28\x24\x22\xa1\x60\x20\x0\x0\x0\x1\x2\x0\x0\x0" "\x20\x60\xa1\x22\x24\x28\x30\x20\x0\x0\x0\x40\x40\x40\x40\x7f\xff\x81\x81\x81\x81\x80\x80\x80\x0\x0\x0\x20\x20\x11\x11\xe\x38\x44\x44\x82\x82\x0\x0\x0\x0\x0\xfe\x7c\x38\x10\x0\x0\x0\x0\x10\x38\x7c\xfe\x0\x0\x80\xc1\x63\x36\x1c\x8\x0\x0" ), // Font no. 6 FontEntry("EK-SPACE", 8, 8, "\x0\x0\x0\x0\x0\x0\x0\x0\x3e\x41\x55\x41\x5d\x22\x1c\x0\x3e\x49\x49\x7f\x5d\x22\x1c\x0\x36\x7f\x7f\x7f\x3e\x1c\x8\x0\x8\x1c\x3e\x7f\x3e\x1c\x8\x0\x1c\x1c\x6b\x7f\x6b\x8\x1c\x0\x8\x1c\x3e\x7f\x7f\x49\x1c\x0\x0\x1c\x3e\x3e\x3e\x1c\x0\x0" "\x7f\x63\x41\x41\x41\x63\x7f\x0\x0\x1c\x22\x22\x22\x1c\x0\x0\x7f\x63\x5d\x5d\x5d\x63\x7f\x0\x70\x60\x50\x3e\x63\x63\x3e\x0\x3e\x63\x63\x3e\x8\x3e\x8\x0\x30\x30\x30\x30\x30\x1c\xc\x0\x7c\x6c\x6c\x6c\x67\x3b\x18\x0\x80\xaa\x94\xaa\x94\xaa\x80\xff" "\x0\x6\x1e\x7e\x1e\x6\x0\x0\x0\x30\x3c\x3f\x3c\x30\x0\x0\x18\x7e\x18\x18\x18\x18\x7e\x18\x66\x66\x66\x66\x66\x0\x66\x0\x7e\x6b\x6b\x6b\x6e\x68\x68\x0\x7e\x3\x3f\x63\x7e\x60\x3f\x0\x0\x0\x0\x7e\x7e\x0\x0\x0\x8\x1c\x3e\x0\x3e\x1c\x8\x7f" "\x0\x8\x1c\x3e\x7f\x0\x0\x0\x0\x0\x7f\x3e\x1c\x8\x0\x0\x8\x18\x38\x78\x38\x18\x8\x0\x10\x18\x1c\x1e\x1c\x18\x10\x0\x0\x0\x0\x3\x3\x3\x7e\x0\x0\x14\x36\x77\x36\x14\x0\x0\x0\x0\x8\x1c\x3e\x7f\x0\x0\x0\x0\x0\x7f\x3e\x1c\x8\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\xc\xc\xc\xc\xc\x0\xc\x0\x36\x36\x14\x0\x0\x0\x0\x0\xa\x1f\xa\x1f\xa\x0\x0\x0\x3e\x6b\xb\x3e\x68\x6b\x3e\x0\x4c\x6a\x36\x18\x6c\x56\x32\x0\x1c\x36\x1c\x26\x63\x63\x7e\x0\x18\x18\xc\x0\x0\x0\x0\x0" "\x8\x6\x3\x3\x3\x6\x8\x0\x8\x30\x60\x60\x60\x30\x8\x0\x0\x2a\x1c\x7f\x1c\x2a\x0\x0\x0\x18\x18\x7e\x18\x18\x0\x0\x0\x0\x0\x0\x0\x18\x18\xc\x0\x0\x0\x3e\x0\x0\x0\x0\x0\x0\x0\x0\x0\x18\x18\x0\x0\x60\x30\x18\xc\x6\x0\x0" "\x3e\x63\x63\x6b\x63\x63\x3e\x0\x18\x1c\x18\x18\x18\x18\x7e\x0\x3e\x63\x60\x38\xe\x3\x7f\x0\x3e\x63\x60\x3c\x60\x63\x3e\x0\x70\x78\x6c\x66\x63\x7f\x60\x0\x7f\x3\x3\x3f\x60\x60\x3f\x0\x3e\x63\x3\x3f\x63\x63\x3e\x0\x7f\x30\x18\x3e\xc\xc\xc\x0" "\x3e\x63\x63\x3e\x63\x63\x3e\x0\x3e\x63\x63\x7e\x60\x63\x3e\x0\x0\x18\x18\x0\x18\x18\x0\x0\x0\x18\x18\x0\x18\x18\x8\x0\x30\x18\xc\x6\xc\x18\x30\x0\x0\x0\x3e\x0\x3e\x0\x0\x0\x6\xc\x18\x30\x18\xc\x6\x0\x3c\x62\x60\x30\x18\x0\x18\x0" "\x3c\x62\x6b\x6b\x7b\x3\x3e\x0\x1c\x36\x63\x63\x7f\x63\x63\x0\x3f\x63\x63\x3f\x63\x63\x3f\x0\x3e\x63\x3\x3\x3\x63\x3e\x0\x3f\x63\x63\x63\x63\x63\x3f\x0\x7f\x3\x3\x1f\x3\x3\x7f\x0\x7f\x3\x3\x1f\x3\x3\x3\x0\x3e\x63\x3\x7b\x63\x63\x3e\x0" "\x63\x63\x63\x7f\x63\x63\x63\x0\x3c\x18\x18\x18\x18\x18\x3c\x0\x78\x60\x60\x60\x60\x63\x3e\x0\x63\x33\x1b\xf\x1b\x33\x63\x0\x6\x6\x6\x6\x6\x6\x7e\x0\x63\x77\x7f\x6b\x6b\x63\x63\x0\x63\x67\x6f\x7b\x73\x63\x63\x0\x3e\x63\x63\x63\x63\x63\x3e\x0" "\x3f\x63\x63\x63\x3f\x3\x3\x0\x3e\x63\x63\x63\x6b\x33\x6e\x60\x3f\x63\x63\x63\x3f\x63\x63\x0\x3e\x63\x3\x3e\x60\x63\x3e\x0\x7e\x18\x18\x18\x18\x18\x18\x0\x63\x63\x63\x63\x63\x63\x3e\x0\x63\x63\x63\x63\x63\x36\x1c\x0\x63\x63\x6b\x6b\x6b\x77\x63\x0" "\x63\x63\x36\x1c\x36\x63\x63\x0\x66\x66\x66\x3c\x18\x18\x18\x0\x7f\x30\x18\x3e\xc\x6\x7f\x0\x78\x18\x18\x18\x18\x18\x18\x78\x0\x6\xc\x18\x30\x60\x0\x0\x1e\x18\x18\x18\x18\x18\x18\x1e\x8\x1c\x36\x63\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xff" "\x18\x18\x30\x0\x0\x0\x0\x0\x0\x0\x3e\x60\x7e\x63\x7e\x0\x3\x3\x3f\x63\x63\x63\x3f\x0\x0\x0\x3e\x63\x3\x63\x3e\x0\x60\x60\x7e\x63\x63\x63\x7e\x0\x0\x0\x3e\x63\x7f\x3\x3e\x0\x3c\x46\x6\x3f\x6\x6\x6\x0\x0\x0\x3e\x63\x63\x7e\x60\x3e" "\x3\x3\x3f\x63\x63\x63\x63\x0\x18\x0\x1c\x18\x18\x18\x18\x0\x30\x0\x38\x30\x30\x30\x31\x1e\x3\x3\x63\x3b\xf\x3b\x63\x0\x1c\x18\x18\x18\x18\x18\x18\x0\x0\x0\x36\x7f\x6b\x6b\x63\x0\x0\x0\x3e\x63\x63\x63\x63\x0\x0\x0\x3e\x63\x63\x63\x3e\x0" "\x0\x0\x3e\x63\x63\x63\x3f\x3\x0\x0\x3e\x63\x63\x63\x7e\x60\x0\x0\x3e\x63\x63\x3\x3\x0\x0\x0\x7e\x3\x3e\x60\x3f\x0\xc\xc\x3e\xc\xc\xc\x38\x0\x0\x0\x63\x63\x63\x63\x3e\x0\x0\x0\x63\x63\x63\x36\x1c\x0\x0\x0\x63\x6b\x6b\x77\x22\x0" "\x0\x0\x63\x36\x1c\x36\x63\x0\x0\x0\x63\x63\x63\x7e\x60\x3e\x0\x0\x7f\x30\x1c\x6\x7f\x0\x38\xc\xc\x6\xc\xc\x38\x0\x18\x18\x18\x18\x18\x18\x18\x18\xe\x18\x18\x30\x18\x18\xe\x0\xe\x99\x70\x0\x0\x0\x0\x0\x0\x0\x8\x14\x22\x7f\x0\x0" "\xfe\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\x7f\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\x1\x80\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\xfe\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\x7f" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x1\x1\x2\x2\x4\x8\x30\xc0\x3\xc\x10\x20\x40\x40\x80\x80\xf0\xfc\xe\x6\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0" "\xf\x3f\x70\x60\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\x3\x3\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x6\xe\xfc\xf0\x0\x0\x0\x0\x0\x0\xff\xff\xc0\xc0\xc0\xc0\x60\x70\x3f\xf\x1\x0\x0\x0\x0\x0\x0\x0\x80\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x1\x0\x0\x0\x0\x0\x0\x0\x80\x0\x0\x0\x55\xaa\x0\x0\x0\x0\x38\x7e\x7f\x7f\x7f\x3e\x0\x0\x3c\x7e\x7e\x7e\x7e\x3c\x0\x0\x1c\x7e\xfe\xfe\xfe\x7c\x0\x0\x0\x38\x7e\xfe\xfe\xfc\x0\x0\x0\x0\x0\x1e\xfe\xfc\x0" "\x0\x0\x0\x0\x0\xe\xfc\x0\x0\x0\x0\x0\x0\x80\xe0\x0\x0\x0\x0\x0\x0\x80\xc0\x0\x0\x0\x0\x0\x0\x1\x3\x0\x0\x0\x0\x0\x0\x1\x7\x0\x0\x0\x0\x0\x0\x70\x3f\x0\x0\x0\x0\x0\x78\x7f\x3f\x0\x0\x0\x1c\x7e\x7f\x7f\x3f\x0" "\x14\x2a\x14\x2a\x14\x2a\x14\x2a\xff\xff\x0\x0\x8\x1c\x3e\x0\xff\xff\x0\x0\x0\x0\x0\x2a\xff\xff\x0\x0\x8\x1c\x3e\x7f\xff\xff\x0\x36\x7f\x6b\x6b\x6b\x0\x0\x0\x18\x18\x0\x0\x0\x0\x6\x3\x3\x3\x3\x1\x0\x0\xe\x1b\x1b\x1b\x1b\x31\x0" "\x0\x8e\xdb\xdb\xdb\xdb\x71\x0\x0\x3\x6\x6\x6\x6\xc\x0\x0\x63\x36\x36\x36\x36\x1c\x0\x0\xe3\xb6\xb6\xb6\xb6\x1c\x0\x0\x0\x1\x1\x1\x1\x3\x0\x0\x18\xd\xd\xd\xd\x7\x0\x0\x38\x6d\x6d\x6d\x6d\xc7\x0\x0\x1c\x3e\x3e\x3e\x1c\x0\x0" "\x0\x0\x0\xf\x18\x1f\x18\x18\x6c\x6c\x6c\x67\x60\x67\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x0\x0\x0\x3f\x60\x67\x6c\x6c\x6c\x6c\x6c\x67\x60\x3f\x0\x0\x6c\x6c\x6c\x3f\x0\x0\x0\x0\x18\x18\x18\x1f\x18\xf\x0\x0\x0\x0\x0\xf\x18\x18\x18\x18" "\x18\x18\x18\xf0\x0\x0\x0\x0\x18\x18\x18\xff\x0\x0\x0\x0\x0\x0\x0\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\x18\x18\x18\x0\x0\x0\x0\xff\x0\x0\x0\x18\x18\x18\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\xf8\x18\x18\x6c\x6c\x6c\xec\x6c\x6c\x6c\x6c" "\x6c\x6c\x6c\xcc\xc\xf8\x0\x0\x0\x0\x0\xf8\xc\xcc\x6c\x6c\x6c\x6c\x6c\xc7\x0\xff\x0\x0\x0\x0\x0\xff\x0\xc7\x6c\x6c\x6c\x6c\x6c\xcc\xc\xcc\x6c\x6c\x0\x0\x0\xff\x0\xff\x0\x0\x6c\x6c\x6c\xc7\x0\xc7\x6c\x6c\x18\x18\x18\xff\x0\xff\x0\x0" "\x6c\x6c\x6c\xff\x0\x0\x0\x0\x0\x0\x0\xff\x0\xff\x18\x18\x0\x0\x0\xff\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xf8\x0\x0\x0\x0\x18\x18\x18\xf8\x18\xf0\x0\x0\x0\x0\x0\xf0\x18\xf8\x18\x18\x0\x0\x0\xf8\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xff\x6c\x6c\x6c\x6c" "\x18\x18\x18\xff\x18\xff\x18\x18\x18\x18\x18\xf\x0\x0\x0\x0\x0\x0\x0\xf0\x18\x18\x18\x18\xff\xff\xff\xff\xff\xff\xff\xff\x0\x0\x0\x0\xff\xff\xff\xff\xf\xf\xf\xf\xf\xf\xf\xf\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xff\xff\xff\xff\x0\x0\x0\x0" "\x0\x0\x0\x6e\x33\x33\x6e\x0\x3c\x66\x63\x3b\x63\x63\x3b\x3\x3c\x46\x6\x6\x6\x6\x6\x0\x0\x0\x7f\x36\x36\x36\x36\x0\x3c\x46\xc\x18\xc\x46\x3c\x0\x0\x0\xfc\x66\x63\x33\x1e\x0\x0\x0\x66\x66\x66\x66\x3e\x3\x0\x0\x3e\xc\xc\xc\x18\x0" "\x0\x8\x3e\x6b\x6b\x6b\x3e\x8\x3c\x66\x63\x7f\x63\x33\x1e\x0\x3e\x63\x63\x63\x36\x36\x63\x0\x70\x98\x3c\x66\x63\x33\x1e\x0\x0\x0\x36\x6b\x6b\x36\x0\x0\x0\x0\x5e\x33\x6b\x66\x3d\x0\x0\x0\x7e\x3\x7f\x3\x7e\x0\x0\x0\x0\x0\x0\xdb\xdb\x0" "\x0\x7e\x0\x7e\x0\x7e\x0\x0\x0\xf8\x8\x8\x8\x8\xf8\x0\x0\xff\x0\x0\x0\x0\xff\x0\x0\x1f\x10\x10\x10\x10\x1f\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x0\x2\x1\x0\x0\x0\x20\x30\x28\x24\x22\xa1\x60\x20\x0\x0\x0\x1\x2\x0\x0\x0" "\x20\x60\xa1\x22\x24\x28\x30\x20\x0\x0\x0\x40\x40\x40\x40\x7f\xff\x81\x81\x81\x81\x80\x80\x80\x0\x0\x0\x20\x20\x11\x11\xe\x38\x44\x44\x82\x82\x0\x0\x0\x0\x0\xfe\x7c\x38\x10\x0\x0\x0\x0\x10\x38\x7c\xfe\x0\x0\x80\xc1\x63\x36\x1c\x8\x0\x0" ), // Font no. 7 FontEntry("FINELINE", 8, 8, "\x0\x0\x0\x0\x0\x0\x0\x0\x7e\x81\xa5\x81\xbd\x99\x81\x7e\x7e\xff\xdb\xff\xff\xc3\xe7\x7e\x0\x77\x7f\x7f\x3e\x1c\x8\x0\x8\x1c\x3e\x7f\x3e\x1c\x8\x0\x18\x3c\x18\xff\xff\x52\x18\x0\x8\x1c\x3e\x7f\x7f\x49\x1c\x0\x0\x0\x18\x3c\x18\x0\x0\x0" "\xff\xff\xe7\xc3\xe7\xff\xff\xff\x0\x3c\x42\x42\x42\x42\x3c\x0\xff\xc3\xbd\xbd\xbd\xbd\xc3\xff\xf8\xe0\xb0\x3e\x63\x63\x3e\x0\x0\x7e\xc3\xc3\x7e\x18\x7e\x18\x20\x60\xe0\x20\x20\x3f\x1f\x0\x30\x50\xb0\xd0\x9f\x8f\xf0\xf0\x81\xc2\xbc\xe4\xa4\xfc\xea\xff" "\x0\x0\x6\x1e\x7e\x1e\x6\x0\x0\x0\x60\x78\x7e\x78\x60\x0\x18\x7e\x18\x18\x18\x18\x7e\x18\x66\x66\x66\x66\x66\x0\x66\x0\xff\x6d\x6e\x6c\x6c\x6c\x6c\x0\x7e\x81\x3e\x42\x42\x7c\x81\x7e\x0\x0\x0\x7e\x7e\x0\x0\x0\x18\x7e\x18\x18\x7e\x18\x0\xff" "\x18\x7e\x18\x18\x18\x18\x18\x0\x18\x18\x18\x18\x18\x7e\x18\x0\x0\x20\x60\xff\x60\x20\x0\x0\x0\x4\x6\xff\x6\x4\x0\x0\x0\x0\x0\x3\x3\x3\xff\x0\x0\x24\x66\xff\x66\x24\x0\x0\x0\x0\x8\x1c\x3e\x7f\x0\x0\x0\x0\x0\x7f\x3e\x1c\x8\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\xc\xc\xc\xc\xc\x0\xc\x0\x66\x66\x0\x0\x0\x0\x0\x0\xa\x1f\xa\x1f\xa\x0\x0\x0\x3e\x4b\xb\x3e\x68\x6b\x3e\x8\xc7\x65\x37\x18\xec\xa6\xe3\x0\x1c\x32\x1c\xa2\x63\x73\x5e\x80\x30\x30\x18\x0\x0\x0\x0\x0" "\x8\x6\x3\x3\x3\x6\x8\x0\x8\x30\x60\x60\x60\x30\x8\x0\x0\x2a\x1c\x7f\x1c\x2a\x0\x0\x0\x18\x18\x7e\x18\x18\x0\x0\x0\x0\x0\x0\x0\x0\x18\xe\x0\x0\x0\x7e\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x30\x0\x80\xc0\x60\x30\x18\xc\x6\x3" "\x1e\x21\x21\x21\x21\x21\x1e\x0\x8\xc\x8\x8\x8\x8\x1c\x0\x1e\x21\x10\x8\x4\x2\x3f\x0\x3e\x41\x40\x3c\x40\x41\x3e\x0\x30\x28\x24\x22\x7f\x20\x20\x0\x7f\x1\x1\x3f\x40\x40\x3f\x0\x3e\x41\x1\x3f\x41\x41\x3e\x0\x7f\x20\x10\x8\x8\x8\x8\x0" "\x3e\x41\x41\x3e\x41\x41\x3e\x0\x3e\x41\x41\x7e\x40\x41\x3e\x0\x0\xc\x0\x0\x0\xc\x0\x0\x0\xc\x0\x0\x0\xc\x4\x0\x0\x38\xc\x6\xc\x38\x0\x0\x0\x0\x7e\x0\x7e\x0\x0\x0\x0\xe\x18\x30\x18\xe\x0\x0\x3e\x63\x30\x18\xc\x0\xc\x0" "\x3e\x41\x5d\x55\x7d\x1\x3e\x0\x1c\x22\x41\x41\x7f\x41\x41\x0\x3f\x41\x41\x3f\x41\x41\x3f\x0\x3e\x41\x1\x1\x41\x41\x3e\x0\x3f\x41\x41\x41\x41\x41\x3f\x0\x7f\x1\x1\x1f\x1\x1\x7f\x0\x7f\x1\x1\x1f\x1\x1\x1\x0\x3e\x41\x1\x79\x41\x61\x5e\x0" "\x41\x41\x41\x7f\x41\x41\x41\x0\x3e\x8\x8\x8\x8\x8\x3e\x0\x78\x20\x20\x20\x20\x21\x1e\x0\x21\x11\x9\x7\x9\x11\x21\x0\x2\x2\x2\x2\x2\x2\x7e\x0\x63\x55\x55\x49\x49\x41\x41\x0\x41\x43\x45\x49\x51\x61\x41\x0\x3e\x41\x41\x41\x41\x41\x3e\x0" "\x3f\x42\x42\x3e\x2\x2\x7\x0\x3e\x41\x41\x49\x51\x61\x3e\x40\x1f\x21\x21\x1f\x11\x21\x21\x40\x3e\x41\x1\x3e\x40\x41\x3e\x0\x7f\x8\x8\x8\x8\x8\x8\x0\x41\x41\x41\x41\x41\x41\x3e\x0\x41\x41\x41\x41\x41\x22\x1c\x0\x41\x49\x49\x49\x55\x63\x41\x0" "\x41\x22\x14\x8\x14\x22\x41\x0\x41\x22\x14\x8\x8\x8\x8\x0\x7f\x20\x10\x8\x4\x2\x7f\x0\x38\x18\x18\x18\x18\x18\x18\x38\x3\x6\xc\x18\x30\x60\xc0\x80\xe\xc\xc\xc\xc\xc\xc\xe\x8\x1c\x36\x63\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xff" "\xc\xc\x18\x0\x0\x0\x0\x0\x0\x0\x3e\x40\x7e\x41\x7e\x0\x1\x1\x3f\x41\x41\x41\x3f\x0\x0\x0\x3e\x41\x1\x41\x3e\x0\x40\x40\x7e\x41\x41\x41\x7e\x0\x0\x0\x3e\x41\x7f\x1\x3e\x0\x3c\x42\x2\x3f\x2\x2\x2\x0\x0\x0\xbe\x41\x41\x7e\x40\x3e" "\x1\x1\x3f\x41\x41\x41\x41\x0\xc\x0\x8\x8\x8\x8\x1c\x0\x20\x0\x30\x20\x20\x20\x21\x1e\x1\x1\x31\x9\x7\x9\x31\x0\x8\x8\x8\x8\x8\x8\x18\x0\x0\x0\x63\x55\x49\x49\x41\x0\x0\x0\x3f\x41\x41\x41\x41\x0\x0\x0\x3e\x41\x41\x41\x3e\x0" "\x0\x0\x3f\x41\x41\x3f\x1\x1\x0\x0\x7e\x41\x41\x7e\x40\xc0\x0\x0\x39\x66\x2\x2\x2\x0\x0\x0\x7e\x1\x3e\x40\x3f\x0\x8\x8\x3e\x8\x8\x8\x18\x0\x0\x0\x41\x41\x41\x41\x7e\x0\x0\x0\x41\x41\x41\x22\x1c\x0\x0\x0\x41\x49\x55\x63\x41\x0" "\x0\x0\x22\x14\x8\x14\x22\x0\x0\x0\x41\x41\x41\x7e\x40\x3f\x0\x0\x7f\x10\x8\x4\x7f\x0\x70\x18\x18\xe\x18\x18\x70\x0\x18\x18\x18\x0\x18\x18\x18\x0\x7\xc\xc\x38\xc\xc\x7\x0\xe\xd9\x70\x0\x0\x0\x0\x0\x0\x0\x8\x14\x22\x7f\x0\x0" "\xff\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\x1\x80\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\xff" "\x1\x0\x0\x0\x0\x0\x0\x0\x80\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x1\x0\x0\x0\x0\x0\x0\x0\x80\x1\x3\x7\xf\x1f\x3f\x7f\xff\xff\xfe\xfc\xf8\xf0\xe0\xc0\x80\xff\xff\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0" "\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\x3\x3\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\xff\xff\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\x0\x55\x0\x0\x0\x0\x0\x1e\x33\x2d\x2d\x33\x1e\x0\x0\x3c\x66\x5a\x5a\x66\x3c\x0\x0\x78\xcc\xb4\xb4\xcc\x78\x0\x0\xf0\x98\x68\x68\x98\xf0\x0\x0\xe0\x30\xd0\xd0\x30\xe0\x0" "\x0\xc0\x60\xa0\xa0\x60\xc0\x0\x0\x80\xc0\x40\x40\xc0\x80\x0\x0\x0\x80\x80\x80\x80\x0\x0\x0\x0\x1\x1\x1\x1\x0\x0\x0\x1\x3\x2\x2\x3\x1\x0\x0\x3\x6\x5\x5\x6\x3\x0\x0\x7\xc\xb\xb\xc\x7\x0\x0\xf\x19\x16\x16\x19\xf\x0" "\x36\x2a\x36\x2a\x36\x2a\x36\x2a\xff\xff\x0\x0\x0\x8\x1c\x3e\xff\xff\x0\x0\x0\x0\x0\x7f\xff\xff\x0\x0\x8\x1c\x3e\x7f\xff\xff\x0\xc3\xe7\xff\xdb\xc3\x0\x0\x0\x0\x10\x0\x0\x0\x0\x3\x3\x3\x3\x3\x3\x3\x0\x1b\x1b\x1b\x1b\x1b\x1b\x1b" "\x0\xdb\xdb\xdb\xdb\xdb\xdb\xdb\x0\x6\x6\x6\x6\x6\x6\x6\x0\x36\x36\x36\x36\x36\x36\x36\x0\xb6\xb6\xb6\xb6\xb6\xb6\xb6\x0\x1\x1\x1\x1\x1\x1\x1\x0\xd\xd\xd\xd\xd\xd\xd\x0\x6d\x6d\x6d\x6d\x6d\x6d\x6d\x0\x0\x18\x3c\x3c\x18\x0\x0" "\x0\x0\x0\x1f\x18\x1f\x18\x18\x6c\x6c\x6c\x6f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x0\x0\x0\x7f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6f\x60\x7f\x0\x0\x6c\x6c\x6c\x7f\x0\x0\x0\x0\x18\x18\x18\x1f\x18\x1f\x0\x0\x0\x0\x0\x1f\x18\x18\x18\x18" "\x18\x18\x18\xf8\x0\x0\x0\x0\x18\x18\x18\xff\x0\x0\x0\x0\x0\x0\x0\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\x18\x18\x18\x0\x0\x0\x0\xff\x0\x0\x0\x18\x18\x18\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\xf8\x18\x18\x6c\x6c\x6c\xec\x6c\x6c\x6c\x6c" "\x6c\x6c\x6c\xec\xc\xfc\x0\x0\x0\x0\x0\xfc\xc\xec\x6c\x6c\x6c\x6c\x6c\xef\x0\xff\x0\x0\x0\x0\x0\xff\x0\xef\x6c\x6c\x6c\x6c\x6c\xec\xc\xec\x6c\x6c\x0\x0\x0\xff\x0\xff\x0\x0\x6c\x6c\x6c\xef\x0\xef\x6c\x6c\x18\x18\x18\xff\x0\xff\x0\x0" "\x6c\x6c\x6c\xff\x0\x0\x0\x0\x0\x0\x0\xff\x0\xff\x18\x18\x0\x0\x0\xff\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xfc\x0\x0\x0\x0\x18\x18\x18\xf8\x18\xf8\x0\x0\x0\x0\x0\xf8\x18\xf8\x18\x18\x0\x0\x0\xfc\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xff\x6c\x6c\x6c\x6c" "\x18\x18\x18\xff\x18\xff\x18\x18\x18\x18\x18\x1f\x0\x0\x0\x0\x0\x0\x0\xf8\x18\x18\x18\x18\xff\xff\xff\xff\xff\xff\xff\xff\x0\x0\x0\x0\xff\xff\xff\xff\xf\xf\xf\xf\xf\xf\xf\xf\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xff\xff\xff\xff\x0\x0\x0\x0" "\x0\x0\xee\x19\x19\xee\x0\x0\x38\x6c\x66\x3f\x63\x63\x3f\x3\x7f\x46\x6\x6\x6\x6\x6\x0\x0\x0\xff\x66\x66\x66\x66\x0\x7f\x46\xc\x18\xc\x46\x7f\x0\x0\x0\xfc\x66\x63\x33\x1e\x0\x0\x0\xcc\xcc\xcc\x7c\xc\xf\x0\x0\xff\x18\x18\x18\x18\x0" "\x3c\x18\x3c\x66\x66\x3c\x18\x3c\x0\x3e\x63\x7f\x63\x3e\x0\x0\x0\x7e\xc3\xc3\xc3\x66\xe7\x0\x78\x98\x3c\x66\x63\x33\x1e\x0\x0\x0\x66\x99\x99\x66\x0\x0\x0\xc0\x3e\x73\x67\x3e\x3\x0\x0\x7c\x3\x7f\x3\x7c\x0\x0\x0\x0\x0\x0\x0\xdb\xdb\x0" "\x0\x7e\x0\x7e\x0\x7e\x0\x0\x0\xf8\x8\x8\x8\x8\xf8\x0\x0\xff\x0\x0\x0\x0\xff\x0\x0\x1f\x10\x10\x10\x10\x1f\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x0\x2\x1\x0\x0\x0\x20\x30\x28\x24\x22\xa1\x60\x20\x0\x0\x0\x1\x2\x0\x0\x0" "\x20\x60\xa1\x22\x24\x28\x30\x20\x0\x0\x0\x40\x40\x40\x40\x7f\xff\x81\x81\x81\x81\x80\x80\x80\x0\x0\x0\x20\x20\x11\x11\xe\x38\x44\x44\x82\x82\x0\x0\x0\x0\x0\xfe\x7c\x38\x10\x0\x0\x0\x0\x10\x38\x7c\xfe\x0\x0\x80\xc1\x63\x36\x1c\x8\x0\x0" ), // Font no. 8 FontEntry("FN-ICE", 8, 8, "\x0\x0\x0\x0\x0\x0\x0\x0\x7e\x81\xa5\x81\xbd\x99\x81\x7e\x7e\xff\xdb\xff\xc3\xe7\xff\x7e\x36\x7f\x7f\x7f\x3e\x1c\x8\x0\x8\x1c\x3e\x7f\x3e\x1c\x8\x0\x1c\x3e\x1c\x7f\x7f\x49\x8\x3e\x0\x8\x1c\x3e\x7f\x3e\x1c\x3e\x0\x0\x18\x3c\x3c\x18\x0\x0" "\xff\xff\xe7\xc3\xc3\xe7\xff\xff\x0\x3c\x66\x42\x42\x66\x3c\x0\xff\xc3\x99\xbd\xbd\x99\xc3\xff\xf0\xe0\xf0\xbe\x33\x33\x33\x1e\x3c\x66\x66\x66\x3c\x18\x7e\x18\xfc\xcc\xfc\xc\xc\xe\xf\x7\xfe\xc6\xfe\xc6\xc6\xe6\x67\x3\x99\x5a\x3c\xe7\xe7\x3c\x5a\x99" "\x1\x7\x1f\x7f\x1f\x7\x1\x0\x40\x70\x7c\x7f\x7c\x70\x40\x0\x18\x3c\x7e\x18\x18\x7e\x3c\x18\x66\x66\x66\x66\x66\x0\x66\x0\xfe\xdb\xdb\xde\xd8\xd8\xd8\x0\x7c\xc6\x1c\x36\x36\x1c\x61\x3f\x0\x0\x0\x0\x7e\x7e\x7e\x0\x18\x3c\x7e\x18\x7e\x3c\x18\xff" "\x18\x3c\x7e\x18\x18\x18\x18\x0\x18\x18\x18\x18\x7e\x3c\x18\x0\x0\x18\x30\x7f\x30\x18\x0\x0\x0\xc\x6\x7f\x6\xc\x0\x0\x0\x0\x3\x3\x3\x7f\x0\x0\x0\x24\x66\xff\x66\x24\x0\x0\x0\x18\x3c\x7e\xff\xff\x0\x0\x0\xff\xff\x7e\x3c\x18\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x4\xc\x1c\x1c\x1c\x0\x1c\x0\x36\x36\x14\x0\x0\x0\x0\x0\x0\x14\x3e\x14\x3e\x14\x0\x0\x8\x3c\x6a\xc\x38\x6a\x3c\x8\x0\x7a\x25\x12\x8\x24\x52\x20\x10\x0\x18\x24\x4\x18\x0\x8\xc\xc\x6\x0\x0\x0\x0\x0" "\x30\x18\xc\xc\xc\xc\x18\x30\xc\x18\x30\x30\x30\x30\x18\xc\x0\x41\x36\x1c\x3e\x5d\x8\x8\x0\x18\x18\x7e\x18\x18\x0\x0\x0\x0\x0\x0\x0\x18\x18\xc\x0\x0\x0\x7e\x0\x0\x0\x0\x0\x0\x0\x0\x0\x18\x18\x0\x40\x60\x30\x18\xc\x6\x2\x0" "\x3e\x63\x63\x63\x63\x63\x3e\x0\x8\x8\xc\xe\xc\xc\x1e\x0\x1e\x23\x31\x18\x6\x23\x3f\x0\x1e\x23\x20\x1c\x20\x23\x1e\x0\x23\x23\x23\x23\x3e\x20\x20\x0\x3f\x3\x3\x3f\x20\x21\x1e\x0\x3e\x3\x3\x1f\x23\x23\x1e\x0\x3f\x23\x20\x10\x8\xc\xc\x0" "\x1e\x23\x23\x1e\x23\x23\x1e\x0\x1e\x23\x23\x3e\x20\x23\x1e\x0\x0\x18\x18\x0\x0\x18\x18\x0\x0\x18\x18\x0\x0\x18\x18\xc\x0\x60\x30\x18\xc\x18\x30\x60\x0\x0\x0\x7e\x0\x7e\x0\x0\x0\x6\xc\x18\x30\x18\xc\x6\x3e\x47\x20\x10\x18\x0\x18\x0" "\x3e\x41\x5d\x45\x5d\x41\x3e\x0\x7\xf\x1b\x33\x3f\x33\x33\x0\xf\x1b\x33\x7f\x33\x63\x3f\x0\x7\xf\x1b\x33\x3\x3\x3f\x0\x7\xf\x1b\x33\x63\x63\x3f\x0\x7\xf\x1b\x33\xf\x3\x3f\x0\x7\xf\x1b\x33\xf\x3\x3\x0\xf\x1f\x33\x23\x1b\x23\x3f\x0" "\x3\x3\x13\x33\x3f\x33\x33\x0\x8\x18\x18\x18\x18\x18\x18\x0\x20\x30\x30\x30\x33\x33\x3e\x0\x3\x1b\x33\x33\xf\x33\x33\x0\x3\x3\x3\x3\x3\x3\x7f\x0\x63\x77\x7f\x6b\x63\x63\x63\x0\x3\x17\x3b\x33\x33\x33\x33\x0\x6\xf\x1b\x33\x63\x63\x3e\x0" "\x7\xf\x1b\x33\x3f\x3\x3\x0\xe\x1b\x33\x63\x63\x33\x6e\x0\x7\xf\x1b\x33\x1f\x33\x33\x0\x7\xf\x1b\x3\x1e\x20\x1f\x0\x3\x6\xc\x1c\x2c\xc\xc\x0\x3\x3\x23\x63\x63\x63\x3e\x0\x3\x3\x23\x63\x36\x1c\x8\x0\x3\x3\x23\x6b\x6b\x6b\x3e\x0" "\x22\x63\x36\x8\x36\x63\x22\x0\x3\x13\x33\x36\x3c\x20\x1f\x0\x6\xd\x18\x18\xc\x6\x3f\x0\x38\xc\xc\xc\xc\xc\xc\x38\x2\x6\xc\x18\x30\x60\x40\x0\x1c\x30\x30\x30\x30\x30\x30\x1c\x8\x1c\x36\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xff" "\xc\xc\x18\x0\x0\x0\x0\x0\x0\x0\x0\x3e\x33\x33\x6e\x0\x1\x3\x3\x1f\x33\x33\x1f\x0\x0\x0\x0\x1e\x33\x3\x3e\x0\x30\x30\x30\x3e\x33\x33\x3e\x0\x0\x0\x0\x1e\x33\xf\x3e\x0\x1c\x36\x6\x6\x1f\x6\x6\x0\x0\x0\x0\x1e\x33\x3e\x31\x1e" "\x3\x3\x3\x1f\x33\x33\x33\x0\x0\xc\x0\xc\xc\xc\xc\x0\x0\x30\x0\x30\x30\x33\x33\x1e\x3\x3\x33\x1b\xf\x1b\x33\x0\xe\xc\xc\xc\xc\xc\xc\x0\x0\x0\x0\x37\x7f\x6b\x63\x0\x0\x0\x0\x1d\x33\x33\x33\x0\x0\x0\x0\x1e\x33\x33\x1e\x0" "\x0\x0\x0\x3b\x66\x3e\x6\xf\x0\x0\x0\x6e\x33\x3e\x30\x78\x0\x0\x0\x3c\x66\x6\x6\x0\x0\x0\x0\x3e\x7\x38\x1f\x0\x0\x8\xc\x3f\xc\x6c\x38\x0\x0\x0\x0\x33\x33\x33\x6e\x0\x0\x0\x0\x33\x33\x1e\xc\x0\x0\x0\x0\x6b\x6b\x7f\x36\x0" "\x0\x0\x0\x77\x18\xc\x77\x0\x0\x0\x0\x33\x33\x3e\x30\x1f\x0\x0\x0\x7f\x30\xe\x7f\x0\x38\xc\xc\x7\xc\xc\x38\x0\x18\x18\x18\x0\x18\x18\x18\x0\x7\xc\xc\x38\xc\xc\x7\x0\xff\x0\x0\x0\x0\x0\x0\x0\x0\x8\x1c\x36\x63\x63\x7f\x0" "\xff\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\x1\x80\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\xff" "\x1\x0\x0\x0\x0\x0\x0\x0\x80\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x1\x0\x0\x0\x0\x0\x0\x0\x80\x1\x3\x7\xf\x1f\x3f\x7f\xff\xff\xfe\xfc\xf8\xf0\xe0\xc0\x80\xff\xff\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0" "\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\x3\x3\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\xff\xff\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\xaa\x55\x55\xaa\x0\x0\x0\x0\xe\x7f\xff\x7f\xe\x0\x0\x0\x3c\x7e\xff\x7e\x3c\x0\x0\x0\x70\xfe\xff\xfe\x70\x0\x0\x0\xe0\xfc\xfe\xfc\xe0\x0\x0\x0\x0\xf0\xfc\xf0\x0\x0" "\x0\x0\x0\xc0\xf8\xc0\x0\x0\x0\x0\x0\x80\xf0\x80\x0\x0\x0\x0\x0\x80\xe0\x80\x0\x0\x0\x0\x0\x1\x7\x1\x0\x0\x0\x0\x0\x1\xf\x1\x0\x0\x0\x0\x0\x3\x1f\x3\x0\x0\x0\x0\x0\xf\x3f\xf\x0\x0\x0\x0\x7\x3f\x7f\x3f\x7\x0" "\x24\x18\x24\x18\x24\x18\x24\x18\xff\xff\x3e\x1c\x8\x8\x0\x0\xff\xff\x1c\x8\x8\x0\x0\x0\xff\xff\x3e\x3e\x1c\x1c\x8\x8\xff\xff\x0\x42\x66\x5a\x42\x42\x0\x0\x0\x18\x18\x0\x0\x0\x0\x0\x1\x3\x3\x3\x0\x0\x0\x1\x3\xb\x1b\x7\x6\x0" "\x0\xbb\xbb\x77\x77\x77\xee\xee\x0\x0\x1\x3\x7\x3\x1\x0\x0\x1\xb\x17\x37\x17\x6\x2\x0\xbb\xbb\x77\x77\x77\xee\xee\x0\x0\x1\x1\x1\x1\x0\x0\x0\x0\x3\x3\xf\x7\x2\x0\x0\xbb\xbb\x77\x77\x77\xee\xee\x0\x0\x18\x3c\x3c\x18\x0\x0" "\x0\x0\x1f\x18\x1f\x18\x18\x18\x6c\x6c\x6f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x0\x0\x7f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6f\x60\x7f\x0\x0\x0\x6c\x6c\x6c\x6c\x7f\x0\x0\x0\x18\x18\x1f\x18\x1f\x0\x0\x0\x0\x0\x0\x0\x1f\x18\x18\x18" "\x18\x18\x18\x18\xf8\x0\x0\x0\x18\x18\x18\x18\xff\x0\x0\x0\x0\x0\x0\x0\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\x18\x18\x0\x0\x0\x0\xff\x0\x0\x0\x18\x18\x18\x18\xff\x18\x18\x18\x18\x18\xf8\x18\xf8\x18\x18\x18\x6c\x6c\x6c\x6c\xec\x6c\x6c\x6c" "\x6c\x6c\xec\xc\xfc\x0\x0\x0\x0\x0\xfc\xc\xec\x6c\x6c\x6c\x6c\x6c\xef\x0\xff\x0\x0\x0\x0\x0\xff\x0\xef\x6c\x6c\x6c\x6c\x6c\xec\xc\xec\x6c\x6c\x6c\x0\x0\xff\x0\xff\x0\x0\x0\x6c\x6c\xef\x0\xef\x6c\x6c\x6c\x18\x18\xff\x0\xff\x0\x0\x0" "\x6c\x6c\x6c\x6c\xff\x0\x0\x0\x0\x0\xff\x0\xff\x18\x18\x18\x0\x0\x0\x0\xff\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xfc\x0\x0\x0\x18\x18\xf8\x18\xf8\x0\x0\x0\x0\x0\xf8\x18\xf8\x18\x18\x18\x0\x0\x0\x0\xfc\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xff\x6c\x6c\x6c" "\x18\x18\xff\x18\xff\x18\x18\x18\x18\x18\x18\x18\x1f\x0\x0\x0\x0\x0\x0\x0\xf8\x18\x18\x18\xff\xff\xff\xff\xff\xff\xff\xff\x0\x0\x0\x0\xff\xff\xff\xff\xf\xf\xf\xf\xf\xf\xf\xf\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xff\xff\xff\xff\x0\x0\x0\x0" "\x0\x0\x6e\x3b\x13\x3b\x6e\x0\x0\x1e\x33\x1f\x33\x1f\x3\x3\x0\x3f\x33\x3\x3\x3\x3\x0\x0\x0\x7f\x36\x36\x36\x36\x0\x3f\x33\x6\xc\x6\x33\x3f\x0\x0\x0\x7e\x1b\x1b\x1b\xe\x0\x0\x66\x66\x66\x66\x3e\x6\x3\x0\x6e\x3b\x18\x18\x18\x18\x0" "\x3f\xc\x1e\x33\x33\x1e\xc\x3f\x1c\x36\x63\x7f\x63\x36\x1c\x0\x1c\x36\x63\x63\x36\x36\x77\x0\x38\xc\x18\x3e\x33\x33\x1e\x0\x0\x0\x7e\xdb\xdb\x7e\x0\x0\x60\x30\x7e\xdb\xdb\x7e\x6\x3\x1c\x6\x3\x1f\x3\x6\x1c\x0\x0\x0\x0\x0\x0\xdb\xdb\x0" "\x0\x7e\x0\x7e\x0\x7e\x0\x0\x0\xf8\x8\x8\x8\x8\xf8\x0\x0\xff\x0\x0\x0\x0\xff\x0\x0\x1f\x10\x10\x10\x10\x1f\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x0\x2\x1\x0\x0\x0\x20\x30\x28\x24\x22\xa1\x60\x20\x0\x0\x0\x1\x2\x0\x0\x0" "\x20\x60\xa1\x22\x24\x28\x30\x20\x0\x0\x0\x40\x40\x40\x40\x7f\xff\x81\x81\x81\x81\x80\x80\x80\x0\x0\x0\x20\x20\x11\x11\xe\x38\x44\x44\x82\x82\x0\x0\x0\x0\x0\xfe\x7c\x38\x10\x0\x0\x0\x0\x10\x38\x7c\xfe\x0\x0\x80\xc1\x63\x36\x1c\x8\x0\x0" ), // Font no. 9 FontEntry("FN-LOWER", 8, 8, "\x0\x0\x0\x0\x0\x0\x0\x0\x7e\x81\xa5\x81\xbd\x99\x81\x7e\x7e\xff\xdb\xff\xc3\xe7\xff\x7e\x36\x7f\x7f\x7f\x3e\x1c\x8\x0\x8\x1c\x3e\x7f\x3e\x1c\x8\x0\x1c\x3e\x1c\x7f\x7f\x49\x8\x3e\x0\x8\x1c\x3e\x7f\x3e\x1c\x3e\x0\x0\x18\x3c\x3c\x18\x0\x0" "\xff\xff\xe7\xc3\xc3\xe7\xff\xff\x0\x3c\x66\x42\x42\x66\x3c\x0\xff\xc3\x99\xbd\xbd\x99\xc3\xff\xf0\xe0\xf0\xbe\x33\x33\x33\x1e\x3c\x66\x66\x66\x3c\x18\x7e\x18\xfc\xcc\xfc\xc\xc\xe\xf\x7\xfe\xc6\xfe\xc6\xc6\xe6\x67\x3\x99\x5a\x3c\xe7\xe7\x3c\x5a\x99" "\x1\x7\x1f\x7f\x1f\x7\x1\x0\x40\x70\x7c\x7f\x7c\x70\x40\x0\x18\x3c\x7e\x18\x18\x7e\x3c\x18\x66\x66\x66\x66\x66\x0\x66\x0\xfe\xdb\xdb\xde\xd8\xd8\xd8\x0\x7c\xc6\x1c\x36\x36\x1c\x61\x3f\x0\x0\x0\x0\x7e\x7e\x7e\x0\x18\x3c\x7e\x18\x7e\x3c\x18\xff" "\x18\x3c\x7e\x18\x18\x18\x18\x0\x18\x18\x18\x18\x7e\x3c\x18\x0\x0\x18\x30\x7f\x30\x18\x0\x0\x0\xc\x6\x7f\x6\xc\x0\x0\x0\x0\x3\x3\x3\x7f\x0\x0\x0\x24\x66\xff\x66\x24\x0\x0\x0\x18\x3c\x7e\xff\xff\x0\x0\x0\xff\xff\x7e\x3c\x18\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x18\x3c\x3c\x18\x18\x0\x18\x0\x36\x36\x36\x0\x0\x0\x0\x0\x0\x0\x14\x3e\x14\x3e\x14\x0\x18\x7e\x3\x3e\x60\x3f\x18\x0\x0\x63\x33\x18\xc\x66\x63\x0\x1c\x36\x1c\x6e\x3b\x33\x6e\x0\xc\xc\x6\x0\x0\x0\x0\x0" "\x18\xc\x6\x6\x6\xc\x18\x0\x6\xc\x18\x18\x18\xc\x6\x0\x0\x66\x3c\xff\x3c\x66\x0\x0\x0\x18\x18\x7e\x18\x18\x0\x0\x0\x0\x0\x0\x0\x18\x18\xc\x0\x0\x0\x0\x3e\x0\x0\x0\x0\x0\x0\x0\x0\x18\x18\x0\x60\x30\x18\xc\x6\x3\x1\x0" "\x3e\x73\x7b\x6f\x67\x63\x3e\x0\xc\xe\xc\xc\xc\xc\x3f\x0\x1e\x33\x30\x1c\x6\x33\x3f\x0\x1e\x33\x30\x1c\x30\x33\x1e\x0\x38\x3c\x36\x33\x7f\x30\x78\x0\x3f\x3\x1f\x30\x30\x33\x1e\x0\x1c\x6\x3\x1f\x33\x33\x1e\x0\x3f\x33\x30\x18\xc\xc\xc\x0" "\x1e\x33\x33\x1e\x33\x33\x1e\x0\x1e\x33\x33\x3e\x30\x18\xe\x0\x0\x18\x18\x0\x0\x18\x18\x0\x0\x18\x18\x0\x0\x18\x18\xc\x18\xc\x6\x3\x6\xc\x18\x0\x0\x0\x7e\x0\x7e\x0\x0\x0\x6\xc\x18\x30\x18\xc\x6\x0\x3c\x66\x30\x18\x18\x0\x18\x0" "\x3e\x63\x7b\x7b\x3b\x3\x3e\x0\x0\x0\x1e\x30\x3e\x33\x6e\x0\x7\x6\x6\x3e\x66\x66\x3b\x0\x0\x0\x1e\x33\x3\x33\x1e\x0\x38\x30\x30\x3e\x33\x33\x6e\x0\x0\x0\x1e\x33\x3f\x3\x1e\x0\x1c\x36\x26\xf\x6\x6\xf\x0\x0\x0\x6e\x33\x33\x3e\x30\x1f" "\x7\x6\x36\x6e\x66\x66\x67\x0\xc\x0\xe\xc\xc\xc\x1e\x0\x30\x0\x38\x30\x30\x33\x33\x1e\x7\x6\x66\x36\x1e\x36\x67\x0\xe\xc\xc\xc\xc\xc\x1e\x0\x0\x0\x33\x7f\x7f\x6b\x6b\x0\x0\x0\x1d\x33\x33\x33\x33\x0\x0\x0\x1e\x33\x33\x33\x1e\x0" "\x0\x0\x3b\x66\x66\x3e\x6\xf\x0\x0\x6e\x33\x33\x3e\x30\x78\x0\x0\x3b\x6e\x46\x6\xf\x0\x0\x0\x3e\x3\xe\x38\x1f\x0\x8\xc\x3f\xc\xc\x2c\x18\x0\x0\x0\x33\x33\x33\x33\x6e\x0\x0\x0\x33\x33\x33\x1e\xc\x0\x0\x0\x63\x63\x6b\x7f\x36\x0" "\x0\x0\x63\x36\x1c\x36\x63\x0\x0\x0\x33\x33\x33\x3e\x30\x1f\x0\x0\x3f\x19\xc\x26\x3f\x0\x1e\x6\x6\x6\x6\x6\x1e\x0\x3\x6\xc\x18\x30\x60\x40\x0\x1e\x18\x18\x18\x18\x18\x1e\x0\x8\x1c\x36\x63\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xff" "\xc\xc\x18\x0\x0\x0\x0\x0\x0\x0\x1e\x30\x3e\x33\x6e\x0\x7\x6\x6\x3e\x66\x66\x3b\x0\x0\x0\x1e\x33\x3\x33\x1e\x0\x38\x30\x30\x3e\x33\x33\x6e\x0\x0\x0\x1e\x33\x3f\x3\x1e\x0\x1c\x36\x26\xf\x6\x6\xf\x0\x0\x0\x6e\x33\x33\x3e\x30\x1f" "\x7\x6\x36\x6e\x66\x66\x67\x0\xc\x0\xe\xc\xc\xc\x1e\x0\x30\x0\x38\x30\x30\x33\x33\x1e\x7\x6\x66\x36\x1e\x36\x67\x0\xe\xc\xc\xc\xc\xc\x1e\x0\x0\x0\x33\x7f\x7f\x6b\x6b\x0\x0\x0\x1d\x33\x33\x33\x33\x0\x0\x0\x1e\x33\x33\x33\x1e\x0" "\x0\x0\x3b\x66\x66\x3e\x6\xf\x0\x0\x6e\x33\x33\x3e\x30\x78\x0\x0\x3b\x6e\x46\x6\xf\x0\x0\x0\x3e\x3\xe\x38\x1f\x0\x8\xc\x3f\xc\xc\x2c\x18\x0\x0\x0\x33\x33\x33\x33\x6e\x0\x0\x0\x33\x33\x33\x1e\xc\x0\x0\x0\x63\x63\x6b\x7f\x36\x0" "\x0\x0\x63\x36\x1c\x36\x63\x0\x0\x0\x33\x33\x33\x3e\x30\x1f\x0\x0\x3f\x19\xc\x26\x3f\x0\x38\xc\xc\x7\xc\xc\x38\x0\x18\x18\x18\x0\x18\x18\x18\x0\x7\xc\xc\x38\xc\xc\x7\x0\x6e\x3b\x0\x0\x0\x0\x0\x0\x0\x8\x1c\x36\x63\x63\x7f\x0" "\xff\xff\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\x3\x3\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\xff\xff" "\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x3\x1\x3\x7\xf\x1f\xbf\xff\xff\xfd\xf8\xf0\xe0\xc0\x80\xc0\xff\xff\x7\x7\x7\x7\x7\x7\xff\xff\x0\x0\x0\x0\x0\x0" "\xff\xff\xe0\xe0\xe0\xe0\xe0\xe0\x7\x7\x7\x7\x7\x7\x7\x7\xe0\xe0\xe0\xe0\xe0\xe0\xe0\xe0\x7\x7\x7\x7\x7\x7\xff\xff\x0\x0\x0\x0\x0\x0\xff\xff\xe0\xe0\xe0\xe0\xe0\xe0\xff\xff\x7\x7\x0\x0\x0\x0\x0\x0\xe0\xe0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x7\x7\x0\x0\x0\x0\x0\x0\xe0\xe0\x0\x0\x0\x0\x55\x0\x0\x0\x0\x3f\x3f\x3f\x3f\x3f\x3f\x0\x0\x7e\x7e\x7e\x7e\x7e\x7e\x0\x0\xfc\xfc\xfc\xfc\xfc\xfc\x0\x0\xf8\xf8\xf8\xf8\xf8\xf8\x0\x0\xf0\xf0\xf0\xf0\xf0\xf0\x0" "\x0\xe0\xe0\xe0\xe0\xe0\xe0\x0\x0\xc0\xc0\xc0\xc0\xc0\xc0\x0\x0\x80\x80\x80\x80\x80\x80\x0\x0\x1\x1\x1\x1\x1\x1\x0\x0\x3\x3\x3\x3\x3\x3\x0\x0\x7\x7\x7\x7\x7\x7\x0\x0\xf\xf\xf\xf\xf\xf\x0\x0\x1f\x1f\x1f\x1f\x1f\x1f\x0" "\x3c\x3c\x3c\x3c\x3c\x3c\x3c\x3c\xff\xff\x0\x18\x3c\x7e\xff\x0\xff\xff\x0\x0\x0\x0\x18\x18\xff\xff\x0\x18\x3c\x7e\xff\x18\xff\xff\x0\x42\x66\x5a\x42\x42\x0\x0\x0\x0\x18\x0\x0\x0\x0\x3\x3\x3\x3\x3\x3\x3\x0\x1b\x1b\x1b\x1b\x1b\x1b\x1b" "\x0\xdb\xdb\xdb\xdb\xdb\xdb\xdb\x0\x6\x6\x6\x6\x6\x6\x6\x0\x36\x36\x36\x36\x36\x36\x36\x0\xb6\xb6\xb6\xb6\xb6\xb6\xb6\x0\x1\x1\x1\x1\x1\x1\x1\x0\xd\xd\xd\xd\xd\xd\xd\x0\x6d\x6d\x6d\x6d\x6d\x6d\x6d\x0\x0\x0\x18\x3c\x18\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x38\x44\x82\x0\x0\x0\x0\x0\x0\x0\x0\x41\x22\x1c\x0\x0\xfc\x84\x84\x84\x80\x80\x0\x0\x0\x0\x10\x10\x10\x1f\x0\x0\x80\x80\x80\x8c\xb0\xc0\x0\x0\x1\x6\x18\x0\x0\x0\x0\x3c\x66\x30\x18\x18\x0\x18\x0" "\x3c\x66\x30\x18\x18\x0\x18\x0\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x8\x1c\x8\x0\x0\x0\x0\x0\x18\x3c\x18\x0\x0\x0\x0\x0\x0\xff\x0\x0\x0\x0\x0\x3c\x3c\x3c\x3c\x0\x0\x0\x18\x3c\x7e\x7e\x3c\x18\x0\x0\x3c\x7e\x7e\x7e\x7e\x3c\x0" "\x18\x7e\x7e\xff\xff\x7e\x7e\x18\x3c\x7e\xff\xff\xff\xff\x7e\x3c\x6c\x6c\xef\x0\xff\x0\x0\x0\x0\x0\xff\x0\xef\x6c\x6c\x6c\x6c\x6c\xec\xc\xec\x6c\x6c\x6c\x0\x0\xff\x0\xff\x0\x0\x0\x6c\x6c\xef\x0\xef\x6c\x6c\x6c\x18\x18\xff\x0\xff\x0\x0\x0" "\x6c\x6c\x6c\x6c\xff\x0\x0\x0\x0\x0\xff\x0\xff\x18\x18\x18\x0\x0\x0\x0\xff\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xfc\x0\x0\x0\x18\x18\xf8\x18\xf8\x0\x0\x0\x0\x0\xf8\x18\xf8\x18\x18\x18\x0\x0\x0\x0\xfc\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xff\x6c\x6c\x6c" "\x18\x18\xff\x18\xff\x18\x18\x18\x18\x18\x18\x18\x1f\x0\x0\x0\x0\x0\x0\x0\xf8\x18\x18\x18\xff\xff\xff\xff\xff\xff\xff\xff\x0\x0\x0\x0\xff\xff\xff\xff\xf\xf\xf\xf\xf\xf\xf\xf\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xff\xff\xff\xff\x0\x0\x0\x0" "\x0\x0\x6e\x3b\x13\x3b\x6e\x0\x0\x1e\x33\x1f\x33\x1f\x3\x3\x0\x3f\x33\x3\x3\x3\x3\x0\x0\x0\x7f\x36\x36\x36\x36\x0\x3f\x33\x6\xc\x6\x33\x3f\x0\x0\x0\x7e\x1b\x1b\x1b\xe\x0\x0\x66\x66\x66\x66\x3e\x6\x3\x0\x6e\x3b\x18\x18\x18\x18\x0" "\x3f\xc\x1e\x33\x33\x1e\xc\x3f\x1c\x36\x63\x7f\x63\x36\x1c\x0\x1c\x36\x63\x63\x36\x36\x77\x0\x38\xc\x18\x3e\x33\x33\x1e\x0\x0\x0\x7e\xdb\xdb\x7e\x0\x0\x60\x30\x7e\xdb\xdb\x7e\x6\x3\x1c\x6\x3\x1f\x3\x6\x1c\x0\x0\x0\x0\x0\x0\xdb\xdb\x0" "\x0\x7e\x0\x7e\x0\x7e\x0\x0\x0\xf8\x8\x8\x8\x8\xf8\x0\x0\xff\x0\x0\x0\x0\xff\x0\x0\x1f\x10\x10\x10\x10\x1f\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x0\x2\x1\x0\x0\x0\x20\x30\x28\x24\x22\xa1\x60\x20\x0\x0\x0\x1\x2\x0\x0\x0" "\x20\x60\xa1\x22\x24\x28\x30\x20\x0\x0\x0\x40\x40\x40\x40\x7f\xff\x81\x81\x81\x81\x80\x80\x80\x0\x0\x0\x20\x20\x11\x11\xe\x38\x44\x44\x82\x82\x0\x0\x0\x0\x0\xfe\x7c\x38\x10\x0\x0\x0\x0\x10\x38\x7c\xfe\x0\x0\x80\xc1\x63\x36\x1c\x8\x0\x0" ), // Font no. 10 FontEntry("FN-ROUND", 8, 8, "\x0\x0\x0\x0\x0\x0\x0\x0\x78\x84\xaa\x81\xb9\x9d\x81\x7e\x78\xfc\xd6\xff\xc7\xe3\xff\x7e\x0\x6c\xfe\xfe\x7c\x38\x10\x0\x10\x38\x7c\xfe\x7c\x38\x10\x0\x10\x38\x54\xfe\x54\x10\x38\x0\x10\x38\x7c\xfe\xd6\x10\x7c\x0\x0\x0\x18\x3c\x3c\x18\x0\x0" "\xff\xff\xe7\xc3\xc3\xe7\xff\xff\x0\x3c\x66\x42\x42\x66\x3c\x0\xff\xc3\x99\xbd\xbd\x99\xc3\xff\xe0\xc0\xae\x19\x11\x13\xe\x0\x38\x4c\x46\x46\x3c\x18\x7e\x18\xfc\xcc\xfc\xc\xc\xe\xf\x7\xfe\xc6\xfe\xc6\xc6\xe6\x67\x3\x99\x5a\x3c\xe7\xe7\x3c\x5a\x99" "\x1\x7\x1f\x7f\x1f\x7\x1\x0\x40\x70\x7c\x7f\x7c\x70\x40\x0\x18\x3c\x7e\x18\x18\x7e\x3c\x18\x66\x66\x66\x66\x66\x0\x66\x0\xfe\xdb\xdb\xde\xd8\xd8\xd8\x0\x7c\xc6\x1c\x36\x36\x1c\x61\x3f\x0\x0\x0\x0\x7e\x7e\x7e\x0\x18\x3c\x7e\x18\x7e\x3c\x18\xff" "\x18\x3c\x7e\x18\x18\x18\x18\x0\x18\x18\x18\x18\x7e\x3c\x18\x0\x0\x18\x30\x7f\x30\x18\x0\x0\x0\xc\x6\x7f\x6\xc\x0\x0\x0\x0\x3\x3\x3\x7f\x0\x0\x0\x24\x66\xff\x66\x24\x0\x0\x0\x18\x3c\x7e\xff\xff\x0\x0\x0\xff\xff\x7e\x3c\x18\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x30\x38\x38\x18\x18\x0\xc\x0\x6c\x36\x36\x0\x0\x0\x0\x0\x0\x6c\x6c\xff\x66\xff\x36\x36\x0\x10\x78\x16\x3c\x48\x3e\x8\x0\x6e\x35\x1a\x2c\x56\x3b\x0\x30\x0\x70\xc\x6\x3c\x0\x18\xc\xc\x6\x0\x0\x0\x0\x0" "\x70\x1c\x6\x6\x6\xc\x18\x0\x18\x30\x60\x60\x60\x38\xe\x0\x0\x10\x92\x7c\x38\x6c\x82\x0\x0\x0\x18\x18\x7e\x18\x18\x0\x0\x0\x0\x0\x20\x20\x30\x18\x0\x0\x0\x0\xff\x0\x0\x0\x0\x0\x0\x0\x0\x30\x38\x0\x60\x30\x18\xc\x6\x3\x1\x0" "\x30\x6c\x66\x63\x63\x63\x3e\x0\x30\x38\x30\x30\x18\x18\x3c\x0\x30\x6c\x66\x30\x18\x4c\x3e\x0\x30\x6c\x66\x30\x60\x66\x3c\x0\x60\x68\x6c\x66\x3e\x30\x30\x0\x70\xc\x6\x3e\x40\x62\x3c\x0\x70\x18\xc\x36\x4e\x46\x3c\x0\x70\x6e\x60\x30\x18\x18\xc\x0" "\x70\x58\x4c\x38\x44\x66\x3c\x0\x30\x4c\x66\x3c\x30\x18\xc\x0\x0\x0\x30\x30\x0\x18\x18\x0\x0\x0\x30\x30\x0\x18\x18\xc\x70\x1c\x6\x3\x6\xc\x18\x0\x0\x0\x0\xfc\x0\x7e\x0\x0\x18\x30\x60\xc0\x60\x38\xe\x0\x38\x4c\x66\x30\x30\x0\x18\x0" "\x78\x84\x9a\xa5\x79\x1\x7e\x0\x60\x78\x64\x66\x7f\x63\x63\x0\x30\x6c\x66\x37\x3b\x63\x3f\x0\x30\x6c\x66\x3\x3\x3\x7e\x0\x30\x6c\xc6\xc3\xc3\x63\x3f\x0\x30\x6c\x6\x3f\x3\x43\x3f\x0\x60\xd8\xc\x3f\x6\x6\x6\x0\x30\x6c\x6\x3\x73\x43\x3e\x0" "\x64\x64\x66\x3f\x33\x33\x33\x0\x1c\x18\x18\x1c\xc\xc\xc\x0\x60\x60\x60\x32\x33\x33\x1f\x0\x4c\x66\x36\x1f\x33\x63\x63\x0\x10\xc\x6\x3\x3\x3\x7f\x0\x44\x6e\x6e\x7a\x6b\x6b\x63\x0\x44\x6e\x6e\x6a\x7b\x73\x63\x0\x30\x6c\x66\x63\x63\x77\x3e\x0" "\x30\x6c\x66\x63\x3f\x3\x3\x0\x30\x6c\x66\x63\x63\x3b\x6e\x0\x30\x6c\x66\x63\x3f\x63\x63\x0\x30\x6c\x6\x7\x7e\x40\x3e\x0\x70\x1e\x18\x18\xc\xc\xe\x0\x68\x6c\x66\x63\x63\x63\x7e\x0\x68\x6c\x66\x63\x63\x36\x1c\x0\x68\x6c\x66\x63\x6b\x6b\x3e\x0" "\x80\xc3\x66\x1c\x38\xe6\xc3\x0\x6c\x66\x63\x33\x1e\xc\xc\x0\x7c\x4e\x63\x38\xc\x46\x3f\x0\x38\xc\xc\x6\x6\x6\x1e\x0\x4\xc\xc\x18\x30\x60\xc0\x0\x1c\x30\x30\x30\x18\x18\x1e\x0\x18\x2c\x6e\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xff" "\x18\xc\xc\x0\x0\x0\x0\x0\x0\x0\x70\x4c\x46\x66\x5c\x0\xc\x6\x36\x4e\x46\x26\x1c\x0\x0\x0\x70\xc\x6\x46\x3c\x0\x60\x60\x78\x64\x46\x46\x3c\x0\x0\x0\x70\x4c\x3e\x6\x3c\x0\x30\x28\xc\x6\x1f\x6\x6\x6\x0\x0\x70\x4c\x66\x7c\x60\x3c" "\x18\xc\x4\x36\x6e\x66\x66\x0\x0\x18\x0\x18\xc\xc\xc\x0\x0\x18\x0\x18\xc\xc\xc\x7\x8\xc\x64\x36\x2e\x66\x66\x0\x18\x18\x18\x18\xc\xc\xc\x0\x0\x0\x1a\x3e\x6b\x6b\x63\x0\x0\x0\x34\x7c\x66\x66\x66\x0\x0\x0\x30\x6c\x66\x66\x3c\x0" "\x0\x0\x34\x4c\x44\x3e\x6\x6\x0\x0\x58\x24\x26\x3e\x60\x60\x0\x0\x66\x1c\xe\x6\x6\x0\x0\x0\x70\xe\x3c\x60\x3e\x0\x30\x30\x18\x78\x1e\x18\xc\xc\x0\x0\x68\x6c\x66\x36\x6c\x0\x0\x0\x68\x6c\x66\x34\x18\x0\x0\x0\x64\x66\x63\x6b\x36\x0" "\x0\xc0\x63\x34\x18\x2c\xc6\x3\x0\x0\x68\x6c\x66\x3e\x30\x1e\x0\x0\x78\x44\x30\xc\x7e\x0\x20\x30\x18\xc\xc\x18\x10\x0\x30\x30\x30\x0\x18\x18\x18\x0\x8\x18\x30\x30\x18\xc\x4\x0\xff\x0\x0\x0\x0\x0\x0\x0\x0\x0\x8\x1c\x36\x7f\x0\x0" "\xff\xf\x3\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\xe0\xc0\xc0\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\x1\x80\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x3\x3\x7\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\xc0\xf0\xff" "\x7\x0\x0\x0\x0\x0\x0\x0\x80\x80\x80\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x1\x1\x1\x0\x0\x0\x0\x0\x0\x0\xe0\x1\x3\x7\xf\x1f\x3f\x7f\xff\xff\xfe\xfc\xf8\xf0\xe0\xc0\x80\xff\xff\x3f\xf\x7\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0" "\xff\xff\xf8\xf0\xe0\xe0\xc0\xc0\x3\x3\x3\x3\x3\x3\x3\x3\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x7\x7\xf\x1f\xff\xff\x0\x0\x0\x0\x0\x0\xff\xff\xc0\xc0\xc0\xe0\xf0\xfc\xff\xff\x3\x1\x0\x0\x0\x0\x0\x0\xc0\x80\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x1\x3\x0\x0\x0\x0\x0\x0\x80\xc0\x0\x0\x0\xff\xff\x0\x0\x0\x0\x0\x1c\x3f\x7e\x3f\x1c\x0\x0\x0\x18\x7e\xff\x7e\x18\x0\x0\x0\x38\xfc\x7e\xfc\x38\x0\x0\x0\xe0\x78\x3c\x78\xe0\x0\x0\x0\xc0\x70\x38\x70\xc0\x0" "\x0\x0\x0\xc0\x70\xc0\x0\x0\x0\x0\x0\x80\x40\x80\x0\x0\x0\x0\x80\x0\x0\x0\x80\x0\x0\x0\x1\x0\x0\x0\x1\x0\x0\x0\x0\x1\x2\x1\x0\x0\x0\x0\x0\x3\xe\x3\x0\x0\x0\x0\x3\x6\x1c\x6\x3\x0\x0\x0\x7\x1e\x3c\x1e\x7\x0" "\x18\x18\x18\x18\x18\x18\x18\x18\xff\xff\x0\x18\x3c\x7e\xff\x0\xff\xff\x0\x0\x0\x0\x18\x18\xff\xff\x0\x18\x3c\x7e\xff\x18\xff\xff\x0\x42\x66\x5a\x42\x42\x0\x0\x0\x18\x18\x0\x0\x0\x0\x1\x0\x3\x3\x0\x1\x0\x0\xd\x0\x1f\x1f\x0\xd\x0" "\x0\x6d\x0\xff\xff\x0\x6d\x0\x0\x3\x0\x7\x7\x0\x3\x0\x0\x1b\x0\x3f\x3f\x0\x1b\x0\x0\xdb\x0\xff\xff\x0\xdb\x0\x0\x0\x0\x1\x1\x0\x0\x0\x0\x6\x0\xf\xf\x0\x6\x0\x0\xb6\x0\xff\xff\x0\xb6\x0\x0\x0\x0\x0\x7f\x6c\x6c\x6c" "\x0\x0\x1f\x18\x1f\x18\x18\x18\x6c\x6c\x6f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x0\x0\x7f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6f\x60\x7f\x0\x0\x0\x6c\x6c\x6c\x6c\x7f\x0\x0\x0\x18\x18\x1f\x18\x1f\x0\x0\x0\x0\x0\x0\x0\x1f\x18\x18\x18" "\x18\x18\x18\x18\xf8\x0\x0\x0\x18\x18\x18\x18\xff\x0\x0\x0\x0\x0\x0\x0\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\x18\x18\x0\x0\x0\x0\xff\x0\x0\x0\x18\x18\x18\x18\xff\x18\x18\x18\x18\x18\xf8\x18\xf8\x18\x18\x18\x6c\x6c\x6c\x6c\xec\x6c\x6c\x6c" "\x6c\x6c\xec\xc\xfc\x0\x0\x0\x0\x0\xfc\xc\xec\x6c\x6c\x6c\x6c\x6c\xef\x0\xff\x0\x0\x0\x0\x0\xff\x0\xef\x6c\x6c\x6c\x6c\x6c\xec\xc\xec\x6c\x6c\x6c\x0\x0\xff\x0\xff\x0\x0\x0\x6c\x6c\xef\x0\xef\x6c\x6c\x6c\x18\x18\xff\x0\xff\x0\x0\x0" "\x6c\x6c\x6c\x6c\xff\x0\x0\x0\x0\x0\xff\x0\xff\x18\x18\x18\x0\x0\x0\x0\xff\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xfc\x0\x0\x0\x18\x18\xf8\x18\xf8\x0\x0\x0\x0\x0\xf8\x18\xf8\x18\x18\x18\x0\x0\x0\x0\xfc\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xff\x6c\x6c\x6c" "\x18\x18\xff\x18\xff\x18\x18\x18\x18\x18\x18\x18\x1f\x0\x0\x0\x0\x0\x0\x0\xf8\x18\x18\x18\xff\xff\xff\xff\xff\xff\xff\xff\x0\x0\x0\x0\xff\xff\xff\xff\xf\xf\xf\xf\xf\xf\xf\xf\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xff\xff\xff\xff\x0\x0\x0\x0" "\x0\x0\x6e\x3b\x13\x3b\x6e\x0\x0\x1e\x33\x1f\x33\x1f\x3\x3\x0\x3f\x33\x3\x3\x3\x3\x0\x0\x0\x7f\x36\x36\x36\x36\x0\x3f\x33\x6\xc\x6\x33\x3f\x0\x0\x0\x7e\x1b\x1b\x1b\xe\x0\x0\x66\x66\x66\x66\x3e\x6\x3\x0\x6e\x3b\x18\x18\x18\x18\x0" "\x3f\xc\x1e\x33\x33\x1e\xc\x3f\x1c\x36\x63\x7f\x63\x36\x1c\x0\x1c\x36\x63\x63\x36\x36\x77\x0\x38\xc\x18\x3e\x33\x33\x1e\x0\x0\x0\x7e\xdb\xdb\x7e\x0\x0\x60\x30\x7e\xdb\xdb\x7e\x6\x3\x1c\x6\x3\x1f\x3\x6\x1c\x0\x0\x0\x0\x0\x0\xdb\xdb\x0" "\x0\x7e\x0\x7e\x0\x7e\x0\x0\x0\xf8\x8\x8\x8\x8\xf8\x0\x0\xff\x0\x0\x0\x0\xff\x0\x0\x1f\x10\x10\x10\x10\x1f\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x0\x2\x1\x0\x0\x0\x20\x30\x28\x24\x22\xa1\x60\x20\x0\x0\x0\x1\x2\x0\x0\x0" "\x20\x60\xa1\x22\x24\x28\x30\x20\x0\x0\x0\x40\x40\x40\x40\x7f\xff\x81\x81\x81\x81\x80\x80\x80\x0\x0\x0\x20\x20\x11\x11\xe\x38\x44\x44\x82\x82\x0\x0\x0\x0\x0\xfe\x7c\x38\x10\x0\x0\x0\x0\x10\x38\x7c\xfe\x0\x0\x80\xc1\x63\x36\x1c\x8\x0\x0" ), // Font no. 11 FontEntry("GRAFPAPR", 8, 8, "\x0\x0\x0\x0\x0\x0\x0\x0\x7e\x81\xa5\x81\xbd\x99\x81\x7e\x7e\xff\xdb\xff\xff\xc3\xe7\x7e\x0\x77\x7f\x7f\x3e\x1c\x8\x0\x8\x1c\x3e\x7f\x3e\x1c\x8\x0\x18\x3c\x18\xff\xff\x52\x18\x0\x8\x1c\x3e\x7f\x7f\x49\x1c\x0\x0\x0\x18\x3c\x18\x0\x0\x0" "\xff\xff\xe7\xc3\xe7\xff\xff\xff\x0\x3c\x42\x81\x81\x42\x3c\x0\xff\xc3\xbd\x7e\x7e\xbd\xc3\xff\xf8\xe0\xb0\x3e\x63\x63\x3e\x0\x0\x7e\xc3\xc3\x7e\x18\x7e\x18\x20\x60\xe0\x20\x20\x3f\x1f\x0\x30\x50\xb0\xd0\x9f\x8f\xf0\xf0\x81\xc2\xbc\xe4\xa4\xfc\xea\xff" "\x0\x0\x6\x1e\x7e\x1e\x6\x0\x0\x0\x60\x78\x7e\x78\x60\x0\x18\x7e\x18\x18\x18\x18\x7e\x18\x66\x66\x66\x66\x66\x0\x66\x0\xff\x6d\x6e\x6c\x6c\x6c\x6c\x0\x7e\x81\x3e\x42\x42\x7c\x81\x7e\x0\x0\x0\x7e\x7e\x0\x0\x0\x18\x7e\x18\x18\x7e\x18\x0\xff" "\x18\x7e\x18\x18\x18\x18\x18\x0\x18\x18\x18\x18\x18\x7e\x18\x0\x0\x20\x60\xff\x60\x20\x0\x0\x0\x4\x6\xff\x6\x4\x0\x0\x0\x0\x0\x3\x3\x3\xff\x0\x0\x24\x66\xff\x66\x24\x0\x0\x0\x0\x8\x1c\x3e\x7f\x0\x0\x0\x0\x0\x7f\x3e\x1c\x8\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\xc\xc\xc\xc\xc\x0\xc\x0\x66\x66\x0\x0\x0\x0\x0\x0\xa\x1f\xa\x1f\xa\x0\x0\x0\x3e\x4b\xb\x3e\x68\x6b\x3e\x8\xc7\x65\x37\x18\xec\xa6\xe3\x0\x1c\x32\x1c\xa2\x63\x73\x5e\x80\x30\x30\x18\x0\x0\x0\x0\x0" "\x8\x6\x3\x3\x3\x6\x8\x0\x8\x30\x60\x60\x60\x30\x8\x0\x0\x2a\x1c\x7f\x1c\x2a\x0\x0\x0\x18\x18\x7e\x18\x18\x0\x0\x0\x0\x0\x0\x0\x0\x18\xe\x0\x0\x0\x7e\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x30\x0\x80\xc0\x60\x30\x18\xc\x6\x3" "\x0\x1c\x22\x22\x22\x22\x1c\x0\x18\x1c\x1e\x18\x18\x18\x3e\x0\x3e\x63\x60\x30\xc\x6\x7f\x0\x3e\x63\x60\x3c\x60\x63\x3e\x0\x70\x78\x6c\x66\x7f\x60\x60\x0\x7f\x3\x3\x3f\x60\x60\x3f\x0\x3e\x63\x3\x3f\x63\x63\x3e\x0\x7f\x60\x30\x18\xc\xc\xc\x0" "\x3e\x63\x63\x3e\x63\x63\x3e\x0\x3e\x63\x63\x7e\x60\x63\x3e\x0\x0\xc\x0\x0\x0\xc\x0\x0\x0\xc\x0\x0\x0\xc\x4\x0\x0\x38\xc\x6\xc\x38\x0\x0\x0\x0\x7e\x0\x7e\x0\x0\x0\x0\xe\x18\x30\x18\xe\x0\x0\x3e\x63\x30\x18\xc\x0\xc\x0" "\x3e\x41\x5d\x55\x7d\x1\x3e\x0\x0\x1c\x26\x43\x7f\x43\x43\x0\x0\x3f\x63\x3f\x63\x63\x3f\x0\x0\x3e\x63\x3\x3\x63\x3e\x0\x0\x3f\x63\x63\x63\x63\x3f\x0\x0\x7f\x3\x1f\x3\x3\x7f\x0\x0\x7f\x43\x1f\x13\x3\x3\x0\x0\x3e\x63\x3\x7b\x63\x5e\x0" "\x63\x63\x63\x7f\x63\x63\x63\x0\x7e\x18\x18\x18\x18\x18\x7e\x0\x78\x30\x30\x30\x30\x33\x1e\x0\x63\x33\x1b\xf\x1b\x33\x63\x0\xf\x6\x6\x6\x6\x46\x7f\x0\x63\x77\x7f\x6b\x6b\x63\x63\x0\x63\x67\x6f\x7b\x73\x63\x63\x0\x3e\x63\x63\x63\x63\x63\x3e\x0" "\x3f\x66\x66\x3e\x6\x6\xf\x0\x3e\x63\x63\x63\x7b\x73\x3e\x60\x3f\x66\x66\x3e\x66\x66\x67\xc0\x3e\x43\x3\x3e\x60\x63\x3e\x0\x7e\x18\x18\x18\x18\x18\x18\x0\x63\x63\x63\x63\x63\x63\x3e\x0\x63\x63\x63\x63\x63\x36\x1c\x0\x63\x63\x6b\x6b\x6b\x77\x63\x0" "\x63\x36\x1c\x8\x1c\x36\x63\x0\x41\x63\x36\x1c\x8\x8\x1c\x0\x7f\x61\x30\x18\xc\x46\x7f\x0\x38\x18\x18\x18\x18\x18\x18\x38\x3\x6\xc\x18\x30\x60\xc0\x80\xe\xc\xc\xc\xc\xc\xc\xe\x8\x1c\x36\x63\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xff" "\xc\xc\x18\x0\x0\x0\x0\x0\x0\x0\x3e\x60\x7e\x63\x7e\x0\x3\x3\x3f\x63\x63\x63\x3f\x0\x0\x0\x3e\x63\x3\x63\x3e\x0\x60\x60\x7e\x63\x63\x63\x7e\x0\x0\x0\x3e\x63\x7f\x3\x3e\x0\x3c\x66\x6\x3f\x6\x6\x6\x0\x0\x0\xbe\x63\x63\x7e\x60\x3e" "\x3\x3\x3f\x63\x63\x63\x63\x0\x18\x0\x1c\x18\x18\x18\x3c\x0\x30\x0\x38\x30\x30\x30\x33\x1e\x3\x3\x63\x1b\xf\x1b\x63\x0\x1c\x18\x18\x18\x18\x18\x38\x0\x0\x0\x63\x7f\x6b\x6b\x63\x0\x0\x0\x3f\x63\x63\x63\x63\x0\x0\x0\x3e\x63\x63\x63\x3e\x0" "\x0\x0\x3f\x63\x63\x3f\x3\x3\x0\x0\x7e\x63\x63\x7e\x60\xe0\x0\x0\x7b\x6e\x66\x6\x6\x0\x0\x0\x7e\x3\x3e\x60\x3f\x0\x18\x18\x7e\x18\x18\x18\x78\x0\x0\x0\x63\x63\x63\x63\x7e\x0\x0\x0\x63\x63\x63\x36\x1c\x0\x0\x0\x63\x6b\x6b\x77\x63\x0" "\x0\x0\x63\x36\x1c\x36\x63\x0\x0\x0\x63\x63\x63\x7e\x60\x3f\x0\x0\x7f\x30\x8\x46\x7f\x0\x70\x18\x18\xe\x18\x18\x70\x0\x18\x18\x18\x0\x18\x18\x18\x0\x7\xc\xc\x38\xc\xc\x7\x0\xe\xd9\x70\x0\x0\x0\x0\x0\x0\x0\x8\x14\x22\x7f\x0\x0" "\xff\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\x1\x80\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\xff" "\x1\x0\x0\x0\x0\x0\x0\x0\x80\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x1\x0\x0\x0\x0\x0\x0\x0\x80\x1\x3\x7\xf\x1f\x3f\x7f\xff\xff\xfe\xfc\xf8\xf0\xe0\xc0\x80\xff\xff\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0" "\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\x3\x3\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\xff\xff\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\x0\x55\x0\x0\x0\x0\x0\x3f\x3f\x3f\x3f\x3f\x3f\x0\x0\x7e\x7e\x7e\x7e\x7e\x7e\x0\x0\xfc\xfc\xfc\xfc\xfc\xfc\x0\x0\xf8\xf8\xf8\xf8\xf8\xf8\x0\x0\xf0\xf0\xf0\xf0\xf0\xf0\x0" "\x0\xe0\xe0\xe0\xe0\xe0\xe0\x0\x0\xc0\xc0\xc0\xc0\xc0\xc0\x0\x0\x80\x80\x80\x80\x80\x80\x0\x0\x1\x1\x1\x1\x1\x1\x0\x0\x3\x3\x3\x3\x3\x3\x0\x0\x7\x7\x7\x7\x7\x7\x0\x0\xf\xf\xf\xf\xf\xf\x0\x0\x1f\x1f\x1f\x1f\x1f\x1f\x0" "\x55\x6b\x55\x6b\x55\x6b\x55\x6b\xff\xff\x0\x0\x0\x8\x1c\x3e\xff\xff\x0\x0\x0\x0\x0\x7f\xff\xff\x0\x0\x8\x1c\x3e\x7f\xff\xff\x0\xc3\xe7\xff\xdb\xc3\xaa\xd5\xaa\xd5\xaa\xd5\xaa\xff\x0\x3\x3\x3\x3\x3\x3\x3\x0\x1b\x1b\x1b\x1b\x1b\x1b\x1b" "\x0\xdb\xdb\xdb\xdb\xdb\xdb\xdb\x0\x6\x6\x6\x6\x6\x6\x6\x0\x36\x36\x36\x36\x36\x36\x36\x0\xb6\xb6\xb6\xb6\xb6\xb6\xb6\x0\x1\x1\x1\x1\x1\x1\x1\x0\xd\xd\xd\xd\xd\xd\xd\x0\x6d\x6d\x6d\x6d\x6d\x6d\x6d\x0\x0\x18\x3c\x3c\x18\x0\x0" "\x0\x0\x0\x1f\x18\x1f\x18\x18\x6c\x6c\x6c\x6f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x0\x0\x0\x7f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6f\x60\x7f\x0\x0\x6c\x6c\x6c\x7f\x0\x0\x0\x0\x18\x18\x18\x1f\x18\x1f\x0\x0\x0\x0\x0\x1f\x18\x18\x18\x18" "\x18\x18\x18\xf8\x0\x0\x0\x0\x18\x18\x18\xff\x0\x0\x0\x0\x0\x0\x0\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\x18\x18\x18\x0\x0\x0\x0\xff\x0\x0\x0\x18\x18\x18\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\xf8\x18\x18\x6c\x6c\x6c\xec\x6c\x6c\x6c\x6c" "\x6c\x6c\x6c\xec\xc\xfc\x0\x0\x0\x0\x0\xfc\xc\xec\x6c\x6c\x6c\x6c\x6c\xef\x0\xff\x0\x0\x0\x0\x0\xff\x0\xef\x6c\x6c\x6c\x6c\x6c\xec\xc\xec\x6c\x6c\x0\x0\x0\xff\x0\xff\x0\x0\x6c\x6c\x6c\xef\x0\xef\x6c\x6c\x18\x18\x18\xff\x0\xff\x0\x0" "\x6c\x6c\x6c\xff\x0\x0\x0\x0\x0\x0\x0\xff\x0\xff\x18\x18\x0\x0\x0\xff\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xfc\x0\x0\x0\x0\x18\x18\x18\xf8\x18\xf8\x0\x0\x0\x0\x0\xf8\x18\xf8\x18\x18\x0\x0\x0\xfc\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xff\x6c\x6c\x6c\x6c" "\x18\x18\x18\xff\x18\xff\x18\x18\x18\x18\x18\x1f\x0\x0\x0\x0\x0\x0\x0\xf8\x18\x18\x18\x18\xff\xff\xff\xff\xff\xff\xff\xff\x0\x0\x0\x0\xff\xff\xff\xff\xf\xf\xf\xf\xf\xf\xf\xf\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xff\xff\xff\xff\x0\x0\x0\x0" "\x0\x0\xee\x19\x19\xee\x0\x0\x38\x6c\x66\x3f\x63\x63\x3f\x3\x7f\x46\x6\x6\x6\x6\x6\x0\x0\x0\xff\x66\x66\x66\x66\x0\x7f\x46\xc\x18\xc\x46\x7f\x0\x0\x0\xfc\x66\x63\x33\x1e\x0\x0\x0\xcc\xcc\xcc\x7c\xc\xf\x0\x0\xff\x18\x18\x18\x18\x0" "\x3c\x18\x3c\x66\x66\x3c\x18\x3c\x0\x3e\x63\x7f\x63\x3e\x0\x0\x0\x7e\xc3\xc3\xc3\x66\xe7\x0\x78\x98\x3c\x66\x63\x33\x1e\x0\x0\x0\x66\x99\x99\x66\x0\x0\x0\xc0\x3e\x73\x67\x3e\x3\x0\x0\x7c\x3\x7f\x3\x7c\x0\x0\x0\x0\x0\x0\x0\xdb\xdb\x0" "\x0\x7e\x0\x7e\x0\x7e\x0\x0\x0\xf8\x8\x8\x8\x8\xf8\x0\x0\xff\x0\x0\x0\x0\xff\x0\x0\x1f\x10\x10\x10\x10\x1f\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x0\x2\x1\x0\x0\x0\x20\x30\x28\x24\x22\xa1\x60\x20\x0\x0\x0\x1\x2\x0\x0\x0" "\x20\x60\xa1\x22\x24\x28\x30\x20\x0\x0\x0\x40\x40\x40\x40\x7f\xff\x81\x81\x81\x81\x80\x80\x80\x0\x0\x0\x20\x20\x11\x11\xe\x38\x44\x44\x82\x82\x0\x0\x0\x0\x0\xfe\x7c\x38\x10\x0\x0\x0\x0\x10\x38\x7c\xfe\x0\x0\x80\xc1\x63\x36\x1c\x8\x0\x0" ), // Font no. 12 FontEntry("GTHS-BUG", 8, 8, "\x0\x0\x0\x0\x0\x0\x0\x0\x7e\x81\xa5\x81\xbd\x99\x81\x7e\x7e\xff\xdb\xff\xc3\xe7\xff\x7e\x36\x7f\x7f\x7f\x3e\x1c\x8\x0\x8\x1c\x3e\x7f\x3e\x1c\x8\x0\x1c\x3e\x1c\x7f\x7f\x3e\x1c\x3e\x8\x8\x1c\x3e\x7f\x3e\x1c\x3e\x0\x0\x18\x3c\x3c\x18\x0\x0" "\xff\xff\xe7\xc3\xc3\xe7\xff\xff\x0\x3c\x66\x42\x42\x66\x3c\x0\xff\xc3\x99\xbd\xbd\x99\xc3\xff\xf0\xe0\xf0\xbe\x33\x33\x33\x1e\x3c\x66\x66\x66\x3c\x18\x7e\x18\xfc\xcc\xfc\xc\xc\xe\xf\x7\xfe\xc6\xfe\xc6\xc6\xe6\x67\x3\x0\x0\x0\x3c\x0\x3c\x0\x0" "\x1\x7\x1f\x7f\x1f\x7\x1\x0\x40\x70\x7c\x7f\x7c\x70\x40\x0\x18\x3c\x7e\x18\x18\x7e\x3c\x18\x66\x66\x66\x66\x66\x0\x66\x0\x0\x7c\x56\x56\x7c\x50\x50\x0\x3c\x66\x1c\x36\x36\x1c\x33\x1e\x0\x0\x0\x0\x7e\x7e\x7e\x0\x18\x3c\x7e\x18\x7e\x3c\x18\xff" "\x18\x3c\x7e\x18\x18\x18\x18\x0\x18\x18\x18\x18\x7e\x3c\x18\x0\x0\x18\x30\x7f\x30\x18\x0\x0\x0\xc\x6\x7f\x6\xc\x0\x0\x0\x0\x3\x3\x3\x7f\x0\x0\x0\x24\x66\xff\x66\x24\x0\x0\x0\x18\x3c\x66\xdb\xbd\x0\x0\x0\xbd\xdb\x66\x3c\x18\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x1c\x1c\x1c\x1c\x1c\x0\x1c\x0\x36\x36\x36\x0\x0\x0\x0\x0\x36\x36\x7f\x36\x7f\x36\x36\x0\xc\x3e\x3\x1e\x30\x1f\xc\x0\x0\x63\x33\x18\xc\x66\x63\x0\x1c\x36\x1c\x6e\x3b\x33\x6e\x0\x6\x6\x3\x0\x0\x0\x0\x0" "\x18\xc\x6\x6\x6\xc\x18\x0\x6\xc\x18\x18\x18\xc\x6\x0\x0\x66\x3c\xff\x3c\x66\x0\x0\x0\xc\xc\x3f\xc\xc\x0\x0\x0\x0\x0\x0\x0\x1c\x18\xc\x0\x0\x0\x3f\x0\x0\x0\x0\x0\x0\x0\x0\x0\x1c\x1c\x0\x60\x30\x18\xc\x6\x3\x1\x0" "\x3e\x63\x63\x6b\x63\x63\x3e\x0\x18\x1e\x18\x18\x18\x18\x7e\x0\x3e\x60\x60\x3e\x3\x3\x7f\x0\x3e\x60\x60\x3c\x60\x60\x3f\x0\x68\x6c\x66\x63\x7f\x60\x60\x0\x7f\x3\x1f\x30\x60\x60\x3f\x0\x3c\x6\x3\x3b\x63\x63\x3e\x0\x7f\x60\x30\x30\x18\x18\xc\x0" "\x7e\x63\x63\x3e\x63\x63\x3e\x0\x3e\x63\x63\x6e\x60\x30\x1e\x0\x0\x1c\x1c\x0\x0\x1c\x1c\x0\x0\x1c\x1c\x0\x0\x1c\x18\xc\x18\xc\x6\x3\x6\xc\x18\x0\x0\x0\x3f\x0\x0\x3f\x0\x0\x6\xc\x18\x30\x18\xc\x6\x0\x3f\x60\x30\x18\x18\x0\x18\x0" "\x3e\x63\x7b\x7b\x7b\x3\x1e\x0\x1e\x30\x63\x63\x7f\x63\x63\x40\x3f\x63\x63\x3b\x63\x33\x1f\x0\x7e\x3\x3\x3\x3\x6\x7c\x0\x3f\x63\x63\x63\x63\x33\x1f\x0\x3e\x63\x3\x3b\x3\x3\x7e\x0\x7c\x6\x6\x3f\x6\x6\x6\x0\x7e\x3\x3\x73\x63\x66\x7c\x40" "\x63\x63\x3\x7f\x63\x63\x63\x40\x3c\x0\x18\x18\x18\x18\x3c\x0\x78\x0\x60\x60\x60\x30\x1f\x0\x63\x33\x1b\xf\x33\x63\x63\x40\x3\x3\x3\x3\x3\x3\x7f\x0\x3f\x63\x6b\x6b\x6b\x6b\x63\x40\x1f\x30\x63\x63\x63\x63\x63\x40\x3e\x63\x63\x63\x63\x66\x3c\x0" "\x3f\x63\x63\x33\x1f\x3\x3\x0\x3e\x63\x63\x63\x6b\x2e\x18\x70\x3f\x63\x63\x33\x1f\x33\x63\x40\x7e\x3\x6\x3c\x60\x60\x3f\x0\x7e\x18\x18\x18\x18\x18\x18\x0\x63\x63\x63\x63\x63\x6\x7c\x0\x63\x63\x63\x63\x36\x1c\x8\x0\x6b\x6b\x6b\x6b\x6b\x63\x3f\x0" "\x43\x63\x36\x1c\x36\x63\x63\x40\x63\x63\x63\x66\x7c\x63\x3e\x0\x7f\x60\x30\x18\xc\x6\x7f\x0\x1e\x6\x6\x6\x6\x6\x1e\x0\x3\x6\xc\x18\x30\x60\x40\x0\x1e\x18\x18\x18\x18\x18\x1e\x0\x8\x1c\x36\x63\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xff" "\xc\xc\x18\x0\x0\x0\x0\x0\x0\x0\x7e\x63\x63\x63\x6e\x0\x3\x3\x1f\x33\x63\x63\x3b\x0\x0\x0\x7e\x63\x3\x6\x7c\x0\x60\x60\x7c\x66\x63\x63\x6e\x0\x0\x0\x7e\x63\x7f\x3\x7e\x0\x7c\x6\x6\x1f\x6\x6\x6\x0\x0\x0\x7e\x63\x63\x6e\x60\x3f" "\x3\x3\x1f\x33\x63\x63\x63\x0\x18\x0\x18\x18\x18\x18\x18\x0\x30\x0\x30\x30\x30\x30\x30\x1f\x3\x3\x7f\xf\x1b\x33\x63\x0\x10\x18\x18\x18\x18\x18\x18\x0\x0\x0\x3f\x6b\x6b\x6b\x63\x0\x0\x0\x3f\x63\x63\x63\x63\x0\x0\x0\x3e\x63\x63\x66\x3c\x0" "\x0\x0\x3b\x63\x63\x3f\x3\x3\x0\x0\x6e\x63\x63\x7e\x60\x60\x0\x0\x7b\xf\x7\x3\x3\x0\x0\x0\x7e\x3\x3e\x60\x3f\x0\x8\xc\x3f\xc\xc\xc\x38\x0\x0\x0\x63\x63\x63\x63\x6e\x0\x0\x0\x63\x63\x36\x1c\x8\x0\x0\x0\x63\x6b\x7f\x3e\x14\x0" "\x0\x0\x63\x36\x1c\x36\x63\x0\x0\x0\x63\x63\x63\x7e\x60\x3f\x0\x0\x7f\x30\x1c\x6\x7f\x0\x38\xc\xc\x7\xc\xc\x38\x0\x18\x18\x18\x0\x18\x18\x18\x0\x7\xc\xc\x38\xc\xc\x7\x0\x6e\x3b\x0\x0\x0\x0\x0\x0\x0\x8\x1c\x36\x63\x63\x7f\x0" "\xfe\x3\xf9\x5\x5\x5\x5\x5\xff\x0\xff\x0\x0\x0\x0\x0\x7f\xc0\x9f\xa0\xa0\xa0\xa0\xa0\x5\x5\x5\x5\x5\x5\x5\x5\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\x5\x5\x5\x5\x5\xf9\x3\xfe\x0\x0\x0\x0\x0\xff\x0\xff\xa0\xa0\xa0\xa0\xa0\x9f\xc0\x7f" "\x4\x6\x3\x0\x0\x0\x0\x0\x20\x60\xc0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x3\x6\x4\x0\x0\x0\x0\x0\xc0\x60\x20\x9\x12\x25\x4b\x97\x2f\x5e\xbc\x3d\x7a\xf4\xe9\xd2\xa4\x48\x90\xfc\xfe\x7\xf3\xb\xb\xb\xb\xff\xff\x0\xff\x0\x0\x0\x0" "\x3f\x7f\xe0\xcf\xd0\xd0\xd0\xd0\xb\xb\xb\xb\xb\xb\xb\xb\xd0\xd0\xd0\xd0\xd0\xd0\xd0\xd0\xb\xb\xb\xb\xf3\x7\xfe\xfc\x0\x0\x0\x0\xff\x0\xff\xff\xd0\xd0\xd0\xd0\xcf\xe0\x7f\x3f\xb\x9\xc\x7\x0\x0\x0\x0\xd0\x90\x30\xe0\x0\x0\x0\x0" "\x0\x0\x0\x0\x7\xc\x9\xb\x0\x0\x0\x0\xe0\x30\x90\xd0\x0\x0\x33\x66\x33\x0\x0\x0\x0\x0\xc\x16\x3e\x3f\x33\x0\x42\x18\xaa\x38\x3c\x7e\x32\x0\x0\x0\x30\x58\x7c\xfc\x30\x0\x0\x0\x0\x60\xb8\xf8\x30\x0\x0\x0\x0\xc0\x60\xf0\x30\x0" "\x0\x0\x0\x80\xc0\xe0\x20\x0\x0\x0\x0\x0\x80\xc0\x20\x0\x0\x0\x0\x0\x0\x80\x20\x0\x0\x0\x0\x0\x0\x1\x1\x0\x0\x0\x0\x0\x1\x3\x3\x0\x0\x0\x0\x1\x2\x7\x3\x0\x0\x0\x0\x3\x5\xf\x3\x0\x0\x0\x0\x6\x1b\x1f\x13\x0" "\x5a\x4a\x42\x52\x5a\x4a\x42\x52\xff\xff\x0\x18\x3c\x66\xc3\x81\xff\xff\x0\x0\x0\x0\x18\x3c\xff\xff\x0\x18\x3c\x66\xdb\xbd\xff\xff\x0\x22\x77\x7f\x6b\x22\x0\x0\x0\x18\x0\x0\x0\x0\x0\x7\x0\x4\x6\x0\x7\x0\x0\x1f\x0\xc\x6\x0\x1f\x0" "\x0\xff\x0\xcc\x66\x0\xff\x0\x0\x7\x0\x4\x6\x0\x7\x0\x0\x3f\x0\xc\x26\x0\x3f\x0\x0\xff\x0\xcc\x66\x0\xff\x0\x0\x1\x0\x0\x0\x0\x1\x0\x0\x1f\x0\xc\x6\x0\x1f\x0\x0\xff\x0\xcc\x66\x0\xff\x0\x0\x18\x3c\x66\x3c\x18\x0\x0" "\x0\x24\x7e\x3c\x7e\x24\x0\x0\x6c\x6c\x6f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x0\x0\x7f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6f\x60\x7f\x0\x0\x0\x6c\x6c\x6c\x6c\x7f\x0\x0\x0\x18\x18\x1f\x18\x1f\x0\x0\x0\x0\x0\x0\x0\x1f\x18\x18\x18" "\x18\x18\x18\x18\xf8\x0\x0\x0\x18\x18\x18\x18\xff\x0\x0\x0\x0\x0\x0\x0\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\x18\x18\x0\x0\x0\x0\xff\x0\x0\x0\x18\x18\x18\x18\xff\x18\x18\x18\x18\x18\xf8\x18\xf8\x18\x18\x18\x6c\x6c\x6c\x6c\xec\x6c\x6c\x6c" "\x6c\x6c\xec\xc\xfc\x0\x0\x0\x0\x0\xfc\xc\xec\x6c\x6c\x6c\x6c\x6c\xef\x0\xff\x0\x0\x0\x0\x0\xff\x0\xef\x6c\x6c\x6c\x6c\x6c\xec\xc\xec\x6c\x6c\x6c\x0\x0\xff\x0\xff\x0\x0\x0\x6c\x6c\xef\x0\xef\x6c\x6c\x6c\x18\x18\xff\x0\xff\x0\x0\x0" "\x6c\x6c\x6c\x6c\xff\x0\x0\x0\x0\x0\xff\x0\xff\x18\x18\x18\x0\x0\x0\x0\xff\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xfc\x0\x0\x0\x18\x18\xf8\x18\xf8\x0\x0\x0\x0\x0\xf8\x18\xf8\x18\x18\x18\x0\x0\x0\x0\xfc\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xff\x6c\x6c\x6c" "\x18\x18\xff\x18\xff\x18\x18\x18\x18\x18\x18\x18\x1f\x0\x0\x0\x0\x0\x0\x0\xf8\x18\x18\x18\xff\xff\xff\xff\xff\xff\xff\xff\x0\x0\x0\x0\xff\xff\xff\xff\xf\xf\xf\xf\xf\xf\xf\xf\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xff\xff\xff\xff\x0\x0\x0\x0" "\x0\x0\x6e\x3b\x13\x3b\x6e\x0\x0\x1e\x33\x1f\x33\x1f\x3\x3\x0\x3f\x33\x3\x3\x3\x3\x0\x0\x7f\x36\x36\x36\x36\x36\x0\x3f\x33\x6\xc\x6\x33\x3f\x0\x0\x0\x7e\x1b\x1b\x1b\xe\x0\x0\x66\x66\x66\x66\x3e\x6\x3\x0\x6e\x3b\x18\x18\x18\x18\x0" "\x3f\xc\x1e\x33\x33\x1e\xc\x3f\x1c\x36\x63\x7f\x63\x36\x1c\x0\x1c\x36\x63\x63\x36\x36\x77\x0\x38\xc\x18\x3e\x33\x33\x1e\x0\x0\x0\x7e\xdb\xdb\x7e\x0\x0\x60\x30\x7e\xdb\xdb\x7e\x6\x3\x1c\x6\x3\x1f\x3\x6\x1c\x0\x0\x0\x0\x0\x0\xdb\xdb\x0" "\x0\x7e\x0\x7e\x0\x7e\x0\x0\x0\xf8\x8\x8\x8\x8\xf8\x0\x0\xff\x0\x0\x0\x0\xff\x0\x0\x1f\x10\x10\x10\x10\x1f\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x0\x2\x1\x0\x0\x0\x20\x30\x28\x24\x22\xa1\x60\x20\x0\x0\x0\x1\x2\x0\x0\x0" "\x20\x60\xa1\x22\x24\x28\x30\x20\x0\x0\x0\x40\x40\x40\x40\x7f\xff\x81\x81\x81\x81\x80\x80\x80\x0\x0\x0\x20\x20\x11\x11\xe\x38\x44\x44\x82\x82\x0\x0\x0\x0\x0\xfe\x7c\x38\x10\x0\x0\x0\x0\x10\x38\x7c\xfe\x0\x0\x80\xc1\x63\x36\x1c\x8\x0\x0" ), // Font no. 13 FontEntry("IDC-Harmonica", 12, 12, "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x70\x0\x7\x70\x0\x7\x70\x0\x7\x70\x0\x0\x0\x0\x7\x70\x0\x0\xdc\xc1\x1d\xdc\xc1\xc\x44\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xc0\x39\x9c\xe3\x7f\xfe\xc7\x39\x9c" "\xe3\x7f\xfe\xc7\x39\x9c\x3\x0\x70\x0\x7\xfe\x77\x7\x77\xe0\x3f\x70\x7\x77\xff\x3\x7\x70\x0\x0\x0\xe0\xe0\x1b\xb7\x39\xce\x1\xe\x70\x80\x73\x9c\xed\xd8\x7\x7\x0\xfc\xe0\x1c\xce\xe1\xe\x7c\xe0\x73\xf7\x73\x1e\xe7\x71\x3f\x3e\x7\x0\xe0\x0" "\xe\xe0\x0\x7\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xe0\x0\x7\x38\x80\x3\x38\x80\x3\x38\x80\x3\x38\x0\x7\xe0\x0\x0\x38\x0\x7\xe0\x0\xe\xe0\x0\xe\xe0\x0\xe\xe0\x0\x7\x38\x0\x0\x8c\xe1\x3d\xff\xf7\x7f\xff\xf7\x7f\xfe\xc3\x1f" "\xf8\x0\x7\x20\x0\x0\x0\x0\x0\x70\x0\x7\x70\xe0\x3f\xfe\x3\x7\x70\x0\x7\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x70\x0\x7\x70\x80\x3\x0\x0\x0\x0\x0\x0\x0\xe0\x3f\xfe\x3\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x70\x0\x7\x70\x0\x0\x0\xc\xe0\x0\x7\x38\xc0\x1\xe\x70\x80\x3\x1c\xe0\x0\x7\x0\x0\x0\x0\x0\xfe\x71\x3c\xe7\x77\x77\x3f\xf7\x71\xf\x77\x70\xfe\x3\x0\x70\x0\x7\x78\x0\x7\x70\x0\x7\x70\x0\x7\x70\x0" "\x7\xfe\x3\x0\xfc\x3\x70\x0\xc7\x3f\x6\x70\x0\x7\x70\x0\x7\x70\x0\xff\x7\x0\xfe\x7\x70\x0\x7\x3f\x0\x7\x70\x0\x7\x70\x7\x77\x70\xfe\x3\x0\x38\x86\x73\x1c\xe7\x70\x7\x77\x70\x7\xf7\x7f\x0\x7\x70\x0\x7\x0\xff\x77\x0\x7\x70\x3f" "\xf\x7\x70\x0\x7\x70\x7\x77\x70\xfe\x3\x0\xfe\x73\x0\x7\x70\x3f\xf\x77\x70\x7\x77\x70\x7\x77\x70\xfe\x3\x0\xff\x7\x70\x0\x7\x38\xc0\x1\xe\x70\x0\x7\x70\x0\x7\x70\x0\x0\xfe\x73\x70\x7\xe7\x3f\x7\x77\x70\x7\x77\x70\x7\x77\x70\xfe" "\x3\x0\xfe\x73\x70\x7\x77\x70\x7\x77\x70\x87\xe7\x77\x0\x7\x70\xc0\x3\x0\x0\x0\x0\x70\x0\x7\x70\x0\x0\x0\x0\x7\x70\x0\x7\x0\x0\x0\x0\x0\x0\x70\x0\x7\x70\x0\x0\x0\x0\x7\x70\x0\x7\x38\x0\x0\x80\x3\x1c\xe0\x0\x7\x38\xc0" "\x1\x38\x0\x7\xe0\x0\x1c\x80\x3\x0\x0\x0\x0\x0\xc0\x3f\xfc\x3\x0\x0\xc0\x3f\xfc\x3\x0\x0\x0\x0\x1c\x80\x3\x70\x0\xe\xc0\x1\x38\xc0\x1\xe\x70\x80\x3\x1c\x0\x0\xfe\x73\x70\x0\x7\x70\xe0\x3\x7\x70\x0\x7\x0\x0\x7\x70\x0\x0" "\xfc\xe3\x70\x7\x77\x70\xe7\x77\x73\x37\x77\x73\xe7\x73\x0\xfe\x3\x0\xfc\xe3\x70\x7\x77\x70\xff\x77\x70\x7\x77\x70\x7\x77\x70\x7\x7\x0\xff\x71\x38\x87\xf3\x3f\x7\x77\x70\x7\x77\x70\x7\x77\x70\xff\x3\x0\xfc\xe3\x70\x7\x70\x0\x7\x70\x0\x7" "\x70\x0\x7\x70\x70\xfe\x3\x0\xff\x71\x38\x7\x77\x70\x7\x77\x70\x7\x77\x70\x7\x77\x70\xff\x3\x0\xff\x77\x0\x7\xf0\xf\x7\x70\x0\x7\x70\x0\x7\x70\x0\xff\x7\x0\xff\x77\x0\x7\xf0\xf\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\x0\x0\xfc\xe3" "\x70\x7\x70\x0\xc7\x77\x70\x7\x77\x70\x7\x77\x78\x7e\x7\x70\x7\x77\x70\x7\xf7\x7f\x7\x77\x70\x7\x77\x70\x7\x77\x70\x7\x7\x0\xff\x7\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\xff\x7\x0\xe0\x7\x70\x0\x7\x70\x0\x7\x70\x0\x77\x70" "\x7\x77\x70\xfe\x3\x0\x7\x77\x38\xc7\x71\xe\x77\xf0\x3\x77\x70\xe\xc7\x71\x38\x7\x7\x0\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\x70\x0\xff\x7\x0\x7\xf7\x78\xdf\xf7\x7f\x77\x77\x72\x7\x77\x70\x7\x77\x70\x7\x7\x0\x7\xf7\x70\x1f" "\xf7\x73\x77\x77\x7e\xc7\x77\x78\x7\x77\x70\x7\x7\x0\xfc\xe3\x70\x7\x77\x70\x7\x77\x70\x7\x77\x70\x7\x77\x38\xfe\x1\x0\xff\x73\x70\x7\x77\x70\x7\x77\x70\x7\xf7\x3f\x7\x70\x0\x7\x0\x0\xfc\xe3\x70\x7\x77\x70\x7\x77\x70\x7\x77\x70\xe7\x77" "\x3c\xbe\x3\x70\xff\x73\x70\x7\x77\x70\xff\x73\x7\xe7\x70\x1c\x87\x73\x70\x7\x7\x0\xfe\x73\x70\x7\xe0\x3\xfc\x1\x3e\x0\x67\x70\x7\x77\x70\xfe\x3\x0\xff\x7\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\x70\x0\x0\x7\x77\x70\x7\x77\x70" "\x7\x77\x70\x7\x77\x70\x7\x77\x70\xfe\x3\x0\x7\x77\x70\x7\x77\x70\x7\x77\x70\x7\x77\x38\xc7\x71\xe\x7e\x0\x0\x7\x77\x70\x7\x77\x70\x7\x77\x72\x77\xf7\x7f\xdf\xf7\x78\x7\x7\x0\x7\xe7\x38\xdc\x81\xf\xf8\x80\xf\xdc\xe1\x38\x7\x77\x70\x7" "\x7\x0\x7\x77\x70\x7\x77\x70\x7\xe7\x3f\xe0\x0\xe\xe0\x0\xe\xe0\x0\x0\xff\x7\x38\xc0\x1\xe\x70\x80\x3\x1c\xe0\x0\x7\x70\x0\xff\x7\x0\xf8\x80\x3\x38\x80\x3\x38\x80\x3\x38\x80\x3\x38\x80\x3\xf8\x0\x0\x7\xe0\x0\x1c\x80\x3\x70\x0" "\xe\xc0\x1\x38\x0\x7\x60\x0\x4\x0\xf8\x0\xe\xe0\x0\xe\xe0\x0\xe\xe0\x0\xe\xe0\x0\xe\xf8\x0\x0\x20\x0\x7\xf8\xc0\x1d\x8e\x3\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xf0\x7f" "\x70\x0\x7\x70\x0\xe\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xe0\x3f\x0\x7\x70\xfe\x77\x70\x7\x77\x70\xfe\x7\x0\x7\x70\x0\x7\xf0\x3f\x7\x77\x70\x7\x77\x70\x7\x77\x70\xff\x3\x0\x0\x0\x0\x0\xe0\x3f\x7\x77\x0\x7" "\x70\x0\x7\x70\x70\xfe\x3\x0\x0\x7\x70\x0\xe7\x7f\x7\x77\x70\x7\x77\x70\x7\x77\x70\xfe\x7\x0\x0\x0\x0\x0\xe0\x3f\x7\x77\x70\xff\x77\x0\x7\x70\x0\xfe\x7\x0\xf8\xc3\x1\x1c\xc0\x1\xfc\xc0\x1\x1c\xc0\x1\x1c\xc0\x1\x1c\xc0\x1\x0\x0" "\x0\x0\xe0\x7f\x7\x77\x70\x7\x77\x70\xfe\x7\x70\x0\xf7\x3f\x7\x70\x0\x7\xf0\x3f\x7\x77\x70\x7\x77\x70\x7\x77\x70\x7\x7\x0\x70\x0\x7\x0\xc0\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\xfe\x3\x0\x0\x7\x70\x0\x0\x7c\x0\x7\x70\x0\x7\x70" "\xe\xe7\x70\xfc\x3\x0\x7\x70\x0\x7\x77\x38\xc7\x71\xe\x7f\x70\xe\xc7\x71\x38\x7\x7\x0\x0\xc0\x1\x1c\xc0\x1\x1c\xc0\x1\x1c\xc0\x1\x1c\xc0\x1\xf8\x7\x0\x0\x0\x0\x0\xf0\x38\xdf\xf7\x7f\x77\x77\x72\x7\x77\x70\x7\x7\x0\x0\x0\x0\x0" "\xf0\x3f\x7\x77\x70\x7\x77\x70\x7\x77\x70\x7\x7\x0\x0\x0\x0\x0\xe0\x3f\x7\x77\x70\x7\x77\x70\x7\x77\x70\xfe\x3\x0\x0\x0\x0\x0\xf0\x3f\x7\x77\x70\x7\x77\x70\x7\xf7\x3f\x7\x70\x0\x0\x0\x0\x0\xe0\x7f\x7\x77\x70\x7\x77\x70\x7\xe7" "\x7f\x0\x7\x70\x0\x0\x0\x0\x70\x3f\xf\x77\x0\x7\x70\x0\x7\x70\x0\x7\x0\x0\x0\x0\x0\x0\xe0\x7f\x7\x70\x0\xfe\x3\x70\x6\x77\x70\xfe\x3\x0\x1c\xc0\x1\x1c\xe0\xf\x1c\xc0\x1\x1c\xc0\x1\x1c\xc0\x1\xf8\x7\x0\x0\x0\x0\x0\x70\x70" "\x7\x77\x70\x7\x77\x70\x7\x77\x70\xfe\x7\x0\x0\x0\x0\x0\x70\x70\x7\x77\x70\x8e\xe3\x38\x8e\xc3\x1d\xf8\x0\x0\x0\x0\x0\x0\x70\x70\x7\x77\x70\x27\x77\x77\xff\xf7\x7d\x8e\x3\x0\x0\x0\x0\x0\x70\x70\x8e\xc3\x1d\xf8\x80\xf\xdc\xe1\x38\x7" "\x7\x0\x0\x0\x0\x0\x70\x70\x7\x77\x70\x87\xe7\x77\x0\x7\x70\xff\x3\x0\x0\x0\x0\x0\xf0\x3f\xc0\x1\xe\x70\x80\x3\x1c\xe0\x0\xff\x7\x0\xe0\x3\x7\x70\x0\x7\x70\x80\x3\x70\x0\x7\x70\x0\x7\xe0\x3\x0\xff\xf\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x7c\x0\xe\xe0\x0\xe\xe0\x0\x1c\xe0\x0\xe\xe0\x0\xe\x7c\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xf0\xff\xff\xf\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xf0\xff\x7\x70\x0\x7\x70\x0\xff\xf" "\x0\x0\x0\x0\x0\x0\x0\x0\xf0\xff\x0\x0\x0\x0\x0\x0\xff\xf\x0\x0\x0\x0\x0\x0\x0\x0\xf0\xff\x0\xe\xe0\x0\xe\xe0\xff\xf\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xf0\x7f\xfe\xc3\x1f\xf8\x0\x7\x20\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x2\x70\x80\xf\xfc\xe1\x3f\xff\x7\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" ), // Font no. 14 FontEntry("IDC-Harmonica", 8, 8, "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x18\x18\x18\x18\x18\x0\x18\x0\x36\x36\x12\x0\x0\x0\x0\x0\x36\x36\x7f\x36\x7f\x36\x36\x0\x8\x7e\xb\x3e\x68\x3f\x8\x0\x6\x69\x36\x18\xc\x36\x4b\x30\x1e\x33\x16\x6e\x3b\x33\x6e\x0\x18\x18\xc\x0\x0\x0\x0\x0" "\x18\xc\x6\x6\x6\xc\x18\x0\xc\x18\x30\x30\x30\x18\xc\x0\x0\x36\x7f\x7f\x3e\x1c\x8\x0\x0\x18\x18\x7e\x18\x18\x0\x0\x0\x0\x0\x0\x0\x18\x18\xc\x0\x0\x0\x3e\x0\x0\x0\x0\x0\x0\x0\x0\x0\x18\x18\x0\xc0\x60\x30\x18\xc\x6\x3\x0" "\x0\x1e\x33\x7b\x6f\x67\x3e\x0\x18\x18\x1c\x18\x18\x18\x7e\x0\x3e\x60\x3e\x3\x3\x3\x7f\x0\x7e\x60\x38\x60\x60\x63\x3e\x0\xc\x4c\x66\x63\x7f\x60\x60\x0\x7f\x3\x3f\x60\x60\x63\x3e\x0\x3e\x3\x3f\x63\x63\x63\x3e\x0\x7f\x60\x30\x18\xc\xc\xc\x0" "\x3e\x63\x3e\x63\x63\x63\x3e\x0\x3e\x63\x63\x63\x7e\x60\x30\x0\x0\x18\x18\x0\x18\x18\x0\x0\x0\x18\x18\x0\x18\x18\x10\x0\x30\x18\xc\x6\xc\x18\x30\x0\x0\x0\x7e\x0\x7e\x0\x0\x0\xc\x18\x30\x60\x30\x18\xc\x0\x3e\x63\x60\x3c\xc\x0\xc\x0" "\x3c\x66\x63\x7b\x3b\x3\x7e\x0\x3c\x66\x63\x7f\x63\x63\x63\x0\x1f\x33\x3f\x63\x63\x63\x3f\x0\x3c\x66\x3\x3\x3\x63\x3e\x0\x1f\x33\x63\x63\x63\x63\x3f\x0\x7f\x3\x1f\x3\x3\x3\x7f\x0\x7f\x3\x1f\x3\x3\x3\x3\x0\x3c\x66\x3\x73\x63\x73\x6e\x60" "\x63\x63\x7f\x63\x63\x63\x63\x0\x7e\x18\x18\x18\x18\x18\x7e\x0\x78\x60\x60\x60\x63\x63\x3e\x0\x63\x33\x1b\xf\x1b\x33\x63\x0\x3\x3\x3\x3\x3\x3\x7f\x0\x63\x77\x7f\x6b\x63\x63\x63\x0\x63\x67\x6f\x7b\x73\x63\x63\x0\x3c\x66\x63\x63\x63\x33\x1e\x0" "\x3f\x63\x63\x63\x3f\x3\x3\x0\x3c\x66\x63\x63\x63\x3b\x36\x60\x3f\x63\x63\x3f\x1b\x33\x63\x0\x3e\x63\xe\x38\x62\x63\x3e\x0\x7e\x18\x18\x18\x18\x18\x18\x0\x63\x63\x63\x63\x63\x63\x3e\x0\x63\x63\x63\x63\x33\x1b\xe\x0\x63\x63\x63\x6b\x7f\x77\x63\x0" "\x63\x36\x1c\x1c\x36\x63\x63\x0\x63\x63\x63\x3e\x18\x18\x18\x0\x7f\x30\x18\xc\x6\x3\x7f\x0\x3c\xc\xc\xc\xc\xc\x3c\x0\x3\x6\xc\x18\x30\x60\x40\x0\x3c\x30\x30\x30\x30\x30\x3c\x0\x8\x1c\x36\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x7f" "\x18\x18\x30\x0\x0\x0\x0\x0\x0\x0\x3c\x60\x7e\x63\x7e\x0\x3\x3\x3f\x63\x63\x63\x3f\x0\x0\x0\x3e\x63\x3\x63\x3e\x0\x60\x60\x7e\x63\x63\x63\x7e\x0\x0\x0\x3e\x63\x7f\x3\x7e\x0\x7c\x6\x6\x3e\x6\x6\x6\x6\x0\x0\x7e\x63\x63\x7e\x60\x3f" "\x3\x3\x3f\x63\x63\x63\x63\x0\x18\x0\x1c\x18\x18\x18\x7e\x0\x60\x0\x70\x60\x60\x60\x66\x3c\x3\x3\x63\x33\x1f\x33\x63\x0\x6\x6\x6\x6\x6\x6\x7c\x0\x0\x0\x37\x7f\x6b\x63\x63\x0\x0\x0\x3f\x63\x63\x63\x63\x0\x0\x0\x3e\x63\x63\x63\x3e\x0" "\x0\x0\x3f\x63\x63\x63\x3f\x3\x0\x0\x7e\x63\x63\x63\x7e\x60\x0\x0\x3b\x67\x3\x3\x3\x0\x0\x0\x7e\x3\x3e\x60\x3f\x0\xc\xc\x3e\xc\xc\xc\x78\x0\x0\x0\x63\x63\x63\x63\x7e\x0\x0\x0\x63\x63\x36\x36\x1c\x0\x0\x0\x63\x63\x6b\x7f\x36\x0" "\x0\x0\x63\x36\x1c\x36\x63\x0\x0\x0\x63\x63\x63\x7e\x60\x3f\x0\x0\x3f\x18\xc\x6\x7f\x0\x70\x18\x18\xc\x18\x18\x70\x0\xff\x0\x0\x0\x0\x0\x0\x0\xe\x18\x18\x30\x18\x18\xe\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xff\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xdb\xdb\x0" "\x0\x7e\x0\x7e\x0\x7e\x0\x0\x0\xf8\x8\x8\x8\x8\xf8\x0\x0\xff\x0\x0\x0\x0\xff\x0\x0\x1f\x10\x10\x10\x10\x1f\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x0\x2\x1\x0\x0\x0\x20\x30\x28\x24\x22\xa1\x60\x20\x0\x0\x0\x1\x2\x0\x0\x0" "\x20\x60\xa1\x22\x24\x28\x30\x20\x0\x0\x0\x40\x40\x40\x40\x7f\xff\x81\x81\x81\x81\x80\x80\x80\x0\x0\x0\x20\x20\x11\x11\xe\x38\x44\x44\x82\x82\x0\x0\x0\x0\x0\xfe\x7c\x38\x10\x0\x0\x0\x0\x10\x38\x7c\xfe\x0\x0\x80\xc1\x63\x36\x1c\x8\x0\x0" ), // Font no. 15 FontEntry("IDC-Hoodlum", 8, 8, "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x18\x18\x18\x18\x18\x0\x18\x0\x6c\x6c\x6c\x0\x0\x0\x0\x0\x0\x6c\xfe\x6c\xfe\x6c\x0\x0\x10\xfe\x16\xfe\xd0\xfe\x10\x0\x0\x66\x36\x18\x6c\x66\x0\x0\x38\x6c\x38\xfc\x66\xde\x0\x0\x18\x18\xc\x0\x0\x0\x0\x0" "\x0\x30\x18\x18\x18\x30\x0\x0\x0\x18\x30\x30\x30\x18\x0\x0\x18\x42\x18\x3c\x18\x42\x18\x0\x0\x18\x18\x7e\x18\x18\x0\x0\x0\x0\x0\x0\x18\x18\xc\x0\x0\x0\x0\xfe\x0\x0\x0\x0\x0\x0\x0\x0\x18\x18\x0\x0\x0\xc0\x60\x30\x18\xc\x6\x0" "\x0\xfe\xc6\xc6\xc6\xfe\x0\x0\x0\x3c\x30\x30\x30\x30\x78\x0\x0\xfe\xc0\xfe\xe\xfe\x0\x0\x0\xfe\xc0\xf8\xc0\xfe\x0\x0\xe\xe\x6e\x6e\xfe\x60\x60\x0\x0\xfe\xe\x7e\xc0\x7e\x0\x0\xe\xe\xe\xe\xfe\xce\xfe\x0\x0\xfe\xc0\xc0\xc0\xc0\xc0\x0" "\x0\xfe\xce\xfe\xce\xfe\x0\x0\x0\xfe\xc6\xfe\xc0\xc0\xc0\xc0\x0\x18\x18\x0\x18\x18\x0\x0\x0\x18\x18\x0\x18\x18\xc\x0\x60\x30\x18\xc\x18\x30\x60\x0\x0\x0\xfe\x0\xfe\x0\x0\x0\xc\x18\x30\x60\x30\x18\xc\x0\x0\xfe\xc6\xf0\x30\x0\x30\x0" "\x7c\xc6\xf6\xd6\x76\x6\x7c\x0\x0\xff\xc0\xfe\xce\xce\x0\x0\x0\x7f\xc0\x7e\xce\x7e\x0\x0\x0\xfc\xe\xe\xe\xfc\x0\x0\x0\x7f\xc0\xce\xce\x7e\x0\x0\x0\xff\x0\xfe\xe\xfe\x0\x0\x0\xff\x0\xfe\xe\xe\x0\x0\x0\xfc\xe\xce\xce\xfc\x0\x0" "\x0\xce\xce\xfe\xce\xce\xe\x0\x0\x38\x38\x38\x38\x38\x0\x0\x0\xff\x30\x30\x30\x30\x3e\x0\x0\xce\x6e\x3e\x6e\xce\x0\x0\xe\xe\xe\xe\xe\xfe\x0\x0\x0\xc6\xee\xfe\xd6\xc6\x6\x2\x6\xce\xde\xfe\xee\xce\x80\x0\x0\x7f\xc0\xc6\xc6\x7c\x0\x0" "\x0\x7f\xc0\x7e\xe\xe\x0\x0\x0\x7f\xc0\xc6\xf6\x7c\xc0\x0\x0\x7f\xc0\x7e\x6e\xce\x0\x0\x0\xf0\x38\x38\x38\x1f\x0\x0\x0\xff\x38\x38\x38\x38\x0\x0\x0\xce\xce\xce\xce\x7c\x0\x0\x0\xce\xce\xce\x7c\x38\x0\x0\xc0\xc6\xd6\xfe\xee\xc6\x0\x0" "\x0\xce\xce\x7c\xce\xce\x0\x0\x0\xce\xce\xfe\x38\x38\x38\x0\x0\xff\x70\x38\x1c\xfe\x0\x0\x0\x18\x8\x8\x8\x18\x0\x0\x0\x6\xc\x18\x30\x60\xc0\x0\x0\x18\x10\x10\x10\x18\x0\x0\x10\x38\x6c\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xff" "\x18\x18\xc\x0\x0\x0\x0\x0\x0\xff\xc0\xfe\xce\xce\x0\x0\x0\x7f\xc0\x7e\xce\x7e\x0\x0\x0\xfc\xe\xe\xe\xfc\x0\x0\x0\x7f\xc0\xce\xce\x7e\x0\x0\x0\xff\x0\xfe\xe\xfe\x0\x0\x0\xff\x0\xfe\xe\xe\x0\x0\x0\xfc\xe\xce\xce\xfc\x0\x0" "\x0\xce\xce\xfe\xce\xce\xe\x0\x0\x38\x38\x38\x38\x38\x0\x0\x0\xff\x30\x30\x30\x30\x3e\x0\x0\xce\x6e\x3e\x6e\xce\x0\x0\xe\xe\xe\xe\xe\xfe\x0\x0\x0\xc6\xee\xfe\xd6\xc6\x6\x2\x6\xce\xde\xfe\xee\xce\x80\x0\x0\x7f\xc0\xc6\xc6\x7c\x0\x0" "\x0\x7f\xc0\x7e\xe\xe\x0\x0\x0\x7f\xc0\xc6\xf6\x7c\xc0\x0\x0\x7f\xc0\x7e\x6e\xce\x0\x0\x0\xf0\x38\x38\x38\x1f\x0\x0\x0\xff\x38\x38\x38\x38\x0\x0\x0\xce\xce\xce\xce\x7c\x0\x0\x0\xce\xce\xce\x7c\x38\x0\x0\xc0\xc6\xd6\xfe\xee\xc6\x0\x0" "\x0\xce\xce\x7c\xce\xce\x0\x0\x0\xce\xce\xfe\x38\x38\x38\x0\x0\xff\x30\x18\xc\xfe\x0\x0\x30\x18\x18\xc\x18\x18\x30\x0\x18\x18\x18\x18\x18\x18\x18\x0\xc\x18\x18\x30\x18\x18\xc\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xff\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xdb\xdb\x0" "\x0\x7e\x0\x7e\x0\x7e\x0\x0\x0\xf8\x8\x8\x8\x8\xf8\x0\x0\xff\x0\x0\x0\x0\xff\x0\x0\x1f\x10\x10\x10\x10\x1f\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x0\x2\x1\x0\x0\x0\x20\x30\x28\x24\x22\xa1\x60\x20\x0\x0\x0\x1\x2\x0\x0\x0" "\x20\x60\xa1\x22\x24\x28\x30\x20\x0\x0\x0\x40\x40\x40\x40\x7f\xff\x81\x81\x81\x81\x80\x80\x80\x0\x0\x0\x20\x20\x11\x11\xe\x38\x44\x44\x82\x82\x0\x0\x0\x0\x0\xfe\x7c\x38\x10\x0\x0\x0\x0\x10\x38\x7c\xfe\x0\x0\x80\xc1\x63\x36\x1c\x8\x0\x0" ), // Font no. 16 FontEntry("IDC-MicroKnight", 12, 12, "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x70\x0\x7\x70\x0\x7\x70\x0\x7\x70\x0\x0\x0\x0\x7\x70\x0\x0\xdc\xc1\x1d\xdc\x81\x19\x10\x1\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xc0\x39\x9c\xe3\x7f\xfe\xc7\x39\x9c" "\xe3\x7f\xfe\xc7\x39\x9c\x3\x0\x70\x0\x7\xfe\x73\x7\x77\xe0\x3f\x70\x7\x77\x70\xf7\x3f\x70\x0\x7\x0\xe0\xe0\x1b\xb7\x39\xce\x1\xe\x70\x80\x73\x9c\xed\xd8\x7\x7\x0\x7c\xe0\xe\xee\xe0\x6\x7c\xe7\x3b\xf7\x71\xe\xe7\x70\x1f\xbc\x3\x70\xe0\x0" "\xe\xe0\x0\x8\x60\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xe0\x0\x7\x38\x80\x3\x38\x80\x3\x38\x80\x3\x38\x0\x7\xe0\x0\x0\x38\x0\x7\xe0\x0\xe\xe0\x0\xe\xe0\x0\xe\xe0\x0\x7\x38\x0\x0\x0\x0\x0\x8e\xc3\x1d\xf8\xf0\x7f\xff\x87\xf" "\xdc\xe1\x38\x0\x0\x0\x0\x0\x0\x70\x0\x7\x70\xe0\x3f\xfe\x3\x7\x70\x0\x7\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x7\x70\x0\x7\x40\x0\x3\x0\x0\x0\x0\x0\x0\x0\xe0\x3f\xfe\x3\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x70\x0\x7\x70\x0\x0\x0\x0\xe0\x0\x7\x38\xc0\x1\xe\x70\x80\x3\x1c\xe0\x0\x7\x0\x0\x0\x0\x0\xfe\x71\x3c\xe7\x77\x77\x3f\xf7\x71\xf\x77\x70\xfe\x3\x0\x70\x0\x7\x78\x0\x7\x70\x0\x7\x70\x0\x7\x70\x0" "\x7\xfe\x3\x0\xfc\x3\x70\x0\xc7\x3f\x6\x70\x0\x7\x70\x0\x7\x70\x0\xff\x7\x0\xfc\x3\x70\x0\x7\x3f\x0\x7\x70\x0\x67\x70\x7\x77\x70\xfe\x3\x0\xc0\x1\x1c\xe0\x0\x7\xb8\xc3\x39\x8e\x73\x38\xff\x7\x38\x80\x3\x0\xff\x70\x0\x7\xf0\x3f" "\x0\x7\x70\x0\x7\x70\x7\x77\x38\xfe\x1\x0\x7e\x70\x0\x7\xf0\x3f\x7\x77\x70\x7\x77\x70\x7\x77\x38\xfe\x1\x0\xff\x7\x38\xc0\x1\xe\xe0\x0\x7\x70\x0\x7\x70\x0\x7\x70\x0\x0\xfe\x71\x38\x87\xe3\x3f\x7\x77\x70\x7\x77\x70\x7\x77\x38\xfe" "\x1\x0\xfe\x71\x38\x7\x77\x70\x7\x77\x70\x7\xe7\x7f\x0\x7\x70\xf0\x3\x0\x0\x0\x0\x70\x0\x7\x70\x0\x0\x0\x0\x7\x70\x0\x7\x0\x0\x0\x0\x0\x0\x70\x0\x7\x70\x0\x0\x0\x0\x7\x70\x0\x7\x40\x0\x3\x0\x0\x1c\xe0\x0\x7\x38\xc0" "\x1\x38\x0\x7\xe0\x0\x1c\x0\x0\x0\x0\x0\x0\x0\xc0\x1f\xfc\x1\x0\x0\xc0\x1f\xfc\x1\x0\x0\x0\x0\x0\x80\x3\x70\x0\xe\xc0\x1\x38\xc0\x1\xe\x70\x80\x3\x0\x0\x0\xfe\x73\x70\x0\x7\x70\xe0\x3\x7\x70\x0\x7\x0\x0\x7\x70\x0\x0" "\xfc\xe1\x38\xe7\x77\x77\x77\x77\x77\xe7\x73\x0\x7\xe0\x70\xfc\x3\x0\xfe\x71\x38\x7\x77\x70\xff\x77\x70\x7\x77\x70\x7\x77\x70\x7\x7\x0\xff\x71\x38\x87\xf3\x3f\x7\x77\x70\x7\x77\x70\x7\x77\x38\xff\x1\x0\xfe\x71\x38\x7\x70\x0\x7\x70\x0\x7" "\x70\x0\x7\x70\x70\xfe\x3\x0\xff\x71\x38\x7\x77\x70\x7\x77\x70\x7\x77\x70\x7\x77\x70\xff\x3\x0\xff\x77\x0\x7\xf0\x1f\x7\x70\x0\x7\x70\x0\x7\x70\x0\xff\x7\x0\xff\x77\x0\x7\xf0\x1f\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\x0\x0\x7c\xe0" "\x0\x7\x70\x0\xc7\x77\x70\x7\x77\x70\x7\x77\x78\x7e\x7\x70\x7\x77\x70\x7\xf7\x7f\x7\x77\x70\x7\x77\x70\x7\x77\x70\x7\x7\x0\xff\x7\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\xff\x7\x0\xc0\x7\x70\x0\x7\x70\x0\x7\x70\x0\x77\x70" "\x7\x77\x70\xfe\x3\x0\x7\x77\x38\xc7\x71\xe\x77\xf0\x3\x77\x70\xe\xc7\x71\x38\x7\x7\x0\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\x70\x0\xff\x7\x0\x7\xf7\x78\xdf\xf7\x7f\x77\x77\x72\x7\x77\x70\x7\x77\x70\x7\x7\x0\x7\xf7\x70\x1f" "\xf7\x73\x77\x77\x7e\xc7\x77\x78\x7\x77\x70\x7\x7\x0\xfe\x71\x38\x7\x77\x70\x7\x77\x70\x7\x77\x70\x7\x77\x70\xfe\x3\x0\xff\x71\x38\x7\x77\x70\x7\x77\x70\x7\xf7\x3f\x7\x70\x0\x7\x0\x0\xfe\x71\x38\x7\x77\x70\x7\x77\x70\x7\x77\x70\x77\x77" "\x3e\xfe\x3\x38\xff\x71\x38\x7\x77\x70\x7\xf7\x3f\x77\x70\xe\xc7\x71\x38\x7\x7\x70\x7e\x70\x0\x7\xe0\x3f\x0\x7\x70\x0\x67\x70\x7\x77\x70\xfe\x3\x0\xff\x7\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\x70\x0\x0\x7\x77\x70\x7\x77\x70" "\x7\x77\x70\x7\x77\x70\x7\x77\x70\xfe\x3\x0\x7\x77\x70\x7\x77\x70\x7\xe7\x38\x8e\xc3\x1d\xdc\x81\xf\xf8\x0\x0\x7\x77\x70\x7\x77\x70\x7\x77\x72\x77\xf7\x7f\xdf\xf7\x78\x7\x7\x0\x7\xe7\x38\xdc\x81\xf\xf8\x80\xf\xdc\xe1\x38\x7\x77\x70\x7" "\x7\x0\x7\x77\x70\x7\x77\x70\x7\xe7\x3f\x80\x3\x38\x80\x3\x38\x80\x3\x0\xff\x7\x38\xc0\x1\xe\x70\x80\x3\x1c\xe0\x0\x7\x70\x0\xff\x7\x0\xf8\x80\x3\x38\x80\x3\x38\x80\x3\x38\x80\x3\x38\x80\x3\xf8\x0\x0\x0\x70\x0\xe\xc0\x1\x38\x0" "\x7\xe0\x0\x1c\x80\x3\x70\x0\xe\x0\xf8\x0\xe\xe0\x0\xe\xe0\x0\xe\xe0\x0\xe\xe0\x0\xe\xf8\x0\x0\x20\x0\x7\xf8\xc0\x1d\x8e\x3\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xf0\x7f" "\x70\x0\x7\x70\x0\x4\x30\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xf8\x3\x70\x0\xe7\x7f\x7\x77\x70\x7\x77\x70\xfe\x7\x0\x7\x70\x0\xff\x71\x38\x7\x77\x70\x7\x77\x70\x7\x77\x70\xff\x3\x0\x0\x0\x0\xfe\x70\x38\x7\x70\x0\x7" "\x70\x0\x7\x70\x70\xfe\x3\x0\x0\x7\x70\xfc\xe7\x70\x7\x77\x70\x7\x77\x70\x7\x77\x70\xfe\x7\x0\x0\x0\x0\xfe\x70\x1c\x87\xf3\x3f\x7\x70\x0\x7\x70\x70\xfe\x3\x0\xf8\xc0\x1d\x1c\xc0\x1\x7c\xc0\x1\x1c\xc0\x1\x1c\xc0\x1\x1c\xc0\x1\x0\x0" "\x0\xfe\x77\x70\x7\x77\x70\x7\x77\x70\xfe\x7\x70\x0\xe7\x3f\x7\x70\x0\xff\x71\x38\x7\x77\x70\x7\x77\x70\x7\x77\x70\x7\x7\x0\x70\x0\x7\x0\xc0\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\xfe\x3\x0\x0\x7\x70\x0\x0\x7c\x0\x7\x70\x0\x7\x70" "\x6\x67\x70\xfc\x3\x0\x7\x70\x0\x87\x73\x1c\xe7\xf0\x7\x77\x70\xe\xc7\x71\x38\x7\x7\x0\x0\x80\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\xfe\x3\x0\x0\x0\x0\x7\xf3\x78\xdf\xf7\x7f\x77\x77\x72\x7\x77\x70\x7\x7\x0\x0\x0\x0\xff" "\x71\x38\x7\x77\x70\x7\x77\x70\x7\x77\x70\x7\x7\x0\x0\x0\x0\xfe\x71\x38\x7\x77\x70\x7\x77\x70\x7\x77\x70\xfe\x3\x0\x0\x0\x0\xff\x71\x38\x7\x77\x70\x7\x77\x70\x7\xf7\x3f\x7\x70\x0\x0\x0\x0\xfc\xe7\x70\x7\x77\x70\x7\x77\x70\x7\xe7" "\x7f\x0\x7\x70\x0\x0\x0\xff\x73\x70\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\x0\x0\x0\x0\x0\x7e\x70\x0\x7\xe0\x3f\x0\x7\x70\x6\x77\x70\xfe\x3\x0\x1c\xc0\x1\xfe\xc0\x1\x1c\xc0\x1\x1c\xc0\x1\x1c\xc0\x1\xf8\x7\x0\x0\x0\x0\x7\x77\x70" "\x7\x77\x70\x7\x77\x70\x7\x77\x70\xfe\x7\x0\x0\x0\x0\x7\x77\x70\x7\xe7\x38\x8e\xe3\x38\xdc\xc1\x1f\xf8\x0\x0\x0\x0\x0\x7\x77\x70\x27\x77\x77\xff\xe7\x3f\xde\xe3\x38\x6\x3\x0\x0\x0\x0\x7\xe7\x38\xdc\x81\xf\x70\x80\xf\xdc\xe1\x38\x7" "\x7\x0\x0\x0\x0\x0\x70\x70\x7\x77\x70\x7\xe7\x7f\x0\x7\x70\xfc\x3\x0\x0\x0\x0\xff\x7\x38\xc0\x1\xe\x70\x80\x3\x1c\xe0\x0\xff\x7\x0\xe0\x1\x7\x70\x0\x7\x70\x80\x3\x70\x0\x7\x70\x0\x7\xe0\x1\x0\x70\x0\x7\x70\x0\x7\x70\x0" "\x7\x70\x0\x7\x70\x0\x7\x70\x0\x7\x78\x0\xe\xe0\x0\xe\xe0\x0\x1c\xe0\x0\xe\xe0\x0\xe\x78\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xf0\xff\xff\xf\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xf0\xff\x7\x70\x0\x7\x70\x0\xff\xf" "\x0\x0\x0\x0\x0\x0\x0\x0\xf0\xff\x0\x0\x0\x0\x0\x0\xff\xf\x0\x0\x0\x0\x0\x0\x0\x0\xf0\xff\x0\xe\xe0\x0\xe\xe0\xff\xf\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xf0\x7f\xfe\xc3\x1f\xf8\x0\x7\x20\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x2\x70\x80\xf\xfc\xe1\x3f\xff\x7\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" ), // Font no. 17 FontEntry("IDC-MicroKnight", 8, 8, "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x18\x18\x18\x18\x18\x0\x18\x0\x36\x36\x24\x0\x0\x0\x0\x0\x36\x36\x7f\x36\x7f\x36\x36\x0\x8\x3e\xb\x3e\x68\x68\x3e\x8\x6\x69\x3e\x18\xc\x36\x4b\x30\xe\x1b\xe\x6f\x3b\x1b\x3e\x60\x18\x18\x10\x8\x0\x0\x0\x0" "\x18\xc\x6\x6\x6\xc\x18\x0\xc\x18\x30\x30\x30\x18\xc\x0\x0\x36\x1c\x7f\x1c\x36\x0\x0\x0\x18\x18\x7e\x18\x18\x0\x0\x0\x0\x0\x0\x18\x18\x10\x8\x0\x0\x0\x3e\x0\x0\x0\x0\x0\x0\x0\x0\x0\x18\x18\x0\x0\x60\x30\x18\xc\x6\x3\x0" "\x0\x1e\x33\x7b\x6f\x67\x3e\x0\x18\x18\x1c\x18\x18\x18\x7e\x0\x3e\x60\x3c\x6\x3\x3\x7f\x0\x3c\x60\x38\x60\x62\x63\x3e\x0\x18\x18\xc\x36\x33\x7f\x30\x0\x1f\x3\x3f\x60\x62\x33\x1e\x0\xe\x3\x3f\x63\x63\x33\x1e\x0\x7f\x60\x30\x18\x18\x18\x18\x0" "\x1e\x33\x3e\x63\x63\x33\x1e\x0\x1e\x33\x63\x63\x7e\x60\x38\x0\x0\x18\x18\x0\x0\x18\x18\x0\x0\x18\x18\x0\x0\x18\x10\x8\x0\x18\xc\x6\xc\x18\x0\x0\x0\x0\x3e\x0\x3e\x0\x0\x0\x0\xc\x18\x30\x18\xc\x0\x0\x3e\x63\x60\x3c\xc\x0\xc\x0" "\x1c\x36\x7b\x6f\x7b\x3\x66\x3c\x1e\x33\x63\x7f\x63\x63\x63\x0\x1f\x33\x3f\x63\x63\x33\x1f\x0\x1e\x33\x3\x3\x3\x63\x3e\x0\x1f\x33\x63\x63\x63\x63\x3f\x0\x7f\x3\x3f\x3\x3\x3\x7f\x0\x7f\x3\x3f\x3\x3\x3\x3\x0\x1c\x6\x3\x73\x63\x63\x7e\x60" "\x63\x63\x63\x7f\x63\x63\x63\x0\x7e\x18\x18\x18\x18\x18\x7e\x0\x70\x60\x60\x60\x63\x63\x3e\x0\x63\x33\x1b\xf\x1b\x33\x63\x0\x3\x3\x3\x3\x3\x3\x7f\x0\x63\x77\x7f\x6b\x63\x63\x63\x0\x63\x67\x6f\x7b\x73\x63\x63\x0\x1e\x33\x63\x63\x63\x63\x3e\x0" "\x1f\x33\x63\x63\x3f\x3\x3\x0\x1e\x33\x63\x63\x63\x6b\x3e\x30\x1f\x33\x63\x63\x3f\x1b\x33\x60\x1e\x3\x3e\x60\x62\x63\x3e\x0\x7e\x18\x18\x18\x18\x18\x18\x0\x63\x63\x63\x63\x63\x63\x3e\x0\x63\x63\x63\x36\x36\x1c\x1c\x0\x63\x63\x63\x6b\x7f\x77\x63\x0" "\x63\x36\x1c\x1c\x36\x63\x63\x0\x63\x63\x63\x3e\x30\x30\x30\x0\x7f\x30\x18\xc\x6\x3\x7f\x0\x1c\xc\xc\xc\xc\xc\x1c\x0\x0\x3\x6\xc\x18\x30\x60\x0\x1c\x18\x18\x18\x18\x18\x1c\x0\x8\x1c\x36\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x7f" "\x18\x18\x10\x8\x0\x0\x0\x0\x0\x3c\x60\x7e\x63\x63\x7e\x0\x3\x1f\x33\x63\x63\x63\x3f\x0\x0\x1e\x33\x3\x3\x63\x3e\x0\x60\x7c\x66\x63\x63\x63\x7e\x0\x0\x1e\x33\x3f\x3\x63\x3e\x0\x1c\x36\x6\x1e\x6\x6\x6\x6\x0\x7e\x63\x63\x63\x7e\x60\x3e" "\x3\x1f\x33\x63\x63\x63\x63\x0\x18\x0\x1c\x18\x18\x18\x7e\x0\x30\x0\x38\x30\x30\x30\x32\x1c\x3\x33\x1b\xf\x1b\x33\x63\x0\x1c\x18\x18\x18\x18\x18\x7e\x0\x0\x23\x77\x7f\x6b\x63\x63\x0\x0\x1f\x33\x63\x63\x63\x63\x0\x0\x1e\x33\x63\x63\x63\x3e\x0" "\x0\x1f\x33\x63\x63\x63\x3f\x3\x0\x7c\x66\x63\x63\x63\x7e\x60\x0\x3f\x63\x3\x3\x3\x3\x0\x0\x1e\x3\x3e\x60\x63\x3e\x0\xc\x3e\xc\xc\xc\x4c\x38\x0\x0\x63\x63\x63\x63\x63\x7e\x0\x0\x63\x63\x36\x36\x1c\x1c\x0\x0\x63\x6b\x7f\x3e\x36\x22\x0" "\x0\x63\x36\x1c\x1c\x36\x63\x0\x0\x63\x63\x63\x63\x7e\x60\x3e\x0\x7f\x30\x18\xc\x6\x7f\x0\x30\x18\x18\xc\x18\x18\x30\x0\x18\x18\x18\x18\x18\x18\x18\x18\xc\x18\x18\x30\x18\x18\xc\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xff\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xdb\xdb\x0" "\x0\x7e\x0\x7e\x0\x7e\x0\x0\x0\xf8\x8\x8\x8\x8\xf8\x0\x0\xff\x0\x0\x0\x0\xff\x0\x0\x1f\x10\x10\x10\x10\x1f\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x0\x2\x1\x0\x0\x0\x20\x30\x28\x24\x22\xa1\x60\x20\x0\x0\x0\x1\x2\x0\x0\x0" "\x20\x60\xa1\x22\x24\x28\x30\x20\x0\x0\x0\x40\x40\x40\x40\x7f\xff\x81\x81\x81\x81\x80\x80\x80\x0\x0\x0\x20\x20\x11\x11\xe\x38\x44\x44\x82\x82\x0\x0\x0\x0\x0\xfe\x7c\x38\x10\x0\x0\x0\x0\x10\x38\x7c\xfe\x0\x0\x80\xc1\x63\x36\x1c\x8\x0\x0" ), // Font no. 18 FontEntry("INVERSE", 8, 8, "\x0\x0\x0\x0\x0\x0\x0\x0\x7e\x81\xa5\x81\xbd\x99\x81\x7e\x7e\xff\xdb\xff\xff\xc3\xe7\x7e\x0\x77\x7f\x7f\x3e\x1c\x8\x0\x8\x1c\x3e\x7f\x3e\x1c\x8\x0\x18\x3c\x18\xff\xff\x52\x18\x0\x8\x1c\x3e\x7f\x7f\x49\x1c\x0\x0\x0\x18\x3c\x18\x0\x0\x0" "\xff\xff\xe7\xc3\xe7\xff\xff\xff\x0\x3c\x42\x81\x81\x42\x3c\x0\xff\xc3\xbd\x7e\x7e\xbd\xc3\xff\xf8\xe0\xb0\x3e\x63\x63\x3e\x0\x0\x7e\xc3\xc3\x7e\x18\x7e\x18\x20\x60\xe0\x20\x20\x3f\x1f\x0\x30\x50\xb0\xd0\x9f\x8f\xf0\xf0\x81\xc2\xbc\xe4\xa4\xfc\xea\xff" "\x0\x0\x6\x1e\x7e\x1e\x6\x0\x0\x0\x60\x78\x7e\x78\x60\x0\x18\x7e\x18\x18\x18\x18\x7e\x18\x66\x66\x66\x66\x66\x0\x66\x0\xff\x6d\x6e\x6c\x6c\x6c\x6c\x0\x7e\x81\x3e\x42\x42\x7c\x81\x7e\x0\x0\x0\x7e\x7e\x0\x0\x0\x18\x7e\x18\x18\x7e\x18\x0\xff" "\x18\x7e\x18\x18\x18\x18\x18\x0\x18\x18\x18\x18\x18\x7e\x18\x0\x0\x20\x60\xff\x60\x20\x0\x0\x0\x4\x6\xff\x6\x4\x0\x0\x0\x0\x0\x3\x3\x3\xff\x0\x0\x24\x66\xff\x66\x24\x0\x0\x0\x0\x8\x1c\x3e\x7f\x0\x0\x0\x0\x0\x7f\x3e\x1c\x8\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\xc\xc\xc\xc\xc\x0\xc\x0\x66\x66\x0\x0\x0\x0\x0\x0\xa\x1f\xa\x1f\xa\x0\x0\x0\x3e\x4b\xb\x3e\x68\x6b\x3e\x8\xc7\x65\x37\x18\xec\xa6\xe3\x0\x1c\x32\x1c\xa2\x63\x73\x5e\x80\x30\x30\x18\x0\x0\x0\x0\x0" "\x8\x6\x3\x3\x3\x6\x8\x0\x8\x30\x60\x60\x60\x30\x8\x0\x0\x2a\x1c\x7f\x1c\x2a\x0\x0\x0\x18\x18\x7e\x18\x18\x0\x0\x0\x0\x0\x0\x0\x0\x18\xe\x0\x0\x0\xff\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x30\x0\x80\xc0\x60\x30\x18\xc\x6\x3" "\xff\xc3\x99\x99\x99\x99\xc3\xff\xff\xe7\xe3\xe7\xe7\xe7\xc3\xff\xff\xc3\x99\xcf\xe7\xb3\x81\xff\xff\xc3\x9d\xcf\x9f\x99\xc3\xff\xff\xcf\xd7\xdb\x81\xdf\xdf\xff\xff\x81\xf9\xc1\x9f\x9d\xc3\xff\xff\xe3\xf9\xc1\x99\x99\xc3\xff\xff\x81\xbf\xcf\xe7\xe7\xe7\xff" "\xff\xc3\x99\xc3\x99\x99\xc3\xff\xff\xc3\x99\x99\x83\xdf\xe7\xff\x0\xc\x0\x0\x0\xc\x0\x0\x0\xc\x0\x0\x0\xc\x4\x0\x0\x38\xc\x6\xc\x38\x0\x0\x0\x0\x7e\x0\x7e\x0\x0\x0\x0\xe\x18\x30\x18\xe\x0\x0\x3e\x63\x30\x18\xc\x0\xc\x0" "\x3e\x41\x5d\x55\x7d\x1\x3e\x0\xff\xe7\xdb\xdb\x81\xbd\xbd\xff\xff\xc1\x99\xc1\x99\x99\xc1\xff\xff\x83\x39\xf9\xf9\x39\x83\xff\xff\xc1\x99\x99\x99\x99\xc1\xff\xff\x81\xb9\xe1\xe9\xb9\x81\xff\xff\x81\xb9\xe1\xe9\xf9\xf9\xff\xff\xc3\xb9\xf9\x89\xb9\x83\xff" "\x63\x63\x63\x7f\x63\x63\x63\x0\x7e\x18\x18\x18\x18\x18\x7e\x0\x78\x30\x30\x30\x30\x33\x1e\x0\x63\x33\x1b\xf\x1b\x33\x63\x0\xf\x6\x6\x6\x6\x46\x7f\x0\x63\x77\x7f\x6b\x6b\x63\x63\x0\x63\x67\x6f\x7b\x73\x63\x63\x0\x3e\x63\x63\x63\x63\x63\x3e\x0" "\x3f\x66\x66\x3e\x6\x6\xf\x0\x3e\x63\x63\x63\x7b\x73\x3e\x60\x3f\x66\x66\x3e\x66\x66\x67\xc0\x3e\x43\x3\x3e\x60\x63\x3e\x0\x7e\x18\x18\x18\x18\x18\x18\x0\x63\x63\x63\x63\x63\x63\x3e\x0\x63\x63\x63\x63\x63\x36\x1c\x0\x63\x63\x6b\x6b\x6b\x77\x63\x0" "\x63\x36\x1c\x8\x1c\x36\x63\x0\x41\x63\x36\x1c\x8\x8\x1c\x0\x7f\x61\x30\x18\xc\x46\x7f\x0\x38\x18\x18\x18\x18\x18\x18\x38\x3\x6\xc\x18\x30\x60\xc0\x80\xe\xc\xc\xc\xc\xc\xc\xe\x8\x1c\x36\x63\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xff" "\xc\xc\x18\x0\x0\x0\x0\x0\x0\x0\x3e\x60\x7e\x63\x7e\x0\x3\x3\x3f\x63\x63\x63\x3f\x0\x0\x0\x3e\x63\x3\x63\x3e\x0\x60\x60\x7e\x63\x63\x63\x7e\x0\x0\x0\x3e\x63\x7f\x3\x3e\x0\x3c\x66\x6\x3f\x6\x6\x6\x0\x0\x0\xbe\x63\x63\x7e\x60\x3e" "\x3\x3\x3f\x63\x63\x63\x63\x0\x18\x0\x1c\x18\x18\x18\x3c\x0\x30\x0\x38\x30\x30\x30\x33\x1e\x3\x3\x63\x1b\xf\x1b\x63\x0\x1c\x18\x18\x18\x18\x18\x38\x0\x0\x0\x63\x7f\x6b\x6b\x63\x0\x0\x0\x3f\x63\x63\x63\x63\x0\x0\x0\x3e\x63\x63\x63\x3e\x0" "\x0\x0\x3f\x63\x63\x3f\x3\x3\x0\x0\x7e\x63\x63\x7e\x60\xe0\x0\x0\x7b\x6e\x66\x6\x6\x0\x0\x0\x7e\x3\x3e\x60\x3f\x0\x18\x18\x7e\x18\x18\x18\x78\x0\x0\x0\x63\x63\x63\x63\x7e\x0\x0\x0\x63\x63\x63\x36\x1c\x0\x0\x0\x63\x6b\x6b\x77\x63\x0" "\x0\x0\x63\x36\x1c\x36\x63\x0\x0\x0\x63\x63\x63\x7e\x60\x3f\x0\x0\x7f\x30\x8\x46\x7f\x0\x70\x18\x18\xe\x18\x18\x70\x0\x18\x18\x18\x0\x18\x18\x18\x0\x7\xc\xc\x38\xc\xc\x7\x0\xe\xd9\x70\x0\x0\x0\x0\x0\x0\x0\x8\x14\x22\x7f\x0\x0" "\xff\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\x1\x80\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\xff" "\x1\x0\x0\x0\x0\x0\x0\x0\x80\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x1\x0\x0\x0\x0\x0\x0\x0\x80\x1\x3\x7\xf\x1f\x3f\x7f\xff\xff\xfe\xfc\xf8\xf0\xe0\xc0\x80\xff\xff\xff\x7\x7\x7\x7\x7\xff\xff\xff\x0\x0\x0\x0\x0" "\xff\xff\xff\xe0\xe0\xe0\xe0\xe0\x7\x7\x7\x7\x7\x7\x7\x7\xe0\xe0\xe0\xe0\xe0\xe0\xe0\xe0\x7\x7\x7\x7\x7\xff\xff\xff\x0\x0\x0\x0\x0\xff\xff\xff\xe0\xe0\xe0\xe0\xe0\xff\xff\xff\x7\x3\x1\x0\x0\x0\x0\x0\xe0\xc0\x80\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x1\x3\x7\x0\x0\x0\x0\x0\x80\xc0\xe0\x0\x0\x0\xee\x0\x0\x0\x0\x0\x3f\x3f\x3f\x3f\x3f\x3f\x0\x0\x7e\x7e\x7e\x7e\x7e\x7e\x0\x0\xfc\xfc\xfc\xfc\xfc\xfc\x0\x0\xf8\xf8\xf8\xf8\xf8\xf8\x0\x0\xf0\xf0\xf0\xf0\xf0\xf0\x0" "\x0\xe0\xe0\xe0\xe0\xe0\xe0\x0\x0\xc0\xc0\xc0\xc0\xc0\xc0\x0\x0\x80\x80\x80\x80\x80\x80\x0\x0\x1\x1\x1\x1\x1\x1\x0\x0\x3\x3\x3\x3\x3\x3\x0\x0\x7\x7\x7\x7\x7\x7\x0\x0\xf\xf\xf\xf\xf\xf\x0\x0\x1f\x1f\x1f\x1f\x1f\x1f\x0" "\x7e\x7e\x7e\x7e\x7e\x7e\x7e\x7e\xff\xff\x0\x18\x3c\x7e\xff\x0\xff\xff\x0\x0\x0\x0\x18\x18\xff\xff\x0\x18\x3c\x7e\xff\x18\xff\xff\x0\x42\x66\x5a\x42\x42\x0\x0\x0\x0\x18\x0\x0\x0\x0\x3\x3\x3\x3\x3\x3\x3\x0\x1b\x1b\x1b\x1b\x1b\x1b\x1b" "\x0\xdb\xdb\xdb\xdb\xdb\xdb\xdb\x0\x6\x6\x6\x6\x6\x6\x6\x0\x36\x36\x36\x36\x36\x36\x36\x0\xb6\xb6\xb6\xb6\xb6\xb6\xb6\x0\x1\x1\x1\x1\x1\x1\x1\x0\xd\xd\xd\xd\xd\xd\xd\x0\x6d\x6d\x6d\x6d\x6d\x6d\x6d\x0\x0\x18\x3c\x3c\x18\x0\x0" "\x0\x0\x0\x1f\x18\x1f\x18\x18\x6c\x6c\x6c\x6f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x0\x0\x0\x7f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6f\x60\x7f\x0\x0\x6c\x6c\x6c\x7f\x0\x0\x0\x0\x18\x18\x18\x1f\x18\x1f\x0\x0\x0\x0\x0\x1f\x18\x18\x18\x18" "\x18\x18\x18\xf8\x0\x0\x0\x0\x18\x18\x18\xff\x0\x0\x0\x0\x0\x0\x0\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\x18\x18\x18\x0\x0\x0\x0\xff\x0\x0\x0\x18\x18\x18\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\xf8\x18\x18\x6c\x6c\x6c\xec\x6c\x6c\x6c\x6c" "\x6c\x6c\x6c\xec\xc\xfc\x0\x0\x0\x0\x0\xfc\xc\xec\x6c\x6c\x6c\x6c\x6c\xef\x0\xff\x0\x0\x0\x0\x0\xff\x0\xef\x6c\x6c\x6c\x6c\x6c\xec\xc\xec\x6c\x6c\x0\x0\x0\xff\x0\xff\x0\x0\x6c\x6c\x6c\xef\x0\xef\x6c\x6c\x18\x18\x18\xff\x0\xff\x0\x0" "\x6c\x6c\x6c\xff\x0\x0\x0\x0\x0\x0\x0\xff\x0\xff\x18\x18\x0\x0\x0\xff\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xfc\x0\x0\x0\x0\x18\x18\x18\xf8\x18\xf8\x0\x0\x0\x0\x0\xf8\x18\xf8\x18\x18\x0\x0\x0\xfc\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xff\x6c\x6c\x6c\x6c" "\x18\x18\x18\xff\x18\xff\x18\x18\x18\x18\x18\x1f\x0\x0\x0\x0\x0\x0\x0\xf8\x18\x18\x18\x18\xff\xff\xff\xff\xff\xff\xff\xff\x0\x0\x0\x0\xff\xff\xff\xff\xf\xf\xf\xf\xf\xf\xf\xf\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xff\xff\xff\xff\x0\x0\x0\x0" "\x0\x0\xee\x19\x19\xee\x0\x0\x38\x6c\x66\x3f\x63\x63\x3f\x3\x7f\x46\x6\x6\x6\x6\x6\x0\x0\x0\xff\x66\x66\x66\x66\x0\x7f\x46\xc\x18\xc\x46\x7f\x0\x0\x0\xfc\x66\x63\x33\x1e\x0\x0\x0\xcc\xcc\xcc\x7c\xc\xf\x0\x0\xff\x18\x18\x18\x18\x0" "\x3c\x18\x3c\x66\x66\x3c\x18\x3c\x0\x3e\x63\x7f\x63\x3e\x0\x0\x0\x7e\xc3\xc3\xc3\x66\xe7\x0\x78\x98\x3c\x66\x63\x33\x1e\x0\x0\x0\x66\x99\x99\x66\x0\x0\x0\xc0\x3e\x73\x67\x3e\x3\x0\x0\x7c\x3\x7f\x3\x7c\x0\x0\x0\x0\x0\x0\x0\xdb\xdb\x0" "\x0\x7e\x0\x7e\x0\x7e\x0\x0\x0\xf8\x8\x8\x8\x8\xf8\x0\x0\xff\x0\x0\x0\x0\xff\x0\x0\x1f\x10\x10\x10\x10\x1f\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x0\x2\x1\x0\x0\x0\x20\x30\x28\x24\x22\xa1\x60\x20\x0\x0\x0\x1\x2\x0\x0\x0" "\x20\x60\xa1\x22\x24\x28\x30\x20\x0\x0\x0\x40\x40\x40\x40\x7f\xff\x81\x81\x81\x81\x80\x80\x80\x0\x0\x0\x20\x20\x11\x11\xe\x38\x44\x44\x82\x82\x0\x0\x0\x0\x0\xfe\x7c\x38\x10\x0\x0\x0\x0\x10\x38\x7c\xfe\x0\x0\x80\xc1\x63\x36\x1c\x8\x0\x0" ), // Font no. 19 FontEntry("J-CURSE", 8, 8, "\x0\x0\x0\x0\x0\x0\x0\x0\x7e\x81\xa5\x81\xbd\x99\x81\x7e\x7e\xff\xdb\xff\xff\xc3\xe7\x7e\x0\x77\x7f\x7f\x3e\x1c\x8\x0\x8\x1c\x3e\x7f\x3e\x1c\x8\x0\x18\x3c\x18\xff\xff\x52\x18\x0\x8\x1c\x3e\x7f\x7f\x49\x1c\x0\x0\x0\x18\x3c\x18\x0\x0\x0" "\xff\xff\xe7\xc3\xe7\xff\xff\xff\x0\x3c\x42\x81\x81\x42\x3c\x0\xff\xc3\xbd\x7e\x7e\xbd\xc3\xff\xf8\xe0\xb0\x3e\x63\x63\x3e\x0\x0\x7e\xc3\xc3\x7e\x18\x7e\x18\x20\x60\xe0\x20\x20\x3f\x1f\x0\x30\x50\xb0\xd0\x9f\x8f\xf0\xf0\x81\xc2\xbc\xe4\xa4\xfc\xea\xff" "\x0\x0\x6\x1e\x7e\x1e\x6\x0\x0\x0\x60\x78\x7e\x78\x60\x0\x18\x7e\x18\x18\x18\x18\x7e\x18\x66\x66\x66\x66\x66\x0\x66\x0\xff\x6d\x6e\x6c\x6c\x6c\x6c\x0\x7e\x81\x3e\x42\x42\x7c\x81\x7e\x0\x0\x0\x7e\x7e\x0\x0\x0\x18\x7e\x18\x18\x7e\x18\x0\xff" "\x18\x7e\x18\x18\x18\x18\x18\x0\x18\x18\x18\x18\x18\x7e\x18\x0\x0\x20\x60\xff\x60\x20\x0\x0\x0\x4\x6\xff\x6\x4\x0\x0\x0\x0\x0\x3\x3\x3\xff\x0\x0\x24\x66\xff\x66\x24\x0\x0\x0\x0\x8\x1c\x3e\x7f\x0\x0\x0\x0\x0\x7f\x3e\x1c\x8\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x18\x18\x18\xc\xc\x0\xc\x0\x6c\x36\x1b\x0\x0\x0\x0\x0\x0\x6c\xfe\x6c\x6c\xfe\x6c\x0\x18\x7e\x3\x3e\x60\x3f\xc\x0\x0\x66\x33\x18\xcc\x66\x0\x0\x1c\x36\x1c\xb6\x63\x73\xde\x0\x60\x30\x18\x0\x0\x0\x0\x0" "\x30\x18\x18\x18\x18\x18\x18\x30\x6\xc\xc\xc\xc\xc\xc\x6\x8\x2a\x1c\x7f\x1c\x2a\x8\x0\x0\x18\x18\x7e\x18\x18\x0\x0\x0\x0\x0\x0\x0\x0\x18\xc\x0\x0\x0\x7e\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xc\x0\x0\xc0\x60\x30\x18\xc\x6\x0" "\x3c\x66\x66\x6b\x6b\x63\x3e\x0\x30\x38\x30\x18\x18\x18\x18\x0\x3e\x63\x60\x3c\x6\x3\x7f\x0\x3c\x66\x60\x3c\x60\x63\x3e\x0\x66\x66\x66\x63\x7f\x60\x60\x0\x7e\x6\x6\x3e\x60\x60\x3f\x0\x3c\x66\x6\x3f\x63\x63\x3e\x0\x7f\x60\x30\x18\xc\xc\xc\x0" "\x3c\x66\x66\x3e\x63\x63\x3e\x0\x3c\x66\x66\x7c\x60\x60\x3f\x0\x0\xc\x0\x0\x0\xc\x0\x0\x0\xc\x0\x0\x0\xc\x6\x0\x0\x18\xc\x6\xc\x18\x0\x0\x0\x0\x7e\x0\x7e\x0\x0\x0\x0\xc\x18\x30\x18\xc\x0\x0\x3e\x63\x60\x38\xc\x0\xc\x0" "\x7e\xc3\xdb\xdb\x7b\x3\x3e\x0\x7c\x66\x66\x7f\x63\x63\x63\x0\x7c\x66\x66\x7f\x63\x63\x3f\x0\x7c\x66\x6\x3\x3\x63\x3f\x0\x7c\x66\x66\x63\x63\x63\x3f\x0\x7c\x6\x6\x7f\x3\x3\x7f\x0\x7c\x6\x6\x7f\x3\x3\x3\x0\x7c\x66\x6\x73\x63\x63\x3f\x0" "\xc6\xc6\xc6\x7f\x63\x63\x63\x0\x30\x30\x30\x18\x18\x18\x18\x0\x60\x60\x60\x60\x30\x33\x1e\x0\x66\x36\x1e\xf\x1b\x33\x63\x0\x6\x6\x6\x3\x3\x3\x7f\x0\x66\x7e\x7e\x6b\x6b\x63\x63\x0\x66\x6e\x7e\x7b\x73\x63\x63\x0\x3c\x66\x66\x63\x63\x63\x3e\x0" "\x3c\x66\x66\x3f\x3\x3\x3\x0\x3c\x66\x66\x63\x63\x5b\x36\x60\x3e\x66\x66\x3f\x63\x63\x63\x0\x3c\x66\x6\x3c\x60\x63\x3e\x0\xfe\x30\x30\x18\x18\x18\x18\x0\xc6\xc6\xc6\x63\x63\x63\x3e\x0\xc6\xc6\xc6\x63\x63\x36\x1c\x0\xc6\xc6\xc6\x63\x6b\x6b\x3e\x0" "\xc6\x6c\x38\x18\x3c\x66\xc3\x0\x66\x66\x3c\x18\xc\xc\xc\x0\x7f\x60\x30\x1c\x6\x3\x7f\x0\x38\x18\x18\x18\x18\x18\x18\x38\x0\x6\xc\x18\x30\x60\xc0\x0\xe\xc\xc\xc\xc\xc\xc\xe\x18\x3c\x66\xc3\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xff" "\xc\x18\x30\x0\x0\x0\x0\x0\x0\x0\x7c\xc0\xfe\x63\x7e\x0\x6\x6\x3e\x63\x63\x63\x3f\x0\x0\x0\x3c\x66\x3\x63\x3e\x0\xc0\xc0\xfc\x66\x63\x63\x7e\x0\x0\x0\x3c\x66\x7f\x3\x7e\x0\x38\xc\xc\x3f\x6\x6\x6\x0\x0\x0\x3c\x66\x63\x7e\x60\x3e" "\x6\x6\x3e\x63\x63\x63\x63\x0\x30\x0\x30\x30\x18\x18\x18\x0\x60\x0\x60\x60\x30\x30\x30\x1f\x6\x6\x36\x1b\xf\x1b\x33\x0\x30\x30\x30\x18\x18\x18\x18\x0\x0\x0\x3e\x6b\x6b\x6b\x6b\x0\x0\x0\x3c\x66\x63\x63\x63\x0\x0\x0\x3c\x66\x63\x63\x3e\x0" "\x0\x0\x3c\x66\x63\x3f\x3\x3\x0\x0\x7c\x66\x63\x7e\x60\x60\x0\x0\x3e\x63\x3\x3\x3\x0\x0\x0\x3c\x6\x3c\x60\x3e\x0\x30\x30\x7c\x18\x18\x18\x18\x0\x0\x0\x66\x66\x63\x63\x3e\x0\x0\x0\xc6\xc6\x66\x36\x1c\x0\x0\x0\x6b\x6b\x6b\x6b\x3f\x0" "\x0\x0\x63\x36\x1c\x36\x63\x0\x0\x0\xc6\xc6\x63\x7e\x60\x3f\x0\x0\x7f\x30\x1c\x6\x7f\x0\x30\x18\x18\xc\x18\x18\x30\x0\x18\x18\x18\x18\x18\x18\x18\x18\x6\xc\xc\x18\xc\xc\x6\x0\xe\xdb\x70\x0\x0\x0\x0\x0\x0\x0\x8\x14\x22\x7f\x0\x0" "\xff\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\x1\x80\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\xff" "\x1\x0\x0\x0\x0\x0\x0\x0\x80\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x1\x0\x0\x0\x0\x0\x0\x0\x80\x1\x3\x7\xf\x1f\x3f\x7f\xff\xff\xfe\xfc\xf8\xf0\xe0\xc0\x80\xff\xff\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0" "\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\x3\x3\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\xff\xff\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\x0\x55\x0\x0\x0\x0\x0\x3f\x3f\x3f\x3f\x3f\x3f\x0\x0\x7e\x7e\x7e\x7e\x7e\x7e\x0\x0\xfc\xfc\xfc\xfc\xfc\xfc\x0\x0\xf8\xf8\xf8\xf8\xf8\xf8\x0\x0\xf0\xf0\xf0\xf0\xf0\xf0\x0" "\x0\xe0\xe0\xe0\xe0\xe0\xe0\x0\x0\xc0\xc0\xc0\xc0\xc0\xc0\x0\x0\x80\x80\x80\x80\x80\x80\x0\x0\x1\x1\x1\x1\x1\x1\x0\x0\x3\x3\x3\x3\x3\x3\x0\x0\x7\x7\x7\x7\x7\x7\x0\x0\xf\xf\xf\xf\xf\xf\x0\x0\x1f\x1f\x1f\x1f\x1f\x1f\x0" "\x55\x6b\x55\x6b\x55\x6b\x55\x6b\xff\xff\x0\x0\x0\x8\x1c\x3e\xff\xff\x0\x0\x0\x0\x0\x7f\xff\xff\x0\x0\x8\x1c\x3e\x7f\xff\xff\x0\xc3\xe7\xff\xdb\xc3\x0\x0\x0\x0\x18\x0\x0\x0\x0\x3\x3\x3\x3\x3\x3\x3\x0\x1b\x1b\x1b\x1b\x1b\x1b\x1b" "\x0\xdb\xdb\xdb\xdb\xdb\xdb\xdb\x0\x6\x6\x6\x6\x6\x6\x6\x0\x36\x36\x36\x36\x36\x36\x36\x0\xb6\xb6\xb6\xb6\xb6\xb6\xb6\x0\x1\x1\x1\x1\x1\x1\x1\x0\xd\xd\xd\xd\xd\xd\xd\x0\x6d\x6d\x6d\x6d\x6d\x6d\x6d\x0\x0\x18\x3c\x3c\x18\x0\x0" "\x0\x0\x0\x1f\x18\x1f\x18\x18\x6c\x6c\x6c\x6f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x0\x0\x0\x7f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6f\x60\x7f\x0\x0\x6c\x6c\x6c\x7f\x0\x0\x0\x0\x18\x18\x18\x1f\x18\x1f\x0\x0\x0\x0\x0\x1f\x18\x18\x18\x18" "\x18\x18\x18\xf8\x0\x0\x0\x0\x18\x18\x18\xff\x0\x0\x0\x0\x0\x0\x0\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\x18\x18\x18\x0\x0\x0\x0\xff\x0\x0\x0\x18\x18\x18\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\xf8\x18\x18\x6c\x6c\x6c\xec\x6c\x6c\x6c\x6c" "\x6c\x6c\x6c\xec\xc\xfc\x0\x0\x0\x0\x0\xfc\xc\xec\x6c\x6c\x6c\x6c\x6c\xef\x0\xff\x0\x0\x0\x0\x0\xff\x0\xef\x6c\x6c\x6c\x6c\x6c\xec\xc\xec\x6c\x6c\x0\x0\x0\xff\x0\xff\x0\x0\x6c\x6c\x6c\xef\x0\xef\x6c\x6c\x18\x18\x18\xff\x0\xff\x0\x0" "\x6c\x6c\x6c\xff\x0\x0\x0\x0\x0\x0\x0\xff\x0\xff\x18\x18\x0\x0\x0\xff\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xfc\x0\x0\x0\x0\x18\x18\x18\xf8\x18\xf8\x0\x0\x0\x0\x0\xf8\x18\xf8\x18\x18\x0\x0\x0\xfc\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xff\x6c\x6c\x6c\x6c" "\x18\x18\x18\xff\x18\xff\x18\x18\x18\x18\x18\x1f\x0\x0\x0\x0\x0\x0\x0\xf8\x18\x18\x18\x18\xff\xff\xff\xff\xff\xff\xff\xff\x0\x0\x0\x0\xff\xff\xff\xff\xf\xf\xf\xf\xf\xf\xf\xf\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xff\xff\xff\xff\x0\x0\x0\x0" "\x0\x0\xee\x19\x19\xee\x0\x0\x38\x6c\x66\x3f\x63\x63\x3f\x3\x7f\x46\x6\x6\x6\x6\x6\x0\x0\x0\xff\x66\x66\x66\x66\x0\x7f\x46\xc\x18\xc\x46\x7f\x0\x0\x0\xfc\x66\x63\x33\x1e\x0\x0\x0\xcc\xcc\xcc\x7c\xc\xf\x0\x0\xff\x18\x18\x18\x18\x0" "\x3c\x18\x3c\x66\x66\x3c\x18\x3c\x0\x3e\x63\x7f\x63\x3e\x0\x0\x0\x7e\xc3\xc3\xc3\x66\xe7\x0\x78\x98\x3c\x66\x63\x33\x1e\x0\x0\x0\x66\x99\x99\x66\x0\x0\x0\xc0\x3e\x73\x67\x3e\x3\x0\x0\x7c\x3\x7f\x3\x7c\x0\x0\x0\x0\x0\x0\x0\xdb\xdb\x0" "\x0\x7e\x0\x7e\x0\x7e\x0\x0\x0\xf8\x8\x8\x8\x8\xf8\x0\x0\xff\x0\x0\x0\x0\xff\x0\x0\x1f\x10\x10\x10\x10\x1f\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x0\x2\x1\x0\x0\x0\x20\x30\x28\x24\x22\xa1\x60\x20\x0\x0\x0\x1\x2\x0\x0\x0" "\x20\x60\xa1\x22\x24\x28\x30\x20\x0\x0\x0\x40\x40\x40\x40\x7f\xff\x81\x81\x81\x81\x80\x80\x80\x0\x0\x0\x20\x20\x11\x11\xe\x38\x44\x44\x82\x82\x0\x0\x0\x0\x0\xfe\x7c\x38\x10\x0\x0\x0\x0\x10\x38\x7c\xfe\x0\x0\x80\xc1\x63\x36\x1c\x8\x0\x0" ), // Font no. 20 FontEntry("J-ELECTR", 8, 8, "\x0\x0\x0\x0\x0\x0\x0\x0\x7e\x81\xa5\x81\xbd\x99\x81\x7e\x7e\xff\xdb\xff\xc3\xe7\xff\x7e\x36\x7f\x7f\x7f\x3e\x1c\x8\x0\x8\x1c\x3e\x7f\x3e\x1c\x8\x0\x1c\x3e\x1c\x7f\x7f\x49\x8\x3e\x0\x8\x1c\x3e\x7f\x3e\x1c\x3e\x0\x0\x18\x3c\x3c\x18\x0\x0" "\xff\xff\xe7\xc3\xc3\xe7\xff\xff\x0\x3c\x66\x42\x42\x66\x3c\x0\xff\xc3\x99\xbd\xbd\x99\xc3\xff\xf0\xe0\xf0\xbe\x33\x33\x33\x1e\x3c\x66\x66\x66\x3c\x18\x7e\x18\xfc\xcc\xfc\xc\xc\xe\xf\x7\xfe\xc6\xfe\xc6\xc6\xe6\x67\x3\x99\x5a\x3c\xe7\xe7\x3c\x5a\x99" "\x1\x7\x1f\x7f\x1f\x7\x1\x0\x40\x70\x7c\x7f\x7c\x70\x40\x0\x18\x3c\x7e\x18\x18\x7e\x3c\x18\x66\x66\x66\x66\x66\x0\x66\x0\xfe\xdb\xdb\xde\xd8\xd8\xd8\x0\x7c\xc6\x1c\x36\x36\x1c\x61\x3f\x0\x0\x0\x0\x7e\x7e\x7e\x0\x18\x3c\x7e\x18\x7e\x3c\x18\xff" "\x18\x3c\x7e\x18\x18\x18\x18\x0\x18\x18\x18\x18\x7e\x3c\x18\x0\x0\x18\x30\x7f\x30\x18\x0\x0\x0\xc\x6\x7f\x6\xc\x0\x0\x0\x0\x3\x3\x3\x7f\x0\x0\x0\x24\x66\xff\x66\x24\x0\x0\x0\x18\x3c\x7e\xff\xff\x0\x0\x0\xff\xff\x7e\x3c\x18\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x8\x8\x8\x8\x8\x0\x8\x0\x24\x24\x24\x0\x0\x0\x0\x0\x22\x7f\x22\x22\x22\x7f\x22\x0\x14\x7e\x15\x3e\x54\x3f\x14\x0\x0\x44\x22\x10\x8\x44\x22\x0\x1c\x22\x14\x6a\x11\x11\x6e\x0\x10\x10\x10\x0\x0\x0\x0\x0" "\x10\x8\x4\x4\x4\x8\x10\x0\x4\x8\x10\x10\x10\x8\x4\x0\x8\x2a\x1c\x7f\x1c\x2a\x8\x0\x0\x8\x8\x3e\x8\x8\x0\x0\x0\x0\x0\x0\x0\x8\x4\x0\x0\x0\x0\x7e\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x8\x0\x0\x40\x20\x10\x8\x4\x2\x0" "\x1c\x22\x51\x49\x45\x22\x1c\x0\xe\x8\x8\x8\x8\x28\x3e\x0\x1f\x20\x20\x1e\x1\x1\x3f\x0\x1f\x20\x20\x1c\x20\x20\x1f\x0\x1\x21\x21\x21\x7f\x20\x20\x0\x3f\x1\x1\x1f\x20\x20\x1f\x0\x1\x1\x1\x3f\x41\x41\x3e\x0\x3f\x20\x20\x10\x8\x8\x8\x0" "\x1c\x22\x22\x3e\x41\x41\x3e\x0\x3e\x41\x41\x7e\x40\x40\x40\x0\x0\x0\x8\x0\x0\x8\x0\x0\x0\x0\x8\x0\x0\x8\x4\x0\x20\x10\x8\x4\x8\x10\x20\x0\x0\x0\x7e\x0\x7e\x0\x0\x0\x4\x8\x10\x20\x10\x8\x4\x0\x3c\x42\x40\x20\x10\x0\x10\x0" "\x3c\x42\x99\xa5\x59\x2\x7c\x0\x3c\x42\x41\x41\x7f\x41\x41\x0\x3f\x41\x41\x3f\x41\x41\x3f\x0\x7c\x2\x1\x1\x1\x2\x7c\x0\x3f\x41\x41\x41\x41\x41\x3f\x0\x7f\x1\x1\x7f\x1\x1\x7f\x0\x7f\x1\x1\x7f\x1\x1\x1\x0\x7c\x2\x1\x71\x41\x41\x3e\x0" "\x41\x41\x41\x7f\x41\x41\x41\x0\x8\x8\x8\x8\x8\x8\x8\x0\x40\x40\x40\x40\x40\x20\x1e\x0\x21\x11\x9\x7\x9\x11\x21\x0\x1\x1\x1\x1\x1\x1\x7f\x0\x1f\x29\x49\x49\x49\x49\x49\x0\x1f\x21\x41\x41\x41\x41\x41\x0\x3c\x42\x41\x41\x41\x21\x1e\x0" "\x3f\x41\x41\x41\x3f\x1\x1\x0\x3c\x42\x41\x41\x41\x51\x2e\x40\x3f\x41\x41\x21\x1f\x21\x41\x0\x7c\x2\x1\x3e\x40\x40\x3f\x0\x3e\x8\x8\x8\x8\x8\x8\x0\x41\x41\x41\x41\x41\x41\x3e\x0\x41\x41\x41\x41\x41\x22\x1c\x0\x49\x49\x49\x49\x49\x49\x3f\x0" "\x41\x41\x22\x1c\x22\x41\x41\x0\x41\x22\x14\x8\x8\x8\x8\x0\x7f\x40\x30\x8\x6\x1\x7f\x0\xe\x2\x2\x2\x2\x2\xe\x0\x0\x2\x4\x8\x10\x20\x40\x0\x1c\x10\x10\x10\x10\x10\x1c\x0\x8\x14\x22\x41\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xff" "\x4\x4\x4\x0\x0\x0\x0\x0\x0\x0\x3e\x40\x7e\x41\x7e\x0\x1\x1\x3f\x41\x41\x41\x3f\x0\x0\x0\x7e\x1\x1\x1\x7e\x0\x40\x40\x7e\x41\x41\x41\x7e\x0\x0\x0\x3e\x41\x7f\x1\x7e\x0\x3c\x2\x1f\x2\x2\x2\x2\x0\x0\x0\x3e\x41\x41\x7e\x40\x3f" "\x1\x1\x1f\x21\x41\x41\x41\x0\x10\x0\x1c\x10\x10\x10\x10\x0\x20\x0\x38\x20\x20\x20\x10\xf\x1\x1\x21\x11\xf\x11\x21\x0\x4\x4\x4\x4\x4\x4\x18\x0\x0\x0\x3f\x49\x49\x49\x49\x0\x0\x0\x1f\x21\x41\x41\x41\x0\x0\x0\x3e\x41\x41\x41\x3e\x0" "\x0\x0\x3f\x41\x41\x3f\x1\x1\x0\x0\x7e\x41\x41\x7e\x40\x40\x0\x0\x3f\x41\x1\x1\x1\x0\x0\x0\x3e\x1\x1e\x20\x1f\x0\x8\x8\x3e\x8\x8\x8\x30\x0\x0\x0\x41\x41\x41\x41\x3e\x0\x0\x0\x41\x41\x41\x22\x1c\x0\x0\x0\x49\x49\x49\x49\x3f\x0" "\x0\x0\x41\x22\x1c\x22\x41\x0\x0\x0\x41\x41\x41\x7e\x40\x3f\x0\x0\x7f\x20\x1c\x2\x7f\x0\x60\x10\x10\xc\x10\x10\x60\x0\x8\x8\x8\x8\x8\x8\x8\x8\x6\x8\x8\x30\x8\x8\x6\x0\x26\x19\x0\x0\x0\x0\x0\x0\x0\x8\x1c\x36\x63\x63\x7f\x0" "\xff\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\x1\x80\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\xff" "\x1\x0\x0\x0\x0\x0\x0\x0\x80\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x1\x0\x0\x0\x0\x0\x0\x0\x80\x1\x3\x7\xf\x1f\x3f\x7f\xff\xff\xfe\xfc\xf8\xf0\xe0\xc0\x80\xff\xff\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0" "\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\x3\x3\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\xff\xff\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\x0\xaa\x0\x0\x0\x0\x0\x3f\x3f\x3f\x3f\x3f\x3f\x0\x0\x7e\x7e\x7e\x7e\x7e\x7e\x0\x0\xfc\xfc\xfc\xfc\xfc\xfc\x0\x0\xf8\xf8\xf8\xf8\xf8\xf8\x0\x0\xf0\xf0\xf0\xf0\xf0\xf0\x0" "\x0\xe0\xe0\xe0\xe0\xe0\xe0\x0\x0\xc0\xc0\xc0\xc0\xc0\xc0\x0\x0\x80\x80\x80\x80\x80\x80\x0\x0\x1\x1\x1\x1\x1\x1\x0\x0\x3\x3\x3\x3\x3\x3\x0\x0\x7\x7\x7\x7\x7\x7\x0\x0\xf\xf\xf\xf\xf\xf\x0\x0\x1f\x1f\x1f\x1f\x1f\x1f\x0" "\x7e\x7e\x7e\x7e\x7e\x7e\x7e\x7e\xff\xff\x0\x18\x3c\x7e\xff\x0\xff\xff\x0\x0\x0\x0\x18\x18\xff\xff\x0\x18\x3c\x7e\xff\x18\xff\xff\x0\x42\x66\x5a\x42\x42\x0\x0\x0\x18\x18\x0\x0\x0\x0\x3\x3\x3\x3\x3\x3\x3\x0\x1b\x1b\x1b\x1b\x1b\x1b\x1b" "\x0\xdb\xdb\xdb\xdb\xdb\xdb\xdb\x0\x6\x6\x6\x6\x6\x6\x6\x0\x36\x36\x36\x36\x36\x36\x36\x0\xb6\xb6\xb6\xb6\xb6\xb6\xb6\x0\x1\x1\x1\x1\x1\x1\x1\x0\xd\xd\xd\xd\xd\xd\xd\x0\x6d\x6d\x6d\x6d\x6d\x6d\x6d\x0\x0\x18\x3c\x3c\x18\x0\x0" "\x0\x0\x1f\x18\x1f\x18\x18\x18\x6c\x6c\x6f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x0\x0\x7f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6f\x60\x7f\x0\x0\x0\x6c\x6c\x6c\x6c\x7f\x0\x0\x0\x18\x18\x1f\x18\x1f\x0\x0\x0\x0\x0\x0\x0\x1f\x18\x18\x18" "\x18\x18\x18\x18\xf8\x0\x0\x0\x18\x18\x18\x18\xff\x0\x0\x0\x0\x0\x0\x0\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\x18\x18\x0\x0\x0\x0\xff\x0\x0\x0\x18\x18\x18\x18\xff\x18\x18\x18\x18\x18\xf8\x18\xf8\x18\x18\x18\x6c\x6c\x6c\x6c\xec\x6c\x6c\x6c" "\x6c\x6c\xec\xc\xfc\x0\x0\x0\x0\x0\xfc\xc\xec\x6c\x6c\x6c\x6c\x6c\xef\x0\xff\x0\x0\x0\x0\x0\xff\x0\xef\x6c\x6c\x6c\x6c\x6c\xec\xc\xec\x6c\x6c\x6c\x0\x0\xff\x0\xff\x0\x0\x0\x6c\x6c\xef\x0\xef\x6c\x6c\x6c\x18\x18\xff\x0\xff\x0\x0\x0" "\x6c\x6c\x6c\x6c\xff\x0\x0\x0\x0\x0\xff\x0\xff\x18\x18\x18\x0\x0\x0\x0\xff\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xfc\x0\x0\x0\x18\x18\xf8\x18\xf8\x0\x0\x0\x0\x0\xf8\x18\xf8\x18\x18\x18\x0\x0\x0\x0\xfc\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xff\x6c\x6c\x6c" "\x18\x18\xff\x18\xff\x18\x18\x18\x18\x18\x18\x18\x1f\x0\x0\x0\x0\x0\x0\x0\xf8\x18\x18\x18\xff\xff\xff\xff\xff\xff\xff\xff\x0\x0\x0\x0\xff\xff\xff\xff\xf\xf\xf\xf\xf\xf\xf\xf\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xff\xff\xff\xff\x0\x0\x0\x0" "\x0\x0\x6e\x3b\x13\x3b\x6e\x0\x0\x1e\x33\x1f\x33\x1f\x3\x3\x0\x3f\x33\x3\x3\x3\x3\x0\x0\x0\x7f\x36\x36\x36\x36\x0\x3f\x33\x6\xc\x6\x33\x3f\x0\x0\x0\x7e\x1b\x1b\x1b\xe\x0\x0\x66\x66\x66\x66\x3e\x6\x3\x0\x6e\x3b\x18\x18\x18\x18\x0" "\x3f\xc\x1e\x33\x33\x1e\xc\x3f\x1c\x36\x63\x7f\x63\x36\x1c\x0\x1c\x36\x63\x63\x36\x36\x77\x0\x38\xc\x18\x3e\x33\x33\x1e\x0\x0\x0\x7e\xdb\xdb\x7e\x0\x0\x60\x30\x7e\xdb\xdb\x7e\x6\x3\x1c\x6\x3\x1f\x3\x6\x1c\x0\x0\x0\x0\x0\x0\xdb\xdb\x0" "\x0\x7e\x0\x7e\x0\x7e\x0\x0\x0\xf8\x8\x8\x8\x8\xf8\x0\x0\xff\x0\x0\x0\x0\xff\x0\x0\x1f\x10\x10\x10\x10\x1f\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x0\x2\x1\x0\x0\x0\x20\x30\x28\x24\x22\xa1\x60\x20\x0\x0\x0\x1\x2\x0\x0\x0" "\x20\x60\xa1\x22\x24\x28\x30\x20\x0\x0\x0\x40\x40\x40\x40\x7f\xff\x81\x81\x81\x81\x80\x80\x80\x0\x0\x0\x20\x20\x11\x11\xe\x38\x44\x44\x82\x82\x0\x0\x0\x0\x0\xfe\x7c\x38\x10\x0\x0\x0\x0\x10\x38\x7c\xfe\x0\x0\x80\xc1\x63\x36\x1c\x8\x0\x0" ), // Font no. 21 FontEntry("J-FLUX", 8, 8, "\x0\x0\x0\x0\x0\x0\x0\x0\x7e\x81\xa5\x81\xbd\x99\x81\x7e\x7e\xff\xdb\xff\xc3\xe7\xff\x7e\x36\x7f\x7f\x7f\x3e\x1c\x8\x0\x8\x1c\x3e\x7f\x3e\x1c\x8\x0\x1c\x3e\x1c\x7f\x7f\x49\x8\x3e\x0\x8\x1c\x3e\x7f\x3e\x1c\x3e\x0\x0\x18\x3c\x3c\x18\x0\x0" "\xff\xff\xe7\xc3\xc3\xe7\xff\xff\x0\x3c\x66\x42\x42\x66\x3c\x0\xff\xc3\x99\xbd\xbd\x99\xc3\xff\xf0\xe0\xf0\xbe\x33\x33\x33\x1e\x3c\x66\x66\x66\x3c\x18\x7e\x18\xfc\xcc\xfc\xc\xc\xe\xf\x7\xfe\xc6\xfe\xc6\xc6\xe6\x67\x3\x99\x5a\x3c\xe7\xe7\x3c\x5a\x99" "\x1\x7\x1f\x7f\x1f\x7\x1\x0\x40\x70\x7c\x7f\x7c\x70\x40\x0\x18\x3c\x7e\x18\x18\x7e\x3c\x18\x66\x66\x66\x66\x66\x0\x66\x0\xfe\xdb\xdb\xde\xd8\xd8\xd8\x0\x7c\xc6\x1c\x36\x36\x1c\x61\x3f\x0\x0\x0\x0\x7e\x7e\x7e\x0\x18\x3c\x7e\x18\x7e\x3c\x18\xff" "\x18\x3c\x7e\x18\x18\x18\x18\x0\x18\x18\x18\x18\x7e\x3c\x18\x0\x0\x18\x30\x7f\x30\x18\x0\x0\x0\xc\x6\x7f\x6\xc\x0\x0\x0\x0\x3\x3\x3\x7f\x0\x0\x0\x24\x66\xff\x66\x24\x0\x0\x0\x18\x3c\x7e\xff\xff\x0\x0\x0\xff\xff\x7e\x3c\x18\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\xc\xc\xc\xc\xc\x0\xc\x0\x36\x36\x36\x0\x0\x0\x0\x0\x36\x36\x7f\x36\x7f\x36\x36\x0\x18\x7e\x3\x3e\x60\x3f\x18\x0\x0\x66\x33\x18\xc\x66\x33\x0\x1c\x36\x1c\x6e\x3b\x33\x6e\x0\x30\x30\x30\x0\x0\x0\x0\x0" "\x18\xc\x6\x6\x6\xc\x18\x0\x6\xc\x18\x18\x18\xc\x6\x0\x0\x66\x3c\xff\x3c\x66\x0\x0\x0\x18\x18\x7e\x18\x18\x0\x0\x0\x0\x0\x0\x0\x18\xc\x0\x0\x0\x0\x7e\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x18\x0\x0\x60\x30\x18\xc\x6\x0\x0" "\x3e\x63\x6b\x6b\x6b\x63\x3e\x0\xe\xc\xc\xc\xc\x2c\x3e\x0\x1f\x30\x30\x1e\x3\x3\x3f\x0\x1f\x30\x30\x1e\x30\x30\x1f\x0\x3\x33\x33\x33\x7f\x30\x30\x0\x3f\x3\x3\x1f\x30\x30\x1f\x0\x3\x3\x3\x3f\x63\x63\x3e\x0\x3f\x30\x30\x18\xc\xc\xc\x0" "\x1c\x36\x36\x3e\x63\x63\x3e\x0\x3e\x63\x63\x7e\x60\x60\x60\x0\x0\x0\x18\x0\x0\x18\x0\x0\x0\x0\x18\x0\x0\x18\xc\x0\x0\x30\x18\xc\x18\x30\x0\x0\x0\x0\x7e\x0\x7e\x0\x0\x0\x0\xc\x18\x30\x18\xc\x0\x0\x3c\x66\x60\x30\x18\x0\x18\x0" "\x3c\x66\xdb\xdb\x73\x6\x3c\x0\x3c\x66\x63\x63\x7f\x63\x63\x0\x3f\x63\x63\x3f\x63\x63\x3f\x0\x7c\x6\x3\x3\x3\x6\x7c\x0\x3f\x63\x63\x63\x63\x63\x3f\x0\x7f\x3\x3\x7f\x3\x3\x7f\x0\x7f\x3\x3\x7f\x3\x3\x3\x0\x7c\x6\x3\x73\x63\x63\x3e\x0" "\x63\x63\x63\x7f\x63\x63\x63\x0\x18\x18\x18\x18\x18\x18\x18\x0\x60\x60\x60\x60\x60\x60\x3e\x0\x63\x33\x1b\xf\x1b\x33\x63\x0\x3\x3\x3\x3\x3\x3\x7f\x0\x3f\x6b\x6b\x6b\x6b\x6b\x6b\x0\x1f\x33\x63\x63\x63\x63\x63\x0\x3c\x66\x63\x63\x63\x63\x3e\x0" "\x3f\x63\x63\x63\x3f\x3\x3\x0\x3c\x66\x63\x63\x63\x5b\x36\x60\x3f\x63\x63\x63\x3f\x63\xc3\x0\x7c\x6\x3\x3e\x60\x60\x3f\x0\x7e\x18\x18\x18\x18\x18\x18\x0\x63\x63\x63\x63\x63\x63\x3e\x0\x63\x63\x63\x63\x63\x36\x1c\x0\x6b\x6b\x6b\x6b\x6b\x6b\x3f\x0" "\x63\x63\x63\x3e\x63\x63\x63\x0\x33\x33\x33\x1e\xc\xc\xc\x0\x7f\x60\x30\x18\xc\x6\x7f\x0\x1e\x6\x6\x6\x6\x6\x1e\x0\x0\x6\xc\x18\x30\x60\x0\x0\x1e\x18\x18\x18\x18\x18\x1e\x0\x18\x3c\x66\xc3\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xff" "\xc\xc\xc\x0\x0\x0\x0\x0\x0\x0\x3e\x60\x7e\x63\x7e\x0\x3\x3\x3f\x63\x63\x63\x3f\x0\x0\x0\x7e\x3\x3\x3\x7e\x0\x60\x60\x7e\x63\x63\x63\x7e\x0\x0\x0\x3e\x63\x7f\x3\x7e\x0\x3c\x6\x1f\x6\x6\x6\x6\x0\x0\x0\x3e\x63\x63\x7e\x60\x3f" "\x3\x3\x3f\x63\x63\x63\x63\x0\x18\x0\x1e\x18\x18\x18\x18\x0\x30\x0\x3c\x30\x30\x30\x30\x1f\x3\x3\x63\x33\x1f\x33\x63\x0\xc\xc\xc\xc\xc\xc\x38\x0\x0\x0\x3f\x6b\x6b\x6b\x6b\x0\x0\x0\x3f\x63\x63\x63\x63\x0\x0\x0\x3e\x63\x63\x63\x3e\x0" "\x0\x0\x3f\x63\x63\x3f\x3\x3\x0\x0\x7e\x63\x63\x7e\x60\x60\x0\x0\x3f\x63\x3\x3\x3\x0\x0\x0\x3e\x3\x1e\x30\x1f\x0\xc\xc\x3f\xc\xc\xc\x38\x0\x0\x0\x63\x63\x63\x63\x3e\x0\x0\x0\x63\x63\x63\x36\x1c\x0\x0\x0\x6b\x6b\x6b\x6b\x3f\x0" "\x0\x0\x63\x63\x3e\x63\x63\x0\x0\x0\x63\x63\x63\x7e\x60\x3f\x0\x0\x7f\x30\x1c\x6\x7f\x0\xe0\x30\x30\x1c\x30\x30\xe0\x0\x18\x18\x18\x18\x18\x18\x18\x18\x7\xc\xc\x38\xc\xc\x7\x0\x6e\x3b\x0\x0\x0\x0\x0\x0\x0\x8\x1c\x36\x63\x63\x7f\x0" "\xff\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\x1\x80\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\xff" "\x1\x0\x0\x0\x0\x0\x0\x0\x80\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x1\x0\x0\x0\x0\x0\x0\x0\x80\x1\x3\x7\xf\x1f\x3f\x7f\xff\xff\xfe\xfc\xf8\xf0\xe0\xc0\x80\xff\xff\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0" "\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\x3\x3\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\xff\xff\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\x0\xaa\x0\x0\x0\x0\x0\x3f\x3f\x3f\x3f\x3f\x3f\x0\x0\x7e\x7e\x7e\x7e\x7e\x7e\x0\x0\xfc\xfc\xfc\xfc\xfc\xfc\x0\x0\xf8\xf8\xf8\xf8\xf8\xf8\x0\x0\xf0\xf0\xf0\xf0\xf0\xf0\x0" "\x0\xe0\xe0\xe0\xe0\xe0\xe0\x0\x0\xc0\xc0\xc0\xc0\xc0\xc0\x0\x0\x80\x80\x80\x80\x80\x80\x0\x0\x1\x1\x1\x1\x1\x1\x0\x0\x3\x3\x3\x3\x3\x3\x0\x0\x7\x7\x7\x7\x7\x7\x0\x0\xf\xf\xf\xf\xf\xf\x0\x0\x1f\x1f\x1f\x1f\x1f\x1f\x0" "\x7e\x7e\x7e\x7e\x7e\x7e\x7e\x7e\xff\xff\x0\x18\x3c\x7e\xff\x0\xff\xff\x0\x0\x0\x0\x18\x18\xff\xff\x0\x18\x3c\x7e\xff\x18\xff\xff\x0\x42\x66\x5a\x42\x42\x0\x0\x0\x18\x18\x0\x0\x0\x0\x3\x3\x3\x3\x3\x3\x3\x0\x1b\x1b\x1b\x1b\x1b\x1b\x1b" "\x0\xdb\xdb\xdb\xdb\xdb\xdb\xdb\x0\x6\x6\x6\x6\x6\x6\x6\x0\x36\x36\x36\x36\x36\x36\x36\x0\xb6\xb6\xb6\xb6\xb6\xb6\xb6\x0\x1\x1\x1\x1\x1\x1\x1\x0\xd\xd\xd\xd\xd\xd\xd\x0\x6d\x6d\x6d\x6d\x6d\x6d\x6d\x0\x0\x18\x3c\x3c\x18\x0\x0" "\x0\x0\x1f\x18\x1f\x18\x18\x18\x6c\x6c\x6f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x0\x0\x7f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6f\x60\x7f\x0\x0\x0\x6c\x6c\x6c\x6c\x7f\x0\x0\x0\x18\x18\x1f\x18\x1f\x0\x0\x0\x0\x0\x0\x0\x1f\x18\x18\x18" "\x18\x18\x18\x18\xf8\x0\x0\x0\x18\x18\x18\x18\xff\x0\x0\x0\x0\x0\x0\x0\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\x18\x18\x0\x0\x0\x0\xff\x0\x0\x0\x18\x18\x18\x18\xff\x18\x18\x18\x18\x18\xf8\x18\xf8\x18\x18\x18\x6c\x6c\x6c\x6c\xec\x6c\x6c\x6c" "\x6c\x6c\xec\xc\xfc\x0\x0\x0\x0\x0\xfc\xc\xec\x6c\x6c\x6c\x6c\x6c\xef\x0\xff\x0\x0\x0\x0\x0\xff\x0\xef\x6c\x6c\x6c\x6c\x6c\xec\xc\xec\x6c\x6c\x6c\x0\x0\xff\x0\xff\x0\x0\x0\x6c\x6c\xef\x0\xef\x6c\x6c\x6c\x18\x18\xff\x0\xff\x0\x0\x0" "\x6c\x6c\x6c\x6c\xff\x0\x0\x0\x0\x0\xff\x0\xff\x18\x18\x18\x0\x0\x0\x0\xff\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xfc\x0\x0\x0\x18\x18\xf8\x18\xf8\x0\x0\x0\x0\x0\xf8\x18\xf8\x18\x18\x18\x0\x0\x0\x0\xfc\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xff\x6c\x6c\x6c" "\x18\x18\xff\x18\xff\x18\x18\x18\x18\x18\x18\x18\x1f\x0\x0\x0\x0\x0\x0\x0\xf8\x18\x18\x18\xff\xff\xff\xff\xff\xff\xff\xff\x0\x0\x0\x0\xff\xff\xff\xff\xf\xf\xf\xf\xf\xf\xf\xf\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xff\xff\xff\xff\x0\x0\x0\x0" "\x0\x0\x6e\x3b\x13\x3b\x6e\x0\x0\x1e\x33\x1f\x33\x1f\x3\x3\x0\x3f\x33\x3\x3\x3\x3\x0\x0\x0\x7f\x36\x36\x36\x36\x0\x3f\x33\x6\xc\x6\x33\x3f\x0\x0\x0\x7e\x1b\x1b\x1b\xe\x0\x0\x66\x66\x66\x66\x3e\x6\x3\x0\x6e\x3b\x18\x18\x18\x18\x0" "\x3f\xc\x1e\x33\x33\x1e\xc\x3f\x1c\x36\x63\x7f\x63\x36\x1c\x0\x1c\x36\x63\x63\x36\x36\x77\x0\x38\xc\x18\x3e\x33\x33\x1e\x0\x0\x0\x7e\xdb\xdb\x7e\x0\x0\x60\x30\x7e\xdb\xdb\x7e\x6\x3\x1c\x6\x3\x1f\x3\x6\x1c\x0\x0\x0\x0\x0\x0\xdb\xdb\x0" "\x0\x7e\x0\x7e\x0\x7e\x0\x0\x0\xf8\x8\x8\x8\x8\xf8\x0\x0\xff\x0\x0\x0\x0\xff\x0\x0\x1f\x10\x10\x10\x10\x1f\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x0\x2\x1\x0\x0\x0\x20\x30\x28\x24\x22\xa1\x60\x20\x0\x0\x0\x1\x2\x0\x0\x0" "\x20\x60\xa1\x22\x24\x28\x30\x20\x0\x0\x0\x40\x40\x40\x40\x7f\xff\x81\x81\x81\x81\x80\x80\x80\x0\x0\x0\x20\x20\x11\x11\xe\x38\x44\x44\x82\x82\x0\x0\x0\x0\x0\xfe\x7c\x38\x10\x0\x0\x0\x0\x10\x38\x7c\xfe\x0\x0\x80\xc1\x63\x36\x1c\x8\x0\x0" ), // Font no. 22 FontEntry("J-TERMO", 8, 8, "\x0\x0\x0\x0\x0\x0\x0\x0\x7e\x81\xa5\x81\xbd\x99\x81\x7e\x7e\xff\xdb\xff\xff\xc3\xe7\x7e\x0\x77\x7f\x7f\x3e\x1c\x8\x0\x8\x1c\x3e\x7f\x3e\x1c\x8\x0\x18\x3c\x18\xff\xff\x52\x18\x0\x8\x1c\x3e\x7f\x7f\x49\x1c\x0\x0\x0\x18\x3c\x18\x0\x0\x0" "\xff\xff\xe7\xc3\xe7\xff\xff\xff\x0\x3c\x42\x81\x81\x42\x3c\x0\xff\xc3\xbd\x7e\x7e\xbd\xc3\xff\xf8\xe0\xb0\x3e\x63\x63\x3e\x0\x0\x7e\xc3\xc3\x7e\x18\x7e\x18\x20\x60\xe0\x20\x20\x3f\x1f\x0\x30\x50\xb0\xd0\x9f\x8f\xf0\xf0\x81\xc2\xbc\xe4\xa4\xfc\xea\xff" "\x0\x0\x6\x1e\x7e\x1e\x6\x0\x0\x0\x60\x78\x7e\x78\x60\x0\x18\x7e\x18\x18\x18\x18\x7e\x18\x66\x66\x66\x66\x66\x0\x66\x0\xff\x6d\x6e\x6c\x6c\x6c\x6c\x0\x7e\x81\x3e\x42\x42\x7c\x81\x7e\x0\x0\x0\x7e\x7e\x0\x0\x0\x18\x7e\x18\x18\x7e\x18\x0\xff" "\x18\x7e\x18\x18\x18\x18\x18\x0\x18\x18\x18\x18\x18\x7e\x18\x0\x0\x20\x60\xff\x60\x20\x0\x0\x0\x4\x6\xff\x6\x4\x0\x0\x0\x0\x0\x3\x3\x3\xff\x0\x0\x24\x66\xff\x66\x24\x0\x0\x0\x0\x8\x1c\x3e\x7f\x0\x0\x0\x0\x0\x7f\x3e\x1c\x8\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x1c\x1c\x1c\x1c\x1c\x0\x1c\x0\x77\x77\x77\x0\x0\x0\x0\x0\x0\x6c\xfe\x6c\x6c\xfe\x6c\x0\x18\x7e\x7\x3e\x70\x3f\xc\x0\x0\x66\x33\x18\xcc\x66\x0\x0\x1c\x36\x1c\xb6\x63\x73\xde\x0\x60\x30\x18\x0\x0\x0\x0\x0" "\x30\x18\x18\x18\x18\x18\x18\x30\x6\xc\xc\xc\xc\xc\xc\x6\x8\x2a\x1c\x7f\x1c\x2a\x8\x0\x0\x18\x18\x7e\x18\x18\x0\x0\x0\x0\x0\x0\x0\x0\x18\xc\x0\x0\x0\x7e\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xc\x0\x0\xe0\x70\x38\x1c\xe\x7\x0" "\x3e\x77\x77\x7f\x77\x77\x3e\x0\x38\x3c\x38\x38\x38\x38\x7c\x0\x3e\x77\x70\x3c\xe\x7\x7f\x0\x3e\x70\x3c\x70\x77\x77\x3e\x0\x77\x77\x77\x77\x7e\x70\x70\x0\x7f\x7\x3f\x70\x77\x77\x3f\x0\x3e\x77\x7\x3f\x77\x77\x3e\x0\x7f\x60\x70\x38\x1c\x1c\x1c\x0" "\x3e\x77\x77\x3e\x77\x77\x3e\x0\x3e\x77\x7e\x70\x77\x77\x3e\x0\x0\xc\x0\x0\x0\xc\x0\x0\x0\xc\x0\x0\x0\xc\x6\x0\x0\x18\xc\x6\xc\x18\x0\x0\x0\x0\x7e\x0\x7e\x0\x0\x0\x0\xc\x18\x30\x18\xc\x0\x0\x3e\x77\x70\x38\x1c\x0\x1c\x0" "\x7e\xc3\xdb\xdb\x7b\x3\x3e\x0\x3e\x77\x7f\x77\x77\x77\x77\x0\x3f\x77\x3f\x77\x77\x77\x3f\x0\x3e\x77\x7\x7\x7\x77\x3e\x0\x3f\x77\x77\x77\x77\x77\x3f\x0\x7f\x7\x1f\x7\x77\x77\x7f\x0\x7f\x7\x1f\x7\x7\x7\x7\x0\x7e\x7\x77\x77\x77\x77\x3e\x0" "\x77\x77\x77\x7f\x77\x77\x77\x0\x1c\x1c\x1c\x1c\x1c\x1c\x1c\x0\x70\x70\x70\x70\x77\x77\x3e\x0\x77\x77\x3f\xf\x3f\x77\x77\x0\x7\x7\x7\x7\x77\x77\x7f\x0\x77\x7f\x77\x77\x77\x77\x77\x0\x3f\x77\x77\x77\x77\x77\x77\x0\x3e\x7f\x77\x77\x77\x7f\x3e\x0" "\x3f\x77\x3f\x7\x7\x7\x7\x0\x3e\x77\x77\x77\x77\x77\x7e\xe0\x3f\x77\x3f\x77\x77\x77\x77\x0\x3e\x7\x3e\x70\x77\x77\x3e\x0\x7f\x1c\x1c\x1c\x1c\x1c\x1c\x0\x77\x77\x77\x77\x77\x77\x3e\x0\x77\x77\x77\x77\x77\x36\x1c\x0\x77\x77\x77\x77\x77\x7f\x77\x0" "\x77\x77\x3e\x1c\x3e\x77\x77\x0\x77\x77\x3e\x1c\x1c\x1c\x1c\x0\x7f\x70\x38\x1c\xe\x7\x7f\x0\x38\x18\x18\x18\x18\x18\x18\x38\x0\x7\xe\x1c\x38\x70\xe0\x0\xe\xc\xc\xc\xc\xc\xc\xe\x18\x3c\x66\xc3\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xff" "\xc\x18\x30\x0\x0\x0\x0\x0\x0\x0\x3e\x70\x7e\x77\x7e\x0\x7\x7\x3f\x77\x77\x77\x3f\x0\x0\x0\x3e\x77\x7\x77\x3e\x0\x70\x70\x7e\x77\x77\x77\x7e\x0\x0\x0\x3e\x77\x7f\x7\x7e\x0\x3c\xe\xe\x3f\xe\xe\xe\x0\x0\x0\x3e\x77\x77\x7e\x70\x3e" "\x7\x7\x3f\x77\x77\x77\x77\x0\x38\x0\x38\x38\x38\x38\x38\x0\x70\x0\x70\x70\x70\x70\x70\x3f\x7\x7\x77\x37\x1f\x37\x77\x0\x1c\x1c\x1c\x1c\x1c\x1c\x1c\x0\x0\x0\x3f\x6b\x6b\x6b\x6b\x0\x0\x0\x3f\x77\x77\x77\x77\x0\x0\x0\x3e\x77\x77\x77\x3e\x0" "\x0\x0\x3f\x77\x77\x3f\x7\x7\x0\x0\x7e\x77\x77\x7e\x70\x70\x0\x0\x3f\x77\x7\x7\x7\x0\x0\x0\x7e\x7\x7e\xe0\x7e\x0\x1c\x1c\x7f\x1c\x1c\x1c\x1c\x0\x0\x0\x77\x77\x77\x77\x3e\x0\x0\x0\x77\x77\x77\x36\x1c\x0\x0\x0\x6b\x6b\x6b\x6b\x3f\x0" "\x0\x0\x77\x36\x1c\x36\x77\x0\x0\x0\x77\x77\x77\x7e\x70\x3f\x0\x0\x7f\x38\x1c\xe\x7f\x0\x30\x18\x18\xc\x18\x18\x30\x0\x18\x18\x18\x18\x18\x18\x18\x18\x6\xc\xc\x18\xc\xc\x6\x0\xe\xdb\x70\x0\x0\x0\x0\x0\x0\x0\x8\x14\x22\x7f\x0\x0" "\xff\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\x1\x80\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\xff" "\x1\x0\x0\x0\x0\x0\x0\x0\x80\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x1\x0\x0\x0\x0\x0\x0\x0\x80\x1\x3\x7\xf\x1f\x3f\x7f\xff\xff\xfe\xfc\xf8\xf0\xe0\xc0\x80\xff\xff\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0" "\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\x3\x3\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\xff\xff\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\x0\x55\x0\x0\x0\x0\x0\x3f\x3f\x3f\x3f\x3f\x3f\x0\x0\x7e\x7e\x7e\x7e\x7e\x7e\x0\x0\xfc\xfc\xfc\xfc\xfc\xfc\x0\x0\xf8\xf8\xf8\xf8\xf8\xf8\x0\x0\xf0\xf0\xf0\xf0\xf0\xf0\x0" "\x0\xe0\xe0\xe0\xe0\xe0\xe0\x0\x0\xc0\xc0\xc0\xc0\xc0\xc0\x0\x0\x80\x80\x80\x80\x80\x80\x0\x0\x1\x1\x1\x1\x1\x1\x0\x0\x3\x3\x3\x3\x3\x3\x0\x0\x7\x7\x7\x7\x7\x7\x0\x0\xf\xf\xf\xf\xf\xf\x0\x0\x1f\x1f\x1f\x1f\x1f\x1f\x0" "\x55\x6b\x55\x6b\x55\x6b\x55\x6b\xff\xff\x0\x0\x0\x8\x1c\x3e\xff\xff\x0\x0\x0\x0\x0\x7f\xff\xff\x0\x0\x8\x1c\x3e\x7f\xff\xff\x0\xc3\xe7\xff\xdb\xc3\x0\x0\x0\x0\x18\x0\x0\x0\x0\x3\x3\x3\x3\x3\x3\x3\x0\x1b\x1b\x1b\x1b\x1b\x1b\x1b" "\x0\xdb\xdb\xdb\xdb\xdb\xdb\xdb\x0\x6\x6\x6\x6\x6\x6\x6\x0\x36\x36\x36\x36\x36\x36\x36\x0\xb6\xb6\xb6\xb6\xb6\xb6\xb6\x0\x1\x1\x1\x1\x1\x1\x1\x0\xd\xd\xd\xd\xd\xd\xd\x0\x6d\x6d\x6d\x6d\x6d\x6d\x6d\x0\x0\x18\x3c\x3c\x18\x0\x0" "\x0\x0\x0\x1f\x18\x1f\x18\x18\x6c\x6c\x6c\x6f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x0\x0\x0\x7f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6f\x60\x7f\x0\x0\x6c\x6c\x6c\x7f\x0\x0\x0\x0\x18\x18\x18\x1f\x18\x1f\x0\x0\x0\x0\x0\x1f\x18\x18\x18\x18" "\x18\x18\x18\xf8\x0\x0\x0\x0\x18\x18\x18\xff\x0\x0\x0\x0\x0\x0\x0\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\x18\x18\x18\x0\x0\x0\x0\xff\x0\x0\x0\x18\x18\x18\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\xf8\x18\x18\x6c\x6c\x6c\xec\x6c\x6c\x6c\x6c" "\x6c\x6c\x6c\xec\xc\xfc\x0\x0\x0\x0\x0\xfc\xc\xec\x6c\x6c\x6c\x6c\x6c\xef\x0\xff\x0\x0\x0\x0\x0\xff\x0\xef\x6c\x6c\x6c\x6c\x6c\xec\xc\xec\x6c\x6c\x0\x0\x0\xff\x0\xff\x0\x0\x6c\x6c\x6c\xef\x0\xef\x6c\x6c\x18\x18\x18\xff\x0\xff\x0\x0" "\x6c\x6c\x6c\xff\x0\x0\x0\x0\x0\x0\x0\xff\x0\xff\x18\x18\x0\x0\x0\xff\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xfc\x0\x0\x0\x0\x18\x18\x18\xf8\x18\xf8\x0\x0\x0\x0\x0\xf8\x18\xf8\x18\x18\x0\x0\x0\xfc\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xff\x6c\x6c\x6c\x6c" "\x18\x18\x18\xff\x18\xff\x18\x18\x18\x18\x18\x1f\x0\x0\x0\x0\x0\x0\x0\xf8\x18\x18\x18\x18\xff\xff\xff\xff\xff\xff\xff\xff\x0\x0\x0\x0\xff\xff\xff\xff\xf\xf\xf\xf\xf\xf\xf\xf\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xff\xff\xff\xff\x0\x0\x0\x0" "\x0\x0\xee\x19\x19\xee\x0\x0\x38\x6c\x66\x3f\x63\x63\x3f\x3\x7f\x46\x6\x6\x6\x6\x6\x0\x0\x0\xff\x66\x66\x66\x66\x0\x7f\x46\xc\x18\xc\x46\x7f\x0\x0\x0\xfc\x66\x63\x33\x1e\x0\x0\x0\xcc\xcc\xcc\x7c\xc\xf\x0\x0\xff\x18\x18\x18\x18\x0" "\x3c\x18\x3c\x66\x66\x3c\x18\x3c\x0\x3e\x63\x7f\x63\x3e\x0\x0\x0\x7e\xc3\xc3\xc3\x66\xe7\x0\x78\x98\x3c\x66\x63\x33\x1e\x0\x0\x0\x66\x99\x99\x66\x0\x0\x0\xc0\x3e\x73\x67\x3e\x3\x0\x0\x7c\x3\x7f\x3\x7c\x0\x0\x0\x0\x0\x0\x0\xdb\xdb\x0" "\x0\x7e\x0\x7e\x0\x7e\x0\x0\x0\xf8\x8\x8\x8\x8\xf8\x0\x0\xff\x0\x0\x0\x0\xff\x0\x0\x1f\x10\x10\x10\x10\x1f\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x0\x2\x1\x0\x0\x0\x20\x30\x28\x24\x22\xa1\x60\x20\x0\x0\x0\x1\x2\x0\x0\x0" "\x20\x60\xa1\x22\x24\x28\x30\x20\x0\x0\x0\x40\x40\x40\x40\x7f\xff\x81\x81\x81\x81\x80\x80\x80\x0\x0\x0\x20\x20\x11\x11\xe\x38\x44\x44\x82\x82\x0\x0\x0\x0\x0\xfe\x7c\x38\x10\x0\x0\x0\x0\x10\x38\x7c\xfe\x0\x0\x80\xc1\x63\x36\x1c\x8\x0\x0" ), // Font no. 23 FontEntry("KANAFONT", 8, 8, "\x0\x0\x0\x0\x0\x0\x0\x0\x3c\x42\xa5\x81\xbd\x99\x42\x3c\x3c\x7e\xdb\xff\xc3\xe7\x7e\x3c\x0\x66\xff\xff\xff\x7e\x18\x0\x0\x0\x1c\x3e\x3e\x1c\x0\x0\x0\x18\x3c\x66\xe7\x18\x3c\x0\x18\x3c\x7e\xff\x7e\x18\x3c\x0\x0\x0\x3c\x7e\x7e\x3c\x0\x0" "\xff\xff\xc3\x81\x81\xc3\xff\xff\x0\x0\x3c\x7e\x66\x7e\x3c\x0\xff\xff\xc3\x81\x99\x81\xc3\xff\x78\x70\x58\x3e\x63\x63\x3e\x0\x3c\x66\x66\x3c\x18\x7e\x18\x18\xf8\x18\x18\xf8\x18\x1e\x1f\xe\xfe\xc6\xc6\xfe\xc6\xe6\x77\x3\xdb\xdb\x18\xff\xff\x18\xdb\xdb" "\xe\x1e\x3e\x7e\x3e\x1e\xe\x0\x70\x78\x7c\x7e\x7c\x78\x70\x0\x18\x3c\x7e\x18\x7e\x3c\x18\x0\x66\x66\x66\x66\x66\x0\x66\x0\xff\xff\x66\x66\x66\x66\x66\x0\x7e\x3\x3f\x66\x66\x7c\x60\x3f\x0\x0\x0\x0\xff\xff\xff\x0\x18\x3c\x7e\x18\x7e\x3c\x18\x7e" "\x18\x3c\x7e\x18\x18\x18\x18\x0\x18\x18\x18\x18\x7e\x3c\x18\x0\x0\x18\x30\x7f\x30\x18\x0\x0\x0\xc\x6\x7f\x6\xc\x0\x0\x0\x0\x3\x3\x7f\x7f\x0\x0\x0\x24\x66\xff\x66\x24\x0\x0\x0\x18\x3c\x7e\xff\xff\x0\x0\x0\x0\xff\xff\x7e\x3c\x18\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x18\x3c\x3c\x3c\x18\x0\x18\x0\x33\x77\x66\x0\x0\x0\x0\x0\x36\x7f\x7f\x36\x7f\x7f\x36\x0\x1c\x7e\xf\x3e\x78\x3f\x1c\x0\x0\x6e\x77\x38\x1c\xee\x76\x0\x1c\x3e\x36\xde\x77\x7f\xde\x0\x18\x1c\xc\x0\x0\x0\x0\x0" "\x38\x3c\xc\xc\xc\x3c\x38\x0\x1c\x3c\x30\x30\x30\x3c\x1c\x0\x0\x36\x1c\x7f\x7f\x1c\x36\x0\x0\x18\x18\x7e\x7e\x18\x18\x0\x0\x0\x0\x0\x0\x18\x1c\xc\x0\x0\x0\x7e\x7e\x0\x0\x0\x0\x0\x0\x0\x0\x18\x18\x0\x0\x60\x70\x38\x1c\xe\x6\x0" "\x3e\x7f\x67\x63\x73\x7f\x3e\x0\x1e\x1e\x18\x18\x18\x7e\x7e\x0\x3f\x7f\x60\x3e\x7\x7f\x7f\x0\x3f\x7f\x60\x3c\x70\x7f\x3f\x0\x63\x63\x63\x7f\x7f\x60\x60\x0\x7f\x7f\x3\x3f\x70\x7f\x3f\x0\x7c\x7e\x7\x3f\x63\x7f\x3e\x0\x7f\x7f\x60\x70\x1c\xe\xe\x0" "\x3e\x7f\x63\x3e\x63\x7f\x3e\x0\x3e\x7f\x63\x7f\x70\x7f\x3f\x0\x0\x18\x18\x0\x0\x18\x18\x0\x0\x18\x18\x0\x0\x18\x1c\xc\x0\x38\x1c\xe\xe\x1c\x38\x0\x0\x7f\x7f\x0\x0\x7f\x7f\x0\x0\x1c\x38\x70\x70\x38\x1c\x0\x3e\x7f\x70\x38\x1c\x0\x1c\x1c" "\x3e\x7f\x63\x7b\x3\x7f\x7e\x0\x3e\x7f\x63\x7f\x7f\x63\x63\x0\x3f\x7f\x63\x3f\x63\x7f\x3f\x0\x7c\x7e\x7\x3\x3\x7f\x7e\x0\x1f\x3f\x73\x63\x63\x7f\x3f\x0\x7c\x7e\x7\x7f\x3\x7f\x7f\x0\x7c\x7e\x7\x7f\x7f\x3\x3\x0\x7c\x7e\x7\x7b\x63\x7f\x3e\x0" "\x63\x63\x63\x7f\x7f\x63\x63\x0\x3c\x3c\x18\x18\x18\x3c\x3c\x0\x7c\x7c\x60\x60\x70\x7f\x3f\x0\x63\x63\x33\x1f\x3f\x73\x63\x0\x3\x3\x3\x3\x7\x7e\x7c\x0\x63\x7f\x7f\x63\x63\x63\x63\x0\x67\x6f\x7f\x7b\x73\x63\x63\x0\x3c\x7e\x67\x63\x63\x7f\x3e\x0" "\x3f\x7f\x63\x7f\x3f\x3\x3\x0\x3c\x7e\x67\x63\x5b\x3b\x76\x60\x3f\x7f\x63\x3f\x3f\x63\x63\x0\x7e\x7f\x3\x3f\x60\x7f\x3f\x0\x7e\x7e\x18\x18\x18\x18\x18\x0\x63\x63\x63\x63\x63\x7f\x3e\x0\x63\x63\x63\x63\x77\x3e\x1c\x0\x63\x63\x63\x63\x7f\x7f\x63\x0" "\x63\x63\x63\x3e\x3e\x63\x63\x0\x63\x63\x7f\x7e\x60\x7f\x3f\x0\xff\xff\x70\x38\xe\xff\xff\x0\x3c\x3c\xc\xc\xc\x3c\x3c\x0\x0\x6\xe\x1c\x38\x70\x60\x0\x3c\x3c\x30\x30\x30\x3c\x3c\x0\x1c\x3e\x77\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xff\xff" "\xc\x1c\x18\x0\x0\x0\x0\x0\x0\x0\x3e\x7f\x63\x7f\x7e\x0\x3\x3\x3f\x7f\x63\x7f\x3f\x0\x0\x0\x7e\x7f\x3\x7f\x7e\x0\x60\x60\x7e\x7f\x63\x7f\x7e\x0\x0\x3e\x7f\x63\x7f\x3\x7e\x0\x70\x78\x18\x7e\x18\x1e\xe\x0\x0\x3e\x7f\x63\x7e\x60\x7f\x3f" "\x3\x3\x3f\x7f\x63\x63\x63\x0\x1c\x1c\x0\x1e\x1e\x78\x70\x0\x70\x70\x0\x78\x78\x70\x3f\x1f\x3\x33\x33\x1f\x3f\x33\x33\x0\x18\x18\x18\x18\x18\x78\x70\x0\x0\x0\x3e\x7f\x6b\x63\x63\x0\x0\x0\x3f\x7f\x63\x63\x63\x0\x0\x0\x3e\x7f\x63\x7f\x3e\x0" "\x0\x3e\x7f\x63\x7f\x3f\x3\x3\x0\x7e\x7f\x63\x7f\x7e\x60\x60\x0\x0\x3f\x7f\x63\x3\x3\x0\x0\x0\x7e\xf\x3e\x78\x3f\x0\xc\xc\x3f\x3f\xc\x3c\x38\x0\x0\x0\x63\x63\x63\x7f\x3e\x0\x0\x0\x63\x63\x77\x3e\x1c\x0\x0\x0\x63\x63\x6b\x7f\x3e\x0" "\x0\x0\x63\x3e\x3e\x63\x63\x0\x0\x66\x66\x7e\x7c\x70\x3f\x1f\x0\x0\x7f\x78\x3e\x7\x7f\x0\x70\x78\x18\xe\xe\x18\x78\x70\x18\x18\x18\x18\x18\x18\x18\x18\xe\x1e\x18\x70\x70\x18\x1e\xe\x6e\x7f\x3b\x0\x0\x0\x0\x0\x0\x8\x1c\x3e\x77\x7f\x0\x0" "\xff\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\x1\x80\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\xff" "\x1\x0\x0\x0\x0\x0\x0\x0\x80\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x1\x0\x0\x0\x0\x0\x0\x0\x80\x1\x3\x7\xf\x1f\x3f\x7f\xff\xff\xfe\xfc\xf8\xf0\xe0\xc0\x80\xff\xff\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0" "\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\x3\x3\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\xff\xff\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\x0\xaa\x0\x0\x0\x0\x0\x3f\x3f\x3f\x3f\x3f\x3f\x0\x0\x7e\x7e\x7e\x7e\x7e\x7e\x0\x0\xfc\xfc\xfc\xfc\xfc\xfc\x0\x0\xf8\xf8\xf8\xf8\xf8\xf8\x0\x0\xf0\xf0\xf0\xf0\xf0\xf0\x0" "\x0\xe0\xe0\xe0\xe0\xe0\xe0\x0\x0\xc0\xc0\xc0\xc0\xc0\xc0\x0\x0\x80\x80\x80\x80\x80\x80\x0\x0\x1\x1\x1\x1\x1\x1\x0\x0\x3\x3\x3\x3\x3\x3\x0\x0\x7\x7\x7\x7\x7\x7\x0\x0\xf\xf\xf\xf\xf\xf\x0\x0\x1f\x1f\x1f\x1f\x1f\x1f\x0" "\x7e\x7e\x7e\x7e\x7e\x7e\x7e\x7e\xff\xff\x18\x3c\x66\xc3\x66\x66\xff\xff\x0\x0\x0\x0\x18\x18\xff\xff\x0\x18\x3c\x7e\x18\x18\xff\xff\x0\x66\x7e\x7e\x66\x66\x0\x0\x0\x8\x0\x0\x0\x0\x0\x3\x3\x3\x3\x3\x3\x3\x0\x1b\x1b\x1b\x1b\x1b\x1b\x1b" "\x0\xdb\xdb\xdb\xdb\xdb\xdb\xdb\x0\x6\x6\x6\x6\x6\x6\x6\x0\x36\x36\x36\x36\x36\x36\x36\x0\xb6\xb6\xb6\xb6\xb6\xb6\xb6\x0\x1\x1\x1\x1\x1\x1\x1\x0\xd\xd\xd\xd\xd\xd\xd\x0\x6d\x6d\x6d\x6d\x6d\x6d\x6d\x0\x0\x0\x18\x18\x0\x0\x0" "\x0\x0\x1f\x18\x1f\x18\x18\x18\x66\x66\x67\x60\x67\x66\x66\x66\x66\x66\x66\x66\x66\x66\x66\x66\x0\x0\x7f\x60\x67\x66\x66\x66\x66\x66\x67\x60\x7f\x0\x0\x0\x66\x66\x66\x66\x7f\x0\x0\x0\x18\x18\x1f\x18\x1f\x0\x0\x0\x0\x0\x0\x1f\x18\x18\x18\x18" "\x18\x18\x18\xf8\x0\x0\x0\x0\x18\x18\x18\xff\x0\x0\x0\x0\x0\x0\x0\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\x18\x18\x18\x0\x0\x0\x0\xff\x0\x0\x0\x18\x18\x18\xff\x18\x18\x18\x18\x18\x18\xf8\x18\xf8\x18\x18\x18\x66\x66\x66\x66\xe6\x66\x66\x66" "\x66\x66\xe6\x6\xfe\x0\x0\x0\x0\x0\xfe\x6\xe6\x66\x66\x66\x66\x66\xe7\x0\xff\x0\x0\x0\x0\x0\xff\x0\xe7\x66\x66\x66\x66\x66\xe6\x6\xe6\x66\x66\x66\x0\x0\xff\x0\xff\x0\x0\x0\x66\x66\xe7\x0\xe7\x66\x66\x66\x18\x18\xff\x0\xff\x0\x0\x0" "\x66\x66\x66\xff\x0\x0\x0\x0\x0\x0\xff\x0\xff\x18\x18\x18\x0\x0\x0\xff\x66\x66\x66\x66\x66\x66\x66\xfe\x0\x0\x0\x0\x18\x18\xf8\x18\xf8\x0\x0\x0\x0\x0\xf8\x18\xf8\x18\x18\x18\x0\x0\x0\xfe\x66\x66\x66\x66\x66\x66\x66\xff\x66\x66\x66\x66" "\x18\x18\xff\x18\xff\x18\x18\x18\x18\x18\x18\x1f\x0\x0\x0\x0\x0\x0\x0\xf8\x18\x18\x18\x18\xff\xff\xff\xff\xff\xff\xff\xff\x0\x0\x0\x0\xff\xff\xff\xff\xf\xf\xf\xf\xf\xf\xf\xf\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xff\xff\xff\xff\x0\x0\x0\x0" "\x0\x0\x6e\x7f\x33\x7f\x6e\x0\x3f\x7f\x63\x3f\x63\x7f\x3f\x3\x7f\x7f\x63\x3\x3\x3\x3\x0\x0\x3\xff\xff\x66\x66\x66\x0\x7f\x7f\xe\x1c\xe\x7f\x7f\x0\x0\xc0\xfe\x7f\x33\x3f\x1e\x0\x0\x0\x66\x66\x7e\x3e\x7\x3\x0\x0\xff\xff\x1b\x18\x18\x0" "\x0\x3c\x7e\x66\x66\x7e\x3c\x0\x3e\x7f\x63\x7f\x63\x7f\x3e\x0\x3e\x7f\x63\x77\x36\x77\x77\x0\x7e\x7\x3e\x7f\x63\x7f\x3e\x0\x0\x0\x7e\xdb\xdb\x7e\x0\x0\x30\x30\x7e\xdb\xdb\x7e\xc\xc\x3e\x3f\x3\x3f\x3\x3f\x3e\x0\x0\x0\x0\x0\x0\xdb\xdb\x0" "\x0\x7e\x0\x7e\x0\x7e\x0\x0\x0\xf8\x8\x8\x8\x8\xf8\x0\x0\xff\x0\x0\x0\x0\xff\x0\x0\x1f\x10\x10\x10\x10\x1f\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x0\x2\x1\x0\x0\x0\x20\x30\x28\x24\x22\xa1\x60\x20\x0\x0\x0\x1\x2\x0\x0\x0" "\x20\x60\xa1\x22\x24\x28\x30\x20\x0\x0\x0\x40\x40\x40\x40\x7f\xff\x81\x81\x81\x81\x80\x80\x80\x0\x0\x0\x20\x20\x11\x11\xe\x38\x44\x44\x82\x82\x0\x0\x0\x0\x0\xfe\x7c\x38\x10\x0\x0\x0\x0\x10\x38\x7c\xfe\x0\x0\x80\xc1\x63\x36\x1c\x8\x0\x0" ), // Font no. 24 FontEntry("MOTIF", 8, 8, "\x0\x0\x0\x0\x0\x0\x0\x0\x7e\x81\xa5\x81\xbd\x99\x81\x7e\x3e\x7f\x6b\x5d\x63\x7f\x3e\x0\x63\x77\x7f\x7f\x3e\x1c\x8\x0\x8\x1c\x3e\x7f\x3e\x1c\x8\x0\x8\x1c\x8\x77\x77\x8\x1c\x0\x1c\x3e\x7f\x7f\x36\x8\x1c\x0\x0\x18\x3c\x7e\x3c\x18\x0\x0" "\xff\xe7\xc3\x81\xc3\xe7\xff\xff\x0\x18\x3c\x66\x66\x3c\x18\x0\xff\xe7\xc3\x99\x99\xc3\xe7\xff\x78\x70\x78\x6c\x1e\x33\x33\x1e\x7e\xc3\xc3\x7e\x18\x7e\x18\x18\x78\x58\x78\x18\x18\xe\xf\x6\x7c\x7c\x6c\x6c\x6f\x66\x78\x30\xdb\x3c\x66\xe7\x66\x3c\xdb\x0" "\x1\x3\xf\x1f\xf\x3\x1\x0\x40\x60\x78\x7c\x78\x60\x40\x0\x18\x3c\x7e\x18\x7e\x3c\x18\x0\x66\x66\x66\x66\x66\x0\x66\x0\xfe\xdb\xde\xdc\xd8\xd8\xd8\x0\x3c\x66\x1c\x36\x36\x1c\x33\x1e\x0\x0\x0\x0\x7f\x7f\x7f\x0\x18\x3c\x7e\x18\x7e\x3c\x18\x7e" "\x18\x3c\x7e\x18\x18\x18\x18\x0\x18\x18\x18\x18\x7e\x3c\x18\x0\x0\x18\x38\x7f\x38\x18\x0\x0\x0\xc\xe\x7f\xe\xc\x0\x0\x0\x0\x3\x3\x3\x7f\x0\x0\x0\x24\x66\xff\x66\x24\x0\x0\x0\x8\x1c\x3e\x3e\x7f\x0\x0\x0\x7f\x3e\x3e\x1c\x8\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x18\x3c\x3c\x18\x18\x0\x18\x0\x36\x36\x36\x0\x0\x0\x0\x0\x36\x36\x7f\x36\x7f\x36\x36\x0\x18\x7e\x3\x3e\x60\x3f\x18\x0\x0\x63\x30\x18\xc\x6\x63\x0\x1c\x36\x1c\x6e\x33\x33\x6e\x0\x18\x18\xc\x0\x0\x0\x0\x0" "\x18\xc\x6\x6\x6\xc\x18\x0\x6\xc\x18\x18\x18\xc\x6\x0\x0\x77\x3e\x7f\x3e\x77\x0\x0\x0\x18\x18\x7e\x18\x18\x0\x0\x0\x0\x0\x0\x18\x18\xc\x0\x0\x0\x0\x7f\x0\x0\x0\x0\x0\x0\x0\x0\x0\x1c\x1c\x0\x60\x30\x18\xc\x6\x3\x1\x0" "\x0\x0\x3c\x76\x66\x6e\x3c\x0\x0\x0\x18\x1c\x18\x18\x3c\x0\x0\x0\x3c\x66\x30\xc\x7e\x0\x0\x7e\x30\x38\x60\x60\x30\x1e\x0\x34\x36\x36\x33\x7f\x30\x0\x0\x7e\x2\x3e\x66\x60\x30\x1e\x38\xc\x6\x3e\x66\x66\x3c\x0\x0\x7e\x60\x30\x38\x18\xc\xc" "\x3c\x66\x66\x3c\x66\x66\x3c\x0\x0\x3c\x66\x66\x7c\x60\x30\x1c\x0\x0\x4\x0\x0\x4\x0\x0\x0\x18\x18\x0\x0\x18\x18\xc\x30\x18\xc\x6\xc\x18\x30\x0\x0\x0\x7f\x0\x0\x7f\x0\x0\x6\xc\x18\x30\x18\xc\x6\x0\x3e\x63\x60\x30\x18\x0\x18\x0" "\x3e\x63\x63\x7b\x3b\x3\x7e\x0\x1c\x36\x63\x63\x7f\x63\x63\x0\x3f\x66\x66\x3e\x66\x66\x3f\x0\x3c\x66\x3\x3\x3\x66\x3c\x0\x1f\x36\x66\x66\x66\x36\x1f\x0\x3f\x33\x6\xc\x6\x33\x3f\x0\x1c\x6\x3\x1f\x3\x3\x3\x0\x3e\x63\x3\x3\x7b\x63\x3e\x0" "\x63\x63\x63\x7f\x63\x63\x63\x0\x3c\x18\x18\x18\x18\x18\x3c\x0\x18\x18\x18\x18\x1b\x1b\xe\x0\x63\x33\x1b\xf\x1b\x33\x63\x0\xf\x6\x6\x6\x6\x46\x7f\x0\x63\x77\x7f\x6b\x6b\x63\x63\x0\x1e\x33\x33\x33\x33\x33\x33\x0\x1c\x36\x63\x7f\x63\x36\x1c\x0" "\x3f\x66\x66\x3e\x6\x6\xf\x0\x3e\x63\x63\x63\x63\x6b\x3e\x60\x0\x3f\x33\x3\x3\x3\x3\x0\x3e\x63\x3\x3e\x60\x63\x3e\x0\x0\x6e\x3b\x18\x18\x18\x18\x0\x63\x63\x63\x63\x63\x63\x3e\x0\x63\x63\x63\x63\x36\x1c\x8\x0\x63\x63\x6b\x6b\x7f\x77\x63\x0" "\x63\x36\x1c\x1c\x1c\x36\x63\x0\x66\x66\x66\x66\x66\x7c\x60\xc0\x7f\x61\x30\x18\xc\x46\x7f\x0\x3e\x6\x6\x6\x6\x6\x3e\x0\x3\x6\xc\x18\x30\x60\x40\x0\x3e\x30\x30\x30\x30\x30\x3e\x0\x8\x1c\x36\x63\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xff" "\xc\xc\x18\x0\x0\x0\x0\x0\x0\x0\x6e\x3b\x13\x3b\x6e\x0\x0\x1e\x33\x1f\x33\x1f\x3\x3\x0\x0\x3e\x63\x3\x63\x3e\x0\x0\x0\x3f\x66\x66\x66\x3f\x0\x0\x1c\x6\x3\x1f\x3\x6\x1c\x0\x0\x7f\x3\x1f\x3\x3\x0\x0\x0\x3c\x66\x66\x38\x60\x38" "\x0\x0\x63\x63\x7f\x63\x63\x0\x0\x0\x3c\x18\x18\x18\x3c\x0\x0\x0\x30\x30\x30\x36\x1c\x0\x0\x0\x63\x33\x1f\x33\x63\x0\x0\x0\x3\x3\x3\x3\x3f\x0\x0\x0\x63\x77\x6b\x6b\x63\x0\x0\x0\x7e\x6c\x6c\x6c\x6c\x0\x0\x0\x3e\x63\x63\x63\x3e\x0" "\x0\x0\x3f\x66\x3e\x6\xf\x0\x0\x0\x3e\x63\x63\x3b\x6e\x0\x0\x0\x3f\x66\x3e\x36\x67\x0\x0\x0\x3e\x3\x3e\x60\x3e\x0\x0\x0\x7e\x5a\x18\x18\x3c\x0\x0\x0\x63\x63\x63\x63\x3e\x0\x0\x0\x63\x63\x36\x1c\x8\x0\x0\x0\x63\x6b\x6b\x77\x63\x0" "\x0\x0\x63\x36\x1c\x36\x63\x0\x0\x0\x66\x66\x3c\x18\x18\x0\x0\x0\x3f\x19\xc\x26\x3f\x0\x70\x18\x18\xe\x18\x18\x70\x0\x18\x18\x18\x0\x18\x18\x18\x0\xe\x18\x18\x70\x18\x18\xe\x0\x6e\x3b\x0\x0\x0\x0\x0\x0\x0\x8\x1c\x1c\x36\x36\x7f\x0" "\xff\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\x1\x80\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\xff" "\x1\x0\x0\x0\x0\x0\x0\x0\x80\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x1\x0\x0\x0\x0\x0\x0\x0\x80\x1\x3\x7\xf\x1f\x3f\x7f\xff\xff\xfe\xfc\xf8\xf0\xe0\xc0\x80\xff\xff\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0" "\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\x3\x3\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\xff\xff\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\xff\x30\xb7\x81\xed\xc\xff\x0\x3f\x29\x23\x31\x25\x3f\x0\x0\x7e\x52\x46\x62\x4a\x7e\x0\x0\xfc\xa4\x8c\xc4\x94\xfc\x0\x0\xf8\x48\x18\x88\x28\xf8\x0\x0\xf0\x90\x30\x10\x50\xf0\x0" "\x0\xe0\x20\x60\x20\xa0\xe0\x0\x0\xc0\x40\xc0\x40\x40\xc0\x0\x0\x80\x80\x80\x80\x80\x80\x0\x0\x1\x1\x1\x1\x1\x1\x0\x0\x3\x2\x2\x3\x2\x3\x0\x0\x7\x5\x4\x6\x4\x7\x0\x0\xf\xa\x8\xc\x9\xf\x0\x0\x1f\x14\x11\x18\x12\x1f\x0" "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xff\xff\x0\x18\x3c\x7e\xff\x0\xff\xff\x0\x0\x0\x0\x18\x18\xff\xff\x0\x18\x3c\x7e\xff\x3c\xff\xff\x0\x42\x66\x5a\x42\x42\x0\x0\x0\x18\x18\x0\x0\x0\x0\x0\x1\x1\x1\x1\x1\x0\x0\x0\x15\x15\x15\x15\x15\x0" "\x0\x0\x55\x55\x55\x55\x55\x0\x0\x0\x5\x5\x5\x5\x5\x0\x0\x0\x55\x55\x55\x55\x55\x0\x0\x0\x55\x55\x55\x55\x55\x0\x0\x0\x1\x1\x1\x1\x1\x0\x0\x0\x5\x5\x5\x5\x5\x0\x0\x0\x55\x55\x55\x55\x55\x0\x0\x0\x18\x3c\x3c\x18\x0\x0" "\x0\x0\x0\x66\x0\x0\x0\x0\x0\x78\x84\x2\x0\x0\x0\x0\x0\x0\x0\x41\x22\x1c\x0\x0\x0\x7c\x44\x44\x44\x44\xc6\x0\x0\x7c\x44\x44\x44\x44\xc7\x0\x0\xc\x34\xc4\x4\x4\x4\x0\x0\x20\x20\x20\x23\x2c\x30\x0\x0\x60\x20\x20\x20\x20\x60\x0" "\x0\x3\x2\x2\x2\x2\x3\x0\x0\x0\x0\x18\x18\x0\x0\x0\x0\x0\x18\x3c\x3c\x18\x0\x0\x0\x0\x18\x3c\x3c\x18\x0\x0\x0\x0\x0\x0\xff\x0\x0\x0\x0\x0\x3c\x3c\x3c\x3c\x0\x0\x0\x18\x3c\x7e\x7e\x3c\x18\x0\x0\x18\x3c\x7e\x7e\x3c\x18\x0" "\x0\x3c\x7e\x7e\x7e\x7e\x3c\x0\x0\x3c\x7e\x7e\x7e\x7e\x3c\x0\x6c\x6c\xef\x0\xff\x0\x0\x0\x0\x0\xff\x0\xef\x6c\x6c\x6c\x6c\x6c\xec\xc\xec\x6c\x6c\x6c\x0\x0\xff\x81\xff\x0\x0\x0\x6c\x6c\xef\x0\xef\x6c\x6c\x6c\x18\x18\xff\x0\xff\x0\x0\x0" "\x6c\x6c\x6c\x6c\xff\x0\x0\x0\x0\x0\xff\x0\xff\x18\x18\x18\x0\x0\x0\x0\xff\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xfc\x0\x0\x0\x18\x18\xf8\x18\xf8\x0\x0\x0\x0\x0\xf8\x18\xf8\x18\x18\x18\x0\x0\x0\x0\xfc\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xff\x6c\x6c\x6c" "\x18\x18\xff\x18\xff\x18\x18\x18\x18\x18\x18\x18\x1f\x0\x0\x0\x0\x0\x0\x0\xf8\x18\x18\x18\xff\xff\xff\xff\xff\xff\xff\xff\x0\x0\x0\x0\xff\xff\xff\xff\xf\xf\xf\xf\xf\xf\xf\xf\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xff\xff\xff\xff\x0\x0\x0\x0" "\x0\x0\x6e\x3b\x13\x3b\x6e\x0\x0\x1e\x33\x1f\x33\x1f\x3\x3\x0\x3f\x33\x3\x3\x3\x3\x0\x0\x0\x7f\x36\x36\x36\x36\x0\x3f\x33\x6\xc\x6\x33\x3f\x0\x0\x0\x7e\x1b\x1b\x1b\xe\x0\x0\x66\x66\x66\x66\x3e\x6\x3\x0\x6e\x3b\x18\x18\x18\x18\x0" "\x3f\xc\x1e\x33\x33\x1e\xc\x3f\x1c\x36\x63\x7f\x63\x36\x1c\x0\x1c\x36\x63\x63\x36\x36\x77\x0\x38\xc\x18\x3e\x33\x33\x1e\x0\x0\x0\x7e\xdb\xdb\x7e\x0\x0\x60\x30\x7e\xdb\xdb\x7e\x6\x3\x1c\x6\x3\x1f\x3\x6\x1c\x0\x0\x0\x0\x0\x0\xdb\xdb\x0" "\x0\x7e\x0\x7e\x0\x7e\x0\x0\x0\xf8\x8\x8\x8\x8\xf8\x0\x0\xff\x0\x0\x0\x0\xff\x0\x0\x1f\x10\x10\x10\x10\x1f\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x0\x2\x1\x0\x0\x0\x20\x30\x28\x24\x22\xa1\x60\x20\x0\x0\x0\x1\x2\x0\x0\x0" "\x20\x60\xa1\x22\x24\x28\x30\x20\x0\x0\x0\x40\x40\x40\x40\x7f\xff\x81\x81\x81\x81\x80\x80\x80\x0\x0\x0\x20\x20\x11\x11\xe\x38\x44\x44\x82\x82\x0\x0\x0\x0\x0\xfe\x7c\x38\x10\x0\x0\x0\x0\x10\x38\x7c\xfe\x0\x0\x80\xc1\x63\x36\x1c\x8\x0\x0" ), // Font no. 25 FontEntry("NOTCH", 8, 8, "\x0\x0\x0\x0\x0\x0\x0\x0\x7e\x81\xa5\x81\xbd\x99\x81\x7e\x7e\xff\xdb\xff\xff\xc3\xe7\x7e\x22\x77\x7f\x7f\x3e\x1c\x8\x0\x8\x1c\x3e\x7f\x3e\x1c\x8\x0\x18\x3c\x18\xff\xff\x52\x18\x0\x8\x1c\x3e\x7f\x7f\x49\x1c\x0\x0\x0\x18\x3c\x18\x0\x0\x0" "\xff\xff\xe7\xc3\xe7\xff\xff\xff\x0\x3c\x42\x42\x42\x42\x3c\x0\xff\xc3\xbd\xbd\xbd\xbd\xc3\xff\xf8\xe0\xb0\x3e\x63\x63\x3e\x0\x0\x7e\xc3\xc3\x7e\x18\x7e\x18\x20\x60\xe0\x20\x2e\x3f\x1f\xe\x30\x50\xb0\xd0\x9f\x8f\xf0\xf0\x81\xc2\xbc\xe4\xa4\xfc\xea\xff" "\x1\x3\x7\xf\xf\x7\x3\x1\x80\xc0\xe0\xf0\xf0\xe0\xc0\x80\xc\x1e\x3f\xc\xc\x3f\x1e\xc\x66\x66\x66\x66\x66\x0\x66\x0\xff\x6d\x6d\x6e\x6c\x6c\x6c\x0\x3e\x41\x1e\x22\x22\x3c\x41\x3e\x0\x0\x0\x0\x7f\x7f\x7f\x7f\x18\x7e\x18\x18\x7e\x18\x0\xff" "\x18\x3c\x7e\x18\x18\x18\x18\x0\x18\x18\x18\x18\x7e\x3c\x18\x0\x0\x20\x60\xff\x60\x20\x0\x0\x0\x4\x6\xff\x6\x4\x0\x0\x0\x0\x0\x3\x3\x3\xff\x0\x0\x24\x66\xff\x66\x24\x0\x0\x0\x0\x0\x0\x18\x3c\x7e\xff\xff\x7e\x3c\x18\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\xc\xc\xc\xc\xc\x0\xc\x0\x66\x66\x11\x0\x0\x0\x0\x0\xa\x1f\xa\x1f\xa\x0\x0\x0\x3e\x4b\xb\x3e\x68\x6b\x3e\x8\xc7\x65\x37\x18\xec\xa6\xe3\x0\x1c\x36\x1c\x6e\x3b\x33\x6e\x0\xc\xc\x6\x0\x0\x0\x0\x0" "\x40\x30\x18\x18\x18\x30\x40\x0\x1\x6\xc\xc\xc\x6\x1\x0\x0\x2a\x1c\x7f\x1c\x2a\x0\x0\x0\x18\x18\x7e\x18\x18\x0\x0\x0\x0\x0\x0\x0\xc\xc\x6\x0\x0\x0\x3f\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x30\x0\x80\xc0\x60\x30\x18\xc\x6\x3" "\x3e\x61\x63\x6b\x63\x63\x3e\x0\x18\x1c\x18\x18\x18\x18\x3c\x0\x3e\x63\x60\x30\xc\x6\x7f\x0\x3e\x43\x60\x3c\x60\x63\x3e\x0\x70\x78\x6c\x46\x7f\x60\x60\x0\x7f\x1\x3\x3f\x60\x60\x3f\x0\x3e\x63\x3\x3f\x63\x63\x3e\x0\x7f\x40\x30\x18\xc\xc\xc\x0" "\x3e\x63\x63\x3e\x63\x63\x3e\x0\x3e\x63\x63\x7e\x60\x30\x1c\x0\x0\xc\xc\x0\x0\xc\xc\x0\x0\xc\xc\x0\xc\xc\x6\x0\xc0\x60\x30\x18\x18\x30\x60\xc0\x0\x0\x7e\x0\x7e\x0\x0\x0\x3\x6\xc\x18\x18\xc\x6\x3\x3e\x63\x30\x18\xc\x0\xc\x0" "\x3e\x41\x5d\x55\x7d\x1\x3e\x0\x1c\x36\x63\x63\x7f\x63\x63\x0\x3f\x61\x63\x3f\x63\x63\x3f\x0\x3c\x66\x3\x3\x43\x66\x3c\x0\x3f\x61\x63\x63\x63\x63\x3f\x0\x7f\x1\x3\x1f\x3\x3\x7f\x0\x7f\x41\x3\x1f\x13\x3\x3\x0\x3e\x63\x3\x7b\x4b\x63\x5e\x0" "\x63\x63\x63\x7f\x63\x63\x63\x0\x7e\x8\x18\x18\x18\x18\x7e\x0\x78\x10\x30\x30\x30\x33\x1e\x0\x63\x33\x1b\xf\x1b\x33\x63\x0\xf\x2\x6\x6\x6\x46\x7f\x0\x63\x77\x7f\x6b\x6b\x63\x63\x0\x63\x67\x6f\x7b\x73\x63\x63\x0\x3e\x61\x63\x63\x63\x63\x3e\x0" "\x3f\x62\x66\x3e\x6\x6\xf\x0\x3e\x61\x63\x63\x7b\x73\x3e\x60\x3f\x62\x66\x3e\x66\x66\x67\xc0\x3e\x43\x3\x3e\x60\x63\x3e\x0\x7e\x8\x18\x18\x18\x18\x18\x0\x63\x63\x63\x63\x63\x63\x3e\x0\x63\x63\x63\x63\x63\x36\x1c\x0\x63\x63\x6b\x6b\x6b\x77\x63\x0" "\x63\x36\x1c\x8\x1c\x36\x63\x0\x41\x63\x36\x1c\xc\xc\x1e\x0\x7f\x61\x30\x18\xc\x46\x7f\x0\x70\x30\x30\x30\x30\x30\x30\x70\x3\x6\xc\x18\x30\x60\xc0\x80\xe\xc\xc\xc\xc\xc\xc\xe\x8\x1c\x36\x63\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xff" "\x18\x18\x30\x0\x0\x0\x0\x0\x0\x0\x3e\x60\x7e\x63\x7e\x0\x3\x3\x3f\x63\x63\x63\x3f\x0\x0\x0\x3e\x63\x3\x63\x3e\x0\x60\x60\x7e\x63\x63\x63\x7e\x0\x0\x0\x3e\x63\x7f\x3\x3e\x0\x3c\x66\x6\x3f\x6\x6\x7\x0\x0\x0\xbe\x63\x63\x7e\x60\x3e" "\x3\x3\x3f\x63\x63\x63\x63\x0\x18\x0\x1c\x18\x18\x18\x3c\x0\x30\x0\x38\x30\x30\x30\x33\x1e\x3\x3\x63\x1b\xf\x1b\x63\x0\x1c\x18\x18\x18\x18\x18\x38\x0\x0\x0\x63\x7f\x6b\x6b\x63\x0\x0\x0\x3f\x61\x63\x63\x63\x0\x0\x0\x3e\x63\x63\x63\x3e\x0" "\x0\x0\x3f\x61\x63\x3f\x3\x3\x0\x0\x7e\x43\x63\x7e\x60\xe0\x0\x0\x7b\x6e\x66\x6\x6\x0\x0\x0\x7e\x3\x3e\x60\x3f\x0\x18\x18\x7e\x18\x18\x18\x78\x0\x0\x0\x63\x63\x63\x63\x3e\x0\x0\x0\x63\x63\x63\x36\x1c\x8\x0\x0\x63\x6b\x6b\x7f\x63\x0" "\x0\x0\x63\x36\x1c\x36\x63\x0\x0\x0\x63\x63\x36\x1c\xc\x7\x0\x0\x7f\x30\x8\x46\x7f\x0\x70\x18\x18\xe\x18\x18\x70\x0\x18\x18\x18\x0\x18\x18\x18\x0\x7\xc\xc\x38\xc\xc\x7\x0\xe\xd9\x70\x0\x0\x0\x0\x0\x0\x0\x8\x14\x22\x7f\x0\x0" "\xff\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\x1\x80\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\xff" "\x1\x0\x0\x0\x0\x0\x0\x0\x80\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x1\x0\x0\x0\x0\x0\x0\x0\x80\x1\x3\x6\xd\x1a\x35\x6a\xd5\xab\x56\xac\x58\xb0\x60\xc0\x80\xff\xff\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0" "\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\x3\x3\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\xff\xff\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\x0\x55\x0\x0\x0\x0\x0\x3f\x3f\x3f\x3f\x3f\x3f\x0\x0\x7e\x7e\x7e\x7e\x7e\x7e\x0\x0\xfc\xfc\xfc\xfc\xfc\xfc\x0\x0\xf8\xf8\xf8\xf8\xf8\xf8\x0\x0\xf0\xf0\xf0\xf0\xf0\xf0\x0" "\x0\xe0\xe0\xe0\xe0\xe0\xe0\x0\x0\xc0\xc0\xc0\xc0\xc0\xc0\x0\x0\x80\x80\x80\x80\x80\x80\x0\x0\x1\x1\x1\x1\x1\x1\x0\x0\x3\x3\x3\x3\x3\x3\x0\x0\x7\x7\x7\x7\x7\x7\x0\x0\xf\xf\xf\xf\xf\xf\x0\x0\x1f\x1f\x1f\x1f\x1f\x1f\x0" "\x3e\x3e\x3e\x3e\x3e\x3e\x3e\x3e\xff\xff\x0\x0\x0\x8\x1c\x3e\xff\xff\x0\x0\x0\x0\x0\x7f\xff\xff\x0\x0\x8\x1c\x3e\x7f\xff\xff\x0\xc3\xe7\xff\xdb\xc3\x0\x0\x0\x0\x18\x0\x0\x0\x0\x3\x3\x3\x3\x3\x3\x3\x0\x1b\x1b\x1b\x1b\x1b\x1b\x1b" "\x0\xdb\xdb\xdb\xdb\xdb\xdb\xdb\x0\x6\x6\x6\x6\x6\x6\x6\x0\x36\x36\x36\x36\x36\x36\x36\x0\xb6\xb6\xb6\xb6\xb6\xb6\xb6\x0\x1\x1\x1\x1\x1\x1\x1\x0\xd\xd\xd\xd\xd\xd\xd\x0\x6d\x6d\x6d\x6d\x6d\x6d\x6d\x0\x0\x18\x3c\x3c\x18\x0\x0" "\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x3e\x7e\x7e\x7e\x7e\x7e\x7e\x3c\x0\x3f\x3f\x3f\x3f\x3f\x3f\xbf\x3f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x3c\x3c\x3c\x3c\x3c\x3c\xbc\x3e\x7c\x7c\x7c\x7c\x7c\x7c\x7c\x7e\x18\x18\x18\x1f\x18\x1f\x0\x0\x0\x0\x0\x1f\x18\x18\x18\x18" "\x18\x18\x18\xf8\x0\x0\x0\x0\x18\x18\x18\xff\x0\x0\x0\x0\x0\x0\x0\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\x18\x18\x18\x0\x0\x0\x0\xff\x0\x0\x0\x18\x18\x18\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\xf8\x18\x18\x6c\x6c\x6c\xec\x6c\x6c\x6c\x6c" "\x6c\x6c\x6c\xec\xc\xfc\x0\x0\x0\x0\x0\xfc\xc\xec\x6c\x6c\x6c\x6c\x6c\xef\x0\xff\x0\x0\x0\x0\x0\xff\x0\xef\x6c\x6c\x6c\x6c\x6c\xec\xc\xec\x6c\x6c\x0\x0\x0\xff\x0\xff\x0\x0\x6c\x6c\x6c\xef\x0\xef\x6c\x6c\x18\x18\x18\xff\x0\xff\x0\x0" "\x6c\x6c\x6c\xff\x0\x0\x0\x0\x0\x0\x0\xff\x0\xff\x18\x18\x0\x0\x0\xff\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xfc\x0\x0\x0\x0\x18\x18\x18\xf8\x18\xf8\x0\x0\x0\x0\x0\xf8\x18\xf8\x18\x18\x0\x0\x0\xfc\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xff\x6c\x6c\x6c\x6c" "\x18\x18\x18\xff\x18\xff\x18\x18\x18\x18\x18\x1f\x0\x0\x0\x0\x0\x0\x0\xf8\x18\x18\x18\x18\xff\xff\xff\xff\xff\xff\xff\xff\x0\x0\x0\x0\xff\xff\xff\xff\xf\xf\xf\xf\xf\xf\xf\xf\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xff\xff\xff\xff\x0\x0\x0\x0" "\x0\x0\xee\x19\x19\xee\x0\x0\x38\x6c\x66\x3f\x63\x63\x3f\x3\x7f\x46\x6\x6\x6\x6\x6\x0\x0\x0\xff\x66\x66\x66\x66\x0\x7f\x46\xc\x18\xc\x46\x7f\x0\x0\x0\xfc\x66\x63\x33\x1e\x0\x0\x0\xcc\xcc\xcc\x7c\xc\xf\x0\x0\xff\x18\x18\x18\x18\x0" "\x3c\x18\x3c\x66\x66\x3c\x18\x3c\x0\x3e\x63\x7f\x63\x3e\x0\x0\x0\x7e\xc3\xc3\xc3\x66\xe7\x0\x78\x98\x3c\x66\x63\x33\x1e\x0\x0\x0\x66\x99\x99\x66\x0\x0\x0\xc0\x3e\x73\x67\x3e\x3\x0\x0\x7c\x3\x7f\x3\x7c\x0\x0\x0\x0\x0\x0\x0\xdb\xdb\x0" "\x0\x7e\x0\x7e\x0\x7e\x0\x0\x0\xf8\x8\x8\x8\x8\xf8\x0\x0\xff\x0\x0\x0\x0\xff\x0\x0\x1f\x10\x10\x10\x10\x1f\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x0\x2\x1\x0\x0\x0\x20\x30\x28\x24\x22\xa1\x60\x20\x0\x0\x0\x1\x2\x0\x0\x0" "\x20\x60\xa1\x22\x24\x28\x30\x20\x0\x0\x0\x40\x40\x40\x40\x7f\xff\x81\x81\x81\x81\x80\x80\x80\x0\x0\x0\x20\x20\x11\x11\xe\x38\x44\x44\x82\x82\x0\x0\x0\x0\x0\xfe\x7c\x38\x10\x0\x0\x0\x0\x10\x38\x7c\xfe\x0\x0\x80\xc1\x63\x36\x1c\x8\x0\x0" ), // Font no. 26 FontEntry("PEANUT", 8, 8, "\x0\x0\x0\x0\x0\x0\x0\x0\x7e\x81\xa5\x81\xbd\x99\x81\x7e\x7e\xff\xdb\xff\xc3\xe7\xff\x7e\x36\x7f\x7f\x7f\x3e\x1c\x8\x0\x8\x1c\x3e\x7f\x3e\x1c\x8\x0\x1c\x3e\x1c\x7f\x7f\x49\x8\x3e\x0\x8\x1c\x3e\x7f\x3e\x1c\x3e\x0\x0\x18\x3c\x3c\x18\x0\x0" "\xff\xff\xe7\xc3\xc3\xe7\xff\xff\x0\x3c\x66\x42\x42\x66\x3c\x0\xff\xc3\x99\xbd\xbd\x99\xc3\xff\xf0\xe0\xf0\xbe\x33\x33\x33\x1e\x3c\x66\x66\x66\x3c\x18\x7e\x18\xfc\xcc\xfc\xc\xc\xe\xf\x7\xfe\xc6\xfe\xc6\xc6\xe6\x67\x3\x99\x5a\x3c\xe7\xe7\x3c\x5a\x99" "\x1\x7\x1f\x7f\x1f\x7\x1\x0\x40\x70\x7c\x7f\x7c\x70\x40\x0\x18\x3c\x7e\x18\x18\x7e\x3c\x18\x66\x66\x66\x66\x66\x0\x66\x0\xfe\xdb\xdb\xde\xd8\xd8\xd8\x0\x7c\xc6\x1c\x36\x36\x1c\x61\x3f\x0\x0\x0\x0\x7e\x7e\x7e\x0\x18\x3c\x7e\x18\x7e\x3c\x18\xff" "\x18\x3c\x7e\x18\x18\x18\x18\x0\x18\x18\x18\x18\x7e\x3c\x18\x0\x0\x18\x30\x7f\x30\x18\x0\x0\x0\xc\x6\x7f\x6\xc\x0\x0\x0\x0\x3\x3\x3\x7f\x0\x0\x0\x24\x66\xff\x66\x24\x0\x0\x0\x18\x3c\x7e\xff\xff\x0\x0\x0\xff\xff\x7e\x3c\x18\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x8\x1c\x1c\x8\x8\x0\x8\x0\x48\x24\x0\x0\x0\x0\x0\x0\x22\x7f\x22\x22\x22\x7f\x22\x0\x8\x3c\xa\x1c\x28\x1e\x8\x0\x0\x44\x22\x10\x8\x44\x22\x0\x1c\x22\x14\x6a\x11\x11\x6e\x0\x20\x10\x0\x0\x0\x0\x0\x0" "\x10\x8\x4\x4\x4\x8\x10\x0\x4\x8\x10\x10\x10\x8\x4\x0\x8\x2a\x1c\x7f\x1c\x2a\x8\x0\x0\x8\x8\x3e\x8\x8\x0\x0\x0\x0\x0\x0\x0\x8\x4\x0\x0\x0\x0\x7e\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x8\x0\x0\x40\x20\x10\x8\x4\x2\x0" "\x1c\x22\x32\x2a\x26\x22\x1c\x0\xc\x8\x8\x8\x8\x8\x8\x0\x1c\x22\x20\x18\x4\x2\x3e\x0\x1c\x22\x20\x18\x20\x22\x1c\x0\x0\x10\x8\x24\x22\x7e\x20\x0\x3f\x1\x1e\x20\x20\x11\xe\x0\x4\x2\x2\x3a\x46\x42\x3c\x0\x3c\x20\x20\x10\x10\x8\x8\x0" "\x3c\x12\xa\x3c\x42\x42\x3c\x0\x3c\x42\x62\x5c\x40\x40\x20\x0\x0\x0\x8\x0\x0\x8\x0\x0\x0\x0\x8\x0\x0\x8\x4\x0\x20\x10\x8\x4\x8\x10\x20\x0\x0\x0\x7e\x0\x7e\x0\x0\x0\x4\x8\x10\x20\x10\x8\x4\x0\x3c\x46\x46\x20\x10\x0\x10\x0" "\x3c\x42\x99\xa5\x59\x2\x7c\x0\x1c\x22\x42\x42\x7e\x42\x42\x0\x1e\x21\x21\x1f\x21\x21\x1f\x0\x3c\x2\x1\x1\x1\x2\x3c\x0\x3f\x41\x41\x41\x41\x41\x3f\x0\x3e\x1\x1\x1f\x1\x1\x3e\x0\x3c\x2\x2\x1e\x2\x2\x2\x0\x1e\x21\x1\x19\x21\x21\x1e\x0" "\x42\x42\x42\x42\x7e\x42\x42\x0\x1c\x8\x8\x8\x8\x8\x1c\x0\x30\x20\x20\x20\x20\x20\x1c\x0\x2\x22\x12\xa\xe\x12\x22\x0\x2\x2\x2\x2\x2\x2\x3e\x0\x1a\x2e\x2a\x2a\x2a\x2a\x2a\x0\x1a\x26\x22\x22\x22\x22\x22\x0\x1c\x22\x22\x22\x22\x22\x1c\x0" "\x3c\x42\x42\x3e\x2\x2\x2\x0\x3c\x42\x41\x41\x41\x51\x2e\x40\x3c\x42\x42\x3e\x12\x22\x42\x0\x1c\x22\x4\x8\x10\x22\x1c\x0\x3c\xa\x8\x8\x8\x8\x8\x0\x22\x22\x22\x22\x22\x32\x2c\x0\x22\x22\x22\x22\x22\x14\x8\x0\x2a\x2a\x2a\x2a\x2a\x2a\x1e\x0" "\x22\x22\x14\x8\x14\x22\x22\x0\x22\x22\x22\x32\x2c\x20\x18\x0\x3e\x20\x10\x8\x4\x2\x3e\x0\xe\x2\x2\x2\x2\x2\xe\x0\x0\x2\x4\x8\x10\x20\x40\x0\x1c\x10\x10\x10\x10\x10\x1c\x0\x8\x1c\x36\x1c\x8\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xff" "\x4\x4\x4\x0\x0\x0\x0\x0\x0\x0\x0\x3c\x42\x62\x5c\x0\x2\x2\x2\x3a\x46\x42\x3c\x0\x0\x0\x0\x3c\x2\x2\x3c\x0\x40\x40\x40\x5c\x62\x42\x3c\x0\x0\x0\x1c\x22\x3e\x2\x3c\x0\x0\x1c\x2\x1e\x2\x2\x2\x0\x0\x0\x3c\x42\x62\x5c\x40\x3c" "\x2\x2\x2\x2\x3a\x46\x42\x0\x0\x0\x8\x0\x8\x8\x8\x0\x0\x0\x20\x0\x20\x20\x20\x18\x2\x2\x2\x12\xa\x16\x22\x0\x8\x8\x8\x8\x8\x8\x8\x0\x0\x0\x0\x6a\x56\x52\x52\x0\x0\x0\x0\x3a\x26\x22\x22\x0\x0\x0\x0\x1c\x22\x22\x1c\x0" "\x0\x0\x3c\x42\x46\x3a\x2\x2\x0\x0\x3c\x42\x62\x5c\x40\x40\x0\x0\x1a\x26\x2\x2\x2\x0\x0\x0\x18\x24\x8\x12\xc\x0\x0\x0\x8\x38\xc\x8\x8\x0\x0\x0\x0\x42\x42\x62\x5c\x0\x0\x0\x0\x42\x42\x24\x18\x0\x0\x0\x0\x2a\x2a\x2a\x1e\x0" "\x0\x0\x20\x16\x8\x34\x2\x0\x0\x0\x42\x42\x62\x5c\x40\x3c\x0\x0\x2c\x12\x8\x24\x1a\x0\x60\x10\x10\xc\x10\x10\x60\x0\x8\x8\x8\x8\x8\x8\x8\x8\x6\x8\x8\x30\x8\x8\x6\x0\x26\x19\x0\x0\x0\x0\x0\x0\x0\x8\x1c\x36\x63\x63\x7f\x0" "\xfc\x2\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\x3f\x40\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\x1\x80\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x2\xfc\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x40\x3f" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x1\x3\x7\xf\x1f\x3f\x7e\xfc\x3f\x7e\xfc\xf8\xf0\xe0\xc0\x80\xc0\xb0\xec\x3c\x1a\xe\x7\x5\xff\x55\xff\x0\x0\x0\x0\x0" "\x3\xd\x3f\x34\x78\x50\xe0\xa0\x7\x5\x7\x5\x7\x5\x7\x5\xe0\xa0\xe0\xa0\xe0\xa0\xe0\xa0\x7\x5\xe\xa\x3c\xec\x70\xc0\x0\x0\x0\x0\x0\xff\x55\xff\xe0\xa0\x70\x58\x3c\x37\xd\x3\x7\x5\x7\x0\x0\x0\x0\x0\xe0\xa0\xe0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x7\x5\x7\x0\x0\x0\x0\x0\xe0\xa0\xe0\x0\x81\xc3\xe7\xff\x7e\x3c\x18\x0\x1e\x29\x23\x31\x25\x1e\x0\x0\x3c\x52\x46\x62\x4a\x3c\x0\x0\x78\xa4\x8c\xc4\x94\x78\x0\x0\xf0\x48\x18\x88\x28\xf0\x0\x0\xe0\x90\x30\x10\x50\xe0\x0" "\x0\xc0\x20\x60\x20\xa0\xc0\x0\x0\x80\x40\xc0\x40\x40\x80\x0\x0\x0\x80\x80\x80\x80\x0\x0\x0\x0\x1\x1\x1\x1\x0\x0\x0\x1\x2\x2\x3\x2\x1\x0\x0\x3\x5\x4\x6\x4\x3\x0\x0\x7\xa\x8\xc\x9\x7\x0\x0\xf\x14\x11\x18\x12\xf\x0" "\x78\x3c\x1e\x3c\x78\x3c\x1e\x3c\xff\xff\x0\x18\x3c\x7e\xff\x0\xff\xff\x0\x0\x0\x0\x18\x18\xff\xff\x0\x18\x3c\x7e\xff\x18\xff\xff\x0\x42\x66\x5a\x42\x42\x0\x0\x0\x0\x10\x0\x0\x0\x0\x3\x3\x3\x3\x3\x3\x3\x0\x1b\x1b\x1b\x1b\x1b\x1b\x1b" "\x0\xdb\xdb\xdb\xdb\xdb\xdb\xdb\x0\x6\x6\x6\x6\x6\x6\x6\x0\x36\x36\x36\x36\x36\x36\x36\x0\xb6\xb6\xb6\xb6\xb6\xb6\xb6\x0\x1\x1\x1\x1\x1\x1\x1\x0\xd\xd\xd\xd\xd\xd\xd\x0\x6d\x6d\x6d\x6d\x6d\x6d\x6d\x0\x0\x18\x3c\x3c\x18\x0\x0" "\x0\x0\x0\x66\x0\x0\x0\x0\x0\x78\x84\x2\x0\x0\x0\x0\x0\x0\x0\x41\x22\x1c\x0\x0\x0\x7c\x44\x44\x44\x44\xc6\x0\x0\x7c\x44\x44\x44\x44\xc7\x0\x0\xc\x34\xc4\x4\x4\x4\x0\x0\x20\x20\x20\x23\x2c\x30\x0\x0\x60\x20\x20\x20\x20\x60\x0" "\x0\x3\x2\x2\x2\x2\x3\x0\x0\x0\x0\x18\x18\x0\x0\x0\x0\x0\x18\x3c\x3c\x18\x0\x0\x0\x0\x18\x3c\x3c\x18\x0\x0\x0\x0\x0\x0\xff\x0\x0\x0\x0\x0\x3c\x3c\x3c\x3c\x0\x0\x0\x18\x3c\x7e\x7e\x3c\x18\x0\x0\x18\x3c\x7e\x7e\x3c\x18\x0" "\x0\x3c\x7e\x7e\x7e\x7e\x3c\x0\x0\x3c\x7e\x7e\x7e\x7e\x3c\x0\x6c\x6c\xef\x0\xff\x0\x0\x0\x0\x0\xff\x0\xef\x6c\x6c\x6c\x6c\x6c\xec\xc\xec\x6c\x6c\x6c\x0\x0\xff\x81\xff\x0\x0\x0\x6c\x6c\xef\x0\xef\x6c\x6c\x6c\x18\x18\xff\x0\xff\x0\x0\x0" "\x6c\x6c\x6c\x6c\xff\x0\x0\x0\x0\x0\xff\x0\xff\x18\x18\x18\x0\x0\x0\x0\xff\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xfc\x0\x0\x0\x18\x18\xf8\x18\xf8\x0\x0\x0\x0\x0\xf8\x18\xf8\x18\x18\x18\x0\x0\x0\x0\xfc\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xff\x6c\x6c\x6c" "\x18\x18\xff\x18\xff\x18\x18\x18\x18\x18\x18\x18\x1f\x0\x0\x0\x0\x0\x0\x0\xf8\x18\x18\x18\xff\xff\xff\xff\xff\xff\xff\xff\x0\x0\x0\x0\xff\xff\xff\xff\xf\xf\xf\xf\xf\xf\xf\xf\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xff\xff\xff\xff\x0\x0\x0\x0" "\x0\x0\x6e\x3b\x13\x3b\x6e\x0\x0\x1e\x33\x1f\x33\x1f\x3\x3\x0\x3f\x33\x3\x3\x3\x3\x0\x0\x0\x7f\x36\x36\x36\x36\x0\x3f\x33\x6\xc\x6\x33\x3f\x0\x0\x0\x7e\x1b\x1b\x1b\xe\x0\x0\x66\x66\x66\x66\x3e\x6\x3\x0\x6e\x3b\x18\x18\x18\x18\x0" "\x3f\xc\x1e\x33\x33\x1e\xc\x3f\x1c\x36\x63\x7f\x63\x36\x1c\x0\x1c\x36\x63\x63\x36\x36\x77\x0\x38\xc\x18\x3e\x33\x33\x1e\x0\x0\x0\x7e\xdb\xdb\x7e\x0\x0\x60\x30\x7e\xdb\xdb\x7e\x6\x3\x1c\x6\x3\x1f\x3\x6\x1c\x0\x0\x0\x0\x0\x0\xdb\xdb\x0" "\x0\x7e\x0\x7e\x0\x7e\x0\x0\x0\xf8\x8\x8\x8\x8\xf8\x0\x0\xff\x0\x0\x0\x0\xff\x0\x0\x1f\x10\x10\x10\x10\x1f\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x0\x2\x1\x0\x0\x0\x20\x30\x28\x24\x22\xa1\x60\x20\x0\x0\x0\x1\x2\x0\x0\x0" "\x20\x60\xa1\x22\x24\x28\x30\x20\x0\x0\x0\x40\x40\x40\x40\x7f\xff\x81\x81\x81\x81\x80\x80\x80\x0\x0\x0\x20\x20\x11\x11\xe\x38\x44\x44\x82\x82\x0\x0\x0\x0\x0\xfe\x7c\x38\x10\x0\x0\x0\x0\x10\x38\x7c\xfe\x0\x0\x80\xc1\x63\x36\x1c\x8\x0\x0" ), // Font no. 27 FontEntry("PERISOFT", 8, 8, "\x0\x0\x0\x0\x0\x0\x0\x0\x7e\x81\xa5\x81\xbd\x99\x81\x7e\x7e\xff\xdb\xff\xff\xc3\xe7\x7e\x0\x77\x7f\x7f\x3e\x1c\x8\x0\x8\x1c\x3e\x7f\x3e\x1c\x8\x0\x18\x3c\x18\xff\xff\x52\x18\x0\x8\x1c\x3e\x7f\x7f\x49\x1c\x0\x0\x0\x18\x3c\x18\x0\x0\x0" "\xff\xff\xe7\xc3\xe7\xff\xff\xff\x0\x3c\x42\x81\x81\x42\x3c\x0\xff\xc3\xbd\x7e\x7e\xbd\xc3\xff\xf8\xe0\xb0\x3e\x63\x63\x3e\x0\x0\x7e\xc3\xc3\x7e\x18\x7e\x18\x20\x60\xe0\x20\x20\x3f\x1f\x0\x30\x50\xb0\xd0\x9f\x8f\xf0\xf0\x81\xc2\xbc\xe4\xa4\xfc\xea\xff" "\x0\x0\x6\x1e\x7e\x1e\x6\x0\x0\x0\x60\x78\x7e\x78\x60\x0\x18\x7e\x18\x18\x18\x18\x7e\x18\x66\x66\x66\x66\x66\x0\x66\x0\xff\x6d\x6e\x6c\x6c\x6c\x6c\x0\x7e\x81\x3e\x42\x42\x7c\x81\x7e\x0\x0\x0\x7e\x7e\x0\x0\x0\x18\x7e\x18\x18\x7e\x18\x0\xff" "\x18\x7e\x18\x18\x18\x18\x18\x0\x18\x18\x18\x18\x18\x7e\x18\x0\x0\x20\x60\xff\x60\x20\x0\x0\x0\x4\x6\xff\x6\x4\x0\x0\x0\x0\x0\x3\x3\x3\xff\x0\x0\x24\x66\xff\x66\x24\x0\x0\x0\x8\x8\x14\x36\x6b\x0\x7f\x0\x0\x0\x7f\x3e\x1c\x8\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x8\xc\xc\xc\x4\x0\xc\x0\x66\x44\x0\x0\x0\x0\x0\x0\x12\x36\x7f\x36\x7f\x36\x12\x0\x3e\x6b\xb\xb\x3e\x69\x3e\x8\xce\x69\x35\x1a\x6c\x56\x33\x0\x1c\x26\xa6\x7c\x3e\x23\x5e\x80\x10\x18\xc\x0\x0\x0\x0\x0" "\xe0\x30\x18\x18\x18\x30\x60\xc0\x3\x6\xc\x18\x18\x18\xc\x7\x9\x2a\x1c\x7f\x1c\x2a\x48\x0\x8\x18\x18\x18\x7e\x18\x10\x0\x0\x0\x0\x0\x0\x10\x18\xe\x0\x0\x0\x7e\x1\x0\x0\x0\x0\x0\x0\x0\x0\x18\x38\x0\x80\xc0\x60\x30\x18\xc\x6\x3" "\x3c\x66\x76\x56\x4e\x2e\x1c\x0\xc\x18\x18\x18\x18\x18\x3c\x0\x3e\x63\x40\x60\x3e\x7\x7f\x0\x3e\x63\x60\x60\x38\x63\x3e\x0\x30\x58\x4c\x46\x43\x7e\x40\x0\x3f\x63\x3\x3\x3e\x40\x3f\x0\x3c\x66\x43\x3\x3f\x43\x3e\x0\x3f\x60\x30\x18\xc\x6\x3\x0" "\x3e\x43\x43\x43\x3e\x43\x3e\x0\x3e\x43\x43\x43\x7e\x41\x3e\x0\x0\x8\xc\x0\x0\xc\x8\x0\x0\x8\x8\x0\x8\xc\x4\x0\x0\x30\x18\xc\x6\xc\x18\x0\x0\x0\x40\x7e\x0\x7e\x2\x0\x0\x3\x6\xc\x18\xc\x6\x0\x3e\x63\x60\x60\x3c\x0\xc\x8" "\x1c\x22\x49\x55\x35\x9\x22\x1c\xe\x1b\x23\x43\x43\x7f\x43\x0\x3e\x43\x43\x23\x3f\x43\x3e\x0\x3e\x43\x43\x3\x43\x43\x3e\x0\x3e\x43\x43\x43\x43\x23\x1f\x0\x3e\x43\x3\x1b\x7\x43\x3e\x0\x3e\x43\x3\x1b\x7\x3\x2\x0\x3e\x43\x23\x3\x3b\x43\x3e\x0" "\x42\x43\x43\x63\x7f\x43\x42\x0\x7e\x18\x10\x10\x10\x18\x7e\x0\x18\x30\x20\x20\x21\x33\x1e\x0\x62\x33\x1b\xf\xf\x1b\x32\x0\x6\x3\x3\x3\x3\x43\x3e\x0\x22\x63\x63\x77\x7f\x6b\x22\x0\x42\x43\x43\x47\x4f\x5b\x72\x0\x3e\x43\x43\x43\x43\x43\x3e\x0" "\x3e\x43\x43\x43\x3f\x3\x6\x0\x3e\x43\x43\x43\x43\x53\x5e\x80\x3e\x43\x43\x23\x1f\x23\x42\x0\x3e\x43\x3\xe\x38\x43\x3e\x0\x7f\x1c\x18\x18\x18\x18\x8\x0\x42\x43\x43\x43\x43\x43\x3e\x0\x42\x43\x43\x43\x23\x13\xe\x0\x42\x43\x43\x43\x5b\x6f\x46\x0" "\x81\x43\x23\x16\x1c\x3e\x63\x0\x43\x43\x26\x2c\x18\x8\x8\x0\x3e\x61\x30\x18\x7f\x6\x7f\x0\x70\x18\x18\x18\x18\x18\x18\x70\x3\x6\xc\x18\x30\x60\xc0\x80\x7\xc\xc\xc\xc\xc\xc\x7\x8\x1c\x26\x43\x81\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xff" "\x8\xc\x18\x30\x0\x0\x0\x0\x0\x0\x1e\x20\x3e\x63\xde\x0\x2\x3\x3\x3b\x47\x43\x3e\x0\x0\x0\x1e\x23\x3\x43\x3e\x0\x20\x40\x5c\x66\x63\x43\x7e\x0\x0\x0\x1e\x23\x1f\x3\x3e\x0\x3c\x46\x46\x6\x6\x1f\x6\x0\x0\x0\x3e\x43\x63\x5e\x40\x3e" "\x2\x3\x3b\x6f\x47\x43\x42\x0\x18\x10\x4\x18\x18\x18\x38\x0\x40\x60\x0\x60\x20\x21\x31\x1e\x2\x23\x13\xb\x7\xb\x12\x0\xc\x18\x18\x18\x18\x18\x30\x0\x0\x0\x22\x77\x6b\x6b\x22\x0\x0\x0\x3e\x43\x43\x43\x43\x0\x0\x0\x3e\x43\x43\x43\x3e\x0" "\x0\x0\x1e\x23\x43\x3f\x3\x2\x0\x0\x3c\x46\x43\x7e\x40\x80\x0\x0\x38\x4f\x46\x6\x6\x0\x0\x0\x3e\x3\x1c\x30\x1f\x0\x8\xc\xc\xc\x7f\xc\x78\x0\x0\x0\x43\x43\x43\x46\xbc\x0\x0\x0\x42\x43\x43\x26\x1c\x0\x0\x0\x22\x6b\x6b\x77\x22\x0" "\x0\x0\x23\x16\xc\x16\x23\x0\x0\x0\x43\x43\x43\x7e\x40\x3f\x0\x0\x7e\x30\x8\x6\x7f\x0\x78\xc\x18\xe\x18\xc\x78\x0\x8\x18\x18\x18\x18\x18\x18\x10\x7\xc\x6\x3c\x6\xc\x7\x0\x6\x8d\x78\x0\x0\x0\x0\x0\x0\x0\x8\x14\x22\x7f\x0\x0" "\xfe\xff\x3\xf3\xb\xb\xb\xb\xff\xff\x0\xff\x0\x0\x0\x0\x7f\xff\xc0\xcf\xd0\xd0\xd0\xd0\xb\xb\xb\xb\xb\xb\xb\xb\xd0\xd0\xd0\xd0\xd0\xd0\xd0\xd0\xb\xb\xb\xb\xf3\x3\xff\xfe\x0\x0\x0\x0\xff\x0\xff\xff\xd0\xd0\xd0\xd0\xcf\xc0\xff\x7f" "\xb\xd\x6\x3\x0\x0\x0\x0\xd0\xb0\x60\xc0\x0\x0\x0\x0\x0\x0\x0\x0\x3\x6\xd\xb\x0\x0\x0\x0\xc0\x60\xb0\xd0\xb\xb\x13\x33\xc6\xe\xfc\xf0\xf\x3f\x70\x60\xc1\xc6\xc4\xc8\xfe\xff\x47\xa3\xd3\x6b\x37\x1b\xff\xff\x55\xaa\xff\x0\x0\x0" "\xff\xff\xd5\xea\xdf\xe8\xd8\xe8\x1b\x17\x1b\x17\x1b\x17\x1b\x17\xe8\xd8\xe8\xd8\xe8\xd8\xe8\xd8\x17\x1b\x17\xfb\x57\xab\xff\xff\x0\x0\x0\xff\x55\xaa\xff\xff\xd8\xe8\xd8\xef\xd5\xea\xff\xff\x17\x1b\x15\x1a\xf\x0\x0\x0\xd8\xe8\x58\xa8\xf0\x0\x0\x0" "\x0\x0\x0\xf\x15\x1a\x17\x1b\x0\x0\x0\xf0\x58\xa8\xd8\xe8\x0\x0\x0\x55\x0\xaa\x0\x0\x0\x1c\x26\x26\x26\x3e\x7f\x2a\x0\x0\x1c\x26\x26\x26\x3e\x7f\x0\x0\x1c\x26\xe6\xa6\x3e\x7f\x0\x0\x1c\x26\xe6\xa6\x3e\x7f\x0\x1c\x26\xa6\xe6\x3e\x7f\x0" "\xe0\x30\x30\x30\xf0\xf8\x0\x0\x80\xc0\xc0\xc0\xc0\xe0\x0\x0\x0\x0\x80\x80\x80\x80\xc0\x0\x0\x0\x0\x0\x1f\x1d\x0\x0\x0\x0\x0\x1\x1f\x3c\x10\x38\x0\x1\x5\xf\x19\x3b\x10\x38\x3\x4\x4\x1c\x37\x2f\x70\x38\x0\x7\x9\x9\x9\x1f\x3f\x38" "\x18\x2c\x26\x1c\x38\x64\x3c\x18\xff\xff\x0\x0\x8\x8\x14\x6b\xff\xff\x0\x0\x0\x0\x0\x7f\xff\xff\x0\x8\x8\x14\x2a\x5d\xff\x7e\x0\x42\xe7\xff\xdb\x42\x0\x0\x0\x8\x18\x0\x0\x0\x0\x3\x5\x5\x5\x5\x3\x0\x0\x7\x1d\x29\x29\x1d\x7\x0" "\x0\x0\xf\xf9\xc9\x3d\xf\x0\x0\x0\x6\x5\x5\x6\x0\x0\x0\x20\x3e\x33\x27\x3e\x20\x0\x0\xe0\xfe\x9b\x93\xde\xf0\x0\x0\xf\x1a\x12\x12\x12\x1b\xf\x0\x1f\x3a\x52\x52\x52\x3b\x1f\x0\x7f\xda\x92\x92\xd2\xfb\x1f\x0\x0\x18\x3c\x3c\x18\x0\x0" "\x0\x0\x0\x1f\x18\x1f\x18\x18\x6c\x6c\x6c\x6f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x0\x0\x0\x7f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6f\x60\x7f\x0\x0\x6c\x6c\x6c\x7f\x0\x0\x0\x0\x18\x18\x18\x1f\x18\x1f\x0\x0\x0\x0\x0\x1f\x18\x18\x18\x18" "\x18\x18\x18\xf8\x0\x0\x0\x0\x18\x18\x18\xff\x0\x0\x0\x0\x0\x0\x0\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\x18\x18\x18\x0\x0\x0\x0\xff\x0\x0\x0\x18\x18\x18\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\xf8\x18\x18\x6c\x6c\x6c\xec\x6c\x6c\x6c\x6c" "\x6c\x6c\x6c\xec\xc\xfc\x0\x0\x0\x0\x0\xfc\xc\xec\x6c\x6c\x6c\x6c\x6c\xef\x0\xff\x0\x0\x0\x0\x0\xff\x0\xef\x6c\x6c\x6c\x6c\x6c\xec\xc\xec\x6c\x6c\x0\x0\x0\xff\x0\xff\x0\x0\x6c\x6c\x6c\xef\x0\xef\x6c\x6c\x18\x18\x18\xff\x0\xff\x0\x0" "\x6c\x6c\x6c\xff\x0\x0\x0\x0\x0\x0\x0\xff\x0\xff\x18\x18\x0\x0\x0\xff\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xfc\x0\x0\x0\x0\x18\x18\x18\xf8\x18\xf8\x0\x0\x0\x0\x0\xf8\x18\xf8\x18\x18\x0\x0\x0\xfc\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xff\x6c\x6c\x6c\x6c" "\x18\x18\x18\xff\x18\xff\x18\x18\x18\x18\x18\x1f\x0\x0\x0\x0\x0\x0\x0\xf8\x18\x18\x18\x18\xff\xff\xff\xff\xff\xff\xff\xff\x0\x0\x0\x0\xff\xff\xff\xff\xf\xf\xf\xf\xf\xf\xf\xf\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xff\xff\xff\xff\x0\x0\x0\x0" "\x0\x0\xee\x19\x19\xee\x0\x0\x38\x6c\x66\x3f\x63\x63\x3f\x3\x7f\x46\x6\x6\x6\x6\x6\x0\x0\x0\xff\x66\x66\x66\x66\x0\x7f\x46\xc\x18\xc\x46\x7f\x0\x0\x0\xfc\x66\x63\x33\x1e\x0\x0\x0\xcc\xcc\xcc\x7c\xc\xf\x0\x0\xff\x18\x18\x18\x18\x0" "\x3c\x18\x3c\x66\x66\x3c\x18\x3c\x0\x3e\x63\x7f\x63\x3e\x0\x80\xc0\x20\xd0\xe8\xf4\x1a\x8d\xe6\xaa\x83\x7d\x4d\x75\x4d\x7a\x85\xaa\xff\xff\x9d\xad\xbb\xd9\xff\xaa\xff\x7f\xdd\xea\xab\x5d\xff\xaa\xcc\x77\xcc\xff\xe0\xdb\x7b\x0\x0\x0\x0\x0\xdb\xdb\x0" "\x0\x7e\x0\x7e\x0\x7e\x0\x0\x0\xf8\x8\x8\x8\x8\xf8\x0\x0\xff\x0\x0\x0\x0\xff\x0\x0\x1f\x10\x10\x10\x10\x1f\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x0\x2\x1\x0\x0\x0\x20\x30\x28\x24\x22\xa1\x60\x20\x0\x0\x0\x1\x2\x0\x0\x0" "\x20\x60\xa1\x22\x24\x28\x30\x20\x0\x0\x0\x40\x40\x40\x40\x7f\xff\x81\x81\x81\x81\x80\x80\x80\x0\x0\x0\x20\x20\x11\x11\xe\x38\x44\x44\x82\x82\x0\x0\x0\x0\x0\xfe\x7c\x38\x10\x0\x0\x0\x0\x10\x38\x7c\xfe\x0\x0\x80\xc1\x63\x36\x1c\x8\x0\x0" ), // Font no. 28 FontEntry("REZ-ASCII", 8, 8, "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x18\x18\x18\x18\x0\x18\x18\x0\x0\x6c\x6c\x6c\x0\x0\x0\x0\x0\x24\x7e\x24\x24\x7e\x24\x0\x18\x7c\xe\x3c\x70\x3e\x18\x0\x4e\x6a\x3e\x18\x7c\x56\x72\x0\x3c\x66\x66\x3c\x1e\x36\x6c\x0\x18\x18\xc\x0\x0\x0\x0\x0" "\x60\x30\x18\x18\x18\x30\x60\x0\x6\xc\x18\x18\x18\xc\x6\x0\x0\x10\x54\x38\x38\x54\x10\x0\x0\x0\x18\x18\x7e\x18\x18\x0\x0\x0\x0\x0\x0\x18\x18\xc\x0\x0\x0\x3c\x3c\x0\x0\x0\x0\x0\x0\x0\x0\x18\x18\x0\x40\x60\x30\x18\xc\x6\x2\x0" "\x3c\x66\x76\x7e\x6e\x66\x3c\x0\x18\x1c\x18\x18\x18\x18\x3c\x0\x3c\x66\x66\x30\x18\xc\x7e\x0\x3c\x66\x66\x30\x66\x66\x3c\x0\x6\x6\x66\x66\x7c\x60\x60\x0\x7e\x66\x6\x3e\x60\x66\x3c\x0\x3c\x66\x6\x3e\x66\x66\x3c\x0\x7e\x66\x60\x30\x18\xc\xc\x0" "\x3c\x66\x66\x3c\x66\x66\x3c\x0\x3c\x66\x66\x7c\x60\x66\x3c\x0\x0\x0\x18\x18\x0\x18\x18\x0\x0\x0\x18\x18\x0\x18\x18\xc\x20\x30\x18\xc\x18\x30\x20\x0\x0\x0\x3c\x3c\x0\x3c\x3c\x0\x8\x18\x30\x60\x30\x18\x8\x0\x3c\x66\x66\x30\x18\x0\x18\x0" "\x78\x84\xb2\xaa\xaa\x72\x4\xf8\x3c\x66\x66\x7e\x66\x66\x66\x0\x3e\x66\x66\x3e\x66\x66\x3e\x0\x3c\x66\x66\x6\x66\x66\x3c\x0\x3e\x66\x66\x66\x66\x66\x3e\x0\x7e\x66\x6\xe\x6\x66\x7e\x0\x7e\x66\x6\xe\x6\x6\x6\x0\x3c\x66\x6\x76\x66\x66\x3c\x0" "\x66\x66\x66\x7e\x66\x66\x66\x0\x3c\x18\x18\x18\x18\x18\x3c\x0\x78\x30\x30\x30\x36\x36\x1c\x0\x66\x66\x66\x3e\x66\x66\x66\x0\x6\x6\x6\x6\x6\x6\x7e\x0\x42\x66\x7e\x66\x66\x66\x66\x0\x62\x66\x6e\x7e\x76\x66\x46\x0\x3c\x66\x66\x66\x66\x66\x3c\x0" "\x3e\x66\x66\x3e\x6\x6\x6\x0\x3c\x66\x66\x66\x66\x76\x3c\x60\x3e\x66\x66\x3e\x66\x66\x66\x0\x3c\x66\x6\x3c\x60\x66\x3c\x0\x3e\x60\x60\x60\x60\x60\x60\x0\x66\x66\x66\x66\x66\x66\x3c\x0\x66\x66\x66\x66\x66\x6c\x38\x0\x66\x66\x66\x66\x7e\x66\x42\x0" "\x66\x66\x66\x3c\x66\x66\x66\x0\x66\x66\x66\x3c\x18\x18\x18\x0\x7e\x66\x30\x18\xc\x66\x7e\x0\x78\x18\x18\x18\x18\x18\x78\x0\x2\x6\xc\x18\x30\x60\x40\x0\x1e\x18\x18\x18\x18\x18\x1e\x0\x10\x38\x6c\x44\x0\x0\x0\x0\x0\x0\x0\x0\x0\x7e\x7e\x0" "\x0\x18\x18\x30\x0\x0\x0\x0\x0\x0\x3e\x60\x7e\x66\x7e\x0\x6\x6\x3e\x66\x66\x66\x3e\x0\x0\x0\x3c\x66\x6\x66\x3c\x0\x60\x60\x7c\x66\x66\x66\x7c\x0\x0\x0\x3c\x66\x7e\x6\x7c\x0\x3c\x66\x66\x6\xe\x6\x6\x0\x0\x0\x7c\x66\x66\x7c\x60\x3e" "\x6\x6\x3e\x66\x66\x66\x66\x0\x18\x0\x18\x18\x18\x18\x18\x0\x60\x0\x60\x60\x60\x66\x66\x3c\x6\x6\x66\x66\x3e\x66\x66\x0\x18\x18\x18\x18\x18\x18\x18\x0\x0\x0\x66\x7e\x66\x66\x66\x0\x0\x0\x3e\x66\x66\x66\x66\x0\x0\x0\x3c\x66\x66\x66\x3c\x0" "\x0\x0\x3e\x66\x66\x66\x3e\x6\x0\x0\x7c\x66\x66\x66\x7c\x60\x0\x0\x3e\x66\x66\x6\x6\x0\x0\x0\x7c\x6\x7e\x60\x3e\x0\xc\xc\x3c\xc\xc\x6c\x78\x0\x0\x0\x66\x66\x66\x66\x3c\x0\x0\x0\x66\x66\x66\x6c\x38\x0\x0\x0\x66\x66\x66\x7e\x66\x0" "\x0\x0\x66\x66\x3c\x66\x66\x0\x0\x0\x66\x66\x66\x7c\x60\x3e\x0\x0\x7e\x30\x18\xc\x7e\x0\x70\x18\x18\xc\x18\x18\x70\x0\x18\x18\x18\x0\x18\x18\x18\x0\xe\x18\x18\x30\x18\x18\xe\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xff\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xdb\xdb\x0" "\x0\x7e\x0\x7e\x0\x7e\x0\x0\x0\xf8\x8\x8\x8\x8\xf8\x0\x0\xff\x0\x0\x0\x0\xff\x0\x0\x1f\x10\x10\x10\x10\x1f\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x0\x2\x1\x0\x0\x0\x20\x30\x28\x24\x22\xa1\x60\x20\x0\x0\x0\x1\x2\x0\x0\x0" "\x20\x60\xa1\x22\x24\x28\x30\x20\x0\x0\x0\x40\x40\x40\x40\x7f\xff\x81\x81\x81\x81\x80\x80\x80\x0\x0\x0\x20\x20\x11\x11\xe\x38\x44\x44\x82\x82\x0\x0\x0\x0\x0\xfe\x7c\x38\x10\x0\x0\x0\x0\x10\x38\x7c\xfe\x0\x0\x80\xc1\x63\x36\x1c\x8\x0\x0" ), // Font no. 29 FontEntry("SCRIPT", 8, 8, "\x0\x0\x0\x0\x0\x0\x0\x0\x7e\x81\xa5\x81\xbd\x99\x81\x7e\x7e\xff\xdb\xff\xc3\xe7\xff\x7e\x36\x7f\x7f\x7f\x3e\x1c\x8\x0\x8\x1c\x3e\x7f\x3e\x1c\x8\x0\x1c\x3e\x1c\x7f\x7f\x49\x8\x3e\x0\x8\x1c\x3e\x7f\x3e\x1c\x3e\x0\x0\x18\x3c\x3c\x18\x0\x0" "\xff\xff\xe7\xc3\xc3\xe7\xff\xff\x0\x3c\x66\x42\x42\x66\x3c\x0\xff\xc3\x99\xbd\xbd\x99\xc3\xff\xf0\xe0\xf0\xbe\x33\x33\x33\x1e\x3c\x66\x66\x66\x3c\x18\x7e\x18\xfc\xcc\xfc\xc\xc\xe\xf\x7\xfe\xc6\xfe\xc6\xc6\xe6\x67\x3\x99\x5a\x3c\xe7\xe7\x3c\x5a\x99" "\x1\x7\x1f\x7f\x1f\x7\x1\x0\x40\x70\x7c\x7f\x7c\x70\x40\x0\x18\x3c\x7e\x18\x18\x7e\x3c\x18\x66\x66\x66\x66\x66\x0\x66\x0\xfe\xdb\xdb\xde\xd8\xd8\xd8\x0\x7c\xc6\x1c\x36\x36\x1c\x61\x3f\x0\x0\x0\x0\x7e\x7e\x7e\x0\x18\x3c\x7e\x18\x7e\x3c\x18\xff" "\x18\x3c\x7e\x18\x18\x18\x18\x0\x18\x18\x18\x18\x7e\x3c\x18\x0\x0\x18\x30\x7f\x30\x18\x0\x0\x0\xc\x6\x7f\x6\xc\x0\x0\x0\x0\x3\x3\x3\x7f\x0\x0\x0\x24\x66\xff\x66\x24\x0\x0\x0\x18\x3c\x7e\xff\xff\x0\x0\x0\xff\xff\x7e\x3c\x18\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x8\x8\x8\x8\x8\x0\x8\x0\x14\x14\x14\x0\x0\x0\x0\x0\x0\x14\x3e\x14\x3e\x14\x0\x0\x8\x3c\xa\x1c\x28\x1e\x8\x0\x0\x46\x26\x10\x8\x64\x62\x0\xc\x12\xc\x4c\x52\x22\x5c\x0\x8\x8\x4\x0\x0\x0\x0\x0" "\x10\x8\x8\x8\x8\x8\x10\x0\x8\x10\x10\x10\x10\x10\x8\x0\x0\x2a\x1c\x8\x1c\x2a\x0\x0\x0\x8\x8\x3e\x8\x8\x0\x0\x0\x0\x0\x0\x0\x8\x8\x4\x0\x0\x0\x7e\x0\x0\x0\x0\x0\x0\x0\x0\x0\x18\x18\x0\x40\x20\x10\x8\x4\x2\x1\x0" "\x3c\x42\x42\x5a\x42\x42\x3c\x0\x10\x18\x10\x10\x10\x10\x38\x0\x3c\x42\x40\x38\x4\x2\x7e\x0\x3c\x42\x40\x20\x40\x42\x3c\x0\x20\x30\x28\x24\x7e\x20\x20\x0\x7e\x2\x3e\x40\x40\x42\x3c\x0\x38\x44\x2\x3a\x46\x42\x3c\x0\x7e\x40\x20\x10\x10\x10\x10\x0" "\x3c\x42\x42\x3c\x42\x42\x3c\x0\x3c\x42\x42\x7c\x40\x42\x3c\x0\x0\x0\x18\x0\x0\x18\x0\x0\x0\x8\x8\x0\x0\x8\x8\x4\x20\x10\x8\x4\x8\x10\x20\x0\x0\x0\x7e\x0\x7e\x0\x0\x0\x4\x8\x10\x20\x10\x8\x4\x0\x3c\x42\x20\x10\x10\x0\x10\x0" "\x3c\x42\x5a\x5a\x32\x2\x7c\x0\x20\x30\x30\x28\xbc\x62\x31\x0\x3e\x44\x46\x3d\xc2\x62\x3f\x0\x38\x44\x6\x3\x82\x42\x3c\x0\x1e\x24\x46\x45\xc2\x62\x3f\x0\x38\x44\x2\x1d\xc2\x42\x3c\x0\x6c\x52\x41\x29\xb0\x50\x8\x0\x38\x44\x6\x73\xc2\x62\x5c\x0" "\x44\x44\x46\x3d\xa2\x62\x22\x0\x20\x18\x14\x13\x88\x48\x30\x0\x20\x30\x28\x35\xae\x62\x12\xc\x24\x14\xe\x7\x8a\x52\x22\x0\x10\xc\xa\x5\x84\x42\x3e\x0\x44\x64\x56\x2b\xaa\x61\x31\x0\x88\x8c\x4e\x55\xd4\x62\x22\x0\x78\x84\x86\x43\xc2\x62\x1c\x0" "\x3e\x44\x46\x23\x9f\x62\x2\x0\x78\x84\x86\x43\xd2\x62\x5c\x0\x3e\x44\x42\x3f\xa2\x61\x21\x0\x20\x20\x50\x48\xc5\x46\x39\x0\xc0\x3e\x9\x5\x82\x42\x3c\x0\x44\x44\x46\x43\xa2\x22\x1c\x0\x44\x44\x22\x63\x94\x14\x8\x0\x44\x44\x42\x23\xaa\x6a\x14\x0" "\x22\x26\x15\x9\x94\x62\x22\x0\x88\x44\x42\x43\xfc\x44\x42\x3c\x3c\x42\x41\x39\xe0\x5c\x42\x3c\x38\x8\x8\x8\x8\x8\x38\x0\x1\x2\x4\x8\x10\x20\x40\x0\x1c\x10\x10\x10\x10\x10\x1c\x0\x8\x14\x22\x41\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xff" "\x4\x4\x8\x0\x0\x0\x0\x0\x0\x0\x5c\x27\x92\x52\x2c\x0\x8\x4\x16\x2d\xa2\x52\x3c\x0\x0\x0\x3e\x25\x82\x42\x3c\x0\x80\x80\x5c\x67\xe2\x52\x4c\x0\x0\x0\x1c\x23\x9e\x42\x3c\x0\x30\x4c\x42\x71\xa8\x24\x14\x8\x0\x0\xbc\x47\xe2\x5c\x22\x1c" "\x8\xc\x36\x4d\xa4\x62\x32\x0\x0\x20\x0\x10\x99\x4e\x38\x0\x0\x40\x0\x70\xad\x72\x9\x7\x4\x4\x16\xb\x8e\x52\x32\x0\x20\x18\x14\xa\x89\x44\x38\x0\x0\x0\x2a\x57\xd2\x49\x29\x0\x0\x0\x34\x4f\xc4\x62\x22\x0\x0\x0\x3c\x47\xa2\x22\x1c\x0" "\x0\x0\x1a\x27\xa6\x5e\x2\x1\x0\x0\x5c\x23\xb2\x6c\x60\x20\x0\x0\x66\x59\xa0\x60\x30\x0\x0\x0\x30\x50\xcc\x43\x3c\x0\x20\x20\x7c\x13\x90\x48\x38\x0\x0\x0\x24\x27\x92\x52\x2c\x0\x0\x0\x26\x63\x92\xa\x4\x0\x0\x0\x46\x43\xaa\x2a\x14\x0" "\x0\x0\x22\x15\x88\x54\x22\x0\x0\x0\x44\x23\xa2\x7c\x22\x1c\x0\x0\x3c\x23\x98\x74\x12\xc\x20\x10\x10\x8\x10\x10\x20\x0\x8\x8\x8\x0\x8\x8\x8\x0\x4\x8\x8\x10\x8\x8\x4\x0\x24\x1a\x0\x0\x0\x0\x0\x0\x0\x8\x14\x22\x41\x41\x7f\x0" "\xff\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\x1\x80\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\xff" "\x1\x0\x0\x0\x0\x0\x0\x0\x80\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x1\x0\x0\x0\x0\x0\x0\x0\x80\x1\x3\x7\xf\x1f\x3f\x7f\xff\xff\xfe\xfc\xf8\xf0\xe0\xc0\x80\xff\xff\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0" "\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\x3\x3\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\xff\xff\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\x0\x55\x0\x0\x0\x0\x0\x1e\x3f\x3f\x3f\x3f\x1e\x0\x0\x3c\x7e\x7e\x7e\x7e\x3c\x0\x0\x78\xfc\xfc\xfc\xfc\x78\x0\x0\xf0\xf8\xf8\xf8\xf8\xf0\x0\x0\xe0\xf0\xf0\xf0\xf0\xe0\x0" "\x0\xc0\xe0\xe0\xe0\xe0\xc0\x0\x0\x80\xc0\xc0\xc0\xc0\x80\x0\x0\x0\x80\x80\x80\x80\x0\x0\x0\x0\x1\x1\x1\x1\x0\x0\x0\x1\x3\x3\x3\x3\x1\x0\x0\x3\x7\x7\x7\x7\x3\x0\x0\x7\xf\xf\xf\xf\x7\x0\x0\xf\x1f\x1f\x1f\x1f\xf\x0" "\x7e\x7e\x7e\x7e\x7e\x7e\x7e\x7e\xff\xff\x0\x18\x3c\x7e\xff\x0\xff\xff\x0\x0\x0\x0\x18\x18\xff\xff\x0\x18\x3c\x7e\xff\x18\xff\xff\x0\xe7\x5a\x42\x42\xe7\x0\x0\x0\x18\x18\x0\x0\x0\x0\x1\x1\x2\x2\x2\x1\x1\x0\x9\x9\x12\x12\x12\x9\x9" "\x0\x49\x49\x92\x92\x92\x49\x49\x0\x2\x2\x4\x4\x4\x2\x2\x0\x12\x12\x24\x24\x24\x12\x12\x0\x92\x92\x24\x24\x24\x92\x92\x0\x0\x0\x1\x1\x1\x0\x0\x0\x4\x4\x9\x9\x9\x4\x4\x0\x24\x24\x49\x49\x49\x24\x24\x0\x0\x18\x3c\x3c\x18\x0\x0" "\x0\x0\x1f\x18\x1f\x18\x18\x18\x6c\x6c\x6f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x0\x0\x7f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6f\x60\x7f\x0\x0\x0\x6c\x6c\x6c\x6c\x7f\x0\x0\x0\x18\x18\x1f\x18\x1f\x0\x0\x0\x0\x0\x0\x0\x1f\x18\x18\x18" "\x18\x18\x18\x18\xf8\x0\x0\x0\x18\x18\x18\x18\xff\x0\x0\x0\x0\x0\x0\x0\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\x18\x18\x0\x0\x0\x0\xff\x0\x0\x0\x18\x18\x18\x18\xff\x18\x18\x18\x18\x18\xf8\x18\xf8\x18\x18\x18\x6c\x6c\x6c\x6c\xec\x6c\x6c\x6c" "\x6c\x6c\xec\xc\xfc\x0\x0\x0\x0\x0\xfc\xc\xec\x6c\x6c\x6c\x6c\x6c\xef\x0\xff\x0\x0\x0\x0\x0\xff\x0\xef\x6c\x6c\x6c\x6c\x6c\xec\xc\xec\x6c\x6c\x6c\x0\x0\xff\x0\xff\x0\x0\x0\x6c\x6c\xef\x0\xef\x6c\x6c\x6c\x18\x18\xff\x0\xff\x0\x0\x0" "\x6c\x6c\x6c\x6c\xff\x0\x0\x0\x0\x0\xff\x0\xff\x18\x18\x18\x0\x0\x0\x0\xff\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xfc\x0\x0\x0\x18\x18\xf8\x18\xf8\x0\x0\x0\x0\x0\xf8\x18\xf8\x18\x18\x18\x0\x0\x0\x0\xfc\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xff\x6c\x6c\x6c" "\x18\x18\xff\x18\xff\x18\x18\x18\x18\x18\x18\x18\x1f\x0\x0\x0\x0\x0\x0\x0\xf8\x18\x18\x18\xff\xff\xff\xff\xff\xff\xff\xff\x0\x0\x0\x0\xff\xff\xff\xff\xf\xf\xf\xf\xf\xf\xf\xf\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xff\xff\xff\xff\x0\x0\x0\x0" "\x0\x0\x6e\x3b\x13\x3b\x6e\x0\x0\x1e\x33\x1f\x33\x1f\x3\x3\x0\x3f\x33\x3\x3\x3\x3\x0\x0\x0\x7f\x36\x36\x36\x36\x0\x3f\x33\x6\xc\x6\x33\x3f\x0\x0\x0\x7e\x1b\x1b\x1b\xe\x0\x0\x66\x66\x66\x66\x3e\x6\x3\x0\x6e\x3b\x18\x18\x18\x18\x0" "\x3f\xc\x1e\x33\x33\x1e\xc\x3f\x1c\x36\x63\x7f\x63\x36\x1c\x0\x1c\x36\x63\x63\x36\x36\x77\x0\x38\xc\x18\x3e\x33\x33\x1e\x0\x0\x0\x7e\xdb\xdb\x7e\x0\x0\x60\x30\x7e\xdb\xdb\x7e\x6\x3\x1c\x6\x3\x1f\x3\x6\x1c\x0\x0\x0\x0\x0\x0\xdb\xdb\x0" "\x0\x7e\x0\x7e\x0\x7e\x0\x0\x0\xf8\x8\x8\x8\x8\xf8\x0\x0\xff\x0\x0\x0\x0\xff\x0\x0\x1f\x10\x10\x10\x10\x1f\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x0\x2\x1\x0\x0\x0\x20\x30\x28\x24\x22\xa1\x60\x20\x0\x0\x0\x1\x2\x0\x0\x0" "\x20\x60\xa1\x22\x24\x28\x30\x20\x0\x0\x0\x40\x40\x40\x40\x7f\xff\x81\x81\x81\x81\x80\x80\x80\x0\x0\x0\x20\x20\x11\x11\xe\x38\x44\x44\x82\x82\x0\x0\x0\x0\x0\xfe\x7c\x38\x10\x0\x0\x0\x0\x10\x38\x7c\xfe\x0\x0\x80\xc1\x63\x36\x1c\x8\x0\x0" ), // Font no. 30 FontEntry("SMALLCAP", 8, 8, "\x0\x0\x0\x0\x0\x0\x0\x0\x7e\x81\xa5\x81\xbd\x99\x81\x7e\x3e\x7f\x6b\x5d\x63\x7f\x3e\x0\x63\x77\x7f\x7f\x3e\x1c\x8\x0\x8\x1c\x3e\x7f\x3e\x1c\x8\x0\x8\x1c\x8\x77\x77\x8\x1c\x0\x1c\x3e\x7f\x7f\x36\x8\x1c\x0\x0\x18\x3c\x7e\x3c\x18\x0\x0" "\xff\xe7\xc3\x81\xc3\xe7\xff\xff\x0\x18\x3c\x66\x66\x3c\x18\x0\xff\xe7\xc3\x99\x99\xc3\xe7\xff\x78\x70\x78\x6c\x1e\x33\x33\x1e\x7e\xc3\xc3\x7e\x18\x7e\x18\x18\x78\x58\x78\x18\x18\xe\xf\x6\x7c\x7c\x6c\x6c\x6f\x66\x78\x30\xdb\x3c\x66\xe7\x66\x3c\xdb\x0" "\x1\x3\xf\x1f\xf\x3\x1\x0\x40\x60\x78\x7c\x78\x60\x40\x0\x18\x3c\x7e\x18\x7e\x3c\x18\x0\x66\x66\x66\x66\x66\x0\x66\x0\xfe\xdb\xde\xdc\xd8\xd8\xd8\x0\x3c\x66\x1c\x36\x36\x1c\x33\x1e\x0\x0\x0\x0\x7f\x7f\x7f\x0\x18\x3c\x7e\x18\x7e\x3c\x18\x7e" "\x18\x3c\x7e\x18\x18\x18\x18\x0\x18\x18\x18\x18\x7e\x3c\x18\x0\x0\x18\x38\x7f\x38\x18\x0\x0\x0\xc\xe\x7f\xe\xc\x0\x0\x0\x0\x3\x3\x3\x7f\x0\x0\x0\x24\x66\xff\x66\x24\x0\x0\x0\x8\x1c\x3e\x3e\x7f\x0\x0\x0\x7f\x3e\x3e\x1c\x8\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x18\x3c\x3c\x18\x18\x0\x18\x0\x36\x36\x36\x0\x0\x0\x0\x0\x36\x36\x7f\x36\x7f\x36\x36\x0\x18\x7e\x3\x3e\x60\x3f\x18\x0\x0\x63\x30\x18\xc\x6\x63\x0\x1c\x36\x1c\x6e\x33\x33\x6e\x0\x18\x18\xc\x0\x0\x0\x0\x0" "\x18\xc\x6\x6\x6\xc\x18\x0\x6\xc\x18\x18\x18\xc\x6\x0\x0\x77\x3e\x7f\x3e\x77\x0\x0\x0\x18\x18\x7e\x18\x18\x0\x0\x0\x0\x0\x0\x18\x18\xc\x0\x0\x0\x0\x7f\x0\x0\x0\x0\x0\x0\x0\x0\x0\x1c\x1c\x0\x60\x30\x18\xc\x6\x3\x1\x0" "\x0\x0\x3c\x76\x66\x6e\x3c\x0\x0\x0\x18\x1c\x18\x18\x3c\x0\x0\x0\x3c\x66\x30\xc\x7e\x0\x0\x7e\x30\x38\x60\x60\x30\x1e\x0\x34\x36\x36\x33\x7f\x30\x0\x0\x7e\x2\x3e\x66\x60\x30\x1e\x38\xc\x6\x3e\x66\x66\x3c\x0\x0\x7e\x60\x30\x38\x18\xc\xc" "\x3c\x66\x66\x3c\x66\x66\x3c\x0\x0\x3c\x66\x66\x7c\x60\x30\x1c\x0\x38\x38\x0\x0\x38\x38\x0\x0\x18\x18\x0\x0\x18\x18\xc\x30\x18\xc\x6\xc\x18\x30\x0\x0\x0\x7f\x0\x0\x7f\x0\x0\x6\xc\x18\x30\x18\xc\x6\x0\x3e\x63\x60\x30\x18\x0\x18\x0" "\x3e\x63\x63\x7b\x3b\x3\x7e\x0\x1c\x36\x63\x63\x7f\x63\x63\x0\x3f\x66\x66\x3e\x66\x66\x3f\x0\x3c\x66\x3\x3\x3\x66\x3c\x0\x1f\x36\x66\x66\x66\x36\x1f\x0\x7f\x43\x3\x1f\x3\x43\x7f\x0\x7f\x46\x6\x3e\x6\x6\xf\x0\x3e\x63\x3\x3\x7b\x63\x3e\x0" "\x63\x63\x63\x7f\x63\x63\x63\x0\x3c\x18\x18\x18\x18\x18\x3c\x0\x3c\x18\x18\x18\x1b\x1b\xe\x0\x63\x33\x1b\xf\x1b\x33\x63\x0\xf\x6\x6\x6\x6\x46\x7f\x0\x63\x77\x7f\x6b\x6b\x63\x63\x0\x63\x67\x67\x6f\x7b\x73\x63\x0\x3e\x63\x63\x63\x63\x63\x3e\x0" "\x3f\x66\x66\x3e\x6\x6\xf\x0\x3e\x63\x63\x63\x63\x6b\x3e\x60\x3f\x63\x63\x3f\x1b\x33\x63\x0\x3e\x63\x3\x3e\x60\x63\x3e\x0\x7e\x5a\x18\x18\x18\x18\x3c\x0\x63\x63\x63\x63\x63\x63\x3e\x0\x63\x63\x63\x63\x36\x1c\x8\x0\x63\x63\x6b\x6b\x7f\x77\x63\x0" "\x63\x36\x1c\x1c\x1c\x36\x63\x0\x66\x66\x66\x3c\x18\x18\x3c\x0\x7f\x61\x30\x18\xc\x46\x7f\x0\x3e\x6\x6\x6\x6\x6\x3e\x0\x3\x6\xc\x18\x30\x60\x40\x0\x3e\x30\x30\x30\x30\x30\x3e\x0\x8\x1c\x36\x63\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xff" "\xc\xc\x18\x0\x0\x0\x0\x0\x0\x0\x3e\x63\x7f\x63\x63\x0\x0\x0\x3f\x66\x3e\x66\x3f\x0\x0\x0\x3e\x63\x3\x63\x3e\x0\x0\x0\x3f\x66\x66\x66\x3f\x0\x0\x0\x7f\x3\x1f\x3\x7f\x0\x0\x0\x7f\x3\x1f\x3\x3\x0\x0\x0\x7e\x3\x73\x63\x3e\x0" "\x0\x0\x63\x63\x7f\x63\x63\x0\x0\x0\x3c\x18\x18\x18\x3c\x0\x0\x0\x78\x30\x30\x33\x1e\x0\x0\x0\x63\x33\x1f\x33\x63\x0\x0\x0\x3\x3\x3\x3\x3f\x0\x0\x0\x63\x77\x6b\x6b\x63\x0\x0\x0\x67\x6f\x6b\x7b\x73\x0\x0\x0\x3e\x63\x63\x63\x3e\x0" "\x0\x0\x3f\x66\x3e\x6\xf\x0\x0\x0\x3e\x63\x63\x3b\x6e\x0\x0\x0\x3f\x66\x3e\x36\x67\x0\x0\x0\x3e\x3\x3e\x60\x3e\x0\x0\x0\x7e\x5a\x18\x18\x3c\x0\x0\x0\x63\x63\x63\x63\x3e\x0\x0\x0\x63\x63\x36\x1c\x8\x0\x0\x0\x63\x6b\x6b\x77\x63\x0" "\x0\x0\x63\x36\x1c\x36\x63\x0\x0\x0\x66\x66\x3c\x18\x18\x0\x0\x0\x3f\x19\xc\x26\x3f\x0\x70\x18\x18\xe\x18\x18\x70\x0\x18\x18\x18\x0\x18\x18\x18\x0\xe\x18\x18\x70\x18\x18\xe\x0\x6e\x3b\x0\x0\x0\x0\x0\x0\x0\x8\x1c\x1c\x36\x36\x7f\x0" "\xff\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\x1\x80\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\xff" "\x1\x0\x0\x0\x0\x0\x0\x0\x80\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x1\x0\x0\x0\x0\x0\x0\x0\x80\x1\x3\x7\xf\x1f\x3f\x7f\xff\xff\xfe\xfc\xf8\xf0\xe0\xc0\x80\xff\xff\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0" "\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\x3\x3\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\xff\xff\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\x40\xaa\x4\x0\x0\x0\x0\x1e\x33\x2d\x2d\x33\x1e\x0\x0\x7e\x66\x5a\x5a\x66\x7e\x0\x0\xfc\x84\xb4\xb4\x84\xfc\x0\x0\xf8\x48\x18\x88\x28\xf8\x0\x0\xf0\x30\x10\x10\x30\xf0\x0" "\x0\xc0\x60\x20\x20\x60\xc0\x0\x0\x80\xc0\x40\xc0\xc0\x80\x0\x0\x0\x80\x80\x80\x80\x0\x0\x0\x1\x1\x1\x1\x1\x1\x0\x0\x3\x3\x2\x2\x3\x3\x0\x0\x3\x6\x4\x4\x6\x3\x0\x0\x7\xd\xc\x8\xe\x7\x0\x0\xf\x19\x16\x16\x19\xf\x0" "\x7e\x7e\x7e\x7e\x7e\x7e\x7e\x7e\xff\xff\x0\x18\x3c\x7e\xff\x0\xff\xff\x0\x0\x0\x0\x18\x18\xff\xff\x0\x18\x3c\x7e\xff\x18\xff\xff\x0\x42\x66\x5a\x42\x42\x0\x0\x0\x18\x18\x0\x0\x0\x0\x0\x1\x3\x2\x3\x1\x0\x0\x0\x7\x9\x18\x9\x7\x0" "\x0\x1c\x63\xc1\x80\xc1\x63\x1c\x0\x0\x3\x5\x4\x5\x3\x0\x0\x0\x1f\x21\x10\x21\x1f\x0\x0\xfc\x7\xc1\x20\xc1\x7\xfc\x0\x0\x1\x2\x3\x2\x1\x0\x0\x7\xc\x9\x9\x9\xc\x7\x0\x1f\x70\xc1\x82\xc1\x70\x1f\x0\x0\x18\x3c\x3c\x18\x0\x0" "\x0\x0\x1f\x18\x1f\x18\x18\x18\x6c\x6c\x6f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x0\x0\x7f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6f\x60\x7f\x0\x0\x0\x6c\x6c\x6c\x6c\x7f\x0\x0\x0\x18\x18\x1f\x18\x1f\x0\x0\x0\x0\x0\x0\x0\x1f\x18\x18\x18" "\x18\x18\x18\x18\xf8\x0\x0\x0\x18\x18\x18\x18\xff\x0\x0\x0\x0\x0\x0\x0\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\x18\x18\x0\x0\x0\x0\xff\x0\x0\x0\x18\x18\x18\x18\xff\x18\x18\x18\x18\x18\xf8\x18\xf8\x18\x18\x18\x6c\x6c\x6c\x6c\xec\x6c\x6c\x6c" "\x6c\x6c\xec\xc\xfc\x0\x0\x0\x0\x0\xfc\xc\xec\x6c\x6c\x6c\x6c\x6c\xef\x0\xff\x0\x0\x0\x0\x0\xff\x0\xef\x6c\x6c\x6c\x6c\x6c\xec\xc\xec\x6c\x6c\x6c\x0\x0\xff\x0\xff\x0\x0\x0\x6c\x6c\xef\x0\xef\x6c\x6c\x6c\x18\x18\xff\x0\xff\x0\x0\x0" "\x6c\x6c\x6c\x6c\xff\x0\x0\x0\x0\x0\xff\x0\xff\x18\x18\x18\x0\x0\x0\x0\xff\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xfc\x0\x0\x0\x18\x18\xf8\x18\xf8\x0\x0\x0\x0\x0\xf8\x18\xf8\x18\x18\x18\x0\x0\x0\x0\xfc\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xff\x6c\x6c\x6c" "\x18\x18\xff\x18\xff\x18\x18\x18\x18\x18\x18\x18\x1f\x0\x0\x0\x0\x0\x0\x0\xf8\x18\x18\x18\xff\xff\xff\xff\xff\xff\xff\xff\x0\x0\x0\x0\xff\xff\xff\xff\xf\xf\xf\xf\xf\xf\xf\xf\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xff\xff\xff\xff\x0\x0\x0\x0" "\x0\x0\x6e\x3b\x13\x3b\x6e\x0\x0\x1e\x33\x1f\x33\x1f\x3\x3\x0\x3f\x33\x3\x3\x3\x3\x0\x0\x0\x7f\x36\x36\x36\x36\x0\x3f\x33\x6\xc\x6\x33\x3f\x0\x0\x0\x7e\x1b\x1b\x1b\xe\x0\x0\x66\x66\x66\x66\x3e\x6\x3\x0\x6e\x3b\x18\x18\x18\x18\x0" "\x3f\xc\x1e\x33\x33\x1e\xc\x3f\x1c\x36\x63\x7f\x63\x36\x1c\x0\x1c\x36\x63\x63\x36\x36\x77\x0\x38\xc\x18\x3e\x33\x33\x1e\x0\x0\x0\x7e\xdb\xdb\x7e\x0\x0\x60\x30\x7e\xdb\xdb\x7e\x6\x3\x1c\x6\x3\x1f\x3\x6\x1c\x0\x0\x0\x0\x0\x0\xdb\xdb\x0" "\x0\x7e\x0\x7e\x0\x7e\x0\x0\x0\xf8\x8\x8\x8\x8\xf8\x0\x0\xff\x0\x0\x0\x0\xff\x0\x0\x1f\x10\x10\x10\x10\x1f\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x0\x2\x1\x0\x0\x0\x20\x30\x28\x24\x22\xa1\x60\x20\x0\x0\x0\x1\x2\x0\x0\x0" "\x20\x60\xa1\x22\x24\x28\x30\x20\x0\x0\x0\x40\x40\x40\x40\x7f\xff\x81\x81\x81\x81\x80\x80\x80\x0\x0\x0\x20\x20\x11\x11\xe\x38\x44\x44\x82\x82\x0\x0\x0\x0\x0\xfe\x7c\x38\x10\x0\x0\x0\x0\x10\x38\x7c\xfe\x0\x0\x80\xc1\x63\x36\x1c\x8\x0\x0" ), // Font no. 31 FontEntry("THICK", 8, 8, "\x0\x0\x0\x0\x0\x0\x0\x0\x7e\x81\xa5\x81\xbd\x99\x81\x7e\x7e\xff\xdb\xff\xff\xc3\xe7\x7e\x0\x77\x7f\x7f\x3e\x1c\x8\x0\x8\x1c\x3e\x7f\x3e\x1c\x8\x0\x18\x3c\x18\xff\xff\x52\x18\x0\x8\x1c\x3e\x7f\x7f\x49\x1c\x0\x0\x0\x18\x3c\x18\x0\x0\x0" "\xff\xff\xe7\xc3\xe7\xff\xff\xff\x0\x3c\x42\x81\x81\x42\x3c\x0\xff\xc3\xbd\x7e\x7e\xbd\xc3\xff\xf8\xe0\xb0\x3e\x63\x63\x3e\x0\x0\x7e\xc3\xc3\x7e\x18\x7e\x18\x20\x60\xe0\x20\x20\x3f\x1f\x0\x30\x50\xb0\xd0\x9f\x8f\xf0\xf0\x81\xc2\xbc\xe4\xa4\xfc\xea\xff" "\x0\x0\x6\x1e\x7e\x1e\x6\x0\x0\x0\x60\x78\x7e\x78\x60\x0\x18\x7e\x18\x18\x18\x18\x7e\x18\x66\x66\x66\x66\x66\x0\x66\x0\xff\x6d\x6e\x6c\x6c\x6c\x6c\x0\x7e\x81\x3e\x42\x42\x7c\x81\x7e\x0\x0\x0\x7e\x7e\x0\x0\x0\x18\x7e\x18\x18\x7e\x18\x0\xff" "\x18\x7e\x18\x18\x18\x18\x18\x0\x18\x18\x18\x18\x18\x7e\x18\x0\x0\x20\x60\xff\x60\x20\x0\x0\x0\x4\x6\xff\x6\x4\x0\x0\x0\x0\x0\x3\x3\x3\xff\x0\x0\x24\x66\xff\x66\x24\x0\x0\x0\x0\x8\x1c\x3e\x7f\x0\x0\x0\x0\x0\x7f\x3e\x1c\x8\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\xc\x1e\x1e\x1e\xc\x0\xc\x0\x33\x66\xcc\x0\x0\x0\x0\x0\x0\x6c\xfe\x6c\x6c\xfe\x6c\x0\x3e\x6b\xb\x3e\x68\x6b\x3e\x8\xc7\x65\x37\x18\xec\xa6\xe3\x0\x1c\x32\x1c\xa2\x63\x73\x5e\x80\x60\x30\x18\x0\x0\x0\x0\x0" "\x30\x18\x18\x18\x18\x18\x18\x30\x6\xc\xc\xc\xc\xc\xc\x6\x8\x2a\x1c\x7f\x1c\x2a\x8\x0\x0\x18\x18\x7e\x18\x18\x0\x0\x0\x0\x0\x0\x0\x0\x18\xc\x0\x0\x0\x7e\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xc\x0\x0\xc0\x60\x30\x18\xc\x6\x0" "\x3e\x73\x7b\x7f\x77\x73\x3e\x0\x38\x3c\x38\x38\x38\x38\x38\x0\x3e\x73\x70\x38\x1c\xe\x7f\x0\x3e\x73\x70\x3c\x70\x73\x3e\x0\x73\x73\x73\x73\x7f\x70\x70\x0\x7f\x7\x7\x3f\x70\x70\x3f\x0\x3e\x67\x7\x3f\x67\x67\x3e\x0\x7f\x60\x70\x38\x1c\x1c\x1c\x0" "\x3e\x67\x67\x3e\x67\x67\x3e\x0\x3e\x73\x73\x7e\x70\x70\x3f\x0\x0\xc\x0\x0\x0\xc\x0\x0\x0\xc\x0\x0\x0\xc\x6\x0\x0\x18\xc\x6\xc\x18\x0\x0\x0\x0\x7e\x0\x7e\x0\x0\x0\x0\xc\x18\x30\x18\xc\x0\x0\x3e\x63\x70\x38\x1c\x0\x1c\x0" "\x3e\x63\x7b\x7b\x3b\x3\x3e\x0\x3e\x67\x67\x67\x7f\x67\x67\x0\x3f\x67\x67\x3f\x67\x67\x3f\x0\x3e\x67\x7\x7\x67\x67\x3e\x0\x3f\x67\x67\x67\x67\x67\x3f\x0\x7f\x7\x7\x7f\x7\x7\x7f\x0\x7f\x7\x7\x7f\x7\x7\x7\x0\x3e\x67\x7\x77\x67\x67\x3e\x0" "\x67\x67\x67\x7f\x67\x67\x67\x0\x1c\x1c\x1c\x1c\x1c\x1c\x1c\x0\x70\x70\x70\x70\x73\x73\x3e\x0\x67\x37\x1f\xf\x1f\x37\x67\x0\x7\x7\x7\x7\x7\x7\x7f\x0\x63\x77\x7f\x6b\x63\x63\x63\x0\x63\x67\x6f\x7f\x77\x67\x67\x0\x3e\x67\x67\x67\x67\x67\x3e\x0" "\x3f\x67\x67\x3f\x7\x7\x7\x0\x3e\x67\x67\x67\x67\x57\x2e\x40\x3f\x67\x67\x3f\x67\x67\x67\x0\x3e\x67\x7\x3e\x70\x73\x3e\x0\x7f\x1c\x1c\x1c\x1c\x1c\x1c\x0\x67\x67\x67\x67\x67\x67\x3e\x0\x67\x67\x67\x67\x67\x3e\x1c\x0\x63\x63\x63\x6b\x6b\x7f\x3f\x0" "\xc7\x6e\x3c\x18\x3c\x76\xe3\x0\x67\x67\x3e\x1c\x1c\x1c\x1c\x0\x7f\x70\x38\x1c\xe\x7\x7f\x0\x38\x18\x18\x18\x18\x18\x18\x38\x0\x6\xc\x18\x30\x60\xc0\x0\xe\xc\xc\xc\xc\xc\xc\xe\x18\x3c\x66\xc3\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xff" "\xc\x18\x30\x0\x0\x0\x0\x0\x0\x0\x3e\x70\x7e\x73\x7e\x0\x3\x3\x3f\x67\x67\x67\x3f\x0\x0\x0\x3e\x67\x7\x67\x3e\x0\x60\x60\x7e\x73\x73\x73\x7e\x0\x0\x0\x3e\x67\x7f\x7\x7e\x0\x3c\xe\xe\x3f\xe\xe\xe\x0\x0\x0\x3e\x73\x73\x7e\x70\x3e" "\x3\x3\x3f\x67\x67\x67\x67\x0\x18\x0\x18\x1c\x1c\x1c\x1c\x0\x30\x0\x30\x38\x38\x38\x38\x1f\x3\x3\x33\x1b\xf\x1b\x33\x0\x18\x18\x1c\x1c\x1c\x1c\x1c\x0\x0\x0\x3f\x6b\x6b\x6b\x6b\x0\x0\x0\x3f\x67\x67\x67\x67\x0\x0\x0\x3e\x67\x67\x67\x3e\x0" "\x0\x0\x3f\x67\x67\x3f\x7\x7\x0\x0\x7e\x73\x73\x7e\x70\x70\x0\x0\x3f\x67\x7\x7\x7\x0\x0\x0\x7e\x7\x3e\x70\x3f\x0\x18\x18\x7e\x1c\x1c\x1c\x1c\x0\x0\x0\x67\x67\x67\x67\x7e\x0\x0\x0\x67\x67\x67\x36\x1c\x0\x0\x0\x6b\x6b\x6b\x6b\x3f\x0" "\x0\x0\x67\x3e\x1c\x3e\x73\x0\x0\x0\x73\x73\x73\x7e\x70\x3f\x0\x0\x7f\x38\x1c\xe\x7f\x0\x30\x18\x18\xc\x18\x18\x30\x0\x18\x18\x18\x18\x18\x18\x18\x18\x6\xc\xc\x18\xc\xc\x6\x0\xe\xdb\x70\x0\x0\x0\x0\x0\x0\x0\x8\x14\x22\x7f\x0\x0" "\xff\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\x1\x80\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\xff" "\x1\x0\x0\x0\x0\x0\x0\x0\x80\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x1\x0\x0\x0\x0\x0\x0\x0\x80\x1\x3\x7\xf\x1f\x3f\x7f\xff\xff\xfe\xfc\xf8\xf0\xe0\xc0\x80\xff\xff\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0" "\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\x3\x3\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\xff\xff\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\x0\x55\x0\x0\x0\x0\x0\x3f\x3f\x3f\x3f\x3f\x3f\x0\x0\x7e\x7e\x7e\x7e\x7e\x7e\x0\x0\xfc\xfc\xfc\xfc\xfc\xfc\x0\x0\xf8\xf8\xf8\xf8\xf8\xf8\x0\x0\xf0\xf0\xf0\xf0\xf0\xf0\x0" "\x0\xe0\xe0\xe0\xe0\xe0\xe0\x0\x0\xc0\xc0\xc0\xc0\xc0\xc0\x0\x0\x80\x80\x80\x80\x80\x80\x0\x0\x1\x1\x1\x1\x1\x1\x0\x0\x3\x3\x3\x3\x3\x3\x0\x0\x7\x7\x7\x7\x7\x7\x0\x0\xf\xf\xf\xf\xf\xf\x0\x0\x1f\x1f\x1f\x1f\x1f\x1f\x0" "\x55\x6b\x55\x6b\x55\x6b\x55\x6b\xff\xff\x0\x0\x0\x8\x1c\x3e\xff\xff\x0\x0\x0\x0\x0\x7f\xff\xff\x0\x0\x8\x1c\x3e\x7f\xff\xff\x0\xc3\xe7\xff\xdb\xc3\x0\x0\x0\x0\x18\x0\x0\x0\x0\x3\x3\x3\x3\x3\x3\x3\x0\x1b\x1b\x1b\x1b\x1b\x1b\x1b" "\x0\xdb\xdb\xdb\xdb\xdb\xdb\xdb\x0\x6\x6\x6\x6\x6\x6\x6\x0\x36\x36\x36\x36\x36\x36\x36\x0\xb6\xb6\xb6\xb6\xb6\xb6\xb6\x0\x1\x1\x1\x1\x1\x1\x1\x0\xd\xd\xd\xd\xd\xd\xd\x0\x6d\x6d\x6d\x6d\x6d\x6d\x6d\x0\x0\x18\x3c\x3c\x18\x0\x0" "\x0\x0\x0\x1f\x18\x1f\x18\x18\x6c\x6c\x6c\x6f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x0\x0\x0\x7f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6f\x60\x7f\x0\x0\x6c\x6c\x6c\x7f\x0\x0\x0\x0\x18\x18\x18\x1f\x18\x1f\x0\x0\x0\x0\x0\x1f\x18\x18\x18\x18" "\x18\x18\x18\xf8\x0\x0\x0\x0\x18\x18\x18\xff\x0\x0\x0\x0\x0\x0\x0\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\x18\x18\x18\x0\x0\x0\x0\xff\x0\x0\x0\x18\x18\x18\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\xf8\x18\x18\x6c\x6c\x6c\xec\x6c\x6c\x6c\x6c" "\x6c\x6c\x6c\xec\xc\xfc\x0\x0\x0\x0\x0\xfc\xc\xec\x6c\x6c\x6c\x6c\x6c\xef\x0\xff\x0\x0\x0\x0\x0\xff\x0\xef\x6c\x6c\x6c\x6c\x6c\xec\xc\xec\x6c\x6c\x0\x0\x0\xff\x0\xff\x0\x0\x6c\x6c\x6c\xef\x0\xef\x6c\x6c\x18\x18\x18\xff\x0\xff\x0\x0" "\x6c\x6c\x6c\xff\x0\x0\x0\x0\x0\x0\x0\xff\x0\xff\x18\x18\x0\x0\x0\xff\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xfc\x0\x0\x0\x0\x18\x18\x18\xf8\x18\xf8\x0\x0\x0\x0\x0\xf8\x18\xf8\x18\x18\x0\x0\x0\xfc\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xff\x6c\x6c\x6c\x6c" "\x18\x18\x18\xff\x18\xff\x18\x18\x18\x18\x18\x1f\x0\x0\x0\x0\x0\x0\x0\xf8\x18\x18\x18\x18\xff\xff\xff\xff\xff\xff\xff\xff\x0\x0\x0\x0\xff\xff\xff\xff\xf\xf\xf\xf\xf\xf\xf\xf\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xff\xff\xff\xff\x0\x0\x0\x0" "\x0\x0\xee\x19\x19\xee\x0\x0\x38\x6c\x66\x3f\x63\x63\x3f\x3\x7f\x46\x6\x6\x6\x6\x6\x0\x0\x0\xff\x66\x66\x66\x66\x0\x7f\x46\xc\x18\xc\x46\x7f\x0\x0\x0\xfc\x66\x63\x33\x1e\x0\x0\x0\xcc\xcc\xcc\x7c\xc\xf\x0\x0\xff\x18\x18\x18\x18\x0" "\x3c\x18\x3c\x66\x66\x3c\x18\x3c\x0\x3e\x63\x7f\x63\x3e\x0\x0\x0\x7e\xc3\xc3\xc3\x66\xe7\x0\x78\x98\x3c\x66\x63\x33\x1e\x0\x0\x0\x66\x99\x99\x66\x0\x0\x0\xc0\x3e\x73\x67\x3e\x3\x0\x0\x7c\x3\x7f\x3\x7c\x0\x0\x0\x0\x0\x0\x0\xdb\xdb\x0" "\x0\x7e\x0\x7e\x0\x7e\x0\x0\x0\xf8\x8\x8\x8\x8\xf8\x0\x0\xff\x0\x0\x0\x0\xff\x0\x0\x1f\x10\x10\x10\x10\x1f\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x0\x2\x1\x0\x0\x0\x20\x30\x28\x24\x22\xa1\x60\x20\x0\x0\x0\x1\x2\x0\x0\x0" "\x20\x60\xa1\x22\x24\x28\x30\x20\x0\x0\x0\x40\x40\x40\x40\x7f\xff\x81\x81\x81\x81\x80\x80\x80\x0\x0\x0\x20\x20\x11\x11\xe\x38\x44\x44\x82\x82\x0\x0\x0\x0\x0\xfe\x7c\x38\x10\x0\x0\x0\x0\x10\x38\x7c\xfe\x0\x0\x80\xc1\x63\x36\x1c\x8\x0\x0" ), // Font no. 32 FontEntry("TINY", 6, 5, "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x28\xaf\xbc\x2\x0\x0\x0\x40\x4c\x44\x46\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xe2\x8\x0\x0\x0\x0\x0\x0\x1e\x0\x0\x0\x0\x6\x40\x44\x44\x0\x44\x29\x45\x0\x31\x84\x10\x60\x90\x11\xe\x18" "\x64\x90\x1\x42\x39\x84\x80\x13\xe\x19\xc0\x84\x53\x6\x38\x44\x8\x1\x44\x11\x45\x0\x51\xc\x19\x0\xc\x30\x0\x0\x0\x0\x0\x88\x8\x82\x0\xf0\xc0\x3\x20\x8\x22\x2\x0\x0\x0\x0\x0\x0\x0\x0\x51\xca\x29\x60\x94\x51\x6\x30\x21\x4\x3\x46" "\x29\x65\x80\x13\x4e\x38\xe0\x84\x11\x2\x30\xe1\x14\x3\x4a\x39\xa5\x0\x21\x84\x10\x40\x8\x21\x6\x28\x65\x94\x2\x42\x8\xe1\x80\xf4\x52\x4a\x20\xad\xd5\x12\x10\xa5\x14\x1\x46\x39\x21\x0\x51\x4a\x71\x60\x94\x51\xa\x30\x41\x90\x1\x8e\x10\x42\x80\x52" "\x4a\x39\xa0\x94\x52\x4\x48\x29\xbd\x4\x4a\x11\xa5\x80\x52\x84\x10\xe0\x10\x11\xe\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x88\x2\x0\x0\x0\x0\x0\x0\x0\x0\x0\x70\xd8\x7a\x0\x84\x51\x4\x0\x26\x4\x3\x10\x72\xc9\x1\x60\xd2\x71\x0\x30" "\x71\x4\x0\x6e\xb1\x1\x40\x38\xa5\x0\x20\x80\x10\x0\x8\x20\x6\x0\xa1\x8c\x2\x40\x8\xc1\x0\x90\x5e\x4a\x0\xb4\x95\x12\x0\xa2\x14\x1\xc0\x28\x23\x0\x70\xca\x21\x0\x94\x15\x2\x0\x26\x98\x1\x80\x38\xc2\x0\x50\x4a\x31\x0\x94\x52\x4\x0\x29" "\xbd\x4\x40\x11\xa5\x0\x50\x8a\x18\x0\x1c\x32\xe\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x6a\x5\x0\x30\xcf\x0\xf0\x42\x78\x0\x3e\x0\x1f\x80\xf\xe1\x7\x0\x10\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x20\xc4\x11\x0\x88\x23\x4\x0\x0\x0\x0" ), // Font no. 33 FontEntry("TINY_UPPERCASE", 6, 5, "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x28\xaf\xbc\x2\x0\x0\x0\x40\x4c\x44\x46\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xe2\x8\x0\x0\x0\x0\x0\x0\x1e\x0\x0\x0\x0\x6\x40\x44\x44\x0\x44\x29\x45\x0\x31\x84\x10\x60\x90\x11\xe\x18" "\x64\x90\x1\x42\x39\x84\x80\x13\xe\x19\xc0\x84\x53\x6\x38\x44\x8\x1\x44\x11\x45\x0\x51\xc\x19\x0\xc\x30\x0\x0\x0\x0\x0\x88\x8\x82\x0\xf0\xc0\x3\x20\x8\x22\x2\x0\x0\x0\x0\x0\x0\x0\x0\x51\xca\x29\x60\x94\x51\x6\x30\x21\x4\x3\x46" "\x29\x65\x80\x13\x4e\x38\xe0\x84\x11\x2\x30\xe1\x14\x3\x4a\x39\xa5\x0\x21\x84\x10\x40\x8\x21\x6\x28\x65\x94\x2\x42\x8\xe1\x80\xf4\x52\x4a\x20\xad\xd5\x12\x10\xa5\x14\x1\x46\x39\x21\x0\x51\x4a\x71\x60\x94\x51\xa\x30\x41\x90\x1\x8e\x10\x42\x80\x52" "\x4a\x39\xa0\x94\x52\x4\x48\x29\xbd\x4\x4a\x11\xa5\x80\x52\x84\x10\xe0\x10\x11\xe\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x88\x2\x0\x0\x0\x0\x0\x0\x0\x0\x0\x51\xca\x29\x60\x94\x51\x6\x30\x21\x4\x3\x46\x29\x65\x80\x13\x4e\x38\xe0\x84" "\x11\x2\x30\xe1\x14\x3\x4a\x39\xa5\x0\x21\x84\x10\x40\x8\x21\x6\x28\x65\x94\x2\x42\x8\xe1\x80\xf4\x52\x4a\x20\xad\xd5\x12\x10\xa5\x14\x1\x46\x39\x21\x0\x51\x4a\x71\x60\x94\x51\xa\x30\x41\x90\x1\x8e\x10\x42\x80\x52\x4a\x39\xa0\x94\x52\x4\x48\x29" "\xbd\x4\x4a\x11\xa5\x80\x52\x84\x10\xe0\x10\x11\xe\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x6a\x5\x0\x30\xcf\x0\xf0\x42\x78\x0\x3e\x0\x1f\x80\xf\xe1\x7\x0\x10\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x20\xc4\x11\x0\x88\x23\x4\x0\x0\x0\x0" ), // Font no. 34 FontEntry("XTSAMP", 8, 8, "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x20\x60\xff\xff\x60\x20\x0\x0\x4\x6\xff\xff\x6\x4\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x18\x3c\x7e\xff\x0\x0\x0\x0\x0\x0\xff\x7e\x3c\x18\x0\x4\xc\x1c\x3c\x3c\x1c\xc\x4\x20\x30\x38\x3c\x3c\x38\x30\x20\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x18\x18\x18\x18\x0\x18\x0\x0\x36\x12\x0\x0\x0\x0\x0\x0\x0\x24\x7e\x24\x7e\x24\x0\x0\x10\x78\x1c\x70\x3c\x10\x0\x0\x40\x66\x30\x18\xc\x66\x0\x0\x0\x1c\x36\x5c\x36\x5c\x0\x0\x18\x10\x0\x0\x0\x0\x0" "\x0\x18\xc\x6\x6\xc\x18\x0\x0\x18\x30\x60\x60\x30\x18\x0\x0\x0\x66\x3c\xff\x3c\x66\x0\x0\x0\x18\x18\x7e\x18\x18\x0\x0\x0\x0\x0\x0\x18\x10\x0\x0\x0\x0\x0\x7e\x0\x0\x0\x0\x0\x0\x0\x0\x0\x30\x0\x0\x40\x60\x30\x18\xc\x6\x0" "\x0\x3c\x66\x76\x6e\x66\x3c\x0\x0\x18\x1e\x18\x18\x18\x18\x0\x0\x3c\x66\x60\x30\x18\x7e\x0\x0\x3e\x60\x7e\x60\x60\x3e\x0\x0\x70\x78\x6c\x66\x7c\x60\x0\x0\x7e\x6\x3e\x60\x60\x3e\x0\x0\x7c\x6\x3e\x66\x66\x3c\x0\x0\x7e\x0\x30\x18\x18\x18\x0" "\x0\x3c\x66\x3c\x66\x66\x3c\x0\x0\x3c\x66\x66\x6c\x70\x1e\x0\x0\x0\x0\x18\x0\x0\x18\x0\x0\x0\x18\x0\x0\x18\x8\x0\x0\x30\x18\xc\x6\xc\x18\x0\x0\x0\x0\x3e\x0\x3e\x0\x0\x0\x6\xc\x18\x30\x18\xc\x0\x0\x3c\x60\x60\x38\x0\x18\x0" "\x0\x1c\x22\x32\x32\x2\x3c\x0\x0\x7c\xe\x66\x7e\x66\x66\x0\x0\x3c\x6\x66\x3e\x66\x3e\x0\x0\x7c\x0\x6\x6\xe\x7c\x0\x0\x3e\x70\x66\x66\x66\x3e\x0\x0\x7e\x0\x6\x36\x6\x7e\x0\x0\x7e\x0\x6\x76\x6\x6\x0\x0\x7c\xe\x6\x76\x66\x3c\x0" "\x0\x66\x66\x66\x76\x66\x66\x0\x0\x18\x18\x18\x18\x18\x18\x0\x0\x7e\x0\x60\x60\x70\x3e\x0\x0\x66\x66\x26\x1e\x76\x66\x0\x0\x6\x6\x6\x6\x0\x7e\x0\x0\x46\x6e\x7e\x36\x46\x66\x0\x0\x66\x6e\x5e\x3e\x76\x66\x0\x0\x3c\x70\x66\x66\x66\x3c\x0" "\x0\x3e\x60\x66\x36\x6\x6\x0\x0\x3c\x66\x66\x56\x36\x6c\x0\x0\x3e\x60\x66\x1e\x36\x66\x0\x0\x7c\x6\x6\x7c\x60\x3e\x0\x0\x7e\x0\x18\x18\x18\x18\x0\x0\x66\x66\x66\x66\x70\x3c\x0\x0\x66\x66\x66\x6e\x2c\x8\x0\x0\x46\x46\x56\x56\x56\x3c\x0" "\x0\x42\x66\x2c\x18\x66\x42\x0\x0\x66\x66\x34\x30\x18\x18\x0\x0\x7e\x0\x30\x18\xc\x7e\x0\x0\x3e\x6\x6\x6\x6\x3e\x0\x0\x2\x6\xc\x18\x30\x60\x0\x0\x78\x60\x60\x60\x60\x78\x0\x0\x18\x3c\x66\x42\x0\x0\x0\x0\x0\x0\x0\x0\x0\x7e\x0" "\x0\xc\x18\x0\x0\x0\x0\x0\x0\x0\x0\x3e\x6c\x66\x7c\x0\x0\x6\x6\x3e\x76\x66\x3e\x0\x0\x0\x0\x7c\xe\xe\x7c\x0\x0\x60\x60\x7c\x6e\x66\x7c\x0\x0\x0\x3e\x66\x76\x6\x7c\x0\x0\x78\x1c\xc\x3e\xc\xc\x0\x0\x0\x7c\x66\x7c\x60\x3c\x0" "\x0\x6\x6\x3e\x76\x66\x66\x0\x0\x0\x18\x0\x18\x18\x18\x0\x0\x18\x0\x18\x18\x18\xe\x0\x0\x6\x6\x36\x1e\x36\x66\x0\x0\x18\x18\x18\x18\x18\x18\x0\x0\x0\x0\x7f\xd6\xd6\xd6\x0\x0\x0\x0\x3f\x76\x66\x66\x0\x0\x0\x0\x3c\x66\x66\x3c\x0" "\x0\x0\x0\x3f\x66\x3e\x6\x0\x0\x0\x0\xfc\x66\x7c\x60\x0\x0\x0\x0\x78\x1c\xc\xc\x0\x0\x0\x0\x3c\xe\x78\x3e\x0\x0\xc\xc\xc\x1e\xc\xc\x0\x0\x0\x0\x0\x66\x66\x3e\x0\x0\x0\x0\x0\x66\x3c\x18\x0\x0\x0\x0\x56\x56\x7e\x6c\x0" "\x0\x0\x0\x0\x66\x3c\x66\x0\x0\x0\x0\x6c\x7c\x60\x3c\x0\x0\x0\x0\x7e\x30\x18\x7e\x0\x0\x30\x18\x18\x4\x18\x30\x0\x0\x18\x18\x18\x0\x18\x18\x0\x0\xc\x18\x18\x20\x18\xc\x0\x0\x0\x6c\x36\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x6c\x0\x3e\x6c\x66\x3e\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x66\x0\x7c\x6\x7e\x66\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x66\x0\x3c\x66\x66\x1c\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x66\x18\x6e\x66\x66\x3c\x0\x0\x66\x0\x66\x66\x66\x3c\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xff\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x3e\x3e\x3e\x3e\x3e\x3e\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xdb\xdb\x0" "\x0\x7e\x0\x7e\x0\x7e\x0\x0\x0\xf8\x8\x8\x8\x8\xf8\x0\x0\xff\x0\x0\x0\x0\xff\x0\x0\x1f\x10\x10\x10\x10\x1f\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x0\x2\x1\x0\x0\x0\x20\x30\x28\x24\x22\xa1\x60\x20\x0\x0\x0\x1\x2\x0\x0\x0" "\x20\x60\xa1\x22\x24\x28\x30\x20\x0\x0\x0\x40\x40\x40\x40\x7f\xff\x81\x81\x81\x81\x80\x80\x80\x0\x0\x0\x20\x20\x11\x11\xe\x38\x44\x44\x82\x82\x0\x0\x0\x0\x0\xfe\x7c\x38\x10\x0\x0\x0\x0\x10\x38\x7c\xfe\x0\x0\x80\xc1\x63\x36\x1c\x8\x0\x0" ), // Font no. 35 FontEntry("ZERO", 8, 8, "\x0\x0\x0\x0\x0\x0\x0\x0\x7e\x81\xa5\x81\xbd\x99\x81\x7e\x7e\xff\xdb\xff\xff\xc3\xe7\x7e\x0\x77\x7f\x7f\x3e\x1c\x8\x0\x8\x1c\x3e\x7f\x3e\x1c\x8\x0\x18\x3c\x18\xff\xff\x52\x18\x0\x8\x1c\x3e\x7f\x7f\x49\x1c\x0\x0\x0\x18\x3c\x18\x0\x0\x0" "\xff\xff\xe7\xc3\xe7\xff\xff\xff\x0\x3c\x42\x42\x42\x42\x3c\x0\xff\xc3\xbd\xbd\xbd\xbd\xc3\xff\xf8\xe0\xb0\x3e\x63\x63\x3e\x0\x0\x7e\xc3\xc3\x7e\x18\x7e\x18\x20\x60\xe0\x20\x2e\x3f\x1f\xe\xfe\xc6\xfe\xc6\xc6\xe6\x67\x3\x81\xc2\xbc\xe4\xa4\xfc\xea\xff" "\x0\x0\x6\x1e\x7e\x1e\x6\x0\x0\x0\x60\x78\x7e\x78\x60\x0\x18\x7e\x18\x18\x18\x18\x7e\x18\x66\x66\x66\x66\x66\x0\x66\x0\xff\x6d\x6e\x6c\x6c\x6c\x6c\x0\x7e\x81\x3e\x42\x42\x7c\x81\x7e\x0\x0\x0\x7e\x7e\x0\x0\x0\x18\x7e\x18\x18\x7e\x18\x0\xff" "\x18\x7e\x18\x18\x18\x18\x18\x0\x18\x18\x18\x18\x18\x7e\x18\x0\x0\x20\x60\xff\x60\x20\x0\x0\x0\x4\x6\xff\x6\x4\x0\x0\x0\x0\x0\x3\x3\x3\xff\x0\x0\x24\x66\xff\x66\x24\x0\x0\x0\x0\x8\x1c\x3e\x7f\x0\x0\x0\x0\x0\x7f\x3e\x1c\x8\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\xc\xc\xc\xc\xc\x0\xc\x0\x66\x66\x0\x0\x0\x0\x0\x0\xa\x1f\xa\x1f\xa\x0\x0\x0\x3e\x4b\xb\x3e\x68\x6b\x3e\x8\xc7\x65\x37\x18\xec\xa6\xe3\x0\x1c\x32\x1c\xa2\x63\x73\x5e\x80\x30\x30\x18\x0\x0\x0\x0\x0" "\x8\x6\x3\x3\x3\x6\x8\x0\x8\x30\x60\x60\x60\x30\x8\x0\x8\x2a\x1c\x7f\x1c\x2a\x8\x0\x0\x18\x18\x7e\x18\x18\x0\x0\x0\x0\x0\x0\x0\x0\x18\xe\x0\x0\x0\x7e\x0\x0\x0\x0\x0\x0\x0\x0\x0\x60\x60\x0\x80\xc0\x60\x30\x18\xc\x6\x3" "\x0\x18\x24\x24\x24\x24\x18\x0\x18\x1c\x1e\x18\x18\x18\x3e\x0\x3e\x63\x60\x30\xc\x6\x7f\x0\x3e\x63\x60\x3c\x60\x63\x3e\x0\x70\x78\x6c\x66\x7f\x60\x60\x0\x7f\x3\x3\x3f\x60\x60\x3f\x0\x3e\x63\x3\x3f\x63\x63\x3e\x0\x7f\x60\x30\x18\xc\xc\xc\x0" "\x3e\x63\x63\x3e\x63\x63\x3e\x0\x3e\x63\x63\x7e\x60\x63\x3e\x0\x0\xc\x0\x0\x0\xc\x0\x0\x0\xc\x0\x0\x0\xc\x4\x2\x80\xc0\x60\x30\x30\x60\xc0\x80\x0\x0\x7e\x0\x7e\x0\x0\x0\x3\x6\xc\x18\x18\xc\x6\x3\x3e\x63\x30\x18\xc\x0\xc\x0" "\x3e\x41\x5d\x55\x7d\x1\x3e\x0\x8\x1c\x36\x63\x63\x7f\x63\x41\x3f\x61\x63\x3f\x63\x63\x3f\x0\x3e\x61\x3\x3\x43\x63\x3e\x0\x1f\x31\x63\x63\x63\x33\x1f\x0\x7f\x1\x3\x1f\x3\x3\x7f\x0\x7f\x41\x3\x1f\x13\x3\x3\x0\x3e\x61\x3\x7b\x43\x63\x5e\x0" "\x63\x63\x63\x7f\x63\x63\x63\x0\x7e\x18\x18\x18\x18\x18\x7e\x0\x78\x30\x30\x30\x30\x33\x1e\x0\x63\x33\x1b\xf\x1b\x33\x63\x0\xf\x6\x6\x6\x6\x46\x7f\x0\x63\x77\x7f\x6b\x6b\x63\x63\x0\x63\x67\x6f\x7b\x73\x63\x63\x0\x3e\x63\x63\x63\x63\x63\x3e\x0" "\x3f\x66\x66\x3e\x6\x6\xf\x0\x3e\x63\x63\x63\x7b\x33\x3e\x60\x3f\x66\x66\x3e\x66\x66\x67\xc0\x3e\x43\x3\x3e\x60\x63\x3e\x0\x7e\x18\x18\x18\x18\x18\x18\x0\x63\x63\x63\x63\x63\x63\x3e\x0\x63\x63\x63\x63\x63\x36\x1c\x0\x63\x63\x6b\x6b\x6b\x77\x63\x0" "\x63\x36\x1c\x8\x1c\x36\x63\x0\x41\x63\x36\x1c\x8\x8\x1c\x0\x7f\x61\x30\x18\xc\x46\x7f\x0\x38\x18\x18\x18\x18\x18\x18\x38\x3\x6\xc\x18\x30\x60\xc0\x80\xe\xc\xc\xc\xc\xc\xc\xe\x8\x1c\x36\x63\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xff" "\xc\xc\x18\x0\x0\x0\x0\x0\x0\x0\x3e\x60\x7e\x63\x7e\x0\x3\x3\x3f\x63\x63\x63\x3f\x0\x0\x0\x3e\x63\x3\x63\x3e\x0\x60\x60\x7e\x63\x63\x63\x7e\x0\x0\x0\x3e\x63\x7f\x3\x3e\x0\x3c\x66\x6\x3f\x6\x6\x6\x0\x0\x0\xbe\x63\x63\x7e\x60\x3e" "\x3\x3\x3f\x63\x63\x63\x63\x0\x18\x0\x1c\x18\x18\x18\x3c\x0\x30\x0\x38\x30\x30\x30\x33\x1e\x3\x3\x63\x1b\xf\x1b\x63\x0\x1c\x18\x18\x18\x18\x18\x38\x0\x0\x0\x63\x7f\x6b\x6b\x63\x0\x0\x0\x3f\x63\x63\x63\x63\x0\x0\x0\x3e\x63\x63\x63\x3e\x0" "\x0\x0\x3f\x63\x63\x3f\x3\x3\x0\x0\x7e\x63\x63\x7e\x60\xe0\x0\x0\x7b\x6e\x66\x6\x6\x0\x0\x0\x7e\x3\x3e\x60\x3f\x0\x18\x18\x7e\x18\x18\x18\x78\x0\x0\x0\x63\x63\x63\x63\x7e\x0\x0\x0\x63\x63\x63\x36\x1c\x0\x0\x0\x63\x6b\x6b\x77\x63\x0" "\x0\x0\x63\x36\x1c\x36\x63\x0\x0\x0\x63\x63\x63\x7e\x60\x3f\x0\x0\x7f\x30\x8\x46\x7f\x0\x70\x18\x18\xe\x18\x18\x70\x0\x18\x18\x18\x0\x18\x18\x18\x0\x7\xc\xc\x38\xc\xc\x7\x0\xe\xd9\x70\x0\x0\x0\x0\x0\x0\x0\x8\x14\x22\x7f\x0\x0" "\xff\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\x1\x80\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\xff" "\x1\x0\x0\x0\x0\x0\x0\x0\x80\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x1\x0\x0\x0\x0\x0\x0\x0\x80\x1\x3\x7\xf\x1f\x3f\x7f\xff\xff\xfe\xfc\xf8\xf0\xe0\xc0\x80\xff\xff\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0" "\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\x3\x3\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\xff\xff\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x55\xaa\xff\x0\xff\xaa\x55\x0\x0\x3f\x3f\x3f\x3f\x3f\x3f\x0\x0\x7e\x7e\x7e\x7e\x7e\x7e\x0\x0\xfc\xfc\xfc\xfc\xfc\xfc\x0\x0\xf8\xf8\xf8\xf8\xf8\xf8\x0\x0\xf0\xf0\xf0\xf0\xf0\xf0\x0" "\x0\xe0\xe0\xe0\xe0\xe0\xe0\x0\x0\xc0\xc0\xc0\xc0\xc0\xc0\x0\x0\x80\x80\x80\x80\x80\x80\x0\x0\x1\x1\x1\x1\x1\x1\x0\x0\x3\x3\x3\x3\x3\x3\x0\x0\x7\x7\x7\x7\x7\x7\x0\x0\xf\xf\xf\xf\xf\xf\x0\x0\x1f\x1f\x1f\x1f\x1f\x1f\x0" "\x55\x6b\x55\x6b\x55\x6b\x55\x6b\xff\xff\x0\x0\x0\x8\x1c\x3e\xff\xff\x0\x0\x0\x0\x0\x7f\xff\xff\x0\x0\x8\x1c\x3e\x7f\xff\xff\x0\xc3\xe7\xff\xdb\xc3\x0\x0\x0\x8\x0\x0\x0\x0\x0\x3\x3\x3\x3\x3\x3\x3\x0\x1b\x1b\x1b\x1b\x1b\x1b\x1b" "\x0\xdb\xdb\xdb\xdb\xdb\xdb\xdb\x0\x6\x6\x6\x6\x6\x6\x6\x0\x36\x36\x36\x36\x36\x36\x36\x0\xb6\xb6\xb6\xb6\xb6\xb6\xb6\x0\x1\x1\x1\x1\x1\x1\x1\x0\xd\xd\xd\xd\xd\xd\xd\x0\x6d\x6d\x6d\x6d\x6d\x6d\x6d\x8\x10\x18\xbe\x7d\x18\x8\x10" "\x0\x0\x1f\x18\x1f\x18\x18\x18\x6c\x6c\x6f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x0\x0\x7f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6f\x60\x7f\x0\x0\x0\x6c\x6c\x6c\x6c\x7f\x0\x0\x0\x18\x18\x1f\x18\x1f\x0\x0\x0\x0\x0\x0\x1f\x18\x18\x18\x18" "\x18\x18\x18\xf8\x0\x0\x0\x0\x18\x18\x18\xff\x0\x0\x0\x0\x0\x0\x0\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\x18\x18\x18\x0\x0\x0\x0\xff\x0\x0\x0\x18\x18\x18\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\xf8\x18\x18\x6c\x6c\x6c\xec\x6c\x6c\x6c\x6c" "\x6c\x6c\x6c\xec\xc\xfc\x0\x0\x0\x0\x0\xfc\xc\xec\x6c\x6c\x6c\x6c\x6c\xef\x0\xff\x0\x0\x0\x0\x0\xff\x0\xef\x6c\x6c\x6c\x6c\x6c\xec\xc\xec\x6c\x6c\x0\x0\x0\xff\x0\xff\x0\x0\x6c\x6c\x6c\xef\x0\xef\x6c\x6c\x18\x18\x18\xff\x0\xff\x0\x0" "\x6c\x6c\x6c\xff\x0\x0\x0\x0\x0\x0\x0\xff\x0\xff\x18\x18\x0\x0\x0\xff\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xfc\x0\x0\x0\x0\x18\x18\x18\xf8\x18\xf8\x0\x0\x0\x0\x0\xf8\x18\xf8\x18\x18\x0\x0\x0\xfc\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xff\x6c\x6c\x6c\x6c" "\x18\x18\x18\xff\x18\xff\x18\x18\x18\x18\x18\x1f\x0\x0\x0\x0\x0\x0\x0\xf8\x18\x18\x18\x18\xff\xff\xff\xff\xff\xff\xff\xff\x0\x0\x0\x0\xff\xff\xff\xff\xf\xf\xf\xf\xf\xf\xf\xf\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xff\xff\xff\xff\x0\x0\x0\x0" "\x0\x0\xee\x19\x19\xee\x0\x0\x38\x6c\x66\x3f\x63\x63\x3f\x3\x7f\x46\x6\x6\x6\x6\x6\x0\x0\x0\xff\x66\x66\x66\x66\x0\x7f\x46\xc\x18\xc\x46\x7f\x0\x0\x0\xfc\x66\x63\x33\x1e\x0\x0\x0\xcc\xcc\xcc\x7c\xc\xf\x0\x0\xff\x18\x18\x18\x18\x0" "\x3c\x18\x3c\x66\x66\x3c\x18\x3c\x0\x3e\x63\x7f\x63\x3e\x0\x0\x0\x7e\xc3\xc3\xc3\x66\xe7\x0\x78\x98\x3c\x66\x63\x33\x1e\x0\x0\x0\x66\x99\x99\x66\x0\x0\x0\xc0\x3e\x73\x67\x3e\x3\x0\x0\x7c\x3\x7f\x3\x7c\x0\x0\x0\x0\x0\x0\x0\xdb\xdb\x0" "\x0\x7e\x0\x7e\x0\x7e\x0\x0\x0\xf8\x8\x8\x8\x8\xf8\x0\x0\xff\x0\x0\x0\x0\xff\x0\x0\x1f\x10\x10\x10\x10\x1f\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x0\x2\x1\x0\x0\x0\x20\x30\x28\x24\x22\xa1\x60\x20\x0\x0\x0\x1\x2\x0\x0\x0" "\x20\x60\xa1\x22\x24\x28\x30\x20\x0\x0\x0\x40\x40\x40\x40\x7f\xff\x81\x81\x81\x81\x80\x80\x80\x0\x0\x0\x20\x20\x11\x11\xe\x38\x44\x44\x82\x82\x0\x0\x0\x0\x0\xfe\x7c\x38\x10\x0\x0\x0\x0\x10\x38\x7c\xfe\x0\x0\x80\xc1\x63\x36\x1c\x8\x0\x0" ), // Font no. 36 FontEntry("ZIRCFONT", 8, 8, "\x0\x0\x0\x0\x0\x0\x0\x0\x7e\x81\xa5\x81\xbd\x99\x81\x7e\x7e\xff\xdb\xff\xc3\xe7\xff\x7e\x36\x7f\x7f\x7f\x3e\x1c\x8\x0\x8\x1c\x3e\x7f\x3e\x1c\x8\x0\x1c\x3e\x1c\x7f\x7f\x49\x8\x3e\x0\x8\x1c\x3e\x7f\x3e\x1c\x3e\x0\x0\x18\x3c\x3c\x18\x0\x0" "\xff\xff\xe7\xc3\xc3\xe7\xff\xff\x0\x3c\x66\x42\x42\x66\x3c\x0\xff\xc3\x99\xbd\xbd\x99\xc3\xff\xf0\xe0\xf0\xbe\x33\x33\x33\x1e\x3c\x66\x66\x66\x3c\x18\x7e\x18\xfc\xcc\xfc\xc\xc\xe\xf\x7\xfe\xc6\xfe\xc6\xc6\xe6\x67\x3\x99\x5a\x3c\xe7\xe7\x3c\x5a\x99" "\x1\x7\x1f\x7f\x1f\x7\x1\x0\x40\x70\x7c\x7f\x7c\x70\x40\x0\x18\x3c\x7e\x18\x18\x7e\x3c\x18\x66\x66\x66\x66\x66\x0\x66\x0\xfe\xdb\xdb\xde\xd8\xd8\xd8\x0\x7c\xc6\x1c\x36\x36\x1c\x61\x3f\x0\x0\x0\x0\x7e\x7e\x7e\x0\x18\x3c\x7e\x18\x7e\x3c\x18\xff" "\x18\x3c\x7e\x18\x18\x18\x18\x0\x18\x18\x18\x18\x7e\x3c\x18\x0\x0\x18\x30\x7f\x30\x18\x0\x0\x0\xc\x6\x7f\x6\xc\x0\x0\x0\x0\x3\x3\x3\x7f\x0\x0\x0\x24\x66\xff\x66\x24\x0\x0\x0\x18\x3c\x7e\xff\xff\x0\x0\x0\xff\xff\x7e\x3c\x18\x0\x0" "\x0\x0\x0\x0\x0\x0\x0\x0\x10\x18\x18\x18\x8\x0\x18\x0\x22\x36\x34\x0\x0\x0\x0\x0\x0\x44\x7f\x64\x27\x7e\x22\x0\x10\x7e\x19\x3e\x6c\x3f\x4\x0\x0\x41\x63\x30\xc\x46\x63\x0\x1c\x26\x36\x1c\x7e\x19\x27\x0\x8\xc\x6\x0\x0\x0\x0\x0" "\x18\xc\x6\x2\x6\xc\x38\x0\xe\x18\x30\x20\x30\x18\xc\x0\x0\x4\x6c\x1f\x78\x16\x33\x0\x0\x8\x18\x78\x1e\x18\x10\x0\x0\x0\x0\x0\x0\x10\x18\xc\x0\x0\x0\x7c\x1f\x0\x0\x0\x0\x0\x0\x0\x0\x18\x10\x0\x60\x30\x10\x8\xc\x6\x3\x0" "\x1e\x30\x69\x4d\x67\x33\x1e\x0\x8\xc\x8\x8\x8\x3c\xe\x0\x3e\x67\x60\x38\xc\x76\x1f\x0\x7e\x60\x38\x6c\x41\x63\x3e\x0\x24\x26\x36\x32\x7f\x10\x10\x0\x3f\x1\x3f\x63\x40\x73\x3e\x0\x3c\x6\x3\x3b\x67\x66\x3c\x0\x3e\x67\x20\x30\x18\x18\x8\x0" "\x4e\x62\x36\x1c\x36\x33\x1e\x0\x5e\x63\x61\x73\x6c\x20\x20\x0\x0\x10\x18\x0\x0\x18\x8\x0\x0\x8\x18\x0\x0\x10\x18\xc\x18\xc\x6\x3\x6\x1c\x30\x0\x0\x0\x7e\x0\x1e\x78\x0\x0\x6\x1c\x30\x60\x30\x18\xc\x0\x3c\x66\x22\x30\x18\x0\x18\x0" "\x3c\x42\x79\x65\x79\x3\x3e\x0\x8\x8\x1c\x14\x3e\x63\xc1\x0\x3e\x63\x64\x3c\x64\x66\x3f\x0\x7c\xe\x3\x3\x43\x63\x3e\x0\x3e\x63\x40\x44\x64\x36\x1f\x0\x7c\x6\x2\x3f\x2\x6\x7c\x0\x7a\xf\x2\x1e\x7\x6\x6\x0\x1c\x32\x3\x39\x63\x66\x3c\x0" "\x20\x21\x21\x7f\x33\x22\x22\x0\x3c\x10\x18\x18\x18\x8\x3c\x0\x7c\x20\x20\x60\x60\x67\x3c\x0\x62\x32\x1a\xe\x1e\x33\x42\x0\x2\x2\x3\x3\x2\x7a\x3f\x0\x23\x37\x7d\x69\x49\x41\x41\x0\x21\x23\x63\x67\x65\x4d\x79\x0\x3c\xe\x43\x41\x63\x36\x1c\x0" "\x3e\x43\x64\x3e\x6\x6\x2\x0\x1e\x32\x60\x6d\x31\x3b\x6e\x0\x3e\x43\x64\x3e\xe\x36\x62\x0\x3c\x46\x2\x1c\x70\x61\x3e\x0\x78\x1f\x8\xc\xc\x4\x4\x0\x43\x43\x43\x61\x61\x33\x1e\x0\x41\x43\x62\x26\x24\x1c\x18\x0\x41\x41\x69\x6b\x2b\x3f\x36\x0" "\x1\x62\x36\x1c\x1c\x36\x63\x0\x41\x62\x66\x3c\x18\xc\x6\x0\x3f\x30\x18\x8\xc\x66\x3e\x0\x3e\x2\x6\x6\x6\x4\x1c\x0\x2\x6\xc\x8\x18\x30\x60\x0\x3c\x20\x30\x30\x30\x10\x1e\x0\x8\x3c\x66\x41\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xf8\x1f" "\x4\xc\x18\x0\x0\x0\x0\x0\x0\x0\x2c\x32\x61\x63\x5e\x0\x2\x2\x3b\x67\x43\x61\x3d\x0\x0\x0\x3c\x6\x3\x71\x3e\x0\x20\x20\x6e\x73\x61\x43\x5e\x0\x0\x0\x3e\x33\x1b\x6\x7c\x0\x38\xc\x4\x3c\xe\x8\x8\x0\x0\x0\x5e\x63\x61\x6e\x20\x1e" "\x1\x1\x1b\x37\x63\x42\x42\x0\x0\x10\x0\x10\x18\x18\x8\x0\x0\x8\x0\x8\x18\x18\x10\xe\x2\x2\x23\x1b\xf\x11\x21\x0\x8\x8\x18\x18\x18\x10\x10\x0\x0\x0\x35\x7f\x4b\x49\x49\x0\x0\x0\xd\x1b\x31\x31\x21\x0\x0\x0\x1e\x21\x63\x66\x3c\x0" "\x0\x0\x39\x4d\x67\x3b\x2\x2\x0\x0\x2e\x39\x33\x3e\x10\x10\x0\x0\x19\x37\x3\x2\x2\x0\x0\x0\x1e\x7\x3c\x60\x3e\x0\x10\x10\x7e\x18\x18\x8\x8\x0\x0\x0\x44\x46\x66\x72\x4c\x0\x0\x0\x61\x33\x16\x1c\x8\x0\x0\x0\x42\x43\x6b\x69\x36\x0" "\x0\x0\x31\x1e\xc\x16\x23\x0\x0\x0\x43\x26\x3c\x18\xc\x3\x0\x0\x3c\x33\x8\x6\x3f\x0\x18\xc\x4\x3\x4\xc\x38\x0\x8\x18\x8\x10\x18\x18\x10\x0\xe\x10\x10\x60\x10\x18\xe\x0\x4c\x3b\x0\x0\x0\x0\x0\x0\x0\x8\x1c\x36\x63\x63\x7f\x0" "\xff\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\x1\x80\x80\x80\x80\x80\x80\x80\x80\x1\x1\x1\x1\x1\x1\x1\xff\x0\x0\x0\x0\x0\x0\x0\xff\x80\x80\x80\x80\x80\x80\x80\xff" "\x1\x0\x0\x0\x0\x0\x0\x0\x80\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x1\x0\x0\x0\x0\x0\x0\x0\x80\x1\x3\x7\xf\x1f\x3f\x7f\xff\xff\xfe\xfc\xf8\xf0\xe0\xc0\x80\xff\xff\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0" "\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\x3\x3\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\x3\x3\x3\x3\x3\x3\xff\xff\x0\x0\x0\x0\x0\x0\xff\xff\xc0\xc0\xc0\xc0\xc0\xc0\xff\xff\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\x0\x0\x0\x0" "\x0\x0\x0\x0\x0\x0\x3\x3\x0\x0\x0\x0\x0\x0\xc0\xc0\x0\x0\x0\x41\x14\x0\x0\x0\x0\x18\x19\xf\x3c\x36\x6\x0\x0\x42\x76\x1c\x3c\x66\x43\x0\x0\x18\xd8\xf0\x3c\x6e\x60\x0\x0\x60\x60\xf8\xfc\x60\x40\x0\x0\x80\x98\xf0\xc0\x60\x60\x0" "\x0\x20\x60\xc0\xc0\x60\x30\x0\x0\x80\x80\x0\xc0\xe0\x0\x0\x0\x0\x0\x80\xc0\x0\x0\x0\x0\x0\x0\x3\x1\x0\x0\x0\x0\x1\x1\x0\x3\x3\x0\x0\x0\x4\x7\x1\x3\x6\x4\x0\x0\x1\x1d\xf\x3\x6\x6\x0\x0\x6\x6\x3f\x1f\x6\x4\x0" "\x7e\x7e\x7e\x7e\x7e\x7e\x7e\x7e\xff\xff\x0\x18\x24\x42\x3c\x0\xff\xff\x0\x18\x24\x42\x5a\x0\xff\xff\x0\x18\x3c\x7e\x3c\x0\xff\xff\x0\xe7\x5a\x42\x42\xe7\x0\x0\x0\x18\x18\x0\x0\x0\x0\x2\x3\x3\x2\x3\x1\x0\x0\x2\x3\x13\x3a\x1b\x11\x10" "\x0\x32\x33\x13\x3a\x1b\x11\x10\x1\x3\x1\x3\x6\x6\x0\x0\x1\x3\x1\x43\x26\x66\x30\x10\x1\x33\x71\x63\x26\x66\x30\x10\x0\x2\x3\x1\x0\x0\x0\x0\x0\x2\x33\x31\x6\x7\x3\x2\x20\x62\x73\x31\x26\x67\x63\x2\x0\x0\x18\x3c\x3c\x18\x0\x0" "\x0\x0\x1f\x18\x1f\x18\x18\x18\x6c\x6c\x6f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x6c\x0\x0\x7f\x60\x6f\x6c\x6c\x6c\x6c\x6c\x6f\x60\x7f\x0\x0\x0\x6c\x6c\x6c\x6c\x7f\x0\x0\x0\x18\x18\x1f\x18\x1f\x0\x0\x0\x0\x0\x0\x0\x1f\x18\x18\x18" "\x18\x18\x18\x18\xf8\x0\x0\x0\x18\x18\x18\x18\xff\x0\x0\x0\x0\x0\x0\x0\xff\x18\x18\x18\x18\x18\x18\x18\xf8\x18\x18\x18\x0\x0\x0\x0\xff\x0\x0\x0\x18\x18\x18\x18\xff\x18\x18\x18\x18\x18\xf8\x18\xf8\x18\x18\x18\x6c\x6c\x6c\x6c\xec\x6c\x6c\x6c" "\x6c\x6c\xec\xc\xfc\x0\x0\x0\x0\x0\xfc\xc\xec\x6c\x6c\x6c\x6c\x6c\xef\x0\xff\x0\x0\x0\x0\x0\xff\x0\xef\x6c\x6c\x6c\x6c\x6c\xec\xc\xec\x6c\x6c\x6c\x0\x0\xff\x0\xff\x0\x0\x0\x6c\x6c\xef\x0\xef\x6c\x6c\x6c\x18\x18\xff\x0\xff\x0\x0\x0" "\x6c\x6c\x6c\x6c\xff\x0\x0\x0\x0\x0\xff\x0\xff\x18\x18\x18\x0\x0\x0\x0\xff\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xfc\x0\x0\x0\x18\x18\xf8\x18\xf8\x0\x0\x0\x0\x0\xf8\x18\xf8\x18\x18\x18\x0\x0\x0\x0\xfc\x6c\x6c\x6c\x6c\x6c\x6c\x6c\xff\x6c\x6c\x6c" "\x18\x18\xff\x18\xff\x18\x18\x18\x18\x18\x18\x18\x1f\x0\x0\x0\x0\x0\x0\x0\xf8\x18\x18\x18\xff\xff\xff\xff\xff\xff\xff\xff\x0\x0\x0\x0\xff\xff\xff\xff\xf\xf\xf\xf\xf\xf\xf\xf\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xff\xff\xff\xff\x0\x0\x0\x0" "\x0\x0\x6e\x3b\x13\x3b\x6e\x0\x0\x1e\x33\x1f\x33\x1f\x3\x3\x0\x3f\x33\x3\x3\x3\x3\x0\x0\x0\x7f\x36\x36\x36\x36\x0\x3f\x33\x6\xc\x6\x33\x3f\x0\x0\x0\x7e\x1b\x1b\x1b\xe\x0\x0\x66\x66\x66\x66\x3e\x6\x3\x0\x6e\x3b\x18\x18\x18\x18\x0" "\x3f\xc\x1e\x33\x33\x1e\xc\x3f\x1c\x36\x63\x7f\x63\x36\x1c\x0\x1c\x36\x63\x63\x36\x36\x77\x0\x38\xc\x18\x3e\x33\x33\x1e\x0\x0\x0\x7e\xdb\xdb\x7e\x0\x0\x60\x30\x7e\xdb\xdb\x7e\x6\x3\x1c\x6\x3\x1f\x3\x6\x1c\x0\x0\x0\x0\x0\x0\xdb\xdb\x0" "\x0\x7e\x0\x7e\x0\x7e\x0\x0\x0\xf8\x8\x8\x8\x8\xf8\x0\x0\xff\x0\x0\x0\x0\xff\x0\x0\x1f\x10\x10\x10\x10\x1f\x0\x0\x0\x0\x8\x0\x0\x0\x0\x0\x0\x0\x2\x1\x0\x0\x0\x20\x30\x28\x24\x22\xa1\x60\x20\x0\x0\x0\x1\x2\x0\x0\x0" "\x20\x60\xa1\x22\x24\x28\x30\x20\x0\x0\x0\x40\x40\x40\x40\x7f\xff\x81\x81\x81\x81\x80\x80\x80\x0\x0\x0\x20\x20\x11\x11\xe\x38\x44\x44\x82\x82\x0\x0\x0\x0\x0\xfe\x7c\x38\x10\x0\x0\x0\x0\x10\x38\x7c\xfe\x0\x0\x80\xc1\x63\x36\x1c\x8\x0\x0" ), }; const unsigned int numFontsEntries = 37; MilkyTracker-1.02.00/src/tools/TINY.6x5000066400000000000000000000017001324432207300173270ustar00rootroot00000000000000(@LDF@DDD)E1`dB9S8DDEQ  0 "Q)`Q0!F)eN80J9!@!(eBRJ F9!QJq`Q 0ABRJ9RH)JRpzQ&r`q0qn@8  @^J(#p!&8PJ1R)@P2j0Bx> #MilkyTracker-1.02.00/src/tools/TINY_UPPERCASE.6x5000066400000000000000000000017001324432207300207360ustar00rootroot00000000000000(@LDF@DDD)E1`dB9S8DDEQ  0 "Q)`Q0!F)eN80J9!@!(eBRJ F9!QJq`Q 0ABRJ9RH)JRQ)`Q0!F)eN80J9!@!(eBRJ F9!QJq`Q 0ABRJ9RH)JRj0Bx> #MilkyTracker-1.02.00/src/tools/archivewriter.cpp000066400000000000000000000052601324432207300215670ustar00rootroot00000000000000/* * tools/archivewriter.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include #include #include #include #include #include "BasicTypes.h" #include "PPPathFactory.h" #include "XMFile.h" #include "SimpleVector.h" using namespace std; class ArchiveWriter { public: enum { RecordSize = (256+4+4) }; void addFile(const PPSystemString& fileName) { files.add(new PPSystemString(fileName)); } void flush(const PPSystemString& fileName) { XMFile f(fileName, true); f.write("pls\xff", 1, 4); f.writeDword(files.size()); f.writeDword(RecordSize); pp_uint32 offset = 12; // write out toc first for (pp_int32 i = 0; i < files.size(); i++) { XMFile inf(*files.get(i)); pp_uint32 size = inf.size(); PPSystemString fileName = files.get(i)->stripPath(); cout << fileName << " Size: " << size << endl; char* nameASCIIZ = fileName.toASCIIZ(); char result[256]; memset(result, 0, sizeof(result)); strcpy(result, nameASCIIZ); delete[] nameASCIIZ; f.write(result, 1, sizeof(result)); f.writeDword(offset + RecordSize*files.size()); f.writeDword(size); offset+=size; } // write out files for (pp_int32 i = 0; i < files.size(); i++) { XMFile inf(*files.get(i)); pp_uint32 size = inf.size(); char* chunk = new char[size]; inf.read(chunk, 1, size); f.write(chunk, 1, size); delete[] chunk; } } private: PPSimpleVector files; }; int main(int argc, const char* argv[]) { ArchiveWriter writer; // Input PPPath* path = PPPathFactory::createPathFromString(argv[1]); const PPPathEntry* entry = path->getFirstEntry(); pp_uint32 numFonts = 0; while (entry) { if (!entry->isHidden() && entry->isFile()) { PPSystemString currentFile = path->getCurrent(); currentFile.append(entry->getName()); //cout << currentFile << endl; writer.addFile(currentFile); } entry = path->getNextEntry(); } writer.flush("/data"); return 0; } MilkyTracker-1.02.00/src/tools/compile.sh000077500000000000000000000000311324432207300201630ustar00rootroot00000000000000#!/bin/bash g++ test.cpp MilkyTracker-1.02.00/src/tools/convertrawfont.cpp000066400000000000000000000057621324432207300220010ustar00rootroot00000000000000/* * tools/convertrawfont.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include #include #include #include #include #include #include "BasicTypes.h" #include "PPPath_POSIX.h" #include "XMFile.h" #include "Font.h" #define FLIP #define NUMCHARS 99 #define CHARWIDTH 8 #define CHARHEIGHT 8 #define CHARSIZE (CHARWIDTH*CHARHEIGHT) static pp_uint8 dstFont[CHARSIZE*256/8]; static pp_uint8 src[CHARSIZE*NUMCHARS]; #ifdef FLIP #define CONVERT_LARGE_CHAR \ for (y = 0; y < CHARHEIGHT; y++) \ { \ for (x = 0; x < CHARWIDTH; x++) \ { \ if (src[k*CHARSIZE+y*CHARWIDTH+x]) \ { \ bitstream->write(i*CHARSIZE+y*CHARWIDTH+(CHARWIDTH-1-x), true); \ } \ } \ } #else #define CONVERT_LARGE_CHAR \ for (y = 0; y < CHARHEIGHT; y++) \ { \ for (x = 0; x < CHARWIDTH; x++) \ { \ if (src[k*CHARSIZE+y*CHARWIDTH+x]) \ { \ bitstream->write(i*CHARSIZE+y*CHARWIDTH+x, true); \ } \ } \ } #endif void convert(const char* infile, const char* outfile) { pp_uint32 x,y,i,j,k; XMFile f(infile); f.read(src, CHARSIZE, NUMCHARS); Bitstream* bitstream = new Bitstream(dstFont, (CHARSIZE*256)/8); bitstream->clear(); for (i = ' '; i <= '}'; i++) { k = i - ' '; printf("%i\n",k); CONVERT_LARGE_CHAR for (y = 0; y < CHARHEIGHT; y++) { for (x = 0; x < CHARWIDTH; x++) { if (bitstream->read(i*CHARSIZE+y*CHARWIDTH+x)) printf("1"); else printf("0"); } printf("\n"); } } k++; i = 254; CONVERT_LARGE_CHAR k++; i = 253; CONVERT_LARGE_CHAR k++; i = 0xf1; CONVERT_LARGE_CHAR k++; i = 0xf2; CONVERT_LARGE_CHAR k++; i = 0xf3; CONVERT_LARGE_CHAR // replace space and put in horizontal line for (x = 0; x < CHARWIDTH; x++) { src[(CHARHEIGHT/2-1)*CHARWIDTH+x] = 0xFF; src[(CHARHEIGHT/2)*CHARWIDTH+x] = 0xFF; } k = 0; i = 0xc4; CONVERT_LARGE_CHAR XMFile f2(outfile, true); f2.write(dstFont, 1, sizeof(dstFont)); } int main() { convert("IDC-Harmonica.raw", "IDC-Harmonica.8X8"); //convert("IDC-Hoodlum.raw", "IDC-Hoodlum.8X8"); //convert("IDC-MicroKnight.raw", "IDC-MicroKnight.8X8"); //convert("REZ-ASCII.raw", "REZ-ASCII.8X8"); //convert("IDC-Harmonica12.raw", "IDC-Harmonica.12X12"); //convert("IDC-MicroKnight12.raw", "IDC-MicroKnight.12X12"); return 0; } MilkyTracker-1.02.00/src/tools/fontcompiler.cpp000066400000000000000000000304371324432207300214160ustar00rootroot00000000000000/* * tools/fontcompiler.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include #include #include #include #include #include "BasicTypes.h" #include "Font.h" #include "PPPathFactory.h" #include "XMFile.h" using namespace std; const pp_uint32 fontWidth = 8; const pp_uint32 fontHeight = 8; pp_uint8 defaultFont[256*8] = { 0,0,0,0,0,0,0,0, 126,129,165,129,189,153,129,126, 126,255,219,255,195,231,255,126, 108,254,254,254,124,56,16,0, 16,56,124,254,124,56,16,0, 56,124,56,254,254,146,16,124, 0,16,56,124,254,124,56,124, 0,0,24,60,60,24,0,0, 255,255,231,195,195,231,255,255, 0,60,102,66,66,102,60,0, 255,195,153,189,189,153,195,255, 15,7,15,125,204,204,204,120, 60,102,102,102,60,24,126,24, 63,51,63,48,48,112,240,224, 127,99,127,99,99,103,230,192, 153,90,60,231,231,60,90,153, 128,224,248,254,248,224,128,0, 2,14,62,254,62,14,2,0, 24,60,126,24,24,126,60,24, 102,102,102,102,102,0,102,0, 127,219,219,123,27,27,27,0, 62,99,56,108,108,56,134,252, 0,0,0,0,126,126,126,0, 24,60,126,24,126,60,24,255, 24,60,126,24,24,24,24,0, 24,24,24,24,126,60,24,0, 0,24,12,254,12,24,0,0, 0,48,96,254,96,48,0,0, 0,0,192,192,192,254,0,0, 0,36,102,255,102,36,0,0, 0,24,60,126,255,255,0,0, 0,255,255,126,60,24,0,0, 0,0,0,0,0,0,0,0, 48,48,48,48,48,0,48,0, 108,108,108,0,0,0,0,0, 108,108,254,108,254,108,108,0, 24,126,192,124,6,252,24,0, 0,102,204,24,48,102,204,0, 56,108,56,118,220,204,118,0, 12,12,12,0,0,0,0,0, 24,48,96,96,96,48,24,0, 96,48,24,24,24,48,96,0, 0,102,60,255,60,102,0,0, 0,24,24,126,24,24,0,0, 0,0,0,0,0,24,48,0, 0,0,0,126,0,0,0,0, 0,0,0,0,0,0,24,0, 0,6,12,24,48,96,0,0, 124,198,214,214,214,198,124,0, 112,48,48,48,48,52,124,0, 248,12,12,120,192,192,252,0, 248,12,12,120,12,12,248,0, 192,204,204,204,254,12,12,0, 252,192,192,248,12,12,248,0, 192,192,192,252,198,198,124,0, 252,12,12,24,48,48,48,0, 56,108,108,124,198,198,124,0, 124,198,198,126,6,6,6,0, 0,0,24,0,0,24,0,0, 0,0,24,0,0,24,48,0, 0,12,24,48,24,12,0,0, 0,0,126,0,126,0,0,0, 0,48,24,12,24,48,0,0, 60,102,6,12,24,0,24,0, 60,102,219,219,206,96,60,0, 60,102,198,198,254,198,198,0, 252,198,198,252,198,198,252,0, 62,96,192,192,192,96,62,0, 252,198,198,198,198,198,252,0, 254,192,192,254,192,192,254,0, 254,192,192,254,192,192,192,0, 62,96,192,206,198,198,124,0, 198,198,198,254,198,198,198,0, 24,24,24,24,24,24,24,0, 6,6,6,6,6,6,124,0, 198,204,216,240,216,204,198,0, 192,192,192,192,192,192,254,0, 252,214,214,214,214,214,214,0, 248,204,198,198,198,198,198,0, 60,102,198,198,198,198,124,0, 252,198,198,198,252,192,192,0, 60,102,198,198,198,218,108,6, 252,198,198,198,252,198,195,0, 62,96,192,124,6,6,252,0, 126,24,24,24,24,24,24,0, 198,198,198,198,198,198,124,0, 198,198,198,198,198,108,56,0, 214,214,214,214,214,214,252,0, 198,198,198,124,198,198,198,0, 204,204,204,120,48,48,48,0, 254,6,12,24,48,96,254,0, 120,96,96,96,96,96,120,0, 0,96,48,24,12,6,0,0, 120,24,24,24,24,24,120,0, 24,60,102,195,0,0,0,0, 0,0,0,0,0,0,0,255, 48,48,48,0,0,0,0,0, 0,0,124,6,126,198,126,0, 192,192,252,198,198,198,252,0, 0,0,126,192,192,192,126,0, 6,6,126,198,198,198,126,0, 0,0,124,198,254,192,126,0, 60,96,248,96,96,96,96,0, 0,0,124,198,198,126,6,252, 192,192,252,198,198,198,198,0, 24,0,120,24,24,24,24,0, 12,0,60,12,12,12,12,248, 192,192,198,204,248,204,198,0, 48,48,48,48,48,48,28,0, 0,0,252,214,214,214,214,0, 0,0,252,198,198,198,198,0, 0,0,124,198,198,198,124,0, 0,0,252,198,198,252,192,192, 0,0,126,198,198,126,6,6, 0,0,252,198,192,192,192,0, 0,0,124,192,120,12,248,0, 48,48,252,48,48,48,28,0, 0,0,198,198,198,198,124,0, 0,0,198,198,198,108,56,0, 0,0,214,214,214,214,252,0, 0,0,198,198,124,198,198,0, 0,0,198,198,198,126,6,252, 0,0,254,12,56,96,254,0, 7,12,12,56,12,12,7,0, 24,24,24,24,24,24,24,24, 224,48,48,28,48,48,224,0, 118,220,0,0,0,0,0,0, 0,16,56,108,198,198,254,0, 255,128,128,128,128,128,128,128, 255,0,0,0,0,0,0,0, 255,1,1,1,1,1,1,1, 128,128,128,128,128,128,128,128, 1,1,1,1,1,1,1,1, 128,128,128,128,128,128,128,255, 0,0,0,0,0,0,0,255, 1,1,1,1,1,1,1,255, 128,0,0,0,0,0,0,0, 1,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,128, 0,0,0,0,0,0,0,1, 128,192,224,240,248,252,254,255, 255,127,63,31,15,7,3,1, 255,255,192,192,192,192,192,192, 255,255,0,0,0,0,0,0, 255,255,3,3,3,3,3,3, 192,192,192,192,192,192,192,192, 3,3,3,3,3,3,3,3, 192,192,192,192,192,192,255,255, 0,0,0,0,0,0,255,255, 3,3,3,3,3,3,255,255, 192,192,0,0,0,0,0,0, 3,3,0,0,0,0,0,0, 0,0,0,0,0,0,192,192, 0,0,0,0,0,0,3,3, 0,0,0,85,0,0,0,0, 0,252,252,252,252,252,252,0, 0,126,126,126,126,126,126,0, 0,63,63,63,63,63,63,0, 0,31,31,31,31,31,31,0, 0,15,15,15,15,15,15,0, 0,7,7,7,7,7,7,0, 0,3,3,3,3,3,3,0, 0,1,1,1,1,1,1,0, 0,128,128,128,128,128,128,0, 0,192,192,192,192,192,192,0, 0,224,224,224,224,224,224,0, 0,240,240,240,240,240,240,0, 0,248,248,248,248,248,248,0, 126,126,126,126,126,126,126,126, 255,255,0,24,60,126,255,0, 255,255,0,0,0,0,24,24, 255,255,0,24,60,126,255,24, 255,255,0,66,102,90,66,66, 0,0,0,24,24,0,0,0, 0,192,192,192,192,192,192,192, 0,216,216,216,216,216,216,216, 0,219,219,219,219,219,219,219, 0,96,96,96,96,96,96,96, 0,108,108,108,108,108,108,108, 0,109,109,109,109,109,109,109, 0,128,128,128,128,128,128,128, 0,176,176,176,176,176,176,176, 0,182,182,182,182,182,182,182, 0,0,24,60,60,24,0,0, 0,0,248,24,248,24,24,24, 54,54,246,6,246,54,54,54, 54,54,54,54,54,54,54,54, 0,0,254,6,246,54,54,54, 54,54,246,6,254,0,0,0, 54,54,54,54,254,0,0,0, 24,24,248,24,248,0,0,0, 0,0,0,0,248,24,24,24, 24,24,24,24,31,0,0,0, 24,24,24,24,255,0,0,0, 0,0,0,0,255,24,24,24, 24,24,24,24,31,24,24,24, 0,0,0,0,255,0,0,0, 24,24,24,24,255,24,24,24, 24,24,31,24,31,24,24,24, 54,54,54,54,55,54,54,54, 54,54,55,48,63,0,0,0, 0,0,63,48,55,54,54,54, 54,54,247,0,255,0,0,0, 0,0,255,0,247,54,54,54, 54,54,55,48,55,54,54,54, 0,0,255,0,255,0,0,0, 54,54,247,0,247,54,54,54, 24,24,255,0,255,0,0,0, 54,54,54,54,255,0,0,0, 0,0,255,0,255,24,24,24, 0,0,0,0,255,54,54,54, 54,54,54,54,63,0,0,0, 24,24,31,24,31,0,0,0, 0,0,31,24,31,24,24,24, 0,0,0,0,63,54,54,54, 54,54,54,54,255,54,54,54, 24,24,255,24,255,24,24,24, 24,24,24,24,248,0,0,0, 0,0,0,0,31,24,24,24, 255,255,255,255,255,255,255,255, 0,0,0,0,255,255,255,255, 240,240,240,240,240,240,240,240, 15,15,15,15,15,15,15,15, 255,255,255,255,0,0,0,0, 0,0,118,220,200,220,118,0, 0,120,204,248,204,248,192,192, 0,252,204,192,192,192,192,0, 0,0,254,108,108,108,108,0, 252,204,96,48,96,204,252,0, 0,0,126,216,216,216,112,0, 0,102,102,102,102,124,96,192, 0,118,220,24,24,24,24,0, 252,48,120,204,204,120,48,252, 56,108,198,254,198,108,56,0, 56,108,198,198,108,108,238,0, 28,48,24,124,204,204,120,0, 0,0,126,219,219,126,0,0, 6,12,126,219,219,126,96,192, 56,96,192,248,192,96,56,0, 0,0,0,0,0,219,219,0, // 239 0,126,0,126,0,126,0,0, // 240 0x00,16+8+4+2+1,16,16,16,16,16+8+4+2+1,0x00, // 241 0x00,255,0,0,0,0,255,0x00, // 242 0x00,128+64+32+16+8,8,8,8,8,128+64+32+16+8,0x00, // 243 // Small DOT 0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00, // 244 // ramp 2 wave part 2 0x00,0x00,0x00,0x40,0x80,0x00,0x00,0x00, // 245 // ramp 2 wave part 1 0x04,0x0c,0x14,0x24,0x44,0x85,0x06,0x04, // 246 // ramp wave part 2 0x00,0x00,0x00,0x80,0x40,0x00,0x00,0x00, // 247 // ramp wave part 1 0x04,0x06,0x85,0x44,0x24,0x14,0x0c,0x04, // 248 // squarewave part 2 0x00,0x00,0x00,0x02,0x02,0x02,0x02,0xfe, // 249 // squarewave part 1 0xff,0x81,0x81,0x81,0x81,0x01,0x01,0x01, // 250 // sinewave part 2 0x00,0x00,0x00,0x04,0x04,0x88,0x88,0x70, // 251 // sinewave part 1 0x1c,0x22,0x22,0x41,0x41,0x00,0x00,0x00, // 252 // arrow down 0x00,0x00,0x7f,0x3e,0x1c,0x08,0x00,0x00, // 253 // arrow up 0x00,0x00,0x08,0x1c,0x3e,0x7f,0x00,0x00, // 254 // checkbox marker: 0x01,1+2+128,128+64+4+2,64+32+8+4,32+16+8,16}; // 255 // pseudo syntax checkin ?x? where ? can be any combination of numbers bool checkExtension(const char* ext, pp_uint32& width, pp_uint32& height) { pp_int32 i; // skip period ext++; bool noNumber = false; PPSystemString widthStr; for (i = 0; i < strlen(ext) && ext[i] != 'X'; i++) { widthStr.append(ext[i]); if (ext[i] < '0' || ext[i] > '9') noNumber = true; } if (ext[i] != 'X') return false; if (noNumber) return false; ext+=i+1; if (!strlen(ext)) return false; PPSystemString heightStr; for (i = 0; i < strlen(ext); i++) { heightStr.append(ext[i]); if (ext[i] < '0' || ext[i] > '9') noNumber = true; } if (noNumber) return false; width = atoi(widthStr); height = atoi(heightStr); return true; } int main(int argc, const char* argv[]) { bool writeRawImage = true; pp_int32 i = 0; // output fstream f("FontLibrary.cpp", ios::out); f << "struct FontEntry\n" "{\n const char* name;\n" " const unsigned int width, height;\n" " const unsigned char* data;\n" "};\n\n"; // Input PPPath* path = PPPathFactory::createPathFromString("../../resources/fonts/"); const PPPathEntry* entry = path->getFirstEntry(); f << "FontEntry fontEntries[] = {\n"; pp_uint32 numFonts = 0; while (entry) { if (!entry->isHidden() && entry->isFile()) { PPSystemString extension = entry->getName().getExtension(); extension.toUpper(); // Check for font file pp_uint32 width, height; if (checkExtension(extension, width, height)) { PPSystemString currentFile = path->getCurrent(); currentFile.append(entry->getName()); //cout << currentFile << endl; f << "// Font no. " << numFonts << endl; f << "FontEntry(" << '"' << entry->getName().stripExtension() << '"' << ", " << width << ", " << height << ", " << endl; XMFile input(currentFile); double dsize = ceil(width*height*256.0)/8.0f; pp_uint32 size = (pp_uint32)dsize; cout << "Size: " << size << endl; pp_uint8* data = new pp_uint8[size]; bool flip = false; if (width == 8 && height == 8) { cout << "Font is 8x8 => x-flipping + adding special characters" << endl; // char 239-256 are coming from out default font // those are special characters necessary for // displaying special pattern data // and symbols memcpy(data, defaultFont, 256*8); input.read(data, 8, 239); memcpy(data + 0xc4*8, defaultFont + 0xc4*8, 8); flip = true; } else { memset(data, 0, size); input.read(data, 1, size); } // fill in stream pp_uint32 j = 0; for (pp_int32 i = 0; i < size; i++) { if (j == 0) f << '"'; pp_uint32 src = data[i]; pp_uint8 dst = 0; if (flip) { dst = (src&1)<<7; dst |= ((src&2)>>1)<<6; dst |= ((src&4)>>2)<<5; dst |= ((src&8)>>3)<<4; dst |= ((src&16)>>4)<<3; dst |= ((src&32)>>5)<<2; dst |= ((src&64)>>6)<<1; dst |= ((src&128)>>7); } else dst = src; char hexStr[100]; sprintf(hexStr, "\\x%x", dst); if (i == size - 1) f << hexStr << '"' << endl; else f << hexStr; j++; if (j == 64 && i != size - 1) { f << '"' << endl; j = 0; } } if (writeRawImage) { PPSystemString file = currentFile.stripPath(); file.append(".raw"); cout << "Writing raw image: " << file << endl; char* rawImage = new char[256*width*height]; Bitstream bitstream(data, size); for (pp_int32 j = 0; j < width*height*256; j++) rawImage[j] = bitstream.read(j) ? 255 : 0; fstream bfstream(file,ios::out|ios::binary); bfstream.write(rawImage, 256*width*height); bfstream.close(); delete[] rawImage; } delete data; numFonts++; f << ")," << endl; } else { cout << "Unrecognized extension for " << entry->getName() << endl; } } entry = path->getNextEntry(); } f << "};" << endl << endl << "const unsigned int numFontsEntries = " << numFonts << ";" << endl; return 0; } MilkyTracker-1.02.00/src/tools/genlargefont.cpp000066400000000000000000000043001324432207300213560ustar00rootroot00000000000000/* * tools/genlargefont.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include #include #include #include #include #include #include "BasicTypes.h" #include "PPPath_POSIX.h" #include "XMFile.h" #include "Font.h" #define NUMCHARS 100 #define CHARWIDTH 12 #define CHARHEIGHT 12 #define CHARSIZE (CHARWIDTH*CHARHEIGHT) static pp_uint8 dstFont[CHARSIZE*256/8]; static pp_uint8 src[CHARSIZE*NUMCHARS]; #define CONVERT_LARGE_CHAR \ for (y = 0; y < CHARHEIGHT; y++) \ { \ for (x = 0; x < CHARWIDTH; x++) \ { \ if (src[k*CHARSIZE+y*CHARWIDTH+x]) \ { \ bitstream->write(i*CHARSIZE+y*CHARWIDTH+x, true); \ } \ } \ } int main() { pp_uint32 x,y,i,j,k; XMFile f("athena_ft2_style_12x12.raw"); f.read(src, CHARSIZE, NUMCHARS); Bitstream* bitstream = new Bitstream(dstFont, (CHARSIZE*256)/8); bitstream->clear(); for (i = ' '; i <= '}'; i++) { k = i - ' '; printf("%i\n",k); CONVERT_LARGE_CHAR for (y = 0; y < CHARHEIGHT; y++) { for (x = 0; x < CHARWIDTH; x++) { if (bitstream->read(i*CHARSIZE+y*CHARWIDTH+x)) printf("1"); else printf("0"); } printf("\n"); } } k++; i = 254; CONVERT_LARGE_CHAR k++; i = 253; CONVERT_LARGE_CHAR k++; i = 0xf1; CONVERT_LARGE_CHAR k++; i = 0xf2; CONVERT_LARGE_CHAR k++; i = 0xf3; CONVERT_LARGE_CHAR k++; i = 0xc4; CONVERT_LARGE_CHAR XMFile f2("ATHENA.12X12", true); f2.write(dstFont, 1, sizeof(dstFont)); return 0; } MilkyTracker-1.02.00/src/tools/gentinyfont.cpp000066400000000000000000000302651324432207300212600ustar00rootroot00000000000000/* * tools/gentinyfont.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include #include #include #include #include #include #include "BasicTypes.h" #include "PPPath_POSIX.h" #include "XMFile.h" #include "Font.h" static pp_uint8 tinyFont[5*6*256/8]; const pp_uint32 tinyCharacters[] = { // Capital letters from A 0x00100, 0x01010, 0x01010, 0x01110, 0x01010, 0x00000, 0x01100, 0x01010, 0x01100, 0x01010, 0x01100, 0x00000, 0x00110, 0x01000, 0x01000, 0x01000, 0x00110, 0x00000, 0x01100, 0x01010, 0x01010, 0x01010, 0x01100, 0x00000, 0x01110, 0x01000, 0x01110, 0x01000, 0x01110, 0x00000, 0x01110, 0x01000, 0x01100, 0x01000, 0x01000, 0x00000, 0x00110, 0x01000, 0x01110, 0x01010, 0x00110, 0x00000, 0x01010, 0x01010, 0x01110, 0x01010, 0x01010, 0x00000, 0x00100, 0x00100, 0x00100, 0x00100, 0x00100, 0x00000, 0x00100, 0x00100, 0x00100, 0x00100, 0x01100, 0x00000, 0x01010, 0x01010, 0x01100, 0x01010, 0x01010, 0x00000, 0x01000, 0x01000, 0x01000, 0x01000, 0x01110, 0x00000, 0x01001, 0x01111, 0x01001, 0x01001, 0x01001, 0x00000, 0x01001, 0x01101, 0x01101, 0x01011, 0x01001, 0x00000, 0x00100, 0x01010, 0x01010, 0x01010, 0x00100, 0x00000, 0x01100, 0x01010, 0x01110, 0x01000, 0x01000, 0x00000, 0x00100, 0x01010, 0x01010, 0x01010, 0x00111, 0x00000, 0x01100, 0x01010, 0x01100, 0x01010, 0x01010, 0x00000, 0x00110, 0x01000, 0x00100, 0x00010, 0x01100, 0x00000, 0x01110, 0x00100, 0x00100, 0x00100, 0x00100, 0x00000, 0x01010, 0x01010, 0x01010, 0x01010, 0x01110, 0x00000, 0x01010, 0x01010, 0x01010, 0x01010, 0x00100, 0x00000, 0x01001, 0x01001, 0x01001, 0x01111, 0x01001, 0x00000, 0x01010, 0x01010, 0x00100, 0x01010, 0x01010, 0x00000, 0x01010, 0x01010, 0x00100, 0x00100, 0x00100, 0x00000, 0x01110, 0x00010, 0x00100, 0x01000, 0x01110, 0x00000, // small letters = capital letters (lazy guy) 0x00000, // a 0x01110, 0x00011, 0x01101, 0x01111, 0x00000, 0x00000, // b 0x01000, 0x01100, 0x01010, 0x00100, 0x00000, 0x00000, // c 0x00110, 0x01000, 0x01000, 0x00110, 0x00000, 0x00001, // d 0x00001, 0x00111, 0x01001, 0x00111, 0x00000, 0x00000, // e 0x00110, 0x01001, 0x01110, 0x00111, 0x00000, 0x00000, // f 0x00011, 0x00100, 0x01110, 0x00100, 0x00000, 0x00000, // g 0x00111, 0x01101, 0x00011, 0x01100, 0x00000, 0x00000, // h 0x01000, 0x01110, 0x01010, 0x01010, 0x00000, 0x00000, // i 0x00100, 0x00000, 0x00100, 0x00100, 0x00000, 0x00000, // j 0x00100, 0x00000, 0x00100, 0x01100, 0x00000, 0x00000, // k 0x01000, 0x01010, 0x01100, 0x01010, 0x00000, 0x00000, // l 0x01000, 0x01000, 0x01000, 0x00110, 0x00000, 0x00000, // m 0x01001, 0x01111, 0x01001, 0x01001, 0x00000, 0x00000, // n 0x01011, 0x01101, 0x01001, 0x01001, 0x00000, 0x00000, // o 0x00100, 0x01010, 0x01010, 0x00100, 0x00000, 0x00000, 0x01100, // p 0x01010, 0x01100, 0x01000, 0x00000, 0x00000, // q 0x01110, 0x01010, 0x01110, 0x00010, 0x00000, 0x00000, // r 0x01010, 0x01101, 0x01000, 0x01000, 0x00000, 0x00000, // s 0x00110, 0x01000, 0x00110, 0x01100, 0x00000, 0x00000, // t 0x00100, 0x01110, 0x00100, 0x00110, 0x00000, 0x00000, // u 0x01010, 0x01010, 0x01010, 0x00110, 0x00000, 0x00000, // v 0x01010, 0x01010, 0x01010, 0x00100, 0x00000, 0x00000, // w 0x01001, 0x01001, 0x01111, 0x01001, 0x00000, 0x00000, // x 0x01010, 0x00100, 0x01010, 0x01010, 0x00000, 0x00000, // y 0x01010, 0x01010, 0x00100, 0x01100, 0x00000, 0x00000, // z 0x01110, 0x00010, 0x01100, 0x01110, 0x00000, // number from 0 0x00100, 0x01010, 0x01010, 0x01010, 0x00100, 0x00000, 0x00100, 0x01100, 0x00100, 0x00100, 0x00100, 0x00000, 0x01100, 0x00010, 0x01100, 0x01000, 0x01110, 0x00000, 0x01100, 0x00010, 0x01100, 0x00010, 0x01100, 0x00000, 0x01000, 0x01010, 0x01110, 0x00010, 0x00010, 0x00000, 0x01110, 0x01000, 0x01110, 0x00010, 0x01100, 0x00000, 0x00110, 0x01000, 0x01110, 0x01010, 0x01100, 0x00000, 0x01110, 0x00010, 0x00100, 0x00100, 0x00100, 0x00000, 0x00100, 0x01010, 0x00100, 0x01010, 0x00100, 0x00000, 0x00100, 0x01010, 0x00110, 0x00010, 0x01100, 0x00000, 0x00000, // "-" 0x00000, 0x01111, 0x00000, 0x00000, 0x00000, 0x00000, // "+" 0x00100, 0x01110, 0x00100, 0x00000, 0x00000, 0x00000, // "=" 0x01111, 0x00000, 0x01111, 0x00000, 0x00000, 0x00000, // "^" 0x00100, 0x01010, 0x00000, 0x00000, 0x00000, 0x01010, // "#" 0x01111, 0x01010, 0x01111, 0x01010, 0x00000, 0x01000, // ">" 0x00100, 0x00010, 0x00100, 0x01000, 0x00000, 0x00010, // "<" 0x00100, 0x01000, 0x00100, 0x00010, 0x00000, 0x00000, // \xfa 0x00000, 0x00100, 0x00000, 0x00000, 0x00000, 0x00000, // \xfd 0x00100, 0x00100, 0x01110, 0x00100, 0x00000, 0x00000, // \xfe 0x00100, 0x01110, 0x00100, 0x00100, 0x00000, 0x00000, // 239 0x00000, 0x00000, 0x10101, 0x10101, 0x00000, 0x00000, // 240 0x00000, 0x00110, 0x01111, 0x00110, 0x00000, 0x00000, // 241 0x01111, 0x01000, 0x01000, 0x01111, 0x00000, 0x00000, // 242 0x11111, 0x00000, 0x00000, 0x11111, 0x00000, 0x00000, // 243 0x11111, 0x00001, 0x00001, 0x11111, 0x00000, 0x00000, // '.' 0x00000, 0x00000, 0x00000, 0x01100, 0x00000, 0x00001, // '/' 0x00010, 0x00100, 0x01000, 0x10000, 0x00000, 0x10001, // '%' 0x10010, 0x00100, 0x01001, 0x10001, 0x00000, 0x00000, // ':' 0x01100, 0x00000, 0x01100, 0x00000, 0x00000 }; #define CONVERT_TINY_CHAR \ for (y = 0; y < 6; y++) \ { \ for (x = 0; x < 5; x++) \ { \ if ((tinyCharacters[k]>>((4-x)<<2))&1) \ { \ bitstream->write(i*(5*6)+y*5+x, true); \ } \ } \ k++; \ } void genTinyFont() { pp_uint32 x,y,i,j,k; Bitstream* bitstream = new Bitstream(tinyFont, (6*5*256)/8); bitstream->clear(); k = 0; for (i = 'A'; i <= 'Z'; i++) { CONVERT_TINY_CHAR; } for (i = 'a'; i <= 'z'; i++) { CONVERT_TINY_CHAR; } for (i = '0'; i <= '9'; i++) { CONVERT_TINY_CHAR; } i = '-'; CONVERT_TINY_CHAR; i = '+'; CONVERT_TINY_CHAR; i = '='; CONVERT_TINY_CHAR; i = '^'; CONVERT_TINY_CHAR; i = '#'; CONVERT_TINY_CHAR; i = '>'; CONVERT_TINY_CHAR; i = '<'; CONVERT_TINY_CHAR; i = 0xf4; CONVERT_TINY_CHAR; i = 0xfd; CONVERT_TINY_CHAR; i = 0xfe; CONVERT_TINY_CHAR; i = 239; CONVERT_TINY_CHAR; i = 240; CONVERT_TINY_CHAR; i = 241; CONVERT_TINY_CHAR; i = 242; CONVERT_TINY_CHAR; i = 243; CONVERT_TINY_CHAR; i = '.'; CONVERT_TINY_CHAR; i = '/'; CONVERT_TINY_CHAR; i = '%'; CONVERT_TINY_CHAR; i = ':'; CONVERT_TINY_CHAR; delete bitstream; XMFile f("TINY.6x5", true); f.write(tinyFont, 1, sizeof(tinyFont)); } void genTinyFontUpperCase() { pp_uint32 x,y,i,j,k; Bitstream* bitstream = new Bitstream(tinyFont, (6*5*256)/8); bitstream->clear(); k = 0; for (i = 'A'; i <= 'Z'; i++) { CONVERT_TINY_CHAR; } pp_uint32 l = k; k = 0; for (i = 'a'; i <= 'z'; i++) { CONVERT_TINY_CHAR; } k+=l; for (i = '0'; i <= '9'; i++) { CONVERT_TINY_CHAR; } i = '-'; CONVERT_TINY_CHAR; i = '+'; CONVERT_TINY_CHAR; i = '='; CONVERT_TINY_CHAR; i = '^'; CONVERT_TINY_CHAR; i = '#'; CONVERT_TINY_CHAR; i = '>'; CONVERT_TINY_CHAR; i = '<'; CONVERT_TINY_CHAR; i = 0xf4; CONVERT_TINY_CHAR; i = 0xfd; CONVERT_TINY_CHAR; i = 0xfe; CONVERT_TINY_CHAR; i = 239; CONVERT_TINY_CHAR; i = 240; CONVERT_TINY_CHAR; i = 241; CONVERT_TINY_CHAR; i = 242; CONVERT_TINY_CHAR; i = 243; CONVERT_TINY_CHAR; i = '.'; CONVERT_TINY_CHAR; i = '/'; CONVERT_TINY_CHAR; i = '%'; CONVERT_TINY_CHAR; i = ':'; CONVERT_TINY_CHAR; delete bitstream; XMFile f("TINY_UPPERCASE.6x5", true); f.write(tinyFont, 1, sizeof(tinyFont)); } int main() { genTinyFont(); genTinyFontUpperCase(); return 0; } MilkyTracker-1.02.00/src/tools/test.cpp000066400000000000000000000042731324432207300176730ustar00rootroot00000000000000/* * tools/test.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include #include #include using namespace std; const int breakl = 16; const int seekpos = 0; const char* hextab = "0123456789abcdef"; void btoh(unsigned char i, char* input) { input[0] = hextab[i>>4]; input[1] = hextab[i&0xf]; input[2] = '\0'; } int main(int argc, const char* argv[]) { if (argc != 3) { cerr << "Forgot your parameters?"; exit(-1); } FILE* infile = fopen(argv[1],"rb"); if (!infile) { cerr << "Could not open " << argv[1] << endl; exit(0); } fseek(infile, seekpos, 0); FILE* outfile = fopen(argv[2],"wb"); if (!outfile) { cerr << "Could not create " << argv[2] << endl; exit(0); } int bytesread = 0; int colcnt = 0; do { unsigned char buffer[3*10]; bytesread = fread(buffer, 1, sizeof(buffer), infile); /*for (int j = 0; j < bytesread/3; j++) { unsigned char v1 = buffer[j*3+2]; unsigned char v2 = buffer[j*3+1]; unsigned char v3 = buffer[j*3+0]; buffer[j*3+0] = v1; buffer[j*3+1] = v2; buffer[j*3+2] = v3; }*/ for (int i = 0; i < bytesread; i++) { char outbuffer[100]; outbuffer[0] = '0'; outbuffer[1] = 'x'; btoh(buffer[i], outbuffer+2); outbuffer[4] = ','; outbuffer[5] = '\0'; if (colcnt == breakl) { strcat(outbuffer, "\n"); colcnt = 0; } fwrite(outbuffer, 1, strlen(outbuffer), outfile); colcnt++; } } while (bytesread != 0); fclose(outfile); fclose(infile); return 0; } MilkyTracker-1.02.00/src/tracker/000077500000000000000000000000001324432207300164755ustar00rootroot00000000000000MilkyTracker-1.02.00/src/tracker/AnimatedFXControl.cpp000066400000000000000000000167721324432207300225370ustar00rootroot00000000000000/* * tracker/AnimatedFXControl.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * PeakLevelControl.cpp * MilkyTracker * * Created by Peter Barth on 28.10.05. * */ #include "AnimatedFXControl.h" #include "Screen.h" #include "GraphicsAbstract.h" #include "Font.h" #include "ScrollBar.h" #include "TrackerConfig.h" #include "LogoSmall.h" #include "Tools.h" #include "version.h" #undef FXTOGGLE #ifdef __LOWRES__ #define __SIMPLEFX__ #endif #ifdef __SIMPLEFX__ #include "Starfield.h" #undef FXTOGGLE #else #include "TwisterFX.h" #include "Fire.h" #endif static const char* text = "Welcome to MilkyTracker! The open-source, cross-platform FastTracker II " "compatible music tracker." " " "Now heads-up for some credits! " "MilkyTracker contains code from the following people: " "Peter 'pailes' Barth (original author), " "Antti S. Lankila (Amiga filter algorithm/coefficients), " "Andrew Simper (noise code), " "David Ross (EQ code), " "Heikki Orsila/Stuart Caie/Claudio Matsuoka (PowerPacker decrunching), " "Julian 'jua' Harnath (Haiku port), " "Varthall (Amiga port), " "Christopher 'Deltafire' O'Neill (current maintainer), " "Dale 'd0pefish' Whinham (Cocoa and SDL2 ports, current maintainer), " "Henri Isojarvi (GUS fixes, GUI improvements), Corvus Corax (sample editor code), David Seifert." " " "MilkyTracker also makes use of some common 3rd party libraries: " "RtMidi/RtAudio, " "zlib & zziplib (ZIP/GZIP extraction), " "lhasa (LHA extraction)" " " "The following people manipulated pixels: " "kenet, raina, IDC" " " "ASCII art was provided by H2o" " " "As special shout-out to everyone who has contributed to MilkyTracker by " "dropping emails, writing bug reports, drawing fonts, producing tutorials " "(both text and video) and producing music! A *HUGE* shout-out goes to " "pailes for creating one of the most popular trackers ever created! " "Now enjoy your stay, and happy tracking! " "---- wrapping ---- wrapping ---- wrapping ---- ..... "; pp_int32 AnimatedFXControl::counter = 0; void AnimatedFXControl::createFX() { if (fx) { delete fx; fx = NULL; } if (!vscreen) vscreen = new pp_uint8[visibleWidth*visibleHeight*3]; #ifdef __SIMPLEFX__ fx = new Starfield(visibleWidth, visibleHeight); #else #ifdef FXTOGGLE if (++counter & 1) fx = new Fire(visibleWidth, visibleHeight); else fx = new TwisterFX(visibleWidth, visibleHeight); #else fx = new TwisterFX(visibleWidth, visibleHeight); #endif #endif } AnimatedFXControl::AnimatedFXControl(pp_int32 id, PPScreen* parentScreen, EventListenerInterface* eventListener, const PPPoint& location, const PPSize& size, bool border/*= true*/) : PPControl(id, parentScreen, eventListener, location, size), borderColor(&ourOwnBorderColor), fx(NULL), vscreen(NULL) { this->border = border; // default color color.set(0, 0, 0); ourOwnBorderColor.set(192, 192, 192); visibleWidth = size.width - 2; visibleHeight = size.height - 2; #ifndef __SIMPLEFX__ createFX(); #endif xPos = visibleWidth << 8; font = PPFont::getFont(PPFont::FONT_SYSTEM); textBufferMaxChars = visibleWidth*2 / font->getCharWidth(); textBuffer = new char[textBufferMaxChars + 1]; currentCharIndex = 0; pp_int32 j = currentCharIndex % strlen(text); for (pp_int32 i = 0; i < (signed)textBufferMaxChars; i++) { if (j >= (signed)strlen(text)) j = 0; textBuffer[i] = text[j]; j++; } lastTime = 0; milkyVersionString[0] = 'v'; PPTools::convertToHex(milkyVersionString+1, (MILKYTRACKER_VERSION>>16)&0xF, 1); milkyVersionString[2] = '.'; PPTools::convertToHex(milkyVersionString+3, (MILKYTRACKER_VERSION>>8)&0xFF, 2); milkyVersionString[5] = '.'; PPTools::convertToHex(milkyVersionString+6, MILKYTRACKER_VERSION&0xFF, 2); milkyVersionString[8] = '\0'; } AnimatedFXControl::~AnimatedFXControl() { delete[] textBuffer; delete fx; delete[] vscreen; } void AnimatedFXControl::paint(PPGraphicsAbstract* g) { if (!isVisible() || !vscreen) return; g->setFont(font); pp_int32 xOffset = 2; pp_int32 yOffset = 2; g->setRect(location.x, location.y, location.x + size.width+1, location.y + size.height+1); if (border) { drawThickBorder(g, *borderColor); } g->setRect(location.x + 1, location.y + 1, location.x + size.width - 2, location.y + size.height - 2); fx->render(vscreen); pp_uint8* vptr = vscreen; const pp_uint8* iptr = LogoSmall::rawData; PPPoint p = location; p.x+=xOffset; p.y+=yOffset; PPSize s; s.width = visibleWidth-2; s.height = visibleHeight-2; for (pp_int32 i = 0; i < visibleHeight-2; i++) for (pp_int32 j = 0; j < visibleWidth-2; j++) { pp_int32 a = *(iptr+3); if (a == 255) { *vptr = *(iptr+2); *(vptr+1) = *(iptr+1); *(vptr+2) = *iptr; } else if (a) { *vptr = (a*(*(iptr+2))+(255-a)*(*vptr))>>8; *(vptr+1) = (a*(*(iptr+1))+(255-a)*(*(vptr+1)))>>8; *(vptr+2) = (a*(*iptr)+(255-a)*(*(vptr+2)))>>8; } vptr+=3; iptr+=4; } g->blit(vscreen, p, s, visibleWidth*3, 3); g->setRect(location.x+2, location.y+2, location.x + size.width-2, location.y + size.height-2); // Printf version string g->setColor(0, 0, 0); g->drawString(milkyVersionString, location.x + 4 + 1, location.y + 4 + 1); g->setColor(255, 255, 255); g->drawString(milkyVersionString, location.x + 4, location.y + 4); g->setColor(0, 0, 0); g->drawString(textBuffer, location.x + (xPos>>8) + 1, location.y + visibleHeight - 10 + 1); g->setColor(255, 255, 255); g->drawString(textBuffer, location.x + (xPos>>8), location.y + visibleHeight - 10); pp_uint32 currentTime = ::PPGetTickCount(); pp_uint32 dTime; if (lastTime) dTime = currentTime - lastTime; else dTime = 40; xPos-=dTime*8; if (xPos < -(signed)(font->getCharWidth()<<8)) { while (xPos < -(signed)(font->getCharWidth()<<8)) { xPos+=font->getCharWidth()<<8; currentCharIndex++; } pp_int32 j = currentCharIndex % strlen(text); for (pp_int32 i = 0; i < (signed)textBufferMaxChars; i++) { if (j >= (signed)strlen(text)) j = 0; textBuffer[i] = text[j]; j++; } } fx->update(dTime<<11); lastTime = currentTime; } pp_int32 AnimatedFXControl::dispatchEvent(PPEvent* event) { if (eventListener == NULL) return -1; //if (!visible) // return 0; switch (event->getID()) { case eTimer: if (!(fxTicker & 1)) parentScreen->paintControl(this); fxTicker++; break; case eLMouseUp: case eRMouseUp: { PPEvent e(eCommand); eventListener->handleEvent(reinterpret_cast(this), &e); break; } default: break; } return 0; } void AnimatedFXControl::show(bool bShow) { PPControl::show(bShow); if (!bShow) { #if defined(FXTOGGLE) || defined(__LOWRES__) delete fx; fx = NULL; delete[] vscreen; vscreen = NULL; #endif lastTime = 0; } else { #if defined(FXTOGGLE) || defined(__LOWRES__) createFX(); #endif } } MilkyTracker-1.02.00/src/tracker/AnimatedFXControl.h000066400000000000000000000042141324432207300221700ustar00rootroot00000000000000/* * tracker/AnimatedFXControl.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * AnimatedFXControl.h * MilkyTracker * * Created by Peter Barth on 28.10.05. * */ #ifndef ANIMATEDFXCONTROL__H #define ANIMATEDFXCONTROL__H #include "BasicTypes.h" #include "Control.h" #include "Event.h" class AnimatedFXControl : public PPControl { private: static pp_int32 counter; PPColor color; bool border; PPColor ourOwnBorderColor; const PPColor* borderColor; // extent pp_int32 visibleWidth; pp_int32 visibleHeight; class FXAbstract* fx; pp_uint8* vscreen; pp_int32 fxTicker; class PPFont* font; pp_int32 xPos, currentSpeed; pp_int32 currentCharIndex; pp_uint32 textBufferMaxChars; pp_uint32 lastTime; char* textBuffer; char milkyVersionString[100]; void createFX(); public: AnimatedFXControl(pp_int32 id, PPScreen* parentScreen, EventListenerInterface* eventListener, const PPPoint& location, const PPSize& size, bool border = true); virtual ~AnimatedFXControl(); void setColor(pp_int32 r,pp_int32 g,pp_int32 b) { color.r = r; color.g = g; color.b = b; } void setColor(PPColor color) { this->color = color; } void setBorderColor(const PPColor& color) { this->borderColor = &color; } // from PPControl virtual void paint(PPGraphicsAbstract* graphics); virtual pp_int32 dispatchEvent(PPEvent* event); virtual bool receiveTimerEvent() const { return true; } virtual void show(bool bShow); }; #endif MilkyTracker-1.02.00/src/tracker/CMakeLists.txt000066400000000000000000000255131324432207300212430ustar00rootroot00000000000000# # src/tracker/CMakeLists.txt # # Copyright 2016 Dale Whinham # # This file is part of MilkyTracker. # # MilkyTracker 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. # # MilkyTracker 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 MilkyTracker. If not, see . # set( SOURCES AnimatedFXControl.cpp ColorExportImport.cpp ColorPaletteContainer.cpp DialogChannelSelector.cpp DialogEQ.cpp DialogGroupSelection.cpp DialogHandlers.cpp DialogListBox.cpp DialogPanning.cpp DialogQuickChooseInstrument.cpp DialogResample.cpp DialogWithValues.cpp DialogZap.cpp EQConstants.cpp EditorBase.cpp EnvelopeContainer.cpp EnvelopeEditor.cpp EnvelopeEditorControl.cpp Equalizer.cpp FileExtProvider.cpp FileIdentificator.cpp GlobalColorConfig.cpp InputControlListener.cpp LogoBig.cpp LogoSmall.cpp ModuleEditor.cpp ModuleServices.cpp PatternEditor.cpp PatternEditorClipBoard.cpp PatternEditorControl.cpp PatternEditorControlEventListener.cpp PatternEditorControlKeyboard.cpp PatternEditorControlTransposeHandler.cpp PatternEditorTools.cpp PatternTools.cpp PeakLevelControl.cpp Piano.cpp PianoControl.cpp PlayerController.cpp PlayerLogic.cpp PlayerMaster.cpp RecPosProvider.cpp RecorderLogic.cpp ResamplerHelper.cpp SampleEditor.cpp SampleEditorControl.cpp SampleEditorControlToolHandler.cpp SampleEditorResampler.cpp SamplePlayer.cpp ScopesControl.cpp SectionAbout.cpp SectionAbstract.cpp SectionAdvancedEdit.cpp SectionDiskMenu.cpp SectionHDRecorder.cpp SectionInstruments.cpp SectionOptimize.cpp SectionQuickOptions.cpp SectionSamples.cpp SectionSettings.cpp SectionSwitcher.cpp SectionTranspose.cpp SectionUpperLeft.cpp SongLengthEstimator.cpp SystemMessage.cpp TabHeaderControl.cpp TabManager.cpp TabTitleProvider.cpp TitlePageManager.cpp ToolInvokeHelper.cpp Tracker.cpp TrackerConfig.cpp TrackerInit.cpp TrackerKeyboard.cpp TrackerSettings.cpp TrackerSettingsDatabase.cpp TrackerShortCuts.cpp TrackerShutDown.cpp TrackerStartUp.cpp TrackerUpdate.cpp Undo.cpp VRand.cpp Zapper.cpp ) set( HEADERS ${PROJECT_BINARY_DIR}/src/tracker/version.h AnimatedFXControl.h ColorExportImport.h ColorPaletteContainer.h ControlIDs.h DialogChannelSelector.h DialogEQ.h DialogGroupSelection.h DialogHandlers.h DialogListBox.h DialogPanning.h DialogQuickChooseInstrument.h DialogResample.h DialogWithValues.h DialogZap.h EQConstants.h EditModes.h EditorBase.h EnvelopeContainer.h EnvelopeEditor.h EnvelopeEditorControl.h Equalizer.h FileExtProvider.h FileIdentificator.h FileTypes.h FilterParameters.h GlobalColorConfig.h InputControlListener.h LogoBig.h LogoSmall.h ModuleEditor.h ModuleServices.h PatternEditor.h PatternEditorControl.h PatternEditorTools.h PatternTools.h PeakLevelControl.h Piano.h PianoControl.h PlayerController.h PlayerCriticalSection.h PlayerLogic.h PlayerMaster.h RecPosProvider.h RecorderLogic.h ResamplerHelper.h SIPButtons.h SampleEditor.h SampleEditorControl.h SampleEditorControlLastValues.h SampleEditorResampler.h SamplePlayer.h ScopesControl.h SectionAbout.h SectionAbstract.h SectionAdvancedEdit.h SectionDiskMenu.h SectionHDRecorder.h SectionInstruments.h SectionOptimize.h SectionQuickOptions.h SectionSamples.h SectionSettings.h SectionSwitcher.h SectionTranspose.h SectionUpperLeft.h SongLengthEstimator.h SystemMessage.h TabHeaderControl.h TabManager.h TabTitleProvider.h TitlePageManager.h ToolInvokeHelper.h Tracker.h TrackerConfig.h TrackerSettingsDatabase.h Undo.h VRand.h Zapper.h ) include_directories( # Include the CMake-generated version header from the build directory ${PROJECT_BINARY_DIR}/src/tracker ${PROJECT_SOURCE_DIR}/src/compression ${PROJECT_SOURCE_DIR}/src/fx ${PROJECT_SOURCE_DIR}/src/milkyplay ${PROJECT_SOURCE_DIR}/src/ppui ${PROJECT_SOURCE_DIR}/src/ppui/osinterface ${PROJECT_SOURCE_DIR}/src/ppui/sdl ${PROJECT_SOURCE_DIR}/src/tracker ) # Add the compression library. # The compression library is special in that each decompressor has a constructor # which statically self-registers the decompressor into a global decompressors # list. Because they are not each individually referenced in code, the linker # will discard them if they are archived into a static library. We could work # around it with compiler-specific flags such as GCC's --whole-archive or # Clang's --force_load, but instead we use this special CMake feature which lets # us easily pull in the individual objects without having to manually list them. list(APPEND SOURCES $) # Add platform-specific sources and include paths if(APPLE) # If generating for Xcode, pass in the Interface Builder source as a # resource and Xcode will take care of compiling it properly if(${CMAKE_GENERATOR} STREQUAL "Xcode") set_source_files_properties( cocoa/resources/Application.xib PROPERTIES MACOSX_PACKAGE_LOCATION Resources ) endif() # Application and document icons file( GLOB ICONS ${PROJECT_SOURCE_DIR}/resources/pictures/docicons/osx/*.icns ) list(APPEND ICONS ${PROJECT_SOURCE_DIR}/resources/pictures/carton.icns) # Ensure icons are copied to the correct bundle location set_source_files_properties( ${ICONS} PROPERTIES MACOSX_PACKAGE_LOCATION Resources ) list( APPEND SOURCES ${ICONS} cocoa/AppDelegate.mm cocoa/MTKeyTranslator.mm cocoa/MTTrackerView.mm cocoa/main.mm cocoa/resources/Application.xib ) list( APPEND HEADERS cocoa/AppDelegate.h cocoa/MTKeyTranslator.h cocoa/MTTrackerView.h ) include_directories( ${PROJECT_SOURCE_DIR}/src/midi/osx ${PROJECT_SOURCE_DIR}/src/ppui/cocoa ${PROJECT_SOURCE_DIR}/src/ppui/osinterface/posix ${PROJECT_SOURCE_DIR}/src/tracker/cocoa ) elseif(WIN32) list( APPEND SOURCES win32/PreferencesDialog.cpp win32/ThreadTimer.cpp win32/Win32_main.cpp win32/Win32_resources.rc ) list( APPEND HEADERS win32/PreferencesDialog.h win32/ThreadTimer.h win32/Win32_resource.h ) include_directories( ${PROJECT_SOURCE_DIR}/src/midi/win32 ${PROJECT_SOURCE_DIR}/src/ppui/osinterface/win32 ${PROJECT_SOURCE_DIR}/src/ppui/win32 ) else() list( APPEND SOURCES sdl/SDL_KeyTranslation.cpp sdl/SDL_Main.cpp ) list( APPEND HEADERS sdl/SDL_KeyTranslation.h ) include_directories( ${SDL2_INCLUDE_DIRS} ${PROJECT_SOURCE_DIR}/src/ppui/osinterface/posix ) endif() add_definitions(-DMILKYTRACKER) # Set target names for the executables if(APPLE OR WIN32) # OS X and Windows get a mixed-case binary name set(TARGET_NAME ${PROJECT_NAME}) else() # Linux/other UNIX get a lower-case binary name set(TARGET_NAME ${PROJECT_NAME_LOWER}) endif() if(APPLE) add_executable(${TARGET_NAME} MACOSX_BUNDLE ${SOURCES} ${HEADERS}) # Xcode can deal with Interface Builder xibs automatically - if we are not # generating for Xcode, then we must manually compile and install any xibs if(NOT CMAKE_GENERATOR STREQUAL "Xcode") # Locate ibtool find_program(IBTOOL ibtool HINTS /usr/bin ${OSX_DEVELOPER_ROOT}/usr/bin) if(IBTOOL STREQUAL "IBTOOL-NOTFOUND") message(SEND_ERROR "Unable to find ibtool. Is Xcode installed?") endif() # The Interface Builder xib file to be compiled set( XIB_FILE ${PROJECT_SOURCE_DIR}/src/tracker/cocoa/resources/Application.xib ) # Destination for compiled xib set(RESOURCES_DIR $/../Resources) # Ensure the destination directory of the compiled xib exists add_custom_command( TARGET ${TARGET_NAME} PRE_BUILD COMMAND mkdir -p ${RESOURCES_DIR} ) # Compile the xib file add_custom_command( TARGET ${TARGET_NAME} POST_BUILD COMMAND ${IBTOOL} --errors --warnings --notices --output-format human-readable-text --minimum-deployment-target 10.7 --compile ${RESOURCES_DIR}/${MACOSX_BUNDLE_NSMAIN_NIB_FILE}.nib ${XIB_FILE} COMMENT "Compiling ${XIB_FILE}" ) endif() # Pass in the Info.plist template, whose variables are defined in the # top-level CMakeLists.txt set_target_properties( ${TARGET_NAME} PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${PROJECT_SOURCE_DIR}/src/tracker/cocoa/resources/Info.plist.in ) # Enable ARC (automatic reference counting) for OS X build set_property( TARGET ${TARGET_NAME} APPEND_STRING PROPERTY COMPILE_FLAGS "-fobjc-arc" ) target_link_libraries( ${TARGET_NAME} midi ${CORE_VIDEO_LIBRARY} ${OPENGL_LIBRARY} ) elseif(WIN32) add_executable(${TARGET_NAME} WIN32 ${SOURCES} ${HEADERS}) target_link_libraries(${TARGET_NAME} midi) else() add_executable(${TARGET_NAME} ${SOURCES} ${HEADERS}) target_link_libraries(${TARGET_NAME} ${SDL2_LIBRARIES}) if(ALSA_FOUND AND RTMIDI_FOUND) add_definitions(-DHAVE_LIBASOUND) target_link_libraries(${TARGET_NAME} midi ${RTMIDI_LIBRARIES}) endif() endif() if(ZLIB_FOUND) target_link_libraries(${TARGET_NAME} ${ZLIB_LIBRARIES}) endif() if(UNIX) if(ZZIPLIB_FOUND) target_link_libraries(${TARGET_NAME} ${ZZIPLIB_LIBRARIES}) endif() if(LHASA_FOUND) target_link_libraries(${TARGET_NAME} ${LHASA_LIBRARIES}) endif() endif() target_link_libraries( ${TARGET_NAME} fx milkyplay osinterface ppui ) # OS X and Windows install to the root of the prefix, the others install to bin if(APPLE OR WIN32) set(INSTALL_DEST .) else() set(INSTALL_DEST ${CMAKE_INSTALL_BINDIR}) endif() install(TARGETS ${TARGET_NAME} DESTINATION ${INSTALL_DEST}) MilkyTracker-1.02.00/src/tracker/ColorExportImport.cpp000066400000000000000000000033661324432207300226640ustar00rootroot00000000000000/* * tracker/ColorExportImport.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * ColorExportImport.cpp * MilkyTracker * * Created by Peter Barth on Sun Mar 13 2005. * */ #include "ColorExportImport.h" #include "TrackerSettingsDatabase.h" #include "XMFile.h" bool ColorExportImport::importColorPalette(TColorPalette& palette) { TrackerSettingsDatabase colorDataBase(1); XMFile f(fileName); if (!f.isOpen()) { // deal with error return false; } if (!colorDataBase.serialize(f)) return false; PPDictionaryKey* key = colorDataBase.restore("ACTIVECOLORS"); if (key) { palette = ColorPaletteContainer::decodePalette(key->getStringValue()); } return key != NULL; } bool ColorExportImport::exportColorPalette(const TColorPalette& palette) { TrackerSettingsDatabase colorDataBase(1); colorDataBase.store("ACTIVECOLORS", ColorPaletteContainer::encodePalette(palette)); XMFile f(fileName, true); if (!f.isOpenForWriting()) { // deal with error return false; } if (!colorDataBase.serialize(f)) return false; return true; } MilkyTracker-1.02.00/src/tracker/ColorExportImport.h000066400000000000000000000023741324432207300223270ustar00rootroot00000000000000/* * tracker/ColorExportImport.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * ColorExportImport.h * MilkyTracker * * Created by Peter Barth on Sun Mar 13 2005. * */ #ifndef __COLOREXPORTIMPORT_H__ #define __COLOREXPORTIMPORT_H__ #include "BasicTypes.h" #include "ColorPaletteContainer.h" class ColorExportImport { private: PPSystemString fileName; public: ColorExportImport(const PPSystemString& fileName) : fileName(fileName) { } bool importColorPalette(TColorPalette& palette); bool exportColorPalette(const TColorPalette& palette); }; #endif MilkyTracker-1.02.00/src/tracker/ColorPaletteContainer.cpp000066400000000000000000000054161324432207300234470ustar00rootroot00000000000000/* * tracker/ColorPaletteContainer.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * ColorPaletteContainer.cpp * MilkyTracker * * Created by Peter Barth on 21.11.05. * */ #include "ColorPaletteContainer.h" #include "PatternTools.h" ColorPaletteContainer::ColorPaletteContainer(pp_int32 num) : palettes(NULL) { palettes = new TColorPalette[num]; memset(palettes, 0, num*sizeof(TColorPalette)); numPalettes = num; } ColorPaletteContainer::~ColorPaletteContainer() { delete[] palettes; } void ColorPaletteContainer::store(pp_int32 index, const TColorPalette& palette) { if (index < 0 || index > numPalettes - 1) return; palettes[index] = palette; } const TColorPalette* ColorPaletteContainer::restore(pp_int32 index) { if (index < 0 || index > numPalettes - 1) return NULL; return palettes + index; } PPString ColorPaletteContainer::encodePalette(const TColorPalette& palette) { char buffer[10]; // Convert number of colors PatternTools::convertToHex(buffer, palette.numColors, 2); PPString str = buffer; for (pp_int32 i = 0; i < palette.numColors; i++) { // R PatternTools::convertToHex(buffer, palette.colors[i].r, 2); str.append(buffer); // G PatternTools::convertToHex(buffer, palette.colors[i].g, 2); str.append(buffer); // B PatternTools::convertToHex(buffer, palette.colors[i].b, 2); str.append(buffer); } return str; } static pp_uint8 getNibble(const char* str) { if (*str >= '0' && *str <= '9') return (*str - '0'); if (*str >= 'A' && *str <= 'F') return (*str - 'A' + 10); if (*str >= 'a' && *str <= 'f') return (*str - 'a' + 10); return 0; } static pp_uint8 getByte(const char* str) { return (getNibble(str)<<4) + getNibble(str+1); } TColorPalette ColorPaletteContainer::decodePalette(const PPString& str) { TColorPalette palette; const char* ptr = str; palette.numColors = getByte(ptr); ptr+=2; for (pp_int32 i = 0; i < palette.numColors; i++) { palette.colors[i].r = getByte(ptr); ptr+=2; palette.colors[i].g = getByte(ptr); ptr+=2; palette.colors[i].b = getByte(ptr); ptr+=2; } return palette; } MilkyTracker-1.02.00/src/tracker/ColorPaletteContainer.h000066400000000000000000000027621324432207300231150ustar00rootroot00000000000000/* * tracker/ColorPaletteContainer.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * ColorPaletteContainer.h * MilkyTracker * * Created by Peter Barth on 21.11.05. * */ #ifndef COLORPALETTECONTAINER__H #define COLORPALETTECONTAINER__H #include "BasicTypes.h" // Verx simple color palette, limited colors struct TColorPalette { // Should be more than enough pp_uint8 numColors; PPColor colors[256]; }; class ColorPaletteContainer { private: TColorPalette* palettes; pp_int32 numPalettes; public: ColorPaletteContainer(pp_int32 num); ~ColorPaletteContainer(); void store(pp_int32 index, const TColorPalette& palette); const TColorPalette* restore(pp_int32 index); static PPString encodePalette(const TColorPalette& palette); static TColorPalette decodePalette(const PPString& str); }; #endif MilkyTracker-1.02.00/src/tracker/ControlIDs.h000066400000000000000000000310601324432207300206660ustar00rootroot00000000000000/* * tracker/ControlIDs.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #ifndef CONTROLLIDS__H #define CONTROLLIDS__H enum { BUTTON_0 = 100, BUTTON_1 = 101, BUTTON_2 = 102, BUTTON_3 = 103, BUTTON_4 = 104, BUTTON_5 = 105, BUTTON_6 = 106, BUTTON_APP_EXIT = 110, CONTAINER_SCOPECONTROL = 65536, BUTTON_SCOPECONTROL_MUTE = (65536+1), BUTTON_SCOPECONTROL_SOLO = (65536+2), BUTTON_SCOPECONTROL_REC = (65536+3), // orderlist control BUTTON_ORDERLIST_INSERT = 180, BUTTON_ORDERLIST_NEXT = 181, BUTTON_ORDERLIST_PREVIOUS = 182, BUTTON_ORDERLIST_DELETE = 184, BUTTON_ORDERLIST_SONGLENGTH_PLUS = 185, BUTTON_ORDERLIST_SONGLENGTH_MINUS = 186, BUTTON_ORDERLIST_REPEAT_PLUS = 187, BUTTON_ORDERLIST_REPEAT_MINUS = 188, BUTTON_ORDERLIST_EXTENT = 189, BUTTON_ORDERLIST_SEQENTRY = 190, BUTTON_ORDERLIST_CLNENTRY = 191, BUTTON_JAMMENU_NEXTORDERLIST = 200, BUTTON_JAMMENU_PREVORDERLIST = 201, STATICTEXT_JAMMENU_CURORDER = 202, STATICTEXT_JAMMENU_CURPATTERN = 203, BUTTON_JAMMENU_NEXTINSTRUMENT = 204, BUTTON_JAMMENU_PREVINSTRUMENT = 205, STATICTEXT_JAMMENU_CURINSTRUMENT = 206, BUTTON_JAMMENU_TOGGLEPIANOSIZE = 207, STATICTEXT_ORDERLIST_SONGLENGTH = 10200, STATICTEXT_ORDERLIST_REPEAT = 10201, // speed control BUTTON_BPM_PLUS = 210, BUTTON_BPM_MINUS = 211, BUTTON_SPEED_PLUS = 212, BUTTON_SPEED_MINUS = 213, BUTTON_ADD_PLUS = 214, BUTTON_ADD_MINUS = 215, BUTTON_OCTAVE_PLUS = 216, BUTTON_OCTAVE_MINUS = 217, BUTTON_SPEEDCONTAINERFLIP = 218, STATICTEXT_SPEED_BPM_DESC = 10300, STATICTEXT_SPEED_SPEED_DESC = 10301, STATICTEXT_SPEED_PATTERNADD_DESC = 10302, STATICTEXT_SPEED_OCTAVE_DESC = 10303, STATICTEXT_SPEED_MAINVOL_DESC = 10304, STATICTEXT_SPEED_BPM = 10305, STATICTEXT_SPEED_SPEED = 10306, STATICTEXT_SPEED_PATTERNADD = 10307, STATICTEXT_SPEED_OCTAVE = 10308, STATICTEXT_SPEED_MAINVOL = 10309, // pattern control BUTTON_PATTERN_PLUS = 220, BUTTON_PATTERN_MINUS = 221, BUTTON_PATTERN_SIZE_PLUS = 222, BUTTON_PATTERN_SIZE_MINUS = 223, BUTTON_PATTERN_EXPAND = 224, BUTTON_PATTERN_SHRINK = 225, STATICTEXT_PATTERN_INDEX = 10400, STATICTEXT_PATTERN_LENGTH = 10401, // instrument/samples listboxes STATICTEXT_INSTRUMENTS_ALTERNATIVEHEADER = 226, STATICTEXT_INSTRUMENTS_ALTERNATIVEHEADER2 = 227, BUTTON_INSTRUMENTS_FLIP = 228, BUTTON_INSTRUMENT = 229, BUTTON_INSTRUMENTS_PLUS = 230, BUTTON_INSTRUMENTS_MINUS = 231, BUTTON_SAMPLES_PLUS = 232, BUTTON_SAMPLES_MINUS = 233, BUTTON_PIANO_EDIT = 234, BUTTON_PIANO_PLAY = 235, STATICTEXT_SAMPLEHEADER = 492, BUTTON_SAMPLES_INVOKEHDRECORDER = 493, // envelope/instrument editor BUTTON_ENVELOPE_UNDO = 236, BUTTON_ENVELOPE_REDO = 237, BUTTON_ENVELOPE_COPY = 238, BUTTON_ENVELOPE_PASTE = 239, BUTTON_ENVELOPE_ADD = 240, BUTTON_ENVELOPE_DELETE = 241, BUTTON_ENVELOPE_SUSTAIN_PLUS = 242, BUTTON_ENVELOPE_SUSTAIN_MINUS = 243, BUTTON_ENVELOPE_LOOPSTART_PLUS = 244, BUTTON_ENVELOPE_LOOPSTART_MINUS = 245, BUTTON_ENVELOPE_LOOPEND_PLUS = 246, BUTTON_ENVELOPE_LOOPEND_MINUS = 247, BUTTON_ENVELOPE_VOLUME = 248, BUTTON_ENVELOPE_PANNING = 249, BUTTON_ENVELOPE_PREDEF_STORE = 699, BUTTON_ENVELOPE_PREDEF_0 = 700, BUTTON_ENVELOPE_PREDEF_1 = 701, BUTTON_ENVELOPE_PREDEF_2 = 702, BUTTON_ENVELOPE_PREDEF_3 = 703, BUTTON_ENVELOPE_PREDEF_4 = 704, BUTTON_ENVELOPE_PREDEF_5 = 705, BUTTON_ENVELOPE_PREDEF_6 = 706, BUTTON_ENVELOPE_PREDEF_7 = 707, BUTTON_ENVELOPE_PREDEF_8 = 708, BUTTON_ENVELOPE_PREDEF_9 = 709, BUTTON_ENVELOPE_SCALEX = 750, BUTTON_ENVELOPE_SCALEY = 751, BUTTON_ENVELOPE_ZOOMIN = 760, BUTTON_ENVELOPE_ZOOMOUT = 761, BUTTON_ENVELOPE_ZOOMDEFAULT = 762, CHECKBOX_ENVELOPE_ON = 250, CHECKBOX_ENVELOPE_SUSTAIN = 251, CHECKBOX_ENVELOPE_LOOP = 252, SLIDER_SAMPLE_VOLUME = 253, SLIDER_SAMPLE_PANNING = 254, SLIDER_SAMPLE_FINETUNE = 255, BUTTON_SAMPLE_RELNOTENUM_OCTUP = 256, BUTTON_SAMPLE_RELNOTENUM_OCTDN = 257, BUTTON_SAMPLE_RELNOTENUM_NOTEUP = 258, BUTTON_SAMPLE_RELNOTENUM_NOTEDN = 259, SLIDER_SAMPLE_VOLFADE = 260, SLIDER_SAMPLE_VIBSPEED = 261, SLIDER_SAMPLE_VIBDEPTH = 262, SLIDER_SAMPLE_VIBSWEEP = 263, RADIOGROUP_SAMPLE_VIBTYPE = 264, BUTTON_INSTRUMENTEDITOR_EXIT = 265, BUTTON_INSTRUMENTEDITOR_LOAD = 266, BUTTON_INSTRUMENTEDITOR_SAVE = 267, BUTTON_INSTRUMENTEDITOR_COPY = 268, BUTTON_INSTRUMENTEDITOR_SWAP = 269, BUTTON_INSTRUMENTEDITOR_CLEAR = 270, // sample editor BUTTON_SAMPLE_PLAY_STOP = 280, BUTTON_SAMPLE_PLAY_UP = 281, BUTTON_SAMPLE_PLAY_DOWN = 282, BUTTON_SAMPLE_PLAY_WAVE = 283, BUTTON_SAMPLE_PLAY_RANGE = 284, BUTTON_SAMPLE_PLAY_DISPLAY = 285, BUTTON_SAMPLE_RANGE_SHOW = 286, BUTTON_SAMPLE_RANGE_ALL = 287, BUTTON_SAMPLE_RANGE_CLEAR = 288, BUTTON_SAMPLE_RANGE_ZOOMOUT = 289, BUTTON_SAMPLE_RANGE_SHOWALL = 290, BUTTON_SAMPLE_APPLY_LASTFILTER = 291, BUTTON_SAMPLE_EDIT_CUT = 292, BUTTON_SAMPLE_EDIT_COPY = 293, BUTTON_SAMPLE_EDIT_PASTE = 294, BUTTON_SAMPLE_EDIT_CROP = 295, BUTTON_SAMPLE_EDIT_VOL = 296, BUTTON_SAMPLE_EDIT_DRAW = 297, RADIOGROUP_SAMPLE_LOOPTYPE = 298, RADIOGROUP_SAMPLE_RESTYPE = 299, BUTTON_SAMPLEEDITOR_EXIT = 300, BUTTON_SAMPLE_LOAD = 301, BUTTON_SAMPLE_SAVE = 302, BUTTON_SAMPLE_EDIT_CLEAR = 303, BUTTON_SAMPLE_EDIT_MINIMIZE = 304, BUTTON_SAMPLE_EDIT_REPSTARTPLUS = 305, BUTTON_SAMPLE_EDIT_REPSTARTMINUS = 306, BUTTON_SAMPLE_EDIT_REPLENPLUS = 307, BUTTON_SAMPLE_EDIT_REPLENMINUS = 308, BUTTON_SAMPLE_UNDO = 310, BUTTON_SAMPLE_REDO = 311, BUTTON_SAMPLE_ZOOM_PLUS = 312, BUTTON_SAMPLE_ZOOM_MINUS = 313, CHECKBOX_SAMPLE_ONESHOT = 314, // INPUT CONTROL INPUT_BUTTON_0 = 400, INPUT_BUTTON_1 = 401, INPUT_BUTTON_2 = 402, INPUT_BUTTON_3 = 403, INPUT_BUTTON_4 = 404, INPUT_BUTTON_5 = 405, INPUT_BUTTON_6 = 406, INPUT_BUTTON_7 = 407, INPUT_BUTTON_8 = 408, INPUT_BUTTON_9 = 409, INPUT_BUTTON_A = 410, INPUT_BUTTON_B = 411, INPUT_BUTTON_C = 412, INPUT_BUTTON_D = 413, INPUT_BUTTON_E = 414, INPUT_BUTTON_F = 415, INPUT_BUTTON_G = 416, INPUT_BUTTON_H = 417, INPUT_BUTTON_I = 418, INPUT_BUTTON_J = 419, INPUT_BUTTON_K = 420, INPUT_BUTTON_L = 421, INPUT_BUTTON_M = 422, INPUT_BUTTON_N = 423, INPUT_BUTTON_O = 424, INPUT_BUTTON_P = 425, INPUT_BUTTON_Q = 426, INPUT_BUTTON_R = 427, INPUT_BUTTON_S = 428, INPUT_BUTTON_T = 429, INPUT_BUTTON_U = 430, INPUT_BUTTON_V = 431, INPUT_BUTTON_W = 432, INPUT_BUTTON_X = 433, INPUT_BUTTON_Y = 434, INPUT_BUTTON_Z = 435, INPUT_BUTTON_DEL = 450, INPUT_BUTTON_INS = 451, INPUT_BUTTON_BACK = 452, INPUT_BUTTON_BACKLINE = 453, INPUT_BUTTON_INSLINE = 454, INPUT_BUTTON_KEYOFF = 455, INPUT_BUTTON_MINUS = 457, INPUT_BUTTON_PLUS = 458, INPUT_BUTTON_BRACKETOPEN = 460, INPUT_BUTTON_BRACKETCLOSE = 461, INPUT_BUTTON_SEMICOLON = 462, INPUT_BUTTON_TICK = 463, INPUT_BUTTON_BACKSLASH = 464, INPUT_BUTTON_TILDE = 465, INPUT_BUTTON_COMMA = 466, INPUT_BUTTON_PERIOD = 467, INPUT_BUTTON_SLASH = 468, INPUT_BUTTON_TAB = 470, INPUT_BUTTON_CAPSLOCK = 471, INPUT_BUTTON_LSHIFT = 472, INPUT_BUTTON_RSHIFT = 473, INPUT_BUTTON_ENTER = 474, INPUT_BUTTON_SPACE = 475, INPUT_BUTTON_SHRINK = 480, INPUT_BUTTON_EXPAND = 481, INPUT_BUTTON_EDIT = 490, INPUT_BUTTON_WTF = 491, STATICTEXT_ENVELOPE_SUSTAINPT = 10500, STATICTEXT_ENVELOPE_LOOPSTARTPT = 10501, STATICTEXT_ENVELOPE_LOOPENDPT = 10502, STATICTEXT_SAMPLE_VOLUME = 10503, STATICTEXT_SAMPLE_PANNING = 10504, STATICTEXT_SAMPLE_FINETUNE = 10505, STATICTEXT_SAMPLE_RELNOTE = 10506, STATICTEXT_SAMPLE_VOLFADE = 10507, STATICTEXT_SAMPLE_VIBSPEED = 10508, STATICTEXT_SAMPLE_VIBDEPTH = 10509, STATICTEXT_SAMPLE_VIBSWEEP = 10510, STATICTEXT_SAMPLE_LENGTH = 10511, STATICTEXT_SAMPLE_DISPLAY = 10512, STATICTEXT_SAMPLE_REPSTART = 10513, STATICTEXT_SAMPLE_REPLENGTH = 10514, STATICTEXT_SAMPLE_PLAYNOTE = 10515, BUTTON_MENU_ITEM_0 = 530, MAINMENU_PLAY_SONG = (BUTTON_MENU_ITEM_0+12), MAINMENU_PLAY_PATTERN = (BUTTON_MENU_ITEM_0+13), MAINMENU_STOP = (BUTTON_MENU_ITEM_0+14), MAINMENU_ZAP = (BUTTON_MENU_ITEM_0+0), MAINMENU_LOAD = (BUTTON_MENU_ITEM_0+1), MAINMENU_SAVE = (BUTTON_MENU_ITEM_0+2), MAINMENU_DISKMENU = (BUTTON_MENU_ITEM_0+3), MAINMENU_INSEDIT = (BUTTON_MENU_ITEM_0+5), MAINMENU_SMPEDIT = (BUTTON_MENU_ITEM_0+4), MAINMENU_ADVEDIT = (BUTTON_MENU_ITEM_0+6), MAINMENU_TRANSPOSE = (BUTTON_MENU_ITEM_0+7), MAINMENU_ABOUT = (BUTTON_MENU_ITEM_0+8), MAINMENU_OPTIMIZE = (BUTTON_MENU_ITEM_0+9), MAINMENU_QUICKOPTIONS = (BUTTON_MENU_ITEM_0+10), MAINMENU_CONFIG = (BUTTON_MENU_ITEM_0+11), MAINMENU_PLAY_POSITION = (BUTTON_MENU_ITEM_0+20), MAINMENU_SAVEAS = (BUTTON_MENU_ITEM_0+21), MAINMENU_EDIT = (BUTTON_MENU_ITEM_0+22), BUTTON_MENU_ITEM_ADDCHANNELS = 560, BUTTON_MENU_ITEM_SUBCHANNELS = 561, BUTTON_ABOUT_SHOWTITLE = 600, BUTTON_ABOUT_SHOWPEAK = 601, BUTTON_ABOUT_SHOWTIME = 602, BUTTON_ABOUT_FOLLOWSONG = 603, BUTTON_ABOUT_PROSPECTIVE = 604, BUTTON_ABOUT_WRAPCURSOR = 605, BUTTON_ABOUT_LIVESWITCH = 606, STATICTEXT_ABOUT_HEADING = 610, STATICTEXT_ABOUT_TIME = 611, BUTTON_ABOUT_ESTIMATESONGLENGTH = 612, BUTTON_TAB_CLOSE = 613, BUTTON_TAB_OPEN = 614, SCROLLBAR_0 = 1000, LISTBOX_SONGTITLE = 2000, LISTBOX_ORDERLIST = 2001, LISTBOX_INSTRUMENTS = 2002, LISTBOX_SAMPLES = 2003, CHECKBOX_0 = 2100, CONTAINER_0 = 3000, CONTAINER_ORDERLIST = 3001, CONTAINER_SPEED = 3002, CONTAINER_PATTERN = 3003, CONTAINER_MENU = 3004, CONTAINER_ABOUT = 3005, CONTAINER_ENVELOPES = 3006, CONTAINER_INSTRUMENTLIST = 3007, // sample info CONTAINER_INSTRUMENTS_INFO1 = 3008, // vibrato info CONTAINER_INSTRUMENTS_INFO2 = 3009, // relative note number CONTAINER_INSTRUMENTS_INFO3 = 3010, CONTAINER_INSTRUMENTS_INFO4 = 3011, CONTAINER_INSTRUMENTS_INFO5 = 3012, CONTAINER_INSTRUMENTS_INFO6 = 3013, CONTAINER_PIANO = 3014, CONTAINER_SAMPLEEDITOR = 3015, CONTAINER_SAMPLE_PLAY = 3016, CONTAINER_SAMPLE_RANGE = 3017, CONTAINER_SAMPLE_EDIT1 = 3018, CONTAINER_SAMPLE_EDIT2 = 3019, CONTAINER_SAMPLE_EDIT3 = 3020, CONTAINER_SAMPLE_EDIT4 = 3021, CONTAINER_SAMPLE_EDIT5 = 3022, CONTAINER_SAMPLE_LOADSAVE = 3024, CONTAINER_SETTINGS = 3025, CONTAINER_TRANSPOSE = 3040, CONTAINER_ADVEDIT = 3041, CONTAINER_LOWRES_MENUSWITCH = 3042, CONTAINER_LOWRES_TINYMENU = 3043, // sample info CONTAINER_LOWRES_JAMMENU = 3044, CONTAINER_INPUTDEFAULT = 3045, CONTAINER_INPUTEXTENDED = 3046, CONTAINER_SAMPLE_ZOOMIN = 3047, CONTAINER_HDRECORDER = 3048, CONTAINER_OPENREMOVETABS = 3049, CONTAINER_ENTIREINSSECTION = 3050, CONTAINER_ENTIRESMPSECTION = 3051, PATTERN_EDITOR = 10000, PIANO_CONTROL = 10001, SAMPLE_EDITOR = 10002, PEAKLEVEL_CONTROL = 10003, SCOPES_CONTROL = 10004, TABHEADER_CONTROL = 10005, MESSAGEBOXZAP_CONTAINER = 20000, INSTRUMENT_CHOOSER_COPY = 21000, INSTRUMENT_CHOOSER_SWAP = 21001, INSTRUMENT_CHOOSER_LIST_SRC = 21101, INSTRUMENT_CHOOSER_LIST_DST = 21102, INSTRUMENT_CHOOSER_LIST_SRC2 = 21103, INSTRUMENT_CHOOSER_LIST_DST2 = 21104, INSTRUMENT_CHOOSER_LIST_SRC3 = 21105, INSTRUMENT_CHOOSER_LIST_DST3 = 21106, INSTRUMENT_CHOOSER_USERSTR1 = 21107, INSTRUMENT_CHOOSER_USERSTR2 = 21108, MESSAGEBOX_UNIVERSAL = 29999, MESSAGEBOX_CONVERTSAMPLE = 30000, MESSAGEBOX_CLEARSAMPLE = 30001, MESSAGEBOX_MINIMIZESAMPLE = 30002, MESSAGEBOX_CROPSAMPLE = 30003, MESSAGEBOX_INSREMAP = 30004, MESSAGEBOX_ZAPINSTRUMENT = 30005, MESSAGEBOX_REALLYQUIT = 30006, MESSAGEBOX_TRANSPOSEPROCEED = 30007, MESSAGEBOX_SAVEPROCEED = 30008, MESSAGEBOX_PANNINGSELECT = 30009 }; #endif MilkyTracker-1.02.00/src/tracker/DialogChannelSelector.cpp000066400000000000000000000043721324432207300234000ustar00rootroot00000000000000/* * tracker/DialogChannelSelector.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * DialogChannelSelector.cpp * MilkyTracker * * Created by Peter Barth on 25.10.05. * */ #include "DialogChannelSelector.h" #include "MessageBoxContainer.h" #include "ListBox.h" DialogChannelSelector::DialogChannelSelector(PPScreen* screen, DialogResponder* responder, pp_int32 id, const PPString& caption) : PPDialogBase() { initDialog(screen, responder, id, caption, 290, 142, 26, "Ok", "Cancel"); pp_int32 x = getMessageBoxContainer()->getLocation().x; pp_int32 width = getMessageBoxContainer()->getSize().width; PPButton* button = static_cast(messageBoxContainerGeneric->getControlByID(PP_MESSAGEBOX_BUTTON_YES)); pp_int32 y2 = button->getLocation().y; pp_int32 x2 = x + width / 2 - 30; button->setLocation(PPPoint(x2+5,y2)); button = static_cast(messageBoxContainerGeneric->getControlByID(PP_MESSAGEBOX_BUTTON_CANCEL)); x2 = x + width / 2 + 40; button->setLocation(PPPoint(x2+5,y2)); button = new PPButton(PP_MESSAGEBOX_BUTTON_USER1, screen, this, PPPoint(x+width/2-100-10, y2), PPSize(60, 11)); button->setText("Mix"); messageBoxContainerGeneric->addControl(button); y2 = getMessageBoxContainer()->getControlByID(MESSAGEBOX_STATICTEXT_MAIN_CAPTION)->getLocation().y + 18; x2 = x + width / 2 - 50; listBox = new PPListBox(MESSAGEBOX_LISTBOX_USER1, screen, this, PPPoint(x2, y2), PPSize(100,4 + 7*8), true, false, true, true); listBox->setShowIndex(true); messageBoxContainerGeneric->addControl(listBox); } MilkyTracker-1.02.00/src/tracker/DialogChannelSelector.h000066400000000000000000000023631324432207300230430ustar00rootroot00000000000000/* * tracker/DialogChannelSelector.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * DialogChannelSelector.h * MilkyTracker * * Created by Peter Barth on 25.10.05. * */ #ifndef __DIALOGCHANNELSELECTOR_H__ #define __DIALOGCHANNELSELECTOR_H__ #include "DialogBase.h" class DialogChannelSelector : public PPDialogBase { private: class PPListBox* listBox; public: DialogChannelSelector(PPScreen* screen, DialogResponder* responder, pp_int32 id, const PPString& caption); PPListBox* getListBox() { return listBox; } }; #endif MilkyTracker-1.02.00/src/tracker/DialogEQ.cpp000066400000000000000000000133301324432207300206260ustar00rootroot00000000000000/* * tracker/DialogEQ.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * DialogEQ.cpp * MilkyTracker * * Created by Peter Barth on 03.04.07. * */ #include "DialogEQ.h" #include "Screen.h" #include "StaticText.h" #include "MessageBoxContainer.h" #include "ScrollBar.h" #include "Slider.h" #include "Seperator.h" #include "EQConstants.h" DialogEQ::DialogEQ(PPScreen* screen, DialogResponder* responder, pp_int32 id, EQNumBands numBands) : PPDialogBase(), numBands(numBands) { switch (numBands) { case EQ10Bands: numSliders = 10; break; case EQ3Bands: numSliders = 3; } char dummy[100]; sprintf(dummy, "%i Band Equalizer" PPSTR_PERIODS, numSliders); initDialog(screen, responder, id, dummy, 300, 230, 26, "Ok", "Cancel"); pp_int32 x = getMessageBoxContainer()->getLocation().x; pp_int32 y = getMessageBoxContainer()->getLocation().y; pp_int32 width = getMessageBoxContainer()->getSize().width; pp_int32 height = getMessageBoxContainer()->getSize().height; /*PPButton* button = static_cast(messageBoxContainerGeneric->getControlByID(PP_MESSAGEBOX_BUTTON_YES)); pp_int32 y2 = button->getLocation().y; pp_int32 x2 = x + width / 2 - 30;*/ pp_uint32 borderSpace = 12; pp_uint32 scalaSpace = 6*5+8; pp_int32 y2 = getMessageBoxContainer()->getControlByID(MESSAGEBOX_STATICTEXT_MAIN_CAPTION)->getLocation().y + 26; pp_int32 x2 = x + borderSpace + scalaSpace; pp_int32 size = (y+height) - (y2 + 70); const pp_uint32 tickSize = 4; const float* values = ((numSliders == 3) ? EQConstants::EQ3bands : EQConstants::EQ10bands); for (pp_uint32 i = 0; i < numSliders; i++) { PPFont* font = PPFont::getFont(PPFont::FONT_TINY); char dummy[100]; pp_int32 value = (pp_int32)values[i]; sprintf(dummy, value >= 1000 ? "%ik" : "%i", value >= 1000 ? value / 1000 : value); PPStaticText* staticText = new PPStaticText(0, screen, this, PPPoint(x2 + (SCROLLBUTTONSIZE/2) - font->getStrWidth(dummy) / 2, y2 - 8), dummy, true); staticText->setFont(font); getMessageBoxContainer()->addControl(staticText); PPSlider* slider = new PPSlider(MESSAGEBOX_CONTROL_USER1+i, screen, this, PPPoint(x2, y2), size, false, true); slider->setBarSize(8192); slider->setMinValue(0); slider->setMaxValue(240); slider->setCurrentValue(120); getMessageBoxContainer()->addControl(slider); float y2f = (float)y2; y2f+=SCROLLBUTTONSIZE + 4; for (pp_int32 j = 0; j <= 8; j++) { PPSeperator* seperator = new PPSeperator(0, parentScreen, PPPoint(x2-(tickSize+1), (pp_int32)y2f), tickSize, getMessageBoxContainer()->getColor(), true); getMessageBoxContainer()->addControl(seperator); y2f+=((float)(size-SCROLLBUTTONSIZE*3)/8.0f); } x2+=(width-borderSpace*2-scalaSpace-SCROLLBUTTONSIZE)/(numSliders-1); } x2 = x + borderSpace; float y2f = (float)y2; y2f+=SCROLLBUTTONSIZE + 2; for (pp_int32 j = 0; j <= 8; j++) { PPFont* font = PPFont::getFont(PPFont::FONT_TINY); char dummy[100]; sprintf(dummy, j < 4 ? "+%i dB" : "%i dB", (8-j)*3 - 12); PPStaticText* staticText = new PPStaticText(0, screen, this, PPPoint(x2 + font->getStrWidth("+12 dB") - font->getStrWidth(dummy), (pp_int32)y2f), dummy, true); staticText->setFont(font); getMessageBoxContainer()->addControl(staticText); y2f+=((float)(size-SCROLLBUTTONSIZE*3)/8.0f); } y2 = (pp_int32)y2f + 16; getMessageBoxContainer()->addControl(new PPSeperator(0, screen, PPPoint(x+2, y2), width - 5, getMessageBoxContainer()->getColor(), true)); x2 = x+6; y2+=6; PPButton* button = new PPButton(MESSAGEBOX_LISTBOX_VALUE_ONE, screen, this, PPPoint(x2 + (width-5)/2 - 25, y2), PPSize(50, 14)); button->setText("Reset"); getMessageBoxContainer()->addControl(button); getMessageBoxContainer()->addControl(new PPSeperator(0, screen, PPPoint(x+2, y2+18), width - 5, getMessageBoxContainer()->getColor(), true)); } void DialogEQ::resetSliders() { for (pp_uint32 i = 0; i < numSliders; i++) { PPSlider* slider = static_cast(getMessageBoxContainer()->getControlByID(MESSAGEBOX_CONTROL_USER1+i)); slider->setCurrentValue(120); } } void DialogEQ::update() { parentScreen->paintControl(messageBoxContainerGeneric); } pp_int32 DialogEQ::handleEvent(PPObject* sender, PPEvent* event) { if (event->getID() == eCommand) { switch (reinterpret_cast(sender)->getID()) { // reset sliders case MESSAGEBOX_LISTBOX_VALUE_ONE: { resetSliders(); update(); break; } } } return PPDialogBase::handleEvent(sender, event); } void DialogEQ::setBandParam(pp_uint32 index, float param) { if (index >= numSliders) return; PPSlider* slider = static_cast(getMessageBoxContainer()->getControlByID(MESSAGEBOX_CONTROL_USER1+index)); pp_int32 value = (pp_int32)((1.0f - param) * 240.0f); slider->setCurrentValue(value); } float DialogEQ::getBandParam(pp_uint32 index) const { if (index >= numSliders) return 0.0f; PPSlider* slider = static_cast(getMessageBoxContainer()->getControlByID(MESSAGEBOX_CONTROL_USER1+index)); float v = 1.0f - (slider->getCurrentValue() / 240.0f); return v; } MilkyTracker-1.02.00/src/tracker/DialogEQ.h000066400000000000000000000027511324432207300203000ustar00rootroot00000000000000/* * tracker/DialogEQ.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * DialogEQ.h * MilkyTracker * * Created by Peter Barth on 03.04.07. * */ #ifndef __DIALOGEQ_H__ #define __DIALOGEQ_H__ #include "DialogBase.h" class DialogEQ : public PPDialogBase { public: enum EQNumBands { EQ3Bands, EQ10Bands }; private: EQNumBands numBands; pp_uint32 numSliders; virtual pp_int32 handleEvent(PPObject* sender, PPEvent* event); void resetSliders(); void update(); public: DialogEQ(PPScreen* screen, DialogResponder* responder, pp_int32 id, EQNumBands numBands); void setBandParam(pp_uint32 index, float param); float getBandParam(pp_uint32 index) const; EQNumBands getNumBands() const { return numBands; } pp_uint32 getNumBandsAsInt() const { return numSliders; } }; #endif MilkyTracker-1.02.00/src/tracker/DialogGroupSelection.cpp000066400000000000000000000052351324432207300232700ustar00rootroot00000000000000/* * tracker/DialogGroupSelection.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * DialogGroupSelection.cpp * MilkyTracker * * Created by Peter Barth on 23.06.06. * */ #include "DialogGroupSelection.h" #include "SimpleVector.h" #include "Font.h" #include "MessageBoxContainer.h" #include "ListBox.h" #include "RadioGroup.h" DialogGroupSelection::DialogGroupSelection(PPScreen* screen, DialogResponder* responder, pp_int32 id, const PPString& caption, const PPSimpleVector& choices) : PPDialogBase() { PPFont* font = PPFont::getFont(PPFont::FONT_SYSTEM); initDialog(screen, responder, id, caption, 290, 74 + choices.size()*(font->getCharHeight() + PPRadioGroup::DefaultSpacerHeight + 1), 26, "Ok", "Cancel"); pp_int32 i, j = 0; j = 0; for (i = 0; i < choices.size(); i++) { pp_int32 size = choices.get(i)->length()*font->getCharWidth() + PPRadioGroup::DefaultRadioWidth; if (size > j) j = size; } pp_int32 x = getMessageBoxContainer()->getLocation().x; pp_int32 width = getMessageBoxContainer()->getSize().width; pp_int32 x2 = x + (width / 2) - (j / 2); pp_int32 y2 = getMessageBoxContainer()->getControlByID(MESSAGEBOX_STATICTEXT_MAIN_CAPTION)->getLocation().y; y2+=12; PPRadioGroup* radioGroup = new PPRadioGroup(MESSAGEBOX_CONTROL_USER1, screen, this, PPPoint(x2, y2), PPSize(0,0)); radioGroup->setFont(font); for (i = 0; i < choices.size(); i++) radioGroup->addItem(*choices.get(i)); radioGroup->fitSize(); radioGroup->setColor(getMessageBoxContainer()->getColor()); getMessageBoxContainer()->addControl(radioGroup); selection = 0; } pp_int32 DialogGroupSelection::handleEvent(PPObject* sender, PPEvent* event) { if (event->getID() == eSelection) { switch (reinterpret_cast(sender)->getID()) { case MESSAGEBOX_CONTROL_USER1: this->selection = reinterpret_cast(sender)->getChoice(); break; } } return PPDialogBase::handleEvent(sender, event); } MilkyTracker-1.02.00/src/tracker/DialogGroupSelection.h000066400000000000000000000026261324432207300227360ustar00rootroot00000000000000/* * tracker/DialogGroupSelection.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * DialogGroupSelection.h * MilkyTracker * * Created by Peter Barth on 23.06.06. * */ #ifndef __DIALOGGROUPSELECTION_H__ #define __DIALOGGROUPSELECTION_H__ #include "DialogBase.h" class PPString; template class PPSimpleVector; class DialogGroupSelection : public PPDialogBase { private: pp_uint32 selection; public: DialogGroupSelection(PPScreen* screen, DialogResponder* responder, pp_int32 id, const PPString& caption, const PPSimpleVector& choices); virtual pp_int32 handleEvent(PPObject* sender, PPEvent* event); pp_uint32 getSelection() { return selection; } }; #endif MilkyTracker-1.02.00/src/tracker/DialogHandlers.cpp000066400000000000000000000104111324432207300220560ustar00rootroot00000000000000/* * tracker/DialogHandlers.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * DialogHandlers.cpp * MilkyTracker * * Created by Peter Barth on 25.10.05. * */ #include "DialogHandlers.h" #include "Tracker.h" #include "Zapper.h" #include "DialogChannelSelector.h" #include "DialogZap.h" #include "ListBox.h" #include "ModuleEditor.h" #include "PlayerController.h" #include "SectionSamples.h" #include "SectionInstruments.h" #include "ControlIDs.h" #include "ScopesControl.h" // Load either left or right sample from a list of choices pp_int32 SampleLoadChannelSelectionHandler::ActionOkay(PPObject* sender) { PPListBox* listBox = static_cast(tracker.dialog)->getListBox(); tracker.signalWaitState(true); if (preferredFileName.length()) tracker.loadingParameters.res = tracker.moduleEditor->loadSample(fileName, tracker.listBoxInstruments->getSelectedIndex(), tracker.listBoxSamples->getSelectedIndex(), listBox->getSelectedIndex(), preferredFileName); else tracker.loadingParameters.res = tracker.moduleEditor->loadSample(fileName, tracker.listBoxInstruments->getSelectedIndex(), tracker.listBoxSamples->getSelectedIndex(), listBox->getSelectedIndex()); tracker.sectionSamples->updateAfterLoad(); return !tracker.finishLoading(); } // Mixdown all channels into one pp_int32 SampleLoadChannelSelectionHandler::ActionUser1(PPObject* sender) { tracker.signalWaitState(true); // mixdown samples if (preferredFileName.length()) tracker.loadingParameters.res = tracker.moduleEditor->loadSample(fileName, tracker.listBoxInstruments->getSelectedIndex(), tracker.listBoxSamples->getSelectedIndex(), -1, preferredFileName); else tracker.loadingParameters.res = tracker.moduleEditor->loadSample(fileName, tracker.listBoxInstruments->getSelectedIndex(), tracker.listBoxSamples->getSelectedIndex(), -1); tracker.sectionSamples->updateAfterLoad(); return !tracker.finishLoading(); } pp_int32 SampleLoadChannelSelectionHandler::ActionCancel(PPObject* sender) { tracker.loadingParameters.abortLoading = true; tracker.finishLoading(); return 0; } void SampleLoadChannelSelectionHandler::setCurrentFileName(const PPSystemString& fileName) { this->fileName = fileName; } void SampleLoadChannelSelectionHandler::setPreferredFileName(const PPSystemString& fileName) { this->preferredFileName = fileName; } ZapHandler::ZapHandler(const Zapper& zapper) : zapper(new Zapper(zapper)) { } ZapHandler::~ZapHandler() { delete zapper; } pp_int32 ZapHandler::ActionUser1(PPObject* sender) { zapper->zapAll(); return 0; } pp_int32 ZapHandler::ActionUser2(PPObject* sender) { zapper->zapSong(); return 0; } pp_int32 ZapHandler::ActionUser3(PPObject* sender) { zapper->zapPattern(); return 0; } pp_int32 ZapHandler::ActionUser4(PPObject* sender) { zapper->zapInstruments(); return 0; } pp_int32 ZapInstrumentHandler::ActionOkay(PPObject* sender) { tracker.moduleEditor->zapInstrument(tracker.listBoxInstruments->getSelectedIndex()); tracker.sectionInstruments->resetEnvelopeEditor(); tracker.sectionSamples->resetSampleEditor(); tracker.sectionInstruments->updateAfterLoad(); return 0; } pp_int32 SaveProceedHandler::ActionOkay(PPObject* sender) { tracker.handleSaveProceed(); return 0; } pp_int32 SaveProceedHandler::ActionCancel(PPObject* sender) { tracker.handleSaveCancel(); return 0; } MilkyTracker-1.02.00/src/tracker/DialogHandlers.h000066400000000000000000000045501324432207300215320ustar00rootroot00000000000000/* * tracker/DialogHandlers.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * DialogHandlers.h * MilkyTracker * * Created by Peter Barth on 25.10.05. * */ #ifndef __DIALOGHANDLERS_H__ #define __DIALOGHANDLERS_H__ #include "DialogBase.h" class Tracker; class SampleLoadChannelSelectionHandler : public DialogResponder { private: Tracker& tracker; PPSystemString fileName; PPSystemString preferredFileName; public: bool suspendPlayer; SampleLoadChannelSelectionHandler(Tracker& tracker) : tracker(tracker) { suspendPlayer = false; } virtual ~SampleLoadChannelSelectionHandler() { } void setCurrentFileName(const PPSystemString& fileName); void setPreferredFileName(const PPSystemString& fileName); virtual pp_int32 ActionOkay(PPObject* sender); virtual pp_int32 ActionCancel(PPObject* sender); virtual pp_int32 ActionUser1(PPObject* sender); }; class ZapHandler : public DialogResponder { private: class Zapper* zapper; public: ZapHandler(const Zapper& zapper); virtual ~ZapHandler(); virtual pp_int32 ActionUser1(PPObject* sender); virtual pp_int32 ActionUser2(PPObject* sender); virtual pp_int32 ActionUser3(PPObject* sender); virtual pp_int32 ActionUser4(PPObject* sender); }; class ZapInstrumentHandler : public DialogResponder { private: Tracker& tracker; public: ZapInstrumentHandler(Tracker& tracker) : tracker(tracker) { } virtual pp_int32 ActionOkay(PPObject* sender); }; class SaveProceedHandler : public DialogResponder { private: Tracker& tracker; public: SaveProceedHandler(Tracker& tracker) : tracker(tracker) { } virtual pp_int32 ActionOkay(PPObject* sender); virtual pp_int32 ActionCancel(PPObject* sender); }; #endif MilkyTracker-1.02.00/src/tracker/DialogListBox.cpp000066400000000000000000000036621324432207300217140ustar00rootroot00000000000000/* * tracker/DialogListBox.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * DialogListBox.cpp * MilkyTracker * * Created by Peter Barth on 25.10.05. * */ #include "DialogListBox.h" #include "MessageBoxContainer.h" #include "ListBox.h" DialogListBox::DialogListBox(PPScreen* screen, DialogResponder* responder, pp_int32 id, const PPString& caption, bool okCancel/* = false*/) : PPDialogBase() { if (okCancel) initDialog(screen, responder, id, caption, 290, 142, 26, "Ok", "Cancel"); else initDialog(screen, responder, id, caption, 290, 142, 26, "Okay"); pp_int32 x = getMessageBoxContainer()->getLocation().x; pp_int32 width = getMessageBoxContainer()->getSize().width; PPButton* button = static_cast(messageBoxContainerGeneric->getControlByID(PP_MESSAGEBOX_BUTTON_YES)); pp_int32 y2 = button->getLocation().y; pp_int32 x2 = x + width / 2 - 30; y2 = getMessageBoxContainer()->getControlByID(MESSAGEBOX_STATICTEXT_MAIN_CAPTION)->getLocation().y + 18; x2 = x + width / 2 - 120; listBox = new PPListBox(MESSAGEBOX_LISTBOX_USER1, screen, this, PPPoint(x2, y2), PPSize(240,4 + 7*8), true, false, true, true); listBox->setShowIndex(true); messageBoxContainerGeneric->addControl(listBox); } MilkyTracker-1.02.00/src/tracker/DialogListBox.h000066400000000000000000000023331324432207300213530ustar00rootroot00000000000000/* * tracker/DialogListBox.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * DialogListBox.h * MilkyTracker * * Created by Peter Barth on 25.10.05. * */ #ifndef __DIALOGLISTBOX_H__ #define __DIALOGLISTBOX_H__ #include "DialogBase.h" class DialogListBox : public PPDialogBase { private: class PPListBox* listBox; public: DialogListBox(PPScreen* screen, DialogResponder* responder, pp_int32 id, const PPString& caption, bool okCancel = false); PPListBox* getListBox() { return listBox; } }; #endif MilkyTracker-1.02.00/src/tracker/DialogPanning.cpp000066400000000000000000000160411324432207300217150ustar00rootroot00000000000000/* * tracker/DialogPanning.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * DialogPanning.cpp * MilkyTracker * * Created by Peter Barth on 03.03.06. * */ #include "DialogPanning.h" #include "Tracker.h" #include "TrackerConfig.h" #include "Screen.h" #include "ControlIDs.h" #include "MessageBoxContainer.h" #include "Button.h" #include "Slider.h" #include "StaticText.h" #include "Seperator.h" enum { BUTTON_PANNING_AMIGA = 1000, BUTTON_PANNING_MILKY, BUTTON_PANNING_MONO, SLIDER_PANNING_BASE }; DialogPanning::DialogPanning(PPScreen* theScreen, EventListenerInterface* theEventListener, pp_uint32 channels) : PPDialogBase(), eventListener(theEventListener), panning(NULL), numChannels(channels) { parentScreen = theScreen; init(); } DialogPanning::~DialogPanning() { delete[] panning; } // PPEvent listener pp_int32 DialogPanning::handleEvent(PPObject* sender, PPEvent* event) { if (event->getID() == eCommand) { switch (reinterpret_cast(sender)->getID()) { case PP_MESSAGEBOX_BUTTON_YES: { PPEvent e(eConfirmed); eventListener->handleEvent(reinterpret_cast(this), &e); show(false); break; } case PP_MESSAGEBOX_BUTTON_NO: { PPEvent e(eCanceled); eventListener->handleEvent(reinterpret_cast(this), &e); show(false); break; } case BUTTON_PANNING_AMIGA: applyPanningAmiga(); break; case BUTTON_PANNING_MILKY: applyPanningMilky(); break; case BUTTON_PANNING_MONO: applyPanningMono(); break; } } else if (event->getID() == eValueChanged) { pp_uint32 id = reinterpret_cast(sender)->getID(); if (id >= SLIDER_PANNING_BASE && id < (SLIDER_PANNING_BASE + numChannels)) { pp_int32 i = id - SLIDER_PANNING_BASE; panning[i] = (pp_uint8)reinterpret_cast(sender)->getCurrentValue(); PPEvent e(eValueChanged, &i, sizeof(i)); eventListener->handleEvent(reinterpret_cast(this), &e); } } return 0; } void DialogPanning::init() { const pp_int32 maxChannels = numChannels; pp_int32 width = 290; pp_int32 height = 234; pp_int32 x = parentScreen->getWidth() / 2 - width/2; pp_int32 y = parentScreen->getHeight() / 2 - height/2; messageBoxContainerGeneric = new PPMessageBoxContainer(MESSAGEBOX_PANNINGSELECT, parentScreen, this, PPPoint(x, y), PPSize(width,height), "Global Panning"); pp_int32 y2 = y + 18; char buffer[80]; pp_int32 i; for (i = 0; i < maxChannels/2; i++) { PPSlider* slider = new PPSlider(SLIDER_PANNING_BASE+i, parentScreen, this, PPPoint(x + 4+6*8+4+4+1, y2), (width>>1)-(6*8+8+4+4+1+10), true); slider->setMaxValue(255); slider->setBarSize(16384); messageBoxContainerGeneric->addControl(slider); sprintf(buffer, "Ch:%02d L R", i+1); messageBoxContainerGeneric->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x + 4, y2), buffer, true)); y2+=12; } y2 = y + 18; pp_int32 x2 = x+(width>>1); for (i = 0; i < maxChannels/2; i++) { PPSlider* slider = new PPSlider(SLIDER_PANNING_BASE+i+(maxChannels/2), parentScreen, this, PPPoint(x2 + 4+6*8+4+4+1, y2), (width>>1)-(6*8+8+4+4+1+10), true); slider->setMaxValue(255); slider->setBarSize(16384); messageBoxContainerGeneric->addControl(slider); sprintf(buffer, "Ch:%02d L R", i+1+(maxChannels/2)); messageBoxContainerGeneric->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x2 + 4, y2), buffer, true)); y2+=12; } y2 = y + height - 17; PPButton* button = new PPButton(PP_MESSAGEBOX_BUTTON_YES, parentScreen, this, PPPoint(x+width - 60 - 57, y2), PPSize(54, 11)); button->setText("Okay"); messageBoxContainerGeneric->addControl(button); button = new PPButton(PP_MESSAGEBOX_BUTTON_NO, parentScreen, this, PPPoint(x+width - 60, y2), PPSize(54, 11)); button->setText("Cancel"); messageBoxContainerGeneric->addControl(button); messageBoxContainerGeneric->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x + 7, y2+2), "Predef", true)); button = new PPButton(BUTTON_PANNING_AMIGA, parentScreen, this, PPPoint(x+7+6*8+2, y2), PPSize(32, 11)); button->setText("Amiga"); messageBoxContainerGeneric->addControl(button); button = new PPButton(BUTTON_PANNING_MILKY, parentScreen, this, PPPoint(x+7+6*8+2+33, y2), PPSize(32, 11)); button->setText("Milky"); messageBoxContainerGeneric->addControl(button); button = new PPButton(BUTTON_PANNING_MONO, parentScreen, this, PPPoint(x+7+6*8+2+33*2, y2), PPSize(32, 11)); button->setText("Mono"); messageBoxContainerGeneric->addControl(button); messageBoxContainerGeneric->addControl(new PPSeperator(0, parentScreen, PPPoint(x+5+6*8+2+33*3 + 8, y2 - 5), 18, messageBoxContainerGeneric->getColor(), false)); messageBoxContainerGeneric->addControl(new PPSeperator(0, parentScreen, PPPoint(x+2, y2 - 6), messageBoxContainerGeneric->getSize().width - 5, messageBoxContainerGeneric->getColor(), true)); panning = new pp_uint8[maxChannels]; } void DialogPanning::setPanning(pp_uint32 chn, pp_uint8 pan, bool repaint/* = true*/) { if (panning == NULL) return; if (chn >= numChannels) return; panning[chn] = pan; PPSlider* slider = static_cast(messageBoxContainerGeneric->getControlByID(SLIDER_PANNING_BASE+chn)); if (slider == NULL) return; slider->setCurrentValue(pan); if (repaint && slider->isVisible()) parentScreen->paintControl(slider); } void DialogPanning::applyPanningAmiga() { for (pp_uint32 i = 0; i < numChannels; i++) { pp_uint8 pan = 0; switch (i & 3) { case 0: pan = 0; break; case 1: pan = 255; break; case 2: pan = 255; break; case 3: pan = 0; break; } setPanning(i, pan, false); PPEvent e(eValueChanged, &i, sizeof(i)); eventListener->handleEvent(reinterpret_cast(this), &e); } parentScreen->paintControl(messageBoxContainerGeneric); } void DialogPanning::applyPanningMilky() { for (pp_uint32 i = 0; i < numChannels; i++) { setPanning(i, i & 1 ? 192 : 64, false); PPEvent e(eValueChanged, &i, sizeof(i)); eventListener->handleEvent(reinterpret_cast(this), &e); } parentScreen->paintControl(messageBoxContainerGeneric); } void DialogPanning::applyPanningMono() { for (pp_uint32 i = 0; i < numChannels; i++) { setPanning(i, 128, false); PPEvent e(eValueChanged, &i, sizeof(i)); eventListener->handleEvent(reinterpret_cast(this), &e); } parentScreen->paintControl(messageBoxContainerGeneric); } MilkyTracker-1.02.00/src/tracker/DialogPanning.h000066400000000000000000000030241324432207300213570ustar00rootroot00000000000000/* * tracker/DialogPanning.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * DialogPanning.h * MilkyTracker * * Created by Peter Barth on 03.03.06. * */ #ifndef __DIALOGPANNING_H__ #define __DIALOGPANNING_H__ #include "DialogBase.h" class DialogPanning : public PPDialogBase { private: EventListenerInterface* eventListener; pp_uint8* panning; pp_uint32 numChannels; public: DialogPanning(PPScreen* theScreen, EventListenerInterface* theEventListener, pp_uint32 channels); virtual ~DialogPanning(); // PPEvent listener virtual pp_int32 handleEvent(PPObject* sender, PPEvent* event); void setPanning(pp_uint32 chn, pp_uint8 pan, bool repaint = true); pp_uint8 getPanning(pp_uint32 chn) { return panning[chn]; } private: void init(); void applyPanningAmiga(); void applyPanningMilky(); void applyPanningMono(); }; #endif MilkyTracker-1.02.00/src/tracker/DialogQuickChooseInstrument.cpp000066400000000000000000000241231324432207300246310ustar00rootroot00000000000000/* * tracker/DialogQuickChooseInstrument.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * DialogWithValues.cpp * MilkyTracker * * Created by Peter Barth on 25.10.05. * */ #include "DialogQuickChooseInstrument.h" #include "Screen.h" #include "StaticText.h" #include "MessageBoxContainer.h" #include "Font.h" #include "ListBox.h" #include "Seperator.h" DialogQuickChooseInstrument::DialogQuickChooseInstrument(PPScreen* screen, DialogResponder* responder, pp_int32 id, const PPString& caption) : PPDialogBase() { value = 0; valueRangeStart = 0; valueRangeEnd = 0xFF; valueIncreaseStep = 1; #ifdef __LOWRES__ initDialog(screen, responder, id, caption, 290, 110+15, 26+15, "Ok", "Cancel"); #else initDialog(screen, responder, id, caption, 290, 110, 26, "Ok", "Cancel"); #endif pp_int32 x = getMessageBoxContainer()->getLocation().x; pp_int32 width = getMessageBoxContainer()->getSize().width; pp_int32 x2 = x; pp_int32 y2 = getMessageBoxContainer()->getControlByID(MESSAGEBOX_STATICTEXT_MAIN_CAPTION)->getLocation().y; PPButton* button; //setValueOneCaption("Enter new volume in percent"); y2 +=20+12; // enter edit field 1 x2 = x + width / 2 - (100+35)/2; PPListBox* listBox = new PPListBox(MESSAGEBOX_LISTBOX_VALUE_ONE, screen, this, PPPoint(x2, y2), PPSize(100,12), true, true, false); listBox->showSelection(false); listBox->setBorderColor(messageBoxContainerGeneric->getColor()); listBox->setMaxEditSize(8); messageBoxContainerGeneric->addControl(listBox); button = new PPButton(MESSAGEBOX_BUTTON_INCREASE_VALUEONE, screen, this, PPPoint(x2 + listBox->getSize().width + 2, y2), PPSize(16, 11)); button->setText("+"); messageBoxContainerGeneric->addControl(button); button = new PPButton(MESSAGEBOX_BUTTON_DECREASE_VALUEONE, screen, this, PPPoint(x2 + listBox->getSize().width + 2 + button->getSize().width + 1, y2), PPSize(16, 11)); button->setText("-"); messageBoxContainerGeneric->addControl(button); #ifdef __LOWRES__ pp_int32 height = getMessageBoxContainer()->getSize().height; pp_int32 y = getMessageBoxContainer()->getLocation().y; const char buttonTexts[] = {'1','2','3','4','5','6','7','8','9','0','+','-','.','<','>'}; pp_int32 bWidth = (width - 22*2 - 2*3) / sizeof(buttonTexts); pp_int32 x2_2 = x+4; pp_int32 y2_2 = y+height - 4 - 13; messageBoxContainerGeneric->addControl(new PPSeperator(0, screen, PPPoint(x2_2-1, y2_2-3), width-2*3, messageBoxContainerGeneric->getColor(), true)); pp_uint32 i = 0; for (i = 0; i < sizeof(buttonTexts); i++) { button = new PPButton(MESSAGEBOX_BUTTON_KEYS_BASE+i, screen, this, PPPoint(x2_2, y2_2), PPSize(bWidth+1, 13)); button->setText(buttonTexts[i]); messageBoxContainerGeneric->addControl(button); x2_2+=bWidth; } bWidth = 22; button = new PPButton(MESSAGEBOX_BUTTON_KEYS_BASE+i, screen, this, PPPoint(x2_2, y2_2), PPSize(bWidth+1-3, 13)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Del"); messageBoxContainerGeneric->addControl(button); x2_2+=bWidth-3; i++; button = new PPButton(MESSAGEBOX_BUTTON_KEYS_BASE+i, screen, this, PPPoint(x2_2, y2_2), PPSize(bWidth+1, 13)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Back"); messageBoxContainerGeneric->addControl(button); #endif fitListBoxes(); updateListBoxes(); } void DialogQuickChooseInstrument::setValueCaption(const PPString& caption) { PPControl* ctrl = messageBoxContainerGeneric->getControlByID(MESSAGEBOX_STATICTEXT_VALUE_ONE_CAPTION); if (ctrl) messageBoxContainerGeneric->removeControl(ctrl); pp_int32 width = messageBoxContainerGeneric->getSize().width; pp_int32 x = messageBoxContainerGeneric->getLocation().x; pp_int32 y = messageBoxContainerGeneric->getControlByID(MESSAGEBOX_STATICTEXT_MAIN_CAPTION)->getLocation().y; y+=20; x += width / 2 - (PPFont::getFont(PPFont::FONT_SYSTEM)->getStrWidth(caption) / 2); messageBoxContainerGeneric->addControl(new PPStaticText(MESSAGEBOX_STATICTEXT_VALUE_ONE_CAPTION, parentScreen, this, PPPoint(x, y), caption, true)); } void DialogQuickChooseInstrument::show(bool b/* = true*/) { if (b) listBoxEnterEditState(MESSAGEBOX_LISTBOX_VALUE_ONE); PPDialogBase::show(b); } pp_uint16 DialogQuickChooseInstrument::numPadKeyToValue(pp_uint16 keyCode) { switch (keyCode) { case VK_NUMPAD0: return 0; case VK_NUMPAD1: return 1; case VK_NUMPAD2: return 2; case VK_NUMPAD3: return 3; case VK_NUMPAD4: return 4; case VK_NUMPAD5: return 5; case VK_NUMPAD6: return 6; case VK_NUMPAD7: return 7; case VK_NUMPAD8: return 8; case VK_NUMPAD9: return 9; case VK_DIVIDE: return 0x0A; case VK_MULTIPLY: return 0x0B; case VK_SUBTRACT: return 0x0C; case VK_ADD: return 0x0D; case VK_SEPARATOR: return 0x0E; case VK_DECIMAL: return 0x0F; default: return 0xFFFF; } } static pp_uint8 getNibble(const char* str) { if (*str >= '0' && *str <= '9') return (*str - '0'); if (*str >= 'A' && *str <= 'F') return (*str - 'A' + 10); if (*str >= 'a' && *str <= 'f') return (*str - 'a' + 10); return 0; } static pp_uint8 getByte(const char* str) { return (getNibble(str)<<4) + getNibble(str+1); } pp_int32 DialogQuickChooseInstrument::handleEvent(PPObject* sender, PPEvent* event) { if (event->getID() == eKeyChar) { event->cancel(); } else if (event->getID() == eKeyDown) { PPDialogBase::handleEvent(sender, event); if (event->getID() == eInvalid) return 0; pp_uint16 keyCode = *((pp_uint16*)event->getDataPtr()); pp_uint16 chr = numPadKeyToValue(keyCode); if (chr <= 0xF) { PPListBox* listBox = static_cast(messageBoxContainerGeneric->getControlByID(MESSAGEBOX_LISTBOX_VALUE_ONE)); const char* transTab = "0123456789abcdef"; chr = transTab[chr]; listBox->dispatchEvent(event); PPEvent event2(eKeyChar, &chr, sizeof(chr)); listBox->dispatchEvent(&event2); if (listBox->getItem(0).length() == 2) { commitChanges(); PPButton* button = static_cast(messageBoxContainerGeneric->getControlByID(PP_MESSAGEBOX_BUTTON_YES)); if (button) { PPEvent event(eCommand); PPDialogBase::handleEvent(reinterpret_cast(button), &event); } } return 0; } } else if (event->getID() == eCommand || event->getID() == eCommandRepeat) { switch (reinterpret_cast(sender)->getID()) { case PP_MESSAGEBOX_BUTTON_YES: { commitChanges(); break; } case MESSAGEBOX_BUTTON_INCREASE_VALUEONE: { setValue(value+valueIncreaseStep); parentScreen->paintControl(messageBoxContainerGeneric->getControlByID(MESSAGEBOX_LISTBOX_VALUE_ONE)); break; } case MESSAGEBOX_BUTTON_DECREASE_VALUEONE: { setValue(value-valueIncreaseStep); parentScreen->paintControl(messageBoxContainerGeneric->getControlByID(MESSAGEBOX_LISTBOX_VALUE_ONE)); break; } } } else if (event->getID() == eValueChanged) { switch (reinterpret_cast(sender)->getID()) { // song title case MESSAGEBOX_LISTBOX_VALUE_ONE: { const PPString* str = *(reinterpret_cast(event->getDataPtr())); setValue(getByte(*str)); break; } } } return PPDialogBase::handleEvent(sender, event); } void DialogQuickChooseInstrument::fitListBoxes() { fitListBox(MESSAGEBOX_LISTBOX_VALUE_ONE, valueRangeStart, valueRangeEnd); } void DialogQuickChooseInstrument::fitListBox(pp_int32 id, pp_int32 valueOneRangeStart, pp_int32 valueOneRangeEnd) { pp_int32 width = messageBoxContainerGeneric->getSize().width; pp_int32 x = messageBoxContainerGeneric->getLocation().x; char buffer1[100]; char buffer2[100]; sprintf(buffer1, "%%x"); PPListBox* listBox = static_cast(messageBoxContainerGeneric->getControlByID(id)); if (listBox) { sprintf(buffer2, buffer1, valueRangeStart); pp_int32 len = (pp_int32)strlen(buffer2)+1; sprintf(buffer2, buffer1, valueRangeEnd); if ((pp_int32)strlen(buffer2)+1 > len) len = (pp_int32)strlen(buffer2)+1; pp_int32 y2 = listBox->getLocation().y; pp_int32 x2 = x + width / 2 - ((len*8)+10+35)/2; listBox->setLocation(PPPoint(x2, y2)); listBox->setSize(PPSize(len*8+10, listBox->getSize().height)); x2+=listBox->getSize().width + 2; PPButton* button = static_cast(messageBoxContainerGeneric->getControlByID(id+1)); y2 = button->getLocation().y; button->setLocation(PPPoint(x2, y2)); x2+=button->getSize().width+1; button = static_cast(messageBoxContainerGeneric->getControlByID(id+2)); y2 = button->getLocation().y; button->setLocation(PPPoint(x2, y2)); } } void DialogQuickChooseInstrument::updateListBoxes() { updateListBox(MESSAGEBOX_LISTBOX_VALUE_ONE, value); } void DialogQuickChooseInstrument::updateListBox(pp_int32 id, pp_int32 val) { char buffer1[100]; char buffer2[100]; sprintf(buffer1, "%%x"); PPListBox* listBox = static_cast(messageBoxContainerGeneric->getControlByID(id)); if (listBox) { sprintf(buffer2, buffer1, val); listBox->clear(); listBox->addItem(buffer2); } } void DialogQuickChooseInstrument::commitChanges() { PPListBox* listBox = static_cast(messageBoxContainerGeneric->getControlByID(MESSAGEBOX_LISTBOX_VALUE_ONE)); if (listBox) listBox->commitChanges(); } void DialogQuickChooseInstrument::listBoxEnterEditState(pp_int32 id) { PPListBox* listBox = static_cast(messageBoxContainerGeneric->getControlByID(id)); if (listBox) listBox->placeCursorAtEnd(); } MilkyTracker-1.02.00/src/tracker/DialogQuickChooseInstrument.h000066400000000000000000000036741324432207300243060ustar00rootroot00000000000000/* * tracker/DialogQuickChooseInstrument.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * DialogQuickChooseInstrument.h * MilkyTracker * * Created by Peter Barth on 25.10.05. * */ #ifndef __DIALOGQUICKCHOOSEINSTRUMENT_H__ #define __DIALOGQUICKCHOOSEINSTRUMENT_H__ #include "DialogBase.h" class DialogQuickChooseInstrument : public PPDialogBase { private: pp_int32 value; pp_int32 valueRangeStart, valueRangeEnd, valueIncreaseStep; public: DialogQuickChooseInstrument(PPScreen* screen, DialogResponder* responder, pp_int32 id, const PPString& caption); pp_int32 getValue() { return value; } void setValue(pp_int32 val) { if (val < valueRangeStart) val = valueRangeStart; if (val > valueRangeEnd) val = valueRangeEnd; value = val; updateListBoxes(); } void setValueCaption(const PPString& caption); virtual void show(bool b = true); virtual pp_int32 handleEvent(PPObject* sender, PPEvent* event); static pp_uint16 numPadKeyToValue(pp_uint16 keyCode); private: void fitListBoxes(); void fitListBox(pp_int32 id, pp_int32 valueRangeStart, pp_int32 valueRangeEnd); void updateListBoxes(); void updateListBox(pp_int32 id, pp_int32 val); void listBoxEnterEditState(pp_int32 id); void commitChanges(); }; #endif MilkyTracker-1.02.00/src/tracker/DialogResample.cpp000066400000000000000000000367231324432207300221040ustar00rootroot00000000000000/* * tracker/DialogResample.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * DialogResample.cpp * MilkyTracker * * Created by Peter Barth on 25.10.05. * */ #include "DialogResample.h" #include "Screen.h" #include "StaticText.h" #include "CheckBox.h" #include "CheckBoxLabel.h" #include "PPUIConfig.h" #include "MessageBoxContainer.h" #include "Font.h" #include "ListBox.h" #include "Seperator.h" #include "XModule.h" #include "ResamplerHelper.h" float getc4spd(mp_sint32 relnote,mp_sint32 finetune) { static const mp_sint32 table[] = {65536,69432,73561,77935,82570,87480,92681,98193,104031,110217,116771,123715, 65536,65565,65595,65624,65654,65684,65713,65743,65773,65802,65832,65862,65891, 65921,65951,65981,66010,66040,66070,66100,66130,66160,66189,66219,66249,66279, 66309,66339,66369,66399,66429,66459,66489,66519,66549,66579,66609,66639,66669, 66699,66729,66759,66789,66820,66850,66880,66910,66940,66971,67001,67031,67061, 67092,67122,67152,67182,67213,67243,67273,67304,67334,67365,67395,67425,67456, 67486,67517,67547,67578,67608,67639,67669,67700,67730,67761,67792,67822,67853, 67883,67914,67945,67975,68006,68037,68067,68098,68129,68160,68190,68221,68252, 68283,68314,68344,68375,68406,68437,68468,68499,68530,68561,68592,68623,68654, 68685,68716,68747,68778,68809,68840,68871,68902,68933,68964,68995,69026,69057, 69089,69120,69151,69182,69213,69245,69276,69307,69339,69370,69401}; mp_sint32 c4spd = 8363; mp_sbyte xmfine = finetune; mp_sbyte octave = (relnote+96)/12; mp_sbyte note = (relnote+96)%12; mp_sbyte o2 = octave-8; if (xmfine<0) { xmfine+=(mp_sbyte)128; note--; if (note<0) { note+=12; o2--; } } if (o2>=0) { c4spd<<=o2; } else { c4spd>>=-o2; } float f = table[(mp_ubyte)note]*(1.0f/65536.0f) * c4spd; return f * (table[(mp_ubyte)xmfine+12]*(1.0f/65536.0f)); } DialogResample::DialogResample(PPScreen* screen, DialogResponder* responder, pp_int32 id) : PPDialogBase(), count(0), resamplerHelper(new ResamplerHelper()), interpolationType(1), adjustFtAndRelnote(true) { #ifdef __LOWRES__ initDialog(screen, responder, id, "Resample" PPSTR_PERIODS, 290, 142+15+20+16, 26+15, "Ok", "Cancel"); #else initDialog(screen, responder, id, "Resample" PPSTR_PERIODS, 290, 142+20+16, 26, "Ok", "Cancel"); #endif pp_int32 x = getMessageBoxContainer()->getLocation().x; pp_int32 width = getMessageBoxContainer()->getSize().width; pp_int32 x2 = x; pp_int32 y2 = getMessageBoxContainer()->getControlByID(MESSAGEBOX_STATICTEXT_MAIN_CAPTION)->getLocation().y; PPButton* button; y2 +=16; // enter edit field 1 x2 = x + width / 2 - (10*8+35 + 14*8)/2; messageBoxContainerGeneric->addControl(new PPStaticText(0, screen, this, PPPoint(x2, y2+2), "Relative note", true)); x2+=17*8; PPListBox* listBox = new PPListBox(MESSAGEBOX_LISTBOX_VALUE_ONE, screen, this, PPPoint(x2, y2), PPSize(7*8,12), true, true, false); listBox->showSelection(false); listBox->setBorderColor(messageBoxContainerGeneric->getColor()); listBox->setMaxEditSize(8); listBoxes[0] = listBox; messageBoxContainerGeneric->addControl(listBox); button = new PPButton(MESSAGEBOX_BUTTON_INCREASE_VALUEONE, screen, this, PPPoint(x2 + listBox->getSize().width + 2, y2), PPSize(16, 11)); button->setText("+"); messageBoxContainerGeneric->addControl(button); button = new PPButton(MESSAGEBOX_BUTTON_DECREASE_VALUEONE, screen, this, PPPoint(x2 + listBox->getSize().width + 2 + button->getSize().width + 1, y2), PPSize(16, 11)); button->setText("-"); messageBoxContainerGeneric->addControl(button); y2+=16; x2 = x + width / 2 - (10*8+35 + 14*8)/2; messageBoxContainerGeneric->addControl(new PPStaticText(0, screen, this, PPPoint(x2, y2+2), "Fine tune", true)); x2+=17*8; listBox = new PPListBox(MESSAGEBOX_LISTBOX_VALUE_TWO, screen, this, PPPoint(x2, y2), PPSize(7*8,12), true, true, false); listBox->showSelection(false); listBox->setBorderColor(messageBoxContainerGeneric->getColor()); listBox->setMaxEditSize(8); listBoxes[1] = listBox; messageBoxContainerGeneric->addControl(listBox); button = new PPButton(MESSAGEBOX_BUTTON_INCREASE_VALUETWO, screen, this, PPPoint(x2 + listBox->getSize().width + 2, y2), PPSize(16, 11)); button->setText("+"); messageBoxContainerGeneric->addControl(button); button = new PPButton(MESSAGEBOX_BUTTON_DECREASE_VALUETWO, screen, this, PPPoint(x2 + listBox->getSize().width + 2 + button->getSize().width + 1, y2), PPSize(16, 11)); button->setText("-"); messageBoxContainerGeneric->addControl(button); y2+=16; x2 = x + width / 2 - (10*8+35 + 14*8)/2; messageBoxContainerGeneric->addControl(new PPStaticText(0, screen, this, PPPoint(x2, y2+2), "C4 speed (Hz)", true)); x2+=14*8; listBox = new PPListBox(MESSAGEBOX_LISTBOX_VALUE_THREE, screen, this, PPPoint(x2, y2), PPSize(10*8,12), true, true, false); listBox->showSelection(false); listBox->setBorderColor(messageBoxContainerGeneric->getColor()); listBox->setMaxEditSize(8); listBoxes[2] = listBox; messageBoxContainerGeneric->addControl(listBox); button = new PPButton(MESSAGEBOX_BUTTON_INCREASE_VALUETHREE, screen, this, PPPoint(x2 + listBox->getSize().width + 2, y2), PPSize(16, 11)); button->setText("+"); messageBoxContainerGeneric->addControl(button); button = new PPButton(MESSAGEBOX_BUTTON_DECREASE_VALUETHREE, screen, this, PPPoint(x2 + listBox->getSize().width + 2 + button->getSize().width + 1, y2), PPSize(16, 11)); button->setText("-"); messageBoxContainerGeneric->addControl(button); y2+=16; x2 = x + width / 2 - (10*8+35 + 14*8)/2; messageBoxContainerGeneric->addControl(new PPStaticText(0, screen, this, PPPoint(x2, y2+2), "New size:", true)); x2+=18*8; messageBoxContainerGeneric->addControl(new PPStaticText(MESSAGEBOX_STATICTEXT_USER1, screen, this, PPPoint(x2, y2+2), "XXXXXXXX")); y2+=16; x2 = x + width / 2 - (10*8+35 + 14*8)/2; messageBoxContainerGeneric->addControl(new PPStaticText(0, screen, this, PPPoint(x2, y2+2), "Interpolation:", true)); x2+=15*8; button = new PPButton(MESSAGEBOX_CONTROL_USER1, screen, this, PPPoint(x2, y2), PPSize(button->getLocation().x + button->getSize().width - x2, 11), false); button->setText(resamplerHelper->getResamplerName(interpolationType, true)); button->setColor(messageBoxContainerGeneric->getColor()); button->setTextColor(PPUIConfig::getInstance()->getColor(PPUIConfig::ColorStaticText)); messageBoxContainerGeneric->addControl(button); y2+=16; x2 = x + width / 2 - (10 * 8 + 35 + 14 * 8) / 2 + 21 * 8; checkBox = new PPCheckBox(MESSAGEBOX_CONTROL_USER2, screen, this, PPPoint(x2, y2 + 1)); checkBox->checkIt(adjustFtAndRelnote); messageBoxContainerGeneric->addControl(checkBox); x2 -= 21 * 8; messageBoxContainerGeneric->addControl(new PPCheckBoxLabel(0, screen, this, PPPoint(x2, y2 + 2), "Adjust Ft/Rel.Note:", checkBox, true)); y2+=16; #ifdef __LOWRES__ pp_int32 height = getMessageBoxContainer()->getSize().height; pp_int32 y = getMessageBoxContainer()->getLocation().y; const char buttonTexts[] = {'1','2','3','4','5','6','7','8','9','0','+','-','.','<','>'}; pp_int32 bWidth = (width - 22*2 - 2*3) / sizeof(buttonTexts); pp_int32 x2_2 = x+4; pp_int32 y2_2 = y+height - 4 - 13; messageBoxContainerGeneric->addControl(new PPSeperator(0, screen, PPPoint(x2_2-1, y2_2-3), width-2*3, messageBoxContainerGeneric->getColor(), true)); pp_uint32 i = 0; for (i = 0; i < sizeof(buttonTexts); i++) { button = new PPButton(MESSAGEBOX_BUTTON_KEYS_BASE+i, screen, this, PPPoint(x2_2, y2_2), PPSize(bWidth+1, 13)); button->setText(buttonTexts[i]); messageBoxContainerGeneric->addControl(button); x2_2+=bWidth; } bWidth = 22; button = new PPButton(MESSAGEBOX_BUTTON_KEYS_BASE+i, screen, this, PPPoint(x2_2, y2_2), PPSize(bWidth+1-3, 13)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Del"); messageBoxContainerGeneric->addControl(button); x2_2+=bWidth-3; i++; button = new PPButton(MESSAGEBOX_BUTTON_KEYS_BASE+i, screen, this, PPPoint(x2_2, y2_2), PPSize(bWidth+1, 13)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Back"); messageBoxContainerGeneric->addControl(button); #endif currentSelectedListBox = 0; relnote = finetune = 0; c4spd = 0.0f; } DialogResample::~DialogResample() { delete resamplerHelper; } void DialogResample::show(bool b/* = true*/) { if (b) { currentSelectedListBox = 0; updateListBoxes(); listBoxEnterEditState(MESSAGEBOX_LISTBOX_VALUE_ONE); PPButton* button = static_cast(messageBoxContainerGeneric->getControlByID(MESSAGEBOX_CONTROL_USER1)); button->setText(resamplerHelper->getResamplerName(interpolationType, true)); } PPDialogBase::show(b); } pp_int32 DialogResample::handleEvent(PPObject* sender, PPEvent* event) { if (event->getID() == eKeyDown) { pp_uint16 keyCode = *((pp_uint16*)event->getDataPtr()); if (keyCode == VK_TAB) { switchListBox(); event->cancel(); } } else if (event->getID() == eCommand || event->getID() == eCommandRepeat) { switch (reinterpret_cast(sender)->getID()) { case PP_MESSAGEBOX_BUTTON_YES: { commitChanges(); break; } case MESSAGEBOX_BUTTON_INCREASE_VALUEONE: { relnote++; toC4Speed(); calcSize(); updateListBoxes(); parentScreen->paintControl(messageBoxContainerGeneric); break; } case MESSAGEBOX_BUTTON_DECREASE_VALUEONE: { relnote--; toC4Speed(); calcSize(); updateListBoxes(); parentScreen->paintControl(messageBoxContainerGeneric); break; } case MESSAGEBOX_BUTTON_INCREASE_VALUETWO: { finetune++; toC4Speed(); calcSize(); updateListBoxes(); parentScreen->paintControl(messageBoxContainerGeneric); break; } case MESSAGEBOX_BUTTON_DECREASE_VALUETWO: { finetune--; toC4Speed(); calcSize(); updateListBoxes(); parentScreen->paintControl(messageBoxContainerGeneric); break; } case MESSAGEBOX_BUTTON_INCREASE_VALUETHREE: { c4spd++; fromC4Speed(); calcSize(); updateListBoxes(); parentScreen->paintControl(messageBoxContainerGeneric); break; } case MESSAGEBOX_BUTTON_DECREASE_VALUETHREE: { c4spd--; fromC4Speed(); calcSize(); updateListBoxes(); parentScreen->paintControl(messageBoxContainerGeneric); break; } case MESSAGEBOX_CONTROL_USER1: { if (event->getID() != eCommand) break; interpolationType = (interpolationType + 1) % resamplerHelper->getNumResamplers(); PPButton* button = static_cast(messageBoxContainerGeneric->getControlByID(MESSAGEBOX_CONTROL_USER1)); button->setText(resamplerHelper->getResamplerName(interpolationType, true)); parentScreen->paintControl(messageBoxContainerGeneric); break; } case MESSAGEBOX_CONTROL_USER2: { if (event->getID() != eCommand) break; this->adjustFtAndRelnote = reinterpret_cast(sender)->isChecked(); break; } } } else if (event->getID() == eValueChanged) { switch (reinterpret_cast(sender)->getID()) { case MESSAGEBOX_LISTBOX_VALUE_ONE: { const PPString* str = *(reinterpret_cast(event->getDataPtr())); setRelNote((pp_int32)atoi(*str)); calcSize(); updateListBoxes(); parentScreen->paintControl(messageBoxContainerGeneric); break; } case MESSAGEBOX_LISTBOX_VALUE_TWO: { const PPString* str = *(reinterpret_cast(event->getDataPtr())); setFineTune((pp_int32)atoi(*str)); calcSize(); updateListBoxes(); parentScreen->paintControl(messageBoxContainerGeneric); break; } case MESSAGEBOX_LISTBOX_VALUE_THREE: { const PPString* str = *(reinterpret_cast(event->getDataPtr())); setC4Speed((float)atof(*str)); calcSize(); updateListBoxes(); parentScreen->paintControl(messageBoxContainerGeneric); break; } } } return PPDialogBase::handleEvent(sender, event); } void DialogResample::updateListBoxes() { updateListBox(MESSAGEBOX_LISTBOX_VALUE_ONE, (float)relnote, 0); updateListBox(MESSAGEBOX_LISTBOX_VALUE_TWO, (float)finetune, 0); updateListBox(MESSAGEBOX_LISTBOX_VALUE_THREE, (float)c4spd, 2); PPStaticText* staticText = static_cast(messageBoxContainerGeneric->getControlByID(MESSAGEBOX_STATICTEXT_USER1)); staticText->setHexValue(finalSize, 8); checkBox->checkIt(adjustFtAndRelnote); } void DialogResample::updateListBox(pp_int32 id, float val, pp_int32 numDecimals) { char buffer1[100]; char buffer2[100]; sprintf(buffer1, "%%.%if", numDecimals); PPListBox* listBox = static_cast(messageBoxContainerGeneric->getControlByID(id)); if (listBox) { sprintf(buffer2, buffer1, val); listBox->clear(); listBox->addItem(buffer2); } } void DialogResample::commitChanges() { PPListBox* listBox = static_cast(messageBoxContainerGeneric->getControlByID(MESSAGEBOX_LISTBOX_VALUE_ONE)); if (listBox) listBox->commitChanges(); listBox = static_cast(messageBoxContainerGeneric->getControlByID(MESSAGEBOX_LISTBOX_VALUE_TWO)); if (listBox) listBox->commitChanges(); } void DialogResample::listBoxEnterEditState(pp_int32 id) { PPListBox* listBox = static_cast(messageBoxContainerGeneric->getControlByID(id)); if (listBox) listBox->placeCursorAtEnd(); } void DialogResample::switchListBox() { if (listBoxes[currentSelectedListBox]->isEditing()) listBoxes[currentSelectedListBox]->commitChanges(); currentSelectedListBox = (currentSelectedListBox+1) % 3; listBoxEnterEditState(listBoxes[currentSelectedListBox]->getID()); messageBoxContainerGeneric->setFocus(listBoxes[currentSelectedListBox]); parentScreen->paintControl(messageBoxContainerGeneric); } void DialogResample::setRelNote(pp_int32 note) { relnote = note; toC4Speed(); if (count < 2) { count++; if (count == 2) originalc4spd = c4spd; } } void DialogResample::setFineTune(pp_int32 ft) { finetune = ft; toC4Speed(); if (count < 2) { count++; if (count == 2) originalc4spd = c4spd; } } void DialogResample::setC4Speed(float c4spd) { this->c4spd = c4spd; fromC4Speed(); } void DialogResample::setSize(pp_uint32 size) { this->size = size; calcSize(); } void DialogResample::toC4Speed() { validate(); c4spd = getc4spd(relnote, finetune); validate(); } void DialogResample::fromC4Speed() { validate(); mp_sbyte rn, ft; XModule::convertc4spd((mp_uint32)c4spd, &ft, &rn); relnote = rn; finetune = ft; validate(); } void DialogResample::calcSize() { float c4spd = getc4spd(relnote, finetune); float step = originalc4spd / c4spd; finalSize = (mp_uint32)(size / step); } void DialogResample::validate() { if (relnote > 48) relnote = 48; if (relnote < -48) relnote = -48; if (finetune > 127) finetune = 127; if (finetune < -128) finetune = -128; if (c4spd < 0) c4spd = 0; if (c4spd > 65535*4) c4spd = 65535*4; } MilkyTracker-1.02.00/src/tracker/DialogResample.h000066400000000000000000000046221324432207300215420ustar00rootroot00000000000000/* * tracker/DialogResample.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * DialogResample.h * MilkyTracker * * Created by Peter Barth on 25.10.05. * */ #ifndef __DIALOGRESAMPLE_H__ #define __DIALOGRESAMPLE_H__ #include "DialogBase.h" class DialogResample : public PPDialogBase { private: class PPListBox* listBoxes[3]; class PPCheckBox* checkBox; pp_int32 currentSelectedListBox; pp_int32 relnote, finetune; pp_uint32 size, finalSize; pp_uint32 count; float c4spd; float originalc4spd; class ResamplerHelper* resamplerHelper; pp_int32 interpolationType; bool adjustFtAndRelnote; public: DialogResample(PPScreen* screen, DialogResponder* responder, pp_int32 id); virtual ~DialogResample(); virtual void show(bool b = true); virtual pp_int32 handleEvent(PPObject* sender, PPEvent* event); void setRelNote(pp_int32 note); void setFineTune(pp_int32 ft); void setC4Speed(float c4spd); void setSize(pp_uint32 size); float getC4Speed() const { return c4spd; } pp_int32 getRelNote() const { return relnote; } pp_int32 getFineTune() const { return finetune; } void setInterpolationType(pp_int32 interpolationType) { this->interpolationType = interpolationType; } pp_int32 getInterpolationType() const { return interpolationType; } void setAdjustFtAndRelnote(bool adjustFtAndRelnote) { this->adjustFtAndRelnote = adjustFtAndRelnote; } bool getAdjustFtAndRelnote() const { return adjustFtAndRelnote; } private: void listBoxEnterEditState(pp_int32 id); void updateListBoxes(); void updateListBox(pp_int32 id, float val, pp_int32 numDecimals); void commitChanges(); void switchListBox(); void toC4Speed(); void fromC4Speed(); void calcSize(); void validate(); }; #endif MilkyTracker-1.02.00/src/tracker/DialogWithValues.cpp000066400000000000000000000322011324432207300224120ustar00rootroot00000000000000/* * tracker/DialogWithValues.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * DialogWithValues.cpp * MilkyTracker * * Created by Peter Barth on 25.10.05. * */ #include "DialogWithValues.h" #include "Screen.h" #include "StaticText.h" #include "MessageBoxContainer.h" #include "Font.h" #include "ListBox.h" #include "Seperator.h" DialogWithValues::DialogWithValues(PPScreen* screen, DialogResponder* responder, pp_int32 id, const PPString& caption, ValueStyles style) : PPDialogBase() { valueOne = 0; valueTwo = 0; valueOneRangeStart = (float)-0x7FFFFFFF; valueOneRangeEnd = (float)0x7FFFFFFE; valueTwoRangeStart = (float)-0x7FFFFFFF; valueTwoRangeEnd = (float)0x7FFFFFFE; valueOneIncreaseStep = 1.0f; valueTwoIncreaseStep = 1.0f; numValueOneDecimals = 0; numValueTwoDecimals = 0; switch (style) { case ValueStyleEnterOneValue: #ifdef __LOWRES__ initDialog(screen, responder, id, caption, 290, 110+15, 26+15, "Ok", "Cancel"); #else initDialog(screen, responder, id, caption, 290, 110, 26, "Ok", "Cancel"); #endif break; case ValueStyleEnterTwoValues: #ifdef __LOWRES__ initDialog(screen, responder, id, caption, 290, 142+15, 26+15, "Ok", "Cancel"); #else initDialog(screen, responder, id, caption, 290, 142, 26, "Ok", "Cancel"); #endif break; } pp_int32 x = getMessageBoxContainer()->getLocation().x; pp_int32 width = getMessageBoxContainer()->getSize().width; pp_int32 x2 = x; pp_int32 y2 = getMessageBoxContainer()->getControlByID(MESSAGEBOX_STATICTEXT_MAIN_CAPTION)->getLocation().y; PPButton* button; if (style == ValueStyleEnterOneValue || style == ValueStyleEnterTwoValues) { //setValueOneCaption("Enter new volume in percent"); y2 +=20+12; // enter edit field 1 x2 = x + width / 2 - (100+35)/2; PPListBox* listBox = new PPListBox(MESSAGEBOX_LISTBOX_VALUE_ONE, screen, this, PPPoint(x2, y2), PPSize(100,12), true, true, false); listBox->showSelection(false); listBox->setBorderColor(messageBoxContainerGeneric->getColor()); listBox->setMaxEditSize(8); messageBoxContainerGeneric->addControl(listBox); button = new PPButton(MESSAGEBOX_BUTTON_INCREASE_VALUEONE, screen, this, PPPoint(x2 + listBox->getSize().width + 2, y2), PPSize(16, 11)); button->setText("+"); messageBoxContainerGeneric->addControl(button); button = new PPButton(MESSAGEBOX_BUTTON_DECREASE_VALUEONE, screen, this, PPPoint(x2 + listBox->getSize().width + 2 + button->getSize().width + 1, y2), PPSize(16, 11)); button->setText("-"); messageBoxContainerGeneric->addControl(button); #ifdef __LOWRES__ pp_int32 height = getMessageBoxContainer()->getSize().height; pp_int32 y = getMessageBoxContainer()->getLocation().y; const char buttonTexts[] = {'1','2','3','4','5','6','7','8','9','0','+','-','.','<','>'}; pp_int32 bWidth = (width - 22*2 - 2*3) / sizeof(buttonTexts); pp_int32 x2_2 = x+4; pp_int32 y2_2 = y+height - 4 - 13; messageBoxContainerGeneric->addControl(new PPSeperator(0, screen, PPPoint(x2_2-1, y2_2-3), width-2*3, messageBoxContainerGeneric->getColor(), true)); pp_uint32 i = 0; for (i = 0; i < sizeof(buttonTexts); i++) { button = new PPButton(MESSAGEBOX_BUTTON_KEYS_BASE+i, screen, this, PPPoint(x2_2, y2_2), PPSize(bWidth+1, 13)); button->setText(buttonTexts[i]); messageBoxContainerGeneric->addControl(button); x2_2+=bWidth; } bWidth = 22; button = new PPButton(MESSAGEBOX_BUTTON_KEYS_BASE+i, screen, this, PPPoint(x2_2, y2_2), PPSize(bWidth+1-3, 13)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Del"); messageBoxContainerGeneric->addControl(button); x2_2+=bWidth-3; i++; button = new PPButton(MESSAGEBOX_BUTTON_KEYS_BASE+i, screen, this, PPPoint(x2_2, y2_2), PPSize(bWidth+1, 13)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Back"); messageBoxContainerGeneric->addControl(button); #endif } if (style == ValueStyleEnterTwoValues) { //setValueTwoCaption("Enter new volume in percent"); y2 += 32; // enter edit field 2 x2 = x + width / 2 - (100+35)/2; PPListBox* listBox = new PPListBox(MESSAGEBOX_LISTBOX_VALUE_TWO, screen, this, PPPoint(x2, y2), PPSize(100,12), true, true, false); listBox->showSelection(false); listBox->setBorderColor(messageBoxContainerGeneric->getColor()); listBox->setMaxEditSize(8); messageBoxContainerGeneric->addControl(listBox); button = new PPButton(MESSAGEBOX_BUTTON_INCREASE_VALUETWO, screen, this, PPPoint(x2 + listBox->getSize().width + 2, y2), PPSize(16, 11)); button->setText("+"); messageBoxContainerGeneric->addControl(button); button = new PPButton(MESSAGEBOX_BUTTON_DECREASE_VALUETWO, screen, this, PPPoint(x2 + listBox->getSize().width + 2 + button->getSize().width + 1, y2), PPSize(16, 11)); button->setText("-"); messageBoxContainerGeneric->addControl(button); } fitListBoxes(); updateListBoxes(); } void DialogWithValues::setValueOneCaption(const PPString& caption) { PPControl* ctrl = messageBoxContainerGeneric->getControlByID(MESSAGEBOX_STATICTEXT_VALUE_ONE_CAPTION); if (ctrl) messageBoxContainerGeneric->removeControl(ctrl); pp_int32 width = messageBoxContainerGeneric->getSize().width; pp_int32 x = messageBoxContainerGeneric->getLocation().x; pp_int32 y = messageBoxContainerGeneric->getControlByID(MESSAGEBOX_STATICTEXT_MAIN_CAPTION)->getLocation().y; y+=20; x += width / 2 - (PPFont::getFont(PPFont::FONT_SYSTEM)->getStrWidth(caption) / 2); messageBoxContainerGeneric->addControl(new PPStaticText(MESSAGEBOX_STATICTEXT_VALUE_ONE_CAPTION, parentScreen, this, PPPoint(x, y), caption, true)); } void DialogWithValues::setValueTwoCaption(const PPString& caption) { PPControl* ctrl = messageBoxContainerGeneric->getControlByID(MESSAGEBOX_STATICTEXT_VALUE_TWO_CAPTION); if (ctrl) messageBoxContainerGeneric->removeControl(ctrl); pp_int32 width = messageBoxContainerGeneric->getSize().width; pp_int32 x = messageBoxContainerGeneric->getLocation().x; pp_int32 y = messageBoxContainerGeneric->getControlByID(MESSAGEBOX_STATICTEXT_MAIN_CAPTION)->getLocation().y; y+=20+32; x += width / 2 - (PPFont::getFont(PPFont::FONT_SYSTEM)->getStrWidth(caption) / 2); messageBoxContainerGeneric->addControl(new PPStaticText(MESSAGEBOX_STATICTEXT_VALUE_TWO_CAPTION, parentScreen, this, PPPoint(x, y), caption, true)); } void DialogWithValues::show(bool b/* = true*/) { if (b) listBoxEnterEditState(MESSAGEBOX_LISTBOX_VALUE_ONE); PPDialogBase::show(b); } pp_int32 DialogWithValues::handleEvent(PPObject* sender, PPEvent* event) { if (event->getID() == eKeyDown) { pp_uint16 keyCode = *((pp_uint16*)event->getDataPtr()); if (keyCode == VK_TAB) { switchListBox(); event->cancel(); } } else if (event->getID() == eCommand || event->getID() == eCommandRepeat) { switch (reinterpret_cast(sender)->getID()) { case PP_MESSAGEBOX_BUTTON_YES: { commitChanges(); break; } case MESSAGEBOX_BUTTON_INCREASE_VALUEONE: { setValueOne(valueOne+valueOneIncreaseStep); parentScreen->paintControl(messageBoxContainerGeneric->getControlByID(MESSAGEBOX_LISTBOX_VALUE_ONE)); break; } case MESSAGEBOX_BUTTON_DECREASE_VALUEONE: { setValueOne(valueOne-valueOneIncreaseStep); parentScreen->paintControl(messageBoxContainerGeneric->getControlByID(MESSAGEBOX_LISTBOX_VALUE_ONE)); break; } case MESSAGEBOX_BUTTON_INCREASE_VALUETWO: { setValueTwo(valueTwo+valueOneIncreaseStep); parentScreen->paintControl(messageBoxContainerGeneric->getControlByID(MESSAGEBOX_LISTBOX_VALUE_TWO)); break; } case MESSAGEBOX_BUTTON_DECREASE_VALUETWO: { setValueTwo(valueTwo-valueOneIncreaseStep); parentScreen->paintControl(messageBoxContainerGeneric->getControlByID(MESSAGEBOX_LISTBOX_VALUE_TWO)); break; } } } else if (event->getID() == eValueChanged) { switch (reinterpret_cast(sender)->getID()) { // song title case MESSAGEBOX_LISTBOX_VALUE_ONE: { const PPString* str = *(reinterpret_cast(event->getDataPtr())); setValueOne((float)atof(*str)); break; } case MESSAGEBOX_LISTBOX_VALUE_TWO: { const PPString* str = *(reinterpret_cast(event->getDataPtr())); setValueTwo((float)atof(*str)); break; } } } return PPDialogBase::handleEvent(sender, event); } void DialogWithValues::setValueOneRange(float start, float end, pp_int32 numDecimals) { valueOneRangeStart = start; valueOneRangeEnd = end; numValueOneDecimals = numDecimals; fitListBoxes(); setValueOne(valueOne); } void DialogWithValues::setValueTwoRange(float start, float end, pp_int32 numDecimals) { valueTwoRangeStart = start; valueTwoRangeEnd = end; numValueTwoDecimals = numDecimals; fitListBoxes(); setValueTwo(valueTwo); } void DialogWithValues::fitListBoxes() { fitListBox(MESSAGEBOX_LISTBOX_VALUE_ONE, valueOneRangeStart, valueOneRangeEnd, numValueOneDecimals); fitListBox(MESSAGEBOX_LISTBOX_VALUE_TWO, valueTwoRangeStart, valueTwoRangeEnd, numValueTwoDecimals); } void DialogWithValues::fitListBox(pp_int32 id, float valueOneRangeStart, float valueOneRangeEnd, pp_int32 numDecimals) { pp_int32 width = messageBoxContainerGeneric->getSize().width; pp_int32 x = messageBoxContainerGeneric->getLocation().x; char buffer1[100]; char buffer2[100]; sprintf(buffer1, "%%.%if", numDecimals); PPListBox* listBox = static_cast(messageBoxContainerGeneric->getControlByID(id)); if (listBox) { sprintf(buffer2, buffer1, valueOneRangeStart); pp_int32 len = (pp_int32)strlen(buffer2); sprintf(buffer2, buffer1, valueOneRangeEnd); if ((pp_int32)strlen(buffer2) > len) len = (pp_int32)strlen(buffer2); pp_int32 y2 = listBox->getLocation().y; pp_int32 x2 = x + width / 2 - ((len*8)+10+35)/2; listBox->setLocation(PPPoint(x2, y2)); listBox->setSize(PPSize(len*8+10, listBox->getSize().height)); x2+=listBox->getSize().width + 2; PPButton* button = static_cast(messageBoxContainerGeneric->getControlByID(id+1)); y2 = button->getLocation().y; button->setLocation(PPPoint(x2, y2)); x2+=button->getSize().width+1; button = static_cast(messageBoxContainerGeneric->getControlByID(id+2)); y2 = button->getLocation().y; button->setLocation(PPPoint(x2, y2)); } } void DialogWithValues::updateListBoxes() { updateListBox(MESSAGEBOX_LISTBOX_VALUE_ONE, valueOne, numValueOneDecimals); updateListBox(MESSAGEBOX_LISTBOX_VALUE_TWO, valueTwo, numValueTwoDecimals); } void DialogWithValues::updateListBox(pp_int32 id, float val, pp_int32 numDecimals) { char buffer1[100]; char buffer2[100]; sprintf(buffer1, "%%.%if", numDecimals); PPListBox* listBox = static_cast(messageBoxContainerGeneric->getControlByID(id)); if (listBox) { sprintf(buffer2, buffer1, val); listBox->clear(); listBox->addItem(buffer2); } } void DialogWithValues::commitChanges() { PPListBox* listBox = static_cast(messageBoxContainerGeneric->getControlByID(MESSAGEBOX_LISTBOX_VALUE_ONE)); if (listBox) listBox->commitChanges(); listBox = static_cast(messageBoxContainerGeneric->getControlByID(MESSAGEBOX_LISTBOX_VALUE_TWO)); if (listBox) listBox->commitChanges(); } void DialogWithValues::listBoxEnterEditState(pp_int32 id) { PPListBox* listBox = static_cast(messageBoxContainerGeneric->getControlByID(id)); if (listBox) listBox->placeCursorAtEnd(); } void DialogWithValues::switchListBox() { if (messageBoxContainerGeneric->getControlByID(MESSAGEBOX_LISTBOX_VALUE_TWO) == NULL) return; PPListBox* listBox = static_cast(messageBoxContainerGeneric->getControlByID(MESSAGEBOX_LISTBOX_VALUE_ONE)); if (listBox->isEditing()) { listBox->commitChanges(); listBoxEnterEditState(MESSAGEBOX_LISTBOX_VALUE_TWO); messageBoxContainerGeneric->setFocus(messageBoxContainerGeneric->getControlByID(MESSAGEBOX_LISTBOX_VALUE_TWO)); parentScreen->paintControl(messageBoxContainerGeneric); return; } listBox = static_cast(messageBoxContainerGeneric->getControlByID(MESSAGEBOX_LISTBOX_VALUE_TWO)); if (listBox->isEditing()) { listBox->commitChanges(); listBoxEnterEditState(MESSAGEBOX_LISTBOX_VALUE_ONE); messageBoxContainerGeneric->setFocus(messageBoxContainerGeneric->getControlByID(MESSAGEBOX_LISTBOX_VALUE_ONE)); parentScreen->paintControl(messageBoxContainerGeneric); return; } listBoxEnterEditState(MESSAGEBOX_LISTBOX_VALUE_ONE); messageBoxContainerGeneric->setFocus(messageBoxContainerGeneric->getControlByID(MESSAGEBOX_LISTBOX_VALUE_ONE)); parentScreen->paintControl(messageBoxContainerGeneric); } MilkyTracker-1.02.00/src/tracker/DialogWithValues.h000066400000000000000000000052761324432207300220730ustar00rootroot00000000000000/* * tracker/DialogWithValues.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * DialogWithValues.h * MilkyTracker * * Created by Peter Barth on 25.10.05. * */ #ifndef __DIALOGWITHVALUES_H__ #define __DIALOGWITHVALUES_H__ #include "DialogBase.h" class DialogWithValues : public PPDialogBase { public: enum ValueStyles { ValueStyleEnterOneValue, ValueStyleEnterTwoValues }; private: float valueOne, valueTwo; float valueOneRangeStart, valueOneRangeEnd, valueOneIncreaseStep; float valueTwoRangeStart, valueTwoRangeEnd, valueTwoIncreaseStep; pp_int32 numValueOneDecimals, numValueTwoDecimals; public: DialogWithValues(PPScreen* screen, DialogResponder* responder, pp_int32 id, const PPString& caption, ValueStyles style); float getValueOne() { return valueOne; } float getValueTwo() { return valueTwo; } void setValueOne(float val) { if (val < valueOneRangeStart) val = valueOneRangeStart; if (val > valueOneRangeEnd) val = valueOneRangeEnd; valueOne = val; updateListBoxes(); } void setValueTwo(float val) { if (val < valueTwoRangeStart) val = valueTwoRangeStart; if (val > valueTwoRangeEnd) val = valueTwoRangeEnd; valueTwo = val; updateListBoxes(); } void setValueOneRange(float start, float end, pp_int32 numDecimals); void setValueOneIncreaseStep(float step) { valueOneIncreaseStep = step; } void setValueTwoRange(float start, float end, pp_int32 numDecimals); void setValueTwoIncreaseStep(float step) { valueTwoIncreaseStep = step; } void setValueOneCaption(const PPString& caption); void setValueTwoCaption(const PPString& caption); virtual void show(bool b = true); virtual pp_int32 handleEvent(PPObject* sender, PPEvent* event); private: void fitListBoxes(); void fitListBox(pp_int32 id, float valueOneRangeStart, float valueOneRangeEnd, pp_int32 numDecimals); void updateListBoxes(); void updateListBox(pp_int32 id, float val, pp_int32 numDecimals); void listBoxEnterEditState(pp_int32 id); void commitChanges(); void switchListBox(); }; #endif MilkyTracker-1.02.00/src/tracker/DialogZap.cpp000066400000000000000000000054071324432207300210610ustar00rootroot00000000000000/* * tracker/DialogZap.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * DialogZap.cpp * MilkyTracker * * Created by Peter Barth on 20.2.08. * */ #include "DialogZap.h" #include "Screen.h" #include "StaticText.h" #include "MessageBoxContainer.h" #include "Font.h" enum ControlIDs { MESSAGEBOXZAP_BUTTON_ALL = PP_MESSAGEBOX_BUTTON_USER1, MESSAGEBOXZAP_BUTTON_SONG, MESSAGEBOXZAP_BUTTON_PATT, MESSAGEBOXZAP_BUTTON_INS }; DialogZap::DialogZap(PPScreen* screen, DialogResponder* responder, pp_int32 id) : PPDialogBase() { parentScreen = screen; setResponder(responder); const pp_int32 height = 74; const pp_int32 width = 290; pp_int32 x = screen->getWidth() / 2 - width/2; pp_int32 y = screen->getHeight() / 2 - height/2; PPMessageBoxContainer* container = new PPMessageBoxContainer(id, screen, this, PPPoint(x, y), PPSize(width,height), "System request"); pp_int32 x2 = x + width / 2 - (PPFont::getFont(PPFont::FONT_SYSTEM)->getStrWidth("Total devastation of the" PPSTR_PERIODS) / 2); pp_int32 y2 = y + 20; container->addControl(new PPStaticText(0, screen, this, PPPoint(x2, y2), "Total devastation of the" PPSTR_PERIODS, true)); PPButton* button = new PPButton(MESSAGEBOXZAP_BUTTON_ALL, screen, this, PPPoint(x+10, y2 + 15), PPSize(60, 11)); button->setText("All"); container->addControl(button); button = new PPButton(MESSAGEBOXZAP_BUTTON_SONG, screen, this, PPPoint(x + 10 + 60 + 10, y2 + 15), PPSize(60, 11)); button->setText("Song"); container->addControl(button); button = new PPButton(MESSAGEBOXZAP_BUTTON_PATT, screen, this, PPPoint(x + 10 + 60*2 + 10*2, y2 + 15), PPSize(60, 11)); button->setText("Pattern"); container->addControl(button); button = new PPButton(MESSAGEBOXZAP_BUTTON_INS, screen, this, PPPoint(x + 10 + 60*3 + 10*3, y2 + 15), PPSize(60, 11)); button->setText("Instr."); container->addControl(button); button = new PPButton(PP_MESSAGEBOX_BUTTON_CANCEL, screen, this, PPPoint(x + 10 + 60*3 + 10*3, y2 + 15*2+4), PPSize(60, 11)); button->setText("Cancel"); container->addControl(button); messageBoxContainerGeneric = container; } MilkyTracker-1.02.00/src/tracker/DialogZap.h000066400000000000000000000020601324432207300205160ustar00rootroot00000000000000/* * tracker/DialogZap.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * DialogZap.h * MilkyTracker * * Created by Peter Barth on 20.2.08. * */ #ifndef __DIALOGZAP_H__ #define __DIALOGZAP_H__ #include "DialogBase.h" class DialogZap : public PPDialogBase { public: DialogZap(PPScreen* screen, DialogResponder* responder, pp_int32 id); }; #endif MilkyTracker-1.02.00/src/tracker/EQConstants.cpp000066400000000000000000000026611324432207300214100ustar00rootroot00000000000000/* * tracker/EQConstants.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "EQConstants.h" #include "math.h" #define p(e) ldexp(0x10558, e-4*4) const float EQConstants::EQ3bands[3] = { p(5), // 32 Hz p(9), // 522 Hz p(12), // 4181.5 Hz }; const float EQConstants::EQ3bandwidths[3] = { 170.0f, 600.0f, 1000.0f }; const float EQConstants::EQ10bands[10] = { p(3), // 8 Hz p(4), // 16 Hz p(5), // 32 Hz p(6), // 65 Hz p(7), // 130 Hz p(8), // 261 Hz p(9), // 522 Hz p(10), // 1 kHz p(11), // 2 kHz p(12), // 4181.5 Hz }; const float EQConstants::EQ10bandwidths[10] = { 16, p(3)*1.5f, p(4)*1.5f, p(5)*1.5f, p(6)*1.5f, p(7)*1.5f, p(8)*1.0f, p(9)*1.0f, 600.0f, 800.0f }; MilkyTracker-1.02.00/src/tracker/EQConstants.h000066400000000000000000000017621324432207300210560ustar00rootroot00000000000000/* * tracker/EQConstants.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #ifndef __EQCONSTANTS_H__ #define __EQCONSTANTS_H__ class EQConstants { public: static const float EQ3bands[3]; static const float EQ3bandwidths[3]; static const float EQ10bands[10]; static const float EQ10bandwidths[10]; }; #endif MilkyTracker-1.02.00/src/tracker/EditModes.h000066400000000000000000000020571324432207300205270ustar00rootroot00000000000000/* * tracker/EditModes.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * EditModes.h * MilkyTracker * * Created by Peter Barth on Thu May 19 2005. * */ #ifndef __EDITMODES_H__ #define __EDITMODES_H__ enum EditModes { EditModeMilkyTracker, EditModeFastTracker }; enum ScrollModes { ScrollModeToEnd, ScrollModeToCenter, ScrollModeStayInCenter }; #endif MilkyTracker-1.02.00/src/tracker/EditorBase.cpp000066400000000000000000000042131324432207300212220ustar00rootroot00000000000000/* * tracker/EditorBase.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * EditorBase.cpp * MilkyTracker * * Created by Peter Barth on 26.11.07. * */ #include "EditorBase.h" #include "SimpleVector.h" void EditorBase::notifyListener(EditorNotifications notification) { for (pp_int32 i = 0; i < notificationListeners->size(); i++) notificationListeners->get(i)->editorNotification(this, notification); } EditorBase::EditorBase() : lazyUpdateNotifications(false), module(NULL) { notificationListeners = new PPSimpleVector(16, false); } EditorBase::~EditorBase() { notifyListener(EditorDestruction); delete notificationListeners; } void EditorBase::addNotificationListener(EditorNotificationListener* listener) { // remove it first, no duplicate event listener entries allowed removeNotificationListener(listener); notificationListeners->add(listener); } bool EditorBase::removeNotificationListener(EditorNotificationListener* listener) { for (pp_int32 i = 0; i < notificationListeners->size(); i++) { // found? listeners can not be contained in the list multiple times // see addEditorNotificationListener() if (notificationListeners->get(i) == listener) { notificationListeners->remove(i); return true; } } return false; } void EditorBase::enterCriticalSection() { notifyListener(NotificationPrepareCritical); } void EditorBase::leaveCriticalSection() { notifyListener(NotificationUnprepareCritical); } MilkyTracker-1.02.00/src/tracker/EditorBase.h000066400000000000000000000052521324432207300206730ustar00rootroot00000000000000/* * tracker/EditorBase.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * EditorBase.h * MilkyTracker * * Created by Peter Barth on 26.11.07. * */ #ifndef __EDITORBASE_H__ #define __EDITORBASE_H__ #include "BasicTypes.h" class XModule; template class PPSimpleVector; class EditorBase { public: enum EditorNotifications { EditorDestruction, NotificationReload, NotificationChangesValidate, NotificationChanges, NotificationUpdateNoChanges, NotificationFeedUndoData, NotificationFetchUndoData, NotificationUndoRedo, NotificationPrepareLengthy, NotificationUnprepareLengthy, NotificationPrepareCritical, NotificationUnprepareCritical }; class EditorNotificationListener { public: virtual ~EditorNotificationListener() {} virtual void editorNotification(EditorBase* sender, EditorNotifications notification) = 0; }; private: PPSimpleVector* notificationListeners; bool lazyUpdateNotifications; protected: XModule* module; EditorBase(); void attachModule(XModule* module) { this->module = module; } void notifyListener(EditorNotifications notification); // this must be called when any of the editors changes the module // that will affect pointers and/or sizes in the module structure // when a module is currently playing it will be stopped void enterCriticalSection(); // continue playing module after a critical change/update void leaveCriticalSection(); public: virtual ~EditorBase(); void addNotificationListener(EditorNotificationListener* listener); bool removeNotificationListener(EditorNotificationListener* listener); // the update notification type // I'm using this to provoke update notifications which don't cause screen refreshes void setLazyUpdateNotifications(bool lazyUpdateNotifications) { this->lazyUpdateNotifications = lazyUpdateNotifications; } bool getLazyUpdateNotifications() const { return lazyUpdateNotifications; } XModule* getModule() { return module; } }; #endif MilkyTracker-1.02.00/src/tracker/EnvelopeContainer.cpp000066400000000000000000000066601324432207300226310ustar00rootroot00000000000000/* * tracker/EnvelopeContainer.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * EnvelopeContainer.cpp * MilkyTracker * * Created by Peter Barth on 20.06.05. * */ #include "EnvelopeContainer.h" #include "XModule.h" #include "PatternTools.h" EnvelopeContainer::EnvelopeContainer(pp_int32 num) : envelopes(NULL) { envelopes = new TEnvelope[num]; memset(envelopes, 0, num*sizeof(TEnvelope)); numEnvelopes = num; } EnvelopeContainer::~EnvelopeContainer() { delete[] envelopes; } void EnvelopeContainer::store(pp_int32 index, const TEnvelope& env) { if (index < 0 || index > numEnvelopes - 1) return; envelopes[index] = env; } const TEnvelope* EnvelopeContainer::restore(pp_int32 index) { if (index < 0 || index > numEnvelopes - 1) return NULL; return envelopes + index; } PPString EnvelopeContainer::encodeEnvelope(const TEnvelope& env) { char buffer[10]; // Convert number of points PatternTools::convertToHex(buffer, env.num, 2); PPString str = buffer; // Sustain point PatternTools::convertToHex(buffer, env.sustain, 2); str.append(buffer); // Loop start PatternTools::convertToHex(buffer, env.loops, 2); str.append(buffer); // Loop end PatternTools::convertToHex(buffer, env.loope, 2); str.append(buffer); // Loop type PatternTools::convertToHex(buffer, env.type, 2); str.append(buffer); // Loop speed PatternTools::convertToHex(buffer, env.speed, 2); str.append(buffer); for (pp_int32 i = 0; i < env.num; i++) { // X-coordinate PatternTools::convertToHex(buffer, (env.env[i][0]>>8)&0xFF, 2); str.append(buffer); PatternTools::convertToHex(buffer, env.env[i][0]&0xFF, 2); str.append(buffer); // Y-coordinate PatternTools::convertToHex(buffer, (env.env[i][1]>>8)&0xFF, 2); str.append(buffer); PatternTools::convertToHex(buffer, env.env[i][1]&0xFF, 2); str.append(buffer); } return str; } static pp_uint8 getNibble(const char* str) { if (*str >= '0' && *str <= '9') return (*str - '0'); if (*str >= 'A' && *str <= 'F') return (*str - 'A' + 10); if (*str >= 'a' && *str <= 'f') return (*str - 'a' + 10); return 0; } static pp_uint8 getByte(const char* str) { return (getNibble(str)<<4) + getNibble(str+1); } TEnvelope EnvelopeContainer::decodeEnvelope(const PPString& str) { TEnvelope env; const char* ptr = str; env.num = getByte(ptr); ptr+=2; env.sustain = getByte(ptr); ptr+=2; env.loops = getByte(ptr); ptr+=2; env.loope = getByte(ptr); ptr+=2; env.type = getByte(ptr); ptr+=2; env.speed = getByte(ptr); ptr+=2; for (pp_int32 i = 0; i < env.num; i++) { pp_uint16 b1 = getByte(ptr); pp_uint16 b2 = getByte(ptr+2); env.env[i][0] = (b1 << 8) + b2; b1 = getByte(ptr+4); b2 = getByte(ptr+6); env.env[i][1] = (b1 << 8) + b2; ptr+=8; } return env; } MilkyTracker-1.02.00/src/tracker/EnvelopeContainer.h000066400000000000000000000024761324432207300222770ustar00rootroot00000000000000/* * tracker/EnvelopeContainer.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * EnvelopeContainer.h * MilkyTracker * * Created by Peter Barth on 20.06.05. * */ #ifndef ENVELOPECONTAINER__H #define ENVELOPECONTAINER__H #include "BasicTypes.h" struct TEnvelope; class EnvelopeContainer { private: TEnvelope* envelopes; pp_int32 numEnvelopes; public: EnvelopeContainer(pp_int32 num); ~EnvelopeContainer(); void store(pp_int32 index, const TEnvelope& env); const TEnvelope* restore(pp_int32 index); static PPString encodeEnvelope(const TEnvelope& env); static TEnvelope decodeEnvelope(const PPString& str); }; #endif MilkyTracker-1.02.00/src/tracker/EnvelopeEditor.cpp000066400000000000000000000264241324432207300221350ustar00rootroot00000000000000/* * tracker/EnvelopeEditor.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * EnvelopeEditor.cpp * MilkyTracker * * Created by Peter Barth on 25.11.07. * */ #include "EnvelopeEditor.h" #include "SimpleVector.h" #include "FilterParameters.h" EnvelopeEditor::ClipBoard::ClipBoard() : envelopeCopy(NULL) { } EnvelopeEditor::ClipBoard::~ClipBoard() { delete envelopeCopy; } void EnvelopeEditor::ClipBoard::makeCopy(TEnvelope& envelope) { if (envelopeCopy == NULL) envelopeCopy = new TEnvelope; *envelopeCopy = envelope; } void EnvelopeEditor::ClipBoard::paste(TEnvelope& envelope) { if (envelopeCopy) envelope = *envelopeCopy; } void EnvelopeEditor::prepareUndo() { if (envelope == NULL) return; delete before; before = new EnvelopeUndoStackEntry(*envelope); } bool EnvelopeEditor::finishUndo() { EnvelopeUndoStackEntry after(*envelope); if (*before != after) { if (undoStack) { undoStack->Push(*before); undoStack->Push(after); undoStack->Pop(); } notifyListener(NotificationChanges); } return true; } void EnvelopeEditor::revoke(const EnvelopeUndoStackEntry* stackEntry) { stackEntry->GetEnvelope(*envelope); notifyListener(NotificationUndoRedo); notifyListener(NotificationChanges); } EnvelopeEditor::EnvelopeEditor() : EditorBase(), envelope(NULL), envelopeType(EnvelopeTypeVolume), startSelection(false), selectionIndex(-1), before(NULL), undoStack(NULL) { // Undo history undoHistory = new UndoHistory(UNDOHISTORYSIZE_ENVELOPEEDITOR); } EnvelopeEditor::~EnvelopeEditor() { delete undoHistory; delete undoStack; delete before; } void EnvelopeEditor::attachEnvelope(TEnvelope* envelope, XModule* module) { if (envelope != this->envelope) resetSelection(); if (envelope) { // --------- update undo history information -------------------- if (undoStack) { // if the undo stack is empty, we don't need to save current undo stack if (!undoStack->IsEmpty() || !undoStack->IsTop()) { undoStack = undoHistory->getUndoStack(envelope, this->envelope, undoStack); } // delete it if it's empty else { delete undoStack; undoStack = NULL; undoStack = undoHistory->getUndoStack(envelope, NULL, NULL); } } // couldn't get any from history, create new one if (!undoStack) { undoStack = new PPUndoStack(UNDODEPTH_ENVELOPEEDITOR); } } attachModule(module); this->envelope = envelope; notifyListener(NotificationReload); } bool EnvelopeEditor::isEmptyEnvelope() const { return (envelope == NULL || envelope->num == 0); } void EnvelopeEditor::reset() { if (undoHistory) delete undoHistory; if (undoStack) { delete undoStack; undoStack = NULL; undoStack = new PPUndoStack(UNDODEPTH_ENVELOPEEDITOR); } undoHistory = new UndoHistory(UNDOHISTORYSIZE_ENVELOPEEDITOR); } void EnvelopeEditor::makeCopy() { if (!canCopy()) return; ClipBoard::getInstance()->makeCopy(*envelope); } void EnvelopeEditor::pasteCopy() { prepareUndo(); ClipBoard::getInstance()->paste(*envelope); finishUndo(); } void EnvelopeEditor::pasteOther(const TEnvelope& env) { prepareUndo(); *envelope = env; resetSelection(); finishUndo(); } bool EnvelopeEditor::canCopy() const { return (envelope && envelope->num >= 2); } void EnvelopeEditor::undo() { if (undoStack->IsEmpty()) return; if (undoStack) { revoke(undoStack->Pop()); } } void EnvelopeEditor::redo() { if (undoStack->IsTop()) return; if (undoStack) { revoke(undoStack->Advance()); } } void EnvelopeEditor::startSelectionDragging(pp_int32 index) { if (index != -1) { prepareUndo(); selectionIndex = index; startSelection = true; } } void EnvelopeEditor::endSelectionDragging() { if (startSelection) { startSelection = false; finishUndo(); } } pp_int32 EnvelopeEditor::getHorizontalExtent() const { if (envelope == NULL) return -1; if (envelope->num == 0) return -1; pp_int32 max = envelope->env[0][0]; for (pp_int32 i = 1; i < envelope->num; i++) if (envelope->env[i][0] > max) max = envelope->env[i][0]; return max; } void EnvelopeEditor::setEnvelopePoint(pp_int32 index, pp_int32 x, pp_int32 y) { if (envelope == NULL) return; if (envelope->num == 0) return; if (index == -1) return; if (index == 0) { if (x > 0) x = 0; } if (index > 0) { if (x < envelope->env[index - 1][0] + 1) x = envelope->env[index - 1][0] + 1; if (index < envelope->num - 1) { if (x > envelope->env[index + 1][0] - 1) x = envelope->env[index + 1][0] - 1; } } if (x < 0) x = 0; if (y < 0) y = 0; if (y > 256) y = 256; envelope->env[index][0] = (pp_uint16)x; envelope->env[index][1] = (pp_uint16)y; } void EnvelopeEditor::enableEnvelope(bool b) { prepareUndo(); if (envelope) { // clear old flag envelope->type &= ~1; // set new flag if (b) envelope->type |= 1; } finishUndo(); } bool EnvelopeEditor::isEnvelopeEnabled() const { if (envelope == NULL) return false; return (envelope->type & 1) != 0; } void EnvelopeEditor::enableSustain(bool b) { prepareUndo(); if (envelope) { // clear old flag envelope->type &= ~2; // set new flag if (b) envelope->type |= 2; } finishUndo(); } bool EnvelopeEditor::isSustainEnabled() const { if (envelope == NULL) return false; return (envelope->type & 2) != 0; } pp_int32 EnvelopeEditor::getSustainPtIndex() const { if (envelope == NULL) return 0; return envelope->sustain; } void EnvelopeEditor::enableLoop(bool b) { prepareUndo(); if (envelope) { // clear old flag envelope->type &= ~4; // set new flag if (b) envelope->type |= 4; } finishUndo(); } bool EnvelopeEditor::isLoopEnabled() const { if (envelope == NULL) return false; return (envelope->type & 4) != 0; } pp_int32 EnvelopeEditor::getLoopStartPtIndex() const { if (envelope == NULL) return 0; return envelope->loops; } pp_int32 EnvelopeEditor::getLoopEndPtIndex() const { if (envelope == NULL) return 0; return envelope->loope; } void EnvelopeEditor::selectNextSustainPoint() { prepareUndo(); if (envelope && envelope->sustain < envelope->num - 1) envelope->sustain++; finishUndo(); } void EnvelopeEditor::selectPreviousSustainPoint() { prepareUndo(); if (envelope && envelope->sustain > 0) envelope->sustain--; finishUndo(); } void EnvelopeEditor::selectNextLoopStartPoint() { prepareUndo(); if (envelope && envelope->loops < envelope->num - 1) envelope->loops++; if (envelope->loops>envelope->loope) envelope->loops = envelope->loope; finishUndo(); } void EnvelopeEditor::selectPreviousLoopStartPoint() { prepareUndo(); if (envelope && envelope->loops > 0) envelope->loops--; if (envelope->loops>envelope->loope) envelope->loops = envelope->loope; finishUndo(); } void EnvelopeEditor::selectNextLoopEndPoint() { prepareUndo(); if (envelope && envelope->loope < envelope->num - 1) envelope->loope++; if (envelope->loopeloops) envelope->loope = envelope->loops; finishUndo(); } void EnvelopeEditor::selectPreviousLoopEndPoint() { prepareUndo(); if (envelope && envelope->loope > 0) envelope->loope--; if (envelope->loopeloops) envelope->loope = envelope->loops; finishUndo(); } void EnvelopeEditor::deletePoint() { if (envelope == NULL) return; if (envelope->num <= 2) return; if (selectionIndex == -1) return; prepareUndo(); for (pp_int32 i = selectionIndex; i < envelope->num - 1; i++) { envelope->env[i][0] = envelope->env[i+1][0]; envelope->env[i][1] = envelope->env[i+1][1]; } envelope->num--; if (envelope->loops > selectionIndex) envelope->loops--; if (envelope->loops >= envelope->num) envelope->loops = envelope->num-1; if (envelope->loope > selectionIndex) envelope->loope--; if (envelope->loope >= envelope->num) envelope->loope = envelope->num-1; if (envelope->sustain > selectionIndex) envelope->sustain--; if (envelope->sustain >= envelope->num) envelope->sustain = envelope->num-1; if (selectionIndex >= envelope->num) selectionIndex = envelope->num-1; finishUndo(); } void EnvelopeEditor::addPoint() { if (envelope == NULL) return; if (envelope->num >= 12) return; pp_int16 points[12][2]; if (selectionIndex >= 0 && selectionIndex < envelope->num - 1) { if (envelope->env[selectionIndex + 1][0] - envelope->env[selectionIndex][0] < 2) return; // Insufficient space on x-axis prepareUndo(); pp_int32 i = 0; for (i = 0; i <= selectionIndex; i++) { points[i][0] = envelope->env[i][0]; points[i][1] = envelope->env[i][1]; } if (envelope->loops > selectionIndex) envelope->loops++; if (envelope->loope > selectionIndex) envelope->loope++; if (envelope->sustain > selectionIndex) envelope->sustain++; for (i = selectionIndex + 2; i <= envelope->num; i++) { points[i][0] = envelope->env[i-1][0]; points[i][1] = envelope->env[i-1][1]; } selectionIndex++; envelope->num++; points[selectionIndex][0] = (envelope->env[selectionIndex-1][0] + envelope->env[selectionIndex][0]) / 2; points[selectionIndex][1] = (envelope->env[selectionIndex-1][1] + envelope->env[selectionIndex][1]) / 2; for (i = 0; i < envelope->num; i++) { envelope->env[i][0] = points[i][0]; envelope->env[i][1] = points[i][1]; } } else { prepareUndo(); if (envelope->num) { envelope->env[envelope->num][0] = envelope->env[envelope->num-1][0] + 10; envelope->env[envelope->num][1] = envelope->env[envelope->num-1][1]; } else { envelope->env[0][0] = 0; envelope->env[0][1] = 128; envelope->env[1][0] = 10; envelope->env[1][1] = 128; envelope->num++; } envelope->num++; } finishUndo(); } void EnvelopeEditor::tool_xScaleEnvelope(const FilterParameters* par) { prepareUndo(); float scale = par->getParameter(0).floatPart; for (pp_int32 i = 0; i < envelope->num; i++) { envelope->env[i][0] = (pp_int16)(envelope->env[i][0]*scale); } finishUndo(); } void EnvelopeEditor::tool_yScaleEnvelope(const FilterParameters* par) { prepareUndo(); float scale = par->getParameter(0).floatPart; pp_int32 i; switch (getEnvelopeType()) { case EnvelopeEditor::EnvelopeTypeVolume: for (i = 0; i < envelope->num; i++) { pp_int16 fy = (pp_int16)(envelope->env[i][1]*scale); if (fy < 0) fy = 0; if (fy > 256) fy = 256; envelope->env[i][1] = fy; } break; case EnvelopeEditor::EnvelopeTypePanning: for (i = 0; i < envelope->num; i++) { pp_int16 fy = (pp_int16)((envelope->env[i][1]-128)*scale) + 128; if (fy < 0) fy = 0; if (fy > 256) fy = 256; envelope->env[i][1] = fy; } break; } finishUndo(); } MilkyTracker-1.02.00/src/tracker/EnvelopeEditor.h000066400000000000000000000101031324432207300215650ustar00rootroot00000000000000/* * tracker/EnvelopeEditor.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * EnvelopeEditor.h * MilkyTracker * * Created by Peter Barth on 25.11.07. * */ #ifndef __ENVELOPEEDITOR_H__ #define __ENVELOPEEDITOR_H__ #include "EditorBase.h" #include "Undo.h" #include "Singleton.h" struct TEnvelope; class FilterParameters; class EnvelopeEditor : public EditorBase { public: enum EnvelopeTypes { EnvelopeTypeVolume = 0, EnvelopeTypePanning = 1 }; private: class ClipBoard : public PPSingleton { private: TEnvelope* envelopeCopy; ClipBoard(); public: ~ClipBoard(); void makeCopy(TEnvelope& envelope); void paste(TEnvelope& envelope); bool isEmpty() const { return envelopeCopy == NULL; } friend class PPSingleton; }; TEnvelope* envelope; EnvelopeTypes envelopeType; // selection bool startSelection; pp_int32 selectionIndex; // undo/redo information EnvelopeUndoStackEntry* before; PPUndoStack* undoStack; UndoHistory* undoHistory; void prepareUndo(); bool finishUndo(); // revoke changes void revoke(const EnvelopeUndoStackEntry* stackEntry); public: EnvelopeEditor(); virtual ~EnvelopeEditor(); void attachEnvelope(TEnvelope* envelope, XModule* module); const TEnvelope* getEnvelope() const { return envelope; } bool isValidEnvelope() const { return envelope != NULL; } bool isEmptyEnvelope() const; void setEnvelopeType(EnvelopeTypes envelopeType) { this->envelopeType = envelopeType; } EnvelopeTypes getEnvelopeType() const { return envelopeType; } void reset(); void setSelectionIndex(pp_int32 selectionIndex) { this->selectionIndex = selectionIndex; } pp_int32& getSelectionIndex() { return selectionIndex; } void resetSelection() { selectionIndex = -1; } // --- kinda clip board -------------------------------------------------- void makeCopy(); void pasteCopy(); void pasteOther(const TEnvelope& env); bool canCopy() const; bool canPaste() const { return !ClipBoard::getInstance()->isEmpty(); } // --- Multilevel UNDO / REDO -------------------------------------------- // undo last changes void undo(); // redo last changes void redo(); bool canUndo() const { if (envelope && undoStack) return !undoStack->IsEmpty(); else return false; } bool canRedo() const { if (envelope && undoStack) return !undoStack->IsTop(); else return false; } void startSelectionDragging(pp_int32 index); bool isSelectionDragging() const { return startSelection; } void endSelectionDragging(); pp_int32 getHorizontalExtent() const; // --- manipulate envelope ----------------------------------------------- void setEnvelopePoint(pp_int32 index, pp_int32 x, pp_int32 y); void enableEnvelope(bool b); bool isEnvelopeEnabled() const; void enableSustain(bool b); bool isSustainEnabled() const; pp_int32 getSustainPtIndex() const; void enableLoop(bool b); bool isLoopEnabled() const; pp_int32 getLoopStartPtIndex() const; pp_int32 getLoopEndPtIndex() const; void selectNextSustainPoint(); void selectPreviousSustainPoint(); void selectNextLoopStartPoint(); void selectPreviousLoopStartPoint(); void selectNextLoopEndPoint(); void selectPreviousLoopEndPoint(); void deletePoint(); void addPoint(); // filters (need the same signature) void tool_xScaleEnvelope(const FilterParameters* par); void tool_yScaleEnvelope(const FilterParameters* par); }; #endif MilkyTracker-1.02.00/src/tracker/EnvelopeEditorControl.cpp000066400000000000000000000657361324432207300235070ustar00rootroot00000000000000/* * tracker/EnvelopeEditorControl.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "EnvelopeEditorControl.h" #include "EnvelopeEditor.h" #include "Screen.h" #include "GraphicsAbstract.h" #include "Font.h" #include "ScrollBar.h" #include "ContextMenu.h" #include "XModule.h" #include "TrackerConfig.h" #include "DialogWithValues.h" #include "Tools.h" #include "FilterParameters.h" #define SCROLLBARWIDTH SCROLLBUTTONSIZE #define YMAX 256 #define XMAX 96 #ifdef __LOWRES__ #define POINTCATCHBOUNDS 7 #else #define POINTCATCHBOUNDS 5 #endif EnvelopeEditorControl::EnvelopeEditorControl(pp_int32 id, PPScreen* parentScreen, EventListenerInterface* eventListener, const PPPoint& location, const PPSize& size, bool border/*= true*/) : PPControl(id, parentScreen, eventListener, location, size), borderColor(&ourOwnBorderColor), envelopeEditor(NULL), envelope(NULL), showMarks(NULL) { this->border = border; ourOwnBorderColor.set(192, 192, 192); // default color backgroundColor.set(0, 0, 0); hScrollbar = new PPScrollbar(0, parentScreen, this, PPPoint(location.x, location.y + size.height - SCROLLBARWIDTH - 1), size.width - 1, true); xMax = XMAX; yMax = YMAX; currentPosition.x = currentPosition.y = -1; xScale = 256; showVCenter = false; startPos = 0; visibleWidth = size.width - 5; visibleHeight = size.height - SCROLLBARWIDTH - 5; adjustScrollbars(); caughtControl = NULL; controlCaughtByLMouseButton = controlCaughtByRMouseButton = false; showMarks = new ShowMark[TrackerConfig::maximumPlayerChannels]; clearShowMarks(); // build submenu subMenuAdvanced = new PPContextMenu(5, parentScreen, this, PPPoint(0,0), TrackerConfig::colorThemeMain); subMenuAdvanced->setSubMenu(true); subMenuAdvanced->addEntry("Scale X", MenuCommandIDXScale); subMenuAdvanced->addEntry("Scale Y", MenuCommandIDYScale); // Context PPMenu editMenuControl = new PPContextMenu(4, parentScreen, this, PPPoint(0,0), TrackerConfig::colorThemeMain, true); editMenuControl->addEntry("Undo", MenuCommandIDUndo); editMenuControl->addEntry("Redo", MenuCommandIDRedo); editMenuControl->addEntry("\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4", -1); editMenuControl->addEntry("Copy", MenuCommandIDCopy); editMenuControl->addEntry("Paste", MenuCommandIDPaste); editMenuControl->addEntry("\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4", -1); editMenuControl->addEntry("Advanced \x10", 0xFFFF, subMenuAdvanced); // Create tool handler responder toolHandlerResponder = new ToolHandlerResponder(*this); dialog = NULL; resetLastValues(); } EnvelopeEditorControl::~EnvelopeEditorControl() { if (envelopeEditor) envelopeEditor->removeNotificationListener(this); delete toolHandlerResponder; delete dialog; delete hScrollbar; delete editMenuControl; delete subMenuAdvanced; delete[] showMarks; } float EnvelopeEditorControl::calcXScale() { return 1.0f / ((float)(xMax*xScale/256) / (float)visibleWidth); } float EnvelopeEditorControl::calcYScale() { return 1.0f / ((float)yMax / (float)visibleHeight); } void EnvelopeEditorControl::updateCurrentPosition(const PPPoint& cp) { currentPosition.x = (pp_int32)((cp.x + startPos)*(1.0f / calcXScale())); currentPosition.y = (((pp_int32)((visibleHeight-cp.y)*(1.0f / calcYScale()))) * /*16645*/65536) >> 16; if (currentPosition.x < 0) currentPosition.x = 0; if (currentPosition.x > 65535) currentPosition.x = 65535; if (currentPosition.y < 0) currentPosition.y = 0; if (currentPosition.y > 256) currentPosition.y = 256; } void EnvelopeEditorControl::setScale(pp_int32 scale) { if (scale < 16 || scale > 1024) return; xScale = scale; adjustScrollbars(); } void EnvelopeEditorControl::paintGrid(PPGraphicsAbstract* g, pp_int32 xOffset, pp_int32 yOffset) { pp_int32 i; PPColor lineColor = TrackerConfig::colorThemeMain; lineColor.r>>=1; lineColor.g>>=1; lineColor.b>>=1; // Draw grid lines first float scaley = calcYScale(); float scalex = calcXScale(); // horizontal g->setColor(lineColor); /*for (i = 0; i <= yMax; i++) { if (!(i & 15)) { pp_int32 y1 = (pp_int32)(i*scaley); y1 = location.y + yOffset + visibleHeight - y1; if (!(i&31)) { g->setColor(lineColor); g->drawHLine(location.x + xOffset+1, location.x + xOffset + visibleWidth,y1); } } }*/ float sy = 0; while (sy < visibleHeight+(pp_int32)(31.0f*scaley)) { pp_int32 y1 = (pp_int32)sy; pp_int32 y = location.y + yOffset + visibleHeight - y1; g->drawHLine(location.x + xOffset+1, location.x + xOffset + visibleWidth,y); sy+=32.0f*scaley; } // vertical float sx = -(float)startPos; if (sx < 0) { pp_int32 ink = (pp_int32)((-sx)/(16.0f*scalex)) - 1; sx += ink*(16.0f*scalex); } while (sx < visibleWidth) { pp_int32 x1 = (pp_int32)sx; pp_int32 x = x1 + location.x + xOffset; g->drawVLine(location.y+3, location.y + yOffset + visibleHeight,x); sx+=16.0f*scalex; } g->setColor(255, 255, 255); sx = -(float)startPos; if (sx < 0) { pp_int32 ink = (pp_int32)((-sx)/(16.0f*scalex)) - 1; sx += ink*(16.0f*scalex); } i = 0; while (sx < visibleWidth) { pp_int32 x1 = (pp_int32)sx; pp_int32 x = x1 + location.x + xOffset; g->setPixel(x, location.y + yOffset + visibleHeight); if (!(i&1)) g->setPixel(x, location.y + yOffset + visibleHeight+1); sx+=2.0f*scalex; i++; } } void EnvelopeEditorControl::paint(PPGraphicsAbstract* g) { if (!isVisible()) return; pp_int32 xOffset = 2; pp_int32 yOffset = 2; g->setRect(location.x, location.y, location.x + size.width, location.y + size.height); g->setColor(backgroundColor); g->fill(); if (border) { drawBorder(g, *borderColor); } g->setRect(location.x+1, location.y+1, location.x+1 + size.width-2, location.y+1 + size.height-2); g->setColor(255, 255, 255); if (envelope == NULL) { PPFont* font = PPFont::getFont(PPFont::FONT_SYSTEM); g->setFont(font); PPString s("None selected"); g->drawString(s, location.x + size.width / 2 - font->getStrWidth(s) / 2, location.y + size.height / 2 - font->getCharHeight() / 2); return; } float scaley = calcYScale(); float scalex = calcXScale(); pp_int32 i; paintGrid(g, xOffset, yOffset); g->setColor(255, 255, 255); // vertical for (i = 0; i <= yMax; i++) { if (!(i & 15)) { pp_int32 y1 = (pp_int32)(i*scaley); y1 = location.y + yOffset + visibleHeight - y1; g->setPixel(location.x + xOffset, y1); if (!(i&31)) { g->setPixel(location.x + xOffset-1, y1); } } } /*// horizontal for (i = 0; i <= visibleWidth; i++) { pp_int32 i2 = i + startPos; pp_int32 x1 = i; pp_int32 x = x1 + location.x + xOffset; pp_int32 y1 = location.y + yOffset + visibleHeight - (pp_int32)(128*scaley); if (!(i2 & 3)) { g->setPixel(x, location.y + yOffset + visibleHeight); if (!(i2&31)) { g->setPixel(x, location.y + yOffset + visibleHeight + 1); } } }*/ // centered line for (i = 0; i <= visibleWidth; i++) { pp_int32 x1 = i; pp_int32 x = x1 + location.x + xOffset; pp_int32 y1 = location.y + yOffset + visibleHeight - (pp_int32)(128*scaley); if (showVCenter) { if (!(i&7)) g->setColor(128, 128, 128); else g->setColor(64, 64, 64); g->setPixel(x, y1); } } g->setColor(255, 255, 128); if (!envelope->num) { PPFont* font = PPFont::getFont(PPFont::FONT_SYSTEM); g->setFont(font); PPString s("No envelope"); g->drawString(s, location.x + size.width / 2 - font->getStrWidth(s) / 2, location.y + size.height / 2 - font->getCharHeight()); } for (i = 0; i < envelope->num - 1; i++) { pp_int32 x1 = (pp_int32)(envelope->env[i][0]*scalex); pp_int32 y1 = (pp_int32)(envelope->env[i][1]*scaley); pp_int32 x2 = (pp_int32)(envelope->env[i+1][0]*scalex); pp_int32 y2 = (pp_int32)(envelope->env[i+1][1]*scaley); x1+=location.x + xOffset - startPos; x2+=location.x + xOffset - startPos; y1 = location.y + yOffset + visibleHeight - y1; y2 = location.y + yOffset + visibleHeight - y2; g->drawAntialiasedLine(x1,y1,x2,y2); //g->drawLine(x1,y1,x2,y2); //g->setPixel(location.x + xOffset + x, location.y + yOffset + size.height - 4 - y); } // Showmarks g->setColor(255, 0, 255); for (pp_int32 sm = 0; sm < TrackerConfig::maximumPlayerChannels; sm++) { pp_int32 showMark = showMarks[sm].pos; if (!showMarks[sm].intensity || showMark == -1) continue; pp_int32 x = (pp_int32)(showMark*scalex) - startPos; g->drawVLine(location.y + yOffset, location.y + yOffset + visibleHeight + 2, location.x + xOffset + x); } for (i = 0; i < envelope->num; i++) { pp_int32 x1 = (pp_int32)(envelope->env[i][0]*scalex); pp_int32 y1 = (pp_int32)(envelope->env[i][1]*scaley); x1+=location.x + xOffset - startPos; y1 = location.y + yOffset + visibleHeight - y1; if ((envelope->type & 4) && (i == envelope->loops || i == envelope->loope)) { g->setColor(TrackerConfig::colorHighLight_1); for (pp_int32 j = 0; j < visibleHeight; j+=2) g->setPixel(x1, j + location.y + yOffset); if (i == envelope->loops) { g->setPixel(x1, location.y + yOffset); g->setPixel(x1, location.y + yOffset + 1); g->setPixel(x1+1, location.y + yOffset + 1); g->setPixel(x1-1, location.y + yOffset + 1); g->setPixel(x1, location.y + yOffset + 2); g->setPixel(x1+1, location.y + yOffset + 2); g->setPixel(x1-1, location.y + yOffset + 2); g->setPixel(x1+2, location.y + yOffset + 2); g->setPixel(x1-2, location.y + yOffset + 2); } if (i == envelope->loope) { g->setPixel(x1, location.y + visibleHeight + yOffset); g->setPixel(x1, location.y + visibleHeight + yOffset - 1); g->setPixel(x1+1, location.y + visibleHeight + yOffset - 1); g->setPixel(x1-1, location.y + visibleHeight + yOffset - 1); g->setPixel(x1, location.y + visibleHeight + yOffset - 2); g->setPixel(x1+1, location.y + visibleHeight + yOffset - 2); g->setPixel(x1-1, location.y + visibleHeight + yOffset - 2); g->setPixel(x1+2, location.y + visibleHeight + yOffset - 2); g->setPixel(x1-2, location.y + visibleHeight + yOffset - 2); } } if ((envelope->type & 2) && (i == envelope->sustain)) { g->setColor(255, 255, 255); for (pp_int32 j = 0; j < visibleHeight; j+=2) g->setPixel(x1, j + location.y + yOffset + 1); } /*pp_int32 extent = 1; if (i == selectionIndex) { g->setColor(255, 0, 0); extent = 2; } else*/ if (i != envelopeEditor->getSelectionIndex()) { const pp_int32 extent = 1; g->setColor(255, 255, 255); for (pp_int32 y = -extent; y <= extent; y++) for (pp_int32 x = -extent; x <= extent; x++) g->setPixel(x1+x, y1+y); } } // draw selected point always above the other points if (envelopeEditor->getSelectionIndex() != -1) { i = envelopeEditor->getSelectionIndex(); pp_int32 x1 = (pp_int32)(envelope->env[i][0]*scalex); pp_int32 y1 = (pp_int32)(envelope->env[i][1]*scaley); x1+=location.x + xOffset - startPos; y1 = location.y + yOffset + visibleHeight - y1; const pp_int32 extent = 2; g->setColor(255, 0, 0); for (pp_int32 y = -extent; y <= extent; y++) for (pp_int32 x = -extent; x <= extent; x++) g->setPixel(x1+x, y1+y); } if (currentPosition.x >= 0 && currentPosition.y >= 0) { PPFont* font = PPFont::getFont(PPFont::FONT_TINY); g->setFont(font); // loop markers above range text char buffer[32]; PPTools::convertToHex(buffer, (unsigned)currentPosition.x, 4); g->setColor(0, 0, 0); g->drawString(buffer, location.x + 3 + visibleWidth - font->getStrWidth(buffer), location.y + 4); g->setColor(255, 0, 255); g->drawString(buffer, location.x + 2 + visibleWidth - font->getStrWidth(buffer), location.y + 3); PPTools::convertToHex(buffer, (unsigned)currentPosition.y, 2); g->setColor(0, 0, 0); g->drawString(buffer, location.x + 3 + visibleWidth - font->getStrWidth(buffer), location.y + 4 + font->getCharHeight()+2); g->setColor(0, 255, 0); g->drawString(buffer, location.x + 2 + visibleWidth - font->getStrWidth(buffer), location.y + 3 + font->getCharHeight()+2); } hScrollbar->paint(g); } pp_int32 EnvelopeEditorControl::dispatchEvent(PPEvent* event) { if (eventListener == NULL) return -1; switch (event->getID()) { case eRMouseDown: { PPPoint* p = (PPPoint*)event->getDataPtr(); if (!hScrollbar->hit(*p)) invokeContextMenu(*p); else { if (controlCaughtByLMouseButton) break; controlCaughtByRMouseButton = true; caughtControl = hScrollbar; caughtControl->dispatchEvent(event); } break; } case eLMouseDown: { hasDragged = false; selectionTicker = 0; PPPoint* p = (PPPoint*)event->getDataPtr(); // Clicked on horizontal scrollbar -> route event to scrollbar and catch scrollbar control if (hScrollbar->hit(*p)) { if (controlCaughtByRMouseButton) break; controlCaughtByLMouseButton = true; caughtControl = hScrollbar; caughtControl->dispatchEvent(event); } // Clicked in client area else { PPPoint cp = *p; translateCoordinates(cp); if (cp.x > visibleWidth) break; if (cp.y > visibleHeight) break; pp_int32 rx = (pp_int32)(cp.x + startPos); pp_int32 ry = (pp_int32)((visibleHeight - cp.y)); pp_int32 i = selectEnvelopePoint(rx, ry); if (i != -1) { envelopeEditor->startSelectionDragging(i); } else { updateCurrentPosition(cp); } parentScreen->paintControl(this); } break; } case eMouseLeft: { currentPosition.x = currentPosition.y = -1; parentScreen->paintControl(this); break; } case eMouseMoved: { PPPoint* p = (PPPoint*)event->getDataPtr(); PPPoint cp = *p; translateCoordinates(cp); if (cp.y < 0 || cp.x > visibleWidth || cp.y < 0 || cp.y > visibleHeight) break; updateCurrentPosition(cp); parentScreen->paintControl(this); break; } case eRMouseUp: { controlCaughtByRMouseButton = false; if (caughtControl && !controlCaughtByLMouseButton && !controlCaughtByRMouseButton) { caughtControl->dispatchEvent(event); caughtControl = NULL; break; } break; } case eLMouseUp: if (envelopeEditor->isSelectionDragging()) envelopeEditor->endSelectionDragging(); controlCaughtByLMouseButton = false; if (caughtControl == NULL) break; if (!controlCaughtByLMouseButton && !controlCaughtByRMouseButton) { caughtControl->dispatchEvent(event); caughtControl = NULL; } break; case eLMouseDrag: { if (caughtControl && controlCaughtByLMouseButton) { caughtControl->dispatchEvent(event); break; } hasDragged = true; if (!envelopeEditor->isSelectionDragging()) break; PPPoint* p = (PPPoint*)event->getDataPtr(); PPPoint cp = *p; translateCoordinates(cp); setEnvelopePoint(envelopeEditor->getSelectionIndex(), cp.x + startPos, visibleHeight - cp.y); updateCurrentPosition(cp); adjustScrollbars(); parentScreen->paintControl(this); break; } case eLMouseRepeat: { if (caughtControl && controlCaughtByLMouseButton) { caughtControl->dispatchEvent(event); break; } // for slowing down mouse pressed events selectionTicker++; // no selection has been made or mouse hasn't been dragged if (!envelopeEditor->isSelectionDragging() || !hasDragged) { // mouse hasn't been dragged and selection ticker has reached threshold value if (!hasDragged && selectionTicker > 0) { PPPoint* p = (PPPoint*)event->getDataPtr(); if (!hScrollbar->hit(*p)) invokeContextMenu(*p); } } break; } case eRMouseDrag: { if (caughtControl && controlCaughtByRMouseButton) caughtControl->dispatchEvent(event); break; } case eRMouseRepeat: { if (caughtControl && controlCaughtByRMouseButton) caughtControl->dispatchEvent(event); break; } // mouse wheel case eMouseWheelMoved: { TMouseWheelEventParams* params = (TMouseWheelEventParams*)event->getDataPtr(); // Horizontal scrolling takes priority over vertical scrolling (zooming) and is // mutually exclusive so that we are less likely to accidentally zoom while scrolling // For compatibility for mice without horizontal scroll, SHIFT + vertical scroll is // treated as a synonym for horizontal scroll. bool shiftHeld = (::getKeyModifier() & KeyModifierSHIFT); if (params->deltaX || (params->deltaY && shiftHeld)) { pp_int32 delta = shiftHeld? params->deltaY : params->deltaX; // Deltas greater than 1 generate multiple events for scroll acceleration PPEvent e = delta > 0 ? PPEvent(eBarScrollDown) : PPEvent(eBarScrollUp); delta = abs(delta); delta = delta > 20 ? 20 : delta; while (delta) { handleEvent(reinterpret_cast(hScrollbar), &e); delta--; } } else if (params->deltaY) { if (invertMWheelZoom) { params->deltaY = -params->deltaY; } setScale(params->deltaY > 0 ? xScale << 1 : xScale >> 1); parentScreen->paintControl(this); } event->cancel(); break; } default: if (caughtControl == NULL) break; caughtControl->dispatchEvent(event); break; } return 0; } pp_int32 EnvelopeEditorControl::handleEvent(PPObject* sender, PPEvent* event) { // Horizontal scrollbar, scroll up (=left) if (sender == reinterpret_cast(hScrollbar) && event->getID() == eBarScrollUp) { if (startPos) startPos--; pp_int32 visibleItems = visibleWidth; float v = (float)(getMaxWidth() - visibleItems); hScrollbar->setBarPosition((pp_int32)(startPos*(65536.0f/v))); } // Horizontal scrollbar, scroll down (=right) else if (sender == reinterpret_cast(hScrollbar) && event->getID() == eBarScrollDown) { pp_int32 visibleItems = visibleWidth; if (startPos + visibleItems < (signed)getMaxWidth()) startPos++; float v = (float)(getMaxWidth() - visibleItems); hScrollbar->setBarPosition((pp_int32)(startPos*(65536.0f/v))); } // Horizontal scrollbar, position changed else if (sender == reinterpret_cast(hScrollbar) && event->getID() == eBarPosChanged) { float pos = hScrollbar->getBarPosition()/65536.0f; pp_int32 visibleItems = visibleWidth; float v = (float)(getMaxWidth() - visibleItems); if (v < 0.0f) v = 0.0f; startPos = (pp_uint32)(v*pos); } else if ((sender == reinterpret_cast(editMenuControl) || sender == reinterpret_cast(subMenuAdvanced)) && event->getID() == eCommand) { executeMenuCommand(*((pp_int32*)event->getDataPtr())); return 0; } parentScreen->paintControl(this); return 0; } void EnvelopeEditorControl::setSize(const PPSize& size) { PPControl::setSize(size); hScrollbar->setSize(size.width - 1); } void EnvelopeEditorControl::setLocation(const PPPoint& location) { PPControl::setLocation(location); hScrollbar->setLocation(PPPoint(location.x, location.y + size.height - SCROLLBARWIDTH - 1)); } void EnvelopeEditorControl::attachEnvelopeEditor(EnvelopeEditor* envelopeEditor) { if (this->envelopeEditor) this->envelopeEditor->removeNotificationListener(this); this->envelopeEditor = envelopeEditor; envelopeEditor->addNotificationListener(this); adjustScrollbars(); } pp_int32 EnvelopeEditorControl::getMaxWidth() { if (envelopeEditor == NULL) return visibleWidth; pp_int32 max = envelopeEditor->getHorizontalExtent(); if (max < 0) return visibleWidth; float scalex = calcXScale(); return (pp_int32)(scalex * max); } void EnvelopeEditorControl::adjustScrollbars() { float s = (float)visibleWidth / (float)getMaxWidth(); float olds = hScrollbar->getBarSize() / 65536.0f; hScrollbar->setBarSize((pp_int32)(s*65536.0f), false); s = hScrollbar->getBarSize() / 65536.0f; float scale = s / olds; float pos = hScrollbar->getBarPosition()/65536.0f; hScrollbar->setBarPosition((pp_int32)(pos*scale*65536.0f)); pos = hScrollbar->getBarPosition()/65536.0f; pp_int32 visibleItems = visibleWidth; float v = (float)(getMaxWidth() - visibleItems); startPos = (pp_uint32)(v*pos); if (startPos < 0) startPos = 0; } pp_int32 EnvelopeEditorControl::selectEnvelopePoint(pp_int32 x, pp_int32 y) { if (envelopeEditor == NULL || envelope == NULL) return -1; if (envelope->num == 0) return -1; float scaley = calcYScale(); float scalex = calcXScale(); if (envelopeEditor->getSelectionIndex() >= 0 && envelopeEditor->getSelectionIndex() < envelope->num) { pp_int32 i = envelopeEditor->getSelectionIndex(); pp_int32 ex = (pp_int32)(envelope->env[i][0]*scalex); pp_int32 ey = (pp_int32)(envelope->env[i][1]*scaley); if ((x - POINTCATCHBOUNDS <= ex) && (x + POINTCATCHBOUNDS >= ex) && (y - POINTCATCHBOUNDS <= ey) && (y + POINTCATCHBOUNDS >= ey)) { return i; } } for (pp_int32 i = 0; i < envelope->num; i++) { pp_int32 ex = (pp_int32)(envelope->env[i][0]*scalex); pp_int32 ey = (pp_int32)(envelope->env[i][1]*scaley); if ((x - POINTCATCHBOUNDS <= ex) && (x + POINTCATCHBOUNDS >= ex) && (y - POINTCATCHBOUNDS <= ey) && (y + POINTCATCHBOUNDS >= ey)) { return i; } } return -1; } void EnvelopeEditorControl::setEnvelopePoint(pp_int32 index, pp_int32 x, pp_int32 y) { // inverse transformation float scaley = 1.0f / calcYScale(); float scalex = 1.0f / calcXScale(); pp_int32 ex = (pp_int32)(x*scalex); pp_int32 ey = (pp_int32)(y*scaley); envelopeEditor->setEnvelopePoint(index, ex, ey); } void EnvelopeEditorControl::reset() { envelopeEditor->reset(); clearShowMarks(); } void EnvelopeEditorControl::validate() { if (envelope) { if (envelopeEditor->getSelectionIndex() >= envelope->num) envelopeEditor->setSelectionIndex(envelope->num-1); } } void EnvelopeEditorControl::clearShowMarks() { for (pp_int32 i = 0; i < TrackerConfig::maximumPlayerChannels; i++) { showMarks[i].pos = -1; showMarks[i].intensity = 0; showMarks[i].panning = 128; } } bool EnvelopeEditorControl::hasShowMarks() { for (pp_int32 i = 0; i < TrackerConfig::maximumPlayerChannels; i++) { if (showMarks[i].pos != -1) return true; } return false; } void EnvelopeEditorControl::invokeContextMenu(PPPoint p) { PPPoint cp = p; translateCoordinates(cp); if (cp.x > visibleWidth || cp.y > visibleHeight) return; editMenuControl->setLocation(p); editMenuControl->setState(MenuCommandIDUndo, !envelopeEditor->canUndo()); editMenuControl->setState(MenuCommandIDRedo, !envelopeEditor->canRedo()); editMenuControl->setState(MenuCommandIDPaste, !envelopeEditor->canPaste()); editMenuControl->setState(MenuCommandIDCopy, !envelopeEditor->canCopy()); subMenuAdvanced->setState(MenuCommandIDXScale, envelopeEditor->isEmptyEnvelope()); subMenuAdvanced->setState(MenuCommandIDYScale, envelopeEditor->isEmptyEnvelope()); parentScreen->setContextMenuControl(editMenuControl); } void EnvelopeEditorControl::executeMenuCommand(pp_int32 commandId) { switch (commandId) { // copy case MenuCommandIDCopy: { envelopeEditor->makeCopy(); notifyUpdate(); break; } // paste case MenuCommandIDPaste: envelopeEditor->pasteCopy(); break; case MenuCommandIDUndo: envelopeEditor->undo(); break; case MenuCommandIDRedo: envelopeEditor->redo(); break; case MenuCommandIDXScale: invokeToolParameterDialog(EnvelopeToolTypeScaleX); break; case MenuCommandIDYScale: invokeToolParameterDialog(EnvelopeToolTypeScaleY); break; } } // ----- some tools for modifying envelopes ---------------------------------- bool EnvelopeEditorControl::invokeToolParameterDialog(EnvelopeEditorControl::EnvelopeToolTypes type) { if (dialog) { delete dialog; dialog = NULL; } toolHandlerResponder->setEnvelopeToolType(type); switch (type) { case EnvelopeToolTypeScaleX: dialog = new DialogWithValues(parentScreen, toolHandlerResponder, PP_DEFAULT_ID, "Scale envelope along x-axis", DialogWithValues::ValueStyleEnterOneValue); static_cast(dialog)->setValueOneCaption("Enter scale in percent:"); static_cast(dialog)->setValueOneRange(0, 10000.0f, 2); static_cast(dialog)->setValueOne(lastValues.scaleEnvelope != -1.0f ? lastValues.scaleEnvelope : 100.0f); break; case EnvelopeToolTypeScaleY: dialog = new DialogWithValues(parentScreen, toolHandlerResponder, PP_DEFAULT_ID, "Scale envelope along y-axis", DialogWithValues::ValueStyleEnterOneValue); static_cast(dialog)->setValueOneCaption("Enter scale in percent:"); static_cast(dialog)->setValueOneRange(0, 10000.0f, 2); static_cast(dialog)->setValueOne(lastValues.scaleEnvelope != -1.0f ? lastValues.scaleEnvelope : 100.0f); break; } dialog->show(); return true; } bool EnvelopeEditorControl::invokeTool(EnvelopeToolTypes type) { if (envelope == NULL) return false; bool res = false; switch (type) { case EnvelopeToolTypeScaleX: { lastValues.scaleEnvelope = static_cast(dialog)->getValueOne(); FilterParameters par(1); par.setParameter(0, FilterParameters::Parameter(lastValues.scaleEnvelope / 100.0f)); envelopeEditor->tool_xScaleEnvelope(&par); break; } case EnvelopeToolTypeScaleY: { lastValues.scaleEnvelope = static_cast(dialog)->getValueOne(); FilterParameters par(1); par.setParameter(0, FilterParameters::Parameter(lastValues.scaleEnvelope / 100.0f)); envelopeEditor->tool_yScaleEnvelope(&par); break; } } return res; } void EnvelopeEditorControl::editorNotification(EditorBase* sender, EditorBase::EditorNotifications notification) { switch (notification) { case EnvelopeEditor::EditorDestruction: { envelopeEditor = NULL; break; } case EnvelopeEditor::NotificationReload: { startPos = 0; clearShowMarks(); this->envelope = envelopeEditor->getEnvelope(); adjustScrollbars(); break; } case EnvelopeEditor::NotificationChanges: { notifyUpdate(); notifyChanges(); break; } case EnvelopeEditor::NotificationUndoRedo: { adjustScrollbars(); validate(); notifyUpdate(); notifyChanges(); break; } default: break; } } EnvelopeEditorControl::ToolHandlerResponder::ToolHandlerResponder(EnvelopeEditorControl& theEnvelopeEditorControl) : envelopeEditorControl(theEnvelopeEditorControl) { } pp_int32 EnvelopeEditorControl::ToolHandlerResponder::ActionOkay(PPObject* sender) { envelopeEditorControl.invokeTool(envelopeToolType); return 0; } pp_int32 EnvelopeEditorControl::ToolHandlerResponder::ActionCancel(PPObject* sender) { return 0; } MilkyTracker-1.02.00/src/tracker/EnvelopeEditorControl.h000066400000000000000000000124451324432207300231410ustar00rootroot00000000000000/* * tracker/EnvelopeEditorControl.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #ifndef ENVELOPEEDITORCONTROL__H #define ENVELOPEEDITORCONTROL__H #include "BasicTypes.h" #include "EditorBase.h" #include "Control.h" #include "Event.h" class EnvelopeEditorControl : public PPControl, public EventListenerInterface, public EditorBase::EditorNotificationListener { private: PPColor ourOwnBorderColor; PPColor backgroundColor; bool border; const PPColor* borderColor; class PPScrollbar* hScrollbar; class PPControl* caughtControl; bool controlCaughtByLMouseButton, controlCaughtByRMouseButton; class PPContextMenu* editMenuControl; class PPContextMenu* subMenuAdvanced; class EnvelopeEditor* envelopeEditor; const struct TEnvelope* envelope; // extent pp_int32 xMax; pp_int32 yMax; PPPoint currentPosition; pp_int32 xScale; // panning envelopes show the zero axis bool showVCenter; pp_int32 startPos; pp_int32 visibleWidth; pp_int32 visibleHeight; bool hasDragged; bool invertMWheelZoom; // selection pp_int32 selectionTicker; // Envelope counters struct ShowMark { pp_int32 pos; pp_int32 intensity; pp_int32 panning; } *showMarks; enum MenuCommandIDs { MenuCommandIDXScale = 99, MenuCommandIDYScale }; public: EnvelopeEditorControl(pp_int32 id, PPScreen* parentScreen, EventListenerInterface* eventListener, const PPPoint& location, const PPSize& size, bool border = true); ~EnvelopeEditorControl(); void setColor(const PPColor& color) { backgroundColor = color; } void setBorderColor(const PPColor& color) { borderColor = &color; } void setxMax(pp_int32 xMax) { this->xMax = xMax; adjustScrollbars(); } pp_int32 getxMax() { return xMax; } void setyMax(pp_int32 yMax) { this->yMax = yMax; adjustScrollbars(); } pp_int32 getyMax() { return yMax; } void attachEnvelopeEditor(EnvelopeEditor* envelopeEditor); const TEnvelope* getEnvelope() { return envelope; } EnvelopeEditor* getEnvelopeEditor() { return envelopeEditor; } void setShowVCenter(bool b) { showVCenter = b; } void setInvertMWheelZoom(bool invert) { invertMWheelZoom = invert; } void paintGrid(PPGraphicsAbstract* graphics, pp_int32 xOffset, pp_int32 yOffset); // from PPControl virtual void paint(PPGraphicsAbstract* graphics); virtual pp_int32 dispatchEvent(PPEvent* event); virtual pp_int32 handleEvent(PPObject* sender, PPEvent* event); virtual void setSize(const PPSize& size); virtual void setLocation(const PPPoint& location); protected: virtual void translateCoordinates(PPPoint& cp) { PPControl::translateCoordinates(cp); cp.x -= 2; cp.y -= 2; } public: void reset(); // Showmarks void setShowMark(pp_int32 c, pp_int32 m, pp_int32 i = 256, pp_int32 p = 128) { showMarks[c].pos = m; showMarks[c].intensity = i; showMarks[c].panning = p; } pp_int32 getShowMarkPos(pp_int32 c) { return showMarks[c].pos; } void clearShowMarks(); bool hasShowMarks(); // set scale from 16 to 1024 void setScale(pp_int32 scale); pp_int32 getScale() { return xScale; } private: pp_int32 getMaxWidth(); void adjustScrollbars(); pp_int32 selectEnvelopePoint(pp_int32 x, pp_int32 y); void setEnvelopePoint(pp_int32 index, pp_int32 x, pp_int32 y); float calcXScale(); float calcYScale(); void updateCurrentPosition(const PPPoint& cp); void validate(); void invokeContextMenu(PPPoint p); void executeMenuCommand(pp_int32 commandId); public: enum EnvelopeToolTypes { EnvelopeToolTypeScaleX, EnvelopeToolTypeScaleY }; bool invokeToolParameterDialog(EnvelopeToolTypes type); private: // --- envelope tool responder class ToolHandlerResponder : public DialogResponder { private: EnvelopeEditorControl& envelopeEditorControl; EnvelopeToolTypes envelopeToolType; public: ToolHandlerResponder(EnvelopeEditorControl& theEnvelopeEditorControl); void setEnvelopeToolType(EnvelopeToolTypes type) { envelopeToolType = type; } EnvelopeToolTypes getEnvelopeToolType() { return envelopeToolType; } virtual pp_int32 ActionOkay(PPObject* sender); virtual pp_int32 ActionCancel(PPObject* sender); }; friend class ToolHandlerResponder; class PPDialogBase* dialog; ToolHandlerResponder* toolHandlerResponder; bool invokeTool(EnvelopeToolTypes type); // Last values struct TLastValues { float scaleEnvelope; }; TLastValues lastValues; void resetLastValues() { lastValues.scaleEnvelope = -1.0f; } void notifyUpdate() { PPEvent e(eUpdated); eventListener->handleEvent(reinterpret_cast(this), &e); } virtual void editorNotification(EditorBase* sender, EditorBase::EditorNotifications notification); }; #endif MilkyTracker-1.02.00/src/tracker/Equalizer.cpp000066400000000000000000000033431324432207300211450ustar00rootroot00000000000000/* * tracker/Equalizer.cpp * * Copyright 2009 David Ross (david_ross@hotmail.co.uk) * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "Equalizer.h" Equalizer::Equalizer(void) : xL1(0), xL2(0), xR1(0), xR2(0), yL1(0), yL2(0), yR1(0), yR2(0), b0(0), b1(0), b2(0), a0(0), a1(0), a2(0) { } Equalizer::~Equalizer(void) { } void Equalizer::CalcCoeffs(float centre, float width, float rate, float gain) { const double twopi = 6.283185307179586476925286766559; double w0 = twopi * centre / rate; double dw = twopi * width / rate; double m1 = tan(dw/2) / 1 + tan(dw/2); double m2 = (1 - pow(tan(w0/2), 2)) / (1 + pow(tan(w0/2), 2)); b0 = 1 + (gain - 1) * m1; b1 = 2 * m2 * (m1 - 1); b2 = 1 - m1 * (1 + gain); a0 = 1; a1 = b1; a2 = 1 - 2 * m1; } void Equalizer::Filter(double xL, double xR, double &yL, double &yR) { const double denorm = 1e-24f; yL = denorm + (b0*xL + b1*xL1 + b2*xL2 - a1*yL1 - a2*yL2); yR = denorm + (b0*xR + b1*xR1 + b2*xR2 - a1*yR1 - a2*yR2); xL2 = xL1; xL1 = xL; xR2 = xR1; xR1 = xR; yL2 = yL1; yL1 = yL; yR2 = yR1; yR1 = yR; } MilkyTracker-1.02.00/src/tracker/Equalizer.h000066400000000000000000000032731324432207300206140ustar00rootroot00000000000000/* * tracker/Equalizer.h * * Copyright 2009 David Ross (david_ross@hotmail.co.uk) * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #ifndef __EQUALIZER_H__ #define __EQUALIZER_H__ #include class Equalizer { public: Equalizer(void); ~Equalizer(void); void CalcCoeffs(float centre, float width, float rate, float gain); void Filter(double xL, double xR, double &yL, double &yR); // Calculate frequency from 20Hz to 20,000 Hz, a value of 0 to 1 should be passed (as is normally used in linear controls) static float CalcFreq(float f) { return (float)(pow(1000.0f,f)*20); } // Calculate Gain value, which is passed when you CalcCoeffs(), a value from 0 to 1 should be passed, this will result in a -12 to 12 dB cut \ boost. i.e. 0 = -12dB, 0.5 = 0dB, 1 = 12dB static float CalcGain(float val) { float dB = 12.0f * ((2.0f * val) - 1.0f); float gain = (float)pow(10.0f, (dB / 20.0f)); return (gain); } private: double b0, b1, b2; double a0, a1, a2; double xL1, xL2; double xR1, xR2; double yL1, yL2; double yR1, yR2; }; #endif MilkyTracker-1.02.00/src/tracker/FileExtProvider.cpp000066400000000000000000000125741324432207300222650ustar00rootroot00000000000000/* * tracker/FileExtProvider.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * FileExtProvider.cpp * milkytracker_universal * * Created by Peter Barth on 12.07.08. * */ #include "FileExtProvider.h" #include "Decompressor.h" const char* FileExtProvider::moduleExtensions[] = { "669","Composer669", "amf","Asylum Music Format", "ams","Velvet Studio/Extreme Tracker", "cba","Chuck Biscuits & Black Artist", "dbm","Digibooster Pro", "digi","Digibooster", "dsm","Digisound Interface Kit/Dynamic Studio", "dtm","Digital Tracker/Digitrekker", "far","Farandole Composer", "gdm","General Digimusic", "gmc","Game Music Creator", "imf","Imago Orpheus", "it","Impulse Tracker", "mdl","Digitrakker", "mod","Protracker", "mtm","Multitracker", "mxm","Cubic Tiny XM", "okt","Oktalyzer", "plm","DisorderTracker", "psm","Epic Megagames MASI", "ptm","Polytracker", "s3m","Screamtracker 3", "stm","Screamtracker 2", "ult","Ultratracker", "uni","MikMod", "xm","Fasttracker 2", NULL, NULL }; const char* FileExtProvider::instrumentExtensions[] = { "xi","FT2 Instruments", "pat","GUS Patches", NULL, NULL }; const char* FileExtProvider::sampleExtensions[] = { "wav","WAV uncompressed", "iff","IFF (un)compressed", "8svx","IFF (un)compressed", "aif","Apple AIFF uncompressed", "aiff","Apple AIFF uncompressed", NULL, NULL }; const char* FileExtProvider::patternExtensions[] = { "xp","FT2 Pattern", NULL, NULL }; const char* FileExtProvider::trackExtensions[] = { "xt","FT2 Track", NULL, NULL }; const char* FileExtProvider::colorExtensions[] = { "mct","MilkyTracker colors", NULL, NULL }; const char* const* FileExtProvider::fillList(const char* const* baseList, ExtensionTypes type) { tempExtensions.clear(); pp_int32 i = 0; while (true) { if (baseList[i] == NULL) break; tempExtensions.add(new PPString(baseList[i])); i++; } // misuse a decompressor to retrieve the file types it can decompress // they're not ordered though Decompressor decompressor(""); if (decompressor.doesServeHint((DecompressorBase::Hints)type)) { const PPSimpleVector& src = decompressor.getDescriptors((DecompressorBase::Hints)type); for (pp_int32 j = 0; j < src.size(); j++) { tempExtensions.add(new PPString(src.get(j)->extension)); tempExtensions.add(new PPString(src.get(j)->description)); i+=2; } } delete[] tempList; tempList = new char*[i+2]; pp_int32 j = 0; for (j = 0; j < i; j++) { tempList[j] = (char*)((const char*)(*tempExtensions.get(j))); } tempList[j++] = NULL; tempList[j++] = NULL; return (const char**)tempList; } const char* const* FileExtProvider::getModuleExtensions() { return fillList(moduleExtensions, ExtensionTypeModules); } const char* FileExtProvider::getModuleExtension(ModuleExtensions extension) { return moduleExtensions[extension*2]; } const char* FileExtProvider::getModuleDescription(ModuleExtensions extension) { return moduleExtensions[extension*2+1]; } const char* const* FileExtProvider::getInstrumentExtensions() { return fillList(instrumentExtensions, ExtensionTypeInstruments); } const char* FileExtProvider::getInstrumentExtension(InstrumentExtensions extension) { return instrumentExtensions[extension*2]; } const char* FileExtProvider::getInstrumentDescription(InstrumentExtensions extension) { return instrumentExtensions[extension*2+1]; } const char* const* FileExtProvider::getSampleExtensions() { return fillList(sampleExtensions, ExtensionTypeSamples); } const char* FileExtProvider::getSampleExtension(SampleExtensions extension) { return sampleExtensions[extension*2]; } const char* FileExtProvider::getSampleDescription(SampleExtensions extension) { return sampleExtensions[extension*2+1]; } const char* const* FileExtProvider::getPatternExtensions() { return fillList(patternExtensions, ExtensionTypePatterns); } const char* FileExtProvider::getPatternExtension(PatternExtensions extension) { return patternExtensions[extension*2]; } const char* FileExtProvider::getPatternDescription(PatternExtensions extension) { return patternExtensions[extension*2+1]; } const char* const* FileExtProvider::getTrackExtensions() { return fillList(trackExtensions, ExtensionTypeTracks); } const char* FileExtProvider::getTrackExtension(TrackExtensions extension) { return trackExtensions[extension*2]; } const char* FileExtProvider::getTrackDescription(TrackExtensions extension) { return trackExtensions[extension*2+1]; } const char* const* FileExtProvider::getColorExtensions() { return colorExtensions; } const char* FileExtProvider::getColorExtension(ColorExtensions extension) { return colorExtensions[extension*2]; } const char* FileExtProvider::getColorDescription(ColorExtensions extension) { return colorExtensions[extension*2+1]; } MilkyTracker-1.02.00/src/tracker/FileExtProvider.h000066400000000000000000000074241324432207300217300ustar00rootroot00000000000000/* * tracker/FileExtProvider.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * FileExtProvider.h * milkytracker_universal * * Created by Peter Barth on 12.07.08. * */ #ifndef __FILEEXTPROVIDER_H__ #define __FILEEXTPROVIDER_H__ #include "BasicTypes.h" #include "SimpleVector.h" class FileExtProvider { private: enum ExtensionTypes { ExtensionTypeAll, ExtensionTypeModules, ExtensionTypeInstruments, ExtensionTypeSamples, ExtensionTypePatterns, ExtensionTypeTracks }; static const char* moduleExtensions[]; static const char* instrumentExtensions[]; static const char* sampleExtensions[]; static const char* patternExtensions[]; static const char* trackExtensions[]; static const char* colorExtensions[]; char** tempList; PPSimpleVector tempExtensions; const char* const* fillList(const char* const* baseList, ExtensionTypes type); public: FileExtProvider() : tempList(NULL) { } ~FileExtProvider() { delete[] tempList; } enum ModuleExtensions { ModuleExtension669, ModuleExtensionAMF, ModuleExtensionAMS, ModuleExtensionCBA, ModuleExtensionDBM, ModuleExtensionDIGI, ModuleExtensionDSM, ModuleExtensionDTM, ModuleExtensionFAR, ModuleExtensionGDM, ModuleExtensionGMC, ModuleExtensionIMF, ModuleExtensionIT, ModuleExtensionMDL, ModuleExtensionMOD, ModuleExtensionMTM, ModuleExtensionMXM, ModuleExtensionOKT, ModuleExtensionPLM, ModuleExtensionPSM, ModuleExtensionPTM, ModuleExtensionS3M, ModuleExtensionSTM, ModuleExtensionULT, ModuleExtensionUNI, ModuleExtensionXM, ModuleExtensionLAST, }; const char* const* getModuleExtensions(); const char* getModuleExtension(ModuleExtensions extension); const char* getModuleDescription(ModuleExtensions extension); enum InstrumentExtensions { InstrumentExtensionXI, InstrumentExtensionPAT, InstrumentExtensionLAST, }; const char* const* getInstrumentExtensions(); const char* getInstrumentExtension(InstrumentExtensions extension); const char* getInstrumentDescription(InstrumentExtensions extension); enum SampleExtensions { SampleExtensionWAV, SampleExtensionIFF, SampleExtension8SVX, SampleExtensionAIF, SampleExtensionAIFF, SampleExtensionLAST }; const char* const* getSampleExtensions(); const char* getSampleExtension(SampleExtensions extension); const char* getSampleDescription(SampleExtensions extension); enum PatternExtensions { PatternExtensionXP, PatternExtensionLAST }; const char* const* getPatternExtensions(); const char* getPatternExtension(PatternExtensions extension); const char* getPatternDescription(PatternExtensions extension); enum TrackExtensions { TrackExtensionXT, TrackExtensionLAST }; const char* const* getTrackExtensions(); const char* getTrackExtension(TrackExtensions extension); const char* getTrackDescription(TrackExtensions extension); enum ColorExtensions { ColorExtensionMCT, ColorExtensionLAST }; const char* const* getColorExtensions(); const char* getColorExtension(ColorExtensions extension); const char* getColorDescription(ColorExtensions extension); }; #endif MilkyTracker-1.02.00/src/tracker/FileIdentificator.cpp000066400000000000000000000064731324432207300225770ustar00rootroot00000000000000/* * tracker/FileIdentificator.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * FileIdentificator.cpp * MilkyTracker * * Created by Peter Barth on 03.05.05. * */ #include "FileIdentificator.h" #include "XMFile.h" #include "XModule.h" #include "SampleLoaderGeneric.h" #include "Decompressor.h" FileIdentificator::FileIdentificator(const PPSystemString& fileName) : fileName(fileName) { f = new XMFile(fileName); if (!f->isOpen()) { delete f; f = NULL; } } FileIdentificator::~FileIdentificator() { delete f; } FileIdentificator::FileTypes FileIdentificator::getFileType() { if (!isValid()) return FileTypeUnknown; // Check instruments first = sure thing if (isInstrument()) return FileTypeInstrument; // Check patterns and tracks second = sure thing if (isPattern()) return FileTypePattern; if (isTrack()) return FileTypeTrack; // Okay now check module, could go wrong because of several weak file type detections if (isModule()) return FileTypeModule; // check for packed file types last if (isCompressed()) return FileTypeCompressed; // Okay now check samples, if sample type can not be detected it will assume raw-sample and load if (isSample()) return FileTypeSample; return FileTypeUnknown; } bool FileIdentificator::isModule() { mp_ubyte buffer[2048]; f->seek(0); f->read(buffer, 1, 2048); return XModule::identifyModule(buffer) != NULL; } bool FileIdentificator::isInstrument() { char sig[32]; f->seek(0); f->read(sig, 1, 21); if (memcmp(sig,"GF1PATCH",8) == 0) return true; return memcmp(sig,"Extended Instrument: ",21) == 0; } bool FileIdentificator::isSample() { XModule* module = NULL; SampleLoaderGeneric sampleLoader(fileName, *module); return sampleLoader.identifySample(); } bool FileIdentificator::isPattern() { if ((f->size() - 4) % (32*5) != 0) return false; f->seek(0); mp_uword wtf = f->readWord(); if (wtf != 1) return false; mp_uword numRows = f->readWord(); if (numRows > 256) return false; PPSystemString ext = fileName.getExtension(); ext.toUpper(); if (ext.compareTo(".XP") != 0) return false; return true; } bool FileIdentificator::isTrack() { if ((f->size() - 4) % (32*5) != 0) return false; f->seek(0); mp_uword wtf = f->readWord(); if (wtf != 1) return false; mp_uword numRows = f->readWord(); if (numRows > 256) return false; PPSystemString ext = fileName.getExtension(); ext.toUpper(); if (ext.compareTo(".XT") != 0) return false; return true; } bool FileIdentificator::isCompressed() { Decompressor decompressor(fileName); f->seek(0); return decompressor.identify(*f); } MilkyTracker-1.02.00/src/tracker/FileIdentificator.h000066400000000000000000000027361324432207300222420ustar00rootroot00000000000000/* * tracker/FileIdentificator.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * FileIdentificator.h * MilkyTracker * * Created by Peter Barth on 03.05.05. * */ #ifndef __FILEINDENTIFICATOR_H__ #define __FILEINDENTIFICATOR_H__ #include "BasicTypes.h" class XMFile; class FileIdentificator { public: enum FileTypes { FileTypeUnknown, FileTypeModule, FileTypeInstrument, FileTypeSample, FileTypePattern, FileTypeTrack, FileTypeCompressed }; private: PPSystemString fileName; XMFile* f; bool isModule(); bool isInstrument(); bool isSample(); bool isPattern(); bool isTrack(); bool isCompressed(); public: FileIdentificator(const PPSystemString& fileName); ~FileIdentificator(); bool isValid() { return f != NULL; } FileTypes getFileType(); }; #endif MilkyTracker-1.02.00/src/tracker/FileTypes.h000066400000000000000000000027101324432207300205520ustar00rootroot00000000000000/* * tracker/FileTypes.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * FileTypes.h * milkytracker_universal * * Created by Peter Barth on 12.07.08. * */ #ifndef __FILETYPES_H__ #define __FILETYPES_H__ #include "BasicTypes.h" struct FileTypes { enum Types { FileTypeAllFiles, FileTypeSongAllModules, FileTypeSongMOD, FileTypeSongXM, FileTypeSongWAV, FileTypePatternXP, FileTypeTrackXT, FileTypeSongAllInstruments, FileTypeInstrumentXI, FileTypeSongAllSamples, FileTypeSampleWAV, FileTypeSampleIFF }; Types type; FileTypes() : type(FileTypeAllFiles) { } FileTypes(Types type) : type(type) { } FileTypes(pp_int32 type) : type((Types)type) { } operator pp_int32() const { return (pp_int32)type; } }; #endif MilkyTracker-1.02.00/src/tracker/FilterParameters.h000066400000000000000000000041611324432207300221210ustar00rootroot00000000000000/* * tracker/FilterParameters.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * FilterParameters.h * MilkyTracker * * Created by Peter Barth on 25.11.07. * */ #ifndef __FILTERPARAMETERS_H__ #define __FILTERPARAMETERS_H__ class FilterParameters { public: union Parameter { float floatPart; pp_int32 intPart; Parameter() { memset(this, 0, sizeof(Parameter)); } Parameter(const Parameter& src) { memcpy(this, &src, sizeof(Parameter)); } explicit Parameter(float value) : floatPart(value) { } explicit Parameter(pp_int32 value) : intPart(value) { } }; private: Parameter* parameters; pp_int32 numParameters; public: FilterParameters(pp_int32 numParameters) : numParameters(numParameters), parameters(new Parameter[numParameters]) { } // Construction FilterParameters(const FilterParameters& par) { numParameters = par.numParameters; parameters = new Parameter[numParameters]; for (pp_int32 i = 0; i < numParameters; i++) parameters[i] = par.parameters[i]; } ~FilterParameters() { delete[] parameters; } void setParameter(pp_int32 index, const Parameter& par) { if (index >= 0 && index < numParameters) parameters[index] = par; } Parameter getParameter(pp_int32 index) const { if (index >= 0 && index < numParameters) return parameters[index]; return Parameter(); } pp_int32 getNumParameters() const { return numParameters; } }; #endif MilkyTracker-1.02.00/src/tracker/GlobalColorConfig.cpp000066400000000000000000000200441324432207300225260ustar00rootroot00000000000000/* * tracker/GlobalColorConfig.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * GlobalColorConfig.cpp * MilkyTracker * * Created by Peter Barth on 21.11.05. * */ #include "GlobalColorConfig.h" #include "TrackerConfig.h" #include "PPUIConfig.h" const PPColor& GlobalColorConfig::getColor(GlobalColors whichColor) const { switch (whichColor) { // Pattern color identfiers case ColorPatternNote: return TrackerConfig::colorPatternEditorNote; case ColorPatternInstrument: return TrackerConfig::colorPatternEditorInstrument; case ColorPatternVolume: return TrackerConfig::colorPatternEditorVolume; case ColorPatternEffect: return TrackerConfig::colorPatternEditorEffect; case ColorPatternOperand: return TrackerConfig::colorPatternEditorOperand; case ColorCursor: return TrackerConfig::colorPatternEditorCursor; // Cursor line case ColorCursorLine: return TrackerConfig::colorPatternEditorCursorLine; // Cursor line in record mode case ColorCursorLineHighlighted: return TrackerConfig::colorPatternEditorCursorLineHighLight; // Theme color (= desktop in FT2) case ColorTheme: return TrackerConfig::colorThemeMain; // Main text (= white?) case ColorForegroundText: return PPUIConfig::getInstance()->getColor(PPUIConfig::ColorStaticText); // PPButton colors case ColorButtons: return PPUIConfig::getInstance()->getColor(PPUIConfig::ColorDefaultButton); // PPButton foreground text case ColorButtonText: return PPUIConfig::getInstance()->getColor(PPUIConfig::ColorDefaultButtonText); // Record mode button foreground text case ColorRecordModeButtonText: return TrackerConfig::colorRecordModeButtonText; // Various case ColorSelection: return PPUIConfig::getInstance()->getColor(PPUIConfig::ColorSelection); case ColorListBoxBackground: return PPUIConfig::getInstance()->getColor(PPUIConfig::ColorListBoxBackground); case ColorScrollBarBackground: return PPUIConfig::getInstance()->getColor(PPUIConfig::ColorScrollBarBackground); case ColorPatternSelection: return TrackerConfig::colorPatternEditorSelection; case ColorTextHighlited: return TrackerConfig::colorHighLight_1; case ColorTextHighlitedSecond: return TrackerConfig::colorHighLight_2; case ColorScopes: return TrackerConfig::colorScopes; case ColorScopesRecordIndicator: return TrackerConfig::colorScopesRecordIndicator; case ColorPeakClipIndicator: return TrackerConfig::colorPeakClipIndicator; case ColorRowHighlitedFirst: return TrackerConfig::colorRowHighLight_1; case ColorRowHighlitedSecond: return TrackerConfig::colorRowHighLight_2; case ColorSampleEditorWaveform: return TrackerConfig::colorSampleEditorWaveform; default: return dummy; } } const char* GlobalColorConfig::getColorReadableDescription(GlobalColors whichColor) const { switch (whichColor) { // Pattern color identfiers case ColorPatternNote: return "Pattern:Note"; case ColorPatternInstrument: return "Pattern:Instrument"; case ColorPatternVolume: return "Pattern:Volume"; case ColorPatternEffect: return "Pattern:Effect"; case ColorPatternOperand: return "Pattern:Operand"; // Cursor line case ColorCursor: return "Pattern cursor"; // Cursor line case ColorCursorLine: return "Cursor line"; // Cursor line in record mode case ColorCursorLineHighlighted: return "Cursor line (FT2 rec.)"; // Theme color (= desktop in FT2) case ColorTheme: return "Desktop"; // Main text (= white?) case ColorForegroundText: return "Foreground text"; // PPButton colors case ColorButtons: return "Buttons"; // PPButton foreground text case ColorButtonText: return "Button text"; // Record mode button foreground text case ColorRecordModeButtonText: return "Record mode button text"; // Various case ColorSelection: return "Selections"; case ColorListBoxBackground: return "Listbox background"; case ColorScrollBarBackground: return "Scrollbar background"; case ColorPatternSelection: return "Pattern block"; case ColorTextHighlited: return "Highlighted text"; case ColorTextHighlitedSecond: return "Pattern:2nd highlight text"; case ColorScopes: return "Scopes"; case ColorScopesRecordIndicator: return "Scopes record indicator"; case ColorPeakClipIndicator: return "Peak clip indicator"; case ColorRowHighlitedFirst: return "Pattern:1st row bg"; case ColorRowHighlitedSecond: return "Pattern:2nd row bg"; case ColorSampleEditorWaveform: return "Sample editor waveform"; default: return NULL; } } void GlobalColorConfig::setColor(GlobalColors whichColor, const PPColor& color) { switch (whichColor) { // Pattern color identfiers case ColorPatternNote: TrackerConfig::colorPatternEditorNote = color; break; case ColorPatternInstrument: TrackerConfig::colorPatternEditorInstrument = color; break; case ColorPatternVolume: TrackerConfig::colorPatternEditorVolume = color; break; case ColorPatternEffect: TrackerConfig::colorPatternEditorEffect = color; break; case ColorPatternOperand: TrackerConfig::colorPatternEditorOperand = color; break; // Cursor line case ColorCursor: TrackerConfig::colorPatternEditorCursor = color; break; // Cursor line case ColorCursorLine: TrackerConfig::colorPatternEditorCursorLine = color; break; // Cursor line in record mode case ColorCursorLineHighlighted: TrackerConfig::colorPatternEditorCursorLineHighLight = color; break; // Theme color (= desktop in FT2) case ColorTheme: TrackerConfig::colorThemeMain = color; break; // Main text (= white?) case ColorForegroundText: PPUIConfig::getInstance()->setColor(PPUIConfig::ColorStaticText, color); break; // PPButton colors case ColorButtons: PPUIConfig::getInstance()->setColor(PPUIConfig::ColorDefaultButton, color); break; // PPButton foreground text case ColorButtonText: PPUIConfig::getInstance()->setColor(PPUIConfig::ColorDefaultButtonText, color); break; // Record mode button foreground text case ColorRecordModeButtonText: TrackerConfig::colorRecordModeButtonText = color; break; // Various case ColorSelection: PPUIConfig::getInstance()->setColor(PPUIConfig::ColorSelection, color); break; case ColorListBoxBackground: PPUIConfig::getInstance()->setColor(PPUIConfig::ColorListBoxBackground, color); break; case ColorScrollBarBackground: PPUIConfig::getInstance()->setColor(PPUIConfig::ColorScrollBarBackground, color); break; case ColorPatternSelection: TrackerConfig::colorPatternEditorSelection = color; break; case ColorTextHighlited: TrackerConfig::colorHighLight_1 = color; break; case ColorTextHighlitedSecond: TrackerConfig::colorHighLight_2 = color; break; case ColorScopes: TrackerConfig::colorScopes = color; break; case ColorScopesRecordIndicator: TrackerConfig::colorScopesRecordIndicator = color; break; case ColorPeakClipIndicator: TrackerConfig::colorPeakClipIndicator = color; break; case ColorRowHighlitedFirst: TrackerConfig::colorRowHighLight_1 = color; break; case ColorRowHighlitedSecond: TrackerConfig::colorRowHighLight_2 = color; break; case ColorSampleEditorWaveform: TrackerConfig::colorSampleEditorWaveform = color; break; case ColorLast: // Not handled break; } } MilkyTracker-1.02.00/src/tracker/GlobalColorConfig.h000066400000000000000000000045721324432207300222030ustar00rootroot00000000000000/* * tracker/GlobalColorConfig.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * GlobalColorConfig.h * MilkyTracker * * Created by Peter Barth on 21.11.05. * */ #ifndef GLOBALCOLORCONFIG__H #define GLOBALCOLORCONFIG__H #include "BasicTypes.h" #include "Singleton.h" class GlobalColorConfig : public PPSingleton { private: PPColor dummy; public: enum GlobalColors { // Pattern color identfiers ColorPatternNote = 0, ColorPatternInstrument, ColorPatternVolume, ColorPatternEffect, ColorPatternOperand, // Pattern cursor ColorCursor, // Cursor line ColorCursorLine, // Cursor line in record mode ColorCursorLineHighlighted, // Theme color (= desktop in FT2) ColorTheme, // Main text (= white?) ColorForegroundText, // PPButton colors ColorButtons, // PPButton foreground text ColorButtonText, // Various ColorSelection, ColorListBoxBackground, ColorPatternSelection, ColorTextHighlited, // usually yellow ColorScopes, // usually white ColorTextHighlitedSecond, // usually darker yellow ColorRowHighlitedFirst, // First color to highlight the row background ColorRowHighlitedSecond, // Second color to highlight the row background ColorScrollBarBackground, ColorRecordModeButtonText, // usually red ColorScopesRecordIndicator, // usually red ColorPeakClipIndicator, // usually red ColorSampleEditorWaveform, // Unused, endmarker ColorLast = 40 }; public: const PPColor& getColor(GlobalColors whichColor) const; const char* getColorReadableDescription(GlobalColors whichColor) const; void setColor(GlobalColors whichColor, const PPColor& color); friend class PPSingleton; }; #endif MilkyTracker-1.02.00/src/tracker/InputControlListener.cpp000066400000000000000000000312751324432207300233570ustar00rootroot00000000000000/* * tracker/InputControlListener.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * InputControlListener.cpp * MilkyTracker * * Created by Peter Barth on 22.04.05. * */ #include #include "InputControlListener.h" #include "PPUI.h" #include "Tracker.h" #include "Screen.h" #include "ControlIDs.h" #include "SIPButtons.h" #include "PatternEditorControl.h" #include "RecorderLogic.h" static const pp_uint16 scanCodesLetters[] = {SC_A, SC_B, SC_C, SC_D, SC_E, SC_F, SC_G, SC_H, SC_I, SC_J, SC_K, SC_L, SC_M, SC_N, SC_O, SC_P, SC_Q, SC_R, SC_S, SC_T, SC_U, SC_V, SC_W, SC_X, SC_Z, SC_Y}; static const pp_uint16 scanCodesNumbers[] = {SC_0, SC_1, SC_2, SC_3, SC_4, SC_5, SC_6, SC_7, SC_8, SC_9}; static const pp_uint8 shiftNumbers[] = {')','!','@','#','$','%','^','&','*','('}; void InputControlListener::sendKey(EEventDescriptor event, pp_uint16 vk, pp_uint16 sc, pp_uint16 chr) { PPScreen* screen = tracker.screen; if (event == eKeyDown || eKeyUp) { // Send keydown to simulate note key press pp_uint16 vksc[3] = {vk, sc, chr}; PPEvent keyDown(event, &vksc, sizeof(vksc)); screen->raiseEvent(&keyDown); } else if (event == eKeyChar) { // Send keydown to simulate note key press pp_uint16 vksc[2] = {vk, sc}; PPEvent keyDown(event, &vksc, sizeof(vksc)); screen->raiseEvent(&keyDown); } } void InputControlListener::sendNote(pp_int32 v, pp_int32 volume/* = -1*/) { PPScreen* screen = tracker.screen; pp_int32 note = v & 0xFFFF; pp_int32 octave = (note / 12) + 1; pp_int32 realNote = note % 12; // virtual keys are actually not relevant for note input static const pp_uint16 noteKeys[12] = {0x5a, 0x53, 0x58, 0x44, 0x43, 0x56, 0x47, 0x42, 0x48, 0x4e, 0x4a, 0x4d}; static const pp_uint16 noteKeyScancodes[12] = {SC_Y, SC_S, SC_X, SC_D, SC_C, SC_V, SC_G, SC_B, SC_H, SC_N, SC_J, SC_M}; // ascii keys are actually not relevant for note input static const pp_uint16 noteKeyAscii[12] = {'z', 's', 'x', 'd', 'c', 'v', 'g', 'b', 'h', 'n', 'j', 'm'}; pp_uint16 vk[3]; // Save current octave pp_int32 currentOctave = tracker.getPatternEditor()->getCurrentOctave(); tracker.getPatternEditor()->setCurrentOctave(octave); tracker.recorderLogic->setKeyVolume(volume); vk[0] = noteKeys[realNote]; vk[1] = noteKeyScancodes[realNote]; vk[2] = noteKeyAscii[realNote]; // Send keydown/keyup to simulate note key press PPEvent event((v >> 16) ? eKeyUp : eKeyDown, &vk, sizeof(vk)); screen->raiseEvent(&event); tracker.recorderLogic->setKeyVolume(-1); // restore octave tracker.getPatternEditor()->setCurrentOctave(currentOctave); } pp_int32 InputControlListener::handleEvent(PPObject* sender, PPEvent* event) { if (event->getID() == eCommand || event->getID() == eCommandRepeat) { switch (reinterpret_cast(sender)->getID()) { case INPUT_BUTTON_CAPSLOCK: { capsLockPressed = !capsLockPressed; PPButton* button = reinterpret_cast(sender); button->setPressed(capsLockPressed); refreshSIP(); break; } case INPUT_BUTTON_LSHIFT: { lShiftPressed = !lShiftPressed; PPButton* button = reinterpret_cast(sender); button->setPressed(lShiftPressed); refreshSIP(); break; } case INPUT_BUTTON_RSHIFT: { rShiftPressed = !rShiftPressed; PPButton* button = reinterpret_cast(sender); button->setPressed(rShiftPressed); refreshSIP(); break; } case INPUT_BUTTON_0: case INPUT_BUTTON_1: case INPUT_BUTTON_2: case INPUT_BUTTON_3: case INPUT_BUTTON_4: case INPUT_BUTTON_5: case INPUT_BUTTON_6: case INPUT_BUTTON_7: case INPUT_BUTTON_8: case INPUT_BUTTON_9: { pp_uint16 key[2]; key[0] = (pp_uint16)(reinterpret_cast(sender)->getID() - INPUT_BUTTON_0 + '0'); key[1] = scanCodesNumbers[key[0] - '0']; sendKey(eKeyDown, key[0], key[1], uppercase() ? key[0] : shiftNumbers[key[0]-'0']); sendKey(eKeyChar, uppercase() ? key[0] : shiftNumbers[key[0]-'0'], key[1], 0); sendKey(eKeyUp, key[0], key[1], uppercase() ? key[0] : shiftNumbers[key[0]-'0']); handleModifiers(); break; } case INPUT_BUTTON_A: case INPUT_BUTTON_B: case INPUT_BUTTON_C: case INPUT_BUTTON_D: case INPUT_BUTTON_E: case INPUT_BUTTON_F: case INPUT_BUTTON_G: case INPUT_BUTTON_H: case INPUT_BUTTON_I: case INPUT_BUTTON_J: case INPUT_BUTTON_K: case INPUT_BUTTON_L: case INPUT_BUTTON_M: case INPUT_BUTTON_N: case INPUT_BUTTON_O: case INPUT_BUTTON_P: case INPUT_BUTTON_Q: case INPUT_BUTTON_R: case INPUT_BUTTON_S: case INPUT_BUTTON_T: case INPUT_BUTTON_U: case INPUT_BUTTON_V: case INPUT_BUTTON_W: case INPUT_BUTTON_X: case INPUT_BUTTON_Y: case INPUT_BUTTON_Z: { pp_uint16 key[2]; key[0] = (pp_uint16)(reinterpret_cast(sender)->getID() - INPUT_BUTTON_A + 'A'); key[1] = scanCodesLetters[key[0] - 'A']; sendKey(eKeyDown, key[0], key[1], !uppercase() ? key[0] : tolower(key[0])); sendKey(eKeyChar, !uppercase() ? key[0] : tolower(key[0]), key[1], 0); sendKey(eKeyUp, key[0], key[1], !uppercase() ? key[0] : tolower(key[0])); handleModifiers(); break; } case INPUT_BUTTON_MINUS: { sendKey(eKeyDown, 189, 12, !uppercase() ? '_' : '-'); sendKey(eKeyChar, !uppercase() ? '_' : '-', 12, 0); sendKey(eKeyUp, 189, 12, !uppercase() ? '_' : '-'); handleModifiers(); break; } case INPUT_BUTTON_PLUS: { sendKey(eKeyDown, 187, 13, !uppercase() ? '+' : '='); sendKey(eKeyChar, !uppercase() ? '+' : '=', 13, 0); sendKey(eKeyUp, 187, 13, !uppercase() ? '+' : '='); handleModifiers(); break; } case INPUT_BUTTON_BRACKETOPEN: { sendKey(eKeyDown, 219, 26, !uppercase() ? '{' : '['); sendKey(eKeyChar, !uppercase() ? '{' : '[', 26, 0); sendKey(eKeyUp, 219, 26, !uppercase() ? '{' : '['); handleModifiers(); break; } case INPUT_BUTTON_BRACKETCLOSE: { sendKey(eKeyDown, 221, 27, !uppercase() ? '}' : ']'); sendKey(eKeyChar, !uppercase() ? '}' : ']', 27, 0); sendKey(eKeyUp, 221, 27, !uppercase() ? '}' : ']'); handleModifiers(); break; } case INPUT_BUTTON_SEMICOLON: { sendKey(eKeyDown, 186, 39, !uppercase() ? ':' : ';'); sendKey(eKeyChar, !uppercase() ? ':' : ';', 39, 0); sendKey(eKeyUp, 186, 39, !uppercase() ? ':' : ';'); handleModifiers(); break; } case INPUT_BUTTON_TICK: { sendKey(eKeyDown, 222, 40, !uppercase() ? '\"' : '\''); sendKey(eKeyChar, !uppercase() ? '\"' : '\'', 40, 0); sendKey(eKeyUp, 222, 40, !uppercase() ? '\"' : '\''); handleModifiers(); break; } case INPUT_BUTTON_BACKSLASH: { sendKey(eKeyDown, 220, 43, !uppercase() ? '|' : '\\'); sendKey(eKeyChar, !uppercase() ? '|' : '\\', 43, 0); sendKey(eKeyUp, 220, 43, !uppercase() ? '|' : '\\'); handleModifiers(); break; } case INPUT_BUTTON_TILDE: { sendKey(eKeyDown, 226, 86, !uppercase() ? '|' : '~'); sendKey(eKeyChar, !uppercase() ? '|' : '~', 86, 0); sendKey(eKeyUp, 226, 86, !uppercase() ? '|' : '~'); handleModifiers(); break; } case INPUT_BUTTON_COMMA: { sendKey(eKeyDown, 188, 51, !uppercase() ? '<' : ','); sendKey(eKeyChar, !uppercase() ? '<' : ',', 51, 0); sendKey(eKeyUp, 188, 51, !uppercase() ? '<' : ','); handleModifiers(); break; } case INPUT_BUTTON_PERIOD: { sendKey(eKeyDown, 190, 52, !uppercase() ? '>' : '.'); sendKey(eKeyChar, !uppercase() ? '>' : '.', 52, 0); sendKey(eKeyUp, 190, 52, !uppercase() ? '>' : '.'); handleModifiers(); break; } case INPUT_BUTTON_SLASH: { sendKey(eKeyDown, 191, 53, !uppercase() ? '?' : '/'); sendKey(eKeyChar, !uppercase() ? '?' : '/', 53, 0); sendKey(eKeyUp, 191, 53, !uppercase() ? '?' : '/'); handleModifiers(); break; } case INPUT_BUTTON_INS: sendKey(eKeyDown, VK_INSERT, 0, 0); sendKey(eKeyUp, VK_INSERT, 0, 0); break; case INPUT_BUTTON_DEL: sendKey(eKeyDown, VK_DELETE, 0, 0); sendKey(eKeyUp, VK_DELETE, 0, 0); break; case INPUT_BUTTON_BACK: sendKey(eKeyDown, VK_BACK, 0, 0); sendKey(eKeyUp, VK_BACK, 0, 0); break; case INPUT_BUTTON_INSLINE: sendKey(eKeyDown, VK_SHIFT, 0, 0); ::setForceKeyModifier(KeyModifierSHIFT); sendKey(eKeyDown, VK_INSERT, 0, 0); sendKey(eKeyUp, VK_INSERT, 0, 0); ::clearForceKeyModifier(KeyModifierSHIFT); sendKey(eKeyUp, VK_SHIFT, 0, 0); break; case INPUT_BUTTON_BACKLINE: sendKey(eKeyDown, VK_SHIFT, 0, 0); ::setForceKeyModifier(KeyModifierSHIFT); sendKey(eKeyDown, VK_BACK, 0, 0); sendKey(eKeyUp, VK_BACK, 0, 0); ::clearForceKeyModifier(KeyModifierSHIFT); sendKey(eKeyUp, VK_SHIFT, 0, 0); break; case INPUT_BUTTON_WTF: if (!uppercase()) { ::setForceKeyModifier(KeyModifierSHIFT); sendKey(eKeyDown, VK_SHIFT, 0, 0); } sendKey(eKeyDown, VK_OEM_3, SC_WTF, '\x60'); sendKey(eKeyChar, '\x60', 53, 0); sendKey(eKeyUp, VK_OEM_3, SC_WTF, '\x60'); if (!uppercase()) { ::clearForceKeyModifier(KeyModifierSHIFT); sendKey(eKeyUp, VK_SHIFT, 0, 0); } handleModifiers(); break; case INPUT_BUTTON_KEYOFF: sendKey(eKeyDown, tracker.editMode == EditModeMilkyTracker ? VK_OEM_3 : VK_OEM_102, tracker.editMode == EditModeMilkyTracker ? SC_WTF : SC_SMALLERGREATER, 0); sendKey(eKeyUp, tracker.editMode == EditModeMilkyTracker ? VK_OEM_3 : VK_OEM_102, tracker.editMode == EditModeMilkyTracker ? SC_WTF : SC_SMALLERGREATER, 0); break; case INPUT_BUTTON_SPACE: sendKey(eKeyDown, VK_SPACE, 666, ' '); sendKey(eKeyChar, ' ', 666, 0); sendKey(eKeyUp, VK_SPACE, 666, ' '); handleModifiers(); break; case INPUT_BUTTON_ENTER: sendKey(eKeyDown, VK_RETURN, 777, 0x0A); sendKey(eKeyChar, 0x0A, 777, 0); sendKey(eKeyUp, VK_RETURN, 777, 0x0A); handleModifiers(); break; case INPUT_BUTTON_TAB: sendKey(eKeyDown, VK_TAB, 888, 0x08); sendKey(eKeyChar, 0x08, 888, 0); sendKey(eKeyUp, VK_TAB, 888, 0x08); handleModifiers(); break; case INPUT_BUTTON_SHRINK: { if (event->getID() != eCommand) break; tracker.setInputControl(Tracker::SIPDefault); tracker.screen->paint(); break; } case INPUT_BUTTON_EXPAND: { if (event->getID() != eCommand) break; tracker.setInputControl(Tracker::SIPExtended); tracker.screen->paint(); break; } } } else if (event->getID() == eSelection) { switch (reinterpret_cast(sender)->getID()) { case PIANO_CONTROL: { pp_int32 v = *((pp_int32*)event->getDataPtr()); sendNote(v); break; } } } return 0; } void InputControlListener::handleModifiers() { PPButton* button = static_cast(tracker.inputContainerExtended->getControlByID(INPUT_BUTTON_LSHIFT)); ASSERT(button); if (lShiftPressed && button->isPressed()) { button->setPressed(false); lShiftPressed = false; } refreshSIP(); } void InputControlListener::refreshSIP() { pp_int32 i; PPContainer* container = tracker.inputContainerExtended; for (i = 0; i < (signed)sizeof(keyLine_0_lowerCase); i++) { PPButton* button = static_cast(container->getControlByID(keyLineIDs_0[i])); button->setText(uppercase() ? keyLine_0_lowerCase[i] : keyLine_0_upperCase[i]); } for (i = 0; i < (signed)sizeof(keyLine_1_lowerCase); i++) { PPButton* button = static_cast(container->getControlByID(keyLineIDs_1[i])); button->setText(uppercase() ? keyLine_1_lowerCase[i] : keyLine_1_upperCase[i]); } for (i = 0; i < (signed)sizeof(keyLine_2_lowerCase); i++) { PPButton* button = static_cast(container->getControlByID(keyLineIDs_2[i])); button->setText(uppercase() ? keyLine_2_lowerCase[i] : keyLine_2_upperCase[i]); } for (i = 0; i < (signed)sizeof(keyLine_3_lowerCase); i++) { PPButton* button = static_cast(container->getControlByID(keyLineIDs_3[i])); button->setText(uppercase() ? keyLine_3_lowerCase[i] : keyLine_3_upperCase[i]); } tracker.screen->paintControl(container); } MilkyTracker-1.02.00/src/tracker/InputControlListener.h000066400000000000000000000032761324432207300230240ustar00rootroot00000000000000/* * tracker/InputControlListener.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * InputControlListener.h * MilkyTracker * * Created by Peter Barth on 22.04.05. * */ #ifndef INPUTCONTROLLISTENER__H #define INPUTCONTROLLISTENER__H #include "BasicTypes.h" #include "Event.h" class Tracker; class InputControlListener : public EventListenerInterface { private: Tracker& tracker; bool capsLockPressed; bool lShiftPressed; bool rShiftPressed; bool uppercase() { return !(capsLockPressed | lShiftPressed | rShiftPressed); } void refreshSIP(); public: enum { KEY_PRESS = 0, KEY_RELEASE = 0x10000 }; InputControlListener(Tracker& theTracker) : tracker(theTracker), capsLockPressed(false), lShiftPressed(false), rShiftPressed(false) { } void sendKey(EEventDescriptor event, pp_uint16 vk, pp_uint16 sc, pp_uint16 chr); void sendNote(pp_int32 note, pp_int32 volume = -1); // PPEvent listener pp_int32 handleEvent(PPObject* sender, PPEvent* event); void handleModifiers(); }; #endif MilkyTracker-1.02.00/src/tracker/LogoBig.cpp000066400000000000000000160517751324432207300205510ustar00rootroot00000000000000/* * tracker/LogoBig.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "LogoBig.h" const pp_uint32 LogoBig::width = 540; const pp_uint32 LogoBig::height = 450; const pp_uint8 LogoBig::rawData[] = { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x06,0x09, 0x5e,0x63,0x7f,0x6c,0x77,0x9b,0x60,0x68,0x85,0x5d,0x65,0x82,0x49,0x4e,0x66,0x41, 0x47,0x5f,0x33,0x37,0x4a,0x2c,0x2e,0x3f,0x24,0x26,0x34,0x19,0x19,0x22,0x16,0x16, 0x1d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0x0e, 0x11,0x66,0x6c,0x88,0x6a,0x75,0x9a,0x63,0x6f,0x95,0x53,0x5c,0x7c,0x3c,0x3d,0x52, 0x41,0x46,0x60,0x48,0x50,0x72,0x51,0x5b,0x83,0x52,0x5a,0x84,0x52,0x5b,0x85,0x52, 0x5d,0x88,0x55,0x60,0x8a,0x56,0x62,0x8b,0x5a,0x65,0x8d,0x52,0x5a,0x7c,0x54,0x5c, 0x7b,0x4f,0x54,0x6e,0x4d,0x51,0x68,0x49,0x4c,0x60,0x41,0x42,0x50,0x3e,0x3f,0x4c, 0x29,0x28,0x30,0x2c,0x2b,0x33,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f, 0x1e,0x20,0x8b,0x90,0xa8,0x7a,0x85,0xa5,0x67,0x74,0x99,0x4b,0x4d,0x67,0x2b,0x1f, 0x25,0x25,0x1a,0x1f,0x24,0x1a,0x1f,0x22,0x18,0x1c,0x1e,0x15,0x18,0x23,0x1b,0x23, 0x29,0x22,0x30,0x31,0x2c,0x3f,0x3b,0x39,0x53,0x45,0x47,0x69,0x4d,0x57,0x7f,0x54, 0x5f,0x89,0x57,0x63,0x8c,0x5b,0x67,0x8e,0x60,0x6d,0x93,0x69,0x74,0x99,0x6f,0x7b, 0x9f,0x76,0x82,0xa3,0x7d,0x89,0xa8,0x85,0x90,0xad,0x90,0x9a,0xb5,0x94,0x9d,0xb8, 0x8e,0x94,0xab,0x90,0x93,0xa9,0x8b,0x8d,0xa0,0x7a,0x7b,0x8d,0x69,0x69,0x7e,0x4a, 0x4a,0x5c,0x48,0x48,0x5b,0x2a,0x2a,0x34,0x27,0x26,0x30,0x0c,0x0c,0x0f,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x31,0x2f,0x32,0xbb,0xbe,0xca,0x98,0xa1,0xbb,0x7a,0x85,0xa5,0x44,0x3e,0x4f,0x3d, 0x2e,0x39,0x38,0x2a,0x33,0x31,0x24,0x2b,0x2e,0x22,0x28,0x2b,0x1f,0x26,0x2c,0x20, 0x26,0x28,0x1d,0x22,0x28,0x1d,0x23,0x28,0x1c,0x22,0x24,0x1a,0x1f,0x23,0x19,0x1d, 0x24,0x19,0x1e,0x25,0x1b,0x22,0x2b,0x26,0x32,0x36,0x35,0x48,0x41,0x44,0x5d,0x4c, 0x51,0x6f,0x5a,0x63,0x84,0x67,0x74,0x99,0x6e,0x7a,0x9d,0x73,0x7e,0xa1,0x79,0x84, 0xa5,0x81,0x8b,0xaa,0x83,0x8d,0xac,0x85,0x90,0xaf,0x89,0x93,0xb0,0x82,0x8c,0xab, 0x75,0x81,0xa3,0x6d,0x79,0x9c,0x6a,0x76,0x9a,0x69,0x75,0x9a,0x69,0x74,0x99,0x65, 0x71,0x96,0x50,0x55,0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x49,0x4d,0x56,0x82,0x8d,0xa9,0x28,0x2d,0x3b,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x45,0x43,0x46,0xd1,0xd4,0xdd,0xb5,0xbb,0xce,0x72,0x75,0x8c,0x3c,0x2f,0x38, 0x40,0x31,0x3c,0x45,0x35,0x41,0x3e,0x2f,0x39,0x33,0x25,0x2d,0x2f,0x22,0x29,0x30, 0x23,0x2a,0x2f,0x23,0x2a,0x2f,0x22,0x29,0x30,0x23,0x2b,0x32,0x25,0x2c,0x30,0x23, 0x2b,0x31,0x24,0x2c,0x33,0x25,0x2d,0x32,0x25,0x2d,0x34,0x26,0x2e,0x34,0x27,0x2f, 0x36,0x28,0x30,0x36,0x28,0x31,0x38,0x29,0x32,0x38,0x2a,0x33,0x41,0x38,0x46,0x48, 0x43,0x57,0x51,0x50,0x66,0x5c,0x5f,0x79,0x64,0x6b,0x89,0x6e,0x7a,0x9d,0x6f,0x7b, 0x9f,0x6b,0x76,0x9b,0x66,0x72,0x98,0x63,0x6f,0x95,0x5f,0x6c,0x93,0x5f,0x6b,0x92, 0x5c,0x69,0x90,0x53,0x5e,0x89,0x52,0x4f,0x7a,0x31,0x2b,0x3e,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x61,0x5b,0x68,0xa2,0xaa,0xc1,0x71,0x7d,0xa0,0x5b,0x67,0x8e, 0x15,0x18,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x61,0x5e,0x61,0xdd,0xde,0xe6,0xc2,0xc7,0xd7,0x4d,0x45,0x51,0x3c,0x2d, 0x37,0x42,0x33,0x3e,0x43,0x33,0x3e,0x46,0x36,0x42,0x3d,0x2e,0x39,0x32,0x25,0x2c, 0x30,0x23,0x2a,0x2f,0x23,0x2a,0x2e,0x22,0x29,0x2f,0x22,0x29,0x2f,0x22,0x29,0x31, 0x24,0x2b,0x31,0x24,0x2b,0x34,0x26,0x2e,0x35,0x27,0x30,0x38,0x29,0x33,0x3a,0x2c, 0x35,0x3c,0x2e,0x37,0x3f,0x30,0x3b,0x41,0x31,0x3c,0x47,0x37,0x43,0x48,0x38,0x45, 0x4c,0x3b,0x49,0x4d,0x3c,0x4a,0x50,0x3f,0x4d,0x50,0x3f,0x4d,0x52,0x40,0x4f,0x52, 0x40,0x4f,0x51,0x43,0x55,0x51,0x48,0x5e,0x51,0x4d,0x66,0x53,0x54,0x71,0x56,0x5b, 0x7d,0x57,0x60,0x86,0x53,0x5e,0x88,0x54,0x50,0x79,0x5a,0x52,0x79,0x61,0x50,0x6f, 0x08,0x07,0x0a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xa7,0xa7,0xb8,0x88,0x92,0xb0,0x56,0x63, 0x8b,0x56,0x63,0x8b,0x51,0x5b,0x7f,0x08,0x09,0x0c,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x7a,0x76,0x79,0xeb,0xed,0xf1,0xa2,0xa2,0xad,0x35,0x29,0x32,0x3c, 0x2d,0x37,0x40,0x30,0x3b,0x43,0x33,0x3e,0x42,0x33,0x3e,0x44,0x34,0x40,0x3e,0x2f, 0x39,0x31,0x24,0x2c,0x30,0x23,0x2a,0x30,0x23,0x2b,0x2e,0x22,0x28,0x2f,0x22,0x29, 0x2f,0x22,0x29,0x2f,0x22,0x29,0x31,0x24,0x2c,0x34,0x27,0x2f,0x34,0x27,0x2f,0x34, 0x27,0x2f,0x36,0x29,0x31,0x35,0x28,0x31,0x3f,0x30,0x3b,0x41,0x31,0x3c,0x47,0x37, 0x43,0x4c,0x3b,0x48,0x51,0x3f,0x4e,0x56,0x43,0x53,0x5a,0x47,0x58,0x5f,0x4c,0x5e, 0x63,0x4f,0x62,0x65,0x51,0x65,0x62,0x4f,0x62,0x5f,0x4b,0x5e,0x5c,0x49,0x5a,0x57, 0x44,0x55,0x50,0x3e,0x4d,0x2c,0x20,0x26,0x56,0x4f,0x78,0x5c,0x52,0x79,0x5a,0x52, 0x79,0x64,0x53,0x73,0x49,0x3b,0x51,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x10,0x14,0xb1,0xb7,0xca,0x65, 0x72,0x98,0x64,0x53,0x76,0x55,0x60,0x8a,0x55,0x60,0x8a,0x46,0x50,0x6d,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x92,0x8f,0x92,0xee,0xef,0xf4,0x5c,0x56,0x5d,0x31,0x24,0x2b, 0x3a,0x2c,0x35,0x3f,0x30,0x3b,0x42,0x33,0x3e,0x41,0x31,0x3c,0x44,0x34,0x3f,0x44, 0x34,0x3f,0x3e,0x2f,0x3a,0x32,0x25,0x2c,0x31,0x24,0x2c,0x30,0x23,0x2a,0x31,0x24, 0x2b,0x31,0x24,0x2b,0x32,0x25,0x2c,0x30,0x23,0x2a,0x32,0x25,0x2c,0x34,0x27,0x2f, 0x35,0x27,0x30,0x2c,0x21,0x28,0x36,0x29,0x32,0x2b,0x21,0x27,0x3e,0x2f,0x39,0x39, 0x2b,0x35,0x45,0x36,0x41,0x4b,0x3a,0x47,0x51,0x40,0x4f,0x55,0x43,0x53,0x5b,0x48, 0x59,0x61,0x4d,0x60,0x62,0x4e,0x61,0x67,0x53,0x68,0x69,0x54,0x69,0x68,0x54,0x68, 0x67,0x53,0x67,0x61,0x4d,0x60,0x5c,0x49,0x5b,0x2d,0x21,0x28,0x5c,0x4d,0x6e,0x64, 0x53,0x75,0x5b,0x52,0x79,0x63,0x53,0x77,0x64,0x4f,0x6d,0x16,0x13,0x1b,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2c,0x26,0x30, 0xa2,0xa1,0xb3,0x67,0x73,0x98,0x54,0x50,0x79,0x60,0x6d,0x94,0x53,0x5e,0x89,0x55, 0x60,0x8a,0x26,0x2a,0x3a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x06,0x06,0x06,0x96,0x95,0x9b,0xe9,0xeb,0xf0,0x3a,0x30,0x37,0x34,0x27, 0x2f,0x3b,0x2c,0x36,0x41,0x31,0x3c,0x42,0x32,0x3e,0x41,0x32,0x3d,0x44,0x34,0x40, 0x43,0x33,0x3e,0x47,0x36,0x43,0x41,0x31,0x3c,0x34,0x26,0x2e,0x33,0x26,0x2e,0x33, 0x26,0x2e,0x31,0x24,0x2b,0x31,0x24,0x2c,0x31,0x24,0x2c,0x32,0x24,0x2c,0x33,0x26, 0x2e,0x34,0x26,0x2e,0x34,0x27,0x2e,0x21,0x18,0x1e,0x35,0x28,0x2f,0x27,0x1d,0x25, 0x3e,0x2e,0x3a,0x2c,0x21,0x28,0x42,0x33,0x3e,0x4b,0x3a,0x47,0x51,0x3f,0x4e,0x54, 0x42,0x51,0x5a,0x47,0x58,0x5f,0x4c,0x5e,0x65,0x51,0x65,0x66,0x52,0x66,0x67,0x53, 0x67,0x68,0x54,0x68,0x66,0x52,0x66,0x62,0x4e,0x62,0x59,0x47,0x57,0x2c,0x20,0x27, 0x50,0x42,0x5d,0x64,0x4e,0x6c,0x60,0x53,0x77,0x5e,0x53,0x79,0x64,0x4e,0x6c,0x52, 0x48,0x67,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x40,0x39,0x4a,0x84,0x77,0x88,0x86,0x91,0xaf,0x52,0x57,0x82,0x5c,0x69,0x90, 0x60,0x6c,0x93,0x52,0x5c,0x86,0x52,0x5e,0x83,0x0b,0x0c,0x10,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x0c,0x0b,0x0d,0xa6,0xa7,0xaf,0xa5,0xa3,0xa9,0x2f,0x23,0x2a,0x38, 0x2a,0x33,0x40,0x30,0x3b,0x41,0x31,0x3c,0x40,0x31,0x3c,0x41,0x32,0x3d,0x43,0x33, 0x3e,0x44,0x34,0x40,0x44,0x34,0x40,0x48,0x37,0x44,0x3e,0x2f,0x3a,0x37,0x29,0x32, 0x35,0x27,0x30,0x36,0x28,0x30,0x35,0x27,0x2f,0x32,0x24,0x2c,0x34,0x27,0x2f,0x35, 0x28,0x30,0x36,0x28,0x30,0x35,0x27,0x2f,0x34,0x27,0x2e,0x24,0x1b,0x21,0x3b,0x2c, 0x36,0x29,0x1f,0x26,0x40,0x30,0x3c,0x29,0x20,0x26,0x41,0x32,0x3d,0x49,0x38,0x45, 0x50,0x3e,0x4d,0x54,0x42,0x51,0x5b,0x48,0x59,0x60,0x4c,0x5f,0x64,0x50,0x64,0x68, 0x53,0x68,0x68,0x54,0x68,0x66,0x52,0x66,0x65,0x51,0x65,0x62,0x4e,0x62,0x56,0x43, 0x53,0x2d,0x21,0x27,0x42,0x36,0x4b,0x63,0x4b,0x67,0x64,0x53,0x76,0x5e,0x53,0x79, 0x64,0x53,0x73,0x64,0x53,0x76,0x29,0x26,0x36,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x53,0x48,0x5c,0x5f,0x4d,0x5f,0x9a,0xa0,0xb7,0x56,0x62, 0x8b,0x53,0x5e,0x89,0x66,0x73,0x98,0x57,0x64,0x8c,0x55,0x60,0x8a,0x44,0x4d,0x66, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x18,0x18,0x19,0xb5,0xb7,0xbf,0x65,0x60,0x68,0x33,0x26,0x2e, 0x3c,0x2d,0x37,0x40,0x31,0x3c,0x41,0x32,0x3d,0x43,0x33,0x3e,0x41,0x32,0x3d,0x43, 0x33,0x3e,0x43,0x33,0x3f,0x45,0x35,0x41,0x40,0x30,0x3c,0x3a,0x2c,0x37,0x39,0x2c, 0x36,0x2f,0x23,0x2b,0x33,0x26,0x2f,0x37,0x29,0x32,0x37,0x29,0x32,0x36,0x29,0x31, 0x37,0x29,0x32,0x36,0x28,0x30,0x36,0x28,0x30,0x35,0x28,0x31,0x2f,0x23,0x2b,0x2a, 0x1f,0x25,0x3e,0x2e,0x38,0x2d,0x22,0x2a,0x3f,0x2f,0x3a,0x30,0x25,0x2d,0x3b,0x2e, 0x38,0x4a,0x39,0x47,0x51,0x3f,0x4e,0x56,0x43,0x53,0x5c,0x49,0x5b,0x61,0x4d,0x60, 0x64,0x50,0x64,0x66,0x52,0x66,0x69,0x54,0x69,0x68,0x53,0x68,0x64,0x50,0x64,0x62, 0x4e,0x61,0x50,0x3e,0x4d,0x2c,0x20,0x26,0x39,0x2e,0x40,0x62,0x4a,0x66,0x64,0x53, 0x75,0x60,0x53,0x77,0x64,0x53,0x76,0x64,0x50,0x71,0x57,0x4d,0x6e,0x02,0x02,0x02, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x54,0x6a,0x5e,0x4b,0x5d,0x9d, 0x99,0xa8,0x60,0x6c,0x93,0x52,0x5d,0x86,0x67,0x73,0x99,0x64,0x71,0x96,0x53,0x5f, 0x89,0x5a,0x65,0x8e,0x21,0x24,0x2f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x23,0x22,0x24,0xce,0xd2,0xda,0x48,0x3f,0x46,0x38,0x2a, 0x33,0x3f,0x2f,0x3a,0x43,0x33,0x3e,0x41,0x31,0x3c,0x43,0x33,0x3f,0x43,0x33,0x3e, 0x43,0x33,0x3e,0x42,0x32,0x3d,0x3d,0x2f,0x3a,0x3a,0x2d,0x38,0x3e,0x31,0x3b,0x45, 0x36,0x44,0x2a,0x21,0x29,0x28,0x1f,0x27,0x33,0x27,0x2f,0x2d,0x22,0x29,0x30,0x24, 0x2c,0x36,0x29,0x32,0x39,0x2b,0x34,0x3a,0x2c,0x35,0x3a,0x2c,0x35,0x38,0x29,0x33, 0x2b,0x20,0x27,0x36,0x29,0x32,0x3e,0x2e,0x39,0x36,0x29,0x32,0x3f,0x30,0x3c,0x3e, 0x30,0x3b,0x33,0x28,0x31,0x47,0x36,0x44,0x52,0x40,0x4f,0x55,0x42,0x52,0x5d,0x4a, 0x5c,0x60,0x4d,0x5f,0x65,0x51,0x65,0x68,0x53,0x68,0x69,0x54,0x69,0x66,0x51,0x65, 0x66,0x52,0x66,0x62,0x4e,0x61,0x4c,0x3b,0x48,0x2c,0x20,0x26,0x31,0x27,0x33,0x63, 0x4c,0x69,0x64,0x4f,0x6d,0x60,0x53,0x77,0x60,0x53,0x77,0x64,0x50,0x6f,0x64,0x52, 0x72,0x36,0x36,0x4a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x04,0x73,0x5e,0x76, 0x60,0x4c,0x5f,0x80,0x76,0x84,0x83,0x8d,0xac,0x53,0x5e,0x88,0x69,0x74,0x99,0x6c, 0x77,0x9b,0x5a,0x65,0x8d,0x52,0x5d,0x86,0x55,0x5e,0x80,0x03,0x03,0x04,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x35,0x34,0x37,0xc4,0xc7,0xcf,0x35,0x28,0x30,0x3e, 0x2f,0x39,0x42,0x33,0x3e,0x43,0x33,0x3e,0x42,0x33,0x3e,0x42,0x32,0x3d,0x43,0x33, 0x3e,0x43,0x33,0x3f,0x3d,0x2f,0x39,0x3c,0x2e,0x39,0x3f,0x32,0x3d,0x3b,0x30,0x3a, 0x27,0x20,0x27,0x0b,0x09,0x0b,0x00,0x00,0x00,0x00,0x00,0x00,0x0c,0x09,0x0b,0x2c, 0x22,0x2a,0x30,0x25,0x2d,0x2c,0x21,0x29,0x2c,0x21,0x28,0x33,0x26,0x2e,0x3a,0x2c, 0x36,0x39,0x2b,0x34,0x37,0x2a,0x33,0x3d,0x2e,0x38,0x40,0x30,0x3b,0x43,0x32,0x3e, 0x41,0x31,0x3d,0x46,0x36,0x42,0x40,0x32,0x3d,0x43,0x34,0x40,0x50,0x3f,0x4d,0x57, 0x44,0x55,0x5f,0x4c,0x5e,0x62,0x4f,0x62,0x66,0x52,0x66,0x6a,0x55,0x6a,0x6b,0x56, 0x6c,0x69,0x54,0x69,0x67,0x53,0x67,0x63,0x4f,0x63,0x46,0x35,0x42,0x2f,0x22,0x29, 0x2b,0x21,0x2a,0x64,0x4e,0x6d,0x62,0x4b,0x66,0x62,0x53,0x77,0x60,0x53,0x77,0x64, 0x53,0x76,0x62,0x4a,0x66,0x52,0x4e,0x77,0x0c,0x0c,0x10,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0e,0x0f, 0x14,0x70,0x5b,0x72,0x61,0x4d,0x60,0x61,0x50,0x60,0xb4,0xba,0xcd,0x52,0x5c,0x86, 0x5d,0x69,0x91,0x71,0x7c,0xa0,0x67,0x73,0x99,0x52,0x5d,0x86,0x58,0x65,0x8d,0x30, 0x35,0x43,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x46,0x45,0x49,0xb4,0xb5,0xbd,0x37,0x29,0x31, 0x43,0x33,0x3e,0x43,0x33,0x3f,0x42,0x33,0x3e,0x42,0x32,0x3e,0x42,0x32,0x3d,0x42, 0x33,0x3d,0x3e,0x30,0x3c,0x3f,0x31,0x3d,0x46,0x37,0x45,0x31,0x28,0x32,0x13,0x10, 0x13,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x0e,0x11,0x2e,0x24,0x2d,0x32,0x27,0x30,0x2b, 0x21,0x28,0x2b,0x20,0x28,0x31,0x26,0x2e,0x38,0x2b,0x34,0x3f,0x31,0x3a,0x40,0x31, 0x3c,0x42,0x32,0x3e,0x43,0x33,0x3f,0x47,0x37,0x43,0x49,0x39,0x45,0x4c,0x3b,0x49, 0x51,0x3f,0x4e,0x59,0x46,0x57,0x60,0x4c,0x5f,0x63,0x4f,0x62,0x68,0x54,0x68,0x6b, 0x57,0x6c,0x68,0x54,0x69,0x68,0x53,0x68,0x68,0x54,0x69,0x66,0x51,0x65,0x41,0x31, 0x3c,0x31,0x24,0x2b,0x25,0x1a,0x1f,0x62,0x52,0x73,0x5e,0x46,0x62,0x64,0x53,0x76, 0x60,0x53,0x77,0x60,0x53,0x77,0x64,0x52,0x72,0x62,0x4a,0x65,0x46,0x49,0x65,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x1b,0x1e,0x27,0x6d,0x58,0x6e,0x62,0x4e,0x62,0x5d,0x49,0x5b,0xb8,0xb7, 0xc1,0x56,0x62,0x8b,0x54,0x5f,0x89,0x71,0x7c,0xa0,0x6d,0x79,0x9c,0x5e,0x6a,0x92, 0x52,0x57,0x83,0x5b,0x65,0x8a,0x08,0x09,0x0b,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5c,0x5b,0x5f,0xb0,0xb1,0xb9,0x3a,0x2b, 0x35,0x45,0x35,0x41,0x46,0x36,0x42,0x44,0x34,0x3f,0x44,0x34,0x40,0x45,0x34,0x41, 0x41,0x32,0x3e,0x41,0x34,0x40,0x45,0x37,0x45,0x2b,0x23,0x2b,0x08,0x07,0x08,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x15,0x11,0x15,0x2f,0x26,0x2e,0x32,0x27,0x30,0x2e,0x23,0x2b,0x2d,0x23,0x2a,0x2d, 0x22,0x2a,0x36,0x29,0x32,0x41,0x33,0x3e,0x48,0x38,0x45,0x49,0x39,0x46,0x4c,0x3b, 0x49,0x54,0x42,0x51,0x57,0x44,0x54,0x5a,0x47,0x58,0x5f,0x4c,0x5e,0x65,0x51,0x65, 0x67,0x53,0x67,0x6c,0x57,0x6d,0x6b,0x57,0x6c,0x6c,0x58,0x6e,0x6a,0x55,0x6a,0x64, 0x50,0x64,0x3a,0x2b,0x35,0x2f,0x23,0x2a,0x28,0x1d,0x22,0x58,0x4a,0x69,0x5f,0x47, 0x63,0x64,0x52,0x73,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x62,0x4a,0x66, 0x64,0x53,0x76,0x21,0x20,0x2a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x28,0x2c,0x3b,0x6b,0x56,0x6b,0x62,0x4e,0x62,0x60, 0x4c,0x5f,0x98,0x90,0x9a,0x69,0x75,0x9a,0x52,0x53,0x7d,0x6c,0x79,0x9c,0x71,0x7c, 0xa0,0x6a,0x75,0x9a,0x54,0x60,0x8a,0x57,0x63,0x8c,0x3c,0x42,0x55,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x70,0x76,0xb6,0xb6,0xbf,0x3d, 0x2f,0x39,0x48,0x37,0x44,0x48,0x37,0x44,0x49,0x38,0x45,0x48,0x38,0x46,0x46,0x38, 0x45,0x49,0x3a,0x48,0x41,0x35,0x42,0x1f,0x1a,0x20,0x02,0x02,0x02,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x13,0x18,0x37,0x2c,0x37, 0x37,0x2b,0x36,0x2f,0x24,0x2c,0x2f,0x24,0x2c,0x2f,0x25,0x2d,0x37,0x2a,0x34,0x41, 0x33,0x3f,0x4f,0x3e,0x4c,0x54,0x41,0x51,0x5b,0x48,0x59,0x5d,0x4a,0x5c,0x63,0x4f, 0x63,0x68,0x53,0x68,0x6b,0x56,0x6c,0x6b,0x56,0x6c,0x6c,0x57,0x6d,0x6a,0x55,0x6a, 0x69,0x55,0x6a,0x67,0x52,0x67,0x35,0x27,0x30,0x32,0x25,0x2c,0x27,0x1c,0x21,0x4f, 0x41,0x5c,0x62,0x4a,0x66,0x64,0x4e,0x6c,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53, 0x77,0x64,0x53,0x76,0x5e,0x46,0x62,0x50,0x56,0x79,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x36,0x37,0x4b,0x66,0x52,0x66, 0x62,0x4e,0x62,0x61,0x4d,0x60,0x72,0x63,0x72,0x92,0x9c,0xb7,0x52,0x50,0x7b,0x65, 0x72,0x98,0x74,0x80,0xa1,0x6e,0x7a,0x9d,0x62,0x6d,0x94,0x53,0x5e,0x88,0x60,0x6b, 0x90,0x10,0x11,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x81,0x81,0x8b,0xba,0xbf,0xcf, 0x44,0x35,0x42,0x4a,0x39,0x46,0x4f,0x3d,0x4b,0x4d,0x3c,0x4b,0x49,0x3a,0x48,0x48, 0x3a,0x48,0x38,0x2d,0x38,0x15,0x11,0x16,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x1a,0x16,0x1b,0x38,0x2c,0x38,0x38,0x2c,0x37,0x33,0x28,0x31, 0x32,0x27,0x30,0x32,0x27,0x30,0x37,0x2b,0x36,0x45,0x35,0x42,0x53,0x42,0x52,0x61, 0x4d,0x60,0x66,0x51,0x66,0x69,0x55,0x6a,0x6b,0x56,0x6c,0x6e,0x59,0x6f,0x6c,0x58, 0x6e,0x6f,0x5a,0x70,0x6a,0x55,0x6b,0x61,0x4e,0x60,0x36,0x28,0x30,0x31,0x24,0x2b, 0x27,0x1c,0x21,0x44,0x39,0x50,0x64,0x4e,0x6c,0x62,0x4a,0x66,0x60,0x53,0x77,0x60, 0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x62,0x4a,0x66,0x64,0x52,0x73,0x3a,0x39, 0x4a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x41, 0x58,0x65,0x51,0x65,0x62,0x4e,0x62,0x62,0x4e,0x62,0x5e,0x4b,0x5d,0xac,0xb2,0xc4, 0x52,0x55,0x80,0x62,0x6d,0x94,0x75,0x81,0xa2,0x72,0x7d,0xa0,0x6b,0x76,0x9b,0x56, 0x62,0x8b,0x5b,0x66,0x8e,0x48,0x4e,0x62,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x05,0x4e,0x53,0x6e,0x64,0x6f, 0x95,0x49,0x39,0x48,0x4c,0x3b,0x49,0x4d,0x3c,0x4a,0x47,0x39,0x46,0x44,0x36,0x44, 0x2d,0x25,0x2e,0x0c,0x0a,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x18, 0x1f,0x3b,0x30,0x3c,0x3c,0x30,0x3b,0x37,0x2b,0x35,0x35,0x29,0x33,0x38,0x2c,0x37, 0x3b,0x30,0x3b,0x43,0x35,0x42,0x56,0x45,0x56,0x6a,0x55,0x6b,0x6d,0x58,0x6f,0x6e, 0x59,0x70,0x6f,0x5a,0x70,0x6c,0x58,0x6d,0x6b,0x56,0x6c,0x5b,0x48,0x5a,0x37,0x29, 0x32,0x31,0x24,0x2b,0x29,0x1e,0x23,0x3d,0x31,0x44,0x64,0x53,0x73,0x5e,0x46,0x62, 0x62,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x64,0x53,0x76,0x5e, 0x46,0x62,0x52,0x50,0x78,0x04,0x04,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x53,0x4f,0x6a,0x64,0x50,0x63,0x62,0x4e,0x62,0x62,0x4e,0x62,0x60,0x4c, 0x5f,0xa1,0x9f,0xac,0x53,0x5e,0x89,0x5c,0x69,0x90,0x72,0x7d,0xa0,0x75,0x81,0xa2, 0x6e,0x7a,0x9d,0x62,0x6d,0x94,0x55,0x62,0x8b,0x63,0x6e,0x92,0x12,0x13,0x15,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x04,0x04,0x42,0x44,0x5d,0x5c, 0x69,0x90,0x3c,0x32,0x3f,0x43,0x33,0x3f,0x4a,0x39,0x47,0x3a,0x2e,0x39,0x1f,0x19, 0x1f,0x05,0x04,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1b,0x18,0x20,0x3f,0x34,0x40,0x42,0x35, 0x42,0x3d,0x30,0x3c,0x3c,0x30,0x3c,0x3e,0x31,0x3e,0x40,0x34,0x41,0x43,0x36,0x44, 0x53,0x43,0x53,0x65,0x53,0x67,0x6e,0x5a,0x70,0x6e,0x5a,0x70,0x6b,0x56,0x6b,0x55, 0x42,0x52,0x36,0x28,0x31,0x2f,0x22,0x29,0x2a,0x1e,0x24,0x34,0x29,0x36,0x64,0x53, 0x76,0x5e,0x46,0x62,0x64,0x53,0x76,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77, 0x60,0x53,0x77,0x63,0x4b,0x67,0x64,0x4d,0x6b,0x42,0x43,0x5a,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x69,0x5e,0x7a,0x62,0x4f,0x62,0x62,0x4e,0x62,0x62, 0x4e,0x62,0x61,0x4d,0x60,0x8b,0x82,0x8f,0x6f,0x7b,0x9f,0x54,0x5f,0x89,0x6c,0x77, 0x9c,0x76,0x82,0xa3,0x71,0x7c,0x9f,0x6e,0x7a,0x9d,0x56,0x62,0x8b,0x5d,0x69,0x91, 0x4a,0x50,0x61,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x19,0x1f, 0x4a,0x4f,0x6d,0x41,0x42,0x59,0x2b,0x1f,0x25,0x2c,0x20,0x26,0x2b,0x1f,0x26,0x0c, 0x09,0x0b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x1a,0x1a,0x23,0x42,0x3a,0x4a,0x47,0x39,0x48,0x42,0x36,0x43,0x41,0x34, 0x41,0x42,0x36,0x44,0x44,0x37,0x45,0x44,0x38,0x46,0x4b,0x3e,0x4d,0x5a,0x49,0x5b, 0x67,0x53,0x68,0x50,0x3e,0x4d,0x34,0x26,0x2e,0x31,0x24,0x2b,0x2b,0x1f,0x25,0x2d, 0x22,0x2c,0x62,0x53,0x77,0x5f,0x47,0x63,0x64,0x53,0x74,0x60,0x53,0x77,0x60,0x53, 0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x64,0x53,0x76,0x5f,0x47,0x63,0x52,0x4f,0x78, 0x14,0x13,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x04,0x77,0x67,0x83,0x62,0x4e,0x62, 0x62,0x4e,0x62,0x62,0x4e,0x62,0x62,0x4e,0x62,0x6a,0x5a,0x6a,0x99,0xa1,0xbb,0x52, 0x4f,0x7b,0x67,0x73,0x99,0x7a,0x84,0xa5,0x73,0x7e,0xa1,0x6f,0x7b,0x9f,0x5e,0x6b, 0x92,0x57,0x63,0x8c,0x68,0x73,0x96,0x0e,0x0f,0x11,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x20,0x18,0x1d,0x4a,0x4f,0x6c,0x2e,0x24,0x2d,0x2f,0x22,0x29,0x2e,0x22,0x29, 0x32,0x25,0x2d,0x0c,0x09,0x0b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1a,0x1d,0x26,0x42, 0x39,0x4b,0x47,0x3b,0x4a,0x45,0x38,0x46,0x44,0x37,0x45,0x46,0x38,0x47,0x46,0x39, 0x48,0x46,0x3a,0x48,0x47,0x39,0x47,0x3f,0x31,0x3c,0x34,0x26,0x2e,0x2d,0x21,0x28, 0x29,0x1d,0x23,0x23,0x19,0x1e,0x62,0x53,0x77,0x62,0x4a,0x65,0x64,0x4e,0x6c,0x60, 0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x64,0x50, 0x6f,0x60,0x48,0x65,0x51,0x55,0x73,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x12,0x13,0x18,0x76,0x61, 0x79,0x62,0x4e,0x62,0x62,0x4e,0x62,0x62,0x4e,0x62,0x62,0x4e,0x62,0x5f,0x4b,0x5d, 0xb3,0xb7,0xc6,0x52,0x53,0x7e,0x5f,0x6c,0x93,0x75,0x81,0xa3,0x75,0x81,0xa3,0x6f, 0x7b,0x9f,0x6a,0x76,0x9a,0x55,0x62,0x8b,0x60,0x6c,0x93,0x4a,0x4f,0x5e,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x1a,0x13,0x17,0x45,0x47,0x5e,0x2c,0x20,0x26,0x2f,0x22, 0x29,0x31,0x24,0x2b,0x35,0x28,0x30,0x06,0x05,0x06,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x1a,0x1a,0x23,0x40,0x39,0x4a,0x49,0x3c,0x4c,0x47, 0x3a,0x48,0x47,0x3a,0x49,0x43,0x37,0x45,0x45,0x38,0x45,0x30,0x25,0x2d,0x30,0x23, 0x2a,0x2e,0x22,0x28,0x28,0x1d,0x22,0x23,0x18,0x1d,0x5a,0x4e,0x6f,0x64,0x4c,0x69, 0x62,0x4a,0x66,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60, 0x53,0x77,0x62,0x53,0x77,0x5f,0x47,0x63,0x5a,0x52,0x79,0x2b,0x29,0x36,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20, 0x23,0x2c,0x73,0x5e,0x75,0x62,0x4e,0x62,0x62,0x4e,0x62,0x62,0x4e,0x62,0x62,0x4e, 0x62,0x61,0x4d,0x60,0xa1,0x9c,0xa8,0x5d,0x69,0x91,0x5d,0x69,0x91,0x71,0x7c,0xa0, 0x79,0x83,0xa4,0x72,0x7d,0xa0,0x6e,0x7a,0x9d,0x5c,0x67,0x90,0x58,0x64,0x8d,0x6f, 0x7a,0x9a,0x0d,0x0d,0x0e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1e,0x16,0x1b,0x45,0x44,0x5a,0x2b, 0x20,0x27,0x34,0x26,0x2e,0x38,0x2a,0x33,0x39,0x2b,0x34,0x0d,0x0a,0x0d,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02, 0x1a,0x1d,0x26,0x3c,0x38,0x4b,0x49,0x3c,0x4b,0x45,0x38,0x47,0x42,0x35,0x43,0x28, 0x1e,0x25,0x2e,0x22,0x29,0x2d,0x21,0x27,0x28,0x1d,0x23,0x22,0x18,0x1c,0x51,0x44, 0x61,0x64,0x52,0x71,0x60,0x48,0x64,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77, 0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x64,0x53,0x73,0x60,0x48,0x65,0x57, 0x5c,0x7e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x2e,0x32,0x40,0x6f,0x5a,0x71,0x62,0x4e,0x62,0x62,0x4e,0x62,0x62, 0x4e,0x62,0x62,0x4e,0x62,0x61,0x4d,0x60,0x86,0x7b,0x89,0x83,0x8e,0xac,0x54,0x5f, 0x89,0x6c,0x79,0x9c,0x7b,0x85,0xa7,0x75,0x81,0xa3,0x6f,0x7b,0x9f,0x64,0x71,0x96, 0x56,0x62,0x8b,0x64,0x6f,0x95,0x46,0x4b,0x58,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x15,0x1a, 0x51,0x53,0x6c,0x30,0x24,0x2b,0x37,0x29,0x31,0x3c,0x2d,0x37,0x3e,0x2f,0x3a,0x21, 0x1b,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x1b,0x1a,0x24,0x42,0x37,0x45, 0x44,0x38,0x45,0x23,0x1a,0x21,0x27,0x1d,0x23,0x2a,0x1e,0x24,0x28,0x1d,0x22,0x22, 0x18,0x1c,0x46,0x3b,0x53,0x64,0x53,0x76,0x5b,0x43,0x5d,0x64,0x53,0x76,0x60,0x53, 0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77, 0x63,0x4b,0x67,0x63,0x53,0x77,0x3c,0x3b,0x4d,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x3d,0x50,0x6e,0x59,0x70,0x62,0x4e,0x62, 0x62,0x4e,0x62,0x62,0x4e,0x62,0x62,0x4e,0x62,0x62,0x4e,0x62,0x64,0x53,0x63,0xb5, 0xbb,0xce,0x52,0x53,0x7e,0x6e,0x7a,0x9d,0x77,0x82,0xa4,0x76,0x82,0xa3,0x6f,0x7b, 0x9f,0x6a,0x75,0x9a,0x58,0x64,0x8c,0x58,0x64,0x8d,0x6c,0x77,0x95,0x05,0x05,0x05, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x1d,0x16,0x1b,0x54,0x57,0x70,0x37,0x29,0x33,0x3c,0x2d,0x37,0x41,0x31,0x3c, 0x40,0x31,0x3d,0x32,0x28,0x32,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x02,0x02,0x02,0x32,0x28,0x32,0x23,0x1a,0x1f,0x21,0x18,0x1e,0x2a,0x1e,0x24, 0x26,0x1b,0x20,0x22,0x18,0x1c,0x3e,0x33,0x47,0x62,0x53,0x77,0x5c,0x44,0x5f,0x64, 0x53,0x75,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53, 0x77,0x60,0x53,0x77,0x64,0x53,0x75,0x62,0x4a,0x66,0x55,0x5d,0x85,0x09,0x09,0x0c, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x43,0x44,0x5d,0x6b,0x56, 0x6c,0x62,0x4e,0x62,0x62,0x4e,0x62,0x62,0x4e,0x62,0x62,0x4e,0x62,0x62,0x4e,0x62, 0x5b,0x48,0x5a,0xbe,0xbd,0xc9,0x53,0x5e,0x89,0x6c,0x77,0x9b,0x7d,0x88,0xa8,0x7a, 0x84,0xa5,0x72,0x7d,0xa0,0x6c,0x79,0x9c,0x62,0x6e,0x94,0x52,0x5c,0x86,0x65,0x71, 0x96,0x3c,0x3f,0x47,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x1e,0x17,0x1c,0x5a,0x5c,0x74,0x3d,0x2f,0x3a,0x42,0x32, 0x3e,0x45,0x35,0x41,0x41,0x33,0x3e,0x3b,0x30,0x3b,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x13,0x18,0x26,0x1d,0x23,0x1e,0x15, 0x1a,0x29,0x1d,0x23,0x26,0x1b,0x20,0x23,0x18,0x1d,0x34,0x2a,0x39,0x60,0x53,0x77, 0x60,0x48,0x65,0x64,0x50,0x6f,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60, 0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x63,0x4c,0x69,0x64,0x53, 0x76,0x52,0x52,0x69,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5d, 0x52,0x6a,0x66,0x52,0x66,0x62,0x4e,0x61,0x62,0x4e,0x62,0x62,0x4e,0x62,0x62,0x4e, 0x62,0x62,0x4e,0x62,0x5f,0x4c,0x5e,0xa0,0x9b,0xa6,0x65,0x72,0x96,0x5d,0x6a,0x91, 0x83,0x8d,0xac,0x7c,0x88,0xa8,0x74,0x80,0xa2,0x6e,0x7a,0x9d,0x6b,0x76,0x9b,0x54, 0x5f,0x89,0x57,0x63,0x8c,0x68,0x71,0x8a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1e,0x17,0x1d,0x62,0x63,0x7d,0x4e, 0x43,0x53,0x4b,0x3a,0x47,0x4b,0x3a,0x48,0x43,0x34,0x40,0x41,0x34,0x40,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x27, 0x1e,0x24,0x1e,0x16,0x1a,0x23,0x19,0x1e,0x23,0x19,0x1d,0x21,0x17,0x1b,0x2c,0x22, 0x2d,0x60,0x53,0x77,0x64,0x4f,0x6d,0x63,0x4c,0x69,0x60,0x53,0x77,0x60,0x53,0x77, 0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x64, 0x53,0x75,0x63,0x4b,0x67,0x56,0x62,0x89,0x13,0x12,0x18,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x6a,0x57,0x6d,0x64,0x50,0x64,0x62,0x4e,0x61,0x62,0x4e,0x61,0x62, 0x4e,0x61,0x62,0x4e,0x61,0x62,0x4e,0x62,0x61,0x4d,0x60,0x80,0x75,0x83,0x83,0x8d, 0xac,0x52,0x54,0x7e,0x83,0x8d,0xac,0x7d,0x88,0xa8,0x76,0x82,0xa3,0x72,0x7d,0xa0, 0x6c,0x77,0x9c,0x5f,0x6b,0x92,0x52,0x5d,0x86,0x6b,0x77,0x9b,0x2d,0x2f,0x33,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0a,0x08,0x0a, 0x67,0x69,0x83,0x6b,0x6e,0x89,0x53,0x41,0x51,0x56,0x43,0x53,0x50,0x3f,0x4d,0x58, 0x47,0x57,0x1a,0x16,0x1c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x1f,0x17,0x1d,0x20,0x17,0x1c,0x1f,0x16,0x1a,0x23,0x19,0x1d,0x22, 0x18,0x1c,0x23,0x1a,0x20,0x60,0x53,0x77,0x64,0x50,0x71,0x62,0x4a,0x65,0x60,0x53, 0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77, 0x60,0x53,0x77,0x60,0x53,0x77,0x64,0x4e,0x6d,0x64,0x53,0x75,0x52,0x56,0x74,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x5f,0x77,0x63,0x4f,0x63,0x62,0x4e,0x61, 0x62,0x4e,0x61,0x62,0x4e,0x61,0x61,0x4d,0x60,0x62,0x4e,0x61,0x61,0x4d,0x60,0x62, 0x52,0x63,0xc9,0xce,0xdb,0x52,0x52,0x7d,0x7a,0x85,0xa5,0x80,0x8b,0xaa,0x77,0x83, 0xa4,0x71,0x7c,0xa0,0x6e,0x7a,0x9d,0x6a,0x75,0x9a,0x52,0x5d,0x86,0x5c,0x69,0x90, 0x61,0x68,0x7c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x40,0x3e,0x4d,0x7d,0x88,0xa8,0x70,0x5f,0x78,0x6f,0x5a,0x71, 0x6f,0x5a,0x71,0x73,0x5e,0x76,0x4e,0x4c,0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0x0b,0x0e,0x21,0x18,0x1d,0x1c,0x14,0x17, 0x23,0x18,0x1d,0x21,0x17,0x1b,0x1a,0x12,0x15,0x5d,0x50,0x73,0x64,0x52,0x71,0x5d, 0x45,0x60,0x62,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53, 0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x64,0x53,0x75,0x62,0x4a,0x66, 0x52,0x57,0x82,0x26,0x25,0x32,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x04,0x78,0x63,0x7d,0x64,0x50, 0x63,0x62,0x4e,0x61,0x62,0x4e,0x61,0x62,0x4e,0x61,0x61,0x4d,0x60,0x61,0x4d,0x60, 0x61,0x4d,0x60,0x5a,0x47,0x58,0xd6,0xd4,0xda,0x55,0x60,0x8a,0x6d,0x79,0x9c,0x82, 0x8c,0xab,0x7a,0x85,0xa5,0x72,0x7d,0xa0,0x6e,0x7a,0x9d,0x6b,0x76,0x9b,0x5b,0x67, 0x90,0x52,0x5d,0x88,0x6a,0x75,0x99,0x1a,0x1b,0x1e,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x74,0x78,0x92,0x81,0x8b, 0xa9,0x72,0x5d,0x75,0x73,0x5e,0x76,0x73,0x5e,0x76,0x73,0x65,0x83,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x24,0x1b, 0x20,0x1a,0x13,0x16,0x1f,0x15,0x19,0x1f,0x16,0x19,0x1d,0x13,0x17,0x53,0x47,0x66, 0x64,0x53,0x75,0x5e,0x46,0x62,0x64,0x53,0x76,0x60,0x53,0x77,0x60,0x53,0x77,0x60, 0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53, 0x77,0x63,0x4b,0x67,0x64,0x53,0x75,0x58,0x5e,0x81,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x77, 0x69,0x89,0x66,0x52,0x66,0x62,0x4e,0x61,0x61,0x4d,0x60,0x61,0x4d,0x60,0x61,0x4d, 0x60,0x61,0x4d,0x60,0x61,0x4d,0x60,0x5d,0x49,0x5b,0xaa,0xa4,0xac,0x77,0x83,0xa4, 0x5b,0x66,0x8e,0x83,0x8d,0xac,0x7c,0x88,0xa8,0x75,0x81,0xa2,0x6e,0x7a,0x9d,0x6c, 0x79,0x9c,0x64,0x71,0x96,0x52,0x5a,0x84,0x56,0x62,0x8b,0x4a,0x50,0x61,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17, 0x16,0x1b,0x89,0x90,0xac,0x7a,0x71,0x8b,0x75,0x60,0x79,0x76,0x61,0x7a,0x77,0x67, 0x83,0x3d,0x43,0x58,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x1e,0x17,0x1c,0x1c,0x14,0x18,0x1c,0x13,0x16,0x1e,0x15,0x19,0x1c,0x13, 0x16,0x49,0x3e,0x58,0x60,0x53,0x77,0x5d,0x45,0x5f,0x64,0x53,0x76,0x60,0x53,0x77, 0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60, 0x53,0x77,0x60,0x53,0x77,0x64,0x53,0x75,0x62,0x4a,0x66,0x52,0x57,0x82,0x35,0x34, 0x47,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x50,0x4d,0x67,0x69,0x54,0x69,0x61,0x4d,0x60,0x61,0x4d,0x60,0x61, 0x4d,0x60,0x60,0x4c,0x5f,0x61,0x4d,0x60,0x61,0x4d,0x60,0x5e,0x4b,0x5d,0x7f,0x75, 0x82,0xb3,0xba,0xcc,0x55,0x60,0x8a,0x83,0x8d,0xac,0x7e,0x89,0xa9,0x75,0x81,0xa3, 0x71,0x7c,0xa0,0x6b,0x76,0x9b,0x6b,0x76,0x9b,0x57,0x63,0x8c,0x52,0x54,0x80,0x64, 0x6f,0x90,0x06,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x4a,0x49,0x57,0x90,0x9a,0xb5,0x78,0x64,0x7e,0x78, 0x64,0x7e,0x78,0x65,0x7f,0x61,0x63,0x86,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x10,0x14,0x21,0x18,0x1d,0x1a,0x11,0x15,0x1d, 0x14,0x18,0x1d,0x14,0x18,0x40,0x37,0x4d,0x5e,0x53,0x79,0x5f,0x47,0x63,0x64,0x53, 0x73,0x5e,0x53,0x79,0x5e,0x53,0x79,0x60,0x53,0x77,0x5e,0x53,0x79,0x60,0x53,0x77, 0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x64,0x4f,0x6d,0x64, 0x53,0x75,0x56,0x5f,0x86,0x09,0x08,0x0b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x28,0x2c,0x39,0x6e,0x5a,0x70,0x61,0x4d,0x60, 0x61,0x4d,0x60,0x61,0x4d,0x60,0x61,0x4d,0x60,0x61,0x4d,0x60,0x61,0x4d,0x60,0x61, 0x4d,0x60,0x5f,0x50,0x5f,0xb0,0xb7,0xca,0x5b,0x67,0x90,0x7e,0x8a,0xa9,0x80,0x8a, 0xaa,0x77,0x83,0xa4,0x71,0x7c,0xa0,0x6c,0x79,0x9c,0x6b,0x76,0x9b,0x64,0x6f,0x95, 0x52,0x50,0x7c,0x58,0x65,0x8d,0x35,0x39,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x83,0x99, 0x8e,0x8f,0xa8,0x78,0x64,0x7e,0x78,0x66,0x81,0x67,0x65,0x8a,0x35,0x39,0x45,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x27,0x1c,0x23, 0x17,0x10,0x12,0x1d,0x14,0x18,0x1f,0x15,0x19,0x35,0x2b,0x3c,0x5e,0x53,0x79,0x62, 0x4a,0x66,0x64,0x4d,0x6b,0x5e,0x53,0x79,0x5d,0x52,0x79,0x5e,0x53,0x79,0x5e,0x53, 0x79,0x5e,0x53,0x79,0x5e,0x53,0x79,0x5e,0x53,0x79,0x60,0x53,0x77,0x60,0x53,0x77, 0x62,0x53,0x77,0x62,0x4a,0x65,0x52,0x4f,0x7a,0x42,0x3d,0x58,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0x10,0x14,0x76,0x61, 0x7a,0x62,0x4e,0x61,0x61,0x4d,0x60,0x60,0x4c,0x5f,0x61,0x4d,0x60,0x60,0x4c,0x5f, 0x5f,0x4c,0x5e,0x60,0x4c,0x5f,0x57,0x45,0x55,0xc0,0xc3,0xcd,0x6c,0x79,0x9c,0x6b, 0x77,0x9b,0x7e,0x89,0xa9,0x77,0x83,0xa4,0x71,0x7c,0xa0,0x6e,0x7a,0x9d,0x6b,0x76, 0x9b,0x69,0x74,0x99,0x55,0x60,0x8a,0x52,0x52,0x7d,0x61,0x6a,0x84,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x13,0x13,0x16,0x9d,0xa3,0xba,0x83,0x79,0x93,0x78,0x69,0x85,0x75,0x69,0x89, 0x65,0x6f,0x8b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x20,0x18,0x1e,0x18,0x11,0x14,0x1c,0x13,0x17,0x1f,0x15,0x19,0x28,0x20,0x2a, 0x5c,0x52,0x79,0x64,0x52,0x72,0x63,0x4b,0x69,0x5b,0x52,0x79,0x5c,0x52,0x79,0x5c, 0x52,0x79,0x5c,0x52,0x79,0x5d,0x52,0x79,0x5e,0x53,0x79,0x5e,0x53,0x79,0x5e,0x53, 0x79,0x60,0x53,0x77,0x5e,0x53,0x79,0x64,0x53,0x73,0x63,0x4b,0x67,0x53,0x52,0x7b, 0x12,0x10,0x16,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04, 0x05,0x06,0x5e,0x55,0x6f,0x66,0x52,0x66,0x60,0x4c,0x5f,0x61,0x4d,0x60,0x61,0x4d, 0x60,0x61,0x4d,0x60,0x5f,0x4c,0x5e,0x61,0x4d,0x60,0x5a,0x47,0x58,0x9c,0x98,0xa4, 0x8a,0x93,0xb1,0x66,0x72,0x98,0x7e,0x8a,0xa9,0x79,0x84,0xa5,0x71,0x7c,0xa0,0x6d, 0x7a,0x9d,0x6b,0x76,0x9b,0x69,0x74,0x99,0x60,0x6d,0x93,0x52,0x4f,0x7a,0x67,0x74, 0x99,0x20,0x22,0x26,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4b,0x4a,0x56,0xa7,0xaf,0xc4,0x7a,0x6c, 0x89,0x78,0x69,0x88,0x67,0x6b,0x90,0x1f,0x21,0x26,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x13,0x0f,0x12,0x1d,0x15,0x1a,0x19,0x12,0x15,0x1d,0x14, 0x17,0x1c,0x13,0x16,0x58,0x50,0x77,0x64,0x53,0x76,0x63,0x4b,0x67,0x5a,0x52,0x79, 0x58,0x50,0x79,0x57,0x50,0x79,0x5a,0x52,0x79,0x5a,0x52,0x79,0x5c,0x52,0x79,0x5c, 0x52,0x79,0x5e,0x53,0x79,0x5e,0x53,0x79,0x5e,0x53,0x79,0x5e,0x53,0x79,0x62,0x4a, 0x66,0x64,0x53,0x75,0x4b,0x49,0x69,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x2f,0x31,0x42,0x70,0x5b,0x72,0x60,0x4c,0x5f,0x5f, 0x4c,0x5e,0x5f,0x4c,0x5e,0x5f,0x4c,0x5e,0x5f,0x4c,0x5e,0x60,0x4c,0x5f,0x5e,0x4a, 0x5d,0x71,0x68,0x79,0xb0,0xb7,0xca,0x5e,0x6b,0x92,0x7e,0x89,0xa9,0x75,0x81,0xa2, 0x71,0x7c,0xa0,0x6b,0x76,0x9b,0x6b,0x76,0x9b,0x6a,0x75,0x9a,0x63,0x6f,0x95,0x52, 0x5d,0x86,0x52,0x5c,0x86,0x53,0x59,0x6b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x89, 0x8a,0x9d,0x93,0x8f,0xa7,0x78,0x69,0x88,0x72,0x68,0x8a,0x62,0x6b,0x84,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x03,0x04,0x25,0x1c,0x22,0x18, 0x11,0x13,0x1c,0x13,0x16,0x1c,0x13,0x16,0x48,0x43,0x63,0x5d,0x52,0x79,0x64,0x4d, 0x6a,0x54,0x50,0x79,0x54,0x50,0x79,0x55,0x50,0x79,0x55,0x50,0x79,0x57,0x50,0x79, 0x57,0x50,0x79,0x5a,0x52,0x79,0x5a,0x52,0x79,0x5c,0x52,0x79,0x5d,0x52,0x79,0x5e, 0x53,0x79,0x64,0x53,0x76,0x5f,0x47,0x63,0x52,0x4f,0x7b,0x26,0x25,0x32,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x13,0x18,0x78,0x66,0x80, 0x61,0x4d,0x60,0x60,0x4c,0x5f,0x5f,0x4b,0x5d,0x5f,0x4b,0x5d,0x5e,0x4b,0x5d,0x5e, 0x4b,0x5d,0x5e,0x4b,0x5d,0x59,0x4b,0x5c,0xc2,0xc8,0xd7,0x5c,0x67,0x90,0x76,0x82, 0xa3,0x73,0x7e,0xa1,0x6e,0x7a,0x9d,0x6c,0x79,0x9c,0x6c,0x79,0x9c,0x6c,0x79,0x9c, 0x64,0x71,0x96,0x5d,0x69,0x91,0x5b,0x52,0x79,0x71,0x7c,0x9c,0x0b,0x0b,0x0c,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x0e,0x0e,0x10,0xab,0xaf,0xc3,0x7e,0x72,0x8f,0x78,0x69,0x88,0x65, 0x6b,0x8e,0x16,0x17,0x1b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x21,0x19,0x1e,0x1b,0x13,0x16,0x1d,0x14,0x17,0x1c,0x13,0x16,0x3c,0x36,0x51,0x53, 0x50,0x7b,0x65,0x52,0x6f,0x53,0x50,0x7a,0x53,0x50,0x7a,0x52,0x4f,0x7a,0x52,0x4f, 0x7a,0x53,0x4f,0x7a,0x55,0x50,0x79,0x55,0x50,0x79,0x5a,0x52,0x79,0x5a,0x52,0x79, 0x5a,0x52,0x79,0x5c,0x52,0x79,0x5c,0x52,0x79,0x64,0x4e,0x6c,0x64,0x52,0x71,0x55, 0x5b,0x7d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04, 0x05,0x5e,0x59,0x78,0x64,0x50,0x64,0x5e,0x4b,0x5d,0x5e,0x4b,0x5d,0x5f,0x4c,0x5e, 0x5e,0x4b,0x5d,0x5e,0x4b,0x5d,0x5e,0x4b,0x5d,0x54,0x41,0x51,0xb4,0xb8,0xc7,0x60, 0x6c,0x93,0x66,0x73,0x98,0x71,0x7c,0x9f,0x6e,0x7a,0x9d,0x6c,0x79,0x9c,0x6c,0x77, 0x9c,0x6b,0x76,0x9b,0x67,0x73,0x99,0x62,0x6e,0x94,0x52,0x4f,0x7a,0x5b,0x67,0x90, 0x47,0x4b,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x45,0x4f,0xa9,0xac,0xc2, 0x79,0x6a,0x88,0x6f,0x67,0x89,0x4d,0x54,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x16,0x11,0x15,0x20,0x18,0x1c,0x1c,0x14,0x17,0x1d,0x14,0x18, 0x32,0x2c,0x3f,0x57,0x57,0x82,0x67,0x56,0x74,0x55,0x55,0x7e,0x54,0x56,0x81,0x54, 0x54,0x80,0x54,0x52,0x7c,0x53,0x50,0x7b,0x53,0x50,0x7b,0x54,0x50,0x7a,0x55,0x52, 0x79,0x56,0x52,0x79,0x57,0x50,0x79,0x58,0x50,0x79,0x5a,0x52,0x79,0x60,0x53,0x77, 0x63,0x4b,0x67,0x52,0x57,0x82,0x35,0x35,0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x35,0x37,0x4a,0x6c,0x57,0x6d,0x5e,0x4b,0x5d,0x5e,0x4b, 0x5d,0x5e,0x4b,0x5d,0x5e,0x4b,0x5d,0x5e,0x4b,0x5d,0x5e,0x4b,0x5d,0x57,0x44,0x54, 0x89,0x89,0x9b,0x7b,0x85,0xa7,0x5a,0x65,0x8e,0x6f,0x7b,0x9f,0x6c,0x79,0x9c,0x6c, 0x77,0x9c,0x6b,0x76,0x9b,0x6b,0x76,0x9b,0x69,0x74,0x99,0x63,0x6e,0x94,0x54,0x5f, 0x89,0x52,0x50,0x7c,0x6b,0x73,0x8d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x86,0x86,0x97,0x95,0x91,0xaa,0x78,0x69,0x88,0x63,0x61,0x84,0x11,0x12,0x17, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x03,0x04,0x29,0x1e,0x24,0x1c,0x13, 0x17,0x1d,0x14,0x18,0x29,0x21,0x2b,0x60,0x6c,0x92,0x5f,0x5c,0x84,0x5e,0x62,0x8a, 0x5e,0x6a,0x90,0x5c,0x65,0x8d,0x5b,0x5c,0x85,0x58,0x58,0x82,0x58,0x57,0x81,0x57, 0x55,0x7e,0x56,0x54,0x7d,0x56,0x54,0x7d,0x57,0x54,0x7b,0x57,0x53,0x7b,0x5a,0x53, 0x7a,0x5b,0x53,0x7a,0x65,0x54,0x76,0x64,0x54,0x77,0x5a,0x63,0x88,0x09,0x08,0x0b, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x1a,0x22,0x74,0x5f,0x77,0x5e, 0x4b,0x5d,0x5e,0x4b,0x5d,0x5e,0x4b,0x5d,0x5e,0x4b,0x5d,0x5e,0x4b,0x5d,0x5e,0x4b, 0x5d,0x59,0x47,0x58,0x69,0x64,0x76,0x98,0xa1,0xba,0x52,0x5d,0x86,0x6c,0x79,0x9c, 0x6d,0x7a,0x9d,0x6c,0x79,0x9c,0x6a,0x75,0x9a,0x6b,0x76,0x9b,0x6a,0x75,0x9a,0x63, 0x6f,0x95,0x5c,0x69,0x90,0x55,0x50,0x79,0x60,0x6d,0x93,0x2c,0x2c,0x2f,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x0a,0x0b,0x0c,0xac,0xb0,0xc2,0x85,0x7b,0x95,0x78,0x69, 0x88,0x4d,0x4b,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x26, 0x1d,0x23,0x1e,0x14,0x19,0x1f,0x15,0x19,0x1e,0x15,0x19,0x7f,0x89,0xa6,0x75,0x80, 0xa2,0x6e,0x79,0x9c,0x7b,0x88,0xa8,0x74,0x80,0xa2,0x6f,0x7a,0x9d,0x6b,0x75,0x9a, 0x67,0x73,0x98,0x67,0x73,0x98,0x67,0x72,0x98,0x66,0x71,0x98,0x63,0x6d,0x93,0x60, 0x6c,0x93,0x5d,0x69,0x90,0x5b,0x66,0x8e,0x58,0x5d,0x86,0x57,0x56,0x81,0x64,0x6e, 0x95,0x49,0x49,0x5f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x05, 0x6d,0x5f,0x78,0x5f,0x4b,0x5e,0x5e,0x4b,0x5d,0x5e,0x4b,0x5d,0x5e,0x4b,0x5d,0x5e, 0x4b,0x5d,0x5e,0x4b,0x5d,0x5c,0x49,0x5b,0x58,0x4c,0x5e,0x9b,0xa4,0xbc,0x54,0x5f, 0x89,0x65,0x72,0x98,0x6c,0x79,0x9c,0x6c,0x79,0x9c,0x6c,0x79,0x9c,0x6b,0x76,0x9b, 0x6a,0x75,0x9a,0x67,0x73,0x99,0x60,0x6c,0x93,0x52,0x52,0x7d,0x52,0x5d,0x86,0x64, 0x69,0x76,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x3a,0x42,0xad, 0xb1,0xc5,0x79,0x69,0x85,0x71,0x61,0x7b,0x28,0x21,0x29,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, 0x02,0x03,0x06,0x07,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x17,0x12,0x16,0x22,0x19,0x1d,0x1f,0x16,0x1a,0x1d,0x14,0x18,0xa3, 0xa5,0xb3,0xc2,0xc9,0xd9,0x9c,0xa5,0xc1,0xb5,0xbe,0xd2,0xaf,0xb7,0xcc,0xa9,0xb1, 0xc8,0xa1,0xa9,0xc3,0x9b,0xa3,0xbf,0x95,0xa0,0xbb,0x90,0x9a,0xb8,0x8c,0x96,0xb4, 0x85,0x90,0xb0,0x81,0x8b,0xab,0x7d,0x86,0xa9,0x77,0x83,0xa5,0x73,0x7e,0xa1,0x6a, 0x73,0x99,0x73,0x7d,0xa2,0x6b,0x6f,0x8a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x36,0x34,0x45,0x64,0x50,0x63,0x5e,0x4b,0x5d,0x5e,0x4b,0x5d, 0x5e,0x4b,0x5d,0x5d,0x4a,0x5c,0x5d,0x4a,0x5c,0x5d,0x49,0x5b,0x52,0x41,0x51,0x84, 0x8e,0xab,0x62,0x6d,0x94,0x5d,0x69,0x91,0x6b,0x77,0x9b,0x6c,0x77,0x9c,0x6c,0x79, 0x9c,0x6c,0x77,0x9c,0x6b,0x76,0x9b,0x69,0x74,0x99,0x63,0x6e,0x94,0x55,0x60,0x8a, 0x52,0x4f,0x7a,0x73,0x7d,0x9b,0x09,0x09,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x7c,0x7a,0x8b,0x93,0x90,0xa4,0x92,0x9b,0xb5,0x62,0x6c,0x93,0x52, 0x5c,0x84,0x43,0x49,0x68,0x13,0x13,0x1a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x02,0x02,0x02,0x43,0x4c,0x69,0x34,0x3a,0x4c,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x06,0x07,0x2a,0x1f,0x26,0x21,0x17,0x1b, 0x20,0x17,0x1b,0x86,0x84,0x8e,0xe8,0xeb,0xf6,0xb4,0xbc,0xd2,0xc9,0xcf,0xe1,0xc3, 0xc9,0xdd,0xba,0xc1,0xd8,0xb3,0xba,0xd2,0xab,0xb3,0xcc,0xaa,0xb2,0xcc,0xa5,0xad, 0xc7,0xa1,0xaa,0xc6,0x9d,0xa5,0xc1,0x98,0xa2,0xbf,0x94,0x9f,0xbc,0x92,0x9b,0xb9, 0x8d,0x96,0xb5,0x84,0x8d,0xaf,0x85,0x90,0xb0,0x94,0x9b,0xb4,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x16,0x17,0x1f,0x6e,0x59,0x70,0x5d,0x4a, 0x5c,0x5d,0x4a,0x5c,0x5d,0x49,0x5b,0x5d,0x49,0x5b,0x5d,0x49,0x5b,0x5c,0x49,0x5b, 0x55,0x43,0x53,0x69,0x6d,0x89,0x80,0x8b,0xaa,0x53,0x5e,0x88,0x6c,0x79,0x9c,0x6b, 0x77,0x9b,0x6c,0x79,0x9c,0x6c,0x79,0x9c,0x6b,0x76,0x9b,0x6a,0x75,0x9a,0x65,0x72, 0x98,0x5d,0x6a,0x91,0x54,0x50,0x79,0x5d,0x6a,0x91,0x4e,0x4f,0x54,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x06,0x08,0x7d,0x7b,0x8b,0xa8,0xad,0xc2, 0xab,0xb2,0xc7,0xa3,0xab,0xc2,0x94,0x9d,0xb8,0x66,0x73,0x98,0x51,0x5a,0x82,0x3f, 0x43,0x60,0x0b,0x0c,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x03,0x03,0x04,0x39,0x41,0x5a,0x6f,0x78,0x95,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x28,0x1f, 0x25,0x23,0x19,0x1d,0x21,0x17,0x1b,0x67,0x62,0x6b,0xf2,0xf6,0xff,0xba,0xc2,0xd8, 0xd1,0xd8,0xe8,0xcf,0xd6,0xe8,0xc3,0xca,0xde,0xbe,0xc6,0xdb,0xb8,0xc0,0xd7,0xb7, 0xbf,0xd7,0xb0,0xb9,0xd3,0xab,0xb4,0xcf,0xa7,0xb0,0xcb,0xa5,0xad,0xc9,0x9f,0xa9, 0xc4,0x9b,0xa5,0xc3,0x9a,0xa3,0xc0,0x93,0x9d,0xbb,0x93,0x9b,0xbb,0xb3,0xbc,0xd2, 0x22,0x21,0x27,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x08,0x0a,0x70, 0x5d,0x74,0x5e,0x4a,0x5c,0x5d,0x49,0x5b,0x5d,0x49,0x5b,0x5b,0x48,0x5a,0x5b,0x48, 0x5a,0x5a,0x47,0x58,0x56,0x44,0x54,0x5b,0x59,0x72,0x99,0xa2,0xbb,0x52,0x57,0x82, 0x69,0x74,0x99,0x6b,0x76,0x9b,0x6c,0x79,0x9c,0x6c,0x79,0x9c,0x6b,0x76,0x9b,0x6b, 0x77,0x9b,0x6a,0x75,0x9a,0x62,0x6d,0x94,0x52,0x53,0x7e,0x52,0x4f,0x7b,0x70,0x77, 0x8c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2d,0x2c, 0x32,0x29,0x26,0x2c,0x4b,0x3b,0x4b,0x61,0x5f,0x6e,0x97,0x9e,0xb1,0xa4,0xab,0xc1, 0x9f,0xa8,0xbf,0x93,0x9c,0xb8,0x74,0x80,0xa1,0x51,0x5b,0x85,0x43,0x4c,0x6f,0x1c, 0x20,0x2e,0x2b,0x2d,0x44,0x4a,0x55,0x77,0x81,0x8c,0xa8,0x33,0x37,0x43,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x1a,0x14,0x19,0x29,0x1d,0x23,0x26,0x1b,0x20,0x47,0x3e,0x45,0xf5,0xf8, 0xff,0xbb,0xc3,0xd9,0xce,0xd5,0xe7,0xd1,0xd7,0xe8,0xca,0xd1,0xe5,0xc1,0xc9,0xde, 0xbb,0xc4,0xd9,0xb8,0xc0,0xd7,0xb2,0xbb,0xd5,0xb2,0xba,0xd3,0xac,0xb5,0xd0,0xaa, 0xb3,0xcf,0xa5,0xaf,0xcb,0xa2,0xab,0xc8,0x9d,0xa7,0xc4,0x95,0x9d,0xbf,0x92,0x9a, 0xba,0xaf,0xb8,0xd0,0x4e,0x4d,0x5b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x3b,0x3a,0x4f,0x61,0x4e,0x61,0x5c,0x49,0x5a,0x5b,0x48,0x59,0x5a, 0x47,0x58,0x5b,0x48,0x59,0x5a,0x47,0x58,0x57,0x44,0x55,0x53,0x4a,0x5d,0xac,0xb3, 0xc8,0x53,0x5d,0x88,0x60,0x6d,0x94,0x6b,0x77,0x9b,0x6e,0x7a,0x9d,0x6d,0x79,0x9c, 0x6b,0x77,0x9b,0x6a,0x75,0x9a,0x6b,0x76,0x9b,0x66,0x72,0x98,0x58,0x65,0x8d,0x64, 0x53,0x76,0x5e,0x6b,0x92,0x23,0x23,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x0d,0x0c,0x0e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x39,0x3c,0x44,0x8c,0x91,0xa4,0xa2,0xaa,0xc0,0xa3,0xab,0xc2, 0x9a,0xa2,0xbb,0x83,0x8d,0xac,0x61,0x6c,0x92,0x8f,0x99,0xb4,0x5a,0x60,0x70,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x06,0x08,0x35,0x27,0x31,0x2f,0x22,0x29,0x2f, 0x22,0x29,0xdf,0xe1,0xec,0xbb,0xc3,0xd8,0xbf,0xc7,0xda,0xcb,0xd1,0xe1,0xc3,0xca, 0xde,0xbb,0xc2,0xd8,0xb4,0xbc,0xd3,0xb2,0xba,0xd2,0xb0,0xb8,0xcf,0xad,0xb4,0xcf, 0xa9,0xb1,0xcb,0xa5,0xad,0xc9,0x9f,0xa8,0xc4,0x9c,0xa5,0xc3,0x96,0xa1,0xc0,0x92, 0x9c,0xbb,0x8b,0x8b,0xad,0xa1,0xab,0xc8,0x73,0x75,0x88,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x19,0x21,0x6c,0x57,0x6d,0x5b,0x48,0x59, 0x5a,0x47,0x58,0x5a,0x47,0x58,0x5a,0x47,0x58,0x5a,0x47,0x58,0x58,0x45,0x56,0x4d, 0x3d,0x4c,0xaf,0xb5,0xc8,0x5c,0x69,0x90,0x58,0x64,0x8d,0x6d,0x79,0x9c,0x6b,0x77, 0x9b,0x6c,0x79,0x9c,0x6d,0x79,0x9c,0x6c,0x79,0x9c,0x6c,0x79,0x9c,0x69,0x74,0x99, 0x5e,0x6b,0x92,0x5b,0x52,0x79,0x52,0x5d,0x86,0x66,0x69,0x71,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x21,0x20,0x26,0x6b,0x6f,0x7f,0x8e,0x95,0xa9,0x93,0x9b,0xb0,0x3a,0x3d,0x46, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x32,0x27,0x30, 0x35,0x27,0x30,0x2e,0x22,0x29,0xa9,0xa9,0xb6,0xb3,0xbb,0xd0,0xab,0xb3,0xc9,0xbe, 0xc4,0xd7,0xb7,0xbe,0xd1,0xb0,0xb8,0xce,0xa8,0xb0,0xc8,0xa4,0xac,0xc4,0xa0,0xa9, 0xc2,0x9c,0xa4,0xc0,0x95,0x9f,0xbb,0x93,0x9c,0xbb,0x8a,0x93,0xb4,0x88,0x92,0xb2, 0x82,0x8d,0xaf,0x7e,0x88,0xac,0x73,0x73,0x9a,0x74,0x80,0xa5,0x75,0x7b,0x98,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x09,0x0c,0x75,0x61, 0x7a,0x5b,0x48,0x59,0x5a,0x47,0x58,0x5a,0x47,0x58,0x5a,0x47,0x58,0x5a,0x47,0x58, 0x58,0x45,0x56,0x4f,0x3d,0x4b,0x8f,0x93,0xa7,0x7c,0x86,0xa7,0x53,0x5e,0x88,0x6b, 0x77,0x9b,0x6d,0x79,0x9c,0x6d,0x79,0x9c,0x6b,0x77,0x9b,0x6c,0x79,0x9c,0x6b,0x76, 0x9b,0x6a,0x75,0x9a,0x64,0x71,0x96,0x52,0x58,0x83,0x55,0x50,0x79,0x77,0x81,0x9b, 0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x25,0x1d,0x24,0x37,0x2a,0x34,0x2f,0x22,0x29,0x80,0x7e,0x8a,0xaf,0xb5,0xca, 0x94,0x9c,0xb8,0xb0,0xb7,0xcb,0xa9,0xb1,0xc6,0x9d,0xa7,0xc0,0x98,0xa1,0xbb,0x92, 0x9c,0xb9,0x8d,0x98,0xb4,0x8a,0x93,0xb1,0x86,0x91,0xb0,0x82,0x8c,0xac,0x7a,0x84, 0xa7,0x75,0x80,0xa4,0x71,0x7b,0xa0,0x69,0x75,0x9b,0x5c,0x5f,0x8a,0x5c,0x5a,0x84, 0x6d,0x78,0x9c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x41,0x3e,0x53,0x5f,0x4b,0x5e,0x59,0x46,0x57,0x5a,0x47,0x58,0x59,0x46, 0x57,0x59,0x46,0x57,0x59,0x46,0x57,0x51,0x3f,0x4e,0x72,0x71,0x83,0x93,0x9d,0xb8, 0x52,0x55,0x81,0x69,0x74,0x9a,0x6e,0x7a,0x9d,0x6c,0x79,0x9c,0x6e,0x7a,0x9d,0x6d, 0x79,0x9c,0x6b,0x76,0x9b,0x6b,0x77,0x9b,0x6a,0x75,0x9a,0x5a,0x65,0x8d,0x63,0x53, 0x77,0x62,0x6d,0x94,0x43,0x43,0x43,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x0d,0x0b,0x0d,0x3e,0x30,0x3b,0x31,0x24,0x2b,0x5d,0x56, 0x62,0xb1,0xb8,0xcb,0x7d,0x88,0xa8,0xa3,0xab,0xc2,0x9b,0xa5,0xbf,0x92,0x9b,0xb5, 0x89,0x92,0xb1,0x84,0x8e,0xad,0x82,0x8c,0xab,0x7b,0x86,0xa7,0x79,0x84,0xa5,0x72, 0x7d,0xa1,0x6d,0x79,0x9f,0x69,0x74,0x9a,0x63,0x71,0x96,0x5e,0x6b,0x92,0x54,0x5e, 0x88,0x57,0x53,0x7a,0x60,0x6d,0x94,0x19,0x18,0x20,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x1b,0x24,0x67,0x52,0x67,0x59,0x46,0x57,0x59, 0x46,0x57,0x58,0x45,0x56,0x58,0x46,0x56,0x58,0x45,0x56,0x54,0x42,0x51,0x5b,0x53, 0x64,0x90,0x99,0xb4,0x52,0x56,0x82,0x60,0x6d,0x93,0x6d,0x7a,0x9d,0x6e,0x7a,0x9d, 0x6f,0x7b,0x9f,0x6d,0x7a,0x9d,0x6e,0x7a,0x9d,0x6c,0x79,0x9c,0x6b,0x77,0x9b,0x62, 0x6d,0x94,0x52,0x50,0x7b,0x52,0x54,0x80,0x7c,0x7f,0x89,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3a,0x2d,0x38,0x33, 0x26,0x2e,0x41,0x37,0x40,0xb7,0xbc,0xcf,0x6f,0x7b,0x9f,0x95,0x9f,0xb9,0x98,0xa1, 0xba,0x8b,0x95,0xb2,0x82,0x8d,0xac,0x7c,0x88,0xa8,0x79,0x83,0xa4,0x76,0x82,0xa3, 0x72,0x7d,0xa1,0x6f,0x7b,0x9f,0x6a,0x75,0x9a,0x65,0x72,0x96,0x60,0x6c,0x93,0x5b, 0x67,0x90,0x52,0x5d,0x86,0x5f,0x53,0x79,0x58,0x64,0x8c,0x35,0x35,0x46,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x09,0x0b,0x71,0x5c,0x73, 0x59,0x46,0x57,0x58,0x45,0x56,0x58,0x45,0x56,0x57,0x44,0x55,0x57,0x44,0x55,0x55, 0x43,0x53,0x4d,0x40,0x4e,0x99,0xa2,0xbb,0x5b,0x66,0x8e,0x56,0x63,0x8b,0x6f,0x7b, 0x9f,0x6e,0x7a,0x9d,0x71,0x7c,0xa0,0x71,0x7c,0xa0,0x6f,0x7b,0x9f,0x6f,0x7b,0x9f, 0x6d,0x7a,0x9d,0x6a,0x75,0x9a,0x54,0x5f,0x89,0x57,0x50,0x79,0x85,0x8f,0xab,0x0f, 0x0f,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x28,0x20,0x27,0x38,0x2a,0x34,0x30,0x23,0x2b,0xb0,0xb6,0xc6,0x72,0x7d,0xa0,0x8a, 0x94,0xb1,0x95,0x9f,0xb9,0x89,0x93,0xb0,0x7e,0x89,0xa9,0x7a,0x85,0xa5,0x74,0x80, 0xa2,0x73,0x7e,0xa1,0x6d,0x79,0x9c,0x6b,0x76,0x9b,0x66,0x73,0x98,0x64,0x6f,0x95, 0x5e,0x6a,0x91,0x5a,0x65,0x8d,0x55,0x60,0x8a,0x60,0x53,0x77,0x53,0x5e,0x88,0x4c, 0x4d,0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x4e,0x42,0x53,0x59,0x47,0x58,0x58,0x45,0x56,0x57,0x44,0x55,0x56,0x43,0x53, 0x56,0x44,0x54,0x55,0x43,0x53,0x4a,0x39,0x47,0x92,0x98,0xaf,0x67,0x74,0x99,0x52, 0x55,0x81,0x6c,0x77,0x9c,0x71,0x7c,0xa0,0x72,0x7d,0xa0,0x71,0x7c,0xa0,0x73,0x7e, 0xa1,0x72,0x7d,0xa1,0x71,0x7c,0x9f,0x71,0x7c,0x9f,0x5d,0x6a,0x91,0x5a,0x52,0x79, 0x62,0x6d,0x94,0x5c,0x5d,0x5f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x0f,0x0c,0x0f,0x3d,0x2f,0x3a,0x31,0x24,0x2c,0x90,0x92,0xa2, 0x7e,0x8a,0xa9,0x7c,0x86,0xa7,0x94,0x9f,0xb8,0x88,0x92,0xb0,0x7b,0x86,0xa7,0x74, 0x80,0xa2,0x6f,0x7c,0x9f,0x6f,0x7b,0x9f,0x6b,0x77,0x9b,0x67,0x74,0x99,0x63,0x6f, 0x95,0x60,0x6c,0x93,0x5d,0x69,0x91,0x57,0x64,0x8c,0x54,0x5f,0x89,0x64,0x53,0x76, 0x52,0x4f,0x7b,0x53,0x57,0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x1d,0x1b,0x23,0x5d,0x49,0x5b,0x57,0x44,0x55,0x56,0x43, 0x53,0x56,0x43,0x53,0x56,0x43,0x53,0x56,0x43,0x53,0x4d,0x3c,0x4a,0x7c,0x7d,0x92, 0x7c,0x86,0xa7,0x52,0x55,0x80,0x69,0x75,0x9a,0x73,0x7e,0xa1,0x71,0x7d,0xa0,0x74, 0x80,0xa2,0x74,0x80,0xa2,0x74,0x80,0xa2,0x72,0x7d,0xa0,0x73,0x7e,0xa1,0x67,0x73, 0x99,0x52,0x5b,0x85,0x52,0x55,0x81,0x86,0x8b,0x9a,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3c,0x2f,0x3a,0x33,0x26, 0x2e,0x73,0x72,0x81,0x90,0x9a,0xb5,0x6f,0x7b,0x9f,0x92,0x9b,0xb7,0x85,0x90,0xaf, 0x7b,0x86,0xa7,0x6f,0x7b,0x9f,0x6d,0x79,0x9c,0x6b,0x76,0x9b,0x69,0x74,0x99,0x65, 0x71,0x96,0x62,0x6d,0x94,0x5e,0x6a,0x91,0x5c,0x67,0x90,0x57,0x63,0x8c,0x54,0x5f, 0x89,0x60,0x53,0x77,0x5d,0x52,0x79,0x55,0x5f,0x85,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x0b,0x66,0x52,0x66,0x56, 0x44,0x54,0x56,0x43,0x53,0x55,0x43,0x53,0x54,0x42,0x51,0x54,0x42,0x51,0x4f,0x3e, 0x4c,0x65,0x60,0x71,0x93,0x9c,0xb8,0x52,0x5d,0x86,0x60,0x6c,0x93,0x71,0x7c,0xa0, 0x73,0x7e,0xa1,0x75,0x81,0xa3,0x76,0x82,0xa3,0x76,0x82,0xa3,0x76,0x82,0xa3,0x73, 0x7e,0xa1,0x72,0x7d,0xa0,0x5a,0x66,0x8e,0x52,0x50,0x7c,0x84,0x8e,0xac,0x21,0x21, 0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x29, 0x21,0x29,0x38,0x2a,0x33,0x57,0x51,0x5d,0x96,0xa0,0xba,0x69,0x74,0x99,0x92,0x9c, 0xb7,0x86,0x91,0xaf,0x79,0x83,0xa4,0x71,0x7c,0x9f,0x69,0x74,0x99,0x67,0x74,0x99, 0x65,0x71,0x96,0x62,0x6d,0x94,0x5f,0x6b,0x92,0x5b,0x67,0x90,0x5a,0x65,0x8d,0x55, 0x62,0x8b,0x54,0x5f,0x89,0x55,0x50,0x79,0x64,0x53,0x76,0x52,0x5d,0x86,0x0a,0x0a, 0x0d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x03, 0x58,0x48,0x5b,0x54,0x42,0x52,0x54,0x42,0x51,0x54,0x42,0x51,0x54,0x42,0x51,0x54, 0x42,0x51,0x51,0x3f,0x4e,0x53,0x48,0x58,0xa5,0xad,0xc3,0x58,0x64,0x8d,0x57,0x63, 0x8c,0x71,0x7c,0xa0,0x74,0x80,0xa1,0x77,0x83,0xa4,0x79,0x84,0xa5,0x7a,0x85,0xa5, 0x76,0x82,0xa3,0x75,0x81,0xa2,0x76,0x82,0xa3,0x66,0x73,0x98,0x52,0x52,0x7c,0x64, 0x71,0x96,0x74,0x75,0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x12,0x0f,0x12,0x3c,0x2e,0x38,0x3f,0x36,0x40,0xa7,0xaf,0xc4,0x65, 0x71,0x96,0x8e,0x99,0xb4,0x85,0x90,0xad,0x76,0x82,0xa3,0x6d,0x79,0x9c,0x66,0x73, 0x98,0x65,0x72,0x98,0x62,0x6e,0x94,0x60,0x6d,0x93,0x5d,0x69,0x91,0x5b,0x66,0x8e, 0x56,0x63,0x8b,0x55,0x60,0x8a,0x54,0x5f,0x89,0x52,0x4f,0x7a,0x64,0x52,0x72,0x52, 0x57,0x82,0x25,0x22,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x2d,0x27,0x33,0x5a,0x47,0x58,0x54,0x42,0x51,0x53,0x41,0x51, 0x54,0x42,0x51,0x53,0x41,0x51,0x53,0x41,0x51,0x4a,0x3a,0x47,0xa6,0xad,0xc2,0x6a, 0x75,0x9a,0x53,0x5e,0x88,0x6d,0x79,0x9c,0x76,0x82,0xa3,0x79,0x84,0xa5,0x7a,0x85, 0xa5,0x7d,0x88,0xa8,0x7d,0x88,0xa8,0x7b,0x85,0xa7,0x79,0x84,0xa5,0x72,0x7e,0xa1, 0x55,0x60,0x8a,0x54,0x5f,0x89,0x9b,0xa1,0xb1,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3a,0x2d,0x37,0x35,0x27,0x2f, 0xa7,0xae,0xc1,0x64,0x71,0x96,0x86,0x91,0xaf,0x88,0x92,0xb0,0x79,0x83,0xa4,0x6b, 0x76,0x9b,0x66,0x72,0x98,0x63,0x6f,0x95,0x62,0x6d,0x94,0x5e,0x6a,0x92,0x5b,0x67, 0x90,0x58,0x65,0x8d,0x57,0x63,0x8c,0x54,0x5f,0x89,0x53,0x5e,0x88,0x52,0x50,0x7b, 0x64,0x4e,0x6c,0x52,0x54,0x7e,0x38,0x33,0x49,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0c,0x0c,0x10,0x63,0x4f,0x62,0x53,0x41, 0x51,0x53,0x41,0x51,0x52,0x40,0x4f,0x52,0x40,0x4f,0x51,0x40,0x4f,0x4c,0x3b,0x48, 0x8d,0x8f,0xa3,0x7e,0x8a,0xa9,0x52,0x5d,0x86,0x67,0x73,0x99,0x77,0x83,0xa4,0x7a, 0x85,0xa5,0x7c,0x88,0xa8,0x80,0x8a,0xaa,0x7e,0x8a,0xa9,0x7d,0x88,0xa8,0x7b,0x86, 0xa7,0x7a,0x84,0xa5,0x65,0x72,0x96,0x52,0x56,0x81,0x80,0x8b,0xaa,0x36,0x36,0x36, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x21, 0x29,0x38,0x2a,0x33,0x8b,0x8c,0x9e,0x79,0x84,0xa4,0x80,0x8a,0xaa,0x88,0x92,0xb0, 0x79,0x84,0xa5,0x6c,0x79,0x9c,0x66,0x72,0x98,0x60,0x6d,0x94,0x5e,0x6b,0x92,0x5c, 0x69,0x90,0x5a,0x65,0x8d,0x58,0x64,0x8c,0x56,0x62,0x8b,0x54,0x5f,0x89,0x52,0x5c, 0x85,0x52,0x53,0x7d,0x64,0x53,0x74,0x52,0x4f,0x7b,0x46,0x40,0x5d,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x05,0x07,0x62, 0x4f,0x63,0x53,0x41,0x51,0x52,0x40,0x4f,0x51,0x40,0x4f,0x51,0x40,0x4f,0x51,0x40, 0x4f,0x4c,0x3b,0x49,0x72,0x70,0x83,0xa4,0xac,0xc3,0x55,0x60,0x8a,0x5a,0x66,0x8e, 0x76,0x82,0xa3,0x7d,0x88,0xa8,0x7d,0x88,0xa8,0x7e,0x8a,0xa9,0x83,0x8d,0xac,0x83, 0x8d,0xac,0x7e,0x8a,0xa9,0x7e,0x8a,0xa9,0x72,0x7d,0xa0,0x52,0x5d,0x86,0x63,0x6f, 0x95,0x81,0x82,0x86,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x13,0x0f,0x13,0x3c,0x2e,0x39,0x6d,0x6b,0x7b,0x90,0x99,0xb4,0x74,0x80, 0xa2,0x88,0x92,0xb0,0x7a,0x84,0xa5,0x6d,0x79,0x9d,0x64,0x6f,0x95,0x60,0x6c,0x93, 0x5e,0x6b,0x92,0x5b,0x67,0x90,0x5a,0x65,0x8d,0x57,0x63,0x8c,0x55,0x60,0x8a,0x53, 0x5e,0x89,0x52,0x5d,0x88,0x52,0x56,0x81,0x64,0x53,0x76,0x53,0x50,0x7a,0x4f,0x49, 0x6d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x3a,0x30,0x3c,0x55,0x42,0x52,0x51,0x40,0x4f,0x51,0x3f,0x4e,0x51, 0x3f,0x4e,0x50,0x3f,0x4d,0x4f,0x3e,0x4c,0x5a,0x52,0x63,0xc8,0xcc,0xda,0x62,0x6e, 0x94,0x52,0x53,0x7e,0x75,0x81,0xa2,0x7d,0x89,0xa8,0x82,0x8c,0xab,0x84,0x90,0xad, 0x84,0x90,0xad,0x85,0x90,0xad,0x83,0x8d,0xac,0x82,0x8c,0xab,0x7e,0x89,0xa9,0x5e, 0x6b,0x92,0x54,0x5f,0x89,0x9c,0xa2,0xb4,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3c,0x2e,0x39,0x57,0x51,0x5e,0xa7, 0xaf,0xc4,0x6a,0x75,0x9a,0x8a,0x94,0xb1,0x7b,0x86,0xa7,0x6d,0x79,0x9d,0x65,0x71, 0x96,0x5f,0x6b,0x92,0x5f,0x6b,0x92,0x5c,0x67,0x90,0x5a,0x66,0x8e,0x56,0x63,0x8b, 0x55,0x60,0x8a,0x53,0x5e,0x88,0x52,0x5d,0x88,0x52,0x56,0x81,0x62,0x53,0x77,0x55, 0x50,0x79,0x53,0x4f,0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x15,0x1c,0x5c,0x49,0x5a,0x50,0x3e,0x4d, 0x50,0x3e,0x4d,0x4f,0x3e,0x4c,0x4f,0x3e,0x4c,0x4f,0x3d,0x4b,0x4a,0x3d,0x4b,0xca, 0xd0,0xdd,0x74,0x80,0xa2,0x53,0x50,0x7a,0x72,0x7d,0xa1,0x82,0x8c,0xab,0x84,0x90, 0xad,0x85,0x90,0xad,0x86,0x91,0xaf,0x86,0x91,0xaf,0x84,0x90,0xad,0x85,0x90,0xad, 0x82,0x8c,0xab,0x72,0x7d,0xa0,0x52,0x5c,0x85,0x85,0x90,0xad,0x41,0x41,0x41,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x22,0x2a, 0x46,0x3a,0x47,0xaf,0xb5,0xca,0x67,0x73,0x99,0x83,0x8e,0xac,0x7e,0x89,0xa9,0x71, 0x7c,0x9f,0x65,0x71,0x96,0x60,0x6c,0x93,0x5d,0x6a,0x91,0x5b,0x67,0x90,0x58,0x65, 0x8d,0x57,0x63,0x8c,0x55,0x60,0x8a,0x53,0x5f,0x89,0x53,0x5e,0x88,0x52,0x58,0x83, 0x52,0x4f,0x7a,0x57,0x50,0x79,0x52,0x50,0x7b,0x09,0x08,0x0b,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x0b,0x64,0x50, 0x64,0x50,0x3e,0x4d,0x4f,0x3e,0x4c,0x4f,0x3e,0x4c,0x4f,0x3d,0x4b,0x4f,0x3d,0x4c, 0x47,0x36,0x43,0xaf,0xb3,0xc1,0x92,0x9b,0xb7,0x55,0x50,0x79,0x65,0x71,0x96,0x82, 0x8c,0xab,0x88,0x92,0xb0,0x88,0x92,0xb0,0x8b,0x95,0xb2,0x8b,0x95,0xb2,0x8b,0x95, 0xb2,0x86,0x91,0xaf,0x86,0x91,0xaf,0x7c,0x88,0xa8,0x56,0x63,0x8b,0x6b,0x76,0x9b, 0x85,0x88,0x8d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x16,0x11,0x15,0x40,0x30,0x3c,0xa5,0xab,0xbd,0x71,0x7c,0xa0,0x7a,0x84,0xa5, 0x81,0x8b,0xab,0x71,0x7c,0xa0,0x67,0x73,0x98,0x5f,0x6c,0x93,0x5d,0x6a,0x91,0x5d, 0x69,0x91,0x58,0x64,0x8d,0x57,0x64,0x8c,0x55,0x62,0x8b,0x54,0x5f,0x89,0x52,0x5d, 0x86,0x52,0x5c,0x86,0x52,0x4f,0x7a,0x5d,0x52,0x79,0x52,0x50,0x7b,0x1e,0x1b,0x26, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x47,0x39,0x47,0x51,0x3f,0x4e,0x4f,0x3e,0x4c,0x4f,0x3e,0x4c,0x4f,0x3d, 0x4c,0x4e,0x3c,0x4a,0x49,0x38,0x45,0x8a,0x8a,0x98,0xb0,0xb7,0xca,0x52,0x4f,0x7a, 0x5c,0x67,0x90,0x80,0x8a,0xaa,0x84,0x90,0xad,0x8a,0x94,0xb1,0x8d,0x96,0xb3,0x8d, 0x98,0xb3,0x8a,0x94,0xb1,0x8b,0x95,0xb2,0x8a,0x94,0xb1,0x83,0x8d,0xac,0x67,0x74, 0x99,0x55,0x60,0x8a,0x9d,0xa4,0xb8,0x09,0x09,0x09,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x9a,0x9d,0xa6,0x70,0x71,0x77,0x15,0x15,0x17,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0x30,0x3c,0x8a,0x8b,0x9e,0x81,0x8c, 0xab,0x6f,0x7b,0x9f,0x83,0x8d,0xac,0x73,0x7e,0xa1,0x67,0x74,0x99,0x62,0x6e,0x94, 0x5d,0x6a,0x91,0x5c,0x69,0x90,0x5b,0x67,0x8e,0x57,0x64,0x8c,0x56,0x62,0x8b,0x54, 0x5f,0x89,0x53,0x5d,0x88,0x52,0x5b,0x85,0x52,0x52,0x7d,0x63,0x53,0x77,0x52,0x4f, 0x7a,0x32,0x2d,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x1a,0x21,0x53,0x41,0x50,0x4e,0x3c,0x4a,0x4e, 0x3c,0x4a,0x4d,0x3b,0x49,0x4c,0x3b,0x49,0x4a,0x39,0x46,0x6a,0x65,0x75,0xcb,0xd0, 0xdd,0x52,0x56,0x81,0x53,0x5e,0x88,0x85,0x90,0xad,0x8a,0x94,0xb1,0x8a,0x94,0xb1, 0x8d,0x98,0xb3,0x90,0x99,0xb4,0x8c,0x95,0xb2,0x8e,0x99,0xb4,0x8c,0x96,0xb2,0x89, 0x93,0xb0,0x7c,0x86,0xa8,0x52,0x5d,0x88,0x7d,0x88,0xa8,0x47,0x48,0x49,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x07,0x08,0x59, 0x47,0x59,0x83,0x75,0x86,0xb8,0xbf,0xd0,0xaa,0xb1,0xc7,0xce,0xd2,0xde,0x88,0x8b, 0x94,0x33,0x35,0x3a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x25,0x2e,0x6d, 0x6a,0x7a,0x94,0x9d,0xb8,0x66,0x73,0x98,0x83,0x8d,0xac,0x76,0x81,0xa3,0x69,0x75, 0x9a,0x63,0x6e,0x94,0x5e,0x6b,0x92,0x5d,0x6a,0x91,0x5b,0x66,0x8e,0x57,0x64,0x8c, 0x56,0x62,0x8b,0x54,0x5f,0x89,0x53,0x5e,0x88,0x52,0x5c,0x86,0x52,0x54,0x7e,0x64, 0x53,0x74,0x5c,0x52,0x79,0x40,0x3a,0x53,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0x09,0x0c,0x61,0x4d,0x60, 0x4e,0x3c,0x4a,0x4d,0x3b,0x49,0x4c,0x3b,0x49,0x4c,0x3b,0x49,0x4c,0x3b,0x49,0x53, 0x49,0x59,0xd3,0xd7,0xe2,0x58,0x65,0x8d,0x52,0x4f,0x7a,0x81,0x8b,0xaa,0x88,0x92, 0xb0,0x90,0x99,0xb4,0x90,0x99,0xb4,0x92,0x9c,0xb7,0x8e,0x99,0xb4,0x92,0x9c,0xb7, 0x90,0x9a,0xb5,0x8b,0x95,0xb2,0x82,0x8c,0xab,0x5c,0x67,0x90,0x5e,0x6a,0x91,0x80, 0x83,0x8e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x61,0x4d,0x61,0x62,0x4f,0x61,0xc3,0xc4,0xcf,0x92,0x9c,0xb7,0x83,0x8e,0xac,0xc2, 0xc8,0xd7,0xd2,0xd7,0xe1,0xca,0xcf,0xdb,0x9f,0xa4,0xb3,0x4d,0x50,0x5a,0x0a,0x0b, 0x0d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x1b,0x15,0x1b,0x5d,0x55,0x65,0xa4,0xac,0xc2,0x66,0x72,0x98,0x7d,0x89,0xa8,0x77, 0x83,0xa4,0x6b,0x76,0x9b,0x63,0x6f,0x95,0x5f,0x6b,0x92,0x5e,0x6b,0x92,0x5c,0x69, 0x90,0x58,0x64,0x8d,0x56,0x63,0x8b,0x55,0x62,0x8b,0x53,0x5f,0x89,0x52,0x5c,0x86, 0x52,0x55,0x81,0x64,0x53,0x76,0x60,0x53,0x77,0x4b,0x44,0x64,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03, 0x04,0x57,0x47,0x59,0x51,0x40,0x4f,0x4c,0x3b,0x49,0x4d,0x3b,0x49,0x4c,0x3b,0x49, 0x4c,0x3b,0x49,0x47,0x38,0x44,0xb7,0xbd,0xcd,0x6e,0x7a,0x9d,0x5d,0x52,0x79,0x79, 0x84,0xa5,0x89,0x93,0xb0,0x8c,0x95,0xb2,0x92,0x9b,0xb7,0x93,0x9c,0xb8,0x94,0x9d, 0xb8,0x92,0x9b,0xb7,0x92,0x9b,0xb7,0x8c,0x95,0xb2,0x89,0x93,0xb0,0x6b,0x76,0x9b, 0x53,0x5f,0x89,0x91,0x9a,0xb2,0x0c,0x0c,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x44,0x36,0x44,0x61,0x4d,0x60,0x88,0x7c,0x8d,0xab,0xb2,0xc7,0x80,0x8b,0xaa, 0x8a,0x94,0xb1,0x8a,0x94,0xb1,0xe5,0xe7,0xee,0xd9,0xdd,0xe6,0xcc,0xd1,0xde,0xbb, 0xc1,0xd2,0x9d,0xa5,0xbb,0x5d,0x62,0x74,0x1c,0x1f,0x26,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x04,0x03,0x04,0x4c,0x3e,0x4c,0xaa,0xb2,0xc7,0x74,0x80,0xa2, 0x74,0x80,0xa2,0x7a,0x84,0xa5,0x6c,0x77,0x9b,0x64,0x6f,0x95,0x5f,0x6c,0x93,0x5d, 0x6a,0x91,0x5b,0x67,0x90,0x58,0x64,0x8d,0x57,0x63,0x8c,0x55,0x60,0x8a,0x54,0x5f, 0x89,0x53,0x5e,0x88,0x52,0x5b,0x85,0x63,0x53,0x77,0x64,0x53,0x76,0x51,0x4b,0x70, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x32,0x2a,0x34,0x56,0x44,0x54,0x4b,0x3a,0x48,0x4b,0x3a, 0x48,0x4b,0x3a,0x47,0x4a,0x39,0x47,0x46,0x36,0x42,0x95,0x96,0xa9,0x8c,0x96,0xb3, 0x5e,0x53,0x79,0x72,0x7d,0xa0,0x8a,0x94,0xb1,0x90,0x99,0xb4,0x90,0x9a,0xb5,0x94, 0x9d,0xb8,0x96,0xa0,0xba,0x95,0x9f,0xb9,0x91,0x9b,0xb5,0x90,0x99,0xb4,0x8a,0x94, 0xb1,0x7a,0x85,0xa7,0x52,0x5d,0x88,0x6f,0x7c,0x9f,0x54,0x55,0x56,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x07,0x06,0x07,0x61,0x4d,0x60,0x5f,0x4c,0x5e,0xb6,0xb6,0xc6,0x79,0x83, 0xa4,0x8b,0x94,0xb1,0x8c,0x96,0xb2,0x80,0x8a,0xaa,0xb4,0xbb,0xce,0xe6,0xe8,0xee, 0xd9,0xdd,0xe6,0xce,0xd2,0xdf,0xb9,0xc0,0xd1,0xa2,0xaa,0xc1,0x8c,0x96,0xb3,0x63, 0x6c,0x88,0x2e,0x32,0x40,0x05,0x06,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2f,0x24,0x2c,0x9e,0xa4, 0xb8,0x85,0x90,0xaf,0x69,0x75,0x9a,0x7b,0x86,0xa7,0x6d,0x7a,0x9d,0x65,0x71,0x96, 0x5f,0x6c,0x93,0x5d,0x6a,0x91,0x5c,0x67,0x90,0x5a,0x66,0x8e,0x57,0x64,0x8c,0x56, 0x62,0x8b,0x54,0x5f,0x89,0x53,0x5e,0x88,0x52,0x5c,0x86,0x57,0x50,0x79,0x64,0x53, 0x76,0x53,0x4f,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0x0d,0x11,0x5e,0x4b,0x5d,0x4c, 0x3b,0x49,0x4b,0x3a,0x47,0x4a,0x39,0x47,0x4a,0x39,0x47,0x49,0x38,0x45,0x78,0x76, 0x86,0xc1,0xc7,0xd6,0x52,0x4f,0x7a,0x69,0x75,0x9a,0x89,0x93,0xb0,0x90,0x99,0xb4, 0x91,0x9a,0xb5,0x91,0x9b,0xb5,0x95,0x9f,0xb9,0x95,0x9f,0xb9,0x95,0x9f,0xb9,0x92, 0x9b,0xb7,0x90,0x99,0xb4,0x88,0x92,0xb0,0x5b,0x67,0x8e,0x5e,0x6a,0x91,0x7c,0x81, 0x8f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x61,0x4d,0x60,0x60,0x4c,0x5f,0x80,0x74,0x85,0x83, 0x8e,0xac,0x73,0x7e,0xa1,0x8a,0x93,0xb1,0x91,0x9a,0xb5,0x86,0x91,0xaf,0x7a,0x84, 0xa5,0xf0,0xf1,0xf5,0xed,0xef,0xf2,0xe0,0xe2,0xea,0xc6,0xcb,0xd9,0xb1,0xb8,0xcb, 0x9a,0xa3,0xbc,0x88,0x92,0xb0,0x77,0x83,0xa4,0x68,0x74,0x96,0x3b,0x42,0x58,0x10, 0x12,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17, 0x12,0x16,0x85,0x87,0x9a,0x8c,0x96,0xb2,0x64,0x6f,0x95,0x7a,0x85,0xa5,0x6e,0x7b, 0x9d,0x65,0x71,0x96,0x60,0x6d,0x93,0x5e,0x6b,0x92,0x5c,0x69,0x90,0x5b,0x66,0x8e, 0x58,0x64,0x8c,0x56,0x62,0x8b,0x54,0x60,0x8a,0x53,0x5e,0x88,0x52,0x5d,0x88,0x52, 0x4f,0x7b,0x64,0x53,0x74,0x52,0x4f,0x7a,0x0c,0x0b,0x0f,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x05, 0x5c,0x4a,0x5c,0x4c,0x3b,0x49,0x4a,0x39,0x47,0x4a,0x39,0x47,0x4a,0x39,0x47,0x48, 0x37,0x44,0x5b,0x55,0x64,0xd0,0xd5,0xe0,0x52,0x55,0x80,0x5b,0x67,0x8e,0x86,0x91, 0xaf,0x8e,0x99,0xb4,0x94,0x9d,0xb8,0x93,0x9c,0xb7,0x95,0x9f,0xb9,0x95,0x9f,0xb9, 0x98,0xa1,0xba,0x93,0x9c,0xb7,0x90,0x99,0xb4,0x8b,0x95,0xb2,0x6e,0x7a,0x9d,0x55, 0x62,0x8b,0x83,0x8e,0xab,0x11,0x11,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2d,0x23,0x2c,0x5f,0x4b,0x5d,0x5d,0x49,0x5b, 0x99,0x9e,0xb4,0x60,0x6d,0x93,0x7b,0x86,0xa7,0x83,0x8d,0xac,0x90,0x99,0xb4,0x8d, 0x98,0xb3,0x9b,0xa4,0xbc,0x6f,0x66,0x6c,0xc9,0xc5,0xc7,0xfa,0xfa,0xfc,0xe6,0xe8, 0xee,0xc9,0xce,0xdb,0xab,0xb3,0xc8,0x92,0x9b,0xb7,0x7b,0x85,0xa7,0x6d,0x79,0x9c, 0x66,0x72,0x98,0x64,0x6f,0x95,0x4a,0x52,0x6f,0x21,0x25,0x32,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x03,0x02,0x03,0x72,0x6e,0x7f,0x94,0x9d,0xb8,0x5f,0x6b,0x92,0x73, 0x7e,0xa1,0x71,0x7c,0xa0,0x66,0x72,0x98,0x60,0x6c,0x93,0x5e,0x6b,0x92,0x5c,0x69, 0x90,0x5b,0x67,0x90,0x58,0x64,0x8c,0x56,0x63,0x8b,0x55,0x60,0x8a,0x53,0x5f,0x89, 0x52,0x5d,0x88,0x52,0x50,0x7c,0x64,0x4f,0x6e,0x52,0x4f,0x7a,0x23,0x20,0x2d,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x2c,0x24,0x2d,0x50,0x3e,0x4d,0x4a,0x39,0x47,0x4a,0x39,0x47, 0x49,0x38,0x46,0x48,0x37,0x44,0x49,0x3d,0x4a,0xbc,0xc2,0xd2,0x5a,0x65,0x8d,0x53, 0x5e,0x88,0x81,0x8b,0xab,0x8e,0x99,0xb4,0x91,0x9b,0xb5,0x95,0x9f,0xb9,0x95,0x9f, 0xb9,0x95,0x9f,0xb9,0x98,0xa1,0xba,0x94,0x9d,0xb8,0x92,0x9b,0xb7,0x8a,0x94,0xb1, 0x81,0x8b,0xab,0x54,0x5f,0x89,0x6b,0x76,0x9b,0x56,0x58,0x5c,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x64,0x50,0x64,0x64,0x50, 0x64,0x7d,0x72,0x83,0x66,0x72,0x98,0x6b,0x77,0x9b,0x81,0x8b,0xaa,0x80,0x8b,0xaa, 0x86,0x91,0xaf,0x9a,0xa3,0xbc,0xc4,0xc4,0xca,0x34,0x27,0x2f,0x39,0x2b,0x34,0x7f, 0x75,0x7b,0xed,0xec,0xed,0xf1,0xf2,0xf6,0xcb,0xd0,0xdd,0xac,0xb4,0xc9,0x94,0x9d, 0xb8,0x7e,0x89,0xa9,0x6b,0x76,0x9b,0x62,0x6d,0x94,0x5c,0x67,0x90,0x5c,0x67,0x90, 0x56,0x62,0x87,0x31,0x37,0x4c,0x0a,0x0b,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x50,0x4b,0x58,0x9f,0xa8,0xbf, 0x5e,0x6b,0x92,0x69,0x74,0x9a,0x72,0x7d,0xa0,0x65,0x72,0x98,0x60,0x6c,0x93,0x5e, 0x6b,0x92,0x5c,0x69,0x90,0x5b,0x67,0x90,0x5a,0x65,0x8d,0x56,0x63,0x8b,0x56,0x62, 0x8b,0x54,0x5f,0x89,0x53,0x5d,0x88,0x52,0x55,0x80,0x64,0x4d,0x6b,0x52,0x4f,0x7a, 0x35,0x30,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x06,0x08,0x61,0x4d,0x60,0x4c,0x3b, 0x48,0x4a,0x39,0x47,0x49,0x38,0x46,0x48,0x37,0x44,0x41,0x31,0x3c,0xb6,0xba,0xc9, 0x5e,0x6b,0x92,0x52,0x4f,0x7b,0x80,0x8a,0xaa,0x8c,0x95,0xb2,0x94,0x9d,0xb8,0x95, 0x9f,0xb9,0x98,0xa1,0xba,0x95,0x9f,0xb9,0x95,0x9f,0xb9,0x95,0x9f,0xb9,0x92,0x9b, 0xb7,0x8c,0x95,0xb2,0x88,0x92,0xb0,0x5e,0x6b,0x92,0x58,0x64,0x8c,0x76,0x7c,0x8f, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x3a,0x48,0x6f, 0x5b,0x71,0x70,0x5b,0x72,0x9e,0xa3,0xb9,0x56,0x63,0x8b,0x7d,0x88,0xa8,0x80,0x8a, 0xaa,0x7b,0x86,0xa7,0x77,0x83,0xa4,0xba,0xc1,0xd1,0x90,0x88,0x8d,0x36,0x28,0x30, 0x3a,0x2c,0x36,0x42,0x32,0x3d,0x55,0x45,0x52,0xb6,0xae,0xb5,0xf6,0xf7,0xf9,0xcb, 0xd0,0xdd,0xa8,0xb0,0xc6,0x8e,0x98,0xb4,0x7c,0x86,0xa7,0x6e,0x7a,0x9d,0x60,0x6d, 0x93,0x5b,0x66,0x8e,0x56,0x62,0x8b,0x54,0x5f,0x89,0x52,0x5d,0x83,0x40,0x49,0x67, 0x1e,0x23,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x26,0x21, 0x28,0xa0,0xa9,0xc0,0x6e,0x7a,0x9d,0x5e,0x6a,0x92,0x6e,0x7b,0x9d,0x67,0x73,0x99, 0x60,0x6c,0x93,0x5e,0x6b,0x92,0x5d,0x6a,0x91,0x5c,0x69,0x90,0x5a,0x65,0x8d,0x56, 0x63,0x8b,0x56,0x62,0x8b,0x54,0x5f,0x89,0x53,0x5e,0x89,0x52,0x5c,0x86,0x64,0x4c, 0x69,0x52,0x4f,0x7a,0x43,0x3e,0x59,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4b, 0x3d,0x4c,0x4f,0x3e,0x4c,0x49,0x38,0x46,0x48,0x37,0x44,0x48,0x37,0x44,0x46,0x36, 0x42,0x95,0x95,0xa4,0x6b,0x77,0x9b,0x52,0x4f,0x7b,0x71,0x7c,0xa0,0x8a,0x94,0xb1, 0x92,0x9c,0xb7,0x91,0x9b,0xb5,0x95,0x9f,0xb9,0x98,0xa1,0xba,0x95,0x9f,0xb9,0x94, 0x9d,0xb8,0x93,0x9c,0xb7,0x8e,0x99,0xb4,0x89,0x93,0xb0,0x72,0x7d,0xa0,0x53,0x5e, 0x88,0x7c,0x87,0xa6,0x1a,0x1b,0x1c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x04,0x05, 0x6f,0x5a,0x71,0x73,0x5e,0x76,0x88,0x7b,0x91,0x5f,0x6b,0x92,0x62,0x6e,0x94,0x86, 0x91,0xaf,0x7c,0x86,0xa7,0x74,0x80,0xa2,0x69,0x75,0x9a,0xde,0xe0,0xe8,0x5d,0x4f, 0x59,0x4a,0x39,0x46,0x4e,0x3d,0x4b,0x51,0x3f,0x4e,0x57,0x45,0x55,0x5c,0x49,0x5b, 0x83,0x73,0x83,0xdb,0xd8,0xde,0xbe,0xc3,0xd3,0x9f,0xa7,0xbf,0x81,0x8b,0xaa,0x6f, 0x7b,0x9f,0x62,0x6d,0x94,0x5b,0x67,0x8e,0x57,0x63,0x8c,0x54,0x60,0x8a,0x52,0x5d, 0x86,0x52,0x4f,0x7b,0x57,0x50,0x79,0x4a,0x4c,0x72,0x31,0x38,0x52,0x17,0x1a,0x26, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x03,0x02,0x03,0x9f,0xa6,0xbe,0x7b,0x85,0xa7,0x57,0x63,0x8c,0x6a,0x75, 0x9a,0x66,0x72,0x98,0x60,0x6c,0x93,0x5f,0x6b,0x92,0x5c,0x69,0x90,0x5c,0x69,0x90, 0x5a,0x65,0x8d,0x58,0x64,0x8d,0x56,0x62,0x8b,0x54,0x5f,0x89,0x53,0x5f,0x89,0x52, 0x5d,0x88,0x64,0x4f,0x6e,0x54,0x50,0x79,0x4b,0x47,0x66,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x17,0x13,0x18,0x55,0x42,0x52,0x48,0x37,0x44,0x48,0x37,0x44,0x48, 0x37,0x44,0x47,0x37,0x44,0x75,0x71,0x80,0x83,0x8d,0xac,0x52,0x50,0x7b,0x64,0x6f, 0x95,0x84,0x8e,0xad,0x8d,0x98,0xb3,0x96,0xa0,0xba,0x95,0x9f,0xb9,0x95,0x9f,0xb9, 0x98,0xa1,0xba,0x96,0xa0,0xb9,0x93,0x9c,0xb7,0x90,0x99,0xb4,0x89,0x93,0xb0,0x82, 0x8c,0xab,0x55,0x60,0x8a,0x69,0x74,0x99,0x57,0x59,0x61,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x36,0x2b,0x36,0x6d,0x59,0x6f,0x74,0x5f,0x77,0x9e,0xa3,0xba,0x52,0x5d,0x86, 0x83,0x8d,0xac,0x83,0x8d,0xac,0x7c,0x88,0xa8,0x6f,0x7c,0x9f,0x6e,0x7a,0x9d,0xc0, 0xbf,0xc4,0x46,0x38,0x46,0x6a,0x55,0x6b,0x6f,0x5a,0x71,0x70,0x5b,0x72,0x70,0x5b, 0x72,0x73,0x5e,0x75,0x72,0x5d,0x74,0x75,0x60,0x78,0xae,0xa3,0xb0,0xca,0xcd,0xda, 0xa4,0xac,0xc3,0x85,0x90,0xad,0x6b,0x76,0x9b,0x63,0x6e,0x95,0x5d,0x69,0x91,0x57, 0x64,0x8c,0x56,0x62,0x8b,0x56,0x62,0x8b,0x52,0x57,0x82,0x57,0x50,0x79,0x55,0x50, 0x79,0x52,0x54,0x80,0x4d,0x55,0x7c,0x37,0x3a,0x57,0x1b,0x1c,0x2a,0x02,0x02,0x03, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8f,0x96,0xad,0x89,0x93,0xb0,0x54, 0x5f,0x89,0x60,0x6d,0x93,0x65,0x72,0x98,0x60,0x6d,0x93,0x5d,0x6a,0x91,0x5c,0x67, 0x90,0x5b,0x67,0x90,0x5a,0x65,0x8d,0x57,0x64,0x8c,0x55,0x60,0x8a,0x55,0x60,0x8a, 0x54,0x5f,0x89,0x52,0x5d,0x88,0x60,0x53,0x77,0x5c,0x52,0x79,0x51,0x4f,0x73,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x02,0x03,0x60,0x4c,0x5f,0x49,0x38,0x45, 0x48,0x37,0x44,0x47,0x37,0x44,0x47,0x37,0x44,0x57,0x4e,0x5d,0x9d,0xa5,0xbe,0x52, 0x5d,0x88,0x5a,0x65,0x8d,0x82,0x8c,0xab,0x8d,0x98,0xb3,0x91,0x9b,0xb5,0x96,0xa0, 0xb9,0x96,0xa0,0xb9,0x98,0xa1,0xba,0x99,0xa2,0xbb,0x94,0x9d,0xb8,0x8e,0x99,0xb4, 0x8c,0x96,0xb3,0x88,0x92,0xb0,0x5f,0x6b,0x92,0x56,0x63,0x8b,0x83,0x89,0x9d,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x03,0x03,0x03,0x60,0x4c,0x5f,0x6a,0x55,0x6b,0x87,0x79,0x8e,0x5b,0x67, 0x90,0x63,0x6e,0x95,0x88,0x92,0xb0,0x82,0x8c,0xab,0x7c,0x86,0xa8,0x69,0x75,0x9a, 0x7e,0x89,0xa9,0x69,0x69,0x69,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x18,0x1e,0x55, 0x4a,0x5f,0x6d,0x62,0x80,0x69,0x67,0x8a,0x68,0x66,0x8b,0x73,0x69,0x8a,0x78,0x68, 0x85,0x87,0x74,0x8a,0xbc,0xb8,0xc4,0xb2,0xb9,0xcb,0x8c,0x95,0xb2,0x6c,0x77,0x9b, 0x60,0x6c,0x93,0x5c,0x69,0x90,0x58,0x65,0x8d,0x56,0x63,0x8b,0x55,0x62,0x8b,0x53, 0x5f,0x89,0x52,0x52,0x7c,0x5a,0x52,0x79,0x52,0x50,0x7b,0x52,0x5a,0x84,0x52,0x56, 0x81,0x49,0x4b,0x71,0x23,0x24,0x35,0x03,0x03,0x04,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x74,0x8a, 0x8e,0x98,0xb3,0x55,0x60,0x8a,0x5a,0x66,0x8e,0x65,0x71,0x96,0x5f,0x6c,0x93,0x5d, 0x6a,0x91,0x5c,0x69,0x90,0x5b,0x66,0x8e,0x5a,0x66,0x8e,0x57,0x63,0x8c,0x56,0x62, 0x8b,0x55,0x60,0x8a,0x54,0x5f,0x89,0x53,0x5e,0x88,0x52,0x4f,0x7a,0x5e,0x53,0x79, 0x53,0x53,0x7c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5f,0x4d, 0x61,0x4d,0x3c,0x4a,0x47,0x37,0x44,0x48,0x37,0x44,0x46,0x36,0x42,0x47,0x38,0x46, 0xb2,0xb9,0xcc,0x57,0x63,0x8c,0x52,0x58,0x84,0x7d,0x88,0xa8,0x8d,0x98,0xb3,0x92, 0x9c,0xb7,0x94,0x9f,0xb8,0x95,0x9f,0xb9,0x99,0xa2,0xbb,0x98,0xa1,0xbb,0x94,0x9d, 0xb8,0x91,0x9b,0xb5,0x8e,0x99,0xb4,0x88,0x92,0xb0,0x73,0x7e,0xa1,0x52,0x55,0x81, 0x83,0x8d,0xac,0x24,0x24,0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x1b,0x21,0x55,0x42,0x52,0x60,0x4c,0x5f,0x9a, 0x9e,0xb5,0x52,0x55,0x81,0x7c,0x88,0xa8,0x83,0x8e,0xac,0x80,0x8a,0xaa,0x7c,0x88, 0xa8,0x65,0x72,0x96,0xa1,0xa9,0xc1,0x21,0x21,0x22,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x11,0x17,0x43,0x47,0x5f,0x67, 0x70,0x93,0x69,0x73,0x97,0x68,0x69,0x8f,0x78,0x69,0x86,0x99,0x8a,0x9a,0xbe,0xc0, 0xcc,0x96,0xa0,0xb9,0x6f,0x7b,0x9f,0x62,0x6d,0x94,0x5e,0x6a,0x91,0x58,0x65,0x8d, 0x57,0x63,0x8c,0x55,0x60,0x8a,0x54,0x5f,0x89,0x53,0x5e,0x88,0x52,0x56,0x81,0x54, 0x50,0x79,0x5d,0x52,0x79,0x52,0x4f,0x7b,0x52,0x55,0x81,0x37,0x36,0x56,0x1f,0x1f, 0x2f,0x05,0x05,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x3f,0x45,0x54,0x93,0x9c,0xb8,0x5d,0x6a,0x91,0x52,0x5b,0x85,0x65,0x71,0x96, 0x5f,0x6c,0x93,0x5c,0x69,0x90,0x5c,0x67,0x90,0x5b,0x66,0x8e,0x5b,0x66,0x8e,0x58, 0x64,0x8c,0x56,0x63,0x8b,0x55,0x60,0x8a,0x54,0x5f,0x89,0x53,0x5e,0x88,0x52,0x50, 0x7b,0x60,0x53,0x77,0x52,0x55,0x80,0x06,0x06,0x07,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x30,0x2a,0x35,0x54,0x42,0x51,0x48,0x37,0x44,0x47,0x37,0x44,0x47,0x37, 0x44,0x44,0x34,0x40,0x9d,0xa0,0xb3,0x5d,0x6a,0x91,0x52,0x52,0x7c,0x77,0x83,0xa4, 0x89,0x93,0xb0,0x91,0x9a,0xb5,0x95,0x9f,0xb9,0x95,0x9f,0xb9,0x99,0xa2,0xbb,0x94, 0x9d,0xb8,0x95,0x9f,0xb9,0x92,0x9b,0xb7,0x8e,0x99,0xb4,0x8a,0x94,0xb1,0x80,0x8a, 0xaa,0x52,0x5d,0x88,0x6d,0x7a,0x9d,0x65,0x67,0x6e,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x45,0x34,0x40,0x4e,0x3c,0x4a, 0x71,0x64,0x75,0x54,0x5f,0x89,0x5b,0x66,0x8e,0x82,0x8c,0xab,0x83,0x8e,0xac,0x7c, 0x86,0xa7,0x76,0x82,0xa3,0x65,0x72,0x96,0xb2,0xb4,0xc6,0x0b,0x0b,0x0f,0x08,0x08, 0x0b,0x04,0x04,0x05,0x02,0x02,0x02,0x00,0x00,0x00,0x06,0x05,0x07,0x0a,0x0a,0x0d, 0x04,0x04,0x06,0x00,0x00,0x00,0x2e,0x32,0x40,0x68,0x72,0x8f,0x70,0x7b,0x9c,0x68, 0x67,0x8c,0x7b,0x67,0x7e,0xa7,0x9f,0xac,0x9c,0xa6,0xbe,0x72,0x7d,0xa0,0x5f,0x6c, 0x93,0x58,0x65,0x8d,0x5a,0x65,0x8d,0x57,0x64,0x8c,0x56,0x62,0x8b,0x54,0x5f,0x89, 0x54,0x5f,0x89,0x52,0x5d,0x86,0x52,0x50,0x7b,0x60,0x53,0x77,0x62,0x53,0x77,0x55, 0x50,0x79,0x46,0x45,0x6c,0x41,0x40,0x63,0x25,0x23,0x38,0x06,0x06,0x09,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x12,0x14,0x19,0x93,0x9c,0xb8,0x6c,0x77,0x9c,0x52,0x52, 0x7d,0x62,0x6d,0x94,0x60,0x6c,0x93,0x5c,0x69,0x90,0x5b,0x67,0x90,0x5a,0x66,0x8e, 0x58,0x64,0x8d,0x57,0x63,0x8c,0x56,0x62,0x8b,0x55,0x60,0x8a,0x54,0x5f,0x89,0x53, 0x5e,0x88,0x52,0x55,0x80,0x60,0x53,0x77,0x52,0x56,0x81,0x19,0x17,0x20,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x0c,0x0b,0x0f,0x5c,0x49,0x5b,0x47,0x37,0x44,0x46, 0x36,0x42,0x46,0x36,0x42,0x45,0x35,0x41,0x80,0x80,0x91,0x6b,0x77,0x9b,0x52,0x52, 0x7d,0x6b,0x76,0x9b,0x88,0x92,0xaf,0x8d,0x98,0xb3,0x93,0x9c,0xb7,0x96,0xa0,0xb9, 0x95,0x9f,0xb9,0x98,0xa1,0xba,0x93,0x9c,0xb7,0x95,0x9f,0xb9,0x92,0x9c,0xb7,0x8b, 0x94,0xb2,0x85,0x90,0xad,0x5d,0x6a,0x91,0x58,0x64,0x8c,0x90,0x96,0xa9,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x15,0x10,0x14,0x47,0x36, 0x43,0x4e,0x3c,0x4a,0x83,0x8a,0xa5,0x52,0x4f,0x7b,0x6d,0x79,0x9c,0x83,0x8d,0xac, 0x7d,0x88,0xa8,0x7d,0x88,0xa8,0x71,0x7d,0xa0,0x74,0x80,0xa2,0x8f,0x8c,0x95,0x09, 0x09,0x0d,0x03,0x03,0x04,0x04,0x04,0x05,0x04,0x05,0x06,0x02,0x02,0x03,0x04,0x04, 0x05,0x05,0x04,0x05,0x03,0x03,0x04,0x02,0x02,0x03,0x00,0x00,0x00,0x00,0x00,0x00, 0x1c,0x1e,0x25,0x58,0x5e,0x71,0x6f,0x78,0x96,0x68,0x68,0x8d,0x8a,0x79,0x8f,0x9c, 0x9d,0xb2,0x7c,0x88,0xa8,0x5c,0x69,0x90,0x54,0x5f,0x8a,0x57,0x63,0x8c,0x57,0x63, 0x8c,0x55,0x60,0x8a,0x54,0x5f,0x89,0x53,0x5e,0x89,0x52,0x5d,0x86,0x52,0x5b,0x85, 0x52,0x4f,0x7a,0x64,0x4f,0x6e,0x63,0x4b,0x67,0x64,0x53,0x76,0x52,0x4f,0x7a,0x51, 0x4e,0x7a,0x32,0x30,0x4b,0x07,0x07,0x0a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8b,0x94,0xb0,0x74, 0x80,0xa2,0x52,0x50,0x7c,0x5c,0x67,0x90,0x5e,0x6a,0x92,0x5b,0x67,0x90,0x5b,0x66, 0x8e,0x5a,0x65,0x8d,0x58,0x64,0x8d,0x57,0x63,0x8c,0x56,0x62,0x8b,0x55,0x60,0x8a, 0x54,0x5f,0x89,0x53,0x5f,0x89,0x52,0x56,0x82,0x64,0x53,0x76,0x52,0x55,0x81,0x2a, 0x26,0x36,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x52,0x66, 0x49,0x38,0x45,0x47,0x37,0x44,0x46,0x36,0x42,0x45,0x35,0x41,0x62,0x5e,0x6e,0x88, 0x92,0xb0,0x53,0x5d,0x88,0x60,0x6c,0x93,0x83,0x8d,0xac,0x8d,0x96,0xb3,0x94,0x9d, 0xb8,0x92,0x9b,0xb7,0x95,0x9f,0xb9,0x98,0xa1,0xba,0x96,0xa0,0xb9,0x95,0x9f,0xb9, 0x91,0x9b,0xb5,0x8c,0x95,0xb2,0x86,0x91,0xaf,0x72,0x7d,0xa0,0x53,0x5f,0x89,0x88, 0x92,0xb0,0x2c,0x2c,0x2c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44, 0x34,0x40,0x4a,0x39,0x47,0x6d,0x60,0x6f,0x52,0x5c,0x86,0x57,0x63,0x8c,0x79,0x83, 0xa4,0x7d,0x88,0xa8,0x7b,0x86,0xa7,0x7d,0x88,0xa8,0x67,0x73,0x98,0x95,0x9f,0xb9, 0x3c,0x3c,0x3d,0x02,0x02,0x03,0x04,0x04,0x05,0x08,0x08,0x0b,0x08,0x09,0x0c,0x05, 0x05,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x03,0x04,0x02,0x02, 0x03,0x02,0x02,0x02,0x02,0x03,0x03,0x05,0x06,0x07,0x03,0x04,0x04,0x37,0x3a,0x43, 0x6e,0x76,0x8d,0x6c,0x77,0x9a,0x98,0x94,0xad,0x8c,0x95,0xb0,0x6c,0x77,0x9c,0x53, 0x5e,0x88,0x57,0x63,0x8c,0x57,0x63,0x8c,0x56,0x62,0x8b,0x53,0x5e,0x88,0x52,0x5d, 0x88,0x52,0x5d,0x86,0x52,0x5a,0x84,0x52,0x57,0x82,0x52,0x4f,0x7a,0x64,0x53,0x75, 0x64,0x52,0x72,0x64,0x4c,0x69,0x64,0x53,0x75,0x52,0x4f,0x7a,0x2a,0x28,0x40,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x77,0x7f,0x9d,0x7b,0x86,0xa7,0x52,0x56,0x82,0x55,0x60,0x8a,0x5e,0x6a,0x91,0x5b, 0x67,0x8e,0x5a,0x65,0x8d,0x5a,0x65,0x8d,0x57,0x64,0x8c,0x58,0x64,0x8c,0x56,0x62, 0x8b,0x55,0x60,0x8a,0x54,0x5f,0x89,0x53,0x5e,0x88,0x52,0x5d,0x86,0x64,0x52,0x71, 0x52,0x52,0x7d,0x38,0x35,0x4b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x4a,0x3c,0x4b,0x4c,0x3b,0x49,0x46,0x36,0x42,0x46,0x36,0x42,0x46,0x35,0x41, 0x4d,0x43,0x51,0xa1,0xa9,0xc0,0x55,0x60,0x8a,0x56,0x62,0x8b,0x80,0x8b,0xaa,0x8b, 0x94,0xb1,0x90,0x99,0xb4,0x93,0x9c,0xb7,0x96,0xa0,0xba,0x95,0x9f,0xb9,0x94,0x9d, 0xb8,0x95,0x9f,0xb9,0x90,0x9a,0xb5,0x8c,0x96,0xb2,0x88,0x92,0xb0,0x80,0x8a,0xaa, 0x5a,0x66,0x8e,0x6f,0x7b,0x9f,0x6e,0x70,0x76,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x1b,0x15,0x19,0x47,0x36,0x43,0x4e,0x3c,0x4a,0x86,0x8e,0xa7,0x52,0x50,0x7b,0x64, 0x71,0x96,0x7a,0x84,0xa5,0x7c,0x88,0xa8,0x7a,0x85,0xa7,0x7d,0x89,0xa9,0x5c,0x67, 0x90,0xb2,0xb6,0xc8,0x21,0x1b,0x21,0x0e,0x0c,0x0e,0x07,0x06,0x07,0x02,0x02,0x03, 0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x03,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x06,0x08,0x12,0x13, 0x17,0x0d,0x0e,0x10,0x03,0x03,0x03,0x02,0x02,0x02,0x6a,0x71,0x83,0x7c,0x87,0xa5, 0xa5,0xa6,0xbc,0x80,0x8a,0xaa,0x57,0x63,0x8c,0x52,0x5c,0x86,0x53,0x5e,0x89,0x54, 0x5f,0x89,0x54,0x5f,0x89,0x52,0x5d,0x86,0x52,0x5c,0x86,0x52,0x57,0x83,0x52,0x55, 0x80,0x52,0x54,0x7e,0x52,0x50,0x7b,0x5a,0x52,0x79,0x64,0x4f,0x6e,0x63,0x4b,0x67, 0x5f,0x53,0x77,0x33,0x31,0x4f,0x21,0x21,0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x58,0x5f,0x79,0x77,0x83,0xa4,0x57,0x63,0x8c,0x52,0x54,0x80, 0x5c,0x67,0x90,0x5a,0x65,0x8d,0x58,0x64,0x8d,0x58,0x64,0x8c,0x57,0x64,0x8c,0x56, 0x62,0x8b,0x55,0x62,0x8b,0x55,0x60,0x8a,0x54,0x5f,0x89,0x53,0x5e,0x89,0x52,0x5d, 0x88,0x64,0x50,0x71,0x52,0x52,0x7c,0x43,0x40,0x5c,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x1a,0x15,0x1b,0x53,0x41,0x50,0x47,0x37,0x43,0x45,0x35, 0x41,0x45,0x35,0x41,0x42,0x33,0x3f,0xa4,0xac,0xc0,0x5e,0x6b,0x92,0x52,0x5d,0x86, 0x80,0x8b,0xaa,0x89,0x93,0xb0,0x8e,0x98,0xb3,0x93,0x9c,0xb7,0x92,0x9b,0xb7,0x95, 0x9f,0xb9,0x98,0xa1,0xba,0x95,0x9f,0xb9,0x91,0x9b,0xb5,0x8e,0x99,0xb4,0x8a,0x94, 0xb1,0x83,0x8e,0xac,0x5e,0x6a,0x91,0x5e,0x6b,0x92,0x8f,0x96,0xa9,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x02,0x02,0x02,0x47,0x37,0x44,0x4b,0x3a,0x47,0x6c,0x60,0x6e,0x55,0x60,0x8a, 0x53,0x5f,0x89,0x6c,0x77,0x9b,0x7b,0x85,0xa7,0x7b,0x86,0xa7,0x7c,0x88,0xa8,0x74, 0x80,0xa2,0x66,0x73,0x98,0xa7,0xa6,0xaf,0x05,0x04,0x05,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x2b,0x2c,0x31,0x7d,0x85,0x9c,0x89,0x92,0xae,0x8b,0x92,0xae,0x58,0x64,0x8d, 0x52,0x4f,0x7a,0x52,0x4f,0x7b,0x52,0x5a,0x84,0x52,0x5d,0x88,0x52,0x5b,0x85,0x52, 0x5b,0x85,0x52,0x56,0x81,0x52,0x53,0x7e,0x52,0x53,0x7d,0x52,0x54,0x7e,0x52,0x55, 0x81,0x52,0x4f,0x7a,0x64,0x53,0x73,0x62,0x53,0x77,0x3d,0x42,0x64,0x29,0x2c,0x46, 0x20,0x23,0x36,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3e,0x42,0x54,0x7a,0x84,0xa5,0x5e,0x6a, 0x92,0x52,0x4f,0x7a,0x5a,0x65,0x8d,0x58,0x64,0x8d,0x57,0x63,0x8c,0x57,0x63,0x8c, 0x56,0x62,0x8b,0x56,0x62,0x8b,0x56,0x62,0x8b,0x55,0x60,0x8a,0x54,0x5f,0x89,0x53, 0x5e,0x88,0x53,0x5e,0x88,0x64,0x53,0x74,0x52,0x50,0x7b,0x4b,0x4a,0x6a,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x04,0x05,0x5d,0x49,0x5b,0x45, 0x35,0x41,0x46,0x36,0x42,0x44,0x34,0x40,0x3f,0x30,0x3a,0x8d,0x90,0xa3,0x6a,0x75, 0x9a,0x52,0x57,0x82,0x6f,0x7c,0x9f,0x88,0x92,0xb0,0x8e,0x99,0xb4,0x91,0x9b,0xb5, 0x95,0x9f,0xb9,0x99,0xa2,0xbb,0x96,0xa0,0xb9,0x94,0x9d,0xb8,0x93,0x9d,0xb8,0x91, 0x9b,0xb5,0x8c,0x95,0xb2,0x85,0x90,0xad,0x6e,0x7a,0x9d,0x55,0x60,0x8a,0x90,0x99, 0xb4,0x2d,0x2d,0x2d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x15,0x10,0x13,0x49,0x39,0x46,0x50,0x3e,0x4d,0x97,0x9b, 0xb1,0x52,0x4f,0x7b,0x60,0x6d,0x94,0x6e,0x7a,0x9d,0x7a,0x84,0xa5,0x7c,0x86,0xa7, 0x80,0x8a,0xaa,0x67,0x74,0x99,0x81,0x8b,0xaa,0x64,0x64,0x66,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x15,0x16,0x19,0x59,0x5f, 0x71,0x8a,0x93,0xaf,0x6d,0x79,0x9c,0x52,0x52,0x7d,0x5d,0x52,0x79,0x52,0x50,0x7b, 0x52,0x5c,0x86,0x52,0x58,0x83,0x52,0x55,0x81,0x52,0x56,0x81,0x52,0x54,0x7e,0x52, 0x57,0x82,0x52,0x5c,0x86,0x53,0x5e,0x88,0x54,0x5f,0x89,0x52,0x5b,0x85,0x52,0x4f, 0x7a,0x45,0x4e,0x74,0x33,0x37,0x52,0x29,0x2c,0x44,0x11,0x10,0x19,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x13,0x15,0x1a,0x7a, 0x85,0xa5,0x6b,0x76,0x9b,0x52,0x4f,0x7a,0x56,0x62,0x8b,0x57,0x64,0x8c,0x57,0x63, 0x8c,0x56,0x62,0x8b,0x55,0x62,0x8b,0x55,0x62,0x8b,0x56,0x62,0x8b,0x54,0x5f,0x89, 0x54,0x5f,0x89,0x53,0x5e,0x88,0x53,0x5e,0x88,0x64,0x53,0x75,0x52,0x4f,0x7a,0x50, 0x52,0x75,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x49,0x3b,0x49,0x49,0x38,0x45,0x44,0x34,0x40,0x46,0x35,0x41,0x40,0x30,0x3b,0x6b, 0x6a,0x7c,0x77,0x83,0xa4,0x52,0x56,0x81,0x62,0x6d,0x94,0x8a,0x93,0xb1,0x8a,0x94, 0xb1,0x91,0x9a,0xb5,0x94,0x9d,0xb8,0x94,0x9d,0xb8,0x96,0xa0,0xb9,0x98,0xa1,0xba, 0x94,0x9d,0xb8,0x8d,0x98,0xb3,0x8d,0x98,0xb3,0x86,0x91,0xaf,0x7c,0x86,0xa8,0x57, 0x64,0x8c,0x7b,0x86,0xa7,0x75,0x77,0x7a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x32,0x3e,0x4f,0x3d,0x4b,0x70, 0x61,0x70,0x55,0x60,0x8a,0x53,0x5e,0x88,0x66,0x72,0x98,0x6c,0x77,0x9c,0x76,0x82, 0xa3,0x7b,0x86,0xa7,0x7d,0x89,0xa9,0x58,0x64,0x8d,0x96,0xa0,0xba,0x1e,0x1e,0x1e, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x03,0x04,0x04,0x44,0x47,0x53,0x82,0x89,0xa8,0x58,0x64, 0x8d,0x54,0x50,0x79,0x57,0x50,0x79,0x52,0x50,0x7b,0x52,0x54,0x80,0x52,0x57,0x83, 0x52,0x5b,0x85,0x52,0x5d,0x88,0x55,0x60,0x8a,0x57,0x64,0x8c,0x5d,0x69,0x91,0x65, 0x71,0x96,0x67,0x74,0x99,0x55,0x60,0x8a,0x55,0x61,0x88,0x38,0x3d,0x59,0x28,0x23, 0x3b,0x0d,0x0a,0x0e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x76,0x82,0xa2,0x6d,0x7a,0x9d,0x52,0x5a,0x84,0x52,0x5c,0x85,0x57, 0x63,0x8c,0x56,0x62,0x8b,0x55,0x60,0x8a,0x55,0x60,0x8a,0x54,0x60,0x8a,0x55,0x60, 0x8a,0x54,0x5f,0x89,0x54,0x5f,0x89,0x53,0x5f,0x89,0x53,0x5e,0x88,0x62,0x53,0x77, 0x52,0x4f,0x7a,0x52,0x57,0x7d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x1f,0x19,0x20,0x4e,0x3d,0x4b,0x44,0x34,0x40,0x46,0x36,0x42, 0x42,0x33,0x3e,0x53,0x4e,0x5e,0x89,0x93,0xb0,0x52,0x5a,0x84,0x5d,0x69,0x91,0x84, 0x8e,0xad,0x8b,0x94,0xb1,0x8e,0x99,0xb4,0x92,0x9c,0xb7,0x95,0x9f,0xb9,0x98,0xa1, 0xba,0x95,0x9f,0xb9,0x95,0x9f,0xb9,0x91,0x9b,0xb5,0x8e,0x99,0xb4,0x8a,0x93,0xb1, 0x84,0x8e,0xad,0x5b,0x67,0x90,0x66,0x72,0x98,0x96,0x9c,0xac,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x05,0x06,0x4c,0x3b,0x48, 0x54,0x42,0x52,0x9f,0xa2,0xb7,0x52,0x54,0x7e,0x5c,0x67,0x90,0x64,0x71,0x96,0x6b, 0x77,0x9b,0x77,0x83,0xa4,0x7a,0x85,0xa5,0x75,0x81,0xa2,0x5e,0x6a,0x91,0x9d,0xa1, 0xaf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, 0x03,0x04,0x5d,0x5d,0x6d,0x6a,0x72,0x97,0x52,0x52,0x7d,0x5a,0x52,0x79,0x53,0x4f, 0x7a,0x52,0x54,0x80,0x52,0x5d,0x86,0x54,0x5f,0x89,0x58,0x64,0x8d,0x5e,0x6b,0x92, 0x69,0x74,0x99,0x74,0x80,0xa2,0x7e,0x89,0xa9,0x7e,0x89,0xa9,0x67,0x73,0x99,0x52, 0x55,0x81,0x40,0x2f,0x44,0x2e,0x20,0x32,0x16,0x12,0x1a,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x74,0x7d,0x9b,0x6f,0x7b,0x9f,0x54,0x5f,0x89, 0x52,0x50,0x7b,0x55,0x62,0x8b,0x55,0x60,0x8a,0x54,0x5f,0x89,0x54,0x5f,0x89,0x54, 0x5f,0x89,0x54,0x5f,0x89,0x54,0x5f,0x89,0x54,0x5f,0x89,0x53,0x5f,0x89,0x52,0x5d, 0x88,0x5e,0x52,0x79,0x58,0x50,0x79,0x53,0x5c,0x86,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x05,0x06,0x54,0x42,0x51,0x44,0x34, 0x40,0x46,0x35,0x41,0x43,0x33,0x3e,0x42,0x38,0x44,0x96,0xa0,0xba,0x55,0x62,0x8a, 0x56,0x62,0x8b,0x7e,0x89,0xa9,0x88,0x92,0xb0,0x8d,0x98,0xb3,0x91,0x9b,0xb5,0x94, 0x9d,0xb8,0x94,0x9d,0xb8,0x99,0xa2,0xbb,0x95,0x9f,0xb9,0x94,0x9d,0xb8,0x91,0x9a, 0xb5,0x89,0x93,0xb0,0x85,0x90,0xad,0x69,0x75,0x9a,0x57,0x63,0x8b,0x92,0x9c,0xb7, 0x2d,0x2d,0x2d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2c,0x22, 0x29,0x51,0x3f,0x4e,0x74,0x66,0x76,0x5e,0x6a,0x91,0x53,0x5e,0x88,0x62,0x6d,0x94, 0x62,0x6e,0x94,0x6c,0x79,0x9c,0x74,0x80,0xa1,0x7c,0x88,0xa8,0x6a,0x76,0x9a,0x6d, 0x79,0x9c,0x6f,0x71,0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x15,0x14,0x16,0x7b,0x7a,0x93,0x55, 0x60,0x8a,0x55,0x50,0x79,0x5b,0x52,0x79,0x52,0x50,0x7b,0x57,0x63,0x8c,0x5e,0x6a, 0x91,0x65,0x72,0x98,0x71,0x7c,0xa0,0x80,0x8b,0xaa,0x89,0x93,0xb0,0x83,0x8d,0xac, 0x6c,0x79,0x9c,0x52,0x5c,0x86,0x57,0x3f,0x5a,0x34,0x23,0x35,0x2c,0x1e,0x30,0x2c, 0x23,0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x69,0x6e,0x86,0x7b,0x86, 0xa7,0x58,0x65,0x8d,0x57,0x50,0x79,0x55,0x60,0x8a,0x54,0x5f,0x89,0x53,0x5e,0x88, 0x54,0x5f,0x89,0x53,0x5f,0x89,0x54,0x5f,0x89,0x54,0x5f,0x89,0x53,0x5f,0x89,0x53, 0x5e,0x89,0x53,0x5e,0x89,0x58,0x50,0x79,0x5d,0x52,0x79,0x52,0x5d,0x88,0x0a,0x0a, 0x0e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x51, 0x41,0x50,0x47,0x37,0x43,0x45,0x35,0x41,0x44,0x34,0x40,0x3a,0x2c,0x35,0x96,0x9d, 0xb5,0x60,0x6d,0x94,0x52,0x5d,0x86,0x74,0x80,0xa1,0x86,0x91,0xaf,0x8b,0x95,0xb2, 0x91,0x9a,0xb5,0x93,0x9c,0xb7,0x95,0x9f,0xb9,0x94,0x9d,0xb8,0x95,0x9f,0xb9,0x92, 0x9b,0xb7,0x90,0x9a,0xb5,0x8c,0x95,0xb2,0x88,0x92,0xb0,0x7a,0x85,0xa7,0x54,0x5f, 0x89,0x7a,0x85,0xa5,0x7a,0x7b,0x7d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06, 0x05,0x06,0x4c,0x3b,0x49,0x55,0x43,0x52,0x99,0x9d,0xb3,0x52,0x55,0x81,0x5c,0x69, 0x90,0x5e,0x6a,0x92,0x60,0x6d,0x93,0x6b,0x76,0x9b,0x72,0x7d,0xa0,0x79,0x84,0xa5, 0x5c,0x67,0x90,0x7c,0x88,0xa8,0x34,0x35,0x37,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x6a,0x61,0x71,0x6e,0x75,0x97,0x53,0x5e,0x89,0x52,0x4f,0x7a,0x52, 0x50,0x7c,0x5a,0x65,0x8e,0x6b,0x77,0x9b,0x80,0x8a,0xaa,0x89,0x93,0xb0,0x8a,0x94, 0xb1,0x7b,0x86,0xa7,0x60,0x6c,0x93,0x53,0x4f,0x7a,0x64,0x52,0x72,0x53,0x3b,0x53, 0x28,0x1b,0x28,0x2c,0x1f,0x30,0x26,0x23,0x3b,0x09,0x0a,0x10,0x00,0x00,0x00,0x43, 0x45,0x56,0x81,0x8c,0xab,0x63,0x6f,0x95,0x55,0x50,0x79,0x52,0x5d,0x88,0x54,0x5f, 0x89,0x53,0x5e,0x88,0x53,0x5e,0x88,0x53,0x5f,0x89,0x53,0x5e,0x88,0x53,0x5f,0x89, 0x53,0x5f,0x89,0x53,0x5e,0x89,0x53,0x5e,0x88,0x52,0x4f,0x7a,0x62,0x53,0x77,0x52, 0x5d,0x88,0x1b,0x1a,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x2c,0x23,0x2c,0x49,0x38,0x45,0x44,0x34,0x40,0x44,0x34,0x40,0x3e, 0x2f,0x39,0x6e,0x72,0x8b,0x60,0x6c,0x93,0x52,0x52,0x7c,0x6c,0x77,0x9b,0x88,0x92, 0xb0,0x8a,0x94,0xb1,0x8e,0x99,0xb4,0x93,0x9c,0xb7,0x92,0x9b,0xb7,0x93,0x9c,0xb7, 0x94,0x9d,0xb8,0x94,0x9d,0xb8,0x91,0x9a,0xb5,0x8d,0x98,0xb3,0x86,0x91,0xaf,0x83, 0x8d,0xac,0x58,0x65,0x8d,0x67,0x73,0x99,0xa8,0xac,0xb8,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x1f,0x18,0x1d,0x4e,0x3c,0x4a,0x77,0x6a,0x78,0x56,0x63,0x8a,0x52, 0x5d,0x88,0x5f,0x6b,0x92,0x5b,0x67,0x90,0x5f,0x6b,0x92,0x69,0x74,0x99,0x73,0x7e, 0xa1,0x6e,0x7a,0x9d,0x55,0x60,0x8a,0x86,0x90,0xac,0x03,0x03,0x03,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0x0a,0x0b,0x6c,0x6b,0x78, 0x7d,0x88,0xa6,0x6a,0x75,0x9a,0x5d,0x69,0x91,0x66,0x72,0x98,0x7d,0x88,0xa8,0x8c, 0x96,0xb3,0x84,0x90,0xad,0x6f,0x7b,0x9f,0x57,0x63,0x8c,0x63,0x53,0x77,0x64,0x53, 0x73,0x62,0x4a,0x65,0x57,0x3f,0x5a,0x25,0x18,0x27,0x2d,0x20,0x31,0x26,0x24,0x3d, 0x19,0x1c,0x2a,0x17,0x15,0x1c,0x89,0x93,0xae,0x6d,0x79,0x9c,0x52,0x52,0x7c,0x52, 0x55,0x80,0x53,0x5e,0x89,0x53,0x5e,0x88,0x53,0x5e,0x88,0x53,0x5e,0x88,0x53,0x5e, 0x88,0x53,0x5e,0x89,0x53,0x5e,0x88,0x53,0x5e,0x88,0x53,0x5e,0x88,0x52,0x50,0x7b, 0x64,0x53,0x74,0x52,0x5d,0x88,0x2a,0x28,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x0d,0x11,0x4c,0x3b,0x49,0x45,0x35,0x41, 0x44,0x34,0x40,0x40,0x31,0x3b,0x55,0x55,0x6c,0x62,0x6e,0x94,0x58,0x50,0x79,0x62, 0x6e,0x94,0x86,0x91,0xaf,0x89,0x93,0xb0,0x8d,0x98,0xb3,0x91,0x9a,0xb5,0x93,0x9c, 0xb7,0x94,0x9d,0xb8,0x94,0x9d,0xb8,0x96,0xa0,0xb9,0x92,0x9c,0xb7,0x8e,0x99,0xb4, 0x89,0x93,0xb0,0x84,0x8e,0xac,0x67,0x73,0x99,0x5a,0x66,0x8e,0x9d,0xa5,0xbf,0x2d, 0x2d,0x2d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x46,0x36,0x42,0x51,0x40,0x4e,0x9c,0x9b,0xac, 0x52,0x5c,0x86,0x5f,0x6b,0x92,0x5d,0x69,0x91,0x5a,0x65,0x8d,0x5d,0x69,0x91,0x67, 0x74,0x99,0x6c,0x77,0x9b,0x5e,0x6a,0x92,0x54,0x5f,0x89,0x6d,0x73,0x84,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x21,0x21,0x21,0x94,0x96,0x9e,0x98,0xa1,0xbb,0x7d,0x88,0xa8, 0x6e,0x7a,0x9d,0x7e,0x89,0xa9,0x7d,0x89,0xa8,0x62,0x6e,0x94,0x52,0x53,0x7e,0x64, 0x53,0x76,0x64,0x53,0x73,0x63,0x4b,0x67,0x60,0x48,0x65,0x3d,0x2c,0x41,0x28,0x1c, 0x2c,0x2d,0x21,0x31,0x29,0x22,0x3b,0x14,0x17,0x20,0x65,0x6a,0x82,0x76,0x82,0xa3, 0x52,0x5d,0x86,0x52,0x50,0x7b,0x53,0x5e,0x89,0x52,0x5d,0x86,0x52,0x5d,0x88,0x53, 0x5e,0x88,0x53,0x5e,0x88,0x53,0x5e,0x88,0x53,0x5e,0x88,0x53,0x5e,0x88,0x53,0x5e, 0x88,0x52,0x55,0x80,0x64,0x53,0x74,0x53,0x5e,0x88,0x36,0x35,0x4a,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x54,0x42, 0x51,0x44,0x34,0x40,0x43,0x33,0x3f,0x42,0x32,0x3e,0x4c,0x47,0x59,0x6d,0x7a,0x9d, 0x58,0x52,0x79,0x5a,0x65,0x8d,0x84,0x8e,0xad,0x89,0x93,0xb1,0x8c,0x96,0xb2,0x91, 0x9a,0xb5,0x92,0x9b,0xb7,0x96,0xa0,0xba,0x94,0x9d,0xb8,0x92,0x9c,0xb7,0x94,0x9d, 0xb8,0x90,0x99,0xb4,0x8a,0x94,0xb1,0x86,0x91,0xaf,0x74,0x80,0xa2,0x58,0x65,0x8d, 0x7c,0x88,0xa8,0x7f,0x7f,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x05,0x06,0x48,0x37,0x44,0x61,0x53, 0x60,0x5d,0x68,0x90,0x54,0x5f,0x89,0x63,0x6e,0x95,0x58,0x65,0x8d,0x56,0x62,0x8b, 0x5a,0x65,0x8d,0x64,0x6f,0x95,0x66,0x72,0x98,0x52,0x5c,0x86,0x58,0x64,0x8d,0x43, 0x47,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x54, 0x54,0xc1,0xc4,0xcd,0xa4,0xac,0xc3,0x75,0x81,0xa2,0x5b,0x67,0x8e,0x53,0x5e,0x89, 0x57,0x50,0x79,0x62,0x53,0x77,0x64,0x53,0x73,0x63,0x4b,0x67,0x60,0x48,0x65,0x5f, 0x47,0x64,0x2d,0x20,0x31,0x2d,0x20,0x31,0x2d,0x21,0x31,0x27,0x23,0x3a,0x45,0x47, 0x5d,0x7e,0x89,0xa9,0x57,0x63,0x8c,0x52,0x4f,0x7a,0x52,0x5d,0x88,0x52,0x5d,0x86, 0x52,0x5d,0x86,0x52,0x5d,0x88,0x53,0x5e,0x88,0x52,0x5d,0x88,0x53,0x5e,0x88,0x53, 0x5e,0x88,0x53,0x5e,0x88,0x52,0x5a,0x84,0x63,0x53,0x77,0x52,0x5d,0x88,0x44,0x45, 0x5e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x39,0x2e,0x38,0x44,0x34,0x40,0x44,0x34,0x40,0x44,0x34,0x40,0x43,0x39, 0x46,0x71,0x7c,0xa0,0x56,0x50,0x79,0x52,0x53,0x7e,0x80,0x8a,0xaa,0x88,0x92,0xb0, 0x8a,0x94,0xb1,0x90,0x9a,0xb5,0x91,0x9b,0xb5,0x95,0x9f,0xb9,0x93,0x9c,0xb7,0x94, 0x9d,0xb8,0x94,0x9d,0xb8,0x95,0x9f,0xb9,0x8c,0x96,0xb3,0x88,0x92,0xaf,0x7e,0x89, 0xa9,0x5c,0x69,0x90,0x64,0x71,0x96,0xa3,0xa8,0xb4,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x35,0x28,0x31,0x49, 0x38,0x45,0x90,0x8c,0x9c,0x52,0x50,0x7c,0x5f,0x6c,0x93,0x5f,0x6c,0x93,0x55,0x60, 0x8a,0x52,0x5d,0x88,0x58,0x65,0x8d,0x5d,0x6a,0x91,0x5b,0x66,0x8e,0x52,0x4f,0x7a, 0x6c,0x77,0x9c,0x14,0x15,0x17,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x08,0x8f,0x8f,0x8f,0xb2,0xb9,0xcc,0x69,0x74, 0x99,0x52,0x4f,0x7a,0x64,0x52,0x72,0x64,0x53,0x74,0x64,0x53,0x74,0x64,0x4e,0x6c, 0x62,0x4a,0x65,0x60,0x48,0x65,0x36,0x28,0x3c,0x2d,0x24,0x39,0x2e,0x24,0x38,0x2d, 0x21,0x31,0x29,0x2c,0x46,0x83,0x8d,0xac,0x5e,0x6b,0x92,0x52,0x4f,0x7a,0x52,0x5c, 0x86,0x52,0x5d,0x88,0x52,0x5a,0x84,0x52,0x5b,0x85,0x52,0x5d,0x88,0x52,0x5d,0x88, 0x53,0x5e,0x88,0x53,0x5e,0x88,0x53,0x5e,0x88,0x52,0x5d,0x88,0x64,0x53,0x76,0x52, 0x5d,0x86,0x4d,0x50,0x6d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0x19,0x1f,0x48,0x37,0x44,0x44,0x34,0x40,0x44, 0x34,0x40,0x3e,0x2f,0x39,0x6e,0x78,0x99,0x52,0x5d,0x86,0x5f,0x53,0x77,0x74,0x80, 0xa2,0x84,0x90,0xad,0x8a,0x93,0xb1,0x8c,0x96,0xb2,0x91,0x9b,0xb5,0x95,0x9f,0xb9, 0x95,0x9f,0xb9,0x96,0xa0,0xb9,0x93,0x9c,0xb7,0x91,0x9a,0xb5,0x8d,0x98,0xb3,0x89, 0x93,0xb0,0x81,0x8b,0xaa,0x69,0x74,0x99,0x5d,0x69,0x91,0x8b,0x95,0xb2,0x2d,0x2d, 0x2d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x44,0x34,0x40,0x57,0x47,0x55,0x6c,0x77,0x99,0x52,0x5d,0x86,0x63,0x6f,0x95,0x58, 0x64,0x8c,0x52,0x5c,0x86,0x52,0x5a,0x84,0x58,0x65,0x8d,0x5f,0x6b,0x92,0x52,0x5a, 0x84,0x52,0x50,0x7c,0x62,0x6b,0x87,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20, 0x20,0x20,0x9d,0xa2,0xad,0x60,0x6d,0x93,0x5c,0x52,0x79,0x64,0x4f,0x6e,0x64,0x4c, 0x6a,0x63,0x4b,0x67,0x62,0x4a,0x65,0x60,0x48,0x64,0x4d,0x39,0x51,0x2e,0x24,0x39, 0x28,0x22,0x3b,0x28,0x22,0x3b,0x26,0x24,0x3d,0x74,0x80,0xa2,0x65,0x71,0x96,0x52, 0x50,0x7c,0x52,0x57,0x82,0x52,0x5d,0x86,0x52,0x5a,0x84,0x52,0x5b,0x85,0x52,0x5d, 0x86,0x52,0x5d,0x88,0x53,0x5e,0x88,0x53,0x5e,0x88,0x53,0x5f,0x89,0x53,0x5e,0x88, 0x63,0x53,0x77,0x52,0x5b,0x85,0x55,0x59,0x7b,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0a,0x08,0x0b,0x52,0x40,0x50, 0x46,0x36,0x42,0x44,0x34,0x40,0x41,0x32,0x3d,0x62,0x66,0x82,0x5c,0x69,0x90,0x64, 0x52,0x72,0x73,0x7e,0xa1,0x82,0x8c,0xab,0x89,0x93,0xb0,0x8c,0x96,0xb2,0x91,0x9b, 0xb5,0x95,0x9f,0xb9,0x94,0x9d,0xb8,0x95,0x9f,0xb9,0x95,0x9f,0xb9,0x93,0x9c,0xb8, 0x91,0x9a,0xb5,0x8b,0x95,0xb2,0x88,0x92,0xaf,0x71,0x7c,0xa0,0x58,0x65,0x8d,0x73, 0x7e,0xa1,0x70,0x71,0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x1d,0x15,0x1a,0x46,0x35,0x41,0x8a,0x83,0x91,0x53,0x5e,0x89,0x5a,0x65,0x8d, 0x65,0x71,0x96,0x53,0x5e,0x88,0x52,0x52,0x7d,0x52,0x52,0x7d,0x54,0x5f,0x89,0x58, 0x64,0x8d,0x55,0x50,0x79,0x52,0x56,0x81,0x42,0x48,0x59,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x46,0x47,0x49,0x83,0x8b,0xa8,0x52, 0x55,0x80,0x64,0x4f,0x6e,0x60,0x4a,0x65,0x5d,0x45,0x5f,0x5e,0x46,0x62,0x62,0x4a, 0x65,0x30,0x24,0x38,0x2a,0x24,0x3b,0x26,0x22,0x3b,0x26,0x28,0x41,0x6f,0x78,0x96, 0x6b,0x76,0x9b,0x52,0x5c,0x85,0x52,0x52,0x7d,0x52,0x5d,0x86,0x52,0x57,0x83,0x52, 0x57,0x83,0x52,0x5c,0x86,0x52,0x5d,0x86,0x52,0x5d,0x88,0x53,0x5e,0x88,0x53,0x5e, 0x89,0x53,0x5e,0x89,0x63,0x54,0x79,0x53,0x54,0x81,0x5b,0x61,0x86,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x4d,0x3d,0x4b,0x47,0x37,0x44,0x44,0x34,0x40,0x43,0x33,0x3e,0x56,0x55,0x6d, 0x6a,0x76,0x9a,0x62,0x4a,0x66,0x65,0x72,0x96,0x83,0x8d,0xac,0x84,0x90,0xad,0x8b, 0x94,0xb1,0x8e,0x98,0xb4,0x93,0x9c,0xb7,0x91,0x9a,0xb5,0x92,0x9b,0xb7,0x92,0x9b, 0xb7,0x92,0x9b,0xb7,0x8e,0x99,0xb4,0x8b,0x94,0xb1,0x89,0x93,0xb0,0x7b,0x86,0xa7, 0x5b,0x66,0x8e,0x66,0x73,0x98,0x92,0x98,0xa9,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x42,0x32,0x3e,0x48,0x39,0x45,0x82,0x88,0xa3,0x52,0x53, 0x7e,0x63,0x6e,0x94,0x5d,0x69,0x91,0x52,0x55,0x80,0x54,0x50,0x79,0x52,0x50,0x7b, 0x54,0x60,0x8a,0x54,0x5f,0x89,0x63,0x53,0x77,0x55,0x60,0x8a,0x23,0x26,0x2c,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x07,0x07,0x07,0x6b,0x6e,0x75,0x5e,0x6b,0x92,0x64,0x53,0x74,0x5f,0x47,0x63,0x58, 0x40,0x5a,0x5b,0x43,0x5d,0x37,0x28,0x3b,0x2c,0x24,0x39,0x26,0x22,0x3b,0x26,0x24, 0x3c,0x49,0x4e,0x69,0x6d,0x79,0x9d,0x55,0x62,0x8b,0x52,0x4f,0x7a,0x52,0x5b,0x85, 0x52,0x57,0x83,0x52,0x55,0x81,0x52,0x5c,0x86,0x52,0x5c,0x86,0x52,0x5d,0x88,0x53, 0x5e,0x88,0x54,0x5f,0x89,0x54,0x5f,0x89,0x60,0x55,0x7b,0x55,0x54,0x80,0x5e,0x67, 0x8e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x2c,0x23,0x2c,0x4b,0x3a,0x47,0x44,0x34,0x40,0x43,0x33, 0x3e,0x4c,0x46,0x58,0x6f,0x7b,0x9f,0x64,0x50,0x6f,0x57,0x64,0x8c,0x80,0x8b,0xaa, 0x85,0x90,0xaf,0x89,0x93,0xb0,0x8e,0x99,0xb4,0x90,0x99,0xb4,0x94,0x9d,0xb8,0x96, 0xa0,0xb9,0x91,0x9b,0xb5,0x92,0x9c,0xb7,0x90,0x99,0xb4,0x8e,0x99,0xb4,0x89,0x93, 0xb0,0x7e,0x89,0xa9,0x63,0x6e,0x94,0x58,0x64,0x8d,0x8e,0x99,0xb4,0x2a,0x2a,0x2b, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x06,0x07,0x45,0x34,0x40,0x6c,0x61,0x6f,0x5b, 0x67,0x8e,0x52,0x54,0x7e,0x62,0x6d,0x94,0x55,0x62,0x8b,0x52,0x4f,0x7a,0x5a,0x52, 0x79,0x52,0x50,0x7b,0x52,0x5d,0x86,0x52,0x50,0x7c,0x64,0x52,0x73,0x59,0x65,0x8b, 0x05,0x06,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x19,0x19,0x61,0x69,0x81, 0x52,0x4f,0x7a,0x60,0x48,0x65,0x58,0x41,0x5b,0x45,0x32,0x47,0x2e,0x22,0x35,0x28, 0x22,0x3b,0x26,0x22,0x3b,0x32,0x36,0x50,0x6e,0x7b,0x9d,0x58,0x65,0x8d,0x52,0x4f, 0x7a,0x52,0x5a,0x84,0x52,0x57,0x82,0x52,0x54,0x7e,0x52,0x5c,0x86,0x52,0x5c,0x86, 0x52,0x5d,0x86,0x52,0x5d,0x89,0x54,0x5f,0x8a,0x55,0x62,0x8c,0x58,0x54,0x7e,0x57, 0x55,0x82,0x60,0x6d,0x98,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x71, 0x72,0x78,0x63,0x64,0x67,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x0e,0x11,0x4f,0x3d,0x4c,0x44, 0x34,0x40,0x43,0x33,0x3e,0x40,0x35,0x41,0x71,0x7c,0xa0,0x54,0x50,0x79,0x52,0x4f, 0x7a,0x7c,0x88,0xa8,0x85,0x90,0xad,0x88,0x92,0xb0,0x8b,0x95,0xb2,0x90,0x9a,0xb5, 0x94,0x9d,0xb8,0x94,0x9d,0xb8,0x94,0x9d,0xb8,0x96,0xa0,0xb9,0x92,0x9b,0xb7,0x8c, 0x95,0xb2,0x8b,0x95,0xb2,0x85,0x90,0xad,0x6d,0x7a,0x9d,0x53,0x5e,0x88,0x7d,0x88, 0xa8,0x70,0x72,0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3a,0x2c,0x36,0x49,0x38,0x45, 0x8d,0x8c,0x9f,0x52,0x4f,0x7b,0x58,0x64,0x8c,0x5e,0x6b,0x92,0x52,0x53,0x7e,0x5d, 0x52,0x79,0x5c,0x52,0x79,0x52,0x50,0x7b,0x52,0x58,0x83,0x5e,0x53,0x79,0x63,0x53, 0x77,0x42,0x4b,0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x08,0x08,0x08,0x6f,0x73,0x7c,0x5a,0x66,0x8e,0x64,0x53,0x75,0x62,0x4a,0x66, 0x2e,0x20,0x32,0x2e,0x24,0x37,0x2c,0x24,0x3b,0x29,0x2d,0x45,0x6f,0x7b,0x9f,0x5b, 0x66,0x8e,0x55,0x50,0x79,0x52,0x53,0x7e,0x52,0x56,0x81,0x52,0x53,0x7d,0x52,0x56, 0x81,0x52,0x5b,0x85,0x53,0x5e,0x88,0x54,0x5f,0x8b,0x55,0x60,0x8c,0x57,0x64,0x91, 0x57,0x56,0x83,0x5b,0x57,0x85,0x62,0x6e,0x9b,0x0d,0x0d,0x11,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x1d,0x1d,0x26,0xce,0xd0,0xda,0xcf,0xd2,0xdd,0x9e,0x9f,0xa3,0x06,0x06,0x06,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03, 0x56,0x43,0x53,0x46,0x35,0x42,0x43,0x33,0x3e,0x39,0x2a,0x34,0x6a,0x74,0x95,0x54, 0x5f,0x8a,0x64,0x53,0x75,0x7e,0x89,0xa9,0x81,0x8c,0xab,0x86,0x91,0xaf,0x8a,0x94, 0xb1,0x91,0x9a,0xb5,0x93,0x9c,0xb7,0x93,0x9c,0xb7,0x95,0x9f,0xb9,0x92,0x9c,0xb7, 0x95,0x9f,0xb9,0x8e,0x99,0xb4,0x8b,0x95,0xb2,0x85,0x90,0xad,0x79,0x84,0xa5,0x56, 0x62,0x8b,0x67,0x74,0x99,0x9c,0xa1,0xaf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x46,0x36, 0x42,0x50,0x40,0x4f,0x7f,0x88,0xa8,0x57,0x50,0x79,0x5f,0x6c,0x93,0x58,0x64,0x8c, 0x54,0x50,0x79,0x64,0x53,0x76,0x60,0x53,0x77,0x52,0x4f,0x7a,0x52,0x56,0x81,0x64, 0x4e,0x6d,0x53,0x50,0x7a,0x27,0x2c,0x3c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x43,0x44,0x45,0x70,0x7a, 0x96,0x52,0x50,0x7c,0x33,0x28,0x3d,0x2d,0x21,0x33,0x2e,0x21,0x33,0x26,0x22,0x3b, 0x6c,0x77,0x9b,0x57,0x63,0x8c,0x54,0x50,0x79,0x54,0x50,0x79,0x52,0x55,0x80,0x52, 0x52,0x7c,0x52,0x53,0x7e,0x53,0x5b,0x86,0x54,0x5e,0x8a,0x55,0x60,0x8d,0x57,0x64, 0x91,0x5a,0x66,0x92,0x5b,0x5b,0x8a,0x5d,0x58,0x88,0x62,0x6f,0x9b,0x1c,0x1b,0x25, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x77,0x70,0x83,0xd5,0xd8,0xe1,0xb7,0xbc,0xcc,0xb1,0xb7,0xc8, 0x8c,0x8e,0x92,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x38,0x2d,0x37,0x48,0x38,0x45,0x43,0x33,0x3e,0x3c,0x2d,0x37, 0x5d,0x62,0x7e,0x60,0x6c,0x93,0x64,0x4d,0x6b,0x74,0x80,0xa2,0x83,0x8d,0xac,0x83, 0x8e,0xac,0x89,0x93,0xb0,0x8c,0x96,0xb2,0x93,0x9c,0xb7,0x94,0x9d,0xb8,0x94,0x9d, 0xb8,0x94,0x9d,0xb8,0x94,0x9d,0xb8,0x8e,0x99,0xb4,0x8b,0x95,0xb2,0x88,0x92,0xaf, 0x81,0x8c,0xab,0x60,0x6d,0x93,0x5a,0x65,0x8d,0x9f,0xa7,0xbf,0x2c,0x2c,0x2c,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x12, 0x0e,0x11,0x4c,0x3b,0x48,0x78,0x6f,0x7e,0x5e,0x6a,0x91,0x52,0x4f,0x7b,0x5e,0x6b, 0x92,0x52,0x5c,0x85,0x5f,0x53,0x77,0x64,0x53,0x74,0x63,0x53,0x77,0x52,0x4f,0x7a, 0x52,0x4f,0x7a,0x60,0x48,0x65,0x52,0x53,0x7e,0x0b,0x0d,0x11,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x3b,0x3b, 0x66,0x66,0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x15,0x15,0x15,0x70,0x75,0x85,0x35,0x3a,0x57,0x2d,0x24,0x39,0x2d,0x20, 0x31,0x2e,0x24,0x37,0x4e,0x56,0x79,0x54,0x5f,0x89,0x52,0x4f,0x7a,0x60,0x53,0x77, 0x52,0x53,0x7d,0x52,0x50,0x7d,0x53,0x54,0x80,0x54,0x5a,0x86,0x56,0x5f,0x8b,0x57, 0x64,0x91,0x5a,0x65,0x93,0x5b,0x67,0x95,0x5c,0x63,0x91,0x63,0x5b,0x86,0x60,0x6d, 0x9a,0x2c,0x2b,0x3b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x1d,0x1d,0x27,0x9c,0x93,0xa7,0xd2,0xd6,0xde,0xb0,0xb5, 0xc7,0x93,0x9c,0xb4,0xaa,0xb0,0xc1,0x69,0x6c,0x6f,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x16,0x1c,0x4b,0x3a,0x47,0x43,0x33, 0x3f,0x3d,0x2e,0x38,0x51,0x50,0x66,0x6e,0x7a,0x9d,0x63,0x4b,0x67,0x69,0x74,0x99, 0x7e,0x89,0xa9,0x85,0x90,0xaf,0x88,0x92,0xb0,0x8d,0x96,0xb3,0x90,0x99,0xb4,0x93, 0x9c,0xb7,0x94,0x9d,0xb8,0x92,0x9b,0xb7,0x95,0x9f,0xb9,0x8e,0x99,0xb4,0x8e,0x99, 0xb4,0x89,0x93,0xb0,0x84,0x90,0xad,0x6d,0x79,0x9c,0x55,0x60,0x8a,0x86,0x91,0xaf, 0x78,0x79,0x7c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x4b,0x3a,0x47,0x53,0x41,0x50,0x91,0x8f,0xa3,0x52,0x58,0x83,0x52, 0x5d,0x88,0x5a,0x66,0x8e,0x52,0x4f,0x7a,0x64,0x52,0x71,0x64,0x4f,0x6e,0x5d,0x52, 0x79,0x52,0x4f,0x7a,0x64,0x53,0x76,0x5e,0x47,0x63,0x44,0x4d,0x70,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x05, 0x05,0x71,0x71,0x71,0x1d,0x1d,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3c,0x3e,0x47,0x26, 0x27,0x40,0x2e,0x21,0x33,0x2b,0x1e,0x2e,0x34,0x34,0x52,0x53,0x5e,0x89,0x52,0x4f, 0x7a,0x64,0x53,0x76,0x52,0x50,0x7b,0x53,0x52,0x7d,0x54,0x54,0x7e,0x55,0x58,0x85, 0x57,0x62,0x8e,0x5a,0x66,0x92,0x5b,0x67,0x95,0x5d,0x6a,0x98,0x5c,0x69,0x95,0x63, 0x5a,0x85,0x62,0x6f,0x9b,0x37,0x37,0x49,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0x5a,0x78,0xa8,0xa1,0xb1,0xcb, 0xcf,0xda,0xab,0xb2,0xc4,0x84,0x8e,0xa9,0x7c,0x85,0xa1,0x94,0xa0,0xb2,0x2f,0x30, 0x39,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x07,0x08,0x4e, 0x3d,0x4b,0x44,0x34,0x40,0x3e,0x2f,0x39,0x48,0x42,0x54,0x6f,0x7b,0x9f,0x5f,0x53, 0x77,0x57,0x63,0x8c,0x7c,0x88,0xa8,0x81,0x8b,0xaa,0x88,0x92,0xb0,0x8b,0x95,0xb2, 0x90,0x99,0xb4,0x91,0x9a,0xb5,0x92,0x9b,0xb7,0x94,0x9d,0xb8,0x95,0x9f,0xb9,0x94, 0x9d,0xb8,0x8e,0x99,0xb4,0x8b,0x95,0xb2,0x86,0x91,0xaf,0x7c,0x88,0xa8,0x55,0x60, 0x8a,0x6f,0x7b,0x9f,0xab,0xae,0xb8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x42,0x51,0x60,0x4e,0x60,0x91,0x9a,0xb5, 0x54,0x50,0x79,0x57,0x63,0x8c,0x54,0x5f,0x89,0x60,0x53,0x77,0x64,0x4d,0x6a,0x64, 0x4d,0x6b,0x5d,0x52,0x79,0x53,0x4f,0x7a,0x60,0x48,0x65,0x64,0x50,0x6e,0x2b,0x30, 0x46,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x1d,0x1d,0x1e,0x72,0x72,0x72,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x13,0x16,0x1d,0x2f,0x24,0x38,0x29,0x1c,0x2c,0x38,0x2c,0x42,0x52, 0x5d,0x86,0x52,0x4f,0x7a,0x64,0x52,0x73,0x52,0x4f,0x7b,0x53,0x53,0x7d,0x54,0x54, 0x80,0x56,0x5d,0x8a,0x58,0x5f,0x8d,0x5a,0x64,0x91,0x5b,0x67,0x94,0x5c,0x69,0x95, 0x5c,0x69,0x95,0x58,0x56,0x83,0x6b,0x79,0xa0,0x48,0x49,0x5e,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x24,0x27,0x32,0x73,0x69,0x8a, 0xae,0xad,0xb8,0xc9,0xce,0xd9,0xaa,0xb1,0xc2,0x7e,0x88,0xa4,0x66,0x71,0x92,0x63, 0x6d,0x8d,0x6a,0x73,0x95,0x0b,0x0b,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x4a,0x3a,0x48,0x46,0x36,0x42,0x41,0x31,0x3c,0x3f,0x34,0x40,0x6e, 0x7a,0x9d,0x52,0x53,0x7d,0x52,0x4f,0x7b,0x7b,0x86,0xa7,0x7e,0x8a,0xa9,0x85,0x90, 0xaf,0x8a,0x93,0xb1,0x8d,0x98,0xb3,0x91,0x9b,0xb5,0x92,0x9b,0xb7,0x92,0x9c,0xb7, 0x95,0x9f,0xb9,0x92,0x9b,0xb7,0x92,0x9b,0xb7,0x8c,0x95,0xb2,0x89,0x93,0xb1,0x82, 0x8c,0xab,0x5b,0x67,0x90,0x5d,0x6a,0x91,0xb3,0xba,0xcc,0x2c,0x2c,0x2d,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x0d,0x0f,0x5c,0x49,0x5a,0x7d,0x71, 0x84,0x71,0x7c,0x9f,0x5b,0x52,0x79,0x57,0x63,0x8c,0x52,0x50,0x7b,0x64,0x52,0x73, 0x62,0x4a,0x66,0x64,0x50,0x6e,0x5c,0x52,0x79,0x57,0x50,0x79,0x50,0x39,0x50,0x64, 0x53,0x75,0x16,0x17,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x44,0x44,0x4d,0x4d,0x4d,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2a,0x1e,0x2e, 0x35,0x27,0x39,0x52,0x4f,0x7a,0x52,0x50,0x7b,0x64,0x53,0x75,0x52,0x4f,0x7b,0x53, 0x53,0x7d,0x54,0x55,0x82,0x56,0x57,0x84,0x58,0x5c,0x89,0x58,0x64,0x92,0x5c,0x69, 0x95,0x5e,0x6b,0x96,0x63,0x6e,0x99,0x58,0x64,0x90,0x7d,0x89,0xaa,0x56,0x57,0x6e, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5d,0x65, 0x82,0x65,0x51,0x65,0xbc,0xbd,0xc9,0xc4,0xc7,0xd3,0xa5,0xac,0xbf,0x7d,0x86,0xa3, 0x5c,0x67,0x86,0x4a,0x55,0x73,0x59,0x64,0x88,0x54,0x5f,0x82,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2f,0x26,0x2f,0x4c,0x3b,0x49,0x42,0x33,0x3e, 0x3a,0x2c,0x35,0x69,0x72,0x93,0x57,0x63,0x8c,0x60,0x53,0x77,0x77,0x83,0xa4,0x80, 0x8b,0xaa,0x81,0x8b,0xaa,0x88,0x92,0xb0,0x8c,0x96,0xb2,0x91,0x9b,0xb5,0x91,0x9b, 0xb5,0x94,0x9d,0xb8,0x94,0x9d,0xb8,0x94,0x9d,0xb8,0x92,0x9b,0xb7,0x8d,0x98,0xb3, 0x8b,0x95,0xb2,0x84,0x90,0xad,0x66,0x72,0x98,0x55,0x60,0x8a,0x8e,0x98,0xb4,0x75, 0x76,0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x39,0x46,0x61, 0x4e,0x61,0x95,0x8f,0xa2,0x5e,0x6a,0x91,0x52,0x4f,0x7a,0x54,0x5f,0x89,0x5f,0x53, 0x77,0x63,0x4b,0x69,0x60,0x48,0x65,0x64,0x52,0x73,0x5d,0x52,0x79,0x64,0x53,0x75, 0x52,0x3b,0x52,0x51,0x4d,0x75,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x63,0x63,0x24,0x24,0x25, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x2c,0x21,0x31,0x33,0x2a,0x42,0x52,0x5d,0x86,0x52,0x50,0x7b,0x5d,0x52,0x79, 0x52,0x57,0x82,0x55,0x60,0x8a,0x56,0x63,0x8c,0x5c,0x67,0x92,0x62,0x6e,0x98,0x6a, 0x76,0x9f,0x6f,0x7c,0xa3,0x76,0x83,0xa8,0x80,0x8b,0xac,0x72,0x7d,0xa2,0xa2,0xaa, 0xc3,0x54,0x58,0x73,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x29, 0x2d,0x38,0x78,0x69,0x88,0x4d,0x3c,0x49,0xc8,0xcc,0xd6,0xbf,0xc4,0xd1,0xa3,0xaa, 0xbe,0x73,0x7d,0x9b,0x5b,0x65,0x88,0x49,0x53,0x73,0x44,0x50,0x71,0x66,0x74,0xa4, 0x2f,0x36,0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x16,0x12,0x16,0x4e,0x3d, 0x4b,0x43,0x33,0x3e,0x3c,0x2d,0x37,0x5c,0x60,0x7c,0x5d,0x6a,0x91,0x64,0x53,0x74, 0x71,0x7c,0x9f,0x7e,0x89,0xa9,0x80,0x8b,0xaa,0x85,0x90,0xad,0x8b,0x94,0xb1,0x8e, 0x99,0xb4,0x91,0x9b,0xb5,0x91,0x9a,0xb5,0x96,0xa0,0xba,0x93,0x9c,0xb7,0x93,0x9c, 0xb8,0x8c,0x96,0xb3,0x8c,0x96,0xb3,0x88,0x92,0xb0,0x72,0x7e,0xa1,0x57,0x63,0x8c, 0x74,0x80,0xa2,0xaa,0xad,0xb8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x5c,0x49,0x5a,0x68,0x54,0x68,0xa3,0xa6,0xb9,0x53,0x5e,0x88,0x52,0x50,0x7b,0x52, 0x53,0x7d,0x64,0x52,0x72,0x60,0x48,0x64,0x62,0x4b,0x66,0x64,0x53,0x75,0x62,0x53, 0x77,0x5f,0x47,0x63,0x5a,0x41,0x5c,0x3b,0x38,0x55,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0c,0x0c,0x0c,0x74,0x74, 0x75,0x05,0x05,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x2b,0x44,0x76,0x81,0xa2,0x63,0x6e, 0x95,0x52,0x5d,0x88,0x55,0x62,0x8b,0x54,0x5f,0x8a,0x53,0x5e,0x8a,0x54,0x58,0x84, 0x55,0x56,0x82,0x55,0x54,0x80,0x54,0x55,0x83,0x54,0x5e,0x8a,0x56,0x62,0x8c,0x56, 0x62,0x8b,0x76,0x82,0xa4,0x51,0x55,0x76,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x5b,0x64,0x82,0x68,0x53,0x68,0x52,0x44,0x4f,0xca,0xce,0xd9,0xc0, 0xc4,0xd1,0x9f,0xa5,0xbb,0x71,0x7b,0x99,0x58,0x62,0x85,0x4d,0x58,0x7b,0x3f,0x49, 0x69,0x41,0x4a,0x6d,0x71,0x7d,0xb3,0x05,0x05,0x06,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06, 0x05,0x06,0x56,0x43,0x53,0x44,0x34,0x40,0x3e,0x2f,0x39,0x51,0x4f,0x67,0x62,0x6e, 0x94,0x64,0x53,0x76,0x62,0x6e,0x94,0x7b,0x86,0xa7,0x83,0x8d,0xac,0x84,0x90,0xad, 0x89,0x93,0xb0,0x8d,0x98,0xb3,0x90,0x9a,0xb5,0x93,0x9d,0xb8,0x92,0x9c,0xb7,0x94, 0x9d,0xb8,0x94,0x9d,0xb8,0x90,0x9a,0xb5,0x90,0x9a,0xb5,0x88,0x92,0xb0,0x80,0x8b, 0xaa,0x5c,0x69,0x90,0x60,0x6d,0x93,0x9b,0xa4,0xbc,0x20,0x20,0x20,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x09,0x07,0x09,0x61,0x4d,0x60,0x70,0x5f,0x73,0xa4,0xac,0xc3,0x52,0x50,0x7b, 0x52,0x50,0x7c,0x5d,0x52,0x79,0x62,0x4a,0x66,0x5f,0x47,0x63,0x63,0x4c,0x69,0x64, 0x53,0x75,0x64,0x53,0x76,0x55,0x3d,0x56,0x5f,0x47,0x63,0x20,0x1d,0x2c,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x31, 0x31,0x31,0x5c,0x5d,0x5d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x27,0x1f,0x29,0x82, 0x8c,0xab,0x52,0x52,0x7d,0x64,0x4e,0x6d,0x64,0x53,0x76,0x5c,0x52,0x79,0x5a,0x52, 0x7a,0x5b,0x53,0x7a,0x5c,0x53,0x7a,0x5a,0x52,0x7a,0x53,0x50,0x7b,0x53,0x54,0x80, 0x52,0x5d,0x89,0x52,0x5a,0x84,0x6b,0x75,0x9a,0x58,0x5f,0x81,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x2f,0x32,0x3e,0x76,0x69,0x89,0x59,0x46,0x57,0x5f,0x53,0x5f, 0xca,0xce,0xd9,0xbc,0xc2,0xd0,0x98,0xa0,0xb3,0x6c,0x77,0x96,0x54,0x5e,0x83,0x4c, 0x56,0x7a,0x45,0x52,0x77,0x3a,0x42,0x60,0x54,0x5e,0x89,0x4c,0x55,0x7a,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x39,0x46,0x49,0x38,0x45,0x40,0x30,0x3b,0x48, 0x42,0x54,0x6a,0x75,0x9a,0x5a,0x52,0x79,0x56,0x63,0x8b,0x7a,0x85,0xa5,0x7e,0x8a, 0xa9,0x83,0x8e,0xac,0x88,0x92,0xb0,0x8c,0x96,0xb2,0x90,0x99,0xb4,0x94,0x9d,0xb8, 0x91,0x9b,0xb5,0x94,0x9d,0xb8,0x93,0x9d,0xb8,0x93,0x9c,0xb7,0x8d,0x98,0xb3,0x89, 0x93,0xb0,0x86,0x91,0xaf,0x67,0x73,0x99,0x57,0x63,0x8c,0x7c,0x86,0xa7,0x66,0x68, 0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x35,0x2b,0x35,0x66,0x52,0x66,0x82,0x76,0x8b,0x93,0x9c, 0xb7,0x58,0x50,0x79,0x52,0x4f,0x7a,0x64,0x52,0x72,0x60,0x48,0x65,0x60,0x48,0x64, 0x64,0x52,0x72,0x64,0x53,0x75,0x64,0x50,0x71,0x50,0x39,0x50,0x64,0x50,0x71,0x03, 0x03,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x54,0x54,0x54,0x38,0x38,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x1d,0x18,0x1e,0x69,0x71,0x94,0x52,0x4f,0x7b,0x64,0x4c,0x6a,0x63,0x53,0x77,0x5f, 0x53,0x77,0x5e,0x53,0x79,0x5c,0x52,0x79,0x5e,0x53,0x79,0x58,0x52,0x79,0x52,0x4f, 0x7a,0x52,0x53,0x7d,0x52,0x5c,0x86,0x52,0x5b,0x85,0x69,0x75,0x99,0x60,0x67,0x87, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x04,0x05,0x06,0x6a,0x74,0x95,0x6c,0x57,0x6d,0x57,0x44, 0x54,0x6d,0x63,0x6e,0xc9,0xcc,0xd8,0xbb,0xc0,0xce,0x95,0x9d,0xb2,0x67,0x73,0x93, 0x51,0x5d,0x81,0x4a,0x56,0x79,0x46,0x51,0x77,0x46,0x4e,0x73,0x42,0x4a,0x6d,0x68, 0x73,0xac,0x15,0x18,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x0e,0x11,0x4d,0x3c,0x4a, 0x41,0x32,0x3d,0x3f,0x34,0x41,0x6a,0x76,0x9a,0x52,0x52,0x7c,0x52,0x50,0x7c,0x79, 0x84,0xa5,0x7e,0x89,0xa9,0x81,0x8c,0xab,0x88,0x92,0xb0,0x8a,0x94,0xb1,0x8c,0x96, 0xb2,0x90,0x99,0xb4,0x91,0x9a,0xb5,0x94,0x9d,0xb8,0x93,0x9d,0xb8,0x91,0x9a,0xb5, 0x90,0x99,0xb4,0x8e,0x98,0xb4,0x88,0x92,0xb0,0x77,0x82,0xa4,0x5a,0x65,0x8d,0x66, 0x73,0x98,0x8f,0x94,0xa2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x62,0x4e,0x61,0x68,0x53,0x68,0x94, 0x8e,0xa1,0x7b,0x85,0xa7,0x60,0x53,0x77,0x5a,0x52,0x79,0x64,0x4c,0x69,0x60,0x48, 0x65,0x63,0x4b,0x67,0x64,0x52,0x71,0x64,0x53,0x74,0x60,0x48,0x65,0x4d,0x36,0x4c, 0x52,0x44,0x5f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x0b,0x0b,0x0b,0x69,0x6a,0x6a,0x15,0x15,0x15,0x13,0x13,0x13, 0x33,0x33,0x34,0x4a,0x4a,0x4a,0x45,0x45,0x45,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x11,0x0e,0x11,0x75,0x7a,0x96,0x52,0x53,0x7e,0x64,0x4d,0x6b, 0x62,0x53,0x77,0x5e,0x53,0x79,0x5e,0x53,0x79,0x5d,0x52,0x79,0x5e,0x53,0x79,0x58, 0x50,0x79,0x52,0x4f,0x7a,0x52,0x54,0x7e,0x52,0x5d,0x88,0x52,0x5c,0x86,0x66,0x72, 0x98,0x69,0x73,0x93,0x0b,0x09,0x0d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4b,0x51,0x67,0x78,0x69,0x87,0x62, 0x4e,0x61,0x56,0x43,0x53,0x76,0x6e,0x79,0xc8,0xcb,0xd8,0xb8,0xbe,0xcb,0x91,0x99, 0xb0,0x62,0x6e,0x8d,0x50,0x5b,0x80,0x48,0x52,0x74,0x46,0x4f,0x76,0x4c,0x54,0x7b, 0x44,0x4c,0x6f,0x4b,0x54,0x7e,0x67,0x73,0xa0,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x51,0x3f,0x4e,0x44,0x34,0x40,0x3c,0x2d,0x37,0x67,0x70,0x94,0x53,0x5e,0x88, 0x60,0x53,0x77,0x77,0x83,0xa4,0x7d,0x89,0xa9,0x82,0x8c,0xab,0x84,0x8e,0xad,0x88, 0x92,0xb0,0x8c,0x96,0xb2,0x91,0x9a,0xb5,0x91,0x9a,0xb5,0x95,0x9f,0xb9,0x92,0x9c, 0xb7,0x91,0x9a,0xb5,0x91,0x9a,0xb5,0x8e,0x98,0xb4,0x89,0x93,0xb0,0x83,0x8d,0xac, 0x60,0x6c,0x93,0x5b,0x67,0x90,0x96,0xa0,0xba,0x1d,0x1e,0x1e,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x03,0x04,0x67,0x53,0x67, 0x6a,0x55,0x6b,0xa7,0xa7,0xb9,0x60,0x6d,0x94,0x64,0x53,0x74,0x64,0x53,0x76,0x63, 0x4b,0x67,0x62,0x4a,0x66,0x64,0x52,0x72,0x64,0x53,0x74,0x64,0x53,0x74,0x55,0x3d, 0x56,0x54,0x3d,0x55,0x25,0x1f,0x2a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x04,0x04,0x04,0x43,0x43,0x43,0x79,0x79,0x7a,0x69,0x6a, 0x6a,0x75,0x75,0x76,0x59,0x59,0x59,0x42,0x42,0x42,0x23,0x23,0x23,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x7f,0x7d,0x95,0x52,0x53, 0x7d,0x63,0x4c,0x69,0x62,0x53,0x77,0x60,0x53,0x77,0x5f,0x53,0x79,0x60,0x53,0x77, 0x5d,0x52,0x79,0x58,0x50,0x79,0x52,0x4f,0x7a,0x52,0x53,0x7e,0x53,0x5e,0x88,0x52, 0x5d,0x86,0x62,0x6d,0x94,0x79,0x82,0xa3,0x52,0x4e,0x76,0x0c,0x09,0x0c,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x05,0x07,0x67,0x69,0x8d, 0x6a,0x55,0x6a,0x60,0x4c,0x5f,0x54,0x42,0x51,0x80,0x7a,0x85,0xc8,0xcb,0xd8,0xb8, 0xbc,0xcb,0x8b,0x94,0xac,0x60,0x6a,0x8b,0x4e,0x5b,0x7e,0x47,0x51,0x74,0x45,0x4e, 0x76,0x4c,0x56,0x7d,0x4f,0x58,0x80,0x46,0x4f,0x74,0x84,0x93,0xd9,0x22,0x25,0x30, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x4c,0x3b,0x4a,0x49,0x38,0x45,0x3f,0x30,0x3a,0x5e,0x62, 0x80,0x5a,0x66,0x8e,0x64,0x53,0x73,0x69,0x75,0x9a,0x7a,0x85,0xa7,0x7d,0x89,0xa9, 0x82,0x8c,0xab,0x89,0x93,0xb0,0x8d,0x96,0xb3,0x8d,0x98,0xb3,0x92,0x9b,0xb7,0x92, 0x9b,0xb7,0x95,0x9f,0xb9,0x93,0x9c,0xb8,0x91,0x9b,0xb5,0x8e,0x99,0xb4,0x89,0x93, 0xb0,0x83,0x8d,0xac,0x6d,0x7a,0x9d,0x55,0x62,0x8b,0x7a,0x85,0xa7,0x65,0x65,0x68, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x1c, 0x23,0x6b,0x56,0x6c,0x6d,0x58,0x6e,0xb0,0xb7,0xc9,0x55,0x60,0x8a,0x64,0x4f,0x6e, 0x64,0x53,0x74,0x62,0x4a,0x66,0x64,0x4d,0x6b,0x64,0x53,0x76,0x64,0x52,0x72,0x64, 0x4f,0x6e,0x4b,0x34,0x4a,0x5d,0x45,0x60,0x06,0x05,0x07,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x0d,0x0d,0x0d,0x36,0x37,0x37,0x5d,0x5d,0x5d,0x7c,0x7d,0x7d,0x89,0x89,0x8a,0x66, 0x66,0x66,0x21,0x21,0x21,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6c, 0x67,0x7c,0x52,0x53,0x7e,0x64,0x4c,0x69,0x62,0x53,0x77,0x60,0x53,0x77,0x5f,0x53, 0x77,0x60,0x53,0x77,0x5e,0x53,0x79,0x5c,0x52,0x79,0x52,0x4f,0x7a,0x52,0x53,0x7d, 0x53,0x5e,0x87,0x52,0x5d,0x88,0x5d,0x6a,0x91,0x77,0x82,0xa4,0x52,0x56,0x82,0x4e, 0x3f,0x57,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x4c, 0x66,0x75,0x60,0x78,0x62,0x4e,0x62,0x5e,0x4b,0x5d,0x51,0x40,0x4f,0x8a,0x84,0x90, 0xc7,0xca,0xd7,0xb5,0xba,0xc8,0x89,0x91,0xaa,0x5d,0x67,0x8a,0x4d,0x59,0x7c,0x46, 0x51,0x74,0x45,0x4e,0x76,0x4c,0x56,0x7f,0x53,0x5d,0x89,0x45,0x4d,0x74,0x5e,0x68, 0x9b,0x77,0x81,0xba,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x27,0x1f,0x26,0x4a,0x39,0x47,0x41, 0x32,0x3d,0x55,0x55,0x6e,0x62,0x6d,0x94,0x64,0x4e,0x6c,0x60,0x6c,0x93,0x79,0x84, 0xa5,0x7e,0x89,0xa9,0x81,0x8b,0xaa,0x84,0x8e,0xac,0x8a,0x93,0xb1,0x8b,0x95,0xb2, 0x90,0x99,0xb4,0x91,0x9b,0xb5,0x95,0x9f,0xb9,0x92,0x9b,0xb7,0x92,0x9c,0xb7,0x8d, 0x98,0xb3,0x8c,0x96,0xb3,0x86,0x91,0xaf,0x7b,0x86,0xa7,0x5a,0x65,0x8d,0x65,0x72, 0x96,0x96,0x9a,0xa5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x59,0x48,0x5a,0x6d,0x58,0x6e,0x72,0x60,0x74,0xab,0xb3,0xc8,0x52,0x55, 0x80,0x64,0x53,0x75,0x64,0x53,0x74,0x64,0x50,0x6f,0x64,0x53,0x74,0x64,0x53,0x74, 0x64,0x53,0x74,0x64,0x4d,0x6b,0x4b,0x34,0x4a,0x5e,0x48,0x64,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x08,0x08,0x08,0x2b,0x2b,0x2b,0x51,0x51, 0x52,0x77,0x78,0x78,0x8b,0x8b,0x8c,0x66,0x66,0x66,0x3b,0x3c,0x3c,0x20,0x20,0x20, 0x6b,0x6b,0x6b,0x0f,0x0f,0x0f,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x5d,0x59,0x6d,0x52,0x5a,0x83,0x63,0x4c,0x69,0x62,0x53,0x77,0x60, 0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x5c,0x52,0x79,0x53,0x4f, 0x7a,0x52,0x53,0x7d,0x52,0x5d,0x87,0x52,0x5d,0x87,0x5a,0x66,0x8d,0x73,0x7e,0xa0, 0x54,0x5f,0x89,0x4b,0x3b,0x56,0x2c,0x21,0x2f,0x00,0x00,0x00,0x00,0x00,0x00,0x08, 0x07,0x0a,0x77,0x68,0x86,0x68,0x53,0x68,0x60,0x4c,0x5f,0x5e,0x4b,0x5d,0x4f,0x3e, 0x4c,0x7a,0x73,0x7e,0xc7,0xcb,0xd7,0xb2,0xb8,0xc8,0x83,0x8b,0xa5,0x5c,0x66,0x88, 0x4d,0x55,0x78,0x46,0x4f,0x74,0x45,0x4e,0x76,0x4b,0x56,0x7f,0x54,0x5e,0x8a,0x4c, 0x55,0x7f,0x41,0x48,0x6a,0x83,0x8e,0xd1,0x31,0x34,0x48,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x06,0x07, 0x50,0x3f,0x4d,0x43,0x33,0x3f,0x4d,0x48,0x5c,0x69,0x74,0x99,0x64,0x53,0x74,0x56, 0x62,0x8b,0x75,0x81,0xa3,0x7c,0x86,0xa8,0x7d,0x89,0xa9,0x84,0x90,0xad,0x88,0x92, 0xb0,0x8a,0x94,0xb1,0x8e,0x99,0xb4,0x92,0x9b,0xb7,0x92,0x9c,0xb7,0x91,0x9b,0xb5, 0x94,0x9d,0xb8,0x90,0x9a,0xb5,0x8d,0x98,0xb3,0x8a,0x93,0xb1,0x84,0x90,0xad,0x64, 0x6f,0x95,0x57,0x64,0x8c,0xa0,0xa8,0xbf,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x68,0x53,0x68,0x68,0x54,0x68,0x7c,0x6f,0x82,0x98, 0xa1,0xba,0x52,0x4f,0x7a,0x64,0x53,0x76,0x63,0x53,0x77,0x64,0x53,0x76,0x64,0x53, 0x76,0x64,0x53,0x76,0x64,0x53,0x75,0x5e,0x46,0x60,0x54,0x3c,0x55,0x29,0x20,0x2c, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x3c,0x3d,0x3d,0x8c,0x8c,0x8d,0x85, 0x85,0x86,0x7c,0x7d,0x7d,0x74,0x75,0x75,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6e,0x6e, 0x6e,0x7f,0x80,0x80,0x81,0x82,0x82,0x65,0x65,0x66,0x59,0x5a,0x5a,0x4b,0x4b,0x4c, 0x3b,0x3b,0x3b,0x29,0x29,0x29,0x16,0x16,0x16,0x07,0x07,0x07,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x43,0x41,0x54,0x53,0x58,0x81,0x63,0x4d,0x6a, 0x64,0x53,0x76,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x5c, 0x52,0x79,0x52,0x4f,0x7a,0x52,0x52,0x7c,0x52,0x5d,0x87,0x53,0x5e,0x87,0x57,0x64, 0x8b,0x77,0x82,0xa3,0x57,0x63,0x8b,0x4c,0x3e,0x5b,0x2c,0x1f,0x31,0x25,0x1a,0x25, 0x00,0x00,0x00,0x48,0x47,0x60,0x73,0x5e,0x76,0x61,0x4d,0x60,0x5f,0x4c,0x5e,0x5d, 0x49,0x5b,0x4e,0x3c,0x4a,0x7d,0x76,0x81,0xc8,0xcb,0xd7,0xaf,0xb4,0xc6,0x7e,0x86, 0xa3,0x57,0x5f,0x84,0x4a,0x55,0x78,0x45,0x4f,0x74,0x45,0x4e,0x76,0x4a,0x55,0x7f, 0x54,0x5d,0x8a,0x58,0x60,0x93,0x3f,0x46,0x67,0x5a,0x63,0x8f,0x7e,0x84,0xc7,0x03, 0x03,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x50,0x3f,0x4e,0x44,0x34,0x40,0x48,0x3c,0x4c,0x69,0x75,0x9a, 0x5a,0x52,0x79,0x52,0x4f,0x7a,0x76,0x82,0xa3,0x7b,0x86,0xa7,0x7d,0x89,0xa9,0x83, 0x8d,0xac,0x85,0x90,0xad,0x8b,0x94,0xb1,0x90,0x99,0xb4,0x91,0x9a,0xb5,0x94,0x9d, 0xb8,0x95,0x9f,0xb9,0x91,0x9a,0xb5,0x91,0x9a,0xb5,0x8d,0x98,0xb3,0x8c,0x96,0xb3, 0x86,0x91,0xaf,0x74,0x80,0xa2,0x56,0x62,0x8b,0x80,0x8b,0xaa,0x61,0x62,0x64,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5e,0x4b,0x5d,0x5b,0x48,0x5a, 0x8b,0x83,0x94,0x80,0x8a,0xaa,0x5b,0x52,0x79,0x5d,0x52,0x79,0x5a,0x52,0x79,0x5c, 0x52,0x79,0x5d,0x52,0x79,0x62,0x53,0x77,0x64,0x53,0x76,0x5a,0x41,0x5b,0x5d,0x45, 0x60,0x09,0x07,0x0a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x1f,0x1f,0x1f, 0x2b,0x2b,0x2b,0x24,0x24,0x24,0x1a,0x1a,0x1a,0x11,0x11,0x11,0x0b,0x0b,0x0b,0x0a, 0x0a,0x0a,0x0c,0x0c,0x0d,0x81,0x82,0x82,0x20,0x20,0x21,0x1c,0x1c,0x1d,0x2d,0x2e, 0x2e,0x3e,0x3e,0x3f,0x4e,0x4f,0x4f,0x5d,0x5d,0x5e,0x6c,0x6c,0x6c,0x70,0x70,0x70, 0x62,0x62,0x62,0x48,0x48,0x49,0x28,0x28,0x28,0x09,0x09,0x09,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x33,0x33,0x46,0x53,0x5d, 0x85,0x64,0x4d,0x6b,0x64,0x53,0x76,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77, 0x60,0x53,0x77,0x5c,0x52,0x79,0x53,0x4f,0x7a,0x52,0x52,0x7d,0x52,0x5d,0x87,0x53, 0x5e,0x87,0x53,0x5f,0x88,0x75,0x80,0xa2,0x5b,0x67,0x8f,0x4b,0x41,0x62,0x2c,0x1f, 0x32,0x23,0x19,0x26,0x21,0x19,0x21,0x6d,0x67,0x89,0x69,0x54,0x69,0x5d,0x49,0x5b, 0x5e,0x4b,0x5d,0x5c,0x49,0x5a,0x4c,0x3b,0x48,0x87,0x82,0x8e,0xc7,0xca,0xd7,0xab, 0xb2,0xc3,0x77,0x82,0x9f,0x55,0x5f,0x83,0x48,0x54,0x76,0x45,0x4e,0x74,0x46,0x4e, 0x74,0x4a,0x55,0x7f,0x53,0x5e,0x89,0x58,0x61,0x92,0x52,0x5a,0x83,0x3f,0x45,0x65, 0x7c,0x83,0xc4,0x3e,0x40,0x5d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0x18,0x1e,0x49,0x38,0x45,0x42,0x33, 0x3e,0x68,0x73,0x97,0x52,0x54,0x80,0x64,0x53,0x74,0x73,0x7e,0xa1,0x7a,0x84,0xa5, 0x7d,0x88,0xa8,0x81,0x8c,0xab,0x88,0x92,0xb0,0x88,0x92,0xb0,0x8d,0x98,0xb3,0x90, 0x99,0xb4,0x91,0x9b,0xb5,0x92,0x9b,0xb7,0x93,0x9c,0xb7,0x91,0x9a,0xb6,0x8b,0x95, 0xb2,0x8b,0x94,0xb1,0x87,0x91,0xaf,0x7e,0x89,0xa8,0x5e,0x6a,0x91,0x66,0x73,0x98, 0x8b,0x8f,0x9c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x02,0x03,0x50,0x3e, 0x4d,0x50,0x3f,0x4d,0xa0,0x9d,0xac,0x6f,0x7b,0x9f,0x55,0x50,0x79,0x52,0x4f,0x7a, 0x52,0x4f,0x7a,0x56,0x50,0x79,0x58,0x50,0x79,0x5f,0x53,0x77,0x64,0x53,0x75,0x57, 0x3f,0x58,0x64,0x4d,0x6a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03, 0x02,0x03,0x03,0x02,0x03,0x03,0x36,0x36,0x37,0x60,0x61,0x61,0x03,0x03,0x04,0x03, 0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x02,0x03,0x03,0x02,0x03,0x03,0x02,0x02, 0x03,0x0a,0x0a,0x0b,0x25,0x25,0x25,0x46,0x46,0x47,0x67,0x67,0x68,0x76,0x77,0x77, 0x5e,0x5e,0x5e,0x36,0x37,0x37,0x07,0x07,0x07,0x02,0x02,0x02,0x02,0x02,0x02,0x29, 0x2b,0x3b,0x53,0x5d,0x84,0x64,0x4d,0x6b,0x64,0x53,0x76,0x60,0x53,0x77,0x60,0x53, 0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x5c,0x52,0x79,0x53,0x4f,0x7a,0x52,0x52,0x7c, 0x52,0x5d,0x85,0x53,0x5e,0x87,0x53,0x5e,0x87,0x75,0x80,0xa1,0x60,0x6c,0x92,0x4c, 0x43,0x65,0x2d,0x20,0x32,0x24,0x19,0x26,0x28,0x1d,0x29,0x78,0x69,0x88,0x60,0x4c, 0x5f,0x5b,0x48,0x5a,0x5d,0x49,0x5b,0x5a,0x47,0x58,0x4b,0x3a,0x47,0x8f,0x8a,0x96, 0xc6,0xca,0xd6,0xa9,0xb0,0xc2,0x71,0x7b,0x99,0x52,0x5d,0x81,0x48,0x54,0x76,0x44, 0x4e,0x74,0x46,0x4e,0x73,0x4a,0x53,0x7d,0x51,0x5d,0x89,0x58,0x61,0x92,0x5e,0x67, 0x95,0x44,0x4a,0x6c,0x5a,0x5f,0x8e,0x82,0x87,0xcb,0x05,0x05,0x07,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x04,0x05,0x4c, 0x3b,0x49,0x44,0x34,0x40,0x5f,0x65,0x84,0x55,0x60,0x8a,0x64,0x4c,0x6a,0x6a,0x76, 0x9a,0x76,0x82,0xa3,0x7c,0x86,0xa8,0x7e,0x8a,0xa9,0x83,0x8d,0xac,0x86,0x91,0xaf, 0x8b,0x95,0xb2,0x8f,0x98,0xb3,0x91,0x9b,0xb6,0x91,0x9a,0xb6,0x91,0x9a,0xb6,0x91, 0x9a,0xb6,0x91,0x9b,0xb6,0x8b,0x95,0xb2,0x89,0x92,0xb0,0x83,0x8d,0xab,0x6c,0x77, 0x9b,0x5b,0x66,0x8d,0x8f,0x99,0xb4,0x12,0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02, 0x02,0x02,0x48,0x37,0x44,0x47,0x37,0x43,0x9b,0x9f,0xb5,0x67,0x73,0x99,0x57,0x50, 0x79,0x54,0x5f,0x89,0x55,0x60,0x8a,0x52,0x56,0x82,0x53,0x50,0x79,0x57,0x50,0x79, 0x64,0x4f,0x6d,0x58,0x41,0x5b,0x40,0x35,0x4a,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02, 0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x03,0x03,0x02,0x03,0x03,0x02,0x03, 0x03,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x77,0x77,0x78,0x2a,0x2a,0x2a, 0x04,0x04,0x05,0x04,0x04,0x05,0x06,0x06,0x07,0x3d,0x3d,0x3d,0x37,0x37,0x37,0x03, 0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x02,0x03,0x03,0x02,0x03,0x03,0x02,0x02, 0x03,0x0d,0x0d,0x0d,0x31,0x31,0x31,0x6f,0x6f,0x6f,0x8f,0x8f,0x90,0x0a,0x0a,0x0a, 0x02,0x02,0x02,0x20,0x23,0x32,0x52,0x5a,0x84,0x64,0x51,0x70,0x62,0x53,0x77,0x60, 0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x5d,0x52,0x79,0x54,0x51, 0x79,0x53,0x51,0x7c,0x53,0x5c,0x84,0x53,0x5e,0x87,0x52,0x5d,0x87,0x6c,0x77,0x9b, 0x6e,0x7a,0x9c,0x4b,0x44,0x68,0x2c,0x1f,0x31,0x24,0x19,0x27,0x37,0x2a,0x3a,0x78, 0x65,0x80,0x5d,0x4a,0x5c,0x5a,0x47,0x58,0x5d,0x49,0x5b,0x5a,0x47,0x58,0x4b,0x3a, 0x48,0x95,0x90,0x9b,0xc7,0xcb,0xd8,0xa2,0xa9,0xbe,0x6e,0x77,0x96,0x52,0x5d,0x80, 0x46,0x54,0x75,0x44,0x4e,0x73,0x44,0x4e,0x74,0x49,0x52,0x7c,0x50,0x5b,0x87,0x59, 0x61,0x90,0x5e,0x66,0x94,0x51,0x58,0x7f,0x43,0x46,0x68,0x76,0x7a,0xb6,0x44,0x47, 0x67,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x4f,0x3d,0x4b,0x45,0x35,0x41,0x57,0x57,0x72,0x5c,0x67,0x90,0x64, 0x4c,0x6a,0x63,0x6e,0x94,0x73,0x7e,0xa1,0x77,0x83,0xa4,0x7d,0x88,0xa8,0x82,0x8c, 0xab,0x84,0x8f,0xac,0x89,0x93,0xb0,0x8c,0x97,0xb2,0x91,0x9b,0xb6,0x93,0x9c,0xb7, 0x8f,0x98,0xb3,0x90,0x99,0xb4,0x8f,0x98,0xb3,0x8b,0x95,0xb2,0x89,0x93,0xb0,0x85, 0x90,0xae,0x79,0x82,0xa3,0x5d,0x69,0x90,0x74,0x7f,0xa0,0x58,0x59,0x5c,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x02,0x02,0x02,0x41,0x32,0x3d,0x43,0x34,0x3f,0x9d,0xa7,0xbf,0x60, 0x6d,0x94,0x5e,0x52,0x79,0x57,0x63,0x8c,0x5a,0x65,0x8d,0x5a,0x66,0x8e,0x55,0x60, 0x8a,0x52,0x55,0x80,0x63,0x4b,0x67,0x63,0x4c,0x69,0x14,0x11,0x18,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x03,0x03,0x02,0x02,0x03, 0x02,0x03,0x03,0x02,0x03,0x03,0x02,0x03,0x03,0x02,0x03,0x03,0x02,0x03,0x03,0x03, 0x03,0x04,0x04,0x04,0x05,0x04,0x04,0x05,0x04,0x04,0x05,0x04,0x04,0x05,0x04,0x04, 0x05,0x04,0x04,0x05,0x04,0x05,0x05,0x04,0x05,0x05,0x51,0x51,0x52,0x84,0x84,0x85, 0x87,0x87,0x88,0x89,0x89,0x89,0x3d,0x3d,0x3d,0x03,0x03,0x04,0x03,0x03,0x04,0x03, 0x03,0x04,0x02,0x03,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x21,0x21,0x21,0x2b,0x2b, 0x2b,0x02,0x02,0x03,0x02,0x02,0x02,0x1c,0x20,0x2d,0x52,0x5d,0x88,0x65,0x54,0x76, 0x62,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x5d, 0x52,0x79,0x53,0x50,0x7a,0x53,0x51,0x7b,0x53,0x5d,0x85,0x54,0x5e,0x87,0x52,0x5d, 0x87,0x64,0x6f,0x95,0x65,0x71,0x95,0x54,0x4a,0x6d,0x2d,0x20,0x32,0x24,0x19,0x26, 0x35,0x28,0x38,0x71,0x5c,0x73,0x5d,0x49,0x5b,0x5a,0x47,0x58,0x5b,0x48,0x59,0x57, 0x45,0x55,0x4a,0x39,0x47,0xa2,0xa0,0xab,0xc2,0xc7,0xd5,0x9d,0xa5,0xb9,0x6a,0x74, 0x94,0x4f,0x58,0x7d,0x46,0x53,0x76,0x43,0x4e,0x72,0x44,0x4e,0x73,0x48,0x52,0x79, 0x4f,0x59,0x84,0x58,0x60,0x8f,0x5f,0x65,0x94,0x5f,0x67,0x95,0x49,0x4c,0x71,0x5a, 0x5e,0x8b,0x84,0x84,0xc1,0x05,0x05,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x2e,0x39,0x45,0x35,0x41,0x51,0x4c,0x61, 0x5f,0x6c,0x93,0x63,0x4b,0x69,0x58,0x64,0x8c,0x75,0x81,0xa2,0x7a,0x84,0xa6,0x7c, 0x87,0xa7,0x80,0x8a,0xaa,0x83,0x8d,0xac,0x88,0x92,0xaf,0x8c,0x97,0xb2,0x8f,0x98, 0xb3,0x90,0x99,0xb4,0x91,0x9a,0xb6,0x8d,0x98,0xb3,0x90,0x9a,0xb4,0x8c,0x97,0xb2, 0x88,0x92,0xaf,0x84,0x8f,0xac,0x7e,0x89,0xa8,0x63,0x6f,0x94,0x60,0x6c,0x92,0x84, 0x88,0x93,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x04,0x04,0x3f,0x30,0x3b,0x47,0x39,0x44, 0xa1,0xa9,0xc1,0x5f,0x6c,0x93,0x5d,0x52,0x79,0x5b,0x66,0x8e,0x5c,0x69,0x90,0x5c, 0x67,0x90,0x58,0x64,0x8c,0x55,0x60,0x8a,0x64,0x50,0x71,0x52,0x4f,0x7a,0x03,0x03, 0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x03,0x03,0x02,0x03, 0x03,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x04,0x04,0x05,0x04,0x04,0x05, 0x04,0x04,0x05,0x04,0x05,0x05,0x04,0x05,0x05,0x05,0x05,0x06,0x04,0x05,0x05,0x04, 0x05,0x05,0x05,0x06,0x06,0x05,0x06,0x06,0x05,0x06,0x06,0x1e,0x1f,0x20,0x8f,0x8f, 0x90,0x57,0x57,0x58,0x2f,0x30,0x31,0x2f,0x30,0x31,0x65,0x65,0x67,0x5f,0x5f,0x61, 0x05,0x05,0x06,0x04,0x05,0x05,0x04,0x04,0x05,0x04,0x04,0x05,0x03,0x03,0x04,0x02, 0x03,0x03,0x02,0x03,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x1a,0x1c,0x29,0x52,0x5c, 0x86,0x64,0x53,0x75,0x63,0x54,0x78,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77, 0x60,0x53,0x77,0x5d,0x53,0x79,0x55,0x51,0x79,0x52,0x50,0x7b,0x53,0x5d,0x85,0x54, 0x5e,0x87,0x54,0x5d,0x87,0x5e,0x6a,0x90,0x66,0x72,0x97,0x51,0x4a,0x71,0x2e,0x21, 0x33,0x24,0x19,0x27,0x31,0x24,0x33,0x6d,0x59,0x6f,0x5c,0x49,0x5a,0x5a,0x48,0x59, 0x5b,0x48,0x59,0x56,0x43,0x53,0x47,0x37,0x43,0xa9,0xa8,0xb3,0xc3,0xc8,0xd5,0x98, 0xa0,0xb6,0x63,0x6e,0x8f,0x4e,0x5a,0x7d,0x47,0x52,0x76,0x43,0x4e,0x73,0x44,0x4e, 0x73,0x48,0x52,0x79,0x4e,0x58,0x83,0x59,0x60,0x8e,0x5f,0x65,0x94,0x60,0x67,0x95, 0x5b,0x5f,0x8b,0x53,0x54,0x7c,0x78,0x78,0xae,0x3b,0x3c,0x51,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x21,0x1a,0x1f,0x46,0x36, 0x42,0x4b,0x40,0x52,0x66,0x72,0x98,0x62,0x53,0x77,0x52,0x56,0x81,0x72,0x7e,0xa0, 0x76,0x81,0xa2,0x7b,0x85,0xa6,0x7f,0x89,0xa9,0x7f,0x89,0xa9,0x85,0x90,0xae,0x8a, 0x94,0xb1,0x8c,0x97,0xb2,0x91,0x9a,0xb6,0x90,0x9a,0xb4,0x94,0x9e,0xb8,0x90,0x99, 0xb4,0x8c,0x97,0xb2,0x8c,0x97,0xb2,0x88,0x92,0xaf,0x82,0x8c,0xab,0x6f,0x7b,0x9e, 0x55,0x60,0x89,0x96,0x9f,0xb7,0x13,0x13,0x13,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x07,0x08,0x3e,0x2f, 0x39,0x4f,0x43,0x50,0xa1,0xa9,0xc1,0x5b,0x67,0x8e,0x56,0x50,0x79,0x5b,0x66,0x8e, 0x5e,0x6b,0x92,0x5d,0x6a,0x91,0x5b,0x67,0x90,0x52,0x5d,0x88,0x64,0x4c,0x6a,0x4f, 0x5a,0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03, 0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x03,0x03,0x02,0x03,0x03,0x02, 0x03,0x03,0x03,0x03,0x04,0x03,0x03,0x04,0x04,0x04,0x05,0x04,0x04,0x05,0x04,0x04, 0x05,0x05,0x05,0x06,0x05,0x05,0x06,0x05,0x05,0x06,0x05,0x05,0x06,0x06,0x06,0x07, 0x06,0x06,0x07,0x06,0x06,0x07,0x06,0x06,0x07,0x06,0x06,0x07,0x06,0x06,0x07,0x12, 0x12,0x13,0x86,0x86,0x86,0x1d,0x1e,0x1f,0x06,0x06,0x07,0x06,0x06,0x07,0x1c,0x1d, 0x1e,0x93,0x93,0x94,0x05,0x06,0x06,0x66,0x66,0x67,0x50,0x50,0x51,0x04,0x05,0x05, 0x0f,0x0f,0x10,0x34,0x34,0x35,0x0b,0x0b,0x0c,0x03,0x03,0x04,0x02,0x03,0x03,0x1a, 0x1c,0x29,0x52,0x56,0x81,0x64,0x53,0x76,0x63,0x53,0x77,0x60,0x54,0x78,0x60,0x53, 0x77,0x60,0x54,0x78,0x60,0x54,0x78,0x5e,0x54,0x79,0x55,0x51,0x79,0x52,0x50,0x7b, 0x53,0x58,0x82,0x53,0x5d,0x87,0x53,0x5d,0x84,0x5b,0x67,0x8d,0x6a,0x76,0x99,0x56, 0x50,0x79,0x2f,0x21,0x35,0x25,0x19,0x27,0x2d,0x21,0x30,0x6a,0x56,0x6b,0x5f,0x4c, 0x5e,0x59,0x47,0x58,0x5a,0x48,0x59,0x55,0x44,0x54,0x4a,0x39,0x46,0xae,0xae,0xb9, 0xc0,0xc5,0xd2,0x93,0x9b,0xb3,0x62,0x6d,0x8d,0x4e,0x58,0x7d,0x47,0x50,0x76,0x44, 0x4e,0x73,0x43,0x4e,0x73,0x47,0x52,0x7a,0x4e,0x58,0x83,0x59,0x61,0x8f,0x5f,0x65, 0x94,0x60,0x67,0x95,0x62,0x66,0x93,0x55,0x58,0x81,0x66,0x67,0x97,0x47,0x47,0x5a, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0b, 0x08,0x0a,0x46,0x36,0x42,0x47,0x38,0x45,0x66,0x71,0x97,0x52,0x4f,0x7a,0x52,0x4f, 0x7a,0x6f,0x7c,0x9e,0x75,0x80,0xa1,0x79,0x83,0xa3,0x7d,0x88,0xa7,0x7f,0x8a,0xa9, 0x83,0x8f,0xac,0x89,0x93,0xb0,0x8c,0x97,0xb2,0x8f,0x98,0xb3,0x90,0x9a,0xb4,0x91, 0x9a,0xb6,0x91,0x9b,0xb6,0x8c,0x97,0xb2,0x8b,0x95,0xb2,0x89,0x93,0xb0,0x82,0x8d, 0xab,0x79,0x82,0xa3,0x55,0x62,0x8a,0x77,0x82,0xa3,0x52,0x53,0x56,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f, 0x0c,0x0e,0x3e,0x2f,0x39,0x5b,0x53,0x64,0x9b,0xa4,0xbc,0x5a,0x66,0x8e,0x5b,0x52, 0x79,0x56,0x63,0x8b,0x60,0x6d,0x94,0x5e,0x6b,0x92,0x5d,0x6a,0x91,0x52,0x53,0x7e, 0x64,0x53,0x75,0x2a,0x2f,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02, 0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x03,0x03,0x02,0x03,0x03, 0x03,0x03,0x04,0x03,0x03,0x04,0x04,0x04,0x05,0x04,0x04,0x05,0x04,0x04,0x05,0x04, 0x05,0x05,0x05,0x06,0x06,0x06,0x06,0x07,0x06,0x06,0x07,0x06,0x06,0x07,0x06,0x06, 0x07,0x06,0x06,0x07,0x06,0x06,0x07,0x06,0x06,0x07,0x06,0x07,0x08,0x06,0x06,0x07, 0x06,0x06,0x07,0x07,0x08,0x09,0x34,0x35,0x36,0x68,0x68,0x6a,0x66,0x66,0x68,0x63, 0x63,0x65,0x67,0x68,0x69,0x38,0x38,0x3a,0x06,0x06,0x07,0x06,0x06,0x07,0x78,0x79, 0x7a,0x05,0x05,0x06,0x54,0x54,0x55,0x7c,0x7c,0x7d,0x21,0x21,0x22,0x04,0x04,0x05, 0x03,0x03,0x04,0x1a,0x1d,0x29,0x53,0x57,0x80,0x64,0x53,0x76,0x62,0x53,0x77,0x61, 0x54,0x78,0x60,0x54,0x78,0x60,0x54,0x78,0x61,0x54,0x78,0x5e,0x54,0x79,0x54,0x51, 0x79,0x53,0x51,0x7b,0x53,0x59,0x84,0x53,0x5d,0x87,0x53,0x5d,0x85,0x57,0x63,0x8b, 0x71,0x7d,0x9f,0x53,0x50,0x7b,0x30,0x22,0x35,0x25,0x19,0x27,0x2a,0x1e,0x2b,0x69, 0x55,0x6a,0x5f,0x4c,0x5e,0x59,0x47,0x58,0x5a,0x48,0x59,0x54,0x43,0x52,0x47,0x37, 0x44,0xbe,0xbf,0xcb,0xbf,0xc3,0xd1,0x90,0x99,0xb1,0x5e,0x6b,0x8c,0x4c,0x58,0x7c, 0x45,0x50,0x75,0x44,0x4c,0x73,0x43,0x4d,0x73,0x47,0x52,0x7a,0x50,0x59,0x83,0x59, 0x62,0x8f,0x5f,0x66,0x95,0x62,0x67,0x95,0x60,0x64,0x92,0x54,0x57,0x7e,0x63,0x64, 0x92,0x45,0x44,0x58,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x46,0x36,0x42,0x46,0x36,0x42,0x61,0x68,0x88,0x52, 0x5c,0x85,0x60,0x53,0x77,0x6b,0x76,0x9a,0x73,0x7e,0xa0,0x77,0x82,0xa3,0x7b,0x85, 0xa6,0x7d,0x88,0xa8,0x82,0x8c,0xab,0x87,0x91,0xaf,0x8a,0x94,0xb1,0x8d,0x98,0xb3, 0x92,0x9b,0xb6,0x8f,0x98,0xb3,0x91,0x9a,0xb6,0x90,0x9a,0xb4,0x8d,0x98,0xb3,0x8b, 0x95,0xb2,0x84,0x8f,0xac,0x7f,0x8a,0xa9,0x5c,0x67,0x8f,0x57,0x64,0x8b,0x7c,0x7f, 0x8d,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x17,0x11,0x15,0x3f,0x30,0x3a,0x65,0x61,0x74,0x9b,0xa4,0xbc,0x58, 0x65,0x8d,0x5a,0x52,0x79,0x5a,0x65,0x8d,0x65,0x71,0x96,0x63,0x6f,0x95,0x5f,0x6c, 0x93,0x52,0x50,0x7c,0x57,0x50,0x79,0x0d,0x0f,0x15,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x03,0x03,0x03,0x04,0x03,0x03, 0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x04,0x04,0x05,0x04,0x04,0x05,0x05,0x05,0x06, 0x05,0x05,0x06,0x06,0x06,0x07,0x06,0x06,0x07,0x06,0x06,0x07,0x06,0x06,0x07,0x06, 0x06,0x07,0x06,0x07,0x08,0x07,0x07,0x09,0x07,0x07,0x09,0x07,0x07,0x09,0x07,0x07, 0x09,0x07,0x08,0x09,0x07,0x07,0x09,0x07,0x08,0x09,0x07,0x07,0x09,0x0f,0x10,0x12, 0x1f,0x1f,0x20,0x20,0x21,0x21,0x15,0x15,0x16,0x07,0x07,0x09,0x06,0x07,0x09,0x06, 0x07,0x09,0x78,0x79,0x7a,0x4a,0x4a,0x4b,0x5f,0x60,0x61,0x0d,0x0e,0x0e,0x05,0x05, 0x06,0x05,0x05,0x06,0x04,0x04,0x05,0x1b,0x1c,0x28,0x53,0x5b,0x83,0x63,0x53,0x75, 0x62,0x53,0x77,0x60,0x53,0x77,0x61,0x54,0x78,0x60,0x54,0x78,0x61,0x54,0x78,0x5f, 0x54,0x7a,0x57,0x51,0x79,0x53,0x50,0x7b,0x53,0x5b,0x83,0x53,0x5e,0x88,0x53,0x5d, 0x85,0x55,0x60,0x89,0x6b,0x77,0x98,0x53,0x54,0x7c,0x33,0x25,0x38,0x24,0x19,0x26, 0x30,0x24,0x31,0x68,0x54,0x69,0x60,0x4d,0x60,0x59,0x47,0x58,0x5a,0x48,0x59,0x54, 0x43,0x52,0x47,0x37,0x43,0xc4,0xc6,0xd1,0xbf,0xc3,0xd1,0x8b,0x94,0xac,0x5c,0x66, 0x89,0x4c,0x58,0x7c,0x46,0x51,0x75,0x43,0x4d,0x71,0x43,0x4d,0x72,0x48,0x52,0x7a, 0x50,0x5a,0x84,0x59,0x62,0x8f,0x5f,0x66,0x95,0x63,0x67,0x95,0x60,0x63,0x90,0x53, 0x56,0x7d,0x65,0x65,0x92,0x3d,0x3e,0x4e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x33,0x3f,0x48,0x37,0x44, 0x5d,0x5f,0x79,0x5f,0x6c,0x92,0x63,0x53,0x77,0x62,0x6e,0x93,0x72,0x7e,0xa0,0x75, 0x80,0xa2,0x7c,0x85,0xa6,0x7c,0x87,0xa7,0x83,0x8d,0xab,0x83,0x8f,0xac,0x88,0x92, 0xaf,0x8c,0x97,0xb2,0x8c,0x97,0xb2,0x91,0x99,0xb5,0x91,0x99,0xb5,0x91,0x99,0xb5, 0x8d,0x96,0xb2,0x89,0x93,0xb0,0x89,0x93,0xb0,0x82,0x8c,0xaa,0x6b,0x77,0x9a,0x53, 0x58,0x82,0x7c,0x86,0xa4,0x0b,0x0b,0x0b,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1e,0x17,0x1c,0x3d,0x2e,0x39,0x6d,0x6d,0x83, 0x98,0xa1,0xba,0x57,0x64,0x8c,0x58,0x50,0x79,0x5b,0x67,0x8e,0x66,0x73,0x98,0x63, 0x6e,0x95,0x62,0x6e,0x94,0x5e,0x52,0x79,0x52,0x4f,0x7a,0x02,0x02,0x03,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x03,0x03,0x04,0x03, 0x03,0x04,0x03,0x04,0x05,0x03,0x04,0x05,0x04,0x04,0x05,0x04,0x04,0x05,0x04,0x05, 0x06,0x06,0x06,0x07,0x06,0x06,0x07,0x06,0x06,0x07,0x06,0x06,0x07,0x06,0x07,0x08, 0x07,0x07,0x09,0x07,0x07,0x09,0x07,0x07,0x09,0x07,0x08,0x09,0x08,0x08,0x0a,0x08, 0x08,0x0a,0x08,0x08,0x0a,0x09,0x09,0x0a,0x08,0x09,0x0a,0x08,0x09,0x0a,0x08,0x09, 0x0a,0x09,0x09,0x0a,0x08,0x09,0x0a,0x08,0x09,0x0a,0x08,0x08,0x0a,0x08,0x08,0x0a, 0x08,0x08,0x0a,0x07,0x08,0x09,0x72,0x73,0x74,0x6a,0x6b,0x6c,0x15,0x15,0x16,0x06, 0x06,0x07,0x06,0x06,0x06,0x05,0x06,0x06,0x05,0x05,0x06,0x1a,0x19,0x22,0x52,0x54, 0x7e,0x63,0x54,0x76,0x62,0x54,0x76,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77, 0x61,0x54,0x78,0x5f,0x54,0x7a,0x58,0x51,0x7a,0x53,0x50,0x7b,0x53,0x58,0x82,0x54, 0x5f,0x88,0x53,0x5e,0x86,0x54,0x5e,0x87,0x63,0x6c,0x8e,0x37,0x36,0x4a,0x37,0x29, 0x3d,0x25,0x1a,0x28,0x36,0x28,0x35,0x68,0x55,0x69,0x5e,0x4c,0x5e,0x58,0x46,0x57, 0x5a,0x48,0x59,0x54,0x42,0x51,0x47,0x37,0x43,0xc3,0xc5,0xd0,0xbf,0xc3,0xd1,0x85, 0x90,0xab,0x5b,0x65,0x88,0x4b,0x56,0x7a,0x47,0x53,0x76,0x43,0x4d,0x71,0x43,0x4c, 0x6f,0x48,0x51,0x79,0x50,0x5a,0x84,0x59,0x62,0x8f,0x5f,0x66,0x95,0x63,0x67,0x95, 0x5f,0x62,0x8f,0x53,0x55,0x7c,0x66,0x66,0x93,0x3a,0x3b,0x4c,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x1b, 0x21,0x51,0x3f,0x4e,0x56,0x52,0x6a,0x6c,0x79,0x9b,0x5a,0x52,0x79,0x58,0x65,0x8c, 0x6f,0x7b,0x9e,0x75,0x80,0xa1,0x79,0x83,0xa3,0x7e,0x88,0xa8,0x80,0x8a,0xaa,0x85, 0x90,0xae,0x87,0x91,0xaf,0x8b,0x93,0xb1,0x8f,0x97,0xb2,0x8b,0x93,0xb1,0x8f,0x97, 0xb2,0x8f,0x97,0xb2,0x8c,0x96,0xb1,0x8c,0x96,0xb1,0x8a,0x93,0xb0,0x87,0x90,0xae, 0x79,0x82,0xa3,0x53,0x5e,0x88,0x63,0x6e,0x94,0x48,0x49,0x4d,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x02, 0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2a,0x20,0x26,0x3c,0x2e, 0x38,0x75,0x78,0x90,0x93,0x9c,0xb7,0x5e,0x6b,0x92,0x5e,0x53,0x79,0x5e,0x6b,0x92, 0x66,0x72,0x98,0x65,0x72,0x96,0x63,0x6e,0x95,0x64,0x53,0x76,0x52,0x5a,0x84,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04, 0x03,0x04,0x05,0x04,0x04,0x05,0x04,0x04,0x05,0x04,0x05,0x06,0x05,0x05,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x07,0x06,0x06,0x08,0x06,0x07,0x09,0x06,0x07, 0x09,0x07,0x07,0x09,0x07,0x08,0x09,0x07,0x08,0x09,0x08,0x08,0x0a,0x09,0x09,0x0a, 0x09,0x09,0x0a,0x09,0x09,0x0a,0x09,0x0a,0x0b,0x09,0x0a,0x0b,0x09,0x0a,0x0b,0x0a, 0x0a,0x0c,0x0a,0x0a,0x0c,0x09,0x0a,0x0b,0x0a,0x0a,0x0c,0x09,0x0a,0x0b,0x09,0x09, 0x0a,0x08,0x09,0x0a,0x08,0x09,0x0a,0x08,0x08,0x0a,0x08,0x09,0x0a,0x08,0x08,0x0a, 0x08,0x08,0x0a,0x07,0x08,0x09,0x06,0x06,0x07,0x06,0x06,0x07,0x06,0x06,0x06,0x19, 0x17,0x20,0x52,0x54,0x7f,0x63,0x53,0x76,0x61,0x54,0x76,0x5f,0x53,0x76,0x60,0x53, 0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x5e,0x53,0x79,0x57,0x50,0x79,0x52,0x4f,0x7a, 0x52,0x57,0x82,0x53,0x5e,0x88,0x52,0x5d,0x86,0x52,0x5d,0x86,0x65,0x6f,0x93,0x02, 0x02,0x02,0x34,0x28,0x39,0x24,0x19,0x27,0x33,0x25,0x33,0x6a,0x56,0x6b,0x60,0x4d, 0x60,0x59,0x47,0x58,0x5a,0x48,0x59,0x52,0x40,0x4f,0x4e,0x3f,0x4a,0xcf,0xd3,0xde, 0xbd,0xc3,0xd0,0x83,0x8c,0xa8,0x56,0x62,0x84,0x4b,0x55,0x7b,0x46,0x4f,0x75,0x43, 0x4e,0x73,0x41,0x4a,0x6e,0x45,0x4f,0x74,0x4f,0x59,0x83,0x59,0x62,0x8f,0x60,0x67, 0x95,0x63,0x67,0x95,0x60,0x63,0x8e,0x56,0x57,0x7d,0x69,0x67,0x97,0x3c,0x3c,0x4d, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x06,0x05,0x07,0x57,0x44,0x55,0x51,0x48,0x5c,0x71,0x7c,0x9f,0x52,0x4f, 0x7b,0x52,0x5b,0x84,0x6f,0x7b,0x9e,0x73,0x7e,0xa0,0x75,0x80,0xa2,0x7c,0x85,0xa7, 0x7f,0x89,0xa9,0x83,0x8d,0xac,0x85,0x90,0xae,0x89,0x92,0xaf,0x8c,0x96,0xb1,0x8f, 0x97,0xb2,0x8f,0x97,0xb2,0x8f,0x98,0xb3,0x91,0x99,0xb5,0x8c,0x96,0xb1,0x88,0x91, 0xae,0x85,0x8f,0xad,0x7c,0x88,0xa8,0x5b,0x66,0x8f,0x52,0x59,0x82,0x6b,0x6f,0x7e, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x02,0x03,0x03,0x02,0x03,0x03, 0x03,0x04,0x03,0x03,0x04,0x03,0x02,0x03,0x03,0x02,0x03,0x03,0x02,0x03,0x03,0x02, 0x03,0x03,0x02,0x03,0x03,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x37, 0x29,0x32,0x3d,0x2e,0x39,0x7b,0x82,0x9c,0x92,0x9c,0xb7,0x60,0x6d,0x93,0x5d,0x52, 0x79,0x64,0x6f,0x95,0x65,0x72,0x98,0x66,0x72,0x98,0x5d,0x6a,0x91,0x64,0x52,0x72, 0x4d,0x57,0x7e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x03,0x02, 0x03,0x03,0x02,0x02,0x03,0x02,0x03,0x04,0x02,0x03,0x04,0x03,0x03,0x04,0x04,0x04, 0x05,0x04,0x04,0x05,0x04,0x05,0x06,0x04,0x05,0x06,0x05,0x05,0x06,0x06,0x06,0x07, 0x06,0x06,0x07,0x06,0x06,0x08,0x07,0x07,0x09,0x07,0x07,0x09,0x07,0x07,0x09,0x07, 0x08,0x0a,0x08,0x09,0x0a,0x07,0x08,0x0a,0x08,0x09,0x0a,0x08,0x09,0x0a,0x09,0x0a, 0x0b,0x09,0x0a,0x0b,0x0a,0x0a,0x0c,0x0a,0x0a,0x0c,0x0a,0x0a,0x0c,0x0a,0x0a,0x0c, 0x0a,0x0a,0x0d,0x0a,0x0a,0x0d,0x0a,0x0b,0x0d,0x0a,0x0b,0x0d,0x0a,0x0a,0x0d,0x0a, 0x0a,0x0d,0x0a,0x0a,0x0d,0x09,0x0a,0x0b,0x09,0x0a,0x0b,0x09,0x0a,0x0b,0x09,0x0a, 0x0b,0x08,0x09,0x0a,0x08,0x08,0x0a,0x07,0x08,0x09,0x06,0x07,0x09,0x06,0x06,0x08, 0x06,0x06,0x08,0x1a,0x18,0x21,0x52,0x57,0x80,0x63,0x53,0x75,0x61,0x54,0x76,0x5f, 0x54,0x76,0x5f,0x53,0x76,0x60,0x53,0x77,0x60,0x53,0x77,0x5e,0x53,0x79,0x57,0x50, 0x79,0x52,0x4f,0x7a,0x52,0x55,0x81,0x53,0x5e,0x88,0x53,0x5e,0x89,0x52,0x5b,0x84, 0x75,0x80,0xa1,0x02,0x02,0x02,0x04,0x04,0x04,0x26,0x1c,0x28,0x2f,0x21,0x2f,0x6d, 0x59,0x6f,0x5e,0x4c,0x5e,0x58,0x46,0x57,0x5a,0x48,0x59,0x53,0x41,0x50,0x55,0x46, 0x53,0xd1,0xd5,0xdf,0xbe,0xc3,0xd2,0x82,0x8b,0xa7,0x56,0x60,0x83,0x49,0x56,0x7b, 0x45,0x50,0x75,0x44,0x4e,0x72,0x41,0x4b,0x6e,0x43,0x4e,0x74,0x4d,0x57,0x83,0x59, 0x61,0x8e,0x5e,0x66,0x95,0x62,0x66,0x95,0x60,0x63,0x8f,0x57,0x59,0x7c,0x6e,0x6c, 0x97,0x3c,0x3d,0x4c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x2c,0x2e,0x31,0x98,0x9a,0xa0,0xc8,0xc8,0xca,0xdd,0xdd,0xdd,0x0b,0x0b,0x0b, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x42,0x52,0x4c,0x3d,0x4d,0x75, 0x80,0xa2,0x55,0x60,0x89,0x53,0x4f,0x7a,0x6f,0x7b,0x9e,0x72,0x7e,0xa0,0x75,0x80, 0xa1,0x79,0x82,0xa3,0x7e,0x88,0xa7,0x7f,0x89,0xa9,0x83,0x8e,0xab,0x88,0x91,0xae, 0x8b,0x93,0xb0,0x8c,0x94,0xb1,0x90,0x99,0xb5,0x8e,0x97,0xb2,0x8c,0x96,0xb2,0x8c, 0x97,0xb2,0x89,0x93,0xb0,0x83,0x8e,0xab,0x81,0x8b,0xaa,0x69,0x74,0x98,0x52,0x54, 0x7f,0x7a,0x83,0xa2,0x0a,0x0b,0x0b,0x02,0x02,0x03,0x03,0x03,0x04,0x03,0x03,0x04, 0x03,0x03,0x04,0x03,0x03,0x04,0x04,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x03, 0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x02,0x02, 0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x3e,0x2f,0x39,0x3c,0x2e,0x38,0x7f,0x88,0xa6,0x8e,0x99,0xb4,0x5d, 0x6a,0x91,0x5d,0x52,0x79,0x64,0x71,0x96,0x67,0x73,0x98,0x65,0x72,0x96,0x54,0x5f, 0x89,0x64,0x50,0x6f,0x38,0x3f,0x58,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x03,0x03, 0x02,0x03,0x03,0x02,0x03,0x03,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x04,0x05,0x03, 0x04,0x05,0x04,0x04,0x05,0x04,0x05,0x06,0x04,0x05,0x06,0x05,0x06,0x06,0x06,0x06, 0x07,0x06,0x06,0x07,0x06,0x06,0x08,0x07,0x07,0x09,0x07,0x07,0x09,0x07,0x08,0x0a, 0x08,0x08,0x0a,0x09,0x09,0x0b,0x09,0x0a,0x0b,0x09,0x0a,0x0b,0x0a,0x0a,0x0c,0x0a, 0x0a,0x0c,0x0a,0x0a,0x0c,0x0a,0x0b,0x0d,0x0a,0x0a,0x0d,0x0a,0x0b,0x0d,0x0a,0x0b, 0x0d,0x0b,0x0b,0x0e,0x0b,0x0c,0x0e,0x0b,0x0c,0x0e,0x0c,0x0d,0x0e,0x0b,0x0c,0x0e, 0x0b,0x0c,0x0e,0x0a,0x0b,0x0d,0x0b,0x0b,0x0e,0x0a,0x0b,0x0d,0x0a,0x0a,0x0d,0x0a, 0x0a,0x0c,0x09,0x0a,0x0b,0x09,0x0a,0x0b,0x09,0x0a,0x0b,0x09,0x09,0x0a,0x07,0x08, 0x09,0x07,0x08,0x09,0x06,0x07,0x09,0x1b,0x18,0x21,0x52,0x5c,0x84,0x62,0x54,0x76, 0x62,0x53,0x77,0x5f,0x54,0x76,0x5f,0x54,0x76,0x5f,0x53,0x76,0x60,0x53,0x77,0x5e, 0x53,0x79,0x58,0x50,0x79,0x52,0x4f,0x7a,0x52,0x55,0x80,0x52,0x5c,0x85,0x53,0x5e, 0x88,0x52,0x57,0x81,0x83,0x8d,0xab,0x0b,0x0c,0x0e,0x02,0x02,0x02,0x12,0x0e,0x11, 0x2c,0x1f,0x2c,0x6d,0x59,0x6f,0x5b,0x48,0x5a,0x5a,0x47,0x58,0x5a,0x47,0x58,0x51, 0x40,0x4e,0x5b,0x4d,0x59,0xd1,0xd5,0xe0,0xbe,0xc2,0xd1,0x7e,0x88,0xa4,0x55,0x60, 0x84,0x49,0x54,0x79,0x46,0x50,0x75,0x44,0x4d,0x72,0x40,0x4b,0x6d,0x42,0x4e,0x72, 0x4d,0x58,0x81,0x57,0x60,0x8e,0x5e,0x67,0x95,0x62,0x67,0x95,0x60,0x62,0x8f,0x57, 0x5a,0x7e,0x6f,0x6e,0x98,0x44,0x43,0x55,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x49, 0x4a,0x4f,0x89,0x90,0xaa,0x73,0x7d,0x9c,0xb9,0xbc,0xc6,0xd3,0xd5,0xda,0xff,0xff, 0xff,0xe8,0xe8,0xe8,0x15,0x15,0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1e,0x18,0x1e, 0x4e,0x3c,0x4a,0x6e,0x75,0x94,0x5a,0x66,0x8d,0x63,0x53,0x77,0x6a,0x75,0x99,0x71, 0x7c,0x9e,0x75,0x80,0xa2,0x77,0x82,0xa3,0x7c,0x85,0xa7,0x7d,0x88,0xa8,0x82,0x8b, 0xaa,0x87,0x90,0xae,0x89,0x93,0xb0,0x8a,0x93,0xb0,0x8b,0x96,0xb1,0x8c,0x97,0xb2, 0x8e,0x97,0xb2,0x8c,0x96,0xb2,0x8a,0x94,0xb1,0x87,0x91,0xae,0x83,0x8e,0xac,0x73, 0x7f,0xa0,0x52,0x5c,0x84,0x64,0x70,0x96,0x40,0x40,0x44,0x03,0x03,0x04,0x03,0x03, 0x04,0x04,0x03,0x04,0x04,0x04,0x05,0x04,0x04,0x05,0x04,0x04,0x05,0x04,0x04,0x05, 0x05,0x04,0x05,0x04,0x04,0x05,0x04,0x04,0x05,0x04,0x04,0x05,0x04,0x03,0x04,0x03, 0x03,0x04,0x03,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3e,0x2f,0x39,0x3e,0x2f,0x39,0x7d,0x88,0xa8, 0x8e,0x99,0xb4,0x5b,0x67,0x90,0x5d,0x52,0x79,0x66,0x72,0x98,0x69,0x74,0x99,0x65, 0x72,0x96,0x52,0x56,0x81,0x5c,0x52,0x79,0x22,0x26,0x37,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02, 0x03,0x02,0x03,0x03,0x02,0x03,0x03,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x04,0x05, 0x04,0x04,0x05,0x04,0x05,0x06,0x04,0x05,0x06,0x05,0x05,0x06,0x06,0x06,0x07,0x06, 0x06,0x07,0x06,0x06,0x08,0x06,0x07,0x09,0x07,0x07,0x09,0x07,0x08,0x0a,0x07,0x08, 0x0a,0x08,0x09,0x0a,0x09,0x0a,0x0b,0x09,0x0a,0x0b,0x09,0x0a,0x0b,0x0a,0x0a,0x0c, 0x0a,0x0a,0x0d,0x0a,0x0b,0x0e,0x0b,0x0c,0x0e,0x0a,0x0b,0x0e,0x0b,0x0c,0x0e,0x0b, 0x0c,0x0e,0x0b,0x0c,0x0e,0x0b,0x0c,0x0e,0x0b,0x0c,0x0e,0x0c,0x0d,0x0e,0x0c,0x0d, 0x0f,0x0c,0x0d,0x0f,0x0c,0x0d,0x0f,0x0c,0x0d,0x0e,0x0c,0x0d,0x0f,0x0b,0x0c,0x0e, 0x0b,0x0b,0x0e,0x0b,0x0b,0x0e,0x0a,0x0a,0x0d,0x0a,0x0a,0x0c,0x0a,0x0a,0x0c,0x09, 0x0a,0x0b,0x09,0x09,0x0a,0x08,0x09,0x0a,0x08,0x08,0x0a,0x1c,0x19,0x22,0x52,0x5d, 0x84,0x5f,0x54,0x77,0x62,0x53,0x76,0x5f,0x53,0x76,0x5f,0x54,0x76,0x5f,0x54,0x76, 0x5f,0x54,0x76,0x5e,0x53,0x79,0x5a,0x52,0x79,0x52,0x4f,0x7a,0x52,0x55,0x7f,0x52, 0x5d,0x87,0x53,0x5e,0x88,0x52,0x5c,0x84,0x87,0x91,0xae,0x1d,0x1c,0x21,0x02,0x02, 0x02,0x02,0x02,0x02,0x27,0x1d,0x27,0x6c,0x57,0x6d,0x5a,0x48,0x5a,0x58,0x46,0x56, 0x59,0x46,0x57,0x4e,0x3e,0x4b,0x60,0x51,0x5f,0xd0,0xd4,0xde,0xbd,0xc0,0xcf,0x7d, 0x88,0xa4,0x55,0x5f,0x83,0x49,0x55,0x7a,0x46,0x4f,0x75,0x44,0x4d,0x70,0x41,0x4c, 0x6e,0x41,0x4d,0x71,0x4a,0x55,0x7f,0x57,0x60,0x8d,0x5f,0x67,0x94,0x61,0x67,0x96, 0x60,0x62,0x8f,0x57,0x58,0x7e,0x6f,0x70,0x99,0x42,0x42,0x53,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0d,0x0d,0x0d, 0x88,0x8e,0xa1,0x60,0x6d,0x91,0x52,0x5d,0x80,0x7c,0x86,0xa1,0xda,0xdc,0xe5,0xe7, 0xe9,0xef,0xfa,0xfa,0xfc,0xfc,0xfc,0xfd,0xf0,0xf1,0xf1,0x1e,0x1e,0x1e,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x07,0x05,0x06,0x50,0x3e,0x4d,0x63,0x66,0x81,0x65,0x71,0x95,0x62,0x53,0x77, 0x63,0x6f,0x94,0x6f,0x7b,0x9e,0x74,0x7f,0xa1,0x76,0x82,0xa3,0x7c,0x86,0xa6,0x7c, 0x87,0xa7,0x80,0x8a,0xa9,0x84,0x8f,0xad,0x88,0x92,0xaf,0x88,0x92,0xae,0x8c,0x97, 0xb1,0x8c,0x97,0xb1,0x8c,0x97,0xb1,0x8e,0x98,0xb2,0x89,0x93,0xaf,0x89,0x93,0xaf, 0x84,0x8f,0xac,0x7c,0x88,0xa6,0x57,0x61,0x8a,0x54,0x5e,0x87,0x70,0x75,0x81,0x04, 0x04,0x05,0x04,0x04,0x05,0x05,0x04,0x05,0x05,0x04,0x06,0x05,0x04,0x06,0x05,0x04, 0x06,0x05,0x04,0x06,0x05,0x04,0x06,0x05,0x04,0x06,0x05,0x04,0x06,0x05,0x04,0x05, 0x04,0x04,0x05,0x04,0x03,0x04,0x03,0x03,0x04,0x03,0x02,0x03,0x02,0x02,0x03,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3e,0x2f,0x39,0x3c,0x2e, 0x39,0x75,0x80,0xa1,0x8f,0x98,0xb3,0x5c,0x67,0x8f,0x56,0x50,0x79,0x66,0x73,0x97, 0x66,0x72,0x97,0x69,0x74,0x98,0x52,0x4f,0x7b,0x52,0x50,0x7b,0x12,0x14,0x1b,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x03,0x02, 0x02,0x03,0x02,0x03,0x03,0x03,0x03,0x04,0x03,0x03,0x05,0x04,0x04,0x05,0x04,0x04, 0x05,0x04,0x05,0x06,0x04,0x05,0x06,0x05,0x05,0x06,0x05,0x06,0x07,0x05,0x06,0x07, 0x06,0x06,0x07,0x06,0x06,0x08,0x06,0x07,0x09,0x07,0x07,0x09,0x07,0x08,0x0a,0x08, 0x09,0x0a,0x09,0x09,0x0b,0x09,0x0a,0x0b,0x09,0x0a,0x0b,0x0a,0x0a,0x0c,0x0a,0x0b, 0x0e,0x0a,0x0b,0x0e,0x0b,0x0c,0x0e,0x0b,0x0c,0x0e,0x0c,0x0d,0x0f,0x0c,0x0d,0x10, 0x0c,0x0d,0x10,0x0d,0x0e,0x10,0x0d,0x0e,0x10,0x0d,0x0e,0x10,0x0d,0x0e,0x10,0x0e, 0x0e,0x11,0x0e,0x0e,0x11,0x0d,0x0e,0x11,0x0e,0x0e,0x11,0x0d,0x0e,0x11,0x0e,0x0e, 0x11,0x0d,0x0e,0x10,0x0c,0x0d,0x0f,0x0c,0x0d,0x0f,0x0b,0x0c,0x0e,0x0b,0x0b,0x0e, 0x0a,0x0b,0x0d,0x0a,0x0a,0x0c,0x09,0x0a,0x0b,0x09,0x09,0x0a,0x08,0x09,0x0a,0x17, 0x16,0x1c,0x53,0x5d,0x86,0x5c,0x53,0x78,0x61,0x54,0x76,0x60,0x53,0x76,0x5f,0x53, 0x77,0x5f,0x54,0x76,0x5f,0x54,0x76,0x5e,0x53,0x78,0x57,0x51,0x78,0x52,0x4f,0x79, 0x52,0x55,0x7d,0x52,0x5d,0x87,0x53,0x5e,0x88,0x52,0x5d,0x87,0x94,0x9e,0xb7,0x31, 0x30,0x36,0x02,0x02,0x02,0x02,0x03,0x03,0x1c,0x17,0x1c,0x67,0x52,0x67,0x58,0x47, 0x57,0x58,0x46,0x57,0x57,0x44,0x55,0x4e,0x3e,0x4c,0x67,0x59,0x68,0xd1,0xd5,0xdf, 0xba,0xbe,0xce,0x7a,0x84,0xa2,0x52,0x5d,0x82,0x4b,0x56,0x7a,0x47,0x50,0x75,0x42, 0x4e,0x72,0x41,0x4b,0x6f,0x40,0x4c,0x70,0x4b,0x55,0x7f,0x56,0x5f,0x8d,0x5e,0x67, 0x94,0x63,0x68,0x96,0x5e,0x61,0x8e,0x54,0x56,0x7d,0x6e,0x6e,0x97,0x40,0x40,0x51, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3a,0x3a, 0x3a,0x85,0x8e,0xa9,0x4e,0x59,0x7d,0x4c,0x56,0x7c,0x5b,0x68,0x8e,0xba,0xc1,0xd2, 0xde,0xe1,0xe9,0xef,0xf0,0xf5,0xf0,0xf1,0xf5,0xee,0xf0,0xf4,0xe1,0xe3,0xeb,0xe5, 0xe7,0xec,0x2e,0x2e,0x2e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x59,0x46,0x58,0x5d,0x5a,0x74,0x6c,0x77, 0x9b,0x5b,0x52,0x79,0x58,0x64,0x8c,0x6e,0x7a,0x9c,0x71,0x7c,0x9f,0x74,0x80,0xa2, 0x79,0x83,0xa3,0x7a,0x84,0xa5,0x7e,0x89,0xa8,0x82,0x8e,0xaa,0x84,0x8f,0xac,0x87, 0x91,0xad,0x8a,0x92,0xaf,0x8c,0x97,0xb1,0x90,0x99,0xb4,0x8e,0x96,0xb1,0x8a,0x94, 0xb0,0x8a,0x92,0xaf,0x84,0x8f,0xac,0x81,0x8a,0xa9,0x65,0x71,0x96,0x51,0x4f,0x7b, 0x83,0x8b,0xa3,0x07,0x07,0x08,0x05,0x04,0x05,0x05,0x04,0x06,0x06,0x05,0x06,0x06, 0x05,0x06,0x06,0x05,0x06,0x06,0x05,0x06,0x06,0x05,0x06,0x06,0x05,0x06,0x06,0x05, 0x06,0x06,0x05,0x06,0x05,0x04,0x05,0x04,0x04,0x05,0x04,0x03,0x04,0x04,0x03,0x04, 0x03,0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3c, 0x2e,0x39,0x3f,0x30,0x3a,0x6e,0x7b,0x9c,0x91,0x9b,0xb6,0x55,0x60,0x89,0x52,0x4f, 0x7b,0x67,0x73,0x98,0x6a,0x76,0x99,0x65,0x72,0x97,0x5c,0x52,0x79,0x52,0x57,0x81, 0x07,0x07,0x0a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02, 0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x03, 0x02,0x03,0x03,0x02,0x03,0x04,0x03,0x03,0x05,0x03,0x03,0x05,0x04,0x04,0x05,0x04, 0x04,0x05,0x04,0x04,0x05,0x04,0x05,0x06,0x05,0x06,0x06,0x05,0x06,0x06,0x06,0x06, 0x07,0x06,0x06,0x08,0x06,0x07,0x09,0x06,0x07,0x09,0x06,0x07,0x09,0x08,0x09,0x0a, 0x08,0x09,0x0a,0x09,0x09,0x0b,0x09,0x0a,0x0b,0x0a,0x0a,0x0c,0x0a,0x0b,0x0d,0x0a, 0x0b,0x0e,0x0b,0x0c,0x0f,0x0b,0x0c,0x0e,0x0c,0x0d,0x0f,0x0c,0x0d,0x0f,0x0d,0x0e, 0x10,0x0d,0x0e,0x11,0x0e,0x0e,0x12,0x0e,0x0f,0x12,0x0e,0x10,0x12,0x0e,0x0e,0x12, 0x0e,0x0e,0x12,0x0e,0x0f,0x12,0x0e,0x0f,0x12,0x0e,0x0f,0x12,0x0e,0x0f,0x12,0x0e, 0x0f,0x12,0x0e,0x0f,0x12,0x0e,0x0f,0x12,0x0e,0x0e,0x11,0x0d,0x0e,0x11,0x0c,0x0d, 0x0f,0x0c,0x0d,0x0f,0x0c,0x0d,0x0e,0x0b,0x0b,0x0e,0x0a,0x0a,0x0d,0x0a,0x0a,0x0c, 0x09,0x0a,0x0b,0x17,0x16,0x1d,0x53,0x5d,0x86,0x5c,0x53,0x78,0x62,0x54,0x77,0x5f, 0x53,0x76,0x5f,0x53,0x77,0x5f,0x53,0x77,0x5f,0x54,0x76,0x5e,0x54,0x78,0x5b,0x53, 0x78,0x52,0x50,0x79,0x53,0x54,0x7e,0x53,0x5e,0x85,0x53,0x5e,0x88,0x55,0x61,0x89, 0x99,0xa2,0xba,0x47,0x45,0x4b,0x02,0x02,0x02,0x03,0x03,0x04,0x12,0x0f,0x13,0x66, 0x52,0x66,0x58,0x47,0x57,0x57,0x45,0x56,0x55,0x43,0x53,0x4e,0x3d,0x4c,0x6b,0x5d, 0x6b,0xd1,0xd5,0xdf,0xb9,0xbf,0xce,0x7a,0x83,0xa1,0x52,0x5d,0x83,0x47,0x53,0x79, 0x45,0x4f,0x74,0x42,0x4e,0x72,0x41,0x49,0x6f,0x40,0x4c,0x70,0x48,0x52,0x7b,0x54, 0x5e,0x8a,0x5d,0x65,0x94,0x62,0x68,0x97,0x5d,0x60,0x8b,0x53,0x56,0x7c,0x6a,0x6c, 0x96,0x3e,0x3e,0x4e,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48, 0x48,0x4a,0x7b,0x85,0xa4,0x4a,0x54,0x79,0x4d,0x55,0x7d,0x58,0x64,0x8d,0x62,0x6e, 0x94,0xd1,0xd5,0xe0,0xe7,0xe9,0xef,0xee,0xef,0xf4,0xea,0xed,0xf1,0xe1,0xe3,0xeb, 0xc7,0xcc,0xda,0xca,0xcf,0xdd,0xeb,0xed,0xf3,0x41,0x41,0x41,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x2a,0x34,0x5c, 0x53,0x6a,0x6f,0x7b,0x9e,0x52,0x4f,0x7a,0x52,0x5d,0x85,0x6a,0x76,0x9a,0x70,0x7b, 0x9e,0x73,0x7e,0xa0,0x76,0x81,0xa2,0x78,0x83,0xa2,0x7e,0x88,0xa7,0x80,0x8a,0xa8, 0x82,0x8c,0xaa,0x88,0x91,0xae,0x88,0x91,0xaf,0x89,0x91,0xae,0x8f,0x97,0xb2,0x8f, 0x97,0xb2,0x8b,0x94,0xaf,0x89,0x90,0xad,0x85,0x8e,0xac,0x81,0x8a,0xa8,0x70,0x7a, 0x9c,0x52,0x51,0x7b,0x6c,0x77,0x99,0x3e,0x3e,0x43,0x05,0x05,0x06,0x06,0x05,0x06, 0x06,0x05,0x06,0x06,0x05,0x06,0x06,0x06,0x07,0x06,0x06,0x07,0x06,0x06,0x07,0x06, 0x05,0x06,0x06,0x05,0x06,0x06,0x05,0x06,0x05,0x04,0x05,0x05,0x04,0x05,0x05,0x04, 0x05,0x04,0x03,0x04,0x03,0x03,0x04,0x03,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x3e,0x2f,0x3a,0x3e,0x2f,0x39,0x6c,0x79,0x9b,0x91,0x9b,0xb6,0x52, 0x57,0x82,0x52,0x4f,0x7b,0x69,0x74,0x98,0x69,0x75,0x99,0x65,0x71,0x95,0x64,0x53, 0x75,0x55,0x62,0x89,0x02,0x02,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x03,0x02, 0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x03,0x03, 0x04,0x03,0x03,0x05,0x02,0x03,0x04,0x02,0x03,0x04,0x03,0x03,0x05,0x03,0x03,0x05, 0x04,0x04,0x05,0x04,0x05,0x06,0x05,0x05,0x06,0x05,0x05,0x06,0x06,0x06,0x08,0x06, 0x06,0x08,0x06,0x06,0x08,0x06,0x07,0x09,0x07,0x08,0x0a,0x07,0x08,0x0a,0x08,0x09, 0x0a,0x09,0x0a,0x0b,0x09,0x0a,0x0c,0x09,0x0a,0x0c,0x0a,0x0a,0x0d,0x0a,0x0b,0x0e, 0x0a,0x0b,0x0e,0x0b,0x0c,0x0f,0x0c,0x0d,0x0f,0x0d,0x0e,0x10,0x0d,0x0e,0x11,0x0e, 0x0e,0x12,0x0e,0x0e,0x12,0x0e,0x0f,0x12,0x0e,0x0f,0x12,0x0f,0x11,0x14,0x10,0x11, 0x14,0x0f,0x11,0x13,0x10,0x11,0x14,0x0f,0x11,0x13,0x10,0x11,0x14,0x0f,0x10,0x12, 0x0f,0x11,0x13,0x0f,0x10,0x12,0x10,0x11,0x14,0x0f,0x10,0x13,0x0e,0x0f,0x12,0x0e, 0x0f,0x12,0x0e,0x0e,0x11,0x0d,0x0e,0x11,0x0e,0x0e,0x11,0x0d,0x0e,0x10,0x0c,0x0d, 0x0e,0x0b,0x0c,0x0e,0x0a,0x0a,0x0c,0x16,0x15,0x1d,0x54,0x5f,0x87,0x55,0x51,0x78, 0x61,0x53,0x76,0x5f,0x54,0x76,0x60,0x54,0x76,0x5f,0x53,0x77,0x5f,0x53,0x77,0x5e, 0x54,0x79,0x5d,0x53,0x79,0x52,0x50,0x79,0x53,0x54,0x7d,0x52,0x5d,0x85,0x53,0x5f, 0x88,0x57,0x62,0x8a,0x98,0xa1,0xba,0x5b,0x58,0x5d,0x03,0x03,0x04,0x03,0x03,0x04, 0x06,0x05,0x07,0x65,0x52,0x65,0x57,0x45,0x55,0x58,0x46,0x57,0x54,0x43,0x52,0x4e, 0x3c,0x4b,0x6b,0x5c,0x6b,0xd1,0xd4,0xde,0xb7,0xbd,0xcd,0x76,0x80,0xa0,0x50,0x5d, 0x82,0x47,0x54,0x79,0x44,0x4e,0x73,0x41,0x4d,0x6f,0x41,0x4c,0x6d,0x3f,0x4b,0x6e, 0x46,0x52,0x78,0x53,0x5c,0x87,0x5c,0x66,0x94,0x61,0x68,0x96,0x5b,0x5d,0x8b,0x52, 0x53,0x79,0x68,0x6a,0x97,0x3a,0x3a,0x4b,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x4e,0x50,0x57,0x65,0x71,0x93,0x48,0x52,0x78,0x4f,0x50,0x79,0x53,0x5e,0x88,0x5a, 0x65,0x8d,0x9c,0xa5,0xbe,0xd8,0xdb,0xe5,0xeb,0xee,0xf2,0xea,0xeb,0xf1,0xeb,0xed, 0xf1,0xda,0xdd,0xe6,0xbc,0xc2,0xd3,0xba,0xc0,0xd1,0xc4,0xca,0xd8,0xe6,0xe8,0xf0, 0x41,0x41,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x12,0x0f,0x12,0x5a,0x4c,0x60,0x72,0x7e,0xa0,0x52,0x56,0x81,0x52,0x4f,0x7a,0x68, 0x74,0x99,0x70,0x7b,0x9d,0x71,0x7b,0x9e,0x74,0x80,0xa0,0x78,0x82,0xa2,0x7a,0x86, 0xa5,0x80,0x8a,0xa9,0x82,0x8c,0xaa,0x85,0x8e,0xac,0x89,0x90,0xae,0x89,0x91,0xae, 0x8a,0x94,0xae,0x88,0x91,0xad,0x89,0x94,0xae,0x87,0x8f,0xab,0x85,0x8e,0xaa,0x80, 0x8b,0xa8,0x7a,0x84,0xa3,0x52,0x5b,0x85,0x57,0x63,0x8a,0x68,0x6c,0x77,0x05,0x05, 0x06,0x06,0x06,0x07,0x06,0x06,0x07,0x06,0x06,0x07,0x06,0x06,0x08,0x06,0x06,0x08, 0x06,0x06,0x08,0x06,0x06,0x07,0x06,0x05,0x06,0x06,0x05,0x06,0x06,0x05,0x06,0x06, 0x05,0x06,0x05,0x04,0x05,0x04,0x03,0x04,0x04,0x03,0x04,0x03,0x03,0x04,0x03,0x02, 0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x3c,0x2d,0x38,0x3e,0x2f,0x39,0x6b,0x76,0x9a, 0x91,0x9a,0xb4,0x52,0x54,0x7f,0x52,0x50,0x7b,0x69,0x74,0x98,0x6a,0x75,0x99,0x5e, 0x6a,0x91,0x64,0x53,0x76,0x53,0x5e,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02, 0x03,0x03,0x03,0x03,0x05,0x03,0x03,0x05,0x03,0x03,0x05,0x04,0x04,0x05,0x04,0x05, 0x06,0x04,0x04,0x06,0x04,0x05,0x06,0x04,0x05,0x06,0x05,0x06,0x07,0x06,0x06,0x09, 0x06,0x07,0x0a,0x07,0x07,0x0a,0x07,0x08,0x0a,0x08,0x09,0x0b,0x08,0x09,0x0b,0x08, 0x09,0x0b,0x09,0x0a,0x0b,0x0a,0x0a,0x0d,0x09,0x0a,0x0c,0x0a,0x0b,0x0e,0x0b,0x0c, 0x0e,0x0b,0x0c,0x0e,0x0c,0x0d,0x10,0x0d,0x0e,0x10,0x0d,0x0e,0x10,0x0e,0x0e,0x11, 0x0e,0x0f,0x12,0x0e,0x0f,0x12,0x0f,0x11,0x14,0x0f,0x11,0x14,0x0f,0x11,0x14,0x10, 0x12,0x15,0x10,0x12,0x15,0x11,0x12,0x16,0x11,0x12,0x16,0x11,0x12,0x16,0x11,0x12, 0x16,0x11,0x12,0x15,0x11,0x12,0x15,0x10,0x12,0x15,0x11,0x12,0x15,0x10,0x12,0x15, 0x10,0x12,0x15,0x10,0x11,0x14,0x10,0x11,0x14,0x0e,0x0f,0x12,0x0e,0x0f,0x12,0x0e, 0x0e,0x11,0x0c,0x0d,0x0f,0x0c,0x0c,0x0e,0x0a,0x0b,0x0d,0x18,0x17,0x1f,0x53,0x5d, 0x86,0x54,0x51,0x78,0x60,0x53,0x75,0x5f,0x53,0x76,0x5f,0x54,0x77,0x60,0x53,0x76, 0x5f,0x53,0x77,0x5e,0x53,0x79,0x5a,0x52,0x79,0x53,0x50,0x7a,0x53,0x53,0x7c,0x53, 0x5e,0x85,0x55,0x60,0x88,0x57,0x62,0x8a,0x84,0x8f,0xad,0x6e,0x69,0x6f,0x03,0x04, 0x05,0x03,0x04,0x05,0x03,0x04,0x05,0x66,0x54,0x67,0x53,0x42,0x51,0x55,0x44,0x54, 0x52,0x41,0x50,0x4e,0x3d,0x4b,0x6a,0x5b,0x6a,0xd1,0xd4,0xde,0xb7,0xbd,0xcd,0x73, 0x7e,0x9b,0x50,0x5b,0x81,0x48,0x54,0x7a,0x45,0x4e,0x73,0x40,0x4d,0x71,0x40,0x4a, 0x6c,0x3f,0x4a,0x6d,0x45,0x4e,0x77,0x4f,0x59,0x82,0x5b,0x62,0x91,0x5e,0x67,0x96, 0x59,0x5d,0x89,0x50,0x52,0x78,0x67,0x68,0x95,0x35,0x36,0x48,0x02,0x02,0x03,0x02, 0x02,0x03,0x02,0x02,0x03,0x02,0x03,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02, 0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x50,0x54,0x5f,0x57,0x62,0x86,0x49,0x51,0x76,0x51,0x51,0x7a,0x52,0x57,0x83, 0x5a,0x66,0x8e,0x5b,0x66,0x8e,0xc9,0xcf,0xdb,0xe3,0xe6,0xed,0xeb,0xee,0xf2,0xe6, 0xe7,0xee,0xeb,0xed,0xf1,0xd6,0xd9,0xe3,0xbe,0xc3,0xd3,0xb4,0xbb,0xce,0xb3,0xba, 0xce,0xc0,0xc6,0xd6,0xdd,0xe1,0xeb,0x37,0x37,0x37,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x04,0x03,0x04,0x5e,0x4b,0x5e,0x6d,0x78,0x99,0x55,0x62,0x8a, 0x52,0x4f,0x79,0x64,0x70,0x94,0x6b,0x78,0x9b,0x70,0x7b,0x9d,0x73,0x7f,0x9f,0x77, 0x80,0xa1,0x7b,0x85,0xa5,0x7e,0x88,0xa7,0x81,0x8b,0xa8,0x81,0x8b,0xa7,0x86,0x8f, 0xab,0x86,0x90,0xac,0x88,0x92,0xad,0x8c,0x95,0xaf,0x88,0x92,0xad,0x86,0x8f,0xac, 0x84,0x8d,0xaa,0x81,0x8a,0xa7,0x7f,0x89,0xa6,0x59,0x65,0x8c,0x51,0x53,0x7d,0x8a, 0x92,0xa7,0x09,0x09,0x0a,0x06,0x06,0x08,0x06,0x06,0x07,0x07,0x06,0x08,0x07,0x06, 0x08,0x07,0x06,0x08,0x07,0x06,0x08,0x07,0x06,0x08,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0x05,0x06,0x06,0x05,0x06,0x05,0x04,0x05,0x04,0x04,0x05,0x04,0x04,0x05,0x04, 0x03,0x04,0x03,0x03,0x04,0x03,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02, 0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x3e,0x2f,0x3a,0x3e,0x2f, 0x39,0x6a,0x75,0x99,0x93,0x9c,0xb7,0x52,0x50,0x7b,0x52,0x52,0x7d,0x6b,0x76,0x9a, 0x69,0x74,0x98,0x5a,0x65,0x8c,0x62,0x53,0x77,0x3d,0x45,0x60,0x00,0x00,0x00,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x03,0x03, 0x02,0x03,0x04,0x02,0x03,0x04,0x03,0x03,0x05,0x03,0x03,0x05,0x04,0x04,0x05,0x04, 0x05,0x06,0x04,0x05,0x06,0x04,0x04,0x06,0x06,0x06,0x09,0x08,0x08,0x0a,0x0b,0x0a, 0x0e,0x0e,0x0d,0x11,0x10,0x0e,0x13,0x11,0x0f,0x14,0x11,0x0f,0x14,0x10,0x0f,0x14, 0x10,0x0f,0x14,0x13,0x12,0x17,0x14,0x12,0x18,0x12,0x11,0x16,0x0b,0x0c,0x0e,0x0c, 0x0d,0x10,0x0c,0x0d,0x0f,0x0c,0x0d,0x10,0x0d,0x0e,0x10,0x0d,0x0e,0x11,0x0e,0x0f, 0x12,0x0e,0x0f,0x12,0x0f,0x11,0x14,0x0f,0x10,0x13,0x10,0x11,0x15,0x11,0x12,0x16, 0x11,0x12,0x16,0x11,0x12,0x16,0x12,0x12,0x16,0x12,0x12,0x16,0x12,0x12,0x16,0x12, 0x13,0x16,0x13,0x14,0x18,0x12,0x13,0x17,0x12,0x12,0x16,0x12,0x13,0x16,0x12,0x13, 0x16,0x11,0x12,0x16,0x11,0x12,0x15,0x11,0x12,0x15,0x11,0x12,0x15,0x10,0x12,0x14, 0x10,0x11,0x14,0x0f,0x10,0x12,0x0e,0x0f,0x12,0x0d,0x0e,0x10,0x0b,0x0c,0x0e,0x18, 0x17,0x1f,0x52,0x51,0x7a,0x5a,0x53,0x77,0x60,0x53,0x75,0x5f,0x53,0x76,0x5f,0x54, 0x77,0x5f,0x54,0x76,0x60,0x54,0x76,0x5e,0x54,0x78,0x5b,0x52,0x79,0x53,0x4f,0x7a, 0x52,0x52,0x7c,0x52,0x5d,0x84,0x53,0x5e,0x88,0x55,0x60,0x88,0x75,0x80,0xa1,0x7e, 0x7a,0x7f,0x04,0x04,0x05,0x04,0x04,0x05,0x03,0x04,0x05,0x65,0x51,0x66,0x52,0x40, 0x50,0x55,0x43,0x53,0x50,0x3f,0x4e,0x4c,0x3b,0x49,0x68,0x5b,0x68,0xcd,0xd2,0xdc, 0xb7,0xbd,0xcc,0x73,0x7d,0x9d,0x50,0x5d,0x82,0x48,0x53,0x77,0x44,0x4f,0x73,0x41, 0x4b,0x6e,0x40,0x48,0x6b,0x3f,0x4a,0x6a,0x43,0x4c,0x74,0x4b,0x55,0x80,0x58,0x60, 0x8d,0x5e,0x68,0x95,0x58,0x5d,0x88,0x4f,0x52,0x79,0x65,0x66,0x95,0x32,0x33,0x46, 0x02,0x02,0x03,0x02,0x03,0x03,0x02,0x03,0x03,0x02,0x03,0x03,0x02,0x03,0x03,0x02, 0x03,0x03,0x02,0x03,0x03,0x02,0x02,0x03,0x02,0x03,0x03,0x02,0x03,0x03,0x02,0x02, 0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x52,0x58,0x68,0x54,0x5e,0x83,0x4b,0x4e,0x75,0x52,0x4f,0x7b,0x52,0x52, 0x7d,0x57,0x63,0x8c,0x5d,0x6a,0x91,0x94,0x9d,0xb8,0xd8,0xdb,0xe5,0xeb,0xee,0xf2, 0xe9,0xea,0xf0,0xe5,0xe7,0xee,0xe8,0xea,0xf0,0xcf,0xd3,0xdf,0xc0,0xc6,0xd6,0xb7, 0xbc,0xcf,0xaf,0xb7,0xca,0xaf,0xb7,0xca,0xbb,0xc1,0xd2,0xda,0xdd,0xe8,0x31,0x31, 0x31,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5a,0x47,0x5a,0x65,0x6a, 0x8b,0x5c,0x66,0x8f,0x54,0x50,0x78,0x61,0x6b,0x92,0x6b,0x77,0x9a,0x70,0x7b,0x9d, 0x72,0x7d,0x9f,0x74,0x7f,0x9f,0x77,0x81,0xa2,0x7b,0x84,0xa4,0x7f,0x88,0xa6,0x81, 0x8a,0xa7,0x85,0x8e,0xab,0x87,0x8f,0xac,0x86,0x8f,0xac,0x87,0x92,0xad,0x87,0x92, 0xad,0x86,0x90,0xad,0x84,0x8e,0xab,0x84,0x8e,0xab,0x7e,0x88,0xa5,0x68,0x71,0x95, 0x51,0x4e,0x77,0x76,0x80,0xa1,0x37,0x37,0x3a,0x06,0x06,0x07,0x07,0x06,0x09,0x06, 0x06,0x08,0x07,0x06,0x09,0x07,0x06,0x09,0x07,0x06,0x08,0x06,0x06,0x08,0x06,0x06, 0x07,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x05,0x06,0x06,0x05,0x06,0x05,0x04,0x05, 0x04,0x04,0x05,0x04,0x03,0x04,0x04,0x03,0x04,0x04,0x03,0x04,0x04,0x03,0x04,0x03, 0x03,0x04,0x03,0x03,0x04,0x03,0x02,0x03,0x03,0x02,0x03,0x03,0x02,0x03,0x02,0x02, 0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x02,0x02,0x02,0x05,0x04,0x05,0x3e, 0x2f,0x3a,0x3f,0x30,0x3c,0x6e,0x7a,0x9c,0x93,0x9c,0xb7,0x52,0x4f,0x7b,0x52,0x5b, 0x84,0x6a,0x76,0x99,0x69,0x74,0x98,0x54,0x5f,0x88,0x52,0x4f,0x7a,0x2b,0x31,0x43, 0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x03, 0x03,0x02,0x03,0x04,0x02,0x03,0x04,0x02,0x03,0x04,0x04,0x04,0x05,0x04,0x04,0x06, 0x04,0x04,0x06,0x05,0x05,0x06,0x07,0x06,0x09,0x0a,0x0a,0x0d,0x0f,0x0e,0x12,0x15, 0x12,0x17,0x19,0x16,0x1b,0x1b,0x18,0x1e,0x1d,0x19,0x20,0x1e,0x1a,0x22,0x1e,0x1a, 0x22,0x1e,0x1a,0x22,0x20,0x1c,0x23,0x26,0x20,0x29,0x23,0x1f,0x26,0x16,0x15,0x1b, 0x0e,0x0f,0x12,0x0d,0x0e,0x11,0x0d,0x0e,0x11,0x0d,0x0e,0x11,0x0e,0x0f,0x13,0x0f, 0x10,0x13,0x0f,0x11,0x14,0x10,0x11,0x15,0x10,0x11,0x15,0x11,0x12,0x16,0x11,0x12, 0x16,0x11,0x12,0x16,0x12,0x13,0x16,0x12,0x14,0x17,0x12,0x14,0x17,0x12,0x14,0x17, 0x13,0x14,0x18,0x13,0x15,0x19,0x13,0x15,0x19,0x13,0x15,0x19,0x13,0x14,0x18,0x12, 0x14,0x17,0x13,0x14,0x18,0x12,0x14,0x17,0x12,0x13,0x16,0x12,0x13,0x16,0x12,0x12, 0x16,0x11,0x12,0x16,0x11,0x12,0x16,0x10,0x12,0x14,0x0f,0x10,0x13,0x0e,0x0f,0x12, 0x0c,0x0d,0x0f,0x14,0x14,0x19,0x52,0x51,0x79,0x56,0x51,0x78,0x61,0x53,0x76,0x5f, 0x54,0x75,0x5f,0x53,0x76,0x5f,0x53,0x76,0x5f,0x54,0x76,0x60,0x54,0x77,0x5c,0x53, 0x78,0x52,0x50,0x79,0x52,0x50,0x7b,0x52,0x5b,0x84,0x53,0x5e,0x88,0x54,0x5f,0x88, 0x6a,0x75,0x9a,0x8c,0x88,0x8c,0x04,0x05,0x06,0x04,0x04,0x05,0x04,0x05,0x06,0x65, 0x52,0x67,0x52,0x41,0x50,0x55,0x44,0x55,0x50,0x3f,0x4e,0x4b,0x3a,0x49,0x66,0x59, 0x66,0xcd,0xd3,0xdc,0xb5,0xbb,0xcb,0x71,0x7c,0x9b,0x50,0x5b,0x81,0x48,0x54,0x79, 0x45,0x4e,0x73,0x40,0x4c,0x6e,0x40,0x48,0x6c,0x3f,0x49,0x6c,0x40,0x4b,0x71,0x49, 0x54,0x7c,0x56,0x5e,0x8b,0x5d,0x66,0x94,0x57,0x5d,0x86,0x4f,0x52,0x79,0x63,0x66, 0x95,0x30,0x30,0x45,0x02,0x03,0x03,0x03,0x03,0x04,0x02,0x03,0x03,0x02,0x03,0x03, 0x03,0x03,0x04,0x03,0x03,0x04,0x02,0x03,0x03,0x02,0x03,0x03,0x03,0x03,0x04,0x02, 0x03,0x03,0x02,0x03,0x03,0x02,0x03,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x53,0x5a,0x6d,0x4b,0x56,0x79,0x46,0x47,0x6c,0x52,0x4f,0x7a,0x52, 0x4f,0x7b,0x54,0x5f,0x89,0x60,0x6d,0x94,0x6d,0x79,0x9d,0xd0,0xd5,0xe0,0xe2,0xe5, 0xed,0xed,0xee,0xf2,0xe6,0xe8,0xee,0xea,0xeb,0xf1,0xe2,0xe5,0xeb,0xc7,0xcc,0xda, 0xbb,0xc2,0xd2,0xb9,0xc0,0xd1,0xb4,0xba,0xce,0xab,0xb2,0xc7,0xa9,0xb1,0xc7,0xb9, 0xc0,0xd1,0xce,0xd1,0xde,0x1e,0x1e,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3d, 0x31,0x3e,0x5e,0x5d,0x7a,0x5f,0x6b,0x91,0x5d,0x52,0x77,0x5d,0x68,0x8f,0x6a,0x75, 0x9a,0x6d,0x79,0x9c,0x70,0x7a,0x9d,0x73,0x7d,0x9e,0x78,0x82,0xa2,0x78,0x83,0xa2, 0x7c,0x85,0xa5,0x7f,0x88,0xa6,0x80,0x8b,0xa8,0x85,0x8e,0xab,0x86,0x8f,0xac,0x86, 0x8e,0xab,0x86,0x8f,0xac,0x85,0x8e,0xab,0x86,0x8f,0xac,0x82,0x8b,0xa8,0x7e,0x88, 0xa6,0x74,0x7e,0x9f,0x50,0x51,0x7a,0x5c,0x67,0x8d,0x6a,0x6d,0x76,0x07,0x06,0x09, 0x07,0x06,0x09,0x07,0x07,0x09,0x08,0x07,0x09,0x08,0x07,0x09,0x07,0x06,0x09,0x07, 0x06,0x09,0x06,0x06,0x08,0x06,0x06,0x08,0x06,0x06,0x06,0x06,0x05,0x06,0x06,0x05, 0x06,0x06,0x05,0x06,0x05,0x04,0x06,0x05,0x04,0x05,0x05,0x04,0x05,0x04,0x04,0x05, 0x05,0x04,0x05,0x05,0x04,0x05,0x04,0x04,0x05,0x05,0x04,0x05,0x04,0x03,0x04,0x04, 0x03,0x04,0x04,0x03,0x04,0x03,0x03,0x04,0x03,0x02,0x03,0x02,0x02,0x03,0x02,0x02, 0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x09,0x07,0x08,0x3d,0x2f,0x39,0x41,0x33,0x3e,0x6b,0x76,0x9a,0x97,0xa0,0xb9,0x53, 0x50,0x7a,0x53,0x5f,0x88,0x6c,0x77,0x9a,0x67,0x73,0x98,0x52,0x4f,0x7b,0x52,0x54, 0x7e,0x1d,0x21,0x2c,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x03, 0x03,0x05,0x02,0x03,0x04,0x02,0x03,0x04,0x03,0x03,0x05,0x03,0x03,0x05,0x04,0x04, 0x06,0x05,0x05,0x06,0x07,0x07,0x0a,0x0d,0x0b,0x0e,0x12,0x0f,0x14,0x18,0x15,0x1a, 0x1c,0x18,0x1e,0x1e,0x1a,0x21,0x20,0x1b,0x22,0x21,0x1c,0x24,0x21,0x1d,0x25,0x22, 0x1d,0x25,0x22,0x1e,0x26,0x22,0x1e,0x26,0x23,0x1e,0x27,0x22,0x1e,0x26,0x1d,0x1a, 0x21,0x11,0x11,0x15,0x14,0x13,0x18,0x16,0x15,0x1a,0x19,0x17,0x1c,0x10,0x11,0x15, 0x0f,0x11,0x14,0x10,0x11,0x15,0x10,0x11,0x15,0x11,0x12,0x16,0x12,0x12,0x16,0x12, 0x13,0x17,0x12,0x13,0x17,0x12,0x14,0x17,0x13,0x15,0x19,0x13,0x15,0x19,0x14,0x15, 0x19,0x15,0x16,0x1a,0x15,0x16,0x1a,0x15,0x16,0x1a,0x15,0x16,0x1a,0x15,0x16,0x1a, 0x15,0x16,0x1a,0x14,0x16,0x1a,0x14,0x16,0x1a,0x13,0x15,0x19,0x13,0x15,0x18,0x13, 0x15,0x18,0x13,0x14,0x18,0x12,0x14,0x17,0x12,0x13,0x16,0x11,0x12,0x16,0x10,0x12, 0x14,0x0e,0x0f,0x12,0x0d,0x0e,0x10,0x15,0x15,0x1b,0x53,0x51,0x79,0x52,0x50,0x78, 0x60,0x53,0x75,0x5f,0x54,0x75,0x5f,0x53,0x76,0x5f,0x53,0x75,0x5f,0x53,0x76,0x5f, 0x53,0x76,0x5c,0x53,0x78,0x53,0x50,0x79,0x52,0x51,0x7a,0x52,0x5c,0x85,0x54,0x5f, 0x88,0x55,0x5f,0x87,0x61,0x6d,0x92,0x97,0x92,0x98,0x05,0x05,0x06,0x05,0x05,0x06, 0x04,0x05,0x06,0x62,0x50,0x64,0x4e,0x3e,0x4b,0x53,0x43,0x51,0x4e,0x3f,0x4d,0x4b, 0x3b,0x49,0x59,0x4a,0x58,0xce,0xd3,0xdd,0xb0,0xb7,0xc8,0x71,0x7c,0x9c,0x51,0x5c, 0x80,0x4a,0x55,0x79,0x45,0x4f,0x74,0x41,0x4c,0x6f,0x3f,0x4a,0x6b,0x3f,0x47,0x6b, 0x40,0x4b,0x70,0x47,0x52,0x79,0x53,0x5d,0x88,0x5d,0x64,0x92,0x57,0x5d,0x86,0x55, 0x58,0x80,0x61,0x63,0x94,0x2d,0x2e,0x43,0x03,0x03,0x04,0x02,0x03,0x03,0x03,0x03, 0x04,0x03,0x03,0x04,0x04,0x04,0x05,0x04,0x04,0x05,0x03,0x03,0x04,0x03,0x03,0x04, 0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x02,0x03,0x03,0x02,0x03,0x03,0x02, 0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x3d,0x43,0x50,0x4e,0x59,0x7e,0x43,0x43,0x66,0x51,0x4e,0x79, 0x52,0x50,0x7b,0x52,0x5d,0x86,0x5d,0x6a,0x91,0x74,0x80,0xa2,0xd0,0xd5,0xe0,0xd9, 0xdd,0xe6,0xd0,0xcf,0xd5,0xa7,0x9e,0xab,0xe0,0xe1,0xe6,0xfa,0xfc,0xfc,0xeb,0xed, 0xf1,0xcc,0xd1,0xde,0xbc,0xc2,0xd3,0xb7,0xbe,0xcf,0xb2,0xb9,0xcb,0xac,0xb4,0xc8, 0xa8,0xb0,0xc6,0xa7,0xaf,0xc4,0xb2,0xb9,0xcc,0xc3,0xc8,0xd6,0x0e,0x0e,0x0e,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02, 0x02,0x02,0x02,0x28,0x20,0x28,0x5b,0x56,0x6f,0x6d,0x7a,0x9d,0x5a,0x52,0x78,0x59, 0x63,0x8b,0x68,0x73,0x97,0x6b,0x76,0x98,0x70,0x7a,0x9c,0x6f,0x7a,0x9c,0x72,0x7d, 0x9d,0x77,0x80,0xa1,0x7b,0x85,0xa3,0x7d,0x86,0xa4,0x82,0x8b,0xa8,0x83,0x8c,0xa8, 0x84,0x8d,0xa9,0x85,0x8e,0xaa,0x86,0x90,0xab,0x86,0x90,0xab,0x84,0x8d,0xaa,0x84, 0x8c,0xa9,0x7e,0x86,0xa5,0x7a,0x84,0xa2,0x52,0x5d,0x85,0x54,0x5f,0x86,0x94,0x99, 0xaa,0x07,0x06,0x09,0x08,0x07,0x0a,0x07,0x07,0x09,0x07,0x07,0x09,0x08,0x07,0x0a, 0x08,0x07,0x09,0x08,0x07,0x09,0x07,0x06,0x09,0x06,0x06,0x08,0x06,0x06,0x07,0x06, 0x05,0x06,0x06,0x05,0x06,0x06,0x05,0x06,0x06,0x05,0x06,0x05,0x04,0x06,0x06,0x05, 0x06,0x06,0x05,0x06,0x06,0x05,0x06,0x06,0x05,0x06,0x06,0x05,0x06,0x06,0x05,0x06, 0x06,0x05,0x06,0x05,0x04,0x06,0x05,0x04,0x05,0x05,0x04,0x06,0x04,0x03,0x04,0x04, 0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x02,0x03,0x03,0x02, 0x03,0x02,0x02,0x03,0x0d,0x0a,0x0c,0x3d,0x2e,0x3a,0x41,0x34,0x3f,0x6d,0x79,0x9b, 0x95,0x9f,0xb8,0x54,0x50,0x79,0x5b,0x66,0x8d,0x6a,0x75,0x99,0x6b,0x76,0x9a,0x53, 0x50,0x7a,0x54,0x5f,0x88,0x12,0x15,0x1d,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x03,0x03,0x04, 0x03,0x03,0x04,0x03,0x03,0x05,0x03,0x03,0x05,0x04,0x04,0x05,0x04,0x04,0x06,0x05, 0x05,0x06,0x07,0x06,0x09,0x0b,0x0a,0x0e,0x12,0x0f,0x14,0x18,0x15,0x1a,0x1c,0x19, 0x1f,0x1e,0x1a,0x22,0x20,0x1c,0x23,0x21,0x1c,0x24,0x21,0x1d,0x25,0x21,0x1d,0x24, 0x1f,0x1b,0x23,0x1e,0x1a,0x22,0x1b,0x18,0x1f,0x1b,0x18,0x1f,0x1a,0x17,0x1e,0x17, 0x16,0x1c,0x14,0x13,0x19,0x15,0x14,0x19,0x17,0x16,0x1b,0x1e,0x1b,0x22,0x1f,0x1c, 0x24,0x19,0x17,0x1e,0x10,0x12,0x16,0x11,0x12,0x16,0x12,0x12,0x16,0x12,0x13,0x17, 0x12,0x14,0x18,0x13,0x14,0x18,0x14,0x16,0x1a,0x14,0x16,0x1a,0x14,0x16,0x1a,0x15, 0x16,0x1b,0x15,0x16,0x1b,0x16,0x17,0x1b,0x15,0x16,0x1b,0x15,0x16,0x1a,0x15,0x16, 0x1b,0x15,0x16,0x1b,0x15,0x16,0x1b,0x15,0x16,0x1b,0x15,0x16,0x1a,0x15,0x16,0x1a, 0x14,0x16,0x1a,0x13,0x15,0x18,0x13,0x14,0x18,0x13,0x14,0x18,0x12,0x14,0x17,0x12, 0x13,0x16,0x11,0x12,0x16,0x10,0x11,0x14,0x0e,0x0f,0x12,0x15,0x15,0x1c,0x52,0x50, 0x78,0x52,0x50,0x78,0x62,0x54,0x74,0x5f,0x53,0x75,0x5e,0x53,0x75,0x5f,0x53,0x76, 0x5f,0x54,0x76,0x5f,0x53,0x76,0x5d,0x54,0x78,0x54,0x51,0x78,0x52,0x51,0x7a,0x53, 0x5b,0x82,0x55,0x5f,0x87,0x54,0x5e,0x86,0x5e,0x6a,0x90,0xa3,0xa0,0xa5,0x06,0x06, 0x06,0x06,0x06,0x06,0x04,0x05,0x06,0x5b,0x4b,0x5c,0x4e,0x3e,0x4b,0x52,0x41,0x51, 0x4e,0x3f,0x4d,0x4a,0x3a,0x48,0x56,0x47,0x55,0xcb,0xd0,0xdb,0xb1,0xb7,0xc8,0x6c, 0x78,0x99,0x51,0x5d,0x80,0x4b,0x56,0x79,0x45,0x4e,0x73,0x41,0x4b,0x6f,0x3e,0x48, 0x6b,0x3e,0x47,0x6a,0x3f,0x4a,0x6c,0x44,0x50,0x78,0x51,0x59,0x84,0x5c,0x62,0x8f, 0x56,0x5b,0x85,0x56,0x59,0x81,0x60,0x62,0x94,0x32,0x32,0x4a,0x03,0x03,0x04,0x03, 0x03,0x04,0x04,0x04,0x05,0x04,0x04,0x05,0x04,0x04,0x05,0x04,0x04,0x05,0x04,0x04, 0x05,0x04,0x04,0x05,0x03,0x03,0x04,0x04,0x04,0x05,0x03,0x03,0x04,0x03,0x03,0x04, 0x02,0x03,0x03,0x02,0x03,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x26,0x29,0x30,0x53,0x5f,0x86,0x42,0x42,0x65,0x4f,0x4d, 0x77,0x52,0x4f,0x7b,0x52,0x5a,0x84,0x58,0x64,0x8c,0x64,0x6f,0x95,0xcf,0xd3,0xdf, 0xa7,0xa5,0xaf,0x32,0x2b,0x33,0x37,0x2c,0x37,0x1b,0x15,0x1b,0x00,0x00,0x00,0x48, 0x48,0x48,0xdb,0xdb,0xdb,0xf8,0xf9,0xfa,0xd1,0xd6,0xe0,0xb7,0xbe,0xcf,0xad,0xb4, 0xc9,0xa9,0xb0,0xc6,0xa7,0xaf,0xc4,0xa2,0xab,0xc2,0xa1,0xa9,0xc1,0xaa,0xb2,0xc7, 0xc6,0xcd,0xdc,0x08,0x08,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x10,0x0d,0x10,0x5c,0x51,0x66,0x82,0x8e,0xaa, 0x51,0x4e,0x79,0x54,0x5e,0x87,0x67,0x72,0x95,0x6a,0x74,0x98,0x6e,0x78,0x9a,0x70, 0x7b,0x9c,0x71,0x7c,0x9d,0x74,0x7e,0x9f,0x78,0x82,0xa1,0x78,0x84,0xa1,0x7e,0x86, 0xa5,0x82,0x8b,0xa7,0x83,0x8b,0xa8,0x84,0x8c,0xa9,0x84,0x8c,0xa9,0x86,0x8e,0xaa, 0x84,0x8d,0xa9,0x81,0x8a,0xa7,0x81,0x8a,0xa7,0x7a,0x84,0xa2,0x5f,0x69,0x8e,0x50, 0x50,0x79,0x91,0x99,0xb2,0x35,0x35,0x37,0x08,0x07,0x0a,0x09,0x08,0x0a,0x08,0x07, 0x0a,0x09,0x07,0x0a,0x08,0x07,0x0a,0x07,0x06,0x09,0x07,0x06,0x09,0x07,0x06,0x08, 0x06,0x06,0x07,0x06,0x06,0x06,0x06,0x05,0x06,0x06,0x05,0x06,0x06,0x06,0x06,0x06, 0x05,0x06,0x06,0x06,0x07,0x06,0x06,0x08,0x07,0x06,0x08,0x07,0x06,0x08,0x07,0x06, 0x09,0x07,0x06,0x09,0x07,0x06,0x08,0x06,0x06,0x08,0x06,0x06,0x07,0x06,0x06,0x07, 0x06,0x05,0x06,0x05,0x05,0x06,0x05,0x04,0x06,0x04,0x04,0x05,0x04,0x04,0x05,0x04, 0x03,0x05,0x04,0x03,0x05,0x04,0x03,0x04,0x11,0x0e,0x10,0x3d,0x2e,0x3a,0x42,0x33, 0x3e,0x72,0x7d,0xa0,0x93,0x9c,0xb7,0x54,0x50,0x79,0x5e,0x6b,0x91,0x6b,0x76,0x9a, 0x69,0x74,0x98,0x52,0x4f,0x7a,0x57,0x63,0x8c,0x0b,0x0c,0x10,0x02,0x02,0x02,0x02, 0x02,0x03,0x02,0x02,0x03,0x02,0x03,0x03,0x02,0x03,0x03,0x02,0x03,0x03,0x02,0x02, 0x03,0x03,0x03,0x04,0x03,0x03,0x05,0x03,0x03,0x05,0x04,0x04,0x06,0x06,0x06,0x08, 0x09,0x09,0x0d,0x0e,0x0d,0x12,0x12,0x11,0x16,0x17,0x14,0x1a,0x1c,0x18,0x1e,0x1e, 0x1a,0x21,0x1f,0x1b,0x22,0x20,0x1c,0x23,0x1f,0x1b,0x22,0x1e,0x1a,0x22,0x1e,0x1a, 0x22,0x20,0x1c,0x24,0x1f,0x1b,0x22,0x1d,0x1a,0x21,0x1a,0x17,0x1e,0x16,0x15,0x1c, 0x1a,0x19,0x22,0x1b,0x1c,0x24,0x19,0x1b,0x22,0x1d,0x1e,0x26,0x20,0x1e,0x28,0x26, 0x22,0x2b,0x23,0x20,0x2a,0x1c,0x1a,0x22,0x12,0x13,0x19,0x12,0x12,0x17,0x12,0x13, 0x17,0x13,0x15,0x19,0x15,0x16,0x1a,0x15,0x16,0x1a,0x16,0x17,0x1b,0x16,0x18,0x1c, 0x16,0x17,0x1c,0x16,0x16,0x1b,0x16,0x17,0x1c,0x45,0x3d,0x4c,0x8c,0x8a,0x99,0x67, 0x6f,0x8b,0x30,0x34,0x44,0x17,0x19,0x1d,0x16,0x18,0x1d,0x16,0x18,0x1c,0x16,0x18, 0x1d,0x16,0x16,0x1b,0x16,0x16,0x1b,0x15,0x16,0x1a,0x14,0x16,0x1a,0x14,0x16,0x1a, 0x13,0x15,0x19,0x12,0x14,0x17,0x12,0x13,0x16,0x10,0x12,0x14,0x0e,0x0f,0x12,0x16, 0x16,0x1c,0x52,0x51,0x78,0x52,0x51,0x79,0x5e,0x53,0x75,0x5d,0x53,0x77,0x5e,0x53, 0x75,0x5f,0x53,0x76,0x5f,0x53,0x76,0x5f,0x54,0x76,0x5d,0x54,0x78,0x54,0x51,0x78, 0x53,0x51,0x7b,0x53,0x5b,0x82,0x54,0x5e,0x87,0x54,0x5e,0x87,0x5d,0x68,0x8f,0xaa, 0xa8,0xac,0x06,0x06,0x07,0x06,0x06,0x06,0x05,0x05,0x06,0x50,0x41,0x52,0x4f,0x3f, 0x4d,0x51,0x41,0x51,0x4c,0x3d,0x4a,0x48,0x3a,0x45,0x53,0x44,0x51,0xcb,0xd0,0xdb, 0xac,0xb1,0xc4,0x68,0x72,0x96,0x50,0x5c,0x81,0x4b,0x55,0x78,0x45,0x4e,0x73,0x41, 0x4b,0x6e,0x3e,0x48,0x6b,0x3d,0x46,0x67,0x3c,0x48,0x6a,0x43,0x4e,0x72,0x4b,0x57, 0x7e,0x58,0x5f,0x8a,0x55,0x5a,0x83,0x55,0x59,0x82,0x60,0x64,0x92,0x32,0x32,0x4b, 0x04,0x04,0x05,0x04,0x04,0x05,0x04,0x05,0x05,0x04,0x05,0x05,0x04,0x05,0x05,0x04, 0x05,0x05,0x04,0x05,0x05,0x04,0x04,0x05,0x04,0x04,0x05,0x04,0x04,0x05,0x04,0x04, 0x05,0x03,0x03,0x04,0x03,0x03,0x04,0x02,0x03,0x03,0x02,0x03,0x03,0x02,0x02,0x03, 0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x19,0x1d,0x56,0x62,0x89,0x42,0x45,0x69,0x4c, 0x4c,0x73,0x52,0x50,0x7b,0x52,0x56,0x81,0x56,0x62,0x8b,0x71,0x7c,0x9f,0xce,0xce, 0xd9,0x2d,0x2c,0x2f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5a,0x5a,0x5a,0xf9,0xf9,0xf9,0xe5, 0xe7,0xee,0xb9,0xc0,0xd1,0xa9,0xb1,0xc6,0xa3,0xab,0xc2,0xa0,0xa8,0xc0,0x9a,0xa3, 0xbc,0x9b,0xa4,0xbc,0xab,0xb3,0xc9,0xb6,0xbb,0xcb,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x04,0x04,0x05,0x60,0x50, 0x65,0x89,0x92,0xae,0x52,0x4e,0x79,0x52,0x59,0x82,0x65,0x71,0x94,0x69,0x73,0x96, 0x6c,0x76,0x99,0x6f,0x79,0x9b,0x70,0x7b,0x9c,0x74,0x7e,0x9e,0x75,0x7f,0x9e,0x78, 0x83,0xa0,0x7c,0x85,0xa3,0x7f,0x88,0xa5,0x81,0x89,0xa6,0x83,0x8b,0xa8,0x83,0x8b, 0xa8,0x84,0x8f,0xaa,0x82,0x8c,0xa9,0x81,0x8a,0xa7,0x7e,0x87,0xa5,0x7b,0x84,0xa2, 0x6b,0x77,0x98,0x50,0x4e,0x78,0x6b,0x76,0x97,0x79,0x78,0x7d,0x09,0x08,0x0b,0x09, 0x08,0x0b,0x09,0x08,0x0b,0x08,0x07,0x0a,0x08,0x07,0x0a,0x08,0x07,0x0a,0x07,0x06, 0x09,0x07,0x06,0x08,0x06,0x06,0x08,0x06,0x06,0x06,0x06,0x05,0x06,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x07,0x07,0x06,0x08,0x07,0x06,0x08,0x08,0x07,0x09,0x08, 0x07,0x0a,0x08,0x07,0x0a,0x09,0x07,0x0a,0x08,0x07,0x0a,0x08,0x07,0x0a,0x09,0x07, 0x0a,0x07,0x06,0x08,0x07,0x06,0x08,0x07,0x06,0x08,0x06,0x06,0x08,0x06,0x06,0x07, 0x06,0x05,0x06,0x06,0x05,0x06,0x06,0x06,0x07,0x05,0x04,0x06,0x18,0x13,0x17,0x3f, 0x30,0x3b,0x42,0x33,0x3e,0x76,0x81,0xa2,0x8d,0x98,0xb3,0x54,0x50,0x79,0x60,0x6c, 0x92,0x69,0x75,0x99,0x66,0x72,0x97,0x51,0x4f,0x7a,0x5a,0x65,0x8d,0x06,0x06,0x08, 0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x03,0x03,0x02,0x03,0x03,0x02, 0x03,0x03,0x03,0x03,0x04,0x04,0x04,0x05,0x04,0x04,0x05,0x05,0x05,0x06,0x08,0x09, 0x0a,0x0e,0x0e,0x12,0x19,0x1b,0x23,0x22,0x26,0x30,0x20,0x22,0x2d,0x20,0x1c,0x24, 0x20,0x1c,0x23,0x20,0x1c,0x24,0x20,0x1c,0x23,0x20,0x1c,0x23,0x1e,0x1a,0x22,0x1e, 0x1a,0x21,0x21,0x1d,0x25,0x2a,0x25,0x2e,0x2a,0x25,0x2e,0x29,0x23,0x2e,0x27,0x23, 0x2e,0x24,0x23,0x2e,0x2a,0x2e,0x3c,0x34,0x38,0x43,0x33,0x37,0x43,0x32,0x36,0x42, 0x2e,0x32,0x41,0x31,0x32,0x43,0x2f,0x2d,0x3d,0x2c,0x2e,0x3d,0x22,0x22,0x2e,0x1b, 0x1b,0x26,0x16,0x18,0x1f,0x15,0x16,0x1b,0x17,0x19,0x1e,0x19,0x1a,0x1e,0x19,0x1a, 0x1e,0x18,0x19,0x1d,0x16,0x18,0x1c,0x16,0x17,0x1b,0x4c,0x44,0x54,0x57,0x4a,0x5b, 0xa7,0xaa,0xb9,0x74,0x7d,0x9b,0x59,0x62,0x84,0x27,0x2b,0x36,0x17,0x19,0x1e,0x17, 0x19,0x1e,0x17,0x19,0x1e,0x16,0x18,0x1d,0x16,0x17,0x1c,0x16,0x18,0x1c,0x16,0x17, 0x1b,0x16,0x16,0x1b,0x14,0x16,0x1a,0x13,0x15,0x19,0x12,0x14,0x17,0x11,0x12,0x15, 0x0f,0x10,0x12,0x16,0x16,0x1c,0x53,0x51,0x78,0x52,0x50,0x78,0x5c,0x53,0x77,0x5c, 0x53,0x77,0x5e,0x53,0x75,0x5f,0x53,0x76,0x5f,0x53,0x76,0x5f,0x54,0x76,0x5d,0x54, 0x79,0x56,0x51,0x78,0x53,0x50,0x7b,0x52,0x58,0x82,0x53,0x5f,0x87,0x54,0x5f,0x87, 0x5c,0x68,0x8e,0xb4,0xb1,0xb7,0x06,0x06,0x08,0x06,0x06,0x07,0x05,0x05,0x06,0x47, 0x3a,0x48,0x50,0x3f,0x4e,0x50,0x3f,0x4f,0x4c,0x3d,0x4b,0x47,0x38,0x44,0x4f,0x41, 0x4e,0xca,0xcf,0xda,0xa7,0xae,0xc1,0x64,0x6d,0x91,0x4e,0x59,0x7f,0x4b,0x54,0x79, 0x46,0x4f,0x74,0x41,0x4c,0x70,0x3e,0x48,0x6a,0x3d,0x46,0x69,0x3c,0x46,0x67,0x41, 0x4b,0x6e,0x49,0x54,0x7a,0x55,0x5c,0x86,0x54,0x58,0x82,0x56,0x5a,0x84,0x60,0x64, 0x93,0x31,0x32,0x49,0x04,0x04,0x05,0x04,0x05,0x05,0x04,0x05,0x05,0x05,0x05,0x06, 0x05,0x05,0x06,0x05,0x05,0x06,0x05,0x05,0x06,0x04,0x05,0x05,0x04,0x05,0x05,0x04, 0x05,0x05,0x04,0x05,0x05,0x04,0x04,0x05,0x04,0x04,0x05,0x03,0x03,0x04,0x02,0x03, 0x03,0x02,0x03,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0e,0x0f,0x11,0x5b,0x66,0x8d,0x46,0x4a,0x6e, 0x47,0x48,0x6c,0x52,0x50,0x7b,0x52,0x53,0x7e,0x53,0x5e,0x89,0x75,0x81,0xa2,0xbb, 0xbb,0xc1,0x08,0x08,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x0e,0x0e,0x0e,0xcb,0xcb,0xcb,0xf7,0xf8,0xf9,0xbf,0xc4,0xd5,0xa3,0xab,0xc2,0x9d, 0xa7,0xbf,0x9b,0xa3,0xbc,0x98,0xa1,0xba,0x98,0xa1,0xba,0xa8,0xb2,0xca,0x8c,0x91, 0x9c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x02,0x03,0x03,0x03,0x04,0x04, 0x03,0x05,0x46,0x39,0x47,0x7c,0x83,0x9f,0x52,0x5b,0x84,0x51,0x4f,0x7a,0x61,0x6c, 0x91,0x68,0x71,0x95,0x6a,0x74,0x96,0x6d,0x76,0x99,0x6e,0x79,0x9b,0x74,0x7d,0x9d, 0x75,0x7f,0x9f,0x78,0x81,0xa0,0x79,0x83,0xa1,0x7c,0x87,0xa3,0x7f,0x89,0xa6,0x83, 0x8c,0xa9,0x81,0x8b,0xa7,0x81,0x8a,0xa7,0x83,0x8e,0xa8,0x80,0x8a,0xa6,0x7d,0x87, 0xa4,0x7c,0x86,0xa2,0x77,0x80,0xa0,0x50,0x54,0x7c,0x54,0x5e,0x86,0x94,0x98,0xa7, 0x09,0x09,0x0c,0x09,0x09,0x0b,0x09,0x08,0x0b,0x09,0x08,0x0a,0x08,0x07,0x0a,0x08, 0x07,0x0a,0x07,0x06,0x08,0x07,0x06,0x08,0x06,0x06,0x08,0x06,0x06,0x07,0x06,0x06, 0x06,0x06,0x05,0x06,0x06,0x06,0x08,0x07,0x06,0x08,0x08,0x07,0x09,0x08,0x07,0x0a, 0x09,0x08,0x0a,0x0a,0x09,0x0b,0x0a,0x09,0x0b,0x0a,0x09,0x0b,0x0a,0x09,0x0b,0x0a, 0x0a,0x0c,0x0a,0x0a,0x0c,0x09,0x08,0x0a,0x09,0x08,0x0a,0x08,0x07,0x09,0x08,0x07, 0x0a,0x08,0x07,0x0a,0x07,0x06,0x09,0x07,0x06,0x09,0x07,0x06,0x08,0x07,0x06,0x08, 0x1b,0x16,0x1b,0x3f,0x30,0x3b,0x42,0x33,0x3e,0x7b,0x86,0xa6,0x89,0x93,0xb0,0x51, 0x4e,0x79,0x62,0x6e,0x93,0x6b,0x76,0x9a,0x65,0x71,0x97,0x51,0x51,0x7b,0x5f,0x6b, 0x91,0x03,0x03,0x04,0x02,0x02,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04, 0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x05,0x04,0x04,0x05,0x06,0x06,0x07,0x0a, 0x0b,0x0d,0x19,0x1a,0x1d,0x26,0x29,0x2e,0x3a,0x3d,0x48,0x47,0x4b,0x57,0x32,0x36, 0x43,0x24,0x22,0x2e,0x24,0x20,0x2a,0x21,0x1e,0x27,0x20,0x1e,0x27,0x23,0x20,0x2a, 0x28,0x25,0x30,0x2a,0x27,0x34,0x2d,0x2a,0x38,0x31,0x2d,0x3c,0x2a,0x29,0x38,0x29, 0x29,0x38,0x28,0x27,0x36,0x26,0x26,0x35,0x30,0x34,0x41,0x3a,0x3e,0x49,0x3b,0x3e, 0x48,0x35,0x38,0x42,0x2d,0x32,0x3e,0x30,0x34,0x45,0x43,0x49,0x5a,0x3f,0x45,0x56, 0x33,0x37,0x4a,0x2e,0x30,0x40,0x26,0x26,0x33,0x3a,0x3c,0x43,0x1c,0x1e,0x26,0x20, 0x21,0x24,0x1e,0x1e,0x21,0x1b,0x1c,0x1e,0x19,0x1a,0x1e,0x45,0x3e,0x4d,0x5a,0x4d, 0x5e,0x47,0x40,0x4a,0xa8,0xab,0xb9,0x76,0x80,0x9c,0x5d,0x68,0x8a,0x51,0x5a,0x77, 0x18,0x1a,0x1e,0x18,0x1a,0x1f,0x18,0x1a,0x1e,0x18,0x1a,0x1e,0x17,0x19,0x1e,0x17, 0x19,0x1e,0x16,0x18,0x1d,0x16,0x18,0x1c,0x16,0x17,0x1b,0x15,0x16,0x1a,0x13,0x15, 0x18,0x12,0x13,0x16,0x10,0x11,0x14,0x13,0x13,0x17,0x56,0x51,0x77,0x5b,0x53,0x77, 0x5c,0x53,0x77,0x5c,0x54,0x77,0x5d,0x53,0x77,0x5e,0x53,0x75,0x5f,0x53,0x76,0x5f, 0x54,0x76,0x5b,0x53,0x79,0x56,0x51,0x79,0x52,0x51,0x7a,0x52,0x57,0x81,0x53,0x5e, 0x86,0x54,0x5f,0x87,0x5b,0x66,0x8d,0xb7,0xb5,0xbc,0x06,0x06,0x08,0x06,0x06,0x07, 0x06,0x06,0x07,0x3e,0x32,0x3e,0x53,0x42,0x51,0x4f,0x3f,0x4e,0x4c,0x3c,0x49,0x47, 0x37,0x43,0x50,0x41,0x4f,0xcb,0xd0,0xdb,0x9d,0xa6,0xbc,0x61,0x6b,0x8f,0x4e,0x5b, 0x7f,0x49,0x54,0x78,0x46,0x4f,0x74,0x42,0x4c,0x6f,0x3f,0x48,0x69,0x3e,0x46,0x67, 0x3d,0x47,0x68,0x3f,0x4a,0x6c,0x48,0x53,0x76,0x53,0x5a,0x81,0x53,0x58,0x82,0x57, 0x5a,0x86,0x63,0x64,0x95,0x31,0x32,0x4a,0x04,0x05,0x05,0x04,0x05,0x05,0x05,0x05, 0x06,0x05,0x06,0x06,0x05,0x06,0x06,0x05,0x06,0x06,0x05,0x06,0x06,0x05,0x05,0x06, 0x05,0x05,0x06,0x05,0x05,0x06,0x04,0x05,0x05,0x04,0x05,0x05,0x04,0x04,0x05,0x04, 0x04,0x05,0x03,0x03,0x04,0x02,0x03,0x03,0x02,0x03,0x03,0x02,0x02,0x03,0x02,0x02, 0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x08,0x61,0x6b,0x8d,0x47,0x52, 0x76,0x3d,0x3e,0x5e,0x50,0x4e,0x79,0x52,0x52,0x7c,0x54,0x5f,0x89,0x79,0x84,0xa5, 0x96,0x94,0x97,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x78,0x78,0xfc,0xfc,0xfd, 0xbc,0xc2,0xd2,0x9d,0xa5,0xbf,0x9b,0xa3,0xbc,0x99,0xa2,0xbb,0x96,0xa0,0xb9,0x95, 0x9e,0xb9,0xa4,0xaf,0xcb,0x52,0x56,0x5e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x02,0x02,0x02,0x00,0x00,0x00, 0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x03,0x02,0x03,0x03,0x02,0x03,0x02,0x02, 0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x03,0x03,0x04,0x03,0x03,0x04,0x04,0x03,0x05, 0x04,0x04,0x05,0x05,0x05,0x06,0x1e,0x18,0x1f,0x73,0x74,0x8f,0x59,0x62,0x8a,0x51, 0x4e,0x78,0x5e,0x69,0x8e,0x67,0x72,0x95,0x67,0x71,0x94,0x6a,0x76,0x98,0x6e,0x79, 0x9a,0x6f,0x79,0x9a,0x76,0x7f,0x9e,0x75,0x80,0x9e,0x78,0x83,0xa1,0x7b,0x86,0xa3, 0x7d,0x87,0xa5,0x7f,0x89,0xa6,0x82,0x8b,0xa7,0x82,0x8b,0xa7,0x81,0x89,0xa6,0x81, 0x89,0xa6,0x7f,0x87,0xa5,0x7a,0x83,0xa0,0x77,0x81,0x9e,0x58,0x61,0x88,0x50,0x52, 0x7a,0x8a,0x92,0xab,0x31,0x30,0x33,0x0a,0x09,0x0c,0x09,0x09,0x0b,0x09,0x08,0x0a, 0x09,0x08,0x0b,0x09,0x08,0x0a,0x07,0x06,0x09,0x07,0x06,0x08,0x07,0x06,0x08,0x06, 0x06,0x07,0x06,0x06,0x07,0x06,0x06,0x07,0x07,0x06,0x09,0x08,0x07,0x09,0x09,0x08, 0x0a,0x0a,0x09,0x0c,0x0b,0x0a,0x0c,0x0b,0x0a,0x0c,0x0c,0x0a,0x0e,0x0d,0x0b,0x0e, 0x0c,0x0b,0x0e,0x0c,0x0b,0x0e,0x0c,0x0a,0x0e,0x0b,0x0a,0x0e,0x0a,0x0a,0x0c,0x0a, 0x09,0x0b,0x09,0x08,0x0a,0x09,0x08,0x0a,0x09,0x08,0x0a,0x09,0x08,0x0a,0x09,0x08, 0x0a,0x08,0x07,0x0a,0x21,0x1a,0x21,0x3e,0x31,0x3b,0x41,0x33,0x3f,0x81,0x8c,0xaa, 0x83,0x8e,0xab,0x51,0x4f,0x7a,0x65,0x72,0x97,0x69,0x74,0x99,0x64,0x70,0x95,0x51, 0x55,0x7f,0x5e,0x69,0x8f,0x03,0x03,0x04,0x03,0x04,0x05,0x03,0x03,0x05,0x03,0x03, 0x04,0x03,0x03,0x05,0x03,0x04,0x05,0x04,0x04,0x05,0x05,0x06,0x07,0x09,0x0a,0x0b, 0x0d,0x0e,0x10,0x1d,0x1e,0x21,0x32,0x34,0x3a,0x45,0x47,0x50,0x4f,0x53,0x5e,0x52, 0x56,0x64,0x36,0x3b,0x4c,0x2a,0x2a,0x39,0x2a,0x2a,0x3a,0x2a,0x2a,0x39,0x2b,0x2b, 0x3a,0x30,0x2c,0x3a,0x33,0x2d,0x3b,0x30,0x2a,0x36,0x2e,0x28,0x32,0x2e,0x28,0x32, 0x2a,0x27,0x33,0x2a,0x2a,0x3a,0x30,0x34,0x44,0x3e,0x42,0x50,0x4a,0x4e,0x5a,0x45, 0x49,0x55,0x2b,0x2e,0x38,0x20,0x22,0x2a,0x25,0x27,0x2e,0x20,0x20,0x2c,0x2e,0x32, 0x41,0x56,0x5b,0x68,0x4b,0x50,0x5e,0x55,0x59,0x66,0x47,0x4b,0x57,0x4c,0x4e,0x56, 0x5f,0x60,0x62,0x41,0x41,0x42,0x2b,0x2b,0x2c,0x20,0x21,0x22,0x46,0x40,0x4e,0x5f, 0x51,0x62,0x48,0x3d,0x49,0x47,0x40,0x4a,0xae,0xb1,0xbf,0x77,0x81,0x9c,0x5c,0x68, 0x8a,0x57,0x61,0x83,0x43,0x4a,0x60,0x1a,0x1b,0x20,0x19,0x1b,0x20,0x19,0x1a,0x1f, 0x18,0x1a,0x1f,0x18,0x1a,0x1e,0x17,0x19,0x1e,0x17,0x19,0x1e,0x16,0x18,0x1d,0x16, 0x18,0x1c,0x14,0x16,0x1a,0x13,0x14,0x18,0x11,0x12,0x15,0x13,0x14,0x19,0x59,0x53, 0x77,0x5a,0x53,0x77,0x5b,0x52,0x77,0x5c,0x54,0x77,0x5f,0x53,0x75,0x5e,0x53,0x75, 0x5f,0x53,0x75,0x5f,0x53,0x76,0x5d,0x53,0x78,0x55,0x50,0x78,0x52,0x51,0x79,0x52, 0x56,0x7e,0x54,0x5e,0x86,0x56,0x60,0x88,0x5a,0x65,0x8c,0xb7,0xb7,0xc1,0x06,0x06, 0x08,0x06,0x06,0x08,0x06,0x06,0x08,0x37,0x2d,0x37,0x53,0x43,0x53,0x4f,0x3e,0x4c, 0x4a,0x3a,0x48,0x45,0x36,0x42,0x4b,0x3d,0x49,0xc8,0xcc,0xd8,0x97,0xa0,0xb8,0x61, 0x69,0x8e,0x4e,0x5a,0x7f,0x4b,0x54,0x7a,0x45,0x4f,0x73,0x42,0x4c,0x6e,0x3f,0x49, 0x69,0x3d,0x47,0x67,0x3c,0x45,0x66,0x3e,0x48,0x69,0x47,0x50,0x72,0x50,0x5a,0x80, 0x53,0x57,0x7e,0x55,0x58,0x84,0x63,0x64,0x96,0x33,0x33,0x4b,0x04,0x05,0x05,0x05, 0x05,0x06,0x05,0x06,0x06,0x05,0x06,0x06,0x06,0x06,0x07,0x06,0x06,0x07,0x06,0x06, 0x07,0x05,0x06,0x06,0x05,0x06,0x06,0x05,0x06,0x06,0x05,0x05,0x06,0x05,0x05,0x06, 0x04,0x05,0x05,0x04,0x04,0x05,0x04,0x04,0x05,0x03,0x03,0x04,0x02,0x03,0x03,0x02, 0x03,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x6d,0x76,0x90,0x4f, 0x59,0x82,0x3c,0x3e,0x5c,0x4c,0x4a,0x71,0x52,0x52,0x7d,0x53,0x5e,0x88,0x86,0x91, 0xaf,0x8e,0x8a,0x8e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x5a,0x5a,0x5a,0xfd,0xfd,0xfe,0xb7,0xbe,0xd0,0x99,0xa2,0xbb,0x98,0xa1,0xba, 0x96,0xa0,0xba,0x95,0x9f,0xb9,0x97,0xa0,0xbc,0xa9,0xb5,0xd5,0x2b,0x2b,0x2b,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02, 0x02,0x02,0x04,0x04,0x04,0x05,0x05,0x06,0x06,0x06,0x06,0x04,0x04,0x05,0x03,0x03, 0x03,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x02,0x03,0x04,0x03,0x03,0x04, 0x05,0x06,0x06,0x05,0x05,0x06,0x06,0x06,0x08,0x06,0x06,0x08,0x06,0x06,0x07,0x06, 0x05,0x06,0x04,0x03,0x05,0x04,0x03,0x04,0x04,0x04,0x05,0x04,0x03,0x05,0x05,0x04, 0x06,0x06,0x06,0x08,0x06,0x06,0x08,0x06,0x06,0x08,0x0b,0x0a,0x0d,0x6a,0x66,0x81, 0x63,0x6d,0x92,0x51,0x4e,0x77,0x5a,0x65,0x8a,0x65,0x6f,0x93,0x65,0x6f,0x93,0x69, 0x75,0x97,0x6c,0x75,0x97,0x6f,0x79,0x9a,0x70,0x7a,0x9a,0x74,0x7e,0x9e,0x78,0x81, 0xa0,0x7a,0x83,0xa2,0x7b,0x86,0xa2,0x7e,0x88,0xa5,0x80,0x89,0xa6,0x83,0x8b,0xa6, 0x80,0x88,0xa4,0x7f,0x88,0xa4,0x7d,0x86,0xa2,0x7d,0x85,0xa3,0x79,0x81,0x9f,0x66, 0x6f,0x92,0x50,0x50,0x76,0x6a,0x73,0x95,0x67,0x68,0x6e,0x0a,0x0a,0x0d,0x0a,0x09, 0x0c,0x0a,0x09,0x0b,0x0a,0x09,0x0b,0x09,0x08,0x0a,0x08,0x07,0x0a,0x07,0x06,0x08, 0x07,0x06,0x08,0x07,0x06,0x08,0x07,0x06,0x08,0x07,0x06,0x09,0x08,0x07,0x09,0x09, 0x07,0x0a,0x0a,0x08,0x0a,0x0a,0x0a,0x0c,0x0c,0x0b,0x0e,0x0d,0x0b,0x0f,0x0e,0x0c, 0x0f,0x0e,0x0c,0x0f,0x0e,0x0d,0x11,0x0e,0x0c,0x10,0x0e,0x0c,0x0f,0x0d,0x0b,0x0e, 0x0d,0x0b,0x0e,0x0b,0x0a,0x0d,0x0a,0x0a,0x0c,0x0a,0x0a,0x0c,0x0a,0x0a,0x0d,0x0a, 0x0a,0x0d,0x0a,0x0a,0x0c,0x0a,0x09,0x0c,0x23,0x1b,0x22,0x3f,0x30,0x3b,0x43,0x34, 0x40,0x88,0x92,0xaf,0x7d,0x87,0xa7,0x51,0x53,0x7d,0x65,0x71,0x97,0x66,0x72,0x98, 0x63,0x6e,0x94,0x53,0x5d,0x86,0x50,0x5a,0x79,0x04,0x04,0x06,0x04,0x04,0x06,0x04, 0x04,0x06,0x03,0x04,0x05,0x04,0x04,0x06,0x05,0x05,0x06,0x06,0x06,0x08,0x0a,0x0a, 0x0e,0x16,0x18,0x1d,0x21,0x23,0x2a,0x2a,0x2e,0x39,0x4b,0x4f,0x5b,0x62,0x66,0x74, 0x70,0x76,0x84,0x72,0x78,0x86,0x60,0x66,0x76,0x42,0x47,0x5b,0x3d,0x42,0x57,0x43, 0x4a,0x5d,0x42,0x48,0x5c,0x36,0x36,0x4a,0x32,0x32,0x45,0x31,0x33,0x45,0x36,0x3a, 0x4c,0x3a,0x3e,0x50,0x42,0x46,0x57,0x4f,0x54,0x63,0x4f,0x54,0x63,0x46,0x4a,0x5a, 0x3e,0x44,0x53,0x35,0x3a,0x48,0x35,0x39,0x46,0x2c,0x2f,0x37,0x22,0x23,0x2a,0x28, 0x2a,0x30,0x3c,0x3e,0x46,0x48,0x4b,0x56,0x57,0x5a,0x65,0x5e,0x60,0x69,0x68,0x6a, 0x6f,0x6f,0x6f,0x6f,0x73,0x73,0x73,0x5a,0x5a,0x5a,0x3b,0x3b,0x3b,0x54,0x4d,0x58, 0x66,0x57,0x67,0x4c,0x3f,0x4c,0x3f,0x35,0x3f,0x45,0x3d,0x46,0xaf,0xb4,0xc1,0x7b, 0x84,0x9f,0x5a,0x66,0x88,0x58,0x62,0x85,0x5d,0x69,0x8a,0x36,0x3b,0x4d,0x1a,0x1b, 0x21,0x1a,0x1b,0x21,0x1a,0x1b,0x20,0x19,0x1a,0x1f,0x18,0x1a,0x1f,0x17,0x19,0x1e, 0x17,0x19,0x1e,0x16,0x18,0x1d,0x15,0x16,0x1a,0x14,0x16,0x1a,0x12,0x13,0x16,0x13, 0x14,0x19,0x59,0x54,0x77,0x5a,0x53,0x77,0x5c,0x53,0x77,0x5d,0x53,0x77,0x5d,0x53, 0x77,0x5c,0x53,0x77,0x5f,0x53,0x76,0x5f,0x53,0x76,0x5c,0x52,0x78,0x56,0x50,0x78, 0x52,0x50,0x79,0x52,0x55,0x7c,0x54,0x5e,0x86,0x55,0x5f,0x87,0x5a,0x66,0x8c,0xb0, 0xb2,0xbf,0x06,0x06,0x08,0x06,0x06,0x08,0x06,0x06,0x08,0x2f,0x28,0x31,0x54,0x44, 0x53,0x4d,0x3d,0x4b,0x49,0x3a,0x46,0x45,0x36,0x42,0x4c,0x3e,0x4a,0xc9,0xcc,0xd8, 0x93,0x9d,0xb5,0x5e,0x69,0x8e,0x4d,0x5a,0x7f,0x4b,0x54,0x7c,0x47,0x4e,0x74,0x41, 0x4c,0x6e,0x3e,0x49,0x6a,0x3d,0x46,0x67,0x3c,0x45,0x66,0x3d,0x46,0x67,0x42,0x4c, 0x70,0x4c,0x55,0x7b,0x4f,0x55,0x7b,0x54,0x58,0x81,0x64,0x65,0x94,0x34,0x35,0x4c, 0x05,0x05,0x06,0x05,0x06,0x06,0x05,0x06,0x06,0x06,0x06,0x07,0x06,0x06,0x07,0x06, 0x06,0x07,0x06,0x06,0x07,0x06,0x06,0x07,0x06,0x06,0x07,0x06,0x06,0x07,0x05,0x06, 0x06,0x05,0x05,0x06,0x05,0x05,0x06,0x04,0x05,0x05,0x04,0x04,0x05,0x03,0x03,0x04, 0x03,0x03,0x04,0x02,0x03,0x03,0x02,0x03,0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x79,0x8c, 0x54,0x60,0x88,0x3d,0x3f,0x5e,0x48,0x46,0x6b,0x52,0x52,0x7c,0x53,0x5e,0x89,0x88, 0x92,0xb0,0x7d,0x76,0x7b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3e,0x3e,0x3e,0xfb,0xfb,0xfb,0xbc,0xc2, 0xd2,0x99,0xa2,0xbb,0x96,0xa0,0xb9,0x95,0x9f,0xb9,0x94,0x9d,0xb8,0x9b,0xa5,0xc0, 0xb7,0xc1,0xdf,0x0e,0x0e,0x0e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x03,0x03,0x04,0x04,0x04,0x05,0x06,0x06,0x06,0x09,0x09,0x0a,0x09,0x09,0x0a,0x07, 0x08,0x09,0x06,0x07,0x08,0x06,0x06,0x06,0x06,0x06,0x07,0x06,0x06,0x07,0x06,0x06, 0x07,0x07,0x07,0x09,0x09,0x09,0x0b,0x0a,0x0b,0x0e,0x0c,0x0e,0x11,0x0b,0x0c,0x10, 0x0a,0x0a,0x0e,0x0a,0x0a,0x0d,0x09,0x08,0x0a,0x07,0x06,0x09,0x06,0x06,0x07,0x06, 0x05,0x07,0x08,0x09,0x0a,0x0d,0x0e,0x10,0x0e,0x0f,0x12,0x0a,0x0a,0x0e,0x07,0x07, 0x0a,0x5d,0x56,0x6c,0x69,0x74,0x96,0x50,0x4e,0x76,0x59,0x62,0x88,0x64,0x6e,0x91, 0x65,0x70,0x92,0x67,0x72,0x93,0x6b,0x74,0x96,0x6e,0x77,0x99,0x6e,0x78,0x99,0x72, 0x7c,0x9b,0x77,0x81,0xa0,0x78,0x82,0xa0,0x7a,0x84,0xa2,0x7e,0x87,0xa4,0x7f,0x88, 0xa5,0x7e,0x87,0xa3,0x7e,0x88,0xa5,0x7d,0x86,0xa3,0x7f,0x88,0xa4,0x7c,0x84,0xa2, 0x79,0x81,0x9e,0x71,0x7b,0x9a,0x50,0x50,0x77,0x57,0x60,0x85,0x85,0x8b,0x9c,0x0a, 0x0a,0x0e,0x0a,0x0a,0x0e,0x0a,0x0a,0x0d,0x0a,0x09,0x0c,0x0a,0x09,0x0b,0x08,0x07, 0x0a,0x08,0x07,0x0a,0x07,0x07,0x09,0x07,0x07,0x09,0x08,0x07,0x0a,0x08,0x07,0x0a, 0x08,0x07,0x0a,0x09,0x08,0x0a,0x0a,0x09,0x0b,0x0b,0x0a,0x0d,0x0c,0x0b,0x0e,0x0e, 0x0c,0x10,0x0e,0x0d,0x11,0x10,0x0e,0x12,0x10,0x0e,0x12,0x11,0x0e,0x13,0x0f,0x0e, 0x12,0x0e,0x0d,0x10,0x0e,0x0c,0x10,0x0d,0x0b,0x0f,0x0c,0x0b,0x0e,0x0c,0x0a,0x0e, 0x0c,0x0b,0x0e,0x0c,0x0b,0x0e,0x0b,0x0a,0x0e,0x0b,0x0a,0x0e,0x23,0x1c,0x22,0x3e, 0x30,0x3a,0x43,0x33,0x40,0x8e,0x95,0xb1,0x75,0x81,0xa2,0x51,0x51,0x7c,0x66,0x72, 0x98,0x68,0x73,0x98,0x5f,0x6c,0x91,0x53,0x5e,0x87,0x40,0x49,0x63,0x05,0x05,0x06, 0x05,0x05,0x06,0x04,0x05,0x06,0x04,0x05,0x06,0x06,0x06,0x08,0x0b,0x0a,0x0d,0x10, 0x0e,0x12,0x17,0x17,0x1f,0x2b,0x2f,0x3c,0x32,0x36,0x47,0x37,0x3c,0x4f,0x66,0x6a, 0x7a,0x7f,0x83,0x92,0x82,0x87,0x96,0x7b,0x81,0x91,0x69,0x6f,0x82,0x5a,0x61,0x75, 0x5e,0x65,0x7a,0x62,0x68,0x7b,0x5a,0x60,0x73,0x51,0x57,0x6a,0x5f,0x65,0x76,0x66, 0x6c,0x7a,0x6f,0x73,0x82,0x76,0x7b,0x88,0x76,0x7b,0x87,0x71,0x75,0x82,0x61,0x66, 0x74,0x51,0x56,0x65,0x46,0x4a,0x5a,0x44,0x49,0x57,0x46,0x4b,0x57,0x35,0x38,0x43, 0x25,0x27,0x32,0x28,0x2b,0x33,0x3d,0x3e,0x45,0x4f,0x52,0x58,0x4c,0x4e,0x55,0x63, 0x65,0x68,0x72,0x72,0x72,0x76,0x76,0x76,0x72,0x72,0x72,0x6d,0x6d,0x6d,0x6a,0x66, 0x6d,0x7f,0x73,0x7f,0x78,0x6f,0x77,0x65,0x5b,0x63,0x3c,0x32,0x3c,0x42,0x3b,0x44, 0xaf,0xb3,0xc1,0x81,0x8b,0xa4,0x56,0x61,0x85,0x55,0x5f,0x83,0x60,0x69,0x8a,0x5c, 0x66,0x87,0x1a,0x1b,0x21,0x1a,0x1c,0x21,0x1a,0x1c,0x21,0x1a,0x1b,0x21,0x19,0x1a, 0x1f,0x18,0x1a,0x1e,0x17,0x19,0x1e,0x16,0x18,0x1d,0x16,0x17,0x1b,0x14,0x16,0x1a, 0x12,0x13,0x17,0x14,0x16,0x1a,0x59,0x53,0x77,0x5a,0x52,0x77,0x5b,0x52,0x77,0x5c, 0x53,0x77,0x5c,0x53,0x77,0x5e,0x54,0x75,0x5e,0x53,0x75,0x5d,0x54,0x78,0x5d,0x54, 0x78,0x57,0x51,0x78,0x53,0x50,0x79,0x53,0x54,0x7d,0x53,0x5d,0x86,0x54,0x5f,0x87, 0x5a,0x65,0x8c,0xa6,0xab,0xbc,0x06,0x07,0x08,0x06,0x07,0x08,0x06,0x06,0x08,0x25, 0x20,0x27,0x55,0x45,0x55,0x4a,0x3b,0x49,0x49,0x39,0x46,0x43,0x34,0x40,0x4a,0x3c, 0x48,0xc5,0xca,0xd7,0x8f,0x98,0xb0,0x5d,0x68,0x8c,0x4f,0x5a,0x81,0x48,0x52,0x7a, 0x47,0x4f,0x74,0x41,0x4b,0x6e,0x3f,0x49,0x69,0x3c,0x45,0x67,0x3d,0x44,0x65,0x3d, 0x46,0x67,0x41,0x49,0x6d,0x4a,0x51,0x77,0x4d,0x55,0x79,0x52,0x54,0x7f,0x62,0x64, 0x94,0x33,0x33,0x4c,0x05,0x05,0x06,0x05,0x06,0x06,0x06,0x06,0x07,0x06,0x06,0x07, 0x06,0x06,0x07,0x06,0x07,0x08,0x06,0x06,0x07,0x06,0x06,0x07,0x06,0x06,0x07,0x06, 0x06,0x07,0x06,0x06,0x07,0x05,0x06,0x06,0x05,0x05,0x06,0x04,0x05,0x05,0x04,0x05, 0x05,0x04,0x04,0x05,0x03,0x03,0x04,0x03,0x03,0x04,0x02,0x03,0x03,0x02,0x02,0x03, 0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x63, 0x6c,0x62,0x6d,0x94,0x41,0x44,0x66,0x44,0x42,0x66,0x52,0x53,0x7d,0x53,0x5f,0x89, 0x7c,0x88,0xa8,0x7e,0x76,0x7c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b, 0x2b,0x2b,0xf9,0xfa,0xfa,0xb5,0xbc,0xcf,0x9a,0xa3,0xbc,0x99,0xa2,0xbb,0x96,0xa0, 0xb9,0x94,0x9d,0xb9,0x9f,0xa9,0xc6,0xae,0xb7,0xd3,0x03,0x03,0x03,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x02,0x02,0x03,0x04,0x04,0x05,0x08,0x08,0x09,0x0b,0x0c,0x0d,0x0f,0x10,0x12, 0x0e,0x0f,0x11,0x0e,0x0e,0x10,0x0b,0x0c,0x0e,0x0a,0x0a,0x0b,0x0d,0x0d,0x0e,0x0e, 0x0f,0x10,0x0d,0x0e,0x0e,0x0b,0x0c,0x0e,0x0b,0x0c,0x0f,0x10,0x11,0x16,0x15,0x16, 0x1c,0x14,0x16,0x1c,0x12,0x12,0x18,0x0f,0x0e,0x14,0x0e,0x0c,0x11,0x0c,0x0b,0x0e, 0x0a,0x09,0x0c,0x08,0x08,0x0a,0x0d,0x0e,0x11,0x13,0x14,0x17,0x13,0x15,0x18,0x0e, 0x0e,0x12,0x09,0x08,0x0b,0x33,0x2e,0x3c,0x75,0x7d,0x9d,0x51,0x4d,0x77,0x53,0x5d, 0x84,0x62,0x6c,0x90,0x63,0x6d,0x91,0x67,0x71,0x92,0x68,0x72,0x95,0x6c,0x75,0x97, 0x6d,0x77,0x98,0x73,0x7d,0x9c,0x75,0x7f,0x9d,0x78,0x82,0xa0,0x7a,0x84,0xa0,0x7c, 0x86,0xa3,0x7c,0x85,0xa2,0x7c,0x86,0xa2,0x80,0x89,0xa4,0x7d,0x86,0xa2,0x7c,0x85, 0xa1,0x7b,0x84,0xa1,0x78,0x80,0x9e,0x75,0x7d,0x9b,0x54,0x5e,0x83,0x50,0x53,0x7b, 0x7e,0x86,0xa2,0x26,0x26,0x2a,0x0b,0x0a,0x0e,0x0a,0x0a,0x0e,0x0a,0x0a,0x0d,0x0a, 0x09,0x0c,0x0a,0x09,0x0b,0x08,0x07,0x0a,0x08,0x07,0x0a,0x08,0x07,0x0a,0x08,0x07, 0x0a,0x08,0x07,0x0a,0x09,0x08,0x0a,0x09,0x08,0x0a,0x0a,0x0a,0x0c,0x0b,0x0a,0x0d, 0x0d,0x0b,0x0f,0x0e,0x0d,0x10,0x0f,0x0e,0x12,0x11,0x0e,0x13,0x11,0x0f,0x13,0x11, 0x0f,0x14,0x10,0x0e,0x13,0x0f,0x0e,0x12,0x0e,0x0d,0x11,0x0e,0x0d,0x11,0x0e,0x0c, 0x0f,0x0e,0x0c,0x0f,0x0e,0x0c,0x0f,0x0e,0x0d,0x11,0x0d,0x0c,0x0f,0x0d,0x0b,0x0f, 0x23,0x1c,0x23,0x3e,0x30,0x3b,0x42,0x33,0x3f,0x8f,0x98,0xb3,0x6d,0x79,0x9d,0x51, 0x52,0x7d,0x66,0x73,0x98,0x66,0x72,0x98,0x5d,0x69,0x8f,0x56,0x60,0x89,0x38,0x3f, 0x55,0x06,0x06,0x07,0x06,0x06,0x07,0x06,0x06,0x07,0x06,0x06,0x08,0x0b,0x0a,0x0d, 0x17,0x15,0x1a,0x1f,0x1e,0x27,0x28,0x26,0x32,0x35,0x36,0x49,0x3e,0x3e,0x53,0x52, 0x5a,0x6e,0x79,0x7e,0x8f,0x81,0x87,0x97,0x78,0x7e,0x90,0x6b,0x72,0x86,0x6e,0x76, 0x89,0x7c,0x82,0x92,0x7c,0x82,0x92,0x7a,0x80,0x8f,0x6e,0x74,0x83,0x66,0x6b,0x7b, 0x6f,0x74,0x82,0x76,0x7b,0x87,0x7e,0x82,0x8e,0x85,0x89,0x94,0x86,0x8a,0x96,0x7f, 0x83,0x8f,0x75,0x7a,0x85,0x6a,0x6f,0x7c,0x62,0x67,0x73,0x5a,0x5e,0x6b,0x52,0x57, 0x64,0x42,0x47,0x55,0x38,0x3c,0x4a,0x36,0x3a,0x46,0x38,0x3b,0x44,0x57,0x59,0x5e, 0x51,0x52,0x56,0x4f,0x50,0x52,0x6e,0x6e,0x6e,0x79,0x79,0x79,0x7d,0x7d,0x7d,0x87, 0x85,0x87,0x8d,0x83,0x8d,0x96,0x8f,0x94,0x94,0x8d,0x92,0x6a,0x61,0x69,0x3b,0x32, 0x3a,0x3d,0x35,0x3e,0xb0,0xb4,0xc1,0x85,0x8e,0xa7,0x56,0x61,0x84,0x55,0x60,0x83, 0x61,0x6b,0x8b,0x5c,0x66,0x86,0x1a,0x1c,0x22,0x1a,0x1c,0x22,0x1a,0x1d,0x22,0x1b, 0x1d,0x22,0x1a,0x1b,0x21,0x1a,0x1b,0x20,0x18,0x1a,0x1f,0x18,0x1a,0x1e,0x17,0x19, 0x1e,0x16,0x16,0x1b,0x13,0x15,0x19,0x11,0x12,0x15,0x56,0x51,0x76,0x58,0x53,0x77, 0x5c,0x53,0x77,0x5c,0x54,0x77,0x5c,0x53,0x77,0x5d,0x53,0x77,0x5e,0x53,0x75,0x5e, 0x54,0x75,0x5d,0x54,0x78,0x58,0x51,0x79,0x53,0x50,0x79,0x53,0x54,0x7c,0x52,0x5d, 0x86,0x54,0x5f,0x88,0x5a,0x64,0x8a,0x9d,0xa4,0xb7,0x07,0x08,0x0a,0x06,0x07,0x08, 0x06,0x07,0x08,0x17,0x14,0x19,0x58,0x46,0x58,0x49,0x39,0x47,0x48,0x38,0x46,0x43, 0x33,0x40,0x4b,0x3d,0x48,0xc4,0xca,0xd7,0x90,0x99,0xb3,0x5d,0x69,0x8e,0x4f,0x58, 0x7f,0x4a,0x54,0x79,0x46,0x4e,0x73,0x41,0x4c,0x6e,0x3f,0x49,0x69,0x3d,0x46,0x66, 0x3c,0x44,0x66,0x3e,0x45,0x66,0x41,0x48,0x6b,0x48,0x4e,0x74,0x4e,0x52,0x78,0x50, 0x54,0x7a,0x62,0x63,0x94,0x32,0x31,0x4a,0x06,0x06,0x06,0x06,0x06,0x07,0x06,0x06, 0x07,0x06,0x07,0x08,0x06,0x07,0x08,0x07,0x07,0x09,0x06,0x07,0x08,0x06,0x07,0x08, 0x06,0x07,0x08,0x06,0x06,0x07,0x06,0x06,0x07,0x06,0x06,0x07,0x05,0x06,0x06,0x05, 0x05,0x06,0x04,0x05,0x05,0x04,0x04,0x05,0x04,0x04,0x05,0x03,0x03,0x04,0x03,0x03, 0x04,0x03,0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2a, 0x2b,0x2e,0x7b,0x86,0xa7,0x47,0x51,0x75,0x3d,0x3c,0x5d,0x52,0x53,0x7c,0x53,0x5e, 0x89,0x7b,0x86,0xa7,0x80,0x79,0x7e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x45,0x45,0x45,0xf9,0xf9,0xfa,0xad,0xb4,0xc9,0x96, 0xa0,0xba,0x98,0xa1,0xba,0x96,0xa0,0xb9,0x94,0x9d,0xb9,0xa4,0xae,0xcd,0x99,0xa2, 0xb0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x04,0x08,0x08,0x09,0x0e,0x0e,0x0f,0x13,0x14, 0x16,0x1a,0x1a,0x1c,0x16,0x16,0x18,0x13,0x14,0x16,0x11,0x12,0x14,0x0f,0x10,0x12, 0x14,0x15,0x16,0x1d,0x1e,0x20,0x14,0x15,0x17,0x12,0x13,0x16,0x10,0x11,0x16,0x13, 0x15,0x1a,0x17,0x19,0x20,0x19,0x1b,0x23,0x18,0x18,0x21,0x17,0x16,0x1e,0x13,0x13, 0x1a,0x10,0x10,0x16,0x0e,0x0e,0x12,0x0d,0x0c,0x0f,0x0c,0x0d,0x11,0x11,0x12,0x16, 0x12,0x12,0x16,0x0c,0x0d,0x11,0x0b,0x0a,0x0e,0x13,0x12,0x17,0x77,0x7f,0x9c,0x50, 0x55,0x7c,0x51,0x5b,0x82,0x5f,0x6a,0x8c,0x64,0x6c,0x90,0x66,0x6e,0x91,0x67,0x71, 0x92,0x6b,0x74,0x96,0x6d,0x77,0x98,0x71,0x7b,0x9b,0x73,0x7d,0x9d,0x77,0x82,0x9f, 0x79,0x82,0xa0,0x7a,0x84,0xa0,0x7a,0x85,0xa1,0x7d,0x87,0xa3,0x7e,0x86,0xa2,0x7c, 0x84,0xa0,0x7b,0x83,0x9f,0x7a,0x82,0x9e,0x77,0x80,0x9d,0x76,0x7e,0x9c,0x5f,0x69, 0x8c,0x4f,0x4c,0x75,0x65,0x6f,0x90,0x60,0x61,0x69,0x0c,0x0b,0x0f,0x0c,0x0b,0x0e, 0x0b,0x0a,0x0e,0x0b,0x0a,0x0e,0x0a,0x09,0x0c,0x09,0x08,0x0a,0x09,0x08,0x0b,0x08, 0x07,0x0a,0x08,0x07,0x0a,0x09,0x08,0x0a,0x0a,0x09,0x0b,0x0a,0x09,0x0c,0x0a,0x0a, 0x0d,0x0c,0x0b,0x0e,0x0e,0x0d,0x10,0x0f,0x0e,0x12,0x11,0x0f,0x13,0x12,0x0f,0x14, 0x12,0x10,0x15,0x12,0x10,0x15,0x12,0x0f,0x14,0x10,0x0e,0x13,0x10,0x0e,0x12,0x0e, 0x0d,0x11,0x0e,0x0d,0x11,0x0e,0x0d,0x11,0x0e,0x0d,0x11,0x0e,0x0d,0x11,0x0e,0x0c, 0x11,0x0e,0x0c,0x11,0x22,0x1b,0x22,0x3d,0x2f,0x3b,0x42,0x33,0x3f,0x9c,0xa3,0xbb, 0x75,0x81,0xa2,0x51,0x5c,0x86,0x66,0x72,0x98,0x66,0x73,0x98,0x5a,0x65,0x8c,0x57, 0x62,0x8a,0x31,0x37,0x4b,0x06,0x06,0x09,0x06,0x06,0x08,0x06,0x06,0x09,0x07,0x07, 0x0a,0x0e,0x0e,0x12,0x1f,0x1f,0x2a,0x30,0x35,0x45,0x33,0x33,0x46,0x3b,0x3a,0x4f, 0x43,0x4a,0x61,0x68,0x6e,0x82,0x78,0x7e,0x90,0x74,0x7a,0x8d,0x76,0x7d,0x8e,0x74, 0x7a,0x8e,0x76,0x7e,0x90,0x7f,0x86,0x96,0x83,0x89,0x97,0x7f,0x84,0x92,0x75,0x79, 0x87,0x6a,0x6e,0x7d,0x66,0x6a,0x78,0x63,0x67,0x74,0x70,0x74,0x7e,0x7a,0x7e,0x89, 0x7d,0x81,0x8c,0x7a,0x7e,0x8a,0x76,0x7b,0x88,0x78,0x7d,0x88,0x76,0x7a,0x86,0x68, 0x6e,0x7a,0x56,0x5b,0x6a,0x48,0x4e,0x5e,0x3f,0x45,0x55,0x3b,0x40,0x50,0x41,0x44, 0x4f,0x59,0x5a,0x60,0x4e,0x50,0x54,0x45,0x46,0x49,0x62,0x62,0x62,0x7d,0x7d,0x7d, 0x7c,0x7c,0x7c,0xa0,0x99,0x9f,0xa6,0x9f,0xa5,0x9d,0x97,0x9b,0x99,0x92,0x97,0x61, 0x59,0x5f,0x3c,0x33,0x3c,0x45,0x3d,0x45,0xb1,0xb5,0xc3,0x8a,0x93,0xaa,0x53,0x5e, 0x83,0x52,0x5c,0x81,0x60,0x6a,0x8b,0x5f,0x6a,0x8a,0x1a,0x1b,0x20,0x1a,0x1c,0x22, 0x1b,0x1d,0x22,0x1a,0x1c,0x22,0x1a,0x1c,0x21,0x19,0x1a,0x1f,0x19,0x1a,0x1f,0x18, 0x1a,0x1f,0x18,0x1a,0x1e,0x16,0x18,0x1d,0x14,0x16,0x1a,0x12,0x12,0x16,0x55,0x52, 0x76,0x58,0x53,0x76,0x59,0x53,0x77,0x5c,0x54,0x77,0x5c,0x53,0x77,0x5d,0x53,0x77, 0x5e,0x54,0x75,0x5e,0x53,0x75,0x5d,0x54,0x77,0x5a,0x53,0x78,0x52,0x50,0x79,0x52, 0x53,0x7b,0x52,0x5d,0x86,0x55,0x5f,0x88,0x59,0x65,0x8b,0x90,0x9a,0xb3,0x08,0x09, 0x0a,0x07,0x08,0x0a,0x07,0x08,0x0a,0x0a,0x09,0x0c,0x5a,0x49,0x5b,0x48,0x39,0x45, 0x49,0x39,0x46,0x42,0x33,0x3f,0x4d,0x40,0x4b,0xc3,0xc9,0xd4,0x90,0x99,0xb1,0x5d, 0x68,0x8c,0x4e,0x58,0x7d,0x4a,0x54,0x7a,0x45,0x50,0x73,0x42,0x4d,0x6e,0x3e,0x48, 0x69,0x3c,0x45,0x66,0x3a,0x45,0x65,0x3e,0x46,0x67,0x3f,0x48,0x6b,0x46,0x4b,0x70, 0x4b,0x4f,0x76,0x4d,0x51,0x76,0x61,0x63,0x91,0x31,0x32,0x48,0x06,0x06,0x06,0x06, 0x06,0x07,0x06,0x06,0x08,0x06,0x07,0x08,0x07,0x07,0x09,0x07,0x08,0x09,0x07,0x07, 0x09,0x06,0x07,0x08,0x07,0x07,0x09,0x06,0x07,0x09,0x06,0x06,0x08,0x06,0x06,0x07, 0x06,0x06,0x06,0x06,0x06,0x06,0x05,0x06,0x06,0x05,0x05,0x06,0x04,0x04,0x05,0x03, 0x04,0x05,0x03,0x04,0x05,0x03,0x03,0x04,0x02,0x03,0x03,0x02,0x03,0x03,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x09,0x0a,0x0b,0x7e,0x88,0xa6,0x50,0x5a,0x7f,0x40,0x40,0x61,0x4f,0x50,0x7a,0x54, 0x5f,0x89,0x79,0x84,0xa5,0x86,0x7f,0x84,0x0e,0x0b,0x0d,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6d,0x6d,0x6d, 0xee,0xf0,0xf4,0xa8,0xb0,0xc6,0x96,0xa0,0xba,0x95,0x9f,0xb9,0x95,0x9f,0xb9,0x97, 0xa0,0xbc,0xaf,0xbb,0xd9,0x5a,0x5a,0x5a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x05,0x0a,0x0a,0x0a,0x16, 0x16,0x17,0x1e,0x1e,0x20,0x1c,0x1d,0x1e,0x17,0x18,0x1a,0x15,0x16,0x18,0x14,0x15, 0x17,0x16,0x17,0x1a,0x1a,0x1c,0x1e,0x20,0x22,0x24,0x1d,0x1e,0x21,0x21,0x22,0x26, 0x1a,0x1d,0x22,0x18,0x1a,0x21,0x1a,0x1c,0x25,0x1c,0x1d,0x27,0x1e,0x1e,0x28,0x1c, 0x1c,0x26,0x1a,0x1a,0x22,0x16,0x16,0x1e,0x13,0x12,0x18,0x12,0x11,0x16,0x0e,0x0e, 0x12,0x0e,0x0e,0x14,0x0e,0x0e,0x12,0x0c,0x0b,0x10,0x0e,0x0d,0x11,0x0f,0x0e,0x13, 0x7c,0x7e,0x97,0x51,0x5a,0x81,0x50,0x53,0x7a,0x5f,0x69,0x8c,0x61,0x6a,0x8d,0x63, 0x6b,0x8e,0x66,0x70,0x91,0x68,0x72,0x93,0x6c,0x77,0x96,0x6d,0x78,0x98,0x72,0x7c, 0x9a,0x75,0x7f,0x9e,0x77,0x81,0x9f,0x79,0x82,0x9f,0x7a,0x84,0xa1,0x7b,0x85,0xa0, 0x7c,0x85,0xa1,0x7c,0x83,0xa0,0x7b,0x83,0x9f,0x7b,0x83,0x9f,0x78,0x81,0x9d,0x75, 0x7e,0x9a,0x6f,0x77,0x96,0x4f,0x4e,0x76,0x56,0x60,0x84,0x76,0x7b,0x8c,0x0d,0x0c, 0x11,0x0c,0x0c,0x0f,0x0c,0x0b,0x0e,0x0b,0x0a,0x0e,0x0a,0x0a,0x0d,0x0a,0x09,0x0c, 0x0a,0x09,0x0c,0x08,0x08,0x0b,0x08,0x08,0x0a,0x09,0x09,0x0c,0x09,0x09,0x0b,0x0a, 0x0a,0x0d,0x0b,0x0a,0x0e,0x0d,0x0c,0x0f,0x0e,0x0d,0x12,0x0f,0x0e,0x12,0x11,0x0f, 0x14,0x12,0x10,0x15,0x12,0x11,0x16,0x12,0x10,0x15,0x12,0x10,0x15,0x12,0x0f,0x14, 0x12,0x0f,0x14,0x10,0x0e,0x13,0x10,0x0e,0x13,0x0f,0x0e,0x12,0x0f,0x0e,0x12,0x11, 0x0f,0x13,0x12,0x10,0x15,0x0f,0x0e,0x12,0x21,0x1b,0x22,0x3e,0x30,0x3b,0x42,0x33, 0x3f,0x9f,0xa7,0xbe,0x69,0x74,0x99,0x51,0x52,0x7d,0x66,0x72,0x97,0x68,0x73,0x98, 0x57,0x63,0x8a,0x5a,0x64,0x8c,0x29,0x2e,0x3f,0x06,0x06,0x09,0x07,0x07,0x0a,0x07, 0x08,0x0a,0x08,0x08,0x0a,0x13,0x14,0x1a,0x2d,0x31,0x3e,0x42,0x48,0x59,0x3d,0x42, 0x56,0x40,0x46,0x5c,0x51,0x58,0x6d,0x6b,0x72,0x84,0x73,0x79,0x8b,0x72,0x7a,0x8b, 0x77,0x7e,0x8e,0x6e,0x76,0x8a,0x71,0x78,0x8b,0x7a,0x81,0x92,0x83,0x88,0x97,0x79, 0x7f,0x8e,0x67,0x6e,0x7e,0x5e,0x62,0x73,0x62,0x68,0x78,0x5a,0x5f,0x71,0x61,0x67, 0x78,0x74,0x78,0x86,0x7a,0x7e,0x8a,0x7a,0x7e,0x8b,0x79,0x7e,0x8a,0x7f,0x83,0x8f, 0x82,0x86,0x92,0x79,0x7e,0x8a,0x72,0x76,0x84,0x71,0x76,0x84,0x6b,0x70,0x7e,0x57, 0x5d,0x6a,0x51,0x55,0x61,0x52,0x56,0x60,0x6b,0x6e,0x75,0x75,0x76,0x7a,0x72,0x73, 0x75,0x85,0x85,0x86,0x91,0x8c,0x91,0x88,0x81,0x86,0xa4,0x9e,0xa2,0x9d,0x98,0x9c, 0x89,0x83,0x88,0x5d,0x55,0x5c,0x38,0x2f,0x38,0x42,0x3a,0x43,0xb0,0xb4,0xc1,0x8b, 0x94,0xab,0x53,0x60,0x84,0x52,0x5c,0x81,0x60,0x6b,0x8c,0x61,0x6a,0x8c,0x2b,0x2f, 0x3b,0x1a,0x1b,0x20,0x1a,0x1c,0x22,0x1a,0x1c,0x21,0x1a,0x1c,0x22,0x1a,0x1b,0x20, 0x1a,0x1b,0x20,0x19,0x1a,0x1f,0x18,0x1a,0x1e,0x17,0x19,0x1e,0x14,0x16,0x1a,0x12, 0x13,0x16,0x55,0x51,0x76,0x57,0x50,0x76,0x59,0x53,0x77,0x5b,0x53,0x77,0x5c,0x53, 0x77,0x5c,0x53,0x77,0x5e,0x53,0x75,0x5e,0x53,0x75,0x5f,0x54,0x75,0x5a,0x53,0x78, 0x53,0x50,0x78,0x52,0x51,0x7b,0x52,0x5c,0x84,0x55,0x5f,0x88,0x58,0x63,0x8a,0x86, 0x90,0xac,0x12,0x12,0x15,0x08,0x08,0x0a,0x07,0x08,0x0a,0x07,0x07,0x09,0x59,0x49, 0x5a,0x46,0x37,0x43,0x47,0x38,0x44,0x42,0x33,0x3f,0x4b,0x3e,0x49,0xc4,0xca,0xd6, 0x8d,0x96,0xaf,0x5e,0x69,0x8e,0x52,0x5b,0x81,0x4a,0x54,0x7a,0x46,0x4f,0x73,0x41, 0x4b,0x6d,0x3f,0x49,0x6a,0x3d,0x44,0x66,0x3a,0x45,0x64,0x3d,0x46,0x65,0x3f,0x46, 0x6a,0x42,0x49,0x6d,0x47,0x4b,0x72,0x48,0x4c,0x71,0x5e,0x61,0x8d,0x33,0x33,0x47, 0x06,0x06,0x07,0x06,0x06,0x08,0x06,0x07,0x09,0x07,0x07,0x09,0x07,0x07,0x09,0x08, 0x08,0x0a,0x07,0x08,0x09,0x07,0x08,0x09,0x07,0x07,0x09,0x07,0x08,0x09,0x06,0x07, 0x09,0x06,0x06,0x08,0x06,0x06,0x07,0x06,0x06,0x06,0x05,0x06,0x06,0x05,0x05,0x06, 0x05,0x05,0x06,0x04,0x04,0x05,0x03,0x04,0x05,0x03,0x03,0x04,0x03,0x03,0x04,0x02, 0x03,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x6d,0x75,0x8f,0x53,0x5e,0x85,0x43,0x44,0x68,0x50,0x52,0x7b, 0x53,0x5f,0x89,0x6f,0x7b,0x9f,0x90,0x8d,0x93,0x1c,0x15,0x18,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xa1,0xa1,0xa1,0xd9,0xdd,0xe6,0x9f,0xa7,0xbf,0x95,0x9f,0xb9, 0x96,0xa0,0xba,0x94,0x9d,0xb8,0x9a,0xa4,0xc0,0xbe,0xc9,0xe7,0x19,0x19,0x19,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x11,0x11,0x11,0x18,0x19,0x19,0x12,0x12,0x12,0x05,0x05,0x05,0x06,0x06,0x07, 0x0c,0x0c,0x0e,0x17,0x18,0x19,0x1d,0x1e,0x1f,0x1f,0x20,0x22,0x1f,0x21,0x24,0x1a, 0x1b,0x1e,0x1a,0x1a,0x1d,0x27,0x29,0x2e,0x2d,0x2e,0x33,0x26,0x27,0x2b,0x26,0x28, 0x2c,0x32,0x34,0x39,0x2e,0x30,0x36,0x27,0x2a,0x31,0x22,0x26,0x2e,0x20,0x22,0x2e, 0x21,0x24,0x2f,0x1f,0x1f,0x2a,0x1e,0x1e,0x29,0x1b,0x1a,0x24,0x19,0x18,0x21,0x16, 0x15,0x1c,0x15,0x14,0x1b,0x17,0x1a,0x20,0x15,0x16,0x1c,0x10,0x0f,0x16,0x0f,0x0e, 0x13,0x0f,0x0f,0x14,0x79,0x7a,0x8d,0x59,0x64,0x88,0x50,0x4e,0x75,0x5c,0x64,0x88, 0x61,0x69,0x8b,0x62,0x6b,0x8c,0x64,0x6c,0x8d,0x66,0x70,0x91,0x69,0x74,0x95,0x6c, 0x76,0x96,0x72,0x7b,0x99,0x72,0x7c,0x9c,0x77,0x81,0x9f,0x78,0x81,0x9e,0x78,0x81, 0x9f,0x7b,0x85,0xa0,0x7b,0x84,0x9f,0x7b,0x83,0x9f,0x79,0x81,0x9e,0x78,0x80,0x9e, 0x78,0x7f,0x9d,0x78,0x80,0x9d,0x71,0x7a,0x98,0x51,0x5a,0x80,0x4f,0x51,0x78,0x78, 0x80,0x9d,0x25,0x24,0x29,0x0d,0x0c,0x11,0x0d,0x0c,0x11,0x0c,0x0c,0x0f,0x0b,0x0b, 0x0e,0x0b,0x0b,0x0f,0x0a,0x0a,0x0e,0x09,0x09,0x0c,0x09,0x08,0x0b,0x0a,0x0a,0x0d, 0x0a,0x0a,0x0d,0x0a,0x0a,0x0d,0x0b,0x0b,0x0e,0x0e,0x0d,0x11,0x0e,0x0e,0x12,0x10, 0x0f,0x13,0x11,0x0f,0x14,0x12,0x11,0x16,0x12,0x11,0x16,0x13,0x11,0x16,0x13,0x11, 0x16,0x12,0x11,0x16,0x12,0x10,0x15,0x11,0x0f,0x14,0x10,0x0f,0x13,0x10,0x0e,0x13, 0x11,0x0f,0x14,0x16,0x13,0x1a,0x1b,0x18,0x1f,0x15,0x12,0x17,0x1c,0x17,0x1d,0x3e, 0x2f,0x3b,0x42,0x32,0x3f,0xb2,0xb7,0xc7,0x64,0x70,0x96,0x51,0x59,0x82,0x69,0x75, 0x99,0x68,0x74,0x98,0x59,0x64,0x8c,0x5d,0x68,0x8f,0x24,0x27,0x37,0x08,0x08,0x0a, 0x09,0x09,0x0c,0x0c,0x0d,0x11,0x15,0x14,0x1c,0x23,0x25,0x32,0x3e,0x42,0x53,0x4c, 0x53,0x66,0x4d,0x54,0x68,0x52,0x59,0x6e,0x5d,0x64,0x78,0x66,0x6e,0x81,0x66,0x6d, 0x80,0x66,0x6d,0x80,0x67,0x6e,0x81,0x66,0x6d,0x80,0x69,0x6f,0x83,0x76,0x7c,0x8e, 0x7a,0x80,0x90,0x66,0x6c,0x7e,0x51,0x56,0x68,0x56,0x5b,0x6b,0x60,0x66,0x77,0x5f, 0x66,0x7a,0x62,0x69,0x7d,0x71,0x77,0x87,0x78,0x7d,0x8c,0x71,0x76,0x86,0x71,0x76, 0x84,0x7a,0x7f,0x8b,0x7e,0x82,0x8e,0x75,0x7a,0x86,0x78,0x7c,0x89,0x82,0x86,0x92, 0x86,0x8a,0x95,0x7e,0x82,0x8e,0x75,0x79,0x84,0x6f,0x73,0x7e,0x82,0x86,0x8f,0x92, 0x95,0x9b,0x86,0x88,0x8e,0x7d,0x7e,0x81,0x90,0x8b,0x90,0x7d,0x78,0x7b,0x8f,0x89, 0x8d,0x99,0x94,0x9a,0x7c,0x77,0x7e,0x49,0x41,0x4a,0x36,0x2c,0x35,0x43,0x3d,0x46, 0xb0,0xb4,0xc1,0x92,0x9a,0xb0,0x53,0x5d,0x83,0x52,0x5d,0x83,0x60,0x6b,0x8c,0x61, 0x6b,0x8c,0x53,0x5c,0x78,0x19,0x1b,0x20,0x19,0x1b,0x20,0x1a,0x1b,0x20,0x1a,0x1c, 0x22,0x1a,0x1b,0x20,0x19,0x1b,0x20,0x19,0x1b,0x20,0x18,0x1a,0x1e,0x17,0x19,0x1d, 0x15,0x16,0x1a,0x13,0x14,0x18,0x55,0x52,0x76,0x56,0x51,0x76,0x5a,0x52,0x77,0x5b, 0x52,0x76,0x5c,0x53,0x77,0x5c,0x53,0x77,0x5c,0x52,0x77,0x5e,0x53,0x75,0x5e,0x53, 0x75,0x5a,0x53,0x77,0x54,0x51,0x78,0x52,0x52,0x7a,0x52,0x5b,0x84,0x56,0x60,0x88, 0x57,0x63,0x89,0x7c,0x85,0xa4,0x21,0x20,0x23,0x08,0x09,0x0a,0x08,0x08,0x0a,0x07, 0x07,0x09,0x56,0x46,0x57,0x47,0x39,0x45,0x48,0x39,0x45,0x42,0x34,0x40,0x4a,0x3c, 0x47,0xc4,0xc9,0xd6,0x8d,0x97,0xb0,0x5a,0x65,0x8b,0x4f,0x5a,0x80,0x4b,0x54,0x7a, 0x47,0x51,0x75,0x41,0x4d,0x6d,0x3e,0x48,0x6a,0x3d,0x44,0x66,0x3a,0x46,0x65,0x3d, 0x45,0x66,0x3f,0x45,0x68,0x42,0x47,0x6b,0x44,0x4a,0x6e,0x44,0x46,0x6d,0x5b,0x5c, 0x8a,0x3b,0x37,0x50,0x06,0x06,0x06,0x06,0x06,0x08,0x06,0x07,0x09,0x08,0x08,0x0a, 0x08,0x08,0x0a,0x08,0x09,0x0a,0x08,0x09,0x0a,0x08,0x09,0x0a,0x08,0x08,0x0a,0x07, 0x08,0x09,0x07,0x08,0x09,0x06,0x07,0x09,0x06,0x06,0x08,0x06,0x06,0x07,0x06,0x06, 0x06,0x05,0x06,0x06,0x05,0x05,0x06,0x04,0x04,0x05,0x03,0x04,0x05,0x03,0x04,0x05, 0x03,0x03,0x04,0x02,0x03,0x03,0x02,0x03,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x50,0x56,0x66,0x57,0x63,0x89,0x42,0x42,0x64,0x4d,0x4e, 0x77,0x52,0x5d,0x88,0x64,0x71,0x96,0x9a,0x9b,0xa3,0x21,0x17,0x1c,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0xcf,0xcf,0xcf,0xc2,0xc8, 0xd7,0x99,0xa2,0xbb,0x96,0xa0,0xba,0x99,0xa2,0xbb,0x95,0x9f,0xba,0x9e,0xa7,0xc4, 0xa4,0xaf,0xcd,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, 0x03,0x03,0x26,0x26,0x26,0x1f,0x1f,0x20,0x1a,0x1a,0x1a,0x26,0x27,0x27,0x27,0x27, 0x27,0x0d,0x0e,0x0e,0x14,0x14,0x16,0x1b,0x1c,0x1e,0x23,0x25,0x29,0x32,0x34,0x3a, 0x44,0x46,0x4e,0x35,0x37,0x3d,0x2a,0x2c,0x30,0x3a,0x3d,0x42,0x43,0x46,0x4d,0x36, 0x39,0x3f,0x31,0x32,0x39,0x37,0x39,0x3e,0x38,0x3a,0x40,0x32,0x35,0x3d,0x2c,0x2f, 0x38,0x2a,0x2e,0x38,0x26,0x2a,0x35,0x22,0x26,0x32,0x22,0x22,0x2e,0x21,0x22,0x2e, 0x20,0x22,0x2e,0x1d,0x1e,0x28,0x1a,0x1a,0x24,0x1b,0x1e,0x26,0x24,0x26,0x2d,0x15, 0x16,0x1e,0x12,0x12,0x18,0x12,0x12,0x18,0x5e,0x5f,0x70,0x63,0x6f,0x90,0x50,0x4d, 0x74,0x5a,0x63,0x85,0x5e,0x67,0x8a,0x61,0x68,0x8a,0x61,0x6a,0x8c,0x65,0x6e,0x90, 0x67,0x71,0x92,0x6a,0x75,0x95,0x6d,0x78,0x97,0x72,0x7c,0x9c,0x76,0x80,0x9e,0x78, 0x81,0x9e,0x78,0x82,0x9e,0x7a,0x83,0xa0,0x78,0x81,0x9e,0x79,0x81,0x9d,0x7a,0x81, 0x9d,0x78,0x80,0x9c,0x76,0x7e,0x9a,0x77,0x7f,0x9c,0x73,0x7b,0x99,0x5e,0x69,0x8b, 0x4f,0x4d,0x74,0x5e,0x67,0x89,0x54,0x55,0x5c,0x0e,0x0e,0x12,0x0e,0x0e,0x12,0x0d, 0x0d,0x11,0x0c,0x0c,0x11,0x0c,0x0c,0x10,0x0b,0x0b,0x0f,0x0a,0x0a,0x0e,0x0a,0x0a, 0x0e,0x0a,0x0a,0x0e,0x0a,0x0a,0x0e,0x0a,0x0a,0x0e,0x0d,0x0c,0x11,0x0e,0x0d,0x11, 0x0f,0x0e,0x13,0x10,0x0f,0x14,0x11,0x10,0x16,0x12,0x11,0x16,0x12,0x11,0x16,0x14, 0x12,0x17,0x13,0x12,0x16,0x12,0x11,0x16,0x1d,0x1c,0x20,0x2c,0x2b,0x2f,0x24,0x23, 0x28,0x16,0x14,0x1a,0x13,0x12,0x17,0x1d,0x19,0x20,0x2b,0x25,0x2f,0x1f,0x1b,0x22, 0x1f,0x1a,0x20,0x3e,0x30,0x3b,0x42,0x33,0x3f,0xb1,0xb4,0xc3,0x61,0x6d,0x93,0x51, 0x52,0x7d,0x68,0x74,0x98,0x69,0x74,0x98,0x5d,0x69,0x90,0x5f,0x6b,0x91,0x1f,0x23, 0x30,0x0a,0x0a,0x0e,0x10,0x11,0x16,0x1c,0x1d,0x27,0x27,0x27,0x36,0x33,0x34,0x47, 0x44,0x4a,0x5e,0x51,0x57,0x6c,0x5d,0x64,0x79,0x58,0x60,0x75,0x4c,0x52,0x66,0x4a, 0x50,0x62,0x49,0x4f,0x62,0x4e,0x54,0x69,0x57,0x5e,0x6f,0x5e,0x64,0x76,0x6a,0x70, 0x82,0x72,0x78,0x89,0x68,0x6e,0x7f,0x49,0x4e,0x60,0x48,0x4e,0x5e,0x55,0x5a,0x6b, 0x62,0x67,0x79,0x5c,0x62,0x76,0x66,0x6c,0x7e,0x6f,0x75,0x86,0x6d,0x73,0x85,0x66, 0x6c,0x7f,0x67,0x6d,0x7e,0x70,0x75,0x82,0x75,0x7a,0x85,0x72,0x76,0x82,0x76,0x7a, 0x86,0x82,0x86,0x91,0x87,0x8a,0x96,0x89,0x8d,0x96,0x85,0x88,0x93,0x7e,0x82,0x8d, 0x88,0x8c,0x96,0x96,0x99,0xa1,0x89,0x8c,0x94,0x7d,0x7e,0x83,0x94,0x90,0x97,0x7f, 0x7d,0x82,0x6e,0x6a,0x72,0x69,0x66,0x72,0x4e,0x49,0x55,0x3f,0x37,0x43,0x38,0x2e, 0x38,0x35,0x2e,0x35,0xaf,0xb2,0xbe,0x94,0x9d,0xb2,0x54,0x5e,0x84,0x52,0x5d,0x83, 0x61,0x6c,0x8e,0x61,0x6c,0x8c,0x62,0x6c,0x8c,0x23,0x26,0x2f,0x18,0x1a,0x1e,0x19, 0x1a,0x1f,0x1a,0x1b,0x20,0x1a,0x1b,0x20,0x19,0x1b,0x20,0x19,0x1b,0x20,0x19,0x1a, 0x1f,0x17,0x1a,0x1e,0x16,0x17,0x1b,0x12,0x14,0x18,0x53,0x52,0x74,0x55,0x51,0x76, 0x59,0x53,0x77,0x5b,0x52,0x77,0x5c,0x53,0x76,0x5c,0x53,0x77,0x5c,0x53,0x77,0x5e, 0x53,0x75,0x5e,0x53,0x75,0x5a,0x53,0x78,0x54,0x51,0x78,0x52,0x4f,0x79,0x52,0x59, 0x82,0x54,0x5e,0x87,0x56,0x62,0x89,0x75,0x80,0x9f,0x30,0x2e,0x31,0x08,0x09,0x0a, 0x08,0x08,0x0a,0x07,0x08,0x0a,0x54,0x43,0x54,0x45,0x37,0x43,0x49,0x39,0x46,0x42, 0x35,0x41,0x4a,0x3c,0x47,0xc3,0xc9,0xd5,0x8e,0x97,0xb2,0x5b,0x68,0x8c,0x50,0x5b, 0x80,0x4b,0x55,0x79,0x48,0x51,0x76,0x42,0x4d,0x70,0x3f,0x48,0x6a,0x3b,0x44,0x65, 0x3a,0x45,0x65,0x3b,0x44,0x64,0x3f,0x45,0x68,0x41,0x48,0x6a,0x43,0x48,0x70,0x43, 0x43,0x65,0x55,0x55,0x81,0x4b,0x43,0x5d,0x06,0x06,0x08,0x06,0x07,0x09,0x08,0x08, 0x0a,0x08,0x09,0x0a,0x09,0x09,0x0a,0x0a,0x0a,0x0c,0x09,0x0a,0x0b,0x09,0x09,0x0a, 0x09,0x09,0x0a,0x08,0x09,0x0a,0x08,0x08,0x0a,0x07,0x08,0x09,0x06,0x07,0x09,0x06, 0x06,0x07,0x06,0x06,0x06,0x05,0x06,0x06,0x05,0x05,0x06,0x04,0x04,0x05,0x04,0x04, 0x05,0x03,0x04,0x05,0x03,0x03,0x04,0x03,0x03,0x04,0x02,0x03,0x03,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x27,0x29,0x2f,0x5e,0x69,0x8f,0x3c,0x3c,0x5b,0x44, 0x45,0x69,0x52,0x5d,0x86,0x62,0x6d,0x94,0xa7,0xa9,0xb4,0x21,0x18,0x1b,0x0b,0x08, 0x0a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f, 0x1f,0x1f,0xeb,0xed,0xed,0xad,0xb4,0xc9,0x99,0xa2,0xbb,0x96,0xa0,0xb9,0x95,0x9f, 0xb9,0x96,0xa0,0xbb,0xa0,0xab,0xc7,0x8b,0x95,0xa0,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x13,0x13,0x13,0x2f,0x2f,0x2f,0x30,0x30,0x31,0x03,0x03,0x03,0x04,0x05,0x05,0x0d, 0x0e,0x0e,0x2f,0x30,0x31,0x35,0x36,0x38,0x2d,0x2f,0x35,0x39,0x3d,0x45,0x44,0x48, 0x52,0x56,0x5a,0x66,0x66,0x6a,0x76,0x57,0x5b,0x66,0x46,0x4a,0x52,0x48,0x4a,0x52, 0x4c,0x4e,0x57,0x47,0x4a,0x52,0x42,0x44,0x4c,0x36,0x3a,0x41,0x34,0x36,0x3e,0x33, 0x36,0x3e,0x34,0x37,0x41,0x35,0x38,0x42,0x32,0x36,0x41,0x2e,0x32,0x3e,0x2c,0x30, 0x3c,0x34,0x38,0x43,0x3b,0x3e,0x4a,0x37,0x3b,0x46,0x2a,0x2e,0x39,0x27,0x2a,0x34, 0x2e,0x31,0x39,0x27,0x2a,0x31,0x18,0x1a,0x22,0x14,0x13,0x1a,0x3d,0x3e,0x4c,0x6d, 0x75,0x93,0x50,0x4d,0x74,0x58,0x5f,0x82,0x5f,0x66,0x87,0x5e,0x66,0x88,0x62,0x69, 0x8a,0x64,0x6c,0x8c,0x65,0x6e,0x90,0x69,0x74,0x94,0x6d,0x78,0x96,0x71,0x7b,0x9a, 0x73,0x7c,0x9c,0x77,0x81,0x9e,0x77,0x80,0x9e,0x78,0x82,0x9e,0x7a,0x82,0x9f,0x79, 0x81,0x9d,0x79,0x81,0x9c,0x78,0x80,0x9c,0x79,0x80,0x9c,0x74,0x7c,0x99,0x74,0x7b, 0x99,0x6d,0x75,0x93,0x4f,0x4f,0x74,0x52,0x5c,0x81,0x76,0x79,0x8b,0x0f,0x0f,0x15, 0x0f,0x0e,0x14,0x0e,0x0e,0x13,0x0e,0x0e,0x12,0x0d,0x0d,0x12,0x0c,0x0c,0x11,0x0a, 0x0a,0x0e,0x0a,0x0a,0x0e,0x0b,0x0b,0x0f,0x0b,0x0b,0x0f,0x0c,0x0c,0x10,0x0d,0x0d, 0x12,0x0e,0x0e,0x13,0x0f,0x0f,0x14,0x11,0x10,0x16,0x12,0x11,0x16,0x12,0x12,0x17, 0x14,0x12,0x19,0x14,0x12,0x18,0x14,0x12,0x19,0x14,0x12,0x18,0x28,0x28,0x2c,0x33, 0x33,0x37,0x28,0x26,0x2c,0x3a,0x38,0x3d,0x2f,0x2e,0x32,0x2c,0x2b,0x2f,0x22,0x1e, 0x26,0x22,0x1e,0x26,0x22,0x1c,0x24,0x3e,0x30,0x3c,0x41,0x33,0x3f,0xb3,0xb4,0xc1, 0x60,0x6b,0x92,0x51,0x53,0x7d,0x69,0x75,0x98,0x6a,0x77,0x9a,0x5e,0x6a,0x91,0x62, 0x6f,0x93,0x1b,0x1d,0x28,0x0d,0x0d,0x11,0x1a,0x19,0x22,0x27,0x28,0x36,0x34,0x3a, 0x4b,0x4c,0x52,0x66,0x5e,0x65,0x78,0x59,0x60,0x76,0x53,0x5a,0x70,0x44,0x4a,0x5d, 0x3d,0x42,0x54,0x3e,0x42,0x53,0x4d,0x52,0x63,0x56,0x5c,0x6c,0x66,0x6a,0x7a,0x6c, 0x71,0x80,0x6a,0x70,0x80,0x5b,0x62,0x73,0x57,0x5e,0x6f,0x53,0x58,0x69,0x4e,0x53, 0x63,0x53,0x58,0x67,0x54,0x59,0x69,0x55,0x5b,0x6a,0x63,0x68,0x78,0x6a,0x70,0x80, 0x66,0x6d,0x7e,0x59,0x5f,0x72,0x59,0x5f,0x72,0x66,0x6b,0x7b,0x6f,0x74,0x82,0x75, 0x7a,0x87,0x78,0x7d,0x8a,0x7e,0x82,0x8e,0x80,0x84,0x8f,0x83,0x87,0x92,0x85,0x89, 0x94,0x83,0x87,0x92,0x8c,0x90,0x9a,0x91,0x94,0x9e,0x88,0x8b,0x95,0x77,0x7a,0x81, 0x9b,0x98,0xa0,0x92,0x91,0x98,0x64,0x63,0x70,0x4f,0x4e,0x63,0x42,0x3d,0x4f,0x43, 0x3f,0x4e,0x46,0x3d,0x49,0x36,0x2f,0x37,0xa5,0xa8,0xb5,0x97,0x9d,0xb2,0x55,0x60, 0x85,0x53,0x5e,0x83,0x62,0x6d,0x90,0x62,0x6c,0x8e,0x5b,0x67,0x89,0x55,0x5f,0x79, 0x17,0x19,0x1d,0x17,0x19,0x1e,0x19,0x1a,0x1f,0x19,0x1a,0x20,0x1a,0x1c,0x22,0x1a, 0x1c,0x21,0x1a,0x1b,0x20,0x18,0x1a,0x1e,0x16,0x17,0x1c,0x13,0x15,0x19,0x53,0x51, 0x74,0x55,0x51,0x75,0x55,0x50,0x76,0x59,0x52,0x77,0x5c,0x53,0x76,0x5c,0x53,0x77, 0x5c,0x52,0x77,0x5c,0x53,0x77,0x5c,0x53,0x77,0x5b,0x53,0x77,0x57,0x51,0x77,0x51, 0x50,0x78,0x52,0x58,0x81,0x54,0x5e,0x87,0x56,0x62,0x88,0x71,0x7c,0x9c,0x3d,0x3b, 0x40,0x08,0x09,0x0a,0x08,0x09,0x0a,0x07,0x08,0x0a,0x52,0x44,0x53,0x46,0x38,0x44, 0x47,0x39,0x45,0x42,0x33,0x3f,0x4a,0x3e,0x49,0xc5,0xc9,0xd6,0x8d,0x96,0xb0,0x5c, 0x67,0x8b,0x50,0x5c,0x82,0x4c,0x56,0x7b,0x48,0x51,0x75,0x44,0x4c,0x6e,0x3f,0x48, 0x6a,0x3c,0x46,0x66,0x3a,0x44,0x65,0x3a,0x43,0x63,0x3f,0x47,0x67,0x42,0x47,0x6c, 0x44,0x47,0x6e,0x41,0x42,0x66,0x51,0x52,0x7a,0x5f,0x4f,0x73,0x08,0x09,0x0b,0x07, 0x07,0x09,0x07,0x08,0x0a,0x09,0x09,0x0a,0x09,0x0a,0x0b,0x0a,0x0a,0x0c,0x09,0x0a, 0x0b,0x0a,0x0a,0x0c,0x09,0x0a,0x0b,0x09,0x09,0x0a,0x08,0x09,0x0a,0x08,0x08,0x0a, 0x07,0x08,0x09,0x06,0x07,0x09,0x06,0x06,0x08,0x06,0x06,0x07,0x06,0x06,0x06,0x05, 0x05,0x06,0x04,0x04,0x05,0x03,0x04,0x05,0x03,0x03,0x04,0x03,0x03,0x04,0x02,0x03, 0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0a,0x0b,0x0d,0x63,0x6e,0x91,0x42,0x46,0x69, 0x3f,0x40,0x61,0x52,0x5d,0x86,0x62,0x6e,0x93,0xc4,0xc7,0xd0,0x22,0x19,0x1d,0x12, 0x0d,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x57,0x57,0x57,0xdf,0xe1,0xe9,0x9d,0xa7,0xbf,0x98, 0xa1,0xba,0x96,0xa0,0xb9,0x95,0x9f,0xb9,0x97,0xa1,0xbb,0xa9,0xb4,0xd5,0x48,0x48, 0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x0d,0x0d,0x0d,0x20,0x20,0x20,0x11,0x11,0x11,0x19,0x19,0x1a,0x03,0x03,0x03, 0x07,0x07,0x08,0x11,0x12,0x12,0x26,0x27,0x2a,0x37,0x3a,0x3f,0x46,0x4a,0x56,0x51, 0x56,0x63,0x5a,0x5f,0x6d,0x67,0x6c,0x79,0x69,0x6e,0x7b,0x5e,0x62,0x6e,0x5a,0x5f, 0x6a,0x5e,0x61,0x6c,0x50,0x54,0x5f,0x47,0x4a,0x54,0x41,0x44,0x4d,0x42,0x44,0x4d, 0x3d,0x40,0x48,0x3e,0x41,0x4a,0x3f,0x42,0x4b,0x41,0x44,0x4e,0x3f,0x42,0x4c,0x3e, 0x41,0x4b,0x3c,0x40,0x4a,0x43,0x47,0x52,0x4d,0x51,0x5a,0x49,0x4c,0x56,0x3d,0x40, 0x4b,0x31,0x35,0x3f,0x39,0x3c,0x45,0x3b,0x3e,0x46,0x2f,0x32,0x3a,0x22,0x26,0x2e, 0x2f,0x33,0x3e,0x78,0x7e,0x98,0x53,0x4d,0x71,0x58,0x5c,0x7e,0x60,0x65,0x86,0x60, 0x66,0x87,0x60,0x67,0x88,0x63,0x6b,0x8b,0x65,0x6d,0x8e,0x68,0x70,0x91,0x6a,0x75, 0x95,0x6c,0x77,0x95,0x73,0x7d,0x9a,0x75,0x7e,0x9c,0x77,0x80,0x9e,0x7a,0x83,0x9f, 0x78,0x81,0x9e,0x77,0x7f,0x9b,0x78,0x7e,0x9b,0x78,0x7f,0x9b,0x77,0x7e,0x9a,0x76, 0x7d,0x9a,0x74,0x7c,0x98,0x6f,0x78,0x96,0x52,0x5b,0x7f,0x4f,0x4e,0x74,0x72,0x78, 0x96,0x1f,0x1e,0x24,0x10,0x10,0x16,0x10,0x10,0x16,0x10,0x0f,0x15,0x0e,0x0e,0x14, 0x0e,0x0e,0x14,0x0e,0x0e,0x12,0x0d,0x0d,0x12,0x0c,0x0c,0x10,0x0d,0x0d,0x12,0x0e, 0x0e,0x12,0x0e,0x0e,0x13,0x0e,0x0e,0x14,0x10,0x10,0x16,0x12,0x11,0x16,0x12,0x11, 0x17,0x14,0x12,0x19,0x14,0x13,0x1a,0x14,0x13,0x19,0x14,0x13,0x19,0x14,0x13,0x19, 0x33,0x32,0x37,0x1c,0x1b,0x21,0x12,0x11,0x17,0x14,0x13,0x19,0x24,0x24,0x29,0x29, 0x28,0x2d,0x1b,0x18,0x1e,0x22,0x1e,0x26,0x26,0x20,0x28,0x41,0x32,0x3d,0x40,0x32, 0x3e,0xb2,0xb2,0xbf,0x5d,0x69,0x8f,0x51,0x4e,0x79,0x6e,0x7a,0x9d,0x6d,0x79,0x9d, 0x5e,0x6b,0x92,0x63,0x6e,0x92,0x17,0x19,0x22,0x12,0x11,0x16,0x21,0x1f,0x2a,0x32, 0x36,0x46,0x5f,0x65,0x76,0x77,0x7d,0x8e,0x73,0x79,0x8c,0x5e,0x66,0x7b,0x4c,0x52, 0x67,0x42,0x46,0x5a,0x44,0x49,0x5a,0x55,0x5a,0x6a,0x62,0x68,0x78,0x66,0x6c,0x7d, 0x62,0x67,0x78,0x68,0x6e,0x7f,0x67,0x6e,0x7f,0x69,0x6e,0x80,0x62,0x68,0x7a,0x5b, 0x61,0x72,0x51,0x56,0x66,0x49,0x4e,0x5e,0x43,0x48,0x56,0x46,0x4b,0x5a,0x51,0x56, 0x66,0x5e,0x64,0x76,0x60,0x66,0x78,0x53,0x5a,0x6e,0x51,0x57,0x6a,0x5b,0x61,0x72, 0x66,0x6c,0x7d,0x6e,0x75,0x85,0x6e,0x74,0x85,0x74,0x7a,0x8a,0x79,0x7e,0x8e,0x78, 0x7d,0x8c,0x74,0x78,0x86,0x7e,0x82,0x8d,0x86,0x8a,0x96,0x8e,0x91,0x9d,0x88,0x8d, 0x97,0x82,0x84,0x8c,0x9a,0x98,0xa2,0x96,0x95,0x9e,0x75,0x75,0x80,0x4e,0x4c,0x5a, 0x40,0x3c,0x48,0x3c,0x35,0x41,0x4a,0x43,0x4d,0x51,0x4c,0x55,0x8a,0x89,0x93,0x9a, 0xa1,0xb5,0x56,0x61,0x86,0x54,0x5f,0x84,0x62,0x6d,0x90,0x63,0x6d,0x90,0x57,0x62, 0x86,0x5d,0x69,0x8a,0x3d,0x43,0x56,0x17,0x19,0x1e,0x17,0x19,0x1e,0x19,0x1a,0x20, 0x1a,0x1b,0x20,0x1a,0x1b,0x20,0x19,0x1b,0x20,0x18,0x1a,0x1e,0x16,0x17,0x1b,0x14, 0x16,0x1a,0x54,0x50,0x75,0x55,0x51,0x76,0x56,0x51,0x76,0x59,0x52,0x77,0x5c,0x53, 0x77,0x5c,0x53,0x77,0x5c,0x52,0x77,0x5e,0x53,0x75,0x5e,0x53,0x75,0x5a,0x52,0x77, 0x57,0x51,0x77,0x51,0x50,0x79,0x52,0x56,0x7e,0x53,0x5e,0x86,0x57,0x63,0x89,0x6f, 0x7a,0x9b,0x4a,0x47,0x4c,0x09,0x0a,0x0b,0x08,0x09,0x0a,0x07,0x08,0x0a,0x51,0x42, 0x51,0x4f,0x3f,0x4d,0x43,0x34,0x40,0x42,0x34,0x3f,0x4d,0x3f,0x4c,0xc5,0xc9,0xd6, 0x8d,0x96,0xaf,0x5b,0x67,0x8a,0x50,0x5c,0x81,0x4b,0x56,0x7c,0x48,0x53,0x75,0x42, 0x4e,0x6f,0x3e,0x47,0x69,0x3a,0x44,0x65,0x39,0x44,0x64,0x3b,0x43,0x65,0x3e,0x46, 0x66,0x42,0x47,0x6b,0x46,0x49,0x6d,0x40,0x41,0x63,0x51,0x51,0x79,0x63,0x50,0x70, 0x30,0x28,0x35,0x07,0x07,0x09,0x07,0x08,0x0a,0x09,0x09,0x0a,0x09,0x0a,0x0b,0x0a, 0x0a,0x0c,0x0a,0x0a,0x0c,0x0a,0x0a,0x0c,0x09,0x0a,0x0b,0x09,0x09,0x0a,0x08,0x09, 0x0a,0x08,0x08,0x0a,0x07,0x08,0x09,0x06,0x07,0x09,0x06,0x06,0x08,0x06,0x06,0x07, 0x06,0x06,0x06,0x05,0x06,0x06,0x05,0x05,0x06,0x03,0x04,0x05,0x03,0x04,0x05,0x03, 0x03,0x04,0x02,0x03,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x6e,0x89,0x49,0x53, 0x78,0x3c,0x3c,0x5d,0x4e,0x58,0x7f,0x5d,0x69,0x90,0xc7,0xcc,0xd9,0x32,0x2a,0x2d, 0x20,0x17,0x1b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x93,0x93,0x93, 0xbb,0xc1,0xd2,0x98,0xa1,0xba,0x96,0xa0,0xba,0x94,0x9d,0xb8,0x95,0x9f,0xb9,0x98, 0xa2,0xbd,0xb5,0xc1,0xe4,0x0d,0x0d,0x0d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x17,0x17,0x17,0x16,0x16,0x16,0x00,0x00,0x00,0x00,0x00, 0x00,0x06,0x06,0x06,0x12,0x12,0x14,0x21,0x22,0x26,0x32,0x34,0x3a,0x46,0x4a,0x53, 0x5e,0x62,0x6e,0x60,0x65,0x73,0x5e,0x63,0x71,0x64,0x69,0x76,0x5d,0x61,0x6e,0x51, 0x55,0x62,0x59,0x5e,0x6a,0x62,0x67,0x76,0x5a,0x5f,0x6e,0x50,0x54,0x61,0x4e,0x52, 0x5d,0x4e,0x52,0x5c,0x4b,0x4e,0x58,0x46,0x4a,0x52,0x4e,0x52,0x5a,0x52,0x56,0x5e, 0x52,0x56,0x5e,0x4d,0x50,0x59,0x4b,0x4f,0x58,0x46,0x4a,0x54,0x43,0x47,0x52,0x43, 0x47,0x52,0x3d,0x41,0x4c,0x32,0x36,0x42,0x32,0x36,0x41,0x48,0x4a,0x53,0x4a,0x4d, 0x55,0x32,0x36,0x3f,0x2a,0x2d,0x37,0x84,0x8b,0xa2,0x58,0x50,0x70,0x54,0x54,0x76, 0x5f,0x63,0x82,0x5f,0x64,0x83,0x60,0x66,0x85,0x60,0x67,0x88,0x62,0x6a,0x8b,0x65, 0x6e,0x8e,0x69,0x73,0x91,0x6b,0x76,0x95,0x71,0x7c,0x9a,0x73,0x7e,0x9b,0x77,0x80, 0x9d,0x76,0x81,0x9d,0x76,0x7f,0x9b,0x7a,0x81,0x9d,0x77,0x7e,0x9a,0x78,0x7e,0x9a, 0x77,0x7e,0x9b,0x76,0x7d,0x9a,0x75,0x7c,0x99,0x71,0x78,0x95,0x5c,0x65,0x87,0x4e, 0x4c,0x72,0x59,0x63,0x85,0x4f,0x4f,0x5a,0x12,0x12,0x18,0x12,0x12,0x18,0x12,0x11, 0x17,0x11,0x11,0x17,0x11,0x11,0x16,0x0f,0x0f,0x15,0x10,0x10,0x16,0x0e,0x0f,0x14, 0x0f,0x0f,0x15,0x10,0x0f,0x15,0x10,0x0f,0x15,0x10,0x10,0x16,0x12,0x11,0x17,0x12, 0x12,0x17,0x12,0x12,0x19,0x14,0x13,0x1a,0x2f,0x2d,0x33,0x38,0x37,0x3d,0x3a,0x39, 0x3f,0x3a,0x39,0x3e,0x3e,0x3b,0x41,0x19,0x16,0x1e,0x19,0x16,0x1e,0x18,0x16,0x1c, 0x15,0x13,0x1a,0x14,0x13,0x1a,0x1c,0x19,0x20,0x24,0x20,0x28,0x27,0x22,0x2a,0x41, 0x34,0x3f,0x41,0x33,0x3e,0xae,0xad,0xb9,0x5a,0x67,0x8c,0x52,0x5d,0x86,0x75,0x81, 0xa2,0x72,0x7e,0x9f,0x64,0x70,0x95,0x64,0x6f,0x94,0x16,0x17,0x20,0x17,0x18,0x21, 0x29,0x2d,0x3b,0x56,0x5b,0x6c,0x7b,0x81,0x91,0x7b,0x81,0x92,0x6f,0x76,0x8a,0x5e, 0x66,0x7b,0x54,0x5a,0x70,0x4e,0x53,0x67,0x52,0x59,0x6a,0x5a,0x61,0x72,0x60,0x66, 0x77,0x62,0x68,0x7a,0x64,0x6a,0x7c,0x64,0x6a,0x7c,0x64,0x6a,0x7b,0x5f,0x65,0x77, 0x5a,0x5e,0x6d,0x52,0x56,0x66,0x4e,0x51,0x5f,0x46,0x4a,0x58,0x3e,0x41,0x4e,0x3e, 0x40,0x4d,0x3e,0x40,0x50,0x45,0x49,0x5a,0x41,0x47,0x5b,0x42,0x47,0x5f,0x47,0x4e, 0x64,0x51,0x56,0x6b,0x5e,0x64,0x77,0x66,0x6c,0x7e,0x66,0x6c,0x80,0x6d,0x73,0x87, 0x73,0x7a,0x8d,0x74,0x7a,0x8c,0x6c,0x72,0x83,0x6a,0x6f,0x7e,0x6f,0x74,0x82,0x76, 0x7a,0x89,0x7f,0x83,0x8e,0x77,0x7b,0x85,0x86,0x86,0x94,0x85,0x85,0x90,0x89,0x87, 0x8f,0x62,0x60,0x69,0x5b,0x54,0x5e,0x4f,0x48,0x52,0x4f,0x49,0x52,0x5d,0x58,0x60, 0x91,0x90,0x9a,0xa0,0xa6,0xb9,0x58,0x64,0x85,0x50,0x54,0x79,0x63,0x6f,0x90,0x62, 0x6d,0x8f,0x56,0x62,0x86,0x55,0x5f,0x84,0x60,0x6a,0x8b,0x19,0x1b,0x20,0x17,0x19, 0x1e,0x18,0x1a,0x1e,0x19,0x1a,0x20,0x1a,0x1c,0x21,0x1a,0x1b,0x21,0x18,0x1a,0x1e, 0x16,0x17,0x1c,0x14,0x15,0x19,0x53,0x50,0x73,0x53,0x51,0x76,0x55,0x50,0x76,0x5a, 0x53,0x77,0x5b,0x52,0x77,0x5c,0x53,0x77,0x5c,0x52,0x77,0x5c,0x53,0x77,0x5c,0x53, 0x77,0x5a,0x52,0x77,0x57,0x51,0x77,0x51,0x50,0x78,0x52,0x55,0x7f,0x53,0x5c,0x85, 0x56,0x62,0x88,0x72,0x7d,0x9d,0x55,0x53,0x58,0x09,0x0a,0x0b,0x09,0x09,0x0b,0x07, 0x08,0x0a,0x4b,0x3d,0x4b,0x52,0x42,0x51,0x42,0x34,0x3e,0x42,0x34,0x3f,0x52,0x45, 0x51,0xc5,0xc9,0xd6,0x8e,0x97,0xb1,0x5b,0x65,0x8c,0x50,0x5a,0x82,0x4c,0x55,0x7b, 0x49,0x53,0x77,0x41,0x4d,0x6f,0x40,0x49,0x6c,0x3c,0x44,0x64,0x3a,0x43,0x64,0x3a, 0x42,0x64,0x3f,0x46,0x67,0x41,0x47,0x6a,0x45,0x48,0x6c,0x42,0x43,0x64,0x4f,0x4f, 0x75,0x62,0x4e,0x6d,0x34,0x29,0x3b,0x13,0x12,0x16,0x07,0x08,0x0a,0x08,0x09,0x0a, 0x09,0x0a,0x0b,0x0a,0x0a,0x0c,0x0a,0x0a,0x0c,0x0a,0x0a,0x0d,0x0a,0x0a,0x0c,0x09, 0x0a,0x0b,0x09,0x09,0x0a,0x08,0x08,0x0a,0x07,0x08,0x09,0x06,0x07,0x09,0x06,0x06, 0x08,0x06,0x06,0x07,0x06,0x06,0x06,0x05,0x06,0x06,0x05,0x05,0x06,0x05,0x05,0x06, 0x04,0x04,0x05,0x03,0x04,0x05,0x02,0x03,0x03,0x02,0x03,0x03,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0x59,0x6c,0x55, 0x5f,0x84,0x40,0x45,0x68,0x4c,0x56,0x7e,0x5a,0x65,0x8c,0xb6,0xbd,0xcf,0x51,0x4a, 0x4d,0x20,0x17,0x1b,0x05,0x04,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x09,0x09,0x09,0xd5,0xd5,0xd7,0xa1,0xa9,0xc1,0x93,0x9c,0xb8,0x96,0xa0,0xba, 0x94,0x9d,0xb8,0x94,0x9d,0xb8,0xa0,0xaa,0xc5,0xaf,0xba,0xcf,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1b,0x1b,0x1b,0x10,0x10,0x10,0x00, 0x00,0x00,0x02,0x02,0x02,0x0a,0x0a,0x0b,0x1c,0x1d,0x20,0x25,0x26,0x2c,0x43,0x47, 0x51,0x59,0x5d,0x6a,0x63,0x67,0x74,0x5f,0x63,0x70,0x53,0x58,0x64,0x4e,0x53,0x5e, 0x49,0x4d,0x59,0x42,0x46,0x52,0x47,0x4b,0x58,0x53,0x59,0x68,0x5a,0x5e,0x6d,0x5c, 0x62,0x6f,0x6c,0x6f,0x7a,0x71,0x74,0x7e,0x62,0x66,0x72,0x56,0x5a,0x65,0x55,0x59, 0x63,0x5c,0x5f,0x67,0x5a,0x5e,0x66,0x59,0x5b,0x64,0x56,0x5a,0x64,0x4b,0x4f,0x5a, 0x43,0x47,0x52,0x3b,0x40,0x4c,0x36,0x3b,0x48,0x32,0x36,0x43,0x30,0x34,0x41,0x40, 0x44,0x4e,0x55,0x58,0x60,0x4d,0x50,0x5a,0x3a,0x3e,0x48,0x75,0x7c,0x90,0x54,0x4e, 0x71,0x55,0x4e,0x6f,0x60,0x62,0x80,0x61,0x63,0x82,0x61,0x64,0x84,0x60,0x65,0x85, 0x62,0x69,0x88,0x63,0x6c,0x8c,0x66,0x6f,0x8f,0x6a,0x74,0x93,0x75,0x80,0x9c,0x7f, 0x89,0xa2,0x83,0x8b,0xa6,0x78,0x83,0x9e,0x76,0x80,0x9b,0x76,0x7f,0x9b,0x78,0x7f, 0x9b,0x77,0x7d,0x99,0x76,0x7d,0x98,0x74,0x7b,0x98,0x74,0x7b,0x98,0x71,0x78,0x96, 0x66,0x6e,0x8e,0x4e,0x4d,0x73,0x4f,0x57,0x7c,0x63,0x67,0x7b,0x13,0x13,0x1a,0x13, 0x13,0x1a,0x13,0x13,0x1a,0x13,0x13,0x1a,0x12,0x12,0x1a,0x12,0x12,0x18,0x12,0x12, 0x18,0x12,0x12,0x18,0x12,0x12,0x18,0x12,0x12,0x18,0x12,0x12,0x18,0x12,0x12,0x18, 0x12,0x12,0x19,0x14,0x13,0x1a,0x14,0x14,0x1b,0x16,0x15,0x1c,0x1e,0x1c,0x24,0x20, 0x1d,0x24,0x22,0x1e,0x26,0x25,0x20,0x2a,0x38,0x33,0x3c,0x28,0x23,0x2d,0x29,0x24, 0x2e,0x28,0x23,0x2d,0x22,0x1e,0x26,0x1e,0x1b,0x23,0x23,0x1f,0x28,0x26,0x22,0x2b, 0x26,0x21,0x2a,0x41,0x33,0x3f,0x40,0x33,0x3f,0xaf,0xae,0xb8,0x5c,0x69,0x8e,0x5a, 0x65,0x8e,0x7c,0x88,0xa7,0x74,0x80,0xa1,0x68,0x73,0x97,0x65,0x70,0x93,0x17,0x19, 0x22,0x26,0x28,0x32,0x40,0x45,0x52,0x6e,0x72,0x82,0x83,0x89,0x97,0x76,0x7c,0x8f, 0x69,0x70,0x85,0x5a,0x62,0x78,0x54,0x5b,0x71,0x52,0x59,0x6b,0x4f,0x55,0x65,0x53, 0x59,0x66,0x56,0x5c,0x6c,0x55,0x5b,0x6c,0x53,0x57,0x69,0x52,0x55,0x66,0x4b,0x4e, 0x5e,0x4a,0x4b,0x5b,0x47,0x49,0x59,0x45,0x46,0x56,0x41,0x43,0x54,0x3a,0x3c,0x4b, 0x36,0x37,0x49,0x38,0x3a,0x4c,0x3a,0x3e,0x50,0x3e,0x42,0x56,0x42,0x44,0x5b,0x44, 0x46,0x5e,0x46,0x4c,0x65,0x49,0x4e,0x66,0x4b,0x52,0x66,0x57,0x5d,0x72,0x59,0x60, 0x75,0x5f,0x66,0x7c,0x65,0x6c,0x82,0x66,0x6d,0x82,0x66,0x6d,0x82,0x68,0x6e,0x83, 0x69,0x6f,0x80,0x6c,0x72,0x81,0x6c,0x71,0x7d,0x6a,0x6e,0x7c,0x69,0x6b,0x81,0x74, 0x77,0x87,0x99,0x97,0x9c,0x84,0x81,0x85,0x8c,0x86,0x8a,0x88,0x82,0x86,0x6b,0x64, 0x6c,0x55,0x50,0x56,0x8b,0x8a,0x93,0xa3,0xaa,0xbc,0x5d,0x66,0x88,0x50,0x56,0x7b, 0x63,0x6e,0x8f,0x64,0x6f,0x90,0x61,0x6b,0x8e,0x54,0x58,0x7e,0x5a,0x65,0x89,0x4b, 0x53,0x6c,0x17,0x19,0x1e,0x18,0x1a,0x1f,0x1a,0x1b,0x20,0x1a,0x1b,0x21,0x1a,0x1b, 0x21,0x19,0x1a,0x20,0x17,0x19,0x1e,0x14,0x16,0x1a,0x52,0x50,0x73,0x52,0x50,0x77, 0x54,0x51,0x76,0x58,0x52,0x76,0x5a,0x52,0x77,0x5c,0x52,0x77,0x5c,0x52,0x77,0x5c, 0x53,0x77,0x5c,0x53,0x77,0x5b,0x52,0x77,0x58,0x51,0x77,0x52,0x50,0x79,0x52,0x54, 0x7c,0x53,0x5d,0x86,0x56,0x62,0x88,0x77,0x80,0xa0,0x5e,0x5b,0x61,0x09,0x0a,0x0b, 0x08,0x09,0x0a,0x08,0x09,0x0a,0x42,0x36,0x43,0x52,0x42,0x52,0x42,0x34,0x3f,0x3f, 0x32,0x3c,0x61,0x57,0x63,0xc4,0xc8,0xd5,0x8d,0x97,0xb1,0x59,0x65,0x8a,0x52,0x5d, 0x82,0x4c,0x55,0x7b,0x49,0x52,0x75,0x44,0x4d,0x72,0x3f,0x49,0x6a,0x3a,0x45,0x66, 0x39,0x42,0x63,0x3b,0x43,0x65,0x3e,0x43,0x66,0x41,0x46,0x68,0x45,0x48,0x6d,0x41, 0x43,0x66,0x4e,0x4f,0x74,0x58,0x47,0x62,0x34,0x28,0x3a,0x30,0x2c,0x40,0x07,0x08, 0x0a,0x08,0x09,0x0a,0x0a,0x0a,0x0c,0x0a,0x0a,0x0c,0x0a,0x0b,0x0d,0x0a,0x0b,0x0d, 0x0a,0x0a,0x0d,0x0a,0x0a,0x0c,0x09,0x09,0x0a,0x08,0x09,0x0a,0x08,0x08,0x0a,0x07, 0x08,0x09,0x06,0x07,0x09,0x06,0x06,0x08,0x06,0x06,0x07,0x05,0x06,0x06,0x05,0x06, 0x06,0x05,0x05,0x06,0x04,0x04,0x05,0x03,0x04,0x05,0x03,0x03,0x04,0x02,0x03,0x03, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x32,0x34,0x3c, 0x61,0x6c,0x90,0x43,0x4c,0x6e,0x47,0x50,0x76,0x58,0x64,0x8b,0x9e,0xa6,0xbe,0x83, 0x7f,0x7f,0x19,0x11,0x15,0x12,0x0e,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0x3f,0x3f,0xcb,0xd0,0xdd,0x96,0xa0, 0xb9,0x96,0xa0,0xb9,0x98,0xa1,0xba,0x94,0x9d,0xb8,0x95,0x9f,0xb9,0x9f,0xa8,0xc7, 0x75,0x75,0x75,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x37,0x37,0x37, 0x0a,0x0a,0x0a,0x00,0x00,0x00,0x06,0x06,0x06,0x15,0x16,0x18,0x2e,0x2f,0x35,0x38, 0x3b,0x43,0x52,0x57,0x62,0x62,0x66,0x73,0x5c,0x60,0x6b,0x4e,0x52,0x5d,0x3c,0x40, 0x4a,0x32,0x36,0x40,0x2e,0x31,0x3c,0x28,0x2b,0x36,0x2e,0x32,0x3d,0x3d,0x42,0x4e, 0x4b,0x50,0x5c,0x58,0x5d,0x6a,0x6a,0x6e,0x7a,0x72,0x76,0x82,0x76,0x7a,0x86,0x71, 0x75,0x80,0x61,0x65,0x70,0x57,0x5c,0x67,0x4c,0x51,0x5e,0x4f,0x53,0x60,0x56,0x5a, 0x65,0x59,0x5d,0x67,0x53,0x57,0x62,0x46,0x4a,0x56,0x40,0x44,0x51,0x3d,0x41,0x4e, 0x3a,0x3e,0x4b,0x38,0x3d,0x4a,0x47,0x4a,0x56,0x60,0x63,0x6c,0x5d,0x5f,0x69,0x71, 0x77,0x89,0x51,0x50,0x73,0x5a,0x51,0x70,0x61,0x61,0x7f,0x5d,0x61,0x82,0x5e,0x62, 0x83,0x62,0x65,0x84,0x62,0x68,0x86,0x62,0x69,0x89,0x5f,0x67,0x88,0x62,0x6b,0x8b, 0x7b,0x83,0x9f,0x8f,0x97,0xae,0x97,0x9e,0xb3,0x87,0x90,0xa8,0x7b,0x85,0xa0,0x78, 0x80,0x9c,0x78,0x7f,0x9b,0x78,0x7e,0x9a,0x76,0x7d,0x98,0x75,0x7c,0x98,0x72,0x78, 0x96,0x71,0x78,0x95,0x6d,0x75,0x93,0x51,0x5a,0x7e,0x4e,0x4d,0x74,0x68,0x70,0x8f, 0x21,0x21,0x28,0x16,0x16,0x1e,0x16,0x16,0x1e,0x16,0x16,0x1e,0x16,0x16,0x1e,0x15, 0x16,0x1d,0x15,0x15,0x1d,0x15,0x16,0x1d,0x15,0x16,0x1d,0x15,0x16,0x1d,0x14,0x15, 0x1c,0x15,0x15,0x1c,0x15,0x14,0x1c,0x16,0x15,0x1d,0x42,0x42,0x48,0x1b,0x1a,0x22, 0x20,0x1d,0x26,0x26,0x22,0x2c,0x2e,0x28,0x33,0x33,0x2d,0x38,0x36,0x2e,0x3a,0x36, 0x2e,0x3a,0x38,0x30,0x3d,0x3a,0x31,0x3e,0x35,0x2e,0x3c,0x2e,0x2a,0x36,0x2d,0x28, 0x35,0x2c,0x27,0x32,0x24,0x1f,0x28,0x3f,0x35,0x43,0x55,0x4a,0x55,0xb9,0xba,0xc4, 0x70,0x78,0x9a,0x64,0x6e,0x92,0x81,0x8a,0xa7,0x76,0x81,0xa1,0x6e,0x78,0x9a,0x67, 0x72,0x95,0x1a,0x1c,0x25,0x28,0x2c,0x36,0x48,0x4d,0x5c,0x6e,0x72,0x82,0x7a,0x80, 0x90,0x6a,0x71,0x86,0x5e,0x66,0x7a,0x56,0x5e,0x72,0x56,0x5a,0x6d,0x4a,0x4e,0x5e, 0x42,0x43,0x50,0x40,0x41,0x4e,0x42,0x43,0x52,0x42,0x43,0x52,0x43,0x43,0x52,0x41, 0x41,0x52,0x3c,0x3d,0x4e,0x3a,0x3a,0x4d,0x3b,0x3b,0x4e,0x3c,0x3c,0x4f,0x3c,0x3a, 0x4d,0x3a,0x37,0x4a,0x40,0x38,0x4a,0x40,0x3a,0x4c,0x43,0x3c,0x4e,0x44,0x3e,0x53, 0x44,0x42,0x56,0x43,0x42,0x5a,0x48,0x46,0x5e,0x49,0x47,0x61,0x4a,0x4a,0x63,0x51, 0x57,0x6f,0x55,0x5a,0x72,0x59,0x5e,0x75,0x5e,0x64,0x7b,0x61,0x69,0x80,0x6c,0x73, 0x89,0x74,0x7b,0x8e,0x78,0x7e,0x90,0x7e,0x84,0x92,0x7d,0x81,0x8c,0x70,0x73,0x80, 0x69,0x6a,0x7e,0x66,0x68,0x7c,0xa2,0x9f,0xa2,0xa1,0x9d,0x9f,0x9f,0x9b,0x9d,0xa4, 0x9f,0xa2,0x95,0x8f,0x93,0x5b,0x57,0x5e,0x76,0x74,0x7e,0x92,0x98,0xaa,0x56,0x60, 0x81,0x57,0x61,0x84,0x6d,0x76,0x95,0x68,0x73,0x93,0x65,0x70,0x91,0x5a,0x64,0x88, 0x54,0x5e,0x81,0x5c,0x67,0x89,0x17,0x19,0x1e,0x18,0x1a,0x1f,0x19,0x1a,0x20,0x1a, 0x1b,0x21,0x1a,0x1b,0x21,0x19,0x1a,0x20,0x16,0x18,0x1d,0x14,0x16,0x1a,0x52,0x50, 0x72,0x53,0x50,0x76,0x53,0x51,0x76,0x56,0x50,0x76,0x5a,0x52,0x77,0x5c,0x52,0x77, 0x5c,0x52,0x77,0x5c,0x53,0x77,0x5e,0x53,0x75,0x5a,0x52,0x77,0x59,0x53,0x77,0x52, 0x50,0x78,0x52,0x52,0x7b,0x53,0x5d,0x85,0x56,0x62,0x88,0x77,0x82,0xa1,0x6b,0x67, 0x6d,0x09,0x0a,0x0c,0x08,0x09,0x0b,0x07,0x08,0x0a,0x3b,0x31,0x3c,0x57,0x47,0x57, 0x43,0x35,0x40,0x40,0x33,0x3d,0x61,0x58,0x62,0xc5,0xc8,0xd5,0x8c,0x96,0xaf,0x5a, 0x65,0x8d,0x52,0x5c,0x83,0x4d,0x56,0x7b,0x4b,0x53,0x78,0x46,0x4e,0x71,0x3e,0x49, 0x6a,0x3d,0x45,0x64,0x38,0x42,0x62,0x39,0x43,0x63,0x3e,0x43,0x66,0x42,0x46,0x68, 0x47,0x48,0x6d,0x41,0x43,0x64,0x4c,0x4d,0x74,0x55,0x42,0x5c,0x2f,0x23,0x34,0x2d, 0x2c,0x45,0x25,0x25,0x31,0x09,0x09,0x0a,0x0a,0x0a,0x0c,0x0a,0x0a,0x0c,0x0a,0x0b, 0x0d,0x0a,0x0b,0x0e,0x0a,0x0b,0x0d,0x09,0x0a,0x0b,0x09,0x0a,0x0b,0x08,0x09,0x0a, 0x08,0x08,0x0a,0x07,0x08,0x09,0x06,0x07,0x09,0x06,0x06,0x08,0x06,0x06,0x07,0x06, 0x06,0x06,0x05,0x06,0x06,0x05,0x05,0x06,0x04,0x05,0x06,0x04,0x04,0x05,0x04,0x04, 0x05,0x03,0x04,0x05,0x03,0x03,0x04,0x03,0x03,0x04,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x11, 0x14,0x72,0x7e,0x9d,0x4a,0x54,0x78,0x44,0x4e,0x70,0x58,0x63,0x89,0x8d,0x97,0xb3, 0xb4,0xb1,0xb2,0x19,0x11,0x14,0x1d,0x13,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98, 0x98,0x98,0xb2,0xb8,0xcb,0x94,0x9d,0xb7,0x99,0xa2,0xbb,0x95,0x9f,0xb9,0x95,0x9f, 0xb9,0x95,0x9f,0xb9,0xa9,0xb3,0xd2,0x19,0x19,0x19,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x09,0x09,0x1a,0x1a, 0x1a,0x3a,0x3a,0x3a,0x03,0x03,0x03,0x00,0x00,0x00,0x08,0x08,0x09,0x1f,0x21,0x23, 0x3a,0x3d,0x44,0x3e,0x42,0x4c,0x49,0x4e,0x5a,0x4c,0x50,0x5c,0x42,0x46,0x50,0x32, 0x36,0x40,0x22,0x22,0x2e,0x21,0x20,0x2b,0x1e,0x1e,0x28,0x1a,0x1a,0x22,0x1a,0x1b, 0x25,0x1f,0x22,0x2a,0x29,0x2c,0x36,0x3f,0x42,0x4d,0x4b,0x4f,0x5c,0x65,0x6a,0x76, 0x6e,0x72,0x7f,0x76,0x7b,0x87,0x74,0x78,0x83,0x62,0x66,0x74,0x4a,0x4f,0x61,0x46, 0x4c,0x5e,0x4b,0x50,0x5f,0x52,0x56,0x65,0x52,0x57,0x65,0x4f,0x54,0x62,0x45,0x4a, 0x59,0x45,0x4a,0x57,0x4c,0x51,0x5c,0x55,0x59,0x64,0x54,0x58,0x63,0x52,0x56,0x62, 0x59,0x5d,0x68,0x69,0x70,0x81,0x55,0x5e,0x81,0x5b,0x53,0x72,0x5e,0x5d,0x7c,0x5f, 0x60,0x81,0x5c,0x61,0x81,0x61,0x62,0x80,0x62,0x65,0x82,0x58,0x5e,0x7f,0x55,0x5b, 0x7e,0x5f,0x66,0x87,0x68,0x73,0x91,0x96,0x9d,0xb2,0xa3,0xa9,0xba,0x98,0x9f,0xb4, 0x7d,0x85,0xa1,0x77,0x80,0x9d,0x78,0x81,0x9c,0x78,0x7f,0x9b,0x75,0x7c,0x98,0x75, 0x7b,0x97,0x73,0x7b,0x97,0x70,0x77,0x95,0x6d,0x76,0x93,0x5b,0x64,0x85,0x4e,0x4d, 0x71,0x58,0x62,0x84,0x45,0x46,0x52,0x17,0x18,0x20,0x18,0x18,0x21,0x18,0x1a,0x22, 0x18,0x19,0x22,0x17,0x18,0x21,0x18,0x19,0x22,0x17,0x19,0x21,0x17,0x18,0x21,0x17, 0x18,0x21,0x17,0x18,0x21,0x18,0x18,0x21,0x16,0x16,0x1e,0x2c,0x2c,0x34,0x1c,0x1a, 0x23,0x23,0x20,0x2a,0x2a,0x24,0x2f,0x2e,0x28,0x33,0x35,0x2e,0x3a,0x3a,0x32,0x3f, 0x3a,0x32,0x3f,0x3c,0x33,0x42,0x41,0x39,0x48,0x44,0x3e,0x52,0x3f,0x3e,0x56,0x3a, 0x3b,0x50,0x32,0x32,0x43,0x2c,0x2a,0x39,0x1f,0x1e,0x27,0x45,0x3c,0x48,0x6b,0x63, 0x6f,0xc6,0xc8,0xd1,0x82,0x89,0xa4,0x70,0x79,0x96,0x85,0x8f,0xaa,0x7f,0x89,0xa5, 0x75,0x80,0x9e,0x6e,0x79,0x98,0x2c,0x2e,0x39,0x30,0x34,0x40,0x4a,0x50,0x60,0x61, 0x67,0x78,0x62,0x68,0x7b,0x57,0x5d,0x71,0x4a,0x4e,0x62,0x47,0x4a,0x5a,0x42,0x44, 0x52,0x3d,0x3d,0x4a,0x38,0x37,0x42,0x3b,0x3a,0x48,0x3a,0x3a,0x4a,0x3c,0x3c,0x4b, 0x3b,0x3b,0x4d,0x3b,0x39,0x4c,0x3d,0x39,0x4d,0x40,0x3b,0x4f,0x42,0x3c,0x51,0x42, 0x3e,0x53,0x46,0x3f,0x56,0x49,0x40,0x54,0x49,0x3f,0x51,0x4a,0x3f,0x51,0x4a,0x40, 0x52,0x4a,0x41,0x55,0x47,0x40,0x55,0x45,0x40,0x56,0x46,0x42,0x59,0x48,0x45,0x5c, 0x47,0x45,0x5e,0x48,0x4c,0x65,0x4e,0x54,0x6d,0x55,0x5a,0x72,0x58,0x5f,0x75,0x5c, 0x63,0x7b,0x64,0x6c,0x82,0x6e,0x74,0x8a,0x7c,0x82,0x94,0x89,0x8d,0x9a,0x92,0x95, 0x9d,0xa3,0xa5,0xaa,0x9d,0x9c,0xa8,0x73,0x77,0x89,0xb3,0xb1,0xb1,0xb5,0xb2,0xb3, 0xad,0xaa,0xab,0xae,0xa9,0xad,0x9e,0x99,0x9c,0x58,0x55,0x60,0x62,0x62,0x71,0x89, 0x90,0xa3,0x5d,0x67,0x86,0x64,0x6c,0x8b,0x79,0x82,0x9e,0x71,0x7b,0x98,0x67,0x71, 0x92,0x62,0x6d,0x8f,0x53,0x5d,0x80,0x57,0x62,0x85,0x53,0x5b,0x78,0x17,0x19,0x1e, 0x19,0x1b,0x20,0x1a,0x1c,0x21,0x1a,0x1b,0x21,0x19,0x1a,0x20,0x17,0x19,0x1e,0x15, 0x16,0x1a,0x52,0x4e,0x71,0x51,0x50,0x76,0x53,0x51,0x76,0x56,0x50,0x76,0x58,0x51, 0x76,0x5b,0x51,0x77,0x5c,0x52,0x77,0x5c,0x53,0x77,0x5c,0x53,0x77,0x5b,0x52,0x77, 0x59,0x52,0x77,0x52,0x50,0x78,0x52,0x52,0x7b,0x52,0x5c,0x85,0x55,0x62,0x88,0x79, 0x83,0xa2,0x75,0x74,0x79,0x0a,0x0a,0x0d,0x08,0x09,0x0a,0x08,0x09,0x0a,0x32,0x2b, 0x34,0x5a,0x4a,0x5c,0x42,0x34,0x3f,0x40,0x33,0x3d,0x5e,0x55,0x60,0xc9,0xcd,0xd7, 0x8e,0x98,0xb1,0x5c,0x69,0x8b,0x50,0x5c,0x82,0x4c,0x57,0x7c,0x49,0x52,0x76,0x44, 0x4f,0x70,0x3f,0x49,0x6b,0x3c,0x44,0x64,0x38,0x40,0x60,0x39,0x42,0x64,0x3e,0x43, 0x66,0x40,0x46,0x66,0x45,0x49,0x6d,0x41,0x44,0x66,0x4d,0x4d,0x74,0x4c,0x3b,0x52, 0x2c,0x22,0x32,0x2b,0x28,0x41,0x30,0x30,0x46,0x07,0x08,0x0a,0x0a,0x0a,0x0c,0x0a, 0x0a,0x0c,0x0a,0x0b,0x0d,0x0b,0x0c,0x0e,0x0a,0x0b,0x0e,0x0a,0x0a,0x0d,0x0a,0x0a, 0x0c,0x09,0x0a,0x0b,0x08,0x09,0x0a,0x07,0x08,0x09,0x07,0x07,0x09,0x06,0x07,0x09, 0x06,0x06,0x08,0x06,0x06,0x07,0x06,0x06,0x06,0x05,0x05,0x06,0x04,0x05,0x06,0x04, 0x04,0x05,0x04,0x04,0x05,0x03,0x04,0x05,0x03,0x03,0x04,0x03,0x03,0x04,0x02,0x02, 0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, 0x03,0x03,0x7d,0x84,0x9c,0x5a,0x65,0x8b,0x48,0x52,0x76,0x53,0x5e,0x84,0x7f,0x8a, 0xa9,0xdb,0xda,0xda,0x1a,0x12,0x15,0x1d,0x15,0x18,0x07,0x05,0x07,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x0f,0x0f,0x0f,0xcb,0xce,0xd4,0x9f,0xa8,0xc0,0x95,0x9f,0xb9,0x96, 0xa0,0xb9,0x99,0xa2,0xbb,0x99,0xa2,0xbb,0x9a,0xa2,0xbe,0xa4,0xaf,0xcb,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x27, 0x27,0x27,0x1c,0x1b,0x1c,0x10,0x10,0x10,0x00,0x00,0x00,0x02,0x02,0x02,0x08,0x09, 0x0a,0x24,0x26,0x29,0x39,0x3c,0x44,0x3a,0x3e,0x4b,0x40,0x45,0x53,0x38,0x3b,0x47, 0x2b,0x2e,0x39,0x21,0x20,0x2c,0x24,0x20,0x29,0x23,0x1e,0x27,0x21,0x1e,0x26,0x19, 0x17,0x1f,0x15,0x16,0x1e,0x16,0x15,0x1c,0x16,0x16,0x1e,0x1f,0x22,0x2c,0x42,0x45, 0x4e,0x53,0x57,0x63,0x5d,0x62,0x71,0x66,0x6b,0x7a,0x66,0x6a,0x7a,0x6a,0x6e,0x7d, 0x61,0x66,0x75,0x50,0x56,0x66,0x4c,0x52,0x62,0x4a,0x50,0x62,0x48,0x4e,0x60,0x4c, 0x52,0x62,0x4b,0x51,0x5f,0x4c,0x52,0x5f,0x5a,0x5e,0x6b,0x6d,0x70,0x7a,0x76,0x79, 0x81,0x6d,0x70,0x7a,0x5d,0x61,0x6c,0x5c,0x62,0x74,0x62,0x6d,0x8d,0x5c,0x58,0x79, 0x5d,0x5b,0x7c,0x63,0x60,0x7b,0x61,0x60,0x7f,0x5f,0x61,0x80,0x60,0x60,0x7d,0x54, 0x58,0x78,0x61,0x65,0x85,0x94,0x95,0xa4,0x62,0x6b,0x8a,0x74,0x7c,0x99,0xa3,0xaa, 0xbb,0xa3,0xa9,0xbb,0x8b,0x93,0xac,0x78,0x81,0x9d,0x76,0x7f,0x9c,0x76,0x7e,0x9a, 0x75,0x7c,0x98,0x75,0x7d,0x98,0x74,0x7b,0x97,0x72,0x78,0x95,0x70,0x77,0x94,0x66, 0x6e,0x8e,0x4e,0x50,0x74,0x51,0x59,0x7d,0x5d,0x62,0x77,0x1a,0x1a,0x24,0x1a,0x1b, 0x25,0x1b,0x1d,0x26,0x1d,0x1d,0x28,0x1d,0x1d,0x27,0x1d,0x1e,0x27,0x1a,0x1c,0x26, 0x1a,0x1c,0x26,0x1a,0x1b,0x25,0x1b,0x1d,0x26,0x24,0x24,0x2d,0x2b,0x2b,0x34,0x3c, 0x3b,0x45,0x2e,0x2a,0x36,0x2d,0x27,0x32,0x2e,0x28,0x34,0x2f,0x2a,0x36,0x32,0x2c, 0x38,0x38,0x30,0x3e,0x3a,0x32,0x40,0x3e,0x36,0x45,0x42,0x3c,0x50,0x42,0x45,0x5c, 0x4a,0x50,0x67,0x41,0x46,0x5c,0x35,0x36,0x49,0x2c,0x2e,0x3e,0x2d,0x30,0x3b,0x52, 0x4b,0x58,0x5a,0x51,0x60,0xa0,0xa3,0xae,0x5b,0x63,0x80,0x58,0x5b,0x7a,0x6c,0x6c, 0x86,0x72,0x78,0x96,0x7d,0x85,0xa2,0x7e,0x88,0xa4,0x49,0x4d,0x59,0x3e,0x42,0x4f, 0x4a,0x4f,0x61,0x55,0x5a,0x6a,0x4d,0x50,0x60,0x3e,0x42,0x50,0x32,0x32,0x41,0x2e, 0x2e,0x3b,0x30,0x2f,0x3e,0x31,0x2e,0x3e,0x31,0x2e,0x3e,0x33,0x2f,0x41,0x36,0x35, 0x46,0x3a,0x36,0x4a,0x3e,0x39,0x4e,0x46,0x3e,0x53,0x48,0x41,0x55,0x4a,0x42,0x56, 0x4e,0x44,0x58,0x4e,0x46,0x5a,0x4f,0x45,0x59,0x4e,0x43,0x59,0x4c,0x42,0x56,0x4d, 0x42,0x56,0x50,0x46,0x5a,0x54,0x4a,0x61,0x52,0x4a,0x63,0x4e,0x49,0x62,0x4d,0x48, 0x62,0x4e,0x48,0x60,0x4c,0x46,0x5e,0x48,0x45,0x5e,0x48,0x46,0x5f,0x4a,0x4b,0x64, 0x4a,0x4e,0x67,0x4c,0x4f,0x6a,0x4e,0x4f,0x6b,0x50,0x58,0x72,0x65,0x6d,0x82,0x7b, 0x81,0x92,0x91,0x94,0x9e,0xac,0xac,0xb2,0xc6,0xc2,0xc6,0xc0,0xbd,0xc0,0xbf,0xbd, 0xbd,0xbb,0xb8,0xba,0xb4,0xb1,0xb2,0xac,0xa8,0xab,0x9d,0x98,0x9d,0x61,0x5e,0x66, 0x69,0x67,0x75,0x89,0x8f,0xa4,0x62,0x6c,0x8a,0x65,0x6d,0x8b,0x7d,0x85,0xa1,0x78, 0x81,0x9c,0x6a,0x73,0x93,0x62,0x6d,0x8e,0x5b,0x66,0x88,0x52,0x58,0x7d,0x59,0x64, 0x87,0x1e,0x20,0x29,0x18,0x1a,0x1f,0x19,0x1b,0x20,0x19,0x1b,0x20,0x19,0x1a,0x20, 0x18,0x1a,0x1e,0x16,0x16,0x1b,0x52,0x4f,0x72,0x51,0x50,0x76,0x53,0x51,0x76,0x55, 0x50,0x76,0x56,0x51,0x76,0x5a,0x51,0x76,0x5c,0x52,0x77,0x5b,0x52,0x77,0x5b,0x52, 0x77,0x5d,0x53,0x78,0x58,0x52,0x77,0x53,0x50,0x78,0x52,0x51,0x7b,0x52,0x5c,0x83, 0x55,0x61,0x88,0x77,0x82,0xa0,0x7f,0x7c,0x82,0x0a,0x0a,0x0d,0x08,0x09,0x0a,0x08, 0x09,0x0a,0x2b,0x23,0x2b,0x59,0x49,0x5a,0x40,0x33,0x3d,0x43,0x34,0x3f,0x57,0x4d, 0x57,0xcc,0xcf,0xda,0x8f,0x97,0xb2,0x5a,0x67,0x8b,0x50,0x5b,0x81,0x4b,0x56,0x7d, 0x49,0x52,0x78,0x45,0x4f,0x70,0x3f,0x49,0x6b,0x3c,0x45,0x65,0x38,0x41,0x62,0x39, 0x42,0x63,0x3d,0x43,0x66,0x41,0x42,0x66,0x44,0x4a,0x6f,0x41,0x46,0x66,0x4d,0x4d, 0x74,0x49,0x38,0x4e,0x2b,0x20,0x2f,0x2c,0x27,0x3e,0x2c,0x2b,0x45,0x3c,0x3c,0x4c, 0x09,0x09,0x0a,0x0a,0x0a,0x0c,0x0a,0x0b,0x0e,0x0b,0x0c,0x0e,0x0a,0x0b,0x0e,0x0a, 0x0b,0x0d,0x0a,0x0a,0x0c,0x0a,0x0a,0x0c,0x09,0x09,0x0a,0x08,0x09,0x0a,0x07,0x08, 0x0a,0x07,0x07,0x09,0x06,0x06,0x08,0x06,0x06,0x07,0x06,0x06,0x06,0x05,0x05,0x06, 0x04,0x05,0x06,0x04,0x04,0x05,0x04,0x04,0x05,0x03,0x04,0x05,0x03,0x03,0x04,0x03, 0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x5c,0x61,0x6c,0x6a,0x75,0x99,0x52,0x5d,0x82,0x58,0x63,0x89,0x7a, 0x83,0xa4,0xee,0xf0,0xf0,0x22,0x1a,0x1c,0x19,0x11,0x15,0x18,0x12,0x16,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4b,0x4b,0x4b,0xc7,0xcc,0xda, 0x99,0xa2,0xbb,0x99,0xa1,0xba,0x9a,0xa3,0xbc,0x9a,0xa3,0xbc,0x99,0xa2,0xbb,0xa2, 0xab,0xc3,0x6d,0x71,0x71,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x27,0x27,0x27,0x09,0x09,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x02, 0x02,0x02,0x06,0x06,0x06,0x15,0x16,0x1a,0x2f,0x32,0x3b,0x45,0x4a,0x56,0x49,0x4e, 0x5c,0x33,0x37,0x43,0x22,0x22,0x2e,0x25,0x20,0x2a,0x25,0x20,0x28,0x25,0x20,0x29, 0x23,0x1f,0x29,0x1f,0x1c,0x25,0x17,0x16,0x1d,0x12,0x14,0x1a,0x16,0x18,0x1d,0x18, 0x18,0x20,0x23,0x25,0x31,0x38,0x3d,0x4b,0x51,0x56,0x65,0x58,0x5e,0x6f,0x5b,0x62, 0x74,0x63,0x69,0x7a,0x64,0x6a,0x7a,0x64,0x6a,0x79,0x66,0x6c,0x79,0x5a,0x5f,0x6e, 0x4f,0x55,0x66,0x45,0x4b,0x5f,0x41,0x47,0x5b,0x47,0x4d,0x5f,0x58,0x5d,0x6a,0x67, 0x6b,0x77,0x70,0x73,0x7f,0x7c,0x7f,0x88,0x76,0x7a,0x82,0x72,0x76,0x82,0x82,0x8b, 0xa3,0x6f,0x72,0x8f,0x5b,0x5d,0x80,0x64,0x5e,0x7a,0x5c,0x57,0x71,0x60,0x5d,0x79, 0x56,0x55,0x72,0x52,0x49,0x69,0x78,0x7a,0x91,0x61,0x59,0x63,0x86,0x8c,0xa2,0x51, 0x5a,0x7f,0x90,0x98,0xae,0xa4,0xaa,0xbb,0x97,0x9d,0xb3,0x81,0x89,0xa3,0x76,0x7e, 0x9a,0x76,0x7f,0x9a,0x75,0x7c,0x99,0x73,0x7a,0x96,0x72,0x7b,0x97,0x72,0x7a,0x97, 0x70,0x78,0x95,0x6a,0x73,0x92,0x50,0x59,0x7d,0x4f,0x52,0x77,0x63,0x6c,0x8a,0x23, 0x25,0x2f,0x20,0x23,0x2e,0x25,0x28,0x35,0x27,0x27,0x35,0x29,0x27,0x34,0x26,0x25, 0x32,0x22,0x22,0x2e,0x1f,0x20,0x2b,0x1e,0x1f,0x2a,0x21,0x22,0x2d,0x3d,0x3e,0x46, 0x3b,0x3b,0x45,0x43,0x40,0x4c,0x3b,0x34,0x42,0x33,0x2d,0x3a,0x31,0x2a,0x37,0x30, 0x2a,0x36,0x31,0x2a,0x36,0x34,0x2e,0x3a,0x3a,0x32,0x40,0x3b,0x37,0x49,0x3e,0x43, 0x59,0x43,0x4a,0x5e,0x3c,0x42,0x56,0x3c,0x39,0x4c,0x3a,0x35,0x45,0x2b,0x2a,0x3a, 0x34,0x38,0x45,0x4b,0x47,0x58,0x46,0x3e,0x50,0x8e,0x8b,0x97,0x40,0x42,0x58,0x3b, 0x3c,0x4e,0x45,0x47,0x54,0x51,0x51,0x63,0x6f,0x6e,0x8c,0x6e,0x77,0x96,0x4f,0x54, 0x61,0x4b,0x4f,0x5e,0x4c,0x50,0x5e,0x46,0x4a,0x59,0x3a,0x3c,0x4c,0x30,0x30,0x3f, 0x31,0x2c,0x3a,0x36,0x2e,0x3a,0x3a,0x32,0x41,0x3e,0x36,0x45,0x41,0x3a,0x4a,0x42, 0x3c,0x4f,0x42,0x3f,0x55,0x4a,0x43,0x5a,0x4e,0x44,0x57,0x48,0x3d,0x4e,0x48,0x3e, 0x50,0x4c,0x42,0x54,0x4b,0x3f,0x52,0x42,0x39,0x48,0x46,0x3a,0x4b,0x47,0x3b,0x4e, 0x40,0x36,0x46,0x3b,0x32,0x41,0x48,0x3e,0x4f,0x52,0x47,0x5b,0x5a,0x4e,0x63,0x59, 0x4f,0x66,0x58,0x4e,0x66,0x56,0x4c,0x65,0x54,0x4a,0x62,0x4d,0x4a,0x62,0x4a,0x48, 0x62,0x4c,0x49,0x63,0x4d,0x4b,0x66,0x4d,0x4a,0x66,0x53,0x4e,0x67,0x56,0x4d,0x64, 0x4a,0x48,0x62,0x51,0x59,0x71,0x76,0x7b,0x8d,0x93,0x97,0xa2,0xb4,0xb2,0xba,0xbe, 0xbc,0xbf,0xc3,0xc1,0xc2,0xbc,0xb9,0xba,0xb6,0xb2,0xb4,0xa5,0xa1,0xa4,0x88,0x84, 0x8d,0x5d,0x5a,0x64,0x6a,0x68,0x75,0x8c,0x92,0xa6,0x63,0x6d,0x8b,0x63,0x6c,0x8c, 0x7d,0x86,0xa0,0x78,0x80,0x9c,0x67,0x71,0x90,0x62,0x6c,0x8c,0x5f,0x6b,0x8b,0x52, 0x54,0x78,0x52,0x5c,0x80,0x5a,0x65,0x84,0x18,0x1a,0x1e,0x19,0x1b,0x20,0x1a,0x1b, 0x21,0x19,0x1b,0x20,0x18,0x1a,0x1f,0x16,0x17,0x1b,0x52,0x4e,0x72,0x52,0x50,0x76, 0x51,0x50,0x76,0x54,0x50,0x76,0x56,0x50,0x76,0x5a,0x51,0x76,0x5c,0x52,0x77,0x5b, 0x52,0x77,0x5b,0x52,0x77,0x5d,0x53,0x78,0x59,0x52,0x77,0x54,0x51,0x77,0x52,0x51, 0x7b,0x52,0x5b,0x83,0x55,0x61,0x88,0x78,0x84,0xa1,0x88,0x84,0x8a,0x09,0x0a,0x0c, 0x09,0x0a,0x0b,0x08,0x09,0x0a,0x22,0x1d,0x23,0x60,0x4f,0x62,0x41,0x34,0x40,0x41, 0x34,0x3f,0x57,0x4e,0x59,0xcb,0xce,0xd9,0x91,0x9a,0xb4,0x5c,0x69,0x8e,0x52,0x5c, 0x82,0x4d,0x57,0x7d,0x49,0x53,0x79,0x45,0x4e,0x70,0x3f,0x49,0x6b,0x3c,0x45,0x66, 0x39,0x43,0x63,0x3a,0x42,0x64,0x3d,0x43,0x64,0x40,0x45,0x69,0x45,0x4a,0x6e,0x41, 0x48,0x6a,0x4d,0x51,0x78,0x46,0x36,0x4c,0x2b,0x1f,0x2e,0x2c,0x27,0x3d,0x32,0x2f, 0x4b,0x54,0x5a,0x7f,0x0d,0x0d,0x10,0x0a,0x0a,0x0c,0x0a,0x0b,0x0e,0x0b,0x0c,0x0e, 0x0b,0x0c,0x0e,0x0a,0x0b,0x0e,0x0a,0x0b,0x0d,0x0a,0x0a,0x0c,0x09,0x0a,0x0b,0x08, 0x09,0x0a,0x07,0x08,0x0a,0x07,0x07,0x09,0x06,0x07,0x09,0x06,0x06,0x08,0x06,0x06, 0x06,0x05,0x05,0x06,0x04,0x05,0x06,0x04,0x04,0x05,0x04,0x04,0x05,0x03,0x04,0x05, 0x03,0x03,0x04,0x03,0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x24,0x25,0x28,0x82,0x8c,0xab,0x5b,0x68,0x8e,0x58,0x65,0x89, 0x75,0x80,0xa1,0xe9,0xec,0xf0,0x48,0x43,0x45,0x15,0x0d,0x10,0x22,0x18,0x1d,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xbc,0xbc,0xbc,0xac,0xb3,0xc8,0x99,0xa1,0xbb,0x9d,0xa7,0xbf,0x9d,0xa7,0xbf, 0x9d,0xa5,0xbe,0xa0,0xa8,0xbf,0xb1,0xba,0xd6,0x17,0x17,0x17,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x15,0x15,0x15,0x20,0x20,0x20,0x1f,0x1e,0x1f, 0x2a,0x2a,0x2a,0x21,0x20,0x21,0x06,0x06,0x08,0x16,0x17,0x1c,0x34,0x37,0x42,0x4b, 0x50,0x5d,0x50,0x54,0x62,0x35,0x39,0x44,0x25,0x24,0x31,0x26,0x22,0x2c,0x26,0x22, 0x2a,0x27,0x25,0x31,0x26,0x26,0x34,0x24,0x22,0x2e,0x1e,0x1b,0x24,0x1a,0x16,0x1e, 0x19,0x16,0x1c,0x1b,0x19,0x21,0x21,0x1e,0x29,0x28,0x27,0x36,0x33,0x33,0x46,0x41, 0x47,0x5c,0x56,0x5d,0x70,0x5b,0x62,0x74,0x5a,0x60,0x73,0x5a,0x60,0x72,0x5f,0x65, 0x74,0x6a,0x6e,0x7b,0x64,0x69,0x76,0x53,0x59,0x6a,0x46,0x4d,0x62,0x4a,0x4f,0x62, 0x4e,0x54,0x66,0x52,0x58,0x68,0x5c,0x62,0x6f,0x62,0x67,0x76,0x67,0x6c,0x79,0x7c, 0x80,0x89,0x9a,0xa1,0xb3,0x87,0x89,0xa1,0x70,0x7a,0x97,0x5c,0x60,0x82,0x61,0x5b, 0x75,0x51,0x4f,0x66,0x4d,0x4c,0x65,0x51,0x48,0x63,0x83,0x81,0x96,0x4c,0x42,0x4d, 0x6b,0x6c,0x7d,0x59,0x62,0x85,0x63,0x6d,0x8e,0xa3,0xa8,0xbb,0xa3,0xa8,0xbc,0x88, 0x90,0xa8,0x7a,0x83,0x9e,0x76,0x7f,0x9b,0x76,0x7e,0x9a,0x76,0x7d,0x99,0x72,0x7b, 0x97,0x72,0x7b,0x97,0x70,0x79,0x95,0x6b,0x75,0x93,0x5b,0x66,0x86,0x57,0x54,0x76, 0x5a,0x65,0x86,0x4c,0x51,0x5e,0x2d,0x31,0x3d,0x31,0x36,0x46,0x32,0x33,0x46,0x32, 0x30,0x42,0x31,0x2e,0x3e,0x2c,0x2b,0x3a,0x27,0x26,0x35,0x22,0x23,0x30,0x21,0x22, 0x2e,0x20,0x22,0x2d,0x22,0x22,0x2e,0x30,0x2c,0x3a,0x3d,0x36,0x44,0x3a,0x32,0x40, 0x32,0x2b,0x38,0x30,0x2a,0x37,0x32,0x2c,0x39,0x39,0x32,0x41,0x3f,0x39,0x4a,0x3c, 0x3b,0x50,0x40,0x40,0x58,0x3e,0x3d,0x53,0x3d,0x36,0x47,0x3a,0x30,0x3d,0x3c,0x32, 0x3e,0x3a,0x31,0x3d,0x3b,0x30,0x3c,0x49,0x3d,0x4d,0x3a,0x2f,0x3c,0x6a,0x69,0x70, 0x39,0x3b,0x4f,0x39,0x3a,0x4a,0x3e,0x3d,0x49,0x38,0x38,0x45,0x3b,0x39,0x46,0x66, 0x5f,0x78,0x36,0x3b,0x4d,0x3f,0x42,0x4f,0x3e,0x40,0x4e,0x33,0x36,0x47,0x34,0x32, 0x42,0x3a,0x31,0x3e,0x3c,0x32,0x40,0x3f,0x36,0x44,0x45,0x3b,0x4d,0x4a,0x40,0x52, 0x4e,0x43,0x59,0x51,0x47,0x5b,0x53,0x49,0x5e,0x52,0x46,0x5a,0x42,0x37,0x46,0x38, 0x2e,0x3a,0x39,0x2e,0x3d,0x45,0x3a,0x4a,0x45,0x3a,0x4a,0x40,0x36,0x46,0x3a,0x32, 0x3f,0x37,0x2f,0x3b,0x34,0x2c,0x38,0x30,0x28,0x33,0x32,0x2b,0x37,0x3c,0x32,0x41, 0x51,0x46,0x59,0x58,0x4b,0x60,0x59,0x4e,0x63,0x5a,0x4e,0x66,0x5a,0x50,0x67,0x59, 0x4f,0x67,0x56,0x4c,0x64,0x55,0x4b,0x62,0x54,0x4c,0x64,0x4e,0x4b,0x67,0x50,0x4e, 0x6a,0x56,0x4f,0x6a,0x4e,0x4d,0x6a,0x4e,0x50,0x6c,0x56,0x5e,0x76,0x6f,0x75,0x89, 0x8d,0x8f,0xa1,0x96,0x97,0xa4,0xa3,0xa3,0xac,0x9e,0x9d,0xa5,0x97,0x96,0x9f,0x87, 0x86,0x90,0x6f,0x6e,0x7a,0x5e,0x5b,0x67,0x70,0x6f,0x7d,0x98,0x9f,0xaf,0x70,0x79, 0x94,0x5f,0x68,0x87,0x71,0x7a,0x96,0x6e,0x78,0x94,0x63,0x6c,0x8c,0x60,0x6b,0x8a, 0x61,0x6b,0x8b,0x5b,0x65,0x87,0x52,0x51,0x76,0x57,0x62,0x85,0x31,0x36,0x45,0x18, 0x1a,0x1f,0x19,0x1a,0x20,0x1a,0x1b,0x21,0x18,0x1a,0x1e,0x16,0x17,0x1c,0x50,0x4d, 0x6e,0x51,0x50,0x76,0x53,0x50,0x75,0x53,0x50,0x75,0x56,0x4f,0x76,0x58,0x51,0x76, 0x5a,0x51,0x77,0x5c,0x53,0x77,0x5b,0x52,0x77,0x5d,0x53,0x77,0x5a,0x52,0x77,0x55, 0x50,0x77,0x51,0x50,0x79,0x52,0x5a,0x82,0x54,0x61,0x87,0x7b,0x85,0xa2,0x92,0x8f, 0x94,0x09,0x0a,0x0c,0x09,0x0a,0x0b,0x08,0x09,0x0a,0x1a,0x15,0x1b,0x65,0x52,0x67, 0x42,0x35,0x40,0x41,0x34,0x3e,0x57,0x4d,0x58,0xcb,0xce,0xd8,0x90,0x99,0xb3,0x5d, 0x69,0x8f,0x4f,0x5a,0x82,0x4d,0x57,0x7e,0x48,0x53,0x79,0x45,0x4d,0x70,0x41,0x49, 0x6d,0x3d,0x46,0x65,0x3a,0x41,0x60,0x39,0x42,0x61,0x3d,0x42,0x64,0x40,0x46,0x67, 0x45,0x4c,0x6f,0x41,0x47,0x6b,0x4c,0x53,0x76,0x40,0x39,0x56,0x28,0x1e,0x2d,0x30, 0x27,0x3c,0x3b,0x39,0x59,0x52,0x54,0x7c,0x4d,0x4e,0x62,0x09,0x0a,0x0b,0x0a,0x0b, 0x0e,0x0b,0x0c,0x0e,0x0b,0x0c,0x0e,0x0b,0x0c,0x0e,0x0a,0x0b,0x0d,0x0a,0x0a,0x0c, 0x09,0x0a,0x0b,0x08,0x09,0x0a,0x08,0x09,0x0a,0x07,0x07,0x09,0x06,0x07,0x09,0x06, 0x06,0x08,0x06,0x06,0x07,0x06,0x06,0x06,0x04,0x05,0x06,0x04,0x04,0x05,0x04,0x04, 0x05,0x03,0x04,0x05,0x03,0x03,0x04,0x03,0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x03, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x05,0x05,0x06,0x9a,0xa1,0xb4,0x71,0x7c,0x9f,0x5e,0x6b, 0x91,0x6c,0x78,0x9a,0xcd,0xd0,0xdd,0x96,0x92,0x94,0x17,0x0f,0x11,0x20,0x16,0x1a, 0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x30,0xe3,0xe5,0xec,0xa1,0xa9,0xc0,0x9d,0xa7, 0xbf,0xa5,0xac,0xc3,0xa3,0xab,0xc2,0xa3,0xab,0xc1,0xa5,0xae,0xc4,0x9d,0xa5,0xb6, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x19, 0x19,0x16,0x15,0x16,0x0b,0x0a,0x0b,0x0d,0x0d,0x0e,0x0a,0x0a,0x0d,0x22,0x25,0x2d, 0x40,0x45,0x51,0x40,0x45,0x53,0x3b,0x40,0x4d,0x2e,0x32,0x3f,0x28,0x2a,0x38,0x29, 0x25,0x30,0x28,0x22,0x2c,0x2a,0x25,0x2e,0x2d,0x27,0x32,0x29,0x26,0x32,0x23,0x24, 0x31,0x1c,0x1c,0x26,0x1a,0x16,0x1e,0x1a,0x17,0x1e,0x20,0x1c,0x24,0x2c,0x26,0x31, 0x37,0x30,0x3e,0x3d,0x38,0x4a,0x3f,0x42,0x57,0x4d,0x53,0x68,0x56,0x5b,0x70,0x57, 0x5e,0x70,0x59,0x5f,0x71,0x5f,0x65,0x74,0x5d,0x62,0x6f,0x5f,0x63,0x71,0x56,0x5c, 0x6c,0x48,0x4f,0x63,0x46,0x4c,0x61,0x51,0x56,0x66,0x61,0x66,0x72,0x69,0x6e,0x7b, 0x59,0x5f,0x72,0x50,0x56,0x69,0x85,0x8d,0xa2,0x91,0x92,0xa8,0x96,0x9c,0xb0,0x86, 0x8e,0xa7,0x5d,0x60,0x82,0x5b,0x55,0x6e,0x4a,0x46,0x60,0x56,0x46,0x5e,0x8c,0x88, 0x99,0x54,0x4a,0x55,0x50,0x4a,0x57,0x76,0x7c,0x98,0x55,0x5e,0x83,0x95,0x9c,0xb0, 0xaa,0xb1,0xc1,0x9a,0xa0,0xb5,0x81,0x89,0xa3,0x77,0x80,0x9d,0x76,0x7f,0x9b,0x76, 0x7d,0x99,0x72,0x7c,0x98,0x74,0x7d,0x99,0x71,0x7a,0x96,0x6e,0x78,0x95,0x6b,0x75, 0x93,0x63,0x65,0x84,0x66,0x70,0x8f,0x6e,0x74,0x87,0x3d,0x41,0x4d,0x3b,0x40,0x4e, 0x37,0x3d,0x4e,0x35,0x38,0x4a,0x33,0x32,0x46,0x33,0x32,0x45,0x30,0x2e,0x40,0x28, 0x28,0x36,0x25,0x27,0x34,0x25,0x26,0x34,0x26,0x26,0x34,0x33,0x2f,0x3e,0x40,0x38, 0x47,0x3c,0x35,0x44,0x34,0x2e,0x3b,0x32,0x2d,0x3b,0x3b,0x34,0x44,0x42,0x3b,0x4e, 0x40,0x3f,0x55,0x45,0x43,0x5c,0x44,0x41,0x56,0x3a,0x33,0x42,0x35,0x2e,0x3a,0x32, 0x2c,0x38,0x2f,0x2a,0x39,0x32,0x2d,0x3a,0x38,0x30,0x3d,0x4b,0x3d,0x4c,0x3b,0x31, 0x3e,0x75,0x72,0x78,0x42,0x45,0x5c,0x41,0x45,0x58,0x46,0x49,0x55,0x3a,0x3a,0x45, 0x31,0x31,0x3b,0x3a,0x39,0x47,0x40,0x36,0x45,0x2f,0x33,0x42,0x32,0x35,0x46,0x3c, 0x35,0x45,0x41,0x37,0x46,0x3e,0x33,0x41,0x42,0x3a,0x4a,0x46,0x3e,0x51,0x4e,0x46, 0x5c,0x52,0x4b,0x61,0x56,0x4b,0x60,0x59,0x4b,0x5f,0x56,0x48,0x5d,0x4e,0x42,0x52, 0x40,0x33,0x42,0x38,0x2e,0x39,0x3b,0x30,0x3e,0x45,0x39,0x48,0x46,0x3a,0x4a,0x3e, 0x32,0x41,0x37,0x2e,0x3a,0x32,0x29,0x32,0x2f,0x26,0x31,0x2a,0x22,0x2c,0x29,0x20, 0x29,0x33,0x29,0x34,0x4c,0x3f,0x50,0x52,0x45,0x59,0x52,0x46,0x59,0x53,0x47,0x5b, 0x55,0x49,0x5e,0x56,0x49,0x5e,0x53,0x46,0x5a,0x4e,0x42,0x55,0x4d,0x40,0x52,0x56, 0x4b,0x61,0x56,0x4e,0x67,0x56,0x4f,0x68,0x50,0x4e,0x6a,0x51,0x57,0x74,0x54,0x5d, 0x76,0x56,0x5e,0x76,0x70,0x74,0x8c,0x77,0x7b,0x8e,0x77,0x7a,0x8b,0x6c,0x6f,0x81, 0x60,0x63,0x76,0x5a,0x5c,0x6e,0x5f,0x5f,0x6e,0x6b,0x68,0x77,0x65,0x61,0x70,0xa1, 0xa4,0xb2,0x78,0x82,0x9a,0x57,0x61,0x80,0x60,0x69,0x87,0x63,0x6d,0x8a,0x61,0x6b, 0x89,0x5f,0x6a,0x88,0x62,0x6c,0x8c,0x60,0x6b,0x8c,0x51,0x5b,0x81,0x52,0x57,0x7c, 0x5d,0x67,0x89,0x19,0x1c,0x21,0x18,0x1a,0x1f,0x18,0x1a,0x1f,0x17,0x1a,0x1e,0x16, 0x17,0x1c,0x50,0x4e,0x6e,0x52,0x51,0x77,0x51,0x50,0x77,0x52,0x50,0x76,0x55,0x50, 0x76,0x59,0x51,0x76,0x5a,0x51,0x77,0x5a,0x52,0x77,0x5c,0x53,0x77,0x5c,0x52,0x78, 0x5b,0x52,0x78,0x54,0x50,0x77,0x51,0x50,0x79,0x52,0x57,0x80,0x55,0x5f,0x87,0x77, 0x83,0xa0,0x96,0x93,0x9a,0x09,0x0a,0x0c,0x09,0x0a,0x0b,0x09,0x0a,0x0b,0x0e,0x0d, 0x0f,0x60,0x4f,0x62,0x42,0x34,0x40,0x42,0x34,0x3f,0x58,0x4e,0x59,0xc7,0xcc,0xd7, 0x8f,0x97,0xb2,0x61,0x6b,0x90,0x53,0x5d,0x83,0x4e,0x58,0x7f,0x4a,0x54,0x7a,0x46, 0x4f,0x73,0x41,0x49,0x6a,0x3c,0x46,0x65,0x3a,0x41,0x61,0x39,0x41,0x61,0x3b,0x41, 0x61,0x3f,0x46,0x67,0x43,0x4a,0x6e,0x40,0x48,0x6a,0x4c,0x53,0x76,0x3e,0x3d,0x5d, 0x28,0x1e,0x2d,0x31,0x27,0x3a,0x42,0x40,0x62,0x52,0x4f,0x78,0x5d,0x66,0x8b,0x16, 0x15,0x1a,0x0a,0x0b,0x0e,0x0b,0x0c,0x0e,0x0b,0x0c,0x0e,0x0b,0x0c,0x0e,0x0b,0x0c, 0x0e,0x0a,0x0b,0x0e,0x0a,0x0a,0x0c,0x0a,0x0a,0x0c,0x09,0x09,0x0a,0x08,0x09,0x0a, 0x07,0x07,0x09,0x06,0x07,0x08,0x06,0x06,0x08,0x06,0x06,0x08,0x06,0x06,0x07,0x05, 0x06,0x06,0x05,0x06,0x06,0x04,0x05,0x06,0x04,0x04,0x05,0x04,0x04,0x05,0x03,0x03, 0x04,0x03,0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x81,0x85,0x8f,0x8d,0x97,0xb3,0x72, 0x7d,0x9f,0x73,0x7e,0xa0,0xaa,0xb2,0xc7,0xcc,0xcb,0xcc,0x18,0x10,0x13,0x1b,0x12, 0x15,0x1f,0x18,0x1c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x84,0x84,0x84,0xc3, 0xc8,0xd7,0xa3,0xab,0xc2,0xa7,0xad,0xc4,0xa7,0xaf,0xc4,0xa9,0xb2,0xc6,0xa8,0xb0, 0xc6,0xb4,0xbc,0xd5,0x34,0x34,0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x32,0x32,0x32,0x05,0x05,0x06,0x0b,0x0c, 0x10,0x26,0x2a,0x32,0x3e,0x42,0x4e,0x35,0x39,0x46,0x2a,0x2e,0x3a,0x30,0x34,0x40, 0x37,0x3b,0x48,0x27,0x26,0x35,0x2a,0x25,0x2f,0x2d,0x27,0x32,0x2e,0x28,0x33,0x2a, 0x2a,0x39,0x33,0x37,0x42,0x1e,0x22,0x2b,0x17,0x15,0x1b,0x17,0x14,0x1a,0x1a,0x17, 0x1e,0x2a,0x24,0x2e,0x36,0x2f,0x3d,0x3e,0x36,0x46,0x43,0x3b,0x4d,0x42,0x3e,0x52, 0x42,0x42,0x59,0x46,0x4d,0x63,0x50,0x58,0x6d,0x5b,0x61,0x72,0x5e,0x63,0x72,0x5d, 0x61,0x6e,0x60,0x64,0x71,0x56,0x5c,0x6d,0x53,0x5a,0x6b,0x4e,0x54,0x67,0x5c,0x62, 0x72,0x7f,0x83,0x8e,0x85,0x88,0x90,0x6b,0x6e,0x7b,0x69,0x6f,0x8a,0x5c,0x5a,0x7e, 0x82,0x87,0xa1,0xa8,0xaf,0xbf,0x7e,0x87,0xa2,0x61,0x5d,0x78,0x48,0x43,0x5c,0x55, 0x42,0x58,0x96,0x91,0x9e,0x5e,0x55,0x60,0x30,0x27,0x31,0x75,0x79,0x8f,0x67,0x70, 0x8f,0x78,0x82,0x9e,0xad,0xb3,0xc3,0xa6,0xab,0xbe,0x8b,0x92,0xaa,0x77,0x81,0x9d, 0x76,0x80,0x9d,0x75,0x7f,0x9b,0x7a,0x84,0x9e,0x7d,0x86,0x9f,0x7f,0x88,0xa2,0x7e, 0x87,0xa1,0x80,0x8a,0xa3,0x78,0x81,0x9d,0x81,0x81,0x9b,0x8a,0x92,0xa9,0x64,0x68, 0x75,0x57,0x5c,0x6a,0x4b,0x50,0x5e,0x45,0x4a,0x59,0x36,0x3b,0x4e,0x36,0x35,0x47, 0x36,0x35,0x47,0x2e,0x2d,0x3e,0x29,0x2a,0x39,0x29,0x29,0x38,0x2a,0x29,0x38,0x33, 0x2f,0x3e,0x3e,0x36,0x46,0x3e,0x36,0x46,0x3a,0x33,0x43,0x3e,0x36,0x47,0x41,0x3d, 0x51,0x42,0x42,0x5a,0x47,0x44,0x5b,0x4a,0x42,0x56,0x37,0x33,0x44,0x2a,0x27,0x34, 0x2e,0x2a,0x39,0x2f,0x2b,0x3a,0x30,0x2c,0x3b,0x31,0x2e,0x3c,0x34,0x2e,0x3e,0x56, 0x48,0x5a,0x53,0x43,0x54,0x94,0x8f,0x98,0x4a,0x50,0x6c,0x50,0x58,0x71,0x60,0x66, 0x78,0x52,0x54,0x64,0x40,0x40,0x4e,0x3a,0x39,0x47,0x21,0x19,0x1f,0x2e,0x2a,0x38, 0x33,0x30,0x40,0x45,0x39,0x47,0x44,0x38,0x47,0x46,0x3d,0x4c,0x49,0x40,0x52,0x4f, 0x46,0x5a,0x54,0x4b,0x60,0x56,0x4b,0x61,0x56,0x49,0x5b,0x52,0x45,0x58,0x4f,0x42, 0x54,0x4a,0x3c,0x4e,0x41,0x35,0x42,0x36,0x2d,0x38,0x38,0x2d,0x38,0x39,0x2d,0x39, 0x36,0x2a,0x35,0x39,0x2d,0x38,0x39,0x2c,0x36,0x33,0x27,0x2f,0x27,0x1d,0x23,0x26, 0x1c,0x22,0x26,0x1d,0x22,0x2e,0x22,0x2a,0x46,0x38,0x46,0x53,0x45,0x56,0x55,0x46, 0x59,0x54,0x47,0x5b,0x52,0x45,0x58,0x4e,0x42,0x55,0x4c,0x41,0x53,0x48,0x3d,0x4e, 0x38,0x2e,0x3b,0x40,0x34,0x42,0x4e,0x41,0x52,0x56,0x48,0x5c,0x58,0x4c,0x62,0x4e, 0x4b,0x67,0x4e,0x50,0x6b,0x4b,0x4e,0x6a,0x58,0x58,0x74,0x55,0x59,0x72,0x53,0x57, 0x6f,0x50,0x54,0x6c,0x4b,0x47,0x5f,0x48,0x44,0x5b,0x59,0x59,0x6c,0x64,0x61,0x71, 0x62,0x5d,0x6b,0x82,0x80,0x8d,0x8d,0x94,0xa7,0x5b,0x65,0x83,0x58,0x63,0x82,0x61, 0x6b,0x88,0x62,0x6c,0x89,0x5f,0x68,0x88,0x61,0x6b,0x8c,0x61,0x6d,0x8d,0x5e,0x68, 0x8a,0x52,0x53,0x77,0x56,0x61,0x84,0x34,0x3a,0x4a,0x18,0x1a,0x1f,0x19,0x1a,0x20, 0x17,0x19,0x1e,0x16,0x18,0x1c,0x50,0x4f,0x6e,0x51,0x51,0x76,0x51,0x50,0x76,0x52, 0x50,0x75,0x55,0x50,0x77,0x58,0x52,0x76,0x5b,0x51,0x77,0x5c,0x52,0x77,0x5b,0x52, 0x77,0x5d,0x53,0x78,0x5b,0x52,0x78,0x56,0x50,0x77,0x51,0x50,0x79,0x51,0x57,0x7f, 0x54,0x60,0x87,0x72,0x7d,0x9d,0xa1,0x9d,0xa3,0x0a,0x0a,0x0c,0x0a,0x0a,0x0c,0x09, 0x0a,0x0b,0x08,0x09,0x0a,0x61,0x50,0x63,0x45,0x37,0x43,0x40,0x33,0x3d,0x52,0x48, 0x52,0xc6,0xca,0xd6,0x94,0x9c,0xb5,0x5e,0x69,0x8e,0x50,0x5b,0x82,0x4e,0x59,0x7f, 0x48,0x54,0x78,0x45,0x4f,0x73,0x42,0x4b,0x6b,0x3c,0x45,0x66,0x39,0x41,0x61,0x3a, 0x40,0x61,0x3a,0x41,0x63,0x3f,0x46,0x66,0x43,0x4c,0x6f,0x42,0x49,0x6c,0x4b,0x53, 0x78,0x47,0x45,0x68,0x2b,0x20,0x2f,0x2e,0x23,0x33,0x51,0x4d,0x71,0x55,0x51,0x77, 0x53,0x57,0x7f,0x55,0x57,0x6c,0x0a,0x0b,0x0e,0x0c,0x0e,0x10,0x0c,0x0d,0x0f,0x0b, 0x0c,0x0e,0x0b,0x0c,0x0e,0x0a,0x0b,0x0e,0x0a,0x0a,0x0c,0x0a,0x0a,0x0c,0x09,0x0a, 0x0b,0x08,0x09,0x0a,0x07,0x08,0x0a,0x06,0x07,0x08,0x06,0x07,0x08,0x06,0x06,0x08, 0x06,0x06,0x07,0x05,0x06,0x06,0x05,0x05,0x06,0x05,0x05,0x06,0x04,0x04,0x05,0x04, 0x04,0x05,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x02,0x02,0x03,0x02,0x02, 0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x40,0x40,0x43,0xb1,0xb8,0xca, 0x89,0x93,0xb0,0x79,0x84,0xa6,0x9d,0xa5,0xbd,0xed,0xec,0xee,0x20,0x18,0x1b,0x19, 0x11,0x13,0x22,0x18,0x1d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x03,0x03,0x03,0xda,0xdb,0xdd,0xb0,0xb8,0xca,0xa9,0xb1,0xc6,0xab,0xb2,0xc8,0xac, 0xb3,0xc8,0xac,0xb4,0xc8,0xac,0xb4,0xc9,0xcd,0xd5,0xed,0x04,0x04,0x04,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1d,0x1d,0x1d,0x17, 0x16,0x17,0x0a,0x0a,0x0d,0x1a,0x1d,0x25,0x28,0x2b,0x36,0x25,0x28,0x32,0x20,0x23, 0x2e,0x35,0x39,0x43,0x46,0x49,0x54,0x2d,0x31,0x3e,0x2a,0x2a,0x3a,0x2b,0x2e,0x3e, 0x2e,0x2a,0x39,0x31,0x36,0x43,0x32,0x35,0x3e,0x18,0x18,0x21,0x14,0x12,0x16,0x12, 0x10,0x14,0x17,0x14,0x19,0x27,0x22,0x2b,0x36,0x2e,0x3c,0x3d,0x35,0x45,0x43,0x3a, 0x4a,0x47,0x3e,0x51,0x49,0x41,0x54,0x46,0x41,0x56,0x43,0x42,0x5a,0x47,0x4e,0x66, 0x59,0x5f,0x70,0x57,0x5c,0x6a,0x5a,0x5e,0x6a,0x62,0x66,0x73,0x62,0x67,0x75,0x50, 0x56,0x69,0x55,0x5b,0x6e,0x6b,0x71,0x80,0x89,0x8c,0x95,0x8f,0x91,0x99,0x8d,0x8f, 0xa0,0x58,0x5e,0x80,0x5f,0x5b,0x7e,0x60,0x69,0x88,0x66,0x6f,0x8a,0x5b,0x5c,0x7a, 0x52,0x4d,0x68,0x50,0x3e,0x52,0x93,0x8e,0x9b,0x66,0x5f,0x69,0x28,0x21,0x2b,0x49, 0x47,0x56,0x7d,0x85,0x9e,0x60,0x6a,0x8c,0xa3,0xa9,0xbb,0xb0,0xb4,0xc4,0x9a,0xa2, 0xb7,0x7e,0x88,0xa2,0x78,0x82,0x9d,0x7d,0x85,0xa0,0x86,0x8f,0xa7,0x8a,0x93,0xaa, 0x8a,0x93,0xab,0x8f,0x97,0xaf,0x8b,0x94,0xac,0x7e,0x87,0xa2,0x84,0x83,0x9c,0x8c, 0x95,0xad,0x85,0x8a,0x98,0x6c,0x71,0x7e,0x5f,0x64,0x72,0x4a,0x50,0x60,0x3a,0x3e, 0x52,0x39,0x37,0x4c,0x36,0x35,0x47,0x2e,0x2e,0x3f,0x2b,0x2c,0x3c,0x2e,0x2e,0x3e, 0x32,0x30,0x40,0x36,0x32,0x42,0x3d,0x36,0x46,0x41,0x39,0x4a,0x43,0x3c,0x4e,0x46, 0x3e,0x52,0x42,0x40,0x57,0x45,0x43,0x5b,0x4e,0x44,0x58,0x42,0x3a,0x4b,0x2c,0x29, 0x36,0x2d,0x2a,0x37,0x2f,0x2c,0x3b,0x30,0x2d,0x3b,0x31,0x2e,0x3d,0x32,0x2e,0x3e, 0x32,0x2f,0x3e,0x53,0x48,0x5d,0x53,0x45,0x59,0x94,0x8f,0x9a,0x4a,0x53,0x71,0x53, 0x5b,0x77,0x6c,0x74,0x89,0x67,0x6d,0x84,0x63,0x65,0x7c,0x54,0x53,0x68,0x2a,0x21, 0x2a,0x31,0x2a,0x35,0x3e,0x35,0x43,0x43,0x37,0x46,0x44,0x3a,0x4a,0x49,0x3e,0x50, 0x4d,0x41,0x54,0x52,0x44,0x59,0x54,0x47,0x5a,0x52,0x46,0x5a,0x50,0x42,0x56,0x4a, 0x3e,0x4e,0x46,0x3a,0x4a,0x41,0x34,0x43,0x38,0x2b,0x38,0x32,0x27,0x31,0x2f,0x23, 0x2d,0x2e,0x22,0x2d,0x3a,0x2d,0x38,0x4e,0x3e,0x4e,0x48,0x3a,0x49,0x4a,0x3b,0x4a, 0x4e,0x3e,0x4e,0x53,0x43,0x55,0x54,0x44,0x56,0x4e,0x3e,0x4e,0x56,0x46,0x57,0x5e, 0x50,0x65,0x58,0x4e,0x66,0x52,0x4c,0x64,0x54,0x49,0x5e,0x4e,0x42,0x53,0x49,0x3c, 0x4e,0x3c,0x32,0x40,0x30,0x28,0x32,0x2d,0x24,0x2e,0x33,0x29,0x33,0x41,0x34,0x42, 0x51,0x44,0x56,0x57,0x4e,0x66,0x4d,0x4b,0x66,0x4c,0x4a,0x64,0x5a,0x55,0x71,0x53, 0x4b,0x62,0x56,0x49,0x5e,0x56,0x48,0x5c,0x53,0x47,0x5a,0x4d,0x44,0x59,0x4e,0x4c, 0x61,0x55,0x51,0x60,0x54,0x4c,0x5a,0x57,0x52,0x5e,0x94,0x98,0xa7,0x63,0x6b,0x87, 0x53,0x5d,0x7d,0x5f,0x69,0x87,0x60,0x6a,0x87,0x61,0x6c,0x8a,0x61,0x6b,0x8c,0x61, 0x6d,0x8d,0x61,0x6b,0x8c,0x55,0x60,0x84,0x51,0x5a,0x7f,0x5c,0x67,0x89,0x1a,0x1c, 0x22,0x17,0x19,0x1e,0x17,0x19,0x1e,0x16,0x18,0x1d,0x50,0x4e,0x6d,0x51,0x50,0x77, 0x52,0x51,0x77,0x53,0x51,0x76,0x53,0x50,0x76,0x58,0x52,0x77,0x59,0x51,0x77,0x5c, 0x52,0x77,0x5c,0x53,0x77,0x5b,0x52,0x77,0x5a,0x52,0x77,0x58,0x52,0x77,0x51,0x50, 0x78,0x52,0x56,0x7e,0x53,0x5e,0x86,0x6e,0x78,0x9a,0xa9,0xa6,0xad,0x0a,0x0a,0x0c, 0x0a,0x0a,0x0d,0x09,0x0a,0x0c,0x08,0x09,0x0a,0x5d,0x4c,0x5e,0x47,0x39,0x45,0x3e, 0x31,0x3d,0x4a,0x40,0x49,0xc4,0xca,0xd6,0x90,0x99,0xb2,0x61,0x6c,0x91,0x53,0x5d, 0x82,0x4e,0x59,0x7f,0x48,0x54,0x78,0x46,0x50,0x74,0x41,0x4c,0x6b,0x3c,0x46,0x65, 0x3a,0x42,0x63,0x38,0x40,0x60,0x3a,0x42,0x63,0x3f,0x43,0x65,0x43,0x4a,0x6c,0x44, 0x4c,0x6f,0x4c,0x54,0x78,0x34,0x34,0x4c,0x30,0x25,0x34,0x30,0x24,0x36,0x5b,0x51, 0x73,0x55,0x51,0x77,0x54,0x51,0x79,0x5b,0x64,0x89,0x19,0x19,0x1f,0x0b,0x0c,0x0e, 0x0c,0x0d,0x0f,0x0b,0x0c,0x0e,0x0b,0x0c,0x0e,0x0a,0x0b,0x0e,0x0a,0x0b,0x0e,0x0a, 0x0a,0x0c,0x09,0x0a,0x0b,0x08,0x09,0x0a,0x07,0x08,0x0a,0x07,0x07,0x09,0x06,0x07, 0x08,0x06,0x06,0x07,0x06,0x06,0x07,0x05,0x06,0x06,0x05,0x05,0x06,0x05,0x05,0x06, 0x04,0x05,0x06,0x04,0x04,0x05,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x03, 0x03,0x04,0x03,0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x03,0x0d,0x0d,0x0e,0xc2,0xc7, 0xd2,0xb0,0xb7,0xca,0x89,0x92,0xb1,0x90,0x98,0xb4,0xea,0xeb,0xef,0x48,0x41,0x44, 0x19,0x11,0x14,0x21,0x17,0x1b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x38,0x38,0xcf,0xd3,0xdf,0xad,0xb4,0xc9, 0xaf,0xb5,0xc9,0xb2,0xb9,0xcc,0xb1,0xb8,0xcb,0xaf,0xb5,0xc9,0xb6,0xbd,0xd4,0x9c, 0xa2,0xa2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02, 0x26,0x26,0x26,0x08,0x08,0x08,0x06,0x06,0x07,0x0e,0x0f,0x15,0x19,0x1b,0x23,0x1a, 0x1c,0x24,0x16,0x16,0x1e,0x1f,0x22,0x2d,0x2e,0x32,0x3e,0x2b,0x2f,0x3e,0x34,0x38, 0x46,0x29,0x2d,0x3b,0x29,0x28,0x37,0x37,0x3b,0x46,0x2d,0x30,0x39,0x17,0x16,0x1d, 0x12,0x10,0x15,0x10,0x0e,0x12,0x12,0x0f,0x13,0x1e,0x1a,0x21,0x2f,0x29,0x36,0x3e, 0x35,0x44,0x46,0x3e,0x4f,0x4a,0x3f,0x53,0x4c,0x42,0x55,0x4a,0x42,0x56,0x4a,0x43, 0x58,0x4b,0x43,0x5a,0x45,0x44,0x5e,0x4d,0x54,0x67,0x50,0x56,0x67,0x53,0x5a,0x6b, 0x5e,0x64,0x75,0x5d,0x62,0x72,0x54,0x5a,0x6c,0x4e,0x55,0x6a,0x62,0x69,0x7a,0x85, 0x88,0x91,0xaa,0xa9,0xb3,0x7d,0x86,0x9f,0x62,0x59,0x7a,0x5b,0x56,0x72,0x57,0x55, 0x70,0x56,0x54,0x70,0x55,0x51,0x6d,0x52,0x41,0x55,0x8c,0x87,0x96,0x6b,0x63,0x6e, 0x28,0x21,0x2b,0x2c,0x27,0x32,0x8d,0x92,0xa8,0x64,0x6c,0x8d,0x88,0x8f,0xa9,0xaa, 0xaf,0xc1,0xa5,0xac,0xbe,0x87,0x90,0xa9,0x79,0x82,0xa0,0x7a,0x83,0x9f,0x7d,0x87, 0xa0,0x78,0x82,0x9e,0x7c,0x86,0xa0,0x85,0x8e,0xa7,0x88,0x91,0xaa,0x7e,0x87,0xa2, 0x75,0x77,0x93,0x75,0x7f,0x9c,0x82,0x8a,0x9e,0x6b,0x71,0x7e,0x64,0x69,0x77,0x50, 0x56,0x67,0x3c,0x41,0x56,0x3c,0x3a,0x50,0x3a,0x39,0x4e,0x32,0x32,0x45,0x2e,0x2f, 0x40,0x32,0x32,0x43,0x37,0x34,0x46,0x3a,0x35,0x46,0x3f,0x38,0x4a,0x45,0x3c,0x4e, 0x49,0x3f,0x52,0x49,0x40,0x52,0x46,0x41,0x56,0x4a,0x40,0x53,0x40,0x37,0x46,0x32, 0x2d,0x3a,0x2b,0x29,0x37,0x32,0x32,0x43,0x31,0x30,0x42,0x32,0x2f,0x3e,0x32,0x2f, 0x3e,0x32,0x30,0x40,0x33,0x30,0x41,0x54,0x4a,0x60,0x55,0x48,0x5c,0x8e,0x88,0x94, 0x51,0x59,0x79,0x57,0x61,0x80,0x74,0x7e,0x94,0x72,0x7b,0x91,0x68,0x71,0x8a,0x5d, 0x62,0x7e,0x22,0x21,0x2d,0x29,0x28,0x36,0x3e,0x36,0x47,0x47,0x3e,0x4e,0x4a,0x40, 0x52,0x4b,0x42,0x52,0x4e,0x42,0x53,0x52,0x45,0x58,0x52,0x46,0x59,0x51,0x43,0x56, 0x4d,0x40,0x51,0x4a,0x3c,0x4d,0x47,0x3a,0x4a,0x42,0x34,0x43,0x37,0x2b,0x36,0x2f, 0x23,0x2d,0x33,0x28,0x32,0x41,0x33,0x3f,0x5c,0x4c,0x60,0x54,0x4e,0x66,0x59,0x4d, 0x63,0x57,0x4d,0x64,0x56,0x4d,0x64,0x53,0x4d,0x66,0x4f,0x4c,0x66,0x5a,0x4e,0x66, 0x5b,0x51,0x69,0x58,0x52,0x6d,0x52,0x52,0x6e,0x4f,0x50,0x6c,0x4e,0x4d,0x66,0x4f, 0x48,0x60,0x50,0x44,0x56,0x48,0x3a,0x49,0x3a,0x2e,0x39,0x32,0x27,0x32,0x32,0x29, 0x32,0x2f,0x26,0x30,0x38,0x2e,0x39,0x5a,0x4e,0x62,0x54,0x4d,0x66,0x4e,0x4a,0x63, 0x62,0x55,0x6d,0x43,0x34,0x40,0x33,0x26,0x2f,0x3d,0x2f,0x39,0x4f,0x42,0x52,0x4c, 0x41,0x54,0x3e,0x3b,0x4a,0x4e,0x48,0x54,0x4a,0x3f,0x4d,0x3c,0x32,0x3e,0x74,0x70, 0x7c,0x76,0x7d,0x95,0x51,0x5a,0x7a,0x57,0x60,0x80,0x60,0x6a,0x87,0x62,0x6c,0x8b, 0x64,0x6f,0x8e,0x63,0x6d,0x8e,0x62,0x6d,0x8f,0x60,0x69,0x8c,0x51,0x5b,0x81,0x55, 0x60,0x83,0x4a,0x53,0x6e,0x16,0x18,0x1d,0x16,0x18,0x1d,0x16,0x17,0x1c,0x4f,0x4c, 0x6b,0x51,0x50,0x77,0x51,0x50,0x76,0x51,0x50,0x76,0x55,0x50,0x76,0x58,0x51,0x76, 0x59,0x51,0x77,0x5b,0x51,0x77,0x5a,0x52,0x77,0x5a,0x52,0x77,0x5b,0x52,0x77,0x56, 0x50,0x77,0x51,0x50,0x78,0x51,0x54,0x7d,0x52,0x5d,0x85,0x66,0x71,0x94,0xa7,0xa4, 0xad,0x0a,0x0a,0x0d,0x09,0x0a,0x0b,0x09,0x0a,0x0c,0x08,0x09,0x0b,0x58,0x49,0x5b, 0x4a,0x3b,0x49,0x3f,0x31,0x3d,0x4a,0x40,0x49,0xc3,0xc7,0xd5,0x94,0x9c,0xb5,0x5e, 0x69,0x8e,0x50,0x5b,0x83,0x4e,0x59,0x7f,0x4a,0x55,0x79,0x47,0x51,0x73,0x42,0x4c, 0x6c,0x3d,0x47,0x66,0x3a,0x45,0x64,0x39,0x40,0x60,0x3a,0x42,0x61,0x3f,0x43,0x65, 0x43,0x4c,0x6d,0x44,0x4c,0x6d,0x4a,0x52,0x76,0x33,0x37,0x50,0x17,0x16,0x1b,0x38, 0x31,0x47,0x56,0x51,0x76,0x53,0x50,0x78,0x57,0x52,0x78,0x52,0x55,0x7c,0x58,0x5a, 0x70,0x0c,0x0d,0x0f,0x0c,0x0d,0x10,0x0c,0x0d,0x0f,0x0b,0x0c,0x0e,0x0a,0x0b,0x0e, 0x0a,0x0b,0x0e,0x0a,0x0a,0x0d,0x09,0x0a,0x0c,0x09,0x0a,0x0b,0x08,0x08,0x0a,0x07, 0x07,0x09,0x06,0x07,0x08,0x06,0x06,0x08,0x06,0x06,0x08,0x05,0x06,0x06,0x05,0x06, 0x06,0x04,0x05,0x06,0x05,0x05,0x06,0x04,0x05,0x06,0x04,0x05,0x06,0x04,0x04,0x05, 0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x02,0xa3, 0xa5,0xaf,0xc7,0xcc,0xd8,0xb2,0xb9,0xcc,0x9b,0xa3,0xbd,0xd1,0xd6,0xe0,0x8e,0x8a, 0x8c,0x16,0x0f,0x12,0x1c,0x13,0x17,0x15,0x10,0x14,0x02,0x02,0x02,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc8,0xc9, 0xca,0xb8,0xbe,0xcf,0xb1,0xb8,0xcb,0xb0,0xb7,0xca,0xb1,0xb8,0xcb,0xb1,0xb8,0xcb, 0xb0,0xb6,0xcb,0xc1,0xca,0xe2,0x1e,0x1e,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x02,0x02,0x02,0x28,0x28,0x28,0x02,0x02,0x02,0x04,0x03,0x04,0x06,0x06,0x07, 0x09,0x0a,0x0d,0x0f,0x10,0x16,0x13,0x14,0x1a,0x16,0x16,0x1e,0x1d,0x1e,0x28,0x26, 0x28,0x35,0x26,0x27,0x35,0x25,0x23,0x2f,0x26,0x26,0x34,0x2a,0x2e,0x3a,0x1b,0x1a, 0x25,0x16,0x14,0x1a,0x12,0x10,0x14,0x0f,0x0e,0x11,0x11,0x0e,0x12,0x1a,0x16,0x1b, 0x2c,0x26,0x31,0x41,0x38,0x47,0x4d,0x42,0x54,0x4e,0x44,0x57,0x4e,0x43,0x59,0x49, 0x43,0x59,0x4b,0x43,0x59,0x4a,0x42,0x57,0x4f,0x46,0x5b,0x46,0x46,0x5e,0x45,0x47, 0x61,0x49,0x4f,0x66,0x55,0x5b,0x71,0x5f,0x65,0x76,0x5f,0x65,0x76,0x4c,0x53,0x67, 0x43,0x49,0x61,0x5a,0x61,0x73,0xa3,0xa1,0xab,0xaa,0xaf,0xc0,0x66,0x69,0x86,0x5b, 0x56,0x73,0x53,0x51,0x6b,0x51,0x50,0x6a,0x50,0x4f,0x6a,0x57,0x45,0x5a,0x76,0x74, 0x89,0x8a,0x83,0x8e,0x2b,0x22,0x2c,0x25,0x1e,0x28,0x6b,0x6d,0x7d,0x75,0x7d,0x99, 0x67,0x71,0x92,0xa0,0xa6,0xb9,0xa7,0xac,0xbf,0x94,0x9c,0xb1,0x7d,0x86,0xa1,0x78, 0x82,0x9c,0x74,0x7d,0x99,0x6d,0x76,0x93,0x6b,0x74,0x90,0x72,0x7b,0x97,0x7a,0x82, 0x9e,0x78,0x81,0x9d,0x6c,0x72,0x91,0x6e,0x74,0x92,0x79,0x83,0x9e,0x65,0x6b,0x7c, 0x64,0x6a,0x7c,0x5c,0x62,0x76,0x4e,0x54,0x6b,0x42,0x45,0x5d,0x3e,0x3e,0x54,0x37, 0x38,0x4c,0x32,0x37,0x4a,0x32,0x34,0x45,0x34,0x33,0x46,0x38,0x35,0x47,0x42,0x3a, 0x4c,0x46,0x3e,0x50,0x4b,0x42,0x55,0x4a,0x41,0x55,0x3f,0x37,0x48,0x3f,0x37,0x47, 0x3d,0x36,0x48,0x3b,0x37,0x48,0x32,0x32,0x43,0x3a,0x3c,0x52,0x39,0x37,0x4b,0x3a, 0x36,0x48,0x36,0x33,0x45,0x33,0x32,0x42,0x34,0x32,0x44,0x57,0x4d,0x65,0x59,0x4c, 0x62,0x8b,0x84,0x92,0x52,0x5c,0x7d,0x5b,0x66,0x86,0x7e,0x87,0x9f,0x79,0x82,0x9b, 0x73,0x7b,0x95,0x64,0x6d,0x89,0x20,0x23,0x2d,0x2c,0x2e,0x3d,0x38,0x36,0x4a,0x44, 0x3e,0x52,0x4b,0x42,0x56,0x4e,0x43,0x56,0x4e,0x42,0x53,0x4c,0x40,0x51,0x4d,0x3f, 0x50,0x4c,0x3e,0x4f,0x4b,0x3e,0x4c,0x4a,0x3b,0x4b,0x46,0x39,0x46,0x42,0x34,0x41, 0x3e,0x32,0x3d,0x49,0x3b,0x49,0x5a,0x49,0x5b,0x5e,0x4e,0x62,0x5f,0x4e,0x62,0x5e, 0x51,0x67,0x5a,0x4f,0x67,0x58,0x4e,0x66,0x58,0x4d,0x65,0x57,0x4c,0x62,0x57,0x4b, 0x61,0x52,0x4b,0x64,0x50,0x4b,0x64,0x53,0x4e,0x66,0x52,0x4f,0x6b,0x52,0x56,0x72, 0x52,0x59,0x73,0x4f,0x56,0x70,0x4c,0x4a,0x65,0x4c,0x48,0x62,0x4f,0x47,0x5e,0x4f, 0x40,0x52,0x35,0x2a,0x34,0x30,0x27,0x31,0x34,0x2a,0x34,0x4e,0x3f,0x51,0x5c,0x52, 0x69,0x5a,0x4f,0x67,0x64,0x55,0x6d,0x45,0x35,0x42,0x32,0x25,0x2d,0x48,0x38,0x46, 0x52,0x43,0x55,0x36,0x2d,0x38,0x2f,0x28,0x32,0x37,0x2e,0x38,0x3a,0x2e,0x39,0x41, 0x33,0x40,0x45,0x3b,0x45,0x8f,0x96,0xa6,0x61,0x6a,0x89,0x4f,0x5a,0x7b,0x62,0x6c, 0x8a,0x63,0x6e,0x8d,0x65,0x70,0x8f,0x63,0x6f,0x8f,0x62,0x6d,0x8f,0x60,0x6b,0x8c, 0x59,0x62,0x85,0x52,0x5a,0x7f,0x5c,0x66,0x88,0x1d,0x20,0x29,0x16,0x18,0x1d,0x16, 0x17,0x1c,0x4f,0x4d,0x6c,0x52,0x51,0x77,0x51,0x50,0x76,0x51,0x50,0x77,0x52,0x51, 0x76,0x55,0x50,0x76,0x59,0x51,0x76,0x59,0x51,0x77,0x5b,0x51,0x77,0x5a,0x52,0x77, 0x5b,0x52,0x77,0x56,0x50,0x77,0x51,0x50,0x78,0x52,0x54,0x7c,0x52,0x5d,0x85,0x62, 0x6c,0x90,0xa0,0xa0,0xab,0x0a,0x0a,0x0d,0x0a,0x0a,0x0d,0x09,0x0a,0x0c,0x09,0x0a, 0x0c,0x55,0x46,0x56,0x4d,0x3e,0x4d,0x3e,0x31,0x3c,0x49,0x3e,0x48,0xc2,0xc6,0xd4, 0x92,0x9a,0xb3,0x62,0x6c,0x91,0x53,0x5d,0x82,0x4e,0x59,0x80,0x4a,0x55,0x7a,0x47, 0x50,0x74,0x41,0x4b,0x6c,0x3e,0x45,0x69,0x3a,0x42,0x63,0x3a,0x41,0x61,0x3a,0x41, 0x60,0x3e,0x45,0x65,0x43,0x4a,0x6e,0x44,0x4b,0x6d,0x4b,0x53,0x76,0x33,0x39,0x52, 0x0b,0x0c,0x0e,0x30,0x2b,0x3c,0x52,0x52,0x7b,0x53,0x55,0x7c,0x57,0x52,0x77,0x53, 0x50,0x78,0x58,0x63,0x88,0x24,0x25,0x2c,0x0c,0x0d,0x10,0x0c,0x0d,0x0f,0x0b,0x0c, 0x0e,0x0b,0x0c,0x0e,0x0a,0x0b,0x0e,0x0a,0x0a,0x0d,0x0a,0x0a,0x0c,0x09,0x0a,0x0b, 0x09,0x09,0x0b,0x08,0x09,0x0a,0x07,0x07,0x09,0x06,0x07,0x08,0x06,0x06,0x08,0x06, 0x06,0x08,0x06,0x06,0x07,0x05,0x05,0x06,0x05,0x05,0x06,0x04,0x05,0x06,0x04,0x05, 0x06,0x04,0x04,0x05,0x03,0x03,0x05,0x03,0x03,0x05,0x03,0x03,0x04,0x02,0x02,0x03, 0x52,0x53,0x57,0xca,0xce,0xdc,0xbf,0xc6,0xd4,0xab,0xb2,0xc7,0xc2,0xc8,0xd5,0xcf, 0xcd,0xcf,0x1a,0x11,0x15,0x19,0x11,0x14,0x25,0x1b,0x21,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x30,0x30,0x30,0xca,0xcf,0xdd,0xb1,0xb8,0xcb,0xb2,0xb9,0xcc,0xb2,0xb9, 0xcb,0xb2,0xb9,0xcb,0xb1,0xb8,0xcb,0xb4,0xba,0xce,0xc8,0xd1,0xe7,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x03,0x03,0x02, 0x03,0x04,0x03,0x04,0x06,0x05,0x06,0x0d,0x0e,0x12,0x18,0x1a,0x22,0x1b,0x1e,0x27, 0x20,0x22,0x2e,0x1f,0x20,0x2b,0x1a,0x1a,0x23,0x1a,0x1a,0x23,0x22,0x26,0x2f,0x22, 0x26,0x2e,0x16,0x16,0x1d,0x14,0x12,0x16,0x12,0x0f,0x14,0x10,0x0e,0x12,0x12,0x0f, 0x13,0x1b,0x16,0x1d,0x2f,0x28,0x33,0x46,0x3c,0x4e,0x4f,0x44,0x57,0x52,0x48,0x5c, 0x4e,0x47,0x5e,0x46,0x42,0x5b,0x45,0x42,0x5a,0x46,0x43,0x59,0x4c,0x44,0x5a,0x50, 0x46,0x5b,0x4a,0x46,0x5e,0x47,0x47,0x61,0x4f,0x56,0x6e,0x5b,0x62,0x76,0x62,0x68, 0x79,0x5c,0x62,0x73,0x48,0x4e,0x63,0x43,0x42,0x5b,0x63,0x67,0x7c,0xb1,0xb6,0xc3, 0xab,0xa9,0xb8,0x5c,0x67,0x86,0x54,0x56,0x75,0x4f,0x50,0x6c,0x4b,0x4b,0x66,0x56, 0x45,0x5a,0x63,0x62,0x7b,0x98,0x92,0x9c,0x2f,0x27,0x31,0x24,0x1d,0x27,0x3b,0x39, 0x44,0x8e,0x94,0xa9,0x5b,0x64,0x87,0x8b,0x94,0xac,0x9e,0xa6,0xb9,0x99,0xa2,0xb6, 0x81,0x8b,0xa5,0x7a,0x83,0x9f,0x77,0x80,0x9a,0x71,0x79,0x94,0x6a,0x74,0x8f,0x6a, 0x72,0x8f,0x6f,0x78,0x94,0x73,0x7d,0x98,0x6c,0x75,0x93,0x70,0x74,0x92,0x76,0x80, 0x9c,0x6a,0x71,0x85,0x5c,0x63,0x77,0x5a,0x62,0x78,0x5f,0x66,0x7d,0x5e,0x65,0x7b, 0x4d,0x54,0x6a,0x41,0x47,0x5d,0x46,0x4c,0x5e,0x42,0x46,0x57,0x33,0x38,0x4a,0x32, 0x31,0x42,0x3b,0x37,0x49,0x39,0x33,0x42,0x3d,0x35,0x46,0x3c,0x35,0x46,0x3c,0x38, 0x4b,0x49,0x42,0x57,0x3e,0x3d,0x53,0x3a,0x3a,0x4e,0x3b,0x3b,0x51,0x3c,0x3d,0x52, 0x39,0x38,0x4c,0x3a,0x36,0x48,0x37,0x34,0x46,0x34,0x32,0x43,0x35,0x33,0x46,0x59, 0x4f,0x67,0x5a,0x4e,0x65,0x83,0x7a,0x8a,0x5d,0x66,0x85,0x5c,0x67,0x8a,0x7c,0x85, 0xa0,0x7e,0x88,0xa3,0x75,0x7f,0x9a,0x67,0x72,0x8e,0x21,0x25,0x2f,0x29,0x2c,0x3a, 0x32,0x32,0x44,0x46,0x40,0x54,0x4e,0x44,0x59,0x4e,0x43,0x56,0x4a,0x3e,0x4e,0x46, 0x3a,0x49,0x46,0x39,0x47,0x4b,0x3d,0x4c,0x4a,0x3c,0x4c,0x4b,0x3d,0x4d,0x4f,0x41, 0x51,0x56,0x48,0x5a,0x5d,0x50,0x66,0x5f,0x53,0x6c,0x5e,0x52,0x68,0x55,0x45,0x56, 0x4f,0x3f,0x4f,0x5f,0x4f,0x62,0x5e,0x4e,0x63,0x54,0x45,0x56,0x5a,0x49,0x5d,0x59, 0x4a,0x5e,0x56,0x49,0x5c,0x52,0x48,0x5e,0x4a,0x46,0x5e,0x4c,0x48,0x5e,0x4b,0x49, 0x62,0x4e,0x54,0x6f,0x5b,0x62,0x7c,0x5e,0x66,0x7f,0x53,0x5b,0x75,0x4e,0x51,0x6c, 0x4c,0x4b,0x66,0x51,0x49,0x61,0x4a,0x3b,0x4a,0x32,0x27,0x31,0x2e,0x24,0x2d,0x36, 0x2c,0x38,0x5c,0x4c,0x61,0x5e,0x52,0x6a,0x63,0x58,0x74,0x58,0x4e,0x65,0x52,0x45, 0x57,0x57,0x48,0x5a,0x43,0x38,0x46,0x35,0x2b,0x37,0x2e,0x23,0x2d,0x31,0x26,0x2f, 0x38,0x2c,0x34,0x49,0x3b,0x49,0x3b,0x2e,0x38,0x8c,0x88,0x92,0x7f,0x88,0x9f,0x50, 0x5b,0x7e,0x5e,0x69,0x8a,0x66,0x72,0x91,0x66,0x72,0x92,0x66,0x70,0x91,0x65,0x6f, 0x90,0x60,0x6a,0x8c,0x5d,0x68,0x8a,0x52,0x5c,0x81,0x58,0x62,0x85,0x3c,0x43,0x58, 0x16,0x17,0x1c,0x15,0x16,0x1b,0x4e,0x4c,0x6a,0x51,0x51,0x77,0x51,0x50,0x77,0x51, 0x50,0x77,0x53,0x50,0x75,0x55,0x4f,0x76,0x58,0x51,0x75,0x59,0x52,0x77,0x5a,0x51, 0x77,0x5a,0x52,0x77,0x5b,0x52,0x77,0x57,0x52,0x77,0x51,0x50,0x78,0x51,0x53,0x7b, 0x52,0x5d,0x85,0x5d,0x69,0x8e,0x9c,0x9d,0xaa,0x0a,0x0a,0x0d,0x0a,0x0a,0x0d,0x0a, 0x0a,0x0d,0x09,0x09,0x0b,0x50,0x42,0x51,0x4f,0x41,0x4f,0x3e,0x31,0x3c,0x42,0x36, 0x41,0xc0,0xc4,0xd2,0x8c,0x96,0xb0,0x60,0x6a,0x8f,0x54,0x5e,0x84,0x4e,0x59,0x81, 0x4b,0x55,0x7b,0x47,0x50,0x76,0x41,0x4a,0x6d,0x3e,0x46,0x69,0x39,0x44,0x63,0x39, 0x3f,0x5f,0x3a,0x40,0x60,0x3f,0x42,0x65,0x42,0x48,0x6b,0x44,0x4b,0x6d,0x49,0x50, 0x77,0x33,0x39,0x51,0x0c,0x0d,0x0f,0x0a,0x0b,0x0e,0x50,0x56,0x76,0x54,0x5e,0x86, 0x52,0x50,0x78,0x57,0x51,0x77,0x53,0x52,0x79,0x5c,0x64,0x83,0x0c,0x0d,0x0f,0x0c, 0x0d,0x0f,0x0b,0x0c,0x0e,0x0b,0x0c,0x0e,0x0b,0x0b,0x0e,0x0a,0x0a,0x0d,0x0a,0x0a, 0x0c,0x09,0x0a,0x0b,0x08,0x09,0x0a,0x07,0x08,0x0a,0x08,0x08,0x0a,0x07,0x07,0x09, 0x06,0x06,0x08,0x06,0x06,0x07,0x06,0x06,0x07,0x05,0x06,0x06,0x05,0x05,0x06,0x04, 0x05,0x06,0x04,0x05,0x06,0x04,0x04,0x05,0x03,0x03,0x05,0x03,0x03,0x04,0x02,0x02, 0x03,0x0d,0x0d,0x0e,0xc1,0xc7,0xd5,0xbe,0xc4,0xd4,0xb2,0xb8,0xcb,0xb5,0xbc,0xce, 0xf1,0xf2,0xf3,0x2c,0x26,0x28,0x18,0x10,0x12,0x1f,0x15,0x1a,0x12,0x0d,0x11,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xbb,0xbe,0xc1,0xba,0xc0,0xd1,0xb0, 0xb7,0xca,0xb2,0xb9,0xcb,0xb0,0xb8,0xcb,0xb1,0xb9,0xcb,0xb2,0xb8,0xcb,0xbd,0xc4, 0xd8,0x5d,0x5d,0x5d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03, 0x02,0x03,0x03,0x02,0x03,0x03,0x02,0x03,0x04,0x03,0x05,0x07,0x06,0x09,0x10,0x11, 0x16,0x1d,0x20,0x29,0x22,0x25,0x31,0x1c,0x1e,0x28,0x11,0x11,0x16,0x10,0x0f,0x15, 0x13,0x15,0x1b,0x12,0x14,0x1a,0x10,0x0f,0x15,0x11,0x0e,0x13,0x10,0x0e,0x12,0x12, 0x0f,0x12,0x14,0x11,0x16,0x1d,0x18,0x1e,0x32,0x2c,0x37,0x48,0x3e,0x50,0x4e,0x44, 0x57,0x50,0x47,0x5c,0x4a,0x48,0x61,0x4a,0x4d,0x66,0x49,0x4f,0x66,0x46,0x46,0x60, 0x46,0x45,0x5e,0x52,0x47,0x5e,0x52,0x47,0x5d,0x4c,0x47,0x5e,0x46,0x47,0x61,0x52, 0x5a,0x70,0x6a,0x70,0x7f,0x6b,0x6f,0x7e,0x56,0x5c,0x6e,0x4f,0x56,0x6a,0x4d,0x51, 0x6b,0x95,0x9b,0xae,0xbb,0xb8,0xc1,0xac,0xb0,0xbe,0x6e,0x76,0x8e,0x57,0x5f,0x7e, 0x51,0x53,0x6f,0x51,0x42,0x58,0x55,0x51,0x6e,0xa6,0xa0,0xaa,0x36,0x2b,0x37,0x25, 0x1e,0x29,0x24,0x1f,0x28,0x88,0x8d,0xa1,0x67,0x6f,0x8f,0x69,0x73,0x93,0x95,0x9c, 0xb2,0x9a,0xa2,0xb6,0x8d,0x95,0xac,0x79,0x84,0x9f,0x79,0x83,0x9d,0x7a,0x82,0x9b, 0x7c,0x84,0x9d,0x75,0x7e,0x97,0x6a,0x74,0x90,0x64,0x6e,0x8d,0x5f,0x68,0x89,0x64, 0x66,0x85,0x6c,0x75,0x93,0x6f,0x76,0x8e,0x5d,0x64,0x78,0x58,0x5f,0x76,0x5d,0x64, 0x7c,0x67,0x6f,0x85,0x66,0x6e,0x82,0x59,0x60,0x75,0x58,0x5f,0x73,0x56,0x5c,0x6d, 0x3f,0x44,0x54,0x2f,0x34,0x44,0x30,0x30,0x41,0x3a,0x36,0x49,0x39,0x34,0x45,0x39, 0x35,0x48,0x39,0x38,0x4c,0x3a,0x3b,0x50,0x42,0x48,0x5d,0x41,0x46,0x5a,0x39,0x3e, 0x52,0x37,0x37,0x4a,0x36,0x35,0x47,0x36,0x34,0x46,0x3c,0x36,0x48,0x3e,0x38,0x49, 0x38,0x36,0x48,0x59,0x4f,0x68,0x5a,0x4e,0x64,0x77,0x6d,0x7f,0x5e,0x67,0x87,0x61, 0x6c,0x8d,0x7f,0x88,0xa4,0x80,0x89,0xa4,0x76,0x80,0x9c,0x69,0x73,0x91,0x27,0x27, 0x35,0x2b,0x2b,0x3b,0x38,0x36,0x4a,0x49,0x42,0x56,0x4d,0x44,0x57,0x4a,0x40,0x50, 0x49,0x3c,0x4c,0x4b,0x3c,0x4b,0x4d,0x3e,0x4d,0x4e,0x3e,0x4e,0x4e,0x3e,0x4e,0x54, 0x45,0x56,0x59,0x4e,0x63,0x5d,0x52,0x6b,0x5a,0x52,0x6e,0x59,0x52,0x6d,0x5a,0x4f, 0x67,0x56,0x4a,0x5d,0x56,0x46,0x5a,0x56,0x46,0x58,0x56,0x47,0x59,0x59,0x4c,0x61, 0x59,0x4e,0x66,0x54,0x4d,0x66,0x51,0x4a,0x62,0x4d,0x47,0x5f,0x48,0x44,0x5c,0x4c, 0x45,0x5a,0x50,0x46,0x5b,0x4a,0x46,0x5e,0x4c,0x4e,0x66,0x52,0x59,0x72,0x52,0x5a, 0x76,0x52,0x56,0x72,0x4f,0x50,0x6c,0x54,0x4e,0x66,0x58,0x4a,0x5d,0x4e,0x40,0x50, 0x3f,0x32,0x3e,0x36,0x29,0x33,0x42,0x34,0x41,0x5e,0x51,0x66,0x66,0x5b,0x77,0x56, 0x52,0x6d,0x55,0x4f,0x69,0x4a,0x3f,0x52,0x42,0x36,0x45,0x38,0x2e,0x39,0x33,0x28, 0x31,0x35,0x2a,0x34,0x3c,0x2d,0x38,0x48,0x38,0x45,0x48,0x3a,0x48,0x55,0x4b,0x55, 0xa5,0xab,0xbb,0x60,0x6b,0x8d,0x57,0x60,0x84,0x69,0x73,0x94,0x68,0x74,0x93,0x67, 0x73,0x92,0x65,0x6f,0x90,0x61,0x6d,0x8e,0x5f,0x68,0x8b,0x51,0x5b,0x7f,0x54,0x5f, 0x82,0x57,0x62,0x83,0x16,0x17,0x1d,0x15,0x16,0x1c,0x4c,0x4c,0x69,0x51,0x53,0x77, 0x51,0x50,0x77,0x50,0x4f,0x75,0x52,0x50,0x76,0x55,0x4f,0x75,0x58,0x50,0x75,0x5a, 0x50,0x76,0x5a,0x51,0x77,0x5a,0x51,0x77,0x5a,0x52,0x77,0x56,0x50,0x77,0x51,0x4f, 0x78,0x51,0x50,0x7a,0x52,0x5c,0x84,0x5c,0x68,0x8d,0x93,0x96,0xa6,0x0a,0x0b,0x0e, 0x0a,0x0a,0x0d,0x09,0x09,0x0b,0x09,0x09,0x0b,0x4a,0x3d,0x4b,0x51,0x42,0x51,0x3f, 0x31,0x3d,0x41,0x36,0x3f,0xbc,0xc1,0xd0,0x85,0x8f,0xac,0x5d,0x69,0x8e,0x51,0x5c, 0x83,0x4e,0x59,0x81,0x4c,0x55,0x7b,0x47,0x53,0x77,0x41,0x4c,0x6e,0x3e,0x47,0x6a, 0x39,0x42,0x63,0x39,0x40,0x61,0x3a,0x3f,0x60,0x3d,0x40,0x64,0x42,0x48,0x6b,0x43, 0x4a,0x6c,0x4a,0x52,0x76,0x33,0x39,0x52,0x0b,0x0c,0x0e,0x0b,0x0c,0x0e,0x24,0x22, 0x2d,0x5d,0x69,0x8c,0x52,0x51,0x79,0x59,0x53,0x77,0x56,0x51,0x77,0x54,0x5e,0x85, 0x22,0x23,0x2c,0x0c,0x0d,0x0f,0x0c,0x0d,0x0f,0x0b,0x0c,0x0e,0x0b,0x0c,0x0e,0x0b, 0x0b,0x0e,0x0a,0x0b,0x0e,0x0a,0x0a,0x0c,0x09,0x0a,0x0b,0x09,0x0a,0x0b,0x08,0x08, 0x0a,0x07,0x08,0x0a,0x07,0x07,0x09,0x06,0x07,0x09,0x06,0x06,0x08,0x06,0x06,0x08, 0x06,0x06,0x08,0x05,0x06,0x06,0x05,0x05,0x06,0x04,0x05,0x06,0x04,0x05,0x06,0x04, 0x04,0x05,0x02,0x02,0x03,0x8f,0x95,0xa3,0xb9,0xbf,0xd0,0xb7,0xbd,0xce,0xaf,0xb6, 0xc9,0xe2,0xe4,0xea,0x67,0x61,0x64,0x17,0x0f,0x11,0x1a,0x12,0x14,0x24,0x1b,0x1f, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2e,0x2e,0x2e, 0xcb,0xd0,0xdd,0xb2,0xb9,0xcb,0xb1,0xb7,0xca,0xb3,0xb9,0xcb,0xb2,0xb9,0xcb,0xb3, 0xb9,0xcc,0xb2,0xb9,0xcc,0xcc,0xd4,0xed,0x07,0x07,0x07,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x03,0x02,0x02,0x03,0x03,0x03,0x03,0x03,0x03,0x04,0x03,0x04,0x04, 0x03,0x05,0x06,0x05,0x07,0x0d,0x0e,0x12,0x16,0x18,0x1f,0x16,0x18,0x20,0x0a,0x0a, 0x0e,0x1e,0x1e,0x20,0x1e,0x1e,0x21,0x09,0x08,0x0b,0x0a,0x0a,0x0d,0x0b,0x0a,0x0d, 0x0e,0x0c,0x0f,0x13,0x10,0x15,0x18,0x14,0x19,0x1e,0x1a,0x20,0x32,0x2a,0x35,0x46, 0x3d,0x4d,0x4d,0x42,0x55,0x4d,0x44,0x58,0x46,0x45,0x5f,0x50,0x57,0x6e,0x5b,0x62, 0x77,0x4f,0x55,0x6c,0x47,0x4a,0x62,0x49,0x46,0x60,0x54,0x49,0x5e,0x51,0x46,0x5d, 0x48,0x44,0x5a,0x45,0x47,0x60,0x65,0x6a,0x7b,0x72,0x76,0x82,0x62,0x67,0x75,0x52, 0x59,0x6c,0x5a,0x60,0x74,0x6c,0x73,0x90,0x75,0x79,0x97,0x94,0x98,0xae,0x76,0x7e, 0x96,0x5f,0x67,0x83,0x54,0x58,0x76,0x58,0x48,0x5d,0x50,0x4a,0x67,0xa1,0x9b,0xa5, 0x41,0x38,0x43,0x26,0x1f,0x2a,0x22,0x1c,0x26,0x57,0x59,0x67,0x7e,0x84,0x9e,0x57, 0x62,0x86,0x8b,0x93,0xab,0x94,0x9c,0xb2,0x93,0x9b,0xb1,0x80,0x88,0xa3,0x7d,0x85, 0x9f,0x88,0x90,0xa7,0x82,0x8a,0xa0,0x66,0x6f,0x89,0x61,0x64,0x82,0x68,0x67,0x84, 0x66,0x64,0x82,0x57,0x55,0x77,0x58,0x5c,0x7f,0x6a,0x75,0x92,0x5c,0x64,0x77,0x5b, 0x62,0x77,0x59,0x61,0x78,0x63,0x6a,0x81,0x6a,0x71,0x86,0x68,0x70,0x83,0x5f,0x66, 0x7b,0x59,0x5f,0x72,0x46,0x4c,0x5d,0x33,0x38,0x46,0x2e,0x32,0x42,0x2e,0x2e,0x40, 0x31,0x30,0x42,0x2e,0x2e,0x3f,0x31,0x30,0x42,0x32,0x31,0x42,0x33,0x32,0x44,0x33, 0x32,0x45,0x34,0x33,0x46,0x34,0x33,0x46,0x34,0x33,0x46,0x34,0x33,0x46,0x3e,0x38, 0x49,0x46,0x3a,0x4a,0x41,0x39,0x4a,0x5a,0x50,0x68,0x5b,0x4e,0x64,0x6d,0x62,0x75, 0x5c,0x65,0x85,0x60,0x6b,0x8c,0x82,0x8b,0xa5,0x7c,0x84,0xa2,0x76,0x7f,0x9b,0x6b, 0x73,0x92,0x31,0x2f,0x3f,0x37,0x33,0x44,0x3c,0x38,0x4b,0x49,0x42,0x56,0x4b,0x41, 0x54,0x4a,0x3f,0x52,0x4e,0x40,0x52,0x52,0x45,0x56,0x52,0x43,0x53,0x4f,0x41,0x51, 0x55,0x46,0x59,0x5a,0x4e,0x63,0x5e,0x52,0x69,0x5f,0x53,0x6a,0x5f,0x53,0x6b,0x5d, 0x53,0x6c,0x59,0x50,0x6a,0x51,0x48,0x60,0x53,0x48,0x5c,0x53,0x48,0x5d,0x50,0x48, 0x5e,0x4c,0x49,0x62,0x4e,0x4b,0x66,0x4e,0x4d,0x67,0x4e,0x4e,0x68,0x4d,0x4c,0x66, 0x4a,0x47,0x61,0x4a,0x44,0x5a,0x4e,0x43,0x58,0x51,0x46,0x59,0x52,0x48,0x5a,0x52, 0x48,0x5d,0x54,0x4a,0x60,0x57,0x4d,0x65,0x5a,0x4f,0x66,0x59,0x4c,0x61,0x52,0x42, 0x54,0x4a,0x3c,0x4a,0x4d,0x3e,0x4d,0x4e,0x3e,0x4e,0x3e,0x31,0x3d,0x4f,0x3f,0x4f, 0x6b,0x5d,0x77,0x67,0x5f,0x7d,0x5a,0x51,0x69,0x45,0x3c,0x4e,0x3d,0x33,0x40,0x37, 0x2c,0x37,0x36,0x2b,0x36,0x38,0x2c,0x36,0x3e,0x31,0x3d,0x45,0x35,0x42,0x53,0x42, 0x52,0x3f,0x33,0x3e,0xae,0xab,0xb2,0x88,0x92,0xab,0x52,0x5d,0x83,0x68,0x74,0x93, 0x6b,0x75,0x95,0x68,0x74,0x94,0x62,0x6e,0x90,0x62,0x6e,0x8f,0x5c,0x68,0x8a,0x50, 0x59,0x7f,0x55,0x61,0x83,0x53,0x5c,0x7b,0x15,0x16,0x1b,0x14,0x16,0x1b,0x4c,0x4b, 0x69,0x51,0x52,0x77,0x50,0x50,0x76,0x50,0x4f,0x75,0x52,0x50,0x75,0x53,0x4f,0x75, 0x58,0x50,0x75,0x59,0x51,0x76,0x5a,0x52,0x77,0x5b,0x52,0x77,0x5c,0x52,0x77,0x59, 0x52,0x77,0x52,0x4f,0x78,0x52,0x51,0x79,0x51,0x5b,0x83,0x5a,0x67,0x8a,0x90,0x95, 0xa8,0x0a,0x0b,0x0e,0x0a,0x0a,0x0d,0x09,0x0a,0x0d,0x09,0x09,0x0b,0x43,0x37,0x44, 0x54,0x45,0x55,0x3f,0x32,0x3d,0x41,0x35,0x40,0xba,0xbf,0xce,0x80,0x8a,0xa7,0x5c, 0x68,0x8f,0x53,0x5d,0x84,0x4d,0x58,0x81,0x4b,0x55,0x7b,0x48,0x53,0x77,0x44,0x4d, 0x70,0x3e,0x47,0x69,0x3a,0x44,0x64,0x39,0x41,0x62,0x39,0x40,0x60,0x3d,0x40,0x63, 0x41,0x47,0x6b,0x43,0x4a,0x6c,0x48,0x50,0x74,0x35,0x39,0x52,0x0d,0x0e,0x10,0x0c, 0x0d,0x0f,0x0a,0x0a,0x0d,0x4f,0x52,0x6a,0x53,0x5d,0x85,0x56,0x51,0x77,0x5a,0x53, 0x77,0x52,0x53,0x7a,0x66,0x6d,0x87,0x0d,0x0e,0x10,0x0c,0x0d,0x0f,0x0c,0x0d,0x0f, 0x0b,0x0c,0x0e,0x0b,0x0b,0x0e,0x0a,0x0b,0x0e,0x0a,0x0a,0x0d,0x0a,0x0a,0x0d,0x09, 0x0a,0x0c,0x09,0x0a,0x0b,0x08,0x09,0x0a,0x07,0x08,0x0a,0x07,0x08,0x0a,0x06,0x07, 0x09,0x06,0x06,0x08,0x06,0x06,0x07,0x06,0x06,0x08,0x05,0x06,0x07,0x05,0x05,0x06, 0x04,0x05,0x06,0x04,0x04,0x06,0x41,0x44,0x4c,0xb7,0xbd,0xce,0xc2,0xc6,0xd5,0xb6, 0xbc,0xce,0xcb,0xce,0xdc,0xb1,0xaf,0xb0,0x1c,0x13,0x16,0x17,0x0f,0x12,0x22,0x19, 0x1d,0x03,0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xb7,0xb9,0xbc,0xb8,0xbf,0xd0,0xad,0xb4,0xc9,0xb0,0xb8,0xca, 0xb1,0xb8,0xcb,0xb2,0xb8,0xcb,0xb1,0xb7,0xcb,0xb7,0xbe,0xd4,0x9b,0xa1,0xa8,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x03,0x03,0x03,0x03, 0x03,0x02,0x03,0x03,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x03,0x05,0x06,0x07,0x07, 0x07,0x0a,0x05,0x05,0x06,0x1c,0x1b,0x1c,0x1c,0x1c,0x1d,0x05,0x05,0x06,0x06,0x06, 0x07,0x07,0x06,0x09,0x0b,0x0a,0x0c,0x13,0x11,0x15,0x1a,0x16,0x1b,0x20,0x1a,0x22, 0x2e,0x26,0x30,0x40,0x36,0x43,0x49,0x3f,0x50,0x4c,0x42,0x55,0x44,0x42,0x59,0x47, 0x4c,0x65,0x4e,0x56,0x6e,0x53,0x5a,0x72,0x4d,0x52,0x6b,0x49,0x4c,0x64,0x48,0x46, 0x5e,0x52,0x48,0x5e,0x4f,0x46,0x5c,0x44,0x41,0x59,0x4e,0x53,0x6a,0x6c,0x71,0x80, 0x6f,0x73,0x7e,0x5e,0x63,0x72,0x5c,0x63,0x74,0x63,0x65,0x83,0x5d,0x5b,0x80,0x6c, 0x60,0x80,0x61,0x62,0x85,0x5a,0x64,0x83,0x52,0x56,0x74,0x5c,0x4e,0x66,0x51,0x48, 0x64,0x8e,0x8a,0x98,0x47,0x3d,0x49,0x27,0x20,0x2a,0x23,0x1d,0x28,0x32,0x2e,0x3a, 0x8e,0x95,0xaa,0x58,0x61,0x85,0x74,0x7e,0x9b,0x8c,0x94,0xad,0x8c,0x95,0xab,0x7f, 0x86,0xa1,0x70,0x77,0x94,0x6d,0x75,0x8e,0x5f,0x66,0x81,0x61,0x60,0x77,0x61,0x5c, 0x74,0x66,0x5f,0x77,0x69,0x61,0x79,0x5f,0x58,0x74,0x60,0x58,0x77,0x5f,0x61,0x83, 0x56,0x5d,0x75,0x57,0x5e,0x72,0x58,0x5f,0x75,0x65,0x6b,0x7f,0x72,0x78,0x8a,0x6e, 0x74,0x86,0x5d,0x64,0x7a,0x4e,0x56,0x6c,0x42,0x48,0x5a,0x3a,0x3f,0x4e,0x36,0x3a, 0x4b,0x32,0x36,0x47,0x2e,0x30,0x40,0x2e,0x2e,0x3e,0x2e,0x2e,0x3f,0x30,0x2f,0x41, 0x32,0x30,0x42,0x32,0x32,0x43,0x33,0x32,0x45,0x33,0x32,0x45,0x34,0x33,0x46,0x34, 0x33,0x46,0x3d,0x37,0x49,0x47,0x3a,0x4a,0x44,0x3b,0x4b,0x59,0x4f,0x68,0x59,0x4c, 0x62,0x66,0x59,0x6c,0x5c,0x65,0x84,0x5b,0x65,0x88,0x79,0x82,0x9f,0x7d,0x85,0xa2, 0x78,0x80,0x9c,0x6f,0x75,0x92,0x39,0x35,0x46,0x44,0x3e,0x52,0x49,0x42,0x57,0x4a, 0x42,0x56,0x4a,0x41,0x54,0x49,0x3f,0x52,0x50,0x46,0x59,0x52,0x46,0x58,0x50,0x43, 0x55,0x53,0x47,0x58,0x58,0x4c,0x63,0x54,0x4e,0x69,0x53,0x50,0x6b,0x5d,0x52,0x6b, 0x5f,0x53,0x6a,0x5e,0x52,0x6a,0x5e,0x52,0x6b,0x5b,0x50,0x6a,0x5a,0x4f,0x67,0x54, 0x4e,0x67,0x4e,0x4d,0x69,0x51,0x56,0x70,0x57,0x5e,0x78,0x5a,0x60,0x7a,0x58,0x5f, 0x78,0x55,0x5b,0x75,0x52,0x59,0x72,0x4f,0x53,0x6d,0x4a,0x4d,0x66,0x48,0x44,0x5c, 0x50,0x46,0x5b,0x50,0x44,0x56,0x4e,0x40,0x52,0x50,0x42,0x52,0x55,0x46,0x56,0x5a, 0x4a,0x5c,0x54,0x44,0x56,0x45,0x36,0x44,0x44,0x36,0x42,0x4e,0x3e,0x4e,0x4d,0x3e, 0x4d,0x3e,0x30,0x3c,0x59,0x47,0x5a,0x72,0x5e,0x76,0x5d,0x4c,0x5e,0x4e,0x40,0x51, 0x41,0x35,0x43,0x39,0x2f,0x3c,0x3b,0x2e,0x3a,0x3e,0x31,0x3b,0x41,0x33,0x3f,0x47, 0x38,0x45,0x50,0x40,0x4f,0x50,0x41,0x51,0x6a,0x60,0x6a,0xc3,0xc8,0xd3,0x5a,0x66, 0x8a,0x63,0x6e,0x91,0x6c,0x77,0x97,0x69,0x75,0x95,0x65,0x70,0x91,0x62,0x6d,0x8f, 0x5d,0x68,0x8b,0x51,0x5b,0x81,0x56,0x61,0x85,0x4e,0x57,0x77,0x14,0x16,0x1a,0x13, 0x15,0x1a,0x4c,0x4b,0x69,0x51,0x52,0x77,0x50,0x50,0x76,0x50,0x4f,0x75,0x51,0x4f, 0x76,0x53,0x4f,0x75,0x57,0x51,0x75,0x56,0x51,0x75,0x5c,0x53,0x77,0x5a,0x52,0x77, 0x5a,0x52,0x77,0x59,0x52,0x77,0x52,0x4f,0x78,0x51,0x51,0x79,0x51,0x5c,0x83,0x59, 0x64,0x89,0x8a,0x8f,0xa5,0x0a,0x0b,0x0e,0x09,0x0a,0x0c,0x0a,0x0a,0x0d,0x09,0x0a, 0x0c,0x3a,0x30,0x3b,0x55,0x46,0x56,0x42,0x34,0x3f,0x3a,0x2e,0x38,0xb7,0xbe,0xcd, 0x81,0x8b,0xa9,0x5d,0x69,0x8e,0x53,0x5e,0x87,0x4e,0x5a,0x82,0x4d,0x56,0x7c,0x4a, 0x52,0x78,0x43,0x4d,0x6f,0x3e,0x48,0x6b,0x39,0x44,0x64,0x3a,0x41,0x62,0x3a,0x41, 0x61,0x3b,0x40,0x62,0x42,0x47,0x6b,0x44,0x4b,0x6e,0x49,0x50,0x75,0x37,0x3c,0x55, 0x0d,0x0e,0x11,0x0c,0x0d,0x0f,0x0a,0x0b,0x0e,0x13,0x14,0x19,0x61,0x6d,0x8f,0x52, 0x50,0x78,0x5a,0x53,0x77,0x55,0x52,0x77,0x5d,0x69,0x8c,0x1b,0x1b,0x21,0x0c,0x0d, 0x0f,0x0c,0x0d,0x0f,0x0c,0x0d,0x0f,0x0b,0x0c,0x0e,0x0b,0x0c,0x0e,0x0a,0x0b,0x0e, 0x0a,0x0a,0x0d,0x09,0x0a,0x0c,0x09,0x0a,0x0c,0x08,0x09,0x0b,0x07,0x08,0x0a,0x07, 0x08,0x0a,0x06,0x07,0x0a,0x06,0x07,0x0a,0x06,0x06,0x08,0x06,0x06,0x08,0x06,0x06, 0x07,0x05,0x06,0x07,0x05,0x05,0x06,0x0c,0x0e,0x10,0xb0,0xb5,0xc6,0xc9,0xcd,0xd9, 0xbd,0xc3,0xd3,0xbb,0xc0,0xd2,0xe2,0xe1,0xe3,0x27,0x1e,0x22,0x19,0x11,0x15,0x1b, 0x13,0x16,0x14,0x0f,0x13,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02, 0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x30,0xcc,0xd2,0xde,0xb2,0xb9, 0xcb,0xb0,0xb8,0xca,0xaf,0xb5,0xc9,0xb1,0xb7,0xca,0xb1,0xb8,0xcb,0xb1,0xb9,0xcb, 0xc2,0xca,0xe1,0x29,0x29,0x29,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02, 0x02,0x03,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x0e,0x0e,0x0f,0x23,0x23,0x24,0x03, 0x03,0x04,0x05,0x05,0x06,0x07,0x06,0x08,0x0a,0x09,0x0b,0x11,0x0e,0x12,0x17,0x13, 0x19,0x1e,0x19,0x1f,0x27,0x21,0x2a,0x33,0x2b,0x36,0x40,0x36,0x45,0x46,0x3b,0x4b, 0x49,0x40,0x53,0x46,0x42,0x58,0x48,0x46,0x5f,0x4a,0x4a,0x64,0x4a,0x4e,0x69,0x4b, 0x51,0x6a,0x49,0x49,0x62,0x4c,0x47,0x5e,0x50,0x47,0x5e,0x4a,0x45,0x5b,0x44,0x42, 0x5b,0x5a,0x61,0x74,0x6f,0x74,0x82,0x68,0x6e,0x7a,0x5b,0x61,0x72,0x66,0x6b,0x86, 0x5f,0x60,0x84,0x6a,0x58,0x71,0x50,0x48,0x5d,0x61,0x58,0x72,0x5a,0x5a,0x79,0x58, 0x50,0x6d,0x5b,0x4d,0x67,0x7d,0x79,0x8c,0x56,0x4d,0x59,0x29,0x22,0x2b,0x23,0x1d, 0x27,0x24,0x1f,0x29,0x7f,0x84,0x97,0x70,0x7a,0x97,0x5c,0x67,0x8a,0x8a,0x92,0xaa, 0x84,0x8b,0xa5,0x80,0x81,0x99,0x67,0x66,0x7b,0x63,0x62,0x79,0x62,0x62,0x7a,0x5e, 0x5c,0x72,0x58,0x53,0x69,0x5a,0x55,0x6a,0x5c,0x56,0x6c,0x58,0x53,0x6c,0x5b,0x52, 0x6e,0x67,0x61,0x7e,0x5b,0x59,0x74,0x46,0x4d,0x64,0x52,0x58,0x6d,0x5f,0x66,0x78, 0x70,0x76,0x86,0x6f,0x76,0x86,0x64,0x6b,0x7f,0x4c,0x52,0x6a,0x43,0x4a,0x5d,0x46, 0x4c,0x5e,0x3d,0x42,0x56,0x3c,0x40,0x55,0x37,0x3a,0x4e,0x32,0x36,0x47,0x30,0x32, 0x43,0x31,0x31,0x43,0x34,0x36,0x4a,0x36,0x37,0x4b,0x35,0x34,0x46,0x35,0x33,0x46, 0x35,0x33,0x46,0x34,0x33,0x46,0x36,0x35,0x48,0x43,0x3b,0x4a,0x45,0x3b,0x4a,0x5d, 0x52,0x69,0x58,0x4c,0x61,0x60,0x51,0x65,0x5f,0x69,0x87,0x5d,0x66,0x88,0x79,0x82, 0x9e,0x7d,0x85,0xa1,0x78,0x7f,0x9b,0x70,0x75,0x91,0x39,0x36,0x47,0x42,0x3e,0x52, 0x49,0x44,0x5a,0x4c,0x45,0x5a,0x4e,0x44,0x59,0x50,0x46,0x5b,0x53,0x48,0x5b,0x53, 0x47,0x5a,0x52,0x46,0x59,0x54,0x4a,0x5e,0x55,0x4b,0x63,0x57,0x4d,0x64,0x59,0x4d, 0x63,0x5a,0x4e,0x61,0x5b,0x4d,0x61,0x5d,0x51,0x66,0x5e,0x51,0x66,0x5e,0x52,0x69, 0x5a,0x52,0x6c,0x53,0x51,0x6c,0x52,0x5a,0x76,0x60,0x68,0x82,0x60,0x68,0x82,0x5c, 0x64,0x7f,0x5a,0x62,0x7e,0x5b,0x63,0x7e,0x62,0x69,0x82,0x5e,0x66,0x80,0x5a,0x61, 0x7b,0x4e,0x52,0x6c,0x4e,0x4a,0x62,0x50,0x44,0x56,0x4e,0x3f,0x4f,0x4e,0x3f,0x4e, 0x4e,0x40,0x50,0x54,0x44,0x56,0x52,0x42,0x54,0x4a,0x3b,0x4a,0x43,0x36,0x42,0x42, 0x33,0x40,0x42,0x33,0x40,0x3a,0x2d,0x36,0x38,0x2b,0x35,0x4e,0x3e,0x4d,0x56,0x44, 0x55,0x56,0x45,0x56,0x4a,0x3c,0x4c,0x43,0x37,0x44,0x3f,0x32,0x3f,0x3f,0x32,0x3f, 0x45,0x36,0x43,0x48,0x39,0x47,0x4d,0x3c,0x4b,0x58,0x47,0x59,0x44,0x36,0x42,0xc4, 0xc3,0xc8,0x78,0x82,0xa0,0x58,0x62,0x87,0x6b,0x76,0x97,0x6a,0x76,0x96,0x69,0x74, 0x95,0x63,0x6e,0x8f,0x5e,0x68,0x8b,0x50,0x5b,0x80,0x56,0x60,0x84,0x52,0x5d,0x7f, 0x13,0x15,0x1a,0x13,0x15,0x1a,0x49,0x48,0x65,0x50,0x52,0x77,0x50,0x50,0x76,0x50, 0x4f,0x75,0x51,0x4f,0x76,0x53,0x4f,0x75,0x57,0x51,0x75,0x58,0x51,0x76,0x5b,0x51, 0x77,0x5a,0x52,0x77,0x59,0x52,0x77,0x58,0x52,0x77,0x53,0x51,0x77,0x51,0x50,0x79, 0x51,0x59,0x82,0x58,0x63,0x88,0x80,0x87,0x9f,0x0a,0x0b,0x0e,0x0a,0x0a,0x0e,0x09, 0x0a,0x0c,0x0a,0x0a,0x0d,0x34,0x2c,0x36,0x59,0x48,0x5b,0x43,0x35,0x40,0x36,0x2b, 0x34,0xb8,0xbe,0xcd,0x7e,0x87,0xa6,0x5e,0x6a,0x8f,0x53,0x5e,0x86,0x4e,0x5a,0x82, 0x4e,0x58,0x7f,0x4a,0x53,0x78,0x44,0x4f,0x73,0x3f,0x47,0x6c,0x3c,0x44,0x65,0x39, 0x42,0x61,0x3a,0x3f,0x60,0x3d,0x40,0x62,0x40,0x48,0x69,0x45,0x4d,0x6f,0x4a,0x51, 0x76,0x37,0x3c,0x55,0x0d,0x0e,0x11,0x0d,0x0e,0x10,0x0c,0x0d,0x0f,0x0a,0x0b,0x0e, 0x53,0x58,0x70,0x52,0x50,0x79,0x5a,0x53,0x77,0x5c,0x53,0x77,0x52,0x56,0x7d,0x5f, 0x65,0x7e,0x0c,0x0d,0x10,0x0d,0x0e,0x11,0x0c,0x0d,0x10,0x0c,0x0d,0x0f,0x0b,0x0c, 0x0e,0x0a,0x0b,0x0e,0x0a,0x0b,0x0e,0x0a,0x0b,0x0e,0x0a,0x0a,0x0d,0x0a,0x0a,0x0d, 0x08,0x09,0x0b,0x08,0x09,0x0a,0x07,0x08,0x0a,0x06,0x07,0x0a,0x06,0x07,0x0a,0x06, 0x06,0x08,0x06,0x06,0x07,0x06,0x06,0x07,0x05,0x05,0x06,0x8d,0x92,0xa0,0xbe,0xc3, 0xd2,0xcb,0xd0,0xdb,0xb9,0xbd,0xcd,0xdb,0xdf,0xe5,0x4e,0x46,0x4c,0x22,0x18,0x1c, 0x1a,0x12,0x16,0x22,0x18,0x1d,0x03,0x03,0x04,0x03,0x03,0x05,0x02,0x02,0x04,0x02, 0x02,0x04,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcd, 0xcf,0xd3,0xba,0xc0,0xd0,0xac,0xb3,0xc8,0xb1,0xb7,0xca,0xb1,0xb7,0xca,0xb2,0xb8, 0xcb,0xb0,0xb7,0xca,0xb4,0xbb,0xce,0xbc,0xc5,0xdc,0x02,0x02,0x02,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0d,0x0d,0x0e, 0x0e,0x0e,0x0e,0x04,0x03,0x05,0x06,0x06,0x07,0x0a,0x09,0x0b,0x0e,0x0b,0x0e,0x12, 0x0f,0x13,0x16,0x13,0x18,0x1c,0x18,0x1e,0x24,0x1e,0x27,0x2f,0x28,0x32,0x38,0x31, 0x3e,0x3f,0x37,0x48,0x46,0x3d,0x4e,0x48,0x42,0x56,0x4b,0x44,0x5a,0x4b,0x46,0x5e, 0x4a,0x47,0x62,0x4a,0x4a,0x65,0x4b,0x4a,0x64,0x4d,0x49,0x62,0x4f,0x49,0x61,0x4b, 0x48,0x60,0x49,0x46,0x60,0x48,0x4d,0x66,0x5e,0x65,0x77,0x69,0x6e,0x7e,0x67,0x6e, 0x7c,0x7b,0x7f,0x92,0x7e,0x87,0xa2,0x5e,0x5b,0x7d,0x62,0x59,0x75,0x50,0x49,0x60, 0x59,0x53,0x6b,0x51,0x4d,0x6e,0x5b,0x4e,0x6a,0x6b,0x6b,0x83,0x6d,0x66,0x71,0x29, 0x21,0x2c,0x25,0x1f,0x29,0x27,0x20,0x2b,0x4d,0x4d,0x5c,0x90,0x96,0xab,0x54,0x60, 0x84,0x7b,0x84,0x9f,0x81,0x84,0x9c,0x68,0x68,0x7b,0x67,0x68,0x7b,0x6f,0x70,0x88, 0x67,0x6d,0x87,0x66,0x6b,0x84,0x68,0x68,0x7f,0x67,0x65,0x7e,0x67,0x64,0x7d,0x59, 0x5b,0x76,0x50,0x4b,0x69,0x5d,0x58,0x72,0x6c,0x66,0x7f,0x3e,0x3f,0x55,0x44,0x4a, 0x5e,0x52,0x59,0x6b,0x5f,0x66,0x78,0x66,0x6c,0x7e,0x62,0x69,0x7d,0x59,0x5f,0x73, 0x4b,0x52,0x66,0x4d,0x54,0x68,0x41,0x46,0x5c,0x41,0x43,0x5b,0x3e,0x41,0x58,0x3a, 0x3f,0x53,0x36,0x3b,0x4e,0x33,0x39,0x4a,0x38,0x3d,0x4e,0x3a,0x3f,0x52,0x36,0x3c, 0x4e,0x34,0x35,0x48,0x33,0x33,0x46,0x35,0x37,0x4a,0x35,0x35,0x48,0x39,0x36,0x47, 0x3e,0x37,0x47,0x61,0x53,0x6b,0x59,0x4c,0x62,0x5e,0x4e,0x63,0x61,0x6c,0x8a,0x5c, 0x67,0x89,0x7b,0x84,0xa1,0x7e,0x85,0xa0,0x7b,0x80,0x9b,0x6e,0x73,0x90,0x32,0x32, 0x42,0x3c,0x3a,0x4d,0x47,0x42,0x58,0x50,0x48,0x5f,0x52,0x48,0x5e,0x52,0x48,0x5d, 0x53,0x4a,0x5e,0x56,0x4c,0x62,0x53,0x4a,0x61,0x4c,0x49,0x62,0x4e,0x4a,0x63,0x52, 0x4c,0x65,0x59,0x4e,0x64,0x59,0x4a,0x5c,0x5a,0x4c,0x5f,0x5a,0x4e,0x62,0x5b,0x4c, 0x5f,0x5a,0x4a,0x5c,0x5b,0x4c,0x5f,0x5c,0x4e,0x62,0x52,0x50,0x6c,0x56,0x5e,0x7a, 0x59,0x61,0x7d,0x5a,0x62,0x7d,0x5a,0x62,0x7e,0x5d,0x65,0x7f,0x5d,0x65,0x80,0x56, 0x5e,0x7b,0x52,0x58,0x76,0x52,0x51,0x6f,0x5c,0x52,0x6b,0x59,0x4b,0x5e,0x51,0x42, 0x52,0x4e,0x3f,0x4f,0x4e,0x3f,0x4f,0x50,0x41,0x52,0x53,0x43,0x55,0x54,0x44,0x56, 0x4e,0x3f,0x4f,0x46,0x37,0x45,0x40,0x32,0x3e,0x3e,0x30,0x3c,0x3d,0x2f,0x3a,0x40, 0x33,0x3f,0x58,0x45,0x56,0x5b,0x49,0x5b,0x52,0x44,0x54,0x4b,0x3d,0x4c,0x44,0x38, 0x45,0x43,0x35,0x42,0x46,0x37,0x44,0x4a,0x3b,0x49,0x4d,0x3c,0x4b,0x54,0x45,0x55, 0x4f,0x40,0x4f,0x7b,0x74,0x7c,0x96,0x9f,0xb4,0x59,0x64,0x88,0x64,0x6f,0x91,0x6c, 0x76,0x96,0x69,0x74,0x95,0x64,0x6f,0x90,0x5c,0x68,0x8b,0x50,0x5a,0x7f,0x56,0x61, 0x85,0x4e,0x57,0x78,0x13,0x15,0x1a,0x14,0x16,0x1a,0x49,0x48,0x64,0x50,0x51,0x77, 0x50,0x4f,0x75,0x50,0x4e,0x75,0x51,0x4f,0x74,0x52,0x4e,0x74,0x57,0x50,0x75,0x59, 0x51,0x76,0x5b,0x52,0x76,0x5a,0x52,0x77,0x59,0x52,0x77,0x59,0x52,0x77,0x53,0x51, 0x77,0x51,0x50,0x79,0x52,0x59,0x80,0x56,0x62,0x87,0x7d,0x84,0xa1,0x0a,0x0b,0x0e, 0x0a,0x0a,0x0e,0x0a,0x0b,0x0e,0x0a,0x0a,0x0d,0x29,0x23,0x2b,0x5c,0x4a,0x5d,0x48, 0x3a,0x46,0x33,0x28,0x32,0xb8,0xbe,0xcd,0x7f,0x88,0xa6,0x5d,0x69,0x8f,0x52,0x5c, 0x84,0x4e,0x5b,0x82,0x4d,0x55,0x7e,0x4a,0x54,0x79,0x44,0x4e,0x73,0x41,0x49,0x6d, 0x3c,0x44,0x66,0x3a,0x41,0x61,0x3a,0x40,0x60,0x3d,0x40,0x63,0x40,0x47,0x69,0x45, 0x4d,0x6f,0x49,0x51,0x75,0x37,0x39,0x52,0x0e,0x0e,0x12,0x0e,0x10,0x12,0x0d,0x0e, 0x10,0x0b,0x0c,0x0e,0x35,0x3c,0x50,0x52,0x58,0x80,0x56,0x51,0x77,0x5a,0x53,0x77, 0x57,0x51,0x77,0x56,0x62,0x87,0x12,0x14,0x19,0x0d,0x0e,0x11,0x0c,0x0d,0x10,0x0c, 0x0d,0x10,0x0c,0x0d,0x10,0x0b,0x0c,0x0f,0x0b,0x0c,0x0e,0x0a,0x0b,0x0e,0x0a,0x0a, 0x0e,0x09,0x0a,0x0c,0x09,0x0a,0x0c,0x08,0x09,0x0b,0x08,0x09,0x0b,0x06,0x07,0x0a, 0x07,0x08,0x0a,0x06,0x07,0x0a,0x06,0x07,0x09,0x06,0x07,0x09,0x40,0x43,0x4c,0xbb, 0xc0,0xcf,0xd2,0xd6,0xdf,0xd0,0xd5,0xdf,0xd9,0xdb,0xe3,0x9a,0x94,0x99,0x30,0x24, 0x2b,0x22,0x18,0x1d,0x22,0x18,0x1d,0x09,0x07,0x0a,0x03,0x03,0x05,0x03,0x03,0x05, 0x02,0x02,0x04,0x02,0x02,0x04,0x02,0x02,0x04,0x02,0x02,0x03,0x02,0x02,0x03,0x02, 0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x44,0x44,0x44,0xcc,0xd2,0xde,0xb0,0xb8,0xcb,0xb0,0xb7,0xca,0xaf, 0xb7,0xc9,0xb1,0xb9,0xcb,0xb1,0xb8,0xcb,0xb1,0xb7,0xcb,0xb7,0xbf,0xd5,0x6b,0x6b, 0x6b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x00,0x00,0x00,0x07,0x07,0x07,0x1d,0x1d,0x1d,0x10,0x10,0x11,0x04,0x04, 0x04,0x16,0x16,0x17,0x17,0x17,0x18,0x06,0x06,0x06,0x0b,0x0a,0x0c,0x12,0x0e,0x12, 0x16,0x12,0x16,0x18,0x14,0x19,0x1a,0x16,0x1c,0x22,0x1c,0x24,0x28,0x22,0x2a,0x31, 0x29,0x34,0x3d,0x35,0x44,0x3c,0x3a,0x4e,0x3e,0x3c,0x52,0x41,0x43,0x5a,0x45,0x42, 0x59,0x4a,0x44,0x5a,0x4e,0x46,0x5d,0x4a,0x48,0x61,0x4b,0x4a,0x64,0x4b,0x49,0x63, 0x4d,0x49,0x62,0x4b,0x4a,0x64,0x4d,0x4b,0x66,0x4a,0x49,0x63,0x51,0x59,0x70,0x6a, 0x71,0x81,0x76,0x7a,0x88,0x83,0x86,0x96,0x96,0x9d,0xb2,0x8b,0x8d,0xa2,0x64,0x6e, 0x8c,0x60,0x59,0x73,0x4e,0x4b,0x61,0x53,0x4e,0x68,0x58,0x4d,0x68,0x60,0x60,0x7c, 0x8f,0x89,0x94,0x2a,0x23,0x2f,0x29,0x21,0x2c,0x2b,0x23,0x31,0x31,0x2d,0x38,0x95, 0x99,0xaf,0x65,0x70,0x91,0x5f,0x6a,0x8c,0x81,0x87,0xa1,0x7c,0x7d,0x95,0x7a,0x7b, 0x94,0x6b,0x72,0x8d,0x6c,0x76,0x8d,0x6b,0x74,0x8a,0x66,0x6f,0x86,0x62,0x6b,0x83, 0x62,0x6a,0x83,0x5f,0x68,0x82,0x4c,0x4f,0x70,0x55,0x55,0x74,0x5f,0x62,0x7f,0x45, 0x4a,0x5d,0x3b,0x41,0x52,0x42,0x48,0x5b,0x4a,0x50,0x62,0x55,0x5b,0x6e,0x5c,0x63, 0x76,0x61,0x67,0x7b,0x5a,0x61,0x75,0x50,0x56,0x6a,0x46,0x4c,0x60,0x3e,0x44,0x59, 0x3b,0x41,0x56,0x3b,0x41,0x55,0x3c,0x42,0x55,0x39,0x3f,0x52,0x34,0x39,0x4b,0x35, 0x3a,0x4b,0x39,0x3e,0x4f,0x37,0x3c,0x4e,0x32,0x36,0x47,0x39,0x3e,0x50,0x3d,0x42, 0x55,0x39,0x38,0x4d,0x33,0x32,0x45,0x5a,0x50,0x68,0x58,0x4b,0x5f,0x5e,0x4e,0x63, 0x70,0x76,0x91,0x58,0x63,0x86,0x74,0x7f,0x9c,0x7f,0x86,0xa1,0x7d,0x82,0x9d,0x71, 0x75,0x92,0x34,0x33,0x45,0x37,0x36,0x4a,0x40,0x3e,0x55,0x4a,0x45,0x5d,0x4e,0x47, 0x5e,0x4f,0x48,0x60,0x4e,0x49,0x61,0x4d,0x48,0x61,0x48,0x46,0x5f,0x47,0x46,0x60, 0x46,0x46,0x5e,0x47,0x46,0x5e,0x56,0x4c,0x62,0x5a,0x4e,0x64,0x5a,0x4e,0x64,0x5a, 0x4e,0x62,0x5a,0x4c,0x5f,0x59,0x49,0x5c,0x58,0x49,0x5a,0x58,0x48,0x5a,0x5b,0x4e, 0x62,0x5c,0x51,0x6a,0x56,0x50,0x6b,0x52,0x51,0x6e,0x51,0x54,0x71,0x52,0x53,0x71, 0x52,0x50,0x6e,0x57,0x52,0x6c,0x5d,0x52,0x6b,0x5e,0x52,0x6a,0x5e,0x52,0x6a,0x57, 0x4c,0x62,0x56,0x47,0x59,0x4c,0x3d,0x4c,0x4a,0x3b,0x4a,0x4b,0x3e,0x4c,0x50,0x42, 0x52,0x57,0x46,0x59,0x58,0x47,0x59,0x4a,0x3b,0x4a,0x41,0x32,0x3e,0x41,0x33,0x3e, 0x44,0x36,0x42,0x45,0x36,0x43,0x55,0x44,0x55,0x64,0x50,0x64,0x5a,0x49,0x5b,0x51, 0x42,0x53,0x49,0x3a,0x4b,0x44,0x37,0x45,0x47,0x39,0x47,0x4c,0x3c,0x4a,0x4e,0x3f, 0x4d,0x52,0x42,0x51,0x58,0x47,0x59,0x49,0x3d,0x49,0xac,0xaf,0xbc,0x68,0x74,0x95, 0x5a,0x64,0x8a,0x68,0x74,0x94,0x67,0x72,0x92,0x61,0x6d,0x8e,0x5c,0x68,0x8a,0x51, 0x5b,0x80,0x58,0x62,0x85,0x4a,0x53,0x71,0x14,0x15,0x1a,0x14,0x16,0x1a,0x3d,0x3d, 0x55,0x4f,0x51,0x76,0x50,0x4e,0x75,0x50,0x4e,0x74,0x51,0x4e,0x75,0x54,0x4e,0x75, 0x57,0x50,0x75,0x55,0x4f,0x75,0x5a,0x51,0x76,0x5a,0x51,0x76,0x5a,0x52,0x77,0x59, 0x52,0x77,0x55,0x50,0x77,0x51,0x4f,0x79,0x51,0x57,0x80,0x54,0x60,0x86,0x72,0x7c, 0x99,0x0a,0x0b,0x0e,0x0a,0x0b,0x0e,0x0a,0x0a,0x0e,0x0a,0x0a,0x0e,0x21,0x1c,0x23, 0x5e,0x4d,0x60,0x46,0x38,0x45,0x31,0x26,0x2f,0xb4,0xba,0xc8,0x80,0x8a,0xa7,0x60, 0x6b,0x90,0x54,0x5e,0x87,0x4f,0x5b,0x82,0x4d,0x57,0x7c,0x4a,0x54,0x7a,0x46,0x4f, 0x71,0x41,0x49,0x6d,0x3c,0x46,0x66,0x39,0x43,0x63,0x3a,0x3f,0x60,0x3d,0x40,0x62, 0x3f,0x46,0x67,0x45,0x4a,0x6e,0x4a,0x51,0x76,0x37,0x36,0x50,0x0e,0x10,0x12,0x0f, 0x11,0x14,0x0e,0x0e,0x12,0x0d,0x0e,0x11,0x0a,0x0b,0x0e,0x5b,0x65,0x84,0x53,0x53, 0x7b,0x5b,0x53,0x77,0x5b,0x53,0x77,0x52,0x54,0x7b,0x55,0x59,0x6f,0x0d,0x0e,0x11, 0x0d,0x0e,0x10,0x0e,0x0e,0x12,0x0c,0x0d,0x10,0x0c,0x0d,0x10,0x0c,0x0d,0x0f,0x0b, 0x0c,0x0f,0x0a,0x0c,0x0e,0x0a,0x0b,0x0e,0x0a,0x0a,0x0d,0x09,0x0a,0x0c,0x08,0x09, 0x0b,0x07,0x08,0x0a,0x07,0x08,0x0a,0x06,0x07,0x0a,0x06,0x07,0x0a,0x0b,0x0b,0x0f, 0x6f,0x7b,0x99,0xb3,0xb8,0xca,0xdd,0xe0,0xe6,0xf2,0xf3,0xf4,0xd8,0xd6,0xd9,0x39, 0x2d,0x36,0x2c,0x20,0x28,0x25,0x1b,0x20,0x23,0x19,0x20,0x03,0x04,0x05,0x03,0x04, 0x05,0x03,0x04,0x05,0x03,0x03,0x05,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04, 0x02,0x02,0x04,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0xd6,0xd8,0xdd,0xb9,0xbf,0xd0, 0xaf,0xb5,0xc9,0xb0,0xb7,0xca,0xb2,0xb9,0xcb,0xb2,0xb9,0xcb,0xb1,0xb8,0xca,0xb2, 0xb9,0xcc,0xe5,0xef,0xff,0x0d,0x0d,0x0d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x04,0x04,0x04,0x13,0x13,0x13,0x1c, 0x1c,0x1d,0x24,0x24,0x24,0x1e,0x1e,0x1e,0x18,0x18,0x19,0x08,0x06,0x08,0x10,0x0d, 0x10,0x19,0x14,0x1a,0x1e,0x18,0x1e,0x20,0x1a,0x21,0x22,0x1c,0x23,0x28,0x22,0x2a, 0x30,0x29,0x33,0x37,0x2e,0x3a,0x3e,0x36,0x45,0x3d,0x3a,0x4e,0x3f,0x45,0x59,0x47, 0x4c,0x5f,0x43,0x46,0x5b,0x44,0x42,0x5a,0x4c,0x44,0x5a,0x4e,0x47,0x5e,0x4c,0x4a, 0x66,0x4c,0x4a,0x64,0x4b,0x49,0x62,0x4a,0x49,0x62,0x4b,0x49,0x63,0x4c,0x4e,0x68, 0x50,0x57,0x70,0x64,0x6b,0x7f,0x7a,0x7f,0x8d,0x8e,0x91,0x9b,0xac,0xb0,0xbf,0xb3, 0xb3,0xc0,0x9e,0x9f,0xb0,0x5e,0x68,0x88,0x54,0x50,0x68,0x4b,0x46,0x60,0x56,0x49, 0x61,0x59,0x5c,0x79,0x9a,0x96,0xa3,0x2c,0x25,0x30,0x2a,0x24,0x30,0x2f,0x26,0x34, 0x30,0x28,0x36,0x72,0x76,0x86,0x82,0x8a,0xa3,0x53,0x5f,0x83,0x80,0x89,0xa2,0x79, 0x83,0x9c,0x76,0x7e,0x98,0x74,0x7e,0x96,0x72,0x7a,0x92,0x71,0x79,0x92,0x70,0x77, 0x8e,0x6e,0x76,0x8d,0x6a,0x72,0x8a,0x6a,0x72,0x8b,0x56,0x60,0x7d,0x4f,0x54,0x73, 0x5d,0x66,0x81,0x5f,0x65,0x77,0x3d,0x41,0x4e,0x3e,0x43,0x52,0x40,0x46,0x56,0x46, 0x4a,0x5a,0x4d,0x52,0x62,0x5a,0x5f,0x71,0x5f,0x66,0x79,0x5c,0x62,0x76,0x59,0x5f, 0x72,0x43,0x4a,0x5f,0x3b,0x3f,0x55,0x3a,0x3e,0x52,0x3e,0x43,0x59,0x3f,0x46,0x5a, 0x3a,0x3f,0x52,0x33,0x37,0x49,0x38,0x3e,0x4e,0x39,0x3e,0x4e,0x33,0x38,0x48,0x35, 0x3a,0x4a,0x40,0x46,0x56,0x3c,0x42,0x54,0x36,0x36,0x4a,0x50,0x48,0x5f,0x58,0x4b, 0x5f,0x5e,0x4f,0x62,0x88,0x89,0x9b,0x58,0x62,0x87,0x79,0x82,0xa0,0x7e,0x86,0xa2, 0x7d,0x83,0x9e,0x6f,0x75,0x92,0x35,0x36,0x47,0x37,0x37,0x4c,0x3e,0x3e,0x55,0x42, 0x42,0x5a,0x44,0x42,0x5a,0x45,0x43,0x5c,0x46,0x44,0x5d,0x46,0x44,0x5d,0x44,0x43, 0x5b,0x42,0x44,0x5c,0x4a,0x50,0x66,0x46,0x4c,0x62,0x46,0x43,0x5d,0x4f,0x49,0x61, 0x6e,0x65,0x79,0x6e,0x66,0x79,0x6b,0x62,0x74,0x64,0x5a,0x6d,0x5a,0x4c,0x60,0x59, 0x4a,0x5e,0x57,0x47,0x5a,0x58,0x4b,0x5e,0x5a,0x4e,0x66,0x4f,0x4e,0x6a,0x50,0x4e, 0x6b,0x53,0x4e,0x6a,0x5b,0x50,0x66,0x5a,0x4e,0x62,0x5b,0x4f,0x64,0x5c,0x51,0x69, 0x53,0x4b,0x62,0x4e,0x46,0x5b,0x58,0x4a,0x5d,0x49,0x3b,0x49,0x42,0x34,0x41,0x3c, 0x31,0x3e,0x42,0x36,0x45,0x4b,0x3c,0x4c,0x4c,0x3d,0x4b,0x41,0x32,0x3f,0x3f,0x31, 0x3d,0x41,0x32,0x3e,0x44,0x35,0x42,0x46,0x37,0x45,0x4c,0x3c,0x4d,0x63,0x50,0x65, 0x62,0x50,0x64,0x54,0x44,0x55,0x4c,0x3d,0x4d,0x49,0x3a,0x49,0x49,0x3c,0x4a,0x4d, 0x3d,0x4c,0x50,0x3f,0x4f,0x52,0x42,0x51,0x58,0x47,0x59,0x4f,0x40,0x4f,0x88,0x81, 0x8a,0x83,0x8e,0xa8,0x5a,0x67,0x8a,0x67,0x71,0x93,0x68,0x74,0x93,0x64,0x6e,0x90, 0x5d,0x67,0x8b,0x51,0x55,0x7c,0x55,0x61,0x84,0x45,0x4e,0x6b,0x12,0x14,0x19,0x13, 0x15,0x1a,0x32,0x31,0x45,0x3f,0x40,0x5f,0x4f,0x4e,0x74,0x50,0x4e,0x74,0x51,0x4e, 0x75,0x53,0x4e,0x74,0x56,0x50,0x75,0x57,0x50,0x75,0x5a,0x50,0x76,0x5a,0x51,0x76, 0x5a,0x52,0x77,0x5b,0x51,0x77,0x53,0x50,0x77,0x51,0x4f,0x78,0x51,0x55,0x7e,0x53, 0x5e,0x85,0x70,0x7b,0x9a,0x0a,0x0b,0x0e,0x0a,0x0b,0x0e,0x0a,0x0a,0x0e,0x0a,0x0a, 0x0d,0x17,0x15,0x1a,0x5e,0x4d,0x60,0x47,0x39,0x46,0x32,0x28,0x31,0xb3,0xb7,0xc5, 0x81,0x8b,0xa9,0x5e,0x6b,0x8f,0x55,0x61,0x88,0x4f,0x5b,0x84,0x4e,0x58,0x7f,0x4b, 0x55,0x7a,0x47,0x52,0x75,0x41,0x4b,0x6d,0x3e,0x47,0x69,0x3a,0x42,0x63,0x3a,0x40, 0x61,0x3b,0x40,0x5f,0x40,0x47,0x68,0x45,0x4a,0x6d,0x4a,0x4b,0x70,0x37,0x38,0x50, 0x0f,0x11,0x14,0x11,0x12,0x16,0x10,0x11,0x15,0x0e,0x10,0x12,0x0d,0x0e,0x11,0x5d, 0x5e,0x6a,0x58,0x63,0x87,0x53,0x50,0x77,0x5c,0x53,0x77,0x54,0x51,0x77,0x5f,0x6a, 0x8c,0x0d,0x0e,0x11,0x0e,0x0e,0x12,0x0e,0x0e,0x12,0x0e,0x0e,0x12,0x0d,0x0e,0x11, 0x0c,0x0d,0x10,0x0c,0x0d,0x0f,0x0a,0x0c,0x0e,0x0a,0x0c,0x0e,0x0a,0x0a,0x0d,0x0a, 0x0a,0x0d,0x09,0x0a,0x0c,0x08,0x09,0x0b,0x08,0x09,0x0b,0x07,0x08,0x0a,0x07,0x08, 0x0a,0x24,0x21,0x2f,0x50,0x4e,0x79,0x8b,0x95,0xaf,0xd0,0xd4,0xdd,0xf1,0xf2,0xf2, 0x4d,0x41,0x4b,0x38,0x2c,0x36,0x2a,0x1e,0x26,0x2d,0x21,0x28,0x0e,0x0b,0x0e,0x04, 0x05,0x06,0x03,0x04,0x05,0x04,0x04,0x06,0x04,0x04,0x06,0x03,0x03,0x05,0x03,0x03, 0x05,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x02,0x02,0x03, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x57,0x57, 0x57,0xc9,0xce,0xda,0xac,0xb3,0xc8,0xad,0xb4,0xc9,0xaf,0xb7,0xc9,0xb1,0xb8,0xcb, 0xb0,0xb7,0xca,0xb1,0xb7,0xcb,0xc7,0xce,0xe6,0x95,0x95,0x95,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x00,0x00,0x00,0x0d,0x0d,0x0e,0x17,0x17,0x17,0x0f,0x0f,0x10,0x0a, 0x08,0x0a,0x14,0x10,0x14,0x1e,0x18,0x1e,0x23,0x1d,0x24,0x24,0x1e,0x25,0x26,0x20, 0x28,0x2a,0x22,0x2b,0x2f,0x27,0x32,0x36,0x2e,0x3a,0x3d,0x33,0x43,0x3e,0x38,0x49, 0x3c,0x3b,0x51,0x41,0x43,0x59,0x42,0x44,0x5a,0x43,0x40,0x57,0x49,0x42,0x58,0x4a, 0x44,0x5a,0x4c,0x48,0x60,0x4f,0x4c,0x66,0x50,0x4a,0x62,0x4e,0x48,0x60,0x4b,0x48, 0x62,0x4d,0x4d,0x68,0x54,0x5b,0x76,0x5e,0x65,0x7c,0x68,0x6e,0x82,0x7d,0x81,0x8d, 0xa8,0xab,0xb9,0xb4,0xb7,0xc5,0xbe,0xbc,0xc7,0x9d,0xa2,0xb2,0x51,0x56,0x73,0x4e, 0x4d,0x66,0x51,0x45,0x5d,0x55,0x55,0x72,0x89,0x88,0x98,0x35,0x2d,0x39,0x2a,0x22, 0x2e,0x2f,0x27,0x35,0x32,0x29,0x38,0x40,0x40,0x4c,0x93,0x98,0xad,0x59,0x63,0x86, 0x73,0x7c,0x9a,0x81,0x89,0xa2,0x79,0x82,0x9b,0x78,0x81,0x99,0x74,0x7c,0x96,0x74, 0x7e,0x96,0x74,0x7c,0x95,0x73,0x7b,0x94,0x70,0x79,0x91,0x71,0x79,0x91,0x66,0x6f, 0x89,0x57,0x5b,0x79,0x5f,0x68,0x84,0x6e,0x76,0x8b,0x3d,0x41,0x4d,0x3d,0x42,0x4e, 0x3e,0x42,0x4f,0x3a,0x3f,0x4e,0x3b,0x40,0x51,0x3e,0x44,0x56,0x4a,0x50,0x63,0x51, 0x57,0x6a,0x52,0x58,0x6d,0x42,0x49,0x60,0x3e,0x3f,0x56,0x3e,0x3e,0x54,0x43,0x46, 0x5e,0x45,0x4a,0x63,0x40,0x46,0x5b,0x3a,0x3f,0x52,0x3b,0x41,0x52,0x40,0x46,0x58, 0x3d,0x42,0x53,0x38,0x3d,0x4e,0x37,0x3d,0x4e,0x42,0x46,0x56,0x3c,0x42,0x52,0x40, 0x40,0x53,0x5c,0x4f,0x63,0x60,0x50,0x64,0x90,0x89,0x9a,0x5a,0x65,0x89,0x76,0x7f, 0x9e,0x7b,0x83,0xa1,0x7d,0x85,0xa0,0x73,0x79,0x96,0x37,0x3a,0x4c,0x3a,0x3d,0x51, 0x40,0x43,0x5a,0x43,0x44,0x5d,0x44,0x43,0x5c,0x42,0x42,0x5a,0x42,0x43,0x5c,0x42, 0x46,0x5e,0x50,0x57,0x6d,0x6e,0x73,0x84,0x83,0x87,0x93,0x7f,0x83,0x8e,0x5a,0x5f, 0x72,0x46,0x47,0x5e,0x40,0x3f,0x54,0x41,0x3f,0x55,0x4c,0x4a,0x5e,0x60,0x5c,0x71, 0x68,0x64,0x79,0x56,0x4c,0x61,0x72,0x69,0x78,0x54,0x48,0x5b,0x55,0x48,0x5c,0x67, 0x5d,0x71,0x69,0x5f,0x73,0x61,0x53,0x65,0x58,0x48,0x5b,0x56,0x47,0x59,0x59,0x4a, 0x5e,0x5a,0x4e,0x65,0x4e,0x46,0x5b,0x4a,0x42,0x55,0x51,0x42,0x53,0x43,0x37,0x43, 0x3b,0x32,0x3f,0x3a,0x30,0x3e,0x35,0x2d,0x38,0x34,0x2c,0x36,0x34,0x2b,0x35,0x3a, 0x2d,0x36,0x3b,0x2e,0x38,0x3f,0x32,0x3d,0x42,0x35,0x41,0x47,0x38,0x46,0x4a,0x3c, 0x4b,0x50,0x41,0x52,0x67,0x55,0x6a,0x5b,0x4a,0x5d,0x50,0x40,0x50,0x4d,0x3e,0x4e, 0x4d,0x3d,0x4d,0x4e,0x3e,0x4e,0x51,0x41,0x51,0x54,0x43,0x53,0x56,0x44,0x56,0x56, 0x45,0x56,0x4f,0x43,0x4f,0x9e,0xa4,0xb6,0x69,0x74,0x94,0x60,0x6a,0x8d,0x67,0x71, 0x92,0x64,0x6f,0x90,0x5d,0x68,0x8a,0x50,0x55,0x7b,0x54,0x60,0x84,0x40,0x49,0x65, 0x12,0x14,0x19,0x12,0x14,0x1a,0x30,0x2f,0x42,0x2d,0x2d,0x44,0x41,0x3f,0x60,0x4f, 0x4d,0x74,0x52,0x4e,0x73,0x52,0x4e,0x74,0x56,0x50,0x75,0x59,0x50,0x75,0x5b,0x50, 0x76,0x5a,0x50,0x76,0x5a,0x51,0x77,0x5b,0x51,0x77,0x54,0x4f,0x76,0x51,0x4f,0x78, 0x50,0x55,0x7d,0x52,0x5d,0x83,0x6e,0x79,0x98,0x0f,0x10,0x13,0x0b,0x0c,0x0f,0x0a, 0x0b,0x0e,0x0a,0x0a,0x0d,0x10,0x0f,0x14,0x5f,0x4d,0x61,0x42,0x34,0x40,0x34,0x2a, 0x33,0xb4,0xb7,0xc5,0x83,0x8c,0xaa,0x60,0x6b,0x90,0x54,0x60,0x88,0x4f,0x5c,0x84, 0x4d,0x58,0x80,0x4c,0x55,0x79,0x47,0x52,0x75,0x41,0x4c,0x6e,0x3d,0x48,0x69,0x3a, 0x42,0x63,0x3b,0x40,0x61,0x3a,0x3f,0x60,0x3f,0x45,0x68,0x45,0x49,0x6e,0x4a,0x4a, 0x6e,0x38,0x37,0x51,0x12,0x12,0x16,0x12,0x14,0x18,0x12,0x13,0x17,0x11,0x12,0x16, 0x0e,0x0f,0x12,0x11,0x11,0x15,0x7f,0x87,0xa2,0x51,0x54,0x7b,0x5c,0x53,0x77,0x5a, 0x53,0x77,0x52,0x5d,0x84,0x44,0x46,0x56,0x0d,0x0e,0x11,0x0e,0x0f,0x12,0x0e,0x0e, 0x12,0x0d,0x0e,0x11,0x0d,0x0e,0x11,0x0c,0x0d,0x10,0x0c,0x0d,0x10,0x0b,0x0c,0x0e, 0x0b,0x0c,0x0e,0x0a,0x0b,0x0e,0x0a,0x0a,0x0d,0x0a,0x0a,0x0d,0x08,0x09,0x0b,0x08, 0x09,0x0b,0x07,0x08,0x0a,0x26,0x22,0x2c,0x61,0x52,0x73,0x50,0x59,0x81,0xd7,0xdb, 0xe3,0x7f,0x7a,0x7e,0x3c,0x30,0x3a,0x35,0x28,0x32,0x2c,0x20,0x29,0x2d,0x22,0x2b, 0x05,0x05,0x06,0x05,0x05,0x06,0x05,0x05,0x06,0x04,0x04,0x06,0x04,0x04,0x06,0x04, 0x04,0x06,0x03,0x03,0x05,0x03,0x03,0x05,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x03, 0x04,0x03,0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03, 0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x05,0x05,0x05,0xdd,0xe0,0xe7,0xb3,0xb9,0xcc,0xac,0xb4,0xc8,0xaf,0xb7, 0xc9,0xaf,0xb5,0xc9,0xb1,0xb8,0xcb,0xb0,0xb7,0xca,0xb8,0xc0,0xd6,0xf5,0xff,0xff, 0x19,0x19,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x03,0x03,0x02, 0x03,0x02,0x02,0x02,0x1a,0x1a,0x1a,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x03, 0x05,0x04,0x05,0x0a,0x09,0x0b,0x13,0x10,0x14,0x1b,0x16,0x1c,0x23,0x1e,0x26,0x24, 0x1f,0x27,0x26,0x22,0x2a,0x2c,0x25,0x2e,0x30,0x29,0x33,0x34,0x2d,0x39,0x38,0x30, 0x3e,0x3a,0x33,0x43,0x3a,0x36,0x4a,0x3e,0x3a,0x50,0x42,0x41,0x59,0x43,0x40,0x56, 0x48,0x40,0x53,0x4b,0x43,0x56,0x4c,0x45,0x5b,0x52,0x4a,0x61,0x56,0x4d,0x64,0x53, 0x4c,0x63,0x50,0x4b,0x63,0x4e,0x4c,0x67,0x4e,0x55,0x71,0x56,0x5d,0x77,0x65,0x6c, 0x82,0x7a,0x7f,0x8d,0x99,0x9d,0xac,0x97,0x9e,0xb1,0xad,0xad,0xbb,0x9d,0xa2,0xb2, 0x64,0x6c,0x86,0x4c,0x4e,0x69,0x4c,0x42,0x5b,0x54,0x54,0x70,0x87,0x85,0x94,0x42, 0x3c,0x48,0x2b,0x24,0x2f,0x2f,0x26,0x34,0x33,0x2a,0x39,0x28,0x22,0x2e,0x93,0x98, 0xaa,0x78,0x81,0x9d,0x62,0x6c,0x8d,0x85,0x8e,0xa6,0x7d,0x86,0xa0,0x7b,0x84,0x9e, 0x7a,0x83,0x9d,0x79,0x82,0x9c,0x7b,0x83,0x9b,0x78,0x80,0x99,0x74,0x7e,0x96,0x72, 0x7b,0x93,0x71,0x79,0x92,0x59,0x61,0x7f,0x5b,0x63,0x81,0x6f,0x78,0x90,0x4e,0x52, 0x5e,0x3b,0x3f,0x4a,0x3a,0x3e,0x4b,0x33,0x36,0x48,0x3c,0x39,0x4d,0x42,0x3e,0x52, 0x3e,0x3d,0x53,0x3d,0x3e,0x55,0x3e,0x41,0x57,0x3e,0x3f,0x56,0x3d,0x3e,0x54,0x3e, 0x40,0x57,0x42,0x44,0x5c,0x46,0x49,0x62,0x42,0x47,0x5e,0x3e,0x44,0x58,0x3e,0x43, 0x56,0x41,0x47,0x5a,0x45,0x4a,0x5e,0x46,0x4c,0x5c,0x46,0x4c,0x5a,0x42,0x47,0x56, 0x42,0x46,0x54,0x39,0x3c,0x47,0x5f,0x53,0x66,0x61,0x50,0x63,0x79,0x70,0x85,0x59, 0x65,0x89,0x79,0x84,0xa2,0x78,0x81,0x9f,0x76,0x7e,0x9c,0x72,0x7a,0x96,0x3d,0x42, 0x55,0x3f,0x46,0x5b,0x45,0x4a,0x63,0x47,0x4b,0x64,0x46,0x48,0x61,0x42,0x42,0x5a, 0x40,0x42,0x5a,0x47,0x4e,0x66,0x6e,0x74,0x86,0x90,0x95,0xa1,0x9e,0xa2,0xaa,0x8e, 0x92,0x9e,0x65,0x6a,0x7f,0x4a,0x50,0x69,0x47,0x4a,0x64,0x40,0x3f,0x56,0x3e,0x3c, 0x52,0x3e,0x3d,0x53,0x59,0x58,0x6c,0x6a,0x67,0x7a,0x53,0x4e,0x63,0x4e,0x45,0x5a, 0x51,0x46,0x5a,0x55,0x49,0x5a,0x61,0x54,0x63,0x68,0x5d,0x6b,0x6b,0x5f,0x6f,0x65, 0x59,0x69,0x58,0x4a,0x5c,0x59,0x4a,0x5e,0x4b,0x42,0x53,0x46,0x3b,0x4c,0x46,0x39, 0x46,0x3f,0x33,0x40,0x41,0x36,0x45,0x44,0x3a,0x49,0x3e,0x34,0x41,0x32,0x2a,0x36, 0x32,0x2a,0x35,0x34,0x2a,0x36,0x3c,0x2e,0x3a,0x3c,0x2e,0x3a,0x3e,0x30,0x3c,0x42, 0x33,0x40,0x49,0x3a,0x48,0x4a,0x3c,0x4b,0x57,0x49,0x5c,0x63,0x51,0x66,0x58,0x47, 0x59,0x52,0x43,0x53,0x52,0x42,0x52,0x51,0x41,0x51,0x52,0x41,0x52,0x54,0x43,0x53, 0x56,0x44,0x56,0x58,0x47,0x59,0x4f,0x40,0x4f,0x92,0x8e,0x99,0x79,0x83,0xa0,0x59, 0x64,0x88,0x62,0x6c,0x8e,0x64,0x6f,0x90,0x5b,0x67,0x89,0x50,0x52,0x78,0x55,0x60, 0x84,0x3d,0x45,0x5e,0x13,0x15,0x1a,0x12,0x14,0x1a,0x30,0x2e,0x41,0x2d,0x2b,0x44, 0x2c,0x29,0x41,0x4b,0x4a,0x6e,0x52,0x4e,0x74,0x53,0x4e,0x74,0x57,0x50,0x74,0x58, 0x50,0x75,0x5a,0x50,0x76,0x5a,0x51,0x77,0x5b,0x51,0x77,0x5a,0x51,0x77,0x54,0x4f, 0x76,0x51,0x4f,0x78,0x50,0x54,0x7d,0x52,0x5d,0x83,0x6c,0x76,0x97,0x1c,0x1c,0x21, 0x0b,0x0c,0x0f,0x0b,0x0c,0x0f,0x0a,0x0b,0x0e,0x0a,0x0a,0x0e,0x5a,0x4a,0x5d,0x44, 0x36,0x42,0x36,0x2a,0x33,0xac,0xaf,0xbe,0x82,0x8c,0xa8,0x60,0x6a,0x8f,0x54,0x5e, 0x87,0x51,0x5c,0x83,0x4f,0x5a,0x80,0x4c,0x55,0x7b,0x46,0x50,0x75,0x41,0x4d,0x70, 0x3e,0x49,0x69,0x3a,0x41,0x63,0x3b,0x40,0x60,0x3a,0x40,0x60,0x3f,0x45,0x67,0x42, 0x48,0x6b,0x49,0x4a,0x6d,0x39,0x38,0x52,0x15,0x16,0x1a,0x15,0x16,0x1a,0x15,0x16, 0x1a,0x12,0x14,0x18,0x11,0x12,0x15,0x0e,0x0e,0x12,0x74,0x73,0x80,0x58,0x64,0x88, 0x56,0x50,0x77,0x5c,0x53,0x77,0x52,0x50,0x78,0x61,0x68,0x88,0x0d,0x0e,0x11,0x0e, 0x0f,0x12,0x0d,0x0e,0x12,0x0e,0x0e,0x12,0x0d,0x0e,0x11,0x0d,0x0e,0x11,0x0c,0x0d, 0x0f,0x0c,0x0d,0x10,0x0b,0x0c,0x0f,0x0b,0x0c,0x0f,0x0a,0x0b,0x0e,0x09,0x0a,0x0d, 0x0a,0x0a,0x0d,0x09,0x0a,0x0d,0x09,0x0a,0x0c,0x2c,0x24,0x33,0x61,0x4e,0x6b,0x5c, 0x51,0x76,0xa9,0xaa,0xb4,0x35,0x29,0x31,0x3d,0x2f,0x3a,0x32,0x26,0x30,0x3d,0x2f, 0x3a,0x18,0x13,0x19,0x05,0x05,0x07,0x05,0x05,0x06,0x05,0x05,0x06,0x05,0x05,0x06, 0x05,0x05,0x06,0x04,0x04,0x06,0x03,0x03,0x05,0x03,0x03,0x05,0x03,0x03,0x05,0x03, 0x03,0x05,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x02,0x02,0x03,0x02,0x02, 0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7c,0x7c,0x7d,0xbe,0xc3,0xd3,0xac, 0xb2,0xc8,0xac,0xb3,0xc8,0xaf,0xb7,0xc9,0xaf,0xb5,0xc9,0xb0,0xb8,0xcb,0xb2,0xb8, 0xcd,0xcd,0xd5,0xee,0xbc,0xbc,0xbc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x03, 0x02,0x03,0x03,0x02,0x03,0x03,0x03,0x04,0x27,0x26,0x27,0x03,0x02,0x03,0x03,0x03, 0x04,0x04,0x03,0x04,0x07,0x06,0x07,0x0e,0x0b,0x0e,0x15,0x11,0x16,0x1b,0x16,0x1c, 0x20,0x1c,0x23,0x25,0x20,0x29,0x2a,0x25,0x2f,0x2d,0x26,0x30,0x31,0x29,0x34,0x36, 0x2e,0x3a,0x3a,0x32,0x42,0x37,0x30,0x3e,0x3b,0x36,0x45,0x3b,0x39,0x4d,0x42,0x3f, 0x54,0x48,0x42,0x57,0x49,0x41,0x53,0x4a,0x41,0x54,0x4e,0x43,0x58,0x50,0x46,0x5d, 0x54,0x4d,0x65,0x57,0x4e,0x68,0x56,0x4e,0x68,0x50,0x4d,0x67,0x4d,0x4e,0x69,0x50, 0x59,0x72,0x67,0x6f,0x85,0x8a,0x8e,0x9a,0xa7,0xa9,0xb6,0x92,0x99,0xaf,0x6f,0x71, 0x8d,0x62,0x6b,0x89,0x5b,0x65,0x82,0x54,0x57,0x74,0x4e,0x46,0x5f,0x49,0x4b,0x68, 0x84,0x80,0x8f,0x58,0x51,0x5c,0x2c,0x24,0x2f,0x2e,0x25,0x33,0x35,0x2b,0x3b,0x2f, 0x28,0x35,0x68,0x6c,0x7a,0x91,0x98,0xae,0x65,0x70,0x90,0x7f,0x8a,0xa3,0x84,0x8d, 0xa5,0x7c,0x86,0xa1,0x7d,0x86,0xa0,0x7d,0x86,0xa0,0x7e,0x86,0x9f,0x7e,0x86,0x9f, 0x7a,0x82,0x9b,0x79,0x81,0x99,0x74,0x7d,0x96,0x60,0x69,0x86,0x59,0x62,0x80,0x67, 0x70,0x8b,0x63,0x68,0x77,0x37,0x3b,0x46,0x39,0x3d,0x48,0x32,0x34,0x46,0x42,0x3b, 0x4e,0x4a,0x42,0x53,0x4a,0x42,0x54,0x4a,0x42,0x56,0x4e,0x44,0x58,0x4e,0x45,0x5a, 0x42,0x3f,0x55,0x3e,0x3e,0x53,0x3e,0x3f,0x56,0x43,0x49,0x60,0x44,0x4a,0x61,0x3f, 0x45,0x5a,0x3a,0x40,0x52,0x3f,0x45,0x58,0x47,0x4e,0x60,0x4a,0x4f,0x5f,0x43,0x48, 0x56,0x39,0x3e,0x4e,0x3c,0x40,0x50,0x33,0x37,0x42,0x5e,0x51,0x64,0x5e,0x4d,0x61, 0x6e,0x61,0x75,0x74,0x7f,0x9d,0x7e,0x88,0xa5,0x79,0x83,0xa1,0x74,0x7f,0x9c,0x6f, 0x79,0x96,0x47,0x4d,0x63,0x46,0x4e,0x65,0x4a,0x52,0x6a,0x49,0x4f,0x69,0x47,0x4c, 0x66,0x45,0x49,0x62,0x46,0x4c,0x63,0x52,0x59,0x6f,0x75,0x7b,0x8e,0x98,0x9b,0xa6, 0x9a,0x9d,0xa6,0x92,0x95,0x9f,0x7b,0x81,0x8f,0x67,0x6e,0x81,0x56,0x5e,0x74,0x47, 0x4e,0x66,0x41,0x42,0x5a,0x3c,0x3c,0x52,0x3d,0x3d,0x4e,0x4d,0x4a,0x5d,0x3e,0x3b, 0x51,0x40,0x3d,0x52,0x46,0x3d,0x4f,0x49,0x3e,0x50,0x4a,0x3f,0x51,0x4a,0x41,0x52, 0x4e,0x44,0x55,0x5a,0x51,0x61,0x6e,0x64,0x72,0x52,0x43,0x54,0x47,0x3c,0x4d,0x41, 0x37,0x46,0x45,0x39,0x47,0x49,0x3c,0x4a,0x4e,0x40,0x51,0x56,0x47,0x59,0x4c,0x3e, 0x4f,0x3b,0x30,0x3c,0x3b,0x2f,0x3b,0x3c,0x30,0x3c,0x42,0x33,0x40,0x40,0x32,0x3e, 0x3e,0x31,0x3d,0x3f,0x32,0x3e,0x46,0x38,0x46,0x4d,0x3e,0x4e,0x4a,0x3c,0x4b,0x60, 0x52,0x68,0x60,0x4e,0x62,0x57,0x46,0x58,0x54,0x44,0x55,0x54,0x45,0x56,0x55,0x44, 0x55,0x54,0x43,0x54,0x55,0x44,0x55,0x58,0x47,0x58,0x53,0x43,0x53,0x5e,0x51,0x5e, 0x9a,0xa1,0xb6,0x60,0x6a,0x8d,0x58,0x62,0x87,0x61,0x6c,0x8e,0x5b,0x66,0x89,0x50, 0x53,0x78,0x54,0x5f,0x83,0x39,0x40,0x57,0x12,0x14,0x19,0x12,0x14,0x19,0x2f,0x2d, 0x41,0x2c,0x2c,0x43,0x2b,0x28,0x41,0x3c,0x3b,0x58,0x51,0x4e,0x73,0x56,0x50,0x74, 0x57,0x50,0x75,0x58,0x50,0x75,0x5a,0x51,0x77,0x5b,0x51,0x77,0x5b,0x51,0x77,0x5a, 0x51,0x76,0x54,0x50,0x76,0x51,0x4f,0x77,0x50,0x53,0x7c,0x52,0x5d,0x83,0x6a,0x75, 0x96,0x21,0x22,0x27,0x0c,0x0d,0x10,0x0b,0x0c,0x0f,0x0b,0x0c,0x0f,0x0a,0x0b,0x0e, 0x5b,0x4a,0x5e,0x46,0x38,0x45,0x36,0x2b,0x34,0xab,0xac,0xbc,0x82,0x8c,0xa9,0x60, 0x6b,0x90,0x55,0x60,0x88,0x51,0x5c,0x83,0x4f,0x5b,0x81,0x4c,0x56,0x7b,0x48,0x50, 0x78,0x42,0x4d,0x70,0x40,0x48,0x6c,0x3d,0x46,0x66,0x3b,0x40,0x63,0x3d,0x41,0x63, 0x3f,0x46,0x67,0x42,0x48,0x6b,0x49,0x49,0x6c,0x3a,0x39,0x52,0x16,0x18,0x1c,0x16, 0x18,0x1c,0x16,0x18,0x1d,0x15,0x16,0x1a,0x12,0x14,0x18,0x0f,0x11,0x14,0x23,0x1d, 0x23,0x85,0x8d,0xa6,0x52,0x51,0x79,0x5c,0x53,0x77,0x56,0x51,0x77,0x52,0x5d,0x83, 0x28,0x2a,0x35,0x0e,0x0f,0x12,0x0e,0x0f,0x12,0x0e,0x0f,0x12,0x0e,0x0f,0x12,0x0d, 0x0e,0x11,0x0d,0x0e,0x11,0x0c,0x0d,0x10,0x0c,0x0d,0x10,0x0b,0x0c,0x0f,0x0a,0x0b, 0x0e,0x0a,0x0b,0x0e,0x0a,0x0a,0x0e,0x0a,0x0a,0x0d,0x09,0x0a,0x0c,0x3f,0x33,0x46, 0x61,0x4d,0x6a,0x50,0x4e,0x79,0x65,0x5d,0x62,0x40,0x32,0x3e,0x3e,0x30,0x3b,0x38, 0x2b,0x34,0x5b,0x4b,0x5e,0x05,0x06,0x07,0x06,0x06,0x08,0x06,0x06,0x07,0x06,0x06, 0x07,0x06,0x06,0x07,0x05,0x05,0x06,0x05,0x05,0x06,0x05,0x05,0x06,0x04,0x04,0x06, 0x04,0x04,0x06,0x04,0x04,0x06,0x04,0x04,0x06,0x03,0x03,0x05,0x03,0x03,0x05,0x03, 0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02, 0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x14,0x14, 0xd3,0xd7,0xe2,0xad,0xb4,0xc9,0xaa,0xb2,0xc6,0xac,0xb4,0xc8,0xad,0xb4,0xc9,0xb0, 0xb7,0xca,0xac,0xb4,0xc8,0xb7,0xbf,0xd5,0xeb,0xf6,0xff,0x2b,0x2b,0x2b,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x03,0x02,0x03,0x03,0x02,0x03,0x03,0x02,0x03,0x06,0x05,0x06,0x29,0x28,0x2a,0x05, 0x04,0x05,0x06,0x05,0x06,0x07,0x06,0x07,0x0c,0x0a,0x0c,0x12,0x0e,0x12,0x1b,0x16, 0x1b,0x20,0x1a,0x21,0x22,0x1c,0x23,0x24,0x1f,0x27,0x2c,0x26,0x31,0x2c,0x25,0x2f, 0x31,0x29,0x34,0x35,0x2c,0x38,0x39,0x31,0x3e,0x39,0x31,0x3e,0x3c,0x35,0x45,0x3c, 0x39,0x4c,0x43,0x3d,0x51,0x49,0x3e,0x51,0x4a,0x40,0x52,0x4b,0x41,0x53,0x4d,0x43, 0x57,0x4e,0x46,0x5c,0x52,0x4a,0x62,0x55,0x4e,0x68,0x55,0x4e,0x67,0x51,0x4b,0x65, 0x4a,0x4a,0x64,0x4d,0x54,0x6f,0x61,0x69,0x7f,0x86,0x8b,0x9a,0xb5,0xb6,0xbf,0xba, 0xbe,0xcc,0x85,0x89,0xa1,0x59,0x60,0x80,0x58,0x61,0x7f,0x58,0x5e,0x7b,0x57,0x4a, 0x65,0x4f,0x48,0x65,0x7d,0x7c,0x8e,0x70,0x6a,0x74,0x29,0x22,0x2c,0x2c,0x24,0x31, 0x34,0x2a,0x3a,0x35,0x2d,0x3c,0x35,0x37,0x40,0x99,0x9f,0xb2,0x73,0x7c,0x9a,0x70, 0x7a,0x98,0x88,0x91,0xaa,0x81,0x8b,0xa5,0x7f,0x89,0xa2,0x7e,0x87,0xa1,0x80,0x88, 0xa2,0x7e,0x87,0xa0,0x7e,0x87,0x9f,0x7c,0x84,0x9d,0x78,0x81,0x99,0x6c,0x75,0x90, 0x5b,0x63,0x82,0x60,0x69,0x84,0x78,0x7d,0x8f,0x32,0x35,0x3f,0x36,0x38,0x42,0x32, 0x35,0x43,0x36,0x34,0x46,0x3f,0x3a,0x4d,0x4b,0x41,0x52,0x51,0x42,0x53,0x52,0x46, 0x57,0x50,0x45,0x58,0x4e,0x43,0x57,0x48,0x40,0x53,0x3f,0x3c,0x50,0x3f,0x3e,0x53, 0x40,0x44,0x5a,0x43,0x49,0x5e,0x43,0x49,0x5b,0x3d,0x42,0x53,0x42,0x49,0x5c,0x4e, 0x54,0x65,0x4d,0x52,0x62,0x43,0x48,0x59,0x3c,0x42,0x53,0x33,0x37,0x45,0x43,0x3c, 0x4c,0x56,0x46,0x57,0x62,0x55,0x65,0x84,0x8e,0xa9,0x9a,0xa3,0xbb,0x84,0x8c,0xaa, 0x76,0x81,0x9e,0x70,0x79,0x97,0x4b,0x53,0x69,0x4a,0x50,0x67,0x4f,0x56,0x6e,0x4f, 0x56,0x6f,0x4b,0x52,0x6e,0x4d,0x55,0x6d,0x49,0x4f,0x66,0x4e,0x55,0x6b,0x6a,0x71, 0x84,0x89,0x8e,0x9a,0x9c,0x9e,0xa6,0x9f,0xa2,0xaa,0x96,0x9a,0xa3,0x8f,0x93,0x9e, 0x77,0x7d,0x8c,0x5d,0x64,0x77,0x55,0x5b,0x6e,0x4e,0x55,0x69,0x42,0x48,0x5c,0x36, 0x37,0x4a,0x33,0x32,0x45,0x34,0x32,0x45,0x37,0x35,0x48,0x3c,0x36,0x47,0x3c,0x37, 0x49,0x3e,0x38,0x4a,0x3e,0x39,0x4b,0x43,0x3b,0x4d,0x46,0x3c,0x4e,0x4a,0x3f,0x4f, 0x48,0x3c,0x4b,0x41,0x36,0x45,0x49,0x3b,0x4a,0x4e,0x41,0x50,0x52,0x43,0x54,0x55, 0x46,0x57,0x47,0x3b,0x4c,0x45,0x3a,0x48,0x4a,0x3c,0x4a,0x4c,0x3e,0x4b,0x51,0x42, 0x52,0x4e,0x3e,0x4e,0x49,0x3a,0x49,0x4b,0x3d,0x4c,0x51,0x42,0x53,0x53,0x45,0x56, 0x50,0x42,0x52,0x4c,0x41,0x51,0x66,0x55,0x6a,0x5c,0x4b,0x5d,0x55,0x46,0x57,0x56, 0x46,0x58,0x56,0x44,0x56,0x54,0x45,0x56,0x55,0x45,0x56,0x57,0x47,0x57,0x56,0x45, 0x56,0x4d,0x3e,0x4d,0x9c,0x9a,0xa5,0x76,0x80,0x9e,0x56,0x61,0x86,0x5e,0x68,0x8b, 0x5b,0x66,0x89,0x50,0x51,0x77,0x55,0x60,0x83,0x34,0x3b,0x50,0x12,0x14,0x1a,0x11, 0x12,0x17,0x2e,0x2c,0x3f,0x2c,0x2b,0x43,0x2b,0x28,0x41,0x31,0x2f,0x4a,0x52,0x4e, 0x74,0x54,0x4e,0x75,0x58,0x50,0x75,0x59,0x50,0x75,0x5a,0x51,0x77,0x5a,0x51,0x77, 0x5c,0x52,0x77,0x5a,0x51,0x76,0x54,0x50,0x76,0x51,0x4f,0x78,0x50,0x53,0x7b,0x51, 0x5c,0x83,0x69,0x74,0x95,0x2a,0x2a,0x30,0x0c,0x0d,0x11,0x0b,0x0c,0x0f,0x0b,0x0c, 0x10,0x0b,0x0c,0x0f,0x5b,0x4b,0x5f,0x48,0x3b,0x49,0x37,0x2b,0x35,0xa7,0xa8,0xb7, 0x84,0x8d,0xaa,0x60,0x6b,0x8f,0x54,0x5e,0x87,0x51,0x5c,0x83,0x50,0x5c,0x82,0x4c, 0x57,0x7e,0x4a,0x54,0x78,0x44,0x4f,0x72,0x3f,0x49,0x6c,0x3d,0x45,0x66,0x3e,0x40, 0x63,0x3d,0x41,0x61,0x3f,0x46,0x67,0x41,0x47,0x6c,0x49,0x4a,0x6b,0x3a,0x39,0x51, 0x16,0x18,0x1d,0x18,0x1a,0x1e,0x18,0x1a,0x1e,0x16,0x17,0x1c,0x14,0x16,0x1a,0x11, 0x12,0x16,0x19,0x17,0x1b,0x86,0x87,0x95,0x55,0x60,0x86,0x58,0x53,0x77,0x5c,0x53, 0x77,0x56,0x62,0x86,0x68,0x6d,0x86,0x0e,0x0e,0x12,0x0e,0x0f,0x12,0x0e,0x10,0x13, 0x0e,0x0f,0x12,0x0e,0x0f,0x12,0x0e,0x0f,0x12,0x0d,0x0e,0x11,0x0c,0x0e,0x11,0x0c, 0x0e,0x11,0x0b,0x0d,0x10,0x0b,0x0c,0x0f,0x0a,0x0b,0x0e,0x0a,0x0a,0x0e,0x0a,0x0a, 0x0d,0x50,0x42,0x5a,0x60,0x4c,0x6a,0x57,0x62,0x88,0x49,0x3f,0x46,0x44,0x36,0x42, 0x46,0x37,0x44,0x44,0x36,0x42,0x3e,0x34,0x41,0x06,0x06,0x09,0x06,0x06,0x08,0x06, 0x06,0x09,0x06,0x06,0x08,0x06,0x06,0x08,0x06,0x06,0x08,0x06,0x06,0x08,0x05,0x05, 0x06,0x05,0x05,0x06,0x05,0x05,0x06,0x04,0x04,0x06,0x04,0x04,0x06,0x04,0x04,0x06, 0x04,0x04,0x06,0x03,0x03,0x05,0x03,0x03,0x04,0x03,0x03,0x04,0x02,0x02,0x03,0x02, 0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xb2,0xb2,0xb5,0xb7,0xbe,0xcf,0xa8,0xaf,0xc4,0xaa,0xb2,0xc6, 0xab,0xb2,0xc7,0xad,0xb4,0xc8,0xab,0xb2,0xc8,0xac,0xb4,0xca,0xc2,0xcd,0xe7,0xcb, 0xcc,0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x03,0x02,0x03,0x03,0x02,0x03,0x03,0x02,0x03,0x03,0x02,0x03,0x1c,0x1b,0x1c, 0x2c,0x2a,0x2c,0x06,0x04,0x05,0x08,0x06,0x07,0x0a,0x08,0x0a,0x11,0x0e,0x11,0x1b, 0x16,0x1b,0x23,0x1d,0x23,0x25,0x1e,0x25,0x26,0x1e,0x26,0x27,0x20,0x29,0x2a,0x22, 0x2c,0x2a,0x23,0x2c,0x2e,0x26,0x30,0x33,0x2a,0x36,0x39,0x30,0x3c,0x3c,0x34,0x42, 0x3f,0x37,0x46,0x42,0x39,0x4a,0x43,0x3a,0x4d,0x45,0x3a,0x4a,0x47,0x3e,0x4e,0x4b, 0x42,0x56,0x4d,0x45,0x5a,0x4e,0x46,0x5e,0x52,0x4c,0x65,0x56,0x4e,0x67,0x55,0x4d, 0x66,0x4e,0x4a,0x62,0x47,0x46,0x60,0x49,0x50,0x6a,0x51,0x58,0x72,0x5e,0x66,0x7c, 0x8f,0x93,0xa2,0xb6,0xba,0xca,0xaf,0xb0,0xbf,0x88,0x89,0x9f,0x6b,0x74,0x8f,0x62, 0x6b,0x87,0x54,0x4c,0x69,0x56,0x46,0x5f,0x6f,0x70,0x85,0x92,0x8d,0x96,0x28,0x20, 0x2b,0x2c,0x24,0x30,0x30,0x27,0x36,0x36,0x2d,0x3e,0x1e,0x1b,0x23,0x91,0x96,0xa9, 0x84,0x8e,0xa7,0x63,0x6d,0x8f,0x88,0x90,0xaa,0x84,0x8e,0xa7,0x81,0x89,0xa5,0x80, 0x89,0xa3,0x82,0x8b,0xa4,0x81,0x89,0xa3,0x7f,0x89,0xa1,0x7d,0x85,0x9e,0x7a,0x84, 0x9b,0x76,0x7f,0x98,0x5d,0x67,0x85,0x5c,0x65,0x82,0x75,0x7b,0x92,0x45,0x49,0x53, 0x30,0x33,0x3e,0x2e,0x32,0x41,0x2e,0x32,0x42,0x33,0x32,0x45,0x46,0x3f,0x52,0x4f, 0x43,0x56,0x52,0x43,0x54,0x51,0x43,0x54,0x50,0x43,0x56,0x4e,0x42,0x55,0x4a,0x41, 0x53,0x49,0x41,0x56,0x41,0x3f,0x55,0x3e,0x3d,0x52,0x3d,0x42,0x56,0x37,0x3a,0x4d, 0x3b,0x3e,0x54,0x42,0x42,0x5a,0x43,0x49,0x61,0x43,0x49,0x5e,0x4a,0x50,0x63,0x42, 0x46,0x57,0x31,0x30,0x3d,0x44,0x38,0x45,0x4e,0x41,0x4f,0x85,0x8d,0xa9,0x9d,0xa4, 0xbc,0xa0,0xa7,0xbe,0x84,0x8d,0xa9,0x71,0x7b,0x98,0x4e,0x55,0x6a,0x4e,0x54,0x69, 0x56,0x5e,0x74,0x56,0x5e,0x76,0x58,0x60,0x79,0x50,0x57,0x6f,0x4a,0x51,0x6a,0x51, 0x59,0x6f,0x6e,0x74,0x86,0x96,0x9a,0xa3,0xac,0xae,0xb3,0xac,0xae,0xb3,0xa6,0xa9, 0xaf,0xa5,0xa8,0xae,0x90,0x94,0x9e,0x78,0x7d,0x8a,0x6c,0x71,0x7e,0x66,0x6c,0x7a, 0x59,0x5e,0x6f,0x4e,0x54,0x66,0x42,0x47,0x59,0x36,0x39,0x4a,0x34,0x36,0x48,0x36, 0x36,0x46,0x32,0x34,0x43,0x36,0x37,0x46,0x39,0x36,0x48,0x3e,0x39,0x4b,0x3e,0x3a, 0x4c,0x45,0x3c,0x4d,0x47,0x3d,0x4d,0x46,0x3c,0x4b,0x47,0x3c,0x4b,0x48,0x3c,0x4c, 0x4a,0x3d,0x4d,0x42,0x38,0x47,0x41,0x38,0x47,0x42,0x38,0x47,0x47,0x3b,0x4a,0x49, 0x3d,0x4e,0x4b,0x3f,0x50,0x49,0x3e,0x4e,0x45,0x3a,0x4a,0x4e,0x42,0x52,0x53,0x48, 0x5a,0x52,0x47,0x5b,0x4f,0x45,0x58,0x48,0x3e,0x4e,0x4f,0x46,0x59,0x62,0x52,0x66, 0x57,0x47,0x59,0x56,0x45,0x56,0x58,0x46,0x58,0x57,0x45,0x57,0x54,0x45,0x56,0x56, 0x45,0x56,0x58,0x47,0x58,0x50,0x40,0x4f,0x6c,0x61,0x6d,0x91,0x9a,0xb1,0x5a,0x65, 0x8a,0x55,0x60,0x85,0x5b,0x66,0x89,0x50,0x50,0x77,0x53,0x5e,0x82,0x31,0x36,0x4a, 0x13,0x15,0x1a,0x12,0x13,0x19,0x2e,0x2d,0x3f,0x2c,0x2b,0x43,0x2c,0x29,0x41,0x2c, 0x2a,0x43,0x52,0x4e,0x74,0x55,0x4e,0x74,0x57,0x50,0x75,0x5b,0x51,0x76,0x5a,0x51, 0x77,0x5a,0x51,0x77,0x5b,0x51,0x77,0x5b,0x51,0x76,0x55,0x4f,0x76,0x51,0x4f,0x77, 0x50,0x52,0x7a,0x51,0x5c,0x82,0x68,0x74,0x95,0x34,0x33,0x39,0x0c,0x0d,0x11,0x0c, 0x0d,0x11,0x0c,0x0d,0x10,0x0b,0x0d,0x10,0x52,0x44,0x55,0x4c,0x3e,0x4d,0x37,0x2a, 0x36,0xa3,0xa4,0xb2,0x83,0x8d,0xaa,0x61,0x6d,0x90,0x53,0x5e,0x87,0x4f,0x5b,0x84, 0x50,0x5b,0x83,0x4d,0x57,0x7e,0x4a,0x55,0x79,0x46,0x4e,0x73,0x41,0x4b,0x6d,0x3f, 0x45,0x67,0x3d,0x42,0x64,0x3e,0x42,0x62,0x3f,0x46,0x66,0x42,0x45,0x68,0x47,0x47, 0x6b,0x3c,0x3b,0x55,0x16,0x17,0x1c,0x17,0x19,0x1e,0x18,0x1a,0x1e,0x16,0x18,0x1d, 0x16,0x17,0x1c,0x12,0x14,0x18,0x11,0x12,0x16,0x2b,0x24,0x2b,0x7a,0x82,0x9e,0x52, 0x50,0x77,0x55,0x50,0x77,0x58,0x52,0x77,0x54,0x61,0x85,0x10,0x12,0x14,0x0e,0x0f, 0x12,0x0f,0x10,0x14,0x0f,0x10,0x14,0x0e,0x10,0x14,0x0e,0x0f,0x13,0x0e,0x0e,0x12, 0x0d,0x0e,0x12,0x0d,0x0e,0x11,0x0c,0x0e,0x11,0x0c,0x0d,0x10,0x0b,0x0c,0x0f,0x0a, 0x0b,0x0e,0x0a,0x0b,0x0e,0x56,0x44,0x5d,0x60,0x4e,0x6c,0x6a,0x76,0x99,0x3d,0x32, 0x3a,0x4d,0x3e,0x4c,0x50,0x40,0x4f,0x54,0x43,0x54,0x06,0x06,0x08,0x07,0x07,0x0a, 0x06,0x06,0x09,0x06,0x06,0x09,0x07,0x07,0x0a,0x06,0x06,0x09,0x06,0x06,0x08,0x06, 0x06,0x08,0x06,0x06,0x07,0x06,0x05,0x07,0x06,0x06,0x07,0x07,0x07,0x08,0x05,0x05, 0x06,0x05,0x05,0x06,0x05,0x05,0x06,0x05,0x05,0x06,0x04,0x04,0x06,0x03,0x03,0x05, 0x03,0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x30,0xc8,0xce,0xda,0xa4,0xac, 0xc2,0xa5,0xad,0xc3,0xa9,0xaf,0xc6,0xa9,0xb0,0xc6,0xa8,0xb0,0xc4,0xa5,0xad,0xc3, 0xac,0xb5,0xce,0xd1,0xdc,0xfb,0x3e,0x3e,0x3e,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02, 0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x03,0x04,0x03,0x04,0x04,0x03,0x04,0x05,0x03, 0x04,0x04,0x03,0x04,0x06,0x04,0x05,0x08,0x06,0x07,0x0a,0x07,0x09,0x0d,0x0a,0x0c, 0x14,0x10,0x13,0x1e,0x17,0x1e,0x26,0x1f,0x26,0x2a,0x22,0x2a,0x2a,0x22,0x2a,0x2a, 0x22,0x2a,0x29,0x22,0x2a,0x28,0x21,0x29,0x2b,0x24,0x2e,0x30,0x29,0x33,0x39,0x31, 0x3e,0x42,0x3a,0x4a,0x46,0x3d,0x4f,0x46,0x3d,0x4f,0x45,0x3c,0x4d,0x43,0x3a,0x4a, 0x46,0x3b,0x4c,0x49,0x40,0x52,0x4b,0x44,0x5a,0x4d,0x47,0x60,0x51,0x4d,0x67,0x55, 0x4e,0x68,0x55,0x4d,0x66,0x50,0x48,0x60,0x47,0x44,0x5b,0x46,0x48,0x61,0x49,0x4f, 0x69,0x4a,0x52,0x6b,0x52,0x58,0x71,0x82,0x8b,0xa5,0xa0,0xa4,0xb8,0xa0,0x9e,0xaf, 0x67,0x71,0x8e,0x63,0x6d,0x89,0x4c,0x4b,0x6d,0x57,0x44,0x5b,0x61,0x62,0x7c,0xb0, 0xab,0xb3,0x2b,0x23,0x2d,0x2b,0x23,0x2f,0x2f,0x27,0x34,0x37,0x2d,0x3e,0x2b,0x25, 0x2f,0x64,0x67,0x74,0x96,0x9d,0xb2,0x68,0x72,0x94,0x7b,0x86,0xa1,0x88,0x90,0xaa, 0x82,0x8b,0xa7,0x82,0x8b,0xa6,0x82,0x8b,0xa5,0x82,0x8b,0xa4,0x83,0x8c,0xa4,0x81, 0x89,0xa1,0x7e,0x87,0x9f,0x7c,0x84,0x9c,0x65,0x6e,0x8b,0x5d,0x65,0x84,0x70,0x79, 0x91,0x63,0x67,0x75,0x2a,0x2d,0x3a,0x2b,0x2f,0x3e,0x2d,0x31,0x41,0x36,0x35,0x48, 0x3c,0x3a,0x4e,0x46,0x41,0x56,0x52,0x47,0x5b,0x55,0x48,0x5a,0x54,0x46,0x57,0x50, 0x42,0x55,0x4e,0x42,0x55,0x4e,0x43,0x56,0x4e,0x44,0x58,0x48,0x42,0x56,0x40,0x3c, 0x50,0x3a,0x38,0x4c,0x3a,0x38,0x4d,0x44,0x3f,0x53,0x4b,0x45,0x5a,0x43,0x42,0x59, 0x41,0x45,0x5b,0x3f,0x45,0x57,0x29,0x2b,0x38,0x3c,0x30,0x3c,0x44,0x35,0x43,0x87, 0x8f,0xa9,0x99,0xa0,0xba,0xa2,0xaa,0xbf,0x9d,0xa5,0xb9,0x78,0x81,0x9e,0x58,0x5e, 0x72,0x52,0x59,0x6c,0x5e,0x66,0x7d,0x62,0x6a,0x82,0x5b,0x63,0x7d,0x56,0x5e,0x76, 0x58,0x60,0x76,0x63,0x6a,0x7e,0x86,0x8a,0x98,0x9e,0xa1,0xaa,0xab,0xad,0xb3,0xb2, 0xb4,0xb9,0xb4,0xb6,0xba,0xab,0xae,0xb4,0x98,0x9c,0xa5,0x8c,0x90,0x9a,0x82,0x86, 0x92,0x77,0x7b,0x86,0x6a,0x6f,0x7c,0x5b,0x61,0x71,0x50,0x56,0x66,0x4a,0x50,0x61, 0x46,0x4a,0x5c,0x39,0x3e,0x4e,0x37,0x3a,0x4a,0x33,0x33,0x45,0x36,0x34,0x47,0x36, 0x34,0x47,0x39,0x35,0x46,0x3e,0x37,0x4a,0x3f,0x37,0x48,0x3e,0x37,0x46,0x3c,0x35, 0x45,0x3a,0x34,0x44,0x3a,0x32,0x42,0x37,0x32,0x41,0x3a,0x33,0x43,0x3f,0x36,0x46, 0x43,0x39,0x49,0x44,0x3a,0x4a,0x47,0x3d,0x4d,0x4c,0x3f,0x51,0x4d,0x3f,0x4f,0x4f, 0x41,0x52,0x4d,0x41,0x52,0x45,0x3c,0x4e,0x43,0x3b,0x4d,0x3e,0x36,0x46,0x37,0x30, 0x3f,0x59,0x4e,0x63,0x5b,0x4c,0x60,0x57,0x47,0x59,0x58,0x47,0x58,0x57,0x47,0x58, 0x56,0x46,0x57,0x56,0x46,0x57,0x58,0x47,0x58,0x54,0x44,0x54,0x4c,0x3c,0x4a,0xa8, 0xa7,0xb3,0x6c,0x77,0x98,0x54,0x5f,0x85,0x58,0x62,0x86,0x50,0x50,0x76,0x53,0x5c, 0x82,0x2e,0x32,0x45,0x14,0x16,0x1c,0x12,0x13,0x19,0x2c,0x2a,0x3c,0x2c,0x2b,0x43, 0x2c,0x29,0x41,0x2c,0x29,0x40,0x51,0x4c,0x72,0x57,0x50,0x75,0x5a,0x50,0x76,0x5a, 0x50,0x76,0x5a,0x51,0x77,0x5a,0x51,0x77,0x5c,0x52,0x77,0x5a,0x52,0x77,0x55,0x4f, 0x76,0x51,0x4f,0x77,0x51,0x53,0x7b,0x51,0x5c,0x83,0x67,0x72,0x92,0x38,0x37,0x3f, 0x0c,0x0e,0x11,0x0c,0x0d,0x11,0x0b,0x0d,0x10,0x0b,0x0c,0x10,0x40,0x36,0x44,0x4c, 0x3e,0x4c,0x36,0x2a,0x34,0xa0,0xa2,0xaf,0x83,0x8d,0xa9,0x61,0x6c,0x90,0x55,0x61, 0x88,0x53,0x5d,0x86,0x50,0x5b,0x82,0x4e,0x59,0x7f,0x4a,0x54,0x7a,0x47,0x4f,0x74, 0x44,0x4c,0x6d,0x40,0x47,0x69,0x3d,0x41,0x64,0x3e,0x41,0x63,0x3e,0x42,0x64,0x42, 0x45,0x67,0x46,0x46,0x6b,0x3a,0x39,0x54,0x16,0x16,0x1b,0x17,0x19,0x1e,0x18,0x1a, 0x1e,0x18,0x1a,0x1e,0x18,0x1a,0x1f,0x16,0x17,0x1c,0x13,0x15,0x19,0x23,0x1e,0x25, 0x7e,0x7f,0x8d,0x51,0x53,0x79,0x55,0x50,0x77,0x56,0x50,0x76,0x65,0x6f,0x92,0x51, 0x54,0x62,0x0d,0x0e,0x11,0x10,0x11,0x14,0x10,0x12,0x16,0x10,0x11,0x15,0x0f,0x10, 0x14,0x0e,0x10,0x14,0x0e,0x0f,0x13,0x0e,0x0f,0x12,0x0d,0x0e,0x12,0x0c,0x0e,0x11, 0x0b,0x0c,0x10,0x0b,0x0c,0x10,0x0a,0x0b,0x0e,0x59,0x46,0x60,0x60,0x4e,0x6c,0x87, 0x91,0xaa,0x37,0x2a,0x34,0x55,0x44,0x55,0x53,0x43,0x53,0x5b,0x4a,0x5c,0x06,0x06, 0x09,0x07,0x07,0x0a,0x07,0x08,0x0a,0x07,0x07,0x0a,0x07,0x07,0x0a,0x07,0x07,0x0a, 0x06,0x06,0x09,0x06,0x06,0x09,0x06,0x06,0x08,0x06,0x06,0x07,0x06,0x06,0x08,0x06, 0x06,0x07,0x05,0x05,0x06,0x05,0x05,0x06,0x05,0x05,0x06,0x05,0x05,0x06,0x05,0x05, 0x06,0x04,0x04,0x06,0x04,0x03,0x05,0x03,0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x03, 0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xce, 0xd0,0xd8,0xa9,0xb1,0xc7,0xa0,0xa8,0xc0,0xa2,0xaa,0xc1,0xa4,0xac,0xc2,0xa3,0xaa, 0xc1,0xa0,0xa8,0xbf,0x9f,0xaa,0xc2,0xb0,0xba,0xd8,0xc9,0xd5,0xe8,0x02,0x02,0x02, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x03,0x02,0x02,0x03,0x02,0x03,0x04,0x03,0x04,0x05,0x03,0x04,0x05,0x04,0x05,0x06, 0x04,0x05,0x06,0x04,0x05,0x06,0x05,0x06,0x08,0x06,0x07,0x0a,0x07,0x09,0x0d,0x0a, 0x0c,0x12,0x0d,0x10,0x19,0x13,0x17,0x22,0x1a,0x20,0x29,0x20,0x28,0x2f,0x25,0x2e, 0x30,0x26,0x30,0x2e,0x24,0x2e,0x2b,0x23,0x2c,0x28,0x22,0x2a,0x29,0x22,0x2b,0x2e, 0x28,0x32,0x36,0x2e,0x3b,0x3e,0x37,0x46,0x46,0x3e,0x51,0x49,0x41,0x54,0x49,0x41, 0x55,0x47,0x3f,0x53,0x46,0x3c,0x4e,0x47,0x3d,0x4f,0x48,0x43,0x5a,0x4a,0x4a,0x64, 0x4f,0x4e,0x6a,0x51,0x4e,0x69,0x52,0x4c,0x66,0x4e,0x47,0x5d,0x4a,0x43,0x5a,0x43, 0x42,0x5a,0x46,0x4a,0x63,0x4b,0x52,0x6b,0x49,0x4d,0x66,0x5d,0x5f,0x81,0x66,0x70, 0x8f,0x7a,0x7a,0x93,0x5d,0x67,0x86,0x5c,0x60,0x80,0x51,0x56,0x76,0x57,0x46,0x5c, 0x58,0x58,0x73,0xae,0xaa,0xb2,0x35,0x2d,0x38,0x2c,0x23,0x2f,0x30,0x26,0x34,0x37, 0x2d,0x3e,0x36,0x2e,0x3d,0x2e,0x2f,0x37,0x9d,0xa3,0xb6,0x82,0x8b,0xa5,0x66,0x71, 0x92,0x8b,0x95,0xac,0x84,0x8e,0xa8,0x83,0x8b,0xa6,0x83,0x8b,0xa6,0x86,0x8f,0xa7, 0x82,0x8c,0xa4,0x87,0x8f,0xa6,0x81,0x89,0xa1,0x7e,0x87,0x9e,0x70,0x7a,0x94,0x5d, 0x67,0x85,0x66,0x70,0x8b,0x7f,0x86,0x97,0x27,0x2b,0x38,0x2a,0x2e,0x3b,0x32,0x32, 0x44,0x39,0x37,0x4b,0x3c,0x3b,0x51,0x43,0x40,0x56,0x49,0x44,0x5a,0x53,0x49,0x5f, 0x57,0x4d,0x61,0x57,0x4a,0x5e,0x52,0x47,0x5a,0x52,0x46,0x5a,0x52,0x45,0x57,0x51, 0x46,0x5a,0x4c,0x42,0x56,0x3e,0x3c,0x50,0x3b,0x3b,0x4f,0x3a,0x3a,0x4e,0x3d,0x3a, 0x50,0x3e,0x3e,0x54,0x3c,0x3a,0x4f,0x36,0x34,0x46,0x2a,0x28,0x35,0x3c,0x31,0x3e, 0x40,0x32,0x3e,0x7e,0x81,0x99,0x95,0x9e,0xb6,0xa2,0xaa,0xbf,0x9f,0xa6,0xbb,0x95, 0x9b,0xb1,0x68,0x6c,0x84,0x50,0x56,0x69,0x62,0x69,0x7f,0x6a,0x72,0x89,0x66,0x6e, 0x83,0x5e,0x66,0x7b,0x5a,0x61,0x75,0x65,0x6b,0x7e,0x8c,0x90,0x9d,0xa4,0xa7,0xae, 0xb2,0xb5,0xb9,0xb9,0xba,0xbe,0xb8,0xb9,0xbd,0xb0,0xb2,0xb7,0x9e,0xa1,0xaa,0x8b, 0x90,0x9c,0x7f,0x84,0x92,0x7d,0x82,0x8f,0x70,0x74,0x83,0x61,0x66,0x76,0x52,0x57, 0x68,0x49,0x4e,0x5f,0x4a,0x4f,0x5f,0x4d,0x52,0x65,0x4a,0x4f,0x62,0x39,0x38,0x4e, 0x45,0x48,0x57,0x40,0x42,0x52,0x3e,0x40,0x51,0x36,0x35,0x48,0x39,0x36,0x46,0x3d, 0x37,0x48,0x3c,0x36,0x47,0x3e,0x36,0x48,0x39,0x33,0x42,0x38,0x32,0x42,0x3e,0x36, 0x46,0x45,0x3a,0x4a,0x47,0x3b,0x4b,0x4f,0x41,0x52,0x56,0x47,0x5a,0x54,0x46,0x5a, 0x51,0x45,0x56,0x4c,0x40,0x51,0x48,0x3d,0x4e,0x3d,0x36,0x46,0x32,0x2f,0x3e,0x2a, 0x29,0x37,0x29,0x26,0x34,0x34,0x30,0x3f,0x60,0x52,0x67,0x59,0x4a,0x5d,0x58,0x47, 0x59,0x57,0x46,0x58,0x56,0x46,0x57,0x55,0x45,0x56,0x57,0x46,0x57,0x57,0x47,0x57, 0x4f,0x3f,0x4e,0x81,0x78,0x81,0x81,0x8a,0xa6,0x59,0x63,0x88,0x52,0x5c,0x81,0x52, 0x51,0x76,0x53,0x5d,0x81,0x2a,0x2e,0x3f,0x14,0x16,0x1c,0x12,0x14,0x1a,0x29,0x29, 0x3a,0x2c,0x2b,0x42,0x2b,0x28,0x41,0x2b,0x29,0x3f,0x53,0x4d,0x71,0x57,0x50,0x75, 0x59,0x50,0x76,0x5b,0x51,0x76,0x5b,0x51,0x76,0x5b,0x51,0x77,0x5b,0x51,0x77,0x5b, 0x52,0x77,0x55,0x4f,0x76,0x50,0x4f,0x77,0x50,0x52,0x7a,0x51,0x5c,0x83,0x67,0x73, 0x93,0x44,0x43,0x4b,0x0c,0x0e,0x12,0x0d,0x0e,0x12,0x0b,0x0d,0x10,0x0b,0x0c,0x0f, 0x38,0x2f,0x3b,0x4b,0x3d,0x4c,0x34,0x2a,0x33,0x9b,0x9b,0xa9,0x84,0x8e,0xaa,0x63, 0x6e,0x90,0x55,0x61,0x88,0x51,0x5c,0x83,0x51,0x5b,0x81,0x4e,0x59,0x7f,0x4c,0x55, 0x79,0x47,0x4f,0x75,0x42,0x4c,0x6e,0x40,0x47,0x69,0x3d,0x41,0x63,0x3d,0x41,0x60, 0x3f,0x44,0x66,0x41,0x43,0x65,0x47,0x46,0x6a,0x39,0x37,0x54,0x12,0x14,0x18,0x16, 0x18,0x1d,0x1a,0x1b,0x21,0x19,0x1a,0x20,0x19,0x1a,0x1f,0x19,0x1b,0x20,0x16,0x18, 0x1e,0x17,0x18,0x1c,0x30,0x28,0x31,0x7b,0x83,0x9e,0x51,0x59,0x80,0x61,0x6d,0x8f, 0x84,0x8c,0xa9,0x80,0x88,0xa0,0x0d,0x0e,0x11,0x0e,0x0f,0x13,0x10,0x12,0x16,0x11, 0x12,0x16,0x11,0x12,0x16,0x0f,0x11,0x15,0x0f,0x10,0x14,0x0e,0x0f,0x13,0x0e,0x0f, 0x12,0x0d,0x0e,0x12,0x0d,0x0e,0x12,0x0c,0x0e,0x11,0x0b,0x0c,0x10,0x5b,0x48,0x62, 0x60,0x51,0x71,0xa9,0xaf,0xc0,0x3d,0x2f,0x3a,0x53,0x42,0x53,0x51,0x40,0x52,0x5a, 0x4a,0x5c,0x06,0x07,0x0a,0x07,0x07,0x0a,0x08,0x09,0x0b,0x08,0x09,0x0b,0x08,0x09, 0x0b,0x08,0x09,0x0b,0x08,0x08,0x0b,0x07,0x08,0x0a,0x07,0x08,0x0a,0x06,0x06,0x09, 0x06,0x06,0x09,0x06,0x06,0x08,0x06,0x06,0x07,0x06,0x06,0x07,0x06,0x05,0x07,0x05, 0x05,0x06,0x05,0x05,0x06,0x05,0x05,0x06,0x04,0x04,0x06,0x04,0x04,0x06,0x04,0x03, 0x05,0x03,0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03, 0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x56,0x56,0x56,0xb8,0xbf,0xd0,0x99,0xa2,0xbb,0x9b,0xa4,0xbc,0x9d, 0xa5,0xbe,0x9c,0xa4,0xbe,0x99,0xa1,0xbb,0x98,0xa2,0xbb,0x9c,0xa5,0xc2,0xbb,0xc6, 0xea,0x50,0x56,0x58,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02, 0x02,0x03,0x02,0x02,0x03,0x02,0x03,0x04,0x03,0x04,0x06,0x04,0x05,0x06,0x05,0x06, 0x08,0x06,0x07,0x09,0x06,0x08,0x0a,0x07,0x09,0x0a,0x08,0x0a,0x0b,0x09,0x0a,0x0f, 0x0b,0x0e,0x12,0x0e,0x11,0x19,0x12,0x16,0x20,0x19,0x1e,0x2a,0x21,0x2a,0x31,0x26, 0x30,0x35,0x2a,0x34,0x36,0x2a,0x36,0x31,0x27,0x31,0x2d,0x24,0x2e,0x29,0x22,0x2b, 0x28,0x22,0x2b,0x2b,0x26,0x30,0x32,0x2a,0x36,0x38,0x30,0x3d,0x43,0x3a,0x49,0x4b, 0x42,0x53,0x4c,0x43,0x59,0x49,0x43,0x59,0x46,0x41,0x56,0x45,0x3f,0x54,0x45,0x42, 0x58,0x4a,0x49,0x63,0x4e,0x4c,0x68,0x4e,0x4d,0x68,0x4c,0x4b,0x66,0x4a,0x46,0x5e, 0x4c,0x45,0x5b,0x4a,0x42,0x58,0x43,0x43,0x5b,0x4e,0x56,0x6e,0x5c,0x64,0x7a,0x5d, 0x65,0x84,0x5a,0x5f,0x83,0x60,0x5f,0x80,0x58,0x5b,0x7e,0x5e,0x61,0x81,0x5f,0x5d, 0x7b,0x59,0x46,0x5d,0x55,0x56,0x71,0xa5,0xa1,0xac,0x4d,0x44,0x50,0x2b,0x23,0x2e, 0x2f,0x27,0x34,0x38,0x2d,0x3d,0x39,0x30,0x41,0x14,0x13,0x18,0x8e,0x92,0xa4,0x90, 0x98,0xaf,0x5d,0x69,0x8b,0x87,0x90,0xa9,0x86,0x90,0xa9,0x84,0x8d,0xa8,0x83,0x8d, 0xa8,0x85,0x8f,0xa8,0x87,0x90,0xa9,0x84,0x8c,0xa6,0x85,0x8d,0xa5,0x82,0x8b,0xa2, 0x7a,0x82,0x9b,0x61,0x6b,0x89,0x61,0x6b,0x88,0x8a,0x90,0xa4,0x46,0x4a,0x54,0x29, 0x2a,0x3a,0x32,0x32,0x43,0x3a,0x3a,0x4e,0x3e,0x3d,0x52,0x41,0x40,0x56,0x43,0x42, 0x5a,0x4b,0x46,0x5e,0x52,0x4a,0x62,0x56,0x4c,0x63,0x57,0x4c,0x62,0x55,0x49,0x5d, 0x54,0x49,0x5c,0x53,0x48,0x5b,0x52,0x47,0x5c,0x4e,0x44,0x59,0x42,0x3e,0x52,0x3d, 0x3c,0x51,0x3d,0x40,0x53,0x3e,0x41,0x56,0x3a,0x3a,0x4e,0x36,0x34,0x46,0x30,0x2e, 0x3d,0x3f,0x34,0x42,0x3c,0x2f,0x3b,0x67,0x63,0x76,0x8c,0x96,0xad,0xa0,0xa8,0xbd, 0x9f,0xa6,0xbb,0x95,0x9d,0xb2,0x7b,0x7d,0x94,0x4f,0x55,0x67,0x60,0x67,0x7d,0x6a, 0x71,0x88,0x68,0x70,0x86,0x62,0x69,0x7d,0x61,0x67,0x7b,0x6b,0x71,0x82,0x93,0x97, 0xa2,0xaa,0xac,0xb2,0xb5,0xb6,0xba,0xb6,0xb7,0xbb,0xb6,0xb8,0xbc,0xaf,0xb1,0xb7, 0x9e,0xa1,0xaa,0x8d,0x91,0x9e,0x86,0x8b,0x99,0x81,0x86,0x95,0x7a,0x7f,0x8d,0x6f, 0x75,0x85,0x5b,0x62,0x74,0x50,0x56,0x68,0x47,0x4e,0x61,0x44,0x4a,0x5e,0x43,0x4a, 0x5e,0x43,0x49,0x5f,0x4f,0x55,0x66,0x4d,0x52,0x63,0x3e,0x43,0x58,0x3d,0x42,0x56, 0x3c,0x3a,0x4f,0x3a,0x37,0x4c,0x3f,0x3a,0x4c,0x43,0x3a,0x4d,0x3f,0x38,0x48,0x44, 0x3a,0x4c,0x4c,0x42,0x55,0x4e,0x42,0x55,0x52,0x45,0x56,0x55,0x48,0x5a,0x56,0x4a, 0x5e,0x51,0x47,0x5a,0x4e,0x44,0x57,0x48,0x3f,0x51,0x3e,0x36,0x47,0x2e,0x2e,0x3e, 0x27,0x27,0x35,0x24,0x26,0x33,0x23,0x23,0x30,0x44,0x44,0x55,0x53,0x4c,0x61,0x5e, 0x4f,0x64,0x59,0x48,0x5b,0x58,0x47,0x58,0x56,0x46,0x57,0x54,0x44,0x55,0x56,0x46, 0x57,0x58,0x47,0x58,0x54,0x43,0x53,0x4c,0x3d,0x4b,0xa7,0xaa,0xb8,0x65,0x6f,0x91, 0x52,0x5c,0x81,0x50,0x50,0x77,0x52,0x5d,0x81,0x25,0x29,0x38,0x15,0x17,0x1e,0x13, 0x15,0x1b,0x29,0x28,0x39,0x2c,0x2a,0x43,0x2c,0x29,0x41,0x2c,0x29,0x41,0x55,0x4f, 0x73,0x57,0x50,0x75,0x5a,0x51,0x75,0x5b,0x51,0x76,0x5b,0x51,0x77,0x5b,0x51,0x77, 0x5c,0x52,0x77,0x5a,0x52,0x77,0x55,0x4f,0x76,0x50,0x4e,0x77,0x50,0x52,0x79,0x51, 0x5d,0x83,0x66,0x71,0x92,0x48,0x46,0x4f,0x0e,0x0f,0x13,0x0d,0x0e,0x12,0x0e,0x0e, 0x12,0x0c,0x0d,0x10,0x32,0x2a,0x35,0x4c,0x3e,0x4c,0x31,0x27,0x2f,0x99,0x9a,0xa6, 0x83,0x8c,0xa9,0x62,0x6e,0x90,0x56,0x62,0x88,0x52,0x5d,0x85,0x52,0x5c,0x83,0x4e, 0x59,0x80,0x4b,0x55,0x7b,0x47,0x4f,0x76,0x45,0x4d,0x70,0x3f,0x47,0x69,0x3f,0x42, 0x65,0x3d,0x3f,0x61,0x3f,0x41,0x64,0x42,0x43,0x65,0x46,0x46,0x6a,0x39,0x38,0x54, 0x14,0x15,0x1a,0x18,0x1a,0x1f,0x1b,0x1d,0x23,0x1b,0x1d,0x22,0x1c,0x1e,0x24,0x1a, 0x1d,0x22,0x1a,0x1d,0x22,0x18,0x1a,0x1f,0x2b,0x25,0x2d,0x52,0x4d,0x58,0x83,0x8c, 0xa5,0x84,0x8f,0xa8,0x87,0x90,0xaa,0x88,0x92,0xab,0x2c,0x2e,0x37,0x0e,0x0e,0x12, 0x10,0x11,0x15,0x11,0x12,0x16,0x11,0x12,0x16,0x10,0x12,0x16,0x10,0x12,0x16,0x10, 0x12,0x16,0x0e,0x10,0x14,0x0e,0x0f,0x13,0x0e,0x0e,0x12,0x0d,0x0e,0x12,0x0c,0x0d, 0x11,0x5c,0x49,0x63,0x5e,0x51,0x73,0xc0,0xc3,0xca,0x41,0x33,0x3e,0x56,0x46,0x57, 0x4f,0x40,0x4f,0x50,0x43,0x54,0x07,0x07,0x0a,0x09,0x0a,0x0d,0x09,0x0a,0x0d,0x0a, 0x0a,0x0e,0x09,0x0a,0x0d,0x09,0x0a,0x0d,0x0a,0x0a,0x0e,0x0a,0x0a,0x0e,0x09,0x0a, 0x0d,0x08,0x08,0x0b,0x08,0x08,0x0b,0x06,0x06,0x09,0x06,0x06,0x08,0x06,0x06,0x07, 0x06,0x06,0x07,0x06,0x06,0x07,0x05,0x05,0x06,0x05,0x05,0x06,0x05,0x05,0x06,0x04, 0x04,0x06,0x04,0x04,0x06,0x04,0x04,0x06,0x03,0x03,0x04,0x03,0x03,0x04,0x02,0x02, 0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0a,0x0a,0x0a,0xcf,0xd2,0xdf,0x9d,0xa5,0xbe, 0x92,0x9b,0xb7,0x95,0x9f,0xb9,0x93,0x9c,0xb7,0x93,0x9c,0xb7,0x93,0x9c,0xb7,0x92, 0x9c,0xb8,0x9f,0xac,0xca,0xbf,0xcd,0xf6,0x05,0x05,0x05,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x03,0x03,0x02,0x03,0x04, 0x02,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x05,0x04,0x05,0x06,0x05,0x06,0x07,0x06, 0x06,0x0a,0x07,0x09,0x0c,0x0a,0x0b,0x0f,0x0b,0x0e,0x12,0x0e,0x10,0x16,0x11,0x14, 0x15,0x10,0x13,0x16,0x11,0x15,0x1b,0x15,0x1a,0x20,0x1a,0x1f,0x29,0x1f,0x27,0x30, 0x26,0x2f,0x36,0x2b,0x36,0x38,0x2d,0x38,0x38,0x2d,0x38,0x35,0x2a,0x36,0x31,0x28, 0x32,0x2c,0x26,0x2f,0x2a,0x24,0x2f,0x2a,0x26,0x30,0x2f,0x29,0x35,0x35,0x2e,0x3a, 0x3e,0x34,0x42,0x47,0x3a,0x49,0x4f,0x43,0x55,0x50,0x47,0x5c,0x48,0x45,0x5d,0x44, 0x42,0x5a,0x45,0x43,0x5b,0x47,0x46,0x5f,0x4a,0x4a,0x64,0x4c,0x4c,0x66,0x4c,0x4a, 0x66,0x4a,0x48,0x62,0x4c,0x46,0x5d,0x4c,0x42,0x56,0x44,0x40,0x56,0x47,0x4e,0x65, 0x66,0x6d,0x80,0x76,0x7e,0x95,0x80,0x88,0xa3,0x8f,0x8f,0xa6,0x5c,0x62,0x85,0x61, 0x61,0x81,0x5c,0x5f,0x7e,0x59,0x4c,0x63,0x4e,0x4d,0x6b,0x95,0x90,0x9f,0x80,0x78, 0x81,0x2b,0x22,0x2d,0x30,0x27,0x34,0x38,0x2e,0x3e,0x3a,0x30,0x41,0x24,0x1f,0x27, 0x52,0x54,0x60,0x9a,0xa2,0xb6,0x5f,0x6b,0x8c,0x70,0x7a,0x9a,0x88,0x91,0xab,0x85, 0x8e,0xa9,0x88,0x90,0xaa,0x88,0x91,0xaa,0x89,0x92,0xaa,0x89,0x91,0xa9,0x89,0x92, 0xa8,0x88,0x90,0xa6,0x82,0x8a,0xa1,0x68,0x71,0x8f,0x5c,0x66,0x85,0x80,0x88,0x9d, 0x6d,0x70,0x7d,0x28,0x2a,0x39,0x2f,0x2e,0x3e,0x37,0x36,0x47,0x3d,0x3a,0x4e,0x45, 0x40,0x55,0x49,0x44,0x5a,0x4a,0x46,0x5c,0x4f,0x49,0x61,0x55,0x4d,0x64,0x59,0x4e, 0x66,0x59,0x4d,0x63,0x56,0x4a,0x5f,0x5d,0x52,0x66,0x5c,0x52,0x66,0x55,0x4a,0x60, 0x52,0x48,0x5d,0x47,0x41,0x56,0x3f,0x3e,0x53,0x3d,0x40,0x53,0x3e,0x3e,0x52,0x3c, 0x3a,0x4e,0x36,0x33,0x47,0x3a,0x30,0x3e,0x3b,0x2e,0x39,0x4f,0x48,0x56,0x80,0x86, 0x9d,0x9b,0xa2,0xb7,0x9b,0xa3,0xb7,0x92,0x99,0xad,0x7c,0x7f,0x94,0x4a,0x4f,0x62, 0x5b,0x62,0x78,0x62,0x6a,0x7f,0x66,0x6d,0x82,0x73,0x79,0x8a,0x72,0x78,0x89,0x7f, 0x84,0x92,0x9b,0x9f,0xa7,0xaa,0xac,0xb2,0xa2,0xa5,0xad,0xab,0xae,0xb5,0xaf,0xb1, 0xb7,0xb2,0xb4,0xb9,0xa9,0xab,0xb2,0x99,0x9d,0xa6,0x96,0x99,0xa3,0x9a,0x9d,0xa6, 0x8c,0x8f,0x9b,0x76,0x7c,0x8a,0x63,0x6a,0x7b,0x58,0x5e,0x71,0x4a,0x52,0x65,0x4b, 0x52,0x63,0x4d,0x52,0x64,0x52,0x57,0x68,0x52,0x59,0x69,0x43,0x4a,0x5d,0x3d,0x42, 0x57,0x42,0x41,0x58,0x43,0x42,0x5b,0x42,0x42,0x5b,0x43,0x43,0x5a,0x3e,0x3b,0x52, 0x3d,0x38,0x4a,0x3e,0x39,0x4b,0x42,0x3c,0x4f,0x4a,0x42,0x56,0x4e,0x46,0x5b,0x4f, 0x46,0x5b,0x52,0x48,0x5e,0x4c,0x45,0x5c,0x49,0x42,0x58,0x41,0x3c,0x50,0x35,0x34, 0x46,0x2c,0x2d,0x3d,0x26,0x2a,0x37,0x24,0x27,0x33,0x23,0x26,0x32,0x6a,0x6d,0x82, 0x83,0x84,0x95,0x5e,0x53,0x67,0x5b,0x4c,0x60,0x58,0x48,0x5a,0x55,0x46,0x57,0x52, 0x43,0x54,0x55,0x46,0x56,0x57,0x47,0x57,0x58,0x47,0x58,0x4d,0x3e,0x4d,0x8d,0x84, 0x8e,0x75,0x80,0x9d,0x56,0x60,0x85,0x50,0x50,0x76,0x51,0x5b,0x80,0x22,0x26,0x33, 0x16,0x18,0x1e,0x14,0x16,0x1c,0x26,0x26,0x36,0x2d,0x2b,0x44,0x2b,0x2a,0x41,0x2d, 0x29,0x42,0x55,0x4f,0x74,0x5a,0x51,0x75,0x5a,0x51,0x75,0x5b,0x51,0x76,0x5b,0x51, 0x77,0x5c,0x52,0x77,0x5c,0x52,0x77,0x5a,0x51,0x77,0x55,0x50,0x77,0x50,0x4f,0x77, 0x51,0x52,0x79,0x51,0x5c,0x83,0x65,0x6f,0x91,0x4e,0x4e,0x57,0x0e,0x0f,0x13,0x0e, 0x0e,0x12,0x0d,0x0e,0x12,0x0c,0x0d,0x11,0x2c,0x26,0x30,0x4d,0x40,0x4f,0x31,0x27, 0x30,0x92,0x93,0x9f,0x82,0x8c,0xa8,0x62,0x6e,0x90,0x55,0x61,0x87,0x53,0x5e,0x86, 0x51,0x5c,0x82,0x4e,0x59,0x80,0x4c,0x57,0x7b,0x48,0x53,0x77,0x44,0x4c,0x71,0x40, 0x47,0x6a,0x3d,0x42,0x66,0x3e,0x40,0x62,0x3f,0x40,0x63,0x42,0x43,0x64,0x45,0x45, 0x69,0x39,0x39,0x53,0x15,0x16,0x1a,0x1a,0x1b,0x21,0x1e,0x20,0x26,0x1f,0x22,0x28, 0x1e,0x21,0x27,0x1e,0x21,0x27,0x1d,0x1f,0x26,0x1b,0x1d,0x22,0x1f,0x1f,0x25,0x36, 0x2d,0x36,0x8b,0x8f,0xa2,0x83,0x8c,0xa6,0x87,0x90,0xa9,0x88,0x92,0xab,0x7d,0x85, 0x9d,0x0e,0x0f,0x12,0x0f,0x11,0x15,0x12,0x12,0x17,0x12,0x13,0x18,0x12,0x12,0x17, 0x11,0x12,0x16,0x0f,0x11,0x16,0x0f,0x10,0x15,0x0e,0x10,0x14,0x0e,0x10,0x14,0x0e, 0x0f,0x14,0x0c,0x0e,0x12,0x5d,0x48,0x64,0x50,0x4e,0x74,0xc0,0xbe,0xc0,0x43,0x35, 0x41,0x56,0x45,0x57,0x51,0x41,0x51,0x44,0x3a,0x48,0x08,0x09,0x0c,0x0a,0x0b,0x0e, 0x0b,0x0c,0x10,0x0b,0x0d,0x11,0x0b,0x0d,0x11,0x0c,0x0d,0x11,0x0b,0x0c,0x10,0x21, 0x23,0x25,0x0a,0x0c,0x0f,0x09,0x0a,0x0d,0x09,0x09,0x0c,0x08,0x08,0x0a,0x06,0x06, 0x09,0x06,0x06,0x09,0x06,0x06,0x08,0x06,0x06,0x08,0x06,0x06,0x08,0x06,0x06,0x07, 0x05,0x05,0x06,0x05,0x05,0x06,0x04,0x04,0x06,0x04,0x04,0x06,0x04,0x03,0x05,0x03, 0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02, 0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x94,0x95, 0x98,0xa7,0xaf,0xc4,0x8c,0x96,0xb2,0x8b,0x95,0xb1,0x8c,0x98,0xb3,0x8d,0x96,0xb3, 0x8d,0x98,0xb3,0x8e,0x99,0xb4,0x91,0x9b,0xb8,0xac,0xb8,0xdb,0x5f,0x66,0x73,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x03,0x04,0x02,0x03,0x04,0x03,0x03, 0x05,0x03,0x04,0x05,0x03,0x04,0x05,0x04,0x04,0x06,0x05,0x06,0x07,0x06,0x06,0x0a, 0x07,0x09,0x0d,0x0a,0x0c,0x10,0x0c,0x0f,0x13,0x0e,0x12,0x19,0x12,0x16,0x21,0x1a, 0x1f,0x25,0x1d,0x23,0x26,0x1e,0x25,0x22,0x1a,0x1f,0x27,0x1f,0x26,0x2b,0x22,0x2a, 0x31,0x26,0x2f,0x36,0x2a,0x35,0x3d,0x31,0x3d,0x3f,0x33,0x3f,0x3e,0x32,0x3f,0x3e, 0x32,0x3e,0x39,0x2f,0x3a,0x32,0x2c,0x37,0x2c,0x27,0x35,0x2a,0x27,0x34,0x2f,0x2a, 0x38,0x35,0x2e,0x3c,0x3a,0x32,0x40,0x42,0x36,0x44,0x49,0x3b,0x4b,0x52,0x46,0x58, 0x50,0x47,0x5d,0x46,0x45,0x5e,0x47,0x46,0x60,0x47,0x47,0x61,0x48,0x47,0x62,0x4a, 0x49,0x64,0x4b,0x4a,0x66,0x4b,0x4a,0x66,0x49,0x47,0x61,0x4c,0x43,0x58,0x49,0x41, 0x54,0x3f,0x3e,0x55,0x50,0x57,0x6b,0x70,0x76,0x8b,0x99,0xa1,0xb6,0xb2,0xb1,0xbf, 0x94,0x97,0xad,0x5f,0x61,0x82,0x66,0x64,0x80,0x53,0x4c,0x6a,0x51,0x46,0x62,0x84, 0x81,0x92,0x95,0x8e,0x96,0x2e,0x25,0x2f,0x2d,0x24,0x30,0x35,0x2b,0x39,0x3b,0x30, 0x41,0x32,0x29,0x36,0x27,0x28,0x2f,0xa0,0xa5,0xb7,0x72,0x7e,0x9c,0x5f,0x69,0x8d, 0x88,0x91,0xab,0x85,0x8e,0xa9,0x85,0x8e,0xa9,0x88,0x91,0xaa,0x8b,0x94,0xab,0x8f, 0x99,0xaf,0x8e,0x97,0xad,0x8e,0x96,0xab,0x8b,0x93,0xa9,0x79,0x82,0x9b,0x61,0x69, 0x89,0x72,0x7a,0x94,0x8a,0x8e,0x9e,0x2c,0x30,0x3e,0x33,0x32,0x44,0x3b,0x36,0x49, 0x45,0x3c,0x4e,0x4f,0x44,0x56,0x6e,0x65,0x74,0x63,0x5b,0x6c,0x51,0x47,0x5e,0x55, 0x4b,0x62,0x59,0x4e,0x64,0x5a,0x4e,0x65,0x60,0x56,0x6b,0x6c,0x62,0x75,0x6a,0x61, 0x74,0x65,0x5c,0x6f,0x56,0x4a,0x61,0x55,0x4a,0x5f,0x4d,0x44,0x59,0x42,0x3e,0x52, 0x46,0x3f,0x52,0x43,0x3c,0x50,0x3f,0x38,0x4a,0x3b,0x31,0x3f,0x36,0x2b,0x35,0x3b, 0x31,0x3b,0x69,0x6d,0x81,0x85,0x8a,0x9c,0x8e,0x93,0xa6,0x88,0x8d,0xa1,0x79,0x7c, 0x90,0x42,0x46,0x57,0x53,0x59,0x6e,0x58,0x5d,0x73,0x5b,0x61,0x75,0x71,0x75,0x84, 0x73,0x77,0x87,0x77,0x7a,0x89,0x76,0x7b,0x8a,0x78,0x7d,0x8c,0x77,0x7b,0x8d,0x90, 0x95,0xa2,0xa5,0xa8,0xaf,0xaa,0xad,0xb3,0xa2,0xa6,0xad,0x92,0x96,0xa1,0x96,0x9a, 0xa3,0xa2,0xa4,0xab,0x9a,0x9c,0xa5,0x8e,0x92,0x9b,0x82,0x86,0x92,0x6e,0x74,0x82, 0x5e,0x63,0x75,0x54,0x5a,0x6c,0x52,0x58,0x69,0x56,0x5c,0x6b,0x55,0x5a,0x69,0x4a, 0x50,0x61,0x3e,0x3e,0x54,0x3e,0x3d,0x53,0x3c,0x3c,0x52,0x3e,0x43,0x59,0x43,0x47, 0x5f,0x42,0x43,0x5b,0x42,0x47,0x5a,0x3a,0x3c,0x50,0x37,0x38,0x4b,0x3b,0x38,0x4c, 0x43,0x41,0x55,0x48,0x46,0x5e,0x4a,0x49,0x63,0x47,0x46,0x60,0x45,0x47,0x60,0x3b, 0x3d,0x52,0x44,0x4a,0x5a,0x46,0x4c,0x5a,0x38,0x3d,0x4a,0x26,0x2a,0x36,0x3c,0x40, 0x51,0x72,0x79,0x91,0x9a,0x9b,0xaa,0x83,0x83,0x96,0x61,0x54,0x69,0x58,0x48,0x5b, 0x54,0x45,0x57,0x51,0x42,0x53,0x55,0x45,0x56,0x57,0x46,0x58,0x59,0x48,0x59,0x53, 0x43,0x53,0x53,0x44,0x52,0x9b,0xa0,0xb5,0x5a,0x66,0x8a,0x50,0x4f,0x76,0x50,0x5a, 0x7f,0x20,0x23,0x2e,0x17,0x19,0x20,0x14,0x16,0x1c,0x28,0x28,0x38,0x2d,0x2b,0x44, 0x2e,0x2b,0x43,0x2d,0x2b,0x41,0x57,0x50,0x73,0x57,0x50,0x75,0x5a,0x51,0x75,0x5b, 0x51,0x75,0x5a,0x51,0x77,0x5c,0x52,0x77,0x5c,0x52,0x77,0x5b,0x51,0x77,0x58,0x52, 0x77,0x51,0x4f,0x78,0x51,0x53,0x7a,0x52,0x5c,0x82,0x66,0x72,0x93,0x55,0x52,0x5c, 0x0f,0x11,0x15,0x0e,0x0f,0x13,0x0e,0x0f,0x12,0x0c,0x0d,0x11,0x27,0x23,0x2a,0x52, 0x44,0x53,0x32,0x28,0x31,0x92,0x93,0x9f,0x86,0x8f,0xaa,0x61,0x6d,0x90,0x55,0x62, 0x88,0x51,0x5c,0x85,0x50,0x5c,0x83,0x50,0x5a,0x80,0x4d,0x58,0x7e,0x48,0x54,0x79, 0x44,0x4d,0x72,0x40,0x48,0x6c,0x3e,0x43,0x68,0x3f,0x42,0x64,0x3f,0x40,0x63,0x42, 0x43,0x65,0x47,0x46,0x69,0x3a,0x3a,0x55,0x16,0x18,0x1d,0x1d,0x1f,0x25,0x22,0x24, 0x2b,0x22,0x24,0x2b,0x21,0x23,0x2a,0x22,0x24,0x2b,0x1e,0x21,0x28,0x1e,0x21,0x27, 0x1b,0x1e,0x23,0x35,0x2f,0x37,0x39,0x31,0x3a,0x86,0x8e,0xa8,0x87,0x90,0xaa,0x88, 0x91,0xaa,0x8d,0x94,0xad,0x1b,0x1c,0x21,0x0f,0x11,0x15,0x11,0x12,0x16,0x12,0x14, 0x19,0x12,0x14,0x19,0x12,0x12,0x17,0x11,0x12,0x16,0x10,0x12,0x16,0x10,0x11,0x16, 0x0f,0x11,0x15,0x0e,0x0f,0x14,0x15,0x14,0x1a,0x5d,0x48,0x62,0x4f,0x59,0x80,0x9b, 0x96,0x9b,0x46,0x38,0x44,0x59,0x47,0x59,0x50,0x40,0x50,0x4c,0x44,0x4f,0x2d,0x2d, 0x30,0x2e,0x2f,0x33,0x24,0x25,0x29,0x0f,0x11,0x15,0x0e,0x10,0x15,0x11,0x13,0x18, 0x2a,0x2b,0x2f,0x3c,0x3e,0x41,0x2c,0x2c,0x30,0x0f,0x10,0x14,0x0a,0x0a,0x0e,0x09, 0x09,0x0c,0x09,0x09,0x0c,0x07,0x07,0x0a,0x07,0x06,0x0a,0x06,0x06,0x09,0x06,0x06, 0x08,0x06,0x06,0x08,0x06,0x06,0x07,0x05,0x05,0x06,0x05,0x05,0x06,0x04,0x04,0x06, 0x04,0x04,0x06,0x04,0x04,0x06,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x02, 0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x29,0x29,0x2a,0xbb,0xc2,0xd2,0x8c,0x95,0xb2,0x86,0x91,0xaf,0x88,0x91, 0xaf,0x8b,0x95,0xb2,0x8b,0x94,0xb1,0x8a,0x94,0xb2,0x8a,0x94,0xb0,0x99,0xa3,0xc4, 0xc0,0xce,0xf6,0x04,0x04,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x03,0x03, 0x04,0x03,0x03,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x03,0x02,0x03,0x04,0x03,0x03,0x04,0x02,0x03,0x05,0x03,0x04,0x05,0x03, 0x04,0x06,0x04,0x05,0x06,0x04,0x05,0x06,0x04,0x05,0x07,0x06,0x06,0x0a,0x08,0x0a, 0x0d,0x0a,0x0c,0x11,0x0e,0x11,0x16,0x11,0x15,0x1a,0x14,0x19,0x1e,0x16,0x1c,0x22, 0x1b,0x21,0x29,0x20,0x27,0x2c,0x22,0x2a,0x2c,0x22,0x2a,0x2d,0x23,0x2b,0x2e,0x23, 0x2c,0x32,0x27,0x30,0x3a,0x2e,0x3a,0x3e,0x32,0x3e,0x41,0x35,0x41,0x42,0x36,0x43, 0x45,0x38,0x46,0x45,0x39,0x47,0x41,0x37,0x46,0x3b,0x34,0x43,0x33,0x2f,0x3f,0x31, 0x2e,0x3e,0x32,0x31,0x42,0x37,0x32,0x42,0x39,0x33,0x44,0x3e,0x36,0x46,0x45,0x3a, 0x49,0x4b,0x3d,0x4c,0x52,0x46,0x57,0x4e,0x48,0x5e,0x49,0x48,0x62,0x49,0x4a,0x64, 0x48,0x49,0x63,0x49,0x49,0x62,0x49,0x48,0x63,0x4a,0x4a,0x66,0x4a,0x49,0x64,0x48, 0x44,0x5b,0x4a,0x40,0x53,0x43,0x3d,0x4f,0x3d,0x3b,0x51,0x4b,0x51,0x6a,0x7e,0x87, 0xa0,0xa3,0xa6,0xb7,0x9f,0xa1,0xb3,0x62,0x6b,0x8b,0x69,0x63,0x7d,0x59,0x55,0x71, 0x57,0x48,0x5f,0x74,0x74,0x88,0xaa,0xa5,0xac,0x35,0x29,0x34,0x2a,0x21,0x2d,0x33, 0x28,0x36,0x3a,0x30,0x40,0x38,0x2f,0x3f,0x0c,0x0b,0x0f,0x7f,0x84,0x93,0x8f,0x97, 0xaf,0x5a,0x66,0x8b,0x82,0x8b,0xa7,0x87,0x90,0xab,0x86,0x8f,0xaa,0x88,0x90,0xac, 0x92,0x9a,0xb0,0x98,0xa1,0xb6,0x9a,0xa2,0xb5,0x98,0x9f,0xb4,0x95,0x9c,0xb0,0x8b, 0x93,0xa8,0x69,0x72,0x8f,0x68,0x72,0x8e,0x8a,0x91,0xa6,0x44,0x48,0x56,0x35,0x33, 0x46,0x41,0x3b,0x4e,0x47,0x3f,0x52,0x4d,0x43,0x56,0x68,0x5d,0x6d,0x6f,0x66,0x74, 0x60,0x56,0x68,0x52,0x47,0x5c,0x74,0x6c,0x7c,0x5f,0x55,0x6a,0x75,0x6b,0x7e,0x5f, 0x55,0x6a,0x56,0x4a,0x60,0x6a,0x60,0x72,0x5a,0x51,0x64,0x57,0x4c,0x62,0x57,0x4c, 0x61,0x53,0x47,0x5b,0x51,0x45,0x5a,0x4b,0x41,0x53,0x44,0x3a,0x4b,0x3c,0x30,0x3c, 0x2d,0x22,0x2a,0x2e,0x24,0x2c,0x5a,0x5a,0x6a,0x6f,0x73,0x83,0x7c,0x7f,0x90,0x7d, 0x7f,0x91,0x76,0x76,0x8a,0x3a,0x38,0x4c,0x46,0x46,0x5e,0x49,0x4a,0x64,0x48,0x4b, 0x64,0x56,0x5a,0x6f,0x50,0x55,0x6d,0x53,0x58,0x6d,0x56,0x5a,0x6f,0x52,0x57,0x6c, 0x56,0x5d,0x71,0x62,0x66,0x79,0x72,0x75,0x85,0x7f,0x82,0x90,0x88,0x8c,0x99,0x81, 0x86,0x94,0x82,0x87,0x96,0x8e,0x92,0x9e,0x96,0x9a,0xa3,0x9a,0x9d,0xa5,0x98,0x9b, 0xa3,0x84,0x88,0x93,0x6a,0x6f,0x7e,0x5b,0x61,0x72,0x59,0x5e,0x6e,0x5a,0x5f,0x6e, 0x5c,0x61,0x6f,0x55,0x5a,0x69,0x50,0x55,0x65,0x4e,0x53,0x63,0x49,0x4e,0x5f,0x3d, 0x42,0x56,0x3f,0x43,0x5a,0x40,0x46,0x5d,0x3f,0x45,0x5a,0x48,0x4d,0x60,0x3c,0x3f, 0x52,0x36,0x36,0x49,0x37,0x35,0x48,0x42,0x3d,0x52,0x46,0x45,0x5e,0x4a,0x4a,0x65, 0x47,0x47,0x61,0x3d,0x3d,0x52,0x3b,0x41,0x52,0x4e,0x52,0x60,0x46,0x4b,0x58,0x2b, 0x2f,0x3b,0x52,0x59,0x74,0x71,0x78,0x91,0xa4,0xa7,0xb3,0x95,0x98,0xa8,0x86,0x86, 0x96,0x58,0x4d,0x61,0x50,0x42,0x54,0x52,0x44,0x55,0x55,0x46,0x56,0x57,0x47,0x58, 0x58,0x48,0x59,0x58,0x47,0x58,0x4d,0x3e,0x4d,0x97,0x91,0x9b,0x6a,0x74,0x96,0x50, 0x56,0x7d,0x50,0x5a,0x80,0x1d,0x1e,0x29,0x16,0x19,0x20,0x14,0x16,0x1d,0x26,0x26, 0x36,0x2c,0x2c,0x43,0x2d,0x2a,0x42,0x2d,0x2a,0x42,0x59,0x51,0x74,0x5a,0x51,0x75, 0x5b,0x51,0x75,0x5b,0x50,0x76,0x5a,0x51,0x77,0x5c,0x52,0x77,0x5c,0x53,0x77,0x5a, 0x51,0x77,0x58,0x52,0x77,0x51,0x4f,0x78,0x51,0x53,0x7a,0x52,0x5c,0x82,0x66,0x70, 0x92,0x5a,0x57,0x62,0x0f,0x11,0x16,0x0f,0x11,0x15,0x0e,0x10,0x14,0x0e,0x0f,0x13, 0x22,0x1f,0x26,0x51,0x43,0x53,0x38,0x2d,0x36,0x8b,0x89,0x97,0x86,0x90,0xaa,0x63, 0x6f,0x92,0x56,0x62,0x88,0x52,0x5c,0x84,0x51,0x5c,0x83,0x4f,0x59,0x80,0x4c,0x57, 0x7c,0x47,0x53,0x79,0x45,0x4f,0x73,0x43,0x4a,0x6c,0x3f,0x44,0x68,0x3d,0x40,0x63, 0x40,0x41,0x64,0x42,0x42,0x65,0x46,0x46,0x6b,0x3a,0x3b,0x55,0x18,0x1a,0x1f,0x1f, 0x22,0x28,0x25,0x27,0x2f,0x26,0x28,0x30,0x24,0x27,0x2e,0x22,0x25,0x2d,0x22,0x24, 0x2b,0x21,0x23,0x2a,0x1e,0x21,0x27,0x25,0x24,0x2b,0x38,0x31,0x3b,0x72,0x76,0x87, 0x85,0x8e,0xa8,0x8d,0x94,0xad,0x9b,0xa2,0xb6,0x71,0x75,0x82,0x0f,0x11,0x15,0x11, 0x12,0x17,0x12,0x14,0x19,0x13,0x14,0x1a,0x12,0x14,0x1a,0x12,0x13,0x19,0x12,0x13, 0x18,0x11,0x12,0x17,0x10,0x12,0x17,0x0f,0x11,0x16,0x23,0x1e,0x29,0x5b,0x47,0x62, 0x60,0x6b,0x8e,0x6f,0x68,0x6e,0x4a,0x3a,0x49,0x59,0x48,0x5a,0x51,0x41,0x51,0x1d, 0x1a,0x21,0x0c,0x0e,0x12,0x0e,0x10,0x15,0x12,0x12,0x18,0x17,0x19,0x1e,0x29,0x2a, 0x2f,0x55,0x56,0x5a,0x2c,0x2e,0x33,0x14,0x15,0x1b,0x2a,0x2b,0x30,0x24,0x26,0x2b, 0x0b,0x0d,0x11,0x0a,0x0b,0x0f,0x0a,0x0a,0x0d,0x09,0x09,0x0b,0x07,0x07,0x0a,0x07, 0x07,0x0a,0x06,0x06,0x09,0x06,0x06,0x09,0x06,0x06,0x08,0x06,0x06,0x07,0x05,0x05, 0x06,0x05,0x05,0x06,0x05,0x05,0x06,0x04,0x04,0x06,0x04,0x03,0x05,0x04,0x03,0x05, 0x03,0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02, 0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc6,0xc9,0xd3,0x98,0xa1,0xba,0x82, 0x8d,0xab,0x84,0x8e,0xac,0x85,0x8e,0xad,0x86,0x92,0xaf,0x86,0x91,0xaf,0x89,0x93, 0xb1,0x8d,0x97,0xb5,0xa2,0xb0,0xd4,0x5d,0x64,0x77,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0a, 0x0a,0x0d,0x16,0x16,0x19,0x0d,0x0e,0x0f,0x04,0x03,0x05,0x05,0x04,0x05,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02, 0x03,0x02,0x02,0x04,0x03,0x03,0x05,0x03,0x04,0x06,0x05,0x06,0x06,0x05,0x06,0x08, 0x06,0x07,0x0a,0x08,0x0a,0x09,0x06,0x08,0x08,0x06,0x06,0x0a,0x07,0x09,0x0c,0x09, 0x0a,0x11,0x0d,0x10,0x16,0x12,0x16,0x1e,0x17,0x1d,0x24,0x1d,0x23,0x27,0x1f,0x26, 0x2a,0x21,0x28,0x29,0x20,0x28,0x2b,0x22,0x2a,0x2d,0x23,0x2b,0x2d,0x23,0x2b,0x31, 0x27,0x31,0x35,0x2a,0x35,0x3a,0x2f,0x3a,0x3e,0x32,0x3f,0x44,0x37,0x45,0x46,0x39, 0x47,0x47,0x3a,0x49,0x47,0x3c,0x4b,0x46,0x3b,0x4b,0x41,0x39,0x4a,0x3d,0x37,0x49, 0x38,0x36,0x4a,0x3b,0x3a,0x50,0x3c,0x3d,0x52,0x3d,0x3a,0x51,0x3a,0x39,0x4d,0x39, 0x37,0x4b,0x3c,0x38,0x4a,0x48,0x3e,0x50,0x50,0x41,0x52,0x56,0x4a,0x5e,0x4a,0x49, 0x63,0x49,0x4a,0x65,0x4a,0x4b,0x66,0x4a,0x4b,0x66,0x4a,0x4a,0x66,0x4a,0x4a,0x65, 0x4a,0x49,0x63,0x48,0x46,0x60,0x47,0x40,0x56,0x42,0x3a,0x4d,0x41,0x3b,0x4e,0x4c, 0x44,0x58,0x5e,0x5d,0x7e,0x6c,0x73,0x90,0x78,0x7b,0x95,0x66,0x6e,0x8b,0x6b,0x65, 0x80,0x58,0x51,0x6b,0x52,0x41,0x56,0x63,0x62,0x7c,0xaf,0xaa,0xb2,0x41,0x36,0x3f, 0x28,0x21,0x2b,0x2e,0x25,0x32,0x38,0x2d,0x3f,0x3b,0x30,0x45,0x15,0x14,0x1b,0x54, 0x57,0x62,0xa1,0xa6,0xba,0x69,0x74,0x95,0x72,0x7d,0x9d,0x87,0x90,0xab,0x85,0x8f, 0xaa,0x89,0x91,0xac,0x95,0x9c,0xb2,0x9c,0xa4,0xb9,0x9e,0xa4,0xb8,0x9a,0xa1,0xb5, 0x9a,0xa1,0xb4,0x95,0x9b,0xb0,0x7c,0x85,0x9e,0x70,0x7a,0x95,0x85,0x8d,0xa3,0x6f, 0x73,0x82,0x37,0x3c,0x50,0x3e,0x3e,0x55,0x40,0x3f,0x56,0x49,0x44,0x5b,0x6f,0x67, 0x76,0x5f,0x51,0x63,0x52,0x47,0x5a,0x51,0x46,0x58,0x58,0x4b,0x5d,0x6d,0x62,0x72, 0x6c,0x62,0x72,0x57,0x4c,0x60,0x56,0x4c,0x61,0x64,0x5a,0x6d,0x62,0x57,0x6b,0x56, 0x4a,0x60,0x56,0x4b,0x5f,0x57,0x4b,0x5f,0x55,0x49,0x5b,0x50,0x46,0x58,0x4c,0x42, 0x52,0x41,0x34,0x42,0x28,0x1e,0x24,0x26,0x1d,0x23,0x58,0x58,0x67,0x6a,0x6b,0x7c, 0x70,0x72,0x82,0x72,0x72,0x82,0x6c,0x67,0x79,0x47,0x3b,0x4c,0x4d,0x42,0x54,0x51, 0x46,0x57,0x50,0x46,0x58,0x4d,0x43,0x56,0x4a,0x42,0x57,0x46,0x41,0x57,0x44,0x3f, 0x56,0x44,0x3f,0x57,0x45,0x42,0x59,0x46,0x43,0x5b,0x46,0x48,0x5f,0x49,0x4b,0x62, 0x61,0x65,0x76,0x6e,0x74,0x84,0x6d,0x72,0x85,0x73,0x7a,0x8b,0x85,0x8a,0x96,0x95, 0x99,0xa2,0x97,0x9a,0xa4,0x86,0x8a,0x96,0x6e,0x73,0x81,0x5f,0x65,0x75,0x5d,0x62, 0x73,0x5a,0x60,0x73,0x5c,0x62,0x73,0x5d,0x62,0x71,0x5d,0x61,0x6e,0x5b,0x60,0x6c, 0x56,0x5b,0x69,0x50,0x56,0x65,0x50,0x55,0x64,0x55,0x5a,0x69,0x3e,0x44,0x59,0x3f, 0x46,0x5a,0x47,0x4d,0x60,0x40,0x44,0x56,0x34,0x37,0x49,0x35,0x34,0x46,0x3e,0x3b, 0x50,0x46,0x44,0x5a,0x49,0x47,0x62,0x43,0x42,0x5a,0x3a,0x3c,0x51,0x3a,0x3e,0x50, 0x45,0x4a,0x58,0x47,0x48,0x59,0x5e,0x57,0x6e,0x71,0x73,0x8b,0xaa,0xad,0xb8,0x99, 0x9e,0xad,0x91,0x97,0xa8,0x8e,0x8e,0x9a,0x51,0x45,0x56,0x53,0x46,0x56,0x55,0x46, 0x57,0x57,0x48,0x59,0x58,0x48,0x5a,0x59,0x48,0x5a,0x52,0x42,0x51,0x5e,0x51,0x5e, 0x85,0x8f,0xa8,0x52,0x5d,0x83,0x4f,0x5a,0x7e,0x19,0x1b,0x24,0x17,0x1a,0x21,0x16, 0x17,0x1e,0x26,0x26,0x34,0x2c,0x2c,0x43,0x2d,0x2a,0x42,0x30,0x2b,0x42,0x59,0x51, 0x73,0x59,0x51,0x74,0x5a,0x51,0x74,0x5b,0x50,0x76,0x5c,0x52,0x77,0x5c,0x52,0x77, 0x5c,0x53,0x77,0x5b,0x52,0x77,0x55,0x51,0x77,0x52,0x4f,0x78,0x51,0x52,0x79,0x51, 0x5c,0x82,0x65,0x6f,0x91,0x5f,0x5d,0x68,0x10,0x12,0x16,0x0f,0x11,0x15,0x0f,0x11, 0x15,0x0e,0x0f,0x13,0x1d,0x1c,0x22,0x52,0x44,0x54,0x3c,0x30,0x3b,0x8a,0x8a,0x96, 0x84,0x8e,0xa9,0x64,0x6f,0x93,0x58,0x64,0x89,0x53,0x5d,0x84,0x51,0x5c,0x83,0x4f, 0x5a,0x80,0x4d,0x58,0x7f,0x4b,0x54,0x7b,0x45,0x4f,0x73,0x43,0x4c,0x70,0x3f,0x44, 0x69,0x3f,0x43,0x64,0x40,0x41,0x66,0x42,0x42,0x67,0x47,0x47,0x6c,0x3a,0x3b,0x55, 0x1a,0x1c,0x22,0x22,0x25,0x2c,0x26,0x28,0x2f,0x26,0x28,0x30,0x26,0x29,0x31,0x24, 0x27,0x2e,0x21,0x23,0x2a,0x21,0x23,0x2a,0x20,0x22,0x2a,0x1e,0x20,0x26,0x3a,0x34, 0x3e,0x41,0x3b,0x46,0x91,0x99,0xaf,0x9a,0xa0,0xb5,0xab,0xb1,0xc1,0xa0,0xa5,0xb5, 0x10,0x12,0x16,0x12,0x13,0x17,0x12,0x13,0x19,0x13,0x16,0x1a,0x13,0x15,0x1a,0x12, 0x15,0x1a,0x12,0x14,0x19,0x12,0x13,0x19,0x12,0x13,0x18,0x11,0x12,0x17,0x2f,0x28, 0x35,0x5c,0x48,0x63,0x90,0x98,0xb0,0x42,0x39,0x41,0x4d,0x3e,0x4d,0x57,0x46,0x59, 0x54,0x44,0x55,0x09,0x0a,0x0d,0x0e,0x0f,0x13,0x12,0x14,0x1a,0x14,0x16,0x1c,0x34, 0x37,0x3c,0x2c,0x2f,0x34,0x2a,0x2c,0x31,0x19,0x1b,0x21,0x16,0x18,0x1e,0x1e,0x20, 0x25,0x30,0x32,0x37,0x1a,0x1b,0x1f,0x0d,0x0e,0x12,0x0a,0x0b,0x0f,0x0a,0x0a,0x0e, 0x0a,0x0a,0x0d,0x09,0x09,0x0c,0x07,0x07,0x0a,0x07,0x06,0x0a,0x06,0x06,0x09,0x06, 0x06,0x08,0x06,0x06,0x08,0x05,0x05,0x06,0x05,0x05,0x06,0x05,0x05,0x06,0x04,0x04, 0x06,0x04,0x03,0x05,0x03,0x03,0x04,0x03,0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x03, 0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5f,0x61,0x63, 0xa8,0xb0,0xc6,0x82,0x8c,0xab,0x7e,0x89,0xa9,0x82,0x8c,0xab,0x82,0x8d,0xac,0x84, 0x8e,0xad,0x84,0x90,0xad,0x84,0x8e,0xad,0x90,0x9c,0xbd,0xb0,0xc0,0xe7,0x04,0x04, 0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x04,0x04,0x06,0x1a,0x1b,0x1e,0x21,0x22,0x26,0x0a,0x0b,0x0e,0x06,0x06,0x07,0x08, 0x08,0x0a,0x06,0x05,0x06,0x03,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x03,0x02, 0x03,0x05,0x03,0x04,0x06,0x05,0x06,0x09,0x06,0x08,0x0a,0x07,0x09,0x0a,0x08,0x0a, 0x0a,0x08,0x0a,0x0f,0x0b,0x0e,0x16,0x11,0x14,0x12,0x0e,0x11,0x0e,0x0a,0x0b,0x0e, 0x0a,0x0c,0x14,0x0f,0x12,0x1c,0x16,0x1a,0x22,0x1b,0x22,0x28,0x20,0x28,0x2e,0x24, 0x2e,0x31,0x27,0x31,0x34,0x2a,0x33,0x32,0x28,0x32,0x31,0x27,0x30,0x32,0x27,0x31, 0x35,0x2a,0x35,0x36,0x2c,0x37,0x3b,0x30,0x3c,0x3e,0x34,0x41,0x45,0x39,0x48,0x47, 0x3d,0x4c,0x47,0x3e,0x4e,0x44,0x3b,0x4b,0x42,0x3a,0x4b,0x40,0x38,0x4a,0x3b,0x37, 0x4a,0x3a,0x3a,0x4e,0x3e,0x42,0x58,0x43,0x4a,0x61,0x4a,0x51,0x68,0x45,0x4b,0x62, 0x41,0x46,0x5c,0x41,0x45,0x5a,0x3e,0x42,0x56,0x3e,0x3d,0x52,0x4b,0x41,0x55,0x52, 0x45,0x56,0x57,0x4c,0x62,0x4a,0x49,0x63,0x4a,0x4a,0x66,0x4a,0x4c,0x66,0x4a,0x4c, 0x66,0x4a,0x4a,0x65,0x47,0x46,0x61,0x46,0x45,0x5f,0x42,0x40,0x56,0x41,0x3a,0x4e, 0x42,0x3a,0x4b,0x4a,0x3c,0x4c,0x5f,0x55,0x6d,0x5f,0x54,0x6e,0x5f,0x51,0x6c,0x53, 0x5c,0x7b,0x57,0x5a,0x76,0x59,0x53,0x6b,0x50,0x3e,0x52,0x5a,0x5b,0x75,0xa2,0x9f, 0xa9,0x45,0x3d,0x47,0x26,0x1f,0x28,0x2c,0x23,0x2e,0x36,0x2c,0x3b,0x39,0x30,0x44, 0x25,0x26,0x32,0x22,0x22,0x28,0xa2,0xa7,0xb9,0x81,0x8a,0xa7,0x66,0x70,0x94,0x87, 0x90,0xac,0x88,0x92,0xac,0x85,0x8e,0xa9,0x8b,0x94,0xad,0x97,0x9e,0xb3,0x98,0x9f, 0xb4,0x9b,0xa2,0xb5,0x97,0x9e,0xb2,0x9a,0xa1,0xb2,0x8f,0x97,0xab,0x83,0x8a,0xa2, 0x8c,0x94,0xaa,0x9e,0xa4,0xb3,0x63,0x69,0x78,0x61,0x67,0x79,0x71,0x76,0x87,0x66, 0x66,0x7b,0x6f,0x68,0x79,0x55,0x48,0x5b,0x56,0x48,0x5b,0x55,0x4a,0x5d,0x53,0x46, 0x58,0x55,0x46,0x57,0x55,0x46,0x57,0x53,0x44,0x56,0x55,0x47,0x5a,0x5d,0x52,0x63, 0x5b,0x50,0x63,0x53,0x47,0x5c,0x52,0x48,0x5b,0x54,0x49,0x5e,0x56,0x4d,0x61,0x56, 0x4b,0x60,0x54,0x49,0x5c,0x4e,0x40,0x51,0x3c,0x2e,0x38,0x24,0x1a,0x1f,0x5d,0x5f, 0x6c,0x65,0x68,0x77,0x67,0x68,0x77,0x68,0x6a,0x78,0x5e,0x5b,0x69,0x4d,0x43,0x50, 0x4d,0x44,0x52,0x52,0x49,0x57,0x54,0x4a,0x5a,0x53,0x4a,0x59,0x50,0x45,0x54,0x4a, 0x3e,0x4e,0x4c,0x3f,0x50,0x4b,0x41,0x52,0x4b,0x43,0x57,0x4c,0x45,0x5a,0x4e,0x46, 0x5a,0x4e,0x46,0x5a,0x46,0x45,0x5b,0x49,0x4c,0x62,0x4c,0x50,0x67,0x4c,0x51,0x6a, 0x6a,0x6f,0x81,0x7d,0x82,0x90,0x8c,0x90,0x9c,0x87,0x8b,0x97,0x7a,0x7e,0x8d,0x68, 0x6e,0x7e,0x64,0x6a,0x7a,0x5b,0x62,0x75,0x57,0x5e,0x73,0x5f,0x66,0x76,0x60,0x65, 0x74,0x62,0x67,0x73,0x64,0x69,0x74,0x62,0x66,0x72,0x65,0x69,0x75,0x65,0x6a,0x76, 0x64,0x69,0x74,0x4f,0x56,0x66,0x41,0x47,0x5d,0x46,0x4b,0x5f,0x4a,0x4e,0x5f,0x41, 0x44,0x56,0x39,0x3c,0x4e,0x3e,0x3a,0x50,0x44,0x3f,0x55,0x41,0x3f,0x56,0x42,0x47, 0x5c,0x35,0x3a,0x4c,0x34,0x38,0x49,0x64,0x60,0x75,0x5e,0x59,0x6a,0x7b,0x76,0x89, 0xac,0xaf,0xba,0x9b,0xa1,0xb0,0x8e,0x93,0xa7,0x87,0x8d,0xa3,0x81,0x7b,0x88,0x54, 0x46,0x57,0x55,0x47,0x58,0x57,0x48,0x5a,0x58,0x49,0x5a,0x58,0x48,0x5a,0x57,0x47, 0x58,0x4d,0x3f,0x4e,0x90,0x8e,0x9e,0x5e,0x68,0x8b,0x4e,0x56,0x7c,0x17,0x19,0x21, 0x18,0x1a,0x22,0x16,0x17,0x1e,0x26,0x26,0x36,0x2d,0x2c,0x45,0x2e,0x2b,0x44,0x2f, 0x2b,0x42,0x58,0x51,0x74,0x59,0x51,0x74,0x5a,0x51,0x75,0x5a,0x50,0x75,0x5c,0x51, 0x76,0x5c,0x52,0x77,0x5c,0x52,0x77,0x5a,0x52,0x76,0x55,0x50,0x77,0x51,0x4f,0x77, 0x52,0x52,0x79,0x51,0x5b,0x82,0x62,0x6e,0x8f,0x5f,0x5d,0x69,0x11,0x12,0x16,0x10, 0x12,0x16,0x0f,0x11,0x15,0x0f,0x11,0x15,0x18,0x17,0x1d,0x50,0x43,0x53,0x3e,0x34, 0x3e,0x86,0x83,0x90,0x84,0x8f,0xaa,0x65,0x6f,0x94,0x56,0x62,0x88,0x53,0x5d,0x85, 0x51,0x5c,0x82,0x4f,0x5a,0x82,0x4d,0x58,0x7f,0x4a,0x54,0x7c,0x48,0x4f,0x75,0x43, 0x4d,0x72,0x43,0x48,0x6c,0x3f,0x43,0x66,0x41,0x44,0x66,0x43,0x43,0x68,0x47,0x47, 0x6c,0x3c,0x3b,0x56,0x1c,0x1e,0x23,0x23,0x26,0x2d,0x29,0x2b,0x34,0x28,0x2a,0x33, 0x25,0x27,0x2f,0x26,0x28,0x30,0x25,0x27,0x2f,0x22,0x26,0x2d,0x22,0x24,0x2b,0x21, 0x23,0x2a,0x33,0x30,0x3a,0x3a,0x33,0x3d,0x90,0x91,0x9e,0xa5,0xab,0xbc,0xad,0xb3, 0xc3,0xa6,0xac,0xbe,0x2a,0x2c,0x33,0x12,0x13,0x18,0x14,0x16,0x1b,0x15,0x16,0x1d, 0x15,0x17,0x1d,0x15,0x17,0x1d,0x14,0x16,0x1c,0x14,0x16,0x1b,0x13,0x15,0x1a,0x12, 0x13,0x19,0x38,0x2e,0x3f,0x5d,0x4b,0x68,0xbf,0xc4,0xcf,0x34,0x29,0x31,0x51,0x42, 0x52,0x56,0x47,0x57,0x58,0x47,0x5a,0x0a,0x0a,0x0e,0x10,0x12,0x16,0x14,0x16,0x1c, 0x19,0x1a,0x22,0x1a,0x1c,0x23,0x1b,0x1e,0x25,0x1b,0x1e,0x25,0x1d,0x1e,0x26,0x1a, 0x1d,0x23,0x19,0x1b,0x22,0x20,0x22,0x28,0x1c,0x1e,0x24,0x10,0x12,0x17,0x0e,0x0f, 0x14,0x0d,0x0e,0x12,0x0b,0x0c,0x10,0x0a,0x0b,0x0f,0x09,0x09,0x0c,0x08,0x08,0x0b, 0x07,0x06,0x0a,0x07,0x06,0x0a,0x06,0x06,0x08,0x06,0x06,0x07,0x06,0x05,0x07,0x05, 0x05,0x06,0x05,0x05,0x06,0x05,0x04,0x06,0x04,0x03,0x05,0x03,0x03,0x04,0x03,0x03, 0x04,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x10,0x10,0x10,0xb8,0xbf,0xd0,0x89,0x93,0xb1,0x7d,0x88,0xa9,0x7d,0x89,0xa9, 0x7e,0x89,0xa9,0x80,0x8a,0xaa,0x81,0x8b,0xaa,0x81,0x8c,0xab,0x85,0x90,0xaf,0x9a, 0xa8,0xca,0x5c,0x63,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x06,0x06,0x09,0x26,0x28,0x2d,0x2a,0x2c,0x31,0x10,0x11,0x16, 0x04,0x03,0x04,0x0b,0x0a,0x0d,0x0e,0x0e,0x12,0x0e,0x0c,0x0e,0x07,0x06,0x06,0x05, 0x03,0x04,0x06,0x05,0x06,0x0b,0x09,0x0a,0x12,0x0e,0x11,0x15,0x10,0x14,0x15,0x10, 0x14,0x12,0x0e,0x12,0x12,0x0e,0x11,0x15,0x10,0x13,0x1d,0x16,0x1a,0x1a,0x13,0x17, 0x14,0x0e,0x12,0x17,0x11,0x15,0x20,0x18,0x1e,0x28,0x1e,0x26,0x2e,0x24,0x2d,0x32, 0x28,0x32,0x37,0x2c,0x37,0x3b,0x30,0x3b,0x3e,0x32,0x3e,0x3f,0x33,0x40,0x3e,0x32, 0x3f,0x3e,0x32,0x3f,0x3b,0x32,0x3f,0x3a,0x33,0x42,0x3c,0x35,0x45,0x3c,0x36,0x48, 0x3d,0x3a,0x4e,0x3e,0x3e,0x54,0x40,0x3f,0x55,0x3a,0x39,0x4d,0x36,0x35,0x48,0x35, 0x36,0x48,0x3a,0x40,0x52,0x4d,0x53,0x65,0x52,0x58,0x6b,0x56,0x5c,0x6f,0x50,0x57, 0x6d,0x49,0x50,0x67,0x4a,0x51,0x68,0x4a,0x52,0x69,0x48,0x4e,0x66,0x44,0x47,0x5f, 0x42,0x41,0x58,0x4e,0x45,0x5a,0x55,0x4a,0x5e,0x52,0x4b,0x63,0x4c,0x4a,0x66,0x4b, 0x4a,0x65,0x4a,0x4a,0x65,0x49,0x49,0x63,0x46,0x47,0x60,0x42,0x42,0x5a,0x41,0x40, 0x56,0x3f,0x3e,0x52,0x3e,0x3b,0x4e,0x46,0x3e,0x4e,0x5d,0x52,0x69,0x3d,0x38,0x4a, 0x40,0x35,0x47,0x5e,0x57,0x71,0x53,0x58,0x74,0x5a,0x59,0x72,0x50,0x42,0x58,0x4f, 0x50,0x6c,0x92,0x90,0x9e,0x50,0x49,0x53,0x25,0x1f,0x27,0x27,0x20,0x29,0x31,0x27, 0x36,0x39,0x30,0x43,0x2d,0x2e,0x3f,0x09,0x08,0x0a,0x8c,0x91,0xa1,0x9b,0xa2,0xb8, 0x65,0x6f,0x93,0x7e,0x88,0xa6,0x8b,0x93,0xae,0x8a,0x92,0xac,0x89,0x92,0xab,0x88, 0x91,0xa8,0x8a,0x92,0xa9,0x8c,0x94,0xa8,0x8f,0x97,0xaa,0x96,0x9d,0xb0,0x9e,0xa4, 0xb6,0x90,0x98,0xac,0x94,0x9d,0xb1,0xb2,0xb8,0xc7,0x93,0x97,0xa2,0x82,0x86,0x95, 0x79,0x7f,0x8f,0x60,0x68,0x7d,0x4d,0x4c,0x64,0x56,0x4a,0x5e,0x57,0x4b,0x60,0x55, 0x4a,0x60,0x55,0x4a,0x60,0x55,0x4a,0x5d,0x53,0x45,0x56,0x4f,0x40,0x51,0x50,0x41, 0x52,0x55,0x45,0x56,0x53,0x47,0x58,0x50,0x46,0x57,0x52,0x47,0x5c,0x56,0x4a,0x60, 0x56,0x4b,0x62,0x59,0x4d,0x62,0x5a,0x4e,0x62,0x58,0x4a,0x5d,0x4d,0x3e,0x4d,0x32, 0x26,0x2f,0x55,0x54,0x60,0x66,0x69,0x79,0x6a,0x6d,0x7c,0x6c,0x6d,0x7d,0x6f,0x6f, 0x7e,0x58,0x4e,0x5d,0x50,0x44,0x54,0x4c,0x3f,0x4e,0x49,0x3d,0x4b,0x46,0x3a,0x46, 0x48,0x3a,0x48,0x48,0x3a,0x49,0x41,0x34,0x42,0x4a,0x3b,0x4b,0x4c,0x3f,0x51,0x4c, 0x41,0x52,0x4c,0x41,0x53,0x4e,0x42,0x56,0x4e,0x43,0x56,0x4e,0x46,0x5c,0x4e,0x48, 0x5d,0x4e,0x46,0x5b,0x47,0x4c,0x62,0x5c,0x60,0x74,0x75,0x7a,0x8a,0x7e,0x82,0x91, 0x79,0x7e,0x8d,0x71,0x76,0x86,0x6e,0x73,0x82,0x63,0x69,0x7a,0x5c,0x63,0x76,0x5d, 0x63,0x76,0x62,0x67,0x77,0x65,0x6a,0x77,0x6a,0x6f,0x7b,0x71,0x76,0x80,0x71,0x75, 0x80,0x72,0x76,0x81,0x71,0x75,0x80,0x6c,0x71,0x7c,0x62,0x67,0x74,0x53,0x59,0x6a, 0x51,0x56,0x69,0x57,0x5c,0x6c,0x4c,0x51,0x61,0x3a,0x3e,0x52,0x40,0x44,0x57,0x36, 0x39,0x4b,0x2d,0x30,0x3f,0x38,0x3b,0x46,0x4e,0x4e,0x60,0x65,0x60,0x72,0x64,0x5f, 0x6d,0x7a,0x75,0x85,0xaf,0xb3,0xbb,0x9e,0xa3,0xb2,0x8b,0x92,0xa6,0x6f,0x78,0x93, 0x84,0x8a,0x9f,0x68,0x5c,0x6c,0x55,0x48,0x58,0x57,0x49,0x5a,0x59,0x49,0x5b,0x58, 0x49,0x5a,0x58,0x48,0x5a,0x53,0x45,0x55,0x63,0x59,0x66,0x6f,0x79,0x97,0x4c,0x56, 0x78,0x16,0x19,0x21,0x18,0x1a,0x22,0x16,0x19,0x20,0x25,0x24,0x33,0x2f,0x2c,0x45, 0x30,0x2d,0x43,0x30,0x2b,0x42,0x58,0x51,0x72,0x59,0x51,0x74,0x5c,0x51,0x73,0x5c, 0x51,0x74,0x5b,0x51,0x76,0x5c,0x52,0x76,0x5c,0x52,0x77,0x5a,0x51,0x76,0x5a,0x52, 0x77,0x52,0x51,0x77,0x52,0x52,0x79,0x52,0x5c,0x80,0x62,0x6c,0x8e,0x63,0x63,0x70, 0x12,0x14,0x19,0x12,0x12,0x17,0x11,0x12,0x16,0x10,0x12,0x16,0x14,0x15,0x1a,0x4c, 0x40,0x4f,0x3e,0x33,0x3e,0x86,0x83,0x8f,0x83,0x8d,0xa9,0x63,0x6f,0x93,0x58,0x63, 0x87,0x53,0x5e,0x85,0x4f,0x5a,0x82,0x4f,0x5a,0x82,0x4f,0x58,0x81,0x4a,0x54,0x7c, 0x48,0x53,0x78,0x46,0x4e,0x73,0x43,0x48,0x6d,0x41,0x44,0x69,0x42,0x44,0x67,0x45, 0x45,0x6a,0x47,0x47,0x6b,0x3e,0x3d,0x59,0x1c,0x1e,0x23,0x24,0x26,0x2e,0x27,0x2a, 0x32,0x29,0x2b,0x34,0x27,0x2a,0x32,0x25,0x27,0x30,0x22,0x26,0x2e,0x24,0x26,0x2e, 0x24,0x26,0x2e,0x23,0x26,0x2e,0x24,0x26,0x2d,0x3c,0x36,0x42,0x5b,0x57,0x61,0xc3, 0xc5,0xcf,0xa7,0xac,0xbd,0x97,0xa0,0xb4,0x66,0x6c,0x7c,0x13,0x15,0x1a,0x15,0x17, 0x1d,0x17,0x19,0x1f,0x18,0x1a,0x21,0x19,0x1b,0x22,0x18,0x1a,0x21,0x17,0x1a,0x20, 0x16,0x19,0x1f,0x13,0x15,0x1a,0x3e,0x32,0x43,0x5e,0x50,0x6f,0xcf,0xd0,0xd5,0x3a, 0x2e,0x39,0x55,0x45,0x57,0x5b,0x49,0x5c,0x5e,0x4d,0x61,0x0b,0x0d,0x11,0x13,0x15, 0x1b,0x17,0x1a,0x20,0x1a,0x1d,0x24,0x1e,0x21,0x29,0x20,0x22,0x2a,0x20,0x23,0x2b, 0x22,0x25,0x2d,0x22,0x24,0x2c,0x20,0x22,0x2a,0x1d,0x1f,0x26,0x19,0x1b,0x22,0x2b, 0x2c,0x32,0x28,0x2a,0x2f,0x10,0x12,0x16,0x0e,0x10,0x15,0x0d,0x0e,0x12,0x0b,0x0c, 0x10,0x0a,0x0a,0x0e,0x09,0x0a,0x0d,0x07,0x07,0x0a,0x07,0x07,0x0a,0x06,0x06,0x08, 0x06,0x06,0x07,0x06,0x05,0x07,0x05,0x05,0x06,0x05,0x05,0x06,0x04,0x04,0x05,0x03, 0x03,0x04,0x03,0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02, 0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x9e,0xa9,0x93,0x9c,0xb7,0x7c,0x88, 0xa8,0x7a,0x85,0xa5,0x7d,0x88,0xa8,0x80,0x8a,0xaa,0x80,0x8b,0xaa,0x80,0x8a,0xaa, 0x83,0x8e,0xac,0x8a,0x94,0xb5,0xb3,0xc1,0xee,0x03,0x03,0x03,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x0a,0x2d,0x2f,0x35,0x3f,0x42, 0x48,0x27,0x2a,0x30,0x0f,0x0e,0x12,0x0f,0x0d,0x10,0x18,0x18,0x21,0x1c,0x1e,0x27, 0x16,0x12,0x17,0x0a,0x08,0x0a,0x0f,0x0c,0x0e,0x1a,0x14,0x19,0x25,0x1e,0x25,0x28, 0x20,0x28,0x27,0x1f,0x26,0x23,0x1c,0x22,0x20,0x1a,0x20,0x1b,0x16,0x1a,0x1e,0x16, 0x1c,0x1c,0x15,0x1a,0x1c,0x16,0x1a,0x27,0x1e,0x26,0x33,0x29,0x32,0x39,0x2e,0x39, 0x3a,0x2f,0x3a,0x3d,0x32,0x3e,0x40,0x34,0x42,0x44,0x38,0x46,0x46,0x3b,0x4a,0x45, 0x3b,0x4b,0x40,0x38,0x49,0x38,0x34,0x45,0x33,0x32,0x45,0x37,0x37,0x4a,0x39,0x39, 0x4e,0x3d,0x42,0x58,0x4f,0x55,0x6a,0x4f,0x56,0x6b,0x49,0x51,0x68,0x46,0x4e,0x62, 0x3e,0x43,0x57,0x4a,0x51,0x62,0x5e,0x63,0x73,0x64,0x6a,0x7a,0x60,0x66,0x76,0x5b, 0x61,0x72,0x59,0x5f,0x71,0x53,0x5a,0x6e,0x4e,0x56,0x6c,0x50,0x58,0x6f,0x4e,0x56, 0x6e,0x49,0x50,0x69,0x46,0x49,0x62,0x46,0x46,0x5f,0x45,0x44,0x5d,0x50,0x49,0x61, 0x56,0x4e,0x67,0x50,0x4d,0x66,0x4a,0x49,0x63,0x45,0x44,0x5d,0x43,0x44,0x5c,0x42, 0x43,0x5b,0x43,0x42,0x5a,0x43,0x42,0x5a,0x3e,0x3d,0x53,0x40,0x3c,0x4f,0x54,0x4a, 0x60,0x41,0x3c,0x50,0x34,0x2d,0x3e,0x4c,0x46,0x5e,0x5e,0x5c,0x79,0x55,0x58,0x74, 0x4b,0x42,0x5b,0x4b,0x44,0x61,0x84,0x84,0x95,0x5f,0x58,0x63,0x23,0x1d,0x26,0x24, 0x1d,0x27,0x2c,0x23,0x30,0x38,0x2f,0x41,0x32,0x2f,0x43,0x08,0x07,0x0a,0x52,0x54, 0x5f,0xa8,0xad,0xbf,0x74,0x7d,0x9e,0x6b,0x77,0x98,0x87,0x92,0xad,0x7d,0x87,0xa1, 0x7e,0x87,0xa1,0x81,0x89,0xa2,0x81,0x85,0x9e,0x7e,0x82,0x9a,0x7d,0x84,0x9c,0x8a, 0x91,0xa4,0x94,0x9a,0xad,0x8b,0x93,0xa7,0x8b,0x93,0xa8,0x9f,0xa6,0xb8,0x9d,0xa2, 0xae,0x87,0x8b,0x97,0x85,0x8a,0x97,0x72,0x78,0x8a,0x53,0x5b,0x72,0x4e,0x4b,0x65, 0x54,0x4d,0x65,0x4e,0x49,0x61,0x4a,0x46,0x5e,0x4c,0x46,0x5d,0x53,0x49,0x5e,0x55, 0x49,0x5c,0x55,0x46,0x58,0x50,0x41,0x52,0x52,0x42,0x53,0x55,0x46,0x58,0x53,0x4a, 0x5d,0x52,0x47,0x5e,0x54,0x48,0x5e,0x55,0x4a,0x5e,0x59,0x4c,0x5f,0x59,0x4a,0x5e, 0x50,0x43,0x54,0x3d,0x30,0x3c,0x41,0x3c,0x46,0x6c,0x70,0x81,0x71,0x75,0x85,0x71, 0x72,0x82,0x5e,0x5b,0x70,0x5a,0x4b,0x5d,0x56,0x46,0x5a,0x55,0x45,0x57,0x4f,0x41, 0x50,0x51,0x41,0x52,0x50,0x42,0x52,0x54,0x46,0x58,0x56,0x49,0x5d,0x56,0x49,0x5d, 0x5b,0x4e,0x62,0x58,0x49,0x5d,0x56,0x46,0x58,0x51,0x42,0x54,0x4e,0x41,0x53,0x4d, 0x40,0x52,0x4d,0x41,0x54,0x50,0x44,0x56,0x4e,0x46,0x5c,0x47,0x45,0x5c,0x50,0x54, 0x69,0x63,0x66,0x7a,0x71,0x76,0x86,0x78,0x7d,0x8c,0x71,0x76,0x86,0x6b,0x72,0x82, 0x6e,0x72,0x83,0x5f,0x66,0x79,0x5e,0x65,0x77,0x65,0x6a,0x79,0x6a,0x6e,0x7b,0x74, 0x78,0x82,0x78,0x7c,0x87,0x78,0x7c,0x87,0x76,0x7a,0x85,0x76,0x7a,0x85,0x7d,0x81, 0x8c,0x6f,0x73,0x7f,0x5f,0x65,0x72,0x5c,0x62,0x72,0x53,0x58,0x6a,0x52,0x57,0x68, 0x56,0x5c,0x6c,0x56,0x5a,0x66,0x3a,0x3d,0x46,0x2c,0x2d,0x39,0x5f,0x59,0x69,0x5b, 0x55,0x63,0x51,0x4c,0x5a,0x6e,0x69,0x76,0xb1,0xb4,0xbd,0x9d,0xa3,0xb2,0x89,0x8f, 0xa4,0x68,0x73,0x8e,0x5d,0x66,0x86,0x87,0x8a,0x9d,0x59,0x4b,0x5d,0x57,0x49,0x5b, 0x57,0x4a,0x5b,0x58,0x4a,0x5b,0x59,0x4a,0x5b,0x59,0x4a,0x5d,0x53,0x45,0x58,0x7e, 0x81,0x97,0x4d,0x56,0x77,0x19,0x1b,0x24,0x19,0x1b,0x24,0x17,0x1a,0x21,0x25,0x25, 0x33,0x2f,0x2c,0x45,0x2f,0x2e,0x44,0x30,0x2c,0x42,0x57,0x4f,0x73,0x59,0x51,0x73, 0x5b,0x51,0x73,0x5b,0x51,0x75,0x5b,0x52,0x76,0x5b,0x52,0x77,0x5c,0x52,0x77,0x5a, 0x51,0x76,0x5a,0x52,0x76,0x52,0x51,0x77,0x51,0x51,0x78,0x53,0x5d,0x81,0x62,0x6c, 0x8f,0x60,0x60,0x6f,0x13,0x15,0x1a,0x13,0x15,0x1a,0x11,0x12,0x16,0x11,0x12,0x16, 0x10,0x12,0x16,0x4a,0x3d,0x4b,0x3d,0x32,0x3e,0x84,0x80,0x8b,0x81,0x89,0xa6,0x63, 0x6e,0x92,0x58,0x64,0x88,0x53,0x5e,0x85,0x51,0x5d,0x82,0x4f,0x5a,0x82,0x4e,0x57, 0x80,0x4c,0x56,0x7e,0x48,0x53,0x79,0x46,0x4e,0x73,0x42,0x49,0x6d,0x41,0x45,0x6a, 0x41,0x45,0x66,0x44,0x44,0x69,0x46,0x46,0x69,0x3e,0x3f,0x5a,0x2f,0x30,0x37,0x3b, 0x3d,0x44,0x33,0x36,0x41,0x28,0x2c,0x37,0x24,0x27,0x32,0x24,0x27,0x32,0x26,0x29, 0x32,0x27,0x2a,0x33,0x27,0x2a,0x32,0x26,0x29,0x31,0x25,0x27,0x2f,0x3d,0x39,0x45, 0x3c,0x36,0x41,0xbc,0xbe,0xc4,0xb8,0xbc,0xc7,0xac,0xb2,0xc1,0x85,0x8d,0xa5,0x17, 0x19,0x1e,0x18,0x1a,0x20,0x1a,0x1b,0x22,0x1b,0x1e,0x26,0x1e,0x21,0x28,0x1e,0x20, 0x27,0x1d,0x1f,0x27,0x1b,0x1e,0x26,0x16,0x17,0x1e,0x42,0x35,0x49,0x50,0x4d,0x73, 0xc3,0xc3,0xc5,0x3d,0x30,0x3c,0x58,0x48,0x59,0x5b,0x4a,0x5d,0x62,0x52,0x66,0x0e, 0x0f,0x13,0x16,0x18,0x1e,0x1a,0x1d,0x24,0x1e,0x21,0x28,0x21,0x23,0x2c,0x22,0x25, 0x2e,0x26,0x29,0x32,0x27,0x2a,0x33,0x28,0x2b,0x34,0x27,0x2a,0x33,0x22,0x26,0x2e, 0x20,0x23,0x2b,0x1c,0x1e,0x26,0x18,0x1a,0x21,0x16,0x19,0x1f,0x14,0x16,0x1c,0x12, 0x13,0x19,0x0e,0x10,0x15,0x0d,0x0e,0x13,0x0b,0x0b,0x0f,0x09,0x09,0x0c,0x08,0x08, 0x0b,0x07,0x07,0x0a,0x06,0x06,0x08,0x06,0x06,0x07,0x05,0x05,0x06,0x05,0x05,0x06, 0x05,0x04,0x06,0x04,0x04,0x05,0x03,0x03,0x04,0x03,0x03,0x04,0x02,0x02,0x03,0x02, 0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x36,0x37,0x3a,0xa2, 0xaa,0xc1,0x7e,0x8a,0xa9,0x75,0x81,0xa2,0x79,0x84,0xa5,0x7b,0x86,0xa7,0x7d,0x88, 0xa8,0x7d,0x89,0xa9,0x7d,0x89,0xa8,0x7e,0x8b,0xaa,0x91,0x9e,0xc3,0x4f,0x56,0x5e, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02, 0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x07,0x09,0x1b, 0x1d,0x23,0x31,0x34,0x3b,0x2a,0x2c,0x35,0x16,0x13,0x19,0x0e,0x0b,0x0e,0x1e,0x1a, 0x22,0x25,0x26,0x34,0x23,0x22,0x2f,0x1d,0x17,0x1e,0x1a,0x15,0x1a,0x2a,0x21,0x2a, 0x30,0x27,0x31,0x34,0x2a,0x35,0x33,0x2a,0x33,0x34,0x2a,0x34,0x33,0x2a,0x34,0x2f, 0x26,0x31,0x2c,0x23,0x2d,0x2f,0x27,0x31,0x35,0x2c,0x36,0x3c,0x32,0x3e,0x47,0x3c, 0x4b,0x49,0x3e,0x4f,0x47,0x3e,0x4f,0x44,0x3b,0x4b,0x43,0x3b,0x4b,0x44,0x3c,0x4e, 0x42,0x3c,0x4e,0x40,0x3c,0x4f,0x3a,0x39,0x4d,0x37,0x39,0x4c,0x39,0x3e,0x52,0x3c, 0x41,0x56,0x3f,0x40,0x57,0x4a,0x52,0x66,0x5d,0x63,0x77,0x5d,0x63,0x78,0x5a,0x62, 0x78,0x59,0x61,0x75,0x53,0x5a,0x6e,0x67,0x6d,0x7f,0x73,0x7a,0x8a,0x74,0x7a,0x8b, 0x6d,0x73,0x86,0x68,0x6d,0x7e,0x66,0x6b,0x7c,0x5f,0x66,0x77,0x5d,0x64,0x77,0x5c, 0x63,0x79,0x56,0x5e,0x75,0x5e,0x66,0x7b,0x5d,0x64,0x78,0x5a,0x61,0x76,0x51,0x58, 0x6e,0x48,0x4a,0x64,0x50,0x4c,0x66,0x58,0x50,0x68,0x56,0x4e,0x67,0x4b,0x48,0x60, 0x42,0x42,0x5a,0x42,0x44,0x5b,0x43,0x43,0x5a,0x43,0x43,0x5b,0x41,0x42,0x59,0x3d, 0x3b,0x51,0x4c,0x44,0x59,0x51,0x4b,0x62,0x34,0x2f,0x41,0x44,0x3c,0x53,0x57,0x52, 0x6a,0x56,0x5e,0x7a,0x50,0x48,0x64,0x53,0x46,0x5f,0x77,0x79,0x8e,0x85,0x80,0x8b, 0x21,0x1c,0x24,0x21,0x1b,0x25,0x26,0x20,0x2b,0x36,0x2a,0x3b,0x31,0x2f,0x43,0x12, 0x12,0x16,0x20,0x22,0x25,0xaa,0xb0,0xc4,0x8c,0x95,0xb0,0x5d,0x6a,0x8e,0x86,0x8f, 0xab,0x78,0x80,0x9a,0x71,0x76,0x90,0x6b,0x70,0x84,0x63,0x66,0x78,0x61,0x63,0x75, 0x65,0x67,0x78,0x79,0x79,0x8f,0x73,0x78,0x90,0x69,0x70,0x8b,0x56,0x5d,0x7d,0x5b, 0x65,0x83,0x81,0x88,0x9b,0x5d,0x62,0x70,0x6e,0x74,0x82,0x75,0x7a,0x88,0x67,0x6d, 0x80,0x4b,0x52,0x6c,0x4a,0x49,0x63,0x48,0x46,0x60,0x46,0x44,0x5d,0x46,0x44,0x5b, 0x4c,0x46,0x5e,0x52,0x49,0x5e,0x55,0x49,0x5d,0x59,0x49,0x5b,0x55,0x45,0x57,0x52, 0x42,0x52,0x56,0x46,0x59,0x55,0x48,0x5c,0x52,0x46,0x5a,0x52,0x46,0x59,0x54,0x46, 0x57,0x56,0x48,0x5a,0x50,0x45,0x57,0x42,0x37,0x44,0x3a,0x30,0x3a,0x6d,0x6f,0x80, 0x6e,0x71,0x81,0x71,0x72,0x83,0x62,0x60,0x76,0x58,0x4b,0x5f,0x56,0x47,0x5a,0x58, 0x48,0x5a,0x5b,0x4b,0x5f,0x53,0x47,0x59,0x54,0x4a,0x5e,0x5d,0x52,0x6a,0x56,0x4c, 0x63,0x57,0x4c,0x62,0x5f,0x53,0x6b,0x5e,0x51,0x67,0x5c,0x4e,0x65,0x5a,0x4e,0x62, 0x59,0x4b,0x5e,0x56,0x46,0x58,0x4f,0x40,0x51,0x4c,0x3e,0x4d,0x4f,0x44,0x56,0x4e, 0x47,0x5d,0x46,0x45,0x5b,0x48,0x48,0x61,0x5a,0x5f,0x72,0x71,0x76,0x85,0x6e,0x75, 0x84,0x6c,0x72,0x82,0x70,0x76,0x86,0x6a,0x6f,0x80,0x60,0x67,0x7a,0x61,0x67,0x7a, 0x6a,0x6e,0x7b,0x6f,0x73,0x7e,0x76,0x7a,0x85,0x7a,0x7e,0x88,0x76,0x7a,0x85,0x76, 0x7a,0x85,0x82,0x86,0x91,0x7e,0x82,0x8e,0x72,0x76,0x82,0x6e,0x72,0x7f,0x6a,0x6e, 0x7a,0x61,0x66,0x73,0x60,0x65,0x74,0x54,0x5a,0x6d,0x54,0x57,0x62,0x5c,0x5a,0x68, 0x54,0x4e,0x5e,0x5f,0x5a,0x67,0x56,0x51,0x5e,0x6b,0x67,0x76,0xb8,0xba,0xc3,0xa9, 0xae,0xba,0x8a,0x91,0xa4,0x61,0x6b,0x89,0x56,0x62,0x82,0x58,0x62,0x84,0x87,0x84, 0x93,0x57,0x4a,0x5b,0x57,0x4a,0x5c,0x58,0x4a,0x5c,0x57,0x4a,0x5c,0x59,0x4b,0x5f, 0x57,0x4b,0x5f,0x6f,0x69,0x7c,0x55,0x5d,0x7b,0x1b,0x1e,0x27,0x19,0x1b,0x24,0x18, 0x1a,0x22,0x24,0x25,0x33,0x30,0x2d,0x45,0x30,0x2e,0x45,0x30,0x2c,0x43,0x55,0x4e, 0x71,0x5b,0x51,0x72,0x5b,0x51,0x72,0x5c,0x51,0x74,0x5b,0x52,0x76,0x5b,0x52,0x77, 0x5b,0x52,0x77,0x5a,0x52,0x77,0x5a,0x51,0x76,0x53,0x51,0x77,0x52,0x52,0x79,0x53, 0x5d,0x81,0x62,0x6d,0x8f,0x6a,0x6a,0x79,0x16,0x17,0x1d,0x15,0x16,0x1b,0x13,0x15, 0x1a,0x12,0x14,0x19,0x12,0x12,0x17,0x47,0x3b,0x48,0x3b,0x31,0x3c,0x85,0x81,0x8b, 0x79,0x83,0xa1,0x62,0x6e,0x91,0x59,0x65,0x8b,0x53,0x5e,0x85,0x51,0x5d,0x84,0x4f, 0x5b,0x83,0x4e,0x59,0x82,0x4d,0x57,0x7e,0x49,0x54,0x7a,0x45,0x4d,0x74,0x45,0x4b, 0x70,0x43,0x45,0x6a,0x43,0x44,0x66,0x43,0x44,0x69,0x47,0x47,0x6a,0x3d,0x3d,0x5a, 0x45,0x46,0x4b,0x38,0x3a,0x44,0x41,0x41,0x4d,0x43,0x42,0x51,0x2b,0x2a,0x3a,0x2a, 0x2a,0x39,0x2f,0x30,0x40,0x4f,0x52,0x5b,0x2c,0x30,0x39,0x2a,0x2d,0x36,0x27,0x2a, 0x32,0x3a,0x37,0x42,0x3d,0x37,0x43,0x7c,0x7a,0x85,0xba,0xbf,0xc9,0xb0,0xb6,0xc3, 0x72,0x7c,0x99,0x20,0x23,0x2b,0x1a,0x1c,0x23,0x1e,0x21,0x29,0x22,0x24,0x2c,0x24, 0x27,0x2f,0x24,0x27,0x30,0x23,0x26,0x2f,0x20,0x23,0x2b,0x19,0x1b,0x22,0x46,0x37, 0x4c,0x4d,0x52,0x79,0xa8,0xa6,0xaa,0x41,0x34,0x40,0x5d,0x4c,0x60,0x5d,0x4d,0x61, 0x65,0x56,0x6b,0x12,0x14,0x1a,0x1d,0x1f,0x27,0x20,0x23,0x2b,0x23,0x26,0x2f,0x26, 0x29,0x32,0x27,0x2a,0x33,0x2a,0x2e,0x38,0x2b,0x2f,0x39,0x2e,0x31,0x3b,0x2a,0x2e, 0x37,0x2a,0x2d,0x37,0x27,0x2a,0x33,0x23,0x26,0x2e,0x1f,0x22,0x29,0x1d,0x1f,0x27, 0x1c,0x1e,0x26,0x19,0x1a,0x22,0x14,0x16,0x1b,0x11,0x12,0x18,0x0e,0x10,0x15,0x0c, 0x0d,0x12,0x0a,0x0a,0x0e,0x09,0x09,0x0b,0x07,0x06,0x09,0x06,0x06,0x08,0x06,0x06, 0x07,0x05,0x05,0x06,0x05,0x05,0x06,0x04,0x04,0x05,0x04,0x03,0x05,0x03,0x03,0x04, 0x03,0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x05,0x05,0x05,0xac,0xb3,0xc8,0x88,0x92,0xaf,0x74,0x80,0xa2,0x75,0x81,0xa3,0x7a, 0x85,0xa5,0x7a,0x85,0xa7,0x7b,0x86,0xa7,0x7b,0x85,0xa7,0x7c,0x88,0xa8,0x80,0x8b, 0xae,0xab,0xba,0xe8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02, 0x05,0x03,0x04,0x12,0x0e,0x12,0x16,0x16,0x1d,0x1c,0x19,0x20,0x17,0x12,0x17,0x0f, 0x0c,0x0e,0x17,0x12,0x16,0x26,0x22,0x2a,0x2a,0x29,0x37,0x2e,0x28,0x34,0x2d,0x26, 0x2e,0x31,0x28,0x32,0x34,0x2b,0x36,0x36,0x2d,0x39,0x3a,0x30,0x3d,0x3e,0x33,0x41, 0x40,0x35,0x42,0x3a,0x32,0x3f,0x39,0x32,0x42,0x34,0x33,0x46,0x34,0x33,0x46,0x38, 0x36,0x4a,0x3f,0x3e,0x54,0x42,0x40,0x56,0x42,0x3f,0x56,0x42,0x3e,0x52,0x42,0x3c, 0x50,0x41,0x3d,0x51,0x3e,0x3d,0x53,0x3e,0x3e,0x54,0x41,0x46,0x5c,0x45,0x4b,0x5e, 0x50,0x56,0x68,0x52,0x58,0x6b,0x4c,0x52,0x67,0x4c,0x52,0x67,0x59,0x5f,0x72,0x61, 0x68,0x7a,0x64,0x6a,0x7e,0x5e,0x65,0x79,0x61,0x67,0x7c,0x6e,0x75,0x88,0x75,0x7a, 0x8d,0x70,0x76,0x8a,0x6c,0x72,0x86,0x6a,0x71,0x84,0x6e,0x74,0x85,0x6b,0x72,0x82, 0x67,0x6d,0x7f,0x66,0x6d,0x80,0x65,0x6b,0x7f,0x72,0x78,0x89,0x76,0x7b,0x8b,0x71, 0x77,0x87,0x64,0x6a,0x7d,0x54,0x5a,0x70,0x4a,0x4c,0x67,0x4e,0x4d,0x68,0x56,0x4e, 0x68,0x55,0x4d,0x66,0x46,0x46,0x5f,0x41,0x47,0x5e,0x42,0x46,0x5e,0x44,0x48,0x60, 0x46,0x4c,0x63,0x40,0x43,0x5a,0x47,0x42,0x57,0x51,0x4c,0x63,0x3a,0x34,0x47,0x3a, 0x33,0x45,0x43,0x41,0x56,0x54,0x55,0x70,0x46,0x4a,0x69,0x52,0x43,0x5a,0x6b,0x6f, 0x87,0xa8,0xa7,0xb0,0x23,0x1d,0x25,0x1d,0x18,0x1f,0x22,0x1a,0x24,0x30,0x25,0x35, 0x33,0x2e,0x43,0x2a,0x2b,0x35,0x04,0x04,0x05,0x8f,0x94,0xa4,0xa4,0xac,0xc1,0x61, 0x6b,0x91,0x75,0x7f,0x9f,0x85,0x8f,0xaa,0x7e,0x85,0x9f,0x6e,0x73,0x88,0x64,0x69, 0x7b,0x5e,0x61,0x74,0x59,0x5c,0x6c,0x58,0x5a,0x6a,0x55,0x56,0x67,0x4d,0x4d,0x5c, 0x38,0x38,0x49,0x3c,0x3a,0x4b,0x64,0x5c,0x69,0x4f,0x46,0x55,0x38,0x3d,0x4e,0x5c, 0x61,0x6e,0x66,0x6b,0x7b,0x5a,0x61,0x75,0x47,0x47,0x61,0x46,0x45,0x5e,0x45,0x44, 0x5d,0x45,0x43,0x5b,0x45,0x44,0x5d,0x4a,0x45,0x5d,0x50,0x47,0x5c,0x55,0x4a,0x5e, 0x58,0x4b,0x5e,0x5a,0x4a,0x5e,0x52,0x42,0x53,0x51,0x42,0x52,0x53,0x43,0x54,0x53, 0x45,0x56,0x52,0x44,0x56,0x52,0x44,0x56,0x51,0x45,0x58,0x44,0x38,0x47,0x33,0x2a, 0x34,0x73,0x77,0x87,0x77,0x7c,0x8d,0x77,0x79,0x8a,0x6b,0x6b,0x7f,0x51,0x46,0x5b, 0x50,0x43,0x55,0x53,0x44,0x56,0x58,0x4a,0x5d,0x4f,0x44,0x58,0x57,0x4c,0x62,0x58, 0x4e,0x65,0x54,0x4a,0x61,0x4f,0x46,0x5b,0x5e,0x53,0x6c,0x5d,0x52,0x6a,0x59,0x51, 0x69,0x58,0x50,0x68,0x58,0x50,0x68,0x59,0x4f,0x66,0x59,0x4e,0x63,0x56,0x47,0x5a, 0x4e,0x40,0x52,0x4e,0x44,0x58,0x51,0x47,0x5d,0x51,0x48,0x5e,0x48,0x48,0x62,0x5a, 0x5f,0x72,0x66,0x6a,0x7b,0x69,0x6e,0x7f,0x6a,0x70,0x81,0x6a,0x71,0x82,0x6d,0x73, 0x84,0x69,0x6f,0x81,0x69,0x6e,0x7f,0x72,0x76,0x82,0x71,0x75,0x80,0x74,0x79,0x83, 0x77,0x7b,0x86,0x78,0x7d,0x88,0x7e,0x82,0x8e,0x83,0x87,0x92,0x7d,0x82,0x8e,0x79, 0x7d,0x89,0x71,0x75,0x82,0x65,0x69,0x76,0x60,0x65,0x71,0x4f,0x56,0x66,0x4c,0x51, 0x63,0x70,0x6b,0x7c,0x66,0x62,0x6f,0x60,0x5c,0x6a,0x61,0x5e,0x6b,0x7a,0x77,0x84, 0xbb,0xbe,0xc7,0xb0,0xb4,0xc0,0x8c,0x93,0xa7,0x5f,0x69,0x87,0x51,0x5c,0x7e,0x4e, 0x52,0x76,0x62,0x6e,0x8c,0x68,0x5e,0x6f,0x57,0x4a,0x5c,0x57,0x4a,0x5b,0x57,0x4a, 0x5c,0x57,0x4b,0x5f,0x58,0x4d,0x62,0x5b,0x52,0x67,0x5c,0x60,0x7a,0x1c,0x1e,0x28, 0x1a,0x1d,0x26,0x17,0x1a,0x22,0x25,0x25,0x32,0x30,0x2e,0x45,0x30,0x2e,0x45,0x31, 0x2d,0x43,0x56,0x4f,0x70,0x5a,0x50,0x71,0x5b,0x51,0x73,0x5c,0x51,0x73,0x5b,0x52, 0x76,0x5b,0x52,0x76,0x5c,0x52,0x76,0x5a,0x51,0x76,0x58,0x51,0x76,0x53,0x51,0x77, 0x52,0x52,0x79,0x53,0x5a,0x80,0x60,0x6b,0x8d,0x6b,0x6b,0x79,0x16,0x19,0x1e,0x16, 0x18,0x1d,0x15,0x16,0x1b,0x14,0x16,0x1a,0x12,0x13,0x18,0x44,0x3a,0x48,0x3b,0x31, 0x3b,0x83,0x7f,0x87,0x7a,0x83,0xa2,0x62,0x6d,0x91,0x59,0x64,0x88,0x53,0x60,0x86, 0x51,0x5d,0x84,0x50,0x5b,0x83,0x4f,0x5a,0x82,0x4e,0x59,0x7f,0x4a,0x54,0x7b,0x47, 0x52,0x77,0x44,0x4c,0x71,0x43,0x46,0x6c,0x42,0x44,0x69,0x44,0x44,0x69,0x45,0x45, 0x68,0x3b,0x3c,0x59,0x16,0x18,0x1f,0x2d,0x2d,0x38,0x48,0x45,0x51,0x52,0x4d,0x5b, 0x3a,0x34,0x44,0x37,0x34,0x43,0x49,0x48,0x57,0x46,0x4a,0x56,0x40,0x42,0x4c,0x2a, 0x2d,0x36,0x29,0x2c,0x35,0x31,0x31,0x3b,0x3f,0x39,0x46,0x4a,0x47,0x53,0xbf,0xc2, 0xca,0x96,0x9d,0xb1,0x5b,0x67,0x89,0x2a,0x2e,0x3c,0x1e,0x21,0x28,0x23,0x26,0x2e, 0x26,0x29,0x32,0x29,0x2c,0x36,0x2b,0x2e,0x37,0x29,0x2c,0x36,0x26,0x2a,0x33,0x1b, 0x1e,0x26,0x4b,0x3a,0x51,0x56,0x61,0x84,0x86,0x82,0x88,0x47,0x3a,0x48,0x61,0x50, 0x65,0x60,0x50,0x65,0x6a,0x5a,0x71,0x18,0x1a,0x21,0x24,0x27,0x31,0x2b,0x2f,0x3a, 0x2e,0x32,0x3d,0x2a,0x2d,0x38,0x2b,0x2e,0x39,0x2e,0x32,0x3d,0x32,0x35,0x40,0x33, 0x36,0x42,0x30,0x34,0x3e,0x2f,0x32,0x3e,0x2a,0x2e,0x38,0x29,0x2c,0x36,0x26,0x29, 0x32,0x25,0x28,0x31,0x22,0x25,0x2e,0x1e,0x20,0x28,0x19,0x1b,0x22,0x16,0x18,0x1e, 0x13,0x16,0x1b,0x10,0x12,0x17,0x0c,0x0e,0x12,0x0a,0x0b,0x0f,0x09,0x09,0x0b,0x07, 0x06,0x09,0x06,0x06,0x08,0x06,0x05,0x07,0x05,0x05,0x06,0x05,0x04,0x06,0x04,0x04, 0x05,0x04,0x04,0x05,0x03,0x03,0x04,0x03,0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x03, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x77,0x82,0x95,0x9f,0xb9,0x79,0x84,0xa5, 0x72,0x7d,0xa0,0x73,0x7e,0xa1,0x76,0x82,0xa3,0x77,0x83,0xa4,0x79,0x84,0xa5,0x79, 0x83,0xa4,0x7a,0x85,0xa7,0x8b,0x98,0xbe,0x40,0x45,0x4e,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x03, 0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00, 0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02, 0x03,0x05,0x03,0x04,0x06,0x04,0x05,0x08,0x06,0x07,0x0b,0x09,0x0a,0x10,0x0d,0x0f, 0x16,0x12,0x16,0x1c,0x16,0x1c,0x21,0x1a,0x21,0x26,0x1e,0x26,0x2c,0x25,0x2f,0x31, 0x2b,0x39,0x2f,0x2e,0x3f,0x31,0x30,0x42,0x32,0x31,0x42,0x35,0x31,0x40,0x39,0x33, 0x45,0x3b,0x34,0x44,0x3d,0x36,0x46,0x39,0x36,0x47,0x3a,0x3a,0x4e,0x3e,0x43,0x58, 0x3f,0x45,0x5a,0x3e,0x44,0x59,0x3e,0x44,0x5a,0x40,0x40,0x57,0x40,0x3e,0x56,0x42, 0x42,0x5a,0x43,0x46,0x5e,0x42,0x43,0x5b,0x40,0x44,0x5a,0x46,0x4e,0x62,0x57,0x5d, 0x6f,0x60,0x65,0x76,0x68,0x6e,0x7e,0x66,0x6b,0x7e,0x5d,0x63,0x75,0x52,0x59,0x6c, 0x57,0x5e,0x71,0x5e,0x64,0x78,0x5e,0x66,0x7a,0x56,0x5e,0x73,0x4f,0x57,0x70,0x56, 0x5f,0x77,0x57,0x5f,0x79,0x52,0x5a,0x75,0x52,0x5a,0x74,0x55,0x5b,0x74,0x5f,0x66, 0x7a,0x69,0x6e,0x7f,0x6e,0x72,0x82,0x71,0x76,0x86,0x70,0x76,0x86,0x76,0x7b,0x8a, 0x7a,0x7f,0x8e,0x7a,0x7e,0x8e,0x6e,0x73,0x85,0x5e,0x66,0x79,0x52,0x5a,0x71,0x4a, 0x50,0x6a,0x4c,0x4c,0x67,0x4c,0x4c,0x67,0x4b,0x53,0x6b,0x4e,0x55,0x6a,0x4a,0x52, 0x69,0x48,0x4f,0x67,0x4a,0x51,0x69,0x4a,0x50,0x65,0x3d,0x3d,0x54,0x51,0x4d,0x65, 0x42,0x3f,0x55,0x3b,0x32,0x44,0x3e,0x3b,0x4e,0x55,0x52,0x69,0x49,0x4d,0x68,0x51, 0x40,0x57,0x60,0x66,0x81,0xa9,0xa9,0xb4,0x42,0x3a,0x42,0x1c,0x15,0x1d,0x1e,0x17, 0x20,0x2b,0x20,0x2d,0x37,0x2e,0x42,0x37,0x38,0x46,0x04,0x03,0x04,0x51,0x53,0x5d, 0xab,0xb2,0xc4,0x84,0x8d,0xab,0x61,0x6e,0x91,0x82,0x8c,0xa9,0x7f,0x88,0xa4,0x7b, 0x81,0x9b,0x78,0x7e,0x95,0x75,0x79,0x8f,0x70,0x73,0x89,0x66,0x68,0x7e,0x5a,0x5c, 0x6d,0x48,0x49,0x58,0x38,0x39,0x47,0x2d,0x2d,0x3d,0x3b,0x3a,0x44,0x3f,0x38,0x3e, 0x34,0x2e,0x3a,0x30,0x35,0x43,0x43,0x4a,0x5a,0x42,0x49,0x5f,0x43,0x45,0x5d,0x46, 0x46,0x5f,0x46,0x45,0x5e,0x46,0x44,0x5d,0x45,0x44,0x5d,0x45,0x43,0x5b,0x46,0x43, 0x5a,0x4f,0x46,0x5c,0x54,0x4a,0x5e,0x56,0x4a,0x5e,0x5a,0x4a,0x5d,0x50,0x42,0x50, 0x51,0x41,0x51,0x56,0x46,0x58,0x56,0x48,0x5a,0x52,0x46,0x59,0x4f,0x44,0x56,0x44, 0x3a,0x4a,0x34,0x29,0x33,0x73,0x76,0x87,0x7a,0x7d,0x8e,0x7b,0x7e,0x8e,0x74,0x74, 0x87,0x4d,0x44,0x5a,0x4e,0x41,0x52,0x4b,0x3f,0x50,0x4e,0x42,0x52,0x50,0x45,0x58, 0x52,0x48,0x5e,0x55,0x4a,0x61,0x57,0x4d,0x63,0x51,0x47,0x5d,0x51,0x48,0x5d,0x4d, 0x46,0x5a,0x50,0x49,0x60,0x56,0x4e,0x66,0x59,0x50,0x6a,0x5a,0x51,0x6a,0x59,0x51, 0x69,0x59,0x4f,0x66,0x50,0x42,0x52,0x3f,0x35,0x42,0x3d,0x33,0x42,0x4f,0x44,0x59, 0x53,0x49,0x5c,0x48,0x46,0x5e,0x56,0x5b,0x6f,0x64,0x69,0x7a,0x73,0x78,0x88,0x78, 0x7d,0x8d,0x78,0x7e,0x8d,0x75,0x7a,0x8a,0x6e,0x74,0x84,0x7f,0x83,0x8e,0x7b,0x7f, 0x8a,0x77,0x7b,0x87,0x72,0x76,0x85,0x79,0x7e,0x8b,0x7c,0x81,0x8e,0x7a,0x7f,0x8e, 0x80,0x85,0x91,0x7a,0x7e,0x8b,0x6c,0x70,0x7e,0x5a,0x5e,0x6b,0x5a,0x5f,0x6b,0x46, 0x4c,0x5f,0x55,0x53,0x6e,0x51,0x4e,0x65,0x5c,0x5a,0x6b,0x71,0x6e,0x7c,0x68,0x66, 0x74,0x85,0x84,0x91,0xbe,0xc2,0xcb,0xaf,0xb3,0xc0,0x8c,0x92,0xa6,0x5a,0x63,0x81, 0x4f,0x57,0x7b,0x4e,0x51,0x75,0x50,0x53,0x77,0x78,0x7c,0x90,0x57,0x4a,0x5d,0x56, 0x49,0x5b,0x56,0x49,0x5b,0x58,0x4b,0x60,0x61,0x56,0x6d,0x65,0x61,0x7f,0x3d,0x42, 0x56,0x1c,0x1f,0x29,0x1a,0x1e,0x26,0x18,0x1a,0x22,0x25,0x26,0x32,0x30,0x2f,0x47, 0x31,0x2f,0x45,0x31,0x2d,0x43,0x58,0x4f,0x6f,0x5a,0x50,0x71,0x5b,0x51,0x72,0x5c, 0x51,0x73,0x5d,0x51,0x74,0x5b,0x52,0x76,0x5c,0x52,0x77,0x5c,0x52,0x76,0x5a,0x52, 0x77,0x54,0x50,0x76,0x52,0x51,0x78,0x53,0x59,0x7f,0x60,0x6b,0x8d,0x71,0x71,0x80, 0x18,0x1a,0x1e,0x18,0x1a,0x1f,0x17,0x1a,0x1e,0x16,0x18,0x1d,0x14,0x16,0x1a,0x42, 0x38,0x44,0x3e,0x33,0x3f,0x81,0x7d,0x85,0x7c,0x87,0xa2,0x63,0x6e,0x92,0x5a,0x65, 0x8b,0x54,0x60,0x86,0x51,0x5d,0x85,0x50,0x5b,0x82,0x4f,0x59,0x81,0x4d,0x57,0x80, 0x4b,0x55,0x7c,0x48,0x51,0x78,0x45,0x4b,0x71,0x44,0x4a,0x6d,0x43,0x45,0x69,0x43, 0x44,0x69,0x44,0x44,0x69,0x3b,0x39,0x56,0x16,0x17,0x1e,0x30,0x2f,0x3c,0x4c,0x49, 0x57,0x53,0x4d,0x5b,0x5a,0x53,0x62,0x4d,0x48,0x57,0x4a,0x49,0x59,0x3f,0x42,0x50, 0x41,0x44,0x4f,0x2a,0x2e,0x37,0x29,0x2b,0x35,0x2b,0x2c,0x36,0x40,0x3b,0x48,0x3b, 0x36,0x41,0x90,0x93,0x9f,0x80,0x89,0xa2,0x53,0x5d,0x81,0x41,0x3f,0x55,0x21,0x23, 0x2b,0x26,0x28,0x31,0x2a,0x2d,0x36,0x2e,0x32,0x3d,0x33,0x36,0x41,0x2f,0x33,0x3e, 0x2b,0x2e,0x39,0x1e,0x20,0x28,0x4d,0x3e,0x55,0x65,0x70,0x90,0x57,0x50,0x56,0x4a, 0x3d,0x4b,0x64,0x54,0x6b,0x63,0x55,0x6a,0x6d,0x62,0x7b,0x20,0x22,0x2b,0x2e,0x32, 0x3d,0x34,0x38,0x45,0x36,0x3a,0x46,0x34,0x38,0x43,0x34,0x37,0x43,0x35,0x39,0x44, 0x36,0x3a,0x46,0x34,0x38,0x43,0x32,0x36,0x42,0x31,0x34,0x40,0x2c,0x30,0x3a,0x2c, 0x30,0x3a,0x2e,0x32,0x3d,0x31,0x34,0x3f,0x2a,0x2e,0x38,0x22,0x26,0x2f,0x1f,0x22, 0x2a,0x1d,0x1f,0x27,0x1a,0x1d,0x25,0x15,0x17,0x1e,0x10,0x12,0x17,0x0c,0x0d,0x12, 0x0a,0x0a,0x0e,0x08,0x08,0x0a,0x06,0x06,0x09,0x06,0x06,0x08,0x06,0x05,0x07,0x05, 0x05,0x06,0x05,0x04,0x06,0x04,0x04,0x05,0x04,0x03,0x05,0x03,0x03,0x04,0x03,0x03, 0x04,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x15,0x12,0x19,0x28, 0x23,0x2e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x26,0x27,0x29,0xa8,0xb0, 0xc6,0x7c,0x88,0xa8,0x72,0x7d,0xa0,0x72,0x7e,0xa1,0x74,0x80,0xa2,0x73,0x7e,0xa1, 0x76,0x82,0xa3,0x76,0x82,0xa3,0x76,0x82,0xa3,0x78,0x85,0xa8,0x9b,0xab,0xd7,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x02,0x02,0x02,0x03,0x02,0x03,0x05,0x03,0x05,0x03,0x02,0x03,0x03, 0x02,0x03,0x03,0x02,0x03,0x03,0x02,0x03,0x04,0x03,0x03,0x04,0x03,0x04,0x05,0x03, 0x04,0x05,0x04,0x05,0x04,0x03,0x04,0x03,0x02,0x03,0x03,0x02,0x03,0x03,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x04,0x02,0x03,0x05, 0x04,0x05,0x08,0x06,0x08,0x0b,0x09,0x0b,0x0f,0x0c,0x0f,0x13,0x0e,0x12,0x14,0x0f, 0x13,0x1b,0x16,0x1c,0x21,0x1b,0x22,0x26,0x1f,0x27,0x29,0x23,0x2d,0x2d,0x27,0x32, 0x2f,0x29,0x36,0x30,0x2c,0x3a,0x32,0x31,0x42,0x35,0x36,0x49,0x37,0x37,0x4b,0x37, 0x37,0x4b,0x3a,0x3a,0x4f,0x3a,0x3d,0x52,0x39,0x3c,0x51,0x3a,0x3e,0x52,0x3f,0x45, 0x5a,0x42,0x47,0x5e,0x3e,0x43,0x5a,0x40,0x46,0x5c,0x49,0x50,0x64,0x42,0x4a,0x5f, 0x40,0x40,0x56,0x45,0x49,0x62,0x49,0x50,0x68,0x4c,0x53,0x6a,0x50,0x56,0x6b,0x5a, 0x61,0x74,0x66,0x6a,0x7d,0x66,0x6b,0x7c,0x5e,0x63,0x75,0x4e,0x54,0x69,0x43,0x49, 0x60,0x44,0x42,0x5b,0x43,0x43,0x5a,0x44,0x43,0x5b,0x42,0x41,0x57,0x46,0x42,0x57, 0x51,0x47,0x5d,0x54,0x4a,0x60,0x56,0x4b,0x62,0x52,0x4a,0x63,0x4b,0x4a,0x62,0x49, 0x47,0x61,0x49,0x4d,0x66,0x58,0x5e,0x72,0x64,0x69,0x7a,0x67,0x6c,0x7c,0x6c,0x70, 0x7e,0x6f,0x74,0x82,0x71,0x76,0x84,0x6e,0x72,0x83,0x69,0x6e,0x80,0x61,0x68,0x7a, 0x5c,0x63,0x77,0x5a,0x61,0x78,0x61,0x68,0x7e,0x64,0x6a,0x7f,0x66,0x6c,0x80,0x62, 0x69,0x7d,0x53,0x5a,0x71,0x4b,0x52,0x6b,0x4e,0x55,0x6b,0x52,0x59,0x6a,0x41,0x46, 0x56,0x4b,0x4c,0x68,0x49,0x46,0x5e,0x3f,0x36,0x4a,0x3c,0x3a,0x4d,0x40,0x3e,0x50, 0x4b,0x4d,0x66,0x4f,0x3e,0x54,0x51,0x57,0x75,0xaa,0xaa,0xb5,0x60,0x5a,0x60,0x1a, 0x15,0x1b,0x1b,0x15,0x1c,0x24,0x1c,0x26,0x36,0x2b,0x3c,0x38,0x39,0x4c,0x03,0x02, 0x03,0x1f,0x20,0x24,0xad,0xb4,0xc6,0x9d,0xa5,0xbc,0x5c,0x69,0x8e,0x7a,0x84,0xa3, 0x7e,0x87,0xa4,0x7a,0x84,0xa0,0x7b,0x82,0x9c,0x7b,0x83,0x9a,0x7a,0x82,0x99,0x74, 0x7c,0x94,0x71,0x77,0x8e,0x69,0x6a,0x7f,0x4c,0x4c,0x5c,0x30,0x31,0x40,0x37,0x38, 0x45,0x50,0x4c,0x51,0x2b,0x22,0x2b,0x2d,0x29,0x35,0x2e,0x33,0x42,0x3a,0x40,0x52, 0x3d,0x40,0x56,0x42,0x44,0x5c,0x46,0x46,0x5e,0x47,0x46,0x61,0x47,0x49,0x62,0x46, 0x45,0x5e,0x45,0x43,0x5d,0x46,0x44,0x5d,0x4c,0x46,0x5d,0x52,0x47,0x5c,0x56,0x4b, 0x60,0x5a,0x4b,0x5e,0x55,0x45,0x56,0x55,0x45,0x56,0x5a,0x4a,0x5d,0x59,0x4a,0x5f, 0x54,0x49,0x5d,0x49,0x3e,0x51,0x3b,0x30,0x3e,0x63,0x62,0x72,0x7d,0x81,0x93,0x80, 0x85,0x97,0x7d,0x7f,0x91,0x54,0x4f,0x66,0x49,0x3f,0x50,0x53,0x46,0x5a,0x4f,0x42, 0x54,0x4b,0x41,0x53,0x4f,0x45,0x59,0x57,0x4f,0x62,0x58,0x4f,0x65,0x5b,0x52,0x67, 0x69,0x60,0x73,0x5f,0x57,0x6a,0x54,0x4b,0x5f,0x4c,0x44,0x59,0x4c,0x45,0x5b,0x4e, 0x47,0x5e,0x53,0x4b,0x60,0x4d,0x44,0x59,0x50,0x45,0x5a,0x55,0x47,0x5b,0x42,0x37, 0x46,0x4a,0x3b,0x4a,0x4c,0x3e,0x4d,0x55,0x47,0x5b,0x48,0x46,0x5e,0x57,0x5d,0x70, 0x6a,0x6f,0x7f,0x85,0x89,0x95,0x8b,0x8f,0x9b,0x8c,0x8f,0x9b,0x7c,0x81,0x90,0x72, 0x78,0x88,0x85,0x89,0x94,0x89,0x8e,0x97,0x75,0x7a,0x88,0x76,0x7b,0x8b,0x76,0x7b, 0x8b,0x73,0x79,0x8a,0x79,0x7e,0x8e,0x86,0x8b,0x96,0x82,0x86,0x90,0x66,0x6a,0x77, 0x52,0x57,0x64,0x4c,0x51,0x65,0x5b,0x56,0x71,0x59,0x5a,0x71,0x50,0x50,0x65,0x66, 0x64,0x73,0x6e,0x6c,0x7a,0x89,0x88,0x95,0xc5,0xc8,0xd1,0xb0,0xb6,0xc2,0x8b,0x94, 0xa9,0x5e,0x67,0x85,0x4f,0x58,0x7a,0x4e,0x53,0x77,0x5d,0x53,0x72,0x53,0x5e,0x81, 0x6f,0x67,0x77,0x56,0x4a,0x5d,0x58,0x4d,0x60,0x65,0x59,0x70,0x56,0x59,0x78,0x2d, 0x31,0x3f,0x1e,0x21,0x2b,0x1d,0x20,0x2a,0x1c,0x1e,0x28,0x18,0x1a,0x23,0x20,0x21, 0x2d,0x31,0x2f,0x48,0x31,0x2e,0x45,0x31,0x2c,0x43,0x57,0x4f,0x71,0x5a,0x50,0x71, 0x5a,0x51,0x71,0x5c,0x51,0x72,0x5d,0x51,0x74,0x5b,0x51,0x76,0x5b,0x51,0x76,0x5b, 0x51,0x77,0x5a,0x52,0x76,0x56,0x50,0x76,0x52,0x51,0x78,0x54,0x5b,0x81,0x61,0x6c, 0x8e,0x75,0x75,0x85,0x1a,0x1d,0x22,0x1c,0x1e,0x24,0x1c,0x1e,0x23,0x1a,0x1b,0x21, 0x17,0x19,0x1e,0x3e,0x36,0x42,0x41,0x36,0x42,0x7c,0x76,0x7e,0x7b,0x84,0xa2,0x66, 0x70,0x93,0x5a,0x65,0x8b,0x54,0x60,0x87,0x53,0x5d,0x85,0x50,0x5b,0x82,0x51,0x5b, 0x83,0x4e,0x58,0x81,0x4b,0x56,0x7c,0x4a,0x52,0x7a,0x46,0x4e,0x73,0x44,0x47,0x6c, 0x44,0x46,0x6a,0x43,0x44,0x69,0x45,0x45,0x6a,0x38,0x38,0x54,0x16,0x15,0x1d,0x28, 0x25,0x32,0x47,0x43,0x50,0x7e,0x79,0x83,0x74,0x6c,0x78,0x82,0x7d,0x87,0x61,0x60, 0x6d,0x3b,0x3d,0x4c,0x47,0x4a,0x55,0x2e,0x31,0x3b,0x2a,0x2d,0x36,0x24,0x27,0x30, 0x40,0x3c,0x48,0x3d,0x38,0x44,0x65,0x64,0x71,0x76,0x80,0x9a,0x51,0x51,0x76,0x52, 0x4e,0x67,0x23,0x26,0x2f,0x28,0x2b,0x34,0x2e,0x31,0x3b,0x32,0x35,0x40,0x35,0x39, 0x44,0x34,0x38,0x43,0x2e,0x32,0x3d,0x22,0x24,0x2d,0x50,0x41,0x58,0x74,0x7d,0x9a, 0x33,0x2a,0x33,0x4c,0x40,0x4e,0x62,0x53,0x66,0x66,0x57,0x6d,0x68,0x64,0x83,0x29, 0x2c,0x36,0x33,0x37,0x44,0x3b,0x40,0x4d,0x3e,0x43,0x51,0x39,0x3e,0x4a,0x38,0x3c, 0x49,0x37,0x3b,0x48,0x34,0x38,0x45,0x31,0x35,0x41,0x2e,0x32,0x3d,0x2e,0x32,0x3e, 0x30,0x34,0x3e,0x31,0x35,0x40,0x37,0x3b,0x48,0x3a,0x3e,0x4a,0x34,0x38,0x44,0x2a, 0x2e,0x38,0x24,0x27,0x30,0x24,0x27,0x30,0x21,0x24,0x2d,0x1a,0x1d,0x24,0x12,0x14, 0x1a,0x0e,0x0f,0x14,0x0a,0x0a,0x0e,0x09,0x08,0x0b,0x07,0x07,0x0a,0x06,0x06,0x08, 0x06,0x06,0x07,0x06,0x05,0x07,0x05,0x04,0x06,0x05,0x04,0x06,0x04,0x03,0x05,0x03, 0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x1c,0x19,0x21, 0x2c,0x27,0x34,0x29,0x24,0x30,0x20,0x1c,0x26,0x00,0x00,0x00,0x17,0x15,0x1b,0x31, 0x2b,0x39,0x2c,0x27,0x33,0x03,0x03,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02, 0x02,0x02,0xc3,0xc9,0xd6,0x8d,0x98,0xb3,0x71,0x7c,0x9f,0x6e,0x7a,0x9d,0x6f,0x7b, 0x9f,0x72,0x7e,0xa1,0x73,0x7e,0xa1,0x73,0x7e,0xa1,0x74,0x80,0xa2,0x74,0x80,0xa2, 0x84,0x92,0xb7,0x2f,0x33,0x3e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x03,0x05,0x04,0x05,0x05,0x04,0x06, 0x06,0x04,0x06,0x05,0x04,0x05,0x05,0x04,0x05,0x06,0x05,0x06,0x06,0x04,0x05,0x06, 0x04,0x06,0x06,0x05,0x06,0x06,0x05,0x06,0x06,0x05,0x06,0x05,0x04,0x05,0x05,0x03, 0x04,0x05,0x03,0x04,0x04,0x03,0x04,0x05,0x04,0x05,0x06,0x04,0x06,0x07,0x06,0x06, 0x0c,0x0a,0x0c,0x0f,0x0d,0x0f,0x10,0x0d,0x10,0x0e,0x0b,0x0e,0x12,0x0e,0x12,0x18, 0x13,0x18,0x1c,0x17,0x1d,0x23,0x1d,0x25,0x26,0x22,0x2a,0x2a,0x25,0x2f,0x2b,0x28, 0x35,0x2d,0x2a,0x39,0x30,0x2e,0x40,0x32,0x32,0x44,0x31,0x30,0x41,0x33,0x32,0x44, 0x38,0x36,0x4a,0x3c,0x3b,0x51,0x42,0x42,0x5a,0x46,0x4c,0x64,0x4a,0x50,0x66,0x56, 0x5b,0x6d,0x59,0x5f,0x72,0x56,0x5c,0x70,0x4e,0x56,0x6b,0x5a,0x61,0x76,0x5f,0x66, 0x7a,0x56,0x5c,0x72,0x44,0x4a,0x62,0x45,0x48,0x61,0x46,0x4b,0x65,0x49,0x51,0x68, 0x56,0x5c,0x71,0x5c,0x61,0x75,0x5b,0x61,0x74,0x4e,0x52,0x68,0x40,0x3e,0x54,0x48, 0x3f,0x51,0x4c,0x42,0x52,0x4d,0x40,0x52,0x4d,0x40,0x50,0x49,0x3d,0x4d,0x46,0x3a, 0x4a,0x46,0x39,0x48,0x46,0x39,0x48,0x4b,0x41,0x51,0x4c,0x43,0x56,0x49,0x43,0x5a, 0x46,0x42,0x5b,0x46,0x43,0x5d,0x46,0x44,0x5c,0x49,0x44,0x5b,0x45,0x46,0x5e,0x4d, 0x52,0x67,0x54,0x59,0x6c,0x58,0x5e,0x6e,0x61,0x65,0x76,0x66,0x6b,0x7d,0x62,0x68, 0x7a,0x5e,0x65,0x77,0x5e,0x65,0x77,0x62,0x69,0x7d,0x6b,0x72,0x84,0x6e,0x75,0x87, 0x71,0x77,0x87,0x6b,0x72,0x82,0x5d,0x63,0x76,0x5a,0x61,0x76,0x5e,0x64,0x76,0x5b, 0x61,0x71,0x57,0x5c,0x69,0x51,0x58,0x71,0x46,0x49,0x65,0x4a,0x41,0x59,0x41,0x3e, 0x54,0x39,0x38,0x4a,0x41,0x43,0x58,0x4d,0x40,0x58,0x47,0x48,0x6a,0x95,0x99,0xaa, 0x82,0x7d,0x81,0x19,0x13,0x19,0x18,0x12,0x17,0x20,0x18,0x21,0x33,0x28,0x35,0x31, 0x32,0x48,0x10,0x10,0x11,0x02,0x02,0x02,0x93,0x98,0xa8,0xa7,0xae,0xc3,0x65,0x71, 0x96,0x68,0x73,0x97,0x7f,0x89,0xa6,0x7a,0x83,0xa2,0x7e,0x87,0xa1,0x7e,0x86,0xa0, 0x7d,0x85,0x9d,0x7e,0x85,0x9c,0x78,0x7f,0x96,0x6d,0x73,0x8a,0x6c,0x6d,0x7f,0x40, 0x41,0x54,0x3c,0x3c,0x4e,0x68,0x64,0x6f,0x3d,0x38,0x41,0x1e,0x1e,0x2a,0x2a,0x2e, 0x3a,0x35,0x3a,0x48,0x36,0x3a,0x4c,0x3b,0x3e,0x53,0x42,0x45,0x5c,0x47,0x4e,0x66, 0x5c,0x64,0x7a,0x4e,0x56,0x6e,0x4a,0x51,0x6a,0x4a,0x51,0x6a,0x47,0x4e,0x66,0x4b, 0x52,0x6a,0x49,0x50,0x6a,0x4a,0x4a,0x64,0x59,0x4d,0x61,0x55,0x46,0x57,0x55,0x45, 0x56,0x57,0x47,0x59,0x59,0x4a,0x5c,0x4f,0x45,0x58,0x4a,0x3d,0x4c,0x54,0x4d,0x5d, 0x81,0x84,0x96,0x87,0x8c,0x9f,0x84,0x87,0x9a,0x68,0x68,0x7e,0x42,0x39,0x48,0x56, 0x4a,0x5f,0x56,0x49,0x5d,0x5a,0x50,0x62,0x5c,0x54,0x64,0x5b,0x53,0x65,0x58,0x4e, 0x62,0x56,0x4c,0x61,0x5a,0x50,0x65,0x62,0x58,0x6c,0x65,0x5d,0x72,0x66,0x5f,0x72, 0x61,0x5a,0x6e,0x58,0x50,0x66,0x53,0x49,0x60,0x56,0x4b,0x61,0x56,0x4b,0x62,0x55, 0x4a,0x5f,0x47,0x3c,0x4e,0x53,0x46,0x5a,0x4d,0x3e,0x4e,0x51,0x42,0x54,0x55,0x4a, 0x5e,0x4a,0x46,0x5f,0x52,0x56,0x6b,0x76,0x79,0x88,0x8f,0x93,0x9d,0x99,0x9c,0xa5, 0x9c,0x9f,0xa7,0x83,0x88,0x96,0x71,0x76,0x8a,0x80,0x85,0x93,0x7a,0x80,0x8e,0x7a, 0x7f,0x8e,0x79,0x7e,0x8e,0x73,0x79,0x8a,0x70,0x76,0x87,0x79,0x7e,0x8c,0x86,0x8a, 0x95,0x76,0x7a,0x85,0x5f,0x64,0x70,0x6a,0x6a,0x7e,0x6e,0x6e,0x81,0x7f,0x7f,0x8c, 0x5d,0x5d,0x6f,0x59,0x57,0x67,0x64,0x63,0x6f,0x79,0x77,0x85,0xb6,0xba,0xc6,0xab, 0xaf,0xbe,0x93,0x9a,0xaf,0x6e,0x77,0x92,0x53,0x5c,0x7d,0x4c,0x56,0x78,0x58,0x52, 0x73,0x5d,0x53,0x73,0x71,0x78,0x8e,0x5c,0x51,0x65,0x69,0x5c,0x75,0x48,0x4f,0x68, 0x1f,0x23,0x2e,0x1e,0x21,0x2b,0x1e,0x22,0x2c,0x1e,0x21,0x2b,0x1c,0x1f,0x29,0x1a, 0x1c,0x25,0x22,0x23,0x2f,0x32,0x31,0x47,0x30,0x2e,0x45,0x33,0x2f,0x47,0x57,0x50, 0x72,0x5a,0x50,0x71,0x5a,0x51,0x71,0x5c,0x51,0x73,0x5b,0x51,0x75,0x5c,0x51,0x76, 0x5c,0x52,0x77,0x5b,0x50,0x76,0x5a,0x51,0x77,0x56,0x51,0x77,0x51,0x50,0x78,0x54, 0x59,0x7f,0x63,0x6d,0x8f,0x7c,0x7e,0x8c,0x1f,0x22,0x27,0x20,0x22,0x27,0x1e,0x1f, 0x26,0x1c,0x1e,0x24,0x19,0x1a,0x1f,0x3b,0x34,0x3f,0x43,0x38,0x44,0x7a,0x76,0x7d, 0x7e,0x88,0xa3,0x66,0x70,0x93,0x5b,0x68,0x8b,0x54,0x60,0x87,0x52,0x5d,0x85,0x51, 0x5c,0x85,0x51,0x5b,0x83,0x4e,0x5a,0x81,0x4b,0x56,0x7e,0x4a,0x53,0x79,0x47,0x4e, 0x74,0x45,0x4b,0x70,0x43,0x46,0x6b,0x45,0x46,0x6b,0x44,0x44,0x69,0x38,0x37,0x55, 0x17,0x17,0x1f,0x2a,0x26,0x33,0x36,0x31,0x40,0x43,0x3b,0x4a,0x47,0x3d,0x4d,0x4e, 0x47,0x56,0x50,0x4e,0x5c,0x37,0x38,0x46,0x49,0x4b,0x56,0x2a,0x2e,0x37,0x27,0x2a, 0x34,0x26,0x2a,0x32,0x41,0x3e,0x4c,0x3e,0x37,0x44,0x46,0x41,0x4c,0x63,0x6d,0x8c, 0x50,0x50,0x75,0x5b,0x56,0x75,0x26,0x28,0x31,0x2a,0x2e,0x37,0x32,0x36,0x41,0x33, 0x37,0x42,0x35,0x39,0x45,0x37,0x3b,0x47,0x31,0x34,0x3f,0x2a,0x2b,0x35,0x54,0x45, 0x5c,0x88,0x90,0xa4,0x38,0x2d,0x39,0x51,0x44,0x55,0x64,0x56,0x6a,0x6f,0x62,0x7a, 0x62,0x6c,0x8a,0x2e,0x32,0x3d,0x35,0x39,0x46,0x3e,0x42,0x50,0x3e,0x43,0x51,0x38, 0x3c,0x4a,0x34,0x38,0x45,0x31,0x35,0x40,0x2e,0x32,0x3d,0x2b,0x2f,0x3a,0x2c,0x2f, 0x3a,0x2e,0x32,0x3e,0x32,0x36,0x42,0x35,0x39,0x44,0x36,0x3a,0x46,0x36,0x3a,0x46, 0x36,0x3a,0x46,0x32,0x35,0x41,0x27,0x2a,0x35,0x22,0x25,0x2e,0x20,0x23,0x2c,0x19, 0x1b,0x23,0x12,0x14,0x1a,0x0e,0x0f,0x14,0x0c,0x0b,0x10,0x0a,0x0a,0x0d,0x08,0x07, 0x0a,0x08,0x07,0x0a,0x06,0x06,0x08,0x06,0x06,0x07,0x06,0x05,0x06,0x05,0x04,0x06, 0x05,0x04,0x06,0x04,0x03,0x05,0x03,0x03,0x04,0x03,0x03,0x04,0x02,0x02,0x03,0x02, 0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x0f, 0x13,0x2c,0x26,0x32,0x08,0x08,0x0b,0x03,0x03,0x04,0x39,0x32,0x42,0x26,0x22,0x2d, 0x26,0x22,0x2c,0x0b,0x0a,0x0d,0x1d,0x1a,0x22,0x2d,0x27,0x34,0x0f,0x0d,0x12,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x76,0x77,0x7a,0xa4,0xac,0xc2,0x73,0x7e,0xa1,0x6b, 0x76,0x9b,0x6c,0x77,0x9b,0x6e,0x7a,0x9d,0x6f,0x7b,0x9f,0x71,0x7c,0xa0,0x71,0x7d, 0xa0,0x6f,0x7b,0x9f,0x73,0x7e,0xa4,0x8e,0x9d,0xcd,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x02,0x02,0x02,0x03,0x02,0x03,0x03,0x02,0x03,0x05,0x04,0x05,0x06,0x05, 0x06,0x06,0x05,0x06,0x06,0x06,0x06,0x07,0x06,0x07,0x07,0x06,0x07,0x07,0x06,0x07, 0x08,0x06,0x08,0x08,0x06,0x08,0x08,0x06,0x09,0x08,0x06,0x08,0x08,0x06,0x08,0x08, 0x06,0x08,0x07,0x06,0x07,0x08,0x06,0x08,0x08,0x06,0x08,0x08,0x06,0x08,0x0d,0x0a, 0x0d,0x15,0x11,0x16,0x16,0x12,0x16,0x14,0x10,0x15,0x16,0x12,0x16,0x1a,0x15,0x1a, 0x1d,0x18,0x1e,0x1f,0x1b,0x22,0x22,0x1e,0x27,0x25,0x22,0x2c,0x24,0x23,0x30,0x29, 0x28,0x36,0x2e,0x2d,0x3e,0x33,0x32,0x43,0x38,0x37,0x4c,0x3b,0x3b,0x50,0x3d,0x3c, 0x52,0x3c,0x3b,0x50,0x43,0x3e,0x51,0x46,0x3f,0x52,0x40,0x3d,0x52,0x3e,0x3e,0x54, 0x42,0x45,0x5d,0x5b,0x62,0x76,0x66,0x6c,0x7e,0x6b,0x71,0x83,0x64,0x6b,0x7e,0x63, 0x6a,0x7e,0x67,0x6e,0x83,0x59,0x61,0x78,0x49,0x4a,0x65,0x48,0x47,0x61,0x49,0x48, 0x62,0x46,0x45,0x5e,0x46,0x46,0x5f,0x46,0x4a,0x61,0x45,0x42,0x5a,0x47,0x40,0x55, 0x41,0x39,0x48,0x3d,0x33,0x42,0x3e,0x34,0x42,0x40,0x36,0x43,0x3e,0x34,0x41,0x3e, 0x34,0x42,0x3e,0x36,0x46,0x3d,0x38,0x4b,0x42,0x3a,0x4e,0x49,0x3f,0x52,0x46,0x40, 0x54,0x43,0x3e,0x56,0x44,0x41,0x58,0x49,0x42,0x56,0x4e,0x44,0x59,0x52,0x46,0x5a, 0x53,0x47,0x5a,0x4e,0x46,0x5e,0x47,0x43,0x5c,0x46,0x45,0x5c,0x48,0x4c,0x65,0x53, 0x5a,0x6e,0x5c,0x62,0x76,0x60,0x66,0x79,0x5c,0x63,0x76,0x5b,0x62,0x76,0x61,0x67, 0x7a,0x61,0x66,0x7a,0x65,0x6b,0x7c,0x6c,0x71,0x80,0x69,0x6e,0x7e,0x6a,0x6f,0x7f, 0x6c,0x72,0x81,0x66,0x6b,0x7a,0x60,0x66,0x73,0x75,0x7c,0x8f,0x6c,0x72,0x89,0x4f, 0x4e,0x69,0x45,0x41,0x5a,0x3c,0x39,0x4b,0x42,0x43,0x57,0x42,0x3d,0x5b,0x47,0x43, 0x64,0x80,0x86,0x9c,0x9f,0x9b,0xa1,0x1b,0x13,0x18,0x15,0x10,0x14,0x1c,0x14,0x1b, 0x2e,0x23,0x31,0x30,0x2e,0x44,0x32,0x31,0x37,0x02,0x02,0x02,0x59,0x5d,0x66,0xad, 0xb5,0xc8,0x7b,0x86,0xa6,0x5a,0x65,0x8c,0x7d,0x87,0xa5,0x7b,0x84,0xa4,0x7e,0x88, 0xa3,0x81,0x8a,0xa5,0x80,0x8a,0xa2,0x80,0x87,0xa0,0x77,0x80,0x98,0x74,0x79,0x90, 0x6e,0x72,0x89,0x5d,0x5e,0x76,0x4e,0x4e,0x69,0x6f,0x71,0x85,0x5c,0x5e,0x67,0x1e, 0x20,0x26,0x27,0x2a,0x34,0x2f,0x34,0x40,0x31,0x36,0x44,0x34,0x39,0x4a,0x3b,0x41, 0x56,0x44,0x48,0x60,0x4a,0x51,0x6b,0x4a,0x4d,0x67,0x4e,0x56,0x6f,0x53,0x5b,0x72, 0x68,0x6e,0x83,0x74,0x7a,0x8b,0x74,0x7a,0x8a,0x65,0x6c,0x80,0x48,0x46,0x60,0x56, 0x4a,0x5f,0x56,0x46,0x59,0x54,0x45,0x56,0x54,0x44,0x56,0x52,0x43,0x54,0x4d,0x3e, 0x4d,0x4b,0x3f,0x4e,0x7b,0x78,0x8b,0x83,0x84,0x98,0x80,0x83,0x95,0x76,0x77,0x8a, 0x3b,0x33,0x41,0x54,0x49,0x5d,0x5f,0x54,0x66,0x69,0x5f,0x70,0x5d,0x54,0x65,0x57, 0x4f,0x5f,0x56,0x4e,0x5e,0x4e,0x43,0x56,0x54,0x49,0x5c,0x55,0x49,0x5d,0x57,0x4d, 0x62,0x5a,0x50,0x66,0x5d,0x55,0x6b,0x5b,0x53,0x69,0x58,0x4e,0x64,0x58,0x4e,0x65, 0x58,0x4e,0x65,0x54,0x4a,0x60,0x46,0x3e,0x4e,0x52,0x46,0x5b,0x4a,0x3f,0x50,0x4e, 0x3f,0x4e,0x52,0x44,0x57,0x53,0x4a,0x5e,0x4d,0x48,0x62,0x52,0x56,0x6d,0x76,0x7a, 0x89,0x89,0x8e,0x99,0x96,0x99,0xa3,0x96,0x9a,0xa5,0x71,0x78,0x8b,0x6d,0x74,0x88, 0x71,0x76,0x89,0x78,0x7d,0x8d,0x7a,0x7f,0x8e,0x7b,0x80,0x90,0x71,0x77,0x89,0x6e, 0x74,0x86,0x6f,0x75,0x86,0x76,0x7b,0x89,0x7c,0x7e,0x8c,0x7b,0x7a,0x8b,0x7a,0x79, 0x88,0x8e,0x8c,0x96,0x7e,0x7c,0x87,0x56,0x53,0x61,0x59,0x56,0x62,0x6e,0x6d,0x78, 0xb0,0xb4,0xbe,0xa5,0xa9,0xb8,0x90,0x98,0xac,0x77,0x7f,0x9a,0x58,0x61,0x7f,0x4c, 0x55,0x76,0x4e,0x4f,0x73,0x5a,0x4c,0x67,0x50,0x5a,0x7d,0x73,0x71,0x83,0x35,0x3b, 0x4c,0x1c,0x1e,0x28,0x1e,0x21,0x2b,0x1f,0x22,0x2d,0x1f,0x22,0x2d,0x1f,0x22,0x2c, 0x1d,0x1f,0x2a,0x1a,0x1c,0x25,0x20,0x20,0x2c,0x32,0x2f,0x47,0x31,0x2f,0x45,0x32, 0x2d,0x45,0x57,0x4f,0x71,0x5a,0x50,0x71,0x5b,0x51,0x72,0x5b,0x51,0x74,0x5b,0x51, 0x76,0x5c,0x52,0x77,0x5c,0x52,0x77,0x5b,0x52,0x77,0x5a,0x51,0x76,0x56,0x50,0x77, 0x53,0x51,0x78,0x54,0x58,0x7f,0x64,0x6e,0x90,0x81,0x82,0x91,0x23,0x25,0x2b,0x23, 0x26,0x2c,0x21,0x22,0x29,0x1e,0x20,0x26,0x1a,0x1c,0x21,0x36,0x31,0x3c,0x45,0x3a, 0x46,0x74,0x6e,0x77,0x7b,0x84,0xa1,0x63,0x6e,0x91,0x5b,0x68,0x8b,0x55,0x61,0x86, 0x53,0x5d,0x86,0x51,0x5c,0x82,0x51,0x5b,0x83,0x4e,0x59,0x81,0x4c,0x56,0x7f,0x4a, 0x54,0x7b,0x48,0x50,0x76,0x45,0x4b,0x71,0x44,0x46,0x6c,0x44,0x46,0x6a,0x44,0x45, 0x6a,0x38,0x37,0x55,0x18,0x17,0x20,0x2a,0x27,0x35,0x3a,0x33,0x43,0x46,0x3c,0x4c, 0x49,0x3d,0x4d,0x44,0x3b,0x4b,0x48,0x42,0x50,0x48,0x47,0x54,0x38,0x3b,0x46,0x28, 0x2b,0x36,0x26,0x29,0x32,0x26,0x2a,0x33,0x3a,0x39,0x45,0x41,0x3a,0x47,0x3f,0x36, 0x42,0x59,0x60,0x7d,0x53,0x5d,0x80,0x56,0x52,0x74,0x29,0x2b,0x35,0x27,0x2a,0x34, 0x2e,0x31,0x3c,0x32,0x35,0x41,0x35,0x39,0x45,0x39,0x3e,0x4b,0x30,0x34,0x3f,0x32, 0x30,0x3d,0x58,0x48,0x60,0x95,0x98,0xa9,0x3d,0x31,0x3c,0x56,0x48,0x59,0x6a,0x5b, 0x71,0x66,0x63,0x84,0x5b,0x63,0x7e,0x2e,0x31,0x3d,0x32,0x36,0x42,0x35,0x3a,0x46, 0x35,0x39,0x46,0x32,0x36,0x42,0x30,0x34,0x3f,0x2e,0x32,0x3e,0x2a,0x2e,0x3a,0x2a, 0x2e,0x3a,0x2e,0x32,0x3d,0x32,0x36,0x41,0x36,0x3a,0x46,0x36,0x3a,0x45,0x31,0x34, 0x40,0x2e,0x31,0x3d,0x2d,0x31,0x3d,0x2e,0x32,0x3e,0x29,0x2c,0x36,0x22,0x25,0x2e, 0x1c,0x1e,0x27,0x17,0x1a,0x22,0x13,0x14,0x1a,0x0f,0x0f,0x15,0x0d,0x0d,0x12,0x0a, 0x0a,0x0e,0x09,0x08,0x0b,0x08,0x07,0x0a,0x08,0x07,0x0a,0x06,0x06,0x08,0x06,0x06, 0x07,0x05,0x05,0x06,0x05,0x04,0x06,0x04,0x03,0x05,0x03,0x03,0x04,0x03,0x03,0x04, 0x03,0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x1b,0x18,0x1f,0x1b,0x18,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0x0a, 0x0d,0x16,0x14,0x1b,0x04,0x04,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0x0e,0x12, 0x27,0x22,0x2d,0x1d,0x19,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x26,0xc8,0xcc,0xda, 0x7e,0x89,0xa9,0x6a,0x76,0x9a,0x6b,0x76,0x9b,0x6c,0x79,0x9c,0x6b,0x77,0x9b,0x6d, 0x79,0x9c,0x6e,0x7a,0x9d,0x71,0x7c,0xa0,0x6e,0x7a,0x9d,0x78,0x85,0xac,0x29,0x2e, 0x2e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x03,0x04,0x03, 0x03,0x05,0x05,0x05,0x06,0x05,0x05,0x06,0x06,0x06,0x08,0x07,0x06,0x09,0x08,0x07, 0x09,0x08,0x07,0x0a,0x1e,0x1c,0x1f,0x14,0x13,0x15,0x0a,0x08,0x0a,0x0a,0x08,0x0a, 0x0a,0x09,0x0a,0x0b,0x0a,0x0c,0x0c,0x0a,0x0d,0x0e,0x0a,0x0e,0x0e,0x0b,0x0e,0x0e, 0x0c,0x0f,0x17,0x13,0x19,0x20,0x1a,0x21,0x22,0x1b,0x22,0x1e,0x19,0x1e,0x1b,0x18, 0x20,0x1a,0x18,0x1f,0x1d,0x1a,0x22,0x1d,0x1b,0x25,0x1f,0x1f,0x2a,0x26,0x29,0x36, 0x2a,0x2e,0x3b,0x2e,0x32,0x42,0x35,0x36,0x49,0x3a,0x3a,0x4e,0x3f,0x3e,0x56,0x42, 0x41,0x59,0x43,0x42,0x5a,0x47,0x45,0x5d,0x51,0x4a,0x62,0x4c,0x46,0x5c,0x42,0x3f, 0x55,0x3e,0x3e,0x52,0x3e,0x3e,0x54,0x42,0x48,0x5e,0x56,0x5e,0x76,0x63,0x6a,0x7f, 0x61,0x68,0x7d,0x66,0x6d,0x82,0x66,0x6d,0x82,0x50,0x57,0x71,0x48,0x47,0x62,0x4e, 0x47,0x5d,0x50,0x46,0x5a,0x4d,0x45,0x59,0x4a,0x42,0x56,0x4b,0x42,0x56,0x4a,0x42, 0x52,0x42,0x39,0x46,0x3e,0x35,0x42,0x3d,0x34,0x42,0x42,0x38,0x47,0x42,0x3a,0x4a, 0x3e,0x38,0x4a,0x3a,0x36,0x47,0x35,0x32,0x43,0x36,0x33,0x44,0x3b,0x36,0x47,0x43, 0x3b,0x4c,0x43,0x3c,0x4a,0x43,0x3b,0x49,0x46,0x3a,0x4a,0x48,0x3c,0x4d,0x4a,0x40, 0x51,0x4e,0x40,0x50,0x50,0x42,0x52,0x52,0x42,0x53,0x56,0x46,0x56,0x56,0x48,0x5c, 0x53,0x4a,0x61,0x4a,0x47,0x61,0x46,0x46,0x5f,0x51,0x57,0x6c,0x5d,0x62,0x75,0x5a, 0x61,0x73,0x5d,0x64,0x77,0x5e,0x65,0x77,0x5d,0x62,0x74,0x62,0x68,0x78,0x6a,0x70, 0x7e,0x73,0x78,0x85,0x78,0x7d,0x89,0x6a,0x6f,0x7e,0x5c,0x62,0x71,0x71,0x76,0x88, 0x87,0x8e,0xa1,0x75,0x73,0x88,0x42,0x42,0x5e,0x4a,0x48,0x5f,0x52,0x51,0x6a,0x47, 0x48,0x65,0x51,0x46,0x64,0x6d,0x74,0x8f,0xc6,0xc5,0xc9,0x1d,0x14,0x18,0x16,0x10, 0x14,0x19,0x12,0x19,0x28,0x1f,0x29,0x33,0x2c,0x42,0x43,0x43,0x4d,0x00,0x00,0x00, 0x1f,0x20,0x24,0xaf,0xb6,0xc9,0x97,0xa0,0xb9,0x56,0x61,0x89,0x7c,0x88,0xa6,0x81, 0x8b,0xa8,0x7f,0x88,0xa6,0x83,0x8d,0xa8,0x85,0x8e,0xa9,0x84,0x8e,0xa6,0x7e,0x86, 0xa1,0x78,0x7e,0x98,0x74,0x79,0x92,0x6b,0x6f,0x89,0x4b,0x51,0x71,0x5d,0x66,0x80, 0x85,0x88,0x94,0x1a,0x1b,0x21,0x22,0x24,0x2c,0x2b,0x2e,0x3a,0x31,0x35,0x42,0x33, 0x38,0x46,0x37,0x3d,0x4e,0x3b,0x41,0x56,0x46,0x49,0x62,0x49,0x4a,0x65,0x4a,0x4c, 0x67,0x4c,0x53,0x6e,0x66,0x6d,0x82,0x73,0x7a,0x8c,0x74,0x7a,0x8b,0x5c,0x63,0x79, 0x47,0x4b,0x64,0x48,0x46,0x60,0x50,0x4a,0x62,0x58,0x4d,0x62,0x58,0x4b,0x5e,0x56, 0x48,0x5b,0x51,0x43,0x54,0x4c,0x3e,0x4d,0x74,0x70,0x82,0x7c,0x79,0x8c,0x7f,0x7f, 0x92,0x79,0x79,0x8d,0x3a,0x32,0x40,0x51,0x46,0x5b,0x57,0x4c,0x62,0x56,0x4b,0x60, 0x52,0x47,0x5a,0x50,0x44,0x57,0x60,0x57,0x65,0x48,0x3d,0x4d,0x45,0x3a,0x4a,0x48, 0x3d,0x4c,0x4e,0x42,0x53,0x53,0x47,0x5c,0x55,0x4a,0x5f,0x56,0x4c,0x61,0x56,0x4b, 0x61,0x53,0x4a,0x5f,0x4f,0x45,0x58,0x4f,0x45,0x58,0x47,0x3e,0x4f,0x44,0x3a,0x4b, 0x48,0x3b,0x4b,0x4c,0x3e,0x4d,0x4e,0x3e,0x4f,0x52,0x43,0x55,0x53,0x49,0x5e,0x4b, 0x48,0x62,0x51,0x56,0x6c,0x6c,0x72,0x85,0x77,0x7e,0x8e,0x8b,0x8f,0x9d,0x7f,0x86, 0x96,0x6a,0x72,0x86,0x72,0x78,0x8a,0x71,0x77,0x89,0x74,0x7a,0x8a,0x7c,0x82,0x91, 0x7b,0x80,0x90,0x71,0x76,0x87,0x6f,0x76,0x87,0x68,0x6f,0x82,0x7e,0x7f,0x94,0x86, 0x86,0x97,0x76,0x76,0x85,0x82,0x80,0x8a,0x8a,0x88,0x90,0x62,0x5e,0x69,0x4a,0x47, 0x52,0x68,0x65,0x70,0xb6,0xb8,0xc1,0xa4,0xa8,0xb6,0x89,0x90,0xa4,0x6d,0x75,0x8f, 0x53,0x57,0x76,0x49,0x4c,0x6d,0x4d,0x4d,0x71,0x5a,0x4c,0x65,0x5b,0x52,0x71,0x55, 0x5d,0x7a,0x1d,0x1f,0x28,0x1d,0x1f,0x2a,0x1e,0x22,0x2c,0x1f,0x22,0x2d,0x20,0x23, 0x2e,0x1e,0x22,0x2c,0x1d,0x20,0x2a,0x1a,0x1d,0x26,0x20,0x21,0x2b,0x32,0x30,0x48, 0x30,0x2e,0x44,0x2f,0x2b,0x42,0x56,0x4f,0x71,0x5a,0x50,0x71,0x5b,0x51,0x71,0x5d, 0x51,0x74,0x5e,0x52,0x75,0x5c,0x52,0x77,0x5c,0x52,0x77,0x5b,0x52,0x77,0x5a,0x52, 0x77,0x59,0x53,0x77,0x53,0x51,0x78,0x55,0x59,0x7f,0x65,0x6f,0x90,0x85,0x86,0x95, 0x29,0x2b,0x32,0x26,0x29,0x30,0x24,0x26,0x2d,0x22,0x24,0x2a,0x1e,0x20,0x26,0x33, 0x2f,0x39,0x46,0x3b,0x47,0x6f,0x68,0x72,0x78,0x82,0x9f,0x64,0x6f,0x92,0x5a,0x67, 0x8a,0x56,0x61,0x87,0x54,0x5e,0x86,0x52,0x5d,0x83,0x51,0x5b,0x84,0x4f,0x5a,0x82, 0x4e,0x58,0x80,0x4c,0x55,0x7b,0x48,0x50,0x76,0x45,0x4d,0x73,0x45,0x47,0x6d,0x45, 0x46,0x6a,0x44,0x45,0x6a,0x39,0x38,0x55,0x1a,0x1a,0x23,0x2c,0x2a,0x38,0x3d,0x39, 0x4c,0x4b,0x42,0x53,0x4e,0x41,0x52,0x4a,0x3d,0x4c,0x47,0x3b,0x4a,0x3c,0x34,0x44, 0x46,0x46,0x51,0x52,0x54,0x5d,0x3e,0x42,0x49,0x48,0x4a,0x52,0x49,0x49,0x52,0x4b, 0x42,0x50,0x47,0x3d,0x4b,0x68,0x67,0x7a,0x6f,0x79,0x96,0x4f,0x4d,0x74,0x3a,0x37, 0x47,0x20,0x22,0x2b,0x26,0x2a,0x33,0x2c,0x30,0x3a,0x2e,0x32,0x3e,0x32,0x35,0x41, 0x2a,0x2e,0x38,0x38,0x32,0x43,0x57,0x4b,0x67,0x9c,0x9b,0xa6,0x46,0x39,0x46,0x60, 0x50,0x65,0x6e,0x63,0x7f,0x62,0x69,0x8a,0x2d,0x30,0x3d,0x2b,0x2f,0x3b,0x31,0x35, 0x41,0x32,0x36,0x42,0x32,0x37,0x43,0x33,0x38,0x43,0x35,0x39,0x45,0x35,0x39,0x44, 0x32,0x36,0x42,0x30,0x34,0x40,0x31,0x35,0x40,0x33,0x37,0x44,0x35,0x39,0x46,0x34, 0x39,0x46,0x2e,0x32,0x3e,0x29,0x2c,0x38,0x29,0x2d,0x38,0x2e,0x31,0x3d,0x29,0x2d, 0x38,0x22,0x25,0x2f,0x1b,0x1e,0x26,0x19,0x1b,0x24,0x16,0x19,0x21,0x12,0x11,0x17, 0x0e,0x0e,0x12,0x0c,0x0b,0x0e,0x0a,0x0a,0x0d,0x09,0x08,0x0a,0x08,0x07,0x0a,0x06, 0x06,0x08,0x06,0x06,0x07,0x06,0x05,0x06,0x05,0x04,0x06,0x05,0x04,0x06,0x03,0x03, 0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02, 0x02,0x02,0x02,0x1b,0x18,0x20,0x25,0x21,0x2b,0x1b,0x18,0x1f,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xdc,0xde,0xe4,0x8e,0x99,0xb4,0x6a,0x76,0x9a,0x67,0x73,0x99,0x6a,0x75,0x9a, 0x6a,0x75,0x9a,0x6a,0x75,0x9a,0x6b,0x77,0x9b,0x6c,0x77,0x9c,0x6c,0x79,0x9c,0x6c, 0x77,0x9c,0x8e,0x9d,0xce,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x04,0x05,0x04,0x04,0x05, 0x04,0x05,0x06,0x06,0x06,0x07,0x0a,0x0b,0x0d,0x15,0x15,0x18,0x13,0x14,0x17,0x22, 0x23,0x25,0x27,0x27,0x2a,0x0c,0x0c,0x0f,0x1e,0x1e,0x20,0x2c,0x2c,0x2d,0x29,0x28, 0x2a,0x0a,0x0a,0x0c,0x0c,0x0a,0x0d,0x11,0x0e,0x11,0x13,0x10,0x13,0x17,0x12,0x17, 0x1a,0x15,0x1a,0x1b,0x17,0x1e,0x1b,0x16,0x1c,0x23,0x1d,0x24,0x22,0x1e,0x25,0x1a, 0x1a,0x24,0x18,0x18,0x21,0x1a,0x1a,0x22,0x1c,0x1e,0x28,0x24,0x27,0x32,0x31,0x34, 0x3e,0x3c,0x3f,0x49,0x3f,0x43,0x4e,0x3e,0x42,0x51,0x3a,0x40,0x52,0x3c,0x42,0x56, 0x40,0x44,0x5a,0x44,0x45,0x5e,0x46,0x46,0x5e,0x47,0x46,0x60,0x49,0x48,0x62,0x4a, 0x49,0x63,0x49,0x4b,0x66,0x48,0x4e,0x64,0x42,0x46,0x5c,0x41,0x40,0x56,0x43,0x42, 0x59,0x48,0x4a,0x63,0x4b,0x52,0x6d,0x59,0x61,0x78,0x52,0x59,0x74,0x4a,0x4a,0x63, 0x4f,0x46,0x5b,0x4d,0x45,0x57,0x4a,0x42,0x55,0x49,0x3f,0x52,0x48,0x3e,0x51,0x44, 0x3b,0x4b,0x3e,0x37,0x44,0x3e,0x36,0x45,0x43,0x3b,0x4c,0x4a,0x42,0x56,0x48,0x43, 0x58,0x46,0x43,0x59,0x4a,0x46,0x5c,0x4b,0x47,0x5c,0x47,0x42,0x55,0x3f,0x3a,0x4a, 0x3e,0x38,0x47,0x3a,0x32,0x3e,0x36,0x2f,0x3a,0x36,0x2f,0x3c,0x38,0x2e,0x3a,0x3c, 0x33,0x41,0x3e,0x32,0x40,0x39,0x2e,0x3a,0x3c,0x31,0x3d,0x39,0x2d,0x38,0x3b,0x2f, 0x3a,0x4d,0x3e,0x4e,0x57,0x47,0x5a,0x56,0x49,0x5d,0x55,0x4a,0x60,0x47,0x46,0x5e, 0x55,0x5b,0x71,0x5e,0x65,0x78,0x5e,0x63,0x77,0x5f,0x66,0x7a,0x5a,0x61,0x76,0x5d, 0x63,0x75,0x67,0x6c,0x7b,0x76,0x7b,0x87,0x84,0x87,0x90,0x7a,0x7e,0x88,0x5a,0x5e, 0x69,0x55,0x59,0x69,0x6b,0x71,0x86,0x69,0x68,0x7e,0x45,0x46,0x61,0x46,0x49,0x62, 0x51,0x51,0x6b,0x4a,0x4c,0x6a,0x57,0x48,0x61,0x5f,0x67,0x85,0xde,0xde,0xe0,0x2c, 0x23,0x28,0x21,0x18,0x1b,0x17,0x11,0x15,0x24,0x1a,0x23,0x36,0x2b,0x3d,0x48,0x48, 0x58,0x00,0x00,0x00,0x00,0x00,0x00,0x96,0x9c,0xac,0xac,0xb3,0xc7,0x62,0x6d,0x93, 0x69,0x74,0x98,0x7e,0x88,0xa8,0x7f,0x89,0xa6,0x80,0x8a,0xa8,0x84,0x8d,0xaa,0x82, 0x8c,0xa9,0x84,0x8d,0xa8,0x7f,0x87,0xa3,0x79,0x82,0x9c,0x71,0x7a,0x95,0x54,0x5d, 0x7d,0x52,0x5a,0x7b,0x89,0x90,0xa3,0x37,0x39,0x3e,0x1c,0x1e,0x24,0x24,0x26,0x2e, 0x2d,0x31,0x3c,0x33,0x37,0x45,0x36,0x3b,0x4a,0x38,0x3e,0x4e,0x3a,0x3f,0x54,0x42, 0x48,0x5f,0x48,0x4b,0x66,0x53,0x5a,0x75,0x66,0x6e,0x85,0x6a,0x72,0x89,0x6c,0x73, 0x88,0x5e,0x66,0x7d,0x56,0x5e,0x76,0x5a,0x62,0x79,0x52,0x5a,0x73,0x4e,0x56,0x70, 0x4b,0x4b,0x66,0x51,0x4a,0x63,0x51,0x48,0x5a,0x54,0x45,0x57,0x74,0x6e,0x83,0x7b, 0x76,0x89,0x7e,0x79,0x8d,0x7d,0x7a,0x8e,0x40,0x38,0x46,0x4e,0x45,0x58,0x56,0x4c, 0x63,0x58,0x4e,0x64,0x58,0x4c,0x62,0x59,0x4c,0x62,0x5e,0x53,0x66,0x60,0x56,0x66, 0x4f,0x45,0x55,0x47,0x3d,0x4d,0x46,0x3c,0x4c,0x45,0x3b,0x4a,0x4c,0x42,0x51,0x4e, 0x43,0x53,0x4d,0x41,0x53,0x4c,0x41,0x53,0x4b,0x40,0x51,0x4d,0x40,0x53,0x4b,0x40, 0x52,0x42,0x38,0x48,0x3d,0x33,0x40,0x3e,0x33,0x40,0x49,0x3a,0x4a,0x4a,0x3c,0x4c, 0x4e,0x3e,0x50,0x51,0x47,0x5c,0x48,0x47,0x60,0x52,0x59,0x72,0x61,0x69,0x81,0x69, 0x70,0x86,0x7a,0x82,0x93,0x76,0x7c,0x8f,0x6e,0x75,0x8a,0x71,0x78,0x8a,0x6e,0x75, 0x87,0x6e,0x74,0x86,0x70,0x76,0x88,0x6f,0x75,0x87,0x69,0x6f,0x83,0x71,0x76,0x8d, 0x8a,0x8b,0x9f,0x7c,0x7e,0x90,0x86,0x87,0x94,0x67,0x68,0x76,0x7a,0x78,0x82,0x62, 0x60,0x6b,0x4d,0x4a,0x54,0x5c,0x59,0x63,0xb9,0xbb,0xc1,0xa7,0xac,0xb7,0x86,0x8c, 0xa2,0x63,0x6b,0x87,0x4c,0x4e,0x6d,0x48,0x48,0x6a,0x4c,0x4a,0x6e,0x5a,0x50,0x6c, 0x58,0x49,0x63,0x4e,0x4f,0x73,0x3c,0x41,0x4d,0x1d,0x1f,0x2a,0x1f,0x22,0x2d,0x20, 0x22,0x2e,0x20,0x23,0x2e,0x20,0x22,0x2e,0x1e,0x20,0x2a,0x1a,0x1d,0x26,0x1c,0x1e, 0x27,0x32,0x30,0x48,0x30,0x2d,0x44,0x2f,0x2b,0x42,0x57,0x4f,0x71,0x5a,0x51,0x71, 0x5b,0x51,0x73,0x5d,0x51,0x74,0x5c,0x52,0x77,0x5c,0x52,0x77,0x5c,0x54,0x77,0x5c, 0x52,0x77,0x5b,0x53,0x77,0x5a,0x53,0x78,0x54,0x52,0x79,0x57,0x5b,0x80,0x65,0x6f, 0x90,0x88,0x89,0x99,0x2c,0x2e,0x36,0x2c,0x2e,0x36,0x2a,0x2d,0x34,0x27,0x2a,0x31, 0x22,0x25,0x2a,0x32,0x2e,0x37,0x48,0x3e,0x4a,0x6c,0x65,0x6d,0x7a,0x84,0x9f,0x60, 0x6a,0x8b,0x58,0x64,0x85,0x56,0x62,0x87,0x54,0x5e,0x86,0x52,0x5d,0x86,0x51,0x5b, 0x83,0x4f,0x5b,0x82,0x4e,0x57,0x7f,0x4c,0x55,0x7c,0x48,0x52,0x78,0x47,0x4c,0x73, 0x45,0x48,0x6f,0x45,0x46,0x6c,0x44,0x44,0x68,0x3c,0x3a,0x56,0x1e,0x1c,0x26,0x2f, 0x2c,0x3a,0x43,0x3a,0x4c,0x4f,0x43,0x55,0x54,0x46,0x57,0x4f,0x41,0x52,0x49,0x3d, 0x4d,0x3e,0x36,0x45,0x2f,0x2f,0x3c,0x3f,0x41,0x4c,0x3d,0x41,0x4a,0x3e,0x41,0x4a, 0x29,0x2b,0x35,0x52,0x48,0x5a,0x4d,0x42,0x53,0x5b,0x52,0x63,0x81,0x89,0xa1,0x4c, 0x50,0x76,0x48,0x41,0x54,0x1a,0x1d,0x25,0x1f,0x22,0x2b,0x26,0x29,0x33,0x27,0x2b, 0x36,0x28,0x2c,0x36,0x24,0x28,0x32,0x3d,0x36,0x48,0x4f,0x4d,0x6e,0x8e,0x89,0x94, 0x56,0x47,0x59,0x6b,0x5c,0x73,0x62,0x61,0x83,0x33,0x38,0x47,0x25,0x29,0x33,0x2d, 0x32,0x3d,0x2f,0x33,0x3f,0x31,0x35,0x42,0x35,0x39,0x45,0x3a,0x3e,0x4a,0x3e,0x42, 0x4f,0x3f,0x43,0x50,0x3d,0x41,0x4e,0x36,0x3a,0x46,0x32,0x36,0x43,0x36,0x3a,0x47, 0x38,0x3c,0x4a,0x33,0x37,0x45,0x2f,0x33,0x40,0x2a,0x2e,0x3a,0x28,0x2c,0x37,0x27, 0x2a,0x36,0x27,0x2a,0x35,0x25,0x28,0x33,0x20,0x23,0x2e,0x1f,0x22,0x2d,0x1d,0x1f, 0x29,0x15,0x14,0x1c,0x0f,0x0e,0x13,0x0d,0x0c,0x0f,0x0b,0x0a,0x0e,0x0a,0x09,0x0b, 0x09,0x08,0x0a,0x07,0x07,0x09,0x06,0x06,0x07,0x06,0x05,0x06,0x05,0x05,0x06,0x05, 0x04,0x06,0x04,0x04,0x05,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x02,0x02, 0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x0f,0x0d,0x11,0x3c,0x35,0x46,0x24,0x20,0x2a, 0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x0f,0x0d,0x12,0x11,0x0f,0x13,0x02,0x02,0x02,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x7b,0x7b,0x7c,0xa5,0xad,0xc3,0x6e,0x7a,0x9d,0x65,0x71, 0x96,0x65,0x72,0x98,0x67,0x73,0x99,0x69,0x74,0x99,0x6b,0x76,0x9b,0x69,0x74,0x99, 0x6a,0x75,0x9a,0x69,0x74,0x99,0x76,0x86,0xb0,0x1c,0x1c,0x1c,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x04,0x05,0x05,0x06,0x06, 0x06,0x08,0x08,0x09,0x09,0x09,0x0a,0x0a,0x0b,0x0d,0x10,0x10,0x12,0x2b,0x2c,0x2c, 0x2c,0x2c,0x2d,0x1a,0x1b,0x1c,0x25,0x26,0x29,0x19,0x19,0x1c,0x16,0x16,0x19,0x16, 0x17,0x1a,0x24,0x24,0x27,0x33,0x33,0x35,0x10,0x0f,0x13,0x15,0x12,0x17,0x1a,0x16, 0x1b,0x21,0x1b,0x22,0x29,0x22,0x2a,0x26,0x1f,0x27,0x1b,0x17,0x1e,0x1b,0x18,0x1f, 0x19,0x1a,0x22,0x1c,0x1e,0x27,0x22,0x25,0x2e,0x29,0x2b,0x34,0x30,0x33,0x3d,0x3c, 0x3f,0x49,0x4a,0x4e,0x57,0x52,0x56,0x5f,0x56,0x5a,0x63,0x51,0x55,0x5f,0x53,0x57, 0x62,0x56,0x5b,0x68,0x55,0x5a,0x6a,0x4e,0x55,0x6a,0x4f,0x56,0x6c,0x56,0x5c,0x72, 0x59,0x60,0x74,0x5e,0x64,0x77,0x5f,0x66,0x79,0x65,0x6b,0x7d,0x60,0x67,0x7b,0x4a, 0x4a,0x62,0x44,0x42,0x56,0x47,0x44,0x59,0x4b,0x4a,0x61,0x4c,0x4d,0x66,0x52,0x4e, 0x66,0x55,0x4e,0x64,0x53,0x4a,0x60,0x4f,0x47,0x5b,0x4c,0x45,0x56,0x4e,0x46,0x5a, 0x47,0x40,0x52,0x46,0x3e,0x4f,0x44,0x3f,0x52,0x46,0x45,0x5a,0x47,0x47,0x5e,0x4a, 0x49,0x5f,0x49,0x47,0x5e,0x4a,0x47,0x5e,0x4a,0x47,0x5d,0x4a,0x47,0x5e,0x4b,0x47, 0x5a,0x47,0x41,0x53,0x43,0x3d,0x4d,0x34,0x30,0x3c,0x30,0x2c,0x36,0x32,0x2b,0x36, 0x35,0x2e,0x3a,0x35,0x2d,0x3a,0x32,0x2a,0x36,0x2e,0x26,0x2f,0x30,0x27,0x31,0x32, 0x28,0x32,0x36,0x2d,0x36,0x3e,0x33,0x41,0x44,0x39,0x47,0x4d,0x40,0x50,0x56,0x47, 0x59,0x57,0x4a,0x5f,0x4f,0x4a,0x61,0x4a,0x4b,0x65,0x51,0x58,0x71,0x58,0x5f,0x76, 0x50,0x58,0x6e,0x50,0x56,0x6b,0x59,0x5f,0x70,0x6e,0x72,0x7f,0x86,0x89,0x92,0x85, 0x88,0x8f,0x62,0x65,0x6d,0x4d,0x51,0x5d,0x56,0x5c,0x73,0x4d,0x4d,0x67,0x48,0x43, 0x5d,0x3f,0x45,0x5f,0x47,0x4c,0x67,0x4b,0x50,0x6d,0x57,0x49,0x64,0x55,0x5d,0x80, 0xc5,0xc8,0xd1,0x54,0x4c,0x50,0x1f,0x17,0x1a,0x1e,0x16,0x1c,0x1e,0x16,0x1f,0x33, 0x27,0x36,0x3e,0x3e,0x53,0x04,0x04,0x04,0x00,0x00,0x00,0x5e,0x62,0x6c,0xae,0xb6, 0xc8,0x76,0x82,0xa3,0x5b,0x66,0x8d,0x77,0x82,0xa3,0x7a,0x84,0xa5,0x7c,0x88,0xa6, 0x81,0x8b,0xa9,0x85,0x8e,0xab,0x83,0x8c,0xa9,0x83,0x8c,0xa8,0x7f,0x88,0xa2,0x7a, 0x84,0x9f,0x6a,0x73,0x90,0x4f,0x58,0x7c,0x76,0x7f,0x99,0x65,0x68,0x70,0x16,0x19, 0x1e,0x1e,0x20,0x27,0x26,0x29,0x32,0x2e,0x32,0x3e,0x34,0x38,0x46,0x34,0x39,0x47, 0x37,0x3c,0x4c,0x46,0x4c,0x5e,0x4e,0x55,0x6a,0x5a,0x62,0x7a,0x63,0x6b,0x84,0x65, 0x6e,0x86,0x67,0x6f,0x86,0x6b,0x73,0x88,0x6e,0x76,0x8a,0x7c,0x82,0x93,0x70,0x77, 0x8a,0x75,0x7b,0x8e,0x6e,0x76,0x89,0x4b,0x4f,0x6a,0x47,0x46,0x5f,0x52,0x4b,0x63, 0x62,0x63,0x80,0x74,0x75,0x8f,0x7d,0x78,0x90,0x7b,0x74,0x89,0x52,0x47,0x57,0x46, 0x3e,0x4e,0x53,0x49,0x5e,0x57,0x4c,0x63,0x5a,0x4e,0x62,0x5a,0x4b,0x60,0x59,0x4c, 0x61,0x61,0x57,0x6a,0x6a,0x60,0x71,0x52,0x46,0x5a,0x4b,0x40,0x53,0x48,0x3d,0x4e, 0x50,0x46,0x58,0x5c,0x54,0x64,0x47,0x3e,0x4e,0x45,0x3d,0x4d,0x44,0x3b,0x4b,0x42, 0x38,0x48,0x43,0x39,0x49,0x42,0x38,0x48,0x3a,0x33,0x41,0x36,0x2f,0x3c,0x40,0x36, 0x44,0x47,0x3a,0x49,0x49,0x3b,0x4a,0x4b,0x3f,0x4f,0x4e,0x44,0x59,0x4a,0x47,0x62, 0x4e,0x55,0x71,0x56,0x5e,0x79,0x6c,0x74,0x8a,0x87,0x8c,0x9c,0x76,0x7c,0x90,0x6e, 0x76,0x8a,0x6b,0x72,0x86,0x66,0x6e,0x82,0x5d,0x64,0x7b,0x56,0x5e,0x76,0x70,0x77, 0x8a,0x83,0x89,0x9e,0x89,0x8a,0x9d,0x86,0x87,0x97,0x8f,0x8f,0x9c,0x82,0x82,0x8c, 0x60,0x5f,0x6c,0x63,0x62,0x6d,0x5c,0x5a,0x65,0x64,0x63,0x6e,0xb3,0xb6,0xbe,0xa0, 0xa5,0xb2,0x82,0x89,0x9e,0x5e,0x66,0x83,0x4c,0x4e,0x6d,0x48,0x48,0x6a,0x4b,0x4a, 0x6e,0x53,0x4f,0x70,0x56,0x46,0x60,0x5a,0x4e,0x6a,0x47,0x50,0x6c,0x1e,0x20,0x2a, 0x21,0x24,0x2e,0x21,0x24,0x2e,0x20,0x23,0x2e,0x20,0x23,0x2e,0x1e,0x20,0x2a,0x1c, 0x1e,0x27,0x1a,0x1c,0x24,0x32,0x2f,0x47,0x2f,0x2e,0x44,0x31,0x2d,0x44,0x57,0x4f, 0x72,0x5b,0x51,0x71,0x5d,0x51,0x73,0x5b,0x51,0x76,0x5e,0x52,0x75,0x5c,0x53,0x77, 0x5d,0x54,0x77,0x5d,0x54,0x78,0x5b,0x53,0x77,0x5a,0x53,0x77,0x57,0x53,0x79,0x58, 0x5a,0x7f,0x67,0x70,0x91,0x89,0x8b,0x9b,0x30,0x32,0x3a,0x2e,0x31,0x38,0x2f,0x32, 0x39,0x2d,0x2f,0x36,0x28,0x2a,0x30,0x31,0x30,0x39,0x49,0x40,0x4b,0x64,0x5d,0x67, 0x77,0x81,0x9d,0x5e,0x68,0x87,0x56,0x61,0x82,0x57,0x62,0x89,0x53,0x5d,0x85,0x53, 0x5d,0x85,0x52,0x5c,0x84,0x4f,0x5a,0x83,0x4e,0x5a,0x81,0x4c,0x55,0x7d,0x4a,0x52, 0x79,0x47,0x4c,0x73,0x45,0x48,0x6f,0x45,0x47,0x6c,0x45,0x44,0x69,0x40,0x3d,0x5b, 0x21,0x1e,0x26,0x34,0x30,0x3e,0x47,0x3e,0x4e,0x50,0x42,0x52,0x53,0x44,0x56,0x54, 0x46,0x56,0x4c,0x40,0x50,0x42,0x3a,0x49,0x36,0x31,0x41,0x2a,0x2a,0x3a,0x28,0x2c, 0x39,0x2a,0x2e,0x38,0x29,0x2c,0x35,0x4f,0x47,0x57,0x54,0x49,0x5a,0x53,0x47,0x58, 0x92,0x97,0xab,0x4e,0x58,0x7d,0x52,0x49,0x5f,0x1a,0x1c,0x24,0x1e,0x20,0x29,0x21, 0x24,0x2e,0x23,0x26,0x30,0x22,0x25,0x2e,0x20,0x22,0x2c,0x42,0x3a,0x4d,0x4c,0x56, 0x79,0x81,0x78,0x86,0x67,0x57,0x6e,0x61,0x60,0x81,0x39,0x40,0x52,0x1e,0x20,0x29, 0x2a,0x2e,0x39,0x2e,0x33,0x40,0x32,0x36,0x42,0x36,0x3a,0x46,0x3c,0x40,0x4d,0x3e, 0x43,0x51,0x43,0x48,0x56,0x46,0x4b,0x59,0x43,0x48,0x56,0x3e,0x42,0x4f,0x3a,0x3e, 0x4c,0x36,0x3c,0x4a,0x3a,0x3e,0x4c,0x35,0x3a,0x47,0x32,0x36,0x44,0x30,0x34,0x42, 0x2d,0x31,0x3d,0x2a,0x2e,0x3b,0x29,0x2c,0x39,0x26,0x29,0x34,0x22,0x26,0x31,0x4a, 0x4c,0x55,0x1d,0x1e,0x29,0x16,0x15,0x1d,0x11,0x10,0x16,0x0e,0x0d,0x11,0x0d,0x0b, 0x0f,0x0a,0x0a,0x0c,0x09,0x08,0x0b,0x08,0x07,0x0a,0x07,0x07,0x09,0x06,0x06,0x07, 0x05,0x05,0x06,0x05,0x04,0x06,0x05,0x04,0x06,0x03,0x03,0x04,0x03,0x03,0x04,0x03, 0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x1a,0x17, 0x1e,0x2f,0x2a,0x37,0x07,0x06,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0x0d,0x12,0x27,0x22,0x2d,0x27,0x22, 0x2e,0x0d,0x0b,0x0f,0x00,0x00,0x00,0x1e,0x1a,0x22,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x22,0xb8,0xbe,0xd0,0x74, 0x80,0xa2,0x62,0x6d,0x94,0x62,0x6e,0x94,0x64,0x6f,0x95,0x64,0x71,0x96,0x64,0x71, 0x96,0x67,0x73,0x98,0x67,0x73,0x98,0x65,0x72,0x98,0x66,0x72,0x99,0x75,0x84,0xb2, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x04,0x05,0x05,0x06, 0x06,0x06,0x0e,0x0e,0x0f,0x1a,0x1a,0x1c,0x1f,0x1f,0x21,0x26,0x26,0x27,0x23,0x24, 0x26,0x1a,0x1a,0x1d,0x18,0x19,0x1b,0x17,0x18,0x1b,0x21,0x22,0x24,0x33,0x33,0x35, 0x2e,0x2f,0x32,0x17,0x18,0x1a,0x0b,0x0c,0x0f,0x50,0x50,0x53,0x26,0x25,0x2a,0x16, 0x14,0x1a,0x1f,0x1a,0x21,0x27,0x22,0x2c,0x26,0x20,0x28,0x22,0x1e,0x26,0x17,0x16, 0x1d,0x18,0x1a,0x22,0x1d,0x1f,0x26,0x2b,0x2e,0x35,0x3a,0x3d,0x44,0x4c,0x4e,0x56, 0x58,0x5b,0x64,0x5e,0x62,0x6d,0x64,0x68,0x74,0x66,0x6a,0x76,0x6a,0x6d,0x78,0x6d, 0x71,0x7a,0x6c,0x70,0x7a,0x6c,0x6f,0x7b,0x69,0x6e,0x7a,0x67,0x6c,0x7a,0x71,0x76, 0x86,0x7a,0x80,0x8c,0x7d,0x81,0x8e,0x81,0x85,0x90,0x7b,0x7f,0x8b,0x79,0x7e,0x8c, 0x76,0x7c,0x89,0x5d,0x65,0x7b,0x53,0x54,0x6e,0x55,0x51,0x68,0x4c,0x4a,0x60,0x47, 0x46,0x5c,0x46,0x45,0x59,0x4a,0x46,0x59,0x4c,0x46,0x58,0x4d,0x46,0x58,0x4f,0x4a, 0x5d,0x49,0x45,0x58,0x44,0x42,0x57,0x47,0x47,0x5e,0x50,0x55,0x6e,0x59,0x61,0x76, 0x55,0x5c,0x75,0x51,0x52,0x6b,0x4f,0x4f,0x67,0x4c,0x4e,0x67,0x4e,0x52,0x6a,0x4b, 0x51,0x67,0x48,0x4a,0x60,0x45,0x43,0x59,0x41,0x3f,0x54,0x34,0x32,0x42,0x2e,0x2c, 0x3a,0x2a,0x29,0x36,0x2e,0x2a,0x36,0x32,0x2c,0x38,0x34,0x2b,0x37,0x32,0x2a,0x36, 0x36,0x2c,0x38,0x39,0x2f,0x3c,0x3e,0x32,0x40,0x40,0x35,0x42,0x3e,0x32,0x3f,0x41, 0x36,0x44,0x44,0x38,0x46,0x48,0x3b,0x4a,0x55,0x46,0x58,0x5a,0x4d,0x62,0x52,0x4b, 0x63,0x49,0x49,0x63,0x48,0x4e,0x67,0x41,0x47,0x5e,0x47,0x4e,0x61,0x55,0x5a,0x6b, 0x6e,0x72,0x7f,0x7b,0x7e,0x87,0x7a,0x7c,0x82,0x62,0x64,0x6f,0x5a,0x60,0x76,0x4a, 0x4b,0x64,0x44,0x3e,0x58,0x40,0x48,0x65,0x47,0x4d,0x6b,0x4a,0x52,0x71,0x54,0x49, 0x66,0x51,0x5b,0x7d,0x91,0x9a,0xae,0x76,0x72,0x75,0x1d,0x14,0x18,0x27,0x1d,0x23, 0x1b,0x13,0x1b,0x2f,0x24,0x31,0x33,0x34,0x4b,0x23,0x24,0x26,0x00,0x00,0x00,0x22, 0x23,0x27,0xb0,0xb7,0xca,0x92,0x9b,0xb7,0x52,0x5c,0x85,0x79,0x84,0xa5,0x7a,0x86, 0xa6,0x7a,0x84,0xa5,0x81,0x8b,0xa9,0x80,0x8a,0xa8,0x80,0x8c,0xa8,0x82,0x8c,0xa9, 0x7f,0x89,0xa6,0x7a,0x84,0xa1,0x72,0x7c,0x9b,0x51,0x5b,0x7f,0x5d,0x68,0x89,0x83, 0x89,0x9c,0x17,0x19,0x1e,0x24,0x26,0x30,0x2b,0x2f,0x3b,0x2e,0x32,0x40,0x2d,0x31, 0x3e,0x2f,0x34,0x41,0x3b,0x40,0x4e,0x4e,0x53,0x62,0x5b,0x61,0x71,0x65,0x6c,0x81, 0x69,0x70,0x87,0x6a,0x72,0x89,0x6e,0x75,0x8b,0x72,0x79,0x8e,0x79,0x80,0x93,0x82, 0x88,0x99,0x83,0x8a,0x9a,0x94,0x99,0xa5,0x88,0x8e,0x9d,0x5f,0x67,0x7f,0x5b,0x64, 0x7c,0x6c,0x71,0x88,0x71,0x78,0x93,0x86,0x8e,0xa8,0x78,0x81,0x9d,0x72,0x73,0x91, 0x61,0x58,0x6f,0x44,0x3e,0x52,0x4d,0x43,0x58,0x52,0x48,0x5d,0x56,0x4b,0x62,0x5a, 0x4e,0x65,0x5b,0x50,0x67,0x5b,0x50,0x68,0x59,0x4e,0x66,0x57,0x4b,0x61,0x54,0x47, 0x5d,0x53,0x47,0x5d,0x52,0x47,0x5d,0x5f,0x55,0x67,0x5c,0x52,0x64,0x4c,0x42,0x55, 0x47,0x3e,0x4f,0x46,0x3c,0x4d,0x45,0x3c,0x4d,0x42,0x39,0x49,0x40,0x37,0x47,0x35, 0x2f,0x3b,0x3c,0x34,0x42,0x42,0x37,0x44,0x48,0x3a,0x4a,0x4a,0x3c,0x4c,0x4d,0x41, 0x52,0x4d,0x44,0x59,0x4d,0x4c,0x66,0x4f,0x50,0x6e,0x5d,0x66,0x7e,0x71,0x78,0x8d, 0x7e,0x84,0x96,0x75,0x7c,0x8e,0x6b,0x72,0x86,0x66,0x6e,0x82,0x5f,0x66,0x7d,0x56, 0x5e,0x76,0x68,0x70,0x85,0x8f,0x94,0xa6,0x99,0x99,0xa8,0x8f,0x8e,0x9b,0x8f,0x8e, 0x99,0x81,0x80,0x8a,0x6d,0x6b,0x76,0x61,0x60,0x6d,0x62,0x62,0x6d,0x6b,0x6a,0x75, 0xb4,0xb6,0xc0,0x98,0x9d,0xab,0x6f,0x78,0x8f,0x54,0x5e,0x7c,0x4c,0x4b,0x6c,0x4b, 0x4a,0x6c,0x52,0x4e,0x6f,0x55,0x50,0x73,0x5c,0x4c,0x68,0x54,0x43,0x5d,0x59,0x52, 0x72,0x34,0x38,0x46,0x20,0x23,0x2e,0x22,0x25,0x30,0x22,0x24,0x2f,0x20,0x23,0x2e, 0x1e,0x22,0x2b,0x1d,0x1f,0x29,0x1a,0x1e,0x26,0x32,0x31,0x48,0x31,0x2e,0x44,0x3b, 0x36,0x4f,0x5a,0x51,0x71,0x5b,0x51,0x72,0x5c,0x51,0x73,0x5e,0x51,0x74,0x5e,0x52, 0x75,0x5d,0x54,0x77,0x5d,0x54,0x78,0x5c,0x52,0x78,0x5b,0x53,0x77,0x5b,0x54,0x78, 0x57,0x53,0x79,0x56,0x59,0x7e,0x64,0x6f,0x90,0x8f,0x92,0xa1,0x32,0x35,0x3c,0x34, 0x36,0x3e,0x36,0x38,0x3f,0x32,0x36,0x3d,0x30,0x32,0x3a,0x34,0x33,0x3b,0x4b,0x42, 0x4e,0x64,0x5c,0x67,0x7e,0x87,0xa2,0x5d,0x68,0x87,0x59,0x63,0x85,0x56,0x62,0x88, 0x53,0x5d,0x85,0x53,0x5d,0x85,0x50,0x5b,0x84,0x4f,0x5b,0x83,0x4f,0x5b,0x81,0x4c, 0x55,0x7d,0x4b,0x54,0x7b,0x48,0x4e,0x75,0x46,0x4b,0x70,0x45,0x46,0x6b,0x46,0x45, 0x6a,0x40,0x3d,0x5a,0x23,0x20,0x2a,0x3c,0x35,0x45,0x4c,0x41,0x52,0x51,0x42,0x52, 0x52,0x43,0x55,0x56,0x47,0x5a,0x4f,0x43,0x56,0x46,0x3e,0x4e,0x3b,0x36,0x47,0x32, 0x32,0x43,0x2e,0x30,0x40,0x2e,0x32,0x3e,0x2e,0x31,0x3a,0x3d,0x3a,0x47,0x59,0x4d, 0x60,0x57,0x49,0x5c,0x87,0x88,0x9a,0x52,0x5c,0x80,0x57,0x4c,0x67,0x19,0x1b,0x23, 0x1e,0x21,0x2a,0x20,0x23,0x2e,0x21,0x23,0x2e,0x21,0x24,0x2e,0x1f,0x22,0x2c,0x45, 0x3c,0x51,0x59,0x64,0x83,0x6e,0x61,0x77,0x66,0x5f,0x7e,0x47,0x4e,0x65,0x1d,0x1e, 0x27,0x26,0x29,0x33,0x2e,0x32,0x3e,0x33,0x38,0x44,0x36,0x3b,0x48,0x3d,0x41,0x4e, 0x42,0x46,0x54,0x48,0x4d,0x5a,0x4d,0x52,0x5f,0x4c,0x50,0x5e,0x46,0x4b,0x59,0x42, 0x46,0x55,0x3c,0x41,0x50,0x3a,0x3e,0x4e,0x3a,0x3f,0x4e,0x39,0x3e,0x4d,0x36,0x3c, 0x4a,0x36,0x3a,0x49,0x35,0x3a,0x47,0x34,0x39,0x46,0x2f,0x34,0x41,0x2a,0x2e,0x3b, 0x23,0x27,0x33,0x1f,0x20,0x2b,0x1c,0x1c,0x26,0x1e,0x1d,0x25,0x17,0x15,0x1c,0x21, 0x1f,0x24,0x16,0x15,0x19,0x0c,0x0b,0x0f,0x0a,0x09,0x0c,0x09,0x08,0x0a,0x07,0x06, 0x09,0x06,0x06,0x07,0x06,0x05,0x06,0x05,0x05,0x06,0x05,0x04,0x06,0x03,0x03,0x04, 0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x24,0x20,0x2a,0x14,0x12,0x17,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x0c,0x0b,0x0f,0x06,0x05,0x07,0x00,0x00,0x00,0x1d,0x1a,0x22,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xc9,0xcc,0xd5,0x83,0x8d,0xac,0x64,0x71,0x96,0x5e,0x6b,0x92,0x63,0x6e,0x95,0x62, 0x6e,0x94,0x62,0x6d,0x94,0x64,0x71,0x96,0x64,0x71,0x96,0x64,0x6f,0x95,0x63,0x6f, 0x95,0x75,0x82,0xb0,0x0d,0x0f,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x04,0x04,0x04, 0x06,0x06,0x06,0x0a,0x0b,0x0c,0x1e,0x1e,0x20,0x36,0x37,0x3a,0x52,0x53,0x56,0x5f, 0x60,0x62,0x5a,0x5a,0x5d,0x42,0x44,0x46,0x3a,0x3b,0x3e,0x37,0x39,0x3d,0x32,0x33, 0x37,0x38,0x39,0x3d,0x28,0x2a,0x2d,0x18,0x1a,0x1c,0x0f,0x10,0x12,0x21,0x23,0x25, 0x4a,0x4b,0x4e,0x1f,0x1e,0x24,0x1b,0x18,0x20,0x21,0x1d,0x26,0x1e,0x1b,0x24,0x1b, 0x1e,0x27,0x26,0x29,0x30,0x33,0x35,0x3b,0x3a,0x3d,0x43,0x4f,0x51,0x57,0x64,0x66, 0x6c,0x73,0x76,0x7c,0x7e,0x80,0x88,0x7a,0x7e,0x88,0x75,0x79,0x85,0x76,0x7a,0x86, 0x7f,0x83,0x8c,0x87,0x8a,0x91,0x82,0x85,0x8d,0x77,0x7b,0x85,0x7b,0x7e,0x87,0x81, 0x85,0x8d,0x89,0x8b,0x94,0x8b,0x8e,0x98,0x8d,0x90,0x9a,0x8f,0x93,0x9c,0x8b,0x8e, 0x99,0x86,0x8a,0x96,0x81,0x85,0x91,0x73,0x78,0x89,0x56,0x5e,0x76,0x55,0x56,0x6e, 0x55,0x55,0x6e,0x55,0x55,0x6e,0x53,0x53,0x6d,0x52,0x52,0x6a,0x55,0x51,0x68,0x53, 0x51,0x69,0x4a,0x4b,0x63,0x4b,0x51,0x67,0x5c,0x61,0x76,0x63,0x6a,0x80,0x5f,0x68, 0x7d,0x62,0x6a,0x7f,0x5d,0x65,0x7c,0x58,0x5f,0x7a,0x5b,0x63,0x7d,0x5e,0x66,0x7e, 0x66,0x6d,0x82,0x63,0x6a,0x7e,0x57,0x5e,0x75,0x4c,0x52,0x6a,0x49,0x4e,0x61,0x47, 0x4a,0x5a,0x3e,0x3f,0x4e,0x36,0x36,0x43,0x2e,0x2b,0x39,0x34,0x2d,0x3a,0x32,0x2b, 0x36,0x32,0x2a,0x36,0x35,0x2f,0x3a,0x3a,0x32,0x41,0x41,0x3a,0x49,0x42,0x39,0x46, 0x3f,0x34,0x42,0x43,0x37,0x46,0x3a,0x2f,0x3b,0x33,0x2a,0x34,0x36,0x2c,0x37,0x42, 0x35,0x42,0x55,0x45,0x56,0x57,0x4b,0x60,0x4a,0x45,0x5c,0x40,0x40,0x56,0x3d,0x42, 0x57,0x41,0x46,0x5c,0x4d,0x53,0x66,0x5b,0x61,0x6f,0x73,0x76,0x7f,0x77,0x7a,0x81, 0x7c,0x82,0x96,0x6c,0x70,0x8a,0x5b,0x59,0x6f,0x4a,0x4f,0x69,0x45,0x4b,0x68,0x48, 0x50,0x6e,0x56,0x48,0x65,0x4b,0x54,0x78,0x77,0x81,0x9e,0x98,0x96,0x99,0x1a,0x11, 0x14,0x25,0x1a,0x21,0x29,0x1e,0x25,0x26,0x1d,0x27,0x2f,0x2d,0x45,0x3f,0x40,0x45, 0x00,0x00,0x00,0x00,0x00,0x00,0x9c,0xa2,0xb3,0xa6,0xae,0xc3,0x53,0x5e,0x87,0x66, 0x73,0x97,0x78,0x82,0xa3,0x77,0x82,0xa3,0x79,0x84,0xa5,0x7e,0x89,0xa7,0x80,0x89, 0xa7,0x7c,0x87,0xa5,0x7a,0x83,0xa0,0x76,0x80,0x9e,0x72,0x7c,0x9a,0x58,0x60,0x85, 0x54,0x58,0x7d,0x7f,0x82,0x9b,0x3b,0x3e,0x48,0x34,0x38,0x46,0x35,0x3a,0x4a,0x35, 0x3a,0x4a,0x30,0x34,0x43,0x33,0x37,0x46,0x3f,0x45,0x54,0x51,0x56,0x65,0x5c,0x61, 0x71,0x5e,0x65,0x79,0x5a,0x62,0x7a,0x5a,0x63,0x7d,0x5e,0x66,0x81,0x64,0x6b,0x85, 0x76,0x7d,0x91,0x84,0x8a,0x9b,0x8a,0x90,0xa0,0x9e,0xa2,0xad,0x86,0x8c,0x9c,0x71, 0x78,0x8e,0x7b,0x82,0x95,0x85,0x8a,0x9d,0x8b,0x90,0xa4,0x9e,0xa6,0xbd,0x91,0x9a, 0xb3,0x7b,0x85,0xa1,0x66,0x69,0x87,0x49,0x4d,0x67,0x4a,0x4a,0x64,0x4c,0x49,0x62, 0x50,0x4a,0x62,0x4f,0x4a,0x64,0x51,0x4d,0x68,0x54,0x50,0x6a,0x57,0x50,0x6a,0x5d, 0x52,0x6a,0x5d,0x51,0x69,0x5a,0x4f,0x64,0x59,0x4c,0x62,0x58,0x4d,0x63,0x6b,0x62, 0x73,0x53,0x49,0x5d,0x51,0x46,0x5b,0x51,0x45,0x59,0x4f,0x44,0x59,0x4c,0x42,0x55, 0x4b,0x40,0x52,0x49,0x3f,0x51,0x3f,0x36,0x45,0x41,0x38,0x46,0x47,0x3a,0x49,0x4d, 0x3e,0x4e,0x4e,0x41,0x52,0x4b,0x42,0x56,0x4a,0x4c,0x64,0x4e,0x4e,0x6a,0x55,0x5e, 0x78,0x62,0x6a,0x82,0x6d,0x73,0x89,0x79,0x7e,0x91,0x71,0x77,0x8a,0x6a,0x70,0x85, 0x66,0x6d,0x82,0x60,0x67,0x7c,0x69,0x6f,0x83,0x92,0x97,0xa7,0xa8,0xa7,0xb6,0x8d, 0x8d,0x9a,0x84,0x84,0x8e,0x7e,0x7c,0x86,0x6e,0x6e,0x79,0x72,0x71,0x7d,0x62,0x62, 0x6e,0x6f,0x6f,0x7a,0xb4,0xb8,0xc2,0x9b,0xa0,0xaf,0x6c,0x75,0x8c,0x4b,0x52,0x72, 0x49,0x49,0x6a,0x52,0x4d,0x6e,0x55,0x4f,0x70,0x5d,0x52,0x70,0x5d,0x52,0x70,0x53, 0x44,0x5d,0x56,0x4a,0x63,0x43,0x4a,0x67,0x21,0x24,0x2e,0x22,0x25,0x30,0x22,0x25, 0x30,0x20,0x23,0x2e,0x1e,0x22,0x2b,0x1d,0x20,0x29,0x1a,0x1d,0x25,0x31,0x30,0x47, 0x33,0x2f,0x46,0x57,0x50,0x71,0x58,0x51,0x73,0x59,0x51,0x74,0x5d,0x51,0x73,0x5e, 0x52,0x75,0x5d,0x53,0x77,0x5d,0x53,0x77,0x5c,0x53,0x77,0x5c,0x52,0x78,0x5d,0x54, 0x79,0x5c,0x53,0x77,0x57,0x53,0x79,0x57,0x59,0x7d,0x65,0x6f,0x90,0x91,0x94,0xa2, 0x36,0x3a,0x41,0x39,0x3b,0x43,0x3a,0x3d,0x45,0x3a,0x3d,0x45,0x35,0x37,0x3e,0x34, 0x35,0x3b,0x4e,0x45,0x52,0x5b,0x54,0x5e,0x85,0x8d,0xa6,0x5e,0x67,0x86,0x59,0x66, 0x86,0x58,0x63,0x87,0x54,0x5e,0x85,0x53,0x5d,0x83,0x52,0x5d,0x84,0x52,0x5d,0x84, 0x4e,0x5a,0x81,0x4c,0x57,0x80,0x4b,0x55,0x7c,0x4a,0x50,0x77,0x47,0x4c,0x72,0x45, 0x47,0x6d,0x47,0x46,0x6a,0x43,0x3e,0x5b,0x2e,0x28,0x32,0x42,0x3a,0x4a,0x4e,0x42, 0x53,0x51,0x42,0x53,0x53,0x44,0x55,0x55,0x48,0x5a,0x4f,0x45,0x57,0x4a,0x40,0x52, 0x3f,0x3a,0x4d,0x36,0x36,0x49,0x33,0x34,0x46,0x31,0x36,0x44,0x32,0x36,0x42,0x2a, 0x2d,0x36,0x5b,0x50,0x63,0x5a,0x4d,0x60,0x74,0x71,0x85,0x56,0x61,0x84,0x58,0x51, 0x72,0x1a,0x1c,0x24,0x1e,0x21,0x2a,0x20,0x23,0x2e,0x20,0x23,0x2e,0x1f,0x22,0x2d, 0x1f,0x22,0x2c,0x4f,0x44,0x5c,0x6e,0x78,0x93,0x64,0x5f,0x7c,0x57,0x60,0x7e,0x1e, 0x20,0x29,0x25,0x28,0x33,0x2e,0x32,0x3e,0x33,0x37,0x44,0x38,0x3d,0x4a,0x45,0x4a, 0x56,0x51,0x56,0x62,0x72,0x77,0x81,0x8d,0x90,0x98,0x6d,0x71,0x7d,0x55,0x5a,0x67, 0x49,0x4e,0x5c,0x44,0x4a,0x58,0x41,0x46,0x56,0x40,0x45,0x55,0x3f,0x44,0x54,0x3d, 0x42,0x52,0x3a,0x3f,0x4f,0x3a,0x3e,0x4e,0x3b,0x3f,0x4e,0x3b,0x40,0x4f,0x38,0x3d, 0x4b,0x34,0x39,0x46,0x2e,0x32,0x40,0x26,0x2a,0x37,0x2a,0x2a,0x35,0x53,0x53,0x59, 0x5c,0x5b,0x5f,0x52,0x50,0x55,0x34,0x33,0x36,0x2e,0x2d,0x30,0x16,0x16,0x18,0x09, 0x08,0x0a,0x07,0x06,0x09,0x07,0x06,0x08,0x06,0x06,0x07,0x05,0x05,0x06,0x05,0x04, 0x06,0x04,0x04,0x05,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x02,0x02,0x03, 0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x0e,0x12,0x10,0x0e,0x12,0x02, 0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x76,0x77,0x79,0x9a,0xa2,0xbb,0x6a,0x75,0x9a,0x5e,0x6b,0x92, 0x5e,0x6b,0x92,0x60,0x6c,0x93,0x62,0x6d,0x94,0x62,0x6d,0x94,0x60,0x6d,0x93,0x62, 0x6d,0x94,0x60,0x6c,0x93,0x66,0x72,0x9b,0x58,0x63,0x88,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x03,0x03, 0x03,0x05,0x05,0x06,0x08,0x08,0x09,0x13,0x13,0x15,0x33,0x35,0x37,0x63,0x65,0x68, 0x82,0x83,0x86,0x87,0x88,0x8c,0x7f,0x81,0x85,0x68,0x69,0x6d,0x5b,0x5e,0x62,0x5a, 0x5d,0x62,0x5a,0x5b,0x61,0x58,0x59,0x5e,0x4a,0x4c,0x51,0x32,0x34,0x38,0x21,0x22, 0x24,0x17,0x18,0x1a,0x39,0x39,0x3c,0x39,0x3a,0x3f,0x29,0x2a,0x32,0x22,0x26,0x2e, 0x29,0x2b,0x33,0x37,0x3a,0x41,0x4d,0x4f,0x57,0x53,0x56,0x5e,0x5e,0x61,0x69,0x6e, 0x72,0x79,0x7b,0x7e,0x86,0x88,0x8a,0x92,0x90,0x92,0x99,0x89,0x8c,0x95,0x7d,0x82, 0x8d,0x7f,0x83,0x8e,0x88,0x8b,0x94,0x8f,0x91,0x97,0x86,0x89,0x90,0x81,0x84,0x8e, 0x86,0x89,0x92,0x8d,0x8f,0x98,0x92,0x95,0x9c,0x94,0x97,0xa1,0x96,0x9a,0xa3,0x96, 0x98,0xa2,0x93,0x97,0xa0,0x91,0x93,0x9d,0x8c,0x8f,0x9a,0x80,0x84,0x92,0x70,0x76, 0x88,0x61,0x69,0x7e,0x5a,0x61,0x7a,0x5b,0x64,0x7a,0x5f,0x66,0x7e,0x58,0x5e,0x76, 0x54,0x5b,0x72,0x5d,0x62,0x78,0x66,0x6c,0x81,0x6e,0x73,0x87,0x75,0x7a,0x8c,0x76, 0x7c,0x8d,0x77,0x7d,0x8e,0x77,0x7e,0x8f,0x74,0x7a,0x8c,0x71,0x77,0x8b,0x72,0x79, 0x8d,0x7b,0x81,0x93,0x7c,0x82,0x92,0x7a,0x80,0x92,0x76,0x7c,0x8d,0x69,0x6f,0x82, 0x62,0x67,0x78,0x57,0x5b,0x6b,0x4d,0x50,0x60,0x46,0x47,0x58,0x3a,0x38,0x4a,0x3a, 0x32,0x41,0x33,0x2c,0x39,0x30,0x29,0x35,0x2f,0x2a,0x35,0x30,0x2a,0x36,0x32,0x2d, 0x3a,0x38,0x30,0x3f,0x41,0x37,0x47,0x46,0x3c,0x4c,0x46,0x38,0x47,0x3c,0x32,0x3e, 0x33,0x29,0x33,0x33,0x2a,0x34,0x3e,0x32,0x3e,0x4e,0x3f,0x4f,0x52,0x47,0x5b,0x43, 0x41,0x57,0x42,0x42,0x5a,0x42,0x45,0x5d,0x3e,0x45,0x5a,0x41,0x47,0x5b,0x50,0x56, 0x66,0x62,0x66,0x71,0x87,0x8d,0xa2,0x91,0x98,0xae,0x78,0x74,0x87,0x58,0x5d,0x74, 0x48,0x4e,0x6a,0x47,0x4f,0x6b,0x4b,0x43,0x61,0x47,0x4a,0x6d,0x6a,0x74,0x95,0xc0, 0xbe,0xc0,0x18,0x10,0x13,0x22,0x18,0x1d,0x2d,0x21,0x28,0x27,0x1d,0x26,0x36,0x2d, 0x41,0x52,0x52,0x5d,0x00,0x00,0x00,0x00,0x00,0x00,0x5f,0x62,0x6d,0xae,0xb4,0xc9, 0x62,0x6d,0x93,0x53,0x5e,0x88,0x78,0x82,0xa3,0x72,0x7e,0xa0,0x78,0x83,0xa3,0x79, 0x84,0xa4,0x7b,0x85,0xa4,0x79,0x84,0xa2,0x71,0x77,0x93,0x6f,0x74,0x8e,0x6c,0x72, 0x8d,0x60,0x66,0x83,0x50,0x4a,0x6e,0x6b,0x6f,0x8c,0x5d,0x5e,0x6e,0x2c,0x30,0x3e, 0x2f,0x34,0x43,0x2f,0x33,0x42,0x2c,0x2f,0x3d,0x2e,0x32,0x41,0x36,0x3b,0x4a,0x42, 0x46,0x57,0x4d,0x52,0x65,0x4e,0x55,0x69,0x4a,0x52,0x6a,0x4e,0x55,0x6f,0x4e,0x54, 0x70,0x55,0x5c,0x76,0x6e,0x74,0x8a,0x80,0x86,0x98,0x7d,0x82,0x96,0x7e,0x83,0x96, 0x6e,0x75,0x8b,0x74,0x7b,0x90,0x86,0x8c,0x9d,0x85,0x8b,0x9c,0x97,0x99,0xa9,0xa5, 0xac,0xc1,0xa3,0xab,0xc0,0x91,0x99,0xb2,0x82,0x8a,0xa5,0x5c,0x63,0x7b,0x5a,0x62, 0x7a,0x52,0x5a,0x76,0x50,0x50,0x6d,0x51,0x4f,0x6c,0x51,0x53,0x6f,0x50,0x50,0x6e, 0x53,0x50,0x6c,0x5a,0x52,0x6c,0x5f,0x53,0x6c,0x60,0x53,0x6a,0x5f,0x52,0x69,0x5b, 0x51,0x69,0x69,0x5e,0x73,0x5e,0x54,0x67,0x53,0x48,0x5c,0x52,0x47,0x5b,0x52,0x46, 0x5b,0x51,0x46,0x5a,0x4f,0x44,0x57,0x4f,0x44,0x55,0x50,0x44,0x57,0x46,0x3c,0x4c, 0x43,0x3a,0x49,0x51,0x44,0x55,0x50,0x42,0x53,0x4d,0x40,0x51,0x4d,0x46,0x5a,0x4b, 0x4e,0x69,0x5a,0x62,0x7b,0x5e,0x66,0x7f,0x64,0x6c,0x84,0x68,0x70,0x86,0x68,0x6f, 0x84,0x6a,0x70,0x85,0x6d,0x73,0x87,0x6e,0x74,0x87,0x71,0x76,0x88,0x90,0x94,0xa2, 0xaa,0xa9,0xb7,0x9f,0x9e,0xab,0x8e,0x8e,0x99,0x82,0x81,0x8b,0x6f,0x6e,0x7a,0x71, 0x71,0x7c,0x68,0x68,0x73,0x66,0x66,0x71,0xb5,0xb9,0xc2,0xa3,0xa8,0xb7,0x76,0x7e, 0x96,0x4d,0x50,0x71,0x4b,0x4a,0x6b,0x54,0x4d,0x6e,0x5c,0x51,0x6f,0x5d,0x52,0x70, 0x5d,0x51,0x6e,0x57,0x47,0x61,0x4b,0x3e,0x54,0x5b,0x50,0x6b,0x2a,0x2e,0x3b,0x22, 0x26,0x30,0x21,0x25,0x2f,0x20,0x23,0x2e,0x1f,0x22,0x2c,0x1d,0x20,0x29,0x1a,0x1d, 0x25,0x39,0x37,0x51,0x4c,0x48,0x67,0x57,0x50,0x72,0x59,0x51,0x73,0x5c,0x51,0x73, 0x5d,0x51,0x73,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5c,0x52,0x77,0x5d,0x53,0x78,0x5f, 0x55,0x7b,0x5c,0x54,0x79,0x5b,0x54,0x77,0x56,0x52,0x78,0x58,0x59,0x7e,0x68,0x71, 0x91,0x9c,0x9e,0xad,0x3c,0x3f,0x47,0x3e,0x41,0x49,0x3f,0x42,0x4a,0x3c,0x3e,0x46, 0x37,0x3a,0x41,0x31,0x33,0x3a,0x51,0x48,0x55,0x5a,0x52,0x5c,0x8d,0x93,0xaa,0x5f, 0x69,0x85,0x5a,0x63,0x85,0x58,0x63,0x87,0x54,0x5e,0x85,0x54,0x5e,0x84,0x53,0x5e, 0x84,0x52,0x5d,0x83,0x4f,0x5b,0x82,0x4d,0x59,0x80,0x4c,0x56,0x7c,0x4a,0x53,0x7a, 0x48,0x4c,0x73,0x46,0x47,0x6f,0x48,0x47,0x6b,0x44,0x40,0x5b,0x36,0x2c,0x36,0x46, 0x3a,0x49,0x4f,0x42,0x52,0x51,0x42,0x53,0x54,0x45,0x56,0x55,0x49,0x5c,0x50,0x46, 0x59,0x4b,0x42,0x56,0x40,0x3c,0x4f,0x39,0x38,0x4c,0x36,0x36,0x4a,0x36,0x3a,0x4a, 0x36,0x3a,0x46,0x2e,0x31,0x3b,0x56,0x4d,0x60,0x5a,0x4e,0x62,0x62,0x5b,0x72,0x57, 0x62,0x84,0x56,0x4f,0x72,0x1a,0x1d,0x26,0x20,0x22,0x2d,0x22,0x25,0x2f,0x22,0x26, 0x31,0x22,0x24,0x2f,0x22,0x25,0x2f,0x55,0x4a,0x64,0x7f,0x87,0x9f,0x52,0x56,0x72, 0x19,0x1b,0x23,0x21,0x24,0x2e,0x2c,0x30,0x3b,0x31,0x36,0x42,0x37,0x3c,0x4a,0x42, 0x47,0x55,0x58,0x5e,0x6a,0x77,0x7b,0x85,0x75,0x79,0x84,0x6a,0x6f,0x7b,0x65,0x6a, 0x76,0x57,0x5c,0x6a,0x4b,0x51,0x5f,0x45,0x4a,0x5a,0x43,0x49,0x58,0x42,0x46,0x57, 0x41,0x46,0x57,0x3e,0x43,0x54,0x3a,0x3f,0x50,0x3e,0x43,0x53,0x40,0x45,0x55,0x45, 0x4a,0x59,0x42,0x46,0x56,0x3c,0x41,0x50,0x39,0x3e,0x4d,0x34,0x39,0x48,0x32,0x36, 0x44,0x58,0x58,0x61,0x5f,0x5f,0x65,0x3b,0x3a,0x3f,0x14,0x12,0x17,0x1b,0x1a,0x1d, 0x2e,0x2d,0x31,0x21,0x20,0x23,0x08,0x07,0x09,0x07,0x06,0x08,0x06,0x06,0x07,0x05, 0x05,0x06,0x05,0x05,0x06,0x04,0x04,0x05,0x04,0x03,0x05,0x04,0x04,0x06,0x05,0x05, 0x06,0x04,0x04,0x06,0x03,0x03,0x05,0x02,0x02,0x03,0x1a,0x17,0x1f,0x30,0x2b,0x38, 0x0c,0x0a,0x0d,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0x1f,0x20,0xb2,0xb9,0xcc,0x73,0x7e, 0xa1,0x5e,0x6a,0x92,0x5c,0x69,0x90,0x5d,0x69,0x91,0x5e,0x6a,0x92,0x5e,0x6b,0x92, 0x5e,0x6b,0x92,0x5e,0x6b,0x92,0x5f,0x6c,0x93,0x5d,0x6a,0x92,0x74,0x84,0xb5,0x05, 0x06,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02, 0x02,0x02,0x04,0x04,0x04,0x07,0x07,0x07,0x0b,0x0b,0x0c,0x23,0x24,0x26,0x4d,0x4e, 0x52,0x82,0x82,0x86,0x95,0x96,0x9b,0x92,0x93,0x99,0x80,0x82,0x87,0x70,0x72,0x78, 0x70,0x72,0x76,0x80,0x81,0x86,0x85,0x86,0x8b,0x74,0x76,0x7b,0x66,0x68,0x6d,0x5a, 0x5c,0x61,0x4e,0x4f,0x53,0x39,0x3a,0x3d,0x2f,0x30,0x33,0x3b,0x3c,0x40,0x52,0x55, 0x58,0x44,0x46,0x4d,0x47,0x4a,0x50,0x4e,0x50,0x57,0x59,0x5b,0x64,0x66,0x6a,0x72, 0x73,0x76,0x80,0x7c,0x80,0x89,0x82,0x86,0x90,0x8d,0x8f,0x99,0x93,0x96,0x9e,0x88, 0x8b,0x95,0x7e,0x82,0x8e,0x7e,0x82,0x8d,0x81,0x84,0x8e,0x80,0x83,0x8e,0x7b,0x7f, 0x8a,0x79,0x7e,0x8a,0x7f,0x84,0x91,0x8c,0x90,0x9c,0x94,0x98,0xa2,0x9c,0xa0,0xa8, 0x9f,0xa2,0xaa,0xa0,0xa3,0xab,0x9d,0xa0,0xaa,0x9a,0x9d,0xa6,0x98,0x9b,0xa2,0x8f, 0x93,0x9d,0x86,0x8a,0x96,0x7a,0x80,0x8f,0x7b,0x81,0x90,0x81,0x86,0x94,0x82,0x87, 0x96,0x76,0x7d,0x8d,0x6d,0x73,0x86,0x6f,0x76,0x88,0x6e,0x74,0x87,0x70,0x76,0x8a, 0x75,0x7a,0x8d,0x7a,0x80,0x91,0x77,0x7e,0x8f,0x79,0x7e,0x8f,0x80,0x86,0x95,0x85, 0x8a,0x99,0x8a,0x8e,0x9c,0x89,0x8e,0x9d,0x86,0x8c,0x9b,0x82,0x87,0x97,0x7d,0x82, 0x93,0x77,0x7c,0x8e,0x70,0x76,0x86,0x66,0x6c,0x7d,0x5a,0x5e,0x70,0x50,0x53,0x65, 0x3f,0x42,0x56,0x40,0x3a,0x4c,0x41,0x37,0x46,0x39,0x31,0x3f,0x32,0x2c,0x3a,0x2e, 0x29,0x35,0x2d,0x29,0x34,0x2e,0x2a,0x36,0x32,0x2b,0x36,0x39,0x2f,0x3d,0x43,0x39, 0x49,0x47,0x3b,0x4a,0x48,0x3a,0x4a,0x42,0x36,0x42,0x3d,0x32,0x3e,0x42,0x36,0x43, 0x4c,0x3e,0x4e,0x4e,0x45,0x57,0x45,0x44,0x5d,0x45,0x44,0x5d,0x42,0x42,0x5a,0x3f, 0x3e,0x56,0x3e,0x3e,0x53,0x3e,0x3e,0x55,0x65,0x6e,0x8a,0x82,0x89,0xa1,0x88,0x84, 0x98,0x68,0x6a,0x82,0x50,0x57,0x71,0x46,0x4d,0x68,0x42,0x48,0x68,0x44,0x41,0x63, 0x58,0x61,0x80,0xd2,0xd4,0xda,0x1a,0x12,0x16,0x21,0x17,0x1b,0x28,0x1e,0x22,0x34, 0x28,0x2f,0x36,0x29,0x39,0x56,0x55,0x64,0x00,0x00,0x00,0x00,0x00,0x00,0x28,0x2a, 0x2e,0xb1,0xb8,0xca,0x83,0x8d,0xac,0x53,0x51,0x7d,0x72,0x7d,0x9e,0x71,0x7c,0x9f, 0x72,0x7e,0xa0,0x73,0x7f,0xa0,0x79,0x84,0xa4,0x75,0x7d,0x9d,0x66,0x6c,0x87,0x60, 0x66,0x7f,0x5d,0x62,0x7a,0x57,0x5c,0x72,0x3d,0x39,0x55,0x46,0x49,0x61,0x6e,0x6d, 0x80,0x26,0x23,0x2d,0x24,0x26,0x33,0x26,0x2a,0x36,0x28,0x2b,0x37,0x2c,0x30,0x3e, 0x2e,0x33,0x41,0x2f,0x34,0x42,0x36,0x3b,0x4b,0x3b,0x41,0x52,0x3d,0x42,0x57,0x41, 0x46,0x5c,0x46,0x47,0x61,0x47,0x48,0x62,0x49,0x4f,0x66,0x53,0x59,0x6f,0x51,0x56, 0x6e,0x58,0x5f,0x76,0x55,0x5d,0x76,0x5e,0x67,0x7f,0x6b,0x73,0x89,0x7a,0x80,0x94, 0x8d,0x90,0xa1,0xa1,0xa9,0xbe,0xab,0xb2,0xc6,0x9f,0xa6,0xbd,0x97,0x9f,0xb7,0x71, 0x77,0x8c,0x69,0x71,0x86,0x5f,0x68,0x81,0x5e,0x67,0x81,0x5e,0x66,0x81,0x56,0x5e, 0x7b,0x52,0x58,0x75,0x52,0x50,0x6d,0x55,0x51,0x6c,0x5a,0x52,0x6d,0x5e,0x52,0x6a, 0x5f,0x53,0x6b,0x5e,0x54,0x6d,0x6b,0x62,0x78,0x67,0x5c,0x71,0x60,0x56,0x69,0x54, 0x48,0x5c,0x53,0x47,0x5b,0x51,0x45,0x59,0x50,0x44,0x56,0x4f,0x42,0x54,0x51,0x44, 0x56,0x4c,0x42,0x54,0x48,0x3f,0x51,0x4f,0x44,0x57,0x53,0x46,0x58,0x51,0x44,0x56, 0x4e,0x46,0x5d,0x55,0x5a,0x72,0x65,0x6c,0x81,0x6a,0x72,0x87,0x6a,0x72,0x88,0x6a, 0x72,0x87,0x6a,0x71,0x86,0x6a,0x70,0x85,0x70,0x76,0x8a,0x7a,0x80,0x92,0x7f,0x84, 0x93,0x7b,0x81,0x91,0x97,0x98,0xac,0xa3,0xa3,0xb0,0xa4,0xa4,0xae,0x8c,0x8b,0x96, 0x5e,0x60,0x72,0x6d,0x6e,0x79,0x66,0x66,0x70,0x66,0x65,0x6e,0xb4,0xb7,0xc1,0xa6, 0xab,0xb8,0x7b,0x83,0x9b,0x54,0x55,0x75,0x51,0x4b,0x6b,0x5a,0x4d,0x6c,0x5c,0x4d, 0x6b,0x5e,0x4e,0x6d,0x5c,0x4b,0x65,0x59,0x48,0x61,0x49,0x3a,0x50,0x52,0x45,0x5d, 0x39,0x3f,0x57,0x22,0x26,0x30,0x21,0x24,0x2e,0x20,0x23,0x2e,0x1f,0x22,0x2c,0x1e, 0x20,0x29,0x1b,0x1e,0x26,0x4a,0x4a,0x69,0x55,0x50,0x71,0x57,0x50,0x73,0x59,0x51, 0x73,0x5e,0x54,0x74,0x5d,0x52,0x74,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5c,0x52,0x77, 0x5c,0x52,0x77,0x5d,0x53,0x77,0x5d,0x54,0x78,0x5b,0x54,0x78,0x57,0x54,0x79,0x5d, 0x5e,0x82,0x74,0x7d,0x9a,0xa9,0xac,0xb8,0x45,0x47,0x4f,0x41,0x44,0x4c,0x41,0x44, 0x4c,0x3c,0x3f,0x46,0x37,0x3a,0x41,0x2e,0x30,0x37,0x50,0x47,0x54,0x55,0x4d,0x58, 0x91,0x99,0xad,0x5e,0x67,0x84,0x5b,0x65,0x86,0x58,0x64,0x88,0x53,0x5e,0x85,0x53, 0x5e,0x86,0x53,0x5e,0x87,0x52,0x5c,0x84,0x52,0x5b,0x82,0x4f,0x59,0x80,0x4d,0x56, 0x7f,0x4b,0x54,0x7d,0x48,0x4f,0x73,0x46,0x4b,0x70,0x48,0x48,0x6c,0x48,0x42,0x5e, 0x39,0x2e,0x3a,0x49,0x3c,0x4c,0x52,0x44,0x55,0x53,0x44,0x56,0x56,0x46,0x59,0x56, 0x4a,0x5e,0x54,0x4a,0x5f,0x4b,0x45,0x5b,0x3f,0x3e,0x55,0x3a,0x3b,0x50,0x38,0x3a, 0x4e,0x37,0x3c,0x4c,0x38,0x3d,0x4a,0x33,0x37,0x42,0x40,0x3c,0x4b,0x5a,0x50,0x63, 0x5b,0x50,0x66,0x51,0x5d,0x80,0x58,0x51,0x73,0x22,0x23,0x2f,0x23,0x26,0x32,0x26, 0x29,0x34,0x26,0x2a,0x35,0x25,0x29,0x33,0x25,0x28,0x33,0x68,0x65,0x79,0x71,0x78, 0x8d,0x21,0x24,0x2e,0x22,0x25,0x2f,0x2a,0x2e,0x39,0x2e,0x32,0x3f,0x33,0x38,0x46, 0x3e,0x42,0x50,0x4c,0x51,0x5e,0x60,0x65,0x71,0x5f,0x63,0x71,0x5a,0x5f,0x6d,0x5b, 0x60,0x6e,0x5a,0x5f,0x6e,0x56,0x5c,0x6a,0x50,0x55,0x65,0x46,0x4b,0x5c,0x41,0x46, 0x57,0x3e,0x44,0x55,0x3b,0x42,0x53,0x3c,0x42,0x52,0x3d,0x42,0x52,0x3c,0x42,0x52, 0x40,0x46,0x56,0x4e,0x53,0x62,0x43,0x49,0x5a,0x42,0x47,0x57,0x40,0x45,0x56,0x3a, 0x3e,0x4f,0x32,0x37,0x47,0x29,0x2a,0x3a,0x22,0x22,0x2e,0x18,0x17,0x20,0x13,0x12, 0x18,0x0e,0x0e,0x12,0x10,0x0f,0x12,0x28,0x27,0x2a,0x21,0x20,0x22,0x07,0x06,0x09, 0x06,0x06,0x07,0x06,0x06,0x07,0x06,0x05,0x07,0x05,0x05,0x06,0x1e,0x1b,0x23,0x2a, 0x25,0x32,0x15,0x13,0x1a,0x08,0x08,0x0b,0x10,0x0e,0x13,0x29,0x24,0x30,0x26,0x22, 0x2d,0x0a,0x09,0x0d,0x03,0x02,0x03,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc5, 0xca,0xd6,0x7c,0x88,0xa8,0x60,0x6c,0x93,0x5a,0x66,0x8e,0x5b,0x66,0x8e,0x5c,0x67, 0x90,0x5c,0x69,0x90,0x5d,0x69,0x91,0x5d,0x69,0x91,0x5d,0x69,0x91,0x5c,0x69,0x90, 0x64,0x72,0x9d,0x3e,0x48,0x5e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x02,0x02,0x02,0x02,0x02,0x02,0x05,0x05,0x05,0x08,0x08,0x09,0x0f,0x0f,0x11,0x33, 0x35,0x38,0x54,0x56,0x5a,0x7a,0x7b,0x7f,0x88,0x8a,0x8f,0x84,0x86,0x8d,0x6a,0x6e, 0x74,0x64,0x66,0x6d,0x7c,0x7e,0x81,0x96,0x97,0x9a,0x99,0x9a,0x9e,0x7e,0x7f,0x86, 0x6c,0x6f,0x76,0x6a,0x6d,0x74,0x6a,0x6d,0x74,0x5e,0x5f,0x66,0x4c,0x4e,0x52,0x44, 0x46,0x4b,0x62,0x65,0x69,0x65,0x68,0x6d,0x5b,0x5d,0x62,0x5c,0x5e,0x65,0x62,0x66, 0x6e,0x6f,0x72,0x7d,0x7e,0x82,0x8b,0x82,0x86,0x91,0x83,0x87,0x92,0x81,0x85,0x90, 0x84,0x88,0x92,0x7c,0x80,0x8a,0x77,0x7a,0x86,0x73,0x76,0x81,0x74,0x77,0x82,0x73, 0x77,0x84,0x6c,0x72,0x82,0x6e,0x74,0x86,0x77,0x7d,0x8e,0x86,0x8b,0x98,0x91,0x95, 0xa1,0x9e,0xa1,0xaa,0xa2,0xa6,0xae,0xa3,0xa6,0xaf,0xa2,0xa6,0xae,0xa2,0xa4,0xac, 0x9e,0xa1,0xa9,0x98,0x9c,0xa5,0x94,0x98,0xa2,0x8e,0x93,0x9d,0x90,0x93,0x9e,0x92, 0x96,0xa1,0x8f,0x93,0x9f,0x8c,0x91,0x9d,0x89,0x8e,0x9b,0x81,0x86,0x95,0x77,0x7d, 0x8f,0x71,0x77,0x8a,0x78,0x7e,0x90,0x7d,0x83,0x93,0x7e,0x83,0x94,0x80,0x85,0x95, 0x86,0x8c,0x99,0x8c,0x91,0x9e,0x90,0x95,0xa1,0x8e,0x92,0x9f,0x8a,0x90,0x9e,0x83, 0x8a,0x99,0x7a,0x81,0x92,0x79,0x7f,0x91,0x75,0x7a,0x8c,0x6e,0x74,0x86,0x64,0x6a, 0x7e,0x59,0x5f,0x75,0x4b,0x51,0x66,0x40,0x41,0x57,0x3e,0x3a,0x4e,0x3b,0x36,0x4a, 0x38,0x34,0x47,0x33,0x2e,0x3e,0x32,0x2c,0x38,0x31,0x2b,0x37,0x2f,0x29,0x34,0x2b, 0x25,0x2f,0x2c,0x26,0x2f,0x38,0x2e,0x3b,0x44,0x39,0x49,0x4a,0x3c,0x4b,0x47,0x3a, 0x48,0x43,0x36,0x44,0x42,0x36,0x42,0x4b,0x3e,0x4d,0x4e,0x45,0x5a,0x44,0x43,0x5c, 0x45,0x43,0x5c,0x46,0x42,0x59,0x46,0x41,0x55,0x4b,0x42,0x57,0x54,0x55,0x74,0x65, 0x6d,0x8d,0x62,0x61,0x78,0x52,0x53,0x6c,0x46,0x4d,0x66,0x46,0x4d,0x69,0x42,0x4a, 0x68,0x49,0x43,0x62,0x51,0x5a,0x78,0xa2,0xa6,0xb3,0x3f,0x38,0x3a,0x21,0x17,0x1b, 0x26,0x1b,0x20,0x32,0x26,0x2d,0x38,0x2b,0x3a,0x45,0x45,0x5a,0x14,0x14,0x14,0x00, 0x00,0x00,0x00,0x00,0x00,0x9c,0xa2,0xb3,0x9a,0xa3,0xbd,0x53,0x5e,0x85,0x5f,0x6c, 0x93,0x73,0x7e,0xa0,0x70,0x7b,0x9d,0x73,0x7e,0xa0,0x73,0x7f,0xa1,0x72,0x7c,0x9d, 0x70,0x79,0x99,0x6f,0x75,0x92,0x63,0x68,0x82,0x50,0x55,0x6b,0x37,0x3c,0x52,0x34, 0x34,0x4c,0x5a,0x5b,0x6f,0x3d,0x36,0x41,0x24,0x22,0x2d,0x22,0x25,0x30,0x25,0x29, 0x34,0x2e,0x32,0x40,0x30,0x34,0x43,0x2e,0x32,0x3f,0x2b,0x2f,0x3d,0x2b,0x2f,0x3c, 0x2c,0x30,0x3e,0x31,0x34,0x45,0x36,0x36,0x49,0x3d,0x3c,0x51,0x40,0x3f,0x54,0x42, 0x40,0x56,0x43,0x41,0x58,0x43,0x42,0x58,0x45,0x41,0x59,0x46,0x42,0x5a,0x47,0x46, 0x60,0x56,0x5d,0x73,0x6f,0x73,0x89,0x86,0x8d,0xa5,0xa2,0xa9,0xbe,0xa1,0xa8,0xbe, 0x9b,0xa3,0xba,0x78,0x7d,0x92,0x6e,0x75,0x8a,0x6b,0x73,0x8a,0x71,0x78,0x8e,0x74, 0x7b,0x91,0x6a,0x72,0x89,0x62,0x69,0x82,0x52,0x59,0x76,0x52,0x53,0x71,0x52,0x51, 0x6e,0x58,0x52,0x6c,0x5e,0x52,0x6a,0x5e,0x52,0x6a,0x5e,0x52,0x6a,0x5f,0x53,0x69, 0x70,0x66,0x7a,0x59,0x4e,0x63,0x54,0x47,0x5a,0x51,0x44,0x57,0x50,0x44,0x56,0x4f, 0x43,0x55,0x50,0x44,0x57,0x51,0x46,0x59,0x46,0x3d,0x4e,0x4a,0x40,0x52,0x4f,0x45, 0x57,0x53,0x48,0x5b,0x57,0x4c,0x61,0x4e,0x4b,0x66,0x54,0x5a,0x75,0x6c,0x72,0x87, 0x7e,0x82,0x95,0x6e,0x76,0x8a,0x62,0x6a,0x80,0x68,0x70,0x85,0x7a,0x80,0x92,0x87, 0x8d,0x9a,0x96,0x9a,0xa3,0x82,0x87,0x94,0x74,0x78,0x95,0x91,0x94,0xa7,0xa9,0xa8, 0xb4,0xa2,0xa1,0xaa,0x6b,0x6c,0x7e,0x5a,0x5d,0x6e,0x60,0x60,0x6b,0x5c,0x5b,0x65, 0xad,0xb0,0xb8,0x9d,0xa2,0xb0,0x7c,0x84,0x9b,0x5c,0x5c,0x7b,0x53,0x4c,0x6b,0x5a, 0x4c,0x69,0x5c,0x4c,0x6a,0x5d,0x4a,0x65,0x5c,0x49,0x63,0x59,0x47,0x61,0x4d,0x3d, 0x54,0x48,0x3b,0x50,0x55,0x4e,0x69,0x23,0x25,0x31,0x22,0x25,0x2e,0x22,0x24,0x2e, 0x20,0x23,0x2d,0x1e,0x21,0x2a,0x1c,0x1e,0x26,0x4d,0x4a,0x69,0x56,0x50,0x72,0x57, 0x50,0x73,0x5d,0x54,0x73,0x6a,0x61,0x7f,0x5e,0x54,0x75,0x5e,0x52,0x75,0x5f,0x55, 0x76,0x63,0x59,0x79,0x62,0x59,0x7b,0x62,0x59,0x7d,0x6b,0x63,0x83,0x61,0x59,0x7b, 0x5a,0x56,0x7a,0x62,0x64,0x85,0x78,0x81,0x9d,0xb0,0xb2,0xbd,0x46,0x4a,0x52,0x46, 0x49,0x51,0x42,0x44,0x4d,0x3e,0x41,0x48,0x38,0x3a,0x42,0x2e,0x31,0x37,0x4d,0x45, 0x52,0x50,0x49,0x53,0x95,0x9d,0xb0,0x5e,0x68,0x85,0x5b,0x65,0x86,0x59,0x63,0x87, 0x53,0x5e,0x84,0x53,0x5e,0x86,0x53,0x5e,0x86,0x52,0x5c,0x86,0x51,0x5c,0x83,0x4f, 0x5a,0x81,0x4d,0x57,0x80,0x4b,0x56,0x7c,0x4b,0x51,0x78,0x45,0x4c,0x72,0x49,0x4a, 0x6f,0x49,0x44,0x60,0x3a,0x32,0x3e,0x4b,0x3f,0x4f,0x52,0x44,0x56,0x56,0x46,0x58, 0x58,0x49,0x5b,0x58,0x4c,0x60,0x56,0x4b,0x61,0x49,0x48,0x62,0x46,0x4d,0x64,0x3f, 0x45,0x5a,0x3a,0x3d,0x51,0x36,0x3c,0x4e,0x38,0x3d,0x4a,0x35,0x39,0x45,0x2a,0x2c, 0x36,0x5b,0x50,0x64,0x5b,0x50,0x64,0x52,0x59,0x7c,0x58,0x52,0x74,0x2e,0x2f,0x3f, 0x28,0x2b,0x36,0x2a,0x2e,0x3a,0x2a,0x2e,0x3a,0x2b,0x2f,0x3b,0x2c,0x30,0x3c,0x35, 0x39,0x45,0x2b,0x2f,0x3b,0x2a,0x2e,0x3a,0x2c,0x30,0x3c,0x2e,0x33,0x40,0x32,0x36, 0x44,0x39,0x3e,0x4b,0x41,0x45,0x53,0x4e,0x52,0x61,0x5e,0x62,0x70,0x5c,0x60,0x6f, 0x69,0x6d,0x7b,0x7f,0x82,0x8e,0x73,0x77,0x85,0x5b,0x61,0x6f,0x4f,0x55,0x65,0x46, 0x4c,0x5d,0x41,0x46,0x57,0x3b,0x40,0x51,0x38,0x3d,0x4e,0x37,0x3c,0x4d,0x37,0x3c, 0x4d,0x39,0x3e,0x4f,0x3b,0x41,0x52,0x3e,0x44,0x55,0x3e,0x44,0x55,0x3e,0x43,0x54, 0x49,0x4e,0x5e,0x47,0x4d,0x5c,0x3a,0x40,0x4f,0x2e,0x32,0x41,0x23,0x25,0x32,0x1c, 0x1c,0x26,0x16,0x16,0x1e,0x10,0x0f,0x15,0x0c,0x0b,0x0e,0x19,0x18,0x1a,0x29,0x28, 0x2b,0x0d,0x0c,0x0f,0x07,0x06,0x09,0x06,0x06,0x09,0x06,0x06,0x09,0x3d,0x35,0x47, 0x07,0x07,0x0a,0x17,0x16,0x1c,0x30,0x2b,0x38,0x36,0x30,0x3f,0x32,0x2d,0x3b,0x18, 0x16,0x1e,0x06,0x05,0x07,0x03,0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02, 0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x77,0x79,0x7e,0x88,0x92,0xb0,0x5f,0x6c,0x93,0x58,0x65,0x8d,0x5a, 0x65,0x8d,0x5a,0x65,0x8d,0x5a,0x66,0x8e,0x5b,0x66,0x8e,0x5b,0x66,0x8e,0x5b,0x66, 0x8e,0x5b,0x66,0x8e,0x5d,0x69,0x93,0x81,0x92,0xcd,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x03,0x03,0x03,0x05,0x05,0x06,0x0a,0x0a,0x0a, 0x18,0x19,0x1a,0x3f,0x41,0x45,0x50,0x52,0x57,0x5a,0x5b,0x62,0x67,0x69,0x71,0x6a, 0x6d,0x76,0x54,0x56,0x5f,0x5c,0x5e,0x65,0x7a,0x7a,0x7e,0x90,0x90,0x93,0x93,0x93, 0x96,0x7d,0x7f,0x86,0x6e,0x72,0x7c,0x6f,0x72,0x7e,0x71,0x74,0x7e,0x71,0x74,0x7d, 0x77,0x7a,0x80,0x74,0x76,0x7e,0x6d,0x6f,0x76,0x66,0x67,0x6d,0x62,0x64,0x6a,0x68, 0x6a,0x70,0x73,0x76,0x7f,0x7f,0x83,0x8d,0x82,0x86,0x91,0x82,0x86,0x8f,0x82,0x86, 0x8e,0x7d,0x80,0x89,0x78,0x7c,0x86,0x72,0x74,0x7f,0x6f,0x72,0x7c,0x6e,0x6e,0x7a, 0x6a,0x6c,0x79,0x5b,0x5f,0x70,0x52,0x59,0x6f,0x50,0x58,0x6e,0x5b,0x62,0x78,0x6e, 0x73,0x86,0x82,0x86,0x95,0x95,0x99,0xa2,0x9f,0xa2,0xab,0xa3,0xa6,0xaf,0xa3,0xa6, 0xaf,0xa2,0xa5,0xae,0x9f,0xa2,0xab,0x9a,0x9d,0xa6,0x96,0x9a,0xa3,0x97,0x9a,0xa4, 0x99,0x9c,0xa6,0x96,0x99,0xa3,0x93,0x98,0xa2,0x92,0x96,0xa2,0x8c,0x91,0x9e,0x84, 0x8a,0x99,0x79,0x7e,0x91,0x75,0x7b,0x8e,0x76,0x7d,0x8e,0x7e,0x84,0x94,0x81,0x86, 0x96,0x88,0x8c,0x9a,0x95,0x99,0xa3,0x98,0x9b,0xa6,0x90,0x93,0x9f,0x87,0x8c,0x99, 0x83,0x88,0x96,0x7a,0x7f,0x8e,0x72,0x78,0x8a,0x70,0x76,0x8a,0x6e,0x75,0x8a,0x70, 0x76,0x8a,0x69,0x71,0x86,0x62,0x6a,0x81,0x5c,0x64,0x7c,0x5c,0x62,0x7a,0x4f,0x54, 0x6b,0x43,0x47,0x5c,0x3d,0x3e,0x53,0x40,0x3e,0x54,0x4c,0x48,0x5d,0x51,0x47,0x56, 0x3b,0x36,0x47,0x3f,0x3c,0x4a,0x42,0x3d,0x4a,0x3a,0x36,0x41,0x39,0x33,0x3d,0x33, 0x29,0x33,0x3a,0x2f,0x3b,0x3f,0x33,0x40,0x3f,0x33,0x3f,0x40,0x33,0x3f,0x51,0x43, 0x54,0x44,0x43,0x5b,0x4a,0x50,0x69,0x47,0x49,0x62,0x44,0x42,0x58,0x43,0x42,0x5a, 0x54,0x5d,0x7c,0x57,0x60,0x81,0x53,0x54,0x71,0x48,0x49,0x64,0x3f,0x45,0x5f,0x3f, 0x45,0x5f,0x42,0x4b,0x67,0x51,0x44,0x60,0x49,0x52,0x73,0x8d,0x93,0xa4,0x60,0x5d, 0x5e,0x1d,0x14,0x18,0x26,0x1b,0x20,0x2a,0x1f,0x26,0x4c,0x3b,0x4a,0x3c,0x3e,0x54, 0x3a,0x3a,0x3b,0x00,0x00,0x00,0x00,0x00,0x00,0x65,0x69,0x74,0xa9,0xb0,0xc6,0x60, 0x6c,0x92,0x53,0x5e,0x88,0x74,0x7f,0xa1,0x70,0x7b,0x9e,0x70,0x7b,0x9e,0x71,0x7c, 0x9f,0x70,0x7b,0x9d,0x6e,0x78,0x9a,0x6b,0x76,0x96,0x67,0x6f,0x90,0x63,0x69,0x85, 0x51,0x55,0x6f,0x41,0x3b,0x58,0x54,0x57,0x70,0x58,0x55,0x62,0x1a,0x18,0x1f,0x19, 0x1b,0x22,0x20,0x23,0x2c,0x29,0x2c,0x39,0x2c,0x31,0x3e,0x2d,0x32,0x3f,0x2d,0x31, 0x3e,0x24,0x27,0x31,0x21,0x24,0x2c,0x22,0x26,0x30,0x27,0x29,0x35,0x2e,0x2e,0x3d, 0x2d,0x2c,0x3b,0x31,0x30,0x40,0x3c,0x39,0x4d,0x45,0x3f,0x54,0x4a,0x41,0x54,0x4b, 0x41,0x54,0x4a,0x41,0x55,0x44,0x40,0x57,0x48,0x47,0x5e,0x54,0x58,0x75,0x7a,0x80, 0x9a,0x82,0x8a,0xa1,0x7f,0x87,0xa1,0x66,0x6b,0x84,0x58,0x5e,0x78,0x65,0x6d,0x82, 0x6e,0x76,0x8a,0x6e,0x76,0x8c,0x69,0x71,0x87,0x66,0x6e,0x86,0x60,0x68,0x81,0x68, 0x70,0x86,0x66,0x6e,0x85,0x4f,0x51,0x6e,0x55,0x4f,0x6a,0x59,0x50,0x69,0x5b,0x52, 0x6a,0x59,0x52,0x6c,0x60,0x5e,0x77,0x7a,0x71,0x84,0x75,0x6b,0x7b,0x5e,0x52,0x65, 0x53,0x47,0x5b,0x52,0x46,0x59,0x53,0x47,0x5c,0x53,0x49,0x5d,0x46,0x3d,0x4e,0x4d, 0x43,0x56,0x48,0x3f,0x50,0x53,0x47,0x5b,0x55,0x4a,0x5d,0x5d,0x52,0x69,0x4e,0x4c, 0x69,0x5a,0x62,0x79,0x6b,0x72,0x86,0x67,0x6f,0x85,0x5b,0x63,0x7d,0x64,0x6b,0x82, 0x76,0x7d,0x8f,0x8e,0x93,0xa0,0xa5,0xa7,0xae,0x92,0x96,0xa0,0x74,0x77,0x93,0x71, 0x74,0x8f,0xa0,0xa0,0xaf,0xaa,0xa9,0xb1,0x85,0x84,0x91,0x57,0x58,0x68,0x55,0x56, 0x60,0x58,0x57,0x5f,0xa9,0xad,0xb5,0x93,0x99,0xa8,0x74,0x7c,0x95,0x61,0x61,0x80, 0x57,0x4f,0x6e,0x5a,0x4c,0x67,0x5c,0x48,0x63,0x5c,0x49,0x63,0x59,0x45,0x5e,0x57, 0x46,0x5e,0x51,0x42,0x5a,0x43,0x37,0x4b,0x56,0x4a,0x64,0x31,0x36,0x48,0x22,0x25, 0x2f,0x22,0x25,0x2f,0x20,0x23,0x2d,0x1e,0x20,0x29,0x1c,0x1e,0x26,0x4b,0x49,0x66, 0x56,0x50,0x72,0x57,0x50,0x73,0x5a,0x51,0x73,0x5e,0x53,0x74,0x5d,0x52,0x74,0x61, 0x56,0x77,0x69,0x5e,0x7e,0x70,0x69,0x87,0x71,0x69,0x88,0x78,0x71,0x8e,0x7a,0x73, 0x90,0x6b,0x64,0x84,0x61,0x5e,0x7f,0x6c,0x6d,0x8d,0x79,0x82,0x9d,0xa7,0xa9,0xb6, 0x51,0x54,0x5b,0x4e,0x52,0x59,0x42,0x46,0x4e,0x40,0x43,0x4b,0x3a,0x3c,0x44,0x31, 0x33,0x3a,0x4d,0x46,0x53,0x4c,0x45,0x4f,0x9b,0xa1,0xb2,0x5f,0x68,0x85,0x5a,0x65, 0x85,0x59,0x64,0x88,0x54,0x5e,0x85,0x53,0x5d,0x86,0x53,0x5e,0x85,0x53,0x5e,0x86, 0x52,0x5d,0x83,0x4e,0x5a,0x81,0x4e,0x58,0x80,0x4c,0x56,0x7d,0x4b,0x55,0x79,0x46, 0x4d,0x73,0x49,0x4a,0x6e,0x47,0x43,0x5d,0x3c,0x32,0x3e,0x4b,0x40,0x50,0x52,0x46, 0x58,0x58,0x48,0x5a,0x59,0x49,0x5c,0x59,0x4a,0x5e,0x56,0x4b,0x60,0x4a,0x49,0x62, 0x4b,0x52,0x6a,0x4d,0x53,0x69,0x3e,0x43,0x59,0x39,0x3e,0x51,0x3a,0x3f,0x4e,0x38, 0x3c,0x4a,0x2e,0x31,0x3e,0x59,0x51,0x65,0x5c,0x52,0x67,0x55,0x56,0x75,0x59,0x56, 0x78,0x3e,0x40,0x54,0x2e,0x32,0x3e,0x2f,0x33,0x41,0x32,0x36,0x43,0x32,0x36,0x43, 0x34,0x38,0x45,0x33,0x37,0x45,0x2f,0x33,0x42,0x30,0x35,0x42,0x32,0x36,0x43,0x32, 0x37,0x46,0x37,0x3c,0x4a,0x3b,0x40,0x4e,0x42,0x46,0x56,0x4d,0x52,0x61,0x62,0x67, 0x75,0x96,0x99,0xa3,0xaa,0xad,0xb5,0xa8,0xab,0xb3,0x74,0x7a,0x87,0x5b,0x61,0x71, 0x4a,0x50,0x61,0x42,0x47,0x58,0x3d,0x42,0x53,0x36,0x3b,0x4c,0x32,0x37,0x47,0x2f, 0x34,0x45,0x30,0x35,0x46,0x32,0x36,0x47,0x34,0x39,0x4a,0x35,0x3a,0x4b,0x36,0x3a, 0x4b,0x36,0x3b,0x4c,0x3e,0x43,0x53,0x4a,0x4f,0x5e,0x4b,0x50,0x5e,0x3e,0x43,0x51, 0x2b,0x2f,0x3c,0x1e,0x20,0x2a,0x18,0x18,0x21,0x13,0x13,0x1a,0x0f,0x0e,0x14,0x0b, 0x0b,0x0e,0x1e,0x1e,0x21,0x28,0x27,0x2a,0x19,0x19,0x1b,0x0a,0x0b,0x0e,0x11,0x11, 0x17,0x38,0x32,0x42,0x0d,0x0e,0x12,0x0f,0x11,0x15,0x3f,0x38,0x49,0x33,0x2f,0x3d, 0x3f,0x38,0x4a,0x0a,0x0a,0x0d,0x07,0x06,0x0a,0x06,0x06,0x08,0x04,0x04,0x06,0x03, 0x03,0x04,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x27,0x28,0x28,0x96,0xa0,0xb9,0x5f,0x6c,0x93, 0x57,0x63,0x8c,0x57,0x63,0x8c,0x57,0x64,0x8c,0x58,0x65,0x8d,0x58,0x64,0x8d,0x5a, 0x65,0x8d,0x5a,0x65,0x8d,0x5a,0x65,0x8d,0x58,0x64,0x8d,0x67,0x77,0xa6,0x2b,0x31, 0x37,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x03,0x03,0x03,0x05,0x05, 0x06,0x0a,0x0a,0x0a,0x22,0x23,0x26,0x46,0x47,0x4b,0x4d,0x4f,0x55,0x4a,0x4b,0x52, 0x5a,0x5d,0x65,0x61,0x63,0x6c,0x4e,0x51,0x5a,0x53,0x56,0x5d,0x69,0x6b,0x72,0x76, 0x78,0x7e,0x75,0x77,0x7e,0x74,0x77,0x81,0x71,0x75,0x7f,0x75,0x78,0x83,0x73,0x77, 0x83,0x75,0x7a,0x86,0x7f,0x82,0x8e,0x81,0x84,0x8d,0x7a,0x7e,0x86,0x6b,0x6e,0x76, 0x66,0x68,0x6e,0x7b,0x7e,0x85,0x87,0x8a,0x95,0x87,0x8b,0x97,0x85,0x89,0x95,0x7f, 0x82,0x8c,0x72,0x74,0x7e,0x6e,0x71,0x7b,0x6d,0x6e,0x7a,0x66,0x69,0x74,0x63,0x66, 0x73,0x5e,0x62,0x72,0x57,0x5b,0x6e,0x46,0x47,0x60,0x4a,0x47,0x61,0x4e,0x4a,0x62, 0x4b,0x49,0x63,0x51,0x56,0x6f,0x6c,0x71,0x84,0x88,0x8c,0x98,0x94,0x97,0xa0,0x9b, 0x9e,0xa6,0x9f,0xa3,0xac,0xa1,0xa3,0xad,0x9b,0x9f,0xa9,0x94,0x98,0xa2,0x96,0x9a, 0xa3,0x9d,0x9f,0xa9,0x9b,0x9e,0xa8,0x97,0x9b,0xa6,0x94,0x98,0xa4,0x92,0x96,0xa2, 0x8e,0x92,0x9f,0x88,0x8e,0x9d,0x81,0x87,0x97,0x7c,0x82,0x94,0x7c,0x82,0x94,0x7e, 0x83,0x94,0x82,0x88,0x96,0x8d,0x92,0x9e,0x9e,0xa2,0xaa,0x9a,0x9c,0xa4,0x89,0x8d, 0x98,0x80,0x84,0x93,0x78,0x7c,0x8d,0x6e,0x74,0x86,0x60,0x66,0x7c,0x5a,0x60,0x76, 0x5a,0x62,0x79,0x68,0x70,0x86,0x6a,0x72,0x88,0x69,0x71,0x87,0x66,0x6e,0x86,0x68, 0x70,0x87,0x70,0x78,0x8b,0x63,0x6a,0x7f,0x4b,0x52,0x68,0x51,0x56,0x6e,0x4e,0x4c, 0x69,0x55,0x4e,0x64,0x53,0x48,0x56,0x40,0x34,0x41,0x3b,0x33,0x42,0x3b,0x33,0x43, 0x37,0x31,0x3f,0x34,0x2b,0x37,0x2e,0x28,0x35,0x47,0x3f,0x4a,0x3d,0x33,0x3f,0x41, 0x35,0x41,0x4a,0x3b,0x4b,0x43,0x42,0x5a,0x5a,0x61,0x74,0x5b,0x62,0x76,0x46,0x4d, 0x65,0x44,0x45,0x5e,0x59,0x61,0x7d,0x5a,0x64,0x82,0x4e,0x50,0x6d,0x3e,0x3e,0x5a, 0x3b,0x40,0x5b,0x3e,0x45,0x60,0x40,0x48,0x63,0x49,0x41,0x5f,0x47,0x45,0x6a,0x8a, 0x90,0xa5,0x7d,0x79,0x7d,0x1c,0x14,0x17,0x27,0x1c,0x22,0x29,0x1e,0x23,0x3c,0x2d, 0x37,0x43,0x40,0x5c,0x56,0x55,0x5a,0x00,0x00,0x00,0x00,0x00,0x00,0x2a,0x2c,0x30, 0xaf,0xb7,0xca,0x7a,0x84,0xa4,0x53,0x56,0x7f,0x6b,0x78,0x9b,0x6c,0x79,0x9a,0x6b, 0x76,0x9b,0x6c,0x79,0x9b,0x6f,0x7a,0x9c,0x6f,0x7a,0x9b,0x6b,0x76,0x97,0x67,0x71, 0x93,0x63,0x6d,0x8c,0x5e,0x67,0x86,0x4a,0x46,0x6a,0x4b,0x54,0x74,0x6d,0x72,0x88, 0x10,0x12,0x16,0x12,0x13,0x19,0x17,0x19,0x21,0x1f,0x22,0x2d,0x27,0x2a,0x38,0x2d, 0x32,0x42,0x31,0x36,0x48,0x2a,0x2e,0x3c,0x25,0x28,0x34,0x24,0x28,0x33,0x28,0x2c, 0x39,0x32,0x33,0x46,0x2e,0x2d,0x3e,0x2c,0x2a,0x38,0x2e,0x29,0x35,0x33,0x2b,0x37, 0x42,0x37,0x46,0x4b,0x3d,0x4d,0x47,0x39,0x47,0x3b,0x31,0x3d,0x3f,0x33,0x40,0x4c, 0x3e,0x4e,0x63,0x5b,0x70,0x6c,0x63,0x7a,0x71,0x66,0x7d,0x62,0x55,0x69,0x50,0x46, 0x5a,0x47,0x45,0x5e,0x48,0x49,0x62,0x4a,0x4d,0x67,0x4b,0x50,0x6b,0x54,0x5b,0x75, 0x64,0x6c,0x82,0x69,0x70,0x84,0x67,0x6f,0x85,0x4f,0x57,0x72,0x4e,0x4c,0x67,0x50, 0x4d,0x67,0x56,0x4e,0x67,0x53,0x4e,0x6a,0x51,0x4f,0x6d,0x5e,0x52,0x6b,0x61,0x55, 0x6a,0x70,0x65,0x76,0x63,0x57,0x6b,0x59,0x4d,0x62,0x57,0x4c,0x61,0x56,0x4a,0x60, 0x53,0x4a,0x60,0x55,0x4a,0x61,0x50,0x46,0x5a,0x43,0x3b,0x4b,0x4f,0x46,0x59,0x55, 0x4c,0x63,0x52,0x52,0x6f,0x5e,0x66,0x7f,0x69,0x6f,0x86,0x6d,0x74,0x8a,0x65,0x6d, 0x84,0x66,0x6e,0x84,0x71,0x77,0x8a,0x8a,0x8e,0x9c,0xa9,0xaa,0xb0,0x9b,0x9e,0xa5, 0x83,0x85,0x9b,0x73,0x77,0x8f,0x90,0x92,0xa3,0x9f,0x9f,0xa8,0x8a,0x89,0x94,0x63, 0x62,0x6f,0x4d,0x4c,0x58,0x4f,0x4e,0x56,0xab,0xae,0xb7,0x92,0x97,0xa7,0x73,0x7c, 0x94,0x65,0x64,0x80,0x5d,0x52,0x6e,0x5a,0x48,0x63,0x5b,0x47,0x5f,0x5b,0x47,0x61, 0x58,0x45,0x5e,0x54,0x43,0x5b,0x53,0x42,0x59,0x46,0x38,0x4b,0x4b,0x3f,0x54,0x47, 0x45,0x5f,0x20,0x23,0x2c,0x22,0x25,0x2e,0x20,0x23,0x2d,0x1e,0x21,0x2a,0x1d,0x1f, 0x27,0x49,0x48,0x65,0x56,0x51,0x73,0x57,0x50,0x73,0x58,0x51,0x73,0x5a,0x52,0x74, 0x64,0x5a,0x7a,0x6a,0x61,0x7f,0x67,0x5d,0x7d,0x68,0x61,0x81,0x6d,0x66,0x85,0x7e, 0x78,0x93,0x82,0x7c,0x97,0x7e,0x78,0x93,0x70,0x6d,0x8b,0x74,0x76,0x92,0x7a,0x83, 0x9d,0xa1,0xa4,0xb3,0x53,0x56,0x5e,0x4f,0x52,0x5a,0x46,0x49,0x51,0x49,0x4c,0x53, 0x4a,0x4d,0x54,0x3a,0x3d,0x43,0x4b,0x45,0x51,0x4b,0x42,0x4e,0x9f,0xa5,0xb4,0x62, 0x6c,0x88,0x5b,0x64,0x84,0x5c,0x66,0x89,0x57,0x62,0x88,0x54,0x60,0x87,0x52,0x5e, 0x85,0x52,0x5d,0x86,0x52,0x5d,0x84,0x4f,0x5b,0x82,0x4e,0x5a,0x81,0x4c,0x57,0x7f, 0x4b,0x55,0x7a,0x47,0x51,0x78,0x48,0x4b,0x6e,0x44,0x41,0x5d,0x39,0x2e,0x3a,0x4a, 0x3e,0x4f,0x54,0x46,0x5a,0x59,0x49,0x5b,0x5a,0x4a,0x5c,0x5a,0x4c,0x60,0x58,0x4c, 0x62,0x52,0x4a,0x62,0x47,0x46,0x60,0x44,0x46,0x5e,0x42,0x42,0x5a,0x3c,0x3e,0x53, 0x37,0x3c,0x50,0x35,0x3a,0x4a,0x32,0x36,0x43,0x44,0x42,0x52,0x5b,0x53,0x68,0x59, 0x56,0x73,0x60,0x5d,0x7e,0x52,0x53,0x6e,0x36,0x3a,0x47,0x37,0x3b,0x49,0x3a,0x3e, 0x4c,0x3a,0x3e,0x4d,0x3a,0x3f,0x4d,0x38,0x3d,0x4a,0x37,0x3c,0x4a,0x37,0x3c,0x4a, 0x36,0x3c,0x4a,0x38,0x3d,0x4b,0x38,0x3e,0x4c,0x3d,0x42,0x51,0x42,0x48,0x57,0x4b, 0x51,0x61,0x5e,0x64,0x72,0x73,0x77,0x85,0x6b,0x70,0x7e,0x5e,0x63,0x72,0x54,0x5a, 0x6a,0x4d,0x52,0x63,0x46,0x4c,0x5c,0x3f,0x46,0x56,0x3a,0x3e,0x50,0x33,0x38,0x4a, 0x31,0x34,0x45,0x30,0x31,0x42,0x30,0x30,0x41,0x2f,0x30,0x41,0x2e,0x33,0x43,0x30, 0x35,0x45,0x34,0x39,0x49,0x3d,0x42,0x51,0x48,0x4d,0x5b,0x55,0x5a,0x69,0x52,0x56, 0x65,0x46,0x4b,0x59,0x36,0x3b,0x49,0x26,0x2a,0x36,0x1e,0x20,0x2a,0x19,0x1b,0x24, 0x16,0x18,0x1f,0x0f,0x0f,0x14,0x0c,0x0b,0x10,0x17,0x17,0x1b,0x2a,0x2b,0x2e,0x46, 0x46,0x4c,0x31,0x2d,0x3b,0x2a,0x27,0x31,0x2b,0x2a,0x33,0x3c,0x37,0x46,0x23,0x25, 0x2a,0x1a,0x1c,0x22,0x15,0x16,0x1e,0x0e,0x0e,0x12,0x0a,0x0a,0x0d,0x07,0x08,0x0a, 0x06,0x06,0x08,0x04,0x05,0x06,0x02,0x03,0x04,0x02,0x02,0x02,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0xa8,0xb0, 0xc6,0x60,0x6c,0x93,0x54,0x60,0x8a,0x55,0x60,0x8a,0x56,0x62,0x8b,0x57,0x63,0x8c, 0x57,0x64,0x8c,0x58,0x64,0x8c,0x58,0x64,0x8c,0x58,0x65,0x8d,0x58,0x64,0x8d,0x5d, 0x6a,0x95,0x83,0x96,0xd4,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x03, 0x03,0x03,0x06,0x06,0x07,0x0a,0x0a,0x0b,0x22,0x23,0x26,0x3e,0x40,0x44,0x40,0x42, 0x46,0x3a,0x3a,0x3f,0x5a,0x5b,0x61,0x6c,0x6e,0x76,0x5e,0x61,0x69,0x52,0x56,0x5f, 0x5b,0x5e,0x66,0x5a,0x5e,0x69,0x5d,0x61,0x6e,0x64,0x68,0x74,0x6b,0x6f,0x7a,0x6d, 0x71,0x7c,0x70,0x74,0x80,0x7a,0x7e,0x8a,0x82,0x86,0x92,0x84,0x87,0x92,0x85,0x88, 0x92,0x80,0x82,0x8c,0x7a,0x7e,0x86,0x85,0x88,0x91,0x8b,0x8f,0x9b,0x88,0x8c,0x99, 0x82,0x85,0x91,0x76,0x79,0x83,0x62,0x66,0x73,0x58,0x5c,0x6c,0x52,0x56,0x66,0x4a, 0x4f,0x63,0x45,0x47,0x5f,0x46,0x45,0x5d,0x47,0x46,0x5f,0x4f,0x4a,0x62,0x57,0x4c, 0x62,0x58,0x4b,0x60,0x58,0x4c,0x63,0x49,0x47,0x61,0x55,0x5b,0x74,0x76,0x7b,0x8a, 0x8a,0x8e,0x99,0x92,0x95,0x9e,0x98,0x9a,0xa4,0x9b,0x9e,0xa9,0x93,0x98,0xa4,0x91, 0x96,0xa2,0x90,0x94,0xa0,0x97,0x9a,0xa6,0x97,0x9a,0xa6,0x96,0x9a,0xa5,0x92,0x96, 0xa2,0x91,0x96,0xa2,0x8f,0x94,0xa2,0x8d,0x91,0x9f,0x8b,0x90,0x9e,0x86,0x8b,0x9c, 0x7f,0x84,0x95,0x7b,0x81,0x92,0x7d,0x81,0x91,0x85,0x8a,0x96,0x8f,0x92,0x9e,0x8a, 0x8e,0x99,0x7d,0x82,0x91,0x6e,0x74,0x87,0x63,0x6a,0x7e,0x51,0x57,0x70,0x47,0x49, 0x62,0x45,0x43,0x5a,0x45,0x43,0x5a,0x48,0x4c,0x65,0x5d,0x64,0x7e,0x6c,0x74,0x8b, 0x6e,0x75,0x8b,0x6b,0x73,0x8a,0x76,0x7d,0x91,0x70,0x76,0x8b,0x58,0x5f,0x76,0x5d, 0x64,0x7f,0x50,0x53,0x71,0x57,0x4f,0x67,0x53,0x4c,0x5e,0x55,0x4a,0x57,0x41,0x35, 0x43,0x3d,0x32,0x3f,0x35,0x2d,0x38,0x31,0x27,0x33,0x2d,0x23,0x2e,0x2e,0x28,0x33, 0x49,0x41,0x48,0x3a,0x2f,0x3b,0x44,0x38,0x46,0x44,0x3e,0x50,0x45,0x4b,0x60,0x54, 0x5a,0x6d,0x4a,0x50,0x66,0x42,0x42,0x5a,0x4b,0x4a,0x67,0x55,0x5e,0x80,0x4e,0x50, 0x6c,0x43,0x42,0x5b,0x3a,0x40,0x5b,0x3d,0x45,0x60,0x43,0x4a,0x66,0x40,0x3e,0x5d, 0x52,0x45,0x5f,0x7b,0x83,0x9e,0xab,0xa9,0xaa,0x19,0x11,0x14,0x26,0x1b,0x20,0x28, 0x1e,0x22,0x31,0x24,0x2c,0x61,0x4f,0x63,0x56,0x57,0x63,0x00,0x00,0x00,0x00,0x00, 0x00,0x02,0x02,0x02,0xa0,0xa7,0xb8,0x95,0x9f,0xb9,0x55,0x60,0x88,0x60,0x6d,0x92, 0x6a,0x75,0x9a,0x6a,0x75,0x98,0x6a,0x75,0x99,0x6a,0x75,0x9a,0x6a,0x76,0x98,0x69, 0x74,0x95,0x67,0x73,0x93,0x63,0x6c,0x8e,0x63,0x6d,0x8b,0x4c,0x57,0x79,0x48,0x47, 0x6b,0x62,0x6a,0x87,0x3b,0x3b,0x43,0x14,0x13,0x1a,0x19,0x19,0x21,0x23,0x22,0x2f, 0x23,0x22,0x30,0x33,0x32,0x45,0x32,0x32,0x43,0x30,0x30,0x41,0x34,0x34,0x47,0x30, 0x30,0x42,0x31,0x31,0x42,0x39,0x38,0x4c,0x3e,0x3b,0x4f,0x46,0x3d,0x4f,0x44,0x3b, 0x4b,0x3c,0x33,0x3f,0x2f,0x27,0x32,0x31,0x29,0x33,0x2f,0x25,0x30,0x23,0x1b,0x22, 0x21,0x19,0x1f,0x22,0x19,0x1f,0x2e,0x28,0x31,0x2f,0x2b,0x32,0x33,0x2f,0x35,0x31, 0x29,0x31,0x33,0x26,0x2f,0x4b,0x3c,0x4d,0x50,0x44,0x56,0x4e,0x44,0x56,0x4d,0x42, 0x57,0x45,0x43,0x5b,0x46,0x47,0x61,0x4a,0x4e,0x68,0x4b,0x50,0x6b,0x4b,0x4c,0x67, 0x4c,0x4a,0x66,0x4f,0x4b,0x65,0x51,0x4b,0x64,0x58,0x4d,0x64,0x5a,0x4f,0x66,0x5c, 0x51,0x68,0x5e,0x52,0x68,0x66,0x5b,0x70,0x75,0x6b,0x7f,0x5d,0x51,0x69,0x58,0x4e, 0x67,0x55,0x4d,0x66,0x52,0x4c,0x65,0x51,0x4d,0x66,0x55,0x4d,0x66,0x55,0x4b,0x61, 0x57,0x4d,0x64,0x50,0x47,0x5d,0x58,0x52,0x6e,0x52,0x53,0x70,0x5b,0x63,0x7e,0x6a, 0x72,0x88,0x6c,0x74,0x8a,0x72,0x78,0x8c,0x7a,0x7f,0x91,0x8a,0x8e,0x9a,0xa7,0xaa, 0xae,0xa1,0xa2,0xa7,0x93,0x95,0xa4,0x7f,0x81,0x95,0x84,0x86,0x97,0x8a,0x8b,0x99, 0x7b,0x7b,0x88,0x6d,0x6c,0x77,0x52,0x4f,0x5a,0x49,0x46,0x4f,0xac,0xaf,0xb9,0x93, 0x99,0xa9,0x71,0x7a,0x92,0x69,0x67,0x83,0x6a,0x5e,0x77,0x5f,0x4f,0x68,0x59,0x45, 0x5f,0x5b,0x47,0x61,0x57,0x44,0x5c,0x54,0x41,0x59,0x52,0x41,0x58,0x48,0x38,0x4d, 0x41,0x34,0x47,0x55,0x47,0x61,0x22,0x24,0x2f,0x21,0x24,0x2e,0x20,0x23,0x2d,0x1f, 0x22,0x2b,0x1c,0x1f,0x27,0x47,0x45,0x62,0x56,0x51,0x73,0x57,0x50,0x73,0x58,0x51, 0x73,0x5d,0x53,0x73,0x65,0x5b,0x79,0x63,0x59,0x79,0x5f,0x55,0x75,0x5a,0x51,0x72, 0x53,0x4c,0x6c,0x68,0x62,0x7e,0x77,0x70,0x8c,0x7e,0x79,0x93,0x7e,0x7c,0x95,0x79, 0x79,0x94,0x7b,0x83,0x9d,0x99,0x9e,0xaf,0x56,0x59,0x60,0x58,0x5a,0x62,0x50,0x53, 0x5b,0x4e,0x51,0x58,0x4d,0x4f,0x56,0x3b,0x3e,0x44,0x4a,0x44,0x51,0x4f,0x46,0x53, 0xa0,0xa6,0xb5,0x6c,0x75,0x8f,0x69,0x71,0x8e,0x6a,0x74,0x94,0x63,0x6e,0x90,0x59, 0x63,0x89,0x53,0x5e,0x85,0x52,0x5d,0x85,0x51,0x5b,0x84,0x52,0x5d,0x84,0x4f,0x5b, 0x82,0x4d,0x58,0x80,0x4a,0x55,0x7b,0x49,0x52,0x78,0x46,0x4b,0x6e,0x40,0x41,0x5e, 0x33,0x2c,0x37,0x4a,0x3e,0x4f,0x55,0x48,0x5a,0x5a,0x4d,0x61,0x5c,0x51,0x67,0x5a, 0x50,0x69,0x58,0x4e,0x66,0x51,0x4a,0x63,0x4a,0x49,0x62,0x47,0x46,0x5f,0x46,0x45, 0x5e,0x46,0x45,0x5e,0x42,0x40,0x58,0x3a,0x3a,0x4f,0x33,0x36,0x49,0x2f,0x33,0x42, 0x3e,0x3e,0x4d,0x5d,0x59,0x73,0x61,0x61,0x7f,0x5c,0x5e,0x7b,0x3c,0x40,0x4e,0x3d, 0x41,0x4f,0x3e,0x43,0x51,0x40,0x45,0x53,0x3f,0x44,0x52,0x3b,0x41,0x4f,0x3b,0x40, 0x4e,0x39,0x3e,0x4d,0x39,0x3e,0x4d,0x3b,0x40,0x4f,0x3c,0x40,0x50,0x3c,0x42,0x52, 0x44,0x4a,0x5a,0x51,0x56,0x66,0x68,0x6e,0x7c,0x6a,0x6e,0x7e,0x62,0x67,0x76,0x5a, 0x60,0x70,0x52,0x58,0x69,0x4a,0x50,0x5f,0x41,0x46,0x58,0x3a,0x3f,0x52,0x35,0x39, 0x4b,0x35,0x36,0x49,0x35,0x34,0x46,0x37,0x35,0x46,0x38,0x34,0x45,0x32,0x30,0x42, 0x2e,0x2e,0x3f,0x31,0x36,0x46,0x3f,0x44,0x52,0x4e,0x52,0x61,0x59,0x5e,0x6c,0x5e, 0x62,0x6f,0x51,0x56,0x63,0x43,0x49,0x56,0x3c,0x41,0x4f,0x30,0x34,0x41,0x23,0x26, 0x32,0x1f,0x22,0x2c,0x1b,0x1e,0x27,0x13,0x14,0x1b,0x0f,0x0f,0x14,0x0f,0x10,0x16, 0x12,0x13,0x19,0x1a,0x1c,0x22,0x2e,0x2e,0x35,0x32,0x32,0x3c,0x54,0x50,0x5e,0x75, 0x76,0x7b,0x53,0x56,0x5c,0x2e,0x31,0x38,0x21,0x23,0x2b,0x13,0x15,0x1b,0x0b,0x0b, 0x0f,0x09,0x0a,0x0c,0x06,0x07,0x0a,0x05,0x05,0x06,0x02,0x03,0x04,0x02,0x02,0x02, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x74,0x78,0x82,0x67,0x73,0x99,0x54,0x60,0x8a,0x54,0x5f,0x89,0x55,0x60, 0x8a,0x55,0x62,0x8b,0x55,0x62,0x8a,0x57,0x63,0x8c,0x56,0x62,0x8b,0x57,0x63,0x8c, 0x57,0x63,0x8c,0x58,0x64,0x8d,0x73,0x83,0xb9,0x12,0x15,0x15,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x02,0x02,0x02,0x04,0x04,0x04,0x06,0x06,0x06,0x0a,0x0a,0x0a,0x16,0x16,0x17,0x29, 0x2a,0x2d,0x34,0x36,0x39,0x39,0x3a,0x3e,0x52,0x54,0x57,0x7c,0x7e,0x82,0x7e,0x7f, 0x83,0x5a,0x5c,0x62,0x54,0x56,0x5e,0x52,0x56,0x60,0x58,0x5c,0x68,0x5e,0x62,0x6e, 0x5d,0x60,0x6b,0x5f,0x63,0x6e,0x6a,0x6e,0x7a,0x7f,0x84,0x8f,0x88,0x8b,0x97,0x87, 0x8a,0x96,0x8a,0x8e,0x99,0x89,0x8d,0x96,0x8a,0x8e,0x98,0x8c,0x90,0x9c,0x8a,0x8e, 0x9b,0x84,0x87,0x93,0x7a,0x7c,0x87,0x60,0x64,0x74,0x4d,0x51,0x65,0x41,0x46,0x59, 0x3e,0x3d,0x52,0x42,0x3e,0x53,0x4d,0x42,0x56,0x4a,0x41,0x53,0x4c,0x42,0x55,0x4d, 0x45,0x5a,0x56,0x4c,0x62,0x5a,0x4d,0x62,0x58,0x4a,0x5d,0x48,0x40,0x53,0x43,0x42, 0x5b,0x58,0x5e,0x73,0x74,0x7a,0x8b,0x89,0x8c,0x99,0x8e,0x92,0x9d,0x90,0x94,0xa1, 0x8c,0x90,0x9e,0x8a,0x8f,0x9d,0x8a,0x8e,0x9c,0x8d,0x92,0x9f,0x90,0x95,0xa2,0x8e, 0x92,0xa1,0x8b,0x90,0x9e,0x8a,0x90,0x9e,0x8b,0x91,0x9e,0x87,0x8c,0x9a,0x85,0x8a, 0x98,0x80,0x85,0x94,0x76,0x7a,0x8b,0x6b,0x70,0x82,0x66,0x6a,0x7e,0x66,0x6c,0x80, 0x68,0x6e,0x7e,0x62,0x66,0x76,0x52,0x56,0x6a,0x44,0x49,0x5e,0x40,0x41,0x57,0x41, 0x3e,0x55,0x46,0x40,0x54,0x46,0x3f,0x53,0x45,0x3f,0x53,0x43,0x3f,0x55,0x42,0x42, 0x59,0x5a,0x62,0x7b,0x72,0x7a,0x8e,0x7c,0x82,0x96,0x77,0x7e,0x91,0x76,0x7d,0x8f, 0x5e,0x66,0x7a,0x5f,0x67,0x82,0x52,0x54,0x73,0x52,0x4e,0x6a,0x4e,0x43,0x5b,0x56, 0x50,0x62,0x56,0x4a,0x58,0x40,0x33,0x40,0x39,0x2f,0x3b,0x35,0x2c,0x36,0x2f,0x26, 0x30,0x2d,0x23,0x2d,0x2b,0x29,0x33,0x3d,0x37,0x3c,0x33,0x2a,0x35,0x34,0x2e,0x3b, 0x2f,0x2e,0x3f,0x34,0x38,0x4a,0x38,0x3d,0x51,0x31,0x31,0x42,0x40,0x46,0x5d,0x61, 0x6a,0x89,0x67,0x6a,0x85,0x5f,0x5b,0x71,0x46,0x4c,0x66,0x3f,0x47,0x63,0x43,0x4d, 0x6b,0x42,0x4a,0x6c,0x54,0x41,0x59,0x63,0x6d,0x8d,0xd3,0xd2,0xd3,0x19,0x11,0x14, 0x25,0x1a,0x1f,0x2a,0x1f,0x24,0x2a,0x1f,0x25,0x46,0x36,0x42,0x47,0x4c,0x65,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x69,0x6d,0x78,0xa7,0xaf,0xc5,0x63,0x6f, 0x94,0x56,0x61,0x89,0x6e,0x7a,0x9e,0x66,0x72,0x96,0x68,0x74,0x98,0x68,0x73,0x97, 0x69,0x75,0x99,0x69,0x73,0x97,0x69,0x74,0x96,0x63,0x6d,0x8e,0x5b,0x66,0x87,0x55, 0x5c,0x7d,0x4e,0x49,0x69,0x59,0x5b,0x7a,0x61,0x5e,0x6d,0x20,0x1a,0x22,0x21,0x1c, 0x23,0x24,0x20,0x2a,0x30,0x2c,0x3c,0x38,0x36,0x49,0x3a,0x39,0x4e,0x3a,0x39,0x4c, 0x36,0x35,0x48,0x3b,0x38,0x4b,0x44,0x40,0x56,0x46,0x42,0x57,0x46,0x42,0x57,0x49, 0x41,0x54,0x4a,0x41,0x52,0x4e,0x43,0x55,0x4e,0x42,0x54,0x4f,0x42,0x54,0x4d,0x3f, 0x50,0x40,0x33,0x40,0x30,0x25,0x2d,0x25,0x1b,0x21,0x29,0x24,0x2e,0x30,0x2b,0x33, 0x35,0x30,0x37,0x32,0x2c,0x34,0x1a,0x12,0x16,0x29,0x1f,0x26,0x3d,0x31,0x3b,0x4a, 0x3c,0x4a,0x4e,0x3f,0x50,0x50,0x42,0x52,0x50,0x42,0x52,0x4f,0x40,0x50,0x53,0x45, 0x57,0x54,0x48,0x5c,0x55,0x4a,0x5f,0x56,0x4b,0x5f,0x57,0x4a,0x5d,0x56,0x46,0x58, 0x56,0x46,0x57,0x5b,0x4f,0x65,0x5c,0x50,0x65,0x5f,0x53,0x6a,0x6b,0x66,0x7d,0x66, 0x63,0x7c,0x57,0x52,0x6d,0x52,0x4e,0x68,0x4f,0x4c,0x67,0x4e,0x4d,0x68,0x4f,0x4c, 0x67,0x53,0x4e,0x68,0x58,0x50,0x6b,0x4a,0x43,0x59,0x57,0x4e,0x66,0x59,0x52,0x6d, 0x52,0x52,0x6f,0x62,0x6a,0x83,0x72,0x79,0x8e,0x76,0x7d,0x90,0x7e,0x84,0x95,0x8d, 0x92,0x9e,0xa3,0xa5,0xab,0xa4,0xa6,0xaa,0x9c,0x9e,0xaa,0x8c,0x8c,0x9a,0x7e,0x80, 0x91,0x6a,0x6d,0x81,0x6a,0x6c,0x7e,0x68,0x68,0x77,0x66,0x63,0x6d,0x5b,0x58,0x5f, 0xb7,0xb8,0xc0,0x97,0x9e,0xad,0x6d,0x76,0x8f,0x65,0x64,0x80,0x6c,0x5f,0x77,0x60, 0x4d,0x65,0x59,0x45,0x5e,0x58,0x44,0x5d,0x55,0x41,0x5b,0x52,0x3f,0x56,0x4e,0x3d, 0x53,0x4b,0x3b,0x51,0x3f,0x32,0x45,0x4c,0x3f,0x55,0x31,0x34,0x48,0x20,0x23,0x2d, 0x21,0x23,0x2d,0x1f,0x22,0x2a,0x1d,0x20,0x27,0x49,0x47,0x62,0x55,0x51,0x73,0x57, 0x50,0x73,0x59,0x51,0x73,0x5c,0x52,0x72,0x5d,0x53,0x74,0x5d,0x54,0x74,0x5b,0x51, 0x72,0x59,0x4b,0x68,0x47,0x3d,0x57,0x4f,0x49,0x67,0x61,0x5c,0x77,0x73,0x6d,0x87, 0x81,0x7e,0x96,0x7d,0x7c,0x94,0x7c,0x80,0x99,0x99,0x9e,0xae,0x5b,0x5e,0x66,0x66, 0x68,0x6f,0x5f,0x62,0x6a,0x4e,0x50,0x58,0x3f,0x42,0x4a,0x38,0x3a,0x42,0x50,0x4c, 0x57,0x5e,0x56,0x62,0xa5,0xa9,0xb7,0x7c,0x83,0x9b,0x76,0x7f,0x98,0x77,0x7f,0x9b, 0x71,0x79,0x98,0x65,0x6e,0x8f,0x57,0x60,0x84,0x53,0x5d,0x83,0x50,0x5c,0x85,0x52, 0x5c,0x84,0x4f,0x5b,0x81,0x4e,0x58,0x80,0x4d,0x58,0x7f,0x49,0x53,0x79,0x46,0x4c, 0x73,0x43,0x46,0x63,0x31,0x2a,0x36,0x4a,0x3e,0x4e,0x56,0x4a,0x5c,0x5b,0x50,0x66, 0x50,0x4e,0x6b,0x50,0x52,0x6e,0x4e,0x4e,0x6a,0x4d,0x4e,0x6a,0x4c,0x50,0x6b,0x4c, 0x4c,0x68,0x4c,0x4a,0x65,0x50,0x4b,0x65,0x4b,0x49,0x62,0x44,0x42,0x5a,0x3d,0x3c, 0x52,0x36,0x3a,0x4e,0x35,0x3a,0x48,0x4b,0x50,0x65,0x61,0x61,0x80,0x5c,0x5e,0x7a, 0x3c,0x42,0x50,0x3e,0x42,0x52,0x3f,0x44,0x52,0x40,0x45,0x54,0x3f,0x44,0x52,0x3e, 0x43,0x52,0x3c,0x41,0x50,0x3c,0x40,0x50,0x3f,0x44,0x53,0x40,0x45,0x54,0x42,0x46, 0x56,0x42,0x48,0x59,0x4d,0x52,0x63,0x5a,0x60,0x6f,0x67,0x6d,0x7b,0x62,0x68,0x78, 0x5c,0x62,0x72,0x57,0x5c,0x6d,0x49,0x4e,0x5f,0x41,0x46,0x58,0x3b,0x42,0x53,0x37, 0x39,0x4c,0x39,0x37,0x4b,0x3a,0x38,0x4b,0x3c,0x37,0x4a,0x3c,0x36,0x48,0x3b,0x36, 0x46,0x3a,0x34,0x44,0x32,0x31,0x42,0x32,0x36,0x47,0x46,0x4c,0x5b,0x55,0x5a,0x69, 0x5b,0x61,0x6f,0x59,0x5e,0x6d,0x49,0x4e,0x5b,0x3e,0x43,0x52,0x3c,0x41,0x4f,0x36, 0x3b,0x48,0x2d,0x31,0x3c,0x22,0x26,0x30,0x1d,0x1f,0x29,0x21,0x22,0x2a,0x13,0x15, 0x1c,0x1f,0x21,0x27,0x32,0x33,0x39,0x2d,0x2e,0x35,0x54,0x56,0x5b,0x5c,0x5c,0x65, 0x77,0x75,0x7f,0x90,0x92,0x96,0x7e,0x7f,0x86,0x49,0x4b,0x54,0x2e,0x31,0x3a,0x1e, 0x20,0x26,0x0e,0x0f,0x14,0x09,0x0a,0x0d,0x07,0x08,0x0a,0x04,0x05,0x06,0x02,0x02, 0x03,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x2e,0x2f,0x31,0x75,0x81,0xa2,0x54,0x60,0x8a,0x53, 0x5e,0x88,0x54,0x60,0x8a,0x54,0x5f,0x89,0x55,0x60,0x8a,0x55,0x62,0x8a,0x56,0x62, 0x8b,0x56,0x62,0x8b,0x56,0x62,0x8b,0x56,0x63,0x8b,0x61,0x6e,0x9d,0x67,0x76,0xa1, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x03,0x03,0x03,0x06,0x06,0x06,0x0a,0x0a,0x0a, 0x0f,0x0f,0x10,0x16,0x16,0x17,0x21,0x22,0x23,0x31,0x32,0x36,0x57,0x59,0x5c,0x8b, 0x8b,0x8e,0x89,0x8a,0x8b,0x61,0x61,0x63,0x54,0x56,0x5a,0x49,0x4c,0x54,0x53,0x57, 0x60,0x57,0x5a,0x63,0x4f,0x52,0x5a,0x58,0x5b,0x65,0x66,0x69,0x74,0x76,0x7a,0x86, 0x81,0x84,0x90,0x8a,0x8e,0x97,0x8f,0x92,0x9d,0x8e,0x92,0x9c,0x92,0x95,0x9f,0x8f, 0x93,0x9e,0x89,0x8d,0x98,0x81,0x83,0x8e,0x72,0x76,0x83,0x4b,0x51,0x67,0x3f,0x3d, 0x52,0x3f,0x3a,0x4b,0x40,0x3b,0x4f,0x4a,0x42,0x57,0x49,0x42,0x59,0x54,0x4a,0x61, 0x52,0x50,0x6c,0x51,0x4f,0x6c,0x52,0x50,0x6e,0x4d,0x4c,0x67,0x47,0x44,0x5a,0x4e, 0x47,0x5e,0x4f,0x4d,0x69,0x49,0x4a,0x65,0x50,0x57,0x6e,0x72,0x79,0x8e,0x82,0x88, 0x98,0x86,0x8b,0x9b,0x81,0x86,0x97,0x82,0x88,0x98,0x82,0x87,0x98,0x89,0x8e,0x9d, 0x88,0x8e,0x9d,0x83,0x8a,0x9a,0x7d,0x82,0x93,0x7c,0x82,0x92,0x7b,0x80,0x8f,0x7a, 0x7e,0x8e,0x79,0x7e,0x8d,0x75,0x7a,0x8a,0x6b,0x71,0x83,0x5c,0x62,0x79,0x47,0x47, 0x60,0x44,0x42,0x5a,0x44,0x42,0x5a,0x42,0x40,0x57,0x3f,0x3d,0x52,0x3a,0x38,0x4a, 0x3c,0x38,0x4a,0x41,0x3c,0x4e,0x41,0x3c,0x4f,0x3c,0x38,0x4a,0x38,0x36,0x47,0x3c, 0x39,0x4e,0x41,0x3e,0x56,0x46,0x46,0x5f,0x5f,0x67,0x80,0x7e,0x84,0x96,0x8e,0x93, 0xa0,0x8c,0x91,0x9e,0x76,0x7a,0x8b,0x71,0x79,0x92,0x50,0x58,0x77,0x4d,0x4c,0x6c, 0x56,0x4c,0x66,0x4e,0x46,0x61,0x61,0x5c,0x6f,0x4f,0x42,0x51,0x40,0x35,0x43,0x34, 0x2d,0x3a,0x31,0x2b,0x38,0x30,0x28,0x32,0x2c,0x24,0x2d,0x2e,0x2d,0x36,0x27,0x22, 0x24,0x28,0x21,0x29,0x22,0x1e,0x27,0x22,0x20,0x2b,0x25,0x24,0x31,0x29,0x28,0x36, 0x34,0x37,0x49,0x5a,0x62,0x7d,0x61,0x65,0x80,0x6e,0x69,0x7e,0x4e,0x55,0x6f,0x40, 0x47,0x64,0x44,0x4c,0x6b,0x49,0x54,0x75,0x53,0x3f,0x58,0x56,0x60,0x85,0xe4,0xe6, 0xe8,0x2b,0x23,0x25,0x24,0x19,0x1e,0x2b,0x20,0x26,0x29,0x1e,0x24,0x34,0x27,0x2f, 0x75,0x61,0x7a,0x11,0x12,0x13,0x00,0x00,0x00,0x00,0x00,0x00,0x2e,0x30,0x35,0xab, 0xb3,0xc8,0x76,0x81,0xa2,0x53,0x56,0x7f,0x6c,0x77,0x9b,0x64,0x70,0x95,0x65,0x72, 0x96,0x65,0x71,0x96,0x66,0x72,0x97,0x68,0x73,0x98,0x67,0x71,0x95,0x60,0x6b,0x8c, 0x5d,0x65,0x84,0x5b,0x5e,0x7c,0x4e,0x47,0x67,0x4e,0x4f,0x6e,0x6b,0x6b,0x81,0x24, 0x1e,0x25,0x21,0x1b,0x22,0x25,0x20,0x29,0x2f,0x2a,0x38,0x32,0x2f,0x3f,0x37,0x34, 0x46,0x3c,0x3a,0x4e,0x43,0x3e,0x53,0x4b,0x42,0x56,0x4e,0x45,0x58,0x4e,0x45,0x58, 0x4d,0x43,0x57,0x48,0x3e,0x4f,0x49,0x3d,0x4d,0x4e,0x41,0x52,0x52,0x45,0x57,0x52, 0x46,0x58,0x53,0x46,0x59,0x54,0x48,0x5b,0x55,0x46,0x59,0x51,0x43,0x52,0x4a,0x3d, 0x4c,0x48,0x41,0x4c,0x47,0x41,0x4b,0x4f,0x47,0x53,0x3b,0x2e,0x38,0x43,0x35,0x42, 0x49,0x3b,0x4a,0x4b,0x3c,0x4b,0x50,0x41,0x52,0x4c,0x3e,0x4e,0x45,0x36,0x43,0x32, 0x26,0x2f,0x42,0x34,0x42,0x4f,0x41,0x50,0x52,0x42,0x54,0x52,0x43,0x54,0x52,0x42, 0x53,0x4f,0x41,0x50,0x52,0x42,0x53,0x5b,0x4b,0x5e,0x5c,0x4c,0x5f,0x5b,0x50,0x66, 0x52,0x50,0x6d,0x63,0x61,0x7b,0x6b,0x69,0x82,0x5d,0x5b,0x75,0x52,0x50,0x6d,0x50, 0x4f,0x6b,0x50,0x51,0x6d,0x51,0x50,0x6e,0x52,0x51,0x6d,0x54,0x4f,0x6a,0x4f,0x47, 0x5f,0x5b,0x51,0x69,0x57,0x52,0x6d,0x52,0x53,0x71,0x5d,0x65,0x7f,0x5d,0x65,0x7f, 0x60,0x69,0x82,0x73,0x7a,0x8d,0xa0,0xa2,0xaa,0xab,0xad,0xb1,0xa5,0xa6,0xaf,0xa2, 0xa1,0xaa,0x8e,0x8e,0x99,0x83,0x85,0x94,0x78,0x7a,0x8c,0x84,0x85,0x92,0x8b,0x8a, 0x90,0x7e,0x7b,0x80,0xc9,0xcb,0xcf,0xa1,0xa5,0xb3,0x6c,0x73,0x8e,0x5a,0x57,0x75, 0x63,0x56,0x70,0x5d,0x4a,0x62,0x57,0x43,0x5b,0x57,0x41,0x5b,0x52,0x3f,0x57,0x4d, 0x3a,0x51,0x4d,0x3c,0x52,0x4a,0x3a,0x50,0x38,0x2c,0x3c,0x42,0x36,0x4a,0x4a,0x47, 0x62,0x20,0x23,0x2d,0x21,0x24,0x2d,0x1f,0x22,0x2a,0x1e,0x21,0x29,0x45,0x43,0x5c, 0x55,0x52,0x73,0x58,0x51,0x73,0x5b,0x51,0x71,0x5b,0x51,0x71,0x5d,0x53,0x73,0x5a, 0x51,0x72,0x5e,0x51,0x71,0x56,0x49,0x67,0x40,0x38,0x4f,0x47,0x3e,0x57,0x4c,0x46, 0x63,0x68,0x62,0x7d,0x7b,0x78,0x8f,0x84,0x82,0x99,0x80,0x83,0x9b,0x98,0x9e,0xaf, 0x5e,0x61,0x68,0x59,0x5c,0x64,0x51,0x54,0x5d,0x47,0x4a,0x53,0x3f,0x42,0x4a,0x41, 0x43,0x4a,0x65,0x63,0x6d,0x71,0x6b,0x76,0x9c,0xa1,0xb0,0x79,0x81,0x97,0x6f,0x77, 0x91,0x6d,0x76,0x93,0x6e,0x76,0x95,0x6e,0x77,0x95,0x61,0x6a,0x8c,0x57,0x61,0x86, 0x55,0x5f,0x85,0x56,0x61,0x86,0x56,0x60,0x87,0x52,0x5d,0x82,0x4e,0x58,0x7f,0x4c, 0x56,0x7b,0x48,0x52,0x76,0x46,0x49,0x65,0x33,0x2a,0x36,0x4b,0x3f,0x50,0x56,0x49, 0x5c,0x56,0x4e,0x68,0x51,0x55,0x72,0x58,0x61,0x7a,0x52,0x5a,0x76,0x52,0x5a,0x74, 0x53,0x5b,0x76,0x51,0x59,0x74,0x4e,0x4e,0x6a,0x52,0x4e,0x68,0x51,0x4c,0x66,0x4a, 0x49,0x63,0x45,0x43,0x5c,0x3e,0x3f,0x55,0x3a,0x40,0x52,0x3b,0x41,0x51,0x42,0x46, 0x56,0x3d,0x42,0x51,0x3d,0x42,0x51,0x3e,0x42,0x52,0x40,0x45,0x54,0x3e,0x42,0x52, 0x3e,0x42,0x52,0x41,0x46,0x55,0x3e,0x42,0x53,0x40,0x45,0x54,0x46,0x4a,0x59,0x47, 0x4c,0x5b,0x4a,0x4f,0x5f,0x54,0x5a,0x69,0x67,0x6c,0x7b,0x6e,0x72,0x81,0x70,0x74, 0x83,0x6a,0x6f,0x7e,0x5e,0x64,0x73,0x53,0x58,0x69,0x44,0x4a,0x5a,0x3d,0x42,0x53, 0x37,0x39,0x4d,0x39,0x38,0x4c,0x3b,0x38,0x4b,0x3b,0x37,0x4a,0x3b,0x36,0x48,0x3b, 0x36,0x46,0x3a,0x34,0x44,0x3a,0x33,0x42,0x38,0x33,0x44,0x36,0x36,0x49,0x43,0x4a, 0x5c,0x4e,0x54,0x65,0x4e,0x55,0x66,0x44,0x4a,0x5c,0x37,0x3d,0x4e,0x36,0x3b,0x49, 0x35,0x39,0x47,0x36,0x3a,0x47,0x35,0x39,0x46,0x2e,0x32,0x3e,0x26,0x2a,0x35,0x1e, 0x20,0x2a,0x4e,0x50,0x57,0x73,0x74,0x7a,0x56,0x58,0x5e,0x31,0x34,0x3d,0x4f,0x52, 0x5a,0x6b,0x6e,0x74,0x80,0x82,0x89,0x74,0x76,0x7c,0x4c,0x4e,0x56,0x2b,0x2e,0x36, 0x2a,0x2e,0x34,0x25,0x27,0x2e,0x13,0x15,0x1a,0x0a,0x0a,0x0e,0x0a,0x0a,0x0d,0x04, 0x04,0x06,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x07,0x92,0x9b,0xb5, 0x5a,0x66,0x8e,0x52,0x5d,0x86,0x53,0x5e,0x88,0x53,0x5e,0x89,0x54,0x5f,0x89,0x55, 0x60,0x8a,0x54,0x60,0x8a,0x55,0x62,0x8b,0x55,0x60,0x8a,0x55,0x60,0x8a,0x59,0x65, 0x90,0x7b,0x8b,0xc9,0x04,0x05,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x03,0x03,0x03,0x05,0x05, 0x06,0x07,0x08,0x08,0x0c,0x0d,0x0e,0x12,0x12,0x14,0x18,0x19,0x1a,0x25,0x26,0x28, 0x45,0x46,0x49,0x6e,0x6f,0x72,0x71,0x72,0x74,0x62,0x62,0x65,0x64,0x66,0x68,0x4f, 0x51,0x56,0x50,0x52,0x56,0x4f,0x51,0x56,0x46,0x49,0x50,0x4d,0x50,0x5a,0x55,0x59, 0x66,0x62,0x66,0x73,0x6f,0x73,0x7e,0x81,0x85,0x90,0x8b,0x90,0x9a,0x94,0x97,0xa1, 0x96,0x9a,0xa3,0x94,0x96,0x9e,0x8d,0x8f,0x97,0x84,0x87,0x91,0x61,0x66,0x79,0x40, 0x3e,0x53,0x3e,0x39,0x4b,0x42,0x3e,0x50,0x4b,0x47,0x5e,0x4d,0x48,0x60,0x55,0x4c, 0x63,0x5e,0x53,0x6c,0x52,0x51,0x6e,0x52,0x51,0x6e,0x52,0x54,0x71,0x49,0x4b,0x66, 0x3e,0x3e,0x56,0x4b,0x47,0x5f,0x56,0x51,0x6d,0x52,0x50,0x6e,0x47,0x46,0x60,0x54, 0x5c,0x75,0x71,0x78,0x8d,0x77,0x7e,0x91,0x7a,0x81,0x93,0x7c,0x82,0x95,0x7e,0x84, 0x96,0x81,0x86,0x98,0x79,0x7f,0x92,0x73,0x7a,0x8c,0x6e,0x74,0x86,0x6e,0x74,0x87, 0x71,0x76,0x88,0x6e,0x74,0x86,0x6e,0x74,0x86,0x6a,0x6f,0x83,0x5c,0x62,0x77,0x50, 0x55,0x6c,0x42,0x42,0x58,0x42,0x3e,0x52,0x45,0x3d,0x4e,0x45,0x3d,0x4f,0x46,0x3e, 0x51,0x54,0x4b,0x62,0x56,0x4f,0x6a,0x52,0x50,0x6d,0x52,0x52,0x6f,0x50,0x53,0x70, 0x4e,0x54,0x70,0x4f,0x56,0x70,0x4e,0x54,0x6e,0x4e,0x54,0x6f,0x58,0x60,0x7a,0x76, 0x7c,0x8e,0x85,0x8a,0x97,0x8e,0x92,0x9e,0x95,0x99,0xa3,0x90,0x97,0xac,0x58,0x5e, 0x7e,0x55,0x50,0x6e,0x4f,0x4d,0x6d,0x57,0x4e,0x69,0x4d,0x49,0x67,0x69,0x62,0x73, 0x49,0x3c,0x4b,0x36,0x30,0x3e,0x31,0x2d,0x3a,0x2d,0x28,0x35,0x2a,0x24,0x2e,0x24, 0x21,0x2b,0x36,0x35,0x3a,0x1a,0x15,0x18,0x20,0x1a,0x21,0x22,0x1e,0x26,0x2f,0x2a, 0x35,0x37,0x31,0x3e,0x2f,0x2e,0x40,0x4e,0x55,0x70,0x4a,0x4b,0x66,0x52,0x4b,0x62, 0x45,0x4a,0x68,0x4a,0x52,0x70,0x49,0x52,0x72,0x4c,0x57,0x7a,0x58,0x43,0x5b,0x4d, 0x4d,0x75,0xd3,0xd6,0xde,0x52,0x4c,0x4f,0x24,0x1a,0x1f,0x2b,0x1f,0x26,0x2a,0x1e, 0x24,0x2f,0x23,0x2a,0x68,0x54,0x68,0x28,0x2a,0x31,0x00,0x00,0x00,0x00,0x00,0x00, 0x02,0x02,0x02,0xa4,0xaa,0xbc,0x90,0x99,0xb4,0x53,0x58,0x81,0x5f,0x6c,0x92,0x68, 0x73,0x98,0x62,0x6d,0x93,0x66,0x72,0x97,0x63,0x70,0x95,0x65,0x72,0x96,0x64,0x71, 0x95,0x61,0x6d,0x8f,0x5f,0x66,0x86,0x5c,0x5f,0x7d,0x4f,0x51,0x70,0x4d,0x45,0x65, 0x5e,0x5f,0x7a,0x44,0x3f,0x49,0x26,0x1f,0x27,0x2b,0x26,0x2e,0x33,0x2e,0x3b,0x36, 0x32,0x42,0x39,0x35,0x47,0x40,0x3a,0x4c,0x44,0x3a,0x4b,0x46,0x3a,0x4a,0x46,0x3a, 0x4a,0x46,0x3a,0x4a,0x42,0x38,0x46,0x3e,0x33,0x40,0x40,0x34,0x42,0x49,0x3c,0x4b, 0x4e,0x42,0x52,0x4e,0x43,0x56,0x4e,0x46,0x5b,0x4b,0x46,0x5e,0x4d,0x48,0x60,0x52, 0x4b,0x61,0x5a,0x4d,0x64,0x70,0x67,0x7b,0x6d,0x65,0x78,0x6e,0x67,0x7a,0x4f,0x44, 0x54,0x4a,0x3f,0x50,0x4f,0x44,0x56,0x54,0x49,0x5d,0x42,0x3b,0x4c,0x45,0x3c,0x4e, 0x47,0x3c,0x4c,0x40,0x34,0x40,0x43,0x36,0x43,0x4b,0x3c,0x4b,0x4a,0x3d,0x4b,0x51, 0x42,0x52,0x52,0x44,0x55,0x4e,0x3e,0x4e,0x56,0x46,0x58,0x5d,0x51,0x68,0x5d,0x50, 0x66,0x5b,0x4b,0x5e,0x5b,0x4f,0x66,0x5c,0x4f,0x65,0x61,0x58,0x6f,0x67,0x66,0x7f, 0x6d,0x6d,0x85,0x6f,0x6f,0x87,0x63,0x65,0x7f,0x5e,0x5f,0x7a,0x56,0x55,0x72,0x55, 0x51,0x6d,0x4c,0x46,0x5e,0x57,0x51,0x6c,0x56,0x52,0x6d,0x53,0x51,0x6d,0x52,0x51, 0x6e,0x52,0x51,0x6e,0x51,0x54,0x72,0x69,0x70,0x86,0x9f,0xa2,0xaa,0xb3,0xb4,0xb7, 0xb5,0xb6,0xbb,0xb7,0xb4,0xba,0xb0,0xae,0xb3,0xa8,0xa6,0xae,0xa6,0xa5,0xac,0xa4, 0xa3,0xab,0xa6,0xa4,0xa8,0x9b,0x98,0x9c,0xd0,0xd1,0xd6,0xae,0xb2,0xbc,0x72,0x79, 0x92,0x5e,0x5c,0x79,0x61,0x55,0x6d,0x5f,0x4c,0x64,0x57,0x43,0x5b,0x57,0x41,0x5a, 0x52,0x3e,0x56,0x4d,0x3a,0x51,0x4d,0x3b,0x52,0x49,0x3a,0x50,0x3b,0x2d,0x41,0x3a, 0x2e,0x40,0x5c,0x4e,0x68,0x2c,0x30,0x3a,0x21,0x24,0x2d,0x20,0x23,0x2c,0x1e,0x20, 0x28,0x44,0x42,0x5b,0x56,0x51,0x72,0x58,0x51,0x73,0x58,0x51,0x73,0x5c,0x52,0x72, 0x5d,0x53,0x73,0x5a,0x51,0x72,0x5d,0x51,0x71,0x5a,0x4e,0x6d,0x51,0x46,0x61,0x43, 0x3c,0x54,0x4c,0x43,0x5e,0x63,0x5d,0x79,0x82,0x80,0x96,0x88,0x87,0x9c,0x85,0x86, 0x9e,0x98,0x9e,0xaf,0x5d,0x60,0x69,0x5e,0x62,0x6a,0x61,0x63,0x6b,0x5a,0x5e,0x66, 0x52,0x56,0x5e,0x56,0x58,0x5f,0x78,0x77,0x7e,0x7d,0x77,0x81,0x90,0x94,0xa4,0x77, 0x7f,0x95,0x6d,0x75,0x8d,0x66,0x6e,0x8b,0x68,0x71,0x8f,0x77,0x7e,0x9a,0x77,0x7f, 0x9b,0x69,0x72,0x92,0x61,0x6b,0x8d,0x65,0x6e,0x8f,0x61,0x6c,0x8e,0x5d,0x68,0x8a, 0x59,0x63,0x87,0x56,0x5f,0x82,0x51,0x5b,0x7c,0x44,0x4b,0x6b,0x31,0x2d,0x3a,0x4a, 0x41,0x52,0x56,0x4b,0x60,0x4e,0x4d,0x69,0x57,0x60,0x7b,0x65,0x6e,0x85,0x5d,0x66, 0x7e,0x4f,0x56,0x72,0x50,0x57,0x72,0x53,0x5a,0x76,0x50,0x55,0x72,0x50,0x4e,0x6a, 0x52,0x4e,0x68,0x4e,0x4c,0x66,0x49,0x48,0x62,0x43,0x43,0x5b,0x3e,0x43,0x59,0x3e, 0x43,0x56,0x42,0x47,0x56,0x40,0x45,0x55,0x3f,0x44,0x54,0x3f,0x44,0x54,0x40,0x46, 0x55,0x42,0x47,0x56,0x41,0x46,0x56,0x42,0x47,0x57,0x4a,0x4f,0x5e,0x56,0x5a,0x68, 0x61,0x65,0x70,0x64,0x68,0x73,0x6a,0x6e,0x7a,0x6f,0x74,0x82,0x6e,0x73,0x82,0x6b, 0x71,0x80,0x67,0x6e,0x7c,0x5e,0x64,0x74,0x52,0x57,0x67,0x45,0x4b,0x5c,0x3d,0x42, 0x53,0x36,0x3b,0x4d,0x35,0x35,0x48,0x3a,0x37,0x4a,0x3b,0x37,0x49,0x38,0x35,0x46, 0x33,0x31,0x42,0x32,0x30,0x40,0x37,0x32,0x42,0x38,0x32,0x42,0x37,0x32,0x42,0x36, 0x34,0x46,0x38,0x39,0x4d,0x3a,0x40,0x54,0x39,0x3b,0x50,0x36,0x36,0x4a,0x31,0x30, 0x42,0x2a,0x2d,0x3b,0x2a,0x2e,0x3b,0x2e,0x32,0x3e,0x38,0x3d,0x49,0x40,0x44,0x50, 0x3a,0x3f,0x4a,0x31,0x34,0x3f,0x46,0x49,0x52,0x51,0x53,0x5a,0x30,0x34,0x3e,0x6a, 0x6c,0x74,0x7c,0x7e,0x84,0x72,0x73,0x7a,0x56,0x57,0x5e,0x3a,0x3e,0x45,0x28,0x2a, 0x32,0x17,0x19,0x1e,0x13,0x14,0x19,0x15,0x16,0x1c,0x11,0x12,0x16,0x12,0x13,0x16, 0x09,0x0a,0x0c,0x02,0x02,0x03,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x89,0x8d,0x9e,0x62,0x6e,0x94,0x53,0x5e,0x88,0x52,0x5d,0x88,0x53,0x5d,0x88, 0x53,0x5e,0x88,0x53,0x5f,0x89,0x54,0x5f,0x89,0x54,0x5f,0x89,0x55,0x60,0x8a,0x55, 0x60,0x8a,0x54,0x5f,0x89,0x63,0x72,0xa4,0x39,0x41,0x55,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02, 0x02,0x02,0x04,0x04,0x04,0x06,0x06,0x07,0x0a,0x0a,0x0a,0x0f,0x0f,0x10,0x14,0x14, 0x16,0x1a,0x1a,0x1d,0x23,0x24,0x26,0x34,0x35,0x37,0x3e,0x3e,0x40,0x4a,0x4b,0x4e, 0x5b,0x5c,0x5e,0x4f,0x51,0x55,0x3e,0x3f,0x43,0x37,0x38,0x3b,0x2e,0x30,0x36,0x2e, 0x32,0x3f,0x36,0x3c,0x4e,0x4a,0x51,0x62,0x5e,0x63,0x74,0x75,0x7a,0x87,0x88,0x8b, 0x96,0x96,0x99,0xa1,0x9a,0x9b,0xa2,0x95,0x96,0x9c,0x94,0x95,0x9b,0x7e,0x81,0x8d, 0x40,0x3f,0x56,0x49,0x40,0x53,0x52,0x49,0x5f,0x58,0x4d,0x63,0x4d,0x44,0x56,0x55, 0x4b,0x5e,0x5d,0x4d,0x60,0x5f,0x52,0x68,0x52,0x50,0x6e,0x51,0x52,0x6f,0x52,0x56, 0x73,0x43,0x46,0x5d,0x42,0x42,0x5b,0x46,0x44,0x5c,0x51,0x4b,0x65,0x52,0x51,0x6e, 0x4d,0x4d,0x67,0x47,0x4f,0x66,0x69,0x71,0x88,0x70,0x78,0x8d,0x73,0x7a,0x8e,0x75, 0x7c,0x91,0x77,0x7e,0x92,0x74,0x7b,0x90,0x69,0x71,0x87,0x65,0x6c,0x82,0x64,0x6a, 0x80,0x64,0x6a,0x7f,0x63,0x6a,0x7e,0x5e,0x63,0x78,0x56,0x5b,0x6e,0x4b,0x4f,0x64, 0x44,0x48,0x5e,0x3c,0x3d,0x52,0x3a,0x3a,0x4e,0x42,0x3f,0x54,0x4f,0x48,0x5e,0x48, 0x42,0x57,0x54,0x4f,0x66,0x56,0x53,0x6e,0x52,0x50,0x6e,0x52,0x53,0x70,0x52,0x56, 0x73,0x53,0x5a,0x76,0x56,0x5f,0x79,0x5a,0x63,0x7a,0x58,0x60,0x78,0x52,0x5a,0x72, 0x60,0x68,0x7e,0x7c,0x82,0x92,0x98,0x9b,0xa5,0x8e,0x93,0x9d,0x89,0x8d,0x9a,0xa3, 0xa9,0xbb,0x77,0x7b,0x97,0x56,0x52,0x70,0x52,0x50,0x6f,0x4e,0x4e,0x6e,0x4f,0x45, 0x5f,0x56,0x58,0x70,0x60,0x53,0x67,0x3c,0x35,0x46,0x32,0x30,0x3d,0x2a,0x28,0x34, 0x29,0x24,0x2f,0x24,0x20,0x2a,0x2c,0x2a,0x32,0x38,0x34,0x36,0x1c,0x17,0x1c,0x29, 0x23,0x2c,0x3a,0x32,0x40,0x42,0x38,0x47,0x3b,0x34,0x43,0x44,0x46,0x63,0x3f,0x3d, 0x5a,0x45,0x3c,0x55,0x42,0x44,0x63,0x5a,0x64,0x81,0x5c,0x65,0x85,0x58,0x61,0x84, 0x5d,0x4d,0x6b,0x53,0x4c,0x73,0xbd,0xc2,0xd0,0x7b,0x76,0x77,0x23,0x18,0x1d,0x2d, 0x21,0x28,0x2c,0x20,0x26,0x2e,0x21,0x28,0x56,0x43,0x53,0x3a,0x40,0x51,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6a,0x6e,0x79,0x9c,0xa4,0xbe,0x5b,0x66,0x8d, 0x58,0x64,0x8b,0x69,0x75,0x99,0x62,0x6d,0x94,0x64,0x71,0x96,0x62,0x6e,0x94,0x64, 0x70,0x94,0x63,0x6f,0x94,0x61,0x6d,0x92,0x60,0x6a,0x8c,0x5d,0x62,0x82,0x55,0x58, 0x78,0x50,0x48,0x67,0x58,0x5a,0x76,0x5e,0x5c,0x6b,0x2a,0x23,0x2c,0x2d,0x26,0x31, 0x30,0x2a,0x36,0x33,0x2e,0x3c,0x35,0x2f,0x3e,0x39,0x32,0x3f,0x3d,0x33,0x3f,0x3e, 0x32,0x40,0x3c,0x32,0x3f,0x3a,0x32,0x3e,0x36,0x2d,0x39,0x32,0x2a,0x34,0x32,0x29, 0x34,0x39,0x2e,0x3b,0x42,0x36,0x43,0x47,0x3d,0x4c,0x4b,0x42,0x56,0x49,0x43,0x59, 0x46,0x43,0x5a,0x45,0x44,0x5c,0x51,0x4c,0x66,0x6d,0x6b,0x88,0x73,0x6f,0x89,0x76, 0x6f,0x87,0x5b,0x51,0x66,0x46,0x3e,0x52,0x48,0x42,0x57,0x48,0x46,0x61,0x4b,0x51, 0x6c,0x4d,0x55,0x6f,0x47,0x4a,0x64,0x45,0x3f,0x55,0x40,0x38,0x46,0x40,0x36,0x45, 0x46,0x39,0x49,0x47,0x3d,0x4f,0x4f,0x44,0x57,0x4e,0x3f,0x50,0x54,0x45,0x56,0x5a, 0x4f,0x66,0x5d,0x4f,0x64,0x58,0x47,0x5a,0x5d,0x4d,0x60,0x5c,0x4d,0x61,0x5b,0x4f, 0x63,0x5b,0x50,0x69,0x53,0x4f,0x6a,0x55,0x54,0x71,0x5e,0x5e,0x79,0x63,0x61,0x7c, 0x69,0x67,0x80,0x6e,0x6a,0x82,0x63,0x5f,0x77,0x52,0x50,0x6e,0x52,0x51,0x6e,0x55, 0x52,0x6d,0x58,0x52,0x6d,0x54,0x52,0x6d,0x51,0x50,0x6e,0x62,0x6a,0x82,0x9b,0x9e, 0xa8,0xb0,0xb2,0xb6,0xb5,0xb7,0xba,0xc3,0xc1,0xc6,0xb7,0xb4,0xb9,0xb4,0xb3,0xb9, 0xb2,0xb0,0xb6,0xaa,0xa8,0xae,0xa6,0xa4,0xa8,0xa2,0xa0,0xa3,0xd5,0xd6,0xd9,0xbd, 0xbf,0xc7,0x92,0x98,0xa9,0x72,0x71,0x8c,0x77,0x6c,0x81,0x64,0x51,0x68,0x56,0x42, 0x5b,0x55,0x40,0x58,0x52,0x3e,0x55,0x4c,0x39,0x4f,0x4a,0x38,0x4d,0x48,0x39,0x4d, 0x3e,0x30,0x43,0x3c,0x2e,0x41,0x58,0x4a,0x63,0x40,0x45,0x57,0x22,0x24,0x2e,0x20, 0x23,0x2c,0x1d,0x1f,0x27,0x42,0x40,0x59,0x56,0x51,0x72,0x58,0x50,0x71,0x5a,0x51, 0x71,0x5a,0x51,0x74,0x5d,0x53,0x73,0x5c,0x52,0x72,0x59,0x4f,0x70,0x56,0x4d,0x6d, 0x56,0x4e,0x6c,0x4e,0x45,0x63,0x4c,0x45,0x5f,0x5f,0x5a,0x75,0x82,0x7f,0x95,0x83, 0x80,0x97,0x7f,0x81,0x99,0x99,0x9e,0xaf,0x6d,0x6f,0x77,0x76,0x79,0x80,0x7a,0x7c, 0x83,0x74,0x76,0x7e,0x67,0x6a,0x71,0x66,0x68,0x6f,0x78,0x77,0x7f,0x81,0x7c,0x86, 0x95,0x98,0xa8,0x87,0x8d,0xa1,0x7f,0x86,0x9a,0x70,0x79,0x92,0x70,0x78,0x92,0x7f, 0x86,0x9f,0x87,0x8e,0xa7,0x81,0x88,0xa2,0x79,0x80,0x9e,0x7a,0x81,0x9d,0x74,0x7b, 0x99,0x73,0x7c,0x9a,0x77,0x80,0x9c,0x6f,0x77,0x96,0x5c,0x64,0x85,0x49,0x52,0x70, 0x2b,0x2c,0x3c,0x46,0x40,0x56,0x56,0x4b,0x62,0x4f,0x4e,0x6a,0x5a,0x62,0x7d,0x66, 0x6e,0x86,0x5d,0x64,0x7e,0x4f,0x51,0x6e,0x4f,0x4e,0x6a,0x50,0x52,0x6f,0x51,0x56, 0x72,0x51,0x51,0x6e,0x50,0x4e,0x6a,0x4e,0x4c,0x67,0x4b,0x4a,0x64,0x47,0x47,0x62, 0x43,0x48,0x60,0x42,0x48,0x5d,0x46,0x4b,0x5d,0x43,0x48,0x59,0x43,0x49,0x5a,0x42, 0x47,0x57,0x45,0x4a,0x59,0x46,0x4b,0x5a,0x47,0x4d,0x5c,0x53,0x58,0x66,0x6a,0x6e, 0x78,0x81,0x83,0x8a,0x8a,0x8d,0x92,0x82,0x85,0x8d,0x80,0x84,0x8e,0x82,0x86,0x92, 0x6f,0x74,0x82,0x65,0x6a,0x7a,0x5c,0x62,0x72,0x4d,0x52,0x64,0x41,0x47,0x58,0x3d, 0x42,0x52,0x36,0x3a,0x4b,0x32,0x36,0x47,0x32,0x32,0x45,0x37,0x36,0x47,0x38,0x34, 0x46,0x31,0x30,0x42,0x2b,0x2b,0x3b,0x2a,0x2a,0x3a,0x2d,0x2c,0x3c,0x32,0x2e,0x3e, 0x34,0x30,0x3f,0x35,0x31,0x41,0x34,0x32,0x42,0x33,0x32,0x45,0x33,0x32,0x44,0x32, 0x2f,0x40,0x2c,0x2a,0x39,0x23,0x23,0x30,0x26,0x29,0x35,0x28,0x2c,0x37,0x2e,0x31, 0x3b,0x39,0x3d,0x48,0x3d,0x40,0x4b,0x3a,0x3e,0x4a,0x3b,0x3f,0x4b,0x40,0x44,0x4e, 0x62,0x64,0x6d,0x86,0x88,0x8f,0x90,0x91,0x96,0x81,0x82,0x88,0x47,0x4a,0x51,0x2c, 0x2e,0x35,0x1e,0x1f,0x23,0x0e,0x0e,0x12,0x08,0x09,0x0b,0x09,0x0a,0x0d,0x14,0x16, 0x19,0x20,0x22,0x26,0x12,0x12,0x15,0x02,0x02,0x03,0x02,0x02,0x02,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x45,0x46,0x4b,0x72,0x7d,0xa0,0x54,0x5f,0x89,0x52,0x5c, 0x86,0x52,0x5d,0x86,0x53,0x5e,0x88,0x53,0x5e,0x89,0x53,0x5e,0x88,0x53,0x5f,0x89, 0x53,0x5e,0x89,0x54,0x5f,0x89,0x54,0x5f,0x89,0x5a,0x65,0x92,0x7b,0x8b,0xcb,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x02,0x02,0x02,0x03,0x03,0x04,0x06,0x06,0x06,0x08,0x08,0x09,0x0b, 0x0b,0x0c,0x0f,0x10,0x11,0x14,0x15,0x16,0x19,0x1a,0x1c,0x1d,0x1e,0x20,0x20,0x21, 0x24,0x25,0x26,0x29,0x2a,0x2b,0x2e,0x2e,0x2e,0x32,0x28,0x2a,0x2d,0x22,0x22,0x26, 0x1e,0x20,0x28,0x2e,0x29,0x36,0x42,0x39,0x49,0x48,0x42,0x57,0x47,0x4c,0x66,0x64, 0x6a,0x7e,0x73,0x79,0x87,0x86,0x8a,0x93,0x8d,0x8e,0x96,0x8f,0x91,0x97,0x82,0x85, 0x91,0x4a,0x4e,0x64,0x4a,0x41,0x53,0x4e,0x43,0x54,0x46,0x3c,0x4d,0x3e,0x34,0x41, 0x4e,0x43,0x55,0x54,0x4b,0x62,0x58,0x4d,0x63,0x5d,0x51,0x69,0x51,0x4f,0x6d,0x51, 0x58,0x74,0x51,0x58,0x74,0x42,0x42,0x5b,0x42,0x41,0x58,0x53,0x4c,0x64,0x4e,0x49, 0x60,0x4e,0x4d,0x68,0x52,0x51,0x6d,0x47,0x48,0x61,0x53,0x5a,0x70,0x6d,0x75,0x8a, 0x6e,0x76,0x8c,0x6a,0x72,0x89,0x6a,0x72,0x8a,0x68,0x70,0x87,0x5c,0x65,0x7e,0x56, 0x5e,0x7a,0x50,0x54,0x6f,0x4f,0x56,0x71,0x49,0x4e,0x66,0x44,0x48,0x5e,0x3c,0x40, 0x54,0x39,0x37,0x4c,0x3b,0x39,0x4d,0x4a,0x44,0x5b,0x51,0x4e,0x68,0x50,0x4e,0x6a, 0x52,0x51,0x6e,0x4b,0x49,0x60,0x5d,0x5c,0x77,0x56,0x54,0x72,0x52,0x51,0x6f,0x52, 0x52,0x6e,0x52,0x50,0x6e,0x51,0x4f,0x6d,0x4f,0x4e,0x6a,0x48,0x46,0x60,0x44,0x43, 0x5b,0x44,0x48,0x60,0x4e,0x54,0x6c,0x62,0x69,0x7f,0x6f,0x75,0x84,0x6e,0x72,0x82, 0x7b,0x81,0x8f,0x99,0xa0,0xb4,0x70,0x75,0x8f,0x61,0x62,0x7f,0x5b,0x5a,0x7c,0x54, 0x54,0x73,0x56,0x4c,0x67,0x48,0x45,0x63,0x6b,0x69,0x7d,0x56,0x48,0x5d,0x3c,0x3a, 0x4b,0x32,0x30,0x3e,0x29,0x27,0x33,0x25,0x24,0x2e,0x26,0x25,0x2f,0x3a,0x37,0x3c, 0x3b,0x34,0x39,0x2b,0x23,0x2c,0x3c,0x32,0x3f,0x44,0x39,0x48,0x3d,0x34,0x42,0x48, 0x44,0x5f,0x42,0x40,0x5e,0x44,0x3d,0x58,0x40,0x3e,0x5f,0x52,0x5b,0x7c,0x5d,0x66, 0x88,0x58,0x63,0x86,0x54,0x4f,0x73,0x5f,0x50,0x72,0xa2,0xa9,0xbf,0xa6,0xa3,0xa4, 0x20,0x16,0x1a,0x2d,0x21,0x28,0x2d,0x21,0x28,0x2b,0x1f,0x25,0x45,0x35,0x41,0x49, 0x49,0x63,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x36,0x3b,0xa9,0xb0, 0xc6,0x6b,0x76,0x9a,0x54,0x5f,0x87,0x67,0x73,0x98,0x60,0x6c,0x92,0x62,0x6d,0x94, 0x60,0x6d,0x93,0x62,0x6d,0x94,0x62,0x6d,0x93,0x61,0x6c,0x90,0x5f,0x69,0x8d,0x5c, 0x64,0x86,0x5b,0x61,0x82,0x4d,0x48,0x6b,0x4e,0x52,0x74,0x6a,0x6b,0x84,0x2b,0x25, 0x2c,0x26,0x1f,0x27,0x27,0x21,0x2a,0x2a,0x24,0x2e,0x2b,0x25,0x2e,0x2d,0x26,0x30, 0x30,0x27,0x32,0x32,0x2a,0x33,0x2e,0x27,0x32,0x2e,0x26,0x31,0x2b,0x24,0x2e,0x29, 0x23,0x2c,0x2a,0x23,0x2c,0x2c,0x24,0x2e,0x2f,0x28,0x32,0x35,0x2c,0x37,0x3d,0x33, 0x40,0x44,0x3a,0x49,0x48,0x3e,0x4f,0x48,0x3e,0x4e,0x51,0x46,0x59,0x68,0x60,0x79, 0x77,0x70,0x89,0x78,0x71,0x8a,0x66,0x5f,0x76,0x46,0x41,0x56,0x43,0x42,0x5a,0x48, 0x4f,0x68,0x56,0x5e,0x76,0x63,0x6b,0x80,0x5a,0x62,0x79,0x46,0x46,0x60,0x41,0x3d, 0x52,0x44,0x3f,0x55,0x47,0x42,0x55,0x3b,0x3b,0x50,0x3e,0x3b,0x4f,0x51,0x45,0x59, 0x56,0x4a,0x5d,0x58,0x4d,0x62,0x5b,0x4c,0x60,0x54,0x45,0x56,0x5a,0x49,0x5c,0x5c, 0x4d,0x61,0x5a,0x4a,0x5e,0x5a,0x4b,0x5f,0x5b,0x4e,0x63,0x5b,0x51,0x6a,0x52,0x50, 0x6d,0x52,0x52,0x70,0x52,0x50,0x6e,0x5e,0x5d,0x78,0x69,0x68,0x81,0x52,0x51,0x6e, 0x52,0x52,0x70,0x52,0x51,0x6e,0x55,0x52,0x6e,0x52,0x51,0x6e,0x52,0x52,0x6e,0x50, 0x58,0x73,0x79,0x7f,0x90,0x9e,0xa1,0xaa,0xaa,0xac,0xb1,0xc6,0xc2,0xc7,0xc3,0xc0, 0xc4,0xbd,0xbb,0xc0,0xb9,0xb8,0xbe,0xb1,0xaf,0xb5,0xa9,0xa7,0xab,0xa6,0xa4,0xa7, 0xd7,0xd8,0xdb,0xc6,0xc8,0xcf,0xa7,0xad,0xba,0x99,0x9e,0xb1,0x98,0x91,0xa3,0x75, 0x66,0x7b,0x5a,0x46,0x5e,0x56,0x3f,0x5a,0x51,0x3e,0x54,0x4b,0x37,0x4e,0x4a,0x36, 0x4c,0x45,0x33,0x48,0x3f,0x2e,0x42,0x33,0x26,0x35,0x51,0x43,0x59,0x4b,0x53,0x6e, 0x21,0x24,0x2d,0x20,0x22,0x2b,0x1e,0x20,0x27,0x3f,0x3f,0x56,0x56,0x50,0x72,0x58, 0x51,0x72,0x59,0x51,0x73,0x5c,0x52,0x72,0x5d,0x52,0x73,0x5c,0x51,0x72,0x5a,0x51, 0x71,0x56,0x4d,0x6d,0x59,0x53,0x73,0x54,0x4e,0x6e,0x50,0x4c,0x68,0x62,0x5d,0x75, 0x78,0x74,0x8b,0x79,0x76,0x8d,0x76,0x78,0x91,0x91,0x98,0xab,0x69,0x6c,0x74,0x7e, 0x80,0x87,0x82,0x85,0x8c,0x7a,0x7e,0x84,0x6d,0x70,0x77,0x5a,0x5d,0x65,0x64,0x64, 0x6c,0x82,0x7c,0x87,0x9c,0x9f,0xad,0x97,0x9d,0xae,0x87,0x8d,0xa1,0x7a,0x80,0x98, 0x78,0x7f,0x98,0x85,0x8b,0xa2,0x89,0x8f,0xa6,0x86,0x8d,0xa4,0x85,0x8c,0xa5,0x85, 0x8c,0xa5,0x7d,0x85,0xa0,0x82,0x89,0xa3,0x84,0x8b,0xa5,0x68,0x71,0x8e,0x4a,0x53, 0x77,0x40,0x46,0x64,0x2a,0x27,0x33,0x46,0x3d,0x4e,0x52,0x4a,0x60,0x4e,0x4d,0x69, 0x52,0x5a,0x76,0x56,0x5e,0x7a,0x51,0x54,0x70,0x4f,0x4e,0x6a,0x52,0x4e,0x69,0x50, 0x4e,0x6b,0x50,0x52,0x6e,0x50,0x50,0x6d,0x4f,0x4e,0x6a,0x4e,0x4c,0x67,0x4c,0x4b, 0x66,0x49,0x4a,0x64,0x46,0x4c,0x65,0x48,0x4e,0x64,0x4a,0x51,0x63,0x4c,0x52,0x63, 0x4d,0x52,0x64,0x4e,0x52,0x63,0x4e,0x53,0x62,0x51,0x56,0x64,0x5f,0x63,0x6f,0x76, 0x7a,0x82,0x90,0x92,0x96,0xa2,0xa3,0xa5,0xa2,0xa2,0xa6,0x91,0x93,0x9a,0x82,0x86, 0x90,0x7b,0x80,0x8d,0x6a,0x6e,0x7e,0x5d,0x62,0x73,0x51,0x56,0x68,0x43,0x49,0x5a, 0x3e,0x42,0x54,0x37,0x3c,0x4c,0x33,0x38,0x48,0x2f,0x33,0x42,0x2e,0x32,0x42,0x30, 0x30,0x41,0x30,0x2f,0x40,0x2c,0x2d,0x3d,0x27,0x2b,0x3a,0x25,0x28,0x35,0x25,0x26, 0x34,0x26,0x26,0x35,0x29,0x28,0x37,0x2a,0x29,0x36,0x2b,0x2a,0x37,0x2a,0x29,0x38, 0x27,0x26,0x35,0x26,0x24,0x32,0x20,0x20,0x2b,0x1e,0x20,0x2a,0x22,0x25,0x2e,0x28, 0x2b,0x35,0x28,0x2b,0x35,0x2a,0x2d,0x36,0x2d,0x30,0x3a,0x2f,0x33,0x3d,0x44,0x48, 0x52,0x58,0x5b,0x65,0x5e,0x62,0x6a,0x89,0x8a,0x90,0x85,0x86,0x8b,0x72,0x72,0x77, 0x4a,0x4c,0x50,0x26,0x27,0x2b,0x15,0x16,0x1a,0x0c,0x0e,0x10,0x06,0x07,0x09,0x06, 0x06,0x07,0x0e,0x0e,0x11,0x19,0x1a,0x1e,0x0c,0x0d,0x0f,0x02,0x02,0x03,0x02,0x02, 0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x12,0x13,0x14,0x8e,0x99,0xb4,0x5a, 0x65,0x8d,0x52,0x56,0x81,0x52,0x5a,0x84,0x52,0x5d,0x86,0x52,0x5d,0x88,0x52,0x5d, 0x88,0x53,0x5e,0x88,0x53,0x5f,0x89,0x53,0x5f,0x89,0x53,0x5f,0x89,0x53,0x5e,0x8a, 0x66,0x73,0xa8,0x19,0x1c,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x04, 0x06,0x06,0x06,0x08,0x08,0x09,0x0b,0x0c,0x0d,0x0f,0x10,0x12,0x12,0x13,0x15,0x17, 0x17,0x1a,0x1a,0x1a,0x1c,0x1b,0x1c,0x1e,0x1d,0x1e,0x20,0x1d,0x1e,0x20,0x1e,0x1f, 0x22,0x21,0x22,0x26,0x1b,0x1c,0x26,0x35,0x2d,0x39,0x43,0x3a,0x48,0x48,0x40,0x52, 0x4a,0x46,0x5e,0x4c,0x4c,0x66,0x51,0x58,0x71,0x5d,0x63,0x76,0x5c,0x61,0x75,0x5e, 0x64,0x78,0x44,0x45,0x5b,0x48,0x3f,0x51,0x4b,0x42,0x52,0x45,0x3d,0x4d,0x3d,0x36, 0x44,0x4f,0x43,0x54,0x55,0x4a,0x60,0x4f,0x48,0x60,0x49,0x46,0x5d,0x44,0x40,0x56, 0x45,0x46,0x5e,0x50,0x57,0x6f,0x4d,0x54,0x6c,0x41,0x42,0x5a,0x45,0x42,0x58,0x55, 0x4e,0x67,0x5a,0x52,0x6a,0x4c,0x47,0x60,0x4b,0x4a,0x64,0x51,0x50,0x6d,0x4a,0x4a, 0x63,0x47,0x4c,0x65,0x5b,0x63,0x7c,0x5f,0x68,0x82,0x56,0x5f,0x7b,0x52,0x59,0x76, 0x52,0x56,0x74,0x52,0x51,0x6e,0x55,0x4b,0x62,0x44,0x41,0x56,0x40,0x3d,0x51,0x42, 0x3e,0x53,0x46,0x3e,0x4f,0x5b,0x4b,0x5f,0x53,0x48,0x5c,0x54,0x48,0x5b,0x5e,0x52, 0x6a,0x52,0x51,0x6c,0x48,0x4b,0x62,0x4f,0x50,0x65,0x5f,0x5d,0x77,0x56,0x54,0x70, 0x52,0x51,0x6e,0x54,0x52,0x6d,0x57,0x52,0x6d,0x4e,0x48,0x60,0x4c,0x45,0x59,0x48, 0x42,0x57,0x42,0x40,0x57,0x43,0x42,0x5a,0x44,0x45,0x5c,0x48,0x47,0x62,0x4b,0x52, 0x6c,0x5a,0x5f,0x72,0x66,0x6a,0x7a,0x8a,0x91,0xa6,0x6d,0x71,0x8d,0x5a,0x5c,0x7a, 0x5b,0x5d,0x80,0x5c,0x5a,0x78,0x51,0x51,0x6f,0x50,0x44,0x5d,0x54,0x58,0x73,0x65, 0x5d,0x72,0x50,0x4f,0x66,0x3f,0x3f,0x50,0x32,0x31,0x3f,0x29,0x29,0x34,0x27,0x27, 0x31,0x2e,0x2e,0x37,0x3b,0x33,0x39,0x37,0x30,0x36,0x34,0x2a,0x35,0x3d,0x32,0x40, 0x3a,0x32,0x3f,0x3f,0x40,0x5b,0x47,0x49,0x69,0x49,0x43,0x5f,0x44,0x41,0x64,0x49, 0x54,0x77,0x51,0x5b,0x80,0x53,0x5e,0x84,0x4e,0x4f,0x77,0x61,0x4d,0x6b,0x8e,0x98, 0xb3,0xcb,0xc9,0xcb,0x1d,0x14,0x17,0x2c,0x20,0x26,0x2f,0x22,0x29,0x2d,0x20,0x27, 0x3b,0x2c,0x36,0x6b,0x59,0x71,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02, 0x02,0x02,0xa0,0xa6,0xba,0x83,0x8d,0xac,0x53,0x5e,0x87,0x5e,0x6a,0x91,0x60,0x6d, 0x92,0x5e,0x6a,0x91,0x5f,0x6c,0x92,0x5f,0x6b,0x92,0x5f,0x6a,0x91,0x61,0x6c,0x91, 0x5f,0x69,0x8f,0x5d,0x67,0x8a,0x58,0x63,0x86,0x4a,0x53,0x78,0x48,0x46,0x6a,0x60, 0x68,0x85,0x41,0x42,0x4b,0x12,0x11,0x16,0x19,0x16,0x1c,0x20,0x1a,0x22,0x25,0x1e, 0x26,0x26,0x20,0x29,0x28,0x22,0x2a,0x29,0x22,0x2a,0x28,0x22,0x2b,0x28,0x22,0x2a, 0x28,0x21,0x2a,0x28,0x21,0x2a,0x28,0x22,0x2a,0x29,0x22,0x2b,0x29,0x22,0x2b,0x29, 0x23,0x2c,0x2d,0x26,0x30,0x32,0x2b,0x36,0x39,0x30,0x3d,0x3a,0x31,0x3e,0x3f,0x33, 0x3f,0x4d,0x41,0x51,0x65,0x5c,0x6c,0x73,0x67,0x7c,0x74,0x6b,0x84,0x46,0x42,0x57, 0x46,0x44,0x5b,0x48,0x48,0x62,0x4b,0x52,0x6c,0x51,0x59,0x71,0x49,0x4d,0x66,0x44, 0x43,0x5b,0x3f,0x3e,0x56,0x3e,0x43,0x5a,0x45,0x4c,0x62,0x47,0x4e,0x63,0x3c,0x42, 0x57,0x38,0x38,0x4c,0x3f,0x3e,0x53,0x4e,0x47,0x5e,0x55,0x4a,0x60,0x5a,0x4a,0x5c, 0x5a,0x4a,0x5b,0x5a,0x4a,0x5d,0x57,0x47,0x5a,0x56,0x46,0x58,0x5a,0x4a,0x5e,0x5b, 0x50,0x65,0x57,0x50,0x6a,0x51,0x4f,0x6c,0x52,0x50,0x6d,0x69,0x67,0x81,0x58,0x56, 0x73,0x52,0x53,0x72,0x52,0x52,0x70,0x52,0x52,0x6f,0x53,0x52,0x6e,0x52,0x52,0x6f, 0x52,0x55,0x72,0x51,0x57,0x74,0x66,0x6d,0x83,0x8e,0x92,0x9e,0xa4,0xa6,0xae,0xc5, 0xc2,0xc8,0xc9,0xc7,0xca,0xc2,0xc1,0xc5,0xb9,0xb9,0xbf,0xaf,0xaf,0xb6,0xaf,0xae, 0xb2,0xab,0xa9,0xab,0xd7,0xd7,0xda,0xc7,0xca,0xd1,0xb4,0xb8,0xc3,0xa8,0xad,0xbc, 0x92,0x97,0xac,0x75,0x67,0x7d,0x5c,0x49,0x60,0x55,0x41,0x59,0x52,0x3d,0x54,0x4d, 0x39,0x50,0x4a,0x36,0x4c,0x44,0x32,0x47,0x3f,0x2e,0x41,0x2f,0x22,0x31,0x50,0x41, 0x58,0x56,0x5f,0x81,0x20,0x22,0x2b,0x1e,0x22,0x2a,0x1d,0x1f,0x27,0x40,0x3e,0x54, 0x55,0x50,0x71,0x58,0x51,0x72,0x59,0x52,0x73,0x5a,0x51,0x74,0x5c,0x52,0x73,0x5c, 0x51,0x72,0x5a,0x50,0x71,0x5a,0x4d,0x6b,0x56,0x49,0x66,0x59,0x4f,0x6f,0x59,0x55, 0x73,0x57,0x54,0x6e,0x6c,0x68,0x81,0x76,0x74,0x8b,0x78,0x7a,0x93,0x95,0x9b,0xad, 0x73,0x76,0x7e,0x82,0x86,0x8d,0x85,0x88,0x8e,0x7d,0x80,0x86,0x6e,0x71,0x78,0x56, 0x59,0x60,0x5b,0x5a,0x62,0x77,0x72,0x7d,0x7a,0x7d,0x8d,0x63,0x69,0x7e,0x5b,0x62, 0x7a,0x6c,0x74,0x8e,0x74,0x7a,0x94,0x78,0x7e,0x96,0x7a,0x81,0x9a,0x7c,0x83,0x9b, 0x80,0x87,0x9e,0x84,0x8a,0xa2,0x83,0x89,0xa0,0x78,0x7e,0x98,0x68,0x70,0x8d,0x51, 0x55,0x77,0x4c,0x4e,0x6c,0x42,0x47,0x65,0x2a,0x2a,0x39,0x3d,0x3b,0x51,0x49,0x47, 0x61,0x4e,0x4e,0x6a,0x50,0x54,0x72,0x51,0x55,0x72,0x51,0x54,0x70,0x4e,0x4d,0x69, 0x4e,0x4c,0x68,0x4e,0x4f,0x6c,0x50,0x56,0x73,0x50,0x55,0x72,0x4e,0x53,0x6f,0x4e, 0x52,0x6e,0x4c,0x51,0x6c,0x4a,0x52,0x6b,0x4a,0x51,0x6a,0x4d,0x54,0x6a,0x52,0x59, 0x6c,0x56,0x5d,0x6e,0x5c,0x62,0x72,0x63,0x68,0x76,0x6c,0x71,0x7c,0x75,0x78,0x82, 0x89,0x8c,0x92,0x9d,0x9e,0xa2,0xaa,0xaa,0xac,0xb0,0xb0,0xb1,0xaa,0xaa,0xad,0x92, 0x95,0x9b,0x7a,0x7e,0x8a,0x6b,0x70,0x7f,0x62,0x67,0x77,0x57,0x5d,0x6e,0x4a,0x4f, 0x62,0x40,0x46,0x57,0x3b,0x41,0x51,0x35,0x3a,0x4a,0x32,0x37,0x46,0x2f,0x34,0x42, 0x2d,0x31,0x40,0x2c,0x30,0x40,0x2b,0x2e,0x3e,0x2a,0x2e,0x3d,0x27,0x2b,0x38,0x25, 0x28,0x34,0x22,0x25,0x31,0x20,0x22,0x2e,0x21,0x22,0x2e,0x20,0x20,0x2c,0x1f,0x1f, 0x2a,0x1e,0x1e,0x2a,0x1c,0x1d,0x27,0x1c,0x1e,0x27,0x1e,0x21,0x2a,0x20,0x22,0x2b, 0x22,0x25,0x2d,0x26,0x29,0x31,0x24,0x26,0x2f,0x26,0x28,0x31,0x27,0x2a,0x32,0x27, 0x2a,0x32,0x2d,0x2f,0x37,0x49,0x4b,0x52,0x5a,0x5a,0x62,0x5a,0x5c,0x62,0x60,0x60, 0x65,0x2d,0x2e,0x32,0x15,0x16,0x1a,0x10,0x11,0x14,0x0e,0x10,0x12,0x0f,0x10,0x13, 0x06,0x07,0x0a,0x04,0x04,0x06,0x06,0x06,0x07,0x0d,0x0e,0x10,0x0e,0x0f,0x12,0x0a, 0x0a,0x0c,0x04,0x04,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x99,0xa0,0xb5,0x63,0x6e,0x95,0x52,0x5a,0x84,0x52,0x55,0x81,0x52,0x57,0x83,0x52, 0x5a,0x84,0x52,0x5d,0x86,0x52,0x5d,0x86,0x52,0x5d,0x86,0x52,0x5d,0x88,0x52,0x5d, 0x88,0x53,0x5d,0x88,0x58,0x63,0x92,0x64,0x71,0xa5,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x03,0x04,0x04,0x05,0x06,0x06,0x06,0x08,0x09,0x09,0x0a,0x0b,0x0c, 0x0e,0x0e,0x10,0x10,0x11,0x12,0x12,0x13,0x15,0x16,0x16,0x18,0x16,0x17,0x1a,0x17, 0x18,0x1a,0x1c,0x1d,0x1f,0x27,0x29,0x2d,0x1e,0x1d,0x27,0x39,0x30,0x3c,0x4c,0x42, 0x55,0x53,0x4c,0x64,0x51,0x47,0x5d,0x51,0x46,0x58,0x53,0x49,0x5e,0x4a,0x47,0x5f, 0x46,0x43,0x5a,0x47,0x42,0x56,0x42,0x37,0x46,0x45,0x3a,0x49,0x50,0x48,0x5e,0x48, 0x42,0x56,0x4a,0x43,0x5a,0x5e,0x52,0x6a,0x5d,0x52,0x68,0x55,0x50,0x6b,0x50,0x4f, 0x6c,0x50,0x4f,0x6c,0x4e,0x55,0x6f,0x57,0x5d,0x74,0x4c,0x54,0x6b,0x4c,0x52,0x6e, 0x4c,0x4f,0x6a,0x51,0x50,0x6e,0x52,0x50,0x6e,0x51,0x4e,0x69,0x4a,0x46,0x5e,0x49, 0x46,0x5e,0x4e,0x4c,0x67,0x4c,0x4b,0x65,0x46,0x46,0x5e,0x51,0x55,0x72,0x52,0x58, 0x75,0x52,0x52,0x70,0x52,0x50,0x6e,0x4b,0x47,0x5d,0x44,0x3c,0x4d,0x48,0x3e,0x4f, 0x54,0x46,0x58,0x53,0x45,0x57,0x50,0x43,0x54,0x5a,0x49,0x5b,0x5f,0x4f,0x64,0x53, 0x48,0x5e,0x4d,0x48,0x5f,0x48,0x4a,0x64,0x5a,0x5d,0x74,0x67,0x66,0x7e,0x65,0x62, 0x7a,0x5a,0x57,0x72,0x55,0x52,0x6e,0x55,0x52,0x6e,0x4a,0x46,0x5d,0x49,0x44,0x59, 0x4b,0x45,0x5a,0x4a,0x46,0x5e,0x4b,0x4d,0x67,0x52,0x5a,0x75,0x58,0x60,0x79,0x4e, 0x4d,0x69,0x4d,0x54,0x6f,0x69,0x6f,0x82,0x67,0x6c,0x7b,0x7a,0x80,0x96,0x7d,0x80, 0x96,0x61,0x65,0x82,0x55,0x57,0x77,0x63,0x5d,0x7c,0x57,0x54,0x70,0x56,0x4b,0x66, 0x46,0x4a,0x6a,0x69,0x6a,0x81,0x53,0x4f,0x69,0x54,0x55,0x6d,0x42,0x42,0x55,0x35, 0x34,0x44,0x2d,0x2d,0x39,0x2c,0x2d,0x38,0x38,0x32,0x39,0x3e,0x36,0x3d,0x2b,0x23, 0x2a,0x2e,0x26,0x2f,0x2b,0x24,0x2e,0x35,0x36,0x4c,0x4c,0x4c,0x6b,0x4b,0x44,0x61, 0x48,0x44,0x66,0x4a,0x54,0x79,0x4e,0x58,0x7f,0x52,0x5e,0x85,0x51,0x5c,0x84,0x5c, 0x44,0x60,0x74,0x80,0xa1,0xe8,0xe8,0xed,0x1f,0x16,0x1a,0x2c,0x1f,0x26,0x2f,0x23, 0x2a,0x2d,0x21,0x28,0x32,0x24,0x2c,0x6a,0x56,0x6b,0x09,0x0a,0x0d,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x6f,0x73,0x80,0x98,0xa1,0xba,0x52,0x5b,0x83,0x58, 0x64,0x8c,0x62,0x6d,0x93,0x5d,0x6a,0x90,0x5d,0x69,0x90,0x5e,0x6b,0x91,0x5f,0x6b, 0x92,0x5d,0x6a,0x91,0x5f,0x6b,0x8f,0x60,0x6a,0x8d,0x5a,0x66,0x8a,0x55,0x5f,0x83, 0x50,0x4a,0x6e,0x56,0x61,0x82,0x68,0x6e,0x7e,0x0a,0x0a,0x0d,0x0b,0x0c,0x10,0x12, 0x10,0x16,0x1a,0x17,0x1e,0x1e,0x1a,0x22,0x21,0x1d,0x25,0x22,0x1e,0x26,0x23,0x1e, 0x26,0x25,0x1f,0x28,0x25,0x1f,0x27,0x26,0x20,0x29,0x26,0x20,0x29,0x27,0x21,0x2a, 0x27,0x21,0x2a,0x27,0x21,0x2a,0x28,0x21,0x2a,0x29,0x22,0x2b,0x2b,0x24,0x2e,0x2d, 0x26,0x2e,0x2d,0x24,0x2e,0x2f,0x24,0x2d,0x42,0x3e,0x47,0x42,0x3e,0x47,0x62,0x59, 0x69,0x4b,0x42,0x54,0x43,0x42,0x5a,0x49,0x49,0x63,0x49,0x4a,0x65,0x48,0x47,0x62, 0x46,0x45,0x5e,0x46,0x43,0x5a,0x44,0x42,0x5b,0x4c,0x53,0x68,0x5b,0x62,0x74,0x58, 0x5e,0x72,0x46,0x4d,0x61,0x3c,0x42,0x56,0x34,0x37,0x4a,0x2e,0x2e,0x3f,0x3c,0x3b, 0x50,0x4d,0x46,0x5a,0x54,0x4a,0x5e,0x58,0x4a,0x5e,0x54,0x44,0x56,0x50,0x41,0x51, 0x55,0x46,0x57,0x5a,0x4a,0x5e,0x5a,0x4e,0x65,0x58,0x50,0x68,0x56,0x50,0x6a,0x6b, 0x66,0x7e,0x62,0x5b,0x74,0x52,0x51,0x6e,0x52,0x52,0x70,0x52,0x52,0x6e,0x52,0x51, 0x6f,0x52,0x54,0x72,0x52,0x5a,0x77,0x53,0x5c,0x79,0x5e,0x66,0x7f,0x7a,0x80,0x92, 0x9d,0xa0,0xa9,0xc3,0xc1,0xc7,0xcc,0xc9,0xcc,0xc5,0xc3,0xc6,0xb9,0xb8,0xbe,0xb5, 0xb4,0xbb,0xb2,0xb1,0xb6,0xab,0xa9,0xac,0xd4,0xd5,0xd9,0xc5,0xc7,0xce,0xb1,0xb5, 0xc1,0x9e,0xa3,0xb2,0x8b,0x91,0xa4,0x6b,0x71,0x8b,0x67,0x55,0x6b,0x58,0x44,0x5a, 0x54,0x3f,0x56,0x4e,0x38,0x50,0x49,0x36,0x4b,0x45,0x32,0x47,0x3f,0x2d,0x40,0x32, 0x22,0x31,0x56,0x46,0x5f,0x53,0x5d,0x80,0x20,0x22,0x2b,0x1f,0x22,0x2a,0x1e,0x20, 0x27,0x35,0x35,0x47,0x56,0x50,0x71,0x58,0x50,0x71,0x5a,0x52,0x73,0x5a,0x52,0x75, 0x5d,0x52,0x74,0x5c,0x51,0x73,0x5b,0x51,0x72,0x59,0x4e,0x6f,0x58,0x4d,0x6d,0x55, 0x4c,0x6c,0x54,0x4d,0x6e,0x51,0x49,0x66,0x50,0x4b,0x6b,0x5d,0x5c,0x7b,0x71,0x73, 0x8e,0x94,0x9b,0xae,0x82,0x84,0x8b,0x7f,0x82,0x89,0x7e,0x81,0x89,0x7b,0x7e,0x85, 0x6b,0x6e,0x76,0x62,0x64,0x6b,0x64,0x65,0x6c,0x7d,0x78,0x82,0x67,0x6a,0x7b,0x49, 0x50,0x6a,0x49,0x4a,0x64,0x4b,0x4d,0x6c,0x50,0x59,0x7b,0x5b,0x63,0x82,0x61,0x68, 0x86,0x71,0x78,0x91,0x8c,0x92,0xa6,0x8f,0x94,0xaa,0x7e,0x83,0x9b,0x55,0x5e,0x7b, 0x50,0x53,0x73,0x4b,0x4c,0x67,0x4c,0x51,0x72,0x4e,0x57,0x73,0x43,0x47,0x55,0x4b, 0x52,0x67,0x4a,0x52,0x6b,0x4e,0x51,0x6e,0x50,0x51,0x6e,0x50,0x50,0x6c,0x55,0x5c, 0x78,0x4e,0x52,0x6e,0x4d,0x4b,0x67,0x4e,0x4e,0x6a,0x52,0x5a,0x75,0x55,0x5d,0x77, 0x57,0x5f,0x79,0x57,0x5f,0x78,0x59,0x61,0x79,0x5a,0x62,0x79,0x4e,0x55,0x6d,0x4f, 0x56,0x6d,0x56,0x5c,0x6f,0x5e,0x64,0x76,0x6e,0x72,0x81,0x7a,0x7e,0x8a,0x7e,0x82, 0x8b,0x8b,0x8e,0x96,0x9b,0x9e,0xa3,0xa3,0xa5,0xa9,0xaa,0xab,0xae,0xac,0xac,0xaf, 0x9d,0x9e,0xa4,0x7e,0x82,0x8c,0x68,0x6e,0x7c,0x5b,0x61,0x72,0x56,0x5c,0x6e,0x52, 0x59,0x6a,0x4a,0x50,0x62,0x42,0x47,0x59,0x39,0x3e,0x4e,0x35,0x3a,0x4a,0x32,0x37, 0x47,0x30,0x34,0x43,0x2e,0x33,0x42,0x2d,0x31,0x40,0x2b,0x2f,0x3e,0x29,0x2d,0x3a, 0x29,0x2c,0x39,0x23,0x27,0x32,0x21,0x24,0x2e,0x1e,0x20,0x2a,0x1c,0x1e,0x28,0x1a, 0x1c,0x26,0x1a,0x1d,0x26,0x18,0x1a,0x23,0x16,0x19,0x21,0x1a,0x1c,0x24,0x22,0x24, 0x2c,0x21,0x23,0x2a,0x1e,0x22,0x29,0x1f,0x22,0x29,0x1f,0x22,0x29,0x1f,0x22,0x29, 0x21,0x23,0x2a,0x1e,0x21,0x27,0x1d,0x1f,0x26,0x1a,0x1d,0x22,0x48,0x4a,0x4e,0x3f, 0x41,0x45,0x32,0x32,0x36,0x0b,0x0c,0x10,0x0f,0x11,0x13,0x12,0x13,0x17,0x12,0x14, 0x17,0x10,0x11,0x14,0x0b,0x0c,0x0e,0x04,0x04,0x05,0x02,0x02,0x02,0x06,0x07,0x09, 0x16,0x16,0x1a,0x1a,0x1a,0x1b,0x0a,0x0a,0x0b,0x02,0x02,0x02,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x5d,0x60,0x68,0x71,0x7c,0xa0,0x54,0x5f,0x89,0x52,0x55,0x80, 0x52,0x55,0x81,0x52,0x56,0x81,0x52,0x5a,0x84,0x52,0x5a,0x84,0x52,0x5c,0x85,0x52, 0x5d,0x86,0x52,0x5d,0x88,0x52,0x5d,0x88,0x53,0x5e,0x89,0x6a,0x79,0xb0,0x05,0x06, 0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x04,0x05,0x05,0x06,0x06, 0x06,0x07,0x07,0x08,0x0a,0x0a,0x0b,0x0b,0x0c,0x0e,0x0d,0x0e,0x0e,0x0f,0x10,0x12, 0x12,0x12,0x15,0x1a,0x1a,0x1d,0x1f,0x20,0x23,0x1c,0x1e,0x22,0x22,0x20,0x2a,0x3c, 0x35,0x44,0x49,0x42,0x56,0x51,0x4a,0x62,0x5b,0x4f,0x65,0x4a,0x3c,0x4b,0x40,0x36, 0x44,0x41,0x39,0x4a,0x40,0x3a,0x4a,0x47,0x3e,0x4e,0x4c,0x43,0x56,0x56,0x4e,0x68, 0x59,0x52,0x6e,0x4d,0x47,0x5f,0x55,0x4e,0x67,0x5e,0x52,0x6a,0x5b,0x52,0x6a,0x50, 0x4f,0x6d,0x52,0x5a,0x76,0x56,0x5e,0x79,0x5e,0x67,0x80,0x69,0x71,0x87,0x72,0x7a, 0x8e,0x73,0x7a,0x8e,0x6a,0x72,0x89,0x5e,0x67,0x81,0x51,0x56,0x72,0x52,0x50,0x6e, 0x52,0x4f,0x6c,0x48,0x43,0x5a,0x45,0x42,0x56,0x4b,0x4a,0x63,0x4d,0x4b,0x65,0x48, 0x44,0x5c,0x4d,0x4c,0x67,0x52,0x53,0x71,0x4f,0x48,0x5f,0x46,0x3e,0x50,0x4f,0x44, 0x55,0x5a,0x49,0x5c,0x60,0x4f,0x63,0x52,0x46,0x57,0x5b,0x4c,0x60,0x5d,0x4d,0x60, 0x60,0x55,0x6d,0x52,0x51,0x6e,0x4c,0x50,0x6a,0x4e,0x51,0x6c,0x5f,0x5e,0x78,0x61, 0x5f,0x77,0x5c,0x59,0x72,0x56,0x54,0x70,0x57,0x54,0x6f,0x57,0x54,0x6f,0x4e,0x4b, 0x65,0x4d,0x4b,0x66,0x52,0x52,0x6e,0x52,0x54,0x72,0x66,0x6e,0x86,0x77,0x7e,0x92, 0x7f,0x86,0x96,0x6c,0x73,0x88,0x62,0x6a,0x7e,0x70,0x77,0x8a,0x76,0x7c,0x8b,0x7b, 0x83,0x9b,0x6e,0x70,0x8b,0x70,0x71,0x8b,0x50,0x58,0x75,0x58,0x56,0x74,0x5d,0x59, 0x77,0x50,0x49,0x68,0x4e,0x45,0x63,0x5c,0x61,0x7c,0x68,0x5e,0x74,0x55,0x58,0x74, 0x55,0x57,0x70,0x49,0x4b,0x60,0x39,0x3a,0x4b,0x34,0x34,0x43,0x37,0x34,0x41,0x40, 0x38,0x40,0x3f,0x39,0x3e,0x14,0x0f,0x12,0x18,0x12,0x17,0x28,0x25,0x35,0x43,0x42, 0x64,0x4c,0x44,0x65,0x51,0x48,0x6b,0x4c,0x55,0x7d,0x4f,0x58,0x80,0x52,0x5c,0x85, 0x55,0x62,0x89,0x5c,0x45,0x60,0x68,0x73,0x97,0xea,0xed,0xf1,0x3f,0x39,0x3b,0x29, 0x1e,0x24,0x2f,0x23,0x2a,0x30,0x23,0x2a,0x2e,0x21,0x28,0x5b,0x48,0x59,0x1c,0x1f, 0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x35,0x3b,0xa1,0xaa,0xc1, 0x5b,0x66,0x8d,0x52,0x5d,0x87,0x5e,0x6b,0x91,0x5d,0x69,0x90,0x5d,0x6a,0x91,0x5d, 0x69,0x90,0x5f,0x6b,0x92,0x5e,0x6a,0x90,0x60,0x6b,0x92,0x5d,0x69,0x8f,0x5f,0x6a, 0x8e,0x5b,0x67,0x8b,0x4e,0x4c,0x73,0x4f,0x57,0x7e,0x73,0x7b,0x98,0x1b,0x1b,0x1d, 0x0a,0x0a,0x0c,0x0b,0x0c,0x0f,0x0c,0x0e,0x11,0x0e,0x0f,0x14,0x0f,0x11,0x16,0x11, 0x12,0x17,0x12,0x12,0x18,0x14,0x13,0x1a,0x16,0x15,0x1c,0x18,0x17,0x1e,0x1a,0x18, 0x20,0x1c,0x18,0x1f,0x1e,0x1a,0x22,0x20,0x1b,0x23,0x22,0x1d,0x24,0x23,0x1e,0x26, 0x24,0x1e,0x27,0x25,0x1f,0x27,0x26,0x1e,0x27,0x2e,0x22,0x2a,0x48,0x46,0x4f,0x43, 0x41,0x4a,0x44,0x41,0x4a,0x43,0x36,0x44,0x43,0x3f,0x53,0x46,0x49,0x62,0x4a,0x52, 0x6a,0x4f,0x56,0x6e,0x4a,0x51,0x6a,0x46,0x44,0x5d,0x46,0x45,0x5c,0x45,0x46,0x60, 0x4d,0x54,0x69,0x4f,0x56,0x6a,0x41,0x47,0x5c,0x3c,0x42,0x56,0x3e,0x43,0x59,0x3b, 0x3f,0x54,0x38,0x3b,0x4e,0x3e,0x3e,0x54,0x4f,0x45,0x5a,0x56,0x4a,0x5d,0x54,0x44, 0x56,0x4e,0x3e,0x4e,0x53,0x43,0x54,0x57,0x48,0x5a,0x59,0x4a,0x5c,0x5a,0x4e,0x63, 0x5b,0x50,0x67,0x72,0x69,0x7c,0x76,0x6c,0x80,0x5a,0x55,0x6f,0x52,0x52,0x6e,0x52, 0x52,0x6f,0x52,0x52,0x6f,0x52,0x56,0x73,0x54,0x5c,0x78,0x57,0x60,0x7c,0x5a,0x62, 0x7d,0x6a,0x72,0x86,0x87,0x8c,0x9a,0xb1,0xb1,0xba,0xc5,0xc3,0xc7,0xc3,0xc1,0xc5, 0xbb,0xba,0xc0,0xb8,0xb8,0xbe,0xb2,0xb1,0xb6,0xaa,0xa9,0xac,0xcf,0xd1,0xd4,0xc0, 0xc3,0xcb,0xa6,0xaa,0xb6,0x8e,0x93,0xa4,0x84,0x8b,0x9e,0x88,0x8f,0xa3,0x6c,0x66, 0x83,0x6a,0x58,0x6e,0x61,0x4d,0x62,0x4f,0x3b,0x53,0x4a,0x37,0x4c,0x46,0x33,0x49, 0x3e,0x2c,0x3f,0x3a,0x2b,0x3d,0x5b,0x4a,0x65,0x52,0x5b,0x80,0x1f,0x22,0x2a,0x20, 0x22,0x2b,0x1d,0x1f,0x27,0x33,0x31,0x43,0x52,0x4d,0x6c,0x57,0x50,0x72,0x5a,0x52, 0x73,0x5d,0x52,0x73,0x5d,0x52,0x74,0x5c,0x51,0x74,0x5c,0x51,0x73,0x5b,0x51,0x71, 0x5a,0x4f,0x70,0x56,0x4c,0x6d,0x55,0x4a,0x6a,0x4b,0x40,0x5b,0x4f,0x44,0x5e,0x59, 0x4f,0x6b,0x50,0x53,0x76,0x7d,0x86,0x9d,0x6a,0x6d,0x76,0x66,0x6a,0x73,0x66,0x6a, 0x76,0x6b,0x6f,0x79,0x63,0x66,0x6f,0x62,0x66,0x6c,0x66,0x68,0x6e,0x80,0x7c,0x86, 0x6e,0x70,0x80,0x47,0x4e,0x6a,0x44,0x44,0x5c,0x37,0x37,0x4b,0x45,0x42,0x59,0x57, 0x54,0x72,0x56,0x55,0x75,0x60,0x69,0x86,0x7c,0x82,0x9b,0x78,0x7f,0x96,0x64,0x6b, 0x86,0x4f,0x58,0x77,0x50,0x50,0x6e,0x4d,0x52,0x72,0x59,0x62,0x80,0x62,0x69,0x81, 0x4f,0x54,0x61,0x53,0x5a,0x6f,0x4a,0x4b,0x65,0x51,0x4b,0x65,0x56,0x4e,0x66,0x50, 0x4d,0x66,0x4e,0x51,0x6c,0x4e,0x56,0x70,0x4c,0x4d,0x68,0x4c,0x4a,0x65,0x4c,0x4e, 0x69,0x4e,0x55,0x71,0x52,0x5a,0x73,0x53,0x5b,0x73,0x52,0x5a,0x72,0x50,0x57,0x6e, 0x4f,0x56,0x6d,0x54,0x5a,0x6f,0x58,0x5f,0x72,0x63,0x6a,0x7a,0x7a,0x7f,0x8d,0x80, 0x84,0x90,0x7a,0x7e,0x88,0x77,0x7c,0x87,0x8a,0x8d,0x96,0x8e,0x91,0x99,0x8e,0x91, 0x99,0x93,0x96,0x9c,0x7f,0x83,0x8e,0x6a,0x6f,0x7d,0x5d,0x62,0x72,0x57,0x5d,0x6e, 0x4f,0x56,0x68,0x4e,0x53,0x66,0x49,0x4e,0x60,0x3f,0x45,0x56,0x39,0x3e,0x4f,0x36, 0x3b,0x4c,0x35,0x3a,0x4a,0x33,0x38,0x47,0x32,0x36,0x46,0x2e,0x32,0x41,0x2b,0x2f, 0x3d,0x28,0x2c,0x38,0x24,0x28,0x34,0x22,0x24,0x30,0x1e,0x1f,0x2a,0x1b,0x1d,0x26, 0x1a,0x1c,0x26,0x1a,0x1c,0x25,0x1a,0x1c,0x25,0x18,0x1a,0x22,0x15,0x17,0x1e,0x1a, 0x1c,0x22,0x1e,0x21,0x28,0x1d,0x1f,0x26,0x17,0x1a,0x20,0x16,0x18,0x1e,0x14,0x16, 0x1c,0x15,0x17,0x1d,0x14,0x16,0x1b,0x16,0x17,0x1d,0x14,0x16,0x1b,0x11,0x12,0x17, 0x0f,0x11,0x15,0x0d,0x0e,0x12,0x0b,0x0c,0x10,0x10,0x11,0x14,0x1b,0x1c,0x20,0x1f, 0x20,0x24,0x0e,0x0f,0x11,0x08,0x08,0x0a,0x06,0x07,0x08,0x03,0x03,0x04,0x02,0x02, 0x02,0x03,0x04,0x05,0x11,0x12,0x14,0x16,0x16,0x18,0x0b,0x0b,0x0c,0x02,0x02,0x02, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x23,0x25,0x8b,0x95,0xb2,0x57,0x64, 0x8c,0x52,0x54,0x80,0x52,0x54,0x80,0x52,0x56,0x81,0x52,0x57,0x82,0x52,0x5a,0x84, 0x52,0x5b,0x85,0x52,0x5c,0x86,0x52,0x5d,0x88,0x52,0x5d,0x86,0x52,0x5d,0x88,0x58, 0x64,0x92,0x33,0x39,0x51,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02, 0x02,0x03,0x04,0x04,0x04,0x06,0x06,0x06,0x06,0x06,0x07,0x08,0x08,0x09,0x0a,0x0a, 0x0c,0x0b,0x0c,0x0e,0x15,0x16,0x18,0x23,0x25,0x27,0x1a,0x1c,0x1e,0x20,0x22,0x27, 0x2d,0x31,0x40,0x3a,0x39,0x4e,0x46,0x40,0x55,0x52,0x46,0x57,0x52,0x42,0x54,0x4b, 0x3c,0x4a,0x51,0x42,0x52,0x54,0x49,0x5e,0x59,0x4e,0x63,0x57,0x4f,0x66,0x52,0x51, 0x6e,0x54,0x50,0x6b,0x47,0x44,0x5b,0x45,0x43,0x5d,0x51,0x50,0x6c,0x5c,0x52,0x6a, 0x50,0x4e,0x6c,0x56,0x5e,0x79,0x5e,0x67,0x80,0x63,0x6a,0x83,0x70,0x78,0x8d,0x7e, 0x85,0x96,0x86,0x8c,0x9c,0x86,0x8c,0x9c,0x82,0x88,0x99,0x7e,0x85,0x96,0x69,0x71, 0x88,0x54,0x5c,0x78,0x52,0x53,0x71,0x52,0x51,0x6e,0x46,0x45,0x5e,0x43,0x3f,0x54, 0x48,0x41,0x56,0x4c,0x45,0x5d,0x4b,0x45,0x5c,0x4a,0x46,0x5c,0x4f,0x45,0x5a,0x4d, 0x41,0x52,0x5e,0x50,0x65,0x5e,0x4e,0x61,0x59,0x4e,0x64,0x50,0x49,0x60,0x5a,0x54, 0x6f,0x5f,0x59,0x72,0x58,0x57,0x73,0x58,0x5a,0x75,0x57,0x59,0x75,0x53,0x53,0x6f, 0x55,0x53,0x6f,0x58,0x55,0x70,0x5c,0x5a,0x74,0x61,0x5f,0x78,0x60,0x5e,0x78,0x5a, 0x5a,0x76,0x58,0x57,0x73,0x5a,0x56,0x6f,0x58,0x52,0x6d,0x56,0x51,0x6d,0x52,0x56, 0x74,0x70,0x76,0x8c,0x82,0x88,0x98,0x83,0x8a,0x99,0x7a,0x7e,0x8c,0x6f,0x74,0x82, 0x68,0x6d,0x7a,0x86,0x8e,0xa5,0x70,0x74,0x91,0x53,0x54,0x73,0x4f,0x55,0x6f,0x4a, 0x4d,0x6b,0x5c,0x57,0x74,0x57,0x55,0x72,0x55,0x46,0x5e,0x51,0x57,0x75,0x7c,0x78, 0x8b,0x5a,0x55,0x71,0x56,0x5a,0x76,0x55,0x59,0x74,0x52,0x53,0x6d,0x49,0x49,0x5f, 0x48,0x45,0x5a,0x2d,0x2a,0x35,0x3f,0x38,0x3e,0x27,0x24,0x26,0x06,0x05,0x06,0x17, 0x16,0x1f,0x44,0x42,0x64,0x4e,0x47,0x68,0x55,0x4c,0x6e,0x4e,0x58,0x7f,0x50,0x5a, 0x82,0x52,0x5d,0x87,0x56,0x62,0x8a,0x60,0x49,0x64,0x55,0x61,0x8a,0xf1,0xf3,0xf5, 0x6b,0x65,0x67,0x27,0x1c,0x22,0x31,0x24,0x2b,0x31,0x24,0x2c,0x2f,0x22,0x29,0x51, 0x40,0x4f,0x30,0x35,0x45,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x06, 0x07,0x9f,0xa7,0xbb,0x74,0x7f,0xa0,0x52,0x4f,0x7a,0x5f,0x6b,0x91,0x5c,0x67,0x8f, 0x5c,0x69,0x8f,0x5d,0x6a,0x90,0x5e,0x6a,0x91,0x5f,0x6b,0x92,0x5f,0x6b,0x91,0x5e, 0x6b,0x91,0x61,0x6b,0x91,0x5d,0x6a,0x8f,0x50,0x56,0x7f,0x50,0x4d,0x76,0x69,0x75, 0x95,0x55,0x56,0x5d,0x09,0x0a,0x0b,0x0a,0x0b,0x0d,0x0b,0x0c,0x0e,0x0d,0x0e,0x10, 0x0e,0x0f,0x12,0x0f,0x10,0x13,0x10,0x11,0x14,0x11,0x12,0x16,0x11,0x12,0x16,0x12, 0x12,0x16,0x11,0x12,0x16,0x12,0x12,0x17,0x12,0x12,0x17,0x11,0x12,0x17,0x12,0x12, 0x18,0x14,0x13,0x1a,0x16,0x14,0x1b,0x17,0x16,0x1d,0x1a,0x17,0x1e,0x25,0x1f,0x26, 0x4c,0x47,0x53,0x56,0x54,0x61,0x55,0x53,0x5f,0x4b,0x42,0x4f,0x3e,0x36,0x47,0x3f, 0x3e,0x54,0x45,0x4b,0x62,0x5c,0x62,0x76,0x5e,0x65,0x78,0x46,0x4e,0x64,0x46,0x42, 0x58,0x47,0x43,0x5a,0x43,0x42,0x5a,0x40,0x42,0x5a,0x40,0x43,0x5a,0x3e,0x42,0x58, 0x3e,0x42,0x58,0x39,0x3c,0x50,0x37,0x3a,0x4d,0x3c,0x3e,0x53,0x42,0x3f,0x55,0x50, 0x46,0x5a,0x54,0x46,0x57,0x4b,0x3c,0x4d,0x4f,0x40,0x50,0x53,0x44,0x55,0x55,0x46, 0x57,0x5a,0x4a,0x5c,0x5a,0x4a,0x5e,0x5c,0x4e,0x62,0x6c,0x60,0x74,0x73,0x6a,0x80, 0x60,0x5f,0x7a,0x5a,0x5a,0x76,0x5f,0x5f,0x7b,0x55,0x5a,0x77,0x52,0x5a,0x77,0x55, 0x5d,0x79,0x5a,0x62,0x7e,0x66,0x6e,0x86,0x8a,0x8e,0x9c,0x9e,0xa0,0xad,0xaf,0xaf, 0xb6,0xb9,0xb8,0xbd,0xb8,0xb6,0xbc,0xb1,0xb1,0xb8,0xa8,0xa9,0xb1,0xac,0xab,0xb1, 0xcf,0xd0,0xd5,0xbc,0xbf,0xc7,0x96,0x9c,0xac,0x78,0x80,0x97,0x80,0x87,0x9a,0x7d, 0x84,0x9a,0x70,0x78,0x92,0x77,0x66,0x7b,0x69,0x57,0x6b,0x57,0x42,0x59,0x4b,0x37, 0x4e,0x48,0x36,0x4b,0x49,0x36,0x4c,0x41,0x30,0x44,0x5d,0x4d,0x68,0x53,0x5e,0x7e, 0x1e,0x22,0x2a,0x1f,0x22,0x2a,0x1d,0x1f,0x26,0x2f,0x2e,0x3f,0x37,0x33,0x49,0x52, 0x4c,0x6b,0x5a,0x51,0x73,0x5c,0x52,0x73,0x5c,0x51,0x73,0x5d,0x52,0x73,0x5c,0x51, 0x74,0x5c,0x51,0x73,0x5b,0x50,0x71,0x58,0x4f,0x70,0x55,0x4c,0x6c,0x48,0x3e,0x58, 0x3e,0x36,0x4c,0x47,0x3d,0x54,0x50,0x4a,0x66,0x58,0x5c,0x79,0x4a,0x4c,0x5a,0x49, 0x4e,0x59,0x4d,0x52,0x63,0x4e,0x54,0x65,0x4e,0x52,0x5f,0x58,0x5b,0x63,0x5a,0x5c, 0x63,0x74,0x6e,0x79,0x70,0x70,0x80,0x45,0x4b,0x66,0x42,0x43,0x5b,0x36,0x36,0x4b, 0x32,0x32,0x47,0x34,0x33,0x47,0x34,0x34,0x49,0x4c,0x49,0x63,0x52,0x4e,0x69,0x51, 0x50,0x6c,0x4a,0x4e,0x6f,0x49,0x4f,0x70,0x50,0x54,0x74,0x4e,0x55,0x77,0x60,0x69, 0x86,0x62,0x6a,0x82,0x46,0x4b,0x58,0x44,0x4b,0x61,0x4c,0x47,0x5f,0x56,0x4a,0x5e, 0x57,0x4c,0x60,0x55,0x4b,0x62,0x4b,0x4a,0x64,0x4a,0x52,0x6b,0x4a,0x51,0x6b,0x4a, 0x48,0x62,0x49,0x48,0x62,0x4a,0x48,0x63,0x48,0x49,0x62,0x45,0x4b,0x64,0x42,0x49, 0x5f,0x42,0x49,0x5d,0x4e,0x55,0x68,0x53,0x5a,0x6e,0x55,0x5b,0x6f,0x64,0x6a,0x7a, 0x66,0x6b,0x7c,0x6c,0x71,0x81,0x6f,0x74,0x82,0x6a,0x6f,0x7d,0x72,0x77,0x85,0x7c, 0x80,0x8c,0x82,0x86,0x90,0x84,0x88,0x92,0x70,0x75,0x82,0x61,0x66,0x76,0x59,0x5e, 0x6f,0x51,0x57,0x6a,0x4d,0x53,0x66,0x46,0x4d,0x60,0x42,0x49,0x5b,0x41,0x46,0x57, 0x3c,0x41,0x52,0x3a,0x3e,0x4e,0x36,0x3b,0x4b,0x33,0x37,0x46,0x31,0x36,0x44,0x2c, 0x30,0x3e,0x28,0x2c,0x39,0x23,0x27,0x33,0x22,0x25,0x30,0x1f,0x22,0x2d,0x1c,0x1e, 0x28,0x1a,0x1c,0x26,0x1a,0x1c,0x25,0x1a,0x1c,0x25,0x16,0x18,0x20,0x14,0x16,0x1c, 0x12,0x12,0x19,0x14,0x16,0x1c,0x14,0x16,0x1c,0x12,0x14,0x1a,0x11,0x12,0x18,0x0e, 0x10,0x15,0x0e,0x0e,0x14,0x0d,0x0e,0x12,0x0c,0x0d,0x12,0x0b,0x0c,0x10,0x0a,0x0b, 0x0e,0x0a,0x0a,0x0e,0x09,0x0a,0x0d,0x09,0x0a,0x0d,0x0c,0x0e,0x12,0x16,0x17,0x1b, 0x1c,0x1d,0x20,0x15,0x16,0x19,0x07,0x08,0x09,0x06,0x06,0x07,0x0d,0x0e,0x10,0x0c, 0x0d,0x0e,0x0b,0x0c,0x0e,0x05,0x06,0x06,0x0e,0x0f,0x12,0x14,0x15,0x17,0x0b,0x0b, 0x0c,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x07,0x9d, 0xa5,0xbe,0x60,0x6c,0x93,0x52,0x55,0x80,0x52,0x53,0x7e,0x52,0x54,0x7e,0x52,0x55, 0x81,0x52,0x57,0x83,0x52,0x57,0x83,0x52,0x5b,0x85,0x52,0x5c,0x86,0x52,0x5c,0x86, 0x52,0x5d,0x86,0x52,0x5d,0x87,0x6e,0x7e,0xb7,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x04,0x04,0x05,0x04,0x04,0x05,0x06, 0x06,0x07,0x07,0x07,0x09,0x0b,0x0c,0x0e,0x1e,0x1f,0x22,0x22,0x22,0x26,0x25,0x26, 0x29,0x33,0x35,0x3a,0x35,0x39,0x47,0x3a,0x36,0x48,0x40,0x37,0x46,0x3b,0x31,0x3d, 0x3a,0x2f,0x3b,0x42,0x35,0x42,0x58,0x48,0x5a,0x5a,0x4e,0x65,0x56,0x50,0x6a,0x52, 0x52,0x70,0x52,0x52,0x6f,0x4c,0x4a,0x65,0x45,0x44,0x5c,0x45,0x49,0x61,0x51,0x54, 0x70,0x50,0x55,0x71,0x60,0x68,0x80,0x63,0x6c,0x84,0x65,0x6d,0x85,0x73,0x7a,0x8e, 0x80,0x86,0x98,0x8b,0x90,0xa0,0x91,0x96,0xa3,0x92,0x96,0xa3,0x93,0x98,0xa6,0x91, 0x96,0xa4,0x83,0x89,0x9a,0x73,0x7a,0x8f,0x68,0x70,0x87,0x5a,0x62,0x7e,0x52,0x59, 0x76,0x52,0x52,0x6f,0x4e,0x4a,0x63,0x4a,0x46,0x5c,0x52,0x4b,0x64,0x56,0x4e,0x66, 0x55,0x4a,0x60,0x50,0x42,0x53,0x5f,0x4e,0x62,0x5f,0x4e,0x62,0x51,0x46,0x5b,0x53, 0x4e,0x68,0x57,0x56,0x73,0x57,0x56,0x72,0x57,0x57,0x74,0x57,0x59,0x74,0x58,0x58, 0x73,0x56,0x54,0x70,0x5a,0x56,0x6f,0x67,0x64,0x7c,0x6e,0x6d,0x82,0x6a,0x6a,0x80, 0x62,0x62,0x7b,0x5b,0x5a,0x74,0x62,0x5a,0x72,0x60,0x58,0x6e,0x5c,0x53,0x6a,0x5a, 0x52,0x6a,0x58,0x51,0x6a,0x4f,0x51,0x6e,0x6a,0x72,0x87,0x74,0x7b,0x8c,0x7a,0x7e, 0x8d,0x84,0x88,0x94,0x76,0x79,0x84,0x80,0x86,0x99,0x76,0x76,0x8f,0x60,0x66,0x87, 0x51,0x58,0x74,0x46,0x4b,0x68,0x56,0x53,0x6f,0x5c,0x58,0x76,0x54,0x49,0x65,0x4a, 0x49,0x6a,0x78,0x7c,0x91,0x67,0x57,0x6c,0x5a,0x56,0x75,0x57,0x56,0x74,0x55,0x56, 0x72,0x55,0x55,0x71,0x56,0x54,0x6f,0x30,0x2c,0x3d,0x33,0x2f,0x39,0x3d,0x38,0x3d, 0x12,0x10,0x11,0x0d,0x0d,0x12,0x47,0x43,0x68,0x4d,0x47,0x6b,0x5c,0x4d,0x6e,0x4f, 0x56,0x7e,0x51,0x5c,0x85,0x52,0x5d,0x88,0x55,0x60,0x89,0x63,0x52,0x74,0x52,0x4f, 0x7b,0xdc,0xdf,0xe7,0x92,0x8e,0x8f,0x24,0x19,0x1e,0x31,0x24,0x2c,0x31,0x24,0x2c, 0x31,0x24,0x2b,0x44,0x34,0x40,0x41,0x40,0x57,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x6d,0x72,0x80,0x8d,0x98,0xb3,0x58,0x50,0x79,0x55,0x60, 0x89,0x5e,0x6b,0x91,0x5b,0x67,0x8f,0x5c,0x69,0x8f,0x5c,0x67,0x8f,0x5d,0x6a,0x90, 0x61,0x6d,0x93,0x5f,0x6b,0x92,0x5f,0x6b,0x91,0x5e,0x6b,0x91,0x57,0x62,0x8b,0x5c, 0x52,0x77,0x5d,0x69,0x8d,0x7a,0x80,0x92,0x09,0x09,0x0a,0x0a,0x0a,0x0c,0x0a,0x0b, 0x0e,0x0b,0x0c,0x0e,0x0d,0x0e,0x0f,0x0e,0x0e,0x11,0x0e,0x10,0x12,0x0f,0x11,0x13, 0x0f,0x11,0x14,0x0f,0x10,0x13,0x10,0x12,0x15,0x11,0x12,0x16,0x10,0x12,0x15,0x10, 0x12,0x15,0x10,0x12,0x16,0x11,0x12,0x16,0x11,0x12,0x16,0x10,0x12,0x17,0x10,0x11, 0x16,0x13,0x12,0x19,0x3f,0x38,0x44,0x6f,0x70,0x81,0x6e,0x6e,0x7d,0x5f,0x59,0x69, 0x2e,0x28,0x33,0x34,0x31,0x41,0x36,0x3b,0x4e,0x47,0x4e,0x60,0x42,0x48,0x5c,0x3a, 0x38,0x4e,0x42,0x3c,0x4e,0x47,0x3f,0x53,0x47,0x42,0x56,0x43,0x42,0x5a,0x45,0x44, 0x5d,0x43,0x45,0x5d,0x42,0x44,0x5c,0x3c,0x40,0x55,0x32,0x35,0x46,0x35,0x38,0x4c, 0x35,0x35,0x48,0x35,0x34,0x46,0x3e,0x36,0x46,0x45,0x3a,0x49,0x44,0x38,0x46,0x51, 0x43,0x54,0x55,0x46,0x57,0x56,0x46,0x57,0x55,0x45,0x56,0x58,0x48,0x5a,0x5c,0x4e, 0x62,0x60,0x56,0x6d,0x65,0x63,0x7b,0x69,0x67,0x80,0x67,0x67,0x80,0x69,0x6b,0x85, 0x52,0x58,0x75,0x52,0x5a,0x78,0x56,0x5e,0x7a,0x67,0x6f,0x86,0x8a,0x90,0x9e,0x92, 0x95,0xa5,0x88,0x8b,0x9c,0x9b,0x9b,0xa6,0xab,0xaa,0xaf,0xab,0xaa,0xb1,0xa0,0xa1, 0xaa,0xa6,0xa5,0xab,0xcb,0xcd,0xd3,0xb6,0xba,0xc4,0x86,0x8e,0xa3,0x7d,0x85,0x9b, 0x80,0x87,0x9a,0x74,0x7c,0x93,0x6a,0x72,0x8d,0x61,0x6a,0x89,0x6c,0x5a,0x70,0x64, 0x51,0x65,0x53,0x3f,0x55,0x4d,0x39,0x4f,0x55,0x41,0x59,0x42,0x31,0x44,0x5e,0x4e, 0x68,0x51,0x5a,0x7d,0x1f,0x22,0x2a,0x1e,0x21,0x29,0x1b,0x1e,0x25,0x2e,0x2d,0x3d, 0x32,0x2e,0x44,0x35,0x2e,0x47,0x5a,0x51,0x74,0x5c,0x52,0x73,0x5c,0x51,0x73,0x5d, 0x51,0x74,0x5d,0x52,0x74,0x5d,0x51,0x74,0x5c,0x51,0x73,0x5a,0x50,0x71,0x58,0x4d, 0x6f,0x4b,0x41,0x5c,0x40,0x37,0x4e,0x43,0x3c,0x52,0x46,0x3e,0x58,0x56,0x52,0x68, 0x43,0x3d,0x4d,0x37,0x3c,0x4a,0x39,0x3e,0x50,0x3a,0x41,0x53,0x3f,0x45,0x56,0x51, 0x55,0x5f,0x56,0x58,0x5e,0x68,0x63,0x6f,0x64,0x65,0x74,0x47,0x4f,0x69,0x3f,0x41, 0x5c,0x3c,0x3b,0x53,0x37,0x37,0x4d,0x33,0x34,0x48,0x30,0x32,0x46,0x31,0x32,0x46, 0x31,0x31,0x45,0x2e,0x30,0x43,0x2f,0x32,0x46,0x3e,0x3c,0x53,0x54,0x51,0x6d,0x57, 0x56,0x76,0x50,0x59,0x79,0x52,0x5a,0x76,0x2d,0x32,0x42,0x40,0x3c,0x51,0x51,0x46, 0x5a,0x56,0x4b,0x5f,0x54,0x4c,0x63,0x4e,0x4a,0x62,0x4b,0x48,0x61,0x47,0x47,0x61, 0x47,0x4b,0x65,0x47,0x46,0x5f,0x49,0x46,0x5e,0x46,0x45,0x5e,0x45,0x43,0x5d,0x3a, 0x3b,0x50,0x3b,0x40,0x51,0x42,0x47,0x56,0x40,0x45,0x55,0x3f,0x45,0x57,0x3a,0x40, 0x52,0x45,0x4c,0x63,0x45,0x4b,0x62,0x4b,0x52,0x67,0x5b,0x62,0x73,0x66,0x6c,0x7d, 0x71,0x76,0x84,0x7a,0x7e,0x8c,0x7e,0x82,0x8f,0x7f,0x84,0x8f,0x6d,0x72,0x80,0x5c, 0x62,0x72,0x57,0x5d,0x6e,0x4e,0x54,0x66,0x43,0x49,0x5e,0x3f,0x43,0x5a,0x3d,0x42, 0x58,0x3e,0x43,0x56,0x3c,0x42,0x52,0x37,0x3d,0x4c,0x32,0x36,0x46,0x2e,0x33,0x42, 0x2b,0x2f,0x3d,0x29,0x2d,0x3a,0x23,0x27,0x33,0x21,0x24,0x2f,0x20,0x23,0x2e,0x20, 0x23,0x2e,0x1b,0x1e,0x27,0x19,0x1a,0x23,0x18,0x1a,0x23,0x16,0x16,0x1e,0x15,0x15, 0x1c,0x12,0x12,0x18,0x10,0x10,0x16,0x10,0x10,0x16,0x0e,0x0e,0x13,0x0e,0x0e,0x13, 0x0c,0x0c,0x11,0x0c,0x0c,0x10,0x0b,0x0b,0x0f,0x0a,0x0a,0x0e,0x0a,0x0a,0x0d,0x09, 0x08,0x0b,0x07,0x07,0x0a,0x07,0x06,0x09,0x06,0x06,0x09,0x07,0x07,0x0a,0x10,0x11, 0x14,0x1e,0x20,0x23,0x1a,0x1b,0x1e,0x11,0x12,0x16,0x05,0x05,0x06,0x04,0x04,0x05, 0x0e,0x0f,0x11,0x0f,0x10,0x11,0x13,0x13,0x14,0x0c,0x0c,0x0e,0x10,0x11,0x13,0x0f, 0x10,0x12,0x08,0x08,0x09,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x87,0x8c,0x9d,0x6e,0x7a,0x9d,0x52,0x5d,0x88,0x52,0x52,0x7d,0x52, 0x54,0x7e,0x52,0x55,0x80,0x52,0x55,0x81,0x52,0x57,0x83,0x52,0x5a,0x84,0x52,0x58, 0x84,0x52,0x5c,0x86,0x52,0x5d,0x86,0x52,0x5d,0x86,0x5c,0x67,0x98,0x13,0x16,0x1a, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x04, 0x03,0x04,0x04,0x04,0x05,0x06,0x07,0x07,0x0a,0x10,0x0f,0x14,0x17,0x19,0x1f,0x2a, 0x2a,0x2e,0x2f,0x31,0x34,0x26,0x28,0x2e,0x24,0x25,0x32,0x38,0x31,0x3e,0x40,0x36, 0x44,0x45,0x39,0x47,0x48,0x3b,0x4a,0x4f,0x41,0x51,0x55,0x46,0x58,0x57,0x4e,0x66, 0x51,0x56,0x72,0x53,0x5b,0x78,0x52,0x54,0x72,0x52,0x58,0x75,0x50,0x58,0x70,0x59, 0x60,0x76,0x67,0x6e,0x84,0x6f,0x76,0x8a,0x74,0x7a,0x8e,0x6e,0x74,0x8a,0x6f,0x77, 0x8c,0x73,0x7a,0x8e,0x82,0x88,0x99,0x91,0x96,0xa3,0x95,0x9a,0xa6,0x96,0x9b,0xa8, 0x99,0x9d,0xaa,0x97,0x9c,0xa9,0x92,0x96,0xa3,0x8b,0x91,0x9f,0x86,0x8b,0x9b,0x7c, 0x82,0x96,0x71,0x78,0x8e,0x5e,0x67,0x81,0x52,0x58,0x76,0x52,0x51,0x6f,0x4e,0x4c, 0x68,0x46,0x44,0x5e,0x49,0x47,0x5f,0x52,0x4a,0x63,0x50,0x49,0x5f,0x50,0x46,0x5b, 0x4d,0x48,0x5f,0x54,0x52,0x70,0x58,0x5a,0x76,0x58,0x5b,0x77,0x57,0x5b,0x77,0x58, 0x5b,0x77,0x57,0x57,0x74,0x56,0x55,0x72,0x67,0x66,0x7d,0x78,0x78,0x8b,0x7e,0x7d, 0x8f,0x76,0x78,0x8c,0x65,0x64,0x7d,0x63,0x5b,0x72,0x61,0x5a,0x6f,0x57,0x52,0x66, 0x4e,0x46,0x5b,0x51,0x4a,0x61,0x4f,0x4a,0x62,0x4e,0x4c,0x67,0x53,0x5a,0x75,0x66, 0x6d,0x83,0x62,0x67,0x79,0x75,0x79,0x86,0x9e,0xa1,0xa7,0xa3,0xa7,0xb6,0x9b,0x96, 0xa5,0x75,0x78,0x92,0x4e,0x52,0x72,0x43,0x48,0x64,0x50,0x4e,0x6a,0x5c,0x59,0x74, 0x4e,0x4c,0x6a,0x54,0x49,0x65,0x6c,0x71,0x8c,0x72,0x6a,0x7b,0x69,0x59,0x71,0x66, 0x5b,0x77,0x5d,0x57,0x75,0x5a,0x56,0x72,0x58,0x54,0x71,0x37,0x33,0x48,0x2d,0x2b, 0x3b,0x43,0x3e,0x47,0x4b,0x47,0x4b,0x09,0x08,0x0b,0x48,0x48,0x6b,0x4c,0x49,0x70, 0x5f,0x4f,0x70,0x50,0x54,0x7d,0x50,0x5b,0x84,0x52,0x5d,0x86,0x53,0x5e,0x88,0x60, 0x53,0x77,0x62,0x53,0x77,0xc2,0xc7,0xd6,0xb9,0xb7,0xb8,0x26,0x1b,0x20,0x2f,0x23, 0x2a,0x33,0x26,0x2e,0x31,0x24,0x2c,0x3d,0x2e,0x38,0x61,0x50,0x64,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x32,0x34,0x3b,0x9c,0xa4,0xbe,0x52, 0x53,0x7e,0x52,0x4f,0x7a,0x5d,0x69,0x90,0x5a,0x66,0x8d,0x5b,0x67,0x8f,0x5d,0x69, 0x90,0x5d,0x6a,0x8f,0x5d,0x68,0x90,0x5f,0x6c,0x92,0x5f,0x6b,0x92,0x5f,0x6b,0x91, 0x5e,0x6a,0x90,0x54,0x50,0x78,0x55,0x5f,0x88,0x7d,0x86,0xa4,0x23,0x24,0x25,0x09, 0x09,0x0a,0x0a,0x0a,0x0b,0x0a,0x0b,0x0d,0x0b,0x0c,0x0e,0x0b,0x0c,0x0e,0x0d,0x0e, 0x10,0x0d,0x0e,0x10,0x0e,0x0e,0x12,0x0e,0x0e,0x12,0x0e,0x10,0x12,0x0e,0x0f,0x12, 0x0e,0x10,0x13,0x0e,0x10,0x13,0x0f,0x10,0x14,0x0f,0x10,0x14,0x0f,0x11,0x15,0x10, 0x11,0x16,0x0e,0x10,0x14,0x0d,0x0e,0x12,0x2a,0x25,0x2f,0x77,0x7e,0x91,0x79,0x7e, 0x8f,0x77,0x79,0x8b,0x1e,0x1a,0x21,0x1b,0x1b,0x26,0x26,0x2a,0x36,0x29,0x2c,0x39, 0x27,0x29,0x36,0x2c,0x2b,0x3a,0x3a,0x35,0x46,0x44,0x3e,0x50,0x46,0x40,0x55,0x47, 0x43,0x5a,0x49,0x47,0x61,0x47,0x46,0x61,0x45,0x46,0x5e,0x41,0x43,0x5a,0x37,0x3b, 0x4e,0x30,0x35,0x46,0x31,0x35,0x46,0x33,0x35,0x48,0x38,0x37,0x4b,0x42,0x3d,0x51, 0x4a,0x42,0x54,0x46,0x3c,0x4d,0x48,0x3b,0x4b,0x53,0x44,0x55,0x54,0x44,0x56,0x56, 0x46,0x57,0x5a,0x4a,0x5c,0x59,0x4e,0x63,0x59,0x50,0x68,0x55,0x4f,0x6a,0x50,0x4e, 0x6b,0x6b,0x6c,0x83,0x51,0x56,0x72,0x53,0x5a,0x76,0x55,0x5d,0x79,0x5a,0x63,0x7d, 0x76,0x7d,0x90,0x8f,0x94,0xa5,0x7f,0x82,0x97,0x71,0x74,0x89,0x92,0x92,0x9a,0x9b, 0x9a,0xa1,0x8a,0x8b,0x95,0x86,0x86,0x8f,0xc5,0xc6,0xcd,0xb7,0xbb,0xc7,0x8b,0x92, 0xa7,0x8f,0x94,0xa6,0x8e,0x94,0xa6,0x7b,0x82,0x9a,0x79,0x80,0x99,0x66,0x70,0x8c, 0x66,0x62,0x82,0x66,0x53,0x69,0x58,0x44,0x5c,0x5d,0x48,0x62,0x56,0x41,0x5a,0x44, 0x33,0x47,0x5f,0x4e,0x69,0x4f,0x54,0x76,0x1e,0x21,0x29,0x1d,0x20,0x28,0x1a,0x1d, 0x24,0x2e,0x2c,0x3d,0x31,0x2e,0x44,0x31,0x2c,0x41,0x4c,0x45,0x63,0x5c,0x51,0x72, 0x5c,0x51,0x74,0x5d,0x51,0x74,0x5d,0x51,0x74,0x5e,0x52,0x75,0x5e,0x51,0x74,0x5a, 0x51,0x74,0x57,0x4e,0x71,0x55,0x4a,0x6a,0x4c,0x41,0x5b,0x54,0x47,0x62,0x4d,0x43, 0x5d,0x54,0x4e,0x63,0x47,0x40,0x50,0x2f,0x34,0x44,0x34,0x39,0x4b,0x37,0x3a,0x4e, 0x3a,0x3f,0x50,0x4d,0x51,0x5a,0x5c,0x5e,0x64,0x72,0x6c,0x78,0x65,0x64,0x74,0x4f, 0x57,0x72,0x41,0x45,0x61,0x42,0x41,0x5f,0x40,0x41,0x5c,0x3b,0x3c,0x54,0x3a,0x3c, 0x56,0x37,0x3b,0x53,0x31,0x35,0x4a,0x2d,0x31,0x45,0x2d,0x2f,0x42,0x2e,0x2f,0x41, 0x31,0x33,0x46,0x45,0x44,0x5d,0x48,0x47,0x61,0x4c,0x4a,0x64,0x33,0x2a,0x34,0x46, 0x3a,0x4a,0x4f,0x46,0x5b,0x4a,0x48,0x62,0x4b,0x4f,0x6a,0x4a,0x50,0x6a,0x48,0x47, 0x61,0x45,0x44,0x5c,0x44,0x43,0x5b,0x46,0x45,0x5c,0x46,0x44,0x5b,0x3d,0x3c,0x52, 0x36,0x37,0x4b,0x39,0x3e,0x52,0x49,0x4f,0x61,0x4a,0x4f,0x60,0x46,0x4d,0x5f,0x3e, 0x42,0x59,0x3a,0x3a,0x50,0x3d,0x3d,0x53,0x43,0x42,0x5a,0x42,0x42,0x5a,0x43,0x47, 0x5f,0x4f,0x56,0x6b,0x59,0x5f,0x72,0x62,0x68,0x7a,0x69,0x6e,0x7e,0x69,0x6e,0x7d, 0x5e,0x63,0x73,0x56,0x5c,0x6c,0x51,0x56,0x68,0x42,0x48,0x5d,0x3f,0x3f,0x55,0x36, 0x35,0x4a,0x31,0x32,0x43,0x36,0x3c,0x4d,0x36,0x3b,0x4a,0x32,0x36,0x46,0x2e,0x32, 0x40,0x2a,0x2e,0x3b,0x27,0x2b,0x38,0x24,0x27,0x33,0x20,0x23,0x2e,0x1e,0x20,0x2b, 0x1a,0x1d,0x26,0x1a,0x1e,0x26,0x19,0x1a,0x23,0x17,0x18,0x20,0x17,0x17,0x1f,0x15, 0x14,0x1c,0x12,0x12,0x1a,0x10,0x10,0x16,0x0f,0x0f,0x15,0x0e,0x0e,0x12,0x0d,0x0c, 0x11,0x0c,0x0c,0x0f,0x0b,0x0a,0x0e,0x0a,0x0a,0x0e,0x0a,0x09,0x0c,0x09,0x09,0x0b, 0x08,0x08,0x0a,0x08,0x07,0x0a,0x07,0x07,0x09,0x06,0x06,0x08,0x06,0x06,0x07,0x07, 0x08,0x0a,0x14,0x16,0x18,0x1f,0x21,0x24,0x19,0x1a,0x1e,0x0e,0x10,0x13,0x04,0x04, 0x06,0x02,0x02,0x03,0x0a,0x0a,0x0c,0x0e,0x0e,0x0f,0x19,0x1a,0x1b,0x16,0x18,0x1a, 0x0f,0x0f,0x12,0x13,0x13,0x15,0x0b,0x0b,0x0c,0x03,0x03,0x03,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x43,0x48,0x81,0x8c,0xab,0x56,0x62,0x8b, 0x52,0x53,0x7d,0x52,0x53,0x7d,0x52,0x54,0x7e,0x52,0x54,0x80,0x52,0x57,0x82,0x52, 0x57,0x82,0x52,0x57,0x82,0x52,0x58,0x84,0x52,0x57,0x83,0x52,0x5a,0x84,0x54,0x5c, 0x88,0x51,0x5a,0x85,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x04,0x05,0x05,0x06,0x11,0x0e,0x12,0x23,0x1e,0x26, 0x20,0x23,0x2e,0x2e,0x30,0x36,0x25,0x26,0x2b,0x1f,0x21,0x26,0x29,0x2c,0x36,0x2d, 0x2c,0x3c,0x3c,0x36,0x46,0x49,0x3f,0x51,0x52,0x44,0x55,0x55,0x46,0x57,0x55,0x49, 0x5c,0x4d,0x4c,0x68,0x62,0x6a,0x83,0x55,0x5d,0x79,0x5a,0x62,0x7c,0x6e,0x75,0x8b, 0x76,0x7c,0x90,0x7c,0x82,0x92,0x80,0x86,0x95,0x85,0x8a,0x99,0x7f,0x85,0x95,0x6f, 0x76,0x8a,0x67,0x6e,0x85,0x6b,0x73,0x89,0x7f,0x86,0x96,0x91,0x96,0xa2,0x96,0x9a, 0xa7,0x98,0x9d,0xa8,0x99,0x9e,0xa9,0x98,0x9d,0xa8,0x96,0x9a,0xa6,0x91,0x96,0xa2, 0x91,0x96,0xa3,0x91,0x96,0xa2,0x8b,0x90,0xa0,0x7e,0x85,0x96,0x6a,0x72,0x89,0x53, 0x5b,0x74,0x42,0x48,0x60,0x41,0x44,0x5b,0x47,0x48,0x62,0x4b,0x4c,0x68,0x4e,0x50, 0x6b,0x51,0x51,0x6d,0x52,0x52,0x70,0x53,0x55,0x72,0x56,0x5d,0x7a,0x5b,0x62,0x7d, 0x5c,0x63,0x7e,0x59,0x60,0x7b,0x56,0x5a,0x76,0x5e,0x5f,0x7a,0x75,0x76,0x8a,0x7d, 0x80,0x92,0x7e,0x82,0x95,0x74,0x78,0x8e,0x60,0x5f,0x78,0x62,0x5a,0x72,0x60,0x58, 0x6f,0x54,0x4d,0x62,0x4b,0x46,0x5a,0x47,0x42,0x53,0x45,0x40,0x52,0x52,0x4a,0x60, 0x4b,0x4c,0x67,0x67,0x6e,0x84,0x5e,0x64,0x77,0x6a,0x6e,0x7c,0x88,0x8a,0x93,0xb4, 0xb8,0xc5,0xb3,0xaf,0xb9,0xa2,0xa3,0xb5,0x63,0x6b,0x86,0x48,0x4f,0x6c,0x4c,0x4c, 0x66,0x54,0x52,0x6c,0x53,0x53,0x72,0x55,0x49,0x65,0x5a,0x60,0x7f,0x8e,0x8e,0x9d, 0x59,0x48,0x5b,0x63,0x51,0x66,0x68,0x56,0x6c,0x69,0x59,0x71,0x66,0x5a,0x75,0x4e, 0x43,0x5b,0x32,0x2b,0x3e,0x33,0x31,0x43,0x5a,0x53,0x5f,0x34,0x33,0x34,0x48,0x47, 0x6c,0x4d,0x4a,0x71,0x60,0x50,0x71,0x50,0x51,0x7c,0x51,0x59,0x82,0x52,0x5d,0x87, 0x54,0x5f,0x88,0x52,0x50,0x7b,0x64,0x52,0x73,0xa1,0xa9,0xc0,0xde,0xdd,0xdf,0x23, 0x18,0x1d,0x31,0x24,0x2b,0x36,0x28,0x30,0x32,0x25,0x2d,0x39,0x2b,0x34,0x6b,0x57, 0x6d,0x02,0x03,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x06,0x07, 0x9a,0xa2,0xb9,0x64,0x71,0x96,0x64,0x4e,0x6c,0x5e,0x6b,0x91,0x5a,0x65,0x8d,0x5a, 0x66,0x8d,0x5c,0x67,0x8f,0x5c,0x69,0x8e,0x5d,0x69,0x8f,0x5f,0x6a,0x91,0x5e,0x6a, 0x91,0x61,0x6c,0x92,0x61,0x6c,0x92,0x52,0x58,0x82,0x52,0x50,0x79,0x6a,0x77,0x99, 0x62,0x65,0x6b,0x07,0x07,0x09,0x08,0x09,0x0a,0x09,0x0a,0x0b,0x0a,0x0a,0x0c,0x0a, 0x0a,0x0d,0x0a,0x0b,0x0e,0x0b,0x0c,0x0e,0x0c,0x0d,0x0f,0x0d,0x0e,0x10,0x0c,0x0d, 0x10,0x0e,0x0e,0x11,0x17,0x17,0x1b,0x25,0x25,0x29,0x2a,0x2b,0x2e,0x2d,0x2e,0x31, 0x2a,0x2b,0x2e,0x22,0x23,0x26,0x1a,0x1b,0x1d,0x0c,0x0d,0x11,0x12,0x11,0x15,0x52, 0x57,0x73,0x81,0x87,0x9b,0x82,0x87,0x9a,0x2f,0x2c,0x35,0x14,0x16,0x1b,0x20,0x22, 0x28,0x21,0x23,0x2a,0x1e,0x22,0x2a,0x1f,0x20,0x2b,0x2c,0x2b,0x3b,0x37,0x35,0x46, 0x3e,0x38,0x4a,0x43,0x3e,0x52,0x47,0x45,0x5c,0x49,0x48,0x62,0x49,0x48,0x62,0x45, 0x45,0x5e,0x3f,0x3f,0x56,0x3b,0x41,0x55,0x39,0x3e,0x52,0x38,0x3d,0x50,0x39,0x3b, 0x4f,0x3a,0x3a,0x4e,0x3e,0x3a,0x4e,0x49,0x40,0x52,0x48,0x3e,0x50,0x48,0x3b,0x49, 0x51,0x42,0x53,0x57,0x47,0x5a,0x58,0x48,0x5a,0x5a,0x4a,0x5d,0x5b,0x50,0x66,0x59, 0x50,0x68,0x50,0x4e,0x6a,0x4f,0x4e,0x6a,0x50,0x52,0x6f,0x52,0x5a,0x76,0x56,0x5e, 0x7a,0x5a,0x62,0x7d,0x5f,0x68,0x81,0x74,0x7a,0x8f,0x8e,0x90,0xa1,0x64,0x68,0x80, 0x6e,0x71,0x84,0x84,0x84,0x8d,0x74,0x74,0x7d,0x6a,0x69,0x72,0xb1,0xb2,0xba,0xbb, 0xbe,0xc8,0xa3,0xa9,0xb6,0x95,0x99,0xa9,0x93,0x98,0xa9,0x8a,0x90,0xa3,0x76,0x7d, 0x95,0x62,0x6c,0x88,0x65,0x6e,0x8e,0x64,0x50,0x68,0x61,0x52,0x71,0x5f,0x4a,0x66, 0x59,0x44,0x5d,0x4a,0x38,0x4c,0x5e,0x4d,0x68,0x4f,0x4f,0x73,0x1d,0x1f,0x27,0x1c, 0x1e,0x26,0x1a,0x1c,0x22,0x2c,0x2b,0x3b,0x30,0x2e,0x44,0x31,0x2b,0x42,0x50,0x49, 0x68,0x5c,0x51,0x73,0x5b,0x51,0x76,0x5d,0x52,0x75,0x5e,0x51,0x74,0x5e,0x52,0x75, 0x5e,0x51,0x74,0x5e,0x51,0x74,0x5b,0x50,0x71,0x55,0x4d,0x6f,0x55,0x4b,0x6b,0x54, 0x4b,0x68,0x54,0x4a,0x68,0x61,0x5c,0x75,0x42,0x40,0x52,0x30,0x35,0x44,0x33,0x38, 0x4a,0x34,0x39,0x4a,0x38,0x3c,0x4a,0x3d,0x40,0x4a,0x3d,0x3f,0x46,0x5b,0x56,0x61, 0x61,0x60,0x71,0x51,0x5a,0x76,0x45,0x47,0x63,0x43,0x46,0x63,0x44,0x48,0x66,0x3d, 0x41,0x5d,0x3b,0x40,0x5c,0x3a,0x40,0x5d,0x3a,0x40,0x5a,0x33,0x39,0x51,0x35,0x38, 0x4f,0x36,0x38,0x51,0x38,0x38,0x50,0x48,0x44,0x5b,0x2a,0x2c,0x3c,0x27,0x27,0x37, 0x1c,0x16,0x1a,0x42,0x39,0x49,0x45,0x44,0x5d,0x48,0x4d,0x66,0x51,0x59,0x72,0x51, 0x59,0x71,0x4a,0x4c,0x66,0x46,0x45,0x5e,0x3b,0x39,0x4d,0x43,0x41,0x56,0x47,0x44, 0x5b,0x3f,0x3e,0x54,0x40,0x41,0x58,0x42,0x49,0x5d,0x4b,0x51,0x61,0x4d,0x52,0x62, 0x4a,0x50,0x62,0x42,0x48,0x5e,0x41,0x43,0x5b,0x38,0x3a,0x4e,0x3a,0x3a,0x4f,0x41, 0x40,0x57,0x44,0x42,0x5a,0x43,0x43,0x5b,0x42,0x48,0x60,0x47,0x4e,0x64,0x4f,0x56, 0x6a,0x52,0x58,0x6a,0x52,0x58,0x68,0x4e,0x54,0x64,0x45,0x4b,0x5e,0x3d,0x3d,0x53, 0x36,0x35,0x49,0x36,0x35,0x48,0x32,0x34,0x46,0x2a,0x2f,0x3d,0x2b,0x2f,0x3c,0x2b, 0x2f,0x3e,0x2a,0x2d,0x3b,0x26,0x2a,0x37,0x25,0x28,0x35,0x21,0x24,0x30,0x1e,0x21, 0x2b,0x1c,0x1e,0x27,0x1b,0x1c,0x25,0x1b,0x1b,0x24,0x1b,0x1b,0x25,0x1b,0x1a,0x22, 0x19,0x18,0x20,0x17,0x16,0x1e,0x13,0x12,0x18,0x10,0x10,0x16,0x0e,0x0e,0x14,0x0e, 0x0d,0x12,0x0d,0x0c,0x11,0x0b,0x0a,0x0e,0x0a,0x0a,0x0d,0x0a,0x0a,0x0d,0x0a,0x09, 0x0c,0x09,0x08,0x0b,0x08,0x08,0x0a,0x08,0x07,0x0a,0x06,0x06,0x08,0x06,0x06,0x08, 0x06,0x06,0x07,0x0a,0x0a,0x0d,0x18,0x19,0x1b,0x20,0x22,0x26,0x1a,0x1a,0x1f,0x0d, 0x0e,0x11,0x05,0x06,0x07,0x02,0x02,0x03,0x06,0x06,0x08,0x08,0x08,0x0a,0x12,0x12, 0x14,0x15,0x16,0x19,0x14,0x15,0x17,0x1a,0x1b,0x1e,0x0d,0x0d,0x0e,0x02,0x02,0x02, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x12,0x13,0x91,0x9a, 0xb5,0x5e,0x6a,0x91,0x52,0x54,0x7e,0x52,0x50,0x7c,0x52,0x52,0x7d,0x52,0x53,0x7e, 0x52,0x53,0x7e,0x52,0x54,0x7e,0x52,0x56,0x82,0x52,0x55,0x81,0x52,0x58,0x84,0x52, 0x57,0x83,0x52,0x57,0x83,0x64,0x6b,0xa1,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x03,0x05,0x08,0x07,0x09,0x19,0x14, 0x1a,0x30,0x2a,0x34,0x26,0x26,0x33,0x2b,0x2e,0x36,0x23,0x25,0x2b,0x28,0x2a,0x2f, 0x32,0x36,0x3e,0x2f,0x33,0x41,0x30,0x34,0x45,0x37,0x36,0x4a,0x4a,0x42,0x56,0x51, 0x48,0x5e,0x4c,0x47,0x5e,0x4e,0x55,0x6e,0x61,0x69,0x81,0x63,0x6b,0x84,0x74,0x7b, 0x8f,0x83,0x8a,0x9a,0x8a,0x8f,0x9d,0x8a,0x8e,0x9c,0x8b,0x90,0x9e,0x8e,0x93,0x9f, 0x7f,0x86,0x95,0x62,0x69,0x7f,0x52,0x5a,0x74,0x62,0x69,0x7f,0x77,0x7e,0x8e,0x87, 0x8d,0x9c,0x8e,0x94,0xa1,0x95,0x99,0xa6,0x9a,0x9e,0xa9,0x9c,0xa0,0xab,0x99,0x9d, 0xa7,0x96,0x9a,0xa6,0x92,0x97,0xa4,0x92,0x96,0xa3,0x95,0x99,0xa6,0x8f,0x94,0xa2, 0x82,0x88,0x99,0x77,0x7e,0x91,0x6c,0x74,0x8a,0x64,0x6b,0x83,0x52,0x5a,0x75,0x56, 0x5f,0x79,0x58,0x60,0x7a,0x57,0x60,0x7b,0x57,0x5f,0x7a,0x59,0x61,0x7c,0x5e,0x66, 0x7f,0x5e,0x66,0x7f,0x57,0x60,0x7a,0x56,0x5c,0x77,0x59,0x5a,0x76,0x61,0x62,0x7b, 0x75,0x76,0x8c,0x7e,0x83,0x95,0x76,0x7a,0x8f,0x6b,0x6b,0x83,0x6a,0x65,0x7b,0x66, 0x5f,0x76,0x5c,0x55,0x6e,0x57,0x52,0x6c,0x52,0x4b,0x62,0x48,0x41,0x55,0x53,0x47, 0x5b,0x50,0x45,0x59,0x4c,0x47,0x5e,0x52,0x59,0x71,0x60,0x66,0x7a,0x79,0x7e,0x8b, 0x98,0x9a,0xa0,0xaf,0xb3,0xc0,0xa4,0xa1,0xb0,0x8e,0x91,0xa7,0x78,0x7f,0x98,0x52, 0x59,0x75,0x4c,0x4e,0x6a,0x50,0x4f,0x6a,0x54,0x54,0x71,0x50,0x48,0x65,0x4d,0x51, 0x73,0x8e,0x93,0xa7,0x5a,0x4f,0x5d,0x55,0x45,0x55,0x5c,0x4b,0x5d,0x60,0x4d,0x62, 0x63,0x52,0x66,0x5f,0x4e,0x63,0x33,0x28,0x39,0x33,0x2b,0x3b,0x33,0x34,0x47,0x81, 0x80,0x86,0x41,0x40,0x63,0x4f,0x4b,0x74,0x5e,0x51,0x74,0x51,0x51,0x7a,0x51,0x5a, 0x83,0x51,0x5c,0x87,0x54,0x5f,0x88,0x52,0x57,0x81,0x64,0x4e,0x6c,0x85,0x90,0xae, 0xeb,0xee,0xf2,0x30,0x27,0x2b,0x30,0x23,0x2a,0x34,0x27,0x2f,0x35,0x27,0x30,0x34, 0x27,0x2f,0x62,0x4e,0x61,0x12,0x13,0x1a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x5d,0x62,0x72,0x82,0x8d,0xab,0x64,0x52,0x71,0x5b,0x66,0x8d, 0x5b,0x67,0x8f,0x5a,0x65,0x8c,0x5b,0x66,0x8d,0x5c,0x67,0x8f,0x5d,0x6a,0x8f,0x5d, 0x6a,0x90,0x5f,0x6b,0x92,0x5e,0x6a,0x91,0x5d,0x6a,0x90,0x5a,0x65,0x8b,0x58,0x53, 0x78,0x5e,0x69,0x90,0x89,0x90,0xa1,0x06,0x06,0x08,0x07,0x08,0x09,0x08,0x09,0x0a, 0x09,0x09,0x0a,0x09,0x0a,0x0b,0x0a,0x0a,0x0c,0x0a,0x0a,0x0c,0x28,0x29,0x2e,0x9e, 0xa0,0xa3,0x76,0x78,0x7b,0x0b,0x0c,0x0e,0x14,0x15,0x18,0x1c,0x1d,0x20,0x16,0x18, 0x1a,0x12,0x13,0x16,0x1b,0x1c,0x20,0x21,0x22,0x25,0x18,0x19,0x1d,0x0c,0x0d,0x10, 0x0b,0x0b,0x0f,0x4b,0x45,0x5c,0x74,0x7e,0x98,0x8c,0x93,0xa7,0x57,0x53,0x61,0x10, 0x12,0x15,0x1a,0x1c,0x22,0x1f,0x22,0x28,0x22,0x25,0x2c,0x24,0x26,0x2e,0x29,0x2c, 0x39,0x2c,0x2e,0x3e,0x2e,0x2e,0x3e,0x36,0x33,0x45,0x3e,0x3a,0x4e,0x43,0x42,0x5a, 0x48,0x46,0x60,0x48,0x46,0x61,0x44,0x43,0x5c,0x42,0x45,0x5e,0x42,0x47,0x5e,0x3f, 0x42,0x59,0x3d,0x3e,0x55,0x3b,0x3c,0x52,0x3a,0x3a,0x4e,0x41,0x3c,0x50,0x4a,0x41, 0x54,0x4c,0x42,0x52,0x47,0x3b,0x4b,0x52,0x45,0x57,0x57,0x48,0x5a,0x5a,0x4a,0x5c, 0x5c,0x4e,0x62,0x5a,0x50,0x69,0x4f,0x4e,0x6a,0x4e,0x4e,0x6a,0x4e,0x4f,0x6b,0x50, 0x54,0x71,0x53,0x5b,0x77,0x56,0x5f,0x7a,0x5b,0x64,0x7e,0x59,0x62,0x7b,0x63,0x68, 0x82,0x6a,0x6f,0x84,0x5a,0x5f,0x76,0x7b,0x7b,0x87,0x78,0x79,0x84,0x64,0x64,0x6e, 0x9a,0x9c,0xa4,0xad,0xb1,0xba,0xa1,0xa6,0xb2,0x90,0x95,0xa5,0x8a,0x8f,0xa1,0x86, 0x8b,0x9e,0x7d,0x83,0x99,0x73,0x7c,0x95,0x70,0x79,0x96,0x61,0x68,0x88,0x6a,0x5d, 0x78,0x60,0x4d,0x6b,0x59,0x44,0x5d,0x4a,0x38,0x4d,0x5c,0x4b,0x67,0x4c,0x4f,0x71, 0x1b,0x1e,0x25,0x1b,0x1e,0x25,0x1a,0x1b,0x22,0x2c,0x2b,0x3b,0x31,0x2e,0x44,0x32, 0x2d,0x43,0x58,0x4f,0x71,0x59,0x51,0x74,0x5d,0x52,0x74,0x5d,0x52,0x75,0x5e,0x52, 0x75,0x5e,0x52,0x75,0x5e,0x53,0x75,0x5e,0x52,0x75,0x5d,0x51,0x73,0x58,0x4f,0x72, 0x57,0x4e,0x6f,0x53,0x4d,0x6c,0x4c,0x49,0x6b,0x5e,0x5d,0x7b,0x3e,0x41,0x50,0x34, 0x38,0x43,0x37,0x3b,0x49,0x39,0x3e,0x4b,0x3a,0x3d,0x48,0x36,0x3a,0x42,0x30,0x32, 0x3a,0x49,0x45,0x50,0x59,0x57,0x69,0x4d,0x55,0x74,0x45,0x47,0x64,0x45,0x48,0x64, 0x47,0x4b,0x6b,0x46,0x49,0x6a,0x44,0x4a,0x68,0x40,0x48,0x66,0x40,0x47,0x67,0x3a, 0x40,0x5c,0x37,0x3c,0x57,0x35,0x3b,0x54,0x37,0x3a,0x52,0x36,0x36,0x4b,0x2a,0x2b, 0x3c,0x2a,0x2c,0x3d,0x24,0x1e,0x26,0x37,0x31,0x3e,0x46,0x40,0x55,0x45,0x43,0x5b, 0x49,0x4b,0x66,0x4a,0x50,0x6a,0x42,0x40,0x59,0x49,0x43,0x58,0x4a,0x45,0x5b,0x40, 0x3c,0x51,0x42,0x3d,0x52,0x40,0x3f,0x54,0x39,0x39,0x4d,0x39,0x3d,0x51,0x46,0x4c, 0x5e,0x4c,0x52,0x62,0x4f,0x55,0x65,0x4b,0x51,0x64,0x43,0x4a,0x60,0x41,0x45,0x5d, 0x3d,0x3d,0x52,0x39,0x38,0x4d,0x3f,0x3c,0x4f,0x40,0x3f,0x56,0x40,0x44,0x5a,0x41, 0x43,0x5b,0x3f,0x46,0x5b,0x42,0x48,0x5b,0x45,0x4a,0x5c,0x42,0x47,0x58,0x38,0x3e, 0x51,0x32,0x31,0x43,0x32,0x32,0x44,0x35,0x35,0x49,0x31,0x36,0x46,0x2c,0x31,0x3e, 0x25,0x29,0x35,0x1f,0x22,0x2c,0x1c,0x1f,0x28,0x20,0x24,0x2e,0x22,0x25,0x2f,0x23, 0x25,0x2f,0x1f,0x21,0x2c,0x1f,0x1f,0x29,0x1e,0x1d,0x26,0x1d,0x1c,0x26,0x1d,0x1b, 0x24,0x1c,0x1a,0x23,0x1c,0x1a,0x23,0x1a,0x19,0x21,0x15,0x14,0x1b,0x10,0x0f,0x16, 0x0e,0x0e,0x12,0x0d,0x0d,0x11,0x0c,0x0c,0x0f,0x0c,0x0b,0x0e,0x0a,0x0a,0x0d,0x0a, 0x0a,0x0d,0x0a,0x0a,0x0d,0x08,0x07,0x0a,0x08,0x08,0x0a,0x07,0x07,0x09,0x07,0x06, 0x09,0x06,0x06,0x07,0x06,0x06,0x07,0x06,0x06,0x09,0x12,0x13,0x16,0x1d,0x1e,0x21, 0x1d,0x1e,0x22,0x12,0x13,0x17,0x0e,0x0e,0x12,0x0e,0x0f,0x12,0x0c,0x0d,0x0f,0x05, 0x06,0x07,0x07,0x08,0x0a,0x0e,0x0e,0x11,0x14,0x15,0x17,0x12,0x13,0x14,0x06,0x06, 0x07,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x9f,0xa6,0xba,0x6a,0x75,0x9a,0x52,0x57,0x82,0x52,0x4f,0x7b,0x52,0x52, 0x7c,0x52,0x52,0x7c,0x52,0x52,0x7d,0x52,0x53,0x7d,0x52,0x53,0x7e,0x52,0x55,0x80, 0x52,0x55,0x80,0x52,0x55,0x81,0x52,0x55,0x81,0x58,0x5d,0x8b,0x21,0x22,0x35,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x04,0x06,0x06,0x08,0x09, 0x0a,0x0c,0x12,0x10,0x16,0x1f,0x1c,0x26,0x1d,0x1e,0x29,0x1e,0x20,0x26,0x20,0x22, 0x27,0x2e,0x30,0x36,0x39,0x3b,0x42,0x39,0x3d,0x46,0x3e,0x42,0x4e,0x32,0x36,0x47, 0x39,0x37,0x4a,0x3f,0x3f,0x56,0x45,0x44,0x5e,0x4b,0x53,0x6b,0x64,0x6b,0x81,0x73, 0x7a,0x8e,0x85,0x8a,0x9a,0x94,0x98,0xa4,0x89,0x8e,0x9c,0x7e,0x83,0x94,0x82,0x87, 0x96,0x89,0x8e,0x9c,0x6a,0x70,0x82,0x43,0x46,0x5e,0x46,0x45,0x5d,0x56,0x5b,0x75, 0x70,0x75,0x89,0x7a,0x7e,0x90,0x80,0x86,0x97,0x8c,0x92,0xa1,0x98,0x9d,0xa8,0x9e, 0xa2,0xad,0x9e,0xa2,0xac,0x97,0x9a,0xa6,0x94,0x99,0xa5,0x95,0x9a,0xa6,0x97,0x9c, 0xa9,0x95,0x9a,0xa6,0x93,0x98,0xa4,0x8e,0x94,0xa2,0x84,0x8a,0x99,0x72,0x78,0x8c, 0x62,0x6a,0x7f,0x61,0x68,0x7e,0x65,0x6c,0x82,0x6a,0x72,0x88,0x68,0x6f,0x87,0x66, 0x6e,0x85,0x5f,0x68,0x7f,0x59,0x61,0x7b,0x58,0x5e,0x78,0x5a,0x5b,0x76,0x5b,0x5b, 0x76,0x5f,0x5f,0x7a,0x66,0x68,0x7f,0x6e,0x72,0x8a,0x6e,0x6d,0x84,0x73,0x70,0x84, 0x77,0x74,0x86,0x73,0x70,0x85,0x66,0x64,0x7c,0x5b,0x52,0x6a,0x4e,0x46,0x5b,0x48, 0x42,0x53,0x46,0x3f,0x51,0x49,0x42,0x55,0x44,0x43,0x5c,0x5e,0x63,0x76,0x65,0x6a, 0x7b,0x78,0x7d,0x89,0x84,0x88,0x91,0xb4,0xb7,0xc5,0xb7,0xb2,0xbd,0x7a,0x7f,0x9b, 0x5c,0x64,0x83,0x51,0x59,0x75,0x49,0x4c,0x6b,0x4d,0x4d,0x67,0x51,0x52,0x6d,0x48, 0x4c,0x6c,0x4e,0x48,0x67,0x75,0x7e,0x97,0x7d,0x77,0x85,0x52,0x41,0x52,0x58,0x48, 0x59,0x56,0x45,0x55,0x57,0x46,0x57,0x57,0x46,0x56,0x2f,0x25,0x33,0x2e,0x24,0x31, 0x33,0x29,0x39,0x3f,0x42,0x58,0x4d,0x4b,0x6c,0x4f,0x4e,0x77,0x5e,0x51,0x75,0x55, 0x4f,0x77,0x51,0x56,0x81,0x52,0x5d,0x85,0x53,0x5f,0x88,0x54,0x5f,0x88,0x64,0x52, 0x72,0x77,0x82,0xa3,0xf0,0xf1,0xf5,0x4f,0x48,0x4c,0x2e,0x21,0x28,0x36,0x28,0x30, 0x35,0x27,0x2f,0x34,0x27,0x2f,0x51,0x3f,0x4e,0x26,0x25,0x33,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2d,0x2f,0x38,0x90,0x99,0xb4,0x52,0x4f, 0x7a,0x52,0x5c,0x85,0x5d,0x6a,0x90,0x5a,0x65,0x8c,0x5d,0x6a,0x8f,0x5c,0x67,0x8f, 0x5c,0x69,0x8f,0x5c,0x67,0x8e,0x5e,0x6a,0x91,0x5d,0x69,0x90,0x5d,0x68,0x90,0x5a, 0x66,0x8e,0x52,0x4f,0x79,0x53,0x5d,0x86,0x80,0x8b,0xa8,0x2e,0x2f,0x31,0x06,0x06, 0x07,0x07,0x08,0x09,0x08,0x09,0x0a,0x08,0x09,0x0a,0x08,0x09,0x0a,0x20,0x1b,0x22, 0x66,0x64,0x73,0xba,0xbd,0xc8,0xd4,0xd4,0xd9,0x93,0x97,0xa0,0x41,0x42,0x47,0x0a, 0x0b,0x0e,0x0b,0x0d,0x10,0x0c,0x0d,0x10,0x0c,0x0d,0x10,0x0c,0x0d,0x11,0x0c,0x0e, 0x12,0x0b,0x0c,0x0f,0x0b,0x0c,0x0f,0x41,0x37,0x45,0x5e,0x69,0x8d,0x94,0x9b,0xb0, 0x82,0x83,0x97,0x0b,0x0c,0x0e,0x15,0x16,0x1b,0x1c,0x1e,0x25,0x22,0x25,0x2b,0x23, 0x26,0x2d,0x27,0x2a,0x33,0x2a,0x2d,0x3a,0x29,0x2c,0x3a,0x2a,0x2a,0x39,0x30,0x2f, 0x41,0x3a,0x3a,0x4e,0x42,0x40,0x58,0x45,0x43,0x5b,0x46,0x45,0x5e,0x46,0x46,0x5f, 0x47,0x4a,0x64,0x47,0x4d,0x66,0x44,0x46,0x5f,0x3f,0x3f,0x56,0x3f,0x3e,0x56,0x3e, 0x3d,0x53,0x42,0x3d,0x52,0x49,0x41,0x54,0x4a,0x42,0x53,0x48,0x3e,0x4e,0x53,0x46, 0x58,0x5a,0x4a,0x5d,0x5b,0x4e,0x62,0x5a,0x50,0x68,0x4f,0x4e,0x69,0x4e,0x4c,0x67, 0x4e,0x4e,0x6a,0x4e,0x4e,0x6a,0x50,0x51,0x6e,0x51,0x58,0x75,0x56,0x5f,0x7a,0x61, 0x68,0x80,0x5a,0x5d,0x7a,0x59,0x5c,0x71,0x56,0x58,0x6d,0x6a,0x6c,0x79,0x73,0x73, 0x7f,0x68,0x68,0x72,0x98,0x9a,0xa3,0x9c,0xa0,0xac,0x96,0x9b,0xaa,0x88,0x8f,0x9f, 0x7d,0x83,0x97,0x80,0x86,0x9a,0x8a,0x91,0xa5,0x87,0x8e,0xa4,0x71,0x7a,0x95,0x5f, 0x68,0x88,0x66,0x5c,0x79,0x66,0x57,0x72,0x5e,0x48,0x61,0x4e,0x3c,0x52,0x5d,0x4c, 0x67,0x4a,0x4c,0x6d,0x1a,0x1c,0x24,0x1b,0x1e,0x26,0x19,0x1b,0x22,0x2a,0x29,0x39, 0x31,0x2e,0x43,0x30,0x2a,0x41,0x55,0x4c,0x6d,0x5a,0x51,0x74,0x5d,0x51,0x73,0x5d, 0x52,0x75,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e,0x53,0x75,0x5e,0x53,0x75,0x5e,0x51, 0x74,0x5a,0x51,0x74,0x58,0x50,0x72,0x58,0x51,0x71,0x4e,0x4e,0x70,0x56,0x61,0x80, 0x47,0x49,0x56,0x34,0x37,0x40,0x36,0x3a,0x45,0x36,0x3a,0x43,0x34,0x37,0x41,0x31, 0x33,0x3b,0x2a,0x2d,0x34,0x40,0x3b,0x47,0x57,0x55,0x68,0x4d,0x53,0x75,0x45,0x46, 0x65,0x47,0x47,0x66,0x4b,0x4c,0x6e,0x4a,0x4e,0x71,0x48,0x4d,0x6f,0x46,0x4c,0x6e, 0x43,0x4d,0x6e,0x44,0x4c,0x6e,0x3e,0x45,0x65,0x39,0x3f,0x5a,0x36,0x3b,0x55,0x33, 0x37,0x4d,0x2f,0x31,0x45,0x31,0x33,0x47,0x1e,0x1a,0x22,0x31,0x2b,0x38,0x46,0x3d, 0x4e,0x48,0x41,0x55,0x4c,0x47,0x5e,0x47,0x41,0x57,0x4f,0x47,0x5c,0x56,0x4b,0x62, 0x4f,0x49,0x60,0x4c,0x47,0x5f,0x45,0x41,0x58,0x3f,0x3d,0x54,0x40,0x3f,0x55,0x3f, 0x3f,0x56,0x45,0x4b,0x5e,0x6d,0x71,0x7d,0x5d,0x62,0x70,0x4d,0x53,0x66,0x42,0x48, 0x5e,0x41,0x44,0x5c,0x40,0x42,0x59,0x3e,0x3d,0x53,0x38,0x37,0x4b,0x35,0x36,0x48, 0x35,0x38,0x4a,0x3a,0x3a,0x4f,0x3d,0x3c,0x52,0x3a,0x3e,0x51,0x37,0x3d,0x4c,0x32, 0x37,0x45,0x28,0x2b,0x38,0x2a,0x2b,0x3a,0x31,0x31,0x42,0x33,0x36,0x47,0x35,0x39, 0x48,0x32,0x36,0x45,0x2e,0x32,0x41,0x2b,0x2f,0x3d,0x26,0x2a,0x36,0x29,0x2b,0x37, 0x2c,0x2e,0x39,0x2a,0x2b,0x37,0x27,0x27,0x32,0x22,0x22,0x2d,0x1f,0x1e,0x28,0x1e, 0x1d,0x26,0x1d,0x1c,0x25,0x1b,0x19,0x21,0x1b,0x19,0x22,0x1b,0x1a,0x22,0x18,0x17, 0x1e,0x10,0x0f,0x16,0x0e,0x0e,0x12,0x0d,0x0c,0x11,0x0d,0x0c,0x10,0x0c,0x0c,0x0f, 0x0a,0x0a,0x0e,0x0a,0x09,0x0c,0x0a,0x09,0x0c,0x08,0x08,0x0a,0x08,0x08,0x0a,0x08, 0x07,0x0a,0x07,0x07,0x09,0x06,0x06,0x08,0x06,0x06,0x07,0x06,0x06,0x07,0x09,0x0a, 0x0c,0x16,0x16,0x19,0x1d,0x1e,0x22,0x14,0x16,0x19,0x1a,0x1c,0x20,0x21,0x22,0x26, 0x16,0x17,0x1a,0x0d,0x0e,0x0f,0x10,0x12,0x14,0x16,0x16,0x1a,0x18,0x19,0x1a,0x0f, 0x10,0x11,0x04,0x04,0x05,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x65,0x6c,0x81,0x8b,0xab,0x53,0x5e,0x88,0x52, 0x50,0x7b,0x52,0x50,0x7b,0x52,0x50,0x7b,0x52,0x52,0x7c,0x52,0x52,0x7c,0x52,0x53, 0x7d,0x52,0x53,0x7e,0x52,0x54,0x7e,0x52,0x55,0x80,0x52,0x54,0x7e,0x53,0x56,0x82, 0x5e,0x61,0x94,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x03,0x03,0x02,0x03,0x05,0x05,0x06, 0x0c,0x0d,0x0e,0x11,0x12,0x14,0x11,0x12,0x16,0x17,0x19,0x1e,0x20,0x22,0x28,0x23, 0x25,0x2a,0x26,0x28,0x2e,0x34,0x37,0x41,0x42,0x46,0x4c,0x4d,0x50,0x58,0x3d,0x41, 0x4f,0x36,0x36,0x49,0x44,0x3e,0x52,0x40,0x3e,0x56,0x45,0x44,0x5d,0x51,0x58,0x6f, 0x69,0x6f,0x84,0x7a,0x80,0x91,0x92,0x96,0xa2,0x9b,0x9f,0xa7,0x88,0x8e,0x9b,0x76, 0x7e,0x90,0x74,0x7a,0x8d,0x5d,0x61,0x72,0x3c,0x3d,0x50,0x42,0x3f,0x54,0x46,0x42, 0x58,0x50,0x52,0x6e,0x62,0x68,0x7e,0x72,0x77,0x8a,0x76,0x7d,0x90,0x7e,0x84,0x96, 0x8e,0x93,0xa1,0x9d,0xa1,0xaa,0x9f,0xa2,0xac,0x9a,0x9e,0xa8,0x96,0x9a,0xa6,0x96, 0x9b,0xa8,0x97,0x9c,0xa9,0x97,0x9b,0xa8,0x9a,0x9e,0xa9,0x95,0x9a,0xa6,0x85,0x8a, 0x99,0x6d,0x73,0x86,0x63,0x6a,0x7e,0x62,0x6a,0x7e,0x69,0x70,0x84,0x70,0x77,0x8a, 0x6a,0x71,0x86,0x5e,0x66,0x7e,0x58,0x5e,0x78,0x58,0x5a,0x75,0x5a,0x5b,0x74,0x62, 0x60,0x78,0x64,0x62,0x7a,0x65,0x63,0x7b,0x62,0x63,0x7c,0x65,0x65,0x7d,0x71,0x70, 0x85,0x79,0x76,0x88,0x76,0x76,0x89,0x72,0x70,0x85,0x6d,0x67,0x7c,0x54,0x4d,0x62, 0x48,0x41,0x53,0x46,0x40,0x52,0x49,0x42,0x57,0x45,0x44,0x5d,0x45,0x49,0x5f,0x55, 0x5a,0x6b,0x65,0x69,0x78,0x73,0x78,0x84,0x76,0x7a,0x85,0x9c,0x9f,0xb2,0xb7,0xb2, 0xbb,0x92,0x97,0xad,0x57,0x56,0x78,0x4c,0x4f,0x6e,0x4a,0x4f,0x6f,0x50,0x50,0x6c, 0x4d,0x4d,0x68,0x4a,0x51,0x70,0x4f,0x47,0x67,0x5d,0x66,0x85,0x9e,0x9f,0xaf,0x4f, 0x3f,0x4f,0x58,0x46,0x57,0x57,0x46,0x56,0x55,0x44,0x54,0x52,0x42,0x51,0x30,0x26, 0x32,0x27,0x1e,0x29,0x2a,0x1f,0x2c,0x36,0x2a,0x3b,0x53,0x53,0x77,0x50,0x4e,0x7a, 0x5b,0x51,0x77,0x63,0x52,0x75,0x51,0x4f,0x7a,0x52,0x5c,0x85,0x52,0x5d,0x85,0x55, 0x60,0x89,0x64,0x52,0x72,0x5e,0x6b,0x91,0xf0,0xf1,0xf6,0x6f,0x6b,0x70,0x29,0x1e, 0x24,0x37,0x29,0x32,0x37,0x29,0x32,0x34,0x26,0x2e,0x49,0x38,0x45,0x42,0x3a,0x4a, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x06,0x07,0x89, 0x93,0xab,0x5c,0x67,0x90,0x56,0x50,0x79,0x60,0x6c,0x92,0x5d,0x6a,0x90,0x5c,0x67, 0x8f,0x5c,0x67,0x8f,0x5c,0x67,0x8f,0x5c,0x67,0x8f,0x5c,0x69,0x8e,0x5b,0x66,0x8d, 0x5b,0x65,0x8d,0x5b,0x65,0x8d,0x51,0x55,0x7e,0x54,0x50,0x78,0x6a,0x74,0x98,0x7b, 0x7c,0x7f,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x07,0x08,0x07,0x07,0x09,0x07,0x08, 0x0a,0x35,0x2c,0x37,0x56,0x52,0x5f,0x9e,0xa2,0xb1,0xab,0xac,0xb6,0xac,0xad,0xb7, 0xc1,0xc0,0xc9,0x9a,0x99,0xa2,0x18,0x17,0x1c,0x0a,0x0c,0x0e,0x0a,0x0b,0x0e,0x0a, 0x0b,0x0e,0x0b,0x0c,0x10,0x0a,0x0c,0x0f,0x0a,0x0a,0x0e,0x2e,0x27,0x30,0x50,0x57, 0x7b,0x95,0x9d,0xb4,0x96,0x9e,0xb4,0x20,0x1d,0x24,0x10,0x12,0x15,0x19,0x1a,0x20, 0x42,0x44,0x48,0x43,0x44,0x49,0x34,0x37,0x3d,0x2f,0x31,0x39,0x25,0x28,0x32,0x26, 0x2a,0x36,0x28,0x2b,0x3a,0x31,0x31,0x42,0x39,0x38,0x4d,0x3e,0x3d,0x53,0x42,0x40, 0x58,0x45,0x44,0x5d,0x47,0x47,0x60,0x47,0x4a,0x64,0x46,0x49,0x63,0x44,0x45,0x5d, 0x45,0x45,0x5e,0x45,0x45,0x5e,0x44,0x43,0x5b,0x42,0x42,0x58,0x49,0x42,0x56,0x4b, 0x42,0x55,0x45,0x3b,0x4b,0x54,0x47,0x5a,0x5a,0x4e,0x64,0x57,0x4e,0x66,0x52,0x4d, 0x66,0x4e,0x4b,0x66,0x4e,0x4d,0x68,0x4f,0x4e,0x6a,0x50,0x4e,0x6b,0x51,0x50,0x6e, 0x54,0x5c,0x78,0x66,0x6e,0x85,0x7b,0x7e,0x93,0x62,0x66,0x79,0x53,0x55,0x66,0x5e, 0x5e,0x6c,0x68,0x68,0x72,0x67,0x67,0x72,0x94,0x98,0xa4,0x85,0x8c,0x9d,0x6e,0x76, 0x8e,0x6f,0x78,0x8e,0x77,0x7d,0x92,0x86,0x8b,0x9f,0x90,0x96,0xa9,0x87,0x8e,0xa3, 0x6c,0x74,0x8f,0x4f,0x59,0x7b,0x5d,0x55,0x75,0x79,0x6c,0x84,0x7a,0x68,0x7d,0x5e, 0x4b,0x61,0x5b,0x4a,0x65,0x4a,0x4a,0x6c,0x19,0x1b,0x22,0x1a,0x1d,0x24,0x1a,0x1b, 0x22,0x2a,0x29,0x37,0x31,0x2e,0x44,0x30,0x2b,0x41,0x54,0x4c,0x6d,0x5c,0x52,0x73, 0x5b,0x52,0x75,0x5d,0x52,0x75,0x5e,0x52,0x75,0x5e,0x51,0x75,0x5e,0x53,0x75,0x5e, 0x53,0x75,0x5c,0x52,0x77,0x5d,0x52,0x75,0x5b,0x52,0x74,0x5b,0x54,0x74,0x55,0x54, 0x76,0x60,0x6b,0x88,0x4f,0x51,0x5d,0x31,0x34,0x3d,0x33,0x36,0x3e,0x32,0x34,0x3d, 0x2f,0x32,0x3a,0x2b,0x2e,0x36,0x25,0x27,0x2e,0x3c,0x37,0x42,0x5a,0x56,0x69,0x4e, 0x58,0x7b,0x46,0x47,0x65,0x47,0x48,0x66,0x4d,0x4f,0x71,0x4c,0x4f,0x73,0x4c,0x51, 0x76,0x4b,0x53,0x77,0x49,0x53,0x77,0x49,0x53,0x77,0x46,0x4f,0x72,0x40,0x48,0x67, 0x3b,0x41,0x5d,0x37,0x3c,0x55,0x35,0x3a,0x50,0x37,0x3b,0x51,0x21,0x20,0x2b,0x2c, 0x27,0x32,0x39,0x35,0x46,0x3f,0x3b,0x4e,0x48,0x41,0x54,0x49,0x40,0x53,0x56,0x4b, 0x60,0x55,0x4a,0x61,0x4c,0x47,0x5e,0x48,0x46,0x5e,0x49,0x46,0x5e,0x45,0x43,0x5b, 0x41,0x42,0x59,0x3e,0x43,0x59,0x59,0x5e,0x6d,0x84,0x87,0x90,0x67,0x6b,0x79,0x42, 0x49,0x5d,0x42,0x42,0x5a,0x41,0x42,0x5a,0x3e,0x42,0x57,0x3b,0x41,0x55,0x3c,0x42, 0x54,0x39,0x3f,0x4f,0x2e,0x32,0x43,0x29,0x2a,0x38,0x2d,0x2d,0x3d,0x29,0x2c,0x3a, 0x2b,0x2f,0x3b,0x31,0x33,0x40,0x31,0x32,0x40,0x34,0x35,0x45,0x34,0x36,0x45,0x35, 0x36,0x46,0x38,0x3a,0x48,0x36,0x39,0x46,0x34,0x36,0x44,0x2f,0x32,0x3f,0x2b,0x2d, 0x3a,0x2d,0x2d,0x3a,0x2f,0x2f,0x3c,0x2e,0x2e,0x3a,0x2a,0x29,0x35,0x27,0x26,0x31, 0x26,0x24,0x2f,0x23,0x21,0x2c,0x21,0x1f,0x29,0x1b,0x1a,0x22,0x1a,0x18,0x20,0x1b, 0x19,0x21,0x18,0x17,0x1f,0x10,0x0f,0x15,0x0d,0x0d,0x12,0x0d,0x0d,0x11,0x0c,0x0b, 0x0f,0x0b,0x0b,0x0e,0x0a,0x0a,0x0d,0x0a,0x0a,0x0d,0x0a,0x09,0x0c,0x08,0x08,0x0a, 0x08,0x07,0x0a,0x08,0x07,0x0a,0x06,0x06,0x08,0x06,0x06,0x08,0x06,0x06,0x07,0x06, 0x05,0x06,0x06,0x06,0x08,0x0b,0x0c,0x0e,0x0e,0x0f,0x12,0x0d,0x0e,0x10,0x1b,0x1c, 0x1e,0x1e,0x1f,0x22,0x1c,0x1d,0x1f,0x16,0x17,0x1a,0x17,0x19,0x1b,0x18,0x19,0x1b, 0x12,0x13,0x15,0x08,0x09,0x0a,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x25,0x26,0x27,0xa4,0xac,0xc2, 0x5a,0x65,0x8e,0x52,0x50,0x7b,0x52,0x4f,0x7b,0x52,0x50,0x7b,0x52,0x50,0x7b,0x52, 0x52,0x7c,0x52,0x52,0x7c,0x52,0x52,0x7d,0x52,0x53,0x7d,0x52,0x53,0x7e,0x52,0x54, 0x7e,0x52,0x54,0x7e,0x5d,0x5f,0x91,0x07,0x07,0x0a,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x03,0x04,0x03,0x04,0x05,0x04, 0x06,0x0a,0x0a,0x0d,0x11,0x12,0x14,0x15,0x16,0x19,0x17,0x18,0x1c,0x17,0x19,0x1d, 0x21,0x22,0x27,0x2a,0x2c,0x31,0x3b,0x3e,0x49,0x4e,0x52,0x5b,0x58,0x5b,0x64,0x5e, 0x61,0x6d,0x41,0x46,0x59,0x3f,0x3e,0x54,0x48,0x42,0x55,0x4a,0x42,0x58,0x45,0x44, 0x5e,0x56,0x5e,0x74,0x6e,0x74,0x86,0x83,0x88,0x96,0x96,0x9a,0xa3,0xa2,0xa3,0xab, 0x8f,0x93,0xa0,0x79,0x7e,0x8f,0x5b,0x5f,0x74,0x3b,0x3a,0x4e,0x41,0x3d,0x4f,0x48, 0x43,0x59,0x53,0x4f,0x6a,0x4f,0x4e,0x6a,0x52,0x5a,0x72,0x65,0x6c,0x80,0x6e,0x75, 0x89,0x74,0x7b,0x8f,0x82,0x87,0x97,0x92,0x97,0xa4,0x9a,0x9e,0xa9,0x9a,0x9e,0xa9, 0x98,0x9c,0xa9,0x95,0x99,0xa6,0x96,0x9b,0xa8,0x99,0x9d,0xa9,0x9a,0x9e,0xaa,0x93, 0x97,0xa4,0x7f,0x86,0x94,0x66,0x6d,0x80,0x5d,0x64,0x77,0x5a,0x60,0x74,0x5c,0x63, 0x76,0x60,0x67,0x7c,0x5c,0x63,0x7a,0x55,0x5c,0x72,0x56,0x56,0x6e,0x5e,0x5e,0x73, 0x64,0x62,0x79,0x62,0x62,0x7a,0x62,0x62,0x7a,0x62,0x62,0x7a,0x5f,0x61,0x7a,0x6a, 0x66,0x7c,0x75,0x73,0x86,0x76,0x76,0x8a,0x74,0x72,0x87,0x76,0x71,0x84,0x69,0x63, 0x77,0x58,0x4f,0x67,0x4a,0x46,0x5c,0x43,0x42,0x59,0x3f,0x3e,0x54,0x4a,0x4e,0x63, 0x60,0x63,0x75,0x7a,0x7e,0x8a,0x67,0x6a,0x76,0x5d,0x60,0x6e,0x49,0x4e,0x5f,0x5a, 0x60,0x80,0x7f,0x7d,0x93,0x85,0x8a,0xa4,0x60,0x67,0x89,0x53,0x53,0x73,0x49,0x4d, 0x6b,0x50,0x50,0x6d,0x52,0x52,0x6f,0x4e,0x53,0x72,0x4a,0x46,0x67,0x4c,0x55,0x78, 0x9a,0x9f,0xb3,0x62,0x56,0x63,0x58,0x46,0x58,0x56,0x45,0x56,0x54,0x43,0x53,0x53, 0x41,0x51,0x3c,0x2f,0x3c,0x26,0x1c,0x28,0x25,0x1c,0x26,0x29,0x1e,0x2b,0x57,0x4c, 0x6c,0x50,0x4d,0x79,0x5c,0x51,0x77,0x63,0x52,0x73,0x52,0x4f,0x7a,0x52,0x5a,0x83, 0x52,0x5d,0x85,0x55,0x60,0x89,0x63,0x53,0x77,0x52,0x55,0x80,0xe6,0xe7,0xee,0x90, 0x8d,0x93,0x25,0x1a,0x1f,0x35,0x27,0x30,0x38,0x29,0x32,0x35,0x27,0x2f,0x40,0x30, 0x3b,0x52,0x43,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x4f,0x54,0x63,0x7b,0x86,0xa7,0x5a,0x52,0x79,0x63,0x6f,0x94,0x63, 0x6e,0x94,0x5d,0x6a,0x90,0x5d,0x6a,0x8f,0x5a,0x66,0x8d,0x5b,0x66,0x8d,0x5b,0x66, 0x8c,0x58,0x64,0x8a,0x58,0x63,0x8c,0x56,0x61,0x8a,0x4e,0x58,0x7f,0x3e,0x35,0x51, 0x33,0x38,0x53,0x61,0x60,0x6e,0x05,0x05,0x06,0x05,0x05,0x06,0x06,0x06,0x06,0x06, 0x06,0x08,0x08,0x08,0x0a,0x34,0x2c,0x36,0x7d,0x7e,0x8e,0x93,0x99,0xaa,0x2c,0x25, 0x2d,0x4a,0x42,0x4c,0xad,0xac,0xb8,0xd1,0xd4,0xd9,0xbb,0xbd,0xc7,0x82,0x83,0x8e, 0x0a,0x0b,0x0e,0x0a,0x0b,0x0e,0x0a,0x0b,0x0e,0x0a,0x0a,0x0e,0x0a,0x0b,0x0e,0x10, 0x0f,0x13,0x55,0x4e,0x67,0x8c,0x94,0xae,0x9b,0xa2,0xb8,0x54,0x4b,0x5a,0x0e,0x0e, 0x12,0x16,0x17,0x1c,0x1e,0x20,0x25,0x3d,0x3e,0x44,0x30,0x33,0x39,0x4a,0x4c,0x51, 0x1d,0x1e,0x26,0x1e,0x20,0x29,0x22,0x25,0x2f,0x27,0x2b,0x38,0x2e,0x32,0x42,0x37, 0x37,0x4b,0x3e,0x3d,0x53,0x40,0x3e,0x56,0x41,0x40,0x57,0x42,0x43,0x5b,0x43,0x46, 0x5e,0x44,0x46,0x5f,0x46,0x4a,0x62,0x47,0x49,0x63,0x49,0x4a,0x65,0x4a,0x49,0x63, 0x46,0x45,0x5e,0x47,0x43,0x5a,0x4c,0x44,0x59,0x48,0x3f,0x4f,0x50,0x45,0x59,0x55, 0x4c,0x63,0x52,0x4c,0x65,0x52,0x4c,0x66,0x52,0x4e,0x67,0x52,0x4e,0x69,0x52,0x4e, 0x6a,0x4f,0x4e,0x6a,0x50,0x57,0x72,0x62,0x6a,0x82,0x7c,0x80,0x94,0x7b,0x7c,0x8d, 0x63,0x65,0x74,0x53,0x53,0x5f,0x58,0x58,0x60,0x59,0x59,0x62,0x8c,0x8f,0x9e,0x74, 0x77,0x90,0x5e,0x60,0x7d,0x56,0x59,0x7a,0x7a,0x80,0x96,0x8b,0x92,0xa5,0x8a,0x90, 0xa4,0x7b,0x82,0x99,0x65,0x6d,0x88,0x4d,0x56,0x79,0x58,0x52,0x74,0x7f,0x74,0x8b, 0x85,0x76,0x89,0x66,0x55,0x69,0x5f,0x4c,0x65,0x49,0x49,0x6a,0x18,0x1a,0x21,0x1a, 0x1c,0x22,0x18,0x1a,0x21,0x2a,0x28,0x36,0x30,0x2e,0x44,0x30,0x2b,0x41,0x53,0x4b, 0x6b,0x5a,0x51,0x73,0x5d,0x51,0x73,0x5d,0x52,0x75,0x5e,0x52,0x75,0x5e,0x51,0x75, 0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e,0x53,0x75,0x5e,0x53,0x75,0x5e,0x53,0x75,0x5c, 0x55,0x77,0x57,0x56,0x79,0x60,0x6a,0x8a,0x4d,0x4f,0x5b,0x2e,0x31,0x3a,0x2e,0x31, 0x3a,0x2b,0x2e,0x36,0x28,0x2a,0x32,0x26,0x28,0x2f,0x20,0x22,0x29,0x37,0x33,0x3d, 0x5d,0x58,0x6a,0x52,0x5b,0x7f,0x46,0x46,0x65,0x46,0x46,0x65,0x4f,0x4f,0x75,0x4f, 0x51,0x77,0x4f,0x51,0x77,0x4e,0x52,0x79,0x4d,0x56,0x7d,0x4c,0x57,0x7e,0x4d,0x56, 0x7c,0x49,0x51,0x76,0x46,0x4e,0x6f,0x43,0x4c,0x6b,0x44,0x4a,0x67,0x41,0x44,0x5d, 0x2e,0x2f,0x3f,0x1e,0x1e,0x29,0x2c,0x2c,0x3b,0x37,0x36,0x4a,0x3b,0x35,0x47,0x48, 0x40,0x54,0x51,0x49,0x5f,0x47,0x45,0x5c,0x42,0x43,0x5b,0x40,0x44,0x5b,0x41,0x43, 0x5a,0x3e,0x43,0x59,0x40,0x46,0x5a,0x53,0x57,0x66,0x6a,0x6e,0x7a,0x67,0x6a,0x76, 0x45,0x4a,0x5c,0x3e,0x40,0x56,0x42,0x41,0x58,0x40,0x40,0x57,0x3f,0x45,0x59,0x48, 0x4d,0x5b,0x62,0x64,0x6e,0x5a,0x5d,0x67,0x3c,0x41,0x50,0x32,0x36,0x46,0x29,0x2c, 0x3a,0x2a,0x2c,0x39,0x30,0x31,0x3f,0x35,0x35,0x44,0x35,0x35,0x44,0x35,0x35,0x44, 0x34,0x34,0x43,0x33,0x34,0x43,0x35,0x36,0x44,0x35,0x36,0x45,0x33,0x34,0x42,0x32, 0x32,0x3f,0x2f,0x2e,0x3b,0x2c,0x2b,0x37,0x2c,0x2b,0x37,0x2a,0x29,0x35,0x29,0x27, 0x34,0x27,0x25,0x30,0x26,0x24,0x2f,0x25,0x23,0x2d,0x24,0x21,0x2c,0x1e,0x1d,0x25, 0x19,0x17,0x1e,0x18,0x16,0x1d,0x13,0x12,0x18,0x0d,0x0d,0x12,0x0b,0x0b,0x0f,0x0b, 0x0b,0x0f,0x0a,0x0a,0x0e,0x0a,0x09,0x0d,0x0a,0x0a,0x0d,0x0a,0x09,0x0c,0x09,0x09, 0x0b,0x09,0x08,0x0b,0x08,0x07,0x0a,0x07,0x07,0x09,0x06,0x06,0x08,0x06,0x06,0x08, 0x06,0x06,0x07,0x06,0x05,0x06,0x05,0x05,0x06,0x06,0x05,0x07,0x06,0x05,0x07,0x07, 0x08,0x0a,0x10,0x11,0x12,0x0e,0x0e,0x0f,0x0e,0x0e,0x0f,0x0f,0x10,0x12,0x12,0x12, 0x14,0x10,0x10,0x12,0x09,0x0a,0x0a,0x03,0x03,0x04,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x05, 0x06,0xbe,0xc3,0xd3,0x66,0x73,0x98,0x52,0x50,0x7b,0x52,0x4f,0x7a,0x52,0x4f,0x7a, 0x52,0x4f,0x7b,0x52,0x50,0x7b,0x52,0x50,0x7b,0x52,0x52,0x7c,0x52,0x52,0x7c,0x52, 0x53,0x7d,0x52,0x53,0x7d,0x52,0x53,0x7d,0x55,0x56,0x81,0x31,0x32,0x4c,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x03,0x05,0x04,0x05,0x06, 0x04,0x06,0x09,0x07,0x0a,0x0b,0x0c,0x10,0x12,0x13,0x16,0x16,0x18,0x1c,0x1d,0x1e, 0x22,0x21,0x22,0x26,0x28,0x2a,0x2e,0x38,0x3a,0x43,0x50,0x54,0x60,0x5b,0x5e,0x69, 0x64,0x68,0x72,0x65,0x69,0x74,0x4d,0x52,0x64,0x41,0x42,0x58,0x42,0x41,0x57,0x43, 0x41,0x56,0x47,0x4e,0x66,0x66,0x6d,0x7e,0x81,0x86,0x93,0x86,0x8b,0x99,0x8e,0x92, 0x9e,0x98,0x9b,0xa5,0x8d,0x92,0x9d,0x70,0x75,0x86,0x40,0x42,0x58,0x40,0x3e,0x4f, 0x52,0x4e,0x68,0x52,0x4e,0x67,0x56,0x52,0x6b,0x4e,0x4e,0x68,0x4a,0x4e,0x69,0x53, 0x5a,0x72,0x62,0x69,0x7f,0x6c,0x73,0x89,0x75,0x7b,0x8f,0x80,0x86,0x96,0x8a,0x90, 0x9f,0x93,0x98,0xa6,0x96,0x9a,0xa7,0x95,0x9a,0xa7,0x92,0x97,0xa5,0x94,0x99,0xa6, 0x94,0x99,0xa5,0x8f,0x94,0xa1,0x7e,0x84,0x93,0x6a,0x70,0x81,0x5c,0x63,0x76,0x56, 0x5c,0x6e,0x58,0x5e,0x72,0x58,0x5e,0x73,0x56,0x5e,0x73,0x51,0x59,0x6f,0x59,0x5a, 0x72,0x62,0x62,0x77,0x63,0x65,0x7d,0x66,0x6a,0x82,0x67,0x6a,0x82,0x66,0x6b,0x84, 0x65,0x66,0x7e,0x66,0x68,0x7e,0x6d,0x6e,0x84,0x71,0x72,0x87,0x6f,0x6e,0x83,0x6d, 0x67,0x7d,0x64,0x5d,0x74,0x54,0x4e,0x67,0x42,0x3f,0x53,0x3d,0x38,0x49,0x38,0x35, 0x47,0x3a,0x39,0x4d,0x47,0x4a,0x61,0x6a,0x6e,0x7b,0x7f,0x82,0x8c,0x6e,0x70,0x7a, 0x53,0x57,0x65,0x45,0x48,0x64,0x57,0x50,0x6c,0x5d,0x61,0x83,0x81,0x86,0x9f,0x5a, 0x61,0x82,0x50,0x56,0x76,0x49,0x4c,0x6a,0x51,0x51,0x6b,0x52,0x54,0x71,0x47,0x4d, 0x6e,0x4c,0x48,0x6b,0x83,0x89,0xa4,0x86,0x81,0x8f,0x55,0x44,0x55,0x56,0x45,0x56, 0x54,0x43,0x54,0x53,0x41,0x51,0x44,0x35,0x43,0x26,0x1c,0x26,0x24,0x1b,0x25,0x26, 0x1c,0x27,0x46,0x3c,0x55,0x51,0x4e,0x79,0x5d,0x52,0x78,0x63,0x4f,0x6d,0x52,0x50, 0x7b,0x52,0x5b,0x84,0x52,0x5c,0x85,0x53,0x5f,0x88,0x55,0x50,0x79,0x58,0x50,0x79, 0xcc,0xd1,0xde,0xb6,0xb5,0xba,0x21,0x17,0x1b,0x35,0x27,0x2f,0x39,0x2a,0x33,0x37, 0x29,0x32,0x40,0x30,0x3b,0x5c,0x4a,0x5c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2c,0x2e,0x36,0x8e,0x98,0xb3,0x52,0x5a,0x84, 0x56,0x63,0x8a,0x6b,0x76,0x9a,0x64,0x6f,0x94,0x5f,0x6c,0x92,0x5b,0x66,0x8d,0x5a, 0x66,0x8d,0x57,0x64,0x8b,0x56,0x62,0x89,0x54,0x60,0x88,0x3c,0x43,0x64,0x29,0x2c, 0x45,0x2a,0x24,0x3d,0x28,0x24,0x3d,0x3f,0x40,0x56,0x33,0x34,0x34,0x04,0x05,0x06, 0x04,0x05,0x06,0x05,0x06,0x06,0x0e,0x0d,0x0f,0x34,0x2b,0x35,0x93,0x99,0xae,0x8e, 0x94,0xa7,0x29,0x21,0x29,0x33,0x29,0x30,0x35,0x2a,0x33,0x99,0x96,0x9f,0xcb,0xcb, 0xd2,0xc4,0xc6,0xd0,0x9f,0xa1,0xae,0x2f,0x32,0x38,0x0a,0x0a,0x0d,0x09,0x0a,0x0d, 0x0a,0x0a,0x0e,0x0b,0x0c,0x0f,0x35,0x2e,0x3b,0x74,0x7f,0x9e,0x9c,0xa2,0xb9,0x83, 0x83,0x96,0x0d,0x0e,0x11,0x15,0x16,0x1b,0x1b,0x1e,0x23,0x1e,0x20,0x26,0x1e,0x21, 0x26,0x3c,0x3e,0x43,0x24,0x26,0x2b,0x16,0x18,0x1e,0x17,0x19,0x20,0x1d,0x20,0x28, 0x25,0x28,0x34,0x2e,0x32,0x42,0x39,0x3e,0x52,0x3e,0x42,0x58,0x3d,0x43,0x58,0x3d, 0x42,0x56,0x3b,0x3f,0x55,0x3e,0x3e,0x54,0x40,0x40,0x57,0x41,0x42,0x59,0x45,0x47, 0x60,0x49,0x4a,0x65,0x4a,0x4a,0x65,0x47,0x46,0x60,0x45,0x43,0x5b,0x46,0x3f,0x52, 0x41,0x3a,0x4b,0x47,0x40,0x54,0x42,0x3d,0x53,0x45,0x42,0x59,0x4e,0x4b,0x64,0x4e, 0x4b,0x64,0x4f,0x4c,0x65,0x4f,0x4c,0x66,0x4a,0x4b,0x66,0x61,0x68,0x7d,0x7e,0x80, 0x92,0x85,0x86,0x93,0x79,0x7a,0x86,0x5f,0x5e,0x69,0x52,0x50,0x58,0x4c,0x4a,0x51, 0x84,0x87,0x94,0x73,0x76,0x8e,0x62,0x60,0x7b,0x59,0x5c,0x7b,0x6c,0x74,0x8e,0x86, 0x8d,0xa1,0x84,0x8b,0xa0,0x76,0x7e,0x96,0x69,0x71,0x8c,0x60,0x69,0x87,0x66,0x62, 0x80,0x7d,0x72,0x8c,0x90,0x83,0x94,0x6e,0x5d,0x71,0x5f,0x50,0x67,0x46,0x47,0x68, 0x16,0x19,0x1f,0x19,0x1b,0x22,0x18,0x1a,0x21,0x28,0x27,0x33,0x30,0x2d,0x44,0x2e, 0x2a,0x40,0x51,0x49,0x68,0x59,0x50,0x73,0x5d,0x51,0x73,0x5d,0x51,0x74,0x5e,0x52, 0x75,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e,0x52,0x75, 0x5c,0x53,0x77,0x5d,0x55,0x77,0x56,0x56,0x78,0x5f,0x69,0x8a,0x50,0x51,0x5f,0x28, 0x2b,0x33,0x29,0x2b,0x34,0x2a,0x2c,0x34,0x26,0x29,0x30,0x22,0x24,0x2b,0x1e,0x21, 0x26,0x33,0x2f,0x38,0x5e,0x56,0x69,0x51,0x5b,0x7e,0x47,0x48,0x66,0x44,0x42,0x63, 0x4e,0x4d,0x74,0x50,0x50,0x78,0x50,0x51,0x7a,0x50,0x55,0x7d,0x50,0x55,0x7e,0x4f, 0x58,0x7f,0x4e,0x58,0x81,0x4e,0x58,0x80,0x4d,0x57,0x7c,0x4a,0x55,0x78,0x49,0x52, 0x74,0x49,0x51,0x70,0x28,0x2e,0x3f,0x1c,0x1e,0x26,0x2a,0x2e,0x3a,0x36,0x36,0x4a, 0x41,0x3e,0x53,0x48,0x43,0x59,0x46,0x43,0x5a,0x40,0x42,0x59,0x45,0x4a,0x5c,0x47, 0x4d,0x5c,0x52,0x57,0x68,0x40,0x45,0x53,0x4e,0x53,0x60,0x5f,0x63,0x6e,0x48,0x4c, 0x5a,0x41,0x46,0x55,0x3e,0x43,0x55,0x3d,0x3d,0x52,0x42,0x41,0x58,0x40,0x41,0x57, 0x46,0x4a,0x5c,0x6a,0x6c,0x74,0x72,0x74,0x7a,0x56,0x59,0x62,0x41,0x45,0x50,0x38, 0x3c,0x4a,0x34,0x36,0x44,0x35,0x35,0x43,0x34,0x34,0x42,0x34,0x35,0x44,0x34,0x34, 0x43,0x32,0x32,0x40,0x31,0x31,0x3f,0x30,0x31,0x3e,0x32,0x33,0x41,0x34,0x35,0x43, 0x33,0x32,0x40,0x32,0x31,0x3e,0x2d,0x2c,0x39,0x2a,0x2a,0x36,0x2a,0x28,0x35,0x29, 0x28,0x34,0x28,0x26,0x32,0x27,0x25,0x30,0x26,0x24,0x2e,0x25,0x23,0x2e,0x25,0x22, 0x2d,0x20,0x1e,0x27,0x1a,0x18,0x20,0x17,0x16,0x1c,0x11,0x10,0x16,0x0d,0x0c,0x11, 0x0c,0x0c,0x10,0x0b,0x0b,0x0e,0x0a,0x0a,0x0d,0x09,0x09,0x0c,0x09,0x09,0x0b,0x08, 0x08,0x0a,0x07,0x07,0x09,0x08,0x07,0x0a,0x08,0x07,0x0a,0x07,0x06,0x09,0x06,0x06, 0x08,0x06,0x06,0x08,0x06,0x06,0x08,0x06,0x05,0x07,0x05,0x05,0x06,0x05,0x05,0x06, 0x05,0x04,0x06,0x04,0x04,0x06,0x05,0x06,0x07,0x03,0x03,0x05,0x04,0x05,0x06,0x05, 0x06,0x06,0x06,0x07,0x08,0x06,0x06,0x07,0x03,0x03,0x04,0x02,0x02,0x03,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x99,0x9e,0xa9,0x72,0x7d,0xa0,0x52,0x53,0x7e,0x52,0x4f, 0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7b,0x52,0x4f,0x7b,0x52,0x4f,0x7b,0x52,0x50,0x7b, 0x52,0x52,0x7c,0x52,0x52,0x7c,0x52,0x52,0x7c,0x52,0x52,0x7c,0x52,0x52,0x7d,0x64, 0x64,0x98,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02, 0x05,0x03,0x04,0x05,0x04,0x04,0x0b,0x09,0x0b,0x0e,0x0d,0x10,0x0c,0x0e,0x12,0x17, 0x19,0x1e,0x1f,0x21,0x26,0x26,0x29,0x2d,0x32,0x34,0x3a,0x4c,0x50,0x5b,0x5c,0x61, 0x6b,0x66,0x6a,0x75,0x6d,0x71,0x7a,0x65,0x69,0x72,0x4f,0x56,0x67,0x42,0x46,0x5d, 0x43,0x43,0x5b,0x43,0x43,0x5b,0x58,0x5e,0x71,0x84,0x88,0x92,0x98,0x9b,0xa3,0x8b, 0x8f,0x9b,0x83,0x88,0x96,0x87,0x8c,0x99,0x7a,0x7e,0x8e,0x55,0x59,0x6e,0x43,0x44, 0x59,0x4b,0x4c,0x63,0x52,0x52,0x6e,0x52,0x52,0x6e,0x54,0x51,0x6a,0x56,0x4e,0x66, 0x4d,0x4a,0x64,0x4a,0x4a,0x66,0x4c,0x53,0x6e,0x57,0x60,0x7a,0x66,0x6e,0x85,0x6e, 0x76,0x8a,0x7a,0x81,0x93,0x87,0x8d,0x9d,0x8e,0x92,0xa2,0x91,0x96,0xa4,0x92,0x98, 0xa6,0x90,0x96,0xa3,0x90,0x95,0xa2,0x8c,0x92,0x9e,0x82,0x88,0x96,0x71,0x76,0x86, 0x60,0x66,0x78,0x57,0x5d,0x6f,0x52,0x5a,0x6e,0x52,0x5a,0x6e,0x4f,0x57,0x6e,0x51, 0x58,0x6f,0x5d,0x5e,0x77,0x65,0x6a,0x81,0x69,0x71,0x87,0x6a,0x71,0x88,0x6a,0x70, 0x87,0x68,0x6e,0x86,0x68,0x6d,0x84,0x69,0x6c,0x84,0x6e,0x6f,0x86,0x6e,0x6f,0x86, 0x67,0x67,0x7f,0x62,0x5f,0x76,0x57,0x53,0x6e,0x4c,0x46,0x5b,0x42,0x3c,0x4d,0x3a, 0x34,0x44,0x37,0x36,0x47,0x3e,0x3c,0x50,0x3e,0x3c,0x51,0x3d,0x3f,0x55,0x62,0x65, 0x73,0x9b,0x9d,0xa2,0x8a,0x8b,0x91,0x74,0x73,0x85,0x56,0x53,0x68,0x63,0x69,0x87, 0x8e,0x91,0xa7,0x7d,0x81,0x98,0x5c,0x64,0x81,0x49,0x51,0x71,0x4d,0x4d,0x6a,0x4f, 0x4f,0x6d,0x4c,0x53,0x73,0x4f,0x49,0x6b,0x67,0x70,0x90,0xa5,0xa7,0xb6,0x4f,0x3d, 0x4d,0x58,0x45,0x56,0x56,0x43,0x54,0x52,0x40,0x4f,0x4e,0x3e,0x4b,0x24,0x1b,0x25, 0x24,0x1a,0x24,0x24,0x1a,0x24,0x3a,0x2f,0x44,0x51,0x4e,0x79,0x5a,0x51,0x78,0x64, 0x53,0x75,0x52,0x4f,0x7a,0x52,0x57,0x82,0x52,0x5b,0x84,0x53,0x5e,0x87,0x52,0x50, 0x7b,0x5f,0x53,0x77,0xad,0xb4,0xc9,0xd7,0xd8,0xdf,0x20,0x16,0x1a,0x34,0x27,0x2f, 0x3b,0x2c,0x36,0x38,0x29,0x32,0x3c,0x2e,0x38,0x60,0x4d,0x5f,0x06,0x05,0x06,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x06,0x07,0x93,0x9b, 0xb3,0x64,0x71,0x96,0x52,0x4f,0x7a,0x6a,0x76,0x99,0x69,0x75,0x99,0x60,0x6d,0x93, 0x5c,0x69,0x8f,0x58,0x64,0x8b,0x55,0x60,0x89,0x53,0x5e,0x88,0x3c,0x43,0x65,0x27, 0x29,0x42,0x27,0x2a,0x43,0x27,0x25,0x3d,0x27,0x24,0x3d,0x31,0x35,0x4b,0x60,0x5f, 0x64,0x03,0x03,0x04,0x04,0x04,0x05,0x04,0x04,0x05,0x14,0x11,0x16,0x34,0x2a,0x35, 0x98,0x9e,0xb4,0x79,0x7e,0x94,0x05,0x06,0x07,0x11,0x0f,0x12,0x2e,0x24,0x2c,0x36, 0x2b,0x33,0x6b,0x64,0x6e,0xc0,0xbf,0xc9,0xc6,0xc8,0xd1,0x9f,0xa5,0xb2,0x61,0x65, 0x72,0x0a,0x0a,0x0e,0x0a,0x0b,0x0e,0x0b,0x0d,0x10,0x11,0x10,0x15,0x59,0x5f,0x82, 0x9a,0xa1,0xb8,0x9a,0xa2,0xb7,0x21,0x1e,0x24,0x15,0x16,0x1b,0x1b,0x1d,0x22,0x1e, 0x1f,0x26,0x1d,0x1f,0x25,0x23,0x25,0x2a,0x39,0x3b,0x3f,0x1a,0x1c,0x20,0x16,0x19, 0x1d,0x25,0x27,0x2c,0x2d,0x2f,0x35,0x34,0x38,0x41,0x44,0x49,0x56,0x49,0x4e,0x5e, 0x4c,0x52,0x62,0x46,0x4b,0x5d,0x3b,0x41,0x52,0x35,0x3a,0x4c,0x37,0x38,0x4b,0x3a, 0x39,0x4e,0x3c,0x3d,0x52,0x42,0x43,0x5b,0x45,0x46,0x5f,0x46,0x47,0x60,0x42,0x42, 0x59,0x42,0x3f,0x55,0x40,0x3c,0x4e,0x3f,0x3b,0x4f,0x42,0x41,0x59,0x42,0x42,0x59, 0x40,0x40,0x56,0x41,0x3f,0x56,0x46,0x42,0x57,0x54,0x4a,0x61,0x45,0x42,0x59,0x4d, 0x53,0x66,0x75,0x77,0x86,0x8b,0x8b,0x95,0x89,0x89,0x92,0x7f,0x7e,0x86,0x68,0x66, 0x6d,0x59,0x57,0x5c,0x8c,0x8e,0x99,0x72,0x7a,0x90,0x5f,0x5f,0x7a,0x5b,0x5a,0x76, 0x52,0x58,0x78,0x6b,0x72,0x8b,0x6f,0x78,0x90,0x6a,0x72,0x8c,0x6e,0x77,0x92,0x70, 0x79,0x94,0x71,0x6f,0x8c,0x7d,0x75,0x8d,0x8f,0x81,0x90,0x76,0x65,0x78,0x64,0x53, 0x6a,0x45,0x44,0x62,0x16,0x17,0x1e,0x17,0x19,0x1f,0x16,0x19,0x1e,0x26,0x25,0x32, 0x2f,0x2d,0x43,0x2f,0x2b,0x40,0x52,0x49,0x69,0x58,0x50,0x72,0x5a,0x51,0x74,0x5d, 0x51,0x74,0x5d,0x51,0x74,0x5e,0x52,0x75,0x5e,0x51,0x75,0x5e,0x51,0x75,0x5e,0x51, 0x75,0x5e,0x52,0x75,0x5e,0x52,0x74,0x5c,0x53,0x76,0x55,0x52,0x78,0x5d,0x66,0x88, 0x4e,0x50,0x5e,0x26,0x28,0x30,0x26,0x29,0x31,0x25,0x27,0x2e,0x22,0x25,0x2c,0x21, 0x23,0x2a,0x1d,0x1f,0x25,0x2e,0x2b,0x34,0x5a,0x52,0x66,0x51,0x5b,0x7f,0x48,0x48, 0x69,0x41,0x41,0x5e,0x4e,0x4e,0x74,0x51,0x4f,0x78,0x51,0x52,0x7b,0x51,0x54,0x7d, 0x50,0x55,0x7f,0x51,0x58,0x81,0x50,0x5a,0x82,0x50,0x5b,0x83,0x4e,0x58,0x81,0x50, 0x5a,0x7f,0x4d,0x58,0x7c,0x4e,0x59,0x7b,0x2d,0x32,0x44,0x1c,0x1e,0x23,0x2c,0x2f, 0x3a,0x33,0x37,0x4a,0x3e,0x3c,0x52,0x42,0x40,0x56,0x3f,0x3e,0x55,0x53,0x57,0x6f, 0x64,0x6c,0x84,0x63,0x6b,0x81,0x5e,0x66,0x7f,0x5e,0x66,0x7e,0x49,0x4e,0x5b,0x3c, 0x40,0x4d,0x3b,0x40,0x4d,0x3c,0x41,0x4f,0x37,0x3d,0x4e,0x38,0x3e,0x51,0x3a,0x3e, 0x52,0x3e,0x45,0x57,0x4b,0x50,0x5c,0x73,0x75,0x7b,0x59,0x5b,0x63,0x4f,0x51,0x5b, 0x39,0x3b,0x48,0x39,0x39,0x47,0x37,0x37,0x45,0x34,0x34,0x42,0x34,0x34,0x42,0x34, 0x34,0x42,0x32,0x32,0x40,0x31,0x30,0x3e,0x32,0x31,0x3f,0x32,0x32,0x3f,0x32,0x31, 0x3f,0x32,0x32,0x3f,0x31,0x30,0x3d,0x30,0x2e,0x3b,0x2d,0x2b,0x38,0x2a,0x29,0x35, 0x29,0x27,0x34,0x28,0x27,0x32,0x27,0x25,0x31,0x26,0x24,0x30,0x25,0x23,0x2e,0x23, 0x21,0x2b,0x20,0x1e,0x28,0x1b,0x1a,0x22,0x14,0x13,0x1a,0x11,0x11,0x17,0x0f,0x0f, 0x14,0x0d,0x0d,0x12,0x0c,0x0c,0x11,0x0c,0x0b,0x10,0x0b,0x0b,0x0f,0x0a,0x0a,0x0d, 0x0a,0x09,0x0c,0x09,0x09,0x0c,0x08,0x08,0x0a,0x07,0x07,0x09,0x08,0x07,0x0a,0x07, 0x06,0x09,0x06,0x06,0x08,0x06,0x06,0x08,0x06,0x06,0x07,0x06,0x05,0x07,0x05,0x05, 0x06,0x05,0x05,0x06,0x05,0x04,0x06,0x04,0x04,0x06,0x03,0x03,0x05,0x03,0x03,0x05, 0x03,0x03,0x05,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x02,0x02,0x03,0x02, 0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4e,0x50,0x56,0x7b,0x86,0xa7,0x52, 0x57,0x82,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f, 0x7b,0x52,0x4f,0x7b,0x52,0x4f,0x7b,0x52,0x50,0x7b,0x52,0x50,0x7b,0x52,0x50,0x7b, 0x52,0x52,0x7c,0x5a,0x58,0x88,0x0e,0x0e,0x13,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x03,0x02,0x02,0x04,0x03,0x04,0x07,0x06,0x06,0x16,0x12,0x17,0x13,0x11,0x16, 0x10,0x10,0x16,0x1d,0x1e,0x24,0x29,0x2b,0x30,0x29,0x2b,0x34,0x3c,0x3f,0x4a,0x57, 0x5b,0x67,0x5e,0x63,0x71,0x69,0x6d,0x77,0x65,0x69,0x74,0x59,0x5e,0x6d,0x47,0x4e, 0x63,0x49,0x50,0x67,0x4a,0x51,0x69,0x4d,0x54,0x6b,0x6a,0x70,0x80,0x96,0x9a,0x9f, 0xa6,0xa6,0xad,0x95,0x98,0xa2,0x7e,0x85,0x94,0x72,0x76,0x8a,0x64,0x67,0x7e,0x4b, 0x4d,0x62,0x47,0x48,0x5e,0x54,0x54,0x6e,0x54,0x52,0x6d,0x55,0x51,0x6b,0x54,0x50, 0x6a,0x50,0x4c,0x66,0x51,0x4a,0x60,0x4c,0x49,0x62,0x4a,0x4a,0x65,0x4c,0x52,0x6e, 0x55,0x5c,0x76,0x63,0x6b,0x83,0x6e,0x76,0x8b,0x76,0x7d,0x91,0x7d,0x83,0x96,0x85, 0x8b,0x9c,0x87,0x8e,0x9e,0x86,0x8b,0x9b,0x84,0x8a,0x99,0x86,0x8b,0x99,0x7e,0x83, 0x91,0x6d,0x72,0x82,0x5e,0x63,0x73,0x55,0x5a,0x6b,0x55,0x5a,0x6c,0x58,0x5e,0x72, 0x5c,0x62,0x76,0x5e,0x65,0x79,0x61,0x67,0x7e,0x66,0x6e,0x86,0x69,0x6f,0x88,0x69, 0x6e,0x86,0x66,0x6e,0x85,0x69,0x71,0x88,0x6a,0x70,0x86,0x65,0x69,0x81,0x67,0x6a, 0x82,0x69,0x6b,0x82,0x60,0x5e,0x79,0x57,0x55,0x6f,0x57,0x4e,0x66,0x55,0x4a,0x60, 0x42,0x3a,0x4a,0x3e,0x37,0x48,0x3c,0x3b,0x50,0x3f,0x42,0x58,0x3f,0x3f,0x56,0x3e, 0x3c,0x52,0x42,0x46,0x58,0x6a,0x6e,0x77,0xb3,0xb3,0xb5,0xc6,0xc1,0xc9,0xad,0xa8, 0xb0,0x90,0x91,0xa3,0x9d,0x9e,0xb0,0x7b,0x7d,0x90,0x5b,0x5e,0x78,0x48,0x4c,0x68, 0x46,0x4b,0x6a,0x4b,0x4e,0x6b,0x4e,0x55,0x74,0x4a,0x48,0x6d,0x52,0x5d,0x82,0x8b, 0x94,0xac,0x60,0x54,0x61,0x57,0x45,0x56,0x55,0x42,0x53,0x52,0x40,0x4f,0x50,0x3f, 0x4e,0x29,0x1f,0x29,0x23,0x1a,0x24,0x23,0x1a,0x22,0x2f,0x26,0x35,0x51,0x4e,0x79, 0x5e,0x53,0x79,0x64,0x53,0x74,0x56,0x50,0x79,0x52,0x56,0x80,0x52,0x58,0x82,0x53, 0x5e,0x88,0x52,0x55,0x80,0x64,0x53,0x76,0x8e,0x98,0xb3,0xf2,0xf4,0xf7,0x2f,0x26, 0x2c,0x33,0x26,0x2e,0x3c,0x2d,0x37,0x39,0x2b,0x34,0x3c,0x2d,0x37,0x57,0x45,0x55, 0x1a,0x16,0x1b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x5a,0x5e,0x6e,0x81,0x8c,0xab,0x5f,0x53,0x79,0x5c,0x67,0x8f,0x6a,0x75, 0x99,0x62,0x6e,0x93,0x5b,0x67,0x8d,0x56,0x62,0x8a,0x54,0x5f,0x88,0x4b,0x55,0x7d, 0x29,0x2c,0x44,0x27,0x27,0x3f,0x27,0x2a,0x42,0x26,0x2a,0x43,0x2a,0x25,0x3c,0x2a, 0x2c,0x45,0x55,0x54,0x65,0x08,0x09,0x0a,0x03,0x03,0x04,0x03,0x03,0x04,0x1d,0x18, 0x1e,0x41,0x3c,0x4a,0x93,0x9b,0xb2,0x44,0x3e,0x4d,0x05,0x05,0x06,0x05,0x06,0x07, 0x05,0x06,0x07,0x12,0x0f,0x12,0x36,0x2a,0x32,0x3c,0x2f,0x3b,0xa7,0xa5,0xb1,0xb5, 0xb9,0xc7,0x9e,0xa5,0xb5,0x7c,0x80,0x91,0x1b,0x1c,0x22,0x0b,0x0c,0x0f,0x0c,0x0e, 0x10,0x50,0x49,0x60,0x93,0x9c,0xb4,0x9b,0xa3,0xb8,0x5b,0x54,0x65,0x14,0x15,0x1a, 0x19,0x1a,0x20,0x1c,0x1e,0x23,0x1a,0x1c,0x22,0x19,0x1b,0x20,0x27,0x29,0x2e,0x39, 0x3a,0x3f,0x36,0x38,0x3d,0x33,0x36,0x3d,0x33,0x34,0x3b,0x47,0x49,0x4e,0x51,0x54, 0x5a,0x62,0x66,0x6f,0x68,0x6b,0x77,0x56,0x5c,0x69,0x4c,0x51,0x61,0x42,0x46,0x57, 0x34,0x39,0x4a,0x35,0x37,0x4a,0x39,0x39,0x4e,0x3f,0x3f,0x56,0x43,0x44,0x5c,0x43, 0x43,0x5b,0x40,0x40,0x56,0x3e,0x3d,0x52,0x3e,0x3d,0x51,0x40,0x3e,0x52,0x3f,0x3f, 0x56,0x42,0x46,0x5e,0x45,0x46,0x60,0x47,0x45,0x5f,0x45,0x41,0x56,0x48,0x40,0x53, 0x47,0x41,0x55,0x3c,0x42,0x56,0x57,0x5b,0x6b,0x68,0x69,0x76,0x69,0x68,0x73,0x62, 0x61,0x6a,0x5e,0x5d,0x66,0x54,0x52,0x59,0x93,0x95,0x9d,0x87,0x8e,0x9e,0x57,0x62, 0x7f,0x58,0x59,0x76,0x4e,0x51,0x6c,0x50,0x59,0x77,0x54,0x5d,0x7c,0x54,0x5e,0x7d, 0x62,0x6c,0x8a,0x6a,0x73,0x90,0x62,0x60,0x80,0x68,0x60,0x7d,0x75,0x65,0x79,0x67, 0x55,0x68,0x5e,0x4d,0x65,0x4a,0x45,0x62,0x16,0x18,0x1e,0x16,0x19,0x1f,0x15,0x16, 0x1c,0x26,0x25,0x30,0x30,0x2d,0x42,0x2e,0x29,0x40,0x51,0x49,0x68,0x57,0x4f,0x71, 0x5b,0x51,0x75,0x5d,0x51,0x73,0x5e,0x51,0x75,0x5e,0x52,0x74,0x5e,0x51,0x75,0x5e, 0x52,0x75,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e,0x53,0x75,0x53,0x51, 0x78,0x59,0x63,0x86,0x4b,0x4c,0x5a,0x21,0x23,0x2a,0x22,0x25,0x2c,0x21,0x23,0x2a, 0x20,0x22,0x29,0x1e,0x21,0x26,0x1b,0x1d,0x22,0x28,0x25,0x2e,0x59,0x4e,0x61,0x50, 0x58,0x7c,0x49,0x47,0x6b,0x3f,0x3e,0x5c,0x4e,0x4c,0x74,0x50,0x4f,0x77,0x51,0x51, 0x7a,0x51,0x52,0x7c,0x51,0x54,0x7c,0x50,0x56,0x80,0x51,0x59,0x82,0x51,0x5c,0x85, 0x51,0x5c,0x84,0x52,0x5c,0x84,0x52,0x5d,0x83,0x53,0x5e,0x82,0x48,0x52,0x6d,0x1b, 0x1d,0x23,0x2b,0x2e,0x37,0x37,0x3c,0x4a,0x37,0x3a,0x4e,0x3a,0x3a,0x4f,0x47,0x43, 0x5a,0x63,0x65,0x81,0x4d,0x54,0x70,0x4f,0x52,0x6c,0x4f,0x51,0x69,0x4e,0x51,0x6b, 0x5d,0x64,0x7b,0x30,0x34,0x3e,0x33,0x37,0x43,0x32,0x37,0x44,0x34,0x38,0x46,0x37, 0x3c,0x4c,0x3a,0x3f,0x4e,0x41,0x46,0x52,0x43,0x47,0x52,0x42,0x45,0x4e,0x50,0x53, 0x5c,0x4a,0x4a,0x55,0x35,0x35,0x43,0x35,0x35,0x42,0x35,0x35,0x42,0x36,0x35,0x42, 0x34,0x34,0x42,0x33,0x32,0x40,0x32,0x32,0x3f,0x33,0x32,0x40,0x35,0x34,0x42,0x36, 0x35,0x43,0x34,0x34,0x41,0x30,0x30,0x3d,0x2e,0x2c,0x39,0x2e,0x2c,0x39,0x2b,0x2a, 0x36,0x29,0x28,0x34,0x28,0x27,0x32,0x28,0x26,0x32,0x25,0x24,0x2f,0x23,0x22,0x2c, 0x20,0x1f,0x29,0x1f,0x1d,0x27,0x1a,0x1a,0x21,0x15,0x15,0x1c,0x11,0x11,0x16,0x0f, 0x0f,0x15,0x0e,0x0e,0x14,0x0d,0x0d,0x11,0x0c,0x0c,0x10,0x0b,0x0b,0x0f,0x0b,0x0b, 0x0f,0x0a,0x0a,0x0e,0x09,0x09,0x0c,0x09,0x09,0x0c,0x09,0x09,0x0b,0x07,0x07,0x09, 0x08,0x07,0x0a,0x07,0x06,0x09,0x06,0x06,0x08,0x06,0x06,0x08,0x06,0x06,0x07,0x06, 0x06,0x07,0x06,0x05,0x07,0x05,0x05,0x06,0x05,0x04,0x06,0x04,0x04,0x06,0x03,0x03, 0x05,0x03,0x03,0x05,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x02,0x02,0x03, 0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x15,0x16,0x18, 0x82,0x8c,0xab,0x53,0x5e,0x89,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52, 0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7b,0x52,0x4f,0x7b,0x52,0x4f, 0x7b,0x52,0x4f,0x7b,0x52,0x4f,0x7b,0x54,0x51,0x7e,0x40,0x3e,0x61,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x03,0x02,0x03,0x05,0x04,0x05,0x0d,0x0a,0x0d,0x14,0x11,0x15,0x1a,0x16, 0x1d,0x18,0x18,0x21,0x1f,0x21,0x28,0x2e,0x30,0x37,0x32,0x36,0x41,0x38,0x3b,0x46, 0x46,0x4a,0x56,0x59,0x5c,0x69,0x66,0x6a,0x73,0x68,0x6b,0x74,0x63,0x67,0x71,0x5a, 0x5e,0x6e,0x5c,0x62,0x75,0x60,0x67,0x7b,0x66,0x6d,0x82,0x66,0x6e,0x82,0x76,0x7b, 0x8c,0x92,0x96,0x9e,0x9b,0x9e,0xa6,0x89,0x8e,0x9a,0x6f,0x73,0x88,0x62,0x66,0x7c, 0x52,0x55,0x6a,0x46,0x46,0x5b,0x45,0x43,0x58,0x57,0x55,0x6e,0x57,0x53,0x6d,0x5a, 0x53,0x6c,0x5a,0x51,0x6a,0x4e,0x48,0x5f,0x43,0x40,0x55,0x46,0x42,0x59,0x46,0x45, 0x5e,0x48,0x4a,0x65,0x4c,0x53,0x6e,0x54,0x5c,0x75,0x62,0x6a,0x82,0x66,0x6e,0x86, 0x6a,0x72,0x89,0x71,0x78,0x8e,0x77,0x7e,0x92,0x76,0x7c,0x8e,0x73,0x79,0x8a,0x76, 0x7c,0x8b,0x71,0x76,0x84,0x6a,0x6e,0x7c,0x5e,0x63,0x72,0x54,0x59,0x69,0x55,0x5a, 0x6a,0x5f,0x65,0x76,0x61,0x68,0x7b,0x5f,0x66,0x7b,0x5f,0x67,0x7e,0x64,0x6b,0x83, 0x65,0x6c,0x85,0x67,0x6e,0x85,0x67,0x6e,0x86,0x67,0x6e,0x86,0x65,0x6a,0x82,0x65, 0x6a,0x81,0x69,0x6a,0x82,0x68,0x6d,0x83,0x65,0x66,0x7d,0x59,0x56,0x6e,0x52,0x49, 0x5c,0x48,0x3e,0x4e,0x3c,0x34,0x42,0x3e,0x36,0x46,0x3a,0x39,0x4e,0x3c,0x3d,0x52, 0x3e,0x42,0x58,0x3d,0x42,0x56,0x3d,0x41,0x54,0x43,0x47,0x56,0x5f,0x62,0x6e,0xaa, 0xa3,0xae,0xc4,0xbe,0xc4,0xa5,0xa3,0xb2,0x7d,0x7e,0x95,0x70,0x72,0x8a,0x5d,0x61, 0x7c,0x46,0x45,0x62,0x48,0x49,0x64,0x48,0x4a,0x67,0x4d,0x53,0x73,0x4b,0x53,0x76, 0x4c,0x4a,0x71,0x71,0x7a,0x9a,0x7f,0x7b,0x88,0x54,0x41,0x52,0x55,0x43,0x54,0x50, 0x3f,0x4f,0x4f,0x3e,0x4d,0x2f,0x24,0x2e,0x23,0x1a,0x23,0x21,0x19,0x21,0x28,0x1f, 0x2b,0x51,0x4e,0x79,0x5b,0x52,0x79,0x64,0x50,0x71,0x57,0x50,0x79,0x52,0x57,0x81, 0x52,0x57,0x81,0x52,0x5b,0x85,0x52,0x5d,0x86,0x64,0x53,0x76,0x6b,0x76,0x9b,0xee, 0xef,0xf4,0x4b,0x46,0x4d,0x33,0x25,0x2d,0x3c,0x2d,0x37,0x3b,0x2c,0x36,0x39,0x2b, 0x34,0x50,0x3e,0x4d,0x2e,0x26,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x2e,0x30,0x38,0x90,0x9a,0xb5,0x52,0x52,0x7d,0x52, 0x52,0x7d,0x69,0x74,0x98,0x64,0x71,0x95,0x5a,0x65,0x8d,0x53,0x5e,0x87,0x52,0x5a, 0x83,0x3c,0x3d,0x5e,0x27,0x25,0x3e,0x27,0x28,0x40,0x28,0x2a,0x42,0x29,0x2c,0x44, 0x26,0x23,0x3c,0x27,0x29,0x41,0x40,0x40,0x55,0x43,0x42,0x45,0x03,0x03,0x04,0x03, 0x03,0x04,0x22,0x1c,0x22,0x52,0x51,0x61,0x97,0x9e,0xb3,0x2c,0x24,0x2c,0x05,0x05, 0x06,0x05,0x05,0x06,0x05,0x05,0x06,0x05,0x06,0x07,0x06,0x06,0x08,0x35,0x29,0x32, 0x3c,0x30,0x3b,0x7a,0x74,0x80,0xa4,0xa8,0xb8,0x9a,0xa2,0xb6,0x98,0x9f,0xb4,0x23, 0x26,0x2c,0x0d,0x0e,0x12,0x21,0x1e,0x25,0x7f,0x89,0xa4,0x9b,0xa2,0xb8,0x88,0x8a, 0x9e,0x12,0x12,0x16,0x17,0x19,0x1e,0x18,0x1a,0x1f,0x19,0x1b,0x20,0x16,0x19,0x1e, 0x16,0x17,0x1d,0x43,0x44,0x49,0x2d,0x2f,0x36,0x22,0x25,0x2e,0x22,0x26,0x30,0x24, 0x27,0x30,0x3f,0x42,0x48,0x4f,0x50,0x57,0x46,0x49,0x52,0x4f,0x53,0x5f,0x5d,0x61, 0x6f,0x57,0x5d,0x6d,0x42,0x47,0x5b,0x3c,0x42,0x55,0x3e,0x44,0x56,0x3c,0x3e,0x54, 0x41,0x40,0x58,0x41,0x40,0x58,0x3e,0x3e,0x55,0x3c,0x3b,0x51,0x3a,0x3a,0x4e,0x3a, 0x3e,0x53,0x44,0x4a,0x5a,0x49,0x4e,0x60,0x3e,0x45,0x5a,0x42,0x42,0x5a,0x47,0x46, 0x5f,0x45,0x40,0x55,0x3e,0x37,0x48,0x3b,0x39,0x4e,0x44,0x48,0x5d,0x5a,0x5a,0x69, 0x5a,0x58,0x60,0x59,0x57,0x60,0x5a,0x59,0x62,0x54,0x53,0x5c,0x8f,0x92,0x9b,0x8b, 0x91,0xa1,0x66,0x6e,0x88,0x52,0x5a,0x7a,0x52,0x56,0x72,0x4b,0x52,0x6f,0x48,0x4d, 0x6a,0x47,0x4c,0x66,0x55,0x59,0x79,0x52,0x5a,0x7c,0x50,0x50,0x74,0x58,0x50,0x70, 0x5f,0x4d,0x65,0x52,0x3f,0x55,0x5b,0x49,0x61,0x4b,0x45,0x62,0x14,0x16,0x1d,0x16, 0x17,0x1e,0x14,0x16,0x1b,0x24,0x22,0x2d,0x2e,0x2b,0x41,0x2e,0x2a,0x3f,0x51,0x49, 0x69,0x58,0x4f,0x71,0x5b,0x51,0x75,0x5d,0x51,0x74,0x5e,0x52,0x75,0x5e,0x51,0x75, 0x5e,0x52,0x75,0x5e,0x52,0x75,0x5f,0x52,0x75,0x5e,0x53,0x76,0x5e,0x52,0x75,0x5e, 0x52,0x75,0x54,0x51,0x76,0x56,0x61,0x85,0x51,0x52,0x60,0x1e,0x21,0x28,0x1f,0x22, 0x28,0x20,0x22,0x29,0x1e,0x21,0x28,0x1d,0x1f,0x27,0x19,0x1b,0x22,0x22,0x21,0x28, 0x57,0x4c,0x5e,0x50,0x52,0x77,0x49,0x47,0x6b,0x3e,0x3d,0x5a,0x4e,0x4c,0x73,0x50, 0x4f,0x77,0x51,0x50,0x7a,0x51,0x51,0x7a,0x51,0x53,0x7c,0x52,0x55,0x7f,0x51,0x59, 0x82,0x51,0x5c,0x86,0x52,0x5c,0x86,0x53,0x5e,0x87,0x54,0x60,0x87,0x58,0x63,0x88, 0x60,0x6a,0x8d,0x1d,0x1f,0x23,0x2d,0x30,0x38,0x36,0x3a,0x45,0x37,0x3c,0x4d,0x47, 0x42,0x59,0x49,0x44,0x5a,0x79,0x79,0x8d,0x50,0x51,0x6d,0x47,0x49,0x65,0x4b,0x4b, 0x65,0x4c,0x4c,0x66,0x4c,0x50,0x6b,0x5c,0x60,0x6c,0x26,0x2a,0x35,0x2a,0x2e,0x3a, 0x30,0x34,0x42,0x33,0x37,0x45,0x32,0x36,0x44,0x36,0x3a,0x47,0x39,0x3d,0x49,0x48, 0x49,0x55,0x3c,0x3c,0x48,0x34,0x34,0x41,0x36,0x35,0x42,0x36,0x35,0x42,0x35,0x34, 0x42,0x35,0x34,0x42,0x33,0x32,0x40,0x32,0x31,0x3e,0x34,0x33,0x40,0x37,0x35,0x43, 0x37,0x35,0x43,0x38,0x36,0x44,0x35,0x34,0x41,0x31,0x2f,0x3c,0x2c,0x2b,0x38,0x2b, 0x2a,0x36,0x2a,0x29,0x36,0x27,0x27,0x32,0x26,0x25,0x30,0x21,0x21,0x2c,0x1f,0x1f, 0x28,0x1c,0x1d,0x26,0x1b,0x1b,0x23,0x19,0x19,0x21,0x16,0x15,0x1d,0x13,0x13,0x19, 0x10,0x10,0x16,0x0f,0x0f,0x14,0x0e,0x0e,0x12,0x0d,0x0d,0x11,0x0c,0x0b,0x10,0x0b, 0x0b,0x0f,0x0a,0x0a,0x0e,0x0a,0x0a,0x0d,0x09,0x09,0x0c,0x09,0x09,0x0b,0x08,0x08, 0x0b,0x08,0x07,0x0a,0x07,0x07,0x0a,0x07,0x06,0x09,0x06,0x06,0x08,0x06,0x06,0x07, 0x06,0x06,0x07,0x06,0x05,0x07,0x06,0x05,0x07,0x05,0x05,0x06,0x04,0x04,0x06,0x03, 0x03,0x05,0x03,0x03,0x05,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x03, 0x04,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03, 0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x86,0x91,0xaf,0x58,0x64,0x8d,0x52,0x4f,0x7a,0x52,0x4f,0x7a, 0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52, 0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7b,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x6b,0x68, 0xa1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x02,0x02,0x02,0x03,0x03,0x03,0x06,0x05,0x06,0x0c,0x0a,0x0d,0x12,0x11,0x16,0x16, 0x16,0x1e,0x19,0x19,0x22,0x20,0x23,0x2d,0x31,0x34,0x3d,0x3b,0x3f,0x4a,0x4b,0x4e, 0x56,0x4f,0x52,0x59,0x55,0x59,0x62,0x5f,0x62,0x6e,0x6a,0x6e,0x77,0x63,0x66,0x70, 0x5c,0x61,0x6e,0x5f,0x65,0x75,0x6c,0x72,0x84,0x75,0x7a,0x8d,0x79,0x7f,0x92,0x77, 0x7e,0x91,0x7b,0x82,0x92,0x8a,0x8f,0x9b,0x86,0x89,0x96,0x62,0x67,0x7e,0x5a,0x5e, 0x76,0x51,0x52,0x6c,0x43,0x42,0x58,0x42,0x41,0x54,0x58,0x54,0x6c,0x5a,0x55,0x6e, 0x5c,0x56,0x6f,0x5e,0x55,0x6c,0x5a,0x4e,0x63,0x42,0x3e,0x52,0x30,0x2f,0x40,0x32, 0x32,0x42,0x3c,0x3c,0x52,0x42,0x43,0x5a,0x46,0x49,0x62,0x48,0x4f,0x69,0x51,0x57, 0x71,0x5a,0x62,0x7a,0x5a,0x62,0x7b,0x5c,0x65,0x7d,0x5f,0x66,0x7c,0x5f,0x65,0x78, 0x60,0x66,0x76,0x63,0x68,0x76,0x64,0x6a,0x76,0x5f,0x65,0x74,0x57,0x5d,0x6e,0x52, 0x58,0x6a,0x52,0x59,0x6c,0x64,0x6a,0x7e,0x66,0x6e,0x82,0x60,0x68,0x7d,0x60,0x67, 0x7e,0x64,0x6b,0x82,0x62,0x68,0x81,0x5f,0x66,0x7e,0x5e,0x65,0x7c,0x5e,0x64,0x7c, 0x5d,0x63,0x7a,0x5b,0x5e,0x73,0x61,0x63,0x78,0x64,0x68,0x7d,0x65,0x6a,0x7f,0x53, 0x53,0x6a,0x4a,0x42,0x56,0x45,0x3d,0x4f,0x3f,0x39,0x4a,0x3e,0x37,0x48,0x38,0x37, 0x4b,0x38,0x36,0x4a,0x39,0x3b,0x50,0x4a,0x4e,0x5f,0x42,0x47,0x58,0x40,0x45,0x54, 0x4a,0x4e,0x63,0x59,0x57,0x71,0x8e,0x8b,0x9c,0x86,0x88,0x9e,0x66,0x69,0x87,0x61, 0x64,0x7f,0x4c,0x50,0x6d,0x4c,0x47,0x63,0x47,0x45,0x61,0x45,0x47,0x63,0x48,0x4f, 0x6d,0x51,0x59,0x7c,0x4c,0x4a,0x71,0x5f,0x6b,0x8e,0x92,0x95,0xa9,0x4c,0x3b,0x49, 0x56,0x43,0x54,0x53,0x41,0x50,0x4f,0x3f,0x4d,0x3c,0x2f,0x3b,0x23,0x1a,0x22,0x22, 0x19,0x22,0x24,0x1b,0x26,0x50,0x4d,0x77,0x52,0x4f,0x7a,0x64,0x52,0x72,0x58,0x50, 0x79,0x52,0x55,0x80,0x52,0x57,0x82,0x52,0x5d,0x88,0x54,0x60,0x8a,0x64,0x53,0x75, 0x5c,0x69,0x90,0xe5,0xe7,0xed,0x67,0x64,0x6c,0x2e,0x22,0x29,0x3d,0x2e,0x38,0x3c, 0x2d,0x37,0x3b,0x2c,0x36,0x4b,0x3a,0x47,0x42,0x36,0x44,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x08,0x09,0x95,0x9d,0xb5, 0x5d,0x69,0x91,0x5b,0x52,0x79,0x60,0x6d,0x93,0x66,0x72,0x97,0x5a,0x66,0x8d,0x53, 0x5e,0x87,0x52,0x55,0x80,0x29,0x27,0x41,0x26,0x22,0x3c,0x27,0x26,0x3f,0x3f,0x45, 0x68,0x3d,0x43,0x63,0x3f,0x47,0x68,0x2d,0x29,0x44,0x33,0x35,0x4e,0x66,0x65,0x6c, 0x02,0x02,0x03,0x02,0x03,0x03,0x2b,0x23,0x2c,0x62,0x60,0x72,0x9c,0xa2,0xb5,0x0a, 0x09,0x0b,0x03,0x04,0x05,0x03,0x04,0x05,0x04,0x05,0x06,0x05,0x05,0x06,0x05,0x06, 0x07,0x06,0x06,0x08,0x1c,0x17,0x1d,0x3c,0x2f,0x3b,0x62,0x58,0x66,0x9c,0x9f,0xb0, 0x9a,0xa1,0xb6,0x9a,0xa1,0xb6,0x46,0x49,0x53,0x10,0x10,0x14,0x59,0x57,0x73,0x99, 0xa1,0xb7,0x9a,0xa1,0xb7,0x32,0x2f,0x39,0x15,0x16,0x1b,0x16,0x18,0x1e,0x16,0x18, 0x1d,0x16,0x18,0x1c,0x16,0x17,0x1c,0x25,0x27,0x2b,0x1d,0x1f,0x24,0x1e,0x20,0x26, 0x20,0x23,0x2c,0x20,0x22,0x2c,0x1c,0x1f,0x27,0x17,0x19,0x1f,0x16,0x19,0x1f,0x1f, 0x22,0x2a,0x3e,0x42,0x50,0x5e,0x63,0x72,0x68,0x6d,0x7d,0x52,0x57,0x6d,0x48,0x4f, 0x64,0x52,0x59,0x6a,0x47,0x4e,0x62,0x42,0x49,0x5f,0x3f,0x43,0x5a,0x3e,0x3f,0x56, 0x3d,0x42,0x56,0x52,0x57,0x64,0x5f,0x62,0x6a,0x5c,0x60,0x6b,0x4a,0x50,0x62,0x3f, 0x3f,0x56,0x45,0x44,0x5c,0x47,0x46,0x5e,0x43,0x41,0x57,0x3c,0x39,0x4b,0x3a,0x3d, 0x52,0x5e,0x5c,0x68,0x50,0x4d,0x54,0x4f,0x4c,0x53,0x52,0x51,0x59,0x57,0x55,0x5d, 0x8d,0x90,0x9a,0x85,0x8d,0x9e,0x62,0x6b,0x86,0x5b,0x64,0x82,0x52,0x5b,0x7b,0x50, 0x58,0x76,0x44,0x4d,0x67,0x3e,0x44,0x5d,0x3f,0x45,0x5f,0x3a,0x40,0x59,0x41,0x3d, 0x5a,0x52,0x4f,0x73,0x61,0x51,0x6b,0x5a,0x4a,0x5d,0x5c,0x4a,0x63,0x4a,0x45,0x62, 0x12,0x14,0x1a,0x14,0x16,0x1c,0x12,0x14,0x1a,0x24,0x21,0x2b,0x2e,0x2a,0x41,0x2d, 0x29,0x3f,0x51,0x49,0x69,0x57,0x4f,0x71,0x5c,0x51,0x73,0x5d,0x51,0x74,0x5e,0x51, 0x75,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e,0x52,0x76,0x5f,0x52,0x76,0x5e,0x52,0x75, 0x5e,0x52,0x75,0x5e,0x52,0x75,0x55,0x51,0x77,0x56,0x61,0x85,0x51,0x52,0x60,0x1b, 0x1e,0x24,0x1e,0x20,0x27,0x1b,0x1e,0x27,0x1e,0x1e,0x29,0x20,0x1f,0x2a,0x17,0x19, 0x21,0x1b,0x1b,0x21,0x58,0x4b,0x5d,0x4f,0x53,0x78,0x49,0x48,0x6c,0x3d,0x3b,0x57, 0x4e,0x4c,0x73,0x50,0x4d,0x78,0x51,0x4e,0x79,0x52,0x50,0x79,0x51,0x53,0x7b,0x52, 0x55,0x7e,0x51,0x57,0x80,0x51,0x5b,0x84,0x51,0x5c,0x84,0x54,0x5f,0x87,0x55,0x61, 0x89,0x57,0x63,0x89,0x6a,0x74,0x95,0x3e,0x41,0x49,0x2d,0x2f,0x37,0x36,0x39,0x43, 0x4e,0x4c,0x5d,0x47,0x45,0x58,0x48,0x41,0x56,0x6e,0x69,0x7a,0x6d,0x6e,0x84,0x48, 0x4c,0x68,0x48,0x4a,0x65,0x49,0x48,0x65,0x4a,0x48,0x65,0x57,0x5c,0x76,0x22,0x24, 0x2d,0x26,0x2a,0x34,0x2b,0x2f,0x3b,0x2d,0x32,0x3e,0x2e,0x32,0x3e,0x2e,0x32,0x3f, 0x32,0x33,0x40,0x33,0x33,0x41,0x34,0x34,0x42,0x36,0x35,0x42,0x38,0x37,0x44,0x38, 0x38,0x44,0x35,0x34,0x41,0x33,0x33,0x3f,0x32,0x30,0x3d,0x31,0x2f,0x3d,0x33,0x31, 0x3f,0x34,0x32,0x40,0x33,0x33,0x3f,0x33,0x32,0x3f,0x32,0x31,0x3e,0x2f,0x2e,0x3b, 0x2b,0x2a,0x36,0x25,0x25,0x30,0x23,0x23,0x2e,0x20,0x21,0x2b,0x1b,0x1d,0x26,0x19, 0x1b,0x23,0x18,0x19,0x22,0x17,0x18,0x21,0x17,0x17,0x1f,0x14,0x16,0x1c,0x12,0x12, 0x19,0x11,0x11,0x17,0x10,0x10,0x16,0x0e,0x0e,0x14,0x0d,0x0d,0x12,0x0d,0x0d,0x12, 0x0c,0x0b,0x10,0x0b,0x0b,0x0f,0x0a,0x0a,0x0d,0x0a,0x0a,0x0d,0x0a,0x0a,0x0d,0x09, 0x08,0x0b,0x09,0x08,0x0b,0x08,0x08,0x0a,0x08,0x07,0x0a,0x07,0x07,0x0a,0x06,0x06, 0x09,0x06,0x06,0x08,0x06,0x05,0x07,0x06,0x05,0x07,0x05,0x05,0x06,0x05,0x05,0x06, 0x04,0x04,0x06,0x04,0x04,0x06,0x04,0x04,0x06,0x03,0x03,0x05,0x03,0x03,0x04,0x03, 0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x02,0x02, 0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x6a,0x7c,0x62,0x6e,0x94,0x52,0x50, 0x7c,0x54,0x50,0x79,0x54,0x50,0x79,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a, 0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52, 0x4f,0x7a,0x5b,0x57,0x8a,0x16,0x15,0x1c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x04,0x03,0x04,0x08,0x06,0x09,0x0e,0x0e,0x12, 0x13,0x13,0x1a,0x19,0x1a,0x22,0x1e,0x1f,0x2a,0x2a,0x2e,0x3a,0x34,0x39,0x48,0x4c, 0x50,0x5a,0x5a,0x5d,0x64,0x54,0x57,0x62,0x55,0x59,0x65,0x69,0x6c,0x75,0x6d,0x71, 0x7a,0x61,0x65,0x70,0x5f,0x65,0x73,0x71,0x76,0x86,0x80,0x86,0x95,0x81,0x86,0x97, 0x7f,0x85,0x97,0x7a,0x7f,0x93,0x76,0x7b,0x8e,0x75,0x78,0x89,0x68,0x6b,0x7f,0x52, 0x55,0x6e,0x4e,0x4d,0x64,0x43,0x3f,0x53,0x44,0x40,0x54,0x56,0x52,0x6b,0x5a,0x56, 0x70,0x5b,0x56,0x6f,0x5d,0x57,0x6e,0x5c,0x55,0x6b,0x4a,0x42,0x54,0x35,0x32,0x42, 0x2c,0x2c,0x3a,0x2e,0x2f,0x3e,0x35,0x35,0x48,0x3c,0x3b,0x50,0x43,0x43,0x5b,0x47, 0x47,0x60,0x45,0x46,0x5f,0x48,0x4e,0x64,0x4a,0x52,0x68,0x4a,0x51,0x66,0x47,0x4e, 0x61,0x42,0x49,0x5b,0x4a,0x4e,0x5e,0x52,0x57,0x64,0x57,0x5c,0x6a,0x52,0x58,0x69, 0x50,0x56,0x6a,0x47,0x4e,0x63,0x45,0x47,0x61,0x52,0x5a,0x70,0x5c,0x63,0x79,0x56, 0x5e,0x76,0x53,0x5b,0x74,0x51,0x58,0x73,0x50,0x52,0x6d,0x4a,0x4d,0x66,0x48,0x4e, 0x66,0x4c,0x52,0x66,0x4d,0x52,0x66,0x4e,0x52,0x65,0x54,0x5a,0x6b,0x5e,0x65,0x77, 0x64,0x6a,0x7e,0x4f,0x56,0x6c,0x42,0x43,0x5a,0x3f,0x3e,0x56,0x3b,0x3c,0x51,0x3a, 0x3a,0x4e,0x3a,0x3a,0x4e,0x3a,0x36,0x48,0x37,0x37,0x4a,0x4e,0x53,0x65,0x5f,0x64, 0x72,0x58,0x5d,0x6b,0x4a,0x4c,0x65,0x5b,0x4e,0x68,0x53,0x4b,0x66,0x55,0x50,0x6f, 0x52,0x51,0x71,0x69,0x6b,0x84,0x68,0x6a,0x81,0x4f,0x51,0x6d,0x41,0x42,0x5f,0x43, 0x47,0x62,0x44,0x4a,0x68,0x51,0x5a,0x7a,0x4c,0x4a,0x71,0x50,0x59,0x81,0x8b,0x93, 0xae,0x51,0x45,0x51,0x55,0x43,0x54,0x52,0x41,0x50,0x4f,0x3d,0x4d,0x47,0x37,0x45, 0x24,0x1a,0x23,0x22,0x18,0x22,0x24,0x1b,0x24,0x52,0x4f,0x78,0x52,0x4f,0x7a,0x64, 0x52,0x71,0x58,0x50,0x79,0x52,0x55,0x80,0x52,0x57,0x82,0x52,0x5c,0x86,0x55,0x60, 0x8a,0x64,0x53,0x75,0x53,0x5e,0x88,0xd6,0xd9,0xe3,0x87,0x86,0x91,0x2a,0x1e,0x24, 0x3c,0x2e,0x38,0x3d,0x2e,0x39,0x3b,0x2d,0x36,0x46,0x35,0x42,0x53,0x43,0x55,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x5b,0x5f,0x70,0x76,0x82,0xa3,0x52,0x4f,0x7a,0x55,0x60,0x8a,0x69,0x74,0x98, 0x5b,0x67,0x8d,0x52,0x5d,0x85,0x52,0x50,0x7c,0x26,0x23,0x3b,0x26,0x22,0x3b,0x2b, 0x28,0x44,0x50,0x5b,0x86,0x55,0x62,0x8a,0x5a,0x65,0x8c,0x53,0x4f,0x79,0x5b,0x66, 0x8d,0x96,0x98,0xa8,0x14,0x14,0x14,0x02,0x03,0x03,0x2f,0x27,0x30,0x6a,0x68,0x76, 0x51,0x51,0x5c,0x03,0x03,0x04,0x03,0x03,0x05,0x03,0x04,0x05,0x04,0x04,0x06,0x04, 0x05,0x06,0x04,0x05,0x06,0x06,0x06,0x08,0x06,0x06,0x08,0x0e,0x0d,0x10,0x3c,0x2f, 0x3b,0x49,0x3d,0x49,0x7b,0x7e,0x90,0x97,0x9d,0xb5,0x9a,0xa1,0xb6,0x82,0x88,0x9c, 0x49,0x3f,0x4f,0x92,0x9a,0xb3,0x99,0xa1,0xb6,0x6e,0x6b,0x7e,0x15,0x16,0x1a,0x16, 0x17,0x1c,0x16,0x18,0x1c,0x16,0x17,0x1c,0x16,0x18,0x1d,0x18,0x1a,0x1e,0x18,0x1a, 0x1f,0x19,0x1b,0x20,0x1a,0x1b,0x21,0x16,0x18,0x1e,0x15,0x17,0x1d,0x14,0x16,0x1c, 0x15,0x16,0x1d,0x18,0x1a,0x22,0x22,0x26,0x2f,0x30,0x35,0x43,0x46,0x4b,0x5b,0x60, 0x64,0x75,0x5a,0x60,0x73,0x4e,0x54,0x68,0x5b,0x61,0x72,0x56,0x5c,0x6c,0x50,0x56, 0x69,0x45,0x4b,0x61,0x43,0x4a,0x5f,0x5a,0x5f,0x6f,0x6a,0x6e,0x76,0x70,0x73,0x7a, 0x61,0x66,0x74,0x3f,0x43,0x5a,0x46,0x4c,0x63,0x47,0x4e,0x66,0x42,0x46,0x5e,0x3d, 0x44,0x59,0x46,0x4b,0x59,0x6c,0x69,0x71,0x43,0x40,0x47,0x3b,0x38,0x3e,0x4a,0x47, 0x4f,0x52,0x51,0x58,0x91,0x94,0x9f,0x90,0x98,0xaa,0x72,0x7a,0x94,0x61,0x6a,0x87, 0x57,0x60,0x80,0x54,0x5e,0x7e,0x4c,0x55,0x73,0x45,0x4e,0x6a,0x45,0x4d,0x6a,0x3d, 0x43,0x5f,0x41,0x3d,0x5a,0x52,0x50,0x73,0x68,0x5c,0x76,0x5c,0x4b,0x5f,0x5d,0x4c, 0x67,0x47,0x42,0x5e,0x12,0x14,0x1a,0x13,0x16,0x1b,0x12,0x13,0x19,0x21,0x1e,0x27, 0x2d,0x2a,0x3f,0x2e,0x29,0x3e,0x52,0x49,0x69,0x58,0x4f,0x71,0x5b,0x51,0x76,0x5e, 0x51,0x74,0x5e,0x51,0x75,0x5e,0x52,0x75,0x5e,0x52,0x76,0x5f,0x53,0x76,0x5f,0x53, 0x76,0x5f,0x53,0x75,0x5e,0x52,0x75,0x5e,0x53,0x75,0x55,0x51,0x77,0x56,0x61,0x85, 0x55,0x55,0x66,0x1a,0x1b,0x22,0x1a,0x1b,0x23,0x21,0x20,0x2c,0x27,0x24,0x30,0x22, 0x20,0x2b,0x16,0x16,0x1e,0x14,0x15,0x19,0x59,0x4a,0x5b,0x52,0x54,0x7b,0x4a,0x47, 0x6c,0x3c,0x3a,0x57,0x4e,0x4c,0x73,0x51,0x4e,0x78,0x51,0x4e,0x78,0x51,0x50,0x79, 0x51,0x51,0x7a,0x52,0x52,0x7c,0x51,0x55,0x7e,0x51,0x59,0x82,0x52,0x5d,0x86,0x54, 0x5f,0x87,0x56,0x61,0x89,0x58,0x64,0x8a,0x60,0x6b,0x8f,0x81,0x8a,0xa3,0x9e,0xa2, 0xae,0x7f,0x80,0x8c,0x50,0x4c,0x5b,0x4c,0x47,0x57,0x43,0x3f,0x50,0x43,0x3c,0x4d, 0x90,0x93,0xa1,0x51,0x58,0x74,0x4b,0x4d,0x67,0x4a,0x4d,0x69,0x49,0x4d,0x69,0x4e, 0x52,0x6e,0x5a,0x5d,0x69,0x26,0x29,0x32,0x2c,0x2f,0x3a,0x31,0x34,0x40,0x31,0x33, 0x3f,0x2f,0x30,0x3d,0x2f,0x2f,0x3d,0x32,0x32,0x3e,0x35,0x35,0x42,0x38,0x37,0x44, 0x38,0x37,0x44,0x37,0x37,0x43,0x33,0x32,0x3f,0x33,0x32,0x3f,0x32,0x2f,0x3d,0x30, 0x2d,0x3a,0x2d,0x2b,0x38,0x2e,0x2d,0x3a,0x2e,0x2d,0x3a,0x2e,0x2d,0x3a,0x2d,0x2d, 0x39,0x2b,0x2a,0x36,0x27,0x26,0x32,0x21,0x21,0x2b,0x1c,0x1d,0x27,0x19,0x1b,0x24, 0x18,0x1a,0x22,0x17,0x19,0x21,0x16,0x17,0x1f,0x16,0x16,0x1e,0x14,0x15,0x1c,0x12, 0x13,0x1a,0x12,0x12,0x18,0x11,0x11,0x17,0x0f,0x0f,0x15,0x0e,0x0e,0x13,0x0d,0x0d, 0x12,0x0c,0x0c,0x11,0x0c,0x0b,0x10,0x0c,0x0c,0x10,0x0b,0x0b,0x0f,0x0a,0x0a,0x0e, 0x09,0x09,0x0c,0x09,0x09,0x0c,0x09,0x09,0x0c,0x08,0x08,0x0a,0x08,0x08,0x0a,0x07, 0x07,0x0a,0x07,0x06,0x09,0x06,0x06,0x08,0x06,0x06,0x07,0x06,0x06,0x07,0x05,0x05, 0x06,0x05,0x05,0x06,0x04,0x04,0x06,0x04,0x04,0x06,0x04,0x04,0x06,0x04,0x04,0x06, 0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x05,0x03,0x03,0x04,0x03,0x03,0x05,0x03, 0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2f,0x32,0x3a,0x6c, 0x77,0x9b,0x52,0x5a,0x84,0x53,0x4f,0x7a,0x54,0x50,0x79,0x54,0x50,0x79,0x53,0x4f, 0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a, 0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x53,0x50,0x7c,0x4c,0x4a,0x73,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x03,0x03,0x03,0x06,0x05,0x06,0x0b,0x0a, 0x0c,0x0f,0x0e,0x14,0x15,0x14,0x1b,0x1c,0x1e,0x27,0x23,0x25,0x32,0x2c,0x2c,0x3c, 0x3d,0x42,0x4f,0x52,0x56,0x60,0x59,0x5e,0x68,0x53,0x58,0x65,0x5a,0x5f,0x6a,0x6d, 0x71,0x7a,0x72,0x76,0x7f,0x65,0x6a,0x78,0x75,0x79,0x87,0x8d,0x92,0x9e,0x92,0x97, 0xa3,0x86,0x8c,0x9b,0x7b,0x82,0x93,0x6e,0x74,0x89,0x62,0x66,0x7a,0x5c,0x5f,0x75, 0x52,0x55,0x6e,0x4c,0x49,0x5e,0x47,0x43,0x56,0x4a,0x46,0x5a,0x55,0x51,0x6a,0x59, 0x55,0x6e,0x58,0x56,0x6d,0x5b,0x55,0x6b,0x5a,0x54,0x6a,0x50,0x4a,0x5f,0x3f,0x3a, 0x4a,0x37,0x32,0x41,0x34,0x30,0x3f,0x31,0x31,0x42,0x2f,0x2f,0x40,0x33,0x33,0x45, 0x3e,0x3c,0x51,0x42,0x40,0x56,0x3e,0x3e,0x53,0x38,0x3c,0x4f,0x3a,0x3f,0x52,0x3a, 0x3e,0x4f,0x38,0x3c,0x4a,0x36,0x3a,0x4a,0x37,0x3b,0x4c,0x42,0x47,0x56,0x46,0x4b, 0x5a,0x44,0x49,0x59,0x4c,0x52,0x62,0x48,0x4f,0x63,0x45,0x45,0x5d,0x43,0x44,0x5d, 0x43,0x43,0x5b,0x43,0x43,0x5c,0x47,0x47,0x62,0x49,0x48,0x62,0x48,0x47,0x62,0x44, 0x45,0x5d,0x40,0x45,0x5a,0x45,0x4a,0x5c,0x4a,0x4e,0x61,0x56,0x5b,0x6b,0x5f,0x63, 0x75,0x66,0x6c,0x7e,0x66,0x6d,0x7f,0x5c,0x62,0x76,0x50,0x56,0x6b,0x43,0x4a,0x60, 0x3e,0x45,0x5a,0x3c,0x42,0x56,0x39,0x3e,0x52,0x3f,0x45,0x58,0x3c,0x42,0x56,0x4e, 0x54,0x67,0x72,0x76,0x84,0x6e,0x73,0x81,0x57,0x5f,0x79,0x5d,0x4e,0x66,0x59,0x4d, 0x66,0x50,0x4c,0x69,0x54,0x51,0x71,0x5c,0x5d,0x78,0x66,0x67,0x7f,0x5d,0x5e,0x78, 0x48,0x4b,0x67,0x40,0x46,0x63,0x43,0x48,0x66,0x4b,0x53,0x71,0x4f,0x56,0x7c,0x4e, 0x4b,0x74,0x75,0x7f,0x9f,0x76,0x70,0x7e,0x53,0x41,0x51,0x50,0x40,0x4f,0x4f,0x3d, 0x4d,0x4d,0x3b,0x4a,0x23,0x1a,0x23,0x23,0x1a,0x23,0x2b,0x20,0x2a,0x51,0x4d,0x75, 0x52,0x4f,0x7a,0x64,0x53,0x74,0x5a,0x52,0x79,0x52,0x54,0x7e,0x52,0x57,0x82,0x52, 0x57,0x82,0x54,0x5f,0x89,0x53,0x50,0x79,0x52,0x55,0x81,0xc0,0xc6,0xd5,0xa9,0xaa, 0xb3,0x27,0x1c,0x22,0x3b,0x2d,0x36,0x3f,0x30,0x3b,0x3d,0x2e,0x39,0x43,0x33,0x3f, 0x60,0x4f,0x62,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x2f,0x31,0x39,0x86,0x91,0xaf,0x53,0x5e,0x89,0x52,0x4f, 0x7a,0x62,0x6e,0x93,0x5b,0x67,0x8f,0x52,0x5d,0x87,0x45,0x42,0x68,0x26,0x22,0x3b, 0x26,0x22,0x3b,0x50,0x51,0x7b,0x53,0x5e,0x87,0x56,0x62,0x8b,0x5c,0x68,0x90,0x51, 0x5c,0x84,0x53,0x5e,0x87,0x90,0x9a,0xb5,0x64,0x65,0x65,0x02,0x03,0x03,0x0d,0x0b, 0x0e,0x41,0x42,0x48,0x13,0x14,0x16,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x05, 0x04,0x04,0x06,0x03,0x04,0x05,0x04,0x04,0x06,0x04,0x05,0x06,0x05,0x06,0x07,0x06, 0x06,0x09,0x0c,0x0b,0x0e,0x3c,0x30,0x3b,0x45,0x37,0x45,0x47,0x4a,0x5a,0x87,0x8f, 0xaa,0x9a,0xa1,0xb6,0x93,0x9b,0xb1,0x83,0x8b,0xa7,0x99,0xa0,0xb6,0x95,0x9c,0xb3, 0x1c,0x1c,0x22,0x14,0x16,0x1a,0x14,0x16,0x1a,0x14,0x16,0x1a,0x15,0x16,0x1a,0x16, 0x17,0x1c,0x17,0x19,0x1e,0x18,0x1a,0x1e,0x16,0x18,0x1d,0x12,0x13,0x16,0x0e,0x0f, 0x12,0x0e,0x0e,0x12,0x0f,0x10,0x14,0x14,0x15,0x1a,0x18,0x1a,0x20,0x20,0x22,0x2a, 0x28,0x2b,0x37,0x34,0x39,0x48,0x56,0x5b,0x6a,0x5e,0x62,0x70,0x47,0x4c,0x5c,0x59, 0x5e,0x6a,0x55,0x5a,0x69,0x55,0x5a,0x6a,0x4e,0x55,0x67,0x4a,0x50,0x63,0x4f,0x54, 0x63,0x56,0x5a,0x67,0x54,0x59,0x66,0x40,0x46,0x5c,0x43,0x47,0x5f,0x73,0x78,0x86, 0x5c,0x61,0x6f,0x43,0x48,0x56,0x58,0x5b,0x62,0x78,0x76,0x7e,0x71,0x6f,0x77,0x51, 0x4f,0x58,0x4d,0x49,0x50,0x47,0x45,0x4c,0x90,0x92,0x9d,0x9a,0xa0,0xb1,0x81,0x88, 0xa0,0x6c,0x73,0x8f,0x58,0x63,0x82,0x56,0x61,0x82,0x55,0x60,0x83,0x53,0x5c,0x7f, 0x4f,0x58,0x7a,0x41,0x4a,0x66,0x3a,0x39,0x55,0x50,0x49,0x6a,0x62,0x59,0x76,0x6a, 0x5b,0x70,0x61,0x50,0x6b,0x41,0x3f,0x5b,0x11,0x12,0x18,0x12,0x14,0x1a,0x11,0x12, 0x17,0x21,0x1e,0x26,0x2a,0x28,0x40,0x2f,0x29,0x3f,0x52,0x49,0x6a,0x58,0x4f,0x71, 0x5d,0x51,0x74,0x5e,0x51,0x75,0x5e,0x52,0x75,0x5e,0x52,0x76,0x5e,0x53,0x76,0x5e, 0x53,0x76,0x5f,0x53,0x76,0x5f,0x52,0x76,0x5e,0x53,0x76,0x5e,0x53,0x75,0x56,0x51, 0x77,0x55,0x60,0x85,0x58,0x58,0x69,0x18,0x1a,0x20,0x17,0x1a,0x21,0x1a,0x1a,0x24, 0x1c,0x1c,0x26,0x17,0x18,0x20,0x14,0x16,0x1c,0x11,0x12,0x16,0x57,0x48,0x5a,0x55, 0x59,0x83,0x4d,0x49,0x6d,0x3d,0x3a,0x55,0x4d,0x4b,0x73,0x50,0x4e,0x78,0x51,0x4f, 0x78,0x51,0x4f,0x79,0x51,0x50,0x7a,0x52,0x52,0x7c,0x52,0x54,0x7e,0x52,0x58,0x81, 0x51,0x5c,0x86,0x53,0x5e,0x87,0x55,0x60,0x88,0x59,0x63,0x8b,0x5c,0x67,0x8b,0x61, 0x6c,0x8e,0x71,0x7a,0x97,0x7e,0x86,0x9e,0x83,0x8a,0x9e,0x90,0x93,0xa0,0x7a,0x79, 0x84,0x4d,0x45,0x53,0x74,0x76,0x87,0x55,0x5d,0x7b,0x4c,0x50,0x6e,0x4b,0x4d,0x6a, 0x4b,0x4f,0x6b,0x4f,0x52,0x6f,0x67,0x6b,0x80,0x26,0x29,0x32,0x2e,0x31,0x3c,0x33, 0x34,0x42,0x32,0x33,0x40,0x2f,0x2f,0x3c,0x2f,0x2e,0x3a,0x30,0x30,0x3c,0x34,0x34, 0x41,0x36,0x36,0x42,0x35,0x34,0x42,0x34,0x32,0x40,0x33,0x31,0x3f,0x32,0x30,0x3d, 0x2f,0x2d,0x3a,0x2b,0x2a,0x36,0x29,0x28,0x34,0x29,0x28,0x34,0x2a,0x28,0x35,0x2a, 0x29,0x35,0x29,0x27,0x34,0x27,0x26,0x31,0x25,0x23,0x2e,0x1d,0x1c,0x27,0x18,0x1a, 0x22,0x17,0x19,0x22,0x17,0x19,0x22,0x16,0x17,0x1f,0x16,0x16,0x1e,0x15,0x16,0x1d, 0x13,0x15,0x1b,0x12,0x12,0x19,0x12,0x12,0x18,0x10,0x10,0x16,0x0f,0x0f,0x15,0x0e, 0x0e,0x13,0x0d,0x0d,0x11,0x0c,0x0c,0x11,0x0c,0x0b,0x10,0x0b,0x0b,0x0f,0x0a,0x0a, 0x0e,0x0a,0x0a,0x0e,0x09,0x09,0x0c,0x09,0x09,0x0c,0x09,0x08,0x0b,0x08,0x08,0x0a, 0x07,0x07,0x0a,0x07,0x06,0x09,0x06,0x06,0x09,0x07,0x06,0x09,0x06,0x06,0x08,0x06, 0x06,0x08,0x06,0x06,0x08,0x06,0x06,0x07,0x05,0x05,0x06,0x05,0x05,0x06,0x04,0x04, 0x06,0x04,0x04,0x06,0x03,0x03,0x05,0x03,0x03,0x05,0x03,0x03,0x05,0x03,0x03,0x05, 0x03,0x03,0x05,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x03, 0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x09,0x0a,0x0c,0x74,0x80,0xa2,0x54,0x60,0x8a,0x52,0x4f,0x7a,0x56,0x50,0x79,0x55, 0x50,0x79,0x54,0x50,0x79,0x54,0x50,0x79,0x53,0x4f,0x7a,0x53,0x4f,0x7a,0x52,0x4f, 0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x6b,0x66,0x9e, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x06,0x05,0x06,0x09, 0x08,0x0b,0x0f,0x0e,0x12,0x13,0x11,0x16,0x17,0x16,0x1e,0x20,0x21,0x2d,0x2a,0x2a, 0x39,0x30,0x36,0x45,0x45,0x4a,0x58,0x5b,0x5f,0x6c,0x62,0x67,0x75,0x6c,0x71,0x7c, 0x73,0x77,0x82,0x6a,0x6f,0x81,0x6e,0x74,0x83,0x70,0x76,0x86,0x8a,0x8f,0x9b,0x9b, 0x9f,0xa9,0x97,0x9b,0xa6,0x81,0x86,0x97,0x6d,0x71,0x86,0x5a,0x5e,0x76,0x4e,0x51, 0x6a,0x4a,0x4b,0x64,0x46,0x44,0x58,0x45,0x42,0x55,0x46,0x44,0x57,0x52,0x4e,0x65, 0x54,0x50,0x67,0x54,0x50,0x66,0x56,0x50,0x66,0x56,0x4f,0x64,0x55,0x4e,0x63,0x46, 0x41,0x53,0x3e,0x38,0x47,0x3c,0x35,0x43,0x40,0x39,0x48,0x3d,0x36,0x47,0x34,0x31, 0x41,0x2c,0x2b,0x3b,0x32,0x31,0x41,0x37,0x35,0x46,0x39,0x36,0x4a,0x34,0x33,0x46, 0x31,0x31,0x42,0x2e,0x2f,0x3f,0x2a,0x2d,0x3b,0x2a,0x2d,0x3b,0x2c,0x2f,0x3e,0x2f, 0x33,0x42,0x32,0x37,0x47,0x39,0x3e,0x4e,0x52,0x57,0x66,0x46,0x4c,0x5f,0x40,0x40, 0x57,0x47,0x42,0x58,0x4e,0x44,0x58,0x49,0x42,0x57,0x45,0x43,0x5b,0x48,0x47,0x62, 0x47,0x48,0x62,0x48,0x4e,0x66,0x4e,0x55,0x6b,0x4f,0x56,0x6a,0x4a,0x50,0x63,0x54, 0x5a,0x6c,0x59,0x5e,0x6f,0x63,0x6a,0x7a,0x60,0x65,0x76,0x59,0x5f,0x70,0x52,0x58, 0x6b,0x42,0x4a,0x5e,0x40,0x46,0x5b,0x3e,0x43,0x56,0x36,0x3a,0x4b,0x43,0x48,0x56, 0x52,0x57,0x68,0x4c,0x52,0x67,0x5b,0x62,0x75,0x62,0x67,0x78,0x67,0x6f,0x86,0x4f, 0x48,0x63,0x50,0x49,0x65,0x58,0x58,0x74,0x53,0x53,0x6e,0x59,0x59,0x73,0x59,0x5a, 0x74,0x58,0x59,0x74,0x4e,0x51,0x70,0x44,0x47,0x66,0x43,0x49,0x69,0x4a,0x50,0x70, 0x51,0x59,0x7b,0x4d,0x4e,0x76,0x61,0x6d,0x92,0x8c,0x8c,0x9e,0x4e,0x3d,0x4b,0x52, 0x41,0x50,0x50,0x3f,0x4e,0x4c,0x3b,0x4a,0x25,0x1b,0x24,0x23,0x19,0x23,0x27,0x1c, 0x26,0x50,0x4b,0x71,0x52,0x4f,0x7a,0x64,0x52,0x73,0x5e,0x53,0x79,0x52,0x53,0x7e, 0x52,0x55,0x81,0x52,0x57,0x82,0x53,0x5f,0x89,0x52,0x50,0x7b,0x52,0x4f,0x7a,0xb2, 0xb9,0xcb,0xcc,0xd0,0xd9,0x25,0x1a,0x20,0x3a,0x2b,0x35,0x41,0x32,0x3d,0x3f,0x30, 0x3a,0x3f,0x30,0x3a,0x65,0x51,0x65,0x05,0x05,0x07,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x0a,0x0b,0x91,0x9a,0xb3,0x62, 0x6d,0x94,0x54,0x50,0x79,0x5c,0x67,0x8f,0x5f,0x6b,0x91,0x52,0x5d,0x87,0x39,0x36, 0x57,0x26,0x22,0x3b,0x42,0x3e,0x62,0x52,0x55,0x80,0x54,0x5f,0x88,0x58,0x64,0x8b, 0x5b,0x66,0x8f,0x5a,0x65,0x8d,0x51,0x4f,0x7a,0x74,0x7f,0xa1,0xba,0xbb,0xbe,0x02, 0x02,0x02,0x02,0x02,0x03,0x02,0x03,0x03,0x02,0x03,0x03,0x02,0x02,0x03,0x02,0x02, 0x03,0x02,0x03,0x04,0x03,0x04,0x05,0x03,0x04,0x05,0x03,0x04,0x05,0x04,0x05,0x06, 0x05,0x05,0x06,0x06,0x06,0x08,0x06,0x06,0x08,0x0d,0x0b,0x0f,0x40,0x32,0x3e,0x46, 0x38,0x46,0x57,0x51,0x69,0x73,0x7c,0x9a,0x98,0xa0,0xb5,0x81,0x8a,0xa7,0x98,0x9f, 0xb6,0x97,0x9f,0xb5,0x55,0x53,0x63,0x10,0x12,0x16,0x11,0x12,0x16,0x11,0x12,0x16, 0x12,0x14,0x18,0x13,0x15,0x19,0x14,0x16,0x1a,0x14,0x15,0x19,0x11,0x12,0x16,0x0e, 0x0f,0x13,0x0c,0x0d,0x10,0x0a,0x0b,0x0e,0x0b,0x0d,0x10,0x10,0x12,0x16,0x14,0x16, 0x1a,0x16,0x18,0x1e,0x1c,0x1e,0x25,0x24,0x27,0x32,0x37,0x3b,0x48,0x67,0x6a,0x72, 0x3a,0x3e,0x4a,0x36,0x3a,0x46,0x50,0x54,0x60,0x59,0x5e,0x6a,0x55,0x5a,0x69,0x4a, 0x50,0x62,0x3a,0x3f,0x52,0x3a,0x40,0x4f,0x46,0x4b,0x5b,0x46,0x4c,0x5e,0x47,0x4d, 0x60,0x63,0x69,0x76,0x7e,0x82,0x8a,0x74,0x76,0x7c,0x3e,0x41,0x48,0x60,0x5e,0x69, 0x6b,0x6a,0x74,0x6f,0x6d,0x76,0x50,0x4e,0x56,0x47,0x44,0x4b,0x89,0x8c,0x96,0x8f, 0x97,0xa9,0x7f,0x86,0x9e,0x6c,0x76,0x92,0x59,0x65,0x85,0x57,0x62,0x85,0x57,0x62, 0x86,0x55,0x60,0x84,0x52,0x5d,0x82,0x4b,0x54,0x77,0x3d,0x3f,0x5d,0x3d,0x39,0x54, 0x62,0x53,0x71,0x59,0x4b,0x66,0x5a,0x49,0x64,0x3d,0x3c,0x5b,0x0f,0x11,0x16,0x11, 0x12,0x18,0x0f,0x11,0x16,0x1e,0x1c,0x23,0x2a,0x2d,0x44,0x32,0x2e,0x46,0x4e,0x46, 0x67,0x57,0x4d,0x70,0x5c,0x51,0x76,0x5e,0x51,0x75,0x5e,0x52,0x75,0x5e,0x53,0x76, 0x5e,0x53,0x76,0x5e,0x53,0x76,0x5e,0x53,0x76,0x5f,0x53,0x77,0x5e,0x54,0x76,0x5e, 0x53,0x76,0x59,0x53,0x77,0x54,0x5e,0x84,0x57,0x59,0x6a,0x18,0x1a,0x20,0x17,0x19, 0x1f,0x16,0x19,0x1e,0x18,0x1a,0x20,0x16,0x17,0x1c,0x14,0x16,0x1a,0x0f,0x10,0x14, 0x53,0x45,0x56,0x53,0x55,0x7d,0x4d,0x4a,0x6e,0x3c,0x39,0x55,0x51,0x4d,0x73,0x51, 0x4f,0x78,0x51,0x4f,0x78,0x51,0x4f,0x78,0x51,0x4f,0x79,0x52,0x52,0x7c,0x52,0x53, 0x7c,0x52,0x55,0x7f,0x52,0x5b,0x84,0x53,0x5d,0x86,0x55,0x60,0x88,0x58,0x63,0x8b, 0x5b,0x65,0x89,0x5d,0x68,0x8a,0x61,0x6b,0x8c,0x69,0x71,0x8f,0x74,0x7c,0x95,0x7d, 0x84,0x9a,0x88,0x8f,0xa0,0x92,0x98,0xa7,0x78,0x80,0x96,0x59,0x61,0x81,0x52,0x5c, 0x7a,0x4e,0x52,0x6f,0x4e,0x51,0x6e,0x4f,0x52,0x6f,0x5a,0x5d,0x7a,0x4b,0x4d,0x57, 0x2b,0x2e,0x39,0x30,0x31,0x3d,0x2f,0x30,0x3d,0x2c,0x2d,0x39,0x2e,0x2e,0x3a,0x31, 0x30,0x3c,0x33,0x33,0x40,0x33,0x32,0x3f,0x33,0x32,0x3f,0x33,0x30,0x3e,0x30,0x2e, 0x3b,0x2e,0x2b,0x39,0x2a,0x29,0x36,0x28,0x27,0x33,0x28,0x25,0x31,0x27,0x25,0x30, 0x28,0x25,0x31,0x27,0x25,0x30,0x26,0x24,0x30,0x24,0x22,0x2d,0x1e,0x1e,0x27,0x18, 0x1a,0x22,0x17,0x19,0x21,0x17,0x18,0x20,0x16,0x17,0x1f,0x16,0x16,0x1e,0x15,0x16, 0x1d,0x13,0x15,0x1b,0x12,0x13,0x1a,0x12,0x12,0x18,0x10,0x10,0x16,0x0f,0x0f,0x15, 0x0e,0x0e,0x13,0x0e,0x0e,0x12,0x0d,0x0d,0x11,0x0c,0x0c,0x11,0x0c,0x0b,0x10,0x0b, 0x0b,0x0f,0x0a,0x0a,0x0e,0x0a,0x0a,0x0e,0x09,0x09,0x0c,0x09,0x08,0x0b,0x08,0x08, 0x0b,0x08,0x08,0x0b,0x07,0x07,0x0a,0x07,0x06,0x09,0x07,0x07,0x0a,0x07,0x06,0x09, 0x07,0x06,0x09,0x06,0x06,0x08,0x06,0x06,0x07,0x06,0x06,0x07,0x06,0x06,0x07,0x06, 0x05,0x07,0x06,0x05,0x07,0x04,0x04,0x06,0x04,0x04,0x06,0x05,0x05,0x06,0x04,0x04, 0x06,0x04,0x04,0x06,0x04,0x04,0x06,0x03,0x04,0x05,0x03,0x04,0x05,0x03,0x04,0x05, 0x03,0x03,0x05,0x03,0x03,0x04,0x03,0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x03,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7a,0x86,0xa5,0x5a,0x65,0x8e,0x52,0x4f,0x7b, 0x57,0x50,0x79,0x56,0x50,0x79,0x56,0x50,0x79,0x55,0x50,0x79,0x55,0x50,0x79,0x54, 0x50,0x79,0x54,0x50,0x79,0x54,0x50,0x79,0x54,0x50,0x79,0x54,0x50,0x79,0x54,0x50, 0x79,0x5f,0x59,0x89,0x17,0x16,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x04,0x03,0x04, 0x09,0x0a,0x0c,0x0e,0x0f,0x13,0x11,0x12,0x17,0x18,0x1a,0x22,0x23,0x27,0x31,0x2f, 0x33,0x41,0x39,0x3e,0x4c,0x48,0x4d,0x5c,0x64,0x69,0x77,0x72,0x77,0x84,0x7a,0x7e, 0x8a,0x78,0x7d,0x8a,0x72,0x77,0x86,0x7f,0x84,0x90,0x86,0x8a,0x96,0x91,0x95,0xa1, 0x9c,0x9f,0xa9,0x98,0x9b,0xa6,0x86,0x89,0x98,0x6e,0x72,0x86,0x5d,0x60,0x78,0x4d, 0x4f,0x69,0x48,0x47,0x5e,0x45,0x42,0x55,0x43,0x40,0x52,0x46,0x43,0x56,0x50,0x4c, 0x62,0x4e,0x4c,0x60,0x4d,0x46,0x59,0x4c,0x43,0x55,0x4d,0x45,0x57,0x4d,0x45,0x56, 0x4a,0x41,0x52,0x46,0x3b,0x4b,0x43,0x38,0x46,0x42,0x37,0x45,0x42,0x36,0x45,0x40, 0x36,0x43,0x39,0x32,0x3e,0x34,0x2e,0x3b,0x32,0x2e,0x3c,0x34,0x30,0x3f,0x35,0x32, 0x43,0x37,0x33,0x45,0x3c,0x38,0x4a,0x41,0x3b,0x4d,0x3c,0x37,0x48,0x34,0x32,0x41, 0x32,0x30,0x3f,0x32,0x2f,0x3f,0x32,0x31,0x42,0x32,0x30,0x41,0x34,0x34,0x47,0x38, 0x37,0x4a,0x45,0x3d,0x4e,0x48,0x3b,0x4a,0x46,0x39,0x47,0x4e,0x40,0x50,0x4f,0x47, 0x5d,0x47,0x46,0x5f,0x46,0x46,0x5f,0x4b,0x4c,0x66,0x4d,0x4e,0x66,0x44,0x44,0x58, 0x49,0x43,0x54,0x43,0x46,0x5a,0x4f,0x54,0x67,0x4c,0x52,0x65,0x4b,0x52,0x65,0x4c, 0x52,0x64,0x46,0x4b,0x5e,0x3e,0x45,0x58,0x3d,0x42,0x56,0x3a,0x40,0x50,0x2f,0x33, 0x41,0x32,0x36,0x45,0x4b,0x51,0x62,0x56,0x5c,0x70,0x58,0x5e,0x71,0x5c,0x62,0x73, 0x73,0x7a,0x91,0x84,0x80,0x8f,0xa1,0x9a,0xa7,0x7d,0x7a,0x8d,0x4e,0x4d,0x69,0x4d, 0x4c,0x6b,0x4f,0x4f,0x6f,0x52,0x54,0x73,0x4d,0x50,0x72,0x4a,0x4d,0x6f,0x44,0x4a, 0x6a,0x49,0x4f,0x6e,0x54,0x5d,0x7e,0x4c,0x56,0x7e,0x58,0x62,0x89,0xa0,0xa7,0xbc, 0x46,0x37,0x44,0x51,0x40,0x50,0x51,0x3f,0x4e,0x4c,0x3b,0x48,0x26,0x1d,0x27,0x23, 0x19,0x22,0x24,0x1a,0x23,0x50,0x49,0x6c,0x52,0x4f,0x7a,0x64,0x53,0x76,0x5f,0x53, 0x77,0x52,0x52,0x7d,0x52,0x53,0x7e,0x52,0x58,0x83,0x52,0x5d,0x88,0x52,0x5a,0x84, 0x5e,0x53,0x79,0xa1,0xaa,0xc1,0xe7,0xe9,0xef,0x3d,0x33,0x38,0x38,0x2a,0x33,0x42, 0x32,0x3d,0x41,0x31,0x3c,0x40,0x31,0x3b,0x5b,0x48,0x59,0x17,0x17,0x20,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x5d,0x62,0x72,0x74,0x80,0xa2,0x52,0x53,0x7e,0x52,0x5d,0x88,0x65,0x71,0x95,0x54, 0x60,0x89,0x3a,0x38,0x5a,0x26,0x22,0x3b,0x4f,0x50,0x79,0x52,0x5d,0x85,0x55,0x60, 0x89,0x5b,0x66,0x8d,0x5d,0x6a,0x90,0x61,0x6c,0x93,0x51,0x51,0x7c,0x5d,0x69,0x8f, 0xc9,0xce,0xda,0x25,0x25,0x25,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02, 0x02,0x03,0x02,0x02,0x03,0x02,0x03,0x04,0x02,0x03,0x04,0x03,0x03,0x04,0x04,0x04, 0x06,0x04,0x04,0x06,0x05,0x06,0x07,0x06,0x06,0x08,0x06,0x06,0x08,0x06,0x06,0x09, 0x09,0x09,0x0c,0x37,0x2b,0x37,0x4a,0x3d,0x4b,0x55,0x4c,0x63,0x5f,0x69,0x8d,0x7a, 0x84,0xa2,0x95,0x9c,0xb4,0x97,0x9e,0xb5,0x90,0x95,0xab,0x14,0x16,0x1a,0x0f,0x10, 0x15,0x0e,0x0f,0x13,0x0f,0x11,0x15,0x10,0x12,0x16,0x12,0x12,0x16,0x10,0x11,0x15, 0x0e,0x0f,0x12,0x0d,0x0e,0x11,0x0a,0x0a,0x0e,0x0a,0x0a,0x0d,0x0a,0x0b,0x0e,0x12, 0x13,0x1a,0x15,0x16,0x1d,0x12,0x13,0x17,0x13,0x15,0x19,0x16,0x18,0x1e,0x1c,0x1e, 0x26,0x2a,0x2d,0x37,0x46,0x49,0x52,0x36,0x3a,0x46,0x35,0x3a,0x48,0x42,0x46,0x54, 0x4e,0x52,0x5e,0x4f,0x54,0x61,0x3b,0x3f,0x4e,0x35,0x39,0x48,0x3b,0x41,0x50,0x46, 0x4b,0x5b,0x57,0x5c,0x69,0x5e,0x62,0x6f,0x76,0x79,0x83,0x8e,0x8f,0x93,0x78,0x7a, 0x7e,0x59,0x57,0x62,0x5d,0x5c,0x66,0x65,0x64,0x6d,0x57,0x55,0x5e,0x4b,0x49,0x50, 0x84,0x85,0x8e,0x83,0x8a,0x9e,0x71,0x7a,0x93,0x6a,0x73,0x90,0x5b,0x65,0x86,0x59, 0x64,0x88,0x58,0x65,0x88,0x56,0x63,0x87,0x55,0x60,0x86,0x51,0x5c,0x80,0x46,0x48, 0x6a,0x3d,0x39,0x58,0x46,0x39,0x50,0x4d,0x39,0x4d,0x5b,0x46,0x5e,0x3d,0x3e,0x5d, 0x0f,0x11,0x16,0x0f,0x11,0x16,0x0e,0x10,0x15,0x1d,0x1a,0x21,0x31,0x34,0x4a,0x31, 0x2e,0x47,0x4d,0x45,0x66,0x56,0x4d,0x6f,0x5b,0x51,0x76,0x5e,0x51,0x75,0x5e,0x52, 0x76,0x5e,0x53,0x76,0x5f,0x52,0x76,0x5f,0x53,0x77,0x5f,0x53,0x76,0x5f,0x54,0x76, 0x5e,0x54,0x76,0x5e,0x53,0x76,0x58,0x53,0x77,0x52,0x5c,0x83,0x5b,0x5c,0x6f,0x16, 0x18,0x1e,0x18,0x1a,0x1f,0x16,0x18,0x1d,0x16,0x19,0x1e,0x15,0x16,0x1b,0x13,0x14, 0x19,0x10,0x11,0x15,0x4e,0x41,0x51,0x54,0x58,0x7e,0x4e,0x4b,0x6f,0x3c,0x39,0x55, 0x50,0x4c,0x72,0x52,0x4f,0x78,0x51,0x4e,0x78,0x51,0x4f,0x78,0x50,0x4f,0x78,0x51, 0x50,0x7a,0x52,0x52,0x7c,0x52,0x55,0x7f,0x52,0x5b,0x83,0x53,0x5e,0x86,0x55,0x5f, 0x88,0x57,0x62,0x89,0x5a,0x65,0x8a,0x5d,0x67,0x8a,0x62,0x6c,0x8c,0x67,0x72,0x8f, 0x77,0x7f,0x98,0x81,0x89,0x9e,0x83,0x8a,0xa0,0x86,0x8d,0xa1,0x85,0x8b,0xa0,0x71, 0x7a,0x94,0x5f,0x67,0x88,0x57,0x5f,0x7e,0x50,0x53,0x72,0x50,0x52,0x70,0x56,0x58, 0x75,0x6d,0x6f,0x7f,0x25,0x28,0x31,0x29,0x2b,0x36,0x2a,0x2a,0x36,0x28,0x28,0x34, 0x2b,0x2b,0x37,0x2f,0x2e,0x3b,0x31,0x30,0x3d,0x33,0x31,0x3f,0x32,0x30,0x3d,0x2e, 0x2c,0x39,0x2b,0x29,0x36,0x29,0x27,0x34,0x28,0x26,0x32,0x27,0x25,0x30,0x26,0x24, 0x30,0x25,0x23,0x2e,0x25,0x23,0x2f,0x24,0x22,0x2d,0x20,0x1f,0x29,0x1c,0x1c,0x25, 0x18,0x19,0x22,0x16,0x17,0x20,0x16,0x17,0x1f,0x16,0x16,0x1e,0x16,0x16,0x1e,0x14, 0x16,0x1c,0x13,0x14,0x1b,0x13,0x13,0x1a,0x12,0x12,0x1a,0x11,0x11,0x17,0x0f,0x0f, 0x15,0x0f,0x0f,0x14,0x0e,0x0e,0x13,0x0d,0x0d,0x12,0x0d,0x0d,0x12,0x0c,0x0c,0x10, 0x0b,0x0b,0x0f,0x0b,0x0b,0x0f,0x0a,0x0a,0x0e,0x0a,0x0a,0x0e,0x0a,0x0a,0x0e,0x09, 0x09,0x0c,0x09,0x08,0x0b,0x08,0x08,0x0b,0x08,0x08,0x0a,0x07,0x07,0x0a,0x07,0x07, 0x0a,0x07,0x07,0x0a,0x07,0x07,0x0a,0x06,0x06,0x08,0x06,0x06,0x08,0x06,0x06,0x08, 0x06,0x06,0x07,0x06,0x06,0x07,0x06,0x05,0x07,0x05,0x05,0x06,0x05,0x05,0x06,0x05, 0x05,0x06,0x05,0x05,0x06,0x05,0x05,0x06,0x04,0x04,0x06,0x04,0x04,0x06,0x03,0x04, 0x05,0x03,0x04,0x05,0x03,0x03,0x05,0x03,0x03,0x05,0x03,0x03,0x05,0x03,0x03,0x04, 0x02,0x02,0x04,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x59,0x5f,0x71,0x62,0x6d, 0x93,0x52,0x52,0x7d,0x57,0x50,0x79,0x58,0x50,0x79,0x57,0x50,0x79,0x57,0x50,0x79, 0x56,0x50,0x79,0x55,0x50,0x79,0x55,0x50,0x79,0x55,0x50,0x79,0x55,0x50,0x79,0x56, 0x50,0x79,0x55,0x50,0x79,0x59,0x54,0x80,0x4c,0x48,0x6d,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02, 0x02,0x05,0x05,0x06,0x0d,0x0e,0x12,0x1a,0x1c,0x22,0x2a,0x2d,0x33,0x36,0x39,0x42, 0x3e,0x42,0x4d,0x47,0x4c,0x58,0x52,0x56,0x64,0x5f,0x64,0x74,0x6e,0x74,0x83,0x7d, 0x81,0x8d,0x72,0x78,0x86,0x71,0x76,0x86,0x81,0x86,0x92,0x7e,0x83,0x92,0x93,0x97, 0xa2,0x9e,0xa1,0xaa,0x98,0x9a,0xa5,0x89,0x8a,0x99,0x77,0x7a,0x8c,0x62,0x66,0x7d, 0x4e,0x52,0x6a,0x48,0x46,0x5c,0x43,0x40,0x52,0x46,0x42,0x54,0x4c,0x48,0x5b,0x4e, 0x4b,0x60,0x4c,0x47,0x5a,0x48,0x42,0x54,0x45,0x3c,0x4c,0x40,0x36,0x43,0x3e,0x34, 0x42,0x3e,0x34,0x41,0x3c,0x32,0x3e,0x36,0x2b,0x36,0x35,0x2a,0x35,0x38,0x2e,0x38, 0x3a,0x2e,0x3a,0x38,0x2d,0x39,0x37,0x2e,0x3a,0x38,0x30,0x3c,0x3a,0x32,0x3e,0x3c, 0x36,0x45,0x3e,0x39,0x49,0x3e,0x36,0x46,0x40,0x39,0x48,0x46,0x3d,0x4e,0x49,0x3f, 0x50,0x49,0x40,0x52,0x46,0x3e,0x4f,0x45,0x3d,0x4e,0x44,0x3e,0x4e,0x41,0x3b,0x4b, 0x40,0x3a,0x4a,0x42,0x3b,0x4b,0x45,0x3c,0x4b,0x4b,0x3f,0x50,0x4e,0x40,0x51,0x4a, 0x3c,0x4b,0x51,0x45,0x57,0x4f,0x47,0x5d,0x4b,0x46,0x5e,0x4a,0x49,0x62,0x49,0x47, 0x5e,0x42,0x3d,0x4d,0x39,0x32,0x3d,0x43,0x3d,0x4c,0x42,0x42,0x56,0x42,0x43,0x57, 0x42,0x45,0x5a,0x3e,0x42,0x56,0x39,0x3e,0x51,0x31,0x36,0x46,0x2e,0x33,0x42,0x31, 0x34,0x3f,0x29,0x2c,0x36,0x25,0x28,0x35,0x33,0x38,0x49,0x5b,0x61,0x71,0x6d,0x71, 0x7e,0x69,0x6e,0x7a,0x7a,0x83,0x9b,0x94,0x90,0x9c,0xa4,0x9d,0xa7,0xa2,0x9d,0xa9, 0x59,0x59,0x76,0x56,0x4d,0x6b,0x50,0x4c,0x6c,0x4e,0x4e,0x70,0x4c,0x4e,0x6d,0x47, 0x49,0x6a,0x4e,0x4e,0x6e,0x3d,0x43,0x5d,0x4d,0x54,0x73,0x52,0x5b,0x80,0x53,0x5d, 0x84,0x86,0x8e,0xab,0x66,0x5d,0x68,0x4f,0x3e,0x4d,0x50,0x3e,0x4d,0x4d,0x3d,0x4a, 0x2b,0x21,0x2b,0x23,0x1a,0x23,0x22,0x19,0x22,0x4f,0x47,0x68,0x52,0x4f,0x7a,0x62, 0x53,0x77,0x64,0x53,0x76,0x52,0x52,0x7d,0x52,0x55,0x80,0x52,0x57,0x82,0x52,0x5d, 0x88,0x53,0x5e,0x88,0x62,0x4a,0x66,0x89,0x93,0xb0,0xef,0xf0,0xf5,0x5d,0x56,0x5b, 0x35,0x27,0x2f,0x43,0x33,0x3e,0x41,0x32,0x3d,0x40,0x30,0x3b,0x55,0x43,0x53,0x26, 0x26,0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x32,0x34,0x3c,0x8a,0x94,0xb1,0x57,0x63,0x8c,0x52,0x5c,0x86, 0x67,0x73,0x98,0x5a,0x65,0x8c,0x52,0x57,0x81,0x32,0x31,0x4e,0x52,0x55,0x80,0x54, 0x5f,0x88,0x57,0x63,0x8b,0x58,0x65,0x8c,0x5e,0x6a,0x90,0x5f,0x6c,0x92,0x53,0x5f, 0x89,0x51,0x5b,0x85,0x94,0x9e,0xb8,0x7d,0x7d,0x7d,0x02,0x02,0x02,0x02,0x02,0x03, 0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x03,0x04,0x02,0x03,0x04,0x02, 0x03,0x04,0x03,0x04,0x05,0x04,0x05,0x06,0x05,0x05,0x06,0x06,0x06,0x08,0x06,0x06, 0x08,0x06,0x06,0x08,0x06,0x07,0x09,0x07,0x08,0x0b,0x31,0x28,0x33,0x50,0x41,0x52, 0x56,0x4a,0x5e,0x5a,0x66,0x8b,0x7c,0x87,0xa3,0x99,0xa0,0xb5,0x97,0x9f,0xb4,0x42, 0x43,0x4e,0x0b,0x0d,0x10,0x0c,0x0e,0x11,0x0c,0x0e,0x11,0x0d,0x0e,0x12,0x0e,0x0e, 0x12,0x0d,0x0e,0x12,0x0b,0x0c,0x0f,0x0a,0x0b,0x0e,0x09,0x0a,0x0c,0x0a,0x0b,0x0e, 0x0b,0x0c,0x0f,0x0c,0x0e,0x11,0x0d,0x0f,0x13,0x0e,0x0f,0x13,0x0f,0x11,0x14,0x10, 0x11,0x16,0x11,0x12,0x16,0x16,0x18,0x1e,0x22,0x26,0x2f,0x2e,0x32,0x3e,0x2b,0x2f, 0x3e,0x31,0x36,0x44,0x43,0x48,0x56,0x52,0x56,0x63,0x3c,0x41,0x4e,0x32,0x37,0x45, 0x3a,0x3e,0x4d,0x41,0x46,0x54,0x5a,0x5e,0x6a,0x76,0x7a,0x82,0x87,0x89,0x90,0x73, 0x76,0x7e,0x8b,0x8c,0x8e,0x7e,0x7d,0x83,0x5b,0x59,0x63,0x62,0x60,0x69,0x60,0x5d, 0x66,0x49,0x48,0x4f,0x85,0x85,0x8f,0x80,0x88,0x9c,0x65,0x6e,0x8a,0x64,0x6c,0x8a, 0x5b,0x66,0x88,0x59,0x64,0x88,0x5a,0x66,0x8a,0x58,0x65,0x8a,0x56,0x60,0x88,0x52, 0x5e,0x83,0x4a,0x50,0x75,0x41,0x3f,0x60,0x42,0x37,0x4d,0x3b,0x2c,0x3d,0x4c,0x3c, 0x52,0x3e,0x41,0x5d,0x0e,0x0f,0x14,0x0e,0x10,0x15,0x0e,0x0f,0x14,0x18,0x17,0x1d, 0x36,0x39,0x4e,0x30,0x2f,0x4a,0x4d,0x44,0x64,0x56,0x4d,0x70,0x5c,0x51,0x77,0x5c, 0x52,0x77,0x5e,0x52,0x75,0x5f,0x52,0x76,0x5f,0x52,0x76,0x5f,0x53,0x77,0x5f,0x53, 0x77,0x5f,0x53,0x76,0x5e,0x53,0x76,0x5e,0x53,0x76,0x5a,0x54,0x77,0x51,0x58,0x7f, 0x58,0x5a,0x6d,0x16,0x17,0x1d,0x16,0x18,0x1e,0x16,0x17,0x1d,0x16,0x18,0x1d,0x14, 0x16,0x1a,0x12,0x14,0x19,0x10,0x12,0x16,0x48,0x3d,0x4c,0x57,0x5b,0x80,0x4f,0x4b, 0x70,0x40,0x3c,0x58,0x50,0x4b,0x71,0x54,0x50,0x77,0x51,0x4e,0x78,0x50,0x4f,0x78, 0x51,0x4f,0x78,0x51,0x4e,0x79,0x51,0x51,0x7b,0x52,0x54,0x7c,0x52,0x58,0x81,0x52, 0x5d,0x84,0x54,0x5f,0x88,0x57,0x62,0x89,0x59,0x64,0x88,0x5b,0x65,0x89,0x5f,0x69, 0x8a,0x68,0x71,0x8f,0x76,0x7f,0x99,0x82,0x8a,0xa1,0x89,0x8f,0xa4,0x8b,0x93,0xa6, 0x91,0x99,0xaa,0x90,0x96,0xab,0x71,0x79,0x96,0x62,0x6b,0x8b,0x58,0x5d,0x7a,0x52, 0x55,0x73,0x52,0x55,0x72,0x63,0x65,0x7f,0x2f,0x32,0x3b,0x21,0x22,0x2d,0x23,0x24, 0x30,0x25,0x27,0x32,0x2a,0x2a,0x36,0x2e,0x2d,0x3a,0x31,0x2f,0x3d,0x30,0x2e,0x3c, 0x2c,0x2a,0x37,0x28,0x27,0x32,0x27,0x25,0x30,0x27,0x24,0x30,0x26,0x24,0x2f,0x26, 0x23,0x2e,0x26,0x23,0x2e,0x23,0x21,0x2c,0x20,0x1e,0x28,0x1a,0x1a,0x23,0x18,0x17, 0x20,0x17,0x18,0x20,0x16,0x16,0x1e,0x15,0x16,0x1d,0x15,0x16,0x1d,0x15,0x16,0x1d, 0x15,0x15,0x1d,0x14,0x15,0x1c,0x13,0x13,0x1a,0x12,0x12,0x1a,0x12,0x12,0x18,0x10, 0x10,0x16,0x0f,0x0f,0x15,0x0e,0x0e,0x12,0x0e,0x0e,0x12,0x0d,0x0d,0x12,0x0d,0x0d, 0x11,0x0d,0x0d,0x12,0x10,0x0f,0x16,0x0c,0x0b,0x10,0x0a,0x0a,0x0e,0x0a,0x0a,0x0e, 0x0a,0x0a,0x0d,0x0a,0x0a,0x0d,0x09,0x08,0x0b,0x08,0x08,0x0b,0x08,0x08,0x0a,0x08, 0x08,0x0a,0x07,0x07,0x0a,0x07,0x07,0x0a,0x07,0x06,0x09,0x07,0x07,0x0a,0x06,0x06, 0x09,0x06,0x06,0x08,0x06,0x06,0x08,0x06,0x06,0x07,0x06,0x05,0x07,0x05,0x05,0x06, 0x05,0x05,0x06,0x05,0x05,0x06,0x05,0x05,0x06,0x05,0x05,0x06,0x04,0x04,0x06,0x04, 0x04,0x06,0x05,0x05,0x06,0x04,0x04,0x06,0x03,0x04,0x05,0x03,0x03,0x05,0x03,0x03, 0x05,0x03,0x03,0x05,0x02,0x02,0x04,0x02,0x02,0x04,0x02,0x02,0x04,0x02,0x02,0x04, 0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20, 0x22,0x28,0x67,0x74,0x98,0x52,0x5b,0x84,0x54,0x50,0x79,0x5a,0x52,0x79,0x5a,0x52, 0x79,0x58,0x50,0x79,0x58,0x50,0x79,0x57,0x50,0x79,0x57,0x50,0x79,0x57,0x50,0x79, 0x57,0x50,0x79,0x57,0x50,0x79,0x57,0x50,0x79,0x58,0x51,0x7b,0x72,0x68,0x9e,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02, 0x02,0x02,0x02,0x02,0x02,0x07,0x07,0x0a,0x18,0x19,0x1d,0x3a,0x3c,0x41,0x51,0x53, 0x58,0x4f,0x52,0x5a,0x4b,0x4e,0x5a,0x55,0x59,0x64,0x66,0x6a,0x76,0x6e,0x73,0x81, 0x72,0x77,0x85,0x67,0x6e,0x7e,0x6d,0x72,0x82,0x83,0x87,0x92,0x87,0x8c,0x97,0x8f, 0x93,0x9e,0x95,0x98,0xa2,0x92,0x93,0x9f,0x82,0x85,0x93,0x71,0x73,0x86,0x5e,0x61, 0x7a,0x4e,0x52,0x6c,0x45,0x42,0x58,0x43,0x41,0x53,0x47,0x43,0x57,0x4e,0x48,0x5c, 0x4a,0x45,0x5a,0x48,0x42,0x55,0x44,0x3e,0x4e,0x44,0x3b,0x4b,0x42,0x3a,0x49,0x3e, 0x33,0x40,0x39,0x2e,0x39,0x33,0x28,0x32,0x2b,0x22,0x2a,0x20,0x19,0x1e,0x29,0x1f, 0x27,0x32,0x28,0x32,0x39,0x2e,0x39,0x38,0x2d,0x38,0x3a,0x31,0x3d,0x3e,0x35,0x42, 0x3c,0x34,0x41,0x3d,0x34,0x42,0x3f,0x37,0x45,0x40,0x37,0x45,0x3e,0x33,0x41,0x41, 0x35,0x42,0x42,0x36,0x43,0x43,0x37,0x46,0x49,0x3c,0x4c,0x4e,0x42,0x53,0x4e,0x43, 0x54,0x44,0x3b,0x4a,0x3e,0x36,0x43,0x3a,0x32,0x40,0x3b,0x32,0x41,0x39,0x33,0x42, 0x42,0x3a,0x4a,0x42,0x39,0x47,0x45,0x3c,0x4c,0x46,0x3d,0x4e,0x48,0x3e,0x50,0x48, 0x3f,0x50,0x47,0x3e,0x4d,0x3e,0x34,0x41,0x32,0x2a,0x35,0x38,0x2f,0x3a,0x3b,0x34, 0x44,0x38,0x36,0x48,0x3a,0x38,0x4b,0x3a,0x36,0x48,0x32,0x2f,0x3e,0x2a,0x27,0x33, 0x22,0x22,0x2d,0x23,0x26,0x2e,0x22,0x25,0x2d,0x22,0x26,0x30,0x28,0x2c,0x38,0x52, 0x56,0x5f,0x6e,0x71,0x78,0x79,0x7b,0x84,0x7c,0x84,0x9a,0x7f,0x7c,0x8b,0xa6,0xa0, 0xab,0xa1,0x9b,0xa7,0x6c,0x69,0x80,0x57,0x4d,0x6b,0x50,0x4c,0x6b,0x59,0x5a,0x79, 0x60,0x61,0x7f,0x4d,0x50,0x6e,0x4d,0x4c,0x6a,0x4a,0x4d,0x6c,0x50,0x57,0x78,0x53, 0x5d,0x80,0x4e,0x58,0x80,0x70,0x7b,0x9c,0x8a,0x86,0x93,0x49,0x38,0x47,0x51,0x3f, 0x4e,0x4e,0x3d,0x4a,0x34,0x28,0x33,0x23,0x19,0x23,0x23,0x19,0x22,0x4e,0x45,0x63, 0x52,0x4f,0x7a,0x63,0x53,0x77,0x62,0x53,0x77,0x52,0x50,0x7c,0x52,0x54,0x7e,0x52, 0x55,0x81,0x52,0x5c,0x86,0x54,0x5f,0x89,0x62,0x4a,0x66,0x6e,0x7a,0x9d,0xcf,0xd2, 0xdf,0x7d,0x77,0x7c,0x31,0x24,0x2c,0x42,0x32,0x3e,0x43,0x33,0x3f,0x42,0x32,0x3d, 0x51,0x3f,0x4e,0x39,0x36,0x47,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0x0c,0x0e,0x92,0x9c,0xb6,0x6d,0x79, 0x9c,0x54,0x5f,0x89,0x5d,0x6a,0x91,0x60,0x6d,0x92,0x53,0x5e,0x87,0x52,0x57,0x81, 0x52,0x5c,0x85,0x55,0x62,0x89,0x57,0x63,0x8b,0x5c,0x69,0x8f,0x5e,0x6b,0x91,0x5f, 0x6c,0x92,0x5e,0x6b,0x91,0x51,0x51,0x7c,0x70,0x7b,0x9f,0xd4,0xd4,0xd5,0x00,0x00, 0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03, 0x02,0x02,0x03,0x02,0x03,0x04,0x03,0x03,0x04,0x04,0x04,0x06,0x04,0x05,0x06,0x05, 0x06,0x07,0x06,0x06,0x08,0x06,0x06,0x08,0x06,0x06,0x09,0x06,0x07,0x0a,0x08,0x09, 0x0b,0x33,0x2a,0x36,0x54,0x44,0x54,0x57,0x4a,0x5f,0x5b,0x66,0x8b,0x96,0x9e,0xb4, 0x99,0xa0,0xb5,0x96,0x9d,0xb3,0x0e,0x0f,0x13,0x0b,0x0c,0x10,0x0a,0x0c,0x0f,0x0a, 0x0c,0x0f,0x0b,0x0d,0x10,0x0a,0x0c,0x0e,0x0a,0x0a,0x0e,0x09,0x0a,0x0c,0x0a,0x0a, 0x0d,0x0e,0x0e,0x12,0x12,0x11,0x16,0x13,0x12,0x17,0x12,0x12,0x17,0x13,0x13,0x18, 0x12,0x13,0x1a,0x0f,0x10,0x16,0x12,0x12,0x19,0x17,0x19,0x21,0x20,0x22,0x2d,0x26, 0x29,0x36,0x2a,0x2e,0x3d,0x2f,0x33,0x43,0x3c,0x42,0x52,0x56,0x5a,0x69,0x46,0x4a, 0x58,0x42,0x46,0x54,0x4a,0x4e,0x5a,0x4e,0x52,0x5f,0x5e,0x61,0x6c,0x79,0x7b,0x84, 0x7e,0x82,0x8a,0x8c,0x8e,0x94,0x77,0x79,0x7d,0x7d,0x7c,0x80,0x63,0x5f,0x67,0x5c, 0x59,0x60,0x63,0x60,0x67,0x4e,0x4c,0x53,0x8a,0x8c,0x95,0x89,0x90,0xa3,0x64,0x6d, 0x8a,0x5d,0x67,0x87,0x59,0x65,0x87,0x58,0x65,0x88,0x5b,0x67,0x8c,0x5a,0x66,0x8c, 0x59,0x64,0x8c,0x56,0x61,0x88,0x4e,0x56,0x7d,0x49,0x48,0x6d,0x45,0x3d,0x5b,0x41, 0x30,0x43,0x44,0x37,0x4c,0x3e,0x3c,0x56,0x0e,0x0f,0x14,0x0e,0x0f,0x14,0x0d,0x0e, 0x12,0x17,0x16,0x1b,0x38,0x3a,0x4f,0x35,0x32,0x4d,0x4d,0x44,0x64,0x55,0x4d,0x70, 0x5c,0x52,0x77,0x5e,0x51,0x75,0x5e,0x52,0x75,0x5f,0x52,0x76,0x5f,0x52,0x76,0x5f, 0x52,0x76,0x5f,0x53,0x77,0x5f,0x54,0x77,0x5f,0x54,0x77,0x5f,0x54,0x76,0x5c,0x53, 0x77,0x53,0x55,0x7b,0x59,0x5a,0x70,0x15,0x16,0x1c,0x16,0x18,0x1e,0x16,0x17,0x1d, 0x15,0x16,0x1b,0x14,0x15,0x1a,0x12,0x14,0x18,0x10,0x11,0x16,0x42,0x38,0x46,0x5a, 0x5f,0x84,0x50,0x4b,0x70,0x45,0x3f,0x5c,0x53,0x4d,0x70,0x54,0x50,0x77,0x52,0x4e, 0x78,0x51,0x4f,0x78,0x51,0x4e,0x78,0x51,0x4e,0x79,0x51,0x4f,0x7a,0x51,0x53,0x7c, 0x52,0x5a,0x82,0x52,0x5d,0x86,0x53,0x5e,0x88,0x54,0x61,0x87,0x57,0x62,0x88,0x5b, 0x66,0x8a,0x5f,0x69,0x8b,0x63,0x6e,0x8d,0x72,0x7a,0x97,0x80,0x88,0xa0,0x88,0x8f, 0xa5,0x8f,0x95,0xab,0x96,0x9c,0xb0,0x99,0x9f,0xb2,0x96,0x9d,0xb0,0x72,0x7b,0x97, 0x62,0x6a,0x87,0x56,0x57,0x75,0x51,0x53,0x72,0x56,0x59,0x77,0x67,0x6a,0x77,0x1b, 0x1d,0x26,0x21,0x23,0x2d,0x26,0x27,0x32,0x2b,0x2b,0x36,0x2e,0x2c,0x39,0x2d,0x2c, 0x38,0x2b,0x2a,0x35,0x28,0x25,0x32,0x27,0x24,0x30,0x26,0x23,0x2e,0x26,0x23,0x2e, 0x25,0x22,0x2d,0x24,0x22,0x2c,0x22,0x1f,0x2a,0x1c,0x1b,0x24,0x18,0x17,0x20,0x16, 0x16,0x1e,0x15,0x16,0x1d,0x16,0x16,0x1e,0x15,0x15,0x1d,0x14,0x15,0x1c,0x14,0x15, 0x1c,0x14,0x14,0x1b,0x13,0x14,0x1a,0x13,0x13,0x1a,0x12,0x12,0x1a,0x11,0x11,0x17, 0x10,0x11,0x16,0x10,0x10,0x16,0x0e,0x0e,0x14,0x0e,0x0e,0x13,0x0e,0x0e,0x12,0x0e, 0x0e,0x12,0x0d,0x0d,0x12,0x0c,0x0c,0x11,0x1f,0x1e,0x2d,0x2e,0x32,0x41,0x0c,0x0c, 0x10,0x0a,0x0a,0x0d,0x0a,0x0a,0x0d,0x0a,0x0a,0x0d,0x08,0x08,0x0b,0x08,0x08,0x0a, 0x07,0x07,0x0a,0x07,0x07,0x0a,0x07,0x07,0x0a,0x07,0x07,0x0a,0x07,0x07,0x0a,0x07, 0x07,0x0a,0x06,0x06,0x09,0x06,0x06,0x08,0x06,0x06,0x08,0x06,0x06,0x08,0x06,0x06, 0x08,0x06,0x06,0x08,0x06,0x06,0x08,0x06,0x05,0x07,0x06,0x05,0x07,0x05,0x05,0x06, 0x05,0x05,0x06,0x05,0x05,0x06,0x05,0x05,0x06,0x05,0x05,0x06,0x04,0x04,0x06,0x04, 0x04,0x06,0x03,0x04,0x05,0x03,0x04,0x05,0x02,0x02,0x04,0x02,0x02,0x04,0x02,0x02, 0x04,0x02,0x02,0x04,0x02,0x02,0x04,0x02,0x02,0x04,0x02,0x02,0x04,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x06,0x07,0x09,0x71,0x7c,0x9f,0x54,0x60,0x89,0x52,0x4f,0x7a,0x5b, 0x52,0x79,0x5a,0x52,0x79,0x5a,0x52,0x79,0x5a,0x52,0x79,0x58,0x50,0x79,0x5a,0x52, 0x79,0x5a,0x52,0x79,0x5a,0x52,0x79,0x5a,0x52,0x79,0x58,0x50,0x79,0x58,0x50,0x79, 0x68,0x5f,0x8d,0x14,0x12,0x1b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x03,0x03,0x03,0x0f,0x0e,0x10,0x24,0x24,0x27,0x3c,0x3d,0x40,0x58, 0x59,0x5e,0x6d,0x6e,0x72,0x66,0x68,0x6e,0x62,0x65,0x6c,0x62,0x66,0x6e,0x6f,0x73, 0x7d,0x74,0x79,0x85,0x67,0x6e,0x7d,0x76,0x7b,0x88,0x8b,0x8f,0x98,0x96,0x99,0xa0, 0x9a,0x9d,0xa5,0x9c,0x9f,0xa7,0x8b,0x8e,0x9b,0x77,0x7a,0x8a,0x65,0x68,0x7e,0x52, 0x56,0x6f,0x4e,0x4e,0x68,0x4a,0x46,0x5e,0x46,0x42,0x55,0x49,0x45,0x5a,0x4a,0x45, 0x58,0x46,0x3e,0x50,0x3e,0x36,0x44,0x3e,0x36,0x45,0x41,0x3a,0x4a,0x45,0x3d,0x4e, 0x45,0x3c,0x4c,0x3d,0x32,0x3f,0x30,0x26,0x2f,0x26,0x1d,0x24,0x22,0x1a,0x21,0x1d, 0x16,0x1a,0x1f,0x18,0x1d,0x26,0x1e,0x25,0x31,0x26,0x30,0x34,0x29,0x32,0x38,0x2e, 0x39,0x3a,0x31,0x3d,0x3a,0x32,0x3f,0x3a,0x32,0x3e,0x3a,0x32,0x3f,0x3c,0x32,0x3f, 0x3e,0x32,0x3e,0x3f,0x32,0x3f,0x3b,0x2f,0x3c,0x37,0x2d,0x37,0x36,0x2c,0x36,0x39, 0x31,0x3c,0x3e,0x35,0x43,0x43,0x39,0x46,0x46,0x3b,0x4a,0x47,0x3d,0x4c,0x41,0x36, 0x42,0x3d,0x33,0x40,0x40,0x38,0x47,0x3c,0x35,0x44,0x3b,0x35,0x44,0x40,0x3a,0x4a, 0x41,0x3a,0x4a,0x42,0x39,0x49,0x42,0x38,0x46,0x42,0x36,0x45,0x34,0x2c,0x37,0x32, 0x2a,0x35,0x36,0x2e,0x3a,0x38,0x31,0x3e,0x3a,0x32,0x3f,0x36,0x2e,0x3a,0x36,0x2d, 0x3a,0x31,0x2b,0x36,0x2a,0x27,0x33,0x26,0x24,0x2f,0x1f,0x21,0x2c,0x2f,0x32,0x3a, 0x43,0x46,0x4e,0x4e,0x51,0x57,0x53,0x56,0x5a,0x66,0x68,0x6e,0x7d,0x7f,0x93,0x83, 0x7e,0x8d,0x84,0x82,0x96,0x9e,0x99,0xa6,0x89,0x84,0x95,0x60,0x5e,0x79,0x53,0x50, 0x6f,0x5e,0x5e,0x7a,0x64,0x65,0x84,0x59,0x5a,0x79,0x46,0x49,0x6a,0x46,0x4d,0x6e, 0x4d,0x55,0x77,0x55,0x5f,0x83,0x4f,0x51,0x7a,0x60,0x6a,0x90,0x9b,0x9e,0xaf,0x41, 0x32,0x3c,0x51,0x3f,0x4f,0x4d,0x3d,0x4a,0x3d,0x2f,0x3b,0x23,0x19,0x23,0x22,0x19, 0x22,0x4d,0x43,0x5f,0x52,0x4f,0x7a,0x60,0x53,0x77,0x64,0x53,0x76,0x52,0x50,0x7b, 0x52,0x54,0x7e,0x52,0x55,0x80,0x52,0x5b,0x85,0x55,0x60,0x8a,0x64,0x4d,0x6b,0x5c, 0x69,0x90,0xcf,0xd2,0xdf,0x9a,0x97,0x9c,0x2f,0x22,0x29,0x41,0x32,0x3d,0x45,0x35, 0x41,0x42,0x32,0x3e,0x4b,0x3a,0x48,0x50,0x46,0x59,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5e, 0x63,0x72,0x7b,0x85,0xa7,0x58,0x65,0x8d,0x54,0x5f,0x89,0x65,0x71,0x95,0x56,0x63, 0x8a,0x52,0x5c,0x85,0x53,0x5e,0x87,0x55,0x60,0x89,0x58,0x65,0x8c,0x5d,0x6a,0x90, 0x5e,0x6a,0x91,0x5e,0x6b,0x91,0x60,0x6d,0x93,0x52,0x57,0x81,0x5b,0x66,0x8f,0xc5, 0xca,0xd8,0x39,0x39,0x39,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x03,0x04,0x03,0x03,0x04, 0x04,0x04,0x06,0x04,0x05,0x06,0x05,0x05,0x06,0x05,0x06,0x07,0x06,0x06,0x08,0x06, 0x06,0x09,0x07,0x08,0x0a,0x0a,0x0a,0x0e,0x51,0x42,0x52,0x54,0x44,0x54,0x58,0x4b, 0x61,0x74,0x7f,0x9f,0x99,0xa1,0xb6,0x98,0x9f,0xb5,0x50,0x54,0x62,0x0a,0x0a,0x0e, 0x0a,0x0a,0x0e,0x0a,0x0a,0x0e,0x09,0x0a,0x0d,0x09,0x0a,0x0d,0x09,0x0a,0x0c,0x09, 0x0a,0x0c,0x0c,0x0c,0x10,0x12,0x11,0x16,0x13,0x12,0x17,0x14,0x13,0x18,0x16,0x15, 0x1a,0x18,0x18,0x20,0x1d,0x1e,0x28,0x16,0x17,0x1f,0x1a,0x19,0x22,0x21,0x20,0x2c, 0x21,0x21,0x2c,0x1f,0x20,0x2b,0x24,0x25,0x32,0x2c,0x2e,0x3e,0x3a,0x3e,0x4f,0x69, 0x6d,0x77,0x68,0x6d,0x79,0x5f,0x64,0x71,0x65,0x69,0x72,0x67,0x6a,0x75,0x6e,0x72, 0x7b,0x7e,0x81,0x8a,0x8a,0x8c,0x93,0x8b,0x8e,0x93,0x82,0x83,0x87,0x7f,0x7d,0x81, 0x88,0x84,0x88,0x84,0x81,0x85,0x85,0x82,0x85,0x71,0x6d,0x71,0xa3,0xa3,0xa9,0xa2, 0xa7,0xb7,0x73,0x7c,0x94,0x5f,0x69,0x88,0x59,0x64,0x86,0x59,0x65,0x88,0x5b,0x66, 0x8b,0x5b,0x68,0x8e,0x59,0x65,0x8e,0x56,0x62,0x8a,0x4f,0x59,0x82,0x4c,0x4f,0x77, 0x4c,0x47,0x6b,0x51,0x3f,0x56,0x4e,0x3f,0x57,0x3c,0x38,0x54,0x0d,0x0e,0x12,0x0e, 0x0f,0x13,0x0e,0x0e,0x13,0x13,0x12,0x17,0x39,0x3b,0x4f,0x3b,0x39,0x56,0x4b,0x44, 0x62,0x56,0x4c,0x6f,0x5c,0x51,0x77,0x5d,0x52,0x77,0x5f,0x52,0x76,0x5f,0x52,0x76, 0x5f,0x52,0x76,0x5f,0x52,0x76,0x5f,0x53,0x77,0x5f,0x53,0x76,0x5f,0x54,0x77,0x5e, 0x54,0x76,0x5c,0x54,0x77,0x53,0x52,0x79,0x58,0x5a,0x70,0x16,0x17,0x1d,0x16,0x18, 0x1e,0x15,0x17,0x1c,0x15,0x16,0x1b,0x14,0x16,0x1b,0x13,0x15,0x1a,0x10,0x12,0x16, 0x3b,0x33,0x3f,0x5c,0x61,0x87,0x4f,0x4b,0x70,0x45,0x40,0x5d,0x53,0x4c,0x70,0x56, 0x50,0x77,0x51,0x4f,0x77,0x52,0x50,0x78,0x51,0x4e,0x78,0x51,0x4e,0x78,0x51,0x4f, 0x79,0x51,0x53,0x7b,0x52,0x55,0x7f,0x52,0x5c,0x86,0x52,0x5e,0x86,0x54,0x60,0x86, 0x59,0x63,0x88,0x5b,0x66,0x8a,0x5e,0x69,0x8b,0x65,0x6f,0x90,0x6d,0x77,0x94,0x79, 0x83,0x9d,0x86,0x8e,0xa5,0x91,0x97,0xad,0x99,0xa0,0xb3,0x9f,0xa5,0xb6,0xa4,0xa9, 0xb9,0x95,0x9c,0xb1,0x6f,0x77,0x94,0x5c,0x60,0x7d,0x54,0x57,0x73,0x53,0x55,0x73, 0x6b,0x6e,0x85,0x1f,0x21,0x2a,0x21,0x23,0x2e,0x27,0x28,0x32,0x2c,0x2b,0x37,0x2b, 0x2a,0x36,0x2a,0x28,0x34,0x43,0x44,0x5b,0x2f,0x2e,0x3d,0x26,0x24,0x2f,0x25,0x23, 0x2e,0x26,0x23,0x2e,0x24,0x21,0x2c,0x1f,0x1d,0x26,0x1a,0x19,0x21,0x16,0x17,0x1e, 0x15,0x15,0x1d,0x15,0x15,0x1d,0x14,0x14,0x1b,0x13,0x14,0x1b,0x13,0x14,0x1b,0x14, 0x15,0x1b,0x13,0x14,0x1a,0x13,0x13,0x1a,0x12,0x13,0x1a,0x12,0x12,0x18,0x11,0x12, 0x17,0x10,0x11,0x16,0x10,0x10,0x16,0x0e,0x0e,0x14,0x0e,0x0e,0x13,0x0e,0x0e,0x12, 0x0e,0x0e,0x12,0x0e,0x0e,0x12,0x0d,0x0d,0x12,0x0b,0x0b,0x0f,0x24,0x21,0x30,0x66, 0x70,0x91,0x3c,0x43,0x5c,0x11,0x12,0x19,0x0b,0x0b,0x0e,0x0a,0x0a,0x0d,0x09,0x08, 0x0b,0x08,0x08,0x0a,0x09,0x09,0x0b,0x09,0x09,0x0b,0x07,0x07,0x0a,0x07,0x07,0x0a, 0x07,0x07,0x0a,0x07,0x07,0x0a,0x07,0x07,0x0a,0x07,0x06,0x0a,0x06,0x06,0x09,0x06, 0x06,0x09,0x06,0x06,0x09,0x06,0x06,0x09,0x06,0x06,0x09,0x06,0x06,0x08,0x06,0x06, 0x08,0x06,0x06,0x08,0x06,0x06,0x08,0x06,0x06,0x08,0x06,0x06,0x08,0x06,0x06,0x07, 0x05,0x05,0x06,0x04,0x04,0x06,0x03,0x04,0x05,0x04,0x04,0x06,0x03,0x04,0x05,0x03, 0x03,0x04,0x03,0x03,0x04,0x02,0x02,0x04,0x02,0x02,0x04,0x02,0x02,0x04,0x02,0x02, 0x04,0x02,0x02,0x04,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x74,0x7e,0x9c,0x5c,0x69,0x8f, 0x52,0x4f,0x7b,0x5c,0x52,0x79,0x5c,0x52,0x79,0x5b,0x52,0x79,0x5b,0x52,0x79,0x5a, 0x52,0x79,0x5a,0x52,0x79,0x5a,0x52,0x79,0x5a,0x52,0x79,0x5a,0x52,0x79,0x5a,0x52, 0x79,0x5a,0x52,0x79,0x60,0x58,0x82,0x4f,0x47,0x6a,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0x0b,0x0b,0x26,0x26,0x26,0x29,0x2a,0x2c, 0x2f,0x31,0x37,0x53,0x55,0x5a,0x70,0x72,0x76,0x7a,0x7b,0x7f,0x7a,0x7c,0x80,0x73, 0x76,0x7c,0x6e,0x72,0x7b,0x6e,0x73,0x82,0x7b,0x80,0x8c,0x97,0x9a,0xa2,0xa2,0xa5, 0xab,0xa6,0xa8,0xae,0x9c,0x9e,0xa6,0x93,0x96,0xa1,0x7a,0x7e,0x8e,0x5d,0x62,0x7a, 0x52,0x50,0x6a,0x56,0x4e,0x66,0x52,0x4c,0x62,0x4d,0x47,0x5b,0x46,0x42,0x56,0x41, 0x3c,0x4c,0x39,0x32,0x3f,0x31,0x29,0x34,0x2e,0x26,0x2f,0x34,0x2e,0x39,0x3c,0x35, 0x42,0x3f,0x37,0x46,0x3d,0x35,0x42,0x35,0x2c,0x37,0x2a,0x21,0x28,0x22,0x1a,0x20, 0x1e,0x16,0x1b,0x1a,0x13,0x17,0x18,0x12,0x16,0x1a,0x14,0x19,0x22,0x1a,0x20,0x27, 0x1e,0x25,0x2d,0x23,0x2c,0x31,0x28,0x32,0x30,0x28,0x32,0x30,0x28,0x32,0x2c,0x25, 0x2e,0x2f,0x26,0x2f,0x32,0x28,0x33,0x34,0x2a,0x34,0x35,0x2a,0x34,0x33,0x29,0x33, 0x35,0x2b,0x35,0x3a,0x2e,0x3a,0x3f,0x34,0x41,0x44,0x39,0x46,0x43,0x37,0x46,0x46, 0x3a,0x47,0x42,0x35,0x42,0x42,0x35,0x42,0x45,0x37,0x44,0x3d,0x30,0x3d,0x3f,0x33, 0x40,0x46,0x3c,0x4c,0x46,0x3e,0x50,0x46,0x3e,0x51,0x46,0x3e,0x4f,0x48,0x3d,0x4c, 0x3a,0x2e,0x3a,0x36,0x2d,0x37,0x39,0x2f,0x3c,0x3a,0x32,0x3f,0x39,0x30,0x3c,0x37, 0x2e,0x3a,0x3e,0x33,0x41,0x3c,0x32,0x40,0x38,0x2e,0x3a,0x34,0x2a,0x34,0x2e,0x29, 0x36,0x40,0x43,0x4e,0x68,0x6a,0x6e,0x65,0x66,0x6a,0x4f,0x50,0x54,0x6d,0x70,0x76, 0x90,0x8d,0x9d,0x9c,0x95,0x9f,0x87,0x83,0x95,0x6c,0x69,0x80,0x84,0x81,0x95,0x6b, 0x69,0x82,0x51,0x4c,0x69,0x54,0x54,0x71,0x56,0x59,0x79,0x4e,0x50,0x72,0x50,0x54, 0x74,0x48,0x51,0x71,0x49,0x50,0x72,0x54,0x5e,0x81,0x4f,0x58,0x7f,0x59,0x62,0x88, 0x95,0x9e,0xb6,0x4c,0x41,0x4c,0x4f,0x3d,0x4d,0x4e,0x3d,0x4a,0x40,0x32,0x3e,0x23, 0x1a,0x23,0x22,0x19,0x22,0x4c,0x41,0x5b,0x52,0x4f,0x7a,0x60,0x53,0x77,0x63,0x53, 0x77,0x52,0x50,0x7b,0x52,0x52,0x7d,0x52,0x57,0x82,0x52,0x5a,0x84,0x54,0x5f,0x89, 0x60,0x53,0x77,0x56,0x62,0x8b,0xc8,0xcc,0xda,0xb7,0xb7,0xbd,0x2b,0x1f,0x25,0x40, 0x31,0x3c,0x45,0x35,0x41,0x45,0x35,0x41,0x4a,0x39,0x46,0x62,0x50,0x64,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x34,0x36,0x3e,0x89,0x93,0xb0,0x5f,0x6b,0x92,0x52,0x5d,0x88,0x63, 0x6f,0x95,0x5a,0x66,0x8d,0x54,0x60,0x89,0x54,0x60,0x89,0x56,0x62,0x8a,0x5a,0x65, 0x8c,0x5c,0x67,0x8f,0x5c,0x69,0x8f,0x5e,0x6a,0x90,0x5e,0x6b,0x91,0x57,0x64,0x8b, 0x52,0x53,0x7e,0x9d,0xa5,0xbe,0x99,0x9a,0x9a,0x00,0x00,0x00,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x03,0x03, 0x04,0x03,0x03,0x04,0x03,0x04,0x05,0x04,0x05,0x06,0x05,0x05,0x06,0x05,0x05,0x06, 0x06,0x06,0x08,0x06,0x06,0x09,0x06,0x07,0x09,0x07,0x07,0x0a,0x13,0x12,0x16,0x51, 0x42,0x52,0x56,0x46,0x58,0x56,0x4b,0x61,0x92,0x9a,0xb3,0x98,0xa0,0xb6,0x79,0x80, 0x92,0x0a,0x0a,0x0e,0x0a,0x0a,0x0d,0x09,0x0a,0x0c,0x09,0x0a,0x0d,0x09,0x0a,0x0c, 0x09,0x09,0x0c,0x09,0x0a,0x0c,0x0f,0x0f,0x12,0x12,0x11,0x16,0x13,0x12,0x17,0x14, 0x13,0x18,0x15,0x14,0x1a,0x18,0x16,0x1d,0x1e,0x1e,0x28,0x1f,0x20,0x29,0x1e,0x1f, 0x29,0x1d,0x1e,0x28,0x18,0x18,0x20,0x16,0x16,0x1e,0x20,0x1d,0x26,0x28,0x25,0x32, 0x2a,0x2b,0x3a,0x4e,0x53,0x5f,0x6d,0x72,0x7b,0x72,0x76,0x80,0x6d,0x70,0x7a,0x6f, 0x73,0x7c,0x79,0x7c,0x86,0x83,0x86,0x8e,0x96,0x99,0x9e,0xa0,0xa2,0xa5,0xa3,0xa4, 0xa6,0xa3,0xa2,0xa5,0xa6,0xa3,0xa7,0xb2,0xaf,0xb1,0xaf,0xae,0xb0,0x94,0x91,0x93, 0xb1,0xb2,0xb6,0xa8,0xae,0xbb,0x81,0x89,0xa0,0x67,0x70,0x8d,0x59,0x65,0x87,0x58, 0x65,0x88,0x5b,0x66,0x8c,0x5b,0x68,0x8e,0x5b,0x65,0x8e,0x56,0x63,0x8b,0x50,0x5b, 0x84,0x4f,0x52,0x7a,0x4e,0x4a,0x70,0x5a,0x45,0x5f,0x5a,0x4b,0x68,0x38,0x36,0x52, 0x0c,0x0d,0x11,0x0d,0x0e,0x12,0x0b,0x0c,0x10,0x12,0x12,0x16,0x3c,0x3e,0x4f,0x3d, 0x3b,0x5b,0x4d,0x44,0x64,0x54,0x49,0x6d,0x5e,0x51,0x75,0x5e,0x52,0x75,0x5f,0x52, 0x76,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x5f,0x53,0x77,0x5f,0x53,0x76, 0x5f,0x54,0x77,0x5e,0x54,0x76,0x5e,0x54,0x76,0x53,0x52,0x78,0x56,0x59,0x70,0x16, 0x18,0x1e,0x16,0x18,0x1e,0x16,0x17,0x1d,0x16,0x17,0x1d,0x16,0x17,0x1d,0x13,0x15, 0x1a,0x10,0x12,0x16,0x36,0x2e,0x3a,0x5e,0x62,0x87,0x50,0x4d,0x70,0x45,0x3f,0x5a, 0x51,0x4a,0x6d,0x56,0x50,0x77,0x54,0x4f,0x77,0x51,0x4f,0x79,0x51,0x4f,0x78,0x51, 0x4f,0x78,0x51,0x50,0x7a,0x52,0x52,0x7b,0x52,0x55,0x7f,0x51,0x5b,0x83,0x51,0x5d, 0x86,0x55,0x60,0x87,0x58,0x63,0x88,0x5a,0x65,0x8b,0x5f,0x6b,0x8d,0x62,0x6c,0x8f, 0x6a,0x75,0x94,0x75,0x7e,0x99,0x82,0x8b,0xa4,0x90,0x97,0xad,0x99,0xa0,0xb2,0xa0, 0xa6,0xb7,0xa7,0xad,0xbc,0xa8,0xaf,0xbe,0x8e,0x96,0xac,0x6a,0x70,0x8c,0x5a,0x5d, 0x79,0x55,0x56,0x74,0x5c,0x60,0x7b,0x43,0x46,0x50,0x26,0x29,0x33,0x2a,0x2a,0x36, 0x2c,0x2b,0x37,0x2a,0x28,0x34,0x43,0x3c,0x4d,0x4c,0x4e,0x68,0x47,0x49,0x65,0x46, 0x49,0x63,0x47,0x48,0x65,0x3f,0x3e,0x55,0x2c,0x29,0x38,0x17,0x17,0x1f,0x13,0x14, 0x1b,0x14,0x15,0x1c,0x14,0x14,0x1b,0x12,0x13,0x1a,0x13,0x14,0x1a,0x12,0x13,0x1a, 0x12,0x13,0x1a,0x12,0x12,0x19,0x12,0x12,0x19,0x12,0x12,0x18,0x12,0x12,0x18,0x11, 0x11,0x17,0x10,0x10,0x16,0x10,0x10,0x16,0x0f,0x0f,0x15,0x0e,0x0e,0x13,0x0e,0x0e, 0x13,0x0e,0x0e,0x12,0x0e,0x0e,0x12,0x0d,0x0d,0x11,0x0c,0x0b,0x10,0x14,0x12,0x17, 0x4a,0x3e,0x54,0x6b,0x75,0x94,0x5a,0x64,0x89,0x5a,0x64,0x87,0x23,0x24,0x2d,0x0a, 0x0a,0x0e,0x08,0x08,0x0b,0x08,0x08,0x0b,0x08,0x08,0x0b,0x08,0x08,0x0b,0x09,0x09, 0x0b,0x08,0x08,0x0a,0x08,0x08,0x0a,0x07,0x07,0x0a,0x07,0x07,0x0a,0x07,0x06,0x0a, 0x06,0x06,0x09,0x07,0x06,0x0a,0x07,0x07,0x0a,0x07,0x07,0x0a,0x07,0x07,0x0a,0x06, 0x06,0x09,0x06,0x06,0x09,0x06,0x06,0x09,0x06,0x06,0x08,0x06,0x06,0x08,0x06,0x06, 0x08,0x06,0x06,0x08,0x06,0x06,0x07,0x06,0x06,0x07,0x05,0x05,0x06,0x05,0x05,0x06, 0x04,0x05,0x06,0x03,0x04,0x05,0x03,0x03,0x05,0x03,0x03,0x05,0x03,0x03,0x04,0x02, 0x02,0x04,0x02,0x02,0x04,0x02,0x02,0x04,0x02,0x02,0x04,0x02,0x02,0x04,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x49,0x4f, 0x60,0x5f,0x6c,0x92,0x52,0x55,0x7f,0x5a,0x52,0x79,0x5c,0x52,0x79,0x5c,0x52,0x79, 0x5c,0x52,0x79,0x5c,0x52,0x79,0x5c,0x52,0x79,0x5c,0x52,0x79,0x5c,0x52,0x79,0x5b, 0x52,0x79,0x5c,0x52,0x79,0x5a,0x52,0x79,0x5f,0x55,0x7d,0x7b,0x6e,0xa2,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x02,0x03,0x18,0x17, 0x18,0x74,0x75,0x77,0x4c,0x4f,0x53,0x5c,0x5e,0x63,0x7a,0x7a,0x7e,0x88,0x8a,0x8d, 0x8a,0x8c,0x8f,0x7f,0x81,0x87,0x71,0x76,0x81,0x86,0x8a,0x93,0x97,0x9a,0xa1,0x9f, 0xa2,0xa9,0xa3,0xa6,0xad,0xa0,0xa3,0xaa,0x8f,0x91,0x9d,0x79,0x7c,0x8e,0x5b,0x61, 0x7a,0x58,0x51,0x6a,0x57,0x4e,0x64,0x52,0x4a,0x5f,0x4c,0x43,0x56,0x46,0x41,0x52, 0x3b,0x36,0x44,0x2c,0x26,0x2f,0x22,0x1b,0x22,0x20,0x19,0x1f,0x20,0x1a,0x20,0x27, 0x21,0x29,0x2f,0x29,0x33,0x32,0x2a,0x35,0x30,0x29,0x33,0x29,0x21,0x29,0x22,0x1a, 0x20,0x1e,0x16,0x1b,0x1a,0x12,0x17,0x19,0x12,0x16,0x16,0x10,0x14,0x14,0x0e,0x12, 0x16,0x11,0x14,0x1a,0x14,0x18,0x1e,0x16,0x1b,0x1f,0x18,0x1e,0x1e,0x16,0x1c,0x1f, 0x18,0x1e,0x1d,0x16,0x1c,0x25,0x1d,0x24,0x2c,0x24,0x2b,0x36,0x2a,0x34,0x36,0x2a, 0x35,0x30,0x25,0x2e,0x2e,0x24,0x2c,0x2e,0x24,0x2d,0x32,0x26,0x30,0x3a,0x2d,0x38, 0x3e,0x30,0x3c,0x42,0x35,0x42,0x3f,0x32,0x3e,0x41,0x34,0x40,0x43,0x35,0x42,0x3d, 0x2f,0x3b,0x36,0x2a,0x35,0x32,0x26,0x2f,0x36,0x2a,0x33,0x3e,0x31,0x3d,0x3f,0x32, 0x3e,0x47,0x39,0x46,0x44,0x36,0x44,0x43,0x36,0x43,0x4a,0x3d,0x4d,0x49,0x42,0x56, 0x4a,0x3d,0x4d,0x46,0x39,0x47,0x4a,0x3d,0x4d,0x48,0x3b,0x4a,0x46,0x3a,0x4a,0x3a, 0x2e,0x3a,0x35,0x2b,0x36,0x2e,0x32,0x42,0x62,0x64,0x6a,0x5e,0x5e,0x62,0x5a,0x5c, 0x5e,0x84,0x87,0x8f,0x8f,0x88,0x97,0x9c,0x94,0x9f,0x86,0x81,0x93,0x69,0x66,0x7e, 0x5b,0x5a,0x7a,0x5b,0x5b,0x79,0x54,0x4d,0x6d,0x50,0x4c,0x6c,0x51,0x4e,0x70,0x4e, 0x4d,0x70,0x4b,0x4b,0x6e,0x48,0x4b,0x6f,0x49,0x51,0x73,0x4e,0x56,0x77,0x51,0x5a, 0x81,0x50,0x5a,0x82,0x7f,0x89,0xa7,0x6c,0x65,0x70,0x4c,0x3b,0x4a,0x4e,0x3c,0x4a, 0x45,0x36,0x43,0x23,0x1a,0x23,0x22,0x19,0x22,0x4b,0x3f,0x55,0x52,0x4f,0x7a,0x5e, 0x53,0x79,0x64,0x53,0x75,0x52,0x4f,0x7b,0x52,0x53,0x7e,0x52,0x55,0x81,0x52,0x5a, 0x84,0x54,0x60,0x8a,0x52,0x4f,0x7a,0x52,0x5a,0x84,0xc0,0xc6,0xd6,0xd5,0xd7,0xde, 0x29,0x1e,0x23,0x40,0x31,0x3c,0x46,0x36,0x42,0x45,0x35,0x41,0x46,0x35,0x42,0x69, 0x56,0x6b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0x0c,0x0e,0x7e,0x85,0x9f,0x6c,0x79,0x9c, 0x52,0x5a,0x84,0x5d,0x6a,0x91,0x60,0x6d,0x93,0x56,0x63,0x8a,0x56,0x62,0x8a,0x57, 0x63,0x8b,0x5a,0x65,0x8c,0x5b,0x66,0x8d,0x5c,0x69,0x8f,0x5e,0x6a,0x90,0x5e,0x6b, 0x91,0x5c,0x67,0x8f,0x52,0x4f,0x7a,0x71,0x7d,0x9f,0xe6,0xe6,0xe7,0x0a,0x0a,0x0b, 0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x03,0x02, 0x02,0x03,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x04,0x05,0x03,0x04,0x05,0x05,0x05, 0x06,0x05,0x05,0x06,0x05,0x06,0x07,0x06,0x06,0x08,0x06,0x07,0x09,0x06,0x07,0x09, 0x07,0x08,0x0a,0x0e,0x0d,0x10,0x4f,0x41,0x51,0x62,0x52,0x65,0x62,0x6d,0x8e,0x72, 0x77,0x84,0x14,0x15,0x1a,0x09,0x0a,0x0d,0x09,0x0a,0x0d,0x09,0x0a,0x0d,0x08,0x09, 0x0c,0x08,0x09,0x0c,0x08,0x09,0x0b,0x09,0x0a,0x0c,0x0d,0x0e,0x11,0x13,0x12,0x16, 0x13,0x12,0x17,0x13,0x12,0x17,0x15,0x13,0x19,0x16,0x16,0x1a,0x1a,0x19,0x20,0x1d, 0x1d,0x25,0x1f,0x1f,0x28,0x1b,0x1b,0x23,0x16,0x18,0x1e,0x11,0x12,0x18,0x20,0x1c, 0x25,0x2b,0x26,0x2f,0x2a,0x26,0x32,0x26,0x2a,0x37,0x3e,0x42,0x4e,0x52,0x56,0x62, 0x64,0x68,0x72,0x6a,0x6e,0x78,0x71,0x74,0x7e,0x79,0x7c,0x85,0x83,0x86,0x8e,0xa4, 0xa5,0xaa,0xab,0xac,0xae,0xac,0xac,0xaf,0xb0,0xad,0xb3,0xb8,0xb6,0xb9,0xb7,0xb6, 0xb7,0xa4,0xa2,0xa3,0xb4,0xb3,0xb6,0xa9,0xaf,0xbb,0x89,0x90,0xa4,0x74,0x7c,0x96, 0x62,0x6d,0x8c,0x5d,0x69,0x8c,0x5d,0x6a,0x8f,0x5b,0x68,0x8f,0x5b,0x65,0x8e,0x59, 0x64,0x8c,0x52,0x5c,0x85,0x50,0x54,0x7e,0x4f,0x4c,0x74,0x5c,0x46,0x63,0x5b,0x4d, 0x6c,0x39,0x38,0x55,0x0c,0x0d,0x11,0x0c,0x0e,0x12,0x0c,0x0d,0x11,0x0e,0x0e,0x12, 0x3f,0x40,0x51,0x3e,0x3d,0x5e,0x49,0x42,0x62,0x54,0x4b,0x6d,0x5c,0x51,0x77,0x5e, 0x52,0x75,0x5f,0x52,0x76,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x5f,0x53, 0x77,0x5f,0x53,0x76,0x5f,0x54,0x77,0x5e,0x54,0x76,0x5f,0x55,0x77,0x54,0x52,0x78, 0x56,0x5a,0x72,0x16,0x18,0x1e,0x16,0x18,0x1e,0x16,0x19,0x1e,0x16,0x19,0x1e,0x16, 0x18,0x1e,0x14,0x16,0x1a,0x12,0x13,0x17,0x31,0x2b,0x35,0x63,0x66,0x8d,0x51,0x4c, 0x73,0x44,0x3d,0x59,0x52,0x4b,0x6e,0x56,0x50,0x77,0x54,0x50,0x77,0x53,0x4f,0x79, 0x51,0x4f,0x79,0x52,0x4f,0x79,0x52,0x50,0x7a,0x52,0x52,0x7c,0x52,0x57,0x80,0x51, 0x5b,0x83,0x53,0x5d,0x87,0x54,0x60,0x87,0x58,0x62,0x88,0x5b,0x66,0x8b,0x5e,0x69, 0x8d,0x65,0x6f,0x91,0x69,0x74,0x94,0x74,0x7e,0x9b,0x7d,0x85,0xa1,0x8c,0x93,0xab, 0x98,0x9e,0xb2,0xa0,0xa6,0xb8,0xa7,0xad,0xbd,0xac,0xb0,0xbf,0xab,0xaf,0xbf,0x82, 0x89,0xa1,0x64,0x66,0x81,0x5c,0x5e,0x7b,0x5a,0x5e,0x7a,0x6b,0x6e,0x80,0x2a,0x2c, 0x38,0x2a,0x2b,0x36,0x2a,0x29,0x35,0x28,0x26,0x32,0x4c,0x42,0x54,0x4c,0x49,0x61, 0x46,0x47,0x63,0x46,0x42,0x5e,0x47,0x40,0x5c,0x47,0x3f,0x5d,0x47,0x44,0x61,0x49, 0x48,0x69,0x40,0x41,0x5d,0x25,0x25,0x33,0x13,0x13,0x1b,0x11,0x12,0x17,0x12,0x12, 0x18,0x11,0x11,0x17,0x12,0x12,0x18,0x12,0x12,0x18,0x11,0x11,0x17,0x11,0x11,0x17, 0x11,0x11,0x16,0x10,0x10,0x16,0x10,0x10,0x16,0x0e,0x0e,0x14,0x0e,0x0e,0x14,0x0e, 0x0e,0x12,0x0e,0x0e,0x12,0x0e,0x0e,0x12,0x0d,0x0d,0x12,0x0c,0x0c,0x10,0x0b,0x0b, 0x0f,0x44,0x37,0x46,0x4b,0x41,0x56,0x78,0x80,0x9e,0x58,0x64,0x88,0x4f,0x4d,0x76, 0x53,0x5c,0x82,0x42,0x46,0x52,0x0d,0x0e,0x11,0x09,0x08,0x0b,0x08,0x08,0x0a,0x08, 0x08,0x0b,0x08,0x08,0x0b,0x09,0x09,0x0c,0x08,0x08,0x0b,0x08,0x08,0x0a,0x07,0x07, 0x0a,0x07,0x07,0x0a,0x07,0x07,0x0a,0x07,0x07,0x0a,0x07,0x07,0x0a,0x07,0x07,0x0a, 0x07,0x07,0x0a,0x07,0x07,0x0a,0x06,0x06,0x09,0x06,0x06,0x09,0x06,0x06,0x09,0x06, 0x06,0x09,0x06,0x06,0x08,0x06,0x06,0x08,0x06,0x06,0x08,0x06,0x06,0x08,0x06,0x06, 0x08,0x06,0x06,0x07,0x05,0x05,0x06,0x04,0x05,0x06,0x04,0x05,0x06,0x03,0x04,0x05, 0x03,0x04,0x05,0x03,0x03,0x05,0x03,0x03,0x04,0x02,0x02,0x04,0x02,0x02,0x04,0x02, 0x02,0x04,0x02,0x02,0x04,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x22,0x24,0x29,0x64,0x71,0x95,0x52,0x5c,0x84,0x55,0x50,0x79,0x5d,0x52, 0x79,0x5c,0x52,0x79,0x5d,0x52,0x79,0x5c,0x52,0x79,0x5c,0x52,0x79,0x5c,0x52,0x79, 0x5c,0x52,0x79,0x5c,0x52,0x79,0x5c,0x52,0x79,0x5c,0x52,0x79,0x5e,0x52,0x7a,0x70, 0x62,0x91,0x10,0x0e,0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x0f, 0x0e,0x0f,0x51,0x51,0x53,0x4d,0x4f,0x52,0x48,0x4a,0x50,0x68,0x69,0x6e,0x7c,0x7e, 0x81,0x8a,0x8b,0x90,0x80,0x82,0x8a,0x7e,0x82,0x8a,0x7e,0x82,0x8d,0x9b,0x9d,0xa2, 0x96,0x99,0xa0,0x8e,0x92,0x9b,0x86,0x8a,0x96,0x7f,0x84,0x93,0x74,0x78,0x8a,0x62, 0x67,0x7e,0x50,0x50,0x6b,0x59,0x4f,0x65,0x51,0x47,0x5a,0x46,0x3d,0x4e,0x3c,0x34, 0x42,0x32,0x2b,0x36,0x26,0x1f,0x28,0x1d,0x17,0x1d,0x18,0x13,0x18,0x17,0x13,0x17, 0x16,0x12,0x16,0x1a,0x14,0x19,0x1a,0x15,0x1a,0x1c,0x16,0x1b,0x1d,0x16,0x1c,0x1b, 0x15,0x1a,0x1a,0x14,0x18,0x18,0x12,0x16,0x16,0x11,0x14,0x15,0x0f,0x12,0x12,0x0e, 0x11,0x12,0x0d,0x10,0x12,0x0d,0x10,0x12,0x0e,0x10,0x12,0x0e,0x10,0x14,0x0e,0x12, 0x16,0x12,0x15,0x19,0x12,0x16,0x1b,0x15,0x1a,0x23,0x1b,0x21,0x29,0x1f,0x26,0x2b, 0x22,0x2a,0x2c,0x22,0x2a,0x2a,0x20,0x28,0x27,0x1e,0x25,0x27,0x1e,0x25,0x28,0x1e, 0x26,0x2e,0x24,0x2c,0x33,0x28,0x32,0x38,0x2c,0x36,0x38,0x2c,0x36,0x39,0x2e,0x38, 0x35,0x2a,0x34,0x38,0x2b,0x35,0x2f,0x24,0x2d,0x2c,0x22,0x29,0x27,0x1e,0x23,0x2b, 0x21,0x28,0x2f,0x24,0x2d,0x37,0x2b,0x35,0x3f,0x32,0x3e,0x46,0x39,0x46,0x42,0x36, 0x42,0x43,0x36,0x43,0x48,0x3a,0x4a,0x4c,0x3e,0x4e,0x4e,0x3f,0x4f,0x4e,0x44,0x56, 0x4c,0x44,0x59,0x47,0x3e,0x4e,0x38,0x2d,0x38,0x35,0x2e,0x3b,0x36,0x3a,0x45,0x3e, 0x40,0x45,0x58,0x59,0x5a,0x8e,0x92,0xa0,0x74,0x6c,0x7e,0x74,0x6e,0x80,0x73,0x70, 0x83,0x74,0x6f,0x84,0x59,0x52,0x73,0x5b,0x54,0x75,0x59,0x59,0x77,0x63,0x63,0x7f, 0x59,0x59,0x7a,0x4f,0x4e,0x70,0x57,0x58,0x79,0x54,0x56,0x77,0x49,0x51,0x76,0x51, 0x59,0x7e,0x55,0x60,0x84,0x50,0x55,0x7e,0x6d,0x79,0x9b,0x7b,0x7a,0x8d,0x44,0x34, 0x41,0x4e,0x3c,0x4a,0x49,0x3a,0x45,0x23,0x19,0x23,0x22,0x19,0x22,0x43,0x37,0x4c, 0x52,0x4f,0x7a,0x62,0x53,0x77,0x64,0x52,0x72,0x52,0x4f,0x7a,0x52,0x52,0x7d,0x52, 0x54,0x80,0x52,0x5a,0x84,0x54,0x5f,0x89,0x52,0x57,0x82,0x52,0x4f,0x7a,0xb5,0xbc, 0xce,0xde,0xe1,0xe9,0x3a,0x31,0x37,0x3c,0x2d,0x37,0x48,0x38,0x45,0x45,0x35,0x41, 0x44,0x34,0x40,0x64,0x50,0x64,0x0e,0x0f,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x51,0x55, 0x65,0x7b,0x85,0xa7,0x53,0x5e,0x88,0x5c,0x69,0x90,0x67,0x73,0x98,0x58,0x65,0x8c, 0x56,0x63,0x8a,0x55,0x60,0x89,0x58,0x64,0x8c,0x58,0x65,0x8c,0x5c,0x67,0x8f,0x5c, 0x69,0x8f,0x5d,0x69,0x90,0x5d,0x6a,0x90,0x52,0x53,0x7e,0x56,0x62,0x8a,0xd0,0xd4, 0xdf,0x5c,0x5c,0x5d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02, 0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x03,0x04,0x02,0x03,0x04,0x03,0x03,0x04,0x03, 0x04,0x05,0x04,0x05,0x06,0x04,0x05,0x06,0x06,0x06,0x08,0x06,0x06,0x08,0x06,0x06, 0x09,0x06,0x06,0x09,0x07,0x08,0x0a,0x07,0x08,0x0a,0x08,0x09,0x0c,0x33,0x32,0x44, 0x75,0x79,0x83,0x0a,0x0a,0x0d,0x08,0x09,0x0b,0x09,0x0a,0x0d,0x09,0x0a,0x0c,0x09, 0x0a,0x0d,0x08,0x09,0x0c,0x08,0x09,0x0b,0x08,0x09,0x0b,0x07,0x08,0x0a,0x0a,0x0b, 0x0d,0x0f,0x0f,0x13,0x13,0x12,0x17,0x14,0x13,0x18,0x15,0x13,0x19,0x15,0x14,0x1a, 0x16,0x16,0x1b,0x18,0x16,0x1d,0x19,0x19,0x1e,0x1a,0x1a,0x20,0x1a,0x1a,0x21,0x16, 0x16,0x1c,0x13,0x13,0x1a,0x25,0x20,0x2a,0x2f,0x29,0x34,0x2e,0x28,0x35,0x23,0x25, 0x32,0x35,0x38,0x42,0x45,0x49,0x56,0x52,0x57,0x64,0x58,0x5c,0x69,0x61,0x65,0x70, 0x6a,0x6e,0x77,0x84,0x87,0x8e,0x9b,0x9c,0x9f,0x94,0x94,0x98,0xa8,0xa6,0xab,0xae, 0xac,0xb0,0xac,0xab,0xaf,0xa1,0x9f,0xa3,0xb1,0xb1,0xb5,0x99,0x9d,0xab,0x83,0x8b, 0x9e,0x6d,0x76,0x8f,0x65,0x6f,0x8d,0x69,0x73,0x93,0x63,0x6d,0x91,0x5d,0x6a,0x8f, 0x5a,0x65,0x8e,0x59,0x63,0x8c,0x52,0x5d,0x86,0x51,0x56,0x80,0x50,0x4d,0x77,0x5f, 0x4b,0x69,0x5e,0x50,0x70,0x39,0x39,0x54,0x0c,0x0d,0x11,0x0c,0x0d,0x11,0x0b,0x0c, 0x0f,0x0e,0x0e,0x12,0x43,0x43,0x53,0x43,0x44,0x67,0x49,0x42,0x61,0x54,0x4b,0x6d, 0x5c,0x51,0x77,0x5f,0x52,0x76,0x5f,0x52,0x76,0x60,0x53,0x77,0x60,0x53,0x77,0x60, 0x53,0x77,0x5f,0x53,0x77,0x5f,0x53,0x76,0x5f,0x54,0x77,0x5e,0x54,0x76,0x5f,0x55, 0x78,0x57,0x53,0x79,0x51,0x55,0x70,0x16,0x18,0x1e,0x17,0x1a,0x1f,0x17,0x1a,0x1f, 0x17,0x19,0x1e,0x16,0x18,0x1e,0x15,0x16,0x1b,0x12,0x14,0x18,0x2d,0x27,0x31,0x6f, 0x72,0x9d,0x55,0x4f,0x76,0x44,0x3e,0x59,0x52,0x4b,0x6d,0x56,0x50,0x77,0x59,0x51, 0x77,0x53,0x4f,0x79,0x52,0x4f,0x79,0x52,0x4f,0x79,0x52,0x51,0x7a,0x52,0x53,0x7b, 0x52,0x54,0x7d,0x51,0x56,0x80,0x53,0x5d,0x87,0x53,0x60,0x87,0x58,0x63,0x89,0x5a, 0x66,0x8b,0x5f,0x69,0x8e,0x64,0x70,0x91,0x6b,0x75,0x96,0x71,0x7a,0x9a,0x78,0x81, 0x9e,0x84,0x8d,0xa6,0x92,0x99,0xae,0xa0,0xa5,0xb7,0xa8,0xae,0xbf,0xac,0xb1,0xc0, 0xac,0xb1,0xbf,0xa8,0xae,0xbe,0x74,0x78,0x91,0x63,0x65,0x7e,0x5d,0x61,0x7c,0x6d, 0x72,0x8b,0x39,0x3c,0x46,0x26,0x28,0x33,0x24,0x24,0x2f,0x25,0x23,0x2f,0x4d,0x42, 0x54,0x4d,0x42,0x55,0x49,0x4c,0x66,0x45,0x42,0x61,0x45,0x3a,0x56,0x45,0x39,0x54, 0x44,0x39,0x52,0x42,0x39,0x55,0x43,0x3c,0x58,0x47,0x40,0x5e,0x47,0x44,0x65,0x37, 0x39,0x51,0x19,0x19,0x24,0x11,0x11,0x17,0x11,0x11,0x16,0x10,0x10,0x16,0x10,0x11, 0x16,0x11,0x11,0x16,0x10,0x10,0x16,0x0f,0x0f,0x15,0x0f,0x0f,0x15,0x0e,0x0e,0x14, 0x0e,0x0e,0x12,0x0e,0x0e,0x13,0x0e,0x0e,0x12,0x0d,0x0d,0x12,0x0c,0x0c,0x11,0x0c, 0x0c,0x10,0x2a,0x22,0x2c,0x4a,0x3b,0x4a,0x4c,0x42,0x58,0x89,0x90,0xa9,0x56,0x5f, 0x84,0x50,0x4d,0x74,0x4f,0x50,0x77,0x50,0x59,0x80,0x4c,0x53,0x71,0x15,0x15,0x1c, 0x08,0x08,0x0b,0x08,0x08,0x0a,0x08,0x08,0x0a,0x08,0x08,0x0a,0x07,0x07,0x0a,0x08, 0x08,0x0a,0x08,0x08,0x0a,0x08,0x08,0x0a,0x07,0x07,0x0a,0x07,0x07,0x0a,0x07,0x07, 0x0a,0x07,0x07,0x0a,0x07,0x07,0x0a,0x08,0x08,0x0a,0x07,0x07,0x0a,0x07,0x07,0x0a, 0x07,0x07,0x0a,0x07,0x07,0x0a,0x07,0x07,0x0a,0x07,0x07,0x0a,0x06,0x06,0x09,0x06, 0x06,0x08,0x06,0x06,0x08,0x06,0x06,0x08,0x06,0x06,0x08,0x06,0x06,0x07,0x05,0x05, 0x06,0x04,0x05,0x06,0x04,0x04,0x06,0x03,0x04,0x05,0x03,0x04,0x05,0x03,0x03,0x04, 0x03,0x03,0x04,0x02,0x02,0x04,0x02,0x02,0x04,0x02,0x02,0x04,0x02,0x02,0x03,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x0a,0x72,0x7d,0x9f,0x54,0x5f,0x88,0x55, 0x50,0x79,0x5e,0x53,0x79,0x5e,0x53,0x79,0x5e,0x53,0x79,0x5e,0x53,0x79,0x5e,0x53, 0x79,0x5e,0x53,0x79,0x5e,0x53,0x79,0x5d,0x52,0x79,0x5e,0x53,0x79,0x5e,0x53,0x79, 0x5e,0x53,0x79,0x68,0x5c,0x86,0x41,0x3a,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x03,0x02,0x03,0x1f,0x1e,0x1f,0x19,0x19,0x1c,0x1f,0x21,0x26,0x50,0x52,0x56,0x6b, 0x6e,0x72,0x77,0x7a,0x7e,0x7c,0x7e,0x87,0x83,0x86,0x8d,0x8d,0x8e,0x93,0x98,0x9a, 0x9e,0x9e,0x9f,0xa4,0x80,0x85,0x90,0x66,0x6d,0x80,0x66,0x6c,0x81,0x5e,0x65,0x7c, 0x5a,0x61,0x7a,0x52,0x58,0x73,0x52,0x51,0x6c,0x56,0x4d,0x64,0x49,0x3f,0x50,0x38, 0x30,0x3d,0x27,0x21,0x29,0x1c,0x17,0x1d,0x17,0x13,0x18,0x14,0x10,0x14,0x11,0x0e, 0x11,0x11,0x0e,0x11,0x10,0x0d,0x10,0x10,0x0d,0x0f,0x10,0x0c,0x0f,0x10,0x0d,0x0f, 0x12,0x0e,0x11,0x14,0x0f,0x12,0x15,0x10,0x13,0x14,0x0f,0x12,0x12,0x0e,0x11,0x10, 0x0c,0x0e,0x0f,0x0b,0x0e,0x0e,0x0b,0x0d,0x0e,0x0a,0x0d,0x0e,0x0a,0x0d,0x0e,0x0a, 0x0e,0x0e,0x0a,0x0e,0x11,0x0d,0x0f,0x13,0x0e,0x12,0x17,0x12,0x16,0x1c,0x16,0x1a, 0x20,0x18,0x1e,0x22,0x1a,0x20,0x27,0x1e,0x25,0x24,0x1b,0x22,0x22,0x1a,0x20,0x22, 0x1a,0x1f,0x23,0x1b,0x21,0x26,0x1d,0x23,0x2b,0x21,0x29,0x2e,0x23,0x2c,0x30,0x26, 0x2f,0x2c,0x22,0x2a,0x2d,0x24,0x2c,0x2b,0x21,0x29,0x2a,0x1f,0x27,0x2a,0x1f,0x26, 0x28,0x1e,0x26,0x28,0x1e,0x24,0x28,0x1e,0x25,0x2e,0x22,0x2a,0x36,0x2a,0x34,0x42, 0x35,0x42,0x42,0x35,0x42,0x45,0x37,0x45,0x47,0x3a,0x49,0x49,0x3b,0x4a,0x4e,0x41, 0x51,0x4f,0x46,0x5b,0x47,0x46,0x5e,0x47,0x42,0x56,0x40,0x36,0x45,0x35,0x2b,0x36, 0x2c,0x27,0x33,0x36,0x3a,0x41,0x52,0x54,0x56,0x82,0x87,0x9d,0x62,0x5c,0x71,0x56, 0x50,0x6a,0x66,0x62,0x79,0x6f,0x6a,0x7f,0x54,0x51,0x6e,0x61,0x54,0x71,0x66,0x65, 0x82,0x81,0x7d,0x93,0x64,0x62,0x7e,0x56,0x56,0x74,0x6b,0x6a,0x86,0x58,0x58,0x78, 0x49,0x4a,0x6f,0x4d,0x54,0x7b,0x55,0x60,0x84,0x4d,0x50,0x7a,0x5c,0x68,0x8a,0x7a, 0x7f,0x9c,0x42,0x33,0x3f,0x4d,0x3c,0x4a,0x4b,0x3b,0x47,0x23,0x19,0x22,0x22,0x19, 0x22,0x3c,0x30,0x42,0x52,0x4f,0x7a,0x62,0x53,0x77,0x63,0x4c,0x69,0x52,0x4f,0x7b, 0x52,0x53,0x7d,0x52,0x55,0x80,0x52,0x57,0x83,0x53,0x5f,0x89,0x56,0x62,0x8b,0x5b, 0x52,0x79,0xad,0xb4,0xc9,0xe3,0xe6,0xed,0x53,0x4c,0x52,0x38,0x2a,0x33,0x47,0x37, 0x44,0x47,0x37,0x44,0x45,0x35,0x41,0x59,0x47,0x58,0x1e,0x21,0x2b,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x2f,0x31,0x39,0x82,0x8b,0xa6,0x5b,0x67,0x8e,0x5a,0x66,0x8e,0x6b,0x76, 0x9b,0x5c,0x67,0x90,0x58,0x64,0x8b,0x57,0x63,0x8b,0x57,0x64,0x8b,0x58,0x65,0x8c, 0x5b,0x66,0x8d,0x5c,0x69,0x8f,0x5c,0x69,0x8f,0x5d,0x69,0x90,0x56,0x62,0x8a,0x52, 0x4f,0x7a,0xa2,0xaa,0xc1,0xb9,0xb9,0xbb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x03,0x04,0x02,0x03,0x04, 0x03,0x03,0x04,0x03,0x04,0x05,0x04,0x05,0x06,0x04,0x05,0x06,0x05,0x06,0x07,0x06, 0x06,0x08,0x06,0x06,0x09,0x06,0x07,0x0a,0x07,0x07,0x0a,0x07,0x07,0x0a,0x08,0x09, 0x0c,0x08,0x09,0x0c,0x07,0x08,0x0a,0x09,0x09,0x0c,0x08,0x09,0x0b,0x08,0x09,0x0c, 0x09,0x0a,0x0c,0x08,0x09,0x0c,0x08,0x09,0x0c,0x08,0x09,0x0b,0x08,0x09,0x0b,0x08, 0x09,0x0b,0x08,0x09,0x0b,0x09,0x0a,0x0c,0x0f,0x0f,0x13,0x13,0x12,0x17,0x14,0x12, 0x17,0x15,0x14,0x1a,0x16,0x15,0x1a,0x17,0x16,0x1b,0x17,0x16,0x1c,0x18,0x16,0x1d, 0x19,0x18,0x1e,0x1c,0x1d,0x24,0x18,0x19,0x20,0x15,0x14,0x1c,0x22,0x1e,0x28,0x2e, 0x29,0x34,0x30,0x2a,0x36,0x25,0x25,0x32,0x2f,0x33,0x41,0x3d,0x41,0x4f,0x52,0x56, 0x64,0x5e,0x62,0x6e,0x4f,0x53,0x60,0x5f,0x62,0x6c,0x7f,0x81,0x84,0x89,0x8a,0x8b, 0x91,0x90,0x97,0x7f,0x81,0x8f,0x67,0x6a,0x7e,0x5f,0x62,0x75,0x88,0x8b,0x98,0x85, 0x8a,0x9d,0x73,0x7b,0x90,0x5e,0x66,0x82,0x61,0x6c,0x8a,0x78,0x81,0x9d,0x6a,0x74, 0x95,0x5f,0x6b,0x8f,0x5a,0x67,0x8c,0x58,0x64,0x8c,0x53,0x5e,0x87,0x51,0x5b,0x84, 0x51,0x4e,0x78,0x61,0x4b,0x69,0x5e,0x51,0x74,0x37,0x37,0x53,0x0b,0x0d,0x10,0x0b, 0x0d,0x10,0x0a,0x0b,0x0f,0x09,0x0a,0x0d,0x47,0x45,0x53,0x47,0x50,0x73,0x49,0x42, 0x60,0x54,0x4b,0x6d,0x5c,0x51,0x77,0x5f,0x52,0x76,0x5f,0x52,0x76,0x60,0x53,0x77, 0x60,0x53,0x77,0x60,0x53,0x77,0x5f,0x53,0x77,0x5f,0x54,0x76,0x5f,0x54,0x77,0x5f, 0x55,0x76,0x5e,0x55,0x76,0x57,0x53,0x78,0x52,0x56,0x72,0x17,0x1a,0x1f,0x18,0x1a, 0x20,0x18,0x1a,0x20,0x18,0x1a,0x1f,0x18,0x1a,0x1e,0x15,0x16,0x1b,0x12,0x14,0x18, 0x26,0x22,0x2a,0x78,0x7b,0xa9,0x58,0x53,0x7b,0x43,0x3e,0x58,0x52,0x4a,0x6d,0x58, 0x51,0x77,0x59,0x52,0x77,0x55,0x51,0x78,0x53,0x50,0x79,0x52,0x50,0x79,0x52,0x50, 0x7a,0x52,0x52,0x7c,0x51,0x53,0x7b,0x52,0x58,0x81,0x52,0x5c,0x87,0x54,0x5f,0x87, 0x58,0x63,0x89,0x5b,0x67,0x8c,0x61,0x6c,0x90,0x65,0x70,0x93,0x6c,0x76,0x96,0x6f, 0x7a,0x98,0x76,0x80,0x9d,0x81,0x89,0xa5,0x8d,0x94,0xac,0x9a,0xa1,0xb4,0xa5,0xab, 0xbd,0xac,0xb0,0xc0,0xae,0xb4,0xc2,0xaf,0xb4,0xc1,0x9c,0xa0,0xb1,0x6a,0x6c,0x87, 0x60,0x64,0x7d,0x63,0x67,0x84,0x59,0x5d,0x6b,0x1e,0x21,0x2a,0x1d,0x1e,0x27,0x1d, 0x1c,0x25,0x4f,0x45,0x57,0x4f,0x42,0x56,0x4c,0x46,0x5a,0x4c,0x51,0x70,0x43,0x40, 0x60,0x43,0x39,0x55,0x42,0x37,0x50,0x40,0x37,0x4f,0x3f,0x35,0x4e,0x42,0x37,0x4f, 0x43,0x37,0x50,0x42,0x39,0x54,0x43,0x3d,0x5a,0x47,0x44,0x65,0x31,0x31,0x49,0x17, 0x17,0x21,0x0f,0x0f,0x16,0x0e,0x0e,0x14,0x0f,0x0f,0x15,0x0f,0x0f,0x15,0x0e,0x0e, 0x13,0x0e,0x0e,0x13,0x0e,0x0e,0x13,0x0e,0x0e,0x12,0x0d,0x0d,0x12,0x0d,0x0d,0x12, 0x0c,0x0c,0x11,0x0c,0x0c,0x10,0x41,0x35,0x43,0x4a,0x3b,0x4b,0x4c,0x41,0x54,0x8c, 0x93,0xac,0x50,0x59,0x80,0x56,0x4f,0x73,0x4f,0x4d,0x76,0x5c,0x50,0x71,0x5d,0x50, 0x72,0x51,0x59,0x81,0x23,0x26,0x33,0x09,0x09,0x0d,0x08,0x08,0x0b,0x09,0x08,0x0b, 0x08,0x08,0x0a,0x08,0x08,0x0a,0x08,0x08,0x0b,0x09,0x09,0x0b,0x09,0x09,0x0b,0x09, 0x09,0x0b,0x08,0x08,0x0b,0x08,0x08,0x0b,0x08,0x08,0x0b,0x09,0x09,0x0c,0x09,0x09, 0x0c,0x09,0x09,0x0c,0x08,0x08,0x0b,0x08,0x08,0x0b,0x07,0x08,0x0a,0x07,0x07,0x0a, 0x07,0x07,0x0a,0x06,0x07,0x0a,0x06,0x06,0x09,0x06,0x06,0x09,0x06,0x06,0x08,0x06, 0x06,0x07,0x06,0x06,0x07,0x05,0x06,0x07,0x04,0x05,0x06,0x04,0x05,0x06,0x04,0x04, 0x06,0x03,0x04,0x05,0x03,0x04,0x05,0x03,0x03,0x05,0x02,0x02,0x04,0x02,0x02,0x04, 0x02,0x02,0x04,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0x89,0xa7, 0x58,0x65,0x8c,0x52,0x4f,0x7a,0x5e,0x53,0x79,0x5e,0x53,0x79,0x5e,0x53,0x79,0x5e, 0x53,0x79,0x5e,0x53,0x79,0x5e,0x53,0x79,0x5e,0x53,0x79,0x5e,0x53,0x79,0x5e,0x53, 0x79,0x5e,0x53,0x79,0x5e,0x53,0x79,0x63,0x57,0x80,0x7d,0x70,0xa2,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02, 0x02,0x03,0x02,0x03,0x1c,0x1b,0x1c,0x3c,0x3b,0x3d,0x13,0x13,0x17,0x26,0x28,0x2e, 0x44,0x46,0x4b,0x5e,0x60,0x66,0x72,0x75,0x7d,0x75,0x78,0x82,0x8d,0x8e,0x92,0x8e, 0x8e,0x93,0x93,0x96,0x9a,0x8a,0x8e,0x98,0x6a,0x71,0x83,0x56,0x5e,0x76,0x5d,0x63, 0x7b,0x58,0x5e,0x78,0x56,0x5b,0x76,0x52,0x55,0x70,0x56,0x4f,0x69,0x51,0x46,0x5a, 0x42,0x37,0x46,0x2b,0x24,0x2d,0x17,0x13,0x17,0x11,0x0e,0x11,0x0e,0x0b,0x0e,0x0e, 0x0b,0x0e,0x0b,0x09,0x0b,0x0a,0x09,0x0b,0x0a,0x09,0x0a,0x09,0x06,0x08,0x0a,0x07, 0x0a,0x0c,0x0a,0x0c,0x0e,0x0a,0x0e,0x0e,0x0b,0x0e,0x0e,0x0a,0x0d,0x0e,0x0a,0x0d, 0x0d,0x0a,0x0c,0x0c,0x09,0x0a,0x0c,0x09,0x0b,0x0d,0x0a,0x0c,0x0b,0x09,0x0a,0x0b, 0x09,0x0a,0x0c,0x09,0x0a,0x0d,0x0a,0x0c,0x0f,0x0b,0x0e,0x11,0x0d,0x0f,0x14,0x0f, 0x12,0x19,0x12,0x16,0x1b,0x14,0x19,0x1e,0x16,0x1c,0x1e,0x17,0x1c,0x1e,0x17,0x1c, 0x1f,0x17,0x1c,0x1e,0x16,0x1c,0x1e,0x16,0x1b,0x1e,0x16,0x1b,0x22,0x1a,0x20,0x22, 0x1a,0x20,0x26,0x1c,0x23,0x24,0x1b,0x21,0x24,0x1c,0x22,0x26,0x1d,0x24,0x21,0x19, 0x1e,0x1f,0x17,0x1c,0x21,0x18,0x1e,0x23,0x1b,0x20,0x27,0x1d,0x25,0x2a,0x1f,0x26, 0x2d,0x22,0x2a,0x35,0x29,0x33,0x3e,0x32,0x3e,0x44,0x36,0x44,0x46,0x39,0x47,0x45, 0x38,0x46,0x4a,0x3d,0x4c,0x4c,0x42,0x55,0x47,0x42,0x56,0x42,0x3a,0x4a,0x34,0x2d, 0x39,0x28,0x27,0x36,0x2a,0x29,0x38,0x32,0x36,0x43,0x6c,0x6f,0x74,0x80,0x83,0x99, 0x5c,0x57,0x6c,0x56,0x50,0x6b,0x5a,0x56,0x71,0x63,0x5e,0x75,0x5e,0x57,0x6f,0x5e, 0x59,0x74,0x6e,0x6d,0x88,0x89,0x88,0x9c,0x7d,0x7a,0x91,0x68,0x67,0x81,0x61,0x60, 0x7c,0x54,0x55,0x76,0x4c,0x4a,0x6e,0x4c,0x53,0x79,0x51,0x5d,0x81,0x4f,0x59,0x80, 0x52,0x5c,0x82,0x79,0x85,0xa4,0x4b,0x3f,0x4c,0x49,0x39,0x46,0x4b,0x3a,0x47,0x24, 0x1a,0x23,0x22,0x19,0x22,0x37,0x2c,0x3b,0x52,0x4f,0x7a,0x5e,0x53,0x79,0x64,0x4c, 0x69,0x52,0x50,0x7b,0x52,0x52,0x7c,0x52,0x54,0x7e,0x52,0x55,0x81,0x52,0x5d,0x88, 0x57,0x64,0x8c,0x58,0x50,0x79,0x81,0x8b,0xaa,0xdd,0xe0,0xe8,0x71,0x6c,0x74,0x39, 0x2b,0x34,0x45,0x35,0x41,0x49,0x38,0x45,0x46,0x36,0x42,0x58,0x45,0x56,0x2c,0x2f, 0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x06,0x07,0x64,0x6a,0x7f,0x6e,0x7a,0x9d,0x54, 0x5f,0x8a,0x6b,0x76,0x9b,0x60,0x6c,0x93,0x58,0x64,0x8c,0x56,0x62,0x8a,0x57,0x64, 0x8b,0x58,0x64,0x8b,0x5a,0x65,0x8c,0x5b,0x67,0x8f,0x5c,0x67,0x8f,0x5c,0x67,0x8f, 0x5c,0x69,0x8f,0x54,0x50,0x79,0x72,0x7d,0x9f,0xe2,0xe4,0xea,0x22,0x22,0x22,0x00, 0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02, 0x03,0x02,0x03,0x04,0x02,0x03,0x04,0x03,0x03,0x04,0x03,0x04,0x05,0x04,0x05,0x06, 0x05,0x06,0x07,0x06,0x06,0x08,0x06,0x06,0x08,0x06,0x07,0x0a,0x06,0x07,0x0a,0x07, 0x07,0x0a,0x08,0x09,0x0b,0x08,0x09,0x0c,0x08,0x09,0x0b,0x08,0x09,0x0b,0x08,0x09, 0x0b,0x08,0x09,0x0c,0x09,0x09,0x0c,0x09,0x0a,0x0c,0x08,0x09,0x0b,0x08,0x09,0x0b, 0x08,0x09,0x0b,0x07,0x08,0x0a,0x07,0x08,0x0a,0x08,0x09,0x0b,0x08,0x09,0x0b,0x0c, 0x0d,0x10,0x11,0x11,0x15,0x14,0x13,0x18,0x15,0x13,0x19,0x16,0x15,0x1a,0x16,0x16, 0x1b,0x16,0x16,0x1b,0x17,0x16,0x1c,0x1b,0x1a,0x22,0x1e,0x1d,0x26,0x18,0x18,0x1e, 0x15,0x14,0x1c,0x1e,0x1b,0x24,0x2d,0x27,0x32,0x33,0x2d,0x38,0x30,0x2c,0x3b,0x2f, 0x31,0x42,0x36,0x3b,0x4b,0x40,0x44,0x4f,0x50,0x53,0x5e,0x5f,0x62,0x6a,0x66,0x67, 0x6d,0x66,0x69,0x6e,0x64,0x65,0x73,0x55,0x49,0x5d,0x56,0x46,0x57,0x4e,0x42,0x54, 0x63,0x5c,0x6f,0x5a,0x5e,0x79,0x51,0x59,0x75,0x50,0x55,0x74,0x57,0x5a,0x79,0x65, 0x6f,0x8e,0x65,0x6f,0x8f,0x5c,0x67,0x8b,0x58,0x64,0x8b,0x58,0x63,0x8a,0x52,0x5d, 0x87,0x52,0x5c,0x84,0x51,0x4e,0x78,0x62,0x4f,0x6c,0x5e,0x52,0x75,0x37,0x39,0x55, 0x0b,0x0c,0x10,0x0a,0x0b,0x0f,0x0a,0x0c,0x0f,0x09,0x0a,0x0c,0x49,0x46,0x52,0x50, 0x5b,0x7e,0x47,0x40,0x5e,0x55,0x4a,0x6e,0x5c,0x51,0x77,0x5f,0x52,0x76,0x5f,0x52, 0x76,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x54,0x78,0x5f,0x53,0x77,0x5f,0x54,0x77, 0x5f,0x53,0x76,0x5f,0x55,0x77,0x5f,0x55,0x77,0x5b,0x55,0x79,0x50,0x54,0x71,0x18, 0x1a,0x1f,0x19,0x1a,0x20,0x1a,0x1b,0x21,0x1a,0x1b,0x21,0x18,0x1a,0x1f,0x16,0x17, 0x1c,0x14,0x15,0x1a,0x20,0x1e,0x25,0x78,0x79,0xa2,0x59,0x55,0x7d,0x44,0x3e,0x59, 0x51,0x4b,0x6b,0x59,0x51,0x77,0x56,0x50,0x77,0x54,0x50,0x77,0x53,0x50,0x79,0x52, 0x50,0x79,0x52,0x50,0x7a,0x52,0x53,0x7c,0x51,0x55,0x7e,0x52,0x58,0x81,0x54,0x5e, 0x87,0x54,0x5f,0x87,0x58,0x63,0x89,0x5d,0x68,0x8d,0x60,0x6a,0x8e,0x65,0x70,0x93, 0x6a,0x74,0x96,0x70,0x7b,0x9a,0x75,0x7f,0x9c,0x80,0x89,0xa3,0x87,0x8f,0xa8,0x94, 0x9c,0xb1,0xa1,0xa7,0xba,0xab,0xb0,0xbf,0xae,0xb2,0xc2,0xaf,0xb4,0xc1,0xac,0xb1, 0xc0,0x8f,0x93,0xa6,0x67,0x6a,0x86,0x65,0x6b,0x87,0x51,0x53,0x69,0x1c,0x1e,0x27, 0x16,0x17,0x20,0x17,0x18,0x20,0x51,0x46,0x59,0x4c,0x41,0x54,0x41,0x37,0x46,0x55, 0x56,0x69,0x51,0x59,0x79,0x47,0x44,0x65,0x49,0x3f,0x5b,0x45,0x3b,0x53,0x44,0x3a, 0x51,0x3f,0x36,0x4e,0x3e,0x31,0x4a,0x3e,0x32,0x49,0x3c,0x30,0x47,0x3d,0x32,0x49, 0x3e,0x37,0x50,0x43,0x40,0x5d,0x4a,0x4f,0x70,0x34,0x38,0x4e,0x19,0x1b,0x24,0x0f, 0x0f,0x16,0x0f,0x0f,0x14,0x0e,0x0e,0x13,0x0e,0x0e,0x12,0x0d,0x0d,0x12,0x0e,0x0e, 0x12,0x0d,0x0d,0x12,0x0b,0x0b,0x0f,0x17,0x14,0x1b,0x4b,0x3c,0x4d,0x4a,0x3c,0x4b, 0x4c,0x41,0x56,0x7d,0x85,0xa1,0x4f,0x55,0x7c,0x5d,0x50,0x71,0x56,0x4f,0x73,0x5e, 0x4d,0x6d,0x5b,0x46,0x63,0x5f,0x4a,0x66,0x50,0x4d,0x75,0x3a,0x40,0x5b,0x11,0x11, 0x18,0x08,0x08,0x0a,0x09,0x09,0x0b,0x08,0x08,0x0b,0x09,0x09,0x0b,0x09,0x09,0x0b, 0x08,0x08,0x0b,0x09,0x09,0x0b,0x09,0x09,0x0c,0x09,0x09,0x0c,0x09,0x09,0x0c,0x09, 0x0a,0x0d,0x09,0x09,0x0c,0x08,0x08,0x0b,0x08,0x08,0x0b,0x08,0x08,0x0b,0x08,0x08, 0x0b,0x07,0x08,0x0a,0x07,0x08,0x0a,0x07,0x08,0x0a,0x07,0x07,0x0a,0x07,0x07,0x0a, 0x06,0x07,0x0a,0x06,0x07,0x0a,0x06,0x06,0x08,0x06,0x06,0x07,0x05,0x06,0x07,0x05, 0x06,0x07,0x04,0x04,0x06,0x04,0x04,0x06,0x03,0x04,0x05,0x03,0x04,0x05,0x03,0x03, 0x05,0x03,0x03,0x05,0x02,0x02,0x04,0x02,0x02,0x04,0x02,0x02,0x03,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x5c,0x62,0x75,0x5b,0x67,0x8d,0x52,0x4f,0x7b,0x5d,0x52,0x79,0x5e,0x53,0x79, 0x5e,0x53,0x79,0x5e,0x53,0x79,0x5e,0x53,0x79,0x5e,0x53,0x79,0x5e,0x53,0x79,0x5e, 0x53,0x79,0x5e,0x53,0x79,0x5e,0x53,0x79,0x5e,0x53,0x79,0x60,0x55,0x7c,0x75,0x67, 0x96,0x07,0x06,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02, 0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x03,0x22,0x21,0x22,0x3e,0x3d,0x3f,0x11,0x12, 0x17,0x27,0x2a,0x30,0x3c,0x3f,0x47,0x4a,0x4e,0x5d,0x6f,0x72,0x7d,0x7e,0x81,0x87, 0x91,0x91,0x94,0x8f,0x90,0x94,0x86,0x88,0x90,0x73,0x79,0x86,0x51,0x58,0x72,0x55, 0x5d,0x77,0x5a,0x61,0x7a,0x58,0x5e,0x79,0x52,0x57,0x72,0x55,0x50,0x6a,0x56,0x49, 0x5e,0x46,0x3a,0x49,0x33,0x2a,0x35,0x1b,0x16,0x1b,0x10,0x0d,0x10,0x0d,0x0a,0x0d, 0x0a,0x09,0x0b,0x09,0x08,0x0a,0x06,0x06,0x07,0x07,0x06,0x07,0x07,0x06,0x07,0x07, 0x06,0x07,0x08,0x06,0x08,0x0a,0x07,0x0a,0x0a,0x08,0x0a,0x07,0x06,0x06,0x04,0x02, 0x03,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02, 0x02,0x02,0x06,0x04,0x06,0x12,0x0d,0x0f,0x18,0x12,0x16,0x1a,0x12,0x17,0x18,0x12, 0x16,0x18,0x12,0x16,0x1a,0x13,0x17,0x1b,0x14,0x19,0x1a,0x13,0x18,0x1a,0x12,0x17, 0x15,0x0f,0x12,0x0c,0x0a,0x0b,0x09,0x06,0x08,0x09,0x06,0x08,0x0d,0x0a,0x0c,0x1e, 0x16,0x1c,0x1e,0x17,0x1d,0x22,0x1a,0x1f,0x1f,0x18,0x1f,0x21,0x19,0x1f,0x20,0x19, 0x1d,0x20,0x19,0x1e,0x1f,0x17,0x1d,0x22,0x1b,0x22,0x2f,0x26,0x2f,0x3d,0x31,0x3e, 0x41,0x34,0x42,0x45,0x38,0x46,0x4a,0x3e,0x4d,0x42,0x35,0x42,0x3e,0x32,0x3e,0x39, 0x2f,0x3a,0x2c,0x26,0x31,0x1e,0x1e,0x29,0x24,0x27,0x33,0x33,0x38,0x46,0x83,0x86, 0x8f,0xa1,0x9c,0xad,0x70,0x6b,0x7f,0x54,0x50,0x6c,0x52,0x49,0x66,0x4e,0x46,0x62, 0x56,0x4f,0x6a,0x80,0x79,0x8c,0x8a,0x85,0x98,0x7e,0x7b,0x91,0x8c,0x89,0x9e,0x8d, 0x8c,0xa1,0x82,0x81,0x99,0x6b,0x6d,0x8c,0x4e,0x4d,0x72,0x4b,0x4e,0x73,0x4e,0x58, 0x7e,0x50,0x5a,0x82,0x4c,0x56,0x7c,0x77,0x82,0xa1,0x5a,0x54,0x64,0x43,0x33,0x3f, 0x4b,0x3a,0x47,0x24,0x1a,0x23,0x22,0x19,0x22,0x2f,0x25,0x31,0x52,0x4f,0x7b,0x5e, 0x53,0x79,0x64,0x4d,0x6b,0x52,0x52,0x7c,0x52,0x50,0x7c,0x52,0x56,0x81,0x52,0x56, 0x82,0x52,0x5d,0x86,0x57,0x63,0x8c,0x5b,0x52,0x79,0x66,0x73,0x98,0xd2,0xd7,0xe1, 0x8e,0x8a,0x93,0x36,0x29,0x31,0x46,0x35,0x41,0x49,0x38,0x46,0x46,0x36,0x42,0x52, 0x40,0x50,0x3e,0x3b,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x43,0x51, 0x7e,0x8a,0xa9,0x52,0x58,0x84,0x6b,0x76,0x9b,0x63,0x6f,0x95,0x57,0x64,0x8b,0x55, 0x60,0x89,0x56,0x62,0x8a,0x57,0x63,0x8a,0x5a,0x65,0x8c,0x5b,0x67,0x8d,0x5b,0x67, 0x8f,0x5e,0x6a,0x91,0x5d,0x69,0x90,0x52,0x54,0x7e,0x54,0x5f,0x88,0xb5,0xbc,0xcf, 0x7c,0x7c,0x7c,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x03,0x03,0x04,0x03,0x03, 0x05,0x04,0x05,0x06,0x05,0x06,0x07,0x06,0x06,0x08,0x06,0x06,0x08,0x06,0x07,0x09, 0x06,0x06,0x09,0x07,0x08,0x0a,0x07,0x07,0x0a,0x08,0x09,0x0c,0x07,0x08,0x0a,0x07, 0x08,0x0a,0x08,0x09,0x0b,0x08,0x09,0x0c,0x07,0x08,0x0a,0x08,0x09,0x0b,0x08,0x09, 0x0b,0x08,0x09,0x0b,0x08,0x09,0x0b,0x08,0x09,0x0b,0x08,0x09,0x0b,0x07,0x08,0x0a, 0x07,0x08,0x0a,0x08,0x09,0x0b,0x0a,0x0b,0x0d,0x0f,0x0f,0x12,0x14,0x12,0x18,0x15, 0x14,0x1a,0x15,0x14,0x1a,0x16,0x16,0x1a,0x16,0x16,0x1a,0x18,0x16,0x1d,0x1a,0x1a, 0x20,0x1a,0x1a,0x20,0x1a,0x1a,0x20,0x16,0x17,0x1d,0x1b,0x1a,0x22,0x2c,0x26,0x31, 0x34,0x2e,0x3a,0x34,0x2f,0x3e,0x2f,0x2e,0x40,0x26,0x2a,0x36,0x33,0x36,0x3e,0x4c, 0x4f,0x56,0x65,0x67,0x6c,0x46,0x4a,0x52,0x3b,0x37,0x49,0x45,0x37,0x45,0x3f,0x32, 0x3e,0x43,0x35,0x43,0x64,0x59,0x68,0x69,0x62,0x79,0x57,0x54,0x6e,0x4f,0x4e,0x68, 0x40,0x45,0x5d,0x57,0x61,0x82,0x70,0x79,0x97,0x62,0x6d,0x8e,0x5a,0x66,0x8a,0x58, 0x62,0x89,0x52,0x5d,0x87,0x52,0x58,0x83,0x51,0x4e,0x79,0x62,0x4c,0x69,0x60,0x52, 0x75,0x37,0x3b,0x56,0x0b,0x0c,0x10,0x0b,0x0c,0x10,0x0a,0x0a,0x0e,0x09,0x0a,0x0c, 0x49,0x47,0x52,0x57,0x62,0x86,0x46,0x40,0x5f,0x55,0x4b,0x6e,0x5d,0x52,0x77,0x5d, 0x52,0x78,0x5f,0x52,0x76,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x54,0x78,0x60,0x53, 0x77,0x5f,0x54,0x77,0x5f,0x54,0x76,0x5f,0x55,0x77,0x5f,0x55,0x77,0x5d,0x56,0x79, 0x50,0x54,0x72,0x18,0x1a,0x20,0x19,0x1a,0x20,0x1a,0x1c,0x22,0x1a,0x1c,0x22,0x1a, 0x1b,0x21,0x16,0x18,0x1d,0x15,0x16,0x1b,0x1b,0x1b,0x20,0x76,0x76,0x9c,0x58,0x53, 0x7e,0x43,0x3e,0x59,0x52,0x4b,0x6c,0x59,0x51,0x77,0x56,0x50,0x77,0x54,0x50,0x77, 0x53,0x51,0x78,0x52,0x50,0x7a,0x52,0x50,0x7a,0x52,0x53,0x7c,0x52,0x55,0x7e,0x52, 0x5b,0x84,0x53,0x5d,0x86,0x54,0x60,0x88,0x57,0x62,0x89,0x5b,0x67,0x8b,0x5f,0x6b, 0x8f,0x65,0x70,0x93,0x68,0x73,0x95,0x6f,0x7a,0x99,0x76,0x80,0x9d,0x7b,0x85,0x9f, 0x82,0x8b,0xa5,0x8d,0x94,0xac,0x9d,0xa4,0xb6,0xa7,0xac,0xbd,0xaa,0xb0,0xc0,0xae, 0xb4,0xc2,0xaf,0xb2,0xc1,0xa9,0xac,0xbb,0x87,0x8d,0xa4,0x55,0x58,0x72,0x3e,0x3f, 0x55,0x34,0x36,0x41,0x16,0x16,0x1e,0x16,0x16,0x1e,0x52,0x47,0x5a,0x4e,0x43,0x54, 0x3f,0x35,0x43,0x32,0x29,0x35,0x5f,0x65,0x7d,0x4c,0x4d,0x71,0x53,0x4a,0x6b,0x51, 0x49,0x67,0x4d,0x43,0x60,0x4a,0x3d,0x56,0x45,0x39,0x51,0x41,0x36,0x4d,0x3c,0x30, 0x46,0x38,0x2c,0x43,0x35,0x2c,0x43,0x36,0x2f,0x47,0x3d,0x34,0x50,0x42,0x40,0x5d, 0x4c,0x4f,0x70,0x50,0x5b,0x7e,0x33,0x3a,0x51,0x13,0x14,0x1b,0x0d,0x0d,0x12,0x0d, 0x0d,0x12,0x0c,0x0c,0x11,0x0d,0x0d,0x12,0x0c,0x0c,0x10,0x30,0x29,0x34,0x5c,0x4b, 0x5f,0x50,0x41,0x52,0x4c,0x41,0x56,0x7d,0x85,0xa1,0x4f,0x56,0x7d,0x5e,0x50,0x70, 0x5e,0x4d,0x6c,0x5b,0x46,0x63,0x5b,0x45,0x61,0x5a,0x45,0x60,0x5c,0x47,0x63,0x5f, 0x50,0x6f,0x50,0x59,0x80,0x1f,0x20,0x2a,0x0a,0x0a,0x0d,0x09,0x09,0x0c,0x09,0x09, 0x0c,0x09,0x09,0x0c,0x09,0x09,0x0d,0x0a,0x0a,0x0d,0x09,0x09,0x0c,0x0a,0x0a,0x0d, 0x0a,0x0a,0x0d,0x0a,0x0a,0x0d,0x0a,0x0a,0x0e,0x0a,0x0a,0x0d,0x09,0x09,0x0c,0x09, 0x09,0x0c,0x09,0x09,0x0c,0x09,0x09,0x0c,0x08,0x09,0x0b,0x08,0x08,0x0b,0x08,0x08, 0x0b,0x07,0x08,0x0a,0x07,0x07,0x0a,0x07,0x07,0x0a,0x06,0x07,0x0a,0x06,0x06,0x09, 0x06,0x06,0x08,0x05,0x06,0x07,0x05,0x06,0x07,0x04,0x05,0x06,0x04,0x05,0x06,0x04, 0x04,0x06,0x03,0x04,0x05,0x03,0x03,0x05,0x03,0x03,0x04,0x02,0x02,0x04,0x02,0x02, 0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x2c,0x2e,0x34,0x62,0x6e,0x93,0x52,0x50,0x7b,0x5e,0x53, 0x79,0x60,0x53,0x77,0x5e,0x53,0x79,0x60,0x53,0x77,0x60,0x53,0x77,0x5e,0x53,0x79, 0x5e,0x53,0x79,0x5e,0x53,0x79,0x5e,0x53,0x79,0x5e,0x53,0x79,0x5e,0x53,0x79,0x60, 0x53,0x77,0x6a,0x5d,0x88,0x2f,0x29,0x3a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x02,0x02,0x02,0x02,0x02,0x02,0x09,0x09,0x09,0x1f,0x1e,0x1f,0x46,0x46,0x47,0x2f, 0x2f,0x33,0x1e,0x21,0x26,0x34,0x36,0x3d,0x40,0x44,0x4f,0x70,0x73,0x7b,0x87,0x8a, 0x90,0x87,0x8a,0x8e,0x97,0x97,0x9a,0x87,0x89,0x8e,0x62,0x67,0x76,0x47,0x4e,0x66, 0x4e,0x4a,0x64,0x4f,0x50,0x6d,0x50,0x53,0x70,0x50,0x4f,0x6c,0x58,0x50,0x68,0x57, 0x49,0x5c,0x46,0x3a,0x4a,0x3a,0x2f,0x3b,0x26,0x1e,0x26,0x14,0x10,0x14,0x0d,0x0a, 0x0e,0x0a,0x08,0x0a,0x07,0x06,0x08,0x05,0x04,0x06,0x05,0x04,0x05,0x06,0x06,0x06, 0x07,0x06,0x07,0x05,0x04,0x05,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x02, 0x02,0x03,0x02,0x03,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x03,0x07,0x06,0x06, 0x0f,0x0c,0x0e,0x16,0x10,0x13,0x18,0x12,0x17,0x1a,0x13,0x18,0x1e,0x16,0x1c,0x20, 0x18,0x1e,0x21,0x19,0x1e,0x22,0x1a,0x1f,0x26,0x1e,0x24,0x28,0x20,0x28,0x29,0x21, 0x2a,0x2e,0x25,0x2e,0x38,0x2e,0x3a,0x46,0x39,0x48,0x46,0x3a,0x49,0x42,0x36,0x43, 0x3e,0x32,0x3e,0x36,0x2c,0x37,0x2a,0x24,0x2e,0x1a,0x1a,0x23,0x19,0x1b,0x24,0x2e, 0x32,0x3d,0x8a,0x8f,0x9b,0xa4,0x9b,0xa7,0x88,0x80,0x8f,0x54,0x4f,0x6d,0x52,0x4a, 0x67,0x57,0x4b,0x65,0x50,0x46,0x61,0x7c,0x75,0x89,0xa5,0x9f,0xad,0x8a,0x85,0x97, 0x89,0x85,0x99,0x95,0x94,0xa6,0x8e,0x8e,0xa3,0x76,0x76,0x91,0x58,0x5a,0x7b,0x51, 0x51,0x75,0x4c,0x55,0x7a,0x51,0x5c,0x82,0x50,0x4e,0x78,0x6e,0x78,0x9a,0x6b,0x6b, 0x83,0x3d,0x2e,0x3a,0x4a,0x39,0x47,0x24,0x1b,0x24,0x22,0x19,0x22,0x2e,0x24,0x2e, 0x52,0x4f,0x7a,0x5c,0x52,0x79,0x64,0x4d,0x6b,0x52,0x50,0x7b,0x52,0x52,0x7d,0x52, 0x54,0x7e,0x52,0x57,0x82,0x52,0x5c,0x86,0x55,0x60,0x8a,0x52,0x4f,0x7a,0x58,0x64, 0x8d,0xd6,0xd9,0xe3,0xa9,0xa8,0xb2,0x33,0x26,0x2e,0x47,0x36,0x43,0x49,0x38,0x45, 0x48,0x37,0x44,0x4e,0x3c,0x4a,0x55,0x48,0x5b,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x2b,0x2c,0x33,0x7c,0x84,0x9f,0x56,0x62,0x8b,0x5c,0x67,0x90,0x69,0x74,0x99, 0x5b,0x67,0x8e,0x56,0x63,0x8a,0x56,0x62,0x8a,0x56,0x63,0x8a,0x58,0x64,0x8b,0x58, 0x64,0x8c,0x5a,0x65,0x8d,0x5b,0x67,0x8d,0x5d,0x69,0x90,0x56,0x63,0x8a,0x53,0x4f, 0x7a,0x81,0x8b,0xaa,0xcf,0xd0,0xd3,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x03,0x02, 0x03,0x04,0x03,0x03,0x04,0x04,0x04,0x06,0x05,0x05,0x06,0x05,0x05,0x06,0x06,0x06, 0x08,0x06,0x07,0x09,0x06,0x06,0x09,0x07,0x07,0x0a,0x07,0x08,0x0a,0x07,0x08,0x0a, 0x08,0x09,0x0b,0x07,0x08,0x0a,0x08,0x09,0x0b,0x08,0x09,0x0b,0x08,0x09,0x0b,0x07, 0x08,0x0a,0x07,0x08,0x0a,0x08,0x09,0x0b,0x08,0x09,0x0b,0x08,0x09,0x0b,0x08,0x09, 0x0b,0x07,0x08,0x0a,0x08,0x09,0x0b,0x07,0x08,0x0a,0x08,0x09,0x0a,0x09,0x0a,0x0c, 0x0d,0x0d,0x10,0x13,0x11,0x16,0x15,0x14,0x19,0x15,0x14,0x1a,0x16,0x16,0x1b,0x18, 0x17,0x1d,0x1a,0x1a,0x1f,0x1b,0x1a,0x21,0x1b,0x1b,0x21,0x1b,0x1b,0x20,0x18,0x19, 0x1f,0x18,0x17,0x20,0x29,0x23,0x2e,0x32,0x2b,0x36,0x31,0x2c,0x39,0x2b,0x29,0x37, 0x28,0x2c,0x36,0x39,0x3b,0x42,0x56,0x58,0x5e,0x4f,0x53,0x60,0x40,0x3c,0x51,0x48, 0x3b,0x4b,0x46,0x39,0x47,0x41,0x34,0x41,0x67,0x5f,0x6e,0x69,0x68,0x81,0x59,0x59, 0x77,0x51,0x55,0x72,0x44,0x49,0x63,0x4a,0x50,0x6e,0x66,0x70,0x8e,0x70,0x78,0x97, 0x60,0x6b,0x8e,0x59,0x64,0x8a,0x53,0x5e,0x88,0x51,0x5c,0x84,0x51,0x4f,0x79,0x62, 0x4c,0x69,0x62,0x53,0x74,0x37,0x3e,0x58,0x0a,0x0b,0x0f,0x0a,0x0b,0x0e,0x09,0x0a, 0x0d,0x07,0x07,0x0a,0x48,0x43,0x4f,0x5e,0x6a,0x8c,0x44,0x3f,0x61,0x54,0x4a,0x6d, 0x5d,0x52,0x77,0x5d,0x52,0x78,0x5f,0x52,0x76,0x60,0x53,0x77,0x60,0x53,0x77,0x60, 0x54,0x78,0x60,0x53,0x77,0x5f,0x53,0x77,0x5f,0x54,0x76,0x5f,0x55,0x77,0x5f,0x55, 0x78,0x5f,0x56,0x77,0x51,0x53,0x72,0x19,0x1a,0x20,0x1a,0x1c,0x22,0x1a,0x1d,0x22, 0x1a,0x1c,0x22,0x19,0x1b,0x20,0x17,0x19,0x1e,0x16,0x17,0x1b,0x16,0x16,0x1b,0x76, 0x75,0x95,0x58,0x56,0x80,0x45,0x3f,0x59,0x52,0x49,0x6a,0x5a,0x52,0x77,0x58,0x52, 0x77,0x54,0x50,0x78,0x51,0x50,0x78,0x51,0x50,0x78,0x51,0x50,0x79,0x52,0x53,0x7c, 0x52,0x55,0x7e,0x52,0x5a,0x82,0x52,0x5d,0x86,0x55,0x5f,0x88,0x59,0x64,0x8b,0x5e, 0x6a,0x8d,0x60,0x6b,0x8f,0x65,0x6f,0x93,0x6a,0x74,0x95,0x6d,0x78,0x97,0x75,0x7e, 0x9b,0x7a,0x83,0x9e,0x81,0x8b,0xa5,0x8e,0x95,0xab,0x96,0x9c,0xb1,0xa3,0xa9,0xbb, 0xa9,0xad,0xbf,0xae,0xb4,0xc2,0xaf,0xb4,0xc1,0xaa,0xb0,0xbf,0xa4,0xa9,0xba,0x4a, 0x4b,0x61,0x3d,0x3e,0x54,0x43,0x44,0x58,0x16,0x17,0x1f,0x16,0x17,0x1f,0x54,0x49, 0x5d,0x52,0x46,0x59,0x42,0x38,0x47,0x32,0x2a,0x35,0x29,0x23,0x2c,0x4e,0x57,0x79, 0x53,0x4c,0x6f,0x56,0x4e,0x6f,0x58,0x4e,0x6e,0x58,0x4c,0x6d,0x54,0x49,0x67,0x4e, 0x41,0x5f,0x49,0x3c,0x56,0x41,0x36,0x4f,0x3a,0x30,0x49,0x35,0x2d,0x44,0x34,0x2d, 0x44,0x37,0x32,0x49,0x3e,0x3a,0x54,0x43,0x40,0x5f,0x4e,0x51,0x73,0x58,0x60,0x83, 0x31,0x32,0x3e,0x0c,0x0c,0x11,0x0d,0x0d,0x12,0x0c,0x0c,0x11,0x0b,0x0b,0x0f,0x3d, 0x32,0x41,0x5b,0x4a,0x5e,0x5b,0x4a,0x5e,0x58,0x4e,0x61,0x90,0x97,0xae,0x50,0x5a, 0x81,0x5e,0x50,0x6e,0x5a,0x46,0x62,0x54,0x40,0x5a,0x54,0x40,0x59,0x58,0x43,0x5c, 0x57,0x42,0x5b,0x54,0x3f,0x5a,0x5d,0x48,0x64,0x50,0x4e,0x76,0x37,0x3c,0x50,0x0e, 0x0f,0x12,0x09,0x09,0x0c,0x09,0x09,0x0c,0x0a,0x0a,0x0d,0x0a,0x0a,0x0d,0x0a,0x0a, 0x0e,0x0a,0x0a,0x0e,0x0a,0x0a,0x0e,0x0a,0x0a,0x0e,0x0a,0x0a,0x0e,0x0a,0x0a,0x0e, 0x0a,0x0a,0x0e,0x0a,0x0a,0x0d,0x09,0x0a,0x0d,0x09,0x0a,0x0d,0x09,0x0a,0x0d,0x09, 0x09,0x0c,0x08,0x09,0x0b,0x08,0x09,0x0b,0x08,0x08,0x0b,0x07,0x08,0x0a,0x07,0x07, 0x0a,0x07,0x07,0x0a,0x06,0x06,0x09,0x06,0x06,0x09,0x06,0x06,0x08,0x05,0x06,0x07, 0x05,0x05,0x06,0x04,0x05,0x06,0x04,0x05,0x06,0x03,0x04,0x05,0x03,0x03,0x05,0x03, 0x03,0x04,0x03,0x03,0x04,0x02,0x02,0x03,0x02,0x03,0x04,0x02,0x02,0x02,0x02,0x02, 0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0d,0x0e,0x0f,0x72,0x7d,0x9f,0x52, 0x57,0x82,0x5c,0x52,0x79,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53, 0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77, 0x5e,0x53,0x79,0x60,0x53,0x77,0x66,0x58,0x7f,0x78,0x67,0x95,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0d,0x0d,0x0d,0x25,0x25,0x25,0x19,0x19,0x19, 0x0a,0x09,0x0b,0x11,0x12,0x17,0x29,0x2b,0x32,0x3b,0x3e,0x46,0x5a,0x5c,0x63,0x7e, 0x80,0x86,0x6f,0x72,0x7a,0x75,0x76,0x7d,0x7c,0x7e,0x82,0x5c,0x60,0x6a,0x3e,0x3f, 0x56,0x4b,0x46,0x5e,0x54,0x4d,0x66,0x53,0x4e,0x68,0x55,0x4e,0x68,0x58,0x4d,0x62, 0x4f,0x41,0x52,0x3e,0x32,0x3e,0x2f,0x25,0x2e,0x26,0x1e,0x25,0x1e,0x18,0x1e,0x12, 0x0e,0x12,0x0a,0x08,0x0a,0x06,0x06,0x07,0x05,0x04,0x06,0x04,0x04,0x05,0x05,0x04, 0x05,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x05,0x06,0x0e,0x0a, 0x0c,0x0d,0x0a,0x0c,0x0d,0x0a,0x0c,0x0e,0x0a,0x0d,0x11,0x0d,0x0f,0x13,0x0f,0x12, 0x16,0x11,0x15,0x1a,0x14,0x18,0x1a,0x15,0x1a,0x1a,0x15,0x1a,0x1d,0x17,0x1e,0x22, 0x1b,0x22,0x25,0x1e,0x26,0x2c,0x24,0x2d,0x2e,0x26,0x2f,0x42,0x38,0x45,0x43,0x37, 0x45,0x42,0x36,0x43,0x3f,0x34,0x41,0x37,0x2e,0x39,0x2a,0x25,0x2e,0x1b,0x1a,0x22, 0x1a,0x18,0x20,0x26,0x24,0x2f,0x7a,0x81,0x97,0x88,0x7d,0x89,0x75,0x69,0x7a,0x59, 0x55,0x71,0x56,0x4d,0x6b,0x5a,0x4d,0x66,0x54,0x48,0x60,0x52,0x4c,0x64,0x80,0x79, 0x8b,0x8e,0x88,0x98,0x8b,0x85,0x96,0x87,0x81,0x95,0x7c,0x79,0x90,0x7b,0x79,0x90, 0x6b,0x68,0x80,0x58,0x57,0x78,0x4c,0x4d,0x73,0x4f,0x59,0x80,0x4f,0x4f,0x78,0x60, 0x6c,0x8f,0x73,0x7b,0x97,0x3c,0x2d,0x37,0x48,0x38,0x45,0x25,0x1c,0x25,0x22,0x19, 0x22,0x29,0x1f,0x28,0x51,0x4e,0x77,0x5c,0x52,0x79,0x64,0x4e,0x6c,0x52,0x50,0x7b, 0x52,0x52,0x7d,0x52,0x54,0x80,0x52,0x57,0x82,0x52,0x57,0x83,0x53,0x5f,0x89,0x52, 0x52,0x7c,0x52,0x5b,0x85,0xc9,0xce,0xdb,0xc6,0xc6,0xd1,0x31,0x24,0x2b,0x43,0x33, 0x3e,0x4b,0x3a,0x47,0x48,0x37,0x44,0x4c,0x3b,0x49,0x59,0x48,0x59,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x8e,0x97,0xae,0x6c,0x77,0x9c,0x52,0x5d, 0x88,0x6b,0x76,0x9b,0x5c,0x69,0x90,0x55,0x62,0x8b,0x54,0x5f,0x88,0x56,0x63,0x8a, 0x58,0x64,0x8b,0x58,0x64,0x8c,0x58,0x64,0x8c,0x5b,0x66,0x8d,0x5c,0x67,0x8f,0x5c, 0x69,0x8f,0x52,0x4f,0x7a,0x60,0x6c,0x92,0xc5,0xc9,0xd7,0x40,0x40,0x41,0x00,0x00, 0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03, 0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x03,0x04,0x04,0x04,0x06,0x04,0x05,0x06,0x05, 0x05,0x06,0x05,0x05,0x06,0x06,0x06,0x08,0x06,0x06,0x08,0x06,0x07,0x0a,0x06,0x07, 0x0a,0x07,0x08,0x0a,0x07,0x08,0x0a,0x07,0x08,0x0a,0x08,0x09,0x0b,0x08,0x09,0x0b, 0x08,0x09,0x0b,0x08,0x09,0x0b,0x07,0x08,0x0a,0x08,0x09,0x0b,0x08,0x09,0x0b,0x08, 0x09,0x0b,0x08,0x09,0x0b,0x08,0x09,0x0b,0x08,0x09,0x0b,0x08,0x09,0x0b,0x08,0x09, 0x0b,0x09,0x0a,0x0c,0x0a,0x0a,0x0d,0x0d,0x0e,0x11,0x12,0x12,0x16,0x15,0x14,0x1a, 0x17,0x16,0x1c,0x18,0x17,0x1d,0x1a,0x1a,0x20,0x1b,0x1a,0x21,0x1b,0x1a,0x21,0x1b, 0x1a,0x20,0x1b,0x1a,0x20,0x18,0x19,0x1f,0x16,0x16,0x1e,0x1f,0x1c,0x25,0x26,0x22, 0x2c,0x2a,0x26,0x31,0x27,0x24,0x30,0x34,0x37,0x42,0x3e,0x42,0x4c,0x47,0x4d,0x5e, 0x44,0x42,0x58,0x41,0x3b,0x50,0x37,0x35,0x46,0x30,0x2d,0x3b,0x5a,0x58,0x68,0x60, 0x6a,0x82,0x59,0x61,0x7c,0x4f,0x58,0x76,0x47,0x4c,0x65,0x3c,0x41,0x5a,0x4a,0x54, 0x72,0x64,0x6d,0x8c,0x6d,0x76,0x96,0x65,0x6f,0x90,0x5a,0x65,0x8b,0x51,0x5c,0x86, 0x51,0x4f,0x79,0x61,0x4b,0x66,0x5d,0x53,0x75,0x35,0x3b,0x54,0x0a,0x0c,0x0f,0x0a, 0x0b,0x0f,0x09,0x0a,0x0d,0x07,0x08,0x0b,0x44,0x42,0x4c,0x61,0x6d,0x8f,0x46,0x42, 0x5f,0x54,0x4b,0x6d,0x5d,0x52,0x77,0x5d,0x52,0x78,0x5f,0x52,0x76,0x60,0x53,0x77, 0x60,0x53,0x77,0x5f,0x53,0x77,0x60,0x53,0x77,0x5f,0x53,0x77,0x5f,0x54,0x77,0x5f, 0x54,0x76,0x5f,0x55,0x77,0x5e,0x56,0x77,0x51,0x51,0x70,0x1a,0x1b,0x21,0x1b,0x1d, 0x22,0x1b,0x1d,0x22,0x1a,0x1c,0x22,0x1a,0x1c,0x22,0x18,0x1a,0x1f,0x16,0x17,0x1c, 0x12,0x13,0x17,0x73,0x71,0x8c,0x59,0x57,0x81,0x46,0x3f,0x5b,0x51,0x48,0x69,0x5a, 0x52,0x77,0x59,0x52,0x77,0x55,0x51,0x77,0x53,0x4f,0x79,0x52,0x51,0x79,0x52,0x50, 0x7a,0x52,0x53,0x7c,0x52,0x55,0x7e,0x53,0x5c,0x84,0x52,0x5d,0x86,0x55,0x61,0x88, 0x57,0x63,0x89,0x5c,0x67,0x8c,0x60,0x6a,0x8e,0x64,0x6f,0x92,0x69,0x73,0x95,0x6f, 0x7a,0x99,0x74,0x7d,0x9c,0x7b,0x85,0xa0,0x80,0x88,0xa3,0x8b,0x93,0xaa,0x91,0x98, 0xaf,0x9e,0xa5,0xb8,0xa7,0xac,0xbd,0xad,0xb1,0xc1,0xae,0xb2,0xc1,0xac,0xb0,0xbf, 0xa8,0xac,0xbb,0x58,0x57,0x6b,0x40,0x41,0x56,0x40,0x40,0x57,0x25,0x27,0x32,0x17, 0x18,0x20,0x45,0x3d,0x4e,0x53,0x47,0x5a,0x48,0x3d,0x4e,0x34,0x2c,0x38,0x29,0x23, 0x2c,0x44,0x43,0x56,0x4c,0x55,0x79,0x57,0x4e,0x70,0x56,0x4e,0x70,0x59,0x4f,0x70, 0x59,0x4e,0x70,0x59,0x4f,0x71,0x58,0x4c,0x6f,0x4c,0x45,0x67,0x45,0x3d,0x5a,0x40, 0x38,0x54,0x3c,0x32,0x4e,0x38,0x31,0x49,0x37,0x33,0x4c,0x3d,0x39,0x54,0x4e,0x53, 0x71,0x8b,0x91,0xa6,0x81,0x86,0x9a,0x10,0x10,0x15,0x0c,0x0c,0x11,0x0c,0x0c,0x10, 0x0b,0x0b,0x0f,0x3c,0x31,0x3f,0x5a,0x49,0x5d,0x59,0x4a,0x5c,0x5e,0x52,0x65,0xc3, 0xc6,0xd0,0x53,0x5d,0x83,0x5e,0x4d,0x6c,0x59,0x44,0x5e,0x51,0x3c,0x54,0x52,0x3c, 0x55,0x52,0x3c,0x55,0x51,0x3d,0x54,0x4d,0x39,0x50,0x50,0x3a,0x53,0x58,0x43,0x5c, 0x60,0x52,0x74,0x48,0x51,0x6f,0x17,0x19,0x1f,0x0b,0x0b,0x0e,0x0a,0x0a,0x0e,0x0a, 0x0a,0x0e,0x0a,0x0a,0x0e,0x0a,0x0a,0x0e,0x0a,0x0b,0x0f,0x0b,0x0b,0x0f,0x0a,0x0b, 0x0f,0x0a,0x0a,0x0e,0x0a,0x0a,0x0e,0x0a,0x0a,0x0e,0x0a,0x0a,0x0e,0x0a,0x0a,0x0d, 0x0a,0x0a,0x0d,0x0a,0x0a,0x0d,0x09,0x0a,0x0d,0x09,0x09,0x0c,0x09,0x09,0x0c,0x08, 0x09,0x0b,0x08,0x08,0x0b,0x07,0x08,0x0a,0x07,0x07,0x0a,0x06,0x07,0x0a,0x06,0x06, 0x09,0x06,0x06,0x09,0x06,0x06,0x07,0x05,0x06,0x07,0x04,0x05,0x06,0x04,0x04,0x06, 0x04,0x04,0x06,0x03,0x03,0x05,0x03,0x03,0x05,0x03,0x03,0x05,0x03,0x03,0x04,0x02, 0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02, 0x88,0x92,0xaf,0x55,0x62,0x8a,0x57,0x50,0x79,0x60,0x53,0x77,0x60,0x53,0x77,0x60, 0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53, 0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x62,0x55,0x7a,0x77,0x67,0x94, 0x0c,0x0a,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x25,0x25,0x25,0x0e,0x0e, 0x0e,0x05,0x04,0x05,0x07,0x07,0x09,0x12,0x14,0x18,0x2c,0x2e,0x34,0x41,0x43,0x4a, 0x62,0x66,0x6d,0x75,0x77,0x7e,0x66,0x6a,0x72,0x6b,0x6e,0x73,0x66,0x6a,0x72,0x3f, 0x45,0x5b,0x46,0x44,0x5d,0x4a,0x49,0x63,0x4e,0x4c,0x66,0x56,0x4c,0x62,0x52,0x43, 0x54,0x3c,0x2f,0x3a,0x28,0x1e,0x26,0x26,0x1d,0x23,0x20,0x18,0x1d,0x16,0x11,0x14, 0x12,0x0e,0x11,0x0c,0x0a,0x0d,0x07,0x06,0x08,0x04,0x04,0x05,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x0a,0x08,0x0a,0x09,0x06,0x08,0x08,0x06,0x08,0x09,0x07,0x09,0x0b,0x09, 0x0a,0x12,0x0e,0x12,0x15,0x12,0x18,0x12,0x0e,0x12,0x12,0x0f,0x12,0x12,0x0f,0x12, 0x13,0x11,0x15,0x15,0x12,0x16,0x1a,0x17,0x1d,0x26,0x20,0x28,0x34,0x2c,0x38,0x42, 0x36,0x43,0x46,0x3a,0x48,0x47,0x3a,0x49,0x42,0x36,0x44,0x39,0x2f,0x3b,0x2b,0x25, 0x2f,0x1e,0x1b,0x24,0x23,0x1d,0x24,0x3c,0x37,0x45,0x51,0x51,0x75,0x5b,0x52,0x67, 0x60,0x55,0x69,0x73,0x6c,0x82,0x5c,0x57,0x73,0x53,0x49,0x67,0x5b,0x55,0x6f,0x52, 0x46,0x5f,0x4d,0x45,0x60,0x57,0x55,0x72,0x78,0x75,0x8d,0x78,0x72,0x86,0x84,0x7d, 0x90,0x81,0x7c,0x90,0x6e,0x68,0x81,0x5d,0x57,0x76,0x55,0x53,0x76,0x50,0x5a,0x80, 0x4f,0x51,0x78,0x53,0x60,0x87,0x83,0x8e,0xaa,0x47,0x3b,0x47,0x45,0x35,0x41,0x26, 0x1c,0x26,0x21,0x19,0x21,0x27,0x1e,0x27,0x51,0x4c,0x74,0x5a,0x52,0x79,0x64,0x4d, 0x6a,0x52,0x50,0x7b,0x52,0x52,0x7c,0x52,0x54,0x7e,0x52,0x57,0x82,0x52,0x5a,0x84, 0x53,0x5f,0x89,0x52,0x5d,0x86,0x52,0x50,0x7c,0xb2,0xb9,0xcc,0xdf,0xe1,0xe9,0x35, 0x2a,0x31,0x41,0x31,0x3d,0x49,0x38,0x45,0x49,0x38,0x45,0x49,0x38,0x46,0x64,0x51, 0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x69,0x6d,0x78,0x8b, 0x94,0xb1,0x52,0x58,0x83,0x67,0x73,0x98,0x62,0x6d,0x94,0x56,0x63,0x8b,0x54,0x5f, 0x89,0x56,0x62,0x8a,0x56,0x63,0x8a,0x57,0x64,0x8b,0x5a,0x66,0x8d,0x5a,0x66,0x8d, 0x5b,0x67,0x8f,0x5c,0x67,0x8f,0x52,0x5d,0x87,0x52,0x56,0x80,0x91,0x9a,0xb4,0x94, 0x95,0x98,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x03,0x04,0x05, 0x04,0x04,0x06,0x04,0x05,0x06,0x05,0x06,0x07,0x06,0x06,0x08,0x05,0x06,0x07,0x06, 0x06,0x08,0x06,0x07,0x09,0x06,0x07,0x09,0x06,0x07,0x0a,0x08,0x09,0x0b,0x07,0x08, 0x0a,0x07,0x08,0x0a,0x07,0x08,0x0a,0x07,0x08,0x0a,0x08,0x09,0x0b,0x08,0x09,0x0b, 0x08,0x09,0x0b,0x07,0x08,0x0a,0x08,0x09,0x0b,0x08,0x09,0x0b,0x08,0x08,0x0a,0x08, 0x08,0x0a,0x08,0x09,0x0b,0x09,0x0a,0x0c,0x0a,0x0b,0x0e,0x0c,0x0d,0x10,0x0f,0x0f, 0x12,0x12,0x12,0x16,0x16,0x15,0x1a,0x18,0x17,0x1d,0x1a,0x19,0x1f,0x1a,0x1a,0x20, 0x1a,0x1a,0x20,0x1a,0x1a,0x1f,0x1a,0x1a,0x1f,0x19,0x19,0x1f,0x19,0x19,0x1f,0x14, 0x14,0x1a,0x16,0x15,0x1c,0x22,0x1e,0x27,0x2a,0x26,0x32,0x2a,0x2a,0x38,0x42,0x46, 0x54,0x48,0x4e,0x5e,0x47,0x4b,0x61,0x46,0x46,0x57,0x45,0x44,0x4f,0x34,0x34,0x3b, 0x63,0x65,0x6e,0x6a,0x71,0x87,0x59,0x61,0x7a,0x52,0x5c,0x77,0x49,0x53,0x70,0x40, 0x47,0x61,0x45,0x4b,0x67,0x4c,0x53,0x71,0x55,0x59,0x79,0x63,0x6c,0x8d,0x66,0x6e, 0x90,0x54,0x5e,0x85,0x50,0x4f,0x79,0x61,0x4b,0x68,0x5e,0x52,0x75,0x32,0x39,0x52, 0x0b,0x0c,0x10,0x0b,0x0c,0x10,0x0a,0x0a,0x0e,0x08,0x09,0x0b,0x44,0x40,0x4b,0x65, 0x6f,0x93,0x43,0x40,0x61,0x53,0x4a,0x6b,0x5c,0x52,0x76,0x5f,0x52,0x76,0x5f,0x52, 0x76,0x60,0x53,0x77,0x60,0x53,0x77,0x5f,0x53,0x77,0x60,0x53,0x77,0x5f,0x53,0x77, 0x5f,0x54,0x76,0x5f,0x55,0x76,0x5f,0x55,0x77,0x5e,0x57,0x77,0x52,0x51,0x72,0x1a, 0x1c,0x22,0x1b,0x1e,0x23,0x1c,0x1e,0x24,0x1b,0x1e,0x23,0x1a,0x1c,0x22,0x1a,0x1b, 0x21,0x16,0x18,0x1d,0x14,0x15,0x19,0x6d,0x6b,0x82,0x5b,0x59,0x85,0x4c,0x44,0x62, 0x4f,0x48,0x68,0x59,0x52,0x77,0x56,0x51,0x77,0x55,0x51,0x77,0x52,0x50,0x79,0x52, 0x50,0x79,0x52,0x51,0x7a,0x52,0x53,0x7a,0x53,0x58,0x80,0x52,0x5b,0x83,0x53,0x5e, 0x87,0x55,0x5f,0x87,0x59,0x64,0x8a,0x5b,0x68,0x8c,0x5f,0x6a,0x8e,0x63,0x6f,0x91, 0x6b,0x75,0x96,0x6e,0x79,0x98,0x73,0x7d,0x9b,0x7a,0x83,0xa0,0x80,0x89,0xa5,0x87, 0x8f,0xa7,0x8e,0x96,0xad,0x9a,0xa0,0xb5,0xa1,0xa8,0xb9,0xa7,0xaa,0xbd,0xa9,0xae, 0xbe,0xaa,0xad,0xbf,0xa6,0xab,0xbb,0x91,0x95,0xa6,0x4e,0x4d,0x61,0x40,0x41,0x57, 0x43,0x45,0x57,0x16,0x17,0x1f,0x1d,0x1c,0x26,0x4c,0x41,0x54,0x49,0x3e,0x4f,0x38, 0x2f,0x3c,0x29,0x23,0x2d,0x26,0x21,0x29,0x58,0x5d,0x77,0x4d,0x4c,0x72,0x56,0x4e, 0x70,0x57,0x4f,0x72,0x59,0x4f,0x70,0x59,0x4f,0x71,0x5a,0x50,0x71,0x51,0x4d,0x73, 0x4e,0x4a,0x70,0x4c,0x49,0x6d,0x48,0x43,0x65,0x42,0x3b,0x5a,0x3d,0x3b,0x55,0x4b, 0x4c,0x66,0x63,0x69,0x81,0x9c,0xa0,0xb0,0xa7,0xac,0xbc,0x58,0x5a,0x63,0x0c,0x0c, 0x10,0x0a,0x0a,0x0e,0x0b,0x0b,0x0f,0x39,0x2f,0x3c,0x57,0x47,0x59,0x55,0x44,0x56, 0x59,0x4d,0x60,0xc5,0xc8,0xd2,0x66,0x70,0x92,0x59,0x50,0x73,0x58,0x43,0x5c,0x51, 0x3d,0x54,0x4e,0x3a,0x50,0x4d,0x37,0x4f,0x4b,0x37,0x4d,0x49,0x35,0x4b,0x48,0x34, 0x4a,0x4c,0x38,0x4e,0x54,0x3f,0x59,0x60,0x4e,0x6b,0x52,0x50,0x79,0x1a,0x1b,0x28, 0x0b,0x0b,0x0f,0x0a,0x0a,0x0e,0x0b,0x0b,0x0f,0x0b,0x0b,0x10,0x0b,0x0b,0x10,0x0c, 0x0c,0x10,0x0c,0x0c,0x10,0x0c,0x0c,0x10,0x0c,0x0c,0x10,0x0a,0x0b,0x0f,0x0a,0x0a, 0x0e,0x0a,0x0a,0x0e,0x0a,0x0a,0x0e,0x0a,0x0a,0x0e,0x0a,0x0a,0x0e,0x09,0x0a,0x0d, 0x09,0x0a,0x0d,0x09,0x0a,0x0d,0x09,0x09,0x0c,0x08,0x08,0x0b,0x07,0x07,0x0a,0x07, 0x07,0x0a,0x07,0x07,0x0a,0x06,0x06,0x09,0x06,0x06,0x09,0x06,0x06,0x08,0x06,0x06, 0x08,0x05,0x05,0x06,0x04,0x05,0x06,0x04,0x04,0x06,0x03,0x04,0x05,0x03,0x03,0x05, 0x03,0x03,0x04,0x03,0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02, 0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00, 0x00,0x00,0x00,0x00,0x7f,0x84,0x94,0x60,0x6d,0x92,0x55,0x50,0x79,0x60,0x53,0x77, 0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60, 0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53, 0x78,0x6d,0x5e,0x87,0x2d,0x26,0x37,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x26, 0x26,0x26,0x02,0x02,0x03,0x04,0x03,0x04,0x07,0x06,0x08,0x0e,0x0f,0x13,0x24,0x26, 0x2c,0x42,0x45,0x4a,0x5e,0x61,0x66,0x74,0x76,0x7c,0x74,0x77,0x7e,0x72,0x75,0x7b, 0x60,0x65,0x73,0x4f,0x56,0x6e,0x4a,0x4e,0x69,0x4f,0x48,0x60,0x52,0x47,0x59,0x48, 0x3a,0x49,0x2b,0x21,0x29,0x1e,0x16,0x1a,0x1c,0x14,0x18,0x1b,0x13,0x17,0x15,0x0e, 0x12,0x0f,0x0b,0x0e,0x0c,0x09,0x0b,0x0a,0x09,0x0b,0x06,0x06,0x07,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x03,0x04,0x07,0x06,0x07,0x06,0x06,0x06,0x07, 0x06,0x07,0x09,0x08,0x0a,0x23,0x24,0x27,0x33,0x33,0x35,0x35,0x35,0x38,0x23,0x22, 0x23,0x09,0x08,0x0a,0x09,0x09,0x0c,0x0c,0x0b,0x0f,0x12,0x11,0x16,0x20,0x1b,0x22, 0x32,0x2c,0x38,0x3e,0x33,0x40,0x46,0x3a,0x47,0x47,0x3a,0x4a,0x43,0x37,0x44,0x39, 0x2f,0x3b,0x2a,0x25,0x2e,0x1d,0x1a,0x22,0x22,0x1d,0x24,0x40,0x3c,0x4f,0x58,0x4a, 0x64,0x56,0x45,0x5c,0x71,0x69,0x7d,0x89,0x81,0x95,0x6d,0x67,0x80,0x53,0x4b,0x68, 0x54,0x4d,0x69,0x58,0x49,0x61,0x5a,0x4b,0x63,0x59,0x4d,0x69,0x59,0x51,0x6f,0x61, 0x5e,0x78,0x7f,0x7a,0x8e,0x81,0x7a,0x8e,0x77,0x71,0x87,0x6d,0x68,0x82,0x61,0x5e, 0x7e,0x51,0x56,0x7d,0x4f,0x55,0x7e,0x50,0x53,0x7d,0x75,0x80,0xa2,0x5d,0x57,0x66, 0x40,0x30,0x3b,0x24,0x1a,0x23,0x21,0x19,0x21,0x25,0x1d,0x25,0x50,0x4b,0x71,0x57, 0x50,0x79,0x64,0x4e,0x6d,0x52,0x52,0x7c,0x52,0x52,0x7c,0x52,0x53,0x7d,0x52,0x56, 0x81,0x52,0x5a,0x84,0x53,0x5e,0x88,0x53,0x5e,0x88,0x57,0x50,0x79,0x8e,0x98,0xb3, 0xe8,0xe9,0xef,0x49,0x40,0x48,0x41,0x31,0x3c,0x49,0x38,0x46,0x4c,0x3b,0x48,0x49, 0x38,0x46,0x60,0x4c,0x5f,0x0b,0x0b,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x2e,0x30,0x33,0x8e,0x98,0xb4,0x5c,0x67,0x90,0x5b,0x66,0x8e,0x65,0x72,0x98,0x58, 0x64,0x8d,0x55,0x60,0x8a,0x55,0x60,0x89,0x55,0x62,0x8a,0x58,0x64,0x8b,0x58,0x64, 0x8c,0x58,0x64,0x8c,0x5b,0x66,0x8d,0x5c,0x67,0x8f,0x57,0x64,0x8b,0x52,0x4f,0x7a, 0x6b,0x77,0x9a,0xc9,0xcd,0xd7,0x10,0x10,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02, 0x03,0x03,0x03,0x04,0x03,0x04,0x05,0x04,0x05,0x06,0x05,0x05,0x06,0x05,0x06,0x07, 0x05,0x06,0x07,0x06,0x06,0x08,0x06,0x07,0x09,0x06,0x07,0x09,0x06,0x07,0x09,0x07, 0x08,0x0a,0x07,0x08,0x0a,0x07,0x08,0x0a,0x07,0x08,0x0a,0x07,0x08,0x0a,0x08,0x09, 0x0b,0x07,0x08,0x0a,0x07,0x08,0x0a,0x08,0x08,0x0a,0x08,0x09,0x0b,0x09,0x0a,0x0c, 0x08,0x09,0x0a,0x08,0x09,0x0b,0x09,0x0a,0x0c,0x0a,0x0a,0x0d,0x0b,0x0c,0x0f,0x0e, 0x0f,0x12,0x10,0x11,0x14,0x0f,0x11,0x14,0x12,0x11,0x16,0x16,0x16,0x1b,0x18,0x18, 0x1d,0x19,0x18,0x1e,0x19,0x19,0x1e,0x19,0x18,0x1e,0x19,0x19,0x1e,0x1b,0x1b,0x22, 0x1c,0x1c,0x22,0x1a,0x19,0x1f,0x15,0x15,0x1a,0x17,0x16,0x1e,0x26,0x26,0x33,0x30, 0x2e,0x40,0x4c,0x51,0x61,0x62,0x67,0x74,0x53,0x57,0x66,0x50,0x50,0x5d,0x45,0x44, 0x4c,0x3a,0x37,0x3d,0x67,0x68,0x70,0x6f,0x76,0x8b,0x56,0x5f,0x7b,0x4d,0x57,0x75, 0x4b,0x55,0x75,0x4a,0x53,0x73,0x46,0x4e,0x6a,0x43,0x4b,0x66,0x3c,0x41,0x5a,0x47, 0x4c,0x69,0x4c,0x54,0x75,0x4a,0x53,0x77,0x4c,0x4a,0x73,0x60,0x4e,0x6c,0x5b,0x52, 0x77,0x33,0x37,0x4f,0x0b,0x0c,0x0f,0x0a,0x0b,0x0e,0x09,0x0a,0x0d,0x07,0x08,0x0a, 0x41,0x3e,0x48,0x68,0x74,0x96,0x45,0x40,0x61,0x50,0x46,0x67,0x5d,0x52,0x77,0x5d, 0x52,0x78,0x5f,0x52,0x76,0x60,0x53,0x77,0x60,0x54,0x78,0x5f,0x53,0x77,0x60,0x53, 0x77,0x5f,0x53,0x77,0x5f,0x53,0x76,0x5f,0x55,0x76,0x5f,0x55,0x77,0x5e,0x56,0x77, 0x52,0x51,0x72,0x1b,0x1d,0x22,0x1b,0x1e,0x23,0x1c,0x1e,0x24,0x1c,0x1e,0x24,0x1b, 0x1d,0x22,0x1a,0x1b,0x21,0x18,0x1a,0x1e,0x15,0x16,0x1a,0x66,0x64,0x78,0x5c,0x5b, 0x87,0x4c,0x45,0x63,0x4d,0x48,0x67,0x59,0x51,0x77,0x56,0x50,0x77,0x55,0x51,0x77, 0x52,0x50,0x78,0x52,0x50,0x78,0x52,0x51,0x7a,0x52,0x53,0x7a,0x53,0x57,0x7f,0x52, 0x5d,0x84,0x53,0x5d,0x86,0x56,0x61,0x88,0x5a,0x64,0x8a,0x5a,0x67,0x8b,0x61,0x6b, 0x8f,0x65,0x6f,0x92,0x68,0x73,0x94,0x6d,0x78,0x98,0x72,0x7d,0x9b,0x78,0x83,0x9f, 0x7f,0x87,0xa2,0x86,0x8e,0xa6,0x8c,0x93,0xab,0x90,0x98,0xaf,0x9d,0xa4,0xb6,0xa3, 0xa8,0xbb,0xa5,0xaa,0xbd,0xa5,0xab,0xbc,0xa4,0xa9,0xba,0xa1,0xa4,0xb7,0x9a,0x9f, 0xb2,0x50,0x51,0x66,0x46,0x47,0x5c,0x26,0x27,0x30,0x16,0x17,0x20,0x16,0x17,0x1f, 0x27,0x24,0x2f,0x3d,0x35,0x43,0x2e,0x27,0x31,0x26,0x20,0x29,0x2c,0x26,0x30,0x58, 0x61,0x81,0x51,0x4c,0x70,0x57,0x4f,0x71,0x57,0x4f,0x72,0x5a,0x4f,0x70,0x59,0x4f, 0x71,0x54,0x4e,0x72,0x4d,0x4b,0x72,0x4e,0x4c,0x73,0x4d,0x52,0x78,0x59,0x62,0x85, 0x83,0x88,0x9f,0x8a,0x8e,0xa2,0x88,0x8d,0xa0,0xa5,0xa8,0xb7,0xae,0xb3,0xc0,0xa8, 0xad,0xbb,0x1e,0x1e,0x23,0x0a,0x0a,0x0e,0x0b,0x0b,0x0f,0x2f,0x27,0x32,0x52,0x42, 0x55,0x4e,0x3f,0x50,0x51,0x45,0x57,0x96,0x9d,0xb2,0x59,0x64,0x89,0x50,0x50,0x78, 0x5f,0x50,0x6d,0x52,0x3c,0x54,0x50,0x3b,0x52,0x4b,0x36,0x4e,0x4a,0x35,0x4c,0x48, 0x33,0x49,0x44,0x32,0x46,0x45,0x32,0x48,0x4a,0x36,0x4c,0x52,0x3d,0x55,0x5b,0x45, 0x60,0x67,0x57,0x78,0x2c,0x27,0x36,0x0b,0x0b,0x10,0x0b,0x0b,0x0f,0x0c,0x0c,0x10, 0x0c,0x0c,0x10,0x0c,0x0c,0x11,0x0c,0x0c,0x11,0x0c,0x0c,0x11,0x0c,0x0d,0x11,0x0c, 0x0c,0x11,0x0b,0x0c,0x10,0x0b,0x0b,0x0f,0x0b,0x0b,0x0f,0x0b,0x0b,0x0f,0x0b,0x0b, 0x0f,0x0a,0x0b,0x0e,0x0a,0x0a,0x0e,0x0a,0x0a,0x0e,0x0a,0x0a,0x0e,0x09,0x09,0x0c, 0x09,0x09,0x0c,0x08,0x09,0x0b,0x07,0x07,0x0a,0x07,0x07,0x0a,0x06,0x06,0x09,0x06, 0x06,0x09,0x06,0x06,0x08,0x06,0x06,0x08,0x05,0x05,0x06,0x04,0x05,0x06,0x04,0x04, 0x06,0x03,0x04,0x05,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x02,0x02,0x03, 0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x4e,0x50,0x55,0x76,0x80,0xa2,0x52,0x4f, 0x7a,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77, 0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60, 0x53,0x77,0x60,0x53,0x77,0x67,0x59,0x7f,0x5d,0x50,0x74,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x04,0x03,0x04,0x26,0x26,0x26,0x02,0x02,0x02,0x04,0x03,0x04,0x06,0x05,0x06,0x0a, 0x0b,0x0e,0x21,0x22,0x27,0x47,0x49,0x4e,0x69,0x6a,0x6d,0x73,0x75,0x79,0x7c,0x7e, 0x83,0x71,0x73,0x7c,0x63,0x6a,0x7a,0x4e,0x55,0x6e,0x47,0x46,0x61,0x4b,0x3f,0x50, 0x3e,0x32,0x3e,0x2c,0x22,0x2a,0x1e,0x16,0x1b,0x1a,0x14,0x18,0x1a,0x14,0x18,0x19, 0x12,0x16,0x16,0x11,0x15,0x0e,0x0a,0x0d,0x10,0x0d,0x10,0x09,0x08,0x0a,0x05,0x04, 0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x09,0x0a,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03, 0x04,0x03,0x04,0x04,0x03,0x04,0x0e,0x0e,0x0f,0x35,0x35,0x36,0x06,0x06,0x07,0x10, 0x10,0x12,0x31,0x32,0x33,0x13,0x14,0x14,0x08,0x08,0x0b,0x09,0x09,0x0c,0x0e,0x0d, 0x12,0x1b,0x18,0x1e,0x2d,0x27,0x33,0x3a,0x2f,0x3b,0x42,0x36,0x44,0x44,0x37,0x46, 0x40,0x35,0x42,0x37,0x2e,0x3a,0x2a,0x24,0x2e,0x1f,0x1b,0x24,0x28,0x22,0x2b,0x3a, 0x37,0x4d,0x3d,0x30,0x3f,0x57,0x44,0x5a,0x6f,0x68,0x7d,0x85,0x7e,0x91,0x7b,0x74, 0x8a,0x53,0x4c,0x68,0x58,0x4b,0x67,0x5e,0x50,0x6c,0x5a,0x4a,0x62,0x52,0x43,0x5a, 0x52,0x45,0x5c,0x5e,0x51,0x6b,0x58,0x51,0x6f,0x59,0x55,0x73,0x66,0x61,0x7c,0x5d, 0x57,0x74,0x4e,0x4a,0x6c,0x4c,0x4d,0x73,0x50,0x5a,0x82,0x50,0x4e,0x78,0x6b,0x77, 0x99,0x6b,0x6c,0x81,0x39,0x2c,0x35,0x23,0x1a,0x23,0x21,0x19,0x21,0x24,0x1a,0x23, 0x4f,0x4c,0x6f,0x56,0x50,0x79,0x64,0x4e,0x6c,0x52,0x52,0x7c,0x52,0x53,0x7d,0x52, 0x55,0x80,0x52,0x57,0x83,0x52,0x5a,0x84,0x53,0x5e,0x89,0x56,0x63,0x8b,0x5d,0x52, 0x79,0x6f,0x7b,0x9f,0xf8,0xf8,0xfa,0x61,0x5b,0x63,0x3f,0x30,0x3b,0x4b,0x3a,0x48, 0x4b,0x3a,0x47,0x4b,0x3a,0x47,0x59,0x47,0x57,0x1c,0x19,0x1f,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x91,0x98,0xac,0x71,0x7d,0xa0,0x52,0x57,0x82, 0x69,0x74,0x99,0x5a,0x66,0x8e,0x56,0x62,0x8b,0x55,0x60,0x8a,0x55,0x60,0x89,0x56, 0x62,0x8a,0x56,0x62,0x8a,0x58,0x64,0x8c,0x5a,0x66,0x8d,0x5a,0x66,0x8d,0x5b,0x66, 0x8d,0x52,0x50,0x7c,0x54,0x60,0x89,0x97,0xa0,0xb9,0x61,0x62,0x64,0x00,0x00,0x00, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02, 0x02,0x03,0x02,0x02,0x03,0x03,0x03,0x04,0x03,0x03,0x05,0x04,0x04,0x06,0x04,0x05, 0x06,0x05,0x05,0x06,0x06,0x06,0x08,0x06,0x06,0x08,0x06,0x06,0x09,0x06,0x06,0x09, 0x06,0x07,0x09,0x06,0x07,0x09,0x07,0x08,0x0a,0x07,0x08,0x0a,0x07,0x08,0x0a,0x07, 0x08,0x0a,0x07,0x08,0x0a,0x07,0x08,0x0a,0x07,0x08,0x0a,0x08,0x09,0x0b,0x08,0x09, 0x0b,0x09,0x0a,0x0c,0x08,0x09,0x0b,0x08,0x09,0x0b,0x09,0x0a,0x0c,0x0a,0x0a,0x0d, 0x0d,0x0e,0x10,0x0e,0x0f,0x12,0x0f,0x10,0x13,0x0e,0x10,0x13,0x0e,0x0e,0x11,0x11, 0x10,0x14,0x15,0x14,0x1a,0x18,0x17,0x1d,0x18,0x16,0x1d,0x18,0x17,0x1d,0x19,0x18, 0x1e,0x1c,0x1b,0x22,0x21,0x21,0x2a,0x1d,0x1d,0x23,0x1a,0x1a,0x1f,0x17,0x18,0x1d, 0x1d,0x1f,0x28,0x2b,0x2a,0x3a,0x32,0x33,0x46,0x50,0x56,0x65,0x65,0x68,0x75,0x63, 0x63,0x70,0x4b,0x4a,0x53,0x3b,0x39,0x40,0x6b,0x6b,0x74,0x75,0x7e,0x94,0x5d,0x67, 0x84,0x53,0x5d,0x7d,0x4f,0x5a,0x7b,0x50,0x5a,0x7c,0x4f,0x59,0x7b,0x4b,0x54,0x75, 0x43,0x4b,0x68,0x43,0x4a,0x67,0x46,0x4d,0x6d,0x45,0x4d,0x6e,0x46,0x47,0x6a,0x5a, 0x4a,0x66,0x5a,0x50,0x75,0x33,0x36,0x4f,0x0a,0x0b,0x0e,0x0a,0x0a,0x0e,0x0a,0x0a, 0x0d,0x07,0x08,0x0a,0x3e,0x39,0x46,0x70,0x7b,0x9d,0x45,0x41,0x61,0x4f,0x46,0x65, 0x5d,0x52,0x77,0x5f,0x52,0x76,0x5f,0x52,0x76,0x60,0x53,0x77,0x60,0x53,0x77,0x5f, 0x53,0x77,0x5f,0x53,0x77,0x5f,0x53,0x77,0x5f,0x53,0x76,0x5f,0x54,0x76,0x5f,0x55, 0x77,0x5e,0x56,0x77,0x53,0x51,0x72,0x1a,0x1c,0x22,0x1b,0x1d,0x22,0x1c,0x1e,0x24, 0x1c,0x1e,0x24,0x1a,0x1d,0x22,0x19,0x1b,0x20,0x18,0x1a,0x1e,0x15,0x16,0x1b,0x5e, 0x59,0x6a,0x5d,0x5e,0x89,0x4c,0x47,0x65,0x4e,0x47,0x65,0x5a,0x52,0x77,0x58,0x52, 0x77,0x55,0x51,0x77,0x52,0x50,0x78,0x52,0x50,0x78,0x52,0x50,0x79,0x52,0x54,0x7b, 0x53,0x56,0x7e,0x52,0x5d,0x86,0x54,0x5e,0x86,0x56,0x61,0x89,0x57,0x62,0x8a,0x5b, 0x68,0x8c,0x62,0x6d,0x90,0x67,0x71,0x94,0x68,0x73,0x94,0x6d,0x78,0x98,0x72,0x7d, 0x9b,0x7a,0x84,0x9f,0x7d,0x86,0xa1,0x80,0x89,0xa3,0x86,0x8e,0xa7,0x8e,0x96,0xac, 0x94,0x9b,0xb0,0x9b,0xa2,0xb6,0x9e,0xa4,0xb8,0xa3,0xa8,0xbb,0xa2,0xa8,0xb9,0x9e, 0xa3,0xb5,0x96,0x9c,0xb0,0x95,0x99,0xad,0x60,0x62,0x78,0x55,0x56,0x66,0x16,0x17, 0x1f,0x16,0x17,0x1f,0x16,0x16,0x1e,0x20,0x1e,0x28,0x32,0x2c,0x38,0x2a,0x24,0x2e, 0x2a,0x24,0x2d,0x6a,0x67,0x74,0x50,0x58,0x7d,0x56,0x4e,0x72,0x57,0x4f,0x72,0x56, 0x4e,0x72,0x56,0x4e,0x72,0x52,0x4c,0x72,0x4e,0x4c,0x75,0x53,0x5e,0x83,0x87,0x90, 0xaa,0xa2,0xa8,0xbb,0xaf,0xb3,0xc3,0xa3,0xa8,0xba,0x92,0x97,0xad,0x96,0x9d,0xb0, 0xa5,0xa9,0xb9,0x9f,0xa4,0xb8,0x80,0x82,0x8a,0x0b,0x0b,0x0f,0x0a,0x0a,0x0e,0x20, 0x1c,0x23,0x4d,0x3e,0x4f,0x48,0x39,0x49,0x4a,0x3e,0x50,0x78,0x81,0x9e,0x54,0x5e, 0x85,0x4f,0x4e,0x75,0x58,0x4f,0x73,0x5f,0x50,0x70,0x54,0x3e,0x57,0x4c,0x36,0x4e, 0x4a,0x36,0x4c,0x46,0x32,0x48,0x45,0x32,0x47,0x43,0x30,0x45,0x42,0x30,0x43,0x45, 0x32,0x47,0x4e,0x3a,0x53,0x5a,0x46,0x61,0x6c,0x56,0x74,0x1c,0x1c,0x28,0x0c,0x0c, 0x10,0x0d,0x0d,0x12,0x0d,0x0d,0x12,0x0c,0x0c,0x11,0x0d,0x0d,0x12,0x0d,0x0e,0x12, 0x0d,0x0e,0x12,0x0d,0x0d,0x12,0x0d,0x0d,0x12,0x0c,0x0d,0x11,0x0c,0x0d,0x11,0x0c, 0x0d,0x11,0x0b,0x0c,0x10,0x0b,0x0c,0x10,0x0b,0x0c,0x10,0x0a,0x0b,0x0e,0x0a,0x0a, 0x0e,0x0a,0x0a,0x0e,0x09,0x0a,0x0d,0x09,0x09,0x0c,0x08,0x09,0x0b,0x08,0x08,0x0b, 0x07,0x07,0x0a,0x06,0x06,0x09,0x06,0x06,0x09,0x06,0x06,0x08,0x06,0x06,0x08,0x05, 0x06,0x07,0x04,0x04,0x06,0x04,0x04,0x06,0x03,0x04,0x05,0x03,0x03,0x04,0x03,0x03, 0x04,0x02,0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x35,0x35,0x39,0x8a, 0x94,0xb1,0x52,0x53,0x7d,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53, 0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77, 0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x62,0x55,0x7a,0x76,0x66,0x94,0x02, 0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x0a,0x09,0x0a,0x2b,0x2b,0x2b,0x1c,0x1c,0x1c,0x02,0x02,0x02,0x04,0x03,0x04, 0x05,0x04,0x05,0x09,0x0a,0x0d,0x22,0x24,0x28,0x52,0x54,0x57,0x72,0x72,0x75,0x75, 0x76,0x7a,0x6a,0x6e,0x75,0x63,0x68,0x75,0x4e,0x56,0x6b,0x48,0x46,0x60,0x4a,0x43, 0x59,0x44,0x3a,0x48,0x46,0x3a,0x48,0x44,0x38,0x46,0x3d,0x34,0x42,0x36,0x2e,0x3a, 0x34,0x2a,0x36,0x30,0x27,0x32,0x1b,0x16,0x1a,0x12,0x0e,0x12,0x0c,0x0b,0x0e,0x08, 0x07,0x09,0x06,0x05,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x05,0x07,0x1e,0x1a,0x26,0x34, 0x32,0x4c,0x4e,0x59,0x7e,0xc0,0xc6,0xd5,0x7d,0x7e,0x82,0x05,0x05,0x05,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02, 0x02,0x0e,0x0e,0x0e,0x0c,0x0c,0x0d,0x07,0x07,0x07,0x0c,0x0c,0x0d,0x0a,0x0a,0x0a, 0x02,0x02,0x03,0x09,0x0a,0x0a,0x1d,0x1e,0x1e,0x2c,0x2c,0x2c,0x33,0x33,0x33,0x2f, 0x30,0x31,0x38,0x39,0x3b,0x46,0x47,0x4d,0x32,0x2f,0x37,0x49,0x42,0x4c,0x4a,0x41, 0x4c,0x3c,0x31,0x3e,0x3a,0x2f,0x3b,0x32,0x2a,0x36,0x29,0x23,0x2d,0x21,0x1d,0x24, 0x3a,0x37,0x44,0x38,0x32,0x49,0x40,0x31,0x41,0x51,0x45,0x5f,0x70,0x6a,0x81,0x72, 0x6b,0x81,0x70,0x66,0x7d,0x64,0x5a,0x74,0x63,0x5c,0x77,0x5b,0x51,0x6f,0x5e,0x4f, 0x69,0x56,0x47,0x60,0x51,0x42,0x5a,0x48,0x3a,0x4d,0x52,0x42,0x57,0x42,0x34,0x46, 0x51,0x41,0x58,0x48,0x3a,0x50,0x40,0x36,0x4f,0x45,0x41,0x65,0x50,0x5a,0x7f,0x54, 0x51,0x79,0x5e,0x6a,0x8f,0x73,0x7a,0x97,0x3b,0x2c,0x37,0x24,0x1b,0x24,0x21,0x19, 0x21,0x22,0x19,0x21,0x4f,0x4a,0x6d,0x57,0x50,0x79,0x62,0x4a,0x66,0x52,0x52,0x7c, 0x52,0x52,0x7c,0x52,0x53,0x7e,0x52,0x56,0x81,0x52,0x55,0x81,0x53,0x5e,0x88,0x5a, 0x65,0x8d,0x57,0x50,0x79,0x57,0x63,0x8c,0xf0,0xf1,0xf5,0x78,0x74,0x7d,0x3c,0x2d, 0x37,0x4c,0x3b,0x49,0x4b,0x3a,0x47,0x4b,0x3a,0x47,0x56,0x43,0x53,0x2b,0x23,0x2c, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5f,0x62,0x6c,0x93,0x9d, 0xb8,0x54,0x5f,0x89,0x62,0x6e,0x94,0x5e,0x6a,0x92,0x55,0x60,0x8a,0x53,0x5f,0x89, 0x55,0x60,0x8a,0x55,0x60,0x89,0x57,0x64,0x8b,0x57,0x64,0x8b,0x58,0x64,0x8c,0x58, 0x65,0x8c,0x5b,0x66,0x8d,0x55,0x60,0x89,0x52,0x4f,0x7a,0x71,0x7c,0x9e,0xab,0xae, 0xb6,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x03,0x03,0x04,0x03,0x03,0x05,0x03, 0x03,0x05,0x04,0x04,0x06,0x05,0x05,0x06,0x06,0x06,0x07,0x06,0x06,0x07,0x06,0x06, 0x09,0x06,0x06,0x09,0x06,0x07,0x09,0x06,0x07,0x09,0x06,0x07,0x09,0x06,0x07,0x09, 0x07,0x07,0x0a,0x07,0x08,0x0a,0x07,0x08,0x0a,0x07,0x08,0x0a,0x08,0x09,0x0a,0x09, 0x0a,0x0c,0x08,0x09,0x0b,0x08,0x09,0x0b,0x08,0x09,0x0b,0x09,0x0a,0x0c,0x09,0x0a, 0x0c,0x0a,0x0a,0x0d,0x0b,0x0c,0x0f,0x0d,0x0e,0x10,0x0e,0x0e,0x12,0x0e,0x0e,0x11, 0x0e,0x0e,0x11,0x0e,0x0e,0x11,0x0f,0x0f,0x13,0x14,0x13,0x18,0x17,0x17,0x1c,0x18, 0x17,0x1d,0x19,0x18,0x1e,0x1c,0x1c,0x23,0x21,0x21,0x2a,0x1e,0x1f,0x26,0x1b,0x1b, 0x21,0x1b,0x1b,0x20,0x1b,0x1c,0x23,0x1f,0x21,0x2b,0x27,0x2a,0x39,0x34,0x39,0x48, 0x55,0x58,0x65,0x6f,0x6f,0x79,0x52,0x50,0x58,0x40,0x3e,0x45,0x6e,0x6f,0x76,0x79, 0x81,0x9a,0x61,0x6b,0x89,0x57,0x61,0x83,0x53,0x5f,0x82,0x54,0x5f,0x83,0x53,0x5e, 0x80,0x50,0x59,0x7d,0x4e,0x58,0x7b,0x4e,0x57,0x79,0x49,0x52,0x75,0x48,0x52,0x76, 0x48,0x48,0x6c,0x56,0x48,0x63,0x55,0x4e,0x72,0x31,0x34,0x4c,0x0a,0x0c,0x0f,0x0a, 0x0b,0x0e,0x09,0x0a,0x0c,0x07,0x08,0x0a,0x3a,0x36,0x40,0x83,0x8d,0xa9,0x44,0x42, 0x63,0x4d,0x44,0x63,0x5d,0x52,0x77,0x5d,0x52,0x78,0x5f,0x52,0x76,0x60,0x53,0x77, 0x60,0x54,0x78,0x5f,0x53,0x77,0x60,0x53,0x77,0x5f,0x53,0x76,0x5f,0x54,0x76,0x5f, 0x54,0x76,0x5f,0x55,0x77,0x5e,0x56,0x77,0x54,0x52,0x74,0x1a,0x1c,0x22,0x1b,0x1d, 0x22,0x1b,0x1d,0x22,0x1c,0x1e,0x24,0x1a,0x1c,0x22,0x19,0x1b,0x20,0x17,0x19,0x1e, 0x15,0x16,0x1b,0x53,0x4d,0x5c,0x5f,0x62,0x8e,0x4f,0x47,0x66,0x4d,0x47,0x64,0x5a, 0x52,0x76,0x57,0x50,0x77,0x54,0x51,0x77,0x52,0x50,0x78,0x52,0x50,0x78,0x52,0x50, 0x79,0x52,0x53,0x7a,0x52,0x57,0x7f,0x52,0x5d,0x84,0x54,0x5e,0x87,0x56,0x61,0x89, 0x5a,0x64,0x8b,0x5c,0x68,0x8d,0x62,0x6e,0x90,0x66,0x70,0x92,0x69,0x75,0x96,0x6e, 0x79,0x98,0x71,0x7b,0x9a,0x77,0x82,0x9e,0x7d,0x86,0xa1,0x80,0x8a,0xa4,0x83,0x8c, 0xa5,0x8e,0x95,0xad,0x9f,0xa5,0xb8,0xad,0xb3,0xc2,0xb3,0xb6,0xc4,0xb8,0xbb,0xc7, 0xb7,0xba,0xc6,0xb2,0xb5,0xc4,0xac,0xb0,0xbf,0xab,0xae,0xbc,0xb2,0xb4,0xc0,0x8a, 0x8d,0x99,0x16,0x18,0x20,0x16,0x17,0x1f,0x16,0x17,0x1f,0x16,0x16,0x1e,0x26,0x23, 0x2d,0x2e,0x27,0x32,0x2c,0x26,0x30,0x30,0x28,0x33,0x72,0x76,0x8d,0x4e,0x4c,0x73, 0x50,0x4d,0x71,0x4f,0x4c,0x73,0x4d,0x4d,0x74,0x4e,0x57,0x7f,0x69,0x72,0x95,0x9e, 0xa4,0xb9,0xa8,0xae,0xbf,0xa9,0xaf,0xc0,0xa9,0xae,0xbf,0x9f,0xa4,0xb7,0x97,0x9d, 0xb2,0x90,0x96,0xac,0x84,0x8a,0xa2,0x81,0x87,0xa1,0xa3,0xa9,0xba,0x37,0x37,0x3b, 0x0a,0x0a,0x0e,0x0e,0x0d,0x10,0x48,0x39,0x48,0x42,0x35,0x42,0x46,0x3b,0x4b,0x6f, 0x79,0x99,0x54,0x5f,0x85,0x4f,0x4c,0x74,0x59,0x50,0x73,0x5c,0x50,0x72,0x60,0x51, 0x72,0x58,0x43,0x5d,0x4a,0x35,0x4b,0x48,0x33,0x48,0x45,0x31,0x46,0x43,0x2f,0x44, 0x42,0x2e,0x41,0x3f,0x2d,0x40,0x46,0x33,0x48,0x54,0x40,0x58,0x61,0x4b,0x69,0x3b, 0x3f,0x5b,0x0c,0x0c,0x11,0x0d,0x0d,0x12,0x0e,0x0e,0x12,0x0e,0x0e,0x12,0x0e,0x0e, 0x12,0x0e,0x0e,0x13,0x0e,0x0e,0x13,0x0e,0x0e,0x13,0x0e,0x0e,0x13,0x0e,0x0e,0x12, 0x0d,0x0e,0x12,0x0d,0x0e,0x12,0x0d,0x0e,0x12,0x0c,0x0d,0x11,0x0c,0x0d,0x11,0x0c, 0x0c,0x11,0x0a,0x0b,0x0f,0x0a,0x0b,0x0f,0x0a,0x0a,0x0e,0x09,0x0a,0x0d,0x09,0x0a, 0x0d,0x09,0x09,0x0c,0x08,0x09,0x0c,0x07,0x08,0x0b,0x06,0x07,0x0a,0x06,0x06,0x09, 0x06,0x06,0x08,0x06,0x06,0x07,0x05,0x05,0x06,0x05,0x05,0x06,0x04,0x04,0x06,0x03, 0x03,0x05,0x03,0x03,0x04,0x03,0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02, 0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x0b,0x0c,0x0c,0xa6,0xae,0xc4,0x53,0x5e,0x88,0x60,0x53,0x77,0x60,0x53,0x77,0x60, 0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53, 0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77, 0x6b,0x5c,0x85,0x18,0x15,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x1d,0x1d,0x1d,0x13,0x13,0x13,0x02,0x02,0x02,0x02,0x02, 0x02,0x03,0x02,0x03,0x04,0x03,0x05,0x0a,0x0b,0x0e,0x1b,0x1c,0x20,0x3a,0x3b,0x3f, 0x60,0x62,0x65,0x66,0x69,0x6e,0x5e,0x61,0x6a,0x41,0x46,0x59,0x40,0x3e,0x56,0x4b, 0x42,0x56,0x45,0x3c,0x4e,0x33,0x32,0x45,0x41,0x47,0x59,0x35,0x36,0x4a,0x29,0x2d, 0x3b,0x28,0x2b,0x39,0x2b,0x2f,0x3e,0x2a,0x2a,0x39,0x22,0x1e,0x25,0x0c,0x0a,0x0c, 0x0a,0x09,0x0b,0x08,0x07,0x09,0x06,0x06,0x07,0x02,0x02,0x02,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x09,0x07,0x0a,0x2d,0x22,0x2f,0x48,0x37,0x4b,0x63,0x52,0x73, 0x5e,0x53,0x79,0x53,0x53,0x7d,0x5b,0x67,0x90,0xcf,0xd2,0xdf,0xe7,0xe8,0xef,0xb5, 0xb8,0xc0,0x2d,0x2f,0x32,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0a,0x0a,0x0b,0x08,0x08, 0x09,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x03,0x03,0x04,0x04,0x04,0x05, 0x0c,0x0c,0x0d,0x23,0x23,0x24,0x33,0x33,0x36,0x33,0x34,0x38,0x2f,0x2c,0x32,0x2a, 0x26,0x2d,0x2a,0x24,0x2e,0x2f,0x27,0x32,0x2f,0x28,0x32,0x2d,0x26,0x31,0x27,0x22, 0x2c,0x26,0x20,0x28,0x52,0x4f,0x66,0x3a,0x34,0x4b,0x37,0x29,0x38,0x50,0x40,0x55, 0x50,0x4e,0x6a,0x61,0x5d,0x78,0x74,0x6b,0x81,0x71,0x67,0x7e,0x84,0x7c,0x91,0x71, 0x6a,0x83,0x56,0x4b,0x69,0x53,0x49,0x64,0x52,0x46,0x5f,0x57,0x48,0x5f,0x39,0x2c, 0x3d,0x33,0x28,0x37,0x37,0x2c,0x3c,0x3a,0x2e,0x3f,0x39,0x30,0x43,0x3c,0x38,0x55, 0x4d,0x51,0x78,0x5c,0x5c,0x82,0x63,0x6f,0x91,0x78,0x83,0xa3,0x44,0x37,0x44,0x25, 0x1c,0x25,0x21,0x19,0x21,0x22,0x18,0x21,0x4e,0x4a,0x6c,0x58,0x50,0x79,0x64,0x4e, 0x6c,0x52,0x52,0x7c,0x52,0x53,0x7e,0x52,0x54,0x7e,0x52,0x56,0x81,0x52,0x5a,0x84, 0x53,0x5e,0x89,0x5a,0x65,0x8d,0x54,0x50,0x79,0x52,0x5c,0x86,0xdb,0xdf,0xe8,0x90, 0x8f,0x99,0x39,0x2b,0x34,0x4a,0x39,0x47,0x4c,0x3b,0x48,0x4b,0x3a,0x47,0x50,0x3e, 0x4d,0x36,0x2c,0x37,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x21, 0x22,0x25,0xa1,0xa9,0xc1,0x5f,0x6c,0x93,0x54,0x5f,0x89,0x60,0x6d,0x94,0x56,0x63, 0x8b,0x54,0x5f,0x89,0x54,0x5f,0x89,0x56,0x62,0x8b,0x56,0x63,0x8a,0x57,0x63,0x8b, 0x58,0x64,0x8b,0x58,0x65,0x8c,0x5b,0x67,0x8f,0x57,0x64,0x8b,0x52,0x4f,0x7a,0x57, 0x63,0x8a,0xaf,0xb6,0xca,0x31,0x32,0x32,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x03,0x03,0x03,0x04, 0x03,0x03,0x04,0x03,0x03,0x05,0x04,0x04,0x06,0x04,0x05,0x06,0x05,0x06,0x07,0x06, 0x06,0x07,0x06,0x06,0x07,0x06,0x06,0x08,0x06,0x06,0x09,0x07,0x07,0x0a,0x06,0x07, 0x09,0x06,0x07,0x09,0x06,0x07,0x09,0x06,0x07,0x09,0x07,0x08,0x0a,0x07,0x08,0x0a, 0x08,0x09,0x0a,0x08,0x09,0x0a,0x08,0x09,0x0b,0x08,0x09,0x0b,0x08,0x09,0x0b,0x08, 0x09,0x0b,0x09,0x0a,0x0c,0x0a,0x0a,0x0d,0x0a,0x0b,0x0e,0x0b,0x0c,0x0e,0x0c,0x0d, 0x10,0x0b,0x0d,0x0f,0x0c,0x0d,0x10,0x0d,0x0e,0x10,0x0d,0x0e,0x10,0x0f,0x10,0x13, 0x13,0x13,0x17,0x17,0x17,0x1c,0x19,0x18,0x1e,0x1b,0x1a,0x20,0x1d,0x1d,0x23,0x1e, 0x1e,0x26,0x1e,0x1f,0x27,0x1d,0x1d,0x23,0x1c,0x1b,0x21,0x1c,0x1d,0x23,0x24,0x27, 0x30,0x2a,0x2e,0x3a,0x35,0x39,0x44,0x52,0x50,0x5c,0x5a,0x59,0x62,0x4b,0x48,0x50, 0x72,0x71,0x7a,0x7a,0x83,0x9a,0x60,0x69,0x89,0x56,0x60,0x84,0x57,0x61,0x85,0x57, 0x62,0x87,0x56,0x62,0x86,0x54,0x5f,0x83,0x52,0x5c,0x81,0x50,0x59,0x7d,0x4c,0x57, 0x7b,0x49,0x53,0x7a,0x4c,0x4d,0x74,0x5c,0x4a,0x67,0x50,0x4a,0x6b,0x2d,0x32,0x48, 0x0a,0x0b,0x0e,0x0a,0x0b,0x0e,0x09,0x0a,0x0c,0x08,0x09,0x0b,0x37,0x32,0x3c,0x8c, 0x94,0xaf,0x44,0x43,0x67,0x4c,0x42,0x61,0x5d,0x53,0x78,0x5d,0x53,0x78,0x5f,0x52, 0x76,0x5f,0x53,0x77,0x5f,0x53,0x77,0x5f,0x53,0x77,0x5f,0x53,0x77,0x5f,0x53,0x76, 0x5f,0x53,0x76,0x5f,0x55,0x77,0x5f,0x55,0x77,0x5e,0x56,0x76,0x56,0x52,0x73,0x1a, 0x1c,0x22,0x1b,0x1d,0x22,0x1b,0x1d,0x22,0x1b,0x1e,0x23,0x1a,0x1c,0x22,0x18,0x1a, 0x1f,0x17,0x1a,0x1e,0x15,0x16,0x1b,0x4a,0x44,0x50,0x65,0x6b,0x9d,0x4d,0x48,0x67, 0x4e,0x46,0x63,0x59,0x52,0x76,0x56,0x50,0x77,0x53,0x51,0x77,0x53,0x4f,0x78,0x52, 0x4f,0x78,0x52,0x50,0x79,0x52,0x53,0x7b,0x53,0x57,0x80,0x52,0x5d,0x84,0x53,0x5d, 0x86,0x56,0x61,0x89,0x5a,0x65,0x8b,0x5d,0x69,0x8e,0x61,0x6c,0x8f,0x66,0x70,0x93, 0x6b,0x76,0x96,0x6e,0x79,0x98,0x71,0x7b,0x9a,0x75,0x7f,0x9c,0x7a,0x84,0x9f,0x7e, 0x87,0xa2,0x81,0x8b,0xa4,0x8b,0x91,0xa4,0x9d,0x9c,0xa8,0x99,0x97,0xa1,0x95,0x91, 0x9b,0x8d,0x88,0x93,0x84,0x7d,0x8b,0x81,0x7a,0x88,0x8a,0x84,0x92,0x87,0x81,0x8f, 0x7f,0x77,0x87,0x1f,0x21,0x29,0x16,0x17,0x1f,0x16,0x17,0x1f,0x16,0x16,0x1e,0x16, 0x16,0x1e,0x15,0x16,0x1e,0x30,0x29,0x35,0x30,0x29,0x34,0x31,0x29,0x33,0x5c,0x57, 0x61,0x5b,0x66,0x87,0x4e,0x50,0x77,0x55,0x5f,0x85,0x71,0x7b,0x9a,0xb0,0xb5,0xc5, 0xaf,0xb4,0xc3,0xb2,0xb7,0xc6,0xb0,0xb5,0xc6,0xae,0xb2,0xc3,0xa1,0xa7,0xba,0x8f, 0x98,0xb0,0x7e,0x85,0xa2,0x62,0x69,0x8b,0x4a,0x53,0x75,0x45,0x4f,0x71,0x5f,0x67, 0x89,0x4b,0x4f,0x5e,0x0a,0x0a,0x0d,0x09,0x09,0x0c,0x42,0x35,0x42,0x3e,0x31,0x3c, 0x42,0x39,0x48,0x6b,0x74,0x96,0x54,0x5e,0x85,0x50,0x4d,0x75,0x5c,0x51,0x73,0x5c, 0x51,0x73,0x5c,0x50,0x73,0x5d,0x50,0x73,0x5f,0x48,0x62,0x4c,0x36,0x4c,0x46,0x32, 0x46,0x43,0x30,0x45,0x41,0x2e,0x40,0x40,0x2d,0x41,0x40,0x2e,0x42,0x4d,0x3a,0x51, 0x5f,0x53,0x75,0x3f,0x42,0x5e,0x0d,0x0d,0x12,0x0e,0x0e,0x12,0x0e,0x0e,0x12,0x0e, 0x0e,0x14,0x0e,0x0f,0x14,0x0e,0x0e,0x14,0x0f,0x10,0x16,0x0f,0x0f,0x15,0x0f,0x10, 0x16,0x0e,0x0f,0x15,0x0e,0x0f,0x14,0x0e,0x0e,0x14,0x0e,0x0e,0x13,0x0e,0x0e,0x13, 0x0c,0x0d,0x12,0x0c,0x0d,0x11,0x0b,0x0c,0x10,0x0b,0x0c,0x10,0x0a,0x0b,0x0f,0x0a, 0x0a,0x0e,0x0a,0x0a,0x0e,0x09,0x0a,0x0d,0x09,0x09,0x0c,0x08,0x08,0x0b,0x07,0x08, 0x0b,0x07,0x07,0x0a,0x06,0x06,0x09,0x06,0x06,0x09,0x06,0x06,0x08,0x05,0x06,0x07, 0x04,0x05,0x06,0x03,0x04,0x05,0x03,0x03,0x04,0x03,0x03,0x04,0x02,0x03,0x04,0x02, 0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0xae,0xb3,0xc1,0x5a,0x65,0x8d,0x5c,0x52,0x79, 0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60, 0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53, 0x77,0x60,0x53,0x77,0x64,0x57,0x7c,0x40,0x38,0x50,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x24,0x23,0x24,0x07,0x07,0x07,0x02, 0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x04,0x04,0x04,0x05,0x09,0x0a,0x0c,0x13,0x15, 0x18,0x29,0x2a,0x2e,0x52,0x53,0x57,0x60,0x62,0x6a,0x54,0x58,0x63,0x42,0x47,0x59, 0x39,0x37,0x4a,0x3f,0x37,0x46,0x36,0x2f,0x3c,0x40,0x44,0x50,0x5e,0x62,0x6a,0x42, 0x46,0x4f,0x23,0x26,0x2e,0x1c,0x1f,0x28,0x2b,0x2f,0x3a,0x34,0x38,0x42,0x19,0x1a, 0x22,0x0d,0x0a,0x0d,0x0a,0x08,0x0a,0x08,0x07,0x0a,0x06,0x06,0x08,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x29,0x25,0x36,0x5f,0x47,0x63,0x5a,0x41,0x5c,0x55,0x3d, 0x56,0x56,0x3e,0x57,0x5e,0x46,0x60,0x65,0x4d,0x6a,0x5b,0x56,0x7d,0xaa,0xb2,0xc7, 0xc2,0xc7,0xd7,0xda,0xdd,0xe6,0xd7,0xda,0xe5,0x6d,0x70,0x78,0x06,0x06,0x06,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x03, 0x03,0x04,0x04,0x05,0x05,0x05,0x06,0x05,0x06,0x06,0x06,0x06,0x09,0x09,0x09,0x0c, 0x0e,0x0d,0x12,0x15,0x12,0x18,0x1b,0x18,0x1f,0x22,0x1e,0x26,0x27,0x22,0x2b,0x29, 0x23,0x2d,0x26,0x21,0x2a,0x3a,0x36,0x41,0x51,0x4f,0x6a,0x4b,0x3d,0x53,0x38,0x27, 0x35,0x43,0x37,0x4a,0x42,0x38,0x4d,0x53,0x4a,0x66,0x66,0x61,0x7d,0x71,0x69,0x80, 0x6f,0x66,0x7d,0x63,0x5c,0x77,0x6a,0x65,0x7e,0x58,0x53,0x6f,0x55,0x4a,0x65,0x53, 0x49,0x64,0x46,0x38,0x4c,0x37,0x2c,0x3d,0x37,0x2d,0x3d,0x3a,0x2f,0x41,0x42,0x35, 0x47,0x3f,0x38,0x51,0x4e,0x4c,0x71,0x62,0x67,0x89,0x6c,0x70,0x92,0x7e,0x89,0xa6, 0x58,0x52,0x60,0x2b,0x21,0x29,0x20,0x18,0x20,0x21,0x18,0x20,0x4e,0x49,0x6a,0x5f, 0x53,0x79,0x63,0x4b,0x67,0x52,0x52,0x7c,0x52,0x53,0x7d,0x52,0x53,0x7e,0x52,0x55, 0x80,0x52,0x5a,0x84,0x53,0x5f,0x89,0x58,0x65,0x8d,0x52,0x50,0x7b,0x52,0x4f,0x7a, 0xc7,0xcb,0xda,0xb4,0xb5,0xbe,0x34,0x27,0x2f,0x49,0x38,0x45,0x4e,0x3c,0x4a,0x4c, 0x3b,0x49,0x50,0x3e,0x4d,0x42,0x35,0x43,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x8b,0x91,0xa3,0x7b,0x85,0xa7,0x52,0x50,0x7b,0x5f, 0x6b,0x92,0x58,0x64,0x8c,0x55,0x60,0x8a,0x53,0x5f,0x89,0x54,0x5f,0x89,0x55,0x62, 0x8b,0x56,0x63,0x8a,0x58,0x64,0x8b,0x58,0x64,0x8c,0x58,0x65,0x8c,0x5b,0x66,0x8d, 0x54,0x5f,0x88,0x52,0x4f,0x7b,0x8c,0x97,0xb2,0x89,0x8b,0x8d,0x00,0x00,0x00,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x05,0x04,0x04,0x05,0x04,0x05,0x06, 0x05,0x05,0x06,0x05,0x05,0x06,0x06,0x06,0x07,0x06,0x06,0x08,0x06,0x06,0x07,0x06, 0x06,0x09,0x06,0x07,0x09,0x06,0x07,0x09,0x06,0x07,0x09,0x07,0x07,0x0a,0x06,0x07, 0x09,0x07,0x08,0x0a,0x08,0x09,0x0a,0x08,0x09,0x0a,0x08,0x09,0x0a,0x08,0x09,0x0b, 0x08,0x09,0x0b,0x09,0x0a,0x0c,0x09,0x0a,0x0c,0x0a,0x0a,0x0d,0x0a,0x0a,0x0d,0x0a, 0x0a,0x0d,0x0a,0x0b,0x0e,0x0a,0x0b,0x0e,0x0b,0x0c,0x0e,0x0c,0x0d,0x0f,0x0c,0x0d, 0x10,0x0d,0x0e,0x11,0x0f,0x0f,0x13,0x12,0x12,0x16,0x16,0x16,0x1b,0x19,0x18,0x1e, 0x1b,0x1a,0x20,0x1d,0x1d,0x23,0x24,0x24,0x2e,0x22,0x22,0x2a,0x1d,0x1d,0x23,0x1b, 0x1b,0x21,0x23,0x24,0x2d,0x24,0x27,0x31,0x24,0x26,0x2f,0x41,0x3d,0x47,0x58,0x57, 0x5f,0x53,0x52,0x59,0x71,0x72,0x7b,0x7a,0x82,0x9b,0x5f,0x6a,0x89,0x56,0x61,0x85, 0x56,0x61,0x86,0x5a,0x64,0x8a,0x59,0x65,0x8b,0x57,0x62,0x89,0x55,0x61,0x87,0x54, 0x5e,0x83,0x50,0x5b,0x80,0x4d,0x58,0x7f,0x4c,0x50,0x78,0x5e,0x4b,0x68,0x56,0x4f, 0x73,0x2d,0x32,0x48,0x0a,0x0c,0x0f,0x0a,0x0b,0x0e,0x09,0x0a,0x0c,0x08,0x09,0x0b, 0x3d,0x38,0x45,0x8f,0x99,0xb0,0x44,0x46,0x68,0x4c,0x42,0x61,0x5d,0x53,0x78,0x5d, 0x53,0x78,0x5d,0x52,0x78,0x5f,0x53,0x77,0x5f,0x53,0x77,0x5f,0x53,0x77,0x5f,0x53, 0x77,0x5f,0x52,0x76,0x5f,0x53,0x76,0x5f,0x54,0x76,0x5f,0x55,0x77,0x5f,0x56,0x77, 0x57,0x53,0x74,0x1a,0x1b,0x21,0x1a,0x1d,0x22,0x1b,0x1d,0x22,0x1a,0x1c,0x22,0x1a, 0x1b,0x21,0x19,0x1a,0x1f,0x16,0x18,0x1d,0x15,0x16,0x1b,0x3b,0x35,0x40,0x6d,0x7b, 0xae,0x4e,0x49,0x67,0x4b,0x44,0x61,0x5a,0x52,0x76,0x58,0x52,0x77,0x54,0x51,0x77, 0x52,0x4f,0x78,0x52,0x4f,0x78,0x52,0x4f,0x79,0x52,0x52,0x7b,0x53,0x56,0x7f,0x52, 0x5d,0x84,0x55,0x5f,0x87,0x56,0x63,0x88,0x5a,0x65,0x8a,0x5c,0x67,0x8c,0x62,0x6d, 0x8f,0x66,0x70,0x92,0x69,0x74,0x95,0x6d,0x78,0x97,0x72,0x7e,0x9b,0x76,0x80,0x9d, 0x70,0x77,0x90,0x49,0x41,0x51,0x44,0x3c,0x4c,0x45,0x3c,0x4b,0x44,0x3c,0x4b,0x48, 0x3e,0x4d,0x49,0x3f,0x50,0x4e,0x42,0x55,0x52,0x46,0x59,0x55,0x49,0x5d,0x58,0x4b, 0x5f,0x59,0x4d,0x62,0x3f,0x38,0x49,0x17,0x18,0x20,0x16,0x17,0x1f,0x16,0x17,0x1f, 0x16,0x16,0x1e,0x16,0x16,0x1e,0x15,0x16,0x1d,0x14,0x15,0x1c,0x35,0x2d,0x38,0x32, 0x2a,0x36,0x35,0x2c,0x38,0x95,0x93,0x9f,0x6b,0x73,0x93,0x98,0x9e,0xb3,0xb9,0xbd, 0xca,0xbb,0xbf,0xcc,0xb9,0xbe,0xcb,0xae,0xb3,0xc4,0x96,0x9e,0xb5,0x78,0x81,0xa0, 0x5b,0x67,0x8b,0x4f,0x57,0x7f,0x4f,0x58,0x80,0x4b,0x54,0x7a,0x42,0x4a,0x6d,0x44, 0x4d,0x6f,0x5f,0x69,0x89,0x50,0x54,0x64,0x09,0x09,0x0c,0x09,0x09,0x0b,0x3f,0x34, 0x3f,0x3b,0x2f,0x3a,0x40,0x36,0x44,0x61,0x6d,0x8f,0x50,0x5b,0x83,0x54,0x4e,0x74, 0x5c,0x51,0x73,0x5d,0x51,0x73,0x5d,0x51,0x74,0x5d,0x51,0x73,0x5d,0x51,0x73,0x60, 0x50,0x6f,0x4d,0x38,0x4f,0x45,0x30,0x45,0x42,0x2e,0x42,0x3f,0x2d,0x40,0x3f,0x2d, 0x3f,0x49,0x36,0x4c,0x5d,0x52,0x74,0x44,0x4b,0x6c,0x0d,0x0d,0x12,0x0e,0x0e,0x14, 0x0e,0x0e,0x14,0x0f,0x10,0x16,0x10,0x10,0x16,0x10,0x10,0x16,0x10,0x11,0x16,0x10, 0x11,0x16,0x10,0x11,0x16,0x10,0x10,0x16,0x0f,0x0f,0x15,0x0f,0x0f,0x15,0x0e,0x0f, 0x14,0x0e,0x0e,0x14,0x0e,0x0e,0x13,0x0d,0x0e,0x12,0x0c,0x0d,0x11,0x0c,0x0d,0x12, 0x0b,0x0c,0x10,0x0a,0x0b,0x0f,0x0a,0x0a,0x0e,0x0a,0x0a,0x0e,0x09,0x0a,0x0d,0x09, 0x09,0x0c,0x08,0x08,0x0b,0x07,0x08,0x0a,0x07,0x07,0x0a,0x06,0x06,0x09,0x06,0x06, 0x09,0x06,0x06,0x07,0x05,0x06,0x07,0x04,0x05,0x06,0x03,0x03,0x05,0x03,0x03,0x04, 0x03,0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x77,0x7b,0x82,0x65,0x71, 0x97,0x53,0x4f,0x78,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77, 0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60, 0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x61,0x54,0x78,0x6c,0x5d,0x86,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x00,0x00,0x00,0x22,0x21,0x22, 0x0b,0x0a,0x0b,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x03,0x04,0x03,0x04,0x06, 0x07,0x09,0x0e,0x0f,0x12,0x26,0x27,0x2b,0x52,0x54,0x57,0x6e,0x71,0x76,0x6a,0x6d, 0x74,0x55,0x5a,0x67,0x36,0x38,0x4c,0x32,0x2e,0x3e,0x2c,0x29,0x36,0x46,0x4a,0x56, 0x77,0x79,0x7e,0x58,0x5a,0x5e,0x22,0x25,0x30,0x28,0x20,0x28,0x29,0x22,0x2a,0x2a, 0x2c,0x34,0x16,0x17,0x1c,0x08,0x08,0x0a,0x08,0x08,0x0a,0x07,0x07,0x0a,0x03,0x03, 0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x1a,0x1d,0x2a,0x62,0x53,0x77,0x55,0x3d,0x56,0x4e, 0x37,0x4d,0x47,0x31,0x46,0x54,0x3d,0x55,0x5e,0x46,0x60,0x69,0x53,0x71,0x6d,0x5a, 0x76,0x76,0x81,0xa3,0x75,0x80,0xa1,0x84,0x8d,0xab,0xb8,0xbe,0xd0,0xd8,0xda,0xe5, 0xa8,0xac,0xb8,0x25,0x27,0x2b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02, 0x02,0x03,0x02,0x03,0x03,0x03,0x03,0x04,0x04,0x04,0x05,0x05,0x05,0x06,0x06,0x06, 0x07,0x07,0x07,0x0a,0x08,0x09,0x0c,0x0b,0x0b,0x0f,0x11,0x0f,0x14,0x17,0x15,0x1a, 0x1c,0x19,0x20,0x20,0x1c,0x23,0x1f,0x1b,0x23,0x4e,0x4d,0x61,0x40,0x3a,0x54,0x50, 0x3d,0x52,0x4b,0x38,0x4d,0x59,0x4d,0x69,0x56,0x48,0x61,0x52,0x49,0x65,0x53,0x49, 0x65,0x5b,0x4f,0x6c,0x56,0x4f,0x6d,0x55,0x4f,0x6b,0x5e,0x51,0x6c,0x5f,0x51,0x6a, 0x56,0x49,0x62,0x52,0x44,0x5c,0x4e,0x40,0x57,0x47,0x3a,0x4f,0x44,0x38,0x4d,0x46, 0x39,0x50,0x55,0x45,0x5e,0x45,0x3b,0x53,0x4a,0x46,0x69,0x53,0x5d,0x82,0x62,0x5c, 0x7e,0x7a,0x83,0xa2,0x71,0x70,0x83,0x36,0x29,0x33,0x1f,0x18,0x1f,0x21,0x18,0x20, 0x4d,0x48,0x67,0x5e,0x53,0x79,0x62,0x4a,0x66,0x52,0x52,0x7c,0x52,0x53,0x7d,0x52, 0x53,0x7e,0x52,0x57,0x82,0x52,0x5d,0x86,0x54,0x5f,0x89,0x58,0x65,0x8d,0x53,0x5e, 0x88,0x64,0x53,0x76,0xac,0xb3,0xc8,0xd8,0xdb,0xe1,0x33,0x26,0x2e,0x4a,0x39,0x46, 0x4e,0x3c,0x4a,0x4c,0x3b,0x49,0x50,0x3f,0x4d,0x4c,0x3d,0x4c,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0x56,0x5f,0x90,0x9a,0xb5, 0x52,0x54,0x80,0x53,0x5e,0x88,0x5b,0x67,0x8e,0x55,0x60,0x8a,0x53,0x5e,0x88,0x54, 0x5f,0x89,0x55,0x60,0x8a,0x56,0x62,0x8b,0x57,0x63,0x8b,0x57,0x63,0x8b,0x5a,0x65, 0x8d,0x58,0x64,0x8c,0x58,0x65,0x8c,0x52,0x4f,0x7a,0x63,0x6e,0x94,0xc9,0xcc,0xd6, 0x0a,0x0a,0x0a,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x03,0x03,0x03,0x04,0x04,0x04, 0x05,0x04,0x04,0x06,0x05,0x05,0x06,0x05,0x05,0x06,0x05,0x05,0x06,0x06,0x06,0x07, 0x06,0x06,0x08,0x06,0x06,0x09,0x06,0x07,0x09,0x06,0x07,0x09,0x06,0x06,0x08,0x06, 0x07,0x09,0x06,0x07,0x09,0x07,0x08,0x0a,0x07,0x08,0x0a,0x07,0x08,0x0a,0x07,0x08, 0x0a,0x08,0x09,0x0b,0x08,0x09,0x0b,0x09,0x0a,0x0c,0x09,0x0a,0x0c,0x0a,0x0a,0x0d, 0x09,0x0a,0x0b,0x0a,0x0a,0x0d,0x0a,0x0a,0x0d,0x0a,0x0a,0x0d,0x0a,0x0b,0x0e,0x0b, 0x0c,0x0e,0x0b,0x0d,0x0f,0x0d,0x0e,0x10,0x0c,0x0d,0x10,0x0e,0x0e,0x12,0x11,0x11, 0x15,0x16,0x16,0x1b,0x1a,0x19,0x20,0x1b,0x1a,0x20,0x1f,0x20,0x27,0x22,0x21,0x2a, 0x1d,0x1d,0x23,0x1b,0x1a,0x20,0x23,0x23,0x2c,0x25,0x27,0x31,0x1c,0x1e,0x24,0x32, 0x2d,0x35,0x45,0x42,0x4a,0x47,0x45,0x4d,0x6b,0x6b,0x73,0x77,0x7f,0x98,0x60,0x69, 0x89,0x56,0x61,0x84,0x57,0x63,0x88,0x5a,0x65,0x8b,0x5a,0x67,0x8c,0x59,0x65,0x8c, 0x58,0x64,0x8b,0x57,0x62,0x88,0x53,0x5f,0x85,0x50,0x5a,0x83,0x4f,0x54,0x7c,0x5f, 0x4e,0x6b,0x54,0x4e,0x74,0x2e,0x32,0x48,0x0a,0x0b,0x0e,0x0a,0x0b,0x0e,0x0a,0x0a, 0x0d,0x08,0x08,0x0a,0x42,0x3c,0x49,0x93,0x9b,0xb3,0x45,0x47,0x6c,0x4a,0x42,0x5f, 0x5d,0x53,0x78,0x5d,0x53,0x78,0x5d,0x52,0x78,0x5f,0x53,0x77,0x5f,0x53,0x77,0x5f, 0x53,0x77,0x60,0x53,0x77,0x5f,0x52,0x76,0x5f,0x53,0x76,0x5f,0x55,0x76,0x5f,0x55, 0x77,0x5e,0x55,0x76,0x5a,0x54,0x75,0x1a,0x1b,0x21,0x1a,0x1d,0x22,0x1a,0x1c,0x22, 0x1a,0x1c,0x22,0x19,0x1a,0x20,0x18,0x1a,0x1f,0x17,0x19,0x1e,0x15,0x16,0x1a,0x34, 0x2e,0x38,0x74,0x83,0xb8,0x4d,0x47,0x68,0x4b,0x44,0x61,0x5b,0x52,0x76,0x58,0x52, 0x77,0x54,0x51,0x77,0x52,0x4f,0x78,0x52,0x4f,0x78,0x52,0x50,0x79,0x52,0x52,0x7b, 0x53,0x58,0x80,0x52,0x5d,0x86,0x55,0x5f,0x87,0x57,0x63,0x89,0x5b,0x66,0x8b,0x5c, 0x68,0x8d,0x62,0x6c,0x8f,0x64,0x70,0x92,0x68,0x74,0x94,0x6f,0x79,0x98,0x72,0x7e, 0x9a,0x76,0x7f,0x9c,0x74,0x7d,0x9a,0x48,0x40,0x50,0x43,0x3a,0x48,0x44,0x3a,0x4a, 0x46,0x3d,0x4d,0x4b,0x41,0x52,0x4d,0x44,0x54,0x52,0x47,0x5a,0x54,0x49,0x5d,0x57, 0x4b,0x5f,0x57,0x4c,0x60,0x41,0x3b,0x4b,0x17,0x19,0x22,0x17,0x19,0x21,0x16,0x18, 0x20,0x16,0x18,0x20,0x16,0x16,0x1e,0x15,0x16,0x1e,0x16,0x16,0x1e,0x14,0x16,0x1d, 0x2a,0x26,0x30,0x35,0x2d,0x39,0x35,0x2d,0x38,0x3d,0x34,0x3f,0xbd,0xbd,0xc5,0xaa, 0xae,0xbf,0x92,0x99,0xb0,0x7a,0x85,0xa0,0x65,0x6f,0x91,0x56,0x61,0x88,0x54,0x60, 0x86,0x55,0x60,0x87,0x54,0x5f,0x85,0x51,0x5a,0x82,0x50,0x5a,0x81,0x4c,0x56,0x7c, 0x43,0x4c,0x6d,0x45,0x50,0x70,0x65,0x6e,0x8e,0x5c,0x60,0x70,0x09,0x09,0x0c,0x08, 0x08,0x0b,0x3d,0x32,0x3c,0x3c,0x2f,0x3a,0x40,0x35,0x43,0x5a,0x64,0x8a,0x50,0x53, 0x7a,0x59,0x50,0x75,0x5d,0x50,0x73,0x5d,0x51,0x74,0x5d,0x51,0x74,0x5d,0x51,0x73, 0x5e,0x51,0x74,0x5d,0x51,0x74,0x61,0x51,0x73,0x54,0x3e,0x56,0x43,0x2f,0x44,0x3f, 0x2c,0x40,0x3e,0x2b,0x3f,0x52,0x3d,0x54,0x5f,0x51,0x6f,0x4a,0x52,0x73,0x0e,0x0e, 0x13,0x0f,0x0f,0x15,0x0f,0x10,0x15,0x10,0x10,0x16,0x11,0x11,0x17,0x11,0x11,0x17, 0x10,0x11,0x16,0x11,0x12,0x18,0x11,0x12,0x17,0x10,0x11,0x17,0x10,0x11,0x16,0x10, 0x11,0x16,0x0f,0x10,0x16,0x0e,0x0f,0x15,0x0e,0x0f,0x14,0x0e,0x0e,0x13,0x0d,0x0e, 0x12,0x0c,0x0d,0x11,0x0c,0x0d,0x12,0x0b,0x0c,0x10,0x0a,0x0b,0x0f,0x0a,0x0a,0x0e, 0x09,0x0a,0x0d,0x09,0x0a,0x0d,0x08,0x09,0x0c,0x07,0x08,0x0b,0x07,0x07,0x0a,0x07, 0x07,0x0a,0x06,0x06,0x09,0x06,0x06,0x08,0x06,0x06,0x07,0x05,0x05,0x06,0x04,0x05, 0x06,0x04,0x04,0x06,0x03,0x04,0x05,0x02,0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x03, 0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x3f, 0x41,0x46,0x75,0x81,0xa2,0x51,0x4e,0x7a,0x5f,0x52,0x76,0x60,0x53,0x77,0x60,0x53, 0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77, 0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x6e, 0x5f,0x88,0x08,0x07,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02, 0x02,0x19,0x19,0x19,0x18,0x18,0x18,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x03, 0x03,0x03,0x04,0x04,0x04,0x06,0x08,0x09,0x0b,0x1e,0x1f,0x22,0x52,0x53,0x56,0x75, 0x76,0x7a,0x5e,0x62,0x6a,0x3d,0x42,0x4f,0x2d,0x2c,0x3c,0x2d,0x27,0x33,0x2d,0x27, 0x33,0x49,0x4e,0x5a,0x86,0x88,0x8d,0x62,0x63,0x69,0x28,0x26,0x33,0x18,0x12,0x16, 0x1d,0x16,0x1c,0x18,0x1a,0x1f,0x0e,0x0e,0x12,0x09,0x09,0x0c,0x08,0x08,0x0b,0x07, 0x07,0x09,0x02,0x02,0x02,0x00,0x00,0x00,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0x11,0x16,0x4d,0x57,0x7d,0x64,0x52,0x72, 0x57,0x40,0x5a,0x5d,0x45,0x60,0x64,0x53,0x75,0x58,0x52,0x79,0x54,0x53,0x7e,0x58, 0x62,0x8a,0x75,0x81,0xa2,0xeb,0xed,0xf1,0xc4,0xca,0xd8,0xa0,0xa8,0xbf,0x8a,0x93, 0xaf,0x9c,0xa4,0xbc,0xc9,0xce,0xda,0xc2,0xc7,0xd5,0x59,0x5d,0x68,0x04,0x04,0x04, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x03,0x04,0x03,0x04,0x04,0x04, 0x05,0x06,0x05,0x05,0x06,0x06,0x06,0x07,0x07,0x08,0x0a,0x08,0x09,0x0c,0x0a,0x0a, 0x0e,0x0e,0x0d,0x12,0x12,0x11,0x16,0x16,0x14,0x1a,0x27,0x27,0x2f,0x52,0x59,0x76, 0x4b,0x43,0x60,0x42,0x35,0x49,0x4a,0x3e,0x56,0x50,0x48,0x61,0x60,0x5a,0x74,0x55, 0x4e,0x6b,0x54,0x49,0x64,0x51,0x45,0x5d,0x56,0x4a,0x64,0x50,0x4a,0x66,0x5b,0x4c, 0x66,0x56,0x47,0x5e,0x58,0x48,0x61,0x52,0x45,0x5d,0x51,0x43,0x5d,0x52,0x44,0x5c, 0x52,0x43,0x5b,0x52,0x44,0x5d,0x54,0x45,0x60,0x48,0x3c,0x55,0x3d,0x39,0x58,0x45, 0x4b,0x6c,0x56,0x4d,0x71,0x57,0x63,0x88,0x70,0x75,0x8d,0x3b,0x2c,0x37,0x1f,0x18, 0x1f,0x20,0x17,0x20,0x4d,0x48,0x66,0x5d,0x52,0x79,0x63,0x4c,0x69,0x52,0x4f,0x7b, 0x52,0x53,0x7d,0x52,0x56,0x81,0x52,0x55,0x81,0x52,0x5c,0x86,0x54,0x5f,0x89,0x5a, 0x65,0x8d,0x56,0x62,0x8b,0x64,0x4e,0x6d,0x95,0x9f,0xb9,0xea,0xeb,0xf1,0x40,0x35, 0x3d,0x4a,0x39,0x46,0x4e,0x3c,0x4a,0x4c,0x3b,0x49,0x4e,0x3d,0x4b,0x55,0x44,0x54, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x18, 0x19,0xa8,0xaf,0xc4,0x60,0x6d,0x93,0x52,0x4f,0x7a,0x5b,0x66,0x8e,0x56,0x62,0x8b, 0x53,0x5e,0x88,0x54,0x5f,0x89,0x54,0x5f,0x89,0x55,0x60,0x8a,0x55,0x62,0x8a,0x57, 0x63,0x8b,0x58,0x64,0x8c,0x5a,0x65,0x8c,0x58,0x64,0x8c,0x52,0x5c,0x85,0x52,0x5a, 0x83,0xab,0xb2,0xc8,0x5d,0x5d,0x5e,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x03,0x02, 0x02,0x03,0x03,0x04,0x05,0x04,0x04,0x05,0x04,0x04,0x06,0x04,0x05,0x06,0x05,0x06, 0x07,0x05,0x06,0x07,0x06,0x06,0x07,0x06,0x06,0x07,0x06,0x06,0x09,0x06,0x06,0x08, 0x06,0x06,0x08,0x06,0x07,0x09,0x06,0x07,0x09,0x06,0x07,0x09,0x07,0x08,0x0a,0x07, 0x08,0x0a,0x07,0x08,0x0a,0x07,0x08,0x0a,0x09,0x09,0x0b,0x08,0x09,0x0b,0x09,0x0a, 0x0c,0x0a,0x0a,0x0d,0x09,0x0a,0x0c,0x09,0x0a,0x0b,0x09,0x0a,0x0c,0x0a,0x0a,0x0d, 0x0a,0x0a,0x0e,0x0a,0x0b,0x0e,0x0a,0x0b,0x0e,0x0a,0x0b,0x0e,0x0b,0x0c,0x0e,0x0b, 0x0d,0x0f,0x0d,0x0e,0x11,0x10,0x11,0x14,0x15,0x15,0x1a,0x1a,0x19,0x1f,0x1d,0x1d, 0x23,0x1e,0x1d,0x23,0x1d,0x1c,0x22,0x1b,0x1a,0x21,0x21,0x20,0x28,0x22,0x24,0x2c, 0x1b,0x1d,0x23,0x2c,0x29,0x30,0x34,0x2f,0x36,0x34,0x31,0x37,0x63,0x61,0x68,0x71, 0x7a,0x93,0x58,0x62,0x84,0x55,0x5f,0x84,0x58,0x62,0x89,0x5a,0x66,0x8b,0x5b,0x68, 0x8e,0x5a,0x65,0x8e,0x5a,0x65,0x8e,0x58,0x63,0x8c,0x54,0x61,0x89,0x52,0x5d,0x86, 0x50,0x55,0x7f,0x61,0x4d,0x6b,0x53,0x4f,0x76,0x2e,0x34,0x49,0x0a,0x0a,0x0e,0x0a, 0x0b,0x0e,0x09,0x0a,0x0d,0x07,0x08,0x0a,0x34,0x2d,0x38,0x94,0x9b,0xb3,0x45,0x4d, 0x71,0x49,0x43,0x5f,0x5d,0x53,0x78,0x5d,0x53,0x79,0x5f,0x52,0x76,0x5d,0x53,0x79, 0x5f,0x53,0x77,0x5f,0x53,0x77,0x60,0x53,0x77,0x5f,0x53,0x76,0x5f,0x54,0x76,0x5e, 0x54,0x76,0x5f,0x55,0x77,0x5e,0x56,0x77,0x5d,0x56,0x76,0x1a,0x1b,0x21,0x19,0x1b, 0x20,0x19,0x1b,0x20,0x1a,0x1b,0x21,0x19,0x1a,0x1f,0x18,0x1a,0x1e,0x16,0x18,0x1d, 0x14,0x16,0x1a,0x2f,0x29,0x33,0x7a,0x89,0xc1,0x4d,0x48,0x6a,0x4a,0x42,0x5f,0x5a, 0x51,0x76,0x58,0x52,0x77,0x54,0x50,0x77,0x53,0x4f,0x78,0x51,0x4f,0x78,0x51,0x50, 0x79,0x52,0x53,0x7d,0x53,0x56,0x7e,0x52,0x5d,0x84,0x55,0x5f,0x87,0x57,0x62,0x89, 0x5b,0x66,0x8b,0x5d,0x68,0x8d,0x60,0x6c,0x8e,0x66,0x70,0x92,0x69,0x74,0x94,0x6c, 0x76,0x96,0x70,0x7b,0x99,0x74,0x7e,0x9b,0x81,0x8b,0xaa,0x60,0x60,0x75,0x44,0x3b, 0x4b,0x46,0x3d,0x4d,0x49,0x3f,0x4f,0x4c,0x42,0x54,0x47,0x3f,0x4f,0x4b,0x41,0x53, 0x57,0x4c,0x60,0x56,0x4c,0x5f,0x24,0x22,0x2e,0x18,0x1a,0x22,0x17,0x1a,0x22,0x17, 0x19,0x21,0x17,0x18,0x20,0x16,0x18,0x20,0x16,0x17,0x1f,0x16,0x16,0x1e,0x15,0x16, 0x1d,0x14,0x15,0x1c,0x14,0x15,0x1c,0x3a,0x30,0x3e,0x36,0x2d,0x39,0x35,0x2c,0x37, 0x83,0x7f,0x8c,0x62,0x6e,0x8e,0x59,0x64,0x89,0x57,0x63,0x87,0x58,0x64,0x89,0x5c, 0x66,0x8c,0x5c,0x68,0x8d,0x5f,0x69,0x8e,0x5a,0x66,0x8b,0x53,0x5c,0x84,0x4f,0x58, 0x81,0x4b,0x54,0x7c,0x42,0x4a,0x6d,0x45,0x50,0x70,0x6c,0x75,0x94,0x70,0x74,0x81, 0x09,0x09,0x0c,0x08,0x08,0x0b,0x3c,0x2f,0x3a,0x3c,0x30,0x3b,0x3f,0x33,0x41,0x55, 0x60,0x87,0x50,0x4d,0x76,0x5d,0x51,0x73,0x5d,0x51,0x74,0x5d,0x51,0x74,0x5d,0x51, 0x73,0x5e,0x51,0x74,0x5e,0x51,0x74,0x5d,0x51,0x74,0x5e,0x51,0x75,0x60,0x51,0x75, 0x5b,0x43,0x5e,0x3f,0x2d,0x3f,0x45,0x32,0x46,0x51,0x3d,0x55,0x5f,0x4a,0x68,0x4d, 0x50,0x74,0x0e,0x0f,0x14,0x10,0x10,0x16,0x11,0x11,0x17,0x12,0x12,0x18,0x12,0x12, 0x18,0x12,0x12,0x19,0x12,0x12,0x18,0x12,0x12,0x1a,0x12,0x12,0x19,0x12,0x12,0x19, 0x11,0x12,0x18,0x11,0x12,0x17,0x10,0x11,0x16,0x10,0x11,0x16,0x0e,0x0f,0x15,0x0e, 0x0f,0x15,0x0e,0x0f,0x14,0x0d,0x0e,0x12,0x0c,0x0d,0x12,0x0c,0x0d,0x11,0x0b,0x0c, 0x10,0x0a,0x0b,0x0f,0x0a,0x0a,0x0e,0x09,0x0a,0x0d,0x09,0x0a,0x0d,0x08,0x09,0x0b, 0x07,0x08,0x0b,0x07,0x07,0x0a,0x06,0x06,0x09,0x06,0x06,0x09,0x06,0x06,0x07,0x05, 0x06,0x07,0x05,0x06,0x07,0x04,0x04,0x06,0x04,0x04,0x06,0x03,0x04,0x05,0x02,0x03, 0x04,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x15,0x15,0x18,0x80,0x8a,0xa9,0x51,0x55,0x81,0x5f,0x52,0x76,0x60, 0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53, 0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77, 0x60,0x53,0x77,0x67,0x59,0x7f,0x2d,0x27,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02, 0x02,0x02,0x02,0x02,0x02,0x0a,0x0a,0x0a,0x23,0x23,0x23,0x02,0x02,0x03,0x02,0x02, 0x02,0x03,0x03,0x04,0x03,0x03,0x04,0x04,0x04,0x05,0x06,0x06,0x07,0x13,0x14,0x17, 0x36,0x37,0x3a,0x66,0x67,0x6b,0x6a,0x6b,0x71,0x3e,0x42,0x4e,0x28,0x29,0x37,0x26, 0x26,0x33,0x30,0x2a,0x36,0x45,0x4a,0x59,0x72,0x76,0x81,0x5b,0x5e,0x67,0x23,0x21, 0x2b,0x19,0x13,0x18,0x21,0x1d,0x25,0x1f,0x21,0x25,0x11,0x12,0x16,0x0a,0x0c,0x0f, 0x09,0x09,0x0c,0x06,0x05,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02, 0x02,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x45,0x4f,0x6e,0x57,0x50, 0x79,0x64,0x50,0x71,0x5c,0x44,0x5e,0x64,0x50,0x6f,0x64,0x52,0x72,0x5f,0x53,0x7a, 0x55,0x53,0x7c,0x5b,0x63,0x8b,0xac,0xb4,0xc9,0xef,0xf1,0xf5,0xe0,0xe2,0xea,0xdb, 0xdf,0xe8,0xc0,0xc6,0xd5,0x92,0x9a,0xb5,0x82,0x8a,0xa9,0x9b,0xa3,0xbc,0xb7,0xbe, 0xcf,0x8d,0x94,0xa5,0x20,0x22,0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03, 0x03,0x03,0x04,0x04,0x04,0x05,0x04,0x05,0x06,0x05,0x06,0x06,0x06,0x06,0x08,0x06, 0x07,0x09,0x07,0x08,0x0a,0x09,0x09,0x0b,0x0a,0x0a,0x0e,0x0c,0x0c,0x10,0x4e,0x54, 0x68,0x47,0x4e,0x70,0x53,0x44,0x5d,0x42,0x32,0x46,0x4c,0x43,0x5e,0x4e,0x47,0x61, 0x56,0x4f,0x67,0x5a,0x54,0x6c,0x57,0x51,0x6d,0x59,0x4f,0x6d,0x58,0x4d,0x6a,0x5a, 0x54,0x70,0x5c,0x4f,0x6b,0x5d,0x4d,0x68,0x59,0x4b,0x65,0x58,0x4c,0x66,0x53,0x45, 0x5f,0x56,0x46,0x61,0x56,0x47,0x61,0x56,0x47,0x62,0x4f,0x41,0x5a,0x46,0x39,0x51, 0x3e,0x37,0x51,0x3e,0x3e,0x5e,0x41,0x3e,0x60,0x46,0x44,0x68,0x6f,0x77,0x97,0x3e, 0x2f,0x3b,0x20,0x17,0x1f,0x21,0x18,0x20,0x4c,0x46,0x63,0x5b,0x52,0x79,0x64,0x4d, 0x6a,0x52,0x4f,0x7a,0x52,0x52,0x7d,0x52,0x54,0x80,0x52,0x56,0x81,0x52,0x5c,0x86, 0x54,0x5f,0x89,0x58,0x64,0x8c,0x5c,0x67,0x90,0x64,0x53,0x75,0x8e,0x98,0xb3,0xeb, 0xee,0xf2,0x53,0x4b,0x53,0x47,0x36,0x43,0x4e,0x3d,0x4b,0x4c,0x3b,0x49,0x4f,0x3e, 0x4c,0x5d,0x4a,0x5b,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x94,0x99,0xa4,0x88,0x92,0xb0,0x52,0x4f,0x7b,0x56,0x62, 0x8b,0x58,0x64,0x8c,0x53,0x5f,0x89,0x53,0x5f,0x89,0x54,0x5f,0x89,0x56,0x62,0x8b, 0x56,0x62,0x8b,0x56,0x62,0x8b,0x57,0x63,0x8b,0x58,0x64,0x8c,0x58,0x64,0x8c,0x57, 0x64,0x8b,0x52,0x4f,0x7a,0x7a,0x84,0xa6,0xba,0xbb,0xc0,0x00,0x00,0x00,0x00,0x00, 0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03, 0x02,0x02,0x03,0x02,0x02,0x03,0x03,0x03,0x04,0x03,0x04,0x05,0x03,0x04,0x05,0x04, 0x04,0x06,0x04,0x04,0x06,0x05,0x05,0x06,0x05,0x06,0x07,0x06,0x06,0x07,0x06,0x06, 0x08,0x06,0x07,0x09,0x06,0x06,0x08,0x06,0x06,0x08,0x06,0x07,0x09,0x06,0x07,0x09, 0x06,0x07,0x0a,0x07,0x08,0x0a,0x07,0x08,0x0a,0x07,0x08,0x0a,0x08,0x09,0x0b,0x08, 0x09,0x0b,0x09,0x0a,0x0b,0x09,0x0a,0x0c,0x0a,0x0a,0x0d,0x09,0x0a,0x0b,0x09,0x0a, 0x0c,0x09,0x0a,0x0c,0x0a,0x0a,0x0d,0x0a,0x0a,0x0d,0x0a,0x0a,0x0d,0x0a,0x0b,0x0e, 0x0b,0x0c,0x0e,0x0c,0x0d,0x0f,0x0d,0x0e,0x10,0x0d,0x0e,0x11,0x0f,0x10,0x13,0x16, 0x16,0x1a,0x1a,0x1a,0x20,0x1d,0x1d,0x23,0x1d,0x1d,0x23,0x1c,0x1b,0x22,0x1c,0x1c, 0x22,0x1b,0x1c,0x22,0x17,0x19,0x1e,0x28,0x24,0x2c,0x2a,0x24,0x2b,0x23,0x1e,0x24, 0x5d,0x5b,0x60,0x71,0x7a,0x95,0x55,0x62,0x84,0x56,0x62,0x86,0x59,0x63,0x8a,0x5a, 0x67,0x8d,0x5b,0x66,0x8e,0x5b,0x66,0x8e,0x5b,0x67,0x8e,0x59,0x64,0x8b,0x55,0x61, 0x89,0x54,0x5f,0x87,0x51,0x59,0x82,0x62,0x4f,0x6c,0x54,0x51,0x77,0x2d,0x31,0x47, 0x0b,0x0c,0x0f,0x0a,0x0b,0x0e,0x0a,0x0a,0x0d,0x07,0x08,0x0a,0x2d,0x24,0x2f,0x92, 0x99,0xb1,0x45,0x4e,0x72,0x49,0x42,0x5e,0x5e,0x53,0x78,0x5d,0x53,0x78,0x5d,0x52, 0x78,0x5f,0x53,0x77,0x5f,0x53,0x77,0x5f,0x53,0x77,0x5f,0x53,0x77,0x5f,0x53,0x76, 0x5f,0x54,0x76,0x5e,0x54,0x76,0x5e,0x55,0x76,0x5f,0x56,0x76,0x5d,0x56,0x76,0x19, 0x1a,0x20,0x18,0x1a,0x20,0x1a,0x1b,0x21,0x18,0x1a,0x1f,0x18,0x1a,0x1f,0x16,0x19, 0x1e,0x16,0x18,0x1c,0x14,0x16,0x1a,0x29,0x26,0x2d,0x7f,0x8c,0xc8,0x4f,0x4b,0x6c, 0x48,0x41,0x5c,0x5b,0x51,0x76,0x56,0x50,0x77,0x54,0x50,0x77,0x51,0x4f,0x78,0x51, 0x50,0x78,0x51,0x4f,0x79,0x52,0x52,0x7b,0x53,0x56,0x7e,0x52,0x5d,0x84,0x55,0x5f, 0x87,0x57,0x63,0x89,0x5b,0x66,0x8b,0x5d,0x69,0x8d,0x61,0x6c,0x8e,0x65,0x70,0x92, 0x67,0x73,0x93,0x6c,0x76,0x96,0x70,0x7b,0x99,0x72,0x7d,0x9a,0x7f,0x89,0xa9,0x72, 0x78,0x93,0x46,0x3d,0x4d,0x48,0x40,0x51,0x4c,0x42,0x54,0x47,0x3c,0x4d,0x44,0x3b, 0x4c,0x49,0x3e,0x50,0x41,0x3a,0x4b,0x18,0x1a,0x23,0x17,0x1a,0x22,0x17,0x1a,0x22, 0x17,0x1a,0x22,0x17,0x19,0x21,0x17,0x18,0x21,0x16,0x18,0x20,0x16,0x18,0x20,0x16, 0x16,0x1e,0x15,0x16,0x1d,0x14,0x16,0x1d,0x13,0x15,0x1c,0x2d,0x28,0x34,0x37,0x2e, 0x3b,0x34,0x2b,0x36,0x36,0x2d,0x38,0x7f,0x86,0xa0,0x5f,0x68,0x8b,0x5a,0x66,0x89, 0x58,0x64,0x89,0x56,0x62,0x88,0x54,0x5f,0x85,0x51,0x5c,0x83,0x51,0x5b,0x83,0x50, 0x55,0x7c,0x50,0x51,0x79,0x4c,0x4e,0x75,0x42,0x43,0x67,0x42,0x4a,0x6c,0x65,0x6d, 0x8f,0x70,0x75,0x85,0x09,0x09,0x0b,0x08,0x08,0x0a,0x38,0x2d,0x37,0x3c,0x2f,0x39, 0x3d,0x32,0x3f,0x54,0x60,0x86,0x50,0x4d,0x76,0x5d,0x51,0x74,0x5d,0x51,0x73,0x5d, 0x51,0x74,0x5e,0x51,0x75,0x5e,0x51,0x74,0x5e,0x51,0x74,0x5e,0x51,0x75,0x5e,0x51, 0x75,0x5e,0x51,0x75,0x5c,0x50,0x73,0x59,0x44,0x5e,0x49,0x36,0x4d,0x4f,0x3a,0x52, 0x5b,0x47,0x62,0x51,0x52,0x78,0x0f,0x0f,0x15,0x10,0x11,0x16,0x12,0x12,0x18,0x12, 0x12,0x18,0x12,0x12,0x1a,0x13,0x13,0x1a,0x12,0x13,0x1a,0x12,0x13,0x1a,0x13,0x13, 0x1a,0x12,0x13,0x1a,0x12,0x12,0x19,0x12,0x12,0x19,0x11,0x12,0x18,0x11,0x12,0x17, 0x0f,0x10,0x16,0x0f,0x10,0x16,0x0e,0x0f,0x15,0x0e,0x0f,0x14,0x0d,0x0e,0x12,0x0c, 0x0d,0x12,0x0b,0x0c,0x10,0x0b,0x0c,0x10,0x0a,0x0b,0x0f,0x0a,0x0a,0x0e,0x09,0x0a, 0x0d,0x09,0x0a,0x0d,0x08,0x09,0x0b,0x07,0x08,0x0a,0x07,0x07,0x0a,0x06,0x06,0x09, 0x06,0x06,0x09,0x06,0x06,0x07,0x05,0x06,0x07,0x04,0x04,0x06,0x04,0x04,0x06,0x04, 0x04,0x06,0x02,0x03,0x04,0x02,0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02, 0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x03,0x85,0x8f,0xac,0x53,0x5e,0x88, 0x5a,0x51,0x78,0x5f,0x52,0x76,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60, 0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53, 0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x64,0x56,0x7c,0x5c,0x4f,0x74,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x23,0x23,0x23,0x09, 0x09,0x09,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x03,0x03,0x03,0x04,0x04,0x05, 0x06,0x0a,0x0b,0x0d,0x23,0x24,0x26,0x4e,0x4f,0x52,0x5e,0x5f,0x65,0x61,0x63,0x6a, 0x61,0x63,0x6b,0x32,0x36,0x42,0x2c,0x2a,0x38,0x2f,0x2f,0x40,0x45,0x4a,0x59,0x32, 0x36,0x45,0x21,0x1d,0x25,0x14,0x12,0x19,0x16,0x18,0x1d,0x1e,0x20,0x22,0x13,0x15, 0x18,0x0a,0x0b,0x0e,0x07,0x06,0x09,0x02,0x02,0x03,0x00,0x00,0x00,0x00,0x00,0x00, 0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x2f,0x35,0x49,0x52, 0x50,0x7c,0x64,0x53,0x74,0x62,0x53,0x77,0x5e,0x46,0x62,0x62,0x4a,0x65,0x64,0x4f, 0x6e,0x63,0x54,0x79,0x57,0x55,0x7e,0x5f,0x6a,0x90,0xbf,0xc4,0xd5,0xe5,0xe7,0xed, 0xd1,0xd6,0xe0,0xd3,0xd8,0xe2,0xd9,0xde,0xe7,0xcc,0xd1,0xde,0xa1,0xa9,0xc0,0x76, 0x80,0xa0,0x6f,0x7a,0x9d,0x85,0x90,0xad,0x91,0x9a,0xb6,0x51,0x56,0x63,0x03,0x04, 0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x03,0x05,0x04,0x04,0x06,0x05,0x05,0x06, 0x04,0x05,0x06,0x06,0x06,0x08,0x06,0x07,0x0a,0x06,0x07,0x09,0x08,0x08,0x0a,0x24, 0x25,0x2e,0x58,0x61,0x82,0x50,0x49,0x6b,0x51,0x3f,0x56,0x52,0x40,0x58,0x54,0x47, 0x63,0x4c,0x41,0x5b,0x4b,0x43,0x5d,0x49,0x41,0x5b,0x4e,0x49,0x61,0x55,0x50,0x6a, 0x56,0x4d,0x68,0x5a,0x51,0x69,0x53,0x4b,0x67,0x5a,0x4c,0x68,0x56,0x49,0x64,0x57, 0x4b,0x65,0x57,0x48,0x64,0x59,0x4a,0x65,0x5a,0x4a,0x67,0x5b,0x49,0x66,0x55,0x45, 0x5f,0x4a,0x3d,0x57,0x43,0x3a,0x56,0x3e,0x3b,0x5b,0x3d,0x3c,0x5b,0x53,0x45,0x63, 0x63,0x6b,0x89,0x4e,0x43,0x52,0x20,0x17,0x1f,0x1f,0x17,0x1f,0x4c,0x46,0x62,0x5a, 0x52,0x79,0x63,0x4b,0x67,0x55,0x50,0x79,0x52,0x50,0x7b,0x52,0x53,0x7d,0x52,0x56, 0x82,0x52,0x5c,0x86,0x54,0x5f,0x89,0x58,0x64,0x8c,0x5f,0x6c,0x93,0x64,0x4f,0x6d, 0x7e,0x8a,0xa9,0xf8,0xf8,0xfa,0x6c,0x67,0x6f,0x47,0x37,0x43,0x4e,0x3d,0x4b,0x4c, 0x3b,0x49,0x4c,0x3b,0x49,0x5b,0x48,0x5a,0x0f,0x0c,0x10,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5e,0x5f,0x63,0xa4,0xac,0xc3,0x55, 0x60,0x8a,0x52,0x50,0x7b,0x5a,0x66,0x8e,0x55,0x60,0x8a,0x53,0x5e,0x89,0x53,0x5f, 0x89,0x53,0x5f,0x89,0x56,0x62,0x8b,0x56,0x62,0x8b,0x56,0x63,0x8b,0x57,0x64,0x8b, 0x58,0x65,0x8c,0x58,0x64,0x8b,0x52,0x52,0x7d,0x55,0x62,0x89,0xc8,0xcd,0xdb,0x2d, 0x2d,0x2d,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x03,0x03,0x04, 0x03,0x04,0x05,0x04,0x04,0x05,0x04,0x04,0x06,0x05,0x05,0x06,0x04,0x05,0x06,0x05, 0x05,0x06,0x06,0x06,0x07,0x06,0x06,0x08,0x06,0x06,0x08,0x06,0x07,0x09,0x06,0x07, 0x09,0x06,0x07,0x09,0x07,0x08,0x0b,0x07,0x08,0x0a,0x07,0x08,0x0a,0x08,0x08,0x0a, 0x08,0x09,0x0b,0x08,0x09,0x0b,0x08,0x09,0x0a,0x09,0x0a,0x0c,0x09,0x0a,0x0c,0x09, 0x0a,0x0c,0x09,0x0a,0x0c,0x09,0x0a,0x0c,0x0a,0x0a,0x0c,0x0a,0x0a,0x0d,0x0a,0x0b, 0x0e,0x0a,0x0a,0x0d,0x0a,0x0b,0x0e,0x0b,0x0c,0x0e,0x0c,0x0d,0x0f,0x0e,0x0e,0x12, 0x0e,0x0f,0x12,0x11,0x12,0x15,0x15,0x17,0x1b,0x1a,0x1b,0x20,0x1c,0x1b,0x21,0x1b, 0x1b,0x21,0x18,0x19,0x1e,0x16,0x17,0x1b,0x16,0x18,0x1c,0x23,0x20,0x27,0x29,0x23, 0x28,0x24,0x1d,0x23,0x62,0x5f,0x64,0x78,0x81,0x9d,0x57,0x63,0x87,0x57,0x62,0x87, 0x59,0x64,0x8a,0x5a,0x65,0x8e,0x5b,0x66,0x8f,0x5c,0x66,0x8e,0x5b,0x66,0x8c,0x5a, 0x65,0x8b,0x56,0x62,0x89,0x54,0x5f,0x88,0x52,0x5b,0x84,0x62,0x4f,0x6d,0x52,0x50, 0x79,0x2d,0x32,0x46,0x0b,0x0d,0x10,0x0c,0x0d,0x10,0x0a,0x0a,0x0e,0x08,0x09,0x0a, 0x29,0x21,0x2d,0x8c,0x93,0xac,0x47,0x50,0x75,0x49,0x41,0x5f,0x5d,0x53,0x78,0x5d, 0x53,0x78,0x5d,0x52,0x78,0x5d,0x53,0x79,0x5f,0x53,0x77,0x5f,0x53,0x77,0x5f,0x53, 0x77,0x5f,0x53,0x76,0x5e,0x53,0x76,0x5e,0x54,0x75,0x5e,0x55,0x77,0x5f,0x55,0x76, 0x5e,0x56,0x76,0x18,0x1a,0x1f,0x18,0x1a,0x20,0x19,0x1a,0x20,0x18,0x1a,0x1f,0x16, 0x18,0x1d,0x16,0x18,0x1d,0x15,0x16,0x1a,0x13,0x15,0x19,0x21,0x1e,0x25,0x83,0x8b, 0xc8,0x52,0x4d,0x70,0x48,0x41,0x5c,0x58,0x50,0x75,0x58,0x52,0x77,0x55,0x50,0x77, 0x51,0x4f,0x78,0x51,0x4f,0x78,0x52,0x50,0x7a,0x52,0x52,0x7a,0x52,0x56,0x7e,0x53, 0x5d,0x84,0x55,0x5f,0x87,0x57,0x62,0x88,0x5a,0x64,0x89,0x57,0x62,0x83,0x61,0x6d, 0x8f,0x65,0x6f,0x92,0x68,0x73,0x93,0x6d,0x76,0x96,0x70,0x7a,0x97,0x70,0x7a,0x99, 0x79,0x82,0xa1,0x7c,0x84,0xa0,0x4b,0x43,0x53,0x4b,0x42,0x55,0x4e,0x43,0x57,0x46, 0x3c,0x4f,0x35,0x2d,0x3b,0x1e,0x1c,0x25,0x1d,0x1d,0x28,0x1a,0x1a,0x24,0x17,0x1a, 0x22,0x18,0x1a,0x22,0x17,0x1a,0x22,0x17,0x1a,0x22,0x17,0x19,0x21,0x16,0x18,0x20, 0x16,0x18,0x20,0x16,0x17,0x1e,0x16,0x16,0x1e,0x15,0x16,0x1d,0x13,0x15,0x1c,0x13, 0x14,0x1b,0x3b,0x32,0x3f,0x36,0x2d,0x39,0x38,0x2d,0x3a,0x8c,0x8f,0xa2,0x5f,0x69, 0x8c,0x4f,0x58,0x80,0x4f,0x54,0x7d,0x50,0x52,0x79,0x50,0x50,0x78,0x50,0x4e,0x78, 0x50,0x4d,0x78,0x50,0x4d,0x76,0x50,0x4d,0x75,0x4c,0x4a,0x70,0x40,0x3e,0x61,0x40, 0x3d,0x5d,0x56,0x5f,0x83,0x5d,0x64,0x7b,0x08,0x08,0x0b,0x07,0x07,0x0a,0x35,0x2a, 0x34,0x3b,0x2e,0x38,0x3b,0x30,0x3d,0x54,0x5f,0x86,0x50,0x4d,0x76,0x5d,0x51,0x73, 0x5d,0x51,0x74,0x5e,0x51,0x74,0x5e,0x51,0x75,0x5e,0x51,0x74,0x5e,0x51,0x74,0x5e, 0x51,0x75,0x5e,0x51,0x75,0x5e,0x51,0x75,0x5d,0x50,0x74,0x5b,0x4b,0x69,0x49,0x37, 0x4d,0x49,0x37,0x4d,0x59,0x45,0x60,0x56,0x56,0x7d,0x0f,0x0f,0x15,0x11,0x11,0x17, 0x12,0x12,0x19,0x12,0x12,0x1a,0x13,0x14,0x1a,0x13,0x14,0x1b,0x13,0x14,0x1b,0x13, 0x14,0x1b,0x13,0x14,0x1b,0x13,0x14,0x1b,0x13,0x14,0x1a,0x12,0x13,0x1a,0x12,0x12, 0x19,0x12,0x12,0x19,0x11,0x12,0x18,0x10,0x11,0x16,0x10,0x11,0x16,0x0e,0x10,0x15, 0x0e,0x0f,0x15,0x0e,0x0e,0x13,0x0c,0x0e,0x12,0x0c,0x0d,0x11,0x0a,0x0c,0x0f,0x0a, 0x0b,0x0e,0x0a,0x0a,0x0e,0x09,0x0a,0x0d,0x08,0x09,0x0b,0x08,0x09,0x0c,0x07,0x08, 0x0b,0x06,0x06,0x09,0x06,0x06,0x09,0x06,0x06,0x09,0x05,0x06,0x07,0x06,0x06,0x07, 0x04,0x05,0x06,0x04,0x04,0x06,0x03,0x04,0x05,0x02,0x03,0x04,0x02,0x03,0x04,0x02, 0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x6b,0x73, 0x89,0x5b,0x68,0x8e,0x54,0x4f,0x78,0x5f,0x52,0x76,0x60,0x53,0x77,0x60,0x53,0x77, 0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60, 0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x61,0x54,0x79,0x74,0x65, 0x93,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x1c,0x1c,0x1c,0x11,0x11,0x11,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x03,0x02,0x02,0x03,0x06,0x06,0x07,0x0e,0x0e,0x0f,0x22,0x23,0x25,0x3a,0x3b, 0x3f,0x6f,0x71,0x75,0x76,0x79,0x7e,0x52,0x55,0x5e,0x34,0x39,0x48,0x2e,0x2c,0x3a, 0x30,0x27,0x31,0x10,0x0c,0x0e,0x17,0x12,0x16,0x14,0x16,0x1c,0x22,0x22,0x26,0x17, 0x18,0x1a,0x0a,0x0b,0x0d,0x05,0x05,0x06,0x03,0x03,0x04,0x02,0x02,0x02,0x00,0x00, 0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x13,0x15,0x1e, 0x50,0x5b,0x84,0x60,0x53,0x77,0x52,0x4f,0x7b,0x53,0x50,0x7a,0x5d,0x45,0x60,0x62, 0x4a,0x66,0x64,0x50,0x71,0x60,0x55,0x7a,0x57,0x55,0x7e,0x63,0x6d,0x93,0xd6,0xd9, 0xe2,0xe1,0xe3,0xea,0xd0,0xd5,0xe0,0xcf,0xd3,0xdf,0xcb,0xd1,0xdd,0xd1,0xd6,0xe1, 0xcc,0xd1,0xde,0xac,0xb3,0xc8,0x7b,0x84,0xa5,0x5e,0x69,0x91,0x6a,0x75,0x9a,0x96, 0xa0,0xba,0x84,0x8b,0x9e,0x19,0x1b,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x03,0x04,0x03,0x04, 0x05,0x03,0x04,0x05,0x04,0x05,0x06,0x04,0x05,0x06,0x06,0x06,0x08,0x06,0x06,0x08, 0x06,0x06,0x09,0x57,0x5d,0x76,0x4c,0x55,0x7b,0x57,0x43,0x5f,0x52,0x3f,0x57,0x59, 0x4b,0x6a,0x54,0x4a,0x69,0x55,0x49,0x67,0x51,0x47,0x66,0x4f,0x45,0x61,0x54,0x4b, 0x65,0x54,0x4d,0x65,0x51,0x48,0x61,0x57,0x4d,0x65,0x5e,0x53,0x6d,0x53,0x48,0x64, 0x54,0x46,0x62,0x56,0x48,0x64,0x5a,0x4a,0x67,0x5d,0x4c,0x6a,0x5e,0x4b,0x68,0x5f, 0x4c,0x69,0x5a,0x4a,0x67,0x54,0x45,0x60,0x4f,0x42,0x5f,0x44,0x40,0x63,0x43,0x45, 0x68,0x56,0x48,0x64,0x55,0x5f,0x80,0x64,0x5f,0x6f,0x1f,0x16,0x1e,0x1f,0x16,0x1f, 0x47,0x41,0x5b,0x5d,0x52,0x79,0x63,0x4b,0x67,0x56,0x50,0x79,0x52,0x50,0x7b,0x52, 0x50,0x7c,0x52,0x55,0x81,0x52,0x5b,0x85,0x53,0x5e,0x88,0x5a,0x65,0x8d,0x60,0x6d, 0x93,0x64,0x53,0x74,0x69,0x74,0x99,0xeb,0xed,0xf1,0x83,0x81,0x89,0x45,0x35,0x41, 0x4f,0x3d,0x4b,0x52,0x40,0x4f,0x55,0x42,0x52,0x60,0x4d,0x60,0x1c,0x17,0x1c,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x14,0x14, 0xb9,0xbf,0xd0,0x73,0x7e,0xa1,0x60,0x53,0x77,0x5a,0x66,0x8e,0x55,0x60,0x8a,0x52, 0x5d,0x88,0x53,0x5e,0x88,0x54,0x5f,0x89,0x55,0x60,0x8a,0x56,0x62,0x8b,0x57,0x63, 0x8c,0x56,0x63,0x8b,0x57,0x63,0x8b,0x57,0x64,0x8b,0x54,0x60,0x89,0x52,0x4f,0x7a, 0x8a,0x93,0xb1,0x87,0x88,0x8a,0x00,0x00,0x00,0x02,0x02,0x02,0x0b,0x0b,0x0b,0x0d, 0x0d,0x0d,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x03,0x03,0x03, 0x04,0x03,0x03,0x04,0x03,0x04,0x05,0x04,0x04,0x06,0x04,0x04,0x05,0x04,0x05,0x06, 0x05,0x05,0x06,0x04,0x05,0x06,0x0a,0x0b,0x0c,0x1e,0x1e,0x20,0x3a,0x3a,0x3b,0x31, 0x31,0x32,0x11,0x11,0x14,0x08,0x08,0x0a,0x12,0x10,0x14,0x0b,0x0a,0x0e,0x07,0x08, 0x0a,0x08,0x09,0x0b,0x08,0x09,0x0a,0x08,0x09,0x0a,0x08,0x09,0x0a,0x08,0x09,0x0a, 0x08,0x09,0x0b,0x09,0x09,0x0b,0x09,0x0a,0x0b,0x0a,0x0a,0x0c,0x0a,0x0a,0x0c,0x0a, 0x0a,0x0d,0x0a,0x0a,0x0d,0x0a,0x0a,0x0d,0x0a,0x0b,0x0e,0x0a,0x0b,0x0e,0x0b,0x0c, 0x0f,0x0d,0x0e,0x10,0x0e,0x0f,0x12,0x10,0x11,0x15,0x13,0x14,0x18,0x15,0x17,0x1b, 0x17,0x17,0x1c,0x14,0x15,0x1a,0x13,0x15,0x19,0x12,0x14,0x17,0x13,0x15,0x19,0x1e, 0x1d,0x22,0x2a,0x23,0x29,0x24,0x1e,0x23,0x5b,0x58,0x5c,0x79,0x82,0x9e,0x5b,0x67, 0x8b,0x58,0x63,0x89,0x59,0x64,0x8c,0x5b,0x68,0x8e,0x5b,0x65,0x8d,0x5b,0x65,0x8d, 0x5b,0x65,0x8d,0x5a,0x64,0x8c,0x57,0x62,0x8a,0x55,0x5f,0x89,0x52,0x5d,0x86,0x63, 0x52,0x70,0x52,0x51,0x7a,0x2e,0x33,0x46,0x0a,0x0b,0x0e,0x0b,0x0c,0x0f,0x0a,0x0a, 0x0d,0x08,0x09,0x0a,0x28,0x21,0x2b,0x7d,0x83,0x9a,0x4b,0x53,0x78,0x4a,0x41,0x5e, 0x5d,0x52,0x78,0x5d,0x53,0x78,0x5f,0x52,0x76,0x5f,0x53,0x77,0x5f,0x53,0x77,0x5f, 0x53,0x77,0x5f,0x53,0x77,0x5f,0x53,0x76,0x5e,0x53,0x76,0x5f,0x53,0x76,0x5f,0x55, 0x77,0x5f,0x55,0x77,0x5e,0x56,0x77,0x17,0x19,0x1e,0x19,0x1a,0x20,0x18,0x1a,0x1f, 0x18,0x1a,0x1f,0x16,0x18,0x1e,0x16,0x17,0x1b,0x14,0x16,0x1a,0x12,0x14,0x18,0x1c, 0x1b,0x20,0x85,0x83,0xbf,0x58,0x50,0x73,0x48,0x42,0x5c,0x58,0x50,0x74,0x56,0x4f, 0x77,0x56,0x50,0x77,0x51,0x4e,0x78,0x52,0x4f,0x79,0x52,0x50,0x7a,0x52,0x53,0x7c, 0x52,0x56,0x7f,0x53,0x5d,0x86,0x55,0x5f,0x87,0x57,0x62,0x88,0x56,0x60,0x84,0x3e, 0x43,0x5a,0x60,0x6c,0x8e,0x63,0x6f,0x90,0x68,0x73,0x93,0x6c,0x75,0x95,0x6c,0x77, 0x95,0x6f,0x79,0x97,0x73,0x7c,0x9b,0x83,0x8d,0xad,0x41,0x42,0x53,0x20,0x1f,0x2b, 0x29,0x25,0x32,0x2e,0x29,0x35,0x2d,0x28,0x34,0x29,0x24,0x30,0x26,0x22,0x2d,0x1e, 0x1e,0x29,0x19,0x1a,0x22,0x17,0x1a,0x22,0x17,0x1a,0x22,0x17,0x1a,0x22,0x17,0x19, 0x21,0x16,0x17,0x1f,0x16,0x18,0x1f,0x15,0x16,0x1e,0x16,0x16,0x1e,0x14,0x15,0x1c, 0x13,0x15,0x1c,0x13,0x14,0x1b,0x2b,0x27,0x32,0x3c,0x32,0x3f,0x40,0x36,0x43,0x59, 0x52,0x64,0x59,0x63,0x88,0x4f,0x4d,0x75,0x4f,0x4d,0x74,0x51,0x4d,0x75,0x51,0x4d, 0x76,0x52,0x4e,0x76,0x53,0x4e,0x76,0x54,0x4e,0x76,0x55,0x4e,0x75,0x52,0x4a,0x70, 0x44,0x3d,0x5c,0x3d,0x37,0x54,0x4d,0x54,0x76,0x55,0x5c,0x77,0x08,0x08,0x0b,0x07, 0x07,0x0a,0x32,0x27,0x31,0x3b,0x2e,0x39,0x3a,0x2f,0x3b,0x54,0x60,0x85,0x51,0x4d, 0x77,0x5d,0x51,0x74,0x5d,0x51,0x74,0x5e,0x51,0x75,0x5e,0x51,0x74,0x5e,0x51,0x74, 0x5e,0x51,0x75,0x5e,0x51,0x75,0x5e,0x51,0x75,0x5e,0x52,0x75,0x5e,0x51,0x74,0x5d, 0x4c,0x6b,0x4a,0x37,0x4d,0x48,0x35,0x4d,0x58,0x45,0x5f,0x58,0x57,0x82,0x10,0x11, 0x16,0x12,0x12,0x19,0x13,0x13,0x1a,0x13,0x14,0x1a,0x15,0x15,0x1d,0x15,0x16,0x1d, 0x15,0x16,0x1d,0x15,0x16,0x1d,0x15,0x16,0x1e,0x15,0x16,0x1d,0x13,0x14,0x1b,0x13, 0x14,0x1b,0x13,0x14,0x1b,0x13,0x14,0x1a,0x12,0x12,0x19,0x11,0x12,0x19,0x10,0x12, 0x17,0x0f,0x10,0x16,0x0e,0x10,0x15,0x0e,0x0e,0x13,0x0e,0x0e,0x13,0x0c,0x0e,0x12, 0x0b,0x0d,0x11,0x0a,0x0c,0x0f,0x0a,0x0b,0x0f,0x0a,0x0a,0x0e,0x0a,0x0a,0x0e,0x09, 0x0a,0x0c,0x07,0x08,0x0b,0x07,0x08,0x0a,0x06,0x07,0x0a,0x06,0x06,0x09,0x06,0x06, 0x08,0x06,0x06,0x07,0x04,0x05,0x06,0x04,0x05,0x06,0x04,0x04,0x06,0x03,0x03,0x04, 0x03,0x03,0x04,0x02,0x03,0x04,0x02,0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x03,0x02, 0x02,0x02,0x4a,0x4e,0x5c,0x68,0x73,0x97,0x51,0x4e,0x79,0x5f,0x52,0x76,0x5f,0x52, 0x76,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77, 0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60, 0x53,0x77,0x6f,0x60,0x89,0x16,0x14,0x17,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x19,0x18,0x19,0x16,0x16,0x16,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x05,0x06,0x06,0x0a, 0x0a,0x0b,0x1e,0x1f,0x21,0x51,0x52,0x55,0x72,0x74,0x78,0x65,0x67,0x6e,0x44,0x47, 0x52,0x28,0x27,0x36,0x29,0x21,0x29,0x16,0x11,0x15,0x20,0x1e,0x27,0x2d,0x2e,0x32, 0x1a,0x1a,0x1c,0x0a,0x0b,0x0c,0x05,0x06,0x06,0x04,0x04,0x05,0x02,0x02,0x03,0x02, 0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03, 0x05,0x50,0x5a,0x7b,0x63,0x53,0x77,0x54,0x50,0x79,0x52,0x53,0x7d,0x52,0x4f,0x7b, 0x5d,0x45,0x60,0x62,0x4b,0x66,0x65,0x53,0x72,0x5d,0x54,0x7a,0x57,0x55,0x7e,0x66, 0x72,0x96,0xde,0xe0,0xe9,0xde,0xe1,0xe9,0xd1,0xd5,0xe0,0xcf,0xd3,0xdf,0xcb,0xcf, 0xdd,0xc6,0xcb,0xd9,0xc8,0xcc,0xda,0xc7,0xcb,0xd9,0xa8,0xb1,0xc6,0x82,0x8c,0xab, 0x5a,0x65,0x8e,0x56,0x62,0x8a,0x7c,0x88,0xa8,0x83,0x8e,0xab,0x43,0x48,0x57,0x03, 0x03,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02, 0x02,0x03,0x03,0x03,0x05,0x03,0x03,0x05,0x04,0x04,0x06,0x04,0x04,0x06,0x05,0x05, 0x06,0x05,0x06,0x07,0x34,0x37,0x42,0x5c,0x67,0x8b,0x5e,0x4f,0x70,0x51,0x3e,0x56, 0x5d,0x4a,0x67,0x58,0x4d,0x6f,0x57,0x4c,0x6d,0x56,0x4b,0x6b,0x56,0x49,0x69,0x52, 0x47,0x66,0x54,0x46,0x64,0x51,0x45,0x63,0x51,0x44,0x60,0x50,0x45,0x63,0x58,0x4b, 0x68,0x55,0x47,0x65,0x57,0x49,0x66,0x5a,0x4b,0x69,0x5d,0x4d,0x6b,0x5f,0x4e,0x6c, 0x61,0x4d,0x6b,0x61,0x4e,0x6e,0x60,0x4c,0x69,0x5c,0x4a,0x67,0x5a,0x4b,0x69,0x51, 0x48,0x6a,0x47,0x49,0x6c,0x5a,0x4c,0x6b,0x4c,0x57,0x7f,0x72,0x74,0x89,0x1f,0x16, 0x1e,0x1f,0x16,0x1f,0x3f,0x3a,0x51,0x5b,0x52,0x79,0x62,0x4a,0x66,0x57,0x50,0x79, 0x52,0x4f,0x7b,0x52,0x52,0x7c,0x52,0x57,0x82,0x52,0x5d,0x88,0x53,0x5d,0x88,0x57, 0x63,0x8c,0x62,0x6e,0x94,0x5e,0x53,0x79,0x56,0x62,0x8b,0xe3,0xe6,0xed,0x9a,0x98, 0xa1,0x45,0x35,0x40,0x54,0x42,0x51,0x56,0x44,0x54,0x58,0x45,0x55,0x5e,0x4a,0x5c, 0x2a,0x22,0x2a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x97,0x9a,0xa1,0x93,0x9d,0xb8,0x52,0x4f,0x7a,0x53,0x5e,0x88, 0x57,0x64,0x8c,0x53,0x5f,0x89,0x53,0x5d,0x88,0x54,0x5f,0x89,0x54,0x5f,0x89,0x55, 0x60,0x8a,0x55,0x60,0x8a,0x56,0x63,0x8b,0x56,0x63,0x8a,0x58,0x65,0x8c,0x57,0x64, 0x8b,0x52,0x4f,0x7a,0x57,0x63,0x8b,0xbb,0xbf,0xcc,0x0a,0x0a,0x0b,0x00,0x00,0x00, 0x0e,0x0e,0x0e,0x23,0x23,0x23,0x0c,0x0c,0x0c,0x04,0x04,0x04,0x09,0x08,0x0a,0x15, 0x13,0x16,0x1e,0x1c,0x1f,0x1f,0x1e,0x20,0x20,0x1e,0x20,0x18,0x16,0x18,0x08,0x07, 0x0a,0x05,0x05,0x06,0x06,0x07,0x08,0x18,0x19,0x19,0x26,0x27,0x27,0x1d,0x1d,0x1e, 0x0a,0x0a,0x0c,0x27,0x27,0x29,0x1f,0x1f,0x21,0x08,0x08,0x0b,0x14,0x12,0x16,0x16, 0x14,0x1a,0x13,0x12,0x17,0x0e,0x0f,0x13,0x0c,0x0d,0x10,0x0a,0x0b,0x0e,0x09,0x0a, 0x0c,0x08,0x09,0x0b,0x08,0x09,0x0b,0x08,0x09,0x0a,0x09,0x0a,0x0b,0x09,0x0a,0x0c, 0x0a,0x0a,0x0d,0x0a,0x0a,0x0d,0x0a,0x0c,0x0f,0x0b,0x0c,0x0f,0x0a,0x0b,0x0e,0x0b, 0x0c,0x0f,0x0c,0x0d,0x10,0x0c,0x0e,0x11,0x0e,0x10,0x13,0x12,0x12,0x16,0x14,0x16, 0x1a,0x15,0x16,0x1a,0x14,0x16,0x1a,0x14,0x15,0x19,0x12,0x14,0x18,0x12,0x13,0x16, 0x12,0x12,0x16,0x1a,0x19,0x1e,0x2a,0x23,0x2a,0x25,0x1e,0x23,0x5c,0x59,0x5f,0x7a, 0x83,0xa1,0x5c,0x67,0x8c,0x58,0x64,0x8a,0x5a,0x64,0x8c,0x5a,0x65,0x8c,0x5b,0x66, 0x8f,0x5b,0x66,0x8f,0x5b,0x65,0x8d,0x5a,0x64,0x8c,0x58,0x63,0x8b,0x55,0x5f,0x89, 0x53,0x5e,0x87,0x62,0x52,0x70,0x53,0x51,0x79,0x2e,0x33,0x47,0x0b,0x0c,0x0f,0x0c, 0x0d,0x10,0x0a,0x0a,0x0d,0x08,0x09,0x0b,0x26,0x1f,0x29,0x8b,0x93,0xa9,0x50,0x5b, 0x7f,0x48,0x41,0x60,0x5d,0x52,0x78,0x5e,0x53,0x78,0x5d,0x52,0x78,0x5f,0x53,0x77, 0x5f,0x53,0x77,0x5f,0x53,0x77,0x5f,0x53,0x77,0x5f,0x53,0x76,0x5e,0x53,0x76,0x5f, 0x54,0x76,0x5f,0x55,0x77,0x5e,0x56,0x76,0x5e,0x55,0x76,0x1b,0x1d,0x23,0x18,0x1a, 0x1f,0x18,0x1a,0x1f,0x17,0x19,0x1e,0x17,0x19,0x1e,0x16,0x17,0x1b,0x13,0x14,0x18, 0x12,0x12,0x16,0x15,0x15,0x19,0x97,0x89,0xba,0x5d,0x54,0x77,0x4a,0x43,0x5f,0x55, 0x4e,0x73,0x58,0x51,0x77,0x56,0x50,0x77,0x54,0x4f,0x77,0x52,0x4f,0x79,0x52,0x4f, 0x7a,0x52,0x53,0x7c,0x52,0x56,0x80,0x53,0x5d,0x84,0x55,0x5f,0x87,0x56,0x61,0x85, 0x4e,0x58,0x78,0x37,0x39,0x4d,0x4f,0x57,0x73,0x65,0x6f,0x90,0x67,0x71,0x91,0x6b, 0x74,0x94,0x6c,0x77,0x94,0x6e,0x77,0x95,0x70,0x7a,0x97,0x83,0x8d,0xad,0x51,0x57, 0x6e,0x26,0x24,0x30,0x2f,0x2a,0x36,0x31,0x2b,0x38,0x30,0x2a,0x37,0x2c,0x28,0x33, 0x26,0x22,0x2c,0x20,0x1f,0x2a,0x19,0x1b,0x24,0x19,0x1b,0x24,0x18,0x1a,0x23,0x18, 0x1a,0x22,0x17,0x1a,0x22,0x1c,0x1d,0x26,0x16,0x18,0x1f,0x16,0x17,0x1f,0x16,0x17, 0x1f,0x15,0x16,0x1e,0x13,0x15,0x1b,0x13,0x14,0x1b,0x13,0x14,0x1b,0x47,0x3c,0x4c, 0x4f,0x42,0x53,0x53,0x45,0x56,0x5d,0x64,0x86,0x4e,0x4f,0x77,0x56,0x4f,0x74,0x57, 0x50,0x74,0x57,0x50,0x75,0x59,0x50,0x76,0x59,0x50,0x76,0x5b,0x51,0x76,0x5b,0x51, 0x76,0x58,0x4d,0x70,0x48,0x3d,0x59,0x3d,0x32,0x4e,0x4a,0x50,0x6f,0x5d,0x65,0x7f, 0x08,0x08,0x0a,0x07,0x07,0x0a,0x29,0x21,0x29,0x39,0x2d,0x37,0x3a,0x2d,0x39,0x55, 0x60,0x86,0x50,0x4d,0x77,0x5d,0x51,0x74,0x5d,0x51,0x73,0x5e,0x51,0x74,0x5e,0x51, 0x74,0x5d,0x51,0x74,0x5e,0x51,0x75,0x5e,0x51,0x75,0x5e,0x52,0x75,0x5e,0x52,0x75, 0x5e,0x51,0x75,0x5e,0x4e,0x6d,0x4b,0x39,0x4f,0x47,0x35,0x4c,0x57,0x43,0x5d,0x5b, 0x59,0x85,0x11,0x11,0x17,0x12,0x13,0x1a,0x13,0x14,0x1b,0x14,0x15,0x1c,0x17,0x17, 0x1f,0x16,0x16,0x1e,0x16,0x16,0x1e,0x16,0x16,0x1e,0x15,0x16,0x1e,0x16,0x16,0x1e, 0x16,0x17,0x1e,0x16,0x17,0x1e,0x14,0x16,0x1c,0x13,0x15,0x1b,0x12,0x14,0x1a,0x12, 0x13,0x1a,0x12,0x13,0x1a,0x11,0x12,0x18,0x10,0x11,0x16,0x0f,0x10,0x16,0x0e,0x10, 0x15,0x0d,0x0e,0x13,0x0c,0x0d,0x12,0x0b,0x0c,0x10,0x0a,0x0c,0x0f,0x0a,0x0b,0x0e, 0x0a,0x0a,0x0e,0x09,0x0a,0x0d,0x08,0x09,0x0c,0x08,0x09,0x0b,0x07,0x07,0x0a,0x06, 0x06,0x09,0x06,0x06,0x08,0x06,0x06,0x08,0x04,0x05,0x06,0x04,0x05,0x06,0x04,0x05, 0x06,0x03,0x04,0x05,0x03,0x04,0x05,0x03,0x03,0x04,0x02,0x03,0x04,0x02,0x03,0x04, 0x02,0x03,0x04,0x02,0x02,0x02,0x23,0x26,0x2c,0x74,0x7f,0xa1,0x51,0x52,0x7d,0x5d, 0x52,0x78,0x5f,0x52,0x76,0x5f,0x52,0x76,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53, 0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77, 0x60,0x53,0x77,0x60,0x53,0x77,0x68,0x5a,0x80,0x41,0x39,0x52,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0c,0x0c,0x0c,0x3a,0x3a,0x3a,0x0c,0x0c, 0x0c,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02, 0x02,0x02,0x02,0x05,0x05,0x06,0x0e,0x0e,0x0f,0x28,0x29,0x2a,0x4e,0x4f,0x52,0x5e, 0x60,0x65,0x54,0x56,0x5c,0x29,0x2c,0x36,0x1d,0x1b,0x25,0x1a,0x1d,0x26,0x28,0x2a, 0x2f,0x17,0x18,0x1a,0x0b,0x0c,0x0d,0x06,0x06,0x06,0x05,0x05,0x06,0x03,0x03,0x04, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x33,0x3a,0x50,0x52,0x50,0x7b,0x64,0x53,0x74,0x52,0x50,0x7b,0x52,0x54, 0x7e,0x52,0x4f,0x7a,0x5d,0x45,0x5f,0x62,0x4a,0x66,0x64,0x53,0x74,0x5e,0x54,0x7a, 0x58,0x58,0x81,0x6b,0x75,0x99,0xdf,0xe1,0xea,0xd8,0xdb,0xe5,0xcf,0xd3,0xdf,0xce, 0xd2,0xdf,0xcb,0xcf,0xdd,0xc6,0xcb,0xd9,0xbe,0xc4,0xd3,0xb5,0xbc,0xcf,0xb8,0xbe, 0xcf,0xa5,0xad,0xc3,0x91,0x99,0xb4,0x65,0x71,0x96,0x53,0x5f,0x89,0x5c,0x69,0x90, 0x7a,0x84,0xa5,0x71,0x79,0x91,0x19,0x1a,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x04,0x05,0x04, 0x04,0x06,0x04,0x04,0x06,0x0f,0x0f,0x14,0x69,0x73,0x91,0x50,0x4e,0x77,0x56,0x40, 0x5a,0x59,0x44,0x5f,0x59,0x50,0x73,0x5a,0x4f,0x71,0x5a,0x4e,0x70,0x58,0x4d,0x6e, 0x59,0x4d,0x6d,0x56,0x4b,0x6b,0x55,0x4a,0x69,0x53,0x49,0x68,0x56,0x48,0x67,0x56, 0x48,0x67,0x58,0x49,0x68,0x59,0x4a,0x68,0x5a,0x4c,0x6b,0x5d,0x4e,0x6d,0x5f,0x4f, 0x6d,0x61,0x50,0x6f,0x62,0x4e,0x6d,0x62,0x50,0x6f,0x61,0x4e,0x6c,0x60,0x4f,0x6c, 0x5e,0x4e,0x6c,0x58,0x4d,0x71,0x4c,0x49,0x72,0x55,0x4d,0x72,0x4e,0x4b,0x74,0x76, 0x7d,0x9a,0x27,0x1c,0x25,0x1f,0x16,0x1f,0x3b,0x37,0x4d,0x5a,0x52,0x79,0x62,0x4a, 0x66,0x5b,0x52,0x79,0x52,0x4f,0x7a,0x52,0x50,0x7b,0x52,0x53,0x7e,0x52,0x5a,0x84, 0x53,0x5e,0x88,0x58,0x64,0x8c,0x5f,0x6c,0x92,0x53,0x50,0x79,0x57,0x50,0x79,0xd5, 0xd9,0xe3,0xb3,0xb4,0xbd,0x44,0x34,0x40,0x57,0x44,0x55,0x59,0x46,0x57,0x59,0x46, 0x57,0x61,0x4d,0x60,0x39,0x2f,0x3a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x57,0x57,0x59,0xa7,0xaf,0xc4,0x5d,0x69, 0x91,0x57,0x50,0x79,0x58,0x64,0x8d,0x54,0x5f,0x89,0x52,0x5d,0x88,0x52,0x5d,0x88, 0x54,0x5f,0x89,0x55,0x60,0x8a,0x55,0x62,0x8b,0x55,0x60,0x8a,0x56,0x63,0x8b,0x57, 0x64,0x8b,0x57,0x64,0x8b,0x52,0x5d,0x85,0x52,0x4f,0x7a,0x92,0x9b,0xb6,0x5c,0x5d, 0x5e,0x00,0x00,0x00,0x00,0x00,0x00,0x12,0x12,0x12,0x2a,0x2a,0x2a,0x30,0x30,0x30, 0x30,0x2f,0x30,0x27,0x25,0x28,0x20,0x1e,0x21,0x1f,0x1d,0x1f,0x20,0x1f,0x21,0x2f, 0x2d,0x30,0x1c,0x1a,0x1d,0x12,0x10,0x13,0x26,0x25,0x27,0x24,0x24,0x26,0x0c,0x0d, 0x0e,0x05,0x06,0x06,0x06,0x06,0x07,0x21,0x21,0x23,0x2f,0x2f,0x30,0x1b,0x1b,0x1d, 0x09,0x09,0x0b,0x10,0x0e,0x13,0x1a,0x19,0x1e,0x1a,0x19,0x1f,0x16,0x16,0x1c,0x14, 0x14,0x1a,0x13,0x13,0x18,0x11,0x10,0x15,0x0f,0x0f,0x13,0x0c,0x0c,0x0f,0x0e,0x0e, 0x13,0x12,0x13,0x19,0x14,0x14,0x1a,0x12,0x12,0x18,0x16,0x14,0x1a,0x19,0x16,0x1c, 0x18,0x16,0x1c,0x13,0x12,0x18,0x0f,0x0f,0x15,0x0f,0x0f,0x15,0x10,0x10,0x16,0x10, 0x12,0x17,0x13,0x15,0x1a,0x15,0x16,0x1a,0x15,0x16,0x1a,0x15,0x16,0x1a,0x13,0x14, 0x18,0x12,0x12,0x16,0x0f,0x11,0x14,0x16,0x14,0x19,0x29,0x22,0x29,0x24,0x1e,0x23, 0x60,0x5d,0x61,0x7d,0x87,0xa4,0x5c,0x67,0x8c,0x58,0x63,0x8b,0x5a,0x65,0x8c,0x5a, 0x66,0x8e,0x5b,0x65,0x8d,0x5b,0x65,0x8d,0x5b,0x65,0x8d,0x5a,0x64,0x8c,0x57,0x63, 0x8b,0x55,0x61,0x89,0x54,0x5f,0x87,0x62,0x55,0x76,0x53,0x51,0x7a,0x2e,0x34,0x47, 0x0c,0x0d,0x10,0x0c,0x0d,0x10,0x0b,0x0c,0x0e,0x0a,0x0a,0x0d,0x2d,0x26,0x2f,0x8d, 0x93,0xa9,0x55,0x60,0x85,0x48,0x40,0x5f,0x5d,0x52,0x78,0x5d,0x53,0x78,0x5d,0x52, 0x78,0x5d,0x53,0x79,0x5f,0x53,0x77,0x5f,0x53,0x77,0x5f,0x53,0x77,0x5f,0x53,0x76, 0x5e,0x53,0x76,0x5f,0x54,0x76,0x5f,0x55,0x77,0x5f,0x56,0x76,0x5e,0x55,0x76,0x20, 0x20,0x28,0x18,0x1a,0x1f,0x17,0x19,0x1e,0x16,0x18,0x1e,0x16,0x17,0x1c,0x14,0x16, 0x1a,0x12,0x14,0x18,0x12,0x13,0x16,0x0f,0x10,0x13,0xa8,0x91,0xb2,0x5f,0x56,0x7b, 0x4c,0x45,0x62,0x56,0x4e,0x73,0x59,0x51,0x77,0x54,0x50,0x77,0x51,0x4f,0x78,0x52, 0x4f,0x79,0x52,0x4f,0x79,0x52,0x53,0x7c,0x52,0x56,0x80,0x53,0x5c,0x84,0x54,0x5e, 0x87,0x53,0x5e,0x82,0x4f,0x57,0x77,0x39,0x3d,0x51,0x35,0x34,0x45,0x6b,0x76,0x96, 0x66,0x71,0x92,0x68,0x73,0x92,0x6c,0x76,0x94,0x6c,0x76,0x94,0x6e,0x79,0x96,0x77, 0x82,0xa1,0x6e,0x77,0x94,0x29,0x26,0x32,0x30,0x2b,0x38,0x31,0x2b,0x38,0x2f,0x2a, 0x37,0x2b,0x27,0x34,0x1c,0x1d,0x26,0x17,0x18,0x21,0x17,0x19,0x21,0x1a,0x1c,0x25, 0x19,0x1a,0x23,0x19,0x1a,0x23,0x17,0x1a,0x22,0x19,0x1a,0x22,0x16,0x18,0x20,0x16, 0x18,0x1f,0x16,0x17,0x1e,0x15,0x16,0x1e,0x14,0x16,0x1d,0x13,0x15,0x1c,0x12,0x13, 0x1a,0x2d,0x28,0x33,0x5b,0x4d,0x62,0x5d,0x4d,0x63,0x62,0x5a,0x71,0x50,0x59,0x80, 0x53,0x4e,0x74,0x5a,0x50,0x74,0x5a,0x51,0x75,0x5b,0x51,0x76,0x5d,0x51,0x74,0x5d, 0x51,0x74,0x5d,0x51,0x74,0x5a,0x4d,0x70,0x49,0x3c,0x58,0x3c,0x31,0x48,0x48,0x4b, 0x6a,0x60,0x69,0x84,0x08,0x08,0x0a,0x07,0x07,0x0a,0x25,0x1e,0x25,0x38,0x2b,0x36, 0x37,0x2c,0x37,0x54,0x61,0x86,0x50,0x4d,0x77,0x5d,0x51,0x74,0x5e,0x51,0x74,0x5e, 0x51,0x74,0x5d,0x51,0x74,0x5e,0x51,0x75,0x5e,0x51,0x75,0x5e,0x52,0x75,0x5e,0x52, 0x75,0x5e,0x52,0x75,0x5e,0x51,0x75,0x60,0x4f,0x70,0x4c,0x3a,0x51,0x47,0x36,0x4b, 0x55,0x44,0x5d,0x5d,0x5a,0x84,0x14,0x14,0x1a,0x14,0x14,0x1b,0x14,0x15,0x1c,0x15, 0x16,0x1d,0x17,0x17,0x1f,0x16,0x16,0x1e,0x16,0x17,0x1f,0x16,0x16,0x1e,0x16,0x18, 0x20,0x16,0x18,0x1f,0x16,0x17,0x1f,0x16,0x17,0x1e,0x15,0x16,0x1e,0x15,0x16,0x1e, 0x14,0x16,0x1d,0x12,0x14,0x1a,0x12,0x14,0x1a,0x12,0x12,0x19,0x10,0x12,0x17,0x0f, 0x11,0x16,0x0f,0x11,0x16,0x0e,0x10,0x15,0x0e,0x0e,0x13,0x0c,0x0e,0x12,0x0b,0x0d, 0x11,0x0a,0x0b,0x0f,0x0a,0x0a,0x0e,0x09,0x0a,0x0d,0x09,0x0a,0x0d,0x08,0x09,0x0b, 0x07,0x08,0x0a,0x07,0x08,0x0a,0x06,0x06,0x09,0x06,0x06,0x08,0x06,0x06,0x07,0x04, 0x05,0x06,0x04,0x05,0x06,0x04,0x04,0x06,0x03,0x04,0x05,0x03,0x03,0x04,0x02,0x03, 0x04,0x02,0x03,0x04,0x02,0x03,0x04,0x02,0x02,0x03,0x09,0x09,0x0a,0x7c,0x87,0xa7, 0x52,0x5d,0x86,0x5d,0x53,0x78,0x5f,0x53,0x77,0x5f,0x52,0x76,0x5f,0x52,0x76,0x60, 0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53, 0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x64,0x56,0x7c,0x6b,0x5e,0x86, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x26, 0x26,0x26,0x26,0x26,0x27,0x2c,0x2c,0x2c,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x04,0x04, 0x05,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x04,0x06,0x06,0x07,0x0e,0x0e,0x0f, 0x1b,0x1c,0x1e,0x32,0x34,0x36,0x45,0x46,0x4a,0x38,0x3a,0x3e,0x21,0x22,0x25,0x1b, 0x1d,0x1e,0x15,0x16,0x17,0x0a,0x0a,0x0b,0x07,0x08,0x09,0x06,0x06,0x06,0x04,0x05, 0x05,0x03,0x04,0x04,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00, 0x00,0x00,0x00,0x16,0x19,0x25,0x5b,0x66,0x8d,0x64,0x52,0x73,0x53,0x50,0x7a,0x52, 0x52,0x7c,0x52,0x56,0x82,0x52,0x50,0x7b,0x5f,0x47,0x63,0x62,0x4a,0x66,0x64,0x53, 0x74,0x5c,0x54,0x7a,0x5a,0x5b,0x83,0x71,0x7b,0x9d,0xd7,0xd9,0xe3,0xd1,0xd5,0xe0, 0xd0,0xd5,0xe0,0xce,0xd1,0xdf,0xca,0xcf,0xdd,0xc4,0xc9,0xd8,0xbc,0xc2,0xd3,0xb0, 0xb7,0xcb,0xa3,0xac,0xc2,0x9a,0xa3,0xbc,0x93,0x9c,0xb8,0x90,0x99,0xb4,0x7c,0x88, 0xa8,0x53,0x5e,0x88,0x52,0x52,0x7c,0x66,0x73,0x98,0x86,0x90,0xac,0x43,0x47,0x55, 0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x03,0x03,0x03,0x04, 0x03,0x03,0x04,0x03,0x03,0x05,0x04,0x04,0x06,0x5c,0x62,0x78,0x56,0x60,0x87,0x5d, 0x46,0x62,0x50,0x39,0x51,0x61,0x51,0x72,0x5a,0x51,0x75,0x5a,0x51,0x74,0x59,0x50, 0x73,0x5a,0x4f,0x71,0x5a,0x4f,0x71,0x5a,0x4e,0x6f,0x58,0x4d,0x6e,0x58,0x4d,0x6d, 0x58,0x4c,0x6d,0x5c,0x4d,0x6c,0x5d,0x4d,0x6d,0x5e,0x4e,0x6d,0x5e,0x4f,0x70,0x60, 0x4f,0x6f,0x61,0x51,0x70,0x62,0x50,0x71,0x62,0x4f,0x6d,0x62,0x4f,0x6d,0x62,0x4d, 0x6c,0x61,0x4e,0x6c,0x60,0x4d,0x6d,0x5f,0x4f,0x71,0x4f,0x4c,0x74,0x4f,0x4c,0x75, 0x61,0x51,0x72,0x6a,0x75,0x98,0x33,0x29,0x35,0x1f,0x16,0x1e,0x2f,0x2c,0x3e,0x64, 0x53,0x76,0x62,0x4a,0x66,0x60,0x53,0x77,0x52,0x4f,0x7a,0x52,0x4f,0x7b,0x52,0x53, 0x7d,0x52,0x55,0x80,0x53,0x5e,0x88,0x56,0x63,0x8b,0x5e,0x6b,0x92,0x52,0x52,0x7d, 0x64,0x53,0x74,0xc4,0xc9,0xd8,0xcf,0xd1,0xdc,0x45,0x35,0x41,0x58,0x45,0x56,0x5e, 0x4b,0x5d,0x5d,0x4a,0x5c,0x62,0x4e,0x62,0x47,0x3a,0x49,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0c,0x0c,0x0c,0xb4, 0xba,0xcb,0x7a,0x85,0xa7,0x5a,0x52,0x79,0x54,0x5f,0x8a,0x54,0x5f,0x89,0x53,0x5f, 0x89,0x53,0x5e,0x88,0x53,0x5f,0x89,0x55,0x60,0x8a,0x55,0x62,0x8b,0x56,0x62,0x8b, 0x56,0x62,0x8b,0x56,0x63,0x8b,0x57,0x63,0x8b,0x56,0x62,0x8a,0x53,0x4f,0x7a,0x63, 0x6e,0x93,0xaa,0xad,0xb4,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02, 0x02,0x05,0x05,0x05,0x10,0x10,0x10,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x03,0x04, 0x02,0x03,0x04,0x0c,0x0c,0x0d,0x25,0x25,0x26,0x24,0x24,0x25,0x1d,0x1d,0x1f,0x06, 0x06,0x08,0x05,0x05,0x06,0x04,0x05,0x06,0x06,0x06,0x08,0x06,0x06,0x08,0x0c,0x0c, 0x0d,0x22,0x22,0x23,0x27,0x27,0x29,0x2a,0x2b,0x2d,0x0a,0x0a,0x0d,0x0f,0x0f,0x13, 0x17,0x16,0x1d,0x1f,0x1d,0x25,0x26,0x23,0x2d,0x28,0x25,0x2f,0x2a,0x25,0x2e,0x28, 0x25,0x2d,0x26,0x24,0x2c,0x29,0x27,0x2f,0x2d,0x2a,0x35,0x2c,0x2a,0x35,0x29,0x25, 0x2e,0x27,0x23,0x2d,0x26,0x23,0x2b,0x1f,0x1d,0x24,0x15,0x14,0x1a,0x11,0x11,0x16, 0x16,0x15,0x1c,0x1b,0x19,0x21,0x17,0x16,0x1e,0x13,0x15,0x1b,0x14,0x16,0x1a,0x14, 0x15,0x19,0x12,0x14,0x18,0x11,0x12,0x16,0x0f,0x11,0x14,0x13,0x12,0x16,0x2b,0x24, 0x2c,0x28,0x20,0x26,0x62,0x5e,0x65,0x7a,0x85,0xa2,0x5a,0x67,0x8c,0x58,0x63,0x8b, 0x59,0x64,0x8b,0x5a,0x65,0x8c,0x5a,0x65,0x8c,0x59,0x64,0x8b,0x59,0x64,0x8b,0x59, 0x64,0x8b,0x56,0x63,0x8a,0x55,0x5f,0x88,0x53,0x5f,0x87,0x63,0x54,0x76,0x53,0x51, 0x79,0x2e,0x33,0x44,0x0e,0x0e,0x12,0x0c,0x0e,0x11,0x0b,0x0c,0x0e,0x0a,0x0a,0x0d, 0x2a,0x24,0x2d,0x8b,0x92,0xa6,0x5b,0x66,0x89,0x45,0x3e,0x5e,0x5d,0x52,0x78,0x5e, 0x53,0x78,0x5d,0x53,0x79,0x5d,0x53,0x79,0x5f,0x53,0x77,0x5f,0x53,0x77,0x5f,0x53, 0x77,0x5f,0x53,0x76,0x5f,0x53,0x76,0x5f,0x54,0x76,0x5f,0x55,0x76,0x5f,0x55,0x77, 0x5e,0x56,0x76,0x23,0x22,0x2c,0x17,0x19,0x1e,0x17,0x1a,0x1e,0x17,0x19,0x1e,0x16, 0x17,0x1c,0x14,0x16,0x1a,0x12,0x14,0x18,0x11,0x12,0x15,0x0f,0x10,0x13,0xa3,0x8f, 0xa7,0x62,0x57,0x7d,0x4a,0x45,0x63,0x56,0x4d,0x71,0x58,0x51,0x77,0x54,0x50,0x77, 0x54,0x4f,0x77,0x52,0x4f,0x79,0x52,0x4f,0x79,0x52,0x53,0x7b,0x52,0x55,0x7f,0x53, 0x5a,0x82,0x54,0x5f,0x87,0x52,0x5c,0x7f,0x4c,0x57,0x77,0x3c,0x41,0x58,0x21,0x1e, 0x22,0x68,0x71,0x8c,0x67,0x73,0x92,0x68,0x72,0x90,0x6a,0x74,0x93,0x6c,0x76,0x93, 0x6c,0x76,0x93,0x6f,0x7b,0x98,0x7b,0x86,0xa8,0x22,0x21,0x2d,0x2c,0x28,0x35,0x2e, 0x2a,0x36,0x29,0x26,0x32,0x22,0x21,0x2d,0x1e,0x1f,0x29,0x1b,0x1e,0x28,0x16,0x18, 0x1f,0x17,0x19,0x21,0x1d,0x1d,0x26,0x1c,0x1c,0x26,0x1a,0x1a,0x24,0x18,0x19,0x22, 0x17,0x19,0x21,0x16,0x18,0x20,0x16,0x17,0x1e,0x15,0x16,0x1e,0x15,0x16,0x1e,0x13, 0x15,0x1c,0x13,0x15,0x1b,0x12,0x13,0x1a,0x5b,0x4f,0x64,0x63,0x53,0x6a,0x61,0x52, 0x67,0x55,0x5b,0x7e,0x52,0x4d,0x73,0x5b,0x51,0x73,0x5c,0x51,0x73,0x5d,0x51,0x73, 0x5d,0x51,0x74,0x5d,0x51,0x74,0x5d,0x51,0x74,0x5a,0x4e,0x71,0x49,0x3d,0x57,0x3b, 0x2f,0x47,0x45,0x45,0x67,0x65,0x6c,0x88,0x08,0x08,0x0a,0x07,0x07,0x0a,0x22,0x1b, 0x22,0x38,0x2b,0x36,0x36,0x2b,0x36,0x54,0x60,0x85,0x50,0x4d,0x77,0x5d,0x51,0x74, 0x5e,0x51,0x74,0x5d,0x51,0x74,0x5e,0x51,0x75,0x5e,0x51,0x75,0x5e,0x51,0x75,0x5e, 0x52,0x75,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e,0x4f,0x70,0x4d,0x3a, 0x52,0x48,0x36,0x4c,0x54,0x43,0x5b,0x5d,0x59,0x82,0x19,0x1a,0x22,0x15,0x15,0x1c, 0x16,0x16,0x1e,0x16,0x16,0x1e,0x17,0x17,0x20,0x17,0x18,0x20,0x17,0x19,0x22,0x17, 0x18,0x20,0x17,0x18,0x20,0x16,0x18,0x20,0x17,0x19,0x21,0x17,0x18,0x20,0x16,0x17, 0x1f,0x16,0x17,0x1e,0x15,0x16,0x1e,0x14,0x16,0x1d,0x13,0x15,0x1b,0x12,0x13,0x1a, 0x11,0x12,0x18,0x10,0x12,0x17,0x0f,0x11,0x16,0x0e,0x10,0x15,0x0e,0x10,0x15,0x0d, 0x0e,0x13,0x0c,0x0e,0x12,0x0b,0x0d,0x11,0x0a,0x0b,0x0f,0x0a,0x0a,0x0e,0x09,0x0a, 0x0d,0x09,0x0a,0x0c,0x08,0x09,0x0b,0x07,0x08,0x0a,0x07,0x08,0x0a,0x06,0x06,0x09, 0x06,0x06,0x08,0x05,0x05,0x06,0x04,0x05,0x06,0x04,0x05,0x06,0x03,0x04,0x05,0x03, 0x04,0x05,0x02,0x03,0x04,0x02,0x03,0x04,0x02,0x03,0x04,0x02,0x03,0x04,0x02,0x02, 0x03,0x80,0x88,0xa3,0x57,0x64,0x8b,0x59,0x52,0x78,0x5f,0x53,0x77,0x5f,0x53,0x77, 0x5f,0x53,0x77,0x5f,0x52,0x76,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60, 0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x62,0x54, 0x79,0x84,0x73,0xa4,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x06,0x07,0x14,0x14,0x15,0x28, 0x28,0x28,0x0c,0x0c,0x0c,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02, 0x03,0x05,0x05,0x06,0x08,0x09,0x0a,0x10,0x11,0x12,0x1b,0x1c,0x1e,0x1c,0x1d,0x1f, 0x0d,0x0e,0x0f,0x0b,0x0b,0x0c,0x0b,0x0b,0x0d,0x08,0x08,0x09,0x06,0x07,0x08,0x06, 0x06,0x07,0x04,0x04,0x05,0x04,0x04,0x05,0x02,0x02,0x03,0x02,0x03,0x03,0x02,0x02, 0x02,0x00,0x00,0x00,0x04,0x04,0x07,0x52,0x5e,0x80,0x52,0x4f,0x7a,0x64,0x52,0x71, 0x52,0x4f,0x7a,0x52,0x52,0x7d,0x52,0x55,0x81,0x52,0x50,0x7c,0x5f,0x47,0x64,0x63, 0x4b,0x67,0x65,0x54,0x75,0x57,0x53,0x7b,0x5b,0x5d,0x85,0x90,0x99,0xb4,0xd6,0xd9, 0xe3,0xcf,0xd3,0xdf,0xd0,0xd3,0xdf,0xce,0xd2,0xdf,0xc8,0xce,0xdb,0xc3,0xc9,0xd8, 0xbb,0xc1,0xd2,0xb1,0xb7,0xca,0xa2,0xab,0xc2,0x9b,0xa4,0xbc,0x95,0x9f,0xb8,0x91, 0x9a,0xb5,0x8e,0x98,0xb3,0x88,0x92,0xb0,0x67,0x73,0x99,0x52,0x54,0x80,0x5f,0x6c, 0x93,0x81,0x8b,0xaa,0x66,0x6e,0x87,0x14,0x15,0x1a,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x03,0x03,0x03,0x04,0x03,0x03,0x04,0x04,0x03,0x05,0x38,0x3d,0x4b,0x66,0x70,0x94, 0x61,0x51,0x74,0x49,0x35,0x4b,0x5f,0x48,0x64,0x5b,0x51,0x75,0x5b,0x51,0x75,0x5b, 0x51,0x76,0x5d,0x51,0x73,0x5c,0x51,0x73,0x5e,0x51,0x73,0x5c,0x50,0x72,0x5b,0x4f, 0x71,0x5d,0x4f,0x71,0x5b,0x4f,0x71,0x5f,0x4f,0x70,0x60,0x50,0x71,0x60,0x50,0x72, 0x61,0x50,0x72,0x61,0x51,0x72,0x62,0x51,0x73,0x62,0x52,0x71,0x63,0x51,0x71,0x63, 0x4e,0x6c,0x62,0x4f,0x6d,0x62,0x4e,0x6c,0x62,0x4d,0x6c,0x62,0x51,0x72,0x58,0x50, 0x77,0x50,0x50,0x7b,0x62,0x4d,0x6c,0x5c,0x68,0x8f,0x4b,0x44,0x55,0x1f,0x16,0x1f, 0x2b,0x27,0x38,0x5b,0x52,0x79,0x64,0x4f,0x6d,0x5d,0x52,0x79,0x52,0x4f,0x7a,0x52, 0x4f,0x7a,0x52,0x52,0x7c,0x52,0x55,0x80,0x53,0x5e,0x88,0x56,0x62,0x8b,0x5d,0x6a, 0x91,0x52,0x5c,0x85,0x64,0x50,0x6f,0xab,0xb2,0xc7,0xdb,0xde,0xe7,0x4e,0x40,0x4c, 0x5d,0x4a,0x5c,0x61,0x4e,0x60,0x61,0x4e,0x60,0x66,0x52,0x66,0x54,0x45,0x57,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x8e,0x90,0x96,0x90,0x99,0xb4,0x52,0x58,0x83,0x52,0x4f,0x7a,0x55, 0x62,0x8a,0x53,0x5e,0x88,0x52,0x5d,0x88,0x53,0x5e,0x89,0x54,0x5f,0x89,0x54,0x60, 0x8a,0x55,0x60,0x8a,0x56,0x63,0x8b,0x56,0x63,0x8b,0x57,0x63,0x8b,0x58,0x64,0x8b, 0x52,0x55,0x80,0x52,0x4f,0x7a,0xa3,0xab,0xc1,0x35,0x35,0x36,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x03,0x02,0x03,0x04,0x02,0x03,0x04,0x30,0x31,0x32,0x20,0x20,0x21, 0x05,0x06,0x07,0x04,0x04,0x06,0x04,0x04,0x06,0x05,0x05,0x06,0x05,0x06,0x06,0x05, 0x06,0x07,0x06,0x06,0x07,0x06,0x06,0x08,0x12,0x12,0x14,0x34,0x34,0x36,0x08,0x08, 0x0b,0x0b,0x0b,0x0e,0x12,0x11,0x16,0x1d,0x1a,0x21,0x2a,0x26,0x2f,0x2d,0x29,0x32, 0x2f,0x2a,0x34,0x32,0x2d,0x37,0x31,0x2c,0x36,0x34,0x30,0x3c,0x3c,0x3a,0x4b,0x3c, 0x3b,0x4f,0x36,0x34,0x45,0x32,0x2e,0x3a,0x2f,0x2b,0x36,0x2d,0x2a,0x33,0x26,0x24, 0x2d,0x1a,0x18,0x1f,0x12,0x12,0x18,0x19,0x16,0x1e,0x22,0x1e,0x26,0x1d,0x1a,0x23, 0x16,0x15,0x1c,0x12,0x13,0x1a,0x12,0x13,0x18,0x11,0x12,0x16,0x0f,0x11,0x14,0x0f, 0x10,0x14,0x2d,0x24,0x2c,0x2b,0x23,0x29,0x5b,0x59,0x5e,0x79,0x84,0xa2,0x5a,0x67, 0x8c,0x59,0x63,0x8a,0x59,0x63,0x8b,0x59,0x65,0x8c,0x59,0x65,0x8c,0x5a,0x65,0x8c, 0x59,0x64,0x8b,0x57,0x63,0x8b,0x56,0x63,0x8a,0x55,0x5f,0x88,0x54,0x5e,0x87,0x60, 0x55,0x77,0x53,0x51,0x79,0x2f,0x34,0x44,0x0e,0x0f,0x12,0x0e,0x0e,0x12,0x0b,0x0c, 0x0e,0x0a,0x0a,0x0d,0x26,0x20,0x28,0x84,0x89,0x9e,0x5d,0x69,0x89,0x42,0x3f,0x5e, 0x5d,0x52,0x77,0x5e,0x53,0x78,0x5e,0x53,0x79,0x5d,0x53,0x79,0x5f,0x53,0x77,0x5f, 0x53,0x77,0x60,0x53,0x77,0x5f,0x53,0x76,0x5f,0x53,0x76,0x5f,0x54,0x76,0x5f,0x55, 0x77,0x60,0x56,0x77,0x5e,0x56,0x77,0x27,0x27,0x31,0x18,0x1a,0x20,0x17,0x1a,0x1e, 0x16,0x18,0x1d,0x16,0x17,0x1b,0x14,0x15,0x1a,0x12,0x14,0x18,0x11,0x12,0x16,0x0e, 0x10,0x12,0x9a,0x8b,0x9c,0x68,0x5e,0x87,0x4c,0x45,0x62,0x53,0x4c,0x6f,0x58,0x51, 0x77,0x55,0x50,0x77,0x53,0x50,0x77,0x52,0x4f,0x79,0x52,0x4f,0x79,0x52,0x53,0x7b, 0x52,0x53,0x7d,0x53,0x5a,0x82,0x54,0x5e,0x86,0x51,0x5b,0x7d,0x4d,0x57,0x78,0x40, 0x45,0x5c,0x20,0x1d,0x22,0x43,0x46,0x59,0x76,0x80,0xa3,0x67,0x71,0x91,0x69,0x72, 0x92,0x69,0x73,0x91,0x6b,0x75,0x92,0x6c,0x75,0x92,0x81,0x8d,0xb0,0x30,0x34,0x44, 0x20,0x20,0x2b,0x22,0x22,0x2e,0x22,0x22,0x2e,0x20,0x20,0x2b,0x1d,0x1e,0x28,0x20, 0x22,0x2e,0x1a,0x1c,0x26,0x1b,0x1a,0x24,0x21,0x1e,0x28,0x28,0x24,0x2f,0x23,0x21, 0x2c,0x1d,0x1d,0x27,0x1a,0x1a,0x22,0x17,0x18,0x20,0x16,0x17,0x1f,0x16,0x17,0x1e, 0x16,0x17,0x1e,0x13,0x15,0x1c,0x13,0x15,0x1c,0x12,0x13,0x1a,0x19,0x19,0x21,0x63, 0x54,0x6a,0x5e,0x50,0x64,0x5e,0x54,0x6c,0x4f,0x53,0x7b,0x59,0x50,0x74,0x5c,0x51, 0x74,0x5d,0x51,0x73,0x5d,0x51,0x74,0x5d,0x51,0x74,0x5d,0x51,0x74,0x5b,0x4e,0x71, 0x48,0x3c,0x59,0x3a,0x2d,0x45,0x43,0x43,0x62,0x78,0x7f,0x98,0x08,0x08,0x0a,0x08, 0x08,0x0a,0x1c,0x18,0x1e,0x38,0x2a,0x35,0x36,0x29,0x35,0x54,0x5f,0x85,0x50,0x4d, 0x77,0x5b,0x51,0x75,0x5e,0x51,0x74,0x5d,0x51,0x74,0x5e,0x51,0x75,0x5e,0x51,0x75, 0x5e,0x51,0x75,0x5e,0x51,0x75,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e,0x52,0x75,0x60, 0x4f,0x71,0x4f,0x3b,0x54,0x46,0x35,0x4d,0x52,0x41,0x59,0x62,0x59,0x81,0x1b,0x1b, 0x26,0x15,0x16,0x1d,0x17,0x18,0x20,0x17,0x18,0x21,0x18,0x19,0x22,0x18,0x19,0x22, 0x19,0x1a,0x22,0x19,0x1a,0x23,0x18,0x19,0x22,0x18,0x19,0x22,0x19,0x1a,0x22,0x17, 0x19,0x21,0x16,0x18,0x20,0x16,0x17,0x1f,0x16,0x17,0x1e,0x16,0x17,0x1e,0x14,0x16, 0x1d,0x13,0x15,0x1b,0x12,0x14,0x1a,0x11,0x12,0x18,0x10,0x12,0x17,0x0f,0x11,0x16, 0x0e,0x10,0x15,0x0e,0x0f,0x14,0x0d,0x0e,0x12,0x0c,0x0e,0x12,0x0b,0x0d,0x11,0x0b, 0x0c,0x10,0x0a,0x0a,0x0e,0x09,0x0a,0x0d,0x08,0x09,0x0c,0x07,0x08,0x0b,0x07,0x08, 0x0a,0x06,0x07,0x0a,0x06,0x06,0x09,0x06,0x06,0x08,0x05,0x05,0x06,0x04,0x04,0x06, 0x03,0x04,0x05,0x03,0x04,0x05,0x03,0x03,0x04,0x02,0x03,0x04,0x02,0x03,0x04,0x02, 0x03,0x04,0x02,0x02,0x03,0x69,0x6e,0x7f,0x65,0x71,0x97,0x51,0x4f,0x79,0x5f,0x53, 0x77,0x5f,0x53,0x77,0x5f,0x53,0x77,0x5f,0x52,0x76,0x5f,0x52,0x76,0x60,0x53,0x77, 0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60, 0x53,0x77,0x60,0x53,0x77,0x74,0x64,0x8f,0x17,0x17,0x17,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x24,0x24,0x24,0x0d,0x0d,0x0d,0x00,0x00,0x00,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x04,0x03,0x03,0x04,0x04,0x05,0x06,0x05,0x06, 0x06,0x06,0x06,0x06,0x04,0x04,0x04,0x05,0x05,0x06,0x06,0x06,0x06,0x05,0x05,0x06, 0x05,0x06,0x06,0x04,0x04,0x06,0x03,0x04,0x05,0x03,0x03,0x04,0x02,0x03,0x04,0x02, 0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x2e,0x34,0x4b,0x57,0x63,0x8b,0x64,0x4d, 0x6a,0x5a,0x52,0x79,0x52,0x50,0x7b,0x52,0x53,0x7d,0x52,0x57,0x83,0x52,0x55,0x80, 0x63,0x4b,0x67,0x62,0x4b,0x66,0x65,0x54,0x75,0x57,0x54,0x7b,0x5b,0x62,0x8b,0xb1, 0xb8,0xcb,0xd3,0xd7,0xe2,0xcf,0xd2,0xdf,0xce,0xd2,0xde,0xce,0xd2,0xdf,0xc8,0xce, 0xdb,0xc3,0xc9,0xd8,0xba,0xc0,0xd1,0xac,0xb2,0xc7,0xa1,0xaa,0xc1,0x9d,0xa5,0xbe, 0x95,0x9f,0xb8,0x93,0x9c,0xb7,0x90,0x99,0xb4,0x8c,0x95,0xb2,0x8d,0x96,0xb3,0x85, 0x90,0xad,0x60,0x6c,0x93,0x5b,0x67,0x8e,0x5d,0x6a,0x91,0x71,0x7d,0x9e,0x3b,0x40, 0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x03,0x03,0x02,0x03,0x1e,0x21,0x2b,0x60,0x6c, 0x8f,0x50,0x4d,0x79,0x4e,0x39,0x4f,0x55,0x3f,0x58,0x5e,0x51,0x74,0x5c,0x51,0x75, 0x5c,0x51,0x75,0x5c,0x51,0x75,0x5b,0x51,0x76,0x5d,0x51,0x74,0x5d,0x51,0x74,0x5d, 0x51,0x73,0x5f,0x51,0x73,0x5d,0x51,0x73,0x5d,0x51,0x73,0x61,0x51,0x72,0x62,0x51, 0x73,0x61,0x51,0x74,0x62,0x52,0x74,0x62,0x51,0x73,0x62,0x52,0x72,0x63,0x52,0x72, 0x63,0x51,0x71,0x63,0x4f,0x6e,0x63,0x4f,0x70,0x63,0x4e,0x6d,0x63,0x4e,0x6d,0x63, 0x52,0x72,0x5c,0x51,0x78,0x51,0x4f,0x7a,0x63,0x52,0x73,0x52,0x57,0x81,0x5e,0x5d, 0x75,0x1f,0x16,0x1f,0x25,0x21,0x31,0x5a,0x52,0x79,0x64,0x4d,0x6b,0x60,0x53,0x77, 0x55,0x50,0x79,0x52,0x4f,0x7a,0x52,0x50,0x7c,0x52,0x54,0x80,0x52,0x5d,0x88,0x55, 0x60,0x8a,0x5c,0x67,0x90,0x56,0x62,0x8b,0x64,0x52,0x72,0x8c,0x96,0xb3,0xe1,0xe3, 0xea,0x62,0x57,0x63,0x5f,0x4c,0x5e,0x65,0x51,0x65,0x64,0x50,0x64,0x66,0x52,0x66, 0x62,0x51,0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x45,0x45,0x46,0xaf,0xb5,0xca,0x66,0x73,0x98, 0x5d,0x52,0x79,0x54,0x5f,0x89,0x53,0x5e,0x88,0x52,0x5d,0x86,0x52,0x5d,0x88,0x53, 0x5f,0x89,0x54,0x5f,0x89,0x54,0x5f,0x89,0x55,0x60,0x8a,0x56,0x63,0x8b,0x56,0x63, 0x8b,0x57,0x63,0x8b,0x53,0x5e,0x88,0x5d,0x52,0x79,0x6a,0x75,0x99,0x86,0x88,0x8e, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x04,0x02,0x03,0x04,0x02,0x03, 0x04,0x03,0x04,0x05,0x03,0x03,0x04,0x03,0x04,0x05,0x04,0x05,0x06,0x04,0x04,0x06, 0x05,0x05,0x06,0x05,0x05,0x06,0x05,0x06,0x06,0x05,0x06,0x07,0x0b,0x0a,0x0d,0x30, 0x2e,0x32,0x1e,0x1c,0x20,0x16,0x13,0x18,0x19,0x16,0x1c,0x1e,0x1a,0x22,0x26,0x20, 0x2a,0x24,0x20,0x28,0x1f,0x1d,0x26,0x22,0x20,0x29,0x2a,0x26,0x30,0x28,0x25,0x2e, 0x30,0x2d,0x3a,0x38,0x36,0x48,0x3b,0x3e,0x51,0x37,0x38,0x4a,0x3d,0x38,0x49,0x40, 0x39,0x46,0x3e,0x38,0x45,0x36,0x32,0x40,0x27,0x22,0x2d,0x1c,0x18,0x20,0x1d,0x1a, 0x22,0x21,0x1d,0x25,0x22,0x1e,0x26,0x1e,0x1a,0x23,0x16,0x16,0x1e,0x13,0x12,0x1a, 0x11,0x11,0x17,0x0f,0x10,0x15,0x2b,0x24,0x2b,0x2a,0x24,0x2a,0x5a,0x57,0x5c,0x7a, 0x85,0xa2,0x5a,0x67,0x8c,0x56,0x61,0x89,0x59,0x63,0x8b,0x57,0x64,0x8b,0x59,0x65, 0x8c,0x59,0x64,0x8b,0x59,0x64,0x8b,0x59,0x64,0x8b,0x57,0x62,0x8a,0x56,0x62,0x89, 0x54,0x5f,0x87,0x61,0x54,0x76,0x53,0x51,0x79,0x2e,0x34,0x44,0x0e,0x0f,0x12,0x0e, 0x0f,0x12,0x0c,0x0e,0x10,0x0a,0x0b,0x0e,0x25,0x20,0x27,0x7f,0x83,0x97,0x63,0x6d, 0x8f,0x41,0x3e,0x5e,0x5d,0x52,0x77,0x5e,0x53,0x78,0x5e,0x53,0x79,0x5e,0x53,0x79, 0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x5f,0x54,0x76,0x5f,0x53,0x76,0x5f, 0x54,0x76,0x5f,0x55,0x77,0x5f,0x56,0x77,0x5f,0x57,0x77,0x2c,0x2b,0x36,0x18,0x1a, 0x1f,0x17,0x1a,0x1e,0x17,0x1a,0x1e,0x16,0x17,0x1c,0x14,0x15,0x1a,0x12,0x12,0x16, 0x10,0x11,0x15,0x0e,0x10,0x12,0x8d,0x82,0x8f,0x6e,0x64,0x8f,0x4d,0x44,0x62,0x54, 0x4c,0x6d,0x58,0x51,0x77,0x56,0x50,0x77,0x55,0x50,0x78,0x53,0x4f,0x79,0x52,0x4f, 0x79,0x52,0x51,0x7b,0x52,0x54,0x7d,0x53,0x5a,0x82,0x54,0x5e,0x86,0x50,0x59,0x7d, 0x4d,0x57,0x76,0x41,0x48,0x61,0x21,0x1e,0x23,0x28,0x26,0x2f,0x7e,0x8a,0xae,0x6a, 0x74,0x96,0x69,0x72,0x91,0x6a,0x73,0x91,0x69,0x73,0x90,0x68,0x73,0x90,0x77,0x82, 0xa2,0x54,0x5c,0x74,0x1e,0x20,0x2a,0x22,0x22,0x2e,0x27,0x26,0x32,0x2b,0x29,0x37, 0x24,0x23,0x2f,0x25,0x26,0x35,0x39,0x3f,0x56,0x28,0x25,0x31,0x2f,0x29,0x35,0x2d, 0x28,0x32,0x2f,0x29,0x34,0x2b,0x26,0x32,0x23,0x21,0x2c,0x1e,0x1d,0x27,0x19,0x19, 0x22,0x16,0x17,0x1f,0x16,0x16,0x1e,0x16,0x17,0x1e,0x14,0x16,0x1c,0x13,0x15,0x1b, 0x12,0x13,0x1a,0x58,0x4b,0x60,0x60,0x51,0x67,0x5e,0x4e,0x62,0x5e,0x67,0x87,0x50, 0x4d,0x74,0x5c,0x51,0x73,0x5c,0x51,0x73,0x5d,0x51,0x74,0x5d,0x51,0x74,0x5d,0x51, 0x74,0x5b,0x4d,0x72,0x49,0x3c,0x59,0x3a,0x2d,0x43,0x43,0x43,0x63,0x6d,0x74,0x90, 0x08,0x08,0x0b,0x08,0x08,0x0b,0x1a,0x15,0x1c,0x36,0x2a,0x34,0x33,0x27,0x30,0x53, 0x5c,0x84,0x50,0x4e,0x77,0x5b,0x51,0x76,0x5e,0x51,0x74,0x5d,0x51,0x74,0x5e,0x51, 0x75,0x5e,0x51,0x75,0x5e,0x51,0x75,0x5e,0x51,0x75,0x5e,0x51,0x75,0x5e,0x52,0x75, 0x5e,0x52,0x75,0x60,0x51,0x72,0x51,0x3d,0x56,0x43,0x33,0x4a,0x54,0x42,0x5b,0x64, 0x59,0x80,0x20,0x21,0x2c,0x16,0x17,0x1f,0x18,0x19,0x22,0x19,0x1a,0x23,0x19,0x1a, 0x23,0x1a,0x1a,0x24,0x1a,0x1a,0x24,0x1a,0x1b,0x25,0x1a,0x1c,0x25,0x19,0x1a,0x23, 0x19,0x1a,0x22,0x18,0x1a,0x22,0x18,0x1a,0x22,0x17,0x1a,0x22,0x16,0x18,0x20,0x16, 0x18,0x1f,0x15,0x17,0x1e,0x14,0x16,0x1d,0x12,0x14,0x1a,0x12,0x13,0x1a,0x11,0x12, 0x18,0x10,0x12,0x17,0x10,0x12,0x17,0x0e,0x10,0x15,0x0e,0x0f,0x13,0x0d,0x0e,0x12, 0x0c,0x0d,0x11,0x0b,0x0c,0x10,0x0a,0x0c,0x0f,0x0a,0x0a,0x0e,0x09,0x0a,0x0d,0x09, 0x0a,0x0c,0x07,0x08,0x0b,0x07,0x07,0x0a,0x07,0x07,0x0a,0x06,0x06,0x09,0x06,0x06, 0x08,0x06,0x06,0x08,0x03,0x04,0x05,0x03,0x04,0x05,0x03,0x03,0x04,0x03,0x03,0x04, 0x02,0x03,0x04,0x02,0x03,0x04,0x02,0x02,0x03,0x42,0x44,0x4c,0x7f,0x89,0xa8,0x51, 0x54,0x7c,0x5f,0x53,0x77,0x5f,0x53,0x77,0x5f,0x53,0x77,0x5f,0x53,0x77,0x5f,0x52, 0x76,0x5f,0x52,0x76,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77, 0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x69,0x59,0x81,0x3e,0x35,0x48,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x1a,0x1a,0x1a,0x12,0x12,0x13,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0c,0x0c,0x0d,0x21,0x21,0x22,0x00,0x00,0x00, 0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02, 0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02, 0x03,0x02,0x03,0x03,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x04,0x05,0x02,0x03,0x04, 0x02,0x02,0x03,0x02,0x02,0x02,0x00,0x00,0x00,0x10,0x11,0x19,0x5a,0x65,0x8d,0x5f, 0x53,0x77,0x64,0x50,0x6f,0x52,0x4f,0x7a,0x52,0x50,0x7c,0x52,0x53,0x7d,0x52,0x57, 0x82,0x52,0x58,0x83,0x63,0x4b,0x69,0x63,0x4c,0x69,0x64,0x54,0x77,0x56,0x53,0x7c, 0x5c,0x66,0x8e,0xc7,0xcb,0xda,0xd3,0xd8,0xe1,0xcf,0xd3,0xdf,0xcf,0xd3,0xdf,0xcc, 0xd1,0xde,0xc8,0xcc,0xda,0xc2,0xc8,0xd7,0xba,0xc0,0xd1,0xad,0xb4,0xc9,0xa1,0xaa, 0xc1,0x9b,0xa4,0xbc,0x96,0xa0,0xb9,0x94,0x9d,0xb8,0x90,0x99,0xb4,0x8e,0x98,0xb3, 0x90,0x99,0xb4,0x92,0x9b,0xb7,0x8c,0x96,0xb2,0x73,0x7e,0xa1,0x5a,0x65,0x8d,0x52, 0x50,0x7c,0x5f,0x6b,0x92,0x5c,0x66,0x80,0x11,0x13,0x18,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x03,0x12,0x15,0x1c,0x55, 0x5e,0x83,0x50,0x50,0x7b,0x56,0x40,0x59,0x55,0x3f,0x57,0x5e,0x51,0x74,0x5c,0x51, 0x76,0x5c,0x51,0x76,0x5c,0x51,0x75,0x5c,0x51,0x75,0x5e,0x51,0x73,0x5e,0x51,0x73, 0x5e,0x51,0x73,0x5d,0x51,0x73,0x60,0x51,0x74,0x5c,0x51,0x76,0x5e,0x51,0x74,0x60, 0x51,0x75,0x62,0x52,0x74,0x62,0x52,0x74,0x62,0x51,0x74,0x62,0x52,0x73,0x62,0x52, 0x73,0x63,0x52,0x72,0x63,0x52,0x72,0x63,0x51,0x70,0x64,0x50,0x6f,0x64,0x4f,0x6d, 0x64,0x4f,0x6e,0x64,0x52,0x72,0x62,0x53,0x77,0x52,0x4f,0x7a,0x5b,0x52,0x79,0x55, 0x50,0x79,0x65,0x6b,0x8a,0x1f,0x16,0x1f,0x24,0x20,0x2f,0x55,0x50,0x79,0x62,0x4a, 0x66,0x62,0x53,0x77,0x57,0x50,0x79,0x52,0x4f,0x7a,0x52,0x50,0x7b,0x52,0x54,0x80, 0x52,0x5d,0x86,0x55,0x62,0x8b,0x5a,0x65,0x8d,0x5c,0x67,0x90,0x64,0x53,0x75,0x72, 0x7d,0xa0,0xe6,0xe8,0xee,0x73,0x6b,0x78,0x62,0x4e,0x62,0x68,0x53,0x68,0x67,0x53, 0x67,0x69,0x54,0x69,0x71,0x61,0x7a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0xc8,0xcb, 0xd1,0x86,0x91,0xaf,0x56,0x50,0x79,0x52,0x53,0x7d,0x53,0x5e,0x88,0x52,0x5d,0x88, 0x53,0x5e,0x88,0x53,0x5e,0x89,0x53,0x5f,0x89,0x54,0x5f,0x89,0x54,0x60,0x8a,0x55, 0x60,0x8a,0x56,0x62,0x8b,0x56,0x62,0x8a,0x56,0x62,0x8a,0x52,0x4f,0x7b,0x52,0x52, 0x7c,0x9d,0xa5,0xba,0x12,0x12,0x13,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x03,0x02,0x03,0x04,0x03,0x03,0x04,0x03,0x04,0x05,0x03,0x04,0x05,0x03,0x04, 0x05,0x04,0x04,0x06,0x05,0x05,0x06,0x04,0x05,0x06,0x05,0x06,0x06,0x06,0x06,0x07, 0x05,0x06,0x06,0x11,0x11,0x13,0x0d,0x0d,0x10,0x0e,0x0c,0x10,0x17,0x15,0x1b,0x1b, 0x18,0x1f,0x20,0x1b,0x23,0x18,0x16,0x1c,0x14,0x13,0x18,0x16,0x16,0x1b,0x19,0x16, 0x1e,0x14,0x13,0x19,0x18,0x16,0x1d,0x22,0x20,0x2a,0x32,0x33,0x42,0x3f,0x42,0x51, 0x45,0x4a,0x5a,0x3d,0x3d,0x50,0x45,0x45,0x58,0x48,0x4e,0x63,0x3e,0x3e,0x52,0x34, 0x2e,0x3b,0x23,0x1f,0x28,0x1e,0x1a,0x22,0x1d,0x1c,0x26,0x20,0x1f,0x2a,0x22,0x1e, 0x27,0x21,0x1d,0x25,0x20,0x1c,0x24,0x15,0x15,0x1c,0x28,0x23,0x2b,0x2c,0x24,0x2c, 0x5a,0x57,0x5c,0x77,0x82,0xa0,0x59,0x65,0x8b,0x56,0x62,0x89,0x56,0x62,0x8a,0x59, 0x63,0x8b,0x58,0x64,0x8b,0x59,0x64,0x8b,0x5a,0x64,0x8b,0x57,0x63,0x8a,0x56,0x62, 0x8a,0x57,0x63,0x89,0x55,0x60,0x87,0x5e,0x55,0x76,0x53,0x51,0x79,0x2b,0x31,0x42, 0x0f,0x10,0x14,0x0f,0x10,0x13,0x0d,0x0e,0x11,0x0a,0x0a,0x0d,0x21,0x1c,0x23,0x79, 0x7d,0x8f,0x63,0x6d,0x90,0x3f,0x3e,0x5f,0x5d,0x52,0x77,0x5e,0x53,0x78,0x5e,0x53, 0x78,0x5e,0x53,0x79,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x5f,0x54,0x76, 0x60,0x53,0x76,0x5f,0x54,0x76,0x5f,0x55,0x77,0x5f,0x56,0x77,0x5f,0x57,0x78,0x2f, 0x2d,0x39,0x19,0x1a,0x20,0x19,0x1a,0x20,0x18,0x1a,0x1e,0x16,0x17,0x1c,0x14,0x16, 0x1a,0x12,0x12,0x16,0x0f,0x11,0x14,0x0e,0x0e,0x12,0x80,0x79,0x82,0x76,0x69,0x9a, 0x4f,0x47,0x65,0x53,0x4b,0x6d,0x58,0x51,0x77,0x55,0x50,0x77,0x55,0x50,0x78,0x53, 0x4f,0x79,0x52,0x4f,0x79,0x52,0x50,0x7a,0x53,0x54,0x7d,0x53,0x57,0x80,0x53,0x5e, 0x84,0x50,0x59,0x7c,0x4c,0x56,0x75,0x44,0x4b,0x66,0x23,0x1e,0x23,0x24,0x20,0x26, 0x52,0x57,0x6f,0x75,0x81,0xa6,0x67,0x71,0x90,0x68,0x72,0x91,0x69,0x73,0x91,0x68, 0x73,0x90,0x6c,0x77,0x95,0x6f,0x7b,0x9b,0x1f,0x21,0x2c,0x28,0x26,0x33,0x30,0x2b, 0x39,0x33,0x2f,0x3d,0x2d,0x29,0x36,0x2d,0x2c,0x3f,0x4f,0x57,0x78,0x40,0x3e,0x52, 0x38,0x31,0x3e,0x38,0x32,0x3e,0x30,0x2a,0x35,0x2e,0x28,0x33,0x2e,0x28,0x34,0x2b, 0x26,0x32,0x22,0x20,0x2b,0x1c,0x1b,0x25,0x19,0x18,0x21,0x16,0x16,0x1e,0x15,0x16, 0x1d,0x13,0x15,0x1c,0x13,0x14,0x1a,0x21,0x1f,0x28,0x62,0x52,0x69,0x5f,0x50,0x66, 0x6e,0x63,0x7b,0x4f,0x58,0x7e,0x5a,0x51,0x74,0x5c,0x51,0x74,0x5d,0x51,0x73,0x5d, 0x51,0x74,0x5d,0x51,0x74,0x5b,0x4d,0x72,0x49,0x3c,0x59,0x3c,0x2d,0x43,0x41,0x41, 0x5e,0x66,0x6e,0x8e,0x09,0x09,0x0b,0x09,0x09,0x0c,0x15,0x12,0x17,0x37,0x2a,0x35, 0x32,0x27,0x30,0x53,0x5c,0x84,0x50,0x4e,0x77,0x5b,0x51,0x76,0x5e,0x51,0x74,0x5e, 0x51,0x75,0x5e,0x52,0x75,0x5e,0x51,0x75,0x5e,0x51,0x75,0x5e,0x52,0x75,0x5e,0x52, 0x75,0x5e,0x52,0x76,0x5e,0x52,0x75,0x61,0x50,0x73,0x52,0x3f,0x56,0x42,0x33,0x49, 0x51,0x40,0x59,0x68,0x5a,0x80,0x22,0x21,0x2e,0x18,0x19,0x22,0x1a,0x1a,0x24,0x1a, 0x1b,0x25,0x1b,0x1d,0x26,0x1b,0x1c,0x26,0x1b,0x1d,0x26,0x1b,0x1d,0x26,0x1b,0x1e, 0x27,0x1a,0x1c,0x26,0x1a,0x1c,0x26,0x19,0x1b,0x24,0x18,0x1a,0x23,0x18,0x1a,0x22, 0x16,0x19,0x20,0x16,0x19,0x21,0x16,0x18,0x20,0x16,0x18,0x1f,0x14,0x16,0x1d,0x12, 0x15,0x1b,0x12,0x13,0x1a,0x11,0x12,0x18,0x10,0x12,0x17,0x0f,0x11,0x16,0x0e,0x0f, 0x14,0x0d,0x0e,0x12,0x0c,0x0d,0x11,0x0c,0x0d,0x11,0x0a,0x0c,0x0f,0x0a,0x0b,0x0e, 0x09,0x0a,0x0d,0x09,0x0a,0x0c,0x08,0x09,0x0b,0x07,0x07,0x0a,0x07,0x07,0x0a,0x06, 0x06,0x09,0x06,0x06,0x08,0x06,0x06,0x08,0x05,0x06,0x07,0x04,0x04,0x06,0x03,0x04, 0x05,0x03,0x04,0x05,0x03,0x03,0x05,0x02,0x03,0x04,0x02,0x02,0x03,0x1d,0x1e,0x20, 0x9a,0xa2,0xbb,0x53,0x5f,0x87,0x5d,0x53,0x78,0x5f,0x53,0x77,0x5f,0x53,0x77,0x5f, 0x53,0x77,0x5f,0x53,0x77,0x5f,0x52,0x76,0x5f,0x52,0x76,0x60,0x53,0x77,0x60,0x53, 0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x62,0x55,0x7a, 0x67,0x59,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x27,0x27,0x27,0x29,0x29,0x29,0x11,0x11,0x12,0x17, 0x17,0x18,0x17,0x17,0x18,0x00,0x00,0x00,0x0b,0x0b,0x0c,0x1c,0x1c,0x1d,0x1f,0x1f, 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x04,0x02,0x02, 0x04,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x41,0x4b,0x69, 0x51,0x57,0x83,0x60,0x48,0x65,0x54,0x50,0x79,0x52,0x4f,0x7b,0x52,0x52,0x7c,0x52, 0x55,0x80,0x52,0x5b,0x84,0x52,0x5d,0x87,0x64,0x4f,0x6e,0x64,0x4d,0x6b,0x64,0x54, 0x79,0x56,0x54,0x7d,0x5e,0x69,0x90,0xd1,0xd6,0xe1,0xd1,0xd6,0xe0,0xce,0xd2,0xdf, 0xd0,0xd5,0xe0,0xcc,0xd1,0xde,0xc9,0xce,0xdb,0xc1,0xc7,0xd6,0xb9,0xc0,0xd1,0xad, 0xb4,0xc9,0xa1,0xaa,0xc2,0x9c,0xa5,0xbc,0x98,0xa1,0xbb,0x96,0xa0,0xb9,0x93,0x9c, 0xb8,0x90,0x9a,0xb5,0x93,0x9c,0xb8,0x94,0x9f,0xb8,0x92,0x9b,0xb7,0x8c,0x96,0xb2, 0x77,0x83,0xa4,0x5c,0x69,0x90,0x52,0x54,0x7e,0x60,0x6d,0x93,0x6a,0x76,0x97,0x30, 0x35,0x45,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x03,0x0f,0x11,0x16, 0x4f,0x59,0x7d,0x51,0x52,0x7c,0x5e,0x47,0x62,0x53,0x3e,0x55,0x60,0x51,0x75,0x5b, 0x50,0x76,0x5c,0x51,0x76,0x5c,0x51,0x76,0x5c,0x51,0x76,0x5e,0x51,0x74,0x5c,0x51, 0x75,0x5e,0x51,0x73,0x5d,0x51,0x73,0x60,0x51,0x74,0x60,0x51,0x74,0x60,0x51,0x74, 0x5e,0x51,0x75,0x5e,0x52,0x75,0x60,0x52,0x75,0x63,0x52,0x74,0x62,0x52,0x74,0x62, 0x52,0x74,0x62,0x52,0x73,0x63,0x52,0x73,0x63,0x52,0x73,0x63,0x52,0x72,0x64,0x52, 0x72,0x64,0x50,0x71,0x64,0x50,0x6f,0x64,0x52,0x72,0x64,0x53,0x76,0x53,0x4f,0x7a, 0x52,0x4f,0x7a,0x64,0x53,0x76,0x64,0x71,0x96,0x22,0x19,0x22,0x24,0x20,0x2f,0x53, 0x4f,0x78,0x5f,0x47,0x63,0x64,0x53,0x76,0x56,0x50,0x79,0x52,0x4f,0x7a,0x52,0x4f, 0x7b,0x52,0x54,0x7e,0x52,0x5d,0x86,0x53,0x5f,0x89,0x58,0x65,0x8d,0x5a,0x66,0x8e, 0x63,0x4c,0x69,0x63,0x6f,0x95,0xe5,0xe7,0xee,0x80,0x7a,0x87,0x5f,0x4b,0x5e,0x6c, 0x57,0x6d,0x6b,0x56,0x6c,0x6d,0x58,0x6f,0x78,0x69,0x88,0x07,0x07,0x09,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x82,0x83,0x83,0xa4,0xac,0xc2,0x54,0x5f,0x89,0x64,0x53,0x76,0x53,0x5e, 0x88,0x52,0x5d,0x86,0x52,0x5d,0x86,0x53,0x5e,0x88,0x53,0x5e,0x88,0x53,0x5f,0x89, 0x54,0x5f,0x89,0x55,0x60,0x8a,0x56,0x62,0x8b,0x55,0x60,0x8a,0x56,0x62,0x8a,0x53, 0x5e,0x87,0x64,0x53,0x76,0x6d,0x7a,0x9c,0x66,0x68,0x6b,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x04,0x02,0x02,0x03,0x03,0x03,0x04,0x03, 0x03,0x04,0x03,0x04,0x05,0x04,0x04,0x05,0x04,0x04,0x06,0x04,0x05,0x06,0x04,0x05, 0x06,0x05,0x05,0x06,0x05,0x06,0x07,0x06,0x06,0x07,0x06,0x06,0x07,0x07,0x07,0x09, 0x0c,0x0b,0x0f,0x12,0x10,0x15,0x15,0x13,0x19,0x12,0x11,0x16,0x12,0x11,0x16,0x12, 0x12,0x16,0x13,0x12,0x16,0x13,0x12,0x16,0x14,0x13,0x17,0x19,0x18,0x1e,0x32,0x32, 0x3a,0x42,0x41,0x4c,0x44,0x46,0x52,0x3a,0x3c,0x4d,0x41,0x45,0x58,0x59,0x5e,0x70, 0x58,0x5f,0x72,0x45,0x4a,0x5e,0x38,0x37,0x48,0x2a,0x29,0x36,0x2f,0x32,0x3c,0x2c, 0x2f,0x38,0x1e,0x1f,0x2a,0x22,0x1e,0x26,0x22,0x1e,0x26,0x1d,0x1a,0x22,0x2a,0x23, 0x2e,0x2c,0x26,0x2f,0x59,0x55,0x5c,0x75,0x7f,0x9d,0x58,0x64,0x88,0x55,0x61,0x88, 0x57,0x63,0x89,0x58,0x64,0x8b,0x58,0x64,0x8b,0x5a,0x64,0x8b,0x5a,0x65,0x8c,0x58, 0x64,0x8a,0x58,0x62,0x8a,0x57,0x63,0x89,0x55,0x5f,0x87,0x5f,0x55,0x77,0x53,0x51, 0x79,0x29,0x2d,0x3e,0x10,0x12,0x15,0x0f,0x10,0x14,0x0e,0x0e,0x12,0x0a,0x0b,0x0e, 0x1e,0x1b,0x21,0x74,0x78,0x89,0x64,0x6e,0x90,0x40,0x3e,0x5e,0x5c,0x53,0x77,0x5d, 0x52,0x78,0x5e,0x53,0x78,0x5e,0x53,0x79,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53, 0x77,0x5f,0x54,0x76,0x60,0x54,0x76,0x5f,0x55,0x76,0x5f,0x55,0x77,0x60,0x56,0x78, 0x5f,0x57,0x78,0x33,0x31,0x3e,0x19,0x1a,0x20,0x19,0x1b,0x20,0x17,0x19,0x1e,0x16, 0x17,0x1c,0x14,0x15,0x1a,0x12,0x12,0x16,0x0f,0x10,0x13,0x0e,0x0e,0x11,0x71,0x69, 0x75,0x7d,0x70,0xa0,0x52,0x48,0x68,0x51,0x4a,0x6c,0x58,0x51,0x77,0x55,0x50,0x77, 0x55,0x50,0x78,0x52,0x4f,0x79,0x52,0x4f,0x79,0x52,0x50,0x7a,0x53,0x54,0x7d,0x53, 0x57,0x80,0x53,0x5e,0x84,0x4e,0x58,0x7c,0x4c,0x57,0x76,0x47,0x4d,0x6b,0x22,0x1e, 0x23,0x28,0x23,0x29,0x31,0x30,0x3a,0x7b,0x87,0xab,0x68,0x71,0x93,0x65,0x6f,0x8d, 0x67,0x71,0x90,0x67,0x70,0x8f,0x67,0x70,0x8f,0x74,0x7e,0xa0,0x21,0x22,0x2e,0x2c, 0x29,0x36,0x32,0x2d,0x3a,0x31,0x2c,0x3a,0x28,0x26,0x32,0x4b,0x45,0x5e,0x5c,0x63, 0x81,0x54,0x51,0x74,0x5e,0x58,0x68,0x39,0x32,0x40,0x36,0x2f,0x3c,0x2a,0x24,0x2f, 0x29,0x23,0x2e,0x2a,0x25,0x30,0x30,0x29,0x35,0x28,0x24,0x2f,0x23,0x21,0x2b,0x1c, 0x1b,0x26,0x17,0x17,0x20,0x15,0x16,0x1d,0x13,0x14,0x1b,0x13,0x12,0x1a,0x59,0x4b, 0x60,0x62,0x53,0x69,0x6d,0x5c,0x75,0x63,0x69,0x8b,0x50,0x4d,0x74,0x5c,0x51,0x73, 0x5c,0x51,0x73,0x5d,0x51,0x74,0x5d,0x51,0x74,0x5b,0x4e,0x71,0x49,0x3e,0x59,0x39, 0x2d,0x45,0x41,0x3e,0x5d,0x67,0x6d,0x8e,0x09,0x09,0x0b,0x09,0x09,0x0b,0x0e,0x0d, 0x11,0x33,0x28,0x33,0x31,0x26,0x2f,0x51,0x5b,0x83,0x50,0x4e,0x77,0x59,0x50,0x75, 0x5e,0x51,0x74,0x5e,0x51,0x75,0x5e,0x52,0x75,0x5e,0x51,0x75,0x5e,0x52,0x75,0x5e, 0x52,0x75,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e,0x52,0x75,0x61,0x50,0x73,0x53,0x3f, 0x58,0x44,0x33,0x4a,0x52,0x41,0x5a,0x67,0x5a,0x80,0x21,0x23,0x30,0x1a,0x1b,0x25, 0x1b,0x1c,0x26,0x1c,0x1e,0x28,0x1c,0x1e,0x28,0x1e,0x21,0x2b,0x1e,0x21,0x2b,0x1d, 0x1f,0x2a,0x1d,0x20,0x2a,0x1c,0x1e,0x28,0x1c,0x1e,0x28,0x1a,0x1d,0x26,0x1a,0x1c, 0x25,0x19,0x1b,0x23,0x19,0x1b,0x24,0x18,0x1a,0x22,0x17,0x1a,0x22,0x16,0x18,0x20, 0x15,0x17,0x1e,0x14,0x16,0x1c,0x12,0x14,0x1a,0x11,0x12,0x18,0x11,0x12,0x18,0x10, 0x11,0x16,0x0e,0x10,0x15,0x0e,0x0f,0x14,0x0c,0x0e,0x12,0x0c,0x0d,0x11,0x0b,0x0c, 0x10,0x0a,0x0c,0x0f,0x0a,0x0a,0x0e,0x09,0x0a,0x0c,0x08,0x09,0x0c,0x07,0x08,0x0a, 0x07,0x08,0x0a,0x06,0x07,0x0a,0x06,0x06,0x08,0x06,0x06,0x08,0x05,0x05,0x06,0x04, 0x05,0x06,0x03,0x04,0x05,0x03,0x04,0x05,0x03,0x04,0x05,0x03,0x03,0x05,0x03,0x03, 0x04,0x06,0x06,0x07,0xb8,0xbe,0xcf,0x5c,0x67,0x8f,0x5a,0x52,0x78,0x5f,0x53,0x77, 0x5f,0x53,0x77,0x5f,0x53,0x77,0x5f,0x53,0x77,0x5f,0x52,0x76,0x5f,0x52,0x76,0x5f, 0x52,0x76,0x5f,0x52,0x76,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53, 0x77,0x60,0x53,0x78,0x87,0x76,0xa8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x29,0x29,0x29,0x0f,0x0f,0x0f, 0x20,0x20,0x20,0x25,0x25,0x25,0x26,0x26,0x26,0x24,0x24,0x24,0x20,0x21,0x21,0x25, 0x25,0x26,0x12,0x12,0x13,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03, 0x03,0x04,0x04,0x02,0x03,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x1d,0x21, 0x2f,0x56,0x62,0x8a,0x64,0x4f,0x6d,0x64,0x53,0x76,0x52,0x4f,0x7a,0x52,0x4f,0x7b, 0x52,0x52,0x7c,0x52,0x54,0x7f,0x52,0x5b,0x84,0x53,0x5e,0x87,0x64,0x52,0x73,0x64, 0x4f,0x6d,0x60,0x54,0x79,0x56,0x54,0x7d,0x60,0x6b,0x92,0xd9,0xdb,0xe6,0xd1,0xd5, 0xe1,0xd0,0xd3,0xdf,0xd0,0xd3,0xe0,0xcb,0xd0,0xdd,0xc8,0xce,0xda,0xc1,0xc7,0xd7, 0xb9,0xbf,0xd0,0xab,0xb2,0xc8,0xa4,0xac,0xc2,0x9d,0xa7,0xbe,0x9b,0xa4,0xbc,0x9a, 0xa3,0xbc,0x98,0xa1,0xba,0x92,0x9b,0xb7,0x94,0x9d,0xb8,0x96,0xa0,0xb9,0x94,0x9d, 0xb8,0x90,0x99,0xb4,0x88,0x92,0xb0,0x7a,0x85,0xa5,0x53,0x5e,0x88,0x52,0x50,0x7b, 0x58,0x65,0x8d,0x64,0x6f,0x95,0x4c,0x56,0x73,0x0f,0x11,0x17,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x20,0x22, 0x30,0x4e,0x57,0x7a,0x51,0x53,0x7c,0x62,0x4b,0x68,0x52,0x3c,0x54,0x62,0x51,0x71, 0x5a,0x50,0x77,0x5c,0x51,0x77,0x5c,0x51,0x76,0x5c,0x51,0x76,0x5c,0x51,0x76,0x5c, 0x51,0x76,0x5e,0x51,0x74,0x5e,0x51,0x74,0x5e,0x51,0x74,0x5e,0x51,0x74,0x60,0x51, 0x74,0x5c,0x51,0x77,0x5e,0x51,0x75,0x60,0x52,0x75,0x61,0x52,0x75,0x61,0x52,0x75, 0x61,0x52,0x75,0x62,0x52,0x74,0x63,0x52,0x74,0x63,0x52,0x74,0x63,0x52,0x73,0x64, 0x53,0x73,0x64,0x52,0x72,0x64,0x52,0x72,0x64,0x4f,0x6e,0x64,0x52,0x72,0x64,0x53, 0x75,0x5c,0x52,0x79,0x52,0x4f,0x7b,0x64,0x53,0x74,0x56,0x62,0x8b,0x2b,0x24,0x31, 0x24,0x20,0x30,0x57,0x4f,0x77,0x5d,0x45,0x60,0x62,0x53,0x77,0x5a,0x52,0x79,0x52, 0x4f,0x7a,0x52,0x4f,0x7b,0x52,0x53,0x7d,0x52,0x5a,0x84,0x53,0x5f,0x89,0x55,0x62, 0x8b,0x57,0x63,0x8c,0x64,0x4d,0x6a,0x5b,0x66,0x8e,0xdf,0xe1,0xe9,0x94,0x91,0x9e, 0x5c,0x49,0x5a,0x6b,0x57,0x6c,0x6f,0x5b,0x71,0x74,0x5f,0x78,0x73,0x69,0x8a,0x11, 0x13,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x24,0x24,0x24,0xcc,0xd1,0xde,0x6a,0x75,0x9a,0x64, 0x4f,0x6e,0x52,0x50,0x7c,0x52,0x5c,0x86,0x52,0x5b,0x85,0x52,0x5d,0x88,0x53,0x5e, 0x88,0x54,0x5f,0x89,0x54,0x60,0x8a,0x55,0x60,0x8a,0x55,0x60,0x8a,0x56,0x62,0x8b, 0x56,0x62,0x8b,0x55,0x60,0x89,0x5e,0x53,0x79,0x52,0x5a,0x83,0x94,0x9a,0xac,0x04, 0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03, 0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x04,0x04,0x05,0x04, 0x04,0x06,0x04,0x04,0x06,0x05,0x05,0x06,0x05,0x05,0x06,0x05,0x06,0x06,0x05,0x06, 0x07,0x06,0x06,0x07,0x07,0x07,0x08,0x09,0x09,0x0b,0x0d,0x0c,0x0e,0x0f,0x0e,0x12, 0x11,0x10,0x14,0x11,0x11,0x15,0x13,0x12,0x16,0x13,0x12,0x16,0x14,0x13,0x17,0x18, 0x17,0x1c,0x22,0x21,0x28,0x26,0x26,0x2d,0x2b,0x2b,0x35,0x31,0x32,0x3f,0x3b,0x3d, 0x4b,0x45,0x4a,0x5a,0x57,0x5d,0x6e,0x58,0x5e,0x70,0x51,0x56,0x67,0x3e,0x44,0x56, 0x3a,0x3e,0x4c,0x3c,0x40,0x4b,0x2c,0x2f,0x39,0x1a,0x1a,0x23,0x1e,0x1a,0x22,0x13, 0x13,0x1a,0x27,0x21,0x2b,0x31,0x28,0x34,0x55,0x51,0x5a,0x74,0x7d,0x9c,0x58,0x63, 0x88,0x54,0x60,0x85,0x55,0x62,0x88,0x57,0x62,0x8a,0x5a,0x64,0x8b,0x5a,0x65,0x8b, 0x58,0x63,0x8b,0x59,0x64,0x8a,0x57,0x63,0x89,0x56,0x62,0x89,0x55,0x5f,0x86,0x5d, 0x55,0x77,0x52,0x51,0x79,0x26,0x2b,0x39,0x10,0x12,0x15,0x0f,0x11,0x14,0x0e,0x0e, 0x12,0x0c,0x0d,0x0f,0x1c,0x1a,0x1f,0x6e,0x6e,0x80,0x64,0x6f,0x91,0x40,0x3e,0x5f, 0x5b,0x52,0x76,0x5d,0x52,0x78,0x5e,0x53,0x78,0x5e,0x53,0x79,0x60,0x53,0x77,0x60, 0x53,0x77,0x60,0x53,0x77,0x5f,0x54,0x76,0x5f,0x54,0x77,0x5f,0x55,0x76,0x60,0x55, 0x78,0x60,0x57,0x78,0x5f,0x58,0x78,0x36,0x33,0x41,0x1a,0x1b,0x21,0x1a,0x1b,0x21, 0x19,0x1a,0x1f,0x16,0x18,0x1d,0x14,0x16,0x1a,0x12,0x13,0x16,0x0f,0x10,0x13,0x0d, 0x0e,0x11,0x64,0x5c,0x66,0x83,0x74,0xa6,0x51,0x4b,0x69,0x52,0x4b,0x6a,0x58,0x51, 0x77,0x55,0x50,0x77,0x55,0x50,0x78,0x53,0x4f,0x79,0x52,0x4f,0x79,0x52,0x50,0x7a, 0x52,0x53,0x7c,0x52,0x56,0x7e,0x52,0x5b,0x82,0x4e,0x58,0x7d,0x4c,0x56,0x76,0x4a, 0x53,0x71,0x21,0x1e,0x23,0x2a,0x25,0x2b,0x27,0x23,0x2a,0x61,0x69,0x86,0x6f,0x7b, 0x9d,0x63,0x6e,0x8c,0x5e,0x68,0x84,0x66,0x70,0x8e,0x65,0x6f,0x8d,0x6c,0x77,0x9a, 0x35,0x37,0x49,0x2c,0x2a,0x37,0x32,0x2d,0x3a,0x30,0x2b,0x39,0x29,0x27,0x35,0x4d, 0x4a,0x61,0x5d,0x66,0x84,0x4d,0x4b,0x6d,0x64,0x69,0x85,0x51,0x4f,0x5c,0x28,0x26, 0x32,0x2a,0x26,0x32,0x2b,0x26,0x31,0x2d,0x27,0x32,0x2d,0x27,0x33,0x27,0x22,0x2c, 0x27,0x22,0x2b,0x28,0x23,0x2e,0x22,0x20,0x2a,0x1a,0x1a,0x22,0x16,0x16,0x1d,0x13, 0x14,0x1a,0x23,0x21,0x2a,0x64,0x54,0x6c,0x6c,0x5f,0x78,0x6a,0x66,0x85,0x51,0x5a, 0x81,0x59,0x50,0x74,0x5c,0x51,0x73,0x5d,0x51,0x73,0x5d,0x51,0x74,0x5b,0x4e,0x71, 0x4a,0x3d,0x59,0x38,0x2a,0x42,0x40,0x39,0x57,0x6a,0x71,0x90,0x09,0x0a,0x0d,0x0a, 0x0a,0x0e,0x0e,0x0d,0x12,0x32,0x27,0x30,0x2e,0x24,0x2c,0x52,0x5b,0x82,0x50,0x50, 0x78,0x59,0x50,0x75,0x5d,0x51,0x73,0x5e,0x51,0x75,0x5e,0x52,0x75,0x5e,0x51,0x75, 0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e,0x52,0x76,0x5e,0x52,0x75,0x60, 0x50,0x74,0x54,0x40,0x5a,0x43,0x34,0x4a,0x52,0x40,0x5b,0x66,0x5a,0x80,0x23,0x25, 0x32,0x1c,0x1e,0x27,0x1e,0x20,0x2a,0x1e,0x21,0x2b,0x1f,0x22,0x2d,0x22,0x24,0x2f, 0x23,0x26,0x31,0x22,0x24,0x2f,0x21,0x24,0x2e,0x1f,0x22,0x2c,0x1e,0x21,0x2a,0x1c, 0x1e,0x29,0x1c,0x1e,0x28,0x1a,0x1e,0x26,0x1a,0x1c,0x25,0x19,0x1b,0x23,0x18,0x1a, 0x22,0x17,0x1a,0x22,0x17,0x19,0x21,0x16,0x18,0x1f,0x15,0x16,0x1d,0x13,0x15,0x1a, 0x12,0x14,0x1a,0x11,0x12,0x18,0x0f,0x11,0x16,0x0e,0x10,0x15,0x0e,0x0f,0x13,0x0d, 0x0e,0x12,0x0b,0x0d,0x10,0x0a,0x0c,0x0f,0x0a,0x0b,0x0e,0x0a,0x0a,0x0e,0x08,0x09, 0x0c,0x07,0x08,0x0b,0x07,0x08,0x0a,0x07,0x07,0x0a,0x06,0x06,0x09,0x06,0x06,0x08, 0x06,0x06,0x08,0x05,0x06,0x07,0x04,0x05,0x06,0x03,0x04,0x05,0x03,0x04,0x05,0x03, 0x03,0x05,0x03,0x03,0x04,0x03,0x03,0x04,0xa4,0xa8,0xb3,0x64,0x70,0x96,0x54,0x50, 0x78,0x5e,0x53,0x76,0x5f,0x53,0x77,0x5f,0x53,0x77,0x5f,0x53,0x77,0x5f,0x52,0x76, 0x5f,0x52,0x76,0x5f,0x52,0x76,0x5f,0x52,0x76,0x5f,0x52,0x76,0x5f,0x52,0x76,0x60, 0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x75,0x66,0x92,0x12,0x12,0x12,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0e,0x0e,0x0e,0x24,0x24,0x24,0x2f,0x2f, 0x2f,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x18,0x14,0x14,0x14, 0x12,0x12,0x13,0x0b,0x0b,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x06, 0x07,0x0a,0x50,0x5b,0x80,0x51,0x4e,0x79,0x60,0x48,0x64,0x52,0x4f,0x7a,0x52,0x4f, 0x7a,0x52,0x50,0x7b,0x52,0x52,0x7c,0x52,0x54,0x7f,0x52,0x5b,0x84,0x53,0x5e,0x87, 0x62,0x53,0x77,0x64,0x4e,0x6c,0x62,0x54,0x79,0x57,0x55,0x7e,0x66,0x71,0x96,0xde, 0xe1,0xe8,0xcf,0xd3,0xdf,0xd0,0xd5,0xe0,0xd0,0xd3,0xdf,0xcb,0xd0,0xdd,0xc8,0xcc, 0xda,0xc2,0xc8,0xd7,0xb7,0xbe,0xcf,0xac,0xb3,0xc8,0xa3,0xac,0xc2,0xa1,0xa8,0xc0, 0x9c,0xa5,0xbe,0x9a,0xa3,0xbc,0x99,0xa2,0xbb,0x98,0xa1,0xba,0x96,0xa0,0xb9,0x96, 0xa0,0xb9,0x94,0x9d,0xb8,0x8e,0x98,0xb4,0x89,0x93,0xb0,0x83,0x8d,0xac,0x79,0x84, 0xa5,0x5d,0x69,0x91,0x52,0x4f,0x7a,0x52,0x53,0x7d,0x5d,0x69,0x91,0x60,0x6b,0x90, 0x2a,0x2f,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x06,0x09,0x15, 0x12,0x1a,0x42,0x4a,0x6c,0x52,0x50,0x7a,0x61,0x4a,0x64,0x4e,0x38,0x4f,0x5c,0x45, 0x60,0x5c,0x52,0x77,0x5b,0x50,0x77,0x5b,0x50,0x77,0x5c,0x51,0x77,0x5c,0x51,0x76, 0x5c,0x51,0x76,0x5c,0x51,0x76,0x5e,0x51,0x74,0x5c,0x51,0x76,0x5e,0x51,0x74,0x5c, 0x51,0x76,0x5e,0x51,0x75,0x5e,0x51,0x75,0x62,0x52,0x74,0x5e,0x52,0x75,0x5f,0x52, 0x75,0x61,0x51,0x75,0x61,0x52,0x75,0x62,0x52,0x74,0x63,0x52,0x74,0x63,0x52,0x74, 0x63,0x52,0x74,0x64,0x53,0x74,0x64,0x52,0x72,0x64,0x52,0x71,0x64,0x50,0x71,0x64, 0x52,0x71,0x64,0x52,0x73,0x63,0x53,0x77,0x53,0x4f,0x7a,0x64,0x53,0x75,0x52,0x4f, 0x7b,0x39,0x35,0x47,0x2b,0x27,0x39,0x5d,0x52,0x79,0x5e,0x46,0x62,0x5e,0x53,0x79, 0x57,0x50,0x79,0x53,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x52,0x7d,0x52,0x58,0x84,0x53, 0x5e,0x88,0x54,0x5f,0x89,0x58,0x64,0x8c,0x64,0x4f,0x6e,0x53,0x5e,0x89,0xd0,0xd5, 0xe0,0xa8,0xa8,0xb6,0x5b,0x48,0x59,0x6d,0x59,0x6f,0x73,0x5e,0x76,0x78,0x64,0x7e, 0x6b,0x67,0x8a,0x1e,0x21,0x29,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xb8,0xb9,0xbc, 0x83,0x8d,0xac,0x5e,0x53,0x79,0x63,0x53,0x77,0x52,0x5b,0x85,0x52,0x5a,0x84,0x52, 0x5d,0x86,0x52,0x5d,0x88,0x53,0x5e,0x88,0x54,0x5f,0x89,0x54,0x5f,0x89,0x55,0x60, 0x8a,0x56,0x62,0x8b,0x55,0x62,0x8a,0x54,0x5f,0x88,0x52,0x54,0x7e,0x60,0x53,0x77, 0x77,0x82,0xa3,0x43,0x44,0x46,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04, 0x03,0x03,0x04,0x03,0x03,0x04,0x04,0x05,0x06,0x04,0x04,0x05,0x05,0x05,0x06,0x05, 0x05,0x06,0x05,0x05,0x06,0x05,0x06,0x06,0x05,0x05,0x06,0x06,0x06,0x07,0x07,0x07, 0x08,0x08,0x07,0x09,0x09,0x0a,0x0c,0x0d,0x0c,0x10,0x10,0x0f,0x13,0x12,0x11,0x15, 0x15,0x13,0x19,0x19,0x17,0x1d,0x1c,0x19,0x20,0x1d,0x1a,0x21,0x1e,0x1c,0x24,0x21, 0x1e,0x28,0x25,0x23,0x2d,0x2e,0x2f,0x3d,0x44,0x47,0x55,0x4f,0x54,0x63,0x56,0x5b, 0x6c,0x52,0x58,0x66,0x4b,0x4f,0x5d,0x42,0x47,0x54,0x30,0x33,0x41,0x23,0x23,0x2e, 0x1a,0x1b,0x23,0x16,0x18,0x1e,0x24,0x21,0x28,0x31,0x2a,0x36,0x4f,0x4b,0x59,0x74, 0x7e,0x9b,0x5c,0x66,0x89,0x55,0x62,0x86,0x55,0x62,0x87,0x57,0x62,0x8a,0x59,0x64, 0x8b,0x59,0x64,0x8a,0x59,0x64,0x8b,0x58,0x63,0x8a,0x58,0x63,0x8a,0x57,0x62,0x88, 0x54,0x5e,0x85,0x5d,0x54,0x78,0x53,0x52,0x7a,0x27,0x2b,0x3a,0x10,0x12,0x15,0x10, 0x12,0x15,0x0e,0x0f,0x12,0x0c,0x0d,0x10,0x18,0x15,0x1a,0x68,0x67,0x78,0x65,0x6f, 0x91,0x40,0x40,0x5f,0x5c,0x52,0x77,0x5d,0x52,0x78,0x5e,0x53,0x78,0x5e,0x53,0x78, 0x60,0x53,0x77,0x60,0x53,0x77,0x5f,0x54,0x76,0x5f,0x54,0x77,0x5f,0x54,0x77,0x5f, 0x55,0x76,0x60,0x55,0x77,0x60,0x57,0x78,0x60,0x58,0x78,0x3c,0x38,0x47,0x1a,0x1b, 0x21,0x1a,0x1c,0x22,0x19,0x1a,0x1f,0x16,0x19,0x1e,0x15,0x16,0x1b,0x12,0x14,0x18, 0x0f,0x11,0x14,0x0e,0x0e,0x12,0x54,0x4e,0x57,0x88,0x78,0xaf,0x53,0x4b,0x6d,0x50, 0x49,0x6a,0x58,0x51,0x77,0x59,0x52,0x77,0x55,0x50,0x78,0x55,0x50,0x78,0x51,0x4f, 0x78,0x52,0x4f,0x7a,0x52,0x53,0x7b,0x52,0x54,0x7e,0x52,0x58,0x81,0x4e,0x58,0x7c, 0x4b,0x56,0x76,0x4f,0x58,0x7a,0x20,0x1c,0x21,0x2a,0x24,0x2a,0x2a,0x25,0x2c,0x39, 0x3a,0x48,0x7b,0x89,0xb0,0x65,0x6e,0x8e,0x4c,0x52,0x6d,0x50,0x57,0x71,0x64,0x6d, 0x8c,0x64,0x6e,0x8e,0x50,0x57,0x72,0x27,0x26,0x33,0x2e,0x2b,0x39,0x2a,0x27,0x35, 0x3d,0x37,0x48,0x4f,0x4a,0x5f,0x66,0x6e,0x8a,0x4c,0x4d,0x6e,0x4a,0x4c,0x6d,0x8f, 0x94,0xa4,0x3d,0x40,0x4d,0x24,0x23,0x2f,0x32,0x2d,0x39,0x34,0x2e,0x3a,0x35,0x2f, 0x3b,0x38,0x30,0x3d,0x2f,0x29,0x35,0x27,0x22,0x2c,0x29,0x23,0x2d,0x27,0x23,0x2e, 0x1d,0x1b,0x25,0x16,0x16,0x1e,0x13,0x13,0x1a,0x55,0x47,0x5c,0x6b,0x60,0x7b,0x61, 0x60,0x81,0x64,0x69,0x8a,0x4f,0x4e,0x75,0x5a,0x51,0x74,0x5c,0x51,0x74,0x5d,0x51, 0x73,0x5d,0x50,0x72,0x4b,0x40,0x5d,0x3a,0x2e,0x43,0x3f,0x39,0x56,0x6c,0x71,0x8a, 0x09,0x09,0x0c,0x0a,0x0a,0x0e,0x0d,0x0c,0x10,0x2e,0x24,0x2d,0x2b,0x21,0x29,0x51, 0x5a,0x82,0x50,0x4e,0x76,0x59,0x50,0x75,0x5d,0x51,0x74,0x5d,0x51,0x74,0x5e,0x52, 0x75,0x5e,0x51,0x75,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5f,0x52,0x76,0x5e,0x52,0x75, 0x5e,0x52,0x76,0x60,0x51,0x74,0x55,0x41,0x5b,0x43,0x34,0x4a,0x52,0x40,0x59,0x66, 0x5a,0x7f,0x29,0x2b,0x3b,0x1e,0x20,0x2b,0x20,0x22,0x2e,0x22,0x26,0x31,0x26,0x29, 0x34,0x26,0x2a,0x36,0x28,0x2c,0x37,0x27,0x2b,0x36,0x25,0x28,0x33,0x22,0x26,0x31, 0x21,0x24,0x2e,0x20,0x22,0x2d,0x1e,0x22,0x2b,0x1e,0x20,0x29,0x1e,0x20,0x2a,0x1b, 0x1e,0x26,0x1a,0x1d,0x25,0x19,0x1b,0x22,0x18,0x1a,0x22,0x16,0x18,0x20,0x16,0x18, 0x1f,0x14,0x16,0x1d,0x13,0x16,0x1b,0x12,0x14,0x1a,0x12,0x13,0x19,0x10,0x12,0x16, 0x0e,0x10,0x15,0x0e,0x0f,0x14,0x0c,0x0e,0x12,0x0c,0x0d,0x11,0x0b,0x0c,0x0f,0x0a, 0x0c,0x0f,0x0a,0x0a,0x0e,0x09,0x0a,0x0d,0x08,0x09,0x0c,0x07,0x08,0x0b,0x06,0x07, 0x0a,0x06,0x07,0x09,0x06,0x06,0x08,0x05,0x06,0x07,0x04,0x05,0x06,0x04,0x05,0x06, 0x03,0x04,0x05,0x03,0x04,0x05,0x03,0x03,0x04,0x03,0x03,0x04,0x78,0x7b,0x82,0x72, 0x7e,0x9f,0x52,0x4f,0x79,0x5e,0x53,0x76,0x5e,0x53,0x76,0x5f,0x53,0x77,0x5f,0x53, 0x77,0x5f,0x53,0x77,0x5f,0x52,0x76,0x5f,0x52,0x76,0x5f,0x52,0x76,0x5f,0x52,0x76, 0x5f,0x52,0x76,0x5f,0x52,0x76,0x60,0x53,0x77,0x60,0x53,0x77,0x6b,0x5c,0x83,0x35, 0x2e,0x3e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x17,0x17,0x23, 0x23,0x23,0x23,0x23,0x23,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x30,0x36,0x50,0x51,0x59,0x83,0x60,0x48,0x64,0x63,0x53,0x77,0x52, 0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x50,0x7b,0x52,0x52,0x7d,0x52,0x56,0x80,0x52,0x5c, 0x85,0x53,0x5f,0x88,0x5e,0x53,0x79,0x64,0x50,0x71,0x5c,0x54,0x7a,0x58,0x58,0x81, 0x84,0x8e,0xac,0xe0,0xe2,0xea,0xd1,0xd6,0xe1,0xd1,0xd5,0xe0,0xd0,0xd3,0xdf,0xcc, 0xd1,0xde,0xc8,0xcc,0xda,0xc2,0xc9,0xd7,0xb7,0xbe,0xcf,0xac,0xb4,0xc9,0xa3,0xaa, 0xc1,0xa0,0xa9,0xc0,0x9c,0xa5,0xbe,0x9b,0xa4,0xbc,0x99,0xa2,0xbb,0x99,0xa2,0xbb, 0x98,0xa1,0xba,0x96,0xa0,0xb9,0x94,0x9d,0xb8,0x8e,0x98,0xb4,0x89,0x93,0xb0,0x81, 0x8c,0xab,0x7b,0x86,0xa7,0x75,0x81,0xa2,0x69,0x74,0x99,0x52,0x53,0x7d,0x52,0x4f, 0x7a,0x55,0x60,0x8a,0x56,0x62,0x8a,0x44,0x4d,0x6e,0x49,0x42,0x61,0x5c,0x4e,0x70, 0x64,0x53,0x74,0x63,0x52,0x73,0x63,0x52,0x72,0x61,0x4b,0x66,0x5a,0x41,0x5c,0x62, 0x4b,0x66,0x5d,0x52,0x77,0x5a,0x51,0x77,0x5b,0x51,0x77,0x5c,0x51,0x77,0x5c,0x51, 0x77,0x5c,0x51,0x77,0x5c,0x51,0x76,0x5e,0x51,0x74,0x5e,0x51,0x74,0x5e,0x51,0x74, 0x5c,0x51,0x77,0x5e,0x51,0x75,0x5e,0x51,0x75,0x60,0x52,0x75,0x61,0x52,0x75,0x5f, 0x52,0x75,0x5f,0x51,0x75,0x60,0x52,0x75,0x62,0x52,0x74,0x62,0x52,0x74,0x62,0x52, 0x76,0x63,0x52,0x74,0x63,0x52,0x74,0x64,0x53,0x75,0x64,0x53,0x74,0x64,0x52,0x72, 0x64,0x50,0x6f,0x64,0x53,0x73,0x64,0x53,0x73,0x64,0x53,0x76,0x5e,0x53,0x79,0x62, 0x53,0x77,0x64,0x52,0x71,0x3e,0x3f,0x5a,0x32,0x2b,0x3f,0x63,0x53,0x77,0x5c,0x44, 0x5e,0x5c,0x52,0x79,0x57,0x50,0x79,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x53,0x7e, 0x52,0x57,0x83,0x52,0x5d,0x88,0x54,0x5f,0x89,0x57,0x63,0x8c,0x64,0x50,0x71,0x52, 0x52,0x7d,0xc2,0xc8,0xd7,0xb6,0xb9,0xc7,0x59,0x46,0x57,0x6d,0x59,0x6f,0x78,0x65, 0x7f,0x78,0x69,0x85,0x6b,0x67,0x8a,0x29,0x2d,0x39,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x63,0x63,0x63,0xa0,0xa9,0xc0,0x55,0x60,0x8a,0x60,0x48,0x65,0x52,0x55,0x81, 0x52,0x57,0x83,0x52,0x5d,0x86,0x52,0x5d,0x88,0x53,0x5e,0x88,0x53,0x5f,0x89,0x53, 0x5f,0x89,0x54,0x5f,0x89,0x55,0x60,0x8a,0x55,0x62,0x8b,0x55,0x62,0x8a,0x55,0x62, 0x8a,0x64,0x53,0x75,0x57,0x63,0x8b,0x7f,0x84,0x91,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02, 0x03,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x04,0x04,0x05, 0x04,0x04,0x05,0x05,0x05,0x06,0x04,0x05,0x06,0x05,0x05,0x06,0x04,0x05,0x06,0x05, 0x06,0x06,0x06,0x06,0x07,0x06,0x06,0x07,0x06,0x06,0x08,0x07,0x07,0x09,0x09,0x09, 0x0b,0x0c,0x0b,0x0f,0x14,0x12,0x17,0x1b,0x19,0x1f,0x1c,0x1a,0x20,0x1c,0x1a,0x20, 0x1d,0x1b,0x21,0x1d,0x1b,0x22,0x1f,0x1c,0x25,0x23,0x21,0x2b,0x2d,0x2d,0x38,0x37, 0x3a,0x4a,0x43,0x47,0x55,0x4e,0x52,0x5e,0x53,0x58,0x65,0x4f,0x54,0x62,0x42,0x46, 0x55,0x34,0x37,0x46,0x3b,0x3e,0x4a,0x39,0x3b,0x42,0x3b,0x3a,0x41,0x45,0x41,0x4a, 0x5e,0x5d,0x69,0x7f,0x87,0xa2,0x68,0x72,0x91,0x58,0x63,0x86,0x55,0x61,0x86,0x55, 0x61,0x88,0x58,0x63,0x89,0x57,0x63,0x8a,0x58,0x64,0x8a,0x58,0x64,0x8a,0x56,0x61, 0x87,0x56,0x61,0x87,0x54,0x5e,0x85,0x5d,0x55,0x77,0x53,0x51,0x79,0x27,0x2c,0x3b, 0x11,0x12,0x16,0x11,0x12,0x16,0x10,0x11,0x14,0x0e,0x0e,0x11,0x17,0x15,0x1a,0x66, 0x63,0x73,0x66,0x70,0x92,0x44,0x46,0x68,0x5c,0x52,0x76,0x5d,0x53,0x77,0x5e,0x53, 0x78,0x5e,0x53,0x78,0x5f,0x53,0x76,0x5f,0x54,0x76,0x5f,0x54,0x76,0x5f,0x53,0x77, 0x5f,0x54,0x77,0x5f,0x55,0x77,0x60,0x55,0x78,0x61,0x57,0x78,0x60,0x59,0x78,0x3d, 0x39,0x49,0x1b,0x1d,0x22,0x1a,0x1d,0x22,0x19,0x1a,0x20,0x18,0x1a,0x1e,0x16,0x17, 0x1b,0x13,0x14,0x18,0x0f,0x11,0x14,0x0e,0x0e,0x12,0x45,0x3f,0x48,0x8c,0x7f,0xb5, 0x56,0x4e,0x6f,0x51,0x49,0x69,0x59,0x51,0x77,0x56,0x4f,0x77,0x55,0x50,0x78,0x55, 0x50,0x78,0x51,0x4f,0x78,0x52,0x4f,0x79,0x52,0x50,0x7a,0x52,0x54,0x7e,0x52,0x57, 0x80,0x4e,0x57,0x7c,0x4b,0x54,0x75,0x54,0x5f,0x82,0x20,0x1c,0x21,0x28,0x24,0x2a, 0x2e,0x28,0x2f,0x29,0x26,0x2e,0x6f,0x7b,0x9d,0x67,0x72,0x94,0x3c,0x42,0x58,0x3d, 0x42,0x58,0x3d,0x43,0x59,0x4d,0x55,0x6f,0x62,0x6d,0x8d,0x20,0x22,0x2e,0x23,0x23, 0x2f,0x21,0x22,0x2d,0x47,0x40,0x52,0x50,0x49,0x5d,0x65,0x6f,0x8b,0x4c,0x4d,0x70, 0x53,0x4f,0x6e,0x8b,0x8f,0x9e,0x8b,0x91,0xa1,0x43,0x43,0x54,0x31,0x2d,0x3a,0x33, 0x2d,0x3a,0x36,0x30,0x3d,0x39,0x32,0x40,0x37,0x30,0x3d,0x33,0x2d,0x39,0x2a,0x25, 0x2f,0x29,0x23,0x2d,0x28,0x23,0x2e,0x1e,0x1c,0x26,0x15,0x16,0x1d,0x29,0x25,0x2f, 0x69,0x5a,0x73,0x5f,0x5f,0x81,0x6e,0x62,0x7b,0x53,0x5c,0x82,0x52,0x4e,0x74,0x5a, 0x51,0x75,0x5c,0x51,0x74,0x5d,0x50,0x73,0x50,0x43,0x5e,0x3c,0x30,0x47,0x3f,0x38, 0x54,0x69,0x6e,0x84,0x09,0x09,0x0c,0x0a,0x0a,0x0e,0x0d,0x0d,0x12,0x2a,0x22,0x2a, 0x27,0x1f,0x27,0x50,0x53,0x7c,0x50,0x4d,0x75,0x5a,0x51,0x74,0x5d,0x51,0x74,0x5d, 0x51,0x74,0x5e,0x52,0x75,0x5e,0x51,0x75,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5f,0x52, 0x76,0x5e,0x52,0x76,0x5e,0x52,0x76,0x60,0x51,0x75,0x58,0x44,0x5d,0x46,0x36,0x4d, 0x51,0x41,0x59,0x64,0x5b,0x81,0x2a,0x2c,0x3c,0x21,0x23,0x2e,0x25,0x29,0x34,0x28, 0x2c,0x38,0x2b,0x2f,0x3b,0x2e,0x32,0x3e,0x2e,0x32,0x3e,0x2c,0x30,0x3c,0x2a,0x2e, 0x3a,0x28,0x2c,0x37,0x26,0x2a,0x34,0x24,0x26,0x31,0x23,0x26,0x31,0x22,0x25,0x2e, 0x1f,0x22,0x2c,0x1e,0x21,0x2a,0x1c,0x1f,0x28,0x1c,0x1e,0x27,0x1a,0x1c,0x24,0x18, 0x1a,0x22,0x17,0x1a,0x21,0x16,0x18,0x1e,0x15,0x16,0x1d,0x13,0x15,0x1b,0x12,0x13, 0x19,0x11,0x12,0x17,0x10,0x12,0x16,0x10,0x12,0x16,0x0e,0x10,0x15,0x0c,0x0e,0x12, 0x0b,0x0c,0x10,0x0a,0x0b,0x0f,0x0a,0x0b,0x0e,0x09,0x0a,0x0d,0x09,0x0a,0x0d,0x07, 0x08,0x0b,0x07,0x08,0x0a,0x06,0x07,0x0a,0x06,0x06,0x09,0x06,0x06,0x08,0x05,0x06, 0x07,0x04,0x05,0x06,0x04,0x05,0x06,0x04,0x04,0x06,0x03,0x03,0x04,0x03,0x03,0x04, 0x42,0x43,0x48,0x81,0x8b,0xaa,0x51,0x4f,0x7a,0x5e,0x53,0x76,0x5e,0x53,0x76,0x5e, 0x53,0x76,0x5f,0x53,0x77,0x5f,0x53,0x77,0x5f,0x52,0x76,0x5f,0x52,0x76,0x5f,0x52, 0x76,0x5f,0x52,0x76,0x5f,0x52,0x76,0x5f,0x52,0x76,0x5f,0x52,0x76,0x5f,0x52,0x76, 0x64,0x56,0x7c,0x5c,0x4f,0x72,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x11,0x13,0x1b,0x52,0x5d,0x87,0x64,0x53,0x74,0x62,0x4a,0x66, 0x53,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x50,0x7b,0x52,0x52,0x7d,0x52, 0x56,0x80,0x52,0x5d,0x85,0x54,0x5f,0x88,0x53,0x4f,0x7a,0x65,0x53,0x72,0x5c,0x54, 0x7a,0x58,0x58,0x82,0xa3,0xab,0xc2,0xde,0xe1,0xe9,0xd3,0xd8,0xe2,0xd2,0xd7,0xe1, 0xd0,0xd3,0xe0,0xcb,0xd1,0xdd,0xc7,0xcb,0xd9,0xc1,0xc7,0xd6,0xb7,0xbc,0xcf,0xab, 0xb3,0xc8,0xa3,0xab,0xc2,0xa0,0xa8,0xc0,0x9d,0xa7,0xbf,0x9b,0xa4,0xbc,0x9a,0xa3, 0xbc,0x98,0xa1,0xba,0x99,0xa2,0xbb,0x95,0x9f,0xb9,0x93,0x9c,0xb7,0x8e,0x99,0xb4, 0x88,0x92,0xb0,0x83,0x8d,0xac,0x7b,0x86,0xa7,0x74,0x80,0xa2,0x72,0x7d,0xa0,0x6b, 0x76,0x9b,0x52,0x5d,0x88,0x5d,0x52,0x79,0x57,0x50,0x79,0x64,0x4c,0x6a,0x50,0x39, 0x52,0x5b,0x43,0x5d,0x57,0x40,0x5a,0x51,0x3b,0x51,0x40,0x2b,0x3e,0x56,0x3e,0x57, 0x62,0x52,0x72,0x5a,0x52,0x77,0x5b,0x51,0x77,0x5b,0x51,0x77,0x5a,0x51,0x77,0x5b, 0x51,0x77,0x5c,0x52,0x77,0x5c,0x51,0x77,0x5c,0x51,0x77,0x5c,0x51,0x77,0x5e,0x51, 0x75,0x5e,0x51,0x75,0x5c,0x51,0x76,0x5e,0x52,0x75,0x5e,0x52,0x75,0x60,0x52,0x75, 0x61,0x52,0x75,0x61,0x52,0x75,0x5e,0x52,0x75,0x60,0x52,0x75,0x61,0x52,0x75,0x62, 0x52,0x76,0x62,0x52,0x76,0x63,0x52,0x75,0x63,0x52,0x74,0x64,0x53,0x75,0x64,0x53, 0x75,0x64,0x52,0x72,0x63,0x4b,0x67,0x64,0x4e,0x6c,0x64,0x50,0x6f,0x64,0x53,0x74, 0x64,0x53,0x76,0x64,0x53,0x76,0x5a,0x41,0x5c,0x52,0x4e,0x77,0x4e,0x43,0x5f,0x64, 0x50,0x6f,0x57,0x3f,0x58,0x5c,0x52,0x79,0x5a,0x52,0x79,0x53,0x4f,0x7a,0x52,0x4f, 0x7a,0x52,0x52,0x7c,0x52,0x55,0x80,0x52,0x5d,0x86,0x53,0x5f,0x89,0x56,0x63,0x8b, 0x62,0x53,0x77,0x57,0x50,0x79,0xbe,0xc3,0xd3,0xc7,0xcb,0xd9,0x5f,0x4c,0x5e,0x72, 0x5d,0x75,0x78,0x69,0x88,0x74,0x69,0x89,0x68,0x66,0x8c,0x35,0x39,0x48,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x0c,0x0c,0x0c,0xbf,0xc3,0xd1,0x64,0x71,0x96,0x60,0x48, 0x64,0x52,0x4f,0x7a,0x52,0x5c,0x86,0x52,0x5a,0x84,0x52,0x5d,0x86,0x52,0x5d,0x88, 0x53,0x5e,0x88,0x53,0x5e,0x88,0x54,0x5f,0x89,0x55,0x60,0x8a,0x54,0x5f,0x89,0x54, 0x60,0x8a,0x55,0x60,0x8a,0x52,0x4f,0x7a,0x57,0x50,0x79,0x7e,0x87,0xa7,0x25,0x25, 0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x03,0x03,0x04,0x03,0x03, 0x04,0x04,0x05,0x06,0x04,0x04,0x05,0x04,0x04,0x05,0x04,0x05,0x06,0x04,0x04,0x05, 0x04,0x05,0x06,0x04,0x05,0x06,0x05,0x06,0x06,0x05,0x05,0x06,0x06,0x06,0x07,0x06, 0x07,0x08,0x06,0x06,0x08,0x08,0x08,0x0a,0x0d,0x0d,0x0f,0x16,0x15,0x1a,0x1b,0x19, 0x1f,0x1c,0x1a,0x20,0x1c,0x1a,0x20,0x1d,0x1b,0x21,0x1d,0x1b,0x21,0x1e,0x1c,0x23, 0x22,0x20,0x29,0x26,0x25,0x31,0x2c,0x2e,0x3a,0x3a,0x3e,0x48,0x4a,0x4e,0x5b,0x51, 0x57,0x67,0x4f,0x53,0x63,0x47,0x4c,0x5c,0x56,0x5b,0x69,0x5e,0x61,0x6b,0x55,0x55, 0x60,0x64,0x61,0x6b,0x78,0x76,0x81,0x8c,0x94,0xac,0x71,0x7b,0x98,0x59,0x65,0x86, 0x53,0x5e,0x82,0x55,0x60,0x86,0x57,0x63,0x88,0x58,0x63,0x89,0x58,0x63,0x89,0x57, 0x62,0x89,0x56,0x62,0x87,0x55,0x60,0x86,0x55,0x5f,0x85,0x5c,0x54,0x77,0x53,0x51, 0x79,0x29,0x2e,0x3e,0x12,0x13,0x17,0x12,0x12,0x16,0x12,0x13,0x16,0x0e,0x0f,0x12, 0x14,0x12,0x16,0x5e,0x58,0x67,0x66,0x71,0x93,0x44,0x4b,0x6d,0x5a,0x4f,0x75,0x5d, 0x53,0x77,0x5d,0x53,0x78,0x5e,0x54,0x78,0x5f,0x53,0x76,0x5f,0x54,0x76,0x5f,0x54, 0x76,0x60,0x53,0x77,0x5f,0x54,0x77,0x60,0x54,0x77,0x60,0x55,0x77,0x61,0x57,0x79, 0x61,0x59,0x79,0x41,0x3e,0x4e,0x1b,0x1d,0x22,0x1c,0x1e,0x23,0x19,0x1b,0x20,0x17, 0x19,0x1e,0x16,0x17,0x1c,0x12,0x14,0x18,0x11,0x12,0x15,0x0d,0x0e,0x11,0x33,0x31, 0x36,0x95,0x84,0xb9,0x58,0x50,0x72,0x4e,0x47,0x68,0x58,0x51,0x77,0x59,0x51,0x77, 0x55,0x50,0x78,0x54,0x50,0x78,0x51,0x4f,0x78,0x52,0x4f,0x79,0x52,0x50,0x7a,0x52, 0x52,0x7c,0x53,0x58,0x80,0x4d,0x57,0x7d,0x49,0x52,0x74,0x57,0x61,0x88,0x21,0x1c, 0x21,0x27,0x21,0x27,0x2d,0x27,0x2f,0x2c,0x26,0x2e,0x41,0x44,0x56,0x77,0x82,0xa6, 0x40,0x43,0x5b,0x3c,0x40,0x57,0x3c,0x40,0x58,0x3d,0x41,0x59,0x46,0x4c,0x65,0x20, 0x23,0x2d,0x1f,0x22,0x2c,0x1f,0x22,0x2b,0x4a,0x44,0x55,0x52,0x4a,0x5d,0x5c,0x65, 0x82,0x4e,0x4f,0x72,0x54,0x51,0x70,0x42,0x41,0x52,0x9f,0xa1,0xac,0x79,0x7c,0x92, 0x4d,0x4c,0x60,0x2e,0x2a,0x37,0x30,0x2a,0x37,0x32,0x2c,0x39,0x34,0x2e,0x3a,0x36, 0x30,0x3d,0x30,0x2a,0x36,0x20,0x1c,0x24,0x2b,0x26,0x31,0x2a,0x25,0x2f,0x19,0x19, 0x22,0x18,0x17,0x1f,0x54,0x47,0x5c,0x67,0x60,0x80,0x68,0x60,0x80,0x67,0x65,0x85, 0x4f,0x53,0x7c,0x56,0x50,0x74,0x5c,0x51,0x74,0x5b,0x50,0x73,0x53,0x43,0x62,0x42, 0x33,0x4e,0x44,0x39,0x56,0x55,0x5a,0x72,0x09,0x09,0x0c,0x0a,0x0a,0x0e,0x12,0x11, 0x16,0x28,0x21,0x29,0x25,0x1e,0x25,0x50,0x4e,0x76,0x56,0x4f,0x74,0x5b,0x50,0x73, 0x5d,0x51,0x73,0x5d,0x51,0x74,0x5e,0x51,0x75,0x5e,0x51,0x75,0x5e,0x52,0x75,0x5e, 0x52,0x75,0x5f,0x52,0x76,0x5e,0x52,0x76,0x5e,0x52,0x76,0x60,0x52,0x76,0x5a,0x45, 0x5e,0x47,0x37,0x4e,0x53,0x43,0x5b,0x65,0x5e,0x83,0x2d,0x31,0x41,0x26,0x2a,0x35, 0x2d,0x31,0x3d,0x2e,0x33,0x3f,0x32,0x36,0x42,0x32,0x36,0x43,0x32,0x36,0x43,0x2f, 0x34,0x40,0x2e,0x32,0x3e,0x2c,0x2f,0x3a,0x2a,0x2e,0x39,0x28,0x2c,0x37,0x28,0x2c, 0x36,0x27,0x2b,0x36,0x25,0x27,0x32,0x22,0x25,0x2e,0x1e,0x21,0x2a,0x1d,0x1f,0x28, 0x1a,0x1d,0x25,0x19,0x1b,0x23,0x19,0x1a,0x22,0x17,0x1a,0x21,0x16,0x18,0x1e,0x14, 0x16,0x1d,0x13,0x15,0x1b,0x12,0x14,0x1a,0x11,0x12,0x18,0x10,0x12,0x16,0x0f,0x10, 0x16,0x0e,0x0f,0x14,0x0d,0x0e,0x12,0x0b,0x0c,0x10,0x0a,0x0c,0x0f,0x0a,0x0a,0x0e, 0x09,0x0a,0x0d,0x09,0x0a,0x0d,0x07,0x08,0x0a,0x06,0x07,0x0a,0x06,0x07,0x0a,0x06, 0x06,0x09,0x05,0x06,0x07,0x05,0x05,0x06,0x04,0x05,0x06,0x04,0x05,0x06,0x03,0x04, 0x05,0x03,0x03,0x05,0x1b,0x1c,0x1d,0x8f,0x98,0xb3,0x51,0x59,0x82,0x5e,0x53,0x76, 0x5e,0x53,0x76,0x5e,0x53,0x76,0x5e,0x53,0x76,0x5f,0x53,0x77,0x5f,0x53,0x77,0x5f, 0x53,0x77,0x5f,0x52,0x76,0x5f,0x52,0x76,0x5f,0x52,0x76,0x5f,0x52,0x76,0x5f,0x52, 0x76,0x5f,0x52,0x76,0x60,0x53,0x78,0x7f,0x6e,0x9e,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x37,0x3e,0x54,0x52,0x5c,0x85,0x60,0x48, 0x65,0x5d,0x52,0x79,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x50,0x7b, 0x52,0x52,0x7c,0x52,0x5a,0x83,0x53,0x5e,0x87,0x54,0x60,0x89,0x52,0x4f,0x7a,0x65, 0x54,0x73,0x5a,0x54,0x7b,0x5b,0x5d,0x85,0xc4,0xca,0xd8,0xdf,0xe1,0xe9,0xd5,0xd8, 0xe2,0xd2,0xd6,0xe1,0xd1,0xd5,0xe0,0xcb,0xd0,0xdd,0xc7,0xcb,0xd9,0xc0,0xc6,0xd6, 0xb5,0xbc,0xcf,0xab,0xb2,0xc7,0xa5,0xad,0xc4,0xa1,0xaa,0xc0,0x9d,0xa7,0xbf,0x9a, 0xa3,0xbc,0x9b,0xa4,0xbc,0x98,0xa1,0xba,0x99,0xa2,0xbb,0x95,0x9f,0xb9,0x93,0x9c, 0xb8,0x8c,0x96,0xb3,0x88,0x92,0xb0,0x82,0x8c,0xab,0x7a,0x84,0xa5,0x73,0x7e,0xa1, 0x71,0x7c,0xa0,0x6c,0x77,0x9c,0x67,0x73,0x99,0x52,0x5d,0x88,0x52,0x5c,0x86,0x64, 0x53,0x75,0x53,0x3c,0x54,0x4c,0x35,0x4b,0x53,0x3c,0x54,0x54,0x3c,0x54,0x5b,0x44, 0x5e,0x5f,0x52,0x76,0x5b,0x51,0x77,0x5a,0x51,0x77,0x5a,0x51,0x77,0x5b,0x51,0x77, 0x5b,0x51,0x77,0x5c,0x52,0x77,0x5c,0x52,0x77,0x5c,0x52,0x77,0x5c,0x52,0x77,0x5c, 0x52,0x77,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5f,0x52, 0x75,0x5f,0x52,0x75,0x5f,0x51,0x75,0x5d,0x52,0x77,0x61,0x52,0x75,0x5e,0x52,0x75, 0x60,0x52,0x75,0x63,0x52,0x75,0x63,0x52,0x75,0x63,0x52,0x75,0x63,0x52,0x75,0x64, 0x53,0x75,0x64,0x53,0x75,0x64,0x50,0x6f,0x64,0x52,0x73,0x64,0x53,0x75,0x64,0x4e, 0x6d,0x64,0x52,0x72,0x64,0x53,0x75,0x64,0x53,0x76,0x5b,0x43,0x5d,0x62,0x4a,0x66, 0x5c,0x4c,0x6a,0x64,0x53,0x74,0x63,0x4b,0x67,0x5b,0x52,0x79,0x5a,0x52,0x79,0x54, 0x50,0x79,0x52,0x4f,0x7a,0x52,0x50,0x7c,0x52,0x55,0x80,0x52,0x5d,0x86,0x54,0x5f, 0x89,0x56,0x62,0x8b,0x53,0x50,0x7a,0x64,0x53,0x74,0xad,0xb4,0xc9,0xc6,0xca,0xd9, 0x6d,0x5d,0x6e,0x75,0x60,0x79,0x75,0x69,0x89,0x6f,0x68,0x8a,0x68,0x67,0x8c,0x41, 0x46,0x59,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x91,0x92,0x96,0x73, 0x7e,0xa1,0x5f,0x53,0x77,0x64,0x4e,0x6c,0x52,0x57,0x83,0x52,0x57,0x83,0x52,0x5b, 0x85,0x52,0x5d,0x88,0x53,0x5d,0x88,0x53,0x5e,0x88,0x54,0x5f,0x89,0x55,0x60,0x8a, 0x56,0x62,0x8b,0x55,0x60,0x8a,0x54,0x60,0x8a,0x53,0x5e,0x87,0x64,0x53,0x75,0x60, 0x6d,0x92,0x85,0x86,0x89,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x03,0x03, 0x03,0x04,0x02,0x02,0x03,0x04,0x04,0x05,0x04,0x04,0x05,0x03,0x03,0x04,0x04,0x04, 0x05,0x04,0x04,0x05,0x04,0x05,0x06,0x04,0x05,0x06,0x04,0x05,0x06,0x05,0x05,0x06, 0x06,0x06,0x07,0x06,0x06,0x07,0x06,0x06,0x08,0x06,0x07,0x08,0x0a,0x0a,0x0d,0x10, 0x0f,0x13,0x15,0x14,0x19,0x1a,0x18,0x1e,0x1d,0x1b,0x21,0x1c,0x1a,0x20,0x1d,0x1b, 0x21,0x1f,0x1c,0x23,0x21,0x1e,0x26,0x23,0x21,0x29,0x25,0x22,0x2c,0x27,0x27,0x33, 0x31,0x32,0x42,0x3f,0x3d,0x50,0x40,0x3e,0x50,0x40,0x42,0x53,0x58,0x5b,0x6b,0x67, 0x6b,0x77,0x5e,0x61,0x6c,0x69,0x68,0x73,0x80,0x7f,0x8b,0x8f,0x96,0xab,0x76,0x7e, 0x99,0x64,0x6e,0x8d,0x59,0x63,0x85,0x59,0x64,0x86,0x5d,0x69,0x8b,0x5e,0x69,0x8d, 0x5b,0x66,0x8a,0x58,0x63,0x88,0x57,0x61,0x86,0x55,0x5f,0x85,0x53,0x5d,0x83,0x5b, 0x54,0x77,0x53,0x52,0x79,0x25,0x29,0x37,0x13,0x15,0x19,0x14,0x16,0x1a,0x12,0x14, 0x18,0x0e,0x10,0x13,0x0f,0x10,0x13,0x5d,0x54,0x63,0x68,0x73,0x95,0x46,0x4f,0x6f, 0x59,0x50,0x75,0x5c,0x53,0x78,0x5d,0x53,0x78,0x5e,0x54,0x78,0x5f,0x54,0x76,0x5f, 0x54,0x76,0x5f,0x54,0x76,0x60,0x53,0x77,0x5f,0x54,0x77,0x60,0x54,0x77,0x60,0x55, 0x77,0x60,0x57,0x77,0x61,0x59,0x79,0x43,0x3f,0x51,0x1b,0x1e,0x23,0x1b,0x1d,0x22, 0x1a,0x1c,0x22,0x17,0x1a,0x1e,0x15,0x16,0x1a,0x13,0x14,0x18,0x11,0x12,0x16,0x0e, 0x0e,0x12,0x22,0x20,0x25,0x9b,0x88,0xc1,0x5e,0x54,0x79,0x51,0x48,0x68,0x5a,0x52, 0x77,0x59,0x51,0x77,0x56,0x50,0x78,0x54,0x50,0x77,0x51,0x4f,0x79,0x52,0x4f,0x7a, 0x52,0x50,0x7a,0x52,0x53,0x7c,0x52,0x58,0x81,0x4e,0x55,0x7a,0x49,0x54,0x76,0x5a, 0x65,0x8d,0x22,0x1e,0x24,0x27,0x21,0x27,0x2c,0x26,0x2d,0x2d,0x27,0x2f,0x29,0x26, 0x2e,0x7a,0x86,0xab,0x62,0x6b,0x8b,0x3b,0x3f,0x56,0x3a,0x3f,0x56,0x3c,0x40,0x58, 0x3c,0x40,0x57,0x34,0x39,0x4c,0x1e,0x22,0x2b,0x1f,0x22,0x2c,0x4b,0x45,0x57,0x53, 0x4b,0x5e,0x5c,0x5f,0x79,0x4f,0x51,0x73,0x56,0x52,0x72,0x3b,0x39,0x4b,0x3f,0x39, 0x49,0x85,0x89,0x9a,0x68,0x6d,0x89,0x48,0x4a,0x61,0x26,0x26,0x33,0x23,0x22,0x2e, 0x26,0x24,0x30,0x28,0x25,0x31,0x24,0x22,0x2d,0x1a,0x18,0x20,0x24,0x20,0x29,0x2a, 0x25,0x30,0x22,0x1e,0x29,0x17,0x17,0x1f,0x32,0x2c,0x39,0x69,0x5b,0x74,0x5f,0x5e, 0x81,0x6d,0x60,0x79,0x59,0x5f,0x82,0x4f,0x4d,0x74,0x5b,0x51,0x72,0x5c,0x51,0x73, 0x55,0x47,0x65,0x4a,0x3b,0x54,0x48,0x3d,0x58,0x53,0x56,0x6f,0x11,0x12,0x16,0x10, 0x12,0x16,0x13,0x13,0x19,0x27,0x1f,0x28,0x24,0x1d,0x25,0x4f,0x4d,0x74,0x59,0x51, 0x73,0x5b,0x51,0x72,0x5c,0x51,0x73,0x5d,0x51,0x74,0x5e,0x51,0x75,0x5f,0x52,0x75, 0x5f,0x53,0x76,0x5e,0x53,0x76,0x5f,0x52,0x76,0x5e,0x53,0x76,0x5e,0x52,0x76,0x5e, 0x52,0x75,0x5a,0x46,0x61,0x48,0x3a,0x50,0x53,0x45,0x5d,0x68,0x60,0x83,0x30,0x34, 0x42,0x2e,0x32,0x3e,0x34,0x38,0x44,0x35,0x39,0x46,0x34,0x38,0x45,0x36,0x3a,0x46, 0x34,0x38,0x45,0x32,0x36,0x42,0x31,0x35,0x42,0x30,0x33,0x40,0x2e,0x32,0x3e,0x2e, 0x31,0x3d,0x2d,0x31,0x3b,0x2c,0x30,0x3a,0x29,0x2c,0x37,0x26,0x29,0x32,0x22,0x24, 0x2e,0x1e,0x21,0x2a,0x1d,0x1f,0x28,0x1c,0x1e,0x26,0x1b,0x1e,0x26,0x1a,0x1c,0x23, 0x17,0x1a,0x21,0x16,0x17,0x1e,0x15,0x17,0x1e,0x13,0x15,0x1b,0x13,0x15,0x1a,0x11, 0x12,0x18,0x12,0x12,0x17,0x10,0x12,0x16,0x0e,0x0f,0x13,0x0c,0x0e,0x12,0x0c,0x0d, 0x11,0x0a,0x0c,0x0f,0x0a,0x0b,0x0e,0x09,0x0a,0x0d,0x09,0x0a,0x0d,0x07,0x08,0x0b, 0x06,0x07,0x0a,0x06,0x06,0x09,0x06,0x06,0x08,0x05,0x06,0x07,0x04,0x05,0x06,0x04, 0x05,0x06,0x04,0x05,0x06,0x03,0x03,0x05,0x05,0x05,0x06,0x96,0x9e,0xb7,0x53,0x5f, 0x88,0x5c,0x52,0x78,0x5e,0x53,0x76,0x5e,0x53,0x76,0x5e,0x53,0x76,0x5e,0x53,0x76, 0x5f,0x53,0x77,0x5f,0x53,0x77,0x5f,0x53,0x77,0x5f,0x52,0x76,0x5f,0x52,0x76,0x5f, 0x52,0x76,0x5f,0x52,0x76,0x5f,0x52,0x76,0x5f,0x52,0x76,0x7a,0x69,0x98,0x06,0x06, 0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0x5a,0x74,0x52, 0x50,0x7c,0x64,0x53,0x74,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f, 0x7b,0x52,0x50,0x7b,0x52,0x54,0x7e,0x52,0x58,0x82,0x53,0x5e,0x87,0x56,0x62,0x8a, 0x52,0x52,0x7d,0x65,0x54,0x74,0x58,0x54,0x7b,0x5c,0x60,0x89,0xd5,0xd8,0xe3,0xdb, 0xde,0xe7,0xd3,0xd7,0xe2,0xd3,0xd7,0xe1,0xd0,0xd3,0xdf,0xcb,0xd0,0xdd,0xc3,0xc9, 0xd8,0xbf,0xc4,0xd5,0xb5,0xbc,0xcf,0xaa,0xb2,0xc7,0xa4,0xad,0xc3,0xa0,0xa8,0xbf, 0x9c,0xa5,0xbe,0x9b,0xa3,0xbc,0x99,0xa1,0xbb,0x98,0xa1,0xba,0x98,0xa1,0xba,0x95, 0x9f,0xb9,0x91,0x9a,0xb5,0x8c,0x96,0xb3,0x86,0x91,0xaf,0x82,0x8c,0xab,0x7a,0x85, 0xa7,0x75,0x81,0xa2,0x72,0x7d,0xa1,0x6d,0x79,0x9c,0x66,0x73,0x98,0x62,0x6e,0x94, 0x5e,0x6a,0x91,0x52,0x4f,0x7a,0x64,0x52,0x71,0x64,0x4c,0x69,0x64,0x53,0x75,0x64, 0x53,0x76,0x64,0x53,0x75,0x63,0x51,0x72,0x5b,0x51,0x78,0x59,0x51,0x77,0x5a,0x51, 0x77,0x5b,0x51,0x77,0x5b,0x51,0x77,0x5c,0x51,0x77,0x5d,0x52,0x77,0x5c,0x52,0x77, 0x5c,0x52,0x77,0x5c,0x52,0x77,0x5c,0x52,0x77,0x5e,0x52,0x75,0x5f,0x52,0x75,0x5f, 0x51,0x75,0x5f,0x51,0x75,0x5f,0x51,0x75,0x5e,0x52,0x75,0x5f,0x52,0x75,0x5e,0x52, 0x75,0x5e,0x52,0x75,0x61,0x52,0x76,0x61,0x52,0x76,0x62,0x52,0x76,0x63,0x52,0x75, 0x63,0x52,0x75,0x64,0x53,0x75,0x64,0x4f,0x6e,0x64,0x4e,0x6d,0x5b,0x4c,0x6b,0x60, 0x50,0x71,0x64,0x50,0x71,0x62,0x4a,0x65,0x64,0x53,0x75,0x64,0x53,0x75,0x60,0x48, 0x65,0x54,0x3d,0x55,0x62,0x4b,0x66,0x5a,0x41,0x5c,0x62,0x4a,0x66,0x5c,0x52,0x79, 0x58,0x50,0x79,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x50,0x7c,0x52,0x53,0x7e,0x52, 0x5d,0x86,0x54,0x5f,0x89,0x55,0x60,0x8a,0x52,0x52,0x7c,0x64,0x4e,0x6c,0x96,0xa0, 0xba,0xc6,0xca,0xd9,0x7b,0x6d,0x7e,0x77,0x62,0x7b,0x6e,0x67,0x8a,0x68,0x66,0x8b, 0x68,0x70,0x95,0x50,0x57,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x41,0x41,0x41,0x8c,0x96,0xb3,0x54,0x60,0x8a,0x5d,0x45,0x5f,0x52,0x53,0x7e,0x52, 0x57,0x82,0x52,0x57,0x83,0x52,0x5b,0x85,0x52,0x5d,0x88,0x53,0x5e,0x89,0x53,0x5f, 0x89,0x54,0x5f,0x89,0x54,0x5f,0x89,0x54,0x60,0x8a,0x55,0x60,0x8a,0x55,0x60,0x8a, 0x53,0x4f,0x7a,0x52,0x52,0x7d,0x99,0xa1,0xb7,0x10,0x10,0x10,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x03,0x03,0x04,0x03,0x03,0x04,0x03, 0x04,0x05,0x03,0x04,0x04,0x04,0x04,0x05,0x04,0x04,0x05,0x04,0x05,0x06,0x04,0x05, 0x06,0x05,0x05,0x06,0x06,0x06,0x06,0x06,0x06,0x07,0x06,0x06,0x07,0x06,0x06,0x08, 0x08,0x08,0x0a,0x0b,0x0b,0x0e,0x10,0x0f,0x13,0x15,0x13,0x18,0x1a,0x17,0x1d,0x1d, 0x1a,0x20,0x1e,0x1b,0x22,0x21,0x1e,0x25,0x24,0x20,0x29,0x24,0x21,0x29,0x24,0x20, 0x2a,0x24,0x21,0x2b,0x30,0x2a,0x36,0x3e,0x36,0x46,0x42,0x3b,0x4b,0x42,0x3e,0x51, 0x45,0x45,0x5a,0x4f,0x53,0x65,0x52,0x55,0x65,0x60,0x5f,0x6e,0x6a,0x6a,0x77,0x7d, 0x84,0x9b,0x6b,0x73,0x8d,0x67,0x70,0x8c,0x64,0x6e,0x8b,0x68,0x72,0x91,0x6f,0x79, 0x96,0x72,0x7c,0x9a,0x73,0x7c,0x9a,0x6a,0x74,0x94,0x60,0x6a,0x8d,0x59,0x62,0x87, 0x54,0x5e,0x82,0x5c,0x54,0x77,0x54,0x56,0x7c,0x26,0x2a,0x39,0x16,0x17,0x1c,0x15, 0x16,0x1b,0x14,0x16,0x1a,0x0f,0x11,0x13,0x0d,0x0e,0x10,0x5c,0x4f,0x60,0x68,0x73, 0x96,0x44,0x4c,0x6f,0x56,0x4e,0x73,0x5d,0x53,0x78,0x5d,0x53,0x78,0x5d,0x53,0x78, 0x5f,0x54,0x76,0x5f,0x54,0x77,0x5f,0x54,0x77,0x60,0x53,0x76,0x5f,0x54,0x77,0x5f, 0x54,0x76,0x60,0x55,0x78,0x60,0x58,0x78,0x61,0x59,0x79,0x48,0x42,0x55,0x1c,0x1e, 0x23,0x1c,0x1e,0x23,0x1b,0x1d,0x22,0x19,0x1b,0x20,0x16,0x17,0x1c,0x13,0x15,0x19, 0x11,0x12,0x16,0x0e,0x0f,0x12,0x17,0x15,0x1a,0xa1,0x8b,0xc7,0x61,0x56,0x7d,0x4f, 0x47,0x66,0x5a,0x52,0x77,0x59,0x51,0x77,0x56,0x50,0x78,0x54,0x50,0x77,0x54,0x50, 0x78,0x51,0x4f,0x79,0x52,0x4f,0x7a,0x52,0x52,0x7b,0x52,0x55,0x7e,0x4d,0x56,0x7a, 0x49,0x50,0x73,0x5b,0x66,0x90,0x19,0x18,0x1f,0x28,0x22,0x2a,0x2a,0x24,0x2b,0x2d, 0x26,0x2e,0x29,0x25,0x2c,0x4f,0x53,0x6b,0x69,0x75,0x97,0x39,0x3e,0x55,0x3a,0x3e, 0x56,0x40,0x45,0x5d,0x3c,0x40,0x58,0x40,0x45,0x60,0x1f,0x22,0x2b,0x20,0x22,0x2c, 0x4b,0x45,0x57,0x54,0x4c,0x5e,0x5b,0x58,0x6e,0x50,0x52,0x75,0x57,0x53,0x73,0x3b, 0x37,0x47,0x3d,0x39,0x46,0x40,0x3a,0x49,0x62,0x67,0x7f,0x5e,0x67,0x83,0x4f,0x57, 0x72,0x23,0x26,0x32,0x1c,0x1e,0x28,0x1c,0x1d,0x27,0x1a,0x1c,0x25,0x1a,0x1a,0x24, 0x21,0x1f,0x29,0x24,0x20,0x2a,0x29,0x24,0x2f,0x22,0x1f,0x2a,0x1d,0x1c,0x26,0x5a, 0x4d,0x63,0x6a,0x5d,0x77,0x6b,0x60,0x7a,0x6c,0x68,0x86,0x4f,0x4e,0x75,0x5b,0x51, 0x72,0x5c,0x51,0x73,0x59,0x4b,0x6b,0x4e,0x3f,0x5b,0x4d,0x3f,0x58,0x5a,0x5a,0x76, 0x23,0x26,0x2b,0x1f,0x22,0x27,0x1a,0x1b,0x21,0x26,0x21,0x29,0x23,0x1e,0x25,0x4f, 0x4d,0x74,0x58,0x50,0x73,0x5a,0x50,0x72,0x5c,0x51,0x74,0x5d,0x51,0x74,0x5e,0x53, 0x75,0x5f,0x54,0x76,0x60,0x53,0x77,0x5f,0x54,0x76,0x5f,0x53,0x76,0x5e,0x53,0x76, 0x5e,0x52,0x76,0x5e,0x52,0x75,0x5b,0x47,0x62,0x49,0x3c,0x52,0x53,0x46,0x5d,0x65, 0x60,0x85,0x34,0x37,0x46,0x34,0x38,0x44,0x3a,0x3e,0x4b,0x39,0x3d,0x4a,0x38,0x3d, 0x4a,0x34,0x38,0x46,0x34,0x39,0x46,0x32,0x36,0x43,0x32,0x36,0x42,0x32,0x36,0x42, 0x30,0x34,0x40,0x30,0x34,0x3f,0x30,0x33,0x3e,0x2e,0x32,0x3d,0x2a,0x2e,0x38,0x26, 0x29,0x33,0x22,0x26,0x2f,0x20,0x23,0x2d,0x1f,0x22,0x2b,0x1f,0x22,0x2a,0x1e,0x20, 0x29,0x1c,0x1f,0x27,0x1a,0x1c,0x24,0x17,0x1a,0x21,0x15,0x16,0x1e,0x15,0x16,0x1e, 0x13,0x16,0x1c,0x12,0x14,0x1a,0x12,0x14,0x1a,0x11,0x12,0x17,0x0f,0x11,0x16,0x0e, 0x0e,0x13,0x0d,0x0e,0x12,0x0c,0x0e,0x12,0x0a,0x0b,0x0e,0x0a,0x0b,0x0e,0x09,0x0a, 0x0d,0x08,0x09,0x0b,0x07,0x08,0x0b,0x06,0x07,0x0a,0x06,0x06,0x09,0x06,0x06,0x08, 0x05,0x05,0x06,0x04,0x05,0x06,0x04,0x05,0x06,0x03,0x04,0x05,0x03,0x03,0x04,0x80, 0x87,0x9b,0x59,0x63,0x8b,0x55,0x4f,0x77,0x5e,0x52,0x76,0x5e,0x53,0x76,0x5e,0x53, 0x76,0x5e,0x53,0x76,0x5e,0x53,0x76,0x5f,0x53,0x77,0x5f,0x53,0x77,0x5f,0x53,0x77, 0x5f,0x53,0x77,0x5f,0x52,0x76,0x5f,0x52,0x76,0x5f,0x52,0x76,0x5f,0x52,0x76,0x6c, 0x5d,0x86,0x22,0x1d,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x57,0x62,0x82,0x5b,0x52,0x79,0x57,0x50,0x79,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52, 0x4f,0x7a,0x52,0x4f,0x7b,0x52,0x50,0x7c,0x52,0x54,0x7e,0x52,0x57,0x81,0x53,0x5e, 0x87,0x56,0x62,0x8a,0x52,0x5a,0x83,0x65,0x54,0x76,0x57,0x55,0x7d,0x5e,0x67,0x8d, 0xdf,0xe2,0xea,0xd8,0xdb,0xe5,0xd5,0xd9,0xe3,0xd3,0xd7,0xe1,0xcf,0xd2,0xdf,0xc9, 0xce,0xdb,0xc2,0xc8,0xd7,0xbc,0xc3,0xd3,0xb3,0xba,0xce,0xaa,0xb1,0xc6,0xa3,0xaa, 0xc2,0x9d,0xa7,0xbf,0x9b,0xa4,0xbc,0x9b,0xa4,0xbc,0x95,0x9f,0xb9,0x96,0xa0,0xba, 0x96,0xa0,0xb9,0x93,0x9c,0xb8,0x90,0x9a,0xb5,0x8c,0x96,0xb3,0x88,0x92,0xb0,0x80, 0x8b,0xaa,0x7a,0x85,0xa5,0x74,0x80,0xa2,0x71,0x7c,0xa0,0x6d,0x79,0x9c,0x66,0x73, 0x98,0x65,0x72,0x96,0x5e,0x6b,0x92,0x5e,0x53,0x79,0x64,0x4d,0x6a,0x64,0x4f,0x6e, 0x64,0x53,0x76,0x64,0x53,0x76,0x64,0x53,0x76,0x63,0x4f,0x70,0x57,0x4f,0x78,0x5b, 0x51,0x78,0x59,0x51,0x77,0x5c,0x51,0x77,0x5c,0x52,0x77,0x5d,0x52,0x77,0x5d,0x51, 0x77,0x5d,0x52,0x77,0x5d,0x52,0x77,0x5d,0x51,0x77,0x5c,0x51,0x77,0x5e,0x51,0x75, 0x5e,0x51,0x75,0x5f,0x51,0x75,0x5e,0x52,0x75,0x5e,0x52,0x75,0x60,0x52,0x75,0x5e, 0x52,0x75,0x60,0x52,0x75,0x61,0x52,0x76,0x61,0x52,0x76,0x61,0x52,0x76,0x62,0x52, 0x76,0x61,0x52,0x76,0x64,0x53,0x76,0x64,0x53,0x74,0x5e,0x46,0x62,0x64,0x53,0x76, 0x3f,0x37,0x4d,0x4c,0x46,0x67,0x63,0x53,0x77,0x5e,0x46,0x62,0x64,0x52,0x72,0x64, 0x53,0x76,0x64,0x52,0x72,0x5b,0x43,0x5d,0x5f,0x48,0x64,0x58,0x40,0x5b,0x64,0x52, 0x72,0x5a,0x52,0x79,0x57,0x50,0x79,0x54,0x50,0x79,0x52,0x4f,0x7a,0x52,0x50,0x7c, 0x52,0x54,0x7e,0x52,0x5a,0x84,0x55,0x60,0x8a,0x54,0x60,0x8a,0x52,0x5d,0x88,0x63, 0x4b,0x67,0x84,0x8e,0xad,0xc3,0xc9,0xd8,0x87,0x7d,0x8d,0x78,0x67,0x83,0x6a,0x67, 0x8a,0x68,0x66,0x8c,0x68,0x72,0x96,0x5d,0x65,0x7d,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xa6,0xab,0xb9,0x62,0x6d,0x94,0x64,0x4e,0x6c, 0x52,0x4f,0x7a,0x52,0x55,0x80,0x52,0x57,0x83,0x52,0x5a,0x84,0x52,0x5d,0x86,0x53, 0x5e,0x88,0x53,0x5e,0x88,0x54,0x5f,0x89,0x54,0x5f,0x89,0x55,0x60,0x8a,0x55,0x60, 0x8a,0x55,0x60,0x8a,0x52,0x57,0x82,0x63,0x53,0x77,0x64,0x71,0x95,0x6e,0x6e,0x70, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x03,0x04,0x03,0x03,0x04, 0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x04,0x04,0x04, 0x04,0x05,0x04,0x05,0x06,0x04,0x05,0x06,0x06,0x06,0x06,0x04,0x05,0x06,0x06,0x06, 0x07,0x06,0x06,0x07,0x06,0x06,0x08,0x08,0x08,0x0a,0x09,0x09,0x0c,0x0d,0x0d,0x10, 0x13,0x12,0x17,0x1a,0x18,0x1e,0x1e,0x1c,0x23,0x23,0x1f,0x27,0x24,0x21,0x29,0x24, 0x21,0x29,0x24,0x21,0x29,0x24,0x20,0x2a,0x27,0x23,0x2c,0x33,0x2c,0x3a,0x3c,0x35, 0x44,0x44,0x3d,0x4d,0x4e,0x44,0x56,0x4e,0x46,0x59,0x4c,0x44,0x57,0x50,0x49,0x5d, 0x55,0x50,0x61,0x67,0x6a,0x82,0x5a,0x5e,0x7b,0x5a,0x62,0x80,0x6b,0x72,0x8f,0x77, 0x80,0x99,0x75,0x7d,0x99,0x7c,0x84,0xa0,0x89,0x90,0xa9,0x88,0x90,0xa8,0x78,0x80, 0x9c,0x66,0x6e,0x8e,0x57,0x61,0x85,0x60,0x57,0x76,0x55,0x57,0x7b,0x2a,0x2e,0x3d, 0x17,0x19,0x1e,0x16,0x18,0x1d,0x15,0x16,0x1a,0x11,0x12,0x16,0x0e,0x0e,0x11,0x59, 0x4c,0x5c,0x6b,0x76,0x97,0x45,0x4d,0x6e,0x52,0x4b,0x71,0x5d,0x53,0x78,0x5d,0x53, 0x78,0x5d,0x53,0x78,0x5f,0x54,0x77,0x5f,0x54,0x77,0x5f,0x54,0x77,0x60,0x53,0x76, 0x5f,0x54,0x77,0x5f,0x54,0x76,0x60,0x55,0x77,0x61,0x57,0x78,0x61,0x58,0x78,0x49, 0x43,0x57,0x1e,0x1f,0x26,0x1c,0x1e,0x23,0x1b,0x1d,0x22,0x1a,0x1b,0x20,0x17,0x19, 0x1e,0x14,0x15,0x19,0x11,0x12,0x16,0x0f,0x11,0x13,0x11,0x12,0x15,0x9d,0x8b,0xc7, 0x67,0x5a,0x7f,0x4e,0x46,0x64,0x58,0x4f,0x73,0x59,0x51,0x77,0x56,0x50,0x77,0x54, 0x50,0x77,0x53,0x50,0x78,0x51,0x4f,0x79,0x52,0x4f,0x79,0x52,0x51,0x7a,0x52,0x52, 0x7b,0x4f,0x52,0x7a,0x48,0x52,0x74,0x5d,0x6b,0x98,0x17,0x18,0x20,0x25,0x21,0x28, 0x29,0x23,0x2a,0x2c,0x25,0x2e,0x2b,0x27,0x2e,0x2a,0x28,0x32,0x7b,0x89,0xad,0x47, 0x4d,0x69,0x38,0x3d,0x53,0x3a,0x3f,0x57,0x59,0x61,0x82,0x3b,0x40,0x58,0x22,0x24, 0x2e,0x1f,0x22,0x2b,0x46,0x41,0x51,0x54,0x4c,0x5f,0x55,0x4e,0x63,0x54,0x5d,0x7f, 0x58,0x54,0x73,0x41,0x3d,0x4f,0x3e,0x38,0x46,0x44,0x3d,0x4c,0x42,0x3c,0x4a,0x57, 0x5c,0x75,0x58,0x62,0x80,0x50,0x57,0x74,0x28,0x2c,0x39,0x1b,0x1e,0x26,0x1a,0x1c, 0x24,0x19,0x1b,0x24,0x1c,0x1b,0x26,0x1f,0x1e,0x27,0x26,0x21,0x2b,0x2b,0x26,0x31, 0x20,0x1e,0x28,0x25,0x23,0x2e,0x67,0x58,0x71,0x67,0x60,0x7e,0x65,0x61,0x80,0x57, 0x5a,0x7e,0x56,0x4f,0x74,0x5b,0x51,0x72,0x5a,0x4d,0x70,0x52,0x44,0x60,0x4e,0x40, 0x5a,0x59,0x59,0x74,0x39,0x38,0x43,0x2b,0x2e,0x35,0x2c,0x2d,0x34,0x32,0x30,0x38, 0x2a,0x26,0x2e,0x4e,0x4d,0x74,0x58,0x50,0x73,0x5a,0x51,0x72,0x5d,0x52,0x74,0x5f, 0x54,0x75,0x61,0x55,0x78,0x62,0x55,0x79,0x61,0x56,0x79,0x61,0x55,0x78,0x60,0x53, 0x77,0x5f,0x53,0x76,0x5f,0x52,0x76,0x5e,0x52,0x75,0x5c,0x48,0x63,0x4b,0x3c,0x54, 0x55,0x47,0x5f,0x68,0x64,0x87,0x36,0x3b,0x49,0x39,0x3d,0x49,0x3e,0x43,0x50,0x3e, 0x42,0x4f,0x3a,0x3e,0x4b,0x34,0x38,0x45,0x32,0x36,0x42,0x31,0x35,0x42,0x32,0x36, 0x42,0x32,0x36,0x42,0x33,0x37,0x43,0x33,0x37,0x43,0x31,0x35,0x41,0x2e,0x32,0x3d, 0x2a,0x2e,0x39,0x29,0x2c,0x36,0x25,0x28,0x32,0x25,0x28,0x31,0x22,0x26,0x2f,0x24, 0x26,0x30,0x22,0x25,0x2e,0x21,0x24,0x2c,0x1e,0x20,0x28,0x19,0x1b,0x23,0x18,0x1a, 0x22,0x16,0x19,0x20,0x15,0x16,0x1e,0x14,0x16,0x1c,0x12,0x15,0x1b,0x12,0x14,0x1a, 0x12,0x14,0x1a,0x0f,0x0f,0x15,0x0e,0x10,0x15,0x0d,0x0e,0x12,0x0c,0x0d,0x11,0x0a, 0x0b,0x0e,0x0a,0x0a,0x0e,0x09,0x0a,0x0d,0x08,0x09,0x0b,0x07,0x07,0x0a,0x06,0x07, 0x09,0x06,0x07,0x09,0x06,0x06,0x08,0x05,0x05,0x06,0x04,0x05,0x06,0x04,0x05,0x06, 0x03,0x03,0x04,0x55,0x5a,0x69,0x5e,0x6b,0x91,0x51,0x4e,0x78,0x5e,0x52,0x75,0x5e, 0x52,0x76,0x5e,0x53,0x76,0x5e,0x53,0x76,0x5e,0x53,0x76,0x5e,0x53,0x76,0x5f,0x53, 0x77,0x5f,0x53,0x77,0x5f,0x53,0x77,0x5f,0x53,0x77,0x5f,0x52,0x76,0x5f,0x52,0x76, 0x5f,0x52,0x76,0x65,0x57,0x7d,0x45,0x3d,0x57,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x06,0x07,0x09,0x56,0x62,0x8a,0x55,0x50,0x79,0x54,0x50,0x79,0x52,0x4f,0x7a, 0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7b,0x52,0x52,0x7c,0x52,0x55,0x7f,0x52, 0x5a,0x83,0x53,0x5f,0x88,0x56,0x63,0x8a,0x53,0x5e,0x88,0x65,0x54,0x76,0x58,0x55, 0x7e,0x64,0x71,0x95,0xe3,0xe6,0xed,0xd9,0xdd,0xe6,0xd7,0xdb,0xe5,0xd3,0xd8,0xe2, 0xcf,0xd3,0xdf,0xc8,0xcc,0xda,0xc2,0xc8,0xd7,0xba,0xc1,0xd1,0xb1,0xb8,0xcb,0xa7, 0xaf,0xc4,0xa1,0xa9,0xc1,0x9d,0xa5,0xbf,0x9b,0xa4,0xbc,0x99,0xa2,0xbb,0x95,0x9f, 0xb9,0x94,0x9d,0xb8,0x94,0x9d,0xb8,0x93,0x9c,0xb7,0x90,0x9a,0xb5,0x8d,0x98,0xb3, 0x89,0x93,0xb0,0x81,0x8b,0xaa,0x79,0x84,0xa4,0x76,0x82,0xa3,0x71,0x7c,0xa0,0x6c, 0x77,0x9b,0x66,0x73,0x98,0x66,0x72,0x98,0x57,0x63,0x8c,0x64,0x53,0x76,0x63,0x4c, 0x69,0x64,0x53,0x74,0x64,0x53,0x75,0x64,0x53,0x76,0x64,0x53,0x76,0x64,0x53,0x73, 0x5e,0x52,0x76,0x5b,0x51,0x78,0x5b,0x51,0x78,0x5c,0x51,0x77,0x5b,0x51,0x77,0x5c, 0x51,0x77,0x5c,0x51,0x77,0x5c,0x51,0x77,0x5c,0x51,0x77,0x5c,0x51,0x77,0x5d,0x52, 0x77,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e,0x52,0x75, 0x5e,0x52,0x75,0x5e,0x52,0x75,0x5f,0x52,0x76,0x5d,0x52,0x78,0x5f,0x52,0x76,0x61, 0x52,0x76,0x61,0x52,0x76,0x61,0x52,0x76,0x63,0x53,0x77,0x60,0x48,0x65,0x60,0x48, 0x64,0x51,0x4d,0x77,0x38,0x2b,0x36,0x4f,0x4b,0x64,0x52,0x4f,0x7a,0x5e,0x46,0x60, 0x64,0x4e,0x6c,0x64,0x53,0x76,0x64,0x53,0x75,0x63,0x4b,0x69,0x64,0x4e,0x6d,0x64, 0x53,0x76,0x5c,0x52,0x79,0x5a,0x52,0x79,0x57,0x50,0x79,0x55,0x50,0x79,0x52,0x4f, 0x7a,0x52,0x4f,0x7b,0x52,0x54,0x7e,0x52,0x5d,0x86,0x53,0x5e,0x88,0x55,0x60,0x8a, 0x56,0x62,0x8b,0x60,0x48,0x65,0x79,0x84,0xa5,0xd2,0xd6,0xe1,0x91,0x8a,0x9a,0x78, 0x68,0x83,0x68,0x66,0x8b,0x68,0x67,0x8d,0x6a,0x74,0x98,0x6b,0x74,0x8e,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x73,0x76,0x73,0x7e, 0xa1,0x52,0x4f,0x7b,0x64,0x53,0x76,0x52,0x55,0x80,0x52,0x55,0x80,0x52,0x57,0x82, 0x52,0x5b,0x85,0x52,0x5d,0x88,0x53,0x5e,0x88,0x53,0x5e,0x89,0x53,0x5f,0x89,0x54, 0x5f,0x89,0x54,0x5f,0x89,0x55,0x60,0x8a,0x53,0x5f,0x89,0x5c,0x52,0x79,0x52,0x53, 0x7e,0x8f,0x96,0xaa,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x03, 0x04,0x03,0x03,0x04,0x02,0x02,0x03,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x04,0x04, 0x03,0x04,0x04,0x04,0x04,0x05,0x04,0x05,0x06,0x04,0x05,0x06,0x04,0x05,0x06,0x06, 0x06,0x06,0x05,0x05,0x06,0x06,0x06,0x07,0x06,0x06,0x08,0x06,0x07,0x09,0x07,0x07, 0x09,0x07,0x08,0x0a,0x0a,0x0b,0x0d,0x12,0x11,0x15,0x1c,0x19,0x1f,0x23,0x1f,0x27, 0x24,0x20,0x28,0x24,0x21,0x29,0x24,0x21,0x2a,0x23,0x20,0x29,0x20,0x1d,0x26,0x29, 0x24,0x2e,0x32,0x2c,0x38,0x3c,0x34,0x43,0x4a,0x3e,0x4e,0x4e,0x41,0x52,0x4e,0x42, 0x52,0x55,0x48,0x59,0x4c,0x44,0x51,0x52,0x52,0x66,0x4c,0x4e,0x65,0x5b,0x5d,0x7a, 0x66,0x6e,0x8a,0x72,0x79,0x94,0x6f,0x78,0x94,0x77,0x7e,0x99,0x88,0x8f,0xa7,0x90, 0x97,0xad,0x8a,0x92,0xa9,0x7a,0x82,0x9d,0x64,0x6c,0x8c,0x62,0x59,0x78,0x54,0x55, 0x79,0x2a,0x2e,0x3d,0x18,0x1a,0x22,0x16,0x19,0x20,0x16,0x17,0x1d,0x12,0x12,0x16, 0x0e,0x0e,0x12,0x55,0x47,0x57,0x6e,0x78,0x98,0x46,0x50,0x72,0x50,0x4a,0x6f,0x5d, 0x52,0x77,0x5c,0x53,0x78,0x5d,0x53,0x78,0x5f,0x53,0x77,0x5f,0x54,0x77,0x5f,0x53, 0x77,0x60,0x53,0x76,0x5f,0x54,0x77,0x5f,0x54,0x76,0x60,0x55,0x77,0x61,0x57,0x78, 0x61,0x58,0x78,0x4e,0x47,0x5b,0x1f,0x1f,0x26,0x1d,0x1f,0x24,0x1b,0x1d,0x22,0x19, 0x1a,0x1f,0x17,0x19,0x1e,0x14,0x15,0x19,0x11,0x12,0x16,0x0f,0x10,0x13,0x0d,0x0e, 0x10,0x9e,0x8a,0xc7,0x69,0x5d,0x83,0x4b,0x45,0x60,0x58,0x50,0x74,0x5a,0x51,0x77, 0x56,0x50,0x77,0x54,0x50,0x77,0x53,0x4f,0x78,0x51,0x4f,0x79,0x51,0x4f,0x79,0x52, 0x4f,0x7a,0x51,0x52,0x7a,0x4f,0x52,0x79,0x45,0x4e,0x6f,0x5c,0x68,0x94,0x1a,0x1b, 0x26,0x15,0x14,0x19,0x2b,0x24,0x2b,0x29,0x24,0x2b,0x2b,0x25,0x2d,0x28,0x24,0x2c, 0x64,0x6d,0x8e,0x5c,0x66,0x88,0x39,0x3d,0x53,0x38,0x3d,0x53,0x47,0x4e,0x6a,0x59, 0x63,0x84,0x41,0x42,0x60,0x1e,0x22,0x2a,0x29,0x2a,0x35,0x55,0x4d,0x61,0x55,0x4d, 0x61,0x69,0x71,0x8e,0x57,0x54,0x74,0x3c,0x3b,0x4e,0x3a,0x37,0x43,0x43,0x3e,0x4d, 0x46,0x40,0x4f,0x45,0x3e,0x4e,0x4f,0x4f,0x65,0x54,0x5b,0x7a,0x50,0x59,0x79,0x30, 0x34,0x47,0x1b,0x1e,0x26,0x1a,0x1c,0x24,0x1a,0x1c,0x24,0x1a,0x1a,0x22,0x1a,0x1a, 0x22,0x22,0x20,0x2a,0x23,0x20,0x2b,0x17,0x17,0x20,0x38,0x33,0x42,0x67,0x5f,0x7d, 0x66,0x60,0x7f,0x6a,0x60,0x7b,0x4f,0x51,0x77,0x59,0x51,0x73,0x5a,0x4e,0x71,0x53, 0x46,0x65,0x4e,0x41,0x5b,0x51,0x4f,0x6b,0x53,0x4c,0x5a,0x29,0x2b,0x32,0x2f,0x30, 0x38,0x3e,0x3b,0x45,0x38,0x35,0x3f,0x54,0x54,0x78,0x57,0x50,0x73,0x5b,0x51,0x72, 0x5e,0x54,0x75,0x62,0x56,0x78,0x64,0x59,0x7a,0x65,0x5a,0x7b,0x64,0x59,0x7b,0x62, 0x57,0x79,0x61,0x55,0x78,0x5f,0x54,0x76,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5c,0x47, 0x64,0x4b,0x3c,0x54,0x55,0x48,0x5f,0x6a,0x65,0x89,0x3d,0x42,0x51,0x3e,0x43,0x51, 0x43,0x48,0x56,0x42,0x46,0x55,0x3c,0x40,0x4e,0x34,0x38,0x45,0x31,0x35,0x42,0x2e, 0x32,0x3f,0x2f,0x33,0x3f,0x32,0x36,0x42,0x33,0x37,0x43,0x32,0x36,0x42,0x2f,0x32, 0x3e,0x2d,0x31,0x3c,0x2a,0x2d,0x38,0x27,0x2a,0x35,0x26,0x2a,0x34,0x27,0x2a,0x34, 0x28,0x2c,0x36,0x27,0x2a,0x35,0x27,0x2a,0x33,0x24,0x27,0x31,0x22,0x24,0x2d,0x1d, 0x1f,0x27,0x19,0x1b,0x23,0x18,0x1a,0x22,0x16,0x18,0x1f,0x14,0x16,0x1d,0x14,0x16, 0x1d,0x14,0x16,0x1c,0x12,0x14,0x1a,0x12,0x13,0x19,0x10,0x12,0x17,0x0e,0x10,0x15, 0x0d,0x0e,0x12,0x0c,0x0d,0x11,0x0a,0x0b,0x0e,0x0a,0x0b,0x0e,0x09,0x0a,0x0d,0x08, 0x09,0x0b,0x07,0x08,0x0a,0x06,0x07,0x09,0x06,0x07,0x09,0x05,0x06,0x07,0x04,0x05, 0x06,0x04,0x05,0x06,0x04,0x04,0x06,0x2f,0x33,0x3b,0x69,0x74,0x98,0x51,0x4e,0x79, 0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e,0x52,0x76,0x5e,0x53,0x76,0x5e,0x53,0x76,0x5e, 0x53,0x76,0x5e,0x53,0x76,0x5f,0x53,0x77,0x5f,0x53,0x77,0x5f,0x53,0x77,0x5f,0x53, 0x77,0x5f,0x53,0x77,0x5f,0x52,0x76,0x62,0x55,0x7a,0x6b,0x5c,0x85,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x16,0x19,0x1f,0x52,0x5a,0x83,0x55,0x50,0x79,0x54,0x50, 0x79,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7b,0x52,0x52,0x7c, 0x52,0x53,0x7e,0x52,0x58,0x82,0x54,0x5f,0x88,0x57,0x63,0x8b,0x55,0x60,0x8a,0x64, 0x54,0x79,0x57,0x55,0x80,0x79,0x84,0xa4,0xe1,0xe2,0xea,0xd8,0xdb,0xe5,0xd7,0xda, 0xe5,0xd3,0xd7,0xe1,0xcf,0xd3,0xdf,0xc7,0xcb,0xda,0xc1,0xc7,0xd6,0xb8,0xbf,0xd0, 0xad,0xb5,0xc9,0xa5,0xad,0xc3,0x9d,0xa7,0xbf,0x9b,0xa4,0xbc,0x9a,0xa3,0xbb,0x96, 0xa0,0xba,0x94,0x9d,0xb8,0x93,0x9c,0xb7,0x93,0x9c,0xb7,0x91,0x9a,0xb5,0x8e,0x99, 0xb4,0x8c,0x96,0xb2,0x86,0x91,0xaf,0x7e,0x8a,0xa9,0x7c,0x86,0xa8,0x76,0x82,0xa3, 0x72,0x7d,0xa0,0x6c,0x79,0x9c,0x6a,0x75,0x9a,0x63,0x6e,0x95,0x55,0x60,0x8a,0x63, 0x53,0x77,0x63,0x4b,0x67,0x64,0x53,0x75,0x64,0x53,0x74,0x64,0x53,0x76,0x64,0x53, 0x76,0x64,0x53,0x75,0x63,0x4f,0x70,0x5d,0x52,0x78,0x5a,0x51,0x78,0x5b,0x51,0x78, 0x5c,0x51,0x77,0x5b,0x51,0x77,0x5d,0x52,0x77,0x5d,0x52,0x77,0x5d,0x52,0x77,0x5d, 0x52,0x77,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e,0x52, 0x75,0x5f,0x52,0x76,0x5f,0x52,0x76,0x5f,0x52,0x76,0x5f,0x52,0x76,0x5d,0x52,0x78, 0x5d,0x52,0x78,0x61,0x52,0x76,0x61,0x52,0x76,0x62,0x53,0x77,0x64,0x53,0x73,0x5c, 0x44,0x5f,0x64,0x53,0x73,0x50,0x54,0x6e,0x3c,0x2d,0x37,0x54,0x49,0x5b,0x54,0x5f, 0x89,0x5e,0x46,0x62,0x64,0x50,0x71,0x63,0x53,0x77,0x64,0x53,0x76,0x64,0x53,0x75, 0x5f,0x53,0x77,0x5f,0x53,0x77,0x5c,0x52,0x79,0x5b,0x52,0x79,0x57,0x50,0x79,0x54, 0x50,0x79,0x52,0x4f,0x7a,0x52,0x50,0x7b,0x52,0x53,0x7e,0x52,0x5b,0x85,0x53,0x5e, 0x88,0x55,0x60,0x8a,0x58,0x65,0x8d,0x60,0x48,0x65,0x6a,0x75,0x9a,0xd7,0xda,0xe5, 0x9a,0x96,0xa7,0x78,0x68,0x85,0x68,0x67,0x8c,0x68,0x6b,0x91,0x69,0x73,0x97,0x70, 0x79,0x99,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18, 0x18,0x18,0x8f,0x98,0xb3,0x56,0x62,0x8b,0x64,0x4d,0x6b,0x52,0x52,0x7d,0x52,0x55, 0x80,0x52,0x56,0x81,0x52,0x5b,0x85,0x52,0x5d,0x86,0x53,0x5d,0x88,0x53,0x5e,0x89, 0x53,0x5f,0x89,0x54,0x5f,0x89,0x55,0x60,0x8a,0x54,0x5f,0x89,0x53,0x5f,0x89,0x52, 0x56,0x82,0x64,0x53,0x76,0x6a,0x75,0x99,0x4f,0x50,0x52,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x02,0x03,0x03,0x02,0x02,0x03,0x03,0x03, 0x04,0x02,0x02,0x03,0x03,0x04,0x04,0x04,0x04,0x05,0x04,0x04,0x05,0x04,0x04,0x05, 0x04,0x05,0x06,0x04,0x05,0x06,0x06,0x06,0x06,0x05,0x05,0x06,0x06,0x06,0x07,0x06, 0x06,0x08,0x07,0x07,0x09,0x06,0x07,0x09,0x07,0x08,0x0a,0x0a,0x09,0x0c,0x11,0x10, 0x14,0x1e,0x1b,0x22,0x23,0x1f,0x28,0x24,0x20,0x2a,0x28,0x24,0x2e,0x28,0x23,0x2e, 0x20,0x1d,0x26,0x20,0x1d,0x26,0x28,0x23,0x2d,0x2f,0x29,0x35,0x3c,0x34,0x42,0x47, 0x3d,0x4d,0x4c,0x41,0x52,0x56,0x48,0x59,0x57,0x4a,0x5a,0x54,0x50,0x63,0x46,0x46, 0x5a,0x4d,0x4d,0x65,0x57,0x59,0x77,0x59,0x62,0x80,0x5f,0x68,0x86,0x66,0x6f,0x8d, 0x79,0x80,0x9a,0x89,0x8f,0xa6,0x8e,0x94,0xaa,0x8b,0x92,0xa8,0x78,0x7f,0x99,0x6a, 0x61,0x7c,0x54,0x54,0x77,0x28,0x2c,0x3c,0x1e,0x1e,0x29,0x1e,0x1d,0x28,0x18,0x19, 0x22,0x13,0x15,0x1a,0x0e,0x0f,0x12,0x51,0x43,0x53,0x6e,0x78,0x97,0x48,0x52,0x72, 0x4f,0x4a,0x6d,0x5d,0x52,0x77,0x5c,0x53,0x78,0x5f,0x53,0x76,0x5f,0x53,0x77,0x5f, 0x54,0x77,0x5f,0x53,0x77,0x60,0x53,0x76,0x5f,0x54,0x77,0x5f,0x55,0x76,0x5f,0x55, 0x77,0x60,0x56,0x78,0x5f,0x57,0x75,0x4b,0x45,0x58,0x24,0x23,0x2b,0x23,0x23,0x2a, 0x20,0x21,0x27,0x1c,0x1c,0x22,0x16,0x18,0x1d,0x15,0x16,0x1b,0x12,0x13,0x17,0x0f, 0x11,0x13,0x0d,0x0e,0x10,0x99,0x86,0xbc,0x6c,0x5f,0x87,0x4a,0x42,0x5f,0x59,0x51, 0x76,0x5a,0x51,0x77,0x59,0x52,0x77,0x56,0x4f,0x78,0x55,0x50,0x78,0x53,0x4f,0x79, 0x51,0x4f,0x79,0x52,0x4f,0x7a,0x52,0x51,0x7b,0x4f,0x52,0x77,0x43,0x47,0x69,0x5a, 0x65,0x92,0x1d,0x1e,0x2a,0x0e,0x0e,0x12,0x31,0x29,0x32,0x2a,0x24,0x2b,0x2a,0x23, 0x2b,0x2a,0x26,0x2e,0x2e,0x2f,0x3b,0x64,0x6f,0x93,0x37,0x3c,0x53,0x38,0x3b,0x53, 0x38,0x3d,0x54,0x58,0x61,0x83,0x56,0x5b,0x83,0x20,0x22,0x2c,0x1f,0x22,0x2b,0x51, 0x4a,0x5c,0x55,0x4d,0x61,0x74,0x79,0x8f,0x51,0x52,0x74,0x4b,0x4a,0x64,0x22,0x24, 0x2f,0x34,0x32,0x3e,0x41,0x3c,0x4b,0x48,0x42,0x52,0x49,0x42,0x52,0x4d,0x47,0x5b, 0x51,0x57,0x76,0x4f,0x58,0x7a,0x35,0x38,0x4d,0x1b,0x1e,0x26,0x19,0x1c,0x24,0x18, 0x1a,0x23,0x1a,0x1a,0x24,0x19,0x18,0x20,0x19,0x18,0x22,0x17,0x19,0x21,0x18,0x1a, 0x22,0x53,0x4a,0x5e,0x6a,0x60,0x7c,0x68,0x5a,0x73,0x5f,0x5f,0x7c,0x4f,0x4d,0x74, 0x5a,0x51,0x72,0x56,0x49,0x68,0x51,0x42,0x5f,0x44,0x3c,0x57,0x60,0x57,0x69,0x24, 0x22,0x29,0x24,0x25,0x2c,0x3b,0x39,0x42,0x3d,0x3a,0x44,0x5c,0x5c,0x7f,0x5b,0x55, 0x77,0x5c,0x52,0x72,0x5f,0x56,0x76,0x63,0x5a,0x7a,0x67,0x5e,0x7e,0x69,0x60,0x7f, 0x68,0x5e,0x7e,0x66,0x5d,0x7d,0x64,0x59,0x7a,0x61,0x56,0x78,0x5f,0x53,0x76,0x5e, 0x53,0x75,0x5c,0x48,0x64,0x4b,0x3c,0x54,0x57,0x48,0x61,0x67,0x66,0x8a,0x45,0x4a, 0x58,0x4a,0x4e,0x5c,0x4e,0x52,0x61,0x4a,0x4e,0x5d,0x41,0x45,0x53,0x39,0x3d,0x4a, 0x33,0x37,0x45,0x2f,0x33,0x40,0x2f,0x33,0x40,0x30,0x34,0x41,0x31,0x35,0x41,0x32, 0x36,0x42,0x2f,0x32,0x3e,0x2d,0x30,0x3b,0x2a,0x2e,0x39,0x28,0x2c,0x36,0x29,0x2d, 0x37,0x2b,0x2e,0x39,0x2a,0x2e,0x39,0x2a,0x2e,0x38,0x28,0x2b,0x36,0x28,0x2b,0x35, 0x26,0x28,0x31,0x1f,0x22,0x2b,0x1b,0x1e,0x26,0x1a,0x1d,0x25,0x17,0x1a,0x22,0x16, 0x19,0x20,0x15,0x17,0x1e,0x15,0x16,0x1e,0x14,0x16,0x1c,0x13,0x15,0x1b,0x12,0x14, 0x1a,0x0f,0x11,0x16,0x0e,0x10,0x15,0x0d,0x0e,0x12,0x0c,0x0d,0x11,0x0a,0x0c,0x0f, 0x0a,0x0a,0x0e,0x08,0x09,0x0b,0x08,0x08,0x0b,0x07,0x07,0x0a,0x06,0x07,0x0a,0x06, 0x07,0x09,0x05,0x05,0x06,0x04,0x05,0x06,0x04,0x05,0x06,0x11,0x12,0x15,0x76,0x80, 0xa1,0x51,0x54,0x7e,0x5c,0x52,0x77,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e,0x52,0x76, 0x5e,0x53,0x76,0x5e,0x53,0x76,0x5e,0x53,0x76,0x5e,0x53,0x76,0x5f,0x53,0x77,0x5f, 0x53,0x77,0x5f,0x53,0x77,0x5f,0x53,0x77,0x5f,0x53,0x77,0x60,0x53,0x77,0x79,0x69, 0x97,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x24,0x29,0x35,0x52,0x52,0x7c,0x55, 0x50,0x79,0x54,0x50,0x79,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f, 0x7b,0x52,0x52,0x7c,0x52,0x55,0x80,0x52,0x5d,0x85,0x54,0x5f,0x88,0x57,0x63,0x8b, 0x58,0x64,0x8c,0x64,0x55,0x79,0x57,0x55,0x7e,0x93,0x9d,0xb8,0xde,0xe1,0xe8,0xd6, 0xd9,0xe5,0xd6,0xd9,0xe3,0xd3,0xd7,0xe1,0xce,0xd2,0xde,0xc7,0xcb,0xd9,0xbe,0xc3, 0xd3,0xb5,0xbc,0xcf,0xab,0xb2,0xc8,0xa3,0xab,0xc2,0x9d,0xa5,0xbf,0x98,0xa1,0xba, 0x96,0xa0,0xba,0x95,0x9f,0xb9,0x93,0x9c,0xb7,0x92,0x9b,0xb7,0x91,0x9a,0xb5,0x90, 0x9a,0xb5,0x8d,0x98,0xb3,0x8a,0x94,0xb1,0x86,0x91,0xaf,0x81,0x8b,0xaa,0x7a,0x85, 0xa5,0x76,0x82,0xa3,0x72,0x7d,0xa0,0x6f,0x7b,0x9f,0x6d,0x79,0x9c,0x60,0x6d,0x94, 0x52,0x5d,0x88,0x64,0x53,0x73,0x64,0x4c,0x6a,0x64,0x53,0x74,0x64,0x53,0x75,0x64, 0x53,0x76,0x64,0x53,0x76,0x64,0x53,0x75,0x64,0x50,0x6e,0x5e,0x52,0x76,0x5c,0x51, 0x78,0x5b,0x51,0x78,0x5b,0x51,0x78,0x5b,0x51,0x78,0x5d,0x52,0x77,0x5d,0x52,0x77, 0x5d,0x52,0x77,0x5d,0x52,0x77,0x5f,0x52,0x76,0x5d,0x52,0x78,0x5f,0x52,0x76,0x5f, 0x52,0x76,0x5f,0x52,0x76,0x5f,0x52,0x76,0x5f,0x52,0x76,0x5f,0x52,0x76,0x5f,0x52, 0x76,0x5f,0x52,0x76,0x5f,0x52,0x76,0x61,0x52,0x76,0x62,0x53,0x77,0x64,0x53,0x76, 0x64,0x53,0x76,0x5d,0x45,0x60,0x52,0x52,0x7c,0x46,0x3f,0x4b,0x44,0x34,0x40,0x38, 0x2c,0x37,0x59,0x65,0x8b,0x63,0x4b,0x67,0x63,0x4b,0x69,0x64,0x53,0x76,0x62,0x53, 0x77,0x5e,0x53,0x79,0x5f,0x53,0x79,0x5e,0x53,0x79,0x5d,0x52,0x79,0x5b,0x52,0x79, 0x56,0x50,0x79,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x50,0x7b,0x52,0x52,0x7d,0x52, 0x5a,0x84,0x52,0x5d,0x88,0x54,0x5f,0x89,0x56,0x62,0x8b,0x63,0x4b,0x67,0x58,0x65, 0x8d,0xd8,0xdb,0xe5,0xa2,0xa2,0xb2,0x78,0x67,0x82,0x68,0x67,0x8d,0x68,0x6f,0x94, 0x6a,0x74,0x98,0x74,0x7e,0xa0,0x05,0x05,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x89,0x8d,0x95,0x65,0x72,0x98,0x64,0x53,0x75,0x54, 0x50,0x79,0x52,0x54,0x7e,0x52,0x54,0x80,0x52,0x58,0x83,0x52,0x5d,0x86,0x52,0x5d, 0x88,0x53,0x5e,0x88,0x53,0x5e,0x88,0x53,0x5f,0x89,0x54,0x5f,0x89,0x54,0x5f,0x89, 0x54,0x5f,0x89,0x53,0x5f,0x89,0x62,0x53,0x77,0x52,0x5d,0x85,0x83,0x89,0x9a,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x02, 0x03,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x03,0x03,0x04,0x03,0x04, 0x05,0x04,0x04,0x05,0x04,0x05,0x06,0x04,0x04,0x05,0x04,0x05,0x06,0x05,0x05,0x06, 0x06,0x06,0x07,0x06,0x06,0x07,0x06,0x06,0x08,0x07,0x08,0x09,0x07,0x08,0x0a,0x08, 0x08,0x0a,0x09,0x0a,0x0b,0x11,0x0f,0x13,0x1b,0x19,0x1f,0x1f,0x1d,0x25,0x27,0x22, 0x2c,0x2b,0x25,0x30,0x29,0x24,0x2e,0x23,0x1f,0x28,0x22,0x1f,0x28,0x26,0x21,0x2c, 0x2a,0x25,0x2f,0x38,0x30,0x3e,0x42,0x3a,0x4a,0x4e,0x42,0x55,0x59,0x4a,0x5b,0x61, 0x59,0x70,0x47,0x44,0x59,0x45,0x43,0x58,0x45,0x45,0x5b,0x52,0x51,0x6b,0x5c,0x5b, 0x76,0x62,0x61,0x7f,0x5c,0x65,0x85,0x72,0x79,0x93,0x81,0x88,0x9f,0x8d,0x93,0xa8, 0x88,0x8e,0xa5,0x76,0x6e,0x85,0x55,0x56,0x78,0x2b,0x2d,0x3e,0x29,0x26,0x32,0x29, 0x26,0x32,0x1f,0x1e,0x28,0x13,0x16,0x1c,0x0f,0x10,0x13,0x4c,0x40,0x4f,0x6c,0x76, 0x95,0x4a,0x55,0x75,0x4c,0x49,0x6b,0x5d,0x52,0x77,0x5c,0x53,0x78,0x5f,0x53,0x76, 0x5f,0x53,0x77,0x5f,0x54,0x77,0x5f,0x53,0x77,0x60,0x53,0x76,0x5f,0x54,0x77,0x5f, 0x54,0x76,0x5f,0x55,0x77,0x5f,0x55,0x77,0x5c,0x54,0x71,0x4e,0x46,0x5c,0x25,0x24, 0x2c,0x24,0x23,0x2c,0x23,0x23,0x2b,0x22,0x23,0x2a,0x1d,0x1e,0x23,0x18,0x18,0x1e, 0x12,0x13,0x17,0x10,0x11,0x14,0x0e,0x0e,0x11,0x92,0x7e,0xb0,0x70,0x62,0x8b,0x4a, 0x43,0x5f,0x59,0x51,0x76,0x5b,0x51,0x77,0x5a,0x52,0x77,0x56,0x4f,0x78,0x57,0x50, 0x78,0x53,0x4f,0x79,0x52,0x50,0x79,0x51,0x4f,0x7a,0x52,0x50,0x7b,0x4f,0x50,0x78, 0x42,0x44,0x65,0x5a,0x64,0x90,0x21,0x21,0x2f,0x0d,0x0e,0x11,0x1e,0x1b,0x21,0x2c, 0x25,0x2d,0x28,0x23,0x2b,0x2a,0x26,0x2e,0x26,0x22,0x2a,0x57,0x62,0x84,0x50,0x59, 0x7a,0x37,0x3b,0x53,0x37,0x3c,0x53,0x3f,0x44,0x5f,0x54,0x5f,0x82,0x3e,0x40,0x59, 0x1f,0x22,0x2b,0x3f,0x3b,0x4a,0x55,0x4d,0x61,0x5d,0x58,0x6c,0x5b,0x64,0x84,0x57, 0x54,0x74,0x23,0x26,0x30,0x20,0x22,0x2b,0x24,0x25,0x2f,0x2d,0x2d,0x37,0x47,0x41, 0x50,0x4f,0x47,0x58,0x54,0x4a,0x5e,0x51,0x53,0x70,0x4f,0x53,0x75,0x42,0x43,0x5e, 0x1b,0x1e,0x27,0x1e,0x1e,0x28,0x22,0x20,0x2b,0x21,0x1f,0x2a,0x1a,0x19,0x23,0x16, 0x16,0x1f,0x16,0x18,0x1f,0x1f,0x1f,0x28,0x61,0x54,0x6b,0x63,0x55,0x6c,0x5b,0x4f, 0x64,0x51,0x5a,0x7e,0x55,0x50,0x73,0x58,0x4d,0x6e,0x53,0x46,0x64,0x4b,0x3f,0x58, 0x48,0x44,0x5e,0x2e,0x28,0x32,0x14,0x15,0x19,0x31,0x2d,0x34,0x3a,0x36,0x3f,0x61, 0x61,0x81,0x64,0x5f,0x7f,0x61,0x59,0x77,0x5f,0x57,0x77,0x65,0x5d,0x7c,0x6a,0x63, 0x81,0x70,0x69,0x85,0x77,0x71,0x8d,0x72,0x6a,0x88,0x72,0x6b,0x88,0x67,0x5e,0x7d, 0x62,0x58,0x78,0x62,0x57,0x79,0x5f,0x4e,0x69,0x4c,0x3f,0x55,0x53,0x46,0x5e,0x60, 0x5f,0x83,0x42,0x47,0x56,0x4b,0x51,0x5f,0x52,0x57,0x66,0x51,0x56,0x64,0x4a,0x4f, 0x5d,0x44,0x49,0x56,0x3e,0x42,0x50,0x39,0x3d,0x4a,0x36,0x3a,0x47,0x33,0x38,0x44, 0x32,0x36,0x42,0x31,0x35,0x41,0x30,0x34,0x40,0x2f,0x33,0x3e,0x2c,0x2f,0x3b,0x2a, 0x2e,0x39,0x2a,0x2d,0x38,0x2b,0x2f,0x3a,0x2e,0x31,0x3c,0x2d,0x30,0x3b,0x2a,0x2e, 0x38,0x2a,0x2e,0x37,0x29,0x2c,0x35,0x23,0x26,0x30,0x1e,0x22,0x2a,0x1d,0x1f,0x28, 0x1c,0x1e,0x26,0x18,0x1a,0x22,0x18,0x1a,0x22,0x17,0x1a,0x21,0x15,0x17,0x1e,0x14, 0x16,0x1d,0x12,0x14,0x1a,0x12,0x13,0x19,0x10,0x12,0x17,0x0e,0x0f,0x14,0x0d,0x0e, 0x12,0x0c,0x0d,0x11,0x0a,0x0b,0x0e,0x09,0x0a,0x0c,0x08,0x09,0x0b,0x07,0x08,0x0a, 0x06,0x07,0x0a,0x06,0x07,0x0a,0x05,0x06,0x07,0x05,0x05,0x06,0x04,0x05,0x06,0x05, 0x05,0x07,0x7b,0x85,0xa3,0x52,0x5c,0x86,0x5a,0x51,0x77,0x5e,0x52,0x75,0x5e,0x52, 0x75,0x5e,0x52,0x75,0x5e,0x52,0x76,0x5e,0x53,0x76,0x5e,0x53,0x76,0x5e,0x53,0x76, 0x5e,0x53,0x76,0x5f,0x53,0x77,0x5f,0x53,0x77,0x5f,0x53,0x77,0x5f,0x53,0x77,0x5f, 0x53,0x77,0x6f,0x60,0x8b,0x08,0x07,0x0a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x32,0x38,0x4b, 0x52,0x50,0x7b,0x55,0x50,0x79,0x53,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52, 0x4f,0x7a,0x52,0x50,0x7b,0x52,0x53,0x7d,0x52,0x55,0x80,0x52,0x5d,0x85,0x54,0x5f, 0x89,0x57,0x64,0x8c,0x5a,0x66,0x8d,0x5d,0x53,0x7a,0x57,0x56,0x81,0xb9,0xbf,0xd1, 0xdb,0xdf,0xe7,0xd3,0xd8,0xe2,0xd6,0xda,0xe3,0xd3,0xd7,0xe1,0xcc,0xd2,0xde,0xc6, 0xcb,0xd9,0xbc,0xc3,0xd3,0xb3,0xba,0xce,0xaa,0xb1,0xc7,0xa1,0xa9,0xc1,0x9d,0xa7, 0xbe,0x99,0xa2,0xbb,0x95,0x9f,0xb9,0x93,0x9c,0xb7,0x92,0x9b,0xb7,0x90,0x9a,0xb5, 0x90,0x9a,0xb5,0x90,0x99,0xb4,0x8c,0x96,0xb2,0x89,0x93,0xb0,0x83,0x8d,0xac,0x81, 0x8b,0xaa,0x7a,0x84,0xa5,0x75,0x81,0xa3,0x73,0x7e,0xa1,0x6f,0x7b,0x9f,0x6e,0x7a, 0x9d,0x64,0x71,0x96,0x52,0x52,0x7c,0x64,0x50,0x6f,0x64,0x4e,0x6c,0x64,0x53,0x75, 0x64,0x53,0x75,0x64,0x53,0x76,0x64,0x53,0x75,0x64,0x53,0x75,0x64,0x53,0x74,0x64, 0x53,0x75,0x5d,0x52,0x78,0x5b,0x51,0x78,0x5b,0x51,0x78,0x5c,0x51,0x78,0x5d,0x52, 0x78,0x5d,0x52,0x78,0x5d,0x52,0x78,0x5d,0x52,0x78,0x5f,0x52,0x76,0x5f,0x52,0x76, 0x5f,0x52,0x76,0x5f,0x52,0x76,0x5f,0x52,0x76,0x5f,0x52,0x76,0x5f,0x52,0x76,0x5f, 0x52,0x76,0x5f,0x52,0x76,0x5f,0x52,0x76,0x5e,0x53,0x79,0x60,0x53,0x77,0x62,0x53, 0x77,0x55,0x50,0x79,0x62,0x4b,0x66,0x64,0x50,0x71,0x5d,0x64,0x82,0x35,0x27,0x30, 0x54,0x42,0x51,0x0a,0x08,0x0b,0x4d,0x56,0x70,0x60,0x53,0x77,0x5f,0x47,0x63,0x60, 0x53,0x77,0x5e,0x53,0x79,0x60,0x53,0x77,0x5f,0x53,0x79,0x5c,0x52,0x79,0x5c,0x52, 0x79,0x58,0x50,0x79,0x54,0x50,0x79,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7b, 0x52,0x54,0x7e,0x52,0x55,0x81,0x52,0x5d,0x88,0x56,0x62,0x8b,0x57,0x63,0x8c,0x60, 0x48,0x64,0x52,0x5c,0x85,0xd3,0xd7,0xe1,0xac,0xae,0xbf,0x78,0x68,0x84,0x68,0x6d, 0x92,0x68,0x6b,0x91,0x6a,0x74,0x98,0x73,0x7e,0xa0,0x0e,0x0f,0x12,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x43,0x43,0x44,0x81,0x8c,0xab, 0x52,0x50,0x7c,0x64,0x4e,0x6d,0x52,0x54,0x80,0x52,0x54,0x7e,0x52,0x56,0x81,0x52, 0x58,0x83,0x52,0x5d,0x86,0x53,0x5e,0x88,0x53,0x5e,0x88,0x54,0x5f,0x89,0x54,0x5f, 0x89,0x55,0x60,0x8a,0x54,0x5f,0x89,0x53,0x5f,0x89,0x52,0x52,0x7c,0x5d,0x52,0x79, 0x71,0x7c,0x9f,0x38,0x38,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x02, 0x03,0x03,0x03,0x03,0x04,0x03,0x03,0x04,0x04,0x04,0x05,0x04,0x04,0x05,0x04,0x05, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x07,0x06,0x06,0x07,0x06,0x07,0x09, 0x07,0x07,0x09,0x07,0x08,0x0a,0x08,0x09,0x0a,0x0a,0x0a,0x0b,0x0d,0x0e,0x10,0x14, 0x13,0x18,0x1e,0x1a,0x22,0x26,0x21,0x2b,0x27,0x22,0x2c,0x27,0x22,0x2c,0x2b,0x25, 0x30,0x2a,0x24,0x2f,0x20,0x1c,0x25,0x25,0x20,0x2a,0x34,0x2e,0x3a,0x43,0x3a,0x4a, 0x4b,0x41,0x51,0x60,0x5f,0x76,0x50,0x4d,0x66,0x44,0x43,0x59,0x3b,0x3d,0x51,0x3b, 0x3c,0x50,0x3e,0x3d,0x52,0x45,0x43,0x58,0x5a,0x57,0x72,0x60,0x61,0x7e,0x5e,0x67, 0x85,0x6e,0x76,0x8e,0x7c,0x81,0x99,0x79,0x6f,0x83,0x61,0x61,0x80,0x35,0x39,0x4b, 0x2a,0x27,0x33,0x2b,0x27,0x34,0x24,0x22,0x2d,0x16,0x16,0x1e,0x10,0x12,0x15,0x47, 0x3c,0x49,0x6e,0x77,0x93,0x4b,0x56,0x78,0x4b,0x48,0x6a,0x5c,0x53,0x77,0x5d,0x53, 0x78,0x5f,0x53,0x76,0x5f,0x53,0x77,0x5f,0x53,0x77,0x5f,0x53,0x77,0x60,0x53,0x76, 0x5f,0x54,0x77,0x5f,0x54,0x76,0x5f,0x55,0x76,0x5f,0x55,0x75,0x5a,0x52,0x6f,0x4e, 0x47,0x5c,0x24,0x23,0x2c,0x23,0x23,0x2e,0x25,0x23,0x2f,0x25,0x23,0x2e,0x1f,0x20, 0x2a,0x1d,0x1e,0x25,0x18,0x19,0x1e,0x11,0x13,0x16,0x0e,0x0f,0x12,0x89,0x77,0xa6, 0x73,0x65,0x90,0x4c,0x42,0x5d,0x59,0x4f,0x73,0x5b,0x51,0x77,0x5a,0x52,0x78,0x56, 0x50,0x78,0x57,0x50,0x78,0x53,0x4f,0x79,0x53,0x4f,0x79,0x51,0x4f,0x79,0x51,0x50, 0x79,0x4f,0x50,0x78,0x40,0x42,0x60,0x5a,0x5f,0x8d,0x26,0x25,0x36,0x0b,0x0d,0x0f, 0x0f,0x0f,0x13,0x34,0x2c,0x35,0x28,0x23,0x2a,0x2a,0x25,0x2d,0x29,0x25,0x2c,0x32, 0x34,0x44,0x66,0x73,0x9d,0x39,0x3e,0x57,0x37,0x3b,0x52,0x37,0x3b,0x53,0x4d,0x56, 0x76,0x56,0x5a,0x7f,0x1f,0x22,0x2b,0x23,0x25,0x2e,0x55,0x4c,0x60,0x56,0x4e,0x61, 0x74,0x7e,0x96,0x54,0x52,0x73,0x27,0x2a,0x36,0x1f,0x22,0x2a,0x1f,0x22,0x2c,0x20, 0x23,0x2c,0x1e,0x22,0x2a,0x3e,0x3a,0x48,0x54,0x4c,0x5e,0x58,0x4f,0x63,0x55,0x50, 0x6a,0x50,0x50,0x72,0x4b,0x47,0x67,0x2b,0x27,0x33,0x2e,0x29,0x36,0x2e,0x28,0x35, 0x2a,0x25,0x31,0x1c,0x19,0x22,0x19,0x19,0x22,0x1a,0x1a,0x22,0x2c,0x28,0x34,0x55, 0x48,0x5c,0x4e,0x43,0x55,0x50,0x4c,0x5f,0x4f,0x58,0x7e,0x58,0x50,0x73,0x5a,0x4e, 0x6c,0x55,0x49,0x66,0x4e,0x44,0x5b,0x54,0x4f,0x60,0x33,0x33,0x39,0x45,0x42,0x4a, 0x3b,0x38,0x40,0x62,0x5d,0x7c,0x63,0x5d,0x7a,0x62,0x5b,0x79,0x60,0x57,0x76,0x66, 0x5e,0x7c,0x6b,0x64,0x81,0x72,0x6d,0x89,0x7d,0x78,0x92,0x7d,0x79,0x93,0x86,0x82, 0x9c,0x76,0x70,0x8b,0x6e,0x67,0x84,0x71,0x6a,0x87,0x6a,0x5e,0x76,0x51,0x43,0x58, 0x53,0x44,0x5e,0x56,0x51,0x75,0x30,0x2f,0x40,0x37,0x3d,0x4e,0x46,0x4a,0x59,0x4c, 0x50,0x5e,0x4e,0x52,0x61,0x4d,0x52,0x5e,0x4a,0x4e,0x5c,0x46,0x4a,0x58,0x42,0x46, 0x54,0x3d,0x42,0x4e,0x38,0x3d,0x49,0x36,0x3a,0x46,0x33,0x37,0x43,0x32,0x36,0x42, 0x2d,0x31,0x3c,0x2c,0x30,0x3a,0x2c,0x2f,0x3a,0x2b,0x2f,0x3a,0x2e,0x32,0x3d,0x2e, 0x32,0x3c,0x2c,0x2f,0x3a,0x2a,0x2e,0x38,0x29,0x2c,0x36,0x26,0x29,0x32,0x22,0x25, 0x2e,0x1f,0x22,0x2b,0x1e,0x20,0x29,0x1c,0x1e,0x26,0x19,0x1b,0x23,0x19,0x1b,0x22, 0x16,0x19,0x20,0x16,0x17,0x1e,0x14,0x16,0x1d,0x13,0x15,0x1b,0x12,0x13,0x19,0x0f, 0x10,0x16,0x0e,0x0f,0x14,0x0d,0x0e,0x12,0x0a,0x0b,0x0e,0x0a,0x0a,0x0e,0x09,0x0a, 0x0d,0x08,0x09,0x0c,0x07,0x08,0x0a,0x06,0x07,0x0a,0x06,0x06,0x09,0x05,0x05,0x06, 0x05,0x05,0x06,0x05,0x05,0x06,0x6c,0x74,0x8d,0x57,0x62,0x8b,0x56,0x4f,0x77,0x5e, 0x52,0x75,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e,0x52,0x76,0x5e,0x53, 0x76,0x5e,0x53,0x76,0x5e,0x53,0x76,0x5e,0x53,0x76,0x5f,0x53,0x77,0x5f,0x53,0x77, 0x5f,0x53,0x77,0x5f,0x53,0x77,0x68,0x59,0x7f,0x1d,0x1a,0x24,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x42,0x49,0x62,0x52,0x4f,0x7a,0x55,0x50,0x79,0x54,0x50,0x79,0x52,0x4f,0x7a, 0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x50,0x7b,0x52,0x52,0x7c,0x52,0x57,0x83,0x52, 0x5d,0x88,0x55,0x60,0x8a,0x57,0x63,0x8b,0x57,0x64,0x8c,0x58,0x52,0x7a,0x56,0x57, 0x83,0xd0,0xd3,0xe0,0xd9,0xde,0xe7,0xd3,0xd8,0xe2,0xd2,0xd6,0xe1,0xd0,0xd5,0xe0, 0xca,0xcf,0xdd,0xc2,0xc8,0xd7,0xb9,0xc0,0xd1,0xaf,0xb5,0xc9,0xa7,0xaf,0xc4,0xa0, 0xa8,0xc0,0x99,0xa2,0xbb,0x96,0xa0,0xb9,0x94,0x9d,0xb8,0x92,0x9b,0xb7,0x91,0x9b, 0xb5,0x91,0x9b,0xb5,0x91,0x9a,0xb5,0x90,0x99,0xb4,0x8b,0x95,0xb2,0x89,0x93,0xb0, 0x83,0x8d,0xac,0x7e,0x8a,0xa9,0x77,0x83,0xa4,0x74,0x80,0xa2,0x72,0x7e,0xa1,0x74, 0x80,0xa1,0x72,0x7d,0xa0,0x63,0x6f,0x95,0x57,0x50,0x79,0x64,0x50,0x6f,0x64,0x52, 0x72,0x64,0x53,0x75,0x64,0x53,0x75,0x64,0x53,0x76,0x64,0x53,0x76,0x64,0x53,0x75, 0x64,0x53,0x75,0x64,0x52,0x71,0x60,0x53,0x77,0x5c,0x52,0x79,0x5b,0x51,0x78,0x5d, 0x52,0x78,0x5d,0x52,0x78,0x5d,0x52,0x78,0x5d,0x52,0x78,0x5d,0x52,0x78,0x5d,0x52, 0x78,0x5f,0x52,0x76,0x5f,0x52,0x76,0x5f,0x52,0x76,0x5f,0x52,0x76,0x5f,0x52,0x76, 0x5f,0x52,0x76,0x5f,0x52,0x76,0x5f,0x52,0x76,0x60,0x53,0x77,0x5e,0x53,0x79,0x60, 0x53,0x77,0x5a,0x52,0x79,0x5e,0x53,0x79,0x5c,0x44,0x5e,0x52,0x54,0x7f,0x47,0x45, 0x54,0x3c,0x2d,0x37,0x50,0x3f,0x50,0x00,0x00,0x00,0x44,0x49,0x57,0x52,0x5d,0x86, 0x5c,0x44,0x5f,0x62,0x53,0x77,0x60,0x53,0x77,0x5e,0x53,0x79,0x5e,0x53,0x79,0x5e, 0x53,0x79,0x5c,0x52,0x79,0x58,0x50,0x79,0x54,0x50,0x79,0x52,0x4f,0x7a,0x52,0x4f, 0x7a,0x52,0x50,0x7b,0x52,0x52,0x7c,0x52,0x55,0x81,0x52,0x5d,0x86,0x55,0x60,0x8a, 0x55,0x60,0x8a,0x64,0x4e,0x6c,0x52,0x4f,0x7a,0xc9,0xce,0xdb,0xb8,0xbe,0xcf,0x78, 0x66,0x81,0x68,0x69,0x8e,0x68,0x72,0x96,0x6d,0x77,0x9a,0x74,0x7f,0xa1,0x1a,0x1c, 0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03, 0x03,0x99,0xa0,0xb1,0x5a,0x66,0x8e,0x63,0x4c,0x69,0x52,0x4f,0x7a,0x52,0x53,0x7e, 0x52,0x57,0x83,0x52,0x56,0x81,0x52,0x5d,0x86,0x52,0x5d,0x88,0x52,0x5d,0x88,0x53, 0x5e,0x88,0x53,0x5f,0x89,0x54,0x5f,0x89,0x53,0x5f,0x89,0x53,0x5e,0x89,0x52,0x5d, 0x88,0x63,0x53,0x77,0x52,0x5d,0x85,0x81,0x84,0x8e,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x19,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x03,0x03,0x02,0x03,0x03,0x02,0x03,0x03,0x03,0x03,0x04,0x03,0x04,0x05,0x04, 0x04,0x05,0x04,0x05,0x06,0x05,0x06,0x06,0x05,0x06,0x06,0x06,0x06,0x07,0x06,0x06, 0x07,0x06,0x06,0x08,0x07,0x07,0x09,0x08,0x08,0x0a,0x08,0x09,0x0a,0x09,0x0a,0x0b, 0x09,0x0a,0x0b,0x0b,0x0c,0x0e,0x12,0x11,0x17,0x26,0x23,0x2b,0x34,0x2f,0x38,0x42, 0x3d,0x46,0x30,0x2a,0x34,0x31,0x2a,0x35,0x38,0x33,0x3d,0x31,0x2f,0x37,0x23,0x20, 0x2a,0x39,0x30,0x3d,0x42,0x3a,0x47,0x56,0x5b,0x74,0x40,0x46,0x62,0x3e,0x44,0x60, 0x41,0x44,0x5f,0x39,0x3b,0x51,0x36,0x39,0x4b,0x39,0x39,0x4c,0x3d,0x3d,0x52,0x41, 0x40,0x56,0x4f,0x4d,0x66,0x50,0x55,0x73,0x5c,0x63,0x7f,0x72,0x69,0x7d,0x5a,0x5b, 0x7a,0x2e,0x30,0x42,0x2a,0x29,0x36,0x2a,0x29,0x37,0x24,0x23,0x31,0x1a,0x1d,0x25, 0x16,0x18,0x1c,0x44,0x3a,0x47,0x6c,0x74,0x8e,0x4d,0x58,0x78,0x49,0x47,0x68,0x5c, 0x53,0x77,0x5d,0x53,0x78,0x5f,0x53,0x76,0x5f,0x53,0x77,0x5f,0x53,0x77,0x5f,0x53, 0x77,0x60,0x53,0x76,0x5f,0x54,0x77,0x5f,0x54,0x76,0x60,0x55,0x76,0x5f,0x55,0x77, 0x5b,0x53,0x70,0x51,0x49,0x5f,0x23,0x24,0x2d,0x2a,0x28,0x36,0x37,0x30,0x3e,0x36, 0x2f,0x3d,0x2b,0x27,0x33,0x1e,0x1f,0x29,0x1d,0x1d,0x23,0x17,0x17,0x1c,0x11,0x12, 0x15,0x82,0x70,0x9c,0x76,0x69,0x94,0x4a,0x43,0x5d,0x57,0x4d,0x71,0x5a,0x52,0x76, 0x5a,0x52,0x78,0x5a,0x52,0x78,0x57,0x50,0x78,0x55,0x50,0x78,0x52,0x4f,0x79,0x52, 0x50,0x79,0x51,0x4f,0x78,0x50,0x4f,0x78,0x40,0x41,0x5e,0x58,0x5c,0x8b,0x29,0x2a, 0x3d,0x0a,0x0b,0x0e,0x0c,0x0d,0x10,0x2a,0x25,0x2e,0x2b,0x24,0x2c,0x29,0x23,0x2b, 0x29,0x24,0x2d,0x27,0x23,0x2b,0x5b,0x66,0x8b,0x49,0x51,0x6f,0x37,0x3c,0x54,0x35, 0x39,0x52,0x37,0x3c,0x54,0x52,0x5d,0x81,0x27,0x29,0x35,0x1f,0x22,0x2a,0x4f,0x47, 0x5a,0x56,0x4d,0x61,0x76,0x7e,0x97,0x51,0x59,0x7b,0x31,0x32,0x43,0x20,0x23,0x2e, 0x21,0x22,0x2d,0x22,0x23,0x30,0x1e,0x22,0x2c,0x1e,0x21,0x2a,0x22,0x24,0x2e,0x4d, 0x46,0x58,0x59,0x4f,0x64,0x59,0x4f,0x64,0x52,0x4e,0x6b,0x51,0x4b,0x6b,0x2a,0x29, 0x38,0x27,0x24,0x30,0x2b,0x26,0x32,0x28,0x24,0x2f,0x22,0x1e,0x28,0x25,0x21,0x2d, 0x20,0x1e,0x29,0x34,0x2e,0x3c,0x43,0x39,0x49,0x3c,0x34,0x40,0x59,0x5e,0x76,0x54, 0x56,0x7c,0x64,0x5b,0x7a,0x66,0x5c,0x78,0x66,0x5d,0x74,0x6c,0x63,0x79,0x76,0x72, 0x80,0x6e,0x6a,0x73,0x4c,0x4a,0x54,0x67,0x64,0x81,0x66,0x61,0x7e,0x63,0x5e,0x7b, 0x5f,0x58,0x75,0x62,0x5a,0x78,0x67,0x60,0x7d,0x6b,0x65,0x81,0x6c,0x66,0x83,0x6a, 0x67,0x85,0x74,0x73,0x8f,0x7b,0x78,0x91,0x81,0x7c,0x94,0x83,0x7f,0x96,0x7a,0x71, 0x87,0x55,0x49,0x5f,0x56,0x46,0x60,0x52,0x52,0x70,0x38,0x30,0x3c,0x36,0x32,0x41, 0x30,0x35,0x45,0x3e,0x43,0x50,0x47,0x4c,0x59,0x4a,0x4e,0x5c,0x4a,0x4f,0x5d,0x4a, 0x4e,0x5d,0x4a,0x4f,0x5d,0x4a,0x4f,0x5d,0x45,0x4a,0x57,0x3e,0x42,0x4f,0x37,0x3b, 0x47,0x33,0x37,0x43,0x31,0x35,0x40,0x2e,0x32,0x3d,0x2a,0x2e,0x39,0x2d,0x30,0x3b, 0x2d,0x30,0x3a,0x2d,0x30,0x3b,0x2c,0x30,0x3a,0x2a,0x2e,0x38,0x28,0x2b,0x36,0x26, 0x2a,0x33,0x26,0x29,0x32,0x25,0x27,0x31,0x23,0x26,0x2e,0x1e,0x22,0x2a,0x1c,0x1f, 0x27,0x19,0x1c,0x24,0x18,0x1a,0x22,0x16,0x19,0x21,0x16,0x18,0x20,0x14,0x16,0x1c, 0x12,0x14,0x1a,0x11,0x12,0x18,0x0e,0x10,0x15,0x0d,0x0e,0x12,0x0b,0x0d,0x10,0x0a, 0x0b,0x0e,0x0a,0x0a,0x0e,0x09,0x0a,0x0c,0x08,0x09,0x0b,0x06,0x07,0x0a,0x06,0x06, 0x09,0x05,0x05,0x06,0x05,0x05,0x06,0x05,0x05,0x06,0x54,0x5a,0x6a,0x60,0x6c,0x90, 0x52,0x4f,0x78,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e, 0x52,0x75,0x5e,0x52,0x76,0x5e,0x53,0x76,0x5e,0x53,0x76,0x5e,0x53,0x76,0x5e,0x53, 0x76,0x5f,0x53,0x77,0x5f,0x53,0x77,0x5f,0x53,0x77,0x62,0x55,0x7c,0x40,0x37,0x4f, 0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x4b,0x55,0x76,0x52,0x4f,0x7a,0x55,0x50,0x79,0x54,0x50, 0x79,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x50,0x7b,0x52,0x54,0x7e, 0x52,0x56,0x81,0x52,0x5d,0x86,0x55,0x60,0x8a,0x58,0x64,0x8d,0x58,0x65,0x8d,0x53, 0x50,0x7a,0x54,0x5c,0x86,0xdb,0xdf,0xe8,0xd5,0xd9,0xe2,0xd1,0xd5,0xe0,0xcc,0xd1, 0xde,0xca,0xcf,0xdd,0xc3,0xc9,0xd7,0xbc,0xc2,0xd3,0xb3,0xba,0xcc,0xab,0xb2,0xc7, 0xa4,0xac,0xc2,0x9c,0xa5,0xbe,0x99,0xa1,0xbb,0x96,0xa0,0xb9,0x94,0x9d,0xb8,0x93, 0x9c,0xb7,0x92,0x9b,0xb7,0x90,0x99,0xb4,0x90,0x99,0xb4,0x8e,0x98,0xb3,0x8a,0x94, 0xb1,0x88,0x92,0xb0,0x83,0x8e,0xac,0x7d,0x88,0xa8,0x7a,0x84,0xa5,0x73,0x7e,0xa1, 0x72,0x7d,0xa0,0x79,0x84,0xa4,0x72,0x7d,0xa0,0x5e,0x6b,0x92,0x63,0x53,0x77,0x64, 0x52,0x72,0x64,0x53,0x73,0x64,0x53,0x76,0x64,0x53,0x75,0x64,0x53,0x76,0x64,0x53, 0x76,0x64,0x53,0x76,0x64,0x53,0x74,0x63,0x4b,0x69,0x63,0x53,0x77,0x5e,0x53,0x79, 0x5c,0x52,0x79,0x5d,0x52,0x79,0x5e,0x53,0x79,0x5e,0x53,0x79,0x5e,0x53,0x79,0x5e, 0x53,0x79,0x60,0x53,0x77,0x5e,0x53,0x79,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53, 0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77, 0x60,0x53,0x77,0x5e,0x53,0x79,0x52,0x4f,0x7a,0x60,0x48,0x64,0x64,0x4f,0x6e,0x62, 0x6c,0x8e,0x32,0x26,0x2d,0x54,0x42,0x51,0x1a,0x16,0x1c,0x00,0x00,0x00,0x2c,0x2e, 0x33,0x5f,0x6b,0x92,0x62,0x4a,0x65,0x62,0x53,0x77,0x5f,0x53,0x77,0x5e,0x53,0x79, 0x5e,0x53,0x79,0x5b,0x52,0x79,0x5a,0x52,0x79,0x56,0x50,0x79,0x56,0x50,0x79,0x53, 0x50,0x79,0x52,0x4f,0x7a,0x52,0x4f,0x7b,0x52,0x52,0x7c,0x52,0x55,0x81,0x52,0x5c, 0x85,0x54,0x5f,0x89,0x56,0x62,0x8b,0x64,0x53,0x74,0x64,0x53,0x75,0xb7,0xbe,0xcf, 0xcc,0xd1,0xde,0x7f,0x6e,0x87,0x68,0x6d,0x93,0x68,0x72,0x97,0x6b,0x76,0x9a,0x75, 0x7f,0xa1,0x23,0x26,0x2e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x6c,0x6d,0x70,0x6e,0x7a,0x9d,0x5d,0x52,0x79,0x64,0x53, 0x76,0x52,0x54,0x7e,0x52,0x54,0x80,0x52,0x56,0x81,0x52,0x5a,0x84,0x52,0x5d,0x88, 0x52,0x5d,0x88,0x53,0x5e,0x89,0x53,0x5e,0x89,0x53,0x5f,0x89,0x53,0x5f,0x89,0x54, 0x5f,0x89,0x53,0x5f,0x89,0x52,0x4f,0x7a,0x60,0x53,0x77,0x74,0x7f,0xa0,0x23,0x23, 0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x09,0x09,0x52,0x52,0x52,0x32,0x32,0x32, 0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x02,0x03,0x03,0x02,0x03,0x03,0x03,0x03,0x04, 0x03,0x03,0x04,0x03,0x03,0x04,0x04,0x04,0x05,0x04,0x05,0x06,0x04,0x05,0x06,0x06, 0x06,0x06,0x06,0x06,0x07,0x07,0x07,0x09,0x07,0x07,0x09,0x07,0x08,0x09,0x08,0x09, 0x0a,0x09,0x09,0x0a,0x0a,0x0a,0x0c,0x0a,0x0a,0x0d,0x0b,0x0c,0x10,0x1a,0x19,0x1f, 0x2f,0x2c,0x34,0x4c,0x48,0x4f,0x3f,0x3a,0x43,0x42,0x3d,0x46,0x39,0x32,0x3d,0x43, 0x3d,0x46,0x56,0x52,0x5a,0x2d,0x27,0x31,0x3d,0x35,0x41,0x5a,0x62,0x7a,0x44,0x4c, 0x6a,0x41,0x49,0x67,0x3f,0x47,0x66,0x44,0x48,0x64,0x3f,0x41,0x5a,0x3b,0x3c,0x52, 0x3d,0x3e,0x53,0x3b,0x3b,0x4e,0x3e,0x3d,0x50,0x54,0x50,0x68,0x55,0x57,0x78,0x6a, 0x66,0x7f,0x61,0x65,0x82,0x37,0x3d,0x50,0x2f,0x2f,0x40,0x30,0x35,0x45,0x34,0x39, 0x46,0x30,0x32,0x39,0x2a,0x2a,0x2e,0x45,0x3c,0x49,0x69,0x70,0x87,0x4e,0x58,0x7b, 0x47,0x45,0x68,0x59,0x51,0x74,0x5d,0x52,0x77,0x5e,0x53,0x76,0x5f,0x53,0x77,0x5f, 0x52,0x76,0x5f,0x53,0x77,0x60,0x53,0x76,0x5f,0x54,0x77,0x5f,0x54,0x76,0x60,0x54, 0x76,0x60,0x55,0x77,0x5d,0x55,0x73,0x50,0x49,0x60,0x24,0x24,0x30,0x34,0x2f,0x3e, 0x3e,0x36,0x46,0x3d,0x35,0x44,0x35,0x2e,0x3b,0x22,0x20,0x2a,0x1d,0x1d,0x23,0x1b, 0x1a,0x20,0x18,0x17,0x1c,0x75,0x65,0x8c,0x79,0x6b,0x97,0x4c,0x42,0x5e,0x57,0x4d, 0x6e,0x59,0x52,0x76,0x5b,0x52,0x78,0x5b,0x52,0x77,0x57,0x50,0x78,0x57,0x50,0x78, 0x53,0x4f,0x79,0x52,0x50,0x79,0x51,0x4f,0x79,0x51,0x4e,0x78,0x3f,0x3f,0x5d,0x5b, 0x5c,0x89,0x2d,0x2d,0x42,0x0a,0x0a,0x0d,0x0b,0x0c,0x0f,0x12,0x12,0x16,0x38,0x30, 0x3a,0x2a,0x24,0x2c,0x2a,0x25,0x2d,0x28,0x24,0x2c,0x3b,0x3e,0x54,0x5d,0x6a,0x91, 0x3e,0x44,0x5f,0x37,0x3b,0x53,0x36,0x3a,0x51,0x3f,0x45,0x61,0x47,0x48,0x66,0x20, 0x22,0x2b,0x31,0x30,0x3c,0x56,0x4d,0x60,0x70,0x73,0x89,0x59,0x62,0x83,0x4f,0x4c, 0x6c,0x28,0x26,0x34,0x2a,0x28,0x36,0x28,0x26,0x33,0x25,0x24,0x31,0x22,0x22,0x2e, 0x20,0x20,0x2b,0x1e,0x20,0x2a,0x3e,0x3a,0x49,0x59,0x4f,0x64,0x58,0x4e,0x63,0x55, 0x4d,0x67,0x51,0x4c,0x6a,0x2f,0x2d,0x40,0x25,0x22,0x2e,0x2e,0x29,0x35,0x26,0x22, 0x2d,0x20,0x1d,0x26,0x28,0x25,0x2f,0x21,0x1f,0x2a,0x37,0x30,0x3d,0x37,0x31,0x3e, 0x3a,0x35,0x42,0x5d,0x68,0x8a,0x59,0x58,0x7c,0x78,0x6f,0x89,0x7d,0x74,0x8a,0x76, 0x6f,0x82,0x79,0x73,0x86,0x78,0x75,0x8d,0x71,0x6e,0x8a,0x70,0x6e,0x8a,0x6d,0x6a, 0x85,0x67,0x62,0x7d,0x62,0x5b,0x77,0x64,0x5d,0x79,0x65,0x5e,0x7b,0x66,0x61,0x7d, 0x62,0x5d,0x7b,0x58,0x51,0x71,0x5a,0x53,0x73,0x6d,0x6a,0x86,0x86,0x82,0x99,0x8a, 0x85,0x9b,0x85,0x7d,0x91,0x68,0x60,0x75,0x58,0x4b,0x66,0x52,0x51,0x6e,0x32,0x29, 0x33,0x36,0x2f,0x3c,0x2a,0x2a,0x38,0x2e,0x32,0x3f,0x38,0x3d,0x4a,0x40,0x44,0x51, 0x45,0x49,0x56,0x4b,0x50,0x5e,0x53,0x58,0x66,0x55,0x5a,0x67,0x52,0x56,0x64,0x4a, 0x4f,0x5d,0x3f,0x43,0x50,0x45,0x49,0x54,0x34,0x38,0x44,0x2b,0x2f,0x3a,0x2c,0x2f, 0x3a,0x2b,0x2e,0x3a,0x2b,0x2e,0x3a,0x2c,0x2f,0x39,0x28,0x2c,0x37,0x26,0x2a,0x35, 0x27,0x2a,0x34,0x26,0x2a,0x34,0x28,0x2b,0x35,0x29,0x2c,0x36,0x26,0x28,0x32,0x21, 0x23,0x2d,0x1d,0x1f,0x28,0x1a,0x1d,0x26,0x18,0x1a,0x23,0x17,0x1a,0x22,0x17,0x1a, 0x21,0x15,0x17,0x1e,0x12,0x14,0x1a,0x11,0x12,0x19,0x0f,0x11,0x16,0x0e,0x0e,0x13, 0x0c,0x0d,0x11,0x0b,0x0c,0x10,0x0a,0x0b,0x0e,0x09,0x0a,0x0d,0x08,0x09,0x0c,0x07, 0x07,0x0a,0x06,0x07,0x09,0x06,0x06,0x08,0x05,0x06,0x07,0x05,0x06,0x07,0x36,0x39, 0x43,0x6b,0x77,0x98,0x50,0x4f,0x79,0x5e,0x53,0x76,0x5e,0x52,0x75,0x5e,0x52,0x75, 0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e,0x52,0x76,0x5e,0x53,0x76,0x5e, 0x53,0x76,0x5e,0x53,0x76,0x5e,0x53,0x76,0x5e,0x53,0x76,0x5f,0x53,0x77,0x5f,0x53, 0x78,0x59,0x4e,0x70,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x56,0x60,0x85,0x53,0x4f,0x7a,0x55, 0x50,0x79,0x54,0x50,0x79,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x50, 0x7b,0x52,0x54,0x7e,0x52,0x57,0x82,0x53,0x5d,0x88,0x55,0x60,0x8a,0x58,0x65,0x8d, 0x57,0x64,0x8c,0x53,0x52,0x7b,0x58,0x64,0x8d,0xdf,0xe2,0xe9,0xce,0xd2,0xde,0xce, 0xd1,0xde,0xc8,0xcc,0xdb,0xc3,0xc9,0xd8,0xbb,0xc1,0xd2,0xb5,0xbc,0xcf,0xaf,0xb5, 0xc9,0xa5,0xad,0xc3,0xa0,0xa8,0xbf,0x9b,0xa4,0xbc,0x98,0xa1,0xba,0x95,0x9f,0xb9, 0x93,0x9c,0xb8,0x91,0x9b,0xb5,0x91,0x9a,0xb5,0x8e,0x98,0xb3,0x8e,0x99,0xb4,0x8e, 0x98,0xb3,0x8b,0x94,0xb1,0x84,0x90,0xad,0x82,0x8c,0xab,0x7e,0x89,0xa9,0x77,0x83, 0xa4,0x75,0x81,0xa2,0x74,0x80,0xa2,0x7e,0x8a,0xa9,0x6e,0x7a,0x9d,0x56,0x62,0x8b, 0x64,0x53,0x75,0x64,0x53,0x74,0x64,0x53,0x75,0x64,0x53,0x76,0x64,0x53,0x75,0x64, 0x53,0x76,0x64,0x53,0x76,0x64,0x53,0x75,0x64,0x53,0x74,0x64,0x4f,0x6e,0x64,0x52, 0x72,0x60,0x53,0x77,0x5d,0x52,0x79,0x5d,0x52,0x79,0x5e,0x53,0x79,0x5e,0x53,0x79, 0x5e,0x53,0x79,0x5e,0x53,0x79,0x60,0x53,0x77,0x5e,0x53,0x79,0x60,0x53,0x77,0x60, 0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53, 0x77,0x60,0x53,0x77,0x5e,0x53,0x79,0x55,0x50,0x79,0x5d,0x52,0x79,0x5b,0x43,0x5d, 0x52,0x5d,0x86,0x6e,0x6c,0x79,0x3c,0x2e,0x38,0x69,0x55,0x6a,0x00,0x00,0x00,0x00, 0x00,0x00,0x07,0x07,0x08,0x6e,0x79,0x9a,0x64,0x50,0x6f,0x64,0x53,0x76,0x5e,0x53, 0x79,0x5c,0x52,0x79,0x5d,0x52,0x79,0x58,0x50,0x79,0x57,0x50,0x79,0x55,0x50,0x79, 0x55,0x50,0x79,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7b,0x52,0x50,0x7b,0x52, 0x55,0x80,0x52,0x5b,0x85,0x53,0x5f,0x89,0x55,0x60,0x8a,0x64,0x53,0x74,0x60,0x48, 0x65,0xa9,0xb0,0xc6,0xd7,0xda,0xe5,0x87,0x77,0x8e,0x68,0x6a,0x8f,0x68,0x72,0x97, 0x6c,0x76,0x9a,0x76,0x81,0xa2,0x2c,0x30,0x3b,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x18,0x90,0x98,0xb3,0x52, 0x5a,0x84,0x64,0x50,0x71,0x52,0x50,0x7b,0x52,0x53,0x7d,0x52,0x55,0x81,0x52,0x57, 0x82,0x52,0x5d,0x86,0x52,0x5d,0x88,0x53,0x5e,0x88,0x53,0x5e,0x88,0x54,0x5f,0x89, 0x54,0x5f,0x89,0x53,0x5f,0x89,0x53,0x5f,0x89,0x52,0x5c,0x86,0x64,0x53,0x74,0x52, 0x58,0x83,0x74,0x78,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x26,0x26,0x26,0x54,0x54, 0x54,0x1d,0x1d,0x1d,0x0f,0x0f,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x02,0x03,0x03,0x02,0x02, 0x02,0x02,0x03,0x03,0x02,0x03,0x03,0x03,0x03,0x04,0x04,0x04,0x05,0x05,0x05,0x06, 0x05,0x05,0x06,0x06,0x06,0x06,0x06,0x06,0x07,0x06,0x07,0x09,0x07,0x08,0x09,0x07, 0x07,0x09,0x09,0x09,0x0a,0x09,0x0a,0x0b,0x0a,0x0a,0x0c,0x0a,0x0a,0x0d,0x0a,0x0a, 0x0d,0x0c,0x0c,0x0f,0x16,0x17,0x1b,0x2e,0x2c,0x32,0x1b,0x18,0x1f,0x2c,0x28,0x30, 0x4b,0x45,0x4e,0x4c,0x46,0x50,0x56,0x52,0x59,0x4a,0x43,0x4c,0x4a,0x43,0x4d,0x66, 0x6f,0x88,0x49,0x53,0x72,0x48,0x4f,0x71,0x47,0x50,0x71,0x45,0x4e,0x6f,0x42,0x49, 0x69,0x47,0x4a,0x67,0x47,0x48,0x64,0x42,0x42,0x5a,0x40,0x3f,0x53,0x50,0x4b,0x63, 0x5f,0x58,0x75,0x58,0x50,0x6d,0x54,0x59,0x7b,0x37,0x3d,0x50,0x33,0x32,0x46,0x34, 0x34,0x46,0x3e,0x42,0x4e,0x3e,0x40,0x46,0x3b,0x3d,0x41,0x47,0x3f,0x4a,0x6a,0x6f, 0x86,0x4e,0x58,0x7b,0x47,0x46,0x69,0x59,0x50,0x6f,0x5f,0x52,0x75,0x5e,0x53,0x76, 0x5f,0x53,0x77,0x5f,0x52,0x76,0x5f,0x53,0x77,0x60,0x53,0x76,0x5f,0x54,0x77,0x5f, 0x54,0x76,0x5f,0x55,0x76,0x60,0x56,0x77,0x5f,0x56,0x76,0x53,0x4c,0x65,0x25,0x25, 0x30,0x32,0x30,0x3f,0x3a,0x36,0x47,0x3b,0x36,0x46,0x33,0x2e,0x3b,0x21,0x20,0x2a, 0x1e,0x1e,0x25,0x1b,0x1b,0x21,0x1a,0x1a,0x1f,0x68,0x5a,0x7c,0x7a,0x6b,0x97,0x4c, 0x43,0x5f,0x55,0x4c,0x6a,0x5b,0x52,0x77,0x5a,0x52,0x78,0x5b,0x52,0x77,0x57,0x50, 0x78,0x57,0x50,0x78,0x55,0x50,0x78,0x52,0x4f,0x79,0x51,0x4e,0x79,0x50,0x4e,0x78, 0x3d,0x3c,0x5c,0x59,0x5a,0x88,0x32,0x32,0x4a,0x0a,0x0a,0x0d,0x0b,0x0c,0x0f,0x0d, 0x0e,0x11,0x41,0x38,0x45,0x33,0x2b,0x36,0x2a,0x24,0x2c,0x2a,0x25,0x2d,0x29,0x25, 0x2e,0x63,0x6e,0x9a,0x50,0x5b,0x7d,0x39,0x3e,0x59,0x34,0x39,0x51,0x35,0x3a,0x51, 0x4d,0x54,0x75,0x20,0x23,0x2b,0x22,0x24,0x2e,0x56,0x4d,0x61,0x56,0x4d,0x60,0x65, 0x6e,0x8c,0x4e,0x4e,0x72,0x35,0x32,0x44,0x2f,0x2a,0x39,0x2f,0x2b,0x38,0x31,0x2c, 0x3a,0x33,0x2e,0x3b,0x31,0x2c,0x3a,0x28,0x26,0x32,0x1e,0x1f,0x2a,0x32,0x30,0x3e, 0x57,0x4d,0x61,0x58,0x4d,0x62,0x57,0x4d,0x64,0x52,0x4d,0x69,0x39,0x34,0x48,0x2f, 0x29,0x36,0x2b,0x26,0x32,0x1a,0x19,0x21,0x1d,0x1c,0x24,0x1c,0x1b,0x26,0x1b,0x1b, 0x25,0x37,0x32,0x3e,0x33,0x2d,0x38,0x48,0x45,0x53,0x59,0x65,0x86,0x6d,0x67,0x85, 0x72,0x6a,0x86,0x62,0x5c,0x77,0x5e,0x5b,0x74,0x6d,0x6a,0x84,0x71,0x6f,0x89,0x72, 0x6f,0x89,0x75,0x72,0x8b,0x7a,0x76,0x8f,0x78,0x73,0x8a,0x71,0x6c,0x86,0x6a,0x68, 0x85,0x6b,0x6a,0x87,0x6b,0x6a,0x86,0x5b,0x59,0x79,0x59,0x51,0x71,0x58,0x55,0x75, 0x7f,0x7c,0x92,0x9f,0x9a,0xab,0xac,0xa6,0xb2,0x9b,0x94,0xa0,0x76,0x72,0x88,0x52, 0x54,0x75,0x2f,0x29,0x34,0x2b,0x28,0x36,0x25,0x27,0x34,0x2a,0x2e,0x3a,0x2d,0x31, 0x3d,0x31,0x35,0x41,0x38,0x3c,0x49,0x44,0x49,0x56,0x54,0x58,0x66,0x5a,0x5f,0x6d, 0x5a,0x60,0x6e,0x57,0x5c,0x6a,0x4c,0x51,0x5e,0x50,0x54,0x60,0x58,0x5b,0x66,0x32, 0x37,0x44,0x2c,0x2f,0x3c,0x2a,0x2e,0x39,0x2a,0x2d,0x39,0x29,0x2c,0x37,0x27,0x2b, 0x36,0x27,0x2a,0x35,0x26,0x29,0x34,0x26,0x29,0x33,0x29,0x2c,0x36,0x29,0x2c,0x36, 0x26,0x29,0x33,0x20,0x23,0x2d,0x1d,0x20,0x29,0x1a,0x1d,0x26,0x1a,0x1c,0x24,0x18, 0x1a,0x22,0x17,0x1a,0x21,0x16,0x18,0x1f,0x14,0x16,0x1d,0x12,0x13,0x1a,0x10,0x12, 0x17,0x0e,0x0f,0x14,0x0d,0x0e,0x12,0x0b,0x0c,0x10,0x0a,0x0a,0x0e,0x0a,0x0a,0x0e, 0x09,0x0a,0x0c,0x07,0x08,0x0a,0x07,0x07,0x0a,0x06,0x06,0x08,0x05,0x06,0x07,0x06, 0x06,0x07,0x19,0x1b,0x21,0x71,0x7d,0x9e,0x50,0x53,0x7e,0x5c,0x52,0x77,0x5e,0x51, 0x75,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e,0x52,0x75, 0x5e,0x52,0x76,0x5e,0x52,0x76,0x5e,0x53,0x76,0x5e,0x53,0x76,0x5e,0x53,0x76,0x5e, 0x53,0x76,0x5e,0x53,0x76,0x67,0x5a,0x80,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0a,0x0b,0x0f,0x55,0x60,0x89, 0x54,0x50,0x79,0x55,0x50,0x79,0x54,0x50,0x79,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52, 0x4f,0x7b,0x52,0x52,0x7c,0x52,0x54,0x7e,0x52,0x58,0x83,0x53,0x5e,0x88,0x56,0x62, 0x8b,0x5a,0x65,0x8d,0x5a,0x65,0x8d,0x52,0x56,0x81,0x6a,0x74,0x99,0xd2,0xd7,0xe1, 0xc8,0xcc,0xda,0xc6,0xca,0xd8,0xc3,0xc9,0xd7,0xc0,0xc4,0xd5,0xb8,0xbe,0xd0,0xb0, 0xb7,0xca,0xaa,0xb2,0xc8,0xa3,0xaa,0xc1,0x9f,0xa8,0xbf,0x99,0xa2,0xbb,0x96,0xa0, 0xba,0x94,0x9d,0xb8,0x93,0x9c,0xb7,0x93,0x9c,0xb7,0x90,0x9a,0xb5,0x8e,0x99,0xb4, 0x8d,0x96,0xb3,0x8b,0x94,0xb2,0x8a,0x93,0xb1,0x86,0x91,0xaf,0x81,0x8c,0xab,0x7c, 0x88,0xa8,0x77,0x82,0xa4,0x72,0x7e,0xa1,0x76,0x82,0xa3,0x83,0x8d,0xac,0x6e,0x7a, 0x9d,0x52,0x55,0x81,0x64,0x53,0x76,0x64,0x53,0x74,0x64,0x53,0x75,0x64,0x53,0x76, 0x64,0x53,0x75,0x64,0x53,0x76,0x64,0x53,0x76,0x64,0x53,0x74,0x64,0x53,0x74,0x64, 0x53,0x74,0x64,0x4e,0x6d,0x64,0x53,0x76,0x56,0x50,0x79,0x5d,0x52,0x79,0x5e,0x53, 0x79,0x5e,0x53,0x79,0x5e,0x53,0x79,0x5e,0x53,0x79,0x5e,0x53,0x79,0x5e,0x53,0x79, 0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60, 0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x5e,0x53,0x79,0x52,0x4f,0x7a,0x60,0x48, 0x65,0x64,0x4f,0x6e,0x6c,0x77,0x99,0x3d,0x31,0x39,0x51,0x3f,0x4e,0x30,0x29,0x34, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x74,0x7b,0x8e,0x58,0x50,0x79,0x64, 0x52,0x72,0x5e,0x53,0x79,0x5c,0x52,0x79,0x5a,0x52,0x79,0x5a,0x52,0x79,0x57,0x50, 0x79,0x56,0x50,0x79,0x55,0x50,0x79,0x54,0x50,0x79,0x52,0x4f,0x7a,0x52,0x4f,0x7a, 0x52,0x52,0x7c,0x52,0x53,0x7e,0x52,0x5a,0x84,0x53,0x5d,0x88,0x57,0x63,0x8c,0x60, 0x53,0x77,0x5f,0x48,0x64,0x98,0xa1,0xba,0xd7,0xda,0xe5,0x8a,0x7d,0x92,0x68,0x69, 0x8f,0x6a,0x74,0x98,0x6a,0x75,0x99,0x73,0x7e,0xa0,0x34,0x39,0x47,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x8a,0x8d,0x95,0x60,0x6d,0x93,0x63,0x53,0x77,0x5d,0x52,0x79,0x52,0x52,0x7d,0x52, 0x54,0x80,0x52,0x55,0x81,0x52,0x5c,0x86,0x52,0x5d,0x86,0x52,0x5d,0x88,0x53,0x5e, 0x89,0x54,0x5f,0x89,0x54,0x5f,0x89,0x53,0x5f,0x89,0x53,0x5e,0x89,0x53,0x5e,0x88, 0x54,0x50,0x79,0x5e,0x53,0x79,0x76,0x80,0xa0,0x17,0x17,0x17,0x05,0x05,0x05,0x53, 0x53,0x53,0x33,0x33,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x02, 0x03,0x03,0x02,0x03,0x03,0x02,0x03,0x03,0x02,0x03,0x03,0x03,0x04,0x05,0x03,0x04, 0x05,0x04,0x04,0x05,0x04,0x04,0x05,0x06,0x06,0x06,0x06,0x06,0x07,0x06,0x06,0x08, 0x07,0x07,0x09,0x07,0x08,0x09,0x08,0x09,0x0a,0x09,0x09,0x0a,0x09,0x0a,0x0b,0x0a, 0x0a,0x0c,0x0a,0x0a,0x0d,0x0a,0x0b,0x0d,0x15,0x16,0x18,0x29,0x2a,0x2b,0x0c,0x0d, 0x11,0x13,0x12,0x18,0x1a,0x18,0x1f,0x4f,0x4c,0x53,0x32,0x30,0x37,0x23,0x1f,0x28, 0x4a,0x43,0x4b,0x7a,0x81,0x9a,0x61,0x69,0x88,0x57,0x60,0x82,0x50,0x59,0x7d,0x4c, 0x55,0x77,0x57,0x60,0x7e,0x45,0x4e,0x6e,0x43,0x48,0x67,0x48,0x4b,0x67,0x4c,0x48, 0x64,0x50,0x49,0x64,0x5b,0x51,0x6d,0x61,0x52,0x6b,0x53,0x51,0x70,0x36,0x34,0x45, 0x35,0x30,0x3f,0x31,0x2f,0x40,0x3b,0x3d,0x4a,0x41,0x42,0x4a,0x37,0x39,0x3e,0x43, 0x3d,0x47,0x68,0x6c,0x7f,0x50,0x5a,0x7c,0x48,0x46,0x69,0x57,0x4e,0x70,0x5f,0x52, 0x75,0x5e,0x53,0x76,0x5f,0x53,0x76,0x5f,0x52,0x76,0x5f,0x53,0x77,0x60,0x53,0x76, 0x5f,0x54,0x76,0x60,0x54,0x76,0x5f,0x55,0x76,0x60,0x55,0x77,0x5e,0x55,0x75,0x56, 0x4e,0x68,0x23,0x24,0x2e,0x2d,0x2b,0x3a,0x34,0x32,0x42,0x32,0x30,0x3f,0x2b,0x29, 0x36,0x21,0x21,0x2a,0x1e,0x1f,0x26,0x1e,0x1d,0x23,0x1b,0x1a,0x20,0x5c,0x53,0x6e, 0x78,0x69,0x94,0x4e,0x44,0x60,0x52,0x4a,0x67,0x5c,0x52,0x77,0x5b,0x51,0x77,0x5b, 0x52,0x77,0x5a,0x52,0x78,0x57,0x50,0x78,0x56,0x50,0x78,0x53,0x4f,0x79,0x52,0x4f, 0x79,0x51,0x4e,0x78,0x3d,0x3b,0x5c,0x5a,0x59,0x89,0x38,0x35,0x52,0x09,0x0a,0x0c, 0x0b,0x0c,0x0f,0x0b,0x0d,0x10,0x14,0x13,0x19,0x47,0x3c,0x4a,0x2c,0x26,0x2f,0x2a, 0x25,0x2d,0x29,0x24,0x2c,0x44,0x49,0x64,0x5b,0x66,0x8e,0x46,0x4d,0x6c,0x35,0x38, 0x50,0x35,0x39,0x51,0x37,0x3c,0x55,0x30,0x32,0x45,0x20,0x22,0x2b,0x54,0x4c,0x5e, 0x56,0x4d,0x61,0x7d,0x85,0x9b,0x53,0x5c,0x7e,0x50,0x4b,0x6a,0x2c,0x2a,0x38,0x31, 0x2c,0x3a,0x37,0x30,0x3e,0x3c,0x34,0x42,0x3c,0x34,0x42,0x36,0x2f,0x3d,0x26,0x25, 0x32,0x1c,0x1e,0x28,0x1f,0x20,0x29,0x48,0x41,0x51,0x51,0x47,0x5a,0x4c,0x45,0x5c, 0x51,0x4b,0x69,0x3d,0x36,0x4a,0x2e,0x28,0x34,0x26,0x20,0x2b,0x20,0x1d,0x26,0x23, 0x21,0x2b,0x1e,0x1d,0x28,0x1f,0x1e,0x28,0x36,0x2f,0x3c,0x2f,0x28,0x33,0x52,0x54, 0x68,0x50,0x52,0x76,0x5d,0x51,0x71,0x61,0x54,0x72,0x5c,0x56,0x79,0x78,0x78,0x92, 0x7e,0x7c,0x93,0x7c,0x79,0x91,0x85,0x82,0x99,0x8b,0x88,0x9d,0x91,0x8d,0xa0,0x86, 0x84,0x9b,0x80,0x80,0x9a,0x82,0x85,0x9f,0x83,0x83,0x9c,0x7b,0x79,0x92,0x66,0x66, 0x83,0x5f,0x5f,0x7d,0x83,0x80,0x95,0xae,0xaa,0xb8,0xbd,0xb8,0xc1,0xb3,0xae,0xb5, 0xaa,0xa6,0xb1,0x7e,0x83,0x98,0x26,0x2a,0x36,0x29,0x2d,0x37,0x2b,0x2e,0x39,0x2b, 0x2f,0x3a,0x2b,0x2e,0x3a,0x2b,0x2f,0x3b,0x2e,0x32,0x3e,0x36,0x3a,0x46,0x46,0x4b, 0x58,0x52,0x57,0x65,0x5a,0x5e,0x6d,0x5b,0x60,0x6e,0x55,0x5a,0x67,0x47,0x4d,0x5b, 0x4d,0x52,0x62,0x50,0x54,0x63,0x38,0x3d,0x4c,0x2c,0x30,0x3e,0x29,0x2c,0x39,0x28, 0x2b,0x37,0x27,0x2a,0x36,0x25,0x28,0x33,0x26,0x29,0x33,0x26,0x29,0x33,0x27,0x2a, 0x34,0x26,0x2a,0x33,0x23,0x27,0x31,0x21,0x24,0x2d,0x1e,0x20,0x29,0x1a,0x1c,0x25, 0x1a,0x1c,0x24,0x18,0x1a,0x22,0x18,0x1a,0x22,0x16,0x19,0x20,0x14,0x16,0x1d,0x12, 0x14,0x1a,0x10,0x12,0x17,0x0e,0x10,0x15,0x0d,0x0e,0x12,0x0c,0x0d,0x11,0x0a,0x0b, 0x0f,0x0a,0x0a,0x0e,0x09,0x0a,0x0c,0x07,0x08,0x0a,0x07,0x07,0x0a,0x06,0x07,0x0a, 0x06,0x06,0x08,0x06,0x06,0x07,0x08,0x08,0x0b,0x7d,0x87,0xa5,0x51,0x5c,0x86,0x5b, 0x51,0x77,0x5e,0x51,0x75,0x5e,0x51,0x75,0x5e,0x52,0x75,0x5e,0x53,0x76,0x5e,0x52, 0x75,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e,0x52,0x76,0x5e,0x52,0x76,0x5e,0x53,0x76, 0x5e,0x53,0x76,0x5e,0x53,0x76,0x5e,0x53,0x76,0x64,0x58,0x7e,0x0a,0x09,0x0c,0x02, 0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1a,0x1d, 0x28,0x53,0x5d,0x88,0x54,0x50,0x79,0x55,0x50,0x79,0x55,0x50,0x79,0x52,0x4f,0x7a, 0x52,0x4f,0x7a,0x52,0x4f,0x7b,0x52,0x52,0x7c,0x52,0x53,0x7e,0x52,0x5a,0x84,0x53, 0x5f,0x89,0x56,0x62,0x8b,0x5a,0x65,0x8d,0x5b,0x66,0x8e,0x52,0x5c,0x86,0x7a,0x85, 0xa7,0xca,0xcf,0xdd,0xc4,0xca,0xd8,0xc2,0xc7,0xd7,0xbe,0xc3,0xd5,0xba,0xc1,0xd1, 0xb4,0xba,0xce,0xab,0xb2,0xc8,0xa7,0xaf,0xc4,0xa2,0xaa,0xc0,0x9b,0xa4,0xbc,0x98, 0xa1,0xbb,0x94,0x9f,0xb8,0x94,0x9d,0xb8,0x93,0x9c,0xb7,0x93,0x9c,0xb8,0x90,0x9a, 0xb5,0x8e,0x99,0xb4,0x8c,0x95,0xb2,0x89,0x93,0xb0,0x88,0x92,0xb0,0x84,0x8e,0xad, 0x80,0x8a,0xaa,0x7a,0x85,0xa5,0x77,0x82,0xa4,0x75,0x81,0xa2,0x7d,0x89,0xa9,0x89, 0x93,0xb0,0x6f,0x7b,0x9f,0x57,0x50,0x79,0x64,0x53,0x76,0x64,0x53,0x73,0x64,0x53, 0x75,0x64,0x53,0x76,0x64,0x53,0x75,0x64,0x53,0x76,0x64,0x53,0x76,0x64,0x53,0x75, 0x64,0x53,0x75,0x64,0x53,0x74,0x64,0x4d,0x6b,0x64,0x53,0x75,0x56,0x50,0x79,0x5a, 0x52,0x79,0x5e,0x53,0x79,0x5e,0x53,0x79,0x5e,0x53,0x79,0x5e,0x53,0x79,0x60,0x53, 0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77, 0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x56,0x50,0x79,0x5f, 0x53,0x77,0x5b,0x43,0x5d,0x52,0x4f,0x7b,0x78,0x76,0x83,0x39,0x2b,0x34,0x67,0x53, 0x67,0x03,0x03,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6c,0x6d,0x71, 0x54,0x5f,0x89,0x63,0x4b,0x69,0x5c,0x52,0x79,0x5b,0x52,0x79,0x5a,0x52,0x79,0x58, 0x50,0x79,0x57,0x50,0x79,0x57,0x50,0x79,0x55,0x50,0x79,0x54,0x50,0x79,0x52,0x4f, 0x7a,0x52,0x4f,0x7a,0x52,0x50,0x7b,0x52,0x53,0x7e,0x52,0x57,0x82,0x52,0x5d,0x88, 0x56,0x62,0x8b,0x55,0x50,0x79,0x63,0x4b,0x67,0x89,0x93,0xb0,0xcb,0xd0,0xdd,0x8f, 0x84,0x98,0x69,0x67,0x8b,0x6a,0x74,0x98,0x6d,0x77,0x9b,0x78,0x82,0xa3,0x3a,0x40, 0x52,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x43,0x44,0x44,0x80,0x8a,0xaa,0x52,0x4f,0x7b,0x64,0x50,0x71, 0x52,0x52,0x7d,0x52,0x54,0x7e,0x52,0x55,0x80,0x52,0x5a,0x84,0x52,0x5b,0x85,0x52, 0x5d,0x86,0x52,0x5d,0x88,0x53,0x5e,0x88,0x53,0x5f,0x89,0x54,0x5f,0x89,0x54,0x5f, 0x89,0x53,0x5e,0x89,0x52,0x53,0x7e,0x64,0x53,0x75,0x52,0x56,0x81,0x68,0x6c,0x74, 0x1d,0x1d,0x1d,0x61,0x61,0x61,0x1d,0x1d,0x1d,0x00,0x00,0x00,0x19,0x19,0x19,0x1b, 0x1b,0x1b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x03,0x03,0x02,0x02,0x03,0x02, 0x03,0x03,0x03,0x03,0x04,0x03,0x03,0x04,0x04,0x04,0x05,0x05,0x05,0x06,0x06,0x06, 0x07,0x05,0x06,0x06,0x06,0x07,0x08,0x07,0x08,0x09,0x08,0x09,0x0a,0x09,0x09,0x0a, 0x09,0x0a,0x0b,0x0a,0x0a,0x0d,0x0a,0x0b,0x0d,0x0a,0x0a,0x0d,0x10,0x11,0x12,0x2c, 0x2c,0x2e,0x0c,0x0d,0x0f,0x0c,0x0d,0x10,0x0d,0x0e,0x12,0x23,0x23,0x28,0x0f,0x0f, 0x14,0x19,0x18,0x1c,0x3c,0x33,0x3d,0x6f,0x79,0x95,0x5e,0x66,0x89,0x64,0x6c,0x8b, 0x67,0x6f,0x8e,0x67,0x70,0x8f,0x77,0x7f,0x99,0x53,0x5a,0x7b,0x4a,0x53,0x73,0x45, 0x49,0x6c,0x48,0x4a,0x6a,0x51,0x4d,0x6c,0x57,0x4f,0x6d,0x5d,0x4d,0x65,0x53,0x4f, 0x6a,0x36,0x32,0x41,0x35,0x31,0x40,0x32,0x2f,0x3e,0x2f,0x2e,0x3d,0x3b,0x3c,0x47, 0x43,0x43,0x4b,0x4c,0x48,0x51,0x68,0x6b,0x7b,0x52,0x5b,0x7c,0x48,0x46,0x6a,0x57, 0x4e,0x6f,0x5f,0x52,0x75,0x5e,0x53,0x76,0x5f,0x53,0x76,0x60,0x53,0x77,0x60,0x54, 0x77,0x60,0x54,0x76,0x5f,0x54,0x76,0x5f,0x54,0x75,0x60,0x55,0x77,0x60,0x55,0x77, 0x5a,0x51,0x71,0x53,0x4a,0x67,0x2b,0x28,0x36,0x35,0x30,0x3f,0x3a,0x34,0x43,0x38, 0x31,0x40,0x2e,0x2a,0x37,0x25,0x23,0x30,0x1f,0x20,0x29,0x1e,0x1e,0x25,0x1b,0x1a, 0x20,0x52,0x4a,0x62,0x78,0x69,0x93,0x4e,0x46,0x62,0x51,0x49,0x66,0x5b,0x51,0x77, 0x5c,0x52,0x77,0x5a,0x52,0x78,0x5b,0x51,0x78,0x58,0x50,0x78,0x57,0x50,0x78,0x55, 0x50,0x78,0x52,0x4f,0x79,0x51,0x4e,0x78,0x3d,0x3c,0x5a,0x5c,0x5a,0x8a,0x3f,0x3d, 0x5c,0x09,0x0a,0x0c,0x0a,0x0a,0x0e,0x0b,0x0d,0x10,0x0e,0x0e,0x12,0x2d,0x29,0x34, 0x33,0x2c,0x36,0x2c,0x26,0x2e,0x2a,0x26,0x2e,0x2d,0x2a,0x36,0x62,0x6e,0x9a,0x52, 0x5c,0x80,0x39,0x3f,0x59,0x35,0x39,0x52,0x34,0x39,0x50,0x40,0x42,0x5e,0x1e,0x21, 0x29,0x3e,0x3a,0x48,0x57,0x4d,0x60,0x7b,0x80,0x96,0x65,0x70,0x8c,0x4d,0x4d,0x71, 0x2d,0x2c,0x3e,0x2f,0x2a,0x37,0x38,0x31,0x3f,0x3e,0x35,0x43,0x3e,0x36,0x43,0x39, 0x32,0x3f,0x2b,0x27,0x34,0x1d,0x1e,0x29,0x1a,0x1d,0x25,0x1a,0x1d,0x24,0x3a,0x34, 0x41,0x38,0x33,0x3e,0x54,0x4e,0x6c,0x53,0x4b,0x6a,0x29,0x26,0x31,0x2d,0x28,0x34, 0x1f,0x1b,0x23,0x2c,0x28,0x33,0x2a,0x26,0x31,0x23,0x22,0x2c,0x24,0x22,0x2d,0x33, 0x2c,0x39,0x31,0x2b,0x37,0x4f,0x50,0x6d,0x49,0x3f,0x58,0x56,0x47,0x5e,0x63,0x59, 0x79,0x5d,0x5d,0x7f,0x70,0x71,0x8b,0x7a,0x7a,0x92,0x87,0x86,0x9c,0x8b,0x89,0x9f, 0x8c,0x89,0x9f,0x87,0x85,0x9c,0x8f,0x8f,0xa5,0x9a,0x9a,0xaf,0x97,0x97,0xab,0x93, 0x91,0xa5,0x92,0x91,0xa5,0x8f,0x8d,0xa1,0x98,0x95,0xa7,0xb2,0xaf,0xbb,0xc0,0xbb, 0xc5,0xbc,0xb7,0xbe,0xb5,0xb1,0xbb,0xa3,0xa4,0xb2,0x7a,0x7a,0x7a,0x6d,0x6e,0x72, 0x54,0x56,0x5e,0x3e,0x42,0x4c,0x33,0x36,0x42,0x2e,0x31,0x3d,0x2e,0x33,0x3f,0x32, 0x36,0x43,0x39,0x3d,0x49,0x44,0x48,0x56,0x4e,0x52,0x60,0x56,0x5a,0x68,0x52,0x56, 0x65,0x4a,0x50,0x60,0x46,0x4c,0x60,0x4d,0x53,0x66,0x5b,0x5f,0x70,0x38,0x3d,0x4f, 0x2c,0x31,0x3f,0x29,0x2d,0x3a,0x26,0x2a,0x36,0x26,0x29,0x34,0x24,0x28,0x32,0x24, 0x27,0x32,0x23,0x26,0x31,0x23,0x26,0x30,0x20,0x23,0x2e,0x1f,0x22,0x2b,0x1d,0x20, 0x29,0x1a,0x1d,0x26,0x19,0x1b,0x24,0x19,0x1b,0x23,0x18,0x1a,0x22,0x16,0x18,0x20, 0x16,0x17,0x1e,0x12,0x15,0x1b,0x11,0x12,0x18,0x0e,0x10,0x15,0x0d,0x0e,0x12,0x0c, 0x0e,0x12,0x0b,0x0c,0x10,0x0a,0x0a,0x0e,0x09,0x09,0x0c,0x08,0x09,0x0c,0x07,0x08, 0x0b,0x06,0x07,0x0a,0x06,0x06,0x09,0x06,0x06,0x08,0x06,0x06,0x08,0x77,0x7f,0x99, 0x56,0x62,0x89,0x55,0x4f,0x77,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e, 0x53,0x76,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e,0x52, 0x76,0x5e,0x52,0x76,0x5e,0x53,0x76,0x5e,0x53,0x76,0x5e,0x53,0x76,0x61,0x56,0x7b, 0x21,0x1d,0x29,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x2a,0x2f,0x3f,0x52,0x55,0x81,0x55,0x50,0x79,0x55,0x50,0x79,0x54,0x50, 0x79,0x53,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x50,0x7b,0x52,0x54,0x80, 0x52,0x5a,0x84,0x53,0x5f,0x89,0x56,0x62,0x8b,0x5a,0x65,0x8d,0x5b,0x67,0x90,0x54, 0x5f,0x89,0x80,0x8a,0xaa,0xbf,0xc4,0xd5,0xc2,0xc8,0xd7,0xc0,0xc6,0xd6,0xbf,0xc4, 0xd5,0xb8,0xbe,0xd0,0xb2,0xb8,0xcb,0xab,0xb2,0xc7,0xa2,0xab,0xc2,0x9f,0xa7,0xbf, 0x9c,0xa4,0xbe,0x95,0x9f,0xb9,0x94,0x9d,0xb8,0x94,0x9d,0xb8,0x94,0x9d,0xb8,0x91, 0x9b,0xb5,0x8e,0x98,0xb3,0x8d,0x96,0xb3,0x8a,0x94,0xb1,0x89,0x93,0xb0,0x88,0x92, 0xb0,0x83,0x8d,0xac,0x81,0x8c,0xab,0x7b,0x86,0xa7,0x76,0x82,0xa3,0x72,0x7d,0xa0, 0x8c,0x96,0xb2,0x92,0x9b,0xb5,0x65,0x72,0x96,0x63,0x53,0x77,0x63,0x53,0x77,0x64, 0x53,0x74,0x64,0x53,0x76,0x64,0x53,0x75,0x64,0x53,0x76,0x64,0x53,0x76,0x64,0x53, 0x75,0x64,0x53,0x75,0x64,0x53,0x74,0x64,0x53,0x75,0x64,0x50,0x6e,0x64,0x4c,0x6a, 0x5c,0x52,0x79,0x52,0x4f,0x7a,0x5e,0x53,0x79,0x5e,0x53,0x79,0x5e,0x53,0x79,0x5e, 0x53,0x79,0x5e,0x53,0x79,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53, 0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77, 0x52,0x4f,0x7a,0x5f,0x47,0x63,0x63,0x4b,0x67,0x62,0x6d,0x92,0x48,0x3d,0x43,0x4b, 0x3a,0x47,0x3b,0x31,0x3d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x3b,0x3b,0x3c,0x6e,0x7a,0x9d,0x62,0x4a,0x66,0x60,0x53,0x77,0x5c,0x52,0x79, 0x5a,0x52,0x79,0x5a,0x52,0x79,0x57,0x50,0x79,0x56,0x50,0x79,0x55,0x50,0x79,0x52, 0x4f,0x7a,0x53,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7b,0x52,0x53,0x7d,0x52,0x57, 0x82,0x52,0x5d,0x88,0x56,0x63,0x8b,0x54,0x50,0x79,0x60,0x48,0x64,0x82,0x8c,0xab, 0xcf,0xd3,0xdd,0x86,0x7f,0x91,0x5a,0x56,0x73,0x51,0x59,0x75,0x54,0x5c,0x79,0x65, 0x6e,0x8c,0x42,0x48,0x5c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x9b,0xa1,0xb2,0x55,0x62, 0x8a,0x64,0x50,0x71,0x5a,0x52,0x79,0x52,0x52,0x7d,0x52,0x53,0x7d,0x52,0x56,0x81, 0x52,0x5a,0x84,0x52,0x5d,0x88,0x52,0x5d,0x88,0x53,0x5e,0x88,0x53,0x5f,0x89,0x53, 0x5f,0x89,0x54,0x5f,0x89,0x53,0x5e,0x89,0x52,0x5d,0x88,0x5c,0x52,0x79,0x5c,0x52, 0x79,0x6f,0x7a,0x9a,0x47,0x47,0x47,0x44,0x44,0x44,0x0a,0x0a,0x0a,0x00,0x00,0x00, 0x03,0x03,0x03,0x2b,0x2b,0x2b,0x07,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03, 0x02,0x02,0x03,0x02,0x02,0x02,0x03,0x04,0x05,0x03,0x03,0x04,0x04,0x04,0x05,0x05, 0x05,0x06,0x05,0x06,0x06,0x06,0x06,0x07,0x06,0x07,0x08,0x08,0x08,0x0a,0x07,0x08, 0x09,0x08,0x09,0x0a,0x0a,0x0a,0x0c,0x0a,0x0a,0x0c,0x0a,0x0a,0x0c,0x0a,0x0b,0x0d, 0x0a,0x0b,0x0e,0x2a,0x2b,0x2c,0x13,0x14,0x16,0x0c,0x0d,0x0e,0x0c,0x0d,0x0f,0x0d, 0x0e,0x11,0x0e,0x0f,0x12,0x17,0x16,0x1a,0x3e,0x36,0x3f,0x71,0x7a,0x97,0x53,0x5d, 0x82,0x51,0x5b,0x80,0x52,0x5b,0x82,0x52,0x5c,0x80,0x6e,0x76,0x94,0x56,0x5e,0x80, 0x4e,0x56,0x79,0x4c,0x54,0x75,0x4a,0x4f,0x71,0x48,0x4b,0x6d,0x49,0x48,0x68,0x57, 0x49,0x60,0x51,0x4b,0x65,0x39,0x33,0x42,0x34,0x30,0x3f,0x38,0x33,0x44,0x35,0x31, 0x41,0x30,0x30,0x40,0x3a,0x3c,0x47,0x4f,0x4b,0x55,0x65,0x65,0x75,0x54,0x5d,0x7c, 0x48,0x46,0x6a,0x56,0x4e,0x6f,0x5e,0x52,0x75,0x5e,0x52,0x75,0x61,0x55,0x78,0x65, 0x5a,0x7c,0x66,0x5c,0x7d,0x63,0x58,0x79,0x62,0x56,0x79,0x60,0x55,0x77,0x61,0x56, 0x78,0x5f,0x56,0x77,0x58,0x4f,0x6f,0x5e,0x52,0x6d,0x3d,0x35,0x43,0x42,0x39,0x48, 0x45,0x3c,0x4d,0x42,0x3a,0x4b,0x3a,0x33,0x43,0x32,0x2d,0x3b,0x26,0x24,0x30,0x1e, 0x1e,0x26,0x1d,0x1c,0x22,0x48,0x42,0x56,0x7a,0x6c,0x98,0x51,0x48,0x66,0x4e,0x45, 0x60,0x5e,0x52,0x75,0x5b,0x52,0x77,0x5a,0x52,0x78,0x5a,0x51,0x78,0x5b,0x52,0x78, 0x57,0x50,0x78,0x55,0x50,0x78,0x54,0x50,0x78,0x51,0x4f,0x79,0x3d,0x3a,0x5a,0x5b, 0x58,0x87,0x42,0x41,0x62,0x09,0x0a,0x0c,0x0a,0x0a,0x0e,0x0b,0x0c,0x0f,0x0d,0x0e, 0x11,0x10,0x12,0x17,0x45,0x3a,0x49,0x2d,0x27,0x30,0x2d,0x27,0x30,0x2c,0x27,0x30, 0x4e,0x52,0x74,0x55,0x5f,0x86,0x4a,0x52,0x72,0x35,0x38,0x51,0x34,0x38,0x4f,0x36, 0x39,0x51,0x2d,0x2e,0x3e,0x20,0x23,0x2c,0x56,0x4d,0x60,0x61,0x63,0x7b,0x73,0x7b, 0x94,0x50,0x59,0x7a,0x30,0x31,0x44,0x25,0x24,0x31,0x36,0x2f,0x3e,0x3e,0x36,0x44, 0x3f,0x36,0x45,0x38,0x31,0x3e,0x27,0x25,0x32,0x1b,0x1e,0x27,0x1b,0x1e,0x25,0x1a, 0x1d,0x24,0x34,0x30,0x3b,0x37,0x30,0x3c,0x54,0x4f,0x6c,0x54,0x4d,0x6c,0x23,0x22, 0x2f,0x28,0x24,0x2f,0x29,0x24,0x2e,0x27,0x22,0x2c,0x2c,0x26,0x32,0x2d,0x28,0x34, 0x2a,0x26,0x31,0x2e,0x29,0x36,0x32,0x2a,0x38,0x3e,0x34,0x42,0x3e,0x3a,0x53,0x40, 0x35,0x49,0x61,0x52,0x6d,0x58,0x52,0x72,0x59,0x54,0x75,0x5a,0x5a,0x7b,0x64,0x65, 0x83,0x62,0x62,0x81,0x67,0x69,0x87,0x7a,0x79,0x91,0x8f,0x8e,0xa2,0x9b,0x9a,0xad, 0x9c,0x9b,0xad,0x9b,0x9a,0xad,0x99,0x99,0xad,0x9a,0x99,0xad,0x9b,0x9b,0xad,0xa5, 0xa3,0xb2,0xbe,0xb9,0xc3,0xbf,0xbb,0xc1,0xc1,0xbf,0xc8,0xc2,0xc3,0xcd,0xb0,0xb0, 0xb0,0xb0,0xb0,0xb0,0xa7,0xa7,0xa8,0x76,0x77,0x7d,0x4e,0x52,0x5b,0x3a,0x3e,0x4a, 0x38,0x3d,0x4a,0x3a,0x3f,0x4c,0x3d,0x42,0x4f,0x40,0x45,0x52,0x44,0x49,0x56,0x46, 0x4b,0x5a,0x46,0x4a,0x5a,0x46,0x4c,0x5e,0x46,0x4c,0x62,0x46,0x4d,0x62,0x50,0x57, 0x6b,0x58,0x5d,0x6f,0x3a,0x3e,0x50,0x2c,0x31,0x40,0x27,0x2a,0x38,0x26,0x29,0x36, 0x2b,0x2e,0x39,0x25,0x28,0x33,0x22,0x26,0x30,0x1f,0x22,0x2d,0x21,0x23,0x2d,0x1e, 0x21,0x2a,0x1c,0x1f,0x28,0x1a,0x1e,0x26,0x1a,0x1c,0x25,0x18,0x1a,0x22,0x18,0x1a, 0x22,0x17,0x19,0x21,0x16,0x17,0x1e,0x12,0x14,0x1a,0x11,0x12,0x18,0x0f,0x10,0x16, 0x0e,0x0f,0x14,0x0d,0x0e,0x12,0x0b,0x0d,0x11,0x0a,0x0b,0x0f,0x0a,0x0a,0x0e,0x08, 0x09,0x0c,0x08,0x09,0x0c,0x07,0x07,0x0a,0x06,0x07,0x0a,0x06,0x06,0x08,0x06,0x06, 0x08,0x5d,0x62,0x76,0x5c,0x68,0x8d,0x50,0x4e,0x78,0x5e,0x52,0x75,0x5e,0x52,0x75, 0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e,0x51,0x75,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e, 0x52,0x75,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e,0x52,0x76,0x5e,0x52,0x76,0x5e,0x53, 0x76,0x60,0x55,0x78,0x3b,0x34,0x4a,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02, 0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x42,0x58,0x52,0x52,0x7d,0x55,0x50,0x79,0x55, 0x50,0x79,0x54,0x50,0x79,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7b,0x52,0x50, 0x7c,0x52,0x55,0x80,0x52,0x5c,0x86,0x53,0x5f,0x89,0x57,0x64,0x8c,0x5a,0x65,0x8e, 0x55,0x62,0x8a,0x52,0x4f,0x7b,0x6c,0x77,0x9b,0x9b,0xa4,0xbc,0xbe,0xc3,0xd5,0xc1, 0xc7,0xd7,0xbf,0xc4,0xd5,0xb9,0xc0,0xd1,0xb2,0xb9,0xcb,0xab,0xb3,0xc8,0xa1,0xa9, 0xc0,0x9b,0xa4,0xbc,0x98,0xa1,0xbb,0x94,0x9d,0xb8,0x93,0x9c,0xb8,0x92,0x9b,0xb7, 0x91,0x9b,0xb5,0x90,0x9a,0xb5,0x8c,0x96,0xb3,0x8b,0x95,0xb2,0x8b,0x95,0xb2,0x88, 0x92,0xb0,0x84,0x8e,0xac,0x83,0x8d,0xac,0x7d,0x89,0xa9,0x79,0x84,0xa5,0x73,0x7e, 0xa1,0x75,0x81,0xa3,0x9b,0xa4,0xbc,0x92,0x9c,0xb7,0x58,0x65,0x8d,0x5d,0x52,0x79, 0x62,0x53,0x77,0x64,0x53,0x75,0x64,0x53,0x76,0x64,0x53,0x76,0x64,0x53,0x76,0x64, 0x53,0x76,0x64,0x53,0x75,0x64,0x53,0x74,0x64,0x53,0x74,0x64,0x53,0x74,0x64,0x52, 0x72,0x63,0x4c,0x69,0x63,0x53,0x77,0x52,0x4f,0x7a,0x5a,0x52,0x79,0x5e,0x53,0x79, 0x5e,0x53,0x79,0x5e,0x53,0x79,0x5e,0x53,0x79,0x60,0x53,0x77,0x60,0x53,0x77,0x60, 0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53, 0x77,0x58,0x50,0x79,0x5f,0x53,0x77,0x56,0x3e,0x57,0x5a,0x52,0x79,0x86,0x85,0x92, 0x3c,0x2e,0x38,0x64,0x50,0x63,0x06,0x06,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x8b,0x94,0xad,0x64,0x53,0x73,0x64,0x52, 0x72,0x5b,0x52,0x79,0x5a,0x52,0x79,0x58,0x52,0x79,0x58,0x50,0x79,0x57,0x50,0x79, 0x56,0x50,0x79,0x53,0x50,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x50,0x7b,0x52, 0x52,0x7d,0x52,0x55,0x80,0x52,0x5d,0x86,0x55,0x62,0x8b,0x52,0x4f,0x7b,0x60,0x48, 0x64,0x7b,0x85,0xa7,0xc7,0xc9,0xd3,0x67,0x64,0x71,0x2e,0x2c,0x3b,0x20,0x23,0x2d, 0x23,0x27,0x32,0x3f,0x45,0x59,0x3e,0x44,0x59,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6c, 0x6d,0x6f,0x72,0x7d,0xa1,0x64,0x53,0x75,0x64,0x52,0x73,0x52,0x52,0x7d,0x52,0x53, 0x7e,0x52,0x55,0x80,0x52,0x57,0x83,0x52,0x5a,0x84,0x52,0x5d,0x88,0x53,0x5e,0x88, 0x70,0x7a,0x9c,0x5c,0x66,0x8f,0x53,0x5e,0x89,0x53,0x5e,0x88,0x53,0x5e,0x88,0x52, 0x52,0x7d,0x64,0x53,0x75,0x52,0x56,0x81,0x8c,0x8e,0x94,0x1f,0x1f,0x1f,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x15,0x15,0x15,0x23,0x23,0x23,0x0b,0x0b,0x0b, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x08,0x10, 0x10,0x10,0x0c,0x0c,0x0c,0x05,0x05,0x05,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02, 0x03,0x02,0x03,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x03,0x04,0x05,0x03,0x04,0x05, 0x03,0x03,0x04,0x05,0x05,0x06,0x04,0x04,0x05,0x06,0x06,0x07,0x06,0x06,0x07,0x07, 0x08,0x09,0x08,0x08,0x0a,0x08,0x09,0x0a,0x09,0x09,0x0a,0x09,0x0a,0x0b,0x0a,0x0b, 0x0d,0x0a,0x0b,0x0e,0x0a,0x0b,0x0e,0x23,0x23,0x25,0x47,0x48,0x49,0x0b,0x0c,0x0e, 0x0c,0x0d,0x0f,0x0d,0x0e,0x10,0x0e,0x0e,0x11,0x14,0x13,0x16,0x40,0x36,0x3f,0x71, 0x7a,0x98,0x54,0x5e,0x84,0x52,0x5b,0x81,0x53,0x5c,0x82,0x53,0x5b,0x81,0x64,0x6b, 0x8d,0x6b,0x72,0x91,0x61,0x69,0x8a,0x50,0x55,0x7a,0x50,0x54,0x77,0x4e,0x51,0x72, 0x4a,0x4a,0x68,0x52,0x48,0x61,0x52,0x4c,0x65,0x3f,0x37,0x46,0x35,0x2f,0x3d,0x39, 0x33,0x43,0x3c,0x36,0x47,0x37,0x33,0x44,0x31,0x30,0x40,0x46,0x45,0x52,0x60,0x5f, 0x70,0x58,0x5e,0x7b,0x4b,0x49,0x6c,0x55,0x4e,0x6f,0x5d,0x51,0x74,0x5e,0x51,0x74, 0x62,0x56,0x78,0x6c,0x61,0x81,0x71,0x68,0x85,0x6f,0x65,0x84,0x6e,0x64,0x83,0x62, 0x59,0x79,0x5c,0x51,0x74,0x5b,0x51,0x72,0x5e,0x52,0x70,0x66,0x57,0x72,0x45,0x3b, 0x4a,0x46,0x3d,0x4d,0x4a,0x40,0x52,0x4a,0x41,0x54,0x44,0x3d,0x4f,0x3c,0x36,0x46, 0x32,0x2e,0x3d,0x25,0x23,0x30,0x1e,0x1e,0x26,0x3c,0x36,0x47,0x7c,0x6e,0x9a,0x55, 0x4f,0x6a,0x4c,0x44,0x5f,0x5e,0x53,0x75,0x5c,0x53,0x77,0x5b,0x52,0x78,0x5c,0x52, 0x77,0x5c,0x52,0x78,0x5a,0x52,0x78,0x56,0x50,0x78,0x54,0x50,0x78,0x52,0x4f,0x79, 0x3e,0x3c,0x5b,0x59,0x56,0x84,0x47,0x45,0x68,0x09,0x0a,0x0c,0x0a,0x0b,0x0e,0x0b, 0x0d,0x10,0x0d,0x0e,0x12,0x0f,0x10,0x15,0x2c,0x28,0x32,0x37,0x2e,0x39,0x2e,0x28, 0x32,0x2f,0x29,0x33,0x46,0x44,0x5f,0x5d,0x67,0x92,0x50,0x56,0x7b,0x40,0x44,0x62, 0x35,0x37,0x4e,0x35,0x36,0x4e,0x37,0x37,0x50,0x1e,0x21,0x29,0x49,0x42,0x52,0x56, 0x4d,0x5f,0x74,0x7a,0x91,0x5f,0x69,0x87,0x4b,0x4c,0x6c,0x1e,0x1f,0x2a,0x2a,0x27, 0x34,0x3a,0x32,0x40,0x3e,0x35,0x44,0x36,0x2f,0x3d,0x22,0x21,0x2d,0x1a,0x1e,0x26, 0x1a,0x1d,0x24,0x1a,0x1c,0x24,0x28,0x26,0x2f,0x36,0x30,0x3c,0x51,0x4c,0x69,0x54, 0x4f,0x6e,0x23,0x22,0x2f,0x1c,0x1c,0x26,0x24,0x22,0x2c,0x28,0x24,0x2e,0x28,0x22, 0x2d,0x28,0x23,0x2e,0x2b,0x26,0x31,0x2a,0x26,0x31,0x2d,0x27,0x33,0x38,0x2e,0x38, 0x3f,0x38,0x47,0x3f,0x39,0x52,0x44,0x39,0x4f,0x5b,0x4d,0x67,0x61,0x55,0x71,0x62, 0x55,0x6f,0x51,0x42,0x57,0x4e,0x40,0x55,0x62,0x59,0x77,0x6b,0x6d,0x8a,0x90,0x8f, 0xa3,0x9e,0x9c,0xad,0x99,0x98,0xa9,0x94,0x93,0xa7,0x8d,0x8d,0xa4,0x8b,0x8c,0xa3, 0x8e,0x90,0xa5,0x98,0x98,0xac,0xb2,0xae,0xbb,0xc8,0xc6,0xcc,0xcf,0xce,0xd5,0xd0, 0xd0,0xd8,0xc0,0xc0,0xc0,0xc2,0xc2,0xc2,0xc1,0xc1,0xc1,0xa6,0xa7,0xa9,0x6c,0x6f, 0x7a,0x4d,0x52,0x60,0x4a,0x4e,0x5e,0x4f,0x54,0x63,0x50,0x56,0x65,0x4e,0x53,0x63, 0x4b,0x51,0x61,0x49,0x4e,0x5e,0x44,0x4a,0x5a,0x3e,0x45,0x57,0x42,0x49,0x5e,0x45, 0x4b,0x62,0x46,0x4c,0x63,0x53,0x59,0x6e,0x57,0x5d,0x6f,0x45,0x45,0x57,0x36,0x37, 0x46,0x3c,0x3e,0x4c,0x40,0x43,0x4d,0x36,0x39,0x42,0x22,0x25,0x2f,0x20,0x23,0x2e, 0x1f,0x22,0x2c,0x1e,0x20,0x2a,0x1c,0x1e,0x28,0x1b,0x1e,0x26,0x19,0x1b,0x24,0x18, 0x1a,0x22,0x17,0x19,0x21,0x16,0x17,0x1f,0x15,0x16,0x1e,0x12,0x14,0x1a,0x11,0x12, 0x18,0x0f,0x11,0x16,0x0e,0x0f,0x14,0x0d,0x0e,0x12,0x0b,0x0d,0x11,0x0a,0x0b,0x0f, 0x0a,0x0a,0x0e,0x09,0x09,0x0c,0x08,0x09,0x0c,0x07,0x08,0x0a,0x06,0x07,0x0a,0x06, 0x06,0x09,0x06,0x07,0x0a,0x40,0x44,0x51,0x65,0x70,0x94,0x50,0x4e,0x79,0x5e,0x52, 0x75,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e,0x51,0x75, 0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e, 0x52,0x76,0x5e,0x52,0x76,0x61,0x56,0x79,0x56,0x4c,0x6c,0x02,0x02,0x03,0x02,0x02, 0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x4f,0x6b,0x52,0x50,0x7c, 0x57,0x50,0x79,0x56,0x50,0x79,0x55,0x50,0x79,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52, 0x4f,0x7b,0x52,0x52,0x7c,0x52,0x55,0x81,0x52,0x5d,0x88,0x54,0x5f,0x89,0x52,0x5d, 0x86,0x52,0x50,0x7b,0x52,0x55,0x80,0x5d,0x6a,0x91,0xb0,0xb7,0xca,0xa5,0xad,0xc3, 0x9a,0xa2,0xbb,0xa4,0xac,0xc3,0xb7,0xbc,0xcf,0xbb,0xc1,0xd2,0xb5,0xbc,0xcf,0xac, 0xb3,0xc8,0xa4,0xac,0xc2,0x9b,0xa4,0xbc,0x96,0xa0,0xb9,0x93,0x9c,0xb7,0x92,0x9b, 0xb7,0x92,0x9b,0xb5,0x92,0x9b,0xb7,0x8e,0x99,0xb4,0x8a,0x94,0xb1,0x8b,0x94,0xb1, 0x89,0x93,0xb0,0x86,0x91,0xaf,0x82,0x8c,0xab,0x80,0x8a,0xaa,0x7c,0x86,0xa7,0x77, 0x83,0xa4,0x72,0x7d,0xa0,0x81,0x8b,0xab,0xa0,0xa8,0xc0,0x91,0x9a,0xb5,0x52,0x57, 0x83,0x5f,0x53,0x77,0x64,0x53,0x76,0x64,0x53,0x75,0x64,0x53,0x76,0x64,0x53,0x76, 0x64,0x53,0x76,0x64,0x53,0x76,0x64,0x53,0x76,0x64,0x53,0x74,0x64,0x53,0x74,0x64, 0x53,0x75,0x64,0x53,0x73,0x64,0x4c,0x69,0x64,0x52,0x73,0x52,0x4f,0x7a,0x52,0x4f, 0x7a,0x5e,0x53,0x79,0x5e,0x53,0x79,0x5e,0x53,0x79,0x5e,0x53,0x79,0x60,0x53,0x77, 0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60, 0x53,0x77,0x60,0x53,0x77,0x53,0x4f,0x7a,0x60,0x48,0x65,0x5f,0x47,0x63,0x64,0x71, 0x95,0x51,0x45,0x4b,0x4f,0x3d,0x4c,0x41,0x36,0x43,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8d,0x90,0x9a,0x52, 0x4f,0x7b,0x63,0x4b,0x69,0x5c,0x52,0x79,0x5a,0x52,0x79,0x58,0x50,0x79,0x58,0x52, 0x79,0x56,0x50,0x79,0x54,0x50,0x79,0x54,0x50,0x79,0x53,0x50,0x79,0x52,0x4f,0x7a, 0x52,0x4f,0x7b,0x52,0x50,0x7b,0x52,0x55,0x80,0x52,0x5a,0x84,0x55,0x60,0x8a,0x52, 0x52,0x7d,0x64,0x52,0x72,0x69,0x74,0x98,0xa5,0xa8,0xaf,0x3f,0x3e,0x46,0xba,0xb9, 0xbb,0xfa,0xfa,0xfa,0xee,0xee,0xee,0x3d,0x3f,0x47,0x35,0x39,0x4b,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x15,0x15,0x15,0x9f,0xa7,0xbc,0x52,0x54,0x80,0x64,0x50,0x6f,0x52, 0x4f,0x7a,0x52,0x52,0x7d,0x52,0x54,0x80,0x52,0x55,0x80,0x52,0x58,0x83,0x71,0x79, 0x9b,0x6a,0x73,0x98,0x7f,0x87,0xa5,0x73,0x7c,0x9e,0x6a,0x73,0x97,0x54,0x5f,0x89, 0x53,0x5e,0x89,0x52,0x5d,0x86,0x5c,0x52,0x79,0x7a,0x70,0x8d,0xaa,0xaf,0xc0,0x1d, 0x1d,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20, 0x20,0x11,0x11,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x06,0x06, 0x20,0x20,0x20,0x1c,0x1c,0x1c,0x20,0x20,0x20,0x24,0x24,0x24,0x19,0x19,0x19,0x06, 0x06,0x06,0x16,0x16,0x17,0x13,0x13,0x14,0x02,0x03,0x03,0x02,0x02,0x03,0x03,0x04, 0x05,0x03,0x04,0x05,0x04,0x04,0x05,0x05,0x05,0x06,0x05,0x05,0x06,0x06,0x06,0x07, 0x06,0x06,0x08,0x06,0x07,0x09,0x08,0x08,0x0a,0x08,0x09,0x0a,0x09,0x0a,0x0b,0x0a, 0x0a,0x0c,0x0a,0x0a,0x0d,0x0a,0x0b,0x0d,0x0b,0x0c,0x0e,0x13,0x14,0x17,0x40,0x41, 0x43,0x0b,0x0c,0x0e,0x0c,0x0d,0x0f,0x0d,0x0e,0x0f,0x0d,0x0e,0x10,0x10,0x10,0x12, 0x3a,0x2f,0x39,0x73,0x7d,0x9b,0x54,0x5e,0x83,0x53,0x5a,0x81,0x53,0x58,0x80,0x53, 0x59,0x81,0x5b,0x60,0x87,0x5f,0x64,0x88,0x6c,0x71,0x91,0x52,0x58,0x7c,0x51,0x54, 0x78,0x50,0x51,0x74,0x4b,0x4b,0x6c,0x52,0x48,0x61,0x53,0x4f,0x6b,0x41,0x38,0x47, 0x3e,0x36,0x45,0x3a,0x33,0x42,0x39,0x32,0x40,0x38,0x31,0x40,0x37,0x31,0x3f,0x36, 0x32,0x42,0x56,0x54,0x66,0x61,0x67,0x81,0x55,0x57,0x75,0x5e,0x57,0x76,0x61,0x58, 0x79,0x5c,0x51,0x73,0x5d,0x51,0x73,0x61,0x55,0x77,0x63,0x5a,0x7b,0x67,0x5f,0x7f, 0x6d,0x65,0x85,0x66,0x5c,0x7a,0x5a,0x4e,0x6a,0x5e,0x51,0x6f,0x61,0x53,0x6e,0x67, 0x59,0x74,0x49,0x3f,0x4f,0x49,0x40,0x51,0x49,0x40,0x51,0x48,0x3f,0x50,0x46,0x3e, 0x4f,0x43,0x3b,0x4d,0x3e,0x39,0x4b,0x33,0x30,0x40,0x24,0x22,0x2e,0x2d,0x2a,0x37, 0x7b,0x6c,0x97,0x58,0x4e,0x6c,0x4b,0x41,0x5b,0x5d,0x52,0x74,0x5c,0x52,0x77,0x5d, 0x52,0x77,0x5c,0x52,0x77,0x5b,0x53,0x78,0x5a,0x52,0x78,0x57,0x50,0x78,0x55,0x50, 0x78,0x52,0x4f,0x79,0x43,0x41,0x62,0x57,0x55,0x82,0x4d,0x4b,0x6f,0x09,0x0a,0x0c, 0x0a,0x0a,0x0d,0x0b,0x0d,0x0f,0x0e,0x0e,0x12,0x0f,0x11,0x15,0x11,0x13,0x18,0x48, 0x3c,0x4b,0x31,0x2a,0x34,0x2f,0x29,0x33,0x2f,0x2b,0x34,0x65,0x69,0x99,0x53,0x57, 0x7d,0x50,0x53,0x77,0x39,0x3b,0x55,0x35,0x36,0x4e,0x35,0x36,0x4e,0x30,0x32,0x44, 0x29,0x2a,0x34,0x56,0x4c,0x5e,0x62,0x5e,0x72,0x76,0x80,0x97,0x4f,0x52,0x74,0x22, 0x25,0x30,0x21,0x20,0x2c,0x31,0x2b,0x39,0x33,0x2d,0x3a,0x35,0x31,0x44,0x1c,0x1d, 0x27,0x1a,0x1d,0x24,0x1a,0x1c,0x23,0x19,0x1b,0x22,0x18,0x1a,0x21,0x36,0x2f,0x3b, 0x54,0x4e,0x6d,0x55,0x50,0x70,0x21,0x21,0x2c,0x16,0x18,0x20,0x1a,0x1a,0x23,0x1e, 0x1d,0x27,0x24,0x21,0x2b,0x26,0x22,0x2c,0x25,0x21,0x2b,0x24,0x20,0x2a,0x1f,0x1e, 0x28,0x25,0x20,0x2b,0x34,0x2a,0x35,0x45,0x41,0x57,0x46,0x3f,0x5a,0x44,0x38,0x4d, 0x3e,0x33,0x46,0x31,0x28,0x36,0x2a,0x22,0x30,0x28,0x21,0x2d,0x4d,0x3e,0x52,0x56, 0x54,0x74,0x80,0x7f,0x94,0x90,0x8e,0xa1,0x86,0x85,0x99,0x7c,0x7c,0x93,0x7a,0x7b, 0x94,0x81,0x83,0x9c,0x85,0x86,0x9f,0x8c,0x8d,0xa4,0xa3,0xa2,0xb3,0xc0,0xbe,0xc7, 0xd0,0xcf,0xd7,0xd4,0xd4,0xdc,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc3,0xc3,0xc3,0xa2, 0xa5,0xab,0x75,0x7a,0x86,0x5e,0x63,0x72,0x5c,0x62,0x71,0x66,0x6b,0x7a,0x65,0x6a, 0x7a,0x5d,0x62,0x73,0x58,0x5e,0x70,0x56,0x5c,0x6e,0x4c,0x52,0x65,0x3f,0x45,0x5a, 0x3e,0x43,0x5a,0x45,0x4b,0x62,0x45,0x4b,0x62,0x45,0x4b,0x62,0x4c,0x52,0x67,0x52, 0x54,0x66,0x50,0x50,0x60,0x41,0x41,0x4f,0x2d,0x2f,0x3c,0x3f,0x41,0x4c,0x27,0x29, 0x34,0x21,0x24,0x2e,0x1e,0x22,0x2b,0x1e,0x21,0x2a,0x1c,0x1e,0x28,0x1b,0x1e,0x26, 0x1a,0x1d,0x26,0x19,0x1b,0x23,0x18,0x1a,0x22,0x16,0x18,0x20,0x13,0x16,0x1c,0x12, 0x14,0x1a,0x11,0x12,0x18,0x0f,0x11,0x16,0x0e,0x0f,0x14,0x0c,0x0e,0x12,0x0c,0x0d, 0x12,0x0a,0x0b,0x0f,0x0a,0x0a,0x0e,0x09,0x0a,0x0d,0x09,0x09,0x0c,0x08,0x08,0x0b, 0x08,0x08,0x0b,0x07,0x07,0x0a,0x06,0x07,0x0a,0x25,0x28,0x30,0x6c,0x77,0x9a,0x50, 0x51,0x7b,0x5c,0x51,0x77,0x5e,0x51,0x75,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e,0x52, 0x75,0x5e,0x52,0x75,0x5e,0x51,0x75,0x5e,0x51,0x75,0x5e,0x52,0x75,0x5e,0x52,0x75, 0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e,0x52,0x75,0x62,0x55,0x7a,0x66,0x59,0x80,0x02, 0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x57,0x62, 0x83,0x52,0x4f,0x7a,0x57,0x50,0x79,0x55,0x50,0x79,0x54,0x50,0x79,0x52,0x4f,0x7a, 0x52,0x4f,0x7a,0x52,0x50,0x7b,0x52,0x52,0x7c,0x52,0x55,0x81,0x52,0x55,0x80,0x55, 0x50,0x79,0x57,0x50,0x79,0x5a,0x66,0x8e,0x94,0x9e,0xb8,0xa2,0xa9,0xbf,0xe3,0xe6, 0xed,0xc9,0xce,0xdb,0xbb,0xc2,0xd2,0xa3,0xab,0xc2,0x8d,0x98,0xb3,0x98,0xa1,0xba, 0xab,0xb2,0xc7,0xb1,0xb8,0xcb,0xa7,0xaf,0xc4,0x9d,0xa7,0xbf,0x95,0x9f,0xb9,0x92, 0x9b,0xb7,0x8d,0x98,0xb3,0x8e,0x98,0xb3,0x8d,0x98,0xb3,0x8e,0x99,0xb4,0x8a,0x94, 0xb1,0x88,0x92,0xb0,0x89,0x93,0xb0,0x86,0x91,0xaf,0x80,0x8b,0xaa,0x7c,0x88,0xa8, 0x7b,0x86,0xa7,0x76,0x82,0xa3,0x72,0x7d,0xa0,0x8e,0x98,0xb3,0xa1,0xa9,0xc1,0x8b, 0x95,0xb2,0x55,0x50,0x79,0x60,0x53,0x77,0x60,0x53,0x77,0x64,0x53,0x75,0x64,0x53, 0x76,0x64,0x53,0x76,0x64,0x53,0x76,0x63,0x53,0x77,0x64,0x53,0x76,0x64,0x53,0x74, 0x64,0x53,0x74,0x64,0x53,0x73,0x64,0x53,0x73,0x64,0x4e,0x6c,0x63,0x4c,0x69,0x56, 0x50,0x79,0x52,0x50,0x7b,0x57,0x50,0x79,0x5e,0x53,0x79,0x5e,0x53,0x79,0x5e,0x53, 0x79,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77, 0x60,0x53,0x77,0x60,0x53,0x77,0x5a,0x52,0x79,0x52,0x4f,0x7a,0x5a,0x41,0x5b,0x56, 0x50,0x79,0x9b,0x99,0xa2,0x3b,0x2c,0x36,0x61,0x4d,0x60,0x06,0x05,0x06,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x6c,0x6c,0x6e,0x5f,0x6b,0x92,0x5f,0x47,0x64,0x5d,0x52,0x79,0x5a,0x52,0x79,0x5a, 0x52,0x79,0x57,0x50,0x79,0x57,0x50,0x79,0x55,0x50,0x79,0x55,0x50,0x79,0x54,0x50, 0x79,0x52,0x4f,0x7a,0x52,0x4f,0x7b,0x52,0x50,0x7c,0x52,0x55,0x80,0x52,0x5a,0x84, 0x54,0x5f,0x89,0x52,0x55,0x80,0x5a,0x52,0x79,0x54,0x5f,0x83,0x6a,0x6c,0x76,0x4f, 0x4f,0x51,0xfd,0xfd,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0x8d,0x8d,0x90,0x2d,0x2d, 0x3e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x87,0x89,0x8e,0x60,0x6c,0x93, 0x64,0x52,0x73,0x64,0x53,0x75,0x52,0x52,0x7c,0x52,0x53,0x7d,0x52,0x55,0x81,0x52, 0x58,0x83,0x93,0x99,0xb2,0x85,0x8d,0xaa,0x64,0x6e,0x93,0x73,0x7c,0x9e,0x72,0x7b, 0x9e,0x62,0x6c,0x92,0x61,0x6b,0x92,0x7a,0x82,0xa3,0x93,0x93,0xac,0xa1,0x95,0xa6, 0x8b,0x8d,0xa9,0x53,0x56,0x5e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x17,0x17,0x17,0x1a,0x1a,0x1a,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x09,0x09, 0x1a,0x1a,0x1a,0x2b,0x2b,0x2b,0x30,0x30,0x30,0x24,0x24,0x24,0x24,0x24,0x25,0x16, 0x17,0x17,0x08,0x08,0x09,0x03,0x04,0x05,0x04,0x04,0x05,0x04,0x04,0x05,0x05,0x05, 0x06,0x06,0x06,0x07,0x06,0x06,0x08,0x06,0x06,0x07,0x08,0x08,0x0a,0x08,0x08,0x0a, 0x09,0x0a,0x0b,0x0a,0x0a,0x0b,0x0a,0x0a,0x0c,0x0a,0x0a,0x0d,0x0a,0x0b,0x0e,0x0a, 0x0b,0x0e,0x38,0x39,0x3c,0x0e,0x0f,0x11,0x0c,0x0d,0x0f,0x0b,0x0c,0x0e,0x0d,0x0e, 0x10,0x0c,0x0d,0x0f,0x3b,0x2f,0x3a,0x71,0x7c,0x9a,0x54,0x5e,0x84,0x52,0x58,0x80, 0x53,0x59,0x80,0x52,0x5b,0x81,0x52,0x58,0x80,0x58,0x5c,0x84,0x6e,0x72,0x91,0x54, 0x57,0x7e,0x54,0x56,0x7b,0x51,0x53,0x76,0x4c,0x4c,0x6f,0x54,0x4b,0x66,0x53,0x51, 0x6d,0x42,0x3a,0x4a,0x43,0x39,0x49,0x46,0x3d,0x4e,0x43,0x3b,0x4b,0x3b,0x33,0x41, 0x32,0x2c,0x39,0x3b,0x32,0x40,0x52,0x4a,0x5a,0x54,0x59,0x74,0x4c,0x4d,0x6e,0x56, 0x4f,0x6f,0x5d,0x52,0x73,0x5c,0x4f,0x6e,0x58,0x4c,0x6a,0x56,0x4c,0x69,0x56,0x4d, 0x68,0x5c,0x54,0x70,0x61,0x59,0x75,0x5b,0x54,0x6e,0x5a,0x53,0x6c,0x61,0x59,0x72, 0x65,0x5b,0x74,0x6a,0x61,0x7b,0x4e,0x48,0x58,0x4f,0x48,0x59,0x4e,0x46,0x57,0x4a, 0x40,0x52,0x45,0x3d,0x4d,0x40,0x38,0x48,0x38,0x33,0x43,0x32,0x2e,0x3d,0x28,0x25, 0x31,0x25,0x23,0x2e,0x7c,0x6e,0x9a,0x59,0x50,0x6f,0x45,0x3f,0x57,0x5b,0x52,0x72, 0x5c,0x52,0x77,0x5d,0x53,0x77,0x5c,0x53,0x77,0x5b,0x52,0x78,0x5b,0x53,0x78,0x5a, 0x52,0x78,0x57,0x50,0x78,0x54,0x50,0x78,0x3c,0x39,0x57,0x58,0x55,0x7f,0x52,0x50, 0x77,0x0a,0x0b,0x0c,0x0c,0x0b,0x0f,0x0b,0x0c,0x0f,0x0e,0x0e,0x12,0x0f,0x10,0x15, 0x10,0x12,0x16,0x2e,0x2b,0x35,0x3a,0x33,0x3d,0x33,0x2c,0x37,0x31,0x2c,0x35,0x50, 0x4f,0x71,0x5a,0x5d,0x87,0x50,0x54,0x78,0x4d,0x4f,0x71,0x36,0x36,0x4e,0x34,0x35, 0x4d,0x36,0x37,0x4f,0x1f,0x21,0x29,0x50,0x48,0x5a,0x56,0x4d,0x5f,0x8a,0x91,0xa4, 0x58,0x62,0x82,0x47,0x47,0x61,0x1e,0x1e,0x29,0x2a,0x27,0x33,0x22,0x21,0x2d,0x33, 0x34,0x4b,0x1e,0x21,0x2b,0x1a,0x1c,0x23,0x1a,0x1c,0x22,0x19,0x1b,0x22,0x18,0x1a, 0x21,0x30,0x2b,0x36,0x53,0x4e,0x6e,0x55,0x50,0x70,0x33,0x31,0x42,0x16,0x17,0x1e, 0x16,0x18,0x20,0x17,0x18,0x20,0x19,0x19,0x21,0x1a,0x1a,0x23,0x16,0x16,0x1e,0x18, 0x18,0x21,0x18,0x19,0x22,0x16,0x18,0x1f,0x2c,0x26,0x30,0x2f,0x27,0x32,0x45,0x47, 0x60,0x46,0x3e,0x5a,0x3e,0x34,0x48,0x34,0x2b,0x3c,0x2e,0x26,0x35,0x2d,0x25,0x33, 0x42,0x36,0x49,0x4e,0x48,0x65,0x5d,0x5b,0x75,0x6e,0x6d,0x84,0x6c,0x6c,0x84,0x5f, 0x5f,0x79,0x6a,0x6c,0x85,0x72,0x75,0x8f,0x78,0x7a,0x95,0x87,0x89,0xa1,0x9f,0x9f, 0xb3,0xae,0xae,0xbc,0xbd,0xbf,0xcc,0xbb,0xbd,0xca,0xb0,0xb2,0xb7,0xb5,0xb6,0xba, 0xaf,0xb1,0xb6,0x91,0x95,0xa1,0x77,0x7d,0x8e,0x73,0x79,0x89,0x72,0x77,0x86,0x74, 0x79,0x87,0x71,0x76,0x86,0x6a,0x70,0x80,0x6a,0x70,0x81,0x62,0x69,0x7b,0x56,0x5c, 0x6f,0x44,0x4a,0x60,0x3e,0x40,0x56,0x41,0x43,0x5a,0x42,0x48,0x60,0x46,0x4d,0x65, 0x4a,0x51,0x68,0x42,0x46,0x5e,0x3a,0x39,0x4e,0x33,0x32,0x45,0x2c,0x2c,0x3c,0x39, 0x3b,0x48,0x37,0x3a,0x45,0x21,0x24,0x2e,0x1e,0x22,0x2b,0x1e,0x22,0x2b,0x1c,0x1e, 0x29,0x1c,0x1e,0x27,0x1a,0x1e,0x26,0x1a,0x1c,0x25,0x18,0x1a,0x22,0x16,0x17,0x1e, 0x14,0x16,0x1d,0x12,0x14,0x1a,0x11,0x12,0x18,0x0f,0x11,0x16,0x0e,0x0f,0x15,0x0d, 0x0e,0x12,0x0c,0x0d,0x11,0x0a,0x0b,0x0f,0x0a,0x0a,0x0e,0x0a,0x0a,0x0e,0x09,0x0a, 0x0d,0x09,0x0a,0x0d,0x08,0x08,0x0b,0x07,0x08,0x0a,0x07,0x07,0x0a,0x0f,0x10,0x14, 0x74,0x7e,0x9e,0x50,0x5a,0x82,0x5c,0x51,0x76,0x5d,0x51,0x74,0x5e,0x51,0x75,0x5e, 0x52,0x75,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e,0x52, 0x75,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e,0x52,0x75,0x61,0x55,0x78, 0x76,0x66,0x92,0x02,0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04, 0x04,0x06,0x5e,0x6a,0x92,0x52,0x4f,0x7a,0x57,0x50,0x79,0x55,0x50,0x79,0x53,0x4f, 0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x50,0x7b,0x52,0x4f,0x7b,0x57,0x50,0x79, 0x5a,0x52,0x79,0x52,0x4f,0x7a,0x64,0x6f,0x95,0xa8,0xaf,0xc4,0x85,0x8e,0xac,0x69, 0x73,0x98,0x72,0x6d,0x8b,0xc7,0xc4,0xcb,0xd6,0xd9,0xe3,0xca,0xcf,0xdb,0xb4,0xbb, 0xce,0x98,0xa1,0xba,0x82,0x8c,0xab,0x93,0x9c,0xb7,0xa9,0xb0,0xc6,0xa1,0xa9,0xc0, 0x9b,0xa3,0xbc,0x92,0x9b,0xb7,0x8d,0x98,0xb3,0x8c,0x96,0xb3,0x8a,0x94,0xb1,0x8c, 0x95,0xb2,0x88,0x92,0xb0,0x88,0x92,0xaf,0x86,0x91,0xaf,0x80,0x8b,0xaa,0x80,0x8a, 0xaa,0x7a,0x85,0xa7,0x79,0x83,0xa4,0x74,0x80,0xa2,0x74,0x80,0xa2,0x9c,0xa4,0xbe, 0xa8,0xb0,0xc6,0x80,0x8a,0xaa,0x62,0x53,0x77,0x62,0x53,0x77,0x63,0x53,0x77,0x64, 0x53,0x76,0x64,0x53,0x76,0x63,0x53,0x77,0x64,0x53,0x76,0x63,0x53,0x77,0x64,0x53, 0x76,0x64,0x53,0x75,0x64,0x53,0x74,0x64,0x52,0x72,0x64,0x53,0x74,0x64,0x50,0x6f, 0x62,0x4a,0x66,0x62,0x53,0x77,0x52,0x52,0x7c,0x52,0x4f,0x7a,0x5e,0x53,0x79,0x5e, 0x53,0x79,0x5e,0x53,0x79,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53, 0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x5e,0x53,0x79,0x52,0x53,0x7d,0x64,0x4e,0x6c, 0x60,0x4a,0x65,0x68,0x73,0x97,0x4c,0x40,0x46,0x4a,0x39,0x46,0x39,0x2f,0x3a,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x2d,0x2d,0x2d,0x80,0x8a,0xaa,0x62,0x4a,0x66,0x64,0x50,0x71, 0x5b,0x52,0x79,0x5a,0x52,0x79,0x58,0x50,0x79,0x57,0x50,0x79,0x55,0x50,0x79,0x56, 0x50,0x79,0x55,0x50,0x79,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x50,0x7b,0x52,0x53, 0x7e,0x52,0x57,0x82,0x53,0x5e,0x88,0x52,0x5a,0x84,0x56,0x4e,0x76,0x3f,0x48,0x67, 0x3c,0x3e,0x44,0xd9,0xd9,0xda,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x81, 0x82,0x86,0x33,0x32,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2f,0x2f, 0x2f,0x8b,0x95,0xb2,0x56,0x50,0x79,0x64,0x50,0x6f,0x52,0x4f,0x7a,0x52,0x53,0x7d, 0x52,0x55,0x80,0x54,0x57,0x82,0x9f,0xa4,0xba,0x74,0x7c,0x9d,0x53,0x5e,0x88,0x69, 0x72,0x97,0x79,0x81,0xa2,0x84,0x8b,0xa9,0x7c,0x84,0xa3,0x78,0x81,0xa1,0x60,0x6a, 0x90,0x61,0x57,0x7c,0x64,0x53,0x74,0x68,0x72,0x91,0x05,0x05,0x05,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x24,0x24,0x24,0x09,0x09,0x09,0x00,0x00,0x00,0x00,0x00, 0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x04,0x04,0x04,0x1a,0x1a,0x1a,0x02,0x02,0x02, 0x0a,0x0a,0x0b,0x1b,0x1c,0x1c,0x23,0x23,0x24,0x1a,0x1a,0x1b,0x0b,0x0b,0x0c,0x04, 0x05,0x06,0x05,0x05,0x06,0x05,0x06,0x06,0x06,0x06,0x07,0x06,0x07,0x08,0x06,0x07, 0x08,0x08,0x08,0x0a,0x08,0x09,0x0a,0x20,0x21,0x22,0x2f,0x2f,0x31,0x2d,0x2e,0x30, 0x21,0x22,0x24,0x10,0x11,0x12,0x30,0x31,0x34,0x29,0x2a,0x2c,0x0b,0x0c,0x0e,0x0c, 0x0d,0x0f,0x0c,0x0d,0x0f,0x0c,0x0d,0x0f,0x39,0x2f,0x38,0x6f,0x7a,0x99,0x53,0x5d, 0x85,0x52,0x58,0x7e,0x52,0x58,0x80,0x52,0x58,0x7f,0x52,0x5b,0x81,0x70,0x73,0x94, 0x74,0x77,0x96,0x53,0x57,0x7d,0x54,0x57,0x7c,0x50,0x53,0x78,0x50,0x4d,0x72,0x58, 0x4e,0x6c,0x54,0x52,0x70,0x42,0x3b,0x4b,0x45,0x3b,0x4b,0x4a,0x3e,0x4f,0x4a,0x40, 0x52,0x47,0x3d,0x4f,0x37,0x2f,0x3c,0x33,0x2b,0x37,0x51,0x46,0x56,0x58,0x59,0x73, 0x4d,0x47,0x62,0x4c,0x3f,0x58,0x4a,0x3f,0x58,0x4c,0x40,0x59,0x4a,0x3f,0x59,0x4b, 0x41,0x5b,0x4e,0x45,0x5f,0x58,0x4e,0x6b,0x5b,0x51,0x6f,0x5b,0x52,0x6f,0x5d,0x53, 0x6f,0x63,0x5a,0x77,0x5b,0x55,0x70,0x60,0x5a,0x74,0x45,0x41,0x50,0x4c,0x46,0x57, 0x4f,0x4a,0x5b,0x4e,0x49,0x5a,0x48,0x42,0x52,0x3f,0x39,0x48,0x32,0x2e,0x3c,0x28, 0x26,0x33,0x22,0x21,0x2d,0x1e,0x1e,0x26,0x7d,0x6e,0x9a,0x5b,0x51,0x70,0x45,0x3e, 0x54,0x5b,0x52,0x72,0x5e,0x52,0x75,0x5d,0x53,0x77,0x5c,0x53,0x77,0x5d,0x53,0x78, 0x5c,0x53,0x78,0x5a,0x53,0x78,0x58,0x51,0x78,0x55,0x50,0x79,0x3f,0x3b,0x59,0x59, 0x55,0x7f,0x59,0x55,0x7d,0x11,0x11,0x13,0x15,0x14,0x19,0x16,0x16,0x1a,0x14,0x14, 0x18,0x13,0x13,0x18,0x12,0x13,0x18,0x15,0x17,0x1d,0x4d,0x43,0x52,0x36,0x2f,0x3a, 0x33,0x2d,0x38,0x34,0x30,0x3d,0x64,0x64,0x93,0x51,0x52,0x77,0x50,0x52,0x75,0x3f, 0x3f,0x5b,0x35,0x35,0x4d,0x35,0x36,0x4d,0x33,0x34,0x47,0x31,0x2f,0x3b,0x56,0x4d, 0x60,0x76,0x79,0x8e,0x70,0x7a,0x94,0x50,0x59,0x79,0x23,0x27,0x34,0x23,0x22,0x2e, 0x1a,0x1d,0x26,0x2b,0x2f,0x3f,0x46,0x48,0x65,0x21,0x23,0x2d,0x19,0x1b,0x22,0x21, 0x22,0x2a,0x50,0x48,0x5a,0x42,0x39,0x48,0x50,0x4e,0x6f,0x55,0x50,0x72,0x39,0x36, 0x4b,0x15,0x17,0x1e,0x16,0x17,0x1e,0x16,0x19,0x20,0x15,0x17,0x1e,0x16,0x18,0x1f, 0x16,0x19,0x20,0x16,0x18,0x1f,0x16,0x18,0x1f,0x16,0x17,0x1e,0x18,0x18,0x1f,0x2e, 0x27,0x32,0x32,0x2c,0x38,0x41,0x41,0x5f,0x4a,0x41,0x5b,0x42,0x39,0x4e,0x3b,0x31, 0x46,0x3a,0x31,0x45,0x4e,0x41,0x59,0x50,0x48,0x63,0x50,0x49,0x66,0x50,0x4a,0x68, 0x53,0x50,0x6e,0x53,0x4f,0x6d,0x56,0x55,0x74,0x60,0x62,0x80,0x67,0x69,0x85,0x82, 0x83,0x9b,0x9a,0x9a,0xad,0xa7,0xa8,0xb7,0xb4,0xb6,0xc5,0xaa,0xae,0xbf,0x9d,0xa1, 0xac,0x9f,0xa2,0xad,0x9a,0x9e,0xaa,0x8a,0x8f,0x9e,0x81,0x86,0x96,0x81,0x86,0x96, 0x83,0x88,0x96,0x82,0x87,0x94,0x81,0x86,0x93,0x81,0x86,0x94,0x81,0x86,0x94,0x72, 0x78,0x8a,0x5c,0x63,0x76,0x49,0x50,0x64,0x3e,0x43,0x58,0x41,0x46,0x5d,0x43,0x48, 0x60,0x46,0x4c,0x64,0x4c,0x53,0x6a,0x45,0x4b,0x62,0x40,0x40,0x57,0x3a,0x3a,0x4e, 0x34,0x33,0x46,0x30,0x30,0x40,0x43,0x44,0x50,0x40,0x43,0x4d,0x4a,0x4c,0x55,0x1f, 0x22,0x2c,0x1f,0x22,0x2c,0x1e,0x20,0x2a,0x1b,0x1e,0x27,0x1a,0x1c,0x24,0x18,0x1a, 0x22,0x16,0x18,0x1f,0x14,0x16,0x1d,0x12,0x14,0x1a,0x11,0x12,0x18,0x0f,0x11,0x16, 0x0f,0x11,0x16,0x0e,0x0f,0x14,0x0c,0x0d,0x12,0x0a,0x0b,0x0f,0x0a,0x0a,0x0e,0x0a, 0x0a,0x0e,0x0a,0x0a,0x0e,0x0a,0x0a,0x0e,0x09,0x09,0x0c,0x08,0x09,0x0b,0x07,0x08, 0x0a,0x07,0x08,0x0a,0x79,0x81,0x9f,0x51,0x5c,0x84,0x59,0x51,0x77,0x5d,0x51,0x74, 0x5d,0x51,0x74,0x5d,0x51,0x75,0x5e,0x51,0x75,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e, 0x52,0x75,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e,0x52, 0x75,0x61,0x54,0x79,0x74,0x65,0x91,0x0a,0x0a,0x0e,0x03,0x03,0x04,0x02,0x02,0x03, 0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x10,0x12,0x1a,0x5c,0x67,0x90,0x52,0x4f,0x7a,0x57,0x50,0x79,0x55, 0x50,0x79,0x53,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x5d,0x52,0x79,0x64,0x52, 0x71,0x64,0x53,0x74,0x56,0x63,0x8b,0xa6,0xae,0xc4,0xaa,0xb1,0xc5,0x72,0x7c,0x9f, 0x69,0x73,0x97,0x25,0x25,0x32,0x00,0x00,0x00,0x43,0x35,0x42,0x80,0x75,0x80,0xd0, 0xcf,0xd6,0xd1,0xd5,0xe0,0xc0,0xc6,0xd5,0xaa,0xb2,0xc7,0x77,0x83,0xa4,0x80,0x8a, 0xaa,0x90,0x9a,0xb5,0x9d,0xa5,0xbe,0x96,0xa0,0xb9,0x90,0x99,0xb4,0x8d,0x96,0xb3, 0x89,0x93,0xb1,0x86,0x91,0xaf,0x84,0x8e,0xac,0x85,0x90,0xad,0x81,0x8c,0xab,0x7d, 0x89,0xa8,0x7d,0x88,0xa8,0x7a,0x85,0xa5,0x76,0x82,0xa3,0x74,0x80,0xa2,0x81,0x8b, 0xaa,0xad,0xb5,0xc9,0xad,0xb5,0xc9,0x65,0x72,0x96,0x60,0x53,0x77,0x5d,0x52,0x79, 0x64,0x53,0x76,0x64,0x53,0x76,0x64,0x53,0x76,0x64,0x53,0x76,0x64,0x53,0x76,0x63, 0x53,0x77,0x64,0x53,0x76,0x64,0x53,0x76,0x64,0x53,0x74,0x64,0x52,0x73,0x64,0x53, 0x74,0x64,0x52,0x72,0x64,0x4d,0x6a,0x64,0x52,0x72,0x52,0x50,0x7b,0x52,0x53,0x7d, 0x55,0x50,0x79,0x5e,0x53,0x79,0x5e,0x53,0x79,0x60,0x53,0x77,0x60,0x53,0x77,0x60, 0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x52,0x4f,0x7a,0x64,0x53, 0x75,0x57,0x40,0x5a,0x52,0x4f,0x7a,0x8d,0x8a,0x92,0x3b,0x2c,0x36,0x5b,0x48,0x59, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x9a,0xa2,0xb4,0x64,0x53, 0x76,0x62,0x4a,0x66,0x5b,0x52,0x79,0x5a,0x52,0x79,0x5a,0x52,0x79,0x57,0x50,0x79, 0x55,0x50,0x79,0x55,0x50,0x79,0x54,0x50,0x79,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52, 0x50,0x7b,0x52,0x53,0x7d,0x52,0x55,0x81,0x53,0x5e,0x88,0x52,0x5d,0x86,0x58,0x4b, 0x6b,0x2d,0x2d,0x45,0x44,0x45,0x47,0xfd,0xfd,0xfd,0xff,0xff,0xff,0xff,0xff,0xff, 0xfa,0xfa,0xfa,0x1a,0x1b,0x24,0x48,0x43,0x59,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x93,0x97,0xa3,0x56,0x63,0x8b,0x64,0x53,0x73,0x62,0x53, 0x77,0x52,0x50,0x7c,0x52,0x53,0x7d,0x62,0x64,0x8b,0xa7,0xaa,0xbe,0x5e,0x67,0x8e, 0x55,0x60,0x8a,0x59,0x64,0x8c,0x5d,0x67,0x8f,0x6b,0x74,0x98,0x57,0x61,0x8a,0x53, 0x5e,0x88,0x52,0x5d,0x88,0x52,0x53,0x7e,0x64,0x4d,0x6b,0x52,0x56,0x81,0x4d,0x51, 0x59,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x0d,0x0d,0x0d,0x22,0x22,0x22,0x02,0x02,0x02,0x00, 0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x08,0x09,0x09,0x19,0x19,0x19, 0x28,0x29,0x2a,0x24,0x24,0x25,0x09,0x0a,0x0a,0x05,0x06,0x06,0x06,0x06,0x07,0x12, 0x13,0x14,0x2e,0x2f,0x2f,0x1a,0x1b,0x1c,0x08,0x09,0x0a,0x08,0x09,0x0a,0x23,0x23, 0x24,0x10,0x10,0x12,0x0a,0x0a,0x0d,0x0b,0x0c,0x0f,0x17,0x18,0x1a,0x1b,0x1c,0x1e, 0x0a,0x0b,0x0e,0x0b,0x0c,0x0e,0x0c,0x0d,0x0f,0x0c,0x0d,0x0f,0x35,0x2b,0x34,0x6f, 0x79,0x99,0x53,0x5c,0x83,0x53,0x57,0x7f,0x53,0x57,0x80,0x53,0x57,0x7f,0x53,0x59, 0x80,0x67,0x6d,0x8e,0x77,0x7a,0x98,0x54,0x58,0x7e,0x53,0x56,0x7c,0x50,0x52,0x77, 0x50,0x4e,0x73,0x5d,0x52,0x70,0x56,0x57,0x76,0x43,0x3b,0x4c,0x45,0x3b,0x4a,0x49, 0x3e,0x4e,0x4c,0x41,0x52,0x4a,0x40,0x52,0x41,0x38,0x47,0x38,0x30,0x3c,0x4e,0x43, 0x53,0x59,0x5a,0x74,0x4b,0x44,0x60,0x48,0x3d,0x54,0x46,0x3a,0x51,0x4b,0x3e,0x57, 0x52,0x45,0x61,0x57,0x4b,0x6a,0x56,0x4a,0x6a,0x56,0x4b,0x6b,0x56,0x4c,0x6b,0x55, 0x4c,0x6a,0x54,0x4a,0x69,0x56,0x4d,0x6c,0x51,0x4d,0x65,0x56,0x50,0x6a,0x3a,0x39, 0x46,0x42,0x40,0x4e,0x48,0x44,0x54,0x4a,0x43,0x55,0x48,0x41,0x52,0x41,0x3b,0x4b, 0x30,0x2e,0x3c,0x25,0x26,0x30,0x22,0x22,0x2a,0x20,0x20,0x26,0x7a,0x6e,0x96,0x5e, 0x53,0x73,0x47,0x3f,0x56,0x59,0x52,0x6f,0x5e,0x53,0x75,0x5c,0x53,0x77,0x5c,0x53, 0x78,0x5d,0x53,0x77,0x5e,0x54,0x78,0x5b,0x53,0x78,0x5a,0x53,0x78,0x57,0x50,0x79, 0x43,0x3c,0x5a,0x5a,0x54,0x7d,0x61,0x59,0x84,0x1b,0x18,0x1d,0x1f,0x1c,0x22,0x20, 0x1d,0x23,0x20,0x1e,0x25,0x1e,0x1d,0x24,0x1a,0x19,0x20,0x15,0x17,0x1d,0x32,0x31, 0x3e,0x42,0x39,0x45,0x37,0x31,0x3d,0x33,0x2d,0x37,0x58,0x57,0x7c,0x55,0x56,0x7c, 0x50,0x51,0x75,0x50,0x51,0x74,0x38,0x38,0x50,0x35,0x34,0x4d,0x35,0x36,0x4e,0x1e, 0x21,0x29,0x53,0x4a,0x5c,0x56,0x4d,0x5e,0x87,0x8e,0xa3,0x59,0x62,0x83,0x4d,0x54, 0x72,0x1b,0x1d,0x27,0x1a,0x1c,0x23,0x1a,0x1d,0x23,0x46,0x4c,0x69,0x45,0x48,0x66, 0x28,0x28,0x31,0x59,0x4d,0x62,0x58,0x4c,0x62,0x7e,0x82,0x98,0x6e,0x77,0x94,0x4e, 0x57,0x7b,0x30,0x31,0x45,0x15,0x16,0x1e,0x15,0x17,0x1e,0x16,0x18,0x1e,0x15,0x17, 0x1e,0x16,0x18,0x1e,0x16,0x17,0x1e,0x16,0x17,0x1e,0x16,0x18,0x1e,0x15,0x17,0x1e, 0x16,0x17,0x1e,0x1f,0x1e,0x26,0x30,0x29,0x32,0x35,0x31,0x3f,0x45,0x42,0x60,0x4d, 0x42,0x5d,0x4a,0x40,0x59,0x46,0x3b,0x52,0x44,0x38,0x4e,0x52,0x44,0x5c,0x5c,0x4d, 0x67,0x56,0x49,0x60,0x54,0x45,0x5c,0x5f,0x51,0x6a,0x5d,0x52,0x6f,0x56,0x51,0x70, 0x59,0x5a,0x78,0x6c,0x6d,0x88,0x8d,0x8d,0xa1,0x94,0x95,0xa6,0xa2,0xa4,0xb7,0xa0, 0xa4,0xb6,0x95,0x99,0xa6,0x97,0x9b,0xa8,0x93,0x98,0xa6,0x8f,0x94,0xa2,0x82,0x87, 0x97,0x7f,0x86,0x96,0x84,0x8a,0x99,0x89,0x8d,0x9a,0x8f,0x93,0x9f,0x91,0x95,0xa2, 0x8a,0x8f,0x9d,0x7c,0x82,0x92,0x6f,0x75,0x86,0x59,0x60,0x72,0x49,0x50,0x63,0x40, 0x46,0x5b,0x3f,0x46,0x5b,0x44,0x48,0x60,0x46,0x4b,0x64,0x4a,0x52,0x6a,0x49,0x50, 0x68,0x46,0x4d,0x65,0x3e,0x42,0x58,0x37,0x37,0x4b,0x33,0x37,0x47,0x35,0x38,0x46, 0x25,0x29,0x34,0x2b,0x2f,0x3a,0x2e,0x32,0x3c,0x29,0x2c,0x36,0x1e,0x22,0x2b,0x1a, 0x1c,0x25,0x18,0x1a,0x22,0x16,0x18,0x20,0x14,0x16,0x1d,0x13,0x15,0x1b,0x12,0x13, 0x1a,0x10,0x12,0x17,0x0f,0x11,0x16,0x0e,0x0e,0x14,0x0c,0x0d,0x12,0x0c,0x0d,0x11, 0x0a,0x0b,0x0f,0x0a,0x0b,0x0e,0x0a,0x0a,0x0e,0x0a,0x0a,0x0e,0x09,0x0a,0x0d,0x09, 0x0a,0x0d,0x09,0x09,0x0c,0x07,0x08,0x0a,0x67,0x6f,0x87,0x58,0x61,0x87,0x55,0x4f, 0x76,0x5d,0x52,0x75,0x5d,0x52,0x75,0x5d,0x52,0x75,0x5d,0x52,0x75,0x5d,0x51,0x74, 0x5e,0x51,0x75,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e, 0x52,0x75,0x5e,0x52,0x75,0x60,0x55,0x78,0x73,0x63,0x8d,0x1d,0x19,0x24,0x03,0x03, 0x04,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0x22,0x30,0x57,0x63,0x8c,0x54,0x50,0x79, 0x57,0x50,0x79,0x56,0x50,0x79,0x55,0x50,0x79,0x60,0x53,0x77,0x64,0x4d,0x6b,0x64, 0x4e,0x6c,0x52,0x53,0x7e,0x8b,0x95,0xb2,0xc4,0xca,0xd8,0x87,0x90,0xad,0x89,0x93, 0xb0,0x74,0x7e,0xa0,0x55,0x43,0x53,0x18,0x13,0x17,0x00,0x00,0x00,0x00,0x00,0x00, 0x23,0x1b,0x22,0x4c,0x3b,0x49,0x8b,0x82,0x8b,0xc9,0xca,0xd3,0xc3,0xc9,0xd8,0xb5, 0xbc,0xcf,0xa4,0xac,0xc2,0x7b,0x85,0xa7,0x6f,0x7c,0x9f,0x84,0x8e,0xac,0x93,0x9c, 0xb8,0x92,0x9b,0xb7,0x88,0x92,0xb0,0x85,0x90,0xad,0x83,0x8e,0xac,0x81,0x8b,0xaa, 0x7e,0x89,0xa9,0x7d,0x88,0xa8,0x7a,0x85,0xa7,0x77,0x82,0xa4,0x73,0x7e,0xa1,0x6f, 0x7b,0x9f,0x90,0x99,0xb4,0xb8,0xbf,0xd0,0xad,0xb5,0xc9,0x56,0x63,0x8b,0x60,0x53, 0x77,0x60,0x53,0x77,0x64,0x53,0x76,0x64,0x53,0x76,0x64,0x53,0x76,0x64,0x53,0x76, 0x64,0x53,0x76,0x63,0x53,0x77,0x64,0x53,0x76,0x64,0x53,0x76,0x64,0x53,0x75,0x64, 0x53,0x73,0x64,0x53,0x73,0x64,0x52,0x72,0x64,0x4d,0x6a,0x63,0x4b,0x67,0x55,0x50, 0x79,0x52,0x55,0x81,0x52,0x50,0x7b,0x5d,0x52,0x79,0x60,0x53,0x77,0x60,0x53,0x77, 0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x5a,0x52,0x79,0x53, 0x4f,0x7a,0x55,0x3d,0x56,0x64,0x53,0x73,0x7d,0x86,0xa3,0x42,0x35,0x3d,0x49,0x38, 0x45,0x23,0x1d,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x83, 0x87,0x8f,0x52,0x5b,0x85,0x5e,0x46,0x62,0x5c,0x52,0x79,0x5a,0x52,0x79,0x57,0x50, 0x79,0x57,0x50,0x79,0x57,0x50,0x79,0x55,0x50,0x79,0x54,0x50,0x79,0x52,0x4f,0x7a, 0x52,0x4f,0x7a,0x52,0x50,0x7b,0x52,0x52,0x7c,0x52,0x55,0x81,0x52,0x5d,0x88,0x51, 0x5d,0x86,0x4c,0x3f,0x5a,0x1e,0x1b,0x29,0xd5,0xd5,0xd5,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xbf,0xbf,0xc0,0x29,0x28,0x37,0x5b,0x54,0x6f,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4c,0x4c,0x4e,0x73,0x7e,0xa1,0x64, 0x53,0x76,0x64,0x53,0x74,0x52,0x4f,0x7a,0x56,0x56,0x7f,0x95,0x96,0xae,0x9f,0xa2, 0xb8,0x58,0x61,0x89,0x55,0x60,0x8a,0x54,0x5f,0x8a,0x52,0x5d,0x88,0x53,0x5e,0x88, 0x53,0x5e,0x88,0x53,0x5e,0x88,0x52,0x5d,0x88,0x52,0x5d,0x88,0x5a,0x52,0x79,0x64, 0x4f,0x6e,0x69,0x74,0x92,0x0a,0x0a,0x0b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x12,0x12,0x12,0x2d,0x2d,0x2d,0x0b,0x0b,0x0b, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x02,0x03, 0x03,0x03,0x03,0x04,0x03,0x04,0x05,0x1c,0x1c,0x1d,0x24,0x24,0x25,0x05,0x06,0x06, 0x05,0x06,0x06,0x12,0x12,0x13,0x26,0x27,0x28,0x27,0x27,0x29,0x19,0x19,0x1b,0x08, 0x09,0x0a,0x20,0x21,0x22,0x38,0x38,0x3a,0x0a,0x0a,0x0d,0x0a,0x0a,0x0d,0x0a,0x0b, 0x0e,0x0b,0x0c,0x0e,0x0b,0x0c,0x0e,0x0b,0x0c,0x0e,0x0b,0x0c,0x0e,0x0b,0x0c,0x0e, 0x32,0x29,0x31,0x69,0x73,0x92,0x53,0x5d,0x82,0x53,0x57,0x7e,0x52,0x58,0x7f,0x52, 0x58,0x7f,0x52,0x56,0x7e,0x64,0x67,0x8b,0x79,0x7b,0x9a,0x54,0x56,0x7c,0x53,0x57, 0x7c,0x50,0x53,0x7a,0x50,0x4d,0x73,0x5c,0x51,0x70,0x57,0x57,0x79,0x43,0x3b,0x4c, 0x42,0x39,0x49,0x46,0x3c,0x4c,0x49,0x3e,0x4f,0x47,0x3d,0x4c,0x40,0x36,0x44,0x3a, 0x31,0x3e,0x4e,0x41,0x50,0x5a,0x5c,0x75,0x4a,0x45,0x60,0x4f,0x43,0x5d,0x51,0x44, 0x5e,0x53,0x46,0x62,0x55,0x49,0x68,0x55,0x49,0x69,0x56,0x4b,0x6b,0x56,0x4b,0x6b, 0x56,0x4c,0x6c,0x56,0x4a,0x69,0x55,0x4c,0x69,0x55,0x4c,0x69,0x4d,0x44,0x61,0x52, 0x49,0x64,0x31,0x2e,0x3b,0x3b,0x36,0x45,0x42,0x3c,0x4c,0x46,0x3f,0x50,0x46,0x40, 0x50,0x41,0x3b,0x4b,0x32,0x30,0x3e,0x26,0x26,0x30,0x24,0x24,0x2b,0x22,0x20,0x27, 0x76,0x6a,0x92,0x5e,0x55,0x75,0x49,0x40,0x5a,0x56,0x4d,0x6c,0x5e,0x52,0x75,0x5e, 0x53,0x75,0x5c,0x52,0x77,0x5d,0x53,0x77,0x5b,0x52,0x78,0x5e,0x54,0x78,0x5c,0x53, 0x78,0x58,0x52,0x79,0x41,0x3c,0x5a,0x59,0x52,0x7b,0x66,0x5d,0x87,0x1d,0x1a,0x20, 0x20,0x1c,0x23,0x22,0x1f,0x26,0x24,0x22,0x29,0x25,0x21,0x29,0x24,0x22,0x2a,0x21, 0x20,0x27,0x1f,0x1f,0x27,0x5a,0x4d,0x61,0x3f,0x36,0x42,0x38,0x32,0x3d,0x3c,0x37, 0x47,0x5f,0x5f,0x88,0x50,0x51,0x75,0x50,0x51,0x74,0x46,0x47,0x65,0x35,0x35,0x4d, 0x35,0x36,0x4e,0x35,0x38,0x4d,0x38,0x35,0x41,0x56,0x4d,0x5e,0x82,0x87,0x9c,0x70, 0x78,0x93,0x50,0x5a,0x7b,0x29,0x2c,0x3b,0x1a,0x1c,0x23,0x19,0x1b,0x22,0x22,0x25, 0x30,0x4e,0x57,0x7a,0x55,0x4c,0x61,0x59,0x4e,0x62,0xa8,0xaa,0xb7,0x96,0x9c,0xaf, 0x61,0x66,0x79,0x2d,0x30,0x3c,0x15,0x17,0x1e,0x14,0x16,0x1d,0x15,0x16,0x1e,0x15, 0x17,0x1e,0x15,0x17,0x1e,0x15,0x16,0x1e,0x15,0x16,0x1e,0x15,0x17,0x1e,0x15,0x16, 0x1d,0x14,0x16,0x1c,0x13,0x15,0x1b,0x16,0x16,0x1d,0x27,0x24,0x2c,0x34,0x2d,0x38, 0x47,0x46,0x66,0x52,0x48,0x62,0x50,0x45,0x5f,0x48,0x3d,0x52,0x3e,0x32,0x45,0x41, 0x35,0x48,0x44,0x37,0x4a,0x3b,0x2f,0x40,0x36,0x2b,0x3a,0x3e,0x31,0x41,0x61,0x50, 0x69,0x63,0x58,0x75,0x59,0x55,0x75,0x58,0x59,0x77,0x61,0x61,0x7c,0x72,0x73,0x89, 0x7e,0x84,0x9c,0x91,0x96,0xaa,0x93,0x97,0xa5,0x9a,0x9e,0xaa,0x97,0x9b,0xa7,0x8e, 0x93,0xa1,0x83,0x89,0x99,0x7c,0x82,0x94,0x81,0x87,0x97,0x87,0x8e,0x9d,0x93,0x97, 0xa5,0x98,0x9c,0xa8,0x92,0x97,0xa4,0x8e,0x92,0x9f,0x8a,0x8f,0x9d,0x77,0x7d,0x8d, 0x6a,0x70,0x82,0x5b,0x62,0x74,0x4d,0x54,0x68,0x46,0x4c,0x63,0x45,0x49,0x62,0x47, 0x4d,0x66,0x4a,0x51,0x6a,0x4c,0x54,0x6c,0x49,0x50,0x67,0x45,0x4b,0x62,0x42,0x48, 0x5c,0x39,0x3e,0x4f,0x31,0x36,0x43,0x3a,0x3e,0x4a,0x42,0x46,0x52,0x37,0x3b,0x46, 0x26,0x29,0x33,0x1b,0x1e,0x27,0x18,0x1a,0x22,0x17,0x19,0x21,0x15,0x16,0x1e,0x13, 0x16,0x1c,0x12,0x14,0x1a,0x11,0x12,0x18,0x10,0x12,0x17,0x0e,0x10,0x15,0x0d,0x0e, 0x12,0x0c,0x0d,0x11,0x0c,0x0d,0x11,0x0b,0x0c,0x10,0x0a,0x0b,0x0e,0x0a,0x0b,0x0e, 0x0a,0x0a,0x0e,0x0a,0x0a,0x0e,0x09,0x09,0x0c,0x09,0x09,0x0c,0x4a,0x4f,0x61,0x5b, 0x66,0x8c,0x51,0x4d,0x76,0x5c,0x51,0x74,0x5d,0x51,0x74,0x5d,0x51,0x74,0x5d,0x52, 0x75,0x5d,0x52,0x75,0x5d,0x51,0x75,0x5d,0x51,0x74,0x5e,0x51,0x75,0x5e,0x52,0x75, 0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5f,0x53,0x77,0x70,0x61,0x8c,0x32, 0x2c,0x3f,0x03,0x04,0x05,0x03,0x04,0x05,0x02,0x03,0x04,0x02,0x03,0x04,0x02,0x02, 0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2e,0x35,0x48,0x53,0x5e, 0x88,0x54,0x50,0x79,0x58,0x50,0x79,0x60,0x53,0x77,0x64,0x4c,0x69,0x60,0x48,0x64, 0x55,0x50,0x79,0x7d,0x88,0xa8,0xe1,0xe3,0xea,0x9c,0xa4,0xbc,0x91,0x9a,0xb6,0xb2, 0xb8,0xcc,0x6e,0x67,0x8a,0x44,0x34,0x40,0x39,0x2b,0x34,0x2f,0x24,0x2d,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x37,0x2a,0x34,0x48,0x38,0x43, 0x82,0x7c,0x86,0xbe,0xc2,0xd0,0xbe,0xc3,0xd3,0xb5,0xbb,0xce,0x95,0x9f,0xb9,0x6d, 0x79,0x9c,0x65,0x72,0x96,0x77,0x83,0xa4,0x89,0x93,0xb0,0x86,0x91,0xaf,0x81,0x8b, 0xaa,0x80,0x8a,0xaa,0x7c,0x88,0xa8,0x79,0x84,0xa5,0x79,0x83,0xa4,0x74,0x80,0xa2, 0x72,0x7e,0xa1,0x77,0x83,0xa4,0xa9,0xb0,0xc6,0xc0,0xc6,0xd6,0xac,0xb4,0xc8,0x52, 0x52,0x7d,0x62,0x53,0x77,0x5d,0x52,0x79,0x63,0x53,0x77,0x64,0x53,0x76,0x64,0x53, 0x76,0x64,0x53,0x76,0x64,0x53,0x76,0x64,0x53,0x76,0x64,0x53,0x76,0x64,0x53,0x76, 0x64,0x53,0x75,0x64,0x53,0x74,0x64,0x53,0x73,0x64,0x52,0x72,0x64,0x4f,0x6e,0x62, 0x4b,0x66,0x60,0x53,0x77,0x52,0x55,0x81,0x52,0x55,0x80,0x55,0x50,0x79,0x60,0x53, 0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77, 0x52,0x55,0x80,0x5d,0x45,0x60,0x5b,0x44,0x5e,0x56,0x62,0x8b,0x8c,0x86,0x8c,0x3e, 0x2f,0x39,0x52,0x41,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x51,0x52,0x54,0x60,0x6c,0x93,0x62,0x4a,0x65,0x64,0x53,0x76,0x5a, 0x52,0x79,0x58,0x50,0x79,0x57,0x50,0x79,0x57,0x50,0x79,0x56,0x50,0x79,0x55,0x50, 0x79,0x53,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x50,0x7c,0x52,0x53,0x7e, 0x52,0x5a,0x84,0x4c,0x56,0x7c,0x36,0x2f,0x43,0x3c,0x39,0x3e,0xfc,0xfc,0xfc,0xff, 0xff,0xff,0xff,0xff,0xff,0xfc,0xfc,0xfc,0x1e,0x1e,0x24,0x43,0x3d,0x51,0x6b,0x60, 0x7d,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03, 0x8e,0x95,0xa9,0x52,0x4f,0x7b,0x62,0x4a,0x66,0x68,0x60,0x83,0x8c,0x8c,0xa7,0x8a, 0x8a,0xa6,0x62,0x65,0x8d,0x53,0x5b,0x84,0x52,0x5b,0x85,0x53,0x5e,0x88,0x53,0x5e, 0x89,0x53,0x5e,0x88,0x53,0x5e,0x88,0x53,0x5e,0x88,0x52,0x5d,0x88,0x52,0x5d,0x86, 0x52,0x57,0x82,0x62,0x4a,0x66,0x52,0x55,0x80,0x57,0x59,0x61,0x00,0x00,0x00,0x04, 0x04,0x04,0x29,0x29,0x29,0x08,0x08,0x08,0x00,0x00,0x00,0x21,0x21,0x21,0x09,0x09, 0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x03,0x03,0x02,0x03,0x03,0x02,0x03,0x03,0x04,0x04,0x05,0x05,0x05,0x06,0x47,0x47, 0x48,0x24,0x25,0x25,0x0d,0x0d,0x0e,0x0b,0x0b,0x0c,0x27,0x27,0x28,0x15,0x16,0x18, 0x27,0x27,0x29,0x08,0x08,0x0a,0x1b,0x1c,0x1d,0x0c,0x0c,0x0d,0x0a,0x0a,0x0c,0x0a, 0x0b,0x0e,0x0a,0x0b,0x0e,0x0a,0x0b,0x0e,0x0a,0x0b,0x0d,0x0b,0x0c,0x0e,0x0b,0x0c, 0x0e,0x0b,0x0c,0x0e,0x2f,0x27,0x2f,0x68,0x71,0x91,0x52,0x5c,0x84,0x52,0x57,0x7e, 0x53,0x57,0x7e,0x52,0x55,0x7c,0x52,0x55,0x7d,0x66,0x68,0x8c,0x78,0x79,0x97,0x54, 0x57,0x7e,0x54,0x57,0x7c,0x51,0x53,0x78,0x50,0x4f,0x73,0x59,0x4f,0x6f,0x54,0x57, 0x79,0x3d,0x37,0x48,0x3b,0x34,0x43,0x42,0x3a,0x49,0x45,0x3b,0x4a,0x42,0x39,0x49, 0x3c,0x34,0x42,0x36,0x2f,0x3b,0x47,0x3b,0x49,0x59,0x5a,0x74,0x47,0x44,0x62,0x4a, 0x41,0x5b,0x52,0x48,0x66,0x54,0x49,0x66,0x54,0x49,0x68,0x56,0x4b,0x6b,0x57,0x4d, 0x6d,0x59,0x4d,0x6e,0x5a,0x4e,0x6e,0x5a,0x4d,0x6e,0x59,0x4e,0x6e,0x57,0x4e,0x6d, 0x50,0x47,0x65,0x56,0x4d,0x68,0x3a,0x33,0x42,0x3e,0x36,0x46,0x42,0x3a,0x4a,0x42, 0x3a,0x4a,0x42,0x3a,0x4a,0x3b,0x35,0x45,0x2e,0x2c,0x3a,0x26,0x26,0x31,0x25,0x24, 0x2d,0x22,0x22,0x28,0x71,0x65,0x8a,0x61,0x56,0x77,0x4a,0x41,0x5a,0x54,0x4c,0x69, 0x5e,0x53,0x75,0x5e,0x52,0x75,0x5d,0x52,0x77,0x5c,0x53,0x77,0x5d,0x53,0x78,0x5e, 0x54,0x78,0x5b,0x53,0x78,0x59,0x52,0x79,0x46,0x41,0x5e,0x5d,0x54,0x7c,0x68,0x5e, 0x8a,0x21,0x1e,0x25,0x25,0x21,0x29,0x2b,0x26,0x30,0x2f,0x29,0x33,0x30,0x2b,0x35, 0x30,0x2b,0x36,0x2e,0x29,0x34,0x2a,0x27,0x31,0x3a,0x39,0x48,0x4e,0x44,0x53,0x3d, 0x37,0x43,0x34,0x2f,0x39,0x62,0x5f,0x86,0x53,0x54,0x78,0x51,0x51,0x74,0x50,0x51, 0x75,0x3a,0x3a,0x52,0x34,0x34,0x4d,0x35,0x35,0x4e,0x24,0x26,0x31,0x55,0x4b,0x5d, 0x56,0x4c,0x5e,0x90,0x97,0xab,0x55,0x60,0x80,0x50,0x58,0x78,0x1a,0x1c,0x24,0x19, 0x1b,0x22,0x18,0x1a,0x21,0x48,0x50,0x6f,0x57,0x5a,0x77,0xbd,0xbc,0xc6,0xbc,0xbf, 0xc7,0x73,0x77,0x83,0x15,0x16,0x1e,0x15,0x16,0x1d,0x15,0x16,0x1e,0x15,0x16,0x1e, 0x15,0x16,0x1e,0x14,0x16,0x1d,0x16,0x17,0x1e,0x15,0x16,0x1e,0x14,0x16,0x1d,0x15, 0x17,0x1e,0x13,0x15,0x1b,0x13,0x15,0x1b,0x13,0x15,0x1a,0x12,0x13,0x19,0x13,0x14, 0x1a,0x39,0x34,0x41,0x47,0x4d,0x6f,0x4e,0x45,0x63,0x52,0x46,0x61,0x52,0x45,0x5d, 0x46,0x3b,0x4f,0x4a,0x3d,0x51,0x4f,0x44,0x55,0x4e,0x43,0x52,0x49,0x3f,0x4c,0x3d, 0x32,0x40,0x3c,0x30,0x3f,0x5a,0x4a,0x61,0x64,0x55,0x6f,0x60,0x53,0x6d,0x5a,0x4e, 0x68,0x4d,0x4b,0x67,0x61,0x66,0x83,0x71,0x78,0x90,0x86,0x8a,0x99,0x92,0x97,0xa4, 0x92,0x96,0xa4,0x8a,0x8f,0x9d,0x82,0x88,0x98,0x7b,0x82,0x94,0x82,0x88,0x9a,0x89, 0x8e,0x9e,0x8e,0x93,0xa2,0x93,0x97,0xa5,0x97,0x9b,0xa7,0x9b,0x9f,0xaa,0x9c,0x9f, 0xaa,0x90,0x95,0xa2,0x84,0x8a,0x99,0x7c,0x82,0x92,0x6c,0x72,0x86,0x5d,0x64,0x79, 0x4e,0x55,0x6e,0x48,0x4d,0x66,0x48,0x4d,0x66,0x4a,0x51,0x6a,0x4c,0x54,0x6c,0x4d, 0x54,0x6b,0x52,0x59,0x6e,0x53,0x5a,0x6c,0x49,0x4e,0x5f,0x47,0x4c,0x5b,0x4a,0x4f, 0x5c,0x3d,0x41,0x4c,0x28,0x2b,0x36,0x1e,0x22,0x2c,0x1d,0x20,0x2a,0x1a,0x1d,0x26, 0x16,0x19,0x21,0x15,0x16,0x1e,0x13,0x15,0x1b,0x12,0x13,0x19,0x10,0x11,0x16,0x0f, 0x10,0x16,0x0e,0x0e,0x14,0x0e,0x0e,0x13,0x0c,0x0d,0x12,0x0c,0x0d,0x11,0x0b,0x0c, 0x10,0x0b,0x0c,0x10,0x0a,0x0a,0x0e,0x0a,0x0a,0x0e,0x09,0x0a,0x0d,0x09,0x0a,0x0d, 0x2e,0x31,0x3c,0x62,0x6d,0x90,0x50,0x4e,0x76,0x5c,0x51,0x74,0x5c,0x51,0x74,0x5c, 0x51,0x74,0x5c,0x51,0x74,0x5d,0x51,0x74,0x5d,0x52,0x75,0x5d,0x52,0x75,0x5d,0x52, 0x75,0x5d,0x51,0x75,0x5e,0x51,0x75,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e,0x52,0x75, 0x6b,0x5c,0x86,0x4c,0x41,0x5f,0x04,0x04,0x06,0x03,0x04,0x05,0x03,0x04,0x05,0x02, 0x03,0x04,0x02,0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41, 0x48,0x62,0x52,0x58,0x83,0x58,0x50,0x79,0x64,0x53,0x75,0x5f,0x47,0x64,0x64,0x52, 0x73,0x58,0x65,0x8d,0xc2,0xc7,0xd6,0xbf,0xc4,0xd4,0x87,0x91,0xaf,0xb9,0xc0,0xd1, 0xae,0xb5,0xc9,0x4f,0x3e,0x4c,0x39,0x2b,0x34,0x3e,0x2f,0x39,0x46,0x36,0x42,0x46, 0x36,0x42,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x1e,0x17,0x1c,0x45,0x35,0x41,0x45,0x37,0x43,0x88,0x85,0x8f,0xc1,0xc4,0xd3, 0xbb,0xc1,0xd2,0xad,0xb4,0xc9,0x8c,0x96,0xb3,0x66,0x73,0x98,0x62,0x6d,0x94,0x74, 0x80,0xa2,0x82,0x8c,0xab,0x7e,0x89,0xa9,0x7c,0x88,0xa8,0x77,0x83,0xa4,0x74,0x80, 0xa2,0x72,0x7d,0xa0,0x6f,0x7b,0x9f,0x83,0x8d,0xac,0xb9,0xbf,0xd0,0xc3,0xc8,0xd7, 0x93,0x9c,0xb8,0x5b,0x52,0x79,0x5e,0x53,0x79,0x5d,0x52,0x79,0x64,0x53,0x76,0x64, 0x53,0x76,0x64,0x53,0x76,0x64,0x53,0x76,0x64,0x53,0x76,0x64,0x53,0x76,0x64,0x53, 0x76,0x64,0x53,0x75,0x64,0x53,0x75,0x64,0x53,0x74,0x64,0x52,0x72,0x64,0x50,0x71, 0x64,0x52,0x73,0x62,0x4b,0x66,0x64,0x52,0x72,0x52,0x57,0x82,0x54,0x5f,0x89,0x52, 0x50,0x7b,0x5d,0x52,0x79,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53, 0x77,0x52,0x50,0x7c,0x64,0x53,0x74,0x5a,0x41,0x5b,0x5e,0x53,0x79,0xa4,0xa9,0xbb, 0x45,0x37,0x40,0x4d,0x3c,0x4a,0x0d,0x0a,0x0d,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0c,0x0c,0x0c,0x79,0x83,0xa2,0x64,0x52,0x73, 0x62,0x4a,0x66,0x5a,0x52,0x79,0x5a,0x52,0x79,0x58,0x50,0x79,0x57,0x50,0x79,0x57, 0x50,0x79,0x56,0x50,0x79,0x53,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x50, 0x7b,0x52,0x53,0x7d,0x50,0x58,0x80,0x40,0x48,0x68,0x21,0x1d,0x2b,0xcc,0xcc,0xcc, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xde,0xde,0xde,0x22,0x22,0x2e,0x5b, 0x50,0x67,0x76,0x67,0x84,0x04,0x04,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x0c,0x0c,0x0c,0x63,0x65,0x6b,0x6b,0x75,0x9a,0x7f,0x6c,0x83,0x9f,0x95,0xa9, 0x89,0x87,0xa4,0x56,0x57,0x80,0x52,0x55,0x81,0x52,0x5a,0x84,0x52,0x5c,0x86,0x52, 0x5c,0x86,0x52,0x5d,0x88,0x53,0x5e,0x88,0x53,0x5e,0x88,0x53,0x5e,0x88,0x53,0x5e, 0x88,0x52,0x5d,0x88,0x52,0x5b,0x85,0x5c,0x52,0x79,0x64,0x4d,0x6b,0x70,0x7b,0x99, 0x14,0x15,0x15,0x2f,0x2f,0x2f,0x3a,0x3a,0x3a,0x3b,0x3b,0x3b,0x25,0x25,0x25,0x25, 0x25,0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x03,0x03,0x02,0x03,0x03,0x02,0x03,0x03,0x04,0x05,0x05,0x04, 0x04,0x05,0x05,0x06,0x06,0x16,0x16,0x17,0x2c,0x2c,0x2d,0x24,0x24,0x24,0x25,0x25, 0x25,0x0a,0x0b,0x0c,0x32,0x33,0x34,0x23,0x23,0x24,0x2f,0x2f,0x31,0x13,0x14,0x15, 0x0a,0x0a,0x0b,0x0a,0x0a,0x0c,0x0a,0x0b,0x0e,0x0a,0x0b,0x0e,0x0a,0x0b,0x0e,0x0b, 0x0c,0x0e,0x0b,0x0c,0x0e,0x0b,0x0c,0x0e,0x2b,0x25,0x2c,0x65,0x6f,0x8e,0x52,0x5b, 0x82,0x52,0x58,0x80,0x52,0x55,0x7e,0x52,0x54,0x7b,0x52,0x54,0x7c,0x6a,0x6e,0x8f, 0x73,0x75,0x95,0x53,0x55,0x7c,0x54,0x56,0x7c,0x53,0x55,0x79,0x50,0x51,0x75,0x58, 0x51,0x6f,0x4e,0x54,0x76,0x34,0x32,0x42,0x34,0x30,0x40,0x3d,0x35,0x45,0x3f,0x37, 0x46,0x3c,0x34,0x43,0x36,0x2f,0x3d,0x31,0x2b,0x37,0x46,0x39,0x49,0x5a,0x5c,0x75, 0x46,0x44,0x63,0x44,0x3d,0x58,0x50,0x47,0x66,0x53,0x48,0x67,0x55,0x4a,0x69,0x58, 0x4d,0x6d,0x5a,0x4f,0x70,0x5b,0x50,0x71,0x5d,0x51,0x72,0x5c,0x51,0x72,0x5c,0x51, 0x72,0x5b,0x51,0x71,0x51,0x48,0x67,0x59,0x4e,0x6b,0x43,0x3a,0x4a,0x43,0x3a,0x49, 0x45,0x3c,0x4c,0x54,0x4b,0x5a,0x49,0x40,0x4f,0x3e,0x36,0x46,0x32,0x2e,0x3c,0x29, 0x27,0x34,0x24,0x25,0x2f,0x22,0x23,0x2b,0x69,0x5e,0x81,0x62,0x57,0x78,0x4d,0x45, 0x5e,0x53,0x4a,0x66,0x5e,0x53,0x75,0x5c,0x52,0x77,0x5f,0x53,0x75,0x5c,0x53,0x78, 0x5d,0x53,0x78,0x5d,0x53,0x78,0x5c,0x52,0x78,0x5e,0x53,0x78,0x4b,0x44,0x62,0x5d, 0x55,0x7a,0x70,0x65,0x8e,0x2b,0x26,0x2f,0x2e,0x28,0x32,0x34,0x2d,0x39,0x3c,0x33, 0x42,0x3f,0x35,0x44,0x3f,0x36,0x44,0x3e,0x36,0x43,0x3b,0x35,0x41,0x37,0x33,0x3e, 0x65,0x58,0x6d,0x4a,0x40,0x4e,0x3d,0x37,0x43,0x46,0x41,0x55,0x58,0x58,0x7f,0x53, 0x52,0x74,0x53,0x52,0x74,0x51,0x51,0x75,0x38,0x38,0x50,0x35,0x35,0x4d,0x39,0x3a, 0x51,0x34,0x31,0x3d,0x56,0x4d,0x5e,0x82,0x85,0x99,0x6c,0x76,0x92,0x53,0x5e,0x80, 0x25,0x28,0x35,0x19,0x1a,0x22,0x17,0x19,0x1f,0x16,0x19,0x1f,0x5c,0x66,0x84,0xbc, 0xbe,0xc5,0x15,0x17,0x1e,0x16,0x17,0x1e,0x15,0x16,0x1d,0x15,0x16,0x1e,0x15,0x17, 0x1e,0x14,0x16,0x1d,0x14,0x16,0x1d,0x14,0x16,0x1d,0x15,0x16,0x1e,0x14,0x16,0x1d, 0x14,0x16,0x1d,0x14,0x16,0x1d,0x12,0x14,0x1a,0x12,0x14,0x1a,0x12,0x13,0x19,0x10, 0x12,0x17,0x10,0x11,0x16,0x2e,0x31,0x3d,0x4b,0x52,0x72,0x50,0x46,0x64,0x53,0x47, 0x62,0x59,0x4c,0x65,0x52,0x46,0x59,0x53,0x48,0x59,0x67,0x5d,0x6d,0x7e,0x75,0x81, 0x86,0x7e,0x8a,0x66,0x5d,0x69,0x3e,0x33,0x40,0x40,0x33,0x44,0x58,0x48,0x5d,0x5d, 0x4d,0x65,0x5c,0x4c,0x64,0x53,0x47,0x5e,0x4b,0x4a,0x68,0x4d,0x54,0x70,0x64,0x6a, 0x7e,0x7f,0x86,0x96,0x81,0x87,0x97,0x80,0x86,0x96,0x7d,0x83,0x94,0x81,0x87,0x97, 0x82,0x88,0x9a,0x84,0x8a,0x9a,0x86,0x8c,0x9d,0x8a,0x90,0x9f,0x94,0x98,0xa6,0x9d, 0xa1,0xac,0x9e,0xa2,0xac,0x98,0x9c,0xa7,0x92,0x97,0xa4,0x8e,0x93,0xa1,0x83,0x89, 0x98,0x7a,0x7f,0x92,0x69,0x71,0x86,0x57,0x5f,0x77,0x4e,0x55,0x6f,0x4d,0x55,0x6f, 0x4e,0x56,0x70,0x51,0x58,0x71,0x54,0x5c,0x73,0x5b,0x62,0x77,0x5a,0x60,0x73,0x56, 0x5b,0x6d,0x52,0x56,0x66,0x41,0x46,0x52,0x2e,0x32,0x3d,0x29,0x2d,0x38,0x2e,0x31, 0x3b,0x25,0x28,0x32,0x1a,0x1d,0x26,0x16,0x18,0x1f,0x13,0x15,0x1c,0x11,0x12,0x19, 0x11,0x12,0x18,0x10,0x11,0x16,0x0f,0x10,0x16,0x0e,0x0e,0x14,0x0d,0x0e,0x12,0x0c, 0x0d,0x12,0x0b,0x0c,0x10,0x0b,0x0c,0x10,0x0b,0x0b,0x0f,0x0a,0x0a,0x0e,0x0a,0x0a, 0x0e,0x0a,0x0a,0x0e,0x19,0x1a,0x20,0x64,0x6e,0x91,0x50,0x4d,0x77,0x5c,0x51,0x74, 0x5c,0x51,0x74,0x5c,0x51,0x74,0x5d,0x52,0x75,0x5c,0x51,0x75,0x5c,0x51,0x75,0x5d, 0x51,0x75,0x5d,0x52,0x75,0x5d,0x52,0x75,0x5d,0x52,0x75,0x5d,0x51,0x75,0x5e,0x51, 0x75,0x5e,0x52,0x75,0x67,0x58,0x81,0x62,0x54,0x79,0x05,0x05,0x06,0x04,0x04,0x06, 0x03,0x04,0x05,0x03,0x03,0x04,0x02,0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x03,0x02, 0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x51,0x5a,0x79,0x52,0x50,0x7b,0x64,0x4f,0x6e,0x64,0x4c,0x69,0x52, 0x4f,0x7a,0x84,0x8e,0xad,0xe0,0xe2,0xeb,0x95,0x9e,0xb8,0x90,0x99,0xb5,0xcd,0xd2, 0xde,0x6c,0x76,0x9a,0x3c,0x2d,0x37,0x36,0x28,0x30,0x42,0x33,0x3e,0x43,0x33,0x3f, 0x43,0x33,0x3f,0x47,0x37,0x43,0x32,0x28,0x31,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x05,0x06,0x34,0x28,0x31,0x3f,0x30, 0x3a,0x47,0x3a,0x43,0x8f,0x8c,0x96,0xc4,0xc8,0xd7,0xb7,0xbe,0xcf,0xa0,0xa9,0xc0, 0x88,0x92,0xaf,0x6c,0x77,0x9c,0x5d,0x6a,0x91,0x6f,0x7c,0x9f,0x7c,0x86,0xa7,0x75, 0x81,0xa3,0x75,0x81,0xa2,0x71,0x7c,0xa0,0x6d,0x79,0x9d,0x93,0x9c,0xb8,0xc7,0xcb, 0xd9,0xc9,0xcf,0xdb,0x76,0x82,0xa3,0x5f,0x53,0x79,0x5c,0x52,0x79,0x5f,0x53,0x77, 0x62,0x53,0x77,0x64,0x53,0x76,0x64,0x53,0x76,0x63,0x53,0x77,0x63,0x53,0x77,0x64, 0x53,0x76,0x64,0x53,0x75,0x64,0x53,0x75,0x64,0x53,0x75,0x64,0x53,0x74,0x64,0x52, 0x73,0x64,0x52,0x72,0x64,0x52,0x72,0x64,0x4f,0x6e,0x63,0x4c,0x69,0x52,0x4f,0x7a, 0x56,0x62,0x8b,0x52,0x5c,0x86,0x54,0x50,0x79,0x60,0x53,0x77,0x60,0x53,0x77,0x60, 0x53,0x77,0x52,0x4f,0x7b,0x52,0x4f,0x7a,0x50,0x38,0x50,0x64,0x4d,0x6b,0x82,0x8c, 0xab,0x7e,0x75,0x7a,0x47,0x37,0x44,0x4d,0x3c,0x4b,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6f,0x76, 0x87,0x52,0x50,0x7c,0x5b,0x43,0x5d,0x5b,0x52,0x79,0x5a,0x52,0x79,0x5a,0x52,0x79, 0x58,0x50,0x79,0x57,0x50,0x79,0x57,0x50,0x79,0x55,0x50,0x79,0x52,0x4f,0x7a,0x52, 0x4f,0x7a,0x52,0x4f,0x7b,0x52,0x52,0x7d,0x49,0x4e,0x74,0x2e,0x35,0x4c,0x4c,0x4c, 0x51,0xfd,0xfd,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xfd,0xfd,0x7e,0x7e,0x80, 0x3a,0x36,0x48,0x6a,0x5a,0x71,0x78,0x69,0x88,0x07,0x07,0x09,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x0f,0x0f,0x0f,0x2a,0x2b,0x2b,0xbd,0xc2,0xcf,0xaf,0xa7, 0xb8,0x82,0x6f,0x87,0x59,0x55,0x7f,0x52,0x52,0x7c,0x52,0x53,0x7e,0x52,0x56,0x82, 0x52,0x5a,0x84,0x52,0x5c,0x86,0x52,0x5d,0x88,0x53,0x5e,0x88,0x53,0x5e,0x88,0x53, 0x5e,0x88,0x53,0x5e,0x88,0x52,0x5d,0x88,0x52,0x5d,0x88,0x52,0x57,0x82,0x62,0x4a, 0x65,0x52,0x52,0x7c,0x60,0x63,0x6c,0x28,0x28,0x28,0x21,0x21,0x21,0x0a,0x0a,0x0a, 0x19,0x19,0x19,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x03,0x03,0x02,0x03,0x03, 0x04,0x04,0x05,0x04,0x04,0x05,0x04,0x04,0x05,0x05,0x06,0x06,0x08,0x09,0x09,0x2c, 0x2c,0x2d,0x1b,0x1b,0x1c,0x07,0x07,0x09,0x13,0x13,0x15,0x19,0x19,0x1a,0x0d,0x0d, 0x0f,0x08,0x09,0x0a,0x09,0x0a,0x0b,0x09,0x0a,0x0b,0x0a,0x0a,0x0d,0x0a,0x0a,0x0d, 0x0b,0x0c,0x0e,0x0b,0x0c,0x0e,0x0b,0x0c,0x0e,0x0b,0x0c,0x0e,0x29,0x22,0x2a,0x64, 0x6e,0x8e,0x52,0x5c,0x82,0x52,0x55,0x7e,0x52,0x54,0x7c,0x53,0x54,0x7b,0x52,0x53, 0x7b,0x6a,0x6c,0x8e,0x75,0x75,0x95,0x54,0x55,0x7c,0x54,0x56,0x7c,0x54,0x55,0x7a, 0x54,0x53,0x76,0x5d,0x55,0x71,0x4f,0x57,0x77,0x31,0x2f,0x3f,0x30,0x2d,0x3c,0x39, 0x33,0x42,0x3b,0x34,0x43,0x37,0x31,0x3f,0x32,0x2c,0x3a,0x2e,0x28,0x34,0x45,0x38, 0x47,0x5c,0x5c,0x74,0x47,0x49,0x69,0x42,0x3d,0x57,0x50,0x49,0x68,0x54,0x4b,0x6c, 0x57,0x4d,0x6d,0x5a,0x4f,0x71,0x5c,0x51,0x73,0x5e,0x51,0x75,0x5e,0x53,0x75,0x5e, 0x52,0x75,0x5e,0x53,0x75,0x5d,0x52,0x73,0x52,0x4b,0x69,0x59,0x4f,0x6c,0x46,0x3d, 0x4e,0x44,0x3a,0x4a,0x45,0x3d,0x4d,0x5b,0x53,0x61,0x60,0x59,0x66,0x57,0x50,0x5e, 0x49,0x42,0x51,0x37,0x32,0x40,0x29,0x27,0x34,0x21,0x23,0x2c,0x5f,0x56,0x75,0x65, 0x5b,0x7c,0x4f,0x46,0x61,0x52,0x48,0x65,0x5e,0x52,0x75,0x5e,0x53,0x75,0x5e,0x52, 0x75,0x5e,0x53,0x76,0x5d,0x53,0x77,0x5d,0x53,0x78,0x5e,0x53,0x77,0x5e,0x53,0x77, 0x55,0x4b,0x6a,0x5d,0x54,0x79,0x73,0x67,0x92,0x30,0x2a,0x35,0x35,0x2c,0x39,0x44, 0x39,0x47,0x4a,0x3e,0x4e,0x4a,0x3f,0x4f,0x45,0x3b,0x4b,0x41,0x39,0x47,0x42,0x3a, 0x48,0x43,0x3a,0x48,0x4c,0x46,0x57,0x59,0x4d,0x5e,0x46,0x3d,0x4b,0x38,0x32,0x3d, 0x66,0x61,0x88,0x58,0x55,0x75,0x54,0x52,0x74,0x53,0x53,0x75,0x4c,0x4c,0x6e,0x35, 0x35,0x4e,0x34,0x36,0x4e,0x28,0x2b,0x39,0x51,0x47,0x5a,0x55,0x4b,0x5e,0x8d,0x94, 0xa8,0x5b,0x65,0x86,0x56,0x61,0x82,0x19,0x1b,0x23,0x16,0x19,0x1f,0x16,0x17,0x1e, 0x2d,0x32,0x41,0x16,0x17,0x1e,0x15,0x16,0x1d,0x14,0x16,0x1d,0x15,0x16,0x1e,0x15, 0x17,0x1e,0x15,0x16,0x1e,0x14,0x16,0x1d,0x14,0x16,0x1d,0x15,0x16,0x1d,0x16,0x16, 0x1e,0x17,0x17,0x20,0x17,0x17,0x1f,0x16,0x16,0x1e,0x13,0x14,0x1b,0x12,0x13,0x19, 0x11,0x13,0x19,0x11,0x12,0x18,0x0f,0x11,0x16,0x1f,0x22,0x2a,0x50,0x56,0x78,0x4e, 0x46,0x65,0x52,0x46,0x62,0x56,0x4a,0x63,0x56,0x4b,0x5e,0x56,0x4c,0x5b,0x6a,0x60, 0x6e,0x8e,0x85,0x91,0x9f,0x99,0xa3,0x8d,0x85,0x91,0x55,0x4c,0x57,0x3b,0x30,0x3d, 0x5d,0x4c,0x63,0x67,0x56,0x6f,0x65,0x55,0x6e,0x57,0x47,0x5d,0x52,0x48,0x62,0x49, 0x45,0x5c,0x42,0x49,0x60,0x66,0x6d,0x80,0x63,0x6a,0x80,0x6b,0x72,0x86,0x76,0x7d, 0x90,0x7f,0x85,0x96,0x83,0x89,0x9a,0x7e,0x83,0x96,0x7e,0x84,0x96,0x81,0x87,0x9a, 0x8d,0x92,0xa2,0x96,0x9a,0xa7,0x99,0x9e,0xaa,0x96,0x9b,0xa8,0x95,0x9a,0xa6,0x92, 0x97,0xa5,0x8f,0x95,0xa2,0x8e,0x93,0xa1,0x83,0x8a,0x9a,0x6e,0x76,0x8b,0x5d,0x65, 0x7e,0x53,0x5b,0x77,0x51,0x58,0x74,0x4f,0x57,0x73,0x52,0x5a,0x73,0x56,0x5e,0x76, 0x5b,0x62,0x78,0x5b,0x62,0x75,0x5c,0x62,0x72,0x51,0x56,0x65,0x47,0x4b,0x5a,0x3e, 0x43,0x4f,0x3e,0x42,0x4e,0x36,0x3a,0x44,0x26,0x29,0x32,0x1a,0x1c,0x24,0x15,0x16, 0x1e,0x12,0x14,0x1a,0x11,0x12,0x18,0x10,0x12,0x17,0x0f,0x11,0x16,0x0e,0x0f,0x15, 0x0e,0x0f,0x15,0x0d,0x0e,0x12,0x0c,0x0d,0x11,0x0c,0x0d,0x11,0x0c,0x0c,0x11,0x0c, 0x0d,0x11,0x0b,0x0b,0x0f,0x0a,0x0b,0x0f,0x0c,0x0e,0x12,0x5f,0x6b,0x8d,0x50,0x4f, 0x77,0x5c,0x51,0x74,0x5c,0x52,0x74,0x5c,0x51,0x74,0x5c,0x51,0x74,0x5c,0x51,0x74, 0x5d,0x51,0x74,0x5d,0x52,0x75,0x5c,0x52,0x75,0x5c,0x52,0x75,0x5d,0x51,0x75,0x5d, 0x52,0x75,0x5d,0x52,0x75,0x5d,0x52,0x75,0x65,0x57,0x7d,0x76,0x67,0x94,0x05,0x06, 0x07,0x05,0x05,0x06,0x04,0x04,0x06,0x03,0x04,0x05,0x03,0x03,0x04,0x02,0x03,0x04, 0x02,0x02,0x03,0x03,0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5d,0x69,0x8d,0x5e,0x53,0x79,0x64,0x53,0x75, 0x53,0x5e,0x88,0xbb,0xc1,0xd1,0xb7,0xbd,0xcf,0x83,0x8d,0xab,0xad,0xb4,0xc9,0xce, 0xd2,0xde,0x55,0x42,0x52,0x2d,0x21,0x27,0x37,0x29,0x31,0x42,0x32,0x3d,0x41,0x32, 0x3d,0x42,0x32,0x3e,0x42,0x32,0x3e,0x45,0x35,0x41,0x53,0x40,0x50,0x05,0x04,0x05, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x20,0x19,0x1f,0x43,0x33,0x3f,0x3c,0x2d,0x37,0x49,0x3e,0x46,0x98,0x96, 0xa1,0xc1,0xc7,0xd6,0xad,0xb4,0xc9,0x96,0xa0,0xb9,0x7e,0x89,0xa9,0x66,0x72,0x98, 0x62,0x6d,0x94,0x71,0x7c,0xa0,0x74,0x80,0xa2,0x6f,0x7b,0x9f,0x75,0x81,0xa3,0xac, 0xb4,0xc9,0xcf,0xd3,0xdf,0xc6,0xcb,0xd9,0x5d,0x6a,0x91,0x5f,0x53,0x79,0x5a,0x52, 0x79,0x5d,0x52,0x79,0x63,0x53,0x77,0x64,0x53,0x76,0x64,0x53,0x76,0x64,0x53,0x76, 0x63,0x53,0x77,0x64,0x53,0x76,0x64,0x53,0x76,0x64,0x53,0x75,0x64,0x53,0x75,0x64, 0x53,0x74,0x64,0x52,0x73,0x64,0x52,0x72,0x64,0x52,0x72,0x64,0x50,0x6f,0x63,0x4b, 0x67,0x5e,0x53,0x79,0x55,0x62,0x8b,0x53,0x5e,0x88,0x52,0x50,0x7b,0x5e,0x53,0x79, 0x60,0x53,0x77,0x56,0x50,0x79,0x54,0x5f,0x89,0x56,0x3e,0x57,0x5a,0x41,0x5c,0x55, 0x60,0x8a,0xc2,0xbe,0xc1,0x41,0x31,0x3c,0x51,0x3f,0x4e,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x4f,0x51,0x58,0x5c,0x67,0x90,0x5d,0x45,0x5f,0x64,0x53,0x74,0x5b,0x52, 0x79,0x5a,0x52,0x79,0x5a,0x52,0x79,0x58,0x50,0x79,0x57,0x50,0x79,0x55,0x50,0x79, 0x53,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x50,0x50,0x79,0x3e,0x40,0x60,0x1c, 0x1f,0x2d,0xd6,0xd6,0xd6,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0xf8, 0xf8,0x1a,0x19,0x22,0x52,0x49,0x5f,0x72,0x5e,0x76,0x78,0x68,0x83,0x0a,0x0a,0x0d, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x05,0x05,0x44,0x44,0x44,0xaf, 0xb1,0xb8,0x69,0x6c,0x91,0x62,0x4b,0x66,0x5e,0x53,0x79,0x52,0x52,0x7c,0x52,0x54, 0x7e,0x52,0x55,0x80,0x52,0x58,0x84,0x52,0x5c,0x86,0x52,0x5d,0x88,0x52,0x5d,0x88, 0x53,0x5e,0x88,0x53,0x5e,0x88,0x53,0x5e,0x88,0x52,0x5d,0x88,0x52,0x5d,0x88,0x52, 0x5b,0x85,0x5a,0x52,0x79,0x62,0x4a,0x65,0x67,0x72,0x93,0x0f,0x0f,0x10,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x03,0x02,0x02,0x03,0x03,0x03,0x04,0x04,0x05,0x05,0x03,0x03,0x04,0x05,0x05,0x06, 0x05,0x05,0x06,0x10,0x10,0x11,0x10,0x10,0x11,0x06,0x07,0x08,0x06,0x07,0x08,0x07, 0x07,0x09,0x08,0x08,0x0a,0x08,0x08,0x0a,0x09,0x0a,0x0b,0x09,0x0a,0x0b,0x0a,0x0a, 0x0b,0x0a,0x0a,0x0d,0x0a,0x0b,0x0d,0x0b,0x0c,0x0e,0x0b,0x0c,0x0e,0x0b,0x0c,0x0e, 0x26,0x21,0x27,0x5f,0x69,0x89,0x52,0x5c,0x82,0x52,0x56,0x7e,0x53,0x53,0x7c,0x52, 0x53,0x7b,0x53,0x54,0x7a,0x61,0x62,0x86,0x77,0x79,0x96,0x5b,0x5c,0x82,0x54,0x55, 0x7b,0x54,0x56,0x7b,0x56,0x55,0x77,0x5f,0x56,0x73,0x54,0x5b,0x79,0x30,0x2f,0x3e, 0x2f,0x2c,0x3b,0x37,0x32,0x40,0x3a,0x33,0x43,0x38,0x32,0x40,0x32,0x2d,0x3a,0x2b, 0x26,0x33,0x48,0x3b,0x4b,0x5e,0x5d,0x74,0x4b,0x4e,0x6c,0x45,0x3e,0x5a,0x52,0x49, 0x69,0x57,0x4d,0x6f,0x5a,0x4f,0x71,0x5d,0x51,0x73,0x5e,0x52,0x75,0x5f,0x53,0x76, 0x5f,0x53,0x76,0x5f,0x54,0x77,0x5e,0x54,0x75,0x5d,0x52,0x74,0x54,0x4b,0x6b,0x5a, 0x4f,0x6c,0x49,0x3f,0x52,0x42,0x3a,0x49,0x46,0x3b,0x4c,0x53,0x4a,0x59,0x54,0x4c, 0x5c,0x4d,0x44,0x53,0x54,0x4b,0x5a,0x61,0x5a,0x66,0x31,0x2c,0x3a,0x23,0x21,0x2e, 0x55,0x4f,0x6d,0x65,0x5c,0x80,0x51,0x48,0x64,0x4f,0x46,0x61,0x5e,0x52,0x74,0x5e, 0x53,0x75,0x5e,0x53,0x75,0x5d,0x53,0x78,0x5d,0x53,0x77,0x5d,0x53,0x78,0x5e,0x53, 0x77,0x5f,0x53,0x77,0x54,0x4b,0x6a,0x5e,0x53,0x78,0x72,0x67,0x94,0x34,0x2e,0x3b, 0x3b,0x32,0x3f,0x4e,0x40,0x51,0x55,0x46,0x58,0x55,0x47,0x59,0x51,0x44,0x55,0x49, 0x3e,0x4e,0x44,0x3b,0x4a,0x44,0x3b,0x49,0x44,0x3c,0x4a,0x64,0x56,0x6b,0x52,0x46, 0x57,0x3d,0x37,0x43,0x52,0x4c,0x67,0x5b,0x58,0x7b,0x57,0x54,0x75,0x55,0x54,0x75, 0x53,0x52,0x74,0x3b,0x3b,0x56,0x34,0x34,0x4c,0x37,0x3a,0x52,0x2f,0x2c,0x38,0x55, 0x4a,0x5d,0x7a,0x7b,0x90,0x7e,0x86,0x9e,0x57,0x62,0x83,0x51,0x57,0x73,0x17,0x18, 0x1f,0x15,0x16,0x1e,0x15,0x16,0x1d,0x15,0x16,0x1d,0x14,0x16,0x1c,0x14,0x16,0x1d, 0x15,0x16,0x1e,0x15,0x16,0x1e,0x15,0x17,0x1e,0x14,0x16,0x1d,0x16,0x16,0x1e,0x1a, 0x1a,0x22,0x20,0x1e,0x27,0x23,0x20,0x2a,0x23,0x20,0x2a,0x22,0x1e,0x28,0x1e,0x1b, 0x24,0x15,0x14,0x1c,0x11,0x12,0x18,0x10,0x12,0x16,0x0f,0x10,0x16,0x0d,0x0f,0x13, 0x52,0x5c,0x7e,0x4d,0x46,0x69,0x52,0x47,0x63,0x53,0x48,0x61,0x5b,0x50,0x65,0x59, 0x4e,0x61,0x5a,0x4d,0x5e,0x78,0x6f,0x7d,0x98,0x91,0x9d,0x95,0x8e,0x99,0x62,0x59, 0x65,0x38,0x2e,0x39,0x32,0x28,0x34,0x57,0x47,0x5b,0x68,0x56,0x70,0x57,0x47,0x5d, 0x4f,0x44,0x5b,0x4a,0x41,0x57,0x40,0x3f,0x56,0x47,0x4d,0x66,0x4a,0x4f,0x6a,0x57, 0x5e,0x76,0x6a,0x72,0x86,0x7a,0x81,0x92,0x82,0x88,0x99,0x7d,0x83,0x96,0x7a,0x80, 0x93,0x7d,0x84,0x97,0x82,0x89,0x9a,0x8a,0x8f,0x9f,0x8f,0x95,0xa3,0x93,0x98,0xa6, 0x97,0x9c,0xa8,0x95,0x9a,0xa7,0x95,0x9a,0xa7,0x97,0x9c,0xa8,0x92,0x97,0xa5,0x7f, 0x86,0x97,0x6a,0x72,0x89,0x57,0x5f,0x7b,0x52,0x58,0x76,0x51,0x56,0x72,0x50,0x56, 0x72,0x4f,0x57,0x72,0x52,0x59,0x72,0x57,0x5e,0x75,0x5f,0x66,0x7a,0x62,0x68,0x7a, 0x63,0x69,0x78,0x56,0x5b,0x6a,0x4e,0x53,0x60,0x47,0x4c,0x57,0x3b,0x3f,0x4a,0x2a, 0x2d,0x36,0x19,0x1b,0x23,0x13,0x15,0x1b,0x12,0x13,0x1a,0x11,0x12,0x18,0x10,0x11, 0x16,0x0f,0x10,0x16,0x0e,0x0f,0x14,0x0e,0x0f,0x15,0x0e,0x0e,0x12,0x0d,0x0e,0x12, 0x0d,0x0e,0x12,0x0d,0x0e,0x12,0x0c,0x0d,0x11,0x0c,0x0d,0x11,0x0c,0x0d,0x12,0x54, 0x5e,0x7e,0x50,0x4e,0x76,0x59,0x51,0x75,0x5b,0x51,0x73,0x5b,0x51,0x73,0x5b,0x51, 0x74,0x5b,0x51,0x74,0x5c,0x51,0x74,0x5c,0x51,0x74,0x5c,0x51,0x74,0x5c,0x51,0x74, 0x5d,0x52,0x75,0x5c,0x52,0x75,0x5d,0x52,0x75,0x5e,0x52,0x75,0x63,0x55,0x7c,0x7a, 0x6a,0x98,0x09,0x08,0x0b,0x05,0x06,0x07,0x05,0x05,0x06,0x05,0x05,0x06,0x04,0x04, 0x06,0x04,0x04,0x05,0x03,0x03,0x05,0x03,0x03,0x04,0x03,0x03,0x04,0x02,0x02,0x03, 0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x09,0x0e,0x5d,0x69,0x91,0x52,0x4f, 0x7a,0x64,0x70,0x95,0xc7,0xcc,0xd9,0x95,0x9e,0xb8,0x8a,0x94,0xb1,0xc1,0xc6,0xd6, 0x6f,0x7a,0x9d,0x4b,0x3a,0x48,0x33,0x26,0x2e,0x3c,0x2d,0x37,0x3e,0x2f,0x3a,0x3e, 0x2f,0x39,0x3f,0x30,0x3a,0x42,0x32,0x3d,0x42,0x32,0x3d,0x45,0x35,0x41,0x49,0x38, 0x45,0x4b,0x3c,0x4b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x06,0x07,0x49,0x38,0x45,0x41, 0x31,0x3c,0x36,0x28,0x30,0x4a,0x42,0x4a,0x9f,0xa0,0xaa,0xbe,0xc3,0xd3,0xa2,0xaa, 0xc1,0x8a,0x94,0xb1,0x72,0x7d,0xa0,0x5a,0x65,0x8d,0x5e,0x6a,0x92,0x6f,0x7b,0x9f, 0x83,0x8e,0xac,0xc9,0xce,0xdb,0xd3,0xd8,0xe2,0xc6,0xcb,0xd9,0x53,0x5e,0x88,0x60, 0x53,0x77,0x5c,0x52,0x79,0x5e,0x53,0x79,0x5f,0x53,0x77,0x63,0x53,0x77,0x64,0x53, 0x76,0x64,0x53,0x76,0x64,0x53,0x76,0x64,0x53,0x76,0x64,0x53,0x76,0x64,0x53,0x76, 0x64,0x53,0x75,0x64,0x53,0x74,0x64,0x52,0x72,0x64,0x52,0x72,0x64,0x52,0x72,0x64, 0x4f,0x6d,0x63,0x4b,0x67,0x64,0x53,0x74,0x53,0x5d,0x88,0x54,0x5f,0x89,0x52,0x5d, 0x88,0x56,0x50,0x79,0x5b,0x52,0x79,0x58,0x64,0x8c,0x64,0x4f,0x6e,0x56,0x3e,0x57, 0x57,0x50,0x79,0xb4,0xba,0xca,0x58,0x4c,0x55,0x50,0x3e,0x4d,0x1e,0x17,0x1d,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x1a,0x1b,0x6f,0x7b,0x9f,0x64,0x53,0x76,0x63, 0x4b,0x67,0x5c,0x52,0x79,0x5a,0x52,0x79,0x5a,0x52,0x79,0x5a,0x52,0x79,0x5a,0x52, 0x79,0x55,0x50,0x79,0x53,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x49,0x48,0x6f, 0x2d,0x2e,0x46,0x5a,0x5a,0x5f,0xfd,0xfd,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xfd, 0xfd,0xfd,0xd6,0xd6,0xd6,0x26,0x25,0x31,0x60,0x54,0x6a,0x74,0x5f,0x77,0x77,0x62, 0x7b,0x0d,0x0d,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x24,0x24,0x24, 0x5a,0x5a,0x5a,0x77,0x78,0x7a,0x65,0x72,0x96,0x64,0x4f,0x6e,0x64,0x50,0x6f,0x52, 0x4f,0x7a,0x52,0x52,0x7d,0x52,0x54,0x7e,0x52,0x57,0x82,0x52,0x5a,0x84,0x52,0x5c, 0x86,0x52,0x5d,0x88,0x53,0x5e,0x88,0x53,0x5e,0x88,0x53,0x5e,0x88,0x53,0x5e,0x88, 0x52,0x5d,0x88,0x52,0x5c,0x86,0x52,0x57,0x82,0x5f,0x47,0x63,0x52,0x50,0x7b,0x57, 0x5c,0x67,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x02,0x03,0x03,0x03,0x03,0x04,0x04,0x04, 0x05,0x04,0x04,0x05,0x04,0x05,0x05,0x05,0x05,0x06,0x06,0x06,0x07,0x06,0x06,0x07, 0x06,0x06,0x07,0x07,0x07,0x09,0x07,0x08,0x09,0x07,0x08,0x09,0x08,0x09,0x0a,0x0a, 0x0a,0x0b,0x0a,0x0a,0x0b,0x0a,0x0a,0x0c,0x0a,0x0a,0x0d,0x0a,0x0b,0x0e,0x0a,0x0b, 0x0e,0x0b,0x0b,0x0e,0x21,0x1d,0x22,0x5d,0x66,0x86,0x52,0x5c,0x83,0x52,0x57,0x7f, 0x53,0x53,0x7c,0x53,0x52,0x79,0x53,0x52,0x79,0x61,0x62,0x85,0x8e,0x8f,0xa7,0x7f, 0x7f,0x9c,0x5a,0x5c,0x80,0x54,0x56,0x7a,0x55,0x55,0x78,0x62,0x58,0x73,0x55,0x5e, 0x7c,0x2f,0x2e,0x3b,0x2f,0x2c,0x3b,0x35,0x30,0x40,0x38,0x32,0x41,0x36,0x31,0x40, 0x31,0x2c,0x3a,0x2c,0x28,0x34,0x47,0x3b,0x4b,0x5f,0x5d,0x72,0x4c,0x50,0x70,0x46, 0x40,0x5c,0x51,0x4a,0x6a,0x58,0x4f,0x71,0x5c,0x51,0x73,0x5e,0x52,0x75,0x5e,0x53, 0x75,0x5f,0x53,0x76,0x60,0x53,0x76,0x5f,0x54,0x77,0x5f,0x53,0x76,0x5c,0x52,0x75, 0x55,0x4c,0x6b,0x59,0x4e,0x6b,0x49,0x3f,0x52,0x3e,0x36,0x46,0x41,0x39,0x49,0x50, 0x48,0x57,0x57,0x4f,0x5e,0x4b,0x3f,0x50,0x4b,0x3f,0x4f,0x59,0x50,0x5e,0x54,0x4e, 0x5b,0x28,0x26,0x33,0x4a,0x45,0x5f,0x63,0x5a,0x7d,0x51,0x49,0x65,0x4f,0x46,0x60, 0x5e,0x53,0x74,0x5e,0x52,0x75,0x5e,0x53,0x75,0x5f,0x53,0x76,0x5d,0x53,0x77,0x5d, 0x53,0x78,0x5e,0x53,0x79,0x5e,0x53,0x77,0x52,0x49,0x69,0x5a,0x51,0x74,0x6b,0x5f, 0x88,0x36,0x2f,0x3e,0x38,0x30,0x3c,0x49,0x3d,0x4c,0x51,0x44,0x55,0x54,0x46,0x57, 0x53,0x46,0x58,0x51,0x44,0x56,0x4a,0x3f,0x51,0x44,0x3b,0x4b,0x43,0x3b,0x49,0x4a, 0x43,0x53,0x5e,0x50,0x63,0x44,0x3c,0x4a,0x36,0x32,0x3e,0x66,0x60,0x85,0x59,0x55, 0x76,0x58,0x54,0x74,0x55,0x52,0x74,0x50,0x50,0x72,0x34,0x34,0x4c,0x34,0x34,0x4b, 0x2b,0x30,0x40,0x4d,0x44,0x55,0x55,0x4a,0x5c,0x96,0x9c,0xae,0x66,0x70,0x8f,0x58, 0x63,0x85,0x3e,0x40,0x54,0x15,0x16,0x1d,0x14,0x16,0x1c,0x14,0x16,0x1c,0x14,0x16, 0x1d,0x14,0x16,0x1c,0x15,0x16,0x1e,0x16,0x16,0x1e,0x15,0x16,0x1e,0x15,0x16,0x1e, 0x18,0x17,0x20,0x27,0x22,0x2d,0x2b,0x26,0x30,0x2c,0x26,0x31,0x2b,0x26,0x31,0x2a, 0x25,0x2f,0x28,0x23,0x2d,0x1a,0x19,0x21,0x11,0x12,0x17,0x0f,0x10,0x16,0x0e,0x0f, 0x13,0x0c,0x0e,0x12,0x53,0x5e,0x82,0x4e,0x49,0x6c,0x54,0x49,0x67,0x56,0x4a,0x65, 0x5c,0x51,0x69,0x58,0x4d,0x60,0x4b,0x41,0x52,0x55,0x4a,0x5a,0x73,0x6b,0x78,0x79, 0x71,0x7d,0x5c,0x51,0x5f,0x3e,0x35,0x41,0x2c,0x22,0x2d,0x32,0x27,0x33,0x45,0x36, 0x47,0x3f,0x31,0x40,0x48,0x3c,0x51,0x4b,0x41,0x56,0x42,0x46,0x5b,0x47,0x4b,0x64, 0x4a,0x49,0x64,0x4d,0x4d,0x69,0x56,0x5e,0x76,0x6a,0x71,0x86,0x7a,0x7f,0x92,0x7f, 0x86,0x97,0x7d,0x84,0x96,0x7c,0x83,0x97,0x7e,0x85,0x98,0x80,0x87,0x99,0x82,0x89, 0x9a,0x8b,0x91,0xa1,0x91,0x96,0xa4,0x92,0x98,0xa6,0x96,0x9a,0xa7,0x9a,0x9f,0xaa, 0x97,0x9b,0xa8,0x87,0x8e,0x9e,0x74,0x7b,0x90,0x64,0x6c,0x86,0x56,0x5e,0x7a,0x52, 0x5a,0x77,0x51,0x56,0x73,0x50,0x57,0x73,0x4f,0x56,0x72,0x51,0x58,0x72,0x59,0x62, 0x79,0x61,0x68,0x7d,0x62,0x69,0x7a,0x5f,0x65,0x74,0x5a,0x5e,0x6d,0x52,0x56,0x63, 0x4e,0x52,0x5e,0x42,0x45,0x4f,0x28,0x2a,0x33,0x16,0x18,0x1f,0x13,0x14,0x1b,0x12, 0x13,0x1a,0x10,0x12,0x17,0x11,0x12,0x17,0x10,0x11,0x16,0x0f,0x11,0x16,0x0e,0x0f, 0x14,0x0e,0x0f,0x15,0x0e,0x0e,0x13,0x0e,0x0e,0x13,0x0d,0x0e,0x12,0x0d,0x0e,0x12, 0x0c,0x0e,0x12,0x41,0x49,0x65,0x50,0x50,0x78,0x57,0x50,0x75,0x5b,0x51,0x74,0x5b, 0x52,0x74,0x5b,0x52,0x74,0x5b,0x51,0x74,0x5b,0x51,0x73,0x5b,0x51,0x73,0x5c,0x52, 0x74,0x5c,0x51,0x74,0x5c,0x51,0x75,0x5d,0x51,0x75,0x5d,0x52,0x75,0x5d,0x52,0x75, 0x60,0x53,0x7a,0x76,0x66,0x93,0x12,0x10,0x17,0x06,0x06,0x09,0x06,0x06,0x08,0x06, 0x06,0x08,0x05,0x06,0x07,0x04,0x05,0x06,0x04,0x04,0x06,0x03,0x04,0x05,0x03,0x03, 0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x02,0x03,0x03,0x02,0x03,0x03, 0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x19,0x25,0x65, 0x71,0x96,0x91,0x9b,0xb4,0xcd,0xd1,0xdd,0x92,0x9b,0xb6,0x9c,0xa5,0xbd,0xe8,0xea, 0xf0,0x77,0x63,0x7c,0x44,0x34,0x3f,0x36,0x28,0x31,0x3e,0x2f,0x39,0x3d,0x2e,0x38, 0x3f,0x2f,0x3a,0x3f,0x30,0x3b,0x3f,0x30,0x3a,0x40,0x31,0x3c,0x43,0x33,0x3f,0x45, 0x35,0x40,0x48,0x37,0x44,0x5e,0x4a,0x5c,0x27,0x20,0x28,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x16,0x11,0x15,0x49,0x38,0x45,0x3d,0x2e,0x39,0x32,0x25,0x2d,0x52, 0x4a,0x52,0x9d,0xa0,0xae,0xab,0xb3,0xc8,0x94,0x9f,0xb8,0x7d,0x89,0xa9,0x64,0x6f, 0x95,0x5f,0x6b,0x92,0x93,0x9c,0xb7,0xd3,0xd7,0xe2,0xd5,0xd8,0xe2,0xb4,0xba,0xce, 0x52,0x50,0x7b,0x5a,0x52,0x79,0x5b,0x52,0x79,0x5c,0x52,0x79,0x60,0x53,0x77,0x62, 0x53,0x77,0x63,0x53,0x77,0x64,0x53,0x76,0x63,0x53,0x77,0x63,0x53,0x77,0x64,0x53, 0x76,0x64,0x53,0x76,0x64,0x53,0x75,0x64,0x53,0x75,0x64,0x52,0x72,0x64,0x52,0x72, 0x64,0x52,0x72,0x64,0x50,0x6f,0x64,0x4d,0x6b,0x64,0x4f,0x6d,0x52,0x55,0x80,0x55, 0x62,0x8b,0x55,0x60,0x8a,0x52,0x55,0x80,0x5a,0x66,0x8e,0x5a,0x52,0x79,0x53,0x3c, 0x54,0x62,0x53,0x77,0x7c,0x88,0xa8,0x85,0x7d,0x85,0x4b,0x3a,0x47,0x4b,0x3b,0x48, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6d,0x75,0x8e, 0x52,0x53,0x7e,0x5c,0x44,0x5e,0x60,0x53,0x77,0x5b,0x52,0x79,0x5a,0x52,0x79,0x5a, 0x52,0x79,0x57,0x50,0x79,0x56,0x50,0x79,0x54,0x50,0x79,0x52,0x4f,0x7a,0x50,0x4d, 0x77,0x3e,0x3c,0x5d,0x1b,0x1c,0x2a,0xd7,0xd7,0xd7,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0x84,0x84,0x85,0x3c,0x36,0x47,0x6a,0x58,0x6f,0x70, 0x5b,0x72,0x75,0x60,0x78,0x0f,0x0e,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x08, 0x08,0x29,0x29,0x29,0x54,0x54,0x54,0x5e,0x5e,0x5e,0x6c,0x73,0x88,0x52,0x52,0x7d, 0x62,0x4a,0x66,0x5a,0x52,0x79,0x52,0x50,0x7c,0x52,0x53,0x7d,0x52,0x55,0x80,0x52, 0x5a,0x84,0x52,0x5c,0x86,0x52,0x5d,0x88,0x52,0x5d,0x88,0x53,0x5e,0x88,0x53,0x5e, 0x88,0x53,0x5e,0x88,0x52,0x5d,0x88,0x52,0x5c,0x86,0x52,0x5a,0x84,0x56,0x50,0x79, 0x5d,0x45,0x60,0x65,0x70,0x94,0x16,0x16,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x03,0x03,0x03, 0x03,0x04,0x04,0x04,0x05,0x04,0x05,0x05,0x04,0x04,0x05,0x05,0x06,0x06,0x06,0x06, 0x07,0x06,0x06,0x07,0x06,0x06,0x07,0x06,0x07,0x08,0x07,0x07,0x09,0x07,0x08,0x09, 0x08,0x09,0x0a,0x08,0x09,0x0a,0x09,0x0a,0x0b,0x0a,0x0a,0x0c,0x0a,0x0b,0x0d,0x0b, 0x0c,0x0e,0x0b,0x0c,0x0e,0x0b,0x0c,0x0e,0x1e,0x1b,0x1f,0x5d,0x65,0x86,0x52,0x5c, 0x82,0x53,0x54,0x7d,0x53,0x53,0x7b,0x52,0x51,0x78,0x53,0x52,0x79,0x53,0x51,0x79, 0x5c,0x5b,0x81,0x90,0x90,0xa8,0x86,0x87,0xa0,0x5a,0x5c,0x81,0x55,0x55,0x7a,0x63, 0x59,0x76,0x58,0x62,0x80,0x2f,0x2d,0x39,0x2f,0x2c,0x3a,0x34,0x30,0x3f,0x38,0x32, 0x42,0x35,0x30,0x40,0x2e,0x2c,0x39,0x2a,0x28,0x34,0x43,0x39,0x49,0x5b,0x58,0x6a, 0x4c,0x52,0x73,0x45,0x40,0x5d,0x52,0x49,0x6a,0x59,0x50,0x73,0x5b,0x51,0x76,0x5c, 0x52,0x77,0x5f,0x53,0x76,0x5f,0x53,0x77,0x60,0x53,0x77,0x5f,0x54,0x77,0x5f,0x53, 0x76,0x5d,0x52,0x74,0x55,0x4c,0x6b,0x57,0x4d,0x6b,0x47,0x3f,0x52,0x37,0x31,0x3f, 0x3d,0x35,0x45,0x49,0x41,0x52,0x6a,0x63,0x6f,0x4a,0x3e,0x4f,0x4d,0x40,0x50,0x4a, 0x3f,0x4f,0x52,0x4b,0x58,0x3a,0x37,0x43,0x3d,0x39,0x50,0x64,0x5a,0x7d,0x52,0x4b, 0x67,0x4c,0x44,0x5e,0x5e,0x53,0x74,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5f,0x53,0x75, 0x5e,0x53,0x76,0x5e,0x53,0x78,0x5f,0x53,0x78,0x5e,0x53,0x77,0x54,0x4a,0x68,0x5a, 0x50,0x72,0x6c,0x5f,0x86,0x36,0x30,0x3f,0x33,0x2b,0x37,0x41,0x37,0x45,0x4a,0x3e, 0x4e,0x4d,0x41,0x51,0x51,0x44,0x55,0x56,0x48,0x5a,0x55,0x48,0x59,0x4c,0x41,0x51, 0x43,0x3b,0x4a,0x43,0x3b,0x49,0x5a,0x4f,0x62,0x4d,0x43,0x53,0x3d,0x36,0x42,0x5e, 0x56,0x74,0x60,0x5a,0x7b,0x59,0x55,0x74,0x58,0x54,0x74,0x52,0x51,0x73,0x39,0x39, 0x53,0x32,0x32,0x4a,0x33,0x34,0x4b,0x21,0x22,0x2a,0x53,0x49,0x5b,0x69,0x64,0x77, 0x92,0x99,0xac,0x5c,0x66,0x88,0x58,0x63,0x85,0x1c,0x20,0x29,0x13,0x16,0x1b,0x14, 0x16,0x1c,0x13,0x16,0x1c,0x12,0x15,0x1b,0x17,0x17,0x1f,0x1e,0x1d,0x26,0x17,0x17, 0x20,0x14,0x16,0x1d,0x16,0x16,0x1e,0x1a,0x19,0x22,0x20,0x1e,0x27,0x23,0x20,0x2a, 0x23,0x1f,0x29,0x22,0x1e,0x27,0x1e,0x1a,0x23,0x13,0x13,0x1a,0x10,0x11,0x16,0x0f, 0x10,0x16,0x0e,0x0f,0x14,0x0d,0x0f,0x13,0x50,0x5b,0x7f,0x50,0x4a,0x6e,0x56,0x4a, 0x69,0x58,0x4d,0x69,0x5a,0x50,0x67,0x50,0x47,0x59,0x3f,0x35,0x46,0x3e,0x34,0x44, 0x4a,0x3e,0x4e,0x57,0x4d,0x5b,0x4e,0x43,0x52,0x3e,0x34,0x41,0x38,0x2f,0x3b,0x36, 0x2c,0x39,0x37,0x2a,0x38,0x36,0x2a,0x36,0x41,0x36,0x49,0x49,0x3e,0x50,0x3d,0x3c, 0x4f,0x45,0x4a,0x5f,0x49,0x48,0x62,0x4e,0x4b,0x66,0x51,0x4f,0x6a,0x57,0x5d,0x76, 0x6a,0x71,0x86,0x78,0x7e,0x92,0x7a,0x82,0x94,0x7a,0x82,0x95,0x7a,0x82,0x96,0x7d, 0x83,0x97,0x7f,0x86,0x99,0x81,0x87,0x9a,0x88,0x8e,0x9e,0x8e,0x93,0xa2,0x93,0x98, 0xa5,0x94,0x99,0xa6,0x91,0x96,0xa4,0x8f,0x94,0xa2,0x89,0x8e,0x9f,0x75,0x7c,0x92, 0x65,0x6c,0x86,0x59,0x62,0x7d,0x56,0x5e,0x7a,0x53,0x5b,0x78,0x52,0x5a,0x76,0x50, 0x58,0x73,0x4f,0x56,0x72,0x4f,0x56,0x6f,0x51,0x58,0x6d,0x56,0x5b,0x6c,0x59,0x5e, 0x6d,0x5c,0x60,0x6c,0x62,0x66,0x70,0x59,0x5d,0x68,0x48,0x4b,0x55,0x25,0x27,0x2f, 0x14,0x16,0x1d,0x13,0x14,0x1a,0x12,0x13,0x1a,0x12,0x12,0x19,0x11,0x12,0x18,0x10, 0x12,0x17,0x0f,0x10,0x16,0x0f,0x10,0x16,0x0f,0x11,0x16,0x0f,0x10,0x16,0x0e,0x0f, 0x15,0x0e,0x0f,0x14,0x0e,0x0f,0x15,0x2f,0x35,0x48,0x4f,0x53,0x7a,0x55,0x50,0x74, 0x5a,0x52,0x73,0x5a,0x52,0x74,0x5b,0x52,0x73,0x5b,0x51,0x73,0x5b,0x51,0x73,0x5b, 0x52,0x73,0x5b,0x51,0x74,0x5b,0x51,0x74,0x5b,0x51,0x74,0x5c,0x52,0x74,0x5c,0x52, 0x74,0x5c,0x51,0x75,0x5e,0x53,0x77,0x71,0x62,0x8e,0x20,0x1d,0x29,0x07,0x07,0x0a, 0x06,0x06,0x09,0x06,0x06,0x08,0x06,0x06,0x08,0x05,0x06,0x07,0x05,0x06,0x07,0x04, 0x05,0x06,0x04,0x04,0x06,0x03,0x04,0x05,0x03,0x03,0x05,0x03,0x03,0x04,0x02,0x03, 0x03,0x02,0x03,0x03,0x02,0x03,0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x1e,0x23,0x31,0xd3,0xd6,0xe1,0xd6,0xd9,0xe4,0x9f,0xa8,0xbf,0xa7,0xae,0xc4,0xea, 0xeb,0xf1,0x63,0x4f,0x62,0x38,0x2a,0x33,0x3c,0x2d,0x37,0x3e,0x2f,0x3a,0x3b,0x2c, 0x36,0x3e,0x2f,0x39,0x3c,0x2e,0x38,0x3e,0x2f,0x3a,0x40,0x31,0x3c,0x43,0x33,0x3f, 0x43,0x33,0x3f,0x45,0x35,0x41,0x48,0x37,0x44,0x4c,0x3b,0x49,0x51,0x42,0x53,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x35,0x29,0x33, 0x4e,0x3d,0x4b,0x41,0x31,0x3c,0x34,0x26,0x2e,0x5a,0x54,0x5e,0x9d,0xa1,0xb2,0xa3, 0xab,0xc2,0x89,0x93,0xb1,0x73,0x7e,0xa1,0x92,0x9b,0xb7,0xb7,0xbe,0xd0,0xc1,0xc6, 0xd6,0x91,0x9a,0xb5,0x52,0x4f,0x7a,0x57,0x50,0x79,0x5d,0x52,0x79,0x5c,0x52,0x79, 0x5f,0x53,0x77,0x64,0x53,0x76,0x64,0x53,0x76,0x62,0x53,0x77,0x62,0x53,0x77,0x62, 0x53,0x77,0x64,0x53,0x76,0x64,0x53,0x75,0x64,0x53,0x75,0x64,0x53,0x74,0x64,0x52, 0x72,0x64,0x52,0x72,0x64,0x52,0x72,0x64,0x50,0x6f,0x64,0x4e,0x6c,0x63,0x4b,0x67, 0x52,0x4f,0x7a,0x54,0x5f,0x89,0x58,0x64,0x8d,0x6e,0x7b,0x9d,0x53,0x4f,0x7a,0x52, 0x3b,0x53,0x63,0x4b,0x67,0x67,0x73,0x99,0xac,0xaa,0xb4,0x44,0x34,0x40,0x52,0x40, 0x4f,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x51,0x56,0x63,0x5a,0x66,0x8e,0x64,0x4d,0x6a,0x64,0x53,0x75,0x5c,0x52,0x79, 0x5b,0x52,0x79,0x5a,0x52,0x79,0x5a,0x52,0x79,0x57,0x50,0x79,0x57,0x50,0x79,0x54, 0x50,0x79,0x49,0x47,0x6d,0x2d,0x2c,0x44,0x59,0x59,0x5d,0xfc,0xfc,0xfc,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfa,0xfa,0xfa,0x32,0x31,0x35,0x51,0x47,0x5c, 0x71,0x5d,0x75,0x6e,0x59,0x6f,0x70,0x5b,0x72,0x13,0x12,0x18,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4d,0x4d,0x4d,0x5a,0x5a,0x5a,0x3e,0x40, 0x44,0x65,0x71,0x96,0x64,0x4e,0x6d,0x64,0x50,0x71,0x52,0x4f,0x7b,0x52,0x52,0x7c, 0x52,0x53,0x7e,0x52,0x57,0x82,0x52,0x5b,0x85,0x52,0x5d,0x86,0x52,0x5d,0x88,0x53, 0x5e,0x88,0x53,0x5e,0x88,0x53,0x5e,0x88,0x53,0x5e,0x88,0x52,0x5d,0x88,0x52,0x5c, 0x86,0x52,0x55,0x80,0x60,0x48,0x64,0x52,0x4f,0x7a,0x65,0x6a,0x7b,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03, 0x02,0x03,0x03,0x03,0x03,0x04,0x03,0x03,0x04,0x04,0x05,0x05,0x04,0x04,0x05,0x05, 0x06,0x06,0x05,0x06,0x06,0x06,0x06,0x07,0x06,0x06,0x07,0x06,0x07,0x08,0x07,0x07, 0x09,0x07,0x08,0x09,0x07,0x08,0x09,0x08,0x09,0x0a,0x08,0x09,0x0a,0x0a,0x0a,0x0b, 0x0a,0x0a,0x0c,0x0a,0x0a,0x0d,0x0b,0x0c,0x0e,0x0b,0x0c,0x0e,0x1b,0x18,0x1d,0x5d, 0x65,0x86,0x53,0x59,0x81,0x53,0x55,0x7d,0x53,0x52,0x7a,0x53,0x51,0x78,0x52,0x50, 0x78,0x53,0x51,0x78,0x53,0x52,0x79,0x68,0x66,0x89,0x94,0x93,0xaa,0x89,0x89,0xa2, 0x58,0x58,0x7c,0x64,0x58,0x74,0x5b,0x63,0x84,0x32,0x30,0x3b,0x2e,0x2c,0x39,0x34, 0x30,0x3f,0x39,0x33,0x42,0x34,0x30,0x3f,0x2e,0x2a,0x38,0x29,0x26,0x32,0x3c,0x34, 0x44,0x52,0x51,0x62,0x4c,0x54,0x75,0x45,0x41,0x5f,0x50,0x49,0x68,0x5a,0x51,0x73, 0x5c,0x51,0x77,0x5e,0x53,0x76,0x5f,0x53,0x76,0x5f,0x53,0x77,0x60,0x53,0x77,0x5f, 0x54,0x76,0x5f,0x53,0x76,0x5e,0x53,0x75,0x56,0x4c,0x6d,0x52,0x49,0x67,0x45,0x3e, 0x53,0x2e,0x2b,0x39,0x34,0x30,0x3f,0x48,0x42,0x50,0x70,0x6a,0x76,0x4a,0x3f,0x4f, 0x4b,0x40,0x50,0x46,0x3b,0x4b,0x49,0x43,0x50,0x47,0x46,0x51,0x51,0x4f,0x60,0x73, 0x6c,0x8a,0x55,0x4f,0x6a,0x4c,0x43,0x5d,0x5e,0x53,0x74,0x5e,0x53,0x75,0x5e,0x52, 0x75,0x5f,0x52,0x75,0x5e,0x53,0x76,0x5f,0x53,0x76,0x5e,0x53,0x78,0x5e,0x53,0x77, 0x55,0x4a,0x6a,0x59,0x50,0x70,0x6b,0x5e,0x86,0x39,0x32,0x45,0x2d,0x29,0x34,0x35, 0x2f,0x3b,0x3b,0x32,0x40,0x43,0x38,0x47,0x4d,0x41,0x52,0x55,0x48,0x5a,0x51,0x45, 0x57,0x42,0x3a,0x4a,0x3b,0x36,0x43,0x3a,0x34,0x42,0x39,0x35,0x42,0x55,0x4b,0x5d, 0x43,0x3c,0x4a,0x3d,0x36,0x45,0x6c,0x62,0x87,0x59,0x55,0x74,0x59,0x54,0x73,0x55, 0x52,0x73,0x4f,0x4f,0x70,0x34,0x34,0x4a,0x32,0x32,0x4a,0x2d,0x31,0x44,0x39,0x34, 0x41,0x54,0x49,0x5b,0x91,0x95,0xa5,0x83,0x8b,0xa3,0x59,0x63,0x85,0x56,0x5f,0x80, 0x13,0x15,0x1b,0x13,0x15,0x1b,0x13,0x15,0x1b,0x13,0x15,0x1b,0x14,0x16,0x1d,0x1c, 0x1b,0x25,0x1c,0x1b,0x25,0x16,0x17,0x1f,0x15,0x16,0x1e,0x15,0x16,0x1e,0x16,0x16, 0x1e,0x17,0x16,0x1e,0x17,0x16,0x1e,0x14,0x14,0x1b,0x13,0x12,0x1a,0x10,0x11,0x16, 0x0f,0x11,0x16,0x0e,0x10,0x15,0x0d,0x0e,0x13,0x0a,0x0c,0x0f,0x4f,0x5a,0x80,0x53, 0x4c,0x6f,0x57,0x4d,0x6d,0x57,0x4b,0x6a,0x56,0x4b,0x63,0x51,0x48,0x5a,0x3f,0x36, 0x47,0x38,0x2e,0x3f,0x3d,0x31,0x44,0x3f,0x33,0x45,0x3e,0x32,0x43,0x47,0x3c,0x4a, 0x4d,0x42,0x4f,0x4c,0x41,0x4f,0x43,0x37,0x44,0x3c,0x2f,0x3d,0x44,0x39,0x4c,0x41, 0x35,0x44,0x3d,0x36,0x48,0x40,0x3e,0x53,0x46,0x43,0x5c,0x4f,0x4a,0x62,0x56,0x53, 0x6a,0x55,0x54,0x6e,0x5c,0x61,0x7a,0x65,0x6d,0x83,0x6a,0x72,0x89,0x75,0x7c,0x91, 0x7d,0x83,0x96,0x81,0x86,0x99,0x80,0x87,0x9a,0x7e,0x86,0x98,0x80,0x86,0x99,0x87, 0x8d,0x9e,0x8e,0x93,0xa2,0x8c,0x92,0xa2,0x8d,0x92,0xa2,0x95,0x9a,0xa7,0x96,0x9a, 0xa8,0x83,0x8a,0x9a,0x72,0x79,0x8f,0x66,0x6e,0x87,0x5d,0x65,0x7f,0x55,0x5d,0x7a, 0x52,0x58,0x76,0x51,0x57,0x74,0x4d,0x53,0x6e,0x47,0x4e,0x66,0x49,0x50,0x66,0x57, 0x5e,0x71,0x62,0x68,0x78,0x72,0x77,0x83,0x80,0x84,0x8f,0x7d,0x81,0x8b,0x6e,0x72, 0x7c,0x3c,0x3e,0x48,0x19,0x1b,0x23,0x14,0x16,0x1d,0x13,0x15,0x1c,0x12,0x14,0x1a, 0x12,0x12,0x19,0x11,0x12,0x18,0x11,0x12,0x18,0x10,0x12,0x17,0x11,0x12,0x18,0x11, 0x12,0x18,0x11,0x12,0x17,0x10,0x12,0x16,0x0f,0x10,0x16,0x23,0x26,0x34,0x4f,0x57, 0x7d,0x54,0x4f,0x74,0x5a,0x52,0x73,0x5a,0x52,0x73,0x5a,0x52,0x73,0x5a,0x51,0x73, 0x5a,0x51,0x73,0x5a,0x52,0x73,0x5b,0x52,0x73,0x5b,0x51,0x74,0x5c,0x52,0x74,0x5c, 0x52,0x74,0x5c,0x52,0x74,0x5b,0x51,0x74,0x5e,0x53,0x75,0x6d,0x5e,0x88,0x31,0x2c, 0x3f,0x08,0x09,0x0b,0x07,0x08,0x0a,0x06,0x07,0x09,0x06,0x06,0x09,0x06,0x06,0x08, 0x06,0x06,0x08,0x06,0x06,0x07,0x05,0x05,0x06,0x05,0x05,0x06,0x04,0x04,0x05,0x04, 0x04,0x05,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x02,0x02, 0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xed,0xee,0xf1,0xd4,0xd8,0xe2,0xd1,0xd5,0xe0, 0x70,0x7b,0x9e,0x45,0x35,0x41,0x35,0x28,0x30,0x40,0x30,0x3b,0x3e,0x2f,0x3a,0x3e, 0x2f,0x39,0x3c,0x2d,0x37,0x3d,0x2e,0x38,0x3c,0x2d,0x37,0x3f,0x30,0x3b,0x40,0x31, 0x3c,0x43,0x33,0x3f,0x44,0x34,0x3f,0x46,0x36,0x42,0x48,0x38,0x44,0x4a,0x39,0x46, 0x5d,0x49,0x5b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x0d,0x0a,0x0c,0x5a,0x47,0x59,0x4d,0x3c,0x4a,0x3f,0x30,0x3b, 0x34,0x27,0x2f,0x64,0x5f,0x6a,0x9f,0xa3,0xb6,0x9b,0xa3,0xbc,0x9f,0xa7,0xbf,0x9b, 0xa4,0xbc,0x85,0x90,0xaf,0x57,0x63,0x8c,0x64,0x53,0x75,0x5e,0x53,0x79,0x5f,0x53, 0x77,0x58,0x50,0x79,0x5e,0x53,0x79,0x64,0x53,0x76,0x64,0x53,0x76,0x5e,0x53,0x79, 0x62,0x53,0x77,0x64,0x53,0x76,0x64,0x53,0x75,0x64,0x53,0x75,0x64,0x53,0x75,0x64, 0x53,0x74,0x64,0x52,0x72,0x64,0x52,0x72,0x64,0x50,0x6f,0x64,0x52,0x72,0x64,0x4f, 0x6e,0x63,0x4b,0x67,0x5e,0x53,0x79,0x53,0x5e,0x88,0x7b,0x86,0xa7,0x55,0x62,0x8a, 0x52,0x39,0x52,0x60,0x48,0x64,0x5b,0x66,0x8e,0x9f,0xa5,0xb9,0x50,0x43,0x4c,0x4f, 0x3d,0x4c,0x12,0x0e,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x28,0x29,0x2f,0x67,0x73,0x99,0x63,0x53,0x77,0x64,0x4e, 0x6c,0x5c,0x52,0x79,0x5c,0x52,0x79,0x5c,0x52,0x79,0x5b,0x52,0x79,0x5a,0x52,0x79, 0x56,0x50,0x79,0x52,0x4e,0x76,0x3e,0x3b,0x5c,0x1c,0x1b,0x29,0xd6,0xd6,0xd6,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe2,0xe2,0xe2,0x31,0x30, 0x36,0x5e,0x4f,0x64,0x75,0x60,0x78,0x6b,0x56,0x6c,0x6f,0x5a,0x71,0x15,0x14,0x1a, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x20,0x5d, 0x5d,0x5d,0x11,0x11,0x11,0x87,0x8e,0xa0,0x52,0x52,0x7d,0x5f,0x47,0x63,0x53,0x4f, 0x7a,0x52,0x52,0x7c,0x52,0x53,0x7d,0x52,0x55,0x81,0x52,0x5a,0x84,0x52,0x5c,0x86, 0x52,0x5d,0x88,0x53,0x5e,0x88,0x53,0x5e,0x88,0x53,0x5e,0x88,0x53,0x5e,0x88,0x52, 0x5d,0x88,0x52,0x5c,0x86,0x52,0x57,0x83,0x53,0x50,0x7a,0x5f,0x47,0x63,0x63,0x6f, 0x95,0x28,0x29,0x2c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x03,0x02,0x02,0x03,0x03,0x03,0x04,0x03,0x03,0x04,0x04,0x04,0x05, 0x04,0x05,0x05,0x04,0x05,0x05,0x05,0x06,0x06,0x05,0x06,0x06,0x06,0x06,0x07,0x06, 0x06,0x07,0x06,0x07,0x08,0x07,0x07,0x09,0x07,0x08,0x09,0x08,0x08,0x0a,0x08,0x09, 0x0a,0x0a,0x0a,0x0b,0x0a,0x0a,0x0c,0x0a,0x0a,0x0d,0x0b,0x0c,0x0e,0x0b,0x0c,0x0e, 0x18,0x16,0x1a,0x5e,0x66,0x87,0x53,0x5a,0x81,0x53,0x55,0x7e,0x53,0x52,0x7a,0x53, 0x51,0x78,0x53,0x50,0x78,0x52,0x50,0x78,0x52,0x51,0x79,0x54,0x52,0x79,0x62,0x63, 0x86,0x96,0x97,0xad,0x88,0x87,0xa1,0x75,0x6a,0x82,0x5b,0x65,0x85,0x36,0x34,0x40, 0x2e,0x2b,0x39,0x35,0x31,0x3f,0x39,0x33,0x43,0x35,0x31,0x3f,0x2e,0x2a,0x38,0x28, 0x27,0x32,0x3e,0x37,0x44,0x4b,0x47,0x54,0x53,0x5c,0x7a,0x47,0x44,0x63,0x50,0x46, 0x67,0x5b,0x51,0x74,0x5c,0x52,0x77,0x5c,0x53,0x77,0x5f,0x52,0x76,0x5f,0x54,0x77, 0x60,0x53,0x77,0x5f,0x54,0x76,0x5f,0x54,0x75,0x5e,0x53,0x75,0x57,0x4f,0x6f,0x4e, 0x49,0x65,0x42,0x3c,0x53,0x25,0x24,0x32,0x2f,0x2c,0x3b,0x52,0x4c,0x5a,0x63,0x5d, 0x6a,0x50,0x47,0x56,0x46,0x3d,0x4d,0x41,0x39,0x48,0x34,0x2e,0x3d,0x20,0x20,0x2c, 0x32,0x32,0x41,0x73,0x6b,0x89,0x71,0x6b,0x82,0x6a,0x64,0x77,0x61,0x57,0x76,0x5e, 0x53,0x75,0x5e,0x52,0x75,0x5f,0x52,0x75,0x5e,0x53,0x76,0x5f,0x53,0x76,0x5f,0x53, 0x76,0x5f,0x53,0x77,0x56,0x4b,0x6b,0x58,0x4f,0x6f,0x6a,0x5e,0x83,0x3c,0x36,0x4a, 0x30,0x2b,0x39,0x34,0x30,0x3e,0x39,0x32,0x41,0x3e,0x37,0x45,0x44,0x3b,0x4b,0x4b, 0x40,0x52,0x4a,0x3f,0x51,0x3e,0x37,0x46,0x35,0x30,0x3d,0x34,0x30,0x3d,0x32,0x30, 0x3d,0x4c,0x46,0x58,0x48,0x41,0x51,0x3b,0x36,0x42,0x64,0x5b,0x7c,0x5e,0x57,0x75, 0x5a,0x55,0x73,0x58,0x54,0x74,0x54,0x52,0x73,0x45,0x45,0x64,0x32,0x31,0x49,0x31, 0x33,0x4a,0x1a,0x1d,0x25,0x4d,0x42,0x54,0x54,0x49,0x5a,0x9c,0xa1,0xb2,0x66,0x70, 0x8f,0x58,0x62,0x85,0x3a,0x3e,0x53,0x12,0x14,0x1a,0x12,0x14,0x1a,0x12,0x14,0x1a, 0x12,0x14,0x1b,0x15,0x16,0x1e,0x1a,0x19,0x22,0x15,0x16,0x1e,0x15,0x16,0x1e,0x14, 0x16,0x1d,0x14,0x16,0x1d,0x13,0x14,0x1b,0x12,0x13,0x1a,0x11,0x12,0x19,0x10,0x12, 0x17,0x10,0x11,0x16,0x0e,0x0f,0x15,0x0e,0x0f,0x14,0x0d,0x0e,0x13,0x0a,0x0b,0x0f, 0x50,0x59,0x80,0x54,0x4e,0x72,0x58,0x4d,0x6d,0x57,0x4c,0x6c,0x52,0x47,0x64,0x4a, 0x40,0x56,0x3c,0x33,0x45,0x38,0x2f,0x41,0x3e,0x33,0x46,0x41,0x35,0x48,0x41,0x35, 0x47,0x51,0x45,0x55,0x52,0x48,0x56,0x4f,0x45,0x53,0x4e,0x43,0x50,0x40,0x33,0x42, 0x41,0x38,0x4a,0x3c,0x31,0x3e,0x42,0x38,0x46,0x46,0x3d,0x4e,0x43,0x3f,0x54,0x4a, 0x46,0x5b,0x58,0x52,0x68,0x69,0x65,0x7a,0x6b,0x6a,0x7e,0x5f,0x5e,0x79,0x5e,0x62, 0x7c,0x6d,0x74,0x8b,0x7f,0x85,0x97,0x83,0x8a,0x9a,0x81,0x87,0x9a,0x7d,0x83,0x97, 0x7d,0x83,0x97,0x80,0x86,0x99,0x84,0x8a,0x9c,0x88,0x8e,0x9e,0x8d,0x92,0xa2,0x95, 0x9a,0xa7,0x98,0x9d,0xaa,0x8f,0x95,0xa3,0x81,0x87,0x99,0x72,0x7a,0x90,0x66,0x6e, 0x87,0x56,0x5e,0x7a,0x52,0x56,0x73,0x51,0x53,0x70,0x4d,0x52,0x6e,0x4e,0x55,0x6e, 0x53,0x5a,0x72,0x5e,0x66,0x7a,0x62,0x67,0x7a,0x6a,0x70,0x81,0x76,0x7b,0x8a,0x81, 0x86,0x91,0x7a,0x7e,0x88,0x4a,0x4d,0x56,0x1e,0x21,0x2a,0x16,0x19,0x20,0x16,0x17, 0x1f,0x14,0x16,0x1d,0x12,0x14,0x1b,0x12,0x13,0x1a,0x13,0x15,0x1a,0x12,0x14,0x1a, 0x15,0x16,0x1d,0x15,0x17,0x1d,0x14,0x16,0x1c,0x12,0x14,0x1a,0x12,0x13,0x19,0x18, 0x1b,0x24,0x50,0x5a,0x7f,0x52,0x4f,0x74,0x5a,0x52,0x73,0x5a,0x52,0x73,0x5a,0x51, 0x73,0x5a,0x51,0x73,0x5a,0x51,0x73,0x5a,0x52,0x72,0x5a,0x52,0x73,0x5b,0x51,0x73, 0x5b,0x52,0x73,0x5b,0x51,0x73,0x5b,0x52,0x73,0x5c,0x52,0x74,0x5c,0x52,0x74,0x68, 0x5b,0x83,0x44,0x3c,0x56,0x09,0x0a,0x0c,0x08,0x09,0x0b,0x09,0x0a,0x0c,0x07,0x07, 0x0a,0x06,0x07,0x09,0x06,0x06,0x08,0x06,0x06,0x08,0x06,0x07,0x09,0x06,0x06,0x07, 0x05,0x06,0x06,0x05,0x06,0x06,0x05,0x06,0x06,0x05,0x05,0x06,0x05,0x05,0x06,0x04, 0x05,0x06,0x03,0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1e,0x1f,0x20,0xea,0xeb, 0xef,0xd7,0xdb,0xe5,0x78,0x66,0x80,0x4c,0x3b,0x49,0x49,0x38,0x45,0x43,0x33,0x3e, 0x3c,0x2d,0x37,0x3d,0x2e,0x38,0x3d,0x2e,0x38,0x3c,0x2e,0x38,0x3e,0x2f,0x39,0x3f, 0x2f,0x3a,0x40,0x31,0x3c,0x41,0x31,0x3d,0x43,0x33,0x3e,0x46,0x36,0x42,0x48,0x37, 0x44,0x4a,0x39,0x47,0x4e,0x3c,0x4b,0x35,0x2c,0x37,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x2f, 0x3b,0x54,0x42,0x51,0x4a,0x39,0x47,0x3f,0x30,0x3a,0x3b,0x2e,0x38,0x6d,0x67,0x74, 0xa0,0xa7,0xbc,0x92,0x9b,0xb7,0x89,0x93,0xb0,0x52,0x55,0x81,0x64,0x4e,0x6c,0x60, 0x48,0x64,0x60,0x48,0x65,0x64,0x4f,0x6d,0x5f,0x47,0x64,0x5f,0x47,0x63,0x63,0x4c, 0x69,0x64,0x53,0x75,0x60,0x53,0x77,0x64,0x53,0x76,0x64,0x53,0x76,0x64,0x53,0x75, 0x64,0x53,0x74,0x64,0x53,0x73,0x64,0x53,0x73,0x64,0x52,0x72,0x64,0x53,0x73,0x64, 0x52,0x72,0x64,0x4f,0x6e,0x64,0x4c,0x69,0x64,0x4f,0x6d,0x56,0x62,0x8b,0x5a,0x66, 0x8e,0x60,0x48,0x65,0x5f,0x47,0x64,0x56,0x62,0x8b,0x7d,0x89,0xa7,0x64,0x5b,0x63, 0x4a,0x39,0x46,0x28,0x20,0x27,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x6d,0x78,0x97,0x52, 0x52,0x7d,0x60,0x48,0x65,0x60,0x53,0x77,0x5c,0x52,0x79,0x5c,0x52,0x79,0x5b,0x52, 0x79,0x58,0x50,0x79,0x56,0x50,0x79,0x4b,0x48,0x6e,0x2d,0x2c,0x43,0x62,0x61,0x67, 0xfc,0xfc,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xa5, 0xa6,0xa7,0x47,0x46,0x4f,0x65,0x53,0x68,0x73,0x5e,0x75,0x68,0x54,0x69,0x6d,0x58, 0x6e,0x19,0x16,0x1d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x02,0x02,0x02,0x63,0x63,0x63,0x1d,0x1d,0x1d,0x67,0x67,0x68,0x74,0x7e,0xa1,0x62, 0x4a,0x65,0x64,0x53,0x76,0x52,0x50,0x7b,0x52,0x53,0x7d,0x52,0x55,0x80,0x52,0x57, 0x82,0x52,0x5b,0x85,0x52,0x5d,0x88,0x53,0x5e,0x88,0x53,0x5e,0x88,0x53,0x5e,0x88, 0x53,0x5e,0x88,0x52,0x5d,0x88,0x52,0x5d,0x86,0x52,0x5a,0x84,0x52,0x55,0x80,0x63, 0x4b,0x67,0x5e,0x53,0x79,0x64,0x6d,0x84,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x03,0x03,0x03,0x03, 0x04,0x04,0x04,0x05,0x04,0x04,0x05,0x04,0x05,0x05,0x04,0x05,0x05,0x06,0x06,0x07, 0x06,0x06,0x07,0x06,0x06,0x07,0x06,0x06,0x07,0x07,0x07,0x09,0x07,0x07,0x09,0x07, 0x08,0x09,0x08,0x09,0x0a,0x08,0x09,0x0a,0x09,0x0a,0x0b,0x0a,0x0a,0x0c,0x0a,0x0a, 0x0d,0x0a,0x0b,0x0d,0x13,0x12,0x16,0x5c,0x64,0x83,0x53,0x58,0x80,0x53,0x55,0x7e, 0x52,0x51,0x79,0x55,0x51,0x77,0x54,0x51,0x77,0x52,0x50,0x78,0x53,0x51,0x78,0x54, 0x51,0x79,0x54,0x53,0x7a,0x5e,0x60,0x82,0x74,0x74,0x92,0x83,0x7a,0x90,0x6d,0x75, 0x91,0x3f,0x3b,0x48,0x2d,0x2a,0x37,0x36,0x31,0x40,0x3b,0x34,0x43,0x37,0x31,0x40, 0x2e,0x2b,0x39,0x29,0x26,0x33,0x3d,0x36,0x44,0x42,0x3b,0x47,0x5c,0x62,0x7f,0x49, 0x46,0x6a,0x50,0x48,0x67,0x5b,0x51,0x74,0x5c,0x52,0x77,0x5d,0x53,0x77,0x5f,0x53, 0x76,0x5f,0x54,0x76,0x5f,0x53,0x77,0x5f,0x54,0x76,0x5f,0x54,0x75,0x5f,0x54,0x76, 0x58,0x50,0x6e,0x51,0x4a,0x66,0x46,0x42,0x56,0x43,0x44,0x4d,0x3d,0x3c,0x4a,0x55, 0x4f,0x5d,0x49,0x41,0x4f,0x47,0x40,0x4f,0x42,0x39,0x48,0x3e,0x36,0x46,0x2f,0x2b, 0x3a,0x1f,0x1f,0x2a,0x2c,0x2b,0x38,0x68,0x5e,0x80,0x56,0x4e,0x6a,0x69,0x62,0x76, 0x75,0x6c,0x87,0x70,0x65,0x84,0x62,0x56,0x78,0x5f,0x53,0x75,0x5e,0x53,0x76,0x5f, 0x53,0x76,0x5f,0x53,0x76,0x5f,0x53,0x77,0x56,0x4c,0x6d,0x57,0x4d,0x6c,0x69,0x5d, 0x83,0x3b,0x36,0x4b,0x25,0x23,0x2e,0x2d,0x2a,0x38,0x38,0x34,0x44,0x42,0x3b,0x4f, 0x43,0x3b,0x4e,0x44,0x3b,0x4b,0x40,0x37,0x48,0x35,0x2f,0x3e,0x33,0x2e,0x3d,0x36, 0x31,0x41,0x3a,0x36,0x47,0x3a,0x35,0x47,0x4d,0x43,0x57,0x3f,0x39,0x49,0x40,0x3b, 0x4e,0x63,0x5a,0x7b,0x5c,0x54,0x72,0x5a,0x54,0x72,0x59,0x53,0x71,0x52,0x51,0x73, 0x35,0x35,0x4f,0x31,0x30,0x49,0x2c,0x31,0x43,0x2d,0x29,0x34,0x53,0x48,0x59,0x6e, 0x67,0x78,0x87,0x8f,0xa6,0x59,0x63,0x86,0x57,0x61,0x84,0x19,0x1b,0x24,0x12,0x14, 0x1a,0x12,0x14,0x1a,0x14,0x16,0x1d,0x13,0x16,0x1c,0x14,0x16,0x1d,0x14,0x16,0x1d, 0x14,0x16,0x1d,0x14,0x16,0x1d,0x12,0x14,0x1b,0x12,0x13,0x1a,0x12,0x13,0x1a,0x12, 0x13,0x19,0x10,0x11,0x16,0x0f,0x10,0x16,0x0e,0x0f,0x15,0x0e,0x0e,0x13,0x0e,0x0f, 0x13,0x0c,0x0d,0x11,0x4f,0x59,0x80,0x55,0x4e,0x73,0x5a,0x4e,0x70,0x58,0x4d,0x6d, 0x56,0x4a,0x69,0x4d,0x41,0x5d,0x42,0x39,0x50,0x3e,0x34,0x49,0x41,0x36,0x4c,0x42, 0x37,0x4c,0x40,0x35,0x47,0x49,0x3d,0x4e,0x50,0x45,0x55,0x50,0x46,0x55,0x4d,0x42, 0x51,0x45,0x38,0x48,0x51,0x45,0x5e,0x45,0x38,0x47,0x48,0x3e,0x50,0x44,0x3c,0x4e, 0x3e,0x3c,0x51,0x45,0x42,0x59,0x51,0x4d,0x63,0x67,0x62,0x76,0x7a,0x73,0x84,0x71, 0x6a,0x7e,0x5a,0x5a,0x74,0x62,0x6a,0x82,0x7b,0x82,0x95,0x81,0x87,0x99,0x7f,0x86, 0x98,0x7a,0x81,0x95,0x79,0x80,0x94,0x7b,0x82,0x96,0x7e,0x84,0x97,0x83,0x8a,0x9b, 0x8c,0x92,0xa1,0x91,0x96,0xa4,0x96,0x9a,0xa8,0x95,0x9a,0xa7,0x8e,0x94,0xa3,0x7f, 0x86,0x98,0x6a,0x72,0x8a,0x58,0x60,0x7c,0x52,0x58,0x76,0x52,0x56,0x73,0x50,0x58, 0x73,0x4f,0x56,0x71,0x54,0x5c,0x74,0x5b,0x62,0x7a,0x5e,0x65,0x7a,0x65,0x6b,0x7e, 0x6f,0x75,0x86,0x78,0x7e,0x8c,0x6e,0x73,0x80,0x4a,0x4e,0x5b,0x2a,0x2e,0x37,0x1a, 0x1d,0x25,0x17,0x19,0x21,0x16,0x19,0x20,0x15,0x16,0x1e,0x14,0x16,0x1c,0x15,0x17, 0x1e,0x16,0x18,0x1e,0x19,0x1b,0x21,0x1a,0x1c,0x22,0x19,0x1a,0x20,0x16,0x17,0x1e, 0x16,0x17,0x1e,0x16,0x17,0x1f,0x51,0x5b,0x80,0x51,0x50,0x75,0x5a,0x52,0x73,0x5a, 0x52,0x73,0x5a,0x52,0x73,0x5a,0x52,0x73,0x5a,0x52,0x73,0x5a,0x52,0x73,0x5a,0x52, 0x74,0x5b,0x52,0x74,0x5a,0x52,0x73,0x5b,0x52,0x73,0x5c,0x52,0x74,0x5c,0x52,0x73, 0x5b,0x51,0x73,0x62,0x57,0x7c,0x59,0x50,0x6f,0x0b,0x0c,0x0e,0x0d,0x0e,0x11,0x0b, 0x0c,0x0e,0x0a,0x0a,0x0d,0x0a,0x0a,0x0c,0x07,0x07,0x0a,0x07,0x08,0x0a,0x07,0x07, 0x09,0x06,0x07,0x09,0x06,0x06,0x08,0x06,0x06,0x07,0x06,0x06,0x07,0x05,0x06,0x06, 0x05,0x06,0x06,0x05,0x06,0x06,0x04,0x05,0x06,0x03,0x04,0x05,0x03,0x04,0x05,0x03, 0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x0d,0x0d,0x0e,0xc5,0xc6,0xc7,0xe9,0xea,0xf0,0x78,0x69,0x87,0x5b,0x48, 0x59,0x48,0x38,0x44,0x41,0x31,0x3c,0x3f,0x30,0x3a,0x3e,0x2f,0x39,0x3e,0x2f,0x3a, 0x3f,0x30,0x3b,0x3f,0x30,0x3b,0x40,0x31,0x3c,0x41,0x31,0x3d,0x45,0x35,0x41,0x46, 0x36,0x42,0x47,0x37,0x43,0x4a,0x39,0x47,0x4c,0x3b,0x48,0x65,0x51,0x65,0x05,0x05, 0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x16,0x11,0x16,0x5b,0x48,0x59,0x51,0x3f,0x4e,0x4b,0x3a, 0x47,0x44,0x34,0x3f,0x3b,0x2e,0x37,0x63,0x62,0x71,0x9a,0xa2,0xb9,0x52,0x5d,0x86, 0x57,0x50,0x79,0x5e,0x53,0x79,0x64,0x53,0x74,0x64,0x4d,0x6b,0x60,0x48,0x65,0x5d, 0x45,0x5f,0x52,0x3b,0x53,0x4f,0x37,0x4f,0x50,0x39,0x52,0x5b,0x43,0x5d,0x5f,0x47, 0x63,0x64,0x4c,0x69,0x64,0x52,0x73,0x64,0x53,0x74,0x64,0x53,0x74,0x64,0x52,0x72, 0x64,0x50,0x71,0x64,0x52,0x71,0x64,0x52,0x72,0x64,0x4e,0x6c,0x60,0x48,0x65,0x63, 0x4b,0x67,0x55,0x3e,0x57,0x5f,0x47,0x64,0x52,0x58,0x83,0x85,0x90,0xad,0x7a,0x77, 0x81,0x41,0x31,0x3c,0x2f,0x25,0x2e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x4e,0x54,0x67,0x56,0x62,0x8b,0x60,0x48,0x65,0x64,0x50,0x6f,0x5d,0x52,0x79,0x5c, 0x52,0x79,0x5c,0x52,0x79,0x5c,0x52,0x79,0x55,0x4e,0x76,0x40,0x3d,0x5c,0x1c,0x1b, 0x2a,0xd4,0xd4,0xd4,0xfd,0xfd,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xfc,0xfc,0xfc,0x46,0x47,0x4b,0x61,0x60,0x6d,0x6b,0x58,0x6e,0x70,0x5b,0x72,0x66, 0x52,0x66,0x6b,0x56,0x6c,0x1c,0x19,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x18,0x18,0x18,0x64,0x64,0x64,0x3c,0x3c,0x3c,0x2c,0x2c,0x2c, 0x94,0x9a,0xaf,0x58,0x50,0x79,0x60,0x48,0x65,0x52,0x4f,0x7a,0x52,0x52,0x7c,0x52, 0x54,0x7e,0x52,0x57,0x82,0x52,0x5b,0x85,0x52,0x5d,0x86,0x52,0x5d,0x88,0x52,0x5d, 0x88,0x53,0x5e,0x88,0x53,0x5e,0x88,0x52,0x5d,0x88,0x52,0x5d,0x88,0x52,0x5b,0x85, 0x52,0x57,0x82,0x52,0x4f,0x7a,0x5c,0x44,0x5f,0x55,0x62,0x8b,0x3c,0x3f,0x46,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x03,0x02, 0x02,0x03,0x03,0x03,0x04,0x03,0x03,0x04,0x04,0x04,0x05,0x04,0x05,0x05,0x05,0x05, 0x06,0x05,0x05,0x06,0x06,0x06,0x07,0x06,0x06,0x07,0x06,0x07,0x08,0x06,0x06,0x07, 0x07,0x07,0x09,0x07,0x07,0x09,0x07,0x08,0x09,0x08,0x09,0x0a,0x09,0x09,0x0a,0x0a, 0x0a,0x0c,0x0a,0x0a,0x0d,0x0b,0x0b,0x0e,0x11,0x0f,0x13,0x60,0x67,0x86,0x53,0x5d, 0x83,0x52,0x56,0x7f,0x52,0x51,0x7a,0x55,0x51,0x77,0x55,0x51,0x77,0x53,0x50,0x78, 0x53,0x51,0x78,0x54,0x51,0x78,0x54,0x53,0x7a,0x54,0x55,0x7a,0x5e,0x5d,0x80,0x78, 0x6d,0x84,0x66,0x6e,0x8d,0x56,0x54,0x5f,0x2e,0x2c,0x39,0x35,0x2f,0x3e,0x39,0x32, 0x41,0x36,0x30,0x3f,0x30,0x2c,0x39,0x29,0x27,0x33,0x3e,0x35,0x45,0x39,0x2f,0x3d, 0x61,0x69,0x84,0x4a,0x49,0x6b,0x50,0x46,0x65,0x5c,0x51,0x76,0x5c,0x52,0x77,0x5d, 0x53,0x77,0x5f,0x54,0x76,0x5f,0x54,0x76,0x5f,0x53,0x77,0x60,0x53,0x76,0x60,0x53, 0x76,0x5e,0x53,0x75,0x58,0x4f,0x6e,0x50,0x4a,0x65,0x4b,0x45,0x5b,0x3e,0x3f,0x49, 0x48,0x47,0x52,0x54,0x4e,0x5b,0x3e,0x36,0x46,0x3e,0x36,0x46,0x3e,0x36,0x46,0x3a, 0x33,0x42,0x31,0x2d,0x3c,0x25,0x24,0x30,0x26,0x27,0x34,0x68,0x5f,0x85,0x54,0x4d, 0x6c,0x4a,0x41,0x59,0x5c,0x51,0x70,0x6b,0x60,0x80,0x72,0x69,0x86,0x6b,0x61,0x80, 0x60,0x55,0x77,0x5f,0x53,0x76,0x60,0x53,0x76,0x5f,0x53,0x76,0x57,0x4d,0x6d,0x54, 0x4b,0x69,0x6e,0x62,0x8b,0x3e,0x39,0x50,0x20,0x1f,0x2a,0x28,0x26,0x34,0x33,0x32, 0x43,0x3a,0x38,0x4b,0x3e,0x39,0x4b,0x41,0x38,0x48,0x3a,0x33,0x43,0x35,0x30,0x40, 0x40,0x39,0x4b,0x43,0x3c,0x4e,0x40,0x3a,0x4d,0x36,0x31,0x41,0x43,0x3b,0x4d,0x46, 0x3d,0x50,0x3b,0x34,0x43,0x62,0x59,0x79,0x5b,0x53,0x71,0x5c,0x54,0x71,0x5a,0x53, 0x72,0x56,0x52,0x73,0x51,0x50,0x73,0x31,0x32,0x4a,0x30,0x2f,0x47,0x1d,0x1f,0x29, 0x4e,0x44,0x55,0x54,0x48,0x5a,0x92,0x94,0xa4,0x67,0x72,0x90,0x56,0x60,0x83,0x51, 0x5b,0x7c,0x13,0x14,0x1b,0x12,0x13,0x1a,0x12,0x14,0x1a,0x13,0x15,0x1b,0x16,0x16, 0x1e,0x17,0x17,0x1f,0x16,0x16,0x1e,0x14,0x15,0x1c,0x13,0x14,0x1b,0x12,0x13,0x1a, 0x12,0x13,0x19,0x11,0x12,0x18,0x11,0x11,0x17,0x11,0x12,0x17,0x11,0x11,0x16,0x10, 0x0f,0x15,0x0f,0x0f,0x15,0x10,0x10,0x16,0x4e,0x56,0x7c,0x57,0x4f,0x73,0x5a,0x4f, 0x71,0x5a,0x4e,0x70,0x58,0x4c,0x6d,0x56,0x4a,0x69,0x4e,0x43,0x5f,0x44,0x3a,0x52, 0x42,0x37,0x4d,0x45,0x39,0x51,0x41,0x36,0x4a,0x3a,0x2f,0x41,0x3f,0x35,0x45,0x44, 0x3b,0x49,0x40,0x33,0x44,0x3f,0x32,0x43,0x55,0x48,0x62,0x4f,0x43,0x55,0x4f,0x45, 0x5a,0x47,0x42,0x57,0x3e,0x3d,0x52,0x42,0x44,0x5a,0x47,0x45,0x5b,0x59,0x53,0x68, 0x72,0x68,0x7a,0x74,0x6a,0x7a,0x5d,0x58,0x71,0x56,0x5c,0x78,0x5e,0x65,0x7f,0x6c, 0x73,0x8a,0x76,0x7d,0x92,0x74,0x7b,0x91,0x72,0x79,0x8f,0x74,0x7c,0x91,0x77,0x7e, 0x93,0x7e,0x84,0x97,0x86,0x8c,0x9c,0x8d,0x92,0xa2,0x8e,0x94,0xa3,0x92,0x96,0xa5, 0x8e,0x94,0xa2,0x83,0x8a,0x9b,0x6e,0x76,0x8c,0x62,0x6a,0x84,0x5a,0x62,0x7d,0x52, 0x5a,0x77,0x51,0x58,0x75,0x4e,0x56,0x72,0x4c,0x53,0x6d,0x49,0x4f,0x69,0x52,0x5a, 0x72,0x61,0x68,0x7d,0x6b,0x72,0x84,0x71,0x77,0x87,0x69,0x6e,0x7e,0x58,0x5d,0x6a, 0x3e,0x42,0x4e,0x27,0x2a,0x34,0x1b,0x1e,0x26,0x18,0x1a,0x22,0x17,0x1a,0x21,0x16, 0x18,0x1f,0x17,0x19,0x20,0x1a,0x1c,0x22,0x1e,0x20,0x26,0x1e,0x21,0x26,0x1e,0x20, 0x26,0x1c,0x1e,0x25,0x1a,0x1d,0x24,0x19,0x1b,0x22,0x4f,0x59,0x7b,0x50,0x51,0x76, 0x5a,0x52,0x73,0x5a,0x52,0x73,0x5a,0x52,0x73,0x5a,0x52,0x73,0x5a,0x52,0x73,0x5a, 0x52,0x73,0x5a,0x53,0x73,0x5a,0x52,0x74,0x5a,0x52,0x74,0x5b,0x52,0x74,0x5b,0x53, 0x74,0x5b,0x52,0x73,0x5b,0x52,0x73,0x61,0x57,0x7a,0x68,0x5b,0x82,0x0f,0x10,0x13, 0x11,0x12,0x15,0x10,0x11,0x13,0x0d,0x0e,0x11,0x0c,0x0d,0x0f,0x0b,0x0c,0x0e,0x0a, 0x0a,0x0c,0x08,0x09,0x0a,0x08,0x09,0x0a,0x07,0x07,0x09,0x06,0x07,0x08,0x06,0x06, 0x08,0x06,0x06,0x07,0x06,0x06,0x07,0x06,0x06,0x07,0x05,0x05,0x06,0x04,0x04,0x05, 0x03,0x04,0x05,0x03,0x04,0x05,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5a,0x5b,0x5e,0xd7, 0xd9,0xe1,0x82,0x8c,0xab,0x5c,0x49,0x5a,0x46,0x35,0x41,0x42,0x33,0x3e,0x41,0x31, 0x3d,0x3f,0x30,0x3b,0x3f,0x30,0x3b,0x40,0x31,0x3c,0x42,0x32,0x3e,0x43,0x33,0x3e, 0x46,0x35,0x42,0x46,0x36,0x42,0x47,0x37,0x43,0x4a,0x39,0x47,0x4c,0x3b,0x49,0x50, 0x3e,0x4d,0x6c,0x5e,0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x59, 0x47,0x59,0x56,0x43,0x53,0x4e,0x3c,0x4a,0x44,0x34,0x40,0x39,0x2b,0x34,0x30,0x27, 0x2c,0x4a,0x4d,0x61,0x4d,0x55,0x75,0x51,0x5c,0x87,0x52,0x55,0x80,0x52,0x50,0x7b, 0x57,0x50,0x79,0x5d,0x52,0x79,0x5e,0x53,0x79,0x64,0x52,0x73,0x60,0x48,0x65,0x5d, 0x45,0x5f,0x57,0x3f,0x58,0x52,0x39,0x52,0x4f,0x38,0x4f,0x54,0x3d,0x55,0x5b,0x43, 0x5d,0x5e,0x46,0x62,0x62,0x4a,0x65,0x64,0x4c,0x69,0x64,0x4f,0x6e,0x64,0x4d,0x6b, 0x54,0x3c,0x54,0x5b,0x43,0x5d,0x64,0x53,0x74,0x55,0x50,0x79,0x81,0x8c,0xab,0x8c, 0x8b,0x97,0x3c,0x2d,0x37,0x3f,0x30,0x3c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x26,0x29,0x30,0x5e,0x6b,0x92,0x64,0x53,0x75,0x60,0x48,0x64, 0x60,0x53,0x77,0x5d,0x52,0x79,0x5d,0x52,0x79,0x5b,0x52,0x79,0x51,0x4a,0x6d,0x30, 0x2d,0x44,0x4d,0x4d,0x52,0xfa,0xfa,0xfa,0xfd,0xfd,0xfd,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xed,0xed,0xed,0x2f,0x31,0x38,0x75,0x75,0x86,0x6d,0x58,0x6e, 0x6e,0x59,0x70,0x65,0x51,0x65,0x6a,0x55,0x6b,0x1f,0x1a,0x21,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x61,0x62,0x65,0x56,0x62,0x8b,0x5f,0x47,0x63,0x64,0x53,0x76, 0x52,0x52,0x7c,0x52,0x53,0x7d,0x52,0x55,0x80,0x52,0x5a,0x84,0x52,0x5c,0x86,0x52, 0x5d,0x88,0x53,0x5e,0x88,0x53,0x5e,0x88,0x53,0x5e,0x88,0x53,0x5e,0x88,0x52,0x5d, 0x88,0x52,0x5b,0x85,0x52,0x57,0x82,0x52,0x54,0x7e,0x64,0x50,0x71,0x64,0x4c,0x69, 0x69,0x72,0x8f,0x04,0x04,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x03, 0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x03,0x03,0x03,0x03,0x04,0x04,0x04,0x05,0x04, 0x05,0x05,0x05,0x05,0x06,0x05,0x05,0x06,0x05,0x06,0x06,0x06,0x06,0x07,0x06,0x06, 0x07,0x06,0x06,0x07,0x07,0x07,0x09,0x07,0x07,0x09,0x07,0x08,0x09,0x07,0x08,0x09, 0x08,0x09,0x0a,0x09,0x0a,0x0b,0x0a,0x0a,0x0d,0x0a,0x0a,0x0d,0x0d,0x0d,0x0f,0x61, 0x67,0x86,0x53,0x5d,0x84,0x52,0x58,0x80,0x52,0x53,0x7a,0x58,0x51,0x77,0x54,0x51, 0x77,0x52,0x50,0x78,0x53,0x51,0x78,0x54,0x52,0x79,0x54,0x53,0x79,0x54,0x54,0x7a, 0x54,0x54,0x79,0x66,0x59,0x76,0x5c,0x66,0x84,0x4c,0x45,0x53,0x3b,0x3a,0x46,0x2f, 0x2b,0x39,0x32,0x2e,0x3c,0x32,0x2d,0x3b,0x2f,0x2b,0x38,0x2b,0x27,0x35,0x3d,0x35, 0x46,0x3b,0x32,0x40,0x68,0x6e,0x87,0x4b,0x50,0x74,0x4e,0x46,0x65,0x5b,0x50,0x75, 0x5c,0x52,0x77,0x5d,0x53,0x78,0x5e,0x54,0x78,0x5f,0x54,0x76,0x5f,0x54,0x77,0x60, 0x53,0x76,0x5f,0x53,0x76,0x5f,0x54,0x76,0x58,0x4f,0x6f,0x4f,0x48,0x65,0x4d,0x45, 0x5f,0x33,0x32,0x3e,0x40,0x3b,0x49,0x40,0x38,0x47,0x43,0x3a,0x4a,0x41,0x39,0x48, 0x3e,0x36,0x45,0x39,0x32,0x40,0x32,0x2e,0x3c,0x2e,0x2a,0x37,0x27,0x25,0x33,0x65, 0x5f,0x8c,0x53,0x4d,0x6c,0x49,0x43,0x5d,0x58,0x4f,0x6d,0x5e,0x52,0x75,0x62,0x57, 0x78,0x6f,0x66,0x84,0x72,0x68,0x86,0x64,0x59,0x7b,0x60,0x53,0x76,0x5f,0x54,0x76, 0x57,0x4d,0x6e,0x53,0x4a,0x68,0x72,0x64,0x8e,0x41,0x3a,0x52,0x22,0x1f,0x2a,0x28, 0x24,0x30,0x2d,0x2a,0x37,0x2c,0x2a,0x39,0x2d,0x2a,0x38,0x35,0x2e,0x3c,0x36,0x2f, 0x3d,0x39,0x32,0x42,0x42,0x3b,0x4b,0x43,0x3b,0x4c,0x40,0x39,0x4a,0x37,0x32,0x41, 0x33,0x2e,0x3c,0x53,0x47,0x5c,0x43,0x3b,0x4d,0x46,0x3e,0x53,0x5c,0x55,0x75,0x5a, 0x52,0x6f,0x5c,0x53,0x71,0x5a,0x52,0x71,0x56,0x51,0x73,0x4d,0x4c,0x6d,0x30,0x2f, 0x46,0x2d,0x30,0x44,0x28,0x25,0x2f,0x54,0x48,0x5a,0x54,0x48,0x5a,0x8e,0x95,0xaa, 0x58,0x63,0x86,0x54,0x5d,0x80,0x46,0x51,0x6e,0x12,0x13,0x1a,0x12,0x13,0x1a,0x16, 0x15,0x1d,0x21,0x1e,0x27,0x25,0x20,0x2a,0x22,0x1e,0x26,0x19,0x17,0x20,0x14,0x14, 0x1b,0x14,0x14,0x1a,0x14,0x14,0x1a,0x13,0x13,0x1a,0x15,0x14,0x1b,0x17,0x16,0x1d, 0x1a,0x17,0x1e,0x1a,0x18,0x1f,0x18,0x15,0x1b,0x14,0x12,0x18,0x4e,0x55,0x7b,0x56, 0x4e,0x73,0x5a,0x4f,0x71,0x5b,0x4f,0x71,0x5a,0x4e,0x70,0x58,0x4d,0x6d,0x54,0x49, 0x67,0x4a,0x40,0x5b,0x47,0x3d,0x57,0x4a,0x3f,0x59,0x46,0x3b,0x52,0x3b,0x31,0x45, 0x35,0x2b,0x3b,0x37,0x2d,0x3d,0x3a,0x2f,0x40,0x38,0x2c,0x3b,0x3d,0x33,0x47,0x43, 0x36,0x45,0x4e,0x44,0x57,0x4b,0x42,0x56,0x3e,0x3d,0x52,0x44,0x49,0x5f,0x46,0x44, 0x5d,0x4c,0x49,0x61,0x5e,0x55,0x6a,0x61,0x56,0x69,0x5c,0x52,0x67,0x52,0x50,0x6d, 0x53,0x56,0x73,0x59,0x61,0x7c,0x64,0x6a,0x84,0x66,0x6e,0x86,0x6a,0x72,0x8a,0x6e, 0x76,0x8e,0x72,0x79,0x8f,0x77,0x7e,0x93,0x7c,0x83,0x96,0x80,0x86,0x98,0x85,0x8a, 0x9b,0x86,0x8c,0x9c,0x8a,0x8f,0x9e,0x85,0x8b,0x9c,0x7b,0x81,0x95,0x6e,0x76,0x8d, 0x66,0x6e,0x87,0x5c,0x64,0x7e,0x54,0x5c,0x79,0x50,0x55,0x72,0x4d,0x4c,0x68,0x49, 0x48,0x62,0x4b,0x52,0x6b,0x5b,0x63,0x7a,0x62,0x69,0x7e,0x6b,0x72,0x84,0x6d,0x73, 0x84,0x69,0x6f,0x7e,0x56,0x5a,0x68,0x36,0x3a,0x46,0x25,0x28,0x32,0x1e,0x20,0x28, 0x1a,0x1c,0x24,0x19,0x1a,0x22,0x1a,0x1c,0x23,0x1d,0x1e,0x26,0x20,0x22,0x29,0x22, 0x25,0x2c,0x22,0x25,0x2c,0x22,0x25,0x2c,0x22,0x25,0x2c,0x20,0x23,0x2b,0x46,0x4f, 0x6a,0x50,0x51,0x76,0x58,0x52,0x74,0x59,0x52,0x72,0x5a,0x53,0x73,0x5a,0x53,0x74, 0x5a,0x54,0x74,0x5a,0x53,0x73,0x5a,0x52,0x73,0x5a,0x52,0x73,0x5a,0x53,0x74,0x5b, 0x52,0x74,0x5b,0x53,0x74,0x5c,0x53,0x74,0x5b,0x52,0x73,0x5f,0x54,0x77,0x75,0x66, 0x90,0x12,0x13,0x16,0x16,0x16,0x19,0x18,0x19,0x1b,0x13,0x14,0x16,0x11,0x12,0x13, 0x0e,0x0f,0x11,0x0e,0x0e,0x10,0x0c,0x0c,0x0e,0x0a,0x0a,0x0c,0x09,0x09,0x0a,0x07, 0x08,0x0a,0x07,0x07,0x09,0x06,0x06,0x08,0x06,0x06,0x08,0x06,0x06,0x08,0x05,0x06, 0x06,0x05,0x06,0x06,0x04,0x04,0x05,0x04,0x04,0x05,0x03,0x04,0x05,0x03,0x04,0x05, 0x03,0x03,0x04,0x03,0x03,0x04,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x1a,0x1b,0x1e,0x98,0x9c,0xab,0x83,0x8d,0xac,0x5e,0x4a,0x5d,0x47, 0x37,0x44,0x44,0x34,0x40,0x40,0x31,0x3b,0x40,0x30,0x3b,0x41,0x31,0x3c,0x42,0x33, 0x3e,0x44,0x34,0x40,0x44,0x34,0x40,0x47,0x36,0x43,0x48,0x38,0x45,0x4b,0x3a,0x47, 0x4d,0x3c,0x4a,0x4e,0x3c,0x4a,0x60,0x4d,0x5f,0x16,0x15,0x1d,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x29,0x22,0x2a,0x68,0x54,0x69,0x55,0x43,0x53,0x35, 0x27,0x30,0x2a,0x1e,0x24,0x23,0x19,0x1e,0x1f,0x16,0x19,0x1c,0x13,0x16,0x2b,0x26, 0x2d,0x38,0x37,0x44,0x40,0x42,0x56,0x48,0x4d,0x68,0x4a,0x52,0x76,0x52,0x52,0x7c, 0x52,0x4f,0x7a,0x57,0x50,0x79,0x62,0x53,0x77,0x64,0x53,0x76,0x64,0x4d,0x6b,0x5f, 0x47,0x63,0x58,0x40,0x5a,0x54,0x3d,0x55,0x50,0x39,0x52,0x4e,0x37,0x4e,0x4e,0x37, 0x4e,0x55,0x3d,0x55,0x5c,0x44,0x5f,0x64,0x4c,0x69,0x52,0x4f,0x7a,0x6a,0x75,0x9a, 0x8d,0x8d,0x9c,0x3d,0x2f,0x39,0x4b,0x3a,0x48,0x03,0x02,0x03,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x63,0x6d,0x8f,0x52,0x4f, 0x7a,0x5f,0x47,0x63,0x62,0x53,0x77,0x5e,0x53,0x79,0x5e,0x53,0x79,0x59,0x50,0x76, 0x45,0x3f,0x5d,0x1f,0x1d,0x2b,0xcc,0xcc,0xcd,0xfd,0xfd,0xfd,0xff,0xff,0xff,0xfd, 0xfd,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xb2,0xb2,0xb4,0x42,0x46,0x50,0x85,0x85, 0x98,0x6b,0x57,0x6c,0x6b,0x56,0x6c,0x64,0x50,0x63,0x68,0x54,0x69,0x1a,0x16,0x1b, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0c,0x0c,0x0c,0x72,0x7b,0x99,0x63,0x53, 0x77,0x62,0x4a,0x66,0x52,0x4f,0x7a,0x52,0x52,0x7c,0x52,0x54,0x7e,0x52,0x57,0x82, 0x52,0x5b,0x85,0x52,0x5c,0x86,0x52,0x5d,0x88,0x52,0x5d,0x88,0x53,0x5e,0x88,0x52, 0x5d,0x88,0x52,0x5d,0x88,0x52,0x5c,0x86,0x52,0x5a,0x84,0x52,0x55,0x80,0x52,0x4f, 0x7a,0x60,0x48,0x64,0x52,0x4f,0x7a,0x41,0x46,0x54,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x03,0x03,0x02,0x03,0x03, 0x03,0x03,0x04,0x04,0x05,0x05,0x04,0x05,0x05,0x04,0x05,0x05,0x05,0x06,0x06,0x05, 0x06,0x06,0x06,0x06,0x07,0x06,0x06,0x07,0x06,0x06,0x07,0x07,0x07,0x09,0x07,0x07, 0x09,0x07,0x08,0x09,0x08,0x09,0x0a,0x08,0x09,0x0a,0x09,0x0a,0x0b,0x0a,0x0a,0x0b, 0x0a,0x0a,0x0c,0x64,0x6c,0x89,0x53,0x5d,0x85,0x52,0x59,0x81,0x52,0x53,0x7a,0x59, 0x52,0x77,0x55,0x50,0x77,0x54,0x51,0x77,0x53,0x51,0x78,0x53,0x52,0x79,0x54,0x54, 0x7b,0x54,0x55,0x7a,0x54,0x54,0x79,0x62,0x55,0x6f,0x5a,0x63,0x84,0x43,0x3f,0x4c, 0x43,0x42,0x4e,0x4d,0x4b,0x56,0x3a,0x38,0x44,0x2d,0x2b,0x38,0x2e,0x2b,0x38,0x2d, 0x29,0x36,0x3f,0x37,0x47,0x3c,0x32,0x40,0x6f,0x73,0x8b,0x4d,0x56,0x7a,0x4a,0x44, 0x62,0x5b,0x50,0x74,0x5c,0x52,0x77,0x5d,0x53,0x77,0x5f,0x53,0x76,0x5f,0x54,0x76, 0x5f,0x54,0x76,0x60,0x53,0x77,0x5f,0x54,0x76,0x5e,0x54,0x75,0x57,0x4e,0x6e,0x4f, 0x47,0x64,0x53,0x4a,0x65,0x2f,0x2a,0x37,0x3d,0x35,0x44,0x44,0x3a,0x4a,0x46,0x3c, 0x4b,0x44,0x3a,0x4a,0x40,0x38,0x47,0x3c,0x35,0x43,0x38,0x31,0x3f,0x34,0x2e,0x3b, 0x2d,0x28,0x35,0x60,0x5d,0x8b,0x50,0x4c,0x6d,0x48,0x44,0x5d,0x56,0x4c,0x6b,0x5e, 0x52,0x74,0x5e,0x53,0x75,0x5e,0x53,0x75,0x67,0x5b,0x7c,0x78,0x6f,0x8c,0x6e,0x62, 0x82,0x5f,0x54,0x77,0x5a,0x4f,0x6f,0x52,0x47,0x65,0x73,0x65,0x8f,0x45,0x3c,0x56, 0x21,0x1d,0x26,0x29,0x24,0x2e,0x31,0x2b,0x36,0x31,0x2a,0x36,0x2d,0x28,0x33,0x34, 0x2c,0x3a,0x3c,0x33,0x41,0x40,0x37,0x47,0x40,0x37,0x47,0x42,0x3a,0x4a,0x45,0x3b, 0x4c,0x40,0x37,0x47,0x3b,0x33,0x41,0x4d,0x42,0x55,0x50,0x44,0x58,0x3c,0x35,0x46, 0x60,0x56,0x76,0x5a,0x51,0x6d,0x5b,0x52,0x6f,0x5a,0x51,0x6f,0x5a,0x51,0x71,0x56, 0x50,0x73,0x39,0x38,0x51,0x2f,0x2e,0x45,0x1f,0x22,0x2f,0x3e,0x36,0x44,0x54,0x48, 0x5a,0x82,0x7f,0x8f,0x6b,0x74,0x93,0x54,0x5d,0x81,0x51,0x5c,0x80,0x3c,0x43,0x5e, 0x14,0x16,0x1d,0x16,0x15,0x1c,0x24,0x1f,0x29,0x2a,0x24,0x2e,0x28,0x23,0x2d,0x1f, 0x1c,0x25,0x16,0x16,0x1d,0x1e,0x1a,0x23,0x21,0x1d,0x26,0x21,0x1d,0x25,0x23,0x1f, 0x27,0x26,0x22,0x2a,0x28,0x22,0x2b,0x29,0x22,0x2c,0x26,0x21,0x2a,0x1f,0x1b,0x22, 0x4f,0x54,0x79,0x56,0x4e,0x72,0x5a,0x50,0x71,0x5c,0x50,0x72,0x5b,0x50,0x72,0x5a, 0x4e,0x71,0x59,0x4d,0x6e,0x56,0x4a,0x69,0x52,0x47,0x65,0x51,0x45,0x62,0x4e,0x42, 0x5d,0x44,0x39,0x51,0x3a,0x31,0x45,0x3c,0x31,0x45,0x3d,0x31,0x44,0x37,0x2d,0x3d, 0x39,0x30,0x44,0x2a,0x21,0x29,0x3c,0x30,0x3b,0x3f,0x32,0x40,0x44,0x39,0x48,0x4a, 0x42,0x54,0x4e,0x46,0x5e,0x52,0x4a,0x62,0x54,0x4b,0x62,0x53,0x48,0x5d,0x53,0x47, 0x5c,0x58,0x4e,0x66,0x53,0x53,0x6f,0x54,0x59,0x75,0x56,0x5e,0x7a,0x5d,0x65,0x7f, 0x6a,0x72,0x8a,0x6e,0x76,0x8d,0x6e,0x76,0x8e,0x71,0x79,0x8e,0x76,0x7d,0x92,0x76, 0x7e,0x92,0x76,0x7e,0x92,0x7a,0x81,0x95,0x7e,0x84,0x97,0x7e,0x85,0x97,0x85,0x8a, 0x9b,0x7e,0x84,0x97,0x72,0x7a,0x8f,0x68,0x70,0x88,0x5e,0x66,0x81,0x55,0x5d,0x7a, 0x50,0x50,0x6d,0x4d,0x4c,0x68,0x4c,0x4e,0x6a,0x52,0x59,0x72,0x60,0x67,0x7d,0x6d, 0x73,0x86,0x72,0x78,0x8a,0x6f,0x75,0x86,0x62,0x68,0x78,0x49,0x4e,0x5d,0x30,0x34, 0x40,0x24,0x27,0x32,0x1e,0x21,0x2a,0x1c,0x1e,0x27,0x1e,0x20,0x28,0x1f,0x22,0x2a, 0x22,0x25,0x2d,0x26,0x29,0x30,0x29,0x2b,0x33,0x2c,0x2e,0x36,0x2b,0x2e,0x36,0x26, 0x2a,0x32,0x40,0x48,0x5e,0x52,0x53,0x77,0x58,0x54,0x74,0x5a,0x54,0x74,0x5a,0x53, 0x73,0x5a,0x53,0x73,0x5a,0x53,0x73,0x5a,0x54,0x73,0x5a,0x53,0x73,0x5a,0x53,0x73, 0x5b,0x54,0x74,0x5b,0x53,0x74,0x5b,0x54,0x74,0x5c,0x54,0x75,0x5c,0x54,0x74,0x5e, 0x53,0x75,0x6f,0x64,0x8b,0x17,0x18,0x1c,0x1c,0x1d,0x20,0x22,0x22,0x25,0x1a,0x1a, 0x1d,0x15,0x16,0x19,0x12,0x13,0x16,0x11,0x12,0x13,0x0f,0x10,0x12,0x0d,0x0e,0x10, 0x0b,0x0c,0x0e,0x0a,0x0a,0x0c,0x08,0x09,0x0a,0x08,0x09,0x0a,0x07,0x07,0x09,0x07, 0x07,0x09,0x06,0x07,0x08,0x06,0x06,0x06,0x06,0x06,0x06,0x05,0x06,0x06,0x04,0x04, 0x05,0x04,0x04,0x05,0x03,0x04,0x05,0x03,0x03,0x04,0x03,0x03,0x04,0x02,0x02,0x03, 0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x5e,0x62,0x6f, 0x8d,0x96,0xb2,0x6c,0x57,0x6d,0x47,0x36,0x43,0x44,0x34,0x40,0x42,0x33,0x3e,0x42, 0x32,0x3d,0x43,0x33,0x3e,0x44,0x34,0x40,0x45,0x35,0x41,0x47,0x37,0x44,0x4a,0x39, 0x46,0x4c,0x3b,0x48,0x4d,0x3b,0x49,0x4f,0x3d,0x4b,0x51,0x3f,0x4e,0x78,0x64,0x7e, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x23,0x1c,0x23,0x3d,0x2f,0x3a,0x40,0x31,0x3b,0x37,0x29,0x32,0x30,0x23,0x2b,0x2b, 0x1f,0x25,0x2b,0x1f,0x25,0x2b,0x1f,0x25,0x28,0x1c,0x22,0x23,0x19,0x1d,0x1e,0x15, 0x18,0x1d,0x15,0x18,0x35,0x2f,0x37,0x42,0x40,0x4e,0x4a,0x4d,0x62,0x4e,0x54,0x71, 0x51,0x5b,0x80,0x53,0x5e,0x88,0x52,0x55,0x80,0x52,0x4f,0x7a,0x5a,0x52,0x79,0x64, 0x53,0x75,0x64,0x4e,0x6c,0x64,0x4d,0x6b,0x5e,0x53,0x79,0x5e,0x53,0x79,0x8e,0x98, 0xb3,0x96,0x95,0xa4,0x3f,0x31,0x3b,0x4c,0x3b,0x49,0x08,0x06,0x08,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x49, 0x4f,0x63,0x52,0x57,0x83,0x63,0x4b,0x67,0x64,0x4f,0x6d,0x60,0x53,0x77,0x5e,0x53, 0x79,0x53,0x4a,0x6e,0x35,0x2f,0x46,0x41,0x40,0x46,0xfc,0xfc,0xfc,0xfd,0xfd,0xfd, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x53,0x54,0x59,0x5c, 0x61,0x70,0x91,0x94,0xa7,0x67,0x52,0x67,0x68,0x54,0x69,0x62,0x4e,0x62,0x68,0x53, 0x68,0x15,0x12,0x16,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x67, 0x69,0x70,0x52,0x5d,0x88,0x5f,0x47,0x63,0x5c,0x52,0x79,0x52,0x52,0x7c,0x52,0x53, 0x7e,0x52,0x55,0x81,0x52,0x5a,0x84,0x52,0x5c,0x86,0x52,0x5d,0x86,0x52,0x5d,0x88, 0x52,0x5d,0x88,0x52,0x5d,0x88,0x52,0x5d,0x88,0x52,0x5b,0x85,0x52,0x57,0x83,0x52, 0x55,0x80,0x52,0x52,0x7d,0x60,0x53,0x77,0x5f,0x48,0x64,0x58,0x63,0x89,0x16,0x17, 0x1a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02, 0x03,0x02,0x03,0x03,0x03,0x03,0x04,0x04,0x05,0x05,0x04,0x05,0x05,0x05,0x05,0x06, 0x05,0x05,0x06,0x05,0x06,0x06,0x06,0x06,0x07,0x06,0x06,0x07,0x06,0x07,0x08,0x07, 0x07,0x09,0x06,0x07,0x08,0x07,0x07,0x09,0x07,0x08,0x09,0x08,0x09,0x0a,0x08,0x09, 0x0a,0x0a,0x0a,0x0b,0x0a,0x0a,0x0b,0x63,0x69,0x85,0x53,0x5d,0x84,0x52,0x5a,0x82, 0x52,0x53,0x7a,0x58,0x51,0x77,0x55,0x51,0x77,0x55,0x51,0x77,0x53,0x51,0x78,0x53, 0x52,0x79,0x54,0x52,0x79,0x54,0x55,0x7a,0x54,0x54,0x79,0x62,0x53,0x6c,0x5c,0x65, 0x84,0x38,0x34,0x41,0x2f,0x2e,0x39,0x3f,0x3e,0x49,0x2b,0x28,0x36,0x2a,0x28,0x35, 0x2c,0x28,0x35,0x2c,0x27,0x34,0x3e,0x36,0x46,0x39,0x31,0x3f,0x6e,0x71,0x87,0x52, 0x5c,0x7f,0x49,0x43,0x62,0x59,0x4f,0x72,0x5c,0x52,0x77,0x5d,0x52,0x77,0x5e,0x53, 0x78,0x5f,0x53,0x76,0x5f,0x54,0x76,0x5f,0x53,0x77,0x5f,0x54,0x76,0x5e,0x53,0x76, 0x55,0x4d,0x6b,0x4f,0x49,0x66,0x57,0x4b,0x66,0x34,0x2d,0x3a,0x3f,0x37,0x45,0x44, 0x3a,0x49,0x45,0x3b,0x4a,0x44,0x39,0x49,0x42,0x39,0x48,0x40,0x36,0x46,0x3d,0x35, 0x43,0x3a,0x32,0x40,0x31,0x2a,0x37,0x5d,0x5e,0x89,0x4b,0x4b,0x6e,0x45,0x40,0x5c, 0x53,0x4b,0x6a,0x5e,0x52,0x74,0x5e,0x52,0x74,0x5e,0x53,0x75,0x5f,0x52,0x75,0x60, 0x55,0x77,0x72,0x67,0x86,0x6c,0x62,0x82,0x5a,0x4f,0x6f,0x4d,0x42,0x5e,0x72,0x61, 0x8b,0x4c,0x41,0x5d,0x1e,0x1a,0x22,0x2c,0x26,0x30,0x36,0x2e,0x3a,0x37,0x2f,0x3c, 0x33,0x2c,0x38,0x3a,0x31,0x3e,0x42,0x39,0x47,0x43,0x3a,0x49,0x43,0x39,0x48,0x48, 0x3e,0x4d,0x4d,0x40,0x51,0x4c,0x3f,0x50,0x49,0x3d,0x4d,0x45,0x3b,0x4c,0x5f,0x50, 0x66,0x48,0x3e,0x51,0x49,0x41,0x58,0x5d,0x53,0x70,0x5a,0x51,0x6d,0x5a,0x52,0x70, 0x5b,0x51,0x6f,0x59,0x51,0x71,0x55,0x50,0x72,0x31,0x2f,0x47,0x2f,0x2d,0x43,0x13, 0x15,0x1c,0x4a,0x3f,0x50,0x54,0x47,0x59,0x84,0x85,0x99,0x57,0x62,0x85,0x50,0x5b, 0x80,0x4e,0x58,0x7d,0x3d,0x43,0x60,0x14,0x14,0x1c,0x18,0x17,0x1e,0x22,0x1e,0x27, 0x23,0x1e,0x28,0x1a,0x19,0x21,0x16,0x16,0x1d,0x21,0x1d,0x26,0x26,0x22,0x2a,0x29, 0x23,0x2c,0x2e,0x27,0x32,0x32,0x2a,0x35,0x32,0x2a,0x34,0x32,0x29,0x34,0x2d,0x26, 0x2f,0x23,0x1e,0x26,0x4e,0x55,0x79,0x54,0x4e,0x71,0x59,0x51,0x73,0x5a,0x51,0x75, 0x5b,0x51,0x75,0x5c,0x50,0x72,0x5b,0x4f,0x71,0x5a,0x4e,0x70,0x57,0x4d,0x6d,0x55, 0x49,0x69,0x52,0x47,0x65,0x4f,0x44,0x61,0x4a,0x3f,0x58,0x44,0x39,0x50,0x42,0x35, 0x4a,0x3a,0x30,0x41,0x3a,0x31,0x45,0x2d,0x22,0x2d,0x30,0x26,0x30,0x35,0x2a,0x35, 0x3d,0x31,0x3e,0x44,0x37,0x45,0x54,0x45,0x56,0x56,0x4b,0x60,0x55,0x4a,0x62,0x4e, 0x44,0x58,0x4b,0x41,0x55,0x54,0x4a,0x5f,0x51,0x4e,0x6a,0x53,0x54,0x72,0x53,0x5a, 0x77,0x58,0x60,0x7c,0x63,0x6a,0x85,0x6a,0x72,0x8a,0x6d,0x74,0x8c,0x6b,0x73,0x8b, 0x6d,0x75,0x8c,0x67,0x6f,0x88,0x65,0x6c,0x86,0x6b,0x73,0x8b,0x72,0x7a,0x90,0x77, 0x7e,0x93,0x7e,0x84,0x97,0x7f,0x86,0x98,0x79,0x80,0x94,0x6e,0x76,0x8d,0x62,0x6b, 0x85,0x57,0x5f,0x7a,0x52,0x56,0x73,0x51,0x52,0x6f,0x4f,0x4f,0x6c,0x4e,0x52,0x6e, 0x57,0x5e,0x78,0x66,0x6d,0x82,0x6d,0x74,0x88,0x6d,0x73,0x86,0x64,0x6a,0x7d,0x58, 0x5e,0x6e,0x46,0x4a,0x5a,0x30,0x35,0x42,0x25,0x28,0x34,0x20,0x22,0x2c,0x1f,0x22, 0x2a,0x22,0x24,0x2c,0x26,0x28,0x30,0x2a,0x2d,0x35,0x2e,0x31,0x39,0x33,0x36,0x3e, 0x32,0x35,0x3e,0x2b,0x2e,0x37,0x3d,0x43,0x55,0x52,0x55,0x78,0x56,0x54,0x75,0x59, 0x54,0x73,0x5a,0x55,0x74,0x5a,0x54,0x74,0x5a,0x54,0x74,0x5a,0x54,0x73,0x5a,0x54, 0x74,0x5a,0x55,0x74,0x5b,0x54,0x74,0x5b,0x54,0x74,0x5b,0x54,0x74,0x5c,0x54,0x74, 0x5c,0x54,0x74,0x5b,0x52,0x73,0x6a,0x60,0x84,0x1d,0x1d,0x22,0x1e,0x1f,0x22,0x21, 0x22,0x25,0x1d,0x1e,0x20,0x1a,0x1a,0x1c,0x18,0x18,0x1a,0x14,0x15,0x17,0x12,0x13, 0x16,0x0f,0x10,0x12,0x0d,0x0e,0x10,0x0b,0x0b,0x0e,0x0a,0x0a,0x0d,0x09,0x0a,0x0b, 0x08,0x09,0x0a,0x08,0x08,0x0a,0x08,0x09,0x0a,0x06,0x07,0x09,0x06,0x07,0x09,0x06, 0x06,0x07,0x05,0x06,0x06,0x04,0x05,0x06,0x04,0x05,0x06,0x04,0x04,0x05,0x03,0x03, 0x04,0x03,0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x26,0x29,0x32,0x75,0x7f,0x9b,0x77,0x63,0x7c,0x47,0x37,0x44, 0x44,0x34,0x3f,0x43,0x33,0x3f,0x42,0x33,0x3e,0x44,0x34,0x40,0x45,0x35,0x41,0x47, 0x37,0x44,0x4a,0x39,0x46,0x4a,0x39,0x47,0x4c,0x3b,0x49,0x4f,0x3d,0x4c,0x51,0x3f, 0x4e,0x5a,0x47,0x59,0x2f,0x2e,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x0c,0x09,0x0c, 0x1f,0x18,0x1e,0x3c,0x2f,0x39,0x4a,0x39,0x46,0x4a,0x39,0x47,0x44,0x34,0x3f,0x42, 0x32,0x3d,0x39,0x2b,0x34,0x32,0x25,0x2c,0x30,0x23,0x2b,0x2e,0x22,0x29,0x2b,0x1f, 0x25,0x2b,0x1f,0x25,0x2a,0x1e,0x24,0x33,0x29,0x2f,0x51,0x49,0x50,0x64,0x5f,0x69, 0x77,0x78,0x86,0x85,0x89,0x9b,0x96,0x9f,0xb6,0x8e,0x99,0xb4,0x88,0x92,0xaf,0x8e, 0x98,0xb3,0x9b,0x96,0x9d,0x47,0x37,0x43,0x4c,0x3b,0x49,0x0b,0x09,0x0b,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x2b,0x2d,0x32,0x60,0x6c,0x93,0x62,0x53,0x77,0x60,0x4a,0x65,0x64, 0x53,0x76,0x5c,0x51,0x77,0x49,0x41,0x5e,0x22,0x1e,0x2d,0xc5,0xc5,0xc6,0xff,0xff, 0xff,0xff,0xff,0xff,0xfc,0xfc,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xf2,0xf2,0xf2, 0x17,0x19,0x25,0x70,0x77,0x8a,0x9a,0x9e,0xb4,0x62,0x4e,0x62,0x64,0x50,0x64,0x62, 0x4e,0x62,0x68,0x53,0x68,0x0f,0x0c,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x15,0x15,0x15,0x6d,0x77,0x98,0x64,0x53,0x76,0x64,0x4e,0x6d,0x52, 0x50,0x7b,0x52,0x52,0x7d,0x52,0x55,0x80,0x52,0x57,0x82,0x52,0x5a,0x84,0x52,0x5c, 0x86,0x52,0x5d,0x88,0x52,0x5d,0x88,0x52,0x5d,0x88,0x52,0x5d,0x88,0x52,0x5c,0x86, 0x52,0x5a,0x84,0x52,0x55,0x80,0x52,0x53,0x7e,0x52,0x4f,0x7b,0x63,0x4b,0x67,0x64, 0x52,0x72,0x4e,0x57,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x03,0x02,0x03,0x03,0x03,0x03,0x04,0x03,0x03,0x04,0x04,0x04, 0x05,0x04,0x05,0x05,0x05,0x06,0x06,0x05,0x06,0x06,0x06,0x06,0x07,0x06,0x06,0x07, 0x06,0x06,0x07,0x06,0x07,0x08,0x07,0x07,0x09,0x07,0x08,0x09,0x07,0x08,0x09,0x08, 0x08,0x0a,0x09,0x0a,0x0b,0x09,0x0a,0x0b,0x09,0x0a,0x0b,0x66,0x6b,0x86,0x54,0x5e, 0x85,0x52,0x5c,0x82,0x52,0x53,0x7b,0x54,0x51,0x77,0x55,0x51,0x77,0x55,0x52,0x77, 0x53,0x51,0x78,0x54,0x51,0x79,0x54,0x52,0x79,0x54,0x55,0x7b,0x54,0x53,0x79,0x62, 0x56,0x72,0x5d,0x66,0x84,0x3b,0x35,0x42,0x25,0x25,0x2f,0x3d,0x3c,0x46,0x30,0x2e, 0x3b,0x27,0x25,0x32,0x26,0x25,0x31,0x24,0x22,0x2e,0x37,0x32,0x40,0x37,0x2e,0x3b, 0x65,0x69,0x79,0x58,0x62,0x84,0x47,0x42,0x62,0x55,0x4c,0x6d,0x5c,0x52,0x77,0x5d, 0x52,0x77,0x5e,0x53,0x78,0x5f,0x53,0x76,0x5f,0x54,0x76,0x5f,0x54,0x76,0x5f,0x53, 0x76,0x5e,0x53,0x75,0x55,0x4b,0x6b,0x4e,0x47,0x64,0x54,0x49,0x64,0x31,0x2b,0x37, 0x3d,0x34,0x44,0x44,0x39,0x49,0x44,0x3a,0x49,0x44,0x3a,0x49,0x43,0x39,0x49,0x42, 0x38,0x46,0x3f,0x36,0x44,0x3d,0x34,0x42,0x35,0x2e,0x3a,0x5b,0x5f,0x85,0x4b,0x4c, 0x71,0x43,0x40,0x5c,0x51,0x49,0x68,0x5d,0x51,0x74,0x5e,0x52,0x75,0x5e,0x53,0x75, 0x5f,0x52,0x75,0x5e,0x53,0x75,0x61,0x55,0x78,0x7a,0x70,0x8c,0x5c,0x51,0x72,0x4b, 0x40,0x5b,0x6a,0x5d,0x83,0x4f,0x44,0x63,0x1e,0x1a,0x22,0x32,0x2a,0x35,0x3a,0x30, 0x3d,0x3a,0x32,0x3f,0x36,0x2e,0x3b,0x35,0x2f,0x3d,0x3f,0x36,0x45,0x44,0x3a,0x4a, 0x45,0x3c,0x4b,0x4a,0x3f,0x4f,0x4e,0x41,0x52,0x4f,0x42,0x53,0x4e,0x41,0x52,0x4b, 0x3f,0x4f,0x54,0x47,0x5b,0x58,0x4a,0x5e,0x3d,0x35,0x45,0x61,0x57,0x75,0x5a,0x50, 0x6c,0x5a,0x51,0x6e,0x5a,0x51,0x6e,0x5b,0x51,0x6f,0x5b,0x51,0x70,0x42,0x3c,0x56, 0x30,0x2e,0x45,0x25,0x27,0x37,0x18,0x18,0x1f,0x52,0x46,0x58,0x54,0x47,0x5a,0x73, 0x7a,0x96,0x51,0x5c,0x80,0x4e,0x58,0x7d,0x4d,0x58,0x7d,0x37,0x3e,0x57,0x13,0x13, 0x1a,0x14,0x14,0x1b,0x15,0x14,0x1b,0x12,0x12,0x18,0x11,0x11,0x16,0x14,0x13,0x1a, 0x1e,0x1a,0x22,0x27,0x22,0x2a,0x32,0x2a,0x35,0x34,0x2a,0x36,0x32,0x29,0x33,0x2e, 0x26,0x30,0x25,0x20,0x29,0x1e,0x1d,0x27,0x4c,0x53,0x78,0x51,0x4e,0x72,0x58,0x50, 0x74,0x59,0x51,0x76,0x5b,0x51,0x76,0x5b,0x51,0x76,0x5b,0x51,0x76,0x5d,0x50,0x72, 0x5a,0x4f,0x71,0x59,0x4d,0x6f,0x57,0x4b,0x6c,0x54,0x48,0x67,0x4f,0x44,0x61,0x4a, 0x40,0x5a,0x49,0x3c,0x53,0x42,0x36,0x4a,0x3f,0x35,0x4a,0x2f,0x26,0x2f,0x33,0x28, 0x33,0x36,0x2a,0x35,0x3f,0x32,0x41,0x42,0x35,0x42,0x4a,0x3c,0x4a,0x55,0x4a,0x5e, 0x54,0x4a,0x62,0x4e,0x46,0x5e,0x4a,0x43,0x58,0x4f,0x49,0x61,0x51,0x4b,0x65,0x52, 0x4f,0x6a,0x52,0x54,0x71,0x56,0x5e,0x7a,0x5e,0x66,0x80,0x65,0x6c,0x86,0x64,0x6d, 0x86,0x66,0x6e,0x87,0x66,0x6e,0x87,0x62,0x6a,0x84,0x5b,0x63,0x7e,0x5d,0x66,0x7f, 0x66,0x6e,0x87,0x6e,0x76,0x8d,0x76,0x7e,0x92,0x7e,0x83,0x96,0x7e,0x85,0x97,0x76, 0x7e,0x92,0x6a,0x72,0x8a,0x5f,0x68,0x82,0x58,0x61,0x7c,0x52,0x5a,0x77,0x52,0x55, 0x72,0x50,0x53,0x70,0x52,0x5a,0x75,0x5b,0x63,0x7c,0x65,0x6d,0x82,0x69,0x6f,0x83, 0x69,0x6f,0x83,0x69,0x6e,0x81,0x5d,0x63,0x74,0x42,0x48,0x57,0x2c,0x30,0x3e,0x26, 0x2a,0x36,0x29,0x2c,0x36,0x26,0x2a,0x32,0x29,0x2c,0x35,0x2b,0x2e,0x36,0x34,0x36, 0x3e,0x35,0x38,0x40,0x34,0x37,0x3f,0x2d,0x30,0x39,0x37,0x3c,0x4b,0x53,0x58,0x7b, 0x54,0x53,0x74,0x59,0x54,0x73,0x59,0x54,0x74,0x5a,0x55,0x74,0x5a,0x55,0x74,0x5a, 0x55,0x74,0x5a,0x55,0x74,0x5a,0x54,0x74,0x5b,0x55,0x75,0x5c,0x55,0x75,0x5c,0x55, 0x75,0x5b,0x54,0x74,0x5c,0x55,0x75,0x59,0x52,0x70,0x65,0x5c,0x80,0x1d,0x1e,0x23, 0x1b,0x1c,0x20,0x1e,0x1e,0x22,0x1c,0x1d,0x1f,0x1a,0x1b,0x1e,0x1a,0x1a,0x1d,0x16, 0x17,0x1a,0x15,0x16,0x17,0x13,0x13,0x16,0x11,0x12,0x13,0x0e,0x0e,0x12,0x0c,0x0d, 0x0f,0x0c,0x0c,0x0e,0x0a,0x0b,0x0d,0x09,0x0a,0x0c,0x09,0x0a,0x0b,0x08,0x09,0x0a, 0x07,0x08,0x0a,0x07,0x07,0x09,0x06,0x06,0x08,0x06,0x06,0x06,0x05,0x06,0x06,0x04, 0x05,0x06,0x04,0x04,0x05,0x03,0x04,0x04,0x03,0x04,0x04,0x03,0x03,0x04,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0x0c,0x0f,0x4f,0x56, 0x70,0x68,0x66,0x8b,0x45,0x35,0x41,0x44,0x34,0x40,0x44,0x34,0x3f,0x44,0x34,0x3f, 0x46,0x35,0x42,0x48,0x37,0x44,0x4b,0x3a,0x47,0x4c,0x3b,0x49,0x4c,0x3b,0x49,0x51, 0x3f,0x4e,0x51,0x3f,0x4e,0x54,0x42,0x51,0x6d,0x58,0x6e,0x08,0x08,0x0b,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x04,0x05, 0x0f,0x0b,0x0e,0x20,0x19,0x1f,0x39,0x2d,0x38,0x4d,0x3c,0x4a,0x52,0x40,0x4f,0x4c, 0x3b,0x48,0x46,0x36,0x42,0x40,0x31,0x3b,0x3b,0x2c,0x36,0x3b,0x2d,0x36,0x3e,0x2f, 0x39,0x38,0x2a,0x33,0x39,0x2a,0x33,0x3d,0x2e,0x38,0x40,0x30,0x3b,0x4d,0x3f,0x4b, 0x5d,0x53,0x61,0x52,0x45,0x52,0x4d,0x3c,0x49,0x53,0x41,0x50,0x13,0x0f,0x13,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x90,0x97,0xab,0x52,0x55,0x81, 0x62,0x4a,0x66,0x64,0x4f,0x6d,0x56,0x4c,0x6f,0x38,0x31,0x48,0x41,0x40,0x45,0xfc, 0xfc,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0xf8,0xf8,0xff,0xff,0xff,0xff,0xff, 0xff,0xc3,0xc2,0xc3,0x20,0x23,0x34,0x7b,0x83,0x98,0x9c,0xa2,0xb8,0x5f,0x4b,0x5e, 0x62,0x4e,0x62,0x62,0x4e,0x62,0x68,0x53,0x68,0x0a,0x08,0x0a,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x68,0x6c,0x77,0x52,0x5b,0x85, 0x62,0x4a,0x66,0x58,0x52,0x79,0x52,0x52,0x7c,0x52,0x53,0x7d,0x52,0x55,0x81,0x52, 0x5a,0x84,0x52,0x5b,0x85,0x52,0x5d,0x86,0x52,0x5d,0x88,0x52,0x5d,0x88,0x52,0x5d, 0x86,0x52,0x5b,0x85,0x52,0x57,0x83,0x52,0x55,0x81,0x52,0x54,0x7e,0x52,0x52,0x7c, 0x53,0x50,0x7a,0x5d,0x45,0x5f,0x52,0x53,0x7e,0x30,0x34,0x3d,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x03,0x03,0x03, 0x03,0x04,0x04,0x04,0x05,0x04,0x04,0x05,0x05,0x06,0x06,0x05,0x06,0x06,0x06,0x06, 0x07,0x05,0x06,0x06,0x06,0x07,0x08,0x07,0x07,0x09,0x07,0x07,0x09,0x07,0x07,0x09, 0x08,0x08,0x0a,0x08,0x08,0x0a,0x08,0x09,0x0a,0x09,0x0a,0x0b,0x09,0x0a,0x0b,0x68, 0x6e,0x89,0x55,0x5f,0x87,0x52,0x5d,0x83,0x52,0x53,0x7a,0x56,0x51,0x77,0x58,0x52, 0x78,0x55,0x52,0x77,0x52,0x50,0x78,0x53,0x51,0x79,0x54,0x54,0x7b,0x54,0x55,0x7b, 0x55,0x53,0x78,0x62,0x54,0x70,0x60,0x68,0x85,0x3e,0x37,0x43,0x1a,0x1d,0x25,0x24, 0x25,0x2e,0x47,0x47,0x50,0x20,0x20,0x2b,0x20,0x1f,0x2a,0x1e,0x1d,0x27,0x31,0x2b, 0x38,0x33,0x2b,0x37,0x5b,0x5c,0x6a,0x5c,0x67,0x88,0x48,0x44,0x66,0x54,0x4a,0x6b, 0x5c,0x52,0x76,0x5d,0x52,0x77,0x5e,0x53,0x78,0x5e,0x53,0x78,0x5e,0x53,0x78,0x5e, 0x54,0x78,0x5f,0x53,0x76,0x5e,0x53,0x75,0x55,0x4c,0x6a,0x4d,0x45,0x61,0x52,0x49, 0x63,0x2a,0x26,0x32,0x36,0x30,0x3d,0x3f,0x37,0x44,0x42,0x39,0x47,0x43,0x39,0x48, 0x43,0x39,0x48,0x43,0x39,0x48,0x41,0x37,0x45,0x3f,0x36,0x43,0x3a,0x31,0x3e,0x5a, 0x5a,0x7c,0x4e,0x4d,0x72,0x42,0x3f,0x5d,0x4d,0x46,0x62,0x5d,0x51,0x73,0x5e,0x52, 0x74,0x5e,0x53,0x75,0x5e,0x52,0x75,0x5e,0x53,0x76,0x5f,0x53,0x75,0x7a,0x70,0x8c, 0x5c,0x51,0x73,0x4b,0x41,0x5c,0x66,0x58,0x7e,0x52,0x47,0x67,0x1a,0x17,0x1e,0x2f, 0x28,0x33,0x36,0x2e,0x3a,0x39,0x31,0x3f,0x3a,0x31,0x3e,0x3b,0x32,0x40,0x41,0x37, 0x47,0x45,0x3c,0x4b,0x48,0x3d,0x4e,0x4c,0x41,0x50,0x50,0x42,0x53,0x50,0x43,0x53, 0x4f,0x42,0x53,0x4c,0x40,0x50,0x46,0x3c,0x4b,0x64,0x54,0x6a,0x4a,0x40,0x51,0x4e, 0x44,0x5d,0x5d,0x51,0x6b,0x5a,0x4d,0x69,0x5a,0x4e,0x6b,0x5a,0x50,0x6d,0x5a,0x51, 0x6f,0x57,0x4d,0x6c,0x33,0x2f,0x46,0x2f,0x2d,0x44,0x15,0x17,0x1f,0x32,0x2d,0x39, 0x54,0x46,0x59,0x79,0x75,0x86,0x5a,0x62,0x86,0x4f,0x59,0x7e,0x4d,0x58,0x7c,0x4e, 0x57,0x7b,0x36,0x3c,0x52,0x10,0x11,0x17,0x10,0x10,0x16,0x0f,0x10,0x16,0x0e,0x0f, 0x14,0x0e,0x0f,0x15,0x11,0x11,0x16,0x1a,0x17,0x1e,0x23,0x1e,0x27,0x26,0x22,0x2a, 0x24,0x1f,0x28,0x20,0x1d,0x26,0x1b,0x1b,0x25,0x1e,0x21,0x2c,0x51,0x5b,0x7e,0x53, 0x53,0x77,0x58,0x54,0x77,0x58,0x54,0x77,0x5a,0x53,0x77,0x5a,0x52,0x77,0x5c,0x53, 0x77,0x5c,0x51,0x77,0x5b,0x51,0x76,0x5c,0x50,0x72,0x5a,0x4f,0x71,0x58,0x4d,0x6d, 0x55,0x49,0x69,0x50,0x45,0x62,0x4f,0x42,0x5c,0x4a,0x3e,0x54,0x44,0x3a,0x51,0x36, 0x2b,0x38,0x3a,0x2e,0x3a,0x3f,0x32,0x41,0x41,0x35,0x43,0x3e,0x32,0x40,0x3f,0x33, 0x42,0x49,0x3e,0x51,0x4b,0x45,0x5c,0x48,0x46,0x5f,0x4b,0x47,0x62,0x4d,0x47,0x60, 0x4a,0x44,0x5c,0x4e,0x4a,0x62,0x51,0x4d,0x69,0x52,0x57,0x73,0x58,0x60,0x7b,0x5e, 0x66,0x80,0x5f,0x67,0x82,0x64,0x6b,0x85,0x66,0x6e,0x87,0x62,0x6a,0x83,0x5e,0x66, 0x81,0x5a,0x62,0x7d,0x59,0x61,0x7c,0x5f,0x68,0x81,0x72,0x79,0x8f,0x79,0x80,0x94, 0x7d,0x83,0x96,0x7b,0x82,0x96,0x75,0x7c,0x92,0x6c,0x74,0x8b,0x62,0x6a,0x83,0x59, 0x62,0x7d,0x53,0x5b,0x78,0x52,0x57,0x75,0x52,0x56,0x73,0x52,0x59,0x75,0x5a,0x61, 0x7a,0x66,0x6e,0x84,0x68,0x6f,0x84,0x6b,0x72,0x86,0x66,0x6c,0x7e,0x51,0x57,0x6a, 0x39,0x3e,0x4f,0x2f,0x34,0x43,0x2f,0x33,0x40,0x2f,0x33,0x3e,0x2f,0x32,0x3c,0x31, 0x34,0x3d,0x35,0x38,0x41,0x36,0x39,0x41,0x32,0x36,0x3e,0x2d,0x30,0x39,0x30,0x34, 0x40,0x53,0x5c,0x7e,0x55,0x54,0x74,0x59,0x54,0x73,0x59,0x54,0x73,0x5a,0x55,0x75, 0x5b,0x56,0x75,0x5b,0x56,0x75,0x5c,0x56,0x75,0x5c,0x56,0x75,0x5c,0x55,0x75,0x5c, 0x55,0x75,0x5c,0x55,0x75,0x5c,0x55,0x75,0x5e,0x56,0x75,0x59,0x51,0x71,0x61,0x58, 0x7a,0x21,0x21,0x29,0x19,0x1a,0x1e,0x19,0x1a,0x1e,0x19,0x1a,0x1e,0x19,0x1a,0x1e, 0x19,0x1a,0x1d,0x16,0x18,0x1a,0x16,0x17,0x1a,0x16,0x16,0x19,0x14,0x15,0x17,0x12, 0x13,0x16,0x0f,0x10,0x12,0x0f,0x10,0x12,0x0d,0x0e,0x10,0x0b,0x0c,0x0e,0x0a,0x0b, 0x0d,0x0a,0x0a,0x0c,0x09,0x09,0x0a,0x08,0x09,0x0a,0x07,0x08,0x0a,0x07,0x07,0x09, 0x06,0x06,0x08,0x06,0x06,0x08,0x05,0x06,0x06,0x04,0x05,0x06,0x04,0x04,0x05,0x03, 0x04,0x04,0x03,0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x30,0x33,0x44,0x66,0x66,0x8b,0x4c,0x3b,0x49,0x44,0x34, 0x40,0x45,0x35,0x41,0x46,0x36,0x42,0x48,0x37,0x44,0x4a,0x39,0x47,0x4d,0x3c,0x49, 0x4c,0x3b,0x49,0x4f,0x3e,0x4c,0x51,0x3f,0x4e,0x53,0x41,0x50,0x59,0x46,0x57,0x65, 0x5c,0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x04,0x03,0x03,0x0b,0x09,0x0b,0x1e,0x17,0x1d,0x34,0x29,0x33,0x48,0x39,0x46,0x5e, 0x4a,0x5c,0x66,0x52,0x66,0x61,0x4e,0x60,0x5c,0x49,0x5b,0x52,0x40,0x4f,0x55,0x43, 0x53,0x5f,0x4c,0x5e,0x64,0x50,0x64,0x67,0x53,0x68,0x60,0x4e,0x63,0x11,0x0e,0x11, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x77,0x78, 0x7b,0x66,0x73,0x98,0x64,0x53,0x74,0x61,0x49,0x65,0x4e,0x42,0x5f,0x24,0x20,0x2f, 0xbd,0xbd,0xbd,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xf7,0xf7,0xfd,0xfd,0xfd,0xff, 0xff,0xff,0xff,0xff,0xff,0x65,0x62,0x65,0x2f,0x30,0x48,0x86,0x8e,0xa7,0x9b,0xa2, 0xb9,0x5b,0x48,0x59,0x60,0x4d,0x60,0x62,0x4e,0x62,0x68,0x53,0x68,0x08,0x06,0x08, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x1c, 0x1d,0x6b,0x76,0x9a,0x64,0x53,0x76,0x64,0x53,0x73,0x52,0x50,0x7b,0x52,0x53,0x7d, 0x52,0x55,0x80,0x52,0x57,0x82,0x52,0x5a,0x84,0x52,0x5c,0x86,0x52,0x5c,0x86,0x52, 0x5d,0x86,0x52,0x5b,0x85,0x52,0x5b,0x85,0x52,0x5a,0x84,0x52,0x55,0x80,0x52,0x53, 0x7d,0x52,0x52,0x7c,0x52,0x4f,0x7b,0x64,0x53,0x76,0x5d,0x45,0x5f,0x5c,0x66,0x89, 0x11,0x11,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x03,0x03,0x03,0x03,0x04,0x03,0x03,0x04,0x04,0x04,0x05,0x04,0x05,0x05,0x05, 0x06,0x06,0x06,0x06,0x07,0x06,0x06,0x07,0x06,0x06,0x07,0x06,0x07,0x08,0x07,0x07, 0x09,0x07,0x08,0x09,0x07,0x08,0x09,0x08,0x08,0x0a,0x08,0x09,0x0a,0x09,0x0a,0x0b, 0x09,0x0a,0x0b,0x68,0x6e,0x89,0x55,0x60,0x87,0x52,0x5d,0x84,0x52,0x54,0x7c,0x58, 0x52,0x78,0x59,0x52,0x78,0x55,0x52,0x77,0x52,0x50,0x78,0x53,0x52,0x79,0x53,0x52, 0x7a,0x54,0x55,0x7c,0x54,0x52,0x78,0x62,0x56,0x73,0x64,0x6c,0x89,0x41,0x37,0x44, 0x2f,0x31,0x36,0x39,0x3b,0x41,0x40,0x42,0x49,0x1a,0x1d,0x26,0x1a,0x1c,0x25,0x18, 0x1a,0x22,0x2c,0x29,0x34,0x33,0x2c,0x36,0x55,0x55,0x60,0x62,0x6b,0x8c,0x4a,0x47, 0x6b,0x52,0x49,0x69,0x5c,0x52,0x77,0x5d,0x52,0x77,0x5e,0x53,0x78,0x5e,0x53,0x78, 0x5e,0x53,0x78,0x5e,0x54,0x78,0x5e,0x53,0x78,0x5f,0x53,0x75,0x56,0x4d,0x6b,0x4d, 0x46,0x61,0x52,0x49,0x66,0x20,0x1e,0x28,0x27,0x24,0x30,0x33,0x2d,0x3a,0x3c,0x34, 0x41,0x3e,0x35,0x44,0x40,0x37,0x46,0x41,0x37,0x46,0x41,0x37,0x45,0x3f,0x35,0x44, 0x3b,0x32,0x3f,0x59,0x57,0x76,0x53,0x51,0x76,0x41,0x3f,0x5c,0x4b,0x45,0x62,0x5c, 0x51,0x72,0x5d,0x51,0x74,0x5e,0x53,0x75,0x5e,0x52,0x75,0x5e,0x53,0x76,0x5f,0x53, 0x76,0x7a,0x70,0x8c,0x5c,0x51,0x72,0x4b,0x41,0x5d,0x65,0x56,0x7a,0x5b,0x50,0x71, 0x11,0x10,0x16,0x21,0x1d,0x26,0x29,0x24,0x2f,0x33,0x2b,0x38,0x38,0x30,0x3e,0x3c, 0x33,0x42,0x42,0x39,0x48,0x48,0x3d,0x4c,0x48,0x3d,0x4d,0x4e,0x41,0x52,0x50,0x42, 0x53,0x50,0x42,0x53,0x4e,0x41,0x52,0x4a,0x3f,0x4f,0x43,0x3a,0x49,0x46,0x3e,0x50, 0x51,0x47,0x5b,0x3d,0x37,0x46,0x64,0x54,0x72,0x5a,0x4b,0x67,0x5a,0x4d,0x68,0x5b, 0x4d,0x69,0x5a,0x50,0x6c,0x5a,0x51,0x6f,0x43,0x3c,0x55,0x32,0x2d,0x42,0x29,0x29, 0x3b,0x10,0x12,0x17,0x47,0x3d,0x4e,0x54,0x47,0x59,0x6c,0x71,0x8c,0x51,0x5c,0x7f, 0x4c,0x55,0x7a,0x4e,0x58,0x7d,0x4f,0x58,0x7c,0x3a,0x40,0x59,0x11,0x12,0x19,0x0e, 0x0f,0x14,0x0e,0x0f,0x14,0x0d,0x0e,0x13,0x0e,0x0e,0x13,0x0e,0x0e,0x14,0x14,0x16, 0x1d,0x20,0x22,0x29,0x26,0x29,0x2e,0x26,0x29,0x30,0x26,0x29,0x32,0x2d,0x30,0x3c, 0x59,0x64,0x85,0x58,0x59,0x7c,0x5a,0x59,0x7c,0x58,0x56,0x7b,0x59,0x55,0x79,0x5a, 0x54,0x78,0x58,0x53,0x77,0x5b,0x50,0x76,0x5c,0x51,0x76,0x5c,0x51,0x77,0x5d,0x51, 0x74,0x5b,0x50,0x72,0x5a,0x4d,0x6f,0x56,0x4a,0x6b,0x54,0x47,0x63,0x4d,0x43,0x5c, 0x48,0x3e,0x55,0x3b,0x2f,0x3c,0x42,0x36,0x45,0x45,0x38,0x46,0x46,0x38,0x48,0x3d, 0x32,0x3e,0x3c,0x2f,0x3e,0x3c,0x34,0x44,0x40,0x3b,0x50,0x45,0x42,0x59,0x48,0x46, 0x5e,0x48,0x46,0x5c,0x43,0x3e,0x53,0x49,0x43,0x5a,0x4e,0x49,0x62,0x51,0x4e,0x69, 0x52,0x55,0x71,0x56,0x5e,0x7a,0x5d,0x65,0x7f,0x62,0x69,0x83,0x66,0x6e,0x86,0x64, 0x6c,0x85,0x60,0x67,0x81,0x5e,0x66,0x80,0x57,0x60,0x7a,0x59,0x61,0x7c,0x6a,0x72, 0x89,0x76,0x7e,0x92,0x79,0x80,0x94,0x7b,0x82,0x96,0x7b,0x82,0x96,0x76,0x7d,0x92, 0x6c,0x74,0x8b,0x64,0x6b,0x85,0x5a,0x62,0x7e,0x54,0x5c,0x79,0x52,0x58,0x76,0x51, 0x56,0x73,0x4f,0x56,0x72,0x54,0x5c,0x76,0x5b,0x62,0x7a,0x64,0x6b,0x81,0x64,0x6b, 0x7f,0x5e,0x64,0x77,0x4a,0x50,0x63,0x3c,0x42,0x54,0x35,0x3a,0x4b,0x35,0x3a,0x47, 0x35,0x39,0x45,0x34,0x38,0x42,0x32,0x36,0x3f,0x32,0x36,0x3f,0x32,0x36,0x3e,0x2d, 0x30,0x3a,0x2c,0x31,0x3b,0x55,0x5e,0x80,0x54,0x54,0x75,0x5a,0x56,0x75,0x5a,0x57, 0x75,0x5b,0x57,0x75,0x5d,0x58,0x76,0x5d,0x58,0x76,0x5e,0x59,0x77,0x5e,0x58,0x76, 0x5e,0x58,0x76,0x5e,0x58,0x76,0x5e,0x57,0x76,0x5e,0x56,0x75,0x5e,0x57,0x75,0x59, 0x52,0x71,0x5e,0x55,0x75,0x25,0x26,0x30,0x1a,0x1c,0x21,0x19,0x1a,0x1e,0x18,0x1a, 0x1e,0x19,0x1a,0x1e,0x18,0x1a,0x1d,0x18,0x19,0x1d,0x18,0x19,0x1c,0x1a,0x1a,0x1d, 0x1b,0x1c,0x1e,0x19,0x1a,0x1c,0x16,0x17,0x19,0x14,0x15,0x17,0x11,0x12,0x14,0x0e, 0x0f,0x12,0x0c,0x0d,0x0e,0x0a,0x0b,0x0d,0x0a,0x0a,0x0c,0x09,0x0a,0x0b,0x09,0x09, 0x0a,0x07,0x08,0x0a,0x07,0x07,0x09,0x06,0x07,0x08,0x06,0x06,0x06,0x04,0x05,0x06, 0x05,0x05,0x06,0x04,0x05,0x06,0x03,0x04,0x04,0x03,0x04,0x04,0x02,0x02,0x03,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x15,0x15,0x1d,0x58, 0x56,0x77,0x71,0x5c,0x73,0x46,0x36,0x42,0x47,0x37,0x44,0x49,0x38,0x45,0x4a,0x39, 0x47,0x4d,0x3c,0x4a,0x4f,0x3d,0x4b,0x4e,0x3c,0x4a,0x50,0x3e,0x4d,0x53,0x41,0x50, 0x54,0x41,0x51,0x6a,0x55,0x6a,0x36,0x33,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x07,0x05,0x06,0x0a,0x08,0x09,0x08, 0x06,0x08,0x05,0x04,0x05,0x03,0x02,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x24,0x24,0x24,0x94,0x9d,0xb8,0x52,0x4f,0x7a,0x56,0x3f,0x59,0x40,0x35, 0x4b,0x29,0x27,0x30,0xf3,0xf3,0xf3,0xff,0xff,0xff,0xfd,0xfd,0xfd,0xe8,0xe8,0xe8, 0xff,0xff,0xff,0xfd,0xfd,0xfd,0xf4,0xf4,0xf4,0x18,0x12,0x19,0x3b,0x3a,0x59,0x90, 0x98,0xb4,0x9a,0xa1,0xb8,0x56,0x43,0x53,0x60,0x4c,0x5f,0x62,0x4e,0x62,0x68,0x53, 0x68,0x05,0x04,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x6d,0x73,0x80,0x52,0x57,0x83,0x64,0x4d,0x6a,0x56,0x50, 0x79,0x52,0x52,0x7c,0x52,0x53,0x7d,0x52,0x55,0x80,0x52,0x57,0x82,0x52,0x57,0x83, 0x52,0x5a,0x84,0x52,0x5b,0x85,0x52,0x5a,0x84,0x52,0x5a,0x84,0x52,0x57,0x82,0x52, 0x55,0x80,0x52,0x53,0x7d,0x52,0x52,0x7c,0x52,0x4f,0x7b,0x52,0x4f,0x7a,0x5f,0x47, 0x63,0x64,0x53,0x76,0x67,0x6d,0x7d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04, 0x04,0x05,0x05,0x04,0x05,0x05,0x05,0x06,0x06,0x06,0x06,0x07,0x06,0x06,0x07,0x06, 0x07,0x08,0x06,0x07,0x08,0x07,0x07,0x09,0x07,0x08,0x09,0x08,0x09,0x0a,0x08,0x09, 0x0a,0x09,0x0a,0x0b,0x0a,0x0a,0x0b,0x69,0x6e,0x89,0x57,0x64,0x89,0x53,0x5e,0x86, 0x52,0x54,0x7c,0x58,0x54,0x78,0x57,0x52,0x78,0x55,0x52,0x78,0x52,0x50,0x78,0x53, 0x51,0x78,0x53,0x52,0x7a,0x54,0x57,0x7e,0x54,0x52,0x78,0x62,0x56,0x75,0x6d,0x75, 0x8f,0x3f,0x36,0x41,0x1d,0x1f,0x23,0x3e,0x3f,0x44,0x1e,0x20,0x26,0x1a,0x1c,0x22, 0x19,0x1b,0x22,0x17,0x19,0x1e,0x28,0x25,0x2e,0x34,0x2c,0x34,0x4b,0x48,0x52,0x6a, 0x74,0x93,0x4d,0x4d,0x72,0x4f,0x48,0x67,0x5c,0x51,0x77,0x5d,0x52,0x78,0x5e,0x53, 0x78,0x5e,0x53,0x79,0x5e,0x53,0x79,0x5e,0x53,0x78,0x5d,0x53,0x78,0x5d,0x52,0x77, 0x56,0x4d,0x6b,0x50,0x49,0x64,0x56,0x4d,0x69,0x1b,0x1b,0x23,0x1d,0x1d,0x26,0x23, 0x20,0x2b,0x2e,0x29,0x35,0x37,0x30,0x3e,0x39,0x32,0x40,0x3b,0x33,0x41,0x3b,0x33, 0x41,0x3a,0x32,0x3f,0x36,0x2f,0x3b,0x53,0x52,0x6e,0x5a,0x56,0x7b,0x46,0x42,0x60, 0x4a,0x42,0x60,0x5a,0x4f,0x6f,0x5d,0x51,0x74,0x5e,0x51,0x75,0x5e,0x52,0x75,0x5e, 0x53,0x75,0x5f,0x53,0x76,0x7a,0x70,0x8c,0x5c,0x51,0x73,0x4c,0x42,0x5e,0x60,0x53, 0x75,0x62,0x55,0x79,0x0b,0x0c,0x10,0x12,0x12,0x19,0x1a,0x18,0x20,0x22,0x20,0x29, 0x28,0x25,0x30,0x2e,0x29,0x36,0x3d,0x35,0x43,0x44,0x3a,0x48,0x44,0x3a,0x49,0x46, 0x3c,0x4b,0x4a,0x3e,0x4f,0x4b,0x3f,0x4f,0x48,0x3d,0x4e,0x43,0x3a,0x49,0x3a,0x31, 0x40,0x2a,0x26,0x33,0x54,0x4a,0x60,0x45,0x3d,0x4e,0x50,0x47,0x5d,0x5d,0x4e,0x68, 0x59,0x4b,0x65,0x5a,0x4c,0x67,0x5a,0x4d,0x69,0x5b,0x4e,0x6a,0x57,0x4d,0x6a,0x34, 0x2d,0x42,0x31,0x2c,0x42,0x1a,0x1b,0x27,0x0f,0x11,0x16,0x52,0x46,0x58,0x63,0x5d, 0x70,0x5f,0x69,0x88,0x4d,0x56,0x79,0x50,0x5c,0x7e,0x50,0x5c,0x7f,0x4f,0x59,0x7e, 0x50,0x59,0x7b,0x1d,0x20,0x2b,0x0d,0x0e,0x13,0x0c,0x0d,0x12,0x0c,0x0e,0x12,0x11, 0x12,0x16,0x28,0x2a,0x2d,0x3e,0x3e,0x41,0x43,0x44,0x46,0x3f,0x40,0x43,0x2a,0x2d, 0x35,0x6e,0x77,0x92,0x65,0x6f,0x8e,0x65,0x68,0x88,0x60,0x62,0x84,0x5a,0x5b,0x7e, 0x5a,0x59,0x7b,0x58,0x56,0x7a,0x57,0x52,0x78,0x58,0x51,0x76,0x5a,0x50,0x77,0x5c, 0x51,0x77,0x5c,0x52,0x77,0x5c,0x51,0x77,0x5d,0x51,0x73,0x5a,0x4e,0x6f,0x58,0x4b, 0x6a,0x51,0x47,0x62,0x49,0x40,0x57,0x40,0x34,0x42,0x47,0x3a,0x49,0x49,0x3b,0x4a, 0x4a,0x3c,0x4b,0x42,0x36,0x45,0x3a,0x31,0x3e,0x36,0x2f,0x3e,0x3c,0x34,0x46,0x44, 0x3e,0x52,0x48,0x43,0x5a,0x49,0x46,0x5e,0x45,0x43,0x5a,0x48,0x45,0x5c,0x4b,0x48, 0x61,0x4b,0x47,0x5f,0x4e,0x4b,0x66,0x51,0x55,0x70,0x57,0x5e,0x79,0x5e,0x66,0x80, 0x63,0x6b,0x85,0x66,0x6e,0x86,0x65,0x6d,0x85,0x61,0x68,0x82,0x5e,0x66,0x80,0x5c, 0x64,0x7e,0x64,0x6b,0x85,0x6d,0x75,0x8c,0x74,0x7b,0x91,0x76,0x7e,0x92,0x7a,0x81, 0x95,0x7a,0x82,0x96,0x75,0x7c,0x92,0x6c,0x74,0x8b,0x60,0x68,0x82,0x5a,0x62,0x7d, 0x54,0x5c,0x79,0x52,0x56,0x74,0x51,0x55,0x72,0x4f,0x53,0x70,0x4d,0x55,0x6f,0x57, 0x5f,0x77,0x60,0x68,0x7e,0x66,0x6d,0x81,0x5b,0x62,0x76,0x4a,0x51,0x64,0x3b,0x42, 0x55,0x39,0x3e,0x50,0x37,0x3c,0x4b,0x36,0x3a,0x47,0x36,0x3a,0x45,0x34,0x37,0x42, 0x32,0x36,0x3f,0x2f,0x32,0x3c,0x2c,0x2f,0x3a,0x58,0x61,0x82,0x56,0x56,0x77,0x5a, 0x57,0x75,0x5a,0x55,0x74,0x5a,0x57,0x75,0x5d,0x59,0x76,0x5e,0x59,0x77,0x5e,0x59, 0x78,0x5e,0x59,0x76,0x5e,0x59,0x77,0x5e,0x59,0x76,0x5e,0x59,0x77,0x5f,0x59,0x77, 0x5e,0x59,0x77,0x5b,0x53,0x73,0x5d,0x55,0x75,0x2c,0x2b,0x38,0x1a,0x1c,0x21,0x18, 0x1a,0x1f,0x19,0x1a,0x1f,0x17,0x18,0x1d,0x18,0x1a,0x1e,0x18,0x1a,0x1c,0x1a,0x1b, 0x1e,0x1d,0x1d,0x1f,0x1e,0x1f,0x21,0x1f,0x1f,0x21,0x1c,0x1d,0x1f,0x18,0x19,0x1b, 0x15,0x16,0x18,0x11,0x12,0x15,0x10,0x11,0x13,0x0e,0x0e,0x11,0x0d,0x0e,0x10,0x0c, 0x0d,0x0e,0x0a,0x0b,0x0e,0x0a,0x0a,0x0c,0x08,0x09,0x0a,0x08,0x08,0x0a,0x07,0x08, 0x0a,0x06,0x07,0x09,0x05,0x05,0x06,0x04,0x05,0x06,0x03,0x04,0x04,0x03,0x04,0x04, 0x03,0x03,0x04,0x03,0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x05,0x05,0x07,0x45,0x40,0x56,0x78,0x69,0x88,0x4d,0x3c,0x4a,0x49, 0x38,0x45,0x4a,0x39,0x47,0x4d,0x3c,0x4a,0x4e,0x3d,0x4b,0x50,0x3e,0x4d,0x52,0x40, 0x4f,0x54,0x42,0x51,0x55,0x43,0x53,0x59,0x46,0x57,0x6e,0x5a,0x70,0x09,0x07,0x09, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x9d,0xa1,0xaa,0x57,0x63,0x8b,0x53, 0x3f,0x56,0x2c,0x22,0x2f,0xa3,0xa2,0xa4,0xfd,0xfd,0xfd,0xff,0xff,0xff,0xf7,0xf7, 0xf7,0xf2,0xf2,0xf2,0xff,0xff,0xff,0xff,0xff,0xff,0xcc,0xcc,0xcd,0x23,0x1a,0x25, 0x43,0x40,0x64,0x84,0x8e,0xad,0x98,0xa1,0xb8,0x53,0x41,0x50,0x5f,0x4c,0x5e,0x62, 0x4e,0x62,0x68,0x53,0x68,0x04,0x03,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x24,0x24,0x25,0x69,0x74,0x98,0x64, 0x53,0x75,0x64,0x52,0x72,0x52,0x50,0x7b,0x52,0x52,0x7c,0x52,0x53,0x7d,0x52,0x55, 0x80,0x52,0x57,0x82,0x52,0x5a,0x84,0x52,0x57,0x83,0x52,0x5a,0x84,0x52,0x57,0x83, 0x52,0x55,0x81,0x52,0x55,0x80,0x52,0x53,0x7d,0x52,0x52,0x7c,0x52,0x4f,0x7b,0x52, 0x4f,0x7a,0x5e,0x53,0x79,0x56,0x3e,0x57,0x53,0x5e,0x88,0x45,0x46,0x49,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x02,0x03, 0x03,0x03,0x03,0x04,0x04,0x05,0x05,0x04,0x05,0x05,0x05,0x06,0x06,0x05,0x06,0x06, 0x06,0x06,0x07,0x06,0x06,0x07,0x07,0x07,0x09,0x07,0x07,0x09,0x08,0x08,0x0a,0x07, 0x08,0x09,0x08,0x09,0x0a,0x09,0x0a,0x0b,0x0a,0x0a,0x0b,0x6e,0x72,0x89,0x57,0x63, 0x89,0x53,0x5d,0x86,0x52,0x54,0x7c,0x5a,0x54,0x78,0x59,0x54,0x78,0x56,0x52,0x78, 0x52,0x51,0x78,0x53,0x51,0x78,0x53,0x52,0x79,0x53,0x55,0x7c,0x54,0x52,0x78,0x5c, 0x55,0x77,0x76,0x7c,0x93,0x40,0x36,0x41,0x17,0x19,0x1e,0x18,0x1a,0x1e,0x18,0x1a, 0x1e,0x18,0x19,0x1e,0x18,0x19,0x1e,0x16,0x17,0x1b,0x24,0x21,0x28,0x35,0x2c,0x34, 0x3a,0x33,0x3b,0x73,0x7c,0x9a,0x4f,0x53,0x7b,0x4b,0x45,0x63,0x5b,0x51,0x76,0x5d, 0x52,0x78,0x5e,0x53,0x78,0x5e,0x53,0x79,0x5d,0x52,0x79,0x5e,0x53,0x78,0x5e,0x54, 0x78,0x5d,0x53,0x78,0x54,0x4c,0x6b,0x52,0x49,0x65,0x5c,0x52,0x70,0x18,0x18,0x1e, 0x1c,0x1b,0x22,0x1d,0x1d,0x25,0x24,0x22,0x2d,0x2a,0x27,0x33,0x31,0x2b,0x38,0x34, 0x2d,0x3b,0x35,0x2e,0x3b,0x34,0x2e,0x3a,0x31,0x2a,0x37,0x4b,0x49,0x63,0x59,0x57, 0x7c,0x47,0x42,0x61,0x47,0x40,0x5f,0x58,0x4e,0x6e,0x5c,0x51,0x73,0x5e,0x52,0x75, 0x5e,0x52,0x75,0x5e,0x53,0x75,0x5f,0x53,0x75,0x78,0x6e,0x8b,0x66,0x5d,0x7c,0x4f, 0x45,0x61,0x5d,0x50,0x71,0x6f,0x60,0x88,0x0a,0x0b,0x0e,0x0d,0x0f,0x13,0x12,0x14, 0x19,0x1a,0x19,0x21,0x21,0x21,0x29,0x28,0x25,0x2f,0x2d,0x29,0x36,0x32,0x2d,0x3a, 0x36,0x30,0x3e,0x3b,0x34,0x42,0x3d,0x34,0x43,0x3b,0x33,0x42,0x37,0x30,0x3f,0x2e, 0x2a,0x38,0x24,0x23,0x2f,0x1d,0x1d,0x27,0x22,0x24,0x30,0x56,0x4c,0x60,0x40,0x38, 0x47,0x66,0x54,0x72,0x59,0x4b,0x66,0x5a,0x4b,0x65,0x5a,0x4b,0x66,0x5a,0x4b,0x67, 0x5b,0x4f,0x6c,0x3e,0x35,0x4d,0x32,0x2c,0x42,0x2f,0x2b,0x41,0x0f,0x11,0x16,0x2c, 0x28,0x33,0x53,0x45,0x58,0x6f,0x71,0x8a,0x57,0x61,0x81,0x51,0x5b,0x7e,0x55,0x5f, 0x82,0x52,0x5d,0x81,0x50,0x5c,0x80,0x55,0x60,0x83,0x3d,0x44,0x5a,0x0f,0x11,0x17, 0x0d,0x0d,0x12,0x12,0x11,0x17,0x1e,0x22,0x2a,0x38,0x3a,0x40,0x42,0x43,0x45,0x3e, 0x3e,0x41,0x39,0x3b,0x42,0x70,0x79,0x94,0x79,0x81,0x9c,0x7c,0x7f,0x9a,0x71,0x74, 0x90,0x5e,0x60,0x81,0x5c,0x5d,0x80,0x59,0x5a,0x7d,0x57,0x56,0x7a,0x55,0x51,0x76, 0x58,0x51,0x75,0x5a,0x51,0x77,0x5a,0x52,0x78,0x5d,0x54,0x78,0x5c,0x52,0x77,0x58, 0x50,0x72,0x56,0x4a,0x68,0x54,0x4a,0x66,0x49,0x41,0x58,0x43,0x39,0x49,0x4c,0x40, 0x51,0x4c,0x3e,0x4e,0x4a,0x3d,0x4d,0x4a,0x3c,0x4c,0x40,0x36,0x44,0x38,0x31,0x40, 0x3a,0x32,0x43,0x3e,0x37,0x48,0x46,0x3f,0x54,0x4b,0x46,0x5f,0x4c,0x4c,0x63,0x4a, 0x48,0x61,0x49,0x46,0x5d,0x47,0x44,0x5a,0x49,0x46,0x5f,0x4e,0x50,0x69,0x51,0x55, 0x6f,0x56,0x5c,0x76,0x5e,0x66,0x80,0x64,0x6d,0x85,0x65,0x6d,0x86,0x64,0x6c,0x85, 0x65,0x6d,0x86,0x65,0x6d,0x86,0x63,0x6a,0x84,0x66,0x6e,0x87,0x69,0x71,0x8a,0x6e, 0x76,0x8d,0x73,0x7a,0x90,0x79,0x80,0x94,0x77,0x7e,0x93,0x74,0x7b,0x91,0x6a,0x72, 0x8a,0x5f,0x67,0x82,0x59,0x62,0x7d,0x53,0x5b,0x79,0x52,0x58,0x76,0x50,0x53,0x71, 0x4e,0x51,0x6d,0x4d,0x54,0x6e,0x58,0x5f,0x78,0x62,0x69,0x7f,0x60,0x67,0x7d,0x55, 0x5b,0x71,0x47,0x4e,0x63,0x40,0x46,0x5a,0x3a,0x41,0x53,0x36,0x3c,0x4c,0x34,0x39, 0x47,0x36,0x3a,0x47,0x33,0x37,0x42,0x32,0x36,0x41,0x2e,0x32,0x3d,0x57,0x61,0x81, 0x5a,0x5a,0x79,0x5d,0x59,0x77,0x5d,0x59,0x77,0x5d,0x59,0x76,0x5e,0x59,0x77,0x5e, 0x59,0x78,0x5e,0x59,0x78,0x5e,0x59,0x78,0x5e,0x59,0x77,0x5e,0x59,0x77,0x5f,0x59, 0x78,0x60,0x59,0x78,0x5f,0x59,0x78,0x5d,0x57,0x75,0x5c,0x56,0x74,0x33,0x32,0x40, 0x1d,0x1f,0x25,0x1b,0x1d,0x22,0x1a,0x1b,0x21,0x1a,0x1b,0x20,0x18,0x1a,0x1e,0x1a, 0x1a,0x1f,0x1b,0x1c,0x1f,0x1e,0x1f,0x21,0x22,0x22,0x24,0x22,0x23,0x25,0x22,0x22, 0x24,0x1e,0x1e,0x21,0x1a,0x1a,0x1d,0x15,0x16,0x1a,0x12,0x13,0x16,0x12,0x12,0x15, 0x11,0x12,0x14,0x0f,0x10,0x12,0x0e,0x0e,0x10,0x0c,0x0c,0x0e,0x0a,0x0b,0x0d,0x09, 0x0a,0x0c,0x08,0x09,0x0a,0x07,0x07,0x09,0x06,0x07,0x09,0x05,0x06,0x07,0x05,0x05, 0x06,0x04,0x04,0x05,0x04,0x04,0x05,0x03,0x04,0x05,0x04,0x04,0x05,0x02,0x03,0x04, 0x02,0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x03,0x02, 0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02, 0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x25,0x23,0x2f, 0x6c,0x63,0x82,0x6c,0x57,0x6d,0x4a,0x39,0x47,0x4d,0x3c,0x4a,0x4e,0x3d,0x4b,0x50, 0x3e,0x4d,0x52,0x40,0x4f,0x54,0x42,0x51,0x55,0x43,0x53,0x56,0x43,0x53,0x62,0x4e, 0x61,0x5e,0x4c,0x5f,0x13,0x0f,0x13,0x0b,0x08,0x0a,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5a,0x5b,0x5d, 0x6e,0x79,0x9a,0x46,0x3a,0x52,0x1a,0x13,0x1b,0xef,0xef,0xef,0xff,0xff,0xff,0xff, 0xff,0xff,0xda,0xda,0xda,0xfd,0xfd,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0x75,0x75, 0x78,0x35,0x28,0x38,0x49,0x48,0x6e,0x81,0x8c,0xab,0x9d,0xa5,0xbb,0x51,0x3f,0x4e, 0x5f,0x4c,0x5e,0x62,0x4e,0x62,0x67,0x53,0x67,0x02,0x02,0x02,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x68,0x6d,0x7c,0x52,0x53,0x7e,0x64,0x4c,0x69,0x55,0x50,0x79,0x52,0x52,0x7c,0x52, 0x53,0x7d,0x52,0x53,0x7e,0x52,0x55,0x80,0x52,0x57,0x82,0x52,0x57,0x82,0x52,0x55, 0x81,0x52,0x55,0x81,0x52,0x55,0x80,0x52,0x53,0x7d,0x52,0x52,0x7c,0x52,0x50,0x7b, 0x52,0x4f,0x7b,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x60,0x48,0x64,0x53,0x3c,0x54,0x60, 0x6c,0x8e,0x1d,0x1d,0x1d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x03,0x02,0x03,0x03,0x02,0x03,0x03,0x04,0x04,0x05,0x04,0x05,0x05,0x04,0x05, 0x05,0x05,0x06,0x06,0x06,0x06,0x07,0x06,0x06,0x07,0x06,0x06,0x07,0x06,0x07,0x08, 0x07,0x08,0x09,0x07,0x08,0x09,0x08,0x09,0x0a,0x09,0x0a,0x0b,0x0a,0x0a,0x0b,0x6e, 0x72,0x89,0x5a,0x64,0x8b,0x53,0x5f,0x86,0x52,0x55,0x7e,0x59,0x54,0x78,0x59,0x53, 0x77,0x57,0x51,0x78,0x54,0x51,0x77,0x53,0x51,0x78,0x53,0x52,0x7a,0x54,0x55,0x7c, 0x54,0x52,0x79,0x55,0x53,0x77,0x83,0x88,0x9b,0x3d,0x33,0x3c,0x1c,0x1c,0x20,0x16, 0x17,0x1b,0x16,0x17,0x1b,0x16,0x17,0x1b,0x16,0x18,0x1c,0x15,0x16,0x1a,0x1e,0x1e, 0x22,0x3a,0x2f,0x39,0x34,0x2d,0x34,0x75,0x7e,0x9a,0x51,0x5c,0x83,0x4b,0x44,0x63, 0x5a,0x50,0x74,0x5d,0x52,0x78,0x5e,0x53,0x78,0x5d,0x53,0x79,0x5e,0x53,0x79,0x5d, 0x52,0x79,0x5d,0x52,0x78,0x5e,0x53,0x78,0x54,0x4b,0x6b,0x52,0x49,0x68,0x60,0x54, 0x77,0x11,0x11,0x15,0x17,0x17,0x1b,0x1e,0x1c,0x23,0x23,0x21,0x29,0x23,0x21,0x2b, 0x27,0x23,0x2e,0x2a,0x26,0x31,0x2d,0x28,0x34,0x2d,0x28,0x33,0x2c,0x27,0x31,0x43, 0x42,0x5a,0x57,0x57,0x7b,0x44,0x40,0x5e,0x46,0x3f,0x5c,0x56,0x4d,0x6c,0x5c,0x51, 0x72,0x5d,0x51,0x74,0x5e,0x52,0x75,0x5f,0x52,0x75,0x5f,0x52,0x76,0x76,0x6b,0x89, 0x84,0x7b,0x95,0x61,0x58,0x72,0x58,0x4c,0x6c,0x7d,0x6a,0x99,0x15,0x12,0x18,0x19, 0x16,0x1e,0x21,0x1e,0x27,0x22,0x20,0x29,0x25,0x23,0x2b,0x28,0x25,0x2f,0x2a,0x28, 0x31,0x2b,0x28,0x32,0x2b,0x28,0x33,0x2d,0x2a,0x36,0x2f,0x2b,0x39,0x31,0x2d,0x3b, 0x2d,0x29,0x36,0x2a,0x27,0x33,0x26,0x25,0x2f,0x21,0x21,0x2a,0x1a,0x1c,0x24,0x51, 0x49,0x5d,0x49,0x40,0x50,0x5a,0x4e,0x67,0x6a,0x56,0x76,0x59,0x4a,0x66,0x59,0x4a, 0x64,0x5a,0x4a,0x66,0x5b,0x4c,0x68,0x5a,0x4f,0x6c,0x37,0x2f,0x46,0x31,0x2c,0x41, 0x23,0x23,0x33,0x0e,0x10,0x15,0x49,0x3c,0x4d,0x5a,0x4f,0x62,0x82,0x88,0xa0,0x55, 0x5f,0x7e,0x57,0x61,0x85,0x56,0x61,0x85,0x55,0x60,0x85,0x56,0x61,0x85,0x58,0x64, 0x86,0x5f,0x6a,0x88,0x47,0x4c,0x65,0x23,0x1f,0x28,0x1f,0x1a,0x20,0x23,0x25,0x32, 0x52,0x54,0x5b,0x7b,0x80,0x8d,0x76,0x7e,0x98,0x7a,0x81,0x9b,0x88,0x8e,0xa5,0x88, 0x8e,0xa4,0x78,0x7b,0x96,0x63,0x67,0x86,0x60,0x63,0x83,0x60,0x61,0x82,0x5a,0x5a, 0x7d,0x54,0x51,0x78,0x53,0x50,0x76,0x55,0x50,0x77,0x5a,0x54,0x78,0x5d,0x54,0x79, 0x5e,0x54,0x79,0x5a,0x52,0x74,0x54,0x49,0x67,0x53,0x4a,0x69,0x4a,0x44,0x5c,0x47, 0x3e,0x50,0x4e,0x43,0x55,0x4f,0x42,0x52,0x4c,0x3e,0x4e,0x4b,0x3d,0x4c,0x47,0x3b, 0x4d,0x3e,0x35,0x47,0x3a,0x33,0x44,0x3d,0x34,0x44,0x41,0x39,0x4a,0x4a,0x42,0x57, 0x4b,0x4a,0x62,0x4b,0x4c,0x62,0x49,0x49,0x5f,0x43,0x44,0x5a,0x48,0x4b,0x62,0x4b, 0x4f,0x69,0x51,0x52,0x6d,0x51,0x54,0x6e,0x53,0x5a,0x74,0x5e,0x66,0x7f,0x66,0x6e, 0x86,0x69,0x71,0x89,0x67,0x6f,0x88,0x67,0x6f,0x88,0x64,0x6c,0x85,0x62,0x6a,0x83, 0x64,0x6b,0x85,0x68,0x70,0x89,0x6b,0x73,0x8a,0x72,0x79,0x8f,0x77,0x7e,0x93,0x79, 0x80,0x94,0x6f,0x77,0x8e,0x68,0x70,0x89,0x5e,0x66,0x80,0x56,0x5f,0x7b,0x55,0x5d, 0x79,0x52,0x57,0x74,0x50,0x53,0x71,0x4e,0x53,0x6e,0x51,0x58,0x73,0x5a,0x62,0x7b, 0x62,0x6a,0x80,0x5c,0x64,0x7a,0x55,0x5d,0x72,0x53,0x5a,0x6e,0x4c,0x52,0x66,0x45, 0x4b,0x5e,0x3e,0x45,0x56,0x39,0x3e,0x4e,0x36,0x3a,0x48,0x33,0x37,0x44,0x32,0x36, 0x41,0x58,0x5f,0x7d,0x5d,0x5c,0x7a,0x5e,0x5b,0x79,0x5f,0x5c,0x79,0x5f,0x5c,0x79, 0x5f,0x5b,0x78,0x5e,0x5b,0x79,0x5e,0x5a,0x78,0x5f,0x5a,0x78,0x5f,0x5b,0x78,0x5f, 0x5b,0x78,0x5f,0x5a,0x78,0x5f,0x5a,0x79,0x60,0x5b,0x79,0x5d,0x58,0x75,0x5c,0x56, 0x74,0x38,0x37,0x47,0x1f,0x22,0x28,0x1e,0x20,0x26,0x1e,0x20,0x26,0x1c,0x1e,0x23, 0x1a,0x1c,0x21,0x1a,0x1b,0x20,0x1d,0x1e,0x22,0x1e,0x1f,0x22,0x22,0x23,0x26,0x23, 0x24,0x26,0x23,0x23,0x26,0x21,0x22,0x24,0x1b,0x1d,0x1f,0x17,0x18,0x1c,0x16,0x16, 0x1a,0x16,0x17,0x1a,0x15,0x16,0x19,0x14,0x15,0x17,0x11,0x12,0x14,0x0e,0x0f,0x12, 0x0d,0x0e,0x10,0x0a,0x0b,0x0d,0x09,0x0a,0x0c,0x08,0x09,0x0a,0x08,0x09,0x0a,0x07, 0x07,0x09,0x06,0x06,0x07,0x05,0x06,0x06,0x06,0x06,0x07,0x04,0x05,0x06,0x04,0x05, 0x06,0x04,0x05,0x06,0x03,0x04,0x05,0x03,0x04,0x05,0x03,0x03,0x04,0x03,0x03,0x04, 0x02,0x02,0x04,0x03,0x03,0x04,0x02,0x02,0x03,0x02,0x03,0x04,0x02,0x03,0x04,0x02, 0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x02,0x03,0x04,0x02,0x03,0x04,0x02,0x03, 0x04,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x0e,0x0d,0x12,0x57,0x51,0x6b,0x78,0x67,0x83,0x4e,0x3c,0x4a, 0x4e,0x3d,0x4b,0x51,0x3f,0x4e,0x52,0x40,0x4f,0x54,0x42,0x51,0x55,0x43,0x53,0x56, 0x43,0x53,0x58,0x45,0x56,0x53,0x41,0x50,0x40,0x31,0x3b,0x49,0x38,0x46,0x45,0x37, 0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x0c,0x0c,0x0c,0x8b,0x92,0xa3,0x2a,0x29,0x3f,0x86,0x84,0x86,0xfd,0xfd,0xfd, 0xff,0xff,0xff,0xf7,0xf7,0xf7,0xd0,0xd0,0xd0,0xfd,0xfd,0xfd,0xff,0xff,0xff,0xf7, 0xf7,0xf7,0x1b,0x1a,0x24,0x46,0x37,0x4d,0x4f,0x4d,0x76,0x7d,0x89,0xa9,0xa0,0xa6, 0xbc,0x51,0x3f,0x4e,0x60,0x4c,0x5f,0x62,0x4e,0x62,0x68,0x53,0x68,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x22,0x23,0x24,0x63,0x6e,0x93,0x63,0x53,0x77,0x64,0x53,0x75, 0x52,0x50,0x7b,0x52,0x52,0x7c,0x52,0x53,0x7d,0x52,0x53,0x7e,0x52,0x54,0x7e,0x52, 0x55,0x80,0x52,0x55,0x80,0x52,0x54,0x7e,0x52,0x53,0x7e,0x52,0x52,0x7d,0x52,0x52, 0x7c,0x52,0x50,0x7b,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x5c,0x52,0x79, 0x50,0x39,0x52,0x63,0x4b,0x67,0x6a,0x71,0x87,0x03,0x03,0x03,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x03,0x03,0x03,0x03,0x04,0x03, 0x03,0x04,0x04,0x05,0x05,0x05,0x05,0x06,0x05,0x06,0x06,0x06,0x06,0x07,0x06,0x06, 0x07,0x06,0x07,0x08,0x06,0x07,0x08,0x07,0x08,0x09,0x08,0x08,0x0a,0x09,0x0a,0x0b, 0x0a,0x0a,0x0b,0x71,0x74,0x8c,0x5b,0x64,0x8b,0x54,0x5f,0x86,0x52,0x57,0x80,0x59, 0x53,0x78,0x59,0x53,0x77,0x55,0x51,0x77,0x53,0x51,0x79,0x52,0x50,0x78,0x53,0x52, 0x7a,0x53,0x56,0x7d,0x53,0x54,0x7a,0x53,0x51,0x79,0x8f,0x93,0xa3,0x3c,0x32,0x3b, 0x1f,0x1d,0x23,0x14,0x16,0x19,0x15,0x16,0x1a,0x15,0x16,0x1a,0x15,0x16,0x1a,0x13, 0x15,0x18,0x19,0x1a,0x1e,0x3b,0x30,0x3a,0x30,0x28,0x2f,0x79,0x80,0x97,0x54,0x60, 0x85,0x4d,0x47,0x67,0x57,0x4f,0x70,0x5e,0x53,0x78,0x5e,0x53,0x78,0x5b,0x52,0x79, 0x5d,0x53,0x79,0x5a,0x52,0x79,0x5c,0x52,0x78,0x5d,0x53,0x79,0x52,0x49,0x69,0x53, 0x4b,0x6b,0x5c,0x53,0x77,0x1a,0x19,0x1f,0x0f,0x10,0x13,0x17,0x18,0x1c,0x21,0x1f, 0x26,0x22,0x20,0x28,0x22,0x20,0x28,0x21,0x1f,0x28,0x22,0x1f,0x29,0x22,0x1f,0x28, 0x22,0x1f,0x28,0x36,0x37,0x4a,0x53,0x58,0x7e,0x41,0x3e,0x5c,0x44,0x3f,0x5b,0x56, 0x4c,0x6b,0x5c,0x51,0x73,0x5e,0x51,0x75,0x5e,0x53,0x76,0x5f,0x52,0x75,0x61,0x55, 0x78,0x74,0x69,0x88,0x71,0x66,0x84,0x62,0x58,0x73,0x55,0x48,0x67,0x7e,0x6b,0x9b, 0x16,0x13,0x19,0x28,0x22,0x2b,0x2e,0x27,0x32,0x2a,0x25,0x2f,0x26,0x22,0x2b,0x27, 0x23,0x2e,0x28,0x24,0x2f,0x28,0x25,0x30,0x28,0x26,0x30,0x29,0x28,0x32,0x2b,0x27, 0x34,0x2e,0x2b,0x38,0x31,0x2c,0x38,0x2e,0x29,0x37,0x2c,0x28,0x34,0x2a,0x26,0x31, 0x21,0x21,0x2b,0x21,0x22,0x2d,0x54,0x48,0x5c,0x42,0x39,0x49,0x79,0x62,0x84,0x5d, 0x4c,0x68,0x59,0x4a,0x65,0x5a,0x4a,0x65,0x5a,0x4b,0x67,0x5b,0x4d,0x69,0x53,0x49, 0x65,0x33,0x2c,0x42,0x30,0x2b,0x42,0x13,0x14,0x1b,0x19,0x18,0x1f,0x51,0x44,0x56, 0x85,0x82,0x93,0x69,0x73,0x90,0x54,0x5f,0x7f,0x58,0x64,0x87,0x58,0x64,0x87,0x5b, 0x65,0x89,0x5b,0x66,0x88,0x61,0x6a,0x8c,0x59,0x62,0x85,0x55,0x59,0x7a,0x4e,0x50, 0x6d,0x4d,0x52,0x6e,0x68,0x71,0x8c,0x7e,0x87,0xa0,0x6a,0x73,0x91,0x74,0x7d,0x96, 0x89,0x8f,0xa6,0x8d,0x93,0xa9,0x77,0x7e,0x97,0x66,0x6a,0x88,0x64,0x67,0x86,0x64, 0x67,0x86,0x5e,0x5f,0x81,0x54,0x54,0x77,0x51,0x4f,0x75,0x54,0x51,0x77,0x59,0x54, 0x7a,0x5d,0x58,0x7c,0x5e,0x58,0x7b,0x5a,0x54,0x77,0x50,0x4b,0x6c,0x4c,0x4a,0x6b, 0x46,0x42,0x5b,0x45,0x3c,0x4d,0x50,0x43,0x55,0x4c,0x3f,0x50,0x46,0x38,0x48,0x4a, 0x3c,0x4d,0x4a,0x3e,0x4e,0x44,0x3a,0x4a,0x3d,0x33,0x43,0x3c,0x32,0x42,0x3c,0x34, 0x45,0x41,0x3a,0x4a,0x49,0x46,0x5b,0x51,0x50,0x68,0x56,0x56,0x6e,0x53,0x56,0x6d, 0x58,0x5d,0x76,0x5a,0x60,0x7a,0x56,0x5b,0x76,0x51,0x55,0x70,0x51,0x53,0x6e,0x56, 0x5a,0x75,0x60,0x66,0x7e,0x66,0x6e,0x86,0x68,0x70,0x89,0x67,0x6f,0x88,0x60,0x67, 0x82,0x5f,0x67,0x82,0x64,0x6b,0x85,0x68,0x70,0x89,0x68,0x70,0x89,0x68,0x70,0x88, 0x6e,0x76,0x8d,0x75,0x7c,0x92,0x74,0x7b,0x91,0x6e,0x76,0x8d,0x66,0x6e,0x87,0x5d, 0x66,0x80,0x58,0x60,0x7c,0x55,0x5d,0x79,0x52,0x58,0x75,0x51,0x55,0x72,0x50,0x56, 0x72,0x54,0x5c,0x77,0x5d,0x66,0x7e,0x60,0x68,0x7f,0x5d,0x64,0x7c,0x5e,0x65,0x7b, 0x5b,0x62,0x77,0x59,0x5f,0x73,0x51,0x58,0x6b,0x41,0x47,0x5a,0x38,0x3e,0x4e,0x36, 0x3b,0x4a,0x36,0x3b,0x48,0x57,0x60,0x7a,0x67,0x65,0x82,0x6d,0x69,0x84,0x66,0x62, 0x7e,0x61,0x5e,0x7a,0x60,0x5d,0x79,0x60,0x5c,0x79,0x60,0x5c,0x79,0x60,0x5c,0x79, 0x61,0x5d,0x79,0x60,0x5c,0x79,0x60,0x5c,0x79,0x61,0x5c,0x79,0x60,0x5b,0x79,0x5f, 0x59,0x77,0x5b,0x56,0x74,0x3e,0x3d,0x4e,0x22,0x24,0x2b,0x22,0x24,0x2a,0x20,0x22, 0x29,0x1e,0x20,0x26,0x1d,0x1e,0x24,0x1e,0x1f,0x24,0x1e,0x1f,0x24,0x1e,0x20,0x24, 0x21,0x22,0x26,0x22,0x24,0x26,0x21,0x22,0x25,0x21,0x22,0x25,0x1d,0x1e,0x21,0x19, 0x1a,0x1e,0x19,0x1a,0x1e,0x1a,0x1b,0x1e,0x1a,0x1b,0x1e,0x19,0x1a,0x1c,0x15,0x16, 0x18,0x12,0x12,0x15,0x0e,0x0f,0x12,0x0c,0x0d,0x10,0x0b,0x0c,0x0e,0x0a,0x0b,0x0e, 0x0a,0x0a,0x0d,0x08,0x09,0x0a,0x08,0x08,0x0a,0x07,0x08,0x0a,0x06,0x07,0x09,0x06, 0x06,0x08,0x06,0x06,0x08,0x05,0x06,0x07,0x04,0x05,0x06,0x04,0x04,0x06,0x04,0x05, 0x06,0x04,0x04,0x06,0x03,0x03,0x05,0x04,0x04,0x06,0x04,0x04,0x06,0x04,0x04,0x06, 0x04,0x04,0x06,0x04,0x04,0x06,0x04,0x04,0x06,0x04,0x04,0x06,0x04,0x04,0x06,0x03, 0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x02,0x03,0x04,0x02,0x03,0x04,0x02,0x02, 0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x39,0x35, 0x46,0x76,0x68,0x87,0x6b,0x56,0x6c,0x50,0x3f,0x4d,0x54,0x41,0x51,0x54,0x42,0x51, 0x56,0x43,0x53,0x57,0x44,0x55,0x54,0x42,0x51,0x38,0x2a,0x33,0x3c,0x2d,0x37,0x3a, 0x2b,0x35,0x63,0x4f,0x63,0x83,0x83,0x86,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5f,0x60,0x64,0x1d,0x21,0x2e,0xe2,0xe1, 0xe2,0xff,0xff,0xff,0xfd,0xfd,0xfd,0xce,0xce,0xce,0xed,0xed,0xed,0xff,0xff,0xff, 0xff,0xff,0xff,0xd7,0xd7,0xd7,0x1d,0x1c,0x2b,0x50,0x40,0x5a,0x57,0x50,0x79,0x80, 0x8a,0xaa,0xb2,0xb8,0xc9,0x50,0x3f,0x4d,0x5f,0x4b,0x5d,0x62,0x4e,0x62,0x59,0x47, 0x59,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6b,0x70,0x7e,0x52,0x50, 0x7c,0x64,0x4e,0x6d,0x52,0x4f,0x7a,0x52,0x50,0x7b,0x52,0x52,0x7c,0x52,0x52,0x7c, 0x52,0x53,0x7d,0x52,0x53,0x7d,0x52,0x53,0x7d,0x52,0x53,0x7d,0x52,0x52,0x7d,0x52, 0x52,0x7c,0x52,0x50,0x7b,0x52,0x4f,0x7b,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f, 0x7a,0x55,0x50,0x79,0x64,0x53,0x76,0x4c,0x35,0x4b,0x54,0x50,0x79,0x66,0x69,0x70, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x03, 0x02,0x03,0x03,0x03,0x03,0x04,0x03,0x03,0x04,0x04,0x05,0x05,0x05,0x05,0x06,0x05, 0x06,0x06,0x06,0x06,0x07,0x06,0x06,0x07,0x07,0x07,0x09,0x07,0x08,0x09,0x08,0x09, 0x0a,0x08,0x08,0x0a,0x08,0x09,0x0a,0x75,0x78,0x8d,0x5b,0x65,0x8c,0x55,0x60,0x87, 0x52,0x5a,0x82,0x57,0x51,0x77,0x59,0x53,0x77,0x55,0x51,0x77,0x52,0x50,0x78,0x52, 0x51,0x78,0x53,0x53,0x7b,0x52,0x55,0x7c,0x53,0x54,0x7b,0x54,0x56,0x7d,0x97,0x9b, 0xa9,0x38,0x2f,0x38,0x29,0x24,0x2c,0x13,0x14,0x17,0x12,0x13,0x16,0x13,0x14,0x18, 0x12,0x14,0x17,0x12,0x12,0x16,0x15,0x15,0x19,0x3a,0x2f,0x39,0x29,0x21,0x26,0x78, 0x7c,0x91,0x58,0x63,0x87,0x4d,0x4a,0x6d,0x56,0x4d,0x6e,0x5e,0x53,0x78,0x5d,0x53, 0x78,0x5b,0x52,0x79,0x5b,0x52,0x79,0x5b,0x52,0x79,0x5b,0x52,0x79,0x5c,0x53,0x78, 0x52,0x49,0x69,0x53,0x4a,0x6a,0x5d,0x54,0x77,0x21,0x1e,0x27,0x0d,0x0e,0x10,0x11, 0x11,0x15,0x19,0x18,0x1d,0x1e,0x1d,0x23,0x1f,0x1d,0x24,0x20,0x1d,0x25,0x1f,0x1d, 0x25,0x1f,0x1d,0x24,0x1e,0x1c,0x23,0x2c,0x2d,0x3c,0x55,0x5b,0x83,0x44,0x42,0x62, 0x46,0x41,0x5c,0x56,0x4c,0x6c,0x5d,0x51,0x73,0x5e,0x52,0x75,0x5e,0x53,0x76,0x5f, 0x52,0x75,0x6a,0x5e,0x7f,0x70,0x64,0x84,0x5f,0x53,0x76,0x54,0x49,0x68,0x51,0x47, 0x63,0x7d,0x6c,0x99,0x1b,0x17,0x1e,0x21,0x1d,0x25,0x2b,0x25,0x2f,0x2e,0x27,0x32, 0x28,0x24,0x2f,0x26,0x22,0x2c,0x29,0x24,0x2f,0x2b,0x26,0x32,0x2d,0x28,0x34,0x2f, 0x2a,0x37,0x36,0x30,0x3d,0x39,0x31,0x40,0x39,0x31,0x3f,0x38,0x31,0x3e,0x36,0x2f, 0x3c,0x34,0x2d,0x3a,0x2e,0x29,0x35,0x1c,0x1b,0x25,0x4a,0x41,0x54,0x49,0x3f,0x4f, 0x66,0x56,0x74,0x64,0x51,0x70,0x58,0x49,0x64,0x59,0x4a,0x64,0x5a,0x49,0x66,0x5b, 0x4c,0x68,0x5b,0x4f,0x6c,0x3a,0x33,0x4a,0x31,0x2b,0x40,0x27,0x26,0x3b,0x0e,0x0f, 0x14,0x2c,0x26,0x31,0x51,0x44,0x57,0xa9,0xac,0xb9,0x4f,0x57,0x75,0x57,0x63,0x86, 0x5b,0x65,0x89,0x5e,0x69,0x8c,0x60,0x6b,0x8d,0x60,0x6a,0x8d,0x5c,0x66,0x88,0x58, 0x61,0x83,0x55,0x5d,0x7b,0x54,0x5a,0x7a,0x58,0x5c,0x7c,0x59,0x60,0x82,0x57,0x60, 0x82,0x78,0x80,0x9a,0x90,0x96,0xab,0x8f,0x96,0xaa,0x79,0x80,0x9a,0x67,0x6f,0x8c, 0x64,0x6a,0x88,0x69,0x6e,0x8b,0x63,0x65,0x84,0x58,0x58,0x7a,0x52,0x51,0x75,0x54, 0x53,0x78,0x5a,0x58,0x7c,0x5d,0x5a,0x7e,0x5e,0x5b,0x7e,0x5d,0x59,0x7a,0x53,0x51, 0x70,0x4d,0x4e,0x70,0x41,0x3f,0x58,0x46,0x3d,0x4e,0x41,0x38,0x48,0x4b,0x3f,0x50, 0x4d,0x42,0x52,0x48,0x3d,0x4d,0x47,0x3d,0x4d,0x47,0x3d,0x50,0x43,0x3a,0x4a,0x3d, 0x33,0x43,0x3b,0x33,0x42,0x3e,0x36,0x47,0x42,0x3d,0x50,0x4a,0x49,0x5f,0x53,0x54, 0x6a,0x56,0x58,0x6f,0x5a,0x5e,0x75,0x5b,0x61,0x7a,0x5d,0x65,0x7e,0x5c,0x62,0x7d, 0x53,0x59,0x74,0x53,0x57,0x71,0x56,0x5b,0x73,0x5e,0x65,0x7f,0x63,0x6b,0x85,0x5e, 0x67,0x82,0x60,0x68,0x82,0x65,0x6c,0x86,0x67,0x6f,0x88,0x69,0x71,0x89,0x66,0x6d, 0x86,0x62,0x6a,0x83,0x64,0x6b,0x85,0x6c,0x74,0x8b,0x72,0x79,0x8f,0x72,0x7a,0x90, 0x6e,0x76,0x8d,0x68,0x70,0x88,0x60,0x69,0x82,0x5a,0x62,0x7d,0x55,0x5e,0x7a,0x52, 0x59,0x76,0x52,0x57,0x75,0x52,0x5a,0x76,0x56,0x5f,0x7a,0x5b,0x63,0x7e,0x5b,0x63, 0x7d,0x5a,0x62,0x7a,0x5a,0x62,0x7a,0x5e,0x66,0x7c,0x5a,0x62,0x76,0x4e,0x55,0x69, 0x3f,0x45,0x58,0x3b,0x40,0x52,0x3c,0x42,0x50,0x5f,0x67,0x7d,0x72,0x72,0x8c,0x7d, 0x7a,0x91,0x71,0x6e,0x88,0x64,0x61,0x7d,0x62,0x5f,0x7c,0x62,0x5f,0x7b,0x62,0x5f, 0x7c,0x62,0x5e,0x7b,0x61,0x5d,0x79,0x62,0x5d,0x79,0x62,0x5e,0x7a,0x62,0x5d,0x7a, 0x62,0x5d,0x7a,0x5f,0x5a,0x77,0x5c,0x57,0x73,0x41,0x40,0x53,0x26,0x28,0x30,0x25, 0x27,0x2e,0x23,0x26,0x2d,0x21,0x23,0x2a,0x20,0x22,0x28,0x1e,0x20,0x26,0x1e,0x1f, 0x25,0x1e,0x1f,0x24,0x1e,0x20,0x25,0x21,0x22,0x26,0x1f,0x21,0x25,0x1e,0x1f,0x23, 0x1c,0x1e,0x22,0x1b,0x1d,0x21,0x1c,0x1d,0x21,0x1e,0x1e,0x22,0x1e,0x1f,0x22,0x1c, 0x1d,0x20,0x18,0x1a,0x1c,0x13,0x15,0x17,0x10,0x11,0x14,0x0e,0x0e,0x12,0x0d,0x0e, 0x11,0x0c,0x0d,0x0f,0x0c,0x0d,0x0f,0x0b,0x0c,0x0e,0x0a,0x0a,0x0d,0x0a,0x0b,0x0e, 0x0a,0x0a,0x0d,0x09,0x0a,0x0c,0x09,0x0a,0x0b,0x07,0x08,0x0a,0x06,0x06,0x09,0x06, 0x06,0x08,0x06,0x06,0x08,0x05,0x06,0x07,0x05,0x06,0x07,0x05,0x05,0x06,0x05,0x06, 0x07,0x06,0x06,0x07,0x05,0x06,0x07,0x05,0x06,0x07,0x05,0x05,0x06,0x05,0x05,0x06, 0x04,0x05,0x06,0x04,0x05,0x06,0x04,0x05,0x06,0x04,0x04,0x06,0x04,0x04,0x06,0x03, 0x04,0x05,0x02,0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x1c,0x1a,0x22,0x67,0x5e,0x7b,0x76,0x61,0x7a,0x54,0x42, 0x51,0x55,0x42,0x52,0x56,0x43,0x53,0x57,0x44,0x55,0x3f,0x30,0x3b,0x35,0x27,0x2f, 0x36,0x28,0x30,0x3a,0x2b,0x35,0x77,0x62,0x7b,0xed,0xef,0xf3,0x20,0x20,0x21,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x14,0x15,0x69, 0x69,0x6c,0xfd,0xfd,0xfd,0xff,0xff,0xff,0xf7,0xf7,0xf7,0xa0,0xa0,0xa0,0xfc,0xfc, 0xfc,0xff,0xff,0xff,0xfd,0xfd,0xfd,0x83,0x83,0x86,0x29,0x28,0x3e,0x57,0x44,0x5e, 0x62,0x53,0x77,0x7b,0x85,0xa7,0xcb,0xcc,0xd7,0x4f,0x3e,0x4c,0x5e,0x4b,0x5d,0x62, 0x4f,0x62,0x37,0x2d,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x25, 0x25,0x25,0x68,0x73,0x97,0x64,0x53,0x76,0x64,0x52,0x73,0x52,0x4f,0x7b,0x52,0x50, 0x7b,0x52,0x50,0x7b,0x52,0x52,0x7c,0x52,0x52,0x7c,0x52,0x52,0x7c,0x52,0x52,0x7c, 0x52,0x52,0x7c,0x52,0x50,0x7b,0x52,0x4f,0x7b,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52, 0x4f,0x7a,0x54,0x50,0x79,0x55,0x50,0x79,0x57,0x50,0x79,0x63,0x4b,0x67,0x4b,0x34, 0x4a,0x55,0x61,0x89,0x40,0x40,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11, 0x13,0x18,0x5d,0x60,0x6c,0x47,0x4b,0x55,0x13,0x15,0x1d,0x02,0x02,0x02,0x02,0x02, 0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x03,0x03,0x04,0x03,0x03,0x04,0x04,0x04,0x05, 0x04,0x05,0x05,0x05,0x05,0x06,0x05,0x06,0x06,0x06,0x06,0x07,0x06,0x07,0x08,0x07, 0x08,0x09,0x07,0x08,0x09,0x08,0x08,0x0a,0x09,0x0a,0x0b,0x72,0x74,0x89,0x5d,0x68, 0x8d,0x56,0x61,0x88,0x53,0x5d,0x85,0x58,0x51,0x77,0x58,0x51,0x77,0x54,0x50,0x77, 0x52,0x4f,0x78,0x52,0x50,0x78,0x52,0x51,0x7a,0x53,0x57,0x7e,0x53,0x55,0x7c,0x54, 0x5e,0x84,0xa2,0xa4,0xb1,0x37,0x2d,0x36,0x2b,0x26,0x2d,0x11,0x12,0x15,0x11,0x12, 0x15,0x11,0x12,0x15,0x12,0x12,0x16,0x10,0x12,0x14,0x0f,0x10,0x13,0x39,0x2f,0x38, 0x28,0x20,0x26,0x75,0x79,0x89,0x5e,0x69,0x8c,0x4d,0x4a,0x72,0x54,0x4a,0x6b,0x5e, 0x53,0x78,0x5d,0x53,0x78,0x5b,0x52,0x78,0x59,0x52,0x79,0x5a,0x52,0x79,0x59,0x52, 0x79,0x5c,0x52,0x78,0x53,0x49,0x69,0x52,0x4a,0x6a,0x5e,0x54,0x77,0x2a,0x25,0x31, 0x0b,0x0c,0x0e,0x0d,0x0e,0x0f,0x0f,0x10,0x12,0x13,0x13,0x17,0x17,0x17,0x1b,0x1b, 0x19,0x1f,0x1d,0x1b,0x22,0x1d,0x1b,0x22,0x1b,0x19,0x20,0x26,0x26,0x32,0x5a,0x62, 0x8c,0x49,0x47,0x6b,0x45,0x3f,0x5b,0x58,0x4e,0x6d,0x5d,0x51,0x73,0x5e,0x52,0x75, 0x5e,0x52,0x75,0x5f,0x52,0x76,0x69,0x5d,0x7f,0x70,0x65,0x84,0x5f,0x52,0x76,0x57, 0x4c,0x6c,0x4e,0x43,0x5f,0x7d,0x6c,0x99,0x22,0x1e,0x27,0x1a,0x17,0x1d,0x20,0x1d, 0x24,0x23,0x1e,0x27,0x21,0x1e,0x27,0x23,0x21,0x28,0x24,0x21,0x29,0x27,0x24,0x2e, 0x2a,0x27,0x32,0x2e,0x2a,0x36,0x38,0x30,0x3e,0x3c,0x34,0x42,0x3e,0x36,0x43,0x3d, 0x34,0x42,0x3b,0x33,0x41,0x3a,0x32,0x3f,0x38,0x30,0x3c,0x29,0x24,0x2f,0x22,0x1f, 0x2a,0x52,0x46,0x5a,0x49,0x3e,0x50,0x6f,0x59,0x7a,0x5b,0x4a,0x66,0x5a,0x4a,0x64, 0x5a,0x4a,0x64,0x5b,0x4b,0x67,0x5b,0x4d,0x69,0x5a,0x4e,0x6b,0x33,0x2b,0x41,0x2f, 0x2b,0x40,0x19,0x1a,0x25,0x0d,0x0e,0x13,0x38,0x2f,0x3d,0x84,0x7d,0x89,0x6f,0x78, 0x92,0x53,0x5b,0x7d,0x5e,0x69,0x8b,0x60,0x6a,0x8d,0x60,0x6b,0x8e,0x61,0x6b,0x8d, 0x5e,0x69,0x8b,0x59,0x62,0x85,0x5a,0x61,0x83,0x56,0x5d,0x7d,0x57,0x5b,0x7a,0x57, 0x5b,0x7b,0x55,0x5f,0x80,0x79,0x80,0x9a,0x8a,0x90,0xa5,0x85,0x8c,0xa1,0x7b,0x81, 0x99,0x61,0x6a,0x88,0x5e,0x67,0x86,0x7a,0x7f,0x98,0x76,0x7a,0x94,0x74,0x76,0x91, 0x6c,0x6c,0x89,0x67,0x66,0x87,0x63,0x63,0x85,0x63,0x63,0x84,0x62,0x60,0x82,0x5e, 0x5d,0x7e,0x54,0x56,0x75,0x52,0x55,0x77,0x3c,0x42,0x59,0x3e,0x3c,0x52,0x50,0x48, 0x5c,0x52,0x48,0x5c,0x58,0x4c,0x60,0x55,0x49,0x5d,0x48,0x3e,0x50,0x42,0x39,0x4a, 0x58,0x4f,0x60,0x5b,0x50,0x60,0x3f,0x37,0x47,0x3e,0x36,0x48,0x40,0x39,0x4d,0x42, 0x3e,0x51,0x48,0x46,0x5a,0x52,0x51,0x68,0x57,0x58,0x6f,0x59,0x5c,0x73,0x5b,0x61, 0x79,0x60,0x67,0x80,0x5d,0x65,0x7d,0x51,0x55,0x6c,0x4b,0x50,0x67,0x56,0x5c,0x75, 0x59,0x61,0x7c,0x59,0x62,0x7d,0x63,0x6a,0x84,0x66,0x6f,0x87,0x66,0x6e,0x87,0x65, 0x6c,0x86,0x63,0x6a,0x84,0x62,0x6a,0x83,0x62,0x6a,0x83,0x66,0x6e,0x87,0x6f,0x77, 0x8e,0x74,0x7b,0x91,0x73,0x7b,0x91,0x6f,0x77,0x8e,0x6a,0x72,0x8a,0x62,0x6a,0x83, 0x5b,0x64,0x7e,0x56,0x5e,0x7a,0x53,0x5b,0x77,0x52,0x57,0x74,0x53,0x5b,0x78,0x58, 0x61,0x7c,0x56,0x5e,0x7a,0x56,0x5e,0x79,0x5b,0x63,0x7d,0x6d,0x74,0x8a,0x61,0x68, 0x7e,0x5b,0x62,0x77,0x4e,0x55,0x69,0x42,0x49,0x5d,0x3e,0x43,0x56,0x68,0x6f,0x84, 0x84,0x84,0x9b,0x82,0x80,0x96,0x73,0x71,0x8a,0x67,0x65,0x81,0x66,0x63,0x7f,0x64, 0x62,0x7d,0x64,0x61,0x7d,0x64,0x61,0x7d,0x64,0x61,0x7d,0x63,0x60,0x7c,0x63,0x5f, 0x7b,0x62,0x5f,0x7b,0x62,0x5f,0x7b,0x61,0x5c,0x78,0x5c,0x59,0x74,0x48,0x46,0x59, 0x2a,0x2c,0x34,0x28,0x2a,0x32,0x26,0x28,0x2f,0x22,0x26,0x2c,0x22,0x25,0x2b,0x21, 0x22,0x29,0x1f,0x21,0x27,0x1f,0x21,0x26,0x1f,0x21,0x26,0x1f,0x21,0x26,0x1e,0x20, 0x25,0x1d,0x1f,0x23,0x1c,0x1e,0x22,0x1b,0x1d,0x22,0x1c,0x1e,0x22,0x1f,0x20,0x25, 0x1f,0x21,0x24,0x1d,0x1e,0x22,0x19,0x1a,0x1e,0x16,0x17,0x1a,0x11,0x12,0x16,0x10, 0x11,0x14,0x0e,0x0f,0x12,0x0e,0x0e,0x12,0x0e,0x0e,0x12,0x0e,0x0e,0x12,0x0e,0x0f, 0x12,0x0e,0x0e,0x12,0x0e,0x0e,0x12,0x0e,0x0e,0x12,0x0b,0x0d,0x0f,0x0a,0x0b,0x0e, 0x09,0x0a,0x0c,0x07,0x08,0x0a,0x06,0x07,0x0a,0x06,0x07,0x0a,0x06,0x07,0x09,0x06, 0x07,0x0a,0x06,0x07,0x0a,0x07,0x07,0x0a,0x07,0x07,0x0a,0x07,0x07,0x0a,0x06,0x06, 0x09,0x06,0x06,0x09,0x06,0x06,0x08,0x06,0x06,0x07,0x06,0x06,0x07,0x05,0x05,0x06, 0x04,0x05,0x06,0x04,0x04,0x06,0x04,0x04,0x06,0x03,0x03,0x04,0x03,0x03,0x04,0x02, 0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x06,0x08,0x4e, 0x47,0x5e,0x78,0x69,0x87,0x6a,0x55,0x6b,0x57,0x44,0x54,0x4d,0x3c,0x4a,0x35,0x27, 0x2f,0x36,0x28,0x30,0x38,0x2a,0x33,0x3e,0x2f,0x3a,0x87,0x91,0xae,0xaf,0xb6,0xca, 0xd7,0xda,0xe2,0x18,0x19,0x1a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xd3,0xd3,0xd4,0xff,0xff,0xff,0xff,0xff,0xff,0xd0,0xd0,0xd0,0xc0, 0xc0,0xc0,0xfd,0xfd,0xfd,0xff,0xff,0xff,0xfa,0xfa,0xfa,0x35,0x34,0x3d,0x36,0x34, 0x51,0x5f,0x49,0x66,0x5f,0x53,0x79,0x76,0x81,0xa3,0xc7,0xc8,0xd2,0x51,0x3f,0x4e, 0x5e,0x4b,0x5d,0x64,0x50,0x64,0x25,0x1e,0x26,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x77,0x84,0x52,0x55,0x80,0x62,0x4a,0x66,0x58, 0x50,0x79,0x52,0x4f,0x7a,0x52,0x4f,0x7b,0x52,0x4f,0x7b,0x52,0x50,0x7b,0x52,0x50, 0x7b,0x52,0x50,0x7b,0x52,0x50,0x7b,0x52,0x4f,0x7b,0x52,0x4f,0x7a,0x52,0x4f,0x7a, 0x52,0x4f,0x7a,0x53,0x4f,0x7a,0x55,0x50,0x79,0x57,0x50,0x79,0x58,0x50,0x79,0x5b, 0x52,0x79,0x5a,0x41,0x5b,0x53,0x3c,0x54,0x6b,0x76,0x94,0x18,0x18,0x18,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x4b,0x53,0x6b,0xc5,0xca,0xd6,0xd1,0xd4,0xdd,0x72,0x7c,0x9c,0x51, 0x5b,0x7e,0x32,0x39,0x4f,0x12,0x14,0x1b,0x02,0x02,0x03,0x02,0x03,0x03,0x03,0x03, 0x04,0x03,0x03,0x04,0x04,0x04,0x05,0x04,0x05,0x05,0x05,0x05,0x06,0x05,0x06,0x06, 0x06,0x06,0x07,0x06,0x06,0x07,0x07,0x07,0x09,0x08,0x08,0x0a,0x08,0x09,0x0a,0x74, 0x77,0x8a,0x5e,0x6a,0x8f,0x57,0x62,0x8a,0x55,0x5f,0x8b,0x55,0x50,0x77,0x57,0x51, 0x77,0x55,0x50,0x77,0x52,0x4f,0x78,0x52,0x50,0x79,0x52,0x54,0x7c,0x53,0x58,0x80, 0x52,0x54,0x7c,0x53,0x5e,0x84,0x9a,0x9c,0xa7,0x37,0x2d,0x36,0x32,0x2b,0x35,0x10, 0x11,0x14,0x0f,0x10,0x13,0x0f,0x10,0x13,0x10,0x11,0x14,0x0f,0x11,0x13,0x0e,0x0f, 0x12,0x3a,0x2e,0x38,0x28,0x20,0x26,0x75,0x78,0x86,0x67,0x70,0x92,0x4f,0x4d,0x75, 0x50,0x47,0x69,0x5c,0x52,0x77,0x5d,0x53,0x78,0x5b,0x51,0x78,0x5a,0x53,0x79,0x5a, 0x53,0x79,0x59,0x52,0x79,0x5a,0x52,0x79,0x50,0x49,0x6a,0x50,0x47,0x68,0x5d,0x54, 0x78,0x34,0x2e,0x3d,0x0a,0x0b,0x0e,0x0b,0x0c,0x0e,0x0b,0x0c,0x0e,0x0d,0x0e,0x0f, 0x0c,0x0d,0x10,0x0f,0x0f,0x13,0x13,0x13,0x17,0x15,0x14,0x1a,0x15,0x13,0x18,0x1a, 0x1a,0x22,0x60,0x6b,0x99,0x4f,0x4c,0x74,0x45,0x3f,0x5c,0x59,0x4d,0x6e,0x5e,0x51, 0x74,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5f,0x52,0x76,0x60,0x55,0x78,0x78,0x6f,0x8c, 0x5f,0x53,0x76,0x59,0x4d,0x6d,0x4d,0x43,0x5f,0x73,0x65,0x90,0x2a,0x23,0x2e,0x10, 0x0f,0x13,0x1b,0x18,0x1e,0x1e,0x1b,0x21,0x20,0x1d,0x25,0x22,0x1f,0x27,0x25,0x22, 0x2b,0x2a,0x26,0x30,0x2b,0x27,0x32,0x2b,0x27,0x32,0x2f,0x2a,0x36,0x36,0x2f,0x3d, 0x3d,0x35,0x43,0x40,0x37,0x45,0x41,0x37,0x46,0x41,0x37,0x45,0x3c,0x33,0x41,0x37, 0x2e,0x3b,0x2e,0x28,0x33,0x39,0x32,0x42,0x50,0x44,0x56,0x66,0x56,0x73,0x60,0x4e, 0x6c,0x5a,0x49,0x64,0x59,0x4a,0x65,0x5b,0x4a,0x65,0x5c,0x4b,0x68,0x5c,0x4f,0x6d, 0x41,0x38,0x51,0x31,0x2b,0x40,0x2d,0x2a,0x40,0x0e,0x0f,0x14,0x1f,0x1c,0x25,0x3e, 0x34,0x43,0xae,0xab,0xb3,0x4e,0x57,0x75,0x5c,0x68,0x8a,0x61,0x6b,0x8e,0x64,0x6d, 0x8f,0x64,0x6e,0x90,0x62,0x6c,0x8d,0x5f,0x67,0x88,0x60,0x65,0x84,0x5b,0x5e,0x7d, 0x58,0x5b,0x78,0x57,0x59,0x76,0x59,0x5a,0x78,0x54,0x5d,0x7d,0x67,0x6f,0x8a,0x71, 0x78,0x8f,0x6d,0x75,0x91,0x57,0x59,0x7a,0x58,0x59,0x79,0x63,0x6c,0x89,0x8d,0x91, 0xa7,0xa0,0xa2,0xb4,0x98,0x98,0xae,0x83,0x83,0x9c,0x7e,0x7d,0x98,0x7b,0x7c,0x97, 0x74,0x75,0x90,0x6c,0x6d,0x8b,0x60,0x64,0x83,0x61,0x67,0x87,0x48,0x4f,0x64,0x40, 0x43,0x5a,0x4d,0x4a,0x62,0x56,0x4e,0x66,0x57,0x4d,0x62,0x56,0x4b,0x60,0x55,0x4a, 0x5f,0x4a,0x41,0x56,0x3e,0x37,0x49,0x51,0x4a,0x58,0x4e,0x45,0x54,0x42,0x3a,0x4b, 0x40,0x3a,0x4d,0x40,0x3b,0x4e,0x42,0x3d,0x4f,0x45,0x41,0x56,0x4c,0x4a,0x60,0x53, 0x53,0x6a,0x58,0x5a,0x73,0x5e,0x64,0x7a,0x62,0x67,0x7f,0x54,0x59,0x6e,0x48,0x4c, 0x62,0x4a,0x50,0x68,0x50,0x57,0x74,0x56,0x5e,0x7a,0x62,0x6a,0x84,0x66,0x6e,0x87, 0x66,0x6e,0x87,0x64,0x6c,0x85,0x64,0x6b,0x85,0x64,0x6b,0x85,0x63,0x6a,0x84,0x66, 0x6d,0x86,0x6a,0x72,0x8a,0x72,0x79,0x8f,0x72,0x7a,0x90,0x72,0x7a,0x90,0x6f,0x77, 0x8e,0x6a,0x72,0x8a,0x66,0x6d,0x86,0x5c,0x65,0x80,0x58,0x60,0x7c,0x54,0x5c,0x79, 0x52,0x59,0x76,0x52,0x59,0x76,0x52,0x58,0x75,0x52,0x57,0x75,0x52,0x5a,0x76,0x67, 0x6f,0x86,0x7c,0x83,0x95,0x6d,0x74,0x89,0x5c,0x64,0x7a,0x51,0x58,0x6e,0x4a,0x50, 0x65,0x70,0x75,0x8d,0x8d,0x8e,0xa5,0x94,0x93,0xa7,0x86,0x85,0x9a,0x72,0x71,0x89, 0x68,0x66,0x81,0x66,0x65,0x80,0x66,0x64,0x7e,0x65,0x63,0x7f,0x66,0x63,0x7f,0x66, 0x63,0x7f,0x65,0x62,0x7e,0x64,0x60,0x7d,0x64,0x60,0x7d,0x62,0x5d,0x7a,0x5f,0x5c, 0x77,0x4a,0x49,0x5e,0x2b,0x2e,0x36,0x2a,0x2e,0x35,0x2a,0x2c,0x34,0x27,0x2a,0x31, 0x25,0x28,0x2e,0x25,0x26,0x2e,0x23,0x26,0x2c,0x21,0x22,0x29,0x21,0x22,0x29,0x20, 0x22,0x28,0x1e,0x21,0x26,0x1e,0x20,0x26,0x1d,0x1e,0x24,0x1e,0x1f,0x24,0x1e,0x1f, 0x24,0x1f,0x21,0x26,0x1e,0x20,0x24,0x1c,0x1e,0x22,0x19,0x1a,0x1e,0x16,0x18,0x1c, 0x15,0x16,0x1a,0x12,0x14,0x17,0x11,0x12,0x16,0x10,0x11,0x14,0x11,0x12,0x16,0x10, 0x11,0x15,0x10,0x11,0x15,0x12,0x12,0x16,0x12,0x13,0x16,0x12,0x13,0x16,0x10,0x11, 0x15,0x0e,0x0f,0x13,0x0c,0x0e,0x11,0x0a,0x0a,0x0e,0x09,0x0a,0x0d,0x09,0x0a,0x0d, 0x08,0x09,0x0c,0x09,0x0a,0x0c,0x09,0x0a,0x0d,0x08,0x09,0x0b,0x08,0x09,0x0b,0x08, 0x08,0x0b,0x08,0x08,0x0b,0x08,0x08,0x0b,0x07,0x08,0x0a,0x06,0x07,0x0a,0x06,0x07, 0x09,0x06,0x06,0x09,0x06,0x06,0x07,0x05,0x06,0x07,0x05,0x05,0x06,0x04,0x04,0x06, 0x03,0x04,0x05,0x03,0x03,0x04,0x02,0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x03,0x02, 0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x2a,0x29,0x38,0x64,0x62,0x86,0x77,0x63,0x7c,0x38, 0x2a,0x33,0x35,0x27,0x2f,0x35,0x28,0x30,0x39,0x2b,0x34,0x78,0x69,0x86,0x9e,0xa6, 0xbe,0x91,0x9a,0xb6,0xa3,0xab,0xc2,0xbc,0xbe,0xc3,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x31,0x31,0x31,0xfc,0xfc,0xfc,0xff,0xff,0xff,0xfc,0xfc,0xfc, 0x84,0x84,0x84,0xea,0xea,0xea,0xff,0xff,0xff,0xff,0xff,0xff,0xde,0xdd,0xde,0x1b, 0x1a,0x28,0x3f,0x3d,0x5e,0x63,0x4e,0x6d,0x60,0x53,0x77,0x73,0x7e,0xa1,0xc1,0xc3, 0xce,0x52,0x40,0x4f,0x5e,0x4b,0x5d,0x67,0x53,0x67,0x16,0x12,0x16,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x26,0x66,0x73,0x97, 0x64,0x53,0x74,0x64,0x4e,0x6c,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52, 0x4f,0x7b,0x52,0x4f,0x7b,0x52,0x4f,0x7b,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f, 0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x54,0x50,0x79,0x56,0x50,0x79,0x57,0x50,0x79, 0x5a,0x52,0x79,0x5c,0x52,0x79,0x60,0x53,0x77,0x4f,0x38,0x4f,0x63,0x4b,0x67,0x6f, 0x76,0x8b,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0x46,0x5c,0xcf,0xd3,0xde,0xf2,0xf2,0xf5, 0xa4,0xab,0xbe,0x57,0x62,0x85,0x53,0x5d,0x80,0x4b,0x54,0x73,0x1d,0x21,0x2e,0x02, 0x02,0x03,0x02,0x03,0x03,0x03,0x03,0x04,0x04,0x04,0x05,0x04,0x04,0x05,0x04,0x05, 0x05,0x05,0x06,0x06,0x05,0x06,0x06,0x06,0x06,0x07,0x06,0x07,0x08,0x06,0x07,0x08, 0x07,0x07,0x09,0x72,0x75,0x89,0x5e,0x6a,0x90,0x57,0x63,0x8a,0x57,0x61,0x8d,0x54, 0x50,0x78,0x54,0x51,0x77,0x54,0x51,0x77,0x52,0x50,0x78,0x52,0x50,0x7a,0x52,0x54, 0x7b,0x52,0x5a,0x82,0x53,0x54,0x7a,0x54,0x5e,0x84,0x9d,0x9e,0xa9,0x36,0x2c,0x34, 0x38,0x2f,0x39,0x0e,0x0f,0x12,0x0e,0x0f,0x12,0x0e,0x0f,0x12,0x0e,0x0f,0x12,0x0f, 0x10,0x12,0x0e,0x0e,0x12,0x37,0x2d,0x36,0x27,0x1f,0x24,0x6b,0x6b,0x76,0x72,0x7c, 0x9b,0x50,0x52,0x7c,0x4e,0x47,0x69,0x5d,0x52,0x76,0x5d,0x53,0x78,0x5b,0x51,0x78, 0x5a,0x52,0x79,0x57,0x50,0x79,0x56,0x50,0x78,0x5a,0x52,0x79,0x50,0x49,0x6a,0x4f, 0x47,0x68,0x5d,0x53,0x78,0x3f,0x37,0x4a,0x09,0x09,0x0a,0x0a,0x0a,0x0c,0x0a,0x0a, 0x0c,0x0a,0x0a,0x0d,0x0a,0x0a,0x0c,0x0a,0x0a,0x0c,0x09,0x0a,0x0b,0x0b,0x0b,0x0d, 0x0a,0x0b,0x0c,0x0c,0x0c,0x10,0x65,0x73,0xa5,0x52,0x50,0x78,0x47,0x42,0x61,0x56, 0x4d,0x6f,0x5e,0x52,0x75,0x5e,0x53,0x75,0x5f,0x52,0x75,0x5f,0x52,0x76,0x5e,0x53, 0x76,0x6f,0x64,0x84,0x72,0x68,0x86,0x6b,0x5f,0x7f,0x5f,0x54,0x70,0x75,0x64,0x8f, 0x33,0x2b,0x3a,0x07,0x07,0x0a,0x0c,0x0c,0x10,0x11,0x10,0x15,0x16,0x15,0x1a,0x1d, 0x1a,0x22,0x21,0x1e,0x26,0x26,0x23,0x2d,0x2a,0x27,0x31,0x2c,0x28,0x33,0x2e,0x2a, 0x35,0x35,0x2e,0x3b,0x38,0x31,0x3f,0x38,0x31,0x3f,0x39,0x31,0x3f,0x3c,0x33,0x42, 0x3d,0x34,0x43,0x3e,0x35,0x44,0x3f,0x35,0x43,0x3e,0x35,0x43,0x52,0x45,0x58,0x51, 0x44,0x56,0x69,0x54,0x73,0x5a,0x49,0x64,0x5a,0x49,0x64,0x5b,0x4a,0x65,0x5b,0x4d, 0x69,0x5c,0x4f,0x6d,0x5c,0x4f,0x6d,0x34,0x2c,0x42,0x31,0x2b,0x40,0x23,0x23,0x35, 0x0c,0x0e,0x12,0x2c,0x25,0x30,0x46,0x3a,0x49,0x77,0x7b,0x91,0x55,0x61,0x7f,0x63, 0x6c,0x8e,0x64,0x6e,0x90,0x66,0x71,0x92,0x65,0x6f,0x8f,0x65,0x6b,0x8c,0x65,0x67, 0x86,0x5f,0x61,0x7e,0x55,0x58,0x73,0x4d,0x50,0x6a,0x4d,0x4d,0x66,0x52,0x52,0x6c, 0x54,0x56,0x74,0x4f,0x56,0x75,0x5c,0x5a,0x78,0x50,0x49,0x61,0x56,0x4f,0x6a,0x52, 0x56,0x78,0x82,0x8a,0xa2,0x99,0x9e,0xb3,0x9c,0x9e,0xb1,0x8b,0x8c,0xa1,0x89,0x89, 0x9f,0x88,0x88,0x9f,0x86,0x86,0x9f,0x88,0x89,0xa0,0x7b,0x7e,0x99,0x6b,0x74,0x92, 0x52,0x59,0x6e,0x43,0x4a,0x62,0x4a,0x4a,0x65,0x4e,0x4b,0x66,0x51,0x4b,0x64,0x53, 0x4a,0x61,0x53,0x4b,0x63,0x50,0x4a,0x62,0x4a,0x44,0x5a,0x43,0x3c,0x4d,0x56,0x4e, 0x5d,0x50,0x47,0x59,0x40,0x38,0x48,0x3a,0x32,0x43,0x3e,0x36,0x49,0x41,0x3a,0x4e, 0x46,0x41,0x56,0x4a,0x47,0x5d,0x4b,0x4a,0x61,0x52,0x54,0x6b,0x5f,0x62,0x7a,0x5e, 0x64,0x7a,0x52,0x57,0x6e,0x4d,0x53,0x6e,0x51,0x57,0x73,0x55,0x5d,0x79,0x5f,0x68, 0x81,0x64,0x6c,0x86,0x66,0x6e,0x86,0x64,0x6b,0x85,0x62,0x6a,0x84,0x64,0x6b,0x85, 0x65,0x6c,0x86,0x66,0x6e,0x86,0x66,0x6e,0x87,0x6a,0x72,0x8a,0x6c,0x74,0x8b,0x6e, 0x76,0x8d,0x6f,0x77,0x8e,0x6e,0x76,0x8d,0x6a,0x72,0x8a,0x66,0x6f,0x88,0x5e,0x66, 0x82,0x5a,0x62,0x7e,0x56,0x5e,0x7a,0x54,0x5c,0x79,0x53,0x5a,0x77,0x52,0x59,0x76, 0x52,0x58,0x76,0x52,0x5a,0x77,0x73,0x7a,0x8f,0x86,0x8d,0x9c,0x6e,0x76,0x8a,0x64, 0x6b,0x81,0x61,0x67,0x7c,0x80,0x85,0x9c,0x87,0x8c,0xa4,0x9c,0x9c,0xaf,0x9a,0x99, 0xad,0x84,0x83,0x99,0x6f,0x6d,0x88,0x6a,0x69,0x83,0x6a,0x67,0x82,0x68,0x66,0x81, 0x67,0x65,0x81,0x67,0x65,0x81,0x67,0x64,0x80,0x66,0x63,0x7f,0x66,0x62,0x7e,0x63, 0x5f,0x7c,0x60,0x5c,0x78,0x50,0x4f,0x63,0x2e,0x31,0x3a,0x2e,0x30,0x39,0x2b,0x2e, 0x36,0x2a,0x2c,0x33,0x28,0x2a,0x32,0x29,0x2b,0x32,0x27,0x2a,0x31,0x26,0x28,0x2e, 0x26,0x28,0x2e,0x24,0x26,0x2c,0x22,0x25,0x2a,0x21,0x23,0x29,0x21,0x23,0x29,0x21, 0x22,0x28,0x22,0x23,0x28,0x20,0x22,0x26,0x1e,0x20,0x25,0x1d,0x1e,0x23,0x1a,0x1c, 0x21,0x18,0x1a,0x1e,0x17,0x19,0x1e,0x16,0x17,0x1c,0x16,0x16,0x1b,0x12,0x14,0x18, 0x12,0x14,0x18,0x14,0x15,0x1a,0x15,0x16,0x1b,0x16,0x17,0x1c,0x16,0x17,0x1c,0x16, 0x18,0x1d,0x15,0x16,0x1b,0x12,0x13,0x18,0x10,0x12,0x16,0x0e,0x0f,0x13,0x0b,0x0c, 0x10,0x0c,0x0d,0x10,0x0b,0x0c,0x0f,0x0a,0x0b,0x0f,0x0b,0x0c,0x10,0x0b,0x0c,0x0f, 0x0a,0x0c,0x0f,0x0a,0x0c,0x0f,0x09,0x0a,0x0d,0x09,0x0a,0x0d,0x08,0x09,0x0c,0x08, 0x09,0x0c,0x08,0x09,0x0b,0x07,0x07,0x0a,0x07,0x07,0x0a,0x06,0x06,0x09,0x06,0x06, 0x07,0x05,0x06,0x07,0x04,0x05,0x06,0x04,0x04,0x06,0x03,0x04,0x05,0x02,0x03,0x04, 0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x15,0x16,0x1b, 0x77,0x7e,0x95,0x7a,0x85,0xa5,0x68,0x70,0x95,0x6f,0x5a,0x71,0x3e,0x2f,0x39,0x88, 0x92,0xaf,0x8f,0x99,0xb4,0x8d,0x97,0xb3,0x7f,0x89,0xa9,0xa5,0xad,0xc3,0x62,0x67, 0x72,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xbb,0xbb,0xbb,0xfd,0xfd,0xfd,0xff,0xff, 0xff,0xe2,0xe2,0xe2,0x6b,0x6b,0x6b,0xfc,0xfc,0xfc,0xff,0xff,0xff,0xff,0xff,0xff, 0x9d,0x9d,0x9e,0x26,0x25,0x39,0x46,0x45,0x6a,0x64,0x4d,0x6a,0x60,0x53,0x77,0x6e, 0x7b,0x9d,0xc0,0xc0,0xcb,0x55,0x42,0x52,0x62,0x4e,0x61,0x6b,0x56,0x6c,0x08,0x07, 0x0a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x59,0x5f,0x70,0x52,0x50,0x7b,0x5f,0x47,0x64,0x62,0x53,0x77,0x52,0x4f,0x7a, 0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52, 0x4f,0x7a,0x52,0x4f,0x7a,0x53,0x4f,0x7a,0x54,0x50,0x79,0x55,0x50,0x79,0x57,0x50, 0x79,0x5a,0x52,0x79,0x5a,0x52,0x79,0x5c,0x52,0x79,0x5e,0x53,0x79,0x64,0x4f,0x6e, 0x57,0x40,0x5a,0x5b,0x52,0x79,0x5f,0x62,0x6b,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x11,0x17,0xc0,0xc5, 0xd2,0xf3,0xf4,0xf6,0xa5,0xaa,0xb4,0x39,0x3f,0x4e,0x42,0x4a,0x62,0x54,0x5f,0x81, 0x55,0x5f,0x83,0x14,0x16,0x1c,0x02,0x03,0x03,0x02,0x03,0x03,0x04,0x04,0x05,0x04, 0x04,0x05,0x04,0x05,0x05,0x04,0x05,0x05,0x05,0x06,0x06,0x05,0x06,0x06,0x06,0x06, 0x07,0x06,0x06,0x07,0x07,0x07,0x09,0x6f,0x71,0x86,0x5e,0x6a,0x8f,0x58,0x63,0x8b, 0x57,0x62,0x8d,0x53,0x51,0x78,0x52,0x50,0x78,0x53,0x4f,0x78,0x52,0x50,0x78,0x52, 0x52,0x7a,0x52,0x53,0x7c,0x53,0x5b,0x83,0x52,0x51,0x7a,0x56,0x61,0x88,0xa4,0xa4, 0xae,0x35,0x2b,0x33,0x39,0x2f,0x3a,0x0d,0x0e,0x10,0x0e,0x0e,0x11,0x0e,0x0e,0x12, 0x0e,0x0e,0x12,0x0d,0x0e,0x10,0x0d,0x0e,0x0f,0x3a,0x2f,0x39,0x29,0x1f,0x26,0x4c, 0x48,0x50,0x7f,0x88,0xa5,0x52,0x5d,0x85,0x4d,0x46,0x69,0x58,0x50,0x73,0x5d,0x52, 0x78,0x5e,0x53,0x79,0x5a,0x52,0x79,0x56,0x50,0x79,0x56,0x51,0x79,0x58,0x50,0x79, 0x50,0x49,0x6a,0x4e,0x47,0x66,0x5d,0x53,0x78,0x48,0x3d,0x53,0x08,0x08,0x0a,0x08, 0x09,0x0a,0x08,0x09,0x0a,0x09,0x0a,0x0b,0x08,0x09,0x0a,0x08,0x09,0x0a,0x08,0x08, 0x0a,0x08,0x09,0x0a,0x07,0x08,0x0a,0x07,0x07,0x09,0x62,0x6f,0x9f,0x54,0x54,0x7e, 0x49,0x44,0x63,0x56,0x4c,0x6e,0x5e,0x51,0x75,0x5e,0x52,0x75,0x5f,0x52,0x75,0x5e, 0x53,0x76,0x5e,0x53,0x76,0x5e,0x53,0x76,0x69,0x5f,0x7f,0x6f,0x63,0x83,0x68,0x5e, 0x7b,0x86,0x78,0x9c,0x49,0x3f,0x4f,0x06,0x06,0x07,0x07,0x08,0x0a,0x0a,0x0b,0x0d, 0x12,0x11,0x16,0x16,0x15,0x1b,0x18,0x17,0x1e,0x1d,0x1b,0x23,0x21,0x1f,0x28,0x25, 0x22,0x2c,0x2b,0x27,0x31,0x32,0x2c,0x38,0x31,0x2c,0x38,0x2f,0x2a,0x36,0x32,0x2b, 0x38,0x39,0x31,0x3e,0x3e,0x35,0x44,0x3f,0x36,0x45,0x43,0x39,0x49,0x48,0x3c,0x4c, 0x4a,0x3f,0x4f,0x58,0x49,0x5c,0x60,0x50,0x69,0x63,0x51,0x6a,0x5c,0x4b,0x66,0x5a, 0x49,0x64,0x5b,0x4a,0x66,0x5c,0x4b,0x67,0x5c,0x4e,0x6c,0x4c,0x43,0x5d,0x30,0x2a, 0x3e,0x30,0x2a,0x41,0x13,0x14,0x1c,0x0f,0x10,0x14,0x32,0x2b,0x37,0x8b,0x85,0x8f, 0x6d,0x74,0x8d,0x5f,0x69,0x89,0x66,0x70,0x93,0x69,0x73,0x93,0x6b,0x73,0x94,0x6c, 0x70,0x8f,0x6b,0x6c,0x8b,0x67,0x67,0x85,0x5e,0x5f,0x7a,0x4e,0x51,0x69,0x44,0x46, 0x5b,0x35,0x38,0x49,0x38,0x3b,0x4e,0x41,0x43,0x58,0x3b,0x3b,0x4e,0x30,0x2e,0x3d, 0x38,0x37,0x4a,0x56,0x51,0x6c,0x59,0x58,0x79,0x56,0x5c,0x7f,0x68,0x6e,0x8b,0x74, 0x77,0x90,0x7e,0x80,0x96,0x7f,0x80,0x98,0x8b,0x8c,0xa3,0x96,0x98,0xad,0x7f,0x83, 0x9b,0x6e,0x79,0x95,0x56,0x5d,0x73,0x4d,0x54,0x6b,0x4d,0x54,0x6e,0x4e,0x50,0x6b, 0x4a,0x4a,0x66,0x49,0x47,0x61,0x4a,0x49,0x63,0x4b,0x4a,0x64,0x48,0x46,0x60,0x46, 0x42,0x56,0x47,0x3f,0x4f,0x5e,0x56,0x64,0x38,0x31,0x3e,0x32,0x2b,0x37,0x3e,0x36, 0x47,0x3e,0x39,0x4a,0x43,0x3e,0x52,0x46,0x42,0x56,0x48,0x46,0x5b,0x4a,0x49,0x5f, 0x50,0x50,0x67,0x5b,0x5e,0x76,0x5e,0x65,0x7e,0x57,0x5f,0x7a,0x54,0x5c,0x78,0x56, 0x5e,0x7a,0x5f,0x67,0x81,0x61,0x69,0x82,0x62,0x6a,0x84,0x61,0x69,0x83,0x5e,0x66, 0x81,0x61,0x69,0x82,0x64,0x6b,0x85,0x65,0x6c,0x86,0x66,0x6e,0x87,0x66,0x6e,0x87, 0x68,0x70,0x89,0x67,0x6f,0x88,0x6a,0x72,0x8a,0x6b,0x73,0x8a,0x6b,0x73,0x8a,0x6b, 0x73,0x8a,0x68,0x70,0x89,0x63,0x6a,0x84,0x5d,0x66,0x80,0x5a,0x62,0x7e,0x56,0x5e, 0x7b,0x57,0x5f,0x7a,0x54,0x5d,0x79,0x54,0x5d,0x79,0x58,0x60,0x7b,0x71,0x78,0x8e, 0x8a,0x8f,0x9e,0x83,0x8a,0x9a,0x82,0x88,0x98,0x95,0x99,0xad,0x89,0x8e,0xa9,0x92, 0x93,0xa9,0x96,0x97,0xa9,0x86,0x85,0x9a,0x72,0x72,0x8b,0x6e,0x6d,0x87,0x6b,0x69, 0x85,0x6b,0x69,0x85,0x6a,0x67,0x83,0x6a,0x68,0x83,0x67,0x65,0x81,0x68,0x65,0x81, 0x66,0x65,0x80,0x65,0x61,0x7d,0x61,0x5f,0x7a,0x55,0x53,0x69,0x31,0x34,0x3d,0x30, 0x32,0x3b,0x2e,0x31,0x39,0x2c,0x2f,0x37,0x2c,0x2f,0x36,0x2e,0x30,0x36,0x30,0x32, 0x37,0x30,0x32,0x36,0x30,0x32,0x36,0x2e,0x30,0x36,0x2c,0x2e,0x34,0x2a,0x2b,0x32, 0x28,0x2a,0x30,0x29,0x2b,0x31,0x28,0x2a,0x2f,0x25,0x26,0x2c,0x22,0x24,0x2a,0x20, 0x22,0x28,0x1e,0x20,0x25,0x1d,0x1f,0x25,0x1d,0x1e,0x25,0x1b,0x1e,0x23,0x19,0x1a, 0x20,0x18,0x1a,0x1e,0x17,0x19,0x1e,0x17,0x19,0x1e,0x18,0x1a,0x1f,0x1a,0x1c,0x22, 0x1a,0x1c,0x22,0x1a,0x1d,0x22,0x19,0x1a,0x20,0x15,0x16,0x1c,0x12,0x14,0x19,0x13, 0x14,0x18,0x3e,0x3f,0x43,0x0e,0x10,0x15,0x0e,0x0f,0x14,0x0e,0x0f,0x14,0x0e,0x0f, 0x14,0x0e,0x0f,0x14,0x0e,0x0e,0x13,0x0d,0x0e,0x12,0x0c,0x0e,0x12,0x0b,0x0c,0x10, 0x0a,0x0b,0x0f,0x0a,0x0b,0x0e,0x09,0x0a,0x0d,0x09,0x0a,0x0c,0x07,0x08,0x0b,0x07, 0x08,0x0a,0x06,0x07,0x0a,0x06,0x06,0x09,0x06,0x06,0x07,0x04,0x05,0x06,0x04,0x04, 0x06,0x04,0x04,0x06,0x03,0x03,0x04,0x02,0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x02, 0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x12,0x13,0x17,0x5f,0x64,0x74,0xa6,0xae,0xc4, 0x84,0x8e,0xac,0x8c,0x96,0xb2,0x99,0xa2,0xbb,0x84,0x8f,0xad,0x77,0x82,0xa3,0x6b, 0x75,0x99,0x9d,0xa5,0xbc,0x18,0x1a,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x08,0xf3,0xf3,0xf3,0xff, 0xff,0xff,0xff,0xff,0xff,0x7a,0x7a,0x7a,0xaf,0xaf,0xaf,0xfd,0xfd,0xfd,0xff,0xff, 0xff,0xfa,0xfa,0xfa,0x40,0x3f,0x45,0x34,0x32,0x4d,0x4d,0x4b,0x73,0x63,0x4b,0x67, 0x64,0x53,0x76,0x72,0x7e,0xa1,0xbc,0xbb,0xc6,0x57,0x44,0x55,0x65,0x51,0x65,0x73, 0x5e,0x76,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x1d,0x1e,0x21,0x5c,0x69,0x8f,0x64,0x53,0x74,0x64,0x4c, 0x69,0x55,0x50,0x79,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a, 0x52,0x4f,0x7a,0x53,0x4f,0x7a,0x54,0x50,0x79,0x54,0x50,0x79,0x55,0x50,0x79,0x57, 0x50,0x79,0x5a,0x52,0x79,0x5a,0x52,0x79,0x5c,0x52,0x79,0x5c,0x52,0x79,0x5e,0x53, 0x79,0x5e,0x53,0x79,0x63,0x4b,0x67,0x53,0x3c,0x54,0x54,0x5f,0x89,0x42,0x42,0x44, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x86,0x8c,0x9d,0xdf,0xe1,0xea,0xaf,0xb5,0xc4,0x25,0x24,0x2c,0x19,0x1c, 0x25,0x45,0x4d,0x67,0x57,0x62,0x82,0x58,0x62,0x87,0x22,0x26,0x32,0x02,0x03,0x03, 0x02,0x03,0x03,0x04,0x04,0x05,0x04,0x04,0x05,0x04,0x05,0x05,0x05,0x05,0x06,0x05, 0x05,0x06,0x06,0x06,0x07,0x06,0x06,0x07,0x06,0x06,0x07,0x67,0x68,0x7f,0x5f,0x6b, 0x90,0x5a,0x65,0x8c,0x5a,0x66,0x92,0x52,0x50,0x79,0x52,0x4f,0x78,0x52,0x4f,0x78, 0x52,0x50,0x79,0x52,0x53,0x7b,0x52,0x54,0x7e,0x52,0x5a,0x82,0x52,0x52,0x7a,0x57, 0x62,0x88,0xa6,0xa6,0xaf,0x34,0x2a,0x33,0x3c,0x31,0x3c,0x0d,0x0e,0x0f,0x0c,0x0d, 0x0f,0x0d,0x0e,0x0f,0x0d,0x0e,0x0f,0x0c,0x0d,0x0f,0x0c,0x0c,0x0e,0x39,0x2e,0x36, 0x29,0x1f,0x25,0x20,0x19,0x1c,0x84,0x8a,0xa2,0x56,0x62,0x8a,0x4e,0x49,0x6d,0x56, 0x4c,0x6f,0x5d,0x52,0x78,0x5c,0x52,0x79,0x5a,0x52,0x79,0x54,0x50,0x79,0x55,0x50, 0x79,0x56,0x50,0x78,0x51,0x49,0x6d,0x4c,0x44,0x62,0x5b,0x52,0x77,0x4d,0x41,0x5a, 0x08,0x08,0x0a,0x07,0x08,0x09,0x08,0x09,0x0a,0x08,0x08,0x0a,0x08,0x09,0x0a,0x07, 0x08,0x0a,0x07,0x07,0x09,0x07,0x08,0x0a,0x07,0x08,0x0a,0x06,0x06,0x07,0x5c,0x68, 0x94,0x55,0x56,0x81,0x48,0x44,0x65,0x53,0x49,0x6a,0x5e,0x53,0x76,0x5e,0x52,0x75, 0x5e,0x52,0x76,0x5f,0x53,0x76,0x5e,0x53,0x76,0x5e,0x53,0x76,0x5e,0x53,0x76,0x5e, 0x53,0x76,0x54,0x49,0x69,0x73,0x65,0x8d,0x5f,0x55,0x66,0x3f,0x3f,0x41,0x1f,0x20, 0x22,0x0a,0x0a,0x0d,0x11,0x11,0x16,0x15,0x14,0x19,0x16,0x15,0x1a,0x19,0x17,0x1e, 0x1b,0x1a,0x21,0x1f,0x1e,0x26,0x25,0x22,0x2c,0x2c,0x28,0x33,0x2d,0x29,0x34,0x2e, 0x29,0x35,0x32,0x2d,0x39,0x3c,0x34,0x42,0x3f,0x36,0x44,0x40,0x37,0x46,0x44,0x3b, 0x4b,0x45,0x3c,0x4c,0x46,0x3b,0x4b,0x4c,0x40,0x51,0x54,0x46,0x59,0x68,0x55,0x6f, 0x5e,0x4c,0x66,0x5c,0x4a,0x65,0x5b,0x49,0x64,0x5c,0x4a,0x65,0x5c,0x4a,0x67,0x5d, 0x4d,0x6a,0x35,0x2d,0x41,0x31,0x2a,0x40,0x2d,0x29,0x3d,0x0b,0x0c,0x10,0x2c,0x24, 0x2f,0x46,0x3a,0x48,0x9e,0x9e,0xab,0x5a,0x64,0x7e,0x69,0x74,0x95,0x6c,0x76,0x96, 0x6d,0x75,0x96,0x70,0x75,0x93,0x6f,0x72,0x8f,0x6d,0x6e,0x8a,0x67,0x68,0x84,0x61, 0x62,0x7d,0x51,0x53,0x6a,0x3e,0x41,0x54,0x35,0x39,0x4b,0x31,0x35,0x46,0x2f,0x31, 0x41,0x2f,0x30,0x40,0x32,0x33,0x44,0x37,0x36,0x4a,0x42,0x3e,0x54,0x56,0x51,0x6c, 0x56,0x54,0x71,0x50,0x4f,0x71,0x50,0x53,0x74,0x52,0x57,0x77,0x67,0x6a,0x88,0x76, 0x7b,0x96,0x67,0x6d,0x89,0x64,0x6f,0x8d,0x51,0x58,0x6e,0x52,0x5a,0x70,0x52,0x5a, 0x74,0x51,0x58,0x73,0x4b,0x52,0x6c,0x47,0x4b,0x65,0x49,0x4a,0x65,0x4a,0x4a,0x65, 0x48,0x46,0x60,0x46,0x44,0x5d,0x3b,0x37,0x48,0x4b,0x44,0x54,0x5b,0x53,0x63,0x3e, 0x37,0x45,0x42,0x39,0x4a,0x45,0x3d,0x51,0x46,0x40,0x56,0x45,0x41,0x56,0x45,0x41, 0x55,0x46,0x43,0x5a,0x4a,0x49,0x5f,0x4e,0x4e,0x63,0x52,0x54,0x6b,0x5a,0x5f,0x7a, 0x57,0x5f,0x7a,0x5a,0x62,0x7d,0x5d,0x66,0x7f,0x5f,0x67,0x82,0x5f,0x67,0x82,0x61, 0x69,0x82,0x61,0x69,0x82,0x62,0x6a,0x83,0x63,0x6a,0x84,0x64,0x6b,0x85,0x65,0x6c, 0x86,0x66,0x6d,0x86,0x65,0x6c,0x86,0x64,0x6b,0x85,0x64,0x6b,0x85,0x66,0x6d,0x86, 0x68,0x70,0x89,0x6a,0x72,0x8a,0x6a,0x72,0x8a,0x6a,0x72,0x8a,0x66,0x6e,0x87,0x61, 0x6a,0x83,0x5e,0x66,0x81,0x5a,0x63,0x7e,0x5a,0x62,0x7d,0x59,0x61,0x7d,0x57,0x5f, 0x7b,0x5b,0x64,0x7e,0x74,0x7b,0x90,0x97,0x9b,0xa8,0xa0,0xa4,0xae,0xb0,0xb3,0xc1, 0x9f,0xa2,0xb9,0x93,0x96,0xad,0x93,0x94,0xa9,0x87,0x88,0x9f,0x76,0x76,0x8e,0x71, 0x71,0x89,0x6f,0x6e,0x88,0x6e,0x6d,0x88,0x6c,0x6b,0x85,0x6c,0x6a,0x85,0x6b,0x69, 0x85,0x6a,0x69,0x84,0x69,0x67,0x81,0x67,0x64,0x80,0x62,0x60,0x7a,0x59,0x58,0x6f, 0x34,0x37,0x41,0x32,0x35,0x3e,0x30,0x33,0x3c,0x2f,0x32,0x3a,0x32,0x34,0x3a,0x36, 0x39,0x3e,0x3a,0x3c,0x41,0x3d,0x3e,0x42,0x40,0x41,0x44,0x3e,0x40,0x44,0x3c,0x3d, 0x42,0x36,0x37,0x3d,0x34,0x36,0x3c,0x36,0x37,0x3d,0x31,0x33,0x39,0x2a,0x2c,0x32, 0x26,0x29,0x2f,0x25,0x27,0x2e,0x23,0x25,0x2c,0x24,0x26,0x2e,0x23,0x26,0x2c,0x22, 0x25,0x2c,0x20,0x22,0x28,0x1c,0x1e,0x24,0x1b,0x1e,0x23,0x1a,0x1c,0x22,0x46,0x48, 0x4d,0x1b,0x1e,0x24,0x1d,0x1e,0x26,0x1e,0x20,0x26,0x1c,0x1e,0x24,0x1e,0x20,0x26, 0x47,0x49,0x4d,0x7f,0x80,0x83,0x7d,0x7e,0x80,0x78,0x79,0x7c,0x6c,0x6c,0x6f,0x12, 0x13,0x19,0x12,0x13,0x19,0x10,0x12,0x17,0x11,0x12,0x17,0x0e,0x10,0x15,0x0e,0x10, 0x15,0x0e,0x0f,0x14,0x0c,0x0e,0x12,0x0c,0x0d,0x11,0x0a,0x0b,0x0f,0x0a,0x0b,0x0e, 0x09,0x0a,0x0d,0x08,0x09,0x0c,0x07,0x08,0x0a,0x06,0x07,0x0a,0x06,0x07,0x09,0x06, 0x06,0x07,0x05,0x06,0x07,0x04,0x04,0x06,0x04,0x04,0x06,0x03,0x03,0x04,0x02,0x02, 0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x1a,0x1d,0x25,0xab,0xb3,0xc8,0xbb,0xc1,0xd2,0x8b,0x95,0xb1, 0x70,0x7a,0x9d,0x68,0x68,0x8e,0x68,0x72,0x96,0x77,0x80,0x99,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xa2,0xa2,0xa2, 0xff,0xff,0xff,0xff,0xff,0xff,0xe6,0xe6,0xe6,0x29,0x29,0x29,0xe7,0xe7,0xe7,0xff, 0xff,0xff,0xff,0xff,0xff,0xe7,0xe7,0xe7,0x19,0x18,0x25,0x3e,0x3c,0x5c,0x51,0x51, 0x7b,0x63,0x4b,0x67,0x64,0x53,0x74,0x71,0x7d,0xa0,0xb9,0xb7,0xc1,0x5d,0x4a,0x5c, 0x6c,0x57,0x6d,0x6c,0x5e,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5a,0x5f,0x70,0x52, 0x50,0x7b,0x63,0x4b,0x67,0x63,0x53,0x77,0x54,0x50,0x79,0x54,0x50,0x79,0x54,0x50, 0x79,0x54,0x50,0x79,0x54,0x50,0x79,0x54,0x50,0x79,0x55,0x50,0x79,0x55,0x50,0x79, 0x57,0x50,0x79,0x5a,0x52,0x79,0x5a,0x52,0x79,0x5c,0x52,0x79,0x5c,0x52,0x79,0x5e, 0x53,0x79,0x5e,0x53,0x79,0x5e,0x53,0x79,0x60,0x53,0x77,0x5c,0x44,0x5f,0x57,0x40, 0x5a,0x6d,0x78,0x97,0x1a,0x1b,0x1c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x36,0x3a,0x47,0xb3,0xba,0xcc,0x98,0xa2,0xba,0x28, 0x23,0x2b,0x0c,0x0b,0x0e,0x20,0x24,0x2f,0x32,0x39,0x4c,0x54,0x5f,0x7e,0x55,0x60, 0x84,0x3c,0x3d,0x5b,0x02,0x03,0x03,0x03,0x03,0x04,0x03,0x03,0x04,0x04,0x05,0x05, 0x04,0x05,0x05,0x05,0x05,0x06,0x05,0x05,0x06,0x05,0x06,0x06,0x06,0x06,0x07,0x64, 0x66,0x7c,0x5e,0x6a,0x8f,0x5a,0x66,0x8c,0x5b,0x67,0x93,0x53,0x50,0x79,0x52,0x4f, 0x78,0x52,0x4f,0x79,0x52,0x4f,0x7a,0x52,0x52,0x7b,0x52,0x55,0x7e,0x52,0x5d,0x86, 0x52,0x53,0x7a,0x5b,0x64,0x8b,0xa7,0xa6,0xae,0x32,0x28,0x30,0x3d,0x32,0x3c,0x0b, 0x0c,0x0e,0x0b,0x0c,0x0e,0x0b,0x0c,0x0e,0x0b,0x0c,0x0e,0x0a,0x0b,0x0d,0x0a,0x0b, 0x0d,0x37,0x2c,0x35,0x2a,0x20,0x25,0x21,0x1a,0x1d,0x7c,0x7f,0x91,0x5f,0x6a,0x8f, 0x4c,0x49,0x72,0x52,0x4b,0x6c,0x5b,0x51,0x78,0x5b,0x52,0x79,0x5a,0x52,0x79,0x55, 0x50,0x79,0x53,0x50,0x79,0x55,0x51,0x79,0x50,0x49,0x6e,0x47,0x40,0x5e,0x5b,0x52, 0x77,0x52,0x48,0x64,0x06,0x07,0x08,0x06,0x06,0x07,0x06,0x06,0x08,0x06,0x06,0x08, 0x06,0x07,0x08,0x06,0x06,0x08,0x06,0x06,0x08,0x06,0x07,0x09,0x06,0x06,0x07,0x05, 0x06,0x06,0x52,0x5d,0x87,0x57,0x58,0x84,0x49,0x46,0x67,0x4f,0x48,0x69,0x5e,0x53, 0x75,0x5f,0x52,0x75,0x5e,0x52,0x76,0x5e,0x53,0x76,0x5e,0x53,0x76,0x5e,0x53,0x76, 0x5e,0x53,0x76,0x5e,0x53,0x76,0x56,0x4a,0x69,0x67,0x5a,0x81,0x52,0x44,0x5d,0x0a, 0x0b,0x0c,0x2d,0x2d,0x2f,0x0a,0x0b,0x0d,0x0e,0x0e,0x13,0x14,0x13,0x19,0x15,0x14, 0x1a,0x17,0x16,0x1d,0x18,0x17,0x1d,0x1a,0x18,0x20,0x1e,0x1c,0x24,0x24,0x21,0x2b, 0x2a,0x27,0x31,0x2c,0x28,0x33,0x32,0x2c,0x38,0x3d,0x35,0x43,0x3e,0x36,0x45,0x3f, 0x37,0x45,0x44,0x3b,0x4a,0x44,0x3b,0x4a,0x44,0x3a,0x49,0x40,0x37,0x45,0x4e,0x42, 0x53,0x5d,0x4e,0x65,0x5f,0x4e,0x67,0x5c,0x4b,0x64,0x5a,0x48,0x64,0x5c,0x4a,0x66, 0x5d,0x4a,0x66,0x5d,0x4b,0x67,0x54,0x46,0x60,0x31,0x28,0x3e,0x31,0x2a,0x3f,0x1e, 0x1f,0x2d,0x1b,0x18,0x1f,0x4d,0x3f,0x4f,0x7c,0x72,0x7e,0x79,0x80,0x94,0x63,0x6d, 0x89,0x70,0x7a,0x98,0x76,0x7f,0x9d,0x74,0x7c,0x99,0x74,0x79,0x95,0x72,0x76,0x91, 0x6e,0x72,0x8d,0x6b,0x6e,0x8a,0x64,0x68,0x83,0x59,0x5f,0x76,0x48,0x4d,0x63,0x3d, 0x41,0x54,0x35,0x39,0x4a,0x31,0x33,0x43,0x2e,0x2f,0x3f,0x2c,0x2c,0x3c,0x36,0x34, 0x45,0x42,0x3e,0x53,0x3c,0x38,0x4d,0x45,0x40,0x56,0x4d,0x44,0x5e,0x4f,0x46,0x5f, 0x58,0x50,0x6c,0x59,0x52,0x71,0x50,0x52,0x72,0x58,0x61,0x82,0x49,0x50,0x65,0x50, 0x57,0x6e,0x54,0x5b,0x75,0x54,0x5b,0x76,0x52,0x5a,0x72,0x4d,0x54,0x6b,0x46,0x4c, 0x65,0x47,0x49,0x62,0x47,0x46,0x60,0x46,0x44,0x5d,0x3a,0x37,0x4b,0x45,0x41,0x58, 0x52,0x4d,0x62,0x51,0x4c,0x5c,0x4c,0x46,0x54,0x4e,0x46,0x56,0x44,0x3c,0x4f,0x55, 0x50,0x64,0x46,0x41,0x56,0x45,0x3e,0x53,0x45,0x3f,0x54,0x48,0x46,0x5b,0x4b,0x4a, 0x60,0x4f,0x4f,0x67,0x54,0x58,0x71,0x55,0x5b,0x76,0x57,0x5f,0x7a,0x5e,0x65,0x80, 0x5e,0x67,0x82,0x5e,0x66,0x81,0x60,0x67,0x82,0x61,0x68,0x82,0x61,0x69,0x82,0x62, 0x6a,0x83,0x64,0x6b,0x85,0x63,0x6a,0x84,0x64,0x6b,0x85,0x65,0x6c,0x86,0x65,0x6c, 0x86,0x62,0x6a,0x84,0x64,0x6b,0x85,0x67,0x6f,0x88,0x6a,0x72,0x8a,0x6b,0x73,0x8a, 0x6a,0x72,0x8a,0x68,0x70,0x89,0x66,0x6f,0x88,0x61,0x6a,0x83,0x5f,0x67,0x82,0x5e, 0x66,0x81,0x5c,0x65,0x7f,0x5b,0x64,0x7e,0x6d,0x75,0x8c,0x90,0x95,0xa3,0xaa,0xac, 0xb5,0xc0,0xc1,0xcb,0xb0,0xb4,0xc7,0xa2,0xa3,0xb9,0x92,0x95,0xac,0x82,0x85,0x9d, 0x77,0x78,0x91,0x75,0x75,0x8e,0x72,0x72,0x8c,0x71,0x70,0x89,0x6f,0x6f,0x89,0x6e, 0x6d,0x88,0x6e,0x6c,0x86,0x6c,0x6b,0x85,0x6b,0x6a,0x85,0x68,0x65,0x81,0x64,0x62, 0x7c,0x5e,0x5b,0x74,0x38,0x3b,0x46,0x36,0x39,0x42,0x34,0x37,0x40,0x34,0x37,0x3f, 0x36,0x39,0x40,0x3e,0x40,0x45,0x46,0x47,0x4b,0x4d,0x4e,0x50,0x52,0x52,0x55,0x51, 0x52,0x55,0x4d,0x4e,0x52,0x44,0x46,0x4b,0x3e,0x40,0x46,0x3a,0x3d,0x43,0x36,0x38, 0x3e,0x55,0x58,0x5e,0x2a,0x2c,0x33,0x2a,0x2c,0x33,0x29,0x2b,0x33,0x2a,0x2c,0x34, 0x28,0x2a,0x32,0x26,0x29,0x30,0x22,0x25,0x2c,0x21,0x23,0x2a,0x30,0x32,0x3a,0x63, 0x64,0x69,0x4e,0x51,0x55,0x73,0x75,0x79,0x1f,0x22,0x29,0x23,0x26,0x2d,0x53,0x55, 0x59,0xa2,0xa3,0xa5,0x73,0x75,0x78,0x7a,0x7b,0x7f,0x69,0x6b,0x6e,0x4b,0x4d,0x51, 0x77,0x78,0x7b,0x6f,0x6f,0x74,0x70,0x72,0x75,0x26,0x27,0x2e,0x14,0x16,0x1b,0x29, 0x2b,0x30,0x4e,0x4f,0x53,0x5a,0x5c,0x5e,0x29,0x2b,0x2f,0x35,0x36,0x39,0x34,0x35, 0x39,0x33,0x34,0x37,0x33,0x34,0x37,0x21,0x21,0x24,0x08,0x09,0x0c,0x07,0x08,0x0b, 0x07,0x08,0x0a,0x06,0x07,0x09,0x06,0x06,0x08,0x05,0x06,0x07,0x04,0x04,0x06,0x03, 0x04,0x05,0x03,0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0x0c,0x0e,0xc4,0xc9, 0xd6,0xbc,0xc2,0xd3,0x71,0x7c,0x9e,0x68,0x66,0x8b,0x74,0x69,0x8a,0x68,0x72,0x97, 0x3c,0x41,0x52,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xec,0xec,0xec,0xff,0xff,0xff,0xfc,0xfc,0xfc,0x88,0x88,0x88,0x3c,0x3c,0x3c, 0xfc,0xfc,0xfc,0xff,0xff,0xff,0xfd,0xfd,0xfd,0xb1,0xb0,0xb1,0x23,0x22,0x34,0x45, 0x42,0x67,0x52,0x52,0x7c,0x64,0x4e,0x6d,0x64,0x52,0x72,0x7b,0x85,0xa7,0xbb,0xb6, 0xbd,0x61,0x4d,0x60,0x72,0x5d,0x74,0x32,0x33,0x45,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x1b,0x1c,0x1e,0x61,0x6b,0x91,0x62,0x53,0x77,0x62,0x4a,0x66,0x5a,0x52,0x79,0x55, 0x50,0x79,0x55,0x50,0x79,0x55,0x50,0x79,0x56,0x50,0x79,0x57,0x50,0x79,0x57,0x50, 0x79,0x5a,0x52,0x79,0x5a,0x52,0x79,0x5a,0x52,0x79,0x5b,0x52,0x79,0x5c,0x52,0x79, 0x5e,0x53,0x79,0x5e,0x53,0x79,0x5e,0x53,0x79,0x60,0x53,0x77,0x60,0x53,0x77,0x64, 0x53,0x76,0x58,0x41,0x5b,0x64,0x4e,0x6c,0x5b,0x65,0x80,0x05,0x05,0x05,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x67,0x70,0x86, 0x78,0x80,0xa1,0x3b,0x3b,0x4d,0x03,0x03,0x03,0x1d,0x21,0x2b,0x02,0x02,0x02,0x11, 0x13,0x19,0x56,0x42,0x5b,0x4b,0x35,0x4b,0x52,0x42,0x5b,0x1c,0x16,0x1a,0x03,0x03, 0x04,0x03,0x03,0x04,0x04,0x05,0x05,0x04,0x05,0x05,0x05,0x05,0x06,0x05,0x06,0x06, 0x05,0x06,0x06,0x60,0x62,0x7a,0x5e,0x6b,0x91,0x5a,0x65,0x8b,0x5b,0x68,0x95,0x52, 0x4f,0x79,0x51,0x4f,0x79,0x51,0x50,0x79,0x51,0x52,0x7a,0x51,0x53,0x7c,0x52,0x57, 0x81,0x52,0x5c,0x86,0x52,0x52,0x7a,0x5c,0x69,0x8e,0xa8,0xa6,0xad,0x32,0x27,0x2f, 0x3e,0x32,0x3c,0x0a,0x0b,0x0d,0x0a,0x0a,0x0c,0x0a,0x0a,0x0c,0x0a,0x0a,0x0b,0x0a, 0x0a,0x0c,0x0a,0x0a,0x0c,0x37,0x2c,0x35,0x2b,0x21,0x27,0x21,0x19,0x1e,0x73,0x76, 0x84,0x68,0x74,0x95,0x4f,0x4d,0x77,0x50,0x48,0x69,0x5a,0x51,0x78,0x5a,0x52,0x79, 0x5a,0x52,0x79,0x55,0x50,0x79,0x55,0x50,0x79,0x54,0x51,0x79,0x50,0x4a,0x6f,0x45, 0x3f,0x5c,0x5a,0x51,0x78,0x58,0x4c,0x6b,0x04,0x05,0x06,0x05,0x05,0x06,0x05,0x05, 0x06,0x05,0x06,0x06,0x05,0x06,0x06,0x05,0x06,0x06,0x05,0x06,0x06,0x06,0x06,0x07, 0x06,0x06,0x07,0x05,0x06,0x06,0x49,0x53,0x77,0x58,0x58,0x87,0x4b,0x48,0x6a,0x4d, 0x45,0x64,0x5e,0x53,0x75,0x5e,0x52,0x75,0x5e,0x52,0x76,0x5e,0x53,0x76,0x5e,0x53, 0x76,0x5e,0x53,0x76,0x5e,0x53,0x76,0x5e,0x53,0x76,0x56,0x4a,0x6a,0x65,0x57,0x7b, 0x5a,0x4d,0x68,0x08,0x08,0x0a,0x24,0x25,0x25,0x14,0x14,0x17,0x0a,0x0b,0x0f,0x10, 0x10,0x15,0x14,0x13,0x19,0x15,0x14,0x1a,0x16,0x16,0x1b,0x17,0x17,0x1d,0x18,0x17, 0x1e,0x1c,0x1a,0x22,0x22,0x1f,0x28,0x27,0x23,0x2d,0x2c,0x27,0x33,0x38,0x31,0x3e, 0x3d,0x35,0x43,0x3e,0x36,0x45,0x42,0x38,0x48,0x43,0x39,0x49,0x40,0x38,0x47,0x3e, 0x36,0x45,0x41,0x37,0x46,0x51,0x43,0x55,0x61,0x4f,0x68,0x58,0x48,0x61,0x59,0x47, 0x63,0x5c,0x4a,0x65,0x5c,0x49,0x64,0x5c,0x4a,0x66,0x5d,0x4b,0x68,0x39,0x2f,0x44, 0x31,0x2a,0x3e,0x2e,0x2a,0x40,0x12,0x12,0x17,0x4b,0x3e,0x4d,0x4d,0x3e,0x4f,0xb2, 0xaf,0xb5,0x61,0x6a,0x83,0x72,0x7d,0x9b,0x79,0x82,0x9f,0x7c,0x85,0x9e,0x7a,0x82, 0x9d,0x78,0x7e,0x98,0x76,0x7d,0x96,0x72,0x79,0x92,0x6e,0x74,0x8d,0x6a,0x70,0x8b, 0x61,0x69,0x84,0x5e,0x63,0x7f,0x5a,0x5b,0x74,0x3a,0x3c,0x4e,0x29,0x2c,0x39,0x24, 0x24,0x30,0x27,0x26,0x32,0x2d,0x2a,0x39,0x2b,0x29,0x38,0x2b,0x29,0x3a,0x2d,0x2a, 0x3a,0x30,0x2b,0x3c,0x38,0x32,0x44,0x4b,0x41,0x58,0x59,0x50,0x69,0x5a,0x5a,0x79, 0x3f,0x45,0x5b,0x4a,0x51,0x68,0x54,0x5b,0x73,0x56,0x5e,0x76,0x57,0x5e,0x75,0x56, 0x5d,0x72,0x52,0x58,0x6e,0x4f,0x56,0x6e,0x49,0x50,0x69,0x46,0x46,0x5f,0x45,0x44, 0x5d,0x44,0x42,0x5a,0x48,0x46,0x5e,0x4b,0x46,0x5d,0x50,0x49,0x5e,0x50,0x48,0x5d, 0x47,0x40,0x54,0x52,0x4f,0x5f,0x42,0x3e,0x51,0x44,0x3e,0x54,0x45,0x3f,0x54,0x48, 0x40,0x55,0x4a,0x45,0x5a,0x50,0x4c,0x63,0x4f,0x4e,0x66,0x4f,0x50,0x69,0x53,0x58, 0x74,0x56,0x5e,0x7a,0x5a,0x62,0x7e,0x5e,0x66,0x80,0x5e,0x66,0x81,0x60,0x68,0x82, 0x62,0x69,0x83,0x63,0x6b,0x85,0x66,0x6f,0x88,0x63,0x6b,0x85,0x62,0x6a,0x83,0x62, 0x6a,0x83,0x64,0x6b,0x85,0x63,0x6a,0x84,0x60,0x68,0x82,0x62,0x6a,0x84,0x68,0x70, 0x89,0x6a,0x72,0x8a,0x6b,0x73,0x8a,0x6c,0x74,0x8b,0x6a,0x72,0x8a,0x68,0x70,0x88, 0x68,0x70,0x89,0x68,0x70,0x89,0x67,0x6f,0x88,0x5f,0x67,0x82,0x68,0x70,0x89,0x7f, 0x86,0x99,0x99,0x9d,0xaa,0xba,0xbc,0xc7,0xb7,0xb9,0xcb,0xaa,0xac,0xc0,0x98,0x9a, 0xb2,0x88,0x8b,0xa5,0x7a,0x7d,0x98,0x76,0x77,0x91,0x76,0x75,0x8f,0x75,0x75,0x8d, 0x72,0x72,0x8c,0x72,0x71,0x8b,0x6f,0x6e,0x88,0x6e,0x6d,0x87,0x6c,0x6a,0x85,0x69, 0x68,0x82,0x65,0x64,0x7d,0x62,0x60,0x7a,0x3a,0x3e,0x48,0x37,0x3a,0x45,0x36,0x3a, 0x43,0x38,0x3b,0x44,0x3f,0x42,0x49,0x49,0x4a,0x4f,0x52,0x53,0x57,0x57,0x58,0x5a, 0x5d,0x5e,0x5f,0x5b,0x5c,0x5e,0x53,0x55,0x59,0x4a,0x4c,0x52,0x45,0x47,0x4f,0x40, 0x42,0x4b,0x38,0x3a,0x43,0x65,0x67,0x6e,0x4e,0x50,0x58,0x2e,0x32,0x3a,0x31,0x34, 0x3e,0x2e,0x31,0x3a,0x2c,0x2f,0x38,0x2a,0x2d,0x36,0x29,0x2c,0x34,0x3a,0x3c,0x43, 0x5d,0x5f,0x64,0x3f,0x42,0x49,0x26,0x29,0x30,0x22,0x24,0x2b,0x25,0x27,0x2f,0x83, 0x84,0x88,0xa0,0xa0,0xa4,0x71,0x72,0x76,0x41,0x43,0x49,0x52,0x53,0x58,0x2f,0x31, 0x37,0x2a,0x2c,0x32,0x37,0x39,0x40,0x27,0x29,0x31,0x62,0x64,0x68,0x6d,0x6f,0x74, 0x66,0x68,0x6c,0x5b,0x5c,0x61,0x5c,0x5d,0x62,0x4b,0x4c,0x51,0x4a,0x4b,0x50,0x37, 0x39,0x3c,0x35,0x37,0x3a,0x35,0x35,0x39,0x33,0x35,0x37,0x55,0x56,0x59,0x1b,0x1b, 0x1f,0x09,0x09,0x0c,0x07,0x08,0x0b,0x07,0x07,0x0a,0x06,0x07,0x09,0x06,0x06,0x08, 0x05,0x06,0x07,0x04,0x05,0x06,0x04,0x04,0x06,0x02,0x03,0x04,0x02,0x02,0x03,0x02, 0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x0e,0x0f,0x13,0xad,0xb4,0xc9,0x92,0x9b,0xb6,0x68,0x72,0x96,0x75,0x69, 0x89,0x78,0x69,0x86,0x66,0x6f,0x92,0x07,0x07,0x09,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x85,0x85,0x85,0xfc,0xfc,0xfc,0xff,0xff,0xff,0xeb,0xeb,0xeb,0x1a,0x1a, 0x1a,0x92,0x92,0x92,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xfd,0xfd,0x5a,0x58,0x5c, 0x31,0x2f,0x48,0x4b,0x48,0x71,0x52,0x52,0x7d,0x63,0x4b,0x69,0x64,0x4d,0x6b,0x7e, 0x8a,0xa9,0xb1,0xab,0xb3,0x64,0x50,0x64,0x78,0x66,0x81,0x0b,0x0c,0x0e,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x59,0x5d,0x6c,0x52,0x54,0x7e,0x62,0x4a,0x66, 0x64,0x53,0x73,0x5a,0x52,0x79,0x57,0x50,0x79,0x57,0x50,0x79,0x5a,0x52,0x79,0x5a, 0x52,0x79,0x5a,0x52,0x79,0x5a,0x52,0x79,0x5b,0x52,0x79,0x5c,0x52,0x79,0x5c,0x52, 0x79,0x5e,0x53,0x79,0x5e,0x53,0x79,0x5e,0x53,0x79,0x60,0x53,0x77,0x60,0x53,0x77, 0x60,0x53,0x77,0x60,0x53,0x77,0x64,0x50,0x71,0x56,0x3e,0x57,0x64,0x50,0x6f,0x51, 0x58,0x67,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x14,0x16,0x1b,0x54,0x5d,0x7a,0x2b,0x2b,0x3b,0x03,0x03,0x04,0x39,0x40,0x54, 0x02,0x02,0x02,0x02,0x02,0x02,0x30,0x23,0x31,0x41,0x2c,0x3f,0x4d,0x37,0x4e,0x35, 0x2c,0x37,0x17,0x11,0x15,0x02,0x03,0x03,0x02,0x03,0x03,0x03,0x03,0x04,0x04,0x04, 0x05,0x05,0x05,0x06,0x05,0x06,0x06,0x61,0x63,0x79,0x62,0x6d,0x93,0x5b,0x65,0x8e, 0x5d,0x68,0x96,0x51,0x4f,0x79,0x51,0x50,0x79,0x51,0x50,0x79,0x52,0x52,0x7b,0x51, 0x54,0x7c,0x52,0x5d,0x84,0x52,0x5c,0x86,0x52,0x54,0x7c,0x62,0x6d,0x92,0xab,0xa9, 0xb0,0x31,0x27,0x2e,0x3e,0x32,0x3d,0x0a,0x0a,0x0b,0x0a,0x0a,0x0b,0x09,0x0a,0x0b, 0x09,0x0a,0x0b,0x09,0x0a,0x0b,0x09,0x0a,0x0b,0x36,0x2c,0x34,0x29,0x20,0x25,0x22, 0x1a,0x1f,0x64,0x62,0x6d,0x73,0x7d,0x9b,0x51,0x53,0x7e,0x4d,0x47,0x6b,0x58,0x50, 0x77,0x5a,0x52,0x79,0x58,0x50,0x79,0x57,0x50,0x79,0x52,0x4f,0x7a,0x54,0x50,0x79, 0x50,0x4a,0x70,0x43,0x3d,0x59,0x5a,0x53,0x77,0x5f,0x53,0x75,0x04,0x04,0x05,0x04, 0x04,0x05,0x05,0x05,0x06,0x04,0x05,0x06,0x04,0x05,0x06,0x04,0x05,0x06,0x05,0x06, 0x06,0x04,0x05,0x06,0x05,0x05,0x06,0x05,0x05,0x06,0x42,0x4a,0x6a,0x59,0x5b,0x88, 0x4e,0x4b,0x6f,0x4b,0x44,0x61,0x5e,0x52,0x75,0x5e,0x52,0x75,0x5e,0x53,0x76,0x5e, 0x53,0x76,0x5e,0x53,0x76,0x5e,0x53,0x76,0x5e,0x53,0x76,0x5e,0x53,0x76,0x58,0x4a, 0x6a,0x62,0x55,0x7b,0x5d,0x51,0x70,0x13,0x11,0x15,0x1d,0x1e,0x1f,0x19,0x19,0x1c, 0x06,0x07,0x0a,0x0a,0x0a,0x0d,0x0d,0x0d,0x11,0x11,0x11,0x16,0x14,0x14,0x19,0x15, 0x15,0x1b,0x16,0x16,0x1c,0x18,0x17,0x1d,0x19,0x18,0x1f,0x1d,0x1a,0x23,0x20,0x1e, 0x27,0x27,0x24,0x2d,0x31,0x2b,0x37,0x36,0x2f,0x3c,0x3a,0x32,0x40,0x3c,0x34,0x41, 0x3e,0x35,0x44,0x3d,0x35,0x43,0x39,0x32,0x3f,0x40,0x37,0x46,0x5a,0x4c,0x63,0x59, 0x49,0x63,0x55,0x44,0x5d,0x58,0x47,0x61,0x5a,0x47,0x63,0x5c,0x49,0x65,0x5c,0x4a, 0x65,0x52,0x43,0x5c,0x30,0x28,0x3d,0x2f,0x29,0x3e,0x26,0x25,0x38,0x24,0x1f,0x27, 0x4b,0x3e,0x4d,0x66,0x5a,0x67,0x7f,0x83,0x90,0x6c,0x73,0x8c,0x7f,0x89,0xa4,0x85, 0x8e,0xa7,0x88,0x8f,0xa7,0x86,0x8d,0xa4,0x80,0x88,0xa1,0x7e,0x85,0x9e,0x78,0x80, 0x98,0x78,0x80,0x99,0x7d,0x83,0x9c,0x7f,0x86,0x9c,0x76,0x7e,0x96,0x5f,0x60,0x7d, 0x41,0x40,0x52,0x2a,0x2a,0x36,0x24,0x23,0x2f,0x24,0x23,0x2f,0x25,0x25,0x31,0x29, 0x27,0x35,0x2d,0x2b,0x3a,0x2d,0x2a,0x3b,0x32,0x2d,0x3f,0x4a,0x42,0x58,0x59,0x50, 0x68,0x5f,0x59,0x75,0x3d,0x3c,0x52,0x43,0x48,0x60,0x4c,0x53,0x6c,0x52,0x5a,0x71, 0x5a,0x61,0x76,0x64,0x6b,0x7e,0x69,0x6e,0x81,0x63,0x6a,0x7e,0x54,0x5c,0x73,0x46, 0x4a,0x63,0x45,0x46,0x5e,0x44,0x43,0x5c,0x46,0x45,0x5e,0x4a,0x47,0x5e,0x4e,0x49, 0x60,0x52,0x4a,0x61,0x51,0x4a,0x62,0x5c,0x59,0x6f,0x4c,0x48,0x5d,0x3c,0x38,0x4c, 0x42,0x3c,0x50,0x4b,0x44,0x59,0x4d,0x45,0x5a,0x4e,0x48,0x5d,0x4f,0x4a,0x60,0x4e, 0x4d,0x64,0x4d,0x4e,0x66,0x50,0x56,0x70,0x51,0x59,0x71,0x54,0x5b,0x74,0x56,0x5f, 0x78,0x5c,0x64,0x7f,0x5d,0x66,0x80,0x5e,0x66,0x81,0x63,0x6a,0x84,0x62,0x6a,0x83, 0x62,0x6a,0x83,0x62,0x6a,0x83,0x62,0x6a,0x83,0x63,0x6a,0x84,0x5d,0x65,0x7f,0x5e, 0x66,0x81,0x62,0x6a,0x84,0x66,0x6f,0x88,0x6a,0x72,0x8a,0x6e,0x76,0x8d,0x6e,0x76, 0x8d,0x6e,0x76,0x8c,0x6e,0x76,0x8c,0x73,0x7a,0x90,0x72,0x79,0x8f,0x67,0x70,0x88, 0x62,0x6a,0x83,0x6f,0x77,0x8e,0x7c,0x83,0x96,0xa4,0xa8,0xb9,0xac,0xb0,0xc4,0xa5, 0xa8,0xbd,0x90,0x94,0xae,0x84,0x89,0xa5,0x7e,0x82,0x9e,0x7e,0x81,0x9c,0x7b,0x7d, 0x96,0x78,0x79,0x92,0x76,0x76,0x8f,0x73,0x72,0x8c,0x70,0x70,0x8a,0x70,0x6f,0x89, 0x6e,0x6d,0x87,0x6b,0x6a,0x84,0x66,0x64,0x7e,0x65,0x64,0x7e,0x3d,0x41,0x4c,0x3a, 0x3e,0x47,0x39,0x3d,0x46,0x3e,0x41,0x4a,0x46,0x48,0x4f,0x4d,0x4f,0x55,0x55,0x56, 0x5a,0x5a,0x5c,0x60,0x5e,0x5e,0x63,0x5a,0x5c,0x62,0x52,0x56,0x5d,0x4e,0x50,0x59, 0x4a,0x4d,0x57,0x67,0x6a,0x72,0x55,0x59,0x63,0x44,0x48,0x51,0x71,0x74,0x7b,0x61, 0x65,0x6d,0x7e,0x81,0x89,0x7b,0x7d,0x83,0x5c,0x5e,0x65,0x32,0x35,0x3e,0x32,0x35, 0x3e,0x50,0x52,0x59,0x5d,0x5e,0x65,0x3e,0x41,0x48,0x3a,0x3d,0x44,0x2e,0x32,0x3a, 0x47,0x4a,0x51,0x80,0x82,0x87,0xa0,0xa2,0xa6,0x60,0x63,0x6a,0x50,0x52,0x58,0x4d, 0x4e,0x54,0x4a,0x4c,0x51,0x3c,0x3e,0x44,0x2e,0x31,0x39,0x2b,0x2e,0x36,0x27,0x2a, 0x33,0x30,0x32,0x3b,0x4c,0x4f,0x55,0x65,0x67,0x6c,0x31,0x34,0x3a,0x22,0x25,0x2c, 0x65,0x66,0x6a,0x12,0x14,0x1a,0x11,0x12,0x17,0x0e,0x10,0x15,0x0e,0x0f,0x13,0x45, 0x45,0x48,0x43,0x44,0x47,0x0a,0x0a,0x0d,0x09,0x0a,0x0d,0x08,0x08,0x0b,0x07,0x08, 0x0a,0x06,0x06,0x09,0x06,0x06,0x08,0x05,0x05,0x06,0x04,0x04,0x06,0x03,0x04,0x05, 0x03,0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0x10,0x14,0xa4,0xac,0xc2,0x7e, 0x88,0xa8,0x68,0x69,0x8f,0x78,0x69,0x87,0x78,0x68,0x85,0x4c,0x53,0x6e,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x0e,0x0e,0x0e,0xec,0xec,0xec,0xff,0xff,0xff,0xfd,0xfd,0xfd,0x98, 0x98,0x98,0x00,0x00,0x00,0xda,0xda,0xda,0xff,0xff,0xff,0xff,0xff,0xff,0xf4,0xf4, 0xf4,0x1a,0x14,0x1b,0x3f,0x3a,0x58,0x50,0x4d,0x79,0x52,0x54,0x7e,0x64,0x4c,0x69, 0x63,0x4c,0x69,0x77,0x83,0xa4,0xa1,0x98,0xa4,0x6b,0x56,0x6c,0x68,0x69,0x8f,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0d,0x0e,0x0f,0x62,0x6e, 0x92,0x64,0x53,0x76,0x5f,0x47,0x64,0x5f,0x53,0x77,0x5a,0x52,0x79,0x5a,0x52,0x79, 0x5a,0x52,0x79,0x5b,0x52,0x79,0x5b,0x52,0x79,0x5c,0x52,0x79,0x5c,0x52,0x79,0x5c, 0x52,0x79,0x5e,0x53,0x79,0x5e,0x53,0x79,0x5e,0x53,0x79,0x5e,0x53,0x79,0x60,0x53, 0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x63,0x4b,0x67, 0x53,0x3b,0x53,0x52,0x50,0x7b,0x3c,0x3f,0x45,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4f,0x58,0x73,0x46,0x4e,0x68,0x49,0x52, 0x6d,0x4b,0x55,0x71,0x00,0x00,0x00,0x02,0x02,0x02,0x07,0x05,0x07,0x46,0x2f,0x44, 0x45,0x2f,0x44,0x41,0x3e,0x58,0x2f,0x23,0x2a,0x06,0x06,0x07,0x02,0x03,0x03,0x02, 0x03,0x03,0x03,0x03,0x04,0x04,0x04,0x05,0x04,0x04,0x05,0x52,0x57,0x6b,0x63,0x6e, 0x92,0x5c,0x68,0x8f,0x60,0x6e,0x9a,0x51,0x4f,0x7a,0x52,0x52,0x7b,0x52,0x52,0x7b, 0x52,0x52,0x7c,0x52,0x56,0x7f,0x52,0x5b,0x83,0x52,0x5d,0x86,0x52,0x53,0x7c,0x64, 0x70,0x94,0xb0,0xae,0xb2,0x31,0x26,0x2e,0x3e,0x31,0x3c,0x08,0x08,0x0a,0x08,0x08, 0x0a,0x08,0x08,0x0a,0x07,0x08,0x09,0x08,0x08,0x0a,0x07,0x08,0x09,0x37,0x2b,0x33, 0x2a,0x21,0x26,0x23,0x1b,0x20,0x51,0x4e,0x57,0x84,0x8d,0xa6,0x54,0x5f,0x88,0x4e, 0x49,0x6e,0x55,0x4f,0x77,0x5a,0x52,0x79,0x5a,0x52,0x79,0x57,0x50,0x79,0x52,0x4f, 0x7a,0x52,0x4f,0x7a,0x50,0x4c,0x72,0x40,0x3c,0x58,0x59,0x51,0x77,0x67,0x5c,0x82, 0x04,0x04,0x05,0x04,0x04,0x05,0x04,0x04,0x05,0x03,0x04,0x05,0x04,0x05,0x06,0x04, 0x05,0x06,0x04,0x05,0x06,0x04,0x05,0x06,0x05,0x05,0x06,0x04,0x04,0x06,0x38,0x3f, 0x59,0x58,0x5b,0x8b,0x4d,0x4a,0x71,0x4b,0x43,0x61,0x5d,0x51,0x73,0x5e,0x52,0x76, 0x5e,0x53,0x76,0x5e,0x53,0x76,0x5e,0x53,0x76,0x5e,0x53,0x76,0x5e,0x53,0x76,0x5e, 0x53,0x76,0x56,0x4c,0x6b,0x5c,0x4f,0x72,0x5b,0x51,0x73,0x22,0x1c,0x25,0x19,0x19, 0x1a,0x2f,0x2f,0x30,0x06,0x07,0x09,0x08,0x09,0x0b,0x08,0x09,0x0c,0x0a,0x0b,0x0d, 0x0d,0x0c,0x11,0x0f,0x10,0x14,0x14,0x13,0x19,0x15,0x16,0x1c,0x17,0x16,0x1d,0x18, 0x17,0x1d,0x19,0x17,0x1f,0x1c,0x19,0x21,0x20,0x1c,0x25,0x25,0x21,0x2b,0x29,0x24, 0x2e,0x2c,0x27,0x33,0x2f,0x29,0x35,0x30,0x2b,0x36,0x2b,0x27,0x31,0x24,0x21,0x2a, 0x43,0x39,0x47,0x5b,0x4a,0x63,0x56,0x46,0x5e,0x56,0x46,0x5e,0x57,0x47,0x61,0x5b, 0x48,0x63,0x5c,0x4a,0x65,0x5c,0x49,0x64,0x3b,0x2f,0x44,0x30,0x29,0x3e,0x30,0x28, 0x3e,0x1b,0x1a,0x26,0x4c,0x3f,0x4d,0x4c,0x3f,0x4e,0x8c,0x8a,0x96,0x61,0x67,0x7b, 0x84,0x8d,0xa6,0x8c,0x93,0xac,0x8f,0x97,0xaf,0x90,0x97,0xad,0x8f,0x95,0xac,0x8b, 0x90,0xa6,0x86,0x8a,0xa1,0x89,0x91,0xa8,0x98,0x9e,0xb2,0x95,0x9a,0xad,0x8d,0x94, 0xa8,0x79,0x81,0x98,0x5d,0x64,0x82,0x46,0x42,0x54,0x2a,0x29,0x36,0x28,0x27,0x32, 0x26,0x25,0x32,0x2f,0x2c,0x3a,0x4b,0x42,0x57,0x4a,0x43,0x59,0x3d,0x37,0x4a,0x5d, 0x52,0x6c,0x58,0x53,0x72,0x55,0x56,0x72,0x3e,0x3c,0x51,0x42,0x41,0x58,0x46,0x46, 0x60,0x48,0x4e,0x68,0x56,0x5e,0x74,0x6a,0x70,0x83,0x6b,0x72,0x83,0x65,0x6c,0x7f, 0x5c,0x63,0x79,0x53,0x5b,0x72,0x48,0x4b,0x66,0x47,0x46,0x5f,0x46,0x45,0x5e,0x49, 0x46,0x5e,0x4b,0x47,0x5e,0x4f,0x4a,0x62,0x4f,0x4a,0x62,0x57,0x54,0x6a,0x60,0x5f, 0x75,0x4a,0x47,0x61,0x46,0x41,0x57,0x44,0x3d,0x51,0x48,0x41,0x55,0x4e,0x47,0x5c, 0x4d,0x46,0x5a,0x48,0x42,0x56,0x41,0x3e,0x51,0x42,0x43,0x58,0x4f,0x54,0x6a,0x5d, 0x62,0x78,0x52,0x57,0x6c,0x5f,0x68,0x80,0x5d,0x66,0x80,0x5c,0x65,0x7f,0x5d,0x66, 0x80,0x5e,0x66,0x81,0x63,0x6a,0x84,0x63,0x6a,0x84,0x62,0x6a,0x83,0x62,0x6a,0x83, 0x5d,0x65,0x7f,0x5c,0x64,0x7f,0x5e,0x66,0x80,0x62,0x6a,0x83,0x68,0x70,0x89,0x6f, 0x77,0x8e,0x75,0x7c,0x92,0x71,0x78,0x8e,0x70,0x77,0x8d,0x75,0x7c,0x90,0x73,0x7a, 0x90,0x6a,0x72,0x89,0x62,0x6b,0x85,0x66,0x6f,0x88,0x6c,0x74,0x8b,0x87,0x8c,0xa5, 0x8a,0x91,0xad,0x8d,0x91,0xad,0x89,0x8d,0xaa,0x86,0x8a,0xa7,0x86,0x8a,0xa6,0x86, 0x8a,0xa6,0x86,0x89,0xa3,0x7e,0x81,0x9b,0x7a,0x7a,0x94,0x78,0x78,0x91,0x73,0x74, 0x8d,0x72,0x71,0x8b,0x6f,0x6f,0x89,0x6d,0x6c,0x85,0x68,0x68,0x81,0x66,0x65,0x80, 0x3e,0x42,0x4d,0x3d,0x41,0x4b,0x40,0x43,0x4e,0x43,0x46,0x4e,0x4a,0x4e,0x55,0x52, 0x54,0x5b,0x56,0x59,0x5f,0x58,0x5b,0x61,0x54,0x56,0x5e,0x53,0x56,0x5f,0x4e,0x52, 0x5c,0x4a,0x4e,0x5a,0x63,0x67,0x71,0x7b,0x7e,0x86,0x46,0x49,0x55,0x3a,0x3e,0x4a, 0x40,0x44,0x50,0x5f,0x62,0x6c,0x41,0x45,0x51,0x43,0x47,0x52,0x85,0x87,0x8e,0x90, 0x92,0x97,0x4c,0x4e,0x55,0x6d,0x6d,0x71,0x7f,0x7f,0x81,0x6d,0x6e,0x71,0x6f,0x70, 0x73,0x79,0x7b,0x81,0x8d,0x8e,0x93,0xa6,0xa8,0xac,0x8f,0x91,0x97,0x6a,0x6e,0x76, 0x65,0x67,0x6e,0x5c,0x5e,0x66,0x56,0x58,0x5f,0x4e,0x50,0x57,0x49,0x4b,0x52,0x42, 0x45,0x4c,0x37,0x3a,0x42,0x33,0x36,0x3e,0x3b,0x3e,0x46,0x3d,0x3f,0x46,0x3f,0x42, 0x47,0x32,0x34,0x3a,0x25,0x27,0x2e,0x1b,0x1e,0x24,0x16,0x17,0x1e,0x12,0x13,0x18, 0x0e,0x0f,0x14,0x0e,0x0f,0x13,0x51,0x51,0x54,0x0b,0x0b,0x0f,0x0a,0x0b,0x0e,0x09, 0x09,0x0c,0x07,0x08,0x0b,0x07,0x08,0x0a,0x06,0x06,0x09,0x06,0x06,0x08,0x05,0x06, 0x07,0x04,0x04,0x06,0x03,0x04,0x05,0x02,0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x02, 0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x1a,0x1c,0x24,0x94,0x9d,0xb8,0x73,0x7e,0xa0,0x68,0x67,0x8c,0x78,0x68,0x83,0x78, 0x68,0x84,0x3a,0x39,0x4d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xb5,0xb5,0xb5,0xfd,0xfd,0xfd,0xff,0xff,0xff, 0xe9,0xe9,0xe9,0x00,0x00,0x00,0x00,0x00,0x00,0xf7,0xf7,0xf7,0xff,0xff,0xff,0xff, 0xff,0xff,0xd1,0xd1,0xd1,0x24,0x1e,0x2b,0x50,0x42,0x5b,0x52,0x4f,0x7b,0x52,0x55, 0x81,0x64,0x4c,0x69,0x64,0x53,0x76,0x80,0x8a,0xaa,0x90,0x85,0x91,0x74,0x5f,0x78, 0x2b,0x2f,0x3a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x46,0x4b,0x57,0x52,0x52,0x7d,0x60,0x48,0x64,0x64,0x4f,0x6e,0x5c,0x52, 0x79,0x5c,0x52,0x79,0x5c,0x52,0x79,0x5c,0x52,0x79,0x5d,0x52,0x79,0x5d,0x52,0x79, 0x5e,0x53,0x79,0x5e,0x53,0x79,0x5e,0x53,0x79,0x5e,0x53,0x79,0x5e,0x53,0x79,0x60, 0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53, 0x77,0x62,0x53,0x77,0x60,0x48,0x64,0x5a,0x41,0x5c,0x58,0x62,0x89,0x20,0x20,0x22, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x05,0x06,0x3a, 0x42,0x57,0x49,0x53,0x6e,0x0e,0x0f,0x14,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02, 0x02,0x3c,0x2d,0x3f,0x58,0x41,0x5a,0x64,0x68,0x7f,0x31,0x24,0x2b,0x1f,0x18,0x1c, 0x02,0x03,0x03,0x02,0x03,0x03,0x03,0x03,0x04,0x03,0x03,0x04,0x04,0x04,0x05,0x46, 0x4d,0x5c,0x65,0x71,0x96,0x5d,0x69,0x8f,0x62,0x6f,0x9c,0x52,0x52,0x7d,0x52,0x52, 0x7b,0x52,0x52,0x7c,0x52,0x55,0x7f,0x52,0x57,0x80,0x52,0x5c,0x86,0x53,0x5c,0x86, 0x52,0x50,0x7a,0x64,0x70,0x95,0xb1,0xaf,0xb4,0x2e,0x23,0x2b,0x3f,0x32,0x3c,0x07, 0x07,0x09,0x07,0x07,0x09,0x07,0x07,0x09,0x07,0x07,0x09,0x07,0x07,0x09,0x07,0x07, 0x09,0x35,0x2a,0x33,0x2b,0x21,0x27,0x26,0x1d,0x22,0x36,0x30,0x34,0x99,0xa0,0xb8, 0x5a,0x66,0x8e,0x4d,0x4a,0x72,0x52,0x4b,0x73,0x5a,0x52,0x79,0x5a,0x52,0x79,0x57, 0x50,0x79,0x54,0x50,0x79,0x52,0x4f,0x7a,0x51,0x4d,0x74,0x40,0x3b,0x57,0x58,0x50, 0x75,0x6a,0x5f,0x89,0x02,0x03,0x03,0x03,0x03,0x04,0x03,0x03,0x04,0x02,0x03,0x03, 0x03,0x04,0x05,0x03,0x03,0x04,0x02,0x02,0x03,0x03,0x03,0x04,0x03,0x04,0x05,0x03, 0x04,0x05,0x2d,0x32,0x48,0x58,0x5e,0x8d,0x4d,0x4b,0x73,0x4c,0x44,0x63,0x5a,0x4f, 0x71,0x5e,0x52,0x76,0x5e,0x53,0x76,0x5e,0x53,0x76,0x5e,0x53,0x76,0x5e,0x53,0x76, 0x5e,0x53,0x76,0x5e,0x53,0x76,0x57,0x4b,0x6c,0x5a,0x4e,0x70,0x5c,0x54,0x7a,0x31, 0x28,0x32,0x05,0x05,0x06,0x1d,0x1d,0x1f,0x06,0x07,0x09,0x06,0x07,0x0a,0x08,0x09, 0x0b,0x09,0x0a,0x0c,0x0a,0x0a,0x0e,0x0a,0x0b,0x0e,0x0c,0x0d,0x11,0x0d,0x0e,0x13, 0x10,0x10,0x15,0x12,0x12,0x17,0x15,0x14,0x1a,0x16,0x16,0x1c,0x18,0x17,0x1d,0x19, 0x18,0x1f,0x1b,0x1a,0x21,0x1f,0x1c,0x25,0x20,0x1d,0x27,0x1e,0x1c,0x24,0x1b,0x1a, 0x22,0x19,0x18,0x1f,0x1f,0x1c,0x25,0x4d,0x41,0x53,0x5b,0x4a,0x64,0x57,0x46,0x61, 0x55,0x44,0x5e,0x57,0x46,0x60,0x5b,0x49,0x64,0x5c,0x48,0x64,0x59,0x47,0x62,0x31, 0x29,0x3c,0x31,0x2a,0x3f,0x2f,0x2a,0x3e,0x26,0x22,0x2b,0x4d,0x3e,0x4e,0x54,0x46, 0x55,0x81,0x83,0x8e,0x75,0x7d,0x93,0x91,0x9b,0xb2,0x97,0x9e,0xb5,0x98,0x9f,0xb5, 0x97,0x9e,0xb3,0x8b,0x8f,0xa4,0x7e,0x81,0x94,0x7c,0x82,0x9d,0x9b,0xa2,0xb7,0x97, 0x9c,0xb1,0x88,0x8e,0xa3,0x82,0x88,0x9f,0x69,0x71,0x8b,0x60,0x5e,0x77,0x5b,0x55, 0x6c,0x4f,0x47,0x5c,0x33,0x2f,0x3e,0x31,0x2e,0x3c,0x59,0x4f,0x66,0x63,0x5a,0x75, 0x45,0x3e,0x52,0x56,0x4d,0x66,0x5a,0x56,0x74,0x54,0x55,0x73,0x41,0x3f,0x56,0x47, 0x43,0x5a,0x4a,0x46,0x5d,0x49,0x47,0x60,0x4a,0x4a,0x65,0x50,0x57,0x70,0x5e,0x65, 0x79,0x66,0x6c,0x7f,0x6a,0x70,0x82,0x6e,0x74,0x86,0x5a,0x61,0x78,0x4b,0x53,0x6c, 0x48,0x48,0x62,0x47,0x45,0x5c,0x48,0x45,0x5c,0x49,0x46,0x5e,0x4a,0x48,0x61,0x49, 0x48,0x62,0x52,0x52,0x6a,0x4a,0x49,0x62,0x4e,0x4c,0x66,0x51,0x4a,0x63,0x49,0x44, 0x58,0x45,0x3f,0x52,0x45,0x3e,0x52,0x47,0x40,0x53,0x4a,0x44,0x58,0x48,0x46,0x5b, 0x4f,0x50,0x66,0x66,0x6b,0x81,0x5b,0x61,0x74,0x61,0x69,0x80,0x60,0x69,0x82,0x5b, 0x64,0x7e,0x5b,0x63,0x7e,0x5d,0x66,0x80,0x64,0x6b,0x85,0x65,0x6c,0x86,0x64,0x6b, 0x85,0x63,0x6a,0x84,0x5e,0x66,0x80,0x5d,0x66,0x80,0x5f,0x66,0x82,0x62,0x6a,0x83, 0x69,0x71,0x89,0x6b,0x73,0x8a,0x72,0x7a,0x90,0x7a,0x82,0x96,0x74,0x7b,0x91,0x72, 0x79,0x8e,0x6f,0x76,0x8b,0x74,0x7b,0x90,0x75,0x7c,0x92,0x6e,0x76,0x8d,0x69,0x71, 0x89,0x7b,0x81,0x9c,0x7c,0x83,0xa3,0x82,0x87,0xa5,0x86,0x8b,0xa8,0x88,0x8d,0xa9, 0x8a,0x8e,0xaa,0x8a,0x8e,0xaa,0x86,0x8a,0xa6,0x82,0x85,0xa1,0x81,0x84,0x9e,0x7e, 0x7f,0x98,0x7a,0x7b,0x94,0x75,0x75,0x8e,0x71,0x71,0x8b,0x6e,0x6e,0x87,0x68,0x67, 0x81,0x69,0x68,0x83,0x42,0x46,0x52,0x42,0x46,0x51,0x44,0x47,0x52,0x48,0x4b,0x54, 0x4c,0x4f,0x58,0x53,0x56,0x5e,0x54,0x57,0x5f,0x52,0x56,0x5e,0x4f,0x52,0x5d,0x4e, 0x52,0x5d,0x4a,0x4e,0x5b,0x58,0x5c,0x67,0x8e,0x91,0x98,0x5a,0x5e,0x68,0x3d,0x42, 0x4e,0x3a,0x3f,0x4c,0x3b,0x40,0x4d,0x42,0x46,0x52,0x48,0x4b,0x57,0x4d,0x51,0x5b, 0x4f,0x53,0x5b,0x60,0x61,0x67,0x79,0x7a,0x7a,0x86,0x86,0x86,0x90,0x90,0x90,0x96, 0x96,0x96,0xa6,0xa6,0xa6,0xac,0xac,0xae,0xaf,0xb0,0xb3,0xaf,0xaf,0xb3,0x89,0x8c, 0x92,0x81,0x82,0x89,0x71,0x73,0x7a,0x71,0x73,0x7a,0x72,0x75,0x7b,0x5e,0x61,0x69, 0x54,0x56,0x5e,0x55,0x56,0x5d,0x49,0x4c,0x54,0x4b,0x4e,0x56,0x55,0x57,0x5d,0x63, 0x65,0x69,0x61,0x62,0x66,0x56,0x57,0x5b,0x40,0x42,0x47,0x2a,0x2c,0x32,0x1e,0x20, 0x26,0x18,0x1a,0x1f,0x13,0x14,0x1a,0x10,0x11,0x16,0x4f,0x50,0x53,0x1d,0x1e,0x23, 0x0b,0x0b,0x0f,0x0a,0x0b,0x0e,0x09,0x0a,0x0c,0x08,0x09,0x0b,0x06,0x07,0x0a,0x06, 0x06,0x09,0x06,0x06,0x08,0x04,0x05,0x06,0x04,0x04,0x06,0x03,0x04,0x05,0x03,0x03, 0x04,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x1b,0x22,0x81,0x89,0xa6,0x71,0x7c,0x9e, 0x68,0x68,0x8e,0x77,0x62,0x7b,0x76,0x61,0x7a,0x2a,0x26,0x32,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x57,0x57,0x57,0xfc,0xfc,0xfc,0xff,0xff, 0xff,0xfc,0xfc,0xfc,0x6e,0x6e,0x6e,0x00,0x00,0x00,0x65,0x65,0x65,0xfd,0xfd,0xfd, 0xff,0xff,0xff,0xff,0xff,0xff,0x8d,0x8e,0x90,0x29,0x27,0x3d,0x53,0x49,0x68,0x54, 0x50,0x79,0x52,0x5a,0x84,0x64,0x4f,0x6e,0x52,0x4f,0x7a,0x88,0x92,0xb0,0x86,0x77, 0x86,0x6e,0x67,0x8a,0x07,0x08,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x09,0x52,0x5c,0x81,0x64,0x52,0x71,0x5e, 0x46,0x60,0x64,0x53,0x76,0x5e,0x53,0x79,0x5d,0x52,0x79,0x5e,0x53,0x79,0x5e,0x53, 0x79,0x5e,0x53,0x79,0x5e,0x53,0x79,0x5e,0x53,0x79,0x5e,0x53,0x79,0x5e,0x53,0x79, 0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60, 0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x63,0x53,0x77,0x5c,0x44,0x5e,0x5f,0x47, 0x63,0x61,0x6b,0x87,0x07,0x08,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x6a,0x72,0x89,0xac,0xb2,0xc2,0x55,0x50, 0x5d,0x31,0x25,0x2b,0x19,0x13,0x16,0x02,0x02,0x03,0x02,0x03,0x03,0x03,0x03,0x04, 0x03,0x03,0x04,0x46,0x4c,0x5c,0x67,0x73,0x98,0x5d,0x6a,0x90,0x61,0x70,0x9d,0x53, 0x54,0x7d,0x52,0x53,0x7c,0x52,0x52,0x7b,0x52,0x54,0x7c,0x52,0x57,0x82,0x52,0x5d, 0x86,0x53,0x5d,0x86,0x53,0x50,0x7a,0x5f,0x6a,0x91,0xa9,0xa6,0xab,0x2e,0x24,0x2a, 0x3f,0x31,0x3c,0x06,0x07,0x08,0x06,0x07,0x08,0x06,0x07,0x08,0x06,0x07,0x08,0x06, 0x07,0x08,0x06,0x07,0x08,0x37,0x2a,0x32,0x2b,0x21,0x27,0x26,0x1c,0x22,0x1f,0x17, 0x1a,0xa2,0xa8,0xbc,0x66,0x72,0x97,0x4f,0x4c,0x77,0x50,0x4a,0x6f,0x58,0x50,0x79, 0x58,0x50,0x79,0x57,0x50,0x79,0x54,0x50,0x79,0x52,0x4f,0x7a,0x51,0x4e,0x75,0x3f, 0x3b,0x59,0x55,0x4d,0x76,0x68,0x5f,0x8d,0x02,0x03,0x03,0x03,0x03,0x04,0x02,0x03, 0x03,0x02,0x03,0x03,0x03,0x03,0x04,0x03,0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x03, 0x04,0x04,0x05,0x03,0x04,0x05,0x24,0x29,0x3a,0x59,0x61,0x90,0x4e,0x4c,0x74,0x4c, 0x43,0x64,0x5a,0x4e,0x6e,0x5e,0x52,0x76,0x5e,0x53,0x76,0x5e,0x53,0x76,0x5e,0x53, 0x76,0x5e,0x53,0x76,0x5e,0x53,0x76,0x5f,0x53,0x76,0x57,0x4c,0x6c,0x5a,0x4c,0x6d, 0x5e,0x56,0x7e,0x3c,0x31,0x3c,0x0a,0x0b,0x0c,0x1e,0x1e,0x20,0x1d,0x1d,0x20,0x06, 0x07,0x09,0x07,0x08,0x0a,0x07,0x08,0x0b,0x09,0x0a,0x0c,0x0a,0x0a,0x0e,0x0a,0x0b, 0x0e,0x0a,0x0b,0x0e,0x0b,0x0c,0x10,0x0c,0x0e,0x12,0x0c,0x0e,0x13,0x0e,0x10,0x14, 0x10,0x11,0x16,0x11,0x12,0x17,0x12,0x12,0x18,0x12,0x12,0x18,0x13,0x13,0x19,0x15, 0x15,0x1b,0x17,0x16,0x1c,0x17,0x16,0x1d,0x17,0x16,0x1d,0x2d,0x28,0x32,0x59,0x4a, 0x62,0x5a,0x48,0x63,0x56,0x45,0x5f,0x57,0x45,0x60,0x5b,0x49,0x63,0x5c,0x48,0x63, 0x5c,0x49,0x64,0x3b,0x2f,0x44,0x31,0x29,0x3d,0x31,0x29,0x3e,0x2c,0x24,0x32,0x3d, 0x31,0x3f,0x4d,0x3e,0x4d,0x96,0x90,0x98,0x69,0x6e,0x7d,0x99,0xa0,0xb6,0xa0,0xa7, 0xbb,0x9f,0xa7,0xbc,0x9f,0xa5,0xba,0x94,0x99,0xac,0x7f,0x82,0x94,0x81,0x7e,0x94, 0x77,0x78,0x96,0x72,0x75,0x92,0x6d,0x70,0x8c,0x68,0x6f,0x8b,0x60,0x67,0x82,0x64, 0x6c,0x86,0x5a,0x61,0x81,0x62,0x5e,0x7b,0x50,0x4a,0x5f,0x35,0x31,0x41,0x3b,0x35, 0x47,0x52,0x4a,0x60,0x35,0x31,0x42,0x3b,0x35,0x48,0x5e,0x56,0x6f,0x56,0x54,0x70, 0x42,0x41,0x58,0x4e,0x44,0x59,0x51,0x46,0x5b,0x53,0x48,0x5e,0x50,0x49,0x62,0x4a, 0x49,0x62,0x46,0x4e,0x66,0x62,0x68,0x7a,0x70,0x76,0x86,0x76,0x7b,0x8a,0x6e,0x75, 0x86,0x68,0x6e,0x81,0x4f,0x56,0x6e,0x46,0x45,0x5e,0x47,0x46,0x5e,0x47,0x46,0x5e, 0x46,0x45,0x5e,0x47,0x46,0x60,0x48,0x48,0x62,0x49,0x48,0x62,0x4d,0x4b,0x64,0x51, 0x4d,0x67,0x53,0x4e,0x67,0x4b,0x46,0x5c,0x45,0x40,0x54,0x4e,0x49,0x5f,0x4e,0x47, 0x5c,0x4d,0x48,0x5d,0x4b,0x48,0x5e,0x57,0x5a,0x6e,0x63,0x6a,0x80,0x5e,0x65,0x7a, 0x61,0x6a,0x83,0x56,0x5f,0x7b,0x55,0x5d,0x79,0x5a,0x62,0x7d,0x60,0x68,0x82,0x65, 0x6c,0x86,0x65,0x6c,0x86,0x60,0x68,0x82,0x5d,0x65,0x80,0x5f,0x66,0x82,0x64,0x6b, 0x85,0x68,0x70,0x89,0x6a,0x72,0x8a,0x72,0x79,0x8f,0x77,0x7e,0x93,0x73,0x7a,0x90, 0x74,0x7b,0x91,0x7e,0x83,0x96,0x74,0x7b,0x90,0x72,0x79,0x8e,0x7a,0x82,0x95,0x85, 0x8b,0x9c,0x79,0x7f,0x93,0x7d,0x83,0x9d,0x76,0x7e,0x9f,0x7d,0x82,0xa1,0x81,0x86, 0xa5,0x89,0x8d,0xa9,0x89,0x8d,0xa9,0x88,0x8d,0xa9,0x82,0x87,0xa5,0x7e,0x82,0xa1, 0x7f,0x83,0xa0,0x81,0x84,0x9f,0x7f,0x81,0x9b,0x7d,0x7f,0x97,0x79,0x79,0x93,0x73, 0x72,0x8c,0x6a,0x69,0x82,0x6d,0x6d,0x88,0x46,0x4a,0x56,0x46,0x4a,0x56,0x46,0x4a, 0x55,0x4d,0x50,0x5a,0x4e,0x52,0x5c,0x51,0x54,0x5e,0x52,0x56,0x5e,0x52,0x55,0x5f, 0x52,0x55,0x5f,0x4f,0x53,0x5e,0x4b,0x4f,0x5c,0x79,0x7d,0x86,0x80,0x83,0x8c,0x45, 0x4a,0x58,0x3a,0x3e,0x4e,0x3a,0x3e,0x4e,0x42,0x47,0x55,0x56,0x5a,0x65,0x6c,0x6e, 0x75,0x66,0x69,0x6e,0x61,0x62,0x67,0x79,0x7a,0x7a,0x93,0x93,0x93,0x9e,0x9e,0x9e, 0xa7,0xa7,0xa7,0xb2,0xb2,0xb2,0xc0,0xc0,0xc0,0xba,0xba,0xba,0xb1,0xb2,0xb5,0xa5, 0xa6,0xaa,0x9d,0x9e,0xa2,0x94,0x96,0x9b,0x88,0x8a,0x92,0x89,0x8b,0x92,0x83,0x86, 0x8b,0x73,0x76,0x7d,0x6c,0x6f,0x76,0x62,0x65,0x6e,0x5b,0x5e,0x69,0x62,0x66,0x6f, 0x72,0x75,0x7b,0x7d,0x7e,0x83,0x81,0x82,0x86,0x75,0x76,0x7a,0x54,0x56,0x5a,0x3a, 0x3d,0x42,0x2c,0x2e,0x33,0x21,0x22,0x28,0x19,0x1b,0x20,0x12,0x14,0x19,0x35,0x37, 0x3b,0x3c,0x3c,0x40,0x0d,0x0e,0x12,0x0b,0x0b,0x0f,0x0a,0x0a,0x0e,0x09,0x0a,0x0c, 0x09,0x0a,0x0c,0x07,0x07,0x0a,0x06,0x06,0x08,0x06,0x06,0x07,0x04,0x05,0x06,0x04, 0x04,0x06,0x03,0x04,0x05,0x02,0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02, 0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x11, 0x15,0x65,0x6d,0x85,0x6e,0x79,0x9c,0x68,0x67,0x8d,0x74,0x5f,0x77,0x6f,0x5b,0x72, 0x17,0x13,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe2,0xe2,0xe2,0xfd, 0xfd,0xfd,0xfd,0xfd,0xfd,0xcf,0xcf,0xcf,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xc0, 0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0xfc,0xfc,0x30,0x31,0x32,0x3d,0x45,0x5f, 0x4e,0x4b,0x75,0x5e,0x53,0x79,0x52,0x53,0x7e,0x55,0x50,0x79,0x54,0x5f,0x89,0xa7, 0xaf,0xc4,0x7e,0x6b,0x80,0x4a,0x51,0x68,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x35,0x3a,0x45, 0x52,0x4f,0x7a,0x5f,0x47,0x63,0x62,0x4a,0x66,0x5e,0x53,0x79,0x5e,0x53,0x79,0x5e, 0x53,0x79,0x5e,0x53,0x79,0x5e,0x53,0x79,0x5e,0x53,0x79,0x5e,0x53,0x79,0x60,0x53, 0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77, 0x60,0x53,0x77,0x60,0x53,0x77,0x39,0x2f,0x48,0x34,0x2b,0x43,0x49,0x3e,0x5c,0x5d, 0x4c,0x6a,0x58,0x40,0x5a,0x63,0x4c,0x69,0x5f,0x65,0x76,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x50,0x54,0x60,0xbb, 0xc0,0xd0,0x96,0x9c,0xaf,0x44,0x3e,0x4d,0x32,0x25,0x2c,0x16,0x11,0x14,0x02,0x02, 0x03,0x02,0x02,0x03,0x03,0x03,0x04,0x47,0x4d,0x5e,0x69,0x74,0x99,0x5e,0x6a,0x91, 0x5e,0x6c,0x99,0x53,0x54,0x7e,0x52,0x54,0x7d,0x52,0x53,0x7b,0x52,0x57,0x82,0x52, 0x5a,0x82,0x52,0x5d,0x87,0x53,0x5d,0x87,0x53,0x50,0x7a,0x5d,0x6a,0x90,0xa8,0xa5, 0xaa,0x2f,0x25,0x2b,0x41,0x31,0x3d,0x06,0x06,0x07,0x06,0x06,0x07,0x06,0x06,0x07, 0x06,0x06,0x07,0x06,0x06,0x07,0x06,0x06,0x07,0x37,0x29,0x32,0x2b,0x21,0x27,0x28, 0x1e,0x23,0x1f,0x16,0x1a,0x95,0x99,0xa6,0x77,0x82,0xa2,0x51,0x52,0x7b,0x4c,0x48, 0x6d,0x57,0x50,0x79,0x5a,0x52,0x79,0x58,0x50,0x79,0x54,0x50,0x79,0x52,0x4f,0x7a, 0x50,0x4d,0x77,0x41,0x3d,0x5d,0x50,0x4a,0x6f,0x66,0x5c,0x88,0x0d,0x0b,0x0f,0x02, 0x03,0x03,0x02,0x03,0x03,0x02,0x03,0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x03,0x04,0x1a,0x1d,0x29,0x59,0x63,0x91, 0x4f,0x4c,0x75,0x4b,0x45,0x65,0x59,0x4c,0x6f,0x5e,0x53,0x76,0x5e,0x53,0x76,0x5e, 0x53,0x76,0x5e,0x53,0x76,0x5e,0x53,0x76,0x5e,0x53,0x76,0x5e,0x53,0x76,0x58,0x4d, 0x6d,0x58,0x4c,0x6c,0x5c,0x56,0x7f,0x4e,0x3f,0x4d,0x33,0x33,0x34,0x25,0x25,0x25, 0x1d,0x1d,0x1f,0x06,0x06,0x09,0x07,0x07,0x0a,0x07,0x08,0x0b,0x08,0x09,0x0c,0x08, 0x09,0x0c,0x0a,0x0a,0x0e,0x0a,0x0b,0x0e,0x0a,0x0b,0x0f,0x0b,0x0c,0x10,0x0b,0x0c, 0x10,0x0b,0x0d,0x11,0x0c,0x0d,0x11,0x0c,0x0d,0x11,0x0c,0x0d,0x11,0x0c,0x0e,0x12, 0x0c,0x0e,0x12,0x0e,0x0f,0x13,0x10,0x12,0x17,0x14,0x15,0x1b,0x16,0x16,0x1d,0x16, 0x16,0x1d,0x43,0x3a,0x4a,0x5c,0x4b,0x66,0x58,0x47,0x60,0x57,0x46,0x60,0x5a,0x48, 0x63,0x5a,0x47,0x63,0x5c,0x49,0x63,0x59,0x47,0x63,0x31,0x2a,0x3e,0x31,0x29,0x3d, 0x30,0x24,0x37,0x29,0x22,0x2e,0x4f,0x3f,0x4f,0x53,0x43,0x53,0x9c,0x9d,0xa3,0x8d, 0x91,0x9f,0xac,0xb2,0xc4,0xa8,0xaf,0xc2,0xa3,0xa9,0xbc,0x9f,0xa3,0xb8,0x96,0x9a, 0xae,0x87,0x89,0x9d,0x72,0x71,0x84,0x63,0x61,0x73,0x50,0x53,0x62,0x52,0x56,0x66, 0x68,0x69,0x83,0x74,0x7a,0x92,0x68,0x6f,0x8a,0x58,0x5b,0x79,0x5e,0x58,0x71,0x59, 0x52,0x69,0x4a,0x44,0x5a,0x3c,0x37,0x4a,0x2d,0x2a,0x38,0x2d,0x29,0x36,0x40,0x39, 0x4b,0x58,0x4d,0x61,0x4a,0x40,0x51,0x4a,0x3e,0x4e,0x4d,0x42,0x56,0x4e,0x43,0x56, 0x4f,0x46,0x5a,0x4f,0x48,0x5e,0x45,0x44,0x5d,0x4a,0x51,0x66,0x62,0x68,0x77,0x75, 0x7a,0x87,0x76,0x7b,0x88,0x6c,0x71,0x80,0x4b,0x52,0x68,0x46,0x45,0x5e,0x48,0x46, 0x61,0x48,0x46,0x60,0x47,0x46,0x61,0x49,0x48,0x62,0x4d,0x4a,0x62,0x4b,0x4a,0x65, 0x4d,0x4d,0x68,0x50,0x4d,0x68,0x52,0x4e,0x68,0x52,0x4d,0x67,0x50,0x4d,0x66,0x50, 0x4f,0x68,0x52,0x4e,0x66,0x51,0x4b,0x5f,0x51,0x4b,0x61,0x53,0x52,0x68,0x5f,0x64, 0x7b,0x5d,0x64,0x77,0x62,0x6a,0x81,0x5a,0x62,0x7e,0x55,0x5d,0x79,0x54,0x5c,0x78, 0x57,0x5f,0x7b,0x5e,0x66,0x81,0x60,0x68,0x82,0x5f,0x67,0x82,0x5f,0x66,0x82,0x61, 0x6a,0x83,0x66,0x6e,0x87,0x6a,0x72,0x8a,0x6a,0x72,0x8a,0x6c,0x74,0x8b,0x73,0x7a, 0x90,0x75,0x7c,0x92,0x75,0x7c,0x92,0x73,0x7a,0x8f,0x7c,0x82,0x95,0x7e,0x85,0x96, 0x7a,0x80,0x93,0x85,0x8a,0x9a,0x86,0x8d,0x9c,0x8a,0x8f,0xa6,0x79,0x80,0xa0,0x79, 0x7e,0x9e,0x7b,0x81,0xa0,0x80,0x85,0xa3,0x81,0x85,0xa4,0x80,0x85,0xa4,0x7d,0x82, 0xa1,0x7a,0x7f,0x9f,0x7c,0x81,0x9f,0x7c,0x81,0x9e,0x7b,0x80,0x9b,0x7d,0x7f,0x9a, 0x7c,0x7d,0x98,0x75,0x76,0x90,0x6d,0x6d,0x86,0x70,0x6f,0x8a,0x4c,0x51,0x5e,0x4b, 0x4f,0x5c,0x4b,0x50,0x5c,0x4e,0x52,0x5d,0x4d,0x51,0x5c,0x52,0x55,0x5f,0x5e,0x61, 0x6b,0x97,0x99,0x9e,0x5c,0x5e,0x68,0x58,0x5c,0x65,0x76,0x79,0x80,0x74,0x77,0x80, 0x42,0x47,0x55,0x3e,0x43,0x52,0x3a,0x3f,0x4e,0x43,0x48,0x56,0x57,0x5b,0x67,0x7e, 0x81,0x86,0x9d,0x9d,0x9d,0x8d,0x8d,0x8d,0x86,0x86,0x86,0x92,0x92,0x92,0xa6,0xa6, 0xa6,0xaf,0xaf,0xaf,0xba,0xba,0xba,0xbe,0xbe,0xbe,0xc0,0xc0,0xc0,0xbe,0xbe,0xbe, 0xb4,0xb5,0xb7,0xa8,0xaa,0xae,0xa5,0xa6,0xab,0x9a,0x9d,0xa3,0x94,0x96,0x9d,0x8f, 0x92,0x98,0x85,0x87,0x8e,0x79,0x7b,0x84,0x76,0x79,0x82,0x6a,0x6e,0x7a,0x63,0x68, 0x76,0x72,0x76,0x82,0x88,0x8b,0x92,0x93,0x95,0x9a,0x90,0x92,0x96,0x76,0x77,0x7e, 0x58,0x5a,0x61,0x4e,0x51,0x56,0x44,0x46,0x4b,0x2f,0x31,0x36,0x22,0x24,0x2a,0x1a, 0x1d,0x22,0x1d,0x1e,0x24,0x4a,0x4a,0x4f,0x80,0x80,0x83,0x5e,0x5f,0x61,0x0a,0x0c, 0x0f,0x0a,0x0b,0x0e,0x09,0x0a,0x0d,0x08,0x09,0x0c,0x07,0x08,0x0a,0x06,0x06,0x09, 0x06,0x06,0x08,0x04,0x05,0x06,0x04,0x05,0x06,0x03,0x04,0x05,0x03,0x03,0x04,0x02, 0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3c,0x41,0x52,0x69,0x74,0x97,0x68,0x67, 0x8d,0x72,0x5d,0x74,0x65,0x52,0x67,0x09,0x07,0x09,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x26,0x23,0x2f,0x59,0x4e,0x65,0x4d,0x44,0x57,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x9c,0x9c,0x9c, 0xfd,0xfd,0xfd,0xff,0xff,0xff,0xf2,0xf2,0xf2,0x21,0x21,0x21,0x00,0x00,0x00,0x00, 0x00,0x00,0xee,0xee,0xee,0xff,0xff,0xff,0xff,0xff,0xff,0xed,0xed,0xed,0x00,0x00, 0x00,0x5a,0x5d,0x65,0x61,0x6d,0x93,0x52,0x54,0x80,0x55,0x50,0x79,0x52,0x52,0x7c, 0x5b,0x66,0x8e,0xd2,0xd4,0xdf,0x77,0x69,0x89,0x12,0x13,0x17,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x02,0x02,0x02,0x52,0x5b,0x7c,0x64,0x53,0x73,0x58,0x41,0x5b,0x64,0x53,0x74, 0x5e,0x53,0x79,0x5e,0x53,0x79,0x5e,0x53,0x79,0x5e,0x53,0x79,0x60,0x53,0x77,0x60, 0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53, 0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x55,0x49,0x6a,0x2c,0x24,0x3a,0x2c,0x24,0x3a, 0x2d,0x25,0x3b,0x2f,0x27,0x3d,0x3d,0x2d,0x43,0x51,0x3b,0x54,0x52,0x50,0x7b,0x46, 0x49,0x51,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02, 0x02,0x02,0x02,0x92,0x99,0xac,0xa0,0xa8,0xbd,0x7f,0x87,0xa3,0x3a,0x32,0x3c,0x32, 0x25,0x2c,0x13,0x0f,0x11,0x02,0x02,0x03,0x02,0x02,0x03,0x44,0x49,0x58,0x6c,0x78, 0x9a,0x5e,0x69,0x90,0x60,0x6e,0x9b,0x53,0x56,0x80,0x52,0x54,0x7e,0x52,0x53,0x7e, 0x52,0x55,0x7f,0x52,0x5a,0x83,0x52,0x5d,0x85,0x53,0x5f,0x88,0x53,0x50,0x7a,0x61, 0x6d,0x92,0xaa,0xa8,0xac,0x30,0x24,0x2c,0x40,0x31,0x3c,0x06,0x06,0x07,0x05,0x05, 0x06,0x05,0x06,0x06,0x05,0x06,0x06,0x05,0x06,0x06,0x05,0x06,0x06,0x38,0x2a,0x34, 0x2b,0x21,0x28,0x28,0x1e,0x23,0x22,0x18,0x1d,0x81,0x82,0x8b,0x8b,0x95,0xaf,0x53, 0x5e,0x87,0x4b,0x47,0x6f,0x56,0x4f,0x78,0x58,0x50,0x79,0x57,0x50,0x79,0x55,0x50, 0x79,0x52,0x4f,0x7a,0x51,0x4e,0x78,0x41,0x3f,0x60,0x4d,0x46,0x6c,0x61,0x57,0x81, 0x1c,0x18,0x20,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x0f,0x12, 0x18,0x59,0x64,0x92,0x50,0x4d,0x76,0x4c,0x44,0x64,0x58,0x4c,0x6d,0x5e,0x53,0x76, 0x5e,0x53,0x76,0x5e,0x53,0x76,0x5e,0x53,0x76,0x5f,0x53,0x77,0x5e,0x53,0x76,0x5e, 0x53,0x76,0x58,0x4d,0x6d,0x52,0x48,0x68,0x59,0x53,0x7a,0x4e,0x3e,0x4d,0x06,0x07, 0x08,0x05,0x06,0x07,0x06,0x06,0x08,0x06,0x07,0x09,0x07,0x07,0x0a,0x07,0x08,0x0a, 0x08,0x09,0x0b,0x08,0x09,0x0c,0x09,0x0a,0x0d,0x0a,0x0b,0x0e,0x0a,0x0b,0x0e,0x0a, 0x0b,0x0f,0x0b,0x0c,0x10,0x0b,0x0c,0x10,0x0b,0x0c,0x10,0x0b,0x0d,0x11,0x0b,0x0d, 0x11,0x0c,0x0d,0x11,0x0b,0x0d,0x11,0x0b,0x0d,0x11,0x0c,0x0d,0x11,0x0e,0x0f,0x13, 0x10,0x11,0x17,0x14,0x14,0x1a,0x1c,0x19,0x21,0x56,0x4a,0x61,0x5f,0x4b,0x68,0x5a, 0x46,0x62,0x5a,0x48,0x63,0x5a,0x47,0x62,0x5a,0x47,0x63,0x5d,0x49,0x65,0x40,0x33, 0x48,0x31,0x29,0x3c,0x2f,0x25,0x36,0x2b,0x22,0x31,0x31,0x27,0x35,0x57,0x46,0x57, 0x94,0x8a,0x96,0x8f,0x91,0x9a,0xac,0xb0,0xbf,0xaf,0xb4,0xc6,0xa8,0xaf,0xc2,0xa2, 0xaa,0xbd,0x98,0xa0,0xb4,0x8e,0x94,0xa8,0x7e,0x82,0x96,0x6d,0x73,0x86,0x5c,0x60, 0x70,0x4e,0x50,0x5f,0x5c,0x5a,0x6e,0x65,0x6a,0x86,0x5e,0x64,0x7f,0x64,0x6b,0x84, 0x57,0x5a,0x77,0x5a,0x5a,0x78,0x5f,0x5b,0x77,0x5f,0x58,0x74,0x5b,0x52,0x6c,0x48, 0x40,0x54,0x3c,0x35,0x46,0x38,0x30,0x3b,0x3c,0x30,0x3b,0x44,0x36,0x44,0x45,0x38, 0x46,0x47,0x3e,0x4e,0x4a,0x3f,0x52,0x4c,0x42,0x56,0x4d,0x44,0x58,0x40,0x3f,0x56, 0x46,0x4c,0x5e,0x61,0x65,0x70,0x6e,0x72,0x7d,0x6c,0x71,0x7d,0x5c,0x62,0x73,0x46, 0x49,0x62,0x48,0x46,0x61,0x49,0x48,0x62,0x46,0x47,0x61,0x49,0x4c,0x66,0x4a,0x4f, 0x6a,0x57,0x5f,0x76,0x67,0x6f,0x83,0x50,0x55,0x6e,0x52,0x51,0x6b,0x52,0x4f,0x68, 0x51,0x4e,0x67,0x53,0x4f,0x68,0x56,0x52,0x6a,0x56,0x51,0x68,0x56,0x50,0x66,0x56, 0x51,0x67,0x54,0x53,0x6a,0x56,0x5b,0x70,0x57,0x5d,0x70,0x64,0x6c,0x85,0x5a,0x62, 0x7e,0x55,0x5d,0x7a,0x53,0x59,0x76,0x53,0x5b,0x78,0x5a,0x62,0x7e,0x5d,0x66,0x80, 0x5f,0x66,0x82,0x62,0x6a,0x84,0x66,0x6e,0x87,0x68,0x70,0x88,0x6a,0x72,0x8a,0x6a, 0x72,0x89,0x6d,0x75,0x8c,0x73,0x7a,0x90,0x76,0x7e,0x92,0x7e,0x85,0x97,0x7e,0x83, 0x96,0x84,0x8a,0x9b,0x8a,0x90,0xa0,0x8a,0x90,0x9f,0x87,0x8d,0x9d,0x93,0x96,0xab, 0x86,0x8c,0xa8,0x7f,0x85,0xa1,0x7a,0x80,0x9e,0x7a,0x80,0xa0,0x7a,0x81,0x9f,0x76, 0x7c,0x9d,0x78,0x7d,0x9d,0x7a,0x80,0x9f,0x7a,0x7f,0x9f,0x79,0x7d,0x9d,0x77,0x7c, 0x9a,0x75,0x79,0x97,0x76,0x79,0x95,0x74,0x76,0x92,0x73,0x75,0x8f,0x7b,0x7b,0x96, 0x5a,0x5e,0x6d,0x56,0x5b,0x68,0x55,0x59,0x66,0x53,0x57,0x63,0x59,0x5d,0x67,0x60, 0x64,0x6d,0x87,0x89,0x8f,0x83,0x84,0x8a,0x8c,0x8d,0x92,0x8f,0x90,0x95,0x7d,0x80, 0x86,0x51,0x55,0x60,0x45,0x4a,0x57,0x44,0x49,0x57,0x4e,0x52,0x60,0x5e,0x62,0x6e, 0x76,0x78,0x80,0x9a,0x9a,0x9b,0xa0,0xa0,0xa0,0x99,0x99,0x99,0x9c,0x9c,0x9c,0xa6, 0xa6,0xa6,0xaf,0xaf,0xaf,0xb6,0xb6,0xb6,0xb9,0xb9,0xba,0xba,0xba,0xbb,0xb9,0xb9, 0xba,0xb6,0xb7,0xba,0xaa,0xad,0xb1,0x9b,0x9e,0xa6,0x93,0x96,0xa0,0x92,0x96,0x9f, 0x91,0x93,0x9d,0x86,0x8a,0x94,0x7b,0x7f,0x8a,0x7a,0x7e,0x89,0x7c,0x80,0x8c,0x6a, 0x6f,0x7f,0x66,0x6c,0x7d,0x7b,0x80,0x8c,0x95,0x97,0x9e,0x9f,0xa1,0xa5,0x8a,0x8d, 0x92,0x61,0x65,0x70,0x58,0x5b,0x63,0x4e,0x48,0x59,0x4f,0x48,0x5a,0x4a,0x44,0x55, 0x44,0x40,0x4f,0x38,0x35,0x42,0x2f,0x2b,0x38,0x2a,0x28,0x34,0x35,0x30,0x3f,0x17, 0x17,0x1c,0x25,0x22,0x2d,0x39,0x37,0x40,0x37,0x35,0x3e,0x1f,0x1c,0x25,0x09,0x0a, 0x0d,0x09,0x0a,0x0c,0x07,0x08,0x0a,0x06,0x06,0x08,0x05,0x05,0x06,0x04,0x05,0x06, 0x04,0x04,0x06,0x03,0x04,0x05,0x02,0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1d, 0x1f,0x28,0x69,0x72,0x90,0x6b,0x67,0x8a,0x6f,0x5a,0x71,0x55,0x45,0x56,0x03,0x02, 0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x05,0x06,0x30,0x2e,0x3e,0x4f,0x45, 0x5a,0x69,0x55,0x6b,0x69,0x54,0x69,0x62,0x4e,0x62,0x6b,0x67,0x89,0x56,0x5b,0x69, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x29,0x29, 0x29,0xf1,0xf1,0xf1,0xff,0xff,0xff,0xfc,0xfc,0xfc,0x89,0x89,0x89,0x00,0x00,0x00, 0x00,0x00,0x00,0x27,0x27,0x27,0xfc,0xfc,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xbc, 0xbc,0xbc,0x00,0x00,0x00,0x07,0x07,0x07,0xb8,0xb9,0xbd,0x77,0x82,0xa4,0x52,0x5d, 0x88,0x52,0x4f,0x7b,0x64,0x71,0x96,0xda,0xd5,0xdc,0x66,0x6e,0x91,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x2e,0x36,0x52,0x4f,0x7b,0x5e,0x46, 0x62,0x5f,0x47,0x63,0x5e,0x53,0x79,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77, 0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60, 0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x5d,0x50,0x73,0x2d,0x24, 0x3a,0x2e,0x25,0x3b,0x41,0x37,0x52,0x32,0x2a,0x41,0x2d,0x24,0x3a,0x2e,0x21,0x32, 0x3c,0x2b,0x3f,0x55,0x62,0x89,0x22,0x23,0x27,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x3b,0x3f,0x49,0x8a,0x92,0xac,0x89,0x94,0xae, 0x71,0x77,0x90,0x32,0x26,0x2c,0x31,0x24,0x2b,0x0e,0x0b,0x0d,0x02,0x02,0x03,0x39, 0x3f,0x4e,0x69,0x74,0x98,0x5e,0x6b,0x91,0x60,0x6c,0x99,0x52,0x54,0x80,0x52,0x53, 0x7d,0x52,0x54,0x7e,0x52,0x54,0x7f,0x52,0x5a,0x82,0x52,0x5d,0x86,0x53,0x5e,0x88, 0x52,0x50,0x79,0x61,0x6d,0x92,0xaa,0xa8,0xac,0x30,0x24,0x2b,0x3c,0x2e,0x38,0x19, 0x15,0x1b,0x04,0x05,0x05,0x04,0x05,0x05,0x04,0x05,0x05,0x05,0x05,0x06,0x05,0x05, 0x06,0x3b,0x2d,0x36,0x2d,0x21,0x28,0x2b,0x20,0x26,0x25,0x1a,0x1f,0x69,0x66,0x6f, 0x9e,0xa5,0xb9,0x5e,0x6b,0x91,0x4c,0x4a,0x72,0x50,0x4d,0x75,0x55,0x50,0x79,0x55, 0x50,0x79,0x54,0x50,0x79,0x52,0x4f,0x7a,0x51,0x4e,0x79,0x42,0x40,0x62,0x4c,0x46, 0x6a,0x5f,0x56,0x80,0x2c,0x25,0x31,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x03,0x04,0x05,0x06,0x07,0x59,0x65,0x94,0x51,0x4e,0x79,0x4d,0x45,0x65,0x56,0x4c, 0x6b,0x5e,0x53,0x76,0x5e,0x53,0x76,0x5e,0x53,0x76,0x5e,0x53,0x76,0x5f,0x53,0x77, 0x5f,0x53,0x77,0x5e,0x53,0x76,0x5b,0x50,0x71,0x4e,0x45,0x62,0x59,0x53,0x7d,0x4c, 0x3c,0x4b,0x10,0x0e,0x12,0x05,0x06,0x07,0x06,0x06,0x07,0x06,0x06,0x09,0x06,0x07, 0x0a,0x07,0x07,0x0a,0x07,0x08,0x0a,0x08,0x09,0x0b,0x09,0x0a,0x0d,0x09,0x0a,0x0d, 0x0a,0x0a,0x0e,0x0a,0x0b,0x0e,0x0a,0x0b,0x0e,0x0a,0x0b,0x0e,0x0b,0x0c,0x10,0x0b, 0x0c,0x10,0x0b,0x0c,0x10,0x0b,0x0c,0x10,0x0b,0x0d,0x11,0x0b,0x0c,0x10,0x0b,0x0c, 0x10,0x0b,0x0c,0x10,0x0b,0x0c,0x10,0x0c,0x0d,0x12,0x0d,0x0e,0x12,0x29,0x25,0x2e, 0x66,0x51,0x6c,0x5e,0x4a,0x67,0x5a,0x47,0x62,0x5a,0x47,0x62,0x5a,0x47,0x62,0x5c, 0x48,0x63,0x5e,0x4a,0x68,0x32,0x29,0x3d,0x31,0x26,0x38,0x2b,0x23,0x32,0x2d,0x24, 0x31,0x56,0x46,0x58,0x5e,0x4c,0x5f,0xbd,0xba,0xc0,0x90,0x94,0x9f,0xb5,0xbb,0xca, 0xaa,0xb1,0xc3,0xa5,0xac,0xbe,0x9e,0xa4,0xb7,0x95,0x9c,0xb0,0x8a,0x90,0xa5,0x7c, 0x80,0x95,0x6f,0x73,0x86,0x62,0x67,0x78,0x59,0x5d,0x6f,0x63,0x64,0x79,0x61,0x64, 0x7c,0x5c,0x60,0x7b,0x58,0x5f,0x7a,0x56,0x5b,0x7a,0x57,0x59,0x7a,0x58,0x5a,0x7b, 0x59,0x5a,0x7b,0x59,0x53,0x70,0x58,0x51,0x69,0x36,0x2c,0x38,0x2c,0x22,0x2a,0x3e, 0x32,0x3e,0x49,0x3e,0x4e,0x45,0x3e,0x50,0x43,0x3b,0x4b,0x45,0x3c,0x4e,0x4b,0x41, 0x54,0x4a,0x40,0x53,0x3a,0x39,0x4e,0x48,0x4d,0x5a,0x62,0x66,0x6e,0x70,0x73,0x7b, 0x58,0x5d,0x6d,0x43,0x42,0x5a,0x47,0x46,0x5e,0x47,0x46,0x60,0x46,0x48,0x61,0x48, 0x4f,0x67,0x56,0x5d,0x73,0x6e,0x74,0x85,0x6d,0x73,0x84,0x5d,0x63,0x76,0x58,0x5c, 0x72,0x54,0x55,0x6f,0x54,0x51,0x6a,0x56,0x50,0x69,0x57,0x50,0x69,0x57,0x51,0x69, 0x54,0x4f,0x65,0x50,0x4a,0x5f,0x4d,0x47,0x5c,0x4f,0x4e,0x63,0x56,0x5b,0x72,0x61, 0x67,0x7e,0x66,0x6e,0x86,0x5d,0x65,0x7f,0x53,0x5b,0x77,0x52,0x57,0x75,0x52,0x5a, 0x77,0x59,0x62,0x7e,0x5e,0x66,0x81,0x5f,0x68,0x82,0x61,0x6a,0x83,0x62,0x6a,0x84, 0x62,0x6a,0x84,0x65,0x6d,0x86,0x69,0x71,0x88,0x6b,0x73,0x8a,0x73,0x7a,0x8f,0x82, 0x89,0x9a,0x98,0x9c,0xa9,0xa0,0xa4,0xae,0xa0,0xa4,0xae,0xa2,0xa5,0xaf,0x98,0x9d, 0xa9,0xa2,0xa5,0xb7,0x94,0x99,0xb2,0x8b,0x90,0xaa,0x83,0x88,0xa5,0x81,0x85,0xa3, 0x7e,0x84,0xa2,0x7d,0x82,0xa1,0x7c,0x81,0xa0,0x7c,0x81,0xa1,0x7b,0x81,0xa0,0x78, 0x7d,0x9d,0x75,0x79,0x99,0x73,0x78,0x97,0x76,0x7a,0x99,0x7b,0x7e,0x9b,0x7d,0x80, 0x9a,0x88,0x8a,0xa4,0x70,0x75,0x83,0x6b,0x70,0x7d,0x6a,0x6e,0x7a,0x67,0x6b,0x77, 0x67,0x6b,0x76,0x86,0x89,0x90,0x98,0x9a,0x9f,0x75,0x76,0x7c,0x78,0x78,0x7e,0x63, 0x66,0x6c,0x53,0x57,0x61,0x4a,0x4e,0x5a,0x46,0x4b,0x59,0x54,0x59,0x66,0x6f,0x72, 0x7d,0x7e,0x80,0x87,0x8f,0x90,0x95,0xa1,0xa2,0xa2,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3, 0xab,0xab,0xad,0xb0,0xb1,0xb3,0xaf,0xb0,0xb3,0xb1,0xb2,0xb5,0xb6,0xb6,0xb8,0xb8, 0xb8,0xba,0xb6,0xb7,0xba,0xad,0xaf,0xb5,0x96,0x9a,0xa6,0x7a,0x81,0x91,0x72,0x78, 0x8a,0x7d,0x82,0x91,0x82,0x86,0x95,0x70,0x76,0x86,0x6c,0x71,0x82,0x7e,0x82,0x8e, 0x78,0x7d,0x8a,0x65,0x6b,0x7e,0x6e,0x72,0x83,0x82,0x86,0x92,0x8f,0x92,0x9a,0x8c, 0x8f,0x96,0x6a,0x6e,0x7a,0x53,0x57,0x65,0x5e,0x61,0x6a,0x65,0x69,0x6e,0x69,0x6a, 0x6f,0x63,0x65,0x69,0x5a,0x5b,0x62,0x43,0x42,0x4c,0x38,0x37,0x42,0x31,0x2f,0x3b, 0x17,0x18,0x1f,0x10,0x11,0x16,0x26,0x23,0x2e,0x39,0x36,0x40,0x38,0x35,0x3f,0x2f, 0x29,0x37,0x1b,0x19,0x21,0x09,0x0a,0x0d,0x08,0x09,0x0b,0x07,0x08,0x0a,0x06,0x06, 0x09,0x06,0x06,0x08,0x05,0x05,0x06,0x04,0x04,0x06,0x03,0x04,0x05,0x03,0x03,0x04, 0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x08,0x0a,0x4b,0x53,0x6a,0x6a,0x67,0x8a,0x70, 0x5b,0x72,0x44,0x37,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x25,0x1f,0x27,0x5b,0x4b,0x5d,0x5f,0x4b,0x5e,0x55, 0x43,0x53,0x52,0x40,0x50,0x53,0x41,0x50,0x56,0x43,0x53,0x5a,0x47,0x58,0x90,0x99, 0xb5,0x85,0x8e,0xa8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0xcb,0xcb,0xcb,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xd5,0xd5,0xd5,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8f,0x8f,0x8f,0xfd,0xfd,0xfd,0xff,0xff,0xff, 0xff,0xff,0xff,0x61,0x61,0x61,0x00,0x00,0x00,0x00,0x00,0x00,0x12,0x12,0x12,0xca, 0xcb,0xcd,0x95,0x9f,0xb9,0x66,0x73,0x98,0x90,0x99,0xb4,0xbc,0xb3,0xbd,0x10,0x10, 0x16,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x49, 0x53,0x71,0x64,0x53,0x74,0x57,0x3f,0x58,0x64,0x53,0x74,0x60,0x53,0x77,0x60,0x53, 0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77, 0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60, 0x53,0x77,0x3a,0x31,0x4a,0x2d,0x24,0x3a,0x40,0x36,0x51,0x5f,0x53,0x76,0x4c,0x41, 0x5f,0x30,0x27,0x3e,0x2c,0x1f,0x30,0x2e,0x21,0x32,0x48,0x4f,0x6c,0x0b,0x0b,0x0c, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x5f,0x66, 0x7d,0x85,0x8e,0xaa,0x7b,0x84,0xa4,0x57,0x58,0x6d,0x32,0x26,0x2c,0x2e,0x22,0x28, 0x02,0x02,0x02,0x35,0x3a,0x4b,0x64,0x70,0x95,0x5e,0x69,0x90,0x61,0x6e,0x9b,0x52, 0x57,0x82,0x52,0x54,0x7e,0x52,0x53,0x7e,0x52,0x55,0x7f,0x52,0x57,0x82,0x52,0x5d, 0x84,0x53,0x5e,0x87,0x54,0x50,0x78,0x64,0x70,0x94,0xa6,0xa3,0xa8,0x31,0x24,0x2b, 0x3a,0x2d,0x36,0x2a,0x21,0x2a,0x04,0x05,0x05,0x04,0x05,0x05,0x04,0x04,0x05,0x04, 0x04,0x05,0x04,0x04,0x05,0x3a,0x2d,0x36,0x2d,0x21,0x28,0x2b,0x20,0x26,0x27,0x1c, 0x21,0x4b,0x47,0x4c,0xa9,0xae,0xbf,0x71,0x7c,0x9e,0x4e,0x53,0x7d,0x4d,0x4a,0x73, 0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x79,0x43, 0x41,0x63,0x4a,0x45,0x69,0x5c,0x54,0x7b,0x38,0x31,0x41,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x56,0x61,0x8c,0x51,0x4e,0x7a,0x4e, 0x47,0x68,0x55,0x4a,0x69,0x5e,0x53,0x76,0x5e,0x53,0x76,0x5e,0x53,0x76,0x5e,0x53, 0x76,0x5f,0x53,0x77,0x5f,0x53,0x77,0x5e,0x53,0x76,0x5b,0x4f,0x71,0x52,0x48,0x68, 0x5c,0x56,0x80,0x49,0x3a,0x49,0x1f,0x19,0x21,0x04,0x05,0x06,0x05,0x06,0x07,0x06, 0x06,0x08,0x06,0x07,0x09,0x06,0x07,0x0a,0x07,0x08,0x0b,0x07,0x08,0x0b,0x08,0x09, 0x0c,0x08,0x09,0x0c,0x0a,0x0a,0x0e,0x0a,0x0a,0x0e,0x0a,0x0a,0x0e,0x0a,0x0b,0x0e, 0x0a,0x0b,0x0e,0x0a,0x0b,0x0e,0x0a,0x0b,0x0f,0x0a,0x0b,0x0f,0x0a,0x0b,0x0f,0x0b, 0x0c,0x10,0x0a,0x0b,0x0f,0x0a,0x0b,0x0f,0x0a,0x0b,0x0f,0x0a,0x0b,0x0f,0x0a,0x0b, 0x0f,0x0a,0x0b,0x0f,0x4b,0x40,0x54,0x64,0x4f,0x6d,0x59,0x46,0x61,0x5a,0x47,0x62, 0x59,0x47,0x61,0x5b,0x47,0x63,0x5d,0x4a,0x65,0x5a,0x47,0x62,0x31,0x27,0x3c,0x30, 0x26,0x37,0x2a,0x20,0x30,0x32,0x28,0x37,0x62,0x50,0x64,0x7e,0x6e,0x80,0xaf,0xb0, 0xb4,0x98,0x9d,0xaa,0xb1,0xb7,0xc8,0xa8,0xaf,0xc1,0xa4,0xa9,0xbc,0x9b,0xa1,0xb5, 0x92,0x98,0xac,0x7e,0x83,0x95,0x74,0x79,0x8b,0x75,0x7b,0x8e,0x6d,0x72,0x87,0x68, 0x6d,0x83,0x63,0x68,0x7f,0x5c,0x60,0x77,0x5f,0x67,0x83,0x5a,0x63,0x7e,0x56,0x5c, 0x7a,0x56,0x5b,0x7a,0x54,0x58,0x78,0x4d,0x4f,0x6d,0x59,0x57,0x70,0x3d,0x34,0x41, 0x32,0x28,0x32,0x41,0x33,0x42,0x4b,0x40,0x52,0x44,0x3f,0x54,0x40,0x3a,0x4c,0x41, 0x39,0x4a,0x45,0x3c,0x4e,0x47,0x3e,0x50,0x43,0x3a,0x4c,0x35,0x36,0x48,0x54,0x58, 0x64,0x65,0x68,0x71,0x59,0x5e,0x6a,0x43,0x4a,0x5f,0x45,0x45,0x5e,0x45,0x43,0x5d, 0x45,0x46,0x5e,0x45,0x4b,0x62,0x54,0x5b,0x70,0x69,0x6e,0x7f,0x6f,0x74,0x82,0x7d, 0x82,0x8e,0x7c,0x81,0x8f,0x60,0x61,0x76,0x50,0x50,0x68,0x56,0x50,0x69,0x58,0x51, 0x6b,0x57,0x50,0x69,0x57,0x4f,0x67,0x50,0x49,0x5e,0x54,0x4e,0x64,0x55,0x4f,0x67, 0x56,0x54,0x6c,0x50,0x53,0x6b,0x5f,0x66,0x7e,0x64,0x6c,0x84,0x5a,0x62,0x7d,0x54, 0x5d,0x79,0x53,0x5b,0x78,0x55,0x5e,0x7a,0x57,0x60,0x7b,0x5a,0x62,0x7e,0x5c,0x65, 0x7f,0x5c,0x64,0x7e,0x5d,0x66,0x7f,0x60,0x69,0x82,0x62,0x6a,0x83,0x64,0x6d,0x86, 0x6a,0x72,0x89,0x78,0x7f,0x93,0x88,0x8e,0x9e,0x98,0x9d,0xaa,0xa0,0xa3,0xae,0xa3, 0xa6,0xb0,0xa2,0xa6,0xb0,0xb3,0xb5,0xc3,0xa4,0xa8,0xbe,0x99,0x9b,0xb3,0x8b,0x90, 0xab,0x85,0x89,0xa5,0x86,0x8b,0xa7,0x86,0x8a,0xa6,0x84,0x89,0xa6,0x82,0x88,0xa5, 0x7f,0x85,0xa2,0x7a,0x80,0x9e,0x77,0x7d,0x9d,0x76,0x7d,0x9c,0x82,0x85,0xa3,0x8a, 0x8e,0xa8,0x8a,0x8e,0xa7,0x90,0x92,0xac,0x7a,0x7f,0x8e,0x7c,0x81,0x8e,0x7e,0x82, 0x8d,0x7d,0x81,0x8c,0x7a,0x7e,0x88,0x6f,0x73,0x7e,0x65,0x69,0x73,0x62,0x65,0x6e, 0x5f,0x63,0x6d,0x5a,0x5e,0x69,0x90,0x93,0x9c,0x4c,0x51,0x60,0x53,0x58,0x66,0x6e, 0x72,0x7b,0x7e,0x81,0x89,0x8e,0x8e,0x93,0x9d,0x9d,0xa0,0xa2,0xa3,0xa5,0xa2,0xa2, 0xa6,0xa7,0xa8,0xab,0xae,0xb0,0xb3,0xab,0xad,0xb2,0xaa,0xac,0xb2,0xb4,0xb5,0xb9, 0xba,0xba,0xbb,0xb9,0xba,0xbb,0xb0,0xb2,0xb8,0x9a,0x9e,0xaa,0x7a,0x81,0x93,0x62, 0x6a,0x81,0x5e,0x66,0x7e,0x64,0x6b,0x81,0x65,0x6c,0x82,0x5d,0x64,0x7a,0x65,0x6b, 0x7e,0x7e,0x82,0x90,0x6a,0x70,0x81,0x5e,0x64,0x78,0x6a,0x70,0x80,0x7c,0x80,0x8c, 0x78,0x7c,0x87,0x65,0x6a,0x77,0x4e,0x53,0x63,0x56,0x5b,0x69,0x69,0x6c,0x74,0x6c, 0x6f,0x74,0x6b,0x6e,0x73,0x69,0x6c,0x71,0x62,0x63,0x6a,0x51,0x54,0x5a,0x4b,0x4e, 0x55,0x3d,0x3f,0x45,0x2b,0x2d,0x32,0x1e,0x20,0x26,0x16,0x18,0x1d,0x12,0x12,0x17, 0x0e,0x0e,0x13,0x23,0x20,0x2a,0x22,0x20,0x2a,0x0c,0x0d,0x10,0x0a,0x0a,0x0e,0x09, 0x0a,0x0c,0x07,0x07,0x0a,0x06,0x06,0x09,0x06,0x07,0x09,0x05,0x05,0x06,0x05,0x05, 0x06,0x04,0x04,0x06,0x03,0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x2e,0x32,0x40,0x68,0x65,0x88,0x6f,0x5a,0x70,0x2e,0x25,0x2e,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x02,0x02,0x02,0x46,0x3a,0x49,0x65,0x52,0x67,0x5e,0x4a,0x5c,0x50,0x3e,0x4d, 0x4e,0x3d,0x4b,0x50,0x3e,0x4d,0x56,0x43,0x53,0x60,0x4c,0x5f,0x73,0x5e,0x75,0x69, 0x73,0x98,0xdd,0xe0,0xe9,0x71,0x7c,0x9b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x7f,0x7f,0x7f,0xfc,0xfc,0xfc,0xff,0xff,0xff,0xf3,0xf3,0xf3,0x35, 0x35,0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xd9,0xd9,0xd9,0xff,0xff, 0xff,0xff,0xff,0xff,0xf7,0xf7,0xf7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x0c,0x0c,0x0c,0xb1,0xb1,0xb1,0xcf,0xd3,0xdf,0xe6,0xe7,0xed,0x79, 0x71,0x7a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x21,0x23,0x29,0x52,0x54,0x80,0x5c,0x44,0x5e,0x5f,0x47,0x63,0x60, 0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53, 0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77, 0x60,0x53,0x77,0x60,0x53,0x77,0x4b,0x40,0x5f,0x2c,0x24,0x3a,0x30,0x27,0x3e,0x60, 0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x38,0x2d,0x45,0x29,0x1c,0x2c,0x2f,0x22, 0x34,0x3b,0x3e,0x51,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x32,0x38,0x4c,0x5a,0x66,0x8b,0x5c,0x67,0x8f,0x6a,0x76,0x96,0x44,0x3d, 0x4b,0x32,0x26,0x2c,0x27,0x1e,0x23,0x30,0x35,0x47,0x5f,0x6a,0x91,0x5e,0x69,0x91, 0x63,0x6f,0x9c,0x52,0x56,0x82,0x53,0x56,0x7f,0x53,0x55,0x7f,0x52,0x54,0x7d,0x52, 0x57,0x81,0x52,0x5d,0x84,0x53,0x5e,0x86,0x55,0x50,0x78,0x64,0x70,0x96,0xa1,0x9d, 0xa1,0x30,0x24,0x2b,0x38,0x2b,0x34,0x3d,0x31,0x3c,0x04,0x04,0x05,0x04,0x04,0x05, 0x04,0x04,0x05,0x03,0x03,0x04,0x03,0x03,0x04,0x3f,0x31,0x3b,0x2d,0x21,0x27,0x2c, 0x20,0x27,0x2a,0x1e,0x24,0x2d,0x24,0x29,0xb0,0xb4,0xc2,0x88,0x92,0xaf,0x53,0x5e, 0x87,0x4c,0x4a,0x72,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a, 0x52,0x4f,0x7a,0x43,0x40,0x64,0x47,0x43,0x69,0x54,0x4e,0x75,0x43,0x39,0x4f,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x02,0x02,0x02,0x4f,0x59,0x80, 0x52,0x50,0x7b,0x4f,0x48,0x6a,0x52,0x49,0x68,0x5e,0x53,0x76,0x5e,0x53,0x76,0x5e, 0x53,0x76,0x5f,0x52,0x76,0x5f,0x53,0x77,0x5f,0x53,0x77,0x5e,0x53,0x76,0x5a,0x4e, 0x70,0x53,0x48,0x68,0x5b,0x57,0x84,0x49,0x39,0x47,0x2c,0x24,0x2e,0x04,0x05,0x06, 0x05,0x06,0x07,0x06,0x06,0x07,0x06,0x06,0x09,0x06,0x07,0x0a,0x07,0x08,0x0a,0x07, 0x08,0x0a,0x08,0x09,0x0b,0x08,0x09,0x0b,0x08,0x09,0x0c,0x09,0x0a,0x0d,0x09,0x0a, 0x0d,0x0a,0x0a,0x0e,0x0a,0x0b,0x0e,0x0a,0x0b,0x0e,0x0a,0x0b,0x0e,0x0a,0x0b,0x0e, 0x0a,0x0b,0x0e,0x0a,0x0b,0x0e,0x0a,0x0b,0x0e,0x0a,0x0b,0x0e,0x0a,0x0b,0x0e,0x0a, 0x0b,0x0e,0x0a,0x0b,0x0e,0x0a,0x0b,0x0e,0x11,0x10,0x16,0x64,0x50,0x6b,0x5e,0x49, 0x66,0x59,0x46,0x60,0x5b,0x47,0x62,0x5b,0x47,0x63,0x5a,0x46,0x61,0x5e,0x4a,0x67, 0x31,0x28,0x3c,0x32,0x27,0x39,0x2e,0x22,0x32,0x2d,0x23,0x32,0x47,0x39,0x4c,0x68, 0x56,0x6c,0xc3,0xbf,0xc6,0x9b,0x9e,0xa7,0xa5,0xab,0xbb,0xab,0xb1,0xc4,0xa7,0xae, 0xc1,0xa1,0xa8,0xbc,0x9c,0xa3,0xb7,0x91,0x97,0xac,0x89,0x8d,0xa3,0x83,0x89,0xa1, 0x7e,0x83,0x9c,0x78,0x7e,0x97,0x70,0x78,0x8e,0x68,0x6d,0x86,0x65,0x6d,0x87,0x64, 0x6c,0x85,0x58,0x5f,0x7c,0x58,0x60,0x7f,0x54,0x54,0x70,0x4c,0x4b,0x64,0x57,0x57, 0x70,0x32,0x2a,0x34,0x34,0x2b,0x35,0x43,0x36,0x43,0x50,0x42,0x53,0x4f,0x43,0x55, 0x4b,0x40,0x54,0x44,0x3d,0x4f,0x42,0x3c,0x4f,0x44,0x3e,0x50,0x44,0x3b,0x4d,0x3f, 0x39,0x4a,0x39,0x3e,0x52,0x53,0x57,0x66,0x5e,0x61,0x6d,0x5f,0x63,0x71,0x43,0x49, 0x60,0x42,0x42,0x59,0x44,0x43,0x5d,0x42,0x47,0x5e,0x48,0x4f,0x64,0x56,0x5d,0x6e, 0x6e,0x72,0x7f,0x82,0x86,0x8f,0x83,0x87,0x92,0x6f,0x74,0x85,0x54,0x57,0x6f,0x53, 0x50,0x69,0x55,0x4e,0x67,0x57,0x4f,0x68,0x57,0x4f,0x68,0x55,0x4e,0x65,0x54,0x4c, 0x64,0x54,0x4c,0x63,0x54,0x4e,0x65,0x51,0x4f,0x67,0x4f,0x51,0x68,0x5a,0x5f,0x77, 0x5e,0x65,0x7e,0x5a,0x62,0x7d,0x57,0x60,0x7b,0x57,0x5f,0x7b,0x56,0x5f,0x7b,0x5d, 0x65,0x7f,0x5a,0x62,0x7e,0x54,0x5d,0x7a,0x54,0x5c,0x79,0x5a,0x62,0x7d,0x5f,0x68, 0x81,0x64,0x6d,0x85,0x70,0x77,0x8d,0x79,0x80,0x94,0x7b,0x82,0x96,0x83,0x8a,0x9a, 0x8d,0x92,0xa2,0x96,0x9a,0xa7,0x9a,0x9e,0xab,0xb2,0xb4,0xc4,0xa4,0xa9,0xbf,0xa2, 0xa5,0xbb,0x91,0x95,0xaf,0x86,0x8a,0xa6,0x84,0x89,0xa5,0x86,0x8a,0xa7,0x87,0x8c, 0xa9,0x86,0x8b,0xa7,0x83,0x88,0xa5,0x7e,0x84,0xa1,0x7b,0x80,0x9f,0x75,0x7a,0x9a, 0x7f,0x84,0xa2,0x8a,0x8e,0xa9,0x8c,0x90,0xa9,0x91,0x95,0xaf,0x7f,0x86,0x95,0x82, 0x88,0x96,0x85,0x8a,0x96,0x85,0x89,0x95,0x82,0x86,0x92,0x79,0x7d,0x89,0x6b,0x70, 0x7e,0x63,0x68,0x76,0x61,0x66,0x74,0x5e,0x63,0x72,0x5a,0x5f,0x6f,0x62,0x67,0x76, 0x72,0x76,0x82,0x82,0x85,0x8d,0x8e,0x8f,0x96,0x9e,0x9e,0xa2,0xa9,0xa9,0xab,0xa8, 0xa9,0xab,0xa2,0xa4,0xa9,0xa2,0xa4,0xac,0xa4,0xa6,0xae,0x9c,0x9f,0xaa,0xa0,0xa3, 0xab,0xae,0xb0,0xb5,0xb2,0xb3,0xb7,0xb2,0xb4,0xb9,0xa1,0xa4,0xae,0x86,0x8a,0x9b, 0x68,0x6f,0x86,0x5b,0x63,0x7b,0x5a,0x62,0x79,0x5d,0x65,0x7c,0x5c,0x63,0x7a,0x5a, 0x61,0x78,0x5c,0x63,0x78,0x5e,0x65,0x79,0x56,0x5e,0x73,0x56,0x5d,0x72,0x5a,0x61, 0x73,0x5d,0x62,0x73,0x56,0x5d,0x6e,0x4d,0x53,0x64,0x47,0x4d,0x5e,0x53,0x58,0x66, 0x5e,0x63,0x6e,0x61,0x64,0x6d,0x5f,0x62,0x6a,0x5b,0x5e,0x66,0x5a,0x5d,0x65,0x5f, 0x62,0x68,0x60,0x63,0x68,0x59,0x5c,0x61,0x54,0x56,0x5a,0x41,0x42,0x46,0x2c,0x2e, 0x32,0x1c,0x1e,0x22,0x12,0x14,0x19,0x4d,0x4c,0x54,0x4c,0x4a,0x53,0x0f,0x10,0x14, 0x0d,0x0e,0x12,0x0b,0x0c,0x0f,0x09,0x0a,0x0c,0x07,0x08,0x0a,0x07,0x07,0x0a,0x06, 0x06,0x09,0x06,0x06,0x08,0x05,0x05,0x06,0x04,0x04,0x06,0x03,0x03,0x04,0x02,0x02, 0x03,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x27,0x2a,0x36,0x66,0x66,0x8b,0x70,0x5b,0x72, 0x1c,0x17,0x1c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x14, 0x10,0x14,0x4d,0x3f,0x4f,0x5a,0x47,0x58,0x4d,0x3b,0x49,0x48,0x37,0x44,0x49,0x38, 0x46,0x4e,0x3d,0x4b,0x5d,0x49,0x5b,0x71,0x5d,0x74,0x78,0x69,0x88,0x6d,0x66,0x89, 0x73,0x69,0x8a,0x90,0x99,0xb5,0xac,0xb4,0xc8,0x69,0x73,0x96,0x02,0x02,0x03,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x2b,0x2b,0x2b,0xef,0xef,0xef,0xff,0xff,0xff,0xfd,0xfd,0xfd, 0xa2,0xa2,0xa2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x05,0x05,0xf7, 0xf7,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xdf,0xdf,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0x3f,0x3f, 0xb9,0xb8,0xb9,0x14,0x13,0x14,0x22,0x22,0x22,0xbb,0xbb,0xbb,0xff,0xff,0xff,0xff, 0xff,0xff,0x88,0x88,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xbb, 0xbb,0xbb,0xff,0xff,0xff,0xff,0xff,0xff,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x99,0x99,0x99,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x77,0x77, 0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4f,0x57,0x6d,0x5f,0x53,0x77, 0x55,0x3d,0x56,0x64,0x52,0x73,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60, 0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53, 0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x30,0x28,0x3e, 0x2d,0x24,0x3a,0x58,0x4c,0x6d,0x60,0x53,0x77,0x60,0x53,0x77,0x58,0x4c,0x6e,0x32, 0x26,0x39,0x29,0x1c,0x2c,0x29,0x24,0x3b,0x33,0x35,0x41,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0x5f,0x84,0x5b,0x66,0x8d,0x5c, 0x67,0x8f,0x63,0x6c,0x8d,0x32,0x27,0x2f,0x32,0x26,0x2c,0x3a,0x3c,0x51,0x5b,0x66, 0x8f,0x5c,0x68,0x8f,0x5a,0x68,0x93,0x52,0x54,0x81,0x52,0x55,0x7f,0x52,0x55,0x7f, 0x53,0x56,0x7f,0x52,0x57,0x80,0x52,0x5c,0x84,0x53,0x5e,0x86,0x58,0x50,0x78,0x66, 0x71,0x96,0xa0,0x9c,0xa1,0x32,0x25,0x2d,0x3a,0x2c,0x35,0x46,0x38,0x45,0x03,0x03, 0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x3d,0x30,0x3a, 0x2c,0x21,0x27,0x2c,0x21,0x27,0x2c,0x21,0x27,0x21,0x19,0x1d,0xae,0xb0,0xbc,0x99, 0xa1,0xbb,0x5d,0x6a,0x90,0x4c,0x4e,0x76,0x51,0x4e,0x78,0x52,0x4f,0x7a,0x52,0x4f, 0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x45,0x42,0x66,0x48,0x44,0x66,0x50,0x4b,0x71, 0x4f,0x44,0x5f,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x02,0x02, 0x02,0x48,0x52,0x73,0x52,0x54,0x7d,0x4d,0x48,0x6d,0x52,0x48,0x68,0x5e,0x53,0x76, 0x5e,0x53,0x76,0x5e,0x53,0x76,0x5f,0x53,0x77,0x5f,0x52,0x76,0x5f,0x52,0x76,0x5e, 0x53,0x76,0x59,0x4e,0x6f,0x53,0x48,0x67,0x5d,0x59,0x89,0x46,0x38,0x44,0x37,0x2e, 0x39,0x04,0x04,0x06,0x05,0x05,0x06,0x06,0x06,0x07,0x06,0x06,0x09,0x06,0x06,0x09, 0x06,0x07,0x0a,0x07,0x07,0x0a,0x07,0x08,0x0b,0x07,0x08,0x0b,0x08,0x09,0x0b,0x08, 0x09,0x0c,0x09,0x0a,0x0d,0x09,0x0a,0x0d,0x09,0x0a,0x0d,0x0a,0x0a,0x0e,0x0a,0x0a, 0x0e,0x0a,0x0a,0x0e,0x0a,0x0a,0x0e,0x0a,0x0a,0x0e,0x0a,0x0a,0x0e,0x0a,0x0a,0x0e, 0x0a,0x0a,0x0e,0x0a,0x0a,0x0e,0x0a,0x0b,0x0e,0x0a,0x0a,0x0e,0x0a,0x0a,0x0e,0x30, 0x2a,0x37,0x67,0x4f,0x6e,0x5b,0x46,0x62,0x5a,0x46,0x61,0x5a,0x46,0x61,0x5b,0x47, 0x62,0x5e,0x49,0x64,0x47,0x37,0x4e,0x31,0x26,0x38,0x31,0x26,0x38,0x2d,0x21,0x31, 0x33,0x28,0x38,0x5b,0x4b,0x60,0x6c,0x5a,0x71,0xd6,0xd6,0xdb,0x90,0x95,0xa2,0xaa, 0xb0,0xc1,0xab,0xb1,0xc4,0xa5,0xab,0xbf,0xa3,0xa8,0xbd,0x9a,0xa0,0xb5,0x93,0x9a, 0xb1,0x8d,0x95,0xaa,0x86,0x8e,0xa5,0x80,0x87,0xa0,0x7a,0x81,0x99,0x73,0x7a,0x95, 0x6d,0x74,0x8c,0x63,0x69,0x82,0x5d,0x61,0x7d,0x5b,0x5d,0x78,0x44,0x43,0x59,0x44, 0x44,0x5a,0x57,0x59,0x6f,0x20,0x1b,0x22,0x31,0x2a,0x34,0x46,0x3b,0x4a,0x4f,0x44, 0x55,0x50,0x44,0x55,0x4f,0x44,0x56,0x4c,0x43,0x57,0x4b,0x43,0x57,0x4a,0x42,0x55, 0x49,0x3e,0x51,0x46,0x3c,0x4d,0x42,0x3b,0x4e,0x3c,0x3e,0x53,0x4c,0x52,0x61,0x4f, 0x53,0x61,0x38,0x3b,0x50,0x44,0x40,0x56,0x43,0x42,0x5a,0x40,0x40,0x56,0x40,0x46, 0x5a,0x4e,0x53,0x64,0x5a,0x5f,0x6e,0x6a,0x6e,0x7a,0x74,0x78,0x84,0x68,0x6e,0x7e, 0x53,0x57,0x6e,0x52,0x54,0x6d,0x55,0x54,0x6d,0x56,0x50,0x68,0x56,0x4e,0x66,0x56, 0x4e,0x67,0x55,0x4d,0x64,0x55,0x4c,0x63,0x55,0x4d,0x64,0x55,0x4e,0x67,0x4f,0x4c, 0x64,0x52,0x53,0x6c,0x59,0x5c,0x75,0x5e,0x62,0x7a,0x5a,0x62,0x7d,0x59,0x61,0x7c, 0x5a,0x62,0x7d,0x5e,0x66,0x80,0x5e,0x67,0x81,0x56,0x5e,0x7a,0x52,0x52,0x71,0x52, 0x53,0x71,0x53,0x5a,0x76,0x5a,0x62,0x7d,0x67,0x6f,0x86,0x76,0x7e,0x92,0x7c,0x83, 0x96,0x81,0x87,0x99,0x81,0x87,0x99,0x83,0x8a,0x9a,0x86,0x8b,0x9c,0x9f,0xa3,0xb7, 0x92,0x98,0xb3,0x95,0x99,0xb2,0x8e,0x92,0xad,0x82,0x87,0xa5,0x7f,0x85,0xa3,0x82, 0x87,0xa5,0x82,0x87,0xa5,0x82,0x87,0xa5,0x84,0x88,0xa5,0x82,0x87,0xa5,0x7f,0x85, 0xa2,0x80,0x85,0xa4,0x8a,0x8e,0xa9,0x92,0x95,0xae,0x96,0x99,0xb0,0x9d,0x9f,0xb6, 0x8c,0x91,0x9f,0x8d,0x91,0x9e,0x8a,0x8e,0x9c,0x85,0x8a,0x97,0x7e,0x83,0x92,0x76, 0x7b,0x8a,0x70,0x76,0x86,0x71,0x76,0x86,0x75,0x7a,0x8a,0x6e,0x74,0x84,0x68,0x6e, 0x7e,0x77,0x7c,0x8a,0x8d,0x90,0x9a,0x96,0x9a,0x9f,0x9d,0x9e,0xa2,0xa6,0xa7,0xab, 0xaf,0xb0,0xb3,0xaa,0xab,0xaf,0x9a,0x9d,0xa6,0x95,0x99,0xa3,0x97,0x9b,0xa6,0x99, 0x9d,0xa7,0x9a,0x9e,0xa7,0x9a,0x9e,0xa8,0x9a,0x9d,0xa8,0x96,0x9a,0xa6,0x88,0x8d, 0x9d,0x71,0x78,0x8d,0x64,0x6b,0x82,0x5e,0x66,0x7e,0x5b,0x62,0x7a,0x5e,0x65,0x7a, 0x5b,0x62,0x78,0x56,0x5d,0x73,0x52,0x59,0x6f,0x53,0x5a,0x6f,0x52,0x5a,0x6e,0x4f, 0x56,0x6a,0x4e,0x55,0x65,0x4a,0x50,0x5f,0x47,0x4d,0x5e,0x43,0x49,0x5b,0x46,0x4a, 0x5c,0x49,0x4e,0x5e,0x4b,0x51,0x5f,0x49,0x4e,0x5c,0x47,0x4c,0x5a,0x4b,0x50,0x5b, 0x56,0x59,0x62,0x65,0x67,0x6d,0x67,0x6a,0x6f,0x68,0x6a,0x6f,0x69,0x6a,0x6f,0x61, 0x62,0x66,0x50,0x52,0x55,0x3e,0x3f,0x43,0x1f,0x21,0x26,0x1d,0x1d,0x25,0x19,0x1a, 0x21,0x12,0x14,0x18,0x10,0x12,0x16,0x0d,0x0e,0x12,0x0b,0x0c,0x0f,0x09,0x0a,0x0d, 0x09,0x0a,0x0c,0x07,0x07,0x0a,0x07,0x08,0x0a,0x07,0x07,0x0a,0x05,0x05,0x06,0x04, 0x04,0x06,0x02,0x03,0x04,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x39, 0x4a,0x5e,0x5e,0x81,0x6d,0x59,0x6f,0x0c,0x0a,0x0c,0x00,0x00,0x00,0x00,0x00,0x00, 0x52,0x41,0x50,0x4f,0x3e,0x4c,0x46,0x35,0x41,0x46,0x36,0x42,0x47,0x37,0x44,0x61, 0x4d,0x60,0x68,0x66,0x8b,0x8b,0x94,0xb0,0x8a,0x91,0xa2,0x4d,0x51,0x5d,0x34,0x38, 0x44,0x29,0x2d,0x3a,0x38,0x2e,0x3a,0x63,0x6c,0x89,0x7b,0x84,0xa5,0x68,0x6b,0x90, 0x24,0x24,0x31,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xd1,0xd1,0xd1,0xff,0xff,0xff,0xff,0xff, 0xff,0xe3,0xe3,0xe3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x67,0x67,0x67,0xfd,0xfd,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0x9b,0x9b,0x9b,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xaa,0xaa,0xaa,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x77,0x77,0x77,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xbb,0xbb,0xbb,0xff,0xff,0xff,0xff,0xff,0xff,0xbb,0xbb,0xbb,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x99,0x99,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0x77,0x77,0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x1a, 0x1d,0x5a,0x67,0x8d,0x5e,0x46,0x62,0x5c,0x44,0x5e,0x62,0x53,0x77,0x60,0x53,0x77, 0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60, 0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53, 0x77,0x4e,0x43,0x62,0x2d,0x24,0x3a,0x36,0x2d,0x45,0x37,0x2e,0x47,0x42,0x37,0x53, 0x60,0x53,0x77,0x58,0x4a,0x6b,0x32,0x24,0x37,0x29,0x1c,0x2c,0x25,0x24,0x3d,0x1f, 0x21,0x27,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x55,0x5f,0x85,0x5a,0x65,0x8d,0x5c,0x69,0x8f,0x59,0x62,0x84,0x31,0x25,0x2c,0x41, 0x3e,0x55,0x5b,0x66,0x8d,0x5c,0x68,0x8f,0x5d,0x67,0x91,0x52,0x56,0x81,0x52,0x54, 0x7d,0x52,0x53,0x7d,0x52,0x54,0x7d,0x52,0x56,0x81,0x52,0x5b,0x84,0x52,0x5d,0x84, 0x53,0x4f,0x79,0x64,0x71,0x95,0x9b,0x97,0x9c,0x2f,0x24,0x2b,0x38,0x2b,0x34,0x4b, 0x3c,0x49,0x02,0x03,0x03,0x02,0x03,0x03,0x02,0x03,0x03,0x02,0x03,0x03,0x02,0x02, 0x03,0x3d,0x2f,0x39,0x31,0x24,0x2c,0x2f,0x23,0x29,0x2f,0x23,0x2a,0x26,0x1c,0x21, 0x9f,0x9f,0xa8,0xaa,0xb1,0xc5,0x6c,0x77,0x9b,0x4e,0x58,0x80,0x50,0x50,0x78,0x52, 0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7b,0x52,0x4f,0x7b,0x48,0x45,0x69,0x43,0x41, 0x63,0x4e,0x4a,0x6e,0x5a,0x4e,0x70,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x02,0x02,0x02,0x43,0x4c,0x68,0x52,0x5d,0x84,0x4d,0x4b,0x73,0x52,0x49, 0x6a,0x5e,0x53,0x76,0x5e,0x53,0x76,0x5e,0x53,0x76,0x5f,0x53,0x77,0x5f,0x53,0x77, 0x5f,0x53,0x77,0x5e,0x53,0x76,0x59,0x4e,0x6f,0x55,0x48,0x67,0x5a,0x57,0x87,0x44, 0x36,0x42,0x48,0x3b,0x4a,0x04,0x04,0x06,0x05,0x05,0x06,0x05,0x05,0x06,0x06,0x06, 0x08,0x06,0x06,0x09,0x06,0x07,0x09,0x06,0x07,0x0a,0x07,0x07,0x0a,0x07,0x08,0x0b, 0x07,0x08,0x0b,0x07,0x08,0x0b,0x08,0x09,0x0c,0x09,0x0a,0x0c,0x09,0x0a,0x0c,0x09, 0x0a,0x0c,0x09,0x0a,0x0d,0x09,0x0a,0x0d,0x09,0x0a,0x0d,0x0a,0x0a,0x0e,0x0a,0x0a, 0x0e,0x09,0x0a,0x0d,0x09,0x0a,0x0d,0x0a,0x0a,0x0e,0x09,0x0a,0x0d,0x0a,0x0a,0x0e, 0x09,0x0a,0x0d,0x09,0x0a,0x0d,0x59,0x47,0x5f,0x5e,0x49,0x65,0x5a,0x46,0x61,0x5b, 0x46,0x62,0x5b,0x47,0x62,0x5c,0x48,0x62,0x5f,0x4b,0x67,0x31,0x25,0x38,0x31,0x28, 0x3a,0x2f,0x24,0x35,0x2c,0x21,0x32,0x3a,0x30,0x42,0x6d,0x5b,0x73,0x8c,0x7d,0x90, 0xbb,0xbc,0xc2,0x90,0x93,0xa1,0xae,0xb5,0xc7,0xa7,0xae,0xc2,0xa7,0xad,0xc0,0xa2, 0xa9,0xbe,0x9a,0xa1,0xb8,0x95,0x9c,0xb3,0x8e,0x96,0xae,0x89,0x91,0xa9,0x84,0x8b, 0xa5,0x7e,0x84,0x9f,0x6b,0x6f,0x87,0x61,0x66,0x7d,0x5a,0x5f,0x75,0x59,0x5e,0x77, 0x44,0x46,0x5d,0x4a,0x4e,0x65,0x4e,0x52,0x66,0x15,0x14,0x19,0x26,0x22,0x2c,0x3a, 0x33,0x42,0x4a,0x40,0x52,0x4f,0x44,0x55,0x50,0x45,0x57,0x50,0x45,0x58,0x50,0x45, 0x59,0x4d,0x44,0x57,0x4c,0x43,0x57,0x4b,0x40,0x53,0x4a,0x3f,0x51,0x43,0x3d,0x4f, 0x3e,0x3a,0x4f,0x3a,0x3b,0x4e,0x3a,0x38,0x4c,0x47,0x3f,0x52,0x4c,0x43,0x57,0x49, 0x42,0x57,0x3e,0x3d,0x53,0x3b,0x41,0x56,0x49,0x4e,0x5e,0x52,0x56,0x65,0x5a,0x60, 0x6f,0x59,0x5f,0x71,0x5b,0x60,0x73,0x59,0x5e,0x72,0x51,0x55,0x6c,0x53,0x52,0x6b, 0x57,0x51,0x6a,0x58,0x51,0x6a,0x56,0x4e,0x66,0x54,0x4b,0x61,0x54,0x4c,0x62,0x56, 0x4e,0x64,0x54,0x4e,0x65,0x51,0x4d,0x64,0x53,0x53,0x6c,0x58,0x5a,0x72,0x5c,0x60, 0x78,0x58,0x60,0x7a,0x5d,0x64,0x7e,0x62,0x6a,0x82,0x60,0x69,0x82,0x5c,0x65,0x7e, 0x50,0x58,0x75,0x50,0x51,0x6e,0x50,0x50,0x6e,0x52,0x5a,0x76,0x61,0x69,0x82,0x75, 0x7c,0x90,0x81,0x87,0x9a,0x8b,0x91,0xa0,0x89,0x8e,0x9f,0x81,0x87,0x9a,0x7e,0x84, 0x98,0x94,0x99,0xb1,0x83,0x8a,0xa7,0x81,0x86,0xa4,0x81,0x85,0xa3,0x7d,0x81,0xa0, 0x7c,0x80,0x9f,0x7e,0x82,0xa0,0x80,0x84,0xa2,0x88,0x8d,0xa8,0x8e,0x91,0xad,0x90, 0x95,0xad,0x91,0x95,0xaf,0x96,0x9a,0xb2,0xa6,0xa9,0xbd,0xac,0xae,0xc0,0xa9,0xaa, 0xbe,0xae,0xaf,0xc3,0x9c,0xa0,0xab,0x97,0x9c,0xa6,0x8e,0x93,0xa0,0x82,0x88,0x97, 0x77,0x7d,0x8d,0x74,0x7a,0x8a,0x77,0x7d,0x8e,0x7e,0x84,0x93,0x83,0x88,0x97,0x84, 0x89,0x98,0x7d,0x82,0x91,0x83,0x87,0x94,0x95,0x97,0xa0,0xa2,0xa3,0xa9,0xa2,0xa4, 0xa9,0xaa,0xac,0xb0,0xae,0xb0,0xb5,0xa6,0xa9,0xae,0x93,0x97,0xa2,0x8a,0x8f,0x9d, 0x8f,0x94,0xa2,0x92,0x96,0xa3,0x90,0x95,0xa2,0x8e,0x92,0xa0,0x86,0x8b,0x9a,0x7e, 0x84,0x95,0x72,0x79,0x8e,0x69,0x71,0x87,0x62,0x69,0x82,0x5e,0x66,0x7e,0x5a,0x61, 0x77,0x57,0x5e,0x74,0x52,0x58,0x6e,0x4e,0x54,0x68,0x4e,0x55,0x68,0x4e,0x53,0x67, 0x4a,0x51,0x64,0x46,0x4c,0x5e,0x40,0x46,0x56,0x3c,0x41,0x4e,0x3d,0x42,0x51,0x3e, 0x42,0x52,0x41,0x46,0x56,0x42,0x47,0x56,0x44,0x49,0x58,0x45,0x4a,0x57,0x40,0x44, 0x52,0x41,0x45,0x52,0x49,0x4d,0x56,0x56,0x59,0x61,0x5e,0x62,0x68,0x60,0x62,0x6a, 0x60,0x62,0x69,0x5b,0x5d,0x61,0x60,0x61,0x65,0x4c,0x4e,0x52,0x26,0x29,0x2e,0x1a, 0x1d,0x22,0x18,0x1a,0x1e,0x15,0x16,0x1b,0x12,0x13,0x18,0x0f,0x11,0x15,0x0d,0x0e, 0x12,0x0d,0x0e,0x11,0x0a,0x0c,0x0f,0x09,0x0a,0x0d,0x0a,0x0a,0x0d,0x0a,0x0b,0x0e, 0x06,0x07,0x09,0x04,0x04,0x06,0x03,0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x02,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x28,0x28,0x37,0x60,0x5e,0x81,0x6f,0x5b,0x71,0x03,0x02, 0x03,0x3a,0x2d,0x37,0x44,0x34,0x3f,0x46,0x36,0x42,0x5f,0x4c,0x5e,0x68,0x66,0x8b, 0x6f,0x79,0x99,0x51,0x59,0x70,0x29,0x2c,0x39,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6e, 0x92,0x68,0x68,0x8d,0x50,0x4f,0x6a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x9b,0x9b,0x9b,0xfa,0xfa,0xfa,0xfd, 0xfd,0xfd,0xf6,0xf6,0xf6,0x3e,0x3e,0x3e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xb5,0xb5,0xb5,0xfd,0xfd,0xfd,0xff,0xff,0xff,0xfd,0xfd,0xfd, 0x37,0x37,0x37,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xaa,0xaa, 0xaa,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x77,0x77,0x77, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xbb,0xbb,0xbb,0xff,0xff,0xff,0xff,0xff,0xff, 0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x99,0x99,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0x77,0x77,0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x4d,0x51,0x5f,0x52,0x4f,0x7b,0x56,0x3e,0x57,0x64,0x4d, 0x6b,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77, 0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60, 0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x2e,0x26,0x3c,0x2d,0x24,0x3a,0x30,0x28, 0x3f,0x47,0x3c,0x59,0x60,0x53,0x77,0x60,0x53,0x77,0x59,0x49,0x69,0x2c,0x1f,0x2f, 0x2c,0x1f,0x30,0x29,0x2c,0x44,0x0c,0x0d,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5b,0x66,0x8c,0x5b,0x68,0x8f,0x5b,0x68,0x8f, 0x4e,0x50,0x6a,0x40,0x3e,0x53,0x59,0x64,0x8b,0x5c,0x67,0x8f,0x60,0x6e,0x98,0x52, 0x53,0x7d,0x52,0x54,0x7d,0x52,0x52,0x7c,0x52,0x53,0x7d,0x52,0x55,0x7f,0x52,0x57, 0x81,0x52,0x5a,0x83,0x58,0x50,0x75,0x5b,0x65,0x85,0x72,0x6d,0x72,0x23,0x1a,0x20, 0x2f,0x24,0x2b,0x48,0x38,0x45,0x02,0x03,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02, 0x02,0x02,0x02,0x02,0x02,0x41,0x32,0x3d,0x32,0x25,0x2d,0x32,0x25,0x2c,0x34,0x27, 0x2f,0x2d,0x21,0x27,0x8a,0x87,0x8e,0xb7,0xbd,0xcc,0x7f,0x89,0xa9,0x54,0x60,0x87, 0x50,0x52,0x7b,0x52,0x50,0x7b,0x52,0x50,0x7b,0x52,0x4f,0x7a,0x52,0x4f,0x7b,0x4a, 0x47,0x6e,0x42,0x40,0x60,0x49,0x46,0x6b,0x64,0x5a,0x81,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3c,0x44,0x5a,0x54,0x5f,0x87,0x4f, 0x4c,0x74,0x51,0x47,0x68,0x5e,0x52,0x75,0x5e,0x53,0x76,0x5f,0x53,0x77,0x5f,0x53, 0x77,0x5f,0x53,0x77,0x5f,0x53,0x77,0x5e,0x53,0x76,0x5a,0x4f,0x70,0x55,0x4a,0x68, 0x5c,0x5a,0x8a,0x46,0x39,0x48,0x59,0x48,0x5a,0x04,0x04,0x06,0x04,0x04,0x06,0x04, 0x05,0x06,0x05,0x06,0x07,0x06,0x06,0x08,0x06,0x06,0x09,0x06,0x07,0x09,0x06,0x07, 0x0a,0x07,0x08,0x0a,0x07,0x08,0x0a,0x07,0x08,0x0a,0x07,0x08,0x0b,0x07,0x08,0x0b, 0x08,0x09,0x0c,0x08,0x09,0x0c,0x08,0x09,0x0c,0x09,0x0a,0x0c,0x09,0x0a,0x0c,0x09, 0x0a,0x0c,0x09,0x0a,0x0c,0x09,0x0a,0x0c,0x09,0x0a,0x0c,0x09,0x0a,0x0c,0x09,0x0a, 0x0c,0x09,0x0a,0x0c,0x09,0x0a,0x0c,0x08,0x09,0x0c,0x17,0x16,0x1d,0x66,0x4f,0x6d, 0x5b,0x46,0x63,0x5b,0x47,0x62,0x5a,0x46,0x61,0x5a,0x46,0x61,0x5c,0x47,0x63,0x40, 0x32,0x48,0x31,0x27,0x3a,0x31,0x25,0x37,0x2c,0x21,0x30,0x30,0x23,0x35,0x67,0x57, 0x6e,0x70,0x5d,0x76,0xc0,0xb9,0xc2,0x9b,0x9f,0xa9,0x9f,0xa5,0xb5,0xac,0xb3,0xc6, 0xaa,0xb0,0xc3,0xa4,0xab,0xc0,0xa1,0xa8,0xbd,0x9a,0xa2,0xb9,0x95,0x9c,0xb4,0x8f, 0x98,0xb1,0x8b,0x92,0xac,0x85,0x8d,0xa7,0x7e,0x84,0x9e,0x6e,0x73,0x8c,0x64,0x6a, 0x82,0x67,0x6d,0x87,0x4d,0x51,0x68,0x57,0x5d,0x78,0x49,0x4e,0x5f,0x0e,0x0f,0x14, 0x1c,0x1a,0x22,0x2c,0x27,0x34,0x3a,0x34,0x43,0x48,0x3e,0x4f,0x4e,0x44,0x55,0x50, 0x44,0x58,0x51,0x46,0x5b,0x4e,0x45,0x59,0x4b,0x44,0x57,0x48,0x41,0x56,0x48,0x41, 0x55,0x46,0x3f,0x52,0x41,0x3c,0x4f,0x41,0x3c,0x4f,0x46,0x3f,0x53,0x4b,0x41,0x54, 0x4d,0x43,0x54,0x4e,0x44,0x57,0x4c,0x43,0x58,0x41,0x3e,0x53,0x39,0x3a,0x50,0x49, 0x4e,0x5e,0x51,0x56,0x66,0x57,0x5c,0x6b,0x69,0x6d,0x78,0x64,0x66,0x75,0x56,0x5a, 0x6d,0x53,0x55,0x6b,0x52,0x51,0x6a,0x58,0x51,0x6b,0x5a,0x53,0x6c,0x57,0x4f,0x67, 0x54,0x4b,0x62,0x54,0x4b,0x62,0x54,0x4c,0x65,0x53,0x4d,0x65,0x52,0x4d,0x66,0x53, 0x52,0x6c,0x57,0x58,0x70,0x59,0x5c,0x74,0x5a,0x61,0x78,0x60,0x68,0x80,0x62,0x69, 0x82,0x5c,0x65,0x7e,0x57,0x5f,0x7a,0x53,0x5c,0x76,0x55,0x5c,0x76,0x62,0x6b,0x82, 0x73,0x7a,0x8e,0x7d,0x83,0x95,0x81,0x87,0x99,0x82,0x88,0x99,0x87,0x8d,0x9d,0x85, 0x8a,0x9a,0x7d,0x83,0x96,0x8b,0x91,0xab,0x7c,0x83,0xa2,0x7a,0x7d,0x9c,0x79,0x7d, 0x9a,0x79,0x7c,0x98,0x78,0x7b,0x97,0x79,0x7b,0x98,0x7b,0x7d,0x99,0x80,0x82,0x9f, 0x87,0x89,0xa5,0x8a,0x8e,0xa7,0x8e,0x91,0xab,0x94,0x96,0xae,0xa6,0xa7,0xba,0xac, 0xac,0xbf,0xab,0xac,0xbe,0xaf,0xaf,0xc1,0x9d,0xa0,0xab,0x98,0x9b,0xa6,0x8c,0x90, 0x9e,0x81,0x85,0x95,0x7a,0x80,0x90,0x7c,0x82,0x91,0x81,0x86,0x96,0x85,0x8a,0x99, 0x85,0x8a,0x9a,0x8b,0x90,0x9d,0x8b,0x90,0x9e,0x8a,0x8e,0x9b,0x93,0x96,0xa1,0x9f, 0xa2,0xa9,0xa3,0xa6,0xad,0xa2,0xa5,0xad,0xa6,0xa9,0xaf,0x99,0x9c,0xa6,0x87,0x8d, 0x9b,0x86,0x8c,0x9b,0x92,0x96,0xa3,0x9c,0xa0,0xab,0x9a,0x9e,0xa9,0x93,0x98,0xa4, 0x8a,0x8f,0x9d,0x7c,0x82,0x94,0x72,0x79,0x8d,0x6a,0x71,0x88,0x65,0x6c,0x82,0x5a, 0x60,0x77,0x4f,0x56,0x6d,0x4d,0x52,0x68,0x48,0x4e,0x61,0x44,0x4a,0x5c,0x45,0x4a, 0x5e,0x45,0x4a,0x5f,0x42,0x47,0x5c,0x3d,0x42,0x56,0x3a,0x40,0x52,0x3a,0x3f,0x50, 0x3b,0x40,0x51,0x3c,0x40,0x52,0x3b,0x41,0x52,0x3e,0x42,0x54,0x3f,0x45,0x56,0x40, 0x45,0x56,0x3d,0x42,0x52,0x38,0x3d,0x4c,0x3a,0x3e,0x4c,0x40,0x43,0x50,0x4a,0x4e, 0x59,0x4e,0x52,0x5c,0x4a,0x4e,0x56,0x4c,0x50,0x57,0x55,0x58,0x5e,0x42,0x45,0x4a, 0x29,0x2b,0x33,0x29,0x2b,0x33,0x2b,0x2e,0x33,0x1f,0x21,0x26,0x17,0x19,0x1e,0x14, 0x15,0x1a,0x12,0x14,0x19,0x0e,0x10,0x14,0x0e,0x0f,0x12,0x0b,0x0d,0x10,0x0a,0x0b, 0x0e,0x0a,0x0a,0x0e,0x06,0x07,0x09,0x05,0x05,0x06,0x04,0x04,0x06,0x02,0x03,0x04, 0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x14,0x1b,0x67, 0x5c,0x78,0x66,0x53,0x67,0x49,0x38,0x45,0x76,0x61,0x7a,0x5c,0x5f,0x81,0x1a,0x1c, 0x25,0x21,0x25,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x1d,0x1d,0x28,0x68,0x66,0x8b,0x5e,0x59,0x78,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5c,0x5c,0x5c,0xf9,0xf9,0xf9, 0xff,0xff,0xff,0xfc,0xfc,0xfc,0x9c,0x9c,0x9c,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xeb,0xeb,0xeb,0xff,0xff,0xff,0xff,0xff, 0xff,0xef,0xef,0xef,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x22,0x22,0x22,0xbb,0xbb,0xbb,0xff,0xff,0xff,0xff,0xff,0xff,0x88,0x88, 0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xbb,0xbb,0xbb,0xff,0xff, 0xff,0xff,0xff,0xff,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x99, 0x99,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x77,0x77,0x77,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x05,0x05,0x5c,0x65,0x85,0x64, 0x52,0x73,0x57,0x40,0x5a,0x64,0x53,0x76,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53, 0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77, 0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x51,0x45,0x65,0x42, 0x37,0x53,0x52,0x47,0x67,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53, 0x77,0x52,0x43,0x5f,0x2a,0x1d,0x2d,0x2d,0x21,0x33,0x2d,0x31,0x45,0x04,0x04,0x05, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3d,0x44,0x5e,0x5c,0x69, 0x8f,0x5c,0x69,0x8f,0x5b,0x67,0x8e,0x43,0x41,0x57,0x57,0x63,0x8b,0x5a,0x65,0x8c, 0x5f,0x6c,0x98,0x52,0x53,0x7e,0x52,0x53,0x7d,0x52,0x52,0x7c,0x52,0x52,0x7c,0x52, 0x53,0x7c,0x52,0x55,0x7f,0x50,0x56,0x7f,0x4d,0x44,0x64,0x38,0x3f,0x53,0x4a,0x49, 0x4a,0x64,0x61,0x63,0x25,0x1d,0x23,0x45,0x36,0x43,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x44,0x35,0x41,0x35,0x28,0x31,0x36, 0x28,0x32,0x38,0x2a,0x34,0x34,0x27,0x2f,0x6b,0x66,0x6d,0xc2,0xc6,0xd4,0x92,0x9c, 0xb7,0x5d,0x6a,0x90,0x4f,0x57,0x7f,0x52,0x52,0x7d,0x52,0x50,0x7c,0x52,0x50,0x7b, 0x52,0x50,0x7b,0x4a,0x47,0x6e,0x40,0x3d,0x5e,0x43,0x40,0x64,0x6c,0x62,0x90,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x35,0x3c,0x4d, 0x55,0x61,0x89,0x4f,0x4d,0x78,0x4e,0x47,0x68,0x5f,0x52,0x76,0x5f,0x52,0x76,0x5f, 0x53,0x77,0x5f,0x53,0x77,0x5f,0x53,0x77,0x5f,0x53,0x77,0x5f,0x53,0x77,0x5b,0x4f, 0x70,0x55,0x4a,0x69,0x59,0x57,0x86,0x46,0x3b,0x4b,0x5b,0x4a,0x5b,0x03,0x04,0x05, 0x04,0x04,0x06,0x04,0x04,0x06,0x04,0x05,0x06,0x06,0x06,0x07,0x06,0x06,0x09,0x06, 0x06,0x08,0x06,0x07,0x09,0x06,0x07,0x0a,0x06,0x07,0x0a,0x07,0x07,0x0a,0x07,0x08, 0x0a,0x07,0x08,0x0b,0x07,0x08,0x0b,0x07,0x08,0x0b,0x07,0x08,0x0b,0x07,0x08,0x0b, 0x07,0x08,0x0b,0x08,0x09,0x0b,0x08,0x09,0x0b,0x07,0x08,0x0b,0x08,0x09,0x0b,0x08, 0x09,0x0b,0x07,0x08,0x0b,0x07,0x08,0x0b,0x08,0x09,0x0b,0x07,0x08,0x0b,0x07,0x08, 0x0b,0x43,0x38,0x4a,0x5f,0x49,0x67,0x59,0x45,0x60,0x5b,0x47,0x62,0x5c,0x47,0x62, 0x5c,0x47,0x63,0x5f,0x4a,0x64,0x30,0x24,0x36,0x30,0x25,0x37,0x2e,0x22,0x33,0x2a, 0x20,0x2d,0x36,0x2b,0x3c,0x71,0x5e,0x76,0x73,0x61,0x7a,0xdc,0xdb,0xdf,0x9b,0x9f, 0xab,0xab,0xb1,0xc1,0xac,0xb3,0xc4,0xa7,0xad,0xc1,0xa3,0xaa,0xbf,0xa1,0xa9,0xbc, 0x9a,0xa2,0xb9,0x95,0x9d,0xb5,0x91,0x99,0xb2,0x8b,0x93,0xad,0x85,0x8c,0xa9,0x7f, 0x87,0xa1,0x78,0x7e,0x9a,0x69,0x70,0x8b,0x50,0x57,0x6d,0x66,0x6f,0x8a,0x42,0x47, 0x53,0x0c,0x0e,0x11,0x15,0x15,0x1b,0x21,0x20,0x2a,0x2f,0x2c,0x3a,0x38,0x34,0x43, 0x46,0x3d,0x4e,0x4c,0x41,0x53,0x4e,0x45,0x58,0x4c,0x45,0x5a,0x48,0x42,0x58,0x47, 0x41,0x57,0x47,0x41,0x57,0x46,0x41,0x54,0x41,0x3c,0x4f,0x41,0x3c,0x4f,0x41,0x3d, 0x4f,0x45,0x3d,0x51,0x4b,0x42,0x55,0x50,0x44,0x57,0x51,0x46,0x59,0x50,0x45,0x58, 0x47,0x40,0x54,0x3b,0x3d,0x52,0x48,0x4e,0x5d,0x52,0x56,0x62,0x58,0x5c,0x66,0x57, 0x5b,0x66,0x54,0x58,0x67,0x58,0x5b,0x6c,0x59,0x5c,0x6e,0x51,0x51,0x6a,0x57,0x51, 0x6b,0x59,0x53,0x6c,0x57,0x4f,0x67,0x56,0x4e,0x64,0x54,0x4c,0x62,0x54,0x4e,0x65, 0x52,0x4c,0x62,0x54,0x4e,0x67,0x55,0x50,0x6a,0x54,0x55,0x6d,0x5d,0x5f,0x75,0x5e, 0x62,0x7a,0x5e,0x64,0x7d,0x5a,0x61,0x7a,0x56,0x5e,0x77,0x56,0x5d,0x76,0x5a,0x62, 0x79,0x71,0x77,0x8a,0x82,0x87,0x95,0x84,0x89,0x97,0x7e,0x83,0x94,0x76,0x7c,0x8e, 0x75,0x7b,0x8e,0x7b,0x81,0x92,0x77,0x7d,0x90,0x86,0x8c,0xa6,0x78,0x7e,0x9c,0x75, 0x77,0x95,0x73,0x75,0x92,0x74,0x73,0x91,0x71,0x71,0x8f,0x70,0x70,0x8e,0x71,0x71, 0x8e,0x71,0x71,0x8f,0x73,0x72,0x90,0x74,0x74,0x92,0x77,0x77,0x94,0x7b,0x7b,0x97, 0x83,0x83,0x9d,0x8d,0x8c,0xa4,0x90,0x8f,0xa5,0x95,0x93,0xaa,0x86,0x88,0x97,0x80, 0x82,0x93,0x79,0x7b,0x8d,0x77,0x7a,0x8d,0x78,0x7a,0x8d,0x79,0x7d,0x8f,0x79,0x7d, 0x8f,0x79,0x7f,0x90,0x7b,0x82,0x92,0x89,0x8e,0x9d,0x8b,0x91,0x9e,0x8a,0x8e,0x9c, 0x87,0x8d,0x9a,0x8a,0x8e,0x9b,0x90,0x95,0xa1,0x92,0x97,0xa3,0x8d,0x91,0x9e,0x80, 0x85,0x96,0x7e,0x84,0x96,0x8d,0x92,0x9f,0x9b,0x9e,0xa9,0xa2,0xa4,0xae,0xa1,0xa5, 0xae,0x9a,0x9e,0xa9,0x90,0x95,0xa2,0x80,0x86,0x97,0x73,0x79,0x8d,0x67,0x6e,0x82, 0x5a,0x61,0x78,0x4f,0x56,0x6e,0x4a,0x51,0x66,0x44,0x4a,0x5d,0x3e,0x43,0x57,0x3b, 0x40,0x54,0x3c,0x3f,0x54,0x3e,0x3e,0x54,0x3c,0x3d,0x52,0x37,0x3a,0x4d,0x38,0x3a, 0x4d,0x3c,0x3e,0x51,0x3c,0x3f,0x51,0x3b,0x3e,0x4f,0x3b,0x3e,0x4f,0x3c,0x40,0x51, 0x3d,0x40,0x52,0x3e,0x42,0x53,0x3e,0x42,0x53,0x3b,0x3f,0x51,0x3a,0x3e,0x4f,0x38, 0x3c,0x4d,0x38,0x3d,0x4c,0x3a,0x3f,0x4d,0x3f,0x43,0x50,0x48,0x4c,0x57,0x4e,0x51, 0x5a,0x40,0x43,0x4c,0x32,0x35,0x3e,0x3a,0x3d,0x46,0x4e,0x50,0x57,0x38,0x3a,0x42, 0x1e,0x21,0x26,0x17,0x19,0x1f,0x14,0x16,0x1b,0x12,0x13,0x19,0x11,0x12,0x16,0x0e, 0x0e,0x13,0x0b,0x0c,0x10,0x09,0x0a,0x0d,0x06,0x07,0x0a,0x06,0x06,0x08,0x04,0x05, 0x06,0x03,0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x5a,0x76,0x5e,0x5a,0x78,0x2f,0x2e,0x3f,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5b,0x58,0x76,0x61,0x59,0x76,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0x1f,0x1f,0xec,0xec, 0xec,0xff,0xff,0xff,0xfd,0xfd,0xfd,0xd0,0xd0,0xd0,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x35,0x35,0x35,0xfc,0xfc,0xfc,0xff, 0xff,0xff,0xff,0xff,0xff,0xc4,0xc4,0xc4,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xbb, 0xbb,0xbb,0xff,0xff,0xff,0xff,0xff,0xff,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x99,0x99,0x99,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x77,0x77, 0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x31,0x33,0x3a,0x55,0x60,0x8a,0x5d,0x45,0x5f,0x60,0x4a,0x65,0x60,0x53,0x77,0x60, 0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53, 0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77, 0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60, 0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x46,0x34,0x4b,0x2b,0x1d,0x2d,0x2e,0x24, 0x39,0x2f,0x33,0x42,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x5b,0x67,0x8d,0x5c,0x69,0x8f,0x5c,0x69,0x8f,0x59,0x66,0x8b,0x56,0x63, 0x8b,0x59,0x64,0x8c,0x6f,0x7d,0xa5,0x52,0x5d,0x87,0x52,0x52,0x7c,0x52,0x52,0x7d, 0x52,0x50,0x7c,0x52,0x52,0x7c,0x51,0x53,0x7c,0x46,0x49,0x6d,0x33,0x2d,0x41,0x66, 0x68,0x6d,0xd6,0xd6,0xd6,0x50,0x4d,0x50,0x24,0x1b,0x20,0x44,0x34,0x40,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x4a,0x39,0x46, 0x39,0x2b,0x35,0x3b,0x2c,0x37,0x3f,0x30,0x3a,0x41,0x31,0x3c,0x50,0x46,0x4e,0xcb, 0xd0,0xda,0xa6,0xae,0xc3,0x6e,0x7a,0x9c,0x50,0x5a,0x81,0x52,0x54,0x7e,0x52,0x50, 0x7b,0x52,0x50,0x7b,0x52,0x50,0x7b,0x4d,0x4c,0x75,0x41,0x3e,0x60,0x42,0x41,0x63, 0x6d,0x63,0x93,0x00,0x00,0x00,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x2a,0x2d,0x3a,0x57,0x63,0x8a,0x50,0x4e,0x79,0x4d,0x46,0x67,0x5f,0x52,0x76, 0x5f,0x52,0x76,0x5f,0x53,0x77,0x5f,0x52,0x76,0x5f,0x53,0x77,0x5f,0x53,0x77,0x5f, 0x53,0x77,0x5b,0x50,0x71,0x55,0x4a,0x69,0x57,0x54,0x81,0x48,0x3f,0x4e,0x5a,0x49, 0x5a,0x03,0x03,0x04,0x03,0x04,0x05,0x04,0x04,0x06,0x04,0x04,0x06,0x04,0x05,0x06, 0x05,0x06,0x07,0x05,0x06,0x07,0x06,0x06,0x09,0x06,0x06,0x09,0x06,0x06,0x09,0x06, 0x07,0x0a,0x06,0x07,0x0a,0x07,0x07,0x0a,0x06,0x07,0x0a,0x07,0x07,0x0a,0x07,0x08, 0x0a,0x07,0x08,0x0a,0x07,0x08,0x0a,0x07,0x08,0x0b,0x07,0x08,0x0b,0x07,0x08,0x0b, 0x07,0x08,0x0a,0x07,0x08,0x0a,0x07,0x08,0x0a,0x07,0x08,0x0a,0x07,0x08,0x0a,0x07, 0x08,0x0a,0x07,0x08,0x0a,0x0a,0x0b,0x0f,0x64,0x4c,0x6a,0x5c,0x47,0x63,0x5a,0x45, 0x60,0x5c,0x47,0x62,0x5b,0x47,0x62,0x5b,0x46,0x61,0x41,0x33,0x48,0x30,0x24,0x36, 0x30,0x24,0x36,0x2a,0x1f,0x2e,0x2a,0x1e,0x2d,0x47,0x3b,0x50,0x73,0x61,0x7a,0x7e, 0x6f,0x87,0xd1,0xd1,0xd5,0x9c,0xa0,0xaf,0xa7,0xae,0xbf,0xa9,0xb0,0xc3,0xa5,0xac, 0xc1,0xa4,0xab,0xc0,0x9f,0xa6,0xbc,0x9c,0xa2,0xba,0x94,0x9c,0xb5,0x8f,0x96,0xb1, 0x8b,0x93,0xac,0x83,0x8b,0xa7,0x7f,0x87,0xa3,0x6c,0x73,0x8c,0x57,0x5d,0x73,0x75, 0x7d,0x99,0x30,0x32,0x3a,0x0d,0x0e,0x11,0x10,0x12,0x16,0x17,0x17,0x1d,0x21,0x21, 0x2a,0x2d,0x2b,0x39,0x39,0x33,0x42,0x42,0x39,0x4a,0x45,0x3d,0x50,0x45,0x40,0x54, 0x45,0x41,0x57,0x46,0x41,0x57,0x46,0x41,0x57,0x44,0x40,0x55,0x41,0x3c,0x4f,0x40, 0x3a,0x4e,0x3f,0x3a,0x4e,0x40,0x3b,0x4f,0x41,0x3c,0x4f,0x48,0x3e,0x51,0x4e,0x43, 0x55,0x51,0x47,0x59,0x51,0x46,0x58,0x4f,0x44,0x58,0x42,0x3e,0x52,0x39,0x3e,0x52, 0x46,0x4a,0x59,0x45,0x4a,0x5c,0x5e,0x62,0x6e,0x6a,0x6d,0x79,0x6e,0x6f,0x7e,0x5d, 0x60,0x73,0x55,0x56,0x6e,0x55,0x52,0x6c,0x58,0x51,0x69,0x57,0x4e,0x65,0x56,0x4e, 0x65,0x57,0x4f,0x67,0x55,0x4e,0x65,0x53,0x4d,0x64,0x53,0x4d,0x64,0x53,0x4f,0x69, 0x57,0x57,0x6f,0x5c,0x5d,0x74,0x5b,0x5e,0x75,0x56,0x5a,0x72,0x52,0x58,0x72,0x51, 0x58,0x71,0x55,0x5c,0x74,0x60,0x67,0x7d,0x7a,0x80,0x8f,0x88,0x8c,0x99,0x84,0x88, 0x96,0x7a,0x7f,0x8f,0x75,0x7a,0x8c,0x72,0x77,0x8a,0x74,0x7a,0x8d,0x83,0x8a,0xa2, 0x77,0x7b,0x98,0x6b,0x6e,0x8b,0x68,0x67,0x86,0x68,0x66,0x84,0x68,0x65,0x84,0x67, 0x65,0x83,0x67,0x65,0x83,0x67,0x64,0x82,0x66,0x62,0x80,0x66,0x62,0x80,0x67,0x64, 0x82,0x6b,0x67,0x87,0x70,0x6e,0x8a,0x71,0x6f,0x8c,0x73,0x71,0x8d,0x79,0x77,0x94, 0x6c,0x6d,0x82,0x6d,0x6e,0x82,0x6c,0x6d,0x82,0x6e,0x71,0x85,0x70,0x71,0x85,0x6e, 0x71,0x84,0x6d,0x6f,0x83,0x6e,0x73,0x87,0x72,0x79,0x8d,0x7a,0x7f,0x92,0x7a,0x7f, 0x92,0x79,0x7e,0x91,0x76,0x7d,0x90,0x76,0x7d,0x90,0x77,0x7e,0x91,0x7e,0x84,0x95, 0x7b,0x82,0x93,0x7a,0x82,0x93,0x81,0x86,0x97,0x8e,0x94,0xa2,0x97,0x9b,0xa6,0xa1, 0xa4,0xae,0xa2,0xa6,0xaf,0x9d,0xa1,0xab,0x8e,0x93,0xa1,0x7d,0x83,0x95,0x68,0x6e, 0x82,0x58,0x5e,0x75,0x4e,0x55,0x6d,0x49,0x4e,0x66,0x41,0x47,0x5b,0x3b,0x40,0x54, 0x3a,0x3c,0x51,0x3c,0x3b,0x52,0x3a,0x3a,0x4e,0x37,0x38,0x4a,0x35,0x35,0x46,0x35, 0x34,0x46,0x36,0x37,0x4a,0x3b,0x3d,0x4e,0x3c,0x3e,0x4f,0x3a,0x3d,0x4e,0x3a,0x3d, 0x4e,0x3a,0x3c,0x4d,0x3a,0x3b,0x4c,0x3b,0x3e,0x50,0x3c,0x40,0x50,0x3c,0x40,0x50, 0x3a,0x3e,0x4f,0x3a,0x3e,0x4f,0x3a,0x3e,0x4e,0x3a,0x3e,0x4e,0x3f,0x44,0x52,0x46, 0x4b,0x58,0x48,0x4c,0x58,0x3e,0x42,0x4e,0x36,0x3b,0x44,0x3a,0x3d,0x46,0x47,0x4b, 0x55,0x42,0x46,0x4f,0x29,0x2b,0x34,0x22,0x24,0x2b,0x25,0x26,0x2c,0x1b,0x1d,0x22, 0x16,0x17,0x1c,0x10,0x12,0x16,0x0e,0x0f,0x14,0x0b,0x0c,0x10,0x08,0x09,0x0c,0x07, 0x07,0x0a,0x06,0x06,0x07,0x04,0x04,0x06,0x03,0x03,0x04,0x02,0x03,0x04,0x02,0x02, 0x03,0x02,0x03,0x04,0x02,0x03,0x04,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x13,0x12,0x18, 0x6c,0x61,0x7e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xce, 0xce,0xce,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xea,0xea,0xea,0x0f,0x0f,0x0f,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97,0x97,0x97, 0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xfd,0xfd,0x73,0x73,0x73,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xbb,0xbb,0xbb,0xff,0xff,0xff,0xff,0xff,0xff,0xbb,0xbb,0xbb,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x99,0x99,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0x77,0x77,0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5c,0x64,0x79,0x57,0x50,0x79,0x5c,0x44,0x5e, 0x64,0x53,0x73,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60, 0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53, 0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77, 0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x37, 0x28,0x3c,0x2c,0x1f,0x30,0x26,0x22,0x3b,0x2d,0x2f,0x38,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x0c,0x0e,0x13,0x55,0x60,0x89,0x5b,0x66,0x8d,0x5b, 0x67,0x8f,0x64,0x71,0x95,0x6f,0x7b,0x9e,0x81,0x8f,0xb3,0x7b,0x87,0xa7,0x5a,0x65, 0x8d,0x52,0x50,0x7a,0x52,0x50,0x7a,0x51,0x4f,0x7a,0x4b,0x4c,0x72,0x33,0x33,0x4e, 0x24,0x22,0x2b,0xcf,0xcf,0xd0,0x99,0x98,0x99,0x19,0x13,0x17,0x2c,0x22,0x29,0x4a, 0x39,0x46,0x0e,0x0c,0x0e,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x4f,0x3d,0x4b,0x41,0x31,0x3d,0x45,0x35,0x41,0x4a,0x3a,0x46,0x49,0x39,0x45, 0x3e,0x2f,0x39,0xd2,0xd5,0xdf,0xb2,0xb9,0xcc,0x80,0x8a,0xa9,0x54,0x60,0x87,0x51, 0x54,0x7f,0x52,0x52,0x7c,0x52,0x50,0x7b,0x52,0x50,0x7b,0x52,0x50,0x7b,0x42,0x41, 0x64,0x3f,0x3d,0x60,0x63,0x5e,0x8f,0x06,0x05,0x06,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x1d,0x1f,0x28,0x5a,0x66,0x8f,0x51,0x51,0x7c,0x4c,0x46, 0x67,0x5f,0x52,0x76,0x5f,0x52,0x76,0x5f,0x52,0x76,0x5f,0x52,0x76,0x5f,0x52,0x76, 0x5f,0x53,0x77,0x5f,0x53,0x77,0x5d,0x51,0x74,0x55,0x4a,0x69,0x55,0x53,0x7f,0x4c, 0x44,0x56,0x56,0x43,0x55,0x03,0x03,0x05,0x03,0x03,0x04,0x04,0x04,0x06,0x04,0x04, 0x06,0x04,0x05,0x06,0x04,0x05,0x06,0x05,0x05,0x06,0x06,0x06,0x07,0x06,0x06,0x07, 0x06,0x06,0x08,0x06,0x06,0x09,0x06,0x07,0x09,0x06,0x07,0x09,0x06,0x07,0x0a,0x06, 0x07,0x0a,0x06,0x07,0x0a,0x07,0x07,0x0a,0x07,0x07,0x0a,0x07,0x07,0x0a,0x07,0x08, 0x0a,0x07,0x08,0x0a,0x07,0x07,0x0a,0x07,0x07,0x0a,0x07,0x07,0x0a,0x07,0x07,0x0a, 0x07,0x07,0x0a,0x07,0x07,0x0a,0x06,0x07,0x0a,0x07,0x08,0x0a,0x2d,0x28,0x36,0x62, 0x4b,0x67,0x5a,0x46,0x61,0x5a,0x46,0x60,0x5b,0x46,0x62,0x5c,0x47,0x62,0x5a,0x47, 0x61,0x31,0x25,0x36,0x2f,0x23,0x34,0x2e,0x21,0x31,0x2a,0x1f,0x2e,0x2c,0x21,0x2f, 0x59,0x4b,0x61,0x72,0x61,0x7a,0xa4,0x9a,0xaa,0xbb,0xbd,0xc4,0x91,0x94,0xa1,0xac, 0xb4,0xc5,0xa9,0xb0,0xc2,0xa6,0xae,0xc2,0xa2,0xaa,0xbf,0x9e,0xa6,0xbc,0x9a,0xa2, 0xba,0x93,0x9b,0xb4,0x8e,0x97,0xb1,0x88,0x91,0xaa,0x84,0x8c,0xa7,0x66,0x6d,0x84, 0x67,0x6f,0x87,0x7d,0x84,0xa1,0x14,0x15,0x18,0x0d,0x0e,0x12,0x0f,0x10,0x14,0x11, 0x12,0x16,0x13,0x15,0x1b,0x1a,0x1b,0x24,0x20,0x1f,0x29,0x29,0x25,0x31,0x30,0x2c, 0x3a,0x38,0x35,0x46,0x3f,0x3b,0x4e,0x44,0x40,0x54,0x44,0x41,0x56,0x44,0x40,0x55, 0x41,0x3d,0x50,0x40,0x3b,0x4f,0x3f,0x3a,0x4e,0x40,0x3b,0x4f,0x3f,0x3a,0x4d,0x3e, 0x39,0x4b,0x3c,0x37,0x48,0x44,0x3d,0x4f,0x4e,0x43,0x55,0x54,0x48,0x5a,0x54,0x45, 0x57,0x48,0x40,0x54,0x43,0x49,0x59,0x54,0x58,0x65,0x69,0x6d,0x79,0x7b,0x7f,0x8a, 0x76,0x79,0x85,0x66,0x6a,0x7b,0x5e,0x61,0x76,0x57,0x59,0x70,0x55,0x54,0x6e,0x56, 0x4f,0x68,0x57,0x4d,0x66,0x57,0x4e,0x66,0x5a,0x52,0x6b,0x57,0x4f,0x68,0x54,0x4d, 0x65,0x53,0x4d,0x64,0x51,0x4f,0x67,0x52,0x51,0x6b,0x54,0x55,0x6e,0x56,0x56,0x6f, 0x52,0x55,0x6d,0x50,0x53,0x6c,0x50,0x55,0x6e,0x59,0x5e,0x76,0x62,0x6a,0x7f,0x71, 0x76,0x89,0x7e,0x82,0x90,0x7c,0x81,0x8f,0x78,0x7d,0x8c,0x6c,0x72,0x84,0x6f,0x74, 0x88,0x7b,0x81,0x9a,0x70,0x73,0x8f,0x69,0x68,0x86,0x65,0x61,0x7e,0x65,0x61,0x7d, 0x64,0x5f,0x7b,0x65,0x60,0x7c,0x66,0x61,0x7e,0x66,0x61,0x7e,0x66,0x61,0x7e,0x65, 0x5f,0x7d,0x65,0x5f,0x7d,0x64,0x5f,0x7c,0x64,0x5e,0x7c,0x64,0x5e,0x7c,0x63,0x60, 0x7c,0x6b,0x66,0x84,0x5e,0x5c,0x74,0x60,0x5e,0x75,0x62,0x63,0x79,0x65,0x65,0x7c, 0x68,0x6a,0x7f,0x6b,0x6d,0x82,0x6d,0x6f,0x84,0x71,0x72,0x87,0x74,0x7a,0x8d,0x75, 0x7c,0x8f,0x74,0x7a,0x8e,0x72,0x79,0x8e,0x6f,0x76,0x8d,0x6d,0x74,0x8a,0x6d,0x74, 0x8a,0x72,0x78,0x8e,0x79,0x80,0x92,0x7f,0x86,0x96,0x8a,0x90,0x9e,0x96,0x9a,0xa6, 0x9c,0xa0,0xab,0x9b,0x9f,0xaa,0x97,0x9b,0xa7,0x90,0x95,0xa2,0x81,0x87,0x97,0x6a, 0x72,0x87,0x5a,0x60,0x76,0x51,0x56,0x6b,0x47,0x4c,0x62,0x3e,0x43,0x5a,0x3e,0x3f, 0x56,0x3e,0x3d,0x53,0x3d,0x3b,0x52,0x3a,0x3a,0x4f,0x37,0x36,0x4b,0x37,0x36,0x4a, 0x37,0x36,0x49,0x38,0x37,0x4b,0x39,0x38,0x4b,0x3a,0x3a,0x4b,0x39,0x3a,0x4b,0x37, 0x38,0x49,0x36,0x36,0x46,0x32,0x32,0x42,0x32,0x31,0x41,0x34,0x35,0x44,0x36,0x36, 0x46,0x36,0x39,0x49,0x37,0x3a,0x4a,0x38,0x3c,0x4b,0x3a,0x3d,0x4e,0x3a,0x3d,0x4e, 0x3d,0x41,0x51,0x41,0x44,0x54,0x40,0x44,0x53,0x3a,0x3e,0x4c,0x36,0x3a,0x46,0x3d, 0x40,0x4b,0x49,0x4c,0x57,0x42,0x46,0x51,0x33,0x36,0x41,0x38,0x3a,0x42,0x47,0x4a, 0x4e,0x34,0x36,0x3b,0x1e,0x21,0x26,0x14,0x16,0x1c,0x11,0x12,0x17,0x0d,0x0e,0x12, 0x0a,0x0b,0x0e,0x09,0x0a,0x0c,0x07,0x08,0x0a,0x06,0x06,0x08,0x04,0x05,0x06,0x04, 0x04,0x06,0x04,0x05,0x06,0x04,0x05,0x06,0x04,0x05,0x06,0x03,0x04,0x05,0x02,0x02, 0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x5c,0x50,0x68,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xa3,0xa3,0xa3,0xfa,0xfa,0xfa,0xff,0xff,0xff,0xf7,0xf7,0xf7,0x4c,0x4c,0x4c,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xdb,0xdb,0xdb,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0xf8,0xf8,0x0f,0x0f,0x0f, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xbb,0xbb,0xbb,0xff,0xff,0xff,0xff,0xff,0xff, 0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x99,0x99,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0x77,0x77,0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x1a,0x1d,0x62,0x6c, 0x91,0x63,0x4b,0x67,0x5b,0x44,0x5f,0x56,0x49,0x68,0x4c,0x41,0x5e,0x48,0x3e,0x5a, 0x48,0x3e,0x59,0x4a,0x40,0x5c,0x51,0x46,0x64,0x59,0x4d,0x6e,0x5e,0x52,0x75,0x60, 0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53, 0x77,0x5d,0x51,0x74,0x55,0x4a,0x6a,0x4d,0x42,0x5f,0x49,0x3f,0x5a,0x48,0x3e,0x59, 0x4b,0x40,0x5c,0x56,0x48,0x66,0x3d,0x2c,0x41,0x2f,0x23,0x35,0x2c,0x2f,0x47,0x1d, 0x1e,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x32,0x39,0x50, 0x50,0x5c,0x84,0x50,0x5a,0x7d,0x49,0x54,0x72,0x4f,0x58,0x73,0x57,0x5f,0x7a,0x61, 0x6a,0x85,0x71,0x7b,0x99,0x5f,0x6a,0x92,0x52,0x50,0x7b,0x4e,0x4c,0x75,0x3d,0x3d, 0x5b,0x1f,0x1d,0x2d,0xb1,0xb0,0xb1,0xce,0xcf,0xcf,0x2f,0x2d,0x30,0x27,0x1d,0x24, 0x33,0x27,0x2f,0x4c,0x3b,0x48,0x28,0x20,0x28,0x02,0x02,0x02,0x02,0x02,0x02,0x00, 0x00,0x00,0x00,0x00,0x00,0x58,0x46,0x57,0x49,0x3a,0x46,0x4e,0x3e,0x4b,0x54,0x41, 0x51,0x55,0x44,0x54,0x4e,0x3e,0x4b,0xcd,0xcf,0xd8,0xbb,0xc0,0xd1,0x93,0x9c,0xb7, 0x5e,0x6b,0x90,0x50,0x59,0x81,0x52,0x53,0x7d,0x52,0x52,0x7c,0x52,0x50,0x7b,0x52, 0x50,0x7c,0x44,0x43,0x66,0x3e,0x3b,0x5d,0x55,0x52,0x7f,0x1c,0x17,0x20,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x12,0x17,0x5e,0x6a,0x91,0x51, 0x54,0x80,0x4d,0x47,0x69,0x5e,0x51,0x75,0x5f,0x52,0x76,0x5f,0x52,0x76,0x5f,0x52, 0x76,0x5f,0x52,0x76,0x5f,0x53,0x77,0x5f,0x52,0x76,0x5e,0x53,0x76,0x59,0x4e,0x6e, 0x54,0x52,0x7e,0x54,0x4c,0x5e,0x53,0x41,0x51,0x04,0x05,0x07,0x03,0x03,0x04,0x03, 0x04,0x05,0x03,0x04,0x05,0x04,0x04,0x06,0x04,0x04,0x06,0x04,0x05,0x06,0x05,0x06, 0x07,0x05,0x06,0x07,0x06,0x06,0x07,0x06,0x06,0x07,0x06,0x06,0x07,0x06,0x06,0x08, 0x06,0x06,0x08,0x06,0x06,0x08,0x06,0x06,0x09,0x06,0x07,0x09,0x06,0x07,0x0a,0x06, 0x07,0x0a,0x06,0x07,0x0a,0x06,0x07,0x0a,0x07,0x07,0x0a,0x06,0x07,0x0a,0x06,0x07, 0x0a,0x06,0x07,0x09,0x06,0x07,0x09,0x06,0x07,0x09,0x06,0x06,0x09,0x06,0x06,0x09, 0x06,0x07,0x09,0x59,0x45,0x5f,0x5c,0x47,0x62,0x5a,0x45,0x5e,0x5b,0x46,0x61,0x5c, 0x46,0x63,0x5d,0x47,0x63,0x41,0x32,0x47,0x2f,0x23,0x34,0x2f,0x23,0x34,0x2e,0x22, 0x33,0x2b,0x1f,0x2e,0x30,0x25,0x35,0x72,0x60,0x79,0x73,0x61,0x7a,0xaa,0xa7,0xb9, 0x9a,0x9f,0xa6,0x9b,0xa1,0xaf,0xac,0xb3,0xc6,0xa7,0xae,0xc2,0xa4,0xab,0xc0,0xa3, 0xaa,0xc0,0x9c,0xa4,0xba,0x98,0xa1,0xb8,0x94,0x9c,0xb4,0x8e,0x96,0xb0,0x87,0x8f, 0xa8,0x67,0x6e,0x83,0x76,0x7f,0x97,0x74,0x7c,0x90,0x0b,0x0c,0x0e,0x0d,0x0e,0x12, 0x0f,0x10,0x14,0x10,0x12,0x16,0x11,0x12,0x16,0x12,0x14,0x1a,0x14,0x16,0x1c,0x16, 0x18,0x20,0x1a,0x1b,0x24,0x21,0x23,0x2e,0x2c,0x2d,0x3a,0x36,0x35,0x47,0x3e,0x3b, 0x4f,0x42,0x3f,0x53,0x40,0x3d,0x50,0x3e,0x3a,0x4c,0x3e,0x3a,0x4c,0x3e,0x3a,0x4d, 0x3e,0x3a,0x4e,0x3b,0x37,0x49,0x38,0x37,0x46,0x38,0x37,0x46,0x3e,0x38,0x4a,0x4d, 0x41,0x52,0x51,0x45,0x58,0x44,0x40,0x55,0x40,0x46,0x56,0x55,0x5a,0x67,0x69,0x6d, 0x7a,0x71,0x75,0x82,0x72,0x77,0x83,0x73,0x78,0x86,0x72,0x77,0x88,0x62,0x67,0x7c, 0x5f,0x60,0x76,0x5c,0x5d,0x74,0x56,0x52,0x69,0x55,0x4e,0x66,0x57,0x4e,0x67,0x5b, 0x53,0x6d,0x58,0x50,0x6a,0x55,0x4e,0x66,0x52,0x4e,0x66,0x51,0x4e,0x66,0x52,0x4e, 0x68,0x53,0x51,0x69,0x56,0x55,0x6d,0x56,0x55,0x6e,0x55,0x56,0x6f,0x55,0x57,0x71, 0x56,0x5c,0x76,0x57,0x5d,0x75,0x5b,0x62,0x78,0x6c,0x71,0x84,0x6e,0x74,0x86,0x5f, 0x66,0x7b,0x61,0x65,0x7f,0x67,0x6d,0x8c,0x60,0x61,0x81,0x63,0x60,0x7f,0x63,0x5c, 0x7b,0x63,0x5a,0x77,0x5f,0x56,0x72,0x60,0x57,0x72,0x64,0x5a,0x79,0x64,0x5c,0x79, 0x64,0x5a,0x79,0x62,0x59,0x76,0x64,0x5a,0x77,0x62,0x59,0x74,0x5f,0x55,0x6e,0x5f, 0x54,0x6f,0x5d,0x53,0x70,0x63,0x59,0x77,0x57,0x51,0x6b,0x59,0x57,0x6f,0x5a,0x58, 0x72,0x59,0x5a,0x72,0x59,0x5b,0x74,0x5c,0x5e,0x77,0x61,0x64,0x7b,0x67,0x6a,0x80, 0x6e,0x73,0x89,0x6f,0x77,0x8c,0x6d,0x75,0x8a,0x6a,0x72,0x89,0x66,0x6e,0x86,0x62, 0x6a,0x82,0x67,0x6f,0x86,0x6f,0x76,0x8b,0x77,0x7e,0x92,0x82,0x87,0x98,0x8a,0x8f, 0x9e,0x8e,0x93,0xa1,0x91,0x96,0xa3,0x8d,0x92,0xa0,0x88,0x8e,0x9c,0x7d,0x82,0x94, 0x6e,0x76,0x8b,0x5d,0x65,0x7b,0x52,0x5a,0x6e,0x4e,0x53,0x66,0x45,0x46,0x5c,0x40, 0x40,0x58,0x41,0x40,0x57,0x3e,0x3d,0x54,0x3d,0x3a,0x51,0x3c,0x3a,0x50,0x3a,0x39, 0x4e,0x39,0x37,0x4b,0x38,0x36,0x48,0x36,0x35,0x46,0x36,0x33,0x45,0x34,0x34,0x43, 0x34,0x34,0x44,0x32,0x32,0x41,0x2f,0x2e,0x3e,0x2d,0x2c,0x3a,0x2d,0x2b,0x3a,0x2d, 0x2b,0x3a,0x2e,0x2d,0x3c,0x2e,0x2e,0x3d,0x2e,0x2f,0x3e,0x33,0x33,0x43,0x37,0x3a, 0x4a,0x3a,0x3d,0x4c,0x3b,0x3f,0x50,0x3e,0x41,0x51,0x3c,0x40,0x50,0x39,0x3e,0x4e, 0x38,0x3c,0x4b,0x40,0x45,0x53,0x49,0x4d,0x5a,0x43,0x48,0x55,0x41,0x44,0x51,0x4a, 0x4e,0x57,0x57,0x5a,0x62,0x4c,0x4e,0x54,0x2f,0x32,0x37,0x1f,0x21,0x27,0x19,0x1a, 0x20,0x13,0x15,0x1a,0x0e,0x0f,0x14,0x0c,0x0e,0x12,0x0a,0x0b,0x0e,0x08,0x09,0x0b, 0x06,0x06,0x09,0x06,0x06,0x08,0x06,0x06,0x09,0x06,0x07,0x0a,0x06,0x07,0x0a,0x05, 0x06,0x07,0x03,0x04,0x05,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x1b,0x23,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x56,0x56,0x56,0xfa,0xfa,0xfa,0xff,0xff,0xff,0xfa,0xfa,0xfa,0x92,0x92,0x92, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0xf6,0xf6,0xf6,0xfd,0xfd,0xfd,0xff,0xff,0xff,0xe1,0xe1, 0xe1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xbb,0xbb,0xbb,0xff,0xff, 0xff,0xff,0xff,0xff,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x99, 0x99,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x77,0x77,0x77,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x52,0x56,0x64,0x4d,0x52,0x7b,0x47,0x35,0x49,0x35,0x2a,0x3a,0x1f,0x1b, 0x27,0x19,0x15,0x1f,0x18,0x15,0x1e,0x1c,0x18,0x23,0x29,0x23,0x33,0x3e,0x36,0x4d, 0x55,0x49,0x69,0x5f,0x52,0x76,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60, 0x53,0x77,0x60,0x53,0x77,0x54,0x48,0x68,0x38,0x30,0x46,0x22,0x1d,0x2a,0x1a,0x16, 0x20,0x18,0x15,0x1e,0x1d,0x19,0x24,0x33,0x2c,0x3f,0x54,0x46,0x61,0x5b,0x43,0x5e, 0x34,0x2f,0x4c,0x38,0x3b,0x51,0x0e,0x0e,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x46,0x4e,0x6d,0x30,0x36,0x4d,0x1b,0x1e,0x2b,0x17,0x1a,0x24, 0x18,0x1b,0x25,0x21,0x25,0x2f,0x3d,0x43,0x55,0x6a,0x74,0x93,0x67,0x72,0x98,0x44, 0x45,0x67,0x27,0x26,0x3a,0x8b,0x8b,0x8e,0xeb,0xeb,0xeb,0x68,0x69,0x6d,0x50,0x4c, 0x51,0x31,0x24,0x2c,0x39,0x2a,0x33,0x48,0x38,0x44,0x34,0x2a,0x34,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5f,0x4c,0x5f,0x52,0x40,0x4f,0x56, 0x45,0x55,0x5f,0x4d,0x5f,0x64,0x51,0x65,0x5f,0x4c,0x5f,0xc0,0xbf,0xc8,0xc1,0xc4, 0xd1,0xa4,0xac,0xc2,0x72,0x7d,0x9e,0x4f,0x5b,0x82,0x52,0x53,0x7e,0x52,0x50,0x7c, 0x52,0x50,0x7c,0x52,0x50,0x7c,0x47,0x46,0x6b,0x3c,0x3a,0x5b,0x55,0x52,0x7f,0x2a, 0x23,0x31,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03, 0x63,0x70,0x93,0x51,0x5a,0x83,0x4c,0x47,0x6c,0x5c,0x50,0x72,0x5f,0x52,0x76,0x5f, 0x52,0x76,0x5f,0x52,0x76,0x5f,0x52,0x76,0x5f,0x52,0x76,0x5f,0x52,0x76,0x5f,0x52, 0x76,0x5a,0x4e,0x6f,0x53,0x53,0x7c,0x53,0x4c,0x5e,0x4f,0x3e,0x4d,0x0a,0x0a,0x0d, 0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x04,0x05,0x04,0x04,0x06,0x04,0x04,0x06,0x04, 0x04,0x06,0x04,0x05,0x06,0x05,0x05,0x06,0x05,0x06,0x07,0x05,0x06,0x07,0x05,0x06, 0x07,0x05,0x06,0x07,0x06,0x06,0x07,0x06,0x06,0x07,0x06,0x06,0x07,0x06,0x06,0x08, 0x06,0x06,0x08,0x06,0x06,0x09,0x06,0x06,0x09,0x06,0x06,0x09,0x06,0x06,0x09,0x06, 0x06,0x09,0x06,0x06,0x09,0x06,0x06,0x09,0x06,0x06,0x08,0x06,0x06,0x08,0x06,0x06, 0x09,0x06,0x06,0x08,0x06,0x06,0x08,0x19,0x17,0x1f,0x60,0x49,0x64,0x5a,0x45,0x5e, 0x5b,0x45,0x61,0x5c,0x46,0x62,0x5c,0x46,0x62,0x59,0x44,0x5f,0x30,0x22,0x35,0x2f, 0x23,0x34,0x2e,0x22,0x34,0x2d,0x22,0x32,0x2a,0x1f,0x2d,0x3f,0x33,0x46,0x73,0x60, 0x79,0x74,0x62,0x7b,0xbe,0xc0,0xcb,0x8d,0x90,0x9b,0x9f,0xa5,0xb4,0xa8,0xaf,0xc2, 0xa4,0xab,0xc0,0xa4,0xaa,0xbf,0xa0,0xa9,0xbe,0x9c,0xa2,0xb9,0x99,0xa0,0xb8,0x91, 0x9a,0xb3,0x80,0x86,0x9e,0x74,0x7a,0x8f,0x82,0x8a,0xa5,0x5f,0x63,0x70,0x0b,0x0c, 0x0f,0x0d,0x0e,0x11,0x0e,0x10,0x13,0x0f,0x11,0x14,0x11,0x12,0x16,0x12,0x14,0x18, 0x13,0x15,0x1a,0x15,0x16,0x1c,0x16,0x17,0x1d,0x17,0x1a,0x21,0x1a,0x1c,0x25,0x22, 0x25,0x30,0x29,0x2c,0x3b,0x31,0x31,0x42,0x33,0x32,0x42,0x36,0x34,0x45,0x39,0x36, 0x48,0x3b,0x37,0x49,0x3b,0x38,0x4a,0x3b,0x3a,0x4b,0x3d,0x3c,0x4b,0x3c,0x3a,0x4b, 0x3c,0x37,0x49,0x48,0x3d,0x4f,0x4d,0x42,0x54,0x47,0x40,0x55,0x3d,0x3e,0x52,0x45, 0x4a,0x5d,0x52,0x59,0x6c,0x5a,0x62,0x75,0x67,0x6d,0x7d,0x6e,0x74,0x83,0x6e,0x74, 0x86,0x70,0x76,0x89,0x7b,0x80,0x8f,0x72,0x74,0x85,0x5c,0x5c,0x72,0x52,0x4e,0x66, 0x54,0x4d,0x65,0x57,0x4f,0x69,0x5a,0x53,0x6d,0x59,0x53,0x6c,0x55,0x4e,0x67,0x52, 0x4e,0x66,0x55,0x4f,0x68,0x59,0x53,0x6c,0x66,0x62,0x79,0x66,0x64,0x7b,0x68,0x66, 0x7d,0x67,0x67,0x7e,0x64,0x64,0x7d,0x5d,0x5e,0x78,0x55,0x56,0x71,0x51,0x56,0x6f, 0x52,0x56,0x70,0x4e,0x54,0x6e,0x57,0x59,0x75,0x63,0x63,0x84,0x60,0x5c,0x7c,0x62, 0x5d,0x7d,0x63,0x5b,0x7b,0x60,0x57,0x74,0x5c,0x52,0x6c,0x5e,0x54,0x70,0x64,0x5a, 0x76,0x64,0x5a,0x78,0x61,0x57,0x74,0x60,0x56,0x72,0x63,0x59,0x76,0x62,0x58,0x74, 0x5f,0x53,0x6e,0x5e,0x54,0x6e,0x5d,0x53,0x6f,0x5f,0x56,0x72,0x53,0x4e,0x64,0x5a, 0x57,0x70,0x5c,0x5a,0x73,0x5a,0x5a,0x73,0x56,0x59,0x72,0x58,0x5a,0x74,0x5b,0x5d, 0x76,0x5f,0x63,0x7c,0x60,0x67,0x80,0x5e,0x66,0x7f,0x5b,0x64,0x7e,0x58,0x61,0x7b, 0x59,0x62,0x7c,0x5b,0x63,0x7e,0x60,0x68,0x81,0x6a,0x70,0x88,0x6f,0x76,0x8a,0x7a, 0x80,0x92,0x82,0x89,0x9a,0x85,0x8a,0x9b,0x82,0x88,0x98,0x7f,0x86,0x96,0x76,0x7d, 0x90,0x70,0x78,0x8b,0x62,0x6a,0x80,0x4f,0x56,0x6c,0x52,0x55,0x68,0x50,0x50,0x65, 0x47,0x46,0x5e,0x42,0x42,0x59,0x3f,0x3e,0x55,0x3d,0x3c,0x51,0x3a,0x38,0x4d,0x36, 0x35,0x48,0x34,0x32,0x46,0x35,0x33,0x44,0x33,0x31,0x42,0x32,0x30,0x40,0x32,0x2f, 0x40,0x31,0x2f,0x3e,0x32,0x31,0x40,0x31,0x2e,0x3e,0x2e,0x2c,0x3b,0x2b,0x2a,0x37, 0x2c,0x2b,0x39,0x2c,0x2b,0x3a,0x2c,0x2a,0x3a,0x2d,0x2b,0x3a,0x2c,0x2a,0x3a,0x2d, 0x2b,0x3b,0x2f,0x30,0x3f,0x32,0x35,0x44,0x36,0x37,0x48,0x37,0x3a,0x4a,0x37,0x3a, 0x4a,0x38,0x3a,0x4a,0x39,0x3c,0x4d,0x3e,0x42,0x52,0x42,0x46,0x56,0x42,0x45,0x54, 0x46,0x4b,0x5a,0x55,0x58,0x65,0x5a,0x5e,0x68,0x52,0x56,0x5e,0x40,0x42,0x4a,0x31, 0x33,0x39,0x25,0x27,0x2e,0x1d,0x1f,0x26,0x12,0x15,0x1a,0x12,0x14,0x1a,0x0f,0x10, 0x15,0x0b,0x0d,0x10,0x0b,0x0c,0x0f,0x08,0x09,0x0b,0x07,0x07,0x0a,0x08,0x09,0x0b, 0x09,0x0a,0x0d,0x0a,0x0a,0x0d,0x06,0x06,0x08,0x07,0x07,0x08,0x0f,0x0f,0x10,0x20, 0x21,0x22,0x2b,0x2c,0x2d,0x32,0x33,0x34,0x2a,0x2a,0x2c,0x13,0x13,0x14,0x04,0x04, 0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x2b,0x2b,0x2b,0xec,0xec,0xec,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xc9,0xc9, 0xc9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x63,0x63,0xfc,0xfc,0xfc,0xff,0xff,0xff,0xff, 0xff,0xff,0xac,0xac,0xac,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x99,0x99,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0x99,0x99,0x99,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xbb, 0xbb,0xbb,0xff,0xff,0xff,0xff,0xff,0xff,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x99,0x99,0x99,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x77,0x77, 0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x09,0x4b,0x51,0x65,0x29,0x23,0x33,0x50, 0x4d,0x50,0xee,0xee,0xee,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xb0,0xaf, 0xb1,0x55,0x51,0x5e,0x4c,0x42,0x5e,0x5e,0x51,0x74,0x60,0x53,0x77,0x60,0x53,0x77, 0x60,0x53,0x77,0x60,0x53,0x77,0x5f,0x52,0x76,0x4d,0x42,0x5f,0x34,0x2f,0x3c,0xde, 0xde,0xde,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x36,0x33,0x3a,0x3e,0x36, 0x4f,0x5e,0x48,0x64,0x62,0x4a,0x66,0x40,0x3e,0x62,0x43,0x47,0x5a,0x02,0x02,0x02, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x29,0x2c,0x35,0xee,0xee, 0xee,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x43,0x4d,0x51,0x59,0x75, 0x66,0x72,0x97,0x3e,0x46,0x5d,0x48,0x49,0x50,0xe7,0xe7,0xe7,0xd2,0xd2,0xd2,0x29, 0x2c,0x38,0x68,0x63,0x69,0x39,0x2a,0x33,0x3a,0x2c,0x35,0x44,0x35,0x40,0x37,0x2b, 0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x68,0x54,0x69, 0x5b,0x49,0x5b,0x62,0x4f,0x62,0x68,0x55,0x69,0x70,0x5c,0x73,0x6c,0x57,0x6d,0xa9, 0xa3,0xaf,0xc6,0xc8,0xd4,0xaf,0xb6,0xc9,0x83,0x8f,0xac,0x55,0x61,0x87,0x51,0x57, 0x81,0x52,0x53,0x7e,0x52,0x52,0x7d,0x52,0x52,0x7d,0x4a,0x48,0x70,0x3b,0x39,0x57, 0x51,0x4e,0x78,0x36,0x2d,0x3e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x5f,0x69,0x8a,0x53,0x5e,0x87,0x4c,0x49,0x6e,0x59,0x4f,0x73, 0x5f,0x52,0x76,0x5f,0x52,0x76,0x5f,0x52,0x76,0x5f,0x52,0x76,0x5f,0x52,0x76,0x5f, 0x52,0x76,0x5f,0x52,0x76,0x5a,0x4f,0x71,0x51,0x52,0x7c,0x55,0x50,0x63,0x4c,0x3b, 0x4a,0x15,0x12,0x18,0x02,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x04,0x05, 0x04,0x04,0x06,0x04,0x04,0x06,0x04,0x04,0x06,0x04,0x05,0x06,0x05,0x05,0x06,0x05, 0x05,0x06,0x05,0x05,0x06,0x05,0x05,0x06,0x05,0x06,0x07,0x06,0x06,0x07,0x06,0x06, 0x07,0x06,0x06,0x08,0x06,0x06,0x07,0x06,0x06,0x07,0x06,0x06,0x07,0x06,0x06,0x08, 0x06,0x06,0x08,0x06,0x06,0x08,0x06,0x06,0x07,0x06,0x06,0x08,0x06,0x06,0x08,0x06, 0x06,0x07,0x06,0x06,0x07,0x06,0x06,0x07,0x05,0x06,0x07,0x06,0x06,0x08,0x44,0x36, 0x4a,0x5e,0x47,0x62,0x5a,0x44,0x5e,0x5b,0x45,0x60,0x5b,0x45,0x60,0x5b,0x45,0x60, 0x3c,0x2d,0x42,0x2e,0x22,0x33,0x2f,0x23,0x34,0x2e,0x23,0x34,0x2b,0x20,0x30,0x29, 0x1e,0x2c,0x60,0x52,0x6c,0x73,0x61,0x7a,0x74,0x66,0x81,0xc5,0xc6,0xcc,0x85,0x87, 0x92,0xa3,0xaa,0xb9,0xa7,0xaf,0xc2,0xa3,0xac,0xc1,0xa1,0xa9,0xbe,0x9e,0xa6,0xbc, 0x9c,0xa3,0xb9,0x95,0x9d,0xb6,0x75,0x7c,0x90,0x7c,0x82,0x9a,0x91,0x99,0xb1,0x41, 0x42,0x49,0x0b,0x0c,0x0f,0x0c,0x0e,0x10,0x0e,0x0e,0x12,0x0f,0x10,0x13,0x10,0x11, 0x15,0x12,0x12,0x16,0x13,0x15,0x19,0x14,0x16,0x1a,0x15,0x16,0x1b,0x16,0x17,0x1d, 0x17,0x19,0x1e,0x18,0x1a,0x22,0x1a,0x1d,0x25,0x1d,0x20,0x29,0x1f,0x22,0x2c,0x24, 0x26,0x30,0x2a,0x2c,0x39,0x30,0x32,0x40,0x37,0x36,0x45,0x3e,0x3d,0x4b,0x3e,0x3d, 0x4d,0x3c,0x3b,0x4d,0x44,0x3d,0x50,0x4e,0x44,0x55,0x53,0x46,0x59,0x55,0x49,0x5e, 0x50,0x47,0x5c,0x53,0x4a,0x5e,0x57,0x4c,0x61,0x54,0x4b,0x61,0x4a,0x48,0x62,0x4f, 0x56,0x6e,0x65,0x6b,0x7e,0x6e,0x73,0x85,0x7b,0x81,0x8f,0x7c,0x80,0x8f,0x6b,0x6f, 0x81,0x56,0x55,0x6b,0x50,0x4e,0x65,0x53,0x4f,0x66,0x59,0x53,0x6c,0x5a,0x53,0x6d, 0x5b,0x53,0x6d,0x58,0x51,0x6a,0x56,0x4f,0x67,0x57,0x50,0x69,0x5c,0x55,0x6e,0x5e, 0x59,0x72,0x65,0x61,0x79,0x6b,0x69,0x80,0x6d,0x6b,0x83,0x6f,0x6d,0x85,0x6e,0x6c, 0x83,0x65,0x64,0x7b,0x55,0x52,0x6c,0x51,0x4e,0x69,0x5c,0x58,0x75,0x64,0x63,0x83, 0x61,0x5c,0x7c,0x64,0x5c,0x7d,0x64,0x5c,0x7d,0x64,0x5c,0x7c,0x62,0x5a,0x78,0x63, 0x5a,0x78,0x65,0x5c,0x7a,0x66,0x5c,0x7b,0x64,0x5a,0x78,0x64,0x5a,0x77,0x65,0x5c, 0x79,0x66,0x5c,0x79,0x66,0x5c,0x7b,0x65,0x5d,0x7c,0x65,0x5f,0x7d,0x68,0x63,0x80, 0x5c,0x58,0x70,0x5f,0x5c,0x75,0x5f,0x5d,0x77,0x5f,0x5e,0x78,0x5c,0x5d,0x78,0x5b, 0x5d,0x76,0x5d,0x61,0x79,0x5f,0x65,0x7d,0x5f,0x67,0x81,0x5a,0x62,0x7d,0x55,0x5d, 0x79,0x53,0x5c,0x77,0x57,0x60,0x7b,0x5e,0x65,0x7f,0x61,0x68,0x81,0x62,0x6a,0x82, 0x65,0x6d,0x83,0x6e,0x74,0x89,0x76,0x7c,0x8f,0x79,0x7f,0x92,0x78,0x7e,0x92,0x7a, 0x81,0x93,0x76,0x7b,0x8f,0x6a,0x72,0x86,0x55,0x5e,0x76,0x53,0x57,0x6f,0x58,0x58, 0x6c,0x53,0x52,0x67,0x48,0x46,0x5e,0x3d,0x3b,0x51,0x38,0x36,0x4a,0x36,0x35,0x48, 0x35,0x33,0x46,0x34,0x32,0x42,0x32,0x2f,0x3e,0x2f,0x2c,0x3b,0x2e,0x2a,0x38,0x2e, 0x2a,0x37,0x2b,0x2a,0x36,0x2c,0x29,0x36,0x2d,0x2a,0x37,0x2e,0x2b,0x38,0x29,0x27, 0x35,0x28,0x26,0x33,0x29,0x27,0x34,0x29,0x28,0x35,0x2a,0x28,0x35,0x2a,0x29,0x36, 0x2a,0x29,0x36,0x2a,0x29,0x36,0x2a,0x29,0x36,0x2b,0x2a,0x38,0x2d,0x2c,0x3b,0x2f, 0x2f,0x3d,0x31,0x31,0x3f,0x31,0x32,0x41,0x35,0x36,0x44,0x3a,0x3b,0x4a,0x3f,0x43, 0x52,0x41,0x45,0x55,0x45,0x49,0x58,0x55,0x5a,0x66,0x5a,0x5e,0x6a,0x58,0x5c,0x66, 0x57,0x5a,0x64,0x50,0x53,0x5b,0x3c,0x3e,0x43,0x26,0x28,0x2c,0x1d,0x1e,0x22,0x1c, 0x1e,0x22,0x17,0x18,0x1c,0x15,0x16,0x1a,0x13,0x15,0x18,0x0e,0x0f,0x12,0x0d,0x0e, 0x10,0x0f,0x10,0x13,0x16,0x17,0x1b,0x24,0x26,0x2a,0x2e,0x2f,0x32,0x37,0x39,0x3b, 0x3f,0x40,0x43,0x47,0x48,0x4b,0x52,0x53,0x55,0x66,0x67,0x6a,0x6a,0x6a,0x6d,0x52, 0x53,0x56,0x2b,0x2c,0x2e,0x0f,0x0f,0x10,0x06,0x06,0x06,0x02,0x02,0x02,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0xd4,0xd4,0xd4,0xff,0xff,0xff,0xff,0xff,0xff,0xe6, 0xe6,0xe6,0x05,0x05,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xc0,0xc0,0xff,0xff,0xff, 0xff,0xff,0xff,0xfc,0xfc,0xfc,0x52,0x52,0x52,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x99,0x99, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x99,0x99,0x99,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xbb,0xbb,0xbb,0xff,0xff,0xff,0xff,0xff,0xff,0xbb,0xbb,0xbb,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x99,0x99,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0x77,0x77,0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x12,0x14, 0x9d,0x9e,0xa0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x6f, 0x6e,0x71,0x25,0x20,0x2e,0x3e,0x36,0x4d,0x55,0x49,0x69,0x5f,0x52,0x76,0x60,0x53, 0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x54,0x48,0x68, 0x32,0x2c,0x3f,0x70,0x6e,0x72,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x9d, 0x9c,0x9e,0x29,0x24,0x34,0x4e,0x43,0x61,0x61,0x4b,0x67,0x64,0x53,0x73,0x4e,0x58, 0x81,0x46,0x49,0x56,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x77, 0x77,0x77,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7c,0x7c,0x7f,0x27,0x2c, 0x3f,0x4b,0x54,0x73,0x47,0x4f,0x6a,0x25,0x2a,0x3a,0xca,0xca,0xca,0xf4,0xf4,0xf4, 0x71,0x6f,0x74,0x41,0x47,0x5a,0x79,0x73,0x7b,0x3a,0x2b,0x34,0x3b,0x2c,0x36,0x45, 0x35,0x40,0x36,0x2a,0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x6f,0x5a,0x71,0x67,0x53,0x67,0x6c,0x57,0x6d,0x74,0x5f,0x77,0x78,0x66,0x80, 0x78,0x64,0x7e,0x8c,0x7f,0x91,0xcf,0xd1,0xdc,0xb7,0xbd,0xcf,0x97,0xa0,0xb9,0x65, 0x70,0x95,0x52,0x5c,0x86,0x52,0x58,0x82,0x52,0x54,0x7f,0x52,0x55,0x7f,0x4e,0x4e, 0x76,0x38,0x37,0x54,0x4c,0x49,0x70,0x41,0x38,0x4f,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x57,0x60,0x7c,0x55,0x60,0x89,0x4b,0x48, 0x70,0x58,0x4f,0x72,0x60,0x53,0x77,0x60,0x53,0x77,0x5f,0x52,0x76,0x5f,0x52,0x76, 0x5f,0x52,0x76,0x5f,0x52,0x76,0x5d,0x50,0x74,0x5a,0x4f,0x71,0x51,0x52,0x7a,0x57, 0x54,0x67,0x49,0x38,0x47,0x28,0x22,0x2c,0x02,0x02,0x03,0x02,0x03,0x04,0x02,0x03, 0x04,0x03,0x04,0x05,0x03,0x04,0x05,0x03,0x04,0x05,0x04,0x04,0x06,0x04,0x04,0x06, 0x04,0x04,0x06,0x04,0x05,0x06,0x04,0x05,0x06,0x04,0x05,0x06,0x05,0x05,0x06,0x05, 0x05,0x06,0x05,0x05,0x06,0x05,0x06,0x07,0x06,0x06,0x07,0x05,0x06,0x07,0x05,0x06, 0x07,0x05,0x06,0x07,0x06,0x06,0x07,0x06,0x06,0x07,0x06,0x06,0x07,0x05,0x06,0x07, 0x05,0x06,0x07,0x06,0x06,0x07,0x05,0x06,0x07,0x05,0x06,0x07,0x05,0x06,0x07,0x05, 0x05,0x06,0x0d,0x0b,0x0f,0x62,0x4a,0x67,0x5a,0x44,0x5f,0x5a,0x44,0x5f,0x5b,0x45, 0x60,0x5b,0x45,0x5e,0x56,0x40,0x5a,0x2d,0x22,0x32,0x2c,0x20,0x30,0x2e,0x22,0x33, 0x2d,0x20,0x32,0x29,0x1e,0x2d,0x2f,0x23,0x33,0x6f,0x5f,0x79,0x74,0x61,0x7a,0x73, 0x72,0x93,0xc2,0xc3,0xc9,0x8b,0x90,0x9c,0xa7,0xae,0xc0,0xa2,0xa9,0xbf,0xa2,0xa9, 0xbf,0xa0,0xa6,0xbc,0x9b,0xa3,0xb9,0x91,0x98,0xae,0x68,0x6d,0x7f,0x87,0x8f,0xa6, 0x9d,0xa5,0xb7,0x10,0x11,0x14,0x0a,0x0b,0x0e,0x0b,0x0c,0x0f,0x0d,0x0e,0x11,0x0f, 0x10,0x13,0x0f,0x10,0x13,0x10,0x12,0x15,0x12,0x13,0x17,0x13,0x15,0x19,0x14,0x16, 0x1a,0x17,0x19,0x1e,0x19,0x1a,0x20,0x18,0x1a,0x1f,0x2c,0x2f,0x33,0x1a,0x1c,0x22, 0x1d,0x1f,0x26,0x1f,0x21,0x29,0x22,0x24,0x2d,0x27,0x29,0x33,0x2c,0x2e,0x39,0x33, 0x34,0x42,0x37,0x38,0x49,0x3f,0x3b,0x4e,0x44,0x40,0x53,0x4f,0x46,0x5b,0x59,0x4c, 0x61,0x5b,0x4f,0x64,0x5a,0x4e,0x61,0x5a,0x4d,0x61,0x5b,0x4d,0x61,0x5b,0x4c,0x5f, 0x5a,0x4c,0x5f,0x56,0x4b,0x62,0x48,0x46,0x61,0x4b,0x52,0x6a,0x5e,0x65,0x79,0x6a, 0x70,0x81,0x68,0x6e,0x80,0x65,0x69,0x7b,0x5a,0x5a,0x6e,0x5a,0x59,0x6f,0x58,0x58, 0x6f,0x54,0x51,0x6c,0x59,0x53,0x6c,0x5a,0x53,0x6d,0x5a,0x53,0x6d,0x58,0x51,0x6a, 0x57,0x50,0x68,0x58,0x51,0x69,0x60,0x5a,0x72,0x67,0x62,0x7a,0x69,0x65,0x7c,0x6c, 0x69,0x7f,0x70,0x6d,0x84,0x71,0x6d,0x83,0x5c,0x56,0x6e,0x56,0x50,0x69,0x61,0x5a, 0x75,0x66,0x61,0x80,0x65,0x5c,0x79,0x68,0x5d,0x7a,0x68,0x5d,0x79,0x69,0x5d,0x79, 0x69,0x5d,0x79,0x68,0x5d,0x78,0x67,0x5c,0x78,0x67,0x5c,0x78,0x67,0x5c,0x78,0x67, 0x5c,0x78,0x66,0x5c,0x78,0x66,0x5c,0x79,0x67,0x5c,0x79,0x66,0x5c,0x79,0x65,0x5c, 0x77,0x66,0x5e,0x7b,0x5c,0x57,0x6f,0x5c,0x57,0x70,0x5b,0x57,0x70,0x59,0x58,0x72, 0x5a,0x5a,0x72,0x5d,0x5e,0x78,0x5f,0x61,0x7a,0x5f,0x65,0x7d,0x5d,0x63,0x7d,0x57, 0x5f,0x7a,0x52,0x5a,0x76,0x56,0x5f,0x7a,0x5e,0x66,0x7f,0x66,0x6e,0x86,0x65,0x6d, 0x85,0x65,0x6c,0x84,0x63,0x6b,0x82,0x62,0x6a,0x82,0x6a,0x72,0x87,0x73,0x7a,0x8e, 0x76,0x7d,0x90,0x78,0x7e,0x92,0x6c,0x73,0x8a,0x59,0x62,0x7c,0x52,0x59,0x74,0x58, 0x5c,0x73,0x5a,0x5a,0x70,0x52,0x4f,0x65,0x42,0x3f,0x54,0x36,0x34,0x47,0x33,0x32, 0x43,0x32,0x2f,0x3f,0x2e,0x2c,0x3a,0x2b,0x28,0x35,0x28,0x26,0x32,0x27,0x25,0x30, 0x26,0x23,0x2d,0x25,0x21,0x2a,0x26,0x22,0x2c,0x26,0x23,0x2e,0x26,0x23,0x2e,0x25, 0x22,0x2c,0x23,0x21,0x2b,0x23,0x21,0x2b,0x24,0x22,0x2e,0x26,0x25,0x30,0x26,0x25, 0x31,0x26,0x25,0x31,0x27,0x26,0x31,0x27,0x26,0x32,0x28,0x26,0x32,0x28,0x26,0x32, 0x29,0x26,0x33,0x2a,0x28,0x34,0x2a,0x29,0x36,0x2d,0x2c,0x3a,0x31,0x31,0x3e,0x32, 0x32,0x3e,0x3a,0x3a,0x48,0x3f,0x40,0x4f,0x41,0x44,0x53,0x4e,0x51,0x5e,0x58,0x5c, 0x69,0x5a,0x5e,0x6b,0x5a,0x5e,0x6a,0x5b,0x60,0x6a,0x55,0x59,0x62,0x46,0x4a,0x50, 0x43,0x45,0x4b,0x43,0x45,0x49,0x3d,0x3e,0x43,0x3d,0x3e,0x42,0x3c,0x3e,0x42,0x3c, 0x3e,0x42,0x3f,0x42,0x46,0x42,0x45,0x4a,0x43,0x46,0x4a,0x42,0x45,0x49,0x44,0x46, 0x4a,0x47,0x4a,0x50,0x48,0x4a,0x53,0x53,0x55,0x5c,0x64,0x66,0x6a,0x71,0x72,0x74, 0x76,0x76,0x79,0x69,0x6a,0x6d,0x50,0x51,0x53,0x3d,0x3e,0x42,0x38,0x3a,0x3c,0x29, 0x2a,0x2a,0x0b,0x0b,0x0b,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xbe,0xbe,0xbe,0xfc,0xfc,0xfc,0xff,0xff,0xff, 0xf5,0xf5,0xf5,0x47,0x47,0x47,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xeb,0xeb, 0xeb,0xff,0xff,0xff,0xff,0xff,0xff,0xf4,0xf4,0xf4,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x99,0x99,0x99,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x99,0x99,0x99, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xbb,0xbb,0xbb,0xff,0xff,0xff,0xff,0xff,0xff, 0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x99,0x99,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0x77,0x77,0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x33, 0x33,0xdd,0xdd,0xdd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbd,0xbd,0xbd, 0x34,0x32,0x39,0x2e,0x28,0x39,0x49,0x3f,0x5b,0x59,0x4d,0x6e,0x5e,0x52,0x75,0x60, 0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53, 0x77,0x5d,0x51,0x74,0x4a,0x40,0x5b,0x24,0x1f,0x2c,0xbd,0xbd,0xbd,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0x43,0x41,0x48,0x39,0x32,0x49,0x5b,0x4c,0x6c,0x63, 0x4b,0x67,0x64,0x53,0x75,0x5d,0x6a,0x91,0x37,0x3b,0x43,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x11,0x11,0x11,0xee,0xee,0xee,0xff,0xff,0xff,0xff,0xff,0xff,0xee,0xee,0xee,0x26, 0x26,0x31,0x36,0x3a,0x55,0x41,0x4b,0x6a,0x2a,0x2f,0x41,0x8d,0x8e,0x91,0xf0,0xf0, 0xf0,0xcf,0xcf,0xd0,0x1d,0x1c,0x2b,0x5a,0x62,0x7b,0x82,0x7c,0x85,0x3c,0x2d,0x38, 0x3a,0x2c,0x36,0x46,0x35,0x42,0x38,0x2b,0x37,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x74,0x5f,0x78,0x6e,0x59,0x6f,0x76,0x61,0x79,0x78,0x68, 0x82,0x73,0x69,0x89,0x75,0x69,0x88,0x82,0x73,0x8b,0xd9,0xdc,0xe4,0xbe,0xc3,0xd4, 0xa7,0xaf,0xc5,0x7b,0x85,0xa6,0x58,0x64,0x8b,0x52,0x5d,0x87,0x52,0x56,0x81,0x52, 0x54,0x7f,0x50,0x51,0x7a,0x39,0x39,0x56,0x4a,0x47,0x6e,0x51,0x48,0x69,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4f,0x57,0x6f,0x58, 0x64,0x8b,0x4e,0x4b,0x74,0x57,0x4d,0x71,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53, 0x77,0x5f,0x52,0x76,0x5f,0x52,0x76,0x5f,0x52,0x76,0x5c,0x4f,0x72,0x5b,0x4f,0x72, 0x51,0x52,0x7b,0x5a,0x58,0x6d,0x48,0x37,0x45,0x42,0x36,0x45,0x02,0x02,0x03,0x02, 0x02,0x03,0x02,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x04,0x05,0x04,0x04, 0x06,0x04,0x04,0x06,0x04,0x04,0x06,0x04,0x04,0x06,0x04,0x05,0x06,0x04,0x05,0x06, 0x04,0x05,0x06,0x04,0x05,0x06,0x04,0x05,0x06,0x04,0x05,0x06,0x05,0x05,0x06,0x05, 0x05,0x06,0x05,0x06,0x07,0x05,0x06,0x07,0x05,0x05,0x06,0x05,0x05,0x06,0x05,0x06, 0x07,0x05,0x06,0x07,0x05,0x05,0x06,0x05,0x05,0x06,0x05,0x05,0x06,0x05,0x05,0x06, 0x05,0x05,0x06,0x05,0x06,0x07,0x05,0x05,0x06,0x30,0x27,0x37,0x5e,0x47,0x61,0x5a, 0x44,0x5e,0x5c,0x46,0x60,0x5c,0x46,0x5f,0x58,0x41,0x5b,0x3d,0x2e,0x42,0x2a,0x1e, 0x2e,0x2b,0x20,0x2f,0x2d,0x21,0x32,0x2d,0x21,0x32,0x2b,0x20,0x2f,0x44,0x35,0x49, 0x73,0x60,0x79,0x74,0x62,0x7c,0x89,0x92,0xaa,0xac,0xae,0xb7,0x9b,0xa0,0xad,0xa7, 0xad,0xc2,0xa2,0xa9,0xbf,0x9f,0xa6,0xbb,0x9b,0xa3,0xb9,0x7c,0x82,0x95,0x6f,0x75, 0x87,0x9d,0xa5,0xb9,0x79,0x7c,0x85,0x09,0x0a,0x0c,0x0a,0x0a,0x0d,0x0b,0x0c,0x0e, 0x0b,0x0c,0x0f,0x0d,0x0e,0x11,0x0e,0x0f,0x12,0x10,0x11,0x14,0x11,0x12,0x16,0x11, 0x12,0x16,0x13,0x14,0x18,0x18,0x1a,0x1e,0x1a,0x1b,0x21,0x24,0x25,0x2b,0x3b,0x3d, 0x42,0x1f,0x21,0x27,0x1e,0x20,0x26,0x1e,0x20,0x26,0x1f,0x20,0x26,0x20,0x22,0x2a, 0x23,0x25,0x2d,0x26,0x29,0x33,0x2d,0x2d,0x3b,0x38,0x35,0x47,0x3f,0x3b,0x4d,0x47, 0x42,0x56,0x55,0x4b,0x5f,0x5b,0x4e,0x64,0x5b,0x4e,0x64,0x5b,0x4d,0x63,0x5b,0x4d, 0x62,0x5a,0x4d,0x62,0x58,0x4d,0x62,0x57,0x4b,0x5f,0x56,0x4b,0x60,0x55,0x4b,0x62, 0x4e,0x49,0x61,0x49,0x4a,0x64,0x4e,0x56,0x6d,0x5c,0x62,0x77,0x67,0x6a,0x7d,0x6c, 0x6e,0x82,0x5c,0x5f,0x75,0x50,0x52,0x6a,0x53,0x51,0x69,0x56,0x52,0x6c,0x59,0x52, 0x6c,0x59,0x53,0x6c,0x5a,0x53,0x6c,0x5a,0x54,0x6c,0x5d,0x56,0x6f,0x5d,0x57,0x6f, 0x5e,0x58,0x70,0x5f,0x57,0x70,0x60,0x58,0x6f,0x5f,0x57,0x6e,0x5c,0x52,0x6a,0x59, 0x50,0x68,0x65,0x5b,0x74,0x62,0x5c,0x7a,0x62,0x59,0x74,0x64,0x59,0x76,0x64,0x5a, 0x75,0x64,0x5a,0x75,0x64,0x5a,0x76,0x65,0x5a,0x76,0x66,0x5c,0x78,0x66,0x5c,0x78, 0x65,0x5c,0x78,0x64,0x5b,0x78,0x64,0x5a,0x77,0x63,0x5a,0x77,0x62,0x59,0x74,0x61, 0x57,0x73,0x5f,0x55,0x70,0x62,0x58,0x74,0x57,0x4e,0x65,0x5a,0x51,0x6a,0x59,0x52, 0x6a,0x57,0x53,0x6b,0x58,0x54,0x6d,0x5a,0x57,0x6f,0x60,0x5d,0x74,0x61,0x60,0x77, 0x5f,0x60,0x78,0x58,0x5c,0x74,0x56,0x5c,0x75,0x5f,0x67,0x7e,0x66,0x6e,0x83,0x67, 0x6e,0x85,0x5f,0x67,0x7f,0x5a,0x62,0x7b,0x56,0x5d,0x76,0x5b,0x63,0x7b,0x6e,0x75, 0x89,0x76,0x7d,0x90,0x74,0x7b,0x8f,0x6a,0x71,0x88,0x5e,0x67,0x80,0x57,0x5f,0x79, 0x52,0x5a,0x75,0x58,0x59,0x70,0x5a,0x5a,0x6c,0x52,0x50,0x62,0x3b,0x3a,0x4b,0x2f, 0x2e,0x3e,0x2c,0x2a,0x36,0x2a,0x26,0x32,0x26,0x22,0x2d,0x26,0x22,0x2d,0x25,0x22, 0x2c,0x24,0x21,0x2a,0x23,0x1f,0x29,0x24,0x1f,0x28,0x24,0x1f,0x29,0x24,0x20,0x2a, 0x23,0x1f,0x28,0x21,0x1e,0x27,0x23,0x21,0x2a,0x23,0x21,0x2a,0x23,0x21,0x2b,0x24, 0x22,0x2c,0x25,0x23,0x2e,0x26,0x24,0x2e,0x26,0x23,0x2e,0x25,0x22,0x2d,0x24,0x21, 0x2c,0x24,0x22,0x2d,0x25,0x23,0x2e,0x26,0x23,0x2e,0x27,0x25,0x31,0x28,0x26,0x32, 0x29,0x27,0x33,0x2a,0x29,0x35,0x2e,0x2d,0x39,0x33,0x32,0x40,0x39,0x39,0x46,0x45, 0x47,0x53,0x53,0x56,0x63,0x5d,0x61,0x6b,0x5d,0x60,0x6c,0x5a,0x5e,0x6a,0x54,0x58, 0x64,0x46,0x49,0x56,0x47,0x4b,0x56,0x4e,0x51,0x5a,0x50,0x53,0x5b,0x56,0x58,0x61, 0x51,0x55,0x5c,0x48,0x4b,0x54,0x47,0x4b,0x55,0x4a,0x4d,0x56,0x4a,0x4e,0x56,0x46, 0x49,0x50,0x46,0x49,0x52,0x46,0x4a,0x53,0x41,0x44,0x4f,0x4e,0x50,0x58,0x69,0x6a, 0x6f,0x72,0x73,0x76,0x73,0x74,0x78,0x6c,0x6e,0x72,0x60,0x62,0x68,0x4e,0x51,0x56, 0x4b,0x4c,0x52,0x46,0x47,0x4c,0x31,0x32,0x35,0x13,0x14,0x16,0x04,0x04,0x05,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x03,0x03,0x04,0x03,0x03, 0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xb0,0xb0,0xb0,0xfd,0xfd,0xfd,0xff,0xff, 0xff,0xf7,0xf7,0xf7,0x87,0x87,0x87,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44, 0x44,0x44,0xfd,0xfd,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xcf,0xcf,0xcf,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x28,0x28,0x28,0x36,0x36,0x36,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x99,0x99,0x99,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0x99,0x99,0x99,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xbb,0xbb,0xbb,0xff,0xff, 0xff,0xff,0xff,0xff,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x99, 0x99,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x77,0x77,0x77,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x77, 0x77,0x77,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7e,0x7d, 0x7f,0x22,0x1a,0x24,0x3a,0x32,0x47,0x4f,0x44,0x62,0x5d,0x50,0x73,0x60,0x53,0x77, 0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60, 0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x58,0x4c,0x6d,0x3a,0x32,0x48,0x53,0x51, 0x57,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbd,0xbd,0xbd,0x23,0x1f,0x2e, 0x49,0x40,0x5e,0x62,0x51,0x72,0x5f,0x47,0x64,0x5e,0x52,0x79,0x60,0x6b,0x90,0x1d, 0x1e,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x77,0x77,0x77,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0x82,0x83,0x83,0x30,0x36,0x47,0x3c,0x43,0x62,0x2e,0x2c,0x44,0x4b,0x4c,0x53,0xe7, 0xe7,0xe7,0xf4,0xf4,0xf4,0x68,0x68,0x6d,0x2e,0x2d,0x45,0x7a,0x83,0x9e,0x8a,0x83, 0x8d,0x3d,0x2e,0x38,0x3d,0x2e,0x39,0x4a,0x39,0x46,0x33,0x28,0x33,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x63,0x7d,0x76,0x61,0x7a,0x78, 0x68,0x83,0x70,0x68,0x89,0x68,0x6a,0x8f,0x68,0x68,0x8d,0x78,0x6c,0x8a,0xe1,0xe3, 0xe9,0xc3,0xc8,0xd7,0xb3,0xba,0xcd,0x8c,0x97,0xb2,0x5f,0x6b,0x91,0x54,0x5f,0x88, 0x52,0x5c,0x84,0x52,0x55,0x7f,0x50,0x51,0x7a,0x3d,0x3d,0x5e,0x49,0x47,0x6d,0x61, 0x5b,0x86,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x44,0x4a,0x5c,0x5c,0x69,0x8f,0x51,0x4f,0x7b,0x56,0x4d,0x71,0x60,0x53,0x77,0x60, 0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x5f,0x52,0x76,0x5f,0x52,0x76,0x5c,0x4f, 0x72,0x5c,0x50,0x73,0x51,0x50,0x7b,0x5c,0x5b,0x72,0x46,0x36,0x42,0x5e,0x4e,0x62, 0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x03,0x04,0x03,0x03,0x04,0x03, 0x03,0x04,0x03,0x04,0x05,0x03,0x04,0x05,0x04,0x04,0x06,0x04,0x04,0x06,0x04,0x04, 0x06,0x04,0x04,0x06,0x04,0x04,0x06,0x04,0x04,0x06,0x04,0x04,0x06,0x04,0x04,0x06, 0x04,0x04,0x06,0x04,0x05,0x06,0x05,0x05,0x06,0x05,0x05,0x06,0x05,0x05,0x06,0x04, 0x05,0x06,0x04,0x05,0x06,0x04,0x05,0x06,0x05,0x05,0x06,0x04,0x05,0x06,0x04,0x05, 0x06,0x04,0x05,0x06,0x04,0x05,0x06,0x04,0x04,0x06,0x05,0x05,0x06,0x06,0x06,0x07, 0x58,0x44,0x5d,0x5c,0x45,0x5f,0x5a,0x43,0x5e,0x5a,0x43,0x5d,0x58,0x40,0x5b,0x55, 0x40,0x58,0x2d,0x20,0x31,0x2a,0x1e,0x2e,0x2c,0x21,0x32,0x2d,0x22,0x33,0x2e,0x23, 0x33,0x2c,0x20,0x2f,0x66,0x53,0x6b,0x74,0x60,0x79,0x75,0x63,0x7d,0x6c,0x76,0x97, 0xa1,0xa5,0xa9,0xa0,0xa4,0xb3,0xa1,0xa9,0xbe,0x9c,0xa4,0xbb,0x98,0xa0,0xb6,0x6e, 0x73,0x85,0x88,0x8f,0xa1,0xb3,0xb8,0xc7,0x3b,0x3d,0x41,0x08,0x09,0x0b,0x09,0x0a, 0x0c,0x0a,0x0b,0x0e,0x0b,0x0c,0x0e,0x0c,0x0d,0x0f,0x0e,0x0e,0x12,0x0e,0x0f,0x12, 0x0f,0x10,0x13,0x10,0x12,0x15,0x12,0x12,0x16,0x16,0x17,0x1c,0x1f,0x1f,0x25,0x40, 0x41,0x45,0x46,0x48,0x4c,0x38,0x39,0x3f,0x20,0x22,0x28,0x20,0x22,0x28,0x21,0x22, 0x29,0x20,0x22,0x29,0x21,0x22,0x2a,0x21,0x22,0x2a,0x22,0x25,0x2f,0x2a,0x2a,0x36, 0x2f,0x2e,0x3d,0x37,0x35,0x47,0x47,0x41,0x56,0x56,0x4b,0x60,0x5a,0x4d,0x63,0x5b, 0x4f,0x63,0x5b,0x4f,0x63,0x5a,0x4d,0x62,0x57,0x4c,0x62,0x50,0x49,0x5f,0x50,0x48, 0x5e,0x55,0x4a,0x60,0x58,0x4b,0x62,0x58,0x4c,0x62,0x52,0x4b,0x64,0x4a,0x4a,0x66, 0x59,0x5e,0x75,0x6a,0x6e,0x81,0x5f,0x64,0x78,0x52,0x56,0x6c,0x53,0x54,0x6b,0x52, 0x52,0x6b,0x53,0x4e,0x69,0x54,0x4f,0x67,0x59,0x53,0x6a,0x64,0x5f,0x76,0x69,0x63, 0x7b,0x65,0x61,0x77,0x64,0x5e,0x74,0x61,0x59,0x6f,0x5b,0x52,0x69,0x5b,0x51,0x69, 0x5b,0x51,0x68,0x5a,0x51,0x69,0x67,0x5d,0x78,0x62,0x5c,0x79,0x61,0x58,0x75,0x64, 0x5a,0x77,0x65,0x5a,0x77,0x65,0x5b,0x77,0x64,0x5a,0x77,0x63,0x5a,0x76,0x62,0x5a, 0x75,0x62,0x59,0x75,0x62,0x59,0x75,0x60,0x57,0x73,0x60,0x57,0x71,0x5e,0x55,0x70, 0x5e,0x55,0x6f,0x5c,0x53,0x6d,0x5b,0x51,0x6b,0x60,0x57,0x74,0x51,0x4a,0x61,0x52, 0x4a,0x61,0x54,0x4c,0x64,0x54,0x4f,0x66,0x55,0x50,0x67,0x55,0x50,0x67,0x56,0x51, 0x69,0x58,0x55,0x6d,0x57,0x55,0x6c,0x56,0x57,0x6f,0x53,0x56,0x6e,0x50,0x55,0x6f, 0x54,0x5b,0x76,0x56,0x5e,0x77,0x56,0x5e,0x76,0x53,0x5a,0x74,0x50,0x58,0x72,0x5a, 0x62,0x79,0x6b,0x72,0x86,0x6a,0x71,0x86,0x65,0x6c,0x82,0x5e,0x66,0x7e,0x5a,0x62, 0x7a,0x55,0x5b,0x74,0x56,0x57,0x6d,0x56,0x56,0x69,0x52,0x52,0x62,0x44,0x44,0x52, 0x31,0x30,0x3e,0x2a,0x27,0x34,0x29,0x25,0x31,0x27,0x22,0x2d,0x26,0x22,0x2a,0x24, 0x20,0x28,0x24,0x20,0x29,0x25,0x20,0x29,0x24,0x1f,0x29,0x23,0x1f,0x28,0x23,0x1e, 0x27,0x22,0x1d,0x26,0x20,0x1c,0x24,0x1f,0x1c,0x25,0x21,0x1e,0x26,0x22,0x1e,0x27, 0x22,0x1f,0x28,0x22,0x1f,0x28,0x22,0x21,0x29,0x22,0x21,0x2a,0x22,0x1e,0x28,0x22, 0x1e,0x26,0x20,0x1d,0x25,0x20,0x1e,0x26,0x21,0x1f,0x26,0x22,0x1f,0x28,0x22,0x20, 0x2a,0x23,0x21,0x2a,0x24,0x23,0x2c,0x26,0x23,0x2e,0x26,0x26,0x31,0x29,0x28,0x34, 0x30,0x30,0x3b,0x44,0x45,0x51,0x4a,0x4b,0x58,0x51,0x53,0x5e,0x54,0x57,0x62,0x52, 0x56,0x61,0x4b,0x4e,0x5a,0x3e,0x40,0x4c,0x3d,0x40,0x4b,0x52,0x56,0x5f,0x5e,0x62, 0x6b,0x5b,0x5e,0x69,0x4e,0x51,0x5a,0x3f,0x43,0x4e,0x3d,0x40,0x4b,0x3e,0x40,0x4a, 0x3c,0x3f,0x4a,0x36,0x38,0x42,0x30,0x32,0x3b,0x2a,0x2a,0x33,0x29,0x2a,0x31,0x46, 0x47,0x4c,0x65,0x65,0x69,0x68,0x69,0x6e,0x63,0x64,0x68,0x5e,0x5e,0x64,0x52,0x52, 0x58,0x42,0x43,0x4c,0x3e,0x40,0x49,0x3f,0x42,0x4b,0x39,0x3a,0x42,0x2a,0x2a,0x2f, 0x1a,0x1a,0x1e,0x0d,0x0d,0x0e,0x0c,0x0c,0x0d,0x12,0x12,0x12,0x1c,0x1d,0x1e,0x21, 0x21,0x22,0x22,0x22,0x24,0x1e,0x1e,0x1f,0x14,0x15,0x16,0x0a,0x0a,0x0b,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x9a,0x9a,0x9a,0xfa,0xfa,0xfa,0xff, 0xff,0xff,0xff,0xff,0xff,0x99,0x99,0x99,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xba,0xba,0xba,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f, 0x7f,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xb0,0xb0,0xb0,0xe8,0xe8,0xe8,0xf9,0xf9,0xf9,0xe8,0xe8,0xe8, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x99,0x99,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0x99,0x99,0x99,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xbb, 0xbb,0xbb,0xff,0xff,0xff,0xff,0xff,0xff,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x99,0x99,0x99,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x77,0x77, 0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x22, 0xbb,0xbb,0xbb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xcc,0xcc,0xcc,0x3d, 0x3e,0x41,0x26,0x25,0x39,0x43,0x31,0x45,0x5b,0x4b,0x69,0x5e,0x51,0x75,0x60,0x53, 0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77, 0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x5e,0x51,0x75,0x4e, 0x43,0x61,0x29,0x24,0x33,0x9d,0x9c,0x9e,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0x50,0x4f,0x54,0x35,0x2f,0x45,0x54,0x4a,0x6d,0x64,0x4f,0x6e,0x60,0x48,0x65, 0x54,0x50,0x79,0x58,0x62,0x83,0x0d,0x0e,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x22,0xee,0xee,0xee,0xff,0xff,0xff,0xff,0xff, 0xff,0xdd,0xdd,0xdd,0x00,0x00,0x00,0x57,0x59,0x5e,0x42,0x4a,0x62,0x19,0x1d,0x29, 0xd3,0xd3,0xd3,0xf7,0xf7,0xf7,0xcf,0xcf,0xd0,0x1e,0x1e,0x2d,0x40,0x43,0x64,0x8a, 0x94,0xaf,0xa0,0x95,0xa4,0x49,0x38,0x45,0x3e,0x2f,0x3a,0x4f,0x3d,0x4b,0x17,0x13, 0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x68,0x89, 0x78,0x67,0x81,0x6e,0x68,0x89,0x68,0x6a,0x8e,0x6a,0x74,0x97,0x69,0x73,0x96,0x6f, 0x68,0x89,0xe2,0xe3,0xea,0xce,0xd1,0xdd,0xbb,0xc0,0xd1,0x98,0xa1,0xba,0x64,0x6f, 0x94,0x55,0x60,0x89,0x52,0x5b,0x84,0x52,0x55,0x80,0x50,0x52,0x7a,0x42,0x41,0x63, 0x48,0x47,0x6d,0x65,0x5f,0x92,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x37,0x3b,0x48,0x65,0x71,0x95,0x52,0x53,0x7e,0x54,0x4c,0x70, 0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x5f, 0x52,0x76,0x5b,0x4f,0x72,0x5b,0x51,0x77,0x51,0x50,0x7a,0x5f,0x5e,0x77,0x43,0x33, 0x3f,0x70,0x5c,0x73,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x03, 0x02,0x02,0x03,0x02,0x03,0x04,0x03,0x03,0x04,0x03,0x04,0x05,0x03,0x04,0x05,0x03, 0x04,0x05,0x03,0x04,0x05,0x03,0x04,0x05,0x03,0x04,0x05,0x04,0x04,0x06,0x04,0x04, 0x06,0x04,0x04,0x06,0x04,0x04,0x06,0x04,0x04,0x06,0x04,0x04,0x06,0x04,0x05,0x06, 0x04,0x05,0x06,0x04,0x05,0x06,0x04,0x05,0x06,0x04,0x04,0x06,0x04,0x04,0x06,0x04, 0x04,0x06,0x04,0x05,0x06,0x04,0x04,0x06,0x04,0x04,0x06,0x04,0x04,0x06,0x04,0x04, 0x06,0x04,0x04,0x06,0x16,0x13,0x1b,0x5f,0x47,0x62,0x5a,0x43,0x5d,0x5a,0x43,0x5d, 0x59,0x42,0x5c,0x55,0x3f,0x59,0x49,0x36,0x4d,0x2a,0x1d,0x2d,0x2c,0x1f,0x2f,0x2d, 0x21,0x32,0x2e,0x22,0x33,0x2d,0x21,0x32,0x2c,0x1f,0x2f,0x69,0x57,0x71,0x74,0x60, 0x79,0x76,0x65,0x7d,0xba,0xbd,0xc9,0x93,0x96,0x9d,0x9e,0xa5,0xb7,0x9d,0xa5,0xbb, 0x89,0x90,0xa5,0x72,0x78,0x88,0xa8,0xaf,0xc0,0xa5,0xa9,0xb2,0x06,0x07,0x09,0x08, 0x09,0x0b,0x09,0x0a,0x0b,0x09,0x0a,0x0c,0x0a,0x0b,0x0e,0x0a,0x0b,0x0e,0x0b,0x0d, 0x0f,0x0e,0x0e,0x12,0x0e,0x0f,0x12,0x21,0x22,0x24,0x20,0x22,0x25,0x17,0x18,0x1c, 0x2b,0x2b,0x2f,0x33,0x35,0x39,0x1b,0x1c,0x21,0x2e,0x2f,0x35,0x3f,0x40,0x45,0x25, 0x25,0x2c,0x22,0x22,0x2a,0x23,0x24,0x2c,0x23,0x25,0x2c,0x23,0x25,0x2c,0x23,0x25, 0x2d,0x22,0x25,0x2e,0x24,0x26,0x31,0x2a,0x2a,0x37,0x36,0x34,0x45,0x48,0x41,0x55, 0x54,0x49,0x5f,0x58,0x4d,0x62,0x5b,0x4e,0x63,0x59,0x4d,0x62,0x57,0x4c,0x62,0x4e, 0x47,0x5f,0x4a,0x45,0x5b,0x49,0x45,0x5b,0x4a,0x47,0x5e,0x52,0x4a,0x61,0x56,0x4c, 0x63,0x50,0x4b,0x63,0x4a,0x4a,0x64,0x50,0x55,0x6e,0x51,0x56,0x6e,0x56,0x5c,0x71, 0x54,0x57,0x6e,0x53,0x53,0x6b,0x52,0x4f,0x69,0x56,0x51,0x6b,0x62,0x5f,0x77,0x67, 0x64,0x7c,0x6c,0x68,0x7e,0x65,0x5f,0x77,0x66,0x5e,0x76,0x63,0x5a,0x71,0x5c,0x52, 0x69,0x5a,0x50,0x67,0x5b,0x51,0x68,0x5d,0x53,0x6b,0x6a,0x60,0x7a,0x63,0x5b,0x79, 0x62,0x58,0x75,0x64,0x59,0x77,0x65,0x5a,0x76,0x65,0x5a,0x77,0x66,0x5a,0x77,0x65, 0x5a,0x75,0x65,0x59,0x76,0x62,0x58,0x74,0x62,0x58,0x73,0x62,0x57,0x73,0x60,0x57, 0x71,0x60,0x57,0x71,0x62,0x58,0x73,0x5f,0x55,0x70,0x5b,0x51,0x6b,0x61,0x55,0x73, 0x4f,0x48,0x5e,0x4f,0x48,0x5e,0x52,0x4b,0x62,0x52,0x4c,0x62,0x53,0x4c,0x64,0x54, 0x4e,0x65,0x54,0x4e,0x65,0x56,0x4e,0x66,0x55,0x4f,0x67,0x52,0x50,0x69,0x52,0x4f, 0x69,0x51,0x4f,0x6b,0x4e,0x4e,0x6a,0x4d,0x50,0x6c,0x4c,0x52,0x6d,0x4d,0x54,0x6e, 0x51,0x59,0x72,0x5c,0x64,0x7c,0x61,0x68,0x7f,0x61,0x68,0x7e,0x60,0x67,0x7d,0x54, 0x5b,0x72,0x4c,0x52,0x68,0x4e,0x4e,0x60,0x4e,0x4e,0x5e,0x4c,0x4b,0x59,0x42,0x42, 0x50,0x34,0x33,0x42,0x2d,0x2a,0x37,0x2d,0x28,0x35,0x42,0x3f,0x48,0x3d,0x37,0x41, 0x26,0x22,0x2c,0x26,0x22,0x2b,0x26,0x21,0x2a,0x24,0x20,0x29,0x23,0x1f,0x28,0x22, 0x1e,0x27,0x22,0x1e,0x26,0x1f,0x1b,0x23,0x1e,0x1a,0x22,0x1d,0x1a,0x20,0x1d,0x1a, 0x20,0x1c,0x1a,0x20,0x1d,0x1a,0x21,0x1d,0x1a,0x22,0x1e,0x1b,0x22,0x1e,0x1b,0x23, 0x1e,0x1b,0x22,0x1e,0x1a,0x22,0x1d,0x1a,0x21,0x1e,0x1a,0x22,0x1e,0x1b,0x22,0x1e, 0x1b,0x22,0x1e,0x1b,0x22,0x1d,0x1a,0x22,0x1e,0x1a,0x22,0x1e,0x1d,0x23,0x24,0x22, 0x2a,0x2f,0x2f,0x3a,0x32,0x31,0x3c,0x36,0x36,0x41,0x36,0x36,0x41,0x3a,0x3a,0x45, 0x44,0x45,0x50,0x49,0x4b,0x55,0x41,0x42,0x4e,0x30,0x30,0x3b,0x2a,0x2b,0x36,0x42, 0x43,0x4e,0x4a,0x4d,0x56,0x41,0x42,0x4b,0x2a,0x2a,0x35,0x23,0x23,0x2e,0x26,0x26, 0x30,0x26,0x27,0x31,0x25,0x25,0x2e,0x22,0x20,0x29,0x1e,0x1c,0x25,0x1d,0x1a,0x22, 0x22,0x1f,0x27,0x3e,0x3d,0x42,0x57,0x56,0x5a,0x5b,0x5a,0x5e,0x5e,0x5c,0x60,0x57, 0x56,0x5a,0x4d,0x4c,0x52,0x44,0x42,0x4a,0x42,0x41,0x48,0x3e,0x3f,0x48,0x36,0x36, 0x3f,0x2d,0x2e,0x36,0x2a,0x2a,0x32,0x27,0x28,0x2e,0x32,0x33,0x39,0x3a,0x3c,0x40, 0x3e,0x40,0x43,0x37,0x38,0x3b,0x2a,0x2a,0x2c,0x1a,0x1a,0x1b,0x17,0x18,0x19,0x13, 0x13,0x15,0x14,0x15,0x16,0x07,0x07,0x08,0x06,0x06,0x06,0x05,0x04,0x06,0x03,0x03, 0x04,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8f,0x8f,0x8f,0xf9,0xf9,0xf9, 0xff,0xff,0xff,0xfc,0xfc,0xfc,0xb9,0xb9,0xb9,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xf0,0xf0,0xff,0xff,0xff,0xff,0xff,0xff, 0xf6,0xf6,0xf6,0x09,0x09,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0xa3,0xa3,0xa3,0xfd,0xfd,0xfd,0xff,0xff,0xff,0xff,0xff, 0xff,0xe5,0xe5,0xe5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x99,0x99, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x99,0x99,0x99,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xbb,0xbb,0xbb,0xff,0xff,0xff,0xff,0xff,0xff,0xbb,0xbb,0xbb,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x99,0x99,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0x77,0x77,0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x66, 0x66,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x99,0x99,0x99, 0x00,0x00,0x00,0x02,0x02,0x02,0x45,0x4d,0x68,0x60,0x4f,0x71,0x5d,0x45,0x60,0x62, 0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53, 0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77, 0x60,0x53,0x77,0x5a,0x4e,0x70,0x3f,0x36,0x4e,0x36,0x33,0x3a,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xcd,0xcd,0xce,0x21,0x1d,0x2a,0x47,0x3f,0x5c,0x5d,0x51, 0x74,0x64,0x4d,0x6a,0x62,0x4b,0x67,0x52,0x50,0x7c,0x4f,0x57,0x71,0x02,0x02,0x02, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x99,0x99,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0x66,0x66,0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x28,0x29, 0x2b,0x9f,0x9f,0xa1,0xf8,0xf8,0xf8,0xf7,0xf7,0xf7,0x61,0x61,0x66,0x2e,0x2e,0x46, 0x4b,0x50,0x77,0x93,0x9d,0xb9,0x9f,0x93,0xa3,0x6d,0x58,0x6e,0x55,0x43,0x53,0x59, 0x47,0x58,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x69,0x73,0x96,0x6b,0x67,0x89,0x68,0x67,0x8c,0x68,0x72,0x96,0x6c,0x77,0x99, 0x6c,0x76,0x99,0x69,0x67,0x8a,0xe1,0xe1,0xe6,0xdf,0xe1,0xe9,0xc2,0xc8,0xd6,0xa0, 0xa8,0xc0,0x6a,0x75,0x99,0x56,0x62,0x8a,0x52,0x58,0x83,0x52,0x55,0x80,0x50,0x51, 0x7b,0x44,0x44,0x68,0x46,0x44,0x6a,0x66,0x60,0x96,0x03,0x02,0x03,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x28,0x2b,0x34,0x6e,0x7a,0x9c,0x53,0x5e, 0x87,0x51,0x4b,0x71,0x5f,0x53,0x76,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77, 0x60,0x53,0x77,0x5e,0x53,0x79,0x59,0x4f,0x73,0x5c,0x51,0x77,0x51,0x52,0x7b,0x62, 0x63,0x7b,0x42,0x33,0x3e,0x6a,0x56,0x6c,0x02,0x03,0x03,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x03,0x04,0x02,0x03,0x04, 0x02,0x03,0x04,0x02,0x03,0x04,0x03,0x04,0x05,0x03,0x03,0x04,0x03,0x03,0x04,0x03, 0x03,0x04,0x03,0x04,0x05,0x04,0x04,0x06,0x04,0x04,0x06,0x03,0x04,0x05,0x04,0x04, 0x06,0x03,0x04,0x05,0x04,0x04,0x06,0x04,0x04,0x06,0x04,0x04,0x06,0x04,0x04,0x06, 0x04,0x04,0x06,0x04,0x04,0x06,0x03,0x04,0x05,0x03,0x04,0x05,0x04,0x04,0x06,0x03, 0x04,0x05,0x03,0x04,0x05,0x03,0x04,0x05,0x04,0x04,0x06,0x3d,0x2f,0x41,0x5b,0x43, 0x5d,0x59,0x42,0x5b,0x58,0x43,0x5b,0x59,0x44,0x5d,0x56,0x40,0x59,0x35,0x27,0x38, 0x2b,0x1e,0x2f,0x2e,0x20,0x32,0x2f,0x23,0x33,0x2f,0x23,0x33,0x2e,0x21,0x32,0x2e, 0x21,0x31,0x67,0x56,0x6f,0x74,0x61,0x7a,0x7d,0x6d,0x85,0xc0,0xc0,0xc9,0x87,0x8b, 0x96,0x92,0x97,0xa9,0x75,0x7b,0x8d,0x8a,0x92,0xa5,0xc1,0xc5,0xd4,0x45,0x46,0x49, 0x06,0x07,0x09,0x07,0x08,0x0a,0x08,0x09,0x0b,0x08,0x09,0x0b,0x0a,0x0a,0x0c,0x0a, 0x0a,0x0d,0x0b,0x0c,0x0e,0x0c,0x0d,0x10,0x0d,0x0e,0x11,0x21,0x22,0x24,0x29,0x2b, 0x2d,0x33,0x34,0x37,0x3a,0x3b,0x3e,0x2d,0x2f,0x32,0x15,0x16,0x1a,0x18,0x1a,0x1e, 0x27,0x27,0x2c,0x3a,0x3a,0x40,0x23,0x24,0x2b,0x22,0x23,0x2a,0x24,0x25,0x2c,0x25, 0x26,0x2e,0x26,0x27,0x2f,0x27,0x28,0x30,0x26,0x28,0x31,0x26,0x27,0x32,0x29,0x2a, 0x37,0x32,0x33,0x42,0x3f,0x3b,0x4f,0x4e,0x45,0x58,0x54,0x49,0x5e,0x54,0x49,0x5f, 0x51,0x47,0x5d,0x4c,0x45,0x5b,0x48,0x42,0x58,0x47,0x47,0x5b,0x4f,0x50,0x61,0x4a, 0x4a,0x60,0x4c,0x48,0x5f,0x4d,0x49,0x61,0x4d,0x48,0x60,0x49,0x49,0x62,0x53,0x56, 0x6b,0x5c,0x60,0x71,0x5a,0x5e,0x6f,0x52,0x53,0x6a,0x50,0x50,0x69,0x54,0x50,0x6a, 0x61,0x5d,0x75,0x63,0x5f,0x77,0x64,0x60,0x79,0x5c,0x56,0x6e,0x5d,0x55,0x6c,0x5f, 0x55,0x6c,0x5f,0x54,0x6c,0x5e,0x53,0x6c,0x5e,0x53,0x6b,0x5f,0x54,0x6e,0x6c,0x63, 0x7d,0x62,0x5c,0x79,0x62,0x59,0x75,0x64,0x59,0x77,0x64,0x59,0x76,0x63,0x59,0x75, 0x62,0x59,0x75,0x62,0x58,0x75,0x62,0x58,0x74,0x62,0x58,0x73,0x61,0x57,0x73,0x61, 0x57,0x72,0x61,0x57,0x72,0x61,0x57,0x72,0x60,0x57,0x72,0x5f,0x55,0x70,0x5d,0x54, 0x6e,0x62,0x57,0x74,0x52,0x4a,0x60,0x53,0x4b,0x62,0x52,0x4a,0x62,0x51,0x4a,0x62, 0x50,0x4a,0x60,0x51,0x4a,0x60,0x54,0x4b,0x64,0x57,0x4f,0x67,0x56,0x4e,0x67,0x52, 0x4d,0x66,0x51,0x4d,0x67,0x50,0x4e,0x69,0x4d,0x4c,0x68,0x4c,0x4e,0x69,0x4c,0x4f, 0x6a,0x51,0x5a,0x73,0x5f,0x66,0x7e,0x66,0x6e,0x83,0x6a,0x72,0x86,0x68,0x6e,0x82, 0x5a,0x61,0x75,0x44,0x4a,0x5f,0x3a,0x3d,0x4f,0x43,0x43,0x53,0x48,0x48,0x56,0x49, 0x49,0x56,0x37,0x37,0x45,0x2f,0x2b,0x39,0x2e,0x2a,0x37,0x42,0x3e,0x49,0x8c,0x89, 0x90,0x4f,0x49,0x55,0x2f,0x2a,0x37,0x2b,0x26,0x32,0x26,0x22,0x2a,0x24,0x20,0x2a, 0x23,0x1f,0x27,0x22,0x1d,0x26,0x1e,0x1a,0x22,0x1d,0x19,0x20,0x1b,0x18,0x1f,0x1a, 0x17,0x1d,0x19,0x16,0x1c,0x18,0x17,0x1c,0x19,0x16,0x1c,0x19,0x17,0x1c,0x19,0x16, 0x1c,0x1a,0x17,0x1e,0x1a,0x18,0x1d,0x1a,0x18,0x1e,0x1a,0x18,0x1e,0x1a,0x18,0x1e, 0x1b,0x18,0x1e,0x1a,0x19,0x1e,0x1b,0x18,0x1e,0x1a,0x18,0x1e,0x1a,0x18,0x1e,0x1b, 0x18,0x1e,0x1e,0x1c,0x24,0x29,0x28,0x2f,0x2e,0x2c,0x35,0x32,0x30,0x3a,0x30,0x2f, 0x39,0x2c,0x2a,0x34,0x30,0x2f,0x3a,0x3a,0x3b,0x44,0x33,0x32,0x3d,0x27,0x26,0x30, 0x22,0x1f,0x2a,0x28,0x28,0x32,0x2b,0x2b,0x35,0x26,0x24,0x2e,0x20,0x20,0x29,0x22, 0x21,0x2a,0x20,0x1e,0x27,0x1c,0x1a,0x23,0x1c,0x1a,0x22,0x1c,0x1a,0x21,0x1b,0x19, 0x20,0x1b,0x1a,0x20,0x26,0x24,0x2b,0x44,0x43,0x47,0x57,0x56,0x5a,0x56,0x54,0x58, 0x4e,0x4e,0x51,0x48,0x46,0x4b,0x4b,0x4a,0x4e,0x52,0x52,0x56,0x49,0x47,0x4d,0x41, 0x3f,0x46,0x2d,0x2d,0x33,0x22,0x21,0x28,0x20,0x1f,0x26,0x21,0x21,0x29,0x26,0x26, 0x2e,0x26,0x27,0x2e,0x21,0x22,0x27,0x1b,0x1b,0x1f,0x18,0x18,0x1b,0x12,0x12,0x14, 0x18,0x19,0x1c,0x1a,0x1a,0x1e,0x1b,0x1c,0x1f,0x0e,0x0e,0x10,0x0c,0x0b,0x0e,0x0c, 0x0b,0x0e,0x0b,0x0a,0x0c,0x09,0x08,0x0a,0x06,0x06,0x07,0x04,0x04,0x05,0x02,0x02, 0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8e,0x8e,0x8e,0xf7,0xf7, 0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xc2,0xc2,0xc2,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x65,0x65,0x65,0xfd,0xfd,0xfd,0xff,0xff, 0xff,0xff,0xff,0xff,0xd6,0xd6,0xd6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf2,0xf2,0xf2,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xf4,0xf4,0xf4,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x99,0x99,0x99,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x99,0x99,0x99, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xbb,0xbb,0xbb,0xff,0xff,0xff,0xff,0xff,0xff, 0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x99,0x99,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0x77,0x77,0x77,0x00,0x00,0x00,0x11,0x11,0x11,0xaa, 0xaa,0xaa,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdd,0xdd,0xdd,0x44,0x44, 0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x21,0x23,0x2a,0x54,0x5f,0x89, 0x5f,0x47,0x63,0x62,0x4b,0x66,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60, 0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53, 0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x5f,0x52,0x76,0x50,0x45,0x63,0x2c,0x26,0x37, 0x7d,0x7c,0x7e,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x6f,0x6e,0x72,0x32, 0x2c,0x41,0x51,0x48,0x6b,0x5e,0x53,0x79,0x64,0x52,0x72,0x64,0x4d,0x6b,0x52,0x5a, 0x84,0x3e,0x45,0x58,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x22,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xcc,0xcc,0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x42,0x42,0x42,0xf5,0xf5,0xf5,0xfd,0xfd,0xfd,0xdb,0xdb,0xdb,0x1b,0x1c, 0x2a,0x3e,0x3f,0x60,0x50,0x53,0x7c,0x94,0x9f,0xba,0xa0,0x95,0xa3,0x6e,0x59,0x6f, 0x74,0x5f,0x77,0x60,0x5e,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x73,0x7d,0x9f,0x68,0x67,0x8c,0x68,0x72,0x95,0x6d,0x78, 0x9a,0x6c,0x77,0x99,0x6f,0x7a,0x9c,0x69,0x66,0x8a,0xce,0xcb,0xd1,0xf4,0xf5,0xf7, 0xd5,0xd9,0xe2,0xae,0xb4,0xc9,0x7b,0x85,0xa7,0x5b,0x66,0x8e,0x53,0x5e,0x89,0x52, 0x5d,0x86,0x50,0x53,0x7d,0x47,0x47,0x6c,0x45,0x43,0x67,0x5e,0x5a,0x8d,0x1b,0x16, 0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x19,0x1d,0x77, 0x82,0xa3,0x56,0x62,0x8a,0x4e,0x4a,0x73,0x5e,0x52,0x75,0x60,0x53,0x77,0x60,0x53, 0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x5e,0x53,0x79,0x59,0x4f,0x75,0x5a,0x51,0x78, 0x51,0x4f,0x7b,0x62,0x65,0x7e,0x40,0x31,0x3c,0x68,0x54,0x69,0x04,0x05,0x06,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02, 0x03,0x02,0x03,0x04,0x02,0x03,0x04,0x02,0x03,0x04,0x02,0x03,0x04,0x02,0x03,0x04, 0x02,0x03,0x04,0x02,0x03,0x04,0x02,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x03, 0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x04,0x05,0x03,0x03, 0x04,0x03,0x04,0x05,0x03,0x04,0x05,0x03,0x04,0x05,0x03,0x04,0x05,0x03,0x03,0x04, 0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x04,0x05,0x0a, 0x09,0x0e,0x58,0x42,0x5c,0x5a,0x44,0x5d,0x5a,0x44,0x5d,0x59,0x44,0x5d,0x59,0x43, 0x5c,0x56,0x40,0x59,0x30,0x23,0x34,0x2b,0x20,0x2f,0x2d,0x21,0x32,0x2e,0x23,0x33, 0x2d,0x21,0x33,0x2d,0x20,0x31,0x2e,0x23,0x33,0x67,0x54,0x6b,0x74,0x60,0x79,0x7e, 0x70,0x88,0xcd,0xcf,0xd4,0x88,0x8d,0x98,0x78,0x7f,0x91,0xa9,0xb0,0xc3,0x89,0x8b, 0x90,0x05,0x06,0x07,0x06,0x06,0x07,0x06,0x06,0x08,0x06,0x07,0x0a,0x07,0x08,0x0a, 0x08,0x09,0x0a,0x09,0x0a,0x0b,0x0a,0x0a,0x0d,0x0a,0x0b,0x0e,0x0b,0x0c,0x0e,0x0c, 0x0d,0x10,0x0c,0x0d,0x10,0x0e,0x0e,0x12,0x10,0x11,0x14,0x10,0x12,0x14,0x10,0x11, 0x14,0x12,0x13,0x17,0x16,0x16,0x1b,0x33,0x34,0x39,0x2b,0x2c,0x32,0x20,0x22,0x28, 0x22,0x23,0x2a,0x22,0x23,0x2a,0x25,0x26,0x2e,0x26,0x28,0x30,0x29,0x2a,0x32,0x28, 0x2a,0x32,0x29,0x2a,0x33,0x2a,0x2d,0x36,0x2e,0x31,0x3e,0x35,0x35,0x45,0x40,0x3b, 0x4e,0x43,0x3e,0x52,0x43,0x3e,0x53,0x42,0x3d,0x52,0x40,0x3f,0x52,0x4a,0x4a,0x5b, 0x59,0x58,0x66,0x58,0x58,0x65,0x53,0x54,0x65,0x4f,0x4f,0x63,0x51,0x4f,0x64,0x55, 0x53,0x67,0x58,0x56,0x67,0x59,0x57,0x69,0x5d,0x5c,0x6e,0x59,0x59,0x6c,0x50,0x4f, 0x66,0x52,0x4f,0x67,0x56,0x51,0x69,0x58,0x52,0x6b,0x58,0x52,0x6b,0x57,0x51,0x6a, 0x57,0x52,0x6b,0x59,0x51,0x6a,0x5b,0x51,0x68,0x5a,0x50,0x68,0x58,0x4f,0x66,0x5a, 0x51,0x6a,0x66,0x60,0x7a,0x5d,0x57,0x74,0x5c,0x56,0x72,0x5f,0x58,0x75,0x5f,0x57, 0x75,0x5e,0x57,0x75,0x5e,0x57,0x75,0x5f,0x57,0x76,0x5f,0x58,0x76,0x5f,0x59,0x76, 0x60,0x59,0x77,0x61,0x59,0x78,0x62,0x5a,0x78,0x63,0x5b,0x79,0x64,0x5c,0x7b,0x64, 0x5b,0x79,0x62,0x5a,0x78,0x66,0x5e,0x7e,0x57,0x51,0x6a,0x57,0x51,0x6b,0x57,0x50, 0x6b,0x55,0x50,0x6a,0x57,0x52,0x6a,0x58,0x51,0x6a,0x59,0x52,0x6b,0x59,0x52,0x6c, 0x54,0x4f,0x69,0x52,0x4e,0x68,0x51,0x4f,0x69,0x4e,0x4d,0x69,0x4c,0x4c,0x67,0x4b, 0x4e,0x68,0x51,0x5a,0x73,0x60,0x67,0x7f,0x69,0x70,0x86,0x6d,0x75,0x88,0x6e,0x73, 0x85,0x62,0x68,0x76,0x52,0x57,0x68,0x42,0x49,0x5b,0x36,0x37,0x4a,0x42,0x41,0x52, 0x57,0x55,0x64,0x57,0x54,0x63,0x76,0x72,0x7e,0x53,0x4e,0x5b,0x4c,0x47,0x54,0x4e, 0x49,0x55,0x3d,0x37,0x46,0x61,0x5c,0x67,0x65,0x62,0x6b,0x3b,0x37,0x42,0x3c,0x37, 0x41,0x2a,0x26,0x2f,0x1f,0x1c,0x24,0x1a,0x16,0x1d,0x17,0x15,0x1a,0x16,0x13,0x18, 0x14,0x12,0x16,0x15,0x12,0x17,0x16,0x13,0x18,0x15,0x13,0x17,0x15,0x13,0x17,0x16, 0x13,0x18,0x16,0x14,0x18,0x15,0x13,0x18,0x16,0x14,0x19,0x16,0x15,0x1a,0x16,0x16, 0x1a,0x16,0x15,0x1a,0x16,0x15,0x1a,0x16,0x15,0x1a,0x17,0x16,0x1a,0x17,0x16,0x1b, 0x17,0x16,0x1b,0x18,0x16,0x1c,0x1a,0x18,0x1e,0x1c,0x1a,0x20,0x1f,0x1d,0x24,0x22, 0x20,0x28,0x25,0x22,0x2b,0x22,0x1f,0x28,0x21,0x1e,0x28,0x25,0x23,0x2d,0x22,0x1f, 0x28,0x1e,0x1c,0x24,0x1e,0x1b,0x24,0x1f,0x1d,0x26,0x20,0x1e,0x28,0x1e,0x1d,0x26, 0x1f,0x1e,0x27,0x23,0x21,0x2a,0x20,0x1e,0x26,0x1a,0x18,0x1f,0x19,0x17,0x1e,0x1a, 0x17,0x1e,0x19,0x17,0x1e,0x1a,0x19,0x1e,0x31,0x2e,0x33,0x3a,0x39,0x3e,0x3d,0x3b, 0x3f,0x3c,0x3c,0x3e,0x3b,0x39,0x3e,0x3e,0x3d,0x41,0x38,0x37,0x3b,0x3b,0x3a,0x3f, 0x35,0x35,0x38,0x2c,0x2b,0x30,0x22,0x20,0x26,0x1b,0x1a,0x20,0x1a,0x19,0x1f,0x1a, 0x19,0x1f,0x1a,0x1a,0x20,0x1a,0x18,0x1f,0x17,0x16,0x1c,0x13,0x13,0x18,0x10,0x0f, 0x14,0x11,0x10,0x14,0x13,0x13,0x17,0x13,0x12,0x17,0x10,0x0f,0x12,0x0e,0x0d,0x10, 0x0e,0x0d,0x10,0x0e,0x0e,0x11,0x0f,0x0e,0x11,0x10,0x0f,0x12,0x0f,0x0e,0x12,0x0c, 0x0b,0x0e,0x08,0x08,0x0a,0x06,0x05,0x06,0x03,0x02,0x03,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x79,0x79,0x79,0xf7, 0xf7,0xf7,0xff,0xff,0xff,0xfd,0xfd,0xfd,0xce,0xce,0xce,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc9,0xc9,0xc9,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x62,0x62,0x62,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfa,0xfa,0xfa,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x99,0x99,0x99,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0x99,0x99,0x99,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xbb,0xbb,0xbb,0xff,0xff, 0xff,0xff,0xff,0xff,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x99, 0x99,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x77,0x77,0x77,0x44,0x44,0x44, 0xee,0xee,0xee,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaa,0xaa,0xaa,0x11, 0x11,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x48,0x4f,0x63,0x52,0x4f,0x7a,0x5c,0x44,0x5f,0x64,0x52,0x72,0x60,0x53,0x77, 0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60, 0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x5b,0x4f, 0x71,0x42,0x39,0x52,0x28,0x26,0x2e,0xee,0xee,0xee,0xff,0xff,0xff,0xff,0xff,0xff, 0xde,0xde,0xde,0x1d,0x1a,0x26,0x43,0x3b,0x57,0x58,0x4f,0x74,0x5b,0x52,0x79,0x64, 0x4c,0x69,0x64,0x50,0x71,0x53,0x5e,0x87,0x22,0x25,0x2e,0x00,0x00,0x00,0x99,0x99, 0x99,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x44,0x44,0x44,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0xd8,0xd8,0xd8,0xfd,0xfd,0xfd,0xfa,0xfa,0xfa,0x7e, 0x7f,0x80,0x33,0x39,0x4e,0x49,0x47,0x6e,0x54,0x5f,0x88,0x91,0x9a,0xb6,0xa2,0x97, 0xa4,0x71,0x5c,0x73,0x6d,0x67,0x89,0x4c,0x51,0x5f,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x77,0x80,0xa2,0x68,0x72,0x96,0x6a, 0x74,0x97,0x70,0x7b,0x9d,0x7b,0x85,0xa5,0x68,0x6b,0x8f,0x5a,0x47,0x58,0x45,0x3d, 0x41,0xf2,0xf2,0xf3,0xf9,0xf9,0xfa,0xd6,0xd9,0xe3,0x9a,0xa2,0xbb,0x6e,0x7a,0x9d, 0x5e,0x6a,0x91,0x56,0x63,0x8b,0x50,0x5b,0x85,0x4a,0x4e,0x76,0x42,0x44,0x68,0x57, 0x54,0x82,0x35,0x2c,0x3e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x07,0x07,0x0a,0x7f,0x89,0xa9,0x5c,0x69,0x8f,0x4d,0x4a,0x73,0x5a,0x51,0x77,0x60, 0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x5e,0x53,0x79,0x5c,0x52,0x79,0x5a,0x52, 0x79,0x55,0x4f,0x78,0x51,0x51,0x7c,0x64,0x69,0x83,0x3f,0x30,0x3b,0x5f,0x4c,0x5f, 0x09,0x08,0x0b,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02, 0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03, 0x02,0x02,0x03,0x02,0x03,0x04,0x02,0x03,0x04,0x02,0x03,0x04,0x02,0x03,0x04,0x02, 0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x02,0x03,0x04,0x03,0x03,0x04,0x03,0x03, 0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x02,0x03,0x04,0x02,0x03,0x04, 0x03,0x03,0x04,0x03,0x03,0x04,0x2d,0x27,0x36,0x5a,0x44,0x5d,0x5a,0x44,0x5d,0x5a, 0x44,0x5d,0x59,0x41,0x5b,0x5a,0x43,0x5c,0x57,0x40,0x5b,0x2e,0x22,0x32,0x2c,0x20, 0x30,0x2d,0x21,0x32,0x2d,0x21,0x32,0x2d,0x20,0x31,0x2c,0x20,0x30,0x31,0x26,0x37, 0x5f,0x4e,0x63,0x71,0x5d,0x75,0x7f,0x76,0x8a,0xc7,0xcb,0xd5,0xa8,0xad,0xbd,0x86, 0x89,0x92,0x09,0x09,0x0b,0x05,0x06,0x07,0x05,0x06,0x07,0x06,0x06,0x07,0x06,0x06, 0x08,0x06,0x07,0x0a,0x07,0x08,0x0a,0x08,0x09,0x0a,0x09,0x0a,0x0c,0x0a,0x0a,0x0d, 0x0a,0x0a,0x0d,0x0b,0x0c,0x0e,0x39,0x3a,0x3c,0x10,0x11,0x13,0x0d,0x0e,0x10,0x0e, 0x0e,0x12,0x0e,0x0e,0x12,0x0f,0x11,0x14,0x10,0x12,0x15,0x1f,0x20,0x23,0x32,0x32, 0x36,0x19,0x1a,0x1f,0x1e,0x1e,0x25,0x22,0x22,0x2a,0x25,0x26,0x2e,0x27,0x28,0x30, 0x29,0x2a,0x32,0x2a,0x2b,0x34,0x2c,0x2d,0x36,0x2a,0x2b,0x33,0x2a,0x2c,0x34,0x2b, 0x2e,0x37,0x2e,0x31,0x3e,0x34,0x35,0x45,0x3a,0x39,0x4a,0x3c,0x3a,0x4b,0x3d,0x3d, 0x4e,0x49,0x49,0x59,0x59,0x59,0x67,0x60,0x60,0x6b,0x62,0x60,0x6d,0x60,0x5e,0x6d, 0x60,0x5c,0x6c,0x5f,0x5c,0x6c,0x5a,0x57,0x67,0x56,0x53,0x65,0x59,0x55,0x67,0x5b, 0x57,0x69,0x58,0x54,0x67,0x52,0x4d,0x61,0x53,0x4e,0x65,0x53,0x4c,0x63,0x53,0x4b, 0x62,0x4e,0x49,0x60,0x4c,0x48,0x60,0x4e,0x48,0x60,0x52,0x4a,0x61,0x55,0x4d,0x64, 0x56,0x4e,0x66,0x5e,0x54,0x6e,0x69,0x62,0x7e,0x60,0x59,0x77,0x61,0x5a,0x78,0x63, 0x5c,0x7e,0x64,0x5f,0x80,0x62,0x5e,0x7f,0x61,0x5d,0x80,0x60,0x5c,0x7f,0x60,0x5d, 0x80,0x60,0x5d,0x80,0x62,0x5e,0x81,0x62,0x5e,0x80,0x63,0x5f,0x81,0x64,0x5f,0x80, 0x65,0x5e,0x7f,0x63,0x5d,0x7d,0x61,0x5b,0x7c,0x65,0x5e,0x82,0x52,0x4f,0x6b,0x52, 0x4f,0x6b,0x51,0x4e,0x6b,0x51,0x4f,0x6a,0x51,0x4f,0x6b,0x53,0x50,0x6c,0x53,0x50, 0x6b,0x53,0x50,0x6b,0x52,0x4e,0x69,0x50,0x4e,0x68,0x4d,0x4b,0x67,0x4b,0x4a,0x64, 0x4a,0x4a,0x65,0x4c,0x50,0x6b,0x51,0x59,0x72,0x5d,0x64,0x7c,0x67,0x6f,0x83,0x6a, 0x71,0x82,0x67,0x6c,0x79,0x60,0x64,0x71,0x5a,0x5e,0x6e,0x4a,0x4f,0x61,0x47,0x47, 0x58,0x58,0x55,0x65,0x50,0x4a,0x5c,0x4a,0x43,0x54,0x71,0x6b,0x77,0x7e,0x7a,0x84, 0x59,0x54,0x61,0x3d,0x38,0x44,0x31,0x2b,0x39,0x30,0x2c,0x37,0x46,0x41,0x4d,0x5f, 0x5d,0x65,0x40,0x3d,0x45,0x4f,0x4c,0x51,0x52,0x50,0x53,0x41,0x3f,0x41,0x23,0x22, 0x25,0x0b,0x0a,0x0c,0x0a,0x08,0x0a,0x0a,0x0a,0x0c,0x0e,0x0c,0x0f,0x0f,0x0e,0x11, 0x10,0x0f,0x12,0x11,0x0f,0x13,0x12,0x10,0x14,0x12,0x12,0x16,0x14,0x13,0x17,0x14, 0x13,0x17,0x14,0x13,0x17,0x14,0x12,0x16,0x13,0x12,0x16,0x13,0x12,0x16,0x13,0x12, 0x16,0x14,0x13,0x17,0x15,0x14,0x19,0x16,0x14,0x18,0x16,0x15,0x19,0x16,0x15,0x1a, 0x18,0x15,0x1b,0x18,0x16,0x1b,0x18,0x16,0x1d,0x19,0x17,0x1d,0x1a,0x17,0x1e,0x1a, 0x18,0x1f,0x1a,0x17,0x1e,0x1a,0x18,0x1f,0x1a,0x18,0x1e,0x1c,0x19,0x1f,0x1b,0x19, 0x20,0x1a,0x18,0x1f,0x19,0x16,0x1d,0x17,0x16,0x1c,0x16,0x14,0x1a,0x13,0x12,0x18, 0x12,0x12,0x16,0x13,0x12,0x17,0x14,0x12,0x17,0x16,0x15,0x1a,0x21,0x1f,0x22,0x21, 0x1e,0x22,0x27,0x26,0x29,0x2f,0x2e,0x32,0x2b,0x2a,0x2e,0x26,0x25,0x28,0x1e,0x1e, 0x22,0x1b,0x1a,0x1e,0x1b,0x19,0x1e,0x1a,0x1a,0x1e,0x18,0x16,0x1c,0x17,0x15,0x1a, 0x17,0x16,0x1b,0x17,0x16,0x1c,0x17,0x16,0x1c,0x17,0x15,0x1a,0x15,0x13,0x19,0x12, 0x11,0x16,0x0f,0x0e,0x12,0x0e,0x0d,0x10,0x0e,0x0e,0x11,0x0f,0x0e,0x11,0x0f,0x0e, 0x11,0x0e,0x0d,0x0f,0x0c,0x0b,0x0e,0x0e,0x0d,0x0f,0x0f,0x0e,0x12,0x12,0x10,0x14, 0x12,0x11,0x14,0x10,0x0f,0x12,0x0b,0x0b,0x0d,0x08,0x08,0x0a,0x06,0x05,0x06,0x02, 0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7b,0x7b,0x7b, 0xf7,0xf7,0xf7,0xff,0xff,0xff,0xfd,0xfd,0xfd,0xd0,0xd0,0xd0,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xf6,0xf6,0xf6,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0xf8,0xf8,0x02,0x02,0x02,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcc,0xcc, 0xcc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xf7,0xf7, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x99,0x99,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0x99,0x99,0x99,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xbb, 0xbb,0xbb,0xff,0xff,0xff,0xff,0xff,0xff,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x99,0x99,0x99,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdd,0xdd, 0xdd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x55,0x55,0x55, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x0b,0x0c,0x0e,0x59,0x63,0x86,0x64,0x52,0x73,0x5f,0x47, 0x63,0x62,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77, 0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60, 0x53,0x77,0x60,0x53,0x77,0x53,0x48,0x67,0x30,0x29,0x3b,0x6e,0x6d,0x70,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7e,0x7d,0x80,0x2e,0x28,0x3b,0x4f,0x46,0x68, 0x5b,0x52,0x79,0x5a,0x52,0x79,0x62,0x4a,0x66,0x5c,0x4d,0x6e,0x35,0x3c,0x55,0x26, 0x27,0x28,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbb,0xbb,0xbb,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x78,0x78,0xfa,0xfa,0xfa,0xfd,0xfd,0xfd, 0xd6,0xd6,0xd6,0x00,0x00,0x00,0x7d,0x80,0x8a,0x69,0x73,0x96,0x55,0x60,0x89,0x8d, 0x98,0xb3,0xa3,0x97,0xa5,0x78,0x67,0x81,0x66,0x6f,0x89,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x96,0x9f,0xb9, 0x6b,0x76,0x99,0x74,0x7f,0xa0,0x7a,0x84,0xa4,0x70,0x68,0x89,0x42,0x32,0x3e,0x22, 0x18,0x1c,0x1a,0x12,0x15,0x94,0x91,0x92,0xf7,0xf7,0xf9,0xc2,0xc7,0xd7,0x96,0xa0, 0xb9,0x79,0x84,0xa5,0x64,0x71,0x96,0x5b,0x67,0x90,0x54,0x60,0x89,0x4b,0x55,0x7b, 0x41,0x42,0x62,0x4f,0x4f,0x77,0x4f,0x46,0x64,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x79,0x82,0x9e,0x62,0x6d,0x93,0x4e,0x4e,0x75, 0x5a,0x50,0x76,0x60,0x53,0x77,0x60,0x53,0x77,0x5e,0x53,0x79,0x5e,0x53,0x79,0x5a, 0x52,0x79,0x55,0x50,0x79,0x53,0x4f,0x7a,0x51,0x53,0x7f,0x6b,0x6f,0x8c,0x3f,0x30, 0x3a,0x5c,0x49,0x5b,0x18,0x16,0x1d,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02, 0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02, 0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x03,0x04,0x02,0x03,0x04, 0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x03,0x04,0x02, 0x03,0x04,0x02,0x03,0x04,0x02,0x03,0x04,0x02,0x03,0x04,0x02,0x03,0x04,0x02,0x03, 0x04,0x02,0x03,0x04,0x02,0x03,0x04,0x02,0x03,0x04,0x03,0x04,0x05,0x48,0x37,0x4d, 0x5a,0x44,0x5d,0x5a,0x43,0x5c,0x57,0x40,0x5b,0x59,0x41,0x5b,0x59,0x42,0x5c,0x58, 0x40,0x5b,0x2f,0x20,0x33,0x2c,0x1f,0x30,0x2d,0x20,0x32,0x2d,0x21,0x32,0x2d,0x20, 0x30,0x2d,0x21,0x32,0x34,0x2a,0x39,0x43,0x37,0x47,0x19,0x15,0x1a,0x30,0x32,0x3b, 0x31,0x34,0x3a,0x03,0x04,0x05,0x04,0x04,0x06,0x04,0x05,0x06,0x05,0x06,0x07,0x05, 0x06,0x07,0x06,0x06,0x07,0x06,0x06,0x08,0x06,0x07,0x09,0x07,0x08,0x0a,0x07,0x08, 0x0a,0x09,0x09,0x0b,0x19,0x19,0x1b,0x19,0x19,0x1b,0x1e,0x1f,0x22,0x24,0x25,0x27, 0x0b,0x0c,0x0e,0x0c,0x0d,0x0f,0x0d,0x0e,0x11,0x0e,0x0e,0x12,0x0f,0x10,0x13,0x13, 0x14,0x18,0x2e,0x2f,0x32,0x2c,0x2e,0x31,0x1b,0x1c,0x20,0x1b,0x1c,0x22,0x22,0x22, 0x2a,0x24,0x26,0x2d,0x26,0x28,0x30,0x2a,0x2c,0x34,0x33,0x34,0x3c,0x2c,0x2d,0x34, 0x2a,0x2b,0x32,0x29,0x2a,0x31,0x2a,0x2d,0x34,0x2c,0x2f,0x38,0x2f,0x31,0x3e,0x36, 0x36,0x46,0x3a,0x38,0x4b,0x41,0x41,0x53,0x51,0x51,0x61,0x5e,0x5d,0x6b,0x67,0x66, 0x73,0x69,0x65,0x74,0x6a,0x65,0x75,0x67,0x62,0x72,0x61,0x5c,0x6b,0x5a,0x55,0x65, 0x58,0x53,0x62,0x57,0x52,0x62,0x58,0x51,0x63,0x55,0x4e,0x5f,0x52,0x4b,0x5e,0x50, 0x49,0x5d,0x50,0x49,0x5d,0x4d,0x48,0x5c,0x47,0x44,0x58,0x45,0x42,0x56,0x4a,0x44, 0x5a,0x4f,0x48,0x5f,0x4f,0x49,0x5f,0x61,0x56,0x6f,0x6c,0x64,0x81,0x64,0x59,0x77, 0x66,0x59,0x76,0x68,0x5c,0x79,0x69,0x5c,0x7b,0x66,0x5c,0x7c,0x62,0x5b,0x7c,0x5f, 0x5b,0x7c,0x5f,0x5b,0x7d,0x5f,0x5b,0x7d,0x60,0x5b,0x7d,0x62,0x5c,0x7d,0x63,0x5c, 0x7c,0x63,0x5d,0x7c,0x63,0x5d,0x7c,0x60,0x59,0x7a,0x5f,0x58,0x77,0x63,0x5d,0x7e, 0x50,0x4e,0x68,0x4f,0x4e,0x6a,0x4d,0x4d,0x68,0x4d,0x4d,0x68,0x4e,0x4d,0x68,0x4e, 0x4d,0x69,0x4d,0x4c,0x67,0x4d,0x4b,0x66,0x4d,0x4a,0x65,0x4c,0x4a,0x64,0x4a,0x49, 0x63,0x47,0x46,0x61,0x48,0x4a,0x64,0x4a,0x52,0x6b,0x4f,0x56,0x6e,0x59,0x60,0x75, 0x64,0x6a,0x7b,0x66,0x6b,0x7a,0x66,0x6b,0x79,0x6a,0x6e,0x7a,0x4e,0x52,0x63,0x47, 0x46,0x58,0x6c,0x6a,0x77,0x7d,0x7a,0x85,0x44,0x3d,0x4e,0x40,0x39,0x4a,0x3d,0x36, 0x45,0x35,0x2f,0x3e,0x36,0x32,0x3f,0x2d,0x2a,0x37,0x28,0x25,0x30,0x23,0x20,0x2a, 0x1b,0x19,0x20,0x2d,0x2b,0x2f,0x12,0x10,0x13,0x22,0x20,0x22,0x3b,0x3a,0x3b,0x47, 0x47,0x47,0x3d,0x3c,0x3d,0x1b,0x1a,0x1b,0x0e,0x0e,0x0e,0x0e,0x0e,0x0f,0x05,0x05, 0x06,0x08,0x08,0x0a,0x0a,0x0a,0x0d,0x0c,0x0b,0x0e,0x0e,0x0d,0x10,0x10,0x0f,0x12, 0x12,0x11,0x15,0x12,0x12,0x16,0x13,0x12,0x16,0x12,0x12,0x16,0x12,0x11,0x15,0x12, 0x11,0x14,0x12,0x11,0x14,0x12,0x11,0x14,0x13,0x12,0x16,0x13,0x12,0x16,0x13,0x12, 0x16,0x14,0x12,0x17,0x14,0x12,0x17,0x14,0x12,0x17,0x14,0x12,0x17,0x15,0x13,0x18, 0x15,0x12,0x18,0x15,0x12,0x17,0x14,0x12,0x17,0x14,0x12,0x18,0x15,0x12,0x17,0x15, 0x13,0x18,0x15,0x12,0x18,0x15,0x12,0x18,0x14,0x12,0x17,0x12,0x10,0x15,0x11,0x0f, 0x13,0x0f,0x0e,0x12,0x0e,0x0c,0x10,0x0e,0x0d,0x10,0x10,0x0e,0x12,0x15,0x13,0x16, 0x22,0x20,0x24,0x19,0x16,0x1a,0x16,0x15,0x19,0x1c,0x1a,0x1e,0x16,0x15,0x19,0x13, 0x12,0x16,0x12,0x12,0x16,0x14,0x12,0x16,0x15,0x12,0x17,0x15,0x12,0x17,0x15,0x13, 0x18,0x15,0x13,0x17,0x15,0x13,0x17,0x14,0x12,0x17,0x13,0x12,0x16,0x12,0x11,0x15, 0x12,0x10,0x15,0x11,0x0f,0x13,0x10,0x0e,0x12,0x0e,0x0d,0x10,0x0c,0x0b,0x0e,0x0a, 0x0a,0x0c,0x0b,0x0a,0x0d,0x0a,0x0a,0x0c,0x08,0x07,0x09,0x08,0x08,0x0a,0x0b,0x0a, 0x0d,0x0e,0x0e,0x11,0x10,0x0e,0x12,0x0e,0x0e,0x11,0x0b,0x0a,0x0c,0x06,0x06,0x06, 0x02,0x02,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0x7f, 0x7f,0xf6,0xf6,0xf6,0xff,0xff,0xff,0xff,0xff,0xff,0xdb,0xdb,0xdb,0x08,0x08,0x08, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x76,0x76,0x76,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xd3,0xd3,0xd3, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x32, 0x32,0x32,0xfa,0xfa,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xf7,0xf7,0xf7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x99,0x99, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x99,0x99,0x99,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xbb,0xbb,0xbb,0xff,0xff,0xff,0xff,0xff,0xff,0xbb,0xbb,0xbb,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x99,0x99,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbb,0xbb,0xbb,0x22,0x22, 0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x35,0x3d,0x52, 0x5c,0x86,0x5f,0x47,0x63,0x63,0x4b,0x67,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53, 0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77, 0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x5d,0x50,0x73,0x47,0x3d,0x58,0x1e, 0x1a,0x26,0xde,0xde,0xde,0xff,0xff,0xff,0xff,0xff,0xff,0xee,0xee,0xee,0x28,0x26, 0x30,0x40,0x39,0x54,0x58,0x4f,0x74,0x5b,0x52,0x79,0x5e,0x51,0x75,0x4c,0x39,0x50, 0x25,0x21,0x31,0xac,0xad,0xae,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x22, 0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe8,0xe8,0xe8,0xfd,0xfd, 0xfd,0xf7,0xf7,0xf7,0x5d,0x5d,0x5d,0x00,0x00,0x00,0x00,0x00,0x00,0xa7,0xab,0xb7, 0x82,0x8c,0xab,0xa0,0xa8,0xc0,0x9f,0x93,0xa1,0x60,0x62,0x85,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xb6,0xbc,0xce,0x90,0x99,0xb5,0x74,0x7f,0xa0,0x65,0x51,0x65,0x2e,0x22,0x29, 0x23,0x19,0x1d,0x1e,0x15,0x18,0x17,0x0f,0x12,0x1f,0x19,0x1a,0xfa,0xfb,0xfb,0xc7, 0xcc,0xda,0x9b,0xa4,0xbc,0x82,0x8d,0xab,0x6e,0x7a,0x9d,0x63,0x6f,0x95,0x59,0x65, 0x8d,0x4f,0x5a,0x82,0x42,0x48,0x6a,0x42,0x43,0x68,0x58,0x4e,0x72,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6c,0x74,0x89,0x6b,0x76, 0x9a,0x4e,0x56,0x7e,0x55,0x4e,0x76,0x60,0x53,0x77,0x5e,0x53,0x79,0x5e,0x53,0x79, 0x5a,0x52,0x79,0x56,0x50,0x79,0x54,0x50,0x79,0x52,0x4f,0x7a,0x51,0x55,0x80,0x6d, 0x74,0x90,0x3d,0x2e,0x38,0x59,0x47,0x58,0x36,0x2f,0x3d,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02, 0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02, 0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03, 0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02, 0x02,0x03,0x02,0x03,0x04,0x02,0x03,0x04,0x02,0x02,0x03,0x02,0x03,0x04,0x02,0x03, 0x04,0x13,0x11,0x19,0x59,0x42,0x5b,0x5a,0x44,0x5d,0x57,0x3f,0x5b,0x58,0x40,0x5b, 0x5a,0x43,0x5d,0x58,0x40,0x5b,0x59,0x42,0x5c,0x36,0x27,0x3a,0x2b,0x1f,0x2f,0x2c, 0x20,0x30,0x2c,0x20,0x30,0x2a,0x1e,0x2e,0x2d,0x20,0x30,0x02,0x02,0x03,0x02,0x03, 0x04,0x03,0x03,0x04,0x03,0x04,0x05,0x03,0x04,0x05,0x03,0x04,0x05,0x04,0x04,0x06, 0x04,0x04,0x06,0x05,0x05,0x06,0x05,0x05,0x06,0x05,0x06,0x07,0x06,0x06,0x08,0x08, 0x09,0x0b,0x16,0x16,0x19,0x2b,0x2c,0x2d,0x26,0x27,0x28,0x28,0x28,0x2a,0x38,0x38, 0x3b,0x29,0x29,0x2c,0x0b,0x0c,0x0e,0x0b,0x0c,0x0e,0x0c,0x0d,0x0f,0x0e,0x0e,0x11, 0x0e,0x0f,0x12,0x0f,0x10,0x13,0x14,0x15,0x18,0x26,0x27,0x2b,0x38,0x39,0x3c,0x34, 0x36,0x39,0x33,0x33,0x39,0x33,0x33,0x39,0x3f,0x3f,0x45,0x50,0x51,0x57,0x5e,0x5f, 0x65,0x57,0x58,0x5d,0x50,0x51,0x56,0x45,0x45,0x4b,0x31,0x33,0x39,0x2a,0x2d,0x33, 0x2b,0x2e,0x36,0x2c,0x2e,0x3c,0x36,0x34,0x46,0x3d,0x3a,0x4d,0x42,0x43,0x55,0x51, 0x52,0x63,0x60,0x5e,0x6d,0x68,0x65,0x74,0x69,0x65,0x75,0x69,0x65,0x74,0x66,0x62, 0x71,0x61,0x5e,0x6d,0x5b,0x56,0x65,0x59,0x52,0x62,0x58,0x50,0x60,0x53,0x4d,0x5d, 0x51,0x4a,0x5c,0x50,0x49,0x5b,0x4f,0x49,0x5c,0x51,0x4a,0x5d,0x4c,0x47,0x5a,0x49, 0x46,0x58,0x48,0x42,0x57,0x48,0x42,0x56,0x4b,0x44,0x5a,0x5f,0x54,0x6d,0x6a,0x61, 0x7c,0x63,0x57,0x74,0x67,0x59,0x76,0x69,0x5b,0x76,0x68,0x57,0x71,0x68,0x58,0x73, 0x65,0x58,0x75,0x63,0x58,0x75,0x62,0x59,0x76,0x5f,0x58,0x76,0x5e,0x56,0x76,0x5e, 0x57,0x75,0x5e,0x56,0x74,0x5e,0x55,0x73,0x5e,0x55,0x73,0x5d,0x53,0x6f,0x5c,0x52, 0x6f,0x60,0x59,0x79,0x4d,0x48,0x61,0x48,0x47,0x61,0x47,0x46,0x60,0x46,0x45,0x5f, 0x47,0x46,0x5f,0x47,0x46,0x5f,0x47,0x46,0x60,0x48,0x48,0x62,0x49,0x48,0x63,0x49, 0x49,0x62,0x45,0x46,0x5e,0x40,0x44,0x5a,0x3e,0x44,0x59,0x46,0x4d,0x62,0x4f,0x56, 0x6a,0x56,0x5c,0x6f,0x5a,0x5f,0x6f,0x55,0x5a,0x69,0x56,0x5b,0x69,0x4a,0x4e,0x5e, 0x3a,0x39,0x4c,0x39,0x36,0x48,0x3b,0x36,0x48,0x45,0x3f,0x4e,0x3b,0x34,0x44,0x36, 0x2f,0x3e,0x2e,0x28,0x34,0x22,0x1f,0x29,0x1b,0x19,0x22,0x16,0x15,0x1b,0x12,0x0f, 0x14,0x0e,0x0c,0x0f,0x0b,0x0a,0x0d,0x09,0x08,0x0a,0x07,0x06,0x09,0x06,0x06,0x06, 0x05,0x04,0x05,0x04,0x03,0x04,0x06,0x06,0x07,0x0a,0x0a,0x0a,0x16,0x16,0x16,0x18, 0x18,0x18,0x02,0x02,0x02,0x03,0x03,0x04,0x05,0x05,0x06,0x07,0x07,0x09,0x09,0x09, 0x0a,0x0c,0x0b,0x0e,0x0d,0x0c,0x0e,0x0e,0x0e,0x11,0x10,0x0f,0x12,0x10,0x0f,0x12, 0x11,0x0f,0x13,0x12,0x10,0x13,0x12,0x0f,0x13,0x12,0x0f,0x13,0x11,0x0f,0x12,0x11, 0x0f,0x12,0x11,0x10,0x13,0x12,0x10,0x13,0x11,0x10,0x13,0x12,0x10,0x14,0x11,0x10, 0x14,0x13,0x11,0x16,0x14,0x12,0x16,0x12,0x10,0x15,0x12,0x10,0x13,0x11,0x0f,0x12, 0x11,0x0f,0x12,0x11,0x0f,0x12,0x11,0x0f,0x12,0x11,0x0f,0x13,0x11,0x10,0x13,0x12, 0x10,0x14,0x12,0x10,0x14,0x11,0x0f,0x13,0x0e,0x0e,0x11,0x0e,0x0d,0x11,0x10,0x0e, 0x12,0x12,0x11,0x14,0x16,0x14,0x18,0x12,0x10,0x14,0x0f,0x0e,0x12,0x0f,0x0e,0x11, 0x0f,0x0e,0x11,0x0f,0x0e,0x11,0x0f,0x0e,0x12,0x0f,0x0e,0x12,0x10,0x0e,0x12,0x10, 0x0f,0x12,0x10,0x0e,0x12,0x0e,0x0e,0x11,0x0e,0x0d,0x10,0x0e,0x0c,0x0f,0x0c,0x0a, 0x0e,0x0d,0x0b,0x0e,0x0d,0x0c,0x0f,0x0e,0x0c,0x0f,0x0c,0x0b,0x0e,0x0b,0x0a,0x0c, 0x09,0x08,0x0a,0x07,0x07,0x09,0x07,0x07,0x08,0x06,0x06,0x07,0x02,0x02,0x03,0x02, 0x02,0x02,0x03,0x03,0x04,0x06,0x06,0x06,0x08,0x07,0x09,0x08,0x08,0x0a,0x05,0x05, 0x06,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x69, 0x69,0x69,0xf5,0xf5,0xf5,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xd9,0xd9,0xd9,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0xd5,0xd5,0xd5,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xfd, 0xfd,0x86,0x86,0x86,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xbf,0xbf,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xf9,0xf9,0xf9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x99,0x99,0x99,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x99,0x99,0x99, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xbb,0xbb,0xbb,0xff,0xff,0xff,0xff,0xff,0xff, 0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x99,0x99,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbb, 0xbb,0xbb,0x11,0x11,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x55,0x5c,0x71,0x5a,0x52,0x79,0x5e,0x46,0x62,0x64,0x52,0x72,0x60, 0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53, 0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77, 0x55,0x4a,0x6a,0x34,0x2d,0x41,0x50,0x4e,0x53,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0x7d,0x7c,0x7e,0x2d,0x27,0x39,0x4e,0x45,0x66,0x5a,0x51,0x78,0x52,0x4b, 0x6f,0x3c,0x32,0x47,0x52,0x4e,0x53,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0x99,0x99,0x99,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x9e,0x9e,0x9e,0xfc, 0xfc,0xfc,0xfd,0xfd,0xfd,0xc7,0xc7,0xc7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xb5,0xb2,0xbb,0xc4,0xc8,0xd6,0xa1,0x96,0xa6,0x13,0x14,0x18, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0xf3,0xf4,0xf7,0x6c,0x76,0x9a,0x42,0x32,0x3e,0x29,0x1d, 0x23,0x22,0x18,0x1d,0x1b,0x13,0x16,0x19,0x11,0x14,0x15,0x0e,0x10,0x10,0x0a,0x0b, 0xa4,0xa2,0xa2,0xe5,0xe7,0xee,0xaa,0xb2,0xc7,0x8b,0x95,0xb2,0x7c,0x86,0xa7,0x6b, 0x76,0x9b,0x60,0x6d,0x93,0x56,0x63,0x8a,0x43,0x4b,0x6d,0x41,0x42,0x65,0x63,0x5d, 0x8c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5f, 0x65,0x77,0x73,0x7e,0xa0,0x53,0x5e,0x86,0x52,0x4f,0x79,0x5d,0x52,0x79,0x5e,0x53, 0x79,0x5c,0x52,0x79,0x56,0x50,0x79,0x54,0x50,0x79,0x52,0x4f,0x7a,0x52,0x50,0x7b, 0x52,0x5c,0x85,0x73,0x7c,0x99,0x39,0x2c,0x35,0x52,0x41,0x51,0x55,0x4a,0x5f,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03, 0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02, 0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02, 0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03, 0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02, 0x02,0x03,0x02,0x02,0x03,0x02,0x03,0x04,0x36,0x2b,0x3d,0x59,0x42,0x5d,0x58,0x40, 0x5c,0x56,0x3f,0x5a,0x59,0x42,0x5d,0x59,0x43,0x5e,0x59,0x42,0x5d,0x5a,0x43,0x5e, 0x3f,0x2e,0x41,0x2c,0x1e,0x2f,0x2b,0x20,0x2f,0x2a,0x1e,0x2e,0x27,0x1b,0x2a,0x2e, 0x21,0x32,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x03,0x04,0x03,0x03, 0x04,0x03,0x03,0x04,0x08,0x08,0x09,0x0b,0x0b,0x0c,0x06,0x06,0x07,0x0f,0x0f,0x10, 0x24,0x25,0x25,0x35,0x35,0x37,0x23,0x24,0x25,0x11,0x12,0x14,0x08,0x08,0x0b,0x07, 0x08,0x0a,0x08,0x09,0x0a,0x09,0x0a,0x0c,0x0a,0x0a,0x0d,0x0a,0x0b,0x0e,0x0c,0x0d, 0x0f,0x0c,0x0d,0x0f,0x0f,0x0f,0x12,0x0f,0x10,0x13,0x10,0x11,0x14,0x11,0x12,0x16, 0x14,0x16,0x19,0x1d,0x1f,0x22,0x26,0x27,0x2b,0x2a,0x2b,0x2f,0x38,0x39,0x3e,0x3f, 0x40,0x45,0x50,0x51,0x57,0x43,0x44,0x49,0x46,0x47,0x4d,0x54,0x55,0x5b,0x65,0x66, 0x6c,0x5b,0x5c,0x61,0x3d,0x40,0x44,0x29,0x2c,0x35,0x2a,0x2a,0x3a,0x39,0x37,0x48, 0x43,0x3f,0x53,0x47,0x44,0x5a,0x47,0x48,0x5e,0x51,0x51,0x66,0x5a,0x58,0x6c,0x5e, 0x5b,0x6e,0x5f,0x5b,0x6e,0x5f,0x5c,0x6c,0x5f,0x5a,0x6b,0x63,0x5d,0x6d,0x61,0x5a, 0x6b,0x5e,0x57,0x68,0x5a,0x52,0x64,0x58,0x50,0x63,0x58,0x51,0x64,0x56,0x51,0x64, 0x56,0x52,0x65,0x56,0x53,0x65,0x56,0x53,0x65,0x52,0x4f,0x63,0x59,0x55,0x69,0x69, 0x5f,0x77,0x6b,0x65,0x7f,0x5c,0x54,0x70,0x62,0x58,0x73,0x68,0x5a,0x77,0x68,0x59, 0x75,0x67,0x59,0x73,0x66,0x59,0x73,0x65,0x58,0x73,0x64,0x57,0x73,0x62,0x56,0x73, 0x62,0x57,0x75,0x67,0x59,0x77,0x68,0x5b,0x77,0x68,0x5a,0x76,0x68,0x59,0x76,0x64, 0x56,0x71,0x63,0x55,0x6f,0x68,0x5b,0x7a,0x51,0x47,0x5c,0x48,0x44,0x5a,0x44,0x42, 0x57,0x41,0x3f,0x56,0x3c,0x3b,0x50,0x36,0x38,0x4b,0x3b,0x41,0x54,0x46,0x4c,0x60, 0x46,0x4e,0x62,0x46,0x4c,0x61,0x42,0x47,0x5b,0x39,0x3e,0x50,0x36,0x3a,0x4a,0x3e, 0x43,0x53,0x4e,0x52,0x62,0x56,0x5a,0x67,0x53,0x57,0x62,0x45,0x49,0x57,0x32,0x36, 0x46,0x2e,0x2d,0x3d,0x2d,0x2a,0x38,0x30,0x2b,0x39,0x31,0x2b,0x37,0x2e,0x28,0x34, 0x27,0x22,0x2d,0x1f,0x1b,0x23,0x16,0x14,0x1a,0x0e,0x0e,0x12,0x0c,0x0c,0x11,0x0b, 0x0b,0x0f,0x0a,0x0a,0x0d,0x09,0x08,0x0b,0x08,0x07,0x0a,0x06,0x06,0x07,0x05,0x05, 0x06,0x04,0x04,0x05,0x03,0x03,0x04,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x12,0x12,0x12,0x1b,0x1b,0x1c,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02, 0x02,0x03,0x03,0x03,0x04,0x05,0x04,0x06,0x06,0x06,0x06,0x06,0x06,0x08,0x08,0x08, 0x0a,0x09,0x08,0x0a,0x0a,0x0a,0x0c,0x0b,0x0a,0x0d,0x0c,0x0a,0x0e,0x0c,0x0a,0x0e, 0x0a,0x0a,0x0b,0x09,0x08,0x0a,0x09,0x09,0x0a,0x09,0x09,0x0a,0x0a,0x0a,0x0b,0x0d, 0x0c,0x0f,0x0e,0x0c,0x10,0x10,0x0e,0x12,0x12,0x0f,0x14,0x11,0x0f,0x12,0x0f,0x0e, 0x12,0x0f,0x0e,0x11,0x0f,0x0e,0x11,0x0f,0x0e,0x11,0x0e,0x0e,0x11,0x0e,0x0d,0x11, 0x0f,0x0e,0x11,0x0f,0x0e,0x12,0x0f,0x0e,0x11,0x0e,0x0c,0x0f,0x0b,0x0a,0x0d,0x0a, 0x09,0x0b,0x08,0x07,0x09,0x08,0x07,0x09,0x08,0x07,0x09,0x08,0x07,0x09,0x08,0x07, 0x09,0x08,0x07,0x09,0x08,0x07,0x09,0x08,0x07,0x09,0x08,0x07,0x09,0x08,0x07,0x09, 0x08,0x07,0x09,0x07,0x06,0x09,0x06,0x06,0x07,0x05,0x05,0x06,0x05,0x04,0x05,0x04, 0x03,0x05,0x04,0x03,0x04,0x04,0x04,0x05,0x05,0x04,0x06,0x05,0x05,0x06,0x05,0x04, 0x05,0x03,0x03,0x04,0x03,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02, 0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x75,0x75,0x75,0xf5,0xf5,0xf5,0xff,0xff,0xff,0xff,0xff,0xff,0xd3,0xd3,0xd3,0x05, 0x05,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x19,0x19,0xf9,0xf9,0xf9,0xff,0xff,0xff,0xff, 0xff,0xff,0xf7,0xf7,0xf7,0x1a,0x1a,0x1a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x38,0x38,0x38,0xf9,0xf9,0xf9,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0xf8,0xf8,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x99,0x99,0x99,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0x99,0x99,0x99,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xbb,0xbb,0xbb,0xff,0xff, 0xff,0xff,0xff,0xff,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x99, 0x99,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdd,0xdd,0xdd,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xee,0xee,0xee,0x44,0x44,0x44,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0x0f,0x10,0x5b,0x65,0x88,0x64,0x50,0x6f, 0x5e,0x46,0x62,0x64,0x53,0x76,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60, 0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53, 0x77,0x60,0x53,0x77,0x5d,0x51,0x74,0x4a,0x40,0x5b,0x24,0x1f,0x2c,0xbd,0xbd,0xbd, 0xff,0xff,0xff,0xff,0xff,0xff,0xee,0xee,0xee,0x36,0x34,0x3c,0x3d,0x36,0x50,0x54, 0x4b,0x6f,0x47,0x40,0x5f,0x22,0x1f,0x2e,0xbd,0xbd,0xbd,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0x22,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x23,0x23, 0xf4,0xf4,0xf4,0xfd,0xfd,0xfd,0xf7,0xf7,0xf7,0x43,0x43,0x43,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0e,0x0b,0x0e,0x78,0x6d,0x7a,0x57,0x57, 0x5c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x61,0x63,0x85,0x42,0x32,0x3d,0x24, 0x19,0x1e,0x1e,0x15,0x18,0x1a,0x12,0x14,0x17,0x0f,0x11,0x16,0x0f,0x11,0x16,0x0e, 0x10,0x12,0x0b,0x0c,0x30,0x2c,0x2d,0xf6,0xf7,0xf9,0xb7,0xbe,0xcf,0x9a,0xa3,0xbc, 0x82,0x8c,0xab,0x73,0x7e,0xa1,0x65,0x71,0x96,0x5a,0x66,0x8d,0x44,0x4d,0x6f,0x44, 0x48,0x6d,0x65,0x5f,0x90,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x4d,0x51,0x5f,0x7c,0x87,0xa7,0x5c,0x67,0x8f,0x52,0x4f,0x7a,0x5c, 0x52,0x79,0x5c,0x52,0x79,0x5a,0x52,0x79,0x55,0x50,0x79,0x52,0x4f,0x7a,0x52,0x50, 0x7b,0x52,0x53,0x7e,0x53,0x5f,0x88,0x7c,0x84,0xa0,0x36,0x29,0x31,0x4f,0x3e,0x4d, 0x73,0x5e,0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02, 0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03, 0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x06,0x06,0x08,0x50, 0x3c,0x54,0x58,0x40,0x5b,0x56,0x40,0x5b,0x58,0x41,0x5b,0x59,0x43,0x5c,0x5a,0x44, 0x5d,0x5a,0x44,0x5d,0x59,0x43,0x5c,0x4c,0x38,0x4f,0x34,0x24,0x37,0x29,0x1e,0x2e, 0x26,0x1a,0x2a,0x28,0x1c,0x2c,0x2c,0x21,0x30,0x02,0x02,0x03,0x02,0x02,0x03,0x02, 0x02,0x03,0x02,0x03,0x04,0x07,0x08,0x09,0x20,0x21,0x22,0x32,0x32,0x33,0x33,0x33, 0x34,0x2a,0x2a,0x2c,0x14,0x15,0x16,0x05,0x06,0x07,0x06,0x06,0x08,0x06,0x06,0x08, 0x06,0x06,0x08,0x06,0x06,0x08,0x07,0x08,0x0a,0x08,0x09,0x0a,0x09,0x0a,0x0c,0x09, 0x0a,0x0b,0x0a,0x0a,0x0d,0x0b,0x0b,0x0e,0x0c,0x0d,0x0f,0x0d,0x0e,0x10,0x0f,0x10, 0x12,0x10,0x12,0x15,0x12,0x12,0x16,0x12,0x14,0x17,0x15,0x16,0x1a,0x16,0x17,0x1b, 0x16,0x18,0x1c,0x1a,0x1b,0x20,0x31,0x33,0x38,0x34,0x35,0x3b,0x26,0x27,0x2e,0x28, 0x2a,0x31,0x2e,0x2f,0x36,0x47,0x48,0x4f,0x4f,0x50,0x55,0x41,0x43,0x4b,0x3e,0x38, 0x46,0x3e,0x36,0x47,0x50,0x47,0x57,0x60,0x59,0x6a,0x4d,0x45,0x5a,0x4b,0x46,0x5c, 0x4c,0x47,0x5f,0x4e,0x48,0x61,0x4f,0x4a,0x62,0x4e,0x4c,0x64,0x50,0x4f,0x66,0x5e, 0x5c,0x70,0x64,0x60,0x74,0x65,0x61,0x74,0x62,0x5e,0x72,0x60,0x5c,0x6f,0x5e,0x5a, 0x6f,0x5e,0x5d,0x70,0x63,0x63,0x75,0x6b,0x68,0x7a,0x74,0x72,0x82,0x79,0x76,0x87, 0x72,0x6f,0x81,0x7c,0x76,0x8b,0x72,0x71,0x8b,0x62,0x60,0x7c,0x64,0x61,0x7e,0x5e, 0x5a,0x7a,0x5c,0x55,0x73,0x60,0x56,0x73,0x64,0x57,0x74,0x64,0x57,0x73,0x64,0x58, 0x73,0x64,0x58,0x73,0x66,0x59,0x73,0x68,0x58,0x72,0x68,0x58,0x71,0x6a,0x5a,0x76, 0x6a,0x5c,0x78,0x67,0x59,0x74,0x65,0x57,0x73,0x6d,0x5e,0x7d,0x54,0x48,0x5d,0x4c, 0x43,0x58,0x42,0x3f,0x55,0x3d,0x3b,0x51,0x36,0x36,0x49,0x32,0x37,0x47,0x3a,0x3e, 0x4e,0x44,0x49,0x57,0x47,0x4d,0x5c,0x48,0x4d,0x5c,0x42,0x47,0x55,0x35,0x39,0x42, 0x3d,0x3f,0x48,0x4d,0x51,0x5a,0x55,0x59,0x64,0x51,0x56,0x61,0x40,0x45,0x54,0x33, 0x33,0x46,0x32,0x2f,0x3f,0x30,0x2b,0x38,0x27,0x24,0x30,0x26,0x22,0x2d,0x26,0x22, 0x2b,0x22,0x1e,0x27,0x1e,0x1a,0x22,0x16,0x15,0x1b,0x0f,0x0e,0x13,0x0c,0x0c,0x10, 0x0a,0x0a,0x0e,0x09,0x09,0x0c,0x07,0x07,0x0a,0x06,0x06,0x08,0x06,0x06,0x07,0x05, 0x05,0x06,0x04,0x03,0x05,0x03,0x03,0x04,0x03,0x02,0x03,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x09,0x09,0x09,0x22,0x22,0x23,0x04,0x04,0x05,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x03,0x04,0x04,0x03, 0x05,0x04,0x03,0x04,0x03,0x03,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03, 0x04,0x03,0x04,0x07,0x06,0x08,0x09,0x07,0x0a,0x0a,0x09,0x0b,0x0c,0x0b,0x0e,0x0e, 0x0c,0x0f,0x0d,0x0c,0x0f,0x0d,0x0c,0x0e,0x0d,0x0b,0x0e,0x0c,0x0b,0x0e,0x0c,0x0a, 0x0e,0x0a,0x0a,0x0c,0x0a,0x0a,0x0b,0x0a,0x09,0x0a,0x09,0x08,0x0a,0x07,0x06,0x08, 0x05,0x04,0x06,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x75,0x75,0x75,0xf4,0xf4,0xf4,0xff,0xff,0xff,0xff,0xff,0xff,0xdd,0xdd,0xdd, 0x0e,0x0e,0x0e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x90,0x90,0x90,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xd6,0xd6,0xd6,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc3,0xc3,0xc3,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf4,0xf4,0xf4, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x99,0x99,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0x99,0x99,0x99,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xbb, 0xbb,0xbb,0xff,0xff,0xff,0xff,0xff,0xff,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x99,0x99,0x99,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x77,0x77, 0x77,0x55,0x55,0x55,0xee,0xee,0xee,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0x88,0x88,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3c,0x3e, 0x44,0x52,0x55,0x80,0x62,0x4a,0x66,0x62,0x4a,0x66,0x60,0x53,0x77,0x60,0x53,0x77, 0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60, 0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x58,0x4c,0x6d,0x3a,0x32, 0x48,0x34,0x32,0x39,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x9d,0x9c,0x9e, 0x29,0x24,0x35,0x44,0x3c,0x59,0x35,0x30,0x46,0x51,0x50,0x56,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0x7c,0x7d,0x7f,0x1e,0x20,0x25,0x00,0x00,0x00,0x00,0x00, 0x00,0xbe,0xbe,0xbe,0xfd,0xfd,0xfd,0xff,0xff,0xff,0xc4,0xc4,0xc4,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3e,0x31,0x3d, 0x30,0x23,0x2a,0x1c,0x13,0x16,0x18,0x10,0x12,0x16,0x0e,0x10,0x16,0x0f,0x11,0x16, 0x0e,0x11,0x14,0x0d,0x0f,0x12,0x0c,0x0d,0x0e,0x08,0x09,0xbb,0xba,0xba,0xc8,0xcc, 0xda,0x9d,0xa5,0xbe,0x86,0x91,0xaf,0x77,0x82,0xa4,0x69,0x75,0x9a,0x5c,0x69,0x90, 0x47,0x50,0x74,0x44,0x46,0x6d,0x5f,0x5e,0x8f,0x02,0x02,0x03,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x37,0x40,0x83,0x8d,0xab,0x64,0x71,0x95, 0x52,0x53,0x7e,0x58,0x50,0x79,0x5b,0x52,0x79,0x56,0x50,0x79,0x52,0x4f,0x7a,0x52, 0x4f,0x7a,0x52,0x53,0x7d,0x52,0x5a,0x83,0x56,0x62,0x8a,0x8c,0x94,0xaf,0x34,0x28, 0x30,0x4f,0x3d,0x4d,0x75,0x60,0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x03, 0x02,0x02,0x03,0x1d,0x1a,0x25,0x58,0x41,0x5b,0x56,0x40,0x5a,0x55,0x3f,0x59,0x5a, 0x44,0x5d,0x59,0x43,0x5c,0x5a,0x44,0x5e,0x59,0x43,0x5c,0x59,0x44,0x5d,0x5a,0x45, 0x5e,0x4e,0x3a,0x52,0x2f,0x23,0x34,0x27,0x1b,0x2c,0x34,0x26,0x38,0x34,0x28,0x38, 0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x03,0x04,0x1d,0x1e,0x1f,0x1a,0x1a,0x1b,0x21, 0x22,0x23,0x1a,0x1a,0x1c,0x03,0x03,0x05,0x03,0x04,0x05,0x04,0x04,0x05,0x05,0x05, 0x06,0x05,0x05,0x06,0x05,0x06,0x06,0x06,0x06,0x07,0x06,0x06,0x08,0x06,0x07,0x09, 0x07,0x08,0x0a,0x08,0x09,0x0b,0x09,0x0a,0x0b,0x0a,0x0a,0x0d,0x0b,0x0c,0x0e,0x0b, 0x0c,0x0e,0x0d,0x0e,0x10,0x0f,0x10,0x12,0x11,0x12,0x15,0x11,0x12,0x16,0x13,0x15, 0x18,0x15,0x16,0x1a,0x16,0x17,0x1b,0x17,0x18,0x1c,0x2d,0x2e,0x33,0x31,0x32,0x37, 0x22,0x22,0x29,0x26,0x27,0x2e,0x28,0x29,0x31,0x2a,0x2a,0x32,0x2c,0x2c,0x34,0x36, 0x38,0x3f,0x40,0x42,0x4d,0x45,0x45,0x52,0x41,0x3e,0x4e,0x5b,0x56,0x66,0x52,0x4b, 0x5e,0x4c,0x43,0x58,0x4f,0x46,0x5b,0x4f,0x47,0x5e,0x4f,0x48,0x5f,0x4c,0x47,0x5f, 0x48,0x46,0x5f,0x4a,0x48,0x60,0x4e,0x50,0x68,0x59,0x59,0x6f,0x5f,0x5f,0x74,0x63, 0x63,0x77,0x64,0x64,0x7a,0x6b,0x6c,0x80,0x75,0x76,0x88,0x8a,0x89,0x98,0x8f,0x8e, 0x9b,0x8c,0x8b,0x99,0x91,0x8e,0x9e,0x97,0x94,0xa5,0x88,0x88,0x9f,0x80,0x7d,0x94, 0x78,0x77,0x92,0x6c,0x6c,0x89,0x67,0x65,0x82,0x67,0x66,0x82,0x5a,0x59,0x77,0x59, 0x54,0x73,0x5b,0x55,0x73,0x5b,0x54,0x73,0x5e,0x55,0x73,0x64,0x58,0x73,0x65,0x56, 0x70,0x65,0x55,0x6f,0x67,0x56,0x6f,0x65,0x55,0x6f,0x65,0x58,0x72,0x6f,0x5f,0x81, 0x52,0x48,0x5f,0x49,0x44,0x5a,0x40,0x3f,0x56,0x3b,0x3a,0x4f,0x34,0x3a,0x4b,0x37, 0x3c,0x4c,0x37,0x3c,0x4a,0x37,0x3c,0x4a,0x35,0x39,0x46,0x33,0x37,0x44,0x32,0x35, 0x41,0x2e,0x31,0x3b,0x35,0x38,0x42,0x40,0x43,0x4e,0x40,0x44,0x50,0x37,0x3b,0x47, 0x2a,0x2e,0x3d,0x2e,0x2c,0x3b,0x2d,0x29,0x36,0x29,0x24,0x2f,0x22,0x1f,0x29,0x21, 0x1d,0x26,0x1f,0x1b,0x22,0x1c,0x19,0x20,0x16,0x14,0x1a,0x11,0x0f,0x14,0x0c,0x0c, 0x10,0x0a,0x0a,0x0d,0x08,0x08,0x0b,0x06,0x06,0x09,0x06,0x06,0x09,0x06,0x06,0x07, 0x05,0x05,0x06,0x04,0x04,0x06,0x03,0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x03,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x15,0x15,0x16,0x2c,0x2c, 0x2c,0x0d,0x0d,0x0d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x04, 0x05,0x04,0x05,0x06,0x05,0x06,0x06,0x06,0x07,0x06,0x06,0x06,0x06,0x05,0x06,0x05, 0x05,0x06,0x05,0x04,0x06,0x04,0x04,0x04,0x03,0x03,0x04,0x02,0x02,0x03,0x02,0x02, 0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x85,0x85,0x85,0xf7,0xf7,0xf7,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xd2,0xd2, 0xd2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xe0, 0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x85,0x85,0x85,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x54,0x54,0xfc,0xfc,0xfc,0xff, 0xff,0xff,0xff,0xff,0xff,0xfd,0xfd,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xf3,0xf3,0xf3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x99,0x99, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x99,0x99,0x99,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xbb,0xbb,0xbb,0xff,0xff,0xff,0xff,0xff,0xff,0xbb,0xbb,0xbb,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x99,0x99,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0x77,0x77,0x77,0x00,0x00,0x00,0x22,0x22,0x22,0xbb,0xbb,0xbb,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xcc,0xcc,0xcc,0x22,0x22,0x22,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x4a,0x52,0x6b,0x62,0x53,0x77,0x5f,0x47,0x63,0x64,0x4d, 0x6b,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77, 0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x5e, 0x51,0x75,0x4e,0x43,0x61,0x29,0x24,0x33,0x9d,0x9c,0x9e,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0x34,0x32,0x3a,0x2a,0x25,0x37,0x1e,0x1b,0x28,0xbd,0xbd,0xbd, 0xff,0xff,0xff,0xff,0xff,0xff,0xee,0xee,0xee,0x29,0x26,0x2e,0x3e,0x44,0x59,0x1b, 0x1c,0x1f,0x4e,0x4e,0x4e,0xfa,0xfa,0xfa,0xff,0xff,0xff,0xf9,0xf9,0xf9,0x3d,0x3d, 0x3d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x0d,0x0a,0x0c,0x2b,0x1f,0x25,0x19,0x10,0x13,0x16,0x0e,0x10,0x15,0x0e,0x10, 0x15,0x0e,0x10,0x15,0x0e,0x10,0x15,0x0d,0x0f,0x16,0x0e,0x10,0x11,0x0a,0x0b,0x4c, 0x48,0x49,0xdf,0xe2,0xea,0xa4,0xac,0xc2,0x8b,0x95,0xb2,0x77,0x83,0xa4,0x6a,0x75, 0x9a,0x5d,0x6a,0x91,0x4b,0x54,0x79,0x3f,0x46,0x67,0x5b,0x5c,0x88,0x1f,0x19,0x22, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1e,0x1f,0x24,0x8a,0x94, 0xb1,0x6d,0x79,0x9b,0x52,0x5d,0x87,0x54,0x50,0x79,0x5a,0x52,0x79,0x55,0x50,0x79, 0x52,0x4f,0x7a,0x52,0x50,0x7b,0x52,0x56,0x81,0x52,0x5d,0x87,0x5b,0x66,0x8d,0xab, 0xb2,0xc7,0x34,0x29,0x30,0x4b,0x3a,0x48,0x73,0x5e,0x75,0x04,0x04,0x05,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x41,0x32,0x45,0x58,0x41,0x5b, 0x55,0x3f,0x59,0x5b,0x44,0x5e,0x5b,0x44,0x5e,0x5b,0x44,0x5e,0x5b,0x44,0x5f,0x5a, 0x44,0x5e,0x5a,0x45,0x5e,0x59,0x44,0x5d,0x5c,0x46,0x5f,0x54,0x40,0x59,0x4c,0x38, 0x50,0x4f,0x3c,0x54,0x3e,0x31,0x43,0x02,0x02,0x03,0x05,0x05,0x06,0x28,0x28,0x29, 0x0b,0x0c,0x0d,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x03,0x03,0x05,0x03, 0x03,0x05,0x04,0x04,0x06,0x04,0x04,0x06,0x04,0x04,0x06,0x06,0x06,0x07,0x06,0x06, 0x07,0x06,0x06,0x08,0x06,0x07,0x09,0x08,0x09,0x0b,0x08,0x09,0x0a,0x09,0x0a,0x0b, 0x0a,0x0a,0x0c,0x0b,0x0c,0x0e,0x0c,0x0d,0x0f,0x0e,0x0e,0x11,0x0f,0x10,0x12,0x10, 0x12,0x15,0x12,0x13,0x17,0x13,0x15,0x18,0x15,0x16,0x1a,0x15,0x16,0x1a,0x27,0x29, 0x2d,0x31,0x33,0x36,0x1b,0x1d,0x22,0x21,0x22,0x29,0x26,0x26,0x2e,0x28,0x29,0x31, 0x2a,0x2b,0x33,0x2d,0x2e,0x36,0x2d,0x2f,0x37,0x37,0x39,0x41,0x33,0x37,0x44,0x36, 0x37,0x47,0x4f,0x4d,0x5e,0x44,0x42,0x55,0x42,0x3e,0x52,0x49,0x42,0x58,0x4b,0x45, 0x5b,0x4a,0x46,0x5d,0x46,0x44,0x5d,0x45,0x43,0x5c,0x47,0x45,0x5e,0x48,0x48,0x62, 0x4e,0x51,0x69,0x5f,0x62,0x77,0x6c,0x6e,0x81,0x74,0x76,0x89,0x88,0x88,0x99,0x91, 0x91,0x9f,0x97,0x96,0xa2,0x9a,0x99,0xa5,0xa5,0xa2,0xb0,0xab,0xa9,0xb9,0x99,0x99, 0xad,0x93,0x91,0xa6,0x92,0x91,0xa6,0x89,0x89,0x9f,0x81,0x81,0x97,0x7a,0x79,0x92, 0x6f,0x6d,0x87,0x6d,0x6d,0x87,0x69,0x67,0x83,0x60,0x5f,0x7c,0x59,0x56,0x75,0x59, 0x53,0x71,0x5f,0x54,0x6f,0x5e,0x53,0x6e,0x60,0x54,0x6f,0x5c,0x50,0x68,0x5f,0x51, 0x6b,0x6a,0x5c,0x7e,0x4a,0x42,0x56,0x46,0x42,0x59,0x42,0x41,0x58,0x40,0x3e,0x56, 0x37,0x38,0x4c,0x32,0x36,0x46,0x2e,0x32,0x40,0x2c,0x2f,0x3c,0x29,0x2c,0x38,0x27, 0x2a,0x37,0x26,0x2a,0x35,0x28,0x2c,0x37,0x2a,0x2e,0x39,0x2b,0x2f,0x3a,0x2c,0x31, 0x3e,0x2d,0x30,0x40,0x2b,0x2b,0x3a,0x29,0x28,0x36,0x22,0x20,0x2b,0x1e,0x1d,0x26, 0x1e,0x1a,0x23,0x1b,0x18,0x1f,0x19,0x16,0x1d,0x16,0x13,0x1a,0x11,0x10,0x16,0x0c, 0x0c,0x10,0x0a,0x0a,0x0d,0x09,0x09,0x0b,0x07,0x07,0x0a,0x06,0x06,0x09,0x06,0x06, 0x08,0x06,0x05,0x07,0x04,0x04,0x06,0x04,0x04,0x06,0x03,0x03,0x04,0x02,0x02,0x03, 0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00, 0x00,0x00,0x0b,0x0b,0x0c,0x21,0x21,0x21,0x10,0x10,0x10,0x00,0x00,0x00,0x0d,0x0d, 0x0d,0x16,0x16,0x16,0x15,0x15,0x16,0x12,0x12,0x13,0x06,0x06,0x07,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x86,0x86,0x86,0xf5,0xf5,0xf5,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xda, 0xda,0xda,0x06,0x06,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x32, 0x32,0x32,0xfc,0xfc,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xf9,0xf9,0xf9,0x19,0x19, 0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0xe5,0xe5,0xe5, 0xfd,0xfd,0xfd,0xff,0xff,0xff,0xfd,0xfd,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xf2,0xf2,0xf2,0x19,0x19,0x19,0x00,0x00,0x00,0x00,0x00, 0x00,0x99,0x99,0x99,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x99,0x99,0x99, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xbb,0xbb,0xbb,0xff,0xff,0xff,0xff,0xff,0xff, 0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x99,0x99,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0x77,0x77,0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x77,0x77,0x77,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0x55,0x55,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0x0f,0x11,0x4b,0x55,0x7b,0x64, 0x4f,0x6e,0x5c,0x44,0x5e,0x64,0x53,0x73,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53, 0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77, 0x60,0x53,0x77,0x60,0x53,0x77,0x5a,0x4e,0x70,0x3f,0x37,0x4e,0x27,0x25,0x2c,0xee, 0xee,0xee,0xff,0xff,0xff,0xff,0xff,0xff,0xad,0xac,0xad,0x12,0x10,0x17,0x6d,0x6c, 0x6f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7e,0x7d,0x80,0x2d,0x22,0x2f, 0x32,0x30,0x4a,0x27,0x2a,0x35,0xd4,0xd4,0xd4,0xff,0xff,0xff,0xff,0xff,0xff,0xbe, 0xbe,0xbe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2a,0x1f,0x25,0x17,0x0f,0x11,0x14,0x0d, 0x0f,0x13,0x0c,0x0e,0x14,0x0d,0x0f,0x15,0x0e,0x10,0x16,0x0e,0x10,0x16,0x0e,0x11, 0x13,0x0c,0x0e,0x0d,0x08,0x08,0xcc,0xcc,0xce,0xac,0xb4,0xc8,0x90,0x99,0xb4,0x7c, 0x88,0xa8,0x6c,0x77,0x9b,0x5d,0x6a,0x91,0x4f,0x5a,0x7f,0x3b,0x42,0x60,0x54,0x55, 0x80,0x38,0x30,0x43,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06, 0x06,0x08,0x8e,0x98,0xb2,0x76,0x81,0xa2,0x57,0x64,0x8b,0x52,0x4f,0x7b,0x55,0x50, 0x79,0x54,0x50,0x79,0x52,0x4f,0x7b,0x52,0x53,0x7e,0x52,0x5c,0x85,0x56,0x62,0x8a, 0x63,0x6e,0x93,0xcd,0xd1,0xde,0x3d,0x31,0x38,0x4a,0x3a,0x48,0x6f,0x5a,0x71,0x0c, 0x0d,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x00, 0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x03,0x0b,0x0a, 0x0f,0x5c,0x47,0x60,0x56,0x40,0x5a,0x56,0x3f,0x5a,0x59,0x41,0x5c,0x5b,0x44,0x5e, 0x5b,0x44,0x5e,0x5b,0x44,0x5f,0x5b,0x45,0x5f,0x5b,0x44,0x5f,0x5c,0x45,0x5f,0x5b, 0x44,0x5f,0x57,0x41,0x5b,0x4a,0x36,0x4d,0x57,0x43,0x5d,0x28,0x27,0x39,0x2a,0x2a, 0x2a,0x2a,0x2a,0x2a,0x2d,0x2d,0x2e,0x0d,0x0d,0x0e,0x02,0x02,0x03,0x02,0x02,0x03, 0x02,0x02,0x03,0x02,0x02,0x03,0x04,0x04,0x05,0x04,0x04,0x05,0x04,0x04,0x05,0x05, 0x05,0x06,0x05,0x06,0x06,0x06,0x06,0x07,0x06,0x06,0x07,0x06,0x06,0x08,0x07,0x08, 0x0a,0x09,0x09,0x0b,0x0a,0x0a,0x0c,0x0a,0x0b,0x0d,0x0a,0x0b,0x0e,0x0d,0x0e,0x10, 0x0e,0x0e,0x12,0x0f,0x11,0x13,0x11,0x12,0x15,0x12,0x12,0x16,0x12,0x14,0x17,0x13, 0x15,0x18,0x18,0x19,0x1d,0x2e,0x2f,0x33,0x17,0x18,0x1c,0x1e,0x1f,0x24,0x39,0x3a, 0x40,0x44,0x45,0x4a,0x3e,0x3e,0x45,0x40,0x41,0x49,0x41,0x42,0x4a,0x41,0x41,0x48, 0x2c,0x2e,0x36,0x2f,0x32,0x3a,0x3a,0x3c,0x49,0x54,0x56,0x63,0x38,0x3b,0x4b,0x36, 0x37,0x4a,0x3b,0x3b,0x50,0x3c,0x3c,0x52,0x3e,0x41,0x56,0x40,0x46,0x5b,0x42,0x48, 0x5e,0x48,0x4e,0x64,0x4e,0x54,0x6a,0x5a,0x60,0x75,0x6a,0x6f,0x82,0x71,0x75,0x88, 0x86,0x88,0x99,0x8b,0x8c,0x9a,0x90,0x90,0x9d,0x95,0x95,0xa2,0xa9,0xa5,0xb3,0xab, 0xaa,0xba,0x97,0x96,0xac,0x90,0x8e,0xa3,0x92,0x91,0xa6,0x90,0x8f,0xa4,0x8b,0x89, 0x9f,0x7b,0x7a,0x92,0x7b,0x7a,0x91,0x7f,0x7e,0x95,0x7c,0x7b,0x94,0x6d,0x6e,0x89, 0x63,0x64,0x82,0x55,0x55,0x76,0x53,0x4d,0x6b,0x56,0x4d,0x6a,0x59,0x4f,0x6b,0x55, 0x4a,0x65,0x58,0x4d,0x67,0x66,0x59,0x7a,0x42,0x3a,0x4d,0x3e,0x3a,0x4e,0x3b,0x3a, 0x4f,0x3b,0x3a,0x4f,0x35,0x34,0x48,0x2a,0x2e,0x3c,0x26,0x2a,0x36,0x26,0x2a,0x36, 0x27,0x2b,0x37,0x26,0x2a,0x36,0x26,0x2a,0x36,0x26,0x29,0x36,0x25,0x28,0x34,0x26, 0x29,0x36,0x2a,0x2d,0x3d,0x2f,0x2f,0x40,0x2c,0x2b,0x3b,0x24,0x23,0x30,0x1d,0x1c, 0x26,0x19,0x19,0x21,0x16,0x16,0x1e,0x14,0x14,0x1b,0x12,0x12,0x18,0x0f,0x0e,0x14, 0x0d,0x0d,0x11,0x0a,0x0a,0x0e,0x09,0x09,0x0b,0x08,0x08,0x0b,0x07,0x07,0x0a,0x06, 0x06,0x09,0x06,0x06,0x09,0x06,0x06,0x07,0x06,0x05,0x07,0x04,0x04,0x06,0x03,0x03, 0x05,0x03,0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x0a,0x0a,0x0a,0x2e,0x2e,0x2e,0x00, 0x00,0x00,0x0d,0x0d,0x0d,0x16,0x16,0x16,0x16,0x16,0x16,0x1c,0x1c,0x1c,0x0e,0x0e, 0x0f,0x30,0x30,0x30,0x12,0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x87,0x87,0x87,0xf9,0xf9,0xf9,0xff,0xff,0xff,0xfc,0xfc,0xfc, 0xd0,0xd0,0xd0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x9d,0x9d,0x9d,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xd2, 0xd2,0xd2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc3,0xc3, 0xc3,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xfd,0xfd,0xf3,0xf3,0xf3,0xfa,0xfa,0xfa, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf5,0xf5,0xf5,0x15,0x15,0x15,0x00, 0x00,0x00,0x00,0x00,0x00,0x99,0x99,0x99,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0x99,0x99,0x99,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xbb,0xbb,0xbb,0xff,0xff, 0xff,0xff,0xff,0xff,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x99, 0x99,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x77,0x77,0x77,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x44,0x44,0xdd,0xdd,0xdd,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaa,0xaa,0xaa,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x25,0x28,0x31,0x5d,0x52,0x79,0x60,0x48,0x65,0x5c,0x44,0x5e,0x64,0x53,0x76,0x60, 0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53, 0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x5f,0x52,0x76,0x51,0x46,0x65, 0x2e,0x28,0x39,0x7e,0x7d,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x47, 0x47,0x48,0xdd,0xdd,0xdd,0xff,0xff,0xff,0xff,0xff,0xff,0xde,0xde,0xde,0x1b,0x19, 0x25,0x38,0x30,0x46,0x2f,0x24,0x31,0x73,0x73,0x77,0xfc,0xfc,0xfc,0xff,0xff,0xff, 0xf5,0xf5,0xf5,0x21,0x21,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x29,0x1f,0x24,0x1b, 0x12,0x15,0x12,0x0b,0x0d,0x13,0x0c,0x0e,0x14,0x0c,0x0e,0x15,0x0d,0x0f,0x16,0x0f, 0x11,0x16,0x0f,0x11,0x16,0x0e,0x10,0x10,0x0a,0x0b,0x66,0x63,0x64,0xc6,0xca,0xd9, 0x95,0x9f,0xb9,0x82,0x8c,0xab,0x6b,0x76,0x9b,0x60,0x6c,0x93,0x51,0x5d,0x82,0x3b, 0x41,0x60,0x51,0x56,0x82,0x4f,0x46,0x64,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x7e,0x86,0x9c,0x7f,0x89,0xa9,0x5e,0x6b,0x91,0x52, 0x52,0x7d,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x52,0x7d,0x52,0x57,0x82,0x53,0x5f, 0x88,0x57,0x64,0x8b,0x66,0x72,0x97,0xd8,0xdc,0xe5,0x47,0x3c,0x42,0x49,0x39,0x46, 0x6d,0x58,0x6e,0x20,0x21,0x2c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x22,0x24,0x35,0x5e,0x47,0x63,0x54,0x3d,0x57,0x59,0x43, 0x5c,0x59,0x41,0x5c,0x5a,0x43,0x5d,0x5b,0x44,0x5f,0x5c,0x45,0x5f,0x5b,0x44,0x5f, 0x5c,0x45,0x5f,0x5c,0x45,0x5f,0x5d,0x46,0x61,0x54,0x3f,0x58,0x4c,0x37,0x4e,0x5c, 0x4b,0x66,0x24,0x28,0x35,0x03,0x03,0x03,0x10,0x10,0x10,0x0b,0x0b,0x0c,0x02,0x02, 0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x03,0x03,0x04,0x03,0x04,0x05, 0x03,0x04,0x05,0x04,0x04,0x05,0x03,0x04,0x05,0x04,0x04,0x06,0x05,0x06,0x06,0x06, 0x06,0x07,0x06,0x06,0x08,0x07,0x08,0x0a,0x09,0x09,0x0b,0x0a,0x0a,0x0c,0x0a,0x0b, 0x0d,0x0b,0x0c,0x0e,0x0d,0x0e,0x10,0x0e,0x0e,0x12,0x0f,0x10,0x12,0x0f,0x11,0x13, 0x10,0x12,0x15,0x12,0x12,0x16,0x12,0x14,0x17,0x13,0x14,0x18,0x15,0x16,0x1a,0x42, 0x42,0x45,0x26,0x27,0x2b,0x21,0x23,0x27,0x29,0x2a,0x32,0x3e,0x3f,0x47,0x40,0x41, 0x48,0x40,0x41,0x48,0x2c,0x2e,0x35,0x2d,0x2e,0x36,0x2f,0x31,0x39,0x3d,0x3f,0x48, 0x50,0x53,0x5b,0x40,0x44,0x4f,0x3e,0x42,0x4e,0x42,0x46,0x52,0x4b,0x4f,0x5b,0x4f, 0x53,0x5e,0x50,0x54,0x62,0x55,0x5a,0x69,0x57,0x5e,0x6f,0x5e,0x65,0x76,0x65,0x6b, 0x7e,0x67,0x6d,0x80,0x75,0x7a,0x8b,0x73,0x77,0x87,0x7a,0x7f,0x8d,0x84,0x87,0x95, 0x98,0x96,0xa7,0x99,0x9e,0xb1,0x88,0x89,0xa1,0x82,0x84,0x9a,0x82,0x84,0x9c,0x82, 0x83,0x9a,0x7b,0x7d,0x95,0x71,0x73,0x8c,0x76,0x78,0x91,0x80,0x83,0x9b,0x7b,0x7e, 0x97,0x72,0x75,0x90,0x6d,0x71,0x8e,0x5e,0x62,0x82,0x52,0x4e,0x6f,0x54,0x4b,0x68, 0x56,0x4c,0x68,0x51,0x47,0x61,0x54,0x4a,0x65,0x62,0x57,0x7a,0x3a,0x35,0x46,0x36, 0x34,0x46,0x32,0x32,0x43,0x31,0x30,0x42,0x30,0x32,0x43,0x2b,0x2e,0x3c,0x2c,0x30, 0x3b,0x2d,0x31,0x3d,0x2b,0x2f,0x3b,0x2c,0x2f,0x3c,0x2a,0x2e,0x3a,0x2b,0x2f,0x3b, 0x2a,0x2e,0x3a,0x26,0x29,0x35,0x25,0x29,0x36,0x28,0x28,0x36,0x23,0x23,0x30,0x1d, 0x1d,0x28,0x19,0x19,0x22,0x17,0x19,0x21,0x14,0x16,0x1d,0x12,0x13,0x1a,0x0e,0x0e, 0x14,0x0c,0x0c,0x11,0x0b,0x0b,0x0f,0x09,0x09,0x0c,0x09,0x09,0x0c,0x08,0x08,0x0b, 0x07,0x07,0x0a,0x07,0x06,0x0a,0x06,0x06,0x09,0x06,0x06,0x08,0x06,0x06,0x07,0x04, 0x04,0x06,0x04,0x04,0x06,0x03,0x03,0x04,0x03,0x03,0x04,0x02,0x02,0x03,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x05,0x05,0x05,0x16,0x16,0x16,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x93,0x93,0x93,0xf7,0xf7,0xf7,0xff,0xff,0xff,0xff,0xff, 0xff,0xcd,0xcd,0xcd,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe8,0xe8,0xe8,0xff,0xff,0xff,0xff,0xff,0xff, 0xfd,0xfd,0xfd,0x81,0x81,0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x87, 0x87,0x87,0xfa,0xfa,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0xfc,0xfc,0xb2,0xb2, 0xb2,0xfa,0xfa,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0x26,0x26,0x26,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x99,0x99,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0x99,0x99,0x99,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xbb, 0xbb,0xbb,0xff,0xff,0xff,0xff,0xff,0xff,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x99,0x99,0x99,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x77,0x77, 0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x11,0x11,0x11,0xaa,0xaa,0xaa,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdd, 0xdd,0xdd,0x33,0x33,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x3a,0x52,0x64,0x53,0x76,0x5e,0x46,0x62, 0x64,0x4f,0x6d,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60, 0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53, 0x77,0x5c,0x50,0x72,0x45,0x3c,0x56,0x1e,0x1a,0x25,0xde,0xde,0xde,0xff,0xff,0xff, 0xff,0xff,0xff,0xee,0xee,0xee,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x6f, 0x6e,0x72,0x2c,0x27,0x3a,0x33,0x2e,0x44,0x1c,0x17,0x21,0xe5,0xe4,0xe5,0xfd,0xfd, 0xfd,0xfd,0xfd,0xfd,0xb0,0xb0,0xb0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x1b,0x14,0x17,0x1c,0x13,0x16,0x12,0x0c,0x0d,0x12,0x0b,0x0c,0x14,0x0d,0x0f,0x16, 0x0f,0x11,0x18,0x10,0x12,0x16,0x0f,0x11,0x16,0x0f,0x11,0x14,0x0d,0x0f,0x13,0x0d, 0x0e,0xcf,0xd1,0xd7,0xa1,0xa9,0xc1,0x80,0x8a,0xaa,0x6f,0x7b,0x9f,0x63,0x6f,0x95, 0x54,0x61,0x88,0x3d,0x46,0x65,0x4b,0x50,0x78,0x5e,0x57,0x81,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x67,0x6d,0x7d,0x85,0x90,0xae, 0x6a,0x75,0x99,0x53,0x5e,0x87,0x52,0x4f,0x7a,0x52,0x4f,0x7b,0x52,0x53,0x7e,0x52, 0x5d,0x87,0x56,0x62,0x8a,0x5b,0x66,0x8d,0x67,0x74,0x98,0xdd,0xe0,0xe8,0x50,0x45, 0x4b,0x49,0x38,0x45,0x6a,0x55,0x6a,0x37,0x38,0x4c,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x04,0x48,0x3f,0x5d,0x5a, 0x44,0x5e,0x57,0x40,0x5b,0x59,0x41,0x5c,0x59,0x41,0x5c,0x5a,0x43,0x5d,0x5a,0x43, 0x5d,0x5b,0x44,0x5e,0x5b,0x44,0x5e,0x5c,0x45,0x5f,0x5c,0x45,0x5f,0x5d,0x46,0x61, 0x52,0x3c,0x56,0x4f,0x3b,0x53,0x57,0x48,0x65,0x15,0x18,0x20,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x03,0x03, 0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x04,0x05,0x03,0x04,0x05, 0x04,0x04,0x06,0x05,0x06,0x06,0x06,0x06,0x07,0x06,0x07,0x09,0x08,0x08,0x0a,0x08, 0x09,0x0a,0x0a,0x0a,0x0c,0x0a,0x0b,0x0d,0x0b,0x0c,0x0e,0x0b,0x0c,0x0e,0x0d,0x0e, 0x10,0x0e,0x0f,0x12,0x0f,0x10,0x12,0x10,0x11,0x14,0x11,0x12,0x15,0x11,0x12,0x16, 0x12,0x13,0x17,0x12,0x13,0x17,0x14,0x15,0x18,0x16,0x16,0x1a,0x1a,0x1b,0x20,0x22, 0x22,0x28,0x26,0x27,0x2e,0x2a,0x2a,0x31,0x29,0x2a,0x30,0x2a,0x2b,0x32,0x2d,0x2e, 0x35,0x2f,0x30,0x38,0x40,0x42,0x49,0x56,0x57,0x5f,0x53,0x55,0x5d,0x58,0x5b,0x62, 0x6d,0x70,0x77,0x53,0x56,0x5e,0x51,0x54,0x5d,0x52,0x55,0x5f,0x53,0x58,0x66,0x56, 0x5c,0x6d,0x56,0x5c,0x6e,0x56,0x5d,0x6f,0x5a,0x60,0x72,0x5d,0x62,0x74,0x5e,0x63, 0x75,0x6a,0x6d,0x80,0x78,0x79,0x8d,0x76,0x7e,0x99,0x6a,0x6f,0x89,0x68,0x6d,0x88, 0x6a,0x6f,0x8c,0x6a,0x6f,0x8c,0x69,0x6e,0x8a,0x66,0x6b,0x89,0x6d,0x72,0x8f,0x79, 0x7e,0x98,0x70,0x74,0x91,0x6d,0x72,0x8f,0x6b,0x70,0x8d,0x5d,0x62,0x81,0x53,0x52, 0x73,0x52,0x4f,0x70,0x53,0x4e,0x6d,0x4f,0x48,0x65,0x4e,0x48,0x66,0x58,0x52,0x77, 0x2a,0x2a,0x39,0x2a,0x2a,0x39,0x2b,0x2c,0x3c,0x2b,0x2c,0x3c,0x2a,0x2e,0x3c,0x2f, 0x32,0x3d,0x3a,0x3e,0x47,0x41,0x44,0x4e,0x40,0x43,0x4e,0x3f,0x42,0x4c,0x3c,0x3f, 0x4a,0x3c,0x40,0x4a,0x3a,0x3d,0x48,0x2f,0x33,0x3d,0x24,0x27,0x32,0x20,0x22,0x2d, 0x1c,0x1e,0x28,0x1b,0x1e,0x26,0x19,0x1b,0x24,0x18,0x1a,0x22,0x15,0x16,0x1e,0x10, 0x12,0x17,0x0e,0x0f,0x15,0x0c,0x0d,0x11,0x0b,0x0b,0x0f,0x0a,0x0a,0x0e,0x09,0x0a, 0x0d,0x09,0x09,0x0b,0x08,0x08,0x0b,0x07,0x07,0x0a,0x07,0x06,0x0a,0x06,0x06,0x09, 0x06,0x06,0x09,0x05,0x05,0x06,0x05,0x05,0x06,0x03,0x03,0x05,0x03,0x03,0x04,0x03, 0x03,0x04,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x9e,0x9e,0x9e,0xf8,0xf8,0xf8,0xff,0xff,0xff,0xfd, 0xfd,0xfd,0xcf,0xcf,0xcf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3e,0x3e,0x3e,0xfa,0xfa,0xfa,0xff,0xff, 0xff,0xff,0xff,0xff,0xf7,0xf7,0xf7,0x0b,0x0b,0x0b,0x00,0x00,0x00,0x00,0x00,0x00, 0x38,0x38,0x38,0xf3,0xf3,0xf3,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc5, 0xc5,0xc5,0x2a,0x2a,0x2a,0xf2,0xf2,0xf2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xfa,0xfa,0xfa,0x22,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x99,0x99, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x99,0x99,0x99,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xbb,0xbb,0xbb,0xff,0xff,0xff,0xff,0xff,0xff,0xbb,0xbb,0xbb,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x99,0x99,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0x77,0x77,0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x77,0x77,0x77,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x08,0x09,0x46,0x49, 0x6e,0x64,0x4f,0x6d,0x5e,0x46,0x62,0x64,0x53,0x75,0x60,0x53,0x77,0x60,0x53,0x77, 0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60, 0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x55,0x49,0x69,0x34,0x2d,0x40,0x70,0x6e, 0x73,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xcd,0xcd,0xce,0x1f,0x1b,0x28,0x35,0x2f,0x45,0x27,0x22,0x33,0x99,0x98,0x9a,0xfc, 0xfc,0xfc,0xff,0xff,0xff,0xf3,0xf3,0xf3,0x39,0x3a,0x3e,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x16,0x1a,0x14,0x0d,0x0e,0x12,0x0c,0x0d, 0x14,0x0d,0x0f,0x16,0x0f,0x11,0x16,0x0f,0x11,0x16,0x0e,0x10,0x16,0x0e,0x10,0x17, 0x0f,0x12,0x16,0x0f,0x11,0x80,0x7c,0x7d,0xb4,0xbb,0xce,0x84,0x90,0xad,0x73,0x7e, 0xa1,0x64,0x71,0x96,0x5b,0x67,0x90,0x40,0x49,0x68,0x47,0x4e,0x72,0x67,0x62,0x95, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x4a, 0x56,0x90,0x99,0xb4,0x75,0x7f,0xa1,0x58,0x64,0x8c,0x52,0x54,0x7e,0x52,0x53,0x7d, 0x52,0x55,0x80,0x53,0x5e,0x88,0x58,0x65,0x8c,0x5d,0x69,0x90,0x6b,0x76,0x9a,0xdd, 0xdf,0xe8,0x54,0x4b,0x50,0x48,0x37,0x44,0x67,0x52,0x67,0x4d,0x4d,0x68,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x00,0x00,0x00, 0x0d,0x10,0x15,0x5e,0x48,0x63,0x54,0x3e,0x57,0x5a,0x43,0x5d,0x59,0x41,0x5c,0x5a, 0x43,0x5d,0x59,0x41,0x5c,0x5a,0x43,0x5d,0x5a,0x43,0x5d,0x5b,0x44,0x5e,0x5b,0x44, 0x5e,0x5c,0x45,0x5f,0x5a,0x44,0x5e,0x4c,0x38,0x4f,0x53,0x3d,0x56,0x4e,0x43,0x61, 0x14,0x15,0x19,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x03,0x02, 0x02,0x03,0x02,0x02,0x03,0x02,0x03,0x04,0x02,0x03,0x04,0x03,0x03,0x04,0x03,0x04, 0x05,0x03,0x04,0x05,0x04,0x04,0x06,0x05,0x05,0x06,0x05,0x06,0x06,0x06,0x06,0x08, 0x07,0x08,0x0a,0x07,0x08,0x0a,0x08,0x09,0x0a,0x09,0x0a,0x0b,0x0a,0x0a,0x0c,0x0a, 0x0b,0x0e,0x0b,0x0c,0x0e,0x0d,0x0e,0x10,0x0d,0x0e,0x10,0x0e,0x0f,0x12,0x0e,0x0f, 0x12,0x10,0x11,0x14,0x10,0x11,0x14,0x11,0x12,0x15,0x12,0x12,0x16,0x12,0x13,0x16, 0x16,0x18,0x1b,0x1a,0x1c,0x21,0x21,0x22,0x27,0x26,0x26,0x2d,0x26,0x27,0x2e,0x28, 0x29,0x2f,0x29,0x2a,0x31,0x30,0x31,0x39,0x39,0x3a,0x43,0x41,0x43,0x4c,0x50,0x52, 0x5a,0x4f,0x51,0x5a,0x46,0x49,0x51,0x46,0x4a,0x52,0x4a,0x4d,0x56,0x49,0x4c,0x57, 0x49,0x4e,0x5a,0x46,0x4a,0x59,0x47,0x4c,0x5b,0x4a,0x50,0x60,0x4d,0x52,0x62,0x4e, 0x53,0x63,0x4d,0x52,0x63,0x5f,0x61,0x75,0x6d,0x6e,0x84,0x66,0x6e,0x8a,0x5c,0x60, 0x7b,0x5e,0x62,0x7e,0x61,0x65,0x81,0x61,0x66,0x83,0x64,0x69,0x87,0x60,0x66,0x87, 0x62,0x68,0x88,0x64,0x6b,0x8b,0x60,0x66,0x87,0x5e,0x64,0x85,0x5c,0x62,0x82,0x57, 0x5a,0x7b,0x56,0x59,0x7a,0x54,0x58,0x79,0x53,0x56,0x75,0x4e,0x50,0x6f,0x4f,0x51, 0x71,0x59,0x5a,0x7e,0x2c,0x2f,0x3a,0x26,0x29,0x31,0x22,0x25,0x2e,0x26,0x2a,0x32, 0x2d,0x30,0x37,0x3d,0x3f,0x46,0x50,0x52,0x58,0x61,0x62,0x66,0x6a,0x6b,0x6e,0x62, 0x64,0x69,0x6e,0x6f,0x74,0x79,0x7b,0x7f,0x66,0x6a,0x70,0x42,0x46,0x4e,0x2a,0x2e, 0x39,0x21,0x25,0x2f,0x20,0x23,0x2d,0x1f,0x22,0x2c,0x1c,0x1e,0x27,0x1a,0x1c,0x25, 0x16,0x19,0x1f,0x12,0x14,0x1a,0x0f,0x10,0x16,0x0e,0x0e,0x13,0x0c,0x0c,0x10,0x0a, 0x0b,0x0f,0x0a,0x0a,0x0e,0x09,0x0a,0x0d,0x09,0x09,0x0c,0x09,0x09,0x0b,0x08,0x08, 0x0b,0x07,0x07,0x0a,0x07,0x07,0x0a,0x06,0x06,0x07,0x06,0x05,0x07,0x04,0x04,0x06, 0x03,0x03,0x05,0x03,0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xa5,0xa5,0xa5,0xfa,0xfa,0xfa,0xff,0xff,0xff, 0xfc,0xfc,0xfc,0xc4,0xc4,0xc4,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xaf,0xaf,0xaf,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xd0,0xd0,0xd0,0x00,0x00,0x00,0x00,0x00, 0x00,0x05,0x05,0x05,0xe2,0xe2,0xe2,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xfd,0xfd, 0xec,0xec,0xec,0x0f,0x0f,0x0f,0x00,0x00,0x00,0xf4,0xf4,0xf4,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xf8,0xf8,0xf8,0x1f,0x1f,0x1f,0x00,0x00,0x00,0x00,0x00, 0x00,0x99,0x99,0x99,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x99,0x99,0x99, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xbb,0xbb,0xbb,0xff,0xff,0xff,0xff,0xff,0xff, 0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x99,0x99,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0x77,0x77,0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x33,0x33,0x33,0xcc,0xcc,0xcc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xbb,0xbb,0xbb,0x22,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x1c,0x1e,0x24,0x51,0x4e,0x7a,0x62,0x4a,0x66,0x5e,0x46,0x62,0x64,0x53, 0x76,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77, 0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x5d,0x51,0x74,0x4a, 0x40,0x5b,0x24,0x1f,0x2c,0xbd,0xbd,0xbd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0x50,0x4f,0x54,0x2e,0x29,0x3b,0x31,0x2b,0x3f,0x21,0x1f,0x28, 0xef,0xef,0xef,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xa8,0xa6,0xa8,0x23,0x25,0x38,0x45, 0x4a,0x58,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x24,0x19,0x1e,0x15,0x0e, 0x10,0x13,0x0c,0x0e,0x13,0x0c,0x0e,0x15,0x0e,0x10,0x15,0x0e,0x10,0x16,0x0f,0x11, 0x18,0x10,0x13,0x1c,0x13,0x16,0x1f,0x15,0x19,0x28,0x1f,0x22,0xde,0xdf,0xe5,0x94, 0x9d,0xb8,0x76,0x82,0xa3,0x67,0x73,0x99,0x5c,0x67,0x90,0x46,0x4f,0x73,0x43,0x49, 0x6c,0x5f,0x62,0x94,0x11,0x10,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x26,0x29,0x2e,0x98,0xa1,0xba,0x7e,0x89,0xa9,0x60,0x6c,0x92,0x52,0x5d, 0x85,0x52,0x55,0x7f,0x52,0x5d,0x85,0x55,0x60,0x89,0x5b,0x66,0x8d,0x62,0x6d,0x93, 0x6e,0x7a,0x9c,0xde,0xe1,0xe9,0x5e,0x56,0x59,0x45,0x35,0x41,0x64,0x50,0x64,0x64, 0x62,0x85,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x27,0x27,0x39,0x5b,0x44,0x5f,0x53,0x3d,0x56, 0x57,0x41,0x5b,0x59,0x41,0x5c,0x59,0x41,0x5c,0x5a,0x43,0x5d,0x5b,0x44,0x5e,0x5a, 0x43,0x5d,0x5b,0x44,0x5e,0x5c,0x45,0x5f,0x5d,0x46,0x61,0x59,0x43,0x5d,0x4b,0x36, 0x4e,0x4f,0x3b,0x54,0x3f,0x3d,0x61,0x11,0x11,0x11,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x03,0x02, 0x02,0x03,0x02,0x02,0x03,0x03,0x03,0x04,0x03,0x04,0x05,0x04,0x04,0x06,0x04,0x04, 0x06,0x05,0x05,0x06,0x06,0x06,0x07,0x06,0x07,0x08,0x07,0x07,0x09,0x07,0x08,0x0a, 0x09,0x09,0x0a,0x0a,0x0a,0x0c,0x0a,0x0b,0x0d,0x0b,0x0c,0x0e,0x0b,0x0c,0x0e,0x0d, 0x0e,0x10,0x0c,0x0c,0x0e,0x0d,0x0e,0x10,0x0d,0x0e,0x11,0x0f,0x10,0x12,0x0f,0x11, 0x13,0x10,0x11,0x14,0x12,0x13,0x16,0x16,0x16,0x1a,0x1a,0x1b,0x1f,0x1e,0x1e,0x24, 0x1f,0x20,0x26,0x23,0x23,0x2a,0x26,0x27,0x2e,0x2a,0x2c,0x33,0x32,0x33,0x3c,0x36, 0x38,0x42,0x3a,0x3d,0x49,0x40,0x42,0x4c,0x46,0x47,0x50,0x4c,0x4e,0x56,0x49,0x4a, 0x53,0x42,0x44,0x4d,0x40,0x43,0x4e,0x3e,0x41,0x4c,0x3e,0x42,0x4d,0x3f,0x43,0x4f, 0x3f,0x44,0x50,0x40,0x43,0x51,0x3f,0x43,0x51,0x5b,0x5a,0x6d,0x71,0x72,0x86,0x5a, 0x61,0x80,0x51,0x55,0x71,0x56,0x5a,0x77,0x58,0x5c,0x78,0x5a,0x5d,0x79,0x5c,0x5f, 0x7c,0x5c,0x60,0x7e,0x5c,0x61,0x81,0x5e,0x63,0x84,0x5d,0x63,0x84,0x5e,0x63,0x84, 0x5e,0x64,0x85,0x60,0x65,0x84,0x61,0x66,0x84,0x61,0x65,0x82,0x5e,0x61,0x7e,0x59, 0x5c,0x78,0x5b,0x5e,0x7a,0x61,0x62,0x80,0x35,0x38,0x41,0x2d,0x2f,0x36,0x2a,0x2c, 0x32,0x30,0x32,0x36,0x42,0x43,0x46,0x59,0x5a,0x5d,0x6f,0x70,0x72,0x81,0x81,0x82, 0x8e,0x8e,0x8e,0x8e,0x8e,0x8e,0x9c,0x9c,0x9d,0x96,0x97,0x98,0x84,0x86,0x89,0x57, 0x59,0x60,0x34,0x37,0x41,0x2a,0x2e,0x38,0x27,0x2a,0x34,0x23,0x27,0x30,0x24,0x27, 0x30,0x1f,0x22,0x2a,0x1a,0x1c,0x24,0x14,0x16,0x1d,0x10,0x12,0x17,0x0e,0x0f,0x14, 0x0c,0x0c,0x10,0x0a,0x0b,0x0e,0x0b,0x0c,0x10,0x0a,0x0b,0x0e,0x0a,0x0a,0x0e,0x0a, 0x0a,0x0e,0x09,0x0a,0x0d,0x09,0x09,0x0c,0x07,0x07,0x0a,0x06,0x06,0x09,0x06,0x06, 0x08,0x05,0x05,0x06,0x04,0x04,0x06,0x03,0x03,0x05,0x02,0x02,0x03,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xbc,0xbc,0xbc,0xfc,0xfc,0xfc,0xfd,0xfd, 0xfd,0xfd,0xfd,0xfd,0xce,0xce,0xce,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xeb,0xeb,0xeb,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xfd,0xfd,0x73,0x73,0x73,0x00, 0x00,0x00,0x00,0x00,0x00,0xcc,0xcc,0xcc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xf7,0xf7,0xf7,0x50,0x50,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0xfa,0xfa, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf2,0xf2,0xf2,0x0d,0x0d,0x0d,0x00, 0x00,0x00,0x00,0x00,0x00,0x99,0x99,0x99,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0x99,0x99,0x99,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xbb,0xbb,0xbb,0xff,0xff, 0xff,0xff,0xff,0xff,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x99, 0x99,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x77,0x77,0x77,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x99,0x99,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xee,0xee,0xee,0x55,0x55,0x55,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x37,0x3c,0x4d,0x5a,0x52,0x79,0x60, 0x48,0x64,0x60,0x48,0x65,0x64,0x53,0x76,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53, 0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77, 0x60,0x53,0x77,0x54,0x49,0x68,0x30,0x29,0x3b,0x5d,0x5c,0x5f,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xbd,0xbd,0xbd,0x21,0x1d,0x2b,0x35,0x2f,0x44,0x22,0x1e, 0x2c,0xb6,0xb6,0xb7,0xfd,0xfd,0xfd,0xff,0xff,0xff,0xef,0xef,0xef,0x19,0x14,0x1c, 0x40,0x31,0x44,0x4c,0x54,0x7b,0x4a,0x4f,0x5e,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x29, 0x1e,0x25,0x1a,0x12,0x15,0x15,0x0d,0x0f,0x13,0x0c,0x0e,0x13,0x0c,0x0e,0x14,0x0d, 0x0f,0x17,0x0f,0x11,0x1b,0x13,0x16,0x23,0x18,0x1d,0x2b,0x1f,0x25,0x28,0x1c,0x22, 0x9d,0x99,0x9a,0xb9,0xc0,0xd1,0x80,0x8b,0xaa,0x69,0x74,0x99,0x5e,0x6b,0x92,0x4f, 0x5a,0x7e,0x40,0x48,0x69,0x56,0x5a,0x87,0x32,0x2e,0x3f,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x06,0x07,0x96,0x9e,0xb7,0x88,0x92,0xb0,0x6a, 0x75,0x9a,0x55,0x60,0x89,0x52,0x5d,0x87,0x53,0x5e,0x87,0x58,0x64,0x8c,0x60,0x6c, 0x92,0x67,0x73,0x98,0x75,0x80,0xa2,0xe4,0xe6,0xed,0x66,0x5e,0x62,0x45,0x34,0x40, 0x63,0x4f,0x63,0x68,0x66,0x8a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x04,0x4b,0x41, 0x5d,0x53,0x3e,0x57,0x53,0x3d,0x55,0x5a,0x43,0x5d,0x59,0x41,0x5c,0x5a,0x43,0x5d, 0x5a,0x43,0x5d,0x5b,0x44,0x5e,0x5a,0x43,0x5d,0x5b,0x44,0x5f,0x5c,0x45,0x60,0x5c, 0x45,0x5f,0x56,0x3f,0x5b,0x4c,0x38,0x50,0x4f,0x3c,0x55,0x3f,0x49,0x67,0x0b,0x0b, 0x0b,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x03,0x04,0x03,0x03,0x04,0x03, 0x04,0x05,0x03,0x04,0x05,0x04,0x04,0x06,0x05,0x05,0x06,0x05,0x06,0x06,0x06,0x06, 0x07,0x07,0x07,0x09,0x07,0x08,0x0a,0x08,0x09,0x0a,0x08,0x09,0x0a,0x0a,0x0a,0x0c, 0x0a,0x0a,0x0c,0x0a,0x0a,0x0d,0x0a,0x0a,0x0d,0x0b,0x0c,0x0e,0x0c,0x0c,0x0e,0x0c, 0x0e,0x10,0x0d,0x0e,0x10,0x0e,0x0e,0x12,0x0f,0x10,0x13,0x11,0x12,0x14,0x15,0x16, 0x19,0x16,0x17,0x1b,0x1a,0x1c,0x21,0x1e,0x20,0x26,0x22,0x22,0x29,0x24,0x26,0x2d, 0x27,0x28,0x30,0x2d,0x2e,0x36,0x32,0x34,0x3e,0x36,0x37,0x45,0x3a,0x3e,0x4a,0x42, 0x45,0x4e,0x48,0x4a,0x52,0x41,0x42,0x4a,0x3b,0x3e,0x46,0x37,0x39,0x41,0x36,0x37, 0x3e,0x34,0x36,0x3e,0x33,0x36,0x3e,0x34,0x36,0x3f,0x37,0x3a,0x45,0x50,0x4d,0x63, 0x6b,0x69,0x80,0x4f,0x50,0x6f,0x4a,0x47,0x63,0x4f,0x4d,0x6c,0x4d,0x4b,0x6b,0x4c, 0x4b,0x6a,0x4c,0x4c,0x6c,0x50,0x52,0x70,0x54,0x58,0x75,0x59,0x5d,0x79,0x5e,0x61, 0x7f,0x60,0x64,0x82,0x64,0x69,0x85,0x65,0x68,0x85,0x65,0x69,0x85,0x67,0x6a,0x87, 0x64,0x67,0x83,0x5e,0x62,0x7b,0x5f,0x61,0x7d,0x62,0x62,0x80,0x3b,0x3f,0x48,0x36, 0x39,0x40,0x32,0x34,0x3a,0x3a,0x3d,0x41,0x57,0x58,0x5b,0x75,0x75,0x76,0x85,0x85, 0x85,0x8e,0x8e,0x8e,0x9e,0x9e,0x9e,0xa8,0xa8,0xa8,0xa7,0xa8,0xa8,0x9e,0x9e,0xa0, 0x86,0x87,0x8a,0x5a,0x5d,0x62,0x46,0x49,0x4f,0x3d,0x3f,0x47,0x31,0x35,0x3e,0x2e, 0x32,0x3b,0x2e,0x31,0x3a,0x2b,0x2e,0x38,0x22,0x25,0x2d,0x1a,0x1d,0x25,0x14,0x16, 0x1c,0x0f,0x10,0x16,0x0d,0x0e,0x12,0x0c,0x0d,0x12,0x0d,0x0e,0x12,0x0c,0x0e,0x12, 0x0b,0x0d,0x11,0x0b,0x0c,0x10,0x0a,0x0b,0x0e,0x0a,0x0a,0x0e,0x08,0x08,0x0b,0x07, 0x08,0x0a,0x06,0x06,0x09,0x06,0x06,0x07,0x05,0x05,0x06,0x03,0x04,0x05,0x02,0x02, 0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc7,0xc7,0xc7,0xff,0xff,0xff,0xff, 0xff,0xff,0xfa,0xfa,0xfa,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x50,0x50,0x50,0xfd,0xfd,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xf4,0xf4,0xf4, 0x0e,0x0e,0x0e,0x00,0x00,0x00,0x9d,0x9d,0x9d,0xfc,0xfc,0xfc,0xff,0xff,0xff,0xff, 0xff,0xff,0xfc,0xfc,0xfc,0x87,0x87,0x87,0x00,0x00,0x00,0x00,0x00,0x00,0x13,0x13, 0x13,0xf7,0xf7,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfe,0xfe,0xd3,0xd3,0xd3, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x99,0x99,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0x99,0x99,0x99,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xbb, 0xbb,0xbb,0xff,0xff,0xff,0xff,0xff,0xff,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x99,0x99,0x99,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x77,0x77, 0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x55,0x55,0x55,0xee,0xee,0xee,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0x99,0x99,0x99,0x22,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03, 0x4b,0x55,0x71,0x60,0x53,0x77,0x5b,0x43,0x5d,0x63,0x4b,0x67,0x63,0x53,0x77,0x60, 0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53, 0x77,0x60,0x53,0x77,0x5e,0x51,0x74,0x4c,0x42,0x5e,0x27,0x22,0x31,0x9d,0x9c,0x9d, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x34,0x32,0x39,0x31,0x2a,0x3c,0x2e, 0x29,0x3b,0x4a,0x48,0x4e,0xf9,0xf9,0xf9,0xfd,0xfd,0xfd,0xff,0xff,0xff,0x98,0x97, 0x99,0x2b,0x26,0x38,0x53,0x43,0x5e,0x62,0x4c,0x69,0x52,0x56,0x81,0x35,0x39,0x46, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x15,0x10,0x14,0x20,0x17,0x1b,0x14,0x0d,0x0f,0x13,0x0c,0x0e,0x13, 0x0c,0x0e,0x15,0x0e,0x10,0x1a,0x11,0x14,0x22,0x18,0x1c,0x2b,0x1f,0x26,0x30,0x23, 0x2b,0x2f,0x23,0x2a,0x3a,0x31,0x35,0xdb,0xdd,0xe5,0x8b,0x95,0xb2,0x6e,0x7a,0x9d, 0x60,0x6d,0x94,0x54,0x60,0x85,0x40,0x48,0x68,0x51,0x56,0x80,0x4a,0x46,0x66,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6d,0x73,0x85, 0x90,0x9a,0xb5,0x74,0x80,0xa2,0x5c,0x67,0x90,0x54,0x5f,0x89,0x57,0x63,0x8b,0x5e, 0x6a,0x91,0x66,0x73,0x97,0x6e,0x7b,0x9c,0x7f,0x89,0xa9,0xed,0xef,0xf4,0x72,0x6b, 0x6e,0x46,0x36,0x42,0x5e,0x4b,0x5d,0x6d,0x67,0x89,0x03,0x03,0x05,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x10,0x12,0x1a,0x5d,0x46,0x63,0x4f,0x3b,0x53,0x55,0x3f,0x58,0x59,0x40, 0x5b,0x5a,0x42,0x5c,0x5a,0x42,0x5c,0x5a,0x43,0x5d,0x5a,0x43,0x5d,0x5b,0x43,0x5e, 0x5c,0x45,0x5f,0x5c,0x45,0x60,0x5d,0x46,0x60,0x54,0x3e,0x58,0x4a,0x35,0x4c,0x51, 0x3d,0x55,0x46,0x50,0x6f,0x05,0x05,0x05,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03, 0x02,0x03,0x04,0x02,0x03,0x04,0x03,0x04,0x05,0x03,0x04,0x05,0x04,0x04,0x06,0x05, 0x05,0x06,0x05,0x06,0x06,0x06,0x06,0x07,0x06,0x06,0x08,0x06,0x06,0x08,0x07,0x07, 0x09,0x08,0x08,0x0a,0x08,0x08,0x0a,0x08,0x09,0x0a,0x09,0x09,0x0a,0x09,0x0a,0x0b, 0x0a,0x0a,0x0c,0x0a,0x0a,0x0d,0x0b,0x0c,0x0e,0x0c,0x0d,0x0f,0x0e,0x0e,0x11,0x0e, 0x0f,0x12,0x11,0x12,0x16,0x13,0x14,0x17,0x16,0x16,0x1a,0x18,0x19,0x1d,0x1b,0x1d, 0x22,0x1e,0x1f,0x26,0x20,0x22,0x28,0x22,0x23,0x2a,0x26,0x27,0x2e,0x26,0x28,0x33, 0x2d,0x2e,0x3a,0x31,0x35,0x42,0x36,0x3a,0x43,0x37,0x39,0x40,0x32,0x35,0x3a,0x2c, 0x2e,0x33,0x2a,0x2b,0x31,0x25,0x27,0x2f,0x22,0x24,0x2f,0x25,0x25,0x32,0x3c,0x36, 0x47,0x5d,0x4e,0x63,0x73,0x69,0x7e,0x57,0x4d,0x66,0x52,0x45,0x5e,0x56,0x4b,0x64, 0x57,0x4b,0x66,0x56,0x4c,0x67,0x55,0x4c,0x68,0x54,0x4b,0x68,0x4c,0x49,0x67,0x4a, 0x4a,0x68,0x4c,0x4d,0x6c,0x54,0x55,0x73,0x59,0x5c,0x78,0x5e,0x61,0x7c,0x65,0x66, 0x81,0x67,0x6a,0x84,0x65,0x67,0x81,0x5f,0x62,0x7b,0x60,0x62,0x7d,0x62,0x64,0x80, 0x42,0x46,0x52,0x3e,0x41,0x4b,0x3c,0x3e,0x46,0x45,0x46,0x4d,0x62,0x64,0x68,0x78, 0x79,0x7a,0x83,0x84,0x86,0x90,0x91,0x93,0x97,0x98,0x99,0xa0,0xa1,0xa4,0x98,0x9a, 0x9e,0x81,0x83,0x88,0x60,0x63,0x6a,0x56,0x59,0x61,0x52,0x54,0x5b,0x53,0x56,0x5d, 0x3f,0x42,0x4a,0x39,0x3c,0x45,0x39,0x3c,0x46,0x35,0x38,0x42,0x2a,0x2d,0x36,0x21, 0x23,0x2b,0x1a,0x1c,0x23,0x12,0x13,0x19,0x0e,0x10,0x15,0x0e,0x0f,0x13,0x0e,0x0f, 0x14,0x0e,0x0e,0x13,0x0d,0x0e,0x12,0x0c,0x0d,0x11,0x0b,0x0c,0x10,0x0a,0x0a,0x0e, 0x09,0x0a,0x0d,0x08,0x08,0x0b,0x07,0x07,0x0a,0x06,0x06,0x08,0x05,0x05,0x06,0x04, 0x04,0x06,0x03,0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x07,0xcd,0xcd,0xcd,0xfc,0xfc,0xfc, 0xff,0xff,0xff,0xfd,0xfd,0xfd,0xad,0xad,0xad,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0xbb,0xbb,0xbb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xd0,0xd0,0xd0,0x00,0x00,0x00,0x6b,0x6b,0x6b,0xf9,0xf9,0xf9,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xb5,0xb5,0xb5,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x05,0x05,0x05,0x15,0x15,0x15,0x0a,0x0a,0x0a,0x07,0x07,0x07,0x07,0x07, 0x07,0x07,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xbb,0xbb,0xbb,0xff,0xff,0xff,0xff,0xff,0xff,0xbb,0xbb,0xbb,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x18,0x19,0x1a,0x50,0x5b,0x81,0x64,0x50,0x6f,0x5c,0x44,0x5e, 0x64,0x53,0x76,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60, 0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x57,0x4b,0x6b,0x37,0x30,0x45,0x52,0x50, 0x56,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x9d,0x9c,0x9e,0x27,0x22,0x30, 0x37,0x2f,0x44,0x20,0x1c,0x28,0xca,0xca,0xcb,0xfd,0xfd,0xfd,0xff,0xff,0xff,0xeb, 0xeb,0xeb,0x1a,0x17,0x21,0x40,0x38,0x52,0x59,0x4e,0x72,0x64,0x50,0x6f,0x64,0x4f, 0x6d,0x51,0x5c,0x84,0x27,0x2b,0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x28,0x1c,0x22,0x16,0x0f,0x11, 0x13,0x0c,0x0e,0x15,0x0d,0x0f,0x1a,0x11,0x14,0x21,0x17,0x1b,0x2a,0x1e,0x25,0x32, 0x25,0x2d,0x31,0x24,0x2c,0x30,0x23,0x2b,0x28,0x1d,0x22,0xac,0xa9,0xab,0xa2,0xaa, 0xc1,0x74,0x80,0xa2,0x64,0x71,0x96,0x58,0x63,0x8a,0x42,0x4b,0x6b,0x49,0x53,0x78, 0x5a,0x58,0x83,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x49,0x4d,0x58,0x96,0xa0,0xb9,0x7d,0x88,0xa8,0x63,0x6f,0x95,0x5a,0x65,0x8d, 0x5b,0x67,0x90,0x63,0x6e,0x94,0x6e,0x7a,0x9c,0x79,0x83,0xa4,0x89,0x92,0xb0,0xeb, 0xed,0xf1,0x7d,0x76,0x79,0x43,0x33,0x3e,0x5b,0x48,0x59,0x76,0x69,0x88,0x0a,0x0b, 0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2a,0x2a,0x3e,0x57,0x40,0x5b,0x52, 0x3d,0x55,0x5a,0x42,0x5c,0x5a,0x42,0x5c,0x5a,0x42,0x5c,0x5a,0x42,0x5c,0x5b,0x43, 0x5d,0x5b,0x43,0x5d,0x5c,0x44,0x5e,0x5b,0x43,0x5e,0x5c,0x44,0x5f,0x5b,0x44,0x5f, 0x51,0x3c,0x55,0x4a,0x35,0x4d,0x53,0x41,0x59,0x41,0x49,0x65,0x00,0x00,0x00,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x03,0x04,0x02,0x02,0x03,0x03,0x04,0x05, 0x03,0x03,0x04,0x04,0x04,0x05,0x04,0x05,0x06,0x05,0x05,0x06,0x05,0x05,0x06,0x05, 0x06,0x06,0x06,0x06,0x08,0x06,0x06,0x07,0x07,0x07,0x09,0x07,0x07,0x09,0x07,0x07, 0x09,0x07,0x08,0x0a,0x09,0x09,0x0a,0x0a,0x0a,0x0c,0x0a,0x0a,0x0d,0x0a,0x0b,0x0d, 0x0b,0x0c,0x0e,0x0d,0x0e,0x10,0x0e,0x0f,0x12,0x10,0x11,0x13,0x11,0x12,0x16,0x13, 0x14,0x18,0x15,0x16,0x1a,0x18,0x1a,0x1e,0x1c,0x1e,0x23,0x1e,0x21,0x26,0x21,0x22, 0x28,0x20,0x22,0x29,0x20,0x23,0x2d,0x26,0x26,0x32,0x25,0x26,0x33,0x27,0x2a,0x32, 0x26,0x29,0x2f,0x22,0x25,0x2d,0x1e,0x1f,0x2a,0x26,0x22,0x2d,0x2e,0x27,0x32,0x32, 0x2a,0x34,0x4c,0x3e,0x4e,0x58,0x46,0x57,0x5a,0x53,0x66,0x48,0x3e,0x53,0x4c,0x41, 0x58,0x52,0x46,0x5f,0x52,0x46,0x60,0x53,0x46,0x60,0x50,0x45,0x5f,0x51,0x45,0x5f, 0x53,0x48,0x62,0x52,0x49,0x66,0x50,0x49,0x65,0x49,0x46,0x65,0x4a,0x49,0x68,0x4c, 0x4e,0x6c,0x54,0x55,0x74,0x5e,0x60,0x7b,0x5f,0x60,0x78,0x5b,0x5c,0x74,0x5c,0x5e, 0x78,0x5c,0x5d,0x77,0x3f,0x42,0x4e,0x3e,0x42,0x4c,0x3d,0x40,0x4a,0x44,0x46,0x50, 0x52,0x54,0x5b,0x5f,0x61,0x65,0x6a,0x6a,0x6c,0x74,0x75,0x76,0x71,0x71,0x73,0x6f, 0x71,0x75,0x5c,0x60,0x67,0x4e,0x52,0x5a,0x4f,0x52,0x5d,0x53,0x57,0x61,0x56,0x59, 0x61,0x52,0x54,0x5d,0x44,0x47,0x4f,0x3a,0x3e,0x46,0x37,0x3a,0x42,0x34,0x37,0x40, 0x2c,0x2f,0x39,0x25,0x27,0x2f,0x1b,0x1e,0x25,0x14,0x16,0x1c,0x11,0x12,0x18,0x0f, 0x11,0x16,0x0f,0x11,0x16,0x0e,0x10,0x15,0x0e,0x10,0x15,0x0d,0x0e,0x12,0x0d,0x0e, 0x12,0x0b,0x0d,0x11,0x0a,0x0b,0x0e,0x09,0x0a,0x0d,0x07,0x08,0x0a,0x06,0x06,0x09, 0x05,0x05,0x06,0x04,0x04,0x06,0x03,0x03,0x05,0x02,0x02,0x03,0x02,0x02,0x02,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x21,0x21,0x21,0xe1,0xe1,0xe1,0xff,0xff, 0xff,0xff,0xff,0xff,0xf9,0xf9,0xf9,0x9e,0x9e,0x9e,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xef,0xef,0xef,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0x7f,0x7f,0x7f,0x52,0x52,0x52,0xf2,0xf2,0xf2,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xde,0xde,0xde,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xbb,0xbb,0xbb,0xff,0xff,0xff,0xff,0xff,0xff, 0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x39,0x3a,0x40,0x52,0x54, 0x7e,0x5f,0x47,0x63,0x5d,0x46,0x60,0x62,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77, 0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x5d,0x51,0x74,0x49,0x3f,0x5a,0x22, 0x1d,0x2a,0xcd,0xcd,0xcd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x36,0x33, 0x3a,0x33,0x2c,0x3f,0x2e,0x28,0x39,0x67,0x66,0x6a,0xfa,0xfa,0xfa,0xff,0xff,0xff, 0xfd,0xfd,0xfd,0x88,0x87,0x8a,0x2e,0x29,0x3b,0x50,0x47,0x67,0x5d,0x52,0x78,0x60, 0x53,0x77,0x64,0x4f,0x6d,0x64,0x53,0x75,0x52,0x5f,0x85,0x1e,0x20,0x27,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x20, 0x27,0x1a,0x12,0x15,0x17,0x0f,0x11,0x1b,0x12,0x15,0x22,0x18,0x1c,0x2a,0x1e,0x24, 0x2e,0x21,0x28,0x32,0x25,0x2d,0x31,0x24,0x2c,0x32,0x25,0x2d,0x2d,0x21,0x28,0x46, 0x3e,0x42,0xcb,0xd0,0xdd,0x81,0x8b,0xab,0x67,0x74,0x99,0x5c,0x67,0x90,0x47,0x51, 0x73,0x42,0x4c,0x6f,0x60,0x5f,0x8c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x24,0x26,0x2b,0x9a,0xa3,0xbc,0x84,0x8e,0xad,0x6c,0x77, 0x9c,0x5f,0x6b,0x92,0x5f,0x6b,0x92,0x6b,0x76,0x9b,0x7a,0x84,0xa5,0x83,0x8d,0xac, 0x8a,0x94,0xb1,0xe0,0xe4,0xea,0x85,0x7f,0x82,0x42,0x33,0x3e,0x58,0x46,0x56,0x78, 0x69,0x86,0x18,0x1a,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x04, 0x4d,0x43,0x5f,0x52,0x3e,0x56,0x51,0x3c,0x55,0x5a,0x42,0x5c,0x5a,0x42,0x5c,0x5a, 0x42,0x5c,0x5b,0x43,0x5d,0x5b,0x43,0x5d,0x5c,0x44,0x5e,0x5b,0x43,0x5d,0x5c,0x44, 0x5f,0x5c,0x44,0x5f,0x5c,0x44,0x5f,0x53,0x3d,0x56,0x46,0x33,0x4b,0x59,0x47,0x67, 0x4f,0x55,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x03,0x02,0x02,0x03,0x03,0x03,0x04,0x03,0x03,0x04,0x04,0x04,0x05,0x03,0x04,0x04, 0x04,0x04,0x05,0x04,0x04,0x05,0x04,0x05,0x06,0x06,0x06,0x06,0x06,0x06,0x07,0x06, 0x06,0x07,0x06,0x06,0x07,0x06,0x06,0x08,0x06,0x07,0x09,0x07,0x07,0x09,0x08,0x09, 0x0a,0x09,0x0a,0x0b,0x0a,0x0a,0x0c,0x0b,0x0c,0x0e,0x0d,0x0e,0x10,0x0e,0x0e,0x11, 0x0f,0x10,0x12,0x11,0x12,0x15,0x12,0x13,0x17,0x14,0x16,0x1a,0x16,0x18,0x1c,0x17, 0x19,0x1e,0x19,0x1b,0x20,0x1b,0x1d,0x22,0x1e,0x20,0x26,0x1e,0x20,0x2b,0x23,0x23, 0x30,0x21,0x23,0x2e,0x20,0x20,0x2b,0x1f,0x1e,0x2a,0x23,0x20,0x2a,0x29,0x22,0x2a, 0x29,0x21,0x2a,0x27,0x20,0x27,0x4d,0x3e,0x4c,0x5e,0x4f,0x5e,0x50,0x4d,0x63,0x42, 0x39,0x4d,0x47,0x3d,0x53,0x4c,0x42,0x59,0x4f,0x44,0x5d,0x4c,0x42,0x5c,0x4d,0x43, 0x5c,0x4c,0x42,0x5b,0x4d,0x43,0x5c,0x4f,0x44,0x5d,0x4f,0x45,0x5c,0x53,0x4b,0x68, 0x4d,0x49,0x68,0x4f,0x49,0x69,0x4f,0x4c,0x6b,0x4c,0x4b,0x6c,0x4c,0x4d,0x69,0x53, 0x55,0x6b,0x59,0x5a,0x72,0x56,0x57,0x6c,0x39,0x3b,0x43,0x37,0x3a,0x42,0x37,0x3a, 0x42,0x3e,0x41,0x49,0x48,0x4a,0x50,0x4f,0x51,0x56,0x54,0x55,0x5a,0x4a,0x4b,0x4f, 0x48,0x49,0x4c,0x43,0x45,0x4a,0x41,0x43,0x49,0x3f,0x42,0x4b,0x3d,0x41,0x4b,0x3a, 0x3e,0x49,0x3d,0x40,0x4a,0x3e,0x42,0x4b,0x3a,0x3d,0x46,0x36,0x38,0x40,0x30,0x32, 0x3a,0x2b,0x2e,0x36,0x2a,0x2e,0x36,0x26,0x29,0x31,0x1e,0x21,0x28,0x1a,0x1b,0x22, 0x19,0x1a,0x20,0x14,0x16,0x1b,0x11,0x12,0x17,0x10,0x12,0x16,0x0f,0x11,0x16,0x0e, 0x10,0x15,0x0e,0x0e,0x13,0x0e,0x0f,0x14,0x0d,0x0e,0x12,0x0a,0x0b,0x0f,0x09,0x0a, 0x0d,0x06,0x06,0x09,0x06,0x06,0x07,0x04,0x04,0x06,0x03,0x03,0x05,0x02,0x02,0x03, 0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0x3f,0x3f,0xe6,0xe6,0xe6,0xff, 0xff,0xff,0xff,0xff,0xff,0xf5,0xf5,0xf5,0x8a,0x8a,0x8a,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x60,0xfd,0xfd,0xfd, 0xff,0xff,0xff,0xfd,0xfd,0xfd,0xf9,0xf9,0xf9,0x73,0x73,0x73,0xea,0xea,0xea,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xed,0xed,0xed,0x32,0x32,0x32,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xbb,0xbb,0xbb,0xff,0xff, 0xff,0xff,0xff,0xff,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x58,0x5c,0x6f,0x5d,0x52,0x79,0x58,0x40,0x5a,0x64,0x4c,0x6a,0x60,0x53, 0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x54,0x48,0x68, 0x32,0x2b,0x3e,0x6f,0x6e,0x71,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7d, 0x7c,0x7e,0x28,0x23,0x31,0x35,0x2e,0x42,0x1d,0x19,0x24,0xdd,0xdd,0xdd,0xff,0xff, 0xff,0xff,0xff,0xff,0xe5,0xe5,0xe6,0x1c,0x18,0x24,0x42,0x3b,0x55,0x5a,0x4f,0x74, 0x60,0x53,0x77,0x5e,0x53,0x79,0x60,0x53,0x77,0x64,0x4f,0x6d,0x64,0x52,0x72,0x52, 0x5d,0x84,0x1a,0x1c,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x1f,0x17,0x1d,0x28,0x1d,0x23,0x22,0x18,0x1c,0x26,0x1b,0x20,0x2d,0x20, 0x27,0x30,0x23,0x2a,0x33,0x26,0x2e,0x33,0x26,0x2e,0x32,0x25,0x2d,0x33,0x26,0x2e, 0x31,0x24,0x2b,0x27,0x1c,0x22,0xac,0xac,0xb3,0x8b,0x95,0xb2,0x6c,0x79,0x9c,0x5f, 0x6b,0x92,0x50,0x5a,0x80,0x41,0x4a,0x6a,0x54,0x5e,0x89,0x18,0x16,0x1f,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x97,0xa1,0xb8,0x8a, 0x94,0xb1,0x75,0x81,0xa2,0x67,0x73,0x99,0x6a,0x75,0x9a,0x71,0x7c,0xa0,0x80,0x8a, 0xaa,0x89,0x93,0xb0,0x91,0x9a,0xb5,0xd9,0xdd,0xe6,0x8b,0x86,0x8a,0x40,0x30,0x3b, 0x58,0x46,0x56,0x78,0x66,0x80,0x3a,0x3f,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x13,0x15,0x1d,0x5e,0x4b,0x69,0x4c,0x36,0x4e,0x54,0x3d,0x57, 0x5c,0x45,0x5f,0x5c,0x44,0x5f,0x5c,0x44,0x5e,0x5c,0x44,0x5f,0x5c,0x44,0x5e,0x5b, 0x44,0x5e,0x5c,0x44,0x5f,0x5d,0x45,0x61,0x5d,0x45,0x61,0x5b,0x44,0x5f,0x51,0x3f, 0x55,0x43,0x32,0x46,0x4f,0x4a,0x71,0x60,0x65,0x71,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x03,0x03, 0x04,0x02,0x02,0x03,0x03,0x03,0x04,0x03,0x04,0x04,0x03,0x04,0x04,0x03,0x04,0x04, 0x07,0x06,0x08,0x06,0x06,0x06,0x06,0x06,0x06,0x05,0x05,0x06,0x06,0x06,0x07,0x06, 0x06,0x08,0x06,0x07,0x09,0x07,0x08,0x0a,0x09,0x09,0x0a,0x0a,0x0a,0x0c,0x0a,0x0b, 0x0d,0x0c,0x0d,0x0e,0x0d,0x0e,0x10,0x0e,0x0f,0x12,0x11,0x12,0x15,0x12,0x14,0x17, 0x14,0x16,0x1a,0x14,0x16,0x1a,0x16,0x17,0x1c,0x18,0x1a,0x1e,0x1a,0x1b,0x22,0x1c, 0x1d,0x27,0x1f,0x1f,0x2a,0x20,0x1f,0x2a,0x22,0x1f,0x2a,0x1b,0x1b,0x24,0x17,0x17, 0x1f,0x20,0x1c,0x23,0x20,0x1a,0x20,0x25,0x1c,0x23,0x4e,0x3d,0x4d,0x65,0x5b,0x6c, 0x4f,0x4c,0x66,0x47,0x3f,0x56,0x4e,0x44,0x5f,0x4c,0x42,0x5c,0x4a,0x41,0x5a,0x49, 0x40,0x59,0x49,0x41,0x5c,0x49,0x41,0x5b,0x4b,0x41,0x5c,0x4d,0x43,0x5d,0x50,0x45, 0x5f,0x54,0x49,0x64,0x54,0x4b,0x68,0x55,0x4d,0x69,0x58,0x4e,0x6b,0x58,0x4f,0x6c, 0x4d,0x47,0x63,0x42,0x41,0x5d,0x4f,0x51,0x6b,0x4c,0x4e,0x60,0x35,0x37,0x3e,0x33, 0x36,0x3e,0x33,0x36,0x3e,0x36,0x39,0x40,0x3b,0x3d,0x43,0x3f,0x41,0x46,0x3f,0x41, 0x46,0x39,0x3a,0x3f,0x3a,0x3c,0x42,0x39,0x3a,0x41,0x36,0x38,0x3f,0x3a,0x3d,0x45, 0x30,0x33,0x3d,0x29,0x2b,0x34,0x2d,0x30,0x3a,0x32,0x36,0x40,0x32,0x36,0x3f,0x2c, 0x2e,0x37,0x27,0x2a,0x32,0x24,0x27,0x2e,0x24,0x27,0x30,0x22,0x25,0x2e,0x1e,0x21, 0x28,0x1f,0x22,0x29,0x1e,0x21,0x26,0x1b,0x1e,0x23,0x15,0x16,0x1c,0x12,0x13,0x18, 0x11,0x12,0x18,0x11,0x12,0x18,0x11,0x12,0x17,0x12,0x14,0x19,0x12,0x14,0x1a,0x0f, 0x11,0x16,0x0c,0x0e,0x12,0x09,0x0a,0x0c,0x06,0x06,0x08,0x05,0x05,0x06,0x03,0x03, 0x05,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x62,0x62,0x62,0xf0,0xf0,0xf0, 0xff,0xff,0xff,0xfd,0xfd,0xfd,0xf3,0xf3,0xf3,0x5f,0x5f,0x5f,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xbf,0xbf, 0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdb,0xdb,0xdb,0xd8,0xd8,0xd8, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf6,0xf6,0xf6,0x50,0x50,0x50,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xbb, 0xbb,0xbb,0xff,0xff,0xff,0xff,0xff,0xff,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x06,0x06,0x5c,0x64,0x84,0x64,0x4d,0x6b,0x56, 0x3e,0x57,0x64,0x53,0x75,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x5b,0x4f, 0x71,0x43,0x3a,0x53,0x29,0x26,0x30,0xdd,0xdd,0xde,0xff,0xff,0xff,0xff,0xff,0xff, 0xee,0xee,0xee,0x27,0x25,0x2d,0x34,0x2d,0x41,0x2c,0x26,0x37,0x84,0x83,0x86,0xfa, 0xfa,0xfa,0xff,0xff,0xff,0xfd,0xfd,0xfd,0x7e,0x7d,0x81,0x31,0x2b,0x3d,0x53,0x48, 0x67,0x5d,0x52,0x78,0x5e,0x53,0x79,0x60,0x53,0x77,0x60,0x53,0x77,0x63,0x53,0x77, 0x64,0x4c,0x69,0x64,0x53,0x73,0x52,0x5b,0x80,0x16,0x17,0x1b,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x06,0x07,0x3c,0x2d,0x37,0x30,0x23,0x2a,0x32, 0x24,0x2c,0x34,0x27,0x2f,0x34,0x27,0x2f,0x37,0x29,0x32,0x36,0x28,0x31,0x36,0x28, 0x30,0x35,0x27,0x2f,0x34,0x26,0x2e,0x2d,0x21,0x28,0x5a,0x54,0x58,0x9f,0xa7,0xbf, 0x71,0x7c,0xa0,0x60,0x6d,0x94,0x58,0x64,0x8c,0x43,0x4c,0x6e,0x4d,0x56,0x7d,0x3f, 0x3a,0x53,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x7b,0x82,0x93,0x94,0x9d,0xb8,0x82,0x8c,0xab,0x77,0x82,0xa4,0x7a,0x85,0xa5,0x7d, 0x88,0xa8,0x86,0x91,0xaf,0x8d,0x98,0xb3,0x92,0x9b,0xb5,0xc1,0xc7,0xd6,0x97,0x91, 0x95,0x41,0x31,0x3d,0x57,0x44,0x55,0x75,0x60,0x79,0x4a,0x51,0x67,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2c,0x33,0x47,0x5a,0x45, 0x5f,0x4b,0x36,0x4e,0x58,0x40,0x5b,0x5c,0x44,0x5f,0x5d,0x45,0x5f,0x5d,0x45,0x5f, 0x5d,0x45,0x5f,0x5d,0x45,0x60,0x5d,0x45,0x60,0x5d,0x45,0x60,0x5d,0x45,0x61,0x5e, 0x46,0x62,0x5b,0x44,0x5e,0x52,0x3d,0x56,0x43,0x32,0x47,0x4e,0x4c,0x74,0x5a,0x5f, 0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02, 0x03,0x03,0x03,0x04,0x04,0x04,0x05,0x04,0x05,0x06,0x04,0x04,0x05,0x04,0x05,0x06, 0x05,0x06,0x06,0x05,0x06,0x06,0x06,0x06,0x07,0x06,0x06,0x08,0x07,0x08,0x0a,0x08, 0x09,0x0a,0x0a,0x0a,0x0c,0x0a,0x0b,0x0d,0x0b,0x0c,0x0e,0x0d,0x0e,0x10,0x0f,0x10, 0x13,0x10,0x11,0x14,0x11,0x12,0x16,0x13,0x15,0x18,0x13,0x15,0x19,0x16,0x17,0x1c, 0x18,0x1a,0x1e,0x18,0x1a,0x21,0x19,0x1b,0x23,0x18,0x1a,0x22,0x16,0x19,0x20,0x14, 0x16,0x1c,0x12,0x13,0x19,0x11,0x11,0x16,0x1a,0x16,0x1d,0x36,0x2b,0x35,0x52,0x41, 0x51,0x62,0x5d,0x73,0x4f,0x4a,0x65,0x4c,0x44,0x5d,0x52,0x49,0x66,0x50,0x48,0x63, 0x4e,0x47,0x62,0x4c,0x46,0x62,0x47,0x43,0x61,0x49,0x44,0x61,0x4c,0x44,0x60,0x4d, 0x45,0x60,0x50,0x46,0x62,0x53,0x49,0x64,0x54,0x4b,0x68,0x55,0x4c,0x68,0x57,0x4c, 0x68,0x58,0x4c,0x68,0x50,0x45,0x5d,0x4e,0x46,0x5f,0x45,0x43,0x5f,0x3e,0x3f,0x4f, 0x2f,0x32,0x3a,0x31,0x33,0x3b,0x30,0x32,0x3a,0x2c,0x2e,0x36,0x27,0x29,0x2f,0x2a, 0x2b,0x32,0x2d,0x2e,0x35,0x2b,0x2d,0x32,0x34,0x36,0x3c,0x3a,0x3d,0x43,0x3c,0x3e, 0x46,0x3d,0x3e,0x46,0x33,0x36,0x3e,0x27,0x2a,0x31,0x2a,0x2d,0x35,0x2a,0x2e,0x37, 0x2a,0x2d,0x36,0x26,0x2a,0x32,0x22,0x25,0x2d,0x1d,0x1f,0x28,0x1c,0x1e,0x28,0x1b, 0x1e,0x27,0x1c,0x1e,0x27,0x1c,0x1e,0x26,0x1c,0x1e,0x26,0x1c,0x1e,0x25,0x1d,0x1e, 0x25,0x17,0x19,0x1e,0x12,0x14,0x1a,0x13,0x15,0x1a,0x15,0x16,0x1c,0x18,0x1a,0x21, 0x1a,0x1c,0x23,0x16,0x17,0x1d,0x12,0x14,0x18,0x0b,0x0d,0x10,0x06,0x06,0x09,0x04, 0x04,0x06,0x03,0x03,0x05,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x72,0x72,0xf7,0xf7, 0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xed,0xed,0xed,0x63,0x63,0x63,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0xf3,0xf3,0xf3,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe6,0xe6, 0xe6,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0xfc,0xfc,0x8e,0x8e,0x8e, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xbb,0xbb,0xbb,0xff,0xff,0xff,0xff,0xff,0xff,0xbb,0xbb,0xbb,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0x1f,0x21, 0x51,0x59,0x82,0x5d,0x45,0x60,0x5e,0x46,0x62,0x64,0x53,0x76,0x60,0x53,0x77,0x5f, 0x52,0x76,0x50,0x45,0x63,0x2c,0x26,0x37,0x7d,0x7c,0x7e,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0x7e,0x7d,0x80,0x29,0x24,0x33,0x34,0x2d,0x40,0x1a,0x17,0x21, 0xe5,0xe5,0xe6,0xff,0xff,0xff,0xff,0xff,0xff,0xd9,0xd9,0xd9,0x1f,0x1b,0x26,0x46, 0x3d,0x57,0x5c,0x50,0x72,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53, 0x77,0x60,0x53,0x77,0x64,0x53,0x76,0x63,0x4c,0x69,0x64,0x50,0x6f,0x52,0x5e,0x81, 0x0a,0x0a,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4b,0x4c, 0x52,0x19,0x19,0x20,0x06,0x05,0x06,0x00,0x00,0x00,0x02,0x02,0x02,0x40,0x31,0x3c, 0x3d,0x2e,0x38,0x3c,0x2d,0x37,0x3a,0x2b,0x35,0x3f,0x30,0x3b,0x3d,0x2e,0x38,0x39, 0x2b,0x34,0x39,0x2b,0x34,0x37,0x29,0x32,0x36,0x28,0x31,0x33,0x26,0x2e,0x26,0x1b, 0x20,0xa6,0xaa,0xb7,0x80,0x8a,0xaa,0x64,0x71,0x96,0x5b,0x67,0x8e,0x47,0x52,0x75, 0x47,0x4e,0x72,0x55,0x50,0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x56,0x5b,0x65,0xa2,0xaa,0xc1,0x91,0x9a,0xb5,0x89,0x93,0xb1, 0x90,0x99,0xb4,0x9a,0xa2,0xbb,0x90,0x9a,0xb5,0x8e,0x99,0xb4,0x92,0x9b,0xb7,0xaf, 0xb5,0xc9,0xa2,0x9d,0xa0,0x40,0x30,0x3b,0x57,0x45,0x55,0x71,0x5c,0x73,0x52,0x5a, 0x75,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02, 0x02,0x03,0x3f,0x3e,0x60,0x54,0x3e,0x58,0x4c,0x37,0x50,0x5c,0x44,0x5e,0x5d,0x45, 0x5f,0x5d,0x45,0x5f,0x5d,0x45,0x5f,0x5d,0x45,0x60,0x5e,0x46,0x60,0x5e,0x46,0x62, 0x5e,0x46,0x62,0x5f,0x47,0x63,0x5e,0x47,0x63,0x5f,0x47,0x64,0x4d,0x39,0x53,0x49, 0x38,0x4e,0x50,0x4e,0x79,0x50,0x54,0x5d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x04,0x04,0x03,0x04, 0x04,0x03,0x04,0x04,0x03,0x03,0x04,0x04,0x05,0x06,0x04,0x05,0x06,0x05,0x06,0x06, 0x06,0x07,0x08,0x07,0x07,0x09,0x09,0x0a,0x0b,0x09,0x0a,0x0b,0x0a,0x0b,0x0e,0x0b, 0x0c,0x0e,0x0d,0x0e,0x10,0x0e,0x0e,0x12,0x0f,0x10,0x13,0x11,0x12,0x16,0x12,0x14, 0x17,0x13,0x14,0x18,0x15,0x16,0x1a,0x16,0x18,0x1c,0x17,0x19,0x1e,0x17,0x1a,0x1e, 0x16,0x18,0x1e,0x14,0x16,0x1b,0x13,0x15,0x1a,0x11,0x12,0x18,0x13,0x13,0x1a,0x48, 0x3b,0x4b,0x56,0x47,0x59,0x5b,0x5f,0x7c,0x46,0x46,0x63,0x46,0x46,0x64,0x49,0x49, 0x69,0x48,0x48,0x67,0x46,0x45,0x65,0x44,0x46,0x66,0x44,0x46,0x65,0x44,0x43,0x64, 0x4c,0x47,0x66,0x4e,0x46,0x62,0x4f,0x45,0x61,0x53,0x49,0x65,0x55,0x4b,0x68,0x56, 0x4c,0x69,0x56,0x4d,0x6a,0x55,0x4c,0x69,0x4b,0x42,0x5c,0x4b,0x42,0x5c,0x49,0x44, 0x62,0x2e,0x30,0x3c,0x2d,0x30,0x39,0x2d,0x30,0x39,0x27,0x2a,0x32,0x22,0x23,0x2a, 0x1c,0x1e,0x23,0x1f,0x21,0x26,0x26,0x28,0x2e,0x2f,0x31,0x38,0x3d,0x3e,0x45,0x43, 0x46,0x4b,0x52,0x54,0x5a,0x5f,0x61,0x67,0x3a,0x3d,0x43,0x30,0x32,0x3b,0x29,0x2c, 0x35,0x26,0x2a,0x32,0x25,0x28,0x30,0x23,0x26,0x2e,0x1e,0x21,0x2a,0x1a,0x1b,0x24, 0x19,0x19,0x22,0x1a,0x1a,0x22,0x1a,0x1b,0x25,0x1a,0x1d,0x26,0x19,0x1b,0x23,0x1b, 0x1e,0x25,0x21,0x23,0x2a,0x1f,0x21,0x27,0x17,0x19,0x1e,0x15,0x16,0x1b,0x17,0x1a, 0x1f,0x1a,0x1d,0x23,0x1c,0x1e,0x25,0x1a,0x1c,0x22,0x18,0x1a,0x1e,0x0f,0x10,0x13, 0x06,0x07,0x0a,0x04,0x04,0x06,0x03,0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x02,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x9b,0x9b,0x9b,0xf9, 0xf9,0xf9,0xff,0xff,0xff,0xff,0xff,0xff,0xe5,0xe5,0xe5,0x3a,0x3a,0x3a,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x6a,0x6a,0x6a,0xfd,0xfd,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xfd, 0xfd,0xfd,0xfd,0xfd,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xfd,0xfd,0xc0,0xc0, 0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x40,0x40,0x48,0x55,0x50,0x79,0x58,0x41,0x5b,0x60,0x48,0x64, 0x60,0x53,0x77,0x5a,0x4e,0x70,0x3f,0x36,0x4e,0x36,0x33,0x3a,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xde,0xde,0xde,0x1c,0x18,0x23,0x34,0x2d,0x40,0x27,0x22, 0x30,0x9b,0x9b,0x9d,0xfd,0xfd,0xfd,0xff,0xff,0xff,0xfa,0xfa,0xfa,0x6f,0x6d,0x71, 0x34,0x2d,0x41,0x55,0x4a,0x69,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60, 0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x64,0x53,0x76,0x64,0x4d, 0x6b,0x64,0x53,0x74,0x58,0x62,0x83,0x07,0x07,0x08,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0c,0x09,0x0b,0x3e, 0x31,0x3d,0xb9,0xbb,0xc9,0xb5,0xbc,0xcf,0x6d,0x76,0x92,0x20,0x24,0x34,0x05,0x04, 0x05,0x5c,0x49,0x5b,0x4a,0x39,0x46,0x44,0x34,0x40,0x43,0x33,0x3f,0x45,0x35,0x41, 0x40,0x31,0x3b,0x3f,0x30,0x3a,0x3d,0x2e,0x38,0x3c,0x2d,0x37,0x39,0x2b,0x34,0x38, 0x2a,0x33,0x2f,0x23,0x2a,0x6a,0x64,0x6a,0x99,0xa1,0xbb,0x6a,0x75,0x9a,0x5b,0x67, 0x90,0x4f,0x5a,0x7f,0x3f,0x47,0x68,0x5b,0x5a,0x85,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x28,0x2a,0x2f,0xaf,0xb5,0xca,0x9f,0xa8, 0xbf,0x96,0xa0,0xb9,0x9b,0xa3,0xbc,0xa3,0xab,0xc2,0x9f,0xa8,0xbf,0x96,0xa0,0xba, 0x95,0x9f,0xb9,0xa5,0xad,0xc4,0xa7,0xa3,0xa8,0x3f,0x30,0x3a,0x58,0x46,0x56,0x6a, 0x56,0x6b,0x5a,0x63,0x83,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x13,0x19,0x58,0x4c,0x70,0x4e,0x39,0x53,0x4f, 0x39,0x53,0x5d,0x45,0x60,0x5d,0x45,0x60,0x5e,0x46,0x60,0x5e,0x46,0x60,0x5e,0x46, 0x62,0x5f,0x47,0x63,0x5f,0x47,0x63,0x5f,0x47,0x63,0x5f,0x47,0x63,0x60,0x48,0x64, 0x5c,0x44,0x61,0x49,0x36,0x4d,0x51,0x40,0x5b,0x50,0x50,0x7d,0x47,0x4a,0x54,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x03,0x02,0x02,0x03,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x04,0x04, 0x05,0x04,0x04,0x05,0x04,0x05,0x06,0x06,0x06,0x07,0x07,0x07,0x09,0x08,0x09,0x0a, 0x08,0x09,0x0a,0x0a,0x0a,0x0c,0x0a,0x0b,0x0e,0x0c,0x0d,0x0f,0x0d,0x0e,0x11,0x0e, 0x0f,0x12,0x0f,0x11,0x14,0x12,0x13,0x16,0x13,0x14,0x18,0x15,0x16,0x1a,0x15,0x16, 0x1a,0x15,0x16,0x1b,0x16,0x17,0x1c,0x15,0x16,0x1b,0x13,0x15,0x1a,0x13,0x15,0x19, 0x1b,0x1a,0x21,0x52,0x48,0x5a,0x5e,0x55,0x67,0x58,0x61,0x7f,0x49,0x4c,0x67,0x51, 0x54,0x72,0x53,0x55,0x74,0x4b,0x4d,0x6f,0x49,0x49,0x6a,0x49,0x4c,0x6c,0x4c,0x4e, 0x6e,0x4a,0x4c,0x6d,0x48,0x47,0x69,0x50,0x4a,0x69,0x51,0x49,0x65,0x52,0x49,0x65, 0x54,0x4a,0x69,0x54,0x4c,0x6a,0x52,0x4b,0x6a,0x4c,0x48,0x67,0x3d,0x3b,0x57,0x3b, 0x3a,0x57,0x41,0x43,0x61,0x27,0x2a,0x32,0x2b,0x2e,0x37,0x29,0x2c,0x35,0x25,0x27, 0x2f,0x23,0x26,0x2e,0x22,0x25,0x2b,0x25,0x28,0x2e,0x32,0x34,0x3a,0x42,0x44,0x4a, 0x5c,0x5d,0x62,0x8e,0x8f,0x92,0xb7,0xb7,0xb9,0x9c,0x9c,0x9f,0x43,0x45,0x4c,0x32, 0x34,0x3d,0x26,0x2a,0x32,0x22,0x25,0x2e,0x21,0x23,0x2c,0x1e,0x22,0x2a,0x1b,0x1e, 0x27,0x1a,0x1a,0x23,0x1a,0x1a,0x22,0x1a,0x1a,0x24,0x1b,0x1d,0x26,0x1b,0x1e,0x27, 0x19,0x1b,0x24,0x19,0x1b,0x23,0x20,0x22,0x29,0x20,0x22,0x29,0x18,0x1a,0x1f,0x1a, 0x1b,0x20,0x16,0x18,0x1d,0x16,0x18,0x1e,0x1c,0x1e,0x22,0x1f,0x21,0x25,0x1d,0x1e, 0x22,0x16,0x18,0x1b,0x0a,0x0b,0x0e,0x04,0x05,0x06,0x03,0x03,0x04,0x02,0x02,0x02, 0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xad,0xad,0xad, 0xfa,0xfa,0xfa,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xe2,0xe2,0xe2,0x15,0x15,0x15,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc7,0xc7,0xc7,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xd5, 0xd5,0xd5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x56,0x59,0x6c,0x64,0x52, 0x72,0x5a,0x41,0x5c,0x62,0x4f,0x6d,0x4e,0x44,0x61,0x2a,0x24,0x34,0x9d,0x9c,0x9e, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x70,0x6e,0x72,0x2c,0x26,0x37,0x30, 0x29,0x3b,0x27,0x25,0x2c,0xf4,0xf4,0xf4,0xff,0xff,0xff,0xff,0xff,0xff,0xce,0xce, 0xce,0x22,0x1d,0x2a,0x49,0x3f,0x5a,0x5d,0x51,0x74,0x60,0x53,0x77,0x60,0x53,0x77, 0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x62, 0x53,0x77,0x64,0x53,0x76,0x64,0x4f,0x6e,0x57,0x50,0x79,0x66,0x73,0x97,0x0b,0x0c, 0x0e,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x04,0x05,0x47,0x3a,0x49,0x73,0x69,0x89, 0x68,0x69,0x8f,0x6a,0x56,0x6b,0xc5,0xc9,0xd7,0xa5,0xad,0xc3,0x5a,0x65,0x8e,0x65, 0x71,0x97,0x08,0x07,0x09,0x75,0x60,0x78,0x65,0x51,0x64,0x52,0x40,0x4f,0x4b,0x3a, 0x48,0x48,0x38,0x44,0x47,0x37,0x44,0x44,0x34,0x3f,0x41,0x32,0x3d,0x3f,0x30,0x3a, 0x3c,0x2e,0x38,0x3e,0x2f,0x39,0x37,0x29,0x32,0x2e,0x22,0x29,0xae,0xb2,0xc2,0x72, 0x7d,0xa0,0x5b,0x66,0x8e,0x51,0x5c,0x84,0x3a,0x43,0x60,0x4d,0x52,0x7b,0x14,0x13, 0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0xa5, 0xab,0xbd,0xab,0xb3,0xc8,0x9d,0xa5,0xbe,0x9c,0xa5,0xbe,0xa9,0xb0,0xc6,0xa7,0xaf, 0xc4,0x9d,0xa7,0xbf,0x99,0xa2,0xbb,0xa3,0xab,0xc2,0xb5,0xb3,0xba,0x3c,0x2d,0x37, 0x58,0x46,0x56,0x69,0x55,0x6a,0x64,0x68,0x8c,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x28,0x2d,0x3f, 0x5b,0x48,0x66,0x46,0x34,0x49,0x56,0x3f,0x5a,0x5e,0x46,0x62,0x5d,0x46,0x60,0x5e, 0x46,0x62,0x5e,0x46,0x62,0x5e,0x46,0x62,0x5f,0x47,0x63,0x5f,0x47,0x63,0x60,0x48, 0x64,0x60,0x48,0x64,0x60,0x48,0x65,0x55,0x40,0x58,0x46,0x35,0x4b,0x56,0x44,0x5f, 0x51,0x50,0x7d,0x42,0x44,0x4b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02, 0x02,0x03,0x03,0x03,0x04,0x03,0x03,0x04,0x04,0x05,0x06,0x05,0x05,0x06,0x06,0x06, 0x07,0x07,0x07,0x09,0x07,0x08,0x0a,0x08,0x09,0x0a,0x09,0x0a,0x0c,0x0b,0x0c,0x0e, 0x0c,0x0d,0x0f,0x0d,0x0e,0x11,0x0e,0x0e,0x12,0x0f,0x10,0x13,0x11,0x12,0x15,0x12, 0x13,0x16,0x14,0x16,0x19,0x13,0x15,0x19,0x14,0x15,0x19,0x13,0x15,0x19,0x13,0x15, 0x19,0x13,0x15,0x19,0x30,0x2c,0x36,0x58,0x4c,0x5d,0x76,0x74,0x86,0x54,0x5c,0x7b, 0x4d,0x4e,0x69,0x57,0x59,0x77,0x57,0x59,0x78,0x4c,0x50,0x72,0x52,0x4e,0x6f,0x4b, 0x4c,0x6e,0x50,0x51,0x73,0x4f,0x51,0x72,0x4b,0x4c,0x6e,0x4b,0x4a,0x6b,0x4c,0x49, 0x6a,0x4d,0x4a,0x6a,0x4c,0x49,0x6a,0x4c,0x49,0x69,0x49,0x47,0x68,0x45,0x44,0x64, 0x39,0x3a,0x56,0x3a,0x3d,0x56,0x45,0x47,0x63,0x27,0x2a,0x32,0x2b,0x2e,0x38,0x2a, 0x2e,0x37,0x27,0x2a,0x34,0x2d,0x30,0x3a,0x32,0x35,0x3e,0x37,0x3a,0x42,0x47,0x4a, 0x4f,0x67,0x68,0x6b,0xb1,0xb1,0xb3,0xc1,0xc2,0xc3,0x9a,0x9b,0x9e,0x6a,0x6c,0x72, 0x34,0x37,0x40,0x2a,0x2d,0x36,0x22,0x24,0x2e,0x1d,0x20,0x29,0x1a,0x1d,0x26,0x1a, 0x1a,0x22,0x1a,0x1a,0x22,0x1b,0x1a,0x22,0x1b,0x1a,0x22,0x19,0x19,0x22,0x19,0x1a, 0x23,0x18,0x1a,0x22,0x16,0x16,0x1e,0x15,0x16,0x1d,0x16,0x18,0x1e,0x17,0x19,0x1e, 0x18,0x1a,0x1e,0x21,0x22,0x26,0x15,0x16,0x1a,0x12,0x13,0x17,0x17,0x18,0x1c,0x1e, 0x20,0x24,0x22,0x22,0x26,0x1d,0x1e,0x22,0x10,0x12,0x15,0x07,0x08,0x0a,0x03,0x04, 0x05,0x02,0x02,0x03,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xba,0xba, 0xba,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xc9,0xc9,0xc9,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf3,0xf3,0xf3,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xe4,0xe4,0xe4,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06, 0x06,0x06,0x54,0x5c,0x7b,0x62,0x4a,0x66,0x59,0x43,0x5c,0x49,0x3d,0x56,0x5a,0x57, 0x60,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xce,0xcd,0xce,0x20,0x1c,0x28, 0x34,0x2d,0x41,0x23,0x1e,0x2b,0xb4,0xb4,0xb5,0xff,0xff,0xff,0xff,0xff,0xff,0xfc, 0xfc,0xfc,0x4c,0x4a,0x4f,0x36,0x2f,0x43,0x57,0x4b,0x6b,0x60,0x53,0x77,0x60,0x53, 0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x62,0x53,0x77, 0x62,0x53,0x77,0x63,0x53,0x77,0x64,0x53,0x76,0x64,0x53,0x75,0x64,0x52,0x71,0x54, 0x50,0x79,0x24,0x28,0x38,0x30,0x27,0x31,0x6c,0x5e,0x77,0x68,0x6d,0x93,0x75,0x69, 0x89,0x60,0x4c,0x5f,0x40,0x31,0x3b,0x4a,0x3b,0x47,0xc8,0xcd,0xda,0x83,0x8e,0xac, 0x52,0x52,0x7d,0x57,0x62,0x8b,0x1f,0x1e,0x28,0x75,0x61,0x79,0x6a,0x56,0x6b,0x65, 0x51,0x65,0x5c,0x49,0x5a,0x50,0x3f,0x4d,0x4a,0x39,0x46,0x49,0x38,0x46,0x46,0x36, 0x42,0x45,0x35,0x41,0x41,0x32,0x3d,0x3f,0x30,0x3b,0x3d,0x2e,0x39,0x33,0x26,0x2e, 0x71,0x6d,0x76,0x7c,0x86,0xa7,0x5b,0x66,0x8e,0x54,0x5f,0x88,0x3e,0x43,0x63,0x44, 0x46,0x6a,0x3f,0x3a,0x52,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x73,0x77,0x83,0xb1,0xb8,0xcb,0xa3,0xab,0xc2,0xa3,0xab,0xc2,0xa7, 0xaf,0xc4,0xa7,0xaf,0xc4,0x9d,0xa7,0xbf,0x9c,0xa4,0xbe,0x9c,0xa5,0xbe,0xc9,0xcc, 0xd5,0x3a,0x2c,0x35,0x59,0x46,0x57,0x6a,0x56,0x6b,0x68,0x68,0x8e,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x3d,0x3d,0x5d,0x53,0x3e,0x58,0x48,0x35,0x4d,0x5c,0x45,0x5f, 0x5e,0x46,0x62,0x5f,0x47,0x63,0x5e,0x46,0x62,0x5f,0x47,0x63,0x5f,0x47,0x63,0x5f, 0x47,0x63,0x5f,0x47,0x63,0x60,0x48,0x64,0x60,0x48,0x65,0x60,0x48,0x65,0x53,0x3c, 0x57,0x4c,0x38,0x50,0x5a,0x45,0x60,0x4f,0x4d,0x79,0x42,0x42,0x43,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x04, 0x05,0x06,0x04,0x04,0x05,0x06,0x06,0x07,0x06,0x06,0x07,0x07,0x07,0x09,0x08,0x09, 0x0a,0x0a,0x0a,0x0c,0x0a,0x0b,0x0e,0x0c,0x0d,0x0f,0x0c,0x0e,0x10,0x0e,0x0e,0x12, 0x0e,0x10,0x12,0x0f,0x10,0x13,0x10,0x12,0x15,0x12,0x12,0x16,0x12,0x13,0x16,0x12, 0x13,0x17,0x12,0x13,0x17,0x12,0x14,0x18,0x47,0x3e,0x4c,0x58,0x4c,0x5c,0x6c,0x71, 0x8c,0x4d,0x55,0x74,0x4b,0x4f,0x6e,0x52,0x56,0x77,0x54,0x56,0x77,0x50,0x53,0x75, 0x4c,0x4e,0x70,0x4d,0x50,0x73,0x51,0x54,0x75,0x50,0x51,0x73,0x4b,0x4d,0x71,0x51, 0x4d,0x6e,0x49,0x4a,0x6d,0x49,0x4a,0x6c,0x49,0x4a,0x6c,0x4a,0x49,0x6c,0x49,0x49, 0x6b,0x43,0x44,0x64,0x3a,0x3a,0x57,0x3a,0x3b,0x56,0x41,0x42,0x60,0x22,0x26,0x2f, 0x2b,0x2e,0x39,0x30,0x33,0x3e,0x32,0x36,0x42,0x34,0x37,0x42,0x38,0x3b,0x43,0x46, 0x48,0x4f,0x6d,0x6f,0x73,0x93,0x94,0x96,0xbb,0xbb,0xbc,0xb8,0xb9,0xbb,0x8e,0x8f, 0x93,0x52,0x54,0x5c,0x2a,0x2d,0x36,0x25,0x28,0x32,0x1f,0x22,0x2b,0x1a,0x1e,0x26, 0x19,0x19,0x22,0x1a,0x1a,0x22,0x1c,0x1a,0x22,0x1b,0x1a,0x22,0x19,0x18,0x21,0x16, 0x16,0x1e,0x15,0x16,0x1d,0x12,0x12,0x1a,0x12,0x11,0x17,0x10,0x10,0x16,0x0e,0x0e, 0x13,0x0e,0x0e,0x13,0x0e,0x0f,0x12,0x11,0x12,0x16,0x0e,0x0e,0x12,0x0d,0x0e,0x11, 0x11,0x12,0x16,0x1c,0x1d,0x21,0x21,0x22,0x26,0x1b,0x1c,0x20,0x16,0x17,0x1b,0x0d, 0x0e,0x11,0x05,0x06,0x06,0x02,0x02,0x03,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x18,0xd2, 0xd2,0xd2,0xfc,0xfc,0xfc,0xff,0xff,0xff,0xfd,0xfd,0xfd,0xc1,0xc1,0xc1,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4c,0x4c,0x4c,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xf4,0xf4,0xf4,0x3e,0x3e,0x3e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x1b,0x1b,0x1c,0x50,0x59,0x80,0x5a,0x42,0x5c,0x4f, 0x3b,0x53,0x35,0x2c,0x3d,0x1d,0x19,0x24,0x18,0x15,0x1e,0x1a,0x17,0x21,0x25,0x20, 0x2e,0x34,0x2d,0x41,0x2e,0x28,0x39,0x4e,0x4c,0x51,0xf9,0xf9,0xf9,0xff,0xff,0xff, 0xff,0xff,0xff,0xc5,0xc4,0xc5,0x23,0x1e,0x2b,0x4a,0x40,0x5c,0x5e,0x51,0x74,0x60, 0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x62,0x53, 0x77,0x64,0x53,0x76,0x64,0x53,0x76,0x64,0x53,0x75,0x64,0x53,0x75,0x64,0x53,0x75, 0x64,0x53,0x75,0x63,0x50,0x6e,0x5f,0x5e,0x81,0x78,0x69,0x88,0x60,0x4d,0x5f,0x35, 0x27,0x30,0x37,0x29,0x32,0x3b,0x2c,0x36,0x3f,0x2f,0x3a,0x61,0x55,0x61,0xca,0xcf, 0xdd,0x5f,0x6b,0x92,0x64,0x53,0x75,0x52,0x54,0x7e,0x61,0x68,0x85,0x74,0x60,0x78, 0x68,0x54,0x69,0x67,0x53,0x67,0x67,0x53,0x67,0x65,0x51,0x64,0x56,0x44,0x54,0x4d, 0x3b,0x49,0x4a,0x39,0x47,0x48,0x37,0x44,0x46,0x36,0x42,0x44,0x34,0x40,0x44,0x34, 0x40,0x3a,0x2c,0x35,0x34,0x29,0x30,0x7c,0x86,0xa3,0x5b,0x66,0x8e,0x53,0x5e,0x88, 0x43,0x47,0x6b,0x40,0x40,0x63,0x54,0x50,0x76,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3e,0x41,0x48,0xb2,0xb9,0xcc,0xaa,0xb2,0xc7, 0xa3,0xab,0xc2,0xa5,0xad,0xc4,0xa5,0xad,0xc3,0x9c,0xa5,0xbe,0x99,0xa2,0xbb,0x99, 0xa1,0xbb,0xcf,0xd3,0xdf,0x45,0x38,0x40,0x5a,0x47,0x58,0x6a,0x56,0x6b,0x68,0x66, 0x8c,0x03,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0d,0x0e,0x13,0x54,0x49,0x6d,0x4d,0x38, 0x51,0x4e,0x39,0x53,0x5d,0x46,0x62,0x5f,0x47,0x64,0x5f,0x48,0x64,0x5f,0x47,0x64, 0x60,0x48,0x64,0x5f,0x48,0x64,0x60,0x48,0x64,0x60,0x48,0x65,0x62,0x4a,0x66,0x60, 0x48,0x65,0x62,0x4a,0x66,0x50,0x3c,0x55,0x4e,0x38,0x52,0x5b,0x46,0x62,0x4d,0x54, 0x7e,0x39,0x39,0x3a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x03, 0x02,0x03,0x04,0x02,0x03,0x04,0x04,0x04,0x05,0x04,0x05,0x06,0x05,0x06,0x06,0x06, 0x07,0x08,0x06,0x06,0x08,0x08,0x09,0x0a,0x09,0x0a,0x0b,0x0a,0x0b,0x0d,0x0b,0x0c, 0x0e,0x0c,0x0d,0x0f,0x0e,0x0e,0x11,0x0e,0x0e,0x12,0x0f,0x10,0x13,0x0f,0x11,0x14, 0x0f,0x11,0x14,0x11,0x12,0x16,0x12,0x12,0x16,0x15,0x16,0x1b,0x56,0x48,0x5a,0x59, 0x4b,0x5b,0x5a,0x64,0x85,0x48,0x4c,0x6d,0x4e,0x51,0x73,0x50,0x54,0x77,0x50,0x53, 0x76,0x50,0x54,0x77,0x50,0x54,0x76,0x50,0x53,0x75,0x50,0x53,0x75,0x4f,0x51,0x74, 0x4f,0x51,0x73,0x4c,0x4d,0x71,0x4f,0x50,0x72,0x4d,0x50,0x71,0x4c,0x4d,0x6f,0x4c, 0x4d,0x70,0x4c,0x4d,0x70,0x44,0x44,0x64,0x3b,0x3d,0x59,0x3b,0x3d,0x59,0x3d,0x3f, 0x5e,0x1e,0x20,0x29,0x22,0x26,0x2f,0x2b,0x2e,0x39,0x35,0x39,0x44,0x36,0x3a,0x43, 0x40,0x41,0x47,0x65,0x67,0x6b,0x86,0x88,0x8a,0x7e,0x7f,0x81,0xa4,0xa5,0xa7,0x87, 0x88,0x8c,0x4e,0x51,0x59,0x2b,0x2f,0x38,0x26,0x29,0x33,0x24,0x28,0x32,0x20,0x22, 0x2d,0x1a,0x1d,0x26,0x19,0x19,0x22,0x1e,0x1a,0x23,0x1b,0x19,0x22,0x19,0x18,0x21, 0x16,0x16,0x1e,0x13,0x16,0x1c,0x11,0x12,0x18,0x0e,0x0f,0x14,0x0e,0x0d,0x12,0x0b, 0x0b,0x0f,0x0a,0x0a,0x0e,0x09,0x09,0x0c,0x07,0x08,0x0a,0x08,0x09,0x0b,0x08,0x09, 0x0b,0x09,0x0a,0x0d,0x0b,0x0c,0x0e,0x0e,0x0f,0x12,0x12,0x14,0x17,0x16,0x17,0x1b, 0x16,0x18,0x1c,0x0f,0x10,0x13,0x07,0x07,0x09,0x02,0x02,0x03,0x02,0x02,0x02,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1d,0x1d,0x1d, 0xe2,0xe2,0xe2,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0xf8,0xf8,0xa4,0xa4,0xa4,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xa3,0xa3,0xa3,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xf7,0xf7,0xf7,0x5f,0x5f,0x5f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x37,0x37,0x3a, 0x53,0x4e,0x79,0x59,0x42,0x5c,0x52,0x3d,0x55,0x4e,0x40,0x5c,0x48,0x3e,0x59,0x49, 0x3f,0x5b,0x4b,0x41,0x5d,0x40,0x37,0x4f,0x20,0x1c,0x28,0xc6,0xc6,0xc7,0xfd,0xfd, 0xfd,0xff,0xff,0xff,0xf5,0xf5,0xf5,0x21,0x1e,0x25,0x38,0x31,0x46,0x57,0x4c,0x6c, 0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x62, 0x53,0x77,0x64,0x53,0x76,0x64,0x53,0x76,0x64,0x53,0x73,0x64,0x52,0x72,0x64,0x50, 0x71,0x64,0x52,0x72,0x64,0x52,0x72,0x4e,0x3b,0x4e,0x3a,0x2c,0x35,0x31,0x24,0x2b, 0x30,0x23,0x2b,0x33,0x25,0x2d,0x37,0x29,0x32,0x39,0x2b,0x34,0x3c,0x2d,0x37,0x78, 0x71,0x7c,0xc8,0xcc,0xda,0x52,0x54,0x7e,0x64,0x53,0x76,0x64,0x4c,0x69,0x67,0x72, 0x97,0x72,0x5e,0x75,0x67,0x53,0x68,0x66,0x52,0x66,0x68,0x54,0x68,0x69,0x55,0x6a, 0x69,0x55,0x6a,0x5f,0x4c,0x5e,0x4e,0x3c,0x4a,0x4b,0x3a,0x48,0x49,0x38,0x46,0x47, 0x37,0x44,0x46,0x36,0x42,0x42,0x32,0x3e,0x36,0x28,0x31,0x6b,0x6a,0x79,0x5d,0x69, 0x91,0x53,0x5e,0x88,0x4b,0x4d,0x75,0x42,0x42,0x64,0x56,0x53,0x7f,0x02,0x02,0x03, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x07,0x07,0xac,0xb2, 0xc5,0xb1,0xb8,0xcb,0xad,0xb4,0xc9,0xb0,0xb7,0xca,0xb0,0xb7,0xca,0xa7,0xaf,0xc4, 0x98,0xa1,0xba,0x8c,0x95,0xb2,0xbf,0xc4,0xd5,0x66,0x5c,0x62,0x57,0x44,0x55,0x6a, 0x56,0x6b,0x68,0x66,0x8b,0x02,0x02,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x21, 0x26,0x34,0x5a,0x4a,0x69,0x4c,0x37,0x50,0x52,0x3c,0x55,0x5f,0x47,0x63,0x5f,0x47, 0x64,0x60,0x48,0x64,0x60,0x48,0x64,0x60,0x4a,0x65,0x60,0x48,0x64,0x62,0x4a,0x65, 0x60,0x48,0x65,0x62,0x4a,0x66,0x62,0x4a,0x66,0x60,0x48,0x65,0x50,0x3b,0x53,0x4b, 0x37,0x4f,0x5c,0x4b,0x67,0x4d,0x58,0x7f,0x31,0x32,0x33,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04, 0x04,0x04,0x05,0x05,0x05,0x06,0x06,0x06,0x07,0x06,0x06,0x07,0x07,0x08,0x0a,0x09, 0x0a,0x0b,0x0a,0x0a,0x0d,0x0a,0x0b,0x0d,0x0b,0x0c,0x0e,0x0b,0x0c,0x0f,0x0d,0x0e, 0x10,0x0e,0x0e,0x12,0x0e,0x10,0x12,0x0e,0x10,0x12,0x0e,0x0f,0x13,0x2c,0x27,0x30, 0x57,0x49,0x5b,0x5f,0x55,0x68,0x52,0x5d,0x80,0x47,0x4a,0x69,0x4f,0x54,0x79,0x50, 0x54,0x78,0x50,0x54,0x77,0x50,0x54,0x78,0x50,0x54,0x77,0x50,0x53,0x77,0x4f,0x52, 0x76,0x50,0x53,0x78,0x50,0x53,0x76,0x50,0x52,0x75,0x50,0x52,0x76,0x50,0x53,0x75, 0x4f,0x50,0x73,0x50,0x51,0x74,0x4e,0x4f,0x72,0x44,0x46,0x64,0x3e,0x41,0x5d,0x3d, 0x3f,0x5c,0x3f,0x40,0x5d,0x1e,0x21,0x29,0x22,0x24,0x2e,0x29,0x2c,0x36,0x36,0x3a, 0x45,0x40,0x43,0x4c,0x4c,0x4f,0x54,0x63,0x63,0x68,0x5f,0x61,0x65,0x70,0x71,0x75, 0x67,0x6a,0x6e,0x3b,0x3e,0x45,0x2e,0x32,0x3b,0x28,0x2b,0x36,0x22,0x26,0x31,0x22, 0x26,0x31,0x1e,0x20,0x2b,0x1b,0x1b,0x25,0x1b,0x1a,0x22,0x1d,0x1a,0x22,0x1b,0x19, 0x21,0x16,0x16,0x1e,0x13,0x15,0x1b,0x12,0x13,0x1a,0x0e,0x10,0x15,0x0c,0x0d,0x11, 0x0a,0x0a,0x0e,0x09,0x09,0x0c,0x07,0x07,0x0a,0x06,0x06,0x09,0x06,0x06,0x08,0x06, 0x06,0x08,0x06,0x06,0x09,0x06,0x07,0x09,0x07,0x08,0x0a,0x07,0x08,0x0a,0x09,0x0a, 0x0d,0x0e,0x0e,0x12,0x0f,0x11,0x14,0x0b,0x0c,0x0e,0x06,0x07,0x09,0x04,0x04,0x06, 0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x52,0x52, 0x52,0xea,0xea,0xea,0xfd,0xfd,0xfd,0xff,0xff,0xff,0xf7,0xf7,0xf7,0x9a,0x9a,0x9a, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xbf,0xbf,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xf9,0xf9,0xf9,0x73,0x73,0x73,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x52,0x53,0x5e,0x63,0x53,0x77,0x5c,0x44,0x5e,0x60,0x48,0x64, 0x64,0x53,0x76,0x60,0x53,0x77,0x55,0x4a,0x6a,0x35,0x2e,0x41,0x56,0x54,0x59,0xfa, 0xfa,0xfa,0xff,0xff,0xff,0xfd,0xfd,0xfd,0xa8,0xa7,0xa9,0x28,0x22,0x31,0x4c,0x42, 0x5f,0x5e,0x51,0x74,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77, 0x60,0x53,0x77,0x64,0x53,0x76,0x64,0x53,0x76,0x64,0x53,0x74,0x64,0x50,0x71,0x64, 0x4e,0x6c,0x64,0x4c,0x69,0x64,0x4d,0x6b,0x63,0x4b,0x67,0x1d,0x13,0x17,0x48,0x37, 0x44,0x31,0x24,0x2b,0x2f,0x22,0x29,0x31,0x24,0x2c,0x34,0x27,0x2f,0x38,0x2a,0x33, 0x3b,0x2c,0x36,0x8f,0x8b,0x97,0xbc,0xc3,0xd3,0x55,0x50,0x79,0x52,0x50,0x7b,0x62, 0x4a,0x66,0x52,0x4f,0x7a,0x70,0x65,0x80,0x67,0x53,0x67,0x68,0x54,0x69,0x69,0x55, 0x6a,0x6b,0x56,0x6b,0x6a,0x55,0x6b,0x69,0x55,0x6a,0x67,0x53,0x67,0x57,0x44,0x55, 0x4e,0x3c,0x4a,0x4c,0x3b,0x49,0x4c,0x3b,0x48,0x4a,0x39,0x47,0x40,0x31,0x3b,0x44, 0x39,0x40,0x74,0x80,0xa1,0x52,0x5d,0x88,0x50,0x50,0x79,0x42,0x42,0x64,0x4a,0x48, 0x70,0x2c,0x28,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x79,0x7c,0x88,0xbb,0xc1,0xd2,0xba,0xc0,0xd1,0xbb,0xc1,0xd2,0xbf,0xc4, 0xd5,0xb5,0xbc,0xcf,0x9d,0xa7,0xbf,0x81,0x8b,0xaa,0xa4,0xac,0xc2,0x86,0x7f,0x84, 0x53,0x41,0x50,0x69,0x55,0x6a,0x75,0x69,0x89,0x05,0x05,0x06,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x39,0x41,0x5c,0x5d,0x4d,0x6c,0x48,0x35,0x4c,0x5a, 0x43,0x5d,0x60,0x48,0x65,0x60,0x48,0x64,0x60,0x48,0x65,0x60,0x4a,0x65,0x62,0x4a, 0x65,0x62,0x4a,0x65,0x60,0x4a,0x65,0x62,0x4a,0x66,0x62,0x4b,0x66,0x63,0x4b,0x67, 0x60,0x4a,0x65,0x4e,0x39,0x52,0x4c,0x38,0x52,0x60,0x4f,0x71,0x4e,0x58,0x7f,0x29, 0x2a,0x2d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x03,0x04,0x03,0x03, 0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x05,0x05,0x06,0x06,0x06,0x07, 0x07,0x07,0x09,0x07,0x08,0x0a,0x08,0x09,0x0a,0x08,0x09,0x0a,0x0a,0x0a,0x0d,0x0a, 0x0b,0x0e,0x0b,0x0c,0x0e,0x0b,0x0c,0x0e,0x0d,0x0e,0x11,0x0e,0x0e,0x12,0x0d,0x0e, 0x11,0x44,0x3a,0x48,0x57,0x49,0x5a,0x6d,0x6d,0x83,0x4f,0x59,0x7e,0x46,0x4e,0x6c, 0x50,0x58,0x7c,0x50,0x59,0x7d,0x4f,0x54,0x79,0x50,0x59,0x7c,0x50,0x54,0x78,0x50, 0x55,0x7a,0x50,0x55,0x7a,0x51,0x55,0x79,0x53,0x56,0x7a,0x54,0x57,0x7a,0x54,0x56, 0x78,0x53,0x55,0x77,0x52,0x54,0x76,0x52,0x53,0x76,0x51,0x52,0x75,0x44,0x45,0x64, 0x42,0x44,0x61,0x43,0x45,0x61,0x44,0x46,0x64,0x26,0x29,0x32,0x29,0x2c,0x36,0x32, 0x35,0x3f,0x3c,0x40,0x4a,0x4a,0x4d,0x55,0x4f,0x51,0x57,0x52,0x53,0x58,0x4c,0x4e, 0x53,0x42,0x45,0x4b,0x36,0x3a,0x42,0x2d,0x30,0x39,0x26,0x2a,0x34,0x22,0x25,0x30, 0x1f,0x22,0x2e,0x1f,0x21,0x2c,0x1e,0x1e,0x29,0x1b,0x1a,0x23,0x1e,0x1b,0x24,0x1e, 0x1a,0x22,0x1a,0x17,0x1e,0x17,0x16,0x1d,0x12,0x12,0x18,0x0f,0x11,0x16,0x0d,0x0e, 0x12,0x0a,0x0b,0x0f,0x09,0x0a,0x0c,0x06,0x06,0x09,0x06,0x06,0x08,0x06,0x06,0x07, 0x05,0x05,0x06,0x05,0x05,0x06,0x05,0x05,0x06,0x05,0x05,0x06,0x05,0x06,0x07,0x05, 0x05,0x06,0x05,0x06,0x07,0x06,0x07,0x09,0x09,0x0a,0x0b,0x0a,0x0a,0x0d,0x09,0x0a, 0x0b,0x08,0x09,0x0a,0x06,0x06,0x07,0x02,0x02,0x03,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70, 0x70,0x70,0xf0,0xf0,0xf0,0xff,0xff,0xff,0xfd,0xfd,0xfd,0xf2,0xf2,0xf2,0x64,0x64, 0x64,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x89,0x89,0x89,0xfd,0xfd,0xfd,0xff,0xff, 0xff,0xff,0xff,0xff,0xf9,0xf9,0xf9,0x8c,0x8c,0x8c,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x67,0x6a,0x7d,0x64,0x52, 0x71,0x5d,0x45,0x5f,0x60,0x48,0x65,0x5f,0x50,0x73,0x46,0x3d,0x57,0x1f,0x1b,0x27, 0xd9,0xd9,0xd9,0xff,0xff,0xff,0xff,0xff,0xff,0xf1,0xf1,0xf1,0x1f,0x1c,0x25,0x3d, 0x35,0x4c,0x59,0x4d,0x6f,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53, 0x77,0x60,0x53,0x77,0x62,0x53,0x77,0x64,0x53,0x76,0x64,0x53,0x75,0x64,0x50,0x71, 0x64,0x4e,0x6c,0x5b,0x45,0x5f,0x3d,0x2c,0x41,0x44,0x32,0x48,0x5d,0x45,0x60,0x2f, 0x23,0x2c,0x45,0x35,0x41,0x2b,0x1f,0x26,0x2d,0x21,0x28,0x31,0x24,0x2b,0x34,0x26, 0x2e,0x37,0x29,0x32,0x3a,0x2c,0x36,0xa2,0xa2,0xb0,0x9a,0xa3,0xbc,0x52,0x53,0x7d, 0x78,0x82,0xa2,0x52,0x4f,0x7a,0x63,0x4b,0x67,0x6b,0x72,0x95,0x69,0x55,0x6a,0x69, 0x55,0x6a,0x6a,0x55,0x6a,0x6a,0x55,0x6b,0x6b,0x56,0x6c,0x6b,0x56,0x6b,0x6a,0x55, 0x6a,0x68,0x54,0x69,0x60,0x4c,0x5f,0x52,0x40,0x4f,0x4e,0x3d,0x4b,0x4d,0x3c,0x4a, 0x4a,0x3a,0x47,0x3c,0x2d,0x37,0x8b,0x8a,0x96,0x5a,0x65,0x8e,0x52,0x52,0x7b,0x47, 0x46,0x6c,0x46,0x44,0x69,0x4c,0x46,0x64,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x3d,0x3e,0x44,0xc1,0xc7,0xd6,0xc4,0xca,0xd8,0xc2, 0xc8,0xd7,0xcf,0xd3,0xdf,0xca,0xcf,0xdb,0x8d,0x98,0xb3,0x5b,0x67,0x8e,0x55,0x60, 0x8a,0x80,0x7f,0x8c,0x4b,0x3a,0x48,0x68,0x54,0x68,0x78,0x69,0x87,0x1a,0x1c,0x22, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x08,0x0a,0x4a,0x54,0x78, 0x56,0x46,0x64,0x4c,0x38,0x50,0x5f,0x48,0x63,0x62,0x4a,0x66,0x62,0x4a,0x66,0x62, 0x4a,0x66,0x62,0x4a,0x66,0x60,0x4a,0x65,0x62,0x4a,0x66,0x62,0x4a,0x66,0x63,0x4b, 0x67,0x63,0x4b,0x67,0x63,0x4b,0x69,0x62,0x4a,0x66,0x4f,0x3c,0x56,0x4f,0x3c,0x55, 0x62,0x50,0x74,0x50,0x5c,0x82,0x26,0x26,0x27,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02, 0x02,0x02,0x02,0x02,0x03,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x03, 0x04,0x05,0x05,0x06,0x05,0x06,0x06,0x06,0x06,0x07,0x07,0x08,0x0a,0x08,0x09,0x0a, 0x09,0x0a,0x0b,0x0a,0x0a,0x0c,0x0a,0x0b,0x0e,0x0a,0x0a,0x0d,0x0b,0x0c,0x0e,0x0b, 0x0c,0x0e,0x15,0x14,0x19,0x57,0x49,0x5a,0x55,0x47,0x58,0x76,0x7d,0x97,0x4a,0x53, 0x75,0x48,0x51,0x72,0x50,0x59,0x7f,0x50,0x5a,0x7e,0x50,0x59,0x7e,0x51,0x5a,0x7e, 0x50,0x58,0x7b,0x50,0x58,0x7c,0x50,0x55,0x7a,0x51,0x57,0x7b,0x54,0x59,0x7d,0x56, 0x5a,0x7f,0x57,0x5b,0x7e,0x57,0x5a,0x7c,0x55,0x57,0x79,0x54,0x55,0x78,0x54,0x54, 0x77,0x44,0x46,0x62,0x44,0x46,0x62,0x48,0x4a,0x66,0x4a,0x4c,0x69,0x2f,0x33,0x3e, 0x34,0x38,0x42,0x3a,0x3e,0x49,0x43,0x46,0x50,0x4f,0x52,0x5a,0x52,0x55,0x5a,0x52, 0x53,0x58,0x45,0x46,0x4e,0x35,0x37,0x3f,0x2a,0x2d,0x36,0x22,0x25,0x2f,0x1f,0x22, 0x2d,0x1e,0x1e,0x2a,0x1e,0x1e,0x29,0x1e,0x1d,0x27,0x1e,0x1e,0x27,0x1e,0x1b,0x23, 0x1d,0x1a,0x21,0x1d,0x19,0x20,0x1a,0x16,0x1c,0x17,0x14,0x1a,0x11,0x10,0x16,0x0e, 0x0e,0x13,0x0b,0x0c,0x10,0x09,0x0a,0x0d,0x07,0x08,0x0a,0x06,0x06,0x08,0x05,0x05, 0x06,0x04,0x04,0x06,0x04,0x04,0x06,0x04,0x04,0x06,0x03,0x03,0x05,0x03,0x04,0x05, 0x03,0x04,0x05,0x03,0x03,0x04,0x03,0x03,0x04,0x04,0x04,0x05,0x06,0x07,0x09,0x0a, 0x0a,0x0d,0x0c,0x0d,0x0f,0x0c,0x0d,0x0f,0x09,0x0a,0x0b,0x04,0x05,0x06,0x02,0x02, 0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x70,0x70,0x70,0xf8,0xf8,0xf8,0xfd,0xfd,0xfd,0xff,0xff,0xff,0xe8,0xe8,0xe8,0x4b, 0x4b,0x4b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc9, 0xc9,0xc9,0xf5,0xf5,0xf5,0xe9,0xe9,0xe9,0x76,0x76,0x76,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06, 0x06,0x06,0x59,0x5f,0x7b,0x56,0x42,0x5b,0x53,0x3e,0x55,0x51,0x3d,0x55,0x32,0x2a, 0x3d,0x78,0x77,0x7a,0xfd,0xfd,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0x9b,0x9a,0x9c, 0x2b,0x25,0x35,0x4f,0x44,0x62,0x5e,0x52,0x75,0x60,0x53,0x77,0x60,0x53,0x77,0x60, 0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x62,0x53,0x77,0x64,0x53,0x76,0x64,0x52, 0x72,0x64,0x4e,0x6c,0x62,0x4b,0x66,0x2e,0x20,0x32,0x2e,0x20,0x32,0x2c,0x1e,0x30, 0x22,0x17,0x23,0x43,0x34,0x40,0x3a,0x2c,0x36,0x2a,0x1e,0x24,0x2c,0x20,0x27,0x2e, 0x22,0x28,0x32,0x25,0x2d,0x35,0x27,0x2f,0x3a,0x2c,0x35,0xb7,0xbb,0xcb,0x66,0x73, 0x98,0x5d,0x6a,0x91,0x68,0x70,0x87,0x7c,0x85,0xa7,0x62,0x53,0x77,0x52,0x53,0x7e, 0x68,0x54,0x69,0x6c,0x57,0x6d,0x6b,0x56,0x6c,0x6c,0x57,0x6d,0x6c,0x58,0x6d,0x6c, 0x57,0x6d,0x6b,0x56,0x6c,0x6a,0x55,0x6a,0x69,0x54,0x69,0x67,0x53,0x68,0x59,0x46, 0x57,0x51,0x3f,0x4e,0x4f,0x3e,0x4c,0x47,0x37,0x44,0x54,0x49,0x50,0x79,0x83,0xa4, 0x52,0x54,0x7e,0x4e,0x4c,0x75,0x45,0x43,0x68,0x52,0x4e,0x76,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x08,0xbf,0xc2,0xce, 0xdb,0xdf,0xe8,0xd0,0xd5,0xe0,0x9d,0xa7,0xbf,0x69,0x75,0x9a,0x53,0x5e,0x88,0x52, 0x56,0x82,0x52,0x52,0x7d,0x6f,0x75,0x90,0x46,0x36,0x42,0x66,0x51,0x66,0x77,0x62, 0x7b,0x45,0x4b,0x5e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x1e,0x20,0x26,0x4d,0x4d,0x77,0x4b,0x38,0x50,0x53,0x3d,0x56,0x62,0x4b,0x66, 0x62,0x4a,0x66,0x62,0x4a,0x66,0x62,0x4b,0x66,0x62,0x4a,0x66,0x62,0x4b,0x66,0x63, 0x4b,0x67,0x63,0x4b,0x67,0x63,0x4b,0x67,0x63,0x4b,0x69,0x64,0x4c,0x69,0x62,0x4b, 0x69,0x4d,0x3b,0x55,0x4e,0x3d,0x57,0x63,0x52,0x75,0x50,0x5d,0x81,0x21,0x22,0x23, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x04,0x02,0x02,0x03,0x03, 0x03,0x04,0x03,0x03,0x04,0x04,0x05,0x06,0x04,0x05,0x06,0x05,0x06,0x06,0x06,0x06, 0x07,0x07,0x07,0x09,0x07,0x08,0x0a,0x08,0x09,0x0a,0x09,0x0a,0x0b,0x0a,0x0a,0x0d, 0x0a,0x0b,0x0e,0x0a,0x0b,0x0e,0x30,0x29,0x32,0x56,0x46,0x58,0x5a,0x4b,0x5c,0x6e, 0x79,0x98,0x44,0x4c,0x6a,0x4c,0x55,0x79,0x50,0x59,0x7f,0x50,0x5a,0x7f,0x50,0x59, 0x7f,0x50,0x5a,0x7e,0x50,0x5b,0x7e,0x51,0x58,0x7d,0x51,0x5a,0x7f,0x51,0x56,0x7d, 0x53,0x58,0x7d,0x55,0x5a,0x7f,0x58,0x5c,0x80,0x56,0x5b,0x7d,0x54,0x58,0x7a,0x55, 0x57,0x79,0x54,0x56,0x78,0x44,0x47,0x63,0x45,0x47,0x64,0x49,0x4b,0x68,0x49,0x4b, 0x65,0x2f,0x32,0x3c,0x35,0x38,0x42,0x3a,0x3e,0x47,0x44,0x47,0x50,0x4c,0x4e,0x56, 0x4d,0x4f,0x56,0x47,0x49,0x50,0x38,0x3b,0x44,0x2a,0x2e,0x37,0x1f,0x22,0x2d,0x1e, 0x1d,0x28,0x1e,0x1e,0x28,0x1e,0x1d,0x26,0x1e,0x1c,0x26,0x1e,0x1c,0x26,0x1f,0x1c, 0x24,0x1e,0x1a,0x22,0x1d,0x19,0x1f,0x1b,0x16,0x1d,0x1a,0x16,0x1a,0x16,0x13,0x18, 0x11,0x10,0x15,0x0c,0x0c,0x10,0x0a,0x0b,0x0e,0x08,0x08,0x0b,0x07,0x07,0x0a,0x06, 0x06,0x07,0x04,0x04,0x06,0x04,0x04,0x06,0x03,0x03,0x05,0x03,0x04,0x05,0x03,0x03, 0x04,0x03,0x03,0x04,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x03,0x04, 0x05,0x06,0x06,0x08,0x09,0x0a,0x0b,0x0c,0x0e,0x0b,0x0c,0x0e,0x0a,0x0a,0x0c,0x05, 0x06,0x06,0x03,0x03,0x04,0x02,0x03,0x03,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x02,0x02,0x03,0x06,0x06,0x07,0x07,0x07,0x09,0x06,0x07,0x08,0x05, 0x06,0x06,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x79,0x79,0x79,0xfc,0xfc,0xfc,0xff,0xff,0xff,0xfd,0xfd,0xfd,0xd5,0xd5,0xd5, 0x0a,0x0a,0x0a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x2a,0x2e,0x41,0x39,0x2b,0x3c,0x36, 0x28,0x37,0x1c,0x15,0x1d,0xe8,0xe8,0xe8,0xff,0xff,0xff,0xff,0xff,0xff,0xeb,0xeb, 0xeb,0x1a,0x16,0x20,0x41,0x38,0x50,0x5a,0x4e,0x70,0x60,0x53,0x77,0x60,0x53,0x77, 0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x62,0x53,0x77,0x64,0x53,0x76,0x64, 0x53,0x75,0x64,0x50,0x71,0x64,0x4c,0x69,0x50,0x3d,0x54,0x2d,0x20,0x31,0x2c,0x1f, 0x31,0x29,0x1c,0x2c,0x0b,0x05,0x07,0x46,0x37,0x43,0x30,0x23,0x2a,0x28,0x1d,0x23, 0x2b,0x1f,0x25,0x2d,0x21,0x27,0x32,0x25,0x2d,0x36,0x28,0x31,0x4e,0x43,0x4e,0xbe, 0xc3,0xd3,0x52,0x58,0x83,0x75,0x81,0xa3,0x3a,0x42,0x59,0x7f,0x83,0xa2,0x5e,0x6b, 0x92,0x64,0x50,0x71,0x63,0x63,0x83,0x6b,0x57,0x6c,0x6d,0x58,0x6f,0x6c,0x58,0x6d, 0x6c,0x57,0x6d,0x6b,0x57,0x6d,0x6a,0x56,0x6b,0x6b,0x56,0x6c,0x6a,0x55,0x6a,0x69, 0x54,0x69,0x68,0x54,0x69,0x63,0x4f,0x62,0x54,0x42,0x51,0x4e,0x3d,0x4b,0x41,0x32, 0x3d,0x94,0x95,0xa4,0x55,0x62,0x8b,0x50,0x4e,0x78,0x46,0x44,0x69,0x4b,0x49,0x70, 0x26,0x23,0x31,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x80,0x81,0x85,0xe5,0xe7,0xee,0x77,0x82,0xa4,0x54,0x5f,0x89,0x52,0x5a,0x84, 0x52,0x53,0x7d,0x52,0x4f,0x7a,0x64,0x53,0x76,0x64,0x6f,0x94,0x46,0x36,0x41,0x62, 0x4e,0x61,0x72,0x5e,0x75,0x68,0x6d,0x92,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x36,0x47,0x57,0x4b,0x6c,0x46,0x34, 0x4b,0x57,0x40,0x5c,0x63,0x4b,0x67,0x64,0x4c,0x69,0x63,0x4b,0x67,0x63,0x4b,0x67, 0x63,0x4b,0x67,0x63,0x4b,0x67,0x63,0x4b,0x69,0x63,0x4c,0x69,0x64,0x4c,0x69,0x64, 0x4c,0x69,0x64,0x4d,0x6b,0x62,0x4d,0x6c,0x52,0x40,0x5b,0x53,0x43,0x5f,0x60,0x52, 0x75,0x4f,0x59,0x7f,0x1c,0x1c,0x1d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x03,0x03,0x04,0x04,0x05,0x06,0x04, 0x05,0x06,0x05,0x06,0x06,0x06,0x06,0x07,0x06,0x06,0x08,0x07,0x07,0x09,0x08,0x09, 0x0a,0x09,0x0a,0x0b,0x08,0x09,0x0a,0x0a,0x0a,0x0c,0x4b,0x3d,0x4c,0x56,0x46,0x58, 0x7b,0x76,0x87,0x58,0x63,0x86,0x43,0x4c,0x6c,0x50,0x5b,0x81,0x51,0x5b,0x82,0x50, 0x5b,0x81,0x51,0x5b,0x82,0x50,0x5b,0x81,0x51,0x5b,0x80,0x50,0x5b,0x80,0x50,0x59, 0x7e,0x50,0x5a,0x7f,0x51,0x5a,0x7f,0x53,0x58,0x7c,0x53,0x57,0x7b,0x53,0x56,0x79, 0x52,0x56,0x78,0x54,0x56,0x78,0x54,0x56,0x75,0x47,0x48,0x64,0x46,0x49,0x63,0x4b, 0x4d,0x6a,0x3e,0x40,0x56,0x28,0x2b,0x33,0x2b,0x2e,0x36,0x30,0x33,0x3c,0x36,0x3a, 0x42,0x3a,0x3c,0x45,0x39,0x3d,0x45,0x34,0x37,0x40,0x2a,0x2d,0x36,0x1e,0x1f,0x2a, 0x1e,0x1d,0x26,0x22,0x1e,0x26,0x23,0x1f,0x28,0x21,0x1d,0x25,0x1e,0x1a,0x22,0x1e, 0x1a,0x22,0x1e,0x1a,0x22,0x1d,0x19,0x20,0x1b,0x17,0x1e,0x1a,0x16,0x1c,0x19,0x15, 0x1a,0x15,0x12,0x17,0x11,0x0f,0x14,0x0a,0x0a,0x0e,0x09,0x09,0x0c,0x07,0x08,0x0a, 0x06,0x06,0x08,0x05,0x05,0x06,0x04,0x04,0x06,0x03,0x03,0x05,0x03,0x03,0x05,0x02, 0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x03,0x03,0x04,0x05,0x06,0x06,0x08,0x09,0x0a,0x0b,0x0a,0x0a,0x0c, 0x09,0x09,0x0a,0x06,0x07,0x08,0x05,0x06,0x06,0x06,0x06,0x06,0x05,0x05,0x06,0x02, 0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x03,0x03,0x04,0x04,0x04,0x05,0x07,0x07,0x09,0x0b,0x0c,0x0e,0x0e,0x0e,0x11, 0x0e,0x10,0x12,0x11,0x12,0x15,0x0a,0x0a,0x0b,0x02,0x02,0x02,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02, 0x02,0x02,0x99,0x99,0x99,0xfc,0xfc,0xfc,0xff,0xff,0xff,0xfd,0xfd,0xfd,0xd1,0xd1, 0xd1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66,0xba,0xba,0xba, 0x19,0x1c,0x28,0x1d,0x16,0x1e,0x93,0x92,0x93,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0x7d,0x7c,0x7f,0x30,0x29,0x3b,0x52,0x47,0x66,0x5f,0x52,0x76,0x60,0x53, 0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x62,0x53,0x77,0x62,0x53,0x77, 0x64,0x53,0x76,0x64,0x53,0x73,0x64,0x4f,0x6d,0x62,0x4b,0x66,0x32,0x24,0x36,0x2d, 0x21,0x31,0x2b,0x1e,0x2e,0x23,0x18,0x24,0x1c,0x15,0x1a,0x42,0x32,0x3d,0x28,0x1d, 0x23,0x27,0x1c,0x21,0x2a,0x1e,0x24,0x2c,0x20,0x26,0x2f,0x22,0x29,0x34,0x27,0x2f, 0x75,0x70,0x7d,0xb2,0xb9,0xcc,0x52,0x50,0x7b,0xa0,0xa8,0xbf,0x31,0x20,0x2e,0x59, 0x45,0x5a,0x99,0xa2,0xbb,0x64,0x53,0x76,0x53,0x4f,0x79,0x6b,0x56,0x6c,0x6d,0x58, 0x6e,0x6e,0x59,0x70,0x6e,0x59,0x6f,0x6d,0x58,0x6e,0x6d,0x58,0x6e,0x6c,0x57,0x6d, 0x6b,0x56,0x6c,0x6a,0x55,0x6b,0x6a,0x55,0x6a,0x68,0x54,0x69,0x68,0x53,0x68,0x5c, 0x49,0x5a,0x4d,0x3b,0x49,0x64,0x59,0x63,0x63,0x6f,0x95,0x52,0x52,0x7c,0x49,0x49, 0x6e,0x46,0x45,0x6a,0x4a,0x47,0x68,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x25,0x26,0x28,0xb5,0xbc,0xcf,0x5a,0x66,0x8e,0x52,0x53, 0x7e,0x52,0x4f,0x7b,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x63,0x4b,0x69,0x52,0x55,0x80, 0x5a,0x4f,0x5c,0x5e,0x4b,0x5d,0x70,0x5b,0x72,0x78,0x69,0x88,0x2f,0x32,0x3c,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3e, 0x46,0x63,0x55,0x46,0x64,0x4a,0x36,0x4d,0x5e,0x47,0x63,0x63,0x4b,0x67,0x64,0x4c, 0x6a,0x64,0x4c,0x69,0x63,0x4b,0x67,0x63,0x4b,0x67,0x64,0x4c,0x69,0x64,0x4d,0x6a, 0x64,0x4f,0x6d,0x64,0x4f,0x6d,0x64,0x4e,0x6d,0x64,0x50,0x71,0x60,0x4d,0x6b,0x4e, 0x3d,0x57,0x50,0x40,0x5c,0x60,0x50,0x75,0x4d,0x57,0x7a,0x1a,0x1a,0x1b,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x03,0x04,0x04,0x05,0x03,0x04,0x04,0x04,0x04,0x06,0x05,0x06,0x06,0x06, 0x06,0x07,0x06,0x06,0x07,0x07,0x07,0x09,0x07,0x08,0x0a,0x1a,0x16,0x1c,0x55,0x45, 0x56,0x57,0x47,0x58,0x82,0x87,0x9f,0x4e,0x59,0x7a,0x4b,0x54,0x76,0x52,0x5c,0x82, 0x51,0x5c,0x83,0x51,0x5c,0x82,0x51,0x5a,0x81,0x50,0x5a,0x80,0x51,0x5b,0x80,0x51, 0x5b,0x81,0x50,0x59,0x7e,0x50,0x5a,0x7f,0x50,0x5a,0x7e,0x50,0x58,0x7d,0x4f,0x54, 0x79,0x4f,0x53,0x79,0x4f,0x52,0x76,0x50,0x53,0x77,0x4b,0x4e,0x6c,0x42,0x44,0x61, 0x43,0x45,0x60,0x47,0x48,0x6a,0x24,0x27,0x30,0x20,0x22,0x29,0x22,0x25,0x2c,0x24, 0x27,0x2f,0x28,0x2b,0x35,0x26,0x2a,0x34,0x24,0x27,0x32,0x20,0x22,0x2d,0x1e,0x1e, 0x29,0x1f,0x1d,0x26,0x20,0x1c,0x25,0x20,0x1b,0x22,0x1f,0x1a,0x22,0x1e,0x19,0x1f, 0x1b,0x18,0x1e,0x1b,0x17,0x1e,0x1b,0x17,0x1e,0x1b,0x17,0x1d,0x1a,0x16,0x1c,0x1a, 0x16,0x1c,0x19,0x15,0x1a,0x14,0x12,0x16,0x0f,0x0e,0x12,0x0a,0x0a,0x0e,0x08,0x08, 0x0b,0x06,0x06,0x09,0x05,0x05,0x06,0x04,0x04,0x06,0x04,0x04,0x06,0x03,0x03,0x04, 0x03,0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x04,0x04,0x06,0x06,0x07, 0x08,0x08,0x09,0x0a,0x08,0x09,0x0a,0x06,0x07,0x09,0x06,0x06,0x06,0x06,0x07,0x09, 0x06,0x07,0x09,0x04,0x04,0x05,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x02,0x02,0x03,0x07,0x07,0x09,0x0a,0x0a,0x0d,0x0e,0x10,0x12,0x0d,0x0e, 0x0f,0x0a,0x0a,0x0b,0x0b,0x0c,0x0e,0x12,0x13,0x16,0x0d,0x0e,0x0f,0x03,0x03,0x04, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x0a,0x0a,0x0a,0xc9,0xc9,0xc9,0xff,0xff,0xff,0xff,0xff,0xff,0xfa,0xfa,0xfa,0xab, 0xab,0xab,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6d,0x6d,0x6d,0xec,0xec,0xec,0xfd,0xfd, 0xfd,0x16,0x16,0x16,0x14,0x13,0x15,0x17,0x17,0x1e,0xf2,0xf2,0xf2,0xff,0xff,0xff, 0xff,0xff,0xff,0xe5,0xe4,0xe5,0x1d,0x19,0x24,0x45,0x3c,0x55,0x5c,0x50,0x72,0x60, 0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53, 0x77,0x62,0x53,0x77,0x64,0x53,0x75,0x64,0x52,0x72,0x64,0x4e,0x6c,0x58,0x43,0x5c, 0x2d,0x20,0x31,0x2d,0x20,0x31,0x29,0x1c,0x2c,0x1e,0x13,0x1f,0x39,0x2b,0x34,0x39, 0x2b,0x34,0x26,0x1b,0x20,0x27,0x1c,0x21,0x27,0x1c,0x22,0x2b,0x1f,0x25,0x2f,0x22, 0x29,0x34,0x26,0x2e,0x90,0x8f,0x9f,0x94,0x9d,0xb8,0x54,0x5f,0x89,0xb7,0xbd,0xcf, 0x28,0x16,0x22,0x22,0x11,0x1d,0x73,0x74,0x91,0x52,0x5a,0x84,0x64,0x52,0x72,0x6f, 0x68,0x83,0x6f,0x5a,0x71,0x6f,0x5a,0x71,0x6e,0x59,0x70,0x6e,0x59,0x70,0x6e,0x59, 0x70,0x6d,0x58,0x6e,0x6c,0x57,0x6d,0x6b,0x57,0x6c,0x6b,0x56,0x6c,0x6a,0x55,0x6a, 0x68,0x54,0x69,0x68,0x53,0x68,0x62,0x4e,0x61,0x4a,0x39,0x47,0x6d,0x73,0x8f,0x52, 0x57,0x83,0x4f,0x4f,0x79,0x42,0x42,0x64,0x52,0x52,0x7c,0x05,0x05,0x07,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xbd,0xbd,0xbe,0x66, 0x73,0x98,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x55,0x50,0x79,0x56,0x50,0x79,0x63,0x4b, 0x67,0x5e,0x53,0x79,0x66,0x61,0x72,0x59,0x46,0x57,0x6f,0x5b,0x71,0x76,0x61,0x7a, 0x62,0x67,0x8a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x0b,0x0c,0x0f,0x49,0x49,0x72,0x52,0x41,0x5e,0x4f,0x3c,0x55,0x63, 0x4c,0x69,0x64,0x4c,0x69,0x64,0x4d,0x6a,0x64,0x4c,0x69,0x64,0x4e,0x6c,0x64,0x4e, 0x6c,0x64,0x4e,0x6c,0x64,0x4e,0x6c,0x64,0x4e,0x6c,0x64,0x4f,0x6e,0x64,0x52,0x71, 0x64,0x50,0x6f,0x5e,0x4b,0x69,0x4b,0x3d,0x57,0x50,0x41,0x5e,0x5f,0x4e,0x71,0x4f, 0x5a,0x7c,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x04,0x03,0x03,0x04, 0x03,0x03,0x04,0x04,0x04,0x05,0x05,0x05,0x06,0x05,0x06,0x06,0x06,0x06,0x07,0x36, 0x2c,0x36,0x54,0x44,0x54,0x59,0x49,0x58,0x73,0x7d,0x9a,0x48,0x52,0x73,0x4f,0x59, 0x7e,0x51,0x5c,0x82,0x52,0x5d,0x83,0x51,0x5c,0x83,0x51,0x5c,0x83,0x51,0x5c,0x83, 0x51,0x5c,0x82,0x51,0x5c,0x82,0x50,0x5a,0x81,0x50,0x5b,0x80,0x51,0x5b,0x81,0x50, 0x5a,0x7e,0x50,0x57,0x7d,0x4e,0x54,0x7a,0x4e,0x51,0x77,0x4e,0x51,0x76,0x43,0x45, 0x66,0x3a,0x3c,0x59,0x3c,0x3e,0x5a,0x48,0x4a,0x6d,0x1a,0x1c,0x22,0x1b,0x1e,0x23, 0x1d,0x1f,0x26,0x1f,0x22,0x2a,0x1e,0x22,0x2a,0x1b,0x1e,0x27,0x1a,0x1a,0x24,0x1e, 0x1d,0x26,0x20,0x1d,0x26,0x1f,0x1b,0x22,0x1e,0x1a,0x21,0x1c,0x18,0x1e,0x1a,0x16, 0x1c,0x1a,0x16,0x1b,0x1a,0x16,0x1b,0x1a,0x16,0x1d,0x1a,0x16,0x1c,0x1a,0x16,0x1c, 0x19,0x15,0x1a,0x19,0x15,0x1a,0x17,0x13,0x18,0x13,0x11,0x16,0x0e,0x0d,0x10,0x0a, 0x0a,0x0d,0x07,0x07,0x0a,0x06,0x06,0x08,0x05,0x05,0x06,0x04,0x04,0x06,0x03,0x03, 0x05,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02, 0x03,0x03,0x04,0x05,0x06,0x06,0x06,0x08,0x06,0x06,0x08,0x05,0x06,0x06,0x04,0x04, 0x05,0x06,0x06,0x06,0x07,0x08,0x09,0x06,0x06,0x07,0x03,0x03,0x04,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x03,0x08,0x09,0x0a,0x0c,0x0d,0x0f,0x0d, 0x0e,0x0f,0x05,0x06,0x06,0x02,0x02,0x02,0x05,0x06,0x06,0x0b,0x0c,0x0e,0x0a,0x0b, 0x0e,0x03,0x03,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x1f,0x1f,0x1f,0xde,0xde,0xde,0xfd,0xfd,0xfd,0xff,0xff,0xff,0xf3,0xf3,0xf3, 0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x0c,0x0c,0x0c,0xcc,0xcc,0xcc,0xfc,0xfc,0xfc,0xff, 0xff,0xff,0x8c,0x8c,0x8c,0x00,0x00,0x00,0x00,0x00,0x00,0xaf,0xaf,0xb0,0xff,0xff, 0xff,0xff,0xff,0xff,0xfd,0xfd,0xfd,0x62,0x61,0x64,0x32,0x2c,0x3f,0x54,0x49,0x69, 0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60, 0x53,0x77,0x60,0x53,0x77,0x64,0x53,0x76,0x64,0x53,0x75,0x64,0x50,0x71,0x63,0x4c, 0x68,0x3f,0x2e,0x43,0x2d,0x21,0x31,0x2c,0x1f,0x31,0x27,0x1b,0x29,0x05,0x03,0x04, 0x49,0x38,0x45,0x31,0x24,0x2b,0x26,0x1b,0x20,0x25,0x1a,0x1f,0x27,0x1c,0x22,0x2b, 0x1f,0x25,0x2f,0x22,0x29,0x31,0x24,0x2b,0xa0,0xa5,0xb5,0x64,0x71,0x96,0x5c,0x69, 0x90,0x8a,0x94,0xb0,0x24,0x13,0x20,0x1d,0x0d,0x17,0x30,0x1d,0x2b,0x7e,0x88,0xa8, 0x60,0x53,0x77,0x58,0x61,0x89,0x6f,0x5a,0x71,0x70,0x5b,0x72,0x6f,0x5a,0x71,0x70, 0x5b,0x72,0x6f,0x5a,0x71,0x6d,0x59,0x6f,0x6d,0x58,0x6e,0x6c,0x57,0x6d,0x6b,0x57, 0x6c,0x6b,0x56,0x6c,0x6a,0x55,0x6a,0x69,0x54,0x69,0x67,0x53,0x68,0x5e,0x4b,0x5d, 0x52,0x4c,0x5f,0x52,0x5d,0x86,0x52,0x55,0x80,0x48,0x48,0x6d,0x4e,0x50,0x79,0x38, 0x38,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x50,0x51,0x53,0x8b,0x95,0xb2,0x57,0x50,0x79,0x5e,0x53,0x79,0x55,0x50,0x79,0x5a, 0x52,0x79,0x64,0x4e,0x6d,0x64,0x4d,0x6b,0x5b,0x5c,0x78,0x50,0x3f,0x4d,0x6d,0x59, 0x6f,0x76,0x61,0x79,0x78,0x69,0x88,0x1c,0x1e,0x26,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x24,0x27,0x30,0x4e,0x4d,0x76, 0x4c,0x3c,0x55,0x57,0x45,0x5f,0x64,0x4f,0x6e,0x64,0x4f,0x6e,0x64,0x4f,0x6d,0x64, 0x4e,0x6c,0x64,0x4d,0x6b,0x64,0x50,0x6f,0x64,0x50,0x6f,0x64,0x50,0x6f,0x64,0x4f, 0x6e,0x64,0x4f,0x6e,0x64,0x52,0x71,0x64,0x52,0x72,0x5f,0x4e,0x6e,0x56,0x45,0x63, 0x4f,0x40,0x5d,0x5b,0x4c,0x6f,0x4d,0x58,0x78,0x15,0x15,0x16,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x03,0x03,0x04,0x03,0x03,0x04,0x04,0x04,0x05,0x04,0x05,0x06, 0x0b,0x0a,0x0d,0x51,0x42,0x51,0x53,0x43,0x53,0x81,0x79,0x88,0x5f,0x69,0x87,0x46, 0x4f,0x72,0x50,0x5c,0x81,0x52,0x5d,0x83,0x52,0x5d,0x83,0x52,0x5d,0x83,0x52,0x5c, 0x83,0x51,0x5d,0x83,0x51,0x5c,0x83,0x51,0x5b,0x81,0x51,0x5b,0x81,0x51,0x5c,0x82, 0x51,0x5b,0x81,0x50,0x5a,0x80,0x50,0x5a,0x7e,0x4f,0x58,0x7d,0x4f,0x54,0x7a,0x4e, 0x51,0x76,0x40,0x43,0x62,0x38,0x3a,0x57,0x3b,0x3d,0x58,0x4c,0x4f,0x78,0x17,0x1a, 0x1f,0x1a,0x1b,0x22,0x1a,0x1d,0x23,0x1e,0x21,0x28,0x1c,0x1e,0x26,0x1a,0x1b,0x25, 0x19,0x18,0x21,0x1b,0x19,0x22,0x1d,0x19,0x20,0x1d,0x19,0x1f,0x1a,0x17,0x1d,0x1a, 0x16,0x1b,0x18,0x14,0x1a,0x16,0x14,0x1a,0x16,0x14,0x1a,0x19,0x15,0x1a,0x1a,0x16, 0x1b,0x1a,0x16,0x1b,0x19,0x15,0x1a,0x18,0x14,0x1a,0x16,0x13,0x18,0x12,0x0f,0x13, 0x0d,0x0b,0x0f,0x09,0x09,0x0b,0x07,0x07,0x0a,0x05,0x05,0x06,0x04,0x04,0x06,0x03, 0x03,0x05,0x03,0x03,0x04,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x03,0x04,0x03,0x04,0x05,0x02, 0x03,0x03,0x02,0x02,0x02,0x03,0x04,0x05,0x06,0x06,0x06,0x06,0x06,0x08,0x04,0x05, 0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x06,0x07, 0x08,0x09,0x0a,0x06,0x06,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x03,0x03,0x07, 0x08,0x09,0x07,0x07,0x09,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x47,0x47,0x47,0xf5,0xf5,0xf5,0xfd,0xfd,0xfd,0xff,0xff,0xff,0xe8,0xe8, 0xe8,0x48,0x48,0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7b,0x7b,0x7b,0xf2,0xf2,0xf2,0xff,0xff,0xff, 0xff,0xff,0xff,0xf8,0xf8,0xf8,0x0a,0x0a,0x0a,0x00,0x00,0x00,0x21,0x21,0x21,0xf7, 0xf7,0xf7,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xd1,0xd1,0xd1,0x1f,0x17,0x20,0x4b,0x3d, 0x56,0x5d,0x50,0x73,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77, 0x60,0x53,0x77,0x60,0x53,0x77,0x62,0x53,0x77,0x64,0x53,0x76,0x64,0x53,0x73,0x64, 0x4f,0x6e,0x5e,0x47,0x62,0x2d,0x20,0x31,0x2d,0x21,0x31,0x2c,0x1f,0x30,0x26,0x19, 0x28,0x0c,0x09,0x0b,0x49,0x38,0x46,0x28,0x1d,0x23,0x25,0x1a,0x1f,0x25,0x1a,0x1f, 0x28,0x1d,0x23,0x2b,0x1f,0x25,0x2d,0x21,0x28,0x33,0x25,0x2d,0xa7,0xae,0xc2,0x56, 0x62,0x8b,0x76,0x82,0xa3,0x5d,0x69,0x91,0x1d,0x0d,0x17,0x1c,0x0a,0x16,0x1d,0x0b, 0x17,0x65,0x53,0x73,0x65,0x71,0x96,0x52,0x4f,0x7a,0x6e,0x64,0x80,0x70,0x5b,0x72, 0x70,0x5c,0x73,0x6f,0x5b,0x71,0x6f,0x5a,0x71,0x6f,0x5a,0x71,0x6e,0x59,0x70,0x6e, 0x59,0x70,0x6c,0x58,0x6e,0x6b,0x57,0x6c,0x6b,0x56,0x6c,0x6a,0x55,0x6a,0x66,0x52, 0x66,0x5e,0x4c,0x5d,0x76,0x7b,0x96,0x6a,0x75,0x9a,0x60,0x6c,0x93,0x54,0x61,0x88, 0x4d,0x57,0x7e,0x52,0x52,0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x02,0x02,0x03,0xb4,0xb8,0xc4,0x52,0x57,0x82,0x64,0x53,0x74, 0x5a,0x52,0x79,0x58,0x50,0x79,0x62,0x53,0x77,0x60,0x48,0x64,0x52,0x5c,0x81,0x4d, 0x3c,0x4a,0x6a,0x55,0x6b,0x75,0x60,0x79,0x78,0x64,0x7d,0x5f,0x61,0x83,0x02,0x02, 0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x35,0x3b,0x4d,0x4e,0x48,0x6e,0x4a,0x3b,0x53,0x5f,0x4d,0x6c,0x64,0x4f,0x6e, 0x64,0x50,0x6f,0x64,0x4f,0x6d,0x64,0x52,0x72,0x64,0x4f,0x6e,0x64,0x50,0x6f,0x64, 0x50,0x71,0x64,0x52,0x72,0x64,0x52,0x72,0x64,0x52,0x72,0x64,0x53,0x73,0x64,0x53, 0x73,0x63,0x52,0x71,0x55,0x46,0x64,0x4a,0x3c,0x57,0x5c,0x4e,0x72,0x4b,0x54,0x73, 0x0f,0x0f,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x03, 0x04,0x04,0x04,0x05,0x28,0x1f,0x28,0x52,0x42,0x52,0x53,0x42,0x52,0x92,0x95,0xaa, 0x4d,0x56,0x75,0x4a,0x53,0x79,0x52,0x5d,0x84,0x53,0x5e,0x85,0x52,0x5e,0x85,0x53, 0x5d,0x84,0x53,0x5e,0x84,0x52,0x5c,0x83,0x52,0x5d,0x83,0x52,0x5c,0x83,0x51,0x5c, 0x83,0x51,0x5b,0x82,0x51,0x5b,0x81,0x51,0x5b,0x81,0x50,0x5a,0x81,0x50,0x59,0x7e, 0x4f,0x58,0x7e,0x4f,0x54,0x7b,0x3a,0x3d,0x5b,0x36,0x38,0x56,0x39,0x3a,0x58,0x52, 0x53,0x7c,0x16,0x19,0x1e,0x1a,0x1b,0x22,0x1c,0x1e,0x24,0x1a,0x1d,0x24,0x1a,0x1c, 0x24,0x18,0x18,0x21,0x16,0x15,0x1c,0x18,0x15,0x1b,0x1a,0x16,0x1b,0x1a,0x16,0x1a, 0x18,0x14,0x1a,0x16,0x12,0x18,0x14,0x12,0x16,0x13,0x11,0x16,0x16,0x13,0x18,0x1a, 0x16,0x1b,0x1b,0x16,0x1b,0x1c,0x16,0x1c,0x1a,0x16,0x1a,0x16,0x13,0x18,0x13,0x11, 0x16,0x0f,0x0d,0x11,0x0a,0x0a,0x0e,0x08,0x08,0x0a,0x06,0x06,0x08,0x05,0x05,0x06, 0x04,0x04,0x06,0x03,0x03,0x05,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x02,0x02,0x02,0x05,0x06,0x06,0x06, 0x06,0x07,0x04,0x04,0x05,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02, 0x03,0x03,0x03,0x04,0x04,0x04,0x05,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00, 0x03,0x03,0x04,0x07,0x07,0x09,0x06,0x06,0x07,0x02,0x02,0x02,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x81,0x81, 0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x98,0x98,0x98,0xfc,0xfc,0xfc,0xff,0xff,0xff,0xfc,0xfc,0xfc,0xcd, 0xcd,0xcd,0x10,0x10,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x4b,0x4b,0x4b,0xeb,0xeb,0xeb,0xfd,0xfd,0xfd,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x54,0x54,0x54,0x00,0x00,0x00,0x00,0x00,0x00, 0xba,0xba,0xba,0xff,0xff,0xff,0xfd,0xfd,0xfd,0xfa,0xfa,0xfa,0x53,0x51,0x56,0x32, 0x24,0x34,0x53,0x3d,0x54,0x64,0x53,0x76,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53, 0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x62,0x53,0x77,0x62,0x53,0x77,0x64,0x53,0x76, 0x64,0x52,0x72,0x64,0x4e,0x6c,0x46,0x34,0x4a,0x2d,0x21,0x31,0x2d,0x21,0x31,0x2a, 0x1e,0x2e,0x1d,0x12,0x1e,0x2b,0x20,0x27,0x3f,0x30,0x3a,0x23,0x19,0x1e,0x24,0x19, 0x1e,0x25,0x1a,0x1f,0x27,0x1c,0x21,0x2b,0x1f,0x25,0x2c,0x20,0x27,0x34,0x27,0x2f, 0xa7,0xaf,0xc4,0x52,0x50,0x7c,0x93,0x9c,0xb8,0x5c,0x44,0x5f,0x2e,0x1a,0x2b,0x1c, 0x0a,0x15,0x1c,0x0a,0x15,0x1e,0x0d,0x18,0x7b,0x85,0xa6,0x5e,0x6b,0x92,0x9a,0x9d, 0xb4,0x71,0x5c,0x73,0x70,0x5b,0x72,0x71,0x5c,0x73,0x70,0x5b,0x72,0x70,0x5b,0x72, 0x6f,0x5a,0x71,0x6e,0x59,0x70,0x6d,0x58,0x6e,0x6c,0x57,0x6d,0x6c,0x57,0x6d,0x68, 0x54,0x69,0x5c,0x49,0x5a,0x8f,0x8e,0xa1,0x7d,0x88,0xa8,0x79,0x84,0xa4,0x7d,0x88, 0xa8,0x7c,0x88,0xa8,0x6f,0x7b,0x9a,0x4f,0x51,0x70,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x69,0x69,0x6a,0x69,0x75, 0x9a,0x5c,0x52,0x79,0x60,0x53,0x77,0x53,0x4f,0x7a,0x5b,0x52,0x79,0x5c,0x44,0x5f, 0x52,0x53,0x7e,0x53,0x45,0x54,0x64,0x50,0x64,0x75,0x61,0x79,0x78,0x66,0x80,0x6f, 0x68,0x8a,0x2f,0x32,0x3a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x45,0x4e,0x69,0x4b,0x40,0x63,0x50,0x40, 0x5b,0x64,0x52,0x6f,0x64,0x52,0x72,0x64,0x50,0x71,0x64,0x50,0x71,0x64,0x53,0x73, 0x64,0x53,0x73,0x64,0x52,0x72,0x64,0x52,0x73,0x64,0x52,0x73,0x64,0x53,0x74,0x64, 0x53,0x73,0x64,0x53,0x74,0x64,0x53,0x75,0x64,0x53,0x74,0x56,0x46,0x66,0x50,0x41, 0x5f,0x5c,0x4f,0x73,0x4b,0x54,0x71,0x06,0x06,0x07,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x02,0x02, 0x02,0x03,0x02,0x02,0x03,0x03,0x03,0x04,0x46,0x38,0x45,0x52,0x42,0x51,0x5d,0x4d, 0x5d,0x78,0x81,0x9d,0x44,0x4e,0x6c,0x4f,0x5b,0x82,0x53,0x5e,0x86,0x53,0x5e,0x85, 0x53,0x5d,0x85,0x54,0x5f,0x85,0x54,0x5f,0x85,0x53,0x5f,0x84,0x54,0x5f,0x85,0x52, 0x5c,0x83,0x52,0x5d,0x84,0x51,0x5c,0x83,0x52,0x5c,0x83,0x51,0x5b,0x81,0x50,0x5a, 0x81,0x50,0x5b,0x82,0x50,0x59,0x7f,0x4e,0x56,0x7c,0x37,0x3b,0x5a,0x36,0x37,0x56, 0x3b,0x3b,0x5a,0x55,0x56,0x85,0x15,0x16,0x1c,0x17,0x1a,0x20,0x19,0x1a,0x22,0x19, 0x1b,0x23,0x16,0x17,0x20,0x16,0x15,0x1d,0x16,0x14,0x1a,0x14,0x12,0x16,0x14,0x12, 0x16,0x15,0x12,0x16,0x13,0x11,0x16,0x12,0x10,0x14,0x12,0x11,0x16,0x14,0x12,0x17, 0x17,0x14,0x1a,0x1a,0x16,0x1b,0x1a,0x15,0x1a,0x1a,0x16,0x1b,0x18,0x15,0x1a,0x15, 0x12,0x17,0x12,0x0f,0x14,0x0e,0x0c,0x10,0x09,0x09,0x0c,0x07,0x07,0x0a,0x06,0x06, 0x08,0x05,0x05,0x06,0x03,0x04,0x05,0x03,0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x02,0x02,0x02,0x03,0x03,0x04,0x02,0x02,0x02,0x02,0x02,0x02,0x04,0x04,0x05,0x05, 0x06,0x06,0x04,0x05,0x05,0x04,0x04,0x05,0x02,0x03,0x03,0x02,0x02,0x02,0x00,0x00, 0x00,0x00,0x00,0x00,0x04,0x05,0x05,0x06,0x06,0x07,0x03,0x03,0x04,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0, 0xc0,0xc0,0xfe,0xfe,0xfe,0x79,0x79,0x79,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00, 0x00,0x24,0x24,0x24,0xe2,0xe2,0xe2,0xfa,0xfa,0xfa,0xff,0xff,0xff,0xf8,0xf8,0xf8, 0xa1,0xa1,0xa1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x36,0x36,0x36,0xd1,0xd1,0xd1,0xfd,0xfd,0xfd,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbb,0xbb,0xbb,0x04,0x04,0x04,0x00,0x00, 0x00,0x1f,0x1f,0x1f,0xf8,0xf8,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xc3,0xc3,0xc3, 0x21,0x24,0x2f,0x46,0x3f,0x5d,0x5b,0x43,0x5e,0x60,0x48,0x65,0x64,0x53,0x76,0x60, 0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x62,0x53, 0x77,0x64,0x53,0x75,0x64,0x52,0x72,0x62,0x4b,0x69,0x2d,0x21,0x31,0x2d,0x20,0x31, 0x2c,0x1f,0x31,0x28,0x1b,0x2a,0x07,0x05,0x06,0x3e,0x2f,0x3a,0x31,0x24,0x2b,0x23, 0x19,0x1d,0x22,0x18,0x1c,0x23,0x19,0x1d,0x26,0x1b,0x20,0x28,0x1d,0x22,0x2c,0x20, 0x26,0x52,0x4c,0x58,0x98,0xa1,0xbb,0x52,0x4f,0x7a,0x9d,0xa7,0xbf,0x40,0x2b,0x3e, 0x36,0x22,0x33,0x47,0x30,0x46,0x1e,0x0d,0x18,0x19,0x09,0x14,0x35,0x22,0x33,0x80, 0x8b,0xaa,0xa8,0xad,0xc2,0x6b,0x57,0x6d,0x6c,0x57,0x6d,0x6f,0x5a,0x71,0x6e,0x59, 0x70,0x6f,0x5a,0x71,0x6e,0x5a,0x70,0x6f,0x5a,0x71,0x6e,0x59,0x70,0x6d,0x58,0x6e, 0x6b,0x57,0x6c,0x60,0x4c,0x5f,0x7c,0x76,0x88,0x90,0x99,0xb4,0x77,0x83,0xa4,0x83, 0x8d,0xac,0x82,0x8c,0xab,0x7a,0x85,0xa5,0x58,0x5d,0x7e,0x05,0x04,0x06,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0c, 0x0c,0x0c,0x99,0xa1,0xb4,0x52,0x4f,0x7b,0x63,0x53,0x77,0x54,0x50,0x79,0x52,0x4f, 0x7a,0x62,0x4a,0x66,0x53,0x4f,0x7a,0x5d,0x57,0x6b,0x5c,0x49,0x5a,0x73,0x5e,0x76, 0x78,0x66,0x80,0x72,0x68,0x8a,0x80,0x8a,0xa8,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0x0c,0x0e,0x4c, 0x56,0x79,0x46,0x3b,0x58,0x58,0x48,0x65,0x64,0x53,0x75,0x64,0x53,0x74,0x64,0x53, 0x73,0x64,0x52,0x72,0x64,0x53,0x74,0x64,0x53,0x75,0x64,0x53,0x73,0x64,0x53,0x75, 0x64,0x53,0x74,0x64,0x53,0x75,0x64,0x53,0x76,0x63,0x53,0x77,0x64,0x53,0x76,0x62, 0x53,0x76,0x53,0x46,0x67,0x4c,0x40,0x5f,0x4d,0x4b,0x74,0x48,0x50,0x68,0x03,0x03, 0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x17,0x14,0x17,0x4f,0x3e,0x4d,0x51, 0x40,0x50,0x8f,0x8c,0x99,0x55,0x61,0x7e,0x48,0x51,0x72,0x54,0x60,0x88,0x54,0x61, 0x87,0x54,0x5f,0x86,0x54,0x60,0x86,0x54,0x5f,0x86,0x54,0x60,0x86,0x54,0x60,0x86, 0x54,0x5f,0x86,0x54,0x5f,0x85,0x53,0x5e,0x84,0x52,0x5c,0x83,0x52,0x5c,0x83,0x51, 0x5b,0x83,0x50,0x5b,0x82,0x50,0x5a,0x82,0x50,0x5a,0x80,0x49,0x52,0x76,0x36,0x3b, 0x5b,0x37,0x3a,0x56,0x3a,0x3c,0x5c,0x4f,0x52,0x7d,0x14,0x16,0x1a,0x16,0x18,0x1e, 0x17,0x18,0x21,0x19,0x18,0x21,0x17,0x16,0x1e,0x13,0x13,0x1a,0x11,0x10,0x16,0x11, 0x0f,0x14,0x11,0x0f,0x13,0x11,0x0f,0x13,0x11,0x0e,0x12,0x10,0x0e,0x12,0x12,0x0f, 0x14,0x15,0x12,0x16,0x18,0x14,0x19,0x1a,0x16,0x1a,0x1a,0x16,0x1b,0x19,0x15,0x1a, 0x16,0x13,0x18,0x13,0x11,0x16,0x10,0x0e,0x12,0x0c,0x0b,0x0e,0x09,0x09,0x0c,0x07, 0x07,0x0a,0x06,0x06,0x08,0x04,0x04,0x06,0x03,0x03,0x05,0x02,0x02,0x04,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x04,0x05,0x05,0x06,0x06,0x07,0x06,0x06,0x07,0x05,0x06,0x06,0x05,0x05,0x06,0x03, 0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x03,0x05,0x06,0x06,0x05,0x06,0x06,0x02,0x02, 0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xe7,0xe7,0xe7,0xff,0xff,0xff,0xff,0xff,0xff,0x85,0x85,0x85,0x2c, 0x2c,0x2c,0x72,0x72,0x72,0xfe,0xfe,0xfe,0xfd,0xfd,0xfd,0xfc,0xfc,0xfc,0xe2,0xe2, 0xe2,0x54,0x54,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xb8,0xb8,0xb8,0xfb,0xfb,0xfb,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x30,0x30,0x30,0x00, 0x00,0x00,0x00,0x00,0x00,0xbc,0xbc,0xbc,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xf7, 0xf7,0x36,0x36,0x36,0x0b,0x0b,0x0c,0x56,0x5f,0x7d,0x57,0x50,0x79,0x62,0x4a,0x66, 0x60,0x48,0x65,0x64,0x53,0x75,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x62, 0x53,0x77,0x63,0x53,0x77,0x64,0x53,0x74,0x64,0x50,0x71,0x52,0x3d,0x56,0x2d,0x21, 0x31,0x2d,0x20,0x31,0x2c,0x1f,0x30,0x26,0x19,0x28,0x04,0x03,0x04,0x43,0x34,0x3f, 0x27,0x1b,0x21,0x21,0x17,0x1b,0x22,0x18,0x1c,0x23,0x18,0x1d,0x25,0x1a,0x1f,0x28, 0x1d,0x23,0x2b,0x1f,0x25,0x6d,0x6d,0x7e,0x79,0x84,0xa5,0x52,0x4f,0x7a,0x8c,0x95, 0xb2,0x22,0x10,0x1d,0x0e,0x00,0x07,0x46,0x30,0x45,0x47,0x31,0x46,0x20,0x0f,0x1a, 0x18,0x08,0x12,0x8b,0x94,0xaf,0xa8,0xaf,0xc4,0x72,0x61,0x76,0x6a,0x56,0x6b,0x6c, 0x57,0x6d,0x6c,0x57,0x6d,0x6c,0x57,0x6d,0x6b,0x57,0x6c,0x6b,0x57,0x6c,0x6c,0x57, 0x6d,0x6b,0x57,0x6c,0x62,0x4e,0x62,0x65,0x5b,0x6e,0xa0,0xa8,0xc0,0x7d,0x89,0xa9, 0x7e,0x8a,0xa9,0x82,0x8c,0xab,0x80,0x8b,0xaa,0x67,0x6f,0x90,0x0f,0x0c,0x11,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x6d,0x6e,0x6e,0x5a,0x66,0x8e,0x5b,0x52,0x79,0x5c, 0x52,0x79,0x52,0x50,0x7c,0x64,0x52,0x73,0x5e,0x53,0x79,0x60,0x61,0x7d,0x56,0x43, 0x53,0x71,0x5c,0x73,0x78,0x68,0x85,0x6d,0x67,0x8a,0x83,0x8d,0xac,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x1d,0x1e,0x23,0x48,0x4c,0x72,0x4e,0x40,0x5e,0x5e,0x4d,0x6d,0x64, 0x53,0x74,0x64,0x53,0x74,0x64,0x53,0x75,0x64,0x53,0x76,0x64,0x53,0x76,0x64,0x53, 0x76,0x64,0x53,0x75,0x64,0x53,0x76,0x64,0x53,0x76,0x64,0x53,0x76,0x64,0x53,0x76, 0x62,0x53,0x77,0x60,0x53,0x77,0x5e,0x53,0x77,0x52,0x47,0x6a,0x4b,0x44,0x67,0x4d, 0x4f,0x77,0x4a,0x51,0x62,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x3c,0x2f,0x3a, 0x4f,0x40,0x4d,0x50,0x3f,0x4e,0x95,0x9b,0xb1,0x47,0x50,0x70,0x4e,0x59,0x7f,0x54, 0x60,0x88,0x55,0x61,0x89,0x54,0x61,0x88,0x55,0x61,0x89,0x55,0x61,0x89,0x54,0x61, 0x88,0x54,0x60,0x87,0x54,0x5f,0x86,0x54,0x5f,0x86,0x54,0x60,0x86,0x53,0x5d,0x84, 0x53,0x5d,0x84,0x51,0x5c,0x83,0x51,0x5c,0x82,0x50,0x5a,0x82,0x50,0x5a,0x82,0x44, 0x4e,0x70,0x35,0x3a,0x58,0x34,0x39,0x57,0x3b,0x3f,0x5f,0x3f,0x43,0x63,0x14,0x16, 0x1a,0x13,0x15,0x1b,0x17,0x16,0x1e,0x1a,0x19,0x21,0x17,0x16,0x1d,0x12,0x12,0x17, 0x0e,0x0e,0x12,0x0c,0x0b,0x0f,0x0e,0x0c,0x10,0x0d,0x0b,0x0f,0x0c,0x0b,0x0e,0x0e, 0x0c,0x10,0x11,0x0e,0x12,0x14,0x11,0x16,0x18,0x13,0x19,0x18,0x13,0x18,0x19,0x14, 0x1a,0x16,0x13,0x18,0x13,0x11,0x16,0x12,0x0f,0x14,0x0e,0x0d,0x11,0x0b,0x0a,0x0e, 0x08,0x08,0x0b,0x06,0x06,0x09,0x05,0x05,0x06,0x04,0x04,0x06,0x03,0x03,0x04,0x02, 0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x02,0x02,0x03,0x04,0x05,0x05,0x06,0x06,0x07,0x06,0x06,0x07, 0x06,0x07,0x08,0x06,0x06,0x07,0x04,0x04,0x05,0x02,0x02,0x02,0x02,0x03,0x03,0x02, 0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x95,0x95,0x95,0xfd,0xfd,0xfd,0xff,0xff,0xff, 0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfe,0xfe,0xfe,0xfd,0xfd,0xfd,0xf4,0xf4,0xf4,0xa4, 0xa4,0xa4,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x47,0x47,0x47,0xec,0xec,0xec,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xb1,0xb1,0xb1, 0x03,0x03,0x03,0x00,0x00,0x00,0x21,0x21,0x21,0xf8,0xf8,0xf8,0xff,0xff,0xff,0xff, 0xff,0xff,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00,0x00,0x27,0x26,0x2a,0x62,0x6d, 0x91,0x58,0x50,0x79,0x62,0x4a,0x66,0x62,0x4a,0x65,0x64,0x53,0x75,0x60,0x53,0x77, 0x60,0x53,0x77,0x60,0x53,0x77,0x64,0x53,0x76,0x64,0x53,0x73,0x63,0x4f,0x6d,0x36, 0x28,0x3a,0x2d,0x20,0x31,0x2d,0x20,0x31,0x2b,0x1e,0x2e,0x1d,0x12,0x1d,0x1a,0x14, 0x18,0x3a,0x2c,0x35,0x23,0x18,0x1d,0x21,0x17,0x1b,0x22,0x18,0x1c,0x22,0x18,0x1d, 0x24,0x1a,0x1f,0x27,0x1c,0x21,0x2a,0x1e,0x25,0x7d,0x81,0x97,0x63,0x6e,0x95,0x52, 0x57,0x82,0x71,0x7c,0x9f,0x31,0x1e,0x2d,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x2c, 0x3f,0x45,0x2f,0x44,0x36,0x21,0x33,0xa4,0xac,0xc2,0xa3,0xaa,0xc1,0x72,0x62,0x76, 0x69,0x54,0x69,0x6a,0x56,0x6b,0x6b,0x57,0x6c,0x6b,0x57,0x6c,0x6b,0x56,0x6c,0x6c, 0x57,0x6d,0x6b,0x57,0x6d,0x64,0x50,0x64,0x58,0x4b,0x5d,0xa5,0xab,0xc0,0x77,0x83, 0xa4,0x81,0x8b,0xaa,0x86,0x91,0xaf,0x80,0x8b,0xaa,0x74,0x7f,0x9f,0x1c,0x19,0x23, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x09,0x09,0x88,0x91,0xad, 0x52,0x5d,0x88,0x5c,0x52,0x79,0x52,0x50,0x7b,0x54,0x50,0x79,0x64,0x53,0x74,0x5e, 0x67,0x8a,0x4f,0x3e,0x4c,0x6d,0x58,0x6e,0x78,0x67,0x82,0x68,0x66,0x8b,0x73,0x7c, 0x97,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x34,0x40,0x4e,0x4c,0x74, 0x55,0x45,0x65,0x60,0x4f,0x73,0x63,0x53,0x77,0x64,0x53,0x76,0x64,0x53,0x76,0x60, 0x53,0x77,0x62,0x53,0x77,0x62,0x53,0x77,0x62,0x53,0x77,0x62,0x53,0x77,0x60,0x53, 0x77,0x5e,0x53,0x79,0x5c,0x52,0x79,0x5d,0x52,0x79,0x5e,0x53,0x79,0x5b,0x50,0x77, 0x4e,0x44,0x65,0x4a,0x43,0x64,0x4e,0x5a,0x81,0x3b,0x3f,0x4a,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x10, 0x13,0x4d,0x3b,0x4a,0x4f,0x3f,0x4d,0x69,0x5b,0x69,0x70,0x7c,0x97,0x47,0x51,0x72, 0x55,0x60,0x88,0x56,0x62,0x89,0x55,0x62,0x89,0x55,0x62,0x89,0x55,0x62,0x89,0x56, 0x61,0x89,0x55,0x62,0x89,0x55,0x62,0x89,0x55,0x61,0x89,0x55,0x61,0x88,0x54,0x5f, 0x86,0x54,0x60,0x86,0x53,0x5e,0x85,0x53,0x5e,0x84,0x52,0x5c,0x84,0x51,0x5b,0x82, 0x50,0x5b,0x82,0x3e,0x48,0x6a,0x34,0x3b,0x58,0x36,0x3a,0x58,0x3c,0x42,0x61,0x21, 0x23,0x32,0x12,0x14,0x19,0x13,0x14,0x1a,0x15,0x14,0x1b,0x1a,0x16,0x1e,0x16,0x14, 0x1a,0x0f,0x0f,0x14,0x0b,0x0b,0x0f,0x0a,0x0a,0x0d,0x0a,0x0a,0x0d,0x0a,0x0a,0x0c, 0x0a,0x0a,0x0d,0x0d,0x0b,0x0e,0x10,0x0e,0x12,0x13,0x10,0x14,0x15,0x12,0x16,0x16, 0x12,0x17,0x14,0x12,0x16,0x13,0x11,0x16,0x13,0x11,0x15,0x11,0x0f,0x13,0x0e,0x0c, 0x0f,0x0a,0x0a,0x0d,0x07,0x07,0x0a,0x06,0x06,0x08,0x05,0x05,0x06,0x03,0x03,0x05, 0x02,0x02,0x04,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x03,0x04,0x04, 0x05,0x05,0x06,0x06,0x07,0x07,0x09,0x08,0x09,0x0a,0x06,0x06,0x07,0x02,0x02,0x02, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe9,0xe9, 0xe9,0xff,0xff,0xff,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xf8,0xf8,0xf8,0xd2,0xd2,0xd2, 0x41,0x41,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x70,0x70,0x70,0xe5,0xe5,0xe5,0xfd,0xfd,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xfe,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0x2a,0x2a,0x2a,0x00,0x00,0x00,0x00,0x00,0x00,0xba,0xba,0xba,0xff,0xff,0xff, 0xff,0xff,0xff,0xf9,0xf9,0xf9,0x37,0x37,0x37,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x30,0x30,0x38,0x68,0x73,0x97,0x52,0x4f,0x7a,0x64,0x4e,0x6c,0x63,0x4b, 0x67,0x64,0x53,0x75,0x62,0x53,0x77,0x62,0x53,0x77,0x64,0x53,0x76,0x64,0x52,0x73, 0x5c,0x48,0x64,0x2d,0x21,0x31,0x2d,0x20,0x31,0x2c,0x1f,0x31,0x28,0x1b,0x2a,0x09, 0x06,0x08,0x39,0x2c,0x35,0x2f,0x23,0x2a,0x22,0x18,0x1c,0x20,0x16,0x1a,0x20,0x16, 0x1a,0x21,0x17,0x1b,0x23,0x19,0x1d,0x27,0x1c,0x21,0x2a,0x1e,0x24,0x87,0x8f,0xa8, 0x5a,0x65,0x8d,0x56,0x62,0x8b,0x52,0x58,0x84,0x60,0x4a,0x60,0x05,0x04,0x05,0x00, 0x00,0x00,0x00,0x00,0x00,0x2e,0x1a,0x29,0x56,0x3f,0x57,0xa3,0xab,0xc2,0x9f,0xa7, 0xbe,0x7c,0x73,0x89,0x68,0x54,0x69,0x6a,0x55,0x6a,0x69,0x54,0x69,0x6b,0x56,0x6c, 0x6b,0x56,0x6c,0x6b,0x56,0x6c,0x67,0x53,0x67,0x55,0x45,0x55,0x91,0x96,0xaa,0x7d, 0x89,0xa9,0x80,0x8a,0xaa,0x89,0x93,0xb0,0x85,0x90,0xad,0x7d,0x89,0xa8,0x2f,0x2a, 0x3b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x76,0x77,0x77,0x63,0x6f,0x95,0x52,0x53,0x7e,0x52,0x4f,0x7a,0x52,0x53,0x7e, 0x64,0x53,0x75,0x5b,0x66,0x8e,0x5f,0x52,0x60,0x68,0x53,0x68,0x78,0x65,0x7f,0x68, 0x67,0x8c,0x5e,0x65,0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x3f,0x45,0x5b,0x48,0x47,0x6e,0x54,0x47,0x67,0x5d,0x50,0x74,0x60,0x53,0x77, 0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x60,0x53,0x77,0x5d, 0x52,0x79,0x5d,0x52,0x79,0x5c,0x52,0x79,0x56,0x50,0x79,0x58,0x52,0x79,0x5a,0x52, 0x79,0x57,0x50,0x79,0x5a,0x50,0x76,0x4b,0x3f,0x5e,0x45,0x43,0x69,0x4c,0x57,0x7c, 0x2d,0x30,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x35,0x29,0x32,0x4a,0x3a,0x47,0x4e,0x3d,0x4c,0x9c,0x9b,0xaa,0x56,0x61, 0x82,0x4c,0x57,0x7a,0x56,0x62,0x8b,0x55,0x62,0x8a,0x56,0x62,0x8b,0x56,0x63,0x8b, 0x55,0x62,0x8a,0x56,0x62,0x8a,0x57,0x63,0x8a,0x57,0x62,0x8a,0x56,0x62,0x8a,0x55, 0x61,0x89,0x55,0x61,0x89,0x54,0x60,0x88,0x54,0x60,0x87,0x53,0x5e,0x86,0x52,0x5e, 0x85,0x51,0x5b,0x83,0x51,0x5c,0x84,0x39,0x42,0x63,0x33,0x39,0x56,0x36,0x3b,0x59, 0x3e,0x44,0x68,0x12,0x14,0x19,0x13,0x15,0x1a,0x12,0x12,0x1a,0x13,0x13,0x1a,0x14, 0x12,0x19,0x11,0x10,0x15,0x0b,0x0b,0x0f,0x08,0x08,0x0b,0x07,0x06,0x0a,0x07,0x07, 0x0a,0x07,0x07,0x0a,0x08,0x08,0x0a,0x09,0x09,0x0c,0x0d,0x0b,0x0f,0x0e,0x0d,0x11, 0x10,0x0e,0x12,0x11,0x0f,0x13,0x11,0x0f,0x13,0x12,0x0f,0x14,0x11,0x0e,0x12,0x0f, 0x0d,0x11,0x0d,0x0b,0x0f,0x0a,0x09,0x0c,0x07,0x06,0x0a,0x05,0x05,0x06,0x03,0x04, 0x05,0x03,0x03,0x04,0x02,0x02,0x04,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x02,0x02,0x02,0x02,0x03,0x03,0x04,0x04,0x05,0x04,0x05,0x05,0x02,0x03, 0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x2f,0x2f,0x2f,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xd3,0xd3,0xd3,0x6e,0x6e, 0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x76,0x76, 0x76,0xde,0xde,0xde,0xfd,0xfd,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xfe,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xc2,0xc2,0xc2,0x02,0x02,0x02,0x00,0x00,0x00,0x20,0x20,0x20,0xf5,0xf5, 0xf5,0xff,0xff,0xff,0xff,0xff,0xff,0xbd,0xbd,0xbd,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3d,0x3d,0x48,0x71,0x7b,0x9e,0x52, 0x4f,0x7a,0x64,0x52,0x71,0x64,0x4f,0x6d,0x64,0x53,0x73,0x63,0x53,0x77,0x64,0x53, 0x75,0x64,0x52,0x72,0x43,0x31,0x47,0x2d,0x21,0x31,0x2d,0x20,0x31,0x2c,0x1f,0x30, 0x23,0x18,0x25,0x08,0x06,0x07,0x43,0x33,0x3e,0x27,0x1c,0x22,0x21,0x17,0x1b,0x1d, 0x14,0x17,0x1d,0x14,0x18,0x20,0x16,0x1a,0x21,0x17,0x1b,0x25,0x1a,0x20,0x28,0x1d, 0x23,0x88,0x91,0xae,0x52,0x52,0x7c,0x5e,0x6a,0x92,0x5a,0x4b,0x66,0x62,0x4e,0x62, 0x07,0x05,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7b,0x86,0xa7,0x9b, 0xa3,0xbc,0x9d,0xa5,0xbe,0x7a,0x71,0x86,0x65,0x51,0x65,0x67,0x53,0x68,0x69,0x54, 0x69,0x69,0x54,0x69,0x6a,0x55,0x6b,0x66,0x52,0x66,0x59,0x47,0x58,0x73,0x76,0x8b, 0x83,0x8d,0xac,0x80,0x8a,0xaa,0x96,0xa0,0xb9,0x8c,0x96,0xb3,0x82,0x8c,0xab,0x3e, 0x3f,0x57,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x96,0x9b,0xac,0x5d,0x6a,0x91,0x52,0x54, 0x7e,0x52,0x53,0x7d,0x5c,0x52,0x79,0x53,0x5e,0x88,0x75,0x6f,0x7f,0x61,0x4d,0x60, 0x77,0x62,0x7c,0x68,0x6a,0x8f,0x4a,0x4f,0x5f,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x05,0x4c,0x55,0x73,0x45,0x43,0x6a,0x4e,0x44, 0x66,0x5c,0x50,0x76,0x5e,0x53,0x79,0x5e,0x53,0x79,0x5d,0x52,0x79,0x5e,0x53,0x79, 0x5b,0x52,0x79,0x58,0x50,0x79,0x5a,0x52,0x79,0x57,0x50,0x79,0x57,0x50,0x79,0x57, 0x50,0x79,0x54,0x50,0x79,0x52,0x4f,0x7a,0x5a,0x52,0x79,0x5b,0x4f,0x74,0x4a,0x41, 0x63,0x44,0x41,0x66,0x4d,0x57,0x79,0x1c,0x1d,0x21,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x0f,0x0c,0x0f,0x48,0x37,0x46,0x49,0x38,0x47,0x4b,0x3b,0x49,0x84, 0x8e,0xa7,0x4d,0x57,0x78,0x51,0x5c,0x81,0x57,0x62,0x8b,0x59,0x63,0x8b,0x59,0x63, 0x8b,0x5a,0x64,0x8c,0x59,0x63,0x8c,0x5a,0x64,0x8c,0x57,0x63,0x8b,0x58,0x63,0x8b, 0x57,0x63,0x8b,0x57,0x62,0x8b,0x55,0x62,0x8a,0x56,0x62,0x89,0x54,0x60,0x88,0x53, 0x5e,0x87,0x53,0x5e,0x87,0x52,0x5d,0x85,0x52,0x5d,0x84,0x36,0x3d,0x5b,0x33,0x3c, 0x57,0x35,0x3b,0x58,0x41,0x47,0x6b,0x13,0x14,0x19,0x13,0x15,0x1a,0x11,0x12,0x18, 0x10,0x10,0x16,0x0f,0x0f,0x14,0x0b,0x0b,0x0f,0x07,0x07,0x0a,0x06,0x06,0x09,0x06, 0x06,0x08,0x06,0x06,0x07,0x06,0x06,0x08,0x06,0x06,0x09,0x07,0x07,0x0a,0x08,0x08, 0x0b,0x09,0x09,0x0c,0x0a,0x0a,0x0e,0x0b,0x0b,0x0e,0x0e,0x0c,0x10,0x0f,0x0d,0x11, 0x10,0x0e,0x12,0x0e,0x0c,0x10,0x0c,0x0a,0x0e,0x08,0x08,0x0a,0x06,0x06,0x07,0x04, 0x05,0x06,0x03,0x04,0x05,0x03,0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2e,0x2e,0x2e,0x35,0x35,0x35,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x8d,0x8d,0x8d,0xd7, 0xd7,0xd7,0xfa,0xfa,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0xfc,0xfc,0xde,0xde,0xde,0xfc,0xfc,0xfc, 0xff,0xff,0xff,0xff,0xff,0xff,0x36,0x36,0x36,0x00,0x00,0x00,0x00,0x00,0x00,0xad, 0xad,0xad,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xf7,0xf7,0x25,0x25,0x25,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x48,0x49,0x55,0x77,0x83,0xa4,0x52,0x4f,0x7a,0x64,0x53,0x75,0x64,0x4f,0x6e,0x64, 0x4f,0x6d,0x64,0x53,0x73,0x5f,0x4c,0x6a,0x2e,0x21,0x33,0x2d,0x20,0x31,0x2d,0x20, 0x31,0x2a,0x1d,0x2d,0x19,0x10,0x18,0x0b,0x08,0x0a,0x39,0x2b,0x34,0x22,0x18,0x1c, 0x1f,0x15,0x19,0x1d,0x14,0x18,0x1d,0x14,0x18,0x20,0x16,0x1a,0x22,0x18,0x1c,0x26, 0x1b,0x20,0x31,0x27,0x2f,0x86,0x91,0xaf,0x52,0x52,0x7c,0x67,0x73,0x99,0x5c,0x48, 0x5c,0x60,0x4d,0x5f,0x62,0x4e,0x62,0x07,0x06,0x07,0x00,0x00,0x00,0x00,0x00,0x00, 0x95,0x9f,0xb9,0x96,0xa0,0xb9,0x96,0xa0,0xba,0x67,0x55,0x68,0x63,0x4f,0x63,0x66, 0x52,0x66,0x67,0x53,0x67,0x68,0x54,0x69,0x65,0x51,0x65,0x5b,0x48,0x5a,0x6c,0x6a, 0x7d,0x98,0xa1,0xbb,0x86,0x91,0xaf,0x9c,0xa5,0xbe,0x9d,0xa5,0xbe,0x90,0x9a,0xb5, 0x52,0x56,0x73,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2a,0x2b,0x2c,0x83, 0x8d,0xac,0x5b,0x66,0x8e,0x52,0x56,0x81,0x52,0x4f,0x7a,0x52,0x50,0x7c,0x74,0x77, 0x90,0x5e,0x4a,0x5d,0x76,0x62,0x7b,0x69,0x74,0x98,0x3a,0x3e,0x4a,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x15,0x16,0x5e, 0x69,0x89,0x43,0x40,0x66,0x4d,0x46,0x6a,0x5b,0x52,0x77,0x5b,0x52,0x79,0x5b,0x52, 0x79,0x54,0x50,0x79,0x54,0x50,0x79,0x55,0x50,0x79,0x53,0x4f,0x7a,0x53,0x4f,0x7a, 0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7b,0x52,0x4f,0x7a,0x55, 0x50,0x79,0x58,0x50,0x77,0x4b,0x45,0x69,0x40,0x40,0x66,0x4c,0x54,0x70,0x06,0x07, 0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x26,0x2f,0x47,0x37,0x43,0x49,0x39,0x46, 0x88,0x80,0x8a,0x68,0x72,0x91,0x49,0x53,0x75,0x58,0x64,0x8a,0x5a,0x65,0x8c,0x5a, 0x66,0x8c,0x5b,0x66,0x8e,0x5b,0x66,0x8e,0x59,0x65,0x8c,0x5a,0x64,0x8c,0x5a,0x64, 0x8c,0x59,0x64,0x8c,0x58,0x63,0x8b,0x56,0x62,0x8b,0x56,0x62,0x8a,0x56,0x62,0x89, 0x55,0x62,0x89,0x54,0x60,0x88,0x53,0x60,0x87,0x53,0x5e,0x87,0x4c,0x56,0x7e,0x33, 0x3b,0x59,0x33,0x3b,0x58,0x35,0x3c,0x5a,0x3f,0x48,0x6b,0x13,0x14,0x19,0x12,0x13, 0x18,0x0f,0x11,0x16,0x0e,0x0e,0x13,0x0a,0x0a,0x0e,0x07,0x07,0x0a,0x05,0x05,0x07, 0x03,0x04,0x05,0x03,0x04,0x05,0x04,0x04,0x06,0x05,0x05,0x06,0x06,0x06,0x07,0x06, 0x06,0x09,0x06,0x07,0x0a,0x07,0x07,0x0a,0x07,0x08,0x0a,0x09,0x09,0x0c,0x0a,0x0a, 0x0e,0x0c,0x0b,0x0e,0x0e,0x0c,0x0f,0x0c,0x0a,0x0e,0x0a,0x09,0x0b,0x07,0x06,0x09, 0x06,0x05,0x07,0x04,0x04,0x06,0x03,0x03,0x04,0x02,0x02,0x03,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x57,0x57,0x57,0xc5,0xc5,0xc5,0xed,0xed,0xed, 0xfe,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xfa,0xfa,0xfa,0xcd,0xcd,0xcd,0x59,0x59,0x59,0xb8,0xb8, 0xb8,0xff,0xff,0xff,0xff,0xff,0xff,0xea,0xea,0xea,0x02,0x02,0x02,0x00,0x00,0x00, 0x03,0x03,0x03,0xf4,0xf4,0xf4,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xbf,0xbf,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0x55,0x62,0x79,0x84,0xa5,0x52,0x52,0x7c, 0x64,0x53,0x76,0x64,0x4d,0x6b,0x63,0x4b,0x67,0x46,0x34,0x4b,0x2d,0x21,0x31,0x2d, 0x20,0x31,0x2c,0x1f,0x31,0x27,0x1b,0x29,0x07,0x05,0x07,0x28,0x1f,0x25,0x31,0x24, 0x2b,0x23,0x19,0x1d,0x1d,0x14,0x17,0x1c,0x13,0x17,0x1d,0x14,0x17,0x20,0x16,0x1a, 0x22,0x17,0x1c,0x26,0x1b,0x20,0x4b,0x48,0x58,0x74,0x80,0xa2,0x5b,0x52,0x79,0x65, 0x71,0x96,0x59,0x45,0x58,0x5e,0x4a,0x5c,0x5f,0x4b,0x5d,0x5f,0x4b,0x5e,0x09,0x07, 0x09,0x00,0x00,0x00,0x7d,0x89,0xa8,0x91,0x9a,0xb5,0x78,0x74,0x8a,0x5f,0x4c,0x5e, 0x62,0x4e,0x62,0x64,0x50,0x64,0x66,0x52,0x66,0x63,0x4f,0x63,0x5a,0x47,0x58,0x5c, 0x54,0x66,0xb1,0xb8,0xcb,0x86,0x91,0xaf,0xaa,0xb2,0xc7,0xa8,0xaf,0xc4,0x9d,0xa5, 0xbe,0x62,0x67,0x86,0x04,0x04,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x8e,0x93,0xa0,0x67,0x73,0x99,0x57,0x63,0x8c,0x52,0x52,0x7d,0x52, 0x4f,0x7a,0x6b,0x75,0x9a,0x61,0x50,0x60,0x74,0x60,0x78,0x6d,0x77,0x9b,0x27,0x2a, 0x32,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x36,0x37,0x39,0x5b,0x66,0x8a,0x40,0x3e,0x63,0x4e,0x4a,0x6f,0x53, 0x4f,0x7a,0x55,0x50,0x79,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f, 0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7b,0x52,0x52,0x7d, 0x52,0x50,0x7b,0x52,0x4f,0x7b,0x52,0x4f,0x7a,0x50,0x4d,0x74,0x41,0x40,0x65,0x3e, 0x48,0x6a,0x42,0x49,0x5c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0x08,0x0b,0x45,0x35,0x41,0x46,0x36, 0x42,0x48,0x38,0x44,0xae,0xb2,0xc2,0x55,0x5e,0x7e,0x51,0x5b,0x7f,0x59,0x65,0x8d, 0x5b,0x66,0x8f,0x5a,0x66,0x8d,0x5c,0x68,0x90,0x5a,0x65,0x8d,0x5a,0x66,0x8f,0x5a, 0x66,0x8e,0x5a,0x65,0x8c,0x5b,0x65,0x8e,0x5a,0x64,0x8c,0x57,0x63,0x8b,0x56,0x63, 0x8b,0x56,0x62,0x8b,0x55,0x62,0x89,0x55,0x61,0x89,0x55,0x61,0x89,0x53,0x5e,0x88, 0x47,0x52,0x75,0x33,0x3a,0x58,0x32,0x3a,0x57,0x35,0x3d,0x5a,0x3b,0x43,0x63,0x11, 0x12,0x16,0x12,0x12,0x16,0x0e,0x0f,0x12,0x0a,0x0c,0x0e,0x07,0x08,0x0a,0x05,0x06, 0x07,0x04,0x05,0x06,0x03,0x03,0x05,0x03,0x03,0x05,0x03,0x03,0x05,0x03,0x04,0x05, 0x04,0x05,0x06,0x05,0x05,0x06,0x06,0x06,0x07,0x06,0x06,0x09,0x07,0x07,0x0a,0x07, 0x07,0x0a,0x08,0x08,0x0a,0x0a,0x09,0x0b,0x0a,0x0a,0x0c,0x09,0x08,0x0a,0x08,0x07, 0x0a,0x06,0x06,0x07,0x04,0x04,0x06,0x03,0x03,0x04,0x02,0x02,0x04,0x02,0x02,0x03, 0x02,0x02,0x02,0x00,0x00,0x00,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x32,0x32,0x32,0xb8,0xb8,0xb8,0xee,0xee,0xee,0xfd,0xfd,0xfd,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xfd,0xfd,0xfd,0xf6,0xf6,0xf6,0xc0,0xc0,0xc0,0x45,0x45,0x45,0x00,0x00,0x00,0x1e, 0x1e,0x1e,0xf5,0xf5,0xf5,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x5f,0x5f,0x00,0x00, 0x00,0x00,0x00,0x00,0x8f,0x8f,0x8f,0xfd,0xfd,0xfd,0xff,0xff,0xff,0xf9,0xf9,0xf9, 0x34,0x34,0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5f,0x5f, 0x6c,0x7d,0x88,0xa8,0x52,0x55,0x80,0x63,0x53,0x77,0x61,0x49,0x66,0x2c,0x1e,0x2e, 0x2c,0x1f,0x30,0x2d,0x20,0x31,0x2c,0x1e,0x30,0x24,0x18,0x25,0x0c,0x08,0x0a,0x3e, 0x2f,0x3a,0x29,0x1e,0x24,0x23,0x18,0x1d,0x1b,0x12,0x15,0x1a,0x12,0x14,0x1d,0x13, 0x17,0x1f,0x15,0x19,0x22,0x17,0x1c,0x23,0x19,0x1e,0x5e,0x62,0x78,0x60,0x6d,0x94, 0x53,0x50,0x79,0x58,0x64,0x8c,0x57,0x44,0x55,0x5d,0x4a,0x5c,0x5c,0x49,0x5a,0x5c, 0x49,0x5a,0x5d,0x4a,0x5c,0x14,0x10,0x14,0x0c,0x04,0x05,0x8e,0x98,0xb3,0x5f,0x4e, 0x61,0x5f,0x4b,0x5d,0x61,0x4d,0x60,0x62,0x4e,0x62,0x62,0x4e,0x62,0x59,0x46,0x57, 0x59,0x50,0x64,0x8d,0x95,0xaf,0x86,0x91,0xaf,0xaa,0xb1,0xc7,0xb4,0xbb,0xce,0xa7, 0xaf,0xc4,0x79,0x7f,0x9c,0x0b,0x09,0x0d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x32,0x33,0x37,0x98,0xa1,0xba,0x5c,0x69,0x90, 0x52,0x5d,0x86,0x52,0x4f,0x7a,0x5a,0x65,0x8d,0x77,0x6d,0x7e,0x70,0x5b,0x72,0x70, 0x7b,0x9e,0x19,0x1b,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5a,0x5d,0x63,0x4e,0x5a,0x7d, 0x3e,0x3c,0x5f,0x50,0x4d,0x76,0x52,0x4f,0x7a,0x52,0x4f,0x7b,0x52,0x4f,0x7a,0x52, 0x50,0x7c,0x52,0x50,0x7c,0x52,0x50,0x7c,0x52,0x50,0x7b,0x52,0x52,0x7d,0x52,0x52, 0x7c,0x52,0x56,0x81,0x52,0x58,0x83,0x52,0x5a,0x84,0x52,0x53,0x7e,0x52,0x53,0x7d, 0x4d,0x4d,0x75,0x3e,0x46,0x67,0x4e,0x58,0x79,0x44,0x45,0x4a,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2a,0x20,0x28,0x44, 0x34,0x40,0x46,0x36,0x42,0x73,0x67,0x72,0x83,0x8d,0xa9,0x4d,0x57,0x78,0x58,0x64, 0x8b,0x5c,0x69,0x8f,0x5c,0x69,0x8f,0x5d,0x6a,0x90,0x5c,0x67,0x8f,0x5d,0x69,0x90, 0x5c,0x68,0x90,0x5c,0x68,0x90,0x5c,0x68,0x90,0x5c,0x68,0x8f,0x5a,0x65,0x8e,0x5a, 0x64,0x8c,0x59,0x64,0x8c,0x58,0x63,0x8b,0x56,0x62,0x8a,0x55,0x62,0x8a,0x55,0x61, 0x8a,0x54,0x60,0x88,0x40,0x4b,0x6b,0x32,0x3c,0x58,0x31,0x39,0x56,0x35,0x3d,0x5c, 0x33,0x38,0x53,0x0e,0x0e,0x12,0x0e,0x0e,0x11,0x0b,0x0c,0x0e,0x08,0x09,0x0a,0x06, 0x06,0x08,0x04,0x04,0x06,0x03,0x03,0x04,0x02,0x02,0x04,0x02,0x02,0x04,0x03,0x03, 0x04,0x03,0x03,0x05,0x03,0x04,0x05,0x04,0x05,0x06,0x04,0x05,0x06,0x05,0x05,0x06, 0x06,0x06,0x07,0x06,0x06,0x08,0x06,0x06,0x09,0x07,0x06,0x09,0x07,0x07,0x09,0x07, 0x06,0x09,0x06,0x05,0x07,0x04,0x04,0x06,0x03,0x03,0x05,0x02,0x02,0x04,0x02,0x02, 0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x37,0x37,0x37,0x94,0x94,0x94, 0xc4,0xc4,0xc4,0xe0,0xe0,0xe0,0xfb,0xfb,0xfb,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0xfc, 0xfc,0xeb,0xeb,0xeb,0x9b,0x9b,0x9b,0x16,0x16,0x16,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x8c,0x8c,0x8c,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x12, 0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0xeb,0xeb,0xeb,0xfd,0xfd,0xfd,0xff,0xff, 0xff,0xcb,0xcb,0xcb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x68,0x69,0x78,0x79,0x83,0xa4,0x52,0x50,0x7c,0x48,0x3a, 0x52,0x2d,0x21,0x31,0x2a,0x1e,0x2d,0x2b,0x1e,0x2e,0x29,0x1c,0x2c,0x1c,0x12,0x1b, 0x13,0x0e,0x12,0x38,0x2a,0x33,0x25,0x1a,0x1f,0x20,0x16,0x1a,0x1a,0x11,0x14,0x1b, 0x12,0x15,0x1c,0x13,0x16,0x1d,0x14,0x18,0x20,0x17,0x1b,0x23,0x18,0x1d,0x68,0x70, 0x8c,0x53,0x5e,0x88,0x52,0x4f,0x7a,0x57,0x4e,0x70,0x57,0x45,0x55,0x59,0x47,0x58, 0x5a,0x47,0x58,0x59,0x46,0x57,0x5a,0x47,0x58,0x5b,0x48,0x59,0x4b,0x38,0x48,0x7e, 0x84,0xa0,0x5c,0x49,0x5a,0x5e,0x4b,0x5d,0x62,0x4e,0x61,0x60,0x4c,0x5f,0x59,0x47, 0x58,0x69,0x61,0x72,0x8b,0x92,0xac,0x81,0x8b,0xaa,0xaf,0xb5,0xca,0xba,0xc1,0xd1, 0xb5,0xbc,0xcf,0x94,0x9b,0xb3,0x18,0x15,0x1d,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xb2,0xb5, 0xbe,0x69,0x74,0x9a,0x55,0x62,0x8b,0x58,0x50,0x79,0x52,0x5d,0x88,0x7f,0x81,0x98, 0x6c,0x57,0x6d,0x70,0x7b,0x9d,0x0f,0x10,0x13,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x73,0x77,0x85,0x40,0x4b,0x6d,0x43,0x41,0x67,0x52,0x50,0x7b,0x52,0x50,0x7b, 0x52,0x50,0x7c,0x52,0x52,0x7c,0x52,0x55,0x80,0x52,0x56,0x81,0x52,0x57,0x83,0x52, 0x57,0x82,0x52,0x5b,0x85,0x52,0x5d,0x86,0x52,0x5d,0x88,0x52,0x5d,0x88,0x53,0x5d, 0x88,0x53,0x5e,0x88,0x53,0x5e,0x88,0x52,0x5c,0x85,0x45,0x4f,0x6e,0x76,0x7d,0x91, 0x1b,0x1b,0x1b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x06,0x08, 0x41,0x32,0x3d,0x43,0x33,0x3e,0x46,0x36,0x42,0xb0,0xb0,0xbe,0x5e,0x68,0x88,0x51, 0x5b,0x7e,0x5c,0x69,0x8f,0x5d,0x69,0x90,0x5e,0x6b,0x91,0x5e,0x6b,0x91,0x5e,0x6a, 0x91,0x5f,0x6c,0x92,0x5e,0x6a,0x91,0x5e,0x6a,0x91,0x5d,0x69,0x90,0x5c,0x69,0x90, 0x5c,0x68,0x8f,0x5b,0x68,0x8e,0x5a,0x64,0x8c,0x5a,0x64,0x8c,0x57,0x62,0x8b,0x57, 0x62,0x8a,0x55,0x62,0x8a,0x54,0x61,0x89,0x38,0x42,0x61,0x33,0x39,0x56,0x31,0x38, 0x56,0x39,0x40,0x62,0x18,0x1c,0x26,0x0a,0x0a,0x0c,0x0a,0x0a,0x0c,0x07,0x08,0x0a, 0x06,0x06,0x07,0x04,0x05,0x06,0x03,0x03,0x05,0x02,0x02,0x02,0x02,0x02,0x03,0x02, 0x02,0x03,0x02,0x02,0x04,0x02,0x02,0x04,0x03,0x03,0x04,0x03,0x03,0x05,0x03,0x04, 0x05,0x04,0x04,0x06,0x04,0x04,0x06,0x04,0x05,0x06,0x05,0x05,0x06,0x05,0x05,0x06, 0x05,0x05,0x06,0x05,0x05,0x06,0x03,0x03,0x05,0x03,0x03,0x04,0x02,0x02,0x04,0x02, 0x02,0x03,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x4d,0x4d,0x4d,0x92,0x92,0x92,0xd3,0xd3,0xd3,0xfb,0xfb, 0xfb,0xfe,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xfd,0xfd,0xf6,0xf6,0xf6,0xc9, 0xc9,0xc9,0x56,0x56,0x56,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xe0,0xe0,0xff,0xff,0xff,0xff,0xff,0xff, 0xa8,0xa8,0xa8,0x00,0x00,0x00,0x00,0x00,0x00,0x77,0x77,0x77,0xfd,0xfd,0xfd,0xff, 0xff,0xff,0xfa,0xfa,0xfa,0x54,0x54,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6d,0x6e,0x7f,0x6d, 0x78,0x9c,0x29,0x22,0x3b,0x2e,0x21,0x33,0x2d,0x20,0x31,0x2a,0x1d,0x2d,0x24,0x18, 0x26,0x10,0x09,0x0d,0x1f,0x17,0x1d,0x2d,0x21,0x27,0x25,0x1a,0x1f,0x1b,0x12,0x15, 0x1a,0x11,0x14,0x1a,0x11,0x14,0x1d,0x14,0x17,0x1d,0x14,0x17,0x20,0x16,0x1a,0x24, 0x19,0x1e,0x6f,0x78,0x9a,0x52,0x4f,0x7b,0x52,0x4f,0x7a,0x59,0x46,0x5d,0x55,0x43, 0x53,0x57,0x44,0x55,0x56,0x44,0x54,0x57,0x44,0x55,0x58,0x46,0x56,0x59,0x46,0x57, 0x5a,0x47,0x58,0x5a,0x48,0x5a,0x5c,0x49,0x5a,0x5e,0x4b,0x5d,0x60,0x4c,0x5f,0x5b, 0x48,0x5a,0x59,0x48,0x57,0xa7,0xaf,0xc4,0x8d,0x98,0xb3,0xa5,0xad,0xc3,0xbf,0xc5, 0xd5,0xb4,0xb9,0xc9,0xa0,0xa6,0xbb,0x1d,0x1a,0x24,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0xa0,0xa8,0xbd,0x56,0x63,0x8b,0x52,0x50,0x7b,0x52,0x52, 0x7d,0x7b,0x84,0xa6,0x71,0x5e,0x73,0x73,0x7e,0xa0,0x09,0x0a,0x0c,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x09,0x09,0x09,0x77,0x7d,0x90,0x3f,0x48,0x6c,0x48,0x48, 0x71,0x52,0x54,0x7e,0x52,0x55,0x81,0x52,0x56,0x81,0x52,0x58,0x83,0x52,0x5c,0x86, 0x52,0x5c,0x86,0x53,0x5e,0x89,0x53,0x5f,0x89,0x54,0x60,0x8a,0x54,0x60,0x8a,0x54, 0x5f,0x8a,0x55,0x60,0x8a,0x56,0x62,0x8b,0x56,0x63,0x8b,0x58,0x64,0x8c,0x4e,0x57, 0x7c,0x56,0x5e,0x76,0x97,0x9a,0x9d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x26,0x1d,0x23,0x40,0x30,0x3b,0x42,0x32,0x3d,0x58,0x4a,0x55,0x8e,0x98,0xb3, 0x50,0x5a,0x79,0x5c,0x67,0x8c,0x60,0x6c,0x92,0x5e,0x6a,0x90,0x5e,0x6b,0x91,0x5f, 0x6b,0x91,0x60,0x6c,0x92,0x5f,0x6c,0x92,0x60,0x6c,0x92,0x5e,0x6b,0x91,0x5e,0x6a, 0x91,0x5d,0x69,0x90,0x5c,0x68,0x90,0x5b,0x68,0x8e,0x5a,0x66,0x8e,0x5a,0x65,0x8c, 0x5a,0x65,0x8c,0x59,0x63,0x8b,0x57,0x62,0x8a,0x54,0x60,0x86,0x34,0x3e,0x5b,0x33, 0x3a,0x58,0x30,0x38,0x54,0x3f,0x4a,0x6f,0x05,0x06,0x07,0x06,0x06,0x08,0x06,0x06, 0x07,0x05,0x05,0x06,0x04,0x05,0x06,0x03,0x03,0x05,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x04,0x02,0x02,0x03,0x02, 0x02,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x05,0x03,0x04,0x05,0x03,0x04, 0x05,0x04,0x04,0x06,0x03,0x03,0x05,0x03,0x03,0x04,0x02,0x02,0x04,0x02,0x02,0x04, 0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x2b,0x2b,0xdf,0xdf,0xdf,0xf7,0xf7,0xf7,0xfd, 0xfd,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xfd,0xfd,0xfd,0xfc,0xfc,0xfc,0xe0,0xe0,0xe0,0x87,0x87,0x87, 0x12,0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3d,0x3d,0x3d,0xfa,0xfa,0xfa,0xff,0xff, 0xff,0xff,0xff,0xff,0x36,0x36,0x36,0x00,0x00,0x00,0x00,0x00,0x00,0xdd,0xdd,0xdd, 0xff,0xff,0xff,0xff,0xff,0xff,0xd5,0xd5,0xd5,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x53,0x54,0x68,0x2a,0x2c,0x44,0x2e,0x24,0x38,0x2d,0x20,0x31,0x2c, 0x1e,0x30,0x22,0x17,0x24,0x42,0x35,0x41,0x3e,0x2f,0x3a,0x29,0x1d,0x23,0x26,0x1b, 0x20,0x1a,0x11,0x14,0x1b,0x12,0x15,0x1b,0x12,0x15,0x1d,0x13,0x17,0x1d,0x14,0x18, 0x1e,0x15,0x19,0x23,0x18,0x1d,0x72,0x7e,0xa0,0x5a,0x52,0x79,0x52,0x53,0x7e,0x52, 0x3f,0x50,0x52,0x40,0x4f,0x54,0x42,0x51,0x55,0x42,0x52,0x56,0x44,0x54,0x57,0x44, 0x55,0x57,0x44,0x55,0x59,0x46,0x57,0x59,0x46,0x57,0x5a,0x47,0x58,0x5d,0x4a,0x5c, 0x5a,0x47,0x58,0x51,0x3f,0x4e,0xae,0xb1,0xc1,0xa3,0xab,0xc2,0x9d,0xa5,0xbe,0xc0, 0xc6,0xd6,0xc6,0xcb,0xd9,0xa4,0xa6,0xb7,0x25,0x25,0x37,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x02,0x03,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x46,0x51,0x69,0x74,0x98,0x53, 0x5d,0x88,0x56,0x62,0x8b,0x72,0x7d,0xa0,0x8b,0x81,0x95,0x75,0x80,0xa1,0x04,0x04, 0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1b,0x1b,0x1b,0x6e, 0x75,0x93,0x3c,0x44,0x66,0x4d,0x53,0x7c,0x52,0x57,0x82,0x52,0x5c,0x86,0x53,0x5e, 0x88,0x53,0x5e,0x88,0x53,0x5f,0x89,0x56,0x63,0x8b,0x56,0x62,0x8b,0x57,0x64,0x8c, 0x56,0x63,0x8b,0x57,0x63,0x8c,0x5a,0x65,0x8d,0x58,0x65,0x8d,0x5a,0x65,0x8d,0x5b, 0x67,0x90,0x5e,0x6a,0x90,0x53,0x5e,0x7d,0x81,0x86,0x99,0x5a,0x5a,0x5a,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x09,0x07,0x08,0x3e,0x2f,0x3a,0x40,0x31,0x3c,0x41,0x32,0x3d,0xaf,0xac, 0xb5,0x67,0x71,0x92,0x54,0x5f,0x82,0x5f,0x6c,0x92,0x5f,0x6c,0x92,0x60,0x6c,0x92, 0x60,0x6c,0x92,0x60,0x6c,0x92,0x60,0x6d,0x92,0x60,0x6c,0x92,0x62,0x6e,0x93,0x60, 0x6c,0x92,0x5f,0x6c,0x92,0x60,0x6c,0x92,0x5d,0x6a,0x91,0x5c,0x68,0x90,0x5b,0x68, 0x8f,0x5a,0x66,0x8f,0x5a,0x65,0x8d,0x59,0x65,0x8c,0x57,0x63,0x8a,0x4d,0x57,0x7f, 0x35,0x3e,0x5c,0x33,0x3c,0x59,0x33,0x38,0x58,0x43,0x52,0x7b,0x03,0x03,0x04,0x03, 0x03,0x05,0x03,0x03,0x05,0x03,0x03,0x05,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x03,0x02,0x02,0x04,0x02,0x02,0x04,0x02, 0x02,0x04,0x02,0x02,0x04,0x02,0x02,0x03,0x02,0x02,0x04,0x02,0x02,0x03,0x02,0x02, 0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x87,0x87,0x87, 0xe2,0xe2,0xe2,0xf1,0xf1,0xf1,0xfa,0xfa,0xfa,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd, 0xfd,0xfd,0xfa,0xfa,0xfa,0xdd,0xdd,0xdd,0x8e,0x8e,0x8e,0x0a,0x0a,0x0a,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xb0,0xb0,0xb0,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x06,0x06,0x06,0x00,0x00,0x00,0x29,0x29, 0x29,0xfd,0xfd,0xfd,0xff,0xff,0xff,0xfd,0xfd,0xfd,0x5e,0x5e,0x5e,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x30,0x2f,0x42,0x26,0x25,0x3e, 0x2e,0x22,0x35,0x29,0x1c,0x2c,0x21,0x16,0x22,0x66,0x52,0x66,0x5a,0x47,0x58,0x37, 0x29,0x32,0x22,0x17,0x1c,0x1b,0x12,0x15,0x1b,0x13,0x16,0x1a,0x12,0x15,0x1a,0x11, 0x14,0x1d,0x14,0x18,0x1f,0x15,0x19,0x31,0x2c,0x37,0x6c,0x77,0x9b,0x62,0x53,0x77, 0x52,0x5d,0x88,0x4a,0x39,0x48,0x50,0x3e,0x4d,0x51,0x3f,0x4e,0x53,0x41,0x50,0x53, 0x41,0x50,0x54,0x42,0x51,0x56,0x43,0x53,0x56,0x44,0x54,0x58,0x45,0x56,0x5b,0x48, 0x59,0x59,0x46,0x57,0x51,0x40,0x4f,0x64,0x5b,0x69,0xb1,0xb8,0xcb,0x96,0xa0,0xba, 0xc4,0xc9,0xd8,0xbb,0xc1,0xd2,0x9f,0xa7,0xbc,0x26,0x28,0x42,0x2c,0x24,0x39,0x29, 0x24,0x36,0x02,0x02,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x1f,0x18,0x1d,0x38,0x2a,0x33,0x66,0x52,0x66,0x19,0x14, 0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x66,0x6f,0x8a,0x53,0x5f,0x89,0x5a,0x66,0x8e,0x6f,0x7b,0x9f,0xa0,0x9f,0xb4,0x7e, 0x88,0xa8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x28,0x29,0x2b,0x54,0x5d,0x7e,0x3e,0x47,0x6a,0x50,0x5c,0x85,0x54, 0x5f,0x89,0x55,0x62,0x8b,0x55,0x60,0x8a,0x58,0x65,0x8d,0x58,0x65,0x8d,0x5b,0x66, 0x8e,0x5a,0x66,0x8e,0x5a,0x66,0x8e,0x5a,0x66,0x8e,0x5b,0x67,0x90,0x5c,0x67,0x90, 0x5f,0x6c,0x93,0x63,0x6f,0x95,0x69,0x73,0x98,0x6e,0x7a,0x9b,0x71,0x7a,0x93,0xab, 0xaf,0xb9,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x29,0x1f,0x26,0x3f,0x30,0x3b,0x3f,0x30,0x3b,0x44, 0x35,0x40,0x9b,0xa2,0xba,0x55,0x5e,0x7f,0x60,0x6b,0x90,0x60,0x6d,0x93,0x62,0x6d, 0x93,0x62,0x6e,0x93,0x63,0x6e,0x94,0x62,0x6e,0x93,0x62,0x6e,0x93,0x63,0x6e,0x93, 0x60,0x6d,0x92,0x62,0x6d,0x93,0x62,0x6d,0x93,0x5f,0x6c,0x92,0x5f,0x6c,0x92,0x5f, 0x6b,0x91,0x5e,0x6b,0x91,0x5d,0x69,0x91,0x5c,0x68,0x90,0x59,0x65,0x8d,0x57,0x64, 0x8c,0x46,0x51,0x74,0x35,0x3e,0x5c,0x34,0x3d,0x5a,0x35,0x3d,0x5a,0x46,0x55,0x7f, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0x1f,0x1f,0x6a,0x6a,0x6a,0x98,0x98,0x98, 0x94,0x94,0x94,0x5d,0x5d,0x5d,0x07,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xee,0xee,0xee,0xff,0xff,0xff,0xff,0xff,0xff,0x73,0x73,0x73,0x00,0x00,0x00,0x00, 0x00,0x00,0xbb,0xbb,0xbb,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xef,0xef,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x04, 0x06,0x2b,0x2c,0x40,0x26,0x22,0x3b,0x28,0x1b,0x2a,0x3b,0x2a,0x39,0x69,0x54,0x69, 0x4f,0x3e,0x4c,0x49,0x38,0x46,0x2b,0x1f,0x25,0x1a,0x11,0x14,0x1a,0x11,0x14,0x1a, 0x11,0x14,0x1b,0x12,0x15,0x1c,0x13,0x17,0x1d,0x14,0x18,0x42,0x44,0x57,0x5b,0x67, 0x90,0x64,0x53,0x75,0x52,0x50,0x7b,0x4b,0x3a,0x48,0x4d,0x3c,0x4a,0x4f,0x3d,0x4c, 0x4f,0x3d,0x4c,0x4c,0x3b,0x49,0x46,0x36,0x44,0x41,0x33,0x3f,0x40,0x33,0x3f,0x44, 0x36,0x42,0x4c,0x3b,0x4a,0x4e,0x3d,0x4c,0x4b,0x3d,0x49,0xb0,0xb8,0xcb,0x86,0x91, 0xaf,0xc1,0xc7,0xd7,0xcb,0xd0,0xdd,0xb9,0xbf,0xd0,0x2b,0x2d,0x46,0x2a,0x1e,0x2d, 0x2a,0x1d,0x2d,0x62,0x50,0x6e,0x4d,0x44,0x64,0x10,0x0e,0x15,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0x17,0x1c,0x34,0x27,0x2f,0x36,0x28,0x30,0x65, 0x51,0x65,0x66,0x52,0x66,0x3f,0x32,0x3f,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x25,0x27,0x32,0x58,0x64,0x8c,0x5b,0x67,0x90,0x6c,0x77,0x9c, 0xa7,0xaf,0xc5,0x81,0x8a,0xa7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4e,0x4c,0x56,0x45,0x4f,0x6e, 0x45,0x4e,0x72,0x54,0x5f,0x88,0x56,0x63,0x8b,0x58,0x65,0x8d,0x5c,0x67,0x90,0x5c, 0x69,0x90,0x5c,0x69,0x90,0x5d,0x69,0x91,0x5e,0x6b,0x92,0x5e,0x6a,0x92,0x60,0x6c, 0x93,0x60,0x6d,0x94,0x66,0x72,0x98,0x6a,0x76,0x9a,0x71,0x7d,0xa0,0x7a,0x85,0xa5, 0x7d,0x88,0xa3,0x90,0x96,0xaa,0x89,0x8a,0x8f,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0d,0x0a,0x0c,0x3c,0x2e,0x38,0x3e,0x2f,0x39, 0x3f,0x30,0x3b,0x96,0x92,0x9e,0x61,0x6c,0x8a,0x54,0x5f,0x7f,0x60,0x6d,0x92,0x62, 0x6d,0x93,0x63,0x6f,0x94,0x64,0x6f,0x94,0x64,0x6f,0x94,0x64,0x6f,0x94,0x64,0x71, 0x95,0x65,0x71,0x95,0x65,0x71,0x95,0x63,0x6f,0x94,0x62,0x6e,0x93,0x62,0x6d,0x93, 0x60,0x6d,0x92,0x5f,0x6c,0x92,0x5f,0x6b,0x91,0x5e,0x6a,0x90,0x5c,0x69,0x8f,0x5b, 0x67,0x8d,0x59,0x64,0x8d,0x3f,0x47,0x69,0x35,0x3d,0x5a,0x35,0x3d,0x5b,0x39,0x42, 0x61,0x3e,0x46,0x68,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x50,0x50,0x50,0xfd,0xfd,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x0f,0x0f, 0x00,0x00,0x00,0x00,0x00,0x00,0xf5,0xf5,0xf5,0xfd,0xfd,0xfd,0xff,0xff,0xff,0x94, 0x94,0x94,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x06,0x05,0x08,0x27,0x28,0x3e,0x2c,0x1f,0x30,0x59,0x45, 0x58,0x63,0x4f,0x62,0x4b,0x3a,0x48,0x46,0x36,0x42,0x31,0x24,0x2b,0x28,0x1d,0x23, 0x19,0x11,0x14,0x19,0x10,0x13,0x1a,0x12,0x15,0x1c,0x13,0x16,0x1d,0x14,0x17,0x56, 0x5d,0x77,0x52,0x5c,0x85,0x64,0x53,0x76,0x61,0x52,0x75,0x49,0x38,0x46,0x4c,0x3b, 0x49,0x4e,0x3d,0x4b,0x4b,0x3a,0x48,0x3b,0x2e,0x39,0x27,0x1e,0x25,0x19,0x13,0x18, 0x15,0x11,0x15,0x1a,0x15,0x19,0x2a,0x21,0x28,0x37,0x2b,0x34,0xb3,0xb9,0xca,0x86, 0x91,0xaf,0xb5,0xbc,0xcf,0xca,0xcf,0xdb,0xbd,0xc2,0xd2,0x36,0x37,0x4f,0x2d,0x21, 0x33,0x2c,0x1f,0x30,0x51,0x3b,0x54,0x57,0x40,0x5a,0x64,0x4c,0x69,0x5a,0x50,0x76, 0x28,0x25,0x36,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x16,0x11,0x14,0x33,0x26,0x2e,0x32,0x25,0x2d, 0xb3,0xb6,0xc7,0x58,0x64,0x8d,0x56,0x4b,0x62,0x66,0x52,0x66,0x68,0x53,0x68,0x32, 0x28,0x32,0x09,0x07,0x09,0x0c,0x09,0x0b,0x63,0x61,0x72,0x8a,0x94,0xb1,0x74,0x80, 0xa2,0x6d,0x79,0x9d,0xa3,0xab,0xc2,0x7f,0x85,0x9c,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x73,0x6d,0x7e,0x46,0x4f,0x6f,0x4c,0x56,0x7c,0x56,0x63,0x8b,0x5d,0x69,0x91, 0x5d,0x6a,0x91,0x5e,0x6a,0x91,0x5f,0x6c,0x93,0x60,0x6c,0x93,0x63,0x6f,0x95,0x63, 0x6f,0x95,0x64,0x71,0x96,0x66,0x72,0x98,0x6d,0x79,0x9c,0x76,0x82,0xa3,0x80,0x8b, 0xaa,0x88,0x92,0xb0,0x8e,0x98,0xb3,0x80,0x86,0x9d,0xa7,0xac,0xbb,0x43,0x44,0x46, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2e,0x22,0x2a,0x3c,0x2d, 0x37,0x3d,0x2e,0x39,0x42,0x34,0x3d,0x83,0x8d,0xa8,0x4f,0x58,0x79,0x61,0x6b,0x8f, 0x63,0x6f,0x94,0x64,0x71,0x95,0x64,0x71,0x95,0x64,0x71,0x95,0x65,0x71,0x95,0x66, 0x72,0x97,0x65,0x72,0x97,0x65,0x72,0x97,0x66,0x73,0x97,0x62,0x6e,0x93,0x63,0x6f, 0x94,0x63,0x6f,0x94,0x62,0x6d,0x93,0x5f,0x6c,0x92,0x5f,0x6c,0x92,0x5e,0x6b,0x91, 0x5e,0x6a,0x90,0x5c,0x69,0x8f,0x58,0x64,0x8c,0x39,0x42,0x61,0x34,0x3d,0x59,0x35, 0x3d,0x5c,0x3e,0x49,0x6d,0x1a,0x1f,0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x44,0x44,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0x77,0x77,0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0xbb,0xbb,0xbb,0xff,0xff,0xff,0xff,0xff,0xff,0x7c,0x7c, 0x7c,0x00,0x00,0x00,0x00,0x00,0x00,0x4a,0x4a,0x4a,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd, 0xf5,0xf5,0xf5,0x14,0x14,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0x0d,0x11,0x4a, 0x3c,0x54,0x65,0x51,0x65,0x51,0x40,0x4f,0x4b,0x3a,0x47,0x37,0x29,0x32,0x2e,0x21, 0x28,0x2d,0x20,0x27,0x27,0x1c,0x21,0x1a,0x12,0x15,0x19,0x11,0x13,0x1c,0x13,0x16, 0x1d,0x14,0x18,0x5e,0x68,0x89,0x64,0x53,0x76,0x5e,0x53,0x79,0x56,0x41,0x57,0x47, 0x37,0x44,0x4b,0x3a,0x47,0x4b,0x3a,0x47,0x43,0x34,0x41,0x2a,0x21,0x28,0x9f,0x9d, 0x9f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x7d,0x7f,0x66,0x68,0x71, 0x7c,0x85,0xa0,0xa2,0xaa,0xc1,0xc2,0xc8,0xd7,0xb8,0xbf,0xd0,0x49,0x4c,0x62,0x2d, 0x21,0x33,0x2c,0x1f,0x30,0x4c,0x38,0x50,0x64,0x4f,0x6d,0x64,0x53,0x74,0x62,0x4a, 0x65,0x5e,0x46,0x62,0x64,0x53,0x76,0x42,0x3c,0x5b,0x0b,0x0a,0x10,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x07,0x08,0x36,0x28,0x30,0x38,0x2c, 0x35,0xab,0xb0,0xc0,0xce,0xd1,0xde,0x55,0x62,0x8a,0x51,0x5c,0x85,0x62,0x4f,0x62, 0x67,0x53,0x67,0x64,0x50,0x63,0x3d,0x2e,0x39,0x3f,0x30,0x3b,0xb6,0xba,0xc9,0xce, 0xd2,0xde,0xb1,0xb8,0xcb,0x82,0x8c,0xab,0x96,0xa0,0xb9,0x49,0x4f,0x64,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x7e,0x91,0x4e,0x58,0x79,0x52,0x5c, 0x81,0x5f,0x6c,0x93,0x60,0x6c,0x93,0x63,0x6f,0x95,0x63,0x6f,0x95,0x65,0x72,0x98, 0x66,0x73,0x98,0x6a,0x75,0x9a,0x6b,0x76,0x9b,0x73,0x7e,0xa1,0x7a,0x84,0xa5,0x82, 0x8d,0xab,0x8a,0x93,0xb1,0x95,0x9f,0xb9,0x98,0xa1,0xba,0x8b,0x94,0xac,0x92,0x99, 0xab,0xae,0xb2,0xb9,0x06,0x06,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x15,0x10,0x13,0x3c, 0x2d,0x37,0x3c,0x2e,0x38,0x3c,0x2e,0x38,0x87,0x86,0x94,0x5a,0x65,0x85,0x59,0x63, 0x85,0x64,0x6f,0x94,0x66,0x72,0x97,0x64,0x6f,0x94,0x66,0x72,0x97,0x66,0x73,0x97, 0x67,0x73,0x97,0x66,0x73,0x97,0x67,0x73,0x98,0x65,0x71,0x95,0x66,0x73,0x97,0x64, 0x6f,0x94,0x64,0x6f,0x94,0x66,0x73,0x97,0x63,0x6f,0x94,0x62,0x6d,0x93,0x5f,0x6c, 0x92,0x5f,0x6b,0x91,0x5e,0x6a,0x91,0x5d,0x69,0x90,0x54,0x5e,0x82,0x38,0x41,0x60, 0x36,0x3e,0x5d,0x36,0x3e,0x5b,0x45,0x50,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x44,0x44, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x77,0x77,0x77,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xf0,0xf0,0xff,0xff,0xff,0xff, 0xff,0xff,0x14,0x14,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x9f,0x9f,0x9f,0xfd,0xfd, 0xfd,0xfd,0xfd,0xfd,0xb2,0xb2,0xb2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x0b,0x0a,0x0b,0x3e,0x2e,0x39,0x4a,0x39,0x47,0x4b,0x3a,0x47,0x47,0x37,0x43,0x2e, 0x21,0x28,0x2c,0x1f,0x26,0x2a,0x1e,0x25,0x2a,0x1e,0x24,0x27,0x1c,0x21,0x1d,0x14, 0x17,0x1b,0x12,0x15,0x1d,0x13,0x17,0x64,0x6f,0x94,0x64,0x4c,0x69,0x58,0x50,0x79, 0x40,0x31,0x3c,0x46,0x36,0x42,0x49,0x38,0x45,0x4b,0x3a,0x47,0x41,0x32,0x3e,0x23, 0x1b,0x21,0x9c,0x9b,0x9c,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x82,0x82, 0x83,0x4b,0x50,0x5e,0x7c,0x84,0x9e,0xbb,0xc2,0xd2,0xb7,0xbc,0xcf,0x74,0x79,0x92, 0x2e,0x24,0x38,0x2c,0x1f,0x31,0x38,0x29,0x3c,0x64,0x4e,0x6d,0x60,0x53,0x77,0x5a, 0x52,0x79,0x5a,0x52,0x79,0x64,0x4f,0x6e,0x5c,0x45,0x5f,0x62,0x4a,0x65,0x5a,0x4f, 0x73,0x22,0x20,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x26,0x2f,0x38, 0x2b,0x36,0x8b,0x93,0xaa,0xbe,0xc3,0xd3,0xca,0xce,0xd8,0x52,0x5d,0x87,0x52,0x5d, 0x88,0x51,0x57,0x7d,0x67,0x53,0x67,0x5d,0x4a,0x5c,0x39,0x2b,0x34,0x63,0x5f,0x71, 0xc5,0xca,0xd8,0xda,0xde,0xe7,0xd0,0xd5,0xe0,0xa7,0xad,0xc4,0x94,0x9b,0xb1,0x15, 0x15,0x1c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x23,0x2a,0x87, 0x87,0x9b,0x4e,0x57,0x77,0x5a,0x65,0x88,0x64,0x6f,0x95,0x67,0x73,0x98,0x66,0x72, 0x98,0x69,0x74,0x9a,0x6a,0x75,0x9a,0x6f,0x7b,0x9f,0x71,0x7c,0xa0,0x79,0x84,0xa5, 0x83,0x8e,0xac,0x8e,0x98,0xb4,0x94,0x9d,0xb8,0x9d,0xa5,0xbf,0x9f,0xa8,0xc0,0x9c, 0xa5,0xbe,0x94,0x9c,0xb2,0xa4,0xa9,0xba,0x6a,0x6a,0x6e,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x02,0x03, 0x35,0x27,0x30,0x3b,0x2c,0x36,0x3c,0x2d,0x37,0x40,0x31,0x3b,0x7a,0x84,0xa2,0x58, 0x63,0x83,0x62,0x6f,0x93,0x66,0x72,0x97,0x66,0x73,0x97,0x66,0x73,0x97,0x67,0x74, 0x98,0x67,0x73,0x98,0x67,0x73,0x98,0x69,0x75,0x99,0x67,0x73,0x98,0x69,0x74,0x98, 0x67,0x73,0x97,0x65,0x72,0x97,0x67,0x73,0x98,0x64,0x6f,0x94,0x64,0x6f,0x94,0x62, 0x6e,0x93,0x60,0x6d,0x92,0x60,0x6c,0x92,0x5e,0x6b,0x91,0x5c,0x69,0x8f,0x4b,0x56, 0x77,0x38,0x40,0x5f,0x38,0x3e,0x5d,0x38,0x40,0x60,0x4a,0x55,0x7f,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x44,0x44,0x44,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x77,0x77,0x77, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x60,0xfd,0xfd,0xfd, 0xff,0xff,0xff,0xc5,0xc5,0xc5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xd5, 0xd5,0xd5,0xfd,0xfd,0xfd,0xf4,0xf4,0xf4,0x1a,0x1a,0x1a,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x14,0x11,0x15,0x40,0x31,0x3d,0x31,0x24,0x2b,0x43,0x33,0x3e, 0x38,0x29,0x32,0x2e,0x21,0x28,0x2a,0x1f,0x25,0x2a,0x1e,0x25,0x28,0x1c,0x22,0x27, 0x1b,0x21,0x25,0x1a,0x1f,0x1f,0x15,0x19,0x20,0x18,0x1d,0x63,0x6e,0x94,0x62,0x4a, 0x66,0x54,0x50,0x78,0x3f,0x2f,0x3a,0x46,0x36,0x42,0x48,0x37,0x44,0x49,0x38,0x46, 0x40,0x31,0x3c,0x23,0x1b,0x21,0x9c,0x9b,0x9c,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0x82,0x82,0x84,0x3f,0x44,0x55,0x9b,0xa1,0xb2,0xa9,0xb1,0xc6,0x8a,0x92, 0xac,0x2a,0x24,0x3b,0x2c,0x1f,0x30,0x2c,0x1f,0x31,0x63,0x4b,0x67,0x64,0x53,0x76, 0x5a,0x52,0x79,0x5a,0x52,0x79,0x5a,0x52,0x79,0x57,0x50,0x79,0x5a,0x52,0x79,0x63, 0x4b,0x67,0x5c,0x44,0x5e,0x64,0x52,0x71,0x3c,0x39,0x57,0x09,0x08,0x0d,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x04,0x05, 0x49,0x44,0x5b,0x6a,0x72,0x92,0x95,0x9f,0xb9,0x9e,0xa2,0xb0,0x1d,0x1d,0x1f,0x39, 0x40,0x5d,0x52,0x5d,0x88,0x53,0x5e,0x88,0x5e,0x58,0x77,0x56,0x44,0x54,0x39,0x2a, 0x34,0x99,0xa0,0xb9,0xbf,0xc4,0xd5,0xcf,0xd3,0xdf,0xc8,0xcc,0xda,0xbe,0xc3,0xd3, 0x62,0x62,0x6d,0x03,0x02,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x4a,0x3e,0x49,0x7d,0x80,0x97,0x4d,0x56,0x75,0x60,0x6d,0x90,0x69, 0x75,0x9a,0x6b,0x76,0x9b,0x6c,0x77,0x9c,0x71,0x7c,0xa0,0x75,0x81,0xa2,0x7b,0x85, 0xa7,0x82,0x8c,0xab,0x91,0x9a,0xb5,0x9a,0xa3,0xbb,0xa3,0xab,0xc2,0xaa,0xb1,0xc7, 0xa7,0xaf,0xc4,0xa8,0xb0,0xc6,0xa4,0xac,0xc1,0x96,0x9d,0xb2,0x98,0x9b,0xaa,0x15, 0x16,0x17,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x1f,0x17,0x1d,0x3b,0x2c,0x36,0x3b,0x2c,0x36,0x3b,0x2c,0x36,0x82,0x82,0x92, 0x5d,0x67,0x87,0x5d,0x67,0x8a,0x65,0x71,0x96,0x67,0x73,0x98,0x67,0x73,0x98,0x66, 0x73,0x97,0x6a,0x75,0x99,0x67,0x74,0x98,0x69,0x74,0x98,0x6a,0x76,0x99,0x69,0x74, 0x98,0x69,0x74,0x98,0x67,0x73,0x98,0x6a,0x75,0x99,0x65,0x72,0x97,0x65,0x72,0x97, 0x64,0x6f,0x94,0x62,0x6e,0x93,0x62,0x6d,0x93,0x60,0x6d,0x92,0x5e,0x6a,0x91,0x5e, 0x6a,0x91,0x44,0x4d,0x6d,0x36,0x41,0x5d,0x37,0x3f,0x5e,0x3d,0x45,0x66,0x3f,0x49, 0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x44,0x44, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x99,0x99,0x99,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xbf,0xbf, 0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0x41,0x41,0x41,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xf0,0xf0,0xf0,0xfc,0xfc,0xfc,0xc1,0xc1,0xc1,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4c,0x3c,0x49,0x33,0x26, 0x2e,0x30,0x23,0x2a,0x28,0x1c,0x22,0x2a,0x1e,0x25,0x28,0x1d,0x22,0x27,0x1c,0x22, 0x26,0x1b,0x20,0x25,0x1a,0x1f,0x23,0x19,0x1e,0x24,0x19,0x1e,0x36,0x33,0x42,0x5d, 0x69,0x91,0x62,0x4a,0x66,0x52,0x4f,0x7b,0x3f,0x2f,0x3a,0x45,0x35,0x41,0x46,0x36, 0x42,0x48,0x37,0x44,0x40,0x31,0x3d,0x23,0x1c,0x22,0x9c,0x9b,0x9c,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x80,0x82,0x53,0x57,0x63,0x9a,0xa0,0xb2,0x99, 0xa2,0xba,0x26,0x22,0x3b,0x2c,0x1f,0x30,0x2c,0x1f,0x31,0x62,0x4a,0x66,0x64,0x53, 0x74,0x5d,0x52,0x79,0x5a,0x52,0x79,0x5a,0x52,0x79,0x58,0x50,0x79,0x57,0x50,0x79, 0x57,0x50,0x79,0x55,0x50,0x79,0x60,0x53,0x77,0x5e,0x46,0x62,0x5f,0x47,0x64,0x59, 0x4e,0x70,0x1e,0x1d,0x2c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x1d,0x1f,0x2e,0x54,0x5f,0x86,0x5e,0x67,0x85,0x55,0x5b,0x6a,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x51,0x76,0x53,0x5e,0x88,0x53,0x5e,0x87,0x50, 0x49,0x61,0x7b,0x7d,0x91,0xab,0xb2,0xc7,0xb8,0xbf,0xd0,0xcb,0xd0,0xdd,0xc3,0xc9, 0xd8,0xab,0xb1,0xc1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x67,0x58,0x65,0x6f,0x76,0x8e, 0x52,0x5c,0x7a,0x65,0x6f,0x93,0x6c,0x77,0x9b,0x6f,0x7c,0x9f,0x73,0x7e,0xa1,0x7b, 0x85,0xa7,0x83,0x8d,0xac,0x90,0x99,0xb4,0x9a,0xa3,0xbc,0xa3,0xab,0xc2,0xad,0xb4, 0xc9,0xaf,0xb7,0xca,0xb2,0xb9,0xcb,0xad,0xb4,0xc9,0xad,0xb5,0xc9,0xa3,0xaa,0xbe, 0x86,0x8e,0xa4,0x5f,0x65,0x73,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x08,0x06,0x08,0x3a,0x2b,0x35,0x3a,0x2c,0x36,0x3b,0x2c,0x36,0x44,0x36, 0x3f,0x77,0x80,0x9d,0x58,0x62,0x82,0x63,0x70,0x96,0x66,0x73,0x98,0x69,0x75,0x9a, 0x69,0x74,0x99,0x69,0x74,0x99,0x6a,0x75,0x99,0x6b,0x76,0x9a,0x6b,0x77,0x9a,0x6a, 0x76,0x99,0x6a,0x76,0x99,0x6b,0x76,0x9a,0x69,0x74,0x99,0x67,0x73,0x98,0x65,0x72, 0x95,0x67,0x73,0x97,0x64,0x6f,0x94,0x63,0x6f,0x94,0x62,0x6e,0x93,0x60,0x6c,0x92, 0x5f,0x6b,0x91,0x5d,0x69,0x8d,0x3d,0x45,0x64,0x38,0x40,0x5e,0x37,0x3f,0x5d,0x44, 0x50,0x74,0x20,0x24,0x36,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x44,0x44,0x44,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x99,0x99,0x99, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0xee,0xee,0xee,0xff,0xff,0xff,0xff,0xff,0xff,0x08,0x08,0x08,0x00,0x00, 0x00,0x00,0x00,0x00,0x43,0x43,0x43,0xf4,0xf4,0xf4,0xf2,0xf2,0xf2,0x45,0x45,0x45, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5b, 0x48,0x59,0x35,0x27,0x2f,0x2b,0x1f,0x25,0x1b,0x13,0x16,0x25,0x1a,0x1f,0x28,0x1c, 0x22,0x26,0x1b,0x20,0x24,0x19,0x1e,0x24,0x19,0x1e,0x23,0x19,0x1e,0x23,0x18,0x1d, 0x48,0x4a,0x62,0x56,0x63,0x8b,0x62,0x4a,0x66,0x52,0x4f,0x7a,0x3f,0x30,0x3b,0x44, 0x34,0x40,0x46,0x36,0x42,0x49,0x38,0x45,0x40,0x31,0x3d,0x23,0x1b,0x22,0x9c,0x9b, 0x9c,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x81,0x82,0x84,0x55,0x59,0x65, 0x99,0x9f,0xb1,0x33,0x36,0x54,0x29,0x1c,0x2c,0x2c,0x1f,0x30,0x4e,0x3a,0x52,0x64, 0x50,0x71,0x62,0x53,0x77,0x5a,0x52,0x79,0x5a,0x52,0x79,0x5a,0x52,0x79,0x57,0x50, 0x79,0x57,0x50,0x79,0x57,0x50,0x79,0x55,0x50,0x79,0x54,0x50,0x79,0x56,0x50,0x79, 0x64,0x53,0x73,0x60,0x48,0x64,0x64,0x53,0x75,0x3c,0x3a,0x59,0x0c,0x0b,0x11,0x00, 0x00,0x00,0x00,0x00,0x00,0x22,0x23,0x34,0x1a,0x1e,0x2a,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x51,0x5c,0x86, 0x53,0x5e,0x89,0x5b,0x67,0x8c,0xd5,0xd8,0xe1,0xc3,0xc9,0xd8,0xbc,0xc2,0xd2,0xc1, 0xc6,0xd6,0xc0,0xc6,0xd5,0x1e,0x1f,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x04, 0x05,0x74,0x66,0x73,0x75,0x7e,0x97,0x5a,0x64,0x82,0x6f,0x7b,0x9d,0x75,0x81,0xa2, 0x7b,0x86,0xa7,0x83,0x8d,0xac,0x92,0x9c,0xb7,0x9c,0xa5,0xbe,0xad,0xb4,0xc9,0xb0, 0xb7,0xca,0xb4,0xbb,0xce,0xb8,0xbe,0xd0,0xb5,0xbc,0xcf,0xb4,0xbb,0xce,0xb2,0xb9, 0xcb,0xa5,0xac,0xc2,0x8d,0x96,0xad,0x82,0x8b,0xa3,0x23,0x26,0x2c,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x2c,0x21,0x29,0x3c,0x2d,0x37,0x3b,0x2d,0x36,0x3b, 0x2d,0x36,0x76,0x72,0x81,0x60,0x6b,0x8a,0x5c,0x68,0x8c,0x66,0x73,0x98,0x69,0x75, 0x9a,0x69,0x75,0x9a,0x6a,0x75,0x9a,0x6b,0x76,0x9b,0x6d,0x79,0x9c,0x6b,0x77,0x9b, 0x6c,0x79,0x9b,0x6b,0x76,0x9a,0x6d,0x79,0x9b,0x6a,0x76,0x99,0x6a,0x76,0x99,0x6b, 0x76,0x9a,0x67,0x74,0x98,0x67,0x73,0x98,0x65,0x72,0x95,0x64,0x71,0x95,0x63,0x6f, 0x94,0x63,0x6e,0x94,0x5f,0x6b,0x91,0x52,0x5d,0x80,0x3b,0x44,0x62,0x37,0x41,0x5d, 0x36,0x41,0x5e,0x4f,0x5e,0x86,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x44,0x44,0x44,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0x99,0x99,0x99,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17, 0x17,0x17,0x4f,0x4f,0x4f,0x75,0x75,0x75,0x81,0x81,0x81,0x89,0x89,0x89,0x75,0x75, 0x75,0x44,0x44,0x44,0x0a,0x0a,0x0a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x53,0x53,0x53,0xfc,0xfc,0xfc,0xff,0xff,0xff,0x97,0x97,0x97,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x88,0x88,0x88,0xf9,0xf9,0xf9,0xd1,0xd1, 0xd1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x61,0x4e,0x60,0x37,0x29,0x32,0x27,0x1c,0x21,0x1b,0x12,0x15,0x19, 0x11,0x13,0x21,0x17,0x1b,0x24,0x19,0x1e,0x23,0x19,0x1e,0x22,0x18,0x1c,0x23,0x18, 0x1d,0x21,0x17,0x1b,0x54,0x5b,0x7a,0x53,0x5f,0x89,0x64,0x4c,0x69,0x52,0x4f,0x7a, 0x3f,0x30,0x3a,0x43,0x33,0x3e,0x45,0x35,0x41,0x49,0x38,0x46,0x41,0x32,0x3e,0x23, 0x1b,0x21,0x9c,0x9b,0x9c,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x82,0x83, 0x84,0x5c,0x5f,0x69,0x4e,0x57,0x76,0x29,0x1c,0x2c,0x2c,0x1e,0x30,0x3c,0x2c,0x40, 0x64,0x4e,0x6c,0x64,0x53,0x76,0x5e,0x53,0x79,0x5a,0x52,0x79,0x5a,0x52,0x79,0x58, 0x50,0x79,0x57,0x50,0x79,0x57,0x50,0x79,0x56,0x50,0x79,0x55,0x50,0x79,0x54,0x50, 0x79,0x55,0x50,0x79,0x55,0x50,0x79,0x5a,0x52,0x79,0x64,0x4e,0x6d,0x64,0x4d,0x6a, 0x5b,0x50,0x75,0x27,0x25,0x39,0x02,0x02,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x27,0x2c,0x40,0x53,0x5e,0x88,0x63,0x6e,0x95,0xe2,0xe5,0xec,0xc3,0xc9,0xd8, 0xbc,0xc3,0xd3,0xc1,0xc7,0xd6,0x67,0x6a,0x72,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x0c,0x09,0x0c,0x86,0x79,0x86,0x77,0x80,0x98,0x62,0x69, 0x85,0x77,0x83,0xa2,0x84,0x8e,0xac,0x8b,0x95,0xb2,0x9a,0xa3,0xbb,0xab,0xb2,0xc7, 0xb1,0xb8,0xcb,0xbb,0xc1,0xd2,0xbf,0xc4,0xd5,0xc1,0xc7,0xd6,0xbe,0xc3,0xd3,0xba, 0xc0,0xd1,0xb7,0xbc,0xcf,0xa5,0xad,0xc3,0x90,0x98,0xb2,0x79,0x83,0x9d,0x6a,0x71, 0x85,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x13,0x17,0x3c,0x2d,0x37,0x3c,0x2d,0x37, 0x3b,0x2d,0x36,0x4c,0x3f,0x49,0x77,0x7f,0x9c,0x5b,0x64,0x84,0x65,0x71,0x97,0x69, 0x75,0x9a,0x6a,0x75,0x9a,0x6b,0x76,0x9b,0x6c,0x77,0x9c,0x6d,0x79,0x9c,0x6b,0x76, 0x9b,0x6e,0x7a,0x9d,0x6b,0x77,0x9b,0x6c,0x77,0x9b,0x6d,0x79,0x9b,0x6c,0x79,0x9b, 0x6b,0x76,0x9a,0x6c,0x77,0x9b,0x6a,0x75,0x99,0x69,0x74,0x98,0x67,0x74,0x98,0x64, 0x71,0x95,0x64,0x6f,0x94,0x63,0x6f,0x94,0x62,0x6d,0x93,0x4a,0x54,0x74,0x3b,0x44, 0x62,0x37,0x40,0x5f,0x3a,0x45,0x63,0x49,0x53,0x7b,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x44,0x44,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0x99,0x99,0x99,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4c,0x4c,0x4c,0x5d,0x5d,0x5d, 0x2b,0x2b,0x2b,0x0c,0x0c,0x0c,0x03,0x03,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x0c, 0x0c,0x0c,0x2c,0x2c,0x2c,0x80,0x80,0x80,0xce,0xce,0xce,0xab,0xab,0xab,0x53,0x53, 0x53,0x00,0x00,0x00,0x00,0x00,0x00,0xb6,0xb6,0xb6,0xff,0xff,0xff,0xff,0xff,0xff, 0x30,0x30,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xb5,0xb5,0xb5,0xf4, 0xf4,0xf4,0x72,0x72,0x72,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5a,0x48,0x5a,0x37,0x29,0x32,0x26,0x1c,0x22, 0x1a,0x12,0x15,0x19,0x11,0x13,0x18,0x10,0x12,0x1f,0x15,0x19,0x22,0x18,0x1c,0x21, 0x17,0x1b,0x22,0x18,0x1c,0x20,0x17,0x1b,0x5e,0x67,0x8b,0x52,0x5d,0x88,0x64,0x53, 0x76,0x52,0x50,0x7b,0x3f,0x30,0x3a,0x44,0x34,0x3f,0x48,0x37,0x44,0x49,0x38,0x46, 0x42,0x33,0x3f,0x21,0x1a,0x20,0x9d,0x9d,0x9e,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0x83,0x83,0x85,0x47,0x4c,0x5b,0x25,0x1a,0x28,0x2a,0x1e,0x2e,0x2d,0x21, 0x31,0x62,0x4b,0x68,0x64,0x53,0x75,0x5e,0x53,0x79,0x5a,0x52,0x79,0x5a,0x52,0x79, 0x57,0x4f,0x75,0x4d,0x46,0x6a,0x45,0x3f,0x5f,0x42,0x3c,0x5b,0x40,0x3c,0x5b,0x41, 0x3e,0x5d,0x47,0x43,0x66,0x51,0x4a,0x70,0x56,0x4f,0x77,0x5a,0x52,0x79,0x5a,0x52, 0x79,0x64,0x53,0x75,0x62,0x4a,0x66,0x64,0x52,0x72,0x44,0x41,0x64,0x11,0x11,0x1a, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x46,0x4a,0x6f,0x5b,0x66,0x8e,0xca,0xcd, 0xd7,0x9e,0xa5,0xb6,0x9a,0xa0,0xae,0x46,0x4a,0x52,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x13,0x17,0x93, 0x88,0x93,0x7b,0x83,0x9b,0x6a,0x74,0x8e,0x8b,0x95,0xb2,0x99,0xa1,0xbb,0xa9,0xb1, 0xc6,0xb2,0xb9,0xcb,0xb9,0xc0,0xd1,0xc7,0xcb,0xda,0xc4,0xca,0xd8,0xc2,0xc8,0xd7, 0xbe,0xc3,0xd3,0xb5,0xbc,0xcf,0xad,0xb5,0xc9,0xa1,0xa9,0xc0,0x90,0x99,0xb4,0x80, 0x8a,0xa8,0x7d,0x86,0xa0,0x33,0x36,0x3f,0x07,0x05,0x06,0x3a,0x2c,0x36,0x3d,0x2e, 0x39,0x3c,0x2d,0x37,0x3c,0x2d,0x37,0x71,0x73,0x8a,0x5e,0x68,0x87,0x5f,0x6b,0x8d, 0x67,0x74,0x99,0x6b,0x76,0x9b,0x6a,0x75,0x9a,0x6c,0x77,0x9c,0x6b,0x76,0x9b,0x6c, 0x77,0x9b,0x6e,0x7a,0x9d,0x6d,0x7a,0x9d,0x6d,0x79,0x9c,0x6e,0x7a,0x9d,0x6c,0x79, 0x9b,0x6c,0x77,0x9a,0x6c,0x79,0x9b,0x6b,0x76,0x9a,0x6b,0x77,0x9a,0x66,0x73,0x97, 0x6a,0x75,0x99,0x65,0x71,0x95,0x64,0x6f,0x94,0x62,0x6d,0x93,0x62,0x6d,0x93,0x40, 0x4a,0x69,0x3b,0x43,0x5f,0x37,0x40,0x5d,0x3d,0x48,0x69,0x31,0x39,0x54,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x44,0x44, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x99,0x99,0x99,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x2c,0x2c,0x2c,0x9e,0x9e,0x9e,0x50,0x50,0x50,0x07,0x07, 0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x34, 0x34,0x34,0x5b,0x5b,0x5b,0x3b,0x3b,0x3b,0x00,0x00,0x00,0xeb,0xeb,0xeb,0xff,0xff, 0xff,0xff,0xff,0xff,0x08,0x08,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xcd,0xcd,0xcd,0xe0,0xe0,0xe0,0x07,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x15,0x11,0x15,0x2a,0x21, 0x28,0x25,0x1b,0x21,0x18,0x11,0x14,0x16,0x0e,0x10,0x17,0x10,0x12,0x18,0x10,0x12, 0x1c,0x13,0x16,0x20,0x16,0x1a,0x20,0x17,0x1b,0x1f,0x16,0x1a,0x62,0x6d,0x94,0x52, 0x5b,0x85,0x53,0x4f,0x7a,0x52,0x57,0x83,0x41,0x31,0x3d,0x44,0x34,0x40,0x48,0x37, 0x44,0x4b,0x3a,0x47,0x41,0x32,0x3e,0x29,0x28,0x31,0x9e,0x9f,0xa0,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0x83,0x84,0x85,0x24,0x1c,0x29,0x25,0x1a,0x28,0x2d, 0x20,0x31,0x5b,0x45,0x61,0x64,0x50,0x71,0x62,0x53,0x77,0x5c,0x52,0x79,0x59,0x51, 0x78,0x54,0x4d,0x71,0x45,0x3f,0x5f,0x2e,0x2a,0x40,0x1c,0x1a,0x27,0x17,0x15,0x1f, 0x15,0x14,0x1e,0x18,0x17,0x23,0x24,0x22,0x34,0x39,0x34,0x4f,0x4f,0x48,0x6b,0x5b, 0x51,0x78,0x5d,0x52,0x79,0x5c,0x52,0x79,0x62,0x53,0x77,0x64,0x4d,0x6b,0x63,0x4b, 0x67,0x5c,0x52,0x79,0x2f,0x2e,0x46,0x04,0x04,0x06,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x32, 0x39,0x52,0x71,0x75,0x80,0x4d,0x52,0x60,0x1e,0x20,0x26,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x20,0x19,0x1f,0xa1,0x98,0xa1,0x85,0x8b,0xa0,0x89,0x91,0xaa,0xa5, 0xad,0xc3,0xaf,0xb5,0xca,0xbf,0xc4,0xd5,0xc4,0xc9,0xd8,0xc6,0xca,0xd9,0xc3,0xc9, 0xd8,0xc6,0xcb,0xd9,0xbc,0xc3,0xd3,0xb7,0xbe,0xcf,0xaa,0xb2,0xc7,0x9c,0xa5,0xbe, 0x8e,0x99,0xb4,0x86,0x91,0xaf,0x74,0x7d,0x9a,0x7a,0x81,0x96,0x31,0x26,0x2e,0x3f, 0x30,0x3a,0x3e,0x2f,0x39,0x3e,0x2f,0x39,0x4f,0x48,0x59,0x67,0x72,0x96,0x5d,0x67, 0x88,0x65,0x72,0x97,0x6a,0x75,0x9a,0x6c,0x77,0x9c,0x6c,0x77,0x9b,0x6b,0x77,0x9b, 0x6e,0x7a,0x9d,0x6f,0x7b,0x9f,0x6f,0x7b,0x9f,0x6e,0x7a,0x9d,0x6e,0x7a,0x9d,0x6e, 0x7a,0x9d,0x6f,0x7b,0x9f,0x6e,0x7a,0x9c,0x6d,0x79,0x9b,0x6c,0x77,0x9a,0x6b,0x76, 0x9a,0x6b,0x76,0x9a,0x66,0x73,0x97,0x65,0x72,0x97,0x64,0x6f,0x94,0x64,0x6f,0x94, 0x5b,0x65,0x89,0x3d,0x45,0x63,0x38,0x40,0x5c,0x37,0x3f,0x5e,0x4b,0x55,0x79,0x17, 0x1a,0x26,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x44,0x44,0x44,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x99,0x99,0x99, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xdd,0xdd,0xdd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x44, 0x44,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x22,0x77,0x77,0x77,0xee,0xee, 0xee,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x99,0x99,0x99,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x21,0x21,0x21,0xab,0xab,0xab,0x52,0x52,0x52,0x05,0x05,0x05,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x31,0x31,0x31,0xfc, 0xfc,0xfc,0xff,0xff,0xff,0xa7,0xa7,0xa7,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xdc,0xdc,0xdc,0xaf,0xaf,0xaf,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x44,0x44,0x44,0x77,0x77,0x77,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdd,0xdd,0xdd,0x77, 0x77,0x77,0x7e,0x7c,0x7e,0x20,0x1c,0x1f,0x11,0x0c,0x0f,0x0d,0x09,0x0a,0x12,0x0c, 0x0d,0x14,0x0d,0x10,0x15,0x0e,0x10,0x1c,0x13,0x16,0x1f,0x15,0x19,0x28,0x21,0x2a, 0x65,0x72,0x96,0x52,0x56,0x81,0x52,0x53,0x7e,0x54,0x5f,0x89,0x41,0x31,0x3c,0x44, 0x34,0x40,0x48,0x37,0x44,0x4b,0x3b,0x49,0x48,0x46,0x5a,0x3b,0x3f,0x4d,0x9d,0x9e, 0x9f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7c,0x7d,0x80,0x15,0x0e,0x17, 0x28,0x1c,0x2b,0x3f,0x30,0x46,0x64,0x4f,0x6d,0x64,0x53,0x75,0x5e,0x53,0x79,0x59, 0x50,0x76,0x4e,0x47,0x69,0x3d,0x38,0x52,0x26,0x22,0x34,0x4f,0x4e,0x53,0xee,0xee, 0xee,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0xaf,0xb1,0x52,0x50,0x5f, 0x46,0x3f,0x60,0x5b,0x50,0x76,0x5e,0x53,0x79,0x5f,0x53,0x76,0x49,0x40,0x5f,0x41, 0x38,0x56,0x64,0x53,0x76,0x63,0x4c,0x69,0x64,0x50,0x71,0x51,0x49,0x6c,0x19,0x18, 0x26,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x33,0x33,0x77,0x77,0x77,0x99,0x99,0x99,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0x99,0x99,0x99,0x77,0x77,0x77,0x44,0x44,0x44,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0xdd,0xdd,0xdd,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0x44,0x44,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x22,0x77,0x77, 0x77,0xee,0xee,0xee,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x99,0x99,0x99, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x29,0x20,0x28,0xb1,0xaa,0xb1, 0x9a,0xa0,0xb3,0xa2,0xa9,0xbe,0xc1,0xc7,0xd6,0xda,0xde,0xe7,0xe0,0xe3,0xea,0xd6, 0xd9,0xe3,0xcb,0xd0,0xdd,0xc3,0xc9,0xd8,0xbe,0xc3,0xd3,0xb2,0xb9,0xcb,0xa2,0xaa, 0xc1,0x9b,0xa3,0xbc,0x8b,0x95,0xb2,0x86,0x91,0xaf,0x80,0x8a,0xa8,0x7a,0x83,0x9b, 0x60,0x5c,0x70,0x40,0x31,0x3c,0x3f,0x30,0x3b,0x40,0x32,0x3e,0x63,0x6a,0x8c,0x5c, 0x68,0x89,0x62,0x6c,0x8f,0x6a,0x75,0x9a,0x6b,0x76,0x9b,0x6d,0x79,0x9d,0x6d,0x7a, 0x9d,0x6d,0x7a,0x9d,0x6e,0x7a,0x9d,0x6d,0x79,0x9c,0x6f,0x7b,0x9f,0x6e,0x7a,0x9d, 0x6e,0x7a,0x9d,0x6e,0x7a,0x9d,0x6d,0x79,0x9c,0x6e,0x7b,0x9d,0x6c,0x77,0x9c,0x6c, 0x79,0x9b,0x6c,0x77,0x9a,0x69,0x75,0x99,0x69,0x74,0x98,0x66,0x72,0x97,0x63,0x6f, 0x94,0x63,0x6e,0x94,0x4f,0x5a,0x7b,0x3c,0x45,0x62,0x36,0x3f,0x5a,0x37,0x41,0x5e, 0x4c,0x5a,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x44,0x44,0x44,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0x99,0x99,0x99,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xdd,0xdd,0xdd,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0x44,0x44,0x44,0x00,0x00,0x00,0x66,0x66,0x66,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xee,0xee,0xee,0x11,0x11, 0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x9e,0x9e,0x9e,0x82,0x82,0x82,0x05,0x05,0x05,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x93,0x93,0x93,0xff,0xff,0xff,0xff,0xff,0xff,0x36,0x36,0x36,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x33,0x33,0x33,0xe4,0xe4,0xe4,0x5b,0x5b,0x5b,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x11,0x11,0x77, 0x77,0x77,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xcd,0xcd,0xcd,0x6a, 0x68,0x69,0x08,0x05,0x06,0x0d,0x08,0x09,0x13,0x0d,0x0f,0x18,0x0f,0x12,0x1b,0x12, 0x15,0x3d,0x3c,0x4f,0x66,0x73,0x98,0x52,0x50,0x7b,0x53,0x5e,0x88,0x57,0x64,0x8c, 0x42,0x32,0x3e,0x46,0x36,0x42,0x49,0x38,0x47,0x57,0x5d,0x7f,0x6a,0x75,0x90,0x30, 0x35,0x45,0x9f,0x9f,0xa0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7a,0x79, 0x7a,0x17,0x10,0x18,0x29,0x1f,0x2f,0x64,0x4c,0x6a,0x64,0x52,0x72,0x60,0x53,0x77, 0x58,0x4e,0x74,0x48,0x42,0x61,0x31,0x2c,0x41,0x1a,0x18,0x23,0x9d,0x9d,0x9f,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x6e,0x6e,0x71,0x21,0x1f, 0x2f,0x38,0x34,0x4f,0x4e,0x47,0x6b,0x5d,0x52,0x78,0x39,0x30,0x4b,0x30,0x27,0x3e, 0x2d,0x24,0x39,0x2c,0x24,0x3a,0x3d,0x34,0x50,0x60,0x53,0x77,0x64,0x52,0x72,0x31, 0x22,0x35,0x2f,0x24,0x37,0x27,0x23,0x38,0x0d,0x0c,0x12,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x66,0x66,0x66,0xdd,0xdd,0xdd,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xee,0xee, 0xee,0x77,0x77,0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xdd,0xdd,0xdd,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0x44,0x44,0x44,0x00,0x00,0x00,0x66,0x66,0x66,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xee,0xee, 0xee,0x11,0x11,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x37,0x2b,0x35,0xc4,0xbf,0xc3,0xc2,0xc7,0xd2,0xcc,0xcf,0xd8,0xf0,0xf1,0xf5, 0xeb,0xee,0xf2,0xdd,0xe0,0xe8,0xc7,0xcb,0xda,0xbf,0xc4,0xd5,0xb7,0xbe,0xd0,0xac, 0xb3,0xc8,0x9f,0xa7,0xbf,0x95,0x9f,0xb9,0x8d,0x96,0xb3,0x88,0x92,0xb0,0x89,0x93, 0xb0,0x79,0x82,0x9c,0x78,0x80,0x9b,0x43,0x34,0x40,0x41,0x32,0x3d,0x54,0x53,0x6c, 0x63,0x70,0x93,0x5e,0x68,0x88,0x6a,0x75,0x99,0x6b,0x76,0x9b,0x6a,0x76,0x9a,0x6d, 0x7a,0x9d,0x6e,0x7a,0x9d,0x6f,0x7b,0x9f,0x6f,0x7b,0x9f,0x6f,0x7b,0x9f,0x71,0x7c, 0xa0,0x6f,0x7b,0x9f,0x6f,0x7b,0x9f,0x6f,0x7b,0x9f,0x71,0x7c,0xa0,0x6e,0x7a,0x9d, 0x6d,0x79,0x9c,0x6d,0x79,0x9c,0x6c,0x77,0x9c,0x69,0x74,0x98,0x69,0x74,0x98,0x65, 0x72,0x97,0x65,0x71,0x95,0x63,0x6f,0x94,0x44,0x4e,0x6c,0x38,0x40,0x5d,0x35,0x3f, 0x5a,0x36,0x40,0x5b,0x3d,0x48,0x6b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x44,0x44,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0x99,0x99,0x99,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xdd,0xdd,0xdd,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x44,0x44,0x44,0x77,0x77,0x77,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x77, 0x77,0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x6d,0x6d,0x6d,0xdc,0xdc,0xdc,0x23,0x23,0x23,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xdc,0xdc,0xdc,0xff,0xff,0xff,0xff,0xff,0xff,0x08,0x08,0x08, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5e,0x5e,0x5e,0xd0,0xd0,0xd0,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x88,0x88,0x88, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xdd,0xdd,0xdd,0x47,0x46,0x46,0x0a,0x07,0x08,0x13, 0x0d,0x0e,0x18,0x10,0x13,0x4c,0x52,0x6b,0x65,0x72,0x98,0x52,0x55,0x80,0x53,0x5f, 0x89,0x57,0x64,0x8c,0x48,0x39,0x4c,0x45,0x35,0x41,0x4d,0x46,0x5b,0x82,0x8c,0xab, 0x54,0x5e,0x7f,0x38,0x3e,0x4c,0xa0,0xa0,0xa1,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0x7a,0x79,0x7a,0x17,0x11,0x19,0x4f,0x3f,0x58,0x64,0x4e,0x6c,0x62,0x51, 0x74,0x55,0x4b,0x6e,0x44,0x3c,0x59,0x2a,0x26,0x38,0x41,0x40,0x45,0xde,0xde,0xde, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbd,0xbd,0xbd,0x32,0x31,0x39,0x28, 0x26,0x3a,0x40,0x3d,0x5d,0x4f,0x4a,0x70,0x54,0x4f,0x76,0x37,0x31,0x4c,0x2a,0x24, 0x3b,0x30,0x29,0x42,0x59,0x4e,0x73,0x38,0x30,0x4b,0x2c,0x24,0x3c,0x43,0x3a,0x59, 0x35,0x2d,0x46,0x2d,0x24,0x39,0x2c,0x20,0x31,0x2b,0x1f,0x2f,0x25,0x1d,0x2f,0x13, 0x12,0x1c,0x34,0x34,0x34,0xcc,0xcc,0xcc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdd,0xdd,0xdd,0x44,0x44,0x44,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xdd,0xdd, 0xdd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x44,0x44,0x44,0x77,0x77,0x77, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0x77,0x77,0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x50,0x40,0x4e,0xd4,0xd0,0xd3,0xeb,0xeb, 0xed,0xee,0xef,0xf0,0xf1,0xf2,0xf5,0xd7,0xda,0xe5,0xc6,0xca,0xd9,0xba,0xc0,0xd1, 0xb1,0xb8,0xcb,0xa8,0xb0,0xc6,0x99,0xa2,0xbb,0x8e,0x99,0xb4,0x8a,0x94,0xb1,0x8a, 0x94,0xb1,0x89,0x93,0xb0,0x84,0x8e,0xa9,0x76,0x81,0x9a,0x5c,0x5a,0x71,0x47,0x3b, 0x4a,0x68,0x73,0x97,0x60,0x6a,0x8b,0x65,0x6f,0x92,0x6a,0x75,0x9a,0x6b,0x76,0x9b, 0x6d,0x7a,0x9d,0x6d,0x79,0x9c,0x6d,0x7a,0x9d,0x6f,0x7b,0x9f,0x71,0x7c,0x9f,0x6f, 0x7b,0x9f,0x71,0x7c,0x9f,0x6f,0x7b,0x9f,0x72,0x7d,0xa0,0x6f,0x7b,0x9f,0x6e,0x7a, 0x9d,0x6d,0x7a,0x9d,0x6d,0x79,0x9c,0x6e,0x7a,0x9d,0x6c,0x77,0x9b,0x6b,0x76,0x9b, 0x69,0x74,0x99,0x67,0x73,0x98,0x64,0x6f,0x94,0x5d,0x69,0x8b,0x3c,0x43,0x60,0x37, 0x3f,0x5a,0x37,0x3e,0x5a,0x3b,0x44,0x62,0x2e,0x34,0x4d,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x44,0x44, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x99,0x99,0x99,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xdd, 0xdd,0xdd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaa,0xaa,0xaa,0xff,0xff, 0xff,0xff,0xff,0xff,0xaa,0xaa,0xaa,0x44,0x44,0x44,0x00,0x00,0x00,0x00,0x00,0x00, 0x33,0x33,0x33,0x11,0x11,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xac,0xac,0xac,0xd9,0xd9,0xd9,0x0a,0x0a,0x0a,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0xf8,0xf8,0xf8,0xff,0xff,0xff,0xa2,0xa2, 0xa2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x79,0x79,0x79, 0xaf,0xaf,0xaf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x22,0xcc,0xcc, 0xcc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xaa,0xaa,0xaa,0x77,0x77,0x77,0x33,0x33,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x33,0x33,0x77,0x77,0x77,0x99,0x99, 0x99,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0x68,0x67,0x68,0x0c,0x08,0x09,0x15,0x0e,0x10,0x54,0x5d,0x7a,0x64,0x6f,0x96,0x52, 0x55,0x80,0x54,0x5f,0x89,0x56,0x63,0x8b,0x52,0x4f,0x7a,0x4d,0x41,0x5a,0x76,0x82, 0xa3,0x66,0x72,0x98,0x57,0x62,0x81,0x4e,0x52,0x5b,0xa0,0xa1,0xa1,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0x7a,0x79,0x7b,0x19,0x13,0x1c,0x58,0x43,0x5d,0x60, 0x4f,0x6d,0x4f,0x44,0x62,0x37,0x31,0x49,0x21,0x1d,0x2b,0x7e,0x7d,0x81,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7d,0x7d,0x81,0x1e,0x1d,0x2b, 0x32,0x30,0x49,0x44,0x41,0x64,0x4f,0x4c,0x76,0x52,0x4f,0x7a,0x54,0x50,0x79,0x4f, 0x4b,0x73,0x4d,0x46,0x6c,0x58,0x50,0x79,0x5c,0x52,0x79,0x5a,0x52,0x79,0x2f,0x29, 0x44,0x2a,0x25,0x3c,0x2a,0x24,0x3c,0x29,0x22,0x3b,0x27,0x21,0x39,0x25,0x1d,0x2d, 0x16,0x10,0x18,0x5a,0x59,0x5b,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xbb,0xbb,0xbb,0x77,0x77,0x77,0x33,0x33,0x33,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x77,0x77,0x77, 0x77,0x77,0x77,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0x77,0x77,0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0xdd,0xdd,0xdd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaa,0xaa, 0xaa,0xff,0xff,0xff,0xff,0xff,0xff,0xaa,0xaa,0xaa,0x44,0x44,0x44,0x00,0x00,0x00, 0x00,0x00,0x00,0x33,0x33,0x33,0x11,0x11,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5c, 0x4a,0x5a,0xdd,0xda,0xdc,0xeb,0xeb,0xed,0xd2,0xd5,0xde,0xc8,0xcc,0xda,0xbf,0xc4, 0xd5,0xb1,0xb8,0xcb,0xaa,0xb1,0xc7,0x9d,0xa5,0xbe,0x94,0x9d,0xb8,0x90,0x9a,0xb5, 0x8d,0x98,0xb3,0x8b,0x95,0xb2,0x8d,0x96,0xb3,0x8b,0x94,0xb1,0x7b,0x85,0x9d,0x82, 0x8a,0xa6,0x64,0x6b,0x8d,0x65,0x6f,0x92,0x61,0x6b,0x8c,0x6b,0x76,0x9b,0x6c,0x79, 0x9c,0x6c,0x77,0x9b,0x6f,0x7b,0x9f,0x6e,0x7a,0x9d,0x6e,0x7a,0x9d,0x6f,0x7b,0x9f, 0x71,0x7c,0xa0,0x6f,0x7c,0x9f,0x6f,0x7b,0x9f,0x71,0x7c,0xa0,0x6f,0x7b,0x9f,0x71, 0x7c,0xa0,0x6e,0x7a,0x9d,0x6f,0x7b,0x9f,0x6e,0x7a,0x9d,0x6c,0x77,0x9c,0x69,0x75, 0x9a,0x6a,0x76,0x9a,0x6a,0x75,0x9a,0x65,0x72,0x98,0x64,0x71,0x96,0x50,0x5b,0x7b, 0x37,0x40,0x5b,0x34,0x3d,0x56,0x34,0x3c,0x56,0x3f,0x49,0x6b,0x06,0x07,0x09,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x44,0x44,0x44,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x99,0x99,0x99, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xdd,0xdd,0xdd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0x77,0x77,0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x1d,0x1d,0x1d,0xcf,0xcf,0xcf,0xba,0xba,0xba,0x05,0x05,0x05,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x70,0x70,0xfd,0xfd,0xfd,0xff, 0xff,0xff,0x34,0x34,0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x9d,0x9d,0x9d,0x9a,0x9a,0x9a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x22,0xee, 0xee,0xee,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x88,0x88, 0x88,0x11,0x11,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7b,0x7b,0x7b,0xee,0xee,0xee,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5a,0x58,0x59,0x12,0x0c,0x0e,0x50,0x57,0x73, 0x63,0x6e,0x94,0x52,0x53,0x7e,0x53,0x5e,0x88,0x56,0x63,0x8b,0x55,0x60,0x8a,0x56, 0x62,0x8b,0x5e,0x6b,0x92,0x5d,0x69,0x91,0x83,0x8a,0x9f,0x53,0x55,0x5d,0xa2,0xa2, 0xa2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7a,0x79,0x7b,0x32,0x26,0x34, 0x51,0x3f,0x57,0x4c,0x3f,0x5a,0x2c,0x27,0x3a,0x33,0x32,0x39,0xbd,0xbd,0xbd,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xcd,0xcd,0xce,0x41,0x40,0x47,0x27,0x25, 0x38,0x3f,0x3b,0x59,0x4c,0x48,0x6e,0x50,0x4d,0x78,0x52,0x4f,0x7a,0x52,0x4f,0x7a, 0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x53,0x4f,0x7a,0x54,0x50,0x79,0x53, 0x4f,0x7a,0x53,0x50,0x7a,0x34,0x30,0x4e,0x27,0x23,0x3c,0x25,0x21,0x3a,0x20,0x1c, 0x31,0x13,0x11,0x1e,0x5a,0x59,0x5c,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xab,0xab,0xab,0x22,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66,0xee,0xee,0xee, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x77,0x77,0x77,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0xdd,0xdd,0xdd,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x77,0x77,0x77,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x10,0x0c,0x0f,0x61,0x52,0x5e,0xea,0xe8,0xe9,0xbb,0xc0,0xce,0xb4, 0xbb,0xcb,0xb3,0xba,0xcc,0xac,0xb3,0xc8,0xa1,0xaa,0xc1,0x98,0xa1,0xba,0x90,0x99, 0xb4,0x90,0x99,0xb4,0x8b,0x95,0xb2,0x8e,0x99,0xb4,0x8e,0x99,0xb4,0x90,0x9a,0xb5, 0x89,0x93,0xad,0x7d,0x86,0xa0,0x77,0x83,0xa4,0x62,0x6d,0x90,0x69,0x74,0x98,0x6c, 0x79,0x9c,0x6d,0x79,0x9d,0x6c,0x77,0x9c,0x6e,0x7a,0x9d,0x6e,0x7a,0x9d,0x6f,0x7b, 0x9f,0x6f,0x7b,0x9f,0x72,0x7d,0xa0,0x6f,0x7c,0x9f,0x71,0x7c,0x9f,0x71,0x7c,0xa0, 0x71,0x7c,0xa0,0x71,0x7c,0xa0,0x6f,0x7b,0x9f,0x6d,0x79,0x9c,0x6e,0x7a,0x9d,0x6e, 0x7a,0x9d,0x6b,0x77,0x9b,0x69,0x74,0x99,0x65,0x72,0x98,0x65,0x72,0x98,0x64,0x6f, 0x95,0x43,0x4c,0x69,0x36,0x3d,0x58,0x33,0x3b,0x55,0x33,0x3b,0x54,0x3b,0x46,0x66, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x44,0x44,0x44,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0x99,0x99,0x99,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xdd,0xdd,0xdd,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xaa,0xaa,0xaa,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x32,0x32,0x32,0xe0,0xe0,0xe0,0xd8,0xd8,0xd8,0x07,0x07,0x07,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xbf,0xbf,0xbf, 0xff,0xff,0xff,0xff,0xff,0xff,0x08,0x08,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0xb1,0xb1,0xb1,0x7a,0x7a,0x7a,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x11,0x11, 0xdd,0xdd,0xdd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xcc,0xcc,0xcc,0x33, 0x33,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x05,0x07,0x29, 0x25,0x2a,0xad,0xac,0xad,0xac,0xab,0xac,0x48,0x47,0x47,0x0c,0x08,0x0a,0x15,0x0e, 0x10,0x4b,0x50,0x69,0x60,0x6c,0x93,0x52,0x50,0x7b,0x52,0x5d,0x88,0x56,0x63,0x8b, 0x56,0x63,0x8b,0x5a,0x65,0x8d,0x57,0x63,0x8c,0x81,0x8b,0xaa,0x92,0x98,0xaa,0x61, 0x62,0x67,0xa2,0xa2,0xa2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7b,0x7a, 0x7b,0x2a,0x20,0x2c,0x37,0x2d,0x3f,0x25,0x20,0x2e,0x6e,0x6e,0x71,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x9d,0x9d,0x9f,0x1b,0x19,0x26,0x31, 0x2d,0x45,0x45,0x41,0x62,0x50,0x4d,0x74,0x54,0x50,0x79,0x52,0x4f,0x7a,0x52,0x4f, 0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a, 0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x41,0x3e,0x62,0x2f, 0x2b,0x46,0x20,0x1e,0x30,0x2f,0x2f,0x36,0xee,0xee,0xee,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0x7e,0x7d,0x81,0x20,0x21,0x32,0x21,0x25,0x36,0x07,0x08,0x0b, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x11,0x11,0x11,0xbb,0xbb,0xbb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0x55,0x55,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xdd,0xdd,0xdd,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaa,0xaa,0xaa,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x15,0x11,0x14,0x6a,0x5c,0x67, 0xd7,0xd9,0xe1,0xa2,0xa9,0xbc,0xa4,0xab,0xc0,0xa4,0xac,0xc2,0x9a,0xa3,0xbb,0x93, 0x9c,0xb8,0x90,0x99,0xb4,0x92,0x9c,0xb7,0x8e,0x99,0xb4,0x90,0x99,0xb4,0x91,0x9b, 0xb5,0x92,0x9b,0xb7,0x8d,0x98,0xb2,0x83,0x8b,0xa5,0x86,0x8e,0xaa,0x69,0x76,0x98, 0x6b,0x76,0x9b,0x6d,0x79,0x9d,0x6e,0x7b,0x9d,0x6e,0x7a,0x9d,0x6f,0x7c,0x9f,0x6f, 0x7c,0x9f,0x73,0x7e,0xa1,0x71,0x7c,0xa0,0x6f,0x7c,0x9f,0x73,0x7e,0xa1,0x72,0x7d, 0xa0,0x6f,0x7b,0x9f,0x71,0x7c,0xa0,0x71,0x7c,0x9f,0x71,0x7c,0x9f,0x6d,0x7a,0x9d, 0x6d,0x7a,0x9d,0x6c,0x77,0x9b,0x6a,0x75,0x9a,0x69,0x74,0x99,0x66,0x73,0x98,0x64, 0x71,0x96,0x5d,0x69,0x8c,0x36,0x3f,0x58,0x34,0x3b,0x54,0x2f,0x37,0x52,0x32,0x3a, 0x59,0x2f,0x36,0x51,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x44,0x44,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0x99,0x99,0x99,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xdd,0xdd,0xdd,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x22,0x22,0x22,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x07,0x07,0x07,0xde,0xde,0xde,0xfd,0xfd,0xfd,0x16,0x16,0x16,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xec,0xec,0xec,0xff,0xff,0xff,0xb5,0xb5,0xb5,0x02,0x02,0x02,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xc4,0xc4,0x5e,0x5e,0x5e,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x99,0x99,0x99,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xcc,0xcc,0xcc, 0x11,0x11,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x2f,0x27,0x31,0x2f,0x25,0x2f,0x20,0x19,0x1e,0x16,0x0f,0x12,0x16, 0x0e,0x11,0x1a,0x11,0x14,0x46,0x49,0x60,0x5e,0x6b,0x92,0x52,0x4f,0x7a,0x52,0x5d, 0x86,0x54,0x60,0x8a,0x55,0x60,0x8a,0x56,0x62,0x8b,0x64,0x71,0x96,0xa2,0xaa,0xc1, 0xa3,0xa7,0xb5,0x6d,0x6d,0x6f,0x9c,0x9c,0x9d,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0x7c,0x7b,0x7c,0x17,0x12,0x19,0x25,0x21,0x28,0xad,0xac,0xad,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdd,0xdd,0xde,0x50,0x4f,0x54,0x27,0x24,0x35, 0x3c,0x37,0x54,0x4c,0x46,0x6a,0x53,0x4e,0x76,0x55,0x50,0x79,0x54,0x50,0x79,0x52, 0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f, 0x7b,0x52,0x4f,0x7b,0x52,0x4f,0x7b,0x52,0x4f,0x7b,0x52,0x4f,0x7b,0x52,0x50,0x7b, 0x51,0x4f,0x7b,0x42,0x40,0x63,0x20,0x20,0x30,0xbd,0xbd,0xbd,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0x8a,0x8a,0x8b,0x15,0x13,0x1d,0x2d,0x29,0x3d,0x37,0x37, 0x54,0x39,0x40,0x5d,0x1f,0x24,0x34,0x03,0x03,0x04,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x11,0x11,0xdd,0xdd,0xdd,0xff,0xff, 0xff,0xff,0xff,0xff,0xdd,0xdd,0xdd,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xdd,0xdd, 0xdd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x22,0x22,0x22, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x0c,0x09,0x0b,0x77,0x6b,0x74,0xcc,0xcf,0xdb,0x95,0x9b,0xb2,0x99,0xa2,0xba, 0x92,0x9b,0xb7,0x93,0x9c,0xb8,0x90,0x9a,0xb5,0x8c,0x96,0xb3,0x90,0x9a,0xb5,0x90, 0x99,0xb4,0x94,0x9d,0xb8,0x94,0x9d,0xb8,0x94,0x9d,0xb8,0x8e,0x98,0xb1,0x83,0x8c, 0xa5,0x80,0x8a,0xaa,0x6c,0x79,0x9c,0x6c,0x77,0x9c,0x6e,0x7a,0x9d,0x6e,0x7a,0x9d, 0x72,0x7d,0xa0,0x71,0x7c,0x9f,0x6f,0x7c,0x9f,0x72,0x7d,0xa0,0x72,0x7d,0xa0,0x72, 0x7d,0xa0,0x72,0x7d,0xa0,0x71,0x7c,0x9f,0x6e,0x7a,0x9d,0x71,0x7c,0x9f,0x6f,0x7b, 0x9f,0x6e,0x7a,0x9d,0x6c,0x77,0x9c,0x6b,0x76,0x9b,0x6b,0x76,0x9b,0x69,0x74,0x99, 0x69,0x74,0x99,0x65,0x72,0x98,0x4e,0x5a,0x79,0x34,0x3d,0x56,0x31,0x38,0x50,0x2f, 0x36,0x50,0x3c,0x46,0x6a,0x11,0x14,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x44,0x44, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x99,0x99,0x99,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xdd, 0xdd,0xdd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbb,0xbb,0xbb,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xd1,0xd1,0xd1,0xfc,0xfc,0xfc,0x6a,0x6a,0x6a, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x3a,0x3a,0x3a,0xfc,0xfc,0xfc,0xff,0xff,0xff,0x44,0x44,0x44,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc9,0xc9,0xc9, 0x30,0x30,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x22,0x22,0x22,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0x22,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0e,0x0b,0x0e,0x62,0x50,0x64,0x4a,0x3a,0x48, 0x38,0x2b,0x34,0x1c,0x13,0x16,0x1c,0x13,0x16,0x3e,0x3d,0x4f,0x5e,0x6b,0x92,0x55, 0x50,0x79,0x52,0x50,0x7b,0x52,0x5d,0x86,0x52,0x5c,0x86,0x56,0x62,0x8b,0x8c,0x96, 0xb3,0xa7,0xaf,0xc4,0xd0,0xd1,0xd3,0x31,0x37,0x46,0x9b,0x9a,0x9b,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0x79,0x78,0x79,0x48,0x48,0x49,0xee,0xee,0xee,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xad,0xac,0xad,0x26,0x24,0x2c,0x2f,0x2b, 0x3f,0x46,0x3f,0x60,0x52,0x4b,0x71,0x56,0x4f,0x78,0x55,0x50,0x79,0x55,0x50,0x79, 0x54,0x50,0x79,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52, 0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7b,0x52,0x50,0x7b,0x52,0x50,0x7b,0x52,0x52, 0x7c,0x52,0x52,0x7d,0x4d,0x4e,0x76,0x35,0x36,0x52,0x41,0x42,0x49,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xdd,0xdd,0xdd,0x13,0x14,0x15,0x09,0x0a,0x0f,0x11, 0x11,0x1a,0x18,0x15,0x1d,0x15,0x14,0x1e,0x15,0x16,0x20,0x13,0x16,0x1f,0x09,0x0a, 0x0e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44, 0x44,0x44,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x66,0x66,0x66,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0xdd,0xdd,0xdd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbb,0xbb, 0xbb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1d,0x17,0x1b,0x8e,0x82,0x8c,0xb1,0xb7, 0xc7,0x8a,0x93,0xac,0x8a,0x93,0xb0,0x8c,0x96,0xb3,0x8d,0x96,0xb3,0x90,0x99,0xb4, 0x8e,0x99,0xb4,0x8e,0x99,0xb4,0x91,0x9a,0xb5,0x94,0x9d,0xb8,0x95,0x9f,0xb9,0x93, 0x9c,0xb7,0x8d,0x96,0xaf,0x8d,0x96,0xb1,0x71,0x7c,0x9f,0x6d,0x79,0x9d,0x6e,0x7a, 0x9d,0x6f,0x7b,0x9f,0x6f,0x7b,0x9f,0x72,0x7d,0xa0,0x73,0x7e,0xa1,0x73,0x7e,0xa1, 0x73,0x7e,0xa1,0x6f,0x7b,0x9f,0x6f,0x7b,0x9f,0x72,0x7d,0xa0,0x6f,0x7b,0x9f,0x6e, 0x7a,0x9d,0x71,0x7c,0x9f,0x6d,0x7a,0x9d,0x6d,0x7a,0x9d,0x6c,0x77,0x9b,0x6a,0x75, 0x9a,0x66,0x73,0x98,0x65,0x71,0x96,0x63,0x6f,0x95,0x3d,0x45,0x60,0x31,0x39,0x53, 0x2d,0x36,0x4f,0x2d,0x37,0x50,0x3f,0x48,0x6b,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x44,0x44,0x44,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x99,0x99,0x99, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xdd,0xdd,0xdd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x77, 0x77,0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x83,0x83,0x83,0xf9,0xf9,0xf9,0xfd,0xfd, 0xfd,0x09,0x09,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x97,0x97,0x97,0xff,0xff,0xff,0xff,0xff,0xff,0x0e, 0x0e,0x0e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x44,0x44,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x77,0x77,0x77,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0x99,0x99,0x99,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x3a, 0x49,0x6a,0x56,0x6b,0x4c,0x3b,0x49,0x2d,0x21,0x28,0x1c,0x13,0x16,0x36,0x33,0x40, 0x62,0x6d,0x94,0x63,0x53,0x77,0x56,0x50,0x79,0x52,0x50,0x7b,0x52,0x56,0x81,0x71, 0x7c,0x9f,0x99,0xa1,0xba,0xd5,0xd8,0xe2,0xac,0xaf,0xba,0x1b,0x13,0x1d,0x9b,0x9a, 0x9b,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdd,0xdd,0xdd,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5e,0x5e,0x62,0x23,0x20,0x2f,0x39, 0x34,0x4d,0x4c,0x45,0x66,0x58,0x50,0x76,0x57,0x50,0x79,0x57,0x50,0x79,0x55,0x50, 0x79,0x55,0x50,0x79,0x54,0x50,0x79,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a, 0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7b,0x52,0x4f,0x7b,0x52,0x50,0x7b,0x52, 0x50,0x7b,0x52,0x52,0x7c,0x52,0x52,0x7d,0x48,0x49,0x6e,0x2a,0x2a,0x40,0x8d,0x8d, 0x8f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaa, 0xaa,0xaa,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0xdd,0xdd,0xdd,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0x7b,0x7c,0x7c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44, 0x35,0x41,0xa6,0x9c,0xa6,0x92,0x9a,0xaf,0x80,0x8a,0xa5,0x85,0x90,0xad,0x8b,0x95, 0xb2,0x8e,0x99,0xb4,0x8c,0x96,0xb3,0x91,0x9a,0xb5,0x92,0x9c,0xb7,0x95,0x9f,0xb9, 0x95,0x9f,0xb9,0x94,0x9d,0xb8,0x92,0x9b,0xb5,0x8b,0x94,0xac,0x82,0x8c,0xab,0x6f, 0x7b,0x9f,0x6e,0x7a,0x9d,0x6f,0x7c,0x9f,0x71,0x7c,0xa0,0x71,0x7c,0xa0,0x72,0x7d, 0xa0,0x72,0x7d,0xa0,0x73,0x7e,0xa1,0x72,0x7d,0xa0,0x71,0x7c,0xa0,0x6f,0x7b,0x9f, 0x6f,0x7b,0x9f,0x6e,0x7b,0x9d,0x6f,0x7b,0x9f,0x6e,0x7b,0x9d,0x6c,0x79,0x9c,0x69, 0x75,0x9a,0x67,0x73,0x99,0x65,0x72,0x98,0x64,0x71,0x96,0x5b,0x65,0x88,0x35,0x3d, 0x57,0x2e,0x36,0x50,0x2d,0x33,0x4d,0x33,0x3c,0x58,0x34,0x3e,0x5c,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x44,0x44,0x44,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0x99,0x99,0x99,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xdd,0xdd,0xdd,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0x66,0x66,0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe5,0xe5,0xe5,0xfc, 0xfc,0xfc,0xb2,0xb2,0xb2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xd6,0xd6,0xd6,0xff,0xff,0xff, 0xd9,0xd9,0xd9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x99,0x99,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0x66,0x66,0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x0b,0x09,0x0c,0x72,0x5d,0x74,0x5b,0x48,0x59,0x48,0x37,0x44,0x25,0x1a, 0x1f,0x2e,0x29,0x33,0x65,0x72,0x96,0x64,0x53,0x73,0x62,0x53,0x77,0x55,0x50,0x79, 0x56,0x62,0x8b,0x89,0x93,0xb0,0xaf,0xb5,0xca,0xeb,0xea,0xeb,0x44,0x46,0x5f,0x15, 0x10,0x1a,0x9b,0x9b,0x9b,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbb,0xbb,0xbb,0x29,0x28,0x2b,0x22,0x1f,0x2d, 0x43,0x3c,0x59,0x54,0x4c,0x70,0x59,0x51,0x77,0x5a,0x52,0x79,0x57,0x50,0x79,0x57, 0x50,0x79,0x55,0x50,0x79,0x55,0x50,0x79,0x54,0x50,0x79,0x53,0x4f,0x7a,0x52,0x4f, 0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7b, 0x52,0x50,0x7b,0x52,0x52,0x7c,0x52,0x52,0x7c,0x52,0x53,0x7d,0x45,0x46,0x69,0x23, 0x23,0x35,0xac,0xac,0xae,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xdd,0xdd,0xdd,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xdd,0xdd,0xdd,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0x7b,0x7c,0x7c,0x43,0x46,0x4d,0x0e,0x0f,0x11,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x0d,0x0a,0x0c,0x47,0x37,0x43,0xaa,0xa3,0xac,0x82,0x8b,0xa2,0x84, 0x8d,0xab,0x8a,0x94,0xb1,0x8b,0x95,0xb2,0x8e,0x98,0xb3,0x92,0x9b,0xb7,0x90,0x99, 0xb4,0x95,0x9f,0xb9,0x94,0x9d,0xb8,0x96,0xa0,0xb9,0x96,0xa0,0xb9,0x91,0x9a,0xb2, 0x94,0x9c,0xb4,0x72,0x7d,0xa0,0x6f,0x7b,0x9f,0x6e,0x7a,0x9d,0x6f,0x7c,0x9f,0x72, 0x7d,0xa0,0x71,0x7c,0x9f,0x72,0x7e,0xa1,0x72,0x7d,0xa0,0x73,0x7e,0xa1,0x74,0x80, 0xa2,0x72,0x7d,0xa1,0x6e,0x7a,0x9d,0x6f,0x7b,0x9f,0x6c,0x77,0x9c,0x6d,0x7a,0x9d, 0x6b,0x76,0x9b,0x6a,0x75,0x9a,0x69,0x74,0x9a,0x65,0x72,0x98,0x65,0x71,0x96,0x48, 0x53,0x72,0x33,0x3b,0x55,0x2f,0x35,0x4e,0x2c,0x33,0x4b,0x3f,0x4a,0x6b,0x15,0x19, 0x26,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x44,0x44,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0x99,0x99,0x99,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xdd,0xdd,0xdd,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x44,0x44,0x44,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x56,0x56,0x56, 0xf8,0xf8,0xf8,0xfc,0xfc,0xfc,0x58,0x58,0x58,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf3,0xf3, 0xf3,0xff,0xff,0xff,0x6d,0x6d,0x6d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xbb,0xbb, 0xbb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x66,0x66,0x66,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x35,0x42,0x6a,0x55,0x6a,0x55, 0x42,0x52,0x3c,0x2d,0x37,0x2b,0x23,0x2b,0x6c,0x77,0x9b,0x64,0x53,0x74,0x5e,0x53, 0x79,0x52,0x4f,0x7a,0x71,0x7c,0x9f,0x8d,0x98,0xb3,0xdb,0xdf,0xe7,0x85,0x83,0x92, 0x18,0x14,0x18,0x19,0x18,0x1f,0x9b,0x9b,0x9b,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbb,0xbb,0xbb,0x18,0x18, 0x1a,0x23,0x20,0x2f,0x45,0x3e,0x5b,0x56,0x4e,0x73,0x59,0x51,0x78,0x5a,0x52,0x79, 0x57,0x50,0x79,0x57,0x50,0x79,0x56,0x50,0x79,0x55,0x50,0x79,0x54,0x50,0x79,0x54, 0x50,0x79,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f, 0x7b,0x52,0x4f,0x7b,0x52,0x50,0x7b,0x52,0x50,0x7b,0x52,0x52,0x7c,0x52,0x52,0x7c, 0x44,0x44,0x67,0x21,0x21,0x32,0xbd,0xbd,0xbe,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x0f,0x11,0x18,0xdd,0xdd, 0xde,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x64,0x64,0x64,0x74,0x77,0x80, 0xa0,0xa6,0xb5,0x40,0x42,0x49,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x27,0x2f,0x39,0x2c,0x34, 0x9f,0x9d,0xab,0x76,0x80,0x9a,0x83,0x8d,0xab,0x8a,0x94,0xb1,0x8c,0x96,0xb3,0x92, 0x9b,0xb5,0x92,0x9b,0xb7,0x91,0x9a,0xb5,0x95,0x9f,0xb9,0x96,0xa0,0xba,0x98,0xa1, 0xba,0x96,0xa0,0xb9,0x8b,0x93,0xab,0x85,0x90,0xad,0x6f,0x7b,0x9f,0x6f,0x7b,0x9f, 0x72,0x7d,0xa0,0x72,0x7d,0xa0,0x71,0x7c,0x9f,0x72,0x7d,0xa0,0x72,0x7d,0xa0,0x71, 0x7c,0x9f,0x6e,0x7a,0x9d,0x71,0x7c,0x9f,0x6d,0x7a,0x9d,0x6e,0x7a,0x9d,0x6c,0x77, 0x9c,0x6b,0x76,0x9b,0x6b,0x76,0x9b,0x67,0x73,0x99,0x67,0x73,0x98,0x64,0x71,0x96, 0x60,0x6d,0x93,0x3b,0x41,0x5d,0x31,0x3b,0x53,0x2c,0x34,0x4d,0x30,0x37,0x52,0x44, 0x4f,0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x44,0x44, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x99,0x99,0x99,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xdd, 0xdd,0xdd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x44,0x44,0x44,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xa8,0xa8,0xa8,0xfc,0xfc,0xfc,0xf9,0xf9,0xf9,0x1d,0x1d,0x1d,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x43, 0x43,0x43,0xfd,0xfd,0xfd,0xff,0xff,0xff,0x24,0x24,0x24,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0xaa,0xaa,0xaa,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x77,0x77, 0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0a,0x08,0x0a, 0x72,0x5d,0x74,0x64,0x50,0x63,0x4c,0x3b,0x49,0x38,0x2b,0x34,0x75,0x81,0xa2,0x64, 0x53,0x75,0x56,0x50,0x79,0x58,0x64,0x8d,0x76,0x82,0xa3,0xa9,0xb1,0xc7,0xe6,0xe4, 0xe6,0x0e,0x0d,0x0f,0x00,0x00,0x00,0x07,0x05,0x07,0x9b,0x9b,0x9c,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xdd,0xdd,0xdd,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xee,0xee,0xee,0x50,0x4e,0x53,0x29,0x24,0x36,0x40,0x3a,0x56,0x50,0x49, 0x6b,0x58,0x50,0x76,0x58,0x50,0x79,0x57,0x50,0x79,0x56,0x50,0x79,0x55,0x50,0x79, 0x54,0x50,0x79,0x54,0x50,0x79,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52, 0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7b,0x52,0x50,0x7b,0x52,0x50,0x7b,0x52,0x52, 0x7c,0x52,0x52,0x7c,0x45,0x46,0x69,0x23,0x23,0x35,0xac,0xac,0xae,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0x67,0x67,0x68,0x0a,0x0b,0x10,0x12,0x14,0x1d,0x15, 0x17,0x21,0x15,0x17,0x22,0x15,0x17,0x22,0x15,0x17,0x22,0x15,0x18,0x22,0x15,0x17, 0x22,0x15,0x17,0x21,0x15,0x14,0x1f,0x18,0x15,0x1e,0x17,0x15,0x1e,0x15,0x15,0x20, 0x15,0x17,0x22,0x0d,0x0f,0x15,0x03,0x03,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0x11,0x19,0x38,0x40,0x59,0x1e, 0x22,0x2e,0xdd,0xdd,0xde,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x64,0x64, 0x65,0x7f,0x82,0x89,0xbe,0xc3,0xcf,0xc6,0xca,0xd9,0x87,0x8c,0x97,0x13,0x14,0x16, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0a,0x08, 0x09,0x31,0x24,0x2b,0x41,0x34,0x3b,0x99,0x9d,0xaf,0x73,0x7c,0x98,0x82,0x8b,0xa9, 0x8a,0x94,0xb1,0x92,0x9b,0xb7,0x90,0x9a,0xb5,0x94,0x9d,0xb8,0x93,0x9c,0xb8,0x99, 0xa2,0xbb,0x9a,0xa3,0xbb,0x99,0xa2,0xbb,0x94,0x9c,0xb3,0x96,0x9f,0xb7,0x72,0x7d, 0xa0,0x6f,0x7b,0x9f,0x72,0x7d,0xa0,0x6f,0x7b,0x9f,0x71,0x7c,0x9f,0x6f,0x7b,0x9f, 0x6f,0x7b,0x9f,0x71,0x7c,0x9f,0x71,0x7c,0xa0,0x6e,0x7a,0x9d,0x6d,0x79,0x9c,0x6d, 0x7a,0x9d,0x6d,0x79,0x9c,0x6a,0x76,0x9a,0x6a,0x75,0x9a,0x67,0x73,0x99,0x65,0x72, 0x98,0x65,0x72,0x98,0x54,0x5d,0x80,0x35,0x3d,0x58,0x2f,0x38,0x52,0x2f,0x35,0x4e, 0x38,0x3f,0x5f,0x34,0x3d,0x5c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x44,0x44,0x44,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x99,0x99,0x99, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xdd,0xdd,0xdd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x44, 0x44,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0xcc,0xcc,0xcc,0xfd,0xfd,0xfd,0xf6,0xf6,0xf6,0x04,0x04, 0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xa0,0xa0,0xa0,0xff,0xff,0xff,0xfd,0xfd,0xfd,0x06,0x06,0x06,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x46,0x39,0x47,0x6d,0x58,0x6e,0x56,0x44,0x54,0x4a,0x3a,0x47, 0x83,0x8e,0xac,0x63,0x53,0x77,0x52,0x5c,0x85,0x6b,0x76,0x9b,0x72,0x7d,0xa1,0xe3, 0xe6,0xed,0x55,0x51,0x56,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x99, 0x99,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x79,0x79,0x79,0x59,0x58,0x59, 0xee,0xee,0xee,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x8e,0x8d,0x8f,0x1e, 0x1b,0x27,0x34,0x2f,0x45,0x49,0x43,0x63,0x55,0x4d,0x75,0x57,0x50,0x79,0x56,0x50, 0x79,0x56,0x50,0x79,0x55,0x50,0x79,0x54,0x50,0x79,0x52,0x4f,0x7a,0x52,0x4f,0x7a, 0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7b,0x52,0x50,0x7b,0x52, 0x50,0x7b,0x52,0x50,0x7b,0x52,0x52,0x7c,0x48,0x48,0x6d,0x29,0x29,0x3f,0x8d,0x8d, 0x8f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x8a,0x8a,0x8c,0x18,0x1b,0x27, 0x32,0x37,0x50,0x3d,0x43,0x63,0x3d,0x45,0x64,0x3d,0x46,0x64,0x3d,0x46,0x66,0x3d, 0x46,0x66,0x3d,0x46,0x66,0x3d,0x46,0x66,0x3d,0x46,0x66,0x3d,0x43,0x63,0x42,0x3c, 0x5b,0x49,0x3e,0x59,0x3e,0x3b,0x5b,0x3d,0x40,0x61,0x3d,0x46,0x64,0x25,0x2a,0x3d, 0x06,0x07,0x0b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x28,0x26,0x3b,0x51,0x5c,0x85, 0x45,0x4e,0x6f,0x1f,0x23,0x31,0xdd,0xde,0xde,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0x64,0x64,0x65,0x80,0x83,0x8a,0xc2,0xc5,0xd1,0xd6,0xd9,0xe3,0xce,0xd2, 0xde,0xbb,0xc0,0xce,0x5c,0x5f,0x67,0x06,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x0f,0x0b,0x0d,0x28,0x1e,0x23,0x2c,0x1f,0x26,0x51,0x45,0x4c,0xa4,0xa9, 0xba,0x6e,0x77,0x92,0x7c,0x86,0xa2,0x8a,0x94,0xb1,0x8e,0x99,0xb4,0x95,0x9f,0xb9, 0x93,0x9d,0xb8,0x96,0xa0,0xba,0x9a,0xa3,0xbc,0x9c,0xa4,0xbe,0x99,0xa2,0xba,0x96, 0x9f,0xb8,0x8a,0x93,0xb1,0x6e,0x7a,0x9d,0x6f,0x7c,0x9f,0x72,0x7e,0xa1,0x72,0x7d, 0xa0,0x72,0x7d,0xa0,0x6f,0x7c,0x9f,0x6f,0x7b,0x9f,0x6d,0x7a,0x9d,0x6e,0x7a,0x9d, 0x6c,0x77,0x9c,0x6d,0x79,0x9c,0x6a,0x76,0x9a,0x69,0x75,0x9a,0x67,0x73,0x99,0x69, 0x74,0x99,0x65,0x71,0x96,0x64,0x6f,0x95,0x43,0x4c,0x67,0x33,0x3d,0x55,0x31,0x36, 0x52,0x2f,0x36,0x50,0x49,0x55,0x7c,0x0f,0x11,0x18,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x44,0x44,0x44,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0x99,0x99,0x99,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xdd,0xdd,0xdd,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0x44,0x44,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xd4,0xd4,0xd4,0xff,0xff,0xff,0xf8, 0xf8,0xf8,0x09,0x09,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xd5,0xd5,0xd5,0xff,0xff,0xff,0xa6,0xa6,0xa6, 0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x44,0x44,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x44,0x44,0x44,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0x0c,0x0f,0x6b,0x57,0x6c,0x60,0x4c, 0x5f,0x53,0x42,0x51,0xb7,0xbe,0xcf,0x52,0x4f,0x7b,0x66,0x73,0x98,0x72,0x7d,0xa0, 0x89,0x93,0xb1,0xaf,0xac,0xb2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x99,0x99,0x99,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7b,0x7c, 0x7e,0x16,0x13,0x1b,0x32,0x2f,0x33,0xbd,0xbd,0xbd,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xcd,0xcd,0xce,0x32,0x31,0x38,0x2b,0x27,0x39,0x43,0x3d,0x5d,0x51, 0x4a,0x70,0x56,0x4f,0x77,0x55,0x50,0x79,0x54,0x50,0x79,0x54,0x50,0x79,0x52,0x4f, 0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7b, 0x52,0x4f,0x7b,0x52,0x50,0x7b,0x52,0x50,0x7b,0x52,0x52,0x7c,0x4d,0x4d,0x75,0x33, 0x34,0x4e,0x50,0x50,0x56,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xee,0xee, 0xee,0x25,0x26,0x31,0x37,0x3d,0x59,0x4d,0x55,0x7c,0x51,0x5c,0x85,0x52,0x5c,0x86, 0x52,0x5d,0x86,0x52,0x5d,0x88,0x52,0x5d,0x88,0x52,0x5d,0x88,0x52,0x5d,0x88,0x52, 0x5d,0x88,0x53,0x5e,0x88,0x52,0x5c,0x86,0x53,0x50,0x7a,0x64,0x53,0x74,0x5e,0x53, 0x79,0x4e,0x54,0x7e,0x42,0x4c,0x6b,0x1a,0x1e,0x2a,0x03,0x03,0x04,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x0a,0x3d,0x3a,0x59,0x53,0x51, 0x7e,0x58,0x63,0x91,0x55,0x61,0x8a,0x2a,0x2f,0x40,0xde,0xde,0xde,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0x66,0x66,0x66,0x85,0x87,0x8d,0xc1,0xc4,0xd0,0xd5, 0xd8,0xe2,0xd3,0xd8,0xe2,0xd5,0xd8,0xe2,0xcb,0xd0,0xdd,0xb1,0xb6,0xc1,0x42,0x45, 0x4a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x0b,0x08,0x0a,0x18,0x11,0x16,0x15,0x0f,0x13,0x2a,0x1f,0x26,0x2b, 0x1f,0x26,0x74,0x6a,0x71,0xab,0xb2,0xc3,0x79,0x83,0x9d,0x82,0x8b,0xa7,0x90,0x9a, 0xb5,0x92,0x9c,0xb7,0x93,0x9c,0xb7,0x99,0xa2,0xbb,0x9a,0xa3,0xbc,0x9d,0xa5,0xbe, 0x9b,0xa3,0xbc,0x96,0xa0,0xb7,0x98,0xa1,0xb8,0x74,0x80,0xa2,0x6e,0x7a,0x9d,0x6e, 0x7a,0x9d,0x6f,0x7c,0x9f,0x6f,0x7b,0x9f,0x6f,0x7b,0x9f,0x6f,0x7b,0x9f,0x6e,0x7a, 0x9d,0x6d,0x79,0x9c,0x6d,0x7a,0x9d,0x6b,0x77,0x9b,0x6a,0x75,0x9a,0x6a,0x75,0x9a, 0x66,0x72,0x98,0x67,0x73,0x99,0x62,0x6e,0x94,0x5a,0x65,0x88,0x39,0x41,0x5d,0x33, 0x3c,0x56,0x30,0x37,0x53,0x35,0x3e,0x5b,0x52,0x59,0x87,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x44,0x44,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0x99,0x99,0x99,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xdd,0xdd,0xdd,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x44,0x44,0x44,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc1,0xc1,0xc1, 0xfd,0xfd,0xfd,0xfc,0xfc,0xfc,0x65,0x65,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf1,0xf1,0xf1,0xff,0xff, 0xff,0x56,0x56,0x56,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xbb,0xbb,0xbb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdd,0xdd,0xdd, 0x22,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3a, 0x2f,0x3a,0x5c,0x49,0x5b,0x57,0x44,0x55,0xc0,0xc3,0xd0,0x6e,0x7a,0x9d,0x74,0x80, 0xa2,0x77,0x83,0xa4,0xcc,0xd0,0xda,0x1f,0x1e,0x21,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x99,0x99,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0x7c,0x7c,0x7d,0x22,0x27,0x38,0x2a,0x29,0x40,0x24,0x1b,0x26,0x7f,0x7d, 0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5e,0x5e,0x62, 0x24,0x20,0x30,0x39,0x34,0x4f,0x4b,0x45,0x68,0x54,0x4e,0x76,0x54,0x50,0x79,0x54, 0x50,0x79,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f, 0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7b,0x52,0x4f,0x7b,0x52,0x50,0x7b,0x52,0x52,0x7c, 0x51,0x51,0x7a,0x3f,0x40,0x60,0x1b,0x1c,0x2a,0xde,0xde,0xde,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0x8c,0x8c,0x8f,0x21,0x24,0x35,0x3b,0x41,0x5f,0x4a,0x53, 0x78,0x50,0x5b,0x85,0x52,0x5d,0x86,0x52,0x5d,0x88,0x52,0x5d,0x88,0x52,0x5d,0x88, 0x52,0x5d,0x88,0x52,0x5d,0x88,0x53,0x5e,0x88,0x54,0x5f,0x89,0x54,0x5f,0x89,0x50, 0x5b,0x85,0x4a,0x48,0x6f,0x4a,0x3d,0x56,0x27,0x24,0x37,0x5f,0x60,0x65,0xee,0xee, 0xef,0x7a,0x7b,0x7c,0x13,0x13,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x15,0x1e,0x51,0x49,0x6c,0x52, 0x4f,0x7a,0x61,0x61,0x94,0x7a,0x8a,0xc9,0x75,0x85,0xb7,0x41,0x46,0x51,0xdd,0xdd, 0xdd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x65,0x65,0x65,0x9b,0x9b,0x9c, 0xca,0xcc,0xd6,0xe5,0xe7,0xed,0xd7,0xda,0xe5,0xd2,0xd7,0xe1,0xd5,0xd8,0xe2,0xd3, 0xd7,0xe2,0xcf,0xd2,0xdf,0x9a,0x9e,0xaa,0x27,0x29,0x2c,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x06,0x05,0x06,0x1a,0x13,0x19,0x18,0x10,0x16,0x17,0x0f,0x16, 0x22,0x19,0x1f,0x2d,0x21,0x28,0x2d,0x20,0x27,0xa6,0x9f,0xa3,0xa1,0xa8,0xbf,0x7b, 0x84,0xa0,0x89,0x92,0xac,0x8e,0x99,0xb4,0x93,0x9c,0xb7,0x94,0x9f,0xb8,0x96,0xa0, 0xba,0x9a,0xa3,0xbc,0x9c,0xa5,0xbe,0x98,0xa1,0xba,0x96,0x9f,0xb7,0x89,0x93,0xb0, 0x6e,0x7b,0x9d,0x6e,0x7a,0x9d,0x6f,0x7b,0x9f,0x6f,0x7b,0x9f,0x6e,0x7a,0x9d,0x6f, 0x7c,0x9f,0x6c,0x77,0x9c,0x6c,0x79,0x9c,0x6b,0x76,0x9b,0x69,0x75,0x9a,0x69,0x75, 0x9a,0x66,0x72,0x98,0x65,0x72,0x96,0x63,0x6e,0x95,0x62,0x6e,0x94,0x4a,0x54,0x73, 0x36,0x3f,0x5b,0x33,0x3c,0x54,0x2f,0x38,0x52,0x41,0x4b,0x72,0x30,0x3b,0x56,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x44,0x44, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x99,0x99,0x99,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xdd, 0xdd,0xdd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x44,0x44,0x44,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x7c,0x7c,0x7c,0xfc,0xfc,0xfc,0xff,0xff,0xff,0xc7,0xc7,0xc7,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3c,0x3c,0x3c,0xfc, 0xfc,0xfc,0xff,0xff,0xff,0x22,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x33,0x33,0x33,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xdd,0xdd,0xdd,0x33,0x33,0x33,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x11,0x11,0xbb,0xbb,0xbb,0xaa,0xaa,0xaa, 0x33,0x33,0x33,0x07,0x06,0x07,0x4d,0x3e,0x4d,0x58,0x46,0x56,0xb1,0xb1,0xbe,0x93, 0x9c,0xb7,0x6f,0x7b,0x9f,0xac,0xb4,0xc8,0x7f,0x7c,0x84,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x99,0x99,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0x79,0x79,0x79,0x26,0x1f,0x29,0x43,0x49,0x69,0x3d, 0x45,0x64,0x2e,0x26,0x35,0x51,0x4e,0x52,0xdd,0xdd,0xde,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xad,0xad,0xae,0x18,0x16,0x22,0x2f,0x2b,0x41,0x46,0x40,0x61, 0x51,0x4d,0x74,0x55,0x50,0x79,0x54,0x50,0x79,0x53,0x4f,0x7a,0x52,0x4f,0x7a,0x52, 0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7b,0x52,0x50,0x7b,0x52,0x50, 0x7b,0x52,0x50,0x7b,0x52,0x52,0x7c,0x49,0x4a,0x6f,0x2d,0x2e,0x46,0x50,0x50,0x56, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x8e,0x8e,0x91,0x1d, 0x20,0x2e,0x30,0x36,0x4e,0x40,0x47,0x68,0x48,0x52,0x78,0x4d,0x58,0x81,0x51,0x5c, 0x86,0x52,0x5d,0x88,0x53,0x5e,0x88,0x53,0x5e,0x88,0x50,0x5b,0x85,0x4d,0x58,0x7e, 0x48,0x52,0x76,0x40,0x48,0x68,0x32,0x38,0x51,0x1e,0x22,0x31,0x7d,0x7d,0x81,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xce,0xce,0xcf,0x15,0x18,0x22,0x05,0x06, 0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x31,0x29,0x3b,0x5f,0x52,0x76, 0x5c,0x53,0x7b,0x57,0x54,0x82,0x71,0x7a,0xb6,0xb7,0xca,0xfe,0x60,0x61,0x73,0x11, 0x0d,0x10,0xdd,0xdd,0xdd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x4e,0x4c, 0x4e,0x36,0x2e,0x34,0xd8,0xd8,0xd9,0xf5,0xf6,0xf8,0xf8,0xf8,0xfa,0xe5,0xe7,0xee, 0xd2,0xd7,0xe1,0xd7,0xda,0xe5,0xd6,0xd9,0xe3,0xd2,0xd7,0xe1,0xcb,0xd0,0xdd,0x7d, 0x81,0x8a,0x16,0x16,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x05,0x04,0x05,0x1a,0x13,0x18,0x19,0x12,0x17,0x19,0x12, 0x17,0x18,0x10,0x16,0x18,0x12,0x18,0x31,0x24,0x2c,0x31,0x24,0x2c,0x38,0x2c,0x33, 0xcb,0xc8,0xcb,0x96,0x9f,0xb7,0x7e,0x88,0xa2,0x8d,0x96,0xb1,0x93,0x9c,0xb7,0x95, 0x9f,0xb9,0x94,0x9f,0xb8,0x9b,0xa3,0xbc,0x9c,0xa5,0xbe,0x9c,0xa5,0xbe,0x99,0xa2, 0xba,0x9d,0xa5,0xbe,0x73,0x7e,0xa1,0x6e,0x7a,0x9d,0x6f,0x7c,0x9f,0x6e,0x7a,0x9d, 0x6e,0x7a,0x9d,0x6e,0x7a,0x9d,0x6c,0x79,0x9c,0x6b,0x76,0x9b,0x6a,0x75,0x9a,0x6a, 0x75,0x9a,0x6a,0x75,0x9a,0x66,0x72,0x98,0x66,0x72,0x98,0x62,0x6e,0x94,0x5c,0x69, 0x8d,0x3f,0x47,0x65,0x35,0x3e,0x58,0x30,0x39,0x54,0x33,0x3d,0x59,0x48,0x56,0x81, 0x05,0x06,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x44,0x44,0x44,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x99,0x99,0x99, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xdd,0xdd,0xdd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x44, 0x44,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x1a,0x1a,0x1a,0xf2,0xf2,0xf2,0xff,0xff,0xff,0xf9,0xf9, 0xf9,0x63,0x63,0x63,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x98,0x98,0x98,0xfd,0xfd,0xfd,0xff,0xff,0xff,0x08,0x08,0x08,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x88,0x88, 0x88,0x11,0x11,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x77,0x77,0x77,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x55,0x55,0x55,0x2f,0x25,0x2f,0x58,0x46,0x56, 0x95,0x8f,0x9e,0xad,0xb4,0xc9,0x6f,0x7b,0x9f,0xb8,0xba,0xc8,0x07,0x07,0x07,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x99, 0x99,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x77,0x77,0x77,0x07,0x06,0x07, 0x3f,0x32,0x40,0x4d,0x51,0x74,0x45,0x4f,0x70,0x32,0x2b,0x3f,0x27,0x22,0x28,0xad, 0xac,0xad,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xde,0xde,0xde,0x41,0x3f, 0x45,0x28,0x25,0x38,0x3f,0x3b,0x59,0x4d,0x48,0x6e,0x52,0x4e,0x77,0x53,0x4f,0x7a, 0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52, 0x4f,0x7b,0x52,0x50,0x7b,0x52,0x50,0x7b,0x52,0x52,0x7c,0x50,0x50,0x79,0x42,0x43, 0x64,0x26,0x27,0x3b,0x7e,0x7e,0x82,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xbd,0xbd,0xbe,0x40,0x41,0x48,0x1e,0x22,0x31,0x2a,0x30,0x46,0x35, 0x3c,0x57,0x3b,0x43,0x63,0x3d,0x46,0x66,0x3d,0x46,0x66,0x3e,0x46,0x66,0x3a,0x42, 0x5f,0x31,0x38,0x51,0x28,0x2e,0x41,0x1c,0x1f,0x2d,0x3f,0x41,0x47,0xbd,0xbd,0xbe, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdd,0xdd,0xde,0x32,0x33,0x3b,0x34, 0x3b,0x53,0x4e,0x57,0x79,0x2a,0x30,0x45,0x0d,0x0c,0x13,0x47,0x3d,0x57,0x64,0x53, 0x76,0x63,0x56,0x7b,0x60,0x58,0x85,0x6a,0x78,0xa4,0xd2,0xda,0xed,0x32,0x25,0x2d, 0x28,0x1d,0x23,0x13,0x0e,0x11,0xdd,0xdd,0xdd,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0x50,0x4e,0x50,0x31,0x26,0x2f,0x41,0x32,0x3e,0x58,0x4c,0x55,0xee,0xef, 0xf4,0xfa,0xfa,0xfd,0xfa,0xfa,0xfc,0xdd,0xdf,0xe8,0xda,0xde,0xe7,0xd5,0xd8,0xe3, 0xd8,0xdb,0xe5,0xcf,0xd3,0xdf,0xbf,0xc4,0xd1,0x62,0x65,0x6d,0x0a,0x0b,0x0c,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x17,0x11,0x15,0x18,0x10,0x16,0x18, 0x11,0x17,0x19,0x12,0x18,0x19,0x12,0x18,0x29,0x28,0x3a,0x25,0x21,0x2f,0x34,0x26, 0x2e,0x33,0x26,0x2e,0x49,0x3c,0x43,0xda,0xdb,0xe0,0x8c,0x95,0xaf,0x80,0x88,0xa2, 0x8b,0x94,0xb1,0x92,0x9b,0xb7,0x96,0xa0,0xba,0x9a,0xa2,0xbb,0x9a,0xa3,0xbc,0x9f, 0xa7,0xbf,0xa0,0xa8,0xc0,0x9a,0xa3,0xbc,0x8a,0x93,0xb1,0x72,0x7d,0xa0,0x6f,0x7b, 0x9f,0x6e,0x7a,0x9d,0x6d,0x79,0x9c,0x6b,0x77,0x9b,0x6b,0x77,0x9b,0x6b,0x76,0x9b, 0x6b,0x76,0x9b,0x69,0x75,0x9a,0x67,0x73,0x99,0x64,0x71,0x96,0x66,0x72,0x98,0x62, 0x6d,0x94,0x4f,0x58,0x7c,0x3b,0x43,0x5e,0x34,0x3d,0x58,0x30,0x38,0x53,0x37,0x40, 0x61,0x37,0x40,0x5e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x44,0x44,0x44,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0x99,0x99,0x99,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xdd,0xdd,0xdd,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0x44,0x44,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xac,0xac,0xac,0xff, 0xff,0xff,0xff,0xff,0xff,0xee,0xee,0xee,0x52,0x52,0x52,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xd0,0xd0,0xd0,0xff,0xff,0xff,0xc7,0xc7,0xc7,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x44,0x44,0x44,0xee,0xee,0xee,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaa,0xaa,0xaa,0x77,0x77,0x77,0x33,0x33, 0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x33,0x33,0x33,0x77,0x77,0x77,0xaa,0xaa,0xaa,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x77,0x77,0x77,0x00,0x00,0x00,0x0c,0x0a, 0x0c,0x61,0x4d,0x61,0x84,0x78,0x89,0xc0,0xc6,0xd5,0xad,0xb4,0xc9,0x56,0x54,0x5c, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x99,0x99,0x99,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x77,0x77, 0x77,0x00,0x00,0x00,0x04,0x04,0x04,0x3a,0x2d,0x39,0x4d,0x49,0x65,0x4c,0x56,0x77, 0x35,0x33,0x4d,0x26,0x1d,0x28,0x70,0x6d,0x70,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0x7e,0x7d,0x81,0x1f,0x1d,0x2b,0x33,0x30,0x49,0x46,0x43, 0x65,0x50,0x4d,0x76,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a, 0x52,0x4f,0x7a,0x52,0x4f,0x7b,0x52,0x4f,0x7b,0x52,0x50,0x7b,0x52,0x50,0x7b,0x52, 0x52,0x7c,0x4e,0x4f,0x78,0x3f,0x40,0x61,0x25,0x26,0x39,0x7e,0x7e,0x82,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbc,0xbd,0xbd, 0x7d,0x7d,0x81,0x40,0x41,0x49,0x14,0x16,0x21,0x15,0x17,0x22,0x15,0x18,0x22,0x15, 0x18,0x22,0x13,0x15,0x1f,0x6e,0x70,0x74,0x7c,0x7d,0x80,0xde,0xde,0xde,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xcd,0xcd,0xce,0x32,0x33,0x3b, 0x2e,0x2a,0x40,0x44,0x42,0x65,0x51,0x5c,0x85,0x5a,0x65,0x8e,0x5a,0x65,0x8d,0x52, 0x4f,0x7b,0x62,0x53,0x77,0x61,0x56,0x7d,0x74,0x81,0xa6,0x3c,0x2f,0x39,0x38,0x29, 0x32,0x41,0x32,0x3d,0x39,0x2c,0x37,0x18,0x12,0x17,0xdd,0xdd,0xdd,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0x51,0x4e,0x51,0x3b,0x2f,0x3a,0x56,0x44,0x54,0x54, 0x42,0x51,0x49,0x38,0x46,0x47,0x38,0x43,0x8d,0x85,0x8d,0xf5,0xf4,0xf7,0xf7,0xf8, 0xfa,0xe0,0xe2,0xea,0xd2,0xd7,0xe1,0xd0,0xd5,0xe0,0xcf,0xd3,0xdf,0xca,0xcf,0xdd, 0xb2,0xb8,0xc6,0x50,0x53,0x5b,0x06,0x06,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x11,0x17,0x17,0x0f,0x15, 0x18,0x11,0x17,0x19,0x12,0x17,0x1a,0x12,0x19,0x3e,0x3a,0x47,0x28,0x2a,0x43,0x26, 0x1f,0x31,0x3b,0x2c,0x36,0x34,0x27,0x2f,0x31,0x24,0x2c,0x67,0x5e,0x63,0xcc,0xd0, 0xdc,0x80,0x8a,0xa3,0x80,0x88,0xa1,0x94,0x9d,0xb8,0x98,0xa1,0xba,0x9a,0xa3,0xbb, 0x9f,0xa7,0xbf,0xa1,0xaa,0xc1,0xa1,0xaa,0xc1,0xa0,0xa9,0xc0,0x9c,0xa5,0xbe,0x75, 0x81,0xa2,0x71,0x7c,0xa0,0x6f,0x7b,0x9f,0x6e,0x7a,0x9d,0x6d,0x7a,0x9d,0x6c,0x77, 0x9b,0x69,0x75,0x9a,0x67,0x74,0x99,0x69,0x74,0x99,0x67,0x74,0x99,0x64,0x71,0x96, 0x62,0x6e,0x94,0x5f,0x6c,0x92,0x43,0x4c,0x6a,0x39,0x41,0x5e,0x35,0x3e,0x5a,0x32, 0x3d,0x58,0x42,0x52,0x75,0x17,0x1c,0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x44,0x44,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0x99,0x99,0x99,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xdd,0xdd,0xdd,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x44,0x44,0x44,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x02,0x02,0x02,0xe4,0xe4,0xe4,0xff,0xff,0xff,0xff,0xff,0xff,0xf2,0xf2,0xf2,0x86, 0x86,0x86,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf1,0xf1,0xf1,0xff,0xff,0xff,0x7c,0x7c, 0x7c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x22,0xaa,0xaa,0xaa, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xdd,0xdd,0xdd,0x44,0x44,0x44,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x46,0x39,0x47,0x78,0x68,0x7b,0xc9,0xce,0xdb,0xaf,0xb0, 0xbe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x99,0x99,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0x77,0x77,0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x26,0x1d, 0x24,0x4c,0x41,0x57,0x4b,0x53,0x78,0x3f,0x3f,0x60,0x2f,0x24,0x32,0x42,0x3e,0x43, 0xcd,0xcd,0xcd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbd,0xbd,0xbd,0x32, 0x32,0x39,0x2a,0x28,0x3c,0x42,0x3f,0x5f,0x4e,0x4a,0x72,0x51,0x4e,0x79,0x52,0x4f, 0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7b,0x52,0x4f,0x7b, 0x52,0x50,0x7b,0x52,0x52,0x7c,0x52,0x52,0x7c,0x4e,0x4f,0x77,0x3f,0x41,0x61,0x26, 0x27,0x3b,0x50,0x50,0x56,0xde,0xde,0xde,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x9d,0x9e,0xa0,0x1b,0x1f, 0x2c,0x32,0x3a,0x51,0x47,0x52,0x74,0x50,0x52,0x7c,0x5d,0x52,0x79,0x52,0x52,0x7d, 0x5a,0x65,0x8d,0x5c,0x69,0x90,0x56,0x63,0x8b,0x52,0x4f,0x7a,0x3f,0x30,0x3c,0x50, 0x3e,0x4d,0x63,0x4f,0x63,0x62,0x50,0x63,0x13,0x10,0x15,0x00,0x00,0x00,0xdd,0xdd, 0xdd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x54,0x51,0x54,0x42,0x35,0x42, 0x5d,0x4b,0x5d,0x62,0x4e,0x61,0x5f,0x4b,0x5d,0x5b,0x48,0x59,0x52,0x40,0x50,0x48, 0x38,0x44,0x70,0x66,0x6e,0xe2,0xe1,0xe5,0xfc,0xfc,0xfd,0xed,0xef,0xf2,0xdb,0xdf, 0xe7,0xd0,0xd5,0xe0,0xc8,0xcc,0xda,0xc3,0xc8,0xd7,0xa5,0xac,0xbb,0x46,0x48,0x51, 0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x11,0x15,0x15,0x0f, 0x13,0x15,0x0f,0x13,0x18,0x10,0x16,0x19,0x12,0x18,0x42,0x3c,0x47,0x3b,0x3c,0x51, 0x24,0x21,0x38,0x2d,0x20,0x31,0x2d,0x24,0x30,0x35,0x27,0x2f,0x2e,0x22,0x28,0x30, 0x23,0x2a,0x97,0x91,0x94,0xb0,0xb7,0xca,0x80,0x8a,0xa3,0x88,0x91,0xa9,0x98,0xa1, 0xba,0x9a,0xa3,0xbc,0x9d,0xa5,0xbf,0x9f,0xa7,0xbf,0xa0,0xa8,0xc0,0xa4,0xac,0xc3, 0xa2,0xab,0xc2,0x89,0x93,0xb0,0x71,0x7c,0x9f,0x72,0x7d,0xa0,0x6e,0x7a,0x9d,0x6e, 0x7a,0x9d,0x6c,0x77,0x9c,0x6b,0x76,0x9b,0x69,0x75,0x9a,0x65,0x72,0x98,0x66,0x73, 0x98,0x66,0x73,0x98,0x63,0x6e,0x95,0x56,0x60,0x83,0x3f,0x47,0x63,0x38,0x41,0x5d, 0x33,0x3d,0x56,0x37,0x43,0x61,0x44,0x50,0x75,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x44,0x44, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x99,0x99,0x99,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xdd, 0xdd,0xdd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x44,0x44,0x44,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x34,0x34,0xea,0xea,0xea,0xfd,0xfd,0xfd, 0xff,0xff,0xff,0xfc,0xfc,0xfc,0xcb,0xcb,0xcb,0x3c,0x3c,0x3c,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0x3f,0x3f,0xfc,0xfc,0xfc,0xff, 0xff,0xff,0x42,0x42,0x42,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x44,0x44,0x44,0x99,0x99,0x99,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xcc,0xcc,0xcc,0x66,0x66,0x66,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x07,0x09,0x74,0x61,0x76,0xcb, 0xd0,0xdd,0x4b,0x49,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x99,0x99,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0x77,0x77,0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x14,0x10,0x13,0x48,0x3b,0x4a,0x4c,0x50,0x70,0x43,0x45, 0x68,0x38,0x2f,0x44,0x1e,0x16,0x1f,0x9e,0x9d,0x9f,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xee,0xee,0xee,0x5f,0x5e,0x63,0x24,0x22,0x33,0x39,0x37,0x53,0x4a, 0x47,0x6e,0x51,0x4e,0x79,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f, 0x7b,0x52,0x4f,0x7b,0x52,0x50,0x7b,0x52,0x52,0x7c,0x52,0x52,0x7c,0x52,0x52,0x7d, 0x4e,0x4f,0x78,0x42,0x44,0x65,0x2d,0x2f,0x46,0x1a,0x1b,0x28,0x7d,0x7e,0x81,0xde, 0xde,0xde,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x9c,0x9d,0x9f,0x44,0x45,0x4d,0x26, 0x2b,0x3e,0x3c,0x44,0x61,0x4c,0x56,0x7a,0x55,0x62,0x89,0x5a,0x65,0x8d,0x55,0x60, 0x8a,0x52,0x50,0x7c,0x52,0x4f,0x7a,0x54,0x5f,0x89,0x5c,0x67,0x90,0x5b,0x67,0x90, 0x54,0x59,0x7f,0x65,0x52,0x66,0x19,0x16,0x1d,0x02,0x02,0x02,0x00,0x00,0x00,0x00, 0x00,0x00,0xdd,0xdd,0xdd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x4d,0x4e, 0x50,0x40,0x3f,0x56,0x6e,0x5b,0x71,0x68,0x53,0x68,0x62,0x4e,0x62,0x62,0x4e,0x62, 0x61,0x4d,0x60,0x5d,0x4a,0x5c,0x57,0x44,0x54,0x4c,0x3b,0x48,0x58,0x4c,0x57,0xb6, 0xb3,0xb7,0xf5,0xf5,0xf8,0xe2,0xe5,0xeb,0xd2,0xd6,0xe1,0xc9,0xce,0xdb,0xbc,0xc3, 0xd3,0xb5,0xbb,0xce,0x8e,0x94,0xa6,0x35,0x38,0x40,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x16,0x10,0x14,0x12, 0x0c,0x10,0x12,0x0c,0x10,0x15,0x0f,0x13,0x18,0x11,0x17,0x3a,0x34,0x3f,0x3a,0x3a, 0x4f,0x28,0x2b,0x41,0x24,0x22,0x3a,0x2d,0x21,0x33,0x25,0x1c,0x2c,0x36,0x28,0x31, 0x31,0x24,0x2b,0x2a,0x1e,0x24,0x2f,0x24,0x2b,0xc7,0xc4,0xc6,0x9b,0xa4,0xbb,0x89, 0x91,0xa8,0x8b,0x94,0xaf,0x9f,0xa8,0xbf,0x9f,0xa7,0xbf,0xa0,0xa8,0xc0,0xa2,0xab, 0xc2,0xa3,0xab,0xc2,0xa5,0xad,0xc3,0xa1,0xaa,0xc1,0x77,0x82,0xa4,0x72,0x7d,0xa0, 0x6f,0x7b,0x9f,0x6f,0x7b,0x9f,0x6c,0x77,0x9b,0x6b,0x76,0x9b,0x66,0x73,0x98,0x67, 0x73,0x98,0x65,0x72,0x98,0x64,0x6f,0x95,0x62,0x6e,0x94,0x4a,0x53,0x71,0x3c,0x46, 0x63,0x37,0x40,0x5c,0x36,0x3f,0x5b,0x45,0x51,0x76,0x2c,0x34,0x4c,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x44,0x44,0x44,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x99,0x99,0x99, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xdd,0xdd,0xdd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x44, 0x44,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x31,0x31, 0x31,0xe2,0xe2,0xe2,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xf4,0xf4,0xf4, 0xbc,0xbc,0xbc,0x55,0x55,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x13,0x13,0x13,0xb8,0xb8,0xb8, 0xff,0xff,0xff,0xff,0xff,0xff,0x16,0x16,0x16,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x77,0x77,0x77,0x77,0x77,0x77,0xbb,0xbb,0xbb,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdd,0xdd,0xdd,0x77, 0x77,0x77,0x77,0x77,0x77,0x11,0x11,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x35,0x2d,0x36,0xbd,0xc0,0xce,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x99, 0x99,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x77,0x77,0x77,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x07,0x08,0x3d, 0x2f,0x39,0x4d,0x48,0x60,0x49,0x52,0x76,0x39,0x37,0x54,0x2b,0x20,0x2c,0x60,0x5e, 0x61,0xee,0xee,0xee,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xa0,0x9f,0xa3, 0x46,0x44,0x55,0x44,0x41,0x64,0x51,0x4e,0x78,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52, 0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7b,0x52,0x50,0x7b,0x52,0x50,0x7b,0x52,0x52, 0x7c,0x52,0x52,0x7c,0x52,0x53,0x7d,0x50,0x51,0x7a,0x48,0x49,0x6f,0x3c,0x3e,0x5d, 0x2b,0x2d,0x44,0x1c,0x1d,0x2c,0x41,0x42,0x49,0x7d,0x7e,0x81,0x8b,0x8c,0x8d,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xcd,0xcd,0xce,0x7c,0x7d,0x80,0x7e,0x7f,0x83,0x16,0x19,0x24,0x26,0x2b,0x3e, 0x37,0x40,0x5a,0x47,0x51,0x73,0x50,0x5c,0x82,0x56,0x63,0x8a,0x56,0x63,0x8b,0x58, 0x64,0x8d,0x5a,0x65,0x8d,0x5a,0x65,0x8d,0x55,0x60,0x8a,0x52,0x52,0x7c,0x52,0x4f, 0x7b,0x54,0x5f,0x89,0x5b,0x66,0x8e,0x5b,0x66,0x8e,0x3a,0x37,0x56,0x06,0x05,0x07, 0x02,0x02,0x03,0x00,0x00,0x00,0xdd,0xdd,0xdd,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0x44,0x44,0x44,0x15,0x17,0x1d,0x61,0x69,0x8a,0x78,0x69,0x86,0x6c,0x58, 0x6e,0x64,0x50,0x63,0x62,0x4e,0x62,0x62,0x4e,0x62,0x62,0x4e,0x61,0x5f,0x4c,0x5e, 0x5a,0x47,0x58,0x51,0x3f,0x4e,0x54,0x46,0x53,0x91,0x8d,0x98,0xe1,0xe3,0xeb,0xdd, 0xe0,0xe8,0xc4,0xc9,0xd8,0xb5,0xbb,0xce,0xad,0xb4,0xc9,0xa8,0xb0,0xc6,0x97,0x9c, 0xaa,0x36,0x38,0x3c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x15,0x0f,0x14, 0x11,0x0c,0x0f,0x0e,0x09,0x0c,0x10,0x0a,0x0e,0x15,0x0f,0x13,0x30,0x2a,0x35,0x32, 0x34,0x49,0x28,0x2a,0x40,0x26,0x2a,0x3f,0x27,0x2a,0x43,0x2c,0x24,0x39,0x2c,0x1f, 0x30,0x36,0x29,0x32,0x32,0x25,0x2c,0x2f,0x23,0x2a,0x2a,0x1e,0x24,0x3f,0x33,0x3a, 0xdb,0xdc,0xe1,0x93,0x9c,0xb4,0x86,0x8d,0xa5,0x96,0xa0,0xb8,0xa2,0xaa,0xc1,0xa2, 0xaa,0xc1,0xa7,0xaf,0xc4,0xa4,0xac,0xc3,0xa9,0xb1,0xc6,0xa9,0xb0,0xc6,0x8c,0x96, 0xb3,0x76,0x81,0xa3,0x71,0x7c,0x9f,0x6e,0x7b,0x9d,0x6c,0x77,0x9c,0x6a,0x75,0x9a, 0x69,0x75,0x9a,0x66,0x73,0x98,0x64,0x6f,0x95,0x63,0x6e,0x95,0x57,0x63,0x86,0x41, 0x4a,0x67,0x38,0x41,0x5e,0x35,0x3e,0x5a,0x36,0x43,0x60,0x54,0x62,0x90,0x03,0x04, 0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xa5,0xa5,0xa5,0xf5,0xf5,0xf5,0xff,0xff, 0xff,0xff,0xff,0xff,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xf1,0xf1,0xf1,0xcd,0xcd,0xcd, 0xa1,0xa1,0xa1,0x8a,0x8a,0x8a,0x74,0x74,0x74,0x63,0x63,0x63,0x66,0x66,0x66,0x71, 0x71,0x71,0x87,0x87,0x87,0x99,0x99,0x99,0xaf,0xaf,0xaf,0xd5,0xd5,0xd5,0xea,0xea, 0xea,0xfc,0xfc,0xfc,0xff,0xff,0xff,0xef,0xef,0xef,0x05,0x05,0x05,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1d,0x1b,0x1f,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x99,0x99,0x99,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x77,0x77, 0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x2d,0x23,0x2b,0x4c,0x40,0x50,0x51,0x56,0x76,0x40, 0x44,0x66,0x35,0x2c,0x3d,0x1f,0x17,0x21,0x1a,0x15,0x1e,0x16,0x14,0x1e,0x1a,0x18, 0x24,0x26,0x24,0x37,0x39,0x37,0x53,0x4b,0x48,0x6d,0x51,0x4e,0x79,0x52,0x4f,0x7a, 0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7b,0x52,0x4f,0x7b,0x52, 0x50,0x7b,0x52,0x50,0x7b,0x52,0x52,0x7c,0x52,0x52,0x7d,0x52,0x53,0x7d,0x52,0x53, 0x7e,0x4f,0x51,0x7a,0x48,0x4b,0x71,0x40,0x42,0x64,0x35,0x39,0x55,0x2c,0x2e,0x46, 0x22,0x26,0x37,0x19,0x1c,0x28,0x15,0x17,0x22,0x15,0x17,0x22,0x15,0x17,0x22,0x15, 0x17,0x22,0x17,0x1a,0x25,0x1e,0x23,0x32,0x27,0x2d,0x41,0x30,0x36,0x4e,0x3b,0x43, 0x60,0x48,0x51,0x74,0x50,0x5a,0x81,0x55,0x61,0x89,0x56,0x62,0x8b,0x57,0x63,0x8c, 0x57,0x63,0x8c,0x57,0x64,0x8c,0x5a,0x65,0x8d,0x58,0x65,0x8d,0x5b,0x67,0x90,0x5a, 0x66,0x8e,0x56,0x62,0x8b,0x52,0x52,0x7c,0x52,0x50,0x7c,0x56,0x62,0x8b,0x5e,0x6a, 0x91,0x63,0x6e,0x94,0x0b,0x09,0x0d,0x00,0x00,0x00,0xdd,0xdd,0xdd,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0x44,0x44,0x44,0x00,0x00,0x00,0x08,0x08,0x0b,0x3e, 0x44,0x57,0x64,0x62,0x86,0x74,0x5f,0x77,0x69,0x55,0x6a,0x62,0x4e,0x61,0x61,0x4d, 0x60,0x62,0x4e,0x61,0x61,0x4d,0x60,0x60,0x4c,0x5f,0x5d,0x49,0x5b,0x57,0x44,0x55, 0x57,0x48,0x55,0x95,0x91,0x9b,0xe5,0xe7,0xee,0xd5,0xd8,0xe3,0xbb,0xc1,0xd2,0xc0, 0xc6,0xd6,0xc9,0xce,0xdb,0xbb,0xc1,0xd2,0x81,0x87,0x97,0x0b,0x0c,0x0e,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x12,0x0d, 0x10,0x10,0x0a,0x0e,0x0d,0x09,0x0b,0x0d,0x09,0x0b,0x10,0x0a,0x0e,0x2c,0x27,0x32, 0x2e,0x30,0x47,0x25,0x27,0x3c,0x27,0x2a,0x40,0x2b,0x2d,0x45,0x29,0x2b,0x44,0x26, 0x22,0x3b,0x2e,0x21,0x34,0x28,0x1f,0x2b,0x36,0x28,0x31,0x30,0x23,0x2a,0x2b,0x1f, 0x26,0x29,0x1e,0x23,0x62,0x59,0x5f,0xce,0xd1,0xde,0x88,0x91,0xaa,0x8b,0x94,0xac, 0x99,0xa2,0xbb,0xa9,0xb0,0xc6,0xa8,0xaf,0xc4,0xa9,0xb1,0xc6,0xaa,0xb2,0xc7,0xaa, 0xb2,0xc7,0xa5,0xad,0xc4,0x7c,0x88,0xa8,0x74,0x80,0xa2,0x73,0x7e,0xa1,0x6d,0x79, 0x9c,0x6d,0x79,0x9c,0x6b,0x76,0x9b,0x64,0x71,0x96,0x65,0x71,0x96,0x60,0x6c,0x93, 0x4b,0x54,0x75,0x3f,0x48,0x65,0x39,0x41,0x5f,0x34,0x3b,0x57,0x43,0x4e,0x74,0x3f, 0x48,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3e, 0x3e,0x3e,0xd0,0xd0,0xd0,0xfa,0xfa,0xfa,0xfd,0xfd,0xfd,0xff,0xff,0xff,0xff,0xff, 0xff,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfc,0xfc,0xfc,0xfe,0xfe,0xfe, 0xfc,0xfc,0xfc,0xfd,0xfd,0xfd,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfa, 0xfa,0xfa,0xed,0xed,0xed,0xf8,0xf8,0xf8,0xff,0xff,0xff,0xae,0xae,0xae,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x99,0x99,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0x77,0x77,0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1a,0x14,0x18, 0x45,0x35,0x41,0x4f,0x4d,0x65,0x49,0x51,0x75,0x49,0x41,0x5f,0x48,0x36,0x4c,0x48, 0x36,0x4c,0x4c,0x40,0x5c,0x48,0x44,0x67,0x50,0x4b,0x71,0x53,0x4f,0x78,0x53,0x4f, 0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a, 0x52,0x4f,0x7b,0x52,0x4f,0x7b,0x52,0x50,0x7b,0x52,0x50,0x7b,0x52,0x52,0x7c,0x52, 0x52,0x7d,0x52,0x53,0x7d,0x52,0x53,0x7e,0x52,0x54,0x7e,0x51,0x54,0x7f,0x4d,0x50, 0x7a,0x49,0x4e,0x74,0x44,0x4b,0x6e,0x40,0x47,0x67,0x3d,0x44,0x64,0x3d,0x45,0x64, 0x3d,0x46,0x66,0x3d,0x46,0x66,0x3e,0x47,0x67,0x43,0x4c,0x6f,0x48,0x52,0x76,0x4c, 0x56,0x7d,0x50,0x5c,0x84,0x54,0x5f,0x88,0x55,0x60,0x8a,0x56,0x62,0x8b,0x56,0x62, 0x8b,0x56,0x62,0x8b,0x57,0x63,0x8c,0x57,0x63,0x8c,0x58,0x64,0x8d,0x58,0x65,0x8d, 0x58,0x65,0x8d,0x5b,0x67,0x90,0x5d,0x69,0x91,0x5c,0x67,0x90,0x55,0x60,0x8a,0x52, 0x50,0x7b,0x53,0x5d,0x86,0x5d,0x6a,0x91,0x50,0x59,0x76,0x21,0x24,0x30,0xdd,0xdd, 0xdd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x44,0x44,0x44,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x0a,0x0b,0x0f,0x3c,0x3f,0x55,0x74,0x67,0x86,0x71, 0x5c,0x74,0x63,0x4f,0x63,0x5a,0x47,0x58,0x5d,0x4a,0x5c,0x5e,0x4a,0x5d,0x5d,0x49, 0x5b,0x5d,0x49,0x5b,0x5c,0x49,0x5b,0x58,0x45,0x56,0x59,0x4a,0x56,0x92,0x8b,0x93, 0xe9,0xe9,0xec,0xf9,0xf9,0xfa,0xde,0xe1,0xe9,0xaf,0xb5,0xca,0x85,0x90,0xad,0x4b, 0x51,0x62,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11, 0x0d,0x10,0x0d,0x09,0x0b,0x0a,0x06,0x08,0x0b,0x07,0x09,0x0d,0x09,0x0b,0x30,0x2c, 0x36,0x34,0x37,0x4f,0x25,0x26,0x3b,0x28,0x2a,0x41,0x2a,0x2c,0x43,0x2c,0x2e,0x47, 0x2b,0x2e,0x46,0x27,0x2a,0x43,0x2e,0x24,0x39,0x28,0x1f,0x2e,0x39,0x2b,0x34,0x32, 0x25,0x2c,0x2e,0x22,0x29,0x29,0x1e,0x23,0x29,0x1e,0x23,0x9c,0x95,0x99,0xb4,0xba, 0xcc,0x89,0x91,0xa9,0x9c,0xa3,0xba,0xa2,0xab,0xc2,0xa9,0xb0,0xc6,0xac,0xb4,0xc9, 0xaf,0xb7,0xca,0xad,0xb5,0xc9,0xb0,0xb7,0xca,0x8c,0x96,0xb3,0x76,0x82,0xa3,0x75, 0x81,0xa3,0x72,0x7d,0xa0,0x6d,0x79,0x9d,0x67,0x73,0x99,0x67,0x73,0x98,0x62,0x6e, 0x94,0x57,0x63,0x86,0x44,0x4e,0x6c,0x3d,0x45,0x64,0x38,0x41,0x5d,0x38,0x41,0x5d, 0x56,0x65,0x92,0x0c,0x0e,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x43,0x43,0x43,0xac,0xac,0xac,0xe8, 0xe8,0xe8,0xfc,0xfc,0xfc,0xfd,0xfd,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfe,0xfe, 0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xf8,0xf8,0xf8,0xfb,0xfb,0xfb,0xff,0xff,0xff,0x62, 0x62,0x62,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x99,0x99,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0x77,0x77,0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x09,0x07,0x08,0x36,0x29,0x33,0x48,0x3d,0x4c,0x59,0x60,0x83, 0x52,0x4f,0x7a,0x62,0x4a,0x66,0x5b,0x43,0x5d,0x64,0x50,0x6f,0x58,0x50,0x79,0x54, 0x50,0x79,0x54,0x50,0x79,0x53,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f, 0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7b,0x52,0x4f,0x7b,0x52,0x50,0x7b, 0x52,0x50,0x7b,0x52,0x52,0x7c,0x52,0x53,0x7d,0x52,0x53,0x7d,0x52,0x54,0x7e,0x52, 0x55,0x80,0x52,0x55,0x81,0x52,0x57,0x82,0x52,0x57,0x82,0x52,0x5a,0x84,0x52,0x5c, 0x86,0x52,0x5c,0x86,0x52,0x5c,0x86,0x52,0x5d,0x88,0x52,0x5d,0x88,0x53,0x5e,0x88, 0x53,0x5e,0x89,0x53,0x5f,0x89,0x53,0x5f,0x89,0x54,0x5f,0x89,0x55,0x60,0x8a,0x55, 0x60,0x8a,0x55,0x62,0x8b,0x56,0x62,0x8b,0x56,0x63,0x8b,0x56,0x63,0x8b,0x57,0x64, 0x8c,0x58,0x64,0x8d,0x5a,0x65,0x8d,0x5c,0x67,0x90,0x5c,0x67,0x90,0x5c,0x67,0x90, 0x5e,0x6b,0x92,0x5e,0x69,0x91,0x55,0x60,0x8a,0x55,0x56,0x80,0x44,0x4e,0x6c,0x20, 0x23,0x2f,0xdd,0xde,0xde,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x44,0x44, 0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x0c,0x0c,0x10,0x47,0x40,0x54,0x70,0x5b,0x72,0x58,0x45,0x56,0x50,0x3f,0x4d,0x50, 0x3f,0x4d,0x52,0x40,0x4f,0x51,0x3f,0x4e,0x4f,0x3e,0x4c,0x4f,0x3e,0x4c,0x4a,0x39, 0x47,0x44,0x34,0x40,0x3d,0x2f,0x38,0x65,0x5b,0x61,0xef,0xee,0xee,0xe3,0xe6,0xed, 0x80,0x8a,0xaa,0x6a,0x76,0x99,0x12,0x14,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x14,0x0e,0x12,0x0d,0x09,0x0b,0x0b,0x07,0x09,0x12,0x0c,0x0e,0x19,0x11,0x14,0x63, 0x61,0x6b,0x63,0x6f,0x95,0x4c,0x56,0x78,0x52,0x5e,0x80,0x29,0x2b,0x42,0x2d,0x30, 0x47,0x2f,0x31,0x4a,0x2e,0x30,0x48,0x2a,0x2d,0x46,0x26,0x22,0x3c,0x2d,0x24,0x37, 0x3a,0x2e,0x39,0x37,0x29,0x32,0x2f,0x22,0x29,0x2b,0x1f,0x26,0x29,0x1e,0x24,0x32, 0x26,0x2d,0xdb,0xdb,0xe1,0x9c,0xa4,0xb8,0x91,0x9a,0xb1,0xa2,0xaa,0xc1,0xad,0xb5, 0xc9,0xb2,0xb9,0xcb,0xb4,0xbb,0xce,0xb3,0xba,0xcc,0xb5,0xbc,0xcf,0xac,0xb4,0xc8, 0x77,0x83,0xa4,0x74,0x80,0xa2,0x71,0x7c,0x9f,0x6d,0x79,0x9c,0x69,0x74,0x99,0x65, 0x72,0x98,0x62,0x6c,0x93,0x4a,0x54,0x74,0x3f,0x4a,0x67,0x3c,0x45,0x62,0x37,0x40, 0x5c,0x3c,0x45,0x66,0x4b,0x54,0x7e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x29,0x29,0x29,0x84,0x84,0x84,0xdd,0xdd,0xdd,0xf1, 0xf1,0xf1,0xf3,0xf3,0xf3,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf9,0xf9, 0xf9,0xf8,0xf8,0xf8,0xf6,0xf6,0xf6,0xf4,0xf4,0xf4,0xec,0xec,0xec,0xfd,0xfd,0xfd, 0xff,0xff,0xff,0x29,0x29,0x29,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x99, 0x99,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x77,0x77,0x77,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x1b, 0x22,0x40,0x32,0x3e,0x5a,0x5a,0x72,0x52,0x5c,0x85,0x64,0x53,0x74,0x5c,0x44,0x5e, 0x5f,0x47,0x64,0x62,0x53,0x77,0x54,0x50,0x79,0x54,0x50,0x79,0x52,0x4f,0x7a,0x52, 0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f, 0x7b,0x52,0x50,0x7b,0x52,0x50,0x7b,0x52,0x52,0x7c,0x52,0x52,0x7c,0x52,0x53,0x7d, 0x52,0x53,0x7d,0x52,0x54,0x7e,0x52,0x55,0x80,0x52,0x55,0x81,0x52,0x55,0x81,0x52, 0x57,0x82,0x52,0x5a,0x84,0x52,0x5a,0x84,0x52,0x5b,0x85,0x52,0x5c,0x86,0x52,0x5d, 0x88,0x52,0x5d,0x88,0x53,0x5e,0x89,0x53,0x5f,0x89,0x53,0x5f,0x89,0x53,0x5f,0x89, 0x54,0x5f,0x89,0x55,0x60,0x8a,0x56,0x62,0x8b,0x55,0x62,0x8b,0x56,0x63,0x8b,0x56, 0x63,0x8b,0x57,0x64,0x8c,0x57,0x64,0x8c,0x58,0x65,0x8d,0x5a,0x65,0x8d,0x5b,0x66, 0x8e,0x5c,0x69,0x90,0x5e,0x6b,0x92,0x5e,0x69,0x91,0x62,0x6d,0x94,0x60,0x6c,0x92, 0x47,0x50,0x6e,0x1e,0x1e,0x2a,0xdd,0xdd,0xde,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0x46,0x46,0x46,0x04,0x04,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0x18,0x1f,0x4a,0x39,0x46, 0x31,0x24,0x2c,0x2b,0x1f,0x25,0x2d,0x21,0x28,0x2f,0x22,0x29,0x30,0x23,0x2a,0x30, 0x23,0x2a,0x31,0x24,0x2b,0x34,0x27,0x2f,0x32,0x25,0x2d,0x31,0x24,0x2b,0x33,0x27, 0x2d,0xc7,0xc5,0xc8,0xc6,0xcb,0xd9,0x6b,0x77,0x9b,0x49,0x51,0x6b,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x03, 0x03,0x15,0x0f,0x13,0x0f,0x0a,0x0c,0x13,0x0c,0x0e,0x14,0x0d,0x0f,0x19,0x11,0x14, 0x6f,0x6f,0x7d,0x62,0x6e,0x92,0x4b,0x54,0x75,0x52,0x5d,0x81,0x55,0x61,0x85,0x57, 0x61,0x85,0x31,0x33,0x4a,0x33,0x34,0x4b,0x32,0x34,0x4b,0x30,0x31,0x4a,0x27,0x2a, 0x43,0x2a,0x24,0x3b,0x26,0x1f,0x2e,0x38,0x2a,0x33,0x31,0x24,0x2b,0x2c,0x20,0x27, 0x28,0x1d,0x23,0x2a,0x1e,0x25,0x63,0x58,0x5f,0xbe,0xc3,0xd3,0x95,0x9d,0xb2,0x9c, 0xa4,0xba,0xad,0xb4,0xc9,0xb2,0xb9,0xcc,0xb7,0xbe,0xcf,0xb4,0xbb,0xce,0xb8,0xbe, 0xd0,0xb4,0xbb,0xce,0x8c,0x96,0xb3,0x79,0x84,0xa5,0x74,0x80,0xa2,0x6e,0x7b,0x9d, 0x67,0x73,0x99,0x66,0x73,0x98,0x5a,0x65,0x88,0x48,0x52,0x71,0x41,0x4b,0x69,0x3c, 0x44,0x62,0x37,0x41,0x5f,0x52,0x61,0x8d,0x0f,0x11,0x18,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x1e, 0x1e,0x1e,0x16,0x16,0x16,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x84,0x84, 0x84,0xfd,0xfd,0xfd,0xff,0xff,0xff,0x0c,0x0c,0x0c,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x99,0x99,0x99,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x77,0x77, 0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x10,0x0c,0x0f,0x39,0x2b,0x35,0x4e,0x45,0x54,0x60,0x6a, 0x8b,0x5a,0x52,0x79,0x60,0x48,0x64,0x5e,0x46,0x62,0x64,0x53,0x75,0x55,0x50,0x79, 0x53,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52, 0x4f,0x7a,0x52,0x4f,0x7b,0x52,0x4f,0x7b,0x52,0x50,0x7b,0x52,0x50,0x7b,0x52,0x52, 0x7c,0x52,0x52,0x7c,0x52,0x52,0x7d,0x52,0x53,0x7d,0x52,0x53,0x7e,0x52,0x54,0x7e, 0x52,0x55,0x81,0x52,0x57,0x82,0x52,0x57,0x83,0x52,0x5b,0x85,0x52,0x5b,0x85,0x52, 0x5c,0x86,0x52,0x5d,0x86,0x52,0x5d,0x88,0x53,0x5e,0x88,0x53,0x5f,0x89,0x53,0x5f, 0x89,0x53,0x5f,0x89,0x54,0x5f,0x89,0x54,0x60,0x8a,0x55,0x60,0x8a,0x56,0x62,0x8b, 0x56,0x62,0x8b,0x56,0x63,0x8b,0x57,0x63,0x8c,0x58,0x64,0x8d,0x5a,0x65,0x8e,0x5a, 0x65,0x8d,0x5b,0x66,0x8e,0x5b,0x67,0x90,0x5d,0x69,0x91,0x5e,0x6b,0x92,0x60,0x6d, 0x93,0x63,0x6d,0x94,0x53,0x5e,0x7c,0x28,0x2c,0x3a,0xde,0xde,0xde,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0x5c,0x5d,0x61,0x10,0x11,0x13,0x06,0x06,0x07,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x16,0x12, 0x17,0x44,0x35,0x40,0x29,0x1d,0x23,0x1e,0x15,0x19,0x1d,0x14,0x18,0x20,0x16,0x1a, 0x20,0x16,0x1a,0x20,0x17,0x1b,0x21,0x17,0x1b,0x23,0x19,0x1e,0x25,0x1a,0x1f,0x27, 0x1c,0x21,0x27,0x1b,0x21,0x27,0x1c,0x21,0x83,0x81,0x87,0x8c,0x96,0xb2,0x60,0x6c, 0x93,0x1c,0x1f,0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07, 0x05,0x06,0x16,0x0f,0x14,0x12,0x0c,0x0e,0x12,0x0c,0x0d,0x12,0x0b,0x0d,0x1b,0x15, 0x16,0x80,0x83,0x92,0x60,0x6b,0x90,0x4a,0x54,0x76,0x50,0x5b,0x80,0x56,0x61,0x86, 0x5b,0x67,0x8e,0x65,0x71,0x96,0x67,0x73,0x95,0x37,0x39,0x50,0x37,0x39,0x4f,0x34, 0x36,0x4d,0x2d,0x30,0x47,0x26,0x25,0x3f,0x29,0x21,0x34,0x37,0x29,0x32,0x33,0x26, 0x2e,0x2e,0x22,0x29,0x2a,0x1e,0x25,0x2a,0x1e,0x24,0x2b,0x1f,0x26,0xa9,0xa7,0xb1, 0xad,0xb4,0xc8,0x99,0xa0,0xb3,0xac,0xb3,0xc7,0xb3,0xba,0xcc,0xb5,0xbb,0xce,0xba, 0xc0,0xd1,0xb9,0xbf,0xd0,0xb8,0xbe,0xd0,0xab,0xb3,0xc8,0x7b,0x85,0xa7,0x75,0x81, 0xa2,0x6e,0x7a,0x9d,0x6b,0x76,0x9b,0x66,0x73,0x98,0x53,0x5c,0x7c,0x48,0x52,0x71, 0x40,0x4b,0x6a,0x3b,0x44,0x60,0x40,0x4c,0x6e,0x4d,0x59,0x81,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0xbb,0xbb,0xbb,0xff,0xff,0xff,0xea,0xea,0xea,0x02,0x02,0x02,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x03,0x03,0x2b, 0x21,0x28,0x3e,0x30,0x3b,0x63,0x63,0x7a,0x52,0x5d,0x86,0x64,0x4e,0x6d,0x5e,0x46, 0x62,0x63,0x4b,0x67,0x5a,0x52,0x79,0x54,0x50,0x79,0x52,0x4f,0x7a,0x52,0x4f,0x7a, 0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7b,0x52, 0x50,0x7b,0x52,0x50,0x7b,0x52,0x52,0x7c,0x52,0x52,0x7c,0x52,0x52,0x7d,0x52,0x53, 0x7d,0x52,0x53,0x7e,0x52,0x55,0x80,0x52,0x55,0x81,0x52,0x57,0x82,0x52,0x57,0x83, 0x52,0x57,0x83,0x52,0x5b,0x85,0x52,0x5c,0x86,0x52,0x5c,0x86,0x53,0x5e,0x88,0x53, 0x5e,0x88,0x53,0x5f,0x89,0x53,0x5f,0x89,0x53,0x5f,0x89,0x54,0x60,0x8a,0x54,0x60, 0x8a,0x55,0x60,0x8a,0x56,0x62,0x8b,0x56,0x62,0x8b,0x57,0x64,0x8c,0x57,0x64,0x8c, 0x58,0x64,0x8c,0x5b,0x66,0x8e,0x5a,0x66,0x8e,0x5b,0x67,0x90,0x5e,0x6a,0x91,0x5d, 0x6a,0x91,0x62,0x6d,0x93,0x64,0x6f,0x95,0x5f,0x68,0x8a,0x46,0x4c,0x62,0x2d,0x30, 0x3c,0x23,0x25,0x2d,0x21,0x23,0x2b,0x2b,0x2e,0x36,0x54,0x58,0x64,0x92,0x98,0xa8, 0x8a,0x8e,0x9c,0x1a,0x1b,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x0b,0x08,0x0a,0x34,0x27,0x2f,0x25,0x1c,0x21,0x16,0x0e,0x10,0x15,0x0e, 0x10,0x17,0x0f,0x12,0x17,0x0f,0x11,0x17,0x0f,0x11,0x17,0x0f,0x12,0x18,0x10,0x12, 0x18,0x10,0x12,0x1c,0x13,0x16,0x1f,0x15,0x19,0x20,0x16,0x1a,0x1c,0x14,0x16,0x97, 0x9a,0xa8,0x64,0x6f,0x95,0x55,0x5d,0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x0a,0x07,0x09,0x17,0x10,0x15,0x16,0x0f,0x12,0x11,0x0b,0x0c,0x10,0x0a,0x0b,0x26, 0x21,0x22,0x8f,0x94,0xa3,0x60,0x6a,0x90,0x49,0x53,0x74,0x50,0x5b,0x80,0x55,0x5f, 0x84,0x58,0x63,0x8a,0x5e,0x6a,0x92,0x64,0x71,0x96,0x6e,0x7a,0x9d,0x74,0x7e,0x9d, 0x3b,0x3d,0x53,0x38,0x3a,0x51,0x32,0x34,0x4b,0x29,0x2c,0x44,0x26,0x22,0x3b,0x1f, 0x17,0x22,0x37,0x29,0x32,0x2e,0x22,0x29,0x2b,0x1f,0x26,0x2b,0x1f,0x25,0x2b,0x1f, 0x26,0x37,0x2c,0x32,0xc6,0xcb,0xd8,0xa5,0xab,0xbf,0xa0,0xa5,0xb9,0xb2,0xb9,0xcc, 0xb9,0xbf,0xd0,0xbc,0xc2,0xd2,0xbe,0xc3,0xd3,0xb9,0xc0,0xd1,0xb3,0xba,0xcc,0x89, 0x93,0xb1,0x75,0x81,0xa2,0x6e,0x7a,0x9d,0x6a,0x75,0x9a,0x5f,0x6c,0x8e,0x52,0x5b, 0x7a,0x47,0x52,0x6e,0x41,0x4b,0x69,0x40,0x48,0x68,0x5d,0x66,0x97,0x0f,0x12,0x18, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0xe1,0xe1,0xe1,0xff,0xff,0xff,0x8a,0x8a,0x8a,0x02, 0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x12,0x16,0x3a,0x2c,0x35,0x57,0x4f,0x5c,0x70, 0x77,0x94,0x57,0x50,0x79,0x62,0x4a,0x66,0x5f,0x47,0x63,0x64,0x52,0x72,0x57,0x50, 0x79,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a, 0x52,0x4f,0x7b,0x52,0x4f,0x7b,0x52,0x50,0x7b,0x52,0x50,0x7b,0x52,0x52,0x7c,0x52, 0x52,0x7c,0x52,0x53,0x7d,0x52,0x53,0x7d,0x52,0x54,0x7e,0x52,0x55,0x80,0x52,0x55, 0x81,0x52,0x57,0x82,0x52,0x57,0x83,0x52,0x5a,0x84,0x52,0x5a,0x84,0x52,0x5d,0x86, 0x52,0x5c,0x86,0x53,0x5e,0x88,0x53,0x5e,0x88,0x53,0x5f,0x89,0x54,0x5f,0x89,0x54, 0x60,0x8a,0x54,0x5f,0x89,0x55,0x62,0x8a,0x55,0x62,0x8b,0x56,0x62,0x8b,0x56,0x62, 0x8b,0x57,0x64,0x8c,0x58,0x65,0x8d,0x58,0x64,0x8d,0x5a,0x65,0x8e,0x5b,0x66,0x8e, 0x5d,0x69,0x91,0x5f,0x6b,0x92,0x60,0x6c,0x93,0x65,0x6f,0x95,0x6a,0x77,0x98,0x6a, 0x74,0x91,0x69,0x6f,0x88,0x6a,0x72,0x87,0x73,0x79,0x8b,0x7d,0x84,0x95,0x8d,0x94, 0xa7,0xa5,0xab,0xbf,0xb5,0xbe,0xce,0xbf,0xc4,0xd3,0x82,0x86,0x90,0x14,0x14,0x16, 0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x06,0x07,0x2b,0x1f,0x26,0x1b,0x13,0x16,0x13, 0x0c,0x0d,0x12,0x0c,0x0d,0x11,0x0b,0x0c,0x12,0x0b,0x0c,0x13,0x0c,0x0d,0x14,0x0d, 0x0f,0x14,0x0d,0x0f,0x14,0x0d,0x0f,0x17,0x0f,0x11,0x1a,0x11,0x14,0x1d,0x14,0x18, 0x18,0x10,0x12,0x49,0x46,0x49,0x6e,0x7a,0x9d,0x66,0x73,0x98,0x2a,0x2c,0x32,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x0f,0x0b,0x0e,0x1b,0x13,0x18,0x1a,0x11,0x14,0x11,0x0a,0x0c,0x0e,0x08,0x09, 0x36,0x32,0x32,0xb9,0xba,0xc6,0x65,0x6f,0x92,0x4b,0x54,0x75,0x51,0x5c,0x81,0x58, 0x64,0x8d,0x59,0x64,0x8c,0x5a,0x66,0x8e,0x5c,0x69,0x90,0x60,0x6d,0x93,0x69,0x74, 0x99,0x73,0x7e,0xa1,0x6f,0x78,0x96,0x3c,0x3d,0x53,0x38,0x3a,0x4f,0x2f,0x31,0x48, 0x26,0x28,0x42,0x25,0x1d,0x2d,0x35,0x28,0x31,0x33,0x26,0x2e,0x2d,0x21,0x28,0x2c, 0x20,0x26,0x2b,0x1f,0x26,0x2e,0x22,0x29,0x75,0x6f,0x76,0xbc,0xc2,0xd2,0x9a,0xa0, 0xb2,0xb2,0xb8,0xca,0xba,0xc1,0xd1,0xbc,0xc3,0xd3,0xc1,0xc7,0xd6,0xbb,0xc1,0xd2, 0xb9,0xbf,0xd0,0xa4,0xac,0xc3,0x77,0x83,0xa4,0x73,0x7e,0xa1,0x6b,0x76,0x9b,0x5a, 0x65,0x85,0x4f,0x5a,0x79,0x48,0x50,0x72,0x40,0x4c,0x69,0x49,0x54,0x77,0x56,0x62, 0x8e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf3,0xf3,0xf3,0xff,0xff,0xff, 0x41,0x41,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x06,0x08, 0x31,0x25,0x2d,0x3d,0x30,0x39,0x7e,0x7a,0x86,0x63,0x6d,0x93,0x63,0x53,0x77,0x60, 0x48,0x64,0x5e,0x46,0x62,0x63,0x4c,0x69,0x58,0x50,0x79,0x52,0x4f,0x7a,0x52,0x4f, 0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7b,0x52,0x4f,0x7b,0x52,0x50,0x7b, 0x52,0x50,0x7b,0x52,0x52,0x7c,0x52,0x52,0x7c,0x52,0x53,0x7d,0x52,0x53,0x7d,0x52, 0x54,0x7e,0x52,0x55,0x80,0x52,0x55,0x81,0x52,0x57,0x82,0x52,0x57,0x82,0x52,0x5b, 0x85,0x52,0x5b,0x85,0x52,0x5b,0x85,0x52,0x5c,0x86,0x52,0x5d,0x88,0x53,0x5e,0x88, 0x53,0x5e,0x88,0x54,0x5f,0x89,0x54,0x5f,0x89,0x55,0x60,0x8a,0x55,0x62,0x8a,0x56, 0x62,0x8b,0x56,0x62,0x8b,0x56,0x63,0x8b,0x57,0x63,0x8c,0x57,0x64,0x8c,0x5a,0x66, 0x8e,0x5c,0x67,0x8e,0x5c,0x69,0x91,0x5f,0x6c,0x92,0x60,0x6c,0x92,0x69,0x74,0x99, 0x6e,0x7a,0x9f,0x77,0x83,0xa3,0x85,0x8e,0xab,0x92,0x9a,0xb5,0x9d,0xa7,0xbe,0xa8, 0xb1,0xc4,0xb3,0xba,0xcb,0xb7,0xbe,0xcf,0xb7,0xbe,0xcf,0xb9,0xbf,0xd0,0xbe,0xc3, 0xd3,0xc2,0xc8,0xd6,0x62,0x65,0x6b,0x0f,0x10,0x11,0x06,0x04,0x05,0x27,0x1c,0x21, 0x1d,0x14,0x17,0x10,0x0a,0x0b,0x10,0x0a,0x0b,0x10,0x0a,0x0b,0x10,0x0a,0x0b,0x10, 0x0a,0x0b,0x12,0x0b,0x0d,0x11,0x0a,0x0c,0x15,0x0d,0x0f,0x16,0x0e,0x10,0x1a,0x11, 0x14,0x1d,0x13,0x17,0x19,0x11,0x14,0x22,0x1b,0x1e,0x81,0x8c,0xab,0x5b,0x67,0x90, 0x62,0x6b,0x83,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x1e,0x17,0x1d,0x29,0x1e,0x25,0x1b,0x12,0x15,0x14,0x0d,0x0e,0x11,0x0b, 0x0c,0x4a,0x46,0x47,0xe9,0xe9,0xeb,0x7b,0x85,0xa2,0x4c,0x56,0x77,0x53,0x5d,0x84, 0x58,0x65,0x8d,0x58,0x65,0x8d,0x58,0x64,0x8d,0x5b,0x66,0x8e,0x5b,0x66,0x8e,0x5e, 0x6a,0x91,0x64,0x71,0x96,0x6d,0x79,0x9c,0x79,0x84,0xa4,0x77,0x80,0x9d,0x3d,0x3d, 0x54,0x37,0x39,0x4f,0x2d,0x2f,0x47,0x25,0x21,0x38,0x1f,0x16,0x1e,0x36,0x28,0x31, 0x30,0x23,0x2a,0x2c,0x20,0x27,0x2c,0x20,0x26,0x2d,0x21,0x28,0x30,0x23,0x2b,0xcb, 0xcd,0xd6,0xab,0xb2,0xc3,0xa5,0xab,0xbc,0xb9,0xc0,0xd1,0xbe,0xc3,0xd3,0xbc,0xc2, 0xd2,0xbb,0xc1,0xd2,0xb7,0xbe,0xcf,0xb4,0xbb,0xce,0x84,0x8e,0xac,0x74,0x80,0xa2, 0x66,0x71,0x93,0x5a,0x64,0x85,0x50,0x5b,0x7b,0x4b,0x56,0x75,0x46,0x51,0x70,0x63, 0x72,0xa3,0x11,0x13,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2e,0x2e,0x2e,0xfc,0xfc, 0xfc,0xff,0xff,0xff,0x15,0x15,0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x21,0x19,0x1f,0x3a,0x2b,0x35,0x50,0x44,0x4d, 0x8d,0x8f,0xa0,0x52,0x5d,0x88,0x64,0x53,0x73,0x5c,0x44,0x5e,0x58,0x40,0x5a,0x64, 0x52,0x71,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f, 0x7b,0x52,0x4f,0x7b,0x52,0x50,0x7b,0x52,0x50,0x7b,0x52,0x52,0x7c,0x52,0x52,0x7c, 0x52,0x53,0x7d,0x52,0x53,0x7d,0x52,0x53,0x7e,0x52,0x54,0x7e,0x52,0x55,0x81,0x52, 0x57,0x82,0x52,0x57,0x83,0x52,0x57,0x83,0x52,0x5d,0x86,0x52,0x5d,0x86,0x52,0x5d, 0x88,0x53,0x5e,0x88,0x53,0x5e,0x88,0x53,0x5e,0x89,0x54,0x5f,0x89,0x55,0x62,0x8a, 0x55,0x62,0x8a,0x56,0x62,0x8b,0x56,0x62,0x8b,0x57,0x63,0x8c,0x58,0x64,0x8c,0x58, 0x64,0x8c,0x5a,0x65,0x8d,0x5c,0x67,0x8e,0x5c,0x69,0x90,0x5e,0x6a,0x90,0x63,0x6c, 0x92,0x6a,0x75,0x9b,0x71,0x7c,0x9f,0x7c,0x86,0xa4,0x89,0x92,0xaf,0x96,0x9f,0xb7, 0xa2,0xa9,0xc0,0xac,0xb3,0xc8,0xb5,0xbb,0xcc,0xbb,0xc1,0xd1,0xbf,0xc6,0xd5,0xc0, 0xc6,0xd5,0xbc,0xc3,0xd3,0xbb,0xc2,0xd1,0xbf,0xc4,0xd3,0xbf,0xc4,0xd5,0x2f,0x31, 0x36,0x3a,0x2c,0x36,0x28,0x1d,0x22,0x16,0x0e,0x10,0x12,0x0b,0x0d,0x11,0x0a,0x0c, 0x10,0x0a,0x0b,0x11,0x0a,0x0c,0x11,0x0b,0x0c,0x12,0x0c,0x0d,0x15,0x0e,0x10,0x1a, 0x12,0x15,0x1c,0x13,0x16,0x1e,0x15,0x19,0x1b,0x13,0x16,0x1d,0x17,0x1b,0x7e,0x8a, 0xa9,0x56,0x63,0x8b,0x5c,0x69,0x90,0x33,0x35,0x3b,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x37,0x2b,0x35,0x35,0x27,0x30,0x1f,0x15,0x19,0x19,0x11,0x13,0x19, 0x11,0x13,0x43,0x3c,0x3e,0xf9,0xf8,0xf8,0xce,0xd2,0xda,0x58,0x62,0x83,0x55,0x60, 0x88,0x58,0x64,0x8c,0x57,0x64,0x8c,0x58,0x65,0x8d,0x5b,0x66,0x8e,0x5a,0x65,0x8d, 0x5a,0x65,0x8d,0x5c,0x67,0x90,0x60,0x6d,0x93,0x65,0x72,0x96,0x72,0x7d,0xa0,0x7d, 0x89,0xa9,0x67,0x6e,0x88,0x3b,0x3c,0x52,0x36,0x37,0x4e,0x27,0x2a,0x43,0x1f,0x18, 0x24,0x39,0x2b,0x34,0x32,0x24,0x2c,0x2d,0x21,0x27,0x2d,0x21,0x28,0x2e,0x21,0x28, 0x32,0x25,0x2c,0x5c,0x51,0x58,0xd7,0xda,0xe3,0xa1,0xa7,0xb8,0xb4,0xbb,0xcc,0xbe, 0xc3,0xd3,0xbf,0xc4,0xd5,0xbc,0xc2,0xd2,0xbc,0xc2,0xd3,0xb4,0xbb,0xce,0xa0,0xa8, 0xc0,0x74,0x80,0xa1,0x64,0x6e,0x91,0x5b,0x65,0x86,0x54,0x5e,0x7e,0x4d,0x57,0x79, 0x52,0x5f,0x83,0x59,0x64,0x8a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x76, 0x76,0x76,0xfd,0xfd,0xfd,0xf2,0xf2,0xf2,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0d,0x0a, 0x0d,0x35,0x29,0x32,0x36,0x28,0x30,0x6e,0x65,0x6f,0x61,0x6b,0x8d,0x52,0x4f,0x7a, 0x64,0x4e,0x6c,0x5f,0x48,0x64,0x60,0x4a,0x65,0x5d,0x52,0x79,0x55,0x50,0x79,0x52, 0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7b,0x52,0x4f,0x7b,0x52,0x50,0x7b,0x52,0x50, 0x7b,0x52,0x52,0x7c,0x52,0x52,0x7c,0x52,0x53,0x7d,0x52,0x53,0x7e,0x52,0x54,0x7e, 0x52,0x55,0x80,0x52,0x55,0x81,0x52,0x57,0x82,0x52,0x57,0x82,0x52,0x5c,0x86,0x52, 0x5c,0x86,0x52,0x5d,0x88,0x52,0x5d,0x88,0x52,0x5d,0x88,0x53,0x5e,0x89,0x53,0x5f, 0x89,0x54,0x5f,0x89,0x54,0x5f,0x89,0x55,0x60,0x8a,0x56,0x62,0x8b,0x56,0x62,0x8b, 0x56,0x63,0x8b,0x58,0x64,0x8c,0x57,0x64,0x8c,0x5b,0x66,0x8d,0x5b,0x67,0x90,0x5f, 0x6b,0x91,0x65,0x71,0x96,0x6b,0x75,0x9a,0x74,0x80,0xa0,0x7e,0x89,0xa8,0x8b,0x95, 0xb2,0x98,0xa1,0xb9,0xa3,0xac,0xc2,0xaf,0xb5,0xc9,0xb7,0xbe,0xcf,0xbc,0xc2,0xd2, 0xc0,0xc6,0xd5,0xc2,0xc8,0xd6,0xc2,0xc8,0xd7,0xc0,0xc6,0xd3,0xb8,0xbf,0xcf,0xb3, 0xba,0xcc,0xb0,0xb7,0xca,0x9f,0xa4,0xb7,0x53,0x49,0x56,0x2b,0x20,0x27,0x1f,0x15, 0x1a,0x1d,0x14,0x17,0x1c,0x13,0x16,0x1a,0x11,0x14,0x19,0x11,0x14,0x1a,0x12,0x15, 0x1a,0x12,0x15,0x1b,0x12,0x15,0x1f,0x15,0x19,0x20,0x16,0x1a,0x1f,0x15,0x19,0x2c, 0x26,0x2f,0x7b,0x86,0xa7,0x52,0x5d,0x88,0x52,0x4f,0x7a,0x65,0x6e,0x88,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4a,0x3a,0x48,0x2e,0x22,0x29,0x26,0x1b,0x20, 0x26,0x1b,0x20,0x25,0x1a,0x1f,0x2c,0x22,0x27,0xee,0xed,0xed,0xb5,0xb9,0xc9,0x63, 0x6e,0x95,0x57,0x64,0x8c,0x57,0x64,0x8c,0x58,0x64,0x8d,0x5a,0x65,0x8d,0x5a,0x66, 0x8e,0x5b,0x66,0x8e,0x5b,0x67,0x8e,0x5b,0x66,0x8e,0x5d,0x69,0x91,0x62,0x6e,0x94, 0x69,0x74,0x99,0x76,0x82,0xa3,0x80,0x8a,0xaa,0x4d,0x51,0x69,0x39,0x3a,0x51,0x2f, 0x31,0x48,0x23,0x1e,0x31,0x37,0x2a,0x33,0x36,0x28,0x31,0x2f,0x22,0x29,0x2d,0x21, 0x28,0x2e,0x22,0x29,0x31,0x24,0x2c,0x34,0x26,0x2e,0xd7,0xd6,0xd9,0xbc,0xc1,0xcf, 0xa3,0xaa,0xbe,0xba,0xc0,0xd1,0xb8,0xbe,0xd0,0xbe,0xc3,0xd3,0xb8,0xbe,0xd0,0xb5, 0xbc,0xcf,0xb0,0xb8,0xcb,0x77,0x82,0xa1,0x66,0x72,0x93,0x5c,0x67,0x89,0x55,0x5f, 0x81,0x50,0x59,0x7c,0x6d,0x7c,0xac,0x0e,0x10,0x12,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xa5,0xa5,0xa5,0xff,0xff,0xff,0xb0,0xb0,0xb0,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x03,0x02,0x03,0x27,0x1e,0x25,0x36,0x28,0x31,0x3e,0x31, 0x3a,0x66,0x66,0x7a,0x54,0x5e,0x88,0x60,0x53,0x77,0x64,0x4c,0x6a,0x60,0x48,0x64, 0x64,0x4d,0x6a,0x60,0x53,0x77,0x54,0x50,0x79,0x52,0x4f,0x7a,0x52,0x4f,0x7b,0x52, 0x4f,0x7b,0x52,0x50,0x7b,0x52,0x50,0x7b,0x52,0x52,0x7c,0x52,0x52,0x7c,0x52,0x52, 0x7d,0x52,0x53,0x7d,0x52,0x53,0x7e,0x52,0x54,0x7e,0x52,0x55,0x80,0x52,0x55,0x81, 0x52,0x5c,0x86,0x52,0x5c,0x86,0x52,0x5c,0x86,0x52,0x5d,0x88,0x52,0x5d,0x88,0x53, 0x5e,0x88,0x53,0x5f,0x89,0x54,0x5f,0x89,0x54,0x5f,0x89,0x56,0x62,0x8b,0x56,0x62, 0x8b,0x56,0x63,0x8b,0x57,0x63,0x8c,0x58,0x64,0x8d,0x57,0x64,0x8c,0x5b,0x66,0x8d, 0x5b,0x66,0x8e,0x5e,0x6a,0x91,0x65,0x6f,0x95,0x6a,0x76,0x9a,0x73,0x7e,0xa1,0x81, 0x8b,0xaa,0x8d,0x96,0xb1,0x9c,0xa4,0xbc,0xa5,0xad,0xc3,0xb1,0xb8,0xca,0xb9,0xbf, 0xcf,0xbc,0xc2,0xd2,0xbf,0xc4,0xd5,0xc2,0xc7,0xd7,0xc2,0xc8,0xd7,0xc1,0xc7,0xd6, 0xc0,0xc6,0xd5,0xba,0xc0,0xd0,0xac,0xb4,0xc8,0xa1,0xa9,0xc0,0x9a,0xa2,0xbb,0x92, 0x9b,0xb7,0x6d,0x71,0x87,0x37,0x2f,0x39,0x29,0x1e,0x24,0x26,0x1b,0x20,0x23,0x19, 0x1d,0x22,0x18,0x1d,0x24,0x19,0x1e,0x25,0x1a,0x1f,0x27,0x1c,0x21,0x2a,0x1e,0x24, 0x29,0x1d,0x23,0x6b,0x72,0x8e,0x64,0x6f,0x95,0x52,0x50,0x7b,0x52,0x50,0x7b,0x55, 0x60,0x8a,0x3b,0x3d,0x43,0x00,0x00,0x00,0x00,0x00,0x00,0x5e,0x4b,0x5d,0x36,0x28, 0x31,0x2a,0x1e,0x24,0x2b,0x1f,0x25,0x2a,0x1f,0x25,0x2b,0x1f,0x25,0xa9,0xa4,0xa6, 0xab,0xb3,0xc8,0x64,0x71,0x96,0x57,0x64,0x8c,0x57,0x64,0x8c,0x58,0x64,0x8c,0x58, 0x64,0x8c,0x5a,0x66,0x8e,0x5c,0x67,0x90,0x5b,0x66,0x8e,0x5c,0x67,0x90,0x5b,0x66, 0x8e,0x5e,0x6a,0x91,0x63,0x6e,0x95,0x6b,0x76,0x9b,0x74,0x80,0xa2,0x7e,0x8a,0xa9, 0x43,0x44,0x5b,0x36,0x37,0x4f,0x28,0x2a,0x42,0x23,0x1a,0x22,0x3a,0x2b,0x35,0x33, 0x26,0x2e,0x2f,0x22,0x29,0x2f,0x23,0x2a,0x30,0x23,0x2a,0x34,0x27,0x2f,0x45,0x37, 0x40,0xe0,0xe2,0xe9,0xa5,0xab,0xbc,0xb3,0xba,0xcc,0xb9,0xbf,0xd0,0xb9,0xbf,0xd1, 0xb8,0xbf,0xd0,0xb8,0xbf,0xd0,0xb1,0xb8,0xca,0x92,0x9b,0xb3,0x6a,0x75,0x95,0x63, 0x6d,0x8d,0x5b,0x65,0x86,0x5f,0x6a,0x90,0x49,0x54,0x69,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcc,0xcc,0xcc,0xfd,0xfd,0xfd,0x60,0x60,0x60, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x15, 0x10,0x13,0x35,0x27,0x30,0x34,0x27,0x2f,0x4d,0x43,0x4d,0x60,0x66,0x85,0x52,0x50, 0x7c,0x64,0x52,0x72,0x62,0x4a,0x66,0x62,0x4a,0x66,0x64,0x52,0x72,0x58,0x50,0x79, 0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7b,0x52,0x50,0x7b,0x52,0x50,0x7b,0x52, 0x50,0x7b,0x52,0x52,0x7c,0x52,0x52,0x7c,0x52,0x53,0x7d,0x52,0x54,0x7e,0x52,0x54, 0x7e,0x52,0x55,0x80,0x52,0x58,0x84,0x52,0x5b,0x85,0x52,0x5b,0x85,0x52,0x5c,0x86, 0x52,0x5d,0x88,0x53,0x5e,0x88,0x53,0x5e,0x88,0x53,0x5f,0x89,0x53,0x5f,0x89,0x55, 0x60,0x8a,0x55,0x60,0x8a,0x55,0x62,0x8b,0x56,0x63,0x8b,0x56,0x63,0x8b,0x57,0x64, 0x8c,0x5a,0x66,0x8e,0x5b,0x67,0x8e,0x60,0x6c,0x91,0x64,0x6e,0x94,0x6c,0x75,0x9b, 0x75,0x80,0xa2,0x82,0x8c,0xab,0x90,0x98,0xb3,0x9c,0xa5,0xbc,0xa9,0xb0,0xc4,0xb2, 0xb9,0xca,0xb8,0xbe,0xcf,0xbe,0xc3,0xd2,0xc0,0xc6,0xd5,0xc1,0xc7,0xd6,0xc2,0xc8, 0xd7,0xc1,0xc7,0xd6,0xbf,0xc4,0xd5,0xba,0xc0,0xd0,0xb3,0xb9,0xcb,0xa5,0xad,0xc2, 0x95,0x9d,0xb7,0x8b,0x94,0xb0,0x88,0x90,0xaf,0x84,0x90,0xac,0x7c,0x88,0xa8,0x63, 0x69,0x85,0x43,0x3e,0x4e,0x35,0x2c,0x37,0x31,0x26,0x2e,0x2d,0x22,0x2a,0x2a,0x1f, 0x26,0x2d,0x23,0x2b,0x7d,0x84,0x9e,0x75,0x81,0xa2,0x53,0x5e,0x88,0x52,0x4f,0x7b, 0x55,0x60,0x8a,0x52,0x4f,0x7b,0x6b,0x73,0x8e,0x03,0x03,0x03,0x00,0x00,0x00,0x67, 0x53,0x68,0x3d,0x2e,0x38,0x2c,0x20,0x26,0x2d,0x21,0x27,0x33,0x26,0x2e,0x3b,0x2c, 0x36,0x71,0x64,0x6e,0xaf,0xb5,0xca,0x6a,0x75,0x9a,0x5a,0x65,0x8e,0x57,0x64,0x8c, 0x58,0x64,0x8c,0x58,0x64,0x8c,0x5a,0x65,0x8d,0x5a,0x65,0x8d,0x5a,0x66,0x8e,0x5b, 0x66,0x8e,0x5b,0x66,0x8e,0x5b,0x66,0x8e,0x5d,0x6a,0x91,0x63,0x6f,0x95,0x69,0x75, 0x9a,0x79,0x83,0xa4,0x75,0x80,0x9d,0x39,0x3a,0x51,0x30,0x32,0x4a,0x22,0x1c,0x2a, 0x3c,0x2d,0x37,0x36,0x28,0x30,0x30,0x23,0x2a,0x2f,0x22,0x29,0x32,0x24,0x2c,0x35, 0x27,0x30,0x39,0x2b,0x34,0xbc,0xb7,0xbc,0xbb,0xc1,0xcf,0xab,0xb2,0xc6,0xb7,0xbe, 0xcf,0xba,0xc1,0xd2,0xb9,0xc0,0xd1,0xb7,0xbe,0xcf,0xad,0xb4,0xc8,0xa7,0xad,0xc2, 0x6f,0x7b,0x9a,0x65,0x6f,0x91,0x5e,0x69,0x8b,0x66,0x73,0x9c,0x02,0x03,0x03,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe4,0xe4,0xe4,0xff,0xff, 0xff,0x27,0x27,0x27,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x03,0x03,0x26,0x1d,0x23,0x33,0x26,0x2e,0x34, 0x26,0x2e,0x59,0x55,0x66,0x56,0x60,0x88,0x52,0x4f,0x7a,0x64,0x53,0x74,0x62,0x4a, 0x66,0x60,0x48,0x65,0x64,0x53,0x75,0x54,0x50,0x79,0x52,0x4f,0x7a,0x52,0x4f,0x7b, 0x52,0x4f,0x7b,0x52,0x50,0x7b,0x52,0x52,0x7c,0x52,0x52,0x7c,0x52,0x52,0x7c,0x52, 0x53,0x7d,0x52,0x53,0x7d,0x52,0x54,0x7e,0x52,0x55,0x80,0x52,0x57,0x83,0x52,0x58, 0x84,0x52,0x5c,0x86,0x52,0x5c,0x86,0x52,0x5d,0x88,0x52,0x5d,0x88,0x53,0x5f,0x89, 0x54,0x5f,0x89,0x54,0x5f,0x89,0x54,0x60,0x8a,0x56,0x62,0x8b,0x55,0x62,0x8b,0x56, 0x63,0x8b,0x57,0x64,0x8c,0x5a,0x65,0x8e,0x5c,0x69,0x90,0x60,0x6c,0x91,0x66,0x71, 0x96,0x6c,0x76,0x9a,0x75,0x82,0xa2,0x84,0x8e,0xab,0x90,0x9a,0xb4,0xa0,0xa7,0xbe, 0xaa,0xb1,0xc6,0xb3,0xb9,0xcb,0xb9,0xbf,0xcf,0xbc,0xc2,0xd2,0xc0,0xc6,0xd3,0xc2, 0xc8,0xd7,0xc2,0xc8,0xd7,0xc2,0xc8,0xd7,0xbe,0xc3,0xd3,0xb9,0xc0,0xd0,0xb0,0xb7, 0xca,0xa8,0xad,0xc3,0x9c,0xa4,0xbb,0x8b,0x94,0xb0,0x79,0x84,0xa3,0x6d,0x71,0x95, 0x62,0x6c,0x92,0x65,0x6e,0x95,0x67,0x73,0x98,0x62,0x6e,0x94,0x77,0x82,0xa3,0x7c, 0x86,0xa7,0x79,0x84,0xa5,0x89,0x93,0xb0,0x75,0x81,0xa2,0x52,0x52,0x7d,0x53,0x4f, 0x7a,0x54,0x60,0x8a,0x5b,0x67,0x8e,0x52,0x52,0x7d,0x5b,0x66,0x8e,0x43,0x46,0x4d, 0x00,0x00,0x00,0x60,0x54,0x6d,0x53,0x41,0x51,0x34,0x27,0x2f,0x38,0x2a,0x33,0x46, 0x36,0x42,0x5c,0x49,0x5a,0x5e,0x4b,0x5d,0xa8,0xaa,0xb9,0x73,0x7e,0xa1,0x5c,0x67, 0x90,0x57,0x64,0x8c,0x58,0x64,0x8d,0x5a,0x65,0x8d,0x5a,0x65,0x8d,0x5a,0x65,0x8d, 0x5a,0x66,0x8e,0x5a,0x65,0x8d,0x5a,0x65,0x8d,0x5b,0x66,0x8e,0x5b,0x67,0x90,0x5e, 0x6b,0x92,0x65,0x72,0x98,0x71,0x7c,0x9f,0x7a,0x85,0xa7,0x5d,0x62,0x7c,0x36,0x37, 0x4e,0x27,0x26,0x3a,0x3c,0x2d,0x37,0x38,0x29,0x32,0x34,0x27,0x2f,0x31,0x24,0x2b, 0x33,0x26,0x2e,0x37,0x29,0x32,0x39,0x2b,0x34,0x3f,0x2f,0x3a,0xdd,0xdf,0xe6,0xb0, 0xb5,0xc6,0xb2,0xb9,0xcc,0xb5,0xbb,0xce,0xbb,0xc1,0xd2,0xb7,0xbc,0xcf,0xb2,0xb9, 0xcb,0xa8,0xaf,0xc3,0x89,0x92,0xad,0x67,0x73,0x94,0x61,0x6d,0x90,0x2d,0x32,0x43, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf4, 0xf4,0xf4,0xff,0xff,0xff,0x0a,0x0a,0x0a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x12,0x0e,0x11,0x2e,0x22,0x2a,0x32,0x25,0x2d,0x3e,0x32,0x3c,0x5d,0x60,0x78,0x53, 0x5e,0x88,0x58,0x50,0x79,0x64,0x4c,0x6a,0x5e,0x46,0x62,0x62,0x4a,0x66,0x64,0x53, 0x76,0x52,0x4f,0x7a,0x52,0x4f,0x7b,0x52,0x4f,0x7b,0x52,0x50,0x7b,0x52,0x50,0x7b, 0x52,0x52,0x7c,0x52,0x52,0x7c,0x52,0x52,0x7d,0x52,0x53,0x7d,0x52,0x53,0x7e,0x52, 0x56,0x82,0x52,0x57,0x82,0x52,0x5a,0x84,0x52,0x5a,0x84,0x52,0x5c,0x86,0x52,0x5d, 0x86,0x53,0x5e,0x88,0x53,0x5f,0x89,0x53,0x5f,0x89,0x54,0x5f,0x89,0x55,0x60,0x8a, 0x55,0x62,0x8b,0x56,0x62,0x8b,0x57,0x64,0x8c,0x58,0x65,0x8d,0x5b,0x67,0x8e,0x5f, 0x6b,0x90,0x64,0x6f,0x96,0x6d,0x79,0x9b,0x77,0x82,0xa3,0x85,0x8d,0xab,0x92,0x9b, 0xb5,0x9f,0xa7,0xbe,0xaa,0xb1,0xc7,0xb3,0xb9,0xcb,0xb9,0xbf,0xd0,0xbc,0xc2,0xd2, 0xbf,0xc4,0xd3,0xc1,0xc7,0xd5,0xc2,0xc8,0xd7,0xc0,0xc6,0xd6,0xbc,0xc2,0xd1,0xb5, 0xbe,0xce,0xaf,0xb5,0xc8,0xa5,0xad,0xc3,0x9b,0xa3,0xbb,0x90,0x99,0xb3,0x83,0x8e, 0xab,0x77,0x82,0xa3,0x63,0x6d,0x94,0x5d,0x5e,0x84,0x56,0x57,0x82,0x54,0x54,0x7e, 0x53,0x52,0x7d,0x52,0x57,0x82,0x52,0x4f,0x7a,0x55,0x50,0x79,0x5e,0x52,0x79,0x52, 0x4f,0x7a,0x55,0x60,0x8a,0x5a,0x65,0x8e,0x5c,0x67,0x90,0x54,0x60,0x8a,0x52,0x50, 0x7b,0x6b,0x74,0x8e,0x03,0x03,0x03,0x2b,0x2e,0x35,0x75,0x68,0x88,0x4b,0x3a,0x47, 0x51,0x3f,0x4e,0x60,0x4c,0x5f,0x68,0x54,0x69,0x5f,0x4c,0x5e,0x87,0x80,0x8b,0x7e, 0x8a,0xa9,0x5f,0x6b,0x92,0x57,0x64,0x8c,0x5a,0x65,0x8d,0x5a,0x65,0x8d,0x58,0x65, 0x8d,0x5a,0x65,0x8d,0x5b,0x66,0x8e,0x5b,0x66,0x8e,0x5a,0x65,0x8d,0x5b,0x67,0x90, 0x5a,0x66,0x8e,0x5c,0x69,0x90,0x5f,0x6b,0x92,0x65,0x72,0x98,0x72,0x7d,0xa0,0x7c, 0x88,0xa8,0x3d,0x3f,0x55,0x31,0x32,0x4a,0x2b,0x21,0x2c,0x3c,0x2d,0x37,0x38,0x2a, 0x33,0x35,0x27,0x2f,0x34,0x27,0x2f,0x37,0x29,0x32,0x3c,0x2d,0x37,0x3e,0x2f,0x3a, 0xa2,0x9a,0xa1,0xc1,0xc6,0xd2,0xac,0xb2,0xc6,0xb5,0xbc,0xcf,0xb9,0xbf,0xd0,0xb8, 0xbe,0xd0,0xb2,0xb9,0xcb,0xa9,0xb0,0xc4,0x9f,0xa7,0xbb,0x6d,0x78,0x99,0x4a,0x53, 0x6d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x0b,0x0b,0x0b,0xfa,0xfa,0xfa,0xcf,0xcf,0xcf,0x02,0x02,0x02,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x02,0x03,0x22,0x19,0x1f,0x31,0x25,0x2c, 0x31,0x24,0x2c,0x51,0x48,0x52,0x5c,0x63,0x82,0x52,0x5a,0x84,0x5f,0x53,0x79,0x64, 0x4e,0x6c,0x5f,0x48,0x64,0x64,0x4c,0x69,0x5c,0x52,0x79,0x52,0x4f,0x7a,0x52,0x50, 0x7b,0x52,0x50,0x7b,0x52,0x50,0x7b,0x52,0x52,0x7c,0x52,0x52,0x7d,0x52,0x53,0x7d, 0x52,0x53,0x7e,0x52,0x55,0x80,0x52,0x57,0x82,0x52,0x57,0x83,0x52,0x5a,0x84,0x52, 0x5c,0x85,0x52,0x5d,0x86,0x52,0x5d,0x86,0x53,0x5e,0x88,0x54,0x5f,0x89,0x54,0x5f, 0x89,0x54,0x5f,0x89,0x55,0x60,0x8a,0x56,0x62,0x8b,0x56,0x62,0x8b,0x58,0x65,0x8d, 0x5b,0x66,0x8e,0x5e,0x6a,0x90,0x64,0x6f,0x95,0x6d,0x79,0x9b,0x77,0x81,0xa3,0x85, 0x8e,0xab,0x92,0x9a,0xb5,0xa0,0xa8,0xbf,0xaa,0xb2,0xc7,0xb2,0xba,0xcc,0xb8,0xbf, 0xd0,0xba,0xc1,0xd1,0xbf,0xc4,0xd3,0xc1,0xc7,0xd5,0xc2,0xc8,0xd6,0xc0,0xc6,0xd5, 0xbb,0xc1,0xd1,0xb4,0xba,0xcc,0xac,0xb3,0xc7,0xa3,0xa9,0xc0,0x99,0xa1,0xba,0x8e, 0x95,0xb2,0x82,0x8c,0xac,0x7a,0x83,0xa4,0x71,0x7c,0x9f,0x6a,0x74,0x99,0x67,0x74, 0x99,0x63,0x6e,0x95,0x5e,0x6a,0x92,0x5b,0x67,0x8e,0x56,0x62,0x8b,0x5a,0x66,0x8e, 0x5b,0x66,0x8e,0x5b,0x66,0x8e,0x5b,0x66,0x8e,0x5a,0x65,0x8d,0x5a,0x65,0x8e,0x5a, 0x65,0x8d,0x55,0x50,0x79,0x55,0x60,0x8a,0x3b,0x3d,0x43,0x00,0x00,0x00,0xa9,0xae, 0xbd,0x6a,0x56,0x6b,0x56,0x44,0x54,0x66,0x51,0x66,0x65,0x51,0x65,0x60,0x4c,0x5f, 0x55,0x47,0x53,0x93,0x9c,0xb6,0x64,0x71,0x96,0x5a,0x65,0x8d,0x5a,0x65,0x8d,0x57, 0x63,0x8c,0x58,0x65,0x8d,0x5a,0x65,0x8e,0x5a,0x66,0x8e,0x5b,0x66,0x8e,0x58,0x64, 0x8d,0x5a,0x65,0x8d,0x5a,0x65,0x8e,0x5b,0x67,0x90,0x5d,0x6a,0x91,0x60,0x6c,0x93, 0x67,0x73,0x99,0x72,0x7d,0xa1,0x6f,0x77,0x97,0x3a,0x3b,0x52,0x26,0x22,0x31,0x41, 0x31,0x3d,0x3c,0x2e,0x38,0x38,0x2a,0x33,0x36,0x28,0x31,0x39,0x2b,0x34,0x3c,0x2d, 0x37,0x41,0x31,0x3c,0x45,0x35,0x41,0xd7,0xd9,0xe0,0xaf,0xb5,0xc4,0xb5,0xbb,0xce, 0xb7,0xbe,0xd0,0xba,0xc0,0xd1,0xb3,0xba,0xcc,0xac,0xb3,0xc7,0xa3,0xab,0xc1,0x74, 0x7d,0x97,0x10,0x12,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x4a,0x4a,0x4a,0xfc,0xfc,0xfc,0x8d,0x8d,0x8d,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x0e,0x0b,0x0e,0x2b,0x20,0x27,0x31,0x24,0x2b,0x31,0x24,0x2c,0x4d,0x48,0x57, 0x57,0x60,0x83,0x52,0x55,0x81,0x5d,0x52,0x79,0x64,0x4d,0x6b,0x5e,0x46,0x62,0x64, 0x4c,0x6a,0x53,0x50,0x79,0x52,0x4f,0x7b,0x52,0x50,0x7b,0x52,0x52,0x7c,0x52,0x52, 0x7c,0x52,0x52,0x7d,0x52,0x53,0x7d,0x52,0x54,0x80,0x52,0x55,0x81,0x52,0x57,0x82, 0x52,0x57,0x82,0x52,0x57,0x83,0x52,0x5b,0x85,0x52,0x5c,0x86,0x52,0x5d,0x88,0x53, 0x5d,0x88,0x53,0x5e,0x89,0x54,0x5f,0x89,0x54,0x5f,0x89,0x55,0x62,0x8a,0x57,0x63, 0x8b,0x57,0x64,0x8c,0x5a,0x65,0x8e,0x5f,0x6b,0x91,0x65,0x6f,0x95,0x6d,0x76,0x9c, 0x77,0x83,0xa3,0x84,0x8e,0xac,0x93,0x9c,0xb5,0x9f,0xa8,0xbf,0xa9,0xb0,0xc6,0xb2, 0xb8,0xcc,0xb8,0xbf,0xd0,0xbc,0xc1,0xd2,0xbe,0xc3,0xd3,0xc0,0xc6,0xd5,0xc2,0xc8, 0xd6,0xbe,0xc3,0xd3,0xb8,0xbf,0xcf,0xb1,0xb8,0xcb,0xab,0xb2,0xc6,0x9f,0xa8,0xbe, 0x96,0xa0,0xb8,0x89,0x93,0xaf,0x81,0x8c,0xaa,0x76,0x83,0xa4,0x6f,0x7b,0x9f,0x6c, 0x77,0x9b,0x67,0x73,0x99,0x64,0x6f,0x96,0x63,0x6e,0x94,0x62,0x6d,0x94,0x5f,0x6b, 0x92,0x5e,0x6a,0x91,0x5c,0x69,0x90,0x5b,0x66,0x8e,0x58,0x64,0x8c,0x58,0x64,0x8c, 0x58,0x64,0x8c,0x5e,0x6a,0x92,0x52,0x5b,0x85,0x54,0x50,0x79,0x65,0x6e,0x86,0x00, 0x00,0x00,0x5c,0x5c,0x5c,0x76,0x68,0x88,0x51,0x3f,0x4e,0x64,0x50,0x63,0x63,0x4f, 0x63,0x5f,0x4c,0x5e,0x4d,0x3c,0x4a,0x8c,0x8c,0x9c,0x72,0x7d,0xa0,0x5a,0x65,0x8d, 0x56,0x62,0x8b,0x58,0x65,0x8d,0x57,0x64,0x8c,0x58,0x64,0x8c,0x58,0x64,0x8c,0x58, 0x64,0x8d,0x5a,0x65,0x8e,0x57,0x64,0x8c,0x5a,0x66,0x8e,0x5b,0x67,0x90,0x5b,0x66, 0x8e,0x5c,0x69,0x90,0x62,0x6d,0x94,0x6a,0x76,0x9a,0x76,0x82,0xa3,0x40,0x42,0x58, 0x31,0x30,0x43,0x47,0x36,0x43,0x41,0x31,0x3c,0x3a,0x2b,0x35,0x39,0x2a,0x34,0x3a, 0x2c,0x35,0x3e,0x2f,0x39,0x43,0x33,0x3e,0x46,0x36,0x42,0x8a,0x7f,0x88,0xbc,0xc2, 0xd0,0xaf,0xb4,0xc8,0xb5,0xbc,0xcf,0xb7,0xbc,0xcf,0xb2,0xb9,0xcc,0xb0,0xb7,0xca, 0xa8,0xb0,0xc4,0x88,0x8f,0xa3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x88,0x88,0x88,0xfd,0xfd,0xfd,0x52,0x52, 0x52,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1b,0x14,0x19,0x2e,0x21, 0x28,0x31,0x24,0x2b,0x33,0x26,0x2e,0x56,0x52,0x63,0x5c,0x67,0x8c,0x52,0x57,0x82, 0x55,0x50,0x79,0x64,0x53,0x75,0x5b,0x43,0x5d,0x64,0x50,0x6f,0x52,0x4f,0x7a,0x52, 0x4f,0x7b,0x52,0x50,0x7b,0x52,0x52,0x7c,0x52,0x52,0x7c,0x52,0x53,0x7d,0x52,0x53, 0x7d,0x52,0x54,0x80,0x52,0x56,0x82,0x52,0x57,0x83,0x52,0x58,0x83,0x52,0x5d,0x86, 0x52,0x5d,0x86,0x53,0x5e,0x88,0x53,0x5f,0x89,0x54,0x5f,0x89,0x54,0x5f,0x89,0x55, 0x60,0x8a,0x57,0x63,0x8b,0x57,0x63,0x8c,0x58,0x65,0x8d,0x5f,0x6b,0x91,0x64,0x71, 0x95,0x6c,0x76,0x9b,0x77,0x82,0xa2,0x83,0x8e,0xac,0x91,0x9a,0xb3,0x9d,0xa5,0xbe, 0xa8,0xb0,0xc4,0xb1,0xb8,0xca,0xb7,0xbe,0xcf,0xbc,0xc1,0xd1,0xbc,0xc3,0xd1,0xbf, 0xc3,0xd3,0xc0,0xc6,0xd5,0xba,0xc1,0xd1,0xb4,0xbc,0xce,0xaf,0xb5,0xc9,0xa7,0xad, 0xc3,0x9c,0xa7,0xbc,0x92,0x9b,0xb5,0x88,0x91,0xaf,0x7e,0x89,0xa7,0x76,0x82,0xa4, 0x6f,0x7b,0x9d,0x6c,0x76,0x9b,0x66,0x73,0x99,0x64,0x6f,0x96,0x63,0x6e,0x95,0x60, 0x6d,0x93,0x5f,0x6b,0x92,0x5d,0x6a,0x91,0x5d,0x69,0x91,0x5a,0x66,0x8e,0x58,0x64, 0x8c,0x56,0x63,0x8b,0x56,0x62,0x8b,0x5c,0x69,0x90,0x57,0x64,0x8c,0x57,0x50,0x79, 0x58,0x64,0x8c,0x34,0x36,0x3a,0x00,0x00,0x00,0x70,0x79,0x94,0x52,0x40,0x4f,0x5d, 0x49,0x5b,0x60,0x4c,0x5f,0x5f,0x4c,0x5e,0x54,0x42,0x51,0x6c,0x64,0x6d,0x84,0x8e, 0xad,0x5d,0x69,0x91,0x57,0x64,0x8c,0x58,0x64,0x8c,0x58,0x64,0x8c,0x58,0x64,0x8c, 0x58,0x65,0x8d,0x58,0x64,0x8d,0x58,0x65,0x8d,0x57,0x64,0x8c,0x58,0x64,0x8d,0x5a, 0x65,0x8d,0x5b,0x66,0x8e,0x5b,0x67,0x8e,0x5f,0x6c,0x93,0x64,0x71,0x96,0x71,0x7c, 0xa0,0x76,0x80,0xa1,0x37,0x39,0x4f,0x36,0x2a,0x37,0x42,0x33,0x3e,0x3e,0x2f,0x39, 0x3d,0x2e,0x38,0x3b,0x2d,0x36,0x3f,0x30,0x3a,0x44,0x34,0x40,0x49,0x38,0x45,0x4c, 0x3b,0x48,0xce,0xd0,0xd9,0xab,0xb2,0xc3,0xb4,0xbb,0xce,0xb4,0xbb,0xce,0xb8,0xbe, 0xd0,0xb1,0xb8,0xcb,0xac,0xb3,0xc8,0xa9,0xb0,0xc6,0x2b,0x2e,0x39,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xad,0xad,0xad,0xff, 0xff,0xff,0x2a,0x2a,0x2a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x08,0x06,0x07,0x23,0x19,0x1f,0x2f,0x22,0x29,0x30,0x23,0x2a,0x37,0x2b, 0x33,0x5e,0x5c,0x6f,0x5e,0x6a,0x8f,0x52,0x5d,0x88,0x52,0x53,0x7e,0x64,0x52,0x72, 0x5e,0x46,0x60,0x64,0x53,0x75,0x52,0x4f,0x7b,0x52,0x50,0x7b,0x52,0x52,0x7c,0x52, 0x52,0x7c,0x52,0x52,0x7c,0x52,0x53,0x7e,0x52,0x55,0x81,0x52,0x55,0x81,0x52,0x57, 0x82,0x52,0x58,0x83,0x52,0x5d,0x86,0x52,0x5d,0x86,0x52,0x5d,0x88,0x53,0x5e,0x89, 0x54,0x5f,0x89,0x54,0x5f,0x89,0x56,0x62,0x8a,0x57,0x63,0x8c,0x58,0x65,0x8d,0x5e, 0x6a,0x91,0x63,0x6e,0x94,0x6c,0x77,0x9b,0x76,0x80,0xa2,0x82,0x8b,0xa9,0x90,0x98, 0xb3,0x9a,0xa3,0xbc,0xa5,0xad,0xc4,0xaf,0xb7,0xc8,0xb5,0xbc,0xce,0xba,0xc1,0xd0, 0xbc,0xc2,0xd2,0xbe,0xc2,0xd3,0xbb,0xc2,0xd1,0xb7,0xbe,0xcf,0xb3,0xb9,0xcc,0xab, 0xb2,0xc8,0xa3,0xab,0xc1,0x99,0xa1,0xba,0x8e,0x98,0xb3,0x83,0x8e,0xac,0x7b,0x85, 0xa5,0x75,0x81,0xa1,0x6d,0x79,0x9d,0x6a,0x75,0x9a,0x66,0x73,0x98,0x62,0x6e,0x95, 0x62,0x6d,0x94,0x60,0x6c,0x93,0x5f,0x6b,0x92,0x5e,0x6a,0x91,0x5b,0x67,0x90,0x5a, 0x65,0x8d,0x57,0x64,0x8c,0x56,0x62,0x8b,0x56,0x62,0x8b,0x58,0x64,0x8d,0x5c,0x69, 0x90,0x52,0x52,0x7d,0x5a,0x52,0x79,0x63,0x6b,0x82,0x00,0x00,0x00,0x57,0x57,0x58, 0x67,0x53,0x67,0x55,0x43,0x53,0x5e,0x4b,0x5d,0x5e,0x4b,0x5d,0x5a,0x47,0x58,0x45, 0x35,0x40,0x96,0x9d,0xb3,0x64,0x6f,0x95,0x5a,0x65,0x8d,0x58,0x64,0x8c,0x57,0x64, 0x8c,0x57,0x63,0x8c,0x58,0x64,0x8d,0x57,0x64,0x8c,0x58,0x65,0x8d,0x58,0x64,0x8d, 0x58,0x64,0x8d,0x58,0x64,0x8c,0x5b,0x66,0x8e,0x5a,0x66,0x8e,0x5a,0x66,0x8e,0x60, 0x6c,0x93,0x66,0x72,0x98,0x74,0x80,0xa2,0x44,0x48,0x61,0x2c,0x27,0x37,0x4a,0x39, 0x46,0x43,0x33,0x3f,0x3e,0x2f,0x39,0x3d,0x2e,0x38,0x41,0x32,0x3d,0x46,0x36,0x42, 0x4c,0x3b,0x49,0x4e,0x3d,0x4b,0x76,0x67,0x73,0xb5,0xbb,0xcb,0xab,0xb2,0xc6,0xb1, 0xb8,0xcb,0xb1,0xb8,0xcb,0xb3,0xba,0xcc,0xb1,0xb8,0xcb,0xaa,0xb2,0xc7,0x76,0x7d, 0x90,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xce,0xce,0xce,0xfd,0xfd,0xfd,0x0e,0x0e,0x0e,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x0d,0x10,0x29, 0x1e,0x23,0x30,0x23,0x2a,0x2f,0x22,0x29,0x3c,0x32,0x3a,0x5e,0x60,0x75,0x5b,0x66, 0x8f,0x53,0x5e,0x88,0x52,0x50,0x7b,0x64,0x4f,0x6d,0x62,0x4a,0x65,0x60,0x53,0x77, 0x52,0x4f,0x7b,0x52,0x50,0x7b,0x52,0x52,0x7d,0x52,0x53,0x7e,0x52,0x54,0x7e,0x52, 0x53,0x7e,0x52,0x56,0x81,0x52,0x58,0x83,0x52,0x5a,0x84,0x52,0x5d,0x88,0x52,0x5d, 0x86,0x53,0x5e,0x88,0x53,0x5f,0x89,0x53,0x5f,0x89,0x55,0x60,0x89,0x56,0x62,0x8b, 0x58,0x64,0x8d,0x5e,0x6a,0x91,0x62,0x6d,0x94,0x6b,0x75,0x9a,0x74,0x7e,0xa1,0x7e, 0x89,0xa9,0x8d,0x98,0xb3,0x98,0xa1,0xba,0xa4,0xab,0xc1,0xab,0xb3,0xc7,0xb3,0xba, 0xcb,0xb7,0xbe,0xcf,0xb9,0xbf,0xd1,0xba,0xc0,0xd1,0xb8,0xbf,0xcf,0xb4,0xbb,0xce, 0xaf,0xb7,0xca,0xa7,0xb0,0xc4,0x9f,0xa7,0xbc,0x94,0x9d,0xb8,0x8a,0x94,0xb0,0x82, 0x8b,0xaa,0x79,0x84,0xa4,0x71,0x7c,0x9f,0x6d,0x7a,0x9d,0x6a,0x75,0x9a,0x66,0x72, 0x96,0x63,0x6f,0x94,0x60,0x6d,0x93,0x60,0x6c,0x93,0x5e,0x6b,0x92,0x5c,0x69,0x90, 0x5b,0x67,0x90,0x5a,0x66,0x8e,0x57,0x64,0x8c,0x57,0x63,0x8c,0x55,0x60,0x8a,0x55, 0x60,0x8a,0x5d,0x69,0x91,0x57,0x63,0x8b,0x54,0x50,0x79,0x5a,0x66,0x8e,0x25,0x26, 0x28,0x00,0x00,0x00,0x61,0x63,0x86,0x56,0x44,0x54,0x5d,0x49,0x5b,0x5e,0x4b,0x5d, 0x5d,0x49,0x5b,0x4c,0x3b,0x49,0x86,0x84,0x8e,0x72,0x7d,0xa0,0x5a,0x66,0x8e,0x5a, 0x65,0x8d,0x58,0x65,0x8d,0x56,0x63,0x8b,0x58,0x64,0x8d,0x57,0x64,0x8c,0x57,0x64, 0x8c,0x57,0x64,0x8c,0x57,0x64,0x8c,0x58,0x65,0x8d,0x58,0x65,0x8d,0x5a,0x65,0x8d, 0x58,0x65,0x8d,0x5c,0x67,0x90,0x62,0x6e,0x94,0x6d,0x79,0x9c,0x77,0x83,0xa4,0x32, 0x31,0x45,0x4c,0x3c,0x4a,0x48,0x37,0x44,0x43,0x33,0x3e,0x42,0x32,0x3d,0x42,0x33, 0x3e,0x49,0x38,0x45,0x4d,0x3c,0x4a,0x52,0x40,0x4f,0x54,0x41,0x51,0xc5,0xc5,0xcf, 0xa9,0xb0,0xc1,0xb2,0xb9,0xcc,0xb0,0xb7,0xca,0xb3,0xba,0xce,0xb1,0xb8,0xcb,0xac, 0xb4,0xc8,0xa7,0xaf,0xc4,0x1b,0x1e,0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xdd,0xdd,0xdd,0xff,0xff,0xff,0x03,0x03,0x03,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x03,0x02,0x03,0x1b,0x13,0x18,0x2e,0x21,0x28,0x30,0x23,0x2a,0x30, 0x23,0x2a,0x41,0x37,0x40,0x5d,0x60,0x7b,0x5b,0x67,0x8e,0x52,0x5d,0x88,0x52,0x4f, 0x7a,0x64,0x52,0x72,0x64,0x53,0x75,0x56,0x50,0x79,0x52,0x4f,0x7a,0x52,0x52,0x7d, 0x52,0x52,0x7d,0x52,0x54,0x7e,0x52,0x54,0x80,0x52,0x55,0x81,0x52,0x58,0x83,0x52, 0x5b,0x85,0x52,0x5c,0x86,0x52,0x5d,0x88,0x53,0x5e,0x88,0x53,0x5f,0x89,0x55,0x60, 0x89,0x55,0x60,0x8a,0x57,0x64,0x8d,0x5d,0x69,0x90,0x62,0x6d,0x94,0x6b,0x75,0x99, 0x74,0x7e,0xa1,0x7d,0x88,0xa7,0x8a,0x93,0xb1,0x95,0x9d,0xb8,0x9f,0xa8,0xbf,0xa8, 0xb0,0xc4,0xad,0xb4,0xc9,0xb3,0xb9,0xcc,0xb5,0xbc,0xce,0xb7,0xbc,0xce,0xb4,0xbb, 0xcc,0xb0,0xb5,0xc9,0xa9,0xb2,0xc6,0xa2,0xab,0xc1,0x9a,0xa3,0xbb,0x91,0x9b,0xb5, 0x89,0x93,0xb0,0x7e,0x88,0xa8,0x75,0x80,0xa2,0x71,0x7c,0x9f,0x6e,0x79,0x9c,0x69, 0x74,0x99,0x65,0x72,0x96,0x62,0x6e,0x94,0x60,0x6c,0x93,0x5f,0x6b,0x92,0x5e,0x6a, 0x91,0x5c,0x69,0x90,0x5b,0x67,0x90,0x58,0x64,0x8d,0x57,0x63,0x8c,0x55,0x62,0x8a, 0x55,0x60,0x8a,0x53,0x5e,0x89,0x5d,0x69,0x91,0x5c,0x69,0x90,0x52,0x55,0x81,0x52, 0x4f,0x7a,0x53,0x5a,0x6d,0x00,0x00,0x00,0x5a,0x5e,0x67,0x67,0x53,0x67,0x5a,0x47, 0x58,0x5d,0x49,0x5b,0x5b,0x48,0x5a,0x53,0x41,0x51,0x57,0x4b,0x54,0x90,0x99,0xb4, 0x5d,0x6a,0x91,0x57,0x64,0x8c,0x58,0x64,0x8c,0x58,0x65,0x8d,0x58,0x64,0x8c,0x57, 0x64,0x8c,0x57,0x64,0x8c,0x57,0x64,0x8c,0x58,0x64,0x8d,0x57,0x63,0x8c,0x58,0x64, 0x8d,0x58,0x65,0x8d,0x5a,0x65,0x8d,0x5a,0x65,0x8d,0x5d,0x69,0x91,0x64,0x71,0x96, 0x6f,0x7b,0x9f,0x48,0x4c,0x66,0x2b,0x21,0x2d,0x4d,0x3c,0x4a,0x47,0x36,0x43,0x47, 0x36,0x43,0x47,0x37,0x43,0x49,0x38,0x45,0x51,0x3f,0x4e,0x54,0x42,0x52,0x57,0x44, 0x55,0x78,0x68,0x77,0xb3,0xb8,0xc9,0xac,0xb3,0xc6,0xb1,0xb8,0xcb,0xb2,0xb9,0xcc, 0xb2,0xb9,0xcb,0xaf,0xb5,0xca,0xaa,0xb1,0xc7,0x60,0x65,0x77,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe5,0xe5,0xe5,0xcc,0xcc,0xcc,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x07,0x08, 0x21,0x18,0x1d,0x2f,0x22,0x29,0x2f,0x22,0x29,0x2f,0x22,0x29,0x45,0x3d,0x48,0x5f, 0x65,0x84,0x5a,0x65,0x8d,0x52,0x5a,0x84,0x53,0x4f,0x7a,0x64,0x53,0x74,0x64,0x52, 0x72,0x5b,0x52,0x79,0x52,0x50,0x7b,0x52,0x52,0x7d,0x52,0x54,0x7e,0x52,0x54,0x80, 0x52,0x57,0x82,0x52,0x58,0x83,0x52,0x5a,0x84,0x52,0x5d,0x86,0x52,0x5d,0x88,0x53, 0x5d,0x88,0x54,0x60,0x89,0x55,0x60,0x8a,0x56,0x63,0x8c,0x5c,0x67,0x90,0x62,0x6d, 0x92,0x69,0x73,0x98,0x72,0x7b,0xa0,0x7d,0x88,0xa5,0x86,0x91,0xad,0x91,0x9a,0xb5, 0x9c,0xa5,0xbb,0xa3,0xac,0xc2,0xaa,0xb1,0xc6,0xad,0xb5,0xc9,0xb1,0xb8,0xcb,0xb1, 0xb8,0xca,0xaf,0xb7,0xc9,0xab,0xb2,0xc7,0xa5,0xac,0xc2,0x9d,0xa5,0xbc,0x96,0x9f, 0xb8,0x8d,0x96,0xb2,0x84,0x90,0xad,0x7c,0x86,0xa7,0x73,0x80,0xa1,0x71,0x7c,0x9f, 0x6c,0x77,0x9b,0x69,0x73,0x99,0x64,0x6f,0x95,0x62,0x6e,0x94,0x60,0x6c,0x93,0x60, 0x6c,0x93,0x5d,0x6a,0x91,0x5c,0x69,0x90,0x5a,0x65,0x8d,0x58,0x64,0x8d,0x57,0x63, 0x8c,0x55,0x60,0x8a,0x54,0x5f,0x89,0x53,0x5e,0x88,0x58,0x64,0x8c,0x5d,0x69,0x91, 0x55,0x62,0x8b,0x52,0x4f,0x7a,0x5a,0x65,0x8d,0x0f,0x10,0x12,0x00,0x00,0x00,0x6a, 0x64,0x86,0x5f,0x4c,0x5e,0x5b,0x48,0x59,0x5b,0x48,0x59,0x57,0x45,0x55,0x46,0x36, 0x42,0x98,0x99,0xa7,0x69,0x74,0x99,0x58,0x64,0x8c,0x57,0x64,0x8c,0x57,0x63,0x8c, 0x58,0x64,0x8d,0x58,0x64,0x8c,0x57,0x63,0x8c,0x57,0x64,0x8c,0x58,0x64,0x8d,0x57, 0x63,0x8c,0x57,0x63,0x8c,0x58,0x64,0x8d,0x58,0x64,0x8d,0x5a,0x65,0x8d,0x5c,0x67, 0x90,0x5f,0x6b,0x92,0x67,0x73,0x99,0x73,0x7e,0xa1,0x2f,0x29,0x39,0x54,0x42,0x52, 0x4b,0x3a,0x47,0x48,0x37,0x44,0x4b,0x3a,0x48,0x4d,0x3c,0x4a,0x52,0x40,0x4f,0x57, 0x44,0x54,0x59,0x47,0x58,0x5d,0x49,0x5b,0xc1,0xc0,0xcc,0xb2,0xb9,0xcb,0xb0,0xb7, 0xca,0xb5,0xbc,0xcf,0xb1,0xb8,0xcb,0xb1,0xb8,0xcb,0xac,0xb3,0xc8,0xa7,0xaf,0xc5, 0x0e,0x10,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0a,0x08,0x0a,0x3a,0x2e, 0x39,0x3a,0x2e,0x3a,0x3f,0x33,0x40,0x4a,0x3c,0x4a,0x5b,0x4a,0x5d,0x5c,0x4b,0x5e, 0x5b,0x4a,0x5d,0x69,0x5a,0x6b,0xcb,0xc5,0xcb,0xf1,0xf0,0xf1,0xcc,0xcc,0xcc,0x3f, 0x3f,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xec,0xec,0xec,0xa2, 0xa2,0xa2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0e,0x0a,0x0c,0x26,0x1c,0x21,0x2e,0x22,0x28, 0x2e,0x21,0x28,0x2f,0x22,0x29,0x48,0x43,0x51,0x5d,0x65,0x85,0x5a,0x65,0x8d,0x52, 0x58,0x84,0x5c,0x52,0x79,0x64,0x53,0x73,0x64,0x53,0x75,0x58,0x50,0x79,0x52,0x50, 0x7b,0x52,0x53,0x7e,0x52,0x55,0x81,0x52,0x56,0x81,0x52,0x57,0x82,0x52,0x5c,0x86, 0x52,0x5d,0x86,0x52,0x5d,0x88,0x54,0x5f,0x89,0x55,0x60,0x8a,0x56,0x62,0x8b,0x5b, 0x66,0x8e,0x62,0x6c,0x92,0x66,0x73,0x98,0x6f,0x7a,0x9d,0x79,0x84,0xa4,0x84,0x8e, 0xac,0x8d,0x98,0xb3,0x95,0x9f,0xb9,0x9f,0xa7,0xbf,0xa5,0xac,0xc2,0xa9,0xb0,0xc6, 0xaa,0xb2,0xc6,0xab,0xb2,0xc7,0xaa,0xb1,0xc7,0xa5,0xad,0xc3,0x9f,0xa7,0xbf,0x9a, 0xa1,0xbb,0x91,0x9a,0xb3,0x89,0x92,0xaf,0x82,0x8c,0xab,0x7b,0x85,0xa4,0x74,0x7e, 0xa2,0x6e,0x7b,0x9c,0x6a,0x76,0x9a,0x69,0x73,0x99,0x66,0x73,0x99,0x63,0x6e,0x95, 0x60,0x6d,0x93,0x5f,0x6c,0x93,0x5d,0x6a,0x91,0x5c,0x69,0x90,0x5a,0x65,0x8d,0x57, 0x64,0x8c,0x57,0x63,0x8c,0x55,0x60,0x8a,0x53,0x5e,0x88,0x52,0x5d,0x88,0x54,0x5f, 0x89,0x5e,0x6b,0x92,0x5b,0x67,0x90,0x52,0x50,0x7c,0x52,0x54,0x7e,0x3e,0x44,0x55, 0x00,0x00,0x00,0x65,0x6b,0x7c,0x70,0x5b,0x72,0x5a,0x47,0x58,0x5a,0x47,0x58,0x59, 0x46,0x57,0x4e,0x3d,0x4b,0x6e,0x66,0x6e,0x7d,0x88,0xa8,0x5a,0x65,0x8d,0x57,0x63, 0x8c,0x58,0x64,0x8c,0x56,0x63,0x8b,0x57,0x63,0x8c,0x57,0x64,0x8c,0x56,0x63,0x8b, 0x57,0x63,0x8c,0x56,0x62,0x8b,0x56,0x63,0x8b,0x57,0x63,0x8c,0x57,0x63,0x8c,0x5a, 0x65,0x8d,0x57,0x64,0x8c,0x5b,0x66,0x8e,0x63,0x6e,0x94,0x6e,0x7a,0x9d,0x40,0x40, 0x56,0x4f,0x3e,0x4e,0x50,0x3e,0x4c,0x4c,0x3b,0x49,0x4d,0x3c,0x4a,0x4f,0x3d,0x4c, 0x55,0x42,0x52,0x5a,0x47,0x58,0x5d,0x4a,0x5c,0x62,0x4e,0x61,0x78,0x67,0x78,0xbf, 0xc4,0xd5,0xb0,0xb7,0xca,0xaf,0xb5,0xca,0xb1,0xb8,0xcb,0xb2,0xb9,0xcc,0xaf,0xb7, 0xca,0xa9,0xb0,0xc6,0x56,0x5b,0x6b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2d,0x24,0x2c,0x5b, 0x48,0x5a,0x54,0x42,0x52,0x47,0x37,0x43,0x45,0x35,0x41,0x47,0x37,0x43,0x47,0x37, 0x43,0x4b,0x3a,0x47,0x8b,0x81,0x8a,0xd8,0xd9,0xe0,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe, 0xfe,0xff,0xff,0x7a,0x7a,0x7b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xec,0xec,0xec,0x63,0x63,0x63,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x13,0x0e,0x10,0x2a,0x1f,0x25,0x2e,0x21,0x28,0x2e,0x22,0x28,0x2e,0x22,0x28, 0x45,0x40,0x4f,0x5b,0x62,0x82,0x58,0x64,0x8d,0x52,0x5b,0x85,0x52,0x4f,0x7a,0x64, 0x53,0x76,0x64,0x53,0x73,0x5b,0x52,0x79,0x52,0x50,0x7c,0x52,0x54,0x7e,0x52,0x57, 0x82,0x52,0x5a,0x84,0x52,0x5a,0x84,0x52,0x5d,0x88,0x53,0x5e,0x88,0x54,0x5e,0x89, 0x57,0x63,0x8a,0x5a,0x65,0x8d,0x5f,0x6b,0x91,0x65,0x6f,0x95,0x6d,0x77,0x9b,0x79, 0x83,0xa2,0x83,0x8b,0xaa,0x8c,0x95,0xb1,0x93,0x9c,0xb7,0x9a,0xa4,0xbb,0x9f,0xa9, 0xbf,0xa3,0xab,0xc1,0xa5,0xad,0xc3,0xa5,0xad,0xc3,0xa4,0xab,0xc1,0xa1,0xa9,0xc0, 0x9b,0xa3,0xbb,0x94,0x9c,0xb8,0x8d,0x98,0xb2,0x86,0x91,0xaf,0x80,0x8a,0xa8,0x77, 0x83,0xa3,0x72,0x7e,0xa1,0x6e,0x7b,0x9d,0x6c,0x77,0x9c,0x66,0x73,0x99,0x65,0x72, 0x98,0x63,0x6f,0x95,0x62,0x6d,0x94,0x5f,0x6c,0x93,0x5d,0x69,0x91,0x5b,0x67,0x8e, 0x58,0x65,0x8d,0x57,0x63,0x8c,0x56,0x62,0x8b,0x54,0x5f,0x89,0x52,0x5d,0x88,0x52, 0x5d,0x88,0x52,0x5c,0x86,0x5d,0x69,0x91,0x5e,0x6a,0x92,0x53,0x5e,0x88,0x52,0x4f, 0x7a,0x5d,0x69,0x8b,0x05,0x05,0x05,0x0e,0x0f,0x0f,0x6b,0x65,0x87,0x60,0x4c,0x5f, 0x58,0x45,0x56,0x57,0x44,0x55,0x52,0x40,0x50,0x41,0x32,0x3d,0x9e,0xa4,0xb8,0x62, 0x6e,0x94,0x56,0x63,0x8b,0x57,0x63,0x8c,0x57,0x64,0x8c,0x57,0x63,0x8c,0x56,0x63, 0x8b,0x57,0x63,0x8c,0x56,0x63,0x8b,0x56,0x62,0x8b,0x56,0x62,0x8b,0x56,0x63,0x8b, 0x56,0x63,0x8b,0x57,0x63,0x8c,0x58,0x64,0x8c,0x5a,0x65,0x8d,0x5c,0x67,0x90,0x65, 0x71,0x96,0x6d,0x78,0x9a,0x38,0x2b,0x3a,0x59,0x46,0x57,0x50,0x3f,0x4d,0x51,0x3f, 0x4e,0x51,0x3f,0x4e,0x58,0x45,0x56,0x5b,0x48,0x59,0x62,0x4e,0x61,0x61,0x4e,0x60, 0x62,0x4e,0x61,0xcb,0xc8,0xd0,0xb9,0xbf,0xd1,0xb1,0xb8,0xcb,0xb1,0xb8,0xcb,0xb3, 0xba,0xce,0xb0,0xb7,0xca,0xab,0xb3,0xc8,0xa4,0xac,0xc1,0x04,0x05,0x06,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x05,0x06,0x49,0x3a,0x47, 0x4c,0x3b,0x49,0x3a,0x2b,0x35,0x30,0x23,0x2b,0x30,0x23,0x2a,0x35,0x27,0x30,0x3c, 0x2d,0x37,0x59,0x4b,0x55,0xc3,0xbf,0xc6,0xd2,0xd7,0xe1,0xab,0xb3,0xc8,0xdd,0xdf, 0xe8,0xf5,0xf6,0xf8,0xfc,0xfd,0xfd,0x8b,0x8c,0x90,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xea,0xea,0xea,0x30,0x30,0x30,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x02,0x02,0x19,0x12,0x16,0x2d,0x21, 0x27,0x2d,0x21,0x28,0x2e,0x21,0x28,0x2e,0x22,0x28,0x42,0x3d,0x4b,0x5c,0x61,0x7e, 0x5f,0x6b,0x92,0x52,0x5c,0x85,0x52,0x4f,0x7a,0x64,0x53,0x76,0x64,0x52,0x73,0x5f, 0x53,0x79,0x52,0x50,0x7b,0x52,0x57,0x82,0x52,0x58,0x83,0x52,0x5c,0x86,0x53,0x5e, 0x88,0x53,0x5e,0x89,0x54,0x60,0x8a,0x58,0x64,0x8c,0x5d,0x69,0x90,0x63,0x6e,0x93, 0x6b,0x75,0x99,0x74,0x80,0xa1,0x7e,0x89,0xa8,0x88,0x91,0xad,0x90,0x9a,0xb4,0x95, 0xa0,0xb9,0x9c,0xa4,0xbc,0xa0,0xa8,0xbf,0xa1,0xaa,0xc1,0xa2,0xa9,0xc1,0xa0,0xa7, 0xc0,0x9c,0xa4,0xbc,0x95,0xa0,0xb9,0x90,0x9a,0xb5,0x8b,0x95,0xb1,0x83,0x8d,0xab, 0x7c,0x86,0xa5,0x75,0x81,0xa1,0x71,0x7d,0xa0,0x6e,0x7a,0x9d,0x6a,0x75,0x9a,0x69, 0x74,0x99,0x65,0x71,0x96,0x62,0x6e,0x94,0x60,0x6d,0x94,0x5f,0x6b,0x92,0x5d,0x6a, 0x91,0x5a,0x65,0x8e,0x58,0x65,0x8d,0x56,0x63,0x8b,0x55,0x62,0x8b,0x54,0x5f,0x89, 0x53,0x5e,0x88,0x52,0x5d,0x86,0x52,0x58,0x83,0x57,0x63,0x8c,0x5e,0x6a,0x91,0x58, 0x65,0x8d,0x52,0x4f,0x7a,0x5c,0x67,0x90,0x3d,0x40,0x48,0x00,0x00,0x00,0x5e,0x65, 0x7c,0x69,0x54,0x69,0x56,0x43,0x53,0x55,0x42,0x52,0x52,0x40,0x50,0x49,0x38,0x45, 0x86,0x82,0x8a,0x81,0x8b,0xaa,0x5a,0x65,0x8d,0x56,0x63,0x8b,0x56,0x62,0x8b,0x56, 0x62,0x8b,0x56,0x63,0x8b,0x56,0x63,0x8b,0x56,0x62,0x8b,0x55,0x62,0x8b,0x55,0x60, 0x8a,0x56,0x62,0x8b,0x56,0x63,0x8b,0x55,0x62,0x8b,0x56,0x63,0x8b,0x56,0x63,0x8b, 0x5b,0x66,0x8e,0x5e,0x6a,0x92,0x6a,0x76,0x9a,0x4b,0x43,0x59,0x5d,0x49,0x5b,0x56, 0x44,0x54,0x56,0x43,0x53,0x56,0x44,0x54,0x5b,0x48,0x5a,0x5f,0x4b,0x5e,0x64,0x50, 0x63,0x65,0x51,0x64,0x63,0x4f,0x63,0x75,0x65,0x74,0xd8,0xda,0xe4,0xaf,0xb5,0xca, 0xb2,0xb9,0xcc,0xb2,0xb9,0xcc,0xb3,0xba,0xcc,0xb2,0xb9,0xcc,0xb3,0xba,0xcc,0x48, 0x4c,0x5a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1a,0x14,0x19,0x4a,0x39, 0x46,0x38,0x2a,0x33,0x2b,0x1f,0x25,0x2d,0x21,0x28,0x2f,0x22,0x29,0x36,0x28,0x30, 0x3d,0x2e,0x38,0x8e,0x87,0x8e,0xc6,0xca,0xd7,0xaf,0xb5,0xc9,0x95,0x9f,0xb9,0x88, 0x92,0xb0,0xba,0xc1,0xd1,0xf0,0xf1,0xf6,0xfa,0xfc,0xfd,0x90,0x92,0x9c,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xda,0xda,0xda,0x15,0x15,0x15,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x06,0x05,0x06,0x1f,0x17,0x1b,0x2e,0x22,0x28,0x2d,0x21,0x28,0x2d,0x21, 0x28,0x2e,0x21,0x28,0x45,0x3e,0x48,0x67,0x6c,0x85,0x62,0x6d,0x94,0x52,0x5d,0x86, 0x52,0x4f,0x7a,0x5f,0x53,0x77,0x64,0x53,0x76,0x55,0x50,0x79,0x52,0x50,0x7b,0x52, 0x57,0x82,0x52,0x5d,0x86,0x53,0x5e,0x88,0x54,0x5f,0x89,0x57,0x63,0x8c,0x5c,0x67, 0x8e,0x5f,0x6b,0x91,0x69,0x73,0x99,0x71,0x7b,0x9f,0x7b,0x84,0xa5,0x83,0x8d,0xab, 0x8c,0x96,0xb2,0x92,0x9b,0xb7,0x99,0xa2,0xba,0x9b,0xa5,0xbc,0x9c,0xa7,0xbc,0x9c, 0xa7,0xbc,0x9c,0xa4,0xbc,0x98,0xa2,0xba,0x94,0x9b,0xb8,0x8d,0x98,0xb1,0x86,0x91, 0xaf,0x81,0x8c,0xab,0x7c,0x86,0xa7,0x76,0x81,0xa2,0x71,0x7c,0x9f,0x6b,0x77,0x9c, 0x6b,0x76,0x9b,0x69,0x74,0x99,0x65,0x71,0x96,0x62,0x6d,0x94,0x60,0x6c,0x93,0x5d, 0x6a,0x91,0x5c,0x69,0x90,0x5b,0x66,0x8e,0x57,0x64,0x8c,0x55,0x62,0x8a,0x54,0x60, 0x8a,0x54,0x5f,0x89,0x53,0x5e,0x88,0x52,0x58,0x83,0x52,0x5b,0x85,0x52,0x5d,0x88, 0x5e,0x6b,0x92,0x5d,0x69,0x91,0x52,0x58,0x83,0x53,0x5e,0x88,0x7a,0x82,0x96,0x00, 0x00,0x00,0x17,0x18,0x1a,0x75,0x60,0x79,0x58,0x46,0x56,0x52,0x40,0x50,0x51,0x40, 0x4f,0x4d,0x3b,0x49,0x51,0x44,0x4d,0xaf,0xb6,0xc9,0x63,0x6e,0x95,0x56,0x63,0x8b, 0x55,0x62,0x8b,0x56,0x62,0x8b,0x56,0x62,0x8b,0x55,0x62,0x8a,0x55,0x60,0x8a,0x55, 0x62,0x8b,0x55,0x62,0x8a,0x55,0x60,0x8a,0x56,0x62,0x8b,0x56,0x62,0x8b,0x56,0x62, 0x8b,0x56,0x62,0x8b,0x57,0x63,0x8c,0x5b,0x67,0x8e,0x62,0x6d,0x94,0x67,0x68,0x88, 0x58,0x45,0x57,0x5b,0x48,0x59,0x57,0x45,0x55,0x5a,0x47,0x58,0x5c,0x49,0x5a,0x60, 0x4d,0x5f,0x64,0x50,0x64,0x65,0x51,0x65,0x6a,0x55,0x6a,0x5f,0x4b,0x5e,0xd3,0xcf, 0xd5,0xc8,0xcc,0xda,0xb2,0xb9,0xcc,0xb7,0xbc,0xcf,0xba,0xc0,0xd1,0xb8,0xbe,0xd0, 0xba,0xc0,0xd1,0xa3,0xab,0xbf,0x08,0x06,0x08,0x1e,0x17,0x1d,0x44,0x34,0x3f,0x3c, 0x2d,0x37,0x2c,0x20,0x26,0x26,0x1b,0x20,0x27,0x1c,0x21,0x2e,0x21,0x28,0x35,0x27, 0x30,0x5c,0x50,0x58,0xbd,0xbc,0xc5,0xb4,0xbb,0xce,0x99,0xa1,0xbb,0x8c,0x96,0xb3, 0x89,0x93,0xb0,0x8a,0x93,0xb1,0x9f,0xa7,0xbf,0xee,0xf0,0xf4,0xe0,0xe2,0xea,0xa4, 0xa9,0xb4,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xa8,0xa8,0xa8,0x0a, 0x0a,0x0a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0x08,0x0a,0x25, 0x1b,0x20,0x2e,0x21,0x28,0x2d,0x21,0x28,0x2d,0x21,0x28,0x2e,0x21,0x28,0x44,0x3c, 0x45,0x61,0x65,0x7d,0x5d,0x6a,0x91,0x52,0x5a,0x84,0x52,0x4f,0x7a,0x54,0x50,0x79, 0x56,0x50,0x79,0x5a,0x52,0x79,0x52,0x50,0x7b,0x53,0x5b,0x84,0x53,0x5e,0x88,0x56, 0x60,0x8a,0x5b,0x66,0x8d,0x5e,0x6a,0x90,0x65,0x6f,0x95,0x6d,0x79,0x9c,0x74,0x80, 0xa2,0x80,0x8b,0xaa,0x88,0x92,0xaf,0x8e,0x99,0xb3,0x94,0x9d,0xb8,0x99,0xa1,0xb9, 0x9b,0xa3,0xbb,0x9a,0xa3,0xbb,0x98,0xa0,0xb9,0x95,0x9f,0xb8,0x90,0x99,0xb4,0x8a, 0x95,0xb1,0x84,0x90,0xad,0x7e,0x8a,0xa9,0x79,0x83,0xa5,0x75,0x80,0xa2,0x71,0x7c, 0xa0,0x6c,0x79,0x9b,0x69,0x75,0x99,0x67,0x74,0x98,0x65,0x71,0x95,0x63,0x6f,0x95, 0x5f,0x6c,0x93,0x5f,0x6c,0x93,0x5d,0x69,0x91,0x5b,0x66,0x8e,0x58,0x64,0x8d,0x55, 0x62,0x8b,0x54,0x60,0x8a,0x52,0x5d,0x88,0x52,0x5d,0x86,0x52,0x58,0x84,0x52,0x54, 0x80,0x52,0x55,0x81,0x5d,0x69,0x91,0x5e,0x6a,0x91,0x5a,0x65,0x8d,0x52,0x50,0x7c, 0x74,0x80,0xa2,0x27,0x28,0x2b,0x00,0x00,0x00,0x51,0x53,0x70,0x64,0x50,0x64,0x51, 0x3f,0x4e,0x4f,0x3e,0x4c,0x4d,0x3b,0x49,0x42,0x32,0x3d,0xa6,0xa5,0xad,0x6e,0x7a, 0x9d,0x56,0x63,0x8b,0x55,0x60,0x8a,0x55,0x60,0x8a,0x54,0x60,0x8a,0x55,0x60,0x8a, 0x55,0x60,0x8a,0x55,0x60,0x8a,0x54,0x60,0x8a,0x55,0x60,0x8a,0x55,0x60,0x8a,0x55, 0x60,0x8a,0x55,0x60,0x8a,0x55,0x60,0x8a,0x56,0x63,0x8b,0x57,0x64,0x8c,0x57,0x63, 0x89,0x51,0x5b,0x7c,0x4d,0x3e,0x51,0x62,0x4f,0x61,0x5f,0x4c,0x5e,0x5c,0x49,0x5a, 0x5f,0x4c,0x5e,0x62,0x4e,0x62,0x68,0x54,0x69,0x6a,0x55,0x6b,0x69,0x55,0x6a,0x66, 0x52,0x66,0x6c,0x5c,0x6a,0xe4,0xe6,0xed,0xb9,0xbf,0xd0,0xb7,0xbe,0xcf,0xb9,0xc0, 0xd1,0xbe,0xc3,0xd3,0xbc,0xc3,0xd3,0xbb,0xc2,0xd2,0x5f,0x59,0x6a,0x36,0x29,0x31, 0x29,0x1d,0x23,0x22,0x18,0x1c,0x23,0x18,0x1d,0x26,0x1b,0x20,0x2e,0x21,0x28,0x3a, 0x2e,0x35,0x9f,0x99,0x9d,0xd6,0xd9,0xe3,0xa2,0xab,0xc2,0x92,0x9c,0xb7,0x8b,0x95, 0xb2,0x86,0x91,0xaf,0x83,0x8e,0xac,0x82,0x8d,0xab,0x6b,0x70,0x89,0xc6,0xc5,0xcb, 0xaf,0xb5,0xca,0xbb,0xc0,0xcd,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x03,0x03,0x03,0x05,0x05,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x12,0x0d,0x10,0x2a,0x1f,0x24,0x2e,0x21,0x28,0x2e, 0x21,0x28,0x2e,0x21,0x28,0x2d,0x21,0x28,0x3f,0x36,0x41,0x5c,0x5d,0x75,0x5d,0x6a, 0x91,0x53,0x5f,0x89,0x52,0x53,0x7d,0x55,0x50,0x79,0x5c,0x52,0x79,0x5c,0x52,0x79, 0x53,0x50,0x7c,0x54,0x5a,0x83,0x57,0x62,0x8b,0x5d,0x67,0x90,0x62,0x6c,0x93,0x69, 0x74,0x99,0x72,0x7c,0x9f,0x7a,0x85,0xa5,0x82,0x8c,0xaa,0x8c,0x95,0xb2,0x91,0x9a, 0xb5,0x93,0x9d,0xb8,0x96,0xa0,0xba,0x95,0xa1,0xb9,0x94,0x9f,0xb7,0x91,0x9a,0xb5, 0x8e,0x99,0xb4,0x86,0x91,0xad,0x85,0x8e,0xac,0x7c,0x86,0xa7,0x76,0x82,0xa3,0x74, 0x80,0xa1,0x71,0x7b,0x9d,0x6c,0x77,0x9b,0x6a,0x75,0x9a,0x66,0x73,0x98,0x64,0x71, 0x95,0x62,0x6d,0x94,0x60,0x6c,0x93,0x5f,0x6b,0x92,0x5c,0x67,0x90,0x5a,0x65,0x8d, 0x57,0x64,0x8c,0x55,0x60,0x8a,0x54,0x5f,0x89,0x52,0x5d,0x88,0x52,0x58,0x84,0x52, 0x5a,0x84,0x52,0x55,0x80,0x52,0x53,0x7d,0x58,0x64,0x8c,0x5e,0x6a,0x92,0x5d,0x69, 0x91,0x52,0x55,0x80,0x5a,0x65,0x8d,0x5f,0x64,0x72,0x00,0x00,0x00,0x1a,0x1b,0x21, 0x72,0x5e,0x75,0x51,0x3f,0x4e,0x4d,0x3b,0x49,0x4c,0x3b,0x49,0x45,0x35,0x41,0x6b, 0x61,0x68,0x91,0x9a,0xb5,0x57,0x64,0x8c,0x55,0x62,0x8b,0x54,0x5f,0x89,0x54,0x60, 0x8a,0x54,0x5f,0x8a,0x54,0x5f,0x89,0x54,0x60,0x8a,0x55,0x60,0x8a,0x54,0x5f,0x89, 0x54,0x5f,0x89,0x55,0x60,0x8a,0x54,0x5f,0x89,0x55,0x62,0x8b,0x56,0x62,0x8b,0x50, 0x5d,0x83,0x47,0x50,0x73,0x4c,0x56,0x77,0x61,0x57,0x71,0x69,0x55,0x6b,0x65,0x51, 0x65,0x62,0x4e,0x61,0x63,0x4f,0x62,0x64,0x50,0x63,0x69,0x55,0x6a,0x6c,0x58,0x6e, 0x6e,0x59,0x6f,0x69,0x55,0x6a,0x50,0x3f,0x4d,0xd2,0xce,0xd2,0xcb,0xd0,0xdd,0xb7, 0xbe,0xd0,0xb8,0xbf,0xd0,0xbe,0xc3,0xd3,0xbb,0xc2,0xd2,0xbb,0xc1,0xd2,0x9c,0xa1, 0xb4,0x20,0x16,0x1a,0x1e,0x14,0x18,0x21,0x17,0x1b,0x25,0x1a,0x1f,0x2d,0x21,0x28, 0x65,0x5b,0x60,0xdf,0xdd,0xde,0xca,0xcf,0xdd,0xa0,0xa8,0xc0,0x94,0x9d,0xb8,0x90, 0x99,0xb4,0x89,0x93,0xb1,0x84,0x8e,0xad,0x82,0x8c,0xab,0x54,0x59,0x6e,0x1e,0x16, 0x19,0x2b,0x25,0x29,0x9f,0xa4,0xb6,0xc8,0xcc,0xda,0x0b,0x0c,0x0d,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02, 0x18,0x11,0x15,0x2d,0x21,0x28,0x2d,0x21,0x27,0x2d,0x21,0x28,0x2e,0x21,0x28,0x2d, 0x21,0x28,0x3e,0x35,0x3d,0x69,0x6a,0x7c,0x66,0x71,0x96,0x56,0x62,0x8b,0x52,0x58, 0x83,0x52,0x50,0x7b,0x5d,0x53,0x7a,0x65,0x55,0x79,0x5f,0x55,0x7c,0x57,0x5b,0x84, 0x5f,0x6a,0x91,0x65,0x71,0x96,0x6c,0x76,0x9b,0x75,0x80,0xa2,0x7d,0x88,0xa7,0x84, 0x8e,0xad,0x8d,0x96,0xb1,0x91,0x9a,0xb5,0x92,0x9c,0xb5,0x92,0x9b,0xb5,0x90,0x9a, 0xb5,0x8d,0x96,0xb2,0x8a,0x93,0xb0,0x84,0x90,0xad,0x81,0x8c,0xaa,0x7b,0x85,0xa5, 0x76,0x80,0xa2,0x71,0x7b,0x9f,0x6d,0x77,0x9c,0x6a,0x76,0x9b,0x69,0x74,0x9a,0x67, 0x73,0x99,0x65,0x72,0x96,0x62,0x6e,0x94,0x60,0x6d,0x93,0x5c,0x69,0x90,0x5b,0x67, 0x90,0x5b,0x66,0x8e,0x57,0x64,0x8c,0x55,0x60,0x8a,0x54,0x5f,0x89,0x52,0x5d,0x86, 0x52,0x58,0x84,0x52,0x56,0x81,0x52,0x55,0x80,0x52,0x52,0x7d,0x53,0x5e,0x88,0x5e, 0x6a,0x92,0x5c,0x69,0x90,0x55,0x60,0x8a,0x52,0x53,0x7e,0x7e,0x88,0xa4,0x07,0x08, 0x08,0x00,0x00,0x00,0x56,0x57,0x75,0x57,0x44,0x55,0x4c,0x3b,0x48,0x4a,0x39,0x47, 0x48,0x37,0x44,0x3c,0x2e,0x37,0xa6,0xaa,0xb9,0x5e,0x6b,0x92,0x55,0x60,0x8a,0x55, 0x60,0x8a,0x54,0x5f,0x89,0x54,0x5f,0x89,0x54,0x60,0x8a,0x54,0x5f,0x89,0x55,0x60, 0x8a,0x54,0x5f,0x89,0x54,0x5f,0x89,0x54,0x5f,0x89,0x54,0x5f,0x89,0x55,0x60,0x8a, 0x4f,0x5a,0x81,0x45,0x4e,0x72,0x41,0x4c,0x6d,0x46,0x52,0x72,0x5c,0x5f,0x7d,0x64, 0x52,0x68,0x6f,0x5a,0x71,0x6c,0x58,0x6d,0x6a,0x55,0x6b,0x6c,0x57,0x6d,0x6f,0x5a, 0x71,0x6e,0x5a,0x70,0x6e,0x5a,0x70,0x6c,0x58,0x6e,0x4f,0x3e,0x4c,0x61,0x53,0x5f, 0xe8,0xea,0xef,0xbc,0xc2,0xd3,0xbc,0xc3,0xd3,0xc1,0xc7,0xd7,0xc0,0xc6,0xd6,0xc0, 0xc6,0xd6,0xc2,0xc7,0xd7,0x38,0x31,0x39,0x25,0x1a,0x1f,0x28,0x1d,0x23,0x3b,0x2f, 0x35,0xab,0xa5,0xa9,0xf8,0xf8,0xfa,0xbf,0xc4,0xd5,0x9f,0xa8,0xbf,0x98,0xa1,0xba, 0x8d,0x98,0xb3,0x8a,0x93,0xb1,0x8d,0x98,0xb3,0x8d,0x98,0xb3,0x3e,0x42,0x51,0x07, 0x05,0x06,0x18,0x10,0x12,0x16,0x0f,0x11,0x34,0x2f,0x33,0xd5,0xd9,0xe3,0x22,0x23, 0x26,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x03,0x03,0x1b,0x14,0x17,0x2d,0x20,0x27, 0x2d,0x20,0x27,0x2c,0x20,0x27,0x2c,0x20,0x27,0x2c,0x20,0x27,0x3b,0x31,0x39,0x65, 0x65,0x78,0x69,0x73,0x96,0x5b,0x67,0x90,0x56,0x62,0x8b,0x54,0x5e,0x85,0x57,0x53, 0x7b,0x64,0x57,0x7c,0x5d,0x58,0x7e,0x5c,0x63,0x8b,0x65,0x71,0x95,0x6f,0x7a,0x9d, 0x76,0x82,0xa2,0x7e,0x89,0xa9,0x85,0x90,0xad,0x8a,0x95,0xb0,0x8c,0x96,0xb2,0x8c, 0x96,0xb3,0x8c,0x98,0xb2,0x8a,0x93,0xb0,0x86,0x90,0xaf,0x83,0x8d,0xab,0x7e,0x89, 0xa8,0x79,0x83,0xa3,0x73,0x7e,0xa1,0x6e,0x7b,0x9d,0x6c,0x77,0x9c,0x67,0x74,0x99, 0x66,0x72,0x98,0x64,0x71,0x96,0x64,0x71,0x96,0x62,0x6e,0x94,0x60,0x6d,0x93,0x5d, 0x6a,0x91,0x5b,0x66,0x8e,0x5a,0x65,0x8d,0x56,0x63,0x8b,0x55,0x60,0x8a,0x53,0x5e, 0x88,0x52,0x5d,0x86,0x52,0x56,0x82,0x52,0x56,0x82,0x52,0x53,0x7e,0x52,0x52,0x7d, 0x52,0x55,0x80,0x5d,0x6a,0x91,0x5e,0x6a,0x92,0x5b,0x66,0x8e,0x52,0x50,0x7c,0x6e, 0x7a,0x9d,0x48,0x49,0x4e,0x00,0x00,0x00,0x26,0x29,0x32,0x6b,0x57,0x6c,0x4b,0x3a, 0x47,0x47,0x37,0x44,0x46,0x36,0x42,0x3f,0x30,0x3a,0x82,0x7d,0x84,0x72,0x7d,0xa0, 0x54,0x5f,0x89,0x54,0x5f,0x89,0x54,0x5f,0x89,0x54,0x5f,0x89,0x54,0x5f,0x89,0x53, 0x5f,0x89,0x55,0x60,0x8a,0x54,0x5f,0x89,0x54,0x5f,0x89,0x53,0x5f,0x89,0x53,0x5e, 0x89,0x4c,0x56,0x7d,0x41,0x4b,0x6e,0x3f,0x48,0x6b,0x3f,0x48,0x6a,0x43,0x4c,0x6e, 0x4d,0x56,0x76,0x5b,0x54,0x72,0x74,0x63,0x7c,0x72,0x5e,0x76,0x72,0x5d,0x76,0x72, 0x5e,0x75,0x72,0x5d,0x75,0x6f,0x5a,0x71,0x63,0x4f,0x62,0x56,0x43,0x53,0x4d,0x3c, 0x49,0x46,0x36,0x42,0xd0,0xcc,0xd0,0xc8,0xcc,0xda,0xbf,0xc4,0xd5,0xc6,0xca,0xd9, 0xc7,0xcb,0xd9,0xc2,0xc8,0xd7,0xc7,0xcb,0xd9,0x92,0x94,0xa5,0x31,0x24,0x2b,0x61, 0x5a,0x64,0xdb,0xda,0xdf,0xe3,0xe6,0xed,0xb8,0xbf,0xd0,0xa1,0xa9,0xc1,0x9a,0xa3, 0xbb,0x90,0x9a,0xb5,0x8b,0x94,0xb1,0x94,0x9d,0xb8,0xaa,0xb1,0xc3,0x3a,0x3c,0x43, 0x00,0x00,0x00,0x06,0x04,0x05,0x17,0x0f,0x11,0x16,0x0e,0x10,0x15,0x0e,0x10,0xd3, 0xd6,0xde,0x3b,0x3c,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x04,0x03,0x04,0x1a,0x13,0x17,0x2c,0x1f,0x26,0x2c,0x20,0x26,0x2b,0x1f,0x25, 0x2a,0x1e,0x25,0x29,0x1e,0x23,0x33,0x29,0x2e,0x5f,0x5b,0x67,0x79,0x80,0x99,0x69, 0x74,0x99,0x5e,0x6a,0x91,0x56,0x62,0x8b,0x56,0x56,0x80,0x60,0x5a,0x80,0x5e,0x5c, 0x82,0x5f,0x6b,0x92,0x6c,0x76,0x9a,0x76,0x82,0xa3,0x7e,0x8a,0xa9,0x83,0x8c,0xab, 0x86,0x91,0xad,0x88,0x92,0xaf,0x88,0x92,0xaf,0x83,0x8d,0xac,0x82,0x8d,0xab,0x7c, 0x86,0xa7,0x77,0x83,0xa4,0x76,0x80,0xa2,0x6f,0x7c,0x9f,0x6d,0x79,0x9d,0x6a,0x75, 0x99,0x67,0x74,0x99,0x66,0x72,0x96,0x63,0x6e,0x95,0x62,0x6e,0x94,0x60,0x6d,0x94, 0x5f,0x6c,0x93,0x5d,0x6a,0x91,0x5b,0x66,0x8e,0x58,0x65,0x8d,0x58,0x64,0x8c,0x55, 0x60,0x8a,0x52,0x5d,0x88,0x52,0x5d,0x86,0x52,0x57,0x83,0x52,0x55,0x81,0x52,0x53, 0x7d,0x52,0x50,0x7c,0x52,0x50,0x7b,0x5c,0x67,0x90,0x5d,0x69,0x91,0x5c,0x69,0x90, 0x52,0x57,0x82,0x5b,0x67,0x8e,0x8b,0x8f,0x9b,0x00,0x00,0x00,0x00,0x00,0x00,0x62, 0x5b,0x79,0x50,0x3e,0x4d,0x46,0x36,0x42,0x44,0x34,0x40,0x41,0x31,0x3c,0x43,0x38, 0x3f,0x8e,0x97,0xb1,0x58,0x64,0x8c,0x54,0x5f,0x89,0x54,0x5f,0x89,0x53,0x5e,0x89, 0x53,0x5e,0x89,0x53,0x5e,0x88,0x54,0x5f,0x89,0x54,0x5f,0x89,0x53,0x5e,0x88,0x52, 0x5d,0x88,0x4b,0x55,0x7c,0x41,0x4b,0x6e,0x3e,0x47,0x6a,0x3d,0x47,0x6a,0x3e,0x47, 0x69,0x40,0x4b,0x6c,0x48,0x54,0x74,0x5e,0x5f,0x82,0x62,0x5d,0x7d,0x72,0x65,0x84, 0x75,0x67,0x83,0x75,0x60,0x7a,0x68,0x54,0x69,0x5d,0x4a,0x5c,0x5a,0x47,0x58,0x56, 0x44,0x54,0x52,0x40,0x4f,0x4b,0x3a,0x47,0x5e,0x50,0x5b,0xdb,0xdf,0xe7,0xc4,0xca, 0xd8,0xc6,0xcb,0xd9,0xca,0xcf,0xdd,0xc6,0xca,0xd9,0xca,0xcf,0xdb,0xc5,0xc9,0xd8, 0xcf,0xcd,0xd3,0xbb,0xc1,0xd2,0xba,0xc1,0xd1,0xad,0xb4,0xc9,0xa3,0xab,0xc2,0x9a, 0xa3,0xbc,0x93,0x9c,0xb8,0x8b,0x95,0xb2,0x9b,0xa3,0xbc,0xac,0xb1,0xbf,0x30,0x30, 0x32,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x06,0x06,0x18,0x10,0x13,0x17,0x0f,0x11, 0x16,0x0e,0x11,0xc0,0xc2,0xcc,0x52,0x53,0x59,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x03,0x04,0x1a,0x13, 0x17,0x2a,0x1f,0x25,0x2b,0x1f,0x25,0x29,0x1e,0x23,0x29,0x1d,0x23,0x27,0x1c,0x21, 0x26,0x1b,0x20,0x4a,0x44,0x4d,0x70,0x73,0x87,0x75,0x80,0xa2,0x69,0x74,0x9a,0x5f, 0x6b,0x92,0x5b,0x66,0x8d,0x5c,0x5d,0x88,0x5e,0x5f,0x88,0x64,0x6f,0x93,0x6f,0x7a, 0x9d,0x79,0x84,0xa4,0x7c,0x88,0xa7,0x7e,0x8b,0xaa,0x80,0x8b,0xa9,0x7e,0x8a,0xa9, 0x7b,0x85,0xa5,0x79,0x83,0xa4,0x75,0x80,0xa2,0x71,0x7c,0x9f,0x6e,0x7a,0x9c,0x6a, 0x75,0x9a,0x67,0x74,0x99,0x66,0x71,0x96,0x63,0x6e,0x95,0x63,0x6f,0x94,0x60,0x6d, 0x93,0x60,0x6c,0x93,0x5e,0x6b,0x92,0x5c,0x67,0x90,0x5a,0x65,0x8e,0x58,0x65,0x8d, 0x55,0x62,0x8a,0x54,0x5f,0x89,0x53,0x5e,0x88,0x52,0x5b,0x85,0x52,0x57,0x83,0x52, 0x53,0x7d,0x52,0x52,0x7c,0x52,0x50,0x7c,0x52,0x4f,0x7b,0x56,0x62,0x8b,0x5d,0x6a, 0x91,0x5c,0x69,0x90,0x57,0x63,0x8c,0x55,0x60,0x8a,0xa1,0xa9,0xc0,0x1e,0x1e,0x1f, 0x00,0x00,0x00,0x28,0x2c,0x38,0x63,0x4f,0x62,0x46,0x36,0x42,0x43,0x33,0x3e,0x41, 0x31,0x3c,0x38,0x2a,0x33,0x8c,0x8c,0x97,0x5e,0x6a,0x92,0x53,0x5e,0x89,0x53,0x5e, 0x88,0x53,0x5e,0x88,0x53,0x5e,0x88,0x52,0x5d,0x88,0x53,0x5e,0x88,0x53,0x5e,0x88, 0x53,0x5e,0x88,0x48,0x53,0x7a,0x40,0x4b,0x6d,0x3f,0x48,0x6c,0x3e,0x47,0x69,0x3d, 0x46,0x69,0x3e,0x47,0x6b,0x40,0x4b,0x6e,0x47,0x52,0x75,0x4f,0x59,0x7a,0x55,0x54, 0x74,0x73,0x64,0x7f,0x6a,0x55,0x6b,0x61,0x4d,0x61,0x65,0x51,0x65,0x64,0x50,0x63, 0x64,0x50,0x64,0x5e,0x4b,0x5d,0x57,0x44,0x54,0x56,0x44,0x54,0x4c,0x3b,0x49,0xd4, 0xd1,0xd5,0xd3,0xd7,0xe2,0xc7,0xcb,0xd9,0xc8,0xcc,0xda,0xc9,0xcf,0xdb,0xc8,0xcc, 0xda,0xe3,0xe6,0xed,0xfc,0xfc,0xfd,0xb7,0xbe,0xcf,0xb0,0xb7,0xca,0xa5,0xad,0xc3, 0x9b,0xa3,0xbc,0x93,0x9d,0xb8,0x92,0x9b,0xb7,0xa4,0xac,0xc3,0xaa,0xae,0xb8,0x1c, 0x1c,0x1d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x06,0x07,0x1d,0x14, 0x18,0x1a,0x12,0x15,0x17,0x0f,0x12,0xa6,0xaa,0xb7,0x66,0x69,0x71,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x05,0x04,0x04,0x1a,0x13,0x17,0x29,0x1e,0x23,0x28,0x1c, 0x22,0x26,0x1b,0x20,0x26,0x1b,0x20,0x25,0x1a,0x1f,0x25,0x1a,0x1f,0x34,0x2c,0x32, 0x5e,0x5e,0x6e,0x79,0x82,0x9f,0x75,0x80,0xa1,0x69,0x75,0x9b,0x66,0x72,0x96,0x60, 0x6c,0x92,0x5f,0x6a,0x91,0x64,0x6e,0x94,0x6c,0x77,0x9b,0x76,0x83,0xa3,0x77,0x82, 0xa3,0x77,0x83,0xa3,0x75,0x81,0xa2,0x73,0x7e,0xa0,0x71,0x7d,0xa0,0x6d,0x77,0x9b, 0x67,0x74,0x99,0x67,0x72,0x98,0x66,0x73,0x98,0x64,0x71,0x95,0x63,0x6e,0x95,0x63, 0x6f,0x94,0x5f,0x6c,0x93,0x5f,0x6c,0x93,0x5e,0x6b,0x92,0x5c,0x69,0x90,0x5b,0x66, 0x8e,0x57,0x63,0x8c,0x55,0x60,0x8a,0x54,0x5f,0x89,0x52,0x5d,0x88,0x52,0x5b,0x85, 0x52,0x54,0x7e,0x52,0x52,0x7d,0x52,0x52,0x7c,0x52,0x50,0x7c,0x52,0x4f,0x7b,0x52, 0x5d,0x88,0x5d,0x69,0x91,0x5c,0x67,0x90,0x58,0x64,0x8d,0x52,0x58,0x83,0x74,0x80, 0xa2,0x6d,0x6e,0x74,0x00,0x00,0x00,0x00,0x00,0x00,0x50,0x44,0x55,0x4a,0x39,0x46, 0x40,0x31,0x3c,0x3e,0x2f,0x39,0x3a,0x2b,0x35,0x5c,0x52,0x58,0x71,0x7c,0xa0,0x54, 0x5f,0x89,0x53,0x5e,0x88,0x52,0x5d,0x88,0x52,0x5d,0x86,0x53,0x5d,0x88,0x52,0x5d, 0x86,0x50,0x5c,0x85,0x46,0x50,0x76,0x40,0x4a,0x6d,0x3f,0x4a,0x6c,0x3e,0x47,0x6b, 0x3d,0x46,0x69,0x3e,0x47,0x6b,0x3f,0x4a,0x6c,0x41,0x4b,0x6f,0x48,0x53,0x76,0x4d, 0x56,0x77,0x61,0x51,0x67,0x5b,0x48,0x5a,0x60,0x4d,0x60,0x61,0x4e,0x61,0x66,0x51, 0x66,0x67,0x52,0x67,0x6b,0x56,0x6c,0x68,0x54,0x69,0x65,0x51,0x65,0x5e,0x4a,0x5c, 0x58,0x45,0x56,0x65,0x55,0x63,0xe2,0xe5,0xeb,0xcc,0xd1,0xde,0xc8,0xce,0xdb,0xc8, 0xcc,0xda,0xc7,0xcb,0xda,0xf9,0xf9,0xfc,0xfe,0xfe,0xfe,0xb0,0xb7,0xca,0xa8,0xb0, 0xc6,0x9d,0xa5,0xbf,0x96,0xa0,0xba,0x98,0xa1,0xba,0xb3,0xba,0xcc,0xa5,0xa6,0xab, 0x0c,0x0c,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08, 0x06,0x07,0x20,0x16,0x1a,0x1e,0x15,0x18,0x1b,0x12,0x15,0x9b,0x9e,0xaa,0x7e,0x81, 0x8b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05, 0x04,0x04,0x1b,0x13,0x17,0x26,0x1b,0x20,0x26,0x1b,0x20,0x25,0x1a,0x1f,0x23,0x19, 0x1d,0x23,0x18,0x1d,0x23,0x19,0x1d,0x26,0x1c,0x21,0x51,0x4e,0x58,0x77,0x7d,0x93, 0x82,0x8c,0xab,0x74,0x80,0xa0,0x6d,0x79,0x9c,0x64,0x6f,0x95,0x5f,0x6a,0x90,0x62, 0x6c,0x91,0x66,0x72,0x96,0x6e,0x7b,0x9d,0x6e,0x7b,0x9f,0x6e,0x79,0x9c,0x6a,0x76, 0x9a,0x67,0x74,0x98,0x67,0x73,0x98,0x64,0x71,0x95,0x64,0x71,0x95,0x62,0x6e,0x94, 0x62,0x6d,0x94,0x5f,0x6c,0x93,0x5e,0x6b,0x92,0x5f,0x6b,0x92,0x5d,0x69,0x91,0x5c, 0x67,0x90,0x58,0x64,0x8d,0x57,0x63,0x8b,0x55,0x60,0x8a,0x53,0x5e,0x89,0x52,0x5d, 0x88,0x52,0x5a,0x84,0x52,0x55,0x81,0x52,0x52,0x7d,0x52,0x52,0x7c,0x52,0x50,0x7b, 0x52,0x4f,0x7b,0x52,0x53,0x7d,0x5d,0x69,0x91,0x5b,0x67,0x90,0x58,0x64,0x8d,0x52, 0x54,0x7e,0x5f,0x6b,0x92,0x96,0x9b,0xaa,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x4f,0x3f,0x4e,0x40,0x30,0x3b,0x3b,0x2c,0x36,0x39,0x2a,0x34,0x34,0x26,0x2e, 0x89,0x8f,0xa4,0x56,0x63,0x8b,0x52,0x5c,0x85,0x52,0x5d,0x86,0x52,0x5c,0x85,0x52, 0x5c,0x86,0x4f,0x5b,0x83,0x45,0x4c,0x72,0x40,0x47,0x6c,0x3e,0x46,0x6a,0x3e,0x44, 0x67,0x3d,0x41,0x65,0x3e,0x47,0x6b,0x3f,0x47,0x6c,0x41,0x4b,0x6e,0x45,0x4f,0x74, 0x56,0x62,0x81,0x1d,0x1e,0x24,0x0d,0x0b,0x0d,0x32,0x28,0x33,0x54,0x45,0x57,0x72, 0x5e,0x75,0x71,0x5d,0x74,0x70,0x5b,0x72,0x71,0x5c,0x73,0x70,0x5b,0x72,0x6e,0x59, 0x70,0x69,0x54,0x69,0x65,0x51,0x65,0x62,0x4e,0x61,0xe3,0xe1,0xe5,0xde,0xe1,0xe9, 0xce,0xd2,0xde,0xc9,0xcf,0xdb,0xc4,0xca,0xd8,0xfe,0xff,0xff,0xfe,0xfe,0xff,0xb2, 0xb9,0xcc,0xa5,0xad,0xc3,0x9b,0xa3,0xbc,0xa7,0xaf,0xc4,0xd2,0xd6,0xe1,0x9e,0x9e, 0x9e,0x06,0x06,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x0a,0x07,0x09,0x28,0x1d,0x22,0x23,0x19,0x1e,0x20,0x16,0x1a,0x92, 0x93,0xa0,0x92,0x95,0xa2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x04,0x05,0x1b,0x13,0x17,0x25, 0x1a,0x1f,0x23,0x19,0x1e,0x23,0x19,0x1d,0x23,0x18,0x1d,0x22,0x18,0x1c,0x22,0x18, 0x1c,0x22,0x18,0x1c,0x44,0x3d,0x44,0x79,0x7a,0x88,0x92,0x9b,0xb3,0x7d,0x89,0xa8, 0x71,0x7c,0xa0,0x65,0x71,0x96,0x5c,0x5e,0x86,0x5c,0x5b,0x83,0x5c,0x66,0x8e,0x62, 0x6d,0x93,0x66,0x73,0x98,0x64,0x6f,0x95,0x63,0x6f,0x95,0x62,0x6e,0x95,0x62,0x6d, 0x94,0x62,0x6d,0x94,0x5f,0x6c,0x93,0x5f,0x6b,0x92,0x5f,0x6c,0x93,0x5f,0x6b,0x92, 0x5c,0x69,0x90,0x5a,0x66,0x8e,0x5a,0x65,0x8d,0x56,0x63,0x8b,0x54,0x5f,0x89,0x53, 0x5e,0x89,0x52,0x5d,0x86,0x52,0x58,0x83,0x52,0x54,0x80,0x52,0x53,0x7e,0x52,0x52, 0x7c,0x52,0x4f,0x7b,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x5b,0x66,0x8e,0x5b,0x67,0x90, 0x5c,0x67,0x90,0x54,0x5f,0x89,0x58,0x65,0x8d,0x8b,0x94,0xb1,0x26,0x26,0x28,0x00, 0x00,0x00,0x00,0x00,0x00,0x25,0x1e,0x26,0x46,0x36,0x42,0x3a,0x2c,0x35,0x38,0x2a, 0x33,0x34,0x27,0x2f,0x70,0x6a,0x74,0x5d,0x69,0x91,0x52,0x5d,0x88,0x52,0x5a,0x84, 0x52,0x5c,0x85,0x4d,0x57,0x80,0x44,0x48,0x6f,0x41,0x47,0x6c,0x3e,0x45,0x69,0x3d, 0x41,0x65,0x3e,0x45,0x69,0x3e,0x46,0x6a,0x3f,0x45,0x6b,0x40,0x47,0x6c,0x44,0x4e, 0x73,0x5b,0x65,0x86,0x40,0x42,0x47,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x08,0x09,0x0c,0x25,0x28,0x35,0x48,0x4e,0x66,0x63,0x61,0x84,0x75, 0x69,0x89,0x78,0x66,0x81,0x76,0x61,0x7a,0x72,0x5d,0x75,0x6d,0x59,0x6f,0x82,0x71, 0x82,0xfd,0xfd,0xfd,0xdd,0xdf,0xe8,0xca,0xcf,0xdb,0xd7,0xda,0xe5,0xff,0xff,0xff, 0xfe,0xff,0xff,0xb9,0xbf,0xd1,0xb0,0xb7,0xca,0xc3,0xc8,0xd7,0xf8,0xf9,0xfa,0x78, 0x78,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x07,0x08,0x32,0x25,0x2c,0x29,0x1e,0x23, 0x26,0x1b,0x20,0x8a,0x89,0x96,0xac,0xb1,0xbe,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x05,0x04,0x04,0x1a,0x12,0x15,0x23,0x19,0x1d,0x23,0x19,0x1d,0x22, 0x18,0x1c,0x22,0x18,0x1c,0x22,0x18,0x1c,0x22,0x18,0x1c,0x22,0x18,0x1c,0x30,0x27, 0x2b,0x71,0x6d,0x75,0x9a,0x9f,0xb3,0x86,0x91,0xad,0x73,0x7e,0xa0,0x65,0x72,0x96, 0x58,0x64,0x8b,0x56,0x55,0x7e,0x56,0x56,0x80,0x58,0x65,0x8d,0x5d,0x6a,0x91,0x60, 0x6d,0x94,0x62,0x6d,0x94,0x5f,0x6b,0x92,0x5f,0x6c,0x93,0x5f,0x6b,0x92,0x5d,0x69, 0x91,0x5c,0x67,0x90,0x5b,0x67,0x90,0x5b,0x66,0x8e,0x58,0x64,0x8c,0x56,0x62,0x8b, 0x54,0x5f,0x89,0x53,0x5e,0x88,0x52,0x5d,0x86,0x52,0x57,0x83,0x52,0x55,0x80,0x52, 0x50,0x7b,0x52,0x50,0x7b,0x52,0x50,0x7b,0x52,0x4f,0x7a,0x52,0x4f,0x7b,0x55,0x62, 0x8b,0x5c,0x67,0x90,0x5a,0x66,0x8e,0x58,0x64,0x8d,0x53,0x5e,0x88,0x6c,0x77,0x9b, 0x5e,0x61,0x6b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0x41,0x51,0x39, 0x2a,0x33,0x35,0x27,0x30,0x33,0x26,0x2e,0x3c,0x30,0x38,0x6e,0x78,0x99,0x52,0x5d, 0x86,0x50,0x57,0x82,0x4b,0x4f,0x77,0x44,0x48,0x6e,0x40,0x45,0x6a,0x40,0x45,0x69, 0x3d,0x41,0x65,0x3d,0x41,0x65,0x3e,0x40,0x65,0x3f,0x43,0x67,0x41,0x46,0x6c,0x44, 0x4d,0x72,0x5a,0x64,0x85,0x67,0x68,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x02,0x02,0x02,0x28,0x2b,0x33,0x4b,0x51,0x63,0x63,0x6d,0x8b,0x68,0x68,0x8d,0x78, 0x69,0x88,0x76,0x61,0x7a,0xe7,0xe3,0xe8,0xfc,0xfc,0xfd,0xd1,0xd6,0xe0,0xeb,0xee, 0xf2,0xff,0xff,0xff,0xfe,0xfe,0xfe,0xd7,0xda,0xe5,0xe9,0xeb,0xf0,0xf6,0xf6,0xf6, 0x54,0x54,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x06,0x07,0x3a,0x2b, 0x35,0x2f,0x23,0x2a,0x2b,0x1f,0x26,0x82,0x81,0x8d,0xbf,0xc5,0xd4,0x02,0x02,0x02, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x02,0x03, 0x18,0x11,0x13,0x23,0x18,0x1d,0x23,0x18,0x1d,0x21,0x17,0x1b,0x22,0x18,0x1c,0x21, 0x17,0x1b,0x22,0x18,0x1c,0x20,0x17,0x1b,0x21,0x17,0x1b,0x5c,0x55,0x5b,0x8d,0x8d, 0x99,0x99,0xa2,0xba,0x80,0x8b,0xaa,0x6e,0x7a,0x9d,0x5c,0x67,0x90,0x54,0x55,0x80, 0x53,0x52,0x7c,0x53,0x55,0x81,0x56,0x62,0x8a,0x5d,0x67,0x90,0x5c,0x69,0x90,0x5d, 0x69,0x91,0x5d,0x6a,0x91,0x5c,0x69,0x90,0x5b,0x66,0x8e,0x58,0x65,0x8d,0x57,0x63, 0x8c,0x55,0x60,0x8a,0x54,0x60,0x8a,0x53,0x5e,0x88,0x52,0x5c,0x86,0x52,0x56,0x81, 0x52,0x54,0x7e,0x52,0x52,0x7c,0x52,0x4f,0x7b,0x52,0x4f,0x7a,0x52,0x4f,0x7b,0x52, 0x4f,0x7a,0x53,0x5e,0x88,0x5b,0x67,0x8e,0x5a,0x66,0x8e,0x58,0x65,0x8d,0x52,0x5c, 0x86,0x53,0x5e,0x88,0x7d,0x85,0x99,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x3b,0x30,0x3d,0x40,0x31,0x3b,0x33,0x25,0x2d,0x31,0x24,0x2c,0x30,0x23,0x2b,0x73, 0x73,0x84,0x56,0x62,0x8a,0x47,0x4c,0x74,0x45,0x4b,0x71,0x41,0x46,0x6c,0x40,0x45, 0x6a,0x3e,0x41,0x65,0x3e,0x41,0x65,0x3e,0x3f,0x64,0x3f,0x41,0x66,0x41,0x46,0x6b, 0x45,0x4d,0x73,0x54,0x5f,0x83,0x87,0x89,0x90,0x03,0x03,0x03,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x1d,0x1e,0x22,0x49,0x4d,0x5a,0x5d,0x65,0x7f,0x81,0x89,0xa7,0xfe,0xfe,0xff,0xe8, 0xe9,0xef,0xfa,0xfa,0xfc,0xfe,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xe7,0xe7, 0xe7,0x36,0x36,0x36,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05, 0x04,0x05,0x42,0x33,0x3e,0x34,0x27,0x2f,0x34,0x27,0x2f,0x7c,0x79,0x86,0xc1,0xc7, 0xd6,0x13,0x14,0x17,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x16,0x10,0x12,0x21,0x18,0x1c, 0x22,0x18,0x1d,0x21,0x17,0x1b,0x22,0x17,0x1c,0x21,0x17,0x1b,0x20,0x16,0x1a,0x22, 0x18,0x1c,0x21,0x17,0x1b,0x2f,0x27,0x2b,0x6c,0x67,0x6d,0x96,0x9a,0xa8,0x93,0x9c, 0xb7,0x7b,0x85,0xa5,0x62,0x6d,0x94,0x55,0x60,0x89,0x52,0x50,0x7c,0x52,0x4f,0x7a, 0x52,0x52,0x7c,0x53,0x5e,0x89,0x5a,0x65,0x8d,0x5b,0x66,0x8e,0x58,0x65,0x8d,0x58, 0x64,0x8d,0x57,0x64,0x8c,0x55,0x62,0x8b,0x54,0x5f,0x89,0x52,0x5d,0x86,0x52,0x58, 0x83,0x52,0x55,0x81,0x52,0x53,0x7d,0x52,0x52,0x7c,0x52,0x50,0x7b,0x52,0x4f,0x7b, 0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x55,0x81,0x5b,0x66,0x8e,0x5a,0x65,0x8d,0x5a, 0x65,0x8d,0x55,0x62,0x8b,0x52,0x4f,0x7a,0x76,0x82,0xa3,0x22,0x23,0x26,0x00,0x00, 0x00,0x00,0x00,0x00,0x02,0x03,0x03,0x52,0x40,0x50,0x36,0x28,0x31,0x2e,0x22,0x29, 0x2d,0x21,0x28,0x49,0x41,0x46,0x6c,0x76,0x94,0x46,0x50,0x76,0x43,0x46,0x6b,0x40, 0x44,0x69,0x3f,0x40,0x65,0x3e,0x3f,0x63,0x3f,0x41,0x66,0x3f,0x41,0x65,0x41,0x43, 0x67,0x44,0x45,0x6b,0x4f,0x5c,0x7e,0x95,0x99,0xa4,0x0b,0x0b,0x0b,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x12, 0x46,0x48,0x4d,0x69,0x69,0x69,0xae,0xae,0xae,0xff,0xff,0xff,0xff,0xff,0xff,0xd8, 0xd8,0xd8,0x1e,0x1e,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x02,0x02,0x02,0x47,0x37,0x43,0x37,0x29,0x32,0x37,0x29,0x32,0x73, 0x6f,0x7d,0xc1,0xc7,0xd6,0x28,0x29,0x2e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x15,0x0f,0x11,0x24,0x19,0x1e,0x25,0x1a,0x1f,0x22,0x18,0x1d, 0x20,0x17,0x1b,0x21,0x17,0x1b,0x21,0x17,0x1b,0x22,0x18,0x1c,0x21,0x17,0x1b,0x20, 0x16,0x1a,0x39,0x31,0x35,0x79,0x76,0x7e,0x95,0x9b,0xae,0x83,0x8e,0xac,0x6e,0x7a, 0x9d,0x5f,0x6c,0x93,0x53,0x5e,0x88,0x52,0x50,0x7b,0x52,0x4f,0x7a,0x52,0x52,0x7c, 0x53,0x5e,0x89,0x56,0x62,0x8b,0x55,0x62,0x8a,0x54,0x60,0x8a,0x53,0x5e,0x88,0x52, 0x5d,0x86,0x52,0x57,0x82,0x52,0x53,0x7e,0x52,0x52,0x7d,0x52,0x50,0x7b,0x52,0x4f, 0x7b,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7b,0x52,0x50,0x7c,0x5b,0x66,0x8e, 0x58,0x65,0x8d,0x58,0x64,0x8c,0x57,0x63,0x8c,0x52,0x4f,0x7a,0x5a,0x66,0x8e,0x57, 0x5a,0x62,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x39,0x2f,0x3c,0x47,0x37, 0x44,0x31,0x24,0x2c,0x27,0x1d,0x22,0x25,0x1b,0x20,0x63,0x5f,0x65,0x65,0x6f,0x8d, 0x48,0x54,0x76,0x40,0x4a,0x6e,0x3f,0x43,0x66,0x3e,0x40,0x64,0x3f,0x3f,0x64,0x43, 0x43,0x69,0x44,0x45,0x6c,0x4b,0x56,0x7b,0x8c,0x92,0xa4,0x19,0x19,0x19,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5c,0x49,0x5b,0x3c,0x2d,0x37, 0x39,0x2b,0x34,0x6c,0x67,0x75,0xc0,0xc6,0xd6,0x3b,0x3e,0x45,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x0c, 0x0e,0x25,0x1b,0x1f,0x27,0x1c,0x21,0x24,0x19,0x1e,0x21,0x17,0x1b,0x22,0x18,0x1c, 0x1f,0x15,0x19,0x20,0x16,0x1a,0x20,0x16,0x1a,0x20,0x16,0x1a,0x1f,0x16,0x19,0x4b, 0x45,0x4a,0x7c,0x7c,0x88,0x93,0x9b,0xb1,0x7b,0x86,0xa7,0x6d,0x79,0x9c,0x5e,0x6b, 0x92,0x55,0x60,0x8a,0x52,0x52,0x7d,0x52,0x4f,0x7b,0x52,0x50,0x7c,0x52,0x57,0x82, 0x52,0x5c,0x86,0x52,0x5b,0x85,0x52,0x55,0x81,0x52,0x54,0x7e,0x52,0x50,0x7b,0x52, 0x50,0x7b,0x52,0x4f,0x7b,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f, 0x7a,0x5a,0x66,0x8e,0x58,0x64,0x8d,0x57,0x63,0x8c,0x57,0x63,0x8c,0x52,0x50,0x7c, 0x52,0x50,0x7c,0x88,0x8d,0x9b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04, 0x03,0x04,0x44,0x36,0x43,0x3a,0x2c,0x36,0x2c,0x21,0x28,0x27,0x1c,0x22,0x24,0x1a, 0x20,0x53,0x4e,0x54,0x6e,0x75,0x8c,0x5b,0x64,0x83,0x4b,0x56,0x77,0x41,0x4b,0x6e, 0x41,0x4b,0x6f,0x43,0x4a,0x6f,0x48,0x54,0x79,0x7e,0x88,0x9e,0x2a,0x2a,0x2a,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x4e, 0x62,0x57,0x44,0x55,0x41,0x31,0x3c,0x67,0x60,0x6e,0xbe,0xc3,0xd3,0x50,0x54,0x5e, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0d,0x09,0x0b,0x22,0x19,0x1e,0x28,0x1c, 0x22,0x27,0x1b,0x21,0x24,0x19,0x1e,0x20,0x16,0x1a,0x20,0x17,0x1b,0x20,0x16,0x1a, 0x1f,0x15,0x19,0x1f,0x15,0x19,0x1d,0x14,0x18,0x20,0x17,0x1c,0x4e,0x4a,0x53,0x75, 0x79,0x8b,0x8a,0x93,0xb0,0x7a,0x84,0xa5,0x67,0x73,0x99,0x5d,0x69,0x91,0x52,0x58, 0x83,0x53,0x4f,0x7a,0x54,0x50,0x79,0x52,0x4f,0x7a,0x52,0x50,0x7b,0x52,0x50,0x7c, 0x52,0x50,0x7b,0x52,0x4f,0x7b,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52, 0x4f,0x7a,0x52,0x4f,0x7a,0x57,0x63,0x8c,0x58,0x64,0x8d,0x57,0x63,0x8c,0x56,0x63, 0x8b,0x52,0x5d,0x86,0x58,0x52,0x79,0x97,0x9e,0xb3,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1d,0x17,0x1c,0x31,0x26,0x2e,0x2d, 0x22,0x29,0x2a,0x1f,0x26,0x23,0x1a,0x20,0x27,0x1f,0x24,0x56,0x55,0x5e,0x77,0x7c, 0x8e,0x7a,0x83,0x99,0x6d,0x75,0x91,0x6d,0x76,0x93,0x9b,0xa1,0xb3,0x48,0x48,0x48, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x4c,0x3f,0x4f,0x71,0x5c,0x73,0x56,0x43,0x53,0x63,0x5a,0x68,0xbe,0xc3, 0xd3,0x66,0x6a,0x76,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x04,0x03,0x04,0x20,0x18,0x1d,0x2c,0x21,0x27,0x29,0x1d,0x23,0x23,0x19, 0x1e,0x21,0x17,0x1b,0x1f,0x15,0x19,0x1e,0x15,0x19,0x1e,0x14,0x18,0x1d,0x14,0x17, 0x1a,0x12,0x15,0x1a,0x12,0x15,0x28,0x21,0x25,0x60,0x5e,0x65,0x89,0x8d,0x9e,0x84, 0x90,0xad,0x6a,0x76,0x9a,0x5a,0x65,0x8d,0x52,0x5c,0x85,0x54,0x50,0x79,0x5a,0x52, 0x79,0x5c,0x52,0x79,0x54,0x50,0x79,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a, 0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x55,0x62,0x8b,0x58,0x64,0x8c,0x56, 0x62,0x8b,0x56,0x62,0x8b,0x53,0x5e,0x88,0x5d,0x52,0x79,0x7f,0x87,0x9e,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x0b,0x09,0x0b,0x23,0x1c,0x22,0x2c,0x22,0x2a,0x27,0x1e,0x25,0x20,0x17,0x1d,0x1d, 0x15,0x1a,0x20,0x17,0x1b,0x3c,0x36,0x3d,0x66,0x63,0x6d,0x9b,0x99,0x9a,0x56,0x55, 0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x18,0x1f,0x78,0x67,0x83,0x72,0x5d,0x74,0x6b, 0x5e,0x70,0xba,0xc0,0xd1,0x79,0x7e,0x8d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18, 0x12,0x16,0x2e,0x22,0x2a,0x2e,0x21,0x28,0x25,0x1a,0x1f,0x21,0x17,0x1b,0x1d,0x14, 0x18,0x1d,0x13,0x17,0x1c,0x13,0x16,0x1a,0x11,0x14,0x18,0x10,0x12,0x18,0x10,0x12, 0x16,0x0e,0x10,0x32,0x2c,0x2f,0x62,0x63,0x6d,0x76,0x7c,0x94,0x6c,0x77,0x9c,0x54, 0x5f,0x89,0x52,0x4f,0x7a,0x64,0x53,0x75,0x64,0x4c,0x6a,0x64,0x50,0x71,0x60,0x53, 0x77,0x55,0x50,0x79,0x53,0x50,0x79,0x52,0x4f,0x7a,0x52,0x4f,0x7a,0x54,0x5f,0x89, 0x57,0x63,0x8c,0x57,0x63,0x8c,0x56,0x62,0x8b,0x52,0x5d,0x86,0x5b,0x52,0x79,0x84, 0x8a,0x9b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x16,0x11,0x15,0x1b,0x14,0x18,0x1b,0x14,0x19,0x1e,0x16,0x1b,0x1a,0x13,0x17,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2d,0x29,0x36, 0x77,0x69,0x89,0x7b,0x6c,0x84,0xb5,0xbc,0xcf,0x8d,0x93,0xa5,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0x09,0x0a,0x2f,0x23,0x2b,0x31, 0x24,0x2c,0x27,0x1c,0x22,0x20,0x16,0x1a,0x1d,0x14,0x17,0x1b,0x13,0x16,0x19,0x11, 0x13,0x17,0x0f,0x11,0x16,0x0e,0x11,0x14,0x0d,0x0f,0x12,0x0b,0x0d,0x11,0x0b,0x0c, 0x26,0x21,0x24,0x4f,0x50,0x5d,0x5b,0x63,0x7c,0x57,0x63,0x8c,0x53,0x4f,0x7a,0x64, 0x4c,0x6a,0x5f,0x47,0x63,0x5f,0x47,0x63,0x64,0x50,0x71,0x60,0x53,0x77,0x5a,0x52, 0x79,0x52,0x5d,0x88,0x56,0x62,0x8b,0x56,0x62,0x8b,0x52,0x5d,0x86,0x64,0x53,0x76, 0x52,0x58,0x84,0x7a,0x7d,0x85,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x2c,0x2c,0x3c,0x71,0x6e,0x90,0xaf,0xb7,0xca,0xa1,0xa8,0xbb, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x19,0x1f,0x32,0x25,0x2e,0x2c,0x20,0x26,0x21, 0x17,0x1b,0x1c,0x13,0x16,0x18,0x10,0x12,0x16,0x0e,0x11,0x15,0x0d,0x0f,0x12,0x0c, 0x0d,0x11,0x0b,0x0c,0x10,0x0a,0x0b,0x0f,0x09,0x0a,0x0e,0x08,0x09,0x1a,0x15,0x18, 0x3b,0x3c,0x49,0x47,0x4f,0x6a,0x50,0x53,0x7d,0x5d,0x52,0x79,0x63,0x4b,0x67,0x5c, 0x44,0x5e,0x5a,0x41,0x5c,0x63,0x53,0x77,0x52,0x50,0x7b,0x52,0x4f,0x7a,0x64,0x53, 0x75,0x62,0x4a,0x66,0x79,0x84,0xa5,0x60,0x61,0x62,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2c,0x2f,0x3e,0xa9,0xb1, 0xc6,0x49,0x4c,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x04,0x03,0x04,0x26,0x1d,0x24,0x2e,0x22,0x29,0x23,0x18,0x1d,0x1a,0x12,0x15,0x16, 0x0e,0x11,0x13,0x0c,0x0e,0x11,0x0b,0x0c,0x0f,0x09,0x0a,0x0e,0x08,0x09,0x0e,0x08, 0x09,0x0d,0x08,0x08,0x0d,0x08,0x08,0x0c,0x07,0x08,0x12,0x0e,0x0f,0x2a,0x2a,0x36, 0x42,0x48,0x64,0x4e,0x57,0x7e,0x60,0x53,0x77,0x55,0x50,0x79,0x55,0x50,0x79,0x5f, 0x53,0x77,0x60,0x53,0x77,0x5c,0x67,0x90,0xce,0xd2,0xde,0x1e,0x1e,0x1e,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x29,0x2a,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0a,0x08,0x09, 0x29,0x1f,0x26,0x2a,0x1e,0x24,0x1e,0x14,0x18,0x16,0x0f,0x11,0x11,0x0b,0x0c,0x0f, 0x09,0x0a,0x0e,0x08,0x09,0x0e,0x08,0x09,0x0d,0x08,0x08,0x0c,0x07,0x08,0x0c,0x07, 0x08,0x0e,0x08,0x09,0x0e,0x08,0x09,0x10,0x0a,0x0c,0x33,0x30,0x3d,0x68,0x67,0x81, 0x70,0x78,0x9a,0x6c,0x77,0x9c,0x74,0x80,0xa1,0xa7,0xaf,0xc4,0xcd,0xcd,0xce,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x0c,0x0f,0x2d,0x23,0x2a, 0x27,0x1b,0x21,0x1c,0x13,0x16,0x14,0x0c,0x0e,0x10,0x0a,0x0b,0x0d,0x08,0x09,0x0d, 0x08,0x08,0x0d,0x08,0x08,0x0d,0x08,0x09,0x0e,0x08,0x09,0x0f,0x09,0x0a,0x24,0x19, 0x1e,0x4c,0x3b,0x49,0x4f,0x3e,0x4c,0x6c,0x5f,0x70,0x93,0x8c,0xa0,0xca,0xcb,0xd2, 0x4b,0x4b,0x4b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x16,0x11,0x15,0x2a,0x1f,0x25,0x28,0x1d,0x23, 0x1d,0x14,0x17,0x15,0x0e,0x10,0x11,0x0b,0x0c,0x0f,0x09,0x0a,0x0f,0x09,0x0a,0x11, 0x0b,0x0c,0x3d,0x2e,0x38,0x68,0x53,0x68,0x75,0x64,0x7d,0x53,0x5b,0x77,0x35,0x39, 0x43,0x06,0x06,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x15,0x10,0x14,0x26,0x1c,0x22,0x2a,0x1f,0x24,0x21,0x17,0x1b, 0x23,0x18,0x1d,0x32,0x25,0x2d,0x49,0x50,0x68,0x21,0x23,0x29,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x08,0x06,0x08,0x19,0x14,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x00,0x00}; MilkyTracker-1.02.00/src/tracker/LogoBig.h000066400000000000000000000017051324432207300201730ustar00rootroot00000000000000/* * tracker/LogoBig.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #ifndef LOGOBIG__H #define LOGOBIG__H #include "BasicTypes.h" class LogoBig { public: static const pp_uint32 width; static const pp_uint32 height; static const pp_uint8 rawData[]; }; #endif MilkyTracker-1.02.00/src/tracker/LogoSmall.cpp000066400000000000000000026646451324432207300211210ustar00rootroot00000000000000/* * tracker/LogoSmall.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "LogoSmall.h" const pp_uint32 LogoSmall::width = 318; const pp_uint32 LogoSmall::height = 116; const pp_uint8 LogoSmall::rawData[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x02,0x00, 0x00,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x02,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00, 0x00,0x00,0x02,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x04,0x00, 0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00, 0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00, 0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00, 0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00, 0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00, 0x00,0x00,0x02,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00, 0x00,0x00,0x03,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x05,0x00, 0x00,0x00,0x05,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x05,0x00, 0x00,0x00,0x05,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x05,0x00, 0x00,0x00,0x05,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x05,0x00, 0x00,0x00,0x05,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x05,0x00, 0x00,0x00,0x05,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x04,0x00, 0x00,0x00,0x04,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x04,0x00, 0x00,0x00,0x05,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x05,0x00, 0x00,0x00,0x05,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x05,0x00, 0x00,0x00,0x05,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x05,0x00, 0x00,0x00,0x05,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x05,0x00, 0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00, 0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x05,0x00, 0x00,0x00,0x05,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x05,0x00, 0x00,0x00,0x05,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x05,0x00, 0x00,0x00,0x05,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x07,0x00, 0x00,0x00,0x08,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x09,0x00, 0x00,0x00,0x08,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x05,0x00, 0x00,0x00,0x05,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x05,0x00, 0x00,0x00,0x05,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x05,0x00, 0x00,0x00,0x05,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x05,0x00, 0x00,0x00,0x06,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x0b,0x00, 0x00,0x00,0x0c,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0e,0x00, 0x00,0x00,0x0e,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0e,0x00, 0x00,0x00,0x0e,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0e,0x00, 0x00,0x00,0x0e,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0e,0x00, 0x00,0x00,0x0e,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0d,0x00, 0x00,0x00,0x0b,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x04,0x00, 0x00,0x00,0x02,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x04,0x00, 0x00,0x00,0x06,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x0e,0x00, 0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00, 0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00, 0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00, 0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00, 0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00, 0x00,0x00,0x0f,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x09,0x00, 0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x07,0x00, 0x00,0x00,0x0a,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x10,0x00, 0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00, 0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00, 0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00, 0x00,0x00,0x10,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0d,0x00, 0x00,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00, 0x00,0x00,0x0f,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00, 0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00, 0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x11,0x00, 0x00,0x00,0x12,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x1b,0x00, 0x00,0x00,0x1c,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x15,0x00, 0x00,0x00,0x12,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00, 0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00, 0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00, 0x00,0x00,0x10,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x15,0x00, 0x00,0x00,0x19,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x23,0x00, 0x00,0x00,0x24,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x26,0x00, 0x00,0x00,0x26,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x26,0x00, 0x00,0x00,0x26,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x26,0x00, 0x00,0x00,0x26,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x26,0x00, 0x00,0x00,0x24,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x17,0x00, 0x00,0x00,0x10,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x02,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00, 0x00,0x00,0x05,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x18,0x00, 0x00,0x00,0x1f,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x27,0x00, 0x00,0x00,0x29,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x29,0x00, 0x00,0x00,0x29,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x29,0x00, 0x00,0x00,0x29,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x29,0x00, 0x00,0x00,0x29,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x29,0x00, 0x00,0x00,0x29,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x23,0x00, 0x00,0x00,0x1e,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x09,0x00, 0x00,0x00,0x04,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x07,0x00, 0x00,0x00,0x0c,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x20,0x00, 0x00,0x00,0x25,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x29,0x00, 0x00,0x00,0x29,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x29,0x00, 0x00,0x00,0x29,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x29,0x00, 0x00,0x00,0x29,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x27,0x00, 0x00,0x00,0x26,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x21,0x00, 0x00,0x00,0x22,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x27,0x00, 0x00,0x00,0x28,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x29,0x00, 0x00,0x00,0x29,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x29,0x00, 0x00,0x00,0x29,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x30,0x00, 0x00,0x00,0x36,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x3b,0x00, 0x00,0x00,0x37,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x2a,0x00, 0x00,0x00,0x29,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x29,0x00, 0x00,0x00,0x29,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x29,0x00, 0x00,0x00,0x29,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x2a,0x00, 0x00,0x00,0x2d,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x40,0x00, 0x00,0x00,0x46,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x4e,0x00, 0x00,0x00,0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x4f,0x00, 0x00,0x00,0x4f,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x4f,0x00, 0x00,0x00,0x4f,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x4f,0x00, 0x00,0x00,0x4e,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x48,0x00, 0x00,0x00,0x3f,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x18,0x00, 0x00,0x00,0x0c,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x02,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x17,0x00, 0x00,0x00,0x25,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x4a,0x00, 0x00,0x00,0x4f,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x53,0x00, 0x00,0x00,0x54,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x54,0x00, 0x00,0x00,0x54,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x54,0x00, 0x00,0x00,0x54,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x54,0x00, 0x00,0x00,0x54,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x52,0x00, 0x00,0x00,0x4f,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x31,0x00, 0x00,0x00,0x21,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x04,0x00, 0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x05,0x00, 0x00,0x00,0x0a,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x2a,0x00, 0x00,0x00,0x37,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x50,0x00, 0x00,0x00,0x53,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x54,0x00, 0x00,0x00,0x54,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x54,0x00, 0x00,0x00,0x54,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x52,0x00, 0x00,0x00,0x52,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x49,0x00, 0x00,0x00,0x45,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x4b,0x00, 0x00,0x00,0x4e,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0x53,0x00, 0x00,0x00,0x54,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x54,0x00, 0x00,0x00,0x54,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x56,0x00, 0x00,0x00,0x59,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x69,0x00, 0x00,0x00,0x6d,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x5e,0x00, 0x00,0x00,0x59,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x54,0x00, 0x00,0x00,0x54,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x54,0x00, 0x00,0x00,0x54,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x54,0x00, 0x00,0x00,0x54,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x5e,0x00, 0x00,0x00,0x68,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x7e,0x00, 0x00,0x00,0x81,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x83,0x00, 0x00,0x00,0x83,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x83,0x00, 0x00,0x00,0x83,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x83,0x00, 0x00,0x00,0x83,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x82,0x00, 0x00,0x00,0x7f,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x59,0x00, 0x00,0x00,0x43,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x0b,0x00, 0x00,0x00,0x04,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x0b,0x00, 0x00,0x00,0x18,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x5b,0x00, 0x00,0x00,0x6f,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x87,0x00, 0x00,0x00,0x89,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x89,0x00, 0x00,0x00,0x89,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x89,0x00, 0x00,0x00,0x89,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x89,0x00, 0x00,0x00,0x89,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x89,0x00, 0x00,0x00,0x89,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x7b,0x00, 0x00,0x00,0x6b,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x23,0x00, 0x00,0x00,0x12,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00, 0x00,0x00,0x06,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x25,0x00, 0x00,0x00,0x38,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x74,0x00, 0x00,0x00,0x7f,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x89,0x00, 0x00,0x00,0x89,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x89,0x00, 0x00,0x00,0x89,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x89,0x00, 0x00,0x00,0x89,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x86,0x00, 0x00,0x00,0x81,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x78,0x00, 0x00,0x00,0x7a,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x87,0x00, 0x00,0x00,0x89,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x89,0x00, 0x00,0x00,0x89,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x8a,0x00, 0x00,0x00,0x8a,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x93,0x00, 0x00,0x00,0x99,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0xa0,0x00, 0x00,0x00,0x9b,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x8b,0x00, 0x00,0x00,0x8a,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x89,0x00, 0x00,0x00,0x89,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x89,0x00, 0x00,0x00,0x89,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x8b,0x00, 0x00,0x00,0x8e,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0xa6,0x00, 0x00,0x00,0xae,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0xb7,0x00, 0x00,0x00,0xb7,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0xb7,0x00, 0x00,0x00,0xb7,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0xb7,0x00, 0x00,0x00,0xb7,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0xb7,0x00, 0x00,0x00,0xb7,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xab,0x00, 0x00,0x00,0x9c,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x45,0x00, 0x00,0x00,0x28,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x03,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00, 0x00,0x00,0x08,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x43,0x00, 0x00,0x00,0x64,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0xad,0x00, 0x00,0x00,0xb5,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0xbb,0x00, 0x00,0x00,0xbb,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0xbb,0x00, 0x00,0x00,0xbb,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0xbb,0x00, 0x00,0x00,0xbb,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0xbb,0x00, 0x00,0x00,0xbb,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0xb9,0x00, 0x00,0x00,0xb4,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x78,0x00, 0x00,0x00,0x56,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x0c,0x00, 0x00,0x00,0x04,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x02,0x00, 0x00,0x00,0x05,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x1d,0x00, 0x00,0x00,0x2e,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x78,0x00, 0x00,0x00,0x91,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0xb7,0x00, 0x00,0x00,0xba,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0xbb,0x00, 0x00,0x00,0xbb,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0xbb,0x00, 0x00,0x00,0xbb,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0xbb,0x00, 0x00,0x00,0xba,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xaf,0x00, 0x00,0x00,0xab,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0xb2,0x00, 0x00,0x00,0xb6,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0xbb,0x00, 0x00,0x00,0xbb,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0xbb,0x00, 0x00,0x00,0xbb,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0xbd,0x00, 0x00,0x00,0xbf,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0xcc,0x00, 0x00,0x00,0xce,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0xc3,0x00, 0x00,0x00,0xbf,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0xbb,0x00, 0x00,0x00,0xbb,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0xbb,0x00, 0x00,0x00,0xbb,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0xbb,0x00, 0x00,0x00,0xbc,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xc4,0x00, 0x00,0x00,0xca,0x01,0x00,0x00,0xd1,0x0f,0x0b,0x0b,0xd6,0x14,0x0f,0x0e,0xda,0x14, 0x0f,0x0e,0xdc,0x14,0x0f,0x0e,0xdd,0x14,0x0f,0x0e,0xdd,0x14,0x0f,0x0e,0xdd,0x14, 0x0f,0x0e,0xdd,0x14,0x0f,0x0e,0xdd,0x14,0x0f,0x0e,0xdd,0x14,0x0f,0x0e,0xdd,0x14, 0x0f,0x0e,0xdd,0x14,0x0f,0x0e,0xdd,0x15,0x10,0x0e,0xdd,0x16,0x11,0x10,0xdd,0x11, 0x10,0x12,0xdd,0x13,0x0f,0x0d,0xdd,0x14,0x0f,0x0e,0xdd,0x14,0x0f,0x0e,0xdc,0x14, 0x0f,0x0e,0xd9,0x12,0x0e,0x0d,0xd2,0x06,0x04,0x04,0xc3,0x00,0x00,0x00,0xa9,0x00, 0x00,0x00,0x86,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x1e,0x00, 0x00,0x00,0x0d,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00, 0x00,0x00,0x35,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0xa7,0x00, 0x00,0x00,0xc2,0x14,0x13,0x12,0xd2,0x62,0x53,0x4e,0xda,0x8f,0x71,0x69,0xde,0x7f, 0x60,0x58,0xe0,0x7e,0x60,0x58,0xe0,0x80,0x62,0x59,0xe0,0x7f,0x61,0x59,0xe0,0x7e, 0x60,0x58,0xe0,0x7e,0x60,0x58,0xe0,0x7e,0x60,0x57,0xe0,0x7e,0x60,0x57,0xe0,0x7e, 0x60,0x58,0xe0,0x7e,0x60,0x58,0xe0,0x7e,0x60,0x58,0xe0,0x7f,0x61,0x59,0xe0,0x7f, 0x61,0x59,0xe0,0x7e,0x60,0x58,0xe0,0x86,0x65,0x5c,0xe0,0x4f,0x45,0x41,0xe0,0x55, 0x48,0x45,0xe0,0x8d,0x6a,0x60,0xde,0x5a,0x44,0x3e,0xd9,0x11,0x0d,0x0c,0xce,0x00, 0x00,0x00,0xb8,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x45,0x00, 0x00,0x00,0x24,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x04,0x00, 0x00,0x00,0x03,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x16,0x00, 0x00,0x00,0x25,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x6a,0x00, 0x00,0x00,0x87,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xbb,0x1f,0x1f,0x1e,0xcc,0x3a, 0x38,0x37,0xd7,0x7e,0x6b,0x64,0xdd,0x8d,0x72,0x69,0xdf,0x83,0x66,0x5e,0xe0,0x82, 0x64,0x5c,0xe0,0x81,0x64,0x5b,0xe0,0x81,0x64,0x5b,0xe0,0x81,0x63,0x5b,0xe0,0x81, 0x63,0x5b,0xe0,0x82,0x64,0x5c,0xe0,0x82,0x63,0x5a,0xe0,0x80,0x63,0x5a,0xe0,0x72, 0x55,0x5b,0xe0,0x7d,0x5f,0x5b,0xe0,0x81,0x63,0x5a,0xde,0x87,0x67,0x5e,0xde,0x4d, 0x3a,0x3d,0xda,0x09,0x07,0x08,0xd7,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0xd4,0x00, 0x00,0x00,0xd5,0x00,0x00,0x00,0xd8,0x77,0x60,0x59,0xdc,0x85,0x67,0x5e,0xde,0x7e, 0x60,0x58,0xe0,0x7f,0x61,0x59,0xe0,0x7e,0x60,0x58,0xe0,0x7f,0x61,0x59,0xe0,0x7e, 0x60,0x58,0xe0,0x7f,0x61,0x59,0xe0,0x7e,0x60,0x58,0xe0,0x7e,0x60,0x58,0xe0,0x7f, 0x61,0x59,0xe0,0x7e,0x60,0x58,0xe1,0x7e,0x60,0x58,0xe2,0x82,0x63,0x5b,0xe4,0x4e, 0x43,0x3c,0xe6,0x67,0x53,0x4a,0xe8,0x87,0x6c,0x64,0xea,0x80,0x62,0x59,0xe8,0x7f, 0x61,0x59,0xe6,0x7e,0x60,0x58,0xe4,0x7e,0x60,0x58,0xe2,0x7f,0x61,0x59,0xe1,0x7e, 0x60,0x58,0xe0,0x7f,0x61,0x59,0xe0,0x7e,0x60,0x58,0xe0,0x7e,0x60,0x57,0xe0,0x7f, 0x61,0x59,0xe0,0x7e,0x60,0x58,0xe0,0x7e,0x60,0x58,0xe0,0x7e,0x60,0x58,0xe0,0x7e, 0x60,0x58,0xe0,0x7e,0x60,0x58,0xe0,0x7e,0x60,0x58,0xe0,0x7b,0x5e,0x56,0xe1,0x06, 0x05,0x04,0xe2,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0xe7,0x05,0x04,0x03,0xeb,0x69, 0x50,0x49,0xee,0x8c,0x6d,0x63,0xf0,0x86,0x67,0x5e,0xf1,0x85,0x66,0x5d,0xf2,0x86, 0x66,0x5d,0xf2,0x85,0x66,0x5d,0xf2,0x85,0x66,0x5d,0xf2,0x86,0x67,0x5e,0xf2,0x85, 0x66,0x5d,0xf2,0x85,0x66,0x5d,0xf2,0x85,0x66,0x5d,0xf2,0x86,0x66,0x5d,0xf2,0x79, 0x5f,0x56,0xf2,0x22,0x2a,0x24,0xf2,0x50,0x48,0x4c,0xf2,0x92,0x73,0x68,0xf2,0x84, 0x64,0x5b,0xf2,0x85,0x66,0x5d,0xf1,0x86,0x67,0x5d,0xef,0x80,0x61,0x59,0xe9,0x47, 0x37,0x32,0xdb,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x75,0x00, 0x00,0x00,0x4a,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x08,0x00, 0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00, 0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00, 0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x02,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x06,0x00, 0x00,0x00,0x0f,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x6c,0x00, 0x00,0x00,0x9a,0x00,0x00,0x00,0xc0,0x36,0x31,0x2e,0xda,0x9c,0x88,0x80,0xe9,0xb0, 0x8e,0x83,0xf0,0xa5,0x7e,0x73,0xf2,0x9f,0x79,0x6f,0xf3,0xa0,0x7b,0x70,0xf3,0xa0, 0x7a,0x6f,0xf3,0xa0,0x7a,0x6f,0xf3,0x9f,0x7b,0x70,0xf3,0x9f,0x7a,0x6f,0xf3,0xa0, 0x79,0x70,0xf3,0x9f,0x7a,0x6f,0xf3,0xa0,0x7b,0x70,0xf3,0x9f,0x7a,0x6f,0xf3,0x9f, 0x7a,0x6f,0xf3,0xa0,0x7b,0x70,0xf3,0xa0,0x7b,0x70,0xf3,0xa1,0x7c,0x70,0xf3,0xa5, 0x7a,0x75,0xf3,0x50,0x47,0x43,0xf3,0x6a,0x61,0x57,0xf3,0xb7,0x8f,0x7f,0xf1,0x93, 0x71,0x75,0xec,0x3a,0x32,0x3a,0xe2,0x00,0x02,0x00,0xcc,0x00,0x00,0x00,0xab,0x00, 0x00,0x00,0x80,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x17,0x00, 0x00,0x00,0x0b,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x10,0x00, 0x00,0x00,0x1b,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x5c,0x00, 0x00,0x00,0x78,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0xc8,0x3c, 0x3a,0x39,0xda,0x9c,0x89,0x82,0xe6,0xa3,0x86,0x7c,0xed,0xa1,0x7f,0x74,0xf1,0xa3, 0x7d,0x73,0xf3,0xa1,0x7b,0x71,0xf3,0xa1,0x7b,0x71,0xf3,0xa0,0x7a,0x70,0xf3,0xa1, 0x7b,0x71,0xf3,0xa1,0x7b,0x70,0xf3,0xa1,0x7b,0x6f,0xf3,0x9b,0x78,0x6e,0xf3,0xa1, 0x7b,0x71,0xf3,0x71,0x5f,0x64,0xf3,0x91,0x70,0x6d,0xf3,0xa1,0x7a,0x71,0xf3,0xa0, 0x7b,0x70,0xf2,0xa7,0x7f,0x71,0xf1,0x7e,0x63,0x6f,0xf0,0x13,0x0f,0x13,0xee,0x00, 0x00,0x00,0xed,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0xee,0x42,0x3a,0x37,0xf0,0x9d, 0x7c,0x71,0xf1,0xa4,0x7e,0x72,0xf2,0xa0,0x7a,0x70,0xf3,0xa0,0x7a,0x6f,0xf3,0x9f, 0x7a,0x6f,0xf3,0xa0,0x7b,0x70,0xf3,0xa0,0x7a,0x70,0xf3,0xa0,0x7b,0x70,0xf3,0xa0, 0x7a,0x70,0xf3,0xa0,0x7a,0x70,0xf3,0xa0,0x7b,0x70,0xf3,0xa0,0x7b,0x70,0xf3,0xa0, 0x7b,0x70,0xf4,0x9c,0x79,0x6e,0xf5,0x57,0x4d,0x43,0xf6,0xb3,0x99,0x8e,0xf7,0xb3, 0x91,0x86,0xf7,0xa6,0x80,0x75,0xf7,0xa0,0x7a,0x70,0xf6,0xa0,0x7b,0x70,0xf5,0xa0, 0x7b,0x70,0xf4,0xa0,0x7b,0x70,0xf3,0xa0,0x7a,0x6f,0xf3,0xa0,0x7b,0x70,0xf3,0xa1, 0x7b,0x70,0xf3,0xa0,0x7a,0x70,0xf3,0xa1,0x7b,0x70,0xf3,0xa0,0x7a,0x70,0xf3,0xa0, 0x7a,0x70,0xf3,0xa0,0x7a,0x6f,0xf3,0x9f,0x7a,0x6f,0xf3,0xa0,0x7b,0x70,0xf3,0xa0, 0x7b,0x70,0xf3,0x9d,0x78,0x6d,0xf3,0x1e,0x17,0x16,0xf4,0x00,0x00,0x00,0xf5,0x00, 0x00,0x00,0xf6,0x06,0x04,0x04,0xf8,0x7d,0x5d,0x5e,0xf9,0xb1,0x8e,0x82,0xfa,0xa7, 0x80,0x75,0xfb,0xa5,0x80,0x75,0xfb,0xa5,0x7f,0x75,0xfb,0xa1,0x7c,0x70,0xfb,0x9e, 0x78,0x6e,0xfb,0x9e,0x79,0x6e,0xfb,0x9f,0x79,0x6f,0xfb,0x9e,0x79,0x6e,0xfb,0x9f, 0x79,0x6f,0xfb,0x94,0x72,0x69,0xfb,0x34,0x39,0x33,0xfb,0x36,0x3b,0x33,0xfb,0xb0, 0x91,0x88,0xfb,0xba,0x9e,0x94,0xfb,0x9c,0x76,0x6b,0xfb,0x9f,0x7a,0x6f,0xfb,0x9e, 0x79,0x6e,0xf9,0xa0,0x79,0x6f,0xf5,0x80,0x62,0x59,0xea,0x01,0x00,0x00,0xd5,0x00, 0x00,0x00,0xb5,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x37,0x00, 0x00,0x00,0x1c,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00, 0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00, 0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00, 0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00, 0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00, 0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00, 0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00, 0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00, 0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00, 0x00,0x00,0x04,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x03,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x09,0x00, 0x00,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00, 0x00,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x09,0x00, 0x00,0x00,0x08,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x03,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x03,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x2c,0x00, 0x00,0x00,0x50,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0xa9,0x1c,0x1a,0x19,0xcf,0x7d, 0x6f,0x6a,0xe7,0xa5,0x8a,0x80,0xf4,0x8f,0x70,0x68,0xf9,0x90,0x6f,0x68,0xfc,0x9a, 0x76,0x6b,0xfc,0x9a,0x76,0x6b,0xfc,0x99,0x75,0x6b,0xfc,0x9a,0x76,0x6b,0xfc,0x9a, 0x76,0x6b,0xfc,0x99,0x75,0x6b,0xfc,0x98,0x74,0x6a,0xfc,0x98,0x74,0x6a,0xfc,0x99, 0x75,0x6b,0xfc,0x99,0x75,0x6b,0xfc,0x99,0x75,0x6b,0xfc,0x99,0x75,0x6b,0xfc,0x99, 0x75,0x6b,0xfc,0x9e,0x78,0x6b,0xfc,0x89,0x6b,0x71,0xfc,0x34,0x37,0x3c,0xfc,0x62, 0x58,0x4b,0xfc,0xb1,0x86,0x7d,0xfa,0x70,0x5d,0x5c,0xf7,0x2f,0x33,0x32,0xee,0x0c, 0x0e,0x0c,0xdb,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x62,0x00, 0x00,0x00,0x3a,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x10,0x00, 0x00,0x00,0x16,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x4d,0x00, 0x00,0x00,0x68,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xbd,0x04, 0x03,0x04,0xd2,0x07,0x07,0x09,0xe2,0x7f,0x69,0x64,0xed,0xaa,0x86,0x7b,0xf5,0x9c, 0x77,0x6d,0xf9,0x99,0x74,0x6a,0xfb,0x98,0x74,0x69,0xfc,0x99,0x75,0x6b,0xfc,0x9a, 0x76,0x6b,0xfc,0x99,0x75,0x6b,0xfc,0x9a,0x76,0x6b,0xfc,0x98,0x74,0x6b,0xfc,0x9a, 0x74,0x6b,0xfc,0x6c,0x59,0x5d,0xfc,0x70,0x5c,0x6c,0xfc,0x8f,0x6f,0x6c,0xfc,0x9a, 0x76,0x6b,0xfc,0x99,0x75,0x6a,0xfc,0x97,0x74,0x6a,0xfc,0xa6,0x7d,0x70,0xfb,0x55, 0x4a,0x4c,0xfb,0x09,0x09,0x0b,0xfa,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0xf9,0x13, 0x11,0x11,0xfa,0x94,0x79,0x70,0xfb,0xa0,0x7c,0x71,0xfb,0x9a,0x76,0x6b,0xfc,0x99, 0x75,0x6b,0xfc,0x99,0x75,0x6b,0xfc,0x99,0x75,0x6b,0xfc,0x99,0x75,0x6b,0xfc,0x99, 0x75,0x6b,0xfc,0x99,0x75,0x6b,0xfc,0x99,0x75,0x6b,0xfc,0x99,0x75,0x6b,0xfc,0x9a, 0x76,0x6b,0xfc,0x99,0x75,0x6b,0xfc,0x9d,0x78,0x6d,0xfc,0x64,0x54,0x4e,0xfc,0x4a, 0x45,0x3d,0xfc,0x9b,0x86,0x7e,0xfc,0x9e,0x86,0x7f,0xfd,0xa0,0x85,0x80,0xfc,0x9c, 0x7a,0x70,0xfc,0x99,0x75,0x6b,0xfc,0x9a,0x76,0x6b,0xfc,0x99,0x75,0x6b,0xfc,0x9a, 0x76,0x6b,0xfc,0x99,0x75,0x6b,0xfc,0x99,0x75,0x6b,0xfc,0x9a,0x76,0x6b,0xfc,0x99, 0x75,0x6b,0xfc,0x99,0x75,0x6b,0xfc,0x99,0x75,0x6b,0xfc,0x9a,0x76,0x6b,0xfc,0x99, 0x75,0x6b,0xfc,0x9a,0x76,0x6b,0xfc,0x9a,0x76,0x6b,0xfc,0x97,0x74,0x69,0xfc,0x26, 0x1c,0x1a,0xfc,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0xfc,0x04,0x03,0x04,0xfd,0x5e, 0x48,0x51,0xfd,0x90,0x74,0x69,0xfe,0x8b,0x6e,0x64,0xfe,0x8a,0x6c,0x63,0xfe,0x82, 0x67,0x5f,0xfe,0x9c,0x79,0x71,0xfe,0x9a,0x76,0x6b,0xfe,0x98,0x74,0x6a,0xfe,0x99, 0x75,0x6b,0xfe,0x99,0x75,0x6b,0xfe,0x99,0x74,0x6a,0xfe,0x90,0x6f,0x66,0xfe,0x49, 0x45,0x49,0xfe,0x72,0x60,0x6b,0xfe,0xbe,0xa2,0x97,0xfe,0xad,0x8f,0x86,0xfe,0x98, 0x73,0x68,0xfe,0x9a,0x76,0x6b,0xfe,0x9a,0x76,0x6b,0xfd,0x9a,0x75,0x6b,0xfa,0x90, 0x6f,0x65,0xf2,0x3e,0x30,0x2b,0xe1,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x9c,0x00, 0x00,0x00,0x71,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x11,0x00, 0x00,0x00,0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00, 0x00,0x00,0x05,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x0b,0x00, 0x00,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x0c,0x00, 0x00,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00, 0x00,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00, 0x00,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00, 0x00,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00, 0x00,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00, 0x00,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x0d,0x00, 0x00,0x00,0x0d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x09,0x00, 0x00,0x00,0x07,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x02,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x0c,0x00, 0x00,0x00,0x12,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x1d,0x00, 0x00,0x00,0x1e,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x1e,0x00, 0x00,0x00,0x1d,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x12,0x00, 0x00,0x00,0x0c,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x02,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x0f,0x00, 0x00,0x00,0x1e,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x8c,0x00, 0x00,0x00,0xb7,0x12,0x11,0x12,0xd8,0x3e,0x3b,0x3d,0xed,0x45,0x43,0x47,0xf8,0x51, 0x4a,0x53,0xfc,0x7e,0x65,0x64,0xfe,0x9e,0x78,0x6c,0xfe,0x9a,0x76,0x6b,0xfe,0x9a, 0x76,0x6b,0xfe,0x9a,0x76,0x6c,0xfe,0x99,0x75,0x6c,0xfe,0x99,0x75,0x6b,0xfe,0x9a, 0x76,0x6c,0xfe,0x99,0x75,0x6b,0xfe,0x99,0x75,0x6a,0xfe,0x9a,0x76,0x6c,0xfe,0x99, 0x75,0x6c,0xfe,0x99,0x75,0x6c,0xfe,0x9c,0x77,0x6b,0xfe,0x99,0x76,0x6d,0xfe,0x7b, 0x62,0x6f,0xfe,0x48,0x44,0x52,0xfe,0x78,0x63,0x5a,0xfe,0x99,0x75,0x77,0xfe,0x4e, 0x48,0x4e,0xfb,0x2f,0x37,0x30,0xf4,0x15,0x17,0x15,0xe4,0x00,0x00,0x00,0xc7,0x00, 0x00,0x00,0x9f,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x2b,0x00, 0x00,0x00,0x1e,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x3f,0x00, 0x00,0x00,0x59,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0xae,0x00, 0x00,0x00,0xc7,0x20,0x1d,0x19,0xdb,0x4f,0x41,0x49,0xe9,0x6e,0x53,0x66,0xf3,0xa7, 0x8a,0x8a,0xf8,0xa5,0x82,0x76,0xfb,0x99,0x74,0x69,0xfe,0x9a,0x76,0x6b,0xfe,0x99, 0x75,0x6b,0xfe,0x99,0x75,0x6b,0xfe,0x9a,0x76,0x6b,0xfe,0x9a,0x76,0x6b,0xfe,0x9c, 0x78,0x6a,0xfe,0x8a,0x69,0x71,0xfe,0x87,0x65,0x6c,0xfe,0x91,0x6c,0x69,0xfe,0x99, 0x74,0x6b,0xfe,0x9b,0x77,0x6b,0xfe,0x9a,0x76,0x6b,0xfe,0x9a,0x76,0x6b,0xfe,0x9c, 0x78,0x6b,0xfe,0x97,0x74,0x6d,0xfe,0x49,0x42,0x43,0xfe,0x07,0x08,0x09,0xfe,0x00, 0x00,0x00,0xfe,0x00,0x00,0x00,0xfe,0x81,0x6f,0x69,0xfe,0xa2,0x80,0x76,0xfe,0x9a, 0x76,0x6c,0xfe,0x99,0x75,0x6b,0xfe,0x99,0x75,0x6b,0xfe,0x99,0x75,0x6b,0xfe,0x99, 0x75,0x6a,0xfe,0x98,0x74,0x6a,0xfe,0x9a,0x76,0x6c,0xfe,0x99,0x75,0x6b,0xfe,0x9a, 0x76,0x6c,0xfe,0x9a,0x76,0x6b,0xfe,0x9a,0x76,0x6b,0xfe,0x99,0x75,0x6b,0xfe,0xa4, 0x7c,0x6f,0xfe,0x4e,0x47,0x4a,0xfe,0x3b,0x3f,0x3c,0xfe,0x2b,0x2c,0x2c,0xfe,0x2a, 0x2a,0x2b,0xff,0x50,0x45,0x52,0xfe,0xa4,0x85,0x7b,0xfe,0x9a,0x76,0x6c,0xfe,0x9a, 0x76,0x6b,0xfe,0x99,0x75,0x6b,0xfe,0x9a,0x76,0x6b,0xfe,0x9a,0x76,0x6b,0xfe,0x9a, 0x76,0x6b,0xfe,0x99,0x75,0x6b,0xfe,0x9a,0x76,0x6b,0xfe,0x9a,0x76,0x6b,0xfe,0x9a, 0x76,0x6b,0xfe,0x9a,0x76,0x6b,0xfe,0x9a,0x76,0x6b,0xfe,0x9a,0x76,0x6b,0xfe,0x9a, 0x76,0x6b,0xfe,0x96,0x73,0x69,0xfe,0x2c,0x21,0x1e,0xfe,0x00,0x00,0x00,0xfe,0x00, 0x00,0x00,0xfe,0x01,0x02,0x01,0xff,0x1f,0x21,0x20,0xff,0x29,0x2d,0x29,0xff,0x23, 0x28,0x23,0xff,0x23,0x27,0x25,0xff,0x28,0x29,0x29,0xff,0x80,0x61,0x6c,0xff,0xa2, 0x7e,0x73,0xff,0x9a,0x75,0x6a,0xff,0x98,0x74,0x6a,0xff,0x98,0x74,0x6a,0xff,0x99, 0x75,0x6b,0xff,0x99,0x75,0x6b,0xff,0x97,0x72,0x6a,0xff,0x8c,0x6c,0x77,0xff,0xb9, 0x9d,0x90,0xff,0x9a,0x76,0x6c,0xff,0x99,0x74,0x6b,0xff,0x98,0x74,0x6a,0xff,0x99, 0x75,0x6b,0xfe,0x99,0x75,0x6b,0xfc,0x9a,0x76,0x6c,0xf6,0x75,0x59,0x52,0xe9,0x00, 0x00,0x00,0xd3,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x58,0x00, 0x00,0x00,0x33,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x03,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00, 0x00,0x00,0x05,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x13,0x00, 0x00,0x00,0x19,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x21,0x00, 0x00,0x00,0x21,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x21,0x00, 0x00,0x00,0x21,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x21,0x00, 0x00,0x00,0x21,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x21,0x00, 0x00,0x00,0x21,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x21,0x00, 0x00,0x00,0x21,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x21,0x00, 0x00,0x00,0x21,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x21,0x00, 0x00,0x00,0x21,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x1f,0x00, 0x00,0x00,0x1d,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x10,0x00, 0x00,0x00,0x0b,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x08,0x00, 0x00,0x00,0x10,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x33,0x00, 0x00,0x00,0x3b,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x42,0x00, 0x00,0x00,0x42,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3a,0x00, 0x00,0x00,0x33,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x11,0x00, 0x00,0x00,0x09,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x07,0x00, 0x00,0x00,0x0e,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x4e,0x00, 0x00,0x00,0x75,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0xc6,0x11,0x12,0x13,0xe2,0x41, 0x3e,0x46,0xf3,0x61,0x54,0x60,0xfb,0x8b,0x6e,0x6e,0xfd,0xa1,0x7b,0x6f,0xff,0x9a, 0x76,0x6c,0xff,0x9a,0x76,0x6c,0xff,0x9a,0x76,0x6b,0xff,0x9a,0x76,0x6b,0xff,0x9a, 0x76,0x6c,0xff,0x9a,0x76,0x6b,0xff,0x9a,0x76,0x6c,0xff,0x9a,0x76,0x6c,0xff,0x9a, 0x76,0x6b,0xff,0x9a,0x76,0x6b,0xff,0x9a,0x76,0x6c,0xff,0x9b,0x77,0x6d,0xff,0x99, 0x74,0x6c,0xff,0x88,0x68,0x6d,0xff,0x80,0x69,0x75,0xff,0x5e,0x55,0x5d,0xff,0x75, 0x61,0x62,0xff,0x7a,0x64,0x6b,0xff,0x3f,0x3f,0x44,0xfd,0x33,0x3a,0x34,0xf7,0x20, 0x24,0x20,0xeb,0x04,0x05,0x04,0xd3,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x85,0x00, 0x00,0x00,0x5c,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x37,0x00, 0x00,0x00,0x4a,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x9f,0x00, 0x00,0x00,0xb9,0x07,0x07,0x07,0xcf,0x42,0x3b,0x38,0xe1,0x9b,0x82,0x76,0xed,0x95, 0x77,0x81,0xf5,0x82,0x61,0x72,0xfa,0xa0,0x80,0x7c,0xfc,0xa0,0x7d,0x72,0xfe,0x99, 0x75,0x6a,0xff,0x9a,0x76,0x6b,0xff,0x9a,0x76,0x6b,0xff,0x9a,0x76,0x6b,0xff,0x9a, 0x76,0x6b,0xff,0x9a,0x76,0x6c,0xff,0x9e,0x79,0x6a,0xff,0x84,0x67,0x75,0xff,0x99, 0x79,0x76,0xff,0x9d,0x79,0x6e,0xff,0x9a,0x76,0x6c,0xff,0x9a,0x76,0x6c,0xff,0x9a, 0x76,0x6b,0xff,0x9a,0x76,0x6b,0xff,0xa0,0x77,0x70,0xff,0x61,0x53,0x5a,0xff,0x3e, 0x3b,0x40,0xff,0x09,0x09,0x09,0xff,0x00,0x00,0x00,0xff,0x53,0x45,0x40,0xff,0xad, 0x8c,0x82,0xff,0xae,0x89,0x7d,0xff,0xa8,0x83,0x78,0xff,0xa8,0x84,0x79,0xff,0xa8, 0x83,0x78,0xff,0xa8,0x84,0x79,0xff,0xa9,0x84,0x79,0xff,0xa9,0x84,0x79,0xff,0xaa, 0x85,0x7a,0xff,0xaa,0x85,0x79,0xff,0xaa,0x85,0x7a,0xff,0xaa,0x85,0x7a,0xff,0xa6, 0x81,0x76,0xff,0xa6,0x7f,0x73,0xff,0x93,0x73,0x70,0xff,0x35,0x39,0x33,0xff,0x31, 0x37,0x33,0xff,0x30,0x34,0x30,0xff,0x27,0x2e,0x28,0xff,0x54,0x44,0x51,0xff,0xa3, 0x84,0x7b,0xff,0x9b,0x77,0x6d,0xff,0x9a,0x76,0x6c,0xff,0x9a,0x76,0x6b,0xff,0x9a, 0x76,0x6b,0xff,0x9a,0x76,0x6c,0xff,0x9a,0x76,0x6b,0xff,0x9a,0x76,0x6b,0xff,0x9a, 0x76,0x6b,0xff,0x9a,0x76,0x6b,0xff,0x9a,0x76,0x6b,0xff,0x9a,0x76,0x6b,0xff,0x9a, 0x76,0x6c,0xff,0x9a,0x76,0x6b,0xff,0x9a,0x76,0x6b,0xff,0x98,0x74,0x6a,0xff,0x34, 0x28,0x25,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x01,0x02,0x02,0xff,0x21, 0x24,0x22,0xff,0x34,0x39,0x34,0xff,0x30,0x36,0x30,0xff,0x32,0x38,0x32,0xff,0x30, 0x31,0x30,0xff,0x66,0x53,0x62,0xff,0x9b,0x7c,0x70,0xff,0x9a,0x76,0x6b,0xff,0x9a, 0x76,0x6b,0xff,0x9a,0x76,0x6c,0xff,0x9a,0x76,0x6b,0xff,0x9a,0x76,0x6b,0xff,0x99, 0x75,0x6b,0xff,0x8f,0x6c,0x6f,0xff,0xa0,0x81,0x7d,0xff,0xa0,0x7e,0x72,0xff,0x99, 0x75,0x6a,0xff,0x99,0x75,0x6b,0xff,0x99,0x75,0x6b,0xff,0x99,0x75,0x6b,0xfe,0x9c, 0x78,0x6d,0xfa,0x8d,0x6b,0x62,0xf0,0x2b,0x21,0x1e,0xde,0x00,0x00,0x00,0xc0,0x00, 0x00,0x00,0x98,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x24,0x00, 0x00,0x00,0x10,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x02,0x00, 0x00,0x00,0x04,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x15,0x00, 0x00,0x00,0x21,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x3d,0x00, 0x00,0x00,0x42,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x46,0x00, 0x00,0x00,0x46,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x46,0x00, 0x00,0x00,0x46,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x46,0x00, 0x00,0x00,0x46,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x46,0x00, 0x00,0x00,0x46,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x46,0x00, 0x00,0x00,0x46,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x46,0x00, 0x00,0x00,0x46,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x46,0x00, 0x00,0x00,0x45,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x39,0x00, 0x00,0x00,0x31,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x12,0x00, 0x00,0x00,0x0a,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00, 0x00,0x00,0x07,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x33,0x00, 0x00,0x00,0x48,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x70,0x00, 0x00,0x00,0x73,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x72,0x00, 0x00,0x00,0x6f,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,0x4a,0x00, 0x00,0x00,0x36,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x09,0x00, 0x00,0x00,0x04,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x04,0x00, 0x00,0x00,0x09,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x30,0x00, 0x00,0x00,0x4b,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0xb7,0x00, 0x00,0x00,0xd6,0x17,0x13,0x12,0xea,0x68,0x55,0x59,0xf7,0x9c,0x7a,0x7b,0xfc,0xa0, 0x7a,0x6d,0xfe,0x99,0x76,0x6c,0xff,0x9b,0x77,0x6d,0xff,0x9b,0x76,0x6d,0xff,0x9a, 0x77,0x6c,0xff,0x9a,0x77,0x6d,0xff,0x9a,0x76,0x6c,0xff,0x9a,0x77,0x6d,0xff,0x9a, 0x76,0x6c,0xff,0x9a,0x76,0x6c,0xff,0x9a,0x76,0x6c,0xff,0x9a,0x76,0x6c,0xff,0x9b, 0x77,0x6d,0xff,0x9a,0x76,0x6c,0xff,0x91,0x6d,0x6a,0xff,0x93,0x6e,0x69,0xff,0xad, 0x87,0x77,0xff,0x7e,0x6a,0x68,0xff,0x44,0x42,0x4c,0xff,0x78,0x63,0x6d,0xff,0x61, 0x54,0x55,0xfd,0x2c,0x35,0x2e,0xfa,0x2d,0x33,0x2e,0xf0,0x0e,0x10,0x0e,0xdd,0x00, 0x00,0x00,0xc0,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x5b,0x00, 0x00,0x00,0x51,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x8f,0x00, 0x00,0x00,0xac,0x00,0x00,0x00,0xc6,0x17,0x16,0x15,0xd9,0x69,0x5b,0x56,0xe8,0xa9, 0x8b,0x81,0xf1,0xa1,0x7c,0x6f,0xf8,0x87,0x66,0x6f,0xfc,0x8a,0x67,0x6b,0xfe,0x96, 0x71,0x67,0xfe,0x9a,0x76,0x6b,0xff,0x9a,0x76,0x6b,0xff,0x9a,0x76,0x6b,0xff,0x9a, 0x77,0x6c,0xff,0x9a,0x76,0x6b,0xff,0x99,0x76,0x6b,0xff,0xa0,0x7a,0x6e,0xff,0x95, 0x70,0x6c,0xff,0x8e,0x6b,0x6e,0xff,0xa4,0x85,0x7e,0xff,0x9e,0x7b,0x71,0xff,0x99, 0x76,0x6c,0xff,0x9a,0x76,0x6c,0xff,0x9a,0x77,0x6d,0xff,0x9e,0x7a,0x6d,0xff,0x85, 0x66,0x71,0xff,0x51,0x49,0x4f,0xff,0x3d,0x3b,0x3d,0xff,0x09,0x08,0x09,0xff,0x00, 0x02,0x02,0xff,0x6c,0x5b,0x56,0xff,0x79,0x65,0x60,0xff,0x78,0x64,0x5f,0xff,0x78, 0x64,0x5f,0xff,0x79,0x65,0x60,0xff,0x78,0x64,0x5f,0xff,0x77,0x64,0x5f,0xff,0x78, 0x64,0x5f,0xff,0x77,0x63,0x5e,0xff,0x76,0x62,0x5d,0xff,0x76,0x64,0x5e,0xff,0x75, 0x62,0x5d,0xff,0x74,0x61,0x5c,0xff,0x7d,0x68,0x63,0xff,0x7f,0x69,0x63,0xff,0x4e, 0x48,0x4f,0xff,0x2d,0x35,0x2e,0xff,0x33,0x39,0x34,0xff,0x32,0x38,0x33,0xff,0x2b, 0x34,0x2c,0xff,0x68,0x4d,0x53,0xff,0xa0,0x7f,0x77,0xff,0x9b,0x77,0x6d,0xff,0x9a, 0x76,0x6c,0xff,0x9a,0x76,0x6c,0xff,0x9a,0x76,0x6c,0xff,0x9a,0x76,0x6c,0xff,0x9a, 0x76,0x6c,0xff,0x9a,0x76,0x6c,0xff,0x9a,0x76,0x6c,0xff,0x9a,0x76,0x6c,0xff,0x9a, 0x76,0x6b,0xff,0x9a,0x76,0x6c,0xff,0x9a,0x76,0x6c,0xff,0x9a,0x76,0x6c,0xff,0x9a, 0x76,0x6c,0xff,0x99,0x75,0x6b,0xff,0x39,0x2c,0x28,0xff,0x00,0x00,0x00,0xff,0x00, 0x00,0x00,0xff,0x02,0x02,0x02,0xff,0x25,0x27,0x26,0xff,0x34,0x3a,0x34,0xff,0x30, 0x36,0x30,0xff,0x33,0x38,0x33,0xff,0x36,0x37,0x37,0xff,0x53,0x4b,0x51,0xff,0x8c, 0x74,0x6b,0xff,0x9c,0x77,0x6d,0xff,0x9a,0x76,0x6b,0xff,0x9b,0x77,0x6d,0xff,0x9a, 0x76,0x6b,0xff,0x9a,0x76,0x6b,0xff,0x9a,0x76,0x6b,0xff,0x99,0x75,0x6b,0xff,0x8f, 0x6d,0x71,0xff,0xa9,0x8a,0x7e,0xff,0x99,0x74,0x69,0xff,0x9a,0x76,0x6b,0xff,0x99, 0x75,0x6b,0xff,0x99,0x75,0x6b,0xfe,0x99,0x75,0x6b,0xfb,0x98,0x75,0x6a,0xf5,0x6c, 0x53,0x4c,0xe8,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x7f,0x00, 0x00,0x00,0x54,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x0b,0x00, 0x00,0x00,0x06,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x14,0x00, 0x00,0x00,0x1f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x53,0x00, 0x00,0x00,0x63,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x78,0x00, 0x00,0x00,0x7a,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x7b,0x00, 0x00,0x00,0x7b,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x7b,0x00, 0x00,0x00,0x7b,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x7b,0x00, 0x00,0x00,0x7b,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x7b,0x00, 0x00,0x00,0x7b,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x7b,0x00, 0x00,0x00,0x7b,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x7b,0x00, 0x00,0x00,0x7b,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x76,0x00, 0x00,0x00,0x72,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,0x4a,0x00, 0x00,0x00,0x39,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x11,0x00, 0x00,0x00,0x0a,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x1b,0x00, 0x00,0x00,0x31,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x8a,0x00, 0x00,0x00,0x9b,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0xaa,0x00, 0x00,0x00,0xaa,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0x9c,0x00, 0x00,0x00,0x8d,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x3d,0x00, 0x00,0x00,0x24,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x04,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00, 0x00,0x00,0x05,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x23,0x00, 0x00,0x00,0x36,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x91,0x00, 0x00,0x00,0xb2,0x00,0x00,0x00,0xcf,0x15,0x15,0x14,0xe5,0x68,0x57,0x51,0xf3,0x9e, 0x7a,0x6e,0xfa,0x9f,0x7b,0x6f,0xfd,0x99,0x76,0x6c,0xff,0x9b,0x78,0x6e,0xff,0x9b, 0x78,0x6e,0xff,0x9a,0x77,0x6d,0xff,0x9b,0x77,0x6d,0xff,0x9b,0x78,0x6e,0xff,0x9b, 0x78,0x6e,0xff,0x9b,0x78,0x6e,0xff,0x9b,0x77,0x6d,0xff,0x9b,0x77,0x6d,0xff,0x9a, 0x76,0x6c,0xff,0x9b,0x77,0x6d,0xff,0x99,0x74,0x6c,0xff,0x95,0x71,0x6a,0xff,0x9a, 0x76,0x6d,0xff,0x9e,0x7a,0x6f,0xff,0x9d,0x78,0x6b,0xff,0x97,0x73,0x7d,0xff,0x43, 0x40,0x49,0xff,0x69,0x5a,0x4a,0xff,0x70,0x5e,0x55,0xfe,0x2a,0x33,0x2f,0xfc,0x35, 0x3c,0x37,0xf5,0x16,0x1a,0x17,0xe7,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xb2,0x00, 0x00,0x00,0x94,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x85,0x00, 0x00,0x00,0x9b,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,0xce,0x2e,0x29,0x27,0xe0,0x8b, 0x77,0x70,0xed,0xad,0x8c,0x82,0xf5,0xa0,0x7c,0x72,0xfb,0x96,0x72,0x69,0xfd,0x8d, 0x68,0x68,0xfe,0x94,0x70,0x6b,0xff,0x9a,0x76,0x6c,0xff,0x9b,0x78,0x6e,0xff,0x9a, 0x77,0x6d,0xff,0x9b,0x77,0x6d,0xff,0x9b,0x78,0x6e,0xff,0x9a,0x77,0x6c,0xff,0x9e, 0x7a,0x6e,0xff,0x81,0x69,0x69,0xff,0x89,0x6a,0x6b,0xff,0x92,0x6f,0x6f,0xff,0x9a, 0x77,0x6f,0xff,0x9c,0x78,0x6d,0xff,0x9b,0x78,0x6e,0xff,0x9b,0x76,0x6c,0xff,0x9b, 0x78,0x6e,0xff,0xa2,0x7b,0x6f,0xff,0x5a,0x50,0x56,0xff,0x41,0x41,0x47,0xff,0x35, 0x36,0x39,0xff,0x07,0x07,0x08,0xff,0x02,0x03,0x05,0xff,0x23,0x26,0x29,0xff,0x2b, 0x2e,0x33,0xff,0x2d,0x30,0x35,0xff,0x2d,0x30,0x35,0xff,0x2d,0x30,0x35,0xff,0x2d, 0x30,0x35,0xff,0x2c,0x2f,0x34,0xff,0x2b,0x2e,0x33,0xff,0x2a,0x2d,0x32,0xff,0x29, 0x2c,0x31,0xff,0x29,0x2c,0x31,0xff,0x28,0x2c,0x30,0xff,0x27,0x2b,0x2f,0xff,0x35, 0x38,0x3d,0xff,0x38,0x3b,0x41,0xff,0x36,0x39,0x37,0xff,0x2b,0x34,0x2c,0xff,0x34, 0x39,0x34,0xff,0x31,0x37,0x31,0xff,0x34,0x39,0x36,0xff,0x77,0x59,0x56,0xff,0x9a, 0x77,0x6c,0xff,0x9b,0x77,0x6d,0xff,0x9b,0x77,0x6d,0xff,0x9b,0x78,0x6e,0xff,0x9b, 0x78,0x6e,0xff,0x9a,0x76,0x6c,0xff,0x9b,0x77,0x6d,0xff,0x9b,0x77,0x6d,0xff,0x9b, 0x77,0x6d,0xff,0x9b,0x77,0x6d,0xff,0x9b,0x77,0x6d,0xff,0x9b,0x77,0x6d,0xff,0x9b, 0x77,0x6d,0xff,0x9b,0x76,0x6c,0xff,0x9b,0x77,0x6d,0xff,0x99,0x75,0x6c,0xff,0x40, 0x31,0x2d,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x02,0x02,0x02,0xff,0x25, 0x27,0x26,0xff,0x34,0x3a,0x35,0xff,0x30,0x36,0x31,0xff,0x34,0x39,0x35,0xff,0x3c, 0x3d,0x3c,0xff,0x3c,0x3a,0x3a,0xff,0xa7,0x8a,0x80,0xff,0x9d,0x79,0x6f,0xff,0x9a, 0x76,0x6b,0xff,0x9b,0x77,0x6d,0xff,0x9b,0x77,0x6c,0xff,0x9a,0x76,0x6c,0xff,0x9b, 0x76,0x6c,0xff,0x9b,0x77,0x6d,0xff,0x9c,0x77,0x6c,0xff,0x9c,0x7a,0x72,0xff,0x9e, 0x78,0x6a,0xff,0x99,0x76,0x6b,0xff,0x98,0x74,0x6a,0xff,0x99,0x75,0x6b,0xff,0x98, 0x74,0x6a,0xfd,0x9c,0x77,0x6c,0xf9,0x8c,0x6b,0x62,0xef,0x17,0x12,0x10,0xdc,0x00, 0x00,0x00,0xbd,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x3f,0x00, 0x00,0x00,0x22,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x11,0x00, 0x00,0x00,0x1b,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x53,0x00, 0x00,0x00,0x6b,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0xa2,0x00, 0x00,0x00,0xa9,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0xaf,0x00, 0x00,0x00,0xae,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0xae,0x00, 0x00,0x00,0xae,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0xae,0x00, 0x00,0x00,0xae,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0xae,0x00, 0x00,0x00,0xae,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0xae,0x00, 0x00,0x00,0xae,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0xae,0x00, 0x00,0x00,0xae,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0xaf,0x00, 0x00,0x00,0xae,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0x9b,0x00, 0x00,0x00,0x8c,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x4a,0x00, 0x00,0x00,0x35,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x14,0x00, 0x00,0x00,0x17,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x6b,0x00, 0x00,0x00,0x90,0x02,0x01,0x00,0xb0,0x05,0x03,0x03,0xc4,0x05,0x04,0x04,0xcf,0x04, 0x03,0x03,0xd3,0x04,0x03,0x03,0xd5,0x04,0x03,0x03,0xd5,0x04,0x03,0x03,0xd3,0x04, 0x03,0x03,0xd0,0x01,0x01,0x01,0xc7,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x9f,0x00, 0x00,0x00,0x7f,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x21,0x00, 0x00,0x00,0x11,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x03,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x1a,0x00, 0x00,0x00,0x2b,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x78,0x00, 0x00,0x00,0x96,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xcf,0x28,0x25,0x24,0xe3,0x8b, 0x79,0x72,0xf1,0xad,0x8d,0x82,0xf9,0x9f,0x7c,0x72,0xfd,0x9a,0x77,0x6d,0xff,0x9b, 0x78,0x6e,0xff,0x9c,0x79,0x6f,0xff,0x9b,0x78,0x6e,0xff,0x9b,0x78,0x6e,0xff,0x9b, 0x78,0x6e,0xff,0x9b,0x78,0x6e,0xff,0x9b,0x78,0x6e,0xff,0x9b,0x78,0x6e,0xff,0x9b, 0x78,0x6e,0xff,0x9b,0x78,0x6e,0xff,0x9c,0x78,0x6e,0xff,0x9c,0x78,0x6e,0xff,0x98, 0x73,0x6b,0xff,0x99,0x74,0x6c,0xff,0x9d,0x7a,0x6f,0xff,0x9b,0x78,0x6e,0xff,0xa0, 0x7b,0x6e,0xff,0x8e,0x70,0x77,0xff,0x34,0x37,0x3b,0xff,0x59,0x4a,0x3e,0xff,0x85, 0x66,0x6d,0xff,0x40,0x40,0x44,0xfd,0x31,0x39,0x31,0xf9,0x21,0x24,0x20,0xf0,0x05, 0x05,0x05,0xdf,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xa7,0x00, 0x00,0x00,0xa5,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0xc2,0x06,0x06,0x05,0xd5,0x4e, 0x43,0x3f,0xe5,0xa3,0x89,0x81,0xf1,0xae,0x8b,0x81,0xf8,0x9d,0x7a,0x70,0xfb,0x9b, 0x78,0x6e,0xfd,0x9a,0x76,0x6b,0xff,0x93,0x6c,0x67,0xff,0x99,0x75,0x6e,0xff,0x9d, 0x7a,0x6f,0xff,0x9b,0x78,0x6e,0xff,0x9c,0x79,0x6f,0xff,0x9b,0x78,0x6e,0xff,0x9c, 0x78,0x6e,0xff,0x9c,0x79,0x6f,0xff,0xa0,0x7c,0x70,0xff,0x7a,0x5f,0x67,0xff,0x94, 0x73,0x6a,0xff,0x8d,0x69,0x6e,0xff,0x94,0x70,0x6c,0xff,0x9c,0x78,0x6d,0xff,0x9c, 0x78,0x6e,0xff,0x9b,0x78,0x6e,0xff,0x9b,0x77,0x6d,0xff,0x9d,0x77,0x6d,0xff,0x7d, 0x65,0x5f,0xff,0x79,0x64,0x5f,0xff,0x75,0x5f,0x5a,0xff,0x5f,0x4a,0x44,0xff,0x60, 0x4c,0x45,0xff,0x78,0x62,0x5d,0xff,0x7b,0x65,0x61,0xff,0x7a,0x64,0x5f,0xff,0x7a, 0x64,0x5f,0xff,0x7a,0x64,0x5f,0xff,0x7a,0x64,0x5f,0xff,0x7a,0x64,0x60,0xff,0x7a, 0x64,0x60,0xff,0x7a,0x65,0x60,0xff,0x7b,0x65,0x60,0xff,0x7b,0x65,0x60,0xff,0x7b, 0x65,0x60,0xff,0x7b,0x65,0x60,0xff,0x78,0x62,0x5d,0xff,0x7b,0x64,0x5e,0xff,0x40, 0x40,0x3d,0xff,0x29,0x32,0x2a,0xff,0x34,0x38,0x34,0xff,0x2e,0x35,0x2e,0xff,0x38, 0x3b,0x3a,0xff,0x8d,0x6f,0x65,0xff,0x9b,0x77,0x6d,0xff,0x9b,0x78,0x6e,0xff,0x9b, 0x78,0x6e,0xff,0x9b,0x78,0x6e,0xff,0x9b,0x78,0x6e,0xff,0x9b,0x77,0x6d,0xff,0x9b, 0x78,0x6e,0xff,0x9b,0x78,0x6e,0xff,0x9b,0x78,0x6e,0xff,0x9b,0x78,0x6e,0xff,0x9b, 0x77,0x6d,0xff,0x9b,0x78,0x6e,0xff,0x9b,0x78,0x6e,0xff,0x9b,0x78,0x6e,0xff,0x9b, 0x77,0x6d,0xff,0x99,0x76,0x6c,0xff,0x48,0x38,0x33,0xff,0x00,0x00,0x00,0xff,0x00, 0x00,0x00,0xff,0x02,0x02,0x02,0xff,0x25,0x26,0x25,0xff,0x34,0x39,0x35,0xff,0x32, 0x38,0x33,0xff,0x37,0x3b,0x38,0xff,0x3f,0x3f,0x3f,0xff,0x38,0x34,0x36,0xff,0xab, 0x86,0x7b,0xff,0x9c,0x7a,0x6f,0xff,0x9b,0x77,0x6d,0xff,0x9a,0x76,0x6c,0xff,0x9b, 0x77,0x6d,0xff,0x9a,0x76,0x6c,0xff,0x9b,0x78,0x6e,0xff,0x9a,0x76,0x6c,0xff,0x9a, 0x76,0x6c,0xff,0x92,0x6f,0x69,0xff,0x80,0x66,0x6c,0xff,0x9c,0x77,0x6a,0xff,0x99, 0x75,0x6a,0xff,0x9a,0x76,0x6b,0xff,0x9a,0x76,0x6b,0xfe,0x9b,0x77,0x6d,0xfb,0x98, 0x74,0x6b,0xf5,0x5b,0x46,0x40,0xe5,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0xa6,0x00, 0x00,0x00,0x7a,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x21,0x00, 0x00,0x00,0x1e,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x4b,0x00, 0x00,0x00,0x63,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0xaf,0x00, 0x00,0x00,0xc1,0x17,0x13,0x12,0xcd,0x51,0x41,0x3c,0xd4,0x5f,0x4a,0x43,0xd7,0x59, 0x43,0x41,0xd7,0x57,0x3f,0x43,0xd8,0x69,0x54,0x4d,0xd8,0x6a,0x5b,0x55,0xd8,0x55, 0x3f,0x38,0xd8,0x5b,0x46,0x40,0xd8,0x5a,0x45,0x3f,0xd8,0x5b,0x46,0x3f,0xd8,0x5a, 0x45,0x3f,0xd8,0x5a,0x45,0x3f,0xd8,0x5a,0x45,0x3f,0xd8,0x5a,0x44,0x3f,0xd8,0x5b, 0x45,0x3e,0xd8,0x5f,0x48,0x3f,0xd8,0x60,0x47,0x48,0xd8,0x3e,0x32,0x3b,0xd8,0x32, 0x2b,0x2c,0xd8,0x59,0x40,0x40,0xd8,0x5b,0x45,0x3f,0xd8,0x5a,0x44,0x3f,0xd8,0x5a, 0x44,0x3f,0xd8,0x5a,0x44,0x3e,0xd8,0x5a,0x44,0x3e,0xd8,0x5a,0x45,0x3f,0xd8,0x5a, 0x45,0x3f,0xd8,0x5a,0x44,0x3f,0xd8,0x5c,0x46,0x3f,0xd7,0x53,0x3f,0x3a,0xd5,0x2c, 0x22,0x1e,0xd1,0x06,0x05,0x04,0xc9,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0xa6,0x00, 0x00,0x00,0x8f,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,0x44,0x00, 0x00,0x00,0x31,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x38,0x00, 0x00,0x00,0x58,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0xa9,0x03,0x04,0x06,0xca,0x4b, 0x3a,0x35,0xde,0x71,0x56,0x4e,0xe8,0x69,0x50,0x49,0xec,0x69,0x4f,0x48,0xee,0x69, 0x50,0x49,0xee,0x69,0x4f,0x48,0xed,0x6c,0x52,0x4a,0xea,0x62,0x4a,0x44,0xe3,0x19, 0x13,0x11,0xd7,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x7d,0x00, 0x00,0x00,0x57,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x10,0x00, 0x00,0x00,0x07,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x11,0x00, 0x00,0x00,0x20,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x68,0x00, 0x00,0x00,0x85,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xbd,0x06,0x07,0x07,0xd4,0x49, 0x43,0x41,0xe6,0xa3,0x8b,0x84,0xf1,0xaf,0x8d,0x82,0xf9,0x9c,0x79,0x6e,0xfd,0x9b, 0x78,0x6e,0xff,0x9c,0x79,0x6f,0xff,0x9c,0x79,0x6f,0xff,0x9d,0x7a,0x70,0xff,0x9b, 0x78,0x6e,0xff,0x9b,0x78,0x6e,0xff,0x9b,0x78,0x6e,0xff,0x9b,0x78,0x6e,0xff,0x9b, 0x78,0x6e,0xff,0x9c,0x79,0x6f,0xff,0x9b,0x78,0x6e,0xff,0x9b,0x78,0x6e,0xff,0x9c, 0x79,0x6f,0xff,0x9b,0x77,0x6d,0xff,0x9a,0x77,0x6c,0xff,0x9b,0x78,0x6d,0xff,0x9c, 0x78,0x6e,0xff,0x9d,0x7a,0x70,0xff,0xa0,0x78,0x70,0xff,0x6b,0x57,0x57,0xff,0x25, 0x30,0x2b,0xff,0x4d,0x46,0x47,0xff,0x8d,0x6a,0x7f,0xff,0x56,0x4d,0x52,0xfe,0x2c, 0x35,0x2d,0xfb,0x2b,0x30,0x2b,0xf7,0x0d,0x0e,0x0d,0xed,0x00,0x00,0x00,0xe0,0x00, 0x00,0x00,0xd4,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0xd4,0x1d, 0x18,0x17,0xdf,0x76,0x65,0x5f,0xea,0xaf,0x92,0x87,0xf3,0xa9,0x86,0x7b,0xfa,0x9c, 0x78,0x6e,0xfc,0x9c,0x78,0x6e,0xfe,0x9c,0x79,0x6f,0xff,0x9c,0x79,0x6f,0xff,0x95, 0x70,0x69,0xff,0x98,0x74,0x6c,0xff,0x9c,0x79,0x6f,0xff,0x9c,0x79,0x6f,0xff,0x9c, 0x79,0x6f,0xff,0x9c,0x79,0x6f,0xff,0x9c,0x79,0x6f,0xff,0x9c,0x79,0x6f,0xff,0x9c, 0x7a,0x70,0xff,0x9b,0x74,0x69,0xff,0x92,0x6e,0x73,0xff,0x7c,0x60,0x72,0xff,0x93, 0x72,0x6f,0xff,0x9e,0x7b,0x70,0xff,0x9d,0x7a,0x70,0xff,0x9b,0x78,0x6e,0xff,0x9c, 0x78,0x6e,0xff,0x9a,0x77,0x6d,0xff,0xa2,0x7d,0x72,0xff,0xa3,0x7e,0x72,0xff,0xa4, 0x7e,0x73,0xff,0xa8,0x82,0x78,0xff,0xa9,0x83,0x78,0xff,0xa4,0x7e,0x73,0xff,0xa3, 0x7d,0x72,0xff,0xa4,0x7e,0x73,0xff,0xa3,0x7d,0x72,0xff,0xa3,0x7d,0x72,0xff,0xa3, 0x7d,0x72,0xff,0xa3,0x7d,0x72,0xff,0xa3,0x7d,0x72,0xff,0xa3,0x7d,0x72,0xff,0xa3, 0x7d,0x72,0xff,0xa2,0x7c,0x71,0xff,0xa3,0x7d,0x72,0xff,0xa3,0x7d,0x72,0xff,0xa4, 0x7e,0x72,0xff,0x9c,0x73,0x73,0xff,0x45,0x43,0x43,0xff,0x28,0x31,0x29,0xff,0x34, 0x39,0x34,0xff,0x2a,0x32,0x2a,0xff,0x42,0x40,0x46,0xff,0x9e,0x7f,0x76,0xff,0x9d, 0x79,0x6f,0xff,0x9b,0x78,0x6e,0xff,0x9b,0x78,0x6e,0xff,0x9b,0x78,0x6e,0xff,0x9c, 0x79,0x6f,0xff,0x9c,0x79,0x6f,0xff,0x9c,0x79,0x6f,0xff,0x9b,0x78,0x6e,0xff,0x9b, 0x78,0x6e,0xff,0x9b,0x78,0x6e,0xff,0x9b,0x78,0x6e,0xff,0x9b,0x77,0x6d,0xff,0x9b, 0x78,0x6e,0xff,0x9c,0x79,0x6f,0xff,0x9c,0x79,0x6e,0xff,0x9a,0x78,0x6d,0xff,0x50, 0x3e,0x38,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x02,0x02,0x02,0xff,0x26, 0x29,0x27,0xff,0x35,0x3a,0x36,0xff,0x33,0x38,0x33,0xff,0x39,0x3c,0x39,0xff,0x3d, 0x3e,0x3e,0xff,0x3b,0x36,0x38,0xff,0x96,0x6f,0x6d,0xff,0xa2,0x81,0x75,0xff,0x9b, 0x78,0x6e,0xff,0x9c,0x79,0x6e,0xff,0x9b,0x77,0x6d,0xff,0x9b,0x77,0x6d,0xff,0x9b, 0x77,0x6d,0xff,0x9b,0x77,0x6d,0xff,0x9b,0x78,0x6d,0xff,0x93,0x71,0x6a,0xff,0x78, 0x5f,0x75,0xff,0x90,0x6b,0x6a,0xff,0x9c,0x78,0x6d,0xff,0x9a,0x76,0x6c,0xff,0x9b, 0x77,0x6c,0xff,0x9b,0x77,0x6d,0xfd,0x9e,0x79,0x6f,0xf9,0x84,0x66,0x5e,0xed,0x0d, 0x0b,0x0a,0xd9,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x69,0x00, 0x00,0x00,0x49,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x47,0x00, 0x00,0x00,0x5c,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0xab,0x00, 0x00,0x00,0xc2,0x0a,0x09,0x09,0xd4,0x4c,0x42,0x3f,0xe1,0x8e,0x72,0x6a,0xe9,0xa1, 0x7d,0x73,0xed,0xac,0x84,0x78,0xf0,0x93,0x74,0x6e,0xf0,0x50,0x49,0x4d,0xf0,0x7a, 0x69,0x5d,0xf0,0xcf,0xac,0xa1,0xf0,0xbd,0x9d,0x93,0xf0,0xa3,0x7b,0x6e,0xf0,0xa7, 0x80,0x74,0xf0,0xa7,0x80,0x74,0xf0,0xa7,0x80,0x74,0xf0,0xa7,0x80,0x75,0xf0,0xa7, 0x80,0x74,0xf0,0xa9,0x81,0x74,0xf0,0xa3,0x7d,0x7b,0xf0,0x80,0x68,0x6f,0xf0,0x5b, 0x53,0x52,0xf0,0x5c,0x52,0x5f,0xf0,0x85,0x69,0x71,0xf0,0xa8,0x7e,0x73,0xf0,0xa6, 0x7f,0x74,0xf0,0xa5,0x7e,0x73,0xf0,0xa5,0x7e,0x73,0xf0,0xa6,0x7f,0x74,0xf0,0xa5, 0x7e,0x73,0xf0,0xa5,0x7e,0x73,0xf0,0xa6,0x7f,0x74,0xf0,0xa5,0x7e,0x73,0xf0,0xa7, 0x80,0x75,0xf0,0xa2,0x7c,0x71,0xee,0x90,0x6e,0x65,0xec,0x64,0x4d,0x46,0xe6,0x1c, 0x15,0x14,0xdc,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0xa3,0x00, 0x00,0x00,0x88,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x47,0x00, 0x00,0x00,0x43,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x96,0x00, 0x00,0x00,0xbd,0x14,0x14,0x16,0xdb,0x5d,0x4f,0x56,0xec,0x9e,0x7d,0x77,0xf5,0xa7, 0x80,0x73,0xf9,0xa1,0x7b,0x71,0xfa,0xa3,0x7c,0x71,0xfa,0xa3,0x7c,0x72,0xfa,0xa4, 0x7d,0x72,0xf8,0xa7,0x7f,0x74,0xf4,0x6c,0x53,0x4b,0xeb,0x13,0x0f,0x0d,0xda,0x00, 0x00,0x00,0xc0,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x53,0x00, 0x00,0x00,0x35,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x07,0x00, 0x00,0x00,0x03,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x0a,0x00, 0x00,0x00,0x14,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x53,0x00, 0x00,0x00,0x72,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0xc7,0x13, 0x13,0x12,0xda,0x69,0x5e,0x59,0xe9,0xab,0x8d,0x84,0xf3,0xab,0x87,0x7c,0xf9,0x9c, 0x78,0x6e,0xfd,0x9c,0x7a,0x6f,0xff,0x9c,0x79,0x6f,0xff,0x9d,0x7a,0x70,0xff,0x9d, 0x7a,0x70,0xff,0x9d,0x7a,0x70,0xff,0x9c,0x79,0x6f,0xff,0x9c,0x79,0x6f,0xff,0x9d, 0x7a,0x70,0xff,0x9d,0x7a,0x70,0xff,0x9d,0x7a,0x70,0xff,0x9e,0x7b,0x70,0xff,0x9d, 0x7a,0x6f,0xff,0x9c,0x79,0x6f,0xff,0x9d,0x7a,0x71,0xff,0x9b,0x78,0x6d,0xff,0x9a, 0x76,0x6c,0xff,0x9c,0x79,0x6f,0xff,0x9d,0x7a,0x70,0xff,0xa1,0x7d,0x70,0xff,0x8e, 0x6f,0x73,0xff,0x4e,0x46,0x4d,0xff,0x2f,0x37,0x31,0xff,0x1c,0x28,0x23,0xff,0x5e, 0x4b,0x50,0xff,0x61,0x52,0x53,0xff,0x24,0x2c,0x26,0xfd,0x26,0x2a,0x25,0xfa,0x0f, 0x12,0x10,0xf6,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,0xe6,0x00, 0x00,0x00,0xe5,0x3a,0x32,0x2f,0xea,0x92,0x7b,0x73,0xf1,0xb1,0x90,0x86,0xf7,0xa5, 0x82,0x76,0xfb,0x9c,0x78,0x6e,0xfd,0x9d,0x7a,0x6f,0xff,0x9d,0x7b,0x70,0xff,0x9b, 0x77,0x6d,0xff,0x9d,0x79,0x6f,0xff,0x98,0x74,0x6a,0xff,0x99,0x74,0x6a,0xff,0x9e, 0x7c,0x71,0xff,0x9d,0x7a,0x70,0xff,0x9d,0x7a,0x70,0xff,0x9d,0x7a,0x70,0xff,0x9c, 0x79,0x6f,0xff,0x9c,0x79,0x6f,0xff,0x9f,0x7a,0x6d,0xff,0x88,0x6b,0x71,0xff,0x5d, 0x50,0x5d,0xff,0x72,0x5b,0x6e,0xff,0x98,0x76,0x73,0xff,0x9d,0x7a,0x6f,0xff,0x9d, 0x7a,0x70,0xff,0x9c,0x78,0x6e,0xff,0xa8,0x87,0x7d,0xff,0xb0,0x93,0x89,0xff,0xab, 0x8b,0x81,0xff,0xa4,0x83,0x78,0xff,0x9e,0x7b,0x71,0xff,0x9c,0x79,0x6f,0xff,0x9d, 0x7a,0x70,0xff,0x9d,0x7a,0x70,0xff,0x9c,0x79,0x6f,0xff,0x9e,0x7b,0x70,0xff,0x9d, 0x7a,0x70,0xff,0x9c,0x79,0x6f,0xff,0x9d,0x7a,0x70,0xff,0x9c,0x79,0x6f,0xff,0x9d, 0x7a,0x70,0xff,0x9c,0x79,0x6f,0xff,0x9d,0x7a,0x70,0xff,0x9c,0x79,0x6f,0xff,0x9c, 0x79,0x6f,0xff,0x9c,0x79,0x6f,0xff,0xa0,0x7c,0x70,0xff,0x7f,0x64,0x75,0xff,0x42, 0x41,0x43,0xff,0x29,0x31,0x29,0xff,0x34,0x38,0x34,0xff,0x26,0x30,0x26,0xff,0x5a, 0x4c,0x5c,0xff,0xa4,0x84,0x7b,0xff,0x9d,0x7a,0x70,0xff,0x9d,0x7a,0x70,0xff,0x9b, 0x78,0x6e,0xff,0x9d,0x7a,0x70,0xff,0x9c,0x79,0x6f,0xff,0x9d,0x7a,0x70,0xff,0x9d, 0x7a,0x70,0xff,0x9c,0x79,0x6f,0xff,0x9c,0x79,0x6f,0xff,0x9c,0x79,0x6f,0xff,0x9c, 0x79,0x6f,0xff,0x9c,0x78,0x6e,0xff,0x9d,0x7a,0x6f,0xff,0x9e,0x7a,0x70,0xff,0x9e, 0x7a,0x70,0xff,0x8c,0x68,0x68,0xff,0x34,0x32,0x30,0xff,0x00,0x00,0x00,0xff,0x00, 0x00,0x00,0xff,0x02,0x02,0x02,0xff,0x28,0x2a,0x28,0xff,0x35,0x3a,0x36,0xff,0x33, 0x38,0x33,0xff,0x39,0x3b,0x39,0xff,0x3e,0x3f,0x3f,0xff,0x44,0x40,0x44,0xff,0x73, 0x5a,0x69,0xff,0xa9,0x88,0x7b,0xff,0x9b,0x78,0x6e,0xff,0x9c,0x79,0x6f,0xff,0x9c, 0x79,0x6f,0xff,0x9c,0x79,0x6f,0xff,0x9b,0x78,0x6e,0xff,0x9b,0x77,0x6c,0xff,0x97, 0x72,0x6b,0xff,0x8b,0x69,0x71,0xff,0x98,0x75,0x70,0xff,0x96,0x74,0x6d,0xff,0x99, 0x74,0x69,0xff,0x9b,0x78,0x6e,0xff,0x9b,0x78,0x6e,0xff,0x9b,0x78,0x6e,0xfe,0x9c, 0x79,0x6f,0xfb,0x96,0x74,0x6a,0xf4,0x4e,0x3a,0x38,0xe4,0x00,0x00,0x00,0xcb,0x00, 0x00,0x00,0xa8,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x58,0x00, 0x00,0x00,0x5d,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0xa2,0x00, 0x00,0x00,0xba,0x00,0x00,0x00,0xce,0x22,0x1f,0x1c,0xdf,0x7e,0x6c,0x64,0xeb,0xa1, 0x81,0x77,0xf3,0xa6,0x81,0x76,0xf7,0x9b,0x76,0x6c,0xf9,0x9b,0x76,0x6b,0xfb,0x96, 0x74,0x69,0xfb,0x75,0x60,0x61,0xfa,0x4d,0x46,0x52,0xfa,0x75,0x69,0x63,0xfa,0xc4, 0xa8,0x9e,0xfa,0xa7,0x86,0x7c,0xfa,0xa0,0x7c,0x71,0xfa,0xa1,0x7e,0x73,0xfa,0xa0, 0x7d,0x72,0xfa,0x9f,0x7c,0x71,0xfa,0xa1,0x7d,0x70,0xfa,0x8a,0x6e,0x69,0xfa,0x63, 0x55,0x66,0xfa,0x72,0x5d,0x68,0xfa,0x82,0x68,0x5d,0xfa,0x8a,0x6e,0x67,0xfa,0x9a, 0x76,0x70,0xfa,0x9a,0x76,0x6a,0xfa,0x9a,0x76,0x6b,0xfa,0x99,0x75,0x6b,0xfa,0x99, 0x75,0x6b,0xfa,0x98,0x74,0x6a,0xfa,0x98,0x74,0x6a,0xfa,0x99,0x75,0x6b,0xfa,0x98, 0x74,0x6a,0xfa,0x99,0x75,0x6b,0xfa,0x99,0x75,0x6b,0xfa,0x9a,0x76,0x6c,0xfa,0xa0, 0x7a,0x6f,0xf8,0x9f,0x79,0x6f,0xf5,0x87,0x67,0x5f,0xf0,0x45,0x35,0x30,0xe7,0x09, 0x07,0x06,0xda,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x9a,0x00, 0x00,0x00,0x83,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x71,0x00, 0x00,0x00,0x89,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0xcd,0x2a,0x27,0x29,0xe5,0x4e, 0x4a,0x53,0xf4,0x73,0x5e,0x6d,0xfb,0x9b,0x79,0x76,0xfe,0x9c,0x79,0x6d,0xfe,0x99, 0x75,0x6b,0xfe,0x99,0x75,0x6b,0xfe,0x98,0x74,0x6a,0xfd,0x9a,0x75,0x6b,0xfb,0xa1, 0x7b,0x70,0xf5,0x5e,0x48,0x41,0xea,0x0e,0x0a,0x09,0xd8,0x00,0x00,0x00,0xbc,0x00, 0x00,0x00,0x99,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x33,0x00, 0x00,0x00,0x1c,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x02,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x07,0x00, 0x00,0x00,0x0e,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x3c,0x00, 0x00,0x00,0x58,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0xb7,0x00, 0x00,0x00,0xcf,0x2b,0x28,0x27,0xe2,0x8d,0x7c,0x76,0xed,0xab,0x8a,0x80,0xf5,0xa4, 0x80,0x75,0xfb,0x9c,0x79,0x6e,0xfd,0x9e,0x7a,0x70,0xff,0x9d,0x7a,0x70,0xff,0x9e, 0x7b,0x70,0xff,0x9e,0x7b,0x70,0xff,0x9e,0x7b,0x70,0xff,0x9d,0x7a,0x70,0xff,0x9e, 0x7b,0x70,0xff,0x9d,0x7a,0x70,0xff,0x9e,0x7b,0x70,0xff,0x9d,0x7a,0x6f,0xff,0x9c, 0x79,0x6f,0xff,0x9e,0x7a,0x70,0xff,0x9e,0x7c,0x71,0xff,0x9e,0x7c,0x71,0xff,0x9d, 0x79,0x6f,0xff,0x9b,0x77,0x6d,0xff,0x9b,0x77,0x6d,0xff,0x9c,0x79,0x6f,0xff,0x9e, 0x7b,0x71,0xff,0xa4,0x7d,0x72,0xff,0x69,0x58,0x56,0xff,0x33,0x38,0x39,0xff,0x37, 0x3b,0x38,0xff,0x1e,0x2a,0x20,0xff,0x2b,0x32,0x29,0xff,0x35,0x36,0x32,0xff,0x21, 0x25,0x20,0xff,0x21,0x25,0x21,0xfd,0x16,0x1a,0x17,0xfb,0x04,0x05,0x05,0xf8,0x00, 0x00,0x00,0xf6,0x06,0x05,0x04,0xf5,0x5b,0x4e,0x49,0xf5,0xa7,0x8c,0x83,0xf8,0xac, 0x8b,0x80,0xfa,0x9f,0x7c,0x71,0xfc,0x9c,0x79,0x6f,0xfe,0xa1,0x7c,0x71,0xff,0x91, 0x71,0x66,0xff,0x86,0x68,0x6f,0xff,0x8d,0x69,0x6d,0xff,0x9b,0x76,0x6d,0xff,0x9e, 0x7b,0x71,0xff,0x9c,0x79,0x6f,0xff,0x98,0x74,0x6a,0xff,0xa1,0x80,0x75,0xff,0xa1, 0x7f,0x74,0xff,0x9e,0x7b,0x70,0xff,0x9d,0x7a,0x70,0xff,0xa2,0x7e,0x70,0xff,0x88, 0x6b,0x74,0xff,0x4e,0x49,0x51,0xff,0x61,0x54,0x62,0xff,0x7d,0x61,0x75,0xff,0xa2, 0x82,0x7e,0xff,0xa1,0x7e,0x72,0xff,0xa2,0x7d,0x6f,0xff,0x82,0x67,0x71,0xff,0x5f, 0x54,0x5a,0xff,0x5b,0x54,0x57,0xff,0x53,0x4e,0x51,0xff,0x80,0x62,0x67,0xff,0xa0, 0x7e,0x76,0xff,0x9f,0x7d,0x71,0xff,0x9e,0x7b,0x70,0xff,0x9e,0x7c,0x71,0xff,0x9e, 0x7b,0x70,0xff,0x9e,0x7b,0x70,0xff,0x9e,0x7b,0x70,0xff,0x9e,0x7b,0x70,0xff,0x9d, 0x7a,0x70,0xff,0x9e,0x7b,0x70,0xff,0x9e,0x7b,0x70,0xff,0x9c,0x79,0x6f,0xff,0x9d, 0x7a,0x70,0xff,0x9d,0x7a,0x70,0xff,0x9d,0x7a,0x70,0xff,0x9d,0x7a,0x70,0xff,0xa2, 0x7e,0x72,0xff,0x63,0x55,0x5f,0xff,0x3e,0x3f,0x3e,0xff,0x2a,0x33,0x2a,0xff,0x30, 0x36,0x2f,0xff,0x24,0x2f,0x25,0xff,0x7a,0x5e,0x6e,0xff,0xa3,0x84,0x7a,0xff,0x9d, 0x7b,0x71,0xff,0x9c,0x79,0x6f,0xff,0x9d,0x7a,0x70,0xff,0x9d,0x7a,0x70,0xff,0x9d, 0x7a,0x70,0xff,0x9d,0x7a,0x70,0xff,0x9d,0x7a,0x70,0xff,0x9d,0x7a,0x70,0xff,0x9d, 0x7a,0x70,0xff,0x9d,0x7a,0x70,0xff,0x9c,0x79,0x6f,0xff,0x9d,0x7a,0x6f,0xff,0x9b, 0x79,0x71,0xff,0x94,0x74,0x6b,0xff,0x61,0x53,0x5b,0xff,0x23,0x25,0x1e,0xff,0x3b, 0x37,0x3d,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x02,0x02,0x02,0xff,0x28, 0x2a,0x28,0xff,0x35,0x3a,0x36,0xff,0x33,0x38,0x33,0xff,0x39,0x3c,0x39,0xff,0x41, 0x41,0x41,0xff,0x47,0x44,0x49,0xff,0x49,0x3f,0x48,0xff,0xa9,0x88,0x81,0xff,0x80, 0x64,0x75,0xff,0x8c,0x69,0x71,0xff,0x8c,0x68,0x68,0xff,0x8d,0x69,0x6a,0xff,0x9c, 0x79,0x6f,0xff,0x97,0x72,0x68,0xff,0x98,0x73,0x6a,0xff,0x99,0x77,0x70,0xff,0x9d, 0x7a,0x6e,0xff,0x9c,0x79,0x6e,0xff,0x98,0x75,0x6f,0xff,0x8c,0x6a,0x71,0xff,0x9d, 0x79,0x6e,0xff,0x9c,0x79,0x6f,0xff,0x9c,0x78,0x6f,0xfc,0x9a,0x75,0x6d,0xf8,0x71, 0x54,0x54,0xed,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xa0,0x00, 0x00,0x00,0x88,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x9a,0x00, 0x00,0x00,0xb1,0x00,0x00,0x00,0xc8,0x0c,0x0c,0x0b,0xd9,0x54,0x4a,0x46,0xe7,0xa1, 0x86,0x7e,0xf1,0xa8,0x86,0x7c,0xf7,0x9f,0x7b,0x71,0xfb,0x99,0x75,0x6b,0xfc,0x9c, 0x77,0x6d,0xfd,0x9d,0x79,0x6e,0xfe,0x9a,0x75,0x70,0xfe,0x79,0x5f,0x68,0xfe,0x2b, 0x30,0x32,0xfe,0x0a,0x18,0x0f,0xfe,0x64,0x5b,0x4f,0xfe,0x94,0x77,0x70,0xfe,0x4b, 0x47,0x49,0xfe,0x54,0x4d,0x4e,0xfe,0x53,0x4c,0x4d,0xfe,0x53,0x4d,0x4e,0xfe,0x56, 0x4f,0x51,0xfe,0x33,0x35,0x33,0xfe,0x39,0x35,0x3c,0xfe,0x74,0x5f,0x6c,0xfe,0x60, 0x52,0x58,0xfe,0x91,0x71,0x77,0xfe,0xa3,0x7f,0x70,0xfe,0x9c,0x78,0x6d,0xfe,0x9a, 0x75,0x6b,0xfe,0x9a,0x75,0x6b,0xfe,0x99,0x76,0x6b,0xfe,0x99,0x75,0x6b,0xfe,0x9a, 0x76,0x6b,0xfe,0x9a,0x76,0x6b,0xfe,0x9a,0x76,0x6b,0xfe,0x99,0x75,0x6b,0xfe,0x9a, 0x76,0x6b,0xfe,0x9a,0x76,0x6b,0xfe,0x99,0x75,0x6b,0xfd,0x9a,0x76,0x6c,0xfc,0x9f, 0x7a,0x6f,0xfa,0x9a,0x76,0x6c,0xf5,0x76,0x59,0x52,0xee,0x2b,0x21,0x1e,0xe3,0x00, 0x00,0x00,0xd5,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0x9c,0x00, 0x00,0x00,0x92,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0xc2,0x03, 0x03,0x03,0xdb,0x3b,0x35,0x3b,0xee,0x57,0x4f,0x57,0xf8,0x51,0x49,0x57,0xfd,0x80, 0x65,0x65,0xff,0xa0,0x7b,0x6f,0xff,0x9b,0x78,0x6d,0xff,0x98,0x74,0x6a,0xff,0x98, 0x74,0x6a,0xfe,0x98,0x74,0x6a,0xfe,0x9c,0x77,0x6c,0xfb,0xa1,0x7b,0x6f,0xf4,0x51, 0x3d,0x37,0xe9,0x08,0x06,0x05,0xd5,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x96,0x00, 0x00,0x00,0x71,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x19,0x00, 0x00,0x00,0x0c,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x04,0x00, 0x00,0x00,0x09,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x2f,0x00, 0x00,0x00,0x46,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0xa0,0x00, 0x00,0x00,0xbe,0x04,0x04,0x04,0xd5,0x47,0x42,0x3f,0xe6,0xa5,0x8e,0x87,0xf2,0xaa, 0x88,0x7d,0xf8,0xa1,0x7e,0x73,0xfb,0x9d,0x7b,0x70,0xfe,0x9e,0x7c,0x71,0xfe,0x9e, 0x7b,0x70,0xff,0x9e,0x7b,0x70,0xff,0x9e,0x7c,0x71,0xff,0x9e,0x7b,0x70,0xff,0x9e, 0x7c,0x71,0xff,0x9e,0x7b,0x70,0xff,0x9e,0x7c,0x71,0xff,0x9e,0x7b,0x70,0xff,0x9f, 0x7d,0x72,0xff,0x9f,0x7d,0x72,0xff,0x9e,0x7c,0x71,0xff,0x9e,0x7c,0x71,0xff,0x9e, 0x7c,0x71,0xff,0x9e,0x7c,0x71,0xff,0x9d,0x7a,0x71,0xff,0x9b,0x77,0x6e,0xff,0x9c, 0x79,0x6e,0xff,0x9f,0x7c,0x71,0xff,0xa3,0x80,0x71,0xff,0x8f,0x70,0x73,0xff,0x4f, 0x48,0x50,0xff,0x33,0x38,0x34,0xff,0x38,0x3b,0x38,0xff,0x2f,0x36,0x2f,0xff,0x23, 0x2b,0x24,0xff,0x1f,0x24,0x20,0xff,0x20,0x24,0x20,0xff,0x21,0x25,0x21,0xff,0x1b, 0x20,0x1d,0xfd,0x05,0x08,0x07,0xfc,0x20,0x1a,0x18,0xfc,0x7e,0x6a,0x63,0xfb,0xaf, 0x90,0x86,0xfb,0xa8,0x86,0x7b,0xfd,0x9f,0x7d,0x71,0xfe,0x9d,0x7b,0x70,0xfe,0xa4, 0x81,0x75,0xff,0x92,0x72,0x67,0xff,0x55,0x46,0x4b,0xff,0x6a,0x55,0x68,0xff,0x9b, 0x79,0x78,0xff,0xa0,0x7e,0x71,0xff,0x9e,0x7b,0x70,0xff,0x9f,0x7c,0x71,0xff,0x9b, 0x76,0x6b,0xff,0x91,0x6b,0x67,0xff,0xa1,0x7f,0x79,0xff,0xa1,0x7e,0x73,0xff,0xa1, 0x7d,0x71,0xff,0xa9,0x82,0x73,0xff,0x67,0x59,0x5f,0xff,0x67,0x57,0x6a,0xff,0x8d, 0x6a,0x6c,0xff,0x8c,0x66,0x69,0xff,0x8f,0x6a,0x6b,0xff,0xa1,0x80,0x76,0xff,0xa8, 0x81,0x79,0xff,0x4a,0x46,0x42,0xff,0x3c,0x3d,0x3f,0xff,0x43,0x41,0x46,0xff,0x3c, 0x37,0x42,0xff,0x92,0x76,0x70,0xff,0xa6,0x85,0x7a,0xff,0x9f,0x7c,0x71,0xff,0x9e, 0x7c,0x71,0xff,0x9e,0x7b,0x70,0xff,0x9e,0x7b,0x70,0xff,0x9e,0x7b,0x70,0xff,0x9e, 0x7c,0x71,0xff,0x9e,0x7c,0x71,0xff,0x9e,0x7c,0x71,0xff,0x9e,0x7b,0x70,0xff,0x9d, 0x7a,0x70,0xff,0x9e,0x7c,0x71,0xff,0x9e,0x7b,0x70,0xff,0x9e,0x7b,0x70,0xff,0x9e, 0x7c,0x71,0xff,0x9e,0x7b,0x70,0xff,0xa3,0x7d,0x72,0xff,0x44,0x42,0x40,0xff,0x3c, 0x3e,0x3e,0xff,0x2a,0x33,0x2a,0xff,0x2f,0x36,0x2f,0xff,0x26,0x30,0x28,0xff,0x84, 0x62,0x64,0xff,0xa6,0x86,0x7c,0xff,0x9e,0x7b,0x71,0xff,0x9e,0x7b,0x70,0xff,0x9e, 0x7b,0x70,0xff,0x9d,0x7a,0x70,0xff,0x9e,0x7b,0x70,0xff,0x9d,0x7a,0x70,0xff,0x9d, 0x7a,0x70,0xff,0x9e,0x7c,0x71,0xff,0x9e,0x7c,0x71,0xff,0x9d,0x7a,0x70,0xff,0x9d, 0x7b,0x70,0xff,0x99,0x77,0x71,0xff,0x85,0x68,0x77,0xff,0x2d,0x32,0x26,0xff,0x26, 0x2c,0x28,0xff,0x7c,0x63,0x5a,0xff,0x63,0x4e,0x49,0xff,0x00,0x00,0x00,0xff,0x00, 0x00,0x00,0xff,0x02,0x02,0x02,0xff,0x28,0x2a,0x28,0xff,0x35,0x3a,0x36,0xff,0x33, 0x38,0x33,0xff,0x39,0x3c,0x39,0xff,0x44,0x43,0x45,0xff,0x48,0x44,0x49,0xff,0x3a, 0x34,0x39,0xff,0x8f,0x6f,0x7c,0xff,0x77,0x61,0x6f,0xff,0x9d,0x79,0x6f,0xff,0x99, 0x75,0x6d,0xff,0x8b,0x66,0x6a,0xff,0x8d,0x6b,0x72,0xff,0x9d,0x7a,0x6f,0xff,0x9c, 0x79,0x6f,0xff,0x9e,0x7b,0x70,0xff,0x9d,0x7a,0x70,0xff,0x9d,0x7a,0x70,0xff,0x9c, 0x79,0x6f,0xff,0x99,0x76,0x6e,0xff,0x96,0x72,0x6a,0xff,0x9b,0x78,0x70,0xff,0x7c, 0x5f,0x62,0xfe,0x53,0x4d,0x54,0xfa,0x4e,0x41,0x4d,0xf4,0x00,0x00,0x00,0xe7,0x00, 0x00,0x00,0xd5,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0xaa,0x00, 0x00,0x00,0xb1,0x00,0x00,0x00,0xc1,0x02,0x02,0x02,0xd3,0x2e,0x28,0x25,0xe2,0x87, 0x74,0x6d,0xed,0xae,0x8f,0x84,0xf5,0xa4,0x81,0x76,0xf9,0x9c,0x78,0x6f,0xfc,0x9a, 0x78,0x6d,0xfd,0x9d,0x79,0x6e,0xfe,0xa0,0x7a,0x6f,0xff,0x8d,0x6e,0x6f,0xff,0x58, 0x4d,0x58,0xff,0x2d,0x34,0x2d,0xff,0x30,0x36,0x31,0xff,0x17,0x24,0x1b,0xff,0x50, 0x4a,0x3f,0xff,0x94,0x77,0x6f,0xff,0x39,0x3b,0x40,0xff,0x43,0x41,0x45,0xff,0x43, 0x42,0x45,0xff,0x45,0x42,0x46,0xff,0x3f,0x3f,0x42,0xff,0x47,0x43,0x49,0xff,0x7f, 0x66,0x6a,0xff,0x78,0x63,0x5f,0xff,0x3b,0x3d,0x42,0xff,0x55,0x4c,0x57,0xff,0x83, 0x6a,0x6f,0xff,0xa2,0x7f,0x73,0xff,0xa1,0x7d,0x71,0xff,0x9c,0x7a,0x6f,0xff,0x9a, 0x76,0x6c,0xff,0x9a,0x76,0x6c,0xff,0x9a,0x76,0x6c,0xff,0x9a,0x76,0x6c,0xff,0x9a, 0x76,0x6b,0xff,0x9a,0x76,0x6b,0xff,0x99,0x75,0x6b,0xff,0x9a,0x76,0x6b,0xff,0x9a, 0x76,0x6b,0xff,0x99,0x75,0x6b,0xff,0x99,0x75,0x6b,0xfd,0x9c,0x77,0x6d,0xfb,0x9e, 0x79,0x6e,0xf8,0x96,0x73,0x68,0xf3,0x5c,0x46,0x3f,0xeb,0x16,0x11,0x0f,0xdf,0x00, 0x00,0x00,0xd2,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0xbd,0x00, 0x00,0x00,0xc7,0x00,0x00,0x00,0xd7,0x16,0x14,0x16,0xe7,0x46,0x3f,0x46,0xf4,0x56, 0x4d,0x57,0xfb,0x53,0x4b,0x54,0xfd,0x5a,0x4f,0x5c,0xff,0x8f,0x73,0x75,0xff,0xa6, 0x82,0x77,0xff,0x9e,0x79,0x6e,0xff,0x9d,0x77,0x6c,0xff,0x9d,0x77,0x6c,0xff,0x9c, 0x76,0x6d,0xfd,0x9b,0x77,0x70,0xfa,0x97,0x75,0x6d,0xf4,0x3c,0x30,0x2b,0xe8,0x01, 0x01,0x01,0xd4,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x6c,0x00, 0x00,0x00,0x48,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x0a,0x00, 0x00,0x00,0x04,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00, 0x00,0x00,0x05,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x24,0x00, 0x00,0x00,0x39,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x8a,0x00, 0x00,0x00,0xa8,0x00,0x00,0x00,0xc3,0x12,0x12,0x12,0xd9,0x66,0x5b,0x57,0xe8,0xb2, 0x96,0x8c,0xf3,0xa6,0x83,0x78,0xf9,0x9f,0x7d,0x72,0xfc,0x9f,0x7d,0x72,0xfe,0x9e, 0x7c,0x71,0xfe,0x9f,0x7d,0x72,0xff,0x9f,0x7d,0x72,0xff,0x9d,0x7b,0x70,0xff,0x9f, 0x7d,0x72,0xff,0x9f,0x7d,0x72,0xff,0xa0,0x7e,0x73,0xff,0x9f,0x7d,0x72,0xff,0x9f, 0x7d,0x72,0xff,0x9f,0x7d,0x72,0xff,0x9e,0x7c,0x71,0xff,0x9e,0x7c,0x71,0xff,0x9f, 0x7d,0x72,0xff,0xa0,0x7e,0x73,0xff,0xa0,0x7e,0x73,0xff,0xa2,0x80,0x72,0xff,0x8f, 0x70,0x73,0xff,0x8a,0x6a,0x6e,0xff,0xa0,0x7c,0x6f,0xff,0xa1,0x7f,0x73,0xff,0xa4, 0x7e,0x77,0xff,0x6c,0x5b,0x5a,0xff,0x34,0x39,0x39,0xff,0x37,0x3b,0x38,0xff,0x36, 0x3b,0x37,0xff,0x30,0x34,0x31,0xff,0x1a,0x20,0x1b,0xff,0x19,0x1e,0x19,0xff,0x22, 0x25,0x22,0xff,0x1c,0x21,0x1e,0xff,0x20,0x24,0x20,0xfe,0x4c,0x42,0x3d,0xfe,0x97, 0x7c,0x74,0xfe,0xaf,0x8f,0x84,0xfe,0xa4,0x82,0x77,0xfe,0x9f,0x7c,0x71,0xfe,0xa0, 0x7f,0x73,0xff,0xa6,0x81,0x76,0xff,0xa0,0x7c,0x72,0xff,0x4c,0x41,0x40,0xff,0x36, 0x34,0x39,0xff,0x8a,0x72,0x6d,0xff,0xa7,0x84,0x79,0xff,0x9e,0x7c,0x71,0xff,0x9e, 0x7b,0x70,0xff,0x9e,0x7c,0x71,0xff,0x9f,0x7d,0x72,0xff,0x97,0x72,0x6b,0xff,0x8d, 0x67,0x68,0xff,0x89,0x65,0x6a,0xff,0x8e,0x6f,0x6c,0xff,0x92,0x71,0x69,0xff,0x7a, 0x62,0x6d,0xff,0x84,0x63,0x6b,0xff,0x93,0x6c,0x67,0xff,0x9d,0x76,0x6a,0xff,0x67, 0x53,0x5e,0xff,0xba,0xa7,0xa2,0xff,0x8e,0x77,0x84,0xff,0x37,0x39,0x37,0xff,0x3b, 0x3f,0x3b,0xff,0x2b,0x2c,0x2e,0xff,0x75,0x59,0x62,0xff,0xa7,0x86,0x7e,0xff,0xa1, 0x7f,0x74,0xff,0x9e,0x7c,0x71,0xff,0x9e,0x7c,0x71,0xff,0x9f,0x7d,0x72,0xff,0x9e, 0x7c,0x71,0xff,0x9e,0x7c,0x71,0xff,0x9f,0x7d,0x72,0xff,0x9e,0x7c,0x71,0xff,0x9e, 0x7c,0x70,0xff,0x9f,0x7d,0x72,0xff,0x9e,0x7c,0x71,0xff,0x9e,0x7c,0x71,0xff,0x9f, 0x7d,0x72,0xff,0x9e,0x7c,0x71,0xff,0x9e,0x7c,0x71,0xff,0x9f,0x7d,0x71,0xff,0x95, 0x6e,0x70,0xff,0x3e,0x3e,0x3c,0xff,0x41,0x41,0x42,0xff,0x2b,0x33,0x2b,0xff,0x2c, 0x34,0x2d,0xff,0x28,0x32,0x2a,0xff,0x93,0x73,0x69,0xff,0xa5,0x85,0x7b,0xff,0x9e, 0x7c,0x71,0xff,0x9e,0x7b,0x70,0xff,0x9e,0x7c,0x71,0xff,0x9e,0x7c,0x71,0xff,0x9e, 0x7c,0x71,0xff,0x9e,0x7b,0x70,0xff,0x9e,0x7c,0x71,0xff,0x9e,0x7c,0x71,0xff,0x9e, 0x7c,0x71,0xff,0x9e,0x7c,0x71,0xff,0x9d,0x7b,0x70,0xff,0x8e,0x6c,0x75,0xff,0x9c, 0x79,0x70,0xff,0x98,0x79,0x6e,0xff,0x81,0x67,0x73,0xff,0x4b,0x47,0x41,0xff,0x6f, 0x57,0x4f,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x02,0x02,0x02,0xff,0x2c, 0x2d,0x2c,0xff,0x36,0x3b,0x37,0xff,0x34,0x38,0x34,0xff,0x3c,0x3e,0x3c,0xff,0x44, 0x43,0x45,0xff,0x49,0x45,0x4a,0xff,0x46,0x40,0x43,0xff,0xa4,0x83,0x78,0xff,0xa0, 0x7e,0x74,0xff,0x9e,0x7c,0x70,0xff,0x9e,0x7b,0x70,0xff,0x9e,0x7b,0x70,0xff,0x9d, 0x7a,0x70,0xff,0x9e,0x7b,0x70,0xff,0x9d,0x7a,0x70,0xff,0x9d,0x7a,0x70,0xff,0x9e, 0x7b,0x70,0xff,0x9e,0x7b,0x70,0xff,0x9d,0x7a,0x70,0xff,0x9e,0x7b,0x70,0xff,0x9e, 0x7a,0x70,0xff,0x8c,0x6d,0x66,0xff,0x3d,0x3e,0x43,0xfe,0x3c,0x3e,0x3f,0xfc,0x55, 0x43,0x51,0xf8,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,0xd8,0x00, 0x00,0x00,0xcf,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0xd3,0x15,0x13,0x11,0xde,0x5c, 0x4e,0x48,0xe9,0xa3,0x87,0x7d,0xf2,0xa4,0x82,0x76,0xf8,0x9f,0x7c,0x71,0xfc,0x9a, 0x77,0x6d,0xfd,0x9b,0x78,0x6e,0xfe,0x9e,0x7a,0x6f,0xff,0x9e,0x79,0x6f,0xff,0x7a, 0x63,0x5f,0xff,0x3c,0x3d,0x41,0xff,0x22,0x2e,0x23,0xff,0x2c,0x34,0x2d,0xff,0x3f, 0x3f,0x3f,0xff,0x2e,0x32,0x31,0xff,0x3f,0x3b,0x33,0xff,0x88,0x6f,0x6b,0xff,0x40, 0x3f,0x43,0xff,0x48,0x45,0x48,0xff,0x44,0x43,0x45,0xff,0x4b,0x46,0x4a,0xff,0x2e, 0x34,0x32,0xff,0x54,0x4b,0x3e,0xff,0x8e,0x71,0x6d,0xff,0x40,0x40,0x45,0xff,0x47, 0x44,0x47,0xff,0x4a,0x46,0x4c,0xff,0x4f,0x49,0x54,0xff,0x6d,0x5a,0x5d,0xff,0x9e, 0x7b,0x72,0xff,0xa9,0x87,0x7d,0xff,0x9f,0x7c,0x70,0xff,0x99,0x75,0x6b,0xff,0x9a, 0x76,0x6c,0xff,0x9a,0x76,0x6c,0xff,0x9a,0x76,0x6c,0xff,0x9a,0x76,0x6b,0xff,0x9a, 0x76,0x6c,0xff,0x9a,0x76,0x6c,0xff,0x9a,0x76,0x6b,0xff,0x9a,0x76,0x6b,0xff,0x9a, 0x76,0x6b,0xff,0x9a,0x76,0x6b,0xfd,0x9a,0x76,0x6b,0xfd,0x9c,0x77,0x6d,0xfb,0xa0, 0x7a,0x6f,0xf7,0x87,0x67,0x5e,0xf1,0x3e,0x2f,0x2b,0xe9,0x07,0x05,0x04,0xe1,0x00, 0x00,0x00,0xdb,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xe9,0x1c, 0x19,0x1c,0xf2,0x36,0x32,0x36,0xf8,0x39,0x34,0x3a,0xfc,0x50,0x46,0x4f,0xfe,0x51, 0x4a,0x54,0xff,0x5c,0x4f,0x5d,0xff,0x88,0x70,0x71,0xff,0x8e,0x72,0x69,0xff,0x83, 0x67,0x5f,0xff,0x83,0x66,0x5e,0xff,0x7c,0x5e,0x63,0xff,0x65,0x52,0x61,0xfd,0x4d, 0x47,0x4f,0xfa,0x47,0x45,0x4a,0xf3,0x28,0x23,0x24,0xe5,0x06,0x04,0x03,0xcf,0x00, 0x00,0x00,0xb1,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x41,0x00, 0x00,0x00,0x27,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x04,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x03,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x18,0x00, 0x00,0x00,0x29,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,0x79,0x00, 0x00,0x00,0x97,0x00,0x00,0x00,0xb3,0x02,0x02,0x03,0xca,0x2c,0x2a,0x29,0xdd,0x85, 0x75,0x6f,0xec,0xb2,0x93,0x88,0xf4,0xa2,0x7f,0x74,0xfa,0xa1,0x7f,0x74,0xfd,0xa1, 0x7f,0x74,0xfe,0xa0,0x7e,0x73,0xfe,0xa1,0x7f,0x73,0xff,0x9f,0x7c,0x71,0xff,0x9a, 0x76,0x6e,0xff,0x9e,0x7a,0x70,0xff,0xa1,0x7f,0x74,0xff,0xa0,0x7e,0x73,0xff,0x9f, 0x7d,0x72,0xff,0x9f,0x7e,0x73,0xff,0xa1,0x7f,0x74,0xff,0xa0,0x7e,0x73,0xff,0x9f, 0x7d,0x72,0xff,0xa0,0x7e,0x73,0xff,0x9f,0x7e,0x73,0xff,0xa1,0x7f,0x74,0xff,0xa0, 0x7e,0x73,0xff,0xa8,0x84,0x76,0xff,0x7a,0x65,0x67,0xff,0x74,0x61,0x64,0xff,0xa6, 0x81,0x74,0xff,0xa3,0x7f,0x71,0xff,0x8d,0x6f,0x74,0xff,0x51,0x4a,0x54,0xff,0x36, 0x3b,0x36,0xff,0x39,0x3d,0x3a,0xff,0x2f,0x33,0x31,0xff,0x22,0x25,0x22,0xff,0x1c, 0x21,0x1d,0xff,0x1d,0x22,0x1d,0xff,0x1e,0x22,0x21,0xff,0x2e,0x2e,0x2d,0xff,0x6b, 0x56,0x4f,0xff,0xa6,0x85,0x7a,0xff,0xaa,0x8a,0x7f,0xff,0xa1,0x7f,0x74,0xff,0xa1, 0x7e,0x73,0xff,0xa1,0x80,0x73,0xff,0xa7,0x80,0x77,0xff,0x95,0x73,0x6b,0xff,0x47, 0x42,0x3d,0xff,0x1f,0x23,0x24,0xff,0x7c,0x65,0x5d,0xff,0xaa,0x86,0x79,0xff,0x9f, 0x7e,0x73,0xff,0xa0,0x7e,0x73,0xff,0xa0,0x7e,0x73,0xff,0xa1,0x7f,0x74,0xff,0x9c, 0x78,0x6e,0xff,0x97,0x73,0x68,0xff,0x93,0x6c,0x67,0xff,0x85,0x66,0x72,0xff,0x6d, 0x59,0x64,0xff,0x69,0x57,0x64,0xff,0x85,0x65,0x68,0xff,0x8e,0x68,0x67,0xff,0x93, 0x6e,0x66,0xff,0xaa,0x83,0x77,0xff,0x3d,0x3d,0x38,0xff,0xab,0x96,0x8d,0xff,0x59, 0x55,0x50,0xff,0x29,0x31,0x2b,0xff,0x31,0x36,0x32,0xff,0x2f,0x2d,0x36,0xff,0x95, 0x78,0x72,0xff,0xa7,0x85,0x7a,0xff,0x9f,0x7d,0x72,0xff,0xa0,0x7e,0x73,0xff,0x9f, 0x7d,0x72,0xff,0xa0,0x7e,0x73,0xff,0x9f,0x7d,0x72,0xff,0xa0,0x7e,0x73,0xff,0x9f, 0x7d,0x72,0xff,0x9f,0x7d,0x72,0xff,0xa0,0x7e,0x73,0xff,0xa0,0x7e,0x73,0xff,0xa0, 0x7e,0x73,0xff,0xa0,0x7e,0x73,0xff,0x9f,0x7d,0x72,0xff,0xa0,0x7e,0x73,0xff,0x9e, 0x7c,0x71,0xff,0xa2,0x80,0x72,0xff,0x89,0x6a,0x7c,0xff,0x3f,0x3f,0x3e,0xff,0x41, 0x41,0x42,0xff,0x2b,0x33,0x2b,0xff,0x2d,0x34,0x2d,0xff,0x2c,0x34,0x2e,0xff,0xa0, 0x82,0x79,0xff,0xa3,0x82,0x77,0xff,0x9e,0x7c,0x71,0xff,0x9e,0x7c,0x71,0xff,0x9f, 0x7d,0x72,0xff,0x9e,0x7c,0x71,0xff,0x9f,0x7d,0x72,0xff,0x9e,0x7d,0x72,0xff,0x9e, 0x7c,0x71,0xff,0x9e,0x7c,0x71,0xff,0x9e,0x7c,0x71,0xff,0x9f,0x7d,0x72,0xff,0x94, 0x6f,0x68,0xff,0x97,0x77,0x74,0xff,0x9d,0x7b,0x6f,0xff,0x9f,0x7d,0x72,0xff,0xa0, 0x7e,0x72,0xff,0x9e,0x7c,0x71,0xff,0x72,0x5a,0x52,0xff,0x00,0x00,0x00,0xff,0x00, 0x00,0x00,0xff,0x02,0x02,0x02,0xff,0x2e,0x2f,0x2e,0xff,0x38,0x3c,0x38,0xff,0x36, 0x3a,0x37,0xff,0x3c,0x3e,0x3c,0xff,0x44,0x43,0x45,0xff,0x4c,0x47,0x4d,0xff,0x4c, 0x45,0x4b,0xff,0x82,0x62,0x5c,0xff,0xa9,0x88,0x7d,0xff,0x9d,0x7b,0x70,0xff,0x9e, 0x7c,0x71,0xff,0x9e,0x7c,0x71,0xff,0x9e,0x7b,0x70,0xff,0x9e,0x7b,0x70,0xff,0x9e, 0x7b,0x70,0xff,0x9e,0x7b,0x70,0xff,0x9e,0x7b,0x70,0xff,0x9e,0x7b,0x70,0xff,0x9e, 0x7b,0x70,0xff,0x9e,0x7b,0x70,0xff,0x9d,0x78,0x70,0xff,0x81,0x62,0x5f,0xff,0x38, 0x3c,0x3c,0xff,0x6e,0x58,0x60,0xfe,0x7d,0x5a,0x60,0xfc,0x2e,0x22,0x27,0xf8,0x00, 0x00,0x00,0xf2,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0xe7,0x05,0x04,0x04,0xe6,0x35, 0x2d,0x29,0xea,0x83,0x6f,0x6a,0xf0,0xa4,0x88,0x85,0xf5,0x9c,0x77,0x6f,0xf9,0x9d, 0x7a,0x70,0xfd,0x9d,0x7a,0x70,0xfd,0x9e,0x7a,0x70,0xfe,0xa1,0x7b,0x71,0xff,0x98, 0x72,0x6f,0xff,0x62,0x52,0x4e,0xff,0x27,0x31,0x2d,0xff,0x23,0x2e,0x24,0xff,0x29, 0x31,0x29,0xff,0x30,0x36,0x31,0xff,0x41,0x41,0x41,0xff,0x49,0x46,0x4a,0xff,0x4d, 0x48,0x4f,0xff,0x4e,0x48,0x50,0xff,0x43,0x42,0x44,0xff,0x55,0x4b,0x52,0xff,0x56, 0x4c,0x51,0xff,0x39,0x3c,0x3a,0xff,0x28,0x32,0x2a,0xff,0x57,0x4d,0x47,0xff,0x73, 0x5c,0x5b,0xff,0x40,0x40,0x44,0xff,0x49,0x45,0x49,0xff,0x4f,0x48,0x4f,0xff,0x4f, 0x49,0x50,0xff,0x4b,0x47,0x4e,0xff,0x5f,0x4f,0x55,0xff,0x8f,0x6e,0x71,0xff,0xa6, 0x84,0x7e,0xff,0xa0,0x7c,0x70,0xff,0x9b,0x76,0x6c,0xff,0x9a,0x76,0x6c,0xff,0x9a, 0x76,0x6c,0xff,0x9a,0x76,0x6c,0xff,0x9a,0x76,0x6c,0xff,0x9a,0x76,0x6c,0xff,0x9a, 0x76,0x6c,0xff,0x9a,0x76,0x6b,0xff,0x9a,0x76,0x6c,0xff,0x9a,0x76,0x6c,0xff,0x9a, 0x76,0x6c,0xff,0x9a,0x76,0x6c,0xfe,0x9a,0x76,0x6c,0xfc,0x9d,0x79,0x6d,0xfa,0x9d, 0x79,0x6e,0xf6,0x6b,0x52,0x4b,0xf2,0x25,0x1c,0x1a,0xef,0x03,0x03,0x03,0xee,0x00, 0x00,0x00,0xf0,0x0c,0x09,0x0b,0xf4,0x2d,0x27,0x2c,0xf9,0x2c,0x2c,0x2c,0xfb,0x2d, 0x2b,0x2d,0xfd,0x44,0x3b,0x44,0xff,0x3d,0x3d,0x3e,0xff,0x39,0x3c,0x38,0xff,0x53, 0x49,0x4d,0xff,0x60,0x54,0x54,0xff,0x59,0x50,0x4e,0xff,0x55,0x4c,0x4c,0xff,0x5b, 0x53,0x52,0xff,0x5e,0x58,0x57,0xfe,0x5a,0x57,0x54,0xfd,0x79,0x66,0x72,0xf9,0x9a, 0x7c,0x7a,0xf1,0x32,0x27,0x23,0xe2,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0xab,0x00, 0x00,0x00,0x86,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x25,0x00, 0x00,0x00,0x14,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x02,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x12,0x00, 0x00,0x00,0x1d,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x63,0x00, 0x00,0x00,0x83,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0xbc,0x08,0x08,0x08,0xd3,0x4b, 0x46,0x44,0xe4,0xa0,0x8c,0x84,0xef,0xb3,0x92,0x87,0xf7,0x9f,0x7d,0x72,0xfc,0xa1, 0x7f,0x74,0xfe,0xa1,0x7f,0x74,0xfe,0xa2,0x80,0x75,0xff,0xa5,0x82,0x75,0xff,0xa0, 0x7e,0x75,0xff,0x93,0x70,0x6f,0xff,0x97,0x72,0x6b,0xff,0xa3,0x82,0x76,0xff,0xa2, 0x80,0x75,0xff,0xa0,0x7f,0x74,0xff,0xa0,0x7f,0x74,0xff,0xa1,0x7f,0x74,0xff,0xa1, 0x80,0x75,0xff,0xa1,0x80,0x75,0xff,0xa0,0x7e,0x73,0xff,0xa0,0x7f,0x74,0xff,0xa1, 0x80,0x75,0xff,0xa1,0x80,0x75,0xff,0xa2,0x81,0x75,0xff,0xa6,0x81,0x76,0xff,0x6b, 0x5a,0x58,0xff,0x71,0x61,0x5e,0xff,0xb9,0x93,0x86,0xff,0xb3,0x8d,0x82,0xff,0x6c, 0x5d,0x58,0xff,0x31,0x37,0x37,0xff,0x3d,0x3e,0x3c,0xff,0x34,0x37,0x34,0xff,0x27, 0x2a,0x27,0xff,0x18,0x1e,0x19,0xff,0x11,0x1a,0x13,0xff,0x1f,0x22,0x24,0xff,0x48, 0x40,0x45,0xff,0x8a,0x70,0x6b,0xff,0xab,0x89,0x7d,0xff,0xa5,0x84,0x79,0xff,0xa1, 0x7f,0x74,0xff,0xa0,0x7e,0x73,0xff,0xa4,0x82,0x74,0xff,0xa9,0x84,0x7e,0xff,0x86, 0x67,0x68,0xff,0x3c,0x3b,0x37,0xff,0x0a,0x18,0x13,0xff,0x69,0x55,0x5b,0xff,0xad, 0x8a,0x86,0xff,0xa6,0x84,0x78,0xff,0xa1,0x80,0x75,0xff,0xa1,0x80,0x75,0xff,0xa3, 0x81,0x74,0xff,0xa6,0x83,0x75,0xff,0xa1,0x7c,0x6d,0xff,0x92,0x6b,0x68,0xff,0x8f, 0x6a,0x68,0xff,0x90,0x6a,0x67,0xff,0x93,0x6c,0x68,0xff,0x8f,0x67,0x69,0xff,0x8d, 0x67,0x67,0xff,0x95,0x70,0x68,0xff,0x9b,0x77,0x6d,0xff,0xa8,0x84,0x78,0xff,0x5f, 0x52,0x4e,0xff,0x79,0x61,0x5c,0xff,0x4b,0x47,0x45,0xff,0x31,0x38,0x33,0xff,0x1a, 0x21,0x1b,0xff,0x5a,0x47,0x4f,0xff,0xa6,0x88,0x82,0xff,0xa5,0x85,0x79,0xff,0xa0, 0x7d,0x72,0xff,0xa1,0x7f,0x74,0xff,0xa0,0x7e,0x73,0xff,0xa1,0x7f,0x74,0xff,0xa1, 0x7f,0x74,0xff,0xa0,0x7d,0x72,0xff,0xa2,0x80,0x75,0xff,0xa1,0x80,0x75,0xff,0xa3, 0x82,0x75,0xff,0xa3,0x82,0x76,0xff,0xa1,0x7f,0x74,0xff,0xa0,0x7e,0x73,0xff,0xa1, 0x7f,0x74,0xff,0xa1,0x7f,0x74,0xff,0xa0,0x7f,0x74,0xff,0xa4,0x82,0x75,0xff,0x6c, 0x5b,0x69,0xff,0x3b,0x3d,0x3c,0xff,0x40,0x40,0x40,0xff,0x2f,0x36,0x2f,0xff,0x2c, 0x34,0x2d,0xff,0x44,0x41,0x47,0xff,0xa8,0x8c,0x85,0xff,0xa2,0x81,0x76,0xff,0xa0, 0x7e,0x73,0xff,0x9f,0x7d,0x72,0xff,0xa0,0x7e,0x73,0xff,0x9f,0x7d,0x72,0xff,0xa0, 0x7e,0x73,0xff,0xa0,0x7e,0x73,0xff,0xa0,0x7e,0x73,0xff,0x9f,0x7d,0x72,0xff,0x9f, 0x7d,0x72,0xff,0x9f,0x7d,0x72,0xff,0x93,0x6e,0x6a,0xff,0x5c,0x50,0x5e,0xff,0xa4, 0x83,0x79,0xff,0x9f,0x7d,0x72,0xff,0xa0,0x7e,0x73,0xff,0x9e,0x7c,0x71,0xff,0x7a, 0x5f,0x57,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x02,0x02,0x02,0xff,0x2d, 0x2f,0x2e,0xff,0x38,0x3c,0x38,0xff,0x36,0x3a,0x37,0xff,0x3c,0x3e,0x3c,0xff,0x45, 0x43,0x46,0xff,0x4e,0x49,0x4f,0xff,0x51,0x49,0x50,0xff,0x61,0x4a,0x50,0xff,0xb5, 0x95,0x8a,0xff,0x9f,0x7b,0x70,0xff,0x9f,0x7d,0x72,0xff,0x9f,0x7d,0x72,0xff,0x9e, 0x7c,0x71,0xff,0x9f,0x7d,0x72,0xff,0x9e,0x7c,0x71,0xff,0x9e,0x7c,0x71,0xff,0x9e, 0x7c,0x71,0xff,0x9e,0x7c,0x71,0xff,0x9e,0x7c,0x71,0xff,0x9e,0x7c,0x71,0xff,0x9d, 0x78,0x6f,0xff,0x85,0x63,0x65,0xff,0x63,0x54,0x5e,0xff,0x92,0x68,0x6a,0xff,0x8a, 0x65,0x6c,0xfe,0x68,0x4d,0x56,0xfd,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0xf6,0x17, 0x12,0x10,0xf6,0x5c,0x4b,0x46,0xf5,0xab,0x8d,0x82,0xf6,0x9f,0x80,0x7c,0xf9,0x72, 0x57,0x66,0xfc,0x97,0x70,0x6b,0xfd,0x9e,0x7c,0x71,0xfe,0x9f,0x7b,0x70,0xfe,0xa3, 0x7e,0x75,0xff,0x8d,0x6e,0x72,0xff,0x4f,0x44,0x45,0xff,0x1c,0x29,0x21,0xff,0x24, 0x2e,0x25,0xff,0x29,0x32,0x2a,0xff,0x2c,0x33,0x2c,0xff,0x32,0x37,0x32,0xff,0x41, 0x41,0x42,0xff,0x4b,0x46,0x4c,0xff,0x49,0x45,0x4a,0xff,0x48,0x45,0x49,0xff,0x40, 0x41,0x43,0xff,0x56,0x4d,0x50,0xff,0x63,0x52,0x56,0xff,0x2d,0x34,0x2f,0xff,0x42, 0x41,0x42,0xff,0x47,0x45,0x48,0xff,0x44,0x42,0x45,0xff,0x47,0x44,0x46,0xff,0x4b, 0x46,0x4b,0xff,0x51,0x4a,0x52,0xff,0x50,0x49,0x50,0xff,0x51,0x49,0x50,0xff,0x4e, 0x49,0x50,0xff,0x59,0x4e,0x5c,0xff,0x80,0x68,0x75,0xff,0xa1,0x80,0x78,0xff,0xa2, 0x7c,0x70,0xff,0x9a,0x76,0x6d,0xff,0x9a,0x76,0x6c,0xff,0x9b,0x77,0x6d,0xff,0x9b, 0x77,0x6d,0xff,0x9a,0x76,0x6c,0xff,0x9a,0x76,0x6c,0xff,0x9a,0x76,0x6c,0xff,0x9a, 0x77,0x6d,0xff,0x9a,0x77,0x6d,0xff,0x9a,0x76,0x6c,0xff,0x9a,0x76,0x6c,0xfe,0x9a, 0x76,0x6c,0xfe,0x9a,0x76,0x6c,0xfe,0x9b,0x76,0x6c,0xfc,0xa3,0x7d,0x72,0xfa,0x90, 0x6f,0x65,0xf9,0x51,0x3e,0x39,0xf8,0x0c,0x09,0x07,0xfa,0x22,0x1b,0x20,0xfa,0x41, 0x36,0x3f,0xfc,0x33,0x30,0x34,0xfe,0x39,0x33,0x39,0xff,0x3e,0x35,0x3e,0xff,0x41, 0x3c,0x42,0xff,0x6c,0x5a,0x68,0xff,0x7e,0x60,0x6c,0xff,0x8d,0x6d,0x70,0xff,0xa2, 0x7f,0x76,0xff,0xa0,0x7a,0x6e,0xff,0xa9,0x85,0x7b,0xff,0xb0,0x90,0x85,0xfe,0xb2, 0x92,0x88,0xfd,0xad,0x8c,0x81,0xfc,0xa8,0x83,0x78,0xf8,0x80,0x62,0x59,0xef,0x1e, 0x17,0x15,0xdf,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x82,0x00, 0x00,0x00,0x5e,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x12,0x00, 0x00,0x00,0x08,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x0c,0x00, 0x00,0x00,0x17,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x51,0x00, 0x00,0x00,0x6f,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0xc7,0x12, 0x11,0x10,0xdb,0x6f,0x66,0x61,0xea,0xb6,0x9b,0x92,0xf3,0xac,0x88,0x7d,0xf9,0xa0, 0x7e,0x73,0xfc,0xa2,0x81,0x76,0xfe,0xa1,0x80,0x75,0xff,0xa3,0x82,0x77,0xff,0x9d, 0x7c,0x70,0xff,0x8e,0x70,0x69,0xff,0x88,0x69,0x74,0xff,0x8a,0x68,0x70,0xff,0xa3, 0x81,0x73,0xff,0xa2,0x81,0x76,0xff,0xa1,0x80,0x75,0xff,0xa1,0x80,0x75,0xff,0xa1, 0x81,0x76,0xff,0xa1,0x80,0x75,0xff,0xa1,0x80,0x75,0xff,0xa1,0x80,0x75,0xff,0xa2, 0x81,0x76,0xff,0xa2,0x81,0x76,0xff,0xa1,0x80,0x75,0xff,0xa1,0x80,0x75,0xff,0xa5, 0x84,0x78,0xff,0xa5,0x7c,0x79,0xff,0x50,0x43,0x43,0xff,0x38,0x3d,0x36,0xff,0x78, 0x6b,0x66,0xff,0x9c,0x80,0x76,0xff,0x8c,0x6e,0x6b,0xff,0x48,0x44,0x46,0xff,0x34, 0x38,0x35,0xff,0x27,0x2a,0x28,0xff,0x23,0x25,0x23,0xff,0x16,0x1f,0x1b,0xff,0x2c, 0x2a,0x2a,0xff,0x6b,0x57,0x5e,0xff,0xa3,0x85,0x80,0xff,0xaf,0x8d,0x80,0xff,0xa3, 0x82,0x77,0xff,0xa1,0x7f,0x74,0xff,0xa1,0x80,0x75,0xff,0xa8,0x85,0x77,0xff,0xa4, 0x81,0x7e,0xff,0x75,0x5f,0x69,0xff,0x32,0x37,0x34,0xff,0x0d,0x1d,0x13,0xff,0x42, 0x3b,0x3a,0xff,0x99,0x7d,0x75,0xff,0xa3,0x81,0x78,0xff,0x9a,0x77,0x6f,0xff,0x9f, 0x7c,0x71,0xff,0xa5,0x83,0x77,0xff,0x98,0x79,0x77,0xff,0x8b,0x70,0x74,0xff,0x82, 0x68,0x6d,0xff,0x89,0x66,0x68,0xff,0x94,0x6e,0x68,0xff,0x94,0x6f,0x68,0xff,0x91, 0x6b,0x68,0xff,0x90,0x6a,0x67,0xff,0x9a,0x75,0x6c,0xff,0x9e,0x7a,0x70,0xff,0xa1, 0x80,0x75,0xff,0xa3,0x83,0x76,0xff,0xa3,0x76,0x79,0xff,0x41,0x3f,0x3f,0xff,0x6a, 0x57,0x63,0xff,0x43,0x40,0x40,0xff,0x12,0x1c,0x19,0xff,0x8a,0x72,0x69,0xff,0xab, 0x8a,0x80,0xff,0xa2,0x80,0x75,0xff,0xa2,0x80,0x75,0xff,0xa1,0x80,0x75,0xff,0xa2, 0x81,0x76,0xff,0xa1,0x7f,0x74,0xff,0xa1,0x7f,0x74,0xff,0xa2,0x81,0x76,0xff,0x9f, 0x7d,0x71,0xff,0xa0,0x7d,0x71,0xff,0x94,0x72,0x6f,0xff,0x97,0x73,0x6e,0xff,0xa0, 0x7f,0x74,0xff,0xa1,0x7f,0x74,0xff,0xa1,0x80,0x75,0xff,0xa1,0x7f,0x74,0xff,0xa1, 0x80,0x75,0xff,0xa8,0x85,0x78,0xff,0x4c,0x48,0x48,0xff,0x36,0x3a,0x37,0xff,0x3f, 0x40,0x40,0xff,0x33,0x38,0x34,0xff,0x26,0x30,0x27,0xff,0x6c,0x59,0x6b,0xff,0xab, 0x8d,0x86,0xff,0xa3,0x82,0x77,0xff,0xa1,0x7f,0x74,0xff,0xa1,0x7f,0x74,0xff,0xa1, 0x7f,0x74,0xff,0xa1,0x7e,0x73,0xff,0xa0,0x7e,0x73,0xff,0xa0,0x7e,0x73,0xff,0xa1, 0x7f,0x74,0xff,0xa1,0x7e,0x73,0xff,0xa0,0x7e,0x73,0xff,0xa1,0x7f,0x74,0xff,0xa0, 0x7e,0x73,0xff,0x33,0x39,0x37,0xff,0xb6,0x9c,0x93,0xff,0xa0,0x7d,0x72,0xff,0xa0, 0x7e,0x73,0xff,0xa0,0x7f,0x74,0xff,0x83,0x68,0x5e,0xff,0x00,0x00,0x00,0xff,0x00, 0x00,0x00,0xff,0x02,0x02,0x02,0xff,0x2b,0x2f,0x2c,0xff,0x39,0x3c,0x39,0xff,0x36, 0x3a,0x37,0xff,0x3c,0x3e,0x3c,0xff,0x46,0x44,0x47,0xff,0x4f,0x49,0x50,0xff,0x51, 0x49,0x52,0xff,0x4b,0x41,0x4a,0xff,0xbf,0xa3,0x98,0xff,0xa0,0x7d,0x72,0xff,0x9f, 0x7d,0x72,0xff,0xa0,0x7e,0x73,0xff,0x9f,0x7d,0x72,0xff,0x9f,0x7d,0x72,0xff,0xa0, 0x7e,0x73,0xff,0x9f,0x7d,0x72,0xff,0x9f,0x7d,0x72,0xff,0x9f,0x7d,0x72,0xff,0x9f, 0x7d,0x72,0xff,0x9f,0x7d,0x72,0xff,0x9d,0x7a,0x70,0xff,0x8c,0x68,0x6b,0xff,0x84, 0x66,0x7b,0xff,0x8b,0x65,0x66,0xff,0x89,0x65,0x6b,0xfe,0x7c,0x5b,0x62,0xff,0x47, 0x35,0x31,0xfe,0x49,0x3a,0x34,0xfd,0x82,0x67,0x5e,0xfc,0xb0,0x8c,0x81,0xfc,0xa1, 0x7e,0x71,0xfd,0x9a,0x77,0x6d,0xfd,0x9a,0x75,0x6c,0xfe,0xa0,0x7e,0x71,0xff,0x9f, 0x7c,0x70,0xff,0x99,0x77,0x6d,0xff,0x70,0x5d,0x61,0xff,0x3a,0x3b,0x3f,0xff,0x18, 0x28,0x1b,0xff,0x23,0x2e,0x24,0xff,0x26,0x31,0x26,0xff,0x2b,0x33,0x2b,0xff,0x2f, 0x35,0x2f,0xff,0x33,0x38,0x34,0xff,0x42,0x41,0x43,0xff,0x4c,0x47,0x4d,0xff,0x4a, 0x46,0x4b,0xff,0x4a,0x46,0x4b,0xff,0x4a,0x47,0x4b,0xff,0x4a,0x46,0x4b,0xff,0x36, 0x3a,0x38,0xff,0x40,0x40,0x40,0xff,0x61,0x54,0x61,0xff,0x44,0x43,0x46,0xff,0x47, 0x44,0x48,0xff,0x47,0x44,0x48,0xff,0x4c,0x47,0x4d,0xff,0x52,0x4b,0x52,0xff,0x51, 0x4a,0x51,0xff,0x51,0x4a,0x51,0xff,0x52,0x4b,0x52,0xff,0x51,0x4a,0x51,0xff,0x51, 0x49,0x55,0xff,0x6b,0x5a,0x64,0xff,0x93,0x73,0x6d,0xff,0xa2,0x7d,0x70,0xff,0x9c, 0x79,0x6e,0xff,0x9b,0x77,0x6d,0xff,0x9b,0x77,0x6d,0xff,0x9b,0x77,0x6d,0xff,0x9b, 0x78,0x6e,0xff,0x9a,0x78,0x6e,0xff,0x9b,0x78,0x6e,0xff,0x9a,0x77,0x6d,0xff,0x9b, 0x76,0x6c,0xff,0x9b,0x76,0x6c,0xff,0x9a,0x76,0x6c,0xff,0x9b,0x77,0x6d,0xff,0x9b, 0x77,0x6d,0xfe,0x9a,0x76,0x6c,0xfe,0x9e,0x79,0x6e,0xfd,0xa5,0x7e,0x74,0xfd,0x7c, 0x5f,0x55,0xfd,0x55,0x43,0x46,0xfd,0x3a,0x32,0x3d,0xff,0x33,0x2f,0x37,0xff,0x42, 0x38,0x41,0xff,0x45,0x39,0x45,0xff,0x40,0x36,0x40,0xff,0x4c,0x44,0x4e,0xff,0x56, 0x4e,0x5a,0xff,0x59,0x4f,0x61,0xff,0x87,0x6a,0x70,0xff,0xa1,0x7d,0x74,0xff,0x9a, 0x77,0x6c,0xff,0x98,0x74,0x6a,0xff,0x98,0x73,0x69,0xff,0x99,0x74,0x6a,0xff,0x99, 0x75,0x6b,0xfc,0xa6,0x7e,0x74,0xf8,0x78,0x5c,0x54,0xee,0x16,0x12,0x10,0xde,0x00, 0x00,0x00,0xc7,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x5a,0x00, 0x00,0x00,0x39,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x07,0x00, 0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x07,0x00, 0x00,0x00,0x0e,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x44,0x00, 0x00,0x00,0x5e,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0xb5,0x00, 0x00,0x00,0xcd,0x2b,0x2a,0x29,0xe0,0x94,0x87,0x82,0xed,0xbd,0x9f,0x96,0xf6,0xa6, 0x84,0x78,0xfb,0xa1,0x80,0x75,0xfd,0xa3,0x82,0x77,0xff,0xa3,0x82,0x77,0xff,0xa3, 0x82,0x77,0xff,0xa5,0x83,0x77,0xff,0x83,0x68,0x61,0xff,0x53,0x45,0x53,0xff,0x78, 0x60,0x71,0xff,0xa3,0x81,0x78,0xff,0xa3,0x82,0x77,0xff,0xa2,0x81,0x76,0xff,0xa3, 0x82,0x77,0xff,0xa3,0x82,0x77,0xff,0xa2,0x81,0x76,0xff,0xa3,0x82,0x77,0xff,0xa3, 0x82,0x77,0xff,0xa4,0x83,0x78,0xff,0xa4,0x83,0x78,0xff,0xa2,0x81,0x76,0xff,0xa1, 0x80,0x76,0xff,0xa6,0x85,0x78,0xff,0xa8,0x83,0x76,0xff,0x7d,0x61,0x62,0xff,0x58, 0x4d,0x4c,0xff,0x66,0x58,0x4d,0xff,0x4a,0x45,0x46,0xff,0x43,0x41,0x3c,0xff,0x7c, 0x62,0x67,0xff,0x60,0x50,0x5b,0xff,0x24,0x28,0x26,0xff,0x23,0x25,0x23,0xff,0x1a, 0x1f,0x1f,0xff,0x3b,0x35,0x33,0xff,0x8b,0x6d,0x6a,0xff,0xb3,0x8f,0x87,0xff,0xab, 0x8a,0x7e,0xff,0xa2,0x81,0x76,0xff,0xa3,0x82,0x76,0xff,0xa4,0x83,0x78,0xff,0xac, 0x88,0x7a,0xff,0x99,0x7a,0x76,0xff,0x5e,0x52,0x5a,0xff,0x29,0x32,0x2e,0xff,0x19, 0x27,0x1b,0xff,0x26,0x23,0x21,0xff,0x8e,0x74,0x6e,0xff,0xac,0x88,0x7d,0xff,0x91, 0x6c,0x66,0xff,0x92,0x6c,0x65,0xff,0x98,0x74,0x69,0xff,0x9f,0x7b,0x6c,0xff,0x83, 0x67,0x76,0xff,0x72,0x59,0x6f,0xff,0x7a,0x60,0x6a,0xff,0x8f,0x6c,0x68,0xff,0x93, 0x6c,0x66,0xff,0x92,0x6c,0x67,0xff,0x92,0x6c,0x67,0xff,0x9c,0x79,0x6f,0xff,0xa3, 0x82,0x76,0xff,0xa2,0x81,0x76,0xff,0xa2,0x81,0x76,0xff,0xab,0x89,0x7b,0xff,0x84, 0x69,0x6f,0xff,0x2c,0x33,0x2c,0xff,0x6b,0x58,0x60,0xff,0x37,0x36,0x35,0xff,0x33, 0x2a,0x2d,0xff,0xa4,0x8e,0x87,0xff,0xb2,0x90,0x84,0xff,0xac,0x86,0x7b,0xff,0xab, 0x87,0x7b,0xff,0xa8,0x85,0x78,0xff,0xa6,0x84,0x77,0xff,0xa4,0x83,0x76,0xff,0xa4, 0x83,0x76,0xff,0xa7,0x84,0x76,0xff,0x8f,0x6a,0x68,0xff,0x9d,0x7b,0x71,0xff,0x98, 0x74,0x71,0xff,0x7e,0x60,0x6e,0xff,0x9d,0x7c,0x75,0xff,0xa3,0x81,0x76,0xff,0xa2, 0x81,0x76,0xff,0xa2,0x81,0x76,0xff,0xa3,0x82,0x77,0xff,0x9b,0x73,0x6e,0xff,0x40, 0x3f,0x3c,0xff,0x37,0x3b,0x38,0xff,0x3e,0x3f,0x3f,0xff,0x32,0x38,0x33,0xff,0x1d, 0x29,0x1f,0xff,0x7f,0x60,0x6a,0xff,0xa9,0x89,0x80,0xff,0xa1,0x81,0x76,0xff,0xa2, 0x80,0x75,0xff,0xa1,0x80,0x75,0xff,0xa1,0x7f,0x74,0xff,0xa1,0x80,0x75,0xff,0xa1, 0x80,0x75,0xff,0xa2,0x80,0x75,0xff,0xa1,0x80,0x75,0xff,0xa1,0x80,0x75,0xff,0xa2, 0x80,0x75,0xff,0xa0,0x7f,0x74,0xff,0xa1,0x80,0x75,0xff,0x64,0x51,0x54,0xff,0xb8, 0x9e,0x94,0xff,0xa2,0x80,0x76,0xff,0xa1,0x80,0x75,0xff,0xa1,0x80,0x75,0xff,0x8a, 0x6d,0x63,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x02,0x02,0x02,0xff,0x2e, 0x30,0x30,0xff,0x37,0x3a,0x37,0xff,0x36,0x3a,0x37,0xff,0x3d,0x3f,0x3e,0xff,0x47, 0x45,0x48,0xff,0x50,0x4a,0x51,0xff,0x52,0x4a,0x52,0xff,0x4a,0x43,0x48,0xff,0xab, 0x91,0x86,0xff,0xa4,0x83,0x78,0xff,0xa1,0x7e,0x73,0xff,0xa1,0x7f,0x74,0xff,0xa0, 0x7e,0x73,0xff,0xa0,0x7e,0x73,0xff,0xa1,0x7f,0x74,0xff,0xa1,0x7f,0x74,0xff,0xa0, 0x7e,0x73,0xff,0xa1,0x7f,0x74,0xff,0xa0,0x7e,0x73,0xff,0xa1,0x80,0x74,0xff,0x9f, 0x7b,0x72,0xff,0x87,0x64,0x68,0xff,0x73,0x5c,0x6f,0xff,0x8d,0x66,0x67,0xff,0x88, 0x64,0x69,0xff,0x8c,0x67,0x69,0xff,0x9b,0x77,0x6b,0xff,0xa6,0x83,0x78,0xff,0xa7, 0x83,0x77,0xfe,0x99,0x75,0x6b,0xfe,0x92,0x6d,0x68,0xff,0x99,0x77,0x70,0xff,0x88, 0x6c,0x74,0xff,0x96,0x72,0x6e,0xff,0x9c,0x7a,0x72,0xff,0x7b,0x62,0x70,0xff,0x47, 0x43,0x52,0xff,0x2a,0x30,0x2e,0xff,0x24,0x2c,0x29,0xff,0x2c,0x31,0x30,0xff,0x32, 0x37,0x37,0xff,0x2d,0x34,0x30,0xff,0x27,0x30,0x2a,0xff,0x2c,0x33,0x31,0xff,0x3d, 0x3e,0x41,0xff,0x4b,0x47,0x4c,0xff,0x4b,0x47,0x4c,0xff,0x4b,0x47,0x4c,0xff,0x4a, 0x46,0x4b,0xff,0x4b,0x47,0x4c,0xff,0x40,0x40,0x40,0xff,0x47,0x44,0x47,0xff,0x62, 0x54,0x62,0xff,0x45,0x43,0x46,0xff,0x48,0x45,0x49,0xff,0x49,0x46,0x4a,0xff,0x4e, 0x48,0x4e,0xff,0x52,0x4a,0x52,0xff,0x51,0x4a,0x51,0xff,0x51,0x4a,0x51,0xff,0x52, 0x4a,0x52,0xff,0x53,0x4b,0x53,0xff,0x52,0x4b,0x52,0xff,0x4d,0x48,0x52,0xff,0x5c, 0x50,0x58,0xff,0x85,0x66,0x66,0xff,0xa2,0x7c,0x75,0xff,0xa3,0x81,0x74,0xff,0x9b, 0x78,0x6f,0xff,0x9b,0x77,0x6d,0xff,0x9b,0x77,0x6d,0xff,0x9b,0x78,0x6e,0xff,0x9b, 0x78,0x6e,0xff,0x9b,0x78,0x6e,0xff,0x9a,0x77,0x6d,0xff,0x9a,0x78,0x6e,0xff,0x9b, 0x77,0x6d,0xff,0x9b,0x78,0x6e,0xff,0x9a,0x77,0x6d,0xff,0x9a,0x76,0x6c,0xff,0x9b, 0x78,0x6e,0xff,0x9b,0x77,0x6d,0xff,0xa3,0x7e,0x72,0xff,0x9f,0x79,0x74,0xff,0x7e, 0x61,0x5f,0xff,0x53,0x44,0x4d,0xff,0x34,0x30,0x3a,0xff,0x33,0x2f,0x35,0xff,0x39, 0x32,0x3a,0xff,0x3e,0x36,0x3e,0xff,0x55,0x4b,0x56,0xff,0x5a,0x51,0x5c,0xff,0x60, 0x50,0x5f,0xff,0x93,0x72,0x6e,0xff,0xa1,0x7c,0x70,0xff,0x9a,0x76,0x6c,0xff,0x9b, 0x77,0x6d,0xff,0x9b,0x77,0x6d,0xff,0x9b,0x76,0x6c,0xfe,0x9b,0x76,0x6c,0xfc,0xa7, 0x81,0x76,0xf7,0x6d,0x54,0x4c,0xed,0x12,0x0e,0x0d,0xdc,0x00,0x00,0x00,0xc1,0x00, 0x00,0x00,0xa0,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x34,0x00, 0x00,0x00,0x1d,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00, 0x00,0x00,0x09,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x30,0x00, 0x00,0x00,0x4b,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0xa6,0x00, 0x00,0x00,0xc0,0x08,0x08,0x08,0xd5,0x4d,0x49,0x47,0xe5,0xab,0x99,0x93,0xf1,0xc0, 0xa2,0x98,0xf8,0xa6,0x83,0x79,0xfc,0xa2,0x80,0x75,0xfd,0xa3,0x82,0x77,0xfe,0xa4, 0x83,0x77,0xff,0xa4,0x83,0x78,0xff,0xaa,0x86,0x7a,0xff,0x8b,0x6d,0x65,0xff,0x3d, 0x37,0x3d,0xff,0x53,0x4b,0x52,0xff,0xa7,0x89,0x84,0xff,0xad,0x8e,0x81,0xff,0xa3, 0x82,0x77,0xff,0xa4,0x83,0x78,0xff,0xa4,0x83,0x78,0xff,0xa4,0x83,0x78,0xff,0xa4, 0x83,0x79,0xff,0xa4,0x83,0x78,0xff,0xa5,0x84,0x79,0xff,0xa5,0x84,0x79,0xff,0xa4, 0x83,0x78,0xff,0xa4,0x83,0x78,0xff,0xaa,0x87,0x7b,0xff,0x99,0x7b,0x78,0xff,0x7c, 0x62,0x70,0xff,0x74,0x5d,0x62,0xff,0x93,0x74,0x69,0xff,0xbf,0x93,0x83,0xff,0x86, 0x6f,0x6c,0xff,0x19,0x23,0x23,0xff,0x33,0x31,0x37,0xff,0x4d,0x42,0x4c,0xff,0x1e, 0x22,0x1e,0xff,0x23,0x24,0x27,0xff,0x48,0x3f,0x40,0xff,0x93,0x76,0x6d,0xff,0xb3, 0x91,0x85,0xff,0xa8,0x88,0x7d,0xff,0xa4,0x82,0x78,0xff,0xa4,0x83,0x78,0xff,0xa5, 0x85,0x7b,0xff,0xad,0x87,0x7c,0xff,0x85,0x6c,0x65,0xff,0x46,0x43,0x44,0xff,0x24, 0x2e,0x27,0xff,0x1d,0x28,0x1d,0xff,0x11,0x19,0x17,0xff,0x71,0x5f,0x5f,0xff,0xb3, 0x94,0x8c,0xff,0xa7,0x86,0x7c,0xff,0xa0,0x7d,0x73,0xff,0xa0,0x7d,0x73,0xff,0x9f, 0x7c,0x72,0xff,0x9f,0x7c,0x71,0xff,0x99,0x79,0x77,0xff,0x99,0x78,0x75,0xff,0xa3, 0x7f,0x74,0xff,0xa1,0x7e,0x72,0xff,0x9f,0x7c,0x73,0xff,0x95,0x70,0x6a,0xff,0x9a, 0x77,0x6d,0xff,0xa3,0x82,0x76,0xff,0xa4,0x83,0x78,0xff,0xa3,0x82,0x77,0xff,0xa5, 0x84,0x79,0xff,0xa7,0x7e,0x77,0xff,0x52,0x4a,0x49,0xff,0x28,0x30,0x29,0xff,0x2c, 0x34,0x2e,0xff,0x15,0x1d,0x19,0xff,0x71,0x5d,0x59,0xff,0xb2,0x8f,0x83,0xff,0x75, 0x64,0x62,0xff,0x4f,0x4b,0x43,0xff,0x5b,0x52,0x4f,0xff,0x74,0x60,0x66,0xff,0x84, 0x6a,0x76,0xff,0x8e,0x6e,0x73,0xff,0x91,0x6f,0x76,0xff,0x7d,0x65,0x6d,0xff,0x8c, 0x6a,0x68,0xff,0x9f,0x7d,0x73,0xff,0xa8,0x87,0x77,0xff,0x7f,0x63,0x73,0xff,0x9c, 0x7b,0x73,0xff,0xa4,0x83,0x78,0xff,0xa3,0x82,0x77,0xff,0xa4,0x83,0x78,0xff,0xa7, 0x85,0x78,0xff,0x89,0x68,0x77,0xff,0x3f,0x3f,0x3f,0xff,0x38,0x3b,0x38,0xff,0x3c, 0x3e,0x3d,0xff,0x37,0x3a,0x38,0xff,0x17,0x24,0x1a,0xff,0x8c,0x6b,0x63,0xff,0xa8, 0x87,0x7d,0xff,0xa2,0x81,0x76,0xff,0xa2,0x81,0x76,0xff,0xa1,0x80,0x75,0xff,0xa2, 0x81,0x76,0xff,0xa1,0x81,0x76,0xff,0xa2,0x81,0x76,0xff,0xa2,0x81,0x76,0xff,0xa3, 0x82,0x77,0xff,0xa1,0x81,0x75,0xff,0xa2,0x81,0x76,0xff,0xa2,0x81,0x76,0xff,0xa2, 0x81,0x76,0xff,0x9a,0x72,0x6e,0xff,0xb3,0x98,0x8e,0xff,0xa9,0x88,0x7e,0xff,0xa1, 0x80,0x75,0xff,0xa1,0x80,0x75,0xff,0x91,0x73,0x69,0xff,0x00,0x00,0x00,0xff,0x00, 0x00,0x00,0xff,0x02,0x02,0x02,0xff,0x33,0x33,0x33,0xff,0x37,0x3a,0x37,0xff,0x37, 0x3b,0x37,0xff,0x41,0x41,0x41,0xff,0x48,0x45,0x48,0xff,0x52,0x4b,0x53,0xff,0x53, 0x4c,0x54,0xff,0x53,0x4a,0x50,0xff,0x86,0x6c,0x61,0xff,0xad,0x8d,0x83,0xff,0xa1, 0x7f,0x74,0xff,0xa1,0x7f,0x74,0xff,0xa1,0x80,0x75,0xff,0xa1,0x80,0x75,0xff,0xa1, 0x80,0x75,0xff,0xa1,0x7f,0x74,0xff,0xa1,0x7f,0x74,0xff,0xa1,0x7f,0x74,0xff,0xa1, 0x7f,0x74,0xff,0xa1,0x7f,0x74,0xff,0xa0,0x7d,0x72,0xff,0x8f,0x6e,0x6b,0xff,0x70, 0x5b,0x6e,0xff,0x91,0x6a,0x67,0xff,0x8f,0x6a,0x66,0xff,0x9a,0x76,0x6e,0xff,0xb4, 0x98,0x8d,0xff,0xa3,0x7f,0x71,0xff,0xa0,0x7d,0x74,0xff,0x8b,0x67,0x6e,0xff,0x8c, 0x67,0x69,0xff,0x9e,0x7d,0x74,0xff,0x8d,0x70,0x74,0xff,0x98,0x75,0x70,0xff,0x9d, 0x7b,0x73,0xff,0x8d,0x6f,0x74,0xff,0x8a,0x6e,0x6e,0xff,0x83,0x69,0x67,0xff,0x78, 0x62,0x5c,0xff,0x7b,0x65,0x61,0xff,0x7b,0x65,0x60,0xff,0x70,0x5e,0x57,0xff,0x6c, 0x5c,0x53,0xff,0x6d,0x59,0x54,0xff,0x5b,0x4c,0x51,0xff,0x41,0x3f,0x46,0xff,0x40, 0x3e,0x40,0xff,0x47,0x44,0x48,0xff,0x4b,0x46,0x4c,0xff,0x4a,0x46,0x4b,0xff,0x47, 0x44,0x48,0xff,0x49,0x45,0x4a,0xff,0x58,0x4e,0x58,0xff,0x50,0x4a,0x51,0xff,0x47, 0x44,0x48,0xff,0x4a,0x47,0x4b,0xff,0x4f,0x49,0x4f,0xff,0x52,0x4b,0x52,0xff,0x51, 0x4a,0x51,0xff,0x51,0x4a,0x51,0xff,0x53,0x4b,0x53,0xff,0x53,0x4b,0x53,0xff,0x53, 0x4b,0x53,0xff,0x53,0x4b,0x53,0xff,0x4f,0x49,0x53,0xff,0x57,0x4b,0x56,0xff,0x7b, 0x62,0x6d,0xff,0x9f,0x7f,0x7d,0xff,0xa5,0x82,0x74,0xff,0x9d,0x7a,0x70,0xff,0x9c, 0x79,0x6e,0xff,0x9b,0x78,0x6e,0xff,0x9c,0x79,0x6f,0xff,0x9c,0x79,0x6f,0xff,0x9b, 0x78,0x6e,0xff,0x9b,0x78,0x6e,0xff,0x9b,0x78,0x6e,0xff,0x9b,0x78,0x6e,0xff,0x9c, 0x78,0x6e,0xff,0x9c,0x77,0x6d,0xff,0x9b,0x77,0x6d,0xff,0x9b,0x78,0x6e,0xff,0x9b, 0x77,0x6d,0xff,0x9c,0x79,0x6e,0xff,0xa4,0x7e,0x71,0xff,0x94,0x73,0x6d,0xff,0x72, 0x57,0x5e,0xff,0x48,0x3b,0x46,0xff,0x35,0x31,0x39,0xff,0x37,0x31,0x38,0xff,0x42, 0x39,0x43,0xff,0x57,0x4d,0x58,0xff,0x57,0x4e,0x5b,0xff,0x6a,0x57,0x61,0xff,0x9e, 0x7e,0x78,0xff,0xa3,0x80,0x75,0xff,0x9b,0x77,0x6e,0xff,0x9b,0x78,0x6e,0xff,0x9b, 0x78,0x6e,0xff,0x9b,0x78,0x6e,0xfe,0x9c,0x79,0x6f,0xfc,0xa5,0x80,0x75,0xf6,0x5e, 0x49,0x43,0xec,0x0c,0x09,0x08,0xd8,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x9a,0x00, 0x00,0x00,0x74,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x1c,0x00, 0x00,0x00,0x0e,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00, 0x00,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x23,0x00, 0x00,0x00,0x37,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x93,0x00, 0x00,0x00,0xb1,0x00,0x00,0x00,0xca,0x12,0x11,0x11,0xdd,0x73,0x69,0x65,0xeb,0xb5, 0x9d,0x93,0xf4,0xb8,0x98,0x8e,0xfa,0xa3,0x81,0x77,0xfd,0xa4,0x83,0x79,0xff,0xa5, 0x84,0x79,0xff,0xa4,0x83,0x79,0xff,0xa6,0x86,0x7b,0xff,0xa8,0x84,0x79,0xff,0x89, 0x6b,0x63,0xff,0x38,0x3a,0x39,0xff,0x3e,0x3a,0x36,0xff,0x9f,0x80,0x77,0xff,0xb9, 0x9b,0x8f,0xff,0xa5,0x84,0x7a,0xff,0xa5,0x84,0x79,0xff,0xa6,0x85,0x7a,0xff,0xa6, 0x85,0x7a,0xff,0xa5,0x85,0x7a,0xff,0xa6,0x85,0x7b,0xff,0xa5,0x84,0x7a,0xff,0xa6, 0x85,0x7a,0xff,0xa6,0x85,0x7a,0xff,0xa5,0x84,0x79,0xff,0xac,0x89,0x7c,0xff,0x89, 0x71,0x6b,0xff,0x5e,0x52,0x60,0xff,0x7a,0x5f,0x70,0xff,0x7b,0x60,0x63,0xff,0x59, 0x50,0x4f,0xff,0x6a,0x5b,0x5e,0xff,0x67,0x5a,0x61,0xff,0x1e,0x24,0x21,0xff,0x06, 0x0d,0x0a,0xff,0x1d,0x20,0x1f,0xff,0x2e,0x2b,0x31,0xff,0x5c,0x4c,0x51,0xff,0x9a, 0x7e,0x76,0xff,0xaf,0x8e,0x83,0xff,0xa7,0x86,0x7b,0xff,0xa5,0x85,0x7b,0xff,0xa6, 0x85,0x7b,0xff,0xa8,0x87,0x7d,0xff,0xaa,0x82,0x7a,0xff,0x74,0x5e,0x57,0xff,0x30, 0x36,0x30,0xff,0x20,0x2c,0x23,0xff,0x20,0x2a,0x20,0xff,0x0e,0x19,0x13,0xff,0x57, 0x4c,0x49,0xff,0xb0,0x94,0x8b,0xff,0xaf,0x90,0x84,0xff,0xa6,0x84,0x7a,0xff,0xa6, 0x85,0x7b,0xff,0xa7,0x86,0x7c,0xff,0xa6,0x86,0x7b,0xff,0xa7,0x86,0x7c,0xff,0xa8, 0x87,0x7a,0xff,0xa8,0x87,0x7b,0xff,0xa7,0x86,0x7c,0xff,0xa6,0x86,0x7c,0xff,0xa7, 0x87,0x7c,0xff,0xa3,0x81,0x77,0xff,0xa5,0x83,0x7a,0xff,0xa5,0x84,0x7a,0xff,0xa5, 0x84,0x7a,0xff,0xa4,0x83,0x78,0xff,0xac,0x8a,0x7d,0xff,0x80,0x66,0x6d,0xff,0x3c, 0x3c,0x3b,0xff,0x22,0x2e,0x23,0xff,0x04,0x13,0x06,0xff,0x2e,0x2b,0x31,0xff,0x73, 0x61,0x6c,0xff,0x6d,0x5d,0x64,0xff,0x7a,0x63,0x60,0xff,0x7a,0x67,0x5e,0xff,0x80, 0x6b,0x65,0xff,0x8c,0x72,0x71,0xff,0x94,0x77,0x78,0xff,0x9a,0x7a,0x77,0xff,0xa0, 0x7e,0x7b,0xff,0x63,0x55,0x66,0xff,0x92,0x72,0x6a,0xff,0xb5,0x99,0x8f,0xff,0xa7, 0x87,0x7c,0xff,0xa0,0x7e,0x78,0xff,0x8d,0x6b,0x6d,0xff,0xa1,0x80,0x76,0xff,0xa4, 0x83,0x78,0xff,0xa4,0x83,0x78,0xff,0xa9,0x86,0x79,0xff,0x6f,0x5e,0x6d,0xff,0x3e, 0x3e,0x3f,0xff,0x39,0x3c,0x39,0xff,0x3b,0x3d,0x3b,0xff,0x3b,0x3e,0x3c,0xff,0x10, 0x1e,0x15,0xff,0x99,0x7b,0x70,0xff,0xac,0x8d,0x83,0xff,0xa4,0x84,0x7a,0xff,0xa3, 0x82,0x77,0xff,0xa4,0x82,0x77,0xff,0xa4,0x83,0x78,0xff,0xa4,0x83,0x77,0xff,0xa3, 0x82,0x77,0xff,0xa3,0x82,0x77,0xff,0xa3,0x82,0x77,0xff,0xa4,0x83,0x79,0xff,0xa2, 0x81,0x76,0xff,0xa3,0x82,0x77,0xff,0xa4,0x83,0x78,0xff,0xa1,0x7f,0x73,0xff,0xbc, 0xa4,0x9c,0xff,0xaf,0x92,0x88,0xff,0xa2,0x81,0x76,0xff,0xa2,0x81,0x76,0xff,0x9b, 0x7b,0x71,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x02,0x02,0x02,0xff,0x33, 0x34,0x33,0xff,0x3a,0x3d,0x3a,0xff,0x39,0x3c,0x3a,0xff,0x40,0x40,0x40,0xff,0x48, 0x45,0x49,0xff,0x55,0x4d,0x56,0xff,0x56,0x4d,0x57,0xff,0x57,0x4c,0x56,0xff,0x6f, 0x53,0x4f,0xff,0xb5,0x97,0x8d,0xff,0xa2,0x80,0x75,0xff,0xa2,0x80,0x75,0xff,0xa2, 0x81,0x76,0xff,0xa2,0x81,0x76,0xff,0xa1,0x80,0x75,0xff,0xa1,0x7f,0x74,0xff,0xa2, 0x81,0x76,0xff,0xa1,0x80,0x75,0xff,0xa1,0x80,0x75,0xff,0xa2,0x80,0x74,0xff,0xa1, 0x7e,0x73,0xff,0x8f,0x6a,0x6a,0xff,0x84,0x62,0x6c,0xff,0x8d,0x66,0x67,0xff,0x96, 0x70,0x6c,0xff,0xb3,0x97,0x8b,0xff,0xb8,0x9f,0x9b,0xff,0x83,0x64,0x6f,0xff,0x66, 0x57,0x5f,0xff,0x6b,0x57,0x61,0xff,0x9c,0x75,0x6c,0xff,0xa2,0x80,0x74,0xff,0xa4, 0x81,0x73,0xff,0xa1,0x80,0x73,0xff,0xa1,0x7f,0x74,0xff,0xa4,0x81,0x73,0xff,0xa5, 0x81,0x74,0xff,0xa7,0x83,0x76,0xff,0xa9,0x84,0x78,0xff,0xa8,0x83,0x77,0xff,0xa4, 0x80,0x74,0xff,0xa2,0x7f,0x73,0xff,0xa5,0x81,0x75,0xff,0xa5,0x7f,0x75,0xff,0x93, 0x71,0x6a,0xff,0x65,0x51,0x51,0xff,0x39,0x35,0x3e,0xff,0x38,0x36,0x3a,0xff,0x4c, 0x47,0x4b,0xff,0x4c,0x47,0x4c,0xff,0x4c,0x47,0x4d,0xff,0x46,0x44,0x46,0xff,0x43, 0x42,0x44,0xff,0x51,0x4a,0x52,0xff,0x48,0x45,0x49,0xff,0x4c,0x48,0x4d,0xff,0x52, 0x4b,0x52,0xff,0x53,0x4b,0x53,0xff,0x52,0x4b,0x52,0xff,0x52,0x4a,0x52,0xff,0x53, 0x4b,0x53,0xff,0x55,0x4c,0x55,0xff,0x55,0x4c,0x55,0xff,0x54,0x4c,0x54,0xff,0x56, 0x4d,0x57,0xff,0x56,0x4d,0x57,0xff,0x55,0x4c,0x5a,0xff,0x6a,0x59,0x68,0xff,0x92, 0x74,0x72,0xff,0xa5,0x82,0x74,0xff,0xa0,0x7d,0x73,0xff,0x9c,0x79,0x6f,0xff,0x9c, 0x79,0x6f,0xff,0x9c,0x79,0x6f,0xff,0x9c,0x79,0x6f,0xff,0x9c,0x79,0x6f,0xff,0x9c, 0x79,0x6f,0xff,0x9b,0x78,0x6e,0xff,0x9b,0x78,0x6e,0xff,0x9b,0x78,0x6e,0xff,0x9b, 0x78,0x6e,0xff,0x9c,0x79,0x6f,0xff,0x9c,0x78,0x6e,0xff,0x9c,0x78,0x6e,0xff,0x9c, 0x79,0x70,0xff,0xa0,0x7c,0x70,0xff,0xa0,0x7a,0x72,0xff,0x90,0x6d,0x68,0xff,0x69, 0x54,0x5d,0xff,0x3f,0x37,0x42,0xff,0x34,0x2e,0x35,0xff,0x3d,0x36,0x3e,0xff,0x54, 0x4a,0x54,0xff,0x55,0x4c,0x5a,0xff,0x7b,0x64,0x73,0xff,0xa4,0x83,0x80,0xff,0xa1, 0x7f,0x73,0xff,0x9b,0x78,0x6e,0xff,0x9b,0x78,0x6e,0xff,0x9b,0x78,0x6e,0xfe,0x9b, 0x78,0x6e,0xfe,0x9d,0x7a,0x70,0xfb,0xa2,0x7d,0x73,0xf6,0x4d,0x3c,0x37,0xe9,0x08, 0x06,0x05,0xd5,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x72,0x00, 0x00,0x00,0x4e,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x0d,0x00, 0x00,0x00,0x05,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x04,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x1a,0x00, 0x00,0x00,0x2a,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x77,0x00, 0x00,0x00,0x99,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xd1,0x26,0x23,0x22,0xe2,0x96, 0x88,0x83,0xef,0xb6,0x9a,0x90,0xf7,0xae,0x8d,0x82,0xfb,0xa4,0x83,0x79,0xfe,0xa5, 0x84,0x7a,0xfe,0xa6,0x85,0x7b,0xff,0xa6,0x86,0x7c,0xff,0xa8,0x88,0x7d,0xff,0xa4, 0x7f,0x7a,0xff,0x79,0x5d,0x5e,0xff,0x2e,0x32,0x2d,0xff,0x31,0x2f,0x36,0xff,0x94, 0x79,0x80,0xff,0xbd,0x9e,0x90,0xff,0xa8,0x8a,0x7f,0xff,0xa5,0x85,0x7b,0xff,0xa6, 0x85,0x7b,0xff,0xa8,0x88,0x7d,0xff,0xa1,0x7f,0x76,0xff,0x91,0x6c,0x6b,0xff,0x93, 0x6f,0x6d,0xff,0x97,0x74,0x6f,0xff,0x89,0x6a,0x76,0xff,0x89,0x6b,0x77,0xff,0x90, 0x6e,0x7a,0xff,0x74,0x60,0x66,0xff,0x4a,0x46,0x4c,0xff,0x6f,0x5a,0x60,0xff,0xa9, 0x86,0x7d,0xff,0xa4,0x88,0x80,0xff,0x88,0x6b,0x66,0xff,0x6a,0x56,0x5d,0xff,0x4b, 0x47,0x51,0xff,0x28,0x2d,0x28,0xff,0x0e,0x18,0x10,0xff,0x30,0x29,0x29,0xff,0x70, 0x5a,0x5b,0xff,0xa0,0x84,0x7c,0xff,0xad,0x8c,0x81,0xff,0xa7,0x86,0x7c,0xff,0xa6, 0x85,0x7b,0xff,0xa7,0x87,0x7d,0xff,0xab,0x8b,0x80,0xff,0xa2,0x7c,0x79,0xff,0x61, 0x50,0x4d,0xff,0x27,0x30,0x28,0xff,0x21,0x2d,0x23,0xff,0x23,0x2d,0x24,0xff,0x16, 0x21,0x1a,0xff,0x39,0x2f,0x2d,0xff,0x9d,0x81,0x7b,0xff,0xb5,0x96,0x8b,0xff,0xa5, 0x84,0x7a,0xff,0xa5,0x84,0x7a,0xff,0xa6,0x86,0x7c,0xff,0xa6,0x86,0x7c,0xff,0xa6, 0x86,0x7c,0xff,0xa6,0x86,0x7c,0xff,0xa7,0x86,0x7c,0xff,0xa6,0x86,0x7c,0xff,0xa6, 0x85,0x7b,0xff,0xa7,0x86,0x7c,0xff,0xa6,0x86,0x7c,0xff,0xa7,0x86,0x7c,0xff,0xa6, 0x86,0x7c,0xff,0xa7,0x87,0x7d,0xff,0xa6,0x85,0x7c,0xff,0xa7,0x87,0x7c,0xff,0xaa, 0x82,0x77,0xff,0x51,0x4a,0x48,0xff,0x31,0x38,0x35,0xff,0x19,0x24,0x1b,0xff,0x00, 0x0b,0x04,0xff,0x70,0x5d,0x57,0xff,0x64,0x56,0x5f,0xff,0x6a,0x55,0x67,0xff,0xa1, 0x7f,0x79,0xff,0xaf,0x8b,0x80,0xff,0xad,0x89,0x7f,0xff,0xaa,0x88,0x7c,0xff,0xa9, 0x87,0x7b,0xff,0xa8,0x87,0x7b,0xff,0xa9,0x89,0x7c,0xff,0x9e,0x81,0x78,0xff,0x7d, 0x64,0x71,0xff,0xb1,0x99,0x95,0xff,0xb0,0x93,0x89,0xff,0xa9,0x89,0x7d,0xff,0x95, 0x71,0x6c,0xff,0xa3,0x82,0x78,0xff,0xa6,0x85,0x7a,0xff,0xa6,0x85,0x7a,0xff,0xad, 0x8a,0x7e,0xff,0x4d,0x49,0x49,0xff,0x3a,0x3c,0x3a,0xff,0x3b,0x3d,0x3b,0xff,0x3b, 0x3d,0x3b,0xff,0x3d,0x3e,0x3d,0xff,0x16,0x24,0x1a,0xff,0xa3,0x88,0x7e,0xff,0xaa, 0x89,0x7f,0xff,0xa5,0x84,0x7a,0xff,0xa4,0x83,0x78,0xff,0xa5,0x84,0x7a,0xff,0xa5, 0x84,0x7a,0xff,0xa5,0x84,0x7a,0xff,0xa4,0x83,0x78,0xff,0xa5,0x84,0x7a,0xff,0xa5, 0x84,0x79,0xff,0xa6,0x85,0x7b,0xff,0xa4,0x83,0x78,0xff,0xa5,0x84,0x79,0xff,0xa5, 0x84,0x7a,0xff,0x9b,0x78,0x6d,0xff,0xc0,0xa9,0xa1,0xff,0xa5,0x85,0x7a,0xff,0xa4, 0x83,0x78,0xff,0xa3,0x82,0x77,0xff,0xa1,0x81,0x77,0xff,0x00,0x00,0x00,0xff,0x00, 0x00,0x00,0xff,0x02,0x02,0x02,0xff,0x34,0x35,0x34,0xff,0x3a,0x3c,0x3a,0xff,0x39, 0x3c,0x3a,0xff,0x3f,0x40,0x40,0xff,0x49,0x46,0x4a,0xff,0x55,0x4c,0x56,0xff,0x56, 0x4d,0x57,0xff,0x57,0x4c,0x57,0xff,0x5b,0x47,0x50,0xff,0xb8,0x9b,0x90,0xff,0xa4, 0x82,0x77,0xff,0xa3,0x82,0x77,0xff,0xa3,0x82,0x77,0xff,0xa3,0x82,0x77,0xff,0xa2, 0x81,0x76,0xff,0xa2,0x81,0x76,0xff,0xa2,0x81,0x76,0xff,0xa1,0x80,0x75,0xff,0xa3, 0x82,0x76,0xff,0x9d,0x7d,0x76,0xff,0x74,0x5f,0x6f,0xff,0x70,0x59,0x65,0xff,0x8d, 0x65,0x68,0xff,0x8a,0x64,0x67,0xff,0x92,0x6d,0x6c,0xff,0xad,0x8e,0x81,0xff,0x9a, 0x7d,0x78,0xff,0x52,0x49,0x58,0xff,0x55,0x4a,0x55,0xff,0x88,0x68,0x6d,0xff,0xa3, 0x80,0x73,0xff,0xa1,0x80,0x75,0xff,0xa1,0x80,0x75,0xff,0xa1,0x80,0x75,0xff,0xa1, 0x80,0x75,0xff,0xa1,0x7f,0x74,0xff,0xa1,0x7f,0x74,0xff,0xa1,0x7f,0x74,0xff,0xa1, 0x7f,0x74,0xff,0x9f,0x7d,0x72,0xff,0xa0,0x7e,0x73,0xff,0xa2,0x7f,0x74,0xff,0xa1, 0x7e,0x73,0xff,0xa1,0x7f,0x74,0xff,0xa2,0x80,0x73,0xff,0x9d,0x7a,0x6f,0xff,0x80, 0x65,0x68,0xff,0x4d,0x41,0x4e,0xff,0x38,0x36,0x39,0xff,0x47,0x44,0x48,0xff,0x4e, 0x48,0x4e,0xff,0x45,0x43,0x45,0xff,0x4d,0x48,0x4d,0xff,0x5e,0x52,0x5e,0xff,0x49, 0x45,0x49,0xff,0x4f,0x49,0x4f,0xff,0x54,0x4b,0x54,0xff,0x53,0x4b,0x53,0xff,0x53, 0x4b,0x53,0xff,0x53,0x4b,0x53,0xff,0x53,0x4c,0x54,0xff,0x54,0x4c,0x55,0xff,0x56, 0x4d,0x57,0xff,0x55,0x4d,0x56,0xff,0x55,0x4c,0x56,0xff,0x57,0x4e,0x58,0xff,0x57, 0x4d,0x57,0xff,0x55,0x4b,0x58,0xff,0x5d,0x51,0x5e,0xff,0x82,0x67,0x66,0xff,0xa2, 0x7d,0x71,0xff,0xa1,0x7f,0x74,0xff,0x9d,0x7a,0x70,0xff,0x9c,0x79,0x6f,0xff,0x9d, 0x7a,0x70,0xff,0x9d,0x7a,0x70,0xff,0x9d,0x7a,0x70,0xff,0x9d,0x7a,0x70,0xff,0x9d, 0x7a,0x70,0xff,0x9b,0x78,0x6e,0xff,0x9c,0x79,0x6f,0xff,0x9d,0x7a,0x70,0xff,0x9c, 0x79,0x6f,0xff,0x9c,0x79,0x6f,0xff,0x9d,0x7a,0x70,0xff,0x9c,0x79,0x6f,0xff,0x9d, 0x7a,0x6f,0xff,0xa2,0x7d,0x71,0xff,0x9f,0x7b,0x73,0xff,0x7f,0x60,0x63,0xff,0x49, 0x3b,0x43,0xff,0x33,0x2e,0x35,0xff,0x3a,0x33,0x3b,0xff,0x4f,0x47,0x51,0xff,0x56, 0x4d,0x5c,0xff,0x82,0x65,0x68,0xff,0xa0,0x7c,0x72,0xff,0x9e,0x7b,0x70,0xff,0x9c, 0x79,0x6f,0xff,0x9c,0x79,0x6f,0xff,0x9b,0x78,0x6e,0xfe,0x9b,0x78,0x6e,0xfe,0xa1, 0x7d,0x73,0xfa,0x9f,0x7c,0x71,0xf3,0x3e,0x31,0x2c,0xe7,0x03,0x03,0x02,0xd3,0x00, 0x00,0x00,0xb7,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x4a,0x00, 0x00,0x00,0x2c,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x05,0x00, 0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x02,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x12,0x00, 0x00,0x00,0x1f,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x64,0x00, 0x00,0x00,0x82,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0xbc,0x04,0x04,0x04,0xd4,0x43, 0x3e,0x3d,0xe5,0xae,0x99,0x92,0xf1,0xb7,0x99,0x8f,0xf8,0xaa,0x89,0x7f,0xfc,0xa6, 0x85,0x7b,0xfd,0xa7,0x86,0x7c,0xfe,0xa7,0x86,0x7c,0xff,0xa7,0x86,0x7b,0xff,0xab, 0x89,0x7e,0xff,0x9f,0x7f,0x7f,0xff,0x69,0x58,0x62,0xff,0x29,0x2f,0x29,0xff,0x1e, 0x23,0x22,0xff,0x6c,0x5f,0x60,0xff,0xc6,0xa7,0xa1,0xff,0xac,0x8c,0x82,0xff,0xa5, 0x85,0x7b,0xff,0xa7,0x86,0x7b,0xff,0xa9,0x89,0x7e,0xff,0x9b,0x7a,0x74,0xff,0x83, 0x60,0x6a,0xff,0x92,0x71,0x76,0xff,0xa5,0x84,0x7a,0xff,0xa3,0x83,0x7a,0xff,0xa0, 0x81,0x7b,0xff,0xa2,0x82,0x7d,0xff,0xa6,0x84,0x7d,0xff,0x85,0x6b,0x6f,0xff,0x5f, 0x50,0x64,0xff,0x90,0x7a,0x7d,0xff,0xb8,0x99,0x8c,0xff,0xaf,0x8f,0x84,0xff,0xab, 0x84,0x79,0xff,0x70,0x5b,0x59,0xff,0x35,0x38,0x3b,0xff,0x30,0x30,0x33,0xff,0x62, 0x50,0x4d,0xff,0xa0,0x7f,0x75,0xff,0xaa,0x8b,0x81,0xff,0xaa,0x8a,0x7f,0xff,0xa9, 0x88,0x7e,0xff,0xa7,0x87,0x7d,0xff,0xa9,0x88,0x7e,0xff,0xad,0x8c,0x7f,0xff,0x97, 0x78,0x80,0xff,0x4f,0x47,0x4c,0xff,0x20,0x2b,0x21,0xff,0x21,0x2d,0x24,0xff,0x28, 0x31,0x28,0xff,0x18,0x22,0x18,0xff,0x23,0x24,0x27,0xff,0x8c,0x77,0x77,0xff,0xb9, 0x9a,0x91,0xff,0xa9,0x8a,0x7f,0xff,0xa8,0x87,0x7d,0xff,0xa8,0x88,0x7e,0xff,0xa8, 0x88,0x7e,0xff,0xa8,0x88,0x7e,0xff,0xa7,0x87,0x7d,0xff,0xa7,0x87,0x7d,0xff,0xa7, 0x87,0x7d,0xff,0xa7,0x87,0x7d,0xff,0xa8,0x88,0x7e,0xff,0xa7,0x87,0x7d,0xff,0xa6, 0x86,0x7c,0xff,0xa7,0x87,0x7d,0xff,0xa7,0x87,0x7d,0xff,0xa7,0x87,0x7d,0xff,0xa6, 0x86,0x7c,0xff,0xad,0x8c,0x7e,0xff,0x83,0x6a,0x72,0xff,0x3c,0x3d,0x3d,0xff,0x30, 0x37,0x31,0xff,0x22,0x2b,0x23,0xff,0x21,0x24,0x23,0xff,0x9f,0x8d,0x86,0xff,0x4c, 0x4e,0x49,0xff,0x73,0x56,0x59,0xff,0xaf,0x90,0x89,0xff,0xa9,0x8a,0x80,0xff,0xa7, 0x86,0x7c,0xff,0xa6,0x86,0x7c,0xff,0xa6,0x86,0x7c,0xff,0xa6,0x85,0x7b,0xff,0xa6, 0x86,0x7c,0xff,0xaa,0x89,0x7d,0xff,0xa2,0x83,0x7b,0xff,0x89,0x6f,0x7b,0xff,0x8b, 0x6e,0x7b,0xff,0x91,0x6c,0x6b,0xff,0x8a,0x68,0x72,0xff,0x9f,0x7d,0x75,0xff,0xa5, 0x85,0x7a,0xff,0xa7,0x87,0x7d,0xff,0xa2,0x7b,0x71,0xff,0x41,0x40,0x3c,0xff,0x38, 0x3b,0x39,0xff,0x39,0x3c,0x3a,0xff,0x39,0x3c,0x3a,0xff,0x3d,0x3e,0x3d,0xff,0x26, 0x2f,0x29,0xff,0xac,0x95,0x8d,0xff,0xa8,0x88,0x7e,0xff,0xa6,0x85,0x7b,0xff,0xa6, 0x86,0x7c,0xff,0xa6,0x86,0x7c,0xff,0xa6,0x86,0x7c,0xff,0xa6,0x85,0x7b,0xff,0xa6, 0x85,0x7b,0xff,0xa6,0x86,0x7c,0xff,0xa6,0x85,0x7b,0xff,0xa4,0x83,0x79,0xff,0xa6, 0x85,0x7b,0xff,0xa5,0x84,0x7a,0xff,0x9a,0x77,0x6e,0xff,0x97,0x73,0x69,0xff,0xbe, 0xa6,0x9e,0xff,0xa3,0x82,0x78,0xff,0xa6,0x85,0x7b,0xff,0xa5,0x84,0x7a,0xff,0xa1, 0x81,0x77,0xff,0x06,0x05,0x04,0xff,0x00,0x00,0x00,0xff,0x03,0x03,0x03,0xff,0x36, 0x37,0x36,0xff,0x39,0x3c,0x3a,0xff,0x39,0x3c,0x3a,0xff,0x3f,0x40,0x40,0xff,0x4b, 0x47,0x4c,0xff,0x55,0x4d,0x56,0xff,0x59,0x4f,0x5a,0xff,0x56,0x4c,0x56,0xff,0x51, 0x47,0x50,0xff,0xb1,0x98,0x8d,0xff,0xa6,0x85,0x7b,0xff,0xa6,0x84,0x78,0xff,0xa7, 0x85,0x7a,0xff,0xa7,0x85,0x7a,0xff,0xa6,0x84,0x79,0xff,0xa8,0x85,0x7a,0xff,0xa7, 0x85,0x7a,0xff,0xa6,0x84,0x79,0xff,0x9d,0x7d,0x78,0xff,0x60,0x52,0x5e,0xff,0x31, 0x36,0x34,0xff,0x84,0x66,0x79,0xff,0x8a,0x64,0x67,0xff,0x89,0x64,0x68,0xff,0x90, 0x6b,0x68,0xff,0x96,0x71,0x6a,0xff,0x82,0x63,0x6d,0xff,0x6b,0x59,0x69,0xff,0x8b, 0x6b,0x6f,0xff,0xa5,0x83,0x78,0xff,0xa2,0x81,0x76,0xff,0xa2,0x81,0x76,0xff,0xa1, 0x80,0x75,0xff,0xa3,0x82,0x77,0xff,0xa1,0x80,0x75,0xff,0xa2,0x81,0x76,0xff,0xa1, 0x80,0x75,0xff,0xa2,0x81,0x76,0xff,0xa1,0x7f,0x74,0xff,0xa1,0x7f,0x74,0xff,0xa1, 0x7f,0x74,0xff,0xa1,0x7f,0x74,0xff,0xa1,0x7f,0x74,0xff,0xa1,0x7f,0x74,0xff,0xa0, 0x7e,0x73,0xff,0xa3,0x80,0x74,0xff,0xa4,0x81,0x75,0xff,0x94,0x74,0x74,0xff,0x62, 0x4f,0x5a,0xff,0x3a,0x37,0x3b,0xff,0x3a,0x3a,0x3b,0xff,0x47,0x45,0x48,0xff,0x63, 0x55,0x63,0xff,0x4d,0x47,0x4d,0xff,0x4b,0x47,0x4c,0xff,0x50,0x4a,0x51,0xff,0x55, 0x4d,0x56,0xff,0x54,0x4c,0x54,0xff,0x53,0x4b,0x53,0xff,0x53,0x4b,0x53,0xff,0x53, 0x4b,0x54,0xff,0x54,0x4c,0x55,0xff,0x55,0x4c,0x56,0xff,0x56,0x4d,0x57,0xff,0x56, 0x4d,0x57,0xff,0x57,0x4d,0x57,0xff,0x58,0x4e,0x58,0xff,0x58,0x4e,0x57,0xff,0x55, 0x4c,0x58,0xff,0x57,0x4e,0x59,0xff,0x74,0x5b,0x62,0xff,0x9a,0x76,0x73,0xff,0xa5, 0x83,0x77,0xff,0xa0,0x7e,0x72,0xff,0x9d,0x7b,0x70,0xff,0x9d,0x7a,0x70,0xff,0x9d, 0x7a,0x70,0xff,0x9e,0x7b,0x70,0xff,0x9d,0x7a,0x70,0xff,0x9e,0x7b,0x70,0xff,0x9d, 0x7a,0x6f,0xff,0x9c,0x79,0x6f,0xff,0x9d,0x7a,0x70,0xff,0x9d,0x7a,0x70,0xff,0x9e, 0x7b,0x70,0xff,0x9d,0x7a,0x70,0xff,0x9d,0x7a,0x70,0xff,0x9d,0x7a,0x70,0xff,0x9f, 0x7c,0x71,0xff,0x9f,0x7b,0x72,0xff,0x99,0x75,0x6b,0xff,0x68,0x53,0x57,0xff,0x39, 0x31,0x3a,0xff,0x36,0x31,0x37,0xff,0x4a,0x44,0x4c,0xff,0x57,0x4c,0x59,0xff,0x8b, 0x6e,0x6c,0xff,0xa4,0x81,0x75,0xff,0x9e,0x7c,0x71,0xff,0x9c,0x79,0x6f,0xff,0x9d, 0x7a,0x70,0xff,0x9d,0x7a,0x70,0xff,0x9c,0x79,0x6f,0xfd,0xa2,0x7d,0x73,0xfa,0x9a, 0x76,0x6c,0xf3,0x30,0x26,0x23,0xe5,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xb3,0x00, 0x00,0x00,0x8d,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x28,0x00, 0x00,0x00,0x15,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x0b,0x00, 0x00,0x00,0x14,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x54,0x00, 0x00,0x00,0x71,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0xc4,0x14, 0x15,0x14,0xd9,0x6c,0x63,0x5f,0xe9,0xba,0xa1,0x98,0xf3,0xb0,0x91,0x86,0xfa,0xa8, 0x87,0x7c,0xfc,0xa8,0x87,0x7d,0xfd,0xa8,0x88,0x7e,0xfe,0xa7,0x87,0x7d,0xff,0xaa, 0x89,0x7e,0xff,0xaa,0x88,0x7d,0xff,0x8d,0x73,0x74,0xff,0x52,0x4a,0x55,0xff,0x2f, 0x36,0x31,0xff,0x24,0x2b,0x28,0xff,0x4f,0x45,0x43,0xff,0xb5,0x94,0x8c,0xff,0x9a, 0x7f,0x78,0xff,0x79,0x5c,0x65,0xff,0x7f,0x64,0x71,0xff,0x96,0x71,0x68,0xff,0x99, 0x74,0x6c,0xff,0x80,0x67,0x67,0xff,0x78,0x64,0x68,0xff,0xac,0x8a,0x7e,0xff,0xaa, 0x8c,0x80,0xff,0xa9,0x8b,0x80,0xff,0xaa,0x8b,0x7f,0xff,0xab,0x8c,0x7f,0xff,0xa2, 0x80,0x73,0xff,0x98,0x74,0x6a,0xff,0xa8,0x8a,0x82,0xff,0xaf,0x92,0x89,0xff,0xa8, 0x88,0x7e,0xff,0xad,0x8b,0x7f,0xff,0x8e,0x73,0x75,0xff,0x52,0x49,0x55,0xff,0x52, 0x4a,0x54,0xff,0x88,0x70,0x72,0xff,0xb0,0x8f,0x83,0xff,0xb1,0x92,0x87,0xff,0xab, 0x8a,0x80,0xff,0xa8,0x87,0x7d,0xff,0xa9,0x8a,0x7f,0xff,0xad,0x8d,0x82,0xff,0xab, 0x89,0x7f,0xff,0x7e,0x68,0x6d,0xff,0x3d,0x3e,0x40,0xff,0x23,0x2e,0x24,0xff,0x26, 0x30,0x27,0xff,0x2a,0x33,0x2a,0xff,0x1f,0x28,0x20,0xff,0x0f,0x15,0x11,0xff,0x75, 0x63,0x5d,0xff,0xbb,0x9b,0x91,0xff,0xad,0x8e,0x83,0xff,0xa9,0x8a,0x80,0xff,0xa9, 0x8a,0x80,0xff,0xa9,0x8a,0x7f,0xff,0xa9,0x8a,0x7f,0xff,0xa8,0x89,0x7e,0xff,0xa9, 0x89,0x7f,0xff,0xa8,0x89,0x7e,0xff,0xa9,0x89,0x7f,0xff,0xa9,0x8a,0x7f,0xff,0xa8, 0x89,0x7e,0xff,0xa8,0x88,0x7e,0xff,0xa8,0x88,0x7e,0xff,0xa7,0x87,0x7d,0xff,0xa8, 0x88,0x7e,0xff,0xa8,0x88,0x7e,0xff,0xaa,0x8b,0x80,0xff,0xac,0x87,0x7f,0xff,0x4f, 0x4a,0x46,0xff,0x2d,0x35,0x30,0xff,0x32,0x38,0x33,0xff,0x22,0x2b,0x25,0xff,0x5b, 0x47,0x45,0xff,0x54,0x4e,0x4a,0xff,0x6c,0x5c,0x69,0xff,0x9e,0x7f,0x7c,0xff,0xab, 0x8c,0x80,0xff,0xa8,0x89,0x7e,0xff,0xa8,0x88,0x7e,0xff,0xa6,0x86,0x7c,0xff,0xa7, 0x87,0x7d,0xff,0xa7,0x87,0x7d,0xff,0xa7,0x87,0x7d,0xff,0xa8,0x88,0x7e,0xff,0xa8, 0x88,0x7d,0xff,0xa4,0x84,0x7c,0xff,0xa4,0x84,0x7d,0xff,0x9f,0x7d,0x72,0xff,0xa6, 0x86,0x7d,0xff,0x9d,0x7b,0x71,0xff,0xaa,0x8b,0x82,0xff,0xaa,0x8a,0x7f,0xff,0x90, 0x6c,0x76,0xff,0x40,0x3f,0x3e,0xff,0x37,0x3a,0x37,0xff,0x3a,0x3c,0x3b,0xff,0x3a, 0x3d,0x3b,0xff,0x39,0x3c,0x3a,0xff,0x4f,0x46,0x52,0xff,0xad,0x92,0x8b,0xff,0xa8, 0x88,0x7e,0xff,0xa6,0x86,0x7c,0xff,0xa7,0x87,0x7d,0xff,0xa6,0x86,0x7c,0xff,0xa7, 0x87,0x7d,0xff,0xa6,0x86,0x7c,0xff,0xa6,0x85,0x7b,0xff,0xa6,0x86,0x7c,0xff,0xa6, 0x85,0x7b,0xff,0xa6,0x85,0x7b,0xff,0xa7,0x87,0x7d,0xff,0xa7,0x86,0x7c,0xff,0x8a, 0x67,0x6c,0xff,0xa1,0x80,0x76,0xff,0xbd,0xa5,0x9d,0xff,0xa4,0x83,0x79,0xff,0xa6, 0x85,0x7b,0xff,0xa5,0x84,0x7a,0xff,0xa1,0x81,0x77,0xff,0x0e,0x0b,0x0a,0xff,0x00, 0x00,0x00,0xfe,0x03,0x03,0x03,0xfe,0x37,0x38,0x38,0xfe,0x39,0x3c,0x3a,0xfe,0x39, 0x3c,0x3a,0xfe,0x44,0x43,0x45,0xfe,0x4b,0x47,0x4c,0xff,0x57,0x4e,0x58,0xff,0x59, 0x4f,0x5a,0xff,0x58,0x4e,0x59,0xff,0x56,0x4a,0x53,0xff,0x95,0x7c,0x72,0xff,0xad, 0x8e,0x82,0xff,0xa1,0x81,0x7c,0xff,0x98,0x7b,0x72,0xff,0x91,0x75,0x6a,0xff,0x91, 0x75,0x69,0xff,0x95,0x79,0x6f,0xff,0x98,0x7a,0x70,0xff,0x91,0x76,0x70,0xff,0x5d, 0x50,0x5c,0xff,0x19,0x24,0x1d,0xff,0x6f,0x5a,0x65,0xff,0x8e,0x67,0x6a,0xff,0x8a, 0x65,0x68,0xff,0x89,0x64,0x68,0xff,0x8f,0x69,0x68,0xff,0x92,0x6d,0x67,0xff,0x89, 0x63,0x68,0xff,0x98,0x74,0x6d,0xff,0xa6,0x84,0x79,0xff,0xa3,0x82,0x76,0xff,0xa1, 0x7f,0x74,0xff,0xa5,0x84,0x77,0xff,0xa3,0x82,0x77,0xff,0xa2,0x81,0x76,0xff,0xa2, 0x81,0x76,0xff,0xa3,0x82,0x77,0xff,0xa2,0x81,0x76,0xff,0xa2,0x81,0x76,0xff,0xa1, 0x80,0x75,0xff,0xa2,0x81,0x76,0xff,0xa1,0x80,0x75,0xff,0xa1,0x80,0x75,0xff,0xa1, 0x80,0x75,0xff,0xa1,0x7f,0x74,0xff,0xa1,0x80,0x75,0xff,0xa1,0x7f,0x74,0xff,0xa2, 0x80,0x74,0xff,0xa4,0x82,0x76,0xff,0x9f,0x7a,0x72,0xff,0x73,0x58,0x58,0xff,0x36, 0x33,0x37,0xff,0x3c,0x3a,0x3e,0xff,0x50,0x4a,0x50,0xff,0x4c,0x48,0x4c,0xff,0x4e, 0x48,0x4e,0xff,0x51,0x4a,0x51,0xff,0x54,0x4c,0x54,0xff,0x54,0x4c,0x54,0xff,0x54, 0x4b,0x54,0xff,0x55,0x4c,0x55,0xff,0x54,0x4c,0x55,0xff,0x54,0x4c,0x55,0xff,0x54, 0x4c,0x55,0xff,0x56,0x4d,0x56,0xff,0x58,0x4e,0x58,0xff,0x58,0x4e,0x58,0xff,0x58, 0x4e,0x58,0xff,0x58,0x4e,0x58,0xff,0x59,0x4e,0x58,0xff,0x58,0x4e,0x5a,0xff,0x58, 0x4f,0x5a,0xff,0x6a,0x57,0x69,0xff,0x8f,0x72,0x79,0xff,0xa6,0x85,0x79,0xff,0xa3, 0x81,0x74,0xff,0x9d,0x7b,0x70,0xff,0x9d,0x7a,0x6f,0xff,0x9e,0x7b,0x70,0xff,0x9e, 0x7b,0x70,0xff,0x9e,0x7b,0x70,0xff,0x9e,0x7b,0x70,0xff,0x9e,0x7b,0x70,0xff,0x9e, 0x7b,0x70,0xff,0x9e,0x7b,0x70,0xff,0x9e,0x7c,0x71,0xff,0x9e,0x7c,0x70,0xff,0x9d, 0x7a,0x70,0xff,0x9e,0x7b,0x70,0xff,0x9e,0x7b,0x70,0xff,0x9e,0x7c,0x71,0xff,0xa1, 0x7d,0x71,0xff,0xa1,0x7e,0x71,0xff,0x8a,0x69,0x68,0xff,0x51,0x40,0x45,0xff,0x45, 0x3d,0x46,0xff,0x4a,0x45,0x4e,0xff,0x5d,0x51,0x60,0xff,0x93,0x75,0x76,0xff,0xa3, 0x7f,0x74,0xff,0x9d,0x7a,0x70,0xff,0x9d,0x7a,0x70,0xff,0x9d,0x7a,0x70,0xff,0x9d, 0x7a,0x70,0xff,0x9c,0x7a,0x6f,0xfd,0xa1,0x7b,0x72,0xf9,0x76,0x5f,0x66,0xf2,0x20, 0x1b,0x1d,0xe4,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0x88,0x00, 0x00,0x00,0x62,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x13,0x00, 0x00,0x00,0x09,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x06,0x00, 0x00,0x00,0x0d,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x3c,0x00, 0x00,0x00,0x59,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0xb6,0x02, 0x02,0x02,0xcd,0x29,0x26,0x26,0xdf,0x8c,0x7e,0x79,0xed,0xbf,0xa3,0x98,0xf6,0xac, 0x8d,0x82,0xfa,0xa7,0x87,0x7d,0xfd,0xa8,0x88,0x7e,0xfe,0xa8,0x89,0x7f,0xff,0xa9, 0x8a,0x80,0xff,0xad,0x8c,0x82,0xff,0xa7,0x85,0x7b,0xff,0x7d,0x67,0x64,0xff,0x41, 0x40,0x46,0xff,0x2f,0x35,0x30,0xff,0x23,0x29,0x24,0xff,0x28,0x28,0x29,0xff,0x57, 0x45,0x50,0xff,0x69,0x54,0x5e,0xff,0x54,0x4c,0x55,0xff,0x5e,0x53,0x55,0xff,0x73, 0x60,0x6b,0xff,0x8a,0x6c,0x79,0xff,0x8e,0x6b,0x70,0xff,0x9a,0x78,0x76,0xff,0xad, 0x8d,0x82,0xff,0xa9,0x89,0x7f,0xff,0xa9,0x8b,0x81,0xff,0xaa,0x8b,0x81,0xff,0xaa, 0x8b,0x81,0xff,0xa0,0x7f,0x78,0xff,0x95,0x71,0x6b,0xff,0xb1,0x94,0x8a,0xff,0xbb, 0xa1,0x98,0xff,0xa8,0x88,0x7d,0xff,0xab,0x8c,0x80,0xff,0xa5,0x83,0x7c,0xff,0x6f, 0x5a,0x5b,0xff,0x65,0x55,0x60,0xff,0xa2,0x85,0x88,0xff,0xb3,0x96,0x8a,0xff,0xad, 0x8e,0x84,0xff,0xaa,0x8b,0x81,0xff,0xa8,0x89,0x7f,0xff,0xaa,0x8b,0x80,0xff,0xb2, 0x90,0x86,0xff,0xa6,0x85,0x7b,0xff,0x6a,0x5b,0x5a,0xff,0x30,0x36,0x33,0xff,0x25, 0x2f,0x26,0xff,0x28,0x31,0x28,0xff,0x29,0x32,0x29,0xff,0x28,0x31,0x28,0xff,0x15, 0x1f,0x1a,0xff,0x53,0x43,0x43,0xff,0xae,0x91,0x8b,0xff,0xb6,0x9b,0x8f,0xff,0xab, 0x8c,0x81,0xff,0xaa,0x8a,0x80,0xff,0xaa,0x8b,0x80,0xff,0xaa,0x8b,0x81,0xff,0xaa, 0x8b,0x81,0xff,0xaa,0x8b,0x81,0xff,0xaa,0x8b,0x80,0xff,0xaa,0x8a,0x80,0xff,0xab, 0x8c,0x82,0xff,0xaa,0x8b,0x80,0xff,0xa9,0x8a,0x80,0xff,0xab,0x8c,0x82,0xff,0xa9, 0x8a,0x7f,0xff,0xad,0x8f,0x85,0xff,0xab,0x8c,0x81,0xff,0xa9,0x8a,0x80,0xff,0xb1, 0x90,0x81,0xff,0x83,0x6a,0x74,0xff,0x3d,0x3d,0x3f,0xff,0x2e,0x35,0x30,0xff,0x30, 0x37,0x31,0xff,0x1f,0x24,0x26,0xff,0x86,0x74,0x6d,0xff,0xb0,0x94,0x8a,0xff,0xac, 0x8d,0x83,0xff,0xab,0x8c,0x82,0xff,0xa9,0x8a,0x80,0xff,0xa9,0x8a,0x7f,0xff,0xaa, 0x8b,0x81,0xff,0xaa,0x8b,0x80,0xff,0xa9,0x8a,0x7f,0xff,0xa8,0x88,0x7e,0xff,0xa8, 0x89,0x7f,0xff,0xa9,0x8a,0x7f,0xff,0xa8,0x88,0x7e,0xff,0xa9,0x89,0x7e,0xff,0xaa, 0x8b,0x7f,0xff,0xaa,0x8b,0x80,0xff,0xac,0x8e,0x81,0xff,0x90,0x6a,0x65,0xff,0xc4, 0xae,0xa7,0xff,0xb1,0x92,0x86,0xff,0x78,0x62,0x71,0xff,0x3e,0x3f,0x3f,0xff,0x39, 0x3b,0x3a,0xff,0x3e,0x3f,0x3f,0xff,0x3b,0x3d,0x3b,0xff,0x25,0x2a,0x27,0xff,0x67, 0x4e,0x5a,0xff,0xae,0x91,0x89,0xff,0xa9,0x89,0x7f,0xff,0xa8,0x88,0x7e,0xff,0xa8, 0x89,0x7e,0xff,0xa8,0x88,0x7e,0xff,0xa7,0x88,0x7d,0xff,0xa8,0x88,0x7e,0xff,0xa7, 0x87,0x7d,0xff,0xa8,0x88,0x7e,0xff,0xa7,0x87,0x7d,0xff,0xa6,0x86,0x7c,0xff,0xa7, 0x88,0x7d,0xff,0xa7,0x87,0x7d,0xff,0x96,0x71,0x68,0xff,0xb3,0x97,0x8d,0xff,0xb2, 0x96,0x8c,0xff,0xa7,0x87,0x7d,0xff,0xa8,0x88,0x7e,0xff,0xa6,0x86,0x7c,0xff,0xa3, 0x83,0x79,0xfe,0x14,0x11,0x0f,0xfe,0x00,0x00,0x00,0xfd,0x03,0x03,0x03,0xfb,0x40, 0x3e,0x41,0xfb,0x40,0x42,0x40,0xfb,0x40,0x42,0x40,0xfb,0x49,0x47,0x4a,0xfd,0x4d, 0x49,0x4e,0xfe,0x59,0x4e,0x59,0xfe,0x5b,0x50,0x5c,0xff,0x5b,0x50,0x5c,0xff,0x5d, 0x4f,0x5a,0xff,0x7b,0x60,0x58,0xff,0xa6,0x89,0x88,0xff,0x53,0x49,0x55,0xff,0x31, 0x38,0x35,0xff,0x40,0x40,0x42,0xff,0x34,0x39,0x36,0xff,0x2f,0x36,0x30,0xff,0x40, 0x40,0x41,0xff,0x46,0x42,0x48,0xff,0x36,0x36,0x31,0xff,0x45,0x40,0x3c,0xff,0x92, 0x69,0x6e,0xff,0x8a,0x65,0x68,0xff,0x89,0x64,0x68,0xff,0x8c,0x66,0x68,0xff,0x90, 0x6b,0x66,0xff,0x92,0x6d,0x69,0xff,0x8f,0x6a,0x68,0xff,0x9f,0x7d,0x70,0xff,0xa6, 0x85,0x78,0xff,0x9b,0x7a,0x74,0xff,0x88,0x66,0x6e,0xff,0xa5,0x83,0x7c,0xff,0xa7, 0x85,0x78,0xff,0xa3,0x82,0x77,0xff,0xa3,0x82,0x77,0xff,0xa3,0x82,0x77,0xff,0xa3, 0x82,0x77,0xff,0xa3,0x82,0x77,0xff,0xa3,0x82,0x77,0xff,0xa3,0x82,0x77,0xff,0xa2, 0x81,0x76,0xff,0xa2,0x81,0x76,0xff,0xa2,0x81,0x76,0xff,0xa1,0x80,0x75,0xff,0xa2, 0x81,0x76,0xff,0xa2,0x81,0x76,0xff,0xa1,0x80,0x75,0xff,0xa2,0x81,0x76,0xff,0xa2, 0x81,0x76,0xff,0xa3,0x80,0x75,0xff,0x88,0x6b,0x67,0xff,0x50,0x44,0x4e,0xff,0x3c, 0x38,0x3f,0xff,0x44,0x41,0x45,0xff,0x4e,0x48,0x4e,0xff,0x54,0x4c,0x54,0xff,0x55, 0x4d,0x56,0xff,0x56,0x4d,0x57,0xff,0x57,0x4e,0x58,0xff,0x58,0x4e,0x58,0xff,0x55, 0x4c,0x56,0xff,0x56,0x4d,0x56,0xff,0x57,0x4e,0x58,0xff,0x57,0x4e,0x58,0xff,0x59, 0x4f,0x5a,0xff,0x59,0x4f,0x5a,0xff,0x59,0x4f,0x59,0xff,0x58,0x4e,0x57,0xff,0x5a, 0x4f,0x5a,0xff,0x5b,0x50,0x5c,0xff,0x5a,0x4f,0x5b,0xff,0x5b,0x50,0x5b,0xff,0x61, 0x52,0x63,0xff,0x83,0x6b,0x71,0xff,0xa6,0x86,0x7a,0xff,0xa8,0x87,0x7b,0xff,0xa0, 0x7e,0x73,0xff,0x9e,0x7b,0x70,0xff,0x9e,0x7c,0x71,0xff,0x9e,0x7b,0x70,0xff,0x9e, 0x7b,0x70,0xff,0x9e,0x7c,0x71,0xff,0x9e,0x7b,0x70,0xff,0x9e,0x7b,0x70,0xff,0x9e, 0x7b,0x70,0xff,0x9e,0x7b,0x70,0xff,0x9e,0x7b,0x70,0xff,0x9e,0x7b,0x70,0xff,0x9e, 0x7b,0x70,0xff,0x9e,0x7b,0x70,0xff,0x9e,0x7c,0x71,0xff,0x9f,0x7d,0x72,0xff,0xa0, 0x7e,0x73,0xff,0xa0,0x7c,0x6e,0xff,0x7a,0x5f,0x63,0xff,0x45,0x3a,0x42,0xff,0x3e, 0x3b,0x43,0xff,0x68,0x55,0x60,0xff,0x9a,0x78,0x72,0xff,0xa1,0x7f,0x73,0xff,0x9e, 0x7b,0x70,0xff,0x9e,0x7b,0x70,0xff,0x9e,0x7b,0x70,0xff,0xa3,0x7e,0x70,0xfe,0x7a, 0x62,0x70,0xfc,0x99,0x7a,0x78,0xf8,0x88,0x6b,0x60,0xf0,0x1f,0x19,0x16,0xe1,0x00, 0x00,0x00,0xc7,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x5d,0x00, 0x00,0x00,0x3d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x09,0x00, 0x00,0x00,0x03,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00, 0x00,0x00,0x08,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x2d,0x00, 0x00,0x00,0x43,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0xa2,0x00, 0x00,0x00,0xbf,0x07,0x07,0x07,0xd4,0x49,0x44,0x42,0xe5,0xa8,0x95,0x8f,0xf0,0xba, 0x9d,0x92,0xf7,0xab,0x8b,0x81,0xfb,0xaa,0x8b,0x81,0xfe,0xaa,0x8b,0x81,0xfe,0xab, 0x8c,0x82,0xff,0xab,0x8c,0x82,0xff,0xaf,0x8e,0x83,0xff,0xa3,0x80,0x77,0xff,0x6b, 0x5a,0x56,0xff,0x34,0x39,0x3b,0xff,0x30,0x36,0x31,0xff,0x25,0x2a,0x27,0xff,0x16, 0x1c,0x19,0xff,0x1b,0x20,0x1c,0xff,0x23,0x26,0x24,0xff,0x4d,0x44,0x45,0xff,0x98, 0x79,0x7e,0xff,0xad,0x8c,0x7e,0xff,0xad,0x8d,0x83,0xff,0xab,0x8c,0x80,0xff,0xad, 0x8e,0x83,0xff,0xad,0x8e,0x84,0xff,0xac,0x8c,0x82,0xff,0xab,0x8c,0x82,0xff,0xab, 0x8c,0x82,0xff,0xab,0x8c,0x82,0xff,0xb2,0x92,0x85,0xff,0x91,0x77,0x7c,0xff,0x84, 0x6c,0x76,0xff,0xb1,0x91,0x84,0xff,0xab,0x8c,0x82,0xff,0xac,0x8d,0x82,0xff,0xae, 0x8f,0x82,0xff,0x95,0x78,0x7a,0xff,0x88,0x67,0x70,0xff,0xa9,0x87,0x7e,0xff,0xb2, 0x95,0x89,0xff,0xac,0x8c,0x82,0xff,0xab,0x8c,0x82,0xff,0xab,0x8d,0x83,0xff,0xad, 0x90,0x83,0xff,0xb1,0x8f,0x85,0xff,0x9b,0x7a,0x72,0xff,0x55,0x4c,0x48,0xff,0x27, 0x31,0x2b,0xff,0x27,0x31,0x27,0xff,0x29,0x32,0x29,0xff,0x29,0x32,0x29,0xff,0x28, 0x31,0x28,0xff,0x1a,0x25,0x1d,0xff,0x37,0x33,0x36,0xff,0xa4,0x8f,0x8d,0xff,0xc0, 0xa5,0x9b,0xff,0xab,0x8d,0x82,0xff,0xab,0x8d,0x82,0xff,0xab,0x8c,0x83,0xff,0xab, 0x8c,0x82,0xff,0xac,0x8d,0x83,0xff,0xab,0x8d,0x82,0xff,0xac,0x8d,0x83,0xff,0xac, 0x8d,0x83,0xff,0xac,0x8d,0x83,0xff,0xab,0x8c,0x82,0xff,0xab,0x8c,0x82,0xff,0xab, 0x8c,0x82,0xff,0xac,0x8c,0x82,0xff,0xac,0x8d,0x83,0xff,0xb4,0x98,0x8f,0xff,0xaf, 0x91,0x87,0xff,0xad,0x8f,0x83,0xff,0xaf,0x8a,0x85,0xff,0x53,0x4b,0x49,0xff,0x2e, 0x35,0x30,0xff,0x33,0x39,0x34,0xff,0x21,0x2a,0x23,0xff,0x54,0x45,0x4b,0xff,0xae, 0x95,0x92,0xff,0xb3,0x97,0x8c,0xff,0xac,0x8c,0x82,0xff,0xab,0x8c,0x82,0xff,0xab, 0x8b,0x82,0xff,0xaa,0x8b,0x81,0xff,0xac,0x8d,0x83,0xff,0xac,0x8d,0x83,0xff,0xab, 0x8c,0x82,0xff,0xaa,0x8b,0x80,0xff,0xaa,0x8b,0x81,0xff,0xab,0x8c,0x82,0xff,0xab, 0x8b,0x82,0xff,0xaa,0x8b,0x80,0xff,0xaa,0x8b,0x81,0xff,0xaa,0x8b,0x81,0xff,0xab, 0x8c,0x81,0xff,0x97,0x72,0x68,0xff,0xb8,0x9d,0x94,0xff,0xb2,0x92,0x86,0xff,0x55, 0x4e,0x50,0xff,0x3c,0x3d,0x3c,0xff,0x3c,0x3e,0x3d,0xff,0x3d,0x3f,0x3e,0xff,0x30, 0x32,0x31,0xff,0x1e,0x24,0x21,0xff,0x77,0x5a,0x53,0xff,0xb1,0x96,0x8e,0xff,0xaa, 0x8c,0x81,0xff,0xa8,0x89,0x7f,0xff,0xa9,0x89,0x7e,0xff,0xa8,0x88,0x7e,0xff,0xa9, 0x89,0x7e,0xff,0xa9,0x89,0x7f,0xff,0xa8,0x89,0x7e,0xff,0xa9,0x89,0x7f,0xff,0xa7, 0x88,0x7d,0xff,0xa8,0x89,0x7e,0xff,0xa9,0x8a,0x7f,0xff,0x9d,0x7a,0x70,0xff,0x9f, 0x7c,0x71,0xff,0xa8,0x87,0x7d,0xff,0xa8,0x89,0x7e,0xff,0xa7,0x88,0x7d,0xff,0xa7, 0x87,0x7d,0xff,0xa7,0x87,0x7d,0xff,0xa5,0x86,0x7c,0xfe,0x1c,0x17,0x15,0xfb,0x00, 0x00,0x00,0xf9,0x02,0x02,0x02,0xf5,0x2c,0x2b,0x2c,0xf3,0x2f,0x2f,0x2f,0xf3,0x2f, 0x2f,0x2f,0xf5,0x34,0x32,0x34,0xf9,0x48,0x42,0x48,0xfc,0x5a,0x50,0x5b,0xfe,0x5d, 0x51,0x5d,0xff,0x5b,0x50,0x5c,0xff,0x5e,0x50,0x5c,0xff,0x62,0x4b,0x52,0xff,0x5f, 0x52,0x60,0xff,0x2a,0x31,0x2d,0xff,0x46,0x42,0x3e,0xff,0x73,0x5d,0x69,0xff,0x67, 0x56,0x61,0xff,0x4e,0x49,0x51,0xff,0x55,0x4d,0x55,0xff,0x8f,0x74,0x7e,0xff,0x99, 0x75,0x76,0xff,0x8a,0x64,0x6a,0xff,0x89,0x64,0x68,0xff,0x89,0x64,0x68,0xff,0x8b, 0x66,0x67,0xff,0x95,0x70,0x69,0xff,0xa4,0x85,0x79,0xff,0x9f,0x7d,0x72,0xff,0x9e, 0x7b,0x71,0xff,0xa2,0x80,0x76,0xff,0xa5,0x84,0x78,0xff,0x9f,0x7e,0x79,0xff,0x7b, 0x61,0x70,0xff,0x76,0x61,0x6d,0xff,0xa9,0x87,0x82,0xff,0xaa,0x89,0x7b,0xff,0xa2, 0x81,0x77,0xff,0xa4,0x83,0x78,0xff,0xa3,0x82,0x78,0xff,0xa3,0x82,0x77,0xff,0xa3, 0x82,0x77,0xff,0xa4,0x83,0x78,0xff,0xa4,0x83,0x78,0xff,0xa3,0x82,0x77,0xff,0xa4, 0x83,0x78,0xff,0xa3,0x82,0x77,0xff,0xa3,0x82,0x77,0xff,0xa2,0x81,0x76,0xff,0xa2, 0x81,0x76,0xff,0xa1,0x80,0x75,0xff,0xa1,0x80,0x75,0xff,0xa1,0x80,0x75,0xff,0xa4, 0x82,0x75,0xff,0x9d,0x7c,0x7a,0xff,0x6c,0x57,0x64,0xff,0x3a,0x33,0x38,0xff,0x41, 0x3f,0x45,0xff,0x53,0x4b,0x54,0xff,0x58,0x4e,0x59,0xff,0x56,0x4d,0x57,0xff,0x56, 0x4d,0x57,0xff,0x57,0x4e,0x58,0xff,0x57,0x4e,0x58,0xff,0x57,0x4d,0x57,0xff,0x58, 0x4e,0x58,0xff,0x58,0x4e,0x59,0xff,0x59,0x4f,0x5a,0xff,0x59,0x4f,0x5a,0xff,0x59, 0x4f,0x5a,0xff,0x59,0x4f,0x5a,0xff,0x5a,0x4f,0x5b,0xff,0x5b,0x50,0x5c,0xff,0x5e, 0x52,0x5e,0xff,0x5e,0x52,0x5f,0xff,0x5d,0x51,0x5e,0xff,0x59,0x4f,0x5e,0xff,0x77, 0x62,0x67,0xff,0xa2,0x80,0x77,0xff,0xac,0x8a,0x7e,0xff,0xa3,0x82,0x76,0xff,0x9e, 0x7b,0x70,0xff,0x9e,0x7b,0x70,0xff,0x9f,0x7d,0x72,0xff,0x9e,0x7c,0x71,0xff,0x9e, 0x7c,0x71,0xff,0x9f,0x7d,0x72,0xff,0x9e,0x7c,0x71,0xff,0x9e,0x7b,0x70,0xff,0x9e, 0x7c,0x71,0xff,0x9e,0x7c,0x71,0xff,0x9e,0x7c,0x71,0xff,0x9e,0x7c,0x71,0xff,0x9e, 0x7c,0x71,0xff,0x9e,0x7c,0x71,0xff,0x9e,0x7c,0x71,0xff,0x9f,0x7d,0x72,0xff,0xa5, 0x82,0x74,0xff,0x82,0x63,0x60,0xff,0x56,0x45,0x48,0xff,0x49,0x43,0x4f,0xff,0x73, 0x5e,0x60,0xff,0x9d,0x7c,0x70,0xff,0xa1,0x7e,0x72,0xff,0x9e,0x7b,0x70,0xff,0x9e, 0x7b,0x70,0xff,0xa8,0x81,0x75,0xfe,0x50,0x48,0x48,0xfd,0x95,0x81,0x7c,0xfc,0xb1, 0x8c,0x81,0xf8,0x76,0x5a,0x52,0xee,0x13,0x0f,0x0e,0xdd,0x00,0x00,0x00,0xc4,0x00, 0x00,0x00,0xa4,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,0x39,0x00, 0x00,0x00,0x21,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x03,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00, 0x00,0x00,0x05,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x23,0x00, 0x00,0x00,0x37,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,0x89,0x00, 0x00,0x00,0xa8,0x00,0x00,0x00,0xc5,0x13,0x13,0x12,0xdb,0x72,0x65,0x5e,0xe9,0xce, 0xb5,0xae,0xf4,0xbb,0x99,0x8e,0xfa,0xa8,0x89,0x7f,0xfd,0xab,0x8c,0x82,0xfe,0xab, 0x8c,0x82,0xff,0xab,0x8c,0x82,0xff,0xad,0x8f,0x83,0xff,0xaf,0x8e,0x84,0xff,0x97, 0x75,0x73,0xff,0x56,0x49,0x47,0xff,0x2c,0x35,0x32,0xff,0x35,0x3a,0x36,0xff,0x28, 0x2e,0x2b,0xff,0x28,0x27,0x23,0xff,0x4b,0x3e,0x3f,0xff,0x3d,0x37,0x3d,0xff,0x63, 0x52,0x49,0xff,0xab,0x8b,0x82,0xff,0xb1,0x92,0x86,0xff,0xac,0x8d,0x83,0xff,0xac, 0x8e,0x83,0xff,0xac,0x8e,0x84,0xff,0xac,0x8d,0x83,0xff,0xac,0x8e,0x83,0xff,0xac, 0x8d,0x83,0xff,0xac,0x8e,0x83,0xff,0xac,0x8e,0x83,0xff,0xad,0x90,0x84,0xff,0xaf, 0x8d,0x82,0xff,0x76,0x61,0x62,0xff,0x6e,0x60,0x61,0xff,0xb6,0x95,0x89,0xff,0xad, 0x8e,0x85,0xff,0xad,0x8f,0x85,0xff,0xac,0x8e,0x84,0xff,0xa6,0x85,0x7a,0xff,0xaa, 0x8a,0x7e,0xff,0xb0,0x93,0x88,0xff,0xac,0x8d,0x83,0xff,0xad,0x8e,0x84,0xff,0xae, 0x90,0x86,0xff,0xb2,0x94,0x87,0xff,0xb3,0x91,0x8c,0xff,0x88,0x6a,0x6d,0xff,0x3d, 0x3a,0x37,0xff,0x21,0x2e,0x26,0xff,0x29,0x32,0x29,0xff,0x29,0x32,0x29,0xff,0x28, 0x31,0x28,0xff,0x2a,0x32,0x2a,0xff,0x1c,0x26,0x1d,0xff,0x21,0x21,0x1a,0xff,0x91, 0x7d,0x75,0xff,0xc3,0xa8,0x9f,0xff,0xb1,0x95,0x8b,0xff,0xae,0x90,0x85,0xff,0xaf, 0x91,0x86,0xff,0xaf,0x91,0x86,0xff,0xad,0x8e,0x84,0xff,0xae,0x8f,0x85,0xff,0xae, 0x90,0x85,0xff,0xae,0x90,0x86,0xff,0xad,0x8e,0x85,0xff,0xae,0x8f,0x84,0xff,0xae, 0x8f,0x85,0xff,0xb1,0x95,0x8b,0xff,0xb3,0x97,0x8e,0xff,0xaf,0x91,0x87,0xff,0xaf, 0x92,0x88,0xff,0xb0,0x91,0x85,0xff,0xb0,0x93,0x87,0xff,0xbb,0x9a,0x8b,0xff,0x81, 0x69,0x71,0xff,0x3e,0x3e,0x40,0xff,0x32,0x38,0x32,0xff,0x36,0x3b,0x36,0xff,0x16, 0x1e,0x1e,0xff,0x95,0x7f,0x76,0xff,0xb7,0x99,0x8f,0xff,0xae,0x8f,0x85,0xff,0xac, 0x8e,0x83,0xff,0xac,0x8e,0x83,0xff,0xab,0x8c,0x82,0xff,0xab,0x8c,0x82,0xff,0xad, 0x8f,0x84,0xff,0xab,0x8d,0x82,0xff,0xac,0x8d,0x83,0xff,0xac,0x8d,0x83,0xff,0xab, 0x8c,0x82,0xff,0xac,0x8d,0x83,0xff,0xac,0x8e,0x83,0xff,0xac,0x8d,0x83,0xff,0xac, 0x8d,0x83,0xff,0xab,0x8c,0x82,0xff,0xac,0x8e,0x84,0xff,0xa1,0x7f,0x71,0xff,0x9b, 0x77,0x6c,0xff,0xa4,0x7d,0x72,0xff,0x42,0x42,0x3e,0xff,0x3a,0x3c,0x3a,0xff,0x3b, 0x3d,0x3b,0xff,0x3c,0x3e,0x3c,0xff,0x2b,0x2c,0x2b,0xff,0x15,0x1e,0x17,0xff,0x9b, 0x7e,0x74,0xff,0xb3,0x98,0x8f,0xff,0xab,0x8c,0x81,0xff,0xaa,0x8b,0x81,0xff,0xa9, 0x89,0x7f,0xff,0xaa,0x8b,0x80,0xff,0xa9,0x89,0x7f,0xff,0xaa,0x8b,0x81,0xff,0xa9, 0x8a,0x80,0xff,0xab,0x8c,0x82,0xff,0xa9,0x8a,0x80,0xff,0xa9,0x8a,0x80,0xff,0xac, 0x8e,0x82,0xff,0x9a,0x77,0x6c,0xff,0xac,0x8e,0x83,0xff,0xa9,0x89,0x7f,0xff,0xa9, 0x8a,0x80,0xff,0xaa,0x8b,0x80,0xff,0xa8,0x88,0x7e,0xff,0xa9,0x89,0x7f,0xfe,0xa6, 0x89,0x7e,0xfc,0x25,0x1f,0x1b,0xf8,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0xe8,0x00, 0x00,0x00,0xe4,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0xea,0x03,0x03,0x03,0xf2,0x2f, 0x2b,0x30,0xf8,0x5e,0x52,0x5e,0xfb,0x5d,0x51,0x5d,0xfe,0x5e,0x52,0x5e,0xff,0x5b, 0x4f,0x5b,0xff,0x37,0x35,0x3a,0xff,0x47,0x44,0x46,0xff,0x83,0x65,0x77,0xff,0x92, 0x6a,0x6e,0xff,0x8f,0x69,0x67,0xff,0x8e,0x68,0x6b,0xff,0x77,0x5e,0x6f,0xff,0x4c, 0x48,0x48,0xff,0xb5,0x90,0x80,0xff,0xa9,0x8b,0x83,0xff,0x86,0x61,0x65,0xff,0x89, 0x64,0x68,0xff,0x89,0x64,0x68,0xff,0x8d,0x68,0x68,0xff,0xa2,0x81,0x78,0xff,0xba, 0xa0,0x97,0xff,0xa5,0x84,0x7a,0xff,0xa7,0x87,0x7d,0xff,0xa6,0x85,0x7b,0xff,0xa5, 0x84,0x7a,0xff,0xa7,0x86,0x7a,0xff,0x88,0x6d,0x64,0xff,0x3c,0x3b,0x45,0xff,0x78, 0x62,0x70,0xff,0xaa,0x88,0x86,0xff,0xac,0x8b,0x7d,0xff,0xa4,0x83,0x7a,0xff,0xa5, 0x85,0x7b,0xff,0xa4,0x83,0x79,0xff,0xa5,0x84,0x79,0xff,0xa5,0x84,0x79,0xff,0xa5, 0x84,0x79,0xff,0xa4,0x83,0x78,0xff,0xa4,0x83,0x78,0xff,0xa4,0x83,0x78,0xff,0xa4, 0x83,0x78,0xff,0xa3,0x82,0x77,0xff,0xa3,0x82,0x77,0xff,0xa2,0x81,0x76,0xff,0xa3, 0x82,0x77,0xff,0xa2,0x81,0x76,0xff,0xa2,0x81,0x76,0xff,0xa4,0x83,0x76,0xff,0xa4, 0x7f,0x77,0xff,0x84,0x65,0x66,0xff,0x50,0x44,0x49,0xff,0x44,0x3e,0x4a,0xff,0x56, 0x4d,0x56,0xff,0x58,0x4f,0x59,0xff,0x56,0x4d,0x57,0xff,0x57,0x4e,0x58,0xff,0x58, 0x4e,0x59,0xff,0x5a,0x4f,0x5b,0xff,0x59,0x4e,0x5a,0xff,0x58,0x4e,0x59,0xff,0x59, 0x4f,0x5a,0xff,0x59,0x4f,0x5a,0xff,0x59,0x4f,0x5a,0xff,0x5a,0x4f,0x5b,0xff,0x5c, 0x51,0x5d,0xff,0x5d,0x51,0x5e,0xff,0x5e,0x52,0x5f,0xff,0x5e,0x52,0x5f,0xff,0x5f, 0x52,0x60,0xff,0x5f,0x52,0x5f,0xff,0x58,0x4e,0x5d,0xff,0x69,0x54,0x5d,0xff,0x93, 0x73,0x76,0xff,0xac,0x8c,0x85,0xff,0xa8,0x87,0x79,0xff,0xa0,0x7d,0x73,0xff,0x9e, 0x7b,0x70,0xff,0x9e,0x7d,0x72,0xff,0x9f,0x7d,0x72,0xff,0xa0,0x7e,0x73,0xff,0x9f, 0x7d,0x72,0xff,0x9f,0x7d,0x72,0xff,0x9f,0x7d,0x72,0xff,0x9f,0x7d,0x72,0xff,0x9f, 0x7d,0x72,0xff,0x9f,0x7d,0x72,0xff,0x9f,0x7d,0x72,0xff,0x9f,0x7d,0x72,0xff,0x9f, 0x7d,0x72,0xff,0x9f,0x7d,0x72,0xff,0x9e,0x7c,0x71,0xff,0xa5,0x82,0x76,0xff,0x94, 0x72,0x66,0xff,0x84,0x68,0x69,0xff,0x6a,0x56,0x65,0xff,0x83,0x69,0x71,0xff,0x9e, 0x7e,0x75,0xff,0x9f,0x7e,0x71,0xff,0x9e,0x7b,0x70,0xff,0xaa,0x82,0x76,0xff,0x40, 0x3e,0x3c,0xfe,0x8e,0x7d,0x77,0xfe,0xab,0x88,0x7e,0xfb,0xaa,0x84,0x79,0xf7,0x6a, 0x53,0x4b,0xed,0x0f,0x0c,0x0b,0xdc,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0xa2,0x00, 0x00,0x00,0x7c,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x1e,0x00, 0x00,0x00,0x0f,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x03,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x19,0x00, 0x00,0x00,0x29,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x77,0x00, 0x00,0x00,0x95,0x00,0x00,0x00,0xb1,0x03,0x03,0x04,0xc9,0x28,0x25,0x24,0xdf,0x73, 0x5c,0x5a,0xed,0x91,0x7a,0x80,0xf5,0x6b,0x63,0x5b,0xfa,0x8a,0x74,0x6e,0xfd,0xb7, 0x95,0x89,0xfe,0xac,0x8e,0x83,0xff,0xac,0x8e,0x83,0xff,0xaf,0x90,0x85,0xff,0xaf, 0x8f,0x88,0xff,0x89,0x6e,0x76,0xff,0x49,0x41,0x43,0xff,0x29,0x33,0x2d,0xff,0x34, 0x39,0x34,0xff,0x31,0x36,0x32,0xff,0x23,0x26,0x27,0xff,0x62,0x55,0x56,0xff,0xb7, 0x97,0x93,0xff,0x9b,0x7e,0x81,0xff,0xb2,0x8d,0x80,0xff,0xb1,0x92,0x88,0xff,0xae, 0x90,0x86,0xff,0xad,0x8e,0x84,0xff,0xae,0x90,0x86,0xff,0xae,0x90,0x86,0xff,0xae, 0x8f,0x85,0xff,0xad,0x90,0x85,0xff,0xae,0x90,0x86,0xff,0xad,0x90,0x85,0xff,0xae, 0x91,0x86,0xff,0xb2,0x94,0x87,0xff,0x9c,0x7d,0x7d,0xff,0x66,0x50,0x61,0xff,0x7e, 0x6b,0x6d,0xff,0xb7,0x97,0x8a,0xff,0xaf,0x91,0x87,0xff,0xaf,0x90,0x87,0xff,0xae, 0x90,0x87,0xff,0xae,0x92,0x88,0xff,0xaf,0x91,0x87,0xff,0xae,0x90,0x86,0xff,0xaf, 0x91,0x87,0xff,0xae,0x91,0x87,0xff,0xb5,0x96,0x89,0xff,0xae,0x8e,0x8a,0xff,0x7a, 0x62,0x6c,0xff,0x38,0x38,0x38,0xff,0x23,0x2f,0x26,0xff,0x2b,0x33,0x2b,0xff,0x2a, 0x32,0x2a,0xff,0x29,0x32,0x2a,0xff,0x2a,0x33,0x2a,0xff,0x23,0x2c,0x23,0xff,0x19, 0x1e,0x1f,0xff,0x73,0x61,0x60,0xff,0xc1,0xa6,0x9d,0xff,0xb7,0x9c,0x93,0xff,0xb1, 0x93,0x89,0xff,0xb2,0x95,0x8a,0xff,0xb3,0x95,0x89,0xff,0xb1,0x94,0x88,0xff,0xb0, 0x94,0x8a,0xff,0xaf,0x92,0x88,0xff,0xaf,0x92,0x88,0xff,0xad,0x8f,0x85,0xff,0xa9, 0x89,0x7e,0xff,0xad,0x8e,0x84,0xff,0xb1,0x95,0x8b,0xff,0xb5,0x99,0x8f,0xff,0xb6, 0x9b,0x93,0xff,0xb4,0x98,0x8e,0xff,0xb4,0x96,0x89,0xff,0xa1,0x84,0x83,0xff,0x9a, 0x78,0x77,0xff,0x9e,0x7e,0x81,0xff,0x4b,0x48,0x47,0xff,0x30,0x36,0x32,0xff,0x35, 0x3a,0x35,0xff,0x2a,0x30,0x2d,0xff,0x3e,0x31,0x31,0xff,0xac,0x96,0x90,0xff,0xb6, 0x99,0x90,0xff,0xae,0x90,0x86,0xff,0xae,0x90,0x85,0xff,0xad,0x8f,0x85,0xff,0xae, 0x91,0x86,0xff,0xad,0x8f,0x85,0xff,0xad,0x8f,0x85,0xff,0xad,0x8f,0x85,0xff,0xad, 0x8e,0x84,0xff,0xad,0x8e,0x84,0xff,0xad,0x8f,0x85,0xff,0xad,0x8e,0x84,0xff,0xae, 0x90,0x85,0xff,0xac,0x8e,0x83,0xff,0xae,0x90,0x85,0xff,0xac,0x8d,0x83,0xff,0xaf, 0x91,0x85,0xff,0x98,0x77,0x79,0xff,0xa3,0x82,0x78,0xff,0x93,0x6f,0x75,0xff,0x42, 0x40,0x3f,0xff,0x3b,0x3d,0x3b,0xff,0x3b,0x3d,0x3b,0xff,0x39,0x3a,0x39,0xff,0x29, 0x2a,0x29,0xff,0x13,0x1b,0x15,0xff,0xaa,0x92,0x89,0xff,0xb2,0x95,0x8b,0xff,0xab, 0x8c,0x82,0xff,0xac,0x8d,0x83,0xff,0xac,0x8d,0x83,0xff,0xab,0x8c,0x82,0xff,0xac, 0x8e,0x83,0xff,0xaa,0x8b,0x81,0xff,0xaa,0x8b,0x81,0xff,0xab,0x8c,0x82,0xff,0xaa, 0x8b,0x81,0xff,0xaa,0x8b,0x82,0xff,0x98,0x76,0x74,0xff,0xa6,0x86,0x7c,0xff,0xad, 0x8f,0x85,0xff,0xab,0x8c,0x82,0xff,0xaa,0x8b,0x80,0xff,0xaa,0x8b,0x80,0xff,0xaa, 0x8b,0x81,0xff,0xab,0x8c,0x82,0xfd,0xa7,0x89,0x7f,0xfa,0x2b,0x23,0x21,0xf3,0x00, 0x00,0x00,0xe6,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xd0,0x00, 0x00,0x00,0xda,0x02,0x02,0x02,0xe8,0x27,0x24,0x27,0xf3,0x61,0x54,0x61,0xfa,0x5d, 0x51,0x5e,0xfd,0x61,0x53,0x61,0xff,0x5b,0x4f,0x5b,0xff,0x2b,0x2f,0x2a,0xff,0x56, 0x4d,0x54,0xff,0x91,0x68,0x6d,0xff,0x8d,0x68,0x68,0xff,0x8b,0x66,0x68,0xff,0x8c, 0x66,0x68,0xff,0x82,0x61,0x64,0xff,0x58,0x4d,0x53,0xff,0x8f,0x6c,0x70,0xff,0x99, 0x75,0x6a,0xff,0x88,0x63,0x68,0xff,0x8a,0x65,0x68,0xff,0x8a,0x64,0x67,0xff,0x90, 0x6b,0x6e,0xff,0xb6,0x9b,0x90,0xff,0xac,0x8e,0x84,0xff,0xa6,0x86,0x7c,0xff,0xa6, 0x86,0x7c,0xff,0xa6,0x86,0x7c,0xff,0xa7,0x86,0x7c,0xff,0xa8,0x88,0x7d,0xff,0x9a, 0x7b,0x77,0xff,0x53,0x44,0x4e,0xff,0x38,0x39,0x3b,0xff,0x6e,0x5c,0x69,0xff,0xa6, 0x85,0x86,0xff,0xad,0x8c,0x7e,0xff,0xa5,0x84,0x7b,0xff,0xa5,0x85,0x7b,0xff,0xa6, 0x85,0x7b,0xff,0xa6,0x85,0x7b,0xff,0xa5,0x84,0x7a,0xff,0xa4,0x83,0x79,0xff,0xa5, 0x84,0x79,0xff,0xa4,0x83,0x79,0xff,0xa5,0x84,0x79,0xff,0xa5,0x84,0x79,0xff,0xa4, 0x83,0x79,0xff,0xa4,0x83,0x78,0xff,0xa3,0x82,0x77,0xff,0xa4,0x83,0x78,0xff,0xa4, 0x83,0x77,0xff,0xa3,0x82,0x77,0xff,0xa3,0x83,0x77,0xff,0xa6,0x83,0x75,0xff,0x95, 0x73,0x6b,0xff,0x5c,0x4c,0x53,0xff,0x3f,0x39,0x44,0xff,0x50,0x49,0x51,0xff,0x5b, 0x50,0x5a,0xff,0x58,0x4e,0x59,0xff,0x59,0x4f,0x5a,0xff,0x5b,0x50,0x5d,0xff,0x5b, 0x50,0x5d,0xff,0x5b,0x50,0x5c,0xff,0x5a,0x50,0x5b,0xff,0x59,0x4f,0x5a,0xff,0x59, 0x4f,0x5a,0xff,0x5a,0x50,0x5b,0xff,0x5d,0x51,0x5e,0xff,0x5d,0x51,0x5e,0xff,0x5e, 0x52,0x5f,0xff,0x5e,0x52,0x5f,0xff,0x5f,0x53,0x60,0xff,0x60,0x53,0x60,0xff,0x60, 0x53,0x60,0xff,0x5d,0x51,0x5f,0xff,0x63,0x53,0x65,0xff,0x82,0x69,0x77,0xff,0xa5, 0x87,0x80,0xff,0xac,0x8b,0x7e,0xff,0xa1,0x81,0x76,0xff,0x9f,0x7d,0x72,0xff,0xa0, 0x7e,0x73,0xff,0xa0,0x7e,0x73,0xff,0xa1,0x7f,0x74,0xff,0xa1,0x7f,0x74,0xff,0xa0, 0x7e,0x73,0xff,0xa0,0x7e,0x73,0xff,0x9f,0x7d,0x72,0xff,0x9f,0x7d,0x72,0xff,0xa0, 0x7e,0x73,0xff,0xa0,0x7e,0x73,0xff,0xa0,0x7e,0x73,0xff,0xa0,0x7e,0x73,0xff,0xa0, 0x7e,0x73,0xff,0xa0,0x7e,0x73,0xff,0xa4,0x81,0x76,0xff,0xa6,0x83,0x75,0xff,0x9b, 0x77,0x71,0xff,0x8a,0x6a,0x72,0xff,0x97,0x75,0x71,0xff,0xa0,0x7d,0x72,0xff,0x9e, 0x7c,0x71,0xff,0xa2,0x7f,0x73,0xff,0x7e,0x68,0x65,0xff,0x92,0x74,0x6c,0xff,0xb1, 0x94,0x88,0xfe,0xa5,0x85,0x7a,0xfb,0xa8,0x84,0x79,0xf6,0x66,0x4f,0x48,0xec,0x0e, 0x0a,0x0a,0xda,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x75,0x00, 0x00,0x00,0x51,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x0d,0x00, 0x00,0x00,0x05,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x02,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x11,0x00, 0x00,0x00,0x1d,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x65,0x00, 0x00,0x00,0x84,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0xbd,0x08,0x09,0x08,0xd1,0x53, 0x50,0x4f,0xe2,0xae,0x9c,0x95,0xef,0xad,0x8a,0x83,0xf7,0x87,0x70,0x75,0xfb,0x52, 0x4f,0x48,0xfe,0x2d,0x33,0x33,0xfe,0x92,0x7a,0x79,0xff,0xb4,0x96,0x8b,0xff,0xb2, 0x93,0x87,0xff,0xab,0x8b,0x84,0xff,0x77,0x63,0x6d,0xff,0x3f,0x3d,0x45,0xff,0x2c, 0x35,0x2e,0xff,0x34,0x39,0x33,0xff,0x34,0x38,0x35,0xff,0x26,0x2c,0x29,0xff,0x44, 0x40,0x41,0xff,0xaf,0x96,0x95,0xff,0xc3,0xa9,0x9e,0xff,0xb3,0x95,0x89,0xff,0xaf, 0x91,0x88,0xff,0xae,0x90,0x86,0xff,0xaf,0x91,0x87,0xff,0xaf,0x91,0x87,0xff,0xaf, 0x91,0x87,0xff,0xaf,0x90,0x86,0xff,0xaf,0x92,0x88,0xff,0xaf,0x92,0x88,0xff,0xaf, 0x91,0x88,0xff,0xaf,0x91,0x87,0xff,0xaf,0x93,0x89,0xff,0xb4,0x96,0x8b,0xff,0x9d, 0x7e,0x80,0xff,0x61,0x4e,0x5f,0xff,0x7a,0x6a,0x6a,0xff,0xb9,0x9a,0x8f,0xff,0xaf, 0x91,0x87,0xff,0xaf,0x91,0x87,0xff,0xae,0x91,0x87,0xff,0xae,0x91,0x87,0xff,0xaf, 0x92,0x88,0xff,0xaf,0x91,0x87,0xff,0xaf,0x92,0x88,0xff,0xb6,0x95,0x8a,0xff,0xa1, 0x83,0x7f,0xff,0x65,0x57,0x60,0xff,0x30,0x35,0x34,0xff,0x29,0x31,0x29,0xff,0x2e, 0x35,0x2e,0xff,0x2c,0x34,0x2c,0xff,0x2a,0x33,0x2b,0xff,0x2a,0x34,0x2b,0xff,0x2a, 0x32,0x2a,0xff,0x14,0x1e,0x18,0xff,0x49,0x42,0x44,0xff,0xb9,0xa5,0xa1,0xff,0xca, 0xb2,0xa6,0xff,0xad,0x8d,0x7f,0xff,0x9e,0x7b,0x75,0xff,0x9c,0x78,0x74,0xff,0x93, 0x74,0x7a,0xff,0x9b,0x7d,0x7b,0xff,0xa8,0x88,0x7d,0xff,0xaf,0x91,0x88,0xff,0xb3, 0x98,0x8f,0xff,0xb4,0x98,0x8f,0xff,0xb3,0x98,0x8e,0xff,0xa6,0x87,0x7c,0xff,0x9f, 0x7c,0x71,0xff,0xa5,0x83,0x79,0xff,0xa6,0x86,0x7b,0xff,0xa2,0x81,0x76,0xff,0x9e, 0x7a,0x73,0xff,0x76,0x5c,0x6f,0xff,0x96,0x76,0x7b,0xff,0x72,0x5e,0x68,0xff,0x39, 0x3b,0x3c,0xff,0x32,0x38,0x33,0xff,0x37,0x3c,0x37,0xff,0x12,0x1a,0x16,0xff,0x8b, 0x78,0x71,0xff,0xbc,0xa0,0x97,0xff,0xb0,0x94,0x89,0xff,0xae,0x91,0x87,0xff,0xaf, 0x92,0x88,0xff,0xae,0x91,0x87,0xff,0xaf,0x92,0x88,0xff,0xaf,0x92,0x88,0xff,0xaf, 0x91,0x87,0xff,0xaf,0x91,0x87,0xff,0xaf,0x91,0x87,0xff,0xaf,0x91,0x87,0xff,0xaf, 0x91,0x87,0xff,0xaf,0x91,0x87,0xff,0xaf,0x91,0x87,0xff,0xae,0x90,0x85,0xff,0xaf, 0x91,0x87,0xff,0xad,0x8f,0x85,0xff,0xb1,0x93,0x86,0xff,0x7d,0x60,0x6d,0xff,0xac, 0x8f,0x85,0xff,0x80,0x67,0x7a,0xff,0x41,0x40,0x41,0xff,0x3a,0x3d,0x3a,0xff,0x3b, 0x3d,0x3b,0xff,0x34,0x35,0x34,0xff,0x22,0x24,0x22,0xff,0x2e,0x2e,0x30,0xff,0xb3, 0x9d,0x95,0xff,0xb1,0x93,0x89,0xff,0xad,0x8e,0x84,0xff,0xad,0x8f,0x84,0xff,0xad, 0x8e,0x83,0xff,0xad,0x8f,0x85,0xff,0xae,0x90,0x85,0xff,0xac,0x8e,0x83,0xff,0xac, 0x8e,0x83,0xff,0xad,0x8e,0x84,0xff,0xad,0x8e,0x84,0xff,0xae,0x90,0x85,0xff,0x95, 0x71,0x6e,0xff,0xad,0x8f,0x85,0xff,0xac,0x8d,0x83,0xff,0xac,0x8d,0x83,0xff,0xa9, 0x8a,0x80,0xff,0xa9,0x8a,0x80,0xff,0xab,0x8c,0x82,0xfe,0xaa,0x8b,0x81,0xfd,0xa7, 0x89,0x7f,0xf7,0x35,0x2b,0x28,0xed,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0xc9,0x00, 0x00,0x00,0xbb,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0xc8,0x01,0x01,0x01,0xdc,0x1d, 0x1b,0x1d,0xed,0x62,0x56,0x62,0xf7,0x5f,0x52,0x5f,0xfc,0x62,0x54,0x62,0xfe,0x5d, 0x50,0x5c,0xff,0x12,0x20,0x14,0xff,0x58,0x4c,0x55,0xff,0x90,0x68,0x69,0xff,0x8d, 0x68,0x68,0xff,0x8b,0x65,0x68,0xff,0x8a,0x65,0x68,0xff,0x8c,0x66,0x6a,0xff,0x8a, 0x68,0x75,0xff,0x6f,0x5d,0x6d,0xff,0xa3,0x7f,0x73,0xff,0x89,0x64,0x67,0xff,0x8a, 0x65,0x68,0xff,0x88,0x62,0x66,0xff,0x98,0x76,0x70,0xff,0xb6,0x9b,0x8f,0xff,0xaa, 0x8a,0x7e,0xff,0xa7,0x88,0x7e,0xff,0xa7,0x87,0x7d,0xff,0xa8,0x87,0x7e,0xff,0xa7, 0x87,0x7d,0xff,0xa8,0x88,0x7d,0xff,0xa7,0x85,0x7c,0xff,0x7e,0x62,0x61,0xff,0x2c, 0x2d,0x30,0xff,0x44,0x43,0x47,0xff,0x66,0x57,0x65,0xff,0xa0,0x83,0x85,0xff,0xb3, 0x94,0x87,0xff,0xa6,0x86,0x7c,0xff,0xa6,0x85,0x7b,0xff,0xa6,0x85,0x7b,0xff,0xa6, 0x85,0x7b,0xff,0xa6,0x86,0x7c,0xff,0xa6,0x85,0x7b,0xff,0xa6,0x85,0x7b,0xff,0xa6, 0x85,0x7b,0xff,0xa6,0x85,0x7b,0xff,0xa6,0x85,0x7b,0xff,0xa5,0x84,0x7a,0xff,0xa5, 0x84,0x78,0xff,0xa4,0x84,0x79,0xff,0xa5,0x84,0x79,0xff,0xa4,0x83,0x78,0xff,0xa4, 0x84,0x79,0xff,0xa5,0x85,0x7a,0xff,0xaa,0x87,0x7b,0xff,0x9c,0x7b,0x71,0xff,0x6c, 0x55,0x59,0xff,0x4c,0x41,0x4c,0xff,0x50,0x48,0x52,0xff,0x5b,0x51,0x5c,0xff,0x5a, 0x50,0x5b,0xff,0x5e,0x52,0x5e,0xff,0x57,0x4e,0x57,0xff,0x4a,0x46,0x4b,0xff,0x52, 0x4a,0x53,0xff,0x5c,0x50,0x5d,0xff,0x5a,0x4f,0x5b,0xff,0x5c,0x51,0x5d,0xff,0x5f, 0x53,0x60,0xff,0x5f,0x53,0x5f,0xff,0x5f,0x52,0x5e,0xff,0x5e,0x52,0x5f,0xff,0x5f, 0x53,0x60,0xff,0x60,0x53,0x60,0xff,0x60,0x53,0x60,0xff,0x61,0x54,0x61,0xff,0x61, 0x53,0x61,0xff,0x5f,0x51,0x64,0xff,0x74,0x60,0x6e,0xff,0x9c,0x7d,0x76,0xff,0xae, 0x8d,0x7f,0xff,0xa6,0x86,0x7c,0xff,0xa0,0x7e,0x73,0xff,0xa0,0x7e,0x73,0xff,0xa1, 0x7f,0x74,0xff,0xa1,0x80,0x75,0xff,0xa0,0x7f,0x74,0xff,0xa1,0x7f,0x74,0xff,0xa1, 0x7f,0x74,0xff,0x9f,0x7d,0x72,0xff,0x9f,0x7d,0x72,0xff,0xa1,0x7f,0x74,0xff,0xa1, 0x7f,0x74,0xff,0xa1,0x7f,0x74,0xff,0xa1,0x7f,0x74,0xff,0xa1,0x80,0x75,0xff,0xa1, 0x7f,0x74,0xff,0xa1,0x7f,0x74,0xff,0xa2,0x80,0x74,0xff,0xa1,0x7d,0x70,0xff,0x9e, 0x7b,0x6f,0xff,0x9e,0x7c,0x71,0xff,0xa0,0x7e,0x73,0xff,0x9e,0x7d,0x72,0xff,0xa6, 0x82,0x76,0xff,0xa0,0x7c,0x70,0xff,0x9b,0x7a,0x77,0xff,0xa4,0x84,0x7b,0xfe,0xac, 0x83,0x78,0xfb,0x6a,0x5b,0x51,0xf5,0x3c,0x32,0x2d,0xea,0x0a,0x08,0x07,0xd7,0x00, 0x00,0x00,0xba,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x4b,0x00, 0x00,0x00,0x2f,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x05,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x0d,0x00, 0x00,0x00,0x16,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x52,0x00, 0x00,0x00,0x6f,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0xc7,0x11, 0x10,0x10,0xdb,0x7c,0x74,0x71,0xe9,0xc1,0xad,0xa6,0xf2,0xc2,0xa7,0x9d,0xf9,0xb0, 0x93,0x89,0xfc,0xb8,0x97,0x8b,0xff,0xae,0x90,0x86,0xff,0x70,0x60,0x5e,0xff,0x73, 0x5f,0x6d,0xff,0xb7,0x94,0x85,0xff,0x9d,0x81,0x79,0xff,0x5f,0x54,0x5a,0xff,0x37, 0x38,0x3c,0xff,0x31,0x37,0x32,0xff,0x35,0x3a,0x36,0xff,0x35,0x3b,0x36,0xff,0x2e, 0x34,0x31,0xff,0x35,0x32,0x2d,0xff,0x9d,0x80,0x77,0xff,0xc9,0xaf,0xa5,0xff,0xae, 0x92,0x87,0xff,0xaf,0x93,0x88,0xff,0xaf,0x91,0x88,0xff,0xaf,0x92,0x88,0xff,0xb0, 0x93,0x89,0xff,0xb0,0x93,0x89,0xff,0xb0,0x93,0x89,0xff,0xaf,0x92,0x88,0xff,0xaf, 0x93,0x89,0xff,0xb0,0x94,0x8a,0xff,0xb0,0x93,0x89,0xff,0xb0,0x93,0x89,0xff,0xb0, 0x93,0x89,0xff,0xb2,0x96,0x8c,0xff,0xab,0x88,0x7f,0xff,0x60,0x4e,0x4b,0xff,0x63, 0x5b,0x55,0xff,0xbd,0x9b,0x8f,0xff,0xaf,0x93,0x89,0xff,0xb0,0x94,0x8a,0xff,0xb0, 0x93,0x89,0xff,0xb1,0x94,0x8a,0xff,0xb0,0x95,0x8b,0xff,0xb2,0x96,0x8c,0xff,0xb5, 0x94,0x89,0xff,0x8d,0x73,0x6e,0xff,0x4a,0x46,0x49,0xff,0x2c,0x32,0x2f,0xff,0x2c, 0x33,0x2b,0xff,0x30,0x35,0x30,0xff,0x2d,0x34,0x2d,0xff,0x2c,0x34,0x2c,0xff,0x2d, 0x34,0x2e,0xff,0x2a,0x32,0x2b,0xff,0x1b,0x26,0x1f,0xff,0x37,0x30,0x29,0xff,0xa6, 0x90,0x85,0xff,0xaf,0x99,0x9b,0xff,0x85,0x6e,0x7c,0xff,0x88,0x69,0x75,0xff,0x91, 0x6c,0x6c,0xff,0x96,0x71,0x69,0xff,0x9b,0x7d,0x7d,0xff,0xa6,0x88,0x83,0xff,0xab, 0x8c,0x81,0xff,0xaf,0x92,0x89,0xff,0xb2,0x97,0x8d,0xff,0xb4,0x99,0x90,0xff,0xb7, 0x9d,0x94,0xff,0xad,0x8f,0x85,0xff,0xa6,0x86,0x7c,0xff,0xab,0x8d,0x83,0xff,0xab, 0x8e,0x83,0xff,0xa7,0x88,0x7e,0xff,0x9f,0x7d,0x76,0xff,0x9a,0x7f,0x7f,0xff,0xaa, 0x86,0x81,0xff,0x58,0x4f,0x4b,0xff,0x31,0x37,0x33,0xff,0x34,0x39,0x35,0xff,0x30, 0x36,0x31,0xff,0x30,0x27,0x2e,0xff,0xb2,0xa2,0xa0,0xff,0xbe,0xa5,0x9c,0xff,0xaf, 0x92,0x88,0xff,0xaf,0x92,0x88,0xff,0xb0,0x93,0x89,0xff,0xb0,0x94,0x8a,0xff,0xaf, 0x92,0x88,0xff,0xaf,0x92,0x88,0xff,0xaf,0x92,0x88,0xff,0xb0,0x94,0x8a,0xff,0xb0, 0x93,0x89,0xff,0xb0,0x94,0x8a,0xff,0xb0,0x94,0x8a,0xff,0xaf,0x92,0x88,0xff,0xaf, 0x92,0x88,0xff,0xb1,0x94,0x8a,0xff,0xaf,0x92,0x88,0xff,0xaf,0x92,0x88,0xff,0xb3, 0x96,0x8b,0xff,0x7d,0x61,0x69,0xff,0xb2,0x91,0x88,0xff,0x57,0x50,0x55,0xff,0x3e, 0x3e,0x3f,0xff,0x3a,0x3c,0x3a,0xff,0x3a,0x3d,0x3b,0xff,0x32,0x34,0x33,0xff,0x1c, 0x1f,0x1d,0xff,0x5c,0x4b,0x5e,0xff,0xb5,0x9d,0x96,0xff,0xb0,0x94,0x8a,0xff,0xaf, 0x91,0x87,0xff,0xae,0x90,0x85,0xff,0xae,0x90,0x85,0xff,0xae,0x90,0x86,0xff,0xaf, 0x91,0x87,0xff,0xaf,0x91,0x86,0xff,0xaf,0x91,0x86,0xff,0xae,0x90,0x85,0xff,0xae, 0x90,0x86,0xff,0x9e,0x7b,0x71,0xff,0xa9,0x89,0x7e,0xff,0xae,0x90,0x85,0xff,0xac, 0x8d,0x83,0xff,0xad,0x8e,0x84,0xff,0xab,0x8c,0x82,0xff,0xab,0x8c,0x82,0xff,0xac, 0x8d,0x83,0xfe,0xac,0x8e,0x83,0xfb,0xa9,0x8c,0x81,0xf5,0x3c,0x31,0x2d,0xe8,0x00, 0x00,0x00,0xd2,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0xa8,0x00, 0x00,0x00,0xb7,0x00,0x00,0x00,0xd0,0x12,0x10,0x12,0xe6,0x63,0x56,0x64,0xf3,0x63, 0x54,0x62,0xfb,0x66,0x56,0x65,0xfd,0x5c,0x50,0x5d,0xff,0x2b,0x31,0x2c,0xff,0x60, 0x4d,0x5c,0xff,0x94,0x6d,0x68,0xff,0x8e,0x68,0x67,0xff,0x8b,0x66,0x68,0xff,0x8b, 0x66,0x68,0xff,0x8b,0x65,0x68,0xff,0x84,0x62,0x66,0xff,0x6a,0x59,0x6a,0xff,0x93, 0x6d,0x6c,0xff,0x8b,0x66,0x68,0xff,0x97,0x73,0x6b,0xff,0x9a,0x78,0x71,0xff,0x9b, 0x77,0x6c,0xff,0x94,0x70,0x6d,0xff,0x97,0x75,0x72,0xff,0xab,0x8c,0x80,0xff,0xa8, 0x89,0x7e,0xff,0xa9,0x89,0x7f,0xff,0xa8,0x89,0x7e,0xff,0xa9,0x8a,0x7f,0xff,0xac, 0x8c,0x80,0xff,0x95,0x79,0x73,0xff,0x47,0x3e,0x4c,0xff,0x47,0x43,0x48,0xff,0x58, 0x4e,0x5a,0xff,0x6f,0x5c,0x6f,0xff,0x9b,0x81,0x86,0xff,0xb6,0x98,0x8a,0xff,0xa6, 0x86,0x7b,0xff,0xa7,0x87,0x7d,0xff,0xa7,0x87,0x7d,0xff,0xa7,0x87,0x7d,0xff,0xa6, 0x86,0x7c,0xff,0xa6,0x86,0x7c,0xff,0xa6,0x85,0x7b,0xff,0xa6,0x85,0x7b,0xff,0xa6, 0x85,0x7b,0xff,0xa6,0x85,0x7b,0xff,0xa7,0x86,0x7c,0xff,0xa4,0x82,0x77,0xff,0x9d, 0x7a,0x70,0xff,0x9b,0x78,0x6d,0xff,0x9a,0x75,0x6c,0xff,0x9a,0x75,0x6e,0xff,0x9d, 0x79,0x6e,0xff,0x98,0x77,0x75,0xff,0x83,0x68,0x7a,0xff,0x6e,0x55,0x63,0xff,0x56, 0x44,0x49,0xff,0x4d,0x46,0x52,0xff,0x5b,0x51,0x5c,0xff,0x43,0x42,0x43,0xff,0x40, 0x40,0x40,0xff,0x54,0x4c,0x55,0xff,0x52,0x4a,0x52,0xff,0x57,0x4e,0x58,0xff,0x5f, 0x53,0x60,0xff,0x5e,0x52,0x5f,0xff,0x5f,0x53,0x60,0xff,0x60,0x53,0x60,0xff,0x5f, 0x53,0x60,0xff,0x60,0x53,0x61,0xff,0x61,0x54,0x61,0xff,0x60,0x54,0x60,0xff,0x60, 0x53,0x60,0xff,0x62,0x54,0x62,0xff,0x63,0x55,0x63,0xff,0x62,0x55,0x63,0xff,0x60, 0x52,0x64,0xff,0x6d,0x59,0x68,0xff,0x8d,0x6d,0x6c,0xff,0xad,0x8c,0x82,0xff,0xac, 0x8d,0x83,0xff,0xa2,0x81,0x76,0xff,0xa1,0x80,0x75,0xff,0xa1,0x7f,0x74,0xff,0xa1, 0x80,0x75,0xff,0xa1,0x7f,0x74,0xff,0xa1,0x7f,0x74,0xff,0xa1,0x7f,0x74,0xff,0xa1, 0x7f,0x74,0xff,0xa1,0x7f,0x74,0xff,0xa1,0x7f,0x74,0xff,0xa1,0x7f,0x74,0xff,0xa1, 0x7f,0x74,0xff,0xa1,0x7f,0x74,0xff,0xa1,0x7f,0x74,0xff,0xa0,0x7e,0x73,0xff,0xa0, 0x7e,0x73,0xff,0xa0,0x7f,0x74,0xff,0xa1,0x7f,0x74,0xff,0xa1,0x7f,0x74,0xff,0xa0, 0x7e,0x73,0xff,0xa0,0x7e,0x73,0xff,0xa0,0x7e,0x73,0xff,0xa1,0x80,0x74,0xff,0x99, 0x76,0x6d,0xff,0x98,0x74,0x78,0xfe,0x63,0x54,0x53,0xfe,0x55,0x4b,0x57,0xfb,0x92, 0x75,0x70,0xf4,0x43,0x35,0x2f,0xe8,0x05,0x04,0x03,0xd3,0x00,0x00,0x00,0xb6,0x00, 0x00,0x00,0x93,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x2e,0x00, 0x00,0x00,0x19,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x02,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x08,0x00, 0x00,0x00,0x10,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x42,0x00, 0x00,0x00,0x5c,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0xb5,0x00, 0x00,0x00,0xce,0x28,0x27,0x26,0xe1,0x9d,0x91,0x8d,0xee,0xc0,0xa7,0x9f,0xf6,0xb7, 0x99,0x8f,0xfa,0xac,0x8f,0x85,0xfe,0xae,0x90,0x86,0xfe,0xaf,0x92,0x88,0xff,0xb3, 0x94,0x89,0xff,0xa9,0x8a,0x87,0xff,0x69,0x56,0x6c,0xff,0x7c,0x65,0x67,0xff,0x80, 0x63,0x5f,0xff,0x2b,0x33,0x33,0xff,0x33,0x38,0x33,0xff,0x37,0x3a,0x37,0xff,0x35, 0x3a,0x36,0xff,0x32,0x37,0x33,0xff,0x33,0x32,0x35,0xff,0x80,0x6d,0x76,0xff,0xd1, 0xb6,0xab,0xff,0xb5,0x9a,0x91,0xff,0xaf,0x93,0x89,0xff,0xb1,0x95,0x8b,0xff,0xb0, 0x94,0x8b,0xff,0xb1,0x95,0x8b,0xff,0xb0,0x94,0x8a,0xff,0xb0,0x94,0x8a,0xff,0xb0, 0x94,0x8a,0xff,0xb0,0x94,0x8a,0xff,0xb0,0x94,0x8a,0xff,0xb1,0x95,0x8b,0xff,0xb1, 0x95,0x8b,0xff,0xb2,0x96,0x8c,0xff,0xb2,0x96,0x8c,0xff,0xb2,0x96,0x8d,0xff,0xb1, 0x91,0x85,0xff,0x89,0x6e,0x6f,0xff,0x58,0x4d,0x5b,0xff,0x85,0x72,0x6f,0xff,0xb9, 0x9c,0x91,0xff,0xb2,0x96,0x8d,0xff,0xb2,0x96,0x8c,0xff,0xb2,0x96,0x8b,0xff,0xb5, 0x99,0x8f,0xff,0xb3,0x90,0x86,0xff,0x7d,0x65,0x5e,0xff,0x3c,0x3c,0x3b,0xff,0x2b, 0x33,0x2e,0xff,0x2e,0x35,0x2d,0xff,0x30,0x36,0x30,0xff,0x30,0x35,0x30,0xff,0x2e, 0x35,0x2e,0xff,0x2e,0x34,0x2e,0xff,0x2d,0x35,0x2e,0xff,0x1f,0x29,0x20,0xff,0x35, 0x33,0x39,0xff,0x87,0x75,0x76,0xff,0x9f,0x88,0x8e,0xff,0x91,0x75,0x7d,0xff,0x9c, 0x81,0x80,0xff,0xa7,0x8e,0x8e,0xff,0xa2,0x82,0x7a,0xff,0xa8,0x88,0x7d,0xff,0xb5, 0x99,0x8e,0xff,0xb6,0x9b,0x90,0xff,0xb3,0x97,0x8e,0xff,0xb3,0x98,0x8d,0xff,0xb2, 0x96,0x8d,0xff,0xb0,0x94,0x8a,0xff,0xb1,0x94,0x8b,0xff,0xb3,0x98,0x8f,0xff,0xb4, 0x99,0x90,0xff,0xb4,0x98,0x8f,0xff,0xb3,0x97,0x8e,0xff,0xb4,0x98,0x8f,0xff,0xb4, 0x97,0x8d,0xff,0xc0,0xa2,0x94,0xff,0x82,0x6a,0x6e,0xff,0x3e,0x3d,0x3d,0xff,0x34, 0x39,0x35,0xff,0x36,0x3b,0x36,0xff,0x18,0x20,0x1d,0xff,0x7f,0x6a,0x67,0xff,0xbe, 0xa5,0x9d,0xff,0xb6,0x9b,0x92,0xff,0xb1,0x95,0x8b,0xff,0xb2,0x96,0x8d,0xff,0xb1, 0x95,0x8c,0xff,0xb1,0x95,0x8b,0xff,0xb0,0x94,0x8a,0xff,0xb0,0x94,0x8a,0xff,0xb1, 0x95,0x8c,0xff,0xb1,0x95,0x8b,0xff,0xb1,0x95,0x8b,0xff,0xb0,0x94,0x8a,0xff,0xb1, 0x95,0x8b,0xff,0xb1,0x94,0x8a,0xff,0xb0,0x94,0x89,0xff,0xb1,0x95,0x8b,0xff,0xb1, 0x94,0x8a,0xff,0xb0,0x94,0x8a,0xff,0xb6,0x99,0x8f,0xff,0x78,0x67,0x60,0xff,0x81, 0x6a,0x74,0xff,0x43,0x42,0x43,0xff,0x3b,0x3d,0x3b,0xff,0x3d,0x3f,0x3e,0xff,0x3b, 0x3e,0x3c,0xff,0x30,0x31,0x31,0xff,0x12,0x19,0x15,0xff,0x79,0x59,0x5d,0xff,0xb4, 0x99,0x91,0xff,0xb0,0x93,0x89,0xff,0xaf,0x92,0x88,0xff,0xae,0x90,0x86,0xff,0xaf, 0x91,0x87,0xff,0xb0,0x93,0x89,0xff,0xaf,0x91,0x87,0xff,0xaf,0x91,0x87,0xff,0xaf, 0x91,0x87,0xff,0xaf,0x92,0x88,0xff,0xae,0x90,0x86,0xff,0xa4,0x83,0x79,0xff,0xae, 0x90,0x86,0xff,0xad,0x8f,0x84,0xff,0xae,0x90,0x86,0xff,0xaf,0x91,0x86,0xff,0xae, 0x90,0x86,0xff,0xad,0x8f,0x84,0xff,0xae,0x8f,0x85,0xfe,0xae,0x90,0x86,0xfb,0xac, 0x8e,0x84,0xf4,0x42,0x37,0x33,0xe5,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0xb0,0x00, 0x00,0x00,0x9c,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0xc5,0x08, 0x07,0x08,0xdf,0x65,0x57,0x65,0xf1,0x67,0x56,0x66,0xf9,0x60,0x53,0x60,0xfd,0x2d, 0x34,0x2e,0xff,0x5e,0x52,0x5e,0xff,0x5f,0x4f,0x59,0xff,0xa7,0x87,0x7c,0xff,0x9b, 0x78,0x6f,0xff,0x99,0x75,0x6e,0xff,0x9a,0x76,0x6e,0xff,0x99,0x75,0x6e,0xff,0x96, 0x74,0x6d,0xff,0x92,0x72,0x6f,0xff,0x95,0x70,0x6b,0xff,0x94,0x6f,0x68,0xff,0x9b, 0x77,0x6c,0xff,0x9e,0x7c,0x71,0xff,0x95,0x70,0x68,0xff,0x92,0x6c,0x68,0xff,0x8d, 0x68,0x6b,0xff,0xaf,0x90,0x85,0xff,0xab,0x8c,0x82,0xff,0xaa,0x8b,0x81,0xff,0xa9, 0x8a,0x7f,0xff,0xa9,0x8a,0x7f,0xff,0xaa,0x8b,0x80,0xff,0xa2,0x82,0x7b,0xff,0x69, 0x4f,0x56,0xff,0x39,0x35,0x3d,0xff,0x6d,0x5b,0x6d,0xff,0x61,0x52,0x63,0xff,0x67, 0x57,0x68,0xff,0x98,0x7d,0x83,0xff,0xb5,0x97,0x8a,0xff,0xa8,0x89,0x7e,0xff,0xa8, 0x88,0x7e,0xff,0xa8,0x88,0x7e,0xff,0xa7,0x87,0x7d,0xff,0xa7,0x87,0x7d,0xff,0xa7, 0x87,0x7d,0xff,0xa6,0x86,0x7c,0xff,0xa8,0x88,0x7e,0xff,0xa5,0x84,0x78,0xff,0x95, 0x70,0x6a,0xff,0x95,0x71,0x70,0xff,0xa5,0x83,0x78,0xff,0xa5,0x82,0x77,0xff,0x9a, 0x76,0x70,0xff,0x8e,0x68,0x66,0xff,0x98,0x74,0x68,0xff,0x92,0x6f,0x69,0xff,0x90, 0x6f,0x6f,0xff,0x8e,0x6c,0x70,0xff,0x89,0x67,0x6a,0xff,0x6b,0x54,0x56,0xff,0x49, 0x40,0x4e,0xff,0x4f,0x4a,0x50,0xff,0x51,0x4b,0x52,0xff,0x5f,0x52,0x60,0xff,0x5c, 0x51,0x5d,0xff,0x4c,0x47,0x4d,0xff,0x4e,0x48,0x4f,0xff,0x60,0x53,0x60,0xff,0x60, 0x53,0x60,0xff,0x61,0x53,0x61,0xff,0x60,0x53,0x60,0xff,0x61,0x54,0x61,0xff,0x62, 0x54,0x62,0xff,0x62,0x55,0x62,0xff,0x61,0x54,0x61,0xff,0x61,0x54,0x61,0xff,0x63, 0x55,0x63,0xff,0x63,0x55,0x63,0xff,0x64,0x56,0x64,0xff,0x65,0x55,0x68,0xff,0x69, 0x54,0x66,0xff,0x83,0x66,0x70,0xff,0xa7,0x87,0x83,0xff,0xad,0x8d,0x81,0xff,0xa4, 0x83,0x78,0xff,0xa1,0x80,0x75,0xff,0xa2,0x82,0x76,0xff,0xa3,0x82,0x77,0xff,0xa2, 0x81,0x76,0xff,0xa2,0x81,0x76,0xff,0xa1,0x80,0x75,0xff,0xa1,0x80,0x75,0xff,0xa2, 0x81,0x76,0xff,0xa1,0x80,0x75,0xff,0xa1,0x80,0x75,0xff,0xa2,0x80,0x75,0xff,0xa1, 0x80,0x75,0xff,0xa1,0x7f,0x74,0xff,0xa1,0x7f,0x74,0xff,0xa1,0x7f,0x74,0xff,0xa1, 0x7f,0x74,0xff,0xa1,0x80,0x75,0xff,0xa1,0x80,0x75,0xff,0xa1,0x7f,0x74,0xff,0xa1, 0x7f,0x74,0xff,0xa0,0x7e,0x73,0xff,0xa5,0x83,0x74,0xff,0x8d,0x6a,0x72,0xff,0x7e, 0x66,0x63,0xfe,0x97,0x77,0x74,0xfe,0xa7,0x82,0x7a,0xfa,0x9b,0x7b,0x6f,0xf2,0x32, 0x27,0x24,0xe6,0x01,0x01,0x01,0xd0,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x90,0x00, 0x00,0x00,0x6b,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x16,0x00, 0x00,0x00,0x0b,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x04,0x00, 0x00,0x00,0x09,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x32,0x00, 0x00,0x00,0x4b,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0xa3,0x00, 0x00,0x00,0xbd,0x06,0x06,0x06,0xd4,0x4e,0x4b,0x49,0xe5,0xbb,0xac,0xa6,0xf1,0xc0, 0xa5,0x9c,0xf8,0xb1,0x91,0x87,0xfc,0xae,0x8f,0x85,0xfd,0xaf,0x93,0x89,0xfe,0xb0, 0x93,0x89,0xff,0xb0,0x93,0x89,0xff,0xb3,0x97,0x8d,0xff,0xab,0x8b,0x85,0xff,0x67, 0x51,0x52,0xff,0x3c,0x3b,0x37,0xff,0x86,0x64,0x66,0xff,0x39,0x3c,0x3e,0xff,0x35, 0x39,0x36,0xff,0x35,0x3a,0x36,0xff,0x34,0x39,0x35,0xff,0x29,0x2e,0x2b,0xff,0x54, 0x4e,0x4e,0xff,0xd0,0xb8,0xb4,0xff,0xbd,0xa6,0x9d,0xff,0xae,0x91,0x87,0xff,0xb0, 0x94,0x8a,0xff,0xb1,0x95,0x8b,0xff,0xb2,0x96,0x8d,0xff,0xb2,0x96,0x8d,0xff,0xb2, 0x96,0x8c,0xff,0xb1,0x95,0x8c,0xff,0xb2,0x96,0x8d,0xff,0xb2,0x96,0x8d,0xff,0xb3, 0x97,0x8e,0xff,0xb2,0x96,0x8d,0xff,0xb3,0x97,0x8e,0xff,0xb4,0x99,0x8f,0xff,0xb3, 0x97,0x8e,0xff,0xb3,0x97,0x8e,0xff,0xb3,0x97,0x8d,0xff,0xb7,0x99,0x91,0xff,0x74, 0x65,0x67,0xff,0x69,0x5f,0x5e,0xff,0xbf,0xa1,0x96,0xff,0xb3,0x98,0x8e,0xff,0xb4, 0x99,0x8e,0xff,0xb8,0x9c,0x92,0xff,0xaa,0x88,0x85,0xff,0x6a,0x55,0x55,0xff,0x33, 0x38,0x34,0xff,0x2e,0x35,0x30,0xff,0x32,0x37,0x32,0xff,0x31,0x37,0x32,0xff,0x30, 0x36,0x30,0xff,0x2f,0x35,0x2f,0xff,0x2f,0x35,0x2f,0xff,0x2f,0x36,0x30,0xff,0x25, 0x2c,0x26,0xff,0x1d,0x23,0x1f,0xff,0x61,0x56,0x55,0xff,0xb6,0xa0,0x9b,0xff,0x9b, 0x7c,0x7e,0xff,0x9c,0x7c,0x79,0xff,0xbb,0xa1,0x95,0xff,0xae,0x92,0x84,0xff,0x95, 0x71,0x6b,0xff,0xa6,0x87,0x80,0xff,0xb7,0x9c,0x92,0xff,0xb4,0x99,0x8f,0xff,0xb4, 0x99,0x8f,0xff,0xb5,0x9a,0x90,0xff,0xb4,0x99,0x90,0xff,0xb4,0x99,0x90,0xff,0xb4, 0x99,0x8f,0xff,0xb4,0x99,0x8f,0xff,0xb4,0x99,0x8f,0xff,0xb3,0x97,0x8e,0xff,0xb5, 0x98,0x90,0xff,0xb4,0x98,0x8f,0xff,0xb6,0x9b,0x92,0xff,0xb0,0x8b,0x81,0xff,0x55, 0x4e,0x4b,0xff,0x30,0x37,0x34,0xff,0x35,0x3a,0x36,0xff,0x35,0x3b,0x36,0xff,0x25, 0x23,0x28,0xff,0xad,0x9c,0x99,0xff,0xc5,0xac,0xa3,0xff,0xb2,0x96,0x8d,0xff,0xb3, 0x97,0x8e,0xff,0xb3,0x97,0x8e,0xff,0xb2,0x96,0x8d,0xff,0xb2,0x96,0x8d,0xff,0xb2, 0x96,0x8d,0xff,0xb2,0x96,0x8d,0xff,0xb3,0x97,0x8e,0xff,0xb2,0x96,0x8d,0xff,0xb1, 0x95,0x8b,0xff,0xb2,0x96,0x8d,0xff,0xb2,0x96,0x8d,0xff,0xb1,0x95,0x8b,0xff,0xb2, 0x96,0x8d,0xff,0xb2,0x96,0x8d,0xff,0xb1,0x95,0x8b,0xff,0xb1,0x95,0x8b,0xff,0xb2, 0x96,0x8c,0xff,0xae,0x94,0x87,0xff,0x5d,0x51,0x57,0xff,0x3b,0x3c,0x3d,0xff,0x3b, 0x3d,0x3b,0xff,0x3c,0x3e,0x3e,0xff,0x3c,0x3f,0x3d,0xff,0x2b,0x2c,0x2c,0xff,0x0d, 0x16,0x10,0xff,0x81,0x65,0x5d,0xff,0xb0,0x94,0x8c,0xff,0xb0,0x94,0x8b,0xff,0xb0, 0x94,0x8a,0xff,0xb0,0x93,0x89,0xff,0xb0,0x94,0x8a,0xff,0xb0,0x94,0x8a,0xff,0xaf, 0x92,0x88,0xff,0xaf,0x92,0x88,0xff,0xb1,0x94,0x8a,0xff,0xb0,0x94,0x8a,0xff,0xae, 0x91,0x87,0xff,0xaf,0x91,0x87,0xff,0xaf,0x91,0x87,0xff,0xaf,0x93,0x89,0xff,0xaf, 0x92,0x88,0xff,0xaf,0x92,0x88,0xff,0xae,0x90,0x86,0xff,0xae,0x90,0x86,0xff,0xae, 0x90,0x86,0xfe,0xae,0x90,0x86,0xfb,0xac,0x8e,0x84,0xf4,0x4d,0x40,0x3c,0xe4,0x00, 0x00,0x00,0xc8,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x8c,0x00, 0x00,0x00,0x9c,0x00,0x00,0x00,0xbb,0x06,0x06,0x06,0xd8,0x5b,0x4e,0x5b,0xec,0x66, 0x56,0x65,0xf7,0x40,0x40,0x40,0xfc,0x14,0x20,0x16,0xfe,0x76,0x5f,0x75,0xff,0x71, 0x5e,0x6c,0xff,0xb5,0x9d,0x93,0xff,0xaf,0x92,0x87,0xff,0xaa,0x8b,0x7f,0xff,0xac, 0x8d,0x81,0xff,0xab,0x8b,0x80,0xff,0xaa,0x8b,0x80,0xff,0xad,0x8c,0x80,0xff,0xa9, 0x88,0x7d,0xff,0x9a,0x76,0x6c,0xff,0x93,0x6e,0x68,0xff,0x8e,0x69,0x68,0xff,0x90, 0x6a,0x68,0xff,0x9d,0x7a,0x6e,0xff,0x97,0x71,0x69,0xff,0xa3,0x82,0x77,0xff,0xac, 0x8d,0x83,0xff,0xab,0x8c,0x82,0xff,0xaa,0x8b,0x81,0xff,0xab,0x8c,0x81,0xff,0xaa, 0x8c,0x82,0xff,0xad,0x8e,0x82,0xff,0x88,0x6d,0x67,0xff,0x32,0x2e,0x37,0xff,0x67, 0x56,0x66,0xff,0x6a,0x58,0x6a,0xff,0x5e,0x50,0x5f,0xff,0x59,0x4e,0x5a,0xff,0x93, 0x7a,0x82,0xff,0xb7,0x9a,0x8e,0xff,0xab,0x8b,0x80,0xff,0xa8,0x88,0x7d,0xff,0xa9, 0x89,0x7e,0xff,0xa9,0x89,0x7f,0xff,0xa9,0x89,0x7f,0xff,0xaa,0x89,0x7e,0xff,0x9d, 0x7e,0x7b,0xff,0x85,0x65,0x72,0xff,0x8f,0x6c,0x6d,0xff,0x9f,0x7d,0x73,0xff,0x9c, 0x78,0x70,0xff,0x8a,0x6a,0x6e,0xff,0x71,0x5d,0x70,0xff,0x7d,0x62,0x67,0xff,0xa2, 0x7e,0x71,0xff,0xa5,0x84,0x79,0xff,0xa6,0x84,0x77,0xff,0xa4,0x82,0x79,0xff,0xa6, 0x83,0x7b,0xff,0xa3,0x80,0x75,0xff,0x7d,0x64,0x67,0xff,0x53,0x48,0x56,0xff,0x4f, 0x47,0x51,0xff,0x5d,0x51,0x5e,0xff,0x5e,0x52,0x5f,0xff,0x52,0x4b,0x53,0xff,0x4e, 0x49,0x4f,0xff,0x4c,0x47,0x4c,0xff,0x4f,0x49,0x4f,0xff,0x62,0x55,0x62,0xff,0x63, 0x54,0x63,0xff,0x63,0x54,0x63,0xff,0x62,0x54,0x62,0xff,0x62,0x54,0x62,0xff,0x63, 0x54,0x63,0xff,0x65,0x56,0x65,0xff,0x64,0x56,0x64,0xff,0x63,0x55,0x63,0xff,0x65, 0x56,0x65,0xff,0x68,0x56,0x67,0xff,0x66,0x55,0x67,0xff,0x65,0x53,0x66,0xff,0x74, 0x5e,0x71,0xff,0x9a,0x7d,0x7d,0xff,0xab,0x8b,0x7f,0xff,0xa1,0x7f,0x74,0xff,0x91, 0x6e,0x6f,0xff,0x8c,0x69,0x70,0xff,0x8d,0x6a,0x70,0xff,0x8b,0x67,0x6c,0xff,0x9c, 0x79,0x72,0xff,0xa4,0x83,0x77,0xff,0xa2,0x81,0x76,0xff,0xa1,0x80,0x75,0xff,0xa2, 0x81,0x76,0xff,0xa2,0x81,0x76,0xff,0xa2,0x81,0x76,0xff,0xa2,0x81,0x76,0xff,0xa2, 0x81,0x76,0xff,0xa3,0x82,0x77,0xff,0xa2,0x81,0x76,0xff,0xa1,0x80,0x75,0xff,0xa1, 0x80,0x75,0xff,0xa1,0x80,0x75,0xff,0xa2,0x81,0x76,0xff,0xa1,0x80,0x75,0xff,0xa4, 0x82,0x75,0xff,0x8c,0x68,0x6a,0xff,0x9f,0x7b,0x73,0xff,0xa3,0x81,0x73,0xfe,0xa0, 0x7e,0x73,0xfd,0xa9,0x85,0x79,0xfa,0x93,0x74,0x6a,0xf2,0x22,0x1b,0x18,0xe3,0x00, 0x00,0x00,0xce,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x65,0x00, 0x00,0x00,0x40,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x09,0x00, 0x00,0x00,0x04,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00, 0x00,0x00,0x06,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x22,0x00, 0x00,0x00,0x37,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x92,0x00, 0x00,0x00,0xae,0x00,0x00,0x00,0xc8,0x12,0x13,0x13,0xdb,0x74,0x6f,0x6d,0xe9,0xd1, 0xc0,0xba,0xf3,0xc0,0xa5,0x9c,0xf9,0xae,0x90,0x85,0xfd,0xb0,0x93,0x89,0xfd,0xb1, 0x94,0x8a,0xfe,0xb0,0x94,0x8a,0xff,0xb2,0x96,0x8b,0xff,0xb4,0x98,0x8d,0xff,0xa6, 0x89,0x88,0xff,0x73,0x5c,0x67,0xff,0x31,0x36,0x30,0xff,0x3a,0x3a,0x32,0xff,0x8c, 0x68,0x70,0xff,0x60,0x53,0x63,0xff,0x36,0x3a,0x38,0xff,0x37,0x3c,0x38,0xff,0x28, 0x2e,0x2c,0xff,0x42,0x3b,0x37,0xff,0xb8,0x9b,0x90,0xff,0xca,0xb4,0xab,0xff,0xb2, 0x95,0x8c,0xff,0xb2,0x95,0x8c,0xff,0xb2,0x96,0x8d,0xff,0xb3,0x97,0x8e,0xff,0xb3, 0x97,0x8e,0xff,0xb2,0x96,0x8d,0xff,0xb2,0x96,0x8d,0xff,0xb2,0x96,0x8d,0xff,0xb2, 0x96,0x8d,0xff,0xb3,0x97,0x8e,0xff,0xb3,0x97,0x8e,0xff,0xb3,0x98,0x8e,0xff,0xb5, 0x9a,0x90,0xff,0xb4,0x99,0x90,0xff,0xb3,0x97,0x8e,0xff,0xb3,0x97,0x8e,0xff,0xb4, 0x98,0x8f,0xff,0xbd,0xa1,0x94,0xff,0x91,0x7b,0x7e,0xff,0x7a,0x64,0x6b,0xff,0xb3, 0x94,0x88,0xff,0xb8,0x9e,0x94,0xff,0xb9,0x9d,0x92,0xff,0x9c,0x81,0x86,0xff,0x59, 0x4e,0x57,0xff,0x30,0x35,0x31,0xff,0x30,0x37,0x33,0xff,0x33,0x39,0x34,0xff,0x33, 0x38,0x33,0xff,0x33,0x38,0x33,0xff,0x33,0x38,0x33,0xff,0x33,0x38,0x33,0xff,0x33, 0x39,0x34,0xff,0x2b,0x32,0x2c,0xff,0x1a,0x23,0x1f,0xff,0x50,0x41,0x3e,0xff,0xa7, 0x8c,0x83,0xff,0xc9,0xb3,0xaa,0xff,0xac,0x8e,0x85,0xff,0x9e,0x78,0x6c,0xff,0x91, 0x74,0x7c,0xff,0x8e,0x6d,0x6f,0xff,0xa7,0x87,0x7d,0xff,0xb6,0x9c,0x93,0xff,0xb8, 0x9f,0x95,0xff,0xb6,0x9b,0x92,0xff,0xb5,0x9a,0x91,0xff,0xb6,0x9b,0x92,0xff,0xb7, 0x9c,0x93,0xff,0xb6,0x9c,0x93,0xff,0xb6,0x9b,0x92,0xff,0xb5,0x9a,0x91,0xff,0xb5, 0x9a,0x91,0xff,0xb4,0x99,0x8f,0xff,0xb5,0x9a,0x91,0xff,0xb6,0x9b,0x92,0xff,0xbd, 0x9f,0x93,0xff,0x84,0x6c,0x73,0xff,0x3f,0x3e,0x40,0xff,0x33,0x38,0x34,0xff,0x36, 0x3a,0x37,0xff,0x25,0x2d,0x2b,0xff,0x68,0x56,0x50,0xff,0xc2,0xad,0xa6,0xff,0xc1, 0xa9,0xa1,0xff,0xb5,0x9a,0x91,0xff,0xb3,0x98,0x8e,0xff,0xb4,0x99,0x8e,0xff,0xb5, 0x9a,0x91,0xff,0xb4,0x99,0x8f,0xff,0xb5,0x9a,0x91,0xff,0xb5,0x9a,0x91,0xff,0xb2, 0x96,0x8e,0xff,0xb4,0x98,0x8e,0xff,0xb4,0x99,0x8f,0xff,0xb4,0x99,0x8f,0xff,0xb4, 0x99,0x8f,0xff,0xb2,0x96,0x8d,0xff,0xb4,0x99,0x8f,0xff,0xb3,0x97,0x8e,0xff,0xb2, 0x96,0x8d,0xff,0xb3,0x97,0x8e,0xff,0xb3,0x97,0x8e,0xff,0xc0,0xa2,0x98,0xff,0x4d, 0x4a,0x47,0xff,0x13,0x1e,0x15,0xff,0x26,0x30,0x26,0xff,0x3a,0x3d,0x3b,0xff,0x42, 0x42,0x42,0xff,0x28,0x27,0x28,0xff,0x12,0x1a,0x14,0xff,0x8d,0x78,0x70,0xff,0xb2, 0x96,0x8d,0xff,0xb2,0x96,0x8d,0xff,0xb2,0x96,0x8c,0xff,0xb0,0x94,0x8a,0xff,0xaf, 0x93,0x89,0xff,0xaf,0x92,0x88,0xff,0xb1,0x95,0x8b,0xff,0xb2,0x96,0x8c,0xff,0xb2, 0x96,0x8c,0xff,0xae,0x92,0x88,0xff,0x9e,0x7c,0x72,0xff,0xb3,0x96,0x8c,0xff,0xaf, 0x92,0x88,0xff,0xb0,0x94,0x8a,0xff,0xb0,0x94,0x8a,0xff,0xaf,0x92,0x88,0xff,0xb0, 0x93,0x89,0xff,0xaf,0x91,0x87,0xff,0xaf,0x91,0x87,0xfe,0xaf,0x91,0x87,0xfb,0xad, 0x90,0x86,0xf2,0x55,0x46,0x41,0xe3,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0xa4,0x00, 0x00,0x00,0x8a,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0xb2,0x05, 0x05,0x05,0xd2,0x4f,0x43,0x4f,0xe9,0x65,0x56,0x66,0xf6,0x30,0x36,0x31,0xfd,0x57, 0x4c,0x58,0xfe,0x72,0x5d,0x70,0xff,0x66,0x58,0x64,0xff,0xb1,0x9b,0x92,0xff,0xb9, 0x9f,0x96,0xff,0xad,0x8f,0x84,0xff,0xae,0x90,0x85,0xff,0xad,0x8e,0x84,0xff,0xae, 0x90,0x85,0xff,0xaf,0x91,0x87,0xff,0xad,0x8f,0x84,0xff,0xab,0x8b,0x81,0xff,0xa7, 0x87,0x7d,0xff,0x96,0x72,0x69,0xff,0x99,0x74,0x6c,0xff,0xa0,0x7d,0x71,0xff,0x9f, 0x7d,0x72,0xff,0xa1,0x80,0x75,0xff,0xa1,0x80,0x75,0xff,0xaa,0x8a,0x80,0xff,0xac, 0x8e,0x84,0xff,0xac,0x8d,0x83,0xff,0xac,0x8d,0x83,0xff,0xae,0x8f,0x84,0xff,0x9a, 0x7e,0x79,0xff,0x49,0x3b,0x48,0xff,0x46,0x3f,0x48,0xff,0x69,0x59,0x68,0xff,0x63, 0x54,0x62,0xff,0x50,0x49,0x51,0xff,0x5a,0x4e,0x5b,0xff,0x8b,0x74,0x7d,0xff,0xb6, 0x98,0x8d,0xff,0xad,0x8d,0x82,0xff,0xa5,0x86,0x7d,0xff,0xa0,0x83,0x78,0xff,0x97, 0x77,0x6b,0xff,0x86,0x68,0x68,0xff,0x69,0x58,0x6b,0xff,0x6d,0x57,0x61,0xff,0x99, 0x71,0x6c,0xff,0x90,0x71,0x71,0xff,0x79,0x5f,0x73,0xff,0x77,0x5e,0x71,0xff,0x7c, 0x62,0x6f,0xff,0x98,0x75,0x6f,0xff,0xa9,0x89,0x7e,0xff,0xa7,0x87,0x7d,0xff,0xa7, 0x87,0x7d,0xff,0xa7,0x86,0x7c,0xff,0xa6,0x87,0x7c,0xff,0xa9,0x87,0x7c,0xff,0xaa, 0x88,0x7c,0xff,0x88,0x6d,0x70,0xff,0x5a,0x4b,0x5a,0xff,0x56,0x4b,0x56,0xff,0x5c, 0x51,0x5e,0xff,0x64,0x55,0x64,0xff,0x6b,0x59,0x6a,0xff,0x5a,0x4f,0x5a,0xff,0x36, 0x3a,0x37,0xff,0x40,0x3f,0x41,0xff,0x5d,0x51,0x5e,0xff,0x5e,0x52,0x5e,0xff,0x61, 0x53,0x61,0xff,0x63,0x55,0x63,0xff,0x64,0x55,0x64,0xff,0x65,0x56,0x65,0xff,0x65, 0x56,0x65,0xff,0x65,0x56,0x65,0xff,0x65,0x56,0x65,0xff,0x67,0x57,0x66,0xff,0x68, 0x57,0x66,0xff,0x66,0x56,0x67,0xff,0x6b,0x58,0x6c,0xff,0x62,0x54,0x60,0xff,0x73, 0x5e,0x6c,0xff,0x83,0x66,0x78,0xff,0x93,0x72,0x73,0xff,0xa0,0x7f,0x75,0xff,0xa0, 0x7e,0x77,0xff,0x9e,0x7d,0x75,0xff,0xa2,0x81,0x76,0xff,0xa2,0x81,0x76,0xff,0xa2, 0x81,0x76,0xff,0xa3,0x82,0x77,0xff,0xa3,0x82,0x77,0xff,0xa3,0x82,0x77,0xff,0xa3, 0x82,0x77,0xff,0xa3,0x82,0x77,0xff,0xa3,0x82,0x77,0xff,0xa3,0x82,0x77,0xff,0xa2, 0x81,0x76,0xff,0xa2,0x81,0x76,0xff,0xa1,0x80,0x75,0xff,0xa1,0x80,0x75,0xff,0xa1, 0x80,0x75,0xff,0xa1,0x81,0x76,0xff,0xa1,0x7f,0x72,0xff,0x8d,0x68,0x68,0xff,0x9b, 0x78,0x71,0xff,0xa2,0x80,0x74,0xff,0xa1,0x7f,0x74,0xfe,0xa1,0x7f,0x74,0xfd,0xa9, 0x86,0x79,0xf9,0x87,0x6a,0x60,0xf1,0x1b,0x15,0x13,0xe2,0x00,0x00,0x00,0xca,0x00, 0x00,0x00,0xa9,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0x3b,0x00, 0x00,0x00,0x21,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x02,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x03,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x18,0x00, 0x00,0x00,0x28,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x79,0x00, 0x00,0x00,0x9a,0x00,0x00,0x00,0xb9,0x01,0x01,0x01,0xd0,0x2d,0x2b,0x2b,0xe2,0xa6, 0x9d,0x9b,0xee,0xd1,0xbc,0xb4,0xf6,0xb6,0x9a,0x91,0xfb,0xb0,0x94,0x8a,0xfd,0xb0, 0x94,0x8a,0xfe,0xb1,0x94,0x8a,0xff,0xaf,0x92,0x88,0xff,0xb3,0x96,0x8c,0xff,0xb5, 0x97,0x8c,0xff,0x99,0x7f,0x80,0xff,0x5c,0x50,0x5e,0xff,0x36,0x3a,0x38,0xff,0x38, 0x3c,0x39,0xff,0x38,0x3c,0x39,0xff,0x40,0x3f,0x3f,0xff,0x64,0x55,0x63,0xff,0x49, 0x45,0x49,0xff,0x2d,0x32,0x2f,0xff,0x32,0x2f,0x34,0xff,0x8c,0x78,0x81,0xff,0xc8, 0xb4,0xae,0xff,0xb6,0x9a,0x90,0xff,0xb2,0x96,0x8d,0xff,0xb3,0x98,0x8e,0xff,0xb4, 0x99,0x8f,0xff,0xb3,0x97,0x8e,0xff,0xb3,0x97,0x8e,0xff,0xb3,0x97,0x8e,0xff,0xb4, 0x99,0x90,0xff,0xb6,0x9b,0x91,0xff,0xb4,0x99,0x8f,0xff,0xb5,0x9a,0x91,0xff,0xb4, 0x99,0x90,0xff,0xb3,0x97,0x8e,0xff,0xb5,0x9a,0x91,0xff,0xb5,0x9a,0x91,0xff,0xb4, 0x99,0x8f,0xff,0xb4,0x99,0x90,0xff,0xb5,0x9a,0x92,0xff,0xbd,0xa1,0x96,0xff,0x8c, 0x79,0x7d,0xff,0x75,0x61,0x69,0xff,0xb9,0x98,0x8b,0xff,0xb6,0x9a,0x90,0xff,0x89, 0x72,0x76,0xff,0x4a,0x44,0x4d,0xff,0x31,0x37,0x34,0xff,0x34,0x39,0x35,0xff,0x34, 0x39,0x35,0xff,0x34,0x39,0x35,0xff,0x34,0x39,0x35,0xff,0x34,0x39,0x34,0xff,0x33, 0x38,0x33,0xff,0x34,0x39,0x34,0xff,0x31,0x37,0x31,0xff,0x1c,0x24,0x1f,0xff,0x4e, 0x47,0x4c,0xff,0x79,0x61,0x76,0xff,0x7e,0x62,0x65,0xff,0xb1,0x97,0x8f,0xff,0xac, 0x8d,0x86,0xff,0xa7,0x89,0x7f,0xff,0xb7,0x9d,0x95,0xff,0xb6,0x9b,0x93,0xff,0xb8, 0x9d,0x94,0xff,0xb8,0x9e,0x95,0xff,0xb7,0x9d,0x94,0xff,0xb7,0x9d,0x94,0xff,0xb8, 0x9e,0x95,0xff,0xb7,0x9d,0x94,0xff,0xb8,0x9e,0x95,0xff,0xb8,0x9e,0x95,0xff,0xb8, 0x9e,0x95,0xff,0xb5,0x9b,0x92,0xff,0xb6,0x9c,0x93,0xff,0xb7,0x9d,0x94,0xff,0xb6, 0x9c,0x93,0xff,0xb8,0x9e,0x94,0xff,0xb3,0x8f,0x89,0xff,0x57,0x4f,0x4d,0xff,0x32, 0x37,0x36,0xff,0x36,0x3a,0x37,0xff,0x35,0x3a,0x37,0xff,0x23,0x22,0x23,0xff,0xab, 0x9b,0x97,0xff,0xce,0xb8,0xb1,0xff,0xb9,0xa0,0x98,0xff,0xb6,0x9b,0x92,0xff,0xb6, 0x9b,0x92,0xff,0xb6,0x9b,0x92,0xff,0xb6,0x9b,0x92,0xff,0xb6,0x9b,0x92,0xff,0xb5, 0x9a,0x91,0xff,0xb6,0x9b,0x92,0xff,0xb5,0x9a,0x91,0xff,0xb6,0x9b,0x92,0xff,0xb6, 0x9b,0x92,0xff,0xb4,0x9a,0x90,0xff,0xb5,0x9a,0x91,0xff,0xb5,0x9a,0x91,0xff,0xb5, 0x9a,0x91,0xff,0xb4,0x99,0x8f,0xff,0xb3,0x97,0x8e,0xff,0xb4,0x99,0x8f,0xff,0xb5, 0x9a,0x91,0xff,0xbe,0xa1,0x96,0xff,0x4c,0x4a,0x48,0xff,0x1e,0x28,0x1e,0xff,0x16, 0x23,0x17,0xff,0x3a,0x3c,0x3b,0xff,0x42,0x43,0x43,0xff,0x26,0x26,0x26,0xff,0x1b, 0x21,0x1d,0xff,0x9f,0x8b,0x84,0xff,0xb4,0x99,0x8f,0xff,0xb4,0x99,0x8f,0xff,0xae, 0x91,0x87,0xff,0xb0,0x93,0x89,0xff,0xab,0x8d,0x83,0xff,0xaf,0x92,0x88,0xff,0xb0, 0x93,0x8a,0xff,0xad,0x90,0x86,0xff,0xac,0x8f,0x84,0xff,0xa0,0x7e,0x74,0xff,0xaf, 0x94,0x8a,0xff,0xbf,0xa7,0x9f,0xff,0xb1,0x95,0x8c,0xff,0xb0,0x94,0x8a,0xff,0xb1, 0x95,0x8b,0xff,0xb1,0x95,0x8b,0xff,0xb0,0x94,0x8a,0xff,0xb0,0x94,0x8a,0xff,0xb0, 0x94,0x8a,0xfe,0xaf,0x92,0x88,0xfb,0xad,0x90,0x87,0xf2,0x5a,0x4b,0x46,0xe2,0x00, 0x00,0x00,0xc5,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x7d,0x00, 0x00,0x00,0x8b,0x00,0x00,0x00,0xac,0x04,0x04,0x04,0xce,0x44,0x39,0x43,0xe8,0x65, 0x56,0x65,0xf5,0x25,0x2f,0x26,0xfc,0x6f,0x5c,0x6e,0xfe,0x64,0x55,0x64,0xff,0x63, 0x56,0x61,0xff,0xa5,0x8d,0x85,0xff,0xc0,0xa7,0x9f,0xff,0xae,0x8f,0x85,0xff,0xae, 0x90,0x86,0xff,0xae,0x90,0x86,0xff,0xad,0x8f,0x85,0xff,0xae,0x90,0x86,0xff,0xae, 0x90,0x86,0xff,0xad,0x90,0x85,0xff,0xae,0x90,0x85,0xff,0xae,0x8f,0x85,0xff,0xae, 0x8f,0x85,0xff,0xad,0x8f,0x84,0xff,0xad,0x8e,0x83,0xff,0xad,0x8f,0x84,0xff,0xaa, 0x8c,0x81,0xff,0xa5,0x84,0x7b,0xff,0xac,0x8e,0x83,0xff,0xad,0x8f,0x84,0xff,0xac, 0x8d,0x83,0xff,0xad,0x8f,0x84,0xff,0xab,0x8b,0x7f,0xff,0x7d,0x61,0x5c,0xff,0x30, 0x2e,0x38,0xff,0x59,0x50,0x5a,0xff,0x5c,0x51,0x5c,0xff,0x5f,0x53,0x5f,0xff,0x54, 0x4c,0x55,0xff,0x55,0x4b,0x56,0xff,0x86,0x70,0x7a,0xff,0xac,0x8f,0x8f,0xff,0x6b, 0x55,0x61,0xff,0x34,0x39,0x34,0xff,0x3b,0x3d,0x39,0xff,0x54,0x4b,0x52,0xff,0x75, 0x5e,0x70,0xff,0x88,0x67,0x75,0xff,0x88,0x66,0x73,0xff,0x88,0x66,0x70,0xff,0x91, 0x6e,0x6b,0xff,0xa1,0x80,0x76,0xff,0xa7,0x87,0x7e,0xff,0xa8,0x87,0x7d,0xff,0xa9, 0x89,0x7f,0xff,0xa7,0x87,0x7d,0xff,0xa6,0x85,0x7b,0xff,0xa6,0x86,0x7c,0xff,0xa6, 0x86,0x7c,0xff,0xa6,0x85,0x7b,0xff,0xa7,0x86,0x7c,0xff,0xa9,0x88,0x7f,0xff,0x9e, 0x7d,0x73,0xff,0x6f,0x57,0x56,0xff,0x4f,0x46,0x52,0xff,0x5e,0x51,0x60,0xff,0x62, 0x55,0x62,0xff,0x6b,0x59,0x6a,0xff,0x6b,0x59,0x69,0xff,0x50,0x49,0x50,0xff,0x3e, 0x3f,0x3e,0xff,0x4b,0x46,0x4b,0xff,0x5e,0x52,0x5e,0xff,0x5e,0x53,0x60,0xff,0x61, 0x54,0x62,0xff,0x67,0x57,0x67,0xff,0x67,0x57,0x67,0xff,0x66,0x56,0x66,0xff,0x67, 0x56,0x67,0xff,0x66,0x56,0x66,0xff,0x67,0x56,0x67,0xff,0x6d,0x59,0x6c,0xff,0x64, 0x54,0x64,0xff,0x42,0x41,0x47,0xff,0x5a,0x51,0x5a,0xff,0x80,0x62,0x6a,0xff,0x9f, 0x7d,0x7a,0xff,0xb0,0x92,0x86,0xff,0xaa,0x8a,0x7e,0xff,0xa4,0x83,0x78,0xff,0xa6, 0x85,0x7b,0xff,0xa0,0x7e,0x74,0xff,0x9d,0x7b,0x72,0xff,0xa0,0x7f,0x75,0xff,0xa5, 0x84,0x78,0xff,0xa5,0x84,0x79,0xff,0xa4,0x83,0x78,0xff,0xa4,0x83,0x78,0xff,0xa5, 0x84,0x7a,0xff,0xa4,0x83,0x78,0xff,0xa3,0x82,0x77,0xff,0xa3,0x82,0x77,0xff,0xa3, 0x82,0x77,0xff,0xa3,0x82,0x77,0xff,0xa2,0x81,0x76,0xff,0xa3,0x83,0x77,0xff,0xa0, 0x7e,0x73,0xff,0x8d,0x6a,0x6c,0xff,0x9d,0x7b,0x74,0xff,0xa2,0x81,0x76,0xff,0xa1, 0x7f,0x74,0xff,0xa1,0x7f,0x74,0xfe,0xa2,0x80,0x75,0xfc,0xa9,0x85,0x7a,0xf8,0x79, 0x5f,0x57,0xef,0x14,0x11,0x0e,0xde,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xa3,0x00, 0x00,0x00,0x7c,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x1f,0x00, 0x00,0x00,0x0f,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x12,0x00, 0x00,0x00,0x1e,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x62,0x00, 0x00,0x00,0x80,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0xbd,0x06,0x06,0x06,0xd5,0x4d, 0x4a,0x48,0xe6,0xbb,0xad,0xa8,0xf1,0xc9,0xb2,0xa9,0xf8,0xb2,0x96,0x8c,0xfc,0xaf, 0x92,0x88,0xfd,0xb0,0x94,0x8a,0xfe,0xb1,0x95,0x8b,0xff,0xb0,0x94,0x8b,0xff,0xb4, 0x98,0x8e,0xff,0xb3,0x94,0x89,0xff,0x8a,0x74,0x72,0xff,0x4c,0x45,0x4f,0xff,0x39, 0x3b,0x3a,0xff,0x39,0x3d,0x3b,0xff,0x38,0x3b,0x38,0xff,0x3a,0x3c,0x3c,0xff,0x33, 0x38,0x34,0xff,0x24,0x2f,0x24,0xff,0x28,0x30,0x28,0xff,0x31,0x31,0x2f,0xff,0x74, 0x65,0x60,0xff,0xb6,0x9e,0x9c,0xff,0x81,0x6a,0x72,0xff,0xba,0x9e,0x93,0xff,0xb3, 0x97,0x8e,0xff,0xb5,0x9a,0x8f,0xff,0xb4,0x99,0x90,0xff,0xb3,0x98,0x8f,0xff,0xb4, 0x99,0x90,0xff,0xb5,0x9a,0x91,0xff,0xb5,0x9a,0x91,0xff,0xb5,0x9a,0x91,0xff,0xb6, 0x9b,0x91,0xff,0xb5,0x9a,0x90,0xff,0xb4,0x99,0x90,0xff,0xb5,0x9a,0x90,0xff,0xb6, 0x9b,0x92,0xff,0xb6,0x9b,0x92,0xff,0xb6,0x9b,0x92,0xff,0xb6,0x9b,0x92,0xff,0xb8, 0x9e,0x95,0xff,0xbe,0xa0,0x95,0xff,0x92,0x77,0x77,0xff,0x89,0x72,0x75,0xff,0xb1, 0x95,0x89,0xff,0x74,0x63,0x65,0xff,0x40,0x3f,0x44,0xff,0x36,0x3a,0x37,0xff,0x39, 0x3c,0x3a,0xff,0x37,0x3b,0x38,0xff,0x34,0x39,0x35,0xff,0x34,0x39,0x35,0xff,0x34, 0x39,0x35,0xff,0x34,0x39,0x35,0xff,0x34,0x39,0x34,0xff,0x33,0x38,0x33,0xff,0x21, 0x28,0x23,0xff,0x26,0x26,0x22,0xff,0x94,0x84,0x7d,0xff,0xb9,0x9b,0x9d,0xff,0x65, 0x55,0x62,0xff,0x68,0x4e,0x57,0xff,0xaa,0x89,0x85,0xff,0xbe,0xa5,0x9b,0xff,0xb9, 0x9f,0x96,0xff,0xba,0xa1,0x98,0xff,0xb9,0x9f,0x96,0xff,0xb8,0x9e,0x95,0xff,0xb9, 0x9e,0x95,0xff,0xb9,0xa0,0x97,0xff,0xb9,0xa0,0x97,0xff,0xb9,0xa0,0x97,0xff,0xb8, 0x9f,0x96,0xff,0xb9,0x9e,0x95,0xff,0xb9,0xa0,0x97,0xff,0xb8,0x9f,0x96,0xff,0xb8, 0x9e,0x95,0xff,0xb8,0x9e,0x95,0xff,0xb8,0x9e,0x95,0xff,0xc2,0xa7,0x99,0xff,0x85, 0x6f,0x78,0xff,0x41,0x3f,0x42,0xff,0x35,0x3a,0x36,0xff,0x39,0x3d,0x3a,0xff,0x24, 0x2d,0x28,0xff,0x5f,0x49,0x49,0xff,0xc2,0xad,0xa8,0xff,0xc5,0xb0,0xa8,0xff,0xb7, 0x9e,0x95,0xff,0xb7,0x9e,0x94,0xff,0xb8,0x9e,0x95,0xff,0xb8,0x9e,0x95,0xff,0xb7, 0x9d,0x94,0xff,0xb6,0x9c,0x93,0xff,0xb6,0x9b,0x92,0xff,0xb7,0x9d,0x94,0xff,0xb6, 0x9b,0x92,0xff,0xb6,0x9c,0x93,0xff,0xb6,0x9b,0x92,0xff,0xb7,0x9d,0x94,0xff,0xb6, 0x9b,0x92,0xff,0xb6,0x9c,0x93,0xff,0xb6,0x9c,0x93,0xff,0xb6,0x9b,0x92,0xff,0xb5, 0x9b,0x92,0xff,0xb6,0x9b,0x92,0xff,0xb6,0x9c,0x93,0xff,0xb4,0x91,0x85,0xff,0x4d, 0x49,0x48,0xff,0x35,0x39,0x36,0xff,0x21,0x2a,0x22,0xff,0x3b,0x3d,0x3c,0xff,0x3e, 0x3f,0x3f,0xff,0x23,0x23,0x23,0xff,0x34,0x34,0x37,0xff,0xb2,0x9d,0x96,0xff,0xb7, 0x9b,0x92,0xff,0xad,0x8f,0x86,0xff,0xa3,0x82,0x78,0xff,0xb2,0x96,0x8d,0xff,0xb3, 0x97,0x8e,0xff,0xb2,0x97,0x8d,0xff,0xab,0x8c,0x82,0xff,0x9a,0x77,0x6d,0xff,0xa7, 0x88,0x7d,0xff,0xb2,0x96,0x8c,0xff,0xb8,0x9f,0x96,0xff,0xb2,0x96,0x8d,0xff,0xb1, 0x95,0x8b,0xff,0xb2,0x96,0x8d,0xff,0xb0,0x94,0x8b,0xff,0xb1,0x95,0x8b,0xff,0xb1, 0x95,0x8b,0xff,0xb1,0x95,0x8b,0xff,0xb0,0x94,0x8b,0xfe,0xb0,0x93,0x89,0xfb,0xaf, 0x94,0x8a,0xf2,0x64,0x54,0x4e,0xe2,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xa1,0x00, 0x00,0x00,0x83,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0xa7,0x03, 0x03,0x03,0xcb,0x35,0x2c,0x35,0xe6,0x5e,0x52,0x5f,0xf5,0x16,0x22,0x18,0xfc,0x63, 0x54,0x63,0xfe,0x5d,0x51,0x5d,0xff,0x61,0x53,0x5d,0xff,0x8e,0x73,0x69,0xff,0xc4, 0xad,0xa5,0xff,0xad,0x91,0x87,0xff,0xaf,0x91,0x87,0xff,0xaf,0x91,0x87,0xff,0xaf, 0x92,0x88,0xff,0xae,0x90,0x86,0xff,0xae,0x90,0x86,0xff,0xae,0x90,0x86,0xff,0xae, 0x90,0x86,0xff,0xaf,0x91,0x87,0xff,0xaf,0x91,0x87,0xff,0xae,0x91,0x87,0xff,0xae, 0x90,0x85,0xff,0xae,0x90,0x86,0xff,0xad,0x8e,0x84,0xff,0xa7,0x87,0x7d,0xff,0xac, 0x8e,0x84,0xff,0xaf,0x91,0x87,0xff,0xad,0x8f,0x84,0xff,0xad,0x8f,0x84,0xff,0xb0, 0x92,0x86,0xff,0x92,0x77,0x72,0xff,0x3b,0x30,0x3c,0xff,0x4c,0x44,0x4d,0xff,0x63, 0x55,0x63,0xff,0x67,0x57,0x66,0xff,0x61,0x54,0x62,0xff,0x53,0x4b,0x53,0xff,0x57, 0x4e,0x57,0xff,0x64,0x55,0x65,0xff,0x46,0x43,0x47,0xff,0x3c,0x3c,0x3c,0xff,0x6f, 0x5a,0x68,0xff,0x8a,0x68,0x79,0xff,0x86,0x66,0x76,0xff,0x86,0x65,0x75,0xff,0x8d, 0x6b,0x6e,0xff,0xa1,0x7d,0x70,0xff,0xa9,0x89,0x7f,0xff,0xa9,0x89,0x7e,0xff,0xa9, 0x8a,0x7f,0xff,0xaa,0x8c,0x81,0xff,0xaa,0x8a,0x80,0xff,0xa8,0x89,0x7f,0xff,0xa8, 0x89,0x7f,0xff,0xa7,0x87,0x7d,0xff,0xa6,0x86,0x7c,0xff,0xa7,0x87,0x7d,0xff,0xa6, 0x86,0x7d,0xff,0xa6,0x86,0x7c,0xff,0xa9,0x89,0x7e,0xff,0x9d,0x7d,0x72,0xff,0x77, 0x5e,0x5d,0xff,0x5a,0x4b,0x58,0xff,0x5c,0x50,0x5e,0xff,0x63,0x55,0x63,0xff,0x62, 0x54,0x62,0xff,0x66,0x55,0x62,0xff,0x6a,0x58,0x68,0xff,0x73,0x5d,0x72,0xff,0x6c, 0x59,0x6a,0xff,0x58,0x4e,0x58,0xff,0x60,0x52,0x5e,0xff,0x5f,0x52,0x5f,0xff,0x57, 0x4e,0x57,0xff,0x5e,0x51,0x5e,0xff,0x67,0x56,0x67,0xff,0x65,0x56,0x66,0xff,0x5c, 0x51,0x5f,0xff,0x58,0x4e,0x5b,0xff,0x3b,0x3b,0x3d,0xff,0x51,0x4a,0x4c,0xff,0x90, 0x73,0x70,0xff,0x7d,0x66,0x6d,0xff,0x70,0x59,0x6c,0xff,0x98,0x7b,0x80,0xff,0xaf, 0x91,0x86,0xff,0xab,0x8b,0x80,0xff,0xa6,0x86,0x7c,0xff,0xa8,0x87,0x7c,0xff,0x96, 0x72,0x71,0xff,0x96,0x71,0x6b,0xff,0x9c,0x7a,0x72,0xff,0xa1,0x80,0x77,0xff,0xa4, 0x83,0x78,0xff,0xa5,0x84,0x79,0xff,0xa5,0x84,0x7a,0xff,0xa5,0x84,0x7a,0xff,0xa4, 0x83,0x79,0xff,0xa3,0x82,0x78,0xff,0xa2,0x81,0x76,0xff,0xa2,0x81,0x76,0xff,0xa8, 0x86,0x79,0xff,0xa0,0x7d,0x75,0xff,0x92,0x6d,0x6b,0xff,0x9d,0x7b,0x73,0xff,0xa3, 0x82,0x76,0xff,0xa2,0x81,0x76,0xff,0xa2,0x81,0x76,0xff,0xa1,0x7f,0x74,0xfe,0xa1, 0x80,0x75,0xfd,0xa2,0x7f,0x74,0xfc,0xab,0x86,0x7b,0xf7,0x6a,0x54,0x4c,0xeb,0x0e, 0x0b,0x0a,0xd9,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x76,0x00, 0x00,0x00,0x51,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x0d,0x00, 0x00,0x00,0x05,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x0b,0x00, 0x00,0x00,0x15,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x50,0x00, 0x00,0x00,0x6e,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0xc2,0x12, 0x12,0x12,0xd8,0x70,0x6a,0x67,0xe8,0xcd,0xbb,0xb4,0xf3,0xbb,0xa0,0x98,0xf9,0xb1, 0x95,0x8a,0xfd,0xb0,0x93,0x89,0xfd,0xb1,0x95,0x8b,0xfe,0xb0,0x94,0x8a,0xff,0xb2, 0x96,0x8d,0xff,0xb5,0x99,0x8e,0xff,0xad,0x8d,0x81,0xff,0x77,0x65,0x63,0xff,0x3e, 0x3d,0x43,0xff,0x3a,0x3d,0x3b,0xff,0x3b,0x3e,0x3b,0xff,0x39,0x3c,0x39,0xff,0x3a, 0x3c,0x3a,0xff,0x3a,0x3d,0x3b,0xff,0x3a,0x3c,0x3b,0xff,0x31,0x37,0x32,0xff,0x08, 0x17,0x0d,0xff,0x3f,0x3f,0x38,0xff,0xd4,0xb5,0xad,0xff,0xbf,0xa7,0x9e,0xff,0xaf, 0x90,0x86,0xff,0xb6,0x9b,0x92,0xff,0xb5,0x9a,0x91,0xff,0xb5,0x99,0x90,0xff,0xb5, 0x9a,0x90,0xff,0xb5,0x9a,0x91,0xff,0xb5,0x9a,0x91,0xff,0xb5,0x9a,0x91,0xff,0xb6, 0x9b,0x92,0xff,0xb6,0x9b,0x93,0xff,0xb6,0x9b,0x92,0xff,0xb5,0x9a,0x90,0xff,0xb7, 0x9c,0x93,0xff,0xb7,0x9c,0x93,0xff,0xb7,0x9c,0x93,0xff,0xb7,0x9d,0x94,0xff,0xb8, 0x9e,0x95,0xff,0xb8,0x9e,0x95,0xff,0xb8,0x9c,0x93,0xff,0x98,0x7b,0x73,0xff,0x82, 0x64,0x5f,0xff,0xa0,0x79,0x71,0xff,0x83,0x6a,0x6b,0xff,0x45,0x43,0x4c,0xff,0x36, 0x3b,0x38,0xff,0x38,0x3b,0x39,0xff,0x38,0x3b,0x38,0xff,0x37,0x3a,0x37,0xff,0x34, 0x39,0x35,0xff,0x35,0x39,0x36,0xff,0x35,0x39,0x36,0xff,0x34,0x39,0x35,0xff,0x36, 0x3b,0x36,0xff,0x29,0x2f,0x28,0xff,0x1c,0x1f,0x21,0xff,0x77,0x64,0x62,0xff,0xca, 0xaf,0xa5,0xff,0xc9,0xb4,0xaa,0xff,0xa2,0x86,0x88,0xff,0x7d,0x5d,0x6c,0xff,0x9d, 0x82,0x83,0xff,0xbb,0xa3,0x9a,0xff,0xbb,0xa2,0x99,0xff,0xbb,0xa3,0x9a,0xff,0xba, 0xa1,0x99,0xff,0xba,0xa2,0x99,0xff,0xbb,0xa3,0x9a,0xff,0xbb,0xa2,0x99,0xff,0xba, 0xa1,0x98,0xff,0xba,0xa1,0x98,0xff,0xba,0xa1,0x98,0xff,0xbd,0xa4,0x9b,0xff,0xbb, 0xa2,0x99,0xff,0xbb,0xa2,0x99,0xff,0xba,0xa1,0x99,0xff,0xba,0xa0,0x98,0xff,0xbd, 0xa5,0x9b,0xff,0xb7,0x94,0x92,0xff,0x55,0x4e,0x4b,0xff,0x30,0x36,0x33,0xff,0x36, 0x3a,0x37,0xff,0x38,0x3c,0x39,0xff,0x21,0x24,0x27,0xff,0x9c,0x8e,0x8a,0xff,0xce, 0xb8,0xb1,0xff,0xbe,0xa6,0x9c,0xff,0xb7,0x9e,0x94,0xff,0xb9,0xa1,0x98,0xff,0xb8, 0x9f,0x96,0xff,0xb9,0xa0,0x97,0xff,0xb8,0x9f,0x96,0xff,0xb8,0x9f,0x96,0xff,0xb9, 0x9f,0x96,0xff,0xb6,0x9b,0x92,0xff,0xb8,0x9d,0x94,0xff,0xb8,0x9e,0x95,0xff,0xb7, 0x9d,0x94,0xff,0xb7,0x9d,0x94,0xff,0xb7,0x9d,0x94,0xff,0xb7,0x9d,0x94,0xff,0xb8, 0x9e,0x95,0xff,0xb7,0x9c,0x93,0xff,0xb7,0x9d,0x94,0xff,0xb7,0x9c,0x93,0xff,0xb9, 0xa0,0x96,0xff,0xa2,0x7b,0x76,0xff,0x4a,0x45,0x44,0xff,0x3f,0x3f,0x41,0xff,0x32, 0x37,0x32,0xff,0x3e,0x3f,0x3e,0xff,0x33,0x34,0x34,0xff,0x1b,0x1e,0x1b,0xff,0x55, 0x47,0x56,0xff,0xb8,0xa1,0x9a,0xff,0xaf,0x92,0x87,0xff,0x9f,0x7d,0x72,0xff,0xb2, 0x97,0x8e,0xff,0xb4,0x98,0x8f,0xff,0xb4,0x99,0x90,0xff,0xb4,0x99,0x90,0xff,0xb5, 0x9a,0x91,0xff,0x9b,0x78,0x6e,0xff,0xc5,0xaf,0xa7,0xff,0xb6,0x9d,0x93,0xff,0xb3, 0x98,0x8e,0xff,0xb3,0x97,0x8e,0xff,0xb3,0x97,0x8e,0xff,0xb3,0x97,0x8e,0xff,0xb3, 0x97,0x8e,0xff,0xb3,0x97,0x8e,0xff,0xb2,0x96,0x8c,0xff,0xb2,0x96,0x8d,0xff,0xb2, 0x96,0x8d,0xfe,0xb2,0x96,0x8e,0xfb,0xb0,0x95,0x8c,0xf2,0x6c,0x5b,0x55,0xe2,0x00, 0x00,0x00,0xc4,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x77,0x00, 0x00,0x00,0x84,0x00,0x00,0x00,0xa4,0x02,0x02,0x02,0xc8,0x26,0x20,0x26,0xe5,0x4e, 0x49,0x50,0xf4,0x11,0x1d,0x14,0xfc,0x5f,0x53,0x5e,0xfe,0x5d,0x51,0x5e,0xff,0x5f, 0x51,0x5c,0xff,0x76,0x59,0x53,0xff,0xc4,0xad,0xa5,0xff,0xaf,0x93,0x8a,0xff,0xaf, 0x93,0x89,0xff,0xaf,0x92,0x88,0xff,0xaf,0x92,0x88,0xff,0xaf,0x92,0x88,0xff,0xaf, 0x91,0x87,0xff,0xaf,0x92,0x88,0xff,0xaf,0x91,0x87,0xff,0xaf,0x92,0x88,0xff,0xaf, 0x92,0x88,0xff,0xaf,0x91,0x87,0xff,0xaf,0x91,0x87,0xff,0xaf,0x91,0x87,0xff,0xae, 0x8f,0x85,0xff,0xa9,0x8a,0x7f,0xff,0xa6,0x86,0x7c,0xff,0xb0,0x93,0x89,0xff,0xae, 0x90,0x85,0xff,0xae,0x90,0x85,0xff,0xaf,0x92,0x87,0xff,0xa6,0x87,0x7e,0xff,0x6a, 0x51,0x54,0xff,0x3a,0x34,0x3f,0xff,0x63,0x55,0x63,0xff,0x63,0x55,0x63,0xff,0x63, 0x55,0x63,0xff,0x60,0x53,0x61,0xff,0x59,0x4f,0x59,0xff,0x45,0x43,0x45,0xff,0x3d, 0x3e,0x3f,0xff,0x6f,0x5a,0x69,0xff,0x8e,0x6a,0x79,0xff,0x87,0x66,0x72,0xff,0x87, 0x66,0x74,0xff,0x84,0x63,0x71,0xff,0x90,0x6d,0x6f,0xff,0xaa,0x8a,0x7d,0xff,0xaa, 0x8b,0x82,0xff,0xa9,0x8a,0x80,0xff,0xaa,0x8b,0x80,0xff,0xaa,0x8b,0x80,0xff,0xaa, 0x8b,0x81,0xff,0xaa,0x8b,0x81,0xff,0xa9,0x8a,0x80,0xff,0xa8,0x89,0x7e,0xff,0xa8, 0x89,0x7e,0xff,0xa7,0x87,0x7d,0xff,0xa7,0x87,0x7d,0xff,0xa8,0x88,0x7e,0xff,0xa7, 0x87,0x7d,0xff,0xa8,0x88,0x7e,0xff,0xab,0x8a,0x7f,0xff,0x8d,0x70,0x6e,0xff,0x5f, 0x4c,0x57,0xff,0x5e,0x4e,0x5f,0xff,0x4c,0x48,0x4e,0xff,0x1f,0x2c,0x21,0xff,0x50, 0x4b,0x46,0xff,0x75,0x61,0x6b,0xff,0x65,0x55,0x66,0xff,0x78,0x60,0x73,0xff,0x72, 0x5d,0x6e,0xff,0x51,0x4a,0x52,0xff,0x45,0x43,0x46,0xff,0x55,0x4d,0x55,0xff,0x5c, 0x51,0x5d,0xff,0x69,0x56,0x62,0xff,0x62,0x52,0x57,0xff,0x47,0x44,0x39,0xff,0x74, 0x5d,0x5c,0xff,0x9d,0x79,0x79,0xff,0x79,0x63,0x6c,0xff,0x67,0x56,0x69,0xff,0x69, 0x58,0x68,0xff,0x6b,0x58,0x6e,0xff,0x8a,0x70,0x79,0xff,0xaa,0x89,0x7f,0xff,0xae, 0x8e,0x82,0xff,0xa8,0x87,0x7d,0xff,0xa6,0x86,0x7b,0xff,0xa7,0x87,0x7a,0xff,0x94, 0x71,0x6f,0xff,0x9b,0x78,0x71,0xff,0xa5,0x84,0x79,0xff,0xa5,0x84,0x79,0xff,0xa7, 0x86,0x7b,0xff,0xa6,0x85,0x7c,0xff,0xa5,0x84,0x7a,0xff,0xa6,0x85,0x7c,0xff,0xaa, 0x88,0x7c,0xff,0xa7,0x82,0x75,0xff,0x8a,0x70,0x6a,0xff,0x89,0x69,0x69,0xff,0x9f, 0x7d,0x75,0xff,0xa4,0x83,0x78,0xff,0xa3,0x82,0x77,0xff,0xa2,0x81,0x76,0xff,0xa2, 0x81,0x76,0xff,0xa2,0x81,0x76,0xff,0xa1,0x80,0x75,0xfe,0xa1,0x7f,0x74,0xfd,0xa2, 0x80,0x75,0xfb,0xab,0x88,0x7b,0xf5,0x59,0x47,0x40,0xe9,0x0a,0x08,0x07,0xd7,0x00, 0x00,0x00,0xb9,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x4b,0x00, 0x00,0x00,0x2d,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x05,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x06,0x00, 0x00,0x00,0x0c,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x3f,0x00, 0x00,0x00,0x5c,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0xb5,0x03, 0x03,0x03,0xcb,0x2f,0x2e,0x2e,0xdf,0x98,0x8e,0x8b,0xec,0xd5,0xbe,0xb7,0xf5,0xb3, 0x97,0x8d,0xfb,0xb1,0x94,0x8a,0xfd,0xb1,0x95,0x8b,0xfe,0xb0,0x94,0x8a,0xfe,0xb2, 0x96,0x8d,0xff,0xb1,0x95,0x8b,0xff,0xb7,0x99,0x8d,0xff,0xa4,0x82,0x7a,0xff,0x67, 0x58,0x54,0xff,0x36,0x3a,0x3d,0xff,0x3c,0x3d,0x3c,0xff,0x3e,0x3f,0x3f,0xff,0x3b, 0x3d,0x3c,0xff,0x38,0x3b,0x38,0xff,0x38,0x3b,0x39,0xff,0x38,0x3b,0x39,0xff,0x3a, 0x3d,0x3b,0xff,0x24,0x2b,0x28,0xff,0x11,0x17,0x0f,0xff,0x8d,0x7e,0x75,0xff,0xe0, 0xcf,0xc9,0xff,0xb5,0x9a,0x92,0xff,0xb3,0x98,0x8f,0xff,0xb1,0x95,0x8b,0xff,0xb8, 0x9d,0x94,0xff,0xb7,0x9c,0x93,0xff,0xb6,0x9b,0x92,0xff,0xb6,0x9b,0x92,0xff,0xb5, 0x9b,0x92,0xff,0xb6,0x9b,0x92,0xff,0xb6,0x9a,0x91,0xff,0xb7,0x9c,0x93,0xff,0xb7, 0x9e,0x95,0xff,0xb7,0x9e,0x95,0xff,0xb7,0x9c,0x93,0xff,0xb8,0x9e,0x95,0xff,0xb8, 0x9e,0x95,0xff,0xb8,0x9e,0x95,0xff,0xb8,0x9e,0x95,0xff,0xbf,0xa5,0x9b,0xff,0xa7, 0x89,0x88,0xff,0x44,0x3a,0x3c,0xff,0x3e,0x39,0x3c,0xff,0x9e,0x77,0x79,0xff,0x97, 0x76,0x7b,0xff,0x5c,0x50,0x5f,0xff,0x35,0x3a,0x36,0xff,0x3a,0x3d,0x3a,0xff,0x39, 0x3c,0x38,0xff,0x37,0x3b,0x38,0xff,0x35,0x39,0x36,0xff,0x34,0x3a,0x35,0xff,0x35, 0x3a,0x36,0xff,0x35,0x3a,0x36,0xff,0x32,0x37,0x32,0xff,0x18,0x20,0x1c,0xff,0x56, 0x4b,0x52,0xff,0xc3,0xad,0xaf,0xff,0xcc,0xb8,0xaf,0xff,0xbb,0xa2,0x9b,0xff,0xbb, 0xa0,0x93,0xff,0x93,0x74,0x77,0xff,0x9b,0x81,0x86,0xff,0xc0,0xa9,0xa2,0xff,0xc0, 0xa8,0xa0,0xff,0xbc,0xa4,0x9b,0xff,0xbc,0xa3,0x9b,0xff,0xbc,0xa3,0x9c,0xff,0xbd, 0xa5,0x9c,0xff,0xbd,0xa5,0x9b,0xff,0xbb,0xa3,0x9a,0xff,0xbc,0xa4,0x9b,0xff,0xbc, 0xa4,0x9b,0xff,0xbd,0xa5,0x9c,0xff,0xbc,0xa4,0x9b,0xff,0xbb,0xa3,0x9a,0xff,0xbc, 0xa4,0x9c,0xff,0xba,0xa2,0x9a,0xff,0xc5,0xaa,0x9f,0xff,0x83,0x6d,0x76,0xff,0x44, 0x40,0x45,0xff,0x39,0x3b,0x38,0xff,0x3a,0x3d,0x3b,0xff,0x2d,0x32,0x30,0xff,0x4b, 0x3c,0x40,0xff,0xc1,0xb1,0xaf,0xff,0xcc,0xb7,0xaf,0xff,0xbb,0xa2,0x99,0xff,0xba, 0xa1,0x98,0xff,0xbb,0xa1,0x99,0xff,0xb9,0xa0,0x97,0xff,0xba,0xa1,0x98,0xff,0xb9, 0xa0,0x97,0xff,0xb9,0xa0,0x97,0xff,0xba,0xa1,0x98,0xff,0xb8,0x9f,0x96,0xff,0xb9, 0x9f,0x96,0xff,0xb8,0x9e,0x95,0xff,0xb8,0x9f,0x96,0xff,0xb8,0x9e,0x95,0xff,0xb8, 0x9f,0x96,0xff,0xb8,0x9e,0x95,0xff,0xb8,0x9f,0x96,0xff,0xb8,0x9e,0x95,0xff,0xb9, 0x9f,0x96,0xff,0xb7,0x9c,0x93,0xff,0xbd,0xa3,0x98,0xff,0x8a,0x6c,0x7c,0xff,0x47, 0x44,0x46,0xff,0x3f,0x3f,0x40,0xff,0x31,0x36,0x31,0xff,0x3b,0x3d,0x3c,0xff,0x2a, 0x2a,0x2a,0xff,0x17,0x1a,0x18,0xff,0x50,0x3c,0x43,0xff,0xa8,0x8b,0x82,0xff,0xa7, 0x88,0x7e,0xff,0xb4,0x99,0x8e,0xff,0xb6,0x9b,0x92,0xff,0xb5,0x9a,0x91,0xff,0xb5, 0x9a,0x91,0xff,0xb6,0x9b,0x93,0xff,0xb6,0x9b,0x93,0xff,0x9b,0x77,0x6c,0xff,0xc4, 0xae,0xa6,0xff,0xb8,0xa0,0x97,0xff,0xb3,0x97,0x8e,0xff,0xb4,0x98,0x8e,0xff,0xb4, 0x99,0x8f,0xff,0xb4,0x98,0x8f,0xff,0xb4,0x99,0x8f,0xff,0xb3,0x98,0x8e,0xff,0xb4, 0x98,0x8f,0xff,0xb3,0x97,0x8e,0xff,0xb2,0x96,0x8d,0xfe,0xb3,0x97,0x8e,0xfb,0xb2, 0x96,0x8d,0xf2,0x75,0x61,0x5c,0xe2,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x9f,0x00, 0x00,0x00,0x7f,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0xa0,0x01, 0x01,0x01,0xc5,0x18,0x15,0x17,0xe2,0x41,0x41,0x41,0xf2,0x17,0x22,0x19,0xfb,0x5b, 0x51,0x5b,0xfe,0x5e,0x52,0x5e,0xff,0x5f,0x51,0x5e,0xff,0x65,0x4f,0x56,0xff,0xcd, 0xb7,0xae,0xff,0xb1,0x94,0x8b,0xff,0xb0,0x94,0x8a,0xff,0xb0,0x93,0x89,0xff,0xaf, 0x93,0x89,0xff,0xaf,0x93,0x89,0xff,0xaf,0x92,0x88,0xff,0xaf,0x92,0x88,0xff,0xaf, 0x93,0x89,0xff,0xaf,0x93,0x89,0xff,0xaf,0x92,0x88,0xff,0xaf,0x91,0x87,0xff,0xaf, 0x92,0x88,0xff,0xaf,0x91,0x87,0xff,0xb0,0x92,0x88,0xff,0xad,0x8f,0x85,0xff,0xa1, 0x7f,0x74,0xff,0xb0,0x92,0x88,0xff,0xb0,0x92,0x89,0xff,0xaf,0x91,0x87,0xff,0xaf, 0x91,0x87,0xff,0xb2,0x93,0x87,0xff,0x8f,0x75,0x6f,0xff,0x37,0x30,0x3e,0xff,0x52, 0x47,0x51,0xff,0x66,0x58,0x66,0xff,0x64,0x55,0x64,0xff,0x68,0x57,0x67,0xff,0x63, 0x54,0x62,0xff,0x46,0x44,0x47,0xff,0x3c,0x3f,0x3e,0xff,0x6d,0x5a,0x69,0xff,0x88, 0x67,0x73,0xff,0x8a,0x66,0x6b,0xff,0x86,0x64,0x6e,0xff,0x8a,0x68,0x6f,0xff,0x9b, 0x79,0x72,0xff,0xa9,0x89,0x7e,0xff,0xaa,0x8c,0x82,0xff,0xab,0x8c,0x82,0xff,0xac, 0x8d,0x82,0xff,0xa9,0x8a,0x80,0xff,0xa9,0x8a,0x80,0xff,0xa9,0x8a,0x80,0xff,0xaa, 0x8b,0x81,0xff,0xa9,0x8a,0x7f,0xff,0xa9,0x8a,0x7f,0xff,0xa8,0x88,0x7e,0xff,0xa9, 0x89,0x7f,0xff,0xaa,0x8b,0x80,0xff,0xa8,0x89,0x7f,0xff,0xa9,0x89,0x7e,0xff,0xa8, 0x88,0x7e,0xff,0xaf,0x8e,0x82,0xff,0x95,0x76,0x6e,0xff,0x68,0x50,0x52,0xff,0x50, 0x47,0x4c,0xff,0x42,0x42,0x48,0xff,0x74,0x62,0x63,0xff,0x7f,0x68,0x6d,0xff,0x61, 0x53,0x64,0xff,0x64,0x55,0x64,0xff,0x64,0x55,0x64,0xff,0x67,0x57,0x67,0xff,0x6f, 0x5b,0x6f,0xff,0x6d,0x5a,0x6d,0xff,0x5d,0x52,0x5f,0xff,0x6f,0x59,0x63,0xff,0x81, 0x61,0x6d,0xff,0x8a,0x6a,0x6f,0xff,0x8e,0x6e,0x6b,0xff,0x70,0x5b,0x65,0xff,0x65, 0x55,0x68,0xff,0x6b,0x59,0x6a,0xff,0x6b,0x59,0x6a,0xff,0x69,0x57,0x68,0xff,0x66, 0x55,0x6a,0xff,0x7b,0x63,0x6c,0xff,0x9c,0x7a,0x74,0xff,0xad,0x8d,0x81,0xff,0xaa, 0x8b,0x80,0xff,0xa6,0x86,0x7c,0xff,0xa8,0x87,0x7c,0xff,0xa7,0x87,0x7d,0xff,0xa6, 0x86,0x7c,0xff,0xa7,0x86,0x7c,0xff,0xa1,0x7f,0x75,0xff,0xa3,0x82,0x77,0xff,0xa6, 0x86,0x7b,0xff,0xa0,0x7b,0x74,0xff,0x89,0x6f,0x6f,0xff,0x8d,0x6b,0x6c,0xff,0x6f, 0x5c,0x5f,0xff,0x96,0x7a,0x72,0xff,0xa7,0x85,0x7a,0xff,0xa4,0x83,0x78,0xff,0xa4, 0x83,0x78,0xff,0xa2,0x81,0x76,0xff,0xa3,0x82,0x77,0xff,0xa2,0x81,0x76,0xff,0xa3, 0x82,0x77,0xff,0xa1,0x80,0x75,0xfe,0xa2,0x81,0x76,0xfe,0xa2,0x80,0x75,0xfb,0xa9, 0x87,0x7b,0xf4,0x50,0x3f,0x3b,0xe8,0x07,0x05,0x05,0xd2,0x00,0x00,0x00,0xb4,0x00, 0x00,0x00,0x8f,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x29,0x00, 0x00,0x00,0x17,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x03,0x00, 0x00,0x00,0x09,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x2d,0x00, 0x00,0x00,0x44,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0xa3,0x00, 0x00,0x00,0xbf,0x07,0x06,0x06,0xd5,0x4f,0x49,0x47,0xe5,0xaf,0xa0,0x9a,0xf0,0xd0, 0xb7,0xae,0xf7,0xb0,0x93,0x89,0xfc,0xb0,0x93,0x89,0xfe,0xb1,0x95,0x8b,0xff,0xb2, 0x96,0x8c,0xff,0xb1,0x95,0x8b,0xff,0xb4,0x98,0x8e,0xff,0xb6,0x99,0x8f,0xff,0x95, 0x76,0x7b,0xff,0x59,0x4c,0x49,0xff,0x36,0x3a,0x3c,0xff,0x40,0x40,0x3f,0xff,0x3d, 0x3f,0x3e,0xff,0x3c,0x3e,0x3d,0xff,0x37,0x3b,0x38,0xff,0x38,0x3b,0x38,0xff,0x38, 0x3b,0x38,0xff,0x38,0x3b,0x38,0xff,0x33,0x37,0x34,0xff,0x33,0x34,0x2e,0xff,0x73, 0x5d,0x59,0xff,0x98,0x75,0x7b,0xff,0xad,0x90,0x89,0xff,0xb7,0x9d,0x93,0xff,0xb4, 0x98,0x8f,0xff,0xb1,0x95,0x8c,0xff,0xb8,0x9d,0x94,0xff,0xb7,0x9b,0x92,0xff,0xb7, 0x9c,0x93,0xff,0xb8,0x9e,0x95,0xff,0xb7,0x9c,0x93,0xff,0xb7,0x9c,0x93,0xff,0xb7, 0x9c,0x93,0xff,0xb9,0x9f,0x96,0xff,0xb9,0xa0,0x97,0xff,0xb9,0x9f,0x96,0xff,0xb8, 0x9e,0x95,0xff,0xb8,0x9f,0x96,0xff,0xb8,0x9f,0x96,0xff,0xba,0xa1,0x98,0xff,0xbb, 0xa3,0x9a,0xff,0xc3,0xa9,0x9d,0xff,0xa5,0x8a,0x8f,0xff,0x39,0x37,0x42,0xff,0x3d, 0x38,0x32,0xff,0xa6,0x7c,0x78,0xff,0x86,0x6e,0x6d,0xff,0x46,0x43,0x4b,0xff,0x39, 0x3c,0x3a,0xff,0x3b,0x3e,0x3c,0xff,0x3a,0x3d,0x3a,0xff,0x38,0x3b,0x38,0xff,0x35, 0x3a,0x36,0xff,0x34,0x3a,0x35,0xff,0x34,0x39,0x35,0xff,0x35,0x3a,0x36,0xff,0x1e, 0x26,0x21,0xff,0x38,0x31,0x2d,0xff,0xa9,0x93,0x8c,0xff,0xd3,0xbd,0xb4,0xff,0xbd, 0xa5,0x9e,0xff,0xbc,0xa4,0x9c,0xff,0xc3,0xad,0xa5,0xff,0xa3,0x81,0x79,0xff,0xaa, 0x8a,0x83,0xff,0xc7,0xb2,0xaa,0xff,0xc0,0xa9,0xa1,0xff,0xbc,0xa4,0x9c,0xff,0xbd, 0xa5,0x9d,0xff,0xbd,0xa5,0x9d,0xff,0xbe,0xa6,0x9e,0xff,0xbe,0xa6,0x9e,0xff,0xbd, 0xa5,0x9d,0xff,0xbc,0xa4,0x9c,0xff,0xbc,0xa4,0x9c,0xff,0xbb,0xa2,0x9a,0xff,0xbd, 0xa5,0x9d,0xff,0xbd,0xa5,0x9d,0xff,0xbe,0xa6,0x9e,0xff,0xc0,0xa9,0xa0,0xff,0xb7, 0x93,0x90,0xff,0x56,0x4e,0x4d,0xff,0x34,0x38,0x36,0xff,0x3a,0x3d,0x3b,0xff,0x3b, 0x3e,0x3b,0xff,0x15,0x1b,0x1b,0xff,0x90,0x82,0x7b,0xff,0xcc,0xb6,0xaf,0xff,0xbf, 0xa6,0x9e,0xff,0xbb,0xa3,0x9a,0xff,0xbc,0xa3,0x9b,0xff,0xbb,0xa2,0x99,0xff,0xba, 0xa2,0x99,0xff,0xba,0xa1,0x99,0xff,0xbb,0xa3,0x99,0xff,0xbb,0xa2,0x99,0xff,0xba, 0xa1,0x99,0xff,0xba,0xa1,0x99,0xff,0xba,0xa1,0x98,0xff,0xb9,0x9f,0x96,0xff,0xb9, 0xa0,0x97,0xff,0xb9,0xa0,0x97,0xff,0xb9,0xa0,0x97,0xff,0xba,0xa1,0x98,0xff,0xba, 0xa1,0x98,0xff,0xb9,0xa0,0x97,0xff,0xb9,0x9f,0x96,0xff,0xb9,0x9f,0x96,0xff,0xc1, 0xa7,0x9c,0xff,0x67,0x5a,0x64,0xff,0x41,0x40,0x42,0xff,0x3e,0x3f,0x3f,0xff,0x42, 0x42,0x43,0xff,0x39,0x38,0x39,0xff,0x27,0x26,0x27,0xff,0x11,0x16,0x13,0xff,0x66, 0x4f,0x47,0xff,0xa2,0x83,0x78,0xff,0xb7,0x9c,0x93,0xff,0xb6,0x9b,0x92,0xff,0xb6, 0x9b,0x92,0xff,0xb7,0x9c,0x93,0xff,0xb5,0x9a,0x91,0xff,0xb7,0x9c,0x93,0xff,0xb6, 0x9c,0x93,0xff,0x96,0x72,0x68,0xff,0xb7,0x9d,0x93,0xff,0xb7,0x9d,0x94,0xff,0xb4, 0x98,0x8f,0xff,0xb4,0x98,0x8f,0xff,0xb5,0x9a,0x90,0xff,0xb3,0x98,0x8e,0xff,0xb4, 0x99,0x8f,0xff,0xb4,0x99,0x8f,0xff,0xb3,0x96,0x8e,0xff,0xb4,0x98,0x8f,0xff,0xb4, 0x99,0x90,0xfe,0xb3,0x98,0x8e,0xfb,0xb3,0x97,0x8e,0xf2,0x7d,0x69,0x64,0xe2,0x00, 0x00,0x00,0xc3,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x6e,0x00, 0x00,0x00,0x78,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0xbd,0x08,0x08,0x08,0xdc,0x30, 0x37,0x31,0xf0,0x21,0x2a,0x22,0xf9,0x60,0x53,0x61,0xfe,0x5f,0x53,0x5f,0xff,0x66, 0x55,0x65,0xff,0x6b,0x57,0x66,0xff,0xce,0xb9,0xaf,0xff,0xb3,0x98,0x8e,0xff,0xb0, 0x94,0x8a,0xff,0xb1,0x95,0x8b,0xff,0xb1,0x95,0x8b,0xff,0xb0,0x94,0x8a,0xff,0xb0, 0x93,0x89,0xff,0xaf,0x93,0x89,0xff,0xb0,0x94,0x8a,0xff,0xb0,0x94,0x8a,0xff,0xaf, 0x92,0x88,0xff,0xb0,0x93,0x89,0xff,0xb0,0x93,0x89,0xff,0xb0,0x93,0x89,0xff,0xaf, 0x92,0x88,0xff,0xae,0x91,0x87,0xff,0xa7,0x88,0x7e,0xff,0xa7,0x86,0x7c,0xff,0xaf, 0x92,0x86,0xff,0xb4,0x97,0x8b,0xff,0xb1,0x94,0x89,0xff,0xb2,0x94,0x89,0xff,0x9e, 0x82,0x7d,0xff,0x51,0x3d,0x47,0xff,0x3e,0x38,0x40,0xff,0x5e,0x50,0x5e,0xff,0x63, 0x55,0x63,0xff,0x67,0x57,0x67,0xff,0x61,0x53,0x61,0xff,0x33,0x38,0x35,0xff,0x28, 0x2f,0x28,0xff,0x5d,0x52,0x5f,0xff,0x70,0x5b,0x6b,0xff,0x8d,0x69,0x6f,0xff,0x8c, 0x64,0x64,0xff,0x91,0x6d,0x6d,0xff,0xac,0x8d,0x80,0xff,0xa7,0x88,0x7e,0xff,0xab, 0x8d,0x83,0xff,0xab,0x8c,0x82,0xff,0xab,0x8c,0x83,0xff,0xaa,0x8b,0x81,0xff,0xaa, 0x8b,0x81,0xff,0xab,0x8c,0x82,0xff,0xab,0x8c,0x82,0xff,0xaa,0x8b,0x81,0xff,0xaa, 0x8b,0x80,0xff,0xaa,0x8b,0x80,0xff,0xa9,0x8a,0x7f,0xff,0xaa,0x8a,0x80,0xff,0xa9, 0x8a,0x7f,0xff,0xaa,0x8a,0x80,0xff,0xa9,0x89,0x7f,0xff,0xa7,0x87,0x7e,0xff,0xae, 0x8d,0x82,0xff,0xa2,0x82,0x76,0xff,0x75,0x5c,0x5a,0xff,0x63,0x50,0x60,0xff,0x62, 0x53,0x67,0xff,0x61,0x54,0x64,0xff,0x66,0x56,0x65,0xff,0x67,0x56,0x66,0xff,0x66, 0x56,0x65,0xff,0x67,0x57,0x66,0xff,0x68,0x57,0x67,0xff,0x67,0x57,0x68,0xff,0x69, 0x57,0x68,0xff,0x68,0x57,0x69,0xff,0x67,0x57,0x69,0xff,0x64,0x55,0x67,0xff,0x64, 0x55,0x69,0xff,0x6a,0x58,0x6b,0xff,0x6b,0x59,0x6a,0xff,0x6b,0x58,0x69,0xff,0x69, 0x58,0x69,0xff,0x68,0x57,0x68,0xff,0x6a,0x58,0x69,0xff,0x65,0x55,0x69,0xff,0x6f, 0x57,0x64,0xff,0x90,0x71,0x75,0xff,0xab,0x8a,0x82,0xff,0xaa,0x8a,0x7f,0xff,0xa6, 0x85,0x7b,0xff,0xa6,0x86,0x7c,0xff,0xa6,0x86,0x7c,0xff,0xa7,0x86,0x7c,0xff,0xa1, 0x7f,0x75,0xff,0xa3,0x82,0x78,0xff,0xa8,0x88,0x7d,0xff,0x9f,0x7b,0x74,0xff,0x84, 0x6a,0x6d,0xff,0x8b,0x6e,0x73,0xff,0xa8,0x85,0x7d,0xff,0xa8,0x86,0x7a,0xff,0xa6, 0x85,0x7a,0xff,0xa5,0x84,0x7a,0xff,0xa4,0x83,0x78,0xff,0xa3,0x82,0x77,0xff,0xa4, 0x83,0x78,0xff,0xa3,0x82,0x77,0xff,0xa4,0x83,0x77,0xff,0xa3,0x82,0x77,0xff,0xa3, 0x82,0x77,0xfe,0xa1,0x81,0x76,0xfd,0xa4,0x83,0x78,0xfa,0xa4,0x82,0x77,0xf2,0x3d, 0x2f,0x2c,0xe4,0x04,0x03,0x03,0xce,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x8b,0x00, 0x00,0x00,0x65,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x16,0x00, 0x00,0x00,0x0a,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00, 0x00,0x00,0x06,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x21,0x00, 0x00,0x00,0x34,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x8a,0x00, 0x00,0x00,0xaa,0x00,0x00,0x00,0xc6,0x0b,0x0b,0x0a,0xdb,0x72,0x68,0x64,0xeb,0xbc, 0xa7,0x9f,0xf4,0xc3,0xa6,0x9d,0xf9,0xaf,0x92,0x88,0xfc,0xb0,0x94,0x8a,0xfd,0xb1, 0x95,0x8b,0xff,0xb1,0x95,0x8b,0xff,0xb2,0x96,0x8c,0xff,0xb3,0x97,0x8d,0xff,0xb1, 0x94,0x8c,0xff,0x82,0x6b,0x76,0xff,0x4f,0x45,0x4e,0xff,0x37,0x3b,0x3b,0xff,0x40, 0x40,0x40,0xff,0x3d,0x3f,0x3e,0xff,0x3c,0x3e,0x3d,0xff,0x3b,0x3d,0x3c,0xff,0x39, 0x3d,0x3a,0xff,0x38,0x3b,0x38,0xff,0x3a,0x3d,0x3a,0xff,0x35,0x38,0x35,0xff,0x2d, 0x2c,0x2d,0xff,0x70,0x5e,0x64,0xff,0xd3,0xbb,0xb4,0xff,0x99,0x7f,0x85,0xff,0xa7, 0x87,0x80,0xff,0xba,0xa1,0x98,0xff,0xb7,0x9e,0x95,0xff,0xb8,0x9f,0x96,0xff,0xb7, 0x9d,0x94,0xff,0xb6,0x9c,0x93,0xff,0xb7,0x9d,0x94,0xff,0xb7,0x9d,0x94,0xff,0xb7, 0x9d,0x94,0xff,0xb8,0x9e,0x95,0xff,0xb8,0x9e,0x95,0xff,0xb8,0x9e,0x95,0xff,0xb9, 0xa0,0x97,0xff,0xb9,0xa0,0x97,0xff,0xb9,0xa0,0x97,0xff,0xba,0xa1,0x98,0xff,0xba, 0xa1,0x98,0xff,0xbc,0xa4,0x9b,0xff,0xc1,0xa7,0x9c,0xff,0xa5,0x8b,0x86,0xff,0x6f, 0x5f,0x69,0xff,0x3c,0x3d,0x40,0xff,0x51,0x46,0x42,0xff,0xa3,0x76,0x72,0xff,0x71, 0x5e,0x57,0xff,0x34,0x39,0x3a,0xff,0x3d,0x3f,0x3e,0xff,0x3b,0x3d,0x3c,0xff,0x39, 0x3c,0x3a,0xff,0x38,0x3b,0x39,0xff,0x36,0x3a,0x37,0xff,0x35,0x39,0x36,0xff,0x36, 0x3b,0x37,0xff,0x2c,0x32,0x2d,0xff,0x2a,0x25,0x2c,0xff,0x93,0x7d,0x80,0xff,0xd6, 0xbe,0xb5,0xff,0xc0,0xa9,0xa2,0xff,0xbd,0xa5,0x9d,0xff,0xbe,0xa6,0x9f,0xff,0xc2, 0xac,0xa3,0xff,0xa1,0x80,0x78,0xff,0xac,0x8e,0x87,0xff,0xc8,0xb3,0xac,0xff,0xc0, 0xa9,0xa2,0xff,0xbe,0xa7,0x9f,0xff,0xbe,0xa5,0x9d,0xff,0xbf,0xa7,0x9f,0xff,0xbe, 0xa6,0x9e,0xff,0xbe,0xa7,0x9f,0xff,0xbf,0xa7,0x9f,0xff,0xbd,0xa5,0x9e,0xff,0xbe, 0xa6,0xa0,0xff,0xbe,0xa6,0x9e,0xff,0xbe,0xa6,0x9e,0xff,0xbd,0xa6,0x9e,0xff,0xbf, 0xa6,0x9f,0xff,0xc8,0xaf,0xa5,0xff,0x82,0x6c,0x6f,0xff,0x3f,0x3d,0x3f,0xff,0x36, 0x3a,0x37,0xff,0x3a,0x3e,0x3b,0xff,0x29,0x2e,0x2b,0xff,0x37,0x26,0x28,0xff,0xc9, 0xb8,0xb6,0xff,0xcf,0xb9,0xb0,0xff,0xba,0xa2,0x99,0xff,0xbc,0xa4,0x9b,0xff,0xbd, 0xa5,0x9c,0xff,0xbc,0xa4,0x9b,0xff,0xbd,0xa5,0x9c,0xff,0xbc,0xa3,0x9b,0xff,0xbd, 0xa5,0x9c,0xff,0xbb,0xa3,0x9a,0xff,0xbc,0xa3,0x9b,0xff,0xbc,0xa3,0x9b,0xff,0xbb, 0xa2,0x99,0xff,0xbb,0xa3,0x9a,0xff,0xbc,0xa4,0x9b,0xff,0xba,0xa1,0x98,0xff,0xbb, 0xa2,0x99,0xff,0xbb,0xa3,0x9a,0xff,0xbb,0xa2,0x99,0xff,0xba,0xa1,0x98,0xff,0xb8, 0x9f,0x96,0xff,0xba,0xa1,0x98,0xff,0xba,0x9b,0x8f,0xff,0x4e,0x4a,0x49,0xff,0x3d, 0x3f,0x3f,0xff,0x3e,0x3f,0x3f,0xff,0x3b,0x3e,0x3c,0xff,0x32,0x32,0x32,0xff,0x24, 0x24,0x24,0xff,0x0f,0x15,0x12,0xff,0x90,0x7b,0x74,0xff,0xb5,0x9b,0x92,0xff,0xb8, 0x9e,0x95,0xff,0xb7,0x9d,0x94,0xff,0xb6,0x9c,0x93,0xff,0xb6,0x9c,0x93,0xff,0xb7, 0x9c,0x93,0xff,0xb7,0x9d,0x94,0xff,0xb7,0x9d,0x94,0xff,0xac,0x8f,0x85,0xff,0xb1, 0x94,0x8a,0xff,0xa8,0x86,0x7a,0xff,0xc0,0xa7,0x9e,0xff,0xb5,0x9a,0x90,0xff,0xb5, 0x9a,0x91,0xff,0xb5,0x9a,0x91,0xff,0xb4,0x99,0x90,0xff,0xb5,0x9a,0x91,0xff,0xb5, 0x9a,0x91,0xff,0xb4,0x99,0x8f,0xff,0xb4,0x9a,0x90,0xfe,0xb5,0x9a,0x90,0xfb,0xb3, 0x98,0x8e,0xf2,0x85,0x70,0x6a,0xe2,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x9c,0x00, 0x00,0x00,0x79,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x8d,0x00, 0x00,0x00,0xb4,0x02,0x03,0x02,0xd6,0x1d,0x28,0x1e,0xeb,0x2c,0x34,0x2c,0xf7,0x5b, 0x50,0x5c,0xfd,0x5f,0x52,0x60,0xfe,0x6e,0x5a,0x6d,0xff,0x71,0x5d,0x6c,0xff,0xbb, 0xa2,0x98,0xff,0xb9,0xa0,0x97,0xff,0xb0,0x94,0x8b,0xff,0xb0,0x94,0x8a,0xff,0xb1, 0x95,0x8b,0xff,0xb1,0x95,0x8a,0xff,0xb0,0x94,0x8a,0xff,0xb1,0x95,0x8b,0xff,0xb1, 0x95,0x8c,0xff,0xb1,0x95,0x8b,0xff,0xb0,0x93,0x89,0xff,0xb0,0x94,0x8a,0xff,0xb0, 0x94,0x8a,0xff,0xb0,0x94,0x8a,0xff,0xb0,0x93,0x89,0xff,0xb0,0x95,0x8b,0xff,0xb0, 0x93,0x89,0xff,0xa6,0x86,0x7b,0xff,0x9c,0x7a,0x74,0xff,0x96,0x75,0x79,0xff,0xa3, 0x81,0x78,0xff,0xb6,0x99,0x8d,0xff,0xaf,0x91,0x88,0xff,0x7e,0x64,0x60,0xff,0x34, 0x31,0x3a,0xff,0x4e,0x43,0x4f,0xff,0x65,0x56,0x65,0xff,0x65,0x56,0x65,0xff,0x5e, 0x52,0x5d,0xff,0x2f,0x35,0x30,0xff,0x2c,0x30,0x2d,0xff,0x69,0x58,0x69,0xff,0x5e, 0x52,0x60,0xff,0x69,0x57,0x66,0xff,0x8f,0x72,0x75,0xff,0xbc,0x9e,0x95,0xff,0xb3, 0x97,0x8d,0xff,0xaa,0x8b,0x81,0xff,0xab,0x8c,0x82,0xff,0xac,0x8d,0x83,0xff,0xac, 0x8d,0x83,0xff,0xac,0x8d,0x83,0xff,0xad,0x8e,0x84,0xff,0xac,0x8d,0x83,0xff,0xac, 0x8d,0x83,0xff,0xac,0x8d,0x83,0xff,0xab,0x8d,0x82,0xff,0xaa,0x8b,0x81,0xff,0xab, 0x8c,0x82,0xff,0xab,0x8c,0x82,0xff,0xaa,0x8b,0x81,0xff,0xa9,0x8a,0x7f,0xff,0xa9, 0x8a,0x7f,0xff,0xa9,0x8a,0x7f,0xff,0xa8,0x89,0x7e,0xff,0xae,0x8e,0x83,0xff,0x9c, 0x7e,0x72,0xff,0x83,0x6a,0x64,0xff,0x73,0x5b,0x66,0xff,0x63,0x51,0x63,0xff,0x65, 0x56,0x66,0xff,0x67,0x56,0x66,0xff,0x67,0x57,0x67,0xff,0x67,0x56,0x67,0xff,0x68, 0x56,0x68,0xff,0x68,0x57,0x68,0xff,0x68,0x57,0x68,0xff,0x6a,0x58,0x69,0xff,0x6a, 0x58,0x69,0xff,0x69,0x58,0x69,0xff,0x5d,0x51,0x5d,0xff,0x62,0x54,0x62,0xff,0x6b, 0x59,0x6b,0xff,0x6a,0x58,0x69,0xff,0x6b,0x59,0x6a,0xff,0x69,0x58,0x69,0xff,0x69, 0x58,0x69,0xff,0x6a,0x58,0x69,0xff,0x68,0x58,0x6a,0xff,0x6d,0x57,0x6b,0xff,0x83, 0x69,0x77,0xff,0xa4,0x83,0x7d,0xff,0xac,0x8b,0x80,0xff,0xa7,0x87,0x7d,0xff,0xa6, 0x86,0x7c,0xff,0xa7,0x87,0x7d,0xff,0xa8,0x89,0x7f,0xff,0xa6,0x85,0x79,0xff,0xa7, 0x86,0x7c,0xff,0xa8,0x8a,0x7f,0xff,0xac,0x8b,0x7e,0xff,0xab,0x8a,0x7d,0xff,0xa7, 0x86,0x7c,0xff,0xa5,0x84,0x7a,0xff,0xa6,0x85,0x7b,0xff,0xa5,0x84,0x7a,0xff,0xa5, 0x84,0x7a,0xff,0xa5,0x84,0x7a,0xff,0xa5,0x84,0x79,0xff,0xa5,0x84,0x7a,0xff,0xa4, 0x83,0x79,0xff,0xa3,0x82,0x77,0xff,0xa3,0x82,0x77,0xff,0xa3,0x82,0x77,0xfe,0xa2, 0x81,0x76,0xfd,0xa7,0x85,0x79,0xf9,0x9b,0x7b,0x70,0xf0,0x2e,0x24,0x21,0xe2,0x02, 0x01,0x01,0xcb,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x63,0x00, 0x00,0x00,0x41,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x09,0x00, 0x00,0x00,0x04,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00, 0x00,0x00,0x03,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x19,0x00, 0x00,0x00,0x2a,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x76,0x00, 0x00,0x00,0x94,0x00,0x00,0x00,0xb2,0x01,0x01,0x01,0xcc,0x23,0x21,0x20,0xe0,0x95, 0x85,0x7f,0xed,0xc3,0xaa,0xa1,0xf6,0xb7,0x9b,0x91,0xfb,0xaf,0x93,0x89,0xfd,0xb1, 0x95,0x8a,0xfe,0xb1,0x95,0x8b,0xff,0xb1,0x95,0x8b,0xff,0xb1,0x95,0x8b,0xff,0xb3, 0x96,0x8c,0xff,0xa9,0x8b,0x83,0xff,0x68,0x5a,0x62,0xff,0x42,0x3f,0x46,0xff,0x3b, 0x3e,0x3d,0xff,0x3f,0x3f,0x3f,0xff,0x3e,0x3f,0x3f,0xff,0x3c,0x3e,0x3d,0xff,0x3c, 0x3e,0x3d,0xff,0x3b,0x3d,0x3b,0xff,0x3a,0x3c,0x3a,0xff,0x39,0x3b,0x39,0xff,0x39, 0x3c,0x39,0xff,0x2b,0x2e,0x2d,0xff,0x53,0x4b,0x50,0xff,0xcd,0xb7,0xb6,0xff,0xce, 0xb9,0xb1,0xff,0xbd,0xa3,0x98,0xff,0xb6,0x9b,0x92,0xff,0xb0,0x94,0x8a,0xff,0xb8, 0x9f,0x96,0xff,0xb7,0x9d,0x94,0xff,0xb7,0x9d,0x94,0xff,0xb8,0x9e,0x95,0xff,0xb7, 0x9d,0x94,0xff,0xb8,0x9f,0x96,0xff,0xb7,0x9e,0x95,0xff,0xb8,0x9e,0x95,0xff,0xba, 0xa1,0x98,0xff,0xb9,0x9f,0x96,0xff,0xb9,0xa1,0x98,0xff,0xba,0xa1,0x98,0xff,0xb9, 0xa0,0x97,0xff,0xba,0xa1,0x99,0xff,0xbc,0xa4,0x9c,0xff,0xbc,0x9f,0x94,0xff,0x97, 0x7c,0x77,0xff,0x56,0x4d,0x55,0xff,0x40,0x3e,0x44,0xff,0x36,0x3b,0x38,0xff,0x55, 0x4b,0x51,0xff,0x95,0x6d,0x78,0xff,0x68,0x54,0x52,0xff,0x35,0x3a,0x39,0xff,0x3d, 0x3e,0x3e,0xff,0x3b,0x3d,0x3c,0xff,0x39,0x3c,0x3a,0xff,0x36,0x3a,0x37,0xff,0x35, 0x39,0x36,0xff,0x37,0x3b,0x38,0xff,0x32,0x36,0x33,0xff,0x1e,0x22,0x21,0xff,0x75, 0x68,0x6c,0xff,0xd5,0xc0,0xbe,0xff,0xc9,0xb6,0xad,0xff,0xbd,0xa5,0x9d,0xff,0xbe, 0xa8,0xa0,0xff,0xc3,0xad,0xa4,0xff,0xa9,0x8c,0x88,0xff,0x86,0x5f,0x62,0xff,0xb0, 0x96,0x93,0xff,0xd0,0xbf,0xb7,0xff,0xc2,0xac,0xa4,0xff,0xbf,0xa8,0xa0,0xff,0xbf, 0xa8,0xa0,0xff,0xbf,0xa8,0xa0,0xff,0xc1,0xaa,0xa2,0xff,0xc1,0xaa,0xa2,0xff,0xbe, 0xa7,0x9f,0xff,0xbf,0xa7,0x9f,0xff,0xc1,0xa9,0xa1,0xff,0xc0,0xa8,0xa0,0xff,0xc0, 0xaa,0xa2,0xff,0xc1,0xa9,0xa1,0xff,0xc3,0xad,0xa5,0xff,0xb4,0x90,0x8a,0xff,0x57, 0x4d,0x4c,0xff,0x35,0x3a,0x38,0xff,0x39,0x3c,0x39,0xff,0x38,0x3b,0x38,0xff,0x17, 0x1d,0x1a,0xff,0x9b,0x86,0x82,0xff,0x74,0x6c,0x6a,0xff,0xb5,0xa8,0xa3,0xff,0xcb, 0xb5,0xac,0xff,0xbc,0xa4,0x9c,0xff,0xbd,0xa5,0x9d,0xff,0xbc,0xa4,0x9c,0xff,0xbe, 0xa5,0x9e,0xff,0xbd,0xa6,0x9d,0xff,0xbd,0xa5,0x9d,0xff,0xbc,0xa3,0x9b,0xff,0xbd, 0xa5,0x9c,0xff,0xbc,0xa4,0x9b,0xff,0xbb,0xa2,0x9a,0xff,0xbc,0xa4,0x9b,0xff,0xbc, 0xa3,0x9b,0xff,0xbc,0xa4,0x9c,0xff,0xbc,0xa4,0x9b,0xff,0xbb,0xa3,0x9a,0xff,0xba, 0xa1,0x99,0xff,0xb9,0xa0,0x97,0xff,0xba,0xa1,0x98,0xff,0xbe,0xa7,0x9e,0xff,0xa1, 0x7b,0x75,0xff,0x4a,0x45,0x44,0xff,0x3e,0x3e,0x3e,0xff,0x3f,0x40,0x40,0xff,0x2e, 0x36,0x2e,0xff,0x2d,0x2d,0x2d,0xff,0x23,0x23,0x23,0xff,0x16,0x1b,0x18,0xff,0xa7, 0x95,0x8f,0xff,0xba,0xa2,0x99,0xff,0xb8,0x9f,0x96,0xff,0xb7,0x9d,0x94,0xff,0xb8, 0x9f,0x96,0xff,0xb7,0x9d,0x94,0xff,0xb9,0x9f,0x96,0xff,0xb7,0x9c,0x93,0xff,0xb6, 0x9c,0x93,0xff,0xbb,0xa3,0x9a,0xff,0xb9,0x9f,0x96,0xff,0x7d,0x61,0x6d,0xff,0xc0, 0xaa,0xa3,0xff,0xbf,0xa7,0x9f,0xff,0xb6,0x9c,0x93,0xff,0xb6,0x9b,0x92,0xff,0xb6, 0x9c,0x93,0xff,0xb6,0x9b,0x92,0xff,0xb5,0x9a,0x90,0xff,0xb5,0x9a,0x91,0xff,0xb5, 0x9a,0x91,0xfe,0xb6,0x9b,0x92,0xfb,0xb4,0x99,0x90,0xf2,0x8d,0x77,0x70,0xe2,0x00, 0x00,0x00,0xc3,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x60,0x00, 0x00,0x00,0x64,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0xa8,0x01,0x02,0x01,0xcc,0x16, 0x22,0x17,0xe7,0x2e,0x35,0x2e,0xf5,0x5b,0x4f,0x5b,0xfc,0x61,0x53,0x60,0xfe,0x74, 0x5e,0x72,0xff,0x79,0x61,0x72,0xff,0x9a,0x7e,0x73,0xff,0xc0,0xa9,0xa1,0xff,0xb0, 0x93,0x8a,0xff,0xb1,0x95,0x8b,0xff,0xb1,0x95,0x8b,0xff,0xb2,0x96,0x8c,0xff,0xb1, 0x95,0x8c,0xff,0xb2,0x96,0x8d,0xff,0xb1,0x95,0x8c,0xff,0xb1,0x95,0x8b,0xff,0xb0, 0x94,0x8a,0xff,0xb1,0x95,0x8b,0xff,0xb0,0x94,0x8a,0xff,0xb1,0x95,0x8b,0xff,0xb0, 0x94,0x8a,0xff,0xb0,0x95,0x8b,0xff,0xb0,0x94,0x8a,0xff,0xaf,0x93,0x89,0xff,0xa3, 0x84,0x7b,0xff,0x8b,0x67,0x6a,0xff,0x83,0x63,0x73,0xff,0x91,0x74,0x7b,0xff,0xa4, 0x80,0x74,0xff,0x94,0x77,0x71,0xff,0x48,0x3b,0x49,0xff,0x4d,0x43,0x4e,0xff,0x59, 0x4c,0x59,0xff,0x66,0x58,0x66,0xff,0x63,0x55,0x63,0xff,0x4f,0x49,0x4f,0xff,0x40, 0x40,0x41,0xff,0x71,0x5c,0x70,0xff,0x65,0x56,0x65,0xff,0x5b,0x4f,0x5d,0xff,0x68, 0x5a,0x69,0xff,0xa1,0x8e,0x8f,0xff,0xcb,0xb3,0xa8,0xff,0xb4,0x99,0x8f,0xff,0xae, 0x90,0x85,0xff,0xb2,0x92,0x86,0xff,0xb2,0x91,0x87,0xff,0xb2,0x93,0x87,0xff,0xb2, 0x93,0x88,0xff,0xb3,0x93,0x88,0xff,0xb1,0x91,0x87,0xff,0xad,0x8f,0x84,0xff,0xac, 0x8f,0x84,0xff,0xac,0x8d,0x83,0xff,0xac,0x8d,0x83,0xff,0xab,0x8c,0x82,0xff,0xaa, 0x8b,0x81,0xff,0xaa,0x8b,0x81,0xff,0xaa,0x8b,0x80,0xff,0xab,0x8c,0x81,0xff,0xab, 0x8c,0x81,0xff,0xa9,0x8a,0x7f,0xff,0xad,0x8d,0x83,0xff,0xad,0x8e,0x81,0xff,0xa0, 0x82,0x79,0xff,0x7f,0x63,0x63,0xff,0x66,0x51,0x5d,0xff,0x66,0x56,0x69,0xff,0x68, 0x57,0x67,0xff,0x68,0x57,0x68,0xff,0x67,0x56,0x67,0xff,0x69,0x57,0x68,0xff,0x6a, 0x58,0x69,0xff,0x6a,0x58,0x69,0xff,0x6a,0x58,0x69,0xff,0x6a,0x58,0x6a,0xff,0x5e, 0x51,0x5e,0xff,0x61,0x54,0x62,0xff,0x6b,0x59,0x6a,0xff,0x6a,0x58,0x69,0xff,0x6c, 0x59,0x6a,0xff,0x6a,0x59,0x6a,0xff,0x69,0x58,0x69,0xff,0x6b,0x59,0x6a,0xff,0x6e, 0x5b,0x6d,0xff,0x6c,0x5a,0x6c,0xff,0x6a,0x58,0x6d,0xff,0x79,0x62,0x73,0xff,0x9a, 0x7a,0x75,0xff,0xac,0x8b,0x7f,0xff,0xaa,0x8a,0x80,0xff,0xa7,0x87,0x7d,0xff,0xaa, 0x8a,0x7f,0xff,0x93,0x71,0x71,0xff,0x9f,0x7e,0x79,0xff,0xa9,0x89,0x7f,0xff,0xa8, 0x88,0x7e,0xff,0xa7,0x87,0x7d,0xff,0xa6,0x86,0x7c,0xff,0xa6,0x85,0x7b,0xff,0xa6, 0x86,0x7c,0xff,0xa6,0x85,0x7b,0xff,0xa6,0x85,0x7b,0xff,0xa6,0x85,0x7b,0xff,0xa6, 0x85,0x7b,0xff,0xa6,0x85,0x7b,0xff,0xa5,0x84,0x7a,0xff,0xa4,0x83,0x78,0xff,0xa4, 0x83,0x78,0xff,0xa4,0x83,0x78,0xff,0xa3,0x82,0x77,0xfe,0xa2,0x82,0x77,0xfd,0xab, 0x88,0x7c,0xf9,0x93,0x75,0x6b,0xf0,0x22,0x1b,0x19,0xe1,0x00,0x00,0x00,0xca,0x00, 0x00,0x00,0xaa,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x3d,0x00, 0x00,0x00,0x23,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x03,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x11,0x00, 0x00,0x00,0x1e,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x65,0x00, 0x00,0x00,0x81,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0xba,0x04,0x04,0x04,0xd1,0x44, 0x3f,0x3d,0xe3,0xb0,0x9d,0x96,0xef,0xc2,0xa6,0x9c,0xf7,0xb2,0x95,0x8b,0xfc,0xb0, 0x94,0x8a,0xfd,0xb0,0x94,0x8a,0xfe,0xb0,0x94,0x8a,0xff,0xb1,0x95,0x8b,0xff,0xb2, 0x97,0x8c,0xff,0xb3,0x96,0x8c,0xff,0x9f,0x80,0x79,0xff,0x5a,0x50,0x56,0xff,0x3d, 0x3d,0x41,0xff,0x3e,0x3f,0x3f,0xff,0x41,0x41,0x42,0xff,0x3e,0x3f,0x3f,0xff,0x3f, 0x40,0x40,0xff,0x3b,0x3e,0x3c,0xff,0x3b,0x3d,0x3b,0xff,0x3b,0x3d,0x3b,0xff,0x38, 0x3b,0x38,0xff,0x39,0x3c,0x39,0xff,0x31,0x34,0x32,0xff,0x3e,0x3a,0x37,0xff,0xb1, 0x9a,0x94,0xff,0xd7,0xc3,0xbb,0xff,0xb8,0x9e,0x96,0xff,0xb7,0x9e,0x95,0xff,0xb0, 0x94,0x8a,0xff,0xa8,0x88,0x7d,0xff,0xbb,0xa1,0x99,0xff,0xb9,0x9f,0x96,0xff,0xb8, 0x9f,0x96,0xff,0xb9,0xa0,0x97,0xff,0xb8,0x9f,0x96,0xff,0xb9,0xa1,0x98,0xff,0xb9, 0xa0,0x97,0xff,0xb9,0xa0,0x97,0xff,0xba,0xa1,0x98,0xff,0xba,0xa1,0x98,0xff,0xba, 0xa1,0x98,0xff,0xba,0xa1,0x98,0xff,0xba,0xa1,0x98,0xff,0xbe,0xa5,0x9c,0xff,0xb7, 0x99,0x8f,0xff,0x88,0x6c,0x66,0xff,0x4e,0x47,0x4d,0xff,0x3f,0x3f,0x43,0xff,0x44, 0x43,0x45,0xff,0x36,0x3a,0x38,0xff,0x53,0x4c,0x52,0xff,0x93,0x6c,0x7c,0xff,0x67, 0x52,0x53,0xff,0x37,0x3b,0x3a,0xff,0x3b,0x3d,0x3c,0xff,0x3c,0x3d,0x3d,0xff,0x3c, 0x3d,0x3c,0xff,0x38,0x3b,0x38,0xff,0x37,0x3a,0x37,0xff,0x36,0x3a,0x37,0xff,0x21, 0x27,0x25,0xff,0x4d,0x41,0x3d,0xff,0xbb,0xa2,0x9a,0xff,0xd1,0xbc,0xb3,0xff,0xc1, 0xa9,0xa1,0xff,0xc1,0xa9,0xa1,0xff,0xc0,0xa8,0xa0,0xff,0xc6,0xb0,0xa6,0xff,0x9c, 0x7d,0x81,0xff,0x84,0x5d,0x5f,0xff,0xba,0xa1,0x99,0xff,0xcd,0xbb,0xb4,0xff,0xc2, 0xab,0xa3,0xff,0xc3,0xab,0xa3,0xff,0xc2,0xab,0xa3,0xff,0xc2,0xab,0xa3,0xff,0xc2, 0xab,0xa3,0xff,0xc2,0xab,0xa3,0xff,0xc1,0xa9,0xa1,0xff,0xc1,0xaa,0xa2,0xff,0xc0, 0xa9,0xa1,0xff,0xc0,0xa9,0xa1,0xff,0xc0,0xa9,0xa1,0xff,0xc1,0xa9,0xa1,0xff,0xca, 0xb1,0xa7,0xff,0x82,0x6e,0x70,0xff,0x3f,0x3d,0x3f,0xff,0x38,0x3b,0x39,0xff,0x3a, 0x3d,0x3a,0xff,0x2b,0x2f,0x2b,0xff,0x3a,0x32,0x3b,0xff,0xc4,0xb7,0xb8,0xff,0xb5, 0xa6,0x9d,0xff,0x81,0x6e,0x7a,0xff,0xbf,0xae,0xad,0xff,0xd7,0xc7,0xc0,0xff,0xc4, 0xaf,0xa7,0xff,0xc0,0xa8,0x9f,0xff,0xbe,0xa6,0x9e,0xff,0xbe,0xa6,0x9e,0xff,0xbf, 0xa7,0x9f,0xff,0xbe,0xa6,0x9d,0xff,0xc0,0xa8,0x9f,0xff,0xbf,0xa7,0x9f,0xff,0xbd, 0xa5,0x9e,0xff,0xbc,0xa4,0x9b,0xff,0xbc,0xa4,0x9c,0xff,0xbd,0xa5,0x9d,0xff,0xbd, 0xa5,0x9d,0xff,0xbc,0xa3,0x9b,0xff,0xbb,0xa3,0x9a,0xff,0xbc,0xa4,0x9c,0xff,0xbc, 0xa3,0x9a,0xff,0xc1,0xa9,0x9e,0xff,0x8b,0x6e,0x7c,0xff,0x48,0x44,0x48,0xff,0x3e, 0x40,0x40,0xff,0x40,0x40,0x41,0xff,0x2b,0x34,0x2b,0xff,0x29,0x2a,0x29,0xff,0x21, 0x21,0x21,0xff,0x20,0x22,0x23,0xff,0xbb,0xa8,0xa1,0xff,0xbd,0xa4,0x9c,0xff,0xb9, 0xa0,0x97,0xff,0xb8,0x9e,0x95,0xff,0xb9,0xa0,0x97,0xff,0xb9,0xa0,0x97,0xff,0xb8, 0x9f,0x96,0xff,0xb8,0x9f,0x96,0xff,0xb7,0x9c,0x93,0xff,0xb8,0x9f,0x96,0xff,0xb8, 0x9e,0x95,0xff,0xa8,0x8f,0x8f,0xff,0xb8,0x9f,0x96,0xff,0xc5,0xaf,0xa7,0xff,0xb7, 0x9d,0x94,0xff,0xb8,0x9d,0x94,0xff,0xb7,0x9d,0x94,0xff,0xb8,0x9d,0x94,0xff,0xb4, 0x99,0x8f,0xff,0xb6,0x9b,0x92,0xff,0xb5,0x9a,0x91,0xfe,0xb5,0x9a,0x91,0xfb,0xb6, 0x9b,0x92,0xf3,0x98,0x80,0x79,0xe3,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x9d,0x00, 0x00,0x00,0x76,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0x77,0x00, 0x00,0x00,0x9d,0x03,0x03,0x03,0xc4,0x26,0x27,0x26,0xe1,0x32,0x37,0x32,0xf3,0x60, 0x52,0x60,0xfa,0x62,0x54,0x62,0xfd,0x75,0x5f,0x73,0xff,0x78,0x5f,0x71,0xff,0x81, 0x64,0x5a,0xff,0xc6,0xaf,0xa6,0xff,0xb1,0x94,0x8a,0xff,0xb3,0x97,0x8e,0xff,0xb2, 0x96,0x8d,0xff,0xb3,0x97,0x8e,0xff,0xb2,0x96,0x8d,0xff,0xb0,0x94,0x8b,0xff,0xb2, 0x96,0x8c,0xff,0xb2,0x96,0x8d,0xff,0xb1,0x95,0x8b,0xff,0xb1,0x95,0x8b,0xff,0xb1, 0x95,0x8b,0xff,0xb1,0x95,0x8b,0xff,0xb2,0x96,0x8c,0xff,0xb1,0x95,0x8b,0xff,0xb1, 0x95,0x8b,0xff,0xb1,0x95,0x8c,0xff,0xb0,0x95,0x8a,0xff,0xac,0x8f,0x85,0xff,0x9e, 0x81,0x80,0xff,0x81,0x5e,0x69,0xff,0x86,0x66,0x72,0xff,0x8b,0x68,0x64,0xff,0x66, 0x4e,0x51,0xff,0x48,0x3f,0x4b,0xff,0x51,0x46,0x51,0xff,0x66,0x56,0x66,0xff,0x6a, 0x59,0x6a,0xff,0x60,0x53,0x60,0xff,0x54,0x4b,0x53,0xff,0x6e,0x5a,0x6d,0xff,0x68, 0x57,0x68,0xff,0x66,0x56,0x65,0xff,0x5e,0x51,0x5f,0xff,0x61,0x52,0x61,0xff,0x9d, 0x8a,0x8d,0xff,0xbf,0xa2,0x9a,0xff,0x82,0x64,0x66,0xff,0x59,0x52,0x53,0xff,0x4b, 0x49,0x43,0xff,0x4f,0x4b,0x48,0xff,0x4c,0x4a,0x44,0xff,0x43,0x45,0x3d,0xff,0x5f, 0x51,0x4d,0xff,0xa4,0x7e,0x7b,0xff,0xb0,0x91,0x86,0xff,0xac,0x8d,0x83,0xff,0xac, 0x8d,0x83,0xff,0xac,0x8d,0x83,0xff,0xac,0x8d,0x83,0xff,0xab,0x8c,0x82,0xff,0xab, 0x8c,0x82,0xff,0xac,0x8d,0x83,0xff,0xaa,0x8b,0x81,0xff,0xaa,0x8b,0x81,0xff,0xac, 0x8d,0x83,0xff,0xad,0x8d,0x83,0xff,0xae,0x8e,0x82,0xff,0xa9,0x89,0x7d,0xff,0x8b, 0x6e,0x66,0xff,0x70,0x59,0x63,0xff,0x69,0x57,0x6c,0xff,0x67,0x56,0x68,0xff,0x68, 0x57,0x67,0xff,0x6a,0x58,0x69,0xff,0x6b,0x59,0x6a,0xff,0x6a,0x58,0x69,0xff,0x6a, 0x59,0x69,0xff,0x6c,0x59,0x6b,0xff,0x6c,0x59,0x6b,0xff,0x6b,0x59,0x6a,0xff,0x6b, 0x59,0x6a,0xff,0x6b,0x59,0x6a,0xff,0x6d,0x5a,0x6c,0xff,0x6b,0x59,0x6a,0xff,0x6b, 0x59,0x6a,0xff,0x6d,0x5a,0x6c,0xff,0x6e,0x5b,0x6d,0xff,0x6f,0x5b,0x6e,0xff,0x6e, 0x5a,0x6c,0xff,0x6c,0x59,0x6e,0xff,0x73,0x5e,0x6f,0xff,0x90,0x70,0x6c,0xff,0xab, 0x8a,0x7e,0xff,0xac,0x8d,0x82,0xff,0xac,0x8d,0x80,0xff,0x8c,0x69,0x6c,0xff,0x9c, 0x7b,0x76,0xff,0xab,0x8c,0x80,0xff,0xa8,0x89,0x7e,0xff,0xa7,0x87,0x7d,0xff,0xa8, 0x88,0x7e,0xff,0xa7,0x87,0x7d,0xff,0xa6,0x86,0x7c,0xff,0xa6,0x86,0x7c,0xff,0xa6, 0x85,0x7b,0xff,0xa6,0x85,0x7b,0xff,0xa6,0x85,0x7b,0xff,0xa6,0x86,0x7c,0xff,0xa6, 0x85,0x7b,0xff,0xa6,0x85,0x7a,0xff,0xa5,0x84,0x7a,0xff,0xa5,0x84,0x7a,0xff,0xa3, 0x82,0x78,0xff,0xa3,0x82,0x77,0xfe,0xa2,0x82,0x77,0xfd,0xad,0x89,0x7e,0xf8,0x88, 0x6c,0x64,0xee,0x19,0x13,0x12,0xde,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xa3,0x00, 0x00,0x00,0x7e,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x20,0x00, 0x00,0x00,0x10,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x0b,0x00, 0x00,0x00,0x14,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x50,0x00, 0x00,0x00,0x6e,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0xc5,0x0c, 0x0b,0x0b,0xd8,0x6d,0x63,0x5e,0xe7,0xb6,0x9f,0x96,0xf2,0xbd,0xa0,0x97,0xf9,0xb0, 0x94,0x8a,0xfd,0xb0,0x93,0x89,0xfe,0xb0,0x94,0x8a,0xff,0xb0,0x94,0x8a,0xff,0xb1, 0x95,0x8b,0xff,0xb3,0x96,0x8c,0xff,0xb0,0x92,0x88,0xff,0x91,0x74,0x6c,0xff,0x4f, 0x49,0x4f,0xff,0x40,0x3f,0x44,0xff,0x3f,0x40,0x40,0xff,0x41,0x41,0x42,0xff,0x40, 0x40,0x40,0xff,0x3e,0x3f,0x3f,0xff,0x3d,0x3e,0x3e,0xff,0x3c,0x3e,0x3c,0xff,0x3b, 0x3d,0x3b,0xff,0x3b,0x3d,0x3b,0xff,0x39,0x3c,0x3a,0xff,0x34,0x38,0x35,0xff,0x37, 0x32,0x33,0xff,0x88,0x71,0x71,0xff,0xe2,0xd2,0xca,0xff,0xbb,0xa2,0x9a,0xff,0xb5, 0x9a,0x91,0xff,0xb8,0x9f,0x96,0xff,0xae,0x91,0x88,0xff,0xa2,0x81,0x77,0xff,0xbb, 0xa2,0x99,0xff,0xb8,0xa0,0x97,0xff,0xb8,0x9f,0x96,0xff,0xb8,0x9f,0x96,0xff,0xba, 0xa2,0x98,0xff,0xba,0xa1,0x98,0xff,0xba,0xa0,0x97,0xff,0xbb,0xa2,0x99,0xff,0xbd, 0xa4,0x9b,0xff,0xba,0xa2,0x98,0xff,0xb9,0xa0,0x97,0xff,0xbb,0xa3,0x9a,0xff,0xbf, 0xa6,0x9d,0xff,0xac,0x8e,0x8c,0xff,0x75,0x5b,0x61,0xff,0x49,0x44,0x48,0xff,0x42, 0x41,0x46,0xff,0x45,0x43,0x45,0xff,0x46,0x44,0x47,0xff,0x33,0x38,0x35,0xff,0x53, 0x49,0x4b,0xff,0x93,0x6e,0x81,0xff,0x63,0x54,0x5d,0xff,0x37,0x3b,0x38,0xff,0x3c, 0x3d,0x3c,0xff,0x3d,0x3e,0x3e,0xff,0x3b,0x3c,0x3b,0xff,0x39,0x3c,0x3a,0xff,0x39, 0x3c,0x3a,0xff,0x29,0x2f,0x2b,0xff,0x38,0x31,0x37,0xff,0x9a,0x83,0x85,0xff,0xd0, 0xb9,0xae,0xff,0xc2,0xaa,0xa2,0xff,0xc2,0xab,0xa3,0xff,0xc2,0xaa,0xa2,0xff,0xc3, 0xab,0xa3,0xff,0xc8,0xb2,0xa9,0xff,0xa7,0x87,0x7f,0xff,0xa5,0x85,0x7c,0xff,0xc8, 0xb3,0xac,0xff,0xc8,0xb2,0xab,0xff,0xc1,0xaa,0xa2,0xff,0xc3,0xac,0xa4,0xff,0xc2, 0xab,0xa3,0xff,0xc3,0xac,0xa4,0xff,0xc3,0xac,0xa4,0xff,0xc3,0xac,0xa4,0xff,0xc3, 0xac,0xa4,0xff,0xc3,0xac,0xa4,0xff,0xc2,0xaa,0xa2,0xff,0xc2,0xab,0xa3,0xff,0xc2, 0xac,0xa4,0xff,0xc6,0xaf,0xa7,0xff,0xb4,0x92,0x89,0xff,0x5c,0x51,0x50,0xff,0x35, 0x39,0x39,0xff,0x39,0x3c,0x3a,0xff,0x39,0x3c,0x39,0xff,0x1e,0x25,0x23,0xff,0x7d, 0x68,0x63,0xff,0xd0,0xbc,0xb7,0xff,0xd4,0xbe,0xb5,0xff,0xb6,0xa0,0x9c,0xff,0xaf, 0x93,0x8a,0xff,0xc7,0xb3,0xab,0xff,0xd0,0xc0,0xba,0xff,0xd2,0xc1,0xbb,0xff,0xc8, 0xb3,0xaa,0xff,0xbf,0xa7,0x9f,0xff,0xbf,0xa7,0x9f,0xff,0xbf,0xa8,0xa0,0xff,0xc0, 0xa8,0xa0,0xff,0xbf,0xa8,0xa0,0xff,0xbe,0xa6,0x9e,0xff,0xbd,0xa5,0x9d,0xff,0xbe, 0xa6,0x9e,0xff,0xbe,0xa6,0x9e,0xff,0xbd,0xa5,0x9d,0xff,0xbe,0xa6,0x9e,0xff,0xbd, 0xa5,0x9d,0xff,0xbc,0xa4,0x9c,0xff,0xbd,0xa5,0x9d,0xff,0xc5,0xac,0xa2,0xff,0x6b, 0x5e,0x6a,0xff,0x42,0x41,0x43,0xff,0x40,0x40,0x40,0xff,0x3f,0x40,0x40,0xff,0x37, 0x39,0x38,0xff,0x27,0x27,0x27,0xff,0x1d,0x1f,0x1d,0xff,0x44,0x38,0x45,0xff,0xbf, 0xab,0xa5,0xff,0xbd,0xa4,0x9c,0xff,0xba,0xa1,0x98,0xff,0xba,0xa1,0x98,0xff,0xb8, 0x9e,0x95,0xff,0xba,0xa1,0x98,0xff,0xb7,0x9d,0x94,0xff,0xb9,0xa0,0x97,0xff,0xba, 0xa1,0x99,0xff,0xb8,0x9e,0x95,0xff,0xb8,0x9e,0x95,0xff,0xbe,0xa3,0x98,0xff,0xbc, 0xa4,0x9b,0xff,0xba,0xa0,0x98,0xff,0xb7,0x9d,0x94,0xff,0xb7,0x9d,0x94,0xff,0xb7, 0x9d,0x94,0xff,0xb8,0x9e,0x95,0xff,0xb7,0x9c,0x93,0xff,0xb8,0x9e,0x95,0xff,0xb5, 0x9a,0x91,0xfe,0xb7,0x9d,0x94,0xfc,0xb6,0x9b,0x92,0xf5,0x9f,0x87,0x80,0xe5,0x00, 0x00,0x00,0xc8,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x5c,0x00, 0x00,0x00,0x57,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x92,0x01,0x00,0x01,0xba,0x0a, 0x08,0x09,0xda,0x1f,0x1c,0x1f,0xee,0x63,0x56,0x64,0xf9,0x62,0x54,0x62,0xfe,0x77, 0x5f,0x74,0xff,0x77,0x5f,0x72,0xff,0x6c,0x52,0x52,0xff,0xcc,0xb6,0xae,0xff,0xb3, 0x97,0x8d,0xff,0xb1,0x95,0x8c,0xff,0xb1,0x95,0x8c,0xff,0xb2,0x96,0x8d,0xff,0xb2, 0x97,0x8e,0xff,0xb2,0x96,0x8d,0xff,0xb3,0x97,0x8e,0xff,0xb1,0x95,0x8b,0xff,0xb1, 0x95,0x8b,0xff,0xb2,0x96,0x8d,0xff,0xb3,0x97,0x8d,0xff,0xb1,0x95,0x8b,0xff,0xb2, 0x96,0x8d,0xff,0xb1,0x95,0x8b,0xff,0xb2,0x96,0x8d,0xff,0xb1,0x95,0x8b,0xff,0xb1, 0x95,0x8b,0xff,0xb3,0x97,0x8c,0xff,0xb2,0x97,0x8b,0xff,0xa9,0x8b,0x83,0xff,0x9e, 0x7f,0x79,0xff,0x9f,0x7b,0x72,0xff,0x8c,0x70,0x6d,0xff,0x42,0x37,0x46,0xff,0x44, 0x3a,0x44,0xff,0x5d,0x4c,0x5c,0xff,0x6b,0x59,0x69,0xff,0x5b,0x50,0x5c,0xff,0x5c, 0x50,0x5c,0xff,0x6c,0x59,0x6b,0xff,0x69,0x58,0x69,0xff,0x69,0x58,0x69,0xff,0x69, 0x59,0x69,0xff,0x62,0x53,0x63,0xff,0x6a,0x5a,0x6a,0xff,0x61,0x56,0x5b,0xff,0x24, 0x2b,0x22,0xff,0x14,0x21,0x19,0xff,0x18,0x25,0x1b,0xff,0x3f,0x3d,0x41,0xff,0x80, 0x6a,0x72,0xff,0x9c,0x84,0x76,0xff,0x7b,0x69,0x69,0xff,0x79,0x62,0x67,0xff,0xaf, 0x8f,0x82,0xff,0xad,0x8f,0x85,0xff,0xad,0x8f,0x85,0xff,0xad,0x8f,0x85,0xff,0xad, 0x8e,0x83,0xff,0xac,0x8d,0x83,0xff,0xac,0x8d,0x83,0xff,0xac,0x8d,0x83,0xff,0xac, 0x8d,0x83,0xff,0xab,0x8c,0x82,0xff,0xab,0x8c,0x82,0xff,0xaa,0x8b,0x81,0xff,0xaa, 0x8b,0x81,0xff,0xad,0x8e,0x85,0xff,0xad,0x8e,0x82,0xff,0x93,0x77,0x6c,0xff,0x74, 0x5d,0x64,0xff,0x68,0x55,0x68,0xff,0x67,0x56,0x68,0xff,0x6a,0x58,0x6a,0xff,0x6b, 0x59,0x6a,0xff,0x6b,0x59,0x6a,0xff,0x69,0x57,0x68,0xff,0x6b,0x59,0x6a,0xff,0x70, 0x5b,0x6f,0xff,0x60,0x52,0x60,0xff,0x63,0x54,0x62,0xff,0x6c,0x5a,0x6b,0xff,0x6b, 0x59,0x6a,0xff,0x6d,0x5a,0x6c,0xff,0x6d,0x5a,0x6c,0xff,0x6d,0x5a,0x6c,0xff,0x70, 0x5c,0x6f,0xff,0x6e,0x5b,0x6d,0xff,0x6f,0x5b,0x6e,0xff,0x71,0x5c,0x6f,0xff,0x70, 0x5b,0x70,0xff,0x72,0x5c,0x6f,0xff,0x83,0x63,0x6a,0xff,0xa6,0x87,0x80,0xff,0xb1, 0x92,0x88,0xff,0xa7,0x87,0x7e,0xff,0xa7,0x87,0x7d,0xff,0xa8,0x89,0x7e,0xff,0xa9, 0x8a,0x7f,0xff,0xa9,0x8a,0x7f,0xff,0xa8,0x89,0x7e,0xff,0xa6,0x86,0x7c,0xff,0xa7, 0x87,0x7d,0xff,0xa8,0x88,0x7e,0xff,0xa7,0x87,0x7d,0xff,0xa6,0x85,0x7b,0xff,0xa6, 0x85,0x7b,0xff,0xa6,0x86,0x7c,0xff,0xa6,0x85,0x7b,0xff,0xa6,0x86,0x7c,0xff,0xa6, 0x85,0x7b,0xff,0xa5,0x84,0x7a,0xff,0xa4,0x83,0x78,0xff,0xa5,0x84,0x7a,0xff,0xa3, 0x82,0x78,0xfe,0xa3,0x82,0x77,0xfc,0xaa,0x88,0x7c,0xf7,0x7b,0x62,0x59,0xed,0x11, 0x0e,0x0c,0xdc,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x77,0x00, 0x00,0x00,0x54,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x0f,0x00, 0x00,0x00,0x07,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x05,0x00, 0x00,0x00,0x0c,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x3d,0x00, 0x00,0x00,0x5a,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0xb4,0x01, 0x01,0x01,0xcd,0x25,0x20,0x1f,0xe0,0x91,0x7f,0x78,0xed,0xb8,0x9d,0x93,0xf5,0xb6, 0x98,0x8e,0xfa,0xb0,0x93,0x89,0xfc,0xb0,0x94,0x89,0xfe,0xb0,0x94,0x8a,0xff,0xb0, 0x94,0x8a,0xff,0xb1,0x95,0x8a,0xff,0xb4,0x98,0x8c,0xff,0xaa,0x8b,0x84,0xff,0x80, 0x62,0x60,0xff,0x48,0x45,0x4a,0xff,0x46,0x43,0x48,0xff,0x42,0x41,0x43,0xff,0x40, 0x40,0x40,0xff,0x40,0x40,0x40,0xff,0x3e,0x3f,0x3f,0xff,0x3e,0x3f,0x3f,0xff,0x3e, 0x3f,0x3f,0xff,0x3c,0x3e,0x3c,0xff,0x3a,0x3c,0x3a,0xff,0x37,0x3b,0x37,0xff,0x35, 0x39,0x35,0xff,0x31,0x33,0x33,0xff,0x64,0x5a,0x5d,0xff,0xd8,0xc2,0xbb,0xff,0xc2, 0xab,0xa3,0xff,0xb6,0x9b,0x92,0xff,0xb8,0x9d,0x94,0xff,0xb9,0x9f,0x96,0xff,0xad, 0x8f,0x85,0xff,0x8d,0x68,0x65,0xff,0x96,0x78,0x7e,0xff,0xc2,0xaa,0x9d,0xff,0xbd, 0xa4,0x99,0xff,0xbd,0xa3,0x99,0xff,0xba,0xa1,0x98,0xff,0xb1,0x94,0x8c,0xff,0xb0, 0x91,0x86,0xff,0xb5,0x9d,0x95,0xff,0xb0,0x98,0x94,0xff,0xba,0xa0,0x98,0xff,0xc1, 0xa7,0x9e,0xff,0xbe,0xa4,0x9b,0xff,0x9c,0x83,0x88,0xff,0x62,0x53,0x62,0xff,0x47, 0x43,0x48,0xff,0x49,0x45,0x4b,0xff,0x48,0x45,0x49,0xff,0x45,0x43,0x46,0xff,0x46, 0x43,0x47,0xff,0x34,0x3a,0x38,0xff,0x5a,0x4d,0x47,0xff,0x90,0x6c,0x76,0xff,0x57, 0x4e,0x5b,0xff,0x38,0x3c,0x3a,0xff,0x3d,0x3e,0x3d,0xff,0x3b,0x3c,0x3b,0xff,0x39, 0x3c,0x3a,0xff,0x3a,0x3d,0x3b,0xff,0x31,0x35,0x31,0xff,0x2a,0x2d,0x2e,0xff,0x6b, 0x58,0x5a,0xff,0xa6,0x84,0x7f,0xff,0xb4,0x99,0x92,0xff,0xc4,0xae,0xa5,0xff,0xc5, 0xae,0xa6,0xff,0xc4,0xae,0xa6,0xff,0xc7,0xaf,0xa6,0xff,0xb3,0x98,0x91,0xff,0x9b, 0x7a,0x70,0xff,0xb6,0x9b,0x91,0xff,0xc9,0xb3,0xac,0xff,0xc4,0xad,0xa5,0xff,0xc3, 0xad,0xa5,0xff,0xc4,0xad,0xa5,0xff,0xc4,0xae,0xa6,0xff,0xc3,0xad,0xa5,0xff,0xc4, 0xad,0xa5,0xff,0xc3,0xad,0xa5,0xff,0xc2,0xac,0xa4,0xff,0xc4,0xad,0xa5,0xff,0xc4, 0xad,0xa5,0xff,0xc4,0xae,0xa6,0xff,0xc3,0xad,0xa5,0xff,0xcd,0xb4,0xa8,0xff,0x83, 0x70,0x75,0xff,0x41,0x3f,0x43,0xff,0x38,0x3b,0x39,0xff,0x3a,0x3e,0x3c,0xff,0x2d, 0x31,0x2d,0xff,0x28,0x26,0x27,0xff,0xb6,0xad,0xa9,0xff,0xda,0xc9,0xc3,0xff,0xc5, 0xaf,0xa7,0xff,0xbe,0xa4,0x9a,0xff,0x98,0x76,0x6f,0xff,0x9b,0x79,0x6f,0xff,0x95, 0x71,0x6d,0xff,0xab,0x8e,0x87,0xff,0xc6,0xb1,0xac,0xff,0xc5,0xb0,0xa8,0xff,0xc5, 0xaf,0xa7,0xff,0xc0,0xa9,0xa1,0xff,0xc0,0xa8,0xa0,0xff,0xbf,0xa8,0xa0,0xff,0xbf, 0xa8,0xa0,0xff,0xbf,0xa8,0xa0,0xff,0xbf,0xa8,0xa0,0xff,0xbc,0xa5,0x9c,0xff,0xbe, 0xa6,0x9e,0xff,0xbd,0xa5,0x9d,0xff,0xbd,0xa5,0x9d,0xff,0xbe,0xa6,0x9e,0xff,0xbe, 0xa6,0x9f,0xff,0xbd,0x9e,0x93,0xff,0x52,0x4d,0x4e,0xff,0x3f,0x3f,0x40,0xff,0x40, 0x40,0x41,0xff,0x2d,0x34,0x2e,0xff,0x41,0x3a,0x40,0xff,0x27,0x26,0x27,0xff,0x1a, 0x1e,0x1b,0xff,0x4e,0x39,0x3c,0xff,0xbf,0xa8,0xa2,0xff,0xbb,0xa2,0x99,0xff,0xba, 0xa1,0x98,0xff,0xba,0xa1,0x98,0xff,0xb8,0x9e,0x95,0xff,0xb9,0xa0,0x97,0xff,0xb9, 0xa0,0x97,0xff,0xb9,0xa0,0x97,0xff,0xb9,0xa0,0x97,0xff,0xb9,0xa0,0x97,0xff,0xb9, 0xa0,0x97,0xff,0xae,0x96,0x90,0xff,0xba,0xa1,0x98,0xff,0xb8,0x9d,0x94,0xff,0xb8, 0x9e,0x95,0xff,0xb7,0x9d,0x94,0xff,0xb9,0xa0,0x97,0xff,0xb7,0x9d,0x94,0xff,0xb7, 0x9d,0x94,0xff,0xb7,0x9d,0x94,0xff,0xb7,0x9d,0x94,0xfe,0xb7,0x9d,0x94,0xfc,0xb7, 0x9d,0x94,0xf6,0xa8,0x8e,0x85,0xe8,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0xa8,0x00, 0x00,0x00,0x80,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x65,0x00, 0x00,0x00,0x88,0x00,0x00,0x00,0xb1,0x02,0x02,0x02,0xd4,0x24,0x21,0x25,0xeb,0x63, 0x55,0x63,0xf8,0x6a,0x58,0x69,0xfd,0x7a,0x62,0x77,0xfe,0x7a,0x60,0x75,0xff,0x6c, 0x57,0x63,0xff,0xcc,0xb6,0xad,0xff,0xb1,0x94,0x8b,0xff,0x9e,0x7c,0x71,0xff,0xa8, 0x88,0x7d,0xff,0xad,0x8f,0x84,0xff,0xab,0x8d,0x83,0xff,0xb0,0x94,0x8a,0xff,0xb3, 0x97,0x8e,0xff,0xb2,0x96,0x8d,0xff,0xb4,0x98,0x8f,0xff,0xb2,0x95,0x8c,0xff,0xb3, 0x97,0x8e,0xff,0xb4,0x98,0x8f,0xff,0xb2,0x97,0x8d,0xff,0xb2,0x96,0x8c,0xff,0xb2, 0x96,0x8d,0xff,0xb2,0x96,0x8d,0xff,0xb3,0x97,0x8d,0xff,0xb1,0x95,0x8b,0xff,0xb1, 0x96,0x8c,0xff,0xb3,0x97,0x8c,0xff,0xb2,0x94,0x8a,0xff,0xb4,0x97,0x8d,0xff,0xa2, 0x85,0x7f,0xff,0x57,0x41,0x48,0xff,0x34,0x2d,0x36,0xff,0x4f,0x42,0x4f,0xff,0x5e, 0x52,0x5e,0xff,0x50,0x4a,0x51,0xff,0x6b,0x59,0x6b,0xff,0x6a,0x58,0x69,0xff,0x6a, 0x58,0x69,0xff,0x6a,0x58,0x69,0xff,0x6b,0x59,0x6a,0xff,0x6a,0x58,0x69,0xff,0x6a, 0x57,0x69,0xff,0x48,0x44,0x4a,0xff,0x06,0x17,0x0a,0xff,0x1a,0x21,0x1c,0xff,0x77, 0x69,0x66,0xff,0xb3,0x95,0x8b,0xff,0xb0,0x91,0x89,0xff,0xb5,0x95,0x8b,0xff,0xb0, 0x93,0x89,0xff,0x9e,0x7e,0x79,0xff,0x94,0x6f,0x6a,0xff,0xa3,0x82,0x77,0xff,0xab, 0x8d,0x82,0xff,0xae,0x90,0x83,0xff,0xb1,0x91,0x86,0xff,0xae,0x8f,0x84,0xff,0xad, 0x8f,0x84,0xff,0xad,0x8f,0x84,0xff,0xad,0x8e,0x84,0xff,0xab,0x8c,0x82,0xff,0xac, 0x8d,0x83,0xff,0xac,0x8d,0x83,0xff,0xab,0x8c,0x82,0xff,0xab,0x8c,0x82,0xff,0xae, 0x8e,0x84,0xff,0xad,0x8d,0x82,0xff,0xa4,0x86,0x7c,0xff,0x84,0x68,0x69,0xff,0x6b, 0x54,0x60,0xff,0x69,0x57,0x69,0xff,0x69,0x58,0x6a,0xff,0x69,0x58,0x69,0xff,0x6b, 0x59,0x6a,0xff,0x6b,0x59,0x6a,0xff,0x6d,0x5a,0x6c,0xff,0x6b,0x59,0x6a,0xff,0x69, 0x58,0x68,0xff,0x6c,0x5a,0x6b,0xff,0x6d,0x5a,0x6c,0xff,0x6e,0x5b,0x6d,0xff,0x6e, 0x5a,0x6d,0xff,0x6d,0x5b,0x6c,0xff,0x6f,0x5b,0x6e,0xff,0x6f,0x5b,0x6e,0xff,0x70, 0x5b,0x6e,0xff,0x73,0x5d,0x71,0xff,0x74,0x5e,0x72,0xff,0x73,0x5d,0x72,0xff,0x71, 0x5b,0x6f,0xff,0x7c,0x61,0x74,0xff,0x93,0x76,0x75,0xff,0xac,0x8e,0x82,0xff,0xaf, 0x90,0x85,0xff,0xaa,0x8b,0x81,0xff,0xaa,0x8b,0x81,0xff,0xaa,0x8b,0x81,0xff,0xa9, 0x89,0x7f,0xff,0xa8,0x88,0x7e,0xff,0xa8,0x88,0x7e,0xff,0xa8,0x88,0x7e,0xff,0xa7, 0x87,0x7d,0xff,0xa7,0x87,0x7d,0xff,0xa7,0x87,0x7d,0xff,0xa7,0x87,0x7d,0xff,0xa6, 0x86,0x7c,0xff,0xa6,0x85,0x7b,0xff,0xa6,0x85,0x7b,0xff,0xa6,0x85,0x7b,0xff,0xa6, 0x85,0x7b,0xff,0xa5,0x84,0x7a,0xff,0xa3,0x82,0x77,0xfe,0xa3,0x82,0x77,0xfd,0xa4, 0x83,0x78,0xfb,0xaa,0x88,0x7c,0xf5,0x6c,0x56,0x4f,0xeb,0x0b,0x08,0x08,0xd7,0x00, 0x00,0x00,0xbc,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x52,0x00, 0x00,0x00,0x32,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x06,0x00, 0x00,0x00,0x02,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x03,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x2a,0x00, 0x00,0x00,0x42,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x9f,0x00, 0x00,0x00,0xbb,0x03,0x03,0x04,0xd3,0x3c,0x36,0x33,0xe4,0xad,0x95,0x8d,0xf1,0xb7, 0x9b,0x91,0xf7,0xb0,0x92,0x88,0xfc,0xaf,0x92,0x88,0xfd,0xb0,0x94,0x8a,0xfe,0xaf, 0x92,0x88,0xff,0xb0,0x94,0x8a,0xff,0xb1,0x95,0x8a,0xff,0xb4,0x97,0x8c,0xff,0xa5, 0x88,0x86,0xff,0x70,0x58,0x63,0xff,0x45,0x42,0x47,0xff,0x48,0x44,0x49,0xff,0x46, 0x44,0x46,0xff,0x42,0x42,0x43,0xff,0x40,0x41,0x41,0xff,0x3e,0x3f,0x3f,0xff,0x3e, 0x3f,0x3f,0xff,0x3e,0x3f,0x3f,0xff,0x3c,0x3e,0x3d,0xff,0x3c,0x3e,0x3c,0xff,0x3a, 0x3c,0x3a,0xff,0x34,0x39,0x35,0xff,0x24,0x2c,0x24,0xff,0x44,0x3b,0x39,0xff,0xa0, 0x89,0x81,0xff,0xc4,0xaa,0xa1,0xff,0xb5,0x99,0x90,0xff,0xb6,0x9c,0x93,0xff,0xb7, 0x9d,0x94,0xff,0xba,0xa0,0x96,0xff,0xb2,0x95,0x8c,0xff,0x85,0x67,0x6c,0xff,0x80, 0x68,0x79,0xff,0xae,0x96,0x91,0xff,0xa6,0x8f,0x8c,0xff,0xab,0x93,0x90,0xff,0x99, 0x7e,0x82,0xff,0x83,0x63,0x6d,0xff,0xa4,0x84,0x7b,0xff,0x90,0x74,0x70,0xff,0x70, 0x56,0x64,0xff,0x97,0x77,0x7a,0xff,0xab,0x95,0x8b,0xff,0x8a,0x75,0x74,0xff,0x58, 0x4c,0x5a,0xff,0x47,0x44,0x49,0xff,0x4a,0x46,0x4b,0xff,0x4a,0x46,0x4b,0xff,0x48, 0x45,0x48,0xff,0x45,0x43,0x46,0xff,0x47,0x44,0x48,0xff,0x2d,0x34,0x31,0xff,0x58, 0x4b,0x42,0xff,0x87,0x68,0x6c,0xff,0x43,0x43,0x49,0xff,0x3b,0x3d,0x3c,0xff,0x3b, 0x3e,0x3c,0xff,0x3b,0x3c,0x3c,0xff,0x3a,0x3c,0x3b,0xff,0x38,0x3d,0x39,0xff,0x28, 0x2b,0x29,0xff,0x5d,0x4e,0x57,0xff,0x8f,0x74,0x82,0xff,0x81,0x69,0x7a,0xff,0x92, 0x71,0x72,0xff,0xb0,0x91,0x84,0xff,0xc4,0xac,0xa2,0xff,0xc9,0xb2,0xa7,0xff,0x9b, 0x82,0x75,0xff,0x63,0x4c,0x53,0xff,0x95,0x7c,0x80,0xff,0xc4,0xad,0xa1,0xff,0xc4, 0xae,0xa5,0xff,0xc4,0xae,0xa7,0xff,0xc5,0xaf,0xa7,0xff,0xc4,0xae,0xa6,0xff,0xc5, 0xaf,0xa8,0xff,0xc4,0xad,0xa6,0xff,0xc3,0xad,0xa5,0xff,0xc5,0xae,0xa6,0xff,0xc5, 0xae,0xa6,0xff,0xc3,0xad,0xa5,0xff,0xc3,0xac,0xa4,0xff,0xc3,0xad,0xa4,0xff,0xca, 0xb5,0xad,0xff,0xb5,0x95,0x8f,0xff,0x5a,0x50,0x50,0xff,0x36,0x3a,0x39,0xff,0x3a, 0x3c,0x3a,0xff,0x3b,0x3e,0x3c,0xff,0x1d,0x24,0x21,0xff,0x6c,0x52,0x51,0xff,0xd0, 0xbd,0xb9,0xff,0xd2,0xc0,0xba,0xff,0xb6,0x9a,0x90,0xff,0xb2,0x93,0x86,0xff,0x89, 0x71,0x7c,0xff,0xa4,0x89,0x87,0xff,0xac,0x8d,0x82,0xff,0xa3,0x81,0x76,0xff,0x91, 0x6d,0x6d,0xff,0xa8,0x89,0x82,0xff,0xc8,0xb5,0xad,0xff,0xc7,0xb2,0xab,0xff,0xc0, 0xa9,0xa1,0xff,0xc1,0xa9,0xa1,0xff,0xbf,0xa8,0xa0,0xff,0xbf,0xa8,0xa0,0xff,0xbf, 0xa8,0xa0,0xff,0xbf,0xa8,0xa0,0xff,0xbe,0xa6,0x9e,0xff,0xbe,0xa6,0x9e,0xff,0xbf, 0xa8,0xa0,0xff,0xbd,0xa6,0x9e,0xff,0xc0,0xa9,0xa1,0xff,0xa8,0x83,0x79,0xff,0x4d, 0x48,0x47,0xff,0x3f,0x3f,0x40,0xff,0x43,0x42,0x43,0xff,0x1f,0x27,0x1f,0xff,0x45, 0x3a,0x44,0xff,0x26,0x25,0x26,0xff,0x18,0x1c,0x1a,0xff,0x58,0x46,0x3f,0xff,0xbb, 0xa3,0x9b,0xff,0xbc,0xa3,0x9b,0xff,0xbb,0xa2,0x9a,0xff,0xba,0xa1,0x98,0xff,0xba, 0xa1,0x98,0xff,0xba,0xa1,0x98,0xff,0xb9,0xa0,0x97,0xff,0xba,0xa1,0x98,0xff,0xb9, 0xa0,0x97,0xff,0xb9,0xa0,0x97,0xff,0xc0,0xa6,0x9b,0xff,0x72,0x5b,0x6b,0xff,0xbe, 0xa7,0x9f,0xff,0xb8,0x9e,0x95,0xff,0xb8,0x9e,0x95,0xff,0xb8,0x9e,0x95,0xff,0xb8, 0x9f,0x96,0xff,0xb7,0x9e,0x95,0xff,0xb8,0x9e,0x95,0xff,0xb7,0x9d,0x94,0xff,0xb7, 0x9d,0x94,0xff,0xb6,0x9b,0x92,0xfd,0xb6,0x9b,0x92,0xf8,0xb0,0x95,0x8c,0xeb,0x00, 0x00,0x00,0xd5,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x65,0x00, 0x00,0x00,0x54,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0xa8,0x04, 0x04,0x04,0xce,0x3f,0x39,0x3f,0xe9,0x6a,0x59,0x6a,0xf7,0x77,0x60,0x74,0xfd,0x78, 0x61,0x75,0xfe,0x7b,0x61,0x76,0xff,0x71,0x5d,0x6b,0xff,0xba,0x9f,0x93,0xff,0xa5, 0x85,0x7a,0xff,0xb1,0x94,0x8a,0xff,0xb2,0x96,0x8c,0xff,0xa3,0x82,0x77,0xff,0x9d, 0x7a,0x70,0xff,0xa7,0x88,0x7d,0xff,0xb4,0x99,0x90,0xff,0xb4,0x99,0x90,0xff,0xb5, 0x98,0x8d,0xff,0xac,0x87,0x7d,0xff,0xb1,0x90,0x85,0xff,0xb1,0x93,0x88,0xff,0xaf, 0x91,0x88,0xff,0xb0,0x94,0x8a,0xff,0xb2,0x96,0x8d,0xff,0xb2,0x96,0x8c,0xff,0xb1, 0x95,0x8b,0xff,0xb3,0x97,0x8d,0xff,0xb1,0x95,0x8c,0xff,0xb3,0x97,0x8d,0xff,0xb1, 0x95,0x8c,0xff,0xb4,0x98,0x8f,0xff,0xb0,0x92,0x87,0xff,0x82,0x68,0x63,0xff,0x33, 0x2b,0x39,0xff,0x42,0x37,0x42,0xff,0x4e,0x45,0x4e,0xff,0x4e,0x49,0x4f,0xff,0x6c, 0x5a,0x6c,0xff,0x6a,0x58,0x69,0xff,0x6a,0x58,0x69,0xff,0x6b,0x58,0x6a,0xff,0x6d, 0x59,0x6c,0xff,0x6d,0x5a,0x6c,0xff,0x6f,0x5b,0x6e,0xff,0x4d,0x46,0x4d,0xff,0x01, 0x13,0x06,0xff,0x38,0x35,0x2e,0xff,0xbb,0x9a,0x93,0xff,0xc3,0xa8,0x9e,0xff,0xb2, 0x96,0x8c,0xff,0xae,0x90,0x86,0xff,0xb0,0x91,0x87,0xff,0xb0,0x91,0x88,0xff,0xa8, 0x88,0x7e,0xff,0x9d,0x7a,0x6f,0xff,0x99,0x74,0x6a,0xff,0x9a,0x78,0x70,0xff,0x9d, 0x82,0x7e,0xff,0xa9,0x8c,0x84,0xff,0xb0,0x92,0x86,0xff,0xac,0x8e,0x83,0xff,0xad, 0x8e,0x84,0xff,0xad,0x8f,0x84,0xff,0xac,0x8d,0x82,0xff,0xac,0x8c,0x82,0xff,0xac, 0x8c,0x82,0xff,0xab,0x8c,0x82,0xff,0xac,0x8d,0x83,0xff,0xac,0x8d,0x82,0xff,0xad, 0x8e,0x83,0xff,0xab,0x8c,0x82,0xff,0x91,0x72,0x67,0xff,0x76,0x5c,0x60,0xff,0x69, 0x58,0x6b,0xff,0x67,0x57,0x69,0xff,0x6a,0x59,0x69,0xff,0x6c,0x5a,0x6b,0xff,0x6d, 0x5a,0x6c,0xff,0x6c,0x5a,0x6b,0xff,0x69,0x57,0x68,0xff,0x6b,0x58,0x6a,0xff,0x6d, 0x5a,0x6c,0xff,0x6d,0x5a,0x6c,0xff,0x6d,0x5a,0x6c,0xff,0x6e,0x5b,0x6c,0xff,0x71, 0x5c,0x6e,0xff,0x70,0x5b,0x6e,0xff,0x71,0x5c,0x6f,0xff,0x73,0x5e,0x71,0xff,0x73, 0x5e,0x71,0xff,0x73,0x5e,0x71,0xff,0x78,0x60,0x74,0xff,0x71,0x5c,0x6e,0xff,0x48, 0x43,0x4b,0xff,0x82,0x6c,0x69,0xff,0xae,0x8f,0x84,0xff,0xb0,0x92,0x85,0xff,0xab, 0x8c,0x82,0xff,0xaa,0x8b,0x81,0xff,0xaa,0x8b,0x81,0xff,0xa9,0x8a,0x80,0xff,0xa9, 0x89,0x7f,0xff,0xa8,0x88,0x7e,0xff,0xa8,0x88,0x7e,0xff,0xa8,0x88,0x7e,0xff,0xa8, 0x88,0x7e,0xff,0xa6,0x86,0x7c,0xff,0xa7,0x87,0x7d,0xff,0xa6,0x86,0x7c,0xff,0xa6, 0x86,0x7c,0xff,0xa6,0x85,0x7b,0xff,0xa6,0x85,0x7b,0xff,0xa6,0x85,0x7b,0xff,0xa5, 0x84,0x7a,0xff,0xa4,0x83,0x78,0xfe,0xa4,0x83,0x78,0xfe,0xa4,0x83,0x78,0xfa,0xad, 0x89,0x7e,0xf4,0x56,0x45,0x3e,0xe8,0x07,0x06,0x05,0xd5,0x00,0x00,0x00,0xba,0x00, 0x00,0x00,0x96,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x2e,0x00, 0x00,0x00,0x19,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x02,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x10,0x00, 0x00,0x00,0x22,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x83,0x00, 0x00,0x00,0xa6,0x00,0x00,0x00,0xc1,0x11,0x0f,0x0f,0xd8,0x60,0x54,0x4f,0xe8,0xb9, 0x9d,0x95,0xf2,0xb3,0x95,0x8c,0xf9,0xaf,0x91,0x86,0xfc,0xae,0x90,0x86,0xfd,0xaf, 0x92,0x87,0xfe,0xaf,0x91,0x87,0xff,0xaf,0x92,0x88,0xff,0xb2,0x96,0x8b,0xff,0xb3, 0x96,0x8a,0xff,0x99,0x7f,0x80,0xff,0x62,0x52,0x64,0xff,0x43,0x42,0x45,0xff,0x47, 0x45,0x49,0xff,0x47,0x44,0x48,0xff,0x43,0x42,0x44,0xff,0x41,0x41,0x40,0xff,0x40, 0x40,0x40,0xff,0x3f,0x3f,0x3f,0xff,0x3e,0x3f,0x3f,0xff,0x3e,0x3f,0x3e,0xff,0x3b, 0x3d,0x3b,0xff,0x3a,0x3c,0x3a,0xff,0x38,0x3c,0x38,0xff,0x2d,0x33,0x30,0xff,0x37, 0x32,0x34,0xff,0x81,0x67,0x64,0xff,0xc5,0xac,0xa2,0xff,0xb5,0x9a,0x91,0xff,0xb5, 0x9b,0x92,0xff,0xb6,0x9c,0x93,0xff,0xb6,0x9b,0x92,0xff,0xb6,0x9b,0x92,0xff,0x9b, 0x80,0x84,0xff,0x7d,0x5e,0x71,0xff,0x90,0x74,0x80,0xff,0x80,0x6a,0x78,0xff,0x7b, 0x68,0x73,0xff,0x80,0x6a,0x77,0xff,0x83,0x6c,0x79,0xff,0x7b,0x65,0x73,0xff,0x84, 0x66,0x6c,0xff,0xa3,0x80,0x75,0xff,0xa4,0x7e,0x77,0xff,0x75,0x5b,0x5d,0xff,0x36, 0x3b,0x3d,0xff,0x3b,0x3c,0x3c,0xff,0x4b,0x47,0x4c,0xff,0x4d,0x48,0x4e,0xff,0x49, 0x45,0x4a,0xff,0x46,0x44,0x47,0xff,0x45,0x44,0x46,0xff,0x46,0x43,0x47,0xff,0x45, 0x43,0x46,0xff,0x21,0x2b,0x23,0xff,0x3b,0x38,0x35,0xff,0x68,0x56,0x5d,0xff,0x39, 0x3c,0x3b,0xff,0x3e,0x3f,0x3f,0xff,0x3c,0x3e,0x3d,0xff,0x3a,0x3d,0x3c,0xff,0x3c, 0x3f,0x3d,0xff,0x2a,0x30,0x2d,0xff,0x41,0x38,0x3e,0xff,0xa5,0x8e,0x90,0xff,0xc9, 0xb1,0xa7,0xff,0xc0,0xa8,0x9f,0xff,0xb4,0x98,0x8e,0xff,0x90,0x6f,0x68,0xff,0x96, 0x7a,0x77,0xff,0xa4,0x83,0x81,0xff,0x5b,0x4f,0x47,0xff,0x65,0x57,0x57,0xff,0xc5, 0xad,0xae,0xff,0xd1,0xbe,0xb6,0xff,0xc3,0xac,0xa4,0xff,0xc5,0xae,0xa6,0xff,0xc5, 0xaf,0xa7,0xff,0xc3,0xad,0xa5,0xff,0xc3,0xad,0xa5,0xff,0xc5,0xaf,0xa8,0xff,0xc5, 0xaf,0xa8,0xff,0xc6,0xb0,0xa8,0xff,0xc5,0xb0,0xa7,0xff,0xc5,0xaf,0xa7,0xff,0xc5, 0xaf,0xa7,0xff,0xc5,0xaf,0xa8,0xff,0xcf,0xb7,0xab,0xff,0x87,0x73,0x7b,0xff,0x44, 0x40,0x47,0xff,0x3a,0x3c,0x3a,0xff,0x3c,0x3e,0x3c,0xff,0x31,0x33,0x31,0xff,0x21, 0x21,0x25,0xff,0xa8,0x9d,0x9a,0xff,0xda,0xc9,0xc2,0xff,0xc8,0xb3,0xac,0xff,0xab, 0x8c,0x84,0xff,0xbb,0xa1,0x99,0xff,0xc5,0xaf,0xa6,0xff,0xc3,0xad,0xa4,0xff,0xc3, 0xac,0xa4,0xff,0xc4,0xad,0xa5,0xff,0xb9,0x9f,0x97,0xff,0xad,0x8f,0x85,0xff,0xac, 0x8c,0x82,0xff,0xc0,0xa8,0xa1,0xff,0xc8,0xb2,0xa9,0xff,0xc2,0xac,0xa3,0xff,0xbf, 0xa8,0xa0,0xff,0xbf,0xa8,0xa0,0xff,0xc0,0xa8,0xa0,0xff,0xc0,0xa8,0xa0,0xff,0xbe, 0xa7,0x9f,0xff,0xbe,0xa6,0x9e,0xff,0xc0,0xa8,0xa0,0xff,0xbe,0xa6,0x9e,0xff,0xc2, 0xaa,0xa1,0xff,0x92,0x6f,0x78,0xff,0x4a,0x45,0x48,0xff,0x40,0x41,0x42,0xff,0x42, 0x42,0x43,0xff,0x25,0x2b,0x25,0xff,0x42,0x38,0x42,0xff,0x23,0x23,0x23,0xff,0x14, 0x1b,0x16,0xff,0x73,0x63,0x5c,0xff,0xba,0xa2,0x9b,0xff,0xbc,0xa3,0x9b,0xff,0xbb, 0xa2,0x9a,0xff,0xbb,0xa1,0x99,0xff,0xba,0xa1,0x98,0xff,0xba,0xa0,0x98,0xff,0xba, 0xa1,0x98,0xff,0xb9,0xa0,0x97,0xff,0xb9,0xa0,0x98,0xff,0xb9,0xa0,0x96,0xff,0xa5, 0x8e,0x8e,0xff,0x8e,0x69,0x69,0xff,0xb4,0x99,0x90,0xff,0xb8,0x9e,0x95,0xff,0xb7, 0x9d,0x94,0xff,0xb8,0x9d,0x94,0xff,0xb9,0x9f,0x96,0xff,0xb9,0x9f,0x96,0xff,0xb8, 0x9e,0x95,0xff,0xb7,0x9d,0x94,0xff,0xb7,0x9d,0x94,0xff,0xb7,0x9d,0x94,0xfd,0xb6, 0x9b,0x92,0xf9,0xb2,0x98,0x90,0xef,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0xb8,0x00, 0x00,0x00,0x8f,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x5c,0x00, 0x00,0x00,0x7a,0x00,0x00,0x00,0xa3,0x04,0x04,0x04,0xcb,0x34,0x2c,0x34,0xe7,0x79, 0x63,0x77,0xf6,0x77,0x60,0x74,0xfc,0x79,0x60,0x75,0xfe,0x7d,0x63,0x78,0xff,0x80, 0x65,0x74,0xff,0xa0,0x83,0x78,0xff,0xc0,0xa8,0x9f,0xff,0xb4,0x99,0x8f,0xff,0xb3, 0x97,0x8d,0xff,0xb3,0x97,0x8e,0xff,0xb3,0x98,0x8f,0xff,0xb3,0x97,0x8e,0xff,0xb6, 0x99,0x90,0xff,0xb7,0x98,0x8e,0xff,0xa6,0x8a,0x88,0xff,0x7d,0x62,0x59,0xff,0x84, 0x66,0x60,0xff,0x97,0x74,0x71,0xff,0xa6,0x84,0x77,0xff,0xaf,0x92,0x88,0xff,0xb2, 0x96,0x8c,0xff,0xb3,0x97,0x8e,0xff,0xb2,0x96,0x8c,0xff,0xb1,0x95,0x8c,0xff,0xb3, 0x96,0x8e,0xff,0xb1,0x95,0x8b,0xff,0xb2,0x96,0x8d,0xff,0xb1,0x95,0x8c,0xff,0xb5, 0x99,0x8e,0xff,0xa0,0x85,0x82,0xff,0x55,0x41,0x52,0xff,0x32,0x2b,0x32,0xff,0x40, 0x39,0x41,0xff,0x6a,0x5a,0x69,0xff,0x69,0x57,0x68,0xff,0x6a,0x58,0x69,0xff,0x6a, 0x58,0x69,0xff,0x6e,0x5a,0x6d,0xff,0x6f,0x5c,0x6e,0xff,0x6d,0x5a,0x6c,0xff,0x72, 0x5d,0x71,0xff,0x54,0x4b,0x54,0xff,0x13,0x23,0x14,0xff,0x30,0x33,0x34,0xff,0x80, 0x68,0x76,0xff,0xb0,0x95,0x8c,0xff,0xc2,0xa9,0x9e,0xff,0xb3,0x97,0x8e,0xff,0xad, 0x8d,0x84,0xff,0xad,0x8f,0x85,0xff,0xad,0x8f,0x85,0xff,0xb4,0x96,0x8a,0xff,0xa1, 0x81,0x7a,0xff,0x62,0x4e,0x57,0xff,0x5c,0x4e,0x5e,0xff,0x93,0x74,0x79,0xff,0xaf, 0x90,0x87,0xff,0xb1,0x94,0x89,0xff,0xab,0x8d,0x82,0xff,0xaa,0x8c,0x81,0xff,0xab, 0x8b,0x81,0xff,0xab,0x8b,0x81,0xff,0xab,0x8c,0x82,0xff,0xab,0x8c,0x82,0xff,0xaa, 0x8b,0x81,0xff,0xaa,0x8b,0x81,0xff,0xab,0x8c,0x81,0xff,0xac,0x8d,0x82,0xff,0xa6, 0x87,0x7e,0xff,0x94,0x76,0x6a,0xff,0x84,0x6a,0x6a,0xff,0x71,0x5c,0x6e,0xff,0x65, 0x54,0x67,0xff,0x68,0x57,0x68,0xff,0x6a,0x59,0x6a,0xff,0x6a,0x58,0x69,0xff,0x6a, 0x58,0x69,0xff,0x6d,0x59,0x6c,0xff,0x6b,0x59,0x6a,0xff,0x6a,0x58,0x69,0xff,0x6c, 0x5a,0x6b,0xff,0x6f,0x5c,0x6e,0xff,0x71,0x5d,0x70,0xff,0x71,0x5c,0x6f,0xff,0x72, 0x5c,0x70,0xff,0x74,0x5e,0x72,0xff,0x77,0x60,0x74,0xff,0x75,0x5f,0x73,0xff,0x7e, 0x64,0x76,0xff,0x7b,0x62,0x75,0xff,0x76,0x5e,0x73,0xff,0x70,0x5b,0x72,0xff,0x83, 0x65,0x69,0xff,0xa2,0x82,0x7c,0xff,0xb0,0x91,0x86,0xff,0xad,0x8f,0x84,0xff,0xa9, 0x8a,0x81,0xff,0xaa,0x8b,0x81,0xff,0xaa,0x8b,0x81,0xff,0xa9,0x89,0x7e,0xff,0xa8, 0x88,0x7d,0xff,0xa8,0x88,0x7d,0xff,0xa9,0x89,0x7e,0xff,0xa7,0x87,0x7d,0xff,0xa7, 0x87,0x7d,0xff,0xa7,0x87,0x7d,0xff,0xa6,0x86,0x7c,0xff,0xa6,0x86,0x7c,0xff,0xa6, 0x86,0x7c,0xff,0xa6,0x86,0x7c,0xff,0xa6,0x85,0x7b,0xff,0xa5,0x85,0x7b,0xff,0xa5, 0x84,0x7a,0xfe,0xa4,0x83,0x79,0xfe,0xa4,0x83,0x79,0xfa,0xa9,0x88,0x7b,0xf3,0x48, 0x39,0x34,0xe7,0x05,0x04,0x04,0xd2,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0x92,0x00, 0x00,0x00,0x6a,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x16,0x00, 0x00,0x00,0x0a,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00, 0x00,0x00,0x08,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x4f,0x00, 0x00,0x00,0x78,0x00,0x00,0x00,0x9f,0x03,0x02,0x02,0xc3,0x32,0x28,0x25,0xdb,0x89, 0x76,0x6e,0xeb,0xc7,0xa9,0x9d,0xf4,0xb7,0x98,0x8c,0xfb,0xb7,0x98,0x8c,0xfd,0xb7, 0x98,0x8c,0xfe,0xb9,0x9a,0x8e,0xfe,0xb8,0x9a,0x8f,0xff,0xb9,0x9b,0x8f,0xff,0xb8, 0x9a,0x8e,0xff,0xaf,0x91,0x86,0xff,0x8a,0x72,0x74,0xff,0x55,0x4a,0x59,0xff,0x45, 0x43,0x47,0xff,0x48,0x45,0x49,0xff,0x47,0x44,0x48,0xff,0x47,0x44,0x48,0xff,0x41, 0x40,0x42,0xff,0x40,0x40,0x40,0xff,0x40,0x40,0x40,0xff,0x40,0x40,0x40,0xff,0x3e, 0x3f,0x3f,0xff,0x3d,0x3e,0x3d,0xff,0x3a,0x3c,0x3a,0xff,0x39,0x3c,0x39,0xff,0x31, 0x36,0x31,0xff,0x27,0x2b,0x24,0xff,0x75,0x64,0x68,0xff,0xbe,0xab,0xa1,0xff,0xcd, 0xb4,0xaa,0xff,0xc9,0xb1,0xa7,0xff,0xca,0xb2,0xa8,0xff,0xcc,0xb4,0xaa,0xff,0xcf, 0xb8,0xad,0xff,0xb4,0x9c,0x9c,0xff,0x7e,0x60,0x72,0xff,0xb7,0x97,0x90,0xff,0xd7, 0xc1,0xb6,0xff,0xd3,0xbd,0xb2,0xff,0xd4,0xbf,0xb5,0xff,0xd3,0xbd,0xb3,0xff,0xd5, 0xc0,0xb6,0xff,0xcd,0xb5,0xaa,0xff,0xb4,0x95,0x8c,0xff,0xb6,0x97,0x91,0xff,0xac, 0x8e,0x84,0xff,0x68,0x56,0x55,0xff,0x3c,0x3e,0x40,0xff,0x40,0x40,0x41,0xff,0x49, 0x46,0x4a,0xff,0x4c,0x47,0x4d,0xff,0x46,0x44,0x47,0xff,0x45,0x43,0x46,0xff,0x44, 0x43,0x45,0xff,0x46,0x44,0x47,0xff,0x37,0x3a,0x37,0xff,0x36,0x39,0x35,0xff,0x59, 0x4f,0x58,0xff,0x50,0x4a,0x50,0xff,0x3c,0x3e,0x3d,0xff,0x3e,0x3f,0x3f,0xff,0x3d, 0x3e,0x3e,0xff,0x3a,0x3c,0x3a,0xff,0x36,0x3b,0x37,0xff,0x39,0x36,0x35,0xff,0x89, 0x7a,0x77,0xff,0xd6,0xc4,0xbb,0xff,0xd7,0xc2,0xb8,0xff,0xd9,0xc6,0xbd,0xff,0xcc, 0xb1,0xa5,0xff,0x8f,0x74,0x7a,0xff,0x6c,0x58,0x72,0xff,0x7a,0x5e,0x70,0xff,0xb1, 0x94,0x94,0xff,0xe4,0xd8,0xd1,0xff,0xeb,0xe1,0xdc,0xff,0xe1,0xd0,0xc9,0xff,0xdb, 0xca,0xc2,0xff,0xdd,0xcc,0xc4,0xff,0xdc,0xcb,0xc4,0xff,0xda,0xc9,0xc1,0xff,0xd9, 0xc6,0xbe,0xff,0xd7,0xc3,0xba,0xff,0xd7,0xc3,0xba,0xff,0xd6,0xc3,0xbb,0xff,0xd6, 0xc3,0xb9,0xff,0xd5,0xc2,0xb9,0xff,0xd6,0xc2,0xb9,0xff,0xdc,0xcb,0xc0,0xff,0xc0, 0xa1,0x9e,0xff,0x5c,0x52,0x52,0xff,0x38,0x3b,0x3a,0xff,0x3c,0x3e,0x3d,0xff,0x39, 0x3b,0x3a,0xff,0x1d,0x21,0x1f,0xff,0x59,0x48,0x4f,0xff,0xd5,0xc6,0xc5,0xff,0xe8, 0xda,0xd3,0xff,0xc6,0xae,0xa3,0xff,0xb1,0x91,0x89,0xff,0xcc,0xb7,0xae,0xff,0xda, 0xc7,0xbf,0xff,0xda,0xc7,0xbf,0xff,0xd7,0xc4,0xbc,0xff,0xd4,0xc0,0xb6,0xff,0xd3, 0xbd,0xb4,0xff,0xd4,0xbf,0xb6,0xff,0xd5,0xc1,0xb7,0xff,0xce,0xb7,0xac,0xff,0xb9, 0x9b,0x9b,0xff,0xcb,0xb4,0xae,0xff,0xd4,0xc0,0xb7,0xff,0xd3,0xbf,0xb6,0xff,0xd2, 0xbd,0xb4,0xff,0xd0,0xbb,0xb1,0xff,0xd1,0xbc,0xb3,0xff,0xd1,0xbc,0xb3,0xff,0xd4, 0xc1,0xb7,0xff,0xd2,0xbd,0xb4,0xff,0xdc,0xc6,0xbb,0xff,0x75,0x64,0x71,0xff,0x43, 0x41,0x44,0xff,0x3f,0x3f,0x3f,0xff,0x41,0x41,0x42,0xff,0x1c,0x24,0x1d,0xff,0x39, 0x31,0x39,0xff,0x24,0x24,0x25,0xff,0x10,0x16,0x12,0xff,0xac,0x9a,0x93,0xff,0xd0, 0xb9,0xb0,0xff,0xcd,0xb6,0xad,0xff,0xce,0xb8,0xaf,0xff,0xcd,0xb6,0xad,0xff,0xcc, 0xb5,0xab,0xff,0xcb,0xb4,0xab,0xff,0xcb,0xb4,0xab,0xff,0xc8,0xb0,0xa7,0xff,0xc9, 0xb1,0xa8,0xff,0xc9,0xb1,0xa5,0xff,0x86,0x6a,0x74,0xff,0xbc,0xa0,0x94,0xff,0xc8, 0xaf,0xa4,0xff,0xc3,0xa9,0x9f,0xff,0xc2,0xa8,0x9d,0xff,0xc1,0xa6,0x9b,0xff,0xc2, 0xa7,0x9d,0xff,0xc1,0xa6,0x9b,0xff,0xc1,0xa6,0x9b,0xff,0xc1,0xa6,0x9b,0xff,0xc1, 0xa5,0x9a,0xff,0xc0,0xa4,0x99,0xfe,0xbf,0xa3,0x98,0xfa,0xbc,0xa0,0x96,0xf0,0x07, 0x06,0x06,0xde,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x6e,0x00, 0x00,0x00,0x56,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0xa2,0x01, 0x01,0x01,0xca,0x22,0x1b,0x21,0xe6,0x7d,0x64,0x7a,0xf5,0x79,0x61,0x75,0xfc,0x7d, 0x63,0x78,0xfe,0x81,0x65,0x78,0xff,0x84,0x67,0x76,0xff,0xa1,0x84,0x76,0xff,0xde, 0xcc,0xc4,0xff,0xc9,0xb2,0xa7,0xff,0xc5,0xad,0xa2,0xff,0xc4,0xab,0xa0,0xff,0xc4, 0xac,0xa1,0xff,0xc2,0xa7,0x9c,0xff,0xaa,0x8a,0x7f,0xff,0x7f,0x69,0x68,0xff,0x4a, 0x41,0x4c,0xff,0x1b,0x29,0x1f,0xff,0x2f,0x36,0x33,0xff,0x62,0x54,0x5c,0xff,0xac, 0x8a,0x84,0xff,0xbc,0xa4,0x9b,0xff,0xb4,0x99,0x8e,0xff,0xbd,0xa1,0x96,0xff,0xbd, 0x9f,0x95,0xff,0xbc,0x9f,0x94,0xff,0xbd,0x9f,0x95,0xff,0xbc,0x9e,0x94,0xff,0xbc, 0x9e,0x93,0xff,0xbc,0x9f,0x93,0xff,0xbd,0x9f,0x92,0xff,0xb2,0x91,0x88,0xff,0x6f, 0x52,0x54,0xff,0x24,0x23,0x29,0xff,0x36,0x31,0x36,0xff,0x67,0x56,0x67,0xff,0x6e, 0x5b,0x6d,0xff,0x68,0x57,0x68,0xff,0x66,0x57,0x66,0xff,0x60,0x53,0x60,0xff,0x67, 0x56,0x66,0xff,0x73,0x5d,0x72,0xff,0x70,0x5d,0x70,0xff,0x47,0x44,0x47,0xff,0x2c, 0x35,0x2d,0xff,0x5b,0x50,0x5b,0xff,0x65,0x54,0x67,0xff,0x6d,0x5b,0x64,0xff,0xa6, 0x8a,0x81,0xff,0xc8,0xae,0xa2,0xff,0xc6,0xac,0xa2,0xff,0xc1,0xa6,0x9b,0xff,0xc6, 0xab,0xa0,0xff,0xba,0x9f,0x98,0xff,0x85,0x6d,0x77,0xff,0x73,0x64,0x74,0xff,0xaf, 0x9a,0x97,0xff,0xaf,0x8b,0x83,0xff,0x98,0x71,0x71,0xff,0xb9,0x9e,0x98,0xff,0xc7, 0xb1,0xa8,0xff,0xc9,0xb0,0xa7,0xff,0xcb,0xb4,0xaa,0xff,0xcb,0xb3,0xa9,0xff,0xca, 0xb1,0xa7,0xff,0xca,0xb1,0xa8,0xff,0xc9,0xaf,0xa5,0xff,0xc8,0xae,0xa4,0xff,0xc8, 0xae,0xa4,0xff,0xc5,0xaa,0xa0,0xff,0xc4,0xa8,0x9e,0xff,0xbb,0x9f,0x96,0xff,0xbc, 0x9e,0x91,0xff,0xb1,0x91,0x92,0xff,0x87,0x6b,0x77,0xff,0x69,0x56,0x64,0xff,0x66, 0x56,0x67,0xff,0x68,0x57,0x68,0xff,0x68,0x57,0x67,0xff,0x69,0x57,0x68,0xff,0x68, 0x57,0x67,0xff,0x68,0x57,0x67,0xff,0x6a,0x58,0x69,0xff,0x6d,0x5b,0x6c,0xff,0x6e, 0x5a,0x6d,0xff,0x70,0x5c,0x6f,0xff,0x73,0x5e,0x71,0xff,0x75,0x5f,0x73,0xff,0x76, 0x5f,0x74,0xff,0x76,0x5f,0x73,0xff,0x77,0x60,0x75,0xff,0x76,0x5f,0x74,0xff,0x76, 0x5f,0x73,0xff,0x74,0x5f,0x72,0xff,0x6e,0x5b,0x70,0xff,0x75,0x5a,0x6a,0xff,0x96, 0x78,0x7b,0xff,0xb2,0x92,0x88,0xff,0xb9,0x99,0x8d,0xff,0xb8,0x98,0x8e,0xff,0xb8, 0x98,0x8e,0xff,0xb6,0x97,0x8b,0xff,0xb7,0x96,0x8c,0xff,0xb6,0x96,0x8c,0xff,0xb5, 0x95,0x89,0xff,0xb5,0x93,0x88,0xff,0xb4,0x92,0x87,0xff,0xb3,0x91,0x86,0xff,0xaa, 0x8b,0x7f,0xff,0xa7,0x87,0x7d,0xff,0xa6,0x86,0x7c,0xff,0xa6,0x86,0x7c,0xff,0xa6, 0x86,0x7c,0xff,0xa6,0x86,0x7c,0xff,0xa5,0x84,0x7a,0xff,0xa5,0x84,0x7a,0xfe,0xa4, 0x83,0x79,0xfd,0xa5,0x84,0x79,0xfa,0xa4,0x83,0x77,0xf2,0x3a,0x2f,0x2a,0xe5,0x04, 0x03,0x03,0xcf,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x64,0x00, 0x00,0x00,0x41,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x09,0x00, 0x00,0x00,0x04,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x18,0x00, 0x00,0x00,0x32,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0xaf,0x11, 0x10,0x10,0xd2,0x74,0x64,0x62,0xe7,0x90,0x7e,0x7a,0xf4,0x81,0x6f,0x6b,0xfb,0x82, 0x70,0x6c,0xfd,0x84,0x71,0x6f,0xff,0x87,0x73,0x71,0xff,0x8a,0x77,0x76,0xff,0x8b, 0x77,0x76,0xff,0x8d,0x79,0x79,0xff,0x8e,0x79,0x78,0xff,0x7d,0x66,0x68,0xff,0x4b, 0x45,0x51,0xff,0x46,0x44,0x46,0xff,0x4a,0x46,0x4b,0xff,0x48,0x45,0x49,0xff,0x49, 0x45,0x49,0xff,0x45,0x43,0x46,0xff,0x40,0x40,0x41,0xff,0x3e,0x3f,0x3f,0xff,0x3f, 0x40,0x40,0xff,0x3d,0x3e,0x3e,0xff,0x3d,0x3f,0x3e,0xff,0x3b,0x3d,0x3c,0xff,0x3a, 0x3d,0x3a,0xff,0x38,0x3b,0x37,0xff,0x2a,0x31,0x2b,0xff,0x24,0x28,0x21,0xff,0x73, 0x65,0x62,0xff,0xa6,0x95,0x97,0xff,0x98,0x8b,0x8c,0xff,0x9a,0x8c,0x8e,0xff,0x9b, 0x8d,0x8e,0xff,0x9c,0x8f,0x90,0xff,0xa1,0x93,0x94,0xff,0x88,0x7b,0x7f,0xff,0x60, 0x56,0x5d,0xff,0x9c,0x8d,0x89,0xff,0xa0,0x92,0x94,0xff,0xa1,0x92,0x95,0xff,0xa2, 0x94,0x97,0xff,0xa4,0x96,0x99,0xff,0xa4,0x97,0x99,0xff,0xa5,0x98,0x9b,0xff,0xaa, 0x9f,0xa2,0xff,0x98,0x86,0x86,0xff,0x63,0x50,0x53,0xff,0x4c,0x47,0x53,0xff,0x4b, 0x47,0x4a,0xff,0x37,0x3a,0x37,0xff,0x3e,0x3e,0x3e,0xff,0x4a,0x46,0x4a,0xff,0x46, 0x43,0x46,0xff,0x44,0x43,0x46,0xff,0x44,0x43,0x45,0xff,0x45,0x43,0x46,0xff,0x2d, 0x34,0x2f,0xff,0x51,0x48,0x48,0xff,0x8d,0x6b,0x80,0xff,0x56,0x4d,0x56,0xff,0x3b, 0x3d,0x3b,0xff,0x3e,0x3f,0x3f,0xff,0x3c,0x3e,0x3d,0xff,0x39,0x3b,0x39,0xff,0x32, 0x37,0x34,0xff,0x41,0x3c,0x38,0xff,0x86,0x78,0x77,0xff,0xa9,0x9c,0x9e,0xff,0x9b, 0x8e,0x8f,0xff,0x9f,0x94,0x96,0xff,0x8c,0x79,0x78,0xff,0x69,0x56,0x5b,0xff,0x51, 0x48,0x56,0xff,0x7e,0x66,0x62,0xff,0xd5,0xc0,0xb8,0xff,0xdd,0xce,0xc7,0xff,0xb0, 0xa1,0x9d,0xff,0xa0,0x97,0x99,0xff,0xa4,0x9a,0x9b,0xff,0xa3,0x99,0x9b,0xff,0xa3, 0x9a,0x9b,0xff,0xa5,0x9b,0x9e,0xff,0xa3,0x97,0x98,0xff,0x9f,0x92,0x93,0xff,0xa0, 0x91,0x93,0xff,0x9e,0x8f,0x91,0xff,0xa1,0x92,0x94,0xff,0xa1,0x91,0x94,0xff,0xa2, 0x92,0x95,0xff,0xab,0x9a,0x9c,0xff,0x7d,0x6a,0x76,0xff,0x49,0x43,0x49,0xff,0x3e, 0x3f,0x3f,0xff,0x40,0x42,0x40,0xff,0x2e,0x30,0x2e,0xff,0x1b,0x1f,0x1f,0xff,0x51, 0x47,0x42,0xff,0x97,0x8a,0x8a,0xff,0xa5,0x9b,0x9d,0xff,0x8e,0x78,0x78,0xff,0x9c, 0x8e,0x90,0xff,0xb0,0xa0,0xa7,0xff,0xa8,0x9b,0x9e,0xff,0xa3,0x98,0x9a,0xff,0xa2, 0x95,0x98,0xff,0x9f,0x91,0x92,0xff,0x9d,0x8f,0x90,0xff,0x9e,0x8f,0x91,0xff,0x9e, 0x90,0x92,0xff,0xa8,0x9a,0x9b,0xff,0x5a,0x4d,0x50,0xff,0x91,0x82,0x85,0xff,0xa4, 0x96,0x99,0xff,0xa3,0x94,0x98,0xff,0xa5,0x95,0x99,0xff,0xa4,0x93,0x97,0xff,0xa5, 0x94,0x98,0xff,0xa6,0x97,0x9b,0xff,0xa5,0x97,0x9a,0xff,0xa3,0x93,0x96,0xff,0xa3, 0x96,0x96,0xff,0x4e,0x4c,0x4e,0xff,0x3e,0x3e,0x3f,0xff,0x3b,0x3e,0x3c,0xff,0x41, 0x42,0x42,0xff,0x14,0x1c,0x14,0xff,0x29,0x26,0x29,0xff,0x27,0x25,0x26,0xff,0x19, 0x1d,0x19,0xff,0x90,0x86,0x85,0xff,0xa1,0x92,0x94,0xff,0x9e,0x90,0x91,0xff,0x9f, 0x90,0x92,0xff,0x9c,0x8d,0x90,0xff,0x9e,0x8e,0x90,0xff,0x9e,0x8d,0x90,0xff,0x9d, 0x8c,0x8e,0xff,0x9c,0x8a,0x8d,0xff,0x99,0x87,0x89,0xff,0x98,0x87,0x89,0xff,0x7f, 0x69,0x63,0xff,0xa1,0x8f,0x92,0xff,0x99,0x8a,0x8a,0xff,0x91,0x7f,0x80,0xff,0x90, 0x7e,0x7e,0xff,0x8e,0x7c,0x7b,0xff,0x8f,0x7d,0x7d,0xff,0x8d,0x7b,0x7b,0xff,0x8d, 0x7b,0x7b,0xff,0x8f,0x7d,0x7d,0xff,0x8e,0x7b,0x7b,0xff,0x8f,0x7c,0x7c,0xfe,0x90, 0x7c,0x7d,0xfb,0x8d,0x79,0x79,0xf2,0x09,0x09,0x08,0xe0,0x00,0x00,0x00,0xc0,0x00, 0x00,0x00,0x96,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x5b,0x00, 0x00,0x00,0x78,0x00,0x00,0x00,0xa0,0x03,0x03,0x03,0xc9,0x3b,0x2f,0x3a,0xe5,0x7b, 0x63,0x78,0xf5,0x78,0x60,0x75,0xfc,0x7d,0x63,0x78,0xfe,0x83,0x66,0x78,0xff,0x82, 0x66,0x77,0xff,0x99,0x79,0x78,0xff,0xaf,0xa4,0xaa,0xff,0xa3,0x91,0x94,0xff,0xa1, 0x8f,0x93,0xff,0xa0,0x8c,0x8e,0xff,0x9d,0x89,0x8d,0xff,0x98,0x84,0x86,0xff,0x73, 0x5b,0x5d,0xff,0x34,0x38,0x3a,0xff,0x0d,0x1e,0x0f,0xff,0x18,0x24,0x1a,0xff,0x25, 0x2f,0x26,0xff,0x54,0x4b,0x54,0xff,0x8c,0x6e,0x7c,0xff,0xb8,0x9c,0x8f,0xff,0xaf, 0x97,0x90,0xff,0x8b,0x78,0x79,0xff,0x85,0x75,0x71,0xff,0x84,0x74,0x6f,0xff,0x85, 0x75,0x71,0xff,0x86,0x75,0x71,0xff,0x87,0x76,0x72,0xff,0x87,0x76,0x73,0xff,0x89, 0x76,0x75,0xff,0x7f,0x6e,0x6b,0xff,0x50,0x44,0x43,0xff,0x2a,0x26,0x2c,0xff,0x25, 0x23,0x25,0xff,0x37,0x33,0x37,0xff,0x64,0x54,0x63,0xff,0x6b,0x58,0x6b,0xff,0x62, 0x54,0x62,0xff,0x5b,0x51,0x5c,0xff,0x5e,0x52,0x60,0xff,0x61,0x53,0x60,0xff,0x4e, 0x47,0x4d,0xff,0x43,0x42,0x44,0xff,0x57,0x4e,0x57,0xff,0x76,0x60,0x74,0xff,0x6c, 0x59,0x6a,0xff,0x61,0x52,0x64,0xff,0x70,0x5c,0x68,0xff,0x9b,0x84,0x83,0xff,0x98, 0x8d,0x8c,0xff,0x92,0x83,0x82,0xff,0x9b,0x8d,0x8b,0xff,0x7f,0x72,0x78,0xff,0x51, 0x44,0x51,0xff,0x7b,0x6d,0x70,0xff,0xab,0x9f,0x9e,0xff,0x8d,0x7d,0x7a,0xff,0x58, 0x46,0x43,0xff,0x89,0x73,0x70,0xff,0xb6,0xa3,0x9e,0xff,0x93,0x8d,0x8d,0xff,0x9c, 0x93,0x93,0xff,0x9a,0x92,0x90,0xff,0x97,0x8f,0x8c,0xff,0x95,0x8d,0x8a,0xff,0x95, 0x8d,0x8a,0xff,0x96,0x8d,0x8a,0xff,0x95,0x8c,0x89,0xff,0x92,0x88,0x85,0xff,0x8f, 0x85,0x82,0xff,0x8f,0x83,0x80,0xff,0x8c,0x80,0x7c,0xff,0x8c,0x80,0x7a,0xff,0x7f, 0x69,0x68,0xff,0x68,0x54,0x5f,0xff,0x63,0x54,0x64,0xff,0x67,0x56,0x65,0xff,0x61, 0x53,0x61,0xff,0x63,0x54,0x63,0xff,0x68,0x56,0x67,0xff,0x66,0x56,0x65,0xff,0x68, 0x57,0x67,0xff,0x6b,0x59,0x6a,0xff,0x6c,0x59,0x6b,0xff,0x71,0x5d,0x6f,0xff,0x76, 0x5f,0x73,0xff,0x74,0x5e,0x72,0xff,0x7b,0x61,0x73,0xff,0x7b,0x62,0x75,0xff,0x73, 0x5e,0x71,0xff,0x75,0x5f,0x73,0xff,0x76,0x5f,0x73,0xff,0x74,0x5e,0x71,0xff,0x71, 0x5d,0x70,0xff,0x6b,0x59,0x6c,0xff,0x76,0x5e,0x75,0xff,0x7c,0x67,0x69,0xff,0x82, 0x73,0x6d,0xff,0x84,0x76,0x71,0xff,0x82,0x74,0x6f,0xff,0x81,0x71,0x6c,0xff,0x83, 0x74,0x6f,0xff,0x80,0x72,0x6d,0xff,0x7e,0x6f,0x69,0xff,0x7d,0x6e,0x67,0xff,0x7c, 0x6c,0x65,0xff,0x74,0x67,0x60,0xff,0xa3,0x86,0x79,0xff,0xaa,0x8a,0x7f,0xff,0xa8, 0x88,0x7e,0xff,0xa6,0x86,0x7c,0xff,0xa6,0x86,0x7c,0xff,0xa6,0x86,0x7c,0xff,0xa6, 0x86,0x7c,0xff,0xa5,0x85,0x7b,0xff,0xa5,0x84,0x7a,0xfd,0xa5,0x84,0x7a,0xfc,0xa7, 0x84,0x7a,0xf9,0x9c,0x7d,0x72,0xf2,0x2e,0x25,0x22,0xe2,0x02,0x02,0x02,0xcb,0x00, 0x00,0x00,0xab,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x41,0x00, 0x00,0x00,0x27,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x03,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00, 0x00,0x00,0x09,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x58,0x00, 0x00,0x00,0x83,0x00,0x00,0x00,0xb0,0x0e,0x0d,0x0e,0xd4,0x49,0x45,0x4d,0xea,0x45, 0x41,0x49,0xf6,0x46,0x42,0x4b,0xfc,0x49,0x43,0x4c,0xfe,0x4b,0x45,0x50,0xff,0x4e, 0x46,0x51,0xff,0x51,0x48,0x55,0xff,0x52,0x49,0x55,0xff,0x53,0x49,0x57,0xff,0x56, 0x4c,0x5a,0xff,0x57,0x4d,0x5a,0xff,0x4c,0x47,0x4c,0xff,0x4a,0x46,0x4b,0xff,0x49, 0x45,0x4a,0xff,0x47,0x44,0x48,0xff,0x47,0x45,0x48,0xff,0x42,0x41,0x43,0xff,0x3e, 0x3f,0x3e,0xff,0x3b,0x3e,0x3d,0xff,0x3d,0x3e,0x3e,0xff,0x3c,0x3e,0x3d,0xff,0x3b, 0x3d,0x3c,0xff,0x3a,0x3d,0x3b,0xff,0x38,0x3b,0x39,0xff,0x35,0x3a,0x35,0xff,0x21, 0x2c,0x22,0xff,0x0e,0x17,0x0f,0xff,0x25,0x24,0x27,0xff,0x4b,0x43,0x4e,0xff,0x4e, 0x44,0x51,0xff,0x4c,0x43,0x4f,0xff,0x4c,0x43,0x4f,0xff,0x4b,0x43,0x4f,0xff,0x50, 0x46,0x53,0xff,0x49,0x43,0x4b,0xff,0x45,0x42,0x45,0xff,0x5d,0x4d,0x5f,0xff,0x5f, 0x4f,0x60,0xff,0x54,0x48,0x58,0xff,0x56,0x49,0x59,0xff,0x58,0x4b,0x5a,0xff,0x55, 0x49,0x57,0xff,0x57,0x4a,0x59,0xff,0x58,0x4a,0x5a,0xff,0x52,0x48,0x56,0xff,0x52, 0x4b,0x56,0xff,0x56,0x4d,0x57,0xff,0x4c,0x48,0x4d,0xff,0x3f,0x40,0x40,0xff,0x39, 0x3c,0x3a,0xff,0x42,0x41,0x42,0xff,0x48,0x45,0x48,0xff,0x44,0x42,0x45,0xff,0x43, 0x42,0x44,0xff,0x44,0x43,0x45,0xff,0x31,0x37,0x33,0xff,0x57,0x4c,0x51,0xff,0x78, 0x5f,0x70,0xff,0x3f,0x3f,0x41,0xff,0x3c,0x3e,0x3d,0xff,0x3d,0x3f,0x3e,0xff,0x3c, 0x3e,0x3d,0xff,0x3b,0x3e,0x3b,0xff,0x34,0x36,0x34,0xff,0x1b,0x20,0x1d,0xff,0x2c, 0x2a,0x2f,0xff,0x4c,0x43,0x4f,0xff,0x4a,0x43,0x4e,0xff,0x49,0x41,0x4b,0xff,0x4f, 0x47,0x53,0xff,0x44,0x43,0x47,0xff,0x24,0x2d,0x28,0xff,0x78,0x6d,0x64,0xff,0xe1, 0xcd,0xc5,0xff,0xb1,0x97,0x98,0xff,0x5b,0x46,0x50,0xff,0x46,0x3e,0x4b,0xff,0x4d, 0x43,0x50,0xff,0x4f,0x44,0x51,0xff,0x50,0x45,0x52,0xff,0x52,0x46,0x54,0xff,0x55, 0x48,0x56,0xff,0x56,0x49,0x59,0xff,0x58,0x4a,0x5b,0xff,0x5a,0x4b,0x5c,0xff,0x5b, 0x4c,0x5d,0xff,0x5b,0x4c,0x5d,0xff,0x5d,0x4d,0x5e,0xff,0x60,0x4e,0x61,0xff,0x4b, 0x45,0x4d,0xff,0x41,0x41,0x41,0xff,0x40,0x41,0x41,0xff,0x38,0x3a,0x39,0xff,0x27, 0x29,0x27,0xff,0x23,0x24,0x22,0xff,0x1f,0x24,0x22,0xff,0x42,0x3b,0x45,0xff,0x58, 0x4a,0x5a,0xff,0x3c,0x3b,0x3f,0xff,0x3b,0x39,0x42,0xff,0x72,0x58,0x6c,0xff,0x5b, 0x4b,0x5a,0xff,0x49,0x41,0x4d,0xff,0x4c,0x42,0x4e,0xff,0x4f,0x45,0x51,0xff,0x4f, 0x45,0x52,0xff,0x50,0x47,0x54,0xff,0x52,0x47,0x55,0xff,0x58,0x49,0x5a,0xff,0x3b, 0x3c,0x3d,0xff,0x49,0x43,0x4b,0xff,0x59,0x4b,0x5b,0xff,0x5f,0x4d,0x60,0xff,0x5e, 0x4d,0x60,0xff,0x5f,0x4e,0x61,0xff,0x5e,0x4d,0x60,0xff,0x5c,0x4b,0x5e,0xff,0x5a, 0x4a,0x5b,0xff,0x5b,0x4c,0x5d,0xff,0x4f,0x44,0x52,0xff,0x43,0x42,0x45,0xff,0x3f, 0x40,0x40,0xff,0x3e,0x3f,0x3f,0xff,0x42,0x42,0x43,0xff,0x23,0x28,0x23,0xff,0x15, 0x1b,0x15,0xff,0x26,0x26,0x26,0xff,0x2b,0x2b,0x2b,0xff,0x43,0x3d,0x46,0xff,0x55, 0x48,0x58,0xff,0x57,0x4a,0x5a,0xff,0x5b,0x4b,0x5c,0xff,0x59,0x4b,0x5c,0xff,0x5b, 0x4c,0x5d,0xff,0x59,0x4c,0x5c,0xff,0x58,0x4b,0x5b,0xff,0x5a,0x4c,0x5c,0xff,0x57, 0x4b,0x5a,0xff,0x57,0x4a,0x59,0xff,0x32,0x36,0x36,0xff,0x58,0x4b,0x5c,0xff,0x51, 0x46,0x54,0xff,0x50,0x47,0x55,0xff,0x50,0x47,0x54,0xff,0x4f,0x47,0x54,0xff,0x4e, 0x46,0x52,0xff,0x4e,0x46,0x52,0xff,0x4e,0x46,0x52,0xff,0x51,0x48,0x55,0xff,0x51, 0x48,0x55,0xff,0x52,0x49,0x57,0xfe,0x55,0x4a,0x58,0xfb,0x53,0x48,0x56,0xf2,0x05, 0x05,0x05,0xe0,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x71,0x00, 0x00,0x00,0x58,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0xa0,0x05, 0x04,0x04,0xc9,0x48,0x3b,0x47,0xe5,0x7c,0x64,0x79,0xf5,0x7a,0x62,0x77,0xfc,0x7e, 0x63,0x77,0xfe,0x84,0x66,0x78,0xff,0x85,0x66,0x75,0xff,0x81,0x60,0x6a,0xff,0x5b, 0x4b,0x5e,0xff,0x63,0x50,0x64,0xff,0x62,0x50,0x64,0xff,0x64,0x52,0x66,0xff,0x63, 0x51,0x65,0xff,0x63,0x51,0x65,0xff,0x60,0x53,0x63,0xff,0x54,0x4d,0x55,0xff,0x3c, 0x3e,0x3d,0xff,0x2e,0x34,0x2e,0xff,0x5d,0x51,0x5c,0xff,0x83,0x65,0x7b,0xff,0x88, 0x6a,0x74,0xff,0xb2,0x91,0x83,0xff,0x9e,0x84,0x7d,0xff,0x46,0x40,0x4e,0xff,0x42, 0x3f,0x46,0xff,0x3e,0x3d,0x41,0xff,0x3e,0x3d,0x44,0xff,0x42,0x40,0x47,0xff,0x45, 0x41,0x4a,0xff,0x46,0x42,0x4a,0xff,0x45,0x42,0x4a,0xff,0x3f,0x3a,0x42,0xff,0x31, 0x2c,0x33,0xff,0x38,0x30,0x38,0xff,0x32,0x2b,0x33,0xff,0x2a,0x27,0x2a,0xff,0x44, 0x3c,0x44,0xff,0x5e,0x53,0x5f,0xff,0x69,0x5a,0x69,0xff,0x7a,0x60,0x73,0xff,0x84, 0x66,0x77,0xff,0x5a,0x4f,0x58,0xff,0x3a,0x3c,0x3b,0xff,0x6f,0x5d,0x6f,0xff,0x73, 0x5e,0x72,0xff,0x6e,0x5b,0x6d,0xff,0x6e,0x5b,0x6d,0xff,0x6f,0x5b,0x6e,0xff,0x73, 0x5d,0x72,0xff,0x63,0x52,0x65,0xff,0x45,0x40,0x48,0xff,0x47,0x41,0x4a,0xff,0x4d, 0x43,0x4f,0xff,0x41,0x3e,0x43,0xff,0x33,0x39,0x34,0xff,0x43,0x40,0x45,0xff,0x4c, 0x43,0x4f,0xff,0x49,0x43,0x4d,0xff,0x3a,0x3d,0x41,0xff,0x50,0x47,0x45,0xff,0x70, 0x55,0x59,0xff,0x4e,0x42,0x49,0xff,0x3a,0x39,0x3e,0xff,0x3c,0x39,0x3e,0xff,0x38, 0x37,0x3b,0xff,0x37,0x37,0x3a,0xff,0x38,0x37,0x3a,0xff,0x38,0x37,0x3a,0xff,0x38, 0x38,0x3b,0xff,0x38,0x38,0x3b,0xff,0x39,0x38,0x3c,0xff,0x39,0x39,0x3c,0xff,0x39, 0x39,0x3d,0xff,0x35,0x37,0x39,0xff,0x4b,0x45,0x4e,0xff,0x65,0x56,0x66,0xff,0x67, 0x57,0x66,0xff,0x67,0x57,0x67,0xff,0x64,0x55,0x64,0xff,0x64,0x55,0x65,0xff,0x69, 0x57,0x68,0xff,0x6a,0x57,0x68,0xff,0x6a,0x57,0x69,0xff,0x6a,0x58,0x69,0xff,0x6d, 0x5a,0x6c,0xff,0x6e,0x5a,0x6d,0xff,0x6a,0x59,0x6a,0xff,0x7a,0x60,0x70,0xff,0x81, 0x64,0x75,0xff,0x7b,0x62,0x76,0xff,0x72,0x5e,0x70,0xff,0x76,0x60,0x73,0xff,0x78, 0x60,0x75,0xff,0x75,0x5f,0x72,0xff,0x70,0x5c,0x6f,0xff,0x71,0x5c,0x6f,0xff,0x76, 0x5f,0x74,0xff,0x4b,0x45,0x4d,0xff,0x37,0x3a,0x3c,0xff,0x37,0x39,0x3b,0xff,0x36, 0x39,0x3b,0xff,0x36,0x38,0x3a,0xff,0x35,0x38,0x39,0xff,0x35,0x38,0x39,0xff,0x35, 0x38,0x3a,0xff,0x34,0x38,0x39,0xff,0x32,0x36,0x36,0xff,0x2e,0x33,0x34,0xff,0x76, 0x61,0x68,0xff,0xaa,0x8b,0x83,0xff,0xaa,0x89,0x7f,0xff,0xa7,0x87,0x7d,0xff,0xa6, 0x86,0x7c,0xff,0xa6,0x86,0x7c,0xff,0xa6,0x86,0x7c,0xff,0xa6,0x86,0x7c,0xff,0xa6, 0x85,0x7b,0xff,0xa5,0x84,0x7a,0xfe,0xa3,0x82,0x77,0xfd,0xa9,0x87,0x7b,0xf8,0x92, 0x74,0x6a,0xf0,0x20,0x1a,0x18,0xe0,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0xa9,0x00, 0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x23,0x00, 0x00,0x00,0x12,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x02,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x13,0x00, 0x00,0x00,0x2a,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0xa5,0x03, 0x03,0x03,0xcb,0x2f,0x2a,0x2f,0xe5,0x5b,0x51,0x5b,0xf4,0x5a,0x4f,0x5b,0xfb,0x5c, 0x50,0x5c,0xfd,0x5d,0x51,0x5e,0xff,0x5c,0x51,0x5e,0xff,0x5f,0x52,0x5f,0xff,0x60, 0x53,0x60,0xff,0x61,0x53,0x61,0xff,0x61,0x53,0x61,0xff,0x61,0x53,0x62,0xff,0x52, 0x4b,0x53,0xff,0x49,0x45,0x4a,0xff,0x48,0x45,0x49,0xff,0x48,0x45,0x48,0xff,0x44, 0x43,0x45,0xff,0x41,0x40,0x42,0xff,0x3e,0x3f,0x3e,0xff,0x3d,0x3f,0x3f,0xff,0x3b, 0x3d,0x3c,0xff,0x3c,0x3e,0x3d,0xff,0x3a,0x3c,0x3a,0xff,0x39,0x3c,0x3a,0xff,0x39, 0x3c,0x39,0xff,0x35,0x39,0x35,0xff,0x21,0x27,0x22,0xff,0x17,0x1c,0x18,0xff,0x1b, 0x1e,0x1a,0xff,0x3c,0x38,0x3d,0xff,0x5e,0x53,0x5f,0xff,0x58,0x4e,0x58,0xff,0x59, 0x4f,0x59,0xff,0x58,0x4e,0x59,0xff,0x5b,0x50,0x5c,0xff,0x55,0x4c,0x56,0xff,0x49, 0x46,0x49,0xff,0x63,0x54,0x62,0xff,0x74,0x5e,0x72,0xff,0x62,0x54,0x62,0xff,0x64, 0x55,0x64,0xff,0x65,0x56,0x65,0xff,0x66,0x56,0x65,0xff,0x65,0x55,0x65,0xff,0x65, 0x56,0x65,0xff,0x61,0x53,0x61,0xff,0x57,0x4e,0x57,0xff,0x51,0x4a,0x51,0xff,0x4f, 0x49,0x4f,0xff,0x50,0x4a,0x51,0xff,0x42,0x41,0x42,0xff,0x32,0x38,0x32,0xff,0x43, 0x42,0x43,0xff,0x45,0x43,0x47,0xff,0x43,0x42,0x44,0xff,0x43,0x42,0x43,0xff,0x38, 0x3b,0x38,0xff,0x39,0x3b,0x3a,0xff,0x47,0x44,0x48,0xff,0x3e,0x3f,0x3f,0xff,0x3b, 0x3d,0x3c,0xff,0x3a,0x3d,0x3b,0xff,0x3b,0x3e,0x3c,0xff,0x35,0x38,0x36,0xff,0x29, 0x2b,0x2a,0xff,0x1f,0x21,0x20,0xff,0x2a,0x28,0x2a,0xff,0x4e,0x44,0x4f,0xff,0x5d, 0x52,0x5e,0xff,0x59,0x4f,0x5a,0xff,0x5b,0x50,0x5b,0xff,0x55,0x4d,0x56,0xff,0x40, 0x40,0x43,0xff,0x71,0x5d,0x5d,0xff,0xcd,0xb1,0xaa,0xff,0x9e,0x8c,0x96,0xff,0x5a, 0x4b,0x5e,0xff,0x5a,0x4f,0x5a,0xff,0x5d,0x51,0x5d,0xff,0x5f,0x52,0x5f,0xff,0x61, 0x54,0x61,0xff,0x62,0x54,0x62,0xff,0x63,0x54,0x63,0xff,0x66,0x56,0x65,0xff,0x68, 0x56,0x66,0xff,0x69,0x57,0x68,0xff,0x68,0x57,0x68,0xff,0x68,0x57,0x68,0xff,0x68, 0x57,0x68,0xff,0x69,0x58,0x69,0xff,0x5a,0x50,0x5b,0xff,0x46,0x44,0x47,0xff,0x41, 0x42,0x42,0xff,0x2e,0x30,0x2e,0xff,0x22,0x24,0x22,0xff,0x22,0x25,0x23,0xff,0x1e, 0x22,0x1f,0xff,0x4f,0x47,0x50,0xff,0x39,0x3a,0x3b,0xff,0x2d,0x33,0x32,0xff,0x77, 0x64,0x5d,0xff,0x78,0x61,0x6a,0xff,0x5d,0x51,0x5d,0xff,0x58,0x4e,0x59,0xff,0x5a, 0x50,0x5b,0xff,0x5b,0x50,0x5c,0xff,0x5c,0x51,0x5d,0xff,0x5f,0x53,0x60,0xff,0x5f, 0x53,0x60,0xff,0x60,0x54,0x60,0xff,0x64,0x56,0x64,0xff,0x5b,0x51,0x5c,0xff,0x66, 0x55,0x66,0xff,0x6a,0x58,0x69,0xff,0x69,0x58,0x69,0xff,0x6c,0x5a,0x6b,0xff,0x6b, 0x59,0x6a,0xff,0x6a,0x58,0x69,0xff,0x68,0x56,0x67,0xff,0x66,0x56,0x66,0xff,0x5f, 0x53,0x60,0xff,0x47,0x45,0x48,0xff,0x43,0x42,0x44,0xff,0x40,0x40,0x41,0xff,0x42, 0x41,0x41,0xff,0x29,0x2b,0x28,0xff,0x0f,0x15,0x0f,0xff,0x25,0x27,0x26,0xff,0x26, 0x27,0x26,0xff,0x51,0x4a,0x52,0xff,0x63,0x55,0x63,0xff,0x67,0x56,0x66,0xff,0x68, 0x57,0x68,0xff,0x6a,0x58,0x6a,0xff,0x68,0x57,0x68,0xff,0x69,0x57,0x68,0xff,0x67, 0x57,0x67,0xff,0x69,0x58,0x68,0xff,0x67,0x57,0x66,0xff,0x66,0x57,0x66,0xff,0x28, 0x31,0x28,0xff,0x5d,0x51,0x5e,0xff,0x5e,0x52,0x5f,0xff,0x5d,0x51,0x5e,0xff,0x5c, 0x51,0x5d,0xff,0x5d,0x51,0x5d,0xff,0x5c,0x51,0x5c,0xff,0x5c,0x50,0x5c,0xff,0x5c, 0x50,0x5c,0xff,0x5d,0x51,0x5d,0xff,0x5c,0x51,0x5d,0xff,0x5b,0x50,0x5c,0xfe,0x5d, 0x51,0x5d,0xfb,0x5b,0x4f,0x5b,0xf2,0x07,0x07,0x07,0xe0,0x00,0x00,0x00,0xc1,0x00, 0x00,0x00,0x97,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x5b,0x00, 0x00,0x00,0x77,0x00,0x00,0x00,0x9f,0x04,0x04,0x04,0xc8,0x46,0x39,0x46,0xe5,0x7b, 0x64,0x78,0xf5,0x7c,0x64,0x79,0xfc,0x84,0x66,0x7b,0xfe,0x84,0x66,0x78,0xff,0x87, 0x66,0x74,0xff,0x85,0x62,0x69,0xff,0x6b,0x59,0x6c,0xff,0x6f,0x5b,0x6e,0xff,0x71, 0x5d,0x6f,0xff,0x72,0x5d,0x70,0xff,0x73,0x5d,0x71,0xff,0x71,0x5d,0x6f,0xff,0x6e, 0x5b,0x6d,0xff,0x6d,0x5a,0x6d,0xff,0x61,0x53,0x62,0xff,0x44,0x42,0x44,0xff,0x7d, 0x63,0x79,0xff,0x8c,0x68,0x74,0xff,0x95,0x70,0x6c,0xff,0xac,0x8e,0x86,0xff,0x80, 0x68,0x73,0xff,0x4f,0x49,0x53,0xff,0x52,0x4b,0x53,0xff,0x50,0x49,0x50,0xff,0x4d, 0x48,0x4e,0xff,0x51,0x49,0x51,0xff,0x53,0x4a,0x53,0xff,0x53,0x4b,0x53,0xff,0x4f, 0x49,0x50,0xff,0x44,0x3d,0x44,0xff,0x35,0x2e,0x35,0xff,0x34,0x2c,0x34,0xff,0x37, 0x2e,0x37,0xff,0x3a,0x2f,0x3a,0xff,0x3d,0x35,0x3e,0xff,0x39,0x36,0x3a,0xff,0x34, 0x34,0x37,0xff,0x6a,0x59,0x66,0xff,0x62,0x52,0x58,0xff,0x4b,0x46,0x49,0xff,0x40, 0x40,0x41,0xff,0x6f,0x5c,0x6f,0xff,0x6f,0x5b,0x6e,0xff,0x6f,0x5b,0x6e,0xff,0x6e, 0x5b,0x6e,0xff,0x73,0x5d,0x71,0xff,0x78,0x60,0x75,0xff,0x68,0x57,0x68,0xff,0x58, 0x4e,0x5a,0xff,0x59,0x4f,0x5a,0xff,0x5d,0x51,0x5e,0xff,0x4e,0x48,0x4f,0xff,0x46, 0x43,0x47,0xff,0x5c,0x51,0x5d,0xff,0x59,0x4f,0x5b,0xff,0x58,0x4e,0x58,0xff,0x5c, 0x50,0x5b,0xff,0x44,0x43,0x48,0xff,0x61,0x51,0x5c,0xff,0x74,0x5d,0x6b,0xff,0x48, 0x45,0x4a,0xff,0x4d,0x48,0x4e,0xff,0x4a,0x46,0x4b,0xff,0x4a,0x45,0x4a,0xff,0x4a, 0x46,0x49,0xff,0x48,0x45,0x49,0xff,0x49,0x45,0x49,0xff,0x48,0x45,0x48,0xff,0x48, 0x45,0x48,0xff,0x48,0x45,0x48,0xff,0x48,0x45,0x48,0xff,0x47,0x44,0x47,0xff,0x5e, 0x52,0x5e,0xff,0x6c,0x5a,0x6c,0xff,0x69,0x58,0x69,0xff,0x6a,0x58,0x69,0xff,0x69, 0x57,0x68,0xff,0x6a,0x58,0x69,0xff,0x69,0x58,0x69,0xff,0x65,0x56,0x65,0xff,0x6d, 0x5a,0x6c,0xff,0x70,0x5c,0x6f,0xff,0x73,0x5e,0x72,0xff,0x58,0x4e,0x59,0xff,0x5c, 0x51,0x5e,0xff,0x7c,0x62,0x73,0xff,0x79,0x60,0x74,0xff,0x75,0x5f,0x73,0xff,0x79, 0x62,0x76,0xff,0x70,0x5c,0x6e,0xff,0x66,0x56,0x66,0xff,0x6f,0x5b,0x6d,0xff,0x6f, 0x5b,0x6d,0xff,0x79,0x61,0x76,0xff,0x62,0x54,0x61,0xff,0x4a,0x46,0x4a,0xff,0x44, 0x43,0x45,0xff,0x44,0x43,0x45,0xff,0x43,0x42,0x44,0xff,0x42,0x42,0x43,0xff,0x42, 0x42,0x43,0xff,0x43,0x42,0x44,0xff,0x43,0x42,0x44,0xff,0x43,0x42,0x44,0xff,0x40, 0x41,0x41,0xff,0x4a,0x45,0x4a,0xff,0x4d,0x46,0x54,0xff,0x8c,0x6b,0x6d,0xff,0xac, 0x8b,0x82,0xff,0xaa,0x8b,0x81,0xff,0xa7,0x87,0x7d,0xff,0xa6,0x86,0x7c,0xff,0xa7, 0x87,0x7d,0xff,0xa7,0x87,0x7d,0xff,0xa6,0x85,0x7b,0xff,0xa6,0x85,0x7b,0xff,0xa5, 0x84,0x79,0xfe,0xa4,0x83,0x79,0xfc,0xae,0x8a,0x7f,0xf7,0x84,0x69,0x61,0xef,0x13, 0x0f,0x0d,0xde,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0x80,0x00, 0x00,0x00,0x5a,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x10,0x00, 0x00,0x00,0x07,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x05,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x3d,0x00, 0x00,0x00,0x65,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0xbb,0x08,0x07,0x08,0xda,0x4f, 0x45,0x4f,0xee,0x5e,0x52,0x5e,0xf8,0x5e,0x52,0x5f,0xfc,0x60,0x53,0x60,0xfe,0x61, 0x54,0x62,0xff,0x62,0x55,0x62,0xff,0x63,0x55,0x63,0xff,0x63,0x55,0x63,0xff,0x63, 0x55,0x63,0xff,0x62,0x54,0x62,0xff,0x5c,0x50,0x5c,0xff,0x49,0x45,0x49,0xff,0x49, 0x46,0x4a,0xff,0x47,0x45,0x48,0xff,0x45,0x43,0x46,0xff,0x42,0x41,0x43,0xff,0x3b, 0x3e,0x3c,0xff,0x3c,0x3e,0x3c,0xff,0x3b,0x3d,0x3b,0xff,0x3a,0x3d,0x3b,0xff,0x3a, 0x3d,0x3b,0xff,0x3b,0x3d,0x3b,0xff,0x36,0x39,0x36,0xff,0x26,0x28,0x26,0xff,0x23, 0x26,0x24,0xff,0x21,0x25,0x22,0xff,0x0d,0x15,0x0e,0xff,0x20,0x22,0x21,0xff,0x5a, 0x50,0x5b,0xff,0x59,0x4f,0x59,0xff,0x59,0x4f,0x5a,0xff,0x59,0x4f,0x5a,0xff,0x5a, 0x50,0x5b,0xff,0x59,0x4e,0x5a,0xff,0x43,0x42,0x44,0xff,0x45,0x43,0x45,0xff,0x70, 0x5c,0x6e,0xff,0x62,0x54,0x62,0xff,0x64,0x55,0x64,0xff,0x65,0x56,0x65,0xff,0x66, 0x56,0x65,0xff,0x66,0x56,0x66,0xff,0x64,0x56,0x64,0xff,0x63,0x55,0x63,0xff,0x5b, 0x50,0x5b,0xff,0x50,0x49,0x51,0xff,0x4e,0x49,0x4f,0xff,0x45,0x43,0x45,0xff,0x31, 0x37,0x31,0xff,0x2e,0x34,0x2e,0xff,0x3c,0x3e,0x3e,0xff,0x3d,0x3e,0x3e,0xff,0x43, 0x42,0x44,0xff,0x3c,0x3e,0x3d,0xff,0x3f,0x40,0x40,0xff,0x2c,0x33,0x2c,0xff,0x24, 0x2f,0x25,0xff,0x3b,0x3d,0x3c,0xff,0x3c,0x3e,0x3c,0xff,0x3c,0x3e,0x3c,0xff,0x35, 0x38,0x36,0xff,0x27,0x2a,0x29,0xff,0x24,0x26,0x25,0xff,0x24,0x26,0x25,0xff,0x24, 0x25,0x25,0xff,0x3f,0x39,0x40,0xff,0x59,0x4f,0x5a,0xff,0x59,0x4f,0x5a,0xff,0x5a, 0x50,0x5b,0xff,0x5c,0x50,0x5d,0xff,0x57,0x4e,0x59,0xff,0x4f,0x45,0x4e,0xff,0x85, 0x69,0x67,0xff,0x85,0x6b,0x72,0xff,0x58,0x4e,0x5e,0xff,0x59,0x4e,0x5b,0xff,0x5c, 0x51,0x5c,0xff,0x5d,0x52,0x5e,0xff,0x60,0x53,0x60,0xff,0x62,0x54,0x62,0xff,0x62, 0x55,0x62,0xff,0x65,0x56,0x64,0xff,0x67,0x57,0x66,0xff,0x68,0x57,0x68,0xff,0x68, 0x57,0x68,0xff,0x68,0x57,0x68,0xff,0x67,0x56,0x67,0xff,0x68,0x57,0x66,0xff,0x60, 0x53,0x60,0xff,0x48,0x45,0x49,0xff,0x3e,0x40,0x3f,0xff,0x2e,0x2f,0x2e,0xff,0x24, 0x25,0x24,0xff,0x23,0x26,0x24,0xff,0x1e,0x23,0x20,0xff,0x4a,0x43,0x4a,0xff,0x33, 0x36,0x33,0xff,0x5c,0x4f,0x5c,0xff,0x88,0x6b,0x78,0xff,0x62,0x54,0x5e,0xff,0x58, 0x4e,0x5a,0xff,0x5a,0x4f,0x5b,0xff,0x5a,0x4f,0x5b,0xff,0x5b,0x50,0x5c,0xff,0x5c, 0x51,0x5d,0xff,0x5d,0x52,0x5e,0xff,0x5f,0x53,0x60,0xff,0x5f,0x53,0x60,0xff,0x62, 0x55,0x62,0xff,0x64,0x55,0x64,0xff,0x66,0x56,0x66,0xff,0x69,0x57,0x68,0xff,0x69, 0x57,0x68,0xff,0x6a,0x58,0x69,0xff,0x69,0x58,0x69,0xff,0x69,0x58,0x69,0xff,0x68, 0x56,0x67,0xff,0x66,0x56,0x65,0xff,0x65,0x56,0x65,0xff,0x49,0x45,0x4a,0xff,0x41, 0x41,0x41,0xff,0x41,0x41,0x41,0xff,0x3b,0x3b,0x3b,0xff,0x29,0x2a,0x2a,0xff,0x17, 0x1c,0x17,0xff,0x24,0x25,0x25,0xff,0x1c,0x1d,0x1c,0xff,0x52,0x47,0x52,0xff,0x64, 0x56,0x64,0xff,0x66,0x56,0x65,0xff,0x67,0x56,0x67,0xff,0x69,0x57,0x68,0xff,0x68, 0x57,0x68,0xff,0x69,0x57,0x69,0xff,0x6b,0x58,0x6a,0xff,0x68,0x57,0x67,0xff,0x68, 0x57,0x68,0xff,0x6a,0x58,0x69,0xff,0x1a,0x26,0x1b,0xff,0x6d,0x5b,0x6b,0xff,0x5e, 0x52,0x5f,0xff,0x5e,0x52,0x5f,0xff,0x5e,0x52,0x5f,0xff,0x5d,0x51,0x5d,0xff,0x5a, 0x50,0x5b,0xff,0x5d,0x51,0x5d,0xff,0x5d,0x51,0x5d,0xff,0x5c,0x50,0x5c,0xff,0x5d, 0x51,0x5d,0xff,0x5b,0x50,0x5c,0xfe,0x5c,0x50,0x5c,0xfb,0x5a,0x4e,0x5a,0xf2,0x07, 0x07,0x07,0xe0,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x71,0x00, 0x00,0x00,0x57,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x9e,0x03, 0x02,0x03,0xc7,0x35,0x2c,0x34,0xe4,0x7e,0x65,0x7b,0xf4,0x6f,0x5b,0x6e,0xfc,0x60, 0x52,0x5c,0xfe,0x88,0x68,0x79,0xff,0x87,0x66,0x74,0xff,0x84,0x65,0x72,0xff,0x6c, 0x5a,0x6d,0xff,0x71,0x5c,0x6f,0xff,0x74,0x5e,0x71,0xff,0x76,0x60,0x73,0xff,0x76, 0x5f,0x73,0xff,0x73,0x5e,0x71,0xff,0x73,0x5e,0x71,0xff,0x71,0x5c,0x6f,0xff,0x68, 0x57,0x67,0xff,0x4d,0x47,0x4d,0xff,0x58,0x4e,0x57,0xff,0x76,0x5d,0x6a,0xff,0x97, 0x6e,0x6c,0xff,0x96,0x79,0x72,0xff,0x56,0x4c,0x5d,0xff,0x56,0x4d,0x57,0xff,0x55, 0x4d,0x56,0xff,0x54,0x4c,0x55,0xff,0x53,0x4c,0x54,0xff,0x54,0x4c,0x54,0xff,0x55, 0x4c,0x56,0xff,0x57,0x4e,0x58,0xff,0x51,0x48,0x51,0xff,0x3d,0x36,0x3d,0xff,0x38, 0x2f,0x38,0xff,0x37,0x2e,0x37,0xff,0x38,0x2f,0x38,0xff,0x38,0x30,0x38,0xff,0x3d, 0x32,0x3c,0xff,0x2f,0x2c,0x2f,0xff,0x14,0x20,0x16,0xff,0x3b,0x3e,0x3d,0xff,0x3e, 0x40,0x40,0xff,0x36,0x3b,0x38,0xff,0x3e,0x3f,0x3f,0xff,0x5a,0x4f,0x5b,0xff,0x72, 0x5d,0x71,0xff,0x6f,0x5b,0x6e,0xff,0x6e,0x5a,0x6d,0xff,0x76,0x5f,0x73,0xff,0x78, 0x60,0x74,0xff,0x61,0x52,0x61,0xff,0x58,0x4f,0x5a,0xff,0x5a,0x50,0x5b,0xff,0x5c, 0x50,0x5d,0xff,0x5b,0x50,0x5c,0xff,0x4f,0x49,0x4f,0xff,0x50,0x49,0x51,0xff,0x5e, 0x51,0x5f,0xff,0x59,0x4f,0x59,0xff,0x5b,0x51,0x5c,0xff,0x42,0x41,0x43,0xff,0x45, 0x42,0x46,0xff,0x5c,0x51,0x5d,0xff,0x4c,0x48,0x4d,0xff,0x4d,0x48,0x4e,0xff,0x4b, 0x46,0x4c,0xff,0x4a,0x47,0x4b,0xff,0x4b,0x47,0x4c,0xff,0x4a,0x46,0x4b,0xff,0x4a, 0x46,0x4b,0xff,0x4a,0x46,0x4b,0xff,0x4a,0x46,0x4b,0xff,0x4a,0x46,0x4b,0xff,0x49, 0x45,0x4a,0xff,0x50,0x49,0x51,0xff,0x65,0x55,0x65,0xff,0x6f,0x5b,0x6d,0xff,0x6e, 0x5b,0x6d,0xff,0x6e,0x5b,0x6d,0xff,0x6f,0x5b,0x6e,0xff,0x71,0x5d,0x70,0xff,0x3c, 0x3b,0x3d,0xff,0x3a,0x3b,0x3b,0xff,0x57,0x4e,0x57,0xff,0x61,0x53,0x61,0xff,0x5d, 0x51,0x5f,0xff,0x6c,0x57,0x60,0xff,0x78,0x5f,0x6f,0xff,0x76,0x60,0x76,0xff,0x77, 0x60,0x74,0xff,0x77,0x60,0x74,0xff,0x78,0x60,0x75,0xff,0x74,0x5e,0x71,0xff,0x6d, 0x5b,0x6c,0xff,0x6e,0x5b,0x6d,0xff,0x6d,0x5a,0x6d,0xff,0x7a,0x62,0x78,0xff,0x56, 0x4d,0x56,0xff,0x45,0x43,0x45,0xff,0x46,0x43,0x46,0xff,0x45,0x43,0x46,0xff,0x44, 0x42,0x45,0xff,0x43,0x42,0x44,0xff,0x43,0x42,0x44,0xff,0x43,0x42,0x44,0xff,0x43, 0x42,0x44,0xff,0x41,0x41,0x42,0xff,0x47,0x44,0x47,0xff,0x52,0x4b,0x53,0xff,0x4e, 0x48,0x4f,0xff,0x52,0x46,0x4f,0xff,0x98,0x79,0x71,0xff,0xab,0x8b,0x80,0xff,0xa8, 0x8a,0x7e,0xff,0xa8,0x88,0x7e,0xff,0xaa,0x8a,0x7f,0xff,0x9b,0x77,0x6f,0xff,0xa6, 0x85,0x7a,0xff,0xa7,0x87,0x7d,0xff,0xa5,0x84,0x7a,0xff,0xa5,0x84,0x7a,0xfe,0xa4, 0x83,0x79,0xfc,0xae,0x8b,0x7f,0xf8,0x78,0x60,0x58,0xed,0x0d,0x0b,0x0a,0xdc,0x00, 0x00,0x00,0xc2,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x54,0x00, 0x00,0x00,0x34,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x07,0x00, 0x00,0x00,0x02,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x09,0x00, 0x00,0x00,0x17,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x7b,0x00, 0x00,0x00,0xa7,0x01,0x01,0x02,0xcb,0x1f,0x1b,0x20,0xe5,0x60,0x54,0x60,0xf4,0x5e, 0x52,0x5f,0xfb,0x61,0x53,0x61,0xfd,0x64,0x55,0x64,0xff,0x64,0x56,0x64,0xff,0x64, 0x55,0x64,0xff,0x65,0x56,0x65,0xff,0x65,0x56,0x65,0xff,0x63,0x55,0x63,0xff,0x5f, 0x52,0x5f,0xff,0x54,0x4c,0x54,0xff,0x49,0x45,0x4a,0xff,0x47,0x45,0x47,0xff,0x45, 0x43,0x46,0xff,0x42,0x41,0x43,0xff,0x3b,0x3e,0x3c,0xff,0x3c,0x3e,0x3d,0xff,0x3a, 0x3c,0x3a,0xff,0x38,0x3b,0x38,0xff,0x3b,0x3d,0x3b,0xff,0x37,0x39,0x37,0xff,0x25, 0x29,0x26,0xff,0x20,0x23,0x20,0xff,0x1e,0x22,0x1e,0xff,0x10,0x17,0x11,0xff,0x22, 0x23,0x21,0xff,0x3a,0x30,0x39,0xff,0x39,0x34,0x39,0xff,0x5d,0x52,0x5d,0xff,0x58, 0x4e,0x58,0xff,0x59,0x4f,0x5a,0xff,0x5a,0x4f,0x5b,0xff,0x5d,0x51,0x5d,0xff,0x50, 0x49,0x50,0xff,0x42,0x41,0x43,0xff,0x63,0x55,0x64,0xff,0x62,0x54,0x63,0xff,0x64, 0x55,0x64,0xff,0x66,0x56,0x66,0xff,0x67,0x56,0x66,0xff,0x66,0x56,0x66,0xff,0x65, 0x56,0x65,0xff,0x65,0x56,0x65,0xff,0x5e,0x52,0x5e,0xff,0x52,0x4a,0x52,0xff,0x50, 0x49,0x50,0xff,0x49,0x46,0x4a,0xff,0x35,0x39,0x35,0xff,0x29,0x31,0x28,0xff,0x38, 0x3b,0x38,0xff,0x35,0x39,0x36,0xff,0x24,0x2b,0x25,0xff,0x16,0x1d,0x16,0xff,0x23, 0x27,0x23,0xff,0x2d,0x33,0x2e,0xff,0x1c,0x28,0x1d,0xff,0x23,0x2d,0x23,0xff,0x36, 0x3b,0x35,0xff,0x36,0x38,0x37,0xff,0x27,0x2a,0x28,0xff,0x24,0x26,0x25,0xff,0x25, 0x27,0x26,0xff,0x25,0x27,0x26,0xff,0x20,0x23,0x21,0xff,0x3a,0x36,0x3a,0xff,0x5a, 0x4f,0x5b,0xff,0x59,0x4f,0x59,0xff,0x59,0x4f,0x5a,0xff,0x59,0x4e,0x59,0xff,0x59, 0x4f,0x59,0xff,0x54,0x4d,0x57,0xff,0x4f,0x47,0x4f,0xff,0x75,0x5b,0x5b,0xff,0xa4, 0x85,0x7d,0xff,0x7a,0x6a,0x6e,0xff,0x57,0x4c,0x5a,0xff,0x5c,0x50,0x5d,0xff,0x5e, 0x52,0x5f,0xff,0x61,0x54,0x61,0xff,0x63,0x55,0x63,0xff,0x64,0x56,0x64,0xff,0x67, 0x57,0x67,0xff,0x68,0x57,0x68,0xff,0x68,0x57,0x68,0xff,0x68,0x57,0x68,0xff,0x68, 0x57,0x68,0xff,0x68,0x57,0x67,0xff,0x66,0x56,0x66,0xff,0x49,0x45,0x4a,0xff,0x3d, 0x40,0x3f,0xff,0x31,0x33,0x31,0xff,0x26,0x28,0x26,0xff,0x24,0x26,0x24,0xff,0x1f, 0x24,0x1f,0xff,0x37,0x38,0x38,0xff,0x66,0x57,0x65,0xff,0x69,0x58,0x68,0xff,0x5c, 0x50,0x5f,0xff,0x59,0x4f,0x5b,0xff,0x5a,0x4f,0x5b,0xff,0x59,0x4f,0x5a,0xff,0x59, 0x4f,0x5a,0xff,0x5b,0x50,0x5c,0xff,0x5b,0x50,0x5c,0xff,0x5c,0x51,0x5d,0xff,0x5e, 0x52,0x5e,0xff,0x5f,0x53,0x60,0xff,0x61,0x54,0x61,0xff,0x65,0x56,0x64,0xff,0x67, 0x56,0x66,0xff,0x68,0x57,0x68,0xff,0x68,0x57,0x68,0xff,0x69,0x58,0x69,0xff,0x68, 0x57,0x68,0xff,0x68,0x57,0x68,0xff,0x68,0x56,0x67,0xff,0x64,0x55,0x63,0xff,0x66, 0x56,0x66,0xff,0x48,0x45,0x49,0xff,0x3e,0x3f,0x3f,0xff,0x3f,0x40,0x40,0xff,0x32, 0x33,0x33,0xff,0x26,0x27,0x28,0xff,0x1c,0x21,0x1c,0xff,0x1a,0x1f,0x1b,0xff,0x16, 0x17,0x16,0xff,0x4b,0x41,0x4b,0xff,0x63,0x54,0x63,0xff,0x64,0x56,0x65,0xff,0x68, 0x56,0x67,0xff,0x68,0x57,0x68,0xff,0x68,0x57,0x68,0xff,0x68,0x57,0x68,0xff,0x68, 0x57,0x68,0xff,0x67,0x56,0x66,0xff,0x67,0x56,0x66,0xff,0x68,0x58,0x67,0xff,0x1c, 0x25,0x1d,0xff,0x6f,0x5b,0x6e,0xff,0x5e,0x51,0x5e,0xff,0x5d,0x51,0x5d,0xff,0x5c, 0x50,0x5d,0xff,0x5a,0x4f,0x5b,0xff,0x59,0x4f,0x5a,0xff,0x5b,0x50,0x5c,0xff,0x5b, 0x50,0x5c,0xff,0x59,0x4f,0x5a,0xff,0x5a,0x4f,0x5b,0xff,0x59,0x4f,0x5a,0xfe,0x5b, 0x50,0x5c,0xfb,0x57,0x4d,0x58,0xf2,0x04,0x05,0x04,0xe0,0x00,0x00,0x00,0xc1,0x00, 0x00,0x00,0x97,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x58,0x00, 0x00,0x00,0x74,0x00,0x00,0x00,0x9c,0x02,0x02,0x02,0xc5,0x22,0x1d,0x22,0xe2,0x4c, 0x49,0x4d,0xf3,0x41,0x41,0x42,0xfb,0x56,0x4d,0x54,0xfe,0x8a,0x68,0x78,0xff,0x87, 0x66,0x73,0xff,0x81,0x64,0x77,0xff,0x6d,0x5a,0x6d,0xff,0x73,0x5e,0x71,0xff,0x73, 0x5e,0x71,0xff,0x76,0x5f,0x73,0xff,0x75,0x5e,0x72,0xff,0x75,0x5e,0x72,0xff,0x71, 0x5d,0x70,0xff,0x70,0x5b,0x6e,0xff,0x69,0x57,0x68,0xff,0x55,0x4c,0x56,0xff,0x4e, 0x48,0x4f,0xff,0x4a,0x46,0x4a,0xff,0x58,0x4d,0x51,0xff,0x67,0x58,0x61,0xff,0x56, 0x4d,0x59,0xff,0x57,0x4d,0x57,0xff,0x56,0x4d,0x57,0xff,0x55,0x4d,0x56,0xff,0x52, 0x4b,0x52,0xff,0x54,0x4c,0x55,0xff,0x54,0x4c,0x55,0xff,0x56,0x4d,0x57,0xff,0x4f, 0x47,0x50,0xff,0x37,0x31,0x38,0xff,0x35,0x2d,0x35,0xff,0x39,0x30,0x38,0xff,0x3a, 0x30,0x3a,0xff,0x38,0x2f,0x37,0xff,0x38,0x2e,0x38,0xff,0x39,0x2f,0x38,0xff,0x2a, 0x2d,0x2b,0xff,0x1f,0x2b,0x20,0xff,0x27,0x30,0x27,0xff,0x38,0x3b,0x39,0xff,0x52, 0x4a,0x52,0xff,0x4e,0x48,0x4e,0xff,0x62,0x54,0x62,0xff,0x6e,0x5a,0x6c,0xff,0x6c, 0x5a,0x6c,0xff,0x77,0x60,0x73,0xff,0x77,0x60,0x72,0xff,0x5c,0x51,0x5d,0xff,0x58, 0x4e,0x59,0xff,0x5a,0x4f,0x5b,0xff,0x5b,0x50,0x5c,0xff,0x5f,0x52,0x5f,0xff,0x53, 0x4c,0x54,0xff,0x3c,0x3e,0x3d,0xff,0x3d,0x3f,0x3e,0xff,0x43,0x42,0x44,0xff,0x41, 0x41,0x43,0xff,0x3a,0x3c,0x3c,0xff,0x5a,0x4f,0x58,0xff,0x69,0x58,0x66,0xff,0x4a, 0x46,0x4b,0xff,0x4c,0x47,0x4c,0xff,0x4b,0x47,0x4c,0xff,0x4a,0x46,0x4b,0xff,0x4a, 0x46,0x4b,0xff,0x4a,0x46,0x4b,0xff,0x4a,0x46,0x4b,0xff,0x4a,0x46,0x4b,0xff,0x4a, 0x46,0x4b,0xff,0x4a,0x46,0x4b,0xff,0x47,0x44,0x48,0xff,0x5a,0x4f,0x5b,0xff,0x6c, 0x5a,0x6c,0xff,0x6f,0x5b,0x6e,0xff,0x61,0x53,0x60,0xff,0x58,0x4e,0x59,0xff,0x57, 0x4e,0x57,0xff,0x37,0x38,0x38,0xff,0x1c,0x28,0x1d,0xff,0x36,0x39,0x36,0xff,0x4a, 0x46,0x4b,0xff,0x54,0x4c,0x55,0xff,0x63,0x55,0x63,0xff,0x77,0x5f,0x71,0xff,0x7b, 0x61,0x75,0xff,0x76,0x5f,0x73,0xff,0x76,0x5f,0x73,0xff,0x77,0x60,0x74,0xff,0x77, 0x60,0x74,0xff,0x77,0x60,0x74,0xff,0x75,0x5f,0x72,0xff,0x70,0x5c,0x6f,0xff,0x75, 0x5f,0x74,0xff,0x6b,0x59,0x6b,0xff,0x4e,0x48,0x4e,0xff,0x46,0x43,0x46,0xff,0x46, 0x43,0x46,0xff,0x45,0x43,0x46,0xff,0x44,0x42,0x45,0xff,0x43,0x42,0x44,0xff,0x43, 0x42,0x44,0xff,0x43,0x42,0x44,0xff,0x41,0x41,0x42,0xff,0x3f,0x40,0x40,0xff,0x4f, 0x49,0x50,0xff,0x54,0x4c,0x56,0xff,0x54,0x4c,0x54,0xff,0x4b,0x47,0x4e,0xff,0x5e, 0x51,0x5a,0xff,0xa2,0x86,0x80,0xff,0xb4,0x97,0x8c,0xff,0xae,0x8f,0x83,0xff,0x89, 0x6e,0x7a,0xff,0x6c,0x58,0x63,0xff,0x7a,0x62,0x73,0xff,0xa1,0x82,0x7c,0xff,0xa8, 0x86,0x7c,0xff,0xa6,0x86,0x7c,0xff,0xa5,0x84,0x7a,0xfd,0xa4,0x83,0x78,0xfc,0xab, 0x89,0x7d,0xf6,0x6a,0x55,0x4d,0xec,0x09,0x07,0x06,0xd9,0x00,0x00,0x00,0xbd,0x00, 0x00,0x00,0x9a,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x32,0x00, 0x00,0x00,0x1c,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x02,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x02,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x21,0x00, 0x00,0x00,0x3e,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0xb9,0x04, 0x04,0x04,0xd9,0x3f,0x37,0x40,0xed,0x60,0x54,0x60,0xf7,0x58,0x4e,0x59,0xfd,0x5e, 0x52,0x5e,0xfe,0x5a,0x50,0x5b,0xff,0x40,0x40,0x41,0xff,0x64,0x56,0x64,0xff,0x63, 0x55,0x63,0xff,0x62,0x54,0x62,0xff,0x60,0x53,0x60,0xff,0x5d,0x51,0x5d,0xff,0x48, 0x45,0x49,0xff,0x42,0x41,0x43,0xff,0x41,0x40,0x42,0xff,0x3a,0x3d,0x3b,0xff,0x3a, 0x3d,0x3b,0xff,0x38,0x3c,0x39,0xff,0x3a,0x3c,0x3a,0xff,0x38,0x3b,0x39,0xff,0x37, 0x3a,0x38,0xff,0x2a,0x2e,0x2b,0xff,0x21,0x24,0x21,0xff,0x1e,0x22,0x1e,0xff,0x18, 0x1e,0x19,0xff,0x22,0x23,0x24,0xff,0x4d,0x3d,0x49,0xff,0x4b,0x3c,0x45,0xff,0x27, 0x29,0x28,0xff,0x5d,0x53,0x5e,0xff,0x58,0x4e,0x59,0xff,0x59,0x4f,0x5a,0xff,0x59, 0x4f,0x5a,0xff,0x5d,0x51,0x5e,0xff,0x57,0x4d,0x57,0xff,0x47,0x45,0x48,0xff,0x58, 0x4f,0x58,0xff,0x65,0x56,0x65,0xff,0x64,0x55,0x64,0xff,0x66,0x56,0x66,0xff,0x67, 0x56,0x66,0xff,0x67,0x56,0x66,0xff,0x66,0x56,0x66,0xff,0x65,0x56,0x65,0xff,0x62, 0x54,0x62,0xff,0x57,0x4e,0x58,0xff,0x50,0x4a,0x50,0xff,0x4d,0x48,0x4e,0xff,0x42, 0x41,0x43,0xff,0x2e,0x35,0x2e,0xff,0x27,0x30,0x27,0xff,0x1e,0x27,0x1f,0xff,0x15, 0x1c,0x15,0xff,0x15,0x1d,0x16,0xff,0x09,0x0d,0x09,0xff,0x15,0x18,0x17,0xff,0x6a, 0x5a,0x54,0xff,0x69,0x59,0x4f,0xff,0x1a,0x26,0x1e,0xff,0x20,0x23,0x20,0xff,0x26, 0x27,0x26,0xff,0x26,0x27,0x26,0xff,0x26,0x27,0x26,0xff,0x26,0x27,0x26,0xff,0x1f, 0x21,0x1f,0xff,0x3b,0x36,0x3b,0xff,0x5c,0x51,0x5c,0xff,0x58,0x4e,0x58,0xff,0x58, 0x4e,0x58,0xff,0x58,0x4e,0x58,0xff,0x58,0x4e,0x58,0xff,0x59,0x4e,0x59,0xff,0x56, 0x4d,0x58,0xff,0x4b,0x46,0x4c,0xff,0x88,0x72,0x6a,0xff,0x9e,0x7a,0x7a,0xff,0x6b, 0x56,0x63,0xff,0x5a,0x50,0x5d,0xff,0x5e,0x52,0x5f,0xff,0x5f,0x52,0x5f,0xff,0x61, 0x54,0x61,0xff,0x62,0x54,0x62,0xff,0x66,0x56,0x66,0xff,0x68,0x56,0x67,0xff,0x68, 0x57,0x67,0xff,0x67,0x56,0x67,0xff,0x68,0x57,0x67,0xff,0x68,0x57,0x67,0xff,0x67, 0x57,0x67,0xff,0x4d,0x48,0x4d,0xff,0x3f,0x40,0x40,0xff,0x38,0x3a,0x38,0xff,0x29, 0x2b,0x29,0xff,0x20,0x23,0x20,0xff,0x1e,0x22,0x1e,0xff,0x25,0x27,0x26,0xff,0x53, 0x49,0x54,0xff,0x5c,0x51,0x5d,0xff,0x57,0x4e,0x58,0xff,0x59,0x4f,0x5a,0xff,0x59, 0x4f,0x5a,0xff,0x59,0x4f,0x5a,0xff,0x59,0x4f,0x5a,0xff,0x5b,0x50,0x5c,0xff,0x5b, 0x50,0x5c,0xff,0x5c,0x51,0x5d,0xff,0x5e,0x52,0x5e,0xff,0x5f,0x53,0x60,0xff,0x61, 0x54,0x61,0xff,0x65,0x56,0x64,0xff,0x67,0x56,0x66,0xff,0x68,0x57,0x68,0xff,0x6a, 0x58,0x69,0xff,0x6a,0x58,0x69,0xff,0x6a,0x58,0x69,0xff,0x68,0x57,0x68,0xff,0x67, 0x56,0x66,0xff,0x66,0x56,0x65,0xff,0x65,0x56,0x65,0xff,0x49,0x45,0x4a,0xff,0x41, 0x41,0x42,0xff,0x33,0x34,0x34,0xff,0x28,0x29,0x29,0xff,0x23,0x24,0x24,0xff,0x24, 0x24,0x24,0xff,0x1b,0x21,0x1b,0xff,0x11,0x12,0x11,0xff,0x43,0x3a,0x44,0xff,0x4d, 0x47,0x4d,0xff,0x5a,0x4f,0x5a,0xff,0x63,0x54,0x62,0xff,0x66,0x56,0x66,0xff,0x69, 0x58,0x69,0xff,0x68,0x57,0x68,0xff,0x68,0x57,0x68,0xff,0x68,0x57,0x68,0xff,0x68, 0x58,0x68,0xff,0x4d,0x48,0x4e,0xff,0x24,0x2b,0x25,0xff,0x63,0x55,0x63,0xff,0x5d, 0x51,0x5d,0xff,0x5b,0x50,0x5c,0xff,0x5b,0x50,0x5c,0xff,0x59,0x4f,0x5a,0xff,0x59, 0x4f,0x5a,0xff,0x59,0x4f,0x5a,0xff,0x59,0x4f,0x5a,0xff,0x59,0x4f,0x5a,0xff,0x59, 0x4f,0x5a,0xff,0x59,0x4f,0x5a,0xfe,0x59,0x4f,0x5a,0xfb,0x57,0x4d,0x58,0xf2,0x01, 0x02,0x01,0xe0,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x6f,0x00, 0x00,0x00,0x54,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x95,0x01, 0x01,0x01,0xbf,0x10,0x0e,0x10,0xde,0x31,0x39,0x32,0xf1,0x46,0x44,0x47,0xfa,0x5c, 0x50,0x5c,0xfd,0x89,0x68,0x77,0xff,0x87,0x65,0x72,0xff,0x7f,0x65,0x77,0xff,0x6d, 0x5a,0x6c,0xff,0x72,0x5d,0x70,0xff,0x73,0x5e,0x71,0xff,0x73,0x5e,0x71,0xff,0x75, 0x5e,0x72,0xff,0x73,0x5e,0x71,0xff,0x72,0x5d,0x70,0xff,0x70,0x5c,0x6f,0xff,0x6b, 0x59,0x6b,0xff,0x5c,0x51,0x5d,0xff,0x49,0x45,0x4a,0xff,0x51,0x4a,0x53,0xff,0x49, 0x46,0x4c,0xff,0x5a,0x4f,0x5d,0xff,0x58,0x4f,0x59,0xff,0x56,0x4d,0x57,0xff,0x58, 0x4e,0x58,0xff,0x54,0x4c,0x55,0xff,0x53,0x4b,0x53,0xff,0x54,0x4c,0x55,0xff,0x55, 0x4c,0x56,0xff,0x57,0x4e,0x58,0xff,0x4e,0x47,0x4f,0xff,0x38,0x32,0x39,0xff,0x35, 0x2d,0x35,0xff,0x36,0x2d,0x35,0xff,0x37,0x2e,0x37,0xff,0x39,0x2e,0x37,0xff,0x37, 0x2d,0x36,0xff,0x2a,0x27,0x2b,0xff,0x1a,0x1f,0x1b,0xff,0x11,0x1b,0x12,0xff,0x24, 0x2c,0x26,0xff,0x51,0x4b,0x51,0xff,0x55,0x4d,0x55,0xff,0x51,0x4b,0x52,0xff,0x5b, 0x50,0x5a,0xff,0x6f,0x5b,0x6e,0xff,0x6e,0x5b,0x6e,0xff,0x78,0x60,0x74,0xff,0x76, 0x5f,0x70,0xff,0x5a,0x4f,0x5b,0xff,0x59,0x4f,0x5a,0xff,0x5b,0x50,0x5c,0xff,0x5c, 0x50,0x5c,0xff,0x5e,0x51,0x5d,0xff,0x5f,0x53,0x60,0xff,0x40,0x3f,0x40,0xff,0x38, 0x3a,0x39,0xff,0x3e,0x3f,0x40,0xff,0x3a,0x3c,0x3a,0xff,0x60,0x52,0x5d,0xff,0x65, 0x55,0x63,0xff,0x5c,0x51,0x5c,0xff,0x4a,0x46,0x4b,0xff,0x4c,0x47,0x4c,0xff,0x4b, 0x47,0x4c,0xff,0x4a,0x46,0x4b,0xff,0x4a,0x46,0x4b,0xff,0x4a,0x46,0x4b,0xff,0x4a, 0x46,0x4b,0xff,0x4a,0x46,0x4b,0xff,0x4a,0x46,0x4b,0xff,0x4a,0x46,0x4b,0xff,0x47, 0x45,0x49,0xff,0x60,0x53,0x60,0xff,0x57,0x4d,0x57,0xff,0x47,0x44,0x48,0xff,0x57, 0x4d,0x58,0xff,0x6b,0x59,0x6b,0xff,0x45,0x42,0x45,0xff,0x2e,0x35,0x2e,0xff,0x3f, 0x3f,0x40,0xff,0x45,0x43,0x45,0xff,0x48,0x43,0x4c,0xff,0x82,0x6b,0x68,0xff,0x9e, 0x7a,0x6f,0xff,0x6b,0x59,0x5e,0xff,0x61,0x53,0x63,0xff,0x74,0x5e,0x71,0xff,0x77, 0x60,0x74,0xff,0x77,0x60,0x74,0xff,0x77,0x60,0x74,0xff,0x76,0x5f,0x73,0xff,0x72, 0x5d,0x70,0xff,0x6d,0x5b,0x6c,0xff,0x7c,0x62,0x79,0xff,0x58,0x4e,0x59,0xff,0x45, 0x43,0x46,0xff,0x47,0x44,0x47,0xff,0x46,0x43,0x46,0xff,0x43,0x42,0x44,0xff,0x43, 0x42,0x44,0xff,0x43,0x42,0x44,0xff,0x41,0x41,0x42,0xff,0x41,0x41,0x42,0xff,0x41, 0x41,0x42,0xff,0x42,0x42,0x43,0xff,0x51,0x4a,0x52,0xff,0x56,0x4d,0x57,0xff,0x56, 0x4d,0x57,0xff,0x56,0x4d,0x57,0xff,0x4b,0x47,0x4f,0xff,0x73,0x5d,0x6c,0xff,0xba, 0xa2,0x9f,0xff,0x99,0x76,0x75,0xff,0x84,0x64,0x73,0xff,0x91,0x73,0x70,0xff,0x90, 0x6b,0x6a,0xff,0x72,0x5d,0x6c,0xff,0x9a,0x7d,0x79,0xff,0xb0,0x93,0x8a,0xff,0xb2, 0x95,0x8b,0xfe,0xa8,0x89,0x7f,0xfd,0xa6,0x85,0x7a,0xfb,0xa9,0x87,0x7b,0xf5,0x57, 0x45,0x40,0xe9,0x07,0x05,0x05,0xd4,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x95,0x00, 0x00,0x00,0x70,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x1a,0x00, 0x00,0x00,0x0c,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00, 0x00,0x00,0x0a,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x4e,0x00, 0x00,0x00,0x79,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xc7,0x11,0x0e,0x11,0xe2,0x56, 0x4c,0x56,0xf2,0x1f,0x28,0x21,0xfa,0x38,0x3b,0x38,0xfd,0x3f,0x40,0x40,0xff,0x71, 0x5c,0x6e,0xff,0x49,0x45,0x4a,0xff,0x62,0x54,0x63,0xff,0x63,0x55,0x63,0xff,0x62, 0x53,0x62,0xff,0x5d,0x51,0x5d,0xff,0x2c,0x32,0x2e,0xff,0x10,0x1c,0x16,0xff,0x44, 0x44,0x46,0xff,0x3f,0x3f,0x3f,0xff,0x38,0x3c,0x39,0xff,0x2c,0x34,0x2d,0xff,0x38, 0x3b,0x39,0xff,0x37,0x3b,0x38,0xff,0x36,0x38,0x37,0xff,0x21,0x25,0x21,0xff,0x20, 0x23,0x1f,0xff,0x17,0x1e,0x17,0xff,0x22,0x22,0x21,0xff,0x42,0x36,0x3e,0xff,0x22, 0x26,0x23,0xff,0x22,0x25,0x23,0xff,0x21,0x24,0x22,0xff,0x43,0x3f,0x44,0xff,0x5c, 0x51,0x5d,0xff,0x59,0x4f,0x5a,0xff,0x5a,0x4f,0x5b,0xff,0x5c,0x50,0x5d,0xff,0x59, 0x4f,0x5a,0xff,0x4b,0x46,0x4b,0xff,0x50,0x49,0x50,0xff,0x72,0x5e,0x70,0xff,0x62, 0x54,0x63,0xff,0x66,0x56,0x66,0xff,0x66,0x57,0x66,0xff,0x67,0x56,0x66,0xff,0x68, 0x57,0x67,0xff,0x67,0x56,0x66,0xff,0x66,0x56,0x65,0xff,0x5d,0x51,0x5d,0xff,0x4f, 0x48,0x4f,0xff,0x4c,0x47,0x4d,0xff,0x42,0x41,0x42,0xff,0x34,0x39,0x34,0xff,0x29, 0x31,0x29,0xff,0x1a,0x22,0x1b,0xff,0x17,0x1d,0x18,0xff,0x1a,0x1f,0x1a,0xff,0x06, 0x10,0x0a,0xff,0x3a,0x34,0x2b,0xff,0x8e,0x70,0x74,0xff,0x5b,0x50,0x5a,0xff,0x2c, 0x30,0x2d,0xff,0x22,0x25,0x22,0xff,0x1e,0x23,0x1f,0xff,0x22,0x25,0x24,0xff,0x26, 0x27,0x26,0xff,0x27,0x28,0x27,0xff,0x21,0x23,0x21,0xff,0x33,0x32,0x34,0xff,0x53, 0x4b,0x53,0xff,0x5a,0x4f,0x5a,0xff,0x58,0x4e,0x58,0xff,0x58,0x4e,0x58,0xff,0x58, 0x4e,0x58,0xff,0x58,0x4e,0x58,0xff,0x58,0x4e,0x58,0xff,0x56,0x4d,0x57,0xff,0x51, 0x4a,0x52,0xff,0x64,0x55,0x60,0xff,0x6d,0x5a,0x6a,0xff,0x62,0x54,0x62,0xff,0x5e, 0x52,0x5f,0xff,0x5f,0x52,0x5f,0xff,0x61,0x53,0x61,0xff,0x64,0x55,0x64,0xff,0x65, 0x56,0x65,0xff,0x66,0x56,0x65,0xff,0x68,0x57,0x68,0xff,0x67,0x56,0x67,0xff,0x67, 0x56,0x66,0xff,0x66,0x56,0x66,0xff,0x66,0x56,0x66,0xff,0x52,0x4a,0x53,0xff,0x40, 0x40,0x42,0xff,0x3e,0x40,0x3e,0xff,0x2e,0x30,0x2e,0xff,0x1d,0x22,0x1d,0xff,0x1f, 0x23,0x1f,0xff,0x1e,0x20,0x1e,0xff,0x48,0x42,0x49,0xff,0x5a,0x50,0x5a,0xff,0x59, 0x4f,0x5a,0xff,0x58,0x4e,0x59,0xff,0x58,0x4e,0x58,0xff,0x59,0x4f,0x5a,0xff,0x58, 0x4e,0x58,0xff,0x58,0x4e,0x59,0xff,0x58,0x4f,0x59,0xff,0x5b,0x50,0x5c,0xff,0x62, 0x54,0x62,0xff,0x62,0x54,0x62,0xff,0x64,0x56,0x64,0xff,0x65,0x56,0x65,0xff,0x67, 0x56,0x66,0xff,0x68,0x57,0x68,0xff,0x6a,0x58,0x69,0xff,0x6a,0x58,0x69,0xff,0x6a, 0x58,0x69,0xff,0x68,0x57,0x68,0xff,0x67,0x56,0x66,0xff,0x65,0x56,0x65,0xff,0x65, 0x56,0x65,0xff,0x4d,0x48,0x4d,0xff,0x3f,0x40,0x40,0xff,0x2d,0x30,0x2f,0xff,0x28, 0x29,0x28,0xff,0x23,0x24,0x24,0xff,0x26,0x27,0x27,0xff,0x23,0x26,0x24,0xff,0x08, 0x09,0x08,0xff,0x3e,0x35,0x3e,0xff,0x25,0x2c,0x26,0xff,0x25,0x2e,0x26,0xff,0x3d, 0x3e,0x3e,0xff,0x49,0x46,0x4a,0xff,0x5c,0x51,0x5c,0xff,0x6a,0x58,0x6a,0xff,0x68, 0x57,0x68,0xff,0x68,0x57,0x68,0xff,0x65,0x56,0x64,0xff,0x1b,0x26,0x1b,0xff,0x62, 0x52,0x61,0xff,0x62,0x54,0x62,0xff,0x5d,0x51,0x5d,0xff,0x5d,0x51,0x5d,0xff,0x5b, 0x50,0x5c,0xff,0x59,0x4f,0x5a,0xff,0x59,0x4f,0x5a,0xff,0x59,0x4f,0x5a,0xff,0x59, 0x4f,0x5a,0xff,0x59,0x4f,0x5a,0xff,0x59,0x4f,0x5a,0xff,0x59,0x4f,0x5a,0xfe,0x59, 0x4f,0x5a,0xfb,0x57,0x4d,0x58,0xf2,0x01,0x02,0x01,0xe0,0x00,0x00,0x00,0xc0,0x00, 0x00,0x00,0x96,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x4d,0x00, 0x00,0x00,0x66,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0xb7,0x09,0x07,0x09,0xd9,0x70, 0x5d,0x6f,0xef,0x7a,0x62,0x76,0xf9,0x7b,0x61,0x75,0xfe,0x73,0x5d,0x6e,0xff,0x88, 0x66,0x73,0xff,0x7a,0x62,0x77,0xff,0x6d,0x5a,0x6c,0xff,0x71,0x5c,0x6f,0xff,0x74, 0x5e,0x71,0xff,0x76,0x5f,0x73,0xff,0x75,0x5e,0x72,0xff,0x75,0x5e,0x72,0xff,0x72, 0x5e,0x70,0xff,0x6e,0x5b,0x6d,0xff,0x6d,0x5a,0x6c,0xff,0x61,0x53,0x61,0xff,0x49, 0x45,0x49,0xff,0x57,0x4d,0x58,0xff,0x56,0x4d,0x56,0xff,0x75,0x5f,0x72,0xff,0x54, 0x4c,0x55,0xff,0x56,0x4d,0x57,0xff,0x56,0x4d,0x57,0xff,0x56,0x4d,0x57,0xff,0x54, 0x4c,0x55,0xff,0x54,0x4c,0x55,0xff,0x54,0x4c,0x55,0xff,0x55,0x4d,0x56,0xff,0x4e, 0x46,0x4f,0xff,0x38,0x31,0x38,0xff,0x36,0x2e,0x36,0xff,0x37,0x2e,0x36,0xff,0x36, 0x2d,0x36,0xff,0x39,0x2f,0x38,0xff,0x34,0x2c,0x33,0xff,0x1e,0x20,0x1e,0xff,0x10, 0x16,0x10,0xff,0x19,0x1e,0x19,0xff,0x3e,0x3c,0x3f,0xff,0x53,0x4d,0x53,0xff,0x53, 0x4b,0x53,0xff,0x54,0x4c,0x56,0xff,0x5c,0x50,0x5c,0xff,0x6f,0x5b,0x6e,0xff,0x70, 0x5b,0x6e,0xff,0x76,0x5f,0x73,0xff,0x6d,0x5b,0x6b,0xff,0x58,0x4f,0x58,0xff,0x59, 0x4f,0x5b,0xff,0x5b,0x50,0x5c,0xff,0x5c,0x50,0x5c,0xff,0x5d,0x51,0x5d,0xff,0x5e, 0x52,0x5f,0xff,0x4c,0x47,0x4d,0xff,0x3a,0x3c,0x3a,0xff,0x25,0x2d,0x2b,0xff,0x59, 0x4e,0x44,0xff,0x9f,0x77,0x74,0xff,0x66,0x53,0x5b,0xff,0x47,0x45,0x4b,0xff,0x4c, 0x47,0x4c,0xff,0x4b,0x47,0x4c,0xff,0x4a,0x46,0x4b,0xff,0x4a,0x46,0x4b,0xff,0x4a, 0x46,0x4b,0xff,0x4a,0x46,0x4b,0xff,0x4a,0x46,0x4b,0xff,0x4a,0x46,0x4b,0xff,0x49, 0x45,0x4a,0xff,0x47,0x45,0x48,0xff,0x4e,0x47,0x4f,0xff,0x3a,0x34,0x3a,0xff,0x4a, 0x40,0x4a,0xff,0x69,0x57,0x67,0xff,0x6d,0x5a,0x6c,0xff,0x74,0x5e,0x72,0xff,0x55, 0x4c,0x55,0xff,0x38,0x3c,0x39,0xff,0x41,0x41,0x42,0xff,0x42,0x42,0x46,0xff,0x73, 0x5b,0x5e,0xff,0xa0,0x77,0x72,0xff,0x6c,0x5a,0x59,0xff,0x4a,0x46,0x4c,0xff,0x62, 0x54,0x63,0xff,0x76,0x60,0x74,0xff,0x79,0x62,0x76,0xff,0x77,0x60,0x74,0xff,0x76, 0x5f,0x73,0xff,0x76,0x5e,0x73,0xff,0x72,0x5d,0x70,0xff,0x6f,0x5b,0x6e,0xff,0x74, 0x5e,0x72,0xff,0x53,0x4c,0x53,0xff,0x45,0x43,0x45,0xff,0x46,0x43,0x46,0xff,0x45, 0x43,0x46,0xff,0x44,0x42,0x45,0xff,0x43,0x42,0x44,0xff,0x43,0x42,0x44,0xff,0x44, 0x43,0x45,0xff,0x44,0x42,0x45,0xff,0x40,0x40,0x41,0xff,0x4a,0x46,0x4b,0xff,0x55, 0x4c,0x56,0xff,0x56,0x4d,0x57,0xff,0x58,0x4e,0x58,0xff,0x56,0x4d,0x58,0xff,0x57, 0x4d,0x58,0xff,0x4d,0x47,0x4f,0xff,0x6c,0x5a,0x6d,0xff,0xa3,0x84,0x7e,0xff,0xb8, 0x9e,0x95,0xff,0xad,0x8e,0x83,0xff,0xac,0x8a,0x7c,0xff,0x82,0x69,0x78,0xff,0x7e, 0x65,0x78,0xff,0x97,0x74,0x6d,0xff,0xa7,0x8a,0x84,0xff,0xb2,0x98,0x90,0xfe,0xae, 0x90,0x84,0xfd,0xa7,0x85,0x7a,0xfa,0xa8,0x85,0x7b,0xf4,0x47,0x38,0x34,0xe7,0x05, 0x04,0x04,0xd2,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x6e,0x00, 0x00,0x00,0x49,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x0b,0x00, 0x00,0x00,0x04,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x0e,0x00, 0x00,0x00,0x1f,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x8b,0x00, 0x00,0x00,0xb4,0x03,0x02,0x03,0xd4,0x2c,0x27,0x2c,0xe9,0x61,0x55,0x61,0xf6,0x5f, 0x52,0x5f,0xfc,0x63,0x55,0x63,0xfe,0x6e,0x5a,0x6c,0xff,0x5e,0x52,0x5e,0xff,0x6b, 0x59,0x68,0xff,0x5e,0x52,0x5f,0xff,0x57,0x4e,0x5a,0xff,0x3c,0x3c,0x40,0xff,0x13, 0x1d,0x18,0xff,0x4a,0x45,0x47,0xff,0x4f,0x48,0x4b,0xff,0x3f,0x40,0x40,0xff,0x39, 0x3c,0x3a,0xff,0x37,0x3a,0x36,0xff,0x31,0x36,0x31,0xff,0x37,0x3b,0x38,0xff,0x33, 0x37,0x34,0xff,0x1f,0x25,0x20,0xff,0x1c,0x20,0x1c,0xff,0x1c,0x21,0x1d,0xff,0x25, 0x24,0x21,0xff,0x55,0x40,0x43,0xff,0x1c,0x23,0x1e,0xff,0x20,0x25,0x21,0xff,0x1e, 0x21,0x1d,0xff,0x2c,0x2b,0x2c,0xff,0x59,0x50,0x5a,0xff,0x56,0x4d,0x57,0xff,0x57, 0x4e,0x58,0xff,0x58,0x4f,0x59,0xff,0x59,0x4f,0x59,0xff,0x54,0x4c,0x55,0xff,0x52, 0x4a,0x53,0xff,0x68,0x56,0x67,0xff,0x5f,0x52,0x5f,0xff,0x5d,0x52,0x5d,0xff,0x5f, 0x53,0x5f,0xff,0x62,0x54,0x62,0xff,0x61,0x53,0x61,0xff,0x62,0x54,0x62,0xff,0x67, 0x57,0x66,0xff,0x5f,0x52,0x5f,0xff,0x50,0x4a,0x51,0xff,0x47,0x44,0x48,0xff,0x38, 0x3b,0x38,0xff,0x2d,0x35,0x2d,0xff,0x25,0x2c,0x25,0xff,0x17,0x1d,0x17,0xff,0x15, 0x1a,0x16,0xff,0x16,0x1d,0x17,0xff,0x16,0x1c,0x17,0xff,0x3c,0x37,0x3b,0xff,0x52, 0x4c,0x52,0xff,0x35,0x3a,0x37,0xff,0x39,0x3c,0x3a,0xff,0x2f,0x31,0x2f,0xff,0x1e, 0x23,0x1f,0xff,0x18,0x1f,0x19,0xff,0x1e,0x22,0x1e,0xff,0x25,0x26,0x25,0xff,0x26, 0x27,0x26,0xff,0x24,0x26,0x25,0xff,0x43,0x3d,0x43,0xff,0x5d,0x52,0x5d,0xff,0x58, 0x4e,0x58,0xff,0x57,0x4d,0x57,0xff,0x57,0x4d,0x57,0xff,0x58,0x4e,0x58,0xff,0x58, 0x4e,0x58,0xff,0x58,0x4e,0x58,0xff,0x5a,0x50,0x5c,0xff,0x45,0x43,0x46,0xff,0x44, 0x43,0x45,0xff,0x55,0x4d,0x56,0xff,0x5c,0x51,0x5d,0xff,0x5c,0x51,0x5d,0xff,0x60, 0x53,0x60,0xff,0x62,0x55,0x62,0xff,0x65,0x55,0x64,0xff,0x67,0x56,0x66,0xff,0x67, 0x56,0x66,0xff,0x67,0x56,0x66,0xff,0x67,0x56,0x66,0xff,0x66,0x56,0x66,0xff,0x65, 0x56,0x65,0xff,0x59,0x4e,0x59,0xff,0x44,0x42,0x44,0xff,0x3f,0x41,0x3f,0xff,0x2e, 0x32,0x2e,0xff,0x20,0x24,0x20,0xff,0x23,0x26,0x23,0xff,0x17,0x1c,0x17,0xff,0x45, 0x40,0x45,0xff,0x5b,0x50,0x5b,0xff,0x58,0x4e,0x58,0xff,0x58,0x4f,0x59,0xff,0x59, 0x4e,0x59,0xff,0x58,0x4e,0x58,0xff,0x58,0x4e,0x58,0xff,0x59,0x4f,0x5a,0xff,0x59, 0x4f,0x5a,0xff,0x5a,0x4f,0x5b,0xff,0x60,0x53,0x60,0xff,0x61,0x54,0x62,0xff,0x62, 0x54,0x63,0xff,0x5d,0x51,0x5d,0xff,0x63,0x55,0x63,0xff,0x66,0x56,0x65,0xff,0x67, 0x56,0x66,0xff,0x68,0x57,0x68,0xff,0x6a,0x58,0x69,0xff,0x68,0x56,0x67,0xff,0x65, 0x56,0x65,0xff,0x63,0x55,0x63,0xff,0x64,0x55,0x64,0xff,0x50,0x49,0x50,0xff,0x3f, 0x40,0x40,0xff,0x2d,0x30,0x2e,0xff,0x26,0x28,0x26,0xff,0x26,0x27,0x26,0xff,0x27, 0x28,0x27,0xff,0x28,0x2a,0x29,0xff,0x01,0x01,0x01,0xff,0x31,0x2a,0x31,0xff,0x5b, 0x50,0x5c,0xff,0x65,0x55,0x65,0xff,0x57,0x4e,0x58,0xff,0x58,0x4f,0x59,0xff,0x40, 0x40,0x40,0xff,0x65,0x55,0x64,0xff,0x6b,0x59,0x6b,0xff,0x6d,0x5c,0x6d,0xff,0x2e, 0x34,0x2e,0xff,0x1a,0x21,0x1f,0xff,0x82,0x65,0x76,0xff,0x60,0x53,0x60,0xff,0x5d, 0x51,0x5d,0xff,0x5b,0x50,0x5c,0xff,0x5b,0x50,0x5c,0xff,0x59,0x4f,0x5a,0xff,0x59, 0x4f,0x5a,0xff,0x59,0x4f,0x5a,0xff,0x59,0x4f,0x5a,0xff,0x59,0x4f,0x5a,0xff,0x59, 0x4f,0x5a,0xff,0x59,0x4f,0x5a,0xfe,0x59,0x4f,0x5a,0xfb,0x57,0x4d,0x58,0xf2,0x01, 0x02,0x01,0xe0,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x6c,0x00, 0x00,0x00,0x4c,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x83,0x00, 0x00,0x00,0xae,0x08,0x06,0x08,0xd3,0x71,0x5a,0x6d,0xec,0x7f,0x65,0x7b,0xf8,0x80, 0x65,0x78,0xfd,0x70,0x5c,0x6e,0xfe,0x87,0x65,0x70,0xff,0x76,0x60,0x75,0xff,0x6d, 0x5a,0x6c,0xff,0x72,0x5c,0x6f,0xff,0x74,0x5e,0x71,0xff,0x76,0x5f,0x73,0xff,0x76, 0x5f,0x73,0xff,0x75,0x5f,0x73,0xff,0x71,0x5c,0x6f,0xff,0x6e,0x5b,0x6d,0xff,0x6e, 0x5b,0x6d,0xff,0x61,0x53,0x62,0xff,0x49,0x45,0x4a,0xff,0x58,0x4e,0x59,0xff,0x65, 0x56,0x65,0xff,0x6e,0x5b,0x6c,0xff,0x55,0x4c,0x55,0xff,0x55,0x4d,0x56,0xff,0x54, 0x4c,0x55,0xff,0x54,0x4c,0x55,0xff,0x54,0x4c,0x55,0xff,0x54,0x4c,0x55,0xff,0x54, 0x4c,0x55,0xff,0x55,0x4d,0x56,0xff,0x4d,0x46,0x4e,0xff,0x34,0x2e,0x34,0xff,0x34, 0x2c,0x34,0xff,0x36,0x2d,0x37,0xff,0x38,0x2f,0x37,0xff,0x38,0x2f,0x38,0xff,0x2e, 0x29,0x2e,0xff,0x15,0x1b,0x15,0xff,0x14,0x19,0x15,0xff,0x23,0x22,0x23,0xff,0x30, 0x2e,0x31,0xff,0x4b,0x46,0x4c,0xff,0x50,0x4a,0x51,0xff,0x4f,0x49,0x50,0xff,0x5f, 0x52,0x5f,0xff,0x6f,0x5b,0x6e,0xff,0x71,0x5c,0x6f,0xff,0x73,0x5d,0x70,0xff,0x66, 0x56,0x65,0xff,0x56,0x4d,0x56,0xff,0x5a,0x50,0x5a,0xff,0x5b,0x50,0x5c,0xff,0x5c, 0x51,0x5d,0xff,0x5b,0x50,0x5c,0xff,0x5a,0x50,0x5b,0xff,0x54,0x4c,0x55,0xff,0x36, 0x3a,0x38,0xff,0x50,0x48,0x4c,0xff,0x9e,0x7a,0x7f,0xff,0x7e,0x68,0x66,0xff,0x46, 0x43,0x4b,0xff,0x4c,0x47,0x4d,0xff,0x4c,0x47,0x4c,0xff,0x4b,0x47,0x4c,0xff,0x4a, 0x46,0x4b,0xff,0x4a,0x46,0x4b,0xff,0x4a,0x46,0x4b,0xff,0x4a,0x46,0x4b,0xff,0x49, 0x45,0x4a,0xff,0x48,0x45,0x49,0xff,0x48,0x45,0x49,0xff,0x49,0x47,0x4b,0xff,0x40, 0x39,0x40,0xff,0x36,0x2c,0x36,0xff,0x36,0x2d,0x35,0xff,0x43,0x38,0x43,0xff,0x5e, 0x4d,0x5d,0xff,0x73,0x5e,0x72,0xff,0x59,0x4f,0x59,0xff,0x42,0x41,0x44,0xff,0x43, 0x42,0x44,0xff,0x49,0x44,0x4d,0xff,0x8b,0x71,0x70,0xff,0x88,0x6d,0x77,0xff,0x70, 0x5b,0x71,0xff,0x70,0x5c,0x6f,0xff,0x75,0x5f,0x73,0xff,0x71,0x5d,0x6f,0xff,0x72, 0x5d,0x6f,0xff,0x77,0x60,0x73,0xff,0x76,0x5f,0x73,0xff,0x73,0x5d,0x71,0xff,0x6f, 0x5b,0x6e,0xff,0x78,0x60,0x74,0xff,0x62,0x54,0x62,0xff,0x4b,0x47,0x4c,0xff,0x47, 0x44,0x47,0xff,0x46,0x43,0x46,0xff,0x44,0x43,0x45,0xff,0x43,0x42,0x44,0xff,0x43, 0x42,0x44,0xff,0x44,0x42,0x45,0xff,0x40,0x40,0x41,0xff,0x3c,0x3e,0x3d,0xff,0x3f, 0x40,0x40,0xff,0x50,0x4a,0x51,0xff,0x56,0x4d,0x57,0xff,0x5a,0x4f,0x5a,0xff,0x5e, 0x51,0x5f,0xff,0x56,0x4d,0x57,0xff,0x4b,0x47,0x4d,0xff,0x49,0x46,0x4b,0xff,0x54, 0x4a,0x59,0xff,0x98,0x7e,0x7d,0xff,0xb9,0x9f,0x94,0xff,0xac,0x8e,0x83,0xff,0xa8, 0x89,0x7e,0xff,0xa8,0x89,0x7e,0xff,0xa6,0x86,0x7d,0xff,0xa8,0x87,0x7b,0xff,0x8e, 0x6f,0x7a,0xff,0x95,0x71,0x6a,0xff,0x9f,0x80,0x7e,0xfe,0xa6,0x86,0x7b,0xfc,0xa7, 0x86,0x7b,0xfa,0xa3,0x82,0x78,0xf3,0x39,0x2d,0x2a,0xe5,0x03,0x02,0x02,0xcf,0x00, 0x00,0x00,0xb1,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x44,0x00, 0x00,0x00,0x27,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x03,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x03,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x29,0x00, 0x00,0x00,0x4b,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0xc1,0x06, 0x06,0x06,0xdd,0x50,0x46,0x50,0xee,0x60,0x53,0x60,0xf8,0x61,0x53,0x61,0xfd,0x60, 0x53,0x60,0xfe,0x66,0x57,0x65,0xff,0x7b,0x62,0x73,0xff,0x6a,0x58,0x68,0xff,0x61, 0x51,0x53,0xff,0x47,0x43,0x38,0xff,0x6f,0x5e,0x5e,0xff,0x96,0x6f,0x71,0xff,0x87, 0x64,0x65,0xff,0x4b,0x48,0x50,0xff,0x38,0x3c,0x39,0xff,0x38,0x3b,0x39,0xff,0x38, 0x3b,0x38,0xff,0x36,0x3a,0x36,0xff,0x2d,0x34,0x2d,0xff,0x27,0x2e,0x28,0xff,0x1e, 0x22,0x1e,0xff,0x1f,0x24,0x20,0xff,0x30,0x2d,0x2b,0xff,0x55,0x3e,0x3f,0xff,0x1a, 0x21,0x1d,0xff,0x1f,0x23,0x1f,0xff,0x1c,0x21,0x1c,0xff,0x22,0x24,0x22,0xff,0x48, 0x42,0x48,0xff,0x57,0x4e,0x58,0xff,0x55,0x4d,0x56,0xff,0x57,0x4d,0x57,0xff,0x58, 0x4e,0x59,0xff,0x59,0x4f,0x5a,0xff,0x5c,0x50,0x5c,0xff,0x59,0x4f,0x5b,0xff,0x54, 0x4c,0x55,0xff,0x51,0x4a,0x50,0xff,0x4a,0x45,0x4a,0xff,0x5f,0x52,0x5f,0xff,0x57, 0x4e,0x57,0xff,0x5d,0x51,0x5d,0xff,0x61,0x54,0x62,0xff,0x56,0x4d,0x56,0xff,0x49, 0x46,0x4a,0xff,0x3b,0x3d,0x3b,0xff,0x1b,0x27,0x1c,0xff,0x1d,0x26,0x1e,0xff,0x18, 0x1f,0x19,0xff,0x17,0x1d,0x18,0xff,0x16,0x1c,0x17,0xff,0x0e,0x17,0x0e,0xff,0x3d, 0x38,0x3d,0xff,0x8a,0x6b,0x83,0xff,0x66,0x55,0x5e,0xff,0x30,0x36,0x31,0xff,0x3a, 0x3d,0x3a,0xff,0x2b,0x30,0x2b,0xff,0x1f,0x22,0x1f,0xff,0x22,0x25,0x22,0xff,0x16, 0x1c,0x16,0xff,0x1a,0x1f,0x1a,0xff,0x26,0x28,0x26,0xff,0x20,0x22,0x20,0xff,0x3a, 0x37,0x3b,0xff,0x5a,0x50,0x5a,0xff,0x56,0x4d,0x57,0xff,0x55,0x4d,0x57,0xff,0x55, 0x4d,0x56,0xff,0x56,0x4d,0x57,0xff,0x56,0x4d,0x56,0xff,0x56,0x4d,0x56,0xff,0x56, 0x4d,0x57,0xff,0x58,0x4e,0x59,0xff,0x58,0x4f,0x59,0xff,0x5a,0x50,0x5b,0xff,0x5b, 0x50,0x5c,0xff,0x57,0x4e,0x57,0xff,0x56,0x4d,0x57,0xff,0x63,0x55,0x63,0xff,0x66, 0x56,0x67,0xff,0x64,0x55,0x64,0xff,0x66,0x56,0x65,0xff,0x67,0x57,0x67,0xff,0x68, 0x57,0x67,0xff,0x64,0x55,0x63,0xff,0x67,0x58,0x67,0xff,0x65,0x56,0x65,0xff,0x49, 0x47,0x48,0xff,0x2e,0x34,0x2f,0xff,0x27,0x2d,0x28,0xff,0x3d,0x36,0x3d,0xff,0x30, 0x2e,0x30,0xff,0x0e,0x15,0x0e,0xff,0x3c,0x3a,0x3d,0xff,0x59,0x4f,0x59,0xff,0x57, 0x4e,0x58,0xff,0x5a,0x4f,0x5b,0xff,0x56,0x4d,0x57,0xff,0x54,0x4c,0x55,0xff,0x57, 0x4d,0x58,0xff,0x57,0x4e,0x58,0xff,0x57,0x4e,0x58,0xff,0x5a,0x50,0x5b,0xff,0x5c, 0x50,0x5c,0xff,0x5b,0x50,0x5c,0xff,0x60,0x54,0x62,0xff,0x4b,0x47,0x4b,0xff,0x5d, 0x52,0x5d,0xff,0x64,0x55,0x64,0xff,0x66,0x56,0x66,0xff,0x67,0x56,0x66,0xff,0x68, 0x57,0x68,0xff,0x67,0x56,0x67,0xff,0x64,0x56,0x64,0xff,0x63,0x55,0x63,0xff,0x62, 0x54,0x62,0xff,0x51,0x49,0x51,0xff,0x3f,0x40,0x40,0xff,0x2e,0x31,0x2f,0xff,0x27, 0x28,0x27,0xff,0x25,0x27,0x26,0xff,0x27,0x28,0x27,0xff,0x24,0x25,0x24,0xff,0x00, 0x00,0x00,0xff,0x27,0x22,0x27,0xff,0x5e,0x51,0x5e,0xff,0x64,0x55,0x64,0xff,0x6a, 0x59,0x6a,0xff,0x64,0x56,0x65,0xff,0x57,0x4e,0x58,0xff,0x3c,0x3d,0x3d,0xff,0x5a, 0x4e,0x59,0xff,0x55,0x4b,0x54,0xff,0x09,0x12,0x0a,0xff,0x7b,0x63,0x6e,0xff,0x82, 0x64,0x70,0xff,0x5c,0x50,0x5c,0xff,0x5d,0x51,0x5d,0xff,0x5a,0x4f,0x5b,0xff,0x5b, 0x50,0x5c,0xff,0x57,0x4e,0x58,0xff,0x59,0x4f,0x5a,0xff,0x57,0x4e,0x58,0xff,0x58, 0x4e,0x59,0xff,0x59,0x4f,0x5a,0xff,0x59,0x4f,0x5a,0xff,0x59,0x4f,0x5a,0xfe,0x57, 0x4e,0x58,0xfb,0x56,0x4c,0x57,0xf1,0x01,0x02,0x01,0xde,0x00,0x00,0x00,0xbe,0x00, 0x00,0x00,0x92,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x3f,0x00, 0x00,0x00,0x54,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0xa6,0x06,0x05,0x06,0xcd,0x5d, 0x4b,0x5a,0xea,0x7d,0x64,0x7a,0xf7,0x7f,0x64,0x78,0xfd,0x7f,0x63,0x76,0xfe,0x88, 0x65,0x6f,0xff,0x70,0x5c,0x71,0xff,0x6e,0x5b,0x6d,0xff,0x71,0x5c,0x70,0xff,0x74, 0x5e,0x72,0xff,0x75,0x5f,0x73,0xff,0x76,0x5f,0x73,0xff,0x75,0x5e,0x72,0xff,0x71, 0x5d,0x6f,0xff,0x6d,0x5b,0x6c,0xff,0x6c,0x59,0x6b,0xff,0x66,0x56,0x66,0xff,0x54, 0x4d,0x55,0xff,0x4f,0x4a,0x50,0xff,0x5b,0x4f,0x5c,0xff,0x57,0x4e,0x58,0xff,0x57, 0x4d,0x57,0xff,0x55,0x4d,0x56,0xff,0x54,0x4c,0x54,0xff,0x54,0x4c,0x54,0xff,0x54, 0x4c,0x54,0xff,0x54,0x4c,0x54,0xff,0x53,0x4c,0x53,0xff,0x53,0x4c,0x53,0xff,0x4c, 0x44,0x4c,0xff,0x32,0x2b,0x32,0xff,0x33,0x2c,0x33,0xff,0x35,0x2c,0x34,0xff,0x35, 0x2d,0x35,0xff,0x36,0x2d,0x36,0xff,0x29,0x26,0x29,0xff,0x0f,0x17,0x0f,0xff,0x1c, 0x20,0x1c,0xff,0x2f,0x2b,0x2f,0xff,0x25,0x23,0x25,0xff,0x30,0x2e,0x30,0xff,0x4c, 0x47,0x4c,0xff,0x5a,0x50,0x5a,0xff,0x68,0x57,0x67,0xff,0x70,0x5c,0x6f,0xff,0x72, 0x5d,0x70,0xff,0x72,0x5c,0x70,0xff,0x5e,0x52,0x5f,0xff,0x56,0x4d,0x56,0xff,0x59, 0x4e,0x59,0xff,0x59,0x4f,0x5a,0xff,0x5a,0x50,0x5b,0xff,0x5a,0x50,0x5b,0xff,0x5a, 0x50,0x5b,0xff,0x55,0x4d,0x56,0xff,0x39,0x3c,0x3c,0xff,0x64,0x55,0x50,0xff,0x92, 0x6f,0x75,0xff,0x5c,0x50,0x5c,0xff,0x4a,0x46,0x4b,0xff,0x4c,0x48,0x4d,0xff,0x4a, 0x46,0x4b,0xff,0x4a,0x46,0x4b,0xff,0x49,0x46,0x4a,0xff,0x48,0x45,0x49,0xff,0x49, 0x46,0x4a,0xff,0x49,0x46,0x4a,0xff,0x48,0x45,0x49,0xff,0x48,0x45,0x49,0xff,0x48, 0x45,0x49,0xff,0x48,0x45,0x49,0xff,0x46,0x3d,0x47,0xff,0x3f,0x33,0x3f,0xff,0x39, 0x2f,0x39,0xff,0x37,0x2e,0x36,0xff,0x36,0x2f,0x36,0xff,0x50,0x43,0x50,0xff,0x53, 0x4b,0x53,0xff,0x4a,0x46,0x4b,0xff,0x4c,0x47,0x4d,0xff,0x5d,0x50,0x5c,0xff,0x68, 0x57,0x68,0xff,0x71,0x5d,0x70,0xff,0x75,0x5f,0x73,0xff,0x71,0x5c,0x6f,0xff,0x77, 0x60,0x74,0xff,0x69,0x58,0x68,0xff,0x62,0x54,0x62,0xff,0x72,0x5d,0x70,0xff,0x77, 0x5f,0x74,0xff,0x73,0x5d,0x70,0xff,0x6e,0x5b,0x6d,0xff,0x7a,0x61,0x77,0xff,0x59, 0x4f,0x59,0xff,0x47,0x44,0x47,0xff,0x47,0x44,0x47,0xff,0x45,0x43,0x46,0xff,0x44, 0x42,0x45,0xff,0x43,0x42,0x44,0xff,0x43,0x42,0x44,0xff,0x45,0x43,0x46,0xff,0x2c, 0x34,0x2c,0xff,0x2d,0x34,0x2d,0xff,0x45,0x43,0x46,0xff,0x54,0x4b,0x55,0xff,0x57, 0x4e,0x58,0xff,0x4d,0x47,0x4d,0xff,0x44,0x42,0x45,0xff,0x58,0x4f,0x5a,0xff,0x4d, 0x44,0x41,0xff,0x5a,0x4f,0x55,0xff,0x70,0x5d,0x6e,0xff,0x5f,0x50,0x63,0xff,0xa3, 0x86,0x83,0xff,0xb4,0x98,0x8e,0xff,0xab,0x8c,0x81,0xff,0xa9,0x8a,0x7f,0xff,0xa9, 0x89,0x7e,0xff,0xa7,0x87,0x7d,0xff,0xa8,0x89,0x7e,0xff,0xa5,0x83,0x76,0xff,0x8a, 0x6d,0x78,0xff,0x97,0x76,0x78,0xfe,0xaa,0x89,0x7e,0xfc,0xa8,0x87,0x7d,0xf9,0x9b, 0x7c,0x72,0xf1,0x27,0x20,0x1d,0xe3,0x02,0x01,0x01,0xcb,0x00,0x00,0x00,0xab,0x00, 0x00,0x00,0x87,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x25,0x00, 0x00,0x00,0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x04,0x00, 0x00,0x00,0x0d,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x58,0x00, 0x00,0x00,0x80,0x00,0x00,0x00,0xa9,0x01,0x01,0x01,0xcb,0x1c,0x19,0x1c,0xe4,0x5e, 0x53,0x5f,0xf3,0x5d,0x51,0x5e,0xfa,0x5f,0x53,0x60,0xfd,0x61,0x54,0x61,0xff,0x62, 0x54,0x62,0xff,0x77,0x5f,0x70,0xff,0x81,0x63,0x65,0xff,0x89,0x6a,0x69,0xff,0x92, 0x73,0x71,0xff,0x99,0x73,0x71,0xff,0x89,0x67,0x6d,0xff,0x49,0x46,0x4d,0xff,0x37, 0x3b,0x37,0xff,0x39,0x3c,0x39,0xff,0x37,0x3b,0x38,0xff,0x38,0x3b,0x38,0xff,0x32, 0x37,0x33,0xff,0x24,0x2c,0x25,0xff,0x1e,0x22,0x1e,0xff,0x1f,0x23,0x20,0xff,0x31, 0x2e,0x2d,0xff,0x55,0x41,0x47,0xff,0x18,0x1f,0x1a,0xff,0x1e,0x22,0x1e,0xff,0x1e, 0x22,0x1e,0xff,0x1c,0x20,0x1c,0xff,0x32,0x31,0x32,0xff,0x5c,0x52,0x5d,0xff,0x54, 0x4c,0x55,0xff,0x55,0x4d,0x56,0xff,0x57,0x4e,0x57,0xff,0x58,0x4f,0x59,0xff,0x50, 0x4a,0x51,0xff,0x48,0x45,0x49,0xff,0x5f,0x51,0x5d,0xff,0x6e,0x5a,0x6c,0xff,0x50, 0x4a,0x51,0xff,0x64,0x56,0x64,0xff,0x62,0x54,0x62,0xff,0x64,0x56,0x64,0xff,0x5e, 0x52,0x5e,0xff,0x57,0x4d,0x57,0xff,0x46,0x44,0x46,0xff,0x2a,0x33,0x2b,0xff,0x1b, 0x26,0x1c,0xff,0x1a,0x22,0x1b,0xff,0x17,0x1e,0x18,0xff,0x17,0x1e,0x18,0xff,0x18, 0x1e,0x18,0xff,0x0b,0x16,0x0c,0xff,0x40,0x3a,0x3d,0xff,0x92,0x6f,0x88,0xff,0x62, 0x53,0x5c,0xff,0x2d,0x35,0x2e,0xff,0x36,0x3a,0x36,0xff,0x2f,0x32,0x2f,0xff,0x20, 0x23,0x20,0xff,0x1f,0x23,0x1f,0xff,0x22,0x25,0x23,0xff,0x23,0x26,0x24,0xff,0x24, 0x26,0x25,0xff,0x21,0x23,0x21,0xff,0x2e,0x2d,0x2e,0xff,0x4c,0x44,0x4b,0xff,0x56, 0x4e,0x57,0xff,0x55,0x4d,0x56,0xff,0x55,0x4d,0x56,0xff,0x54,0x4c,0x55,0xff,0x54, 0x4c,0x55,0xff,0x56,0x4d,0x56,0xff,0x56,0x4d,0x56,0xff,0x55,0x4d,0x56,0xff,0x56, 0x4d,0x57,0xff,0x58,0x4e,0x59,0xff,0x59,0x4f,0x5a,0xff,0x5d,0x52,0x5e,0xff,0x56, 0x4d,0x57,0xff,0x57,0x4d,0x58,0xff,0x6e,0x5b,0x69,0xff,0x6c,0x5a,0x69,0xff,0x63, 0x55,0x64,0xff,0x66,0x57,0x66,0xff,0x66,0x56,0x66,0xff,0x67,0x58,0x67,0xff,0x52, 0x4a,0x52,0xff,0x40,0x3d,0x42,0xff,0x27,0x2e,0x2a,0xff,0x10,0x1f,0x13,0xff,0x47, 0x40,0x48,0xff,0x48,0x3d,0x47,0xff,0x27,0x27,0x27,0xff,0x17,0x1c,0x17,0xff,0x2d, 0x2e,0x2e,0xff,0x4f,0x48,0x50,0xff,0x5a,0x4f,0x5b,0xff,0x46,0x43,0x46,0xff,0x47, 0x45,0x48,0xff,0x58,0x4f,0x5a,0xff,0x56,0x4d,0x56,0xff,0x55,0x4c,0x56,0xff,0x5a, 0x4f,0x5a,0xff,0x5a,0x4f,0x5a,0xff,0x59,0x4f,0x5a,0xff,0x5a,0x50,0x5b,0xff,0x61, 0x54,0x61,0xff,0x3e,0x40,0x40,0xff,0x59,0x4f,0x5a,0xff,0x65,0x56,0x65,0xff,0x65, 0x56,0x65,0xff,0x66,0x56,0x66,0xff,0x66,0x56,0x65,0xff,0x65,0x56,0x65,0xff,0x63, 0x55,0x64,0xff,0x61,0x54,0x61,0xff,0x61,0x54,0x61,0xff,0x54,0x4b,0x54,0xff,0x3f, 0x3f,0x40,0xff,0x31,0x33,0x31,0xff,0x26,0x28,0x27,0xff,0x25,0x27,0x25,0xff,0x28, 0x29,0x28,0xff,0x1f,0x1f,0x1f,0xff,0x00,0x00,0x00,0xff,0x1f,0x1b,0x1f,0xff,0x5a, 0x4e,0x5b,0xff,0x61,0x54,0x61,0xff,0x4e,0x47,0x4e,0xff,0x4c,0x46,0x4b,0xff,0x50, 0x49,0x50,0xff,0x29,0x32,0x2a,0xff,0x24,0x2f,0x25,0xff,0x0f,0x19,0x10,0xff,0x0c, 0x19,0x10,0xff,0x9c,0x77,0x67,0xff,0x66,0x56,0x65,0xff,0x5b,0x50,0x5c,0xff,0x5a, 0x4f,0x5b,0xff,0x58,0x4e,0x58,0xff,0x58,0x4f,0x59,0xff,0x56,0x4d,0x57,0xff,0x57, 0x4e,0x57,0xff,0x56,0x4d,0x57,0xff,0x56,0x4d,0x57,0xff,0x57,0x4e,0x57,0xff,0x57, 0x4e,0x57,0xff,0x57,0x4e,0x57,0xfe,0x56,0x4d,0x57,0xfa,0x54,0x4b,0x55,0xef,0x01, 0x02,0x01,0xdb,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x63,0x00, 0x00,0x00,0x42,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x74,0x00, 0x00,0x00,0xa1,0x05,0x04,0x05,0xca,0x4b,0x3e,0x4a,0xe7,0x7e,0x64,0x7a,0xf6,0x80, 0x64,0x78,0xfc,0x86,0x66,0x77,0xfe,0x7f,0x63,0x74,0xff,0x6d,0x5a,0x6d,0xff,0x6c, 0x5a,0x6b,0xff,0x71,0x5b,0x6f,0xff,0x74,0x5d,0x71,0xff,0x72,0x5d,0x70,0xff,0x75, 0x5f,0x73,0xff,0x72,0x5e,0x71,0xff,0x74,0x5f,0x73,0xff,0x6e,0x5b,0x6e,0xff,0x62, 0x54,0x62,0xff,0x51,0x4a,0x52,0xff,0x50,0x49,0x50,0xff,0x58,0x4e,0x58,0xff,0x5a, 0x50,0x5c,0xff,0x57,0x4d,0x58,0xff,0x53,0x4c,0x54,0xff,0x53,0x4c,0x54,0xff,0x53, 0x4b,0x53,0xff,0x53,0x4b,0x53,0xff,0x53,0x4b,0x53,0xff,0x53,0x4b,0x53,0xff,0x53, 0x4b,0x53,0xff,0x51,0x4b,0x51,0xff,0x46,0x40,0x46,0xff,0x2f,0x27,0x2f,0xff,0x33, 0x2a,0x32,0xff,0x34,0x2d,0x33,0xff,0x35,0x2d,0x35,0xff,0x36,0x2c,0x35,0xff,0x24, 0x22,0x24,0xff,0x0e,0x16,0x0f,0xff,0x21,0x23,0x21,0xff,0x30,0x2b,0x30,0xff,0x29, 0x25,0x29,0xff,0x29,0x27,0x29,0xff,0x44,0x3a,0x44,0xff,0x6c,0x58,0x6c,0xff,0x71, 0x5d,0x70,0xff,0x6e,0x5b,0x6d,0xff,0x73,0x5e,0x71,0xff,0x70,0x5c,0x6e,0xff,0x5b, 0x50,0x5c,0xff,0x57,0x4d,0x57,0xff,0x59,0x4f,0x5a,0xff,0x59,0x4f,0x5a,0xff,0x5b, 0x50,0x5c,0xff,0x5a,0x50,0x5b,0xff,0x59,0x4f,0x59,0xff,0x5c,0x51,0x5c,0xff,0x41, 0x40,0x41,0xff,0x45,0x42,0x45,0xff,0x6c,0x59,0x69,0xff,0x56,0x4d,0x55,0xff,0x4b, 0x47,0x4c,0xff,0x4b,0x46,0x4b,0xff,0x49,0x46,0x4a,0xff,0x49,0x46,0x4a,0xff,0x49, 0x46,0x4a,0xff,0x48,0x45,0x49,0xff,0x48,0x45,0x49,0xff,0x48,0x45,0x49,0xff,0x48, 0x45,0x49,0xff,0x48,0x45,0x49,0xff,0x49,0x46,0x4a,0xff,0x44,0x40,0x46,0xff,0x44, 0x3a,0x43,0xff,0x44,0x38,0x43,0xff,0x41,0x37,0x41,0xff,0x3d,0x33,0x3d,0xff,0x32, 0x2c,0x32,0xff,0x2c,0x27,0x2c,0xff,0x45,0x3b,0x45,0xff,0x63,0x54,0x63,0xff,0x6d, 0x5a,0x6c,0xff,0x6c,0x59,0x6a,0xff,0x64,0x55,0x65,0xff,0x5f,0x53,0x5f,0xff,0x6f, 0x5b,0x6d,0xff,0x7a,0x61,0x77,0xff,0x7b,0x61,0x76,0xff,0x79,0x61,0x75,0xff,0x71, 0x5c,0x6f,0xff,0x74,0x5e,0x72,0xff,0x77,0x5f,0x73,0xff,0x71,0x5c,0x70,0xff,0x73, 0x5d,0x71,0xff,0x6c,0x59,0x6b,0xff,0x50,0x49,0x51,0xff,0x46,0x44,0x46,0xff,0x46, 0x43,0x46,0xff,0x45,0x43,0x46,0xff,0x44,0x43,0x45,0xff,0x43,0x42,0x44,0xff,0x47, 0x44,0x48,0xff,0x32,0x37,0x33,0xff,0x30,0x36,0x31,0xff,0x3e,0x3f,0x3f,0xff,0x4e, 0x48,0x4f,0xff,0x56,0x4d,0x57,0xff,0x58,0x4f,0x59,0xff,0x41,0x40,0x41,0xff,0x2e, 0x34,0x2f,0xff,0x5d,0x51,0x5f,0xff,0x7e,0x61,0x68,0xff,0x78,0x60,0x70,0xff,0x57, 0x4e,0x58,0xff,0x4b,0x47,0x4e,0xff,0x63,0x4e,0x53,0xff,0xb3,0x96,0x8e,0xff,0xb3, 0x96,0x8b,0xff,0xa9,0x8b,0x80,0xff,0xa9,0x89,0x7f,0xff,0xa8,0x88,0x7e,0xff,0xa7, 0x87,0x7d,0xff,0xa7,0x87,0x7d,0xff,0xab,0x89,0x7b,0xff,0x92,0x72,0x77,0xff,0x93, 0x75,0x79,0xfd,0xab,0x8e,0x85,0xfc,0xaa,0x89,0x7f,0xf8,0x92,0x74,0x6b,0xf0,0x1d, 0x18,0x15,0xe0,0x01,0x01,0x01,0xc8,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x83,0x00, 0x00,0x00,0x5c,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x12,0x00, 0x00,0x00,0x09,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x11,0x00, 0x00,0x00,0x23,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x8d,0x00, 0x00,0x00,0xb5,0x05,0x05,0x05,0xd6,0x3d,0x36,0x3d,0xea,0x63,0x55,0x63,0xf7,0x5e, 0x52,0x5f,0xfc,0x60,0x53,0x60,0xfe,0x60,0x53,0x60,0xff,0x5d,0x52,0x5e,0xff,0x5a, 0x50,0x5f,0xff,0x58,0x4e,0x5c,0xff,0x60,0x52,0x62,0xff,0x72,0x5b,0x69,0xff,0x64, 0x54,0x5f,0xff,0x34,0x39,0x36,0xff,0x39,0x3c,0x39,0xff,0x37,0x3a,0x37,0xff,0x36, 0x3a,0x37,0xff,0x36,0x3a,0x36,0xff,0x34,0x3a,0x34,0xff,0x30,0x35,0x30,0xff,0x1c, 0x21,0x1d,0xff,0x1d,0x22,0x1e,0xff,0x24,0x25,0x24,0xff,0x2e,0x2b,0x2e,0xff,0x1c, 0x21,0x1c,0xff,0x1f,0x23,0x1f,0xff,0x1d,0x22,0x1e,0xff,0x1b,0x1f,0x1b,0xff,0x25, 0x26,0x25,0xff,0x4f,0x4a,0x50,0xff,0x55,0x4d,0x56,0xff,0x54,0x4c,0x54,0xff,0x55, 0x4c,0x56,0xff,0x53,0x4c,0x54,0xff,0x3b,0x3d,0x3b,0xff,0x46,0x43,0x46,0xff,0x78, 0x60,0x77,0xff,0x69,0x58,0x68,0xff,0x60,0x53,0x60,0xff,0x5f,0x52,0x5f,0xff,0x62, 0x55,0x62,0xff,0x64,0x55,0x64,0xff,0x65,0x56,0x64,0xff,0x62,0x54,0x61,0xff,0x43, 0x42,0x43,0xff,0x1e,0x29,0x1f,0xff,0x1c,0x25,0x1d,0xff,0x25,0x2e,0x26,0xff,0x1f, 0x26,0x1f,0xff,0x18,0x1f,0x18,0xff,0x16,0x1d,0x16,0xff,0x1a,0x22,0x1b,0xff,0x55, 0x49,0x50,0xff,0x8c,0x6c,0x84,0xff,0x58,0x4e,0x58,0xff,0x2a,0x32,0x2a,0xff,0x33, 0x38,0x33,0xff,0x2c,0x30,0x2c,0xff,0x20,0x23,0x20,0xff,0x15,0x1d,0x16,0xff,0x2d, 0x2b,0x2d,0xff,0x3a,0x33,0x39,0xff,0x21,0x25,0x22,0xff,0x24,0x26,0x25,0xff,0x25, 0x25,0x25,0xff,0x41,0x3c,0x42,0xff,0x58,0x50,0x59,0xff,0x54,0x4c,0x54,0xff,0x54, 0x4c,0x55,0xff,0x54,0x4c,0x54,0xff,0x54,0x4c,0x54,0xff,0x54,0x4c,0x55,0xff,0x54, 0x4c,0x55,0xff,0x54,0x4d,0x55,0xff,0x55,0x4d,0x56,0xff,0x58,0x4e,0x58,0xff,0x59, 0x4f,0x5a,0xff,0x5a,0x4f,0x5b,0xff,0x5f,0x52,0x60,0xff,0x53,0x4b,0x55,0xff,0x6a, 0x57,0x64,0xff,0x6d,0x5a,0x69,0xff,0x63,0x56,0x64,0xff,0x68,0x58,0x68,0xff,0x68, 0x59,0x68,0xff,0x69,0x59,0x69,0xff,0x33,0x38,0x33,0xff,0x00,0x0e,0x00,0xff,0x13, 0x1b,0x18,0xff,0x3f,0x3f,0x41,0xff,0x52,0x4a,0x51,0xff,0x30,0x2f,0x31,0xff,0x20, 0x23,0x21,0xff,0x20,0x24,0x20,0xff,0x1e,0x21,0x1f,0xff,0x47,0x42,0x48,0xff,0x58, 0x4e,0x59,0xff,0x40,0x40,0x41,0xff,0x60,0x53,0x5f,0xff,0x65,0x56,0x66,0xff,0x55, 0x4d,0x55,0xff,0x55,0x4d,0x56,0xff,0x49,0x45,0x49,0xff,0x50,0x4a,0x50,0xff,0x58, 0x4e,0x58,0xff,0x5a,0x50,0x5b,0xff,0x60,0x52,0x60,0xff,0x38,0x3a,0x39,0xff,0x5d, 0x51,0x5d,0xff,0x65,0x56,0x65,0xff,0x65,0x56,0x65,0xff,0x64,0x56,0x64,0xff,0x66, 0x56,0x66,0xff,0x65,0x56,0x65,0xff,0x64,0x55,0x64,0xff,0x60,0x53,0x60,0xff,0x61, 0x54,0x61,0xff,0x56,0x4d,0x56,0xff,0x3d,0x3f,0x3e,0xff,0x33,0x35,0x34,0xff,0x27, 0x29,0x27,0xff,0x23,0x26,0x24,0xff,0x26,0x27,0x26,0xff,0x18,0x18,0x18,0xff,0x00, 0x00,0x00,0xff,0x18,0x15,0x18,0xff,0x59,0x4e,0x5a,0xff,0x64,0x55,0x64,0xff,0x45, 0x42,0x45,0xff,0x44,0x42,0x44,0xff,0x26,0x30,0x26,0xff,0x48,0x45,0x48,0xff,0x36, 0x39,0x36,0xff,0x0b,0x19,0x0d,0xff,0x37,0x3b,0x39,0xff,0x7c,0x63,0x63,0xff,0x5e, 0x52,0x5e,0xff,0x5b,0x50,0x5c,0xff,0x5a,0x4f,0x5b,0xff,0x58,0x4e,0x58,0xff,0x58, 0x4e,0x58,0xff,0x56,0x4d,0x57,0xff,0x56,0x4d,0x57,0xff,0x56,0x4d,0x57,0xff,0x56, 0x4d,0x57,0xff,0x56,0x4d,0x57,0xff,0x56,0x4d,0x57,0xff,0x56,0x4d,0x57,0xfd,0x56, 0x4d,0x57,0xf9,0x54,0x4b,0x55,0xed,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0xb3,0x00, 0x00,0x00,0x86,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x36,0x00, 0x00,0x00,0x4a,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x9e,0x03,0x03,0x03,0xc8,0x3e, 0x32,0x3d,0xe6,0x80,0x66,0x7c,0xf5,0x81,0x65,0x78,0xfc,0x83,0x66,0x78,0xfe,0x7d, 0x63,0x76,0xff,0x69,0x58,0x6a,0xff,0x6c,0x59,0x6b,0xff,0x71,0x5c,0x6f,0xff,0x71, 0x5c,0x6f,0xff,0x72,0x5d,0x70,0xff,0x72,0x5d,0x70,0xff,0x6f,0x5c,0x6e,0xff,0x5c, 0x51,0x5c,0xff,0x54,0x4c,0x54,0xff,0x5e,0x52,0x5e,0xff,0x4b,0x47,0x4b,0xff,0x4f, 0x49,0x4f,0xff,0x5e,0x51,0x5f,0xff,0x57,0x4d,0x58,0xff,0x55,0x4c,0x56,0xff,0x54, 0x4c,0x54,0xff,0x53,0x4b,0x53,0xff,0x53,0x4b,0x53,0xff,0x53,0x4b,0x53,0xff,0x53, 0x4b,0x53,0xff,0x53,0x4b,0x53,0xff,0x52,0x4b,0x52,0xff,0x4d,0x46,0x4d,0xff,0x3a, 0x34,0x3a,0xff,0x31,0x29,0x31,0xff,0x32,0x2a,0x32,0xff,0x32,0x2c,0x33,0xff,0x30, 0x2b,0x31,0xff,0x29,0x26,0x29,0xff,0x1d,0x20,0x1f,0xff,0x16,0x1b,0x17,0xff,0x24, 0x24,0x25,0xff,0x2c,0x28,0x2d,0xff,0x32,0x2c,0x32,0xff,0x37,0x2e,0x36,0xff,0x3c, 0x31,0x3c,0xff,0x57,0x48,0x57,0xff,0x72,0x5e,0x71,0xff,0x6e,0x5a,0x6c,0xff,0x74, 0x5d,0x72,0xff,0x6d,0x5a,0x6b,0xff,0x58,0x4e,0x58,0xff,0x58,0x4e,0x58,0xff,0x59, 0x4f,0x5a,0xff,0x59,0x4f,0x5a,0xff,0x5b,0x50,0x5c,0xff,0x5a,0x50,0x5b,0xff,0x59, 0x4f,0x59,0xff,0x5b,0x50,0x5c,0xff,0x3a,0x3c,0x3b,0xff,0x34,0x38,0x36,0xff,0x7e, 0x63,0x74,0xff,0x71,0x5b,0x67,0xff,0x44,0x43,0x47,0xff,0x4a,0x47,0x4b,0xff,0x48, 0x45,0x49,0xff,0x48,0x45,0x49,0xff,0x48,0x45,0x49,0xff,0x48,0x45,0x49,0xff,0x48, 0x45,0x49,0xff,0x48,0x45,0x49,0xff,0x48,0x45,0x49,0xff,0x48,0x45,0x49,0xff,0x49, 0x47,0x4a,0xff,0x41,0x3b,0x42,0xff,0x33,0x2e,0x33,0xff,0x3e,0x35,0x3e,0xff,0x4a, 0x3c,0x49,0xff,0x48,0x3b,0x46,0xff,0x45,0x38,0x43,0xff,0x41,0x34,0x3f,0xff,0x38, 0x2e,0x37,0xff,0x4c,0x3f,0x4b,0xff,0x6c,0x58,0x6b,0xff,0x74,0x5f,0x72,0xff,0x77, 0x60,0x75,0xff,0x65,0x56,0x64,0xff,0x63,0x55,0x62,0xff,0x6c,0x59,0x6a,0xff,0x64, 0x56,0x63,0xff,0x6d,0x5b,0x6b,0xff,0x77,0x60,0x74,0xff,0x77,0x5f,0x74,0xff,0x77, 0x5f,0x73,0xff,0x71,0x5c,0x6f,0xff,0x78,0x60,0x75,0xff,0x5b,0x50,0x5b,0xff,0x48, 0x45,0x49,0xff,0x48,0x45,0x48,0xff,0x48,0x45,0x49,0xff,0x48,0x44,0x49,0xff,0x44, 0x42,0x45,0xff,0x46,0x44,0x47,0xff,0x37,0x3b,0x39,0xff,0x47,0x44,0x48,0xff,0x46, 0x43,0x46,0xff,0x43,0x42,0x44,0xff,0x52,0x4b,0x53,0xff,0x56,0x4d,0x57,0xff,0x57, 0x4e,0x57,0xff,0x59,0x50,0x5a,0xff,0x5d,0x51,0x5c,0xff,0x58,0x4e,0x58,0xff,0x54, 0x4c,0x58,0xff,0x55,0x4c,0x55,0xff,0x56,0x4d,0x57,0xff,0x56,0x4d,0x57,0xff,0x45, 0x43,0x4b,0xff,0x78,0x64,0x67,0xff,0xb9,0xa0,0x96,0xff,0xb0,0x93,0x88,0xff,0xa8, 0x88,0x7e,0xff,0xa8,0x89,0x7e,0xff,0xa7,0x87,0x7d,0xff,0xa7,0x87,0x7d,0xff,0xa6, 0x85,0x7b,0xff,0xad,0x8b,0x7d,0xff,0x6a,0x58,0x6d,0xff,0xa7,0x89,0x80,0xfe,0xa8, 0x89,0x7f,0xfd,0xab,0x88,0x7c,0xf7,0x82,0x69,0x60,0xee,0x17,0x12,0x0e,0xdd,0x00, 0x00,0x00,0xc5,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x5b,0x00, 0x00,0x00,0x3a,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x07,0x00, 0x00,0x00,0x03,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x03,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x2b,0x00, 0x00,0x00,0x4a,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0xc2,0x0f, 0x0e,0x0f,0xdf,0x58,0x4d,0x59,0xef,0x5f,0x53,0x60,0xf9,0x60,0x53,0x60,0xfe,0x60, 0x53,0x60,0xff,0x60,0x53,0x60,0xff,0x5f,0x52,0x5f,0xff,0x5e,0x52,0x5e,0xff,0x5b, 0x50,0x5c,0xff,0x55,0x4c,0x58,0xff,0x4d,0x48,0x4e,0xff,0x3a,0x3d,0x3b,0xff,0x37, 0x3a,0x37,0xff,0x36,0x3a,0x37,0xff,0x33,0x39,0x34,0xff,0x32,0x38,0x32,0xff,0x33, 0x38,0x33,0xff,0x30,0x36,0x31,0xff,0x28,0x2d,0x28,0xff,0x1b,0x20,0x1c,0xff,0x25, 0x26,0x24,0xff,0x31,0x2e,0x31,0xff,0x1d,0x22,0x1d,0xff,0x1e,0x22,0x1e,0xff,0x1e, 0x22,0x1e,0xff,0x1e,0x21,0x1e,0xff,0x1e,0x21,0x1e,0xff,0x34,0x35,0x35,0xff,0x4f, 0x49,0x4f,0xff,0x4b,0x46,0x4b,0xff,0x4c,0x47,0x4d,0xff,0x45,0x43,0x46,0xff,0x46, 0x44,0x47,0xff,0x47,0x44,0x47,0xff,0x63,0x55,0x62,0xff,0x5d,0x51,0x5e,0xff,0x5e, 0x52,0x5f,0xff,0x5f,0x53,0x60,0xff,0x61,0x54,0x61,0xff,0x61,0x53,0x61,0xff,0x61, 0x53,0x61,0xff,0x54,0x4d,0x55,0xff,0x3a,0x3d,0x3b,0xff,0x25,0x2e,0x26,0xff,0x1e, 0x27,0x20,0xff,0x21,0x29,0x22,0xff,0x1c,0x23,0x1c,0xff,0x16,0x1c,0x16,0xff,0x15, 0x1f,0x15,0xff,0x31,0x37,0x32,0xff,0x6c,0x5b,0x6a,0xff,0x8b,0x6a,0x7e,0xff,0x5c, 0x4e,0x53,0xff,0x28,0x32,0x2a,0xff,0x37,0x3c,0x37,0xff,0x2d,0x31,0x2d,0xff,0x23, 0x26,0x23,0xff,0x17,0x1e,0x18,0xff,0x2a,0x29,0x2a,0xff,0x39,0x33,0x38,0xff,0x22, 0x25,0x23,0xff,0x26,0x27,0x26,0xff,0x22,0x23,0x22,0xff,0x3a,0x37,0x3b,0xff,0x55, 0x4c,0x55,0xff,0x54,0x4c,0x54,0xff,0x54,0x4c,0x54,0xff,0x53,0x4b,0x53,0xff,0x53, 0x4b,0x53,0xff,0x54,0x4c,0x55,0xff,0x54,0x4c,0x55,0xff,0x54,0x4c,0x55,0xff,0x55, 0x4c,0x56,0xff,0x57,0x4e,0x58,0xff,0x57,0x4e,0x58,0xff,0x59,0x4f,0x5a,0xff,0x5c, 0x50,0x5d,0xff,0x64,0x55,0x65,0xff,0x4a,0x46,0x4c,0xff,0x32,0x37,0x33,0xff,0x36, 0x3a,0x36,0xff,0x41,0x41,0x42,0xff,0x45,0x43,0x46,0xff,0x3a,0x3b,0x3a,0xff,0x20, 0x2d,0x24,0xff,0x37,0x32,0x30,0xff,0x7e,0x66,0x65,0xff,0x83,0x6b,0x7a,0xff,0x48, 0x44,0x4a,0xff,0x26,0x2a,0x26,0xff,0x22,0x24,0x22,0xff,0x20,0x24,0x20,0xff,0x1d, 0x21,0x1d,0xff,0x49,0x42,0x49,0xff,0x46,0x44,0x47,0xff,0x66,0x56,0x65,0xff,0x6d, 0x5a,0x6b,0xff,0x59,0x4f,0x5a,0xff,0x53,0x4c,0x55,0xff,0x56,0x4d,0x57,0xff,0x47, 0x44,0x48,0xff,0x4f,0x49,0x50,0xff,0x57,0x4d,0x57,0xff,0x59,0x4f,0x59,0xff,0x5c, 0x51,0x5d,0xff,0x53,0x4b,0x53,0xff,0x3f,0x3f,0x3f,0xff,0x53,0x4b,0x53,0xff,0x61, 0x53,0x61,0xff,0x63,0x55,0x63,0xff,0x65,0x55,0x64,0xff,0x64,0x55,0x64,0xff,0x62, 0x54,0x63,0xff,0x60,0x53,0x60,0xff,0x60,0x53,0x60,0xff,0x5c,0x51,0x5d,0xff,0x3e, 0x3f,0x3f,0xff,0x37,0x39,0x38,0xff,0x26,0x28,0x26,0xff,0x23,0x26,0x24,0xff,0x25, 0x28,0x26,0xff,0x12,0x12,0x12,0xff,0x00,0x00,0x00,0xff,0x0f,0x0e,0x0f,0xff,0x59, 0x4d,0x5a,0xff,0x61,0x54,0x61,0xff,0x67,0x58,0x67,0xff,0x6c,0x5a,0x6c,0xff,0x52, 0x4a,0x52,0xff,0x4e,0x48,0x4e,0xff,0x64,0x55,0x63,0xff,0x41,0x3f,0x41,0xff,0x3c, 0x3d,0x3b,0xff,0x58,0x4f,0x5d,0xff,0x61,0x54,0x62,0xff,0x5a,0x50,0x5b,0xff,0x5a, 0x50,0x5b,0xff,0x59,0x4f,0x59,0xff,0x57,0x4d,0x57,0xff,0x56,0x4d,0x57,0xff,0x56, 0x4d,0x57,0xff,0x55,0x4d,0x56,0xff,0x56,0x4d,0x57,0xff,0x55,0x4d,0x56,0xff,0x56, 0x4d,0x57,0xfe,0x56,0x4d,0x57,0xfc,0x55,0x4c,0x56,0xf7,0x53,0x4b,0x54,0xe9,0x00, 0x00,0x00,0xcf,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x52,0x00, 0x00,0x00,0x36,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x6c,0x00, 0x00,0x00,0x9a,0x02,0x02,0x02,0xc4,0x2e,0x25,0x2e,0xe4,0x7f,0x66,0x7b,0xf4,0x81, 0x65,0x78,0xfc,0x84,0x66,0x77,0xfe,0x85,0x64,0x70,0xff,0x67,0x56,0x68,0xff,0x6c, 0x59,0x6a,0xff,0x6f,0x5b,0x6d,0xff,0x72,0x5c,0x6f,0xff,0x73,0x5e,0x71,0xff,0x72, 0x5d,0x70,0xff,0x6b,0x59,0x6a,0xff,0x4e,0x49,0x4f,0xff,0x59,0x4f,0x59,0xff,0x67, 0x56,0x67,0xff,0x65,0x57,0x65,0xff,0x5f,0x52,0x60,0xff,0x5a,0x4f,0x5b,0xff,0x57, 0x4d,0x57,0xff,0x54,0x4c,0x55,0xff,0x54,0x4c,0x55,0xff,0x53,0x4b,0x53,0xff,0x53, 0x4b,0x53,0xff,0x53,0x4b,0x53,0xff,0x52,0x4a,0x52,0xff,0x52,0x4a,0x52,0xff,0x52, 0x4b,0x52,0xff,0x4a,0x43,0x4a,0xff,0x32,0x2c,0x32,0xff,0x34,0x2d,0x34,0xff,0x34, 0x2c,0x33,0xff,0x2a,0x26,0x2a,0xff,0x21,0x21,0x22,0xff,0x2d,0x28,0x2b,0xff,0x33, 0x2a,0x2c,0xff,0x1b,0x1f,0x1e,0xff,0x21,0x22,0x22,0xff,0x37,0x2f,0x38,0xff,0x35, 0x2d,0x35,0xff,0x36,0x2c,0x35,0xff,0x39,0x2f,0x38,0xff,0x52,0x44,0x51,0xff,0x6e, 0x5b,0x6d,0xff,0x70,0x5b,0x6e,0xff,0x76,0x5e,0x73,0xff,0x68,0x57,0x67,0xff,0x53, 0x4c,0x54,0xff,0x59,0x4f,0x59,0xff,0x59,0x4f,0x5a,0xff,0x59,0x4f,0x5a,0xff,0x5a, 0x50,0x5b,0xff,0x5a,0x50,0x5b,0xff,0x58,0x4f,0x59,0xff,0x58,0x4f,0x5a,0xff,0x45, 0x43,0x46,0xff,0x3c,0x3d,0x3c,0xff,0x6e,0x5b,0x69,0xff,0x77,0x5f,0x71,0xff,0x50, 0x49,0x51,0xff,0x47,0x45,0x48,0xff,0x48,0x45,0x49,0xff,0x48,0x45,0x49,0xff,0x48, 0x45,0x49,0xff,0x48,0x45,0x49,0xff,0x48,0x45,0x49,0xff,0x48,0x45,0x49,0xff,0x47, 0x44,0x48,0xff,0x47,0x44,0x48,0xff,0x46,0x44,0x47,0xff,0x43,0x3d,0x43,0xff,0x37, 0x31,0x37,0xff,0x3e,0x35,0x3d,0xff,0x48,0x3b,0x48,0xff,0x45,0x39,0x45,0xff,0x47, 0x3a,0x46,0xff,0x47,0x3b,0x46,0xff,0x41,0x36,0x3f,0xff,0x38,0x2e,0x37,0xff,0x47, 0x3b,0x47,0xff,0x68,0x55,0x67,0xff,0x76,0x60,0x74,0xff,0x77,0x61,0x75,0xff,0x71, 0x5d,0x6f,0xff,0x59,0x4f,0x59,0xff,0x5a,0x4f,0x5a,0xff,0x71,0x5c,0x6e,0xff,0x77, 0x60,0x74,0xff,0x74,0x5e,0x72,0xff,0x73,0x5d,0x71,0xff,0x72,0x5d,0x70,0xff,0x6d, 0x5b,0x6d,0xff,0x54,0x4c,0x55,0xff,0x4a,0x46,0x4b,0xff,0x46,0x44,0x46,0xff,0x35, 0x39,0x36,0xff,0x38,0x3b,0x39,0xff,0x45,0x43,0x46,0xff,0x39,0x3c,0x3a,0xff,0x2c, 0x34,0x2d,0xff,0x54,0x4b,0x54,0xff,0x47,0x44,0x48,0xff,0x4b,0x46,0x4b,0xff,0x55, 0x4c,0x56,0xff,0x58,0x4e,0x59,0xff,0x58,0x4e,0x58,0xff,0x58,0x4e,0x58,0xff,0x59, 0x4f,0x59,0xff,0x58,0x4e,0x59,0xff,0x59,0x4f,0x59,0xff,0x58,0x4e,0x58,0xff,0x57, 0x4e,0x58,0xff,0x56,0x4c,0x56,0xff,0x53,0x4b,0x52,0xff,0x4a,0x44,0x4e,0xff,0x91, 0x78,0x83,0xff,0xba,0xa2,0x9b,0xff,0xad,0x8f,0x85,0xff,0xa9,0x8a,0x7f,0xff,0xa8, 0x88,0x7e,0xff,0xa6,0x86,0x7c,0xff,0xa6,0x86,0x7c,0xff,0xa9,0x88,0x7d,0xff,0x7a, 0x5e,0x65,0xff,0x8a,0x6c,0x75,0xff,0xaa,0x88,0x7d,0xfe,0xa7,0x86,0x78,0xfc,0xb0, 0x87,0x7a,0xf7,0x62,0x4f,0x57,0xed,0x06,0x06,0x06,0xdc,0x00,0x00,0x00,0xc3,0x00, 0x00,0x00,0xa0,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x35,0x00, 0x00,0x00,0x1e,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x02,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x05,0x00, 0x00,0x00,0x0d,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x58,0x00, 0x00,0x00,0x82,0x00,0x00,0x00,0xac,0x03,0x02,0x03,0xcf,0x28,0x23,0x28,0xe6,0x61, 0x55,0x62,0xf5,0x5e,0x52,0x5e,0xfc,0x5e,0x52,0x5e,0xfd,0x60,0x53,0x60,0xff,0x5f, 0x53,0x60,0xff,0x5e,0x51,0x5e,0xff,0x5d,0x51,0x5d,0xff,0x5b,0x50,0x5c,0xff,0x56, 0x4d,0x57,0xff,0x43,0x42,0x44,0xff,0x36,0x3a,0x36,0xff,0x35,0x3a,0x36,0xff,0x33, 0x38,0x34,0xff,0x34,0x39,0x34,0xff,0x32,0x37,0x33,0xff,0x30,0x36,0x31,0xff,0x2e, 0x34,0x2e,0xff,0x1e,0x23,0x1f,0xff,0x21,0x25,0x22,0xff,0x30,0x2d,0x30,0xff,0x1b, 0x21,0x1b,0xff,0x1f,0x23,0x1f,0xff,0x1e,0x22,0x1e,0xff,0x1f,0x23,0x1f,0xff,0x1c, 0x1f,0x1c,0xff,0x28,0x2a,0x28,0xff,0x4a,0x48,0x4b,0xff,0x4e,0x49,0x4f,0xff,0x4f, 0x48,0x4f,0xff,0x4c,0x47,0x4c,0xff,0x56,0x4d,0x57,0xff,0x51,0x4a,0x52,0xff,0x58, 0x4e,0x58,0xff,0x5d,0x51,0x5d,0xff,0x5d,0x51,0x5e,0xff,0x5e,0x52,0x5f,0xff,0x5f, 0x52,0x60,0xff,0x61,0x54,0x61,0xff,0x63,0x55,0x63,0xff,0x54,0x4c,0x54,0xff,0x35, 0x39,0x36,0xff,0x29,0x31,0x29,0xff,0x23,0x2d,0x24,0xff,0x1c,0x25,0x1c,0xff,0x17, 0x1f,0x16,0xff,0x28,0x2e,0x28,0xff,0x45,0x40,0x45,0xff,0x5b,0x50,0x5c,0xff,0x6d, 0x5b,0x6e,0xff,0x8a,0x68,0x78,0xff,0x6c,0x55,0x57,0xff,0x31,0x38,0x36,0xff,0x36, 0x3b,0x38,0xff,0x2f,0x33,0x30,0xff,0x21,0x25,0x21,0xff,0x20,0x24,0x21,0xff,0x37, 0x31,0x37,0xff,0x36,0x31,0x35,0xff,0x21,0x24,0x22,0xff,0x25,0x27,0x26,0xff,0x23, 0x25,0x24,0xff,0x30,0x2f,0x31,0xff,0x4c,0x45,0x4c,0xff,0x54,0x4c,0x54,0xff,0x52, 0x4a,0x51,0xff,0x53,0x4b,0x52,0xff,0x52,0x4a,0x52,0xff,0x52,0x4a,0x53,0xff,0x53, 0x4b,0x54,0xff,0x54,0x4b,0x54,0xff,0x54,0x4c,0x54,0xff,0x54,0x4c,0x54,0xff,0x54, 0x4c,0x54,0xff,0x57,0x4e,0x58,0xff,0x54,0x4c,0x55,0xff,0x3f,0x3f,0x41,0xff,0x2e, 0x35,0x2f,0xff,0x42,0x41,0x42,0xff,0x4b,0x46,0x4b,0xff,0x59,0x4e,0x58,0xff,0x5c, 0x51,0x5d,0xff,0x28,0x31,0x2e,0xff,0x44,0x3b,0x36,0xff,0xa2,0x83,0x83,0xff,0xc5, 0x9f,0x93,0xff,0x6f,0x5f,0x5e,0xff,0x3a,0x3d,0x3c,0xff,0x28,0x2c,0x29,0xff,0x21, 0x24,0x21,0xff,0x21,0x24,0x20,0xff,0x18,0x1d,0x18,0xff,0x40,0x3d,0x41,0xff,0x4d, 0x48,0x4d,0xff,0x5a,0x4f,0x5a,0xff,0x54,0x4c,0x54,0xff,0x52,0x4b,0x53,0xff,0x54, 0x4c,0x55,0xff,0x53,0x4b,0x54,0xff,0x55,0x4d,0x56,0xff,0x55,0x4d,0x56,0xff,0x56, 0x4d,0x57,0xff,0x58,0x4e,0x58,0xff,0x59,0x4e,0x5a,0xff,0x61,0x54,0x61,0xff,0x4b, 0x46,0x4c,0xff,0x6e,0x5b,0x68,0xff,0x64,0x56,0x63,0xff,0x62,0x55,0x62,0xff,0x61, 0x54,0x62,0xff,0x63,0x55,0x63,0xff,0x62,0x54,0x62,0xff,0x60,0x52,0x60,0xff,0x5d, 0x51,0x5e,0xff,0x61,0x54,0x61,0xff,0x41,0x41,0x41,0xff,0x3b,0x3d,0x3b,0xff,0x26, 0x29,0x27,0xff,0x24,0x26,0x24,0xff,0x25,0x28,0x26,0xff,0x0a,0x0b,0x0b,0xff,0x00, 0x00,0x00,0xff,0x08,0x07,0x08,0xff,0x56,0x4c,0x57,0xff,0x5e,0x52,0x5f,0xff,0x61, 0x53,0x61,0xff,0x62,0x54,0x62,0xff,0x68,0x58,0x68,0xff,0x4b,0x47,0x4b,0xff,0x50, 0x4a,0x51,0xff,0x4c,0x48,0x4d,0xff,0x4a,0x46,0x4b,0xff,0x3b,0x3c,0x3b,0xff,0x45, 0x44,0x46,0xff,0x5a,0x4f,0x5a,0xff,0x5a,0x4f,0x5a,0xff,0x59,0x4e,0x5a,0xff,0x56, 0x4d,0x57,0xff,0x54,0x4c,0x54,0xff,0x54,0x4c,0x54,0xff,0x53,0x4b,0x53,0xff,0x54, 0x4c,0x54,0xff,0x53,0x4b,0x53,0xff,0x55,0x4c,0x56,0xfe,0x54,0x4c,0x54,0xfc,0x54, 0x4c,0x55,0xf5,0x51,0x49,0x51,0xe6,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0xa0,0x00, 0x00,0x00,0x73,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x2b,0x00, 0x00,0x00,0x41,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x94,0x01,0x01,0x01,0xc0,0x1e, 0x18,0x1d,0xe0,0x80,0x67,0x7c,0xf2,0x7f,0x64,0x78,0xfa,0x84,0x66,0x78,0xfd,0x81, 0x64,0x72,0xff,0x5c,0x51,0x5f,0xff,0x6d,0x5a,0x6b,0xff,0x70,0x5b,0x6e,0xff,0x71, 0x5c,0x6f,0xff,0x73,0x5e,0x71,0xff,0x72,0x5d,0x70,0xff,0x6c,0x59,0x6a,0xff,0x57, 0x4d,0x58,0xff,0x72,0x5d,0x71,0xff,0x65,0x56,0x65,0xff,0x60,0x53,0x60,0xff,0x5d, 0x51,0x5d,0xff,0x5a,0x4f,0x5b,0xff,0x56,0x4d,0x56,0xff,0x54,0x4c,0x55,0xff,0x54, 0x4c,0x54,0xff,0x52,0x4a,0x52,0xff,0x52,0x4b,0x53,0xff,0x50,0x4a,0x51,0xff,0x52, 0x4b,0x52,0xff,0x51,0x4a,0x51,0xff,0x51,0x4a,0x51,0xff,0x46,0x40,0x46,0xff,0x32, 0x2d,0x32,0xff,0x31,0x2b,0x31,0xff,0x2d,0x2a,0x2e,0xff,0x2a,0x26,0x2a,0xff,0x2c, 0x28,0x2d,0xff,0x3c,0x30,0x35,0xff,0x51,0x3b,0x38,0xff,0x36,0x2f,0x2c,0xff,0x22, 0x22,0x24,0xff,0x3b,0x30,0x3b,0xff,0x36,0x2d,0x35,0xff,0x36,0x2d,0x35,0xff,0x35, 0x2c,0x34,0xff,0x46,0x3a,0x45,0xff,0x66,0x55,0x66,0xff,0x74,0x5e,0x72,0xff,0x74, 0x5e,0x71,0xff,0x5f,0x52,0x5f,0xff,0x53,0x4b,0x54,0xff,0x58,0x4d,0x58,0xff,0x59, 0x4f,0x5a,0xff,0x59,0x4f,0x5a,0xff,0x58,0x4e,0x58,0xff,0x58,0x4e,0x58,0xff,0x56, 0x4d,0x57,0xff,0x54,0x4c,0x55,0xff,0x54,0x4c,0x54,0xff,0x39,0x3b,0x39,0xff,0x40, 0x3f,0x40,0xff,0x6a,0x59,0x6a,0xff,0x57,0x4e,0x58,0xff,0x45,0x43,0x46,0xff,0x48, 0x45,0x49,0xff,0x48,0x45,0x49,0xff,0x48,0x45,0x49,0xff,0x48,0x45,0x49,0xff,0x47, 0x44,0x48,0xff,0x47,0x44,0x48,0xff,0x47,0x44,0x47,0xff,0x48,0x45,0x48,0xff,0x41, 0x3e,0x41,0xff,0x42,0x38,0x41,0xff,0x45,0x3a,0x45,0xff,0x45,0x3a,0x45,0xff,0x45, 0x39,0x44,0xff,0x45,0x39,0x44,0xff,0x47,0x3a,0x45,0xff,0x48,0x3b,0x48,0xff,0x48, 0x3c,0x47,0xff,0x41,0x35,0x40,0xff,0x38,0x2e,0x38,0xff,0x44,0x37,0x43,0xff,0x5b, 0x4a,0x5a,0xff,0x71,0x5c,0x6f,0xff,0x7a,0x62,0x77,0xff,0x70,0x5c,0x6e,0xff,0x5e, 0x51,0x5e,0xff,0x6d,0x5a,0x6b,0xff,0x78,0x61,0x75,0xff,0x76,0x60,0x73,0xff,0x70, 0x5c,0x6e,0xff,0x7a,0x61,0x77,0xff,0x61,0x54,0x61,0xff,0x39,0x3c,0x3b,0xff,0x36, 0x3a,0x37,0xff,0x32,0x38,0x32,0xff,0x1d,0x2a,0x1e,0xff,0x18,0x25,0x19,0xff,0x2a, 0x31,0x2b,0xff,0x2c,0x34,0x2c,0xff,0x3c,0x3e,0x3d,0xff,0x3e,0x40,0x3f,0xff,0x40, 0x40,0x41,0xff,0x50,0x4a,0x51,0xff,0x56,0x4d,0x57,0xff,0x59,0x4f,0x59,0xff,0x57, 0x4d,0x57,0xff,0x58,0x4e,0x58,0xff,0x59,0x4f,0x5a,0xff,0x59,0x4f,0x5a,0xff,0x58, 0x4e,0x59,0xff,0x58,0x4e,0x58,0xff,0x58,0x4d,0x57,0xff,0x54,0x4b,0x54,0xff,0x54, 0x4c,0x55,0xff,0x50,0x49,0x50,0xff,0x4f,0x46,0x53,0xff,0xa0,0x81,0x79,0xff,0xb2, 0x94,0x8b,0xff,0xab,0x8d,0x83,0xff,0xa9,0x89,0x7f,0xff,0xa8,0x88,0x7e,0xff,0xa7, 0x87,0x7d,0xff,0xa7,0x87,0x7d,0xff,0xa3,0x80,0x76,0xff,0x7f,0x63,0x78,0xff,0x7a, 0x63,0x6e,0xff,0x90,0x71,0x7e,0xfe,0x57,0x4d,0x47,0xfc,0x72,0x5d,0x74,0xf6,0x63, 0x52,0x4c,0xec,0x07,0x06,0x05,0xda,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x9b,0x00, 0x00,0x00,0x75,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x1b,0x00, 0x00,0x00,0x0d,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x12,0x00, 0x00,0x00,0x24,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x95,0x00, 0x00,0x00,0xbd,0x06,0x06,0x07,0xdb,0x48,0x40,0x49,0xef,0x5e,0x53,0x5f,0xf8,0x5b, 0x50,0x5c,0xfd,0x5e,0x52,0x5e,0xfe,0x5e,0x52,0x5e,0xff,0x5b,0x50,0x5c,0xff,0x5a, 0x4f,0x5b,0xff,0x59,0x4e,0x59,0xff,0x56,0x4e,0x58,0xff,0x4e,0x48,0x4f,0xff,0x38, 0x3b,0x38,0xff,0x35,0x3a,0x36,0xff,0x34,0x39,0x35,0xff,0x33,0x38,0x34,0xff,0x33, 0x38,0x33,0xff,0x31,0x37,0x31,0xff,0x2f,0x34,0x2f,0xff,0x25,0x2a,0x25,0xff,0x19, 0x1f,0x1a,0xff,0x1b,0x20,0x1c,0xff,0x2c,0x2a,0x2c,0xff,0x1c,0x21,0x1c,0xff,0x1e, 0x22,0x1e,0xff,0x1e,0x22,0x1e,0xff,0x1d,0x21,0x1d,0xff,0x20,0x23,0x20,0xff,0x3c, 0x3c,0x3e,0xff,0x54,0x4c,0x55,0xff,0x51,0x4b,0x52,0xff,0x55,0x4c,0x55,0xff,0x54, 0x4c,0x55,0xff,0x58,0x4e,0x59,0xff,0x5f,0x53,0x5f,0xff,0x60,0x53,0x60,0xff,0x5d, 0x51,0x5d,0xff,0x5c,0x50,0x5c,0xff,0x5d,0x51,0x5d,0xff,0x55,0x4d,0x56,0xff,0x3f, 0x40,0x3f,0xff,0x3c,0x3e,0x3d,0xff,0x33,0x39,0x35,0xff,0x30,0x35,0x2f,0xff,0x1e, 0x29,0x1e,0xff,0x30,0x33,0x31,0xff,0x55,0x4b,0x55,0xff,0x5d,0x52,0x5e,0xff,0x6e, 0x5b,0x6e,0xff,0x5f,0x52,0x5f,0xff,0x38,0x3b,0x39,0xff,0x58,0x4d,0x54,0xff,0x80, 0x64,0x78,0xff,0x56,0x4d,0x55,0xff,0x31,0x38,0x33,0xff,0x32,0x36,0x33,0xff,0x21, 0x26,0x22,0xff,0x2b,0x2a,0x2b,0xff,0x46,0x3a,0x46,0xff,0x33,0x2f,0x33,0xff,0x20, 0x24,0x21,0xff,0x24,0x26,0x25,0xff,0x26,0x27,0x26,0xff,0x29,0x28,0x29,0xff,0x44, 0x3e,0x43,0xff,0x54,0x4c,0x54,0xff,0x51,0x4a,0x51,0xff,0x52,0x4a,0x52,0xff,0x52, 0x4a,0x52,0xff,0x51,0x4a,0x51,0xff,0x51,0x4a,0x51,0xff,0x50,0x49,0x51,0xff,0x50, 0x49,0x51,0xff,0x54,0x4b,0x54,0xff,0x4c,0x47,0x4c,0xff,0x39,0x3c,0x39,0xff,0x50, 0x4a,0x53,0xff,0x6f,0x59,0x61,0xff,0x64,0x53,0x5b,0xff,0x48,0x44,0x49,0xff,0x57, 0x4d,0x57,0xff,0x68,0x58,0x6a,0xff,0x7d,0x5f,0x6d,0xff,0x86,0x69,0x65,0xff,0xab, 0x8e,0x87,0xff,0xbe,0x9c,0x92,0xff,0x88,0x72,0x73,0xff,0x42,0x41,0x41,0xff,0x33, 0x39,0x34,0xff,0x27,0x2b,0x29,0xff,0x20,0x23,0x20,0xff,0x21,0x25,0x21,0xff,0x1a, 0x1d,0x19,0xff,0x33,0x33,0x34,0xff,0x51,0x4a,0x51,0xff,0x52,0x4b,0x52,0xff,0x52, 0x4b,0x53,0xff,0x53,0x4b,0x54,0xff,0x53,0x4b,0x54,0xff,0x53,0x4b,0x53,0xff,0x54, 0x4c,0x54,0xff,0x54,0x4c,0x55,0xff,0x54,0x4c,0x55,0xff,0x57,0x4e,0x57,0xff,0x58, 0x4e,0x58,0xff,0x5b,0x4f,0x5b,0xff,0x60,0x53,0x60,0xff,0x69,0x59,0x68,0xff,0x63, 0x55,0x63,0xff,0x66,0x55,0x67,0xff,0x7f,0x61,0x6a,0xff,0x65,0x54,0x61,0xff,0x60, 0x53,0x62,0xff,0x5f,0x53,0x61,0xff,0x5e,0x51,0x5d,0xff,0x5f,0x51,0x5f,0xff,0x43, 0x43,0x43,0xff,0x3a,0x3d,0x3b,0xff,0x27,0x2a,0x28,0xff,0x23,0x25,0x22,0xff,0x23, 0x27,0x24,0xff,0x04,0x05,0x05,0xff,0x00,0x00,0x00,0xff,0x00,0x01,0x00,0xff,0x54, 0x4a,0x55,0xff,0x5e,0x52,0x5f,0xff,0x60,0x53,0x60,0xff,0x61,0x54,0x61,0xff,0x62, 0x54,0x62,0xff,0x5e,0x51,0x5e,0xff,0x4f,0x49,0x50,0xff,0x56,0x4e,0x56,0xff,0x5d, 0x52,0x5e,0xff,0x3c,0x3e,0x3c,0xff,0x49,0x45,0x4a,0xff,0x42,0x41,0x43,0xff,0x3c, 0x3e,0x3c,0xff,0x4b,0x43,0x4c,0xff,0x55,0x4c,0x56,0xff,0x53,0x4b,0x53,0xff,0x53, 0x4b,0x53,0xff,0x53,0x4b,0x53,0xff,0x53,0x4b,0x53,0xff,0x53,0x4b,0x53,0xff,0x53, 0x4b,0x53,0xfe,0x53,0x4b,0x53,0xfb,0x53,0x4b,0x54,0xf4,0x51,0x49,0x51,0xe4,0x00, 0x00,0x00,0xc5,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x44,0x00, 0x00,0x00,0x2b,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x5e,0x00, 0x00,0x00,0x8c,0x00,0x00,0x00,0xb8,0x0f,0x0d,0x0f,0xdb,0x7f,0x66,0x7c,0xf0,0x7e, 0x64,0x78,0xf9,0x84,0x66,0x78,0xfe,0x7a,0x61,0x75,0xff,0x54,0x4d,0x56,0xff,0x6d, 0x5a,0x6c,0xff,0x70,0x5b,0x6e,0xff,0x71,0x5c,0x6f,0xff,0x70,0x5c,0x6f,0xff,0x71, 0x5b,0x6f,0xff,0x69,0x58,0x69,0xff,0x51,0x4a,0x52,0xff,0x6b,0x59,0x6b,0xff,0x62, 0x54,0x62,0xff,0x5f,0x52,0x5f,0xff,0x5a,0x50,0x5b,0xff,0x58,0x4f,0x58,0xff,0x55, 0x4d,0x57,0xff,0x53,0x4c,0x54,0xff,0x4f,0x4a,0x50,0xff,0x4f,0x49,0x50,0xff,0x50, 0x49,0x51,0xff,0x4f,0x49,0x50,0xff,0x50,0x4a,0x51,0xff,0x50,0x49,0x50,0xff,0x51, 0x4a,0x51,0xff,0x4a,0x43,0x4a,0xff,0x33,0x2f,0x34,0xff,0x26,0x26,0x28,0xff,0x26, 0x25,0x26,0xff,0x35,0x2d,0x35,0xff,0x34,0x2d,0x35,0xff,0x3a,0x2f,0x34,0xff,0x51, 0x3b,0x37,0xff,0x4a,0x3a,0x38,0xff,0x33,0x2b,0x36,0xff,0x36,0x2d,0x36,0xff,0x35, 0x2c,0x35,0xff,0x33,0x2b,0x34,0xff,0x37,0x2e,0x37,0xff,0x50,0x42,0x4f,0xff,0x6c, 0x5a,0x6c,0xff,0x73,0x5e,0x71,0xff,0x71,0x5d,0x6f,0xff,0x58,0x4f,0x5a,0xff,0x55, 0x4d,0x56,0xff,0x58,0x4e,0x58,0xff,0x59,0x4e,0x59,0xff,0x59,0x4f,0x59,0xff,0x58, 0x4e,0x58,0xff,0x57,0x4e,0x58,0xff,0x55,0x4d,0x56,0xff,0x54,0x4c,0x54,0xff,0x53, 0x4b,0x53,0xff,0x4b,0x47,0x4c,0xff,0x3d,0x3f,0x3e,0xff,0x4a,0x46,0x4a,0xff,0x63, 0x55,0x63,0xff,0x57,0x4d,0x57,0xff,0x46,0x44,0x47,0xff,0x48,0x45,0x48,0xff,0x47, 0x44,0x47,0xff,0x47,0x44,0x47,0xff,0x47,0x44,0x47,0xff,0x47,0x44,0x47,0xff,0x47, 0x44,0x47,0xff,0x48,0x45,0x48,0xff,0x41,0x3c,0x42,0xff,0x41,0x38,0x42,0xff,0x47, 0x3b,0x47,0xff,0x45,0x3a,0x46,0xff,0x45,0x39,0x44,0xff,0x46,0x3a,0x45,0xff,0x45, 0x39,0x44,0xff,0x46,0x39,0x45,0xff,0x47,0x3b,0x47,0xff,0x47,0x3b,0x46,0xff,0x46, 0x39,0x45,0xff,0x3e,0x32,0x3e,0xff,0x3d,0x32,0x3c,0xff,0x4e,0x40,0x4c,0xff,0x6d, 0x58,0x6a,0xff,0x80,0x66,0x7d,0xff,0x57,0x4e,0x57,0xff,0x65,0x55,0x64,0xff,0x7a, 0x61,0x76,0xff,0x74,0x5f,0x72,0xff,0x77,0x60,0x75,0xff,0x61,0x54,0x61,0xff,0x49, 0x45,0x49,0xff,0x30,0x36,0x30,0xff,0x2f,0x36,0x2f,0xff,0x2e,0x35,0x2f,0xff,0x58, 0x4e,0x57,0xff,0x5d,0x4f,0x5c,0xff,0x3f,0x3f,0x3f,0xff,0x3a,0x3d,0x3c,0xff,0x40, 0x41,0x41,0xff,0x3f,0x40,0x41,0xff,0x47,0x45,0x49,0xff,0x53,0x4c,0x55,0xff,0x55, 0x4d,0x57,0xff,0x57,0x4e,0x58,0xff,0x57,0x4d,0x58,0xff,0x58,0x4e,0x59,0xff,0x58, 0x4e,0x58,0xff,0x5a,0x4f,0x5b,0xff,0x58,0x4e,0x59,0xff,0x58,0x4f,0x59,0xff,0x58, 0x4d,0x58,0xff,0x54,0x4c,0x55,0xff,0x54,0x4c,0x55,0xff,0x51,0x4b,0x52,0xff,0x47, 0x45,0x4a,0xff,0x54,0x49,0x4d,0xff,0xa3,0x87,0x7e,0xff,0xae,0x8e,0x84,0xff,0xaa, 0x8b,0x81,0xff,0xa8,0x88,0x7e,0xff,0xa8,0x88,0x7e,0xff,0xa8,0x88,0x7e,0xff,0xa9, 0x8a,0x7e,0xff,0xa2,0x82,0x7d,0xff,0x70,0x5c,0x6f,0xff,0x39,0x3a,0x3c,0xff,0x5f, 0x51,0x61,0xfd,0x93,0x76,0x74,0xfc,0xa8,0x85,0x7b,0xf5,0x59,0x48,0x41,0xea,0x04, 0x03,0x03,0xd5,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x6e,0x00, 0x00,0x00,0x4a,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x0a,0x00, 0x00,0x00,0x03,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x03,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x31,0x00, 0x00,0x00,0x53,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0xa8,0x01,0x01,0x01,0xcb,0x18, 0x15,0x18,0xe5,0x5e,0x52,0x5f,0xf3,0x5c,0x50,0x5c,0xfb,0x5d,0x51,0x5d,0xfe,0x5d, 0x51,0x5d,0xff,0x5b,0x50,0x5c,0xff,0x59,0x4f,0x5a,0xff,0x59,0x4f,0x59,0xff,0x58, 0x4e,0x58,0xff,0x52,0x4b,0x53,0xff,0x40,0x41,0x41,0xff,0x33,0x38,0x34,0xff,0x36, 0x3a,0x37,0xff,0x34,0x39,0x35,0xff,0x32,0x37,0x32,0xff,0x2e,0x35,0x2e,0xff,0x2e, 0x34,0x2e,0xff,0x2a,0x30,0x2b,0xff,0x1c,0x20,0x1c,0xff,0x20,0x23,0x21,0xff,0x2a, 0x2a,0x2b,0xff,0x1b,0x21,0x1b,0xff,0x1d,0x22,0x1d,0xff,0x1f,0x23,0x1f,0xff,0x1d, 0x21,0x1d,0xff,0x1b,0x1f,0x1b,0xff,0x2c,0x2e,0x2c,0xff,0x4f,0x4a,0x50,0xff,0x50, 0x4a,0x51,0xff,0x51,0x4a,0x51,0xff,0x51,0x4a,0x52,0xff,0x57,0x4e,0x57,0xff,0x64, 0x56,0x64,0xff,0x62,0x54,0x62,0xff,0x59,0x4f,0x59,0xff,0x46,0x44,0x46,0xff,0x3a, 0x3c,0x3b,0xff,0x45,0x43,0x46,0xff,0x48,0x45,0x48,0xff,0x41,0x40,0x40,0xff,0x3e, 0x3f,0x3e,0xff,0x3f,0x3f,0x40,0xff,0x3c,0x3d,0x3d,0xff,0x65,0x55,0x64,0xff,0x70, 0x5c,0x6f,0xff,0x6d,0x5a,0x6c,0xff,0x56,0x4c,0x56,0xff,0x3a,0x3c,0x3a,0xff,0x31, 0x37,0x32,0xff,0x2e,0x36,0x32,0xff,0x67,0x54,0x5a,0xff,0x6f,0x57,0x5c,0xff,0x2d, 0x35,0x31,0xff,0x36,0x3a,0x37,0xff,0x26,0x2c,0x27,0xff,0x34,0x2f,0x34,0xff,0x47, 0x3b,0x47,0xff,0x2a,0x2a,0x2a,0xff,0x23,0x26,0x23,0xff,0x25,0x27,0x26,0xff,0x25, 0x27,0x26,0xff,0x2a,0x2b,0x2b,0xff,0x44,0x40,0x44,0xff,0x54,0x4c,0x54,0xff,0x50, 0x49,0x50,0xff,0x4f,0x49,0x50,0xff,0x4f,0x49,0x50,0xff,0x50,0x4a,0x51,0xff,0x50, 0x4a,0x51,0xff,0x4f,0x49,0x50,0xff,0x4f,0x49,0x50,0xff,0x55,0x4d,0x56,0xff,0x37, 0x39,0x37,0xff,0x3a,0x3c,0x3f,0xff,0x80,0x66,0x68,0xff,0xa0,0x75,0x74,0xff,0x66, 0x53,0x57,0xff,0x35,0x3a,0x38,0xff,0x4f,0x49,0x4f,0xff,0x60,0x53,0x60,0xff,0x65, 0x55,0x60,0xff,0x60,0x54,0x59,0xff,0x87,0x6e,0x73,0xff,0x7a,0x64,0x6b,0xff,0x5d, 0x51,0x5e,0xff,0x43,0x42,0x44,0xff,0x38,0x3c,0x38,0xff,0x28,0x2c,0x29,0xff,0x20, 0x24,0x21,0xff,0x21,0x24,0x21,0xff,0x1c,0x20,0x1c,0xff,0x27,0x28,0x27,0xff,0x4b, 0x45,0x4b,0xff,0x52,0x4b,0x53,0xff,0x51,0x4a,0x51,0xff,0x50,0x49,0x50,0xff,0x50, 0x49,0x50,0xff,0x51,0x4a,0x51,0xff,0x52,0x4a,0x51,0xff,0x54,0x4c,0x54,0xff,0x54, 0x4c,0x55,0xff,0x56,0x4d,0x57,0xff,0x56,0x4d,0x57,0xff,0x58,0x4e,0x59,0xff,0x5d, 0x51,0x5d,0xff,0x5b,0x50,0x5c,0xff,0x5e,0x51,0x5f,0xff,0x63,0x54,0x63,0xff,0x68, 0x57,0x63,0xff,0x7c,0x5f,0x6b,0xff,0x84,0x65,0x75,0xff,0x5c,0x50,0x59,0xff,0x58, 0x4e,0x59,0xff,0x5b,0x50,0x5c,0xff,0x43,0x41,0x43,0xff,0x3a,0x3d,0x3a,0xff,0x28, 0x2a,0x28,0xff,0x24,0x26,0x25,0xff,0x1f,0x22,0x20,0xff,0x03,0x03,0x03,0xff,0x00, 0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x52,0x48,0x53,0xff,0x5d,0x51,0x5d,0xff,0x60, 0x53,0x60,0xff,0x62,0x54,0x62,0xff,0x62,0x54,0x62,0xff,0x62,0x54,0x62,0xff,0x61, 0x54,0x61,0xff,0x62,0x54,0x62,0xff,0x5e,0x52,0x5f,0xff,0x47,0x44,0x48,0xff,0x30, 0x36,0x30,0xff,0x52,0x4c,0x53,0xff,0x4f,0x48,0x50,0xff,0x38,0x39,0x38,0xff,0x50, 0x49,0x51,0xff,0x53,0x4b,0x53,0xff,0x53,0x4b,0x53,0xff,0x53,0x4b,0x53,0xff,0x53, 0x4b,0x53,0xff,0x53,0x4b,0x53,0xff,0x53,0x4b,0x53,0xfe,0x53,0x4b,0x53,0xfc,0x53, 0x4b,0x53,0xf3,0x51,0x49,0x51,0xe4,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x9b,0x00, 0x00,0x00,0x6d,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x24,0x00, 0x00,0x00,0x33,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0xaf,0x0b, 0x09,0x0b,0xd5,0x74,0x5e,0x70,0xec,0x7f,0x64,0x79,0xf8,0x81,0x65,0x78,0xfd,0x78, 0x60,0x74,0xfe,0x5a,0x50,0x5a,0xff,0x57,0x4d,0x56,0xff,0x6e,0x5a,0x6d,0xff,0x70, 0x5c,0x6f,0xff,0x70,0x5c,0x6f,0xff,0x70,0x5b,0x6f,0xff,0x69,0x58,0x68,0xff,0x55, 0x4d,0x55,0xff,0x72,0x5d,0x70,0xff,0x61,0x54,0x61,0xff,0x5f,0x52,0x5f,0xff,0x5a, 0x4f,0x5b,0xff,0x55,0x4d,0x56,0xff,0x53,0x4c,0x54,0xff,0x51,0x4a,0x51,0xff,0x4f, 0x49,0x50,0xff,0x4f,0x49,0x50,0xff,0x4f,0x49,0x50,0xff,0x4f,0x49,0x50,0xff,0x4f, 0x49,0x50,0xff,0x4d,0x48,0x4e,0xff,0x4f,0x4a,0x50,0xff,0x45,0x41,0x46,0xff,0x2b, 0x28,0x2c,0xff,0x2b,0x2d,0x2c,0xff,0x23,0x24,0x23,0xff,0x36,0x2e,0x37,0xff,0x33, 0x2d,0x34,0xff,0x3a,0x30,0x37,0xff,0x4b,0x37,0x3a,0xff,0x46,0x35,0x38,0xff,0x36, 0x2d,0x37,0xff,0x34,0x2c,0x34,0xff,0x35,0x2c,0x35,0xff,0x33,0x2a,0x33,0xff,0x42, 0x37,0x42,0xff,0x67,0x55,0x66,0xff,0x70,0x5c,0x6f,0xff,0x74,0x5e,0x72,0xff,0x6e, 0x5b,0x6c,0xff,0x54,0x4b,0x55,0xff,0x56,0x4d,0x57,0xff,0x58,0x4e,0x58,0xff,0x58, 0x4e,0x59,0xff,0x59,0x4f,0x59,0xff,0x58,0x4e,0x58,0xff,0x57,0x4e,0x58,0xff,0x55, 0x4d,0x56,0xff,0x52,0x4b,0x53,0xff,0x4e,0x48,0x4e,0xff,0x4f,0x49,0x50,0xff,0x4b, 0x46,0x4b,0xff,0x38,0x3b,0x38,0xff,0x52,0x4b,0x52,0xff,0x61,0x53,0x60,0xff,0x43, 0x42,0x44,0xff,0x47,0x44,0x47,0xff,0x47,0x44,0x47,0xff,0x47,0x44,0x47,0xff,0x47, 0x44,0x47,0xff,0x47,0x44,0x47,0xff,0x47,0x44,0x47,0xff,0x49,0x46,0x49,0xff,0x3e, 0x38,0x3e,0xff,0x33,0x2a,0x33,0xff,0x41,0x36,0x40,0xff,0x48,0x3b,0x47,0xff,0x45, 0x39,0x44,0xff,0x45,0x3a,0x45,0xff,0x45,0x39,0x44,0xff,0x46,0x39,0x45,0xff,0x47, 0x3b,0x47,0xff,0x47,0x3b,0x47,0xff,0x49,0x3c,0x48,0xff,0x4a,0x3c,0x49,0xff,0x42, 0x37,0x41,0xff,0x3b,0x30,0x39,0xff,0x4a,0x3b,0x48,0xff,0x70,0x59,0x6d,0xff,0x60, 0x53,0x60,0xff,0x67,0x57,0x66,0xff,0x76,0x60,0x74,0xff,0x76,0x60,0x74,0xff,0x5e, 0x51,0x5d,0xff,0x50,0x49,0x50,0xff,0x4a,0x45,0x4b,0xff,0x45,0x43,0x45,0xff,0x45, 0x43,0x45,0xff,0x43,0x42,0x43,0xff,0x50,0x4a,0x50,0xff,0x51,0x4b,0x52,0xff,0x47, 0x45,0x48,0xff,0x43,0x41,0x42,0xff,0x41,0x40,0x41,0xff,0x41,0x40,0x41,0xff,0x50, 0x49,0x50,0xff,0x56,0x4d,0x57,0xff,0x58,0x4d,0x57,0xff,0x59,0x4f,0x59,0xff,0x58, 0x4e,0x58,0xff,0x5a,0x50,0x5a,0xff,0x5b,0x4f,0x5b,0xff,0x5b,0x50,0x5c,0xff,0x5a, 0x4f,0x5b,0xff,0x57,0x4d,0x58,0xff,0x57,0x4d,0x57,0xff,0x55,0x4c,0x56,0xff,0x53, 0x4b,0x54,0xff,0x51,0x49,0x51,0xff,0x4e,0x49,0x4f,0xff,0x3f,0x3f,0x45,0xff,0x83, 0x63,0x64,0xff,0xad,0x90,0x87,0xff,0xad,0x8f,0x85,0xff,0xa9,0x8a,0x80,0xff,0xa8, 0x88,0x7e,0xff,0xa8,0x88,0x7e,0xff,0xa7,0x87,0x7d,0xff,0xab,0x8a,0x7d,0xff,0x87, 0x69,0x78,0xff,0x7c,0x61,0x57,0xff,0xaf,0x93,0x90,0xfe,0xa8,0x88,0x7b,0xfd,0xa6, 0x84,0x79,0xfb,0xa4,0x83,0x78,0xf3,0x43,0x36,0x30,0xe6,0x03,0x02,0x02,0xd0,0x00, 0x00,0x00,0xb2,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x41,0x00, 0x00,0x00,0x25,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x03,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x06,0x00, 0x00,0x00,0x10,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x67,0x00, 0x00,0x00,0x91,0x00,0x00,0x00,0xb9,0x04,0x04,0x05,0xd7,0x37,0x31,0x38,0xeb,0x5f, 0x54,0x60,0xf7,0x59,0x4f,0x5a,0xfc,0x5d,0x51,0x5d,0xfe,0x5b,0x50,0x5c,0xff,0x5b, 0x50,0x5c,0xff,0x59,0x4f,0x5a,0xff,0x58,0x4e,0x58,0xff,0x56,0x4d,0x57,0xff,0x4f, 0x48,0x50,0xff,0x36,0x3a,0x36,0xff,0x33,0x38,0x33,0xff,0x33,0x38,0x34,0xff,0x2f, 0x34,0x2f,0xff,0x2d,0x34,0x2e,0xff,0x2e,0x35,0x2e,0xff,0x2d,0x33,0x2d,0xff,0x22, 0x27,0x22,0xff,0x1d,0x22,0x1d,0xff,0x1c,0x22,0x1c,0xff,0x1a,0x1f,0x1a,0xff,0x1a, 0x21,0x1a,0xff,0x1d,0x22,0x1d,0xff,0x1d,0x21,0x1e,0xff,0x1b,0x1f,0x1a,0xff,0x23, 0x27,0x23,0xff,0x44,0x43,0x44,0xff,0x50,0x4a,0x52,0xff,0x4f,0x49,0x50,0xff,0x4f, 0x49,0x4f,0xff,0x59,0x4e,0x58,0xff,0x6d,0x5a,0x6d,0xff,0x67,0x56,0x66,0xff,0x56, 0x4d,0x57,0xff,0x44,0x43,0x45,0xff,0x4b,0x46,0x4c,0xff,0x73,0x5d,0x6e,0xff,0x7c, 0x63,0x74,0xff,0x7b,0x5f,0x6e,0xff,0x7c,0x60,0x6b,0xff,0x68,0x59,0x6a,0xff,0x53, 0x4b,0x53,0xff,0x52,0x4b,0x52,0xff,0x48,0x45,0x49,0xff,0x40,0x40,0x40,0xff,0x3b, 0x3d,0x3c,0xff,0x37,0x3b,0x37,0xff,0x38,0x3b,0x38,0xff,0x2e,0x36,0x30,0xff,0x53, 0x4a,0x4f,0xff,0x61,0x52,0x5c,0xff,0x32,0x38,0x34,0xff,0x3a,0x3d,0x3b,0xff,0x28, 0x2e,0x28,0xff,0x36,0x30,0x35,0xff,0x3f,0x35,0x3e,0xff,0x21,0x24,0x21,0xff,0x24, 0x26,0x25,0xff,0x26,0x28,0x27,0xff,0x26,0x28,0x27,0xff,0x19,0x1a,0x19,0xff,0x35, 0x32,0x35,0xff,0x54,0x4d,0x55,0xff,0x4f,0x49,0x50,0xff,0x4f,0x49,0x50,0xff,0x4f, 0x49,0x50,0xff,0x4f,0x49,0x50,0xff,0x4f,0x49,0x50,0xff,0x4f,0x49,0x50,0xff,0x4f, 0x49,0x50,0xff,0x52,0x4b,0x53,0xff,0x3b,0x3d,0x3c,0xff,0x49,0x46,0x4c,0xff,0x7f, 0x63,0x6e,0xff,0x68,0x56,0x5a,0xff,0x3c,0x3e,0x3d,0xff,0x4c,0x47,0x4e,0xff,0x5d, 0x51,0x5d,0xff,0x5e,0x52,0x5f,0xff,0x5e,0x52,0x60,0xff,0x56,0x4d,0x59,0xff,0x5b, 0x4f,0x5b,0xff,0x5c,0x50,0x5d,0xff,0x5d,0x51,0x5e,0xff,0x49,0x45,0x4a,0xff,0x3b, 0x3e,0x3b,0xff,0x2b,0x2e,0x2b,0xff,0x21,0x24,0x21,0xff,0x20,0x24,0x20,0xff,0x1f, 0x23,0x1f,0xff,0x1e,0x21,0x1e,0xff,0x45,0x40,0x45,0xff,0x51,0x4a,0x52,0xff,0x4f, 0x49,0x50,0xff,0x50,0x4a,0x51,0xff,0x4f,0x49,0x50,0xff,0x51,0x4a,0x51,0xff,0x4f, 0x49,0x50,0xff,0x50,0x4a,0x51,0xff,0x51,0x4a,0x51,0xff,0x53,0x4b,0x54,0xff,0x55, 0x4d,0x57,0xff,0x58,0x4e,0x58,0xff,0x59,0x4f,0x59,0xff,0x5a,0x50,0x5c,0xff,0x5d, 0x51,0x5d,0xff,0x5e,0x52,0x5f,0xff,0x5d,0x52,0x60,0xff,0x61,0x54,0x60,0xff,0x71, 0x5d,0x70,0xff,0x86,0x64,0x6c,0xff,0x33,0x37,0x2f,0xff,0x54,0x4c,0x55,0xff,0x48, 0x45,0x49,0xff,0x39,0x3c,0x3a,0xff,0x27,0x2b,0x28,0xff,0x21,0x25,0x21,0xff,0x19, 0x1b,0x19,0xff,0x02,0x02,0x02,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x4b, 0x42,0x4c,0xff,0x59,0x4f,0x5a,0xff,0x5c,0x50,0x5c,0xff,0x5e,0x51,0x5e,0xff,0x62, 0x54,0x62,0xff,0x5e,0x52,0x5f,0xff,0x62,0x54,0x62,0xff,0x5e,0x52,0x5f,0xff,0x5c, 0x50,0x5d,0xff,0x5c,0x50,0x5c,0xff,0x22,0x2d,0x23,0xff,0x54,0x4c,0x55,0xff,0x59, 0x4f,0x5a,0xff,0x4d,0x47,0x4e,0xff,0x41,0x3d,0x41,0xff,0x54,0x4c,0x54,0xff,0x53, 0x4b,0x53,0xff,0x53,0x4b,0x53,0xff,0x51,0x4a,0x51,0xff,0x51,0x4a,0x51,0xff,0x51, 0x4a,0x51,0xfe,0x51,0x4a,0x51,0xfc,0x4f,0x49,0x50,0xf5,0x51,0x49,0x51,0xe6,0x00, 0x00,0x00,0xca,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x4c,0x00, 0x00,0x00,0x2f,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x4f,0x00, 0x00,0x00,0x7a,0x00,0x00,0x00,0xa8,0x09,0x07,0x09,0xd0,0x63,0x50,0x61,0xea,0x7e, 0x64,0x79,0xf7,0x7f,0x65,0x78,0xfd,0x74,0x5d,0x71,0xfe,0x61,0x54,0x61,0xff,0x4d, 0x47,0x4e,0xff,0x4f,0x49,0x4f,0xff,0x69,0x57,0x68,0xff,0x6b,0x59,0x6a,0xff,0x66, 0x56,0x65,0xff,0x44,0x43,0x46,0xff,0x62,0x54,0x5b,0xff,0x91,0x6e,0x6a,0xff,0x5e, 0x52,0x62,0xff,0x5d,0x51,0x5e,0xff,0x59,0x4f,0x5a,0xff,0x53,0x4b,0x54,0xff,0x51, 0x4a,0x52,0xff,0x51,0x4a,0x51,0xff,0x4f,0x49,0x50,0xff,0x4f,0x49,0x50,0xff,0x4f, 0x49,0x50,0xff,0x4f,0x49,0x50,0xff,0x4f,0x49,0x50,0xff,0x4d,0x48,0x4e,0xff,0x4f, 0x4a,0x50,0xff,0x41,0x3d,0x42,0xff,0x18,0x16,0x18,0xff,0x1c,0x1b,0x1c,0xff,0x2a, 0x2a,0x2a,0xff,0x34,0x2d,0x35,0xff,0x35,0x2e,0x35,0xff,0x36,0x2e,0x35,0xff,0x3e, 0x31,0x3a,0xff,0x3e,0x32,0x3a,0xff,0x2f,0x29,0x2f,0xff,0x35,0x2c,0x35,0xff,0x34, 0x2c,0x34,0xff,0x32,0x2a,0x32,0xff,0x4b,0x3e,0x4a,0xff,0x73,0x5f,0x72,0xff,0x6f, 0x5c,0x6e,0xff,0x74,0x5e,0x72,0xff,0x67,0x57,0x66,0xff,0x51,0x4a,0x53,0xff,0x57, 0x4d,0x57,0xff,0x59,0x4f,0x59,0xff,0x59,0x4f,0x59,0xff,0x58,0x4e,0x58,0xff,0x57, 0x4e,0x58,0xff,0x56,0x4d,0x57,0xff,0x54,0x4b,0x55,0xff,0x4e,0x48,0x4f,0xff,0x4d, 0x48,0x4e,0xff,0x4c,0x47,0x4d,0xff,0x4a,0x46,0x4b,0xff,0x45,0x43,0x46,0xff,0x49, 0x45,0x4a,0xff,0x4e,0x48,0x4e,0xff,0x46,0x43,0x46,0xff,0x47,0x44,0x47,0xff,0x47, 0x44,0x47,0xff,0x47,0x44,0x47,0xff,0x47,0x44,0x47,0xff,0x47,0x44,0x47,0xff,0x46, 0x44,0x46,0xff,0x4f,0x4b,0x50,0xfe,0x39,0x33,0x3a,0xfe,0x0b,0x08,0x0a,0xfd,0x1d, 0x18,0x1d,0xfd,0x43,0x38,0x43,0xfd,0x46,0x3a,0x46,0xfe,0x44,0x38,0x43,0xfe,0x45, 0x3a,0x45,0xfe,0x46,0x3a,0x46,0xff,0x47,0x3b,0x47,0xff,0x48,0x3b,0x47,0xff,0x4a, 0x3c,0x48,0xff,0x4a,0x3c,0x48,0xff,0x4a,0x3d,0x49,0xff,0x40,0x33,0x3f,0xff,0x3d, 0x31,0x3b,0xff,0x50,0x3f,0x4d,0xff,0x53,0x48,0x52,0xff,0x5a,0x50,0x5a,0xff,0x69, 0x58,0x69,0xff,0x5c,0x50,0x5b,0xff,0x63,0x54,0x62,0xff,0x56,0x4d,0x56,0xff,0x49, 0x46,0x4b,0xff,0x48,0x45,0x49,0xff,0x48,0x44,0x48,0xff,0x47,0x43,0x48,0xff,0x43, 0x42,0x44,0xff,0x3a,0x3d,0x3e,0xff,0x6d,0x56,0x5d,0xff,0x96,0x78,0x72,0xff,0x8f, 0x6f,0x6a,0xff,0x88,0x67,0x65,0xff,0x8d,0x6a,0x68,0xff,0x8e,0x6b,0x68,0xff,0x8f, 0x6d,0x69,0xff,0x91,0x70,0x69,0xff,0x91,0x70,0x69,0xff,0x90,0x6e,0x69,0xff,0x90, 0x6e,0x69,0xff,0x90,0x6e,0x69,0xff,0x8e,0x6c,0x69,0xff,0x8e,0x6b,0x68,0xff,0x8e, 0x6b,0x68,0xff,0x8c,0x69,0x68,0xff,0x89,0x67,0x67,0xff,0x88,0x66,0x67,0xff,0x87, 0x65,0x67,0xff,0x8c,0x6b,0x64,0xff,0xa2,0x81,0x78,0xff,0xac,0x8d,0x83,0xff,0xac, 0x8d,0x83,0xff,0xa9,0x8a,0x7f,0xff,0xa8,0x88,0x7e,0xff,0xa8,0x88,0x7e,0xff,0xa7, 0x87,0x7d,0xff,0xa6,0x86,0x7c,0xff,0xa5,0x84,0x7d,0xff,0x9c,0x77,0x6f,0xff,0xc2, 0xa9,0xa0,0xff,0xa8,0x87,0x7d,0xfe,0xa4,0x83,0x78,0xfd,0xa6,0x84,0x79,0xfa,0x9e, 0x7e,0x73,0xf1,0x31,0x27,0x23,0xe3,0x02,0x01,0x01,0xcc,0x00,0x00,0x00,0xaa,0x00, 0x00,0x00,0x83,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x1c,0x00, 0x00,0x00,0x0d,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x16,0x00, 0x00,0x00,0x2c,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0xa1,0x00, 0x00,0x00,0xc5,0x0c,0x0b,0x0c,0xe0,0x54,0x4a,0x54,0xf1,0x5b,0x51,0x5c,0xf9,0x5b, 0x50,0x5c,0xfe,0x59,0x4f,0x5a,0xfe,0x5b,0x50,0x5c,0xff,0x58,0x4f,0x59,0xff,0x56, 0x4d,0x57,0xff,0x56,0x4d,0x57,0xff,0x52,0x4a,0x52,0xff,0x41,0x41,0x42,0xff,0x2f, 0x36,0x30,0xff,0x30,0x36,0x30,0xff,0x2f,0x36,0x30,0xff,0x2d,0x34,0x2e,0xff,0x2d, 0x34,0x2e,0xff,0x2e,0x35,0x2f,0xff,0x2b,0x31,0x2b,0xff,0x1c,0x21,0x1c,0xff,0x20, 0x24,0x21,0xff,0x2b,0x29,0x2a,0xff,0x22,0x25,0x23,0xff,0x1c,0x21,0x1d,0xff,0x1d, 0x22,0x1e,0xff,0x1c,0x21,0x1d,0xff,0x20,0x25,0x20,0xff,0x37,0x3a,0x37,0xff,0x50, 0x4b,0x51,0xff,0x4f,0x49,0x4f,0xff,0x51,0x4a,0x52,0xff,0x5f,0x53,0x5f,0xff,0x68, 0x58,0x68,0xff,0x56,0x4d,0x56,0xff,0x42,0x41,0x42,0xff,0x57,0x4d,0x54,0xff,0x72, 0x5d,0x71,0xff,0x59,0x4f,0x5a,0xff,0x5e,0x51,0x5f,0xff,0x60,0x52,0x5f,0xff,0x5f, 0x52,0x5f,0xff,0x5d,0x51,0x5e,0xff,0x5c,0x50,0x5d,0xff,0x50,0x49,0x51,0xff,0x3f, 0x3f,0x40,0xff,0x3c,0x3d,0x3d,0xff,0x3b,0x3d,0x3c,0xff,0x39,0x3c,0x3a,0xff,0x36, 0x3a,0x37,0xff,0x35,0x39,0x35,0xff,0x34,0x39,0x35,0xff,0x34,0x38,0x34,0xff,0x4a, 0x46,0x4a,0xff,0x54,0x4d,0x55,0xff,0x2e,0x32,0x2e,0xff,0x31,0x2f,0x31,0xff,0x46, 0x3b,0x46,0xff,0x2e,0x2c,0x2e,0xff,0x23,0x26,0x24,0xfe,0x26,0x28,0x27,0xfe,0x14, 0x15,0x14,0xfe,0x00,0x00,0x00,0xfe,0x25,0x23,0x25,0xff,0x4f,0x49,0x50,0xff,0x50, 0x4a,0x51,0xff,0x4f,0x49,0x50,0xff,0x4f,0x49,0x50,0xff,0x4f,0x49,0x50,0xff,0x4f, 0x49,0x50,0xff,0x4f,0x49,0x50,0xff,0x51,0x4a,0x52,0xff,0x47,0x45,0x48,0xff,0x2f, 0x36,0x30,0xff,0x2e,0x35,0x2f,0xff,0x34,0x39,0x35,0xff,0x34,0x39,0x35,0xff,0x3e, 0x3f,0x3f,0xff,0x54,0x4b,0x55,0xff,0x5c,0x51,0x5e,0xff,0x5d,0x51,0x5d,0xff,0x5e, 0x52,0x5e,0xff,0x5f,0x53,0x60,0xff,0x5a,0x4f,0x5c,0xff,0x5a,0x4f,0x5a,0xff,0x5d, 0x51,0x5e,0xff,0x4f,0x49,0x50,0xff,0x3c,0x3e,0x3d,0xff,0x2e,0x33,0x2f,0xff,0x24, 0x27,0x24,0xff,0x21,0x24,0x21,0xff,0x20,0x23,0x20,0xff,0x19,0x1d,0x19,0xff,0x43, 0x3f,0x44,0xff,0x51,0x4b,0x52,0xff,0x4f,0x49,0x50,0xff,0x4f,0x49,0x50,0xff,0x4f, 0x49,0x50,0xff,0x4f,0x49,0x50,0xff,0x4f,0x49,0x50,0xff,0x51,0x4a,0x51,0xff,0x51, 0x4a,0x51,0xff,0x52,0x4b,0x52,0xff,0x53,0x4c,0x54,0xff,0x57,0x4e,0x57,0xff,0x59, 0x4f,0x59,0xff,0x5a,0x50,0x5c,0xff,0x5d,0x51,0x5d,0xff,0x5d,0x51,0x5d,0xff,0x5e, 0x52,0x5f,0xff,0x5d,0x51,0x5f,0xff,0x5d,0x51,0x5d,0xff,0x60,0x52,0x5e,0xff,0x58, 0x4e,0x59,0xff,0x52,0x4a,0x52,0xff,0x44,0x42,0x45,0xff,0x25,0x2e,0x26,0xff,0x0e, 0x19,0x11,0xff,0x11,0x19,0x13,0xff,0x12,0x14,0x12,0xff,0x02,0x02,0x02,0xff,0x00, 0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x42,0x3a,0x42,0xff,0x59,0x4f,0x5a,0xff,0x5b, 0x50,0x5c,0xff,0x5d,0x51,0x5d,0xff,0x5f,0x53,0x60,0xff,0x5b,0x50,0x5c,0xff,0x5d, 0x51,0x5d,0xff,0x5d,0x51,0x5d,0xff,0x5b,0x50,0x5c,0xff,0x5b,0x50,0x5c,0xff,0x48, 0x45,0x49,0xff,0x1f,0x2a,0x20,0xff,0x42,0x40,0x42,0xff,0x55,0x4c,0x56,0xff,0x33, 0x33,0x33,0xff,0x4f,0x49,0x50,0xff,0x51,0x4a,0x51,0xff,0x4f,0x49,0x50,0xff,0x4f, 0x49,0x50,0xff,0x4f,0x49,0x50,0xff,0x4f,0x49,0x50,0xfe,0x51,0x4a,0x51,0xfc,0x4f, 0x49,0x50,0xf7,0x4a,0x44,0x4a,0xea,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0xb0,0x00, 0x00,0x00,0x86,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x2e,0x00, 0x00,0x00,0x32,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0xa3,0x07, 0x06,0x07,0xcd,0x52,0x42,0x51,0xe8,0x7f,0x65,0x7b,0xf6,0x7e,0x64,0x77,0xfc,0x70, 0x5d,0x6f,0xfe,0x65,0x56,0x65,0xff,0x64,0x54,0x64,0xff,0x44,0x42,0x44,0xff,0x31, 0x36,0x32,0xff,0x43,0x42,0x44,0xff,0x42,0x41,0x43,0xff,0x25,0x2f,0x26,0xff,0x68, 0x56,0x62,0xff,0x88,0x65,0x6a,0xff,0x5e,0x52,0x61,0xff,0x5d,0x51,0x5d,0xff,0x57, 0x4d,0x57,0xff,0x53,0x4c,0x54,0xff,0x53,0x4b,0x52,0xff,0x50,0x4a,0x51,0xff,0x4f, 0x49,0x50,0xff,0x4f,0x49,0x50,0xff,0x4f,0x49,0x50,0xff,0x4f,0x49,0x4f,0xff,0x4f, 0x49,0x4f,0xff,0x4c,0x48,0x4d,0xff,0x4f,0x4a,0x4f,0xff,0x3f,0x3a,0x3f,0xff,0x06, 0x04,0x05,0xfe,0x05,0x06,0x05,0xfe,0x29,0x29,0x29,0xfe,0x36,0x2f,0x36,0xfe,0x35, 0x2d,0x35,0xfe,0x31,0x2b,0x31,0xff,0x26,0x25,0x27,0xff,0x20,0x20,0x20,0xff,0x27, 0x25,0x27,0xff,0x36,0x2d,0x36,0xff,0x34,0x2b,0x33,0xff,0x32,0x29,0x31,0xff,0x4b, 0x3e,0x4a,0xff,0x71,0x5e,0x70,0xff,0x6e,0x5b,0x6d,0xff,0x6e,0x5a,0x6d,0xff,0x60, 0x53,0x60,0xff,0x52,0x4b,0x53,0xff,0x56,0x4d,0x56,0xff,0x58,0x4e,0x58,0xff,0x56, 0x4d,0x57,0xff,0x56,0x4d,0x57,0xff,0x54,0x4c,0x55,0xff,0x52,0x4b,0x52,0xff,0x50, 0x4a,0x51,0xff,0x4e,0x49,0x4f,0xff,0x4d,0x48,0x4d,0xff,0x4b,0x47,0x4c,0xff,0x4b, 0x47,0x4c,0xff,0x3b,0x3d,0x3c,0xff,0x38,0x3b,0x39,0xff,0x4d,0x47,0x4d,0xff,0x49, 0x45,0x49,0xff,0x46,0x43,0x46,0xff,0x47,0x44,0x47,0xff,0x47,0x44,0x47,0xff,0x47, 0x44,0x47,0xff,0x47,0x44,0x47,0xfe,0x46,0x43,0x45,0xfe,0x57,0x4f,0x58,0xfe,0x2c, 0x25,0x2c,0xfc,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0xf9,0x1d,0x17,0x1d,0xf9,0x36, 0x30,0x36,0xf9,0x42,0x39,0x42,0xfb,0x4b,0x3e,0x4b,0xfd,0x49,0x3c,0x48,0xfd,0x48, 0x3a,0x47,0xfe,0x48,0x3b,0x47,0xfe,0x46,0x3a,0x45,0xff,0x41,0x35,0x40,0xff,0x3f, 0x34,0x3e,0xff,0x40,0x33,0x3f,0xff,0x49,0x3a,0x46,0xff,0x49,0x3b,0x47,0xff,0x3c, 0x35,0x3b,0xff,0x3d,0x3c,0x3e,0xff,0x3e,0x3e,0x39,0xff,0x5a,0x4e,0x57,0xff,0x65, 0x56,0x65,0xff,0x51,0x4a,0x51,0xff,0x48,0x45,0x49,0xff,0x47,0x44,0x47,0xff,0x47, 0x44,0x47,0xff,0x46,0x44,0x47,0xff,0x42,0x42,0x43,0xff,0x3d,0x3e,0x3e,0xff,0x59, 0x4a,0x5b,0xff,0xb9,0xa3,0xa4,0xff,0xd1,0xbb,0xb3,0xff,0xb9,0x9d,0x95,0xff,0xb1, 0x93,0x89,0xff,0xb1,0x94,0x89,0xff,0xb1,0x94,0x89,0xff,0xb1,0x94,0x89,0xff,0xb1, 0x94,0x89,0xff,0xb0,0x92,0x88,0xff,0xb0,0x92,0x88,0xff,0xb0,0x92,0x87,0xff,0xb0, 0x92,0x87,0xff,0xb0,0x91,0x87,0xff,0xb0,0x91,0x86,0xff,0xaf,0x90,0x86,0xff,0xae, 0x8f,0x84,0xff,0xae,0x8f,0x84,0xff,0xae,0x8f,0x84,0xff,0xad,0x8d,0x83,0xff,0xad, 0x8e,0x84,0xff,0xac,0x8d,0x83,0xff,0xac,0x8d,0x83,0xff,0xa9,0x8a,0x80,0xff,0xa9, 0x8a,0x7f,0xff,0xa8,0x88,0x7e,0xff,0xa8,0x88,0x7e,0xff,0xa6,0x86,0x7c,0xff,0xaa, 0x8a,0x7e,0xff,0x89,0x68,0x6e,0xff,0xbe,0xa7,0xa0,0xff,0xa8,0x87,0x7d,0xff,0xa4, 0x83,0x78,0xfe,0xa3,0x82,0x77,0xfc,0xa5,0x84,0x79,0xf9,0x96,0x78,0x6e,0xef,0x17, 0x12,0x11,0xdd,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x70,0x00, 0x00,0x00,0x47,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x06,0x00, 0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00, 0x00,0x00,0x06,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x3a,0x00, 0x00,0x00,0x5d,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0xae,0x02,0x02,0x02,0xcf,0x26, 0x22,0x27,0xe7,0x5e,0x53,0x5f,0xf4,0x5a,0x4f,0x5b,0xfb,0x5b,0x50,0x5c,0xfe,0x59, 0x4f,0x59,0xff,0x59,0x4f,0x5a,0xff,0x58,0x4e,0x58,0xff,0x56,0x4d,0x56,0xff,0x54, 0x4c,0x54,0xff,0x4d,0x47,0x4d,0xff,0x30,0x37,0x32,0xff,0x30,0x36,0x31,0xff,0x2e, 0x35,0x2f,0xff,0x2d,0x34,0x2e,0xff,0x2d,0x34,0x2e,0xff,0x2d,0x34,0x2e,0xff,0x2c, 0x33,0x2d,0xff,0x24,0x2a,0x24,0xff,0x1a,0x20,0x1b,0xff,0x26,0x27,0x25,0xff,0x3c, 0x34,0x3a,0xff,0x19,0x20,0x1a,0xff,0x1d,0x22,0x1e,0xff,0x1d,0x22,0x1e,0xff,0x1e, 0x23,0x1f,0xff,0x2d,0x30,0x2d,0xff,0x44,0x43,0x44,0xff,0x4e,0x48,0x4f,0xff,0x51, 0x4a,0x52,0xff,0x54,0x4c,0x54,0xff,0x41,0x40,0x42,0xff,0x39,0x3c,0x3b,0xff,0x57, 0x4d,0x53,0xff,0x87,0x68,0x7d,0xff,0x65,0x55,0x65,0xff,0x56,0x4d,0x56,0xff,0x59, 0x4f,0x5a,0xff,0x58,0x4f,0x5a,0xff,0x58,0x4f,0x5a,0xff,0x59,0x4f,0x5a,0xff,0x5a, 0x50,0x5b,0xff,0x55,0x4d,0x55,0xff,0x45,0x43,0x45,0xff,0x3b,0x3d,0x3c,0xff,0x3a, 0x3d,0x3b,0xff,0x36,0x3a,0x37,0xff,0x33,0x38,0x34,0xff,0x32,0x38,0x33,0xff,0x30, 0x36,0x31,0xff,0x31,0x37,0x32,0xff,0x37,0x3b,0x38,0xff,0x56,0x4e,0x56,0xff,0x42, 0x3f,0x42,0xff,0x2e,0x2d,0x2e,0xff,0x53,0x40,0x51,0xff,0x38,0x32,0x38,0xfe,0x23, 0x26,0x24,0xfc,0x14,0x15,0x15,0xfc,0x01,0x01,0x01,0xfc,0x00,0x00,0x00,0xfc,0x19, 0x19,0x1a,0xfe,0x47,0x43,0x48,0xfe,0x50,0x4a,0x51,0xff,0x4d,0x48,0x4e,0xff,0x4d, 0x48,0x4e,0xff,0x4d,0x48,0x4e,0xff,0x4d,0x48,0x4e,0xff,0x4d,0x48,0x4e,0xff,0x4f, 0x4a,0x50,0xff,0x49,0x46,0x4b,0xff,0x26,0x30,0x27,0xff,0x39,0x3b,0x39,0xff,0x54, 0x4c,0x55,0xff,0x54,0x4c,0x55,0xff,0x57,0x4d,0x57,0xff,0x58,0x4e,0x58,0xff,0x58, 0x4f,0x59,0xff,0x5a,0x50,0x5b,0xff,0x5c,0x51,0x5d,0xff,0x5f,0x52,0x60,0xff,0x57, 0x4e,0x58,0xff,0x54,0x4b,0x53,0xff,0x59,0x4f,0x5a,0xff,0x54,0x4d,0x55,0xff,0x3f, 0x40,0x3f,0xff,0x35,0x3a,0x35,0xff,0x26,0x29,0x26,0xff,0x1f,0x23,0x1f,0xff,0x21, 0x25,0x21,0xff,0x19,0x1d,0x19,0xff,0x3a,0x36,0x3b,0xff,0x4e,0x48,0x50,0xff,0x4f, 0x49,0x50,0xff,0x4e,0x49,0x4f,0xff,0x4e,0x49,0x4f,0xff,0x4f,0x49,0x50,0xff,0x4f, 0x49,0x50,0xff,0x51,0x4a,0x51,0xff,0x51,0x4a,0x51,0xff,0x52,0x4b,0x52,0xff,0x54, 0x4c,0x54,0xff,0x55,0x4d,0x56,0xff,0x58,0x4f,0x59,0xff,0x5b,0x50,0x5c,0xff,0x5b, 0x50,0x5c,0xff,0x5d,0x51,0x5d,0xff,0x5e,0x52,0x5f,0xff,0x5e,0x52,0x5f,0xff,0x5d, 0x51,0x5d,0xff,0x5d,0x51,0x5d,0xff,0x60,0x54,0x61,0xff,0x21,0x2a,0x22,0xff,0x30, 0x36,0x30,0xff,0x17,0x23,0x1a,0xff,0x0d,0x18,0x11,0xff,0x19,0x22,0x1a,0xff,0x0f, 0x11,0x0f,0xff,0x01,0x01,0x01,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x39, 0x33,0x3a,0xff,0x53,0x4c,0x54,0xff,0x5a,0x50,0x5b,0xff,0x5f,0x52,0x5f,0xff,0x5a, 0x4f,0x5b,0xff,0x55,0x4d,0x56,0xff,0x5e,0x52,0x5f,0xff,0x5d,0x51,0x5d,0xff,0x5c, 0x50,0x5c,0xff,0x59,0x4f,0x5a,0xff,0x68,0x57,0x67,0xff,0x25,0x2b,0x27,0xff,0x27, 0x30,0x27,0xff,0x4c,0x47,0x4c,0xff,0x25,0x2a,0x25,0xff,0x50,0x4a,0x51,0xff,0x4f, 0x49,0x50,0xff,0x4f,0x49,0x50,0xff,0x4f,0x49,0x50,0xff,0x4f,0x49,0x50,0xff,0x4f, 0x49,0x50,0xff,0x4e,0x49,0x50,0xfd,0x4f,0x49,0x50,0xf9,0x48,0x43,0x49,0xf0,0x00, 0x00,0x00,0xde,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0x77,0x00, 0x00,0x00,0x54,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x4c,0x00, 0x00,0x00,0x73,0x00,0x00,0x00,0xa0,0x05,0x04,0x05,0xca,0x43,0x36,0x41,0xe6,0x7e, 0x65,0x7b,0xf5,0x7d,0x63,0x77,0xfc,0x6c,0x5a,0x6b,0xfe,0x61,0x54,0x61,0xff,0x66, 0x56,0x66,0xff,0x6b,0x58,0x69,0xff,0x6a,0x58,0x69,0xff,0x61,0x55,0x62,0xff,0x45, 0x42,0x46,0xff,0x1d,0x28,0x1e,0xff,0x41,0x41,0x41,0xff,0x75,0x5f,0x74,0xff,0x5c, 0x51,0x5d,0xff,0x5a,0x4f,0x5b,0xff,0x55,0x4c,0x56,0xff,0x52,0x4b,0x52,0xff,0x50, 0x4a,0x51,0xff,0x4e,0x49,0x50,0xff,0x4d,0x48,0x4e,0xff,0x4d,0x48,0x4e,0xff,0x4d, 0x48,0x4e,0xff,0x4d,0x47,0x4d,0xff,0x4c,0x47,0x4c,0xff,0x4d,0x48,0x4e,0xff,0x4f, 0x4a,0x4f,0xff,0x3a,0x36,0x3a,0xfe,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,0xfc,0x09, 0x08,0x09,0xfc,0x2d,0x27,0x2d,0xfc,0x38,0x31,0x38,0xfd,0x31,0x2b,0x31,0xfe,0x1f, 0x21,0x20,0xfe,0x14,0x19,0x15,0xff,0x29,0x26,0x2a,0xff,0x34,0x2b,0x33,0xff,0x34, 0x2b,0x33,0xff,0x34,0x2b,0x33,0xff,0x4e,0x41,0x4d,0xff,0x70,0x5d,0x6f,0xff,0x6f, 0x5b,0x6e,0xff,0x6a,0x58,0x69,0xff,0x57,0x4d,0x57,0xff,0x53,0x4b,0x54,0xff,0x55, 0x4c,0x56,0xff,0x56,0x4d,0x57,0xff,0x56,0x4d,0x57,0xff,0x56,0x4d,0x57,0xff,0x54, 0x4c,0x55,0xff,0x52,0x4b,0x52,0xff,0x4e,0x49,0x50,0xff,0x4d,0x48,0x4e,0xff,0x4d, 0x48,0x4d,0xff,0x4b,0x47,0x4c,0xff,0x4b,0x47,0x4c,0xff,0x3b,0x3e,0x3c,0xff,0x36, 0x3a,0x36,0xff,0x49,0x45,0x4a,0xff,0x4d,0x48,0x4e,0xff,0x4a,0x46,0x49,0xff,0x47, 0x44,0x47,0xff,0x46,0x43,0x46,0xff,0x46,0x43,0x46,0xff,0x47,0x44,0x47,0xff,0x48, 0x46,0x48,0xfd,0x49,0x41,0x48,0xfa,0x1d,0x17,0x1c,0xf6,0x00,0x00,0x00,0xf2,0x00, 0x00,0x00,0xef,0x00,0x00,0x00,0xee,0x18,0x15,0x18,0xef,0x35,0x2c,0x35,0xf2,0x3a, 0x30,0x39,0xf6,0x46,0x3a,0x45,0xf8,0x4a,0x3d,0x49,0xfb,0x40,0x35,0x40,0xfd,0x3d, 0x32,0x3c,0xfe,0x3f,0x32,0x3e,0xff,0x3d,0x31,0x3c,0xff,0x3b,0x31,0x3a,0xff,0x39, 0x34,0x3a,0xff,0x2f,0x2e,0x30,0xff,0x2a,0x29,0x2a,0xff,0x4a,0x42,0x4d,0xff,0x76, 0x5a,0x61,0xff,0x81,0x63,0x74,0xff,0x5c,0x51,0x5d,0xff,0x49,0x45,0x4a,0xff,0x48, 0x45,0x4a,0xff,0x47,0x44,0x48,0xff,0x47,0x44,0x46,0xff,0x44,0x43,0x45,0xff,0x40, 0x41,0x41,0xff,0x46,0x44,0x47,0xff,0x55,0x4e,0x59,0xff,0x70,0x54,0x5c,0xff,0xc1, 0xaa,0xa4,0xff,0xc6,0xaf,0xa5,0xff,0xb2,0x96,0x8d,0xff,0xb0,0x93,0x8a,0xff,0xb1, 0x95,0x8b,0xff,0xb0,0x94,0x8a,0xff,0xb1,0x95,0x8b,0xff,0xb1,0x96,0x8c,0xff,0xb0, 0x95,0x8b,0xff,0xaf,0x92,0x88,0xff,0xaf,0x93,0x88,0xff,0xaf,0x91,0x87,0xff,0xaf, 0x92,0x88,0xff,0xaf,0x92,0x87,0xff,0xae,0x90,0x86,0xff,0xad,0x8f,0x84,0xff,0xad, 0x90,0x84,0xff,0xad,0x8e,0x84,0xff,0xac,0x8d,0x83,0xff,0xac,0x8d,0x83,0xff,0xaa, 0x8b,0x81,0xff,0xaa,0x8b,0x81,0xff,0xaa,0x8b,0x81,0xff,0xa9,0x8a,0x7f,0xff,0xa8, 0x88,0x7e,0xff,0xa7,0x87,0x7d,0xff,0xa7,0x88,0x7d,0xff,0x97,0x72,0x68,0xff,0xb1, 0x93,0x8a,0xff,0xa6,0x86,0x7c,0xff,0xa4,0x83,0x78,0xff,0xa3,0x82,0x77,0xfe,0xa2, 0x81,0x76,0xfc,0xa6,0x84,0x79,0xf6,0x71,0x5a,0x52,0xea,0x05,0x04,0x04,0xd3,0x00, 0x00,0x00,0xb0,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x2f,0x00, 0x00,0x00,0x17,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x08,0x00, 0x00,0x00,0x14,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x6b,0x00, 0x00,0x00,0x95,0x00,0x00,0x00,0xbb,0x08,0x07,0x08,0xd9,0x46,0x3e,0x46,0xec,0x5e, 0x53,0x60,0xf8,0x5b,0x50,0x5c,0xfd,0x59,0x4e,0x59,0xfe,0x58,0x4e,0x58,0xff,0x56, 0x4d,0x57,0xff,0x56,0x4d,0x57,0xff,0x53,0x4b,0x54,0xff,0x50,0x49,0x50,0xff,0x3c, 0x3d,0x3b,0xff,0x31,0x37,0x30,0xff,0x2e,0x35,0x2e,0xff,0x2d,0x34,0x2d,0xff,0x2d, 0x34,0x2d,0xff,0x2d,0x34,0x2d,0xff,0x2e,0x35,0x2f,0xff,0x2b,0x31,0x2b,0xff,0x1b, 0x21,0x1b,0xff,0x1b,0x22,0x1b,0xff,0x1b,0x21,0x1b,0xff,0x1d,0x22,0x1e,0xff,0x1d, 0x22,0x1e,0xff,0x1e,0x23,0x1f,0xff,0x1a,0x1e,0x1b,0xff,0x15,0x18,0x16,0xff,0x34, 0x37,0x35,0xff,0x4f,0x4a,0x50,0xff,0x4a,0x46,0x4a,0xff,0x41,0x40,0x41,0xff,0x4c, 0x46,0x4b,0xff,0x5b,0x4f,0x5a,0xff,0x60,0x53,0x60,0xff,0x66,0x57,0x66,0xff,0x52, 0x4b,0x53,0xff,0x58,0x4f,0x59,0xff,0x59,0x4f,0x59,0xff,0x59,0x4f,0x5a,0xff,0x59, 0x4f,0x5a,0xff,0x59,0x4f,0x5a,0xff,0x59,0x4f,0x59,0xff,0x59,0x4e,0x58,0xff,0x4b, 0x46,0x4b,0xff,0x39,0x3c,0x39,0xff,0x39,0x3b,0x39,0xff,0x35,0x39,0x36,0xff,0x34, 0x39,0x35,0xff,0x33,0x39,0x34,0xff,0x32,0x38,0x33,0xff,0x33,0x38,0x33,0xff,0x35, 0x39,0x35,0xff,0x36,0x3a,0x36,0xff,0x23,0x2d,0x23,0xff,0x30,0x2f,0x30,0xfe,0x50, 0x3f,0x50,0xfc,0x35,0x31,0x35,0xfa,0x13,0x16,0x13,0xf7,0x03,0x03,0x03,0xf5,0x00, 0x00,0x00,0xf5,0x00,0x00,0x00,0xf6,0x0d,0x0d,0x0d,0xf9,0x3b,0x38,0x3c,0xfc,0x50, 0x4b,0x51,0xfe,0x4c,0x47,0x4c,0xff,0x4d,0x48,0x4d,0xff,0x4d,0x48,0x4d,0xff,0x4c, 0x47,0x4c,0xff,0x4d,0x48,0x4d,0xff,0x4c,0x47,0x4c,0xff,0x51,0x4a,0x52,0xff,0x2b, 0x33,0x2c,0xff,0x4c,0x45,0x4c,0xff,0x5f,0x52,0x5f,0xff,0x4e,0x49,0x4f,0xff,0x53, 0x4b,0x52,0xff,0x56,0x4d,0x56,0xff,0x57,0x4d,0x57,0xff,0x59,0x4f,0x5b,0xff,0x5a, 0x50,0x5b,0xff,0x61,0x53,0x62,0xff,0x3c,0x3e,0x3c,0xff,0x4b,0x47,0x4c,0xff,0x5d, 0x51,0x5d,0xff,0x59,0x4f,0x59,0xff,0x41,0x41,0x41,0xff,0x36,0x3b,0x37,0xff,0x27, 0x2b,0x28,0xff,0x20,0x23,0x20,0xff,0x20,0x24,0x20,0xff,0x1d,0x21,0x1d,0xff,0x27, 0x28,0x27,0xff,0x46,0x42,0x46,0xff,0x4e,0x49,0x4e,0xff,0x4e,0x48,0x4f,0xff,0x4c, 0x47,0x4d,0xff,0x4d,0x48,0x4c,0xff,0x4e,0x48,0x4e,0xff,0x50,0x49,0x50,0xff,0x4e, 0x49,0x4f,0xff,0x51,0x4a,0x51,0xff,0x53,0x4b,0x53,0xff,0x54,0x4c,0x55,0xff,0x57, 0x4e,0x57,0xff,0x5a,0x4f,0x5a,0xff,0x5a,0x4f,0x5b,0xff,0x5b,0x50,0x5c,0xff,0x5e, 0x52,0x5e,0xff,0x5d,0x51,0x5e,0xff,0x5d,0x51,0x5d,0xff,0x5d,0x51,0x5d,0xff,0x62, 0x55,0x62,0xff,0x12,0x1d,0x15,0xff,0x3f,0x3e,0x45,0xff,0x55,0x4b,0x4e,0xff,0x3a, 0x3c,0x39,0xff,0x39,0x3d,0x39,0xff,0x0c,0x0d,0x0c,0xff,0x00,0x00,0x00,0xff,0x00, 0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x33,0x2e,0x33,0xff,0x3f,0x3f,0x40,0xff,0x58, 0x4f,0x5a,0xff,0x55,0x4d,0x55,0xff,0x4e,0x48,0x4e,0xff,0x51,0x4b,0x51,0xff,0x5d, 0x52,0x5e,0xff,0x5d,0x51,0x5d,0xff,0x5c,0x50,0x5c,0xff,0x59,0x4f,0x5a,0xff,0x57, 0x4d,0x57,0xff,0x5d,0x51,0x5e,0xff,0x40,0x40,0x40,0xff,0x4f,0x4a,0x50,0xff,0x18, 0x20,0x19,0xff,0x4b,0x45,0x4c,0xff,0x4e,0x49,0x4f,0xff,0x4e,0x49,0x50,0xff,0x4e, 0x49,0x4f,0xff,0x4e,0x49,0x4f,0xff,0x4e,0x49,0x4f,0xff,0x50,0x4a,0x51,0xfe,0x4d, 0x48,0x4f,0xfc,0x46,0x41,0x47,0xf6,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0xd5,0x00, 0x00,0x00,0xb8,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x52,0x00, 0x00,0x00,0x47,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x9e,0x03, 0x03,0x03,0xc7,0x32,0x28,0x31,0xe5,0x7e,0x66,0x7b,0xf4,0x79,0x61,0x76,0xfc,0x66, 0x56,0x65,0xfe,0x60,0x53,0x60,0xff,0x66,0x56,0x66,0xff,0x68,0x57,0x67,0xff,0x6a, 0x58,0x69,0xff,0x6c,0x58,0x6b,0xff,0x66,0x56,0x65,0xff,0x40,0x41,0x40,0xff,0x34, 0x39,0x34,0xff,0x65,0x56,0x68,0xff,0x5c,0x50,0x5c,0xff,0x58,0x4e,0x58,0xff,0x55, 0x4c,0x56,0xff,0x52,0x4a,0x52,0xff,0x4e,0x49,0x4f,0xff,0x4e,0x48,0x4f,0xff,0x4d, 0x48,0x4d,0xff,0x4b,0x46,0x4b,0xff,0x49,0x45,0x4a,0xff,0x4b,0x47,0x4b,0xff,0x4f, 0x49,0x4f,0xff,0x4f,0x49,0x4f,0xff,0x4e,0x48,0x4e,0xfd,0x33,0x30,0x33,0xfb,0x00, 0x00,0x00,0xf9,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0xf5,0x0d,0x0c,0x0d,0xf5,0x33, 0x2c,0x33,0xf8,0x30,0x2c,0x30,0xfb,0x14,0x1a,0x14,0xfd,0x18,0x1b,0x18,0xff,0x28, 0x24,0x28,0xff,0x30,0x28,0x30,0xff,0x32,0x2a,0x32,0xff,0x3a,0x31,0x3a,0xff,0x5a, 0x4a,0x59,0xff,0x70,0x5d,0x6f,0xff,0x70,0x5c,0x6f,0xff,0x66,0x56,0x65,0xff,0x53, 0x4b,0x54,0xff,0x54,0x4c,0x56,0xff,0x56,0x4d,0x57,0xff,0x56,0x4d,0x57,0xff,0x56, 0x4d,0x57,0xff,0x54,0x4c,0x55,0xff,0x53,0x4b,0x52,0xff,0x51,0x4a,0x51,0xff,0x4e, 0x48,0x4f,0xff,0x4d,0x48,0x4d,0xff,0x4b,0x46,0x4b,0xff,0x49,0x46,0x4b,0xff,0x48, 0x46,0x4a,0xff,0x4a,0x46,0x4a,0xff,0x3c,0x3d,0x3c,0xff,0x31,0x36,0x30,0xff,0x54, 0x4b,0x53,0xff,0x59,0x4f,0x59,0xff,0x43,0x42,0x44,0xff,0x45,0x43,0x46,0xff,0x46, 0x44,0x47,0xff,0x45,0x43,0x46,0xfd,0x4f,0x4b,0x50,0xfa,0x32,0x2d,0x33,0xf4,0x05, 0x04,0x05,0xea,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0xd7,0x00, 0x00,0x00,0xda,0x00,0x00,0x00,0xdf,0x03,0x03,0x03,0xe6,0x20,0x1a,0x20,0xed,0x3a, 0x30,0x3a,0xf3,0x3e,0x33,0x3d,0xf8,0x3e,0x34,0x3e,0xfa,0x46,0x3c,0x46,0xfd,0x41, 0x3b,0x41,0xff,0x2f,0x2f,0x30,0xff,0x32,0x2f,0x31,0xff,0x49,0x3c,0x47,0xff,0x51, 0x40,0x4e,0xff,0x52,0x42,0x4f,0xff,0x4d,0x3f,0x4c,0xff,0x64,0x52,0x63,0xff,0x57, 0x4e,0x56,0xff,0x48,0x45,0x4a,0xff,0x48,0x45,0x49,0xff,0x47,0x44,0x47,0xff,0x44, 0x42,0x45,0xff,0x41,0x41,0x42,0xff,0x3e,0x40,0x40,0xff,0x51,0x49,0x51,0xff,0x5d, 0x51,0x5c,0xff,0x56,0x4c,0x5b,0xff,0x7f,0x68,0x69,0xff,0xbd,0xa5,0x9b,0xff,0xb9, 0x9f,0x95,0xff,0xb0,0x94,0x8a,0xff,0xb1,0x95,0x8b,0xff,0xb0,0x94,0x8a,0xff,0xb1, 0x95,0x8b,0xff,0xb1,0x95,0x8b,0xff,0xaf,0x93,0x89,0xff,0xaf,0x92,0x88,0xff,0xaf, 0x92,0x88,0xff,0xaf,0x91,0x87,0xff,0xaf,0x92,0x88,0xff,0xaf,0x91,0x87,0xff,0xae, 0x90,0x86,0xff,0xae,0x90,0x85,0xff,0xad,0x8f,0x84,0xff,0xad,0x8f,0x84,0xff,0xac, 0x8e,0x83,0xff,0xac,0x8e,0x83,0xff,0xab,0x8c,0x82,0xff,0xaa,0x8b,0x81,0xff,0xaa, 0x8b,0x81,0xff,0xaa,0x8b,0x81,0xff,0xa8,0x89,0x7e,0xff,0xa7,0x87,0x7d,0xff,0xaa, 0x8b,0x80,0xff,0x90,0x69,0x67,0xff,0xa9,0x88,0x7f,0xff,0xa9,0x88,0x7e,0xff,0xa5, 0x84,0x7a,0xff,0xa5,0x84,0x7a,0xfe,0xa2,0x81,0x76,0xfd,0xa2,0x81,0x76,0xfa,0xa7, 0x84,0x7a,0xef,0x23,0x1b,0x1a,0xdc,0x01,0x01,0x01,0xbb,0x00,0x00,0x00,0x8e,0x00, 0x00,0x00,0x60,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x0b,0x00, 0x00,0x00,0x03,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x02,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00, 0x00,0x00,0x2f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0xa2,0x01, 0x00,0x01,0xc7,0x16,0x13,0x16,0xe2,0x58,0x4f,0x59,0xf2,0x5a,0x4f,0x5a,0xfa,0x58, 0x4e,0x59,0xfe,0x58,0x4e,0x58,0xff,0x56,0x4d,0x57,0xff,0x57,0x4e,0x58,0xff,0x53, 0x4c,0x53,0xff,0x51,0x4a,0x51,0xff,0x4b,0x46,0x4a,0xff,0x30,0x37,0x32,0xff,0x2e, 0x34,0x2f,0xff,0x2c,0x34,0x2d,0xff,0x2c,0x34,0x2c,0xff,0x2c,0x34,0x2c,0xff,0x2d, 0x34,0x2d,0xff,0x2a,0x33,0x2c,0xff,0x21,0x29,0x22,0xff,0x1b,0x21,0x1b,0xff,0x1c, 0x21,0x1d,0xff,0x1e,0x23,0x1e,0xfe,0x1e,0x23,0x1f,0xfe,0x1d,0x21,0x1e,0xfd,0x09, 0x0b,0x0a,0xfc,0x00,0x00,0x00,0xfc,0x1f,0x21,0x1f,0xfd,0x4a,0x49,0x4a,0xfe,0x47, 0x44,0x47,0xff,0x46,0x43,0x46,0xff,0x6d,0x5a,0x6c,0xff,0x64,0x55,0x63,0xff,0x4d, 0x48,0x4e,0xff,0x51,0x4a,0x52,0xff,0x56,0x4d,0x57,0xff,0x57,0x4d,0x59,0xff,0x58, 0x4e,0x5a,0xff,0x58,0x4f,0x5a,0xff,0x59,0x4f,0x59,0xff,0x5a,0x4f,0x5a,0xff,0x59, 0x4f,0x5a,0xff,0x59,0x4f,0x59,0xff,0x50,0x4a,0x51,0xff,0x3d,0x3f,0x3f,0xff,0x38, 0x3b,0x39,0xff,0x36,0x39,0x36,0xff,0x35,0x39,0x36,0xff,0x36,0x3a,0x37,0xff,0x35, 0x39,0x35,0xff,0x33,0x38,0x33,0xff,0x34,0x39,0x35,0xff,0x37,0x3c,0x38,0xff,0x1f, 0x28,0x20,0xfd,0x1c,0x23,0x1e,0xfb,0x3d,0x38,0x3f,0xf9,0x23,0x1f,0x24,0xf3,0x01, 0x03,0x01,0xec,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,0xeb,0x00, 0x00,0x00,0xf1,0x2f,0x2c,0x2f,0xf7,0x52,0x4c,0x52,0xfc,0x4c,0x47,0x4c,0xfe,0x4c, 0x47,0x4c,0xff,0x4c,0x47,0x4c,0xff,0x4c,0x47,0x4c,0xff,0x4c,0x47,0x4c,0xff,0x4c, 0x47,0x4c,0xff,0x4f,0x49,0x4f,0xff,0x33,0x38,0x33,0xff,0x52,0x4a,0x52,0xff,0x5d, 0x51,0x5e,0xff,0x4e,0x48,0x4f,0xff,0x52,0x4b,0x52,0xff,0x54,0x4c,0x54,0xff,0x55, 0x4c,0x56,0xff,0x57,0x4e,0x58,0xff,0x5a,0x50,0x5b,0xff,0x56,0x4d,0x57,0xff,0x43, 0x42,0x45,0xff,0x50,0x4a,0x52,0xff,0x5a,0x4f,0x5b,0xff,0x5a,0x50,0x5b,0xff,0x46, 0x44,0x46,0xff,0x36,0x3b,0x36,0xff,0x27,0x2a,0x27,0xff,0x1f,0x23,0x1f,0xff,0x20, 0x24,0x20,0xff,0x1f,0x23,0x1f,0xff,0x20,0x22,0x20,0xff,0x42,0x3f,0x42,0xff,0x4d, 0x48,0x4d,0xff,0x4e,0x48,0x4f,0xff,0x4d,0x47,0x4d,0xff,0x4c,0x47,0x4c,0xff,0x4c, 0x47,0x4c,0xff,0x4c,0x47,0x4d,0xff,0x4d,0x48,0x4e,0xff,0x4e,0x49,0x4f,0xff,0x50, 0x4a,0x51,0xff,0x52,0x4b,0x52,0xff,0x55,0x4d,0x55,0xff,0x56,0x4d,0x57,0xff,0x58, 0x4e,0x58,0xff,0x59,0x4f,0x59,0xff,0x5d,0x51,0x5d,0xff,0x59,0x4f,0x5a,0xff,0x5a, 0x50,0x5b,0xff,0x5b,0x51,0x5c,0xff,0x55,0x4d,0x55,0xff,0x00,0x09,0x03,0xff,0x68, 0x58,0x59,0xff,0x88,0x68,0x78,0xff,0x3f,0x3f,0x3d,0xff,0x33,0x38,0x33,0xff,0x05, 0x05,0x05,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x2c, 0x26,0x2c,0xff,0x46,0x43,0x46,0xff,0x52,0x4b,0x53,0xff,0x4b,0x47,0x4d,0xff,0x57, 0x4d,0x58,0xff,0x5c,0x51,0x5d,0xff,0x5b,0x50,0x5c,0xff,0x5b,0x50,0x5c,0xff,0x59, 0x4f,0x5a,0xff,0x59,0x4f,0x5a,0xff,0x55,0x4d,0x56,0xff,0x55,0x4c,0x56,0xff,0x57, 0x4e,0x58,0xff,0x58,0x4e,0x58,0xff,0x26,0x27,0x26,0xff,0x42,0x3d,0x43,0xff,0x4d, 0x48,0x4e,0xff,0x4c,0x48,0x4d,0xff,0x4d,0x48,0x4e,0xff,0x4d,0x48,0x4e,0xff,0x4d, 0x48,0x4e,0xff,0x5d,0x54,0x5a,0xfe,0x51,0x4b,0x51,0xfd,0x53,0x4c,0x52,0xfa,0x14, 0x11,0x11,0xf3,0x13,0x10,0x10,0xe5,0x04,0x03,0x03,0xcf,0x00,0x00,0x00,0xb0,0x00, 0x00,0x00,0x8c,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x5b,0x00, 0x00,0x00,0x76,0x00,0x00,0x00,0x9c,0x01,0x01,0x01,0xc5,0x22,0x1c,0x21,0xe2,0x80, 0x67,0x7c,0xf3,0x79,0x61,0x76,0xfb,0x5e,0x52,0x5e,0xfe,0x61,0x53,0x61,0xff,0x64, 0x56,0x64,0xff,0x65,0x56,0x65,0xff,0x69,0x57,0x67,0xff,0x6a,0x58,0x69,0xff,0x65, 0x55,0x65,0xff,0x4c,0x47,0x4c,0xff,0x45,0x43,0x45,0xff,0x6f,0x5a,0x66,0xff,0x58, 0x4f,0x5a,0xff,0x56,0x4d,0x57,0xff,0x54,0x4c,0x55,0xff,0x51,0x4a,0x51,0xff,0x4c, 0x47,0x4d,0xff,0x48,0x45,0x4a,0xff,0x44,0x43,0x44,0xff,0x4b,0x46,0x4c,0xff,0x44, 0x42,0x45,0xff,0x37,0x3b,0x39,0xff,0x37,0x3a,0x37,0xff,0x43,0x42,0x43,0xfe,0x4d, 0x47,0x4d,0xfb,0x2a,0x26,0x2a,0xf7,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,0xeb,0x00, 0x00,0x00,0xe7,0x00,0x00,0x00,0xe9,0x14,0x11,0x14,0xee,0x30,0x2c,0x30,0xf4,0x18, 0x21,0x19,0xf9,0x1e,0x22,0x1f,0xfc,0x2c,0x28,0x2c,0xff,0x29,0x26,0x2a,0xff,0x2c, 0x26,0x2d,0xff,0x45,0x39,0x45,0xff,0x6d,0x5a,0x6c,0xff,0x6e,0x5b,0x6d,0xff,0x6f, 0x5b,0x6e,0xff,0x62,0x54,0x63,0xff,0x51,0x4b,0x52,0xff,0x55,0x4c,0x56,0xff,0x56, 0x4d,0x57,0xff,0x56,0x4d,0x57,0xff,0x54,0x4d,0x55,0xff,0x55,0x4d,0x56,0xff,0x54, 0x4c,0x54,0xff,0x4f,0x49,0x4f,0xff,0x4e,0x49,0x4e,0xff,0x4c,0x48,0x4c,0xff,0x4b, 0x47,0x4c,0xff,0x48,0x45,0x4a,0xff,0x47,0x45,0x48,0xff,0x48,0x45,0x48,0xff,0x41, 0x41,0x42,0xff,0x2c,0x34,0x2d,0xff,0x41,0x40,0x42,0xff,0x54,0x4c,0x55,0xff,0x43, 0x42,0x44,0xff,0x45,0x43,0x46,0xff,0x45,0x43,0x46,0xfe,0x45,0x43,0x46,0xfc,0x50, 0x49,0x50,0xf5,0x23,0x1f,0x23,0xea,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,0xc6,0x00, 0x00,0x00,0xb8,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xbc,0x00, 0x00,0x00,0xc8,0x00,0x00,0x00,0xd5,0x10,0x0c,0x10,0xe2,0x1e,0x17,0x1d,0xed,0x1d, 0x18,0x1c,0xf4,0x27,0x24,0x27,0xfa,0x3e,0x3e,0x3e,0xfd,0x49,0x41,0x49,0xff,0x54, 0x41,0x4e,0xff,0x53,0x42,0x4e,0xff,0x4d,0x3e,0x4b,0xff,0x49,0x3c,0x48,0xff,0x4d, 0x3e,0x4b,0xff,0x53,0x48,0x53,0xff,0x4d,0x48,0x4e,0xff,0x48,0x45,0x49,0xff,0x46, 0x44,0x47,0xff,0x44,0x43,0x44,0xff,0x43,0x42,0x44,0xff,0x41,0x41,0x42,0xff,0x45, 0x43,0x46,0xff,0x59,0x4f,0x5a,0xff,0x5e,0x52,0x5e,0xff,0x5d,0x51,0x5e,0xff,0x55, 0x4a,0x5a,0xff,0x8d,0x78,0x80,0xff,0xbe,0xa6,0xa1,0xff,0xb6,0x9a,0x91,0xff,0xb0, 0x93,0x89,0xff,0xb0,0x94,0x8a,0xff,0xb0,0x94,0x8a,0xff,0xb0,0x94,0x8a,0xff,0xaf, 0x93,0x89,0xff,0xaf,0x92,0x88,0xff,0xb0,0x93,0x89,0xff,0xaf,0x92,0x88,0xff,0xaf, 0x91,0x87,0xff,0xaf,0x91,0x87,0xff,0xaf,0x91,0x87,0xff,0xae,0x90,0x86,0xff,0xad, 0x8f,0x85,0xff,0xae,0x90,0x85,0xff,0xad,0x8e,0x84,0xff,0xb1,0x92,0x85,0xff,0xb0, 0x91,0x85,0xff,0xaf,0x90,0x85,0xff,0xab,0x8d,0x83,0xff,0xad,0x8e,0x83,0xff,0xaf, 0x8f,0x81,0xff,0xae,0x8d,0x80,0xff,0xa5,0x83,0x77,0xff,0x83,0x61,0x6e,0xff,0xa4, 0x84,0x7b,0xff,0xaa,0x8b,0x81,0xff,0xa5,0x85,0x7b,0xff,0xa5,0x84,0x7a,0xff,0xa3, 0x82,0x77,0xfe,0xa2,0x81,0x76,0xfb,0xa6,0x85,0x79,0xf2,0x59,0x48,0x41,0xe0,0x04, 0x03,0x03,0xc1,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x3b,0x00, 0x00,0x00,0x1c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x3a,0x00, 0x00,0x00,0x5e,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0xb3,0x04,0x04,0x04,0xd4,0x31, 0x2c,0x31,0xea,0x5d,0x52,0x5e,0xf6,0x56,0x4d,0x57,0xfc,0x57,0x4e,0x58,0xfe,0x56, 0x4d,0x57,0xff,0x56,0x4d,0x55,0xff,0x52,0x4b,0x52,0xff,0x51,0x4a,0x51,0xff,0x4d, 0x48,0x4e,0xff,0x3b,0x3d,0x3c,0xff,0x2d,0x34,0x2e,0xff,0x2d,0x34,0x2e,0xff,0x2d, 0x34,0x2d,0xff,0x2c,0x34,0x2c,0xff,0x2c,0x34,0x2c,0xff,0x2d,0x34,0x2d,0xff,0x27, 0x2f,0x28,0xff,0x1b,0x20,0x1b,0xff,0x17,0x1e,0x18,0xfd,0x18,0x1f,0x18,0xfb,0x1d, 0x22,0x1d,0xf9,0x0e,0x10,0x0e,0xf8,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0xf8,0x0c, 0x0d,0x0c,0xf9,0x38,0x3a,0x38,0xfb,0x49,0x46,0x49,0xfe,0x45,0x43,0x45,0xfe,0x4a, 0x46,0x4b,0xff,0x4b,0x46,0x4b,0xff,0x50,0x4a,0x50,0xff,0x50,0x4a,0x51,0xff,0x51, 0x4a,0x52,0xff,0x52,0x4a,0x53,0xff,0x50,0x49,0x52,0xff,0x55,0x4d,0x56,0xff,0x55, 0x4c,0x55,0xff,0x51,0x48,0x52,0xff,0x55,0x4c,0x56,0xff,0x55,0x4d,0x56,0xff,0x53, 0x4b,0x54,0xff,0x45,0x43,0x46,0xff,0x37,0x3b,0x37,0xff,0x38,0x3c,0x39,0xff,0x36, 0x3a,0x37,0xff,0x37,0x3b,0x38,0xff,0x35,0x3a,0x36,0xff,0x33,0x38,0x33,0xff,0x34, 0x39,0x35,0xff,0x36,0x3a,0x37,0xfe,0x29,0x31,0x2a,0xfb,0x20,0x2b,0x22,0xf8,0x29, 0x29,0x27,0xf0,0x11,0x0c,0x0f,0xe4,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,0xd0,0x00, 0x00,0x00,0xd0,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0xe4,0x20,0x1f,0x20,0xf0,0x4b, 0x47,0x4b,0xf8,0x4d,0x48,0x4d,0xfd,0x4c,0x47,0x4c,0xff,0x4c,0x47,0x4c,0xff,0x4b, 0x47,0x4c,0xff,0x4b,0x47,0x4c,0xff,0x4c,0x47,0x4c,0xff,0x4f,0x49,0x4f,0xff,0x37, 0x3b,0x37,0xff,0x4a,0x46,0x4a,0xff,0x55,0x4d,0x55,0xff,0x4c,0x48,0x4e,0xff,0x51, 0x4a,0x51,0xff,0x53,0x4c,0x54,0xff,0x54,0x4d,0x56,0xff,0x57,0x4d,0x57,0xff,0x5e, 0x52,0x5f,0xff,0x3f,0x40,0x40,0xff,0x56,0x4d,0x56,0xff,0x60,0x53,0x61,0xff,0x58, 0x4f,0x5a,0xff,0x5b,0x50,0x5b,0xff,0x4b,0x46,0x4b,0xff,0x38,0x3c,0x38,0xff,0x27, 0x2c,0x27,0xff,0x20,0x24,0x20,0xff,0x20,0x24,0x20,0xff,0x1b,0x20,0x1b,0xff,0x20, 0x23,0x20,0xff,0x43,0x40,0x43,0xff,0x4e,0x48,0x4e,0xff,0x4c,0x47,0x4c,0xff,0x4c, 0x47,0x4c,0xff,0x4c,0x47,0x4c,0xff,0x4c,0x47,0x4c,0xff,0x4c,0x47,0x4c,0xff,0x4d, 0x48,0x4d,0xff,0x4d,0x49,0x4f,0xff,0x50,0x4a,0x51,0xff,0x52,0x4b,0x52,0xff,0x53, 0x4c,0x54,0xff,0x55,0x4d,0x57,0xff,0x58,0x4e,0x58,0xff,0x59,0x4f,0x5a,0xff,0x5b, 0x50,0x5c,0xff,0x5a,0x50,0x5b,0xff,0x59,0x4f,0x5a,0xff,0x5f,0x53,0x61,0xff,0x27, 0x31,0x2a,0xff,0x45,0x40,0x36,0xff,0xa2,0x79,0x6c,0xff,0x55,0x4d,0x51,0xff,0x34, 0x3a,0x37,0xff,0x2b,0x2f,0x2b,0xff,0x04,0x04,0x04,0xff,0x00,0x00,0x00,0xff,0x00, 0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x21,0x1f,0x21,0xff,0x53,0x4a,0x54,0xff,0x4f, 0x49,0x4f,0xff,0x59,0x4f,0x5a,0xff,0x59,0x4f,0x5a,0xff,0x5a,0x4f,0x5b,0xff,0x59, 0x4f,0x5a,0xff,0x59,0x4f,0x5a,0xff,0x58,0x4e,0x59,0xff,0x59,0x4f,0x59,0xff,0x54, 0x4c,0x55,0xff,0x54,0x4c,0x54,0xff,0x4e,0x48,0x4f,0xff,0x54,0x4c,0x54,0xff,0x1e, 0x24,0x1e,0xff,0x4b,0x45,0x4c,0xff,0x4d,0x48,0x4d,0xff,0x4c,0x47,0x4c,0xff,0x4d, 0x48,0x4d,0xff,0x4d,0x48,0x4d,0xff,0x4d,0x48,0x4e,0xff,0x5d,0x54,0x59,0xff,0x64, 0x59,0x5e,0xff,0x67,0x5a,0x5f,0xfd,0x51,0x43,0x44,0xf8,0x42,0x37,0x38,0xf0,0x1a, 0x15,0x16,0xe0,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x82,0x00, 0x00,0x00,0x6a,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x9c,0x00, 0x00,0x00,0xc3,0x12,0x0f,0x12,0xe0,0x80,0x67,0x7d,0xf1,0x78,0x60,0x74,0xfa,0x58, 0x4e,0x58,0xfd,0x60,0x52,0x60,0xff,0x63,0x54,0x63,0xff,0x65,0x56,0x65,0xff,0x64, 0x55,0x64,0xff,0x65,0x55,0x65,0xff,0x60,0x53,0x60,0xff,0x4c,0x47,0x4d,0xff,0x71, 0x5c,0x6b,0xff,0x88,0x63,0x68,0xff,0x53,0x4c,0x57,0xff,0x54,0x4c,0x55,0xff,0x51, 0x4a,0x51,0xff,0x50,0x4a,0x51,0xff,0x49,0x46,0x4a,0xff,0x39,0x3c,0x3a,0xff,0x51, 0x4a,0x52,0xff,0x54,0x4c,0x54,0xff,0x4a,0x46,0x4a,0xff,0x3d,0x3e,0x3e,0xff,0x31, 0x37,0x32,0xff,0x26,0x2f,0x27,0xfd,0x26,0x2c,0x28,0xf8,0x1a,0x1b,0x1a,0xf1,0x00, 0x00,0x00,0xe6,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0xd5,0x02, 0x02,0x02,0xdd,0x18,0x19,0x18,0xe9,0x26,0x2c,0x26,0xf2,0x19,0x1c,0x19,0xf9,0x2f, 0x2b,0x30,0xfd,0x2c,0x28,0x2e,0xff,0x2e,0x28,0x2d,0xff,0x4d,0x40,0x4b,0xff,0x6f, 0x5c,0x6e,0xff,0x6c,0x59,0x6a,0xff,0x6c,0x59,0x6b,0xff,0x5f,0x52,0x5f,0xff,0x52, 0x4b,0x52,0xff,0x54,0x4c,0x56,0xff,0x55,0x4d,0x56,0xff,0x53,0x4b,0x55,0xff,0x54, 0x4c,0x55,0xff,0x4b,0x46,0x4b,0xff,0x46,0x44,0x47,0xff,0x51,0x4b,0x52,0xff,0x4d, 0x48,0x4e,0xff,0x4a,0x46,0x4b,0xff,0x49,0x45,0x4a,0xff,0x48,0x45,0x49,0xff,0x46, 0x43,0x46,0xff,0x45,0x43,0x46,0xff,0x48,0x45,0x49,0xff,0x3c,0x3d,0x3d,0xff,0x3e, 0x3f,0x3f,0xff,0x4a,0x46,0x4b,0xff,0x44,0x43,0x45,0xff,0x45,0x43,0x46,0xff,0x45, 0x43,0x46,0xfd,0x49,0x47,0x49,0xf8,0x3d,0x38,0x3d,0xef,0x12,0x0f,0x12,0xdc,0x00, 0x00,0x00,0xc2,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x84,0x00, 0x00,0x00,0x85,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0xb4,0x00, 0x00,0x00,0xc9,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0xf5,0x1a, 0x20,0x1b,0xfc,0x46,0x3e,0x44,0xfe,0x4e,0x3e,0x4d,0xff,0x4c,0x3e,0x4a,0xff,0x4b, 0x3d,0x49,0xff,0x48,0x3a,0x46,0xff,0x57,0x48,0x56,0xff,0x51,0x49,0x50,0xff,0x49, 0x45,0x49,0xff,0x48,0x44,0x48,0xff,0x46,0x43,0x46,0xff,0x43,0x42,0x45,0xff,0x43, 0x42,0x44,0xff,0x40,0x40,0x41,0xff,0x52,0x4b,0x52,0xff,0x5d,0x51,0x5d,0xff,0x5e, 0x52,0x5e,0xff,0x5e,0x52,0x5f,0xff,0x5d,0x52,0x5e,0xff,0x5b,0x4c,0x60,0xff,0xa0, 0x82,0x7f,0xff,0xbd,0xa1,0x98,0xff,0xb4,0x98,0x8f,0xff,0xb0,0x94,0x8a,0xff,0xb1, 0x95,0x8b,0xff,0xb0,0x94,0x8a,0xff,0xb1,0x95,0x8b,0xff,0xaf,0x93,0x89,0xff,0xaf, 0x93,0x89,0xff,0xaf,0x92,0x88,0xff,0xaf,0x91,0x87,0xff,0xaf,0x91,0x87,0xff,0xaf, 0x91,0x87,0xff,0xad,0x8f,0x83,0xff,0xae,0x90,0x86,0xff,0xae,0x90,0x85,0xff,0xb2, 0x94,0x87,0xff,0x9a,0x7b,0x7d,0xff,0x94,0x74,0x77,0xff,0x9a,0x77,0x73,0xff,0xa2, 0x80,0x76,0xff,0x9a,0x76,0x6f,0xff,0x89,0x6f,0x74,0xff,0x86,0x6f,0x76,0xff,0x8b, 0x66,0x64,0xff,0x93,0x74,0x79,0xff,0xa1,0x7f,0x75,0xff,0xa5,0x85,0x7a,0xff,0xa6, 0x86,0x7c,0xff,0xa5,0x84,0x7a,0xff,0xa3,0x82,0x77,0xfe,0xa3,0x82,0x77,0xfb,0xa5, 0x84,0x79,0xf1,0x71,0x58,0x50,0xe0,0x05,0x04,0x04,0xc0,0x00,0x00,0x00,0x93,0x00, 0x00,0x00,0x65,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x0c,0x00, 0x00,0x00,0x04,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x09,0x00, 0x00,0x00,0x14,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x71,0x00, 0x00,0x00,0x9d,0x00,0x00,0x00,0xc3,0x0b,0x0a,0x0b,0xdf,0x4f,0x46,0x4f,0xf1,0x57, 0x4e,0x58,0xf9,0x56,0x4d,0x57,0xfd,0x56,0x4d,0x57,0xfe,0x55,0x4c,0x56,0xff,0x54, 0x4c,0x54,0xff,0x52,0x4b,0x52,0xff,0x50,0x49,0x50,0xff,0x46,0x44,0x46,0xff,0x2d, 0x34,0x2e,0xff,0x2d,0x34,0x2e,0xff,0x2d,0x34,0x2e,0xff,0x2c,0x34,0x2c,0xff,0x2c, 0x34,0x2c,0xff,0x2b,0x33,0x2c,0xff,0x29,0x32,0x2a,0xfe,0x21,0x29,0x22,0xfd,0x14, 0x1b,0x15,0xfa,0x0e,0x15,0x0f,0xf5,0x0e,0x11,0x0e,0xef,0x00,0x00,0x00,0xeb,0x00, 0x00,0x00,0xea,0x00,0x00,0x00,0xeb,0x02,0x03,0x02,0xf1,0x20,0x22,0x20,0xf7,0x40, 0x43,0x41,0xfb,0x3a,0x3d,0x3b,0xfe,0x4d,0x47,0x4d,0xfe,0x4b,0x46,0x4b,0xff,0x4c, 0x47,0x4c,0xff,0x48,0x44,0x4a,0xff,0x48,0x42,0x49,0xff,0x4b,0x45,0x4b,0xff,0x43, 0x3e,0x43,0xff,0x4d,0x45,0x4d,0xff,0x52,0x4a,0x53,0xff,0x47,0x41,0x48,0xff,0x4c, 0x45,0x4d,0xff,0x55,0x4d,0x56,0xff,0x54,0x4c,0x54,0xff,0x4b,0x47,0x4c,0xff,0x39, 0x3c,0x3a,0xff,0x37,0x3b,0x37,0xff,0x37,0x3a,0x37,0xff,0x37,0x3a,0x38,0xff,0x37, 0x3a,0x37,0xff,0x35,0x39,0x35,0xff,0x35,0x3a,0x36,0xfe,0x34,0x39,0x35,0xfc,0x36, 0x3c,0x37,0xf6,0x25,0x29,0x26,0xee,0x0a,0x0a,0x09,0xe1,0x02,0x00,0x00,0xcd,0x00, 0x00,0x00,0xbb,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0xbd,0x00, 0x00,0x00,0xd2,0x11,0x12,0x11,0xe6,0x3d,0x3b,0x3d,0xf3,0x4e,0x49,0x4e,0xfa,0x4a, 0x46,0x4b,0xfd,0x4b,0x46,0x4b,0xff,0x4a,0x45,0x4b,0xff,0x4b,0x46,0x4b,0xff,0x4c, 0x47,0x4c,0xff,0x4c,0x47,0x4d,0xff,0x42,0x42,0x43,0xff,0x34,0x39,0x34,0xff,0x4f, 0x49,0x4f,0xff,0x52,0x4c,0x54,0xff,0x4b,0x47,0x4c,0xff,0x53,0x4b,0x53,0xff,0x53, 0x4b,0x54,0xff,0x58,0x4e,0x59,0xff,0x4e,0x49,0x4f,0xff,0x53,0x4b,0x53,0xff,0x61, 0x53,0x60,0xff,0x5c,0x51,0x5c,0xff,0x59,0x4f,0x5a,0xff,0x5a,0x4f,0x5b,0xff,0x4e, 0x49,0x4f,0xff,0x38,0x3c,0x39,0xff,0x29,0x2f,0x2a,0xff,0x20,0x25,0x21,0xff,0x20, 0x24,0x20,0xff,0x13,0x16,0x13,0xff,0x1b,0x20,0x1b,0xff,0x44,0x41,0x44,0xff,0x4d, 0x48,0x4e,0xff,0x4c,0x47,0x4c,0xff,0x4c,0x47,0x4c,0xff,0x4b,0x46,0x4b,0xff,0x4c, 0x47,0x4c,0xff,0x4c,0x47,0x4c,0xff,0x4d,0x48,0x4e,0xff,0x4d,0x48,0x4e,0xff,0x4f, 0x49,0x50,0xff,0x51,0x4a,0x50,0xff,0x53,0x4c,0x54,0xff,0x55,0x4d,0x57,0xff,0x58, 0x4e,0x58,0xff,0x59,0x4f,0x5a,0xff,0x58,0x4e,0x59,0xff,0x59,0x50,0x5a,0xff,0x5d, 0x52,0x5e,0xff,0x4f,0x49,0x4f,0xff,0x48,0x44,0x4b,0xff,0x9b,0x75,0x77,0xff,0x7a, 0x61,0x64,0xff,0x39,0x3c,0x38,0xff,0x33,0x38,0x33,0xff,0x22,0x26,0x22,0xfe,0x03, 0x03,0x03,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x1b, 0x18,0x1a,0xfe,0x51,0x49,0x52,0xff,0x4b,0x47,0x4c,0xff,0x56,0x4c,0x56,0xff,0x59, 0x4f,0x5a,0xff,0x5c,0x51,0x5d,0xff,0x59,0x4f,0x5a,0xff,0x59,0x4f,0x5a,0xff,0x59, 0x4f,0x59,0xff,0x59,0x4e,0x59,0xff,0x52,0x4b,0x53,0xff,0x51,0x4a,0x51,0xff,0x4d, 0x48,0x4e,0xff,0x4b,0x47,0x4b,0xff,0x13,0x1c,0x14,0xff,0x47,0x45,0x48,0xff,0x4c, 0x47,0x4c,0xff,0x4c,0x47,0x4c,0xff,0x4c,0x47,0x4c,0xff,0x4c,0x47,0x4c,0xff,0x4c, 0x47,0x4c,0xff,0x57,0x4e,0x54,0xff,0x63,0x58,0x5d,0xff,0x50,0x48,0x4d,0xfe,0x28, 0x21,0x22,0xfc,0x50,0x43,0x44,0xf6,0x31,0x28,0x29,0xec,0x04,0x03,0x03,0xd8,0x00, 0x00,0x00,0xbb,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x78,0x00, 0x00,0x00,0x84,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0xc1,0x0b,0x09,0x0b,0xde,0x76, 0x5f,0x73,0xf0,0x75,0x60,0x73,0xf9,0x56,0x4d,0x56,0xfe,0x5d,0x50,0x5d,0xff,0x5f, 0x52,0x5f,0xff,0x62,0x54,0x62,0xff,0x62,0x54,0x62,0xff,0x62,0x54,0x62,0xff,0x59, 0x4f,0x59,0xff,0x42,0x41,0x42,0xff,0x8e,0x6b,0x7d,0xff,0x87,0x65,0x62,0xff,0x4f, 0x49,0x54,0xff,0x52,0x4b,0x53,0xff,0x50,0x49,0x50,0xff,0x4d,0x48,0x4e,0xff,0x44, 0x42,0x45,0xff,0x4c,0x47,0x4d,0xff,0x71,0x5d,0x70,0xff,0x4b,0x47,0x4c,0xff,0x4a, 0x46,0x4a,0xff,0x4d,0x48,0x4d,0xff,0x4a,0x47,0x4b,0xfe,0x3a,0x3d,0x3c,0xfc,0x27, 0x2d,0x29,0xf6,0x0f,0x11,0x0e,0xec,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0xcb,0x00, 0x00,0x00,0xbf,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xca,0x06,0x06,0x06,0xdb,0x0f, 0x0f,0x0f,0xea,0x05,0x06,0x05,0xf5,0x12,0x13,0x13,0xfb,0x27,0x25,0x29,0xfd,0x3c, 0x33,0x3b,0xff,0x4f,0x42,0x4f,0xff,0x6e,0x5b,0x6d,0xff,0x6d,0x5a,0x6c,0xff,0x6a, 0x59,0x6a,0xff,0x57,0x4e,0x58,0xff,0x52,0x4a,0x52,0xff,0x53,0x4b,0x54,0xff,0x53, 0x4b,0x53,0xff,0x53,0x4b,0x54,0xff,0x56,0x4d,0x56,0xff,0x4b,0x47,0x4a,0xff,0x3c, 0x3e,0x3c,0xff,0x43,0x42,0x44,0xff,0x45,0x44,0x46,0xff,0x4b,0x46,0x4c,0xff,0x4a, 0x46,0x4b,0xff,0x49,0x46,0x4a,0xff,0x48,0x44,0x48,0xff,0x46,0x44,0x47,0xff,0x49, 0x45,0x4a,0xff,0x3a,0x3c,0x3b,0xff,0x3d,0x3e,0x3e,0xff,0x4b,0x47,0x4c,0xff,0x44, 0x43,0x45,0xff,0x45,0x43,0x46,0xfe,0x45,0x43,0x46,0xfb,0x4e,0x4a,0x4f,0xf5,0x29, 0x25,0x28,0xe7,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x88,0x00, 0x00,0x00,0x69,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x60,0x00, 0x00,0x00,0x73,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xca,0x00, 0x00,0x00,0xe0,0x00,0x00,0x00,0xf0,0x00,0x08,0x00,0xf9,0x38,0x32,0x38,0xfd,0x54, 0x43,0x51,0xfe,0x4b,0x3e,0x4a,0xff,0x4a,0x3c,0x48,0xff,0x4a,0x3b,0x47,0xff,0x55, 0x49,0x54,0xff,0x50,0x4a,0x51,0xff,0x49,0x46,0x4a,0xff,0x47,0x44,0x47,0xff,0x45, 0x43,0x46,0xff,0x44,0x42,0x45,0xff,0x42,0x42,0x43,0xff,0x46,0x44,0x47,0xff,0x59, 0x4e,0x59,0xff,0x5f,0x52,0x5f,0xff,0x5e,0x52,0x5f,0xff,0x5e,0x52,0x5f,0xff,0x5e, 0x52,0x5f,0xff,0x5a,0x50,0x5e,0xff,0x64,0x50,0x57,0xff,0xa8,0x8c,0x83,0xff,0xb8, 0x9d,0x93,0xff,0xb1,0x95,0x8c,0xff,0xb0,0x94,0x8a,0xff,0xb0,0x94,0x8a,0xff,0xb0, 0x94,0x8a,0xff,0xb1,0x95,0x8b,0xff,0xb0,0x93,0x89,0xff,0xb0,0x93,0x89,0xff,0xaf, 0x92,0x88,0xff,0xaf,0x91,0x87,0xff,0xaf,0x91,0x87,0xff,0xae,0x90,0x86,0xff,0xae, 0x90,0x86,0xff,0xb1,0x93,0x86,0xff,0x97,0x75,0x74,0xff,0x97,0x78,0x7a,0xff,0x9e, 0x81,0x82,0xff,0x9c,0x7b,0x76,0xff,0xa8,0x88,0x7f,0xff,0xae,0x90,0x8a,0xff,0x8f, 0x76,0x7a,0xff,0x8c,0x73,0x78,0xff,0x98,0x77,0x75,0xff,0xa9,0x89,0x7d,0xff,0xa8, 0x88,0x7e,0xff,0xa6,0x86,0x7c,0xff,0xa6,0x86,0x7c,0xff,0xa5,0x84,0x7a,0xfe,0xa4, 0x83,0x79,0xfc,0xa4,0x83,0x78,0xf9,0xac,0x89,0x7d,0xee,0x53,0x3d,0x3b,0xdb,0x03, 0x03,0x02,0xba,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x37,0x00, 0x00,0x00,0x1a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x03,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x20,0x00, 0x00,0x00,0x3a,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0xb2,0x02, 0x01,0x02,0xd2,0x1e,0x1b,0x1f,0xe9,0x5c,0x52,0x5d,0xf5,0x56,0x4d,0x57,0xfc,0x56, 0x4d,0x57,0xfe,0x56,0x4d,0x57,0xff,0x54,0x4c,0x55,0xff,0x53,0x4b,0x53,0xff,0x51, 0x4a,0x51,0xff,0x4c,0x47,0x4d,0xff,0x3a,0x3d,0x3b,0xff,0x2b,0x33,0x2c,0xff,0x2c, 0x34,0x2d,0xff,0x2c,0x34,0x2c,0xff,0x2b,0x33,0x2b,0xff,0x2b,0x34,0x2b,0xfe,0x29, 0x32,0x2a,0xfc,0x28,0x31,0x29,0xf9,0x1d,0x24,0x1e,0xf1,0x07,0x0a,0x07,0xe8,0x00, 0x00,0x00,0xdc,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xd5,0x00, 0x00,0x00,0xe0,0x0d,0x0e,0x0d,0xec,0x33,0x38,0x34,0xf5,0x3d,0x3f,0x3e,0xfb,0x4c, 0x47,0x4d,0xfe,0x4a,0x46,0x4b,0xfe,0x4b,0x46,0x4b,0xff,0x46,0x41,0x46,0xff,0x41, 0x3c,0x43,0xff,0x4c,0x45,0x4c,0xff,0x42,0x3d,0x42,0xff,0x41,0x3c,0x41,0xff,0x53, 0x4c,0x55,0xff,0x49,0x43,0x4a,0xff,0x43,0x3d,0x43,0xff,0x52,0x49,0x52,0xff,0x53, 0x4c,0x53,0xff,0x4f,0x49,0x4f,0xff,0x40,0x40,0x41,0xff,0x35,0x39,0x34,0xff,0x37, 0x3a,0x37,0xff,0x36,0x3a,0x37,0xff,0x37,0x3a,0x37,0xff,0x36,0x3a,0x37,0xfe,0x35, 0x39,0x36,0xfc,0x35,0x3a,0x35,0xf6,0x25,0x28,0x25,0xed,0x07,0x08,0x07,0xdd,0x00, 0x00,0x00,0xc8,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x89,0x00, 0x00,0x00,0x8c,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0xbe,0x05,0x05,0x05,0xda,0x31, 0x2f,0x31,0xed,0x4d,0x49,0x4e,0xf8,0x48,0x45,0x49,0xfd,0x48,0x45,0x4a,0xff,0x48, 0x45,0x49,0xff,0x49,0x46,0x49,0xff,0x48,0x45,0x4a,0xff,0x4a,0x46,0x4b,0xff,0x4a, 0x46,0x4b,0xff,0x34,0x38,0x34,0xff,0x30,0x35,0x30,0xff,0x5e,0x52,0x5d,0xff,0x5c, 0x51,0x5d,0xff,0x4d,0x48,0x4e,0xff,0x53,0x4b,0x53,0xff,0x4d,0x47,0x4d,0xff,0x4d, 0x48,0x4e,0xff,0x5f,0x53,0x60,0xff,0x5c,0x50,0x5c,0xff,0x57,0x4d,0x58,0xff,0x56, 0x4d,0x57,0xff,0x57,0x4d,0x57,0xff,0x53,0x4b,0x54,0xff,0x3a,0x3d,0x3b,0xff,0x31, 0x37,0x31,0xff,0x25,0x29,0x25,0xff,0x21,0x26,0x21,0xff,0x0a,0x0b,0x0a,0xff,0x10, 0x14,0x10,0xff,0x3c,0x3b,0x3d,0xff,0x49,0x46,0x4a,0xff,0x4a,0x46,0x4b,0xff,0x4b, 0x46,0x4b,0xff,0x4a,0x46,0x4b,0xff,0x49,0x46,0x4a,0xff,0x4a,0x46,0x4b,0xff,0x4c, 0x47,0x4d,0xff,0x4b,0x47,0x4c,0xff,0x4e,0x49,0x4f,0xff,0x50,0x49,0x50,0xff,0x51, 0x4b,0x51,0xff,0x54,0x4c,0x55,0xff,0x57,0x4d,0x57,0xff,0x58,0x4e,0x59,0xff,0x58, 0x4e,0x58,0xff,0x5c,0x51,0x5c,0xff,0x3d,0x3e,0x3e,0xff,0x4b,0x46,0x4b,0xff,0x61, 0x54,0x62,0xff,0x63,0x52,0x5d,0xff,0x52,0x4a,0x55,0xff,0x3c,0x3e,0x3e,0xfe,0x36, 0x3b,0x36,0xfe,0x1a,0x1d,0x1a,0xfd,0x02,0x02,0x02,0xfc,0x00,0x00,0x00,0xfc,0x00, 0x00,0x00,0xfc,0x00,0x00,0x00,0xfc,0x14,0x12,0x14,0xfd,0x4f,0x47,0x4f,0xfe,0x50, 0x4a,0x51,0xfe,0x54,0x4c,0x55,0xff,0x57,0x4e,0x58,0xff,0x55,0x4c,0x56,0xff,0x59, 0x4f,0x59,0xff,0x5a,0x50,0x5b,0xff,0x59,0x4f,0x5a,0xff,0x47,0x45,0x49,0xff,0x38, 0x3a,0x38,0xff,0x36,0x39,0x36,0xff,0x32,0x38,0x33,0xff,0x36,0x3a,0x36,0xff,0x0b, 0x16,0x0d,0xff,0x48,0x45,0x49,0xff,0x4c,0x47,0x4c,0xff,0x4b,0x46,0x4b,0xff,0x4b, 0x46,0x4b,0xff,0x4a,0x46,0x4b,0xff,0x51,0x4a,0x4f,0xff,0x60,0x56,0x5b,0xff,0x50, 0x4a,0x4f,0xff,0x3e,0x3b,0x3f,0xff,0x01,0x00,0x00,0xfe,0x44,0x38,0x39,0xfb,0x44, 0x38,0x39,0xf3,0x2e,0x26,0x27,0xe5,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xb5,0x00, 0x00,0x00,0x9f,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0xac,0x00, 0x00,0x00,0xc7,0x09,0x08,0x09,0xe0,0x66,0x53,0x63,0xf1,0x75,0x5f,0x72,0xf9,0x55, 0x4c,0x55,0xfd,0x59,0x4f,0x5b,0xfe,0x5c,0x50,0x5c,0xff,0x5f,0x52,0x60,0xff,0x61, 0x53,0x61,0xff,0x60,0x53,0x60,0xff,0x4b,0x47,0x4c,0xff,0x30,0x36,0x30,0xff,0x76, 0x5e,0x6d,0xff,0x86,0x67,0x6f,0xff,0x4f,0x49,0x52,0xff,0x52,0x4b,0x52,0xff,0x4d, 0x48,0x4d,0xff,0x3e,0x3f,0x3e,0xff,0x4d,0x48,0x4f,0xff,0x72,0x5d,0x71,0xff,0x52, 0x4a,0x52,0xff,0x46,0x44,0x47,0xff,0x48,0x45,0x49,0xff,0x48,0x45,0x49,0xff,0x48, 0x45,0x49,0xfe,0x4d,0x49,0x4e,0xfc,0x40,0x3c,0x40,0xf6,0x0b,0x0a,0x0a,0xe9,0x00, 0x00,0x00,0xd6,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xb0,0x00, 0x00,0x00,0xbb,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,0xf1,0x00, 0x00,0x00,0xf9,0x09,0x08,0x09,0xfd,0x2b,0x24,0x2b,0xff,0x57,0x49,0x56,0xff,0x6f, 0x5c,0x6e,0xff,0x6f,0x5b,0x6d,0xff,0x67,0x57,0x67,0xff,0x51,0x4a,0x52,0xff,0x53, 0x4b,0x53,0xff,0x53,0x4b,0x53,0xff,0x54,0x4c,0x54,0xff,0x58,0x4f,0x58,0xff,0x44, 0x41,0x45,0xff,0x12,0x1d,0x15,0xff,0x2c,0x2f,0x30,0xff,0x4e,0x4a,0x4f,0xff,0x39, 0x3b,0x39,0xff,0x37,0x3b,0x38,0xff,0x31,0x37,0x32,0xff,0x36,0x39,0x35,0xff,0x38, 0x3b,0x39,0xff,0x32,0x38,0x34,0xff,0x2f,0x36,0x30,0xff,0x2a,0x32,0x29,0xff,0x36, 0x3a,0x37,0xff,0x4c,0x48,0x4e,0xff,0x48,0x45,0x49,0xff,0x44,0x42,0x45,0xfe,0x45, 0x44,0x46,0xfa,0x47,0x41,0x47,0xf0,0x1c,0x18,0x1c,0xdd,0x00,0x00,0x00,0xbe,0x00, 0x00,0x00,0x96,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x36,0x00, 0x00,0x00,0x30,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x6c,0x00, 0x00,0x00,0x90,0x01,0x01,0x01,0xb5,0x00,0x01,0x00,0xd4,0x00,0x00,0x00,0xe9,0x21, 0x1f,0x22,0xf5,0x4f,0x43,0x4e,0xfb,0x52,0x42,0x50,0xfd,0x4a,0x3d,0x49,0xff,0x49, 0x3c,0x48,0xff,0x4d,0x3f,0x4d,0xff,0x4d,0x45,0x4d,0xff,0x4b,0x47,0x4b,0xff,0x49, 0x45,0x49,0xff,0x46,0x44,0x46,0xff,0x45,0x43,0x46,0xff,0x44,0x42,0x45,0xff,0x3f, 0x40,0x40,0xff,0x52,0x4b,0x52,0xff,0x5e,0x52,0x5e,0xff,0x5d,0x51,0x5e,0xff,0x5e, 0x52,0x5f,0xff,0x5e,0x52,0x5f,0xff,0x60,0x53,0x60,0xff,0x5f,0x53,0x5f,0xff,0x56, 0x4d,0x5b,0xff,0x6d,0x59,0x65,0xff,0xb2,0x99,0x93,0xff,0xb7,0x9c,0x91,0xff,0xb1, 0x95,0x8b,0xff,0xb0,0x94,0x8a,0xff,0xb1,0x95,0x8b,0xff,0xb0,0x93,0x8a,0xff,0xb0, 0x93,0x89,0xff,0xaf,0x92,0x89,0xff,0xaf,0x92,0x88,0xff,0xaf,0x92,0x88,0xff,0xaf, 0x92,0x88,0xff,0xaf,0x92,0x88,0xff,0xb1,0x93,0x87,0xff,0x92,0x74,0x7d,0xff,0x9b, 0x7b,0x79,0xff,0xae,0x90,0x84,0xff,0xba,0xa0,0x95,0xff,0xb1,0x92,0x88,0xff,0xae, 0x91,0x87,0xff,0xb5,0x9a,0x90,0xff,0xb1,0x91,0x85,0xff,0xaf,0x8f,0x83,0xff,0xac, 0x8c,0x80,0xff,0xa8,0x88,0x7e,0xff,0xa7,0x87,0x7d,0xff,0xa7,0x87,0x7d,0xff,0xa6, 0x86,0x7c,0xff,0xa6,0x85,0x7b,0xfd,0xa7,0x86,0x7b,0xfb,0xaa,0x88,0x7b,0xf5,0x80, 0x62,0x5e,0xe8,0x10,0x0b,0x0b,0xd0,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0x7e,0x00, 0x00,0x00,0x54,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x09,0x00, 0x00,0x00,0x03,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x0b,0x00, 0x00,0x00,0x14,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x55,0x00, 0x00,0x00,0x7c,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xc7,0x07,0x06,0x07,0xe2,0x3e, 0x38,0x3f,0xf2,0x58,0x4f,0x59,0xfa,0x54,0x4b,0x54,0xfe,0x54,0x4c,0x55,0xfe,0x54, 0x4c,0x55,0xff,0x53,0x4c,0x54,0xff,0x4f,0x49,0x50,0xff,0x4f,0x49,0x50,0xff,0x46, 0x44,0x46,0xff,0x2d,0x35,0x2e,0xff,0x2b,0x33,0x2b,0xff,0x2a,0x33,0x2b,0xff,0x2b, 0x34,0x2c,0xfe,0x2b,0x33,0x2b,0xfd,0x2a,0x34,0x2b,0xfa,0x28,0x32,0x29,0xf1,0x16, 0x1b,0x16,0xe4,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xb1,0x00, 0x00,0x00,0xad,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0xc9,0x03,0x04,0x04,0xdd,0x1f, 0x22,0x20,0xee,0x43,0x43,0x43,0xf8,0x4b,0x46,0x4c,0xfc,0x4a,0x46,0x4b,0xff,0x4b, 0x47,0x4c,0xff,0x45,0x41,0x46,0xff,0x3c,0x39,0x3d,0xff,0x4b,0x45,0x4c,0xff,0x48, 0x43,0x49,0xff,0x3e,0x38,0x3d,0xff,0x4e,0x47,0x4e,0xff,0x4f,0x47,0x4f,0xff,0x41, 0x3c,0x41,0xff,0x48,0x41,0x48,0xff,0x53,0x4c,0x53,0xff,0x52,0x4b,0x52,0xff,0x46, 0x44,0x47,0xff,0x35,0x3a,0x36,0xff,0x36,0x3a,0x37,0xff,0x36,0x3a,0x37,0xff,0x36, 0x3a,0x37,0xfd,0x36,0x3a,0x37,0xfb,0x38,0x3d,0x38,0xf6,0x27,0x2b,0x27,0xec,0x08, 0x09,0x08,0xdd,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x8b,0x00, 0x00,0x00,0x72,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x87,0x00, 0x00,0x00,0xac,0x00,0x00,0x00,0xcd,0x26,0x25,0x27,0xe6,0x4c,0x4a,0x4d,0xf5,0x48, 0x45,0x49,0xfb,0x48,0x45,0x49,0xff,0x48,0x45,0x49,0xff,0x48,0x45,0x49,0xff,0x48, 0x45,0x49,0xff,0x48,0x45,0x49,0xff,0x48,0x45,0x49,0xff,0x33,0x39,0x34,0xff,0x30, 0x36,0x30,0xff,0x4a,0x45,0x49,0xff,0x53,0x4a,0x53,0xff,0x46,0x44,0x47,0xff,0x43, 0x42,0x44,0xff,0x54,0x4c,0x55,0xff,0x5a,0x4f,0x5a,0xff,0x54,0x4b,0x54,0xff,0x55, 0x4c,0x56,0xff,0x56,0x4d,0x57,0xff,0x55,0x4c,0x56,0xff,0x54,0x4c,0x55,0xff,0x57, 0x4d,0x57,0xff,0x3d,0x3e,0x3d,0xff,0x33,0x39,0x33,0xff,0x31,0x37,0x32,0xff,0x25, 0x2a,0x25,0xff,0x06,0x06,0x06,0xff,0x09,0x0b,0x09,0xff,0x2d,0x2f,0x2e,0xff,0x46, 0x44,0x47,0xff,0x49,0x46,0x4a,0xff,0x48,0x45,0x49,0xff,0x4a,0x46,0x4b,0xff,0x49, 0x46,0x4b,0xff,0x48,0x45,0x49,0xff,0x4b,0x47,0x4b,0xff,0x4a,0x46,0x4b,0xff,0x4c, 0x47,0x4d,0xff,0x4f,0x49,0x50,0xff,0x4f,0x49,0x50,0xff,0x51,0x4a,0x51,0xff,0x53, 0x4c,0x54,0xff,0x56,0x4d,0x57,0xff,0x59,0x4f,0x59,0xff,0x4d,0x48,0x4e,0xff,0x4b, 0x46,0x4b,0xff,0x5c,0x51,0x5d,0xff,0x55,0x4c,0x56,0xff,0x50,0x4a,0x53,0xff,0x55, 0x4c,0x55,0xff,0x3f,0x40,0x40,0xfe,0x35,0x3b,0x36,0xfc,0x12,0x14,0x12,0xfb,0x01, 0x01,0x01,0xf8,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0xf7,0x0c, 0x0b,0x0c,0xfa,0x4f,0x47,0x50,0xfc,0x55,0x4d,0x56,0xfe,0x56,0x4d,0x57,0xfe,0x57, 0x4d,0x57,0xff,0x29,0x30,0x2a,0xff,0x4d,0x48,0x4d,0xff,0x4a,0x46,0x4b,0xff,0x2e, 0x35,0x2f,0xff,0x2a,0x32,0x2a,0xff,0x27,0x30,0x27,0xff,0x28,0x32,0x29,0xff,0x26, 0x30,0x26,0xff,0x37,0x3b,0x37,0xff,0x0a,0x16,0x0c,0xff,0x5b,0x50,0x5c,0xff,0x4a, 0x46,0x4b,0xff,0x4a,0x46,0x4b,0xff,0x49,0x46,0x4b,0xff,0x53,0x4c,0x50,0xff,0x60, 0x56,0x5a,0xff,0x54,0x4d,0x52,0xff,0x4a,0x46,0x4b,0xff,0x3f,0x3c,0x40,0xff,0x00, 0x00,0x00,0xfe,0x17,0x12,0x12,0xfd,0x55,0x46,0x47,0xf7,0x4a,0x3e,0x3f,0xf0,0x00, 0x00,0x00,0xe2,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0xb2,0x00, 0x00,0x00,0xb3,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xd3,0x07,0x06,0x07,0xe7,0x53, 0x45,0x52,0xf3,0x6f,0x5c,0x6e,0xfb,0x54,0x4c,0x55,0xfd,0x59,0x4e,0x59,0xff,0x5c, 0x50,0x5c,0xff,0x5d,0x51,0x5d,0xff,0x5e,0x52,0x5f,0xff,0x5d,0x50,0x5d,0xff,0x45, 0x42,0x45,0xff,0x19,0x26,0x1a,0xff,0x3e,0x40,0x41,0xff,0x5f,0x51,0x5e,0xff,0x50, 0x49,0x50,0xff,0x40,0x41,0x41,0xff,0x32,0x37,0x33,0xff,0x3f,0x3f,0x3c,0xff,0x7e, 0x62,0x71,0xff,0x5b,0x50,0x5d,0xff,0x43,0x42,0x45,0xff,0x49,0x45,0x4a,0xff,0x48, 0x45,0x49,0xff,0x48,0x45,0x49,0xff,0x48,0x45,0x49,0xfe,0x4b,0x48,0x4c,0xfc,0x39, 0x36,0x39,0xf7,0x02,0x01,0x01,0xeb,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0xc6,0x00, 0x00,0x00,0xb5,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xcd,0x00, 0x00,0x00,0xe0,0x02,0x02,0x02,0xf0,0x04,0x03,0x04,0xf9,0x00,0x00,0x00,0xfc,0x09, 0x08,0x09,0xff,0x40,0x36,0x40,0xff,0x73,0x60,0x73,0xff,0x6f,0x5b,0x6d,0xfe,0x61, 0x53,0x60,0xfe,0x50,0x4a,0x50,0xfe,0x53,0x4b,0x53,0xff,0x53,0x4b,0x53,0xff,0x57, 0x4e,0x57,0xff,0x43,0x40,0x43,0xff,0x13,0x21,0x16,0xff,0x32,0x31,0x2c,0xff,0x60, 0x4f,0x56,0xff,0x3b,0x3e,0x3e,0xff,0x37,0x3b,0x37,0xff,0x39,0x3c,0x39,0xff,0x3b, 0x3d,0x3b,0xff,0x41,0x40,0x41,0xff,0x40,0x41,0x41,0xff,0x3e,0x3f,0x3e,0xff,0x3d, 0x3e,0x3d,0xff,0x3c,0x3d,0x3d,0xff,0x3b,0x3d,0x3c,0xff,0x45,0x44,0x46,0xff,0x48, 0x45,0x49,0xfe,0x42,0x41,0x43,0xfc,0x48,0x46,0x49,0xf7,0x33,0x2f,0x33,0xeb,0x0a, 0x08,0x0a,0xd2,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x58,0x00, 0x00,0x00,0x34,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x21,0x00, 0x00,0x00,0x33,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0xa2,0x04, 0x03,0x04,0xc6,0x04,0x03,0x04,0xe0,0x10,0x0e,0x10,0xef,0x41,0x35,0x40,0xf9,0x51, 0x41,0x4f,0xfd,0x4a,0x3c,0x48,0xfe,0x4a,0x3b,0x48,0xff,0x52,0x45,0x53,0xff,0x50, 0x49,0x50,0xff,0x49,0x46,0x4a,0xff,0x47,0x44,0x48,0xff,0x46,0x43,0x46,0xff,0x43, 0x42,0x45,0xff,0x42,0x41,0x43,0xff,0x48,0x45,0x48,0xff,0x5a,0x4f,0x5b,0xff,0x5f, 0x53,0x60,0xff,0x5e,0x52,0x5e,0xff,0x5e,0x52,0x5f,0xff,0x5e,0x52,0x5f,0xff,0x5f, 0x52,0x5f,0xff,0x5d,0x51,0x5d,0xff,0x5e,0x52,0x5e,0xff,0x59,0x4e,0x5d,0xff,0x81, 0x67,0x76,0xff,0xb6,0x9c,0x99,0xff,0xb4,0x98,0x8e,0xff,0xb0,0x92,0x87,0xff,0xb1, 0x93,0x89,0xff,0xb1,0x92,0x88,0xff,0xb0,0x92,0x88,0xff,0xb0,0x92,0x88,0xff,0xb0, 0x92,0x88,0xff,0xb0,0x92,0x88,0xff,0xaf,0x90,0x86,0xff,0xad,0x8e,0x84,0xff,0xa6, 0x84,0x77,0xff,0x83,0x64,0x75,0xff,0xa6,0x87,0x7f,0xff,0xac,0x8c,0x81,0xff,0xab, 0x8b,0x81,0xff,0xa9,0x89,0x7f,0xff,0xa9,0x88,0x7e,0xff,0xa7,0x87,0x7c,0xff,0xa9, 0x89,0x7f,0xff,0xa9,0x89,0x7f,0xff,0xa9,0x88,0x7e,0xff,0xa9,0x88,0x7e,0xff,0xaa, 0x89,0x7f,0xff,0xa9,0x88,0x7e,0xff,0xa8,0x89,0x7f,0xfe,0xa3,0x81,0x75,0xfc,0x93, 0x6e,0x6e,0xf8,0x64,0x54,0x58,0xed,0x15,0x10,0x11,0xdb,0x01,0x00,0x00,0xbe,0x00, 0x00,0x00,0x98,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x25,0x00, 0x00,0x00,0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x07,0x00, 0x00,0x00,0x0d,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x32,0x00, 0x00,0x00,0x44,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x9e,0x00, 0x00,0x00,0xc0,0x00,0x00,0x00,0xdc,0x11,0x10,0x12,0xee,0x55,0x4d,0x56,0xf8,0x55, 0x4d,0x56,0xfd,0x54,0x4c,0x55,0xfe,0x53,0x4b,0x53,0xff,0x51,0x4a,0x52,0xff,0x4e, 0x49,0x4f,0xff,0x4d,0x48,0x4e,0xff,0x4a,0x46,0x4b,0xff,0x38,0x3b,0x39,0xff,0x2a, 0x33,0x2a,0xff,0x2c,0x34,0x2c,0xff,0x2c,0x34,0x2c,0xfd,0x2c,0x34,0x2c,0xfa,0x29, 0x32,0x29,0xf4,0x1b,0x20,0x1b,0xe7,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0xb8,0x00, 0x00,0x00,0x9e,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x94,0x00, 0x00,0x00,0xaf,0x00,0x00,0x00,0xcc,0x0e,0x10,0x0f,0xe4,0x3b,0x3d,0x3c,0xf3,0x49, 0x45,0x4a,0xfb,0x47,0x44,0x48,0xfe,0x49,0x46,0x4a,0xfe,0x43,0x41,0x44,0xff,0x3d, 0x3a,0x3d,0xff,0x4a,0x46,0x4b,0xff,0x4b,0x46,0x4c,0xff,0x42,0x3d,0x42,0xff,0x46, 0x40,0x46,0xff,0x52,0x4b,0x52,0xff,0x49,0x43,0x49,0xff,0x3f,0x3c,0x40,0xff,0x48, 0x43,0x49,0xff,0x4f,0x49,0x50,0xff,0x49,0x45,0x4a,0xff,0x39,0x3c,0x3a,0xff,0x33, 0x38,0x34,0xff,0x35,0x39,0x36,0xfe,0x36,0x3b,0x37,0xfc,0x38,0x3d,0x39,0xf8,0x28, 0x2c,0x28,0xee,0x09,0x0a,0x09,0xdf,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0xac,0x00, 0x00,0x00,0x8b,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x4e,0x00, 0x00,0x00,0x59,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0xc4,0x18, 0x18,0x18,0xe1,0x42,0x40,0x43,0xf2,0x4a,0x47,0x4b,0xfa,0x48,0x45,0x49,0xfe,0x48, 0x45,0x49,0xff,0x48,0x45,0x49,0xff,0x48,0x45,0x49,0xff,0x48,0x45,0x49,0xff,0x49, 0x46,0x4a,0xff,0x30,0x36,0x30,0xff,0x3b,0x3d,0x3c,0xff,0x48,0x45,0x49,0xff,0x36, 0x39,0x36,0xff,0x42,0x40,0x42,0xff,0x59,0x4f,0x5a,0xff,0x74,0x5f,0x72,0xff,0x61, 0x53,0x5f,0xff,0x51,0x4a,0x52,0xff,0x54,0x4c,0x55,0xff,0x54,0x4c,0x55,0xff,0x54, 0x4c,0x55,0xff,0x53,0x4b,0x54,0xff,0x56,0x4d,0x56,0xff,0x42,0x41,0x42,0xff,0x34, 0x38,0x34,0xff,0x36,0x3c,0x37,0xff,0x1c,0x1e,0x1c,0xff,0x02,0x02,0x02,0xff,0x01, 0x01,0x01,0xff,0x2b,0x2d,0x2c,0xff,0x47,0x45,0x49,0xff,0x41,0x41,0x41,0xff,0x36, 0x3a,0x37,0xff,0x42,0x42,0x43,0xff,0x48,0x45,0x49,0xff,0x49,0x46,0x4a,0xff,0x4a, 0x46,0x4b,0xff,0x49,0x45,0x4a,0xff,0x4a,0x46,0x4a,0xff,0x4c,0x47,0x4d,0xff,0x50, 0x4a,0x50,0xff,0x51,0x4a,0x51,0xff,0x53,0x4b,0x52,0xff,0x54,0x4c,0x55,0xff,0x56, 0x4d,0x57,0xff,0x51,0x4a,0x52,0xff,0x54,0x4c,0x55,0xff,0x77,0x60,0x73,0xff,0x5b, 0x50,0x5c,0xff,0x53,0x4b,0x53,0xff,0x55,0x4c,0x55,0xfe,0x40,0x40,0x41,0xfd,0x36, 0x3c,0x37,0xfa,0x0a,0x0b,0x0a,0xf6,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0xeb,0x00, 0x00,0x00,0xeb,0x00,0x00,0x00,0xed,0x05,0x04,0x05,0xf3,0x51,0x49,0x52,0xf8,0x54, 0x4c,0x54,0xfc,0x57,0x4d,0x57,0xfe,0x51,0x4a,0x52,0xff,0x3d,0x3e,0x3e,0xff,0x35, 0x39,0x36,0xff,0x29,0x32,0x2a,0xff,0x1f,0x2b,0x1f,0xff,0x2b,0x33,0x2b,0xff,0x2b, 0x33,0x2b,0xff,0x29,0x32,0x29,0xff,0x29,0x32,0x2a,0xff,0x27,0x30,0x28,0xff,0x3e, 0x38,0x3e,0xff,0x61,0x52,0x61,0xff,0x4a,0x46,0x4b,0xff,0x4a,0x46,0x4b,0xff,0x56, 0x4e,0x53,0xff,0x5d,0x54,0x59,0xff,0x52,0x4d,0x51,0xff,0x4a,0x46,0x4b,0xff,0x4a, 0x46,0x4b,0xff,0x3f,0x3c,0x40,0xff,0x00,0x00,0x00,0xff,0x03,0x03,0x03,0xfe,0x46, 0x3a,0x3b,0xfc,0x3f,0x33,0x34,0xf7,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xe4,0x00, 0x00,0x00,0xd9,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xd7,0x00, 0x00,0x00,0xe3,0x06,0x04,0x05,0xee,0x44,0x37,0x42,0xf7,0x6a,0x5a,0x6a,0xfc,0x53, 0x4b,0x54,0xfe,0x58,0x4e,0x58,0xff,0x59,0x4f,0x5a,0xff,0x5b,0x50,0x5c,0xff,0x59, 0x4f,0x5a,0xff,0x5e,0x52,0x5e,0xff,0x4e,0x48,0x4f,0xff,0x20,0x2a,0x21,0xff,0x5b, 0x51,0x5c,0xff,0x4e,0x49,0x4f,0xff,0x50,0x49,0x50,0xff,0x49,0x46,0x4a,0xff,0x49, 0x45,0x49,0xff,0x53,0x4b,0x53,0xff,0x6f,0x5b,0x6b,0xff,0x45,0x43,0x46,0xff,0x48, 0x45,0x49,0xff,0x48,0x45,0x49,0xff,0x48,0x45,0x49,0xff,0x48,0x45,0x49,0xff,0x48, 0x45,0x49,0xff,0x49,0x46,0x4a,0xfc,0x33,0x31,0x34,0xf9,0x00,0x00,0x00,0xf1,0x00, 0x00,0x00,0xe2,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xbf,0x00, 0x00,0x00,0xc6,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0xf2,0x02, 0x02,0x02,0xfa,0x03,0x02,0x03,0xfd,0x00,0x00,0x00,0xfe,0x10,0x0d,0x10,0xfe,0x4e, 0x41,0x4d,0xfe,0x6d,0x5b,0x6c,0xfe,0x59,0x4e,0x59,0xfe,0x51,0x4a,0x51,0xfe,0x54, 0x4c,0x54,0xfe,0x4e,0x48,0x4f,0xfe,0x33,0x35,0x35,0xff,0x11,0x1b,0x14,0xff,0x2b, 0x2a,0x26,0xff,0x6c,0x52,0x5f,0xff,0x55,0x4a,0x52,0xff,0x25,0x30,0x25,0xff,0x2d, 0x35,0x2e,0xff,0x33,0x38,0x35,0xff,0x42,0x41,0x43,0xff,0x47,0x44,0x48,0xff,0x45, 0x43,0x46,0xff,0x46,0x43,0x47,0xff,0x47,0x44,0x48,0xff,0x47,0x44,0x48,0xff,0x43, 0x42,0x44,0xff,0x42,0x41,0x43,0xff,0x44,0x42,0x45,0xfe,0x43,0x42,0x44,0xfb,0x49, 0x47,0x4a,0xf4,0x20,0x1e,0x21,0xe4,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0xa0,0x00, 0x00,0x00,0x74,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x16,0x00, 0x00,0x00,0x10,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x3f,0x00, 0x00,0x00,0x63,0x00,0x00,0x00,0x8b,0x01,0x01,0x01,0xb1,0x02,0x01,0x02,0xcf,0x00, 0x00,0x00,0xe4,0x23,0x1b,0x22,0xf2,0x4a,0x3c,0x49,0xf9,0x4b,0x3e,0x4b,0xfc,0x4a, 0x3c,0x49,0xfe,0x4e,0x45,0x4d,0xff,0x4b,0x47,0x4b,0xff,0x47,0x44,0x47,0xff,0x47, 0x44,0x47,0xff,0x46,0x43,0x47,0xff,0x44,0x42,0x45,0xff,0x3f,0x40,0x40,0xff,0x53, 0x4b,0x53,0xff,0x5e,0x52,0x5f,0xff,0x5e,0x52,0x5f,0xff,0x5e,0x52,0x5f,0xff,0x5e, 0x52,0x5f,0xff,0x5e,0x52,0x5f,0xff,0x5d,0x51,0x5d,0xff,0x5d,0x52,0x5e,0xff,0x60, 0x53,0x60,0xff,0x5e,0x52,0x5e,0xff,0x5d,0x4f,0x61,0xff,0x89,0x69,0x6b,0xff,0xa9, 0x8a,0x81,0xff,0xad,0x90,0x87,0xff,0xac,0x8f,0x86,0xff,0xac,0x8f,0x86,0xff,0xac, 0x8f,0x86,0xff,0xac,0x8f,0x86,0xff,0xac,0x8f,0x86,0xff,0xab,0x8e,0x84,0xff,0xa9, 0x8b,0x81,0xff,0xa7,0x89,0x7f,0xff,0x97,0x76,0x69,0xff,0x82,0x63,0x71,0xff,0x9e, 0x7e,0x78,0xff,0xa2,0x82,0x78,0xff,0xa2,0x82,0x78,0xff,0xa2,0x82,0x78,0xff,0xa2, 0x83,0x79,0xff,0xa2,0x82,0x78,0xff,0xa2,0x82,0x78,0xff,0xa2,0x82,0x78,0xff,0xa2, 0x83,0x78,0xff,0xa2,0x83,0x79,0xff,0xa0,0x81,0x77,0xff,0x9e,0x7d,0x70,0xff,0x82, 0x69,0x77,0xfd,0x4c,0x47,0x45,0xfa,0x4f,0x48,0x4c,0xf3,0x16,0x14,0x19,0xe4,0x01, 0x01,0x01,0xcb,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x55,0x00, 0x00,0x00,0x32,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x04,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00, 0x00,0x00,0x08,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x2e,0x00, 0x00,0x00,0x41,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x77,0x00, 0x00,0x00,0x8d,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0xdc,0x03, 0x03,0x03,0xed,0x2c,0x28,0x2c,0xf8,0x59,0x51,0x5a,0xfc,0x51,0x4a,0x51,0xfe,0x51, 0x4a,0x51,0xff,0x50,0x49,0x50,0xff,0x4f,0x49,0x50,0xff,0x4d,0x48,0x4d,0xff,0x4c, 0x47,0x4c,0xff,0x44,0x42,0x45,0xfe,0x2a,0x32,0x2a,0xfe,0x29,0x33,0x2a,0xfd,0x2a, 0x33,0x2a,0xfa,0x2c,0x34,0x2c,0xf4,0x1b,0x22,0x1b,0xe8,0x01,0x01,0x01,0xd6,0x00, 0x00,0x00,0xb8,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x63,0x00, 0x00,0x00,0x61,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0xb9,0x04, 0x04,0x04,0xd8,0x23,0x25,0x23,0xee,0x48,0x47,0x49,0xf8,0x48,0x45,0x49,0xfd,0x46, 0x43,0x48,0xff,0x3f,0x3c,0x40,0xff,0x3f,0x3c,0x40,0xff,0x4a,0x46,0x4b,0xff,0x4c, 0x47,0x4c,0xff,0x45,0x41,0x45,0xff,0x44,0x40,0x45,0xff,0x4e,0x49,0x4e,0xff,0x4e, 0x48,0x4e,0xff,0x47,0x42,0x48,0xff,0x3f,0x3b,0x40,0xff,0x45,0x40,0x45,0xff,0x4e, 0x49,0x4e,0xff,0x40,0x40,0x41,0xff,0x32,0x38,0x33,0xff,0x33,0x38,0x34,0xfd,0x36, 0x3b,0x36,0xfb,0x2a,0x2e,0x2b,0xf3,0x0a,0x0b,0x0b,0xe5,0x00,0x00,0x00,0xcf,0x00, 0x00,0x00,0xb2,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x59,0x00, 0x00,0x00,0x48,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x72,0x00, 0x00,0x00,0x99,0x00,0x00,0x00,0xbf,0x0b,0x0b,0x0b,0xde,0x36,0x34,0x37,0xf0,0x4b, 0x48,0x4c,0xfa,0x48,0x45,0x48,0xfe,0x48,0x45,0x48,0xff,0x47,0x44,0x47,0xff,0x47, 0x44,0x47,0xff,0x47,0x44,0x47,0xff,0x49,0x46,0x4a,0xff,0x2d,0x34,0x2d,0xff,0x2c, 0x34,0x2d,0xff,0x2d,0x34,0x2d,0xff,0x4c,0x46,0x4d,0xff,0x77,0x60,0x71,0xff,0x77, 0x60,0x72,0xff,0x5d,0x51,0x5d,0xff,0x50,0x4a,0x50,0xff,0x50,0x4a,0x50,0xff,0x53, 0x4b,0x54,0xff,0x54,0x4c,0x54,0xff,0x52,0x4a,0x52,0xff,0x51,0x4a,0x51,0xff,0x53, 0x4b,0x53,0xff,0x46,0x44,0x46,0xff,0x37,0x3b,0x37,0xff,0x32,0x38,0x33,0xff,0x0d, 0x0f,0x0e,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x25,0x28,0x25,0xff,0x45, 0x44,0x46,0xff,0x48,0x45,0x48,0xff,0x46,0x44,0x47,0xff,0x49,0x45,0x49,0xff,0x40, 0x41,0x41,0xff,0x3d,0x3d,0x3e,0xff,0x47,0x44,0x48,0xff,0x50,0x4a,0x51,0xff,0x55, 0x4c,0x54,0xff,0x51,0x4b,0x52,0xff,0x4d,0x48,0x4e,0xff,0x50,0x49,0x50,0xff,0x53, 0x4b,0x52,0xff,0x54,0x4c,0x55,0xff,0x54,0x4c,0x55,0xff,0x54,0x4c,0x55,0xff,0x37, 0x3b,0x39,0xff,0x71,0x5d,0x6a,0xff,0x5c,0x51,0x5c,0xff,0x53,0x4b,0x53,0xff,0x53, 0x4b,0x52,0xfe,0x45,0x43,0x46,0xfc,0x34,0x39,0x34,0xf7,0x05,0x05,0x05,0xef,0x00, 0x00,0x00,0xe5,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0xdf,0x00, 0x00,0x00,0xea,0x3d,0x38,0x3e,0xf3,0x54,0x4b,0x55,0xf9,0x45,0x44,0x45,0xfd,0x3c, 0x3f,0x3d,0xfe,0x4d,0x48,0x4e,0xff,0x2a,0x33,0x2a,0xff,0x26,0x2f,0x26,0xff,0x23, 0x2d,0x24,0xff,0x30,0x36,0x31,0xff,0x2b,0x34,0x2b,0xff,0x2a,0x33,0x2a,0xff,0x31, 0x37,0x30,0xff,0x14,0x21,0x17,0xff,0x7f,0x64,0x6f,0xff,0x81,0x6c,0x7e,0xff,0x77, 0x71,0x75,0xff,0x51,0x4c,0x50,0xff,0x67,0x5c,0x60,0xff,0x57,0x50,0x54,0xff,0x48, 0x45,0x49,0xff,0x48,0x45,0x49,0xff,0x4a,0x46,0x4b,0xff,0x3e,0x3b,0x3e,0xff,0x00, 0x00,0x00,0xff,0x03,0x02,0x02,0xff,0x35,0x2c,0x2d,0xfe,0x2f,0x27,0x28,0xfb,0x06, 0x05,0x06,0xf8,0x0d,0x0b,0x0b,0xf2,0x17,0x12,0x13,0xed,0x17,0x13,0x14,0xea,0x00, 0x00,0x00,0xe8,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0xf0,0x04,0x03,0x04,0xf6,0x33, 0x2a,0x32,0xfb,0x66,0x58,0x67,0xfd,0x52,0x4b,0x53,0xfe,0x55,0x4d,0x56,0xff,0x55, 0x4c,0x56,0xff,0x59,0x4f,0x5a,0xff,0x56,0x4d,0x57,0xff,0x56,0x4d,0x57,0xff,0x57, 0x4d,0x57,0xff,0x72,0x5c,0x6f,0xff,0x75,0x5e,0x6f,0xff,0x4e,0x49,0x4f,0xff,0x4e, 0x49,0x50,0xff,0x4d,0x48,0x4e,0xff,0x4d,0x48,0x4d,0xff,0x4a,0x47,0x4c,0xff,0x48, 0x45,0x4a,0xff,0x47,0x44,0x48,0xff,0x48,0x45,0x49,0xff,0x47,0x44,0x47,0xff,0x47, 0x44,0x47,0xff,0x48,0x45,0x49,0xff,0x49,0x46,0x49,0xff,0x4c,0x49,0x4b,0xfe,0x31, 0x2e,0x31,0xfb,0x00,0x00,0x00,0xf6,0x07,0x06,0x06,0xee,0x03,0x02,0x03,0xe4,0x01, 0x01,0x01,0xdb,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0xe2,0x03, 0x02,0x03,0xed,0x04,0x03,0x04,0xf6,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0xfe,0x00, 0x00,0x00,0xfe,0x00,0x00,0x00,0xfe,0x06,0x05,0x06,0xfd,0x15,0x11,0x15,0xfc,0x1e, 0x19,0x1d,0xfc,0x2b,0x24,0x2b,0xfc,0x46,0x3f,0x45,0xfd,0x4d,0x45,0x4c,0xfe,0x36, 0x31,0x36,0xfe,0x40,0x36,0x38,0xff,0x6e,0x52,0x5f,0xff,0x66,0x55,0x5e,0xff,0x21, 0x2d,0x22,0xff,0x27,0x31,0x27,0xff,0x28,0x31,0x28,0xff,0x2a,0x32,0x2a,0xff,0x38, 0x3a,0x38,0xff,0x44,0x43,0x46,0xff,0x42,0x42,0x43,0xff,0x43,0x41,0x44,0xff,0x45, 0x43,0x46,0xff,0x44,0x43,0x45,0xff,0x43,0x42,0x44,0xff,0x43,0x42,0x44,0xff,0x43, 0x42,0x44,0xfd,0x46,0x45,0x47,0xfa,0x3d,0x39,0x3d,0xf1,0x13,0x10,0x13,0xde,0x00, 0x00,0x00,0xbf,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x42,0x00, 0x00,0x00,0x25,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x10,0x00, 0x00,0x00,0x19,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x6e,0x00, 0x00,0x00,0x93,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0xd2,0x1d,0x17,0x1c,0xe5,0x4a, 0x3c,0x49,0xf2,0x4f,0x40,0x4d,0xf9,0x49,0x3b,0x48,0xfd,0x4a,0x43,0x4b,0xfe,0x49, 0x46,0x4a,0xff,0x47,0x44,0x48,0xff,0x46,0x43,0x46,0xff,0x44,0x42,0x45,0xff,0x42, 0x41,0x43,0xff,0x4a,0x46,0x4b,0xff,0x5a,0x50,0x5b,0xff,0x5f,0x52,0x60,0xff,0x5e, 0x52,0x5f,0xff,0x5e,0x52,0x5f,0xff,0x5e,0x52,0x5f,0xff,0x5e,0x52,0x5f,0xff,0x5d, 0x51,0x5d,0xff,0x5d,0x52,0x5e,0xff,0x60,0x53,0x60,0xff,0x5d,0x52,0x5e,0xff,0x6b, 0x59,0x6b,0xff,0x5a,0x4e,0x58,0xff,0x51,0x4a,0x4e,0xff,0x53,0x4c,0x50,0xff,0x51, 0x4b,0x4f,0xff,0x51,0x4b,0x4f,0xff,0x4f,0x4a,0x4d,0xff,0x4f,0x4a,0x4d,0xff,0x4e, 0x49,0x4c,0xff,0x4c,0x48,0x4a,0xff,0x4a,0x47,0x49,0xff,0x4e,0x4a,0x4c,0xff,0x24, 0x2c,0x22,0xff,0x44,0x43,0x45,0xff,0x49,0x46,0x47,0xff,0x49,0x46,0x47,0xff,0x47, 0x45,0x44,0xff,0x48,0x46,0x46,0xff,0x49,0x46,0x47,0xff,0x46,0x44,0x44,0xff,0x43, 0x42,0x40,0xff,0x3c,0x3e,0x3b,0xff,0x38,0x3b,0x35,0xff,0x38,0x3b,0x35,0xff,0x36, 0x3a,0x33,0xff,0x37,0x3a,0x33,0xfe,0x39,0x3c,0x3b,0xfc,0x44,0x43,0x47,0xf6,0x30, 0x2d,0x32,0xea,0x02,0x02,0x02,0xd5,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,0x8e,0x00, 0x00,0x00,0x64,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x11,0x00, 0x00,0x00,0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x02,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x1f,0x00, 0x00,0x00,0x34,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x7e,0x00, 0x00,0x00,0x90,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0xbc,0x00, 0x00,0x00,0xcf,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0xee,0x0a,0x09,0x0a,0xf8,0x48, 0x42,0x48,0xfd,0x55,0x4d,0x55,0xfe,0x51,0x4a,0x51,0xff,0x52,0x4b,0x52,0xff,0x50, 0x4a,0x50,0xff,0x4c,0x48,0x4d,0xfe,0x4c,0x47,0x4c,0xfe,0x47,0x44,0x48,0xfd,0x36, 0x3a,0x37,0xfb,0x29,0x32,0x29,0xf8,0x2b,0x34,0x2b,0xf2,0x1d,0x23,0x1e,0xe9,0x02, 0x02,0x02,0xd7,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x77,0x00, 0x00,0x00,0x57,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x59,0x00, 0x00,0x00,0x7e,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0xcd,0x0e,0x10,0x0e,0xe7,0x3f, 0x40,0x3f,0xf6,0x4a,0x46,0x4a,0xfc,0x43,0x41,0x44,0xff,0x42,0x40,0x44,0xff,0x46, 0x43,0x47,0xff,0x49,0x46,0x4a,0xff,0x4a,0x46,0x4b,0xff,0x47,0x43,0x48,0xff,0x47, 0x43,0x47,0xff,0x4c,0x48,0x4c,0xff,0x4c,0x47,0x4c,0xff,0x4a,0x46,0x4b,0xff,0x47, 0x44,0x49,0xff,0x49,0x45,0x4a,0xff,0x4b,0x47,0x4c,0xff,0x44,0x42,0x44,0xff,0x37, 0x3b,0x38,0xff,0x34,0x3a,0x35,0xfd,0x2a,0x2e,0x2a,0xf9,0x0e,0x0f,0x0e,0xef,0x00, 0x00,0x00,0xdc,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x86,0x00, 0x00,0x00,0x6e,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x56,0x00, 0x00,0x00,0x64,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0xc1,0x00, 0x00,0x00,0xdd,0x2b,0x29,0x2b,0xf0,0x4c,0x49,0x4c,0xf9,0x47,0x44,0x47,0xfd,0x47, 0x44,0x47,0xff,0x47,0x44,0x47,0xff,0x47,0x44,0x47,0xff,0x47,0x44,0x47,0xff,0x48, 0x45,0x48,0xff,0x36,0x3a,0x36,0xff,0x2e,0x35,0x2e,0xff,0x56,0x4d,0x56,0xff,0x6d, 0x5a,0x6c,0xff,0x55,0x4c,0x56,0xff,0x4b,0x47,0x4b,0xff,0x4c,0x47,0x4d,0xff,0x4e, 0x48,0x4f,0xff,0x4f,0x49,0x50,0xff,0x50,0x4a,0x51,0xff,0x51,0x4a,0x51,0xff,0x51, 0x4a,0x51,0xff,0x50,0x49,0x50,0xff,0x4f,0x4a,0x51,0xff,0x4a,0x46,0x4b,0xff,0x39, 0x3d,0x3a,0xff,0x21,0x26,0x23,0xff,0x06,0x06,0x06,0xff,0x00,0x00,0x00,0xff,0x00, 0x00,0x00,0xff,0x18,0x1b,0x18,0xff,0x41,0x40,0x41,0xff,0x49,0x45,0x49,0xff,0x47, 0x44,0x47,0xff,0x47,0x44,0x47,0xff,0x4c,0x48,0x4c,0xff,0x1d,0x26,0x1f,0xff,0x33, 0x36,0x34,0xff,0x5f,0x51,0x5d,0xff,0x6a,0x58,0x68,0xff,0x62,0x54,0x62,0xff,0x5f, 0x51,0x5c,0xff,0x52,0x4a,0x52,0xff,0x4e,0x49,0x4f,0xff,0x52,0x4b,0x52,0xff,0x56, 0x4d,0x57,0xff,0x40,0x41,0x41,0xff,0x21,0x2d,0x26,0xff,0x89,0x68,0x60,0xff,0x5e, 0x51,0x57,0xff,0x50,0x4a,0x51,0xff,0x50,0x4a,0x51,0xfe,0x48,0x46,0x49,0xfb,0x2d, 0x32,0x2e,0xf5,0x04,0x04,0x04,0xe8,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0xcf,0x00, 0x00,0x00,0xcc,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0xe0,0x02,0x02,0x02,0xed,0x25, 0x21,0x26,0xf7,0x3f,0x3d,0x40,0xfc,0x3e,0x3f,0x3e,0xfe,0x41,0x41,0x42,0xff,0x38, 0x3c,0x38,0xff,0x2c,0x34,0x2c,0xff,0x25,0x30,0x26,0xff,0x30,0x37,0x31,0xff,0x2d, 0x33,0x2d,0xff,0x39,0x3c,0x38,0xff,0x44,0x44,0x3d,0xff,0x67,0x68,0x64,0xff,0xba, 0xa3,0xa5,0xff,0xaa,0xa0,0xa5,0xff,0x91,0x89,0x8b,0xff,0x59,0x51,0x55,0xff,0x5e, 0x55,0x58,0xff,0x58,0x52,0x55,0xff,0x47,0x45,0x48,0xff,0x47,0x44,0x47,0xff,0x48, 0x45,0x48,0xff,0x3e,0x3b,0x3e,0xff,0x00,0x00,0x00,0xff,0x02,0x01,0x01,0xff,0x26, 0x20,0x20,0xfe,0x2f,0x28,0x29,0xfe,0x2b,0x24,0x24,0xfc,0x20,0x1b,0x1c,0xfb,0x23, 0x1d,0x1e,0xf8,0x23,0x1d,0x1e,0xf6,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xf6,0x00, 0x00,0x00,0xf9,0x02,0x02,0x02,0xfb,0x23,0x1d,0x23,0xfd,0x60,0x54,0x60,0xfe,0x4e, 0x49,0x4f,0xff,0x52,0x4a,0x52,0xff,0x55,0x4c,0x56,0xff,0x59,0x4e,0x59,0xff,0x59, 0x4f,0x5a,0xff,0x4d,0x47,0x4e,0xff,0x3c,0x3d,0x3c,0xff,0x6f,0x5b,0x6d,0xff,0x51, 0x4a,0x51,0xff,0x4e,0x49,0x4f,0xff,0x4d,0x48,0x4e,0xff,0x4c,0x47,0x4d,0xff,0x4a, 0x46,0x4b,0xff,0x49,0x46,0x4a,0xff,0x46,0x44,0x47,0xff,0x47,0x44,0x48,0xff,0x47, 0x44,0x47,0xff,0x47,0x45,0x48,0xff,0x48,0x45,0x49,0xff,0x47,0x44,0x48,0xff,0x4d, 0x49,0x4c,0xff,0x63,0x5a,0x5c,0xff,0x43,0x3b,0x3d,0xfd,0x0f,0x0d,0x0d,0xfa,0x2d, 0x26,0x27,0xf7,0x26,0x21,0x22,0xf1,0x15,0x12,0x13,0xed,0x00,0x00,0x00,0xea,0x00, 0x00,0x00,0xec,0x00,0x00,0x00,0xf0,0x10,0x0f,0x0f,0xf6,0x26,0x21,0x22,0xfa,0x09, 0x08,0x08,0xfd,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0xfc,0x00, 0x00,0x00,0xfa,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0xfa,0x2e, 0x27,0x24,0xfc,0x86,0x6c,0x6d,0xfe,0x94,0x73,0x77,0xff,0x9d,0x7d,0x6f,0xff,0x8e, 0x70,0x75,0xff,0x53,0x4a,0x55,0xff,0x1f,0x2c,0x20,0xff,0x27,0x30,0x27,0xff,0x27, 0x30,0x27,0xff,0x2a,0x33,0x2a,0xff,0x3b,0x3d,0x3b,0xff,0x46,0x44,0x48,0xff,0x42, 0x40,0x43,0xff,0x41,0x3f,0x42,0xff,0x43,0x41,0x44,0xff,0x45,0x43,0x46,0xff,0x45, 0x43,0x46,0xff,0x44,0x43,0x45,0xff,0x43,0x42,0x44,0xfd,0x49,0x48,0x4a,0xf9,0x2c, 0x29,0x2d,0xef,0x03,0x01,0x03,0xda,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x93,0x00, 0x00,0x00,0x6a,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x1f,0x00, 0x00,0x00,0x17,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x20,0x00, 0x00,0x00,0x34,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x95,0x00, 0x00,0x00,0xb7,0x03,0x02,0x02,0xd3,0x33,0x29,0x32,0xe6,0x4f,0x40,0x4f,0xf2,0x4d, 0x43,0x4d,0xf9,0x4b,0x46,0x4b,0xfc,0x49,0x46,0x4a,0xfe,0x47,0x44,0x48,0xff,0x46, 0x43,0x46,0xff,0x43,0x42,0x44,0xff,0x41,0x40,0x42,0xff,0x55,0x4c,0x56,0xff,0x5f, 0x52,0x60,0xff,0x5e,0x52,0x5f,0xff,0x5e,0x52,0x5f,0xff,0x5e,0x52,0x5f,0xff,0x60, 0x53,0x60,0xff,0x5f,0x52,0x60,0xff,0x5d,0x51,0x5d,0xff,0x60,0x53,0x5f,0xff,0x5d, 0x51,0x5d,0xff,0x62,0x54,0x62,0xff,0x6a,0x58,0x69,0xff,0x50,0x4a,0x51,0xff,0x49, 0x45,0x4a,0xff,0x4b,0x46,0x4c,0xff,0x4a,0x46,0x4b,0xff,0x4b,0x46,0x4d,0xff,0x4a, 0x45,0x4b,0xff,0x4a,0x45,0x4b,0xff,0x49,0x45,0x4a,0xff,0x46,0x43,0x48,0xff,0x45, 0x43,0x47,0xff,0x4a,0x46,0x4b,0xff,0x06,0x15,0x0c,0xff,0x6c,0x58,0x67,0xff,0x4d, 0x47,0x4d,0xff,0x42,0x42,0x44,0xff,0x43,0x42,0x45,0xff,0x45,0x42,0x46,0xff,0x40, 0x40,0x42,0xff,0x3e,0x3f,0x40,0xff,0x3a,0x3d,0x3b,0xff,0x35,0x39,0x37,0xff,0x31, 0x36,0x32,0xff,0x31,0x37,0x33,0xff,0x2f,0x36,0x31,0xfe,0x35,0x39,0x37,0xfd,0x45, 0x43,0x46,0xf9,0x4c,0x44,0x4d,0xef,0x08,0x07,0x08,0xde,0x00,0x00,0x00,0xc3,0x00, 0x00,0x00,0x9e,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x2b,0x00, 0x00,0x00,0x16,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x0e,0x00, 0x00,0x00,0x1d,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x73,0x00, 0x00,0x00,0x92,0x01,0x01,0x01,0xaa,0x05,0x05,0x05,0xba,0x04,0x04,0x04,0xc3,0x00, 0x00,0x00,0xcc,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xea,0x00, 0x00,0x00,0xf4,0x01,0x01,0x01,0xfa,0x1c,0x1a,0x1c,0xfd,0x55,0x4d,0x55,0xfe,0x57, 0x50,0x57,0xff,0x55,0x4f,0x56,0xff,0x55,0x4e,0x56,0xfe,0x53,0x4e,0x53,0xfc,0x51, 0x4d,0x51,0xf9,0x4f,0x4b,0x50,0xf7,0x49,0x48,0x4a,0xf3,0x2e,0x37,0x2e,0xee,0x20, 0x26,0x21,0xe4,0x04,0x05,0x05,0xd5,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xa1,0x00, 0x00,0x00,0x7c,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x2d,0x00, 0x00,0x00,0x30,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x9b,0x00, 0x00,0x00,0xc4,0x04,0x05,0x04,0xe1,0x28,0x29,0x28,0xf3,0x4c,0x49,0x4c,0xfb,0x4b, 0x48,0x4c,0xfe,0x4c,0x49,0x4d,0xff,0x4e,0x4a,0x4e,0xff,0x4e,0x4a,0x4e,0xff,0x4e, 0x4b,0x4f,0xff,0x4e,0x4a,0x4f,0xff,0x4f,0x4b,0x50,0xff,0x4e,0x4a,0x4f,0xff,0x4f, 0x4b,0x50,0xff,0x4e,0x4a,0x4f,0xff,0x4e,0x4b,0x4f,0xff,0x4f,0x4b,0x50,0xff,0x4f, 0x4b,0x4f,0xff,0x4d,0x4a,0x4d,0xff,0x42,0x45,0x43,0xfe,0x2c,0x32,0x2d,0xfc,0x0f, 0x11,0x0f,0xf7,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0xc1,0x00, 0x00,0x00,0xa7,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x78,0x00, 0x00,0x00,0x76,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x99,0x00, 0x00,0x00,0xb2,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0xe2,0x1f,0x1e,0x1f,0xf1,0x4b, 0x48,0x4b,0xf9,0x4e,0x4a,0x4e,0xfd,0x4c,0x49,0x4c,0xff,0x4c,0x49,0x4c,0xff,0x4d, 0x49,0x4d,0xff,0x4e,0x4a,0x4e,0xff,0x44,0x44,0x44,0xff,0x3e,0x42,0x3f,0xff,0x5e, 0x54,0x5e,0xff,0x72,0x5f,0x71,0xff,0x58,0x51,0x58,0xff,0x4c,0x49,0x4d,0xff,0x50, 0x4c,0x51,0xff,0x52,0x4d,0x52,0xff,0x52,0x4d,0x52,0xff,0x54,0x4e,0x55,0xff,0x55, 0x4e,0x56,0xff,0x55,0x4e,0x56,0xff,0x55,0x4f,0x56,0xff,0x55,0x4f,0x56,0xff,0x52, 0x4d,0x54,0xff,0x55,0x4e,0x56,0xff,0x41,0x43,0x3f,0xff,0x10,0x13,0x11,0xff,0x00, 0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x0c,0x0f,0x0c,0xff,0x3b, 0x3b,0x3b,0xff,0x4d,0x4a,0x4d,0xff,0x4d,0x49,0x4d,0xff,0x4d,0x49,0x4d,0xff,0x4e, 0x4a,0x4e,0xff,0x46,0x46,0x47,0xff,0x38,0x3d,0x38,0xff,0x36,0x3c,0x36,0xff,0x28, 0x32,0x29,0xff,0x35,0x3a,0x38,0xff,0x71,0x5d,0x67,0xff,0x5c,0x53,0x5b,0xff,0x5d, 0x54,0x5e,0xff,0x5b,0x52,0x5b,0xff,0x5a,0x51,0x5a,0xff,0x5f,0x55,0x60,0xff,0x2a, 0x34,0x2d,0xff,0x7c,0x60,0x67,0xff,0x62,0x55,0x5e,0xff,0x58,0x51,0x59,0xfe,0x5a, 0x51,0x5a,0xfd,0x56,0x50,0x57,0xfa,0x27,0x29,0x28,0xf3,0x03,0x03,0x03,0xe6,0x00, 0x00,0x00,0xd6,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0xcd,0x00, 0x00,0x00,0xdc,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0xf5,0x1b,0x18,0x1c,0xfb,0x2b, 0x26,0x2c,0xfe,0x30,0x2c,0x30,0xff,0x35,0x30,0x36,0xff,0x20,0x26,0x20,0xff,0x18, 0x21,0x18,0xff,0x10,0x17,0x11,0xff,0x16,0x18,0x16,0xff,0x3a,0x33,0x33,0xff,0x4f, 0x49,0x49,0xff,0x7f,0x7a,0x7b,0xff,0x9c,0x80,0x87,0xff,0x53,0x4f,0x54,0xff,0x50, 0x4b,0x51,0xff,0x4e,0x4a,0x4e,0xff,0x4d,0x49,0x4d,0xff,0x4e,0x4a,0x4e,0xff,0x4e, 0x4a,0x4e,0xff,0x4e,0x4a,0x4e,0xff,0x4e,0x4a,0x4e,0xff,0x41,0x3d,0x41,0xff,0x00, 0x00,0x00,0xff,0x01,0x01,0x01,0xff,0x12,0x0f,0x0f,0xff,0x16,0x13,0x13,0xff,0x0b, 0x09,0x09,0xfe,0x00,0x00,0x00,0xfe,0x0f,0x0e,0x0e,0xfd,0x1c,0x17,0x17,0xfc,0x01, 0x02,0x01,0xfc,0x02,0x02,0x01,0xfc,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,0xfd,0x15, 0x12,0x14,0xfe,0x69,0x5c,0x69,0xff,0x59,0x51,0x5a,0xff,0x5c,0x53,0x5e,0xff,0x5f, 0x54,0x60,0xff,0x62,0x57,0x63,0xff,0x60,0x55,0x61,0xff,0x47,0x46,0x48,0xff,0x50, 0x4b,0x50,0xff,0x5d,0x53,0x5e,0xff,0x5a,0x51,0x5a,0xff,0x59,0x51,0x5a,0xff,0x55, 0x4e,0x57,0xff,0x55,0x4e,0x56,0xff,0x54,0x4e,0x53,0xff,0x51,0x4c,0x52,0xff,0x50, 0x4b,0x51,0xff,0x4f,0x4b,0x50,0xff,0x4f,0x4a,0x50,0xff,0x4d,0x49,0x4e,0xff,0x50, 0x4b,0x51,0xff,0x4e,0x4a,0x4f,0xff,0x52,0x4d,0x52,0xff,0x49,0x44,0x48,0xff,0x1b, 0x19,0x1c,0xfe,0x00,0x00,0x00,0xfd,0x0c,0x0a,0x0b,0xfc,0x26,0x21,0x22,0xf9,0x26, 0x20,0x21,0xf7,0x1b,0x17,0x17,0xf7,0x18,0x14,0x15,0xf7,0x10,0x0d,0x0d,0xf9,0x0a, 0x08,0x09,0xfb,0x1e,0x19,0x1a,0xfd,0x29,0x23,0x23,0xfd,0x1a,0x17,0x17,0xfe,0x13, 0x10,0x10,0xfd,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0xf7,0x00, 0x00,0x00,0xf7,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0xfb,0x36,0x2b,0x26,0xfd,0x8f, 0x6e,0x64,0xfe,0xa2,0x7c,0x70,0xfe,0x97,0x72,0x73,0xff,0x5b,0x4c,0x52,0xff,0x1e, 0x2c,0x20,0xff,0x28,0x31,0x28,0xff,0x28,0x30,0x28,0xff,0x2c,0x33,0x2c,0xff,0x3d, 0x3e,0x3d,0xff,0x49,0x46,0x4a,0xff,0x47,0x45,0x48,0xff,0x46,0x44,0x47,0xff,0x47, 0x44,0x48,0xff,0x48,0x46,0x49,0xff,0x4a,0x48,0x4b,0xff,0x4b,0x49,0x4c,0xff,0x4e, 0x4b,0x4f,0xfd,0x4a,0x46,0x4a,0xf9,0x1c,0x1a,0x1c,0xef,0x00,0x00,0x00,0xdb,0x00, 0x00,0x00,0xbe,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x5f,0x00, 0x00,0x00,0x49,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x21,0x00, 0x00,0x00,0x1a,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x36,0x00, 0x00,0x00,0x51,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0xb8,0x03, 0x02,0x03,0xd1,0x2a,0x22,0x29,0xe3,0x44,0x3e,0x44,0xee,0x4c,0x48,0x4d,0xf6,0x4e, 0x4a,0x4e,0xfb,0x4b,0x48,0x4c,0xfe,0x4b,0x48,0x4d,0xfe,0x44,0x44,0x45,0xff,0x4a, 0x47,0x4b,0xff,0x5b,0x50,0x5c,0xff,0x5f,0x52,0x60,0xff,0x5e,0x52,0x5f,0xff,0x5e, 0x52,0x5f,0xff,0x5e,0x52,0x5f,0xff,0x60,0x53,0x60,0xff,0x5f,0x52,0x5f,0xff,0x5e, 0x52,0x5f,0xff,0x5e,0x52,0x5f,0xff,0x5c,0x51,0x5e,0xff,0x6d,0x5b,0x6d,0xff,0x59, 0x4e,0x58,0xff,0x4c,0x47,0x4c,0xff,0x4d,0x48,0x4d,0xff,0x4d,0x48,0x4f,0xff,0x4f, 0x49,0x50,0xff,0x4f,0x49,0x50,0xff,0x4d,0x48,0x4e,0xff,0x4d,0x48,0x4d,0xff,0x4d, 0x48,0x4e,0xff,0x4c,0x46,0x4c,0xff,0x48,0x45,0x49,0xff,0x50,0x4a,0x51,0xff,0x0d, 0x1c,0x11,0xff,0x83,0x61,0x6a,0xff,0x56,0x4d,0x53,0xff,0x47,0x45,0x49,0xff,0x49, 0x45,0x4a,0xff,0x48,0x44,0x48,0xff,0x45,0x42,0x46,0xff,0x3f,0x3f,0x40,0xff,0x3b, 0x3d,0x3b,0xff,0x37,0x3a,0x37,0xff,0x34,0x39,0x35,0xff,0x34,0x39,0x34,0xff,0x39, 0x3c,0x3a,0xfd,0x42,0x41,0x43,0xfb,0x53,0x4c,0x54,0xf3,0x1e,0x1a,0x1e,0xe6,0x01, 0x01,0x01,0xcd,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x5a,0x00, 0x00,0x00,0x38,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x05,0x00, 0x00,0x00,0x02,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x05,0x00, 0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x4e,0x00, 0x00,0x00,0x71,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0xb7,0x07,0x07,0x07,0xcd,0x37, 0x37,0x37,0xdb,0x0c,0x0c,0x0c,0xe1,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,0xe9,0x00, 0x00,0x00,0xee,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0xfd,0x05, 0x05,0x05,0xfd,0x27,0x24,0x27,0xfe,0x36,0x33,0x37,0xff,0x35,0x31,0x36,0xfe,0x34, 0x31,0x35,0xfb,0x34,0x31,0x35,0xf8,0x33,0x30,0x32,0xf3,0x31,0x2f,0x31,0xec,0x2f, 0x2e,0x2f,0xe5,0x1e,0x21,0x1e,0xdb,0x08,0x09,0x08,0xcf,0x00,0x00,0x00,0xbc,0x00, 0x00,0x00,0xa2,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x43,0x00, 0x00,0x00,0x2d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x40,0x00, 0x00,0x00,0x66,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0xdd,0x0c, 0x0d,0x0c,0xf1,0x26,0x27,0x26,0xfa,0x31,0x2e,0x31,0xfe,0x2f,0x2d,0x2f,0xff,0x30, 0x2e,0x30,0xff,0x30,0x2e,0x30,0xff,0x30,0x2e,0x30,0xff,0x30,0x2e,0x30,0xff,0x30, 0x2e,0x30,0xff,0x31,0x2f,0x31,0xff,0x31,0x2f,0x31,0xff,0x32,0x2f,0x32,0xff,0x31, 0x2f,0x32,0xff,0x30,0x2e,0x30,0xff,0x31,0x2f,0x31,0xff,0x30,0x2e,0x31,0xff,0x27, 0x29,0x29,0xfe,0x0f,0x12,0x0f,0xfc,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0xef,0x00, 0x00,0x00,0xdf,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xa9,0x00, 0x00,0x00,0xa1,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xa8,0x00, 0x00,0x00,0xb0,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0xdb,0x00, 0x00,0x00,0xea,0x0c,0x0d,0x0c,0xf4,0x29,0x28,0x28,0xfa,0x32,0x30,0x32,0xfd,0x2f, 0x2d,0x2f,0xff,0x2f,0x2d,0x2f,0xff,0x30,0x2e,0x30,0xff,0x31,0x2f,0x31,0xff,0x2a, 0x2a,0x2a,0xff,0x2e,0x2c,0x2e,0xff,0x32,0x2f,0x33,0xff,0x2e,0x2d,0x2f,0xff,0x2f, 0x2d,0x2f,0xff,0x31,0x2f,0x31,0xff,0x32,0x2f,0x32,0xff,0x33,0x30,0x33,0xff,0x33, 0x30,0x33,0xff,0x34,0x31,0x34,0xff,0x33,0x30,0x35,0xff,0x32,0x2f,0x33,0xff,0x32, 0x2f,0x33,0xff,0x32,0x2e,0x32,0xff,0x3c,0x37,0x3b,0xff,0x4d,0x44,0x48,0xff,0x3e, 0x3a,0x38,0xff,0x10,0x0f,0x0f,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00, 0x00,0x00,0xff,0x03,0x04,0x03,0xff,0x1c,0x1b,0x1c,0xff,0x2e,0x2c,0x2e,0xff,0x31, 0x2e,0x31,0xff,0x30,0x2e,0x30,0xff,0x30,0x2e,0x30,0xff,0x31,0x2f,0x31,0xff,0x32, 0x2f,0x32,0xff,0x33,0x30,0x34,0xff,0x1e,0x22,0x20,0xff,0x29,0x2d,0x27,0xff,0x2e, 0x30,0x2b,0xff,0x31,0x30,0x32,0xff,0x49,0x3d,0x49,0xff,0x3c,0x35,0x3c,0xff,0x38, 0x33,0x37,0xff,0x3a,0x34,0x3b,0xff,0x28,0x29,0x29,0xff,0x40,0x37,0x41,0xff,0x3b, 0x34,0x3c,0xff,0x3a,0x34,0x3b,0xff,0x3b,0x34,0x3c,0xfe,0x38,0x34,0x39,0xfb,0x13, 0x14,0x14,0xf5,0x01,0x01,0x01,0xe9,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0xd1,0x00, 0x00,0x00,0xce,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0xdf,0x01,0x01,0x01,0xed,0x01, 0x01,0x01,0xf6,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0xff,0x00, 0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00, 0x00,0x00,0xff,0x21,0x1b,0x1b,0xff,0x3c,0x39,0x3a,0xff,0x38,0x36,0x36,0xff,0x40, 0x34,0x40,0xff,0x34,0x30,0x34,0xff,0x33,0x30,0x33,0xff,0x34,0x30,0x34,0xff,0x32, 0x2f,0x33,0xff,0x34,0x30,0x34,0xff,0x34,0x30,0x34,0xff,0x34,0x30,0x34,0xff,0x34, 0x30,0x34,0xff,0x2a,0x26,0x2a,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00, 0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x07,0x06,0x07,0xff,0x1e, 0x19,0x1a,0xfe,0x19,0x15,0x15,0xfe,0x1c,0x17,0x17,0xfe,0x1a,0x16,0x16,0xfe,0x08, 0x07,0x07,0xfe,0x00,0x00,0x00,0xfe,0x06,0x06,0x06,0xff,0x42,0x3a,0x42,0xff,0x3c, 0x35,0x3c,0xff,0x3d,0x36,0x3d,0xff,0x3e,0x36,0x3f,0xff,0x3f,0x37,0x3f,0xff,0x3e, 0x37,0x3e,0xff,0x3b,0x36,0x3b,0xff,0x49,0x40,0x49,0xff,0x46,0x3d,0x46,0xff,0x44, 0x3c,0x45,0xff,0x43,0x3c,0x43,0xff,0x41,0x3a,0x41,0xff,0x40,0x39,0x40,0xff,0x3f, 0x39,0x3f,0xff,0x3d,0x38,0x3d,0xff,0x3d,0x38,0x3d,0xff,0x3b,0x36,0x3b,0xff,0x3c, 0x38,0x3c,0xff,0x3a,0x36,0x3a,0xff,0x3b,0x37,0x3c,0xff,0x3b,0x37,0x3c,0xff,0x3c, 0x38,0x3d,0xff,0x34,0x30,0x34,0xff,0x10,0x0e,0x10,0xff,0x00,0x00,0x00,0xfe,0x01, 0x01,0x01,0xfe,0x09,0x07,0x07,0xfd,0x15,0x13,0x13,0xfd,0x1a,0x16,0x17,0xfc,0x21, 0x1c,0x1d,0xfc,0x1f,0x1b,0x1b,0xfd,0x07,0x07,0x07,0xfd,0x02,0x02,0x02,0xfe,0x19, 0x15,0x15,0xfe,0x2c,0x26,0x26,0xfe,0x29,0x23,0x23,0xfd,0x10,0x0e,0x0e,0xfb,0x00, 0x00,0x00,0xf8,0x01,0x01,0x01,0xf6,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0xf8,0x00, 0x00,0x00,0xfa,0x00,0x00,0x00,0xfd,0x30,0x24,0x21,0xfe,0x8b,0x6b,0x60,0xfe,0x9b, 0x73,0x6d,0xff,0x62,0x4f,0x4b,0xff,0x1f,0x2d,0x23,0xff,0x27,0x30,0x27,0xff,0x28, 0x31,0x28,0xff,0x27,0x30,0x27,0xff,0x27,0x2a,0x27,0xff,0x2c,0x2b,0x2c,0xff,0x35, 0x33,0x35,0xff,0x38,0x36,0x38,0xff,0x34,0x32,0x34,0xff,0x32,0x31,0x34,0xff,0x35, 0x32,0x35,0xff,0x33,0x31,0x34,0xff,0x36,0x33,0x36,0xfd,0x2a,0x26,0x2a,0xf9,0x0a, 0x08,0x0a,0xf1,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0xb2,0x00, 0x00,0x00,0x99,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x61,0x00, 0x00,0x00,0x4f,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x1d,0x00, 0x00,0x00,0x1b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x51,0x00, 0x00,0x00,0x73,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0xb4,0x02,0x02,0x02,0xcb,0x12, 0x11,0x13,0xdc,0x2b,0x29,0x2b,0xea,0x32,0x30,0x32,0xf4,0x2f,0x2d,0x2f,0xfa,0x2c, 0x2a,0x2c,0xfc,0x36,0x36,0x37,0xfe,0x55,0x4c,0x56,0xff,0x5f,0x53,0x60,0xff,0x5e, 0x52,0x5f,0xff,0x5e,0x52,0x5f,0xff,0x5e,0x52,0x5f,0xff,0x5f,0x52,0x5f,0xff,0x5e, 0x52,0x5e,0xff,0x5e,0x52,0x5f,0xff,0x5f,0x52,0x5f,0xff,0x5e,0x52,0x5f,0xff,0x62, 0x54,0x62,0xff,0x67,0x57,0x67,0xff,0x52,0x4a,0x52,0xff,0x4b,0x46,0x4c,0xff,0x4d, 0x48,0x4e,0xff,0x4f,0x49,0x50,0xff,0x4f,0x49,0x50,0xff,0x4f,0x49,0x50,0xff,0x4d, 0x48,0x4e,0xff,0x4c,0x47,0x4d,0xff,0x4c,0x47,0x4d,0xff,0x4b,0x47,0x4c,0xff,0x4b, 0x46,0x4c,0xff,0x4c,0x46,0x4d,0xff,0x30,0x37,0x31,0xff,0x62,0x50,0x52,0xff,0x63, 0x54,0x61,0xff,0x4c,0x47,0x4d,0xff,0x49,0x46,0x4a,0xff,0x48,0x45,0x48,0xff,0x42, 0x42,0x43,0xff,0x3c,0x3e,0x3d,0xff,0x39,0x3b,0x39,0xff,0x34,0x39,0x35,0xff,0x34, 0x39,0x35,0xff,0x37,0x3b,0x37,0xfe,0x3d,0x3e,0x3d,0xfc,0x50,0x4b,0x51,0xf7,0x39, 0x31,0x39,0xeb,0x04,0x03,0x04,0xd6,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x91,0x00, 0x00,0x00,0x67,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x12,0x00, 0x00,0x00,0x08,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x04,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x2a,0x00, 0x00,0x00,0x46,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0xb8,0x06, 0x06,0x06,0xd3,0x45,0x45,0x45,0xe5,0x59,0x59,0x59,0xee,0x00,0x00,0x00,0xf4,0x00, 0x00,0x00,0xf5,0x0a,0x0a,0x0a,0xf6,0x1f,0x1f,0x1f,0xf7,0x2d,0x2d,0x2d,0xfa,0x26, 0x26,0x26,0xfc,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00, 0x00,0x00,0xfe,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0xf2,0x00, 0x00,0x00,0xe7,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0xc1,0x00, 0x00,0x00,0xb2,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x6e,0x00, 0x00,0x00,0x53,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x27,0x00, 0x00,0x00,0x2e,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0x95,0x00, 0x00,0x00,0xbe,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,0xfa,0x00, 0x00,0x00,0xfd,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00, 0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00, 0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00, 0x00,0x00,0xff,0x07,0x05,0x05,0xff,0x17,0x13,0x14,0xff,0x16,0x12,0x13,0xfd,0x0b, 0x09,0x09,0xfa,0x04,0x03,0x03,0xf4,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0xde,0x00, 0x00,0x00,0xd2,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0xcb,0x02, 0x02,0x02,0xce,0x02,0x02,0x02,0xd2,0x02,0x02,0x02,0xd6,0x01,0x01,0x01,0xdb,0x00, 0x00,0x00,0xe2,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0xf8,0x00, 0x00,0x00,0xfd,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00, 0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00, 0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00, 0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00, 0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x06,0x04,0x04,0xff,0x11,0x0e,0x0d,0xff,0x1a, 0x15,0x15,0xff,0x13,0x10,0x0f,0xff,0x13,0x0e,0x0f,0xff,0x24,0x1e,0x1f,0xff,0x0b, 0x09,0x0a,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00, 0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00, 0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x11, 0x0e,0x0e,0xff,0x3e,0x34,0x35,0xff,0x20,0x1a,0x1a,0xff,0x03,0x02,0x02,0xff,0x00, 0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00, 0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00, 0x00,0x00,0xfe,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0xf1,0x00, 0x00,0x00,0xe7,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,0xe1,0x00, 0x00,0x00,0xe9,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0xfc,0x00, 0x00,0x00,0xfe,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x06,0x06,0x06,0xff,0x29, 0x28,0x29,0xff,0x1c,0x1b,0x1c,0xff,0x2f,0x2f,0x2e,0xff,0x60,0x58,0x58,0xff,0x02, 0x02,0x02,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00, 0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00, 0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00, 0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x01, 0x01,0x01,0xff,0x16,0x11,0x13,0xff,0x44,0x39,0x3a,0xff,0x14,0x0f,0x10,0xff,0x13, 0x0f,0x10,0xff,0x1b,0x16,0x17,0xff,0x21,0x1c,0x1c,0xff,0x10,0x0c,0x0e,0xff,0x00, 0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00, 0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x01,0x01,0x01,0xff,0x04, 0x04,0x04,0xff,0x04,0x04,0x04,0xff,0x04,0x03,0x04,0xff,0x04,0x03,0x04,0xff,0x04, 0x04,0x04,0xff,0x04,0x04,0x04,0xff,0x04,0x03,0x04,0xff,0x04,0x03,0x04,0xff,0x04, 0x03,0x04,0xff,0x04,0x03,0x04,0xff,0x03,0x03,0x03,0xff,0x03,0x03,0x03,0xff,0x03, 0x03,0x03,0xff,0x03,0x03,0x03,0xff,0x03,0x03,0x03,0xff,0x02,0x02,0x02,0xff,0x00, 0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00, 0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00, 0x00,0x00,0xff,0x03,0x02,0x02,0xff,0x09,0x07,0x07,0xff,0x16,0x13,0x13,0xfe,0x3d, 0x34,0x35,0xfd,0x31,0x2a,0x2b,0xfb,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0xf8,0x00, 0x00,0x00,0xf8,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0xfd,0x03, 0x02,0x02,0xfe,0x37,0x2a,0x27,0xfe,0x85,0x64,0x5a,0xff,0x6c,0x57,0x50,0xff,0x28, 0x31,0x2c,0xff,0x28,0x31,0x28,0xff,0x2a,0x33,0x2a,0xff,0x1d,0x24,0x1e,0xff,0x05, 0x06,0x06,0xff,0x00,0x00,0x00,0xff,0x04,0x04,0x04,0xff,0x0a,0x0a,0x0a,0xff,0x07, 0x07,0x07,0xff,0x02,0x02,0x02,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00, 0x00,0x00,0xfd,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xeb,0x00, 0x00,0x00,0xdd,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xb1,0x00, 0x00,0x00,0xa3,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x60,0x00, 0x00,0x00,0x45,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x1a,0x00, 0x00,0x00,0x22,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x6d,0x00, 0x00,0x00,0x8b,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0xd6,0x00, 0x00,0x00,0xe8,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,0xfa,0x2f,0x2b,0x2f,0xfe,0x5c, 0x51,0x5c,0xff,0x5f,0x53,0x60,0xff,0x5e,0x52,0x5f,0xff,0x5e,0x52,0x5f,0xff,0x5f, 0x52,0x5f,0xff,0x5f,0x53,0x60,0xff,0x5d,0x51,0x5e,0xff,0x5e,0x52,0x5e,0xff,0x5f, 0x53,0x60,0xff,0x5c,0x51,0x5d,0xff,0x6c,0x5a,0x6c,0xff,0x57,0x4d,0x57,0xff,0x4c, 0x47,0x4c,0xff,0x4d,0x48,0x4d,0xff,0x4d,0x48,0x4e,0xff,0x4f,0x49,0x50,0xff,0x4f, 0x49,0x50,0xff,0x4e,0x49,0x4f,0xff,0x4c,0x47,0x4d,0xff,0x4d,0x48,0x4d,0xff,0x4b, 0x46,0x4b,0xff,0x4b,0x46,0x4b,0xff,0x4f,0x49,0x4f,0xff,0x3e,0x3f,0x3e,0xff,0x4c, 0x47,0x4c,0xff,0x29,0x32,0x2c,0xff,0x68,0x57,0x67,0xff,0x4f,0x4a,0x50,0xff,0x46, 0x43,0x46,0xff,0x47,0x43,0x47,0xff,0x3e,0x3f,0x3f,0xff,0x3a,0x3c,0x3b,0xff,0x36, 0x3a,0x37,0xff,0x34,0x39,0x35,0xff,0x33,0x39,0x34,0xff,0x3a,0x3c,0x3b,0xfc,0x45, 0x44,0x46,0xf9,0x4a,0x42,0x4b,0xf0,0x09,0x08,0x08,0xdf,0x00,0x00,0x00,0xc3,0x00, 0x00,0x00,0x9c,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x2d,0x00, 0x00,0x00,0x17,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x02,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x02,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x16,0x00, 0x00,0x00,0x28,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x89,0x00, 0x00,0x00,0xaf,0x01,0x01,0x01,0xd1,0x1f,0x1f,0x1f,0xe6,0x74,0x74,0x74,0xf3,0x1e, 0x1e,0x1e,0xf9,0x04,0x04,0x04,0xfa,0x23,0x23,0x23,0xfc,0x2f,0x2f,0x2f,0xfc,0x2f, 0x2f,0x2f,0xfd,0x2a,0x2a,0x2a,0xfd,0x28,0x28,0x28,0xfe,0x00,0x00,0x00,0xff,0x00, 0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0xfb,0x00, 0x00,0x00,0xf6,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xce,0x00, 0x00,0x00,0xbc,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0x90,0x00, 0x00,0x00,0x80,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x4d,0x00, 0x00,0x00,0x43,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x5b,0x00, 0x00,0x00,0x7c,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0xe3,0x05, 0x05,0x05,0xf3,0x23,0x1e,0x1e,0xfb,0x37,0x2e,0x2f,0xfe,0x27,0x21,0x21,0xff,0x0e, 0x0c,0x0c,0xff,0x01,0x01,0x01,0xff,0x06,0x04,0x05,0xff,0x06,0x04,0x05,0xff,0x06, 0x04,0x05,0xff,0x06,0x04,0x05,0xff,0x06,0x04,0x05,0xff,0x05,0x04,0x05,0xff,0x05, 0x04,0x05,0xff,0x04,0x03,0x04,0xff,0x06,0x05,0x05,0xff,0x2a,0x24,0x25,0xff,0x4b, 0x40,0x42,0xff,0x34,0x2c,0x2d,0xff,0x26,0x20,0x21,0xfd,0x28,0x23,0x22,0xf9,0x19, 0x15,0x15,0xf4,0x06,0x05,0x05,0xee,0x02,0x02,0x02,0xe9,0x04,0x04,0x04,0xe5,0x00, 0x00,0x00,0xe6,0x09,0x07,0x08,0xe8,0x2c,0x25,0x26,0xea,0x45,0x3a,0x3b,0xec,0x47, 0x3d,0x3e,0xee,0x21,0x1d,0x1e,0xef,0x0a,0x09,0x09,0xf1,0x13,0x10,0x10,0xf5,0x06, 0x05,0x05,0xf9,0x01,0x01,0x01,0xfc,0x06,0x05,0x04,0xfe,0x04,0x03,0x03,0xff,0x04, 0x03,0x04,0xff,0x06,0x04,0x05,0xff,0x01,0x00,0x01,0xff,0x02,0x01,0x01,0xff,0x21, 0x1c,0x1d,0xff,0x4f,0x43,0x44,0xff,0x3a,0x31,0x32,0xff,0x19,0x15,0x15,0xff,0x17, 0x13,0x13,0xff,0x19,0x15,0x15,0xff,0x1a,0x15,0x15,0xff,0x1a,0x16,0x16,0xff,0x1c, 0x18,0x18,0xff,0x1f,0x1a,0x1a,0xff,0x22,0x1c,0x1c,0xff,0x22,0x1d,0x1d,0xff,0x21, 0x1c,0x1c,0xff,0x1d,0x18,0x18,0xff,0x10,0x0e,0x0e,0xff,0x02,0x02,0x02,0xff,0x00, 0x00,0x00,0xff,0x25,0x1f,0x1f,0xff,0x18,0x13,0x14,0xff,0x03,0x03,0x03,0xff,0x03, 0x03,0x03,0xff,0x04,0x04,0x04,0xff,0x06,0x04,0x05,0xff,0x05,0x04,0x05,0xff,0x06, 0x04,0x05,0xff,0x06,0x04,0x05,0xff,0x06,0x04,0x05,0xff,0x06,0x04,0x05,0xff,0x05, 0x03,0x04,0xff,0x08,0x06,0x07,0xff,0x27,0x22,0x22,0xff,0x30,0x28,0x29,0xff,0x40, 0x36,0x37,0xff,0x30,0x29,0x2a,0xff,0x20,0x1b,0x1c,0xff,0x0d,0x0c,0x0c,0xff,0x02, 0x01,0x01,0xff,0x08,0x06,0x06,0xff,0x05,0x04,0x04,0xff,0x08,0x06,0x07,0xff,0x0e, 0x0b,0x0b,0xff,0x12,0x10,0x0f,0xff,0x14,0x10,0x11,0xff,0x15,0x12,0x12,0xfd,0x0c, 0x0a,0x0b,0xfc,0x03,0x02,0x02,0xf8,0x02,0x02,0x02,0xf3,0x03,0x03,0x03,0xee,0x04, 0x03,0x03,0xed,0x04,0x04,0x04,0xef,0x06,0x04,0x05,0xf3,0x05,0x04,0x05,0xf7,0x06, 0x04,0x05,0xfc,0x06,0x04,0x05,0xfe,0x06,0x04,0x05,0xff,0x06,0x04,0x05,0xff,0x04, 0x02,0x03,0xff,0x0a,0x09,0x09,0xff,0x50,0x4d,0x4e,0xff,0x5a,0x57,0x57,0xff,0x5a, 0x56,0x57,0xff,0x6e,0x64,0x65,0xff,0x07,0x05,0x06,0xff,0x05,0x04,0x04,0xff,0x06, 0x04,0x05,0xff,0x06,0x04,0x05,0xff,0x05,0x04,0x04,0xff,0x05,0x04,0x04,0xff,0x03, 0x03,0x03,0xff,0x02,0x02,0x02,0xff,0x02,0x01,0x01,0xff,0x01,0x01,0x01,0xff,0x01, 0x01,0x01,0xff,0x01,0x01,0x01,0xff,0x01,0x01,0x01,0xff,0x02,0x02,0x02,0xff,0x02, 0x02,0x02,0xff,0x02,0x02,0x02,0xff,0x04,0x04,0x04,0xff,0x3a,0x31,0x32,0xff,0x6b, 0x5b,0x5d,0xff,0x35,0x2c,0x2d,0xff,0x00,0x01,0x01,0xff,0x01,0x01,0x01,0xff,0x0f, 0x0d,0x0d,0xff,0x20,0x1a,0x1b,0xff,0x1d,0x17,0x18,0xff,0x06,0x05,0x06,0xff,0x00, 0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x02,0x01,0x01,0xff,0x00,0x00,0x00,0xff,0x00, 0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00, 0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00, 0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x02, 0x02,0x02,0xff,0x03,0x03,0x02,0xff,0x04,0x03,0x03,0xff,0x04,0x03,0x03,0xff,0x04, 0x03,0x03,0xff,0x04,0x03,0x03,0xff,0x05,0x04,0x04,0xff,0x06,0x04,0x05,0xff,0x06, 0x04,0x05,0xff,0x03,0x02,0x03,0xff,0x00,0x00,0x00,0xff,0x01,0x00,0x01,0xff,0x05, 0x04,0x04,0xff,0x12,0x0f,0x0f,0xff,0x20,0x1c,0x1c,0xff,0x24,0x1f,0x20,0xff,0x21, 0x1c,0x1c,0xff,0x38,0x30,0x30,0xff,0x59,0x4d,0x4e,0xfe,0x30,0x2a,0x2a,0xfd,0x02, 0x02,0x02,0xfb,0x02,0x02,0x02,0xfb,0x02,0x02,0x02,0xfb,0x02,0x01,0x01,0xfb,0x01, 0x01,0x01,0xfd,0x02,0x02,0x02,0xfe,0x00,0x00,0x00,0xfe,0x08,0x07,0x06,0xff,0x28, 0x1f,0x1c,0xff,0x2e,0x25,0x23,0xff,0x19,0x1b,0x1a,0xff,0x1b,0x20,0x1a,0xff,0x22, 0x28,0x22,0xff,0x15,0x17,0x14,0xff,0x04,0x01,0x03,0xff,0x06,0x04,0x05,0xff,0x04, 0x03,0x03,0xff,0x03,0x02,0x03,0xff,0x03,0x02,0x03,0xff,0x04,0x03,0x03,0xff,0x04, 0x03,0x04,0xff,0x06,0x04,0x05,0xff,0x06,0x04,0x05,0xff,0x06,0x04,0x05,0xfd,0x06, 0x04,0x05,0xfa,0x05,0x04,0x04,0xf5,0x05,0x04,0x04,0xed,0x05,0x03,0x03,0xe6,0x03, 0x03,0x03,0xde,0x02,0x03,0x03,0xd7,0x02,0x01,0x01,0xcc,0x01,0x00,0x00,0xbd,0x00, 0x00,0x00,0xa5,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x41,0x00, 0x00,0x00,0x27,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x1e,0x00, 0x00,0x00,0x2f,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x82,0x00, 0x00,0x00,0xa3,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0xed,0x03, 0x04,0x03,0xf8,0x4a,0x40,0x4a,0xfc,0x64,0x56,0x65,0xff,0x5e,0x52,0x5f,0xff,0x5e, 0x52,0x5f,0xff,0x5e,0x52,0x5f,0xff,0x60,0x53,0x60,0xff,0x5e,0x51,0x5f,0xff,0x5e, 0x52,0x5e,0xff,0x5e,0x52,0x5f,0xff,0x5d,0x52,0x5e,0xff,0x62,0x54,0x63,0xff,0x67, 0x57,0x67,0xff,0x50,0x49,0x50,0xff,0x4a,0x46,0x4a,0xff,0x4e,0x49,0x4e,0xff,0x4e, 0x49,0x4f,0xff,0x4f,0x49,0x50,0xff,0x4f,0x49,0x50,0xff,0x4d,0x48,0x4e,0xff,0x4d, 0x48,0x4d,0xff,0x4d,0x48,0x4d,0xff,0x4b,0x46,0x4b,0xff,0x4d,0x48,0x4d,0xff,0x3e, 0x3e,0x3f,0xff,0x40,0x40,0x41,0xff,0x49,0x45,0x4a,0xff,0x41,0x41,0x42,0xff,0x54, 0x4b,0x54,0xff,0x48,0x45,0x48,0xff,0x45,0x43,0x46,0xff,0x40,0x41,0x41,0xff,0x3c, 0x3d,0x3c,0xff,0x39,0x3b,0x39,0xff,0x34,0x39,0x35,0xff,0x34,0x39,0x35,0xff,0x37, 0x3a,0x37,0xfd,0x3e,0x3f,0x3f,0xfb,0x53,0x4c,0x53,0xf3,0x18,0x15,0x19,0xe6,0x01, 0x01,0x01,0xce,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x59,0x00, 0x00,0x00,0x36,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x05,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x0e,0x00, 0x00,0x00,0x19,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x60,0x00, 0x00,0x00,0x84,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xc8,0x09,0x09,0x09,0xe1,0x4f, 0x4f,0x4f,0xf0,0x43,0x43,0x43,0xf9,0x16,0x16,0x16,0xfc,0x2f,0x2f,0x2f,0xfe,0x2c, 0x2c,0x2c,0xff,0x16,0x16,0x16,0xff,0x04,0x04,0x04,0xff,0x00,0x00,0x00,0xff,0x00, 0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xfe,0x00, 0x00,0x00,0xfd,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0xea,0x00, 0x00,0x00,0xdc,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xaa,0x00, 0x00,0x00,0x9f,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x88,0x00, 0x00,0x00,0x7e,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x68,0x00, 0x00,0x00,0x6e,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0xb9,0x00, 0x00,0x00,0xd6,0x04,0x03,0x03,0xeb,0x27,0x22,0x22,0xf7,0x59,0x4b,0x4c,0xfc,0x57, 0x4a,0x4b,0xff,0x3c,0x32,0x33,0xff,0x3f,0x35,0x36,0xff,0x1f,0x1b,0x1b,0xff,0x18, 0x14,0x14,0xff,0x1b,0x16,0x16,0xff,0x1b,0x16,0x16,0xff,0x1b,0x17,0x17,0xff,0x1b, 0x16,0x17,0xff,0x1b,0x16,0x17,0xff,0x1b,0x16,0x17,0xff,0x1a,0x15,0x16,0xff,0x2a, 0x24,0x24,0xff,0x40,0x38,0x38,0xff,0x31,0x29,0x29,0xff,0x23,0x1d,0x1d,0xff,0x25, 0x1f,0x20,0xfe,0x2f,0x28,0x29,0xfc,0x3e,0x36,0x36,0xfa,0x3c,0x33,0x33,0xf8,0x21, 0x1c,0x1c,0xf6,0x11,0x0e,0x0e,0xf5,0x1b,0x17,0x18,0xf5,0x30,0x29,0x29,0xf7,0x3d, 0x34,0x35,0xf8,0x5f,0x51,0x52,0xf9,0x7a,0x69,0x6a,0xfa,0x6b,0x5c,0x5d,0xfa,0x59, 0x4d,0x4e,0xfa,0x40,0x37,0x38,0xfb,0x3a,0x32,0x32,0xfd,0x2e,0x26,0x28,0xfe,0x2c, 0x25,0x26,0xff,0x31,0x2a,0x2a,0xff,0x1d,0x17,0x19,0xff,0x15,0x11,0x12,0xff,0x2d, 0x26,0x27,0xff,0x5e,0x51,0x52,0xff,0x8c,0x79,0x7a,0xff,0x96,0x81,0x82,0xff,0x60, 0x52,0x53,0xff,0x36,0x2d,0x2e,0xff,0x32,0x2a,0x2b,0xff,0x33,0x2b,0x2c,0xff,0x33, 0x2b,0x2c,0xff,0x33,0x2b,0x2c,0xff,0x32,0x2b,0x2b,0xff,0x32,0x2a,0x2b,0xff,0x2f, 0x28,0x28,0xff,0x27,0x21,0x21,0xff,0x1b,0x17,0x17,0xff,0x0e,0x0c,0x0c,0xff,0x07, 0x07,0x07,0xff,0x06,0x05,0x05,0xff,0x03,0x03,0x02,0xff,0x19,0x14,0x16,0xff,0x28, 0x22,0x23,0xff,0x17,0x14,0x13,0xff,0x13,0x10,0x10,0xff,0x18,0x14,0x14,0xff,0x1a, 0x16,0x17,0xff,0x1b,0x16,0x17,0xff,0x1b,0x16,0x17,0xff,0x1b,0x17,0x17,0xff,0x1b, 0x16,0x16,0xff,0x1b,0x16,0x16,0xff,0x1b,0x16,0x16,0xff,0x1b,0x17,0x17,0xff,0x1c, 0x18,0x17,0xff,0x1d,0x19,0x18,0xff,0x3c,0x34,0x34,0xff,0x3d,0x35,0x35,0xff,0x3a, 0x32,0x32,0xff,0x3e,0x35,0x37,0xff,0x3a,0x30,0x32,0xff,0x35,0x2d,0x2d,0xff,0x39, 0x30,0x32,0xff,0x35,0x2e,0x2e,0xff,0x30,0x29,0x29,0xff,0x2a,0x24,0x24,0xff,0x24, 0x1e,0x1e,0xff,0x27,0x21,0x22,0xfe,0x25,0x1f,0x20,0xfd,0x0a,0x08,0x08,0xfc,0x0a, 0x09,0x09,0xfa,0x10,0x0d,0x0d,0xf8,0x15,0x11,0x11,0xf7,0x19,0x15,0x15,0xf9,0x1a, 0x16,0x17,0xfa,0x1b,0x16,0x17,0xfc,0x1b,0x16,0x17,0xfe,0x1b,0x17,0x17,0xff,0x1b, 0x16,0x16,0xff,0x1a,0x15,0x15,0xff,0x27,0x22,0x22,0xff,0x5a,0x54,0x54,0xff,0x71, 0x68,0x69,0xff,0x43,0x3d,0x3d,0xff,0x28,0x23,0x23,0xff,0x26,0x1e,0x1f,0xff,0x1b, 0x16,0x16,0xff,0x1b,0x16,0x16,0xff,0x1b,0x16,0x16,0xff,0x1a,0x15,0x16,0xff,0x19, 0x15,0x15,0xff,0x16,0x13,0x13,0xff,0x12,0x0f,0x0f,0xff,0x0d,0x0a,0x0b,0xff,0x08, 0x07,0x07,0xff,0x05,0x04,0x04,0xff,0x04,0x04,0x04,0xff,0x06,0x05,0x05,0xff,0x08, 0x07,0x07,0xff,0x0c,0x0a,0x0b,0xff,0x0e,0x0c,0x0c,0xff,0x0d,0x0b,0x0b,0xff,0x0f, 0x0c,0x0d,0xff,0x67,0x5b,0x5c,0xff,0x98,0x86,0x88,0xff,0x6e,0x62,0x63,0xff,0x34, 0x34,0x34,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x07,0x06,0x06,0xff,0x19, 0x15,0x15,0xff,0x23,0x1c,0x1d,0xff,0x0e,0x0d,0x0c,0xff,0x0b,0x09,0x09,0xff,0x25, 0x1f,0x1f,0xff,0x00,0x00,0x00,0xff,0x03,0x03,0x03,0xff,0x08,0x07,0x07,0xff,0x0d, 0x0b,0x0b,0xff,0x0e,0x0b,0x0b,0xff,0x0e,0x0b,0x0c,0xff,0x0b,0x0a,0x09,0xff,0x08, 0x07,0x06,0xff,0x06,0x05,0x05,0xff,0x06,0x05,0x05,0xff,0x07,0x05,0x05,0xff,0x0b, 0x09,0x09,0xff,0x0f,0x0d,0x0d,0xff,0x14,0x11,0x11,0xff,0x18,0x14,0x14,0xff,0x19, 0x15,0x17,0xff,0x1a,0x16,0x17,0xff,0x1b,0x16,0x18,0xff,0x1b,0x17,0x17,0xff,0x1b, 0x16,0x16,0xff,0x19,0x14,0x15,0xff,0x16,0x10,0x11,0xff,0x27,0x20,0x21,0xff,0x43, 0x3b,0x3c,0xff,0x37,0x2d,0x2f,0xff,0x32,0x2b,0x2b,0xff,0x37,0x2e,0x2f,0xff,0x33, 0x2a,0x2c,0xff,0x29,0x22,0x22,0xff,0x20,0x1a,0x1a,0xff,0x3c,0x33,0x33,0xff,0x67, 0x59,0x5a,0xff,0x45,0x3b,0x3c,0xfe,0x19,0x16,0x16,0xfe,0x0b,0x0a,0x09,0xfd,0x09, 0x08,0x08,0xfe,0x06,0x05,0x05,0xfd,0x05,0x04,0x04,0xfe,0x06,0x05,0x05,0xfe,0x0b, 0x09,0x0a,0xff,0x0d,0x0b,0x0b,0xff,0x0c,0x0b,0x0b,0xff,0x10,0x0d,0x0e,0xff,0x17, 0x12,0x12,0xff,0x1b,0x16,0x16,0xff,0x1d,0x1b,0x19,0xff,0x1c,0x19,0x18,0xff,0x1a, 0x15,0x16,0xff,0x1b,0x16,0x16,0xff,0x1b,0x16,0x16,0xff,0x1b,0x16,0x16,0xff,0x1b, 0x16,0x16,0xff,0x1b,0x16,0x16,0xff,0x1b,0x16,0x16,0xff,0x1b,0x16,0x16,0xff,0x1b, 0x17,0x17,0xff,0x1b,0x17,0x17,0xff,0x1b,0x16,0x17,0xfd,0x1b,0x16,0x17,0xfa,0x19, 0x15,0x16,0xf8,0x17,0x13,0x14,0xf5,0x13,0x10,0x10,0xf2,0x0e,0x0c,0x0c,0xee,0x09, 0x08,0x08,0xe7,0x05,0x04,0x04,0xdb,0x01,0x01,0x01,0xc6,0x00,0x00,0x00,0xa7,0x00, 0x00,0x00,0x80,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x1c,0x00, 0x00,0x00,0x10,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x2c,0x00, 0x00,0x00,0x44,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0xaf,0x00, 0x00,0x00,0xd0,0x00,0x00,0x00,0xe8,0x02,0x03,0x02,0xf5,0x35,0x34,0x35,0xfc,0x5b, 0x51,0x5c,0xfe,0x61,0x54,0x62,0xff,0x5f,0x53,0x60,0xff,0x5f,0x53,0x60,0xff,0x5e, 0x52,0x5f,0xff,0x5e,0x52,0x5e,0xff,0x5e,0x52,0x5f,0xff,0x5e,0x52,0x5f,0xff,0x5b, 0x51,0x5d,0xff,0x6d,0x5b,0x6d,0xff,0x57,0x4e,0x57,0xff,0x4b,0x47,0x4c,0xff,0x4c, 0x48,0x4c,0xff,0x4f,0x49,0x4f,0xff,0x4f,0x49,0x50,0xff,0x4f,0x49,0x50,0xff,0x4e, 0x48,0x4f,0xff,0x4e,0x49,0x4f,0xff,0x4c,0x47,0x4d,0xff,0x4d,0x48,0x4d,0xff,0x4b, 0x47,0x4c,0xff,0x4f,0x49,0x4f,0xff,0x2e,0x34,0x2e,0xff,0x47,0x44,0x48,0xff,0x4d, 0x48,0x4e,0xff,0x4a,0x46,0x4a,0xff,0x56,0x4c,0x56,0xff,0x53,0x4b,0x54,0xff,0x44, 0x42,0x45,0xff,0x3c,0x3e,0x3c,0xff,0x39,0x3b,0x39,0xff,0x34,0x39,0x35,0xff,0x34, 0x39,0x35,0xff,0x34,0x39,0x35,0xfd,0x38,0x3c,0x38,0xfc,0x4a,0x48,0x4b,0xf6,0x32, 0x2b,0x32,0xea,0x03,0x03,0x03,0xd6,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x92,0x00, 0x00,0x00,0x67,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x11,0x00, 0x00,0x00,0x08,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x0b,0x00, 0x00,0x00,0x13,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x48,0x00, 0x00,0x00,0x66,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xc5,0x02, 0x02,0x02,0xdd,0x26,0x26,0x26,0xee,0x71,0x71,0x71,0xf7,0x37,0x37,0x37,0xfd,0x29, 0x29,0x29,0xfe,0x14,0x14,0x14,0xff,0x03,0x03,0x03,0xff,0x00,0x00,0x00,0xff,0x00, 0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x01, 0x01,0x01,0xfe,0x0b,0x0b,0x0b,0xfd,0x13,0x13,0x13,0xfc,0x12,0x12,0x12,0xf8,0x0f, 0x0f,0x0f,0xf3,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xd1,0x00, 0x00,0x00,0xc4,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xaf,0x00, 0x00,0x00,0xaf,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0xa4,0x00, 0x00,0x00,0x9e,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0xaa,0x00, 0x00,0x00,0xbd,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0xe5,0x1d,0x18,0x18,0xf2,0x4e, 0x42,0x43,0xfa,0x3e,0x35,0x36,0xfe,0x1c,0x17,0x17,0xfe,0x2a,0x23,0x23,0xff,0x51, 0x44,0x45,0xff,0x49,0x3d,0x3e,0xff,0x33,0x2b,0x2c,0xff,0x31,0x29,0x29,0xff,0x32, 0x2a,0x2a,0xff,0x33,0x2b,0x2b,0xff,0x35,0x2d,0x2c,0xff,0x37,0x2d,0x2f,0xff,0x38, 0x2e,0x2f,0xff,0x40,0x36,0x36,0xff,0x57,0x4a,0x4b,0xff,0x4f,0x43,0x44,0xff,0x33, 0x29,0x2a,0xff,0x33,0x2a,0x2b,0xff,0x31,0x29,0x2a,0xff,0x30,0x28,0x29,0xff,0x37, 0x2e,0x2f,0xfe,0x47,0x3c,0x3d,0xfe,0x58,0x4c,0x4c,0xfc,0x51,0x46,0x46,0xfc,0x41, 0x37,0x38,0xfc,0x32,0x2a,0x2a,0xfc,0x17,0x14,0x14,0xfe,0x16,0x13,0x14,0xfe,0x28, 0x22,0x23,0xfe,0x63,0x55,0x55,0xfe,0x84,0x71,0x72,0xfe,0x44,0x3a,0x3b,0xfe,0x2d, 0x25,0x26,0xff,0x38,0x2e,0x30,0xff,0x48,0x3d,0x3f,0xff,0x5d,0x50,0x51,0xff,0x63, 0x55,0x57,0xff,0x74,0x65,0x66,0xff,0x8c,0x7a,0x7c,0xff,0x98,0x85,0x86,0xff,0x71, 0x60,0x63,0xff,0x4a,0x3e,0x40,0xff,0x3b,0x32,0x33,0xff,0x34,0x2c,0x2d,0xff,0x34, 0x2c,0x2d,0xff,0x34,0x2b,0x2c,0xff,0x34,0x2b,0x2c,0xff,0x34,0x2b,0x2c,0xff,0x33, 0x2b,0x2b,0xff,0x33,0x2b,0x2c,0xff,0x32,0x29,0x2b,0xff,0x2f,0x28,0x28,0xff,0x2b, 0x24,0x25,0xff,0x24,0x1e,0x1f,0xff,0x19,0x15,0x16,0xff,0x11,0x0e,0x0e,0xff,0x0d, 0x0a,0x0b,0xff,0x1b,0x16,0x17,0xff,0x38,0x30,0x31,0xff,0x2d,0x25,0x26,0xff,0x2b, 0x24,0x25,0xff,0x33,0x2a,0x2b,0xff,0x36,0x2d,0x2e,0xff,0x36,0x2d,0x2e,0xff,0x35, 0x2c,0x2c,0xff,0x32,0x2a,0x2b,0xff,0x32,0x2a,0x2a,0xff,0x32,0x2a,0x2a,0xff,0x32, 0x2a,0x2a,0xff,0x32,0x2a,0x2a,0xff,0x31,0x29,0x29,0xff,0x30,0x28,0x29,0xff,0x30, 0x28,0x29,0xff,0x2f,0x27,0x28,0xff,0x34,0x2b,0x2c,0xff,0x5b,0x4d,0x4e,0xff,0x55, 0x47,0x49,0xff,0x42,0x38,0x38,0xff,0x43,0x38,0x39,0xff,0x3e,0x34,0x35,0xff,0x33, 0x2b,0x2c,0xff,0x26,0x21,0x21,0xff,0x1a,0x16,0x17,0xff,0x1a,0x16,0x16,0xff,0x31, 0x29,0x29,0xff,0x16,0x11,0x12,0xfe,0x1a,0x15,0x15,0xfe,0x24,0x1f,0x20,0xfd,0x2f, 0x27,0x27,0xfc,0x35,0x2b,0x2c,0xfd,0x36,0x2d,0x2e,0xfd,0x36,0x2d,0x2e,0xfe,0x34, 0x2c,0x2b,0xff,0x32,0x2a,0x2b,0xff,0x32,0x2a,0x2a,0xff,0x31,0x28,0x29,0xff,0x3f, 0x37,0x37,0xff,0x78,0x6c,0x6d,0xff,0x70,0x62,0x63,0xff,0x37,0x2d,0x2e,0xff,0x2e, 0x26,0x27,0xff,0x2e,0x26,0x27,0xff,0x32,0x2a,0x2a,0xff,0x32,0x2a,0x2a,0xff,0x32, 0x2a,0x2a,0xff,0x31,0x29,0x2a,0xff,0x2e,0x26,0x27,0xff,0x28,0x22,0x22,0xff,0x21, 0x1b,0x1c,0xff,0x18,0x14,0x15,0xff,0x10,0x0d,0x0e,0xff,0x0a,0x09,0x09,0xff,0x0a, 0x09,0x09,0xff,0x0f,0x0c,0x0d,0xff,0x16,0x13,0x13,0xff,0x1e,0x18,0x19,0xff,0x21, 0x1b,0x1b,0xff,0x1e,0x19,0x1a,0xff,0x1a,0x17,0x17,0xff,0x5c,0x4f,0x51,0xff,0xa2, 0x90,0x92,0xff,0x86,0x7a,0x7b,0xff,0x5c,0x56,0x57,0xff,0x00,0x00,0x00,0xff,0x00, 0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x02,0x01,0x02,0xff,0x15,0x11,0x12,0xff,0x27, 0x21,0x21,0xff,0x41,0x37,0x38,0xff,0x4f,0x41,0x43,0xff,0x32,0x2b,0x2c,0xff,0x33, 0x2b,0x2c,0xff,0x30,0x2a,0x2a,0xff,0x25,0x1f,0x20,0xff,0x28,0x21,0x22,0xff,0x25, 0x1e,0x1f,0xff,0x1c,0x18,0x18,0xff,0x14,0x12,0x11,0xff,0x0e,0x0c,0x0c,0xff,0x0d, 0x0b,0x0b,0xff,0x10,0x0d,0x0e,0xff,0x19,0x14,0x15,0xff,0x24,0x1e,0x1e,0xff,0x2d, 0x26,0x26,0xff,0x33,0x2a,0x2b,0xff,0x36,0x2c,0x2c,0xff,0x36,0x2d,0x2d,0xff,0x33, 0x2b,0x2c,0xff,0x31,0x29,0x2a,0xff,0x2f,0x26,0x27,0xff,0x40,0x37,0x37,0xff,0x75, 0x6b,0x6b,0xff,0x9d,0x93,0x94,0xff,0x99,0x89,0x8a,0xff,0x5e,0x4e,0x4f,0xff,0x3d, 0x33,0x34,0xff,0x38,0x2f,0x30,0xff,0x31,0x29,0x2a,0xff,0x2f,0x27,0x28,0xff,0x2e, 0x26,0x27,0xff,0x42,0x37,0x38,0xff,0x6c,0x5c,0x5d,0xff,0x55,0x4a,0x4b,0xff,0x21, 0x1c,0x1d,0xff,0x18,0x13,0x14,0xfe,0x11,0x0e,0x0e,0xfe,0x0b,0x09,0x09,0xfe,0x0a, 0x08,0x08,0xff,0x0d,0x0b,0x0b,0xff,0x14,0x11,0x11,0xff,0x1d,0x19,0x18,0xff,0x25, 0x20,0x20,0xff,0x2c,0x24,0x25,0xff,0x30,0x28,0x28,0xff,0x31,0x29,0x29,0xff,0x31, 0x28,0x29,0xff,0x31,0x29,0x29,0xff,0x32,0x2a,0x2a,0xff,0x32,0x2a,0x2a,0xff,0x32, 0x2a,0x2a,0xff,0x32,0x2a,0x2a,0xff,0x32,0x2a,0x2a,0xff,0x32,0x2a,0x2a,0xff,0x32, 0x2a,0x2a,0xff,0x32,0x2a,0x2a,0xff,0x32,0x2a,0x2b,0xff,0x33,0x2b,0x2b,0xff,0x35, 0x2d,0x2d,0xff,0x36,0x2d,0x2f,0xfe,0x35,0x2c,0x2d,0xfe,0x31,0x28,0x29,0xfc,0x2a, 0x23,0x23,0xfb,0x20,0x1a,0x1a,0xf9,0x13,0x11,0x11,0xf5,0x0b,0x09,0x09,0xec,0x05, 0x04,0x04,0xdb,0x01,0x00,0x00,0xbe,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x69,0x00, 0x00,0x00,0x40,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0b,0x00, 0x00,0x00,0x10,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x55,0x00, 0x00,0x00,0x7e,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0xe7,0x00, 0x04,0x01,0xf5,0x07,0x12,0x0b,0xfc,0x23,0x2b,0x25,0xff,0x35,0x39,0x35,0xff,0x56, 0x4d,0x57,0xff,0x62,0x54,0x62,0xff,0x5e,0x52,0x5e,0xff,0x5e,0x52,0x5f,0xff,0x5d, 0x51,0x5e,0xff,0x5d,0x51,0x5e,0xff,0x63,0x54,0x63,0xff,0x65,0x55,0x64,0xff,0x4f, 0x49,0x4f,0xff,0x4c,0x47,0x4b,0xff,0x4d,0x48,0x4e,0xff,0x4f,0x49,0x50,0xff,0x4f, 0x49,0x50,0xff,0x4f,0x49,0x50,0xff,0x4d,0x48,0x4e,0xff,0x4f,0x49,0x50,0xff,0x4e, 0x48,0x4e,0xff,0x4a,0x46,0x4b,0xff,0x4c,0x47,0x4c,0xff,0x4d,0x47,0x4d,0xff,0x45, 0x43,0x45,0xff,0x44,0x42,0x45,0xff,0x4a,0x46,0x4b,0xff,0x4b,0x47,0x4c,0xff,0x4c, 0x47,0x4c,0xff,0x4c,0x48,0x4d,0xff,0x42,0x42,0x43,0xff,0x3a,0x3d,0x3b,0xff,0x37, 0x3b,0x38,0xff,0x35,0x3a,0x36,0xff,0x35,0x3a,0x36,0xfe,0x36,0x3a,0x37,0xfd,0x47, 0x45,0x47,0xf8,0x45,0x3e,0x45,0xee,0x07,0x06,0x07,0xdd,0x00,0x00,0x00,0xc1,0x00, 0x00,0x00,0x9e,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x2d,0x00, 0x00,0x00,0x17,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x06,0x00, 0x00,0x00,0x0c,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x3a,0x00, 0x00,0x00,0x52,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0xac,0x00, 0x00,0x00,0xc6,0x01,0x01,0x01,0xdd,0x1a,0x1a,0x1a,0xed,0x72,0x72,0x72,0xf6,0x5a, 0x5a,0x5a,0xfc,0x0d,0x0d,0x0d,0xfe,0x05,0x05,0x05,0xff,0x00,0x00,0x00,0xff,0x01, 0x01,0x01,0xff,0x0d,0x0d,0x0d,0xff,0x19,0x19,0x19,0xff,0x25,0x25,0x25,0xff,0x2e, 0x2e,0x2e,0xff,0x36,0x36,0x36,0xfe,0x38,0x38,0x38,0xfd,0x33,0x33,0x33,0xfb,0x2f, 0x2f,0x2f,0xf8,0x30,0x30,0x30,0xf3,0x27,0x27,0x27,0xee,0x00,0x00,0x00,0xe8,0x00, 0x00,0x00,0xe1,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0xd2,0x00, 0x00,0x00,0xcf,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0xd1,0x01,0x01,0x01,0xd2,0x04, 0x03,0x03,0xd1,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0xc7,0x00, 0x00,0x00,0xc9,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0xe6,0x08, 0x07,0x07,0xf1,0x35,0x2d,0x2d,0xf8,0x43,0x39,0x3a,0xfc,0x14,0x11,0x10,0xff,0x18, 0x15,0x15,0xff,0x30,0x28,0x29,0xff,0x51,0x45,0x46,0xff,0x68,0x5a,0x5b,0xff,0x58, 0x4b,0x4c,0xff,0x49,0x3d,0x3e,0xff,0x4c,0x40,0x41,0xff,0x4e,0x42,0x43,0xff,0x53, 0x46,0x47,0xff,0x58,0x4a,0x4b,0xff,0x5b,0x4c,0x4e,0xff,0x6d,0x5d,0x5f,0xff,0x7e, 0x6d,0x6e,0xff,0x68,0x58,0x59,0xff,0x58,0x4a,0x4b,0xff,0x56,0x48,0x49,0xff,0x51, 0x44,0x45,0xff,0x4c,0x41,0x42,0xff,0x49,0x3e,0x3f,0xff,0x4a,0x3e,0x3f,0xff,0x53, 0x47,0x47,0xfe,0x55,0x48,0x49,0xfe,0x41,0x36,0x38,0xff,0x25,0x20,0x20,0xff,0x13, 0x10,0x10,0xff,0x07,0x06,0x06,0xff,0x05,0x03,0x03,0xff,0x2a,0x23,0x23,0xff,0x3e, 0x35,0x35,0xff,0x2e,0x26,0x27,0xff,0x30,0x28,0x28,0xff,0x40,0x35,0x36,0xff,0x53, 0x47,0x48,0xff,0x6c,0x5d,0x5f,0xff,0x83,0x72,0x74,0xff,0x87,0x76,0x77,0xff,0x7a, 0x6a,0x6a,0xff,0x63,0x54,0x55,0xff,0x4b,0x3f,0x40,0xff,0x44,0x3a,0x3b,0xff,0x48, 0x3e,0x3f,0xff,0x4b,0x40,0x41,0xff,0x4b,0x40,0x41,0xff,0x4b,0x40,0x41,0xff,0x4b, 0x40,0x41,0xff,0x4c,0x41,0x42,0xff,0x50,0x44,0x45,0xff,0x55,0x47,0x48,0xff,0x57, 0x49,0x4a,0xff,0x55,0x48,0x49,0xff,0x4e,0x42,0x43,0xff,0x40,0x36,0x37,0xff,0x2c, 0x25,0x26,0xff,0x1f,0x1a,0x1a,0xff,0x19,0x15,0x16,0xff,0x1f,0x1b,0x1a,0xff,0x31, 0x29,0x29,0xff,0x40,0x35,0x36,0xff,0x4e,0x42,0x42,0xff,0x56,0x48,0x48,0xff,0x57, 0x49,0x4a,0xff,0x56,0x49,0x4a,0xff,0x52,0x45,0x46,0xff,0x4e,0x41,0x42,0xff,0x4c, 0x40,0x41,0xff,0x4c,0x40,0x41,0xff,0x4c,0x40,0x41,0xff,0x4c,0x40,0x41,0xff,0x4c, 0x40,0x41,0xff,0x4c,0x40,0x41,0xff,0x4b,0x40,0x41,0xff,0x4a,0x3f,0x40,0xff,0x53, 0x47,0x48,0xff,0x67,0x58,0x59,0xff,0x58,0x4a,0x4b,0xff,0x54,0x46,0x48,0xff,0x53, 0x46,0x47,0xff,0x52,0x45,0x46,0xff,0x4a,0x3e,0x3f,0xff,0x3b,0x32,0x33,0xff,0x28, 0x21,0x22,0xff,0x1e,0x18,0x18,0xff,0x3b,0x32,0x32,0xff,0x27,0x21,0x22,0xff,0x2f, 0x26,0x27,0xff,0x43,0x39,0x3a,0xff,0x51,0x44,0x45,0xfe,0x57,0x49,0x4a,0xff,0x58, 0x4a,0x4b,0xff,0x56,0x48,0x49,0xff,0x52,0x45,0x46,0xff,0x4d,0x40,0x41,0xff,0x4b, 0x3f,0x40,0xff,0x56,0x49,0x4a,0xff,0x5a,0x4c,0x4e,0xff,0x53,0x46,0x48,0xff,0x4e, 0x42,0x43,0xff,0x4c,0x41,0x42,0xff,0x4c,0x40,0x41,0xff,0x4c,0x40,0x41,0xff,0x4c, 0x40,0x41,0xff,0x4c,0x40,0x41,0xff,0x4c,0x40,0x41,0xff,0x4b,0x3f,0x40,0xff,0x46, 0x3b,0x3c,0xff,0x3e,0x34,0x35,0xff,0x34,0x2b,0x2c,0xff,0x25,0x1f,0x1f,0xff,0x17, 0x13,0x13,0xff,0x10,0x0e,0x0e,0xff,0x10,0x0e,0x0e,0xff,0x1a,0x16,0x16,0xff,0x28, 0x21,0x22,0xff,0x36,0x2c,0x2d,0xff,0x49,0x3f,0x3f,0xff,0x44,0x3b,0x3c,0xff,0x2c, 0x25,0x25,0xff,0x42,0x37,0x39,0xff,0x67,0x5a,0x5b,0xff,0x72,0x66,0x67,0xff,0x4f, 0x43,0x44,0xff,0x12,0x10,0x10,0xff,0x08,0x07,0x07,0xff,0x0b,0x09,0x09,0xff,0x1c, 0x18,0x18,0xff,0x26,0x1f,0x21,0xff,0x21,0x1c,0x1c,0xff,0x40,0x35,0x37,0xff,0x4a, 0x3e,0x40,0xff,0x4b,0x3f,0x3f,0xff,0x49,0x3d,0x3d,0xff,0x4d,0x40,0x42,0xff,0x45, 0x39,0x3a,0xff,0x45,0x39,0x3a,0xff,0x3e,0x33,0x34,0xff,0x31,0x28,0x29,0xff,0x21, 0x1b,0x1c,0xff,0x16,0x12,0x13,0xff,0x16,0x12,0x12,0xff,0x1d,0x18,0x19,0xff,0x2c, 0x25,0x26,0xff,0x40,0x35,0x36,0xff,0x4f,0x42,0x43,0xff,0x56,0x49,0x4a,0xff,0x5a, 0x4c,0x4d,0xff,0x5b,0x4d,0x4e,0xff,0x5a,0x4d,0x4e,0xff,0x6d,0x61,0x62,0xff,0x9a, 0x90,0x91,0xff,0xba,0xb1,0xb2,0xff,0xcc,0xc3,0xc3,0xff,0xba,0xac,0xad,0xff,0x84, 0x73,0x75,0xff,0x55,0x48,0x49,0xff,0x48,0x3e,0x3f,0xff,0x4a,0x3f,0x40,0xff,0x4b, 0x40,0x41,0xff,0x4c,0x40,0x41,0xff,0x4b,0x40,0x41,0xff,0x4c,0x41,0x41,0xff,0x57, 0x4b,0x4b,0xff,0x5d,0x50,0x51,0xff,0x46,0x3b,0x3c,0xff,0x2e,0x28,0x27,0xff,0x1e, 0x19,0x19,0xff,0x10,0x0d,0x0d,0xff,0x0e,0x0b,0x0c,0xff,0x12,0x0f,0x10,0xff,0x1d, 0x19,0x1a,0xff,0x2d,0x27,0x26,0xff,0x3a,0x31,0x31,0xff,0x43,0x38,0x39,0xff,0x49, 0x3d,0x3e,0xff,0x4c,0x40,0x41,0xff,0x4c,0x40,0x41,0xff,0x4c,0x40,0x41,0xff,0x4c, 0x40,0x41,0xff,0x4c,0x40,0x41,0xff,0x4c,0x40,0x41,0xff,0x4c,0x40,0x41,0xff,0x4c, 0x40,0x41,0xff,0x4c,0x40,0x41,0xff,0x4c,0x40,0x41,0xff,0x4c,0x40,0x41,0xff,0x4c, 0x40,0x41,0xff,0x4f,0x42,0x43,0xff,0x54,0x46,0x47,0xff,0x58,0x4a,0x4b,0xff,0x58, 0x4a,0x4b,0xfe,0x54,0x46,0x47,0xfe,0x4b,0x3e,0x3e,0xfe,0x38,0x30,0x2f,0xfd,0x24, 0x1e,0x1e,0xfb,0x14,0x11,0x11,0xf4,0x08,0x08,0x08,0xe5,0x01,0x02,0x02,0xcb,0x00, 0x00,0x00,0xa3,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x24,0x00, 0x00,0x00,0x11,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x1b,0x00, 0x00,0x00,0x33,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0xaf,0x00, 0x00,0x00,0xd1,0x00,0x00,0x00,0xe9,0x1c,0x21,0x1e,0xf6,0x29,0x30,0x2a,0xfc,0x15, 0x22,0x17,0xff,0x23,0x2d,0x23,0xff,0x2f,0x35,0x30,0xff,0x53,0x4b,0x54,0xff,0x60, 0x53,0x61,0xff,0x5f,0x52,0x60,0xff,0x5d,0x51,0x5e,0xff,0x5c,0x51,0x5d,0xff,0x6d, 0x5a,0x6c,0xff,0x55,0x4c,0x56,0xff,0x4b,0x46,0x4b,0xff,0x4d,0x48,0x4e,0xff,0x4d, 0x48,0x4e,0xff,0x4f,0x49,0x50,0xff,0x4f,0x49,0x50,0xff,0x4d,0x48,0x4e,0xff,0x4f, 0x49,0x50,0xff,0x4e,0x48,0x4f,0xff,0x4c,0x47,0x4d,0xff,0x4b,0x47,0x4c,0xff,0x4c, 0x47,0x4c,0xff,0x4c,0x47,0x4c,0xff,0x4f,0x49,0x4f,0xff,0x3e,0x3f,0x3e,0xff,0x48, 0x45,0x48,0xff,0x4b,0x46,0x4b,0xff,0x30,0x36,0x31,0xff,0x3e,0x3f,0x3f,0xff,0x40, 0x40,0x41,0xff,0x3a,0x3d,0x3b,0xff,0x36,0x3a,0x37,0xff,0x34,0x39,0x35,0xfe,0x37, 0x3a,0x37,0xfd,0x3e,0x3f,0x3f,0xfa,0x56,0x4c,0x56,0xf2,0x16,0x12,0x16,0xe3,0x01, 0x01,0x01,0xcb,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x5a,0x00, 0x00,0x00,0x36,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x05,0x00, 0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00, 0x00,0x00,0x07,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x2d,0x00, 0x00,0x00,0x44,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x98,0x00, 0x00,0x00,0xb4,0x00,0x00,0x00,0xcd,0x0b,0x0b,0x0b,0xe0,0x28,0x28,0x28,0xec,0x3f, 0x3f,0x3f,0xf6,0x6d,0x6d,0x6d,0xfc,0x13,0x13,0x13,0xfd,0x0e,0x0e,0x0e,0xfe,0x20, 0x20,0x20,0xff,0x2e,0x2e,0x2e,0xff,0x37,0x37,0x37,0xff,0x31,0x31,0x31,0xff,0x2a, 0x2a,0x2a,0xff,0x22,0x22,0x22,0xff,0x1a,0x1a,0x1a,0xff,0x12,0x12,0x12,0xfd,0x0e, 0x0e,0x0e,0xfa,0x09,0x09,0x09,0xf6,0x08,0x08,0x08,0xef,0x08,0x08,0x08,0xe6,0x07, 0x07,0x07,0xe0,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xe1,0x02, 0x02,0x02,0xe4,0x08,0x07,0x07,0xe5,0x01,0x01,0x01,0xe6,0x00,0x00,0x00,0xe7,0x01, 0x01,0x01,0xea,0x29,0x23,0x24,0xeb,0x69,0x59,0x5a,0xea,0x31,0x29,0x2a,0xe8,0x1b, 0x17,0x18,0xe5,0x17,0x12,0x13,0xe5,0x12,0x0f,0x0f,0xe4,0x10,0x0d,0x0d,0xe7,0x10, 0x0d,0x0d,0xed,0x0e,0x0c,0x0c,0xf3,0x22,0x1c,0x1d,0xf8,0x43,0x38,0x39,0xfc,0x1f, 0x1a,0x1b,0xfd,0x0c,0x08,0x08,0xfe,0x42,0x3c,0x3d,0xff,0xb9,0xb7,0xb7,0xff,0xf3, 0xf1,0xf1,0xff,0xee,0xec,0xec,0xff,0xeb,0xe9,0xea,0xff,0xe9,0xe7,0xe8,0xff,0xea, 0xe8,0xe8,0xff,0xea,0xe8,0xe8,0xff,0xeb,0xe9,0xe9,0xff,0xeb,0xe9,0xe9,0xff,0xec, 0xea,0xea,0xff,0xef,0xec,0xed,0xff,0xf1,0xee,0xef,0xff,0xed,0xeb,0xeb,0xff,0xed, 0xe9,0xe9,0xff,0xec,0xe9,0xe9,0xff,0xea,0xe9,0xe9,0xff,0xea,0xe8,0xe8,0xff,0xea, 0xe8,0xe8,0xff,0xe9,0xe7,0xe8,0xff,0xe7,0xe5,0xe6,0xff,0xe8,0xe7,0xe7,0xff,0xf0, 0xef,0xef,0xff,0x7e,0x7a,0x7a,0xff,0x0e,0x08,0x08,0xff,0x12,0x0f,0x0f,0xff,0x0d, 0x0c,0x0c,0xff,0x12,0x0f,0x0f,0xff,0x14,0x0e,0x0f,0xff,0x93,0x8f,0x90,0xff,0xf6, 0xf5,0xf5,0xff,0xe8,0xe6,0xe7,0xff,0xe9,0xe7,0xe8,0xff,0xec,0xea,0xeb,0xff,0xef, 0xed,0xed,0xff,0xed,0xeb,0xeb,0xff,0xe9,0xe7,0xe7,0xff,0xe6,0xe4,0xe5,0xff,0xe8, 0xe6,0xe6,0xff,0xe9,0xe8,0xe8,0xff,0xe9,0xe8,0xe8,0xff,0xe9,0xe8,0xe8,0xff,0xe9, 0xe8,0xe8,0xff,0xe9,0xe8,0xe8,0xff,0xe9,0xe8,0xe8,0xff,0xea,0xe8,0xe8,0xff,0xeb, 0xe9,0xe9,0xff,0xeb,0xe9,0xe9,0xff,0xeb,0xe9,0xe9,0xff,0xeb,0xe9,0xe9,0xff,0xf3, 0xf3,0xf3,0xff,0xbe,0xb9,0xba,0xff,0x58,0x4e,0x4f,0xff,0x2c,0x24,0x25,0xff,0x29, 0x22,0x22,0xff,0x2d,0x25,0x25,0xff,0x39,0x2e,0x2f,0xff,0xbf,0xbb,0xbb,0xff,0xf2, 0xf0,0xf0,0xff,0xeb,0xe9,0xe9,0xff,0xec,0xe9,0xe9,0xff,0xeb,0xe9,0xe9,0xff,0xeb, 0xe8,0xe9,0xff,0xea,0xe8,0xe8,0xff,0xea,0xe8,0xe8,0xff,0xea,0xe8,0xe8,0xff,0xea, 0xe8,0xe8,0xff,0xea,0xe8,0xe8,0xff,0xea,0xe8,0xe8,0xff,0xea,0xe8,0xe8,0xff,0xea, 0xe8,0xe8,0xff,0xea,0xe8,0xe8,0xff,0xec,0xea,0xea,0xff,0xec,0xea,0xeb,0xff,0xea, 0xe8,0xe8,0xff,0xeb,0xe9,0xe9,0xff,0xeb,0xe9,0xea,0xff,0xeb,0xe9,0xe9,0xff,0xf1, 0xf0,0xf0,0xff,0xad,0xa6,0xa6,0xff,0x49,0x3f,0x40,0xff,0x2b,0x24,0x25,0xff,0x3c, 0x33,0x33,0xff,0x4d,0x40,0x42,0xff,0x53,0x46,0x47,0xff,0xdb,0xd8,0xd8,0xff,0xed, 0xeb,0xeb,0xff,0xec,0xea,0xea,0xff,0xec,0xea,0xea,0xff,0xeb,0xe9,0xe9,0xff,0xeb, 0xe9,0xe9,0xff,0xea,0xe8,0xe8,0xff,0xea,0xe8,0xe8,0xff,0xec,0xea,0xea,0xff,0xec, 0xea,0xea,0xff,0xe8,0xe6,0xe6,0xff,0xe7,0xe6,0xe6,0xff,0xea,0xe8,0xe8,0xff,0xea, 0xe8,0xe8,0xff,0xea,0xe8,0xe8,0xff,0xea,0xe8,0xe8,0xff,0xea,0xe8,0xe8,0xff,0xea, 0xe8,0xe8,0xff,0xea,0xe8,0xe8,0xff,0xe9,0xe7,0xe7,0xff,0xe8,0xe6,0xe6,0xff,0xe6, 0xe5,0xe5,0xff,0x7e,0x79,0x7a,0xff,0x1d,0x18,0x18,0xff,0x16,0x12,0x13,0xff,0x18, 0x14,0x15,0xff,0x28,0x21,0x22,0xff,0x42,0x38,0x39,0xff,0xa9,0xa2,0xa3,0xff,0xee, 0xed,0xee,0xff,0xe4,0xe1,0xe1,0xff,0x52,0x45,0x46,0xff,0x4f,0x42,0x43,0xff,0x4a, 0x3f,0x40,0xff,0x44,0x3a,0x3a,0xff,0x41,0x36,0x37,0xff,0x47,0x3c,0x3d,0xff,0x38, 0x2f,0x31,0xff,0x3c,0x32,0x33,0xff,0x47,0x3b,0x3d,0xff,0x3d,0x34,0x34,0xff,0x36, 0x2c,0x2d,0xff,0x42,0x36,0x37,0xff,0x54,0x46,0x47,0xff,0x5f,0x51,0x52,0xff,0x62, 0x54,0x55,0xff,0x72,0x62,0x64,0xff,0x96,0x8b,0x8c,0xff,0xb0,0xa8,0xa9,0xff,0xd7, 0xd3,0xd4,0xff,0xb5,0xb0,0xb1,0xff,0x22,0x1a,0x1a,0xff,0x20,0x1b,0x1b,0xff,0x21, 0x1c,0x1c,0xff,0x2c,0x24,0x24,0xff,0x52,0x47,0x48,0xff,0xbd,0xb6,0xb7,0xff,0xf3, 0xf1,0xf1,0xff,0xec,0xe9,0xea,0xff,0xec,0xea,0xea,0xff,0xed,0xeb,0xeb,0xff,0xee, 0xec,0xec,0xff,0xf4,0xf2,0xf2,0xff,0xfd,0xfc,0xfc,0xff,0xff,0xff,0xff,0xff,0xfe, 0xfd,0xfd,0xff,0xf6,0xf4,0xf4,0xff,0xed,0xeb,0xec,0xff,0xe9,0xe8,0xe8,0xff,0xe9, 0xe7,0xe7,0xff,0xe9,0xe8,0xe8,0xff,0xe9,0xe8,0xe8,0xff,0xe9,0xe8,0xe8,0xff,0xea, 0xe8,0xe8,0xff,0xe9,0xe7,0xe7,0xff,0xe7,0xe6,0xe6,0xff,0xeb,0xe9,0xe9,0xff,0xf0, 0xee,0xef,0xff,0xa4,0x9d,0x9e,0xff,0x2b,0x20,0x22,0xff,0x26,0x20,0x21,0xff,0x16, 0x12,0x13,0xff,0x11,0x0c,0x0d,0xff,0x47,0x42,0x42,0xff,0xbf,0xbc,0xbc,0xff,0xf0, 0xef,0xef,0xff,0xe9,0xe6,0xe6,0xff,0xe9,0xe8,0xe8,0xff,0xe9,0xe8,0xe8,0xff,0xe9, 0xe8,0xe8,0xff,0xe9,0xe8,0xe8,0xff,0xe9,0xe8,0xe8,0xff,0xe9,0xe8,0xe8,0xff,0xe9, 0xe8,0xe8,0xff,0xe9,0xe8,0xe8,0xff,0xe9,0xe8,0xe8,0xff,0xe9,0xe8,0xe8,0xff,0xe9, 0xe8,0xe8,0xff,0xe9,0xe8,0xe8,0xff,0xea,0xe8,0xe8,0xff,0xea,0xe8,0xe8,0xff,0xeb, 0xe9,0xe9,0xff,0xeb,0xe9,0xe9,0xff,0xec,0xe9,0xe9,0xff,0xed,0xea,0xeb,0xff,0xf5, 0xf3,0xf4,0xff,0x90,0x88,0x88,0xff,0x2d,0x23,0x24,0xfc,0x20,0x1b,0x1b,0xf7,0x0d, 0x0b,0x0b,0xea,0x02,0x01,0x01,0xd1,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x7a,0x00, 0x00,0x00,0x4c,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x0d,0x00, 0x00,0x00,0x11,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x66,0x00, 0x00,0x00,0x92,0x00,0x00,0x00,0xbb,0x0c,0x0c,0x0d,0xdb,0x29,0x2c,0x2d,0xee,0x6a, 0x55,0x58,0xf9,0x8e,0x6d,0x68,0xfd,0x8d,0x6e,0x62,0xff,0x83,0x67,0x72,0xff,0x4a, 0x46,0x49,0xff,0x41,0x41,0x43,0xff,0x59,0x4e,0x5a,0xff,0x5e,0x52,0x5f,0xff,0x5e, 0x52,0x5f,0xff,0x66,0x56,0x65,0xff,0x64,0x55,0x64,0xff,0x4e,0x49,0x4f,0xff,0x4b, 0x47,0x4c,0xff,0x4d,0x48,0x4e,0xff,0x4f,0x49,0x50,0xff,0x4f,0x49,0x50,0xff,0x4f, 0x49,0x50,0xff,0x4f,0x49,0x50,0xff,0x4f,0x49,0x50,0xff,0x4f,0x49,0x50,0xff,0x4d, 0x48,0x4e,0xff,0x4d,0x48,0x4e,0xff,0x4c,0x47,0x4c,0xff,0x4c,0x47,0x4c,0xff,0x4c, 0x47,0x4c,0xff,0x49,0x45,0x49,0xff,0x4d,0x48,0x4d,0xff,0x38,0x3b,0x38,0xff,0x43, 0x42,0x44,0xff,0x41,0x41,0x41,0xff,0x3c,0x3e,0x3c,0xff,0x36,0x3a,0x37,0xff,0x38, 0x3b,0x38,0xff,0x37,0x3b,0x37,0xfd,0x3c,0x3e,0x3c,0xfb,0x54,0x4e,0x55,0xf5,0x32, 0x2b,0x32,0xe9,0x03,0x03,0x03,0xd3,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0x8d,0x00, 0x00,0x00,0x65,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x11,0x00, 0x00,0x00,0x08,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x02,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x1c,0x00, 0x00,0x00,0x30,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0x88,0x00, 0x00,0x00,0xa5,0x00,0x00,0x00,0xbe,0x04,0x04,0x04,0xd4,0x19,0x19,0x19,0xe5,0x2f, 0x2f,0x2f,0xf0,0x2c,0x2c,0x2c,0xf8,0x4e,0x4e,0x4e,0xfb,0x5d,0x5d,0x5d,0xfd,0x2a, 0x2a,0x2a,0xfe,0x2c,0x2c,0x2c,0xff,0x20,0x20,0x20,0xff,0x12,0x12,0x12,0xff,0x07, 0x07,0x07,0xff,0x03,0x03,0x03,0xff,0x03,0x03,0x03,0xff,0x00,0x00,0x00,0xff,0x00, 0x00,0x00,0xfe,0x09,0x09,0x09,0xfb,0x2e,0x2e,0x2e,0xf6,0x00,0x00,0x00,0xec,0x00, 0x00,0x00,0xde,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0xc9,0x00, 0x00,0x00,0xd1,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,0xe8,0x01,0x01,0x01,0xf0,0x00, 0x00,0x00,0xf4,0x00,0x00,0x00,0xf6,0x1a,0x16,0x16,0xf7,0x79,0x66,0x67,0xf7,0x75, 0x63,0x65,0xf5,0x38,0x2f,0x30,0xf3,0x2d,0x25,0x26,0xf1,0x30,0x28,0x29,0xef,0x29, 0x22,0x23,0xef,0x1b,0x16,0x17,0xf1,0x17,0x13,0x14,0xf3,0x23,0x1d,0x1e,0xf6,0x3f, 0x34,0x35,0xfa,0x28,0x21,0x22,0xfd,0x08,0x07,0x07,0xfd,0x11,0x0e,0x0e,0xfe,0x38, 0x33,0x33,0xff,0x89,0x85,0x84,0xff,0xae,0xa9,0xa9,0xff,0xb6,0xae,0xb0,0xff,0xb2, 0xab,0xac,0xff,0xb2,0xaa,0xab,0xff,0xb5,0xad,0xae,0xff,0xb4,0xad,0xae,0xff,0xba, 0xb1,0xb2,0xff,0xc2,0xb7,0xb8,0xff,0xd5,0xcb,0xcc,0xff,0xf5,0xf2,0xf1,0xff,0xff, 0xff,0xff,0xff,0xe9,0xe3,0xe3,0xff,0xc4,0xb8,0xb9,0xff,0xbf,0xb6,0xb6,0xff,0xb6, 0xaf,0xaf,0xff,0xb1,0xaa,0xaa,0xff,0xb0,0xa9,0xa9,0xff,0xaf,0xa9,0xa9,0xff,0xac, 0xa6,0xa7,0xff,0xa9,0xa3,0xa5,0xff,0xa5,0xa0,0xa2,0xff,0x5a,0x55,0x55,0xff,0x12, 0x0e,0x0e,0xff,0x11,0x0d,0x0e,0xff,0x0e,0x0b,0x0b,0xff,0x11,0x0e,0x0e,0xff,0x13, 0x0e,0x0e,0xff,0x67,0x62,0x63,0xff,0xad,0xa8,0xa8,0xff,0xa9,0xa3,0xa4,0xff,0xad, 0xa7,0xa8,0xff,0xaf,0xa8,0xa8,0xff,0xaf,0xa8,0xa8,0xff,0xb0,0xa9,0xa9,0xff,0xb0, 0xa9,0xa9,0xff,0xb1,0xaa,0xaa,0xff,0xb1,0xaa,0xaa,0xff,0xb1,0xaa,0xaa,0xff,0xb1, 0xaa,0xaa,0xff,0xb1,0xaa,0xaa,0xff,0xb1,0xaa,0xaa,0xff,0xb1,0xaa,0xaa,0xff,0xb1, 0xaa,0xaa,0xff,0xb2,0xab,0xab,0xff,0xb8,0xb0,0xb0,0xff,0xc0,0xb6,0xb6,0xff,0xc2, 0xb6,0xb7,0xff,0xed,0xe8,0xe8,0xff,0xff,0xff,0xff,0xff,0xd8,0xd2,0xd3,0xff,0x6c, 0x60,0x61,0xff,0x3c,0x31,0x31,0xff,0x36,0x2d,0x2e,0xff,0x3b,0x31,0x32,0xff,0x4e, 0x3f,0x40,0xff,0xd5,0xd1,0xd1,0xff,0xff,0xff,0xff,0xff,0xe8,0xe2,0xe3,0xff,0xca, 0xbf,0xc1,0xff,0xc0,0xb6,0xb6,0xff,0xb8,0xb0,0xb0,0xff,0xb2,0xab,0xab,0xff,0xaf, 0xa8,0xa8,0xff,0xaf,0xa8,0xa8,0xff,0xaf,0xa8,0xa8,0xff,0xaf,0xa8,0xa8,0xff,0xaf, 0xa8,0xa8,0xff,0xaf,0xa8,0xa8,0xff,0xaf,0xa8,0xa8,0xff,0xae,0xa7,0xa7,0xff,0xb6, 0xaf,0xb0,0xff,0xb8,0xb0,0xb1,0xff,0xb8,0xb0,0xb0,0xff,0xbf,0xb5,0xb6,0xff,0xc2, 0xb6,0xb7,0xff,0xf5,0xf2,0xf2,0xff,0xff,0xff,0xff,0xff,0xc7,0xbe,0xbf,0xff,0x5b, 0x4e,0x4f,0xff,0x3b,0x32,0x32,0xff,0x36,0x2d,0x2e,0xff,0x4c,0x3f,0x41,0xff,0x68, 0x57,0x58,0xff,0xf1,0xef,0xef,0xff,0xff,0xff,0xff,0xff,0xea,0xe5,0xe5,0xff,0xca, 0xbf,0xc1,0xff,0xc1,0xb8,0xb9,0xff,0xb8,0xb0,0xb1,0xff,0xb2,0xaa,0xab,0xff,0xb0, 0xa9,0xa9,0xff,0xb0,0xa9,0xa9,0xff,0xb1,0xa9,0xaa,0xff,0xbb,0xb3,0xb3,0xff,0xb7, 0xaf,0xb0,0xff,0xaf,0xa8,0xa8,0xff,0xb0,0xa9,0xa9,0xff,0xb0,0xa9,0xa9,0xff,0xb0, 0xa9,0xa9,0xff,0xb0,0xa9,0xa9,0xff,0xb0,0xa9,0xa9,0xff,0xaf,0xa8,0xa8,0xff,0xad, 0xa6,0xa7,0xff,0xa8,0xa2,0xa2,0xff,0xa2,0x9d,0x9e,0xff,0x54,0x4e,0x4e,0xff,0x1b, 0x17,0x17,0xff,0x15,0x11,0x12,0xff,0x1d,0x19,0x19,0xff,0x34,0x2b,0x2c,0xff,0x53, 0x48,0x49,0xff,0xc5,0xbd,0xbe,0xff,0xff,0xff,0xff,0xff,0xf8,0xf7,0xf7,0xff,0x6c, 0x5c,0x5d,0xff,0x64,0x56,0x57,0xff,0x48,0x3d,0x3e,0xff,0x33,0x2b,0x2b,0xff,0x48, 0x3e,0x3f,0xff,0x54,0x47,0x48,0xff,0x53,0x46,0x48,0xff,0x46,0x39,0x3a,0xff,0x4f, 0x40,0x42,0xff,0x59,0x4b,0x4c,0xff,0x64,0x55,0x56,0xff,0x78,0x68,0x6a,0xff,0x96, 0x89,0x8a,0xff,0xbc,0xb3,0xb4,0xff,0xdd,0xd8,0xd8,0xff,0xf3,0xf2,0xf2,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xd8,0xd6,0xd6,0xff,0x2d, 0x24,0x24,0xff,0x23,0x1d,0x1d,0xff,0x28,0x22,0x22,0xff,0x39,0x2f,0x30,0xff,0x65, 0x59,0x5a,0xff,0xd8,0xd1,0xd2,0xff,0xff,0xff,0xff,0xff,0xf3,0xef,0xef,0xff,0xcc, 0xc1,0xc2,0xff,0xd4,0xcb,0xcd,0xff,0xcf,0xc8,0xc8,0xff,0xd0,0xc9,0xca,0xff,0xcb, 0xc6,0xc6,0xff,0xc5,0xbf,0xc0,0xff,0xc3,0xbd,0xbe,0xff,0xc1,0xbb,0xbc,0xff,0xc0, 0xbb,0xbb,0xff,0xbd,0xb7,0xb7,0xff,0xaf,0xa8,0xa8,0xff,0xb1,0xaa,0xaa,0xff,0xb1, 0xaa,0xaa,0xff,0xb1,0xaa,0xaa,0xff,0xb1,0xaa,0xaa,0xff,0xb1,0xaa,0xaa,0xff,0xad, 0xa7,0xa7,0xff,0xa9,0xa3,0xa4,0xff,0xa5,0xa0,0xa0,0xff,0x6a,0x64,0x65,0xff,0x1e, 0x17,0x18,0xff,0x2e,0x27,0x28,0xff,0x2d,0x26,0x28,0xff,0x1f,0x19,0x1a,0xff,0x3d, 0x38,0x38,0xff,0x8b,0x87,0x87,0xff,0xaa,0xa5,0xa5,0xff,0xaa,0xa5,0xa5,0xff,0xae, 0xa8,0xa8,0xff,0xb0,0xa8,0xaa,0xff,0xb1,0xaa,0xaa,0xff,0xb1,0xaa,0xaa,0xff,0xb1, 0xaa,0xaa,0xff,0xb1,0xaa,0xaa,0xff,0xb1,0xaa,0xaa,0xff,0xb1,0xaa,0xaa,0xff,0xb1, 0xaa,0xaa,0xff,0xb1,0xaa,0xaa,0xff,0xb1,0xaa,0xaa,0xff,0xb1,0xaa,0xaa,0xff,0xb2, 0xaa,0xab,0xff,0xb4,0xac,0xae,0xff,0xbb,0xb2,0xb3,0xff,0xc2,0xb7,0xb7,0xff,0xd5, 0xcd,0xcd,0xff,0xf6,0xf3,0xf3,0xff,0xff,0xff,0xff,0xff,0xa8,0x9f,0xa0,0xff,0x3d, 0x30,0x32,0xfd,0x2a,0x23,0x23,0xf8,0x11,0x0e,0x0e,0xec,0x02,0x02,0x02,0xd3,0x00, 0x00,0x00,0xad,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x2c,0x00, 0x00,0x00,0x18,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x30,0x00, 0x00,0x00,0x52,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xcc,0x38, 0x32,0x39,0xe5,0x66,0x57,0x66,0xf4,0x6f,0x5b,0x6d,0xfb,0x80,0x63,0x71,0xfe,0x87, 0x67,0x74,0xff,0x83,0x66,0x77,0xff,0x89,0x68,0x7b,0xff,0x5c,0x4f,0x53,0xff,0x59, 0x4f,0x5a,0xff,0x41,0x41,0x43,0xff,0x3e,0x3e,0x3f,0xff,0x69,0x58,0x68,0xff,0x59, 0x4f,0x5a,0xff,0x4c,0x47,0x4c,0xff,0x4d,0x48,0x4e,0xff,0x4d,0x48,0x4e,0xff,0x4f, 0x49,0x50,0xff,0x4f,0x49,0x50,0xff,0x4f,0x49,0x50,0xff,0x4f,0x49,0x50,0xff,0x4e, 0x48,0x4f,0xff,0x4d,0x48,0x4e,0xff,0x4c,0x47,0x4c,0xff,0x4c,0x47,0x4c,0xff,0x4c, 0x47,0x4c,0xff,0x4d,0x48,0x4e,0xff,0x4c,0x47,0x4c,0xff,0x4a,0x46,0x4b,0xff,0x4b, 0x46,0x4a,0xff,0x2e,0x34,0x2e,0xff,0x3f,0x3f,0x3f,0xff,0x3f,0x40,0x40,0xff,0x3a, 0x3c,0x3b,0xff,0x38,0x3b,0x38,0xff,0x38,0x3b,0x38,0xfe,0x39,0x3c,0x3a,0xfd,0x4c, 0x48,0x4d,0xf8,0x4c,0x41,0x4c,0xee,0x07,0x06,0x07,0xda,0x00,0x00,0x00,0xbd,0x00, 0x00,0x00,0x99,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x2b,0x00, 0x00,0x00,0x15,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x0b,0x00, 0x00,0x00,0x18,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x6e,0x00, 0x00,0x00,0x91,0x00,0x00,0x00,0xaf,0x01,0x01,0x01,0xc8,0x0e,0x0e,0x0e,0xdc,0x27, 0x27,0x27,0xeb,0x47,0x47,0x47,0xf3,0x25,0x25,0x25,0xf9,0x31,0x31,0x31,0xfc,0x7f, 0x7f,0x7f,0xfd,0x38,0x38,0x38,0xfe,0x0d,0x0d,0x0d,0xff,0x08,0x08,0x08,0xff,0x11, 0x11,0x11,0xff,0x0e,0x0e,0x0e,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x02, 0x02,0x02,0xff,0x0f,0x0f,0x0f,0xfe,0x03,0x03,0x03,0xfb,0x26,0x26,0x26,0xf6,0x2c, 0x2c,0x2c,0xec,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0xb9,0x00, 0x00,0x00,0xb0,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0xd6,0x00, 0x00,0x00,0xe8,0x01,0x01,0x01,0xf3,0x04,0x03,0x03,0xfa,0x0b,0x0a,0x0a,0xfb,0x3c, 0x32,0x33,0xfb,0x80,0x6c,0x6e,0xfa,0x39,0x30,0x31,0xf7,0x00,0x00,0x00,0xf3,0x03, 0x03,0x03,0xef,0x0f,0x0c,0x0d,0xec,0x10,0x0e,0x0e,0xec,0x01,0x01,0x01,0xed,0x00, 0x00,0x00,0xf0,0x09,0x07,0x07,0xf3,0x1a,0x16,0x16,0xf8,0x07,0x06,0x06,0xfc,0x06, 0x05,0x05,0xfd,0x11,0x0e,0x0e,0xfe,0x1b,0x16,0x17,0xff,0x26,0x1f,0x20,0xff,0x34, 0x2b,0x2c,0xff,0x4b,0x3f,0x40,0xff,0x59,0x4b,0x4c,0xff,0x5b,0x4c,0x4d,0xff,0x61, 0x51,0x53,0xff,0x58,0x4a,0x4b,0xff,0x5e,0x4e,0x50,0xff,0x75,0x5f,0x61,0xff,0xa4, 0x90,0x92,0xff,0xec,0xe6,0xe7,0xff,0xff,0xff,0xff,0xff,0xcc,0xbf,0xc0,0xff,0x79, 0x60,0x62,0xff,0x69,0x57,0x5a,0xff,0x54,0x46,0x48,0xff,0x47,0x3b,0x3c,0xff,0x42, 0x37,0x37,0xff,0x42,0x37,0x37,0xff,0x3d,0x34,0x34,0xfe,0x37,0x2e,0x2f,0xfe,0x2d, 0x25,0x26,0xfe,0x20,0x1b,0x1b,0xff,0x14,0x11,0x11,0xff,0x0c,0x0b,0x0b,0xff,0x0b, 0x0a,0x09,0xff,0x10,0x0d,0x0e,0xff,0x1c,0x17,0x17,0xff,0x2b,0x23,0x24,0xff,0x39, 0x2f,0x30,0xff,0x45,0x39,0x3a,0xff,0x4d,0x40,0x41,0xff,0x53,0x45,0x46,0xff,0x54, 0x46,0x47,0xff,0x54,0x46,0x47,0xff,0x54,0x46,0x47,0xff,0x54,0x46,0x47,0xff,0x54, 0x46,0x47,0xff,0x54,0x46,0x47,0xff,0x55,0x46,0x47,0xff,0x55,0x47,0x48,0xff,0x55, 0x47,0x48,0xff,0x55,0x47,0x48,0xff,0x54,0x46,0x47,0xff,0x58,0x49,0x4b,0xff,0x66, 0x54,0x56,0xff,0x79,0x65,0x67,0xff,0x82,0x69,0x6b,0xff,0xd7,0xce,0xcf,0xff,0xff, 0xff,0xff,0xff,0xdb,0xd4,0xd5,0xff,0x75,0x67,0x68,0xff,0x44,0x39,0x39,0xff,0x3e, 0x34,0x35,0xff,0x45,0x39,0x3a,0xff,0x5a,0x48,0x4a,0xff,0xd8,0xd3,0xd4,0xff,0xff, 0xff,0xff,0xff,0xcf,0xc4,0xc4,0xff,0x8c,0x78,0x79,0xff,0x6f,0x5d,0x5e,0xff,0x5a, 0x4b,0x4c,0xff,0x4a,0x3d,0x3e,0xff,0x44,0x38,0x39,0xff,0x44,0x38,0x39,0xff,0x44, 0x38,0x39,0xff,0x44,0x38,0x39,0xff,0x43,0x38,0x39,0xff,0x42,0x37,0x38,0xff,0x43, 0x38,0x39,0xff,0x42,0x36,0x37,0xff,0x5b,0x4d,0x4f,0xff,0x5c,0x4d,0x4e,0xff,0x5d, 0x4e,0x4f,0xff,0x71,0x5e,0x5f,0xff,0x7b,0x63,0x64,0xff,0xe5,0xe0,0xe1,0xff,0xff, 0xff,0xff,0xff,0xca,0xc0,0xc1,0xff,0x65,0x56,0x58,0xff,0x45,0x3a,0x3a,0xff,0x3f, 0x34,0x35,0xff,0x4a,0x3e,0x3f,0xff,0x68,0x56,0x58,0xff,0xf1,0xef,0xef,0xff,0xff, 0xff,0xff,0xff,0xd3,0xc7,0xc8,0xff,0x89,0x74,0x75,0xff,0x70,0x5d,0x5f,0xff,0x58, 0x4a,0x4b,0xff,0x49,0x3d,0x3e,0xff,0x43,0x38,0x38,0xff,0x43,0x38,0x38,0xff,0x43, 0x38,0x38,0xff,0x4d,0x41,0x41,0xff,0x61,0x53,0x54,0xff,0x48,0x3b,0x3c,0xff,0x43, 0x37,0x38,0xff,0x43,0x38,0x38,0xff,0x43,0x38,0x38,0xff,0x43,0x38,0x38,0xff,0x43, 0x38,0x38,0xff,0x41,0x36,0x37,0xff,0x3d,0x33,0x34,0xff,0x36,0x2d,0x2e,0xff,0x2c, 0x25,0x25,0xff,0x20,0x1b,0x1b,0xff,0x15,0x11,0x12,0xff,0x12,0x0f,0x0f,0xff,0x20, 0x1b,0x1b,0xff,0x3b,0x32,0x33,0xff,0x61,0x52,0x53,0xff,0xca,0xc1,0xc2,0xff,0xff, 0xff,0xff,0xff,0xf9,0xf8,0xf9,0xff,0x89,0x74,0x76,0xff,0x7b,0x67,0x69,0xff,0x64, 0x54,0x56,0xff,0x46,0x38,0x3a,0xff,0x4b,0x3c,0x3c,0xff,0x55,0x45,0x46,0xff,0x71, 0x60,0x62,0xff,0x76,0x67,0x68,0xff,0x87,0x77,0x79,0xff,0xb2,0xa7,0xa8,0xff,0xce, 0xc6,0xc7,0xff,0xf5,0xf3,0xf4,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe, 0xfe,0xfe,0xff,0xf6,0xf4,0xf4,0xff,0xe7,0xe3,0xe3,0xff,0xc2,0xbb,0xbc,0xff,0x90, 0x86,0x87,0xff,0x62,0x58,0x59,0xff,0x27,0x1f,0x20,0xff,0x21,0x1c,0x1c,0xff,0x2b, 0x24,0x24,0xff,0x42,0x37,0x38,0xff,0x70,0x62,0x63,0xff,0xda,0xd3,0xd3,0xff,0xff, 0xff,0xff,0xff,0xe6,0xde,0xdf,0xff,0x95,0x7c,0x7e,0xff,0x82,0x6d,0x6f,0xff,0x67, 0x55,0x57,0xff,0x59,0x4a,0x4c,0xff,0x54,0x46,0x47,0xff,0x55,0x47,0x48,0xff,0x55, 0x47,0x48,0xff,0x55,0x47,0x48,0xff,0x55,0x47,0x48,0xff,0x55,0x47,0x48,0xff,0x55, 0x47,0x48,0xff,0x55,0x47,0x48,0xff,0x55,0x47,0x48,0xff,0x55,0x47,0x48,0xff,0x55, 0x47,0x48,0xff,0x53,0x45,0x46,0xff,0x4e,0x41,0x42,0xff,0x46,0x39,0x3b,0xff,0x39, 0x2f,0x2f,0xff,0x2a,0x23,0x23,0xff,0x1b,0x16,0x17,0xff,0x13,0x10,0x11,0xff,0x22, 0x1d,0x1e,0xff,0x38,0x2f,0x30,0xff,0x3a,0x30,0x31,0xff,0x37,0x2e,0x2f,0xff,0x3d, 0x32,0x33,0xff,0x48,0x3b,0x3c,0xff,0x4f,0x41,0x42,0xff,0x53,0x45,0x46,0xff,0x54, 0x46,0x47,0xff,0x54,0x46,0x47,0xff,0x54,0x46,0x47,0xff,0x54,0x46,0x47,0xff,0x54, 0x46,0x47,0xff,0x54,0x46,0x47,0xff,0x55,0x46,0x47,0xff,0x55,0x47,0x48,0xff,0x55, 0x47,0x48,0xff,0x55,0x47,0x48,0xff,0x55,0x48,0x48,0xff,0x5d,0x4e,0x4f,0xff,0x6f, 0x5d,0x5e,0xff,0x7f,0x69,0x6a,0xff,0xa9,0x96,0x97,0xff,0xec,0xe7,0xe7,0xff,0xff, 0xff,0xff,0xff,0xac,0xa2,0xa3,0xff,0x4a,0x3b,0x3c,0xfd,0x31,0x29,0x29,0xf8,0x15, 0x11,0x11,0xec,0x03,0x03,0x03,0xd5,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0x83,0x00, 0x00,0x00,0x57,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1f,0x00, 0x00,0x00,0x2b,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x93,0x00, 0x00,0x00,0xbb,0x15,0x15,0x15,0xda,0x4f,0x47,0x50,0xed,0x62,0x55,0x63,0xf8,0x5e, 0x52,0x5f,0xfc,0x5e,0x52,0x5f,0xff,0x5e,0x52,0x5f,0xff,0x5a,0x4f,0x5b,0xff,0x70, 0x5c,0x6e,0xff,0x8e,0x6a,0x6f,0xff,0x8e,0x6b,0x78,0xff,0x4a,0x44,0x45,0xff,0x27, 0x2e,0x27,0xff,0x4e,0x47,0x4f,0xff,0x4c,0x48,0x4c,0xff,0x48,0x45,0x49,0xff,0x4d, 0x48,0x4d,0xff,0x4e,0x49,0x4f,0xff,0x4f,0x49,0x50,0xff,0x4e,0x49,0x4f,0xff,0x4f, 0x49,0x50,0xff,0x4e,0x49,0x4f,0xff,0x4e,0x49,0x4f,0xff,0x4c,0x47,0x4d,0xff,0x4c, 0x47,0x4c,0xff,0x4c,0x47,0x4c,0xff,0x4c,0x47,0x4c,0xff,0x4c,0x47,0x4c,0xff,0x4d, 0x48,0x4e,0xff,0x49,0x46,0x4a,0xff,0x4d,0x49,0x4d,0xff,0x15,0x20,0x18,0xff,0x3b, 0x3d,0x3d,0xff,0x3f,0x40,0x40,0xff,0x3b,0x3d,0x3b,0xff,0x3a,0x3d,0x3b,0xff,0x39, 0x3b,0x39,0xfd,0x46,0x44,0x46,0xfa,0x59,0x4f,0x5a,0xf2,0x17,0x13,0x17,0xe3,0x01, 0x00,0x01,0xc9,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x55,0x00, 0x00,0x00,0x33,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x05,0x00, 0x00,0x00,0x02,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00, 0x00,0x00,0x06,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x40,0x00, 0x00,0x00,0x65,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0xb2,0x02,0x02,0x02,0xcd,0x1f, 0x1f,0x1f,0xe0,0x3d,0x3d,0x3d,0xed,0x3f,0x3f,0x3f,0xf6,0x2d,0x2d,0x2d,0xfa,0x36, 0x36,0x36,0xfd,0x5f,0x5f,0x5f,0xfe,0x5d,0x5d,0x5d,0xfe,0x00,0x00,0x00,0xff,0x0b, 0x0b,0x0b,0xff,0x3a,0x3a,0x3a,0xff,0x45,0x45,0x45,0xff,0x3f,0x3f,0x3f,0xff,0x15, 0x15,0x15,0xff,0x00,0x00,0x00,0xfe,0x0f,0x0f,0x0f,0xfe,0x4d,0x4d,0x4d,0xfb,0x0d, 0x0d,0x0d,0xf7,0x40,0x40,0x40,0xee,0x07,0x07,0x07,0xdf,0x00,0x00,0x00,0xca,0x00, 0x00,0x00,0xb2,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0xa4,0x00, 0x00,0x00,0xba,0x00,0x00,0x00,0xd3,0x01,0x01,0x01,0xe8,0x0e,0x0c,0x0d,0xf4,0x1d, 0x18,0x19,0xfb,0x2a,0x24,0x24,0xfc,0x67,0x58,0x59,0xfc,0x5b,0x4d,0x4f,0xf9,0x00, 0x00,0x00,0xf2,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0xe0,0x00, 0x00,0x00,0xdf,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,0xec,0x00, 0x00,0x00,0xf3,0x01,0x01,0x01,0xf9,0x05,0x04,0x04,0xfc,0x0a,0x09,0x09,0xfd,0x11, 0x0f,0x0f,0xfe,0x19,0x15,0x16,0xff,0x21,0x1c,0x1c,0xfe,0x27,0x21,0x21,0xfe,0x33, 0x2c,0x2c,0xfe,0x46,0x3c,0x3c,0xff,0x4e,0x43,0x44,0xff,0x51,0x45,0x46,0xff,0x62, 0x53,0x55,0xff,0x76,0x62,0x64,0xff,0xa7,0x95,0x96,0xff,0xee,0xe8,0xe8,0xff,0xff, 0xff,0xff,0xff,0xcd,0xc1,0xc2,0xff,0x7b,0x63,0x64,0xff,0x67,0x57,0x58,0xff,0x48, 0x3c,0x3d,0xff,0x30,0x27,0x28,0xff,0x2b,0x24,0x24,0xfe,0x2b,0x25,0x25,0xfd,0x29, 0x23,0x23,0xfc,0x25,0x1e,0x1f,0xfd,0x1d,0x18,0x19,0xfd,0x15,0x11,0x12,0xfe,0x0d, 0x0b,0x0b,0xfe,0x09,0x08,0x08,0xff,0x0a,0x09,0x09,0xff,0x12,0x0f,0x0f,0xff,0x1f, 0x1a,0x1a,0xff,0x2f,0x28,0x29,0xff,0x41,0x36,0x37,0xff,0x4e,0x41,0x42,0xff,0x56, 0x49,0x4a,0xff,0x5b,0x4d,0x4e,0xff,0x5b,0x4c,0x4d,0xff,0x59,0x4a,0x4b,0xff,0x57, 0x49,0x4a,0xff,0x56,0x48,0x49,0xff,0x55,0x47,0x48,0xff,0x55,0x47,0x48,0xff,0x55, 0x47,0x48,0xff,0x54,0x47,0x48,0xff,0x55,0x47,0x48,0xff,0x55,0x47,0x48,0xff,0x54, 0x46,0x47,0xff,0x58,0x49,0x4b,0xff,0x68,0x56,0x58,0xff,0x7e,0x69,0x6b,0xff,0x88, 0x6d,0x6f,0xff,0xd9,0xcf,0xd0,0xff,0xff,0xff,0xff,0xff,0xde,0xd6,0xd7,0xff,0x7b, 0x6c,0x6d,0xff,0x4a,0x3d,0x3e,0xff,0x42,0x38,0x39,0xff,0x4b,0x3e,0x3f,0xff,0x62, 0x50,0x52,0xff,0xda,0xd5,0xd6,0xff,0xff,0xff,0xff,0xff,0xd3,0xc7,0xc7,0xff,0x91, 0x7b,0x7d,0xff,0x71,0x5e,0x5f,0xff,0x58,0x49,0x4b,0xff,0x45,0x39,0x3b,0xff,0x3f, 0x34,0x35,0xff,0x3f,0x34,0x35,0xff,0x3f,0x34,0x35,0xff,0x3d,0x33,0x34,0xff,0x3f, 0x35,0x36,0xff,0x46,0x3b,0x3c,0xff,0x4b,0x3f,0x40,0xff,0x4f,0x43,0x44,0xff,0x6a, 0x5a,0x5c,0xff,0x60,0x52,0x53,0xff,0x6e,0x5e,0x5f,0xff,0x82,0x6e,0x70,0xff,0x8c, 0x73,0x74,0xff,0xe9,0xe3,0xe3,0xff,0xff,0xff,0xff,0xff,0xce,0xc4,0xc5,0xff,0x6c, 0x5c,0x5e,0xff,0x4c,0x3f,0x40,0xff,0x44,0x39,0x3a,0xff,0x50,0x42,0x43,0xff,0x6f, 0x5d,0x5f,0xff,0xf2,0xf0,0xf0,0xff,0xff,0xff,0xff,0xff,0xd3,0xc7,0xc8,0xff,0x83, 0x6f,0x70,0xff,0x63,0x53,0x54,0xff,0x46,0x3b,0x3c,0xff,0x33,0x2b,0x2b,0xff,0x2c, 0x25,0x25,0xff,0x2c,0x25,0x25,0xff,0x2c,0x25,0x25,0xff,0x2b,0x23,0x23,0xff,0x3f, 0x34,0x36,0xff,0x49,0x3e,0x3f,0xff,0x2b,0x25,0x25,0xff,0x2a,0x23,0x23,0xff,0x2c, 0x25,0x25,0xff,0x2c,0x25,0x25,0xff,0x2c,0x25,0x25,0xff,0x2b,0x24,0x25,0xff,0x28, 0x21,0x23,0xff,0x23,0x1d,0x1e,0xff,0x1e,0x19,0x19,0xff,0x15,0x12,0x12,0xff,0x0e, 0x0c,0x0c,0xff,0x0e,0x0c,0x0c,0xff,0x20,0x1b,0x1b,0xff,0x41,0x35,0x36,0xff,0x6a, 0x59,0x5b,0xff,0xd1,0xc7,0xc8,0xff,0xff,0xff,0xff,0xff,0xfb,0xf9,0xf9,0xff,0xa1, 0x85,0x88,0xff,0x93,0x78,0x7b,0xff,0x8e,0x79,0x7a,0xff,0x7f,0x6d,0x6f,0xff,0x8c, 0x7e,0x7e,0xff,0xa9,0x9e,0x9e,0xff,0xcd,0xc4,0xc5,0xff,0xec,0xe8,0xe8,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfe,0xfe,0xff,0xf3,0xf1,0xf1,0xff,0xe6, 0xe1,0xe1,0xff,0xc8,0xc0,0xc1,0xff,0xb0,0xa6,0xa7,0xff,0x8f,0x80,0x81,0xff,0x67, 0x57,0x58,0xff,0x4d,0x3e,0x3f,0xff,0x3d,0x32,0x33,0xff,0x2c,0x25,0x26,0xff,0x1e, 0x1a,0x1a,0xff,0x1b,0x17,0x18,0xff,0x2b,0x23,0x24,0xff,0x47,0x3a,0x3b,0xff,0x78, 0x68,0x69,0xff,0xdd,0xd6,0xd6,0xff,0xff,0xff,0xff,0xff,0xe9,0xe2,0xe2,0xff,0x9d, 0x81,0x84,0xff,0x80,0x6a,0x6c,0xff,0x6a,0x58,0x5a,0xff,0x59,0x4a,0x4b,0xff,0x54, 0x46,0x47,0xff,0x55,0x47,0x48,0xff,0x55,0x47,0x48,0xff,0x55,0x47,0x48,0xff,0x55, 0x47,0x48,0xff,0x55,0x47,0x48,0xff,0x55,0x47,0x48,0xff,0x55,0x47,0x48,0xff,0x55, 0x47,0x48,0xff,0x55,0x47,0x48,0xff,0x55,0x47,0x48,0xff,0x53,0x45,0x46,0xff,0x4e, 0x41,0x42,0xff,0x46,0x3a,0x3b,0xff,0x3a,0x30,0x31,0xff,0x2a,0x23,0x24,0xff,0x1c, 0x16,0x18,0xff,0x13,0x0f,0x10,0xff,0x10,0x0d,0x0e,0xff,0x1c,0x18,0x18,0xff,0x41, 0x37,0x38,0xff,0x58,0x4a,0x4b,0xff,0x50,0x43,0x44,0xff,0x52,0x44,0x45,0xff,0x57, 0x48,0x49,0xff,0x5b,0x4d,0x4e,0xff,0x5b,0x4c,0x4d,0xff,0x59,0x4b,0x4c,0xff,0x57, 0x49,0x4a,0xff,0x56,0x47,0x49,0xff,0x56,0x47,0x49,0xff,0x55,0x47,0x48,0xff,0x54, 0x46,0x47,0xff,0x54,0x46,0x47,0xff,0x55,0x47,0x48,0xff,0x55,0x47,0x48,0xff,0x55, 0x47,0x48,0xff,0x5e,0x4e,0x4f,0xff,0x72,0x60,0x61,0xff,0x85,0x6d,0x6f,0xff,0xae, 0x9a,0x9c,0xff,0xee,0xe8,0xe9,0xff,0xff,0xff,0xff,0xff,0xb0,0xa5,0xa5,0xff,0x4f, 0x3f,0x40,0xfd,0x33,0x2b,0x2c,0xf8,0x15,0x12,0x12,0xee,0x03,0x03,0x03,0xd9,0x00, 0x00,0x00,0xb7,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x47,0x00, 0x00,0x00,0x37,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x62,0x00, 0x00,0x00,0x86,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0xce,0x37,0x32,0x37,0xe6,0x5e, 0x53,0x5f,0xf4,0x5e,0x52,0x5f,0xfb,0x5e,0x52,0x5f,0xfe,0x5e,0x52,0x5f,0xff,0x5e, 0x52,0x5f,0xff,0x5e,0x52,0x5e,0xff,0x59,0x50,0x5b,0xff,0x6f,0x5b,0x6b,0xff,0x8d, 0x69,0x6d,0xff,0x96,0x6c,0x6f,0xff,0x7c,0x62,0x74,0xff,0x34,0x39,0x36,0xff,0x16, 0x23,0x17,0xff,0x2c,0x33,0x2c,0xff,0x46,0x44,0x46,0xff,0x4d,0x48,0x4e,0xff,0x4f, 0x49,0x50,0xff,0x4d,0x48,0x4e,0xff,0x4f,0x49,0x50,0xff,0x4d,0x47,0x4e,0xff,0x4c, 0x47,0x4c,0xff,0x4c,0x47,0x4d,0xff,0x4d,0x48,0x4d,0xff,0x4d,0x48,0x4d,0xff,0x4d, 0x48,0x4e,0xff,0x4e,0x49,0x4f,0xff,0x4f,0x49,0x50,0xff,0x4b,0x47,0x4c,0xff,0x3c, 0x3f,0x3e,0xff,0x0b,0x1a,0x0f,0xff,0x27,0x30,0x28,0xff,0x2a,0x33,0x2c,0xff,0x29, 0x31,0x2a,0xff,0x34,0x39,0x35,0xfe,0x3f,0x3f,0x3f,0xfc,0x5a,0x51,0x5a,0xf6,0x33, 0x2a,0x32,0xea,0x04,0x03,0x04,0xd4,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0x8b,0x00, 0x00,0x00,0x62,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x11,0x00, 0x00,0x00,0x07,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x15,0x00, 0x00,0x00,0x2c,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x78,0x01,0x01,0x01,0xa4,0x0f, 0x0f,0x0f,0xc7,0x35,0x35,0x35,0xde,0x45,0x45,0x45,0xed,0x32,0x32,0x32,0xf6,0x33, 0x33,0x33,0xfb,0x1a,0x1a,0x1a,0xfd,0x15,0x15,0x15,0xfe,0x63,0x63,0x63,0xff,0x20, 0x20,0x20,0xff,0x01,0x01,0x01,0xff,0x2d,0x2d,0x2d,0xff,0x45,0x45,0x45,0xff,0x10, 0x10,0x10,0xfe,0x25,0x25,0x25,0xfd,0x30,0x30,0x30,0xfc,0x00,0x00,0x00,0xfb,0x1b, 0x1b,0x1b,0xf9,0x43,0x43,0x43,0xf5,0x32,0x32,0x32,0xee,0x17,0x17,0x17,0xdf,0x00, 0x00,0x00,0xcb,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x89,0x00, 0x00,0x00,0x8b,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0xd6,0x0d, 0x0b,0x0b,0xea,0x25,0x1e,0x1f,0xf7,0x0e,0x0c,0x0d,0xfb,0x13,0x10,0x10,0xfd,0x49, 0x3d,0x3e,0xfb,0x2d,0x25,0x26,0xf5,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0xe3,0x00, 0x00,0x00,0xda,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,0xd7,0x00, 0x00,0x00,0xdd,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,0xef,0x01,0x00,0x00,0xf6,0x02, 0x02,0x02,0xfc,0x04,0x04,0x04,0xfe,0x08,0x06,0x06,0xfe,0x0c,0x0a,0x0a,0xfe,0x0f, 0x0d,0x0d,0xfd,0x11,0x0e,0x0e,0xfe,0x11,0x0e,0x0e,0xfd,0x0f,0x0e,0x0e,0xfe,0x14, 0x11,0x11,0xfe,0x34,0x2b,0x2c,0xff,0x5a,0x4c,0x4e,0xff,0x69,0x58,0x59,0xff,0x9a, 0x8a,0x8b,0xff,0xec,0xe6,0xe6,0xff,0xff,0xff,0xff,0xff,0xca,0xbf,0xc0,0xff,0x75, 0x5f,0x61,0xff,0x63,0x55,0x56,0xff,0x38,0x2f,0x30,0xfe,0x16,0x11,0x12,0xfc,0x12, 0x0f,0x0f,0xfb,0x13,0x10,0x10,0xf9,0x12,0x0f,0x0f,0xf7,0x10,0x0d,0x0e,0xf7,0x0d, 0x0b,0x0b,0xf7,0x0a,0x07,0x07,0xf9,0x05,0x05,0x05,0xfc,0x04,0x04,0x04,0xfe,0x0a, 0x09,0x08,0xff,0x16,0x12,0x13,0xff,0x28,0x21,0x22,0xff,0x36,0x2b,0x2c,0xff,0x47, 0x38,0x39,0xff,0x5b,0x48,0x4a,0xff,0x67,0x52,0x54,0xff,0x6d,0x58,0x5a,0xff,0x6d, 0x57,0x59,0xff,0x69,0x53,0x55,0xff,0x63,0x4f,0x51,0xff,0x5e,0x4b,0x4c,0xff,0x59, 0x47,0x48,0xff,0x55,0x43,0x44,0xff,0x51,0x40,0x41,0xff,0x4d,0x3d,0x3e,0xff,0x4b, 0x3b,0x3c,0xff,0x49,0x39,0x3a,0xff,0x47,0x38,0x39,0xff,0x4a,0x3a,0x3c,0xff,0x59, 0x47,0x48,0xff,0x6e,0x58,0x59,0xff,0x75,0x5a,0x5c,0xff,0xd3,0xc9,0xca,0xff,0xff, 0xff,0xff,0xff,0xdb,0xd4,0xd5,0xff,0x76,0x68,0x69,0xff,0x47,0x3a,0x3b,0xff,0x42, 0x38,0x38,0xff,0x4c,0x40,0x41,0xff,0x64,0x52,0x53,0xff,0xdb,0xd6,0xd6,0xff,0xff, 0xff,0xff,0xff,0xd4,0xc8,0xc9,0xff,0x93,0x7e,0x80,0xff,0x73,0x60,0x62,0xff,0x59, 0x4a,0x4b,0xff,0x45,0x39,0x3a,0xff,0x3f,0x34,0x35,0xff,0x3f,0x34,0x35,0xff,0x3e, 0x33,0x34,0xff,0x43,0x39,0x3a,0xff,0x52,0x46,0x46,0xff,0x56,0x49,0x49,0xff,0x51, 0x45,0x46,0xff,0x55,0x48,0x49,0xff,0x59,0x4b,0x4c,0xff,0x53,0x45,0x46,0xff,0x70, 0x5f,0x60,0xff,0x85,0x72,0x73,0xff,0x91,0x78,0x7a,0xff,0xeb,0xe5,0xe5,0xff,0xff, 0xff,0xff,0xff,0xd2,0xc7,0xc8,0xff,0x6d,0x5e,0x5f,0xff,0x4d,0x40,0x41,0xff,0x46, 0x3a,0x3b,0xff,0x52,0x44,0x45,0xff,0x70,0x5e,0x5f,0xff,0xf2,0xf0,0xf0,0xff,0xff, 0xff,0xff,0xff,0xcf,0xc4,0xc5,0xff,0x76,0x64,0x65,0xff,0x51,0x44,0x44,0xff,0x30, 0x28,0x29,0xff,0x1b,0x15,0x17,0xff,0x12,0x0f,0x0e,0xff,0x10,0x0e,0x0e,0xff,0x10, 0x0d,0x0d,0xff,0x17,0x13,0x13,0xff,0x13,0x10,0x11,0xff,0x3c,0x32,0x33,0xff,0x2f, 0x28,0x28,0xff,0x22,0x1d,0x1d,0xff,0x13,0x10,0x10,0xff,0x13,0x10,0x10,0xff,0x13, 0x10,0x10,0xff,0x13,0x11,0x11,0xff,0x11,0x0e,0x0f,0xff,0x10,0x0d,0x0d,0xff,0x0d, 0x0b,0x0b,0xff,0x0a,0x08,0x08,0xff,0x06,0x06,0x06,0xff,0x0c,0x09,0x09,0xff,0x1f, 0x1a,0x1b,0xff,0x42,0x36,0x37,0xff,0x71,0x5f,0x61,0xff,0xd6,0xcb,0xcb,0xff,0xff, 0xff,0xff,0xff,0xfc,0xfb,0xfb,0xff,0xc2,0xab,0xae,0xff,0xcb,0xb7,0xba,0xff,0xdb, 0xcf,0xd0,0xff,0xe7,0xe0,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xf9,0xf8,0xf8,0xff,0xe7,0xe3,0xe3,0xff,0xd2,0xca,0xcb,0xff,0xb1, 0xa7,0xa8,0xff,0x8d,0x7f,0x80,0xff,0x72,0x63,0x64,0xff,0x52,0x40,0x42,0xff,0x4d, 0x3f,0x40,0xff,0x46,0x39,0x3a,0xff,0x3d,0x32,0x33,0xff,0x32,0x2a,0x2a,0xff,0x2a, 0x23,0x23,0xff,0x19,0x15,0x15,0xff,0x0f,0x0c,0x0d,0xff,0x12,0x0e,0x10,0xff,0x27, 0x22,0x21,0xff,0x47,0x3a,0x3c,0xff,0x7a,0x69,0x6b,0xff,0xdf,0xd7,0xd7,0xff,0xff, 0xff,0xff,0xff,0xe5,0xdc,0xdd,0xff,0x8b,0x6c,0x6e,0xff,0x78,0x60,0x62,0xff,0x5f, 0x4b,0x4c,0xff,0x4b,0x3b,0x3c,0xff,0x45,0x36,0x37,0xff,0x46,0x37,0x38,0xff,0x46, 0x37,0x38,0xff,0x46,0x37,0x38,0xff,0x46,0x37,0x38,0xff,0x46,0x37,0x38,0xff,0x46, 0x37,0x38,0xff,0x46,0x37,0x38,0xff,0x46,0x37,0x38,0xff,0x46,0x37,0x38,0xff,0x46, 0x37,0x38,0xff,0x44,0x35,0x36,0xff,0x3f,0x31,0x32,0xff,0x35,0x29,0x2a,0xff,0x28, 0x1d,0x1d,0xff,0x20,0x18,0x18,0xff,0x1d,0x18,0x19,0xff,0x14,0x10,0x11,0xff,0x15, 0x11,0x11,0xff,0x1c,0x18,0x18,0xff,0x30,0x28,0x28,0xff,0x4e,0x40,0x40,0xff,0x64, 0x52,0x53,0xff,0x6f,0x5a,0x5c,0xff,0x71,0x5c,0x5d,0xff,0x6f,0x59,0x5a,0xff,0x6b, 0x55,0x57,0xff,0x67,0x51,0x53,0xff,0x61,0x4d,0x4e,0xff,0x5c,0x49,0x4b,0xff,0x58, 0x45,0x47,0xff,0x53,0x41,0x42,0xff,0x4f,0x3e,0x3f,0xff,0x4c,0x3c,0x3d,0xff,0x4b, 0x3b,0x3c,0xff,0x49,0x39,0x3a,0xff,0x48,0x38,0x39,0xff,0x50,0x3f,0x40,0xff,0x63, 0x4f,0x51,0xff,0x74,0x5b,0x5d,0xff,0xa1,0x8b,0x8d,0xff,0xea,0xe4,0xe5,0xff,0xff, 0xff,0xff,0xff,0xad,0xa1,0xa2,0xff,0x4a,0x3a,0x3c,0xfd,0x30,0x28,0x2a,0xfa,0x15, 0x11,0x11,0xf2,0x03,0x03,0x03,0xe0,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xa3,0x00, 0x00,0x00,0x82,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x5f,0x00, 0x00,0x00,0x6d,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xc5,0x14, 0x15,0x15,0xde,0x50,0x47,0x51,0xf0,0x61,0x55,0x62,0xf9,0x5e,0x52,0x5f,0xfd,0x5e, 0x52,0x5f,0xfe,0x5e,0x52,0x5f,0xff,0x5f,0x52,0x5f,0xff,0x5f,0x52,0x5f,0xff,0x5f, 0x52,0x5f,0xff,0x59,0x50,0x5d,0xff,0x6e,0x59,0x66,0xff,0x7c,0x5f,0x64,0xff,0x76, 0x5d,0x69,0xff,0x5d,0x51,0x58,0xff,0x28,0x2b,0x29,0xff,0x21,0x2b,0x22,0xff,0x35, 0x39,0x34,0xff,0x4f,0x48,0x4f,0xff,0x52,0x4a,0x52,0xff,0x50,0x4a,0x51,0xff,0x4f, 0x49,0x51,0xff,0x4d,0x48,0x4d,0xff,0x4d,0x48,0x4e,0xff,0x4d,0x48,0x4e,0xff,0x4c, 0x47,0x4d,0xff,0x4c,0x47,0x4c,0xff,0x51,0x4a,0x53,0xff,0x43,0x43,0x44,0xff,0x32, 0x38,0x33,0xff,0x37,0x3a,0x38,0xff,0x44,0x42,0x46,0xff,0x4a,0x44,0x44,0xff,0x42, 0x40,0x40,0xff,0x41,0x3e,0x40,0xff,0x40,0x3e,0x40,0xfe,0x49,0x45,0x4a,0xfc,0x54, 0x4e,0x55,0xf7,0x4a,0x3f,0x4a,0xed,0x07,0x06,0x07,0xdc,0x00,0x00,0x00,0xc0,0x00, 0x00,0x00,0x9b,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x29,0x00, 0x00,0x00,0x15,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00, 0x00,0x00,0x09,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x54,0x00, 0x00,0x00,0x7e,0x03,0x03,0x03,0xa9,0x38,0x38,0x38,0xc9,0x42,0x42,0x42,0xdf,0x21, 0x21,0x21,0xed,0x13,0x13,0x13,0xf5,0x00,0x00,0x00,0xfa,0x01,0x01,0x01,0xfc,0x13, 0x13,0x13,0xfe,0x49,0x49,0x49,0xfd,0x00,0x00,0x00,0xfe,0x05,0x05,0x05,0xfd,0x37, 0x37,0x37,0xfd,0x1c,0x1c,0x1c,0xfb,0x06,0x06,0x06,0xfa,0x30,0x30,0x30,0xf7,0x1a, 0x1a,0x1a,0xf4,0x00,0x00,0x00,0xf1,0x24,0x24,0x24,0xed,0x43,0x43,0x43,0xe8,0x25, 0x25,0x25,0xdc,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x94,0x00, 0x00,0x00,0x7e,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x9f,0x00, 0x00,0x00,0xc1,0x08,0x07,0x07,0xdd,0x24,0x1e,0x1f,0xee,0x1b,0x16,0x18,0xf8,0x00, 0x00,0x00,0xfc,0x02,0x01,0x01,0xfd,0x08,0x07,0x07,0xfa,0x05,0x04,0x05,0xf5,0x00, 0x00,0x00,0xeb,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0xd3,0x00, 0x00,0x00,0xd2,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,0xe5,0x00, 0x00,0x00,0xee,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0xfd,0x01, 0x01,0x01,0xfd,0x01,0x01,0x01,0xfc,0x01,0x02,0x02,0xfb,0x02,0x01,0x01,0xfb,0x01, 0x01,0x01,0xfb,0x02,0x02,0x02,0xfd,0x03,0x02,0x02,0xfe,0x10,0x0d,0x0d,0xfe,0x2e, 0x27,0x27,0xff,0x4a,0x3c,0x3e,0xff,0x88,0x79,0x7b,0xff,0xe7,0xe2,0xe2,0xff,0xff, 0xff,0xff,0xff,0xbe,0xb5,0xb5,0xff,0x53,0x42,0x44,0xff,0x3e,0x34,0x35,0xff,0x1d, 0x19,0x19,0xfd,0x06,0x06,0x06,0xf9,0x01,0x01,0x01,0xf5,0x01,0x02,0x02,0xf0,0x01, 0x01,0x01,0xec,0x02,0x02,0x02,0xeb,0x01,0x02,0x02,0xee,0x01,0x00,0x00,0xf2,0x00, 0x00,0x00,0xf7,0x03,0x03,0x03,0xfb,0x0e,0x0c,0x0c,0xfd,0x1f,0x1a,0x1a,0xfe,0x35, 0x2b,0x2c,0xff,0x7e,0x75,0x75,0xff,0xb6,0xad,0xae,0xff,0xb9,0xae,0xaf,0xff,0xbf, 0xb4,0xb5,0xff,0xc3,0xb7,0xb8,0xff,0xc3,0xb6,0xb7,0xff,0xc2,0xb7,0xb8,0xff,0xc1, 0xb7,0xb8,0xff,0xbd,0xb4,0xb4,0xff,0xba,0xb1,0xb2,0xff,0xb7,0xaf,0xaf,0xff,0xb4, 0xac,0xad,0xff,0xb2,0xaa,0xab,0xff,0xb0,0xa8,0xa9,0xff,0xae,0xa6,0xa7,0xff,0xac, 0xa5,0xa6,0xff,0xad,0xa6,0xa6,0xff,0xb3,0xab,0xac,0xff,0xbb,0xb2,0xb3,0xff,0xbe, 0xb2,0xb3,0xff,0xed,0xe9,0xe9,0xff,0xff,0xff,0xff,0xff,0xd9,0xd2,0xd3,0xff,0x6b, 0x5f,0x60,0xff,0x3c,0x32,0x33,0xff,0x3d,0x33,0x34,0xff,0x4b,0x3e,0x3f,0xff,0x65, 0x52,0x53,0xff,0xdb,0xd6,0xd6,0xff,0xff,0xff,0xff,0xff,0xd2,0xc5,0xc5,0xff,0x8f, 0x76,0x78,0xff,0x6d,0x56,0x59,0xff,0x52,0x41,0x42,0xff,0x3c,0x2f,0x30,0xff,0x36, 0x29,0x2a,0xff,0x36,0x29,0x2a,0xff,0x33,0x27,0x27,0xff,0x4c,0x3c,0x3e,0xff,0x4a, 0x3c,0x3d,0xff,0x3b,0x2e,0x2f,0xff,0x34,0x28,0x29,0xff,0x33,0x26,0x27,0xff,0x31, 0x25,0x26,0xff,0x3b,0x2d,0x2e,0xff,0x4f,0x3f,0x40,0xff,0x6a,0x55,0x58,0xff,0x7d, 0x60,0x63,0xff,0xe6,0xe1,0xe1,0xff,0xff,0xff,0xff,0xff,0xd7,0xcd,0xce,0xff,0x73, 0x64,0x65,0xff,0x4d,0x40,0x41,0xff,0x46,0x3a,0x3b,0xff,0x52,0x44,0x45,0xff,0x70, 0x5e,0x5e,0xff,0xf2,0xf0,0xf0,0xff,0xff,0xff,0xff,0xff,0xcc,0xc1,0xc2,0xff,0x69, 0x59,0x5b,0xff,0x40,0x35,0x35,0xff,0x1f,0x1a,0x1a,0xff,0x0f,0x0c,0x0d,0xff,0x0d, 0x0b,0x0b,0xff,0x12,0x10,0x10,0xff,0x16,0x12,0x13,0xff,0x34,0x2b,0x2c,0xff,0x1d, 0x18,0x19,0xff,0x2b,0x24,0x24,0xff,0x36,0x2c,0x2d,0xff,0x15,0x12,0x13,0xff,0x02, 0x02,0x02,0xff,0x02,0x02,0x02,0xff,0x02,0x02,0x02,0xff,0x02,0x02,0x02,0xff,0x02, 0x01,0x01,0xff,0x02,0x01,0x01,0xff,0x01,0x01,0x01,0xff,0x01,0x01,0x01,0xff,0x00, 0x01,0x01,0xff,0x09,0x08,0x08,0xff,0x1d,0x19,0x19,0xff,0x42,0x36,0x37,0xff,0x71, 0x61,0x61,0xff,0xd9,0xcd,0xce,0xff,0xff,0xff,0xff,0xff,0xfe,0xfe,0xfe,0xff,0xf5, 0xf1,0xf2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfe,0xff,0xee, 0xe8,0xe9,0xff,0xe3,0xd9,0xda,0xff,0xc7,0xb9,0xba,0xff,0xb2,0xa0,0xa1,0xff,0x92, 0x7f,0x80,0xff,0x71,0x5d,0x5f,0xff,0x5a,0x49,0x4a,0xff,0x50,0x42,0x42,0xff,0x46, 0x3a,0x3b,0xff,0x3d,0x32,0x33,0xff,0x32,0x2a,0x2a,0xff,0x28,0x21,0x22,0xff,0x1f, 0x1a,0x1a,0xff,0x1e,0x18,0x19,0xff,0x2d,0x26,0x27,0xff,0x1c,0x19,0x18,0xff,0x14, 0x11,0x11,0xff,0x17,0x13,0x14,0xff,0x27,0x20,0x21,0xff,0x49,0x3c,0x3d,0xff,0x83, 0x72,0x74,0xff,0xe3,0xda,0xdc,0xff,0xff,0xff,0xff,0xff,0xf3,0xef,0xef,0xff,0xc8, 0xbc,0xbd,0xff,0xc3,0xb8,0xb9,0xff,0xb8,0xae,0xaf,0xff,0xaf,0xa7,0xa7,0xff,0xab, 0xa6,0xa6,0xff,0xac,0xa6,0xa6,0xff,0xac,0xa6,0xa6,0xff,0xac,0xa6,0xa6,0xff,0xac, 0xa6,0xa6,0xff,0xac,0xa6,0xa6,0xff,0xac,0xa6,0xa6,0xff,0xac,0xa6,0xa6,0xff,0xac, 0xa6,0xa6,0xff,0xac,0xa6,0xa6,0xff,0xac,0xa6,0xa6,0xff,0xac,0xa5,0xa6,0xff,0xa9, 0xa3,0xa3,0xff,0xa6,0xa0,0xa0,0xff,0xa4,0x9f,0xa0,0xff,0x6c,0x67,0x67,0xff,0x14, 0x0e,0x0e,0xff,0x17,0x13,0x13,0xff,0x1b,0x17,0x17,0xff,0x27,0x20,0x21,0xff,0x50, 0x47,0x47,0xff,0x95,0x8c,0x8d,0xff,0xbb,0xb2,0xb3,0xff,0xc8,0xbd,0xbe,0xff,0xcb, 0xbf,0xc0,0xff,0xc4,0xb8,0xb9,0xff,0xc2,0xb6,0xb7,0xff,0xc1,0xb7,0xb8,0xff,0xbf, 0xb6,0xb6,0xff,0xbd,0xb3,0xb4,0xff,0xb9,0xb1,0xb0,0xff,0xb6,0xad,0xae,0xff,0xb4, 0xab,0xac,0xff,0xb1,0xaa,0xaa,0xff,0xaf,0xa8,0xa9,0xff,0xad,0xa6,0xa7,0xff,0xad, 0xa6,0xa6,0xff,0xb0,0xa8,0xa9,0xff,0xb7,0xae,0xaf,0xff,0xbe,0xb2,0xb4,0xff,0xd4, 0xcb,0xcc,0xff,0xf6,0xf4,0xf4,0xff,0xff,0xff,0xff,0xff,0xa8,0x9f,0xa0,0xff,0x3c, 0x2f,0x30,0xfe,0x2a,0x22,0x24,0xfc,0x11,0x0f,0x0f,0xf5,0x03,0x03,0x02,0xe9,0x00, 0x00,0x00,0xd5,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0x94,0x00, 0x00,0x00,0x8d,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0xaf,0x00, 0x00,0x00,0xc5,0x00,0x00,0x00,0xdb,0x37,0x32,0x37,0xec,0x5f,0x54,0x60,0xf7,0x5f, 0x52,0x60,0xfc,0x5e,0x52,0x5f,0xff,0x5e,0x52,0x5f,0xff,0x5e,0x52,0x5f,0xff,0x5f, 0x53,0x60,0xff,0x5e,0x52,0x5f,0xff,0x5e,0x52,0x5f,0xff,0x5e,0x52,0x5e,0xff,0x5d, 0x51,0x5f,0xff,0x58,0x4f,0x5d,0xff,0x69,0x56,0x60,0xff,0x73,0x5d,0x6a,0xff,0x5f, 0x53,0x5e,0xff,0x44,0x42,0x45,0xff,0x42,0x41,0x42,0xff,0x35,0x39,0x36,0xff,0x4d, 0x47,0x4d,0xff,0x4c,0x47,0x4d,0xff,0x4c,0x47,0x4d,0xff,0x4d,0x48,0x4e,0xff,0x4e, 0x49,0x4f,0xff,0x4d,0x48,0x4e,0xff,0x4e,0x49,0x50,0xff,0x50,0x4a,0x51,0xff,0x36, 0x3b,0x37,0xff,0x41,0x41,0x43,0xff,0x4d,0x46,0x4a,0xff,0x55,0x4c,0x53,0xff,0x87, 0x67,0x7a,0xff,0x98,0x72,0x87,0xff,0x62,0x54,0x60,0xff,0x5f,0x52,0x5e,0xff,0x62, 0x54,0x61,0xfd,0x59,0x50,0x5a,0xfa,0x46,0x44,0x47,0xf1,0x12,0x10,0x12,0xe2,0x01, 0x01,0x01,0xc9,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x56,0x00, 0x00,0x00,0x34,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x05,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x15,0x00, 0x00,0x00,0x2b,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x74,0x01,0x01,0x01,0x9b,0x19, 0x19,0x19,0xb9,0x0a,0x0a,0x0a,0xcf,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xea,0x00, 0x00,0x00,0xf3,0x02,0x02,0x02,0xf7,0x1e,0x1e,0x1e,0xf9,0x2e,0x2e,0x2e,0xfa,0x00, 0x00,0x00,0xfa,0x05,0x05,0x05,0xf8,0x30,0x30,0x30,0xf7,0x2f,0x2f,0x2f,0xf3,0x34, 0x34,0x34,0xef,0x20,0x20,0x20,0xea,0x01,0x01,0x01,0xe3,0x01,0x01,0x01,0xdc,0x0f, 0x0f,0x0f,0xd5,0x19,0x19,0x19,0xcc,0x04,0x04,0x04,0xbf,0x00,0x00,0x00,0xa9,0x00, 0x00,0x00,0x8f,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x68,0x00, 0x00,0x00,0x80,0x00,0x00,0x00,0xa1,0x03,0x02,0x02,0xc6,0x15,0x11,0x11,0xe3,0x1c, 0x18,0x18,0xf3,0x04,0x03,0x03,0xfb,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0xfe,0x00, 0x00,0x00,0xfa,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0xe4,0x00, 0x00,0x00,0xdd,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,0xdc,0x00, 0x00,0x00,0xe2,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,0xf7,0x00, 0x00,0x00,0xfb,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0xf9,0x00, 0x00,0x00,0xf8,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0xfb,0x01, 0x01,0x01,0xfd,0x0c,0x0a,0x0a,0xfe,0x26,0x20,0x20,0xfe,0x50,0x41,0x42,0xff,0x98, 0x88,0x89,0xff,0xe9,0xe4,0xe4,0xff,0xff,0xff,0xff,0xff,0xbe,0xb4,0xb5,0xff,0x51, 0x3f,0x41,0xff,0x39,0x30,0x31,0xfd,0x18,0x14,0x14,0xfa,0x04,0x03,0x03,0xf4,0x00, 0x00,0x00,0xec,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0xda,0x00, 0x00,0x00,0xe0,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,0xf1,0x04,0x03,0x03,0xf7,0x13, 0x10,0x10,0xfc,0x2a,0x23,0x24,0xfe,0x48,0x39,0x3b,0xff,0xbe,0xb6,0xb7,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xf7,0xf4,0xf4,0xff,0xf1,0xea,0xeb,0xff,0xf5,0xef,0xef,0xff,0xf7, 0xf2,0xf2,0xff,0xf8,0xf3,0xf3,0xff,0xfa,0xf5,0xf6,0xff,0xfa,0xf5,0xf5,0xff,0xf8, 0xf5,0xf4,0xff,0xf8,0xf3,0xf3,0xff,0xf6,0xf2,0xf2,0xff,0xf4,0xf1,0xf1,0xff,0xf3, 0xf0,0xf0,0xff,0xf3,0xf0,0xef,0xff,0xf2,0xef,0xf0,0xff,0xe9,0xe4,0xe6,0xff,0xea, 0xe7,0xe7,0xff,0xb3,0xab,0xac,0xff,0x55,0x4a,0x4c,0xff,0x31,0x28,0x2a,0xff,0x36, 0x2d,0x2e,0xff,0x48,0x3b,0x3c,0xff,0x66,0x53,0x54,0xff,0xdc,0xd7,0xd7,0xff,0xff, 0xff,0xff,0xff,0xf0,0xeb,0xea,0xff,0xd7,0xce,0xcf,0xff,0xcc,0xc4,0xc5,0xff,0xc3, 0xbb,0xbd,0xff,0xbb,0xb6,0xb6,0xff,0xb8,0xb3,0xb4,0xff,0xb8,0xb3,0xb4,0xff,0xb7, 0xb2,0xb3,0xff,0xc3,0xbc,0xbd,0xff,0xb9,0xb3,0xb5,0xff,0xb6,0xb2,0xb2,0xff,0xb8, 0xb3,0xb4,0xff,0xb8,0xb3,0xb4,0xff,0xb8,0xb3,0xb4,0xff,0xbb,0xb6,0xb6,0xff,0xc3, 0xbc,0xbc,0xff,0xcc,0xc3,0xc4,0xff,0xd2,0xc7,0xc8,0xff,0xf7,0xf5,0xf5,0xff,0xff, 0xff,0xff,0xff,0xd4,0xc9,0xca,0xff,0x89,0x77,0x78,0xff,0x55,0x47,0x48,0xff,0x46, 0x3a,0x3b,0xff,0x52,0x44,0x45,0xff,0x6d,0x5b,0x5c,0xff,0xf1,0xf0,0xf0,0xff,0xff, 0xff,0xff,0xff,0xc8,0xc0,0xbf,0xff,0x6e,0x5f,0x61,0xff,0x52,0x44,0x45,0xff,0x37, 0x2e,0x2e,0xff,0x24,0x1d,0x1e,0xff,0x1b,0x17,0x17,0xff,0x1a,0x15,0x15,0xff,0x14, 0x12,0x12,0xff,0x40,0x36,0x36,0xff,0x1f,0x19,0x1a,0xff,0x0c,0x0a,0x0a,0xff,0x0a, 0x08,0x08,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00, 0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00, 0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x08,0x07,0x07,0xff,0x1d, 0x19,0x19,0xff,0x42,0x36,0x37,0xff,0x73,0x62,0x63,0xff,0xda,0xce,0xcf,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfe,0xff,0xf4,0xf0,0xf1,0xff,0xe0, 0xd5,0xd6,0xff,0xc3,0xad,0xaf,0xff,0xb4,0x99,0x9b,0xff,0xac,0x8f,0x92,0xff,0x92, 0x75,0x77,0xff,0x87,0x6e,0x70,0xff,0x7a,0x64,0x66,0xff,0x6d,0x5a,0x5c,0xff,0x5e, 0x4e,0x50,0xff,0x4e,0x41,0x42,0xff,0x3f,0x35,0x37,0xff,0x30,0x29,0x2a,0xff,0x26, 0x1f,0x1f,0xff,0x1b,0x16,0x16,0xff,0x16,0x13,0x12,0xff,0x27,0x21,0x21,0xff,0x2c, 0x26,0x26,0xff,0x31,0x29,0x2a,0xff,0x22,0x1d,0x1e,0xff,0x36,0x2e,0x2f,0xff,0x40, 0x36,0x38,0xff,0x5a,0x4d,0x4d,0xff,0x8b,0x7a,0x7a,0xff,0xe1,0xd9,0xda,0xff,0xff, 0xff,0xff,0xff,0xfb,0xf9,0xfa,0xff,0xf4,0xef,0xf0,0xff,0xf2,0xee,0xee,0xff,0xee, 0xec,0xed,0xff,0xed,0xeb,0xeb,0xff,0xec,0xea,0xea,0xff,0xec,0xea,0xea,0xff,0xec, 0xea,0xea,0xff,0xec,0xea,0xea,0xff,0xec,0xea,0xea,0xff,0xec,0xea,0xea,0xff,0xec, 0xea,0xea,0xff,0xec,0xea,0xea,0xff,0xec,0xea,0xea,0xff,0xec,0xea,0xea,0xff,0xec, 0xea,0xea,0xff,0xec,0xea,0xea,0xff,0xeb,0xea,0xea,0xff,0xea,0xea,0xea,0xff,0xef, 0xed,0xed,0xff,0x96,0x92,0x93,0xff,0x0d,0x09,0x08,0xff,0x1a,0x16,0x16,0xff,0x24, 0x1e,0x1e,0xff,0x34,0x29,0x2a,0xff,0x7b,0x6f,0x71,0xff,0xea,0xe5,0xe6,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe, 0xfe,0xfe,0xff,0xf8,0xf3,0xf4,0xff,0xf2,0xec,0xec,0xff,0xf5,0xf0,0xf1,0xff,0xf7, 0xf1,0xf2,0xff,0xf8,0xf4,0xf4,0xff,0xfa,0xf5,0xf6,0xff,0xf9,0xf4,0xf4,0xff,0xf8, 0xf4,0xf4,0xff,0xf7,0xf3,0xf3,0xff,0xf6,0xf2,0xf1,0xff,0xf4,0xf1,0xf1,0xff,0xf3, 0xf0,0xf1,0xff,0xf2,0xef,0xf0,0xff,0xed,0xea,0xeb,0xff,0xe7,0xe3,0xe3,0xff,0xe7, 0xe3,0xe3,0xff,0x8a,0x81,0x81,0xff,0x30,0x26,0x27,0xfe,0x20,0x1b,0x1c,0xfc,0x0d, 0x0b,0x0b,0xf9,0x02,0x01,0x01,0xf2,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,0xd8,0x00, 0x00,0x00,0xca,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0xbd,0x00, 0x00,0x00,0xc5,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0xe0,0x17,0x17,0x16,0xed,0x50, 0x47,0x50,0xf6,0x61,0x54,0x62,0xfb,0x5e,0x52,0x5f,0xfd,0x5e,0x52,0x5f,0xff,0x5e, 0x52,0x5f,0xff,0x5f,0x53,0x60,0xff,0x5e,0x52,0x5f,0xff,0x5e,0x52,0x5f,0xff,0x5d, 0x51,0x5f,0xff,0x5b,0x50,0x5c,0xff,0x63,0x56,0x63,0xff,0x5a,0x50,0x5b,0xff,0x48, 0x46,0x4b,0xff,0x45,0x43,0x46,0xff,0x50,0x49,0x51,0xff,0x52,0x4b,0x53,0xff,0x52, 0x4b,0x53,0xff,0x4b,0x46,0x4c,0xff,0x3d,0x3e,0x3e,0xff,0x42,0x41,0x43,0xff,0x48, 0x45,0x49,0xff,0x47,0x45,0x48,0xff,0x50,0x49,0x51,0xff,0x4f,0x49,0x50,0xff,0x43, 0x42,0x43,0xff,0x3b,0x3e,0x40,0xff,0x48,0x45,0x49,0xff,0x7a,0x60,0x6f,0xff,0x79, 0x60,0x75,0xff,0x65,0x56,0x65,0xff,0x5f,0x51,0x55,0xff,0x5e,0x51,0x58,0xff,0x3a, 0x3c,0x39,0xff,0x36,0x3a,0x37,0xfe,0x3a,0x3c,0x3b,0xfb,0x57,0x4f,0x57,0xf5,0x18, 0x1a,0x19,0xe7,0x01,0x01,0x01,0xd2,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0x8b,0x00, 0x00,0x00,0x62,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x11,0x00, 0x00,0x00,0x08,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00, 0x00,0x00,0x06,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x3c,0x00, 0x00,0x00,0x5a,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0xad,0x00, 0x00,0x00,0xc2,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0xe3,0x06,0x06,0x06,0xeb,0x44, 0x44,0x44,0xef,0x0d,0x0d,0x0d,0xef,0x00,0x00,0x00,0xed,0x01,0x01,0x01,0xea,0x10, 0x10,0x10,0xe6,0x26,0x26,0x26,0xe1,0x15,0x15,0x15,0xd9,0x01,0x01,0x01,0xce,0x00, 0x00,0x00,0xc1,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0xa1,0x00, 0x00,0x00,0x93,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0x58,0x00, 0x00,0x00,0x52,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0xa4,0x07, 0x06,0x06,0xca,0x2a,0x22,0x23,0xe5,0x1f,0x1a,0x1a,0xf4,0x00,0x00,0x00,0xfc,0x00, 0x00,0x00,0xfe,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0xf8,0x00, 0x00,0x00,0xf3,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xe5,0x01, 0x01,0x01,0xe4,0x05,0x04,0x04,0xe7,0x09,0x07,0x08,0xe9,0x0e,0x0b,0x0c,0xee,0x13, 0x0f,0x0f,0xf3,0x16,0x12,0x12,0xf8,0x1b,0x18,0x18,0xfb,0x16,0x12,0x12,0xfc,0x01, 0x01,0x01,0xfa,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0xf6,0x00, 0x00,0x00,0xf8,0x00,0x00,0x00,0xfa,0x01,0x01,0x01,0xfd,0x0c,0x0b,0x0b,0xfe,0x2b, 0x25,0x25,0xfe,0x5e,0x4f,0x50,0xff,0xa4,0x94,0x95,0xff,0xeb,0xe7,0xe8,0xff,0xff, 0xff,0xff,0xff,0xbe,0xb4,0xb5,0xff,0x51,0x40,0x42,0xfe,0x3b,0x31,0x32,0xfc,0x1c, 0x17,0x17,0xf8,0x05,0x04,0x04,0xf0,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,0xd6,0x00, 0x00,0x00,0xce,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0xe2,0x00, 0x00,0x00,0xed,0x05,0x04,0x05,0xf6,0x18,0x14,0x14,0xfc,0x34,0x2b,0x2c,0xfe,0x58, 0x47,0x48,0xff,0xc6,0xbd,0xbe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf6,0xf2,0xf3,0xff,0xf1, 0xec,0xed,0xff,0xe2,0xd8,0xd9,0xff,0xd5,0xc6,0xc7,0xff,0xcf,0xbe,0xbf,0xff,0xbb, 0xa2,0xa5,0xff,0xb0,0x95,0x97,0xff,0xac,0x94,0x95,0xff,0xa6,0x8f,0x91,0xff,0xa1, 0x8c,0x8e,0xff,0x9e,0x89,0x8b,0xff,0x9c,0x87,0x89,0xff,0x99,0x86,0x88,0xff,0x95, 0x82,0x83,0xff,0x8d,0x7b,0x7c,0xff,0x81,0x72,0x73,0xff,0x61,0x54,0x55,0xff,0x3a, 0x32,0x32,0xff,0x2a,0x23,0x24,0xff,0x31,0x29,0x29,0xff,0x47,0x3b,0x3b,0xff,0x67, 0x53,0x55,0xff,0xdc,0xd7,0xd7,0xff,0xff,0xff,0xff,0xff,0xf8,0xf5,0xf4,0xff,0xef, 0xea,0xe9,0xff,0xea,0xe6,0xe6,0xff,0xe6,0xe1,0xe2,0xff,0xe3,0xde,0xdf,0xff,0xe1, 0xde,0xde,0xff,0xe1,0xde,0xdd,0xff,0xe1,0xde,0xde,0xff,0xdf,0xdc,0xdc,0xff,0xe1, 0xde,0xde,0xff,0xe1,0xde,0xde,0xff,0xe1,0xde,0xde,0xff,0xe1,0xde,0xde,0xff,0xe1, 0xde,0xde,0xff,0xe3,0xdf,0xdf,0xff,0xe6,0xe1,0xe2,0xff,0xea,0xe5,0xe6,0xff,0xed, 0xe7,0xe7,0xff,0xfa,0xf8,0xf8,0xff,0xff,0xff,0xff,0xff,0xcf,0xc5,0xc6,0xff,0x7f, 0x6e,0x70,0xff,0x64,0x54,0x56,0xff,0x4a,0x3e,0x3f,0xff,0x50,0x43,0x45,0xff,0x7d, 0x69,0x6c,0xff,0xf3,0xf1,0xf2,0xff,0xff,0xff,0xff,0xff,0xd4,0xca,0xcb,0xff,0x81, 0x6f,0x71,0xff,0x58,0x4b,0x4c,0xff,0x35,0x2d,0x2d,0xff,0x1d,0x19,0x19,0xff,0x11, 0x0e,0x0f,0xff,0x0c,0x09,0x0a,0xff,0x06,0x05,0x05,0xff,0x19,0x15,0x16,0xff,0x26, 0x20,0x21,0xff,0x1a,0x16,0x16,0xff,0x0f,0x0d,0x0d,0xff,0x0f,0x0c,0x0c,0xff,0x11, 0x0e,0x0f,0xff,0x1a,0x16,0x16,0xff,0x14,0x11,0x12,0xff,0x08,0x06,0x07,0xff,0x08, 0x07,0x07,0xff,0x07,0x06,0x06,0xff,0x05,0x05,0x05,0xff,0x03,0x03,0x03,0xff,0x02, 0x02,0x02,0xff,0x09,0x08,0x08,0xff,0x1e,0x1a,0x1a,0xff,0x42,0x36,0x37,0xff,0x73, 0x62,0x63,0xff,0xda,0xce,0xce,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xf8,0xf5,0xf6,0xff,0xec,0xe5,0xe6,0xff,0xdf,0xd5,0xd6,0xff,0xd5, 0xc5,0xc7,0xff,0xca,0xb7,0xb8,0xff,0xb7,0xa4,0xa6,0xff,0x97,0x80,0x81,0xff,0x78, 0x63,0x64,0xff,0x6b,0x58,0x5a,0xff,0x5f,0x4e,0x50,0xff,0x55,0x45,0x47,0xff,0x4a, 0x3e,0x3e,0xff,0x42,0x38,0x39,0xff,0x40,0x36,0x37,0xff,0x3a,0x31,0x32,0xff,0x3b, 0x33,0x33,0xff,0x3e,0x34,0x35,0xff,0x1e,0x19,0x1a,0xff,0x1d,0x18,0x18,0xff,0x16, 0x14,0x14,0xff,0x2f,0x27,0x28,0xff,0x3e,0x35,0x35,0xff,0x52,0x44,0x46,0xff,0x7e, 0x6e,0x6f,0xff,0xde,0xd7,0xd7,0xff,0xff,0xff,0xff,0xff,0xe9,0xe1,0xe1,0xff,0xa2, 0x89,0x8b,0xff,0x96,0x82,0x84,0xff,0x80,0x71,0x72,0xff,0x71,0x64,0x65,0xff,0x6c, 0x60,0x61,0xff,0x6d,0x61,0x62,0xff,0x6d,0x61,0x62,0xff,0x6d,0x61,0x62,0xff,0x6d, 0x61,0x62,0xff,0x6d,0x61,0x62,0xff,0x6d,0x61,0x62,0xff,0x6d,0x61,0x62,0xff,0x6d, 0x61,0x62,0xff,0x6d,0x61,0x62,0xff,0x6d,0x61,0x62,0xff,0x6c,0x60,0x60,0xff,0x67, 0x5c,0x5d,0xff,0x60,0x56,0x57,0xff,0x56,0x4d,0x4d,0xff,0x39,0x33,0x33,0xff,0x19, 0x15,0x15,0xff,0x1a,0x16,0x17,0xff,0x29,0x23,0x23,0xff,0x40,0x34,0x35,0xff,0x85, 0x76,0x77,0xff,0xe9,0xe3,0xe4,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0xfb,0xfa,0xff,0xf3,0xef,0xf0,0xff,0xec, 0xe4,0xe5,0xff,0xdb,0xcf,0xd0,0xff,0xd5,0xc7,0xc8,0xff,0xc5,0xb1,0xb2,0xff,0xaf, 0x94,0x96,0xff,0xaf,0x95,0x98,0xff,0xa9,0x91,0x94,0xff,0xa5,0x8e,0x90,0xff,0xa1, 0x8c,0x8d,0xff,0x9f,0x8a,0x8c,0xff,0x9c,0x87,0x89,0xff,0x98,0x85,0x87,0xff,0x93, 0x80,0x81,0xff,0x89,0x78,0x79,0xff,0x79,0x6a,0x6c,0xff,0x52,0x46,0x47,0xff,0x2c, 0x25,0x25,0xff,0x19,0x14,0x16,0xff,0x0a,0x08,0x09,0xfd,0x01,0x01,0x01,0xf9,0x00, 0x00,0x00,0xf3,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0xe6,0x13,0x10,0x10,0xe1,0x2f, 0x29,0x29,0xdf,0x1b,0x17,0x18,0xe1,0x02,0x01,0x02,0xe5,0x00,0x00,0x00,0xeb,0x00, 0x00,0x00,0xf2,0x3a,0x34,0x3a,0xf7,0x61,0x55,0x61,0xfb,0x5e,0x52,0x5f,0xfd,0x5e, 0x52,0x5f,0xff,0x5e,0x52,0x5f,0xff,0x5c,0x50,0x5d,0xff,0x5d,0x50,0x5d,0xff,0x5d, 0x51,0x5d,0xff,0x5e,0x52,0x5f,0xff,0x5d,0x51,0x5d,0xff,0x5f,0x52,0x5f,0xff,0x65, 0x56,0x65,0xff,0x50,0x4a,0x51,0xff,0x4a,0x46,0x4b,0xff,0x4d,0x48,0x4d,0xff,0x4d, 0x48,0x4e,0xff,0x4e,0x49,0x50,0xff,0x4d,0x48,0x4f,0xff,0x5c,0x50,0x5c,0xff,0x5a, 0x4f,0x5a,0xff,0x4e,0x49,0x4f,0xff,0x3b,0x3d,0x3b,0xff,0x33,0x38,0x33,0xff,0x30, 0x36,0x30,0xff,0x3f,0x40,0x41,0xff,0x5b,0x50,0x5e,0xff,0x79,0x63,0x5b,0xff,0x8d, 0x6c,0x7e,0xff,0x66,0x55,0x5f,0xff,0x4e,0x48,0x4e,0xff,0x40,0x40,0x41,0xff,0x36, 0x3b,0x39,0xff,0x34,0x39,0x36,0xff,0x39,0x3b,0x39,0xfd,0x3d,0x3f,0x3d,0xfc,0x4d, 0x4a,0x4d,0xf7,0x45,0x3a,0x44,0xeb,0x08,0x05,0x08,0xd7,0x00,0x00,0x00,0xba,0x00, 0x00,0x00,0x95,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x28,0x00, 0x00,0x00,0x14,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x0a,0x00, 0x00,0x00,0x16,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x55,0x00, 0x00,0x00,0x6c,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0xb2,0x01, 0x01,0x01,0xc7,0x18,0x18,0x18,0xd4,0x3a,0x3a,0x3a,0xd9,0x00,0x00,0x00,0xd8,0x00, 0x00,0x00,0xd4,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0xc8,0x01,0x01,0x01,0xbe,0x00, 0x00,0x00,0xb3,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x86,0x00, 0x00,0x00,0x7a,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x5a,0x00, 0x00,0x00,0x4e,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x5d,0x00, 0x00,0x00,0x81,0x00,0x00,0x00,0xa8,0x05,0x04,0x04,0xcd,0x22,0x1d,0x1e,0xe7,0x2e, 0x27,0x28,0xf5,0x18,0x14,0x15,0xfb,0x0e,0x0c,0x0b,0xfe,0x02,0x01,0x01,0xfe,0x00, 0x00,0x00,0xfc,0x03,0x02,0x02,0xf9,0x12,0x10,0x10,0xf6,0x1d,0x18,0x18,0xf0,0x22, 0x1b,0x1d,0xec,0x26,0x1f,0x20,0xe8,0x25,0x20,0x20,0xe5,0x22,0x1d,0x1d,0xe5,0x20, 0x1b,0x1c,0xe5,0x1e,0x18,0x1a,0xe8,0x1b,0x17,0x17,0xed,0x18,0x14,0x14,0xf2,0x1d, 0x18,0x18,0xf8,0x23,0x1d,0x1e,0xfa,0x0b,0x09,0x0a,0xfa,0x00,0x00,0x00,0xf7,0x00, 0x00,0x00,0xf7,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0xfb,0x01, 0x00,0x00,0xfd,0x0b,0x09,0x09,0xfe,0x38,0x2f,0x31,0xfe,0x6c,0x5b,0x5c,0xff,0x9a, 0x8a,0x8b,0xff,0xe7,0xe2,0xe3,0xff,0xff,0xff,0xff,0xff,0xbc,0xb3,0xb4,0xff,0x4e, 0x3d,0x3f,0xfe,0x3f,0x36,0x36,0xfc,0x34,0x2c,0x2d,0xf7,0x17,0x13,0x14,0xee,0x00, 0x00,0x00,0xe0,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0xca,0x00, 0x00,0x00,0xd3,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,0xed,0x05,0x04,0x04,0xf6,0x19, 0x15,0x16,0xfc,0x38,0x2f,0x30,0xfe,0x5e,0x4c,0x4d,0xff,0xc8,0xbf,0xc0,0xff,0xff, 0xff,0xff,0xff,0xea,0xe3,0xe4,0xff,0xdc,0xcf,0xd1,0xff,0xe3,0xd9,0xd9,0xff,0xf0, 0xeb,0xeb,0xff,0xff,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,0xfc,0xfb,0xfb,0xff,0xf9, 0xf6,0xf6,0xff,0xf5,0xf1,0xf2,0xff,0xee,0xe7,0xe8,0xff,0xe5,0xdc,0xdd,0xff,0xcf, 0xc0,0xc2,0xff,0xc7,0xb5,0xb7,0xff,0xaa,0x93,0x94,0xff,0x91,0x76,0x78,0xff,0x8c, 0x72,0x74,0xff,0x87,0x6e,0x70,0xff,0x7c,0x66,0x67,0xff,0x6f,0x5b,0x5c,0xff,0x5c, 0x4b,0x4c,0xff,0x46,0x39,0x3a,0xff,0x31,0x28,0x29,0xff,0x25,0x1f,0x20,0xff,0x2d, 0x26,0x27,0xff,0x43,0x38,0x39,0xff,0x62,0x50,0x51,0xff,0xdb,0xd6,0xd6,0xff,0xff, 0xff,0xff,0xff,0xd8,0xcd,0xce,0xff,0xa2,0x8d,0x8e,0xff,0x88,0x74,0x76,0xff,0x71, 0x63,0x64,0xff,0x62,0x55,0x56,0xff,0x5c,0x50,0x51,0xff,0x61,0x55,0x56,0xff,0x5e, 0x52,0x53,0xff,0x5c,0x50,0x51,0xff,0x5c,0x50,0x51,0xff,0x5c,0x50,0x51,0xff,0x5c, 0x50,0x51,0xff,0x5c,0x50,0x51,0xff,0x5b,0x4f,0x50,0xff,0x62,0x56,0x57,0xff,0x72, 0x63,0x65,0xff,0x87,0x74,0x76,0xff,0x94,0x7c,0x7f,0xff,0xea,0xe5,0xe5,0xff,0xff, 0xff,0xff,0xff,0xce,0xc5,0xc5,0xff,0x6b,0x5c,0x5e,0xff,0x5e,0x4f,0x51,0xff,0x5f, 0x50,0x50,0xff,0x65,0x56,0x56,0xff,0x82,0x6e,0x71,0xff,0xf4,0xf2,0xf2,0xff,0xff, 0xff,0xff,0xff,0xd4,0xc9,0xca,0xff,0x80,0x6d,0x6e,0xff,0x58,0x4a,0x4b,0xff,0x36, 0x2e,0x2e,0xff,0x23,0x1d,0x1e,0xff,0x1c,0x17,0x17,0xff,0x1d,0x18,0x18,0xff,0x1e, 0x18,0x19,0xff,0x1d,0x18,0x18,0xff,0x29,0x22,0x23,0xff,0x33,0x2b,0x2b,0xff,0x39, 0x31,0x31,0xff,0x39,0x30,0x30,0xff,0x38,0x30,0x30,0xff,0x3f,0x36,0x37,0xff,0x38, 0x2f,0x30,0xff,0x1e,0x18,0x19,0xff,0x1c,0x17,0x17,0xff,0x18,0x15,0x15,0xff,0x15, 0x11,0x11,0xff,0x0e,0x0c,0x0d,0xff,0x09,0x08,0x08,0xff,0x0d,0x0a,0x0b,0xff,0x20, 0x1b,0x1b,0xff,0x42,0x36,0x37,0xff,0x71,0x5f,0x61,0xff,0xd8,0xcc,0xcd,0xff,0xff, 0xff,0xff,0xff,0xfe,0xfd,0xfd,0xff,0xe3,0xda,0xdb,0xff,0xf8,0xf5,0xf5,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xfb,0xfb,0xff,0xf7, 0xf4,0xf4,0xff,0xeb,0xe6,0xe6,0xff,0xd9,0xd3,0xd3,0xff,0xc7,0xbe,0xbf,0xff,0xa7, 0x9b,0x9c,0xff,0x8a,0x7d,0x7d,0xff,0x6e,0x5f,0x60,0xff,0x61,0x50,0x52,0xff,0x6b, 0x59,0x5a,0xff,0x62,0x54,0x55,0xff,0x58,0x49,0x4a,0xff,0x45,0x3a,0x3b,0xff,0x2d, 0x25,0x26,0xff,0x20,0x1b,0x1b,0xff,0x17,0x14,0x14,0xff,0x19,0x15,0x15,0xff,0x2a, 0x23,0x25,0xff,0x46,0x39,0x3a,0xff,0x78,0x68,0x6a,0xff,0xde,0xd7,0xd7,0xff,0xff, 0xff,0xff,0xff,0xe4,0xdc,0xdd,0xff,0x8b,0x6f,0x71,0xff,0x7e,0x67,0x69,0xff,0x65, 0x52,0x54,0xff,0x53,0x43,0x44,0xff,0x4e,0x3f,0x40,0xff,0x4f,0x40,0x41,0xff,0x4f, 0x40,0x41,0xff,0x4f,0x40,0x41,0xff,0x4f,0x40,0x41,0xff,0x4f,0x40,0x41,0xff,0x4f, 0x40,0x41,0xff,0x4f,0x40,0x41,0xff,0x4f,0x40,0x41,0xff,0x4f,0x40,0x41,0xff,0x4f, 0x40,0x41,0xff,0x4d,0x3e,0x3f,0xff,0x47,0x3a,0x3b,0xff,0x3f,0x33,0x34,0xff,0x32, 0x28,0x28,0xff,0x26,0x1f,0x1f,0xff,0x1d,0x18,0x19,0xff,0x1b,0x17,0x17,0xff,0x2c, 0x24,0x26,0xff,0x46,0x39,0x3a,0xff,0x89,0x7b,0x7c,0xff,0xea,0xe5,0xe6,0xff,0xff, 0xff,0xff,0xff,0xe8,0xe0,0xe1,0xff,0xdf,0xd4,0xd4,0xff,0xe9,0xe1,0xe2,0xff,0xf5, 0xf2,0xf2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0xfa,0xfa,0xff,0xf9, 0xf6,0xf6,0xff,0xf2,0xec,0xec,0xff,0xea,0xe2,0xe3,0xff,0xdf,0xd4,0xd5,0xff,0xc9, 0xb9,0xba,0xff,0xc0,0xad,0xaf,0xff,0xa5,0x8e,0x90,0xff,0x8e,0x75,0x77,0xff,0x8c, 0x72,0x75,0xff,0x85,0x6c,0x6e,0xff,0x78,0x62,0x63,0xff,0x67,0x55,0x56,0xff,0x52, 0x43,0x44,0xff,0x3c,0x32,0x32,0xff,0x26,0x20,0x20,0xff,0x14,0x10,0x10,0xfe,0x08, 0x06,0x06,0xfe,0x01,0x01,0x01,0xfd,0x00,0x00,0x00,0xfa,0x04,0x04,0x04,0xf8,0x2f, 0x29,0x29,0xf5,0x4a,0x3f,0x3f,0xf3,0x45,0x3b,0x3b,0xf3,0x60,0x52,0x53,0xf3,0x37, 0x2f,0x30,0xf5,0x00,0x00,0x00,0xf7,0x1a,0x19,0x1a,0xfa,0x52,0x48,0x53,0xfc,0x61, 0x54,0x63,0xfe,0x5d,0x51,0x5e,0xff,0x5d,0x51,0x5e,0xff,0x59,0x4d,0x5a,0xff,0x7c, 0x73,0x7d,0xff,0x75,0x6b,0x76,0xff,0x61,0x55,0x62,0xff,0x5d,0x51,0x5e,0xff,0x5d, 0x51,0x5d,0xff,0x66,0x56,0x66,0xff,0x5b,0x50,0x5b,0xff,0x4c,0x48,0x4d,0xff,0x4b, 0x47,0x4b,0xff,0x4d,0x48,0x4d,0xff,0x4f,0x49,0x50,0xff,0x4f,0x49,0x50,0xff,0x51, 0x4a,0x51,0xff,0x4e,0x48,0x4e,0xff,0x56,0x4d,0x56,0xff,0x56,0x4e,0x57,0xff,0x4a, 0x46,0x4a,0xff,0x45,0x43,0x45,0xff,0x3c,0x3e,0x3e,0xff,0x6a,0x57,0x64,0xff,0x88, 0x68,0x78,0xff,0x7f,0x65,0x6e,0xff,0x5e,0x51,0x5a,0xff,0x43,0x42,0x45,0xff,0x41, 0x41,0x42,0xff,0x40,0x40,0x41,0xff,0x3c,0x3d,0x3c,0xff,0x39,0x3c,0x3a,0xfe,0x3c, 0x3e,0x3d,0xfd,0x46,0x44,0x46,0xf9,0x56,0x4b,0x55,0xf0,0x13,0x0f,0x12,0xdf,0x00, 0x00,0x00,0xc3,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x51,0x00, 0x00,0x00,0x30,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x05,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x02,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x15,0x00, 0x00,0x00,0x22,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x57,0x00, 0x00,0x00,0x6f,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0xa2,0x05,0x05,0x05,0xb0,0x07, 0x07,0x07,0xb5,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0xa3,0x00, 0x00,0x00,0x9a,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x73,0x00, 0x00,0x00,0x63,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x46,0x00, 0x00,0x00,0x43,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x47,0x00, 0x00,0x00,0x54,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0xaf,0x00, 0x00,0x00,0xd0,0x03,0x03,0x03,0xe9,0x0a,0x09,0x09,0xf6,0x14,0x11,0x12,0xfb,0x1d, 0x19,0x19,0xfd,0x18,0x14,0x15,0xfd,0x02,0x01,0x01,0xfa,0x07,0x06,0x06,0xf7,0x23, 0x1d,0x1d,0xf0,0x15,0x12,0x12,0xea,0x10,0x0d,0x0e,0xe2,0x0c,0x0b,0x0b,0xdc,0x0a, 0x08,0x08,0xd5,0x09,0x08,0x07,0xd1,0x07,0x06,0x06,0xd1,0x05,0x05,0x05,0xd3,0x04, 0x04,0x04,0xdb,0x02,0x02,0x02,0xe4,0x06,0x04,0x05,0xed,0x19,0x15,0x16,0xf4,0x17, 0x14,0x14,0xf8,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0xf8,0x09, 0x08,0x08,0xfa,0x14,0x11,0x11,0xfc,0x13,0x11,0x11,0xfe,0x27,0x20,0x21,0xfe,0x41, 0x36,0x38,0xff,0x59,0x4a,0x4b,0xff,0x86,0x77,0x78,0xff,0xeb,0xe6,0xe6,0xff,0xff, 0xff,0xff,0xff,0xb7,0xaf,0xb0,0xff,0x46,0x36,0x38,0xfe,0x34,0x2c,0x2c,0xfc,0x24, 0x1f,0x1f,0xf8,0x11,0x0f,0x0f,0xf0,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,0xd8,0x00, 0x00,0x00,0xd1,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0xe7,0x00, 0x00,0x00,0xf0,0x08,0x06,0x06,0xf8,0x23,0x1d,0x1e,0xfc,0x44,0x39,0x3a,0xfe,0x64, 0x52,0x53,0xff,0xc9,0xc1,0xc2,0xff,0xff,0xff,0xff,0xff,0xe3,0xd9,0xda,0xff,0xb2, 0x99,0x9b,0xff,0xa3,0x89,0x8b,0xff,0x9e,0x88,0x8a,0xff,0x97,0x84,0x85,0xff,0xb1, 0xa1,0xa2,0xff,0xd7,0xcd,0xcf,0xff,0xdc,0xd4,0xd4,0xff,0xf1,0xef,0xef,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfd,0xff,0xff,0xfe,0xfe,0xff,0xf8, 0xf5,0xf6,0xff,0xf4,0xf0,0xf1,0xff,0xe5,0xde,0xde,0xff,0xcc,0xc1,0xc2,0xff,0xbf, 0xb3,0xb3,0xff,0x89,0x78,0x79,0xff,0x62,0x53,0x54,0xff,0x4a,0x3e,0x3f,0xff,0x2f, 0x27,0x28,0xff,0x22,0x1c,0x1c,0xff,0x29,0x23,0x23,0xff,0x3e,0x34,0x34,0xff,0x57, 0x46,0x48,0xff,0xd7,0xd3,0xd3,0xff,0xff,0xff,0xff,0xff,0xca,0xbf,0xc0,0xff,0x7f, 0x6b,0x6d,0xff,0x5f,0x4d,0x4f,0xff,0x47,0x3a,0x3b,0xff,0x35,0x2a,0x2b,0xff,0x2c, 0x23,0x23,0xff,0x48,0x3c,0x3d,0xff,0x3e,0x32,0x33,0xff,0x2f,0x26,0x26,0xff,0x2e, 0x25,0x25,0xff,0x2f,0x26,0x26,0xff,0x2f,0x26,0x26,0xff,0x2f,0x26,0x26,0xff,0x2e, 0x25,0x25,0xff,0x35,0x2a,0x2b,0xff,0x48,0x3a,0x3b,0xff,0x5f,0x4e,0x50,0xff,0x6d, 0x55,0x58,0xff,0xe4,0xde,0xde,0xff,0xff,0xff,0xff,0xff,0xc8,0xc0,0xc0,0xff,0x64, 0x55,0x56,0xff,0x47,0x3b,0x3b,0xff,0x4c,0x40,0x40,0xff,0x5b,0x4d,0x4f,0xff,0x6f, 0x5d,0x5e,0xff,0xf1,0xf0,0xf0,0xff,0xff,0xff,0xff,0xff,0xcf,0xc4,0xc5,0xff,0x81, 0x6d,0x6e,0xff,0x65,0x53,0x54,0xff,0x4a,0x3d,0x3e,0xff,0x38,0x2e,0x2f,0xff,0x32, 0x29,0x2a,0xff,0x32,0x29,0x2a,0xff,0x32,0x29,0x2a,0xff,0x32,0x29,0x2a,0xff,0x31, 0x28,0x29,0xff,0x34,0x2b,0x2c,0xff,0x38,0x2e,0x2f,0xff,0x38,0x2f,0x2f,0xff,0x38, 0x2e,0x2f,0xff,0x4a,0x3f,0x3f,0xff,0x43,0x37,0x39,0xff,0x31,0x28,0x29,0xff,0x2e, 0x25,0x26,0xff,0x27,0x20,0x21,0xff,0x1f,0x19,0x1a,0xff,0x18,0x14,0x14,0xff,0x10, 0x0d,0x0e,0xff,0x10,0x0e,0x0e,0xff,0x20,0x1b,0x1b,0xff,0x3e,0x34,0x35,0xff,0x68, 0x59,0x5a,0xff,0xd0,0xc7,0xc8,0xff,0xff,0xff,0xff,0xff,0xfb,0xfa,0xfa,0xff,0xb4, 0x9a,0x9c,0xff,0xb0,0x98,0x9a,0xff,0xa5,0x92,0x93,0xff,0xb7,0xaa,0xac,0xff,0xc9, 0xc1,0xc1,0xff,0xd9,0xd3,0xd3,0xff,0xef,0xee,0xee,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0xfb,0xfb,0xff,0xf5,0xf4,0xf4,0xff,0xec, 0xea,0xea,0xff,0xd8,0xd1,0xd2,0xff,0xc3,0xba,0xba,0xff,0xa8,0x9d,0x9e,0xff,0x8d, 0x80,0x81,0xff,0x60,0x52,0x53,0xff,0x4a,0x3e,0x3f,0xff,0x36,0x2e,0x2f,0xff,0x22, 0x1d,0x1d,0xff,0x1c,0x17,0x17,0xff,0x2a,0x23,0x23,0xff,0x44,0x38,0x39,0xff,0x75, 0x65,0x66,0xff,0xdc,0xd4,0xd5,0xff,0xff,0xff,0xff,0xff,0xe2,0xdb,0xdb,0xff,0x87, 0x6c,0x6f,0xff,0x7d,0x68,0x6a,0xff,0x67,0x55,0x57,0xff,0x56,0x47,0x48,0xff,0x51, 0x43,0x44,0xff,0x52,0x44,0x45,0xff,0x52,0x44,0x45,0xff,0x52,0x44,0x45,0xff,0x52, 0x44,0x45,0xff,0x52,0x44,0x45,0xff,0x52,0x44,0x45,0xff,0x52,0x44,0x45,0xff,0x52, 0x44,0x45,0xff,0x52,0x44,0x45,0xff,0x52,0x44,0x45,0xff,0x50,0x42,0x43,0xff,0x4b, 0x3e,0x3f,0xff,0x43,0x37,0x38,0xff,0x37,0x2c,0x2d,0xff,0x28,0x21,0x22,0xff,0x1c, 0x17,0x18,0xff,0x1b,0x17,0x17,0xff,0x2c,0x24,0x25,0xff,0x43,0x37,0x38,0xff,0x85, 0x77,0x78,0xff,0xe9,0xe4,0xe5,0xff,0xff,0xff,0xff,0xff,0xd3,0xc5,0xc6,0xff,0xa9, 0x8f,0x91,0xff,0xa6,0x8e,0x90,0xff,0x9a,0x85,0x87,0xff,0x96,0x84,0x85,0xff,0xb3, 0xa5,0xa6,0xff,0xd8,0xd0,0xd1,0xff,0xe1,0xda,0xdb,0xff,0xf9,0xf7,0xf8,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfe,0xff,0xfe,0xfc,0xfc,0xff,0xf7, 0xf5,0xf5,0xff,0xf2,0xee,0xef,0xff,0xe6,0xe0,0xe1,0xff,0xd4,0xcb,0xcb,0xff,0xab, 0x9d,0x9e,0xff,0x77,0x65,0x66,0xff,0x54,0x45,0x47,0xff,0x58,0x4a,0x4b,0xff,0x63, 0x56,0x56,0xff,0x55,0x49,0x49,0xff,0x32,0x2a,0x2b,0xff,0x20,0x1b,0x1b,0xff,0x1f, 0x1a,0x1b,0xfd,0x41,0x38,0x38,0xfd,0x4f,0x43,0x44,0xfc,0x20,0x1a,0x1c,0xfc,0x02, 0x02,0x02,0xfc,0x2c,0x26,0x26,0xfc,0x62,0x54,0x56,0xfc,0x5a,0x4d,0x4e,0xfd,0x68, 0x5b,0x5f,0xfe,0x76,0x66,0x6e,0xfe,0x63,0x55,0x61,0xff,0x5b,0x4f,0x5d,0xff,0x62, 0x55,0x62,0xff,0x70,0x65,0x70,0xff,0xb5,0xaf,0xb4,0xff,0xb5,0xad,0xb3,0xff,0x76, 0x6b,0x76,0xff,0x5d,0x51,0x5d,0xff,0x5e,0x52,0x5e,0xff,0x64,0x55,0x64,0xff,0x50, 0x49,0x51,0xff,0x49,0x45,0x49,0xff,0x4c,0x47,0x4d,0xff,0x4f,0x49,0x50,0xff,0x4f, 0x49,0x50,0xff,0x4f,0x49,0x50,0xff,0x51,0x4a,0x51,0xff,0x50,0x49,0x50,0xff,0x4d, 0x48,0x4e,0xff,0x4e,0x49,0x4f,0xff,0x51,0x4a,0x52,0xff,0x4f,0x49,0x50,0xff,0x4e, 0x48,0x4f,0xff,0x58,0x4e,0x57,0xff,0x5a,0x4e,0x56,0xff,0x4c,0x47,0x4d,0xff,0x43, 0x41,0x45,0xff,0x43,0x42,0x44,0xff,0x3f,0x40,0x40,0xff,0x3b,0x3d,0x3c,0xff,0x3b, 0x3d,0x3b,0xff,0x3a,0x3e,0x3b,0xfe,0x3f,0x40,0x41,0xfb,0x59,0x51,0x5a,0xf4,0x27, 0x22,0x28,0xe6,0x03,0x03,0x03,0xcf,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0x85,0x00, 0x00,0x00,0x5c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x0f,0x00, 0x00,0x00,0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00, 0x00,0x00,0x05,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x18,0x00, 0x00,0x00,0x23,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x5f,0x00, 0x00,0x00,0x73,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x81,0x00, 0x00,0x00,0x79,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x5d,0x00, 0x00,0x00,0x52,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x2f,0x00, 0x00,0x00,0x2c,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x41,0x00, 0x00,0x00,0x4e,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x86,0x00, 0x00,0x00,0xa2,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0xec,0x00, 0x00,0x00,0xf7,0x00,0x00,0x00,0xfc,0x0b,0x0a,0x0a,0xfd,0x20,0x1b,0x1b,0xfb,0x09, 0x07,0x07,0xf6,0x00,0x00,0x00,0xed,0x05,0x04,0x04,0xe2,0x00,0x00,0x00,0xd5,0x00, 0x00,0x00,0xc8,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xac,0x00, 0x00,0x00,0xaa,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xca,0x00, 0x00,0x00,0xdb,0x10,0x0e,0x0e,0xe9,0x1f,0x1a,0x1b,0xf1,0x0c,0x0a,0x0a,0xf6,0x18, 0x14,0x14,0xf8,0x11,0x0e,0x0e,0xfa,0x2f,0x28,0x29,0xfb,0x3e,0x35,0x35,0xfd,0x18, 0x13,0x13,0xfe,0x17,0x12,0x12,0xfe,0x23,0x1d,0x1d,0xff,0x35,0x2b,0x2c,0xff,0x7b, 0x6f,0x70,0xff,0xec,0xe7,0xe8,0xff,0xff,0xff,0xff,0xff,0xb5,0xae,0xaf,0xff,0x38, 0x2a,0x2b,0xff,0x2b,0x23,0x24,0xfd,0x13,0x0f,0x0f,0xfa,0x04,0x03,0x03,0xf4,0x00, 0x00,0x00,0xec,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0xe1,0x0d, 0x0b,0x0b,0xe9,0x20,0x1c,0x1b,0xf1,0x24,0x1f,0x1f,0xf7,0x2e,0x28,0x29,0xfb,0x3b, 0x33,0x34,0xfd,0x56,0x49,0x4a,0xff,0x6c,0x5a,0x5d,0xff,0xc7,0xc0,0xc1,0xff,0xff, 0xff,0xff,0xff,0xdb,0xd3,0xd4,0xff,0x8e,0x79,0x7b,0xff,0x6d,0x58,0x5a,0xff,0x5f, 0x4d,0x4f,0xff,0x4e,0x3f,0x3f,0xff,0x71,0x5f,0x60,0xff,0x9b,0x87,0x88,0xff,0x83, 0x71,0x72,0xff,0x74,0x65,0x66,0xff,0x77,0x66,0x68,0xff,0xa2,0x95,0x96,0xff,0xc3, 0xba,0xba,0xff,0xd1,0xcb,0xcb,0xff,0xf1,0xf0,0xf0,0xff,0xfe,0xfe,0xfe,0xff,0xff, 0xff,0xff,0xff,0xfe,0xfd,0xfd,0xff,0xff,0xff,0xff,0xff,0xfa,0xf9,0xf9,0xff,0xff, 0xff,0xff,0xff,0xaf,0xa9,0xaa,0xff,0x40,0x38,0x39,0xff,0x1f,0x19,0x1a,0xff,0x26, 0x20,0x20,0xff,0x36,0x2c,0x2d,0xff,0x47,0x39,0x3a,0xff,0xd3,0xcf,0xcf,0xff,0xff, 0xff,0xff,0xff,0xc0,0xb8,0xb9,0xff,0x69,0x5a,0x5b,0xff,0x47,0x3b,0x3b,0xff,0x33, 0x2a,0x2b,0xff,0x23,0x1d,0x1d,0xff,0x1b,0x17,0x17,0xff,0x29,0x22,0x22,0xff,0x3b, 0x32,0x33,0xff,0x26,0x20,0x20,0xff,0x1d,0x19,0x19,0xff,0x1c,0x18,0x18,0xff,0x1c, 0x18,0x18,0xff,0x1c,0x18,0x18,0xff,0x1b,0x17,0x17,0xff,0x22,0x1c,0x1d,0xff,0x32, 0x2a,0x2b,0xff,0x48,0x3d,0x3e,0xff,0x52,0x40,0x42,0xff,0xe4,0xe0,0xe1,0xff,0xff, 0xff,0xff,0xff,0xc3,0xbc,0xbd,0xff,0x57,0x4b,0x4c,0xff,0x3c,0x32,0x32,0xff,0x37, 0x2e,0x2f,0xff,0x45,0x39,0x3a,0xff,0x60,0x50,0x51,0xff,0xf0,0xef,0xef,0xff,0xff, 0xff,0xff,0xff,0xd5,0xcd,0xcc,0xff,0x93,0x80,0x82,0xff,0x7f,0x6e,0x70,0xff,0x6c, 0x5e,0x60,0xff,0x5f,0x53,0x54,0xff,0x5f,0x53,0x54,0xff,0x5c,0x50,0x51,0xff,0x5a, 0x4f,0x50,0xff,0x5a,0x4f,0x50,0xff,0x5a,0x4f,0x50,0xff,0x59,0x4f,0x50,0xff,0x59, 0x4e,0x4f,0xff,0x59,0x4e,0x4f,0xff,0x59,0x4e,0x4f,0xff,0x67,0x5a,0x5c,0xff,0x61, 0x54,0x56,0xff,0x59,0x4e,0x4f,0xff,0x55,0x4a,0x4b,0xff,0x4e,0x44,0x45,0xff,0x44, 0x3c,0x3d,0xff,0x2d,0x28,0x28,0xff,0x17,0x13,0x13,0xff,0x14,0x11,0x11,0xff,0x1e, 0x19,0x1a,0xff,0x37,0x2e,0x2f,0xff,0x5c,0x4e,0x4f,0xff,0xca,0xc1,0xc2,0xff,0xff, 0xff,0xff,0xff,0xfa,0xf9,0xf9,0xff,0x8c,0x76,0x78,0xff,0x78,0x62,0x63,0xff,0x65, 0x53,0x55,0xff,0x5d,0x4f,0x50,0xff,0x5f,0x51,0x52,0xff,0x67,0x58,0x5a,0xff,0x72, 0x63,0x64,0xff,0x87,0x79,0x79,0xff,0xab,0xa0,0xa2,0xff,0xc0,0xb6,0xb7,0xff,0xe0, 0xdb,0xdc,0xff,0xf0,0xed,0xee,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe, 0xfe,0xfe,0xff,0xfd,0xfd,0xfd,0xff,0xfb,0xfa,0xfa,0xff,0xf0,0xef,0xef,0xff,0xd1, 0xce,0xce,0xff,0x9d,0x97,0x97,0xff,0x27,0x1e,0x20,0xff,0x22,0x1d,0x1d,0xff,0x2a, 0x24,0x24,0xff,0x3d,0x33,0x34,0xff,0x6b,0x5e,0x5e,0xff,0xd9,0xd2,0xd2,0xff,0xff, 0xff,0xff,0xff,0xe5,0xdf,0xdf,0xff,0x8b,0x73,0x75,0xff,0x85,0x73,0x74,0xff,0x72, 0x64,0x65,0xff,0x67,0x59,0x5a,0xff,0x62,0x56,0x57,0xff,0x63,0x57,0x58,0xff,0x63, 0x57,0x57,0xff,0x63,0x56,0x57,0xff,0x63,0x56,0x57,0xff,0x64,0x57,0x58,0xff,0x64, 0x57,0x58,0xff,0x64,0x57,0x58,0xff,0x64,0x57,0x58,0xff,0x64,0x57,0x58,0xff,0x64, 0x57,0x58,0xff,0x62,0x55,0x56,0xff,0x5d,0x52,0x53,0xff,0x56,0x4b,0x4c,0xff,0x4c, 0x43,0x43,0xff,0x35,0x2f,0x2f,0xff,0x1a,0x15,0x16,0xff,0x1a,0x16,0x17,0xff,0x28, 0x21,0x22,0xff,0x3c,0x30,0x31,0xff,0x80,0x74,0x74,0xff,0xea,0xe6,0xe5,0xff,0xff, 0xff,0xff,0xff,0xc1,0xb6,0xb6,0xff,0x7c,0x65,0x67,0xff,0x71,0x5e,0x60,0xff,0x56, 0x46,0x47,0xff,0x51,0x41,0x42,0xff,0x59,0x49,0x4a,0xff,0x66,0x57,0x58,0xff,0x6d, 0x5d,0x5e,0xff,0x76,0x66,0x67,0xff,0x82,0x72,0x73,0xff,0xa8,0x9d,0x9e,0xff,0xcf, 0xc9,0xc9,0xff,0xea,0xe7,0xe7,0xff,0xfd,0xfd,0xfd,0xff,0xfe,0xfe,0xfe,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xfc,0xfc,0xff,0xf8,0xf6,0xf6,0xff,0xf5, 0xf3,0xf3,0xff,0xb5,0xaf,0xaf,0xff,0x5c,0x54,0x55,0xff,0x36,0x31,0x31,0xff,0x28, 0x24,0x24,0xff,0x2c,0x27,0x27,0xff,0x37,0x2f,0x30,0xff,0x36,0x2d,0x2e,0xfe,0x10, 0x0e,0x0e,0xfe,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0xfe,0x0a, 0x09,0x09,0xfe,0x37,0x30,0x31,0xff,0x77,0x67,0x6b,0xff,0x85,0x75,0x7d,0xff,0x72, 0x66,0x71,0xff,0x93,0x89,0x92,0xff,0xab,0xa2,0xaa,0xff,0xa0,0x98,0x9f,0xff,0xb9, 0xb3,0xb8,0xff,0xcd,0xc8,0xcc,0xff,0x80,0x76,0x80,0xff,0x58,0x4c,0x58,0xff,0x65, 0x55,0x64,0xff,0x58,0x4e,0x59,0xff,0x4d,0x49,0x4e,0xff,0x4e,0x49,0x4e,0xff,0x4e, 0x49,0x4f,0xff,0x4f,0x49,0x50,0xff,0x4f,0x49,0x50,0xff,0x51,0x4a,0x51,0xff,0x4f, 0x49,0x50,0xff,0x51,0x4a,0x51,0xff,0x50,0x49,0x50,0xff,0x4d,0x48,0x4e,0xff,0x4d, 0x48,0x4e,0xff,0x4d,0x48,0x4e,0xff,0x4d,0x48,0x4e,0xff,0x4c,0x47,0x4e,0xff,0x4b, 0x46,0x4d,0xff,0x46,0x44,0x47,0xff,0x45,0x43,0x46,0xff,0x42,0x42,0x43,0xff,0x3f, 0x40,0x40,0xff,0x3a,0x3c,0x3b,0xff,0x3a,0x3c,0x3a,0xfe,0x40,0x40,0x41,0xfc,0x52, 0x4c,0x52,0xf7,0x42,0x3a,0x42,0xec,0x07,0x06,0x07,0xd9,0x00,0x00,0x00,0xbb,0x00, 0x00,0x00,0x94,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x26,0x00, 0x00,0x00,0x13,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x04,0x00, 0x00,0x00,0x06,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x1a,0x00, 0x00,0x00,0x28,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x50,0x00, 0x00,0x00,0x52,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x3f,0x00, 0x00,0x00,0x39,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x23,0x00, 0x00,0x00,0x1c,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x2a,0x00, 0x00,0x00,0x3d,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x84,0x00, 0x00,0x00,0x98,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xd2,0x00, 0x00,0x00,0xe4,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0xfc,0x0b, 0x09,0x09,0xfb,0x28,0x21,0x22,0xf8,0x01,0x01,0x01,0xef,0x00,0x00,0x00,0xdf,0x00, 0x00,0x00,0xca,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x8f,0x00, 0x00,0x00,0x81,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x7e,0x00, 0x00,0x00,0x8e,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0xbd,0x06,0x05,0x05,0xd3,0x1c, 0x18,0x18,0xe2,0x26,0x20,0x20,0xed,0x19,0x15,0x16,0xf3,0x06,0x05,0x05,0xf8,0x1f, 0x1a,0x1b,0xfb,0x2a,0x25,0x24,0xfd,0x03,0x03,0x03,0xfe,0x06,0x05,0x05,0xfe,0x17, 0x13,0x14,0xff,0x26,0x1f,0x1f,0xff,0x5d,0x55,0x55,0xff,0xc5,0xc0,0xc0,0xff,0xf3, 0xf2,0xf2,0xff,0x98,0x91,0x92,0xff,0x28,0x1e,0x1f,0xff,0x22,0x1c,0x1d,0xfe,0x0e, 0x0c,0x0c,0xfc,0x02,0x02,0x02,0xf9,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xf1,0x00, 0x00,0x00,0xef,0x00,0x01,0x01,0xf0,0x1d,0x1a,0x1a,0xf4,0x38,0x30,0x30,0xf8,0x2b, 0x24,0x25,0xfb,0x15,0x12,0x12,0xfd,0x13,0x10,0x10,0xff,0x29,0x22,0x22,0xff,0x39, 0x2d,0x2f,0xff,0xb1,0xab,0xac,0xff,0xff,0xff,0xff,0xff,0xc8,0xc2,0xc2,0xff,0x66, 0x58,0x59,0xff,0x42,0x36,0x37,0xff,0x37,0x2e,0x2e,0xff,0x28,0x21,0x21,0xff,0x49, 0x3e,0x3f,0xff,0x75,0x64,0x65,0xff,0x67,0x57,0x58,0xff,0x46,0x3a,0x3a,0xff,0x40, 0x35,0x35,0xff,0x4b,0x3e,0x3f,0xff,0x54,0x46,0x47,0xff,0x5b,0x4c,0x4d,0xff,0x63, 0x53,0x55,0xff,0x6a,0x5a,0x5b,0xff,0x9d,0x92,0x93,0xff,0xb2,0xa8,0xa9,0xff,0xd2, 0xcd,0xce,0xff,0xeb,0xe9,0xe9,0xff,0xf5,0xf4,0xf4,0xff,0xb5,0xb0,0xb1,0xff,0x43, 0x3d,0x3d,0xff,0x1b,0x16,0x16,0xff,0x1f,0x1a,0x1a,0xff,0x29,0x22,0x23,0xff,0x34, 0x28,0x2a,0xff,0xb8,0xb4,0xb4,0xff,0xf5,0xf5,0xf5,0xff,0x9f,0x98,0x99,0xff,0x48, 0x3e,0x3e,0xff,0x29,0x23,0x22,0xff,0x18,0x14,0x14,0xff,0x0b,0x09,0x09,0xff,0x06, 0x05,0x05,0xff,0x02,0x02,0x02,0xff,0x1a,0x15,0x16,0xff,0x2a,0x23,0x23,0xff,0x2a, 0x24,0x25,0xff,0x0c,0x0a,0x0a,0xff,0x05,0x04,0x04,0xff,0x06,0x05,0x05,0xff,0x05, 0x04,0x04,0xff,0x0b,0x09,0x09,0xff,0x18,0x15,0x15,0xff,0x2b,0x23,0x24,0xff,0x30, 0x26,0x27,0xff,0xc0,0xbc,0xbc,0xff,0xec,0xea,0xea,0xff,0xa3,0x9e,0x9e,0xff,0x48, 0x3e,0x3f,0xff,0x4b,0x40,0x40,0xff,0x42,0x39,0x39,0xff,0x35,0x2c,0x2d,0xff,0x4e, 0x40,0x41,0xff,0xeb,0xe9,0xe9,0xff,0xfe,0xfd,0xfd,0xff,0xfa,0xf9,0xf9,0xff,0xf6, 0xf5,0xf5,0xff,0xf7,0xf5,0xf5,0xff,0xf6,0xf5,0xf5,0xff,0xf6,0xf5,0xf5,0xff,0xf7, 0xf6,0xf6,0xff,0xf6,0xf4,0xf4,0xff,0xf5,0xf4,0xf4,0xff,0xf5,0xf4,0xf4,0xff,0xf5, 0xf4,0xf4,0xff,0xf5,0xf4,0xf4,0xff,0xf5,0xf4,0xf4,0xff,0xf5,0xf4,0xf4,0xff,0xf5, 0xf4,0xf4,0xff,0xf6,0xf4,0xf4,0xff,0xf5,0xf4,0xf4,0xff,0xf5,0xf4,0xf4,0xff,0xf5, 0xf4,0xf4,0xff,0xf4,0xf3,0xf3,0xff,0xf3,0xf2,0xf2,0xff,0x84,0x7e,0x7f,0xff,0x1c, 0x18,0x17,0xff,0x17,0x13,0x13,0xff,0x1b,0x17,0x17,0xff,0x2d,0x26,0x27,0xff,0x49, 0x3e,0x3f,0xff,0xba,0xb4,0xb4,0xff,0xfd,0xfd,0xfe,0xff,0xf3,0xf2,0xf2,0xff,0x64, 0x54,0x55,0xff,0x4f,0x43,0x44,0xff,0x40,0x36,0x36,0xff,0x35,0x2c,0x2c,0xff,0x33, 0x2a,0x2b,0xff,0x3b,0x30,0x31,0xff,0x40,0x35,0x36,0xff,0x47,0x3b,0x3c,0xff,0x51, 0x43,0x44,0xff,0x58,0x4a,0x4b,0xff,0x61,0x52,0x53,0xff,0x75,0x64,0x65,0xff,0x8d, 0x7e,0x7f,0xff,0xaf,0xa4,0xa6,0xff,0xc6,0xba,0xbc,0xff,0xe4,0xdd,0xdf,0xff,0xf0, 0xed,0xed,0xff,0xfc,0xfb,0xfb,0xff,0xff,0xff,0xff,0xff,0xe0,0xdf,0xdf,0xff,0x3c, 0x30,0x32,0xff,0x30,0x29,0x28,0xff,0x32,0x2b,0x2b,0xff,0x41,0x36,0x37,0xff,0x65, 0x59,0x5a,0xff,0xce,0xc7,0xc8,0xff,0xff,0xff,0xff,0xff,0xfa,0xfa,0xf9,0xff,0xf7, 0xf5,0xf6,0xff,0xf7,0xf6,0xf6,0xff,0xf8,0xf6,0xf7,0xff,0xf8,0xf6,0xf6,0xff,0xf7, 0xf6,0xf6,0xff,0xf7,0xf6,0xf6,0xff,0xf8,0xf7,0xf7,0xff,0xf7,0xf6,0xf6,0xff,0xf6, 0xf4,0xf5,0xff,0xf4,0xf2,0xf3,0xff,0xf3,0xf2,0xf2,0xff,0xf5,0xf4,0xf4,0xff,0xf5, 0xf4,0xf4,0xff,0xf5,0xf4,0xf4,0xff,0xf5,0xf4,0xf4,0xff,0xf5,0xf4,0xf4,0xff,0xf5, 0xf4,0xf4,0xff,0xf4,0xf3,0xf4,0xff,0xfa,0xf9,0xfa,0xff,0x9f,0x9c,0x9c,0xff,0x0d, 0x08,0x08,0xff,0x1b,0x17,0x17,0xff,0x23,0x1d,0x1e,0xff,0x3f,0x34,0x35,0xff,0x84, 0x78,0x79,0xff,0xe2,0xdd,0xde,0xff,0xff,0xff,0xff,0xff,0xb7,0xae,0xaf,0xff,0x5d, 0x4c,0x4d,0xff,0x49,0x3d,0x3e,0xff,0x33,0x2b,0x2b,0xff,0x29,0x23,0x23,0xff,0x2e, 0x26,0x26,0xff,0x34,0x2a,0x2b,0xff,0x3a,0x2f,0x30,0xff,0x3f,0x34,0x35,0xff,0x46, 0x39,0x3a,0xff,0x50,0x42,0x43,0xff,0x59,0x4b,0x4c,0xff,0x61,0x52,0x53,0xff,0x65, 0x55,0x56,0xff,0x8e,0x81,0x83,0xff,0xcb,0xc4,0xc4,0xff,0xe5,0xe0,0xe0,0xff,0xef, 0xed,0xed,0xff,0xf5,0xf4,0xf4,0xff,0xfc,0xfc,0xfc,0xff,0xff,0xff,0xff,0xff,0xf6, 0xf3,0xf4,0xff,0xe7,0xe3,0xe3,0xff,0xde,0xd9,0xd8,0xfe,0xb3,0xad,0xae,0xfe,0x66, 0x61,0x62,0xfe,0x2c,0x2a,0x2a,0xfe,0x15,0x15,0x15,0xfe,0x08,0x07,0x07,0xff,0x09, 0x08,0x08,0xff,0x0b,0x0b,0x0b,0xff,0x03,0x03,0x03,0xff,0x00,0x00,0x00,0xff,0x4e, 0x49,0x4d,0xff,0xbd,0xb5,0xb8,0xff,0xdf,0xd8,0xda,0xff,0xe9,0xe4,0xe6,0xff,0xbf, 0xb8,0xbd,0xff,0x83,0x78,0x82,0xff,0x92,0x88,0x90,0xff,0xc7,0xc0,0xc5,0xff,0xa3, 0x9a,0xa2,0xff,0x74,0x69,0x74,0xff,0x7a,0x6d,0x79,0xff,0x76,0x70,0x76,0xff,0x89, 0x86,0x89,0xff,0x95,0x8f,0x92,0xff,0x63,0x5e,0x63,0xff,0x4e,0x48,0x4f,0xff,0x50, 0x49,0x51,0xff,0x51,0x4a,0x51,0xff,0x4f,0x49,0x50,0xff,0x4f,0x49,0x50,0xff,0x4d, 0x48,0x4e,0xff,0x4d,0x48,0x4e,0xff,0x4e,0x49,0x4f,0xff,0x4f,0x49,0x50,0xff,0x4d, 0x48,0x4f,0xff,0x4d,0x48,0x4e,0xff,0x4b,0x47,0x4c,0xff,0x47,0x44,0x48,0xff,0x44, 0x42,0x45,0xff,0x40,0x40,0x40,0xff,0x3c,0x3d,0x3c,0xff,0x39,0x3c,0x3a,0xfe,0x3d, 0x3e,0x3d,0xfe,0x49,0x46,0x49,0xf9,0x55,0x4a,0x56,0xf1,0x0f,0x0d,0x10,0xe1,0x00, 0x00,0x00,0xc7,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x50,0x00, 0x00,0x00,0x2f,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x05,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x03,0x00, 0x00,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x1c,0x00, 0x00,0x00,0x24,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x28,0x00, 0x00,0x00,0x23,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x15,0x00, 0x00,0x00,0x12,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x13,0x00, 0x00,0x00,0x1f,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x74,0x00, 0x00,0x00,0x93,0x00,0x00,0x00,0xac,0x02,0x02,0x02,0xbf,0x07,0x06,0x06,0xcd,0x05, 0x04,0x04,0xd9,0x09,0x07,0x07,0xe4,0x0a,0x08,0x08,0xed,0x0a,0x08,0x08,0xf4,0x09, 0x07,0x08,0xf8,0x06,0x05,0x05,0xf9,0x15,0x11,0x12,0xf6,0x38,0x2e,0x2f,0xf0,0x06, 0x04,0x04,0xe2,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x91,0x00, 0x00,0x00,0x75,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0x4a,0x00, 0x00,0x00,0x48,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x7a,0x00, 0x00,0x00,0x98,0x00,0x00,0x00,0xb3,0x02,0x01,0x01,0xc9,0x03,0x02,0x02,0xda,0x00, 0x00,0x00,0xe5,0x00,0x00,0x00,0xef,0x0d,0x0b,0x0b,0xf5,0x25,0x1f,0x1f,0xfa,0x11, 0x0e,0x0e,0xfd,0x02,0x01,0x01,0xff,0x10,0x0d,0x0d,0xff,0x1d,0x18,0x18,0xff,0x2a, 0x22,0x23,0xff,0x34,0x2a,0x2b,0xff,0x36,0x2c,0x2d,0xff,0x2e,0x26,0x27,0xff,0x22, 0x1c,0x1d,0xff,0x15,0x11,0x12,0xff,0x09,0x08,0x08,0xfe,0x02,0x02,0x02,0xfd,0x00, 0x00,0x00,0xfb,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0xf8,0x00, 0x00,0x00,0xfa,0x20,0x1b,0x1c,0xfc,0x3b,0x33,0x33,0xfd,0x19,0x16,0x16,0xfe,0x08, 0x06,0x06,0xfe,0x1d,0x17,0x17,0xff,0x24,0x1d,0x1d,0xff,0x65,0x5e,0x5e,0xff,0x9f, 0x98,0x98,0xff,0x71,0x6a,0x6a,0xff,0x38,0x31,0x31,0xff,0x24,0x1e,0x1e,0xff,0x19, 0x15,0x15,0xfe,0x0d,0x0b,0x0b,0xfe,0x23,0x1d,0x1e,0xfe,0x52,0x45,0x47,0xfe,0x57, 0x4b,0x4c,0xfe,0x30,0x29,0x2a,0xfe,0x25,0x1f,0x1f,0xff,0x30,0x28,0x28,0xff,0x35, 0x2c,0x2d,0xff,0x3b,0x31,0x32,0xff,0x40,0x35,0x36,0xff,0x43,0x38,0x39,0xff,0x49, 0x3d,0x3e,0xff,0x4f,0x41,0x42,0xff,0x51,0x43,0x44,0xff,0x4c,0x3e,0x40,0xff,0x42, 0x37,0x38,0xff,0x35,0x2c,0x2d,0xff,0x24,0x1e,0x1f,0xff,0x18,0x14,0x14,0xff,0x15, 0x12,0x12,0xff,0x1c,0x16,0x17,0xff,0x25,0x1f,0x20,0xff,0x30,0x27,0x28,0xff,0x35, 0x2b,0x2c,0xff,0x2f,0x28,0x29,0xff,0x24,0x1e,0x1f,0xff,0x19,0x14,0x15,0xff,0x0c, 0x0a,0x0a,0xff,0x02,0x03,0x03,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x09, 0x07,0x07,0xff,0x1f,0x1a,0x1a,0xff,0x28,0x22,0x22,0xff,0x07,0x06,0x06,0xff,0x00, 0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x03,0x03,0x03,0xff,0x0b, 0x0a,0x0a,0xff,0x17,0x14,0x14,0xff,0x23,0x1e,0x1f,0xff,0x2f,0x28,0x29,0xff,0x34, 0x2b,0x2b,0xff,0x2d,0x25,0x25,0xff,0x3c,0x34,0x35,0xff,0x4b,0x40,0x41,0xff,0x59, 0x4e,0x4e,0xff,0x3f,0x35,0x35,0xff,0x38,0x2d,0x2e,0xff,0x8d,0x85,0x86,0xff,0x9f, 0x97,0x97,0xff,0xa8,0x9e,0x9f,0xff,0xad,0xa3,0xa3,0xff,0xa6,0x9d,0x9d,0xff,0xa0, 0x98,0x98,0xff,0xa4,0x9c,0x9c,0xff,0xb2,0xa8,0xa9,0xff,0x9d,0x95,0x96,0xff,0x9d, 0x95,0x95,0xff,0x9d,0x95,0x95,0xff,0x9e,0x96,0x96,0xff,0x9e,0x96,0x96,0xff,0x9f, 0x96,0x97,0xff,0x9f,0x96,0x97,0xff,0x9f,0x96,0x97,0xff,0x9e,0x96,0x96,0xff,0x9e, 0x96,0x96,0xff,0x9d,0x95,0x96,0xff,0x9b,0x93,0x94,0xff,0x95,0x8f,0x8f,0xff,0x8e, 0x88,0x89,0xff,0x4a,0x44,0x44,0xff,0x1a,0x16,0x16,0xff,0x13,0x10,0x10,0xff,0x15, 0x11,0x12,0xff,0x22,0x1c,0x1c,0xff,0x34,0x2d,0x2d,0xff,0x75,0x6d,0x6d,0xff,0x95, 0x8e,0x8f,0xff,0x8e,0x87,0x88,0xff,0x38,0x2f,0x2f,0xff,0x2c,0x25,0x26,0xff,0x1f, 0x1a,0x1b,0xfe,0x16,0x13,0x13,0xfe,0x15,0x11,0x11,0xfe,0x1a,0x15,0x15,0xfe,0x1f, 0x1a,0x1a,0xfe,0x29,0x22,0x23,0xfe,0x2d,0x25,0x26,0xfe,0x34,0x2b,0x2b,0xfe,0x46, 0x39,0x3a,0xfe,0x67,0x57,0x59,0xfe,0x62,0x53,0x54,0xfe,0x65,0x55,0x57,0xfe,0x6f, 0x5e,0x60,0xfe,0x75,0x63,0x65,0xff,0x79,0x69,0x6a,0xff,0x90,0x83,0x84,0xff,0x9a, 0x91,0x92,0xff,0x8a,0x83,0x83,0xff,0x39,0x2e,0x2f,0xff,0x36,0x2e,0x2f,0xff,0x36, 0x2d,0x2e,0xff,0x3a,0x31,0x31,0xff,0x4c,0x41,0x43,0xff,0x85,0x7c,0x7d,0xff,0xa4, 0x9b,0x9c,0xff,0xa5,0x9c,0x9c,0xff,0xa7,0x9d,0x9e,0xff,0xa7,0x9d,0x9e,0xff,0xaa, 0xa0,0xa1,0xff,0xa7,0x9e,0x9f,0xff,0xa6,0x9d,0x9e,0xff,0xa7,0x9e,0x9f,0xff,0xac, 0xa3,0xa3,0xff,0xb2,0xa8,0xa9,0xff,0xb3,0xa9,0xaa,0xff,0xac,0xa2,0xa3,0xff,0xa5, 0x9b,0x9c,0xff,0x9e,0x96,0x96,0xff,0x9e,0x96,0x96,0xff,0x9e,0x96,0x96,0xff,0x9e, 0x96,0x96,0xff,0x9e,0x96,0x96,0xff,0x9b,0x94,0x94,0xff,0x97,0x90,0x91,0xff,0x91, 0x8b,0x8c,0xff,0x5c,0x57,0x58,0xff,0x14,0x10,0x10,0xff,0x14,0x11,0x12,0xff,0x22, 0x1d,0x1d,0xff,0x3c,0x32,0x33,0xff,0x52,0x48,0x49,0xff,0x84,0x7d,0x7e,0xff,0xa2, 0x9b,0x9b,0xff,0x85,0x7a,0x7b,0xff,0x52,0x44,0x45,0xff,0x4b,0x40,0x41,0xff,0x2e, 0x28,0x29,0xff,0x07,0x06,0x06,0xff,0x0f,0x0d,0x0d,0xff,0x16,0x12,0x12,0xff,0x1c, 0x17,0x17,0xff,0x21,0x1c,0x1c,0xff,0x27,0x21,0x22,0xff,0x2d,0x26,0x27,0xff,0x33, 0x2a,0x2b,0xff,0x38,0x2e,0x2f,0xff,0x43,0x38,0x39,0xfe,0x54,0x47,0x48,0xfe,0x64, 0x55,0x56,0xfe,0x68,0x58,0x59,0xfe,0x70,0x61,0x61,0xfe,0x73,0x68,0x68,0xfe,0x8d, 0x87,0x87,0xfe,0xb8,0xb5,0xb5,0xfe,0xce,0xce,0xce,0xfd,0xdf,0xde,0xde,0xfd,0xf1, 0xef,0xef,0xfd,0xfe,0xfc,0xfc,0xfb,0xff,0xff,0xff,0xfc,0xef,0xea,0xeb,0xfb,0xcd, 0xc9,0xc9,0xfb,0x90,0x8d,0x8d,0xfd,0x86,0x82,0x82,0xfd,0x7f,0x7a,0x7a,0xfe,0x44, 0x41,0x41,0xfe,0x34,0x32,0x32,0xfe,0x91,0x8e,0x8f,0xfe,0xe9,0xe6,0xe6,0xff,0xe5, 0xe0,0xe2,0xff,0xbc,0xb3,0xb9,0xff,0x7d,0x71,0x7b,0xff,0x58,0x4b,0x58,0xff,0x70, 0x65,0x6f,0xff,0xad,0xa6,0xad,0xff,0xc4,0xbf,0xc2,0xff,0xb9,0xb0,0xb6,0xff,0xab, 0xa4,0xa9,0xff,0x9e,0x9b,0x9d,0xff,0x9a,0x97,0x9a,0xff,0xb9,0xb5,0xb7,0xff,0x6b, 0x65,0x6b,0xff,0x47,0x41,0x48,0xff,0x4b,0x44,0x4b,0xff,0x4a,0x44,0x4b,0xff,0x4a, 0x43,0x4a,0xff,0x4e,0x48,0x4f,0xff,0x4e,0x48,0x4f,0xff,0x4e,0x48,0x4f,0xff,0x4e, 0x48,0x4f,0xff,0x4d,0x48,0x4e,0xff,0x4e,0x49,0x4f,0xff,0x4b,0x47,0x4c,0xff,0x47, 0x44,0x47,0xff,0x46,0x43,0x46,0xff,0x40,0x41,0x41,0xff,0x3f,0x3f,0x40,0xff,0x3a, 0x3c,0x3b,0xff,0x39,0x3c,0x3a,0xfe,0x45,0x43,0x45,0xfb,0x5e,0x54,0x5f,0xf4,0x25, 0x1f,0x24,0xe7,0x02,0x02,0x02,0xd0,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x88,0x00, 0x00,0x00,0x5e,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x0f,0x00, 0x00,0x00,0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x04,0x00, 0x00,0x00,0x07,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x11,0x00, 0x00,0x00,0x11,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0c,0x00, 0x00,0x00,0x0a,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x06,0x00, 0x00,0x00,0x0a,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x43,0x00, 0x00,0x00,0x69,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0xb2,0x02,0x02,0x02,0xcb,0x16, 0x12,0x12,0xdb,0x2b,0x24,0x24,0xe4,0x1c,0x18,0x18,0xe8,0x1e,0x18,0x19,0xec,0x1e, 0x19,0x1a,0xee,0x1e,0x19,0x1a,0xef,0x1e,0x19,0x1a,0xf0,0x1d,0x18,0x18,0xee,0x21, 0x1b,0x1b,0xeb,0x25,0x1f,0x1f,0xe3,0x08,0x07,0x07,0xd2,0x00,0x00,0x00,0xb7,0x00, 0x00,0x00,0x94,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x3a,0x00, 0x00,0x00,0x2c,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x2b,0x00, 0x00,0x00,0x3b,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x8a,0x00, 0x00,0x00,0xa3,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0xdc,0x03, 0x03,0x03,0xe9,0x1d,0x19,0x19,0xf3,0x21,0x1c,0x1d,0xf9,0x00,0x00,0x00,0xfc,0x07, 0x06,0x06,0xff,0x0f,0x0d,0x0d,0xff,0x17,0x13,0x13,0xff,0x1c,0x18,0x18,0xff,0x1d, 0x18,0x19,0xff,0x19,0x15,0x16,0xff,0x12,0x0f,0x10,0xff,0x0c,0x0a,0x0a,0xff,0x05, 0x04,0x04,0xfe,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0xfb,0x00, 0x00,0x00,0xfb,0x05,0x04,0x04,0xfa,0x09,0x08,0x07,0xfa,0x0e,0x0d,0x0c,0xfa,0x25, 0x20,0x20,0xfa,0x19,0x15,0x15,0xfb,0x04,0x03,0x03,0xfb,0x12,0x0f,0x0f,0xfb,0x1b, 0x17,0x17,0xfd,0x21,0x1c,0x1c,0xfe,0x24,0x1e,0x1e,0xfe,0x23,0x1d,0x1d,0xfe,0x1d, 0x18,0x18,0xfe,0x13,0x11,0x11,0xfc,0x0a,0x09,0x09,0xfb,0x01,0x01,0x01,0xfb,0x0a, 0x09,0x09,0xfa,0x43,0x38,0x3a,0xfa,0x63,0x52,0x54,0xfb,0x3e,0x34,0x35,0xfb,0x2a, 0x24,0x24,0xfb,0x2e,0x27,0x27,0xfd,0x31,0x29,0x29,0xfe,0x35,0x2c,0x2d,0xfe,0x3a, 0x31,0x32,0xfe,0x3b,0x32,0x33,0xfe,0x30,0x29,0x29,0xfe,0x2c,0x25,0x25,0xfe,0x2d, 0x26,0x26,0xff,0x2c,0x25,0x25,0xff,0x28,0x22,0x23,0xff,0x22,0x1c,0x1c,0xff,0x18, 0x14,0x14,0xff,0x10,0x0d,0x0d,0xff,0x0e,0x0c,0x0c,0xff,0x10,0x0d,0x0d,0xff,0x12, 0x0f,0x10,0xff,0x1a,0x14,0x15,0xff,0x1e,0x18,0x18,0xff,0x1a,0x16,0x16,0xff,0x14, 0x10,0x11,0xff,0x0e,0x0b,0x0c,0xff,0x06,0x05,0x06,0xff,0x01,0x01,0x01,0xff,0x02, 0x01,0x01,0xff,0x10,0x0e,0x0e,0xff,0x2e,0x27,0x27,0xff,0x1a,0x16,0x16,0xff,0x02, 0x02,0x02,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00, 0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x05,0x04,0x04,0xff,0x0d,0x0b,0x0b,0xff,0x14, 0x11,0x12,0xff,0x1b,0x16,0x17,0xff,0x1d,0x18,0x19,0xff,0x17,0x13,0x13,0xff,0x27, 0x21,0x21,0xff,0x47,0x3c,0x3d,0xfe,0x50,0x45,0x46,0xfe,0x54,0x48,0x49,0xfe,0x42, 0x38,0x39,0xfe,0x3b,0x31,0x32,0xfe,0x49,0x3d,0x3f,0xfe,0x58,0x4a,0x4b,0xfe,0x69, 0x59,0x5b,0xfe,0x5c,0x4d,0x4e,0xfe,0x46,0x3a,0x3b,0xfe,0x3e,0x33,0x34,0xfe,0x60, 0x52,0x53,0xfe,0x45,0x39,0x3a,0xfe,0x45,0x39,0x3a,0xfe,0x41,0x35,0x36,0xfe,0x3c, 0x30,0x31,0xfe,0x3b,0x30,0x30,0xff,0x3d,0x32,0x33,0xff,0x3d,0x32,0x33,0xff,0x3d, 0x32,0x33,0xff,0x3d,0x32,0x33,0xff,0x3d,0x32,0x33,0xff,0x3b,0x31,0x32,0xff,0x37, 0x2d,0x2e,0xff,0x31,0x28,0x28,0xff,0x27,0x20,0x20,0xff,0x1e,0x19,0x18,0xff,0x14, 0x11,0x11,0xff,0x0e,0x0b,0x0b,0xff,0x0d,0x0a,0x0a,0xff,0x1f,0x1a,0x1b,0xff,0x38, 0x30,0x30,0xff,0x47,0x3c,0x3d,0xfe,0x3a,0x30,0x31,0xfe,0x28,0x21,0x22,0xfd,0x1f, 0x1a,0x1a,0xfd,0x13,0x10,0x10,0xfc,0x09,0x08,0x08,0xfb,0x04,0x03,0x03,0xfb,0x03, 0x03,0x03,0xfa,0x0c,0x0a,0x0a,0xfa,0x18,0x14,0x15,0xfa,0x22,0x1d,0x1d,0xfa,0x1f, 0x1a,0x1b,0xfa,0x20,0x1a,0x1d,0xfa,0x3b,0x32,0x33,0xfa,0x30,0x28,0x29,0xfa,0x26, 0x1f,0x20,0xfa,0x2d,0x26,0x26,0xfb,0x34,0x2b,0x2c,0xfb,0x3a,0x30,0x31,0xfc,0x3c, 0x32,0x33,0xfd,0x39,0x2f,0x30,0xfe,0x31,0x28,0x29,0xfe,0x27,0x1f,0x1f,0xfe,0x1c, 0x17,0x17,0xfe,0x12,0x10,0x10,0xfe,0x11,0x0e,0x0e,0xfe,0x17,0x13,0x13,0xfe,0x21, 0x1c,0x1c,0xfe,0x2f,0x27,0x28,0xfe,0x3a,0x2f,0x30,0xfe,0x42,0x35,0x36,0xfe,0x44, 0x37,0x39,0xfe,0x44,0x37,0x38,0xfe,0x40,0x34,0x35,0xfe,0x3d,0x33,0x33,0xfe,0x3d, 0x32,0x32,0xfe,0x3d,0x32,0x32,0xfe,0x41,0x35,0x36,0xfe,0x4f,0x41,0x42,0xfe,0x5e, 0x50,0x50,0xfe,0x67,0x57,0x59,0xfe,0x5a,0x4c,0x4e,0xfe,0x3f,0x33,0x33,0xff,0x3b, 0x31,0x31,0xff,0x3d,0x32,0x33,0xff,0x3d,0x32,0x33,0xff,0x3c,0x31,0x32,0xff,0x39, 0x2e,0x2f,0xff,0x32,0x29,0x2a,0xff,0x28,0x20,0x21,0xff,0x1e,0x18,0x19,0xff,0x15, 0x12,0x12,0xff,0x0d,0x0b,0x0b,0xff,0x20,0x1b,0x1b,0xff,0x33,0x2b,0x2b,0xff,0x1e, 0x18,0x19,0xfe,0x22,0x1c,0x1c,0xfe,0x26,0x20,0x20,0xfe,0x38,0x2e,0x30,0xfd,0x48, 0x3c,0x3e,0xfd,0x41,0x37,0x38,0xfc,0x2a,0x24,0x25,0xfc,0x12,0x0f,0x0f,0xfe,0x0c, 0x0a,0x0a,0xfe,0x04,0x04,0x04,0xfe,0x02,0x02,0x02,0xfe,0x07,0x06,0x06,0xff,0x0c, 0x0a,0x0a,0xff,0x0d,0x0b,0x0b,0xfe,0x16,0x12,0x13,0xfc,0x2a,0x23,0x24,0xfc,0x3c, 0x33,0x34,0xfc,0x44,0x39,0x3a,0xfa,0x3d,0x33,0x34,0xfa,0x36,0x2d,0x2e,0xfa,0x3d, 0x33,0x33,0xfa,0x34,0x2b,0x2b,0xfa,0x21,0x1b,0x1b,0xfa,0x14,0x0f,0x0f,0xfa,0x1f, 0x1c,0x1d,0xf9,0x41,0x40,0x40,0xf7,0x6c,0x6b,0x6b,0xf5,0x93,0x93,0x93,0xf3,0xad, 0xad,0xad,0xf3,0xc0,0xc1,0xc1,0xf3,0xda,0xda,0xda,0xf3,0xf7,0xf4,0xf5,0xf5,0xfd, 0xf9,0xfa,0xf7,0xde,0xd8,0xda,0xf9,0xb9,0xb4,0xb4,0xfa,0xe3,0xdd,0xde,0xfb,0xf5, 0xf1,0xf1,0xfb,0xad,0xa9,0xa9,0xfb,0x7c,0x72,0x7b,0xfd,0x64,0x57,0x65,0xfe,0x5b, 0x4f,0x5b,0xff,0x5d,0x51,0x5d,0xff,0x58,0x4b,0x58,0xff,0x76,0x6b,0x76,0xff,0xa3, 0x9a,0xa0,0xff,0x9e,0x95,0x9c,0xff,0x84,0x7f,0x84,0xff,0x6c,0x68,0x6c,0xff,0x57, 0x53,0x58,0xff,0xa6,0xa2,0xa5,0xff,0x92,0x8e,0x92,0xff,0x6d,0x67,0x6c,0xff,0x6d, 0x66,0x6c,0xff,0x69,0x62,0x68,0xff,0x69,0x63,0x69,0xff,0x54,0x4e,0x54,0xff,0x4d, 0x48,0x4e,0xff,0x4e,0x49,0x4f,0xff,0x4e,0x49,0x4f,0xff,0x4f,0x49,0x50,0xff,0x4d, 0x48,0x4d,0xff,0x49,0x46,0x49,0xff,0x43,0x43,0x44,0xff,0x40,0x40,0x41,0xff,0x3f, 0x3f,0x40,0xff,0x3b,0x3c,0x3b,0xff,0x38,0x3c,0x39,0xfe,0x3d,0x3e,0x3d,0xfc,0x58, 0x51,0x59,0xf8,0x40,0x37,0x40,0xec,0x07,0x06,0x07,0xd8,0x00,0x00,0x00,0xbb,0x00, 0x00,0x00,0x96,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x28,0x00, 0x00,0x00,0x14,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x03,0x00, 0x00,0x00,0x04,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x05,0x00, 0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x02,0x00, 0x00,0x00,0x02,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x16,0x00, 0x00,0x00,0x2c,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0xa2,0x06, 0x05,0x05,0xc2,0x1e,0x19,0x19,0xd8,0x2f,0x28,0x29,0xe4,0x32,0x2a,0x2b,0xe9,0x0d, 0x0b,0x0b,0xe8,0x06,0x05,0x05,0xe5,0x02,0x01,0x03,0xe0,0x03,0x03,0x03,0xdd,0x06, 0x05,0x05,0xd9,0x08,0x06,0x07,0xd7,0x08,0x07,0x07,0xd3,0x06,0x05,0x05,0xca,0x02, 0x01,0x01,0xb8,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x52,0x00, 0x00,0x00,0x34,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x0f,0x00, 0x00,0x00,0x0f,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x2e,0x00, 0x00,0x00,0x45,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x8d,0x00, 0x00,0x00,0xa5,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0xd2,0x0e,0x0c,0x0c,0xe4,0x29, 0x23,0x23,0xf0,0x13,0x11,0x11,0xf8,0x00,0x00,0x00,0xfc,0x06,0x05,0x05,0xfe,0x09, 0x08,0x08,0xff,0x09,0x08,0x08,0xff,0x08,0x07,0x07,0xff,0x08,0x07,0x07,0xff,0x04, 0x04,0x04,0xfe,0x00,0x01,0x01,0xfd,0x00,0x01,0x01,0xfc,0x06,0x05,0x06,0xfb,0x0e, 0x0c,0x0d,0xfa,0x14,0x11,0x11,0xf8,0x24,0x1e,0x1f,0xf5,0x3a,0x31,0x32,0xf3,0x3c, 0x33,0x34,0xf2,0x2f,0x28,0x28,0xf0,0x22,0x1d,0x1d,0xf0,0x0e,0x0d,0x0d,0xf0,0x01, 0x01,0x01,0xf2,0x08,0x06,0x07,0xf4,0x0d,0x0b,0x0b,0xf6,0x12,0x0f,0x10,0xf7,0x14, 0x11,0x11,0xf8,0x12,0x0f,0x0f,0xf8,0x0d,0x0b,0x0b,0xf7,0x09,0x07,0x07,0xf5,0x05, 0x04,0x04,0xf4,0x00,0x00,0x00,0xf2,0x09,0x08,0x08,0xf0,0x41,0x36,0x37,0xf0,0x70, 0x5d,0x5f,0xf0,0x56,0x47,0x49,0xf2,0x3c,0x33,0x34,0xf4,0x3b,0x32,0x33,0xf6,0x39, 0x30,0x30,0xf7,0x37,0x2e,0x2e,0xf9,0x39,0x30,0x31,0xf9,0x44,0x3a,0x3a,0xf9,0x43, 0x38,0x39,0xfa,0x37,0x2e,0x30,0xfb,0x2e,0x27,0x27,0xfc,0x24,0x1e,0x1e,0xfd,0x14, 0x10,0x11,0xfe,0x0b,0x0a,0x0a,0xff,0x08,0x06,0x06,0xff,0x07,0x05,0x05,0xff,0x09, 0x08,0x08,0xff,0x06,0x05,0x05,0xff,0x0d,0x0b,0x0b,0xff,0x0b,0x09,0x0a,0xff,0x07, 0x06,0x06,0xff,0x09,0x08,0x08,0xff,0x09,0x07,0x07,0xff,0x05,0x04,0x04,0xff,0x03, 0x01,0x01,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x19,0x16,0x16,0xff,0x35, 0x2c,0x2d,0xff,0x22,0x1c,0x1d,0xff,0x08,0x06,0x06,0xff,0x00,0x00,0x00,0xff,0x01, 0x00,0x00,0xff,0x14,0x11,0x11,0xff,0x2f,0x28,0x29,0xff,0x23,0x1e,0x1f,0xff,0x04, 0x04,0x04,0xff,0x00,0x00,0x00,0xff,0x02,0x02,0x01,0xff,0x07,0x06,0x06,0xfe,0x0a, 0x08,0x08,0xfd,0x09,0x09,0x08,0xfc,0x32,0x2c,0x2c,0xfc,0x1d,0x18,0x19,0xfb,0x06, 0x05,0x05,0xfa,0x17,0x13,0x13,0xf9,0x31,0x29,0x2a,0xf9,0x3b,0x32,0x33,0xf9,0x41, 0x38,0x38,0xf9,0x3c,0x33,0x34,0xf9,0x42,0x38,0x39,0xf9,0x4d,0x42,0x44,0xf9,0x49, 0x3f,0x40,0xf9,0x42,0x38,0x3a,0xf9,0x62,0x55,0x56,0xf9,0x56,0x4a,0x4a,0xf9,0x48, 0x3e,0x3f,0xfa,0x47,0x3c,0x3c,0xfb,0x45,0x3a,0x3a,0xfc,0x3a,0x32,0x32,0xfc,0x25, 0x1f,0x1f,0xfd,0x28,0x22,0x22,0xff,0x29,0x23,0x23,0xff,0x29,0x23,0x23,0xff,0x29, 0x23,0x23,0xff,0x28,0x22,0x22,0xff,0x25,0x1f,0x20,0xff,0x21,0x1b,0x1c,0xff,0x1c, 0x17,0x18,0xff,0x14,0x10,0x11,0xff,0x0d,0x0b,0x0b,0xff,0x08,0x06,0x06,0xff,0x09, 0x08,0x08,0xfd,0x2d,0x25,0x27,0xfd,0x3e,0x35,0x35,0xfc,0x40,0x37,0x37,0xfb,0x36, 0x2e,0x2e,0xf9,0x2b,0x25,0x26,0xf8,0x24,0x1f,0x1f,0xf6,0x1e,0x1a,0x1a,0xf5,0x19, 0x15,0x16,0xf3,0x17,0x13,0x13,0xf1,0x17,0x13,0x14,0xf0,0x1c,0x18,0x17,0xef,0x1e, 0x19,0x19,0xee,0x19,0x14,0x15,0xee,0x2c,0x24,0x26,0xee,0x24,0x1e,0x1f,0xee,0x18, 0x14,0x13,0xee,0x05,0x04,0x04,0xef,0x0c,0x0a,0x0a,0xf0,0x11,0x0e,0x0e,0xf1,0x15, 0x12,0x12,0xf3,0x1a,0x16,0x16,0xf5,0x1e,0x18,0x19,0xf6,0x1e,0x19,0x1a,0xf8,0x1b, 0x18,0x17,0xf9,0x18,0x14,0x14,0xf9,0x0f,0x0d,0x0d,0xf9,0x0a,0x09,0x09,0xf9,0x0a, 0x08,0x08,0xf9,0x0c,0x0a,0x0a,0xf9,0x11,0x0f,0x0f,0xf9,0x1a,0x16,0x16,0xf9,0x21, 0x1c,0x1c,0xf9,0x26,0x20,0x20,0xf9,0x29,0x23,0x22,0xf9,0x2a,0x23,0x24,0xf9,0x2a, 0x23,0x23,0xf9,0x29,0x23,0x23,0xf9,0x29,0x23,0x23,0xf9,0x29,0x23,0x23,0xf9,0x29, 0x23,0x23,0xf9,0x28,0x22,0x22,0xf9,0x2f,0x28,0x28,0xf9,0x3e,0x35,0x35,0xfa,0x44, 0x39,0x3a,0xfb,0x3e,0x35,0x35,0xfc,0x2c,0x25,0x25,0xfd,0x27,0x21,0x20,0xfe,0x29, 0x23,0x22,0xff,0x27,0x21,0x21,0xff,0x24,0x1f,0x1e,0xff,0x20,0x1a,0x1b,0xfe,0x18, 0x15,0x16,0xfe,0x11,0x0e,0x0f,0xfd,0x08,0x07,0x07,0xfd,0x0a,0x09,0x09,0xfd,0x23, 0x1d,0x1d,0xfc,0x23,0x1d,0x1e,0xfc,0x0b,0x09,0x09,0xfb,0x14,0x10,0x10,0xfa,0x14, 0x11,0x11,0xf9,0x10,0x0d,0x0e,0xf8,0x0f,0x0d,0x0d,0xf7,0x15,0x11,0x11,0xf5,0x1a, 0x15,0x16,0xf5,0x20,0x1b,0x1b,0xf7,0x21,0x1c,0x1c,0xf8,0x1d,0x19,0x19,0xfa,0x13, 0x10,0x10,0xfc,0x05,0x04,0x04,0xfc,0x01,0x01,0x01,0xfc,0x0f,0x0c,0x0d,0xfa,0x1f, 0x1a,0x1b,0xf6,0x28,0x23,0x22,0xf5,0x1f,0x1a,0x1a,0xf3,0x0e,0x0c,0x0c,0xf0,0x0d, 0x0c,0x0c,0xf0,0x13,0x11,0x11,0xee,0x14,0x11,0x11,0xee,0x13,0x11,0x11,0xee,0x12, 0x0f,0x0f,0xee,0x0d,0x0b,0x0b,0xed,0x05,0x04,0x04,0xeb,0x00,0x00,0x00,0xe7,0x00, 0x00,0x00,0xe3,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0xdd,0x08,0x08,0x08,0xde,0x31, 0x31,0x31,0xe0,0x62,0x61,0x61,0xe3,0x81,0x80,0x80,0xe7,0x9a,0x98,0x98,0xeb,0xb6, 0xb2,0xb2,0xee,0xac,0xa9,0xa9,0xf0,0x83,0x81,0x81,0xf3,0x2c,0x2c,0x2b,0xf6,0x2a, 0x25,0x2b,0xf9,0x58,0x4c,0x59,0xfb,0x5f,0x53,0x5f,0xfd,0x5e,0x52,0x5e,0xff,0x5f, 0x53,0x5f,0xff,0x5b,0x4e,0x5a,0xff,0x5b,0x4c,0x5c,0xff,0x4b,0x43,0x4d,0xff,0x44, 0x40,0x45,0xff,0x48,0x43,0x48,0xff,0x45,0x40,0x46,0xff,0x66,0x61,0x67,0xff,0xa4, 0x9f,0xa2,0xff,0xa1,0x9b,0x9e,0xff,0x86,0x7f,0x83,0xff,0x85,0x7c,0x82,0xff,0xa4, 0x9f,0xa3,0xff,0x65,0x60,0x67,0xff,0x4a,0x46,0x4d,0xff,0x4d,0x48,0x4f,0xff,0x4e, 0x48,0x4f,0xff,0x4e,0x48,0x4e,0xff,0x4d,0x47,0x4d,0xff,0x49,0x45,0x48,0xff,0x42, 0x42,0x43,0xff,0x3f,0x40,0x40,0xff,0x3e,0x3f,0x3f,0xff,0x3a,0x3d,0x3b,0xff,0x3b, 0x3e,0x3c,0xfd,0x4f,0x4a,0x50,0xfa,0x57,0x4b,0x57,0xf1,0x0d,0x0c,0x0d,0xe1,0x00, 0x00,0x00,0xc7,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x51,0x00, 0x00,0x00,0x2f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x05,0x00, 0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00, 0x00,0x00,0x02,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00, 0x00,0x00,0x0a,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x4f,0x00, 0x00,0x00,0x76,0x00,0x00,0x00,0x9f,0x07,0x06,0x06,0xbd,0x21,0x1c,0x1c,0xd1,0x22, 0x1d,0x1d,0xdb,0x1d,0x17,0x17,0xdb,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0xcb,0x00, 0x00,0x00,0xc0,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xaf,0x00, 0x00,0x00,0xa9,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x77,0x00, 0x00,0x00,0x57,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x11,0x00, 0x00,0x00,0x09,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x08,0x00, 0x00,0x00,0x0d,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x36,0x00, 0x00,0x00,0x4a,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x95,0x00, 0x00,0x00,0xb2,0x01,0x01,0x01,0xcc,0x18,0x15,0x15,0xe0,0x2c,0x26,0x26,0xee,0x11, 0x0e,0x0e,0xf6,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0xfc,0x08,0x08,0x07,0xfc,0x11, 0x0f,0x0e,0xfc,0x0c,0x09,0x0a,0xfb,0x14,0x11,0x11,0xf9,0x1e,0x1a,0x1a,0xf7,0x24, 0x1f,0x20,0xf5,0x25,0x1f,0x20,0xf2,0x24,0x1f,0x20,0xef,0x21,0x1c,0x1d,0xeb,0x24, 0x1f,0x1f,0xe6,0x28,0x22,0x22,0xe1,0x22,0x1d,0x1e,0xdd,0x16,0x14,0x13,0xda,0x07, 0x06,0x06,0xd9,0x00,0x00,0x00,0xda,0x01,0x01,0x01,0xdd,0x03,0x03,0x02,0xe1,0x04, 0x04,0x03,0xe5,0x06,0x05,0x05,0xe9,0x07,0x05,0x05,0xea,0x06,0x05,0x05,0xea,0x04, 0x03,0x03,0xe9,0x02,0x02,0x02,0xe5,0x01,0x01,0x01,0xe1,0x00,0x00,0x00,0xdd,0x01, 0x02,0x02,0xda,0x11,0x0f,0x0f,0xd9,0x26,0x20,0x20,0xda,0x1e,0x1a,0x1a,0xdd,0x18, 0x15,0x15,0xe1,0x1f,0x1b,0x1a,0xe5,0x22,0x1d,0x1d,0xe9,0x25,0x1f,0x20,0xeb,0x26, 0x20,0x21,0xeb,0x30,0x28,0x29,0xed,0x45,0x39,0x3a,0xef,0x48,0x3d,0x3e,0xf1,0x4c, 0x3f,0x40,0xf4,0x44,0x39,0x3a,0xf7,0x2b,0x24,0x24,0xf9,0x16,0x13,0x13,0xfc,0x0e, 0x0c,0x0b,0xfd,0x04,0x03,0x03,0xfe,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0xfe,0x33, 0x2b,0x2b,0xfe,0x36,0x2e,0x2e,0xfe,0x1d,0x17,0x19,0xfe,0x05,0x04,0x04,0xff,0x00, 0x00,0x00,0xff,0x01,0x01,0x01,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00, 0x00,0x00,0xff,0x05,0x04,0x04,0xff,0x08,0x07,0x07,0xff,0x15,0x12,0x12,0xff,0x24, 0x1f,0x1f,0xff,0x05,0x04,0x04,0xff,0x17,0x13,0x13,0xff,0x1e,0x19,0x19,0xff,0x69, 0x58,0x5a,0xfe,0x83,0x70,0x71,0xfd,0x5c,0x4f,0x50,0xfd,0x42,0x38,0x39,0xfc,0x22, 0x1d,0x1d,0xfb,0x15,0x12,0x12,0xfa,0x09,0x08,0x08,0xf8,0x21,0x1e,0x1e,0xf6,0x28, 0x21,0x21,0xf4,0x05,0x04,0x04,0xf2,0x01,0x01,0x01,0xef,0x01,0x01,0x01,0xee,0x07, 0x06,0x07,0xed,0x12,0x0e,0x10,0xec,0x0f,0x0d,0x0d,0xed,0x0b,0x09,0x0a,0xed,0x0b, 0x09,0x09,0xed,0x14,0x11,0x12,0xed,0x22,0x1d,0x1e,0xed,0x2e,0x27,0x28,0xec,0x41, 0x38,0x38,0xed,0x40,0x36,0x37,0xee,0x1d,0x19,0x1a,0xef,0x2b,0x25,0x25,0xf1,0x45, 0x3b,0x3b,0xf4,0x43,0x39,0x3a,0xf8,0x2b,0x25,0x25,0xfb,0x17,0x15,0x15,0xfd,0x10, 0x0e,0x0e,0xfe,0x10,0x0e,0x0e,0xff,0x10,0x0e,0x0e,0xff,0x0f,0x0d,0x0d,0xff,0x0e, 0x0c,0x0c,0xff,0x0e,0x0b,0x0b,0xff,0x0b,0x09,0x09,0xff,0x08,0x06,0x07,0xff,0x03, 0x03,0x03,0xfe,0x02,0x02,0x02,0xfd,0x1d,0x18,0x19,0xfb,0x37,0x2e,0x2f,0xf8,0x1b, 0x16,0x16,0xf5,0x01,0x01,0x01,0xf2,0x0e,0x0b,0x0b,0xee,0x17,0x13,0x14,0xec,0x19, 0x15,0x16,0xe8,0x19,0x16,0x16,0xe2,0x19,0x15,0x16,0xde,0x17,0x14,0x14,0xdb,0x14, 0x11,0x12,0xd8,0x0e,0x0c,0x0c,0xd7,0x03,0x03,0x03,0xd5,0x01,0x01,0x01,0xd5,0x10, 0x0d,0x0e,0xd5,0x0e,0x0c,0x0c,0xd5,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0xd7,0x01, 0x00,0x00,0xd8,0x01,0x01,0x01,0xdc,0x03,0x02,0x02,0xe0,0x04,0x04,0x04,0xe4,0x07, 0x05,0x05,0xe8,0x08,0x06,0x06,0xeb,0x08,0x07,0x07,0xec,0x08,0x06,0x06,0xed,0x05, 0x04,0x04,0xed,0x04,0x04,0x04,0xed,0x03,0x03,0x03,0xed,0x03,0x03,0x03,0xed,0x06, 0x05,0x05,0xed,0x09,0x08,0x08,0xed,0x0c,0x0b,0x0b,0xed,0x0d,0x0b,0x0b,0xed,0x0f, 0x0d,0x0d,0xed,0x10,0x0e,0x0e,0xed,0x10,0x0e,0x0e,0xed,0x10,0x0e,0x0e,0xed,0x10, 0x0e,0x0e,0xed,0x10,0x0e,0x0e,0xed,0x10,0x0e,0x0e,0xec,0x10,0x0e,0x0e,0xed,0x0f, 0x0c,0x0c,0xee,0x0e,0x0c,0x0b,0xf0,0x18,0x15,0x15,0xf3,0x2d,0x26,0x26,0xf5,0x2f, 0x28,0x28,0xf8,0x15,0x12,0x11,0xfa,0x10,0x0e,0x0e,0xfb,0x18,0x15,0x15,0xfb,0x1d, 0x18,0x18,0xfb,0x20,0x1a,0x1b,0xfa,0x20,0x1a,0x1b,0xfa,0x1e,0x19,0x19,0xf9,0x1b, 0x16,0x16,0xf8,0x1f,0x19,0x19,0xf6,0x21,0x1b,0x1b,0xf5,0x0b,0x0a,0x0a,0xf3,0x03, 0x03,0x03,0xf0,0x07,0x06,0x06,0xee,0x07,0x06,0x06,0xec,0x06,0x05,0x05,0xea,0x02, 0x03,0x03,0xe8,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,0xe6,0x00,0x01,0x01,0xe8,0x0a, 0x09,0x09,0xec,0x1e,0x19,0x19,0xf1,0x2e,0x26,0x26,0xf4,0x23,0x1d,0x1e,0xf4,0x18, 0x15,0x14,0xf2,0x1f,0x1b,0x1b,0xef,0x19,0x15,0x15,0xe9,0x07,0x06,0x06,0xe3,0x00, 0x00,0x00,0xdd,0x00,0x01,0x01,0xd9,0x02,0x01,0x01,0xd7,0x03,0x02,0x02,0xd5,0x03, 0x02,0x02,0xd5,0x03,0x03,0x03,0xd5,0x02,0x03,0x03,0xd4,0x02,0x02,0x02,0xd2,0x02, 0x02,0x02,0xcf,0x01,0x00,0x00,0xc9,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0xbc,0x00, 0x00,0x00,0xb8,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0xc3,0x00, 0x00,0x00,0xca,0x01,0x00,0x00,0xd0,0x11,0x10,0x10,0xd5,0x09,0x08,0x08,0xda,0x00, 0x00,0x00,0xe0,0x01,0x02,0x01,0xe7,0x04,0x04,0x04,0xef,0x40,0x38,0x41,0xf6,0x60, 0x54,0x60,0xfb,0x5f,0x53,0x5f,0xfd,0x5c,0x50,0x5c,0xff,0x61,0x53,0x61,0xff,0x5f, 0x52,0x5e,0xff,0x4d,0x48,0x4e,0xff,0x4a,0x46,0x4a,0xff,0x4d,0x48,0x4d,0xff,0x4e, 0x49,0x4f,0xff,0x48,0x43,0x4a,0xff,0x55,0x4f,0x57,0xff,0x60,0x59,0x60,0xff,0x70, 0x69,0x70,0xff,0x59,0x53,0x5a,0xff,0x84,0x7f,0x84,0xff,0x65,0x61,0x66,0xff,0x4f, 0x49,0x50,0xff,0x4e,0x49,0x4f,0xff,0x4e,0x49,0x4f,0xff,0x4c,0x47,0x4d,0xff,0x4c, 0x47,0x4d,0xff,0x47,0x44,0x48,0xff,0x42,0x42,0x43,0xff,0x3e,0x3f,0x3f,0xff,0x3b, 0x3e,0x3d,0xff,0x3c,0x3d,0x3c,0xfe,0x44,0x43,0x45,0xfb,0x63,0x56,0x63,0xf5,0x26, 0x1e,0x25,0xe8,0x02,0x01,0x02,0xd1,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x87,0x00, 0x00,0x00,0x5f,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x0f,0x00, 0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x12,0x00, 0x00,0x00,0x25,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x87,0x00, 0x00,0x00,0xa3,0x00,0x00,0x00,0xb6,0x01,0x01,0x01,0xbd,0x03,0x03,0x03,0xbb,0x00, 0x00,0x00,0xb1,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x87,0x00, 0x00,0x00,0x80,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x6f,0x00, 0x00,0x00,0x63,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x24,0x00, 0x00,0x00,0x14,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x0a,0x00, 0x00,0x00,0x11,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x38,0x00, 0x00,0x00,0x4e,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0xab,0x02, 0x02,0x02,0xc7,0x16,0x13,0x13,0xdc,0x29,0x23,0x24,0xea,0x20,0x1b,0x1c,0xf1,0x0a, 0x08,0x08,0xf4,0x18,0x15,0x15,0xf5,0x3a,0x32,0x33,0xf3,0x2c,0x25,0x26,0xf1,0x24, 0x1e,0x20,0xed,0x20,0x1b,0x1c,0xe9,0x1b,0x17,0x17,0xe5,0x12,0x10,0x10,0xde,0x0a, 0x08,0x08,0xd7,0x02,0x02,0x02,0xd0,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0xbf,0x00, 0x00,0x00,0xb8,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0xb1,0x00, 0x00,0x00,0xb7,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0xcc,0x00, 0x00,0x00,0xce,0x01,0x00,0x00,0xce,0x01,0x01,0x01,0xcb,0x00,0x01,0x01,0xc6,0x00, 0x00,0x00,0xbd,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0xaf,0x00, 0x00,0x00,0xb2,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xc6,0x00, 0x00,0x00,0xcc,0x03,0x02,0x02,0xd0,0x08,0x07,0x07,0xd2,0x0a,0x09,0x09,0xd4,0x0d, 0x0b,0x0b,0xd7,0x0e,0x0c,0x0c,0xdb,0x17,0x14,0x14,0xe1,0x25,0x1f,0x1e,0xe8,0x2f, 0x27,0x28,0xf0,0x31,0x29,0x2a,0xf5,0x29,0x23,0x23,0xf8,0x34,0x2c,0x2d,0xfb,0x2e, 0x25,0x26,0xfb,0x2c,0x24,0x25,0xfb,0x45,0x3a,0x3b,0xfb,0x5d,0x4d,0x4e,0xfb,0x60, 0x50,0x51,0xfb,0x33,0x2a,0x2c,0xfc,0x07,0x05,0x06,0xfd,0x00,0x00,0x00,0xfe,0x00, 0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00, 0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x20,0x1b,0x1b,0xff,0x21,0x1c,0x1c,0xff,0x26, 0x20,0x20,0xfe,0x01,0x01,0x01,0xfd,0x29,0x24,0x24,0xfc,0x5d,0x4f,0x50,0xf9,0x79, 0x66,0x67,0xf7,0x8f,0x7a,0x7c,0xf6,0x62,0x53,0x54,0xf3,0x3e,0x36,0x36,0xf0,0x2a, 0x24,0x25,0xec,0x31,0x29,0x2a,0xe8,0x09,0x07,0x07,0xe2,0x00,0x00,0x00,0xdd,0x00, 0x00,0x00,0xd9,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,0xd2,0x00, 0x00,0x00,0xd1,0x01,0x01,0x00,0xd2,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0xd2,0x00, 0x00,0x00,0xd1,0x00,0x00,0x00,0xd2,0x07,0x07,0x07,0xd3,0x0b,0x09,0x0a,0xd4,0x00, 0x00,0x00,0xd8,0x03,0x03,0x03,0xdd,0x0f,0x0d,0x0d,0xe5,0x14,0x10,0x10,0xed,0x25, 0x20,0x20,0xf6,0x0f,0x0d,0x0d,0xfa,0x01,0x01,0x01,0xfe,0x01,0x01,0x01,0xfe,0x03, 0x03,0x03,0xff,0x03,0x03,0x03,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x01, 0x01,0x01,0xff,0x00,0x00,0x00,0xfe,0x0a,0x09,0x09,0xfc,0x1c,0x17,0x17,0xf9,0x22, 0x1d,0x1d,0xf4,0x1d,0x18,0x19,0xed,0x02,0x02,0x02,0xe4,0x00,0x00,0x00,0xdd,0x00, 0x00,0x00,0xd6,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0xc1,0x00, 0x00,0x00,0xb9,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0xac,0x00, 0x00,0x00,0xab,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0xaa,0x00, 0x00,0x00,0xab,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0xb5,0x00, 0x00,0x00,0xbb,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0xce,0x00, 0x00,0x00,0xd1,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0xd2,0x00, 0x00,0x00,0xd2,0x00,0x01,0x01,0xd2,0x01,0x00,0x00,0xd2,0x01,0x00,0x00,0xd2,0x01, 0x01,0x01,0xd2,0x01,0x01,0x01,0xd2,0x01,0x00,0x00,0xd2,0x01,0x01,0x01,0xd2,0x01, 0x01,0x01,0xd2,0x01,0x01,0x01,0xd2,0x01,0x01,0x01,0xd2,0x01,0x01,0x01,0xd1,0x01, 0x01,0x01,0xd2,0x01,0x01,0x01,0xd3,0x01,0x01,0x01,0xd6,0x01,0x01,0x01,0xd9,0x00, 0x00,0x00,0xdf,0x06,0x05,0x05,0xe5,0x1d,0x18,0x18,0xeb,0x28,0x21,0x23,0xf1,0x24, 0x1e,0x1f,0xf3,0x1f,0x1a,0x1b,0xf3,0x1c,0x17,0x18,0xf1,0x1b,0x16,0x15,0xef,0x19, 0x14,0x14,0xed,0x16,0x13,0x13,0xeb,0x17,0x14,0x14,0xe9,0x19,0x15,0x15,0xe7,0x0d, 0x0b,0x0b,0xe4,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0xd5,0x01, 0x01,0x01,0xd1,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0xc6,0x00, 0x00,0x00,0xc7,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0xdd,0x10, 0x0d,0x0d,0xe2,0x1b,0x17,0x17,0xe3,0x13,0x10,0x10,0xdf,0x07,0x06,0x06,0xd7,0x00, 0x00,0x00,0xcd,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xb1,0x00, 0x00,0x00,0xae,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0xaa,0x00, 0x00,0x00,0xa9,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x9b,0x00, 0x00,0x00,0x93,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x86,0x00, 0x00,0x00,0x8c,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0xa4,0x00, 0x00,0x00,0xac,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0xcc,0x00, 0x00,0x00,0xdb,0x1a,0x17,0x1a,0xea,0x53,0x49,0x54,0xf4,0x5f,0x54,0x60,0xfa,0x5c, 0x50,0x5c,0xfc,0x62,0x55,0x63,0xfe,0x52,0x4b,0x54,0xff,0x4a,0x46,0x4b,0xff,0x4c, 0x47,0x4c,0xff,0x4d,0x48,0x4d,0xff,0x4e,0x49,0x50,0xff,0x4f,0x48,0x50,0xff,0x50, 0x49,0x50,0xff,0x6c,0x66,0x6c,0xff,0x9e,0x99,0x9e,0xff,0x5c,0x56,0x5d,0xff,0x7c, 0x78,0x7d,0xff,0x60,0x5b,0x61,0xff,0x4f,0x49,0x50,0xff,0x4f,0x48,0x50,0xff,0x4c, 0x47,0x4d,0xff,0x4b,0x46,0x4c,0xff,0x49,0x46,0x4a,0xff,0x42,0x42,0x44,0xff,0x3f, 0x40,0x41,0xff,0x3d,0x3e,0x3e,0xff,0x3d,0x3e,0x3d,0xfe,0x45,0x43,0x45,0xfc,0x5b, 0x52,0x5c,0xf7,0x4d,0x40,0x4c,0xed,0x0a,0x08,0x0a,0xd9,0x00,0x00,0x00,0xbc,0x00, 0x00,0x00,0x96,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x28,0x00, 0x00,0x00,0x13,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x04,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x2d,0x00, 0x00,0x00,0x46,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x88,0x00, 0x00,0x00,0x8e,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x70,0x00, 0x00,0x00,0x60,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x47,0x00, 0x00,0x00,0x44,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x2c,0x00, 0x00,0x00,0x1f,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x04,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x0a,0x00, 0x00,0x00,0x11,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x45,0x00, 0x00,0x00,0x63,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0xbf,0x0c, 0x0b,0x0b,0xd2,0x1d,0x19,0x1b,0xde,0x28,0x22,0x23,0xe3,0x24,0x1e,0x1f,0xe3,0x13, 0x11,0x11,0xe0,0x10,0x0d,0x0e,0xda,0x07,0x05,0x07,0xd3,0x01,0x00,0x01,0xcb,0x00, 0x00,0x00,0xc2,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0xa3,0x00, 0x00,0x00,0x98,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x7d,0x00, 0x00,0x00,0x7a,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x8b,0x00, 0x00,0x00,0x95,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0xa0,0x00, 0x00,0x00,0x9c,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x83,0x00, 0x00,0x00,0x7d,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x84,0x00, 0x00,0x00,0x8c,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0xa1,0x00, 0x00,0x00,0xa4,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xb5,0x00, 0x00,0x00,0xbf,0x00,0x00,0x00,0xcd,0x05,0x04,0x04,0xda,0x13,0x11,0x10,0xe5,0x27, 0x21,0x21,0xec,0x47,0x3a,0x3c,0xf1,0x46,0x3b,0x3c,0xf3,0x33,0x2b,0x2c,0xf2,0x15, 0x11,0x12,0xf1,0x14,0x12,0x12,0xf1,0x3b,0x31,0x31,0xf2,0x4b,0x3f,0x40,0xf4,0x2e, 0x27,0x28,0xf7,0x22,0x1d,0x1e,0xf9,0x11,0x0e,0x0e,0xfb,0x01,0x01,0x01,0xfd,0x00, 0x00,0x00,0xfe,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x02, 0x02,0x02,0xfe,0x1d,0x19,0x19,0xfd,0x15,0x12,0x12,0xfc,0x28,0x22,0x23,0xf8,0x2a, 0x23,0x24,0xf4,0x16,0x12,0x12,0xef,0x13,0x0f,0x10,0xea,0x26,0x20,0x20,0xe4,0x1e, 0x1a,0x1a,0xdf,0x14,0x11,0x11,0xd8,0x11,0x0f,0x0f,0xd1,0x0b,0x08,0x08,0xc8,0x01, 0x01,0x01,0xc0,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0xaa,0x00, 0x00,0x00,0xa6,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0xa4,0x00, 0x00,0x00,0xa4,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0xa5,0x00, 0x00,0x00,0xa7,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xbe,0x00, 0x00,0x00,0xce,0x00,0x00,0x00,0xde,0x03,0x03,0x03,0xec,0x02,0x02,0x02,0xf7,0x00, 0x00,0x00,0xfc,0x00,0x00,0x00,0xfe,0x09,0x07,0x07,0xff,0x28,0x21,0x22,0xff,0x27, 0x20,0x21,0xfe,0x06,0x05,0x05,0xfe,0x00,0x00,0x00,0xfd,0x0c,0x0b,0x0b,0xfb,0x2e, 0x25,0x26,0xf6,0x25,0x1f,0x1f,0xef,0x06,0x05,0x05,0xe2,0x02,0x02,0x02,0xd4,0x00, 0x00,0x00,0xc5,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0xa3,0x00, 0x00,0x00,0x99,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x7f,0x00, 0x00,0x00,0x78,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x75,0x00, 0x00,0x00,0x74,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x76,0x00, 0x00,0x00,0x7a,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x92,0x00, 0x00,0x00,0x9b,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xa4,0x00, 0x00,0x00,0xa4,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0xa4,0x00, 0x00,0x00,0xa4,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0xa4,0x00, 0x00,0x00,0xa4,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0xa4,0x00, 0x00,0x00,0xa4,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0xa7,0x00, 0x00,0x00,0xab,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0xc7,0x02, 0x02,0x02,0xd2,0x12,0x0f,0x10,0xda,0x18,0x14,0x14,0xde,0x0b,0x09,0x09,0xde,0x05, 0x04,0x05,0xda,0x02,0x02,0x02,0xd5,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0xce,0x00, 0x00,0x00,0xcb,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0xb9,0x00, 0x00,0x00,0xb2,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x9f,0x00, 0x00,0x00,0x9a,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0xa0,0x00, 0x00,0x00,0xac,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xc1,0x00, 0x00,0x00,0xbc,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x93,0x00, 0x00,0x00,0x86,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x76,0x00, 0x00,0x00,0x74,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x71,0x00, 0x00,0x00,0x6c,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0x55,0x00, 0x00,0x00,0x51,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x5d,0x00, 0x00,0x00,0x66,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x81,0x00, 0x00,0x00,0x91,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xd6,0x33, 0x2d,0x33,0xe7,0x5c,0x51,0x5d,0xf2,0x60,0x53,0x61,0xf9,0x5a,0x4f,0x5b,0xfc,0x4c, 0x48,0x4d,0xfc,0x4a,0x46,0x4b,0xfc,0x4d,0x48,0x4d,0xfc,0x4e,0x49,0x4e,0xfc,0x4f, 0x49,0x50,0xfc,0x48,0x41,0x48,0xfc,0x8a,0x85,0x8a,0xfc,0xba,0xb8,0xbb,0xfc,0x88, 0x83,0x88,0xfc,0x5d,0x56,0x5e,0xfd,0x8e,0x8a,0x8f,0xfd,0x5f,0x5a,0x60,0xfe,0x4a, 0x45,0x4b,0xfe,0x4f,0x49,0x50,0xff,0x4b,0x47,0x4c,0xfe,0x49,0x45,0x4a,0xfe,0x46, 0x44,0x47,0xfe,0x42,0x41,0x43,0xff,0x3f,0x40,0x40,0xfe,0x3e,0x3f,0x3f,0xfd,0x41, 0x41,0x41,0xfc,0x59,0x50,0x5a,0xf7,0x61,0x51,0x60,0xee,0x16,0x12,0x16,0xdf,0x00, 0x00,0x00,0xc6,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x51,0x00, 0x00,0x00,0x31,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x05,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x07,0x00, 0x00,0x00,0x0e,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x3b,0x00, 0x00,0x00,0x4c,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x5a,0x00, 0x00,0x00,0x50,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x2b,0x00, 0x00,0x00,0x25,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x1d,0x00, 0x00,0x00,0x1a,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x08,0x00, 0x00,0x00,0x04,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x0d,0x00, 0x00,0x00,0x18,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x5d,0x00, 0x00,0x00,0x7d,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0xaf,0x02,0x02,0x01,0xbc,0x0a, 0x09,0x09,0xc2,0x09,0x07,0x08,0xc2,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0xb4,0x00, 0x00,0x00,0xaa,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x88,0x00, 0x00,0x00,0x7c,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x5a,0x00, 0x00,0x00,0x52,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x4b,0x00, 0x00,0x00,0x51,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x68,0x00, 0x00,0x00,0x6b,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x61,0x00, 0x00,0x00,0x59,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x49,0x00, 0x00,0x00,0x4c,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x62,0x00, 0x00,0x00,0x69,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x74,0x00, 0x00,0x00,0x79,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0xa5,0x00, 0x00,0x00,0xb7,0x00,0x00,0x00,0xc9,0x08,0x06,0x06,0xd6,0x19,0x15,0x15,0xdd,0x15, 0x13,0x13,0xdf,0x06,0x05,0x05,0xde,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0xdc,0x02, 0x02,0x02,0xdf,0x12,0x0f,0x10,0xe3,0x25,0x20,0x21,0xe8,0x3d,0x33,0x34,0xee,0x49, 0x3d,0x3e,0xf3,0x30,0x28,0x29,0xf7,0x14,0x12,0x12,0xf9,0x05,0x04,0x04,0xfb,0x00, 0x00,0x00,0xfb,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0xfa,0x0a,0x08,0x08,0xf9,0x21, 0x1c,0x1d,0xf4,0x30,0x29,0x29,0xed,0x16,0x12,0x13,0xe5,0x02,0x01,0x01,0xda,0x00, 0x00,0x00,0xd0,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0xb2,0x00, 0x00,0x00,0xa6,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x86,0x00, 0x00,0x00,0x7d,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x70,0x00, 0x00,0x00,0x70,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x70,0x00, 0x00,0x00,0x70,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x7c,0x00, 0x00,0x00,0x89,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,0xcf,0x00, 0x00,0x00,0xe4,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0xfd,0x0a, 0x08,0x08,0xfe,0x56,0x48,0x49,0xfe,0x53,0x45,0x47,0xfd,0x28,0x22,0x22,0xfb,0x2b, 0x24,0x25,0xf8,0x41,0x36,0x37,0xf3,0x22,0x1d,0x1d,0xea,0x05,0x04,0x04,0xdc,0x00, 0x00,0x00,0xca,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x8a,0x00, 0x00,0x00,0x7c,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x5d,0x00, 0x00,0x00,0x54,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x45,0x00, 0x00,0x00,0x43,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x43,0x00, 0x00,0x00,0x43,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x4e,0x00, 0x00,0x00,0x57,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x6c,0x00, 0x00,0x00,0x6e,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x70,0x00, 0x00,0x00,0x70,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x70,0x00, 0x00,0x00,0x70,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x70,0x00, 0x00,0x00,0x70,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x70,0x00, 0x00,0x00,0x70,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x80,0x00, 0x00,0x00,0x8d,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0xb5,0x00, 0x00,0x00,0xba,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0xae,0x00, 0x00,0x00,0xa7,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x98,0x00, 0x00,0x00,0x91,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x77,0x00, 0x00,0x00,0x71,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x64,0x00, 0x00,0x00,0x66,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x89,0x00, 0x00,0x00,0x91,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x81,0x00, 0x00,0x00,0x71,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x4b,0x00, 0x00,0x00,0x47,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x43,0x00, 0x00,0x00,0x42,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x38,0x00, 0x00,0x00,0x32,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x29,0x00, 0x00,0x00,0x2c,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x3f,0x00, 0x00,0x00,0x47,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x7e,0x00, 0x00,0x00,0x9c,0x00,0x00,0x00,0xbc,0x08,0x06,0x08,0xd5,0x45,0x3d,0x47,0xe6,0x67, 0x58,0x68,0xef,0x54,0x4d,0x55,0xf3,0x4c,0x47,0x4c,0xf5,0x4d,0x48,0x4d,0xf5,0x4d, 0x48,0x4e,0xf5,0x51,0x4a,0x51,0xf5,0x52,0x4b,0x52,0xf5,0x4e,0x46,0x4e,0xf5,0x78, 0x72,0x79,0xf5,0x9b,0x96,0x9c,0xf5,0x8c,0x86,0x8c,0xf6,0x8b,0x85,0x8b,0xf7,0x91, 0x8b,0x91,0xf8,0x5f,0x59,0x60,0xf9,0x51,0x4a,0x52,0xfa,0x50,0x4a,0x52,0xfb,0x52, 0x4b,0x53,0xfc,0x4b,0x47,0x4b,0xfc,0x49,0x46,0x4b,0xfc,0x44,0x42,0x45,0xfb,0x46, 0x44,0x48,0xfa,0x46,0x44,0x47,0xf9,0x58,0x4f,0x59,0xf5,0x61,0x51,0x60,0xee,0x21, 0x1b,0x21,0xe1,0x02,0x01,0x02,0xcb,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x85,0x00, 0x00,0x00,0x5d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x0f,0x00, 0x00,0x00,0x07,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x0c,0x00, 0x00,0x00,0x14,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x2e,0x00, 0x00,0x00,0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x22,0x00, 0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00, 0x00,0x00,0x0d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x07,0x00, 0x00,0x00,0x05,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x03,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x15,0x00, 0x00,0x00,0x25,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x6d,0x00, 0x00,0x00,0x81,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x92,0x00, 0x00,0x00,0x8c,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x6d,0x00, 0x00,0x00,0x62,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x41,0x00, 0x00,0x00,0x38,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x25,0x00, 0x00,0x00,0x23,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x2f,0x00, 0x00,0x00,0x35,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x3c,0x00, 0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x29,0x00, 0x00,0x00,0x25,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x2a,0x00, 0x00,0x00,0x2f,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x3d,0x00, 0x00,0x00,0x40,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x53,0x00, 0x00,0x00,0x63,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0xa1,0x00, 0x00,0x00,0xb1,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0xbb,0x00, 0x00,0x00,0xb8,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0xc3,0x03, 0x02,0x02,0xcd,0x08,0x07,0x06,0xd8,0x13,0x10,0x11,0xe1,0x2a,0x23,0x24,0xe8,0x37, 0x2e,0x2f,0xee,0x38,0x2e,0x2f,0xf1,0x2b,0x24,0x25,0xf3,0x1b,0x18,0x18,0xf2,0x19, 0x15,0x15,0xf2,0x26,0x20,0x20,0xed,0x1a,0x16,0x16,0xe5,0x06,0x06,0x06,0xd9,0x00, 0x00,0x00,0xc9,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x9a,0x00, 0x00,0x00,0x8d,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x69,0x00, 0x00,0x00,0x5e,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x45,0x00, 0x00,0x00,0x41,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3f,0x00, 0x00,0x00,0x3f,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x41,0x00, 0x00,0x00,0x48,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x83,0x00, 0x00,0x00,0xa5,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xdf,0x02,0x02,0x02,0xef,0x02, 0x02,0x02,0xf8,0x00,0x00,0x00,0xfb,0x2f,0x27,0x28,0xfb,0x5f,0x4f,0x50,0xfa,0x47, 0x3c,0x3d,0xf7,0x1a,0x16,0x16,0xf3,0x0c,0x0a,0x0a,0xed,0x22,0x1c,0x1c,0xe3,0x03, 0x03,0x03,0xd5,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x8c,0x00, 0x00,0x00,0x70,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x41,0x00, 0x00,0x00,0x39,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x25,0x00, 0x00,0x00,0x22,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x1f,0x00, 0x00,0x00,0x1f,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x20,0x00, 0x00,0x00,0x23,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x33,0x00, 0x00,0x00,0x39,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x3e,0x00, 0x00,0x00,0x3f,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3f,0x00, 0x00,0x00,0x3f,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3f,0x00, 0x00,0x00,0x3f,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3f,0x00, 0x00,0x00,0x3f,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x42,0x00, 0x00,0x00,0x47,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,0x6a,0x00, 0x00,0x00,0x79,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x89,0x00, 0x00,0x00,0x83,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x6e,0x00, 0x00,0x00,0x6a,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x56,0x00, 0x00,0x00,0x4d,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3c,0x00, 0x00,0x00,0x39,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x41,0x00, 0x00,0x00,0x4c,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x60,0x00, 0x00,0x00,0x59,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x36,0x00, 0x00,0x00,0x2b,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x20,0x00, 0x00,0x00,0x1f,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x1d,0x00, 0x00,0x00,0x1b,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x13,0x00, 0x00,0x00,0x11,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x16,0x00, 0x00,0x00,0x19,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2d,0x00, 0x00,0x00,0x3d,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x9c,0x00, 0x00,0x00,0xb9,0x24,0x1e,0x23,0xcf,0x51,0x47,0x51,0xdb,0x4e,0x48,0x4e,0xe1,0x4a, 0x46,0x4b,0xe3,0x4d,0x47,0x4e,0xe4,0x4f,0x47,0x4f,0xe4,0x52,0x49,0x52,0xe4,0x56, 0x4c,0x57,0xe4,0x59,0x4f,0x59,0xe4,0x5b,0x4f,0x5b,0xe4,0x61,0x54,0x60,0xe5,0x67, 0x5a,0x68,0xe6,0x74,0x6a,0x75,0xe7,0x78,0x6d,0x77,0xea,0x61,0x55,0x61,0xed,0x5c, 0x50,0x5c,0xf0,0x59,0x4f,0x5a,0xf2,0x59,0x4e,0x5a,0xf3,0x54,0x4c,0x55,0xf4,0x51, 0x49,0x51,0xf3,0x50,0x49,0x51,0xf2,0x50,0x4a,0x51,0xf1,0x59,0x4d,0x59,0xee,0x45, 0x38,0x43,0xe6,0x17,0x12,0x16,0xdb,0x01,0x01,0x01,0xca,0x00,0x00,0x00,0xaf,0x00, 0x00,0x00,0x8d,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x26,0x00, 0x00,0x00,0x14,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x02,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x0c,0x00, 0x00,0x00,0x10,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x15,0x00, 0x00,0x00,0x11,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x07,0x00, 0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00, 0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x05,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x20,0x00, 0x00,0x00,0x31,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x5b,0x00, 0x00,0x00,0x5f,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x50,0x00, 0x00,0x00,0x47,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x2c,0x00, 0x00,0x00,0x24,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x14,0x00, 0x00,0x00,0x10,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0e,0x00, 0x00,0x00,0x10,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x19,0x00, 0x00,0x00,0x1a,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x16,0x00, 0x00,0x00,0x13,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0e,0x00, 0x00,0x00,0x0e,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x17,0x00, 0x00,0x00,0x19,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x1e,0x00, 0x00,0x00,0x23,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x49,0x00, 0x00,0x00,0x5e,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x89,0x00, 0x00,0x00,0x8b,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x86,0x00, 0x00,0x00,0x8b,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0xb1,0x00, 0x00,0x00,0xc0,0x02,0x01,0x01,0xcc,0x07,0x05,0x05,0xd7,0x15,0x11,0x11,0xdd,0x1e, 0x19,0x19,0xe0,0x16,0x13,0x13,0xe0,0x12,0x0f,0x10,0xdd,0x0d,0x0b,0x0b,0xd6,0x03, 0x02,0x02,0xc9,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x8b,0x00, 0x00,0x00,0x77,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x4e,0x00, 0x00,0x00,0x44,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x2a,0x00, 0x00,0x00,0x24,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x1c,0x00, 0x00,0x00,0x1c,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x1c,0x00, 0x00,0x00,0x1e,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x39,0x00, 0x00,0x00,0x55,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0xc2,0x00, 0x00,0x00,0xdd,0x2d,0x25,0x26,0xed,0x26,0x1f,0x1f,0xf3,0x18,0x14,0x15,0xf4,0x46, 0x3b,0x3c,0xf2,0x40,0x35,0x36,0xef,0x0b,0x0a,0x0a,0xe9,0x03,0x03,0x03,0xe1,0x00, 0x00,0x00,0xd5,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0x9c,0x00, 0x00,0x00,0x80,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x34,0x00, 0x00,0x00,0x26,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x14,0x00, 0x00,0x00,0x12,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x0c,0x00, 0x00,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00, 0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x10,0x00, 0x00,0x00,0x13,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x1a,0x00, 0x00,0x00,0x1b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x1c,0x00, 0x00,0x00,0x1c,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x1c,0x00, 0x00,0x00,0x1c,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x1c,0x00, 0x00,0x00,0x1c,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x1c,0x00, 0x00,0x00,0x1c,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x27,0x00, 0x00,0x00,0x30,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x52,0x00, 0x00,0x00,0x57,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x49,0x00, 0x00,0x00,0x42,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x37,0x00, 0x00,0x00,0x32,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x21,0x00, 0x00,0x00,0x1e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x18,0x00, 0x00,0x00,0x1a,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x2e,0x00, 0x00,0x00,0x32,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x28,0x00, 0x00,0x00,0x20,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x0e,0x00, 0x00,0x00,0x0c,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00, 0x00,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x09,0x00, 0x00,0x00,0x07,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00, 0x00,0x00,0x06,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x0b,0x00, 0x00,0x00,0x0e,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x39,0x00, 0x00,0x00,0x55,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x93,0x01,0x01,0x01,0xa9,0x04, 0x04,0x04,0xb7,0x05,0x05,0x05,0xbe,0x05,0x05,0x05,0xc1,0x05,0x05,0x05,0xc2,0x06, 0x05,0x06,0xc2,0x06,0x05,0x06,0xc2,0x06,0x05,0x06,0xc2,0x07,0x06,0x07,0xc2,0x06, 0x05,0x06,0xc3,0x05,0x03,0x05,0xc4,0x05,0x04,0x05,0xc5,0x06,0x05,0x06,0xc9,0x07, 0x06,0x07,0xcd,0x05,0x04,0x05,0xd3,0x15,0x12,0x15,0xd9,0x1a,0x15,0x1a,0xde,0x18, 0x14,0x18,0xe1,0x18,0x14,0x18,0xe1,0x17,0x13,0x17,0xe1,0x18,0x14,0x18,0xdf,0x14, 0x11,0x14,0xdb,0x09,0x07,0x09,0xd5,0x03,0x02,0x03,0xc9,0x00,0x00,0x00,0xba,0x00, 0x00,0x00,0xa5,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x47,0x00, 0x00,0x00,0x2b,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x05,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x07,0x00, 0x00,0x00,0x08,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x04,0x00, 0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x04,0x00, 0x00,0x00,0x08,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x21,0x00, 0x00,0x00,0x2b,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x32,0x00, 0x00,0x00,0x2e,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1c,0x00, 0x00,0x00,0x17,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0b,0x00, 0x00,0x00,0x09,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00, 0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x07,0x00, 0x00,0x00,0x09,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x0a,0x00, 0x00,0x00,0x0a,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x05,0x00, 0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x05,0x00, 0x00,0x00,0x07,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x0a,0x00, 0x00,0x00,0x0a,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x13,0x00, 0x00,0x00,0x1b,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x43,0x00, 0x00,0x00,0x50,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x56,0x00, 0x00,0x00,0x53,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x64,0x00, 0x00,0x00,0x72,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0xa3,0x00, 0x00,0x00,0xaf,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0xbd,0x00, 0x00,0x00,0xb9,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x8c,0x00, 0x00,0x00,0x74,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x3b,0x00, 0x00,0x00,0x30,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x1a,0x00, 0x00,0x00,0x16,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0c,0x00, 0x00,0x00,0x0b,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x0a,0x00, 0x00,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x10,0x00, 0x00,0x00,0x1a,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x75,0x00, 0x00,0x00,0x9e,0x01,0x01,0x01,0xc1,0x17,0x13,0x13,0xd7,0x22,0x1c,0x1c,0xe4,0x0f, 0x0d,0x0d,0xe7,0x1c,0x17,0x17,0xe4,0x35,0x2c,0x2c,0xe0,0x0c,0x09,0x0a,0xd8,0x00, 0x00,0x00,0xce,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0x9e,0x00, 0x00,0x00,0x89,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x3f,0x00, 0x00,0x00,0x28,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x0c,0x00, 0x00,0x00,0x0a,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x05,0x00, 0x00,0x00,0x04,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00, 0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00, 0x00,0x00,0x04,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x08,0x00, 0x00,0x00,0x09,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x0a,0x00, 0x00,0x00,0x0a,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x0a,0x00, 0x00,0x00,0x0a,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x0a,0x00, 0x00,0x00,0x0a,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x0a,0x00, 0x00,0x00,0x0a,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00, 0x00,0x00,0x0d,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x1d,0x00, 0x00,0x00,0x24,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x2c,0x00, 0x00,0x00,0x29,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x1c,0x00, 0x00,0x00,0x1a,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x13,0x00, 0x00,0x00,0x10,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0a,0x00, 0x00,0x00,0x09,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0d,0x00, 0x00,0x00,0x10,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x00, 0x00,0x00,0x15,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0a,0x00, 0x00,0x00,0x07,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00, 0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00, 0x00,0x00,0x02,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00, 0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x0a,0x00, 0x00,0x00,0x13,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x50,0x00, 0x00,0x00,0x67,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x8e,0x00, 0x00,0x00,0x91,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x92,0x00, 0x00,0x00,0x92,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x93,0x00, 0x00,0x00,0x96,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0xaa,0x00, 0x00,0x00,0xb2,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0xbe,0x00, 0x00,0x00,0xbe,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0xac,0x00, 0x00,0x00,0xa0,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x61,0x00, 0x00,0x00,0x47,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x0d,0x00, 0x00,0x00,0x05,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x02,0x00, 0x00,0x00,0x02,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x06,0x00, 0x00,0x00,0x09,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x15,0x00, 0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x11,0x00, 0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00, 0x00,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x03,0x00, 0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x02,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x02,0x00, 0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x04,0x00, 0x00,0x00,0x04,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x11,0x00, 0x00,0x00,0x1a,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x2c,0x00, 0x00,0x00,0x2d,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x2b,0x00, 0x00,0x00,0x2f,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x52,0x00, 0x00,0x00,0x62,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x86,0x00, 0x00,0x00,0x8a,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x80,0x00, 0x00,0x00,0x72,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x36,0x00, 0x00,0x00,0x27,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x11,0x00, 0x00,0x00,0x0d,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x06,0x00, 0x00,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00, 0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x04,0x00, 0x00,0x00,0x05,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x29,0x00, 0x00,0x00,0x49,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x94,0x02,0x02,0x02,0xb4,0x1f, 0x1a,0x1a,0xc6,0x09,0x07,0x07,0xce,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0xc6,0x00, 0x00,0x00,0xbe,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0x95,0x00, 0x00,0x00,0x83,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,0x47,0x00, 0x00,0x00,0x35,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x0c,0x00, 0x00,0x00,0x07,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x02,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x03,0x00, 0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00, 0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00, 0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00, 0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00, 0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x05,0x00, 0x00,0x00,0x08,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x12,0x00, 0x00,0x00,0x13,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x0f,0x00, 0x00,0x00,0x0c,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x09,0x00, 0x00,0x00,0x08,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x05,0x00, 0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00, 0x00,0x00,0x03,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x06,0x00, 0x00,0x00,0x08,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x06,0x00, 0x00,0x00,0x05,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x11,0x00, 0x00,0x00,0x1e,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x4c,0x00, 0x00,0x00,0x55,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x5d,0x00, 0x00,0x00,0x5e,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x5e,0x00, 0x00,0x00,0x5e,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x67,0x00, 0x00,0x00,0x6e,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x87,0x00, 0x00,0x00,0x8b,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x89,0x00, 0x00,0x00,0x84,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x5f,0x00, 0x00,0x00,0x4d,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x19,0x00, 0x00,0x00,0x0d,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x05,0x00, 0x00,0x00,0x07,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x08,0x00, 0x00,0x00,0x07,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x04,0x00, 0x00,0x00,0x03,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00, 0x00,0x00,0x04,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x0e,0x00, 0x00,0x00,0x11,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x13,0x00, 0x00,0x00,0x12,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x1a,0x00, 0x00,0x00,0x22,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x43,0x00, 0x00,0x00,0x4d,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x57,0x00, 0x00,0x00,0x54,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x37,0x00, 0x00,0x00,0x29,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x0b,0x00, 0x00,0x00,0x08,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x03,0x00, 0x00,0x00,0x02,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x06,0x00, 0x00,0x00,0x0e,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x5c,0x00, 0x00,0x00,0x7c,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0xa7,0x00, 0x00,0x00,0xa3,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x81,0x00, 0x00,0x00,0x73,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x42,0x00, 0x00,0x00,0x33,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x11,0x00, 0x00,0x00,0x08,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x03,0x00, 0x00,0x00,0x05,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00, 0x00,0x00,0x06,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x03,0x00, 0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x02,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x02,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x02,0x00, 0x00,0x00,0x02,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x03,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x17,0x00, 0x00,0x00,0x1f,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x2e,0x00, 0x00,0x00,0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x31,0x00, 0x00,0x00,0x31,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x32,0x00, 0x00,0x00,0x34,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x47,0x00, 0x00,0x00,0x4e,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x58,0x00, 0x00,0x00,0x58,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0x4a,0x00, 0x00,0x00,0x3f,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x1d,0x00, 0x00,0x00,0x14,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x02,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x02,0x00, 0x00,0x00,0x02,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x02,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00, 0x00,0x00,0x03,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x06,0x00, 0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x06,0x00, 0x00,0x00,0x06,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x12,0x00, 0x00,0x00,0x18,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x28,0x00, 0x00,0x00,0x2b,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x26,0x00, 0x00,0x00,0x21,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x0b,0x00, 0x00,0x00,0x07,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x17,0x00, 0x00,0x00,0x2a,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x6a,0x00, 0x00,0x00,0x73,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x65,0x00, 0x00,0x00,0x5a,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x37,0x00, 0x00,0x00,0x2b,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x10,0x00, 0x00,0x00,0x0b,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00, 0x00,0x00,0x02,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00, 0x00,0x00,0x05,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x0f,0x00, 0x00,0x00,0x11,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x14,0x00, 0x00,0x00,0x14,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x14,0x00, 0x00,0x00,0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x18,0x00, 0x00,0x00,0x1c,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x29,0x00, 0x00,0x00,0x2b,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x2a,0x00, 0x00,0x00,0x27,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x17,0x00, 0x00,0x00,0x11,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x05,0x00, 0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x03,0x00, 0x00,0x00,0x04,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x0b,0x00, 0x00,0x00,0x0e,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x11,0x00, 0x00,0x00,0x10,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x0a,0x00, 0x00,0x00,0x07,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00, 0x00,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x26,0x00, 0x00,0x00,0x34,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x43,0x00, 0x00,0x00,0x3e,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x27,0x00, 0x00,0x00,0x20,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x0d,0x00, 0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x02,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x03,0x00, 0x00,0x00,0x04,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x07,0x00, 0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00, 0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x07,0x00, 0x00,0x00,0x08,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x0c,0x00, 0x00,0x00,0x0f,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x11,0x00, 0x00,0x00,0x11,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00, 0x00,0x00,0x0c,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00, 0x00,0x00,0x02,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00, 0x00,0x00,0x03,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x05,0x00, 0x00,0x00,0x05,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x04,0x00, 0x00,0x00,0x04,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x06,0x00, 0x00,0x00,0x0b,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x1e,0x00, 0x00,0x00,0x20,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x18,0x00, 0x00,0x00,0x14,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x09,0x00, 0x00,0x00,0x07,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x02,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x02,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x03,0x00, 0x00,0x00,0x03,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x05,0x00, 0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x05,0x00, 0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x02,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x07,0x00, 0x00,0x00,0x09,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00, 0x00,0x00,0x0b,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x05,0x00, 0x00,0x00,0x04,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x03,0x00, 0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x02,0x00, 0x00,0x00,0x02,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00}; MilkyTracker-1.02.00/src/tracker/LogoSmall.h000066400000000000000000000017151324432207300205430ustar00rootroot00000000000000/* * tracker/LogoSmall.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #ifndef LOGOSMALL__H #define LOGOSMALL__H #include "BasicTypes.h" class LogoSmall { public: static const pp_uint32 width; static const pp_uint32 height; static const pp_uint8 rawData[]; }; #endif MilkyTracker-1.02.00/src/tracker/ModuleEditor.cpp000066400000000000000000001510051324432207300215770ustar00rootroot00000000000000/* * tracker/ModuleEditor.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include #include "ModuleEditor.h" #include "PatternEditor.h" #include "SampleEditor.h" #include "EnvelopeEditor.h" #include "ModuleServices.h" #include "PlayerCriticalSection.h" #include "TrackerConfig.h" #include "PPSystem.h" static const char validCharacters[] = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_!."; #ifndef TRUE #define TRUE 1 #endif #ifndef FALSE #define FALSE 0 #endif // convert string static mp_sint32 convertStr(SYSCHAR* buffer, char* src) { mp_sint32 j = 0; for (mp_sint32 i = 0; i < MP_MAXTEXT; i++) { if (src[i] == '\0') break; bool found = false; for (mp_sint32 k = 0; k < (signed)(sizeof(validCharacters)/sizeof(char))-1; k++) if (src[i] == validCharacters[k]) { found = true; break; } if (found) buffer[j++] = src[i]; } buffer[j] = '\0'; return j; } class ChangesListener : public EditorBase::EditorNotificationListener { private: virtual void editorNotification(EditorBase* sender, EditorBase::EditorNotifications notification) { switch (notification) { case EditorBase::NotificationChanges: { if (sender == moduleEditor.sampleEditor) moduleEditor.finishSamples(); moduleEditor.setChanged(); break; } case EditorBase::NotificationPrepareCritical: moduleEditor.enterCriticalSection(); break; case EditorBase::NotificationUnprepareCritical: moduleEditor.leaveCriticalSection(); break; default: break; } } ModuleEditor& moduleEditor; public: ChangesListener(ModuleEditor& moduleEditor) : moduleEditor(moduleEditor) { } }; ModuleEditor::ModuleEditor() : module(NULL), patternEditor(NULL), sampleEditor(NULL), envelopeEditor(NULL), playerCriticalSection(NULL), changed(false), eSaveType(ModSaveTypeXM), lastRequestedPatternIndex(0), currentOrderIndex(0), currentPatternIndex(0), currentInstrumentIndex(0), currentSampleIndex(0), enumerationIndex(-1) { instruments = new TEditorInstrument[MAX_INSTRUMENTS]; moduleFileName = TrackerConfig::untitledSong; // no extension here adjustExtension(false); module = new XModule(); createNewSong(); changesListener = new ChangesListener(*this); // create pattern editor patternEditor = new PatternEditor(); patternEditor->addNotificationListener(changesListener); reloadCurrentPattern(); // create sample editor sampleEditor = new SampleEditor(); sampleEditor->addNotificationListener(changesListener); reloadSample(0, 0); // create envelope editor envelopeEditor = new EnvelopeEditor(); envelopeEditor->addNotificationListener(changesListener); envelopeEditor->attachEnvelope(NULL, module); moduleServices = new ModuleServices(*module); currentCursorPosition.row = currentCursorPosition.channel = currentCursorPosition.inner = 0; } ModuleEditor::~ModuleEditor() { delete moduleServices; delete sampleEditor; delete patternEditor; delete envelopeEditor; // must be deleted AFTER the editors delete changesListener; delete module; delete[] instruments; } PPSystemString ModuleEditor::getModuleFileNameFull(ModSaveTypes extension/* = ModSaveTypeDefault*/) { PPSystemString s = moduleFileName; PPSystemString s2; if (extension != ModSaveTypeDefault) { ModSaveTypes eOldType = eSaveType; eSaveType = extension; adjustExtension(); eSaveType = eOldType; } s2 = moduleFileName; moduleFileName = s; return s2; } PPSystemString ModuleEditor::getModuleFileName(ModSaveTypes extension/* = ModSaveTypeDefault*/) { PPSystemString s = getModuleFileNameFull(extension); return s.stripPath(); } void ModuleEditor::reloadCurrentPattern() { TXMPattern* pattern = patternEditor->getPattern(); if (pattern && pattern->patternData && pattern->channum == TrackerConfig::numPlayerChannels && module && pattern == &module->phead[getCurrentPatternIndex()]) return; patternEditor->attachPattern(getPattern(getCurrentPatternIndex()), module); } void ModuleEditor::reloadSample(mp_sint32 insIndex, mp_sint32 smpIndex) { sampleEditor->attachSample(getSampleInfo(insIndex, smpIndex), module); } void ModuleEditor::reloadEnvelope(mp_sint32 insIndex, mp_sint32 smpIndex, mp_sint32 type) { envelopeEditor->attachEnvelope(getEnvelope(insIndex, smpIndex, type), module); } void ModuleEditor::enterCriticalSection() { if (playerCriticalSection) playerCriticalSection->enter(); } void ModuleEditor::leaveCriticalSection() { if (playerCriticalSection) playerCriticalSection->leave(); } void ModuleEditor::adjustExtension(bool hasExtension/* = true*/) { if (hasExtension) moduleFileName = moduleFileName.stripExtension(); switch (eSaveType) { case ModSaveTypeXM: moduleFileName.append(".xm"); break; case ModSaveTypeMOD: moduleFileName.append(".mod"); break; default: ASSERT(false); } } void ModuleEditor::convertInstrument(mp_sint32 i) { mp_sint32 j,k; TXMInstrument* ins = &module->instr[i]; instruments[i].instrument = ins; instruments[i].numUsedSamples = 16; for (j = 0; j < 16; j++) instruments[i].usedSamples[j] = i*16+j; // build FT2 compatible note->sample LUT for (j = 0; j < MAX_NOTE; j++) { mp_sword s = ins->snum[j]; // empty entry if (s == -1) { instruments[i].nbu[j] = /*255*/0; ins->snum[j] = i*16; continue; } bool found = false; for (k = 0; k < 16; k++) if (i*16+k == s) { instruments[i].nbu[j] = k; found = true; break; } if (!found) { instruments[i].nbu[j] = /*255*/0; ins->snum[j] = i*16; //exit(1); } } if (ins->samp) { // take default envelope from first sample in instrument mp_sint32 venvIndex = module->smp[i*16].venvnum - 1; if (venvIndex == -1) { for (mp_sint32 e = 0; e < module->header.volenvnum; e++) { bool used = false; for (mp_sint32 s = 0; s < module->header.smpnum; s++) { if (module->smp[s].venvnum - 1 == e) { used = true; break; } } if (!used) { venvIndex = e; break; } } } if (venvIndex == -1) { TEnvelope venv; memset(&venv, 0, sizeof(venv)); venv.type = 0; venv.num = 2; venv.loops = 0; venv.loope = 1; venv.sustain = 0; venv.env[0][0] = 0; venv.env[0][1] = 256; venv.env[1][0] = 32; venv.env[1][1] = 256; module->addVolumeEnvelope(venv); venvIndex = module->numVEnvs - 1; module->header.volenvnum = module->numVEnvs; } instruments[i].volumeEnvelope = venvIndex; // same for panning envelope index mp_sint32 penvIndex = module->smp[i*16].penvnum - 1; if (penvIndex == -1) { for (mp_sint32 e = 0; e < module->header.panenvnum; e++) { bool used = false; for (mp_sint32 s = 0; s < module->header.smpnum; s++) { if (module->smp[s].penvnum - 1 == e) { used = true; break; } } if (!used) { penvIndex = e; break; } } } if (penvIndex == -1) { TEnvelope penv; memset(&penv, 0, sizeof(penv)); penv.type=0; penv.num=2; penv.loops=0; penv.loope=1; penv.sustain = 0; penv.env[0][0]=0; penv.env[0][1]=128; penv.env[1][0]=32; penv.env[1][1]=128; module->addPanningEnvelope(penv); penvIndex = module->numPEnvs - 1; module->header.panenvnum = module->numPEnvs; } instruments[i].panningEnvelope = penvIndex; mp_sint32 s = instruments[i].usedSamples[0]; // take all fadeout/autovibrato settings from first sample in instrument instruments[i].volfade = module->smp[s].volfade >> 1; instruments[i].vibtype = module->smp[s].vibtype; instruments[i].vibrate = module->smp[s].vibrate; instruments[i].vibdepth = module->smp[s].vibdepth >> 1; instruments[i].vibsweep = module->smp[s].vibsweep; } else { for (j = 0; j < MAX_NOTE; j++) ins->snum[j] = i*16; mp_sint32 e; mp_sint32 venvIndex = - 1; for (e = 0; e < module->header.volenvnum; e++) { bool used = false; for (mp_sint32 s = 0; s < module->header.smpnum; s++) { if (module->smp[s].venvnum - 1 == e) { used = true; break; } } if (!used) { venvIndex = e; break; } } if (venvIndex == -1) { TEnvelope venv; memset(&venv, 0, sizeof(venv)); venv.type=0; venv.num=2; venv.loops=0; venv.loope=1; venv.sustain = 0; venv.env[0][0]=0; venv.env[0][1]=256; venv.env[1][0]=32; venv.env[1][1]=256; module->addVolumeEnvelope(venv); venvIndex = module->numVEnvs - 1; module->header.volenvnum = module->numVEnvs; } instruments[i].volumeEnvelope = venvIndex; mp_sint32 penvIndex = - 1; for (e = 0; e < module->header.panenvnum; e++) { bool used = false; for (mp_sint32 s = 0; s < module->header.smpnum; s++) { if (module->smp[s].penvnum - 1 == e) { used = true; break; } } if (!used) { penvIndex = e; break; } } if (penvIndex == -1) { TEnvelope penv; memset(&penv, 0, sizeof(penv)); penv.type=0; penv.num=2; penv.loops=0; penv.loope=1; penv.sustain = 0; penv.env[0][0]=0; penv.env[0][1]=128; penv.env[1][0]=32; penv.env[1][1]=128; module->addPanningEnvelope(penv); penvIndex = module->numPEnvs - 1; module->header.panenvnum = module->numPEnvs; } instruments[i].panningEnvelope = penvIndex; //----------------------------------------------------------- // this will only work if there are 16 sample per instrument //----------------------------------------------------------- for (j = 0; j < 16; j++) { module->smp[i*16+j].venvnum = venvIndex + 1; module->smp[i*16+j].penvnum = penvIndex + 1; // default fade out to cut module->smp[i*16+j].volfade = 0xFFFF; } instruments[i].volfade = 0xFFFF >> 1; instruments[i].vibtype = 0; instruments[i].vibrate = 0; instruments[i].vibdepth = 0; instruments[i].vibsweep = 0; } for (j = 0; j < 16; j++) { if (!module->smp[i*16+j].sample) { module->smp[i*16+j].vol = 0xFF; module->smp[i*16+j].pan = 0x80; } } } void ModuleEditor::buildInstrumentTable() { mp_sint32 i,j; for (i = 0; i < MAX_INSTRUMENTS; i++) { instruments[i].instrument = NULL; instruments[i].numUsedSamples = 0; for (j = 0; j < 16; j++) instruments[i].usedSamples[j] = -1; instruments[i].volumeEnvelope = instruments[i].panningEnvelope = -1; memset(instruments[i].nbu, 0, MAX_NOTE); } for (i = 0; i < module->header.insnum; i++) { convertInstrument(i); } validateInstruments(); } void ModuleEditor::validateInstruments() { for (mp_sint32 i = 0; i < module->header.insnum; i++) { mp_sint32 lastUsedInstrument = -1; for (mp_sint32 j = 15; j >= 0; j--) { mp_sint32 s = instruments[i].usedSamples[j]; if (module->smp[s].sample) { lastUsedInstrument = j; } module->smp[s].flags = 3; } instruments[i].instrument->samp = 16; } } bool ModuleEditor::allocatePattern(TXMPattern* pattern) { // create empty pattern pattern->channum = (mp_ubyte)/*numChannels*/TrackerConfig::numPlayerChannels; pattern->rows = 64; // create XM style pattern, two effects pattern->effnum = 2; mp_sint32 slotSize = pattern->effnum * 2 + 2; mp_sint32 patternSize = slotSize * pattern->channum * pattern->rows; pattern->patternData = new mp_ubyte[patternSize]; if (pattern->patternData == NULL) return false; memset(pattern->patternData, 0, patternSize); return true; } void ModuleEditor::createEmptySong(bool clearPatterns/* = true*/, bool clearInstruments/* = true*/, mp_sint32 numChannels/* = 8*/) { if (module) { enterCriticalSection(); setCurrentOrderIndex(0); setCurrentPatternIndex(0); module->createEmptySong(clearPatterns, clearInstruments, numChannels); if (clearPatterns && clearInstruments) { changed = false; eSaveType = ModSaveTypeXM; moduleFileName = TrackerConfig::untitledSong; // no extension adjustExtension(false); } else { changed = true; } buildInstrumentTable(); lastRequestedPatternIndex = 0; leaveCriticalSection(); } } bool ModuleEditor::createNewSong(mp_uword numChannels/*= 8*/) { module->createEmptySong(true, true, numChannels); changed = false; eSaveType = ModSaveTypeXM; moduleFileName = TrackerConfig::untitledSong; // no extension adjustExtension(false); buildInstrumentTable(); lastRequestedPatternIndex = 0; return true; } bool ModuleEditor::isEmpty() const { mp_sint32 patNum = module->header.patnum; if (patNum != 1) return false; TXMPattern* pattern = &module->phead[0]; if (pattern->patternData != NULL) { mp_sint32 slotSize = pattern->effnum * 2 + 2; mp_sint32 patternSize = slotSize * pattern->channum * pattern->rows; bool empty = true; for (mp_sint32 j = 0; j < patternSize; j++) if (pattern->patternData[j]) { empty = false; break; } if (!empty) return false; } // step two, find last used instrument mp_sint32 insNum = module->getNumUsedInstruments(); if (insNum) return false; char temp[MAX_TITLETEXT+1]; memset(temp, 0, sizeof(temp)); getTitle(temp, MAX_TITLETEXT); if (strlen(temp)) return true; return true; } bool ModuleEditor::openSong(const SYSCHAR* fileName, const SYSCHAR* preferredFileName/* = NULL*/) { if (!XMFile::exists(fileName)) return false; mp_sint32 nRes = module->loadModule(fileName); // unknown format if (nRes == MP_UNKNOWN_FORMAT) { return false; } bool res = (nRes == MP_OK); XModule::ModuleTypes type = XModule::ModuleType_NONE; if (module->getType() != XModule::ModuleType_XM) { type = module->getType(); mp_ubyte oneShotFlags[MAX_INSTRUMENTS]; // save flags for one shot PT style looping, it will be stripped out // when exporting to XM if (type == XModule::ModuleType_MOD) { memset(oneShotFlags, 0, sizeof(oneShotFlags)); for (mp_sint32 i = 0; i < module->header.insnum; i++) { mp_sint32 snum = module->instr[i].snum[0]; if (snum >= 0) { oneShotFlags[i] = module->smp[snum].type & 32; } } } PPSystemString tempFile(getTempFilename()); try { res = module->saveExtendedModule(tempFile) == MP_OK; if(!res) return res; res = module->loadModule(tempFile) == MP_OK; } catch (const std::bad_alloc &) { return false; } // restore one shot looping flag if (type == XModule::ModuleType_MOD) { for (mp_sint32 i = 0; i < module->header.insnum; i++) { mp_sint32 snum = module->instr[i].snum[0]; if (snum >= 0) { if (oneShotFlags[i]) module->smp[snum].type |= 32; } } } XMFile::remove(tempFile); } if (module->header.channum > TrackerConfig::numPlayerChannels) res = false; lastRequestedPatternIndex = 0; if (res) { changed = false; buildInstrumentTable(); // expand patterns to 32 channels width for (mp_sint32 i = 0; i < module->header.patnum; i++) getPattern(i); PPSystemString strFileName = preferredFileName ? preferredFileName : fileName; moduleFileName = strFileName.stripExtension(); if (type == XModule::ModuleType_MOD) eSaveType = ModSaveTypeMOD; else eSaveType = ModSaveTypeXM; // no extension adjustExtension(false); } else { createNewSong(); } cleanUnusedPatterns(); return res; } bool ModuleEditor::saveSong(const SYSCHAR* fileName, ModSaveTypes saveType/* = eXM*/) { // too risky //cleanUnusedPatterns(); bool res = false; switch (saveType) { case ModSaveTypeDefault: case ModSaveTypeXM: res = module->saveExtendedModule(fileName) == 0; break; case ModSaveTypeMOD: res = module->saveProtrackerModule(fileName) == 0; break; } eSaveType = saveType; moduleFileName = fileName; // has extension adjustExtension(); changed = false; return res; } mp_sint32 ModuleEditor::saveBackup(const SYSCHAR* fileName) { return module->saveExtendedModule(fileName); } void ModuleEditor::increaseSongLength() { if (module->header.ordnum < 255) { module->header.ordnum++; changed = true; } } void ModuleEditor::decreaseSongLength() { if (module->header.ordnum > 1) { module->header.ordnum--; changed = true; } } void ModuleEditor::increaseRepeatPos() { mp_uword old = module->header.restart; if (module->header.restart < 255) module->header.restart++; if (module->header.restart >= module->header.ordnum) module->header.restart = module->header.ordnum - 1; if (old != module->header.restart) changed = true; } void ModuleEditor::decreaseRepeatPos() { if (module->header.restart > 0) { module->header.restart--; changed = true; } } bool ModuleEditor::insertNewOrderPosition(mp_sint32 index) { if (module->header.ordnum >= 255) return false; mp_ubyte temp[256]; mp_sint32 i; for (i = 0; i <= index; i++) temp[i] = module->header.ord[i]; temp[index+1] = module->header.ord[index]; for (i = index+2; i <= module->header.ordnum; i++) temp[i] = module->header.ord[i-1]; module->header.ordnum++; memcpy(module->header.ord, temp, module->header.ordnum); changed = true; return true; } void ModuleEditor::deleteOrderPosition(mp_sint32 index) { if (index < module->header.ordnum && module->header.ordnum > 1) { for (mp_sint32 i = index; i < module->header.ordnum - 1; i++) module->header.ord[i] = module->header.ord[i+1]; module->header.ordnum--; changed = true; } } bool ModuleEditor::seqCurrentOrderPosition(mp_sint32 index, bool clone/* = false*/) { mp_sint32 i; if (module->header.ordnum >= 255) return false; pp_int32 srcPatternIndex = module->header.ord[index]; mp_sint32 highestPattern = module->header.ord[0]; for (i = 1; i < module->header.ordnum; i++) if (module->header.ord[i] > highestPattern) highestPattern = module->header.ord[i]; mp_ubyte temp[256]; for (i = 0; i <= index; i++) temp[i] = module->header.ord[i]; temp[index+1] = /*module->header.ord[index] + 1*/highestPattern+1; pp_int32 dstPatternIndex = highestPattern+1; for (i = index+2; i <= module->header.ordnum; i++) temp[i] = module->header.ord[i-1]; module->header.ordnum++; memcpy(module->header.ord, temp, module->header.ordnum); if (clone) { // now clone pattern module->phead[dstPatternIndex] = module->phead[srcPatternIndex]; } changed = true; return true; } mp_sint32 ModuleEditor::getOrderPosition(mp_sint32 index) const { return module->header.ord[index]; } void ModuleEditor::increaseOrderPosition(mp_sint32 index) { if (module->header.ord[index] < 255) { module->header.ord[index]++; changed = true; } } void ModuleEditor::decreaseOrderPosition(mp_sint32 index) { if (module->header.ord[index] > 0) { module->header.ord[index]--; changed = true; } } bool ModuleEditor::isEditingOrderPosition(mp_sint32 index) const { if (index < 0 || index >= module->header.ordnum) return false; return patternEditor->getPattern() == &module->phead[module->header.ord[index]]; } void ModuleEditor::cleanUnusedPatterns() { if (!module) return; for (mp_sint32 i = module->header.patnum - 1; i > lastRequestedPatternIndex; i--) { TXMPattern* pattern = &module->phead[i]; if (pattern->patternData == NULL) continue; mp_sint32 slotSize = pattern->effnum * 2 + 2; mp_sint32 patternSize = slotSize * pattern->channum * pattern->rows; bool empty = true; for (mp_sint32 j = 0; j < patternSize; j++) if (pattern->patternData[j]) { empty = false; break; } if (empty) { bool found = false; for (mp_sint32 j = 0; j < module->header.ordnum; j++) if (module->header.ord[j] == i) { found = true; break; } if (found) break; delete[] pattern->patternData; memset(pattern, 0, sizeof(TXMPattern)); module->header.patnum = i; } else { break; } } } /////////////////////////////////////////////////////////////////////////// // Whenever a pattern is requested we will return a pattern that is // 32 channels wide, this makes adding/subtracting channels easier // without losing data in that channel // When another pattern pattern is selected we will discard unused channels /////////////////////////////////////////////////////////////////////////// TXMPattern* ModuleEditor::getPattern(mp_sint32 index, bool cleanUnusedPatterns/* = true*/) { lastRequestedPatternIndex = index; // handle with care, this might throw away patterns while the player // is using them if (cleanUnusedPatterns) this->cleanUnusedPatterns(); // get requested pattern, allocate one if it's empty TXMPattern* pattern = &module->phead[index]; if (pattern->patternData == NULL) { bool res = allocatePattern(pattern); if (!res) return NULL; } // if the number of channels in this pattern is // smaller then 32 we resize to 32 channels if (pattern->channum < TrackerConfig::numPlayerChannels) { mp_sint32 slotSize = pattern->effnum * 2 + 2; mp_sint32 patternSize = slotSize * TrackerConfig::numPlayerChannels * pattern->rows; mp_ubyte* newPatternData = new mp_ubyte[patternSize]; memset(newPatternData, 0, patternSize); for (mp_sint32 i = 0; i < pattern->rows; i++) { mp_sint32 srcOffset = i * slotSize * pattern->channum; mp_sint32 dstOffset = i * slotSize * TrackerConfig::numPlayerChannels; for (mp_sint32 j = 0; j < slotSize * pattern->channum; j++) newPatternData[dstOffset++] = pattern->patternData[srcOffset++]; } delete[] pattern->patternData; pattern->patternData = newPatternData; pattern->channum = (mp_ubyte)TrackerConfig::numPlayerChannels; } // update number of patterns in module header if necessary if (module->header.patnum < index + 1) module->header.patnum = index + 1; return pattern; } #if 0 mp_sint32 ModuleEditor::allocateSample(mp_sint32 index) { if (index < 0) return -1; if (index >= module->header.insnum) return -1; // sorry, XM can only handle 16 samples per instrument if (instruments[index].numUsedSamples >= 16) return -1; // look if we can find an unused sample mp_sint32 s = -1; for (mp_sint32 i = 0; i < module->header.smpnum; i++) { bool used = false; //if (module->smp[i].sample == NULL && module->smp[i].samplen == 0) //{ for (mp_sint32 j = 0; j < module->header.insnum; j++) { for (mp_sint32 k = 0; k < instruments[j].numUsedSamples; k++) { if (instruments[j].usedSamples[k] == i) { used = true; break; } } if (used) break; } //} //else // used = true; if (!used) { s = i; break; } } if (s == -1) { if (module->header.smpnum >= 254) return -2; s = module->header.smpnum++; } if (module->smp[s].sample) { module->freeSampleMem((mp_ubyte*)module->smp[s].sample); module->smp[s].sample = NULL; } if (!instruments[index].numUsedSamples) { for (mp_sint32 i = 0; i < MAX_NOTE; i++) { module->instr[index].snum[i] = s; instruments[index].nbu[i] = 0; } } strcpy((char*)module->smp[s].name,""); module->smp[s].venvnum = instruments[index].volumeEnvelope + 1; module->smp[s].penvnum = instruments[index].panningEnvelope + 1; instruments[index].usedSamples[instruments[index].numUsedSamples++] = s; return 0; } #endif void ModuleEditor::finishSamples() { module->postProcessSamples(); } mp_sint32 ModuleEditor::allocateInstrument() { if (module->header.insnum >= 255) return -1; enterCriticalSection(); mp_sint32 i = module->header.insnum++; module->header.smpnum+=16; convertInstrument(i); validateInstruments(); leaveCriticalSection(); changed = true; return 0; } // free sample void ModuleEditor::freeSample(mp_sint32 index) { return; if (index < 0) return; if (index >= module->header.insnum) return; if (instruments[index].numUsedSamples) { instruments[index].usedSamples[--instruments[index].numUsedSamples] = -1; mp_sint32 i; mp_ubyte* nbu = instruments[index].nbu; for (i = 0; i < MAX_NOTE; i++) if (nbu[i] == instruments[index].numUsedSamples) nbu[i] = 255; for (i = 0; i < MAX_NOTE; i++) { if (nbu[i] != 255) module->instr[index].snum[i] = instruments[index].usedSamples[nbu[i]]; else module->instr[index].snum[i] = 255; } } } void ModuleEditor::clearSample(mp_sint32 smpIndex) { if (smpIndex >= 0 && smpIndex < MP_MAXSAMPLES) { TXMSample* dst = &module->smp[smpIndex]; module->freeSampleMem((mp_ubyte*)dst->sample); dst->sample = NULL; dst->samplen = 0; dst->loopstart = 0; dst->looplen = 0; changed = true; } } void ModuleEditor::clearSample(mp_sint32 insIndex, mp_sint32 smpIndex) { if (insIndex < module->header.insnum && smpIndex < 16) { mp_sint32 s = instruments[insIndex].usedSamples[smpIndex]; clearSample(s); } } bool ModuleEditor::loadSample(const SYSCHAR* fileName, mp_sint32 insIndex, mp_sint32 smpIndex, mp_sint32 channelIndex, const SYSCHAR* preferredFileName/* = NULL*/) { PPSystemString sysPreferredName(preferredFileName ? preferredFileName : fileName); sysPreferredName = sysPreferredName.stripPath(); char* preferredNameASCIIZ = sysPreferredName.toASCIIZ(); PPString preferredName(preferredNameASCIIZ); delete[] preferredNameASCIIZ; SampleLoaderGeneric sampleLoader(fileName, *module); sampleLoader.setPreferredDefaultName(preferredName); if (insIndex < module->header.insnum && smpIndex < 16) { enterCriticalSection(); bool res = sampleLoader.loadSample(instruments[insIndex].usedSamples[smpIndex], channelIndex) == 0; if (res) { TXMSample* dst = &module->smp[instruments[insIndex].usedSamples[smpIndex]]; ASSERT(dst); // default values first dst->flags = 3; dst->venvnum = instruments[insIndex].volumeEnvelope+1; dst->penvnum = instruments[insIndex].panningEnvelope+1; dst->fenvnum = dst->vibenvnum = 0; dst->vibtype = instruments[insIndex].vibtype; dst->vibsweep = instruments[insIndex].vibsweep; dst->vibdepth = instruments[insIndex].vibdepth << 1; dst->vibrate = instruments[insIndex].vibrate; dst->volfade = instruments[insIndex].volfade << 1; finishSamples(); validateInstruments(); changed = true; } leaveCriticalSection(); return res; } return false; } mp_sint32 ModuleEditor::getNumSampleChannels(const SYSCHAR* fileName) { SampleLoaderGeneric sampleLoader(fileName, *module); return sampleLoader.getNumChannels(); } // get name of channel in sample as returned by sample loader const char* ModuleEditor::getNameOfSampleChannel(const SYSCHAR* fileName, mp_sint32 index) { SampleLoaderGeneric sampleLoader(fileName, *module); return sampleLoader.getChannelName(index); } bool ModuleEditor::saveSample(const SYSCHAR* fileName, mp_sint32 insIndex, mp_sint32 smpIndex, SampleFormatTypes format) { SampleLoaderGeneric sampleLoader(fileName, *module); if (insIndex < module->header.insnum && smpIndex < 16) { bool res = false; switch (format) { case SampleFormatTypeWAV: res = sampleLoader.saveSample(fileName, instruments[insIndex].usedSamples[smpIndex], SampleLoaderGeneric::OutputFiletypeWAV) == 0; break; case SampleFormatTypeIFF: res = sampleLoader.saveSample(fileName, instruments[insIndex].usedSamples[smpIndex], SampleLoaderGeneric::OutputFiletypeIFF) == 0; break; } return res; } return false; } const PPSystemString& ModuleEditor::getSampleFileName(mp_sint32 insIndex, mp_sint32 smpIndex) { SYSCHAR buffer[MP_MAXTEXT+1]; memset(buffer, 0, sizeof(buffer)); TXMSample* smp = getSampleInfo(insIndex,smpIndex); mp_sint32 len = convertStr(buffer, smp->name); if (!len) sampleFileName = getInstrumentFileName(insIndex); else { sampleFileName = buffer; sampleFileName = sampleFileName.stripExtension(); } return sampleFileName; } // free last instrument void ModuleEditor::freeInstrument() { if (module->header.insnum <= 1) return; enterCriticalSection(); for (mp_sint32 j = 0; j < 16; j++) instruments[module->header.insnum].usedSamples[j] = -1; instruments[module->header.insnum].volumeEnvelope = -1; instruments[module->header.insnum].panningEnvelope = -1; memset(instruments[module->header.insnum].nbu, 0, MAX_NOTE); module->header.insnum--; module->header.smpnum-=16; leaveCriticalSection(); changed = true; } bool ModuleEditor::insertXIInstrument(mp_sint32 index, const XIInstrument* ins) { ASSERT(index < module->header.insnum); mp_sint32 j; ASSERT(instruments[index].numUsedSamples == 16); memcpy(instruments[index].nbu, ins->nbu, MAX_NOTE); for (j = 0; j < MAX_NOTE; j++) instruments[index].instrument->snum[j] = index*16 + ins->nbu[j]; memcpy(instruments[index].instrument->name, ins->name, MAX_INSTEXT); instruments[index].instrument->samp = ins->numsamples; memcpy(&module->venvs[instruments[index].volumeEnvelope], &ins->venv, sizeof(ins->venv)); memcpy(&module->penvs[instruments[index].panningEnvelope], &ins->penv, sizeof(ins->penv)); instruments[index].volfade = ins->volfade>>1; instruments[index].vibtype = ins->vibtype; instruments[index].vibrate = ins->vibrate; instruments[index].vibdepth = ins->vibdepth>>1; instruments[index].vibsweep = ins->vibsweep; // Wipe samples first for (j = 0; j < 16; j++) { mp_sint32 s = instruments[index].usedSamples[j]; TXMSample* smp = &module->smp[s]; if (smp->sample) { module->freeSampleMem((mp_ubyte*)smp->sample); smp->sample = NULL; } smp->vol = 255; smp->pan = 0x80; smp->finetune = 0; smp->relnote = 0; smp->looplen = smp->loopstart = smp->samplen = 0; smp->flags = smp->type = 0; memset(smp->name, 0, sizeof(smp->name)); } for (j = 0; j < ins->numsamples; j++) { mp_sint32 s = instruments[index].usedSamples[j]; // 16 bit samples if (ins->samples[j].samplen && ins->samples[j].sample) { if (ins->samples[j].type & 16) { module->smp[s].sample = (mp_sbyte*)module->allocSampleMem(ins->samples[j].samplen*2); if (module->smp[s].sample == NULL) return false; TXMSample::copyPaddedMem(module->smp[s].sample, ins->samples[j].sample, ins->samples[j].samplen*2); } else { module->smp[s].sample = (mp_sbyte*)module->allocSampleMem(ins->samples[j].samplen); if (module->smp[s].sample == NULL) return false; TXMSample::copyPaddedMem(module->smp[s].sample, ins->samples[j].sample, ins->samples[j].samplen); } } const TXMSample* src = &ins->samples[j]; TXMSample* dst = &module->smp[s]; // default values first dst->flags = 3; dst->venvnum = instruments[index].volumeEnvelope+1; dst->penvnum = instruments[index].panningEnvelope+1; dst->fenvnum = dst->vibenvnum = 0; // copy from original instrument dst->samplen = src->samplen; dst->loopstart = src->loopstart; dst->looplen = src->looplen; dst->vol = src->vol; dst->finetune = src->finetune; dst->type = src->type; dst->pan = src->pan; dst->relnote = src->relnote; dst->vibtype = src->vibtype; dst->vibsweep = src->vibsweep; dst->vibdepth = src->vibdepth; dst->vibrate = src->vibrate; dst->volfade = src->volfade; memcpy(dst->name, src->name, sizeof(dst->name)); } changed = true; return true; } XIInstrument* ModuleEditor::extractXIInstrument(mp_sint32 index) { ASSERT(index < module->header.insnum); XIInstrument* ins = new XIInstrument(); if (ins == NULL) return NULL; mp_sint32 j; ASSERT(instruments[index].numUsedSamples == 16); memcpy(ins->nbu, instruments[index].nbu, MAX_NOTE); memcpy(ins->name, instruments[index].instrument->name, MAX_INSTEXT); ins->numsamples = 16; memcpy(&ins->venv, &module->venvs[instruments[index].volumeEnvelope], sizeof(ins->venv)); memcpy(&ins->penv, &module->penvs[instruments[index].panningEnvelope], sizeof(ins->penv)); ins->volfade = instruments[index].volfade<<1; ins->vibtype = instruments[index].vibtype; ins->vibrate = instruments[index].vibrate; ins->vibdepth = instruments[index].vibdepth<<1; ins->vibsweep = instruments[index].vibsweep; for (j = 0; j < ins->numsamples; j++) { mp_sint32 s = instruments[index].usedSamples[j]; TXMSample* dst = &ins->samples[j]; TXMSample* src = &module->smp[s]; // default values first dst->flags = 3; dst->venvnum = instruments[index].volumeEnvelope+1; dst->penvnum = instruments[index].panningEnvelope+1; dst->fenvnum = dst->vibenvnum = 0; // copy from original instrument dst->samplen = src->samplen; dst->loopstart = src->loopstart; dst->looplen = src->looplen; dst->vol = src->vol; dst->finetune = src->finetune; dst->type = src->type; dst->pan = src->pan; dst->relnote = src->relnote; dst->sample = src->sample; dst->vibtype = src->vibtype; dst->vibsweep = src->vibsweep; dst->vibdepth = src->vibdepth; dst->vibrate = src->vibrate; dst->volfade = src->volfade; memcpy(dst->name, src->name, sizeof(dst->name)); } return ins; } bool ModuleEditor::loadInstrument(const SYSCHAR* fileName, mp_sint32 index) { ASSERT(index < module->header.insnum); XIInstrument* ins = new XIInstrument(); bool res = ins->load(fileName) == 0; if (res) { res = insertXIInstrument(index, ins); finishSamples(); validateInstruments(); } delete ins; return res; } bool ModuleEditor::saveInstrument(const SYSCHAR* fileName, mp_sint32 index) { ASSERT(index < module->header.insnum); XIInstrument* ins = extractXIInstrument(index); bool res = true; if (ins) { ins->save(fileName); } return res; } bool ModuleEditor::zapInstrument(mp_sint32 index) { ASSERT(index < module->header.insnum); enterCriticalSection(); XIInstrument ins; bool res = insertXIInstrument(index, &ins); finishSamples(); validateInstruments(); leaveCriticalSection(); changed = true; return res; } const PPSystemString& ModuleEditor::getInstrumentFileName(mp_sint32 index) { SYSCHAR buffer[MP_MAXTEXT+1]; memset(buffer, 0, sizeof(buffer)); TEditorInstrument* ins = getInstrumentInfo(index); mp_sint32 len = convertStr(buffer, ins->instrument->name); if (!len) instrumentFileName = "Untitled"; else { instrumentFileName = buffer; instrumentFileName = instrumentFileName.stripExtension(); } return instrumentFileName; } bool ModuleEditor::copyInstrument(ModuleEditor& dstModule, mp_sint32 dstIndex, ModuleEditor& srcModule, mp_sint32 srcIndex) { ASSERT(srcIndex < srcModule.module->header.insnum); ASSERT(dstIndex < dstModule.module->header.insnum); XIInstrument* srcIns = srcModule.extractXIInstrument(srcIndex); if (!srcIns) return false; XIInstrument* dstIns = new XIInstrument(*srcIns); if (!dstIns) { delete srcIns; return false; } dstModule.enterCriticalSection(); bool res = dstModule.insertXIInstrument(dstIndex, dstIns); if (res) { dstModule.finishSamples(); dstModule.validateInstruments(); } delete dstIns; delete srcIns; dstModule.leaveCriticalSection(); return res; } bool ModuleEditor::swapInstruments(ModuleEditor& dstModule, mp_sint32 dstIndex, ModuleEditor& srcModule, mp_sint32 srcIndex) { ASSERT(srcIndex < srcModule.module->header.insnum); ASSERT(dstIndex < dstModule.module->header.insnum); XIInstrument* srcIns = srcModule.extractXIInstrument(srcIndex); if (!srcIns) return false; XIInstrument* dstIns = dstModule.extractXIInstrument(dstIndex); if (!dstIns) { delete srcIns; return false; } XIInstrument* swapSrc = new XIInstrument(*srcIns); if (!swapSrc) { delete dstIns; delete srcIns; return false; } XIInstrument* swapDst = new XIInstrument(*dstIns); if (!swapDst) { delete swapSrc; delete dstIns; delete srcIns; return false; } delete dstIns; delete srcIns; if (&dstModule == &srcModule) { dstModule.enterCriticalSection(); } else { srcModule.enterCriticalSection(); dstModule.enterCriticalSection(); } bool res = dstModule.insertXIInstrument(dstIndex, swapSrc); res = srcModule.insertXIInstrument(srcIndex, swapDst) && res; if (res) { srcModule.finishSamples(); srcModule.validateInstruments(); dstModule.finishSamples(); dstModule.validateInstruments(); } delete swapDst; delete swapSrc; if (&dstModule == &srcModule) { dstModule.leaveCriticalSection(); } else { dstModule.leaveCriticalSection(); srcModule.leaveCriticalSection(); } return res; } bool ModuleEditor::copySample(ModuleEditor& dstModule, mp_sint32 dstInsIndex, mp_sint32 dstIndex, ModuleEditor& srcModule, mp_sint32 srcInsIndex, mp_sint32 srcIndex) { ASSERT(srcInsIndex < srcModule.module->header.insnum); ASSERT(dstInsIndex < dstModule.module->header.insnum); ASSERT(srcIndex < 16); ASSERT(dstIndex < 16); bool res = true; TXMSample* dstSmp = dstModule.getSampleInfo(dstInsIndex, dstIndex); TXMSample* srcSmp = srcModule.getSampleInfo(srcInsIndex, srcIndex); dstModule.enterCriticalSection(); if (dstSmp->sample && dstSmp->samplen) dstModule.module->freeSampleMem((mp_ubyte*)dstSmp->sample); // assign attributes *dstSmp = *srcSmp; mp_sint32 sampleSize = (srcSmp->samplen * ((srcSmp->type & 16) ? 16:8)) >> 3; if (sampleSize && srcSmp->sample) { dstSmp->sample = (mp_sbyte*)dstModule.module->allocSampleMem(sampleSize); if (dstSmp->sample) { TXMSample::copyPaddedMem(dstSmp->sample, srcSmp->sample, sampleSize); dstModule.finishSamples(); dstModule.validateInstruments(); } else res = false; } dstModule.leaveCriticalSection(); return res; } bool ModuleEditor::swapSamples(ModuleEditor& dstModule, mp_sint32 dstInsIndex, mp_sint32 dstIndex, ModuleEditor& srcModule, mp_sint32 srcInsIndex, mp_sint32 srcIndex) { ASSERT(srcInsIndex < srcModule.module->header.insnum); ASSERT(dstInsIndex < dstModule.module->header.insnum); ASSERT(srcIndex < 16); ASSERT(dstIndex < 16); bool res = true; if (&dstModule == &srcModule) { dstModule.enterCriticalSection(); } else { srcModule.enterCriticalSection(); dstModule.enterCriticalSection(); } TXMSample* dstSmp = dstModule.getSampleInfo(dstInsIndex, dstIndex); TXMSample* srcSmp = srcModule.getSampleInfo(srcInsIndex, srcIndex); TXMSample tmpSmp; srcModule.module->removeSamplePtr((mp_ubyte*)srcSmp->sample); dstModule.module->removeSamplePtr((mp_ubyte*)dstSmp->sample); tmpSmp = *dstSmp; *dstSmp = *srcSmp; *srcSmp = tmpSmp; srcModule.module->insertSamplePtr((mp_ubyte*)srcSmp->sample); dstModule.module->insertSamplePtr((mp_ubyte*)dstSmp->sample); if (&dstModule == &srcModule) { dstModule.leaveCriticalSection(); } else { dstModule.leaveCriticalSection(); srcModule.leaveCriticalSection(); } return res; } void ModuleEditor::setNumChannels(mp_uint32 channels) { if (module->header.channum != channels) changed = true; module->header.channum = channels; } void ModuleEditor::setTitle(const char* name, mp_uint32 length) { insertText(module->header.name, name, length); changed = true; } void ModuleEditor::getTitle(char* name, mp_uint32 length) const { if (length > MAX_TITLETEXT) length = MAX_TITLETEXT; XModule::convertStr(name, (char*)module->header.name, length, false); } void ModuleEditor::setNumOrders(mp_sint32 numOrders) { if (numOrders > 255) numOrders = 255; if (numOrders < 1) numOrders = 1; if (module->header.ordnum != numOrders) changed = true; module->header.ordnum = numOrders; } void ModuleEditor::setFrequency(Frequencies frequency) { // changes are made using the settings panel // do not flag changes here //mp_sint32 old = module->header.freqtab; module->header.freqtab &= ~1; module->header.freqtab |= frequency; //if (old != module->header.freqtab) // changed = true; } void ModuleEditor::setSampleName(mp_sint32 insIndex, mp_sint32 smpIndex, const char* name, mp_uint32 length) { insertText((char*)getSampleInfo(insIndex, smpIndex)->name, name, length); changed = true; } void ModuleEditor::getSampleName(mp_sint32 insIndex, mp_sint32 smpIndex, char* name, mp_uint32 length) const { if (length > MAX_SMPTEXT) length = MAX_SMPTEXT; XModule::convertStr(name, (char*)getSampleInfoInternal(insIndex, smpIndex)->name, length, false); } void ModuleEditor::setCurrentSampleName(const char* name, mp_uint32 length) { if (sampleEditor->getSample() == NULL) return; insertText((char*)sampleEditor->getSample()->name, name, length); changed = true; } TXMSample* ModuleEditor::getFirstSampleInfo() { enumerationIndex = 0; if (enumerationIndex < module->header.smpnum) return &module->smp[enumerationIndex]; else return NULL; } TXMSample* ModuleEditor::getNextSampleInfo() { enumerationIndex++; if (enumerationIndex >= module->header.smpnum) { enumerationIndex = -1; return NULL; } return &module->smp[enumerationIndex]; } void ModuleEditor::setInstrumentName(mp_sint32 insIndex, const char* name, mp_uint32 length) { insertText(module->instr[insIndex].name, name, length); changed = true; } void ModuleEditor::getInstrumentName(mp_sint32 insIndex, char* name, mp_uint32 length) const { if (length > MAX_INSTEXT) length = MAX_INSTEXT; XModule::convertStr(name, module->instr[insIndex].name, length, false); } TEnvelope* ModuleEditor::getEnvelope(mp_sint32 insIndex, mp_sint32 smpIndex, mp_sint32 type) { if (insIndex < 0 || insIndex >= module->header.insnum) return NULL; if (smpIndex < 0 || smpIndex >= instruments[insIndex].numUsedSamples) return NULL; TXMSample* smp = getSampleInfo(insIndex,smpIndex); // no envelopes available, assign some if (smp->venvnum == 0) smp->venvnum = instruments[insIndex].volumeEnvelope+1; // no envelope available, assign one if (smp->penvnum == 0) smp->penvnum = instruments[insIndex].panningEnvelope+1; if (type == 0 && smp->venvnum) { return &module->venvs[smp->venvnum-1]; } else if (type == 1 && smp->penvnum) { return &module->penvs[smp->penvnum-1]; } return NULL; } const mp_ubyte* ModuleEditor::getSampleTable(mp_sint32 insIndex) { if (insIndex < 0 || insIndex >= module->header.insnum) return NULL; return instruments[insIndex].nbu; } void ModuleEditor::updateSampleTable(mp_sint32 index, const mp_ubyte* nbu) { if (nbu == NULL) return; if (index < 0 || index >= module->header.insnum) return; // cope with FT2 noterange (= 96) memcpy(instruments[index].nbu, nbu, MAX_NOTE); // update module data for (mp_sint32 i = 0; i < MAX_NOTE; i++) { if (nbu[i] != 255) module->instr[index].snum[i] = instruments[index].usedSamples[nbu[i]]; else module->instr[index].snum[i] = 255; } changed = true; } void ModuleEditor::updateInstrumentData(mp_sint32 index) { if (index < 0) return; if (index >= module->header.insnum) return; for (mp_sint32 i = 0; i < instruments[index].numUsedSamples; i++) { mp_sint32 s = instruments[index].usedSamples[i]; TXMSample* smp = &module->smp[s]; smp->volfade = instruments[index].volfade << 1; if (smp->volfade == 65534) smp->volfade++; smp->vibtype = instruments[index].vibtype; smp->vibrate = instruments[index].vibrate; smp->vibdepth = instruments[index].vibdepth << 1; smp->vibsweep = instruments[index].vibsweep; } changed = true; } pp_int32 ModuleEditor::insRemapSong(pp_int32 oldIns, pp_int32 newIns) { mp_sint32 resCnt = 0; PatternEditorTools patternEditorTools; for (mp_sint32 k = 0; k < module->header.patnum; k++) { patternEditorTools.attachPattern(&module->phead[k]); resCnt+=patternEditorTools.insRemap(oldIns, newIns); } if (resCnt) changed = true; return resCnt; } pp_int32 ModuleEditor::noteTransposeSong(const PatternEditorTools::TransposeParameters& transposeParameters, bool evaluate/* = false*/) { mp_sint32 resCnt = 0; pp_int32 fuckupCnt = 0; PatternEditorTools patternEditorTools; for (mp_sint32 k = 0; k < module->header.patnum; k++) { patternEditorTools.attachPattern(&module->phead[k]); if (evaluate) fuckupCnt+=patternEditorTools.noteTranspose(transposeParameters, evaluate); else resCnt+=patternEditorTools.noteTranspose(transposeParameters, evaluate); } if (!evaluate) { if (resCnt) changed = true; return resCnt; } else return fuckupCnt; } pp_int32 ModuleEditor::panConvertSong(PanConversionTypes type) { mp_sint32 resCnt = 0; for (mp_sint32 k = 0; k < module->header.patnum; k++) { TXMPattern* pattern = &module->phead[k]; if (pattern->patternData == NULL) continue; mp_sint32 slotSize = pattern->effnum * 2 + 2; mp_sint32 rowSizeSrc = slotSize*pattern->channum; for (pp_int32 i = 0; i < pattern->rows; i++) for (pp_int32 j = 0; j < pattern->channum; j++) { mp_ubyte* src = pattern->patternData + i*rowSizeSrc+j*slotSize; switch (type) { case PanConversionTypeConvert_E8x: if (src[4] == 0x38) { src[4] = 0x08; src[5] = (mp_ubyte)XModule::pan15to255(src[5]); resCnt++; } break; case PanConversionTypeConvert_80x: if (src[4] == 0x08) { src[5] = (mp_ubyte)XModule::pan15to255(src[5]); resCnt++; } break; case PanConversionTypeRemove_E8x: if (src[4] == 0x38) { src[4] = src[5] = 0x0; resCnt++; } break; case PanConversionTypeRemove_8xx: if (src[4] == 0x08) { src[4] = src[5] = 0x0; resCnt++; } break; } } } if (resCnt) changed = true; return resCnt; } pp_int32 ModuleEditor::removeUnusedPatterns(bool evaluate) { mp_sint32 result = module->removeUnusedPatterns(evaluate); if (!evaluate && result) { changed = true; if (currentPatternIndex > module->header.patnum - 1) currentPatternIndex = module->header.patnum - 1; } return result; } pp_int32 ModuleEditor::removeUnusedInstruments(bool evaluate, bool remap) { mp_sint32 i,j,k; mp_ubyte* bitMap = new mp_ubyte[MAX_INSTRUMENTS]; memset(bitMap, 0, sizeof(mp_ubyte)*MAX_INSTRUMENTS); for (k = 0; k < module->header.patnum; k++) { TXMPattern* pattern = &module->phead[k]; if (pattern->patternData == NULL) continue; mp_sint32 slotSize = pattern->effnum * 2 + 2; mp_sint32 rowSizeSrc = slotSize*pattern->channum; for (i = 0; i < pattern->rows; i++) for (j = 0; j < pattern->channum; j++) { mp_ubyte* src = pattern->patternData + i*rowSizeSrc+j*slotSize; if (src[1]) { bitMap[src[1]-1] = TRUE; } } } mp_sint32 result = 0; for (i = 0; i < module->header.insnum; i++) { if (!bitMap[i]) { result++; if (!evaluate) zapInstrument(i); } } if (!evaluate) { mp_sint32* insRelocTable = new mp_sint32[MAX_INSTRUMENTS]; for (i = 0, j = 0; i < module->header.insnum; i++) { if (bitMap[i]) { insRelocTable[i] = j++; } } for (i = 0, k = 0; i < module->header.insnum; i++) { if (bitMap[i]) { j = insRelocTable[i]; if (j < i) { XIInstrument* ins = extractXIInstrument(i); insertXIInstrument(j, ins); delete ins; insRemapSong(i+1, j+1); zapInstrument(i); } k++; } } delete[] insRelocTable; // zero number of instruments is not allowed if (k == 0) { result--; k++; } module->header.insnum = k; module->header.smpnum = k*16; } else { if (module->header.insnum - result <= 0) result--; } if (!evaluate && result) changed = true; delete[] bitMap; return result; } pp_int32 ModuleEditor::removeUnusedSamples(bool evaluate) { mp_sint32 i,j,k; mp_ubyte* bitMap = new mp_ubyte[MP_MAXSAMPLES]; memset(bitMap, 0, sizeof(mp_ubyte)*MP_MAXSAMPLES); mp_ubyte* lastIns = new mp_ubyte[module->header.channum]; memset(lastIns, 0, module->header.channum); for (mp_sint32 l = 0; l < module->header.ordnum; l++) { k = module->header.ord[l]; TXMPattern* pattern = &module->phead[k]; if (pattern->patternData == NULL) continue; mp_sint32 slotSize = pattern->effnum * 2 + 2; mp_sint32 rowSizeSrc = slotSize*pattern->channum; for (i = 0; i < pattern->rows; i++) for (j = 0; j < pattern->channum; j++) { mp_ubyte* src = pattern->patternData + i*rowSizeSrc+j*slotSize; if (src[1]) { lastIns[j] = src[1]; #if 0 // just assume, that if an instrument is used // in the pattern, that the first sample of this instrument // is kept even if there isn't any note played with that instrument mp_sint32 insIndex = lastIns[j] - 1; mp_sint32 smpIndex = module->instr[insIndex].snum[0]; if (smpIndex >= 0 && smpIndex < MP_MAXSAMPLES) bitMap[smpIndex] = TRUE; #endif } if (src[0] && src[0] < 120) { if (lastIns[j]) { mp_sint32 insIndex = lastIns[j] - 1; mp_sint32 smpIndex = module->instr[insIndex].snum[src[0]-1]; if (smpIndex >= 0 && smpIndex < MP_MAXSAMPLES) bitMap[smpIndex] = TRUE; } } } } delete[] lastIns; mp_sint32 result = 0; for (i = 0; i < module->header.smpnum; i++) { if (!bitMap[i] && module->smp[i].sample) { result++; if (!evaluate) { clearSample(i); // wipe out sample slot memset(module->smp + i, 0, sizeof(TXMSample)); } } } // relocate samples if (!evaluate) { for (i = 0; i < module->header.insnum; i++) { mp_sint32 smpRelocTable[16]; for (j = 0; j < 16; j++) smpRelocTable[j] = -1; mp_sint32 s = 0; TXMSample* src = module->smp + 16*i; TXMSample* dst = src; for (j = 0; j < 16; j++, src++) { k = i*16+j; if (bitMap[k]) { if (src != dst) { *dst = *src; // wipe out source sample memset(src, 0, sizeof(TXMSample)); } smpRelocTable[j] = s++; dst++; } } // adjust the FT2 style sample->note mapping table TEditorInstrument* ins = instruments + i; for (j = 0; j < MAX_NOTE; j++) if (ins->nbu[j] < 16 && smpRelocTable[ins->nbu[j]] != -1) ins->nbu[j] = smpRelocTable[ins->nbu[j]]; else ins->nbu[j] = 0; // convert back to milkytracker module style mapping for (j = 0; j < MAX_NOTE; j++) module->instr[i].snum[j] = i * 16 + ins->nbu[j]; } } if (!evaluate && result) changed = true; delete[] bitMap; return result; } pp_int32 ModuleEditor::relocateCommands(const PatternEditorTools::RelocateParameters& relocateParameters, bool evaluate) { mp_sint32 result = 0; PatternEditorTools patternEditorTools; for (mp_sint32 k = 0; k < module->header.patnum; k++) { patternEditorTools.attachPattern(&module->phead[k]); result+=patternEditorTools.relocateCommands(relocateParameters, evaluate); } if (!evaluate && result) changed = true; return result; } pp_int32 ModuleEditor::zeroOperands(const PatternEditorTools::OperandOptimizeParameters& optimizeParameters, bool evaluate) { mp_sint32 result = 0; PatternEditorTools patternEditorTools; for (mp_sint32 k = 0; k < module->header.patnum; k++) { patternEditorTools.attachPattern(&module->phead[k]); result+=patternEditorTools.zeroOperands(optimizeParameters, evaluate); } if (!evaluate && result) changed = true; return result; } pp_int32 ModuleEditor::fillOperands(const PatternEditorTools::OperandOptimizeParameters& optimizeParameters, bool evaluate) { mp_sint32 result = 0; PatternEditorTools patternEditorTools; for (mp_sint32 k = 0; k < module->header.patnum; k++) { patternEditorTools.attachPattern(&module->phead[k]); result+=patternEditorTools.fillOperands(optimizeParameters, evaluate); } if (!evaluate && result) changed = true; return result; } void ModuleEditor::optimizeSamples(bool convertTo8Bit, bool minimize, mp_sint32& numConvertedSamples, mp_sint32& numMinimizedSamples, bool evaluate) { TXMSample* oldSmp = sampleEditor->getSample(); TXMSample* smp = getFirstSampleInfo(); sampleEditor->activateUndoStack(false); numConvertedSamples = numMinimizedSamples = 0; while (smp) { sampleEditor->attachSample(smp, module); // check for 16 bit sample if ((smp->type & 16) && smp->sample && smp->samplen && convertTo8Bit) { if (!evaluate) sampleEditor->convertSampleResolution(true); numConvertedSamples++; } if (smp->sample && smp->samplen && smp->isMinimizable() && minimize) { if (!evaluate) sampleEditor->minimizeSample(); numMinimizedSamples++; } smp = getNextSampleInfo(); } sampleEditor->activateUndoStack(true); sampleEditor->attachSample(oldSmp, module); if (!evaluate && (numMinimizedSamples || numConvertedSamples)) changed = true; } void ModuleEditor::insertText(char* dst, const char* src, mp_sint32 max) { char name[MP_MAXTEXT+1]; ASSERT((signed)sizeof(name) >= max && strlen(src) <= sizeof(name)); memset(name, 0, sizeof(name)); memcpy(name, src, (signed)strlen(src) <= max ? strlen(src) : max); memcpy(dst, name, max); } PPSystemString ModuleEditor::getTempFilename() { return PPSystemString(System::getTempFileName()); } MilkyTracker-1.02.00/src/tracker/ModuleEditor.h000066400000000000000000000315011324432207300212420ustar00rootroot00000000000000/* * tracker/ModuleEditor.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #ifndef MODULEDITOR__H #define MODULEDITOR__H #include "MilkyPlay.h" #include "BasicTypes.h" #include "PatternEditorTools.h" #include "SongLengthEstimator.h" class XIInstrument; class PatternEditor; class SampleEditor; class EnvelopeEditor; class ModuleServices; class PlayerCriticalSection; class ModuleEditor { public: enum { // FT2 noterange MAX_NOTE = 96, // FT2 maximum of instruments MAX_INSTRUMENTS = 255, // FT2 maximum of patterns MAX_PATTERNS = 256, // FT2 length of module title MAX_TITLETEXT = 20, // FT2 length of instrument text MAX_INSTEXT = 22, // FT2 length of sample text MAX_SMPTEXT = 22, }; // "proxy" instrument type struct TEditorInstrument { TXMInstrument* instrument; // since TXMInstruments holds only references to the *used* samples // we need another list of samples here in case the user wants to // add a new sample that isn't used yet // fasttracker 2 can only handle 16 samples mp_sint32 numUsedSamples; mp_sint32 usedSamples[16]; // FT2 can only handle 96 notes mp_ubyte nbu[MAX_NOTE]; // fasttracker can only handle envelopes per instrument, // no envelopes per sample // store default envelope here mp_sint32 volumeEnvelope; mp_sint32 panningEnvelope; // default volume fadeout mp_uword volfade; // default autovibrato stuff mp_ubyte vibtype, vibsweep, vibdepth, vibrate; }; enum ModSaveTypes { ModSaveTypeDefault = -1, ModSaveTypeXM, ModSaveTypeMOD }; private: XModule* module; PatternEditor* patternEditor; SampleEditor* sampleEditor; EnvelopeEditor* envelopeEditor; class ChangesListener* changesListener; ModuleServices* moduleServices; PlayerCriticalSection* playerCriticalSection; bool changed; PPSystemString moduleFileName; PPSystemString sampleFileName; PPSystemString instrumentFileName; ModSaveTypes eSaveType; void enterCriticalSection(); void leaveCriticalSection(); void adjustExtension(bool hasExtension = true); TEditorInstrument* instruments; // convert MilkyPlay instrument at index i to our more XM-style instrument void convertInstrument(mp_sint32 i); // create a mapping which helps to treat MilkyPlay style instruments like XM ones void buildInstrumentTable(); // make sure everything is fine void validateInstruments(); // insert an XIInstrument at position index bool insertXIInstrument(mp_sint32 index, const XIInstrument* ins); XIInstrument* extractXIInstrument(mp_sint32 index); bool allocatePattern(TXMPattern* pattern); mp_sint32 lastRequestedPatternIndex; mp_sint32 currentOrderIndex; mp_sint32 currentPatternIndex; mp_sint32 currentInstrumentIndex; mp_sint32 currentSampleIndex; PatternEditorTools::Position currentCursorPosition; pp_int32 enumerationIndex; public: ModuleEditor(); ~ModuleEditor(); XModule* getModule() { return module; } PatternEditor* getPatternEditor() { return patternEditor; } SampleEditor* getSampleEditor() { return sampleEditor; } EnvelopeEditor* getEnvelopeEditor() { return envelopeEditor; } ModuleServices* getModuleServices() { return moduleServices; } void attachPlayerCriticalSection(PlayerCriticalSection* playerCriticalSection) { this->playerCriticalSection = playerCriticalSection; } PPSystemString getModuleFileNameFull(ModSaveTypes extension = ModSaveTypeDefault); PPSystemString getModuleFileName(ModSaveTypes extension = ModSaveTypeDefault); ModSaveTypes getSaveType() const { return eSaveType; } void setCurrentOrderIndex(mp_sint32 index) { currentOrderIndex = index; } mp_sint32 getCurrentOrderIndex() const { return currentOrderIndex; } void setCurrentPatternIndex(mp_sint32 index) { currentPatternIndex = index; } mp_sint32 getCurrentPatternIndex() const { return currentPatternIndex; } void setCurrentInstrumentIndex(mp_sint32 index) { currentInstrumentIndex = index; } mp_sint32 getCurrentInstrumentIndex() const { return currentInstrumentIndex; } void setCurrentSampleIndex(mp_sint32 index) { currentSampleIndex = index; } mp_sint32 getCurrentSampleIndex() const { return currentSampleIndex; } void setCurrentCursorPosition(const PatternEditorTools::Position& currentCursorPosition) { this->currentCursorPosition = currentCursorPosition; } const PatternEditorTools::Position& getCurrentCursorPosition() { return currentCursorPosition; } void setChanged() { changed = true; } bool hasChanged() const { return changed; } void reloadCurrentPattern(); void reloadSample(mp_sint32 insIndex, mp_sint32 smpIndex); void reloadEnvelope(mp_sint32 insIndex, mp_sint32 smpIndex, mp_sint32 type); // --------- Access to module information/module data --------------------------- void setNumChannels(mp_uint32 channels); mp_uint32 getNumChannels() const { return module->header.channum; } void setTitle(const char* name, mp_uint32 length); void getTitle(char* name, mp_uint32 length) const; void setNumOrders(mp_sint32 numOrders); mp_sint32 getNumOrders() const { return module->header.ordnum; } mp_sint32 getNumInstruments() const { return module->header.insnum; } mp_sint32 getNumSamples(mp_sint32 insIndex) const { return instruments[insIndex].numUsedSamples; } enum Frequencies { FrequencyAmiga = 0, FrequencyLinear = 1 }; void setFrequency(Frequencies frequency); Frequencies getFrequency() const { return (Frequencies)(module->header.freqtab & 1); } mp_sint32 getSongBPM() const { return module->header.speed; } mp_sint32 getSongTickSpeed() const { return module->header.tempo; } // Check if song is protracker incompatible // 0 = PTK compatible // 1 = Song contains more than 31 instruments // 2 = Song uses linear frequencies // 3 = Song contains incompatible samples // 4 = Song contains FT2-style instruments // 5 = Incompatible pattern data mp_uint32 getPTIncompatibilityCode() const { return module->isPTCompatible(); } private: TXMSample* getSampleInfoInternal(mp_sint32 insIndex, mp_sint32 smpIndex) const { return &module->smp[instruments[insIndex].usedSamples[smpIndex]]; } public: TXMSample* getSampleInfo(mp_sint32 insIndex, mp_sint32 smpIndex) { return &module->smp[instruments[insIndex].usedSamples[smpIndex]]; } void setSampleName(mp_sint32 insIndex, mp_sint32 smpIndex, const char* name, mp_uint32 length); void getSampleName(mp_sint32 insIndex, mp_sint32 smpIndex, char* name, mp_uint32 length) const; void setCurrentSampleName(const char* name, mp_uint32 length); private: TXMSample* getFirstSampleInfo(); TXMSample* getNextSampleInfo(); public: TEditorInstrument* getInstrumentInfo(mp_sint32 insIndex) { return &instruments[insIndex]; } void setInstrumentName(mp_sint32 insIndex, const char* name, mp_uint32 length); void getInstrumentName(mp_sint32 insIndex, char* name, mp_uint32 length) const; TEnvelope* getEnvelope(mp_sint32 insIndex, mp_sint32 smpIndex, mp_sint32 type); bool createNewSong(mp_uword numChannels = 8); void createEmptySong(bool clearPatterns = true, bool clearInstruments = true, mp_sint32 numChannels = 8); bool isEmpty() const; bool openSong(const SYSCHAR* fileName, const SYSCHAR* preferredFileName = NULL); bool saveSong(const SYSCHAR* fileName, ModSaveTypes saveType = ModSaveTypeXM); mp_sint32 saveBackup(const SYSCHAR* fileName); void increaseSongLength(); void decreaseSongLength(); mp_sint32 getRepeatPos() const { return module->header.restart; } void increaseRepeatPos(); void decreaseRepeatPos(); // insert new position into orderlist bool insertNewOrderPosition(mp_sint32 index); // delete position from orderlist void deleteOrderPosition(mp_sint32 index); // duplicate current position and add one bool seqCurrentOrderPosition(mp_sint32 index, bool clone = false); // get pattern index at order position mp_sint32 getOrderPosition(mp_sint32 index) const; // inrease pattern number in the orderlist void increaseOrderPosition(mp_sint32 index); // decrease pattern number in the orderlist void decreaseOrderPosition(mp_sint32 index); bool isEditingOrderPosition(mp_sint32 index) const; // throw away trailing empty patterns // handle with care, they might be currently playing void cleanUnusedPatterns(); // get pattern, if not allocated yet, allocate one TXMPattern* getPattern(mp_sint32 index, bool cleanUnusedPatterns = false); // allocate new sample within given instrument (obsolete) //mp_sint32 allocateSample(mp_sint32 index); // free last sample within given instrument (obsolete) void freeSample(mp_sint32 index); // deallocate memory used by sample void clearSample(mp_sint32 smpIndex); void clearSample(mp_sint32 insIndex, mp_sint32 smpIndex); // load sample bool loadSample(const SYSCHAR* fileName, mp_sint32 insIndex, mp_sint32 smpIndex, mp_sint32 channelIndex, const SYSCHAR* preferredFileName = NULL); // retrieve number of channels contained in a sample on disk mp_sint32 getNumSampleChannels(const SYSCHAR* fileName); // get name of channel const char* getNameOfSampleChannel(const SYSCHAR* fileName, mp_sint32 index); // save sample enum SampleFormatTypes { SampleFormatTypeWAV, SampleFormatTypeIFF }; bool saveSample(const SYSCHAR* fileName, mp_sint32 insIndex, mp_sint32 smpIndex, SampleFormatTypes format); // create sample filename from sample name information const PPSystemString& getSampleFileName(mp_sint32 insIndex, mp_sint32 smpIndex); // postprocessing of samples, when changes are made void finishSamples(); // allocate one more instrument mp_sint32 allocateInstrument(); // free last instrument void freeInstrument(); // load instrument bool loadInstrument(const SYSCHAR* fileName, mp_sint32 index); // save instrument bool saveInstrument(const SYSCHAR* fileName, mp_sint32 index); // zap (clear) instrument bool zapInstrument(mp_sint32 index); // create instrument filename from instrument name information const PPSystemString& getInstrumentFileName(mp_sint32 index); bool copyInstrument(ModuleEditor& dstModule, mp_sint32 dstIndex, ModuleEditor& srcModule, mp_sint32 srcIndex); bool swapInstruments(ModuleEditor& dstModule, mp_sint32 dstIndex, ModuleEditor& srcModule, mp_sint32 srcIndex); bool copySample(ModuleEditor& dstModule, mp_sint32 dstInsIndex, mp_sint32 dstIndex, ModuleEditor& srcModule, mp_sint32 srcInsIndex, mp_sint32 srcIndex); bool swapSamples(ModuleEditor& dstModule, mp_sint32 dstInsIndex, mp_sint32 dstIndex, ModuleEditor& srcModule, mp_sint32 srcInsIndex, mp_sint32 srcIndex); // get note->sample LUT const mp_ubyte* getSampleTable(mp_sint32 index); // update note->sample LUT void updateSampleTable(mp_sint32 index, const mp_ubyte* nbu); // update instrument autovibrato / volume fadeout stuff void updateInstrumentData(mp_sint32 index); // remap instruments in entire song pp_int32 insRemapSong(pp_int32 oldIns, pp_int32 newIns); // transpose notes in entire song pp_int32 noteTransposeSong(const PatternEditorTools::TransposeParameters& transposeParameters, bool evaluate = false); // panning effect conversion enum PanConversionTypes { PanConversionTypeConvert_E8x, PanConversionTypeConvert_80x, PanConversionTypeRemove_E8x, PanConversionTypeRemove_8xx }; pp_int32 panConvertSong(PanConversionTypes type); // Optimizing features operating on the entire song // -------------------------------------------------------- // remove unused patterns, remapping is always done pp_int32 removeUnusedPatterns(bool evaluate); // remove unused instruments, remapping is optional pp_int32 removeUnusedInstruments(bool evaluate, bool remap); // remove unused samples, no remapping is performed pp_int32 removeUnusedSamples(bool evaluate); pp_int32 relocateCommands(const PatternEditorTools::RelocateParameters& relocateParameters, bool evaluate); pp_int32 zeroOperands(const PatternEditorTools::OperandOptimizeParameters& optimizeParameters, bool evaluate); pp_int32 fillOperands(const PatternEditorTools::OperandOptimizeParameters& optimizeParameters, bool evaluate); void optimizeSamples(bool convertTo8Bit, bool minimize, mp_sint32& numConvertedSamples, mp_sint32& numMinimizedSamples, bool evaluate); public: static void insertText(char* dst, const char* src, mp_sint32 max); static PPSystemString getTempFilename(); friend class ChangesListener; }; #endif MilkyTracker-1.02.00/src/tracker/ModuleServices.cpp000066400000000000000000000146251324432207300221420ustar00rootroot00000000000000/* * tracker/ModuleServices.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * ModuleServices.cpp * MilkyTracker * * Created by Peter Barth on 08.12.07. * */ #include "ModuleServices.h" #include "SongLengthEstimator.h" #include "PlayerGeneric.h" #include "AudioDriver_NULL.h" #include "XModule.h" void ModuleServices::estimateSongLength() { SongLengthEstimator estimator(&module); estimatedSongLength = estimator.estimateSongLengthInSeconds(); } pp_int32 ModuleServices::estimateMixerVolume(WAVWriterParameters& parameters, pp_int32* numSamplesProgressed/* = NULL*/) { PlayerGeneric* player = new PlayerGeneric(parameters.sampleRate); player->setBufferSize(1024); player->setPlayMode((PlayerGeneric::PlayModes)parameters.playMode); player->setResamplerType((ChannelMixer::ResamplerTypes)parameters.resamplerType); player->setSampleShift(parameters.mixerShift); player->setMasterVolume(256); player->setPeakAutoAdjust(true); AudioDriver_NULL* audioDriver = new AudioDriver_NULL; pp_int32 res = player->exportToWAV(NULL, &module, parameters.fromOrder, parameters.toOrder, parameters.muting, module.header.channum, parameters.panning, audioDriver); if (numSamplesProgressed) *numSamplesProgressed = res; delete audioDriver; pp_int32 mixerVolume = player->getMasterVolume(); delete player; return mixerVolume; } pp_int32 ModuleServices::estimateWaveLengthInSamples(WAVWriterParameters& parameters) { PlayerGeneric* player = new PlayerGeneric(parameters.sampleRate); player->setBufferSize(1024); player->setPlayMode((PlayerGeneric::PlayModes)parameters.playMode); player->setResamplerType((ChannelMixer::ResamplerTypes)parameters.resamplerType); player->setSampleShift(parameters.mixerShift); player->setMasterVolume(256); player->setPeakAutoAdjust(false); AudioDriver_NULL* audioDriver = new AudioDriver_NULL; pp_int32 res = player->exportToWAV(NULL, &module, parameters.fromOrder, parameters.toOrder, parameters.muting, module.header.channum, parameters.panning, audioDriver); delete audioDriver; delete player; return res; } pp_int32 ModuleServices::exportToWAV(const PPSystemString& fileName, WAVWriterParameters& parameters) { PlayerGeneric* player = new PlayerGeneric(parameters.sampleRate); player->setBufferSize(1024); player->setPlayMode((PlayerGeneric::PlayModes)parameters.playMode); player->setResamplerType((ChannelMixer::ResamplerTypes)parameters.resamplerType); player->setSampleShift(parameters.mixerShift); player->setMasterVolume(parameters.mixerVolume); pp_int32 res = 0; if (parameters.multiTrack) { mp_ubyte* muting = new mp_ubyte[module.header.channum]; PPSystemString baseName = fileName.stripExtension(); PPSystemString extension = fileName.getExtension(); for (pp_uint32 i = 0; i < module.header.channum; i++) { PPSystemString fileName = baseName; char infix[80]; sprintf(infix, "_%02d", i+1); fileName.append(infix); fileName.append(extension); if (!parameters.muting[i]) { memset(muting, 1, module.header.channum); muting[i] = 0; res = player->exportToWAV(fileName, &module, parameters.fromOrder, parameters.toOrder, muting, module.header.channum, parameters.panning); } } delete[] muting; } else { res = player->exportToWAV(fileName, &module, parameters.fromOrder, parameters.toOrder, parameters.muting, module.header.channum, parameters.panning); } delete player; return res; } class BufferWriter : public AudioDriver_NULL { private: pp_int16* destBuffer; pp_uint32 destBufferSize; bool mono; pp_uint32 index; public: BufferWriter(pp_int16* buffer, pp_uint32 bufferSize, bool mono) : destBuffer(buffer), destBufferSize(bufferSize), mono(mono) { } virtual mp_sint32 initDevice(mp_sint32 bufferSizeInWords, mp_uint32 mixFrequency, MasterMixer* mixer) { mp_sint32 res = AudioDriver_NULL::initDevice(bufferSizeInWords, mixFrequency, mixer); if (res < 0) return res; index = 0; return 0; } virtual mp_sint32 start() { index = 0; return 0; } virtual const char* getDriverID() { return "BufferWriter"; } virtual void advance() { AudioDriver_NULL::advance(); if (mono) { for (pp_int32 i = 0; i < bufferSize / MP_NUMCHANNELS; i++) { pp_int32 res = ((pp_int32)compensateBuffer[i*2] + (pp_int32)compensateBuffer[i*2+1]) >> 1; if (res < -32768) res = -32768; if (res > 32767) res = 32767; if (index < destBufferSize) destBuffer[index] = (pp_int16)res; index++; } } else { for (pp_int32 i = 0; i < bufferSize; i++) { if (index < destBufferSize) destBuffer[index] = compensateBuffer[i]; index++; } } //f->writeWords((mp_uword*)compensateBuffer, bufferSize); } }; pp_int32 ModuleServices::exportToBuffer16Bit(WAVWriterParameters& parameters, pp_int16* buffer, pp_uint32 bufferSize, bool mono) { PlayerGeneric* player = new PlayerGeneric(parameters.sampleRate); player->setBufferSize(1024); player->setPlayMode((PlayerGeneric::PlayModes)parameters.playMode); player->setResamplerType((ChannelMixer::ResamplerTypes)parameters.resamplerType); player->setSampleShift(parameters.mixerShift); player->setMasterVolume(parameters.mixerVolume); BufferWriter* audioDriver = new BufferWriter(buffer, bufferSize, mono); pp_int32 res = player->exportToWAV(NULL, &module, parameters.fromOrder, parameters.toOrder, parameters.muting, module.header.channum, parameters.panning, audioDriver); delete player; return res; } MilkyTracker-1.02.00/src/tracker/ModuleServices.h000066400000000000000000000043231324432207300216010ustar00rootroot00000000000000/* * tracker/ModuleServices.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * ModuleServices.h * MilkyTracker * * Created by Peter Barth on 08.12.07. * */ #ifndef __MODULESERVICES_H__ #define __MODULESERVICES_H__ #include "BasicTypes.h" #include "MilkyPlayCommon.h" class ModuleServices { private: class XModule& module; pp_int32 estimatedSongLength; public: ModuleServices(XModule& module) : module(module), estimatedSongLength(-1) { } void estimateSongLength(); pp_int32 getEstimatedSongLength() const { return estimatedSongLength; } void resetEstimatedSongLength() { estimatedSongLength = -1; } struct WAVWriterParameters { pp_uint32 sampleRate; pp_uint32 resamplerType; pp_uint32 playMode; pp_uint32 mixerShift; pp_uint32 mixerVolume; pp_uint32 fromOrder; pp_uint32 toOrder; const pp_uint8* muting; const pp_uint8* panning; bool multiTrack; WAVWriterParameters() : sampleRate(0), resamplerType(0), playMode(0), mixerShift(0), mixerVolume(0), fromOrder(0), toOrder(0), muting(NULL), panning(NULL), multiTrack(false) { } }; pp_int32 estimateMixerVolume(WAVWriterParameters& parameters, pp_int32* numSamplesProgressed = NULL); pp_int32 estimateWaveLengthInSamples(WAVWriterParameters& parameters); pp_int32 exportToWAV(const PPSystemString& fileName, WAVWriterParameters& parameters); pp_int32 exportToBuffer16Bit(WAVWriterParameters& parameters, pp_int16* buffer, pp_uint32 bufferSize, bool mono = true); }; #endif MilkyTracker-1.02.00/src/tracker/PatternEditor.cpp000066400000000000000000001170271324432207300217750ustar00rootroot00000000000000/* * tracker/PatternEditor.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * PatternEditor.cpp * MilkyTracker * * Created by Peter Barth on 16.11.07. * */ #include "PatternEditor.h" #include "XModule.h" #include "PatternTools.h" #include "SimpleVector.h" void PatternEditor::Selection::backup() { startCopy = start; endCopy = end; copyValid = true; } void PatternEditor::Selection::restore() { start = startCopy; end = endCopy; copyValid = false; } PatternEditor::ClipBoard* PatternEditor::ClipBoard::instances[PatternEditor::ClipBoardTypeLAST] = {NULL, NULL, NULL}; PatternEditor::ClipBoard* PatternEditor::ClipBoard::getInstance(ClipBoardTypes type) { if (instances[type] == NULL) instances[type] = new ClipBoard(); return instances[type]; } void PatternEditor::prepareUndo() { PatternEditorTools patternEditorTools(pattern); patternEditorTools.normalize(); undoUserData.clear(); notifyListener(NotificationFeedUndoData); delete before; before = new PatternUndoStackEntry(*pattern, cursor.channel, cursor.row, cursor.inner, &undoUserData); } bool PatternEditor::finishUndo(LastChanges lastChange, bool nonRepeat/* = false*/) { bool result = false; PatternEditorTools patternEditorTools(pattern); patternEditorTools.normalize(); undoUserData.clear(); notifyListener(NotificationFeedUndoData); PatternUndoStackEntry after(*pattern, cursor.channel, cursor.row, cursor.inner, &undoUserData); if (*before != after) { PatternEditorTools::Position afterPos; afterPos.channel = after.getCursorPositionChannel(); afterPos.row = after.getCursorPositionRow(); afterPos.inner = after.getCursorPositionInner(); PatternEditorTools::Position beforePos; beforePos.channel = before->getCursorPositionChannel(); beforePos.row = before->getCursorPositionRow(); beforePos.inner = before->getCursorPositionInner(); result = true; lastOperationDidChangeRows = after.GetPattern().rows != before->GetPattern().rows; lastOperationDidChangeCursor = beforePos != afterPos; notifyListener(NotificationChanges); if (undoStack) { if (nonRepeat && this->lastChange != lastChange) undoStack->Push(*before); else if (!nonRepeat) undoStack->Push(*before); undoStack->Push(after); undoStack->Pop(); } } this->lastChange = lastChange; return result; } PatternEditor::PatternEditor() : EditorBase(), pattern(NULL), numVisibleChannels(-1), autoResize(false), currentInstrument(1), instrumentEnabled(true), instrumentBackTrace(false), currentOctave(5), before(NULL), undoStack(NULL), lastChange(LastChangeNone) { // Undo history undoHistory = new UndoHistory(UNDOHISTORYSIZE_PATTERNEDITOR); resetCursor(); resetSelection(); memset(effectMacros, 0, sizeof(effectMacros)); } PatternEditor::~PatternEditor() { delete undoHistory; delete undoStack; delete before; } void PatternEditor::attachPattern(TXMPattern* pattern, XModule* module) { if (this->pattern == pattern && this->module == module) return; // --------- update undo history information -------------------- if (undoStack) { // if the undo stack is empty, we don't need to save current undo stack if (!undoStack->IsEmpty() || !undoStack->IsTop()) { undoStack = undoHistory->getUndoStack(pattern, this->pattern, undoStack); } // delete it if it's empty else { delete undoStack; undoStack = NULL; undoStack = undoHistory->getUndoStack(pattern, NULL, NULL); } } attachModule(module); this->pattern = pattern; // couldn't get any from history, create new one if (!undoStack) { undoStack = new PPUndoStack(UNDODEPTH_PATTERNEDITOR); } notifyListener(NotificationReload); } void PatternEditor::reset() { resetSelection(); delete undoHistory; undoHistory = new UndoHistory(UNDOHISTORYSIZE_PATTERNEDITOR); delete undoStack; undoStack = new PPUndoStack(UNDODEPTH_PATTERNEDITOR); } pp_int32 PatternEditor::getNumChannels() const { if (numVisibleChannels >= 0) return numVisibleChannels; if (pattern == NULL) return 0; return pattern->channum; } pp_int32 PatternEditor::getNumRows() const { if (pattern == NULL) return 0; return pattern->rows; } bool PatternEditor::hasValidSelection() { return PatternEditorTools::hasValidSelection(pattern, selection.start, selection.end, getNumChannels()); } void PatternEditor::selectChannel(pp_int32 channel) { if (pattern == NULL) return; selection.start.channel = channel; selection.start.row = 0; selection.start.inner = 0; selection.end.channel = channel; selection.end.row = pattern->rows-1; selection.end.inner = 7; } void PatternEditor::selectAll() { if (pattern == NULL) return; selection.start.channel = 0; selection.start.row = 0; selection.start.inner = 0; selection.end.channel = getNumChannels()-1; selection.end.row = pattern->rows-1; selection.end.inner = 7; } pp_int32 PatternEditor::getCurrentActiveInstrument() { PatternTools patternTools; if (pattern == NULL) return -1; if (pattern->patternData == NULL) return -1; if (!instrumentEnabled) return 0; if (instrumentBackTrace) { for (pp_int32 i = cursor.row; i >= 0; i--) { patternTools.setPosition(pattern, cursor.channel, i); pp_int32 ins = patternTools.getInstrument(); if (ins != 0) { return ins; } } //return -1; } return currentInstrument; } bool PatternEditor::undo() { if (undoStack->IsEmpty()) return false; if (undoStack) return revoke(undoStack->Pop()); return false; } bool PatternEditor::redo() { if (undoStack->IsTop()) return false; if (undoStack) return revoke(undoStack->Advance()); return false; } bool PatternEditor::revoke(const PatternUndoStackEntry* stackEntry) { const TXMPattern& stackPattern = stackEntry->GetPattern(); enterCriticalSection(); bool res = false; if (stackPattern.rows != pattern->rows || stackPattern.channum != pattern->channum || stackPattern.effnum != pattern->effnum) { pattern->rows = stackPattern.rows; pattern->channum = stackPattern.channum; pattern->effnum = stackPattern.effnum; mp_sint32 patternSize = pattern->rows*pattern->channum*(2+pattern->effnum*2); if (pattern->patternData) { delete[] pattern->patternData; pattern->patternData = new mp_ubyte[patternSize]; memset(pattern->patternData, 0, patternSize); } } if (stackPattern.rows == pattern->rows && stackPattern.channum == pattern->channum && stackPattern.effnum == pattern->effnum) { cursor.channel = stackEntry->getCursorPositionChannel(); cursor.row = stackEntry->getCursorPositionRow(); cursor.inner = stackEntry->getCursorPositionInner(); pattern->decompress(stackPattern.patternData, stackPattern.len); // keep over userdata undoUserData = stackEntry->getUserData(); notifyListener(NotificationFetchUndoData); notifyListener(NotificationChanges); res = true; } leaveCriticalSection(); return res; } void PatternEditor::clearRange(const PatternEditorTools::Position& rangeStart, const PatternEditorTools::Position& rangeEnd) { PatternEditorTools patternEditorTools(pattern); patternEditorTools.clearSelection(rangeStart, rangeEnd); } void PatternEditor::clearSelection() { if (pattern == NULL) return; if (pattern->patternData == NULL) return; prepareUndo(); clearRange(selection.start, selection.end); finishUndo(LastChangeDeleteSelection); } void PatternEditor::clearPattern() { if (pattern == NULL) return; if (pattern->patternData == NULL) return; pp_int32 patSize = pattern->channum * (pattern->effnum*2+2) * pattern->rows; memset(pattern->patternData, 0, patSize); } void PatternEditor::cut(ClipBoard& clipBoard) { if (pattern == NULL) return; if (pattern->patternData == NULL) return; prepareUndo(); clipBoard.makeCopy(*pattern, getSelection().start, getSelection().end, true); finishUndo(LastChangeCut); } void PatternEditor::copy(ClipBoard& clipBoard) { clipBoard.makeCopy(*pattern, getSelection().start, getSelection().end); } void PatternEditor::paste(ClipBoard& clipBoard, bool transparent/* = false*/, pp_int32 fromChannel/* = -1*/) { if (pattern == NULL) return; if (pattern->patternData == NULL) return; prepareUndo(); if (autoResize && cursor.row + clipBoard.getNumRows() > pattern->rows) { pp_int32 newLen = cursor.row + clipBoard.getNumRows(); if (newLen > 256) newLen = 256; resizePattern(newLen, false); } if (fromChannel == -1) clipBoard.paste(*pattern, cursor.channel, cursor.row, transparent); else clipBoard.paste(*pattern, fromChannel, cursor.row, transparent); finishUndo(LastChangePaste); } void PatternEditor::cut(ClipBoardTypes clipBoardType) { cut(*ClipBoard::getInstance(clipBoardType)); } void PatternEditor::copy(ClipBoardTypes clipBoardType) { copy(*ClipBoard::getInstance(clipBoardType)); } void PatternEditor::paste(ClipBoardTypes clipBoardType, bool transparent/* = false*/, pp_int32 fromChannel/* = -1*/) { paste(*ClipBoard::getInstance(clipBoardType), transparent, fromChannel); } bool PatternEditor::resizePattern(pp_int32 newRowNum, bool withUndo /*= true*/) { if (newRowNum < 1 || newRowNum > 256) return false; if (pattern == NULL) return false; if (pattern->patternData == NULL) return false; if (newRowNum == pattern->rows) return true; enterCriticalSection(); mp_sint32 slotSize = pattern->effnum * 2 + 2; // allocate half of the space of the current pattern mp_sint32 patternSize = slotSize * pattern->channum * newRowNum; mp_ubyte* newPatternData = new mp_ubyte[patternSize]; memset(newPatternData, 0, patternSize); mp_sint32 numRows = newRowNum < pattern->rows ? newRowNum : pattern->rows; for (mp_sint32 i = 0; i < numRows; i++) { mp_sint32 srcOffset = i * slotSize * pattern->channum; mp_sint32 dstOffset = i * slotSize * pattern->channum; for (mp_sint32 j = 0; j < slotSize * pattern->channum; j++) newPatternData[dstOffset++] = pattern->patternData[srcOffset++]; } if (withUndo) { prepareUndo(); delete[] pattern->patternData; pattern->patternData = newPatternData; pattern->rows = newRowNum; // see if something has changed, if this is the case // save original & changes // Special treatment for pattern resizing: // If user resizes pattern and the last stack entry has already been // a resize modification we don't store the current changes finishUndo(LastChangeResizePattern, true); } else { delete[] pattern->patternData; pattern->patternData = newPatternData; pattern->rows = newRowNum; lastOperationDidChangeRows = true; lastOperationDidChangeCursor = false; notifyListener(NotificationChanges); } leaveCriticalSection(); return true; } bool PatternEditor::expandPattern() { if (pattern == NULL) return false; if (pattern->patternData == NULL) return false; enterCriticalSection(); prepareUndo(); PatternEditorTools patternEditorTools(pattern); bool res = patternEditorTools.expandPattern(); // see if something has changed, if this is the case // save original & changes finishUndo(LastChangeExpandPattern); leaveCriticalSection(); return res; } bool PatternEditor::shrinkPattern() { if (pattern == NULL) return false; if (pattern->patternData == NULL) return false; enterCriticalSection(); prepareUndo(); PatternEditorTools patternEditorTools(pattern); bool res = patternEditorTools.shrinkPattern(); // see if something has changed, if this is the case // save original & changes finishUndo(LastChangeShrinkPattern); leaveCriticalSection(); return res; } bool PatternEditor::loadExtendedPattern(const PPSystemString& fileName) { if (pattern == NULL) return false; if (pattern->patternData == NULL) return false; enterCriticalSection(); prepareUndo(); bool res = pattern->loadExtendedPattern(fileName); // see if something has changed, if this is the case // save original & changes finishUndo(LastChangeLoadXPattern); leaveCriticalSection(); return res; } bool PatternEditor::saveExtendedPattern(const PPSystemString& fileName) { if (pattern == NULL) return false; if (pattern->patternData == NULL) return false; return pattern->saveExtendedPattern(fileName); } bool PatternEditor::loadExtendedTrack(const PPSystemString& fileName) { if (pattern == NULL) return 0; if (pattern->patternData == NULL) return 0; enterCriticalSection(); prepareUndo(); bool res = pattern->loadExtendedTrack(fileName, cursor.channel); // see if something has changed, if this is the case // save original & changes finishUndo(LastChangeLoadXTrack); leaveCriticalSection(); return res; } bool PatternEditor::saveExtendedTrack(const PPSystemString& fileName) { if (pattern == NULL) return false; if (pattern->patternData == NULL) return false; return pattern->saveExtendedTrack(fileName, cursor.channel); } pp_int32 PatternEditor::insRemapTrack(pp_int32 oldIns, pp_int32 newIns) { if (pattern == NULL) return 0; if (pattern->patternData == NULL) return 0; prepareUndo(); PatternEditorTools patternEditorTools(pattern); pp_int32 resCnt = patternEditorTools.insRemapTrack(cursor.channel, oldIns, newIns); finishUndo(LastChangeInsRemapTrack); return resCnt; } pp_int32 PatternEditor::insRemapPattern(pp_int32 oldIns, pp_int32 newIns) { if (pattern == NULL) return 0; if (pattern->patternData == NULL) return 0; prepareUndo(); PatternEditorTools patternEditorTools(pattern); pp_int32 resCnt = patternEditorTools.insRemap(oldIns, newIns); finishUndo(LastChangeInsRemapPattern); return resCnt; } pp_int32 PatternEditor::insIncSelection() { if (pattern == NULL) return 0; if (pattern->patternData == NULL) return 0; prepareUndo(); PatternEditorTools patternEditorTools(pattern); pp_int32 resCnt = patternEditorTools.insIncSelection(getSelection().start, getSelection().end); finishUndo(LastChangeInsIncSelection); return resCnt; } pp_int32 PatternEditor::insDecSelection() { if (pattern == NULL) return 0; if (pattern->patternData == NULL) return 0; prepareUndo(); PatternEditorTools patternEditorTools(pattern); pp_int32 resCnt = patternEditorTools.insDecSelection(getSelection().start, getSelection().end); finishUndo(LastChangeInsDecSelection); return resCnt; } pp_int32 PatternEditor::insIncTrack() { if (pattern == NULL) return 0; if (pattern->patternData == NULL) return 0; prepareUndo(); PatternEditorTools patternEditorTools(pattern); pp_int32 resCnt = patternEditorTools.insIncTrack(getCursor().channel); finishUndo(LastChangeInsIncTrack); return resCnt; } pp_int32 PatternEditor::insDecTrack() { if (pattern == NULL) return 0; if (pattern->patternData == NULL) return 0; prepareUndo(); PatternEditorTools patternEditorTools(pattern); pp_int32 resCnt = patternEditorTools.insDecTrack(getCursor().channel); finishUndo(LastChangeInsDecTrack); return resCnt; } pp_int32 PatternEditor::insRemapSelection(pp_int32 oldIns, pp_int32 newIns) { if (pattern == NULL) return 0; if (pattern->patternData == NULL) return 0; prepareUndo(); PatternEditorTools patternEditorTools(pattern); pp_int32 resCnt = patternEditorTools.insRemapSelection(getSelection().start, getSelection().end, oldIns, newIns); finishUndo(LastChangeInsRemapSelection); return resCnt; } pp_int32 PatternEditor::noteTransposeTrackCore(const PatternEditorTools::TransposeParameters& transposeParameters, bool evaluate) { if (pattern == NULL) return 0; if (pattern->patternData == NULL) return 0; prepareUndo(); pp_int32 resCnt = 0; pp_int32 fuckupCnt = 0; PatternEditorTools patternEditorTools(pattern); if (!evaluate) resCnt = patternEditorTools.noteTransposeTrack(cursor.channel, transposeParameters, evaluate); else fuckupCnt = patternEditorTools.noteTransposeTrack(cursor.channel, transposeParameters, evaluate); finishUndo(LastChangeNoteTransposeTrack); if (!evaluate) return resCnt; else return fuckupCnt; } pp_int32 PatternEditor::noteTransposePatternCore(const PatternEditorTools::TransposeParameters& transposeParameters, bool evaluate) { if (pattern == NULL) return 0; if (pattern->patternData == NULL) return 0; prepareUndo(); PatternEditorTools patternEditorTools(pattern); pp_int32 resCnt = 0; pp_int32 fuckupCnt = 0; if (!evaluate) resCnt = patternEditorTools.noteTranspose(transposeParameters, evaluate); else fuckupCnt = patternEditorTools.noteTranspose(transposeParameters, evaluate); finishUndo(LastChangeNoteTransposePattern); if (!evaluate) return resCnt; else return fuckupCnt; } pp_int32 PatternEditor::noteTransposeSelectionCore(const PatternEditorTools::TransposeParameters& transposeParameters, bool evaluate) { if (pattern == NULL) return 0; if (pattern->patternData == NULL) return 0; pp_int32 resCnt = 0; pp_int32 fuckupCnt = 0; prepareUndo(); PatternEditorTools patternEditorTools(pattern); if (!evaluate) resCnt = patternEditorTools.noteTransposeSelection(getSelection().start, getSelection().end, transposeParameters, evaluate); else fuckupCnt = patternEditorTools.noteTransposeSelection(getSelection().start, getSelection().end, transposeParameters, evaluate); finishUndo(LastChangeNoteTransposeSelection); if (!evaluate) return resCnt; else return fuckupCnt; } pp_int32 PatternEditor::interpolateValuesInSelection() { if (pattern == NULL) return 0; if (pattern->patternData == NULL) return 0; pp_int32 stats = 0; prepareUndo(); PatternEditorTools patternEditorTools(pattern); stats = patternEditorTools.interpolateValuesInSelection(getSelection().start, getSelection().end); finishUndo(LastChangeNoteInterpolate); return stats; } pp_int32 PatternEditor::splitTrack(pp_int32 useChannels, bool selectionOnly, bool insertNoteOff) { if (pattern == NULL) return 0; if (pattern->patternData == NULL) return 0; pp_int32 stats = 0; pp_int32 chn = cursor.channel; pp_int32 fromRow = 0; pp_int32 toRow = pattern->rows; if (selectionOnly && hasValidSelection()) { if (getSelection().start.channel != getSelection().end.channel) return -1; chn = getSelection().start.channel; fromRow = getSelection().start.row; toRow = getSelection().end.row+1; } else if (selectionOnly && !hasValidSelection()) return 0; prepareUndo(); PatternEditorTools patternEditorTools(pattern); stats = patternEditorTools.splitTrack(useChannels, insertNoteOff, chn, fromRow, toRow, getNumChannels()); finishUndo(LastChangeSplitTrack); return stats; } pp_int32 PatternEditor::swapChannels(pp_int32 dstChannel, pp_int32 srcChannel) { if (pattern == NULL) return 0; if (pattern->patternData == NULL) return 0; if (dstChannel == srcChannel) return 0; prepareUndo(); PatternEditorTools patternEditorTools(pattern); pp_int32 stats = patternEditorTools.swapChannels(dstChannel, srcChannel); finishUndo(LastChangeSwapChannels); return stats; } pp_int32 PatternEditor::scaleVolume(const PatternEditorTools::Position& startSelection, const PatternEditorTools::Position& endSelection, float startScale, float endScale) { prepareUndo(); PatternEditorTools patternEditorTools(pattern); pp_int32 stats = patternEditorTools.scaleVolume(startSelection, endSelection, startScale, endScale, getNumChannels(), module); finishUndo(LastChangeScaleVolume); return stats; } pp_int32 PatternEditor::scaleVolumeTrack(float startScale, float endScale) { if (pattern == NULL) return 0; PatternEditorTools::Position startSel, endSel; startSel.row = startSel.inner = 0; startSel.channel = cursor.channel; endSel = startSel; endSel.row = pattern->rows-1; return scaleVolume(startSel, endSel, startScale, endScale); } pp_int32 PatternEditor::scaleVolumePattern(float startScale, float endScale) { if (pattern == NULL) return 0; PatternEditorTools::Position startSel, endSel; startSel.channel = startSel.row = startSel.inner = 0; endSel.channel = pattern->channum-1; endSel.row = pattern->rows-1; endSel.inner = 7; return scaleVolume(startSel, endSel, startScale, endScale); } pp_int32 PatternEditor::scaleVolumeSelection(float startScale, float endScale) { if (pattern == NULL || !hasValidSelection()) return 0; return scaleVolume(getSelection().start, getSelection().end, startScale, endScale); } pp_int32 PatternEditor::zeroOperandsTrack(const PatternEditorTools::OperandOptimizeParameters& optimizeParameters, bool evaluate) { if (pattern == NULL) return 0; if (pattern->patternData == NULL) return 0; prepareUndo(); pp_int32 resCnt = 0; PatternEditorTools patternEditorTools(pattern); resCnt = patternEditorTools.zeroOperandsTrack(cursor.channel, optimizeParameters, evaluate); finishUndo(LastChangeZeroOperandsTrack); return resCnt; } pp_int32 PatternEditor::zeroOperandsPattern(const PatternEditorTools::OperandOptimizeParameters& optimizeParameters, bool evaluate) { if (pattern == NULL) return 0; if (pattern->patternData == NULL) return 0; prepareUndo(); pp_int32 resCnt = 0; PatternEditorTools patternEditorTools(pattern); resCnt = patternEditorTools.zeroOperands(optimizeParameters, evaluate); finishUndo(LastChangeZeroOperandsPattern); return resCnt; } pp_int32 PatternEditor::zeroOperandsSelection(const PatternEditorTools::OperandOptimizeParameters& optimizeParameters, bool evaluate) { if (pattern == NULL) return 0; if (pattern->patternData == NULL) return 0; prepareUndo(); pp_int32 resCnt = 0; PatternEditorTools patternEditorTools(pattern); resCnt = patternEditorTools.zeroOperandsSelection(getSelection().start, getSelection().end, optimizeParameters, evaluate); finishUndo(LastChangeZeroOperandsSelection); return resCnt; } pp_int32 PatternEditor::fillOperandsTrack(const PatternEditorTools::OperandOptimizeParameters& optimizeParameters, bool evaluate) { if (pattern == NULL) return 0; if (pattern->patternData == NULL) return 0; prepareUndo(); pp_int32 resCnt = 0; PatternEditorTools patternEditorTools(pattern); resCnt = patternEditorTools.fillOperandsTrack(cursor.channel, optimizeParameters, evaluate); finishUndo(LastChangeFillOperandsTrack); return resCnt; } pp_int32 PatternEditor::fillOperandsPattern(const PatternEditorTools::OperandOptimizeParameters& optimizeParameters, bool evaluate) { if (pattern == NULL) return 0; if (pattern->patternData == NULL) return 0; prepareUndo(); pp_int32 resCnt = 0; PatternEditorTools patternEditorTools(pattern); resCnt = patternEditorTools.fillOperands(optimizeParameters, evaluate); finishUndo(LastChangeFillOperandsPattern); return resCnt; } pp_int32 PatternEditor::fillOperandsSelection(const PatternEditorTools::OperandOptimizeParameters& optimizeParameters, bool evaluate) { if (pattern == NULL) return 0; if (pattern->patternData == NULL) return 0; prepareUndo(); pp_int32 resCnt = 0; PatternEditorTools patternEditorTools(pattern); resCnt = patternEditorTools.fillOperandsSelection(getSelection().start, getSelection().end, optimizeParameters, evaluate); finishUndo(LastChangeFillOperandsSelection); return resCnt; } pp_int32 PatternEditor::relocateCommandsTrack(const PatternEditorTools::RelocateParameters& relocateParameters, bool evaluate) { if (pattern == NULL) return 0; if (pattern->patternData == NULL) return 0; prepareUndo(); pp_int32 resCnt = 0; PatternEditorTools patternEditorTools(pattern); resCnt = patternEditorTools.relocateCommandsTrack(cursor.channel, relocateParameters, evaluate); finishUndo(LastChangeRelocateCommandsTrack); return resCnt; } pp_int32 PatternEditor::relocateCommandsPattern(const PatternEditorTools::RelocateParameters& relocateParameters, bool evaluate) { if (pattern == NULL) return 0; if (pattern->patternData == NULL) return 0; prepareUndo(); pp_int32 resCnt = 0; PatternEditorTools patternEditorTools(pattern); resCnt = patternEditorTools.relocateCommands(relocateParameters, evaluate); finishUndo(LastChangeRelocateCommandsPattern); return resCnt; } pp_int32 PatternEditor::relocateCommandsSelection(const PatternEditorTools::RelocateParameters& relocateParameters, bool evaluate) { if (pattern == NULL) return 0; if (pattern->patternData == NULL) return 0; prepareUndo(); pp_int32 resCnt = 0; PatternEditorTools patternEditorTools(pattern); resCnt = patternEditorTools.relocateCommandsSelection(getSelection().start, getSelection().end, relocateParameters, evaluate); finishUndo(LastChangeRelocateCommandsSelection); return resCnt; } bool PatternEditor::writeNote(pp_int32 note, bool withUndo/* = false*/, PatternAdvanceInterface* advanceImpl/* = NULL*/) { if (withUndo) prepareUndo(); PatternTools patternTools; patternTools.setPosition(pattern, cursor.channel, cursor.row); // means to delete note if (note == 0xFF) { patternTools.setNote(0); if (advanceImpl) advanceImpl->advance(); if (withUndo) finishUndo(LastChangeSlotChange); return true; } if (note >= 1 && note <= PatternTools::getNoteOffNote()) { pp_int32 currentInstrument = getCurrentActiveInstrument(); patternTools.setNote(note); if (currentInstrument && note != PatternTools::getNoteOffNote()) patternTools.setInstrument(currentInstrument); if (advanceImpl) advanceImpl->advance(); if (withUndo) finishUndo(LastChangeSlotChange); return true; } return false; } void PatternEditor::writeDirectNote(pp_int32 note, pp_int32 track/* = -1*/, pp_int32 row/* = -1*/, pp_int32 order/* = -1*/) { TXMPattern* pattern = this->pattern; if (order != -1) pattern = &module->phead[module->header.ord[order]]; if (track == -1) track = cursor.channel; if (row == -1) row = cursor.row; PatternTools patternTools; patternTools.setPosition(pattern, track, row); // means to delete note if (note == 0xFF) { patternTools.setNote(0); } if (note >= 1 && note <= PatternTools::getNoteOffNote()) { pp_int32 currentInstrument = getCurrentActiveInstrument(); patternTools.setNote(note); if (currentInstrument && note != PatternTools::getNoteOffNote()) patternTools.setInstrument(currentInstrument); } } bool PatternEditor::writeEffect(pp_int32 effNum, pp_uint8 eff, pp_uint8 op, bool withUndo/* = false*/, PatternAdvanceInterface* advanceImpl/* = NULL*/) { if (withUndo) prepareUndo(); PatternTools patternTools; patternTools.setPosition(pattern, cursor.channel, cursor.row); // only write effect, when valid effect // (0 is not a valid effect in my internal format, arpeggio is mapped to 0x30) if (eff) patternTools.setEffect(effNum, eff, op); else return false; if (advanceImpl) advanceImpl->advance(); if (withUndo) finishUndo(LastChangeSlotChange); return true; } void PatternEditor::writeDirectEffect(pp_int32 effNum, pp_uint8 eff, pp_uint8 op, pp_int32 track/* = -1*/, pp_int32 row/* = -1*/, pp_int32 order/* = -1*/) { TXMPattern* pattern = this->pattern; if (order != -1) pattern = &module->phead[module->header.ord[order]]; if (track == -1) track = cursor.channel; if (row == -1) row = cursor.row; PatternTools patternTools; patternTools.setPosition(pattern, track, row); // only write effect, when valid effect // (0 is not a valid effect in my internal format, arpeggio is mapped to 0x30) if (eff) patternTools.setEffect(effNum, eff, op); } bool PatternEditor::writeInstrument(NibbleTypes nibleType, pp_uint8 value, bool withUndo/* = false*/, PatternAdvanceInterface* advanceImpl/* = NULL*/) { if (withUndo) prepareUndo(); PatternTools patternTools; patternTools.setPosition(pattern, cursor.channel, cursor.row); if (nibleType == NibbleTypeBoth) { patternTools.setInstrument(value); if (advanceImpl) advanceImpl->advance(); if (withUndo) finishUndo(LastChangeSlotChange); return true; } pp_uint32 i = patternTools.getInstrument(); if (nibleType == NibbleTypeHigh) { i &= 0x0F; i |= (pp_uint32)value << 4; patternTools.setInstrument(i); if (advanceImpl) advanceImpl->advance(); if (withUndo) finishUndo(LastChangeSlotChange); return true; } else if (nibleType == NibbleTypeLow) { i &= 0xF0; i |= (pp_uint32)value; patternTools.setInstrument(i); if (advanceImpl) advanceImpl->advance(); if (withUndo) finishUndo(LastChangeSlotChange); return true; } return false; } bool PatternEditor::writeFT2Volume(NibbleTypes nibleType, pp_uint8 value, bool withUndo/* = false*/, PatternAdvanceInterface* advanceImpl/* = NULL*/) { if (withUndo) prepareUndo(); PatternTools patternTools; patternTools.setPosition(pattern, cursor.channel, cursor.row); if (value == 0xFF) { patternTools.setFirstEffect(0, 0); if (advanceImpl) advanceImpl->advance(); if (withUndo) finishUndo(LastChangeSlotChange); return true; } pp_int32 eff,op; patternTools.getFirstEffect(eff, op); patternTools.convertEffectsToFT2(eff, op); pp_int32 volume = patternTools.getVolumeFromEffect(eff, op) - 0x10; if (volume < 0) volume = 0; if (volume >= 0xF0) return false; if (volume >= 0) { if (nibleType == NibbleTypeHigh) { volume &= 0x0F; volume |= (pp_int32)value << 4; if (volume>=0xF0) return false; else if ((volume > 0x40 && volume < 0x50)) volume = 0x40; if (volume >= 0x50 && ((volume & 0xF) == 0)) { switch ((volume+0x10) >> 4) { // For the following effects we don't allow zero operand case 0x6: // Volslide down case 0x7: // Volslide up case 0x8: // Fine volslide down case 0x9: // Fine volslide up case 0xa: // Set vibrato speed case 0xd: // Panslide left case 0xe: // Panslide right volume |= 1; break; } } } else if (nibleType == NibbleTypeLow) { volume &= 0xF0; volume |= (pp_int32)value; if (volume>=0xF0) return false; else if ((volume > 0x40 && volume < 0x50)) volume = 0x40; if (volume >= 0x50 && ((volume & 0xF) == 0)) { switch ((volume+0x10) >> 4) { // For the following effects we don't allow zero operand case 0x6: // Volslide down case 0x7: // Volslide up case 0x8: // Fine volslide down case 0x9: // Fine volslide up case 0xa: // Set vibrato speed case 0xd: // Panslide left case 0xe: // Panslide right volume |= 1; break; } } } patternTools.convertVolumeToEffect(volume + 0x10, eff, op); patternTools.setFirstEffect(eff, op); if (advanceImpl) advanceImpl->advance(); if (withUndo) finishUndo(LastChangeSlotChange); return true; } return false; } bool PatternEditor::writeEffectNumber(pp_uint8 value, bool withUndo/* = false*/, PatternAdvanceInterface* advanceImpl/* = NULL*/) { if (withUndo) prepareUndo(); PatternTools patternTools; patternTools.setPosition(pattern, cursor.channel, cursor.row); // clear out entire effect + operand if (value == 0xFF) { patternTools.setEffect(1, 0, 0); if (advanceImpl) advanceImpl->advance(); if (withUndo) finishUndo(LastChangeSlotChange); return true; } pp_int32 eff,op; // skip first effect (= volume command) patternTools.getFirstEffect(eff, op); patternTools.getNextEffect(eff, op); patternTools.convertEffectsToFT2(eff, op); pp_int32 newEff = value; patternTools.convertEffectsFromFT2(newEff, op); if (newEff == 0x40) { newEff = 0x41; op &= 0x0F; } else if (newEff >= 0x43) { newEff = 0x42; op &= 0x0F; } patternTools.setEffect(1, newEff, op); if (advanceImpl) advanceImpl->advance(); if (withUndo) finishUndo(LastChangeSlotChange); return true; } bool PatternEditor::writeEffectOperand(NibbleTypes nibleType, pp_uint8 value, bool withUndo/* = false*/, PatternAdvanceInterface* advanceImpl/* = NULL*/) { if (withUndo) prepareUndo(); PatternTools patternTools; patternTools.setPosition(pattern, cursor.channel, cursor.row); // clear out entire effect + operand if (value == 0xFF) { patternTools.setEffect(1, 0, 0); if (advanceImpl) advanceImpl->advance(); if (withUndo) finishUndo(LastChangeSlotChange); return true; } pp_int32 eff,op; patternTools.getFirstEffect(eff, op); patternTools.getNextEffect(eff, op); patternTools.convertEffectsToFT2(eff, op); if (nibleType == NibbleTypeHigh) { op &= 0x0F; op |= (pp_int32)value << 4; } else if (nibleType == NibbleTypeLow) { op &= 0xF0; op |= (pp_int32)value; } patternTools.convertEffectsFromFT2(eff, op); if (eff == 0x40) eff = 0x41; if (eff >= 0x43) eff = 0x42; patternTools.setEffect(1, eff, op); if (advanceImpl) advanceImpl->advance(); if (withUndo) finishUndo(LastChangeSlotChange); return true; } void PatternEditor::storeMacroFromCursor(pp_int32 slot) { if (pattern == NULL) return; if (slot > 10 || slot < 0) return; PatternTools patternTools; patternTools.setPosition(pattern, cursor.channel, cursor.row); pp_int32 eff, op; if (cursor.inner >= 3 && cursor.inner <= 4) { patternTools.getEffect(0, eff, op); // feature shall also work with empty effects //if (!eff && !op) // return; effectMacros[slot].effect = (pp_uint8)eff; effectMacros[slot].operand = (pp_uint8)op; } else if (cursor.inner > 4) { patternTools.getEffect(1, eff, op); // feature shall also work with empty effects //if (!eff && !op) // return; effectMacros[slot+10].effect = (pp_uint8)eff; effectMacros[slot+10].operand = (pp_uint8)op; } } void PatternEditor::writeMacroToCursor(pp_int32 slot, PatternAdvanceInterface* advanceImpl/* = NULL*/) { if (pattern == NULL) return; if (slot > 10 || slot < 0) return; prepareUndo(); PatternTools patternTools; patternTools.setPosition(pattern, cursor.channel, cursor.row); if (cursor.inner >= 3 && cursor.inner <= 4) { // feature shall also work with empty effects //if (!effectMacros[slot].effect && !effectMacros[slot].operand) // goto writeNothing; patternTools.setEffect(0, effectMacros[slot].effect, effectMacros[slot].operand); } else if (cursor.inner > 4) { // feature shall also work with empty effects //if (!effectMacros[slot+10].effect && !effectMacros[slot+10].operand) // goto writeNothing; patternTools.setEffect(1, effectMacros[slot+10].effect, effectMacros[slot+10].operand); } if (advanceImpl) advanceImpl->advance(); //writeNothing: finishUndo(LastChangeWriteMacro); } void PatternEditor::getMacroOperands(pp_int32 slot, pp_uint8& eff, pp_uint8& op) { if (slot < 0 || slot >= 20) return; eff = effectMacros[slot].effect; op = effectMacros[slot].operand; } void PatternEditor::setMacroOperands(pp_int32 slot, pp_uint8 eff, pp_uint8 op) { if (slot < 0 || slot >= 20) return; effectMacros[slot].effect = eff; effectMacros[slot].operand = op; } void PatternEditor::deleteCursorSlotData(PatternAdvanceInterface* advanceImpl/* = NULL*/) { prepareUndo(); PatternTools patternTools; patternTools.setPosition(pattern, cursor.channel, cursor.row); if (cursor.inner == 3 || cursor.inner == 4) { patternTools.setFirstEffect(0,0); } else if (cursor.inner == 5 || cursor.inner == 6 || cursor.inner == 7) { // What have I been thinking? //pp_int32 eff, op; //patternTools.getEffect(1, eff, op); // actually I think delete should really delete patternTools.setEffect(1, 0, 0); } else { patternTools.setNote(0); patternTools.setInstrument(0); } if (advanceImpl) advanceImpl->advance(); finishUndo(LastChangeDeleteNote); } void PatternEditor::deleteCursorSlotDataEntire(PatternAdvanceInterface* advanceImpl/* = NULL*/) { prepareUndo(); PatternTools patternTools; patternTools.setPosition(pattern, cursor.channel, cursor.row); patternTools.setNote(0); patternTools.setInstrument(0); patternTools.setFirstEffect(0,0); patternTools.setNextEffect(0,0); if (advanceImpl) advanceImpl->advance(); finishUndo(LastChangeDeleteNoteVolumeAndEffect); } void PatternEditor::deleteCursorSlotDataVolumeAndEffect(PatternAdvanceInterface* advanceImpl/* = NULL*/) { prepareUndo(); PatternTools patternTools; patternTools.setPosition(pattern, cursor.channel, cursor.row); patternTools.setFirstEffect(0,0); patternTools.setNextEffect(0,0); if (advanceImpl) advanceImpl->advance(); finishUndo(LastChangeDeleteVolumeAndEffect); } void PatternEditor::deleteCursorSlotDataEffect(PatternAdvanceInterface* advanceImpl/* = NULL*/) { prepareUndo(); PatternTools patternTools; patternTools.setPosition(pattern, cursor.channel, cursor.row); pp_int32 eff, op; patternTools.getFirstEffect(eff, op); patternTools.setFirstEffect(eff,op); patternTools.setNextEffect(0,0); if (advanceImpl) advanceImpl->advance(); finishUndo(LastChangeDeleteEffect); } void PatternEditor::insertNote(pp_int32 channel, pp_int32 row) { if (pattern == NULL || pattern->patternData == NULL) return; if (channel < 0 || channel >= pattern->channum) return; prepareUndo(); mp_sint32 slotSize = pattern->effnum * 2 + 2; mp_sint32 rowSize = slotSize*pattern->channum; for (mp_sint32 i = pattern->rows - 1; i > row; i--) { mp_ubyte* src = (i-1)*rowSize + channel*slotSize + pattern->patternData; mp_ubyte* dst = i*rowSize + channel*slotSize + pattern->patternData; memcpy(dst, src, slotSize); } memset(row*rowSize + channel*slotSize + pattern->patternData, 0, slotSize); finishUndo(LastChangeInsertNote); } void PatternEditor::insertLine(pp_int32 row) { if (pattern == NULL || pattern->patternData == NULL) return; if (row < 0 || row >= pattern->rows) return; prepareUndo(); mp_sint32 slotSize = pattern->effnum * 2 + 2; mp_sint32 rowSize = slotSize*pattern->channum; for (mp_sint32 i = pattern->rows - 1; i > row; i--) { mp_ubyte* src = (i-1)*rowSize + pattern->patternData; mp_ubyte* dst = i*rowSize + pattern->patternData; memcpy(dst, src, rowSize); } memset(row*rowSize + pattern->patternData, 0, rowSize); finishUndo(LastChangeInsertLine); } void PatternEditor::deleteNote(pp_int32 channel, pp_int32 row) { if (pattern == NULL || pattern->patternData == NULL) return; if (row < 0 || row >= pattern->rows) return; if (channel < 0 || channel >= pattern->channum) return; prepareUndo(); mp_sint32 slotSize = pattern->effnum * 2 + 2; mp_sint32 rowSize = slotSize*pattern->channum; for (mp_sint32 i = row; i < pattern->rows-1; i++) { mp_ubyte* src = (i+1)*rowSize + channel*slotSize + pattern->patternData; mp_ubyte* dst = i*rowSize + channel*slotSize + pattern->patternData; memcpy(dst, src, slotSize); } memset((pattern->rows-1)*rowSize + channel*slotSize + pattern->patternData, 0, slotSize); finishUndo(LastChangeDeleteNote); } void PatternEditor::deleteLine(pp_int32 row) { if (pattern == NULL || pattern->patternData == NULL) return; if (row < 0 || row >= pattern->rows) return; prepareUndo(); mp_sint32 slotSize = pattern->effnum * 2 + 2; mp_sint32 rowSize = slotSize*pattern->channum; for (mp_sint32 i = row; i < pattern->rows-1; i++) { mp_ubyte* src = (i+1)*rowSize + pattern->patternData; mp_ubyte* dst = i*rowSize + pattern->patternData; memcpy(dst, src, rowSize); } memset((pattern->rows-1)*rowSize + pattern->patternData, 0, rowSize); finishUndo(LastChangeDeleteLine); } MilkyTracker-1.02.00/src/tracker/PatternEditor.h000066400000000000000000000340141324432207300214340ustar00rootroot00000000000000/* * tracker/PatternEditor.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * PatternEditor.h * MilkyTracker * * Created by Peter Barth on 16.11.07. * */ #ifndef __PATTERNEDITOR_H__ #define __PATTERNEDITOR_H__ #include "EditorBase.h" #include "PatternEditorTools.h" #include "Undo.h" struct TXMPattern; class XModule; class PatternEditor : public EditorBase { public: // These are the clipboards, FT2 uses different clipboard buffers for // copy/cut/paste block/track/pattern operations, so we imitate these too enum ClipBoardTypes { ClipBoardTypeSelection, ClipBoardTypeTrack, ClipBoardTypePattern, // do not use ClipBoardTypeLAST }; class PatternAdvanceInterface { public: virtual void advance() = 0; }; class Selection { private: bool copyValid; public: PatternEditorTools::Position start, end, startCopy, endCopy; Selection() { reset(); startCopy = start; endCopy = end; copyValid = false; } void reset() { start.channel = -1; start.row = -1; start.inner = 0; end.channel = -1; end.row = -1; end.inner = 7; } bool isValid() { return (start.channel >= 0 && start.row >= 0 && end.channel >= 0 && end.row >= 0); } bool isCopyValid() { return (startCopy.channel >= 0 && startCopy.row >= 0 && endCopy.channel >= 0 && endCopy.row >= 0) && copyValid; } void backup(); void restore(); }; struct TCommand { pp_uint8 effect; pp_uint8 operand; }; private: class ClipBoard { private: mp_ubyte* buffer; PatternEditorTools::Position selectionStart, selectionEnd; pp_int32 selectionWidth; pp_int32 selectionHeight; // FT2 uses different clipboards for track/pattern/block operations // so a regular singleton design won't cut it static ClipBoard* instances[ClipBoardTypeLAST]; ClipBoard(); public: ~ClipBoard(); static ClipBoard* getInstance(ClipBoardTypes type); void makeCopy(TXMPattern& pattern, const PatternEditorTools::Position& ss, const PatternEditorTools::Position& se, bool clear = false); void paste(TXMPattern& pattern, pp_int32 sc, pp_int32 sr, bool transparent = false); bool isEmpty() const { return buffer == NULL; } pp_int32 getNumRows() { return selectionHeight; } pp_int32 getNumChannels() { return selectionWidth; } }; // operations enum LastChanges { LastChangeNone, LastChangeSlotChange, LastChangeInsertNote, LastChangeInsertLine, LastChangeDeleteNote, LastChangeDeleteLine, LastChangeDeleteNoteVolumeAndEffect, LastChangeDeleteVolumeAndEffect, LastChangeDeleteEffect, LastChangeWriteMacro, LastChangeCut, LastChangePaste, LastChangeDeleteSelection, LastChangeExpandPattern, LastChangeShrinkPattern, LastChangeResizePattern, LastChangeLoadXPattern, LastChangeLoadXTrack, LastChangeInsIncSelection, LastChangeInsDecSelection, LastChangeInsIncTrack, LastChangeInsDecTrack, LastChangeInsRemapTrack, LastChangeInsRemapPattern, LastChangeInsRemapSelection, LastChangeNoteTransposeTrack, LastChangeNoteTransposePattern, LastChangeNoteTransposeSelection, LastChangeNoteInterpolate, LastChangeSplitTrack, LastChangeSwapChannels, LastChangeScaleVolume, LastChangeZeroOperandsTrack, LastChangeZeroOperandsPattern, LastChangeZeroOperandsSelection, LastChangeFillOperandsTrack, LastChangeFillOperandsPattern, LastChangeFillOperandsSelection, LastChangeRelocateCommandsTrack, LastChangeRelocateCommandsPattern, LastChangeRelocateCommandsSelection }; private: TXMPattern* pattern; // Current cursor position PatternEditorTools::Position cursor; // Current selection Selection selection; pp_int32 numVisibleChannels; bool autoResize; pp_int32 currentInstrument; bool instrumentEnabled; bool instrumentBackTrace; pp_int32 currentOctave; // undo/redo information UndoStackEntry::UserData undoUserData; PatternUndoStackEntry* before; PPUndoStack* undoStack; UndoHistory* undoHistory; LastChanges lastChange; bool lastOperationDidChangeRows; bool lastOperationDidChangeCursor; TCommand effectMacros[20]; void prepareUndo(); bool finishUndo(LastChanges lastChange, bool nonRepeat = false); bool revoke(const PatternUndoStackEntry* stackEntry); void cut(ClipBoard& clipBoard); void copy(ClipBoard& clipBoard); void paste(ClipBoard& clipBoard, bool transparent = false, pp_int32 fromChannel = -1); void clearRange(const PatternEditorTools::Position& rangeStart, const PatternEditorTools::Position& rangeEnd); public: PatternEditor(); virtual ~PatternEditor(); // query status bool getLastOperationDidChangeRows() const { return lastOperationDidChangeRows; } bool getLastOperationDidChangeCursor() const { return lastOperationDidChangeCursor; } void attachPattern(TXMPattern* pattern, XModule* module); TXMPattern* getPattern() { return pattern; } void reset(); pp_int32 getNumChannels() const; pp_int32 getNumRows() const; void setNumVisibleChannels(pp_int32 numVisibleChannels) { this->numVisibleChannels = numVisibleChannels; } void setAutoResize(bool autoResize) { this->autoResize = autoResize; } bool getAutoResize() const { return autoResize; } // dealing with current cursor void setCursor(const PatternEditorTools::Position& cursor) { this->cursor = cursor; } PatternEditorTools::Position& getCursor() { return cursor; } void resetCursor() { cursor.row = cursor.channel = cursor.inner = 0; } // dealing with the selection void setSelection(const Selection& selection) { this->selection = selection; } Selection& getSelection() { return selection; } void setSelectionStart(const PatternEditorTools::Position& pos) { selection.start = pos; } void setSelectionEnd(const PatternEditorTools::Position& pos) { selection.end = pos; } void resetSelection() { selection.reset(); } bool hasValidSelection(); void selectChannel(pp_int32 channel); void selectAll(); // dealing with instrument void setCurrentInstrument(pp_int32 ins) { currentInstrument = ins; } pp_int32 getCurrentActiveInstrument(); void enableInstrument(bool instrumentEnabled) { this->instrumentEnabled = instrumentEnabled; } bool isInstrumentEnabled() { return instrumentEnabled; } // Intelligent instrument backtrace? void setInstrumentBackTrace(bool instrumentBackTrace) { this->instrumentBackTrace = instrumentBackTrace; } void setCurrentOctave(pp_int32 octave) { currentOctave = octave; } pp_int32 getCurrentOctave() const { return currentOctave; } void increaseCurrentOctave() { if (currentOctave < 8) currentOctave++; } void decreaseCurrentOctave() { if (currentOctave > 1) currentOctave--; } // --- Multilevel UNDO / REDO -------------------------------------------- bool canUndo() const { if (undoStack) return !undoStack->IsEmpty(); else return false; } bool canRedo() const { if (undoStack) return !undoStack->IsTop(); else return false; } // undo last changes bool undo(); // redo last changes bool redo(); void setUndoUserData(const void* data, pp_uint32 dataLen) { this->undoUserData = UndoStackEntry::UserData((pp_uint8*)data, dataLen); } pp_uint32 getUndoUserDataLen() const { return undoUserData.getDataLen(); } const void* getUndoUserData() const { return (void*)undoUserData.getData(); } // --- dealing with the pattern data ------------------------------------- void clearSelection(); void clearPattern(); bool clipBoardSelectionIsEmpty() const { return ClipBoard::getInstance(ClipBoardTypeSelection)->isEmpty(); } void cut(ClipBoardTypes clipBoardType); void copy(ClipBoardTypes clipBoardType); void paste(ClipBoardTypes clipBoardType, bool transparent = false, pp_int32 fromChannel = -1); // resize pattern to a new number of rows bool resizePattern(pp_int32 newRowNum, bool withUndo = true); // insert a blank line after each pattern line bool expandPattern(); // delete every odd pattern line bool shrinkPattern(); // Load extended pattern from file (.XP) bool loadExtendedPattern(const PPSystemString& fileName); bool saveExtendedPattern(const PPSystemString& fileName); // Load extended track from file (.XT) bool loadExtendedTrack(const PPSystemString& fileName); bool saveExtendedTrack(const PPSystemString& fileName); // --- increase/decrease/remap instruments ------------------------------------------------- pp_int32 insIncSelection(); pp_int32 insDecSelection(); pp_int32 insIncTrack(); pp_int32 insDecTrack(); pp_int32 insRemapTrack(pp_int32 oldIns, pp_int32 newIns); pp_int32 insRemapPattern(pp_int32 oldIns, pp_int32 newIns); pp_int32 insRemapSelection(pp_int32 oldIns, pp_int32 newIns); // --- transpose notes --------------------------------------------------- pp_int32 noteTransposeTrackCore(const PatternEditorTools::TransposeParameters& transposeParameters, bool evaluate); pp_int32 noteTransposePatternCore(const PatternEditorTools::TransposeParameters& transposeParameters, bool evaluate); pp_int32 noteTransposeSelectionCore(const PatternEditorTools::TransposeParameters& transposeParameters, bool evaluate); // --- interpolate values in current selection --------------------------- pp_int32 interpolateValuesInSelection(); // --- split track ------------------------------------------------------- pp_int32 splitTrack(pp_int32 useChannels, bool selectionOnly, bool insertNoteOff); // --- swap channels ----------------------------------------------------- pp_int32 swapChannels(pp_int32 dstChannel, pp_int32 srcChannel); // --- FT2 compatible scale volume function ------------------------------ pp_int32 scaleVolume(const PatternEditorTools::Position& startSelection, const PatternEditorTools::Position& endSelection, float startScale, float endScale); pp_int32 scaleVolumeTrack(float startScale, float endScale); pp_int32 scaleVolumePattern(float startScale, float endScale); pp_int32 scaleVolumeSelection(float startScale, float endScale); // --- Zero out unecessary operands -------------------------------------- pp_int32 zeroOperandsTrack(const PatternEditorTools::OperandOptimizeParameters& optimizeParameters, bool evaluate); pp_int32 zeroOperandsPattern(const PatternEditorTools::OperandOptimizeParameters& optimizeParameters, bool evaluate); pp_int32 zeroOperandsSelection(const PatternEditorTools::OperandOptimizeParameters& optimizeParameters, bool evaluate); // --- Fill in zero operands --------------------------------------------- pp_int32 fillOperandsTrack(const PatternEditorTools::OperandOptimizeParameters& optimizeParameters, bool evaluate); pp_int32 fillOperandsPattern(const PatternEditorTools::OperandOptimizeParameters& optimizeParameters, bool evaluate); pp_int32 fillOperandsSelection(const PatternEditorTools::OperandOptimizeParameters& optimizeParameters, bool evaluate); // --- Relocate FX into volume column if possible ------------------------ pp_int32 relocateCommandsTrack(const PatternEditorTools::RelocateParameters& relocateParameters, bool evaluate); pp_int32 relocateCommandsPattern(const PatternEditorTools::RelocateParameters& relocateParameters, bool evaluate); pp_int32 relocateCommandsSelection(const PatternEditorTools::RelocateParameters& relocateParameters, bool evaluate); // --- write slot data --------------------------------------------------- bool writeNote(pp_int32 note, bool withUndo = false, PatternAdvanceInterface* advanceImpl = NULL); // --- write through, without undo etc. ---------------------------------- void writeDirectNote(pp_int32 note, pp_int32 track = -1, pp_int32 row = -1, pp_int32 order = -1); enum NibbleTypes { NibbleTypeLow, NibbleTypeHigh, NibbleTypeBoth }; bool writeInstrument(NibbleTypes nibleType, pp_uint8 value, bool withUndo = false, PatternAdvanceInterface* advanceImpl = NULL); bool writeFT2Volume(NibbleTypes nibleType, pp_uint8 value, bool withUndo = false, PatternAdvanceInterface* advanceImpl = NULL); bool writeEffectNumber(pp_uint8 value, bool withUndo = false, PatternAdvanceInterface* advanceImpl = NULL); bool writeEffectOperand(NibbleTypes nibleType, pp_uint8 value, bool withUndo = false, PatternAdvanceInterface* advanceImpl = NULL); bool writeEffect(pp_int32 effNum, pp_uint8 eff, pp_uint8 op, bool withUndo = false, PatternAdvanceInterface* advanceImpl = NULL); // --- write through, without undo etc. ---------------------------------- void writeDirectEffect(pp_int32 effNum, pp_uint8 eff, pp_uint8 op, pp_int32 track = -1, pp_int32 row = -1, pp_int32 order = -1); // --- dealing with FT2 style effect macros ------------------------------ void storeMacroFromCursor(pp_int32 slot); void writeMacroToCursor(pp_int32 slot, PatternAdvanceInterface* advanceImpl = NULL); void getMacroOperands(pp_int32 slot, pp_uint8& eff, pp_uint8& op); void setMacroOperands(pp_int32 slot, pp_uint8 eff, pp_uint8 op); // --- deleting slot data ------------------------------------------------ void deleteCursorSlotData(PatternAdvanceInterface* advanceImpl = NULL); void deleteCursorSlotDataEntire(PatternAdvanceInterface* advanceImpl = NULL); void deleteCursorSlotDataVolumeAndEffect(PatternAdvanceInterface* advanceImpl = NULL); void deleteCursorSlotDataEffect(PatternAdvanceInterface* advanceImpl = NULL); // --- inserting/deleting entire rows ------------------------------------ void insertNote(pp_int32 channel, pp_int32 row); void insertLine(pp_int32 row); void deleteNote(pp_int32 channel, pp_int32 row); void deleteLine(pp_int32 row); }; #endif MilkyTracker-1.02.00/src/tracker/PatternEditorClipBoard.cpp000066400000000000000000000121301324432207300235420ustar00rootroot00000000000000/* * tracker/PatternEditorClipBoard.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * PatternEditorClipBoard.cpp * MilkyTracker * * Created by Peter Barth on Fri Mar 11 2005. * */ #include "PatternEditor.h" #include "XModule.h" PatternEditor::ClipBoard::ClipBoard() : buffer(0) { selectionStart.channel = -1; selectionStart.row = -1; selectionEnd.channel = -1; selectionEnd.row = -1; } PatternEditor::ClipBoard::~ClipBoard() { delete buffer; } void PatternEditor::ClipBoard::makeCopy(TXMPattern& pattern, const PatternEditorTools::Position& ss, const PatternEditorTools::Position& se, bool clear/*= false*/) { if (!PatternEditorTools::hasValidSelection(&pattern, ss, se)) return; if (!PatternEditorTools::normalizeSelection(&pattern, ss, se, selectionStart.channel, selectionStart.row, selectionStart.inner, selectionEnd.channel, selectionEnd.row, selectionEnd.inner)) return; // only entire instrument column is allowed if (selectionStart.inner >= 1 && selectionStart.inner<=2) selectionStart.inner = 1; if (selectionEnd.inner >= 1 && selectionEnd.inner<=2) selectionEnd.inner = 2; // only entire volume column can be selected if (selectionStart.inner >= 3 && selectionStart.inner<=4) selectionStart.inner = 3; if (selectionEnd.inner >= 3 && selectionEnd.inner<=4) selectionEnd.inner = 4; selectionWidth = selectionEnd.channel - selectionStart.channel + 1; selectionHeight = selectionEnd.row - selectionStart.row + 1; mp_sint32 slotSize = pattern.effnum * 2 + 2; ASSERT(slotSize == 6); mp_sint32 rowSizeDst = slotSize*selectionWidth; mp_sint32 rowSizeSrc = slotSize*pattern.channum; mp_sint32 bufferSize = selectionHeight * rowSizeDst; if (buffer) delete[] buffer; buffer = new mp_ubyte[bufferSize]; if (buffer == NULL) return; memset(buffer, 0, bufferSize); for (pp_int32 i = 0; i < selectionHeight; i++) for (pp_int32 j = 0; j < selectionWidth; j++) { mp_ubyte* src = pattern.patternData + (selectionStart.row+i)*rowSizeSrc+(selectionStart.channel+j)*slotSize; mp_ubyte* dst = buffer + i*rowSizeDst+j*slotSize; if (selectionWidth == 1) { PatternEditorTools::slotCopy(dst, src, selectionStart.inner, selectionEnd.inner); if (clear) PatternEditorTools::slotClear(src, selectionStart.inner, selectionEnd.inner); } else if (j == 0) { PatternEditorTools::slotCopy(dst, src, selectionStart.inner, 7); if (clear) PatternEditorTools::slotClear(src, selectionStart.inner, 7); } else if (j+selectionStart.channel == selectionEnd.channel) { PatternEditorTools::slotCopy(dst, src, 0, selectionEnd.inner); if (clear) PatternEditorTools::slotClear(src, 0, selectionEnd.inner); } else { //memcpy(dst, src, slotSize); PatternEditorTools::slotCopy(dst, src, 0, 7); if (clear) PatternEditorTools::slotClear(src, 0, 7); } } } void PatternEditor::ClipBoard::paste(TXMPattern& pattern, pp_int32 sc, pp_int32 sr, bool transparent/* = false*/) { if (pattern.patternData == NULL) return; if (buffer == NULL) return; mp_sint32 slotSize = pattern.effnum * 2 + 2; mp_sint32 rowSizeSrc = slotSize*selectionWidth; mp_sint32 rowSizeDst = slotSize*pattern.channum; for (pp_int32 i = 0; i < selectionHeight; i++) for (pp_int32 j = 0; j < selectionWidth; j++) { if (i + sr < pattern.rows && i + sr >= 0 && j + sc < pattern.channum && j + sc >= 0) { mp_ubyte* dst = pattern.patternData + (sr+i)*rowSizeDst+(sc+j)*slotSize; mp_ubyte* src = buffer + i*rowSizeSrc+j*slotSize; if (selectionWidth == 1) { if (transparent) PatternEditorTools::slotTransparentCopy(dst, src, selectionStart.inner, selectionEnd.inner); else PatternEditorTools::slotCopy(dst, src, selectionStart.inner, selectionEnd.inner); } else if (j == 0) { if (transparent) PatternEditorTools::slotTransparentCopy(dst, src, selectionStart.inner, 7); else PatternEditorTools::slotCopy(dst, src, selectionStart.inner, 7); } else if (j+selectionStart.channel == selectionEnd.channel) { if (transparent) PatternEditorTools::slotTransparentCopy(dst, src, 0, selectionEnd.inner); else PatternEditorTools::slotCopy(dst, src, 0, selectionEnd.inner); } else { if (transparent) PatternEditorTools::slotTransparentCopy(dst, src, 0, 7); else PatternEditorTools::slotCopy(dst, src, 0, 7); } } } } MilkyTracker-1.02.00/src/tracker/PatternEditorControl.cpp000066400000000000000000001224201324432207300233270ustar00rootroot00000000000000/* * tracker/PatternEditorControl.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "PatternEditorControl.h" #include "GraphicsAbstract.h" #include "Screen.h" #include "Control.h" #include "Font.h" #include "XModule.h" #include "Menu.h" #include "Undo.h" #include "ContextMenu.h" #include "KeyBindings.h" #include "DialogBase.h" #include "PPUIConfig.h" #include "TrackerConfig.h" #define SCROLLBARWIDTH SCROLLBUTTONSIZE PatternEditorControl::PatternEditorControl(pp_int32 id, PPScreen* parentScreen, EventListenerInterface* eventListener, const PPPoint& location, const PPSize& size, bool border/*= true*/) : PPControl(id, parentScreen, eventListener, location, size), borderColor(&TrackerConfig::colorThemeMain), cursorColor(&TrackerConfig::colorPatternEditorCursorLine), selectionColor(&TrackerConfig::colorPatternEditorSelection), menuPosX(0), menuPosY(0), menuInvokeChannel(-1), lastMenuInvokeChannel(-1), eventKeyDownBindings(NULL), scanCodeBindings(NULL), eventKeyDownBindingsMilkyTracker(NULL), scanCodeBindingsMilkyTracker(NULL), eventKeyDownBindingsFastTracker(NULL), scanCodeBindingsFastTracker(NULL), patternEditor(NULL), module(NULL), pattern(NULL), ppreCursor(NULL), lastAction(RMouseDownActionInvalid), RMouseDownInChannelHeading(-1) { // default color bgColor.r = 0; bgColor.g = 0; bgColor.b = 0; vLeftScrollbar = new PPScrollbar(0, parentScreen, this, PPPoint(location.x, location.y), size.height, false); vRightScrollbar = new PPScrollbar(1, parentScreen, this, PPPoint(location.x + size.width - SCROLLBARWIDTH, location.y), size.height, false); hTopScrollbar = new PPScrollbar(2, parentScreen, this, PPPoint(location.x + SCROLLBARWIDTH, location.y), size.width - SCROLLBARWIDTH*2, true); hBottomScrollbar = new PPScrollbar(3, parentScreen, this, PPPoint(location.x + SCROLLBARWIDTH, location.y + size.height - SCROLLBARWIDTH), size.width - SCROLLBARWIDTH*2, true); caughtControl = NULL; controlCaughtByLMouseButton = controlCaughtByRMouseButton = false; pattern = NULL; startIndex = 0; startPos = 0; songPos.orderListIndex = songPos.row = -1; startSelection = false; // assuming false is zero :) memset(muteChannels, 0, sizeof(muteChannels)); memset(recChannels, 0 ,sizeof(recChannels)); // context menu editMenuControl = new PPContextMenu(4, parentScreen, this, PPPoint(0,0), TrackerConfig::colorThemeMain, false, PPFont::getFont(PPFont::FONT_SYSTEM)); editMenuControl->addEntry("Mute channel", MenuCommandIDMuteChannel); editMenuControl->addEntry("Solo channel", MenuCommandIDSoloChannel); editMenuControl->addEntry("Unmute all", MenuCommandIDUnmuteAll); editMenuControl->addEntry("\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4", -1); editMenuControl->addEntry("Mark channel", MenuCommandIDSelectChannel); editMenuControl->addEntry("Mark all", MenuCommandIDSelectAll); editMenuControl->addEntry("\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4", -1); editMenuControl->addEntry("Undo", MenuCommandIDUndo); editMenuControl->addEntry("Redo", MenuCommandIDRedo); editMenuControl->addEntry("\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4", -1); editMenuControl->addEntry("Cut", MenuCommandIDCut); editMenuControl->addEntry("Copy", MenuCommandIDCopy); editMenuControl->addEntry("Paste", MenuCommandIDPaste); editMenuControl->addEntry("Porous Paste", MenuCommandIDPorousPaste); editMenuControl->addEntry("\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4", -1); editMenuControl->addEntry("Swap channels", MenuCommandIDSwapChannels); editMenuControl->setNotifyParentOnHide(true); initKeyBindings(); #ifdef __LOWRES__ setFont(PPFont::getFont(PPFont::FONT_TINY)); switchEditMode(EditModeMilkyTracker); #else setFont(PPFont::getFont(PPFont::FONT_SYSTEM)); switchEditMode(EditModeFastTracker); #endif setRecordMode(false); transposeHandlerResponder = new TransposeHandlerResponder(*this); dialog = NULL; } PatternEditorControl::~PatternEditorControl() { if (patternEditor) patternEditor->removeNotificationListener(this); delete vLeftScrollbar; delete vRightScrollbar; delete hTopScrollbar; delete hBottomScrollbar; delete editMenuControl; delete eventKeyDownBindingsMilkyTracker; delete scanCodeBindingsMilkyTracker; delete eventKeyDownBindingsFastTracker; delete scanCodeBindingsFastTracker; delete transposeHandlerResponder; delete dialog; } void PatternEditorControl::setFont(PPFont* font) { this->font = font; adjustExtents(); if (editMenuControl->getSize().width < slotSize) editMenuControl->setFont(font); else editMenuControl->setFont(PPFont::getFont(PPFont::FONT_SYSTEM)); assureCursorVisible(); } void PatternEditorControl::setSize(const PPSize& size) { PPControl::setSize(size); visibleWidth = size.width - (getRowCountWidth() + 4) - SCROLLBARWIDTH*2; visibleHeight = size.height - (font->getCharHeight() + 4) - SCROLLBARWIDTH*2; delete vLeftScrollbar; delete vRightScrollbar; delete hTopScrollbar; delete hBottomScrollbar; vLeftScrollbar = new PPScrollbar(0, parentScreen, this, PPPoint(location.x, location.y), size.height, false); vRightScrollbar = new PPScrollbar(1, parentScreen, this, PPPoint(location.x + size.width - SCROLLBARWIDTH, location.y), size.height, false); hTopScrollbar = new PPScrollbar(2, parentScreen, this, PPPoint(location.x + SCROLLBARWIDTH, location.y), size.width - SCROLLBARWIDTH*2, true); hBottomScrollbar = new PPScrollbar(3, parentScreen, this, PPPoint(location.x + SCROLLBARWIDTH, location.y + size.height - SCROLLBARWIDTH), size.width - SCROLLBARWIDTH*2, true); adjustScrollBarSizes(); assureCursorVisible(); } void PatternEditorControl::setLocation(const PPPoint& location) { PPControl::setLocation(location); visibleWidth = size.width - (getRowCountWidth() + 4) - SCROLLBARWIDTH*2; visibleHeight = size.height - (font->getCharHeight() + 4) - SCROLLBARWIDTH*2; delete vLeftScrollbar; delete vRightScrollbar; delete hTopScrollbar; delete hBottomScrollbar; vLeftScrollbar = new PPScrollbar(0, parentScreen, this, PPPoint(location.x, location.y), size.height, false); vRightScrollbar = new PPScrollbar(1, parentScreen, this, PPPoint(location.x + size.width - SCROLLBARWIDTH, location.y), size.height, false); hTopScrollbar = new PPScrollbar(2, parentScreen, this, PPPoint(location.x + SCROLLBARWIDTH, location.y), size.width - SCROLLBARWIDTH*2, true); hBottomScrollbar = new PPScrollbar(3, parentScreen, this, PPPoint(location.x + SCROLLBARWIDTH, location.y + size.height - SCROLLBARWIDTH), size.width - SCROLLBARWIDTH*2, true); adjustScrollBarSizes(); assureCursorVisible(); } static inline pp_int32 myMod(pp_int32 a, pp_int32 b) { pp_int32 r = a % b; return r < 0 ? b + r : r; } void PatternEditorControl::paint(PPGraphicsAbstract* g) { if (!isVisible()) return; // ;----------------- everything all right? validate(); // ;----------------- colors PPColor lineColor; if (hasFocus || !properties.showFocus) lineColor = *cursorColor; else lineColor.r = lineColor.g = lineColor.b = 64; PPColor bColor = *borderColor, dColor = *borderColor, bCursor = lineColor, dCursor = lineColor; // adjust dark color dColor.scaleFixed(32768); // adjust bright color bColor.scaleFixed(87163); // adjust dark color dCursor.scaleFixed(32768); // adjust bright color bCursor.scaleFixed(87163); g->setRect(location.x+SCROLLBARWIDTH, location.y+SCROLLBARWIDTH, location.x + size.width - SCROLLBARWIDTH, location.y + size.height - SCROLLBARWIDTH); g->setColor(bgColor); g->fill(); g->setFont(font); // ;----------------- not going any further with invalid pattern if (pattern == NULL) return; // ;----------------- make layout extents adjustExtents(); char name[32]; mp_sint32 i,j; // ;----------------- selection layout PatternEditorTools::Position selectionStart, selectionEnd; selectionStart = patternEditor->getSelection().start; selectionEnd = patternEditor->getSelection().end; PatternEditorTools::flattenSelection(selectionStart, selectionEnd); // only entire instrument column is allowed if (selectionStart.inner >= 1 && selectionStart.inner<=2) selectionStart.inner = 1; if (selectionEnd.inner >= 1 && selectionEnd.inner<=2) selectionEnd.inner = 2; // only entire volume column is allowed if (selectionStart.inner >= 3 && selectionStart.inner<=4) selectionStart.inner = 3; if (selectionEnd.inner >= 3 && selectionEnd.inner<=4) selectionEnd.inner = 4; PatternEditorTools::Position& cursor = patternEditor->getCursor(); if (cursor.inner < 0 || cursor.inner >= 8) cursor.inner = 0; // ;----------------- some constants const pp_uint32 fontCharWidth3x = font->getCharWidth()*3 + 1; const pp_uint32 fontCharWidth2x = font->getCharWidth()*2 + 1; const pp_uint32 fontCharWidth1x = font->getCharWidth()*1 + 1; PatternTools* patternTools = &this->patternTools; // ;----------------- Little adjustment for scrolling in center if (properties.scrollMode == ScrollModeToCenter) { if ((size.height - (SCROLLBARWIDTH + ((signed)font->getCharHeight()+4)))/(signed)font->getCharHeight() > (pattern->rows - startIndex + 1) && startIndex > 0) startIndex--; } // ;----------------- start painting rows pp_int32 startx = location.x + SCROLLBARWIDTH + getRowCountWidth() + 4; pp_int32 previousPatternIndex = currentOrderlistIndex; pp_int32 previousRowIndex = 0; pp_int32 nextPatternIndex = currentOrderlistIndex; pp_int32 nextRowIndex = this->pattern->rows-1; pp_int32 songPosOrderListIndex = currentOrderlistIndex; TXMPattern* pattern = this->pattern; // ----------------- colors ----------------- PPColor noteColor = TrackerConfig::colorPatternEditorNote; PPColor insColor = TrackerConfig::colorPatternEditorInstrument; PPColor volColor = TrackerConfig::colorPatternEditorVolume; PPColor effColor = TrackerConfig::colorPatternEditorEffect; PPColor opColor = TrackerConfig::colorPatternEditorOperand; PPColor hiLightPrimary = TrackerConfig::colorHighLight_1; PPColor hiLightSecondary = TrackerConfig::colorHighLight_2; PPColor hiLightPrimaryRow = TrackerConfig::colorRowHighLight_1; PPColor hiLightSecondaryRow = TrackerConfig::colorRowHighLight_2; PPColor textColor = PPUIConfig::getInstance()->getColor(PPUIConfig::ColorStaticText); pp_int32 numVisibleChannels = patternEditor->getNumChannels(); for (pp_int32 i2 = startIndex;; i2++) { i = i2 < 0 ? startIndex - i2 - 1: i2; pp_int32 px = location.x + SCROLLBARWIDTH; pp_int32 py = location.y + (i-startIndex) * font->getCharHeight() + SCROLLBARWIDTH + (font->getCharHeight() + 4); // rows are already in invisible area => abort if (py >= location.y + size.height) break; pp_int32 row = i; if (properties.prospective && properties.scrollMode == ScrollModeStayInCenter && currentOrderlistIndex != -1) { if (i < 0) { previousRowIndex--; if (previousRowIndex < 0) { previousPatternIndex--; if (previousPatternIndex >= 0) { pattern = &module->phead[module->header.ord[previousPatternIndex]]; previousRowIndex = pattern->rows-1; noteColor.set(TrackerConfig::colorThemeMain.r, TrackerConfig::colorThemeMain.g, TrackerConfig::colorThemeMain.b); insColor = volColor = effColor = opColor = noteColor; } else { continue; } } songPosOrderListIndex = previousPatternIndex; row = previousRowIndex; } else if (i >= this->pattern->rows) { nextRowIndex++; if (nextRowIndex == pattern->rows && nextPatternIndex < module->header.ordnum) { nextPatternIndex++; if (nextPatternIndex < module->header.ordnum) { pattern = &module->phead[module->header.ord[nextPatternIndex]]; nextRowIndex = 0; // Outside current range display colors of main theme noteColor.set(TrackerConfig::colorThemeMain.r, TrackerConfig::colorThemeMain.g, TrackerConfig::colorThemeMain.b); insColor = volColor = effColor = opColor = noteColor; } else { continue; } } else if (nextPatternIndex >= module->header.ordnum) { continue; } songPosOrderListIndex = nextPatternIndex; row = nextRowIndex; } else { songPosOrderListIndex = currentOrderlistIndex; pattern = this->pattern; // inside current range display colors as usual noteColor = TrackerConfig::colorPatternEditorNote; insColor = TrackerConfig::colorPatternEditorInstrument; volColor = TrackerConfig::colorPatternEditorVolume; effColor = TrackerConfig::colorPatternEditorEffect; opColor = TrackerConfig::colorPatternEditorOperand; } } else { if (i2 < 0 || i2 >= pattern->rows) continue; row = i; } // draw rows if (!(i % properties.highlightSpacingPrimary) && properties.highLightRowPrimary) { g->setColor(hiLightPrimaryRow); for (pp_int32 k = 0; k < (pp_int32)font->getCharHeight(); k++) g->drawHLine(startx - (getRowCountWidth() + 4), startx+visibleWidth, py + k); } else if (!(i % properties.highlightSpacingSecondary) && properties.highLightRowSecondary) { g->setColor(hiLightSecondaryRow); for (pp_int32 k = 0; k < (pp_int32)font->getCharHeight(); k++) g->drawHLine(startx - (getRowCountWidth() + 4), startx+visibleWidth, py + k); } // draw position line if ((row == songPos.row && songPosOrderListIndex == songPos.orderListIndex) || (i >= 0 && i <= pattern->rows - 1 && i == songPos.row && songPos.orderListIndex == -1)) { PPColor lineColor(TrackerConfig::colorThemeMain.r>>1, TrackerConfig::colorThemeMain.g>>1, TrackerConfig::colorThemeMain.b>>1); g->setColor(lineColor); for (pp_int32 k = 0; k < (pp_int32)font->getCharHeight(); k++) g->drawHLine(startx - (getRowCountWidth() + 4), startx+visibleWidth, py + k); } // draw cursor line if (i == cursor.row) { g->setColor(bCursor); g->drawHLine(startx - (getRowCountWidth() + 4), startx+visibleWidth, py - 1); g->setColor(dCursor); g->drawHLine(startx - (getRowCountWidth() + 4), startx+visibleWidth, py + (pp_int32)font->getCharHeight()); g->setColor(lineColor); for (pp_int32 k = 0; k < (pp_int32)font->getCharHeight(); k++) g->drawHLine(startx - (getRowCountWidth() + 4), startx+visibleWidth, py + k); } // draw rows if (!(i % properties.highlightSpacingPrimary)) g->setColor(hiLightPrimary); else if (!(i % properties.highlightSpacingSecondary)) g->setColor(hiLightSecondary); else g->setColor(textColor); if (properties.hexCount) PatternTools::convertToHex(name, myMod(row, pattern->rows), properties.prospective ? 2 : PatternTools::getHexNumDigits(pattern->rows-1)); else PatternTools::convertToDec(name, myMod(row, pattern->rows), properties.prospective ? 3 : PatternTools::getDecNumDigits(pattern->rows-1)); g->drawString(name, px, py); // draw channels for (j = startPos; j < numVisibleChannels; j++) { pp_int32 px = (location.x + (j-startPos) * slotSize + SCROLLBARWIDTH) + (getRowCountWidth() + 4); // columns are already in invisible area => abort if (px >= location.x + size.width) break; pp_int32 py = location.y + SCROLLBARWIDTH; if (menuInvokeChannel == j) g->setColor(255-dColor.r, 255-dColor.g, 255-dColor.b); else g->setColor(dColor); { PPColor nsdColor = g->getColor(), nsbColor = g->getColor(); if (menuInvokeChannel != j) { // adjust not so dark color nsdColor.scaleFixed(50000); // adjust bright color nsbColor.scaleFixed(80000); } else { // adjust not so dark color nsdColor.scaleFixed(30000); // adjust bright color nsbColor.scaleFixed(60000); } PPRect rect(px, py, px+slotSize, py + font->getCharHeight()+1); g->fillVerticalShaded(rect, nsbColor, nsdColor, false); } if (muteChannels[j]) { g->setColor(128, 128, 128); } else { if (!(j&1)) g->setColor(hiLightPrimary); else g->setColor(textColor); if (j == menuInvokeChannel) { PPColor col = g->getColor(); col.r = textColor.r - col.r; col.g = textColor.g - col.g; col.b = textColor.b - col.b; col.clamp(); g->setColor(col); } } sprintf(name, "%i", j+1); if (muteChannels[j]) strcat(name, " "); g->drawString(name, px + (slotSize>>1)-(((pp_int32)strlen(name)*font->getCharWidth())>>1), py+1); } for (j = startPos; j < numVisibleChannels; j++) { pp_int32 px = (j-startPos) * slotSize + startx; // columns are already in invisible area => abort if (px >= location.x + size.width) break; if (j >= selectionStart.channel && i >= selectionStart.row && j <= selectionEnd.channel && i <= selectionEnd.row && i < this->pattern->rows) { g->setColor(*selectionColor); if ((row == songPos.row && songPosOrderListIndex == songPos.orderListIndex) || (i >= 0 && i <= pattern->rows - 1 && i == songPos.row && songPos.orderListIndex == -1)) { PPColor c = g->getColor(); c.r = (TrackerConfig::colorThemeMain.r + c.r)>>1; c.g = (TrackerConfig::colorThemeMain.g + c.g)>>1; c.b = (TrackerConfig::colorThemeMain.b + c.b)>>1; c.clamp(); g->setColor(c); } if (i == cursor.row) { PPColor c = g->getColor(); c.r+=lineColor.r; c.g+=lineColor.g; c.b+=lineColor.b; c.clamp(); g->setColor(c); } if (selectionStart.channel == selectionEnd.channel && j == selectionStart.channel) { pp_int32 startx = cursorPositions[selectionStart.inner]; pp_int32 endx = cursorPositions[selectionEnd.inner] + cursorSizes[selectionEnd.inner]; g->fill(PPRect(px + startx, py - (i == cursor.row ? 1 : 0), px + endx, py + font->getCharHeight() + (i == cursor.row ? 1 : 0))); } else if (j == selectionStart.channel) { pp_int32 offset = cursorPositions[selectionStart.inner]; g->fill(PPRect(px + offset, py - (i == cursor.row ? 1 : 0), px + slotSize, py + font->getCharHeight() + (i == cursor.row ? 1 : 0))); } else if (j == selectionEnd.channel) { pp_int32 offset = cursorPositions[selectionEnd.inner] + cursorSizes[selectionEnd.inner]; g->fill(PPRect(px, py - (i == cursor.row ? 1 : 0), px + offset, py + font->getCharHeight() + (i == cursor.row ? 1 : 0))); } else { g->fill(PPRect(px, py - (i == cursor.row ? 1 : 0), px + slotSize, py + font->getCharHeight() + (i == cursor.row ? 1 : 0))); } } // --------------------- draw cursor --------------------- if (j == cursor.channel && i == cursor.row) { if (hasFocus || !properties.showFocus) g->setColor(TrackerConfig::colorPatternEditorCursor); else g->setColor(PPUIConfig::getInstance()->getColor(PPUIConfig::ColorGrayedOutSelection)); for (pp_int32 k = cursorPositions[cursor.inner]; k < cursorPositions[cursor.inner]+cursorSizes[cursor.inner]; k++) g->drawVLine(py, py + font->getCharHeight(), px + k); PPColor c = g->getColor(); PPColor c2 = c; c.scaleFixed(32768); c2.scaleFixed(87163); g->setColor(c2); g->drawHLine(px + cursorPositions[cursor.inner], px + cursorPositions[cursor.inner]+cursorSizes[cursor.inner], py - 1); g->setColor(c); g->drawHLine(px + cursorPositions[cursor.inner], px + cursorPositions[cursor.inner]+cursorSizes[cursor.inner], py + font->getCharHeight()); } patternTools->setPosition(pattern, j, row); PPColor noteCol = noteColor; // Show notes in red if outside PT 3 octaves if(properties.ptNoteLimit && ((patternTools->getNote() >= 71 && patternTools->getNote() < patternTools->getNoteOffNote()) || patternTools->getNote() < 36)) { noteCol.set(0xff,00,00); } if (muteChannels[j]) { noteCol.scaleFixed(properties.muteFade); } g->setColor(noteCol); patternTools->getNoteName(name, patternTools->getNote()); g->drawString(name,px, py); px += fontCharWidth3x + properties.spacing; if (muteChannels[j]) { PPColor insCol = insColor; insCol.scaleFixed(properties.muteFade); g->setColor(insCol); } else g->setColor(insColor); pp_uint32 i = patternTools->getInstrument(); if (i) patternTools->convertToHex(name, i, 2); else { name[0] = name[1] = '\xf4'; name[2] = 0; } if (name[0] == '0') name[0] = '\xf4'; g->drawString(name,px, py); px += fontCharWidth2x + properties.spacing; if (muteChannels[j]) { PPColor volCol = volColor; volCol.scaleFixed(properties.muteFade); g->setColor(volCol); } else g->setColor(volColor); pp_int32 eff, op; name[0] = name[1] = '\xf4'; name[2] = 0; if (pattern->effnum >= 2) { patternTools->getFirstEffect(eff, op); patternTools->convertEffectsToFT2(eff, op); pp_int32 volume = patternTools->getVolumeFromEffect(eff, op); patternTools->getVolumeName(name, volume); } g->drawString(name,px, py); px += fontCharWidth2x + properties.spacing; if (muteChannels[j]) { PPColor effCol = effColor; effCol.scaleFixed(properties.muteFade); g->setColor(effCol); } else g->setColor(effColor); if (pattern->effnum == 1) { patternTools->getFirstEffect(eff, op); patternTools->convertEffectsToFT2(eff, op); } else { patternTools->getNextEffect(eff, op); patternTools->convertEffectsToFT2(eff, op); } if (eff == 0 && op == 0) { name[0] = properties.zeroEffectCharacter; name[1] = 0; } else { patternTools->getEffectName(name, eff); } g->drawString(name,px, py); px += fontCharWidth1x; if (muteChannels[j]) { PPColor opCol = opColor; opCol.scaleFixed(properties.muteFade); g->setColor(opCol); } else g->setColor(opColor); if (eff == 0 && op == 0) { name[0] = name[1] = properties.zeroEffectCharacter; name[2] = 0; } else { patternTools->convertToHex(name, op, 2); } g->drawString(name,px, py); } } for (j = startPos; j < numVisibleChannels; j++) { pp_int32 px = (location.x + (j-startPos) * slotSize + SCROLLBARWIDTH) + (getRowCountWidth() + 4); // columns are already in invisible area => abort if (px >= location.x + size.width) break; px += fontCharWidth3x + properties.spacing; px += fontCharWidth2x*3-1 + properties.spacing*2; px += fontCharWidth1x; g->setColor(*borderColor); g->drawVLine(location.y, location.y + size.height, px+1); g->setColor(bColor); g->drawVLine(location.y, location.y + size.height, px); g->setColor(dColor); g->drawVLine(location.y, location.y + size.height, px+2); } // ;----------------- Margin lines // draw margin vertical line g->setColor(*borderColor); pp_int32 px = location.x + SCROLLBARWIDTH; px+=getRowCountWidth() + 1; g->drawVLine(location.y, location.y + size.height, px+1); g->setColor(bColor); g->drawVLine(location.y, location.y + size.height, px); g->setColor(dColor); g->drawVLine(location.y, location.y + size.height, px+2); // draw margin horizontal lines for (j = 0; j < visibleWidth / slotSize + 1; j++) { pp_int32 px = (location.x + j * slotSize + SCROLLBARWIDTH) + (getRowCountWidth() + 4) - 1; // columns are already in invisible area => abort if (px >= location.x + size.width) break; pp_int32 py = location.y + SCROLLBARWIDTH; py+=font->getCharHeight() + 1; // Did we reach the maximum number of channels already? // no: just draw seperate horizontal line segments between the vertical margin lines if (startPos + j < numVisibleChannels) { g->setColor(*borderColor); g->drawHLine(px, px + slotSize - 1, py+1); g->setColor(bColor); g->drawHLine(px + 1, px + slotSize - 2, py); g->setColor(dColor); g->drawHLine(px + 1, px + slotSize - 2, py+2); } // yes: draw the horizontal margin line completely to the right and abort loop else { g->setColor(*borderColor); g->drawHLine(px, location.x + size.width, py+1); g->setColor(bColor); g->drawHLine(px + 1, location.x + size.width, py); g->setColor(dColor); g->drawHLine(px + 1, location.x + size.width, py+2); break; } } // draw scrollbars hTopScrollbar->paint(g); hBottomScrollbar->paint(g); vLeftScrollbar->paint(g); vRightScrollbar->paint(g); } void PatternEditorControl::attachPatternEditor(PatternEditor* patternEditor) { if (this->patternEditor) this->patternEditor->removeNotificationListener(this); this->patternEditor = patternEditor; patternEditor->addNotificationListener(this); this->module = patternEditor->getModule(); this->pattern = patternEditor->getPattern(); adjustScrollBarPositionsAndSizes(); } void PatternEditorControl::reset() { patternEditor->reset(); menuInvokeChannel = -1; menuPosX = menuPosY = 0; // clear selection startSelection = false; } void PatternEditorControl::setNumVisibleChannels(pp_int32 channels) { patternEditor->setNumVisibleChannels(channels); adjustScrollBarPositionsAndSizes(); validate(); } pp_int32 PatternEditorControl::getRowCountWidth() { if (pattern == NULL) return 0; if (!properties.prospective) { if (properties.hexCount) return font->getCharWidth()*PatternTools::getHexNumDigits(pattern->rows-1); else return font->getCharWidth()*PatternTools::getDecNumDigits(pattern->rows-1); } else { if (properties.hexCount) return font->getCharWidth()*2; else return font->getCharWidth()*3; } } void PatternEditorControl::adjustExtents() { visibleWidth = size.width - (getRowCountWidth() + 4) - SCROLLBARWIDTH*2; visibleHeight = size.height - (font->getCharHeight() + 4) - SCROLLBARWIDTH*2; slotSize = 10*font->getCharWidth() + 3*1 + 4 + 3*properties.spacing; cursorPositions[0] = 0; cursorPositions[1] = 3 * font->getCharWidth() + 1 + properties.spacing; cursorPositions[2] = cursorPositions[1] + font->getCharWidth(); cursorPositions[3] = cursorPositions[2] + font->getCharWidth() + 1 + properties.spacing; cursorPositions[4] = cursorPositions[3] + font->getCharWidth(); cursorPositions[5] = cursorPositions[4] + font->getCharWidth() + 1 + properties.spacing; cursorPositions[6] = cursorPositions[5] + font->getCharWidth() + 1; cursorPositions[7] = cursorPositions[6] + font->getCharWidth(); cursorPositions[8] = /*cursorPositions[7] + font->getCharWidth() + 1*/slotSize; cursorSizes[0] = 3 * font->getCharWidth(); // note cursorSizes[1] = font->getCharWidth(); // instrument digit 1 cursorSizes[2] = font->getCharWidth(); // instrument digit 2 cursorSizes[3] = font->getCharWidth(); // volume digit 1 cursorSizes[4] = font->getCharWidth(); // volume digit 2 cursorSizes[5] = font->getCharWidth(); // effect "digit" cursorSizes[6] = font->getCharWidth(); // operand digit 1 cursorSizes[7] = font->getCharWidth(); // operand digit 2 } void PatternEditorControl::adjustVerticalScrollBarPositions(mp_sint32 startIndex) { // adjust scrollbar positions if (properties.scrollMode != ScrollModeStayInCenter) { pp_int32 visibleItems = (visibleHeight) / font->getCharHeight(); float v = (float)(pattern->rows - visibleItems); vLeftScrollbar->setBarPosition((pp_int32)(startIndex*(65536.0f/v))); vRightScrollbar->setBarPosition((pp_int32)(startIndex*(65536.0f/v))); } else { float v = (float)patternEditor->getCursor().row / (float)(pattern->rows-1); vLeftScrollbar->setBarPosition((pp_int32)(65536.0f*v)); vRightScrollbar->setBarPosition((pp_int32)(65536.0f*v)); } } void PatternEditorControl::adjustHorizontalScrollBarPositions(mp_sint32 startPos) { pp_int32 visibleItems = (visibleWidth) / slotSize; float v = (float)(patternEditor->getNumChannels() - visibleItems); hTopScrollbar->setBarPosition((pp_int32)(startPos*(65536.0f/v))); hBottomScrollbar->setBarPosition((pp_int32)(startPos*(65536.0f/v))); } void PatternEditorControl::adjustScrollBarSizes() { float s; if (properties.scrollMode != ScrollModeStayInCenter) { s = (float)(visibleHeight) / (float)(pattern->rows*(font->getCharHeight())); } else { //s = (float)(visibleHeight>>1) / (float)((pattern->rows-1)*(font->getCharHeight())); s = 1.0f / (float)pattern->rows; if (s > 1.0f) s = 1.0f; } vLeftScrollbar->setBarSize((pp_int32)(s*65536.0f), false); vRightScrollbar->setBarSize((pp_int32)(s*65536.0f), false); s = (float)(visibleWidth) / (float)(patternEditor->getNumChannels()*slotSize); hTopScrollbar->setBarSize((pp_int32)(s*65536.0f), false); hBottomScrollbar->setBarSize((pp_int32)(s*65536.0f), false); } void PatternEditorControl::adjustScrollBarPositionsAndSizes() { if (pattern == NULL) return; adjustScrollBarSizes(); adjustVerticalScrollBarPositions(startIndex); adjustHorizontalScrollBarPositions(startPos); } void PatternEditorControl::setScrollbarPositions(mp_sint32 startIndex, mp_sint32 startPos) { adjustHorizontalScrollBarPositions(startPos); adjustVerticalScrollBarPositions(startIndex); } void PatternEditorControl::scrollCursorUp() { if (pattern == NULL) return; /*cursor.row--; if (cursor.row < 0) cursor.row = 0;*/ eventKeyDownBinding_UP(); } void PatternEditorControl::scrollCursorDown() { if (pattern == NULL) return; /*cursor.row++; if (cursor.row > pattern->rows - 1) cursor.row = pattern->rows - 1;*/ eventKeyDownBinding_DOWN(); } void PatternEditorControl::assureCursorVisible(bool row/* = true*/, bool channel/* = true*/) { if (pattern == NULL) return; PatternEditorTools::Position& cursor = patternEditor->getCursor(); if (row) { if (cursor.row >= 0) { switch (properties.scrollMode) { case ScrollModeToEnd: { pp_int32 visibleItems = (visibleHeight - font->getCharHeight()) / font->getCharHeight(); if ((startIndex <= cursor.row) && ((cursor.row - startIndex) * font->getCharHeight()) <= (visibleHeight - font->getCharHeight())) { } else if (cursor.row > startIndex && cursor.row + visibleItems < pattern->rows) { //startIndex = cursorPositionRow; startIndex+=(cursor.row-(startIndex+visibleItems)); } else if (cursor.row < startIndex && cursor.row + visibleItems < pattern->rows) { //startIndex = cursorPositionRow; startIndex+=(cursor.row-startIndex); } else { startIndex = cursor.row - visibleItems; if (startIndex < 0) startIndex = 0; } break; } case ScrollModeToCenter: { pp_int32 mid = (visibleHeight/2) / font->getCharHeight(); startIndex = cursor.row - mid; if (startIndex < 0) startIndex = 0; break; } case ScrollModeStayInCenter: { pp_int32 mid = (visibleHeight/2) / font->getCharHeight(); startIndex = cursor.row - mid; break; } } } adjustVerticalScrollBarPositions(startIndex); } if (channel) { if (cursor.channel >= 0) { pp_int32 visibleChannels = ((visibleWidth) / slotSize) - 1; pp_int32 cursorPos = (cursor.channel-startPos) * slotSize + cursorPositions[cursor.inner]; pp_int32 cursorWidth = cursorPositions[cursor.inner+1] - cursorPositions[cursor.inner]; if ((startPos <= cursor.channel) && cursorPos <= visibleWidth - cursorWidth) { } else if (cursor.channel > startPos && cursorPos < visibleWidth - cursorWidth) { startPos+=(cursor.channel-(startPos+visibleChannels)); } else if (cursor.channel < startPos && cursor.channel + visibleChannels < (signed)patternEditor->getNumChannels()) { startPos+=(cursor.channel-startPos); } else { startPos = cursor.channel - visibleChannels; if (startPos < 0) startPos = 0; } } adjustHorizontalScrollBarPositions(startPos); } } mp_sint32 PatternEditorControl::getNextRecordingChannel(mp_sint32 currentChannel) { if (currentChannel < 0 || currentChannel >= TrackerConfig::MAXCHANNELS) return -1; for (pp_int32 i = currentChannel+1; i < currentChannel + 1 + module->header.channum; i++) { pp_int32 c = i % module->header.channum; if (recChannels[c]) return c; } return currentChannel; } void PatternEditorControl::advanceRow(bool assureCursor/* = true*/, bool repaint/* = true*/) { if (!properties.rowAdvance) return; /*if (cursor.row + rowInsertAdd < pattern->rows - 1) { cursor.row+=rowInsertAdd; } else cursor.row = pattern->rows - 1;*/ PatternEditorTools::Position& cursor = patternEditor->getCursor(); cursor.row = (cursor.row + properties.rowInsertAdd)/* % pattern->rows*/; pp_int32 res = 0; if (cursor.row > pattern->rows-1) { res = notifyUpdate(PatternEditorControl::AdvanceCodeWrappedEnd); } if (!res && cursor.row > pattern->rows-1) { cursor.row %= pattern->rows; } if (assureCursor) assureCursorVisible(); if (repaint) parentScreen->paintControl(this); } void PatternEditorControl::advance() { PatternEditorTools::Position& cursor = patternEditor->getCursor(); // Multichannel editing means: // If we're in the note column and a note has been entered // locate cursor to next recording channel if (properties.multiChannelEdit && cursor.inner == 0) cursor.channel = getNextRecordingChannel(cursor.channel); advanceRow(false, false); assureCursorVisible(); } void PatternEditorControl::setRow(pp_int32 row, bool bAssureCursorVisible/* = true*/) { if (pattern == NULL) return; PatternEditorTools::Position& cursor = patternEditor->getCursor(); if (row >= 0 && row < pattern->rows) cursor.row = row; if (bAssureCursorVisible) assureCursorVisible(true, false); } void PatternEditorControl::setChannel(pp_int32 chn, pp_int32 posInner) { if (pattern == NULL) return; PatternEditorTools::Position& cursor = patternEditor->getCursor(); if (chn >= 0 && chn < pattern->channum) cursor.channel = chn; cursor.inner = posInner; assureCursorVisible(false, true); } void PatternEditorControl::validate() { if (pattern == NULL) return; // validate scrollbar sizes adjustScrollBarSizes(); /*float s = (float)(visibleHeight) / (float)(pattern->rows*(font->getCharHeight())); vLeftScrollbar->setBarSize((pp_int32)(s*65536.0f), false); vRightScrollbar->setBarSize((pp_int32)(s*65536.0f), false); s = (float)(visibleWidth) / (float)(numVisibleChannels*slotSize); hTopScrollbar->setBarSize((pp_int32)(s*65536.0f), false); hBottomScrollbar->setBarSize((pp_int32)(s*65536.0f), false);*/ PatternEditorTools::Position& cursor = patternEditor->getCursor(); // validate cursor position if (cursor.channel >= patternEditor->getNumChannels()) { cursor.channel = patternEditor->getNumChannels()-1; assureCursorVisible(false, true); } if (cursor.row >= pattern->rows) { cursor.row = pattern->rows-1; assureCursorVisible(true, false); } pp_int32 visibleItems = (visibleHeight - font->getCharHeight()) / font->getCharHeight(); if (properties.scrollMode != ScrollModeStayInCenter) { if (startIndex + visibleItems > pattern->rows) { startIndex-=(startIndex + visibleItems)-pattern->rows; } if (startIndex < 0) startIndex = 0; } pp_int32 visibleChannels = (visibleWidth) / slotSize; if (startPos + visibleChannels > patternEditor->getNumChannels()) { startPos-=(startPos + visibleChannels)-patternEditor->getNumChannels(); } if (startPos < 0) startPos = 0; // validate selection /*flattenSelection(); if ((selectionStart.channel >= 0 && selectionStart.channel > numVisibleChannels-1) || (selectionStart.row >= 0 && selectionStart.row > pattern->rows-1)) { resetSelection(); return; } if (selectionEnd.channel >= 0 && selectionEnd.channel > numVisibleChannels-1) selectionEnd.channel = numVisibleChannels-1; if (selectionEnd.row >= 0 && selectionEnd.row > pattern->rows-1) selectionEnd.row = pattern->rows-1;*/ } bool PatternEditorControl::hasValidSelection() const { return patternEditor->hasValidSelection(); } void PatternEditorControl::markChannel(pp_int32 channel, bool invert/* = true*/) { PatternEditor::Selection currentSelection = patternEditor->getSelection(); if (currentSelection.start.channel == channel && currentSelection.start.row == 0 && currentSelection.end.channel == channel && currentSelection.end.row == pattern->rows - 1 && invert) { patternEditor->resetSelection(); } else { patternEditor->selectChannel(channel); } } void PatternEditorControl::selectAll() { patternEditor->selectAll(); } void PatternEditorControl::deselectAll() { patternEditor->resetSelection(); } void PatternEditorControl::executeMenuCommand(pp_int32 commandId) { switch (commandId) { case MenuCommandIDMuteChannel: { muteChannels[menuInvokeChannel] = !muteChannels[menuInvokeChannel]; PPEvent e(eValueChanged, &muteChannels, sizeof(muteChannels)); eventListener->handleEvent(reinterpret_cast(this), &e); break; } case MenuCommandIDSoloChannel: { for (pp_uint32 i = 0; i < sizeof(muteChannels)/sizeof(pp_uint8); i++) muteChannels[i] = true; muteChannels[menuInvokeChannel] = false; PPEvent e(eValueChanged, &muteChannels, sizeof(muteChannels)); eventListener->handleEvent(reinterpret_cast(this), &e); break; } case MenuCommandIDUnmuteAll: { for (pp_uint32 i = 0; i < sizeof(muteChannels)/sizeof(pp_uint8); i++) muteChannels[i] = false; PPEvent e(eValueChanged, &muteChannels, sizeof(muteChannels)); eventListener->handleEvent(reinterpret_cast(this), &e); break; } // cut case MenuCommandIDCut: eventKeyCharBinding_Cut(); break; // copy case MenuCommandIDCopy: eventKeyCharBinding_Copy(); break; // paste case MenuCommandIDPaste: eventKeyCharBinding_Paste(); break; // transparent paste case MenuCommandIDPorousPaste: eventKeyCharBinding_TransparentPaste(); break; // mark all case MenuCommandIDSelectAll: eventKeyCharBinding_SelectAll(); break; // mark channel case MenuCommandIDSelectChannel: markChannel(menuInvokeChannel); break; case MenuCommandIDUndo: patternEditor->undo(); break; case MenuCommandIDRedo: patternEditor->redo(); break; case MenuCommandIDSwapChannels: patternEditor->swapChannels(patternEditor->getCursor().channel, menuInvokeChannel); break; } // Hack: if (parentScreen->getContextMenuControl() == editMenuControl) { menuInvokeChannel = -1; lastMenuInvokeChannel = -1; } } void PatternEditorControl::switchEditMode(EditModes mode) { switch (mode) { case EditModeMilkyTracker: { // Assign keyboard bindings eventKeyDownBindings = eventKeyDownBindingsMilkyTracker; scanCodeBindings = scanCodeBindingsMilkyTracker; selectionKeyModifier = KeyModifierSHIFT; break; } case EditModeFastTracker: { // Assign keyboard bindings eventKeyDownBindings = eventKeyDownBindingsFastTracker; scanCodeBindings = scanCodeBindingsFastTracker; selectionKeyModifier = KeyModifierALT; break; } } editMode = mode; } void PatternEditorControl::unmuteAll() { memset(muteChannels, 0, sizeof(muteChannels)); PPEvent e(eValueChanged, &muteChannels, sizeof(muteChannels)); eventListener->handleEvent(reinterpret_cast(this), &e); } void PatternEditorControl::setRecordMode(bool b) { cursorColor = b ? &TrackerConfig::colorPatternEditorCursorLineHighLight : &TrackerConfig::colorPatternEditorCursorLine; } void PatternEditorControl::editorNotification(EditorBase* sender, EditorBase::EditorNotifications notification) { switch (notification) { case PatternEditor::EditorDestruction: { patternEditor = NULL; break; } case PatternEditor::NotificationReload: { pattern = patternEditor->getPattern(); module = patternEditor->getModule(); adjustScrollBarPositionsAndSizes(); validate(); break; } case PatternEditor::NotificationChanges: { bool lazyUpdateNotifications = patternEditor->getLazyUpdateNotifications(); bool numRowsChanged = patternEditor->getLastOperationDidChangeRows(); bool cursorChanged = patternEditor->getLastOperationDidChangeCursor(); // if this is a lazy notification it means we're only // notifying that something has changed, instead of refreshing the screen // which means that the screen is probably refreshed somewhere else // and the notification itself comes actually from this control if (lazyUpdateNotifications) { notifyChanges(); return; } notifyChanges(); if (numRowsChanged) adjustScrollBarPositionsAndSizes(); if (cursorChanged) assureCursorVisible(); validate(); parentScreen->paintControl(this, false); break; } case PatternEditor::NotificationFeedUndoData: { undoInfo = UndoInfo(startIndex, startPos); patternEditor->setUndoUserData(&undoInfo, sizeof(undoInfo)); break; } case PatternEditor::NotificationFetchUndoData: if (sizeof(undoInfo) == patternEditor->getUndoUserDataLen()) { memcpy(&undoInfo, patternEditor->getUndoUserData(), sizeof(undoInfo)); assureCursorVisible(); setScrollbarPositions(undoInfo.startIndex, undoInfo.startPos); validate(); parentScreen->paintControl(this, false); notifyUpdate(); } break; default: break; } } MilkyTracker-1.02.00/src/tracker/PatternEditorControl.h000066400000000000000000000406471324432207300230060ustar00rootroot00000000000000/* * tracker/PatternEditorControl.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ ///////////////////////////////////////////////////////////////// // // PatternEditorTools control class // ///////////////////////////////////////////////////////////////// #ifndef PATTERNEDITORCONTROL__H #define PATTERNEDITORCONTROL__H #include "BasicTypes.h" #include "Control.h" #include "Event.h" #include "PatternEditor.h" #include "ScrollBar.h" #include "PatternTools.h" #include "EditModes.h" #include "TrackerConfig.h" // Forwards ------------------------------------------------------ class PPScrollbar; class PPFont; class PPContextMenu; class PPDialogBase; class PatternEditorControl; typedef void (PatternEditorControl::*TPatternEditorKeyBindingHandler)(); typedef pp_int32 (PatternEditor::*TTransposeFunc)(const PatternEditorTools::TransposeParameters& transposeParameters, bool evaluate); template class PPKeyBindings; class PatternEditorControl : public PPControl, public EventListenerInterface, public EditorBase::EditorNotificationListener, public PatternEditor::PatternAdvanceInterface { private: struct SongPos { pp_int32 orderListIndex, row; }; struct UndoInfo { pp_int32 startIndex; pp_int32 startPos; UndoInfo() { } UndoInfo(pp_int32 startIndex, pp_int32 startPos) : startIndex(startIndex), startPos(startPos) { } } undoInfo; PPColor bgColor; const PPColor* borderColor; const PPColor* cursorColor; const PPColor* selectionColor; bool border; struct Properties { bool showFocus; bool rowAdvance; pp_int32 rowInsertAdd; pp_uint32 spacing, highlightSpacingPrimary, highlightSpacingSecondary; bool highLightRowPrimary, highLightRowSecondary; bool hexCount; bool wrapAround; bool prospective; bool tabToNote; bool clickToCursor; bool multiChannelEdit; ScrollModes scrollMode; pp_uint32 muteFade; char zeroEffectCharacter; bool ptNoteLimit; Properties() : showFocus(true), rowAdvance(true), rowInsertAdd(1), spacing(0), highlightSpacingPrimary(4), highlightSpacingSecondary(8), highLightRowPrimary(false), highLightRowSecondary(false), hexCount(true), wrapAround(true), prospective(false), tabToNote(true), clickToCursor(true), multiChannelEdit(false), scrollMode(ScrollModeToEnd), muteFade(32768), zeroEffectCharacter('\xf4'), ptNoteLimit(false) { } } properties; PPFont* font; PPScrollbar* hTopScrollbar; PPScrollbar* hBottomScrollbar; PPScrollbar* vLeftScrollbar; PPScrollbar* vRightScrollbar; PPControl* caughtControl; bool controlCaughtByLMouseButton, controlCaughtByRMouseButton; PatternEditor* patternEditor; XModule* module; TXMPattern* pattern; pp_int32 currentOrderlistIndex; SongPos songPos; PatternTools patternTools; pp_int32 startIndex; pp_int32 startPos; pp_int32 visibleWidth; pp_int32 visibleHeight; pp_int32 slotSize; pp_uint8 muteChannels[TrackerConfig::MAXCHANNELS]; pp_uint8 recChannels[TrackerConfig::MAXCHANNELS]; // Cursor position within editor pp_int32 cursorPositions[9]; pp_int32 cursorSizes[8]; PatternEditorTools::Position cursorCopy, preCursor, *ppreCursor; bool startSelection; bool keyboardStartSelection; bool assureUpdate, assureCursor; pp_int32 selectionTicker; bool hasDragged; // edit menu pp_int32 menuPosX; pp_int32 menuPosXOffset; pp_int32 menuPosY; pp_int32 menuInvokeChannel; pp_int32 lastMenuInvokeChannel; PPContextMenu* editMenuControl; // Keyboard shortcuts PPKeyBindings* eventKeyDownBindings; PPKeyBindings* scanCodeBindings; PPKeyBindings* eventKeyDownBindingsMilkyTracker; PPKeyBindings* scanCodeBindingsMilkyTracker; PPKeyBindings* eventKeyDownBindingsFastTracker; PPKeyBindings* scanCodeBindingsFastTracker; // Edit mode EditModes editMode; pp_int32 selectionKeyModifier; public: PatternEditorControl(pp_int32 id, PPScreen* parentScreen, EventListenerInterface* eventListener, const PPPoint& location, const PPSize& size, bool border = true); virtual ~PatternEditorControl(); void setColor(PPColor color) { bgColor = color; } void setFont(PPFont* font); void setShowFocus(bool showFocus) { properties.showFocus = showFocus; } void setScrollMode(ScrollModes mode) { properties.scrollMode = mode; adjustScrollBarPositionsAndSizes(); assureCursorVisible(); } // from PPControl virtual void setSize(const PPSize& size); virtual void setLocation(const PPPoint& location); virtual void paint(PPGraphicsAbstract* graphics); virtual bool gainsFocus() const { return true; } virtual bool gainedFocusByMouse() const { return caughtControl == NULL; } virtual pp_int32 dispatchEvent(PPEvent* event); // from EventListenerInterface pp_int32 handleEvent(PPObject* sender, PPEvent* event); void attachPatternEditor(PatternEditor* patternEditor); void reset(); bool isDraggingVertical() const { return (caughtControl == vLeftScrollbar) || (caughtControl == vRightScrollbar); } // set number of visible channels, if this is -1 it will dynamically adjust it void setNumVisibleChannels(pp_int32 numChannels); pp_int32 getRowInsertAdd() { return properties.rowInsertAdd; } void setRowInsertAdd(pp_int32 rowInsertAdd) { properties.rowInsertAdd = rowInsertAdd; } void increaseRowInsertAdd() { properties.rowInsertAdd = (properties.rowInsertAdd+1) % 17; } void decreaseRowInsertAdd() { properties.rowInsertAdd--; if (properties.rowInsertAdd == -1) properties.rowInsertAdd = 16; } void setOrderlistIndex(pp_int32 currentOrderlistIndex) { this->currentOrderlistIndex = currentOrderlistIndex; } void setRow(pp_int32 row, bool bAssureCursorVisible = true); pp_int32 getRow() { return patternEditor->getCursor().row; } void setSongPosition(pp_int32 currentOrderlistIndex, pp_int32 row) { songPos.row = row; songPos.orderListIndex = currentOrderlistIndex; } void getSongPosition(pp_int32& currentOrderlistIndex, pp_int32& row) { row = songPos.row; currentOrderlistIndex = songPos.orderListIndex; } void setChannel(pp_int32 chn, pp_int32 posInner); pp_int32 getCurrentChannel() const { return patternEditor->getCursor().channel; } pp_int32 getCurrentRow() const { return patternEditor->getCursor().row; } pp_int32 getCursorPosInner() const { return patternEditor->getCursor().inner; } pp_int32 ScanCodeToNote(pp_int16 keyCode); void setCurrentInstrument(pp_int32 ins) { patternEditor->setCurrentInstrument(ins); } void enableInstrument(bool b) { patternEditor->enableInstrument(b); } bool isInstrumentEnabled() const { return patternEditor->isInstrumentEnabled(); } void setInstrumentBackTrace(bool b) { patternEditor->setInstrumentBackTrace(b); } bool hasValidSelection() const; ////////////////////////////////////////////////////////////////////////// // --- more flags coming ////////////////////////////////////////////////////////////////////////// void setSpacing(pp_uint32 spacing) { properties.spacing = spacing; } void setHighlightSpacingPrimary(pp_uint32 spacing) { properties.highlightSpacingPrimary = spacing; } void setHighLightRowPrimary(bool b) { properties.highLightRowPrimary = b; } void setHighlightSpacingSecondary(pp_uint32 spacing) { properties.highlightSpacingSecondary = spacing; } void setHighLightRowSecondary(bool b) { properties.highLightRowSecondary = b; } // use zero effect zeros void showZeroEffect(bool b) { properties.zeroEffectCharacter = (b ? '0' : '\xf4'); } // hex count void setHexCount(bool b) { properties.hexCount = b; } // set prospective mode void setProspective(bool b) { properties.prospective = b; } bool getProspective() const { return properties.prospective; } // set wraparound mode void setWrapAround(bool b) { properties.wrapAround = b; } bool getWrapAround() const { return properties.wrapAround; } // set tab to note void setTabToNote(bool b) { properties.tabToNote = b; } bool getTabToNote() const { return properties.tabToNote; } // mouse click allows cursor-repositioning void setClickToCursor(bool b) { properties.clickToCursor = b; } bool getClickToCursor() const { return properties.clickToCursor; } // autoresize void setAutoResize(bool b) { patternEditor->setAutoResize(b); } bool getAutoResize() { return patternEditor->getAutoResize(); } // multichannel edit void setMultiChannelEdit(bool b) { properties.multiChannelEdit = b; } // Highlight notes outside the PT 3 octave limit void setPtNoteLimit(bool l) { properties.ptNoteLimit = l; } void setRowAdvance(bool b) { properties.rowAdvance = b; } void switchEditMode(EditModes mode); void setMuteFade(pp_int32 fade) { if (fade > 65536) fade = 65536; if (fade < 0) fade = 0; properties.muteFade = fade; } void muteChannel(pp_int32 index, bool b) { muteChannels[index] = (b ? 1 : 0); } void recordChannel(pp_int32 index, bool b) { recChannels[index] = (b ? 1 : 0); } void unmuteAll(); void setRecordMode(bool b); void advanceRow(bool assureCursor = true, bool repaint = true); PatternEditor* getPatternEditor() const { return patternEditor; } // --- these are defined in PatternEditorControlTransposeHandler.cpp ----- void showNoteTransposeWarningMessageBox(pp_int32 fuckups); pp_int32 noteTransposeTrack(const PatternEditorTools::TransposeParameters& transposeParameters); pp_int32 noteTransposePattern(const PatternEditorTools::TransposeParameters& transposeParameters); pp_int32 noteTransposeSelection(const PatternEditorTools::TransposeParameters& transposeParameters); private: // --- Transpose handler class TransposeHandlerResponder : public DialogResponder { private: PatternEditorControl& patternEditorControl; PatternEditorTools::TransposeParameters transposeParameters; TTransposeFunc transposeFunc; public: TransposeHandlerResponder(PatternEditorControl& thePatternEditorControl); void setTransposeParameters(const PatternEditorTools::TransposeParameters& transposeParameters) { this->transposeParameters = transposeParameters; } void setTransposeFunc(TTransposeFunc transposeFunc) { this->transposeFunc = transposeFunc; } virtual pp_int32 ActionOkay(PPObject* sender); virtual pp_int32 ActionCancel(PPObject* sender); }; friend class TransposeHandlerResponder; PPDialogBase* dialog; TransposeHandlerResponder* transposeHandlerResponder; private: pp_int32 getRowCountWidth(); void adjustExtents(); void adjustVerticalScrollBarPositions(mp_sint32 startIndex); void adjustHorizontalScrollBarPositions(mp_sint32 startPos); void adjustScrollBarPositionsAndSizes(); void adjustScrollBarSizes(); void setScrollbarPositions(mp_sint32 startIndex, mp_sint32 startPos); void scrollCursorDown(); void scrollCursorUp(); void assureCursorVisible(bool row = true, bool channel = true); mp_sint32 getNextRecordingChannel(mp_sint32 currentChannel); virtual void advance(); void validate(); // ------- menu stuff ------------------------------------------ enum MenuCommandIDs { MenuCommandIDMuteChannel = 100, MenuCommandIDSoloChannel, MenuCommandIDUnmuteAll, MenuCommandIDSelectChannel, MenuCommandIDPorousPaste, MenuCommandIDSwapChannels, }; void invokeMenu(pp_int32 channel, const PPPoint& p); void executeMenuCommand(pp_int32 commandId); void handleDeleteKey(pp_uint16 keyCode, pp_int32& result); void handleKeyChar(pp_uint8 character); void handleKeyDown(pp_uint16 keyCode, pp_uint16 scanCode, pp_uint16 character); // mark channel void markChannel(pp_int32 channel, bool invert = true); // select ALL void selectAll(); // deselect ALL void deselectAll(); enum RMouseDownActions { RMouseDownActionInvalid, RMouseDownActionFirstRClick, RMouseDownActionFirstLClick, RMouseDownActionSecondLClick }; RMouseDownActions lastAction; pp_int32 RMouseDownInChannelHeading; pp_int32 pointInChannelHeading(PPPoint& cp); bool isSoloChannel(pp_int32 c); private: bool executeBinding(const PPKeyBindings* bindings, pp_uint16 keyCode); void initKeyBindings(); // Original FT2 bindings void eventKeyDownBinding_LEFT(); void eventKeyDownBinding_RIGHT(); void eventKeyDownBinding_UP(); void eventKeyDownBinding_DOWN(); void eventKeyDownBinding_PRIOR(); void eventKeyDownBinding_NEXT(); void eventKeyDownBinding_HOME(); void eventKeyDownBinding_END(); void eventKeyDownBinding_FIRSTQUARTER(); void eventKeyDownBinding_SECONDQUARTER(); void eventKeyDownBinding_THIRDQUARTER(); void eventKeyDownBinding_ReadMacro1(); void eventKeyDownBinding_ReadMacro2(); void eventKeyDownBinding_ReadMacro3(); void eventKeyDownBinding_ReadMacro4(); void eventKeyDownBinding_ReadMacro5(); void eventKeyDownBinding_ReadMacro6(); void eventKeyDownBinding_ReadMacro7(); void eventKeyDownBinding_ReadMacro8(); void eventKeyDownBinding_ReadMacro9(); void eventKeyDownBinding_ReadMacro0(); void eventKeyDownBinding_WriteMacro1(); void eventKeyDownBinding_WriteMacro2(); void eventKeyDownBinding_WriteMacro3(); void eventKeyDownBinding_WriteMacro4(); void eventKeyDownBinding_WriteMacro5(); void eventKeyDownBinding_WriteMacro6(); void eventKeyDownBinding_WriteMacro7(); void eventKeyDownBinding_WriteMacro8(); void eventKeyDownBinding_WriteMacro9(); void eventKeyDownBinding_WriteMacro0(); void eventKeyDownBinding_SC_Q(); void eventKeyDownBinding_SC_W(); void eventKeyDownBinding_SC_E(); void eventKeyDownBinding_SC_R(); void eventKeyDownBinding_SC_T(); void eventKeyDownBinding_SC_Z(); void eventKeyDownBinding_SC_U(); void eventKeyDownBinding_SC_I(); void eventKeyDownBinding_SC_A(); void eventKeyDownBinding_SC_S(); void eventKeyDownBinding_SC_D(); void eventKeyDownBinding_SC_F(); void eventKeyDownBinding_SC_G(); void eventKeyDownBinding_SC_H(); void eventKeyDownBinding_SC_J(); void eventKeyDownBinding_SC_K(); void eventKeyDownBinding_SC_IncreaseRowInsertAdd(); void eventKeyDownBinding_SC_DecreaseRowInsertAdd(); void eventKeyDownBinding_PreviousChannel(); void eventKeyDownBinding_NextChannel(); void eventKeyDownBinding_DeleteNote(); void eventKeyDownBinding_DeleteNoteVolumeAndEffect(); void eventKeyDownBinding_DeleteVolumeAndEffect(); void eventKeyDownBinding_DeleteEffect(); void eventKeyDownBinding_InsertNote(); void eventKeyDownBinding_InsertLine(); void eventKeyDownBinding_DeleteNoteSlot(); void eventKeyDownBinding_DeleteLine(); void eventKeyDownBinding_InsIncSelection(); void eventKeyDownBinding_InsDecSelection(); void eventKeyDownBinding_InsIncTrack(); void eventKeyDownBinding_InsDecTrack(); void eventKeyDownBinding_CutTrack(); void eventKeyDownBinding_CopyTrack(); void eventKeyDownBinding_PasteTrack(); void eventKeyDownBinding_TransparentPasteTrack(); void eventKeyDownBinding_CutPattern(); void eventKeyDownBinding_CopyPattern(); void eventKeyDownBinding_PastePattern(); void eventKeyDownBinding_TransparentPastePattern(); void eventKeyCharBinding_Undo(); void eventKeyCharBinding_Redo(); void eventKeyCharBinding_Cut(); // Operates on block void eventKeyCharBinding_Copy(); // Operates on block void eventKeyCharBinding_Paste(); // Operates on block void eventKeyCharBinding_TransparentPaste(); void eventKeyCharBinding_SelectAll(); void eventKeyCharBinding_MuteChannel(); void eventKeyCharBinding_InvertMuting(); void eventKeyCharBinding_Interpolate(); public: enum AdvanceCodes { AdvanceCodeJustUpdate, AdvanceCodeCursorUpWrappedStart, AdvanceCodeCursorDownWrappedEnd, AdvanceCodeCursorPageUpWrappedStart, AdvanceCodeCursorPageDownWrappedEnd, AdvanceCodeWrappedEnd, AdvanceCodeSelectNewRow }; private: virtual void editorNotification(EditorBase* sender, EditorBase::EditorNotifications notification); pp_int32 notifyUpdate(pp_int32 code = AdvanceCodeJustUpdate) { PPEvent e(eUpdated, &code, sizeof(code)); return eventListener->handleEvent(reinterpret_cast(this), &e); } }; #endif MilkyTracker-1.02.00/src/tracker/PatternEditorControlEventListener.cpp000066400000000000000000000657061324432207300260540ustar00rootroot00000000000000/* * tracker/PatternEditorControlEventListener.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * PatternEditorControlEventListener.cpp * MilkyTracker * * Created by Peter Barth on Fri Mar 11 2005. * */ #include "PatternEditorControl.h" #include "Event.h" #include "Screen.h" #include "Font.h" #include "ScrollBar.h" #include "Menu.h" #include "XModule.h" #include "ContextMenu.h" #include "Undo.h" #define SCROLLBARWIDTH SCROLLBUTTONSIZE pp_int32 PatternEditorControl::dispatchEvent(PPEvent* event) { if (pattern == NULL) return -1; if (eventListener == NULL) return -1; switch (event->getID()) { case eFocusGained: case eFocusGainedNoRepaint: { hasFocus = true; if (menuInvokeChannel != -1) { lastMenuInvokeChannel = menuInvokeChannel; menuInvokeChannel = -1; //parentScreen->paintControl(this); } if (event->getID() == eFocusGained) parentScreen->paintControl(this); //resetKeyModifier(); goto leave; } case eFocusLost: { hasFocus = false; parentScreen->paintControl(this); //resetKeyModifier(); goto leave; } case eFocusLostNoRepaint: { hasFocus = false; //resetKeyModifier(); goto leave; } case eMouseWheelMoved: { TMouseWheelEventParams* params = (TMouseWheelEventParams*)event->getDataPtr(); // Vertical scrolling takes priority over horizontal scrolling and is mutually // exclusive from horizontal scrolling. if (params->deltaY) { PPEvent e = params->deltaY < 0 ? PPEvent(eBarScrollDown) : PPEvent(eBarScrollUp); handleEvent(reinterpret_cast(vLeftScrollbar), &e); } else if (params->deltaX) { PPEvent e = params->deltaX > 0 ? PPEvent(eBarScrollDown) : PPEvent(eBarScrollUp); handleEvent(reinterpret_cast(hBottomScrollbar), &e); } event->cancel(); break; } case eRMouseDown: { PPPoint* p = (PPPoint*)event->getDataPtr(); if (hTopScrollbar->hit(*p)) { if (controlCaughtByLMouseButton) break; controlCaughtByRMouseButton = true; caughtControl = hTopScrollbar; caughtControl->dispatchEvent(event); } else if (hBottomScrollbar->hit(*p)) { if (controlCaughtByLMouseButton) break; controlCaughtByRMouseButton = true; caughtControl = hBottomScrollbar; caughtControl->dispatchEvent(event); } // Clicked on vertical scrollbar -> route event to scrollbar and catch scrollbar control else if (vLeftScrollbar->hit(*p)) { if (controlCaughtByLMouseButton) break; controlCaughtByRMouseButton = true; caughtControl = vLeftScrollbar; caughtControl->dispatchEvent(event); } else if (vRightScrollbar->hit(*p)) { if (controlCaughtByLMouseButton) break; controlCaughtByRMouseButton = true; caughtControl = vRightScrollbar; caughtControl->dispatchEvent(event); } else { RMouseDownInChannelHeading = -1; lastAction = RMouseDownActionFirstRClick; PPPoint cp = *p; cp.x-=location.x + SCROLLBARWIDTH + getRowCountWidth() + 4; cp.y-=location.y + SCROLLBARWIDTH + font->getCharHeight() + 4; if (cp.x < 0) break; // right click on channel number if ((RMouseDownInChannelHeading = pointInChannelHeading(cp)) != -1) { goto leave; } else if (cp.y < 0) break; pp_int32 i = (cp.x / slotSize) + startPos; if (i < 0 || i > patternEditor->getNumChannels()-1) break; invokeMenu(i, *p); } goto leave; } case eRMouseUp: { controlCaughtByRMouseButton = false; if (caughtControl && !controlCaughtByLMouseButton && !controlCaughtByRMouseButton) { caughtControl->dispatchEvent(event); caughtControl = NULL; break; } PPPoint cp = *((PPPoint*)event->getDataPtr()); cp.x-=location.x + SCROLLBARWIDTH + getRowCountWidth() + 4; cp.y-=location.y + SCROLLBARWIDTH + font->getCharHeight() + 4; if (cp.x < 0 || RMouseDownInChannelHeading == -1) break; // right click on channel number if ((menuInvokeChannel = pointInChannelHeading(cp)) != -1 && menuInvokeChannel == RMouseDownInChannelHeading && lastAction == RMouseDownActionFirstRClick) { RMouseDownInChannelHeading = -1; parentScreen->paintControl(this); executeMenuCommand(MenuCommandIDMuteChannel); menuInvokeChannel = lastMenuInvokeChannel = -1; parentScreen->paintControl(this); goto leave; } RMouseDownInChannelHeading = -1; menuInvokeChannel = -1; parentScreen->paintControl(this); break; } case eLMouseDown: { hasDragged = false; PPPoint* p = (PPPoint*)event->getDataPtr(); // Clicked on horizontal scrollbar -> route event to scrollbar and catch scrollbar control if (hTopScrollbar->hit(*p)) { if (controlCaughtByRMouseButton) break; controlCaughtByLMouseButton = true; caughtControl = hTopScrollbar; caughtControl->dispatchEvent(event); } else if (hBottomScrollbar->hit(*p)) { if (controlCaughtByRMouseButton) break; controlCaughtByLMouseButton = true; caughtControl = hBottomScrollbar; caughtControl->dispatchEvent(event); } // Clicked on vertical scrollbar -> route event to scrollbar and catch scrollbar control else if (vLeftScrollbar->hit(*p)) { if (controlCaughtByRMouseButton) break; controlCaughtByLMouseButton = true; caughtControl = vLeftScrollbar; caughtControl->dispatchEvent(event); } else if (vRightScrollbar->hit(*p)) { if (controlCaughtByRMouseButton) break; controlCaughtByLMouseButton = true; caughtControl = vRightScrollbar; caughtControl->dispatchEvent(event); } // Clicked in client area else { PPPoint cp = *p; cp.x-=location.x + SCROLLBARWIDTH + getRowCountWidth() + 4; cp.y-=location.y + SCROLLBARWIDTH + font->getCharHeight() + 4; if (cp.y < -((pp_int32)font->getCharHeight() + 6)) break; if (cp.x < -(getRowCountWidth() + 4)) break; // select new row by clicking on row number if (cp.x < -3) { pp_int32 newStartIndex = cp.y / font->getCharHeight(); pp_int32 newStartPos = cp.x / slotSize; pp_int32 visibleRows = (visibleHeight) / font->getCharHeight(); pp_int32 visibleChannels = (visibleWidth) / slotSize; // copy of current selection patternEditor->getSelection().backup(); preCursor = patternEditor->getCursor(); if (newStartIndex < visibleRows && newStartIndex >= 0) { if (newStartIndex + startIndex < 0) break; preCursor.row = newStartIndex + startIndex; } ppreCursor = &preCursor; break; } else if (cp.x < 0) { break; } pp_int32 i; if ((i = pointInChannelHeading(cp)) != -1) { // Special commands // Right button is pressed and left button is pressed if (::getKeyModifier() & KeyModifierALT) { RMouseDownInChannelHeading = i; lastAction = RMouseDownActionSecondLClick; } if (RMouseDownInChannelHeading == i) { if (lastAction == RMouseDownActionFirstRClick || lastAction == RMouseDownActionSecondLClick) { if (isSoloChannel(i)) goto unmuteAll; menuInvokeChannel = i; executeMenuCommand(MenuCommandIDSoloChannel); parentScreen->paintControl(this); lastAction = RMouseDownActionFirstLClick; hasDragged = true; goto leave; } else if (lastAction == RMouseDownActionFirstLClick) { unmuteAll: menuInvokeChannel = i; executeMenuCommand(MenuCommandIDUnmuteAll); parentScreen->paintControl(this); lastAction = RMouseDownActionSecondLClick; hasDragged = true; goto leave; } } if (i == lastMenuInvokeChannel) { lastMenuInvokeChannel = -1; goto leave; } // show menu pp_int32 menuPosY = location.y + SCROLLBARWIDTH + 1 + font->getCharHeight(); pp_int32 menuPosX = location.x + SCROLLBARWIDTH + getRowCountWidth() + 4 + slotSize * (i - startPos); PPPoint p2(menuPosX, menuPosY); invokeMenu(i, p2); goto leave; } else if (cp.y < 0) break; pp_int32 newStartIndex = cp.y / font->getCharHeight(); pp_int32 newStartPos = cp.x / slotSize; pp_int32 visibleRows = (visibleHeight) / font->getCharHeight(); pp_int32 visibleChannels = (visibleWidth) / slotSize; // copy of current selection patternEditor->getSelection().backup(); // If we're pressing the shift key start selection // at current cursor position if (::getKeyModifier() & selectionKeyModifier) { if (patternEditor->getSelection().start.isValid()) patternEditor->getSelection().end = patternEditor->getCursor(); else patternEditor->getSelection().start = patternEditor->getCursor(); } preCursor = patternEditor->getCursor(); if (newStartIndex < visibleRows && newStartIndex >= 0) { if (newStartIndex + startIndex < 0) break; preCursor.row = newStartIndex + startIndex; } if (newStartPos < visibleHeight && newStartPos >= 0) { selectionTicker = 0; startSelection = true; if (newStartPos + startPos < 0) break; preCursor.channel = newStartPos + startPos; if (preCursor.channel >= patternEditor->getNumChannels()) break; // start selecting row if (!(::getKeyModifier() & selectionKeyModifier)) { patternEditor->getSelection().start.channel = patternEditor->getSelection().end.channel = preCursor.channel; patternEditor->getSelection().start.row = patternEditor->getSelection().end.row = preCursor.row; } else { patternEditor->getSelection().end.channel = preCursor.channel; patternEditor->getSelection().end.row = preCursor.row; } pp_int32 innerPos = cp.x % slotSize; preCursor.inner = 0; if (!(::getKeyModifier() & selectionKeyModifier)) patternEditor->getSelection().start.inner = 0; patternEditor->getSelection().end.inner = 0; for (pp_uint32 i = 0; i < sizeof(cursorPositions) - 1; i++) { if (innerPos >= cursorPositions[i] && innerPos < cursorPositions[i+1]) { preCursor.inner = i; if (!(::getKeyModifier() & selectionKeyModifier)) patternEditor->getSelection().start.inner = i; patternEditor->getSelection().end.inner = i; break; } } } ppreCursor = &preCursor; //parentScreen->paintControl(this); } break; } case eLMouseUp: controlCaughtByLMouseButton = false; if (caughtControl && !controlCaughtByLMouseButton && !controlCaughtByRMouseButton) { caughtControl->dispatchEvent(event); caughtControl = NULL; break; } menuInvokeChannel = -1; if (!hasDragged && !(::getKeyModifier() & selectionKeyModifier) && ppreCursor) { if (properties.clickToCursor) { patternEditor->setCursor(*ppreCursor); notifyUpdate(AdvanceCodeSelectNewRow); switch (properties.scrollMode) { case ScrollModeToCenter: case ScrollModeStayInCenter: assureCursorVisible(); break; case ScrollModeToEnd: break; } } patternEditor->resetSelection(); } parentScreen->paintControl(this); startSelection = false; ppreCursor = NULL; break; case eLMouseDrag: { if (caughtControl && controlCaughtByLMouseButton) { caughtControl->dispatchEvent(event); break; } if (!startSelection) break; hasDragged = true; goto markSelection; //break; } case eRMouseDrag: { if (caughtControl && controlCaughtByRMouseButton) caughtControl->dispatchEvent(event); break; } case eRMouseRepeat: { if (caughtControl && controlCaughtByRMouseButton) caughtControl->dispatchEvent(event); break; } case eLMouseRepeat: { if (caughtControl && controlCaughtByLMouseButton) { caughtControl->dispatchEvent(event); break; } // for slowing down mouse pressed events selectionTicker++; if (selectionTicker&1) break; // no selection has been made or mouse hasn't been dragged if (!startSelection || !hasDragged) { // mouse hasn't been dragged and selection ticker has reached threshold value if (!hasDragged && selectionTicker > 0) { // get point PPPoint* p = (PPPoint*)event->getDataPtr(); // make sure scrollbars weren't pressed if (!hTopScrollbar->hit(*p) && !hBottomScrollbar->hit(*p) && !vLeftScrollbar->hit(*p) && !vRightScrollbar->hit(*p)) { // translate into local coordinate system PPPoint cp = *p; cp.x-=location.x + SCROLLBARWIDTH + getRowCountWidth() + 4; cp.y-=location.y + SCROLLBARWIDTH + font->getCharHeight() + 4; // not in our local CS if (cp.x < 0 || cp.y < 0) break; // valid channel? pp_int32 i = (cp.x / slotSize) + startPos; if (i < 0 || i > patternEditor->getNumChannels()-1) break; // restore last selection // will be made when mouse left mouse button is pressed if (patternEditor->getSelection().isCopyValid()) { patternEditor->getSelection().restore(); } // No more cursor positioning ppreCursor = NULL; invokeMenu(i, *p); // we're finished with event handling here goto leave; } } break; } markSelection: PPPoint cp = *((PPPoint*)event->getDataPtr()); PPPoint cp2 = cp; cp.x-=location.x + SCROLLBARWIDTH + getRowCountWidth() + 4; cp.y-=location.y + SCROLLBARWIDTH + font->getCharHeight() + 4; cp2.x-=location.x; cp2.y-=location.y; if (cp2.x > size.width - SCROLLBARWIDTH /*- (slotSize>>1)*/) { if (startPos + (visibleWidth / slotSize) < patternEditor->getNumChannels()) startPos++; } else if (cp2.x < SCROLLBARWIDTH + (signed)getRowCountWidth() + 4) { if (startPos > 0) startPos--; } if (cp2.y > size.height - SCROLLBARWIDTH /*- ((signed)font->getCharHeight()*3)*/) { if (properties.scrollMode != ScrollModeStayInCenter) { if (startIndex + (visibleHeight / font->getCharHeight()) < pattern->rows) startIndex++; } else { scrollCursorDown(); assureCursorVisible(true, false); } } else if (cp2.y < SCROLLBARWIDTH + ((signed)font->getCharHeight()*4 /*+ 4*/)) { if (properties.scrollMode != ScrollModeStayInCenter) { if (startIndex > 0) startIndex--; } else { scrollCursorUp(); assureCursorVisible(true, false); } } if (cp.x < 0) { cp.x = 0; //goto leave; } if (cp.y < 0) { cp.y = 0; //goto leave; } pp_int32 newStartIndex = cp.y / font->getCharHeight(); pp_int32 newStartPos = cp.x / slotSize; pp_int32 visibleRows = (visibleHeight) / font->getCharHeight(); pp_int32 visibleChannels = (visibleWidth) / slotSize; //if (newStartIndex < visibleRows && // newStartPos < visibleChannels) //{ mp_sint32 cursorPositionRow = newStartIndex + startIndex; mp_sint32 cursorPositionChannel = newStartPos + startPos; if (cursorPositionRow < 0) cursorPositionRow = 0; if (cursorPositionChannel < 0) cursorPositionChannel = 0; //if (cursorPositionRow < 0 || cursorPositionChannel < 0) // break; if (cursorPositionChannel >= patternEditor->getNumChannels()) { patternEditor->getSelection().end.channel = patternEditor->getNumChannels()-1; patternEditor->getSelection().end.inner = 7; } else { // start selecting row patternEditor->getSelection().end.channel = cursorPositionChannel; patternEditor->getSelection().end.row = cursorPositionRow; pp_int32 innerPos = cp.x % slotSize; //selectionEnd.inner = 7; for (pp_uint32 i = 0; i < sizeof(cursorPositions) - 1; i++) { if (innerPos >= cursorPositions[i] && innerPos < cursorPositions[i+1]) { patternEditor->getSelection().end.inner = i; break; } } } setScrollbarPositions(startIndex, startPos); //} parentScreen->paintControl(this); break; } case eKeyDown: { //assureCursorVisible(); pp_uint16 keyCode = *((pp_uint16*)event->getDataPtr()); pp_uint16 scanCode = *(((pp_uint16*)event->getDataPtr())+1); pp_uint16 character = *(((pp_uint16*)event->getDataPtr())+2); assureCursor = true; assureUpdate = false; bool keyboadStartSelectionFlipped = false; // start selection if (keyCode == VK_LEFT || keyCode == VK_RIGHT || keyCode == VK_UP || keyCode == VK_DOWN || keyCode == VK_PRIOR || keyCode == VK_NEXT || keyCode == VK_HOME || keyCode == VK_END || keyCode == VK_TAB) { if ((::getKeyModifier() == (unsigned)selectionKeyModifier) && keyboardStartSelection) { patternEditor->getSelection().start = patternEditor->getSelection().end = patternEditor->getCursor(); keyboardStartSelection = false; if (keyCode == VK_LEFT || keyCode == VK_RIGHT || keyCode == VK_UP || keyCode == VK_DOWN) { keyboadStartSelectionFlipped = true; } } } switch (keyCode) { // store key modifiers case VK_ALT: assureCursor = false; if (selectionKeyModifier & KeyModifierALT) keyboardStartSelection = true; break; case VK_SHIFT: assureCursor = false; if (selectionKeyModifier & KeyModifierSHIFT) keyboardStartSelection = true; break; case VK_CONTROL: assureCursor = false; if (selectionKeyModifier & KeyModifierCTRL) keyboardStartSelection = true; break; default: { bool res = executeBinding(scanCodeBindings, scanCode); if (!res) res = executeBinding(eventKeyDownBindings, keyCode); if (!res) handleKeyDown(keyCode, scanCode, character); break; } } // normal selection if (keyCode == VK_LEFT || keyCode == VK_RIGHT || keyCode == VK_UP || keyCode == VK_DOWN || keyCode == VK_PRIOR || keyCode == VK_NEXT || keyCode == VK_HOME || keyCode == VK_END || keyCode == VK_TAB) { if ((::getKeyModifier() == (unsigned)selectionKeyModifier) && !keyboardStartSelection && !keyboadStartSelectionFlipped) { patternEditor->getSelection().end = patternEditor->getCursor(); } else if (::getKeyModifier() == (KeyModifierALT|KeyModifierSHIFT) && patternEditor->getSelection().start.isValid()) { patternEditor->getSelection().end = patternEditor->getCursor(); } } if (assureCursor) { assureCursorVisible(); parentScreen->paintControl(this); } else if (assureUpdate) { parentScreen->paintControl(this); } break; } case eKeyChar: { assureUpdate = false; pp_uint8 character = *((pp_uint8*)event->getDataPtr()); handleKeyChar(character); if (assureUpdate) parentScreen->paintControl(this); break; } case eKeyUp: { pp_uint16 keyCode = *((pp_uint16*)event->getDataPtr()); switch (keyCode) { case VK_SHIFT: if (selectionKeyModifier & KeyModifierSHIFT) keyboardStartSelection = false; break; case VK_ALT: if (selectionKeyModifier & KeyModifierALT) keyboardStartSelection = false; break; case VK_CONTROL: if (selectionKeyModifier & KeyModifierCTRL) keyboardStartSelection = false; break; } break; } default: if (caughtControl == NULL) break; caughtControl->dispatchEvent(event); goto leave; } leave: return 0; } pp_int32 PatternEditorControl::handleEvent(PPObject* sender, PPEvent* event) { // Vertical scrollbar, scroll down if ((sender == reinterpret_cast(vLeftScrollbar) || sender == reinterpret_cast(vRightScrollbar)) && event->getID() == eBarScrollDown) { if (properties.scrollMode != ScrollModeStayInCenter) { pp_int32 visibleItems = (visibleHeight) / font->getCharHeight(); if (startIndex + visibleItems < pattern->rows) startIndex++; float v = (float)(pattern->rows - visibleItems); vLeftScrollbar->setBarPosition((pp_int32)(startIndex*(65536.0f/v))); vRightScrollbar->setBarPosition((pp_int32)(startIndex*(65536.0f/v))); } else { scrollCursorDown(); assureCursorVisible(true, false); } } // Vertical scrollbar, scroll up else if ((sender == reinterpret_cast(vLeftScrollbar) || sender == reinterpret_cast(vRightScrollbar)) && event->getID() == eBarScrollUp) { if (properties.scrollMode != ScrollModeStayInCenter) { if (startIndex) startIndex--; pp_int32 visibleItems = (visibleHeight) / font->getCharHeight(); float v = (float)(pattern->rows - visibleItems); vLeftScrollbar->setBarPosition((pp_int32)(startIndex*(65536.0f/v))); vRightScrollbar->setBarPosition((pp_int32)(startIndex*(65536.0f/v))); } else { scrollCursorUp(); assureCursorVisible(true, false); } } // Vertical scrollbar, position changed else if ((sender == reinterpret_cast(vLeftScrollbar) || sender == reinterpret_cast(vRightScrollbar)) && event->getID() == eBarPosChanged) { float pos = reinterpret_cast(sender)->getBarPosition()/65536.0f; switch (properties.scrollMode) { case ScrollModeToEnd: case ScrollModeToCenter: { pp_int32 visibleItems = (visibleHeight) / font->getCharHeight(); float v = (float)(pattern->rows - visibleItems); startIndex = (pp_uint32)(v*pos); vLeftScrollbar->setBarPosition((pp_int32)(pos*65536.0f)); vRightScrollbar->setBarPosition((pp_int32)(pos*65536.0f)); break; } case ScrollModeStayInCenter: patternEditor->getCursor().row = (pp_int32)(pos*(pattern->rows-1)); assureCursorVisible(true, false); break; } } // Horizontal scrollbar, scroll up (=left) else if ((sender == reinterpret_cast(hBottomScrollbar) || sender == reinterpret_cast(hTopScrollbar)) && event->getID() == eBarScrollUp) { if (startPos) startPos--; pp_int32 visibleItems = (visibleWidth) / slotSize; float v = (float)(patternEditor->getNumChannels() - visibleItems); hTopScrollbar->setBarPosition((pp_int32)(startPos*(65536.0f/v))); hBottomScrollbar->setBarPosition((pp_int32)(startPos*(65536.0f/v))); } // Horizontal scrollbar, scroll down (=right) else if ((sender == reinterpret_cast(hBottomScrollbar) || sender == reinterpret_cast(hTopScrollbar)) && event->getID() == eBarScrollDown) { pp_int32 visibleItems = (visibleWidth) / slotSize; if (startPos + visibleItems < (signed)patternEditor->getNumChannels()) startPos++; float v = (float)(patternEditor->getNumChannels() - visibleItems); if (v < 0.0f) v = 0.0f; hTopScrollbar->setBarPosition((pp_int32)(startPos*(65536.0f/v))); hBottomScrollbar->setBarPosition((pp_int32)(startPos*(65536.0f/v))); } // Horizontal scrollbar, position changed else if ((sender == reinterpret_cast(hBottomScrollbar) || sender == reinterpret_cast(hTopScrollbar)) && event->getID() == eBarPosChanged) { float pos = reinterpret_cast(sender)->getBarPosition()/65536.0f; pp_int32 visibleItems = (visibleWidth) / slotSize; float v = (float)(patternEditor->getNumChannels() - visibleItems); if (v < 0.0f) v = 0.0f; startPos = (pp_uint32)(v*pos); hTopScrollbar->setBarPosition((pp_int32)(pos*65536.0f)); hBottomScrollbar->setBarPosition((pp_int32)(pos*65536.0f)); } else if (sender == reinterpret_cast(editMenuControl)) { switch (event->getID()) { case eCommand: executeMenuCommand(*((pp_int32*)event->getDataPtr())); break; case eRemovedContextMenu: { struct MetaData { pp_int32 id; PPPoint p; } *metaData; metaData = (MetaData*)event->getDataPtr(); PPPoint cp(metaData->p); cp.x-=location.x + SCROLLBARWIDTH + getRowCountWidth() + 4; cp.y-=location.y + SCROLLBARWIDTH + font->getCharHeight() + 4; pp_int32 menuInvokeChannel = pointInChannelHeading(cp); if (menuInvokeChannel != -1 && menuInvokeChannel != this->menuInvokeChannel) { PPEvent e((EEventDescriptor)metaData->id, &metaData->p, sizeof(PPPoint)); dispatchEvent(&e); } // clicked somewhere else in the control, no more channel header // highlight and repaint without updating else { this->menuInvokeChannel = -1; parentScreen->paintControl(this, false); } break; } default: break; } return 0; } else { return 0; } // Little happy workaround for scroll to center scrollmode if (properties.scrollMode == ScrollModeToCenter) { pp_int32 visibleItems = (visibleHeight) / font->getCharHeight(); if ((vLeftScrollbar->getBarPosition() == 65536 || vRightScrollbar->getBarPosition() == 65536) && startIndex + visibleItems <= pattern->rows) { startIndex++; } } parentScreen->paintControl(this); return 0; } pp_int32 PatternEditorControl::pointInChannelHeading(PPPoint& cp) { if (cp.x < 0) return -1; // right click on channel numbber if (cp.y < 0 && cp.y < -2 && cp.y > -4-(pp_int32)font->getCharHeight()) { pp_int32 i = (cp.x / slotSize) + startPos; if (i < 0 || i > 31) return -1; return i; } return -1; } void PatternEditorControl::invokeMenu(pp_int32 channel, const PPPoint& p) { menuInvokeChannel = channel; editMenuControl->setLocation(p); editMenuControl->setState(MenuCommandIDCut, !hasValidSelection()); editMenuControl->setState(MenuCommandIDCopy, !hasValidSelection()); editMenuControl->setState(MenuCommandIDPaste, patternEditor->clipBoardSelectionIsEmpty()); editMenuControl->setState(MenuCommandIDPorousPaste, patternEditor->clipBoardSelectionIsEmpty()); editMenuControl->setState(MenuCommandIDUndo, !patternEditor->canUndo()); editMenuControl->setState(MenuCommandIDRedo, !patternEditor->canRedo()); editMenuControl->setState(MenuCommandIDSwapChannels, menuInvokeChannel == patternEditor->getCursor().channel); parentScreen->setContextMenuControl(editMenuControl); } bool PatternEditorControl::isSoloChannel(pp_int32 c) { pp_int32 i = 0; for (pp_int32 j = 0; j < patternEditor->getNumChannels(); j++) if (muteChannels[j]) i++; if (!muteChannels[c] && i == patternEditor->getNumChannels()-1) return true; return false; } MilkyTracker-1.02.00/src/tracker/PatternEditorControlKeyboard.cpp000066400000000000000000001442511324432207300250160ustar00rootroot00000000000000/* * tracker/PatternEditorControlKeyboard.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * PatternEditorControlKeyboard.cpp * MilkyTracker * * Created by Peter Barth on Fri Mar 11 2005. * */ #include "PatternEditorControl.h" #include "PatternTools.h" #include "KeyBindings.h" void PatternEditorControl::initKeyBindings() { eventKeyDownBindingsMilkyTracker = new PPKeyBindings; // Key-down bindings MilkyTracker eventKeyDownBindingsMilkyTracker->addBinding(VK_LEFT, 0xFFFF, &PatternEditorControl::eventKeyDownBinding_LEFT); eventKeyDownBindingsMilkyTracker->addBinding(VK_RIGHT, 0xFFFF, &PatternEditorControl::eventKeyDownBinding_RIGHT); eventKeyDownBindingsMilkyTracker->addBinding(VK_UP, 0xFFFF, &PatternEditorControl::eventKeyDownBinding_UP); eventKeyDownBindingsMilkyTracker->addBinding(VK_DOWN, 0xFFFF, &PatternEditorControl::eventKeyDownBinding_DOWN); eventKeyDownBindingsMilkyTracker->addBinding(VK_PRIOR, 0xFFFF, &PatternEditorControl::eventKeyDownBinding_PRIOR); eventKeyDownBindingsMilkyTracker->addBinding(VK_NEXT, 0xFFFF, &PatternEditorControl::eventKeyDownBinding_NEXT); eventKeyDownBindingsMilkyTracker->addBinding(VK_HOME, 0xFFFF, &PatternEditorControl::eventKeyDownBinding_HOME); eventKeyDownBindingsMilkyTracker->addBinding(VK_END, 0xFFFF, &PatternEditorControl::eventKeyDownBinding_END); eventKeyDownBindingsMilkyTracker->addBinding(VK_TAB, 0, &PatternEditorControl::eventKeyDownBinding_NextChannel); eventKeyDownBindingsMilkyTracker->addBinding(VK_TAB, KeyModifierSHIFT, &PatternEditorControl::eventKeyDownBinding_NextChannel); eventKeyDownBindingsMilkyTracker->addBinding(VK_TAB, KeyModifierALT, &PatternEditorControl::eventKeyDownBinding_PreviousChannel); eventKeyDownBindingsMilkyTracker->addBinding(VK_TAB, KeyModifierSHIFT|KeyModifierALT, &PatternEditorControl::eventKeyDownBinding_PreviousChannel); eventKeyDownBindingsMilkyTracker->addBinding(VK_DELETE, KeyModifierSHIFT, &PatternEditorControl::eventKeyDownBinding_DeleteNoteVolumeAndEffect); eventKeyDownBindingsMilkyTracker->addBinding(VK_DELETE, KeyModifierCTRL, &PatternEditorControl::eventKeyDownBinding_DeleteVolumeAndEffect); eventKeyDownBindingsMilkyTracker->addBinding(VK_DELETE, KeyModifierALT, &PatternEditorControl::eventKeyDownBinding_DeleteEffect); eventKeyDownBindingsMilkyTracker->addBinding(VK_INSERT, 0, &PatternEditorControl::eventKeyDownBinding_InsertNote); eventKeyDownBindingsMilkyTracker->addBinding(VK_INSERT, KeyModifierSHIFT, &PatternEditorControl::eventKeyDownBinding_InsertLine); eventKeyDownBindingsMilkyTracker->addBinding(VK_BACK, 0, &PatternEditorControl::eventKeyDownBinding_DeleteNoteSlot); eventKeyDownBindingsMilkyTracker->addBinding(VK_BACK, KeyModifierSHIFT, &PatternEditorControl::eventKeyDownBinding_DeleteLine); eventKeyDownBindingsMilkyTracker->addBinding('Z', KeyModifierCTRL, &PatternEditorControl::eventKeyCharBinding_Undo); eventKeyDownBindingsMilkyTracker->addBinding('Y', KeyModifierCTRL, &PatternEditorControl::eventKeyCharBinding_Redo); eventKeyDownBindingsMilkyTracker->addBinding('X', KeyModifierCTRL, &PatternEditorControl::eventKeyCharBinding_Cut); eventKeyDownBindingsMilkyTracker->addBinding('C', KeyModifierCTRL, &PatternEditorControl::eventKeyCharBinding_Copy); eventKeyDownBindingsMilkyTracker->addBinding('V', KeyModifierSHIFT|KeyModifierCTRL, &PatternEditorControl::eventKeyCharBinding_TransparentPaste); eventKeyDownBindingsMilkyTracker->addBinding('V', KeyModifierCTRL, &PatternEditorControl::eventKeyCharBinding_Paste); eventKeyDownBindingsMilkyTracker->addBinding('A', KeyModifierCTRL, &PatternEditorControl::eventKeyCharBinding_SelectAll); eventKeyDownBindingsMilkyTracker->addBinding('M', KeyModifierSHIFT, &PatternEditorControl::eventKeyCharBinding_MuteChannel); eventKeyDownBindingsMilkyTracker->addBinding('M', KeyModifierSHIFT|KeyModifierCTRL, &PatternEditorControl::eventKeyCharBinding_InvertMuting); eventKeyDownBindingsMilkyTracker->addBinding('I', KeyModifierCTRL, &PatternEditorControl::eventKeyCharBinding_Interpolate); // Scancode bindings scanCodeBindingsMilkyTracker = new PPKeyBindings; // Alternate binding for eventKeyDownBinding_SC_IncreaseRowInsertAdd // for modern ANSI keyboards without section symbol key scanCodeBindingsMilkyTracker->addBinding(SC_SS, KeyModifierALT, &PatternEditorControl::eventKeyDownBinding_SC_DecreaseRowInsertAdd); scanCodeBindingsMilkyTracker->addBinding(SC_TICK, KeyModifierALT, &PatternEditorControl::eventKeyDownBinding_SC_IncreaseRowInsertAdd); scanCodeBindingsMilkyTracker->addBinding(SC_SS, KeyModifierCTRL, &PatternEditorControl::eventKeyDownBinding_InsDecSelection); scanCodeBindingsMilkyTracker->addBinding(SC_TICK, KeyModifierCTRL, &PatternEditorControl::eventKeyDownBinding_InsIncSelection); scanCodeBindingsMilkyTracker->addBinding(SC_SS, KeyModifierSHIFT|KeyModifierCTRL, &PatternEditorControl::eventKeyDownBinding_InsDecTrack); scanCodeBindingsMilkyTracker->addBinding(SC_TICK, KeyModifierSHIFT|KeyModifierCTRL, &PatternEditorControl::eventKeyDownBinding_InsIncTrack); // Key-down bindings Fasttracker eventKeyDownBindingsFastTracker = new PPKeyBindings; eventKeyDownBindingsFastTracker->addBinding(VK_LEFT, 0xFFFF, &PatternEditorControl::eventKeyDownBinding_LEFT); eventKeyDownBindingsFastTracker->addBinding(VK_RIGHT, 0xFFFF, &PatternEditorControl::eventKeyDownBinding_RIGHT); eventKeyDownBindingsFastTracker->addBinding(VK_UP, 0xFFFF, &PatternEditorControl::eventKeyDownBinding_UP); eventKeyDownBindingsFastTracker->addBinding(VK_DOWN, 0xFFFF, &PatternEditorControl::eventKeyDownBinding_DOWN); eventKeyDownBindingsFastTracker->addBinding(VK_PRIOR, 0xFFFF, &PatternEditorControl::eventKeyDownBinding_PRIOR); eventKeyDownBindingsFastTracker->addBinding(VK_NEXT, 0xFFFF, &PatternEditorControl::eventKeyDownBinding_NEXT); eventKeyDownBindingsFastTracker->addBinding(VK_HOME, 0xFFFF, &PatternEditorControl::eventKeyDownBinding_HOME); eventKeyDownBindingsFastTracker->addBinding(VK_END, 0xFFFF, &PatternEditorControl::eventKeyDownBinding_END); eventKeyDownBindingsFastTracker->addBinding(VK_TAB, 0, &PatternEditorControl::eventKeyDownBinding_NextChannel); eventKeyDownBindingsFastTracker->addBinding(VK_TAB, KeyModifierSHIFT, &PatternEditorControl::eventKeyDownBinding_PreviousChannel); eventKeyDownBindingsFastTracker->addBinding(VK_TAB, KeyModifierALT, &PatternEditorControl::eventKeyDownBinding_NextChannel); eventKeyDownBindingsFastTracker->addBinding(VK_TAB, KeyModifierSHIFT|KeyModifierALT, &PatternEditorControl::eventKeyDownBinding_PreviousChannel); eventKeyDownBindingsFastTracker->addBinding(VK_DELETE, 0, &PatternEditorControl::eventKeyDownBinding_DeleteNote); eventKeyDownBindingsFastTracker->addBinding(VK_DELETE, KeyModifierSHIFT, &PatternEditorControl::eventKeyDownBinding_DeleteNoteVolumeAndEffect); eventKeyDownBindingsFastTracker->addBinding(VK_DELETE, KeyModifierCTRL, &PatternEditorControl::eventKeyDownBinding_DeleteVolumeAndEffect); eventKeyDownBindingsFastTracker->addBinding(VK_DELETE, KeyModifierALT, &PatternEditorControl::eventKeyDownBinding_DeleteEffect); eventKeyDownBindingsFastTracker->addBinding(VK_INSERT, 0, &PatternEditorControl::eventKeyDownBinding_InsertNote); eventKeyDownBindingsFastTracker->addBinding(VK_INSERT, KeyModifierSHIFT, &PatternEditorControl::eventKeyDownBinding_InsertLine); eventKeyDownBindingsFastTracker->addBinding(VK_BACK, 0, &PatternEditorControl::eventKeyDownBinding_DeleteNoteSlot); eventKeyDownBindingsFastTracker->addBinding(VK_BACK, KeyModifierSHIFT, &PatternEditorControl::eventKeyDownBinding_DeleteLine); eventKeyDownBindingsFastTracker->addBinding(VK_F3, KeyModifierSHIFT, &PatternEditorControl::eventKeyDownBinding_CutTrack); eventKeyDownBindingsFastTracker->addBinding(VK_F4, KeyModifierSHIFT, &PatternEditorControl::eventKeyDownBinding_CopyTrack); eventKeyDownBindingsFastTracker->addBinding(VK_F5, KeyModifierSHIFT, &PatternEditorControl::eventKeyDownBinding_PasteTrack); eventKeyDownBindingsFastTracker->addBinding(VK_F6, KeyModifierSHIFT, &PatternEditorControl::eventKeyDownBinding_TransparentPasteTrack); eventKeyDownBindingsFastTracker->addBinding(VK_F3, KeyModifierCTRL, &PatternEditorControl::eventKeyDownBinding_CutPattern); eventKeyDownBindingsFastTracker->addBinding(VK_F4, KeyModifierCTRL, &PatternEditorControl::eventKeyDownBinding_CopyPattern); eventKeyDownBindingsFastTracker->addBinding(VK_F5, KeyModifierCTRL, &PatternEditorControl::eventKeyDownBinding_PastePattern); eventKeyDownBindingsFastTracker->addBinding(VK_F6, KeyModifierCTRL, &PatternEditorControl::eventKeyDownBinding_TransparentPastePattern); eventKeyDownBindingsFastTracker->addBinding(VK_F3, KeyModifierALT, &PatternEditorControl::eventKeyCharBinding_Cut); eventKeyDownBindingsFastTracker->addBinding(VK_F4, KeyModifierALT, &PatternEditorControl::eventKeyCharBinding_Copy); eventKeyDownBindingsFastTracker->addBinding(VK_F5, KeyModifierALT, &PatternEditorControl::eventKeyCharBinding_Paste); eventKeyDownBindingsFastTracker->addBinding(VK_F6, KeyModifierALT, &PatternEditorControl::eventKeyCharBinding_TransparentPaste); // Typical: // Remember to check keyboard shortcuts which are always possible in file TrackerShortCuts.cpp // (= keyboard handler) otherwise they might not be routed here eventKeyDownBindingsFastTracker->addBinding('Z', KeyModifierCTRL|KeyModifierALT, &PatternEditorControl::eventKeyCharBinding_Undo); eventKeyDownBindingsFastTracker->addBinding('Y', KeyModifierCTRL|KeyModifierALT, &PatternEditorControl::eventKeyCharBinding_Redo); eventKeyDownBindingsFastTracker->addBinding('X', KeyModifierCTRL|KeyModifierALT, &PatternEditorControl::eventKeyCharBinding_Cut); eventKeyDownBindingsFastTracker->addBinding('C', KeyModifierCTRL|KeyModifierALT, &PatternEditorControl::eventKeyCharBinding_Copy); eventKeyDownBindingsFastTracker->addBinding('V', KeyModifierCTRL|KeyModifierALT, &PatternEditorControl::eventKeyCharBinding_Paste); eventKeyDownBindingsFastTracker->addBinding('A', KeyModifierCTRL|KeyModifierALT, &PatternEditorControl::eventKeyCharBinding_SelectAll); eventKeyDownBindingsFastTracker->addBinding('M', KeyModifierSHIFT, &PatternEditorControl::eventKeyCharBinding_MuteChannel); eventKeyDownBindingsFastTracker->addBinding('M', KeyModifierSHIFT|KeyModifierCTRL, &PatternEditorControl::eventKeyCharBinding_InvertMuting); eventKeyDownBindingsFastTracker->addBinding('I', KeyModifierSHIFT, &PatternEditorControl::eventKeyCharBinding_Interpolate); scanCodeBindingsFastTracker = new PPKeyBindings; // Scancode bindings scanCodeBindingsFastTracker->addBinding(SC_1, KeyModifierALT|KeyModifierSHIFT, &PatternEditorControl::eventKeyDownBinding_ReadMacro1); scanCodeBindingsFastTracker->addBinding(SC_2, KeyModifierALT|KeyModifierSHIFT, &PatternEditorControl::eventKeyDownBinding_ReadMacro2); scanCodeBindingsFastTracker->addBinding(SC_3, KeyModifierALT|KeyModifierSHIFT, &PatternEditorControl::eventKeyDownBinding_ReadMacro3); scanCodeBindingsFastTracker->addBinding(SC_4, KeyModifierALT|KeyModifierSHIFT, &PatternEditorControl::eventKeyDownBinding_ReadMacro4); scanCodeBindingsFastTracker->addBinding(SC_5, KeyModifierALT|KeyModifierSHIFT, &PatternEditorControl::eventKeyDownBinding_ReadMacro5); scanCodeBindingsFastTracker->addBinding(SC_6, KeyModifierALT|KeyModifierSHIFT, &PatternEditorControl::eventKeyDownBinding_ReadMacro6); scanCodeBindingsFastTracker->addBinding(SC_7, KeyModifierALT|KeyModifierSHIFT, &PatternEditorControl::eventKeyDownBinding_ReadMacro7); scanCodeBindingsFastTracker->addBinding(SC_8, KeyModifierALT|KeyModifierSHIFT, &PatternEditorControl::eventKeyDownBinding_ReadMacro8); scanCodeBindingsFastTracker->addBinding(SC_9, KeyModifierALT|KeyModifierSHIFT, &PatternEditorControl::eventKeyDownBinding_ReadMacro9); scanCodeBindingsFastTracker->addBinding(SC_0, KeyModifierALT|KeyModifierSHIFT, &PatternEditorControl::eventKeyDownBinding_ReadMacro0); scanCodeBindingsFastTracker->addBinding(SC_1, KeyModifierALT, &PatternEditorControl::eventKeyDownBinding_WriteMacro1); scanCodeBindingsFastTracker->addBinding(SC_2, KeyModifierALT, &PatternEditorControl::eventKeyDownBinding_WriteMacro2); scanCodeBindingsFastTracker->addBinding(SC_3, KeyModifierALT, &PatternEditorControl::eventKeyDownBinding_WriteMacro3); scanCodeBindingsFastTracker->addBinding(SC_4, KeyModifierALT, &PatternEditorControl::eventKeyDownBinding_WriteMacro4); scanCodeBindingsFastTracker->addBinding(SC_5, KeyModifierALT, &PatternEditorControl::eventKeyDownBinding_WriteMacro5); scanCodeBindingsFastTracker->addBinding(SC_6, KeyModifierALT, &PatternEditorControl::eventKeyDownBinding_WriteMacro6); scanCodeBindingsFastTracker->addBinding(SC_7, KeyModifierALT, &PatternEditorControl::eventKeyDownBinding_WriteMacro7); scanCodeBindingsFastTracker->addBinding(SC_8, KeyModifierALT, &PatternEditorControl::eventKeyDownBinding_WriteMacro8); scanCodeBindingsFastTracker->addBinding(SC_9, KeyModifierALT, &PatternEditorControl::eventKeyDownBinding_WriteMacro9); scanCodeBindingsFastTracker->addBinding(SC_0, KeyModifierALT, &PatternEditorControl::eventKeyDownBinding_WriteMacro0); scanCodeBindingsFastTracker->addBinding(SC_Q, KeyModifierALT, &PatternEditorControl::eventKeyDownBinding_SC_Q); scanCodeBindingsFastTracker->addBinding(SC_W, KeyModifierALT, &PatternEditorControl::eventKeyDownBinding_SC_W); scanCodeBindingsFastTracker->addBinding(SC_E, KeyModifierALT, &PatternEditorControl::eventKeyDownBinding_SC_E); scanCodeBindingsFastTracker->addBinding(SC_R, KeyModifierALT, &PatternEditorControl::eventKeyDownBinding_SC_R); scanCodeBindingsFastTracker->addBinding(SC_T, KeyModifierALT, &PatternEditorControl::eventKeyDownBinding_SC_T); scanCodeBindingsFastTracker->addBinding(SC_Z, KeyModifierALT, &PatternEditorControl::eventKeyDownBinding_SC_Z); scanCodeBindingsFastTracker->addBinding(SC_U, KeyModifierALT, &PatternEditorControl::eventKeyDownBinding_SC_U); scanCodeBindingsFastTracker->addBinding(SC_I, KeyModifierALT, &PatternEditorControl::eventKeyDownBinding_SC_I); scanCodeBindingsFastTracker->addBinding(SC_A, KeyModifierALT, &PatternEditorControl::eventKeyDownBinding_SC_A); scanCodeBindingsFastTracker->addBinding(SC_S, KeyModifierALT, &PatternEditorControl::eventKeyDownBinding_SC_S); scanCodeBindingsFastTracker->addBinding(SC_D, KeyModifierALT, &PatternEditorControl::eventKeyDownBinding_SC_D); scanCodeBindingsFastTracker->addBinding(SC_F, KeyModifierALT, &PatternEditorControl::eventKeyDownBinding_SC_F); scanCodeBindingsFastTracker->addBinding(SC_G, KeyModifierALT, &PatternEditorControl::eventKeyDownBinding_SC_G); scanCodeBindingsFastTracker->addBinding(SC_H, KeyModifierALT, &PatternEditorControl::eventKeyDownBinding_SC_H); scanCodeBindingsFastTracker->addBinding(SC_J, KeyModifierALT, &PatternEditorControl::eventKeyDownBinding_SC_J); scanCodeBindingsFastTracker->addBinding(SC_K, KeyModifierALT, &PatternEditorControl::eventKeyDownBinding_SC_K); scanCodeBindingsFastTracker->addBinding(SC_WTF, 0, &PatternEditorControl::eventKeyDownBinding_SC_IncreaseRowInsertAdd); scanCodeBindingsFastTracker->addBinding(SC_WTF, KeyModifierSHIFT, &PatternEditorControl::eventKeyDownBinding_SC_DecreaseRowInsertAdd); // Alternate binding for eventKeyDownBinding_SC_IncreaseRowInsertAdd // for modern ANSI keyboards without section symbol key scanCodeBindingsFastTracker->addBinding(SC_SS, KeyModifierALT, &PatternEditorControl::eventKeyDownBinding_SC_DecreaseRowInsertAdd); scanCodeBindingsFastTracker->addBinding(SC_TICK, KeyModifierALT, &PatternEditorControl::eventKeyDownBinding_SC_IncreaseRowInsertAdd); scanCodeBindingsFastTracker->addBinding(SC_SS, KeyModifierCTRL, &PatternEditorControl::eventKeyDownBinding_InsDecSelection); scanCodeBindingsFastTracker->addBinding(SC_TICK, KeyModifierCTRL, &PatternEditorControl::eventKeyDownBinding_InsIncSelection); scanCodeBindingsFastTracker->addBinding(SC_SS, KeyModifierSHIFT|KeyModifierCTRL, &PatternEditorControl::eventKeyDownBinding_InsDecTrack); scanCodeBindingsFastTracker->addBinding(SC_TICK, KeyModifierSHIFT|KeyModifierCTRL, &PatternEditorControl::eventKeyDownBinding_InsIncTrack); eventKeyDownBindings = eventKeyDownBindingsMilkyTracker; } static pp_int32 asciiToHex(pp_uint8 ascii) { pp_int32 number = -1; switch (ascii) { // 0: case '0': number = 0; break; // 1: case '1': number = 1; break; // 2: case '2': number = 2; break; // 3: case '3': number = 3; break; // 4: case '4': number = 4; break; // 5: case '5': number = 5; break; // 6: case '6': number = 6; break; // 7: case '7': number = 7; break; // 8: case '8': number = 8; break; // 9: case '9': number = 9; break; // A: case 'A': case 'a': number = 0xA; break; // B: case 'B': case 'b': number = 0xB; break; // C: case 'C': case 'c': number = 0xC; break; // D: case 'D': case 'd': number = 0xD; break; // E: case 'E': case 'e': number = 0xE; break; // F: case 'F': case 'f': number = 0xF; break; } return number; } static pp_int32 asciiToHexExtended(pp_uint8 ascii) { pp_int32 number = -1; switch (ascii) { case 'G': case 'g': number = 0x10; break; case 'H': case 'h': number = 0x11; break; case 'I': case 'i': number = 0x12; break; case 'J': case 'j': number = 0x13; break; case 'K': case 'k': number = 0x14; break; case 'L': case 'l': number = 0x15; break; case 'M': case 'm': number = 0x16; break; case 'N': case 'n': number = 0x17; break; case 'O': case 'o': number = 0x18; break; case 'P': case 'p': number = 0x19; break; case 'Q': case 'q': number = 0x1A; break; case 'R': case 'r': number = 0x1B; break; case 'S': case 's': number = 0x1C; break; case 'T': case 't': number = 0x1D; break; case 'U': case 'u': number = 0x1E; break; case 'V': case 'v': number = 0x1F; break; case 'W': case 'w': number = 0x20; break; case 'X': case 'x': number = 0x21; break; case 'Y': case 'y': number = 0x22; break; case 'Z': case 'z': number = 0x23; break; } return number; } pp_int32 PatternEditorControl::ScanCodeToNote(pp_int16 scanCode) { switch (scanCode) { // 2,L: C# case 0x03: case 0x26: return TONOTE(patternEditor->getCurrentOctave(),1); // 3,÷: D# case 0x04: case 0x27: return TONOTE(patternEditor->getCurrentOctave(),3); // 5,': F# case 0x06: case 0x2B: return TONOTE(patternEditor->getCurrentOctave(),6); // 6: G# case 0x07: return TONOTE(patternEditor->getCurrentOctave(),8); // 7: A# case 0x08: return TONOTE(patternEditor->getCurrentOctave(),10); // 9: C# + 1 case 0x0A: return TONOTE(patternEditor->getCurrentOctave() + 1,1); // 0: D# + 1 case 0x0B: return TONOTE(patternEditor->getCurrentOctave() + 1,3); // ¥: F# + 1 case 0x0D: return TONOTE(patternEditor->getCurrentOctave() + 1,6); // S: C# - 1 case 0x1F: return TONOTE(patternEditor->getCurrentOctave() - 1,1); // D: D# - 1 case 0x20: return TONOTE(patternEditor->getCurrentOctave() - 1,3); // G: F# - 1 case 0x22: return TONOTE(patternEditor->getCurrentOctave() - 1,6); // H: G# - 1 case 0x23: return TONOTE(patternEditor->getCurrentOctave() - 1,8); // J: A# - 1 case 0x24: return TONOTE(patternEditor->getCurrentOctave() - 1,10); // Q: C case 0x10: return TONOTE(patternEditor->getCurrentOctave(),0); // W: D case 0x11: return TONOTE(patternEditor->getCurrentOctave(),2); // E: E case 0x12: return TONOTE(patternEditor->getCurrentOctave(),4); // R: F case 0x13: return TONOTE(patternEditor->getCurrentOctave(),5); // T: G case 0x14: return TONOTE(patternEditor->getCurrentOctave(),7); // Z: A case 0x15: return TONOTE(patternEditor->getCurrentOctave(),9); // U: B case 0x16: return TONOTE(patternEditor->getCurrentOctave(),11); // Y: C - 1 case 0x2C: return TONOTE(patternEditor->getCurrentOctave() - 1,0); // X: D - 1 case 0x2D: return TONOTE(patternEditor->getCurrentOctave() - 1,2); // C: E - 1 case 0x2E: return TONOTE(patternEditor->getCurrentOctave() - 1,4); // R: F - 1 case 0x2F: return TONOTE(patternEditor->getCurrentOctave() - 1,5); // B: G - 1 case 0x30: return TONOTE(patternEditor->getCurrentOctave() - 1,7); // N: A - 1 case 0x31: return TONOTE(patternEditor->getCurrentOctave() - 1,9); // M: B - 1 case 0x32: return TONOTE(patternEditor->getCurrentOctave() - 1,11); // ,: C case 0x33: return TONOTE(patternEditor->getCurrentOctave(),0); // .: D case 0x34: return TONOTE(patternEditor->getCurrentOctave(),2); // -: E case 0x35: return TONOTE(patternEditor->getCurrentOctave(),4); // I case 0x17: return TONOTE(patternEditor->getCurrentOctave()+1,0); // O case 0x18: return TONOTE(patternEditor->getCurrentOctave()+1,2); // P case 0x19: return TONOTE(patternEditor->getCurrentOctave()+1,4); // ‹ case 0x1A: return TONOTE(patternEditor->getCurrentOctave()+1,5); // + case 0x1B: return TONOTE(patternEditor->getCurrentOctave()+1,7); // ^: Key off case SC_WTF: if (editMode != EditModeMilkyTracker) break; return PatternTools::getNoteOffNote(); // CAPS-lock case SC_CAPSLOCK: #ifndef WIN32 case SC_1: #endif return PatternTools::getNoteOffNote(); case SC_SMALLERGREATER: return PatternTools::getNoteOffNote(); default: return -1; } return -1; } void PatternEditorControl::handleDeleteKey(pp_uint16 keyCode, pp_int32& result) { if (result == -1 && ::getKeyModifier() == 0) { switch (keyCode) { // Delete (only works in MilkyTracker edit mode) // in FT2 mode this key combination is bound to a method case VK_DELETE: if (hasValidSelection()) patternEditor->clearSelection(); else { result = 0xFF; } break; } } } // "C-","C#","D-","D#","E-","F-","F#","G-","G#","A-","A#","B-" void PatternEditorControl::handleKeyDown(pp_uint16 keyCode, pp_uint16 scanCode, pp_uint16 character) { PatternEditorTools::Position& cursor = patternEditor->getCursor(); pp_int32 number = -1; if (::getKeyModifier() == 0) { switch (keyCode) { // F1 case VK_F1: patternEditor->setCurrentOctave(1); assureCursor = false; notifyUpdate(); return; // F2 case VK_F2: patternEditor->setCurrentOctave(2); assureCursor = false; notifyUpdate(); return; // F3 case VK_F3: patternEditor->setCurrentOctave(3); assureCursor = false; notifyUpdate(); return; // F4 case VK_F4: patternEditor->setCurrentOctave(4); assureCursor = false; notifyUpdate(); return; // F5 case VK_F5: patternEditor->setCurrentOctave(5); assureCursor = false; notifyUpdate(); return; // F6 case VK_F6: patternEditor->setCurrentOctave(6); assureCursor = false; notifyUpdate(); return; // F7 case VK_F7: patternEditor->setCurrentOctave(7); assureCursor = false; notifyUpdate(); return; // F8 case VK_F8: patternEditor->setCurrentOctave(8); assureCursor = false; notifyUpdate(); return; // F9 case VK_F9: eventKeyDownBinding_HOME(); return; // F10 case VK_F10: eventKeyDownBinding_FIRSTQUARTER(); return; // F11 case VK_F11: eventKeyDownBinding_SECONDQUARTER(); return; // F12 case VK_F12: eventKeyDownBinding_THIRDQUARTER(); return; } } // prevent unnecessary screen refreshing through listener callback // remember to reset this when leaving this function patternEditor->setLazyUpdateNotifications(true); if (cursor.inner == 0) { handleDeleteKey(keyCode, number); if (number == -1 && ::getKeyModifier() == 0) number = ScanCodeToNote(scanCode); patternEditor->writeNote(number, true, this); } else handleDeleteKey(keyCode, number); patternEditor->setLazyUpdateNotifications(false); } void PatternEditorControl::handleKeyChar(pp_uint8 character) { PatternEditorTools::Position& cursor = patternEditor->getCursor(); pp_int32 number = -1; // prevent unnecessary screen refreshing through listener callback // remember to reset this when leaving this function patternEditor->setLazyUpdateNotifications(true); if ((cursor.inner == 1 || cursor.inner == 2)) { number = asciiToHex(character); if (number == 0xFF) patternEditor->writeInstrument(PatternEditor::NibbleTypeBoth, 0, true, this); else if (number >= 0 && number <= 0xF) { if (cursor.inner == 1) patternEditor->writeInstrument(PatternEditor::NibbleTypeHigh, number, true, this); else if (cursor.inner == 2) patternEditor->writeInstrument(PatternEditor::NibbleTypeLow, number, true, this); } } else if (cursor.inner == 3 || cursor.inner == 4) { if (cursor.inner == 3) { switch (character) { // -: Volslide down case '-': number = 5; break; // +: Volslide up case '+': number = 6; break; // D: Fine volslide down case 'd': number = 7; break; // U: Fine volslide up case 'u': number = 8; break; // S: Vibrato rate case 's': number = 9; break; // V: Vibrato depth case 'v': number = 0xA; break; // P: Set Panning case 'p': number = 0xB; break; // L: Panning slide left case 'l': case '<': number = 0xC; break; // R: Panning slide right case 'r': case '>': number = 0xD; break; // M: Portamento case 'm': number = 0xE; break; } } // still not assigned, try if we map to a hexadecimal digit if (number == -1) { number = asciiToHex(character); if (cursor.inner == 3 && number > 4) goto cleanUp; } if (number == 0xFF || (number >= 0 && number <= 0xF)) { if (number == 0xFF) patternEditor->writeFT2Volume(PatternEditor::NibbleTypeBoth, number, true, this); else patternEditor->writeFT2Volume(cursor.inner == 3 ? PatternEditor::NibbleTypeHigh : PatternEditor::NibbleTypeLow, number, true, this); } } else if (cursor.inner == 5) { number = asciiToHex(character); if (number == -1) number = asciiToHexExtended(character); if (number == 0xFF || (number >= 0 && number <= 0x23)) patternEditor->writeEffectNumber(number, true, this); } else if ((cursor.inner == 6 || cursor.inner == 7)) { number = asciiToHex(character); if (number == 0xFF || (number >= 0 && number <= 0xF)) { if (number == 0xFF) patternEditor->writeEffectOperand(PatternEditor::NibbleTypeBoth, number, true, this); else patternEditor->writeEffectOperand(cursor.inner == 6 ? PatternEditor::NibbleTypeHigh : PatternEditor::NibbleTypeLow, number, true, this); } } // If the input had an effect, ensure the PatternEditorControl is repainted if (number != -1) assureUpdate = true; cleanUp: patternEditor->setLazyUpdateNotifications(false); } bool PatternEditorControl::executeBinding(const PPKeyBindings* bindings, pp_uint16 keyCode) { if (bindings == NULL) return false; TPatternEditorKeyBindingHandler handlerFunc; bool res = bindings->getBinding(keyCode, ::getKeyModifier(), handlerFunc); if (res) { (this->*handlerFunc)(); return true; } return false; } ////////////////////////////////////////////////////// // key-down bindings // ////////////////////////////////////////////////////// void PatternEditorControl::eventKeyDownBinding_LEFT() { PatternEditorTools::Position& cursor = patternEditor->getCursor(); cursor.inner--; if (cursor.inner < 0) { if (cursor.channel > 0) { cursor.channel--; cursor.inner = 7; } else { // When selecting don't wrap around (not intuitive) if (::getKeyModifier() & selectionKeyModifier) { cursor.inner = 0; } else { cursor.inner = 7; cursor.channel = patternEditor->getNumChannels()-1; } } } } void PatternEditorControl::eventKeyDownBinding_RIGHT() { PatternEditorTools::Position& cursor = patternEditor->getCursor(); cursor.inner++; if (cursor.inner == 8) { if (cursor.channel < patternEditor->getNumChannels() - 1) { cursor.channel++; cursor.inner = 0; } else { // When selecting don't wrap around (not intuitive) if (::getKeyModifier() & selectionKeyModifier) { cursor.inner = 7; } else { cursor.inner = 0; cursor.channel = 0; } } } } void PatternEditorControl::eventKeyDownBinding_UP() { PatternEditorTools::Position& cursor = patternEditor->getCursor(); pp_int32 res = 0; cursor.row--; // When selecting don't wrap around (not intuitive) if (cursor.row < 0 && ((::getKeyModifier() & selectionKeyModifier) || startSelection)) { cursor.row = 0; return; } else if (cursor.row < 0) { res = notifyUpdate(AdvanceCodeCursorUpWrappedStart); } if (!res && cursor.row < 0) { //cursor.row = wrapAround ? pattern->rows-1 : 0; cursor.row = pattern->rows-1; } if (!res) notifyUpdate(AdvanceCodeSelectNewRow); } void PatternEditorControl::eventKeyDownBinding_DOWN() { PatternEditorTools::Position& cursor = patternEditor->getCursor(); pp_int32 res = 0; cursor.row++; if (cursor.row > pattern->rows-1 && ((::getKeyModifier() & selectionKeyModifier) || startSelection)) { cursor.row = pattern->rows-1; return; } else if (cursor.row > pattern->rows-1) { res = notifyUpdate(AdvanceCodeCursorDownWrappedEnd); } if (!res && cursor.row > pattern->rows-1) { //cursor.row = wrapAround ? 0 : pattern->rows-1; cursor.row = 0; } if (!res) notifyUpdate(AdvanceCodeSelectNewRow); } void PatternEditorControl::eventKeyDownBinding_PRIOR() { PatternEditorTools::Position& cursor = patternEditor->getCursor(); pp_int32 res = 0; cursor.row-=16; // When selecting don't wrap around (not intuitive) if (cursor.row < 0 && ((::getKeyModifier() & selectionKeyModifier) || startSelection)) { cursor.row = 0; return; } else if (cursor.row < 0) { res = notifyUpdate(AdvanceCodeCursorPageUpWrappedStart); } if (!res && cursor.row < 0) { cursor.row = /*wrapAround ? pattern->rows-1 : */0; } if (!res) notifyUpdate(AdvanceCodeSelectNewRow); } void PatternEditorControl::eventKeyDownBinding_NEXT() { PatternEditorTools::Position& cursor = patternEditor->getCursor(); pp_int32 res = 0; cursor.row+=16; if (cursor.row > pattern->rows-1 && ((::getKeyModifier() & selectionKeyModifier) || startSelection)) { cursor.row = pattern->rows-1; return; } else if (cursor.row > pattern->rows-1) { res = notifyUpdate(AdvanceCodeCursorPageDownWrappedEnd); } if (!res && cursor.row > pattern->rows-1) { cursor.row = /*wrapAround ? 0 : */pattern->rows-1; } if (!res) notifyUpdate(AdvanceCodeSelectNewRow); } void PatternEditorControl::eventKeyDownBinding_HOME() { patternEditor->getCursor().row = 0; notifyUpdate(AdvanceCodeSelectNewRow); } void PatternEditorControl::eventKeyDownBinding_END() { patternEditor->getCursor().row = pattern->rows-1; notifyUpdate(AdvanceCodeSelectNewRow); } void PatternEditorControl::eventKeyDownBinding_FIRSTQUARTER() { patternEditor->getCursor().row = (pattern->rows >> 2); notifyUpdate(AdvanceCodeSelectNewRow); } void PatternEditorControl::eventKeyDownBinding_SECONDQUARTER() { patternEditor->getCursor().row = (pattern->rows >> 2)*2; notifyUpdate(AdvanceCodeSelectNewRow); } void PatternEditorControl::eventKeyDownBinding_THIRDQUARTER() { patternEditor->getCursor().row = (pattern->rows >> 2)*3; notifyUpdate(AdvanceCodeSelectNewRow); } //////////////////////////////////////////////////////////////////////////////////////////////////////// // Damn FT2 shortcuts //////////////////////////////////////////////////////////////////////////////////////////////////////// void PatternEditorControl::eventKeyDownBinding_ReadMacro1() { patternEditor->storeMacroFromCursor(1); } void PatternEditorControl::eventKeyDownBinding_ReadMacro2() { patternEditor->storeMacroFromCursor(2); } void PatternEditorControl::eventKeyDownBinding_ReadMacro3() { patternEditor->storeMacroFromCursor(3); } void PatternEditorControl::eventKeyDownBinding_ReadMacro4() { patternEditor->storeMacroFromCursor(4); } void PatternEditorControl::eventKeyDownBinding_ReadMacro5() { patternEditor->storeMacroFromCursor(5); } void PatternEditorControl::eventKeyDownBinding_ReadMacro6() { patternEditor->storeMacroFromCursor(6); } void PatternEditorControl::eventKeyDownBinding_ReadMacro7() { patternEditor->storeMacroFromCursor(7); } void PatternEditorControl::eventKeyDownBinding_ReadMacro8() { patternEditor->storeMacroFromCursor(8); } void PatternEditorControl::eventKeyDownBinding_ReadMacro9() { patternEditor->storeMacroFromCursor(9); } void PatternEditorControl::eventKeyDownBinding_ReadMacro0() { patternEditor->storeMacroFromCursor(0); } void PatternEditorControl::eventKeyDownBinding_WriteMacro1() { // prevent unnecessary screen refreshing through listener callback patternEditor->setLazyUpdateNotifications(true); patternEditor->writeMacroToCursor(1, this); patternEditor->setLazyUpdateNotifications(false); } void PatternEditorControl::eventKeyDownBinding_WriteMacro2() { // prevent unnecessary screen refreshing through listener callback patternEditor->setLazyUpdateNotifications(true); patternEditor->writeMacroToCursor(2, this); patternEditor->setLazyUpdateNotifications(false); } void PatternEditorControl::eventKeyDownBinding_WriteMacro3() { // prevent unnecessary screen refreshing through listener callback patternEditor->setLazyUpdateNotifications(true); patternEditor->writeMacroToCursor(3, this); patternEditor->setLazyUpdateNotifications(false); } void PatternEditorControl::eventKeyDownBinding_WriteMacro4() { // prevent unnecessary screen refreshing through listener callback patternEditor->setLazyUpdateNotifications(true); patternEditor->writeMacroToCursor(4, this); patternEditor->setLazyUpdateNotifications(false); } void PatternEditorControl::eventKeyDownBinding_WriteMacro5() { // prevent unnecessary screen refreshing through listener callback patternEditor->setLazyUpdateNotifications(true); patternEditor->writeMacroToCursor(5, this); patternEditor->setLazyUpdateNotifications(false); } void PatternEditorControl::eventKeyDownBinding_WriteMacro6() { // prevent unnecessary screen refreshing through listener callback patternEditor->setLazyUpdateNotifications(true); patternEditor->writeMacroToCursor(6, this); patternEditor->setLazyUpdateNotifications(false); } void PatternEditorControl::eventKeyDownBinding_WriteMacro7() { // prevent unnecessary screen refreshing through listener callback patternEditor->setLazyUpdateNotifications(true); patternEditor->writeMacroToCursor(7, this); patternEditor->setLazyUpdateNotifications(false); } void PatternEditorControl::eventKeyDownBinding_WriteMacro8() { // prevent unnecessary screen refreshing through listener callback patternEditor->setLazyUpdateNotifications(true); patternEditor->writeMacroToCursor(8, this); patternEditor->setLazyUpdateNotifications(false); } void PatternEditorControl::eventKeyDownBinding_WriteMacro9() { // prevent unnecessary screen refreshing through listener callback patternEditor->setLazyUpdateNotifications(true); patternEditor->writeMacroToCursor(9, this); patternEditor->setLazyUpdateNotifications(false); } void PatternEditorControl::eventKeyDownBinding_WriteMacro0() { // prevent unnecessary screen refreshing through listener callback patternEditor->setLazyUpdateNotifications(true); patternEditor->writeMacroToCursor(0, this); patternEditor->setLazyUpdateNotifications(false); } void PatternEditorControl::eventKeyDownBinding_SC_Q() { patternEditor->getCursor().channel = 0 % patternEditor->getNumChannels(); } void PatternEditorControl::eventKeyDownBinding_SC_W() { patternEditor->getCursor().channel = 1 % patternEditor->getNumChannels(); } void PatternEditorControl::eventKeyDownBinding_SC_E() { patternEditor->getCursor().channel = 2 % patternEditor->getNumChannels(); } void PatternEditorControl::eventKeyDownBinding_SC_R() { patternEditor->getCursor().channel = 3 % patternEditor->getNumChannels(); } void PatternEditorControl::eventKeyDownBinding_SC_T() { patternEditor->getCursor().channel = 4 % patternEditor->getNumChannels(); } void PatternEditorControl::eventKeyDownBinding_SC_Z() { patternEditor->getCursor().channel = 5 % patternEditor->getNumChannels(); } void PatternEditorControl::eventKeyDownBinding_SC_U() { patternEditor->getCursor().channel = 6 % patternEditor->getNumChannels(); } void PatternEditorControl::eventKeyDownBinding_SC_I() { patternEditor->getCursor().channel = 7 % patternEditor->getNumChannels(); } void PatternEditorControl::eventKeyDownBinding_SC_A() { patternEditor->getCursor().channel = 8 % patternEditor->getNumChannels(); } void PatternEditorControl::eventKeyDownBinding_SC_S() { patternEditor->getCursor().channel = 9 % patternEditor->getNumChannels(); } void PatternEditorControl::eventKeyDownBinding_SC_D() { patternEditor->getCursor().channel = 10 % patternEditor->getNumChannels(); } void PatternEditorControl::eventKeyDownBinding_SC_F() { patternEditor->getCursor().channel = 11 % patternEditor->getNumChannels(); } void PatternEditorControl::eventKeyDownBinding_SC_G() { patternEditor->getCursor().channel = 12 % patternEditor->getNumChannels(); } void PatternEditorControl::eventKeyDownBinding_SC_H() { patternEditor->getCursor().channel = 13 % patternEditor->getNumChannels(); } void PatternEditorControl::eventKeyDownBinding_SC_J() { patternEditor->getCursor().channel = 14 % patternEditor->getNumChannels(); } void PatternEditorControl::eventKeyDownBinding_SC_K() { patternEditor->getCursor().channel = 15 % patternEditor->getNumChannels(); } void PatternEditorControl::eventKeyDownBinding_SC_IncreaseRowInsertAdd() { increaseRowInsertAdd(); notifyUpdate(); } void PatternEditorControl::eventKeyDownBinding_SC_DecreaseRowInsertAdd() { decreaseRowInsertAdd(); notifyUpdate(); } void PatternEditorControl::eventKeyDownBinding_DeleteNote() { // prevent unnecessary screen refreshing through listener callback patternEditor->setLazyUpdateNotifications(true); patternEditor->deleteCursorSlotData(this); patternEditor->setLazyUpdateNotifications(false); } void PatternEditorControl::eventKeyDownBinding_DeleteNoteVolumeAndEffect() { // prevent unnecessary screen refreshing through listener callback patternEditor->setLazyUpdateNotifications(true); patternEditor->deleteCursorSlotDataEntire(this); patternEditor->setLazyUpdateNotifications(false); } void PatternEditorControl::eventKeyDownBinding_DeleteVolumeAndEffect() { // prevent unnecessary screen refreshing through listener callback patternEditor->setLazyUpdateNotifications(true); patternEditor->deleteCursorSlotDataVolumeAndEffect(this); patternEditor->setLazyUpdateNotifications(false); } void PatternEditorControl::eventKeyDownBinding_DeleteEffect() { // prevent unnecessary screen refreshing through listener callback patternEditor->setLazyUpdateNotifications(true); patternEditor->deleteCursorSlotDataEffect(this); patternEditor->setLazyUpdateNotifications(false); } void PatternEditorControl::eventKeyDownBinding_PreviousChannel() { PatternEditorTools::Position& cursor = patternEditor->getCursor(); // if the track inner position is not the note column, we will first // set the position to the note before decrementing the track result if (properties.tabToNote && cursor.inner > 0) { cursor.inner = 0; return; } if (cursor.channel > 0) { cursor.channel--; if (properties.tabToNote) cursor.inner = 0; } else { // When selecting don't wrap around (not intuitive) if (::getKeyModifier() & selectionKeyModifier) { cursor.channel = 0; cursor.inner = 0; } else { cursor.channel = patternEditor->getNumChannels() - 1; if (properties.tabToNote) cursor.inner = 0; } } } void PatternEditorControl::eventKeyDownBinding_NextChannel() { PatternEditorTools::Position& cursor = patternEditor->getCursor(); if (cursor.channel < patternEditor->getNumChannels() - 1) { cursor.channel++; if (properties.tabToNote) cursor.inner = 0; } else { // When selecting don't wrap around (not intuitive) if (::getKeyModifier() & selectionKeyModifier) { cursor.channel = patternEditor->getNumChannels()-1; cursor.inner = 7; } else { cursor.channel = 0; if (properties.tabToNote) cursor.inner = 0; } } } void PatternEditorControl::eventKeyDownBinding_InsertNote() { // prevent unnecessary screen refreshing through listener callback patternEditor->setLazyUpdateNotifications(true); patternEditor->insertNote(patternEditor->getCursor().channel, patternEditor->getCursor().row); patternEditor->setLazyUpdateNotifications(false); } void PatternEditorControl::eventKeyDownBinding_InsertLine() { // prevent unnecessary screen refreshing through listener callback patternEditor->setLazyUpdateNotifications(true); patternEditor->insertLine(patternEditor->getCursor().row); patternEditor->setLazyUpdateNotifications(false); } void PatternEditorControl::eventKeyDownBinding_DeleteNoteSlot() { PatternEditorTools::Position& cursor = patternEditor->getCursor(); if (cursor.row) { cursor.row--; // prevent unnecessary screen refreshing through listener callback patternEditor->setLazyUpdateNotifications(true); patternEditor->deleteNote(cursor.channel, cursor.row); patternEditor->setLazyUpdateNotifications(false); } } void PatternEditorControl::eventKeyDownBinding_DeleteLine() { PatternEditorTools::Position& cursor = patternEditor->getCursor(); if (cursor.row) { cursor.row--; // prevent unnecessary screen refreshing through listener callback patternEditor->setLazyUpdateNotifications(true); patternEditor->deleteLine(cursor.row); patternEditor->setLazyUpdateNotifications(false); } } void PatternEditorControl::eventKeyDownBinding_InsIncSelection() { patternEditor->insIncSelection(); } void PatternEditorControl::eventKeyDownBinding_InsDecSelection() { patternEditor->insDecSelection(); } void PatternEditorControl::eventKeyDownBinding_InsIncTrack() { patternEditor->insIncTrack(); } void PatternEditorControl::eventKeyDownBinding_InsDecTrack() { patternEditor->insDecTrack(); } void PatternEditorControl::eventKeyDownBinding_CutTrack() { PatternEditorTools::Position& cursor = patternEditor->getCursor(); PatternEditorTools::Position ss = patternEditor->getSelection().start, se = patternEditor->getSelection().end, cc = cursor; markChannel(cursor.channel, false); // if invoked by key combination, the view shouldn't be adjusted // to ensure a visible cursor, just stay where you are assureCursor = false; // but an update might be useful assureUpdate = true; // remember cursor position cursorCopy = patternEditor->getCursor(); patternEditor->cut(PatternEditor::ClipBoardTypeTrack); patternEditor->getSelection().start = ss; patternEditor->getSelection().end = se; cursor = cc; } void PatternEditorControl::eventKeyDownBinding_CopyTrack() { PatternEditorTools::Position& cursor = patternEditor->getCursor(); PatternEditorTools::Position ss = patternEditor->getSelection().start, se = patternEditor->getSelection().end, cc = cursor; markChannel(cursor.channel, false); // if invoked by key combination, the view shouldn't be adjusted // to ensure a visible cursor, just stay where you are assureCursor = false; // but an update might be useful assureUpdate = true; // remember cursor position cursorCopy = patternEditor->getCursor(); patternEditor->copy(PatternEditor::ClipBoardTypeTrack); patternEditor->getSelection().start = ss; patternEditor->getSelection().end = se; cursor = cc; } void PatternEditorControl::eventKeyDownBinding_PasteTrack() { PatternEditorTools::Position& cursor = patternEditor->getCursor(); PatternEditorTools::Position ss = patternEditor->getSelection().start, se = patternEditor->getSelection().end, cc = cursor; // Start at row 0 cursor.row = 0; cursor.inner = 0; patternEditor->paste(PatternEditor::ClipBoardTypeTrack, false); patternEditor->getSelection().start = ss; patternEditor->getSelection().end = se; cursor = cc; } void PatternEditorControl::eventKeyDownBinding_TransparentPasteTrack() { PatternEditorTools::Position& cursor = patternEditor->getCursor(); PatternEditorTools::Position ss = patternEditor->getSelection().start, se = patternEditor->getSelection().end, cc = cursor; // Start at row 0 cursor.row = 0; cursor.inner = 0; patternEditor->paste(PatternEditor::ClipBoardTypeTrack, true); patternEditor->getSelection().start = ss; patternEditor->getSelection().end = se; cursor = cc; } void PatternEditorControl::eventKeyDownBinding_CutPattern() { PatternEditorTools::Position& cursor = patternEditor->getCursor(); PatternEditorTools::Position ss = patternEditor->getSelection().start, se = patternEditor->getSelection().end, cc = cursor; selectAll(); // if invoked by key combination, the view shouldn't be adjusted // to ensure a visible cursor, just stay where you are assureCursor = false; // but an update might be useful assureUpdate = true; // remember cursor position cursorCopy = patternEditor->getCursor(); patternEditor->cut(PatternEditor::ClipBoardTypePattern); patternEditor->getSelection().start = ss; patternEditor->getSelection().end = se; cursor = cc; } void PatternEditorControl::eventKeyDownBinding_CopyPattern() { PatternEditorTools::Position& cursor = patternEditor->getCursor(); PatternEditorTools::Position ss = patternEditor->getSelection().start, se = patternEditor->getSelection().end, cc = cursor; selectAll(); // if invoked by key combination, the view shouldn't be adjusted // to ensure a visible cursor, just stay where you are assureCursor = false; // but an update might be useful assureUpdate = true; // remember cursor position cursorCopy = patternEditor->getCursor(); patternEditor->copy(PatternEditor::ClipBoardTypePattern); patternEditor->getSelection().start = ss; patternEditor->getSelection().end = se; cursor = cc; } void PatternEditorControl::eventKeyDownBinding_PastePattern() { PatternEditorTools::Position& cursor = patternEditor->getCursor(); PatternEditorTools::Position ss = patternEditor->getSelection().start, se = patternEditor->getSelection().end, cc = cursor; // start at row 0/channel 0 cursor.row = 0; cursor.channel = 0; cursor.inner = 0; patternEditor->paste(PatternEditor::ClipBoardTypePattern, false); patternEditor->getSelection().start = ss; patternEditor->getSelection().end = se; cursor = cc; } void PatternEditorControl::eventKeyDownBinding_TransparentPastePattern() { PatternEditorTools::Position& cursor = patternEditor->getCursor(); PatternEditorTools::Position ss = patternEditor->getSelection().start, se = patternEditor->getSelection().end, cc = cursor; // start at row 0/channel 0 cursor.row = 0; cursor.channel = 0; cursor.inner = 0; patternEditor->paste(PatternEditor::ClipBoardTypePattern, true); patternEditor->getSelection().start = ss; patternEditor->getSelection().end = se; cursor = cc; } void PatternEditorControl::eventKeyCharBinding_Undo() { patternEditor->undo(); } void PatternEditorControl::eventKeyCharBinding_Redo() { patternEditor->redo(); } void PatternEditorControl::eventKeyCharBinding_Cut() { // if invoked by key combination, the view shouldn't be adjusted // to ensure a visible cursor, just stay where you are assureCursor = false; // but an update might be useful assureUpdate = true; // remember cursor position cursorCopy = patternEditor->getCursor(); patternEditor->cut(PatternEditor::ClipBoardTypeSelection); } void PatternEditorControl::eventKeyCharBinding_Copy() { // if invoked by key combination, the view shouldn't be adjusted // to ensure a visible cursor, just stay where you are assureCursor = false; // but an update might be useful assureUpdate = true; // remember cursor position cursorCopy = patternEditor->getCursor(); patternEditor->copy(PatternEditor::ClipBoardTypeSelection); } void PatternEditorControl::eventKeyCharBinding_Paste() { if (patternEditor->getCursor() == cursorCopy && menuInvokeChannel != -1) patternEditor->paste(PatternEditor::ClipBoardTypeSelection, false, menuInvokeChannel); else patternEditor->paste(PatternEditor::ClipBoardTypeSelection, false); // If row count changed, call notifyUpdate to refresh pattern length indicator if (patternEditor->getLastOperationDidChangeRows()) notifyUpdate(); } void PatternEditorControl::eventKeyCharBinding_TransparentPaste() { if (patternEditor->getCursor() == cursorCopy && menuInvokeChannel != -1) patternEditor->paste(PatternEditor::ClipBoardTypeSelection, true, menuInvokeChannel); else patternEditor->paste(PatternEditor::ClipBoardTypeSelection, true); // If row count changed, call notifyUpdate to refresh pattern length indicator if (patternEditor->getLastOperationDidChangeRows()) notifyUpdate(); } void PatternEditorControl::eventKeyCharBinding_SelectAll() { PatternEditor::Selection currentSelection = patternEditor->getSelection(); if (currentSelection.start.channel == 0 && currentSelection.start.row == 0 && currentSelection.end.channel == patternEditor->getNumChannels()-1 && currentSelection.end.row == pattern->rows-1) { deselectAll(); } else { selectAll(); } } void PatternEditorControl::eventKeyCharBinding_MuteChannel() { muteChannels[patternEditor->getCursor().channel] = !muteChannels[patternEditor->getCursor().channel]; PPEvent e(eValueChanged, &muteChannels, sizeof(muteChannels)); eventListener->handleEvent(reinterpret_cast(this), &e); } void PatternEditorControl::eventKeyCharBinding_InvertMuting() { for (pp_int32 i = 0; i < patternEditor->getNumChannels(); i++) muteChannels[i] = !muteChannels[i]; PPEvent e(eValueChanged, &muteChannels, sizeof(muteChannels)); eventListener->handleEvent(reinterpret_cast(this), &e); } void PatternEditorControl::eventKeyCharBinding_Interpolate() { patternEditor->interpolateValuesInSelection(); } MilkyTracker-1.02.00/src/tracker/PatternEditorControlTransposeHandler.cpp000066400000000000000000000070131324432207300265240ustar00rootroot00000000000000/* * tracker/PatternEditorControlTransposeHandler.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * PatternEditorControlTransposeHandler.cpp * MilkyTracker * * Created by Peter Barth on 06.10.05. * */ #include "PatternEditorControl.h" #include "DialogBase.h" void PatternEditorControl::showNoteTransposeWarningMessageBox(pp_int32 fuckups) { if (dialog) { delete dialog; dialog = NULL; } char buffer[100]; sprintf(buffer, "%i notes will be erased, continue?", fuckups); dialog = new PPDialogBase(parentScreen, transposeHandlerResponder, PP_DEFAULT_ID, buffer); dialog->show(); } pp_int32 PatternEditorControl::noteTransposeTrack(const PatternEditorTools::TransposeParameters& transposeParameters) { pp_int32 fuckups = patternEditor->noteTransposeTrackCore(transposeParameters, true); if (!fuckups) return patternEditor->noteTransposeTrackCore(transposeParameters, false); if (transposeHandlerResponder == NULL) return -1; transposeHandlerResponder->setTransposeParameters(transposeParameters); transposeHandlerResponder->setTransposeFunc(&PatternEditor::noteTransposeTrackCore); showNoteTransposeWarningMessageBox(fuckups); return 0; } pp_int32 PatternEditorControl::noteTransposePattern(const PatternEditorTools::TransposeParameters& transposeParameters) { pp_int32 fuckups = patternEditor->noteTransposePatternCore(transposeParameters, true); if (!fuckups) return patternEditor->noteTransposePatternCore(transposeParameters, false); if (transposeHandlerResponder == NULL) return -1; transposeHandlerResponder->setTransposeParameters(transposeParameters); transposeHandlerResponder->setTransposeFunc(&PatternEditor::noteTransposePatternCore); showNoteTransposeWarningMessageBox(fuckups); return 0; } pp_int32 PatternEditorControl::noteTransposeSelection(const PatternEditorTools::TransposeParameters& transposeParameters) { pp_int32 fuckups = patternEditor->noteTransposeSelectionCore(transposeParameters, true); if (!fuckups) return patternEditor->noteTransposeSelectionCore(transposeParameters, false); if (transposeHandlerResponder == NULL) return -1; transposeHandlerResponder->setTransposeParameters(transposeParameters); transposeHandlerResponder->setTransposeFunc(&PatternEditor::noteTransposeSelectionCore); showNoteTransposeWarningMessageBox(fuckups); return 0; } PatternEditorControl::TransposeHandlerResponder::TransposeHandlerResponder(PatternEditorControl& thePatternEditorControl) : patternEditorControl(thePatternEditorControl), transposeFunc(NULL) { } pp_int32 PatternEditorControl::TransposeHandlerResponder::ActionOkay(PPObject* sender) { if (transposeFunc == NULL) return -1; (patternEditorControl.patternEditor->*transposeFunc)(transposeParameters, false); return 0; } pp_int32 PatternEditorControl::TransposeHandlerResponder::ActionCancel(PPObject* sender) { return 0; } MilkyTracker-1.02.00/src/tracker/PatternEditorTools.cpp000066400000000000000000001243211324432207300230110ustar00rootroot00000000000000/* * tracker/PatternEditorTools.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * PatternEditorTools.cpp * MilkyTracker * * Created by Peter Barth on 16.11.07. * */ #include "PatternEditorTools.h" #include "XModule.h" #include "PatternTools.h" PatternEditorTools::PatternEditorTools(TXMPattern* pattern) : pattern(pattern) { } PatternEditorTools::Position PatternEditorTools::getMarkStart() { Position pos; pos.channel = pos.row = pos.inner = 0; return pos; } PatternEditorTools::Position PatternEditorTools::getMarkEnd() { Position pos; pos.channel = pos.row = pos.inner = 0; if (pattern->patternData != NULL) { pos.channel = pattern->channum - 1; pos.inner = 7; pos.row = pattern->rows - 1; } return pos; } bool PatternEditorTools::normalizeSelection(const TXMPattern* pattern, const PatternEditorTools::Position& ss, const PatternEditorTools::Position& se, pp_int32& selectionStartChannel, pp_int32& selectionStartRow, pp_int32& selectionStartInner, pp_int32& selectionEndChannel, pp_int32& selectionEndRow, pp_int32& selectionEndInner) { pp_int32 ssc = ss.channel, ssr = ss.row, ssi = ss.inner; pp_int32 sec = se.channel, ser = se.row, sei = se.inner; if (ssc < 0 && ssr < 0 && sec < 0 && ser < 0) return false; // sanity checks if (ssc < 0) ssc = 0; if (ssc >= pattern->channum) ssc = pattern->channum-1; if (sec < 0) sec = 0; if (sec >= pattern->channum) sec = pattern->channum-1; if (ssr < 0) ssr = 0; if (ssr >= pattern->rows) ssr = pattern->rows-1; if (ser < 0) ser = 0; if (ser >= pattern->rows) ser = pattern->rows-1; if (ssi < 0) ssi = 0; if (ssi > 7) ssi = 7; if (sei < 0) sei = 0; if (sei > 7) sei = 7; // correct orientation selectionStartChannel = 0; selectionStartRow = 0; selectionStartInner = 0; selectionEndChannel = 0; selectionEndRow = 0; selectionEndInner = 0; if (ssc > sec) { selectionStartChannel = sec; selectionEndChannel = ssc; selectionStartInner = sei; selectionEndInner = ssi; } else { selectionStartChannel = ssc; selectionEndChannel = sec; selectionStartInner = ssi; selectionEndInner = sei; } if (ssr > ser) { selectionStartRow = ser; selectionEndRow = ssr; } else { selectionStartRow = ssr; selectionEndRow = ser; } if (selectionStartChannel == selectionEndChannel && selectionEndInner < selectionStartInner) { mp_sint32 h = selectionEndInner; selectionEndInner = selectionStartInner; selectionStartInner = h; } return true; } void PatternEditorTools::clearSelection(const PatternEditorTools::Position& ss, const PatternEditorTools::Position& se) { if (!PatternEditorTools::hasValidSelection(pattern, ss, se)) return; pp_int32 selectionStartChannel; pp_int32 selectionStartRow; pp_int32 selectionStartInner; pp_int32 selectionEndChannel; pp_int32 selectionEndRow; pp_int32 selectionEndInner; if (!normalizeSelection(pattern, ss, se, selectionStartChannel, selectionStartRow, selectionStartInner, selectionEndChannel, selectionEndRow,selectionEndInner)) return; // only entire instrument column is allowed if (selectionStartInner >= 1 && selectionStartInner<=2) selectionStartInner = 1; if (selectionEndInner >= 1 && selectionEndInner<=2) selectionEndInner = 2; // only entire volume column can be selected if (selectionStartInner >= 3 && selectionStartInner<=4) selectionStartInner = 3; if (selectionEndInner >= 3 && selectionEndInner<=4) selectionEndInner = 4; pp_int32 selectionWidth = selectionEndChannel - selectionStartChannel + 1; pp_int32 selectionHeight = selectionEndRow - selectionStartRow + 1; mp_sint32 slotSize = pattern->effnum * 2 + 2; mp_sint32 rowSizeSrc = slotSize*pattern->channum; for (pp_int32 i = 0; i < selectionHeight; i++) for (pp_int32 j = 0; j < selectionWidth; j++) { mp_ubyte* src = pattern->patternData + (selectionStartRow+i)*rowSizeSrc+(selectionStartChannel+j)*slotSize; //memset(src, 0, slotSize); if (selectionWidth == 1) { slotClear(src, selectionStartInner, selectionEndInner); } else if (j == selectionStartChannel) { slotClear(src, selectionStartInner, 7); } else if (j == selectionEndChannel) { slotClear(src, 0, selectionEndInner); } else { //memcpy(dst, src, slotSize); slotClear(src, 0, 7); } } } bool PatternEditorTools::expandPattern() { if (pattern == NULL) return false; if (pattern->patternData == NULL) return false; if (pattern->rows * 2 > 256) return false; mp_sint32 slotSize = pattern->effnum * 2 + 2; // allocate twice the space of the current pattern mp_sint32 patternSize = slotSize * pattern->channum * pattern->rows * 2; mp_ubyte* newPatternData = new mp_ubyte[patternSize]; memset(newPatternData, 0, patternSize); for (mp_sint32 i = 0; i < pattern->rows; i++) { mp_sint32 srcOffset = i * slotSize * pattern->channum; mp_sint32 dstOffset = i * 2 * slotSize * pattern->channum; for (mp_sint32 j = 0; j < slotSize * pattern->channum; j++) newPatternData[dstOffset++] = pattern->patternData[srcOffset++]; } delete[] pattern->patternData; pattern->patternData = newPatternData; pattern->rows <<= 1; return true; } bool PatternEditorTools::shrinkPattern() { if (pattern == NULL) return false; if (pattern->patternData == NULL) return false; if (pattern->rows < 2) return false; mp_sint32 slotSize = pattern->effnum * 2 + 2; // allocate half of the space of the current pattern mp_sint32 patternSize = slotSize * pattern->channum * (pattern->rows >> 1); mp_ubyte* newPatternData = new mp_ubyte[patternSize]; memset(newPatternData, 0, patternSize); for (mp_sint32 i = 0; i < pattern->rows >> 1; i++) { mp_sint32 srcOffset = i * 2 * slotSize * pattern->channum; mp_sint32 dstOffset = i * slotSize * pattern->channum; for (mp_sint32 j = 0; j < slotSize * pattern->channum; j++) newPatternData[dstOffset++] = pattern->patternData[srcOffset++]; } delete[] pattern->patternData; pattern->patternData = newPatternData; pattern->rows >>= 1; return true; } pp_int32 PatternEditorTools::insIncSelection(const Position& ss, const Position& se) { if (!PatternEditorTools::hasValidSelection(pattern, ss, se)) return 0; pp_int32 selectionStartChannel; pp_int32 selectionStartRow; pp_int32 selectionStartInner; pp_int32 selectionEndChannel; pp_int32 selectionEndRow; pp_int32 selectionEndInner; if (!normalizeSelection(pattern, ss, se, selectionStartChannel, selectionStartRow, selectionStartInner, selectionEndChannel, selectionEndRow,selectionEndInner)) return 0; pp_int32 selectionWidth = selectionEndChannel - selectionStartChannel + 1; pp_int32 selectionHeight = selectionEndRow - selectionStartRow + 1; mp_sint32 slotSize = pattern->effnum * 2 + 2; mp_sint32 rowSizeSrc = slotSize*pattern->channum; pp_int32 resCnt = 0; for (pp_int32 i = 0; i < selectionHeight; i++) for (pp_int32 j = 0; j < selectionWidth; j++) { mp_ubyte* src = pattern->patternData + (selectionStartRow+i)*rowSizeSrc+(selectionStartChannel+j)*slotSize; if (src[1] && src[1] < 0xFF) { src[1]++; resCnt++; } } return resCnt; } pp_int32 PatternEditorTools::insDecSelection(const Position& ss, const Position& se) { if (!PatternEditorTools::hasValidSelection(pattern, ss, se)) return 0; pp_int32 selectionStartChannel; pp_int32 selectionStartRow; pp_int32 selectionStartInner; pp_int32 selectionEndChannel; pp_int32 selectionEndRow; pp_int32 selectionEndInner; if (!normalizeSelection(pattern, ss, se, selectionStartChannel, selectionStartRow, selectionStartInner, selectionEndChannel, selectionEndRow,selectionEndInner)) return 0; pp_int32 selectionWidth = selectionEndChannel - selectionStartChannel + 1; pp_int32 selectionHeight = selectionEndRow - selectionStartRow + 1; mp_sint32 slotSize = pattern->effnum * 2 + 2; mp_sint32 rowSizeSrc = slotSize*pattern->channum; pp_int32 resCnt = 0; for (pp_int32 i = 0; i < selectionHeight; i++) for (pp_int32 j = 0; j < selectionWidth; j++) { mp_ubyte* src = pattern->patternData + (selectionStartRow+i)*rowSizeSrc+(selectionStartChannel+j)*slotSize; if (src[1] > 1) { src[1]--; resCnt++; } } return resCnt; } pp_int32 PatternEditorTools::insIncTrack(pp_int32 track) { Position ss, se = getMarkEnd(); ss.channel = track; ss.inner = 0; ss.row = 0; se.channel = track; se.inner = 7; return insIncSelection(ss, se); } pp_int32 PatternEditorTools::insDecTrack(pp_int32 track) { Position ss, se = getMarkEnd(); ss.channel = track; ss.inner = 0; ss.row = 0; se.channel = track; se.inner = 7; return insDecSelection(ss, se); } pp_int32 PatternEditorTools::insRemapSelection(const Position& ss, const Position& se, pp_int32 oldIns, pp_int32 newIns) { if (!PatternEditorTools::hasValidSelection(pattern, ss, se)) return 0; pp_int32 selectionStartChannel; pp_int32 selectionStartRow; pp_int32 selectionStartInner; pp_int32 selectionEndChannel; pp_int32 selectionEndRow; pp_int32 selectionEndInner; if (!normalizeSelection(pattern, ss, se, selectionStartChannel, selectionStartRow, selectionStartInner, selectionEndChannel, selectionEndRow,selectionEndInner)) return 0; // only entire instrument column is allowed if (selectionStartInner >= 1 && selectionStartInner<=2) selectionStartInner = 1; if (selectionEndInner >= 1 && selectionEndInner<=2) selectionEndInner = 2; // only entire volume column can be selected if (selectionStartInner >= 3 && selectionStartInner<=4) selectionStartInner = 3; if (selectionEndInner >= 3 && selectionEndInner<=4) selectionEndInner = 4; pp_int32 selectionWidth = selectionEndChannel - selectionStartChannel + 1; pp_int32 selectionHeight = selectionEndRow - selectionStartRow + 1; mp_sint32 slotSize = pattern->effnum * 2 + 2; mp_sint32 rowSizeSrc = slotSize*pattern->channum; pp_int32 resCnt = 0; for (pp_int32 i = 0; i < selectionHeight; i++) for (pp_int32 j = 0; j < selectionWidth; j++) { mp_ubyte* src = pattern->patternData + (selectionStartRow+i)*rowSizeSrc+(selectionStartChannel+j)*slotSize; //memset(src, 0, slotSize); if (selectionWidth == 1) { if (selectionStartInner <= 1 && selectionEndInner >= 2) if (src[1] == oldIns) { src[1] = (mp_ubyte)newIns; resCnt++; } } else if (j == selectionStartChannel) { if (selectionStartInner <= 1) if (src[1] == oldIns) { src[1] = (mp_ubyte)newIns; resCnt++; } } else if (j == selectionEndChannel) { if (selectionEndInner >= 2) if (src[1] == oldIns) { src[1] = (mp_ubyte)newIns; resCnt++; } } else { if (src[1] == oldIns) { src[1] = (mp_ubyte)newIns; resCnt++; } } } return resCnt; } pp_int32 PatternEditorTools::insRemap(pp_int32 oldIns, pp_int32 newIns) { Position ss = getMarkStart(); Position se = getMarkEnd(); return insRemapSelection(ss, se, oldIns, newIns); } pp_int32 PatternEditorTools::insRemapTrack(pp_int32 track, pp_int32 oldIns, pp_int32 newIns) { Position ss, se = getMarkEnd(); ss.channel = track; ss.inner = 0; ss.row = 0; se.channel = track; se.inner = 7; return insRemapSelection(ss, se, oldIns, newIns); } pp_int32 PatternEditorTools::noteTransposeSelection(const Position& ss, const Position& se, const PatternEditorTools::TransposeParameters& transposeParameters, bool evaluate) { if (!PatternEditorTools::hasValidSelection(pattern, ss, se)) return 0; pp_int32 selectionStartChannel; pp_int32 selectionStartRow; pp_int32 selectionStartInner; pp_int32 selectionEndChannel; pp_int32 selectionEndRow; pp_int32 selectionEndInner; if (!normalizeSelection(pattern, ss, se, selectionStartChannel, selectionStartRow, selectionStartInner, selectionEndChannel, selectionEndRow,selectionEndInner)) return 0; // only entire instrument column is allowed if (selectionStartInner >= 1 && selectionStartInner<=2) selectionStartInner = 1; if (selectionEndInner >= 1 && selectionEndInner<=2) selectionEndInner = 2; // only entire volume column can be selected if (selectionStartInner >= 3 && selectionStartInner<=4) selectionStartInner = 3; if (selectionEndInner >= 3 && selectionEndInner<=4) selectionEndInner = 4; pp_int32 selectionWidth = selectionEndChannel - selectionStartChannel + 1; pp_int32 selectionHeight = selectionEndRow - selectionStartRow + 1; mp_sint32 slotSize = pattern->effnum * 2 + 2; mp_sint32 rowSizeSrc = slotSize*pattern->channum; pp_int32 resCnt = 0; pp_int32 fuckupCnt = 0; for (pp_int32 i = 0; i < selectionHeight; i++) for (pp_int32 j = 0; j < selectionWidth; j++) { mp_ubyte* src = pattern->patternData + (selectionStartRow+i)*rowSizeSrc+(selectionStartChannel+j)*slotSize; bool transpose = false; //memset(src, 0, slotSize); if (selectionWidth == 1) { if (selectionStartInner == 0 && selectionEndInner >= 0) transpose = true; } else if (j == selectionStartChannel) { if (selectionStartInner >= 0) transpose = true; } else if (j == selectionEndChannel) { if (selectionEndInner >= 0) transpose = true; } else transpose = true; if (transpose) { bool withinInsRange = false; bool withinNoteRange = false; if (src[0] && src[0] < 97) { if (src[1] >= transposeParameters.insRangeStart && src[1] <= transposeParameters.insRangeEnd) withinInsRange = true; if (src[0] >= transposeParameters.noteRangeStart && src[0] <= transposeParameters.noteRangeEnd) withinNoteRange = true; } if (withinNoteRange && withinInsRange) { pp_int32 note = src[0]; note += transposeParameters.amount; if (!evaluate && note >= 1 && note <= transposeParameters.maxNoteRange) { src[0] = (mp_ubyte)note; resCnt++; } else if (evaluate && (note > transposeParameters.maxNoteRange || note < 1)) fuckupCnt++; else if (!evaluate && (note > transposeParameters.maxNoteRange || note < 1)) { src[0] = 0; fuckupCnt++; } } } } if (!evaluate) return resCnt; else return fuckupCnt; } pp_int32 PatternEditorTools::noteTranspose(const TransposeParameters& transposeParameters, bool evaluate/* = false*/) { Position ss = getMarkStart(); Position se = getMarkEnd(); return noteTransposeSelection(ss, se, transposeParameters, evaluate); } pp_int32 PatternEditorTools::noteTransposeTrack(pp_int32 track, const TransposeParameters& transposeParameters, bool evaluate/* = false*/) { Position ss, se = getMarkEnd(); ss.channel = track; ss.inner = 0; ss.row = 0; se.channel = track; se.inner = 7; return noteTransposeSelection(ss, se, transposeParameters, evaluate); } pp_int32 PatternEditorTools::interpolateValuesInSelection(const PatternEditorTools::Position& ss, const PatternEditorTools::Position& se) { if (!PatternEditorTools::hasValidSelection(pattern, ss, se)) return 0; pp_int32 selectionStartChannel; pp_int32 selectionStartRow; pp_int32 selectionStartInner; pp_int32 selectionEndChannel; pp_int32 selectionEndRow; pp_int32 selectionEndInner; if (!normalizeSelection(pattern, ss, se, selectionStartChannel, selectionStartRow, selectionStartInner, selectionEndChannel, selectionEndRow,selectionEndInner)) return 0; // only entire instrument column is allowed if (selectionStartInner >= 1 && selectionStartInner<=2) selectionStartInner = 1; if (selectionEndInner >= 1 && selectionEndInner<=2) selectionEndInner = 2; // only entire volume column can be selected if (selectionStartInner >= 3 && selectionStartInner<=4) selectionStartInner = 3; if (selectionEndInner >= 3 && selectionEndInner<=4) selectionEndInner = 4; // only entire effect operand column if (selectionStartInner >= 6 && selectionStartInner<=7) selectionStartInner = 6; if (selectionEndInner >= 7 && selectionEndInner<=7) selectionEndInner = 7; pp_int32 selectionWidth = selectionEndChannel - selectionStartChannel + 1; pp_int32 selectionHeight = selectionEndRow - selectionStartRow + 1; mp_sint32 slotSize = pattern->effnum * 2 + 2; mp_sint32 rowSizeSrc = slotSize*pattern->channum; pp_int32 numValues; pp_int32 vTab[256]; pp_int32 vPosTab[256]; ASSERT(pattern->rows <= 256); pp_int32 stats = 0; for (pp_int32 j = 0; j < selectionWidth; j++) for (pp_int32 k = 0; k < 8; k++) { if (selectionWidth == 1) { if (selectionStartInner > k || selectionEndInner < k) continue; } if (j == selectionStartChannel) { if (selectionStartInner > k) continue; } if (j == selectionEndChannel) { if (selectionEndInner < k) continue; } if (k == 2 || k == 4 || k == 6) continue; numValues = 0; for (pp_int32 i = 0; i < selectionHeight; i++) { mp_ubyte* src = pattern->patternData + (selectionStartRow+i)*rowSizeSrc+(selectionStartChannel+j)*slotSize; switch (k) { case 0: if (*src && *src < 97) { vTab[numValues] = *src; vPosTab[numValues] = i; numValues++; } break; case 1: if (*(src+1)) { vTab[numValues] = *(src+1); vPosTab[numValues] = i; numValues++; } break; case 3: { pp_int32 eff, op; eff = *(src + 2); op = *(src + 3); PatternTools::convertEffectsToFT2(eff, op); pp_int32 vol = PatternTools::getVolumeFromEffect(eff, op); if (vol) { vTab[numValues] = vol; vPosTab[numValues] = i; numValues++; } break; } case 7: { pp_int32 eff, op = 0xF; eff = *(src + 4); PatternTools::convertEffectsToFT2(eff, op); if (op) { vTab[numValues] = eff; vPosTab[numValues] = i; numValues++; } break; } // Entire effect case 5: { pp_int32 eff, op; eff = *(src + 4); // Make sure it's a valid effect if (!eff) op = 0; op = *(src + 5); if (eff || op) { vTab[numValues] = op; vPosTab[numValues] = i; numValues++; } } } } // we'll need at least 2 values to interpolate in between if (numValues >= 2) { for (pp_int32 n = 0; n < numValues-1; n++) { pp_int32 startv = vTab[n] << 16; pp_int32 adder = ((vTab[n+1] - vTab[n]) << 16) / (vPosTab[n+1] - vPosTab[n]); for (pp_int32 i = vPosTab[n]; i < vPosTab[n+1]; i++) { mp_ubyte* src = pattern->patternData + (selectionStartRow+i)*rowSizeSrc+(selectionStartChannel+j)*slotSize; pp_int32 v = startv>>16; switch (k) { case 0: if (!*src) *src = (mp_ubyte)v; break; case 1: if (!*(src+1)) *(src+1) = (mp_ubyte)v; break; case 3: { pp_int32 eff, op; PatternTools::convertVolumeToEffect(v, eff, op); if (eff) { *(src + 2) = (mp_ubyte)eff; *(src + 3) = (mp_ubyte)op; } break; } case 7: { pp_int32 eff = v, op = 0xF; PatternTools::convertEffectsFromFT2(eff, op); if (op) { *(src + 4) = (mp_ubyte)eff; } break; } case 5: { *(src + 5) = (mp_ubyte)v; break; } } startv+=adder; stats++; } } } } return stats; } #define ZERO_EFFECT(EFFECT) \ { \ if (optimizeParameters.EFFECT && \ lastOperands[j].EFFECT == op && \ lastOperands[j].EFFECT) \ { \ src[5] = 0; resCnt++; \ } \ else if (optimizeParameters.EFFECT && \ lastOperands[j].EFFECT != op && \ op) \ lastOperands[j].EFFECT = op; \ } struct LastOperands { mp_ubyte command_1xx; mp_ubyte command_2xx; mp_ubyte command_3xx; mp_ubyte command_4xx; mp_ubyte command_56Axx; mp_ubyte command_7xx; mp_ubyte command_E1x; mp_ubyte command_E2x; mp_ubyte command_EAx; mp_ubyte command_EBx; mp_ubyte command_Hxx; mp_ubyte command_Pxx; mp_ubyte command_Rxx; mp_ubyte command_X1x; mp_ubyte command_X2x; }; pp_int32 PatternEditorTools::zeroOperandsSelection(const Position& ss, const Position& se, const OperandOptimizeParameters& optimizeParameters, bool evaluate) { if (!PatternEditorTools::hasValidSelection(pattern, ss, se)) return 0; pp_int32 selectionStartChannel; pp_int32 selectionStartRow; pp_int32 selectionStartInner; pp_int32 selectionEndChannel; pp_int32 selectionEndRow; pp_int32 selectionEndInner; if (!normalizeSelection(pattern, ss, se, selectionStartChannel, selectionStartRow, selectionStartInner, selectionEndChannel, selectionEndRow,selectionEndInner)) return 0; // only entire operand column + effect is allowed if (selectionStartInner >= 5 && selectionStartInner<=7) selectionStartInner = 5; if (selectionEndInner >= 5 && selectionEndInner<=7) selectionEndInner = 7; pp_int32 selectionWidth = selectionEndChannel - selectionStartChannel + 1; pp_int32 selectionHeight = selectionEndRow - selectionStartRow + 1; mp_sint32 slotSize = pattern->effnum * 2 + 2; mp_sint32 rowSizeSrc = slotSize*pattern->channum; pp_int32 resCnt = 0; LastOperands* lastOperands = new LastOperands[selectionWidth]; memset(lastOperands, 0, sizeof(LastOperands) * selectionWidth); for (pp_int32 i = 0; i < selectionHeight; i++) for (pp_int32 j = 0; j < selectionWidth; j++) { mp_ubyte* src = pattern->patternData + (selectionStartRow+i)*rowSizeSrc+(selectionStartChannel+j)*slotSize; const mp_ubyte eff = src[4]; const mp_ubyte op = src[5]; bool doit = false; if (selectionWidth == 1) { if (selectionStartInner <= 5 && selectionEndInner >= 7) { doit = true; } } else if (j == selectionStartChannel) { if (selectionStartInner <= 5) { doit = true; } } else if (j == selectionEndChannel) { if (selectionEndInner >= 7) { doit = true; } } else { doit = true; } if (doit) { switch (eff) { // portamento up case 0x01: ZERO_EFFECT(command_1xx); break; // portamento down case 0x02: ZERO_EFFECT(command_2xx); break; // portamento to note case 0x03: ZERO_EFFECT(command_3xx); break; // vibrato case 0x04: ZERO_EFFECT(command_4xx); break; // portamento+volslide case 0x05: // vibrato+volslide case 0x06: // volslide case 0x0A: ZERO_EFFECT(command_56Axx); break; // tremolo case 0x07: ZERO_EFFECT(command_7xx); break; // fine porta up case 0x31: ZERO_EFFECT(command_E1x); break; // fine porta down case 0x32: ZERO_EFFECT(command_E2x); break; // fine volslide up case 0x3A: ZERO_EFFECT(command_EAx); break; // fine volslide down case 0x3B: ZERO_EFFECT(command_EBx); break; // global volume slide (Hxx) case 0x11: ZERO_EFFECT(command_Hxx); break; // panning slide (Pxx) case 0x19: ZERO_EFFECT(command_Pxx); break; // retrig (Rxx) case 0x1B: ZERO_EFFECT(command_Rxx); break; // x-fine porta up case 0x41: ZERO_EFFECT(command_X1x); break; // x-fine porta down case 0x42: ZERO_EFFECT(command_X2x); break; } } } delete[] lastOperands; return resCnt; } pp_int32 PatternEditorTools::zeroOperands(const OperandOptimizeParameters& optimizeParameters, bool evaluate/* = false*/) { Position ss = getMarkStart(); Position se = getMarkEnd(); return zeroOperandsSelection(ss, se, optimizeParameters, evaluate); } pp_int32 PatternEditorTools::zeroOperandsTrack(pp_int32 track, const OperandOptimizeParameters& optimizeParameters, bool evaluate) { Position ss, se = getMarkEnd(); ss.channel = track; ss.inner = 0; ss.row = 0; se.channel = track; se.inner = 7; return zeroOperandsSelection(ss, se, optimizeParameters, evaluate); } #define FILL_EFFECT(EFFECT) \ { \ if (optimizeParameters.EFFECT && \ !op && \ lastOperands[j].EFFECT) \ { \ src[5] = lastOperands[j].EFFECT; resCnt++; \ } \ else if (optimizeParameters.EFFECT && op) \ lastOperands[j].EFFECT = op; \ } pp_int32 PatternEditorTools::fillOperandsSelection(const Position& ss, const Position& se, const OperandOptimizeParameters& optimizeParameters, bool evaluate) { if (!PatternEditorTools::hasValidSelection(pattern, ss, se)) return 0; pp_int32 selectionStartChannel; pp_int32 selectionStartRow; pp_int32 selectionStartInner; pp_int32 selectionEndChannel; pp_int32 selectionEndRow; pp_int32 selectionEndInner; if (!normalizeSelection(pattern, ss, se, selectionStartChannel, selectionStartRow, selectionStartInner, selectionEndChannel, selectionEndRow,selectionEndInner)) return 0; // only entire operand column + effect is allowed if (selectionStartInner >= 5 && selectionStartInner<=7) selectionStartInner = 5; if (selectionEndInner >= 5 && selectionEndInner<=7) selectionEndInner = 7; pp_int32 selectionWidth = selectionEndChannel - selectionStartChannel + 1; pp_int32 selectionHeight = selectionEndRow - selectionStartRow + 1; mp_sint32 slotSize = pattern->effnum * 2 + 2; mp_sint32 rowSizeSrc = slotSize*pattern->channum; pp_int32 resCnt = 0; LastOperands* lastOperands = new LastOperands[selectionWidth]; memset(lastOperands, 0, sizeof(LastOperands) * selectionWidth); for (pp_int32 i = 0; i < selectionHeight; i++) for (pp_int32 j = 0; j < selectionWidth; j++) { mp_ubyte* src = pattern->patternData + (selectionStartRow+i)*rowSizeSrc+(selectionStartChannel+j)*slotSize; const mp_ubyte eff = src[4]; const mp_ubyte op = src[5]; bool doit = false; if (selectionWidth == 1) { if (selectionStartInner <= 5 && selectionEndInner >= 7) { doit = true; } } else if (j == selectionStartChannel) { if (selectionStartInner <= 5) { doit = true; } } else if (j == selectionEndChannel) { if (selectionEndInner >= 7) { doit = true; } } else { doit = true; } if (doit) { switch (eff) { // portamento up case 0x01: FILL_EFFECT(command_1xx); break; // portamento down case 0x02: FILL_EFFECT(command_2xx); break; // portamento to note case 0x03: FILL_EFFECT(command_3xx); break; // vibrato case 0x04: FILL_EFFECT(command_4xx); break; // portamento+volslide case 0x05: // vibrato+volslide case 0x06: // volslide case 0x0A: FILL_EFFECT(command_56Axx); break; // tremolo case 0x07: FILL_EFFECT(command_7xx); break; // fine porta up case 0x31: FILL_EFFECT(command_E1x); break; // fine porta down case 0x32: FILL_EFFECT(command_E2x); break; // fine volslide up case 0x3A: FILL_EFFECT(command_EAx); break; // fine volslide down case 0x3B: FILL_EFFECT(command_EBx); break; // global volume slide (Hxx) case 0x11: FILL_EFFECT(command_Hxx); break; // panning slide (Pxx) case 0x19: FILL_EFFECT(command_Pxx); break; // retrig (Rxx) case 0x1B: FILL_EFFECT(command_Rxx); break; // x-fine porta up case 0x41: FILL_EFFECT(command_X1x); break; // x-fine porta down case 0x42: FILL_EFFECT(command_X2x); break; } } } delete[] lastOperands; return resCnt; } pp_int32 PatternEditorTools::fillOperands(const OperandOptimizeParameters& optimizeParameters, bool evaluate/* = false*/) { Position ss = getMarkStart(); Position se = getMarkEnd(); return fillOperandsSelection(ss, se, optimizeParameters, evaluate); } pp_int32 PatternEditorTools::fillOperandsTrack(pp_int32 track, const OperandOptimizeParameters& optimizeParameters, bool evaluate) { Position ss, se = getMarkEnd(); ss.channel = track; ss.inner = 0; ss.row = 0; se.channel = track; se.inner = 7; return fillOperandsSelection(ss, se, optimizeParameters, evaluate); } pp_int32 PatternEditorTools::relocateCommandsSelection(const Position& ss, const Position& se, const RelocateParameters& relocateParameters, bool evaluate) { if (!PatternEditorTools::hasValidSelection(pattern, ss, se)) return 0; pp_int32 selectionStartChannel; pp_int32 selectionStartRow; pp_int32 selectionStartInner; pp_int32 selectionEndChannel; pp_int32 selectionEndRow; pp_int32 selectionEndInner; if (!normalizeSelection(pattern, ss, se, selectionStartChannel, selectionStartRow, selectionStartInner, selectionEndChannel, selectionEndRow,selectionEndInner)) return 0; // only entire operand column + effect is allowed if (selectionStartInner >= 5 && selectionStartInner<=7) selectionStartInner = 5; if (selectionEndInner >= 5 && selectionEndInner<=7) selectionEndInner = 7; pp_int32 selectionWidth = selectionEndChannel - selectionStartChannel + 1; pp_int32 selectionHeight = selectionEndRow - selectionStartRow + 1; mp_sint32 slotSize = pattern->effnum * 2 + 2; mp_sint32 rowSizeSrc = slotSize*pattern->channum; pp_int32 result = 0; for (pp_int32 i = 0; i < selectionHeight; i++) for (pp_int32 j = 0; j < selectionWidth; j++) { mp_ubyte* src = pattern->patternData + (selectionStartRow+i)*rowSizeSrc+(selectionStartChannel+j)*slotSize; mp_ubyte* eff = src+2; bool doit = false; if (selectionWidth == 1) { if (selectionStartInner <= 5 && selectionEndInner >= 7) { doit = true; } } else if (j == selectionStartChannel) { if (selectionStartInner <= 5) { doit = true; } } else if (j == selectionEndChannel) { if (selectionEndInner >= 7) { doit = true; } } else { doit = true; } if (doit) { if (!eff[0]) { // check for effects which can be converted into volume column switch (eff[2]) { // convert portamento to note case 0x03: if (!relocateParameters.command_3xx) break; // if the lower nibble is used, this can't be // properly converted if (eff[3] & 0x0F) break; if (!evaluate) { eff[0] = eff[2]; eff[1] = eff[3]; eff[2] = eff[3] = 0; } result++; break; // convert vibrato case 0x04: if (!relocateParameters.command_4xx) break; // both nibbles are used, this can't be // properly converted if ((eff[3] & 0x0F) && (eff[3] & 0xF0)) break; if (!evaluate) { eff[0] = eff[2]; eff[1] = eff[3]; eff[2] = eff[3] = 0; } result++; break; // convert set panning case 0x08: if (!relocateParameters.command_8xx) break; // if the lower nibble is used, this can't be // properly converted if ((eff[3] & 0x0F) && eff[3] != 0xFF) break; if (!evaluate) { eff[0] = eff[2]; eff[1] = eff[3]; eff[2] = eff[3] = 0; } result++; break; // convert set volume case 0x0C: if (!relocateParameters.command_Cxx) break; if (!evaluate) { eff[0] = eff[2]; eff[1] = eff[3]; eff[2] = eff[3] = 0; } result++; break; // convert volume slide case 0x0A: if (!relocateParameters.command_Axx) break; // both nibbles are used or operand is zero, // this can't be properly converted if (((eff[3] & 0x0F) && (eff[3] & 0xF0)) || !eff[3]) break; if (!evaluate) { eff[0] = eff[2]; eff[1] = eff[3]; eff[2] = eff[3] = 0; } result++; break; // convert panning slide case 0x19: if (!relocateParameters.command_Pxx) break; // both nibbles are used or operand is zero, // this can't be properly converted if (((eff[3] & 0x0F) && (eff[3] & 0xF0)) || !eff[3]) break; if (!evaluate) { eff[0] = eff[2]; eff[1] = eff[3]; eff[2] = eff[3] = 0; } result++; break; // convert fine volslide case 0x3A: if (!relocateParameters.command_EAx) break; // both nibbles are used or operand is zero, // this can't be properly converted if (!eff[3]) break; if (!evaluate) { eff[0] = eff[2]; eff[1] = eff[3]; eff[2] = eff[3] = 0; } result++; break; // convert fine volslide case 0x3B: if (!relocateParameters.command_EBx) break; // both nibbles are used or operand is zero, // this can't be properly converted if (!eff[3]) break; if (!evaluate) { eff[0] = eff[2]; eff[1] = eff[3]; eff[2] = eff[3] = 0; } result++; break; } } } } return result; } pp_int32 PatternEditorTools::relocateCommands(const RelocateParameters& relocateParameters, bool evaluate/* = false*/) { Position ss = getMarkStart(); Position se = getMarkEnd(); return relocateCommandsSelection(ss, se, relocateParameters, evaluate); } pp_int32 PatternEditorTools::relocateCommandsTrack(pp_int32 track, const RelocateParameters& relocateParameters, bool evaluate) { Position ss, se = getMarkEnd(); ss.channel = track; ss.inner = 0; ss.row = 0; se.channel = track; se.inner = 7; return relocateCommandsSelection(ss, se, relocateParameters, evaluate); } static inline pp_uint8 scaleByte(pp_uint8 val, float scale) { //pp_int32 v = (pp_int32)((float)val*scale); pp_int32 v = XModule::vol64to255((mp_sint32)((float)(((mp_sint32)val*64)/255)*scale)); return (pp_uint8)(v > 255 ? 255 : v); } pp_int32 PatternEditorTools::scaleVolume(const Position& startSelection, const Position& endSelection, float startScale, float endScale, pp_uint32 numVisibleChannels, XModule* module) { if (!hasValidSelection(pattern, startSelection, endSelection, numVisibleChannels)) return 0; mp_sint32 slotSize = pattern->effnum * 2 + 2; mp_sint32 rowSizeSrc = slotSize*pattern->channum; pp_int32 stats = 0; pp_int32 startSelRow = startSelection.row, endSelRow = endSelection.row; pp_int32 startSelChn = startSelection.channel, endSelChn = endSelection.channel; pp_int32 h; if (startSelRow > endSelRow) { h = startSelRow; startSelRow = endSelRow; endSelRow = h; } if (startSelChn > endSelChn) { h = startSelChn; startSelChn = endSelChn; endSelChn = h; } if (endSelChn > (signed)numVisibleChannels - 1) endSelChn = (signed)numVisibleChannels - 1; if (endSelRow > pattern->rows - 1) endSelRow = pattern->rows - 1; float step = (endScale - startScale) / ((endSelRow - startSelRow) != 0.0f ? (float)(endSelRow - startSelRow) : 1.0f); for (pp_int32 r = startSelRow; r <= endSelRow; r++) { for (pp_int32 c = startSelChn; c <= endSelChn; c++) { mp_ubyte* src = pattern->patternData + r*rowSizeSrc+c*slotSize; mp_sint32 note = src[0]; mp_sint32 ins = src[1]; bool hasVolumeEff1 = (src[2] == 0xC); bool hasVolumeEff2 = (src[4] == 0xC); if (!hasVolumeEff1 && !hasVolumeEff2) { if (ins) { mp_sint32 s = 0; if (note) s = module->instr[ins-1].snum[note-1]; else s = module->instr[ins-1].snum[0]; if ((!src[2] && src[4]) || (!src[2] && !src[4])) { src[2] = 0x0C; src[3] = scaleByte(module->smp[s].sample ? module->smp[s].vol : 255, startScale); stats++; } else if (src[2] && !src[4]) { src[4] = 0x0C; src[5] = scaleByte(module->smp[s].sample ? module->smp[s].vol : 255, startScale); stats++; } } } if (hasVolumeEff1) { src[3] = scaleByte(src[3], startScale); stats++; } if (hasVolumeEff2) { src[5] = scaleByte(src[5], startScale); stats++; } } startScale+=step; } return stats; } pp_int32 PatternEditorTools::splitTrack(pp_int32 useChannels, bool insertNoteOff, pp_int32 chn, pp_int32 fromRow, pp_int32 toRow, pp_uint32 numVisibleChannels) { if (pattern == NULL || pattern->patternData == NULL) return 0; pp_int32 stats = 0; mp_sint32 slotSize = pattern->effnum * 2 + 2; mp_sint32 rowSizeSrc = slotSize*pattern->channum; pp_int32 dstChn = chn; pp_int32 lastChn = chn; pp_int32 lastNoteChannel = -1; for (pp_int32 r = fromRow; r < toRow; r++) { pp_int32 i; pp_int32 finalDstCh = dstChn % numVisibleChannels; mp_ubyte* src = pattern->patternData + r*rowSizeSrc+chn*slotSize; mp_ubyte* dst = pattern->patternData + r*rowSizeSrc+finalDstCh*slotSize; bool b = false; for (i = 1; i < slotSize; i++) { if (src[i]) { b = true; break; } } bool notePorta = false; for (i = 2; i < slotSize; i+=2) { if (src[i] == 0x3 || src[i] == 0x5) notePorta = true; } if (src[0] && src[0] <= XModule::NOTE_LAST && !notePorta) lastNoteChannel = dstChn; else if ((lastNoteChannel != -1) && ((src[0] > XModule::NOTE_LAST) || b || notePorta)) { dstChn = lastNoteChannel; finalDstCh = dstChn % numVisibleChannels; dst = pattern->patternData + r*rowSizeSrc+finalDstCh*slotSize; } b = false; for (i = 0; i < slotSize; i++) { if (src[i]) { b = true; break; } } if (b && chn != finalDstCh) { memcpy(dst, src, slotSize); memset(src, 0, slotSize); if (insertNoteOff) *(pattern->patternData + r*rowSizeSrc+lastChn*slotSize) = XModule::NOTE_OFF; lastChn = finalDstCh; dstChn++; stats++; } else if (b && chn == finalDstCh) { if (insertNoteOff && finalDstCh != lastChn) *(pattern->patternData + r*rowSizeSrc+lastChn*slotSize) = XModule::NOTE_OFF; lastChn = dstChn; dstChn++; } if (dstChn > (chn+useChannels)) dstChn = chn; } return stats; } pp_int32 PatternEditorTools::swapChannels(pp_int32 dstChannel, pp_int32 srcChannel) { if (pattern == NULL || pattern->patternData == NULL) return 0; mp_sint32 slotSize = pattern->effnum * 2 + 2; mp_sint32 rowSizeSrc = slotSize*pattern->channum; char* buffer = new char[slotSize]; pp_int32 stats = 0; for (pp_int32 r = 0; r < pattern->rows; r++) { mp_ubyte* src = pattern->patternData + r*rowSizeSrc+srcChannel*slotSize; mp_ubyte* dst = pattern->patternData + r*rowSizeSrc+dstChannel*slotSize; memcpy(buffer, src, slotSize); memcpy(src, dst, slotSize); memcpy(dst, buffer, slotSize); stats++; } delete[] buffer; return stats; } void PatternEditorTools::normalize() { if (pattern == NULL || pattern->patternData == NULL) return; pp_int32 selectionWidth = pattern->channum; pp_int32 selectionHeight = pattern->rows; mp_sint32 slotSize = pattern->effnum * 2 + 2; mp_ubyte* src = pattern->patternData; for (pp_int32 i = 0; i < selectionHeight; i++) for (pp_int32 j = 0; j < selectionWidth; j++) { mp_ubyte* eff = src+2; for (pp_int32 k = 0; k < pattern->effnum; k++) { // check for empty arpeggio if (eff[k*2] == 0x20 && eff[k*2+1] == 0) eff[k*2] = 0; } src+=slotSize; } } bool PatternEditorTools::hasValidSelection(const TXMPattern* pattern, const Position& ss, const Position& se, pp_int32 numVisibleChannels/* = -1*/) { if (pattern == NULL || pattern->patternData == NULL) return false; if (numVisibleChannels == -1 || numVisibleChannels > pattern->channum) numVisibleChannels = pattern->channum; Position selectionStart = ss, selectionEnd = se; flattenSelection(selectionStart, selectionEnd); return !(selectionStart.channel > numVisibleChannels-1 || selectionStart.row > pattern->rows-1 || selectionEnd.channel < 0 || selectionEnd.row < 0); } void PatternEditorTools::slotCopy(mp_ubyte* dst, mp_ubyte* src, pp_int32 from, pp_int32 to) { pp_int32 i = 0; if (i >= from && i <= to) { *dst = *src; } i++; if (i >= from && i <= to) { *(dst+1) &= 0x0F; *(dst+1) |= *(src+1)&0xF0; } i++; if (i >= from && i <= to) { *(dst+1) &= 0xF0; *(dst+1) |= *(src+1)&0xF; } i++; if (i >= from && i <= to) { *(dst+2) = *(src+2); *(dst+3) = *(src+3); } i+=2; if (i >= from && i <= to) { *(dst+4) = *(src+4); } i++; if (i >= from && i <= to) { *(dst+5) &= 0x0F; *(dst+5) |= *(src+5)&0xF0; } i++; if (i >= from && i <= to) { *(dst+5) &= 0xF0; *(dst+5) |= *(src+5)&0xF; } i++; } void PatternEditorTools::slotTransparentCopy(mp_ubyte* dst, mp_ubyte* src, pp_int32 from, pp_int32 to) { pp_int32 i = 0; if (i >= from && i <= to && *src) { *dst = *src; } i++; if (i >= from && i <= to && (*(src+1)&0xF0)) { *(dst+1) &= 0x0F; *(dst+1) |= *(src+1)&0xF0; } i++; if (i >= from && i <= to && (*(src+1)&0xF)) { *(dst+1) &= 0xF0; *(dst+1) |= *(src+1)&0xF; } i++; if (i >= from && i <= to && (*(src+2) || *(src+3))) { *(dst+2) = *(src+2); *(dst+3) = *(src+3); } i+=2; if (i >= from && i <= to && (*(src+4))) { *(dst+4) = *(src+4); } i++; if (i >= from && i <= to && (*(src+5)&0xF0)) { *(dst+5) &= 0x0F; *(dst+5) |= *(src+5)&0xF0; } i++; if (i >= from && i <= to && (*(src+5)&0xF)) { *(dst+5) &= 0xF0; *(dst+5) |= *(src+5)&0xF; } i++; } void PatternEditorTools::slotClear(mp_ubyte* dst, pp_int32 from, pp_int32 to) { pp_int32 i = 0; if (i >= from && i <= to) { *dst = 0; } i++; if (i >= from && i <= to) { *(dst+1) &= 0x0F; } i++; if (i >= from && i <= to) { *(dst+1) &= 0xF0; } i++; if (i >= from && i <= to) { *(dst+2) = 0; *(dst+3) = 0; } i+=2; if (i >= from && i <= to) { *(dst+4) = 0; } i++; if (i >= from && i <= to) { *(dst+5) &= 0x0F; } i++; if (i >= from && i <= to) { *(dst+5) &= 0xF0; } i++; } MilkyTracker-1.02.00/src/tracker/PatternEditorTools.h000066400000000000000000000164571324432207300224700ustar00rootroot00000000000000/* * tracker/PatternEditorTools.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * PatternEditorTools.h * MilkyTracker * * Created by Peter Barth on 16.11.07. * */ #ifndef __PATTERNEDITORTOOLS_H__ #define __PATTERNEDITORTOOLS_H__ #include "BasicTypes.h" #include "MilkyPlayTypes.h" struct TXMPattern; class XModule; class PatternEditorTools { public: struct Position { pp_int32 channel, row, inner; bool isValid() const { return (channel >= 0 && row >= 0 && inner >= 0); } bool operator==(const Position& other) { return (channel == other.channel && row == other.row && inner == other.inner); } bool operator!=(const Position& other) { return (channel != other.channel || row != other.row || inner != other.inner); } }; struct OperandOptimizeParameters { bool command_1xx; bool command_2xx; bool command_3xx; bool command_4xx; bool command_56Axx; bool command_7xx; bool command_E1x; bool command_E2x; bool command_EAx; bool command_EBx; bool command_Hxx; bool command_Pxx; bool command_Rxx; bool command_X1x; bool command_X2x; OperandOptimizeParameters() : command_1xx(false), command_2xx(false), command_3xx(false), command_4xx(false), command_56Axx(false), command_7xx(false), command_E1x(false), command_E2x(false), command_EAx(false), command_EBx(false), command_Hxx(false), command_Pxx(false), command_Rxx(false), command_X1x(false), command_X2x(false) { } }; struct RelocateParameters { bool command_3xx; bool command_4xx; bool command_8xx; bool command_Cxx; bool command_Axx; bool command_EAx; bool command_EBx; bool command_Pxx; RelocateParameters() : command_3xx(false), command_4xx(false), command_8xx(false), command_Cxx(false), command_Axx(false), command_EAx(false), command_EBx(false), command_Pxx(false) { } }; struct TransposeParameters { enum { DefaultNoteRange = 96 }; pp_int32 maxNoteRange; pp_int32 insRangeStart; pp_int32 insRangeEnd; pp_int32 noteRangeStart; pp_int32 noteRangeEnd; pp_int32 amount; TransposeParameters() : maxNoteRange(DefaultNoteRange) { } }; private: TXMPattern* pattern; Position getMarkStart(); Position getMarkEnd(); public: PatternEditorTools(TXMPattern* pattern = NULL); void attachPattern(TXMPattern* pattern) { this->pattern = pattern; } void clearSelection(const Position& ss, const Position& se); bool expandPattern(); bool shrinkPattern(); pp_int32 insIncSelection(const Position& ss, const Position& se); pp_int32 insDecSelection(const Position& ss, const Position& se); pp_int32 insIncTrack(pp_int32 track); pp_int32 insDecTrack(pp_int32 track); pp_int32 insRemapSelection(const Position& ss, const Position& se, pp_int32 oldIns, pp_int32 newIns); pp_int32 insRemap(pp_int32 oldIns, pp_int32 newIns); pp_int32 insRemapTrack(pp_int32 track, pp_int32 oldIns, pp_int32 newIns); pp_int32 noteTransposeSelection(const Position& ss, const Position& se, const PatternEditorTools::TransposeParameters& transposeParameters, bool evaluate); pp_int32 noteTranspose(const TransposeParameters& transposeParameters, bool evaluate = false); pp_int32 noteTransposeTrack(pp_int32 track, const TransposeParameters& transposeParameters, bool evaluate = false); pp_int32 interpolateValuesInSelection(const PatternEditorTools::Position& ss, const PatternEditorTools::Position& se); pp_int32 zeroOperandsSelection(const Position& ss, const Position& se, const OperandOptimizeParameters& optimizeParameters, bool evaluate); pp_int32 zeroOperands(const OperandOptimizeParameters& optimizeParameters, bool evaluate = false); pp_int32 zeroOperandsTrack(pp_int32 track, const OperandOptimizeParameters& optimizeParameters, bool evaluate); pp_int32 fillOperandsSelection(const Position& ss, const Position& se, const OperandOptimizeParameters& optimizeParameters, bool evaluate); pp_int32 fillOperands(const OperandOptimizeParameters& optimizeParameters, bool evaluate = false); pp_int32 fillOperandsTrack(pp_int32 track, const OperandOptimizeParameters& optimizeParameters, bool evaluate); pp_int32 relocateCommandsSelection(const Position& ss, const Position& se, const RelocateParameters& relocateParameters, bool evaluate); pp_int32 relocateCommands(const RelocateParameters& relocateParameters, bool evaluate = false); pp_int32 relocateCommandsTrack(pp_int32 track, const RelocateParameters& relocateParameters, bool evaluate); pp_int32 scaleVolume(const Position& startSelection, const Position& endSelection, float startScale, float endScale, pp_uint32 numVisibleChannels, XModule* module); pp_int32 splitTrack(pp_int32 useChannels, bool insertNoteOff, pp_int32 chn, pp_int32 fromRow, pp_int32 toRow, pp_uint32 numVisibleChannels); pp_int32 swapChannels(pp_int32 dstChannel, pp_int32 srcChannel); void normalize(); static void slotCopy(mp_ubyte* dst, mp_ubyte* src, pp_int32 from, pp_int32 to); static void slotTransparentCopy(mp_ubyte* dst, mp_ubyte* src, pp_int32 from, pp_int32 to); static void slotClear(mp_ubyte* dst, pp_int32 from, pp_int32 to); static bool hasValidSelection(const TXMPattern* pattern, const Position& ss, const Position& se, pp_int32 numVisibleChannels = -1); static bool normalizeSelection(const TXMPattern* pattern, const PatternEditorTools::Position& ss, const PatternEditorTools::Position& se, pp_int32& selectionStartChannel, pp_int32& selectionStartRow, pp_int32& selectionStartInner, pp_int32& selectionEndChannel, pp_int32& selectionEndRow, pp_int32& selectionEndInner); static void flattenSelection(Position& selectionStart, Position& selectionEnd) { Position selStart = selectionStart, selEnd = selectionEnd; if (selectionStart.channel > selectionEnd.channel) { selStart.channel = selectionEnd.channel; selEnd.channel = selectionStart.channel; selStart.inner = selectionEnd.inner; selEnd.inner = selectionStart.inner; } else { selStart.channel = selectionStart.channel; selEnd.channel = selectionEnd.channel; selStart.inner= selectionStart.inner; selEnd.inner= selectionEnd.inner; } if (selStart.channel == selEnd.channel && selEnd.inner < selStart.inner) { mp_sint32 h = selEnd.inner; selEnd.inner = selStart.inner; selStart.inner = h; } if (selectionStart.row > selectionEnd.row) { selStart.row = selectionEnd.row; selEnd.row = selectionStart.row; } else { selStart.row = selectionStart.row; selEnd.row = selectionEnd.row; } selectionStart = selStart; selectionEnd = selEnd; } }; #endif MilkyTracker-1.02.00/src/tracker/PatternTools.cpp000066400000000000000000000332241324432207300216430ustar00rootroot00000000000000/* * tracker/PatternTools.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /////////////////////////////////////////////////////////////// // Handle with care /////////////////////////////////////////////////////////////// #include "PatternTools.h" #include "MilkyPlay.h" static const char* noteNames[12] = {"C-","C#","D-","D#","E-","F-","F#","G-","G#","A-","A#","B-"}; static const char hex[] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'}; /*TXMPattern* PatternTools::pattern = NULL; pp_int32 PatternTools::currentEffectIndex = 0; pp_int32 PatternTools::offset = 0; pp_int32 PatternTools::lockOffset = 0;*/ void PatternTools::setPosition(TXMPattern* pattern, pp_uint32 channel, pp_uint32 row) { if (channel >= pattern->channum || row >= pattern->rows) offset = -1; else { pp_uint32 slotSize = pattern->effnum*2 + 2; offset = (slotSize*pattern->channum)*row + (channel*slotSize); PatternTools::pattern = pattern; } } pp_int32 PatternTools::getNote() { if (offset < 0) return 0; return *(pattern->patternData + offset); } void PatternTools::setNote(pp_uint32 note) { if (offset < 0) return; *(pattern->patternData + offset) = (pp_uint8)note; } pp_int32 PatternTools::getInstrument() { if (offset < 0) return 0; return *(pattern->patternData + offset + 1); } void PatternTools::setInstrument(pp_uint32 instrument) { if (offset < 0) return; *(pattern->patternData + offset + 1) = (pp_uint8)instrument; } void PatternTools::getFirstEffect(pp_int32& effect, pp_int32& operand) { if (offset < 0) { effect = operand = 0; return; } currentEffectIndex = 0; effect = *(pattern->patternData + offset + 2 + currentEffectIndex*2); operand = *(pattern->patternData + offset + 2 + currentEffectIndex*2 + 1); } void PatternTools::getNextEffect(pp_int32& effect, pp_int32& operand) { if (offset < 0) { effect = operand = 0; return; } currentEffectIndex++; effect = *(pattern->patternData + offset + 2 + currentEffectIndex*2); operand = *(pattern->patternData + offset + 2 + currentEffectIndex*2 + 1); } void PatternTools::setFirstEffect(pp_int32 effect, pp_int32 operand) { if (offset < 0) return; currentEffectIndex = 0; *(pattern->patternData + offset + 2 + currentEffectIndex*2) = (pp_uint8)effect; *(pattern->patternData + offset + 2 + currentEffectIndex*2 + 1) = (pp_uint8)operand; } void PatternTools::setNextEffect(pp_int32 effect, pp_int32 operand) { if (offset < 0) return; currentEffectIndex++; *(pattern->patternData + offset + 2 + currentEffectIndex*2) = (pp_uint8)effect; *(pattern->patternData + offset + 2 + currentEffectIndex*2 + 1) = (pp_uint8)operand; } void PatternTools::setEffect(pp_int32 currentEffectIndex, pp_int32 effect, pp_int32 operand) { if (offset < 0) return; *(pattern->patternData + offset + 2 + currentEffectIndex*2) = (pp_uint8)effect; *(pattern->patternData + offset + 2 + currentEffectIndex*2 + 1) = (pp_uint8)operand; } void PatternTools::getEffect(pp_int32 currentEffectIndex, pp_int32& effect, pp_int32& operand) { if (offset < 0) { effect = operand = 0; return; } effect = *(pattern->patternData + offset + 2 + currentEffectIndex*2); operand = *(pattern->patternData + offset + 2 + currentEffectIndex*2 + 1); } void PatternTools::convertEffectsToFT2(pp_int32& eff, pp_int32& op) { if (eff == 0 && op == 0) return; pp_uint32 effIn = eff; pp_uint32 opIn = op; pp_uint32 effOut = 0; pp_uint32 opOut = 0; // Protracker commands if (effIn > 0 && effIn <= 0x11) { effOut = effIn; opOut = opIn; if (effIn == 0x0C || effIn == 0x10) opOut = (mp_ubyte)(((mp_sint32)opOut*64)/255); } // panning slide else if (effIn == 0x14 || effIn == 0x51) { effOut = 0x14; opOut = opIn; } // panning slide else if (effIn == 0x15) { effOut = effIn; opOut = opIn; } // set tempo else if (effIn == 0x16) { if (opIn) { if (opIn < 32) opIn = 32; effOut = 0x0F; opOut = opIn; } } // Panning slide / Multi retrig / tremor else if (effIn == 0x19 || effIn == 0x1B || effIn == 0x1D) { effOut = effIn; opOut = opIn; } // set speed else if (effIn == 0x1C) { if (opIn) { if (opIn > 31) opIn = 31; effOut = 0x0F; opOut = opIn; } } // MDL set sample offset else if (effIn == 0x1F) { effOut = 0x09; opOut = opIn; } // PLM position jump else if (effIn == 0x2B) { effOut = 0x0B; opOut = opIn; } // Protracker subcommands (most likely) else if (effIn >= 0x30 && effIn <= 0x3F) { effOut = 0x0E; opOut = ((effIn-0x30)<<4)+(opIn&0xF); } // arpeggio else if (effIn == 0x20) { if (opIn) { effOut = 0; opOut = opIn; } } // extra fine porta commands else if (effIn == 0x41) { effOut = 0x21; opOut = 0x10 + (opIn&0xF); } else if (effIn == 0x42) { effOut = 0x21; opOut = 0x20 + (opIn&0xF); } // MDL porta up else if (effIn == 0x43) { if (opIn >= 0xE0) { mp_ubyte y = (mp_ubyte)(opIn>>4); mp_ubyte x = (mp_ubyte)(opIn&0xf); switch (y) { case 0xF: effOut = 0xE; opOut = 0x10 + x; break; case 0xE: effOut = 0x21; opOut = 0x10 + (x>>1); break; } } else if (opIn) { effOut = 0x1; opOut = opIn; } } // MDL porta down else if (effIn == 0x44) { if (opIn >= 0xE0) { mp_ubyte y = (mp_ubyte)(opIn >> 4); mp_ubyte x = (mp_ubyte)(opIn & 0xf); switch (y) { case 0xF: effOut = 0xE; opOut = 0x20 + x; break; case 0xE: effOut = 0x21; opOut = 0x20 + (x>>1); break; } } else if (opIn) { effOut = 0x2; opOut = opIn; } } // MDL volslide up else if (effIn == 0x45) { if (opIn >= 0xE0) { mp_ubyte y = (mp_ubyte)(opIn>>4); mp_ubyte x = (mp_ubyte)(opIn&0xf); switch (y) { case 0xF: effOut = 0xE; opOut = 0xA0 + x; break; case 0xE: effOut = 0xE; opOut = 0xA0 + (x>>2); break; } } else if (opIn) { effOut = 0xA; opOut = (opIn>>2)<<4; } } // MDL volslide down else if (effIn == 0x46) { if (opIn >= 0xE0) { mp_ubyte y = (mp_ubyte)(opIn >> 4); mp_ubyte x = (mp_ubyte)(opIn & 0xf); switch (y) { case 0xF: effOut = 0xE; opOut = 0xB0 + x; break; case 0xE: effOut = 0xE; opOut = 0xB0 + (x>>2); break; } } else if (opIn) { effOut = 0xA; opOut = (opIn>>2)&0xF; } } // S3M porta up else if (effIn == 0x47) { if (opIn >= 0xE0) { mp_ubyte y = (mp_ubyte)(opIn >> 4); mp_ubyte x = (mp_ubyte)(opIn & 0xf); switch (y) { case 0xF: effOut = 0xE; opOut = 0x10 + x; break; case 0xE: effOut = 0x21; opOut = 0x10 + x; break; } } else if (opIn) { effOut = 0x1; opOut = opIn; } } // S3M porta down else if (effIn == 0x48) { if (opIn >= 0xE0) { mp_ubyte y = (mp_ubyte)(opIn >> 4); mp_ubyte x = (mp_ubyte)(opIn & 0xf); switch (y) { case 0xF: effOut = 0xE; opOut = 0x20 + x; break; case 0xE: effOut = 0x21; opOut = 0x20 + x; break; } } else if (opIn) { effOut = 0x2; opOut = opIn; } } // S3M volslide else if (effIn == 0x49) { if (opIn) { mp_ubyte y = (mp_ubyte)(opIn>>4); mp_ubyte x = (mp_ubyte)(opIn&0xf); if (!(x == 0xF && y)&&!(y == 0xF && x)) { if (x && y) x = 0; if (y) { effOut = 0xA; opOut = y<<4; } else if (x) { effOut = 0xA; opOut = x; } } else { if (!(x==0x0F && !y) && !(y==0x0F && !x)) { if (x==0x0F) { effOut = 0xE; opOut = 0xA0+y; } else if (y==0x0F) { effOut = 0xE; opOut = 0xB0+x; } } } } } // PSM fine volslide up else if (effIn == 0x4B) { effOut = 0x0E; opOut = opIn>>2; if (opOut>0xF) opOut=0x0F; opOut+=0xA0; } // PSM fine volslide down else if (effIn == 0x4C) { effOut = 0x0E; opOut = opIn>>2; if (opOut>0xF) opOut=0x0F; opOut+=0xB0; } // PSM porta up else if (effIn == 0x4D) { effOut = 0x01; opOut = opIn>>2; } // PSM porta down else if (effIn == 0x4E) { effOut = 0x02; opOut = opIn>>2; } eff = effOut; op = opOut; } void PatternTools::convertEffectsFromFT2(pp_int32& eff, pp_int32& op) { bool f = false; for (pp_uint32 i = 0; i < XModule::numValidXMEffects; i++) if (eff == XModule::validXMEffects[i]) f = true; if (!f) { eff = op = 0; return; } if ((eff==0xC)||(eff==0x10)) { op = XModule::vol64to255(op); } else if ((!eff)&&(op)) eff=0x20; else if (eff==0xE) { eff=(op>>4)+0x30; op=op&0xf; } else if (eff==0x21) { eff=(op>>4)+0x40; op=op&0xf; } } pp_int32 PatternTools::getVolumeFromEffect(pp_int32 eff, pp_int32 op) { mp_ubyte vol = 0; // set volume if (eff == 0x0C) { vol = (mp_ubyte)(0x10 + op); } // volslide else if (eff == 0x0A) { // use last operand? if (!op) { vol = 0x60; } // volslide down else if (op & 0xF) { vol = 0x60 + (mp_ubyte)(op&0xF); } // volslide up else if (op >> 4) { vol = 0x70 + (mp_ubyte)(op>>4); } } // extra fine volslide up else if (eff == 0xE && ((op>>4) == 0xA)) { vol = 0x90 + (mp_ubyte)(op & 0xF); } // extra fine volslide down else if (eff == 0xE && ((op>>4) == 0xB)) { vol = 0x80 + (mp_ubyte)(op & 0xF); } // extra vibrato else if (eff == 0x4) { if ((op>>4) && !(op&0xF)) { vol = 0xA0 + (mp_ubyte)(op>>4); } else if (!(op>>4)/* && (op&0xF)*/) { vol = 0xB0 + (mp_ubyte)op; } } // set panning else if (eff == 0x8) { vol = 0xC0 + (mp_ubyte)(op>>4); } // panning slide else if (eff == 0x19) { // use last operand? if (!op) { vol = 0xD0; } // panning slide left else if (op & 0xF) { vol = 0xD0 + (mp_ubyte)(op&0xF); } // panning slide right else if (op >> 4) { vol = 0xE0 + (mp_ubyte)(op>>4); } } // porta to note else if (eff == 0x03) { vol = 0xF0 + (mp_ubyte)(op>>4); } return vol; } void PatternTools::getNoteName(char* name, pp_uint32 note, bool terminate /* = true*/) { if (note == 0) { strcpy(name, "\xf4\xf4\xf4"); return; } else if ( note >= getNoteOffNote()) { strcpy(name, "\xf1\xf2\xf3"); return; } memcpy(name, noteNames[(note-1)%12], 2); name[2] = '0' + (mp_ubyte)((note-1)/12); if (terminate) name[3] = 0; } void PatternTools::getVolumeName(char* name, pp_uint32 volume) { if (volume<0x10) { name[0] = name[1] = '\xf4'; name[2] = 0; } else if (volume>=0x10 && volume<=0x50) { PatternTools::convertToHex(name, volume-0x10, 2); } else { name[2] = 0; name[1] = hex[volume&0xF]; switch (volume>>4) { case 0x6: name[0] = '-'; break; case 0x7: name[0] = '+'; break; case 0x8: name[0] = (char)253; break; case 0x9: name[0] = (char)254; break; case 0xA: name[0] = 'S'; break; case 0xB: name[0] = 'V'; break; case 0xC: name[0] = 'P'; break; case 0xD: name[0] = '<'; break; case 0xE: name[0] = '>'; break; case 0xF: name[0] = 'M'; break; } } } void PatternTools::getEffectName(char* name, pp_uint32 effect) { name[1] = 0; if (effect > sizeof(hex)) { name[0] = (char)0xfa; return; } name[0] = hex[effect]; } pp_uint32 PatternTools::getHexNumDigits(pp_uint32 value) { pp_uint32 i = 1; while ((value = value >> 4)) i++; return i; } void PatternTools::convertToHex(char* name, pp_uint32 value, pp_uint32 numDigits) { pp_uint32 i = 0; for (i = 0; i < numDigits; i++) name[i] = hex[((value>>(numDigits-1-i)*4)&0xF)]; name[i] = 0; } pp_uint32 PatternTools::getDecNumDigits(pp_uint32 value) { if (value == 0) return 1; pp_uint32 i = 0; pp_uint32 dec = 1; while (value / dec) { i++; dec*=10; } return i; } void PatternTools::convertToDec(char* name, pp_uint32 value, pp_uint32 numDigits) { pp_int32 i = 0; pp_int32 dec = 1; for (i = 0; i < (signed)numDigits-1; i++) dec*=10; for (i = 0; i < (signed)numDigits; i++) { name[i] = hex[(value/dec)%10]; dec/=10; } name[i] = 0; } void PatternTools::convertVolumeToEffect(pp_int32 vol, pp_int32& effect, pp_int32& operand) { effect = operand = 0; if (vol>=0x10&&vol<=0x50) { effect = 0x0C; operand = XModule::vol64to255(vol-0x10); return; } if (vol>=0x60) { mp_ubyte eff = (mp_ubyte)(vol>>4); mp_ubyte op = (mp_ubyte)(vol&0xf); switch (eff) { case 0x6 : eff=0x0A; op=op; break; case 0x7 : eff=0x0A; op=op<<4; break; case 0x8 : eff=0x3B; op=op; break; case 0x9 : eff=0x3A; op=op; break; case 0xA : eff=0x4; op=op<<4; break; case 0xB : eff=0x4; op=op; break; case 0xC : eff=0x8; op=op*0x11; break; case 0xD : eff=0x19; op=op; break; case 0xE : eff=0x19; op=op<<4; break; case 0xF : eff=0x3; op=op<<4; break; } effect = eff; operand = op; } } pp_uint8 PatternTools::getNoteOffNote() { return XModule::NOTE_OFF; } pp_uint32 PatternTools::normalizeVol(pp_uint32 volume) { return XModule::vol64to255((volume*64)/255); } MilkyTracker-1.02.00/src/tracker/PatternTools.h000066400000000000000000000053071324432207300213110ustar00rootroot00000000000000/* * tracker/PatternTools.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #ifndef PATTERNTOOLS__H #define PATTERNTOOLS__H #include "BasicTypes.h" #define TONOTE(octave, note) \ ((((pp_uint8)(octave)*12 + (pp_uint8)(note)) + 1) < 97 ? (((pp_uint8)(octave)*12 + (pp_uint8)(note)) + 1) : -1) class PatternTools { private: pp_int32 offset; pp_int32 currentEffectIndex; struct TXMPattern* pattern; pp_int32 lockOffset; public: PatternTools() : offset(0), currentEffectIndex(0), pattern(NULL) { } PatternTools(const PatternTools& src) { offset = src.offset; currentEffectIndex = src.currentEffectIndex; pattern = src.pattern; } void setPosition(TXMPattern* pattern, pp_uint32 channel, pp_uint32 row); pp_int32 getNote(); void setNote(pp_uint32); pp_int32 getInstrument(); void setInstrument(pp_uint32); void getFirstEffect(pp_int32& effect, pp_int32& operand); void getNextEffect(pp_int32& effect, pp_int32& operand); void setFirstEffect(pp_int32 effect, pp_int32 operand); void setNextEffect(pp_int32 effect, pp_int32 operand); void getEffect(pp_int32 currentEffectIndex, pp_int32& effect, pp_int32& operand); void setEffect(pp_int32 currentEffectIndex, pp_int32 effect, pp_int32 operand); static void convertEffectsToFT2(pp_int32& eff, pp_int32& op); static void convertEffectsFromFT2(pp_int32& eff, pp_int32& op); static pp_int32 getVolumeFromEffect(pp_int32 effect, pp_int32 operand); static void convertVolumeToEffect(pp_int32 vol, pp_int32& eff, pp_int32& op); static void getNoteName(char* name, pp_uint32 note, bool terminate = true); static void getVolumeName(char* name, pp_uint32 volume); static void getEffectName(char* name, pp_uint32 effect); static pp_uint32 getHexNumDigits(pp_uint32 value); static void convertToHex(char* name, pp_uint32 value, pp_uint32 numDigits); static pp_uint32 getDecNumDigits(pp_uint32 value); static void convertToDec(char* name, pp_uint32 value, pp_uint32 numDigits); static pp_uint8 getNoteOffNote(); static pp_uint32 normalizeVol(pp_uint32 volume); }; #endif MilkyTracker-1.02.00/src/tracker/PeakLevelControl.cpp000066400000000000000000000075721324432207300224250ustar00rootroot00000000000000/* * tracker/PeakLevelControl.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * PeakLevelControl.cpp * MilkyTracker * * Created by Peter Barth on 28.10.05. * */ #include "PeakLevelControl.h" #include "Screen.h" #include "GraphicsAbstract.h" #include "TrackerConfig.h" PeakLevelControl::PeakLevelControl(pp_int32 id, PPScreen* parentScreen, EventListenerInterface* eventListener, const PPPoint& location, const PPSize& size, bool border/*= true*/) : PPControl(id, parentScreen, eventListener, location, size), borderColor(&ourOwnBorderColor) { this->border = border; // default color color.set(0, 0, 0); ourOwnBorderColor.set(192, 192, 192); visibleWidth = size.width - 2; visibleHeight = size.height - 2; peak[0] = peak[1] = 0; buildColorLUT(); } PeakLevelControl::~PeakLevelControl() { } void PeakLevelControl::paint(PPGraphicsAbstract* g) { if (!isVisible()) return; pp_int32 xOffset = 2; pp_int32 yOffset = 2; g->setRect(location.x, location.y, location.x + size.width, location.y + size.height); g->setColor(color); g->fill(); if (border) { drawBorder(g, *borderColor); } g->setRect(location.x + 1, location.y + 1, location.x + size.width - 2, location.y + size.height - 2); pp_int32 centerx = location.x + xOffset + (visibleWidth >> 1)-1; pp_int32 i; pp_int32 pixelPeak = ((visibleWidth >> 1)*peak[0]) >> 16; pp_int32 maxPeak = (visibleWidth >> 1); for (i = 0; i < pixelPeak; i+=2) { pp_int32 c = i*256/maxPeak; g->setColor(peakColorLUT[c][0], peakColorLUT[c][1], peakColorLUT[c][2]); g->drawVLine(location.y + yOffset, location.y + yOffset + visibleHeight, centerx - i); } pixelPeak = ((visibleWidth >> 1)*peak[1]) >> 16; for (i = 0; i < pixelPeak; i+=2) { pp_int32 c = i*256/maxPeak; g->setColor(peakColorLUT[c][0], peakColorLUT[c][1], peakColorLUT[c][2]); g->drawVLine(location.y + yOffset, location.y + yOffset + visibleHeight, centerx + i); } } void PeakLevelControl::buildColorLUT() { struct TColorKey { PPColor color; pp_uint32 t; }; TColorKey colorKeys[3]; colorKeys[2].color.r = 255; colorKeys[2].color.g = 0; colorKeys[2].color.b = 0; colorKeys[2].t = 224; colorKeys[1].color.r = 255; colorKeys[1].color.g = 255; colorKeys[1].color.b = 0; colorKeys[1].t = 192; colorKeys[0].color.r = 0; colorKeys[0].color.g = 255; colorKeys[0].color.b = 0; colorKeys[0].t = 0; for (pp_int32 i = 0; i < 2; i++) { for (pp_uint32 j = colorKeys[i].t; j < colorKeys[i+1].t; j++) { float t = (float)(j - colorKeys[i].t) / (float)(colorKeys[i+1].t - colorKeys[i].t); pp_int32 r = (pp_int32)((1.0f - t) * colorKeys[i].color.r + t * colorKeys[i+1].color.r); pp_int32 g = (pp_int32)((1.0f - t) * colorKeys[i].color.g + t * colorKeys[i+1].color.g); pp_int32 b = (pp_int32)((1.0f - t) * colorKeys[i].color.b + t * colorKeys[i+1].color.b); peakColorLUT[j][0] = (pp_uint8)r; peakColorLUT[j][1] = (pp_uint8)g; peakColorLUT[j][2] = (pp_uint8)b; } } for (pp_int32 j = colorKeys[2].t; j < 256; j++) { peakColorLUT[j][0] = (pp_uint8)colorKeys[2].color.r; peakColorLUT[j][1] = (pp_uint8)colorKeys[2].color.g; peakColorLUT[j][2] = (pp_uint8)colorKeys[2].color.b; } } MilkyTracker-1.02.00/src/tracker/PeakLevelControl.h000066400000000000000000000037151324432207300220650ustar00rootroot00000000000000/* * tracker/PeakLevelControl.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * PeakLevelControl.h * MilkyTracker * * Created by Peter Barth on 28.10.05. * */ #ifndef PEAKLEVELCONTROL__H #define PEAKLEVELCONTROL__H #include "BasicTypes.h" #include "Control.h" #include "Event.h" class PeakLevelControl : public PPControl { private: PPColor color; bool border; PPColor ourOwnBorderColor; const PPColor* borderColor; // extent pp_int32 visibleWidth; pp_int32 visibleHeight; pp_int32 peak[2]; pp_uint8 peakColorLUT[256][3]; public: PeakLevelControl(pp_int32 id, PPScreen* parentScreen, EventListenerInterface* eventListener, const PPPoint& location, const PPSize& size, bool border = true); ~PeakLevelControl(); void setColor(pp_int32 r,pp_int32 g,pp_int32 b) { color.r = r; color.g = g; color.b = b; } void setColor(PPColor color) { this->color = color; } void setBorderColor(const PPColor& color) { this->borderColor = &color; } void setPeak(pp_int32 whichPeak, pp_int32 p) { if (p>65536) p = 65536; if (p < 0) p = 0; peak[whichPeak] = p; } pp_int32 getPeak(pp_int32 whichPeak) const { return peak[whichPeak]; } // from PPControl virtual void paint(PPGraphicsAbstract* graphics); private: void buildColorLUT(); }; #endif MilkyTracker-1.02.00/src/tracker/Piano.cpp000066400000000000000000013733061324432207300202640ustar00rootroot00000000000000/* * tracker/Piano.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "BasicTypes.h" #include "Piano.h" const pp_uint8 PianoBitmapSmall::PIANO_LUT[] = { 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0xf2,0xf2,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7, 0xf7,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0xf9,0xf9,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xff,0x00,0x00,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2, 0xf2,0xf2,0xf2,0xf2,0xff,0x00,0x00,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xff,0x00,0x00,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xff,0x00,0x00,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9, 0xf9,0xf9,0xf9,0xf9,0xff,0x00,0x00,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xff,0x00,0x00,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xff,0x00,0x00,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xff,0x00,0x00,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7, 0xf7,0xf7,0xf7,0xf7,0xff,0x00,0x00,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xff,0x00,0x00,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xff,0x00,0x00,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2, 0xf2,0xf2,0xf2,0xf2,0xff,0x00,0x00,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xff,0x00,0x00,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xff,0x00,0x00,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9, 0xf9,0xf9,0xf9,0xf9,0xff,0x00,0x00,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xff,0x00,0x00,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xff,0x00,0x00,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xff,0x00,0x00,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7, 0xf7,0xf7,0xf7,0xf7,0xff,0x00,0x00,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xff,0x00,0x00,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xff,0x00,0x00,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2, 0xf2,0xf2,0xf2,0xf2,0xff,0x00,0x00,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xff,0x00,0x00,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xff,0x00,0x00,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9, 0xf9,0xf9,0xf9,0xf9,0xff,0x00,0x00,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xff,0x00,0x00,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xff,0x00,0x00,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xff,0x00,0x00,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7, 0xf7,0xf7,0xf7,0xf7,0xff,0x00,0x00,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xff,0x00,0x00,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xff,0x00,0x00,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2, 0xf2,0xf2,0xf2,0xf2,0xff,0x00,0x00,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xff,0x00,0x00,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xff,0x00,0x00,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9, 0xf9,0xf9,0xf9,0xf9,0xff,0x00,0x00,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xff,0x00,0x00,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xff,0x00,0x00,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xff,0x00,0x00,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7, 0xf7,0xf7,0xf7,0xf7,0xff,0x00,0x00,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xff,0x00,0x00,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xff,0x00,0x00,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2, 0xf2,0xf2,0xf2,0xf2,0xff,0x00,0x00,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xff,0x00,0x00,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xff,0x00,0x00,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9, 0xf9,0xf9,0xf9,0xf9,0xff,0x00,0x00,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xff,0x00,0x00,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xff,0x00,0x00,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xff,0x00,0x00,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7, 0xf7,0xf7,0xf7,0xf7,0xff,0x00,0x00,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xff,0x00,0x00,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00 }; const pp_uint8 PianoBitmapSmall::PIANO[] = { 0xcc,0xca,0xca,0xca,0xcb,0x0c,0x21,0x25,0x25,0x19,0x03,0x94,0xcd,0x0c,0x21,0x25,0x24, 0x19,0x03,0x96,0xcf,0xd0,0xd0,0x79,0xd1,0xd0,0xd0,0xd0,0xd1,0x0c,0x21,0x24,0x24, 0x19,0x03,0x9b,0xd2,0x0c,0x21,0x25,0x25,0x19,0x03,0x9d,0xd4,0x0c,0x21,0x25,0x25, 0x19,0x03,0x9e,0xd6,0xd7,0xd7,0x81,0xd9,0xd8,0xd8,0xd8,0xd8,0x0c,0x21,0x24,0x25, 0x19,0x03,0xa4,0xda,0x0c,0x21,0x25,0x25,0x19,0x03,0xa6,0xdc,0xdc,0xdd,0x88,0xde, 0xde,0xde,0xde,0xde,0x0c,0x21,0x25,0x26,0x19,0x03,0xa9,0xe0,0x0c,0x23,0x28,0x28, 0x1a,0x03,0xab,0xe2,0x0c,0x26,0x2b,0x2b,0x1d,0x03,0xad,0xe4,0xe4,0xe5,0x90,0xe6, 0xe6,0xe5,0xe6,0xe5,0x12,0x2c,0x2f,0x30,0x24,0x0d,0xb0,0xe8,0x16,0x2f,0x32,0x33, 0x26,0x11,0xb3,0xe9,0xea,0xea,0x97,0xec,0xea,0xeb,0xeb,0xeb,0x1c,0x35,0x38,0x38, 0x2b,0x18,0xb7,0xeb,0x20,0x37,0x3a,0x3a,0x2f,0x1a,0xb9,0xeb,0x22,0x39,0x3c,0x3e, 0x31,0x1d,0xbb,0xec,0xeb,0xeb,0x9f,0xec,0xeb,0xeb,0xeb,0xeb,0x27,0x3f,0x42,0x42, 0x37,0x24,0xbf,0xeb,0x2b,0x41,0x44,0x45,0x39,0x26,0xc2,0xeb,0xeb,0xec,0xa4,0xed, 0xeb,0xeb,0xec,0xec,0x30,0x45,0x4a,0x4a,0x3d,0x2b,0xc3,0xeb,0x32,0x48,0x4b,0x4c, 0x40,0x2f,0xc3,0xeb,0x34,0x4b,0x4e,0x4e,0x43,0x31,0xc3,0xec,0xeb,0xeb,0xad,0xed, 0xeb,0xeb,0xeb,0xeb,0x37,0x4b,0x4f,0x4f,0x43,0x2f,0xc4,0xeb,0x35,0x4a,0x4c,0x4d, 0x40,0x2e,0xc3,0xec,0xeb,0xeb,0xa8,0xed,0xeb,0xec,0xeb,0xeb,0x30,0x45,0x47,0x48, 0x3b,0x27,0xc2,0xeb,0x2e,0x43,0x46,0x45,0x3a,0x25,0xc0,0xeb,0x2a,0x40,0x43,0x43, 0x36,0x22,0xbe,0xeb,0xeb,0xeb,0x9f,0xec,0xec,0xeb,0xeb,0xeb,0x25,0x3b,0x3e,0x3e, 0x30,0x1c,0xba,0xeb,0x22,0x38,0x3b,0x3b,0x2f,0x19,0xb8,0xec,0xeb,0xeb,0x99,0xed, 0xeb,0xeb,0xeb,0xec,0x1c,0x33,0x35,0x36,0x28,0x14,0xb4,0xe9,0x19,0x31,0x33,0x33, 0x26,0x0f,0xb1,0xe8,0x17,0x2e,0x31,0x31,0x23,0x09,0xb0,0xe6,0xe5,0xe5,0x91,0xe7, 0xe4,0xe4,0xe4,0xe4,0x0f,0x29,0x2d,0x2c,0x1d,0x03,0xac,0xe2,0x0c,0x26,0x29,0x29, 0x1a,0x03,0xaa,0xe0,0xe0,0xe0,0x8b,0xe1,0xdf,0xdf,0xdf,0xde,0x0c,0x21,0x25,0x25, 0x19,0x03,0xa6,0xdc,0x0c,0x21,0x25,0x25,0x19,0x03,0xa4,0xda,0x0c,0x21,0x25,0x25, 0x19,0x03,0xa2,0xd8,0xd9,0xd8,0x82,0xd9,0xd7,0xd7,0xd7,0xd7,0x0c,0x21,0x25,0x25, 0x19,0x03,0x9e,0xd4,0x0c,0x21,0x25,0x25,0x19,0x03,0x9c,0xd3,0xd3,0xd3,0x7c,0xd3, 0xd2,0xd2,0xd1,0xd1,0x0c,0x21,0x24,0x25,0x19,0x03,0x97,0xcf,0x0c,0x21,0x25,0x25, 0x19,0x03,0x96,0xcd,0x0c,0x21,0x25,0x24,0x19,0x03,0x93,0xcb,0xcb,0xcb,0x73,0xd0, 0xca,0xca,0xcb,0xcb,0x12,0x9c,0xb6,0x92,0x67,0x0a,0x90,0xcd,0x12,0x9e,0xb8,0x94, 0x68,0x0a,0x91,0xce,0xcf,0xcf,0x78,0xd6,0xd0,0xd0,0xd1,0xd1,0x12,0xa2,0xbc,0x98, 0x6c,0x09,0x95,0xd2,0x12,0xa5,0xbe,0x9a,0x6e,0x09,0x98,0xd4,0x12,0xa7,0xc0,0x9c, 0x70,0x09,0x99,0xd6,0xd6,0xd7,0x81,0xdd,0xd7,0xd7,0xd8,0xd9,0x12,0xaa,0xc3,0xa0, 0x75,0x0a,0x9d,0xda,0x12,0xad,0xc6,0xa2,0x76,0x09,0xa0,0xdc,0xdc,0xdd,0x88,0xe3, 0xdd,0xde,0xdd,0xdd,0x12,0xb0,0xc9,0xa6,0x7c,0x09,0xa3,0xe0,0x12,0xb3,0xcb,0xa9, 0x7d,0x0a,0xa6,0xe2,0x12,0xb5,0xce,0xaa,0x80,0x0c,0xa8,0xe4,0xe4,0xe4,0x90,0xeb, 0xe5,0xe5,0xe5,0xe6,0x19,0xb9,0xd1,0xae,0x84,0x13,0xac,0xe7,0x1b,0xba,0xd3,0xb0, 0x86,0x16,0xae,0xea,0xea,0xea,0x97,0xef,0xea,0xeb,0xeb,0xeb,0x21,0xbf,0xd7,0xb4, 0x8a,0x1d,0xb2,0xeb,0x25,0xc0,0xd8,0xb6,0x8d,0x20,0xb3,0xeb,0x28,0xc2,0xda,0xb8, 0x8f,0x22,0xb6,0xeb,0xeb,0xeb,0x9e,0xef,0xec,0xeb,0xeb,0xeb,0x2c,0xc7,0xdb,0xbc, 0x93,0x28,0xba,0xeb,0x30,0xc8,0xdb,0xbf,0x95,0x2b,0xbb,0xeb,0xeb,0xeb,0xa5,0xef, 0xeb,0xeb,0xeb,0xeb,0x35,0xc9,0xdb,0xc1,0x99,0x30,0xbf,0xeb,0x37,0xc9,0xdb,0xc1, 0x9b,0x33,0xbf,0xeb,0x3b,0xc9,0xdb,0xc1,0x9d,0x36,0xbf,0xeb,0xeb,0xeb,0xad,0xef, 0xec,0xeb,0xeb,0xeb,0x3c,0xca,0xdb,0xc2,0x9d,0x34,0xbf,0xeb,0x3a,0xc9,0xdb,0xc1, 0x9b,0x32,0xbf,0xeb,0xeb,0xec,0xa7,0xf0,0xeb,0xeb,0xeb,0xec,0x35,0xc9,0xdc,0xc1, 0x96,0x2c,0xbc,0xeb,0x32,0xc9,0xdb,0xbf,0x95,0x29,0xbb,0xeb,0x2f,0xc8,0xdb,0xbd, 0x92,0x28,0xb9,0xeb,0xeb,0xeb,0x9f,0xef,0xeb,0xeb,0xeb,0xeb,0x2a,0xc4,0xdb,0xb9, 0x8e,0x21,0xb4,0xec,0x28,0xc1,0xd9,0xb6,0x8c,0x1f,0xb2,0xeb,0xeb,0xeb,0x9a,0xf0, 0xeb,0xeb,0xeb,0xeb,0x21,0xbe,0xd6,0xb2,0x87,0x19,0xae,0xe9,0x1e,0xbc,0xd4,0xb0, 0x86,0x15,0xad,0xe8,0x1b,0xba,0xd2,0xae,0x84,0x12,0xaa,0xe5,0xe5,0xe5,0x91,0xeb, 0xe5,0xe4,0xe4,0xe5,0x14,0xb7,0xce,0xaa,0x80,0x09,0xa6,0xe2,0x12,0xb4,0xcc,0xa8, 0x7e,0x0a,0xa4,0xe0,0xe1,0xdf,0x8a,0xe5,0xdf,0xdf,0xde,0xdf,0x12,0xb0,0xc9,0xa5, 0x79,0x09,0xa1,0xdc,0x12,0xaf,0xc7,0xa2,0x77,0x09,0x9e,0xda,0x12,0xac,0xc4,0xa0, 0x75,0x09,0x9c,0xd8,0xd9,0xd8,0x82,0xde,0xd7,0xd6,0xd7,0xd6,0x12,0xa8,0xc0,0x9c, 0x6f,0x09,0x98,0xd5,0x12,0xa6,0xbf,0x9a,0x6e,0x09,0x96,0xd3,0xd3,0xd2,0x7c,0xd8, 0xd2,0xd2,0xd1,0xd1,0x12,0xa1,0xbb,0x96,0x6a,0x09,0x92,0xcf,0x12,0xa0,0xb9,0x95, 0x67,0x0a,0x90,0xcd,0x12,0x9e,0xb7,0x92,0x67,0x09,0x8e,0xcb,0xcb,0xcb,0x72,0xda, 0xca,0xca,0xcb,0xcb,0x11,0xb3,0x3e,0x3e,0x2b,0x09,0x88,0xcd,0x10,0xb5,0x3e,0x3e, 0x2b,0x09,0x8a,0xcf,0xcf,0xcf,0x78,0xe0,0xd0,0xd0,0xd0,0xd1,0x10,0xb9,0x3f,0x3e, 0x2b,0x09,0x8e,0xd3,0x11,0xbb,0x3f,0x3f,0x2b,0x09,0x90,0xd4,0x11,0xbd,0x3f,0x3f, 0x2b,0x09,0x92,0xd6,0xd7,0xd7,0x81,0xe7,0xd8,0xd8,0xd8,0xd9,0x11,0xc1,0x40,0x41, 0x2b,0x0a,0x97,0xda,0x10,0xc3,0x43,0x43,0x2b,0x0a,0x99,0xdc,0xdc,0xdd,0x88,0xec, 0xde,0xde,0xde,0xde,0x10,0xc7,0x47,0x48,0x2f,0x09,0x9c,0xe1,0x10,0xc9,0x4a,0x4b, 0x31,0x09,0x9f,0xe2,0x10,0xcb,0x4d,0x4d,0x34,0x0c,0xa1,0xe3,0xe5,0xe5,0x90,0xf4, 0xe5,0xe6,0xe5,0xe6,0x17,0xce,0x51,0x51,0x39,0x14,0xa4,0xe8,0x19,0xd0,0x53,0x55, 0x3c,0x17,0xa7,0xe9,0xe9,0xe9,0x97,0xf6,0xeb,0xeb,0xeb,0xeb,0x1e,0xd5,0x59,0x59, 0x40,0x1d,0xab,0xec,0x22,0xd6,0x5a,0x5b,0x43,0x20,0xac,0xeb,0x25,0xd8,0x5e,0x5e, 0x45,0x22,0xaf,0xeb,0xeb,0xeb,0x9e,0xf7,0xeb,0xeb,0xec,0xeb,0x29,0xd9,0x62,0x62, 0x4b,0x28,0xb2,0xeb,0x2d,0xda,0x64,0x64,0x4d,0x2b,0xb5,0xeb,0xeb,0xeb,0xa4,0xf7, 0xeb,0xeb,0xeb,0xeb,0x32,0xda,0x69,0x69,0x51,0x31,0xb9,0xeb,0x35,0xda,0x6b,0x6a, 0x54,0x33,0xb9,0xeb,0x38,0xda,0x6d,0x6d,0x56,0x35,0xba,0xeb,0xeb,0xeb,0xac,0xf7, 0xeb,0xeb,0xeb,0xec,0x3a,0xda,0x6e,0x6d,0x57,0x35,0xb9,0xeb,0x37,0xd9,0x6c,0x6c, 0x53,0x32,0xb9,0xeb,0xeb,0xeb,0xa7,0xf7,0xeb,0xeb,0xeb,0xeb,0x32,0xd9,0x67,0x66, 0x4f,0x2c,0xb6,0xeb,0x30,0xd9,0x64,0x65,0x4d,0x29,0xb4,0xeb,0x2d,0xd9,0x63,0x63, 0x4a,0x27,0xb1,0xeb,0xeb,0xeb,0xa0,0xf7,0xec,0xeb,0xeb,0xeb,0x27,0xda,0x5e,0x5e, 0x45,0x22,0xae,0xeb,0x25,0xd7,0x5c,0x5c,0x42,0x1e,0xab,0xeb,0xeb,0xeb,0x99,0xf7, 0xeb,0xeb,0xeb,0xeb,0x1e,0xd4,0x56,0x56,0x3e,0x19,0xa7,0xe9,0x1c,0xd2,0x54,0x54, 0x3b,0x15,0xa5,0xe7,0x18,0xcf,0x52,0x52,0x38,0x12,0xa4,0xe6,0xe5,0xe5,0x91,0xf5, 0xe4,0xe4,0xe5,0xe4,0x12,0xcc,0x4e,0x4d,0x33,0x09,0xa0,0xe2,0x11,0xca,0x4b,0x4b, 0x31,0x0a,0x9d,0xe0,0xe0,0xe0,0x8b,0xef,0xdf,0xdf,0xde,0xde,0x11,0xc6,0x46,0x46, 0x2b,0x0a,0x99,0xdc,0x11,0xc4,0x43,0x44,0x2b,0x09,0x97,0xdb,0x11,0xc3,0x41,0x41, 0x2b,0x09,0x94,0xd9,0xd9,0xd8,0x82,0xe7,0xd7,0xd7,0xd7,0xd7,0x10,0xbe,0x3e,0x3e, 0x2b,0x0a,0x91,0xd5,0x11,0xbc,0x3f,0x3f,0x2b,0x0a,0x8f,0xd3,0xd3,0xd3,0x7c,0xe1, 0xd2,0xd2,0xd1,0xd1,0x11,0xb8,0x3f,0x3f,0x2b,0x0a,0x8a,0xd0,0x10,0xb6,0x3f,0x3f, 0x2b,0x09,0x88,0xcd,0x11,0xb4,0x3f,0x3e,0x2b,0x09,0x86,0xcb,0xcb,0xcb,0x72,0xe3, 0xca,0xca,0xcb,0xcb,0x0c,0x8c,0x36,0x36,0x24,0x07,0x80,0xcd,0x0c,0x8f,0x35,0x36, 0x25,0x07,0x82,0xd0,0xcf,0xcf,0x78,0xe9,0xd0,0xd0,0xd0,0xd1,0x0c,0x93,0x36,0x36, 0x25,0x07,0x87,0xd3,0x0c,0x95,0x36,0x35,0x25,0x07,0x89,0xd4,0x0c,0x97,0x36,0x36, 0x24,0x07,0x8b,0xd5,0xd7,0xd7,0x81,0xef,0xd8,0xd8,0xd8,0xd9,0x0c,0x9b,0x36,0x36, 0x25,0x07,0x8f,0xda,0x0c,0x9d,0x37,0x37,0x25,0x06,0x91,0xdc,0xdc,0xdd,0x88,0xf5, 0xdd,0xde,0xde,0xdf,0x0c,0xa2,0x3c,0x3c,0x28,0x07,0x95,0xe1,0x0c,0xa4,0x3e,0x3e, 0x2a,0x07,0x97,0xe2,0x0c,0xa6,0x41,0x40,0x2c,0x07,0x9a,0xe3,0xe4,0xe5,0x90,0xfc, 0xe6,0xe5,0xe5,0xe5,0x14,0xa9,0x46,0x46,0x32,0x10,0x9d,0xe8,0x16,0xab,0x48,0x48, 0x34,0x14,0xa0,0xe9,0xe9,0xea,0x97,0xfe,0xea,0xeb,0xeb,0xeb,0x1c,0xb0,0x4d,0x4d, 0x3a,0x1a,0xa3,0xec,0x1f,0xb2,0x4f,0x4f,0x3c,0x1d,0xa5,0xeb,0x22,0xb4,0x52,0x52, 0x3f,0x20,0xa8,0xea,0xeb,0xec,0x9f,0xfd,0xeb,0xeb,0xeb,0xeb,0x27,0xb8,0x56,0x56, 0x44,0x26,0xab,0xeb,0x2b,0xba,0x58,0x5a,0x46,0x28,0xae,0xeb,0xeb,0xeb,0xa4,0xfe, 0xeb,0xeb,0xeb,0xeb,0x30,0xbd,0x5d,0x5e,0x4b,0x2f,0xb2,0xeb,0x33,0xbd,0x60,0x60, 0x4d,0x31,0xb3,0xec,0x35,0xbe,0x62,0x63,0x50,0x33,0xb4,0xeb,0xeb,0xeb,0xad,0xfd, 0xeb,0xec,0xec,0xeb,0x38,0xbe,0x63,0x62,0x4f,0x33,0xb4,0xeb,0x35,0xbe,0x60,0x60, 0x4d,0x30,0xb2,0xeb,0xeb,0xeb,0xa8,0xfe,0xeb,0xec,0xeb,0xeb,0x30,0xbc,0x5c,0x5b, 0x48,0x29,0xae,0xeb,0x2d,0xba,0x59,0x59,0x47,0x28,0xac,0xeb,0x2a,0xb9,0x57,0x57, 0x43,0x25,0xaa,0xeb,0xec,0xeb,0xa0,0xfe,0xeb,0xeb,0xec,0xeb,0x24,0xb5,0x52,0x52, 0x3f,0x1f,0xa6,0xec,0x22,0xb3,0x50,0x50,0x3c,0x1c,0xa4,0xeb,0xeb,0xeb,0x99,0xfd, 0xeb,0xeb,0xec,0xeb,0x1c,0xaf,0x4b,0x4b,0x36,0x16,0xa0,0xe9,0x19,0xad,0x49,0x48, 0x35,0x12,0x9e,0xe8,0x16,0xab,0x46,0x46,0x31,0x0e,0x9c,0xe5,0xe5,0xe6,0x91,0xfd, 0xe5,0xe5,0xe5,0xe4,0x0f,0xa6,0x42,0x41,0x2c,0x07,0x98,0xe2,0x0c,0xa5,0x3e,0x3e, 0x29,0x07,0x95,0xe0,0xe0,0xdf,0x8b,0xf8,0xdf,0xdf,0xde,0xdf,0x0c,0xa1,0x3b,0x3a, 0x25,0x07,0x92,0xdc,0x0c,0x9f,0x38,0x37,0x25,0x06,0x8f,0xdb,0x0c,0x9d,0x36,0x35, 0x25,0x07,0x8e,0xd8,0xd8,0xd8,0x82,0xf0,0xd7,0xd7,0xd7,0xd7,0x0c,0x98,0x36,0x36, 0x25,0x07,0x8a,0xd4,0x0c,0x96,0x35,0x35,0x25,0x06,0x88,0xd3,0xd3,0xd3,0x7c,0xeb, 0xd2,0xd1,0xd1,0xd1,0x0c,0x92,0x36,0x36,0x25,0x07,0x83,0xcf,0x0c,0x90,0x36,0x35, 0x25,0x07,0x81,0xcd,0x0c,0x8e,0x35,0x35,0x25,0x07,0x7e,0xca,0xcb,0xcb,0x73,0xe4, 0xca,0xca,0xcb,0xcb,0x07,0x67,0x35,0x3a,0x2b,0x0a,0x79,0xcd,0x07,0x67,0x34,0x3a, 0x2b,0x09,0x7b,0xd0,0xcf,0xcf,0x78,0xea,0xd0,0xd0,0xd1,0xd1,0x07,0x6b,0x34,0x3a, 0x2b,0x09,0x7f,0xd3,0x07,0x6d,0x34,0x3a,0x2b,0x09,0x81,0xd5,0x07,0x70,0x35,0x3a, 0x2b,0x09,0x83,0xd6,0xd7,0xd7,0x81,0xf2,0xd8,0xd8,0xd8,0xd8,0x07,0x74,0x34,0x3a, 0x2b,0x09,0x87,0xda,0x07,0x75,0x36,0x3d,0x2b,0x09,0x8a,0xdc,0xdc,0xdd,0x88,0xf7, 0xde,0xde,0xdd,0xde,0x07,0x7a,0x3a,0x42,0x2f,0x0a,0x8d,0xe0,0x07,0x7c,0x3e,0x44, 0x31,0x0a,0x91,0xe2,0x07,0x7f,0x40,0x46,0x33,0x0c,0x92,0xe3,0xe4,0xe4,0x90,0xfe, 0xe6,0xe5,0xe5,0xe6,0x0d,0x83,0x44,0x4b,0x39,0x14,0x96,0xe8,0x12,0x85,0x47,0x4e, 0x3c,0x16,0x99,0xea,0xea,0xea,0x96,0xff,0xea,0xeb,0xeb,0xec,0x18,0x8a,0x4c,0x52, 0x41,0x1d,0x9c,0xeb,0x1c,0x8b,0x4e,0x54,0x44,0x1f,0x9e,0xec,0x1f,0x8d,0x51,0x57, 0x45,0x22,0xa1,0xeb,0xeb,0xeb,0x9f,0xff,0xeb,0xeb,0xec,0xeb,0x24,0x92,0x56,0x5c, 0x4b,0x29,0xa4,0xec,0x28,0x94,0x57,0x5f,0x4d,0x2b,0xa6,0xeb,0xec,0xeb,0xa4,0xff, 0xeb,0xec,0xeb,0xeb,0x2c,0x98,0x5d,0x63,0x51,0x30,0xab,0xec,0x2f,0x9a,0x5f,0x65, 0x54,0x33,0xac,0xeb,0x33,0x9c,0x61,0x67,0x56,0x36,0xae,0xeb,0xeb,0xeb,0xac,0xff, 0xec,0xeb,0xeb,0xeb,0x35,0x9d,0x61,0x68,0x55,0x34,0xad,0xeb,0x31,0x9b,0x5f,0x65, 0x53,0x32,0xac,0xeb,0xeb,0xeb,0xa7,0xff,0xeb,0xeb,0xeb,0xeb,0x2c,0x97,0x5a,0x61, 0x4f,0x2d,0xa7,0xeb,0x2a,0x96,0x58,0x5f,0x4d,0x2a,0xa5,0xeb,0x26,0x93,0x56,0x5c, 0x4a,0x27,0xa3,0xeb,0xeb,0xeb,0xa0,0xff,0xeb,0xec,0xeb,0xeb,0x21,0x8f,0x51,0x58, 0x45,0x22,0x9e,0xec,0x1e,0x8c,0x4f,0x55,0x42,0x1f,0x9d,0xeb,0xeb,0xeb,0x99,0xff, 0xec,0xeb,0xeb,0xeb,0x18,0x88,0x4a,0x50,0x3e,0x19,0x99,0xea,0x15,0x85,0x47,0x4e, 0x3c,0x14,0x96,0xe8,0x11,0x84,0x45,0x4c,0x38,0x12,0x95,0xe5,0xe5,0xe5,0x91,0xff, 0xe5,0xe4,0xe5,0xe4,0x07,0x80,0x41,0x46,0x33,0x09,0x91,0xe2,0x06,0x7e,0x3d,0x44, 0x31,0x0a,0x8e,0xe0,0xe0,0xdf,0x8b,0xf9,0xdf,0xde,0xdf,0xdf,0x07,0x7a,0x39,0x3f, 0x2b,0x0a,0x8a,0xdc,0x07,0x78,0x35,0x3c,0x2b,0x09,0x88,0xdb,0x07,0x75,0x34,0x3a, 0x2b,0x09,0x86,0xd9,0xd8,0xd8,0x82,0xf2,0xd7,0xd7,0xd7,0xd7,0x07,0x71,0x34,0x3b, 0x2b,0x0a,0x82,0xd4,0x07,0x6f,0x34,0x3a,0x2b,0x09,0x7f,0xd2,0xd2,0xd3,0x7b,0xec, 0xd2,0xd2,0xd1,0xd1,0x07,0x69,0x34,0x3b,0x2b,0x09,0x7c,0xd0,0x07,0x67,0x35,0x3a, 0x2b,0x09,0x79,0xcd,0x07,0x67,0x35,0x3a,0x2b,0x0a,0x76,0xcb,0xcb,0xca,0x72,0xe4, 0xca,0xca,0xcb,0xcb,0x0c,0x49,0x3d,0x41,0x31,0x0f,0x70,0xcd,0x0c,0x49,0x3d,0x41, 0x31,0x0f,0x72,0xd0,0xcf,0xcf,0x78,0xeb,0xd0,0xd0,0xd0,0xd1,0x0c,0x49,0x3d,0x41, 0x31,0x0f,0x77,0xd3,0x0c,0x49,0x3e,0x41,0x31,0x0f,0x7a,0xd4,0x0c,0x49,0x3d,0x41, 0x31,0x0f,0x7c,0xd6,0xd7,0xd7,0x81,0xf2,0xd8,0xd8,0xd8,0xd8,0x0c,0x4d,0x3f,0x43, 0x31,0x0f,0x7f,0xda,0x0c,0x50,0x41,0x46,0x31,0x0f,0x82,0xdc,0xdc,0xdc,0x87,0xf7, 0xde,0xdd,0xde,0xde,0x0c,0x55,0x45,0x4b,0x37,0x0f,0x86,0xe1,0x0c,0x56,0x49,0x4d, 0x39,0x0f,0x89,0xe2,0x0c,0x5a,0x4b,0x4f,0x3c,0x10,0x8b,0xe3,0xe4,0xe4,0x90,0xfe, 0xe5,0xe5,0xe6,0xe5,0x13,0x5e,0x4f,0x54,0x41,0x16,0x8f,0xe8,0x16,0x60,0x52,0x56, 0x43,0x1a,0x91,0xe9,0xea,0xea,0x96,0xff,0xeb,0xea,0xeb,0xec,0x1c,0x64,0x56,0x5a, 0x48,0x20,0x95,0xeb,0x1f,0x67,0x59,0x5e,0x4a,0x22,0x96,0xeb,0x22,0x69,0x5b,0x60, 0x4d,0x25,0x9a,0xeb,0xeb,0xeb,0x9f,0xff,0xec,0xec,0xeb,0xeb,0x29,0x6d,0x60,0x64, 0x52,0x2b,0x9d,0xeb,0x2b,0x6f,0x62,0x66,0x55,0x2d,0x9f,0xeb,0xeb,0xeb,0xa4,0xff, 0xec,0xeb,0xeb,0xeb,0x30,0x74,0x67,0x6b,0x59,0x33,0xa4,0xec,0x32,0x77,0x68,0x6d, 0x5b,0x36,0xa5,0xeb,0x35,0x78,0x6b,0x6e,0x5e,0x38,0xa7,0xec,0xeb,0xec,0xad,0xff, 0xeb,0xec,0xeb,0xeb,0x38,0x7a,0x6c,0x70,0x5d,0x37,0xa6,0xeb,0x34,0x78,0x6a,0x6d, 0x5a,0x35,0xa4,0xeb,0xec,0xeb,0xa8,0xff,0xeb,0xeb,0xeb,0xeb,0x30,0x73,0x64,0x69, 0x56,0x2f,0x9f,0xec,0x2d,0x70,0x62,0x66,0x54,0x2c,0x9e,0xeb,0x2a,0x6f,0x60,0x65, 0x51,0x2a,0x9c,0xeb,0xeb,0xeb,0x9f,0xff,0xec,0xeb,0xec,0xeb,0x25,0x6a,0x5b,0x5f, 0x4d,0x24,0x97,0xeb,0x22,0x68,0x5a,0x5e,0x4a,0x21,0x96,0xeb,0xec,0xeb,0x9a,0xff, 0xeb,0xec,0xec,0xeb,0x1c,0x64,0x54,0x59,0x46,0x1c,0x91,0xea,0x19,0x61,0x52,0x56, 0x43,0x18,0x8f,0xe8,0x17,0x5f,0x50,0x54,0x40,0x15,0x8d,0xe6,0xe5,0xe5,0x91,0xff, 0xe4,0xe5,0xe4,0xe5,0x0f,0x5a,0x4c,0x4f,0x3c,0x0f,0x89,0xe2,0x0c,0x59,0x49,0x4d, 0x39,0x0f,0x86,0xe0,0xe0,0xdf,0x8b,0xfa,0xdf,0xde,0xdf,0xde,0x0c,0x53,0x44,0x48, 0x34,0x0f,0x83,0xdc,0x0c,0x52,0x42,0x46,0x31,0x0f,0x80,0xda,0x0c,0x4e,0x3f,0x43, 0x31,0x0f,0x7e,0xd9,0xd8,0xd8,0x82,0xf2,0xd7,0xd6,0xd7,0xd7,0x0c,0x4a,0x3d,0x41, 0x31,0x0f,0x7a,0xd5,0x0c,0x49,0x3d,0x41,0x31,0x0f,0x78,0xd3,0xd3,0xd3,0x7b,0xec, 0xd2,0xd1,0xd1,0xd1,0x0c,0x49,0x3e,0x41,0x31,0x0f,0x73,0xd0,0x0c,0x49,0x3d,0x41, 0x31,0x0f,0x72,0xcc,0x0c,0x49,0x3d,0x41,0x31,0x0f,0x6f,0xcb,0xcb,0xcb,0x73,0xe4, 0xca,0xca,0xcb,0xcb,0x11,0x38,0x46,0x4a,0x37,0x12,0x69,0xcd,0x10,0x38,0x46,0x4a, 0x36,0x12,0x6b,0xcf,0xcf,0xd0,0x78,0xeb,0xd1,0xd0,0xd1,0xd1,0x11,0x38,0x45,0x4a, 0x37,0x12,0x71,0xd2,0x11,0x38,0x45,0x49,0x37,0x12,0x73,0xd5,0x11,0x38,0x46,0x4a, 0x37,0x12,0x75,0xd7,0xd8,0xd8,0x81,0xf1,0xd8,0xd7,0xd8,0xd8,0x10,0x38,0x49,0x50, 0x37,0x12,0x79,0xdb,0x11,0x3a,0x4c,0x51,0x38,0x12,0x7b,0xdc,0xdc,0xdd,0x88,0xf7, 0xdd,0xde,0xdd,0xdd,0x10,0x3f,0x51,0x56,0x3e,0x12,0x80,0xe0,0x10,0x41,0x54,0x59, 0x40,0x12,0x82,0xe3,0x10,0x44,0x55,0x5b,0x43,0x15,0x84,0xe5,0xe5,0xe5,0x90,0xff, 0xe5,0xe6,0xe6,0xe6,0x17,0x49,0x5a,0x5e,0x47,0x1b,0x86,0xe8,0x1a,0x4b,0x5b,0x61, 0x49,0x1d,0x89,0xea,0xea,0xea,0x97,0xff,0xea,0xeb,0xec,0xeb,0x1f,0x50,0x61,0x66, 0x4e,0x23,0x8e,0xeb,0x24,0x52,0x63,0x69,0x51,0x26,0x91,0xec,0x26,0x54,0x65,0x6b, 0x53,0x29,0x93,0xec,0xec,0xec,0x9f,0xff,0xeb,0xeb,0xeb,0xeb,0x2b,0x5a,0x69,0x6f, 0x58,0x2f,0x95,0xeb,0x2f,0x5c,0x6b,0x72,0x5b,0x31,0x98,0xeb,0xeb,0xeb,0xa5,0xff, 0xec,0xeb,0xeb,0xeb,0x33,0x5f,0x70,0x76,0x5f,0x36,0x9d,0xeb,0x36,0x63,0x72,0x78, 0x61,0x39,0x9f,0xec,0x39,0x64,0x75,0x7a,0x64,0x3b,0xa1,0xec,0xec,0xec,0xad,0xff, 0xeb,0xeb,0xeb,0xec,0x3c,0x66,0x76,0x7a,0x62,0x3a,0x9f,0xeb,0x37,0x64,0x74,0x77, 0x61,0x38,0x9c,0xeb,0xeb,0xeb,0xa7,0xff,0xeb,0xeb,0xeb,0xec,0x33,0x5e,0x6e,0x74, 0x5c,0x32,0x99,0xeb,0x31,0x5e,0x6c,0x72,0x5a,0x2f,0x98,0xec,0x2e,0x5b,0x6b,0x6f, 0x57,0x2d,0x95,0xec,0xec,0xec,0x9f,0xff,0xeb,0xec,0xeb,0xeb,0x28,0x56,0x66,0x6b, 0x53,0x27,0x90,0xeb,0x26,0x53,0x64,0x69,0x51,0x25,0x8f,0xec,0xeb,0xeb,0x9a,0xff, 0xeb,0xeb,0xeb,0xec,0x20,0x4f,0x5f,0x64,0x4c,0x20,0x8a,0xea,0x1e,0x4d,0x5d,0x62, 0x4a,0x1c,0x88,0xe9,0x19,0x49,0x5b,0x60,0x46,0x19,0x86,0xe7,0xe6,0xe6,0x91,0xff, 0xe4,0xe5,0xe5,0xe4,0x14,0x45,0x57,0x5b,0x42,0x13,0x81,0xe2,0x10,0x43,0x53,0x59, 0x40,0x12,0x7f,0xe1,0xe0,0xe0,0x8b,0xfa,0xde,0xdf,0xde,0xdf,0x10,0x3e,0x4f,0x53, 0x3a,0x12,0x7c,0xdc,0x11,0x3c,0x4c,0x51,0x38,0x12,0x7a,0xdb,0x10,0x39,0x4a,0x4f, 0x37,0x12,0x78,0xd9,0xd9,0xd9,0x82,0xf2,0xd8,0xd7,0xd7,0xd6,0x10,0x38,0x45,0x4a, 0x37,0x12,0x73,0xd4,0x10,0x38,0x45,0x4a,0x36,0x12,0x70,0xd2,0xd3,0xd3,0x7c,0xec, 0xd2,0xd1,0xd1,0xd1,0x11,0x38,0x45,0x4a,0x37,0x12,0x6c,0xcf,0x10,0x38,0x45,0x4a, 0x37,0x12,0x6b,0xcd,0x11,0x38,0x46,0x4a,0x37,0x12,0x6a,0xcc,0xcc,0xcb,0x73,0xe5, 0xcb,0xcb,0xcc,0xcd,0x13,0x41,0x4c,0x51,0x3d,0x13,0x6b,0xcf,0x13,0x41,0x4b,0x51, 0x3d,0x13,0x6e,0xd1,0xd1,0xd1,0x78,0xeb,0xd2,0xd2,0xd2,0xd3,0x14,0x41,0x4c,0x52, 0x3e,0x13,0x73,0xd5,0x13,0x41,0x4c,0x51,0x3e,0x13,0x76,0xd7,0x13,0x41,0x4d,0x53, 0x3e,0x13,0x78,0xd9,0xd9,0xda,0x81,0xf1,0xd9,0xd9,0xd9,0xda,0x13,0x42,0x52,0x59, 0x3f,0x14,0x7c,0xdc,0x13,0x45,0x54,0x5b,0x41,0x14,0x7d,0xde,0xde,0xdf,0x87,0xf6, 0xdf,0xdf,0xdf,0xe0,0x13,0x4a,0x59,0x5f,0x46,0x13,0x82,0xe2,0x13,0x4c,0x5c,0x61, 0x48,0x14,0x85,0xe5,0x14,0x4f,0x5e,0x64,0x4b,0x16,0x87,0xe7,0xe7,0xe7,0x90,0xfe, 0xe7,0xe6,0xe7,0xe7,0x1a,0x53,0x62,0x68,0x50,0x1c,0x8a,0xea,0x1d,0x56,0x64,0x6b, 0x52,0x1e,0x8c,0xeb,0xec,0xeb,0x96,0xff,0xec,0xed,0xed,0xec,0x23,0x5a,0x69,0x6f, 0x57,0x25,0x91,0xed,0x26,0x5d,0x6b,0x71,0x59,0x27,0x93,0xed,0x28,0x5f,0x6e,0x73, 0x5c,0x29,0x95,0xed,0xed,0xed,0x9e,0xff,0xed,0xec,0xec,0xed,0x2f,0x63,0x71,0x77, 0x61,0x30,0x98,0xed,0x31,0x65,0x74,0x7b,0x62,0x32,0x9b,0xed,0xed,0xed,0xa4,0xff, 0xed,0xed,0xed,0xed,0x35,0x69,0x79,0x7e,0x66,0x38,0xa0,0xed,0x38,0x6d,0x7a,0x80, 0x69,0x3a,0xa1,0xed,0x3b,0x6f,0x7d,0x83,0x6c,0x3c,0xa3,0xed,0xed,0xed,0xad,0xff, 0xed,0xec,0xed,0xed,0x3d,0x70,0x7d,0x83,0x6b,0x3c,0xa1,0xed,0x3a,0x6e,0x7b,0x80, 0x69,0x3a,0x9f,0xed,0xed,0xed,0xa7,0xff,0xec,0xed,0xed,0xed,0x36,0x6a,0x77,0x7d, 0x63,0x33,0x9c,0xed,0x34,0x67,0x74,0x7a,0x63,0x31,0x9a,0xed,0x30,0x65,0x73,0x78, 0x60,0x2e,0x99,0xec,0xed,0xed,0x9f,0xff,0xed,0xec,0xed,0xed,0x2b,0x60,0x6e,0x73, 0x5c,0x28,0x93,0xed,0x29,0x5e,0x6c,0x71,0x59,0x26,0x91,0xed,0xed,0xed,0x99,0xff, 0xed,0xed,0xed,0xed,0x22,0x5a,0x68,0x6d,0x54,0x21,0x8d,0xeb,0x20,0x56,0x64,0x6b, 0x53,0x1d,0x8c,0xea,0x1d,0x54,0x63,0x69,0x4f,0x1b,0x89,0xe8,0xe7,0xe8,0x91,0xff, 0xe6,0xe5,0xe6,0xe5,0x16,0x50,0x5f,0x64,0x4b,0x14,0x85,0xe3,0x14,0x4e,0x5b,0x61, 0x49,0x13,0x82,0xe2,0xe2,0xe1,0x8b,0xf9,0xe0,0xe0,0xe1,0xe1,0x13,0x48,0x57,0x5d, 0x43,0x14,0x7f,0xdd,0x13,0x46,0x55,0x5b,0x41,0x13,0x7c,0xdd,0x13,0x44,0x52,0x59, 0x3f,0x13,0x7a,0xdb,0xdb,0xda,0x82,0xf2,0xd9,0xd8,0xd9,0xd9,0x13,0x40,0x4e,0x53, 0x3e,0x14,0x76,0xd6,0x13,0x41,0x4c,0x51,0x3d,0x14,0x73,0xd5,0xd4,0xd4,0x7b,0xec, 0xd4,0xd3,0xd3,0xd3,0x13,0x41,0x4c,0x52,0x3e,0x14,0x6f,0xd1,0x14,0x41,0x4c,0x51, 0x3e,0x14,0x6e,0xcf,0x13,0x41,0x4c,0x51,0x3d,0x14,0x6b,0xcd,0xcd,0xce,0x73,0xe4, 0xce,0xce,0xce,0xce,0x17,0x4b,0x55,0x59,0x44,0x16,0x75,0xd1,0x18,0x4b,0x56,0x58, 0x44,0x16,0x77,0xd3,0xd3,0xd3,0x79,0xea,0xd3,0xd4,0xd5,0xd5,0x17,0x4b,0x55,0x58, 0x44,0x16,0x7c,0xd6,0x17,0x4a,0x58,0x5a,0x44,0x16,0x7e,0xd9,0x18,0x4c,0x59,0x5c, 0x44,0x16,0x81,0xdb,0xdc,0xdc,0x81,0xf1,0xdc,0xdb,0xda,0xdc,0x18,0x50,0x5e,0x62, 0x48,0x16,0x84,0xde,0x18,0x52,0x61,0x64,0x49,0x17,0x86,0xdf,0xe0,0xe0,0x88,0xf7, 0xe2,0xe2,0xe1,0xe2,0x18,0x57,0x65,0x69,0x4f,0x16,0x8a,0xe5,0x17,0x5a,0x68,0x6b, 0x51,0x17,0x8d,0xe6,0x19,0x5c,0x6a,0x6d,0x53,0x1b,0x8f,0xe7,0xe9,0xe9,0x90,0xff, 0xe9,0xe9,0xe8,0xe8,0x20,0x61,0x6e,0x71,0x58,0x20,0x92,0xeb,0x23,0x62,0x70,0x74, 0x5b,0x22,0x94,0xed,0xec,0xed,0x97,0xff,0xee,0xee,0xee,0xef,0x28,0x67,0x75,0x77, 0x60,0x29,0x9a,0xee,0x2b,0x6a,0x76,0x7b,0x62,0x2b,0x9b,0xef,0x2e,0x6c,0x79,0x7c, 0x64,0x2e,0x9e,0xef,0xee,0xee,0x9f,0xff,0xee,0xee,0xed,0xed,0x33,0x71,0x7d,0x81, 0x68,0x33,0xa0,0xee,0x35,0x73,0x7f,0x83,0x6a,0x36,0xa3,0xed,0xed,0xee,0xa4,0xff, 0xed,0xed,0xee,0xef,0x3a,0x77,0x84,0x87,0x6f,0x3b,0xa7,0xee,0x3d,0x79,0x85,0x88, 0x71,0x3e,0xa9,0xef,0x40,0x7b,0x88,0x8b,0x74,0x40,0xac,0xef,0xee,0xee,0xac,0xff, 0xed,0xed,0xed,0xed,0x42,0x7c,0x89,0x8c,0x72,0x3f,0xaa,0xee,0x3e,0x7a,0x87,0x88, 0x70,0x3c,0xa8,0xed,0xee,0xee,0xa7,0xff,0xed,0xee,0xee,0xef,0x3b,0x75,0x82,0x85, 0x6d,0x37,0xa4,0xee,0x38,0x74,0x81,0x83,0x6b,0x35,0xa2,0xee,0x35,0x72,0x7e,0x80, 0x67,0x32,0xa1,0xee,0xee,0xef,0xa0,0xff,0xed,0xed,0xec,0xed,0x30,0x6d,0x79,0x7c, 0x64,0x2d,0x9b,0xee,0x2e,0x6b,0x78,0x7b,0x61,0x2a,0x99,0xed,0xee,0xee,0x9a,0xff, 0xee,0xee,0xee,0xef,0x27,0x67,0x73,0x75,0x5d,0x25,0x95,0xee,0x25,0x64,0x71,0x73, 0x5a,0x21,0x94,0xec,0x21,0x61,0x6f,0x71,0x58,0x1e,0x92,0xe9,0xe9,0xe9,0x91,0xff, 0xe8,0xe8,0xe7,0xe6,0x1c,0x5e,0x6b,0x6d,0x53,0x1a,0x8c,0xe6,0x19,0x5c,0x67,0x6a, 0x51,0x16,0x8b,0xe4,0xe4,0xe2,0x8a,0xfa,0xe2,0xe2,0xe2,0xe3,0x18,0x56,0x64,0x66, 0x4c,0x17,0x87,0xe1,0x18,0x55,0x61,0x64,0x4a,0x16,0x85,0xde,0x18,0x52,0x5f,0x62, 0x48,0x16,0x83,0xdd,0xdc,0xdc,0x82,0xf2,0xda,0xdb,0xd9,0xd9,0x17,0x4d,0x5b,0x5d, 0x44,0x16,0x7f,0xd7,0x18,0x4b,0x58,0x5a,0x44,0x17,0x7b,0xd6,0xd6,0xd6,0x7c,0xec, 0xd5,0xd5,0xd5,0xd5,0x18,0x4b,0x55,0x59,0x45,0x16,0x79,0xd4,0x18,0x4b,0x55,0x59, 0x44,0x17,0x76,0xd1,0x18,0x4b,0x56,0x58,0x44,0x16,0x73,0xd0,0xd0,0xcf,0x72,0xe5, 0xcf,0xd0,0xcf,0xd0,0x1e,0x6e,0x60,0x65,0x4d,0x1d,0x7d,0xd1,0x1f,0x70,0x60,0x64, 0x4d,0x1d,0x80,0xd4,0xd4,0xd5,0x79,0xea,0xd6,0xd5,0xd7,0xd6,0x1f,0x73,0x63,0x68, 0x4d,0x1d,0x85,0xd9,0x1f,0x77,0x65,0x6b,0x4d,0x1d,0x86,0xdb,0x1e,0x78,0x68,0x6d, 0x4e,0x1d,0x88,0xdd,0xdd,0xdd,0x82,0xf2,0xdc,0xdd,0xdc,0xde,0x1e,0x7c,0x6c,0x71, 0x53,0x1d,0x8c,0xe0,0x1f,0x7f,0x6e,0x73,0x55,0x1d,0x8e,0xe1,0xe1,0xe2,0x88,0xf7, 0xe4,0xe3,0xe3,0xe3,0x1e,0x83,0x72,0x79,0x5b,0x1d,0x94,0xe6,0x20,0x85,0x76,0x7a, 0x5c,0x20,0x96,0xe8,0x22,0x88,0x78,0x7c,0x60,0x23,0x98,0xea,0xea,0xea,0x90,0xff, 0xe9,0xeb,0xea,0xeb,0x29,0x8c,0x7b,0x80,0x63,0x29,0x9a,0xed,0x2b,0x8d,0x7e,0x82, 0x66,0x2b,0x9d,0xee,0xef,0xef,0x96,0xff,0xf0,0xef,0xef,0xef,0x30,0x92,0x82,0x86, 0x6b,0x31,0xa2,0xef,0x34,0x93,0x84,0x89,0x6d,0x34,0xa4,0xf0,0x36,0x96,0x87,0x8c, 0x6e,0x36,0xa6,0xf0,0xef,0xef,0x9f,0xff,0xef,0xf0,0xee,0xf0,0x3b,0x9a,0x8a,0x90, 0x73,0x3c,0xa9,0xf0,0x3d,0x9c,0x8d,0x92,0x75,0x3e,0xab,0xf0,0xf0,0xf0,0xa4,0xff, 0xef,0xf0,0xef,0xef,0x43,0xa0,0x91,0x95,0x79,0x42,0xb0,0xf0,0x45,0xa2,0x93,0x98, 0x7c,0x45,0xb1,0xef,0x48,0xa4,0x94,0x9a,0x7e,0x48,0xb3,0xf0,0xf0,0xf0,0xae,0xff, 0xef,0xef,0xee,0xf0,0x49,0xa5,0x95,0x9a,0x7d,0x46,0xb2,0xf0,0x46,0xa3,0x94,0x98, 0x7b,0x44,0xb0,0xf0,0xef,0xef,0xa6,0xff,0xef,0xef,0xef,0xef,0x42,0x9f,0x8f,0x94, 0x77,0x3f,0xad,0xef,0x40,0x9d,0x8d,0x92,0x75,0x3d,0xaa,0xef,0x3d,0x9b,0x8c,0x90, 0x72,0x3a,0xa8,0xf0,0xf0,0xef,0x9f,0xff,0xee,0xf0,0xee,0xef,0x38,0x98,0x87,0x8b, 0x6f,0x36,0xa4,0xef,0x36,0x94,0x84,0x8a,0x6b,0x32,0xa1,0xef,0xf0,0xf0,0x9a,0xff, 0xef,0xef,0xef,0xef,0x30,0x91,0x80,0x84,0x68,0x2d,0x9e,0xef,0x2d,0x8e,0x7e,0x83, 0x65,0x2a,0x9c,0xed,0x2a,0x8d,0x7c,0x81,0x63,0x27,0x9a,0xec,0xec,0xeb,0x91,0xff, 0xe8,0xea,0xe9,0xe8,0x25,0x89,0x79,0x7c,0x5e,0x22,0x95,0xe7,0x23,0x87,0x76,0x7a, 0x5d,0x1f,0x93,0xe5,0xe6,0xe4,0x8b,0xf9,0xe5,0xe3,0xe5,0xe3,0x1f,0x82,0x72,0x75, 0x57,0x1d,0x90,0xe2,0x1e,0x80,0x6f,0x74,0x56,0x1d,0x8e,0xe0,0x1f,0x7d,0x6d,0x72, 0x53,0x1d,0x8b,0xdf,0xdf,0xde,0x82,0xf2,0xdb,0xdc,0xdb,0xdc,0x1e,0x79,0x69,0x6d, 0x4e,0x1d,0x86,0xda,0x1f,0x77,0x66,0x6b,0x4d,0x1e,0x84,0xd8,0xd8,0xd8,0x7c,0xec, 0xd7,0xd7,0xd7,0xd6,0x1e,0x73,0x62,0x67,0x4d,0x1d,0x81,0xd6,0x1e,0x70,0x61,0x64, 0x4d,0x1d,0x7f,0xd3,0x1e,0x6f,0x61,0x65,0x4d,0x1d,0x7c,0xd2,0xd1,0xd1,0x73,0xe4, 0xd1,0xd1,0xd2,0xd2,0x25,0x97,0x6b,0x6c,0x4f,0x1a,0x86,0xd3,0x25,0x9a,0x6d,0x6f, 0x4f,0x1a,0x88,0xd5,0xd6,0xd6,0x78,0xea,0xd7,0xd7,0xd9,0xd9,0x25,0x9d,0x73,0x74, 0x4f,0x1a,0x8c,0xdb,0x25,0xa0,0x75,0x76,0x50,0x1b,0x8e,0xdc,0x25,0xa2,0x77,0x78, 0x52,0x1a,0x91,0xde,0xdf,0xdf,0x81,0xf2,0xde,0xde,0xde,0xe0,0x25,0xa6,0x7b,0x7d, 0x57,0x1a,0x95,0xe1,0x25,0xa7,0x7e,0x7e,0x58,0x1b,0x97,0xe3,0xe4,0xe4,0x87,0xf6, 0xe5,0xe4,0xe5,0xe7,0x26,0xab,0x81,0x83,0x5d,0x1a,0x9b,0xe7,0x29,0xad,0x84,0x85, 0x5f,0x1d,0x9d,0xea,0x2b,0xb0,0x86,0x87,0x63,0x20,0x9f,0xec,0xed,0xec,0x90,0xff, 0xec,0xec,0xec,0xec,0x31,0xb4,0x89,0x8a,0x67,0x25,0xa2,0xef,0x33,0xb5,0x8c,0x8d, 0x68,0x27,0xa6,0xf0,0xf0,0xf0,0x97,0xff,0xf1,0xf0,0xf1,0xf1,0x39,0xba,0x90,0x91, 0x6e,0x2d,0xa8,0xf1,0x3b,0xbc,0x92,0x94,0x70,0x30,0xab,0xf1,0x3d,0xbd,0x95,0x96, 0x71,0x32,0xad,0xf2,0xf2,0xf1,0x9f,0xff,0xf0,0xf0,0xf0,0xf0,0x43,0xc2,0x98,0x9a, 0x77,0x38,0xb1,0xf1,0x45,0xc3,0x9a,0x9c,0x78,0x3b,0xb3,0xf0,0xf0,0xf0,0xa4,0xff, 0xf0,0xf0,0xf1,0xf1,0x4a,0xc6,0x9f,0xa0,0x7c,0x40,0xb7,0xf1,0x4c,0xc6,0xa0,0xa1, 0x7f,0x42,0xb9,0xf1,0x4f,0xc5,0xa3,0xa4,0x81,0x45,0xb9,0xf1,0xf2,0xf1,0xad,0xff, 0xf0,0xf1,0xf0,0xf1,0x50,0xc5,0xa3,0xa4,0x80,0x44,0xb9,0xf0,0x4e,0xc6,0xa2,0xa2, 0x7f,0x41,0xb7,0xf0,0xf0,0xf0,0xa6,0xff,0xf1,0xf0,0xf1,0xf1,0x4a,0xc6,0x9d,0x9e, 0x7a,0x3c,0xb4,0xf1,0x47,0xc4,0x9b,0x9c,0x78,0x39,0xb2,0xf1,0x45,0xc2,0x99,0x9a, 0x75,0x36,0xb0,0xf2,0xf2,0xf1,0xa0,0xff,0xf0,0xf1,0xf0,0xf0,0x3f,0xbf,0x95,0x96, 0x72,0x31,0xab,0xf0,0x3d,0xbd,0x93,0x94,0x6e,0x2f,0xaa,0xf0,0xf1,0xf0,0x99,0xff, 0xf0,0xf0,0xf1,0xf1,0x38,0xb9,0x8e,0x8f,0x6b,0x28,0xa5,0xf1,0x35,0xb6,0x8d,0x8d, 0x68,0x26,0xa4,0xf0,0x32,0xb5,0x8a,0x8a,0x66,0x23,0xa1,0xee,0xee,0xed,0x91,0xff, 0xeb,0xeb,0xeb,0xea,0x2e,0xb1,0x87,0x87,0x62,0x1e,0x9e,0xe9,0x2b,0xaf,0x84,0x85, 0x5f,0x1b,0x9b,0xe7,0xe7,0xe6,0x8a,0xf9,0xe5,0xe5,0xe6,0xe5,0x25,0xab,0x80,0x80, 0x5b,0x1a,0x98,0xe4,0x25,0xa9,0x7e,0x7f,0x58,0x1a,0x95,0xe2,0x24,0xa6,0x7b,0x7c, 0x57,0x1b,0x93,0xe1,0xe1,0xe0,0x82,0xf2,0xdd,0xde,0xde,0xdd,0x25,0xa2,0x78,0x77, 0x51,0x1a,0x8e,0xdb,0x25,0xa0,0x74,0x75,0x4f,0x1a,0x8d,0xd9,0xda,0xd9,0x7b,0xec, 0xd9,0xd8,0xd8,0xd9,0x25,0x9c,0x70,0x72,0x4f,0x1a,0x89,0xd7,0x25,0x9a,0x6f,0x6f, 0x4f,0x1a,0x87,0xd5,0x25,0x99,0x6d,0x6c,0x4f,0x1b,0x84,0xd3,0xd3,0xd2,0x73,0xe4, 0xd3,0xd3,0xd3,0xd3,0x29,0xbc,0x64,0x62,0x46,0x16,0x8e,0xd5,0x2a,0xbd,0x64,0x62, 0x46,0x16,0x90,0xd8,0xd7,0xd8,0x79,0xeb,0xd9,0xda,0xda,0xdb,0x2a,0xc1,0x69,0x66, 0x46,0x17,0x95,0xdc,0x29,0xc3,0x6a,0x68,0x45,0x17,0x98,0xde,0x29,0xc6,0x6d,0x69, 0x45,0x16,0x99,0xe0,0xe1,0xe1,0x81,0xf1,0xe1,0xe0,0xe0,0xe2,0x2a,0xc9,0x71,0x6f, 0x4a,0x16,0x9d,0xe2,0x2a,0xcb,0x73,0x71,0x4c,0x17,0x9f,0xe4,0xe4,0xe6,0x88,0xf7, 0xe6,0xe7,0xe7,0xe7,0x2c,0xcf,0x77,0x76,0x51,0x16,0xa5,0xea,0x2e,0xd1,0x7a,0x78, 0x53,0x18,0xa6,0xec,0x31,0xd2,0x7c,0x79,0x56,0x1a,0xa8,0xed,0xee,0xee,0x90,0xff, 0xed,0xee,0xed,0xee,0x37,0xd6,0x80,0x7f,0x5b,0x20,0xaa,0xf0,0x39,0xd8,0x82,0x80, 0x5c,0x22,0xad,0xf2,0xf2,0xf2,0x97,0xff,0xf2,0xf2,0xf2,0xf2,0x3e,0xdc,0x87,0x84, 0x62,0x28,0xb2,0xf2,0x40,0xde,0x89,0x87,0x64,0x2b,0xb4,0xf3,0x44,0xdf,0x8c,0x89, 0x66,0x2e,0xb6,0xf3,0xf2,0xf3,0x9e,0xff,0xf2,0xf2,0xf2,0xf2,0x49,0xdf,0x8f,0x8d, 0x6a,0x33,0xb9,0xf2,0x4a,0xdf,0x92,0x8f,0x6d,0x36,0xbb,0xf2,0xf2,0xf1,0xa5,0xff, 0xf2,0xf2,0xf2,0xf2,0x4f,0xe0,0x95,0x93,0x71,0x3b,0xbf,0xf1,0x52,0xe0,0x98,0x95, 0x73,0x3d,0xbf,0xf2,0x55,0xe0,0x99,0x98,0x76,0x40,0xbf,0xf3,0xf2,0xf2,0xae,0xff, 0xf2,0xf2,0xf2,0xf2,0x56,0xe0,0x9a,0x97,0x74,0x3f,0xbe,0xf1,0x53,0xe0,0x99,0x95, 0x72,0x3d,0xbe,0xf1,0xf2,0xf1,0xa7,0xff,0xf2,0xf2,0xf2,0xf2,0x4f,0xe0,0x94,0x91, 0x6e,0x37,0xbd,0xf1,0x4d,0xe0,0x92,0x90,0x6d,0x34,0xbb,0xf2,0x49,0xe0,0x90,0x8d, 0x6a,0x32,0xb9,0xf3,0xf3,0xf3,0x9f,0xff,0xf2,0xf2,0xf2,0xf2,0x46,0xe0,0x8b,0x89, 0x66,0x2c,0xb4,0xf2,0x43,0xdf,0x8a,0x86,0x63,0x2a,0xb1,0xf1,0xf1,0xf2,0x99,0xff, 0xf2,0xf2,0xf2,0xf2,0x3e,0xdc,0x85,0x82,0x5e,0x25,0xae,0xf2,0x3c,0xd9,0x83,0x80, 0x5c,0x21,0xad,0xf1,0x38,0xd7,0x81,0x7e,0x59,0x1e,0xaa,0xf0,0xef,0xf0,0x91,0xff, 0xed,0xed,0xed,0xec,0x33,0xd4,0x7d,0x79,0x55,0x19,0xa5,0xeb,0x31,0xd2,0x7b,0x78, 0x53,0x17,0xa3,0xe9,0xe9,0xe8,0x8a,0xf9,0xe7,0xe8,0xe8,0xe7,0x2b,0xce,0x77,0x72, 0x4e,0x16,0xa1,0xe6,0x29,0xcc,0x74,0x71,0x4b,0x17,0x9e,0xe5,0x2a,0xca,0x71,0x6e, 0x49,0x17,0x9c,0xe3,0xe3,0xe2,0x82,0xf1,0xdf,0xe0,0xe0,0xde,0x2a,0xc6,0x6d,0x6a, 0x45,0x16,0x98,0xdd,0x29,0xc5,0x6b,0x68,0x46,0x16,0x94,0xdb,0xdb,0xdc,0x7b,0xec, 0xda,0xda,0xda,0xda,0x29,0xc0,0x67,0x64,0x45,0x16,0x91,0xd8,0x2a,0xbf,0x64,0x61, 0x46,0x16,0x90,0xd7,0x2a,0xbd,0x65,0x62,0x46,0x16,0x8d,0xd5,0xd5,0xd5,0x73,0xe4, 0xd4,0xd5,0xd6,0xd5,0x3e,0xa5,0x82,0x5d,0x36,0x23,0x96,0xd7,0x3e,0xa7,0x84,0x5d, 0x36,0x24,0x99,0xdb,0xda,0xda,0x78,0xea,0xdc,0xdc,0xdc,0xdc,0x3e,0xab,0x89,0x60, 0x36,0x24,0x9d,0xde,0x3e,0xad,0x8b,0x62,0x37,0x24,0x9f,0xe1,0x3d,0xaf,0x8c,0x64, 0x37,0x24,0xa1,0xe2,0xe3,0xe2,0x81,0xf1,0xe2,0xe2,0xe2,0xe2,0x3d,0xb3,0x91,0x68, 0x37,0x24,0xa5,0xe4,0x40,0xb6,0x93,0x6b,0x3a,0x24,0xa7,0xe7,0xe8,0xe8,0x87,0xf7, 0xe9,0xe9,0xe9,0xe9,0x45,0xb9,0x96,0x70,0x3f,0x24,0xab,0xeb,0x47,0xbb,0x99,0x72, 0x41,0x29,0xad,0xed,0x4a,0xbd,0x9b,0x73,0x43,0x2b,0xaf,0xef,0xf0,0xf0,0x90,0xff, 0xf0,0xef,0xf0,0xef,0x50,0xc1,0x9e,0x77,0x48,0x2f,0xb3,0xf2,0x51,0xc3,0xa1,0x7a, 0x4b,0x32,0xb6,0xf4,0xf3,0xf4,0x96,0xff,0xf4,0xf3,0xf4,0xf3,0x57,0xc6,0xa5,0x7f, 0x50,0x38,0xb9,0xf4,0x59,0xc8,0xa7,0x82,0x52,0x3a,0xbb,0xf5,0x5a,0xcb,0xaa,0x83, 0x54,0x3d,0xbd,0xf4,0xf5,0xf4,0x9e,0xff,0xf2,0xf2,0xf3,0xf2,0x60,0xce,0xad,0x87, 0x5a,0x42,0xc1,0xf2,0x62,0xd0,0xaf,0x8a,0x5c,0x44,0xc3,0xf4,0xf3,0xf4,0xa5,0xff, 0xf4,0xf3,0xf3,0xf4,0x66,0xd0,0xb3,0x8d,0x60,0x49,0xc4,0xf4,0x68,0xd0,0xb6,0x90, 0x62,0x4c,0xc4,0xf5,0x6b,0xcf,0xb6,0x91,0x64,0x4e,0xc4,0xf4,0xf5,0xf4,0xad,0xff, 0xf3,0xf3,0xf3,0xf3,0x6c,0xd0,0xb6,0x92,0x64,0x4d,0xc4,0xf2,0x6a,0xd0,0xb6,0x8f, 0x61,0x4b,0xc4,0xf3,0xf4,0xf4,0xa7,0xff,0xf4,0xf3,0xf4,0xf3,0x66,0xd0,0xb2,0x8b, 0x5d,0x45,0xc3,0xf4,0x64,0xcf,0xb0,0x89,0x5b,0x43,0xc1,0xf4,0x61,0xcf,0xae,0x86, 0x59,0x41,0xc0,0xf4,0xf4,0xf4,0x9f,0xff,0xf3,0xf2,0xf3,0xf2,0x5d,0xcc,0xa9,0x83, 0x54,0x3b,0xbb,0xf3,0x5a,0xca,0xa8,0x81,0x52,0x39,0xb9,0xf3,0xf3,0xf4,0x99,0xff, 0xf3,0xf3,0xf3,0xf3,0x56,0xc6,0xa3,0x7d,0x4d,0x34,0xb5,0xf3,0x53,0xc4,0xa1,0x7a, 0x4a,0x31,0xb3,0xf4,0x50,0xc2,0xa0,0x79,0x48,0x2f,0xb2,0xf1,0xf1,0xf1,0x91,0xff, 0xef,0xef,0xef,0xee,0x4c,0xbf,0x9c,0x73,0x44,0x2a,0xad,0xec,0x4a,0xbd,0x9a,0x72, 0x41,0x26,0xab,0xec,0xeb,0xeb,0x8a,0xfa,0xeb,0xe9,0xe9,0xe9,0x44,0xb8,0x96,0x6c, 0x3c,0x24,0xa7,0xe7,0x42,0xb6,0x93,0x6b,0x39,0x24,0xa5,0xe6,0x3f,0xb4,0x91,0x69, 0x37,0x23,0xa3,0xe5,0xe4,0xe4,0x82,0xf2,0xe2,0xe1,0xe1,0xe0,0x3e,0xb0,0x8e,0x64, 0x36,0x23,0x9f,0xdf,0x3e,0xae,0x8b,0x62,0x37,0x23,0x9d,0xde,0xdd,0xde,0x7b,0xec, 0xdd,0xdd,0xdc,0xdc,0x3e,0xaa,0x87,0x5d,0x36,0x24,0x99,0xda,0x3e,0xa8,0x84,0x5d, 0x36,0x23,0x98,0xd9,0x3e,0xa6,0x82,0x5e,0x36,0x24,0x95,0xd7,0xd7,0xd7,0x73,0xe5, 0xd7,0xd6,0xd7,0xd7,0x58,0x2e,0x2c,0x28,0x1d,0x3a,0x99,0xd9,0x58,0x2d,0x2c,0x28, 0x1d,0x3a,0x9c,0xdc,0xdc,0xdc,0x79,0xea,0xdd,0xdd,0xde,0xdd,0x58,0x2e,0x2d,0x28, 0x1d,0x3a,0xa0,0xe0,0x5b,0x2e,0x2c,0x28,0x1d,0x3a,0xa2,0xe2,0x5d,0x2e,0x2c,0x28, 0x1d,0x3a,0xa4,0xe4,0xe4,0xe5,0x81,0xf1,0xe4,0xe4,0xe3,0xe4,0x62,0x2e,0x2c,0x28, 0x1e,0x3b,0xa8,0xe6,0x64,0x2e,0x2c,0x29,0x1d,0x3e,0xaa,0xe8,0xea,0xea,0x87,0xf7, 0xea,0xea,0xea,0xeb,0x69,0x31,0x2f,0x2b,0x1d,0x43,0xaf,0xed,0x6a,0x33,0x32,0x2e, 0x1f,0x46,0xb1,0xef,0x6d,0x37,0x35,0x30,0x22,0x49,0xb3,0xf1,0xf2,0xf2,0x90,0xfe, 0xf1,0xf1,0xf1,0xf2,0x71,0x3b,0x3a,0x36,0x27,0x4d,0xb5,0xf4,0x74,0x3d,0x3c,0x38, 0x2a,0x50,0xb9,0xf5,0xf4,0xf4,0x97,0xff,0xf4,0xf4,0xf4,0xf5,0x78,0x43,0x41,0x3d, 0x30,0x54,0xbc,0xf5,0x7a,0x46,0x43,0x40,0x32,0x57,0xbe,0xf5,0x7d,0x47,0x46,0x42, 0x35,0x59,0xc1,0xf5,0xf5,0xf6,0x9e,0xff,0xf4,0xf4,0xf5,0xf4,0x81,0x4d,0x4b,0x47, 0x3a,0x5d,0xc4,0xf4,0x83,0x4f,0x4e,0x4a,0x3d,0x60,0xc6,0xf4,0xf5,0xf5,0xa5,0xff, 0xf4,0xf4,0xf5,0xf5,0x87,0x54,0x52,0x4e,0x41,0x65,0xc6,0xf4,0x8a,0x57,0x54,0x51, 0x44,0x67,0xc7,0xf5,0x8b,0x58,0x57,0x53,0x47,0x68,0xc7,0xf5,0xf5,0xf5,0xad,0xff, 0xf4,0xf4,0xf4,0xf4,0x8d,0x5a,0x58,0x53,0x46,0x68,0xc6,0xf4,0x8b,0x58,0x55,0x51, 0x43,0x66,0xc7,0xf4,0xf4,0xf4,0xa7,0xff,0xf4,0xf5,0xf5,0xf4,0x87,0x52,0x50,0x4b, 0x3f,0x60,0xc6,0xf4,0x85,0x50,0x4e,0x4a,0x3c,0x5f,0xc5,0xf5,0x82,0x4e,0x4b,0x47, 0x39,0x5d,0xc3,0xf5,0xf5,0xf5,0x9f,0xff,0xf4,0xf4,0xf4,0xf4,0x7e,0x49,0x47,0x42, 0x34,0x58,0xbe,0xf4,0x7c,0x46,0x44,0x40,0x31,0x55,0xbd,0xf4,0xf5,0xf4,0x99,0xff, 0xf4,0xf4,0xf4,0xf4,0x78,0x42,0x3f,0x3a,0x2c,0x52,0xb9,0xf4,0x76,0x3f,0x3c,0x38, 0x2a,0x4e,0xb7,0xf5,0x73,0x3d,0x3b,0x35,0x26,0x4c,0xb5,0xf3,0xf2,0xf2,0x91,0xff, 0xf0,0xf0,0xf0,0xf0,0x6e,0x38,0x35,0x30,0x21,0x47,0xb0,0xed,0x6d,0x35,0x32,0x2e, 0x1e,0x44,0xaf,0xed,0xed,0xec,0x8b,0xfa,0xeb,0xeb,0xeb,0xeb,0x68,0x2f,0x2d,0x28, 0x1d,0x40,0xac,0xe9,0x66,0x2e,0x2c,0x29,0x1d,0x3e,0xa9,0xe8,0x63,0x2d,0x2c,0x28, 0x1d,0x3a,0xa7,0xe6,0xe5,0xe5,0x82,0xf1,0xe3,0xe2,0xe3,0xe3,0x5e,0x2e,0x2c,0x29, 0x1d,0x3b,0xa2,0xe0,0x5d,0x2e,0x2d,0x28,0x1d,0x3a,0xa1,0xdf,0xe0,0xdf,0x7c,0xec, 0xdf,0xde,0xde,0xde,0x58,0x2e,0x2c,0x29,0x1d,0x3a,0x9d,0xdc,0x58,0x2e,0x2c,0x28, 0x1d,0x3b,0x9c,0xda,0x59,0x2d,0x2c,0x29,0x1d,0x3a,0x98,0xd8,0xd9,0xd8,0x72,0xe5, 0xd8,0xd8,0xd9,0xd8,0x9b,0x4a,0x18,0x15,0x30,0x8a,0xda,0xdb,0x9d,0x4a,0x18,0x15, 0x30,0x8c,0xdd,0xdd,0xde,0xde,0x7a,0xeb,0xdf,0xdf,0xe0,0xe0,0xa0,0x4a,0x17,0x14, 0x2f,0x91,0xe1,0xe2,0xa3,0x49,0x18,0x15,0x30,0x93,0xe4,0xe4,0xa4,0x4a,0x18,0x15, 0x30,0x94,0xe5,0xe5,0xe6,0xe6,0x82,0xf2,0xe6,0xe5,0xe5,0xe7,0xa9,0x4e,0x18,0x14, 0x30,0x99,0xe8,0xe9,0xab,0x51,0x18,0x15,0x30,0x9b,0xea,0xea,0xeb,0xeb,0x88,0xf7, 0xec,0xec,0xec,0xec,0xaf,0x56,0x18,0x15,0x35,0x9f,0xef,0xf0,0xb1,0x57,0x17,0x15, 0x38,0xa1,0xf1,0xf1,0xb2,0x5a,0x1b,0x16,0x3b,0xa3,0xf2,0xf3,0xf3,0xf4,0x90,0xff, 0xf3,0xf3,0xf2,0xf3,0xb7,0x5f,0x1f,0x1c,0x40,0xa7,0xf5,0xf6,0xb8,0x61,0x24,0x1f, 0x42,0xa9,0xf6,0xf6,0xf6,0xf6,0x96,0xff,0xf6,0xf6,0xf6,0xf6,0xbd,0x66,0x29,0x25, 0x48,0xae,0xf5,0xf6,0xbf,0x68,0x2b,0x29,0x4a,0xaf,0xf7,0xf7,0xc0,0x69,0x2e,0x2b, 0x4c,0xb1,0xf7,0xf7,0xf6,0xf6,0x9f,0xff,0xf5,0xf5,0xf5,0xf5,0xc5,0x6f,0x34,0x31, 0x51,0xb5,0xf6,0xf6,0xc6,0x70,0x36,0x33,0x53,0xb7,0xf6,0xf6,0xf6,0xf6,0xa4,0xff, 0xf6,0xf6,0xf6,0xf6,0xc8,0x75,0x3b,0x38,0x58,0xbc,0xf6,0xf7,0xc9,0x77,0x3d,0x3a, 0x5a,0xbc,0xf7,0xf7,0xc9,0x79,0x40,0x3d,0x5c,0xbc,0xf6,0xf7,0xf7,0xf7,0xad,0xff, 0xf6,0xf5,0xf5,0xf5,0xc9,0x7a,0x41,0x3d,0x5c,0xbb,0xf5,0xf6,0xc9,0x78,0x3f,0x3a, 0x59,0xbc,0xf6,0xf6,0xf6,0xf6,0xa7,0xff,0xf6,0xf6,0xf6,0xf6,0xc8,0x73,0x39,0x36, 0x55,0xb8,0xf6,0xf7,0xc7,0x72,0x36,0x34,0x54,0xb6,0xf7,0xf7,0xc5,0x70,0x34,0x30, 0x50,0xb4,0xf7,0xf7,0xf7,0xf7,0x9f,0xff,0xf5,0xf5,0xf5,0xf5,0xc2,0x6b,0x2f,0x2b, 0x4c,0xb0,0xf5,0xf6,0xbf,0x68,0x2d,0x28,0x49,0xae,0xf6,0xf6,0xf6,0xf6,0x99,0xff, 0xf6,0xf6,0xf6,0xf6,0xbc,0x65,0x26,0x22,0x44,0xaa,0xf6,0xf7,0xbb,0x62,0x23,0x20, 0x42,0xa8,0xf6,0xf6,0xb8,0x60,0x21,0x1d,0x3e,0xa6,0xf6,0xf4,0xf4,0xf5,0x91,0xff, 0xf1,0xf2,0xf1,0xf1,0xb5,0x5c,0x1c,0x17,0x3b,0xa3,0xef,0xf0,0xb2,0x58,0x18,0x15, 0x38,0x9f,0xee,0xee,0xef,0xee,0x8b,0xf9,0xec,0xed,0xed,0xed,0xae,0x54,0x18,0x15, 0x32,0x9c,0xeb,0xeb,0xac,0x52,0x18,0x15,0x30,0x99,0xe9,0xea,0xaa,0x4f,0x17,0x14, 0x30,0x97,0xe8,0xe8,0xe7,0xe7,0x82,0xf1,0xe5,0xe4,0xe4,0xe4,0xa6,0x4b,0x18,0x15, 0x30,0x94,0xe2,0xe3,0xa5,0x4a,0x17,0x15,0x30,0x92,0xe1,0xe1,0xe2,0xe1,0x7b,0xec, 0xe0,0xe0,0xdf,0xe0,0xa0,0x49,0x18,0x14,0x2f,0x8d,0xde,0xdf,0x9e,0x4a,0x17,0x15, 0x2f,0x8c,0xdc,0xdc,0x9c,0x49,0x17,0x14,0x2f,0x89,0xda,0xda,0xdb,0xda,0x72,0xe5, 0xd9,0xdb,0xdb,0xdb,0xdb,0xdb,0x74,0xe6,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x76,0xe8, 0xde,0xdf,0xdf,0xe0,0xe0,0xe0,0x79,0xeb,0xe0,0xe0,0xe1,0xe1,0xe1,0xe2,0x7b,0xec, 0xe2,0xe4,0xe4,0xe4,0xe3,0xe5,0x7d,0xee,0xe4,0xe5,0xe6,0xe5,0xe5,0xe6,0x80,0xef, 0xe7,0xe7,0xe7,0xe7,0xe8,0xe8,0x81,0xf2,0xe7,0xe8,0xe7,0xe8,0xe8,0xe8,0x84,0xf4, 0xe9,0xea,0xea,0xea,0xea,0xeb,0x86,0xf6,0xec,0xec,0xec,0xec,0xec,0xed,0x87,0xf8, 0xed,0xee,0xee,0xee,0xee,0xef,0x8a,0xf9,0xef,0xf1,0xf1,0xf1,0xf0,0xf1,0x8c,0xfb, 0xf1,0xf3,0xf3,0xf2,0xf3,0xf3,0x8e,0xfd,0xf4,0xf4,0xf4,0xf4,0xf6,0xf5,0x90,0xff, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0x92,0xff,0xf7,0xf7,0xf6,0xf7,0xf7,0xf7,0x95,0xff, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x96,0xff,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x98,0xff, 0xf6,0xf8,0xf7,0xf8,0xf7,0xf8,0x9b,0xff,0xf7,0xf8,0xf8,0xf8,0xf8,0xf8,0x9d,0xff, 0xf7,0xf8,0xf8,0xf8,0xf8,0xf8,0x9f,0xff,0xf6,0xf7,0xf7,0xf6,0xf7,0xf7,0xa1,0xff, 0xf7,0xf7,0xf6,0xf7,0xf7,0xf7,0xa3,0xff,0xf6,0xf7,0xf6,0xf7,0xf7,0xf7,0xa4,0xff, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xa7,0xff,0xf7,0xf7,0xf8,0xf8,0xf7,0xf7,0xa9,0xff, 0xf8,0xf8,0xf8,0xf7,0xf8,0xf7,0xaa,0xff,0xf8,0xf8,0xf8,0xf8,0xf7,0xf7,0xae,0xff, 0xf6,0xf7,0xf6,0xf6,0xf7,0xf7,0xac,0xff,0xf6,0xf7,0xf7,0xf7,0xf6,0xf6,0xa9,0xff, 0xf7,0xf6,0xf7,0xf7,0xf7,0xf7,0xa7,0xff,0xf6,0xf7,0xf7,0xf7,0xf7,0xf7,0xa5,0xff, 0xf7,0xf8,0xf7,0xf8,0xf6,0xf8,0xa3,0xff,0xf8,0xf8,0xf8,0xf8,0xf7,0xf8,0xa1,0xff, 0xf8,0xf7,0xf8,0xf7,0xf8,0xf7,0x9f,0xff,0xf7,0xf6,0xf7,0xf7,0xf6,0xf7,0x9d,0xff, 0xf6,0xf7,0xf7,0xf6,0xf7,0xf7,0x9b,0xff,0xf7,0xf7,0xf7,0xf7,0xf7,0xf6,0x99,0xff, 0xf6,0xf7,0xf7,0xf7,0xf7,0xf7,0x97,0xff,0xf7,0xf8,0xf8,0xf7,0xf7,0xf8,0x95,0xff, 0xf8,0xf7,0xf7,0xf8,0xf7,0xf8,0x93,0xff,0xf7,0xf7,0xf7,0xf6,0xf6,0xf6,0x91,0xfe, 0xf3,0xf4,0xf3,0xf2,0xf3,0xf3,0x8e,0xfd,0xf3,0xf2,0xf1,0xf1,0xf2,0xf1,0x8c,0xfb, 0xf1,0xf1,0xf0,0xf0,0xf0,0xf0,0x8a,0xf9,0xee,0xee,0xef,0xee,0xed,0xee,0x89,0xf7, 0xed,0xed,0xee,0xed,0xec,0xed,0x86,0xf6,0xec,0xec,0xeb,0xeb,0xeb,0xea,0x84,0xf3, 0xeb,0xe9,0xea,0xea,0xe9,0xe9,0x82,0xf1,0xe6,0xe7,0xe6,0xe5,0xe5,0xe5,0x80,0xef, 0xe6,0xe5,0xe4,0xe5,0xe5,0xe4,0x7d,0xed,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0x7c,0xec, 0xe2,0xe1,0xe1,0xe1,0xe1,0xe0,0x79,0xea,0xdf,0xe0,0xe0,0xe0,0xde,0xe0,0x78,0xe7, 0xdf,0xdf,0xde,0xdd,0xde,0xdd,0x74,0xe6,0xdd,0xdc,0xdc,0xdc,0xdc,0xdb,0x72,0xe5, 0xdb,0xdc,0xdd,0xdc,0xdd,0xde,0x75,0xe6,0xdf,0xde,0xde,0xdf,0xe0,0xdf,0x77,0xe9, 0xe0,0xe1,0xe0,0xe1,0xe1,0xe1,0x78,0xea,0xe2,0xe2,0xe3,0xe2,0xe3,0xe3,0x7b,0xec, 0xe5,0xe5,0xe5,0xe5,0xe5,0xe6,0x7d,0xee,0xe6,0xe7,0xe7,0xe7,0xe8,0xe7,0x7f,0xef, 0xe8,0xe8,0xe9,0xe9,0xea,0xea,0x81,0xf2,0xe8,0xe9,0xea,0xea,0xeb,0xea,0x84,0xf4, 0xeb,0xec,0xec,0xec,0xec,0xed,0x86,0xf5,0xed,0xee,0xee,0xed,0xef,0xef,0x87,0xf6, 0xef,0xef,0xef,0xf0,0xf1,0xf0,0x89,0xf9,0xf2,0xf2,0xf2,0xf3,0xf1,0xf2,0x8d,0xfb, 0xf3,0xf5,0xf4,0xf4,0xf4,0xf5,0x8e,0xfc,0xf6,0xf6,0xf6,0xf6,0xf7,0xf7,0x90,0xff, 0xf6,0xf6,0xf7,0xf6,0xf8,0xf7,0x91,0xff,0xf9,0xf9,0xf9,0xf9,0xf9,0xf8,0x95,0xff, 0xf9,0xf8,0xf8,0xf8,0xf9,0xf9,0x97,0xff,0xf9,0xf9,0xf8,0xf9,0xf9,0xf9,0x98,0xff, 0xf9,0xf9,0xf9,0xf9,0xf8,0xf9,0x9a,0xff,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0x9c,0xff, 0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0x9f,0xff,0xf8,0xf7,0xf9,0xf8,0xf9,0xf9,0xa1,0xff, 0xf9,0xf9,0xf9,0xf8,0xf8,0xf8,0xa4,0xff,0xf9,0xf9,0xf8,0xf8,0xf9,0xf9,0xa4,0xff, 0xf9,0xf8,0xf8,0xf8,0xf9,0xf9,0xa7,0xff,0xf9,0xfa,0xf9,0xfa,0xf8,0xf9,0xa9,0xff, 0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xaa,0xff,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xad,0xff, 0xf7,0xf8,0xf9,0xf7,0xf9,0xf9,0xac,0xff,0xf8,0xf9,0xf9,0xf8,0xf9,0xf9,0xa9,0xff, 0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xa7,0xff,0xf9,0xf8,0xf8,0xf8,0xf9,0xf8,0xa5,0xff, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xa3,0xff,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xa2,0xff, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x9f,0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x9d,0xff, 0xf9,0xf8,0xf9,0xf8,0xf8,0xf8,0x9b,0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf9,0x99,0xff, 0xf9,0xf9,0xf8,0xf8,0xf9,0xf8,0x96,0xff,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x95,0xff, 0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0x93,0xff,0xf8,0xf9,0xf9,0xf8,0xf8,0xf8,0x91,0xff, 0xf5,0xf5,0xf6,0xf4,0xf5,0xf6,0x8f,0xfd,0xf4,0xf4,0xf3,0xf4,0xf3,0xf2,0x8c,0xfb, 0xf3,0xf2,0xf2,0xf1,0xf1,0xf1,0x8b,0xf9,0xf0,0xf0,0xf0,0xf0,0xf0,0xef,0x89,0xf7, 0xef,0xef,0xef,0xee,0xed,0xef,0x85,0xf5,0xee,0xed,0xed,0xec,0xec,0xec,0x84,0xf3, 0xeb,0xec,0xeb,0xec,0xea,0xea,0x82,0xf2,0xe8,0xe8,0xe8,0xe7,0xe8,0xe8,0x80,0xef, 0xe7,0xe7,0xe6,0xe6,0xe6,0xe6,0x7d,0xed,0xe6,0xe5,0xe4,0xe4,0xe5,0xe3,0x7b,0xec, 0xe4,0xe3,0xe3,0xe3,0xe3,0xe2,0x79,0xea,0xe2,0xe2,0xe2,0xe2,0xe0,0xe1,0x78,0xe7, 0xe0,0xe0,0xe0,0xe0,0xdf,0xdf,0x75,0xe6,0xdf,0xdf,0xde,0xdd,0xde,0xdd,0x73,0xe5, 0xde,0xde,0xde,0xdf,0xdf,0xdf,0x75,0xe6,0xe1,0xe0,0xe1,0xe0,0xe1,0xe2,0x76,0xe9, 0xe2,0xe2,0xe2,0xe3,0xe3,0xe2,0x79,0xea,0xe3,0xe4,0xe5,0xe5,0xe5,0xe5,0x7c,0xec, 0xe6,0xe7,0xe7,0xe7,0xe7,0xe8,0x7d,0xee,0xe8,0xe9,0xe9,0xe8,0xe9,0xea,0x7f,0xef, 0xeb,0xeb,0xea,0xeb,0xeb,0xeb,0x81,0xf1,0xec,0xeb,0xeb,0xec,0xec,0xec,0x84,0xf3, 0xed,0xed,0xee,0xee,0xee,0xef,0x86,0xf5,0xee,0xef,0xef,0xef,0xf0,0xf0,0x88,0xf7, 0xf1,0xf1,0xf2,0xf3,0xf2,0xf2,0x8a,0xf9,0xf4,0xf3,0xf4,0xf4,0xf4,0xf5,0x8c,0xfb, 0xf5,0xf6,0xf6,0xf6,0xf6,0xf7,0x8e,0xfd,0xf8,0xf8,0xf8,0xf7,0xf9,0xf8,0x90,0xff, 0xf8,0xf9,0xf9,0xf9,0xf9,0xfa,0x92,0xff,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0x95,0xff, 0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x97,0xff,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0x98,0xff, 0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x9a,0xff,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x9d,0xff, 0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x9e,0xff,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xa0,0xff, 0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xa3,0xff,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xa5,0xff, 0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xa7,0xff,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xa9,0xff, 0xfa,0xfa,0xfa,0xfb,0xfa,0xfb,0xaa,0xff,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xad,0xff, 0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xab,0xff,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xa9,0xff, 0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xa7,0xff,0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0xa5,0xff, 0xfa,0xfa,0xfa,0xfa,0xfa,0xfb,0xa3,0xff,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xa2,0xff, 0xfa,0xfa,0xfa,0xfb,0xfa,0xfa,0x9f,0xff,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x9d,0xff, 0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x9b,0xff,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0x99,0xff, 0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0x97,0xff,0xfa,0xfb,0xfb,0xfa,0xfb,0xfa,0x95,0xff, 0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x93,0xff,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0x91,0xfe, 0xf8,0xf7,0xf8,0xf6,0xf7,0xf7,0x8f,0xfd,0xf6,0xf6,0xf5,0xf5,0xf5,0xf4,0x8d,0xfa, 0xf4,0xf3,0xf4,0xf3,0xf3,0xf3,0x8a,0xfa,0xf2,0xf2,0xf3,0xf2,0xf1,0xf2,0x88,0xf7, 0xf1,0xf1,0xf1,0xf0,0xf1,0xf0,0x86,0xf5,0xef,0xf0,0xef,0xef,0xee,0xee,0x84,0xf3, 0xee,0xed,0xed,0xed,0xec,0xec,0x82,0xf1,0xeb,0xeb,0xeb,0xe9,0xe9,0xea,0x80,0xef, 0xe9,0xe8,0xe8,0xe8,0xe7,0xe8,0x7d,0xed,0xe6,0xe7,0xe6,0xe6,0xe6,0xe6,0x7b,0xec, 0xe6,0xe5,0xe6,0xe5,0xe4,0xe4,0x7a,0xea,0xe4,0xe3,0xe4,0xe4,0xe2,0xe3,0x77,0xe8, 0xe2,0xe2,0xe2,0xe1,0xe1,0xe2,0x75,0xe6,0xe1,0xe0,0xdf,0xdf,0xdf,0xde,0x73,0xe5, 0xdf,0xe0,0xe1,0xe0,0xe0,0xe1,0x74,0xe6,0xe1,0xe2,0xe2,0xe2,0xe2,0xe3,0x77,0xe8, 0xe4,0xe4,0xe4,0xe6,0xe4,0xe4,0x79,0xeb,0xe6,0xe6,0xe6,0xe7,0xe7,0xe7,0x7b,0xec, 0xe7,0xe8,0xe9,0xe9,0xe9,0xea,0x7d,0xed,0xe9,0xea,0xea,0xea,0xeb,0xeb,0x7f,0xef, 0xec,0xed,0xec,0xed,0xed,0xed,0x81,0xf2,0xed,0xed,0xee,0xee,0xee,0xee,0x84,0xf4, 0xef,0xf0,0xf0,0xef,0xf0,0xf1,0x86,0xf5,0xf1,0xf1,0xf1,0xf2,0xf2,0xf1,0x88,0xf8, 0xf3,0xf3,0xf3,0xf5,0xf4,0xf5,0x8a,0xf9,0xf5,0xf5,0xf6,0xf6,0xf6,0xf6,0x8c,0xfb, 0xf7,0xf7,0xf8,0xf7,0xf8,0xf9,0x8e,0xfd,0xfa,0xfa,0xf9,0xfa,0xfa,0xfb,0x90,0xff, 0xfa,0xfa,0xfa,0xfa,0xfa,0xfb,0x92,0xff,0xfb,0xfa,0xfb,0xfa,0xfb,0xfb,0x95,0xff, 0xfb,0xfb,0xfb,0xfc,0xfb,0xfb,0x97,0xff,0xfc,0xfc,0xfb,0xfc,0xfc,0xfc,0x98,0xff, 0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x9a,0xff,0xfb,0xfc,0xfc,0xfc,0xfc,0xfc,0x9d,0xff, 0xfb,0xfc,0xfc,0xfc,0xfb,0xfc,0x9f,0xff,0xfb,0xfa,0xfb,0xfb,0xfb,0xfb,0xa0,0xff, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xa3,0xff,0xfb,0xfb,0xfb,0xfc,0xfb,0xfb,0xa5,0xff, 0xfc,0xfb,0xfb,0xfc,0xfc,0xfb,0xa7,0xff,0xfc,0xfb,0xfc,0xfc,0xfb,0xfc,0xa8,0xff, 0xfc,0xfc,0xfc,0xfc,0xfb,0xfc,0xab,0xff,0xfc,0xfc,0xfc,0xfc,0xfb,0xfb,0xad,0xff, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xac,0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xa9,0xff, 0xfb,0xfb,0xfb,0xfc,0xfa,0xfb,0xa7,0xff,0xfb,0xfc,0xfb,0xfc,0xfc,0xfb,0xa5,0xff, 0xfc,0xfb,0xfb,0xfb,0xfc,0xfc,0xa4,0xff,0xfc,0xfb,0xfc,0xfb,0xfc,0xfc,0xa2,0xff, 0xfc,0xfb,0xfb,0xfb,0xfc,0xfc,0x9f,0xff,0xfb,0xfb,0xfb,0xfa,0xfb,0xfb,0x9d,0xff, 0xfb,0xfb,0xfb,0xfb,0xfa,0xfb,0x9b,0xff,0xfb,0xfb,0xfb,0xfc,0xfb,0xfb,0x9a,0xff, 0xfc,0xfc,0xfb,0xfc,0xfb,0xfc,0x97,0xff,0xfc,0xfc,0xfc,0xfb,0xfc,0xfb,0x94,0xff, 0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x92,0xff,0xfc,0xfc,0xfc,0xfc,0xfb,0xfb,0x91,0xff, 0xf9,0xf9,0xf8,0xf9,0xf8,0xf8,0x8e,0xfc,0xf8,0xf7,0xf7,0xf7,0xf7,0xf5,0x8c,0xfb, 0xf6,0xf5,0xf5,0xf6,0xf5,0xf4,0x8b,0xf9,0xf5,0xf4,0xf3,0xf4,0xf3,0xf4,0x89,0xf7, 0xf3,0xf3,0xf1,0xf2,0xf2,0xf2,0x86,0xf5,0xf1,0xf0,0xf0,0xf0,0xf0,0xef,0x84,0xf4, 0xee,0xf0,0xee,0xef,0xee,0xee,0x82,0xf2,0xec,0xec,0xec,0xeb,0xeb,0xeb,0x80,0xef, 0xea,0xea,0xe9,0xe9,0xe9,0xe9,0x7d,0xee,0xe9,0xe9,0xe8,0xe9,0xe8,0xe7,0x7b,0xec, 0xe8,0xe7,0xe7,0xe7,0xe7,0xe6,0x79,0xea,0xe5,0xe6,0xe6,0xe5,0xe5,0xe4,0x78,0xe8, 0xe4,0xe4,0xe3,0xe3,0xe3,0xe3,0x75,0xe6,0xe2,0xe3,0xe1,0xe2,0xe2,0xe0,0x72,0xe4, 0xe1,0xe1,0xe2,0xe2,0xe2,0xe2,0x74,0xe6,0xe3,0xe3,0xe3,0xe3,0xe5,0xe5,0x77,0xe8, 0xe5,0xe5,0xe5,0xe6,0xe7,0xe7,0x79,0xeb,0xe8,0xe8,0xe9,0xe8,0xe9,0xe9,0x7b,0xec, 0xea,0xea,0xeb,0xea,0xeb,0xeb,0x7d,0xee,0xeb,0xec,0xec,0xec,0xed,0xed,0x7f,0xef, 0xef,0xed,0xee,0xef,0xef,0xef,0x81,0xf2,0xef,0xee,0xef,0xef,0xef,0xef,0x84,0xf3, 0xf0,0xf1,0xf1,0xf1,0xf1,0xf2,0x86,0xf5,0xf2,0xf3,0xf2,0xf3,0xf4,0xf4,0x87,0xf6, 0xf5,0xf5,0xf5,0xf5,0xf6,0xf6,0x8b,0xfa,0xf6,0xf7,0xf8,0xf7,0xf7,0xf8,0x8c,0xfb, 0xf8,0xf9,0xf9,0xfa,0xf9,0xfa,0x8e,0xfc,0xfc,0xfb,0xfb,0xfc,0xfd,0xfd,0x90,0xff, 0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x92,0xff,0xfc,0xfc,0xfc,0xfb,0xfc,0xfc,0x94,0xff, 0xfb,0xfc,0xfc,0xfc,0xfc,0xfc,0x97,0xff,0xfd,0xfc,0xfc,0xfc,0xfc,0xfd,0x98,0xff, 0xfd,0xfd,0xfd,0xfc,0xfd,0xfc,0x9b,0xff,0xfd,0xfc,0xfd,0xfd,0xfc,0xfc,0x9d,0xff, 0xfd,0xfd,0xfe,0xfc,0xfd,0xfd,0x9e,0xff,0xfb,0xfb,0xfc,0xfc,0xfc,0xfb,0xa1,0xff, 0xfc,0xfb,0xfc,0xfc,0xfc,0xfc,0xa3,0xff,0xfc,0xfc,0xfc,0xfb,0xfc,0xfc,0xa6,0xff, 0xfd,0xfd,0xfc,0xfc,0xfd,0xfd,0xa7,0xff,0xfd,0xfd,0xfc,0xfd,0xfd,0xfd,0xa9,0xff, 0xfc,0xfd,0xfd,0xfd,0xfc,0xfd,0xaa,0xff,0xfe,0xfc,0xfd,0xfc,0xfd,0xfd,0xad,0xff, 0xfc,0xfc,0xfc,0xfb,0xfc,0xfc,0xab,0xff,0xfc,0xfb,0xfc,0xfc,0xfc,0xfc,0xa9,0xff, 0xfc,0xfb,0xfc,0xfb,0xfc,0xfc,0xa7,0xff,0xfd,0xfc,0xfc,0xfb,0xfc,0xfd,0xa5,0xff, 0xfd,0xfd,0xfc,0xfc,0xfc,0xfc,0xa4,0xff,0xfd,0xfc,0xfd,0xfc,0xfd,0xfc,0xa1,0xff, 0xfd,0xfc,0xfd,0xfc,0xfe,0xfd,0x9f,0xff,0xfc,0xfc,0xfc,0xfb,0xfb,0xfb,0x9d,0xff, 0xfc,0xfc,0xfb,0xfc,0xfc,0xfc,0x9b,0xff,0xfb,0xfc,0xfb,0xfc,0xfc,0xfd,0x9a,0xff, 0xfd,0xfc,0xfc,0xfc,0xfc,0xfd,0x97,0xff,0xfc,0xfc,0xfd,0xfd,0xfc,0xfc,0x95,0xff, 0xfc,0xfd,0xfc,0xfd,0xfd,0xfc,0x93,0xff,0xfd,0xfd,0xfe,0xfd,0xfd,0xfd,0x91,0xfe, 0xfb,0xfb,0xfa,0xfa,0xfa,0xfa,0x8f,0xfc,0xf9,0xfa,0xf8,0xf9,0xf8,0xf8,0x8c,0xfb, 0xf6,0xf7,0xf7,0xf7,0xf6,0xf6,0x8b,0xfa,0xf6,0xf6,0xf6,0xf4,0xf5,0xf6,0x88,0xf7, 0xf4,0xf4,0xf3,0xf3,0xf4,0xf3,0x86,0xf5,0xf3,0xf3,0xf1,0xf2,0xf2,0xf1,0x84,0xf4, 0xf1,0xf0,0xf1,0xf0,0xf1,0xf0,0x82,0xf1,0xee,0xee,0xee,0xec,0xed,0xed,0x7f,0xf0, 0xec,0xec,0xec,0xeb,0xeb,0xeb,0x7d,0xee,0xeb,0xea,0xea,0xea,0xe9,0xea,0x7b,0xec, 0xea,0xe8,0xe9,0xe8,0xe8,0xe8,0x79,0xea,0xe7,0xe7,0xe7,0xe6,0xe6,0xe6,0x77,0xe8, 0xe6,0xe5,0xe6,0xe5,0xe4,0xe4,0x74,0xe6,0xe4,0xe4,0xe4,0xe3,0xe4,0xe3,0x72,0xe4, 0xe3,0xe3,0xe4,0xe4,0xe3,0xe5,0x74,0xe6,0xe6,0xe5,0xe5,0xe6,0xe6,0xe7,0x76,0xe9, 0xe7,0xe7,0xe7,0xe8,0xe8,0xe9,0x79,0xeb,0xe9,0xeb,0xea,0xeb,0xea,0xeb,0x7b,0xec, 0xeb,0xec,0xec,0xec,0xec,0xed,0x7d,0xee,0xed,0xed,0xed,0xed,0xee,0xef,0x80,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf1,0xf1,0x82,0xf2,0xf0,0xf0,0xf1,0xf1,0xf1,0xf1,0x84,0xf3, 0xf2,0xf3,0xf3,0xf2,0xf3,0xf4,0x86,0xf5,0xf4,0xf4,0xf4,0xf4,0xf6,0xf6,0x88,0xf7, 0xf7,0xf7,0xf7,0xf8,0xf8,0xf8,0x8a,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0x8d,0xfb, 0xfa,0xfb,0xfa,0xfb,0xfc,0xfc,0x8e,0xfd,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x90,0xff, 0xfe,0xfd,0xfd,0xfe,0xfd,0xfd,0x92,0xff,0xfe,0xfd,0xfd,0xfd,0xfd,0xfd,0x95,0xff, 0xfd,0xfd,0xfd,0xfe,0xff,0xfe,0x97,0xff,0xfe,0xff,0xfe,0xfe,0xfe,0xfe,0x99,0xff, 0xfe,0xff,0xfe,0xfe,0xff,0xff,0x9a,0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xff,0x9d,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0x9f,0xff,0xfd,0xfe,0xfd,0xfd,0xfd,0xfd,0xa1,0xff, 0xfd,0xfd,0xfd,0xfe,0xfe,0xfe,0xa3,0xff,0xfe,0xfe,0xfe,0xfd,0xfe,0xfe,0xa5,0xff, 0xfe,0xff,0xfe,0xfe,0xfe,0xff,0xa7,0xff,0xff,0xfe,0xfe,0xff,0xfe,0xff,0xa9,0xff, 0xff,0xfe,0xfe,0xfe,0xfe,0xff,0xab,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xad,0xff, 0xfd,0xfe,0xfe,0xfd,0xfd,0xfe,0xab,0xff,0xfd,0xfe,0xfd,0xfd,0xfd,0xfe,0xa9,0xff, 0xfd,0xfd,0xfe,0xfe,0xfe,0xfe,0xa7,0xff,0xff,0xff,0xfe,0xfe,0xfe,0xff,0xa6,0xff, 0xfe,0xff,0xfe,0xfe,0xfe,0xff,0xa3,0xff,0xfe,0xfe,0xfe,0xff,0xff,0xff,0xa2,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0x9f,0xff,0xfd,0xfe,0xfd,0xfd,0xfd,0xfe,0x9d,0xff, 0xfe,0xfd,0xfe,0xfe,0xfd,0xfe,0x9b,0xff,0xfd,0xfd,0xfe,0xfd,0xfe,0xff,0x98,0xff, 0xfe,0xfe,0xfe,0xfe,0xff,0xfe,0x97,0xff,0xfe,0xfe,0xfe,0xff,0xfe,0xff,0x94,0xff, 0xfe,0xff,0xfe,0xfe,0xfe,0xff,0x93,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x91,0xff, 0xfd,0xfc,0xfc,0xfc,0xfc,0xfc,0x8e,0xfd,0xfb,0xfb,0xfa,0xfa,0xfa,0xfa,0x8c,0xfb, 0xf9,0xf8,0xf8,0xf8,0xf9,0xf8,0x8b,0xf9,0xf8,0xf8,0xf8,0xf7,0xf6,0xf7,0x88,0xf6, 0xf5,0xf6,0xf6,0xf5,0xf5,0xf5,0x86,0xf5,0xf4,0xf4,0xf3,0xf4,0xf4,0xf3,0x84,0xf4, 0xf2,0xf3,0xf3,0xf3,0xf2,0xf2,0x82,0xf1,0xef,0xf0,0xf0,0xef,0xef,0xef,0x80,0xf0, 0xed,0xed,0xed,0xed,0xed,0xed,0x7d,0xee,0xec,0xec,0xeb,0xeb,0xec,0xec,0x7b,0xec, 0xeb,0xea,0xea,0xea,0xea,0xea,0x79,0xea,0xe9,0xe9,0xe8,0xe9,0xe7,0xe8,0x77,0xe8, 0xe7,0xe7,0xe7,0xe6,0xe6,0xe7,0x75,0xe7,0xe7,0xe6,0xe5,0xe5,0xe6,0xe5,0x72,0xe5, 0xe4,0xe5,0xe5,0xe6,0xe5,0xe7,0x75,0xe6,0xe7,0xe7,0xe7,0xe7,0xe8,0xe8,0x76,0xe9, 0xe9,0xe9,0xe9,0xe9,0xea,0xea,0x79,0xea,0xea,0xe9,0xec,0xeb,0xea,0xeb,0x7b,0xec, 0xeb,0xed,0xec,0xec,0xed,0xed,0x7e,0xee,0xee,0xed,0xee,0xed,0xee,0xef,0x7f,0xef, 0xf0,0xf0,0xef,0xf0,0xf0,0xf0,0x81,0xf2,0xf2,0xf2,0xf3,0xf3,0xf3,0xf3,0x84,0xf3, 0xf4,0xf4,0xf4,0xf5,0xf4,0xf5,0x86,0xf5,0xf6,0xf6,0xf6,0xf6,0xf7,0xf7,0x88,0xf6, 0xf7,0xf7,0xf8,0xf9,0xf7,0xf8,0x8a,0xfa,0xf8,0xf9,0xf9,0xf9,0xfa,0xfa,0x8c,0xfb, 0xfa,0xfb,0xfb,0xfb,0xfb,0xfb,0x8e,0xfc,0xfd,0xfc,0xfd,0xfd,0xfd,0xfd,0x90,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0x92,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x94,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0x97,0xff,0xff,0xfe,0xff,0xff,0xfe,0xff,0x98,0xff, 0xfe,0xff,0xfe,0xfe,0xfe,0xfe,0x9a,0xff,0xfe,0xff,0xfe,0xfe,0xfe,0xfe,0x9d,0xff, 0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x9f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xa1,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xa2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xa5,0xff, 0xff,0xfe,0xff,0xff,0xfe,0xff,0xa7,0xff,0xfe,0xff,0xff,0xfe,0xff,0xff,0xa9,0xff, 0xfe,0xfe,0xff,0xfe,0xfe,0xff,0xab,0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xff,0xad,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xab,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xa9,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xa7,0xff,0xff,0xfe,0xff,0xff,0xfe,0xff,0xa5,0xff, 0xff,0xff,0xfe,0xfe,0xfe,0xfe,0xa4,0xff,0xff,0xfe,0xfe,0xfe,0xff,0xff,0xa2,0xff, 0xfe,0xfe,0xff,0xfe,0xff,0xff,0x9f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x9d,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0x9b,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x98,0xff, 0xff,0xfe,0xff,0xff,0xff,0xfe,0x97,0xff,0xfe,0xff,0xfe,0xfe,0xff,0xff,0x95,0xff, 0xff,0xff,0xff,0xfe,0xff,0xfe,0x93,0xff,0xfe,0xff,0xfe,0xfe,0xfe,0xfe,0x91,0xfe, 0xfe,0xfe,0xfe,0xfd,0xfd,0xfd,0x8f,0xfc,0xfd,0xfd,0xfc,0xfc,0xfc,0xfb,0x8d,0xfb, 0xfb,0xfa,0xfb,0xfa,0xf9,0xf9,0x8b,0xf9,0xf8,0xf8,0xf9,0xf8,0xf7,0xf7,0x88,0xf7, 0xf6,0xf7,0xf5,0xf5,0xf5,0xf5,0x85,0xf5,0xf4,0xf4,0xf3,0xf3,0xf4,0xf3,0x83,0xf4, 0xf1,0xf2,0xf2,0xf1,0xf1,0xf1,0x82,0xf1,0xf1,0xf1,0xf0,0xf0,0xf1,0xf0,0x80,0xef, 0xef,0xf0,0xee,0xef,0xef,0xef,0x7d,0xee,0xee,0xee,0xed,0xed,0xed,0xec,0x7b,0xec, 0xec,0xea,0xeb,0xeb,0xe9,0xea,0x79,0xea,0xe9,0xe9,0xe9,0xe8,0xe8,0xe8,0x78,0xe8, 0xe7,0xe7,0xe6,0xe6,0xe7,0xe6,0x75,0xe6,0xe5,0xe4,0xe4,0xe4,0xe5,0xe4,0x73,0xe4, 0xe2,0xe3,0xe4,0xe3,0xe4,0xe4,0x74,0xe6,0xe5,0xe5,0xe5,0xe6,0xe6,0xe6,0x77,0xe8, 0xe7,0xe7,0xe7,0xe8,0xe7,0xe8,0x79,0xea,0xe9,0xe8,0xe9,0xe8,0xe9,0xe9,0x7b,0xec, 0xea,0xeb,0xeb,0xea,0xeb,0xeb,0x7d,0xed,0xec,0xec,0xec,0xec,0xed,0xed,0x7f,0xf0, 0xee,0xee,0xee,0xee,0xee,0xed,0x81,0xf1,0xf0,0xf1,0xf1,0xf1,0xf1,0xf1,0x84,0xf4, 0xf2,0xf3,0xf3,0xf2,0xf3,0xf3,0x86,0xf5,0xf4,0xf4,0xf5,0xf4,0xf4,0xf5,0x88,0xf7, 0xf6,0xf5,0xf6,0xf6,0xf7,0xf6,0x89,0xf9,0xf7,0xf7,0xf8,0xf8,0xf8,0xf9,0x8d,0xfb, 0xf8,0xf9,0xfa,0xfa,0xfa,0xfb,0x8f,0xfc,0xfb,0xfb,0xfb,0xfa,0xfa,0xfb,0x90,0xff, 0xfe,0xfd,0xfd,0xfe,0xfe,0xfd,0x92,0xff,0xfe,0xfd,0xfe,0xfe,0xfd,0xfe,0x94,0xff, 0xfd,0xfe,0xfe,0xfd,0xfc,0xfd,0x97,0xff,0xfd,0xfc,0xfd,0xfc,0xfe,0xfc,0x99,0xff, 0xfd,0xfd,0xfc,0xfc,0xfd,0xfd,0x9a,0xff,0xfc,0xfd,0xfc,0xfd,0xfc,0xfc,0x9d,0xff, 0xfd,0xfc,0xfd,0xfc,0xfc,0xfc,0x9f,0xff,0xfe,0xfd,0xfd,0xfe,0xfe,0xfd,0xa0,0xff, 0xfd,0xfd,0xfd,0xfe,0xfd,0xfd,0xa3,0xff,0xfd,0xfd,0xfe,0xfe,0xfd,0xfe,0xa5,0xff, 0xfd,0xfd,0xfd,0xfd,0xfd,0xfc,0xa7,0xff,0xfc,0xfc,0xfc,0xfd,0xfc,0xfc,0xa9,0xff, 0xfd,0xfc,0xfc,0xfd,0xfd,0xfd,0xab,0xff,0xfd,0xfc,0xfd,0xfb,0xfc,0xfc,0xae,0xff, 0xfd,0xfe,0xfd,0xfe,0xfd,0xfd,0xac,0xff,0xfd,0xfe,0xfd,0xfd,0xfd,0xfe,0xa9,0xff, 0xfd,0xfe,0xfe,0xfd,0xfd,0xfd,0xa6,0xff,0xfd,0xfd,0xfe,0xfd,0xfd,0xfc,0xa5,0xff, 0xfd,0xfd,0xfc,0xfd,0xfd,0xfd,0xa4,0xff,0xfd,0xfc,0xfd,0xfd,0xfd,0xfd,0xa2,0xff, 0xfd,0xfd,0xfd,0xfc,0xfc,0xfc,0x9e,0xff,0xfd,0xfe,0xfd,0xfe,0xfd,0xfd,0x9d,0xff, 0xfd,0xfe,0xfd,0xfd,0xfd,0xfe,0x9b,0xff,0xfd,0xfd,0xfd,0xfe,0xfd,0xfd,0x98,0xff, 0xfd,0xfd,0xfe,0xfd,0xfe,0xfc,0x97,0xff,0xfc,0xfd,0xfc,0xfc,0xfc,0xfc,0x95,0xff, 0xfd,0xfd,0xfc,0xfc,0xfc,0xfd,0x93,0xff,0xfc,0xfc,0xfd,0xfc,0xfb,0xfc,0x91,0xfe, 0xfd,0xfd,0xfc,0xfc,0xfc,0xfb,0x8f,0xfd,0xfb,0xfa,0xfa,0xfa,0xfa,0xf9,0x8d,0xfb, 0xf9,0xf8,0xf9,0xf8,0xf7,0xf7,0x8b,0xfa,0xf6,0xf6,0xf7,0xf6,0xf6,0xf5,0x89,0xf7, 0xf4,0xf4,0xf4,0xf4,0xf3,0xf4,0x86,0xf5,0xf3,0xf2,0xf2,0xf2,0xf2,0xf1,0x84,0xf3, 0xf0,0xf1,0xf0,0xee,0xef,0xee,0x82,0xf2,0xf0,0xef,0xee,0xee,0xee,0xef,0x7f,0xef, 0xee,0xee,0xed,0xec,0xed,0xed,0x7d,0xee,0xec,0xec,0xeb,0xec,0xea,0xea,0x7b,0xec, 0xea,0xe9,0xe9,0xe9,0xe9,0xe8,0x79,0xea,0xe7,0xe7,0xe7,0xe6,0xe7,0xe6,0x77,0xe8, 0xe5,0xe5,0xe5,0xe4,0xe4,0xe4,0x75,0xe7,0xe3,0xe3,0xe3,0xe2,0xe2,0xe2,0x72,0xe4, 0xe1,0xe3,0xe2,0xe2,0xe3,0xe3,0x75,0xe6,0xe4,0xe3,0xe4,0xe4,0xe5,0xe5,0x76,0xe9, 0xe5,0xe5,0xe5,0xe6,0xe5,0xe6,0x78,0xeb,0xe6,0xe6,0xe7,0xe7,0xe8,0xe8,0x7b,0xec, 0xe7,0xe9,0xe8,0xe9,0xea,0xe9,0x7d,0xee,0xea,0xea,0xea,0xea,0xeb,0xeb,0x7f,0xef, 0xec,0xeb,0xeb,0xec,0xec,0xed,0x81,0xf2,0xef,0xef,0xef,0xef,0xf0,0xef,0x84,0xf4, 0xf0,0xf1,0xf1,0xf1,0xf1,0xf2,0x85,0xf5,0xf3,0xf2,0xf3,0xf3,0xf3,0xf4,0x88,0xf7, 0xf3,0xf3,0xf5,0xf4,0xf5,0xf4,0x8a,0xf9,0xf6,0xf5,0xf6,0xf6,0xf6,0xf6,0x8d,0xfb, 0xf7,0xf8,0xf7,0xf8,0xf8,0xf9,0x8e,0xfc,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0x90,0xff, 0xfb,0xfd,0xfc,0xfc,0xfc,0xfc,0x92,0xff,0xfb,0xfc,0xfc,0xfc,0xfc,0xfc,0x95,0xff, 0xfc,0xfc,0xfc,0xfb,0xfb,0xfc,0x96,0xff,0xfc,0xfb,0xfc,0xfb,0xfc,0xfc,0x99,0xff, 0xfc,0xfc,0xfb,0xfc,0xfc,0xfc,0x9a,0xff,0xfc,0xfb,0xfb,0xfc,0xfc,0xfc,0x9d,0xff, 0xfc,0xfb,0xfb,0xfb,0xfb,0xfc,0x9f,0xff,0xfc,0xfd,0xfc,0xfc,0xfc,0xfc,0xa0,0xff, 0xfc,0xfc,0xfb,0xfb,0xfc,0xfc,0xa3,0xff,0xfc,0xfc,0xfc,0xfc,0xfb,0xfb,0xa5,0xff, 0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xa6,0xff,0xfc,0xfc,0xfb,0xfc,0xfc,0xfc,0xa9,0xff, 0xfc,0xfc,0xfc,0xfc,0xfb,0xfc,0xac,0xff,0xfc,0xfa,0xfb,0xfa,0xfb,0xfc,0xae,0xff, 0xfb,0xfc,0xfc,0xfb,0xfc,0xfb,0xab,0xff,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xa9,0xff, 0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xa7,0xff,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xa5,0xff, 0xfc,0xfb,0xfb,0xfc,0xfc,0xfc,0xa4,0xff,0xfc,0xfb,0xfc,0xfb,0xfc,0xfc,0xa1,0xff, 0xfc,0xfb,0xfa,0xfb,0xfb,0xfb,0x9f,0xff,0xfc,0xfd,0xfc,0xfc,0xfc,0xfc,0x9d,0xff, 0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x9c,0xff,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x99,0xff, 0xfb,0xfb,0xfb,0xfc,0xfc,0xfb,0x97,0xff,0xfc,0xfc,0xfb,0xfb,0xfc,0xfc,0x94,0xff, 0xfc,0xfc,0xfc,0xfc,0xfc,0xfb,0x93,0xff,0xfc,0xfb,0xfb,0xfa,0xfa,0xfb,0x91,0xfe, 0xfa,0xfc,0xfa,0xfa,0xfa,0xfa,0x8e,0xfd,0xf9,0xfa,0xf9,0xf9,0xf8,0xf8,0x8c,0xfb, 0xf7,0xf6,0xf7,0xf7,0xf5,0xf6,0x8b,0xf9,0xf4,0xf4,0xf5,0xf3,0xf4,0xf4,0x88,0xf7, 0xf2,0xf3,0xf2,0xf1,0xf2,0xf1,0x86,0xf5,0xf1,0xf0,0xf1,0xf0,0xf0,0xef,0x84,0xf4, 0xee,0xee,0xed,0xed,0xed,0xed,0x82,0xf1,0xee,0xee,0xed,0xed,0xed,0xed,0x80,0xef, 0xec,0xec,0xec,0xec,0xeb,0xeb,0x7d,0xee,0xea,0xea,0xea,0xea,0xe8,0xe9,0x7b,0xec, 0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x79,0xeb,0xe5,0xe5,0xe6,0xe5,0xe4,0xe4,0x78,0xe8, 0xe4,0xe3,0xe4,0xe3,0xe3,0xe3,0x75,0xe6,0xe1,0xe0,0xe0,0xe0,0xe1,0xe1,0x73,0xae, 0xe5,0xe0,0xe0,0xe1,0xe1,0xb0,0x41,0xaf,0xe7,0xe1,0xe2,0xe3,0xe3,0xb2,0x41,0xb2, 0xe8,0xe4,0xe3,0xe4,0xe3,0xb3,0x41,0xb4,0xea,0xe4,0xe5,0xe5,0xe5,0xb6,0x41,0xb6, 0xec,0xe7,0xe7,0xe7,0xe8,0xb8,0x41,0xb7,0xef,0xe8,0xe8,0xe8,0xe9,0xba,0x41,0xba, 0xf0,0xe9,0xea,0xeb,0xea,0xbc,0x41,0xbc,0xf2,0xec,0xed,0xee,0xed,0xbd,0x43,0xbe, 0xf4,0xef,0xf0,0xef,0xf0,0xc0,0x46,0xc0,0xf6,0xf1,0xf0,0xf0,0xf1,0xc1,0x48,0xc2, 0xf8,0xf2,0xf2,0xf3,0xf2,0xc3,0x4a,0xc4,0xf9,0xf4,0xf5,0xf4,0xf4,0xc6,0x4d,0xc6, 0xfb,0xf6,0xf6,0xf5,0xf6,0xc8,0x4f,0xc8,0xfe,0xf6,0xf8,0xf8,0xf8,0xc9,0x51,0xcb, 0xff,0xfb,0xfa,0xfb,0xfa,0xcb,0x53,0xcb,0xff,0xfb,0xfb,0xfb,0xfb,0xcc,0x57,0xcd, 0xff,0xfb,0xfa,0xfa,0xfb,0xcf,0x58,0xcf,0xff,0xfa,0xfa,0xfa,0xfa,0xd1,0x5a,0xd2, 0xff,0xfa,0xfa,0xfb,0xfa,0xd3,0x5c,0xd4,0xff,0xfa,0xfa,0xf9,0xf9,0xd5,0x5f,0xd5, 0xff,0xfa,0xfa,0xfa,0xf9,0xd7,0x61,0xd7,0xff,0xfb,0xfb,0xfb,0xfb,0xd7,0x63,0xd7, 0xff,0xfb,0xfb,0xfb,0xfb,0xd7,0x67,0xd7,0xff,0xfb,0xfa,0xfb,0xfa,0xd7,0x69,0xd7, 0xff,0xfa,0xfa,0xfa,0xfb,0xd7,0x6b,0xd7,0xff,0xfa,0xfb,0xfa,0xfa,0xd7,0x6d,0xd6, 0xff,0xfa,0xfa,0xf9,0xfa,0xd7,0x6f,0xd6,0xff,0xf9,0xfa,0xfa,0xf9,0xd7,0x71,0xd7, 0xff,0xfa,0xfb,0xfb,0xfb,0xd7,0x6f,0xd7,0xff,0xfb,0xfb,0xfb,0xfb,0xd7,0x6d,0xd7, 0xff,0xfb,0xfa,0xfa,0xfa,0xd7,0x6b,0xd7,0xff,0xfa,0xfa,0xfa,0xfa,0xd7,0x69,0xd7, 0xff,0xfa,0xfa,0xfb,0xfa,0xd7,0x67,0xd7,0xff,0xfa,0xf9,0xfa,0xf9,0xd7,0x64,0xd7, 0xff,0xfa,0xfa,0xfa,0xfa,0xd7,0x61,0xd7,0xff,0xfb,0xfb,0xfb,0xfb,0xd5,0x5f,0xd5, 0xff,0xfb,0xfb,0xfb,0xfb,0xd4,0x5e,0xd4,0xff,0xfb,0xfa,0xfa,0xfa,0xd2,0x5b,0xd1, 0xff,0xfa,0xfa,0xfa,0xfa,0xd0,0x58,0xd0,0xff,0xfa,0xfa,0xfa,0xfa,0xcd,0x56,0xcd, 0xff,0xfb,0xf9,0xf9,0xf9,0xcc,0x54,0xcb,0xff,0xf9,0xf9,0xf9,0xf9,0xca,0x52,0xc9, 0xfe,0xf9,0xf9,0xf9,0xf9,0xc9,0x4f,0xc8,0xfc,0xf7,0xf7,0xf7,0xf7,0xc6,0x4c,0xc6, 0xfb,0xf5,0xf4,0xf5,0xf3,0xc4,0x4a,0xc3,0xf8,0xf3,0xf3,0xf2,0xf1,0xc2,0x48,0xc2, 0xf7,0xf1,0xf0,0xf1,0xf0,0xc0,0x46,0xc0,0xf5,0xee,0xed,0xee,0xed,0xbe,0x43,0xbe, 0xf2,0xec,0xed,0xec,0xeb,0xbc,0x41,0xbc,0xf1,0xec,0xec,0xeb,0xeb,0xba,0x41,0xb9, 0xef,0xea,0xea,0xea,0xe9,0xb8,0x41,0xb8,0xee,0xe8,0xe7,0xe7,0xe7,0xb6,0x41,0xb6, 0xeb,0xe5,0xe5,0xe5,0xe5,0xb4,0x41,0xb4,0xe9,0xe4,0xe4,0xe3,0xe3,0xb3,0x41,0xb2, 0xe8,0xe1,0xe1,0xe0,0xe0,0xb0,0x41,0xb0,0xe6,0xdf,0xdf,0xe0,0xdf,0xae,0x41 }; #ifndef __LOWRES__ const pp_uint8 PianoBitmapLarge::PIANO_LUT[] = { 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0xf2,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0xf7,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0xf9,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xff,0x00,0x00,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xff,0x00,0x00,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xff,0x00,0x00,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xff,0x00,0x00,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xff,0x00,0x00,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xff,0x00,0x00,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xff,0x00,0x00,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xff,0x00,0x00,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xff,0x00,0x00,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xff,0x00,0x00,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xff,0x00,0x00,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xff,0x00,0x00,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xff,0x00,0x00,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xff,0x00,0x00,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xff,0x00,0x00,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xff,0x00,0x00,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xff,0x00,0x00,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xff,0x00,0x00,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xff,0x00,0x00,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xff,0x00,0x00,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xff,0x00,0x00,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xff,0x00,0x00,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xff,0x00,0x00,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xff,0x00,0x00,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xff,0x00,0x00,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xff,0x00,0x00,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xff,0x00,0x00,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xff,0x00,0x00,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xff,0x00,0x00,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xff,0x00,0x00,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xff,0x00,0x00,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xff,0x00,0x00,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xff,0x00,0x00,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xff,0x00,0x00,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xff,0x00,0x00,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xff,0x00,0x00,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xff,0x00,0x00,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xff,0x00,0x00,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xff,0x00,0x00,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xff,0x00,0x00,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xff,0x00,0x00,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xff,0x00,0x00,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xff,0x00,0x00,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xff,0x00,0x00,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xff,0x00,0x00,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xff,0x00,0x00,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xff,0x00,0x00,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xff,0x00,0x00,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xff,0x00,0x00,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xff,0x00,0x00,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xff,0x00,0x00,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xff,0x00,0x00,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xff,0x00,0x00,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xff,0x00,0x00,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xff,0x00,0x00,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xff,0x00,0x00,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xff,0x00,0x00,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xff,0x00,0x00,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xff,0x00,0x00,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xff,0x00,0x00,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xff,0x00,0x00,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xff,0x00,0x00,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xff,0x00,0x00,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xff,0x00,0x00,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xff,0x00,0x00,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xff,0x00,0x00,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xff,0x00,0x00,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xff,0x00,0x00,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xff,0x00,0x00,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xff,0x00,0x00,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xff,0x00,0x00,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xff,0x00,0x00,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xff,0x00,0x00,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xff,0x00,0x00,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xff,0x00,0x00,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xff,0x00,0x00,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xff,0x00,0x00,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xff,0x00,0x00,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xff,0x00,0x00,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xff,0x00,0x00,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xff,0x00,0x00,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xff,0x00,0x00,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xff,0x00,0x00,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xff,0x00,0x00,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xff,0x00,0x00,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xff,0x00,0x00,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xff,0x00,0x00,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xff,0x00,0x00,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xff,0x00,0x00,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xff,0x00,0x00,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xff,0x00,0x00,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xff,0x00,0x00,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xff,0x00,0x00,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xff,0x00,0x00,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xff,0x00,0x00,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xff,0x00,0x00,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2, 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xff,0x00,0x00,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xff,0x00,0x00,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xff,0x00,0x00,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7, 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xff,0x00,0x00,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9, 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xff,0x00,0x00,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb, 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xff,0x00,0x00 }; const pp_uint8 PianoBitmapLarge::PIANO[] = { 0xa0,0xc0,0xc0,0xc0,0xc0,0xc1,0xc1,0xc1,0xc1,0xc1,0x06,0x0e,0x17,0x19,0x1a,0x1a,0x1a, 0x1a,0x19,0x12,0x0b,0x04,0x99,0x99,0xc3,0xc3,0x07,0x0f,0x18,0x1b,0x1b,0x1b,0x1b, 0x1b,0x1b,0x13,0x0b,0x05,0x9b,0x9b,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0x30,0xa7, 0xc7,0xc7,0xc7,0xc7,0xc7,0xc8,0xc8,0xc8,0xc8,0x08,0x11,0x1b,0x1e,0x1e,0x1e,0x1e, 0x1e,0x1e,0x15,0x0c,0x06,0xa0,0xa0,0xca,0xca,0x08,0x11,0x1b,0x1e,0x1e,0x1e,0x1e, 0x1e,0x1e,0x15,0x0c,0x06,0xa2,0xa2,0xcc,0xcc,0x08,0x11,0x1b,0x1e,0x1e,0x1e,0x1e, 0x1e,0x1e,0x15,0x0c,0x05,0xa4,0xa4,0xce,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0x30,0xb0, 0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd1,0xd1,0xd1,0x06,0x0e,0x17,0x19,0x1a,0x1a,0x1a, 0x1a,0x19,0x12,0x0b,0x04,0xa9,0xa9,0xd3,0xd3,0x07,0x0f,0x18,0x1b,0x1b,0x1b,0x1b, 0x1b,0x1b,0x13,0x0b,0x05,0xab,0xab,0xd5,0xd5,0xd5,0xd6,0xd6,0xd6,0xd6,0x36,0xb6, 0xd6,0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,0xd8,0x08,0x11,0x1c,0x20,0x21,0x21,0x22, 0x22,0x21,0x15,0x0c,0x06,0xaf,0xb0,0xda,0xda,0x08,0x11,0x1f,0x23,0x24,0x24,0x24, 0x24,0x24,0x18,0x0c,0x06,0xb2,0xb2,0xdc,0xdc,0x08,0x13,0x21,0x25,0x26,0x26,0x26, 0x26,0x25,0x1a,0x0e,0x05,0xb4,0xb4,0xde,0xde,0xdf,0xdf,0xdf,0xdf,0xdf,0x3f,0xbf, 0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0x09,0x14,0x20,0x23,0x24,0x24,0x24, 0x25,0x24,0x1b,0x11,0x08,0xb8,0xb8,0xe3,0xe3,0x0d,0x17,0x24,0x27,0x27,0x28,0x29, 0x29,0x29,0x1e,0x13,0x0b,0xbb,0xbb,0xe5,0xe5,0xe5,0xe5,0xe5,0xe6,0xe6,0x46,0xc6, 0xe6,0xe6,0xe6,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x12,0x1f,0x2c,0x30,0x31,0x31,0x31, 0x31,0x31,0x25,0x1a,0x11,0xbf,0xbf,0xe7,0xe7,0x15,0x21,0x2f,0x33,0x33,0x33,0x33, 0x34,0x34,0x28,0x1c,0x13,0xc1,0xc1,0xe7,0xe7,0x17,0x23,0x30,0x34,0x35,0x36,0x36, 0x36,0x35,0x29,0x1d,0x14,0xc4,0xc4,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x4f,0xcf, 0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x18,0x24,0x30,0x33,0x34,0x34,0x34, 0x34,0x34,0x2b,0x21,0x18,0xc8,0xc8,0xe7,0xe7,0x1d,0x27,0x34,0x37,0x37,0x37,0x39, 0x39,0x39,0x2e,0x23,0x1b,0xc8,0xc8,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x55,0xcf, 0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x22,0x2e,0x3b,0x3f,0x41,0x41,0x41, 0x41,0x40,0x34,0x29,0x21,0xc8,0xc8,0xe7,0xe7,0x24,0x30,0x3f,0x43,0x43,0x43,0x43, 0x43,0x43,0x38,0x2c,0x23,0xc8,0xc8,0xe7,0xe7,0x27,0x33,0x40,0x44,0x45,0x45,0x45, 0x46,0x45,0x39,0x2d,0x24,0xc8,0xc8,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x5f,0xcf, 0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x26,0x31,0x3c,0x3f,0x40,0x40,0x40, 0x40,0x3f,0x35,0x2b,0x22,0xc8,0xc8,0xe7,0xe7,0x25,0x2f,0x3c,0x3f,0x3f,0x3f,0x40, 0x3f,0x3f,0x34,0x29,0x21,0xc8,0xc8,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x58,0xcf, 0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x22,0x2e,0x3b,0x3e,0x3f,0x3f,0x3f, 0x3f,0x3e,0x32,0x26,0x1d,0xc8,0xc8,0xe7,0xe7,0x20,0x2c,0x3a,0x3d,0x3d,0x3d,0x3d, 0x3d,0x3d,0x31,0x24,0x1b,0xc8,0xc8,0xe7,0xe7,0x1e,0x29,0x36,0x3a,0x3b,0x3b,0x3b, 0x3b,0x39,0x2d,0x21,0x18,0xc7,0xc7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x50,0xcf, 0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x16,0x21,0x2d,0x30,0x30,0x30,0x30, 0x30,0x2f,0x26,0x1c,0x12,0xc2,0xc2,0xe7,0xe7,0x16,0x20,0x2c,0x2f,0x2f,0x2f,0x30, 0x30,0x30,0x24,0x19,0x11,0xc0,0xc0,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x49,0xc9, 0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x12,0x1e,0x2b,0x2f,0x30,0x2f,0x2f, 0x2f,0x2e,0x22,0x17,0x0e,0xbc,0xbb,0xe5,0xe5,0x10,0x1c,0x2a,0x2e,0x2d,0x2d,0x2d, 0x2d,0x2d,0x21,0x15,0x0b,0xb9,0xb9,0xe3,0xe3,0x0e,0x1a,0x26,0x2a,0x2b,0x2b,0x2b, 0x2b,0x2a,0x1d,0x11,0x08,0xb7,0xb7,0xe1,0xe1,0xe0,0xe0,0xe0,0xe0,0xe0,0x40,0xc0, 0xe0,0xe0,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0x06,0x11,0x1d,0x20,0x21,0x21,0x21, 0x20,0x1f,0x16,0x0c,0x04,0xb3,0xb3,0xdc,0xdc,0x07,0x10,0x1d,0x20,0x20,0x1f,0x20, 0x20,0x20,0x15,0x0b,0x05,0xb0,0xb0,0xda,0xda,0xda,0xda,0xda,0xd9,0xd9,0x39,0xb9, 0xd9,0xd9,0xd9,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0x08,0x11,0x1b,0x1f,0x20,0x20,0x20, 0x20,0x1e,0x15,0x0c,0x06,0xac,0xac,0xd6,0xd5,0x08,0x11,0x1b,0x1e,0x1e,0x1e,0x1e, 0x1e,0x1e,0x15,0x0c,0x06,0xaa,0xa9,0xd3,0xd3,0x08,0x11,0x1b,0x1e,0x1e,0x1e,0x1e, 0x1e,0x1e,0x15,0x0c,0x05,0xa7,0xa7,0xd1,0xd1,0xd1,0xd1,0xd0,0xd0,0xd0,0x30,0xb0, 0xd0,0xd0,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0x06,0x0e,0x17,0x19,0x1a,0x1a,0x1a, 0x1a,0x19,0x12,0x0b,0x04,0xa3,0xa3,0xcd,0xcc,0x07,0x0f,0x18,0x1b,0x1b,0x1b,0x1b, 0x1b,0x1b,0x13,0x0b,0x05,0xa1,0xa1,0xca,0xca,0xca,0xca,0xca,0xca,0xca,0x30,0xa9, 0xc9,0xc9,0xc9,0xc9,0xc9,0xc8,0xc8,0xc8,0xc8,0x08,0x11,0x1b,0x1e,0x1e,0x1e,0x1e, 0x1e,0x1e,0x15,0x0c,0x06,0x9c,0x9c,0xc6,0xc6,0x08,0x11,0x1b,0x1e,0x1e,0x1e,0x1e, 0x1e,0x1e,0x15,0x0c,0x06,0x9a,0x9a,0xc4,0xc4,0x08,0x11,0x1b,0x1e,0x1e,0x1e,0x1e, 0x1e,0x1e,0x15,0x0c,0x05,0x98,0x98,0xc1,0xc1,0xc1,0xc1,0xc1,0xc1,0xc1,0x30,0xa0, 0xc3,0xc0,0xc0,0xc0,0xc1,0xc1,0xc1,0xc1,0xc1,0x0a,0x9e,0xa5,0x93,0x81,0x6f,0x5d, 0x4e,0x40,0x30,0x1f,0x07,0x98,0x98,0xc3,0xc3,0x0b,0xa2,0xa7,0x96,0x84,0x72,0x60, 0x4f,0x41,0x30,0x1f,0x08,0x9a,0x9a,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0x30,0xa7, 0xca,0xc7,0xc7,0xc7,0xc7,0xc8,0xc8,0xc7,0xc8,0x0b,0xa6,0xab,0x9b,0x89,0x77,0x65, 0x52,0x41,0x30,0x1f,0x07,0x9f,0x9f,0xca,0xca,0x0a,0xa8,0xae,0x9c,0x8a,0x78,0x66, 0x53,0x41,0x30,0x1f,0x07,0xa1,0xa1,0xcc,0xcc,0x09,0xaa,0xaf,0x9d,0x8c,0x7a,0x68, 0x55,0x44,0x30,0x1f,0x07,0xa3,0xa3,0xce,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0x30,0xb0, 0xd3,0xd0,0xd0,0xd0,0xd0,0xd0,0xd1,0xd1,0xd1,0x0a,0xae,0xb4,0xa2,0x91,0x7f,0x6d, 0x5a,0x48,0x33,0x1f,0x07,0xa8,0xa8,0xd3,0xd3,0x0b,0xb1,0xb6,0xa6,0x94,0x82,0x70, 0x5d,0x4b,0x35,0x1f,0x08,0xaa,0xaa,0xd5,0xd5,0xd5,0xd6,0xd6,0xd6,0xd6,0x36,0xb6, 0xd9,0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,0xd6,0xd8,0x0b,0xb6,0xbb,0xaa,0x98,0x86,0x75, 0x62,0x50,0x3a,0x23,0x07,0xae,0xaf,0xda,0xda,0x0a,0xb7,0xbd,0xab,0x9a,0x88,0x76, 0x63,0x51,0x3c,0x25,0x07,0xb1,0xb1,0xdc,0xdc,0x09,0xb9,0xbf,0xad,0x9c,0x8a,0x78, 0x65,0x53,0x3e,0x28,0x08,0xb3,0xb3,0xde,0xde,0xdf,0xdf,0xdf,0xdf,0xdf,0x3f,0xbf, 0xe3,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0x0f,0xbe,0xc4,0xb2,0xa0,0x8e,0x7c, 0x6a,0x58,0x43,0x2c,0x0c,0xb7,0xb7,0xe3,0xe3,0x12,0xc1,0xc6,0xb5,0xa3,0x92,0x80, 0x6d,0x5b,0x45,0x2e,0x0f,0xba,0xba,0xe5,0xe5,0xe5,0xe5,0xe5,0xe6,0xe6,0x46,0xc6, 0xe9,0xe6,0xe6,0xe7,0xe7,0xe7,0xe7,0xe6,0xe7,0x16,0xc6,0xcb,0xba,0xa8,0x96,0x84, 0x71,0x60,0x4a,0x33,0x13,0xbe,0xbe,0xe7,0xe7,0x18,0xc7,0xcd,0xbb,0xa9,0x97,0x86, 0x73,0x61,0x4c,0x35,0x15,0xc0,0xc1,0xe7,0xe7,0x19,0xc9,0xce,0xbc,0xab,0x9a,0x88, 0x75,0x63,0x4d,0x37,0x17,0xc3,0xc3,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x4f,0xcf, 0xe9,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x1e,0xcd,0xd1,0xc2,0xb0,0x9e,0x8c, 0x79,0x68,0x53,0x3c,0x1c,0xc7,0xc7,0xe7,0xe7,0x22,0xce,0xd1,0xc5,0xb3,0xa1,0x90, 0x7d,0x6b,0x55,0x3e,0x1f,0xc7,0xc7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x55,0xcf, 0xe9,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe6,0xe7,0x26,0xce,0xd1,0xc5,0xb7,0xa6,0x94, 0x81,0x6f,0x59,0x42,0x23,0xc7,0xc7,0xe7,0xe7,0x27,0xcd,0xd1,0xc4,0xb6,0xa7,0x95, 0x82,0x70,0x5c,0x45,0x25,0xc7,0xc7,0xe7,0xe7,0x29,0xcd,0xd1,0xc3,0xb6,0xa9,0x97, 0x85,0x73,0x5d,0x47,0x27,0xc7,0xc7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x5f,0xcf, 0xe9,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x2c,0xcd,0xd1,0xc4,0xb6,0xa9,0x98, 0x85,0x73,0x5d,0x46,0x26,0xc7,0xc7,0xe7,0xe7,0x2a,0xce,0xd1,0xc5,0xb7,0xa9,0x97, 0x83,0x71,0x5b,0x44,0x25,0xc7,0xc7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x58,0xcf, 0xe9,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe6,0xe7,0x26,0xce,0xd1,0xc5,0xb6,0xa4,0x92, 0x7f,0x6d,0x57,0x3f,0x1f,0xc7,0xc7,0xe7,0xe7,0x23,0xcd,0xd1,0xc4,0xb3,0xa1,0x8f, 0x7c,0x6a,0x55,0x3d,0x1d,0xc7,0xc7,0xe7,0xe7,0x20,0xcd,0xd1,0xc2,0xb1,0x9f,0x8d, 0x7a,0x67,0x51,0x3b,0x1b,0xc6,0xc6,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x50,0xcf, 0xe9,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x1c,0xcb,0xd1,0xbf,0xac,0x9a,0x88, 0x75,0x63,0x4e,0x37,0x16,0xc1,0xc1,0xe7,0xe7,0x1b,0xca,0xce,0xbd,0xab,0x99,0x87, 0x74,0x62,0x4b,0x34,0x15,0xbf,0xbf,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x49,0xc9, 0xe9,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe6,0xe7,0x16,0xc5,0xca,0xb9,0xa7,0x94,0x82, 0x6f,0x5d,0x47,0x30,0x10,0xba,0xba,0xe5,0xe5,0x13,0xc2,0xc8,0xb6,0xa3,0x91,0x7f, 0x6c,0x5a,0x45,0x2e,0x0d,0xb8,0xb8,0xe3,0xe3,0x10,0xc0,0xc4,0xb2,0xa1,0x8f,0x7d, 0x6a,0x58,0x41,0x2b,0x0b,0xb6,0xb6,0xe1,0xe1,0xe0,0xe0,0xe0,0xe0,0xe0,0x40,0xc0, 0xe3,0xe0,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0x0c,0xbb,0xc1,0xaf,0x9d,0x8b,0x79, 0x65,0x53,0x3e,0x27,0x07,0xb2,0xb2,0xdc,0xdc,0x0b,0xba,0xbf,0xae,0x9c,0x89,0x77, 0x64,0x52,0x3c,0x25,0x08,0xaf,0xaf,0xda,0xda,0xda,0xda,0xda,0xd9,0xd9,0x39,0xb9, 0xdc,0xd9,0xd9,0xd8,0xd8,0xd8,0xd8,0xd7,0xd8,0x0b,0xb5,0xba,0xa9,0x97,0x85,0x73, 0x60,0x4d,0x37,0x20,0x07,0xab,0xab,0xd6,0xd5,0x0a,0xb2,0xb8,0xa6,0x94,0x82,0x6f, 0x5c,0x4a,0x35,0x1f,0x07,0xa9,0xa8,0xd3,0xd3,0x09,0xb0,0xb5,0xa3,0x91,0x7f,0x6d, 0x5a,0x48,0x32,0x1f,0x07,0xa6,0xa6,0xd1,0xd1,0xd1,0xd1,0xd0,0xd0,0xd0,0x30,0xb0, 0xd3,0xd0,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0x0a,0xab,0xb1,0x9f,0x8d,0x7b,0x69, 0x55,0x43,0x30,0x1f,0x07,0xa2,0xa2,0xcc,0xcc,0x0b,0xaa,0xaf,0x9e,0x8c,0x7a,0x67, 0x54,0x42,0x30,0x1f,0x08,0xa0,0xa0,0xca,0xca,0xca,0xca,0xca,0xca,0xca,0x30,0xa9, 0xcc,0xc9,0xc9,0xc9,0xc9,0xc8,0xc8,0xc7,0xc8,0x0b,0xa6,0xab,0x99,0x87,0x75,0x63, 0x50,0x41,0x30,0x1f,0x07,0x9b,0x9b,0xc6,0xc6,0x0a,0xa3,0xa8,0x96,0x84,0x72,0x60, 0x4e,0x40,0x30,0x1f,0x07,0x99,0x99,0xc4,0xc4,0x09,0xa0,0xa5,0x93,0x82,0x70,0x5e, 0x4e,0x40,0x30,0x1f,0x07,0x97,0x97,0xc1,0xc1,0xc1,0xc1,0xc1,0xc1,0xc1,0x30,0xa0, 0xc9,0xc0,0xc0,0xc0,0xc1,0xc1,0xc1,0xc1,0xc1,0x0c,0xa1,0x2f,0x35,0x36,0x36,0x36, 0x36,0x35,0x27,0x18,0x0a,0x95,0x95,0xc3,0xc3,0x0c,0xa4,0x2e,0x34,0x35,0x35,0x35, 0x35,0x34,0x26,0x16,0x09,0x97,0x97,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0x30,0xa7, 0xd0,0xc7,0xc7,0xc7,0xc7,0xc8,0xc8,0xc8,0xc8,0x0c,0xa7,0x2b,0x30,0x30,0x30,0x30, 0x30,0x30,0x24,0x15,0x09,0x9c,0x9c,0xca,0xca,0x0b,0xaa,0x2a,0x2e,0x2f,0x2f,0x2f, 0x2f,0x2f,0x22,0x14,0x08,0x9e,0x9e,0xcc,0xcc,0x0a,0xab,0x28,0x2d,0x2d,0x2d,0x2d, 0x2d,0x2d,0x21,0x13,0x08,0xa0,0xa0,0xce,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0x30,0xb0, 0xd9,0xd0,0xd0,0xd0,0xd0,0xd0,0xd1,0xd1,0xd1,0x0c,0xb1,0x30,0x38,0x3a,0x3a,0x3a, 0x3a,0x39,0x27,0x18,0x0a,0xa5,0xa5,0xd3,0xd3,0x0c,0xb3,0x32,0x3a,0x3b,0x3b,0x3b, 0x3b,0x3a,0x27,0x16,0x09,0xa7,0xa7,0xd5,0xd5,0xd5,0xd6,0xd6,0xd6,0xd6,0x36,0xb6, 0xdf,0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,0xd8,0x0c,0xb7,0x32,0x38,0x39,0x39,0x3a, 0x3a,0x39,0x29,0x15,0x09,0xab,0xac,0xda,0xda,0x0b,0xb9,0x32,0x38,0x3a,0x3a,0x3a, 0x3a,0x3a,0x29,0x16,0x08,0xae,0xae,0xdc,0xdc,0x0a,0xba,0x33,0x39,0x39,0x39,0x39, 0x39,0x39,0x2a,0x18,0x09,0xb0,0xb0,0xde,0xde,0xdf,0xdf,0xdf,0xdf,0xdf,0x3f,0xbf, 0xe9,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0x12,0xc1,0x40,0x48,0x49,0x49,0x49, 0x4a,0x49,0x37,0x22,0x10,0xb4,0xb4,0xe3,0xe3,0x14,0xc3,0x41,0x49,0x4a,0x4b,0x4b, 0x4b,0x4a,0x37,0x22,0x11,0xb7,0xb7,0xe5,0xe5,0xe5,0xe5,0xe5,0xe6,0xe6,0x46,0xc6, 0xee,0xe6,0xe6,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x17,0xc7,0x42,0x48,0x49,0x49,0x49, 0x49,0x49,0x39,0x25,0x15,0xbb,0xbb,0xe7,0xe7,0x19,0xc9,0x42,0x48,0x49,0x49,0x4a, 0x4a,0x4a,0x39,0x26,0x16,0xbd,0xbe,0xe7,0xe7,0x1a,0xca,0x42,0x48,0x49,0x49,0x49, 0x49,0x49,0x39,0x27,0x18,0xc0,0xc0,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x4f,0xcf, 0xee,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x21,0xcf,0x50,0x58,0x59,0x59,0x59, 0x59,0x59,0x47,0x32,0x20,0xc4,0xc4,0xe7,0xe7,0x24,0xcf,0x51,0x59,0x5a,0x5a,0x5b, 0x5b,0x5a,0x47,0x32,0x21,0xc5,0xc5,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x55,0xcf, 0xee,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x27,0xce,0x51,0x57,0x59,0x59,0x59, 0x59,0x58,0x48,0x34,0x25,0xc5,0xc5,0xe7,0xe7,0x28,0xce,0x52,0x58,0x59,0x59,0x59, 0x59,0x59,0x49,0x36,0x26,0xc5,0xc5,0xe7,0xe7,0x2a,0xce,0x52,0x58,0x58,0x58,0x58, 0x59,0x59,0x49,0x37,0x28,0xc5,0xc5,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x5f,0xcf, 0xee,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x2f,0xcf,0x5c,0x64,0x65,0x65,0x65, 0x65,0x64,0x51,0x3c,0x2a,0xc5,0xc5,0xe7,0xe7,0x2c,0xcf,0x59,0x61,0x62,0x62,0x62, 0x61,0x60,0x4d,0x38,0x27,0xc5,0xc5,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x58,0xcf, 0xee,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x27,0xce,0x51,0x56,0x57,0x57,0x57, 0x57,0x56,0x46,0x31,0x21,0xc5,0xc5,0xe7,0xe7,0x24,0xce,0x4d,0x52,0x53,0x53,0x53, 0x53,0x53,0x42,0x2e,0x1e,0xc5,0xc5,0xe7,0xe7,0x21,0xce,0x48,0x4e,0x4e,0x4e,0x4e, 0x4e,0x4d,0x3d,0x2b,0x1c,0xc3,0xc3,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x50,0xcf, 0xee,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x1f,0xce,0x4d,0x55,0x55,0x55,0x55, 0x55,0x54,0x42,0x2d,0x1a,0xbe,0xbe,0xe7,0xe7,0x1d,0xcc,0x49,0x51,0x52,0x52,0x52, 0x52,0x51,0x3d,0x28,0x17,0xbc,0xbc,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x49,0xc9, 0xee,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x17,0xc6,0x41,0x47,0x48,0x47,0x47, 0x47,0x46,0x36,0x22,0x12,0xb7,0xb7,0xe5,0xe5,0x14,0xc4,0x3d,0x42,0x43,0x43,0x43, 0x43,0x43,0x32,0x1f,0x0e,0xb5,0xb5,0xe3,0xe3,0x11,0xc1,0x38,0x3e,0x3e,0x3e,0x3e, 0x3e,0x3e,0x2d,0x1b,0x0c,0xb3,0xb3,0xe1,0xe1,0xe0,0xe0,0xe0,0xe0,0xe0,0x40,0xc0, 0xe9,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0x0f,0xbe,0x3d,0x45,0x46,0x46,0x46, 0x45,0x44,0x32,0x1d,0x0b,0xaf,0xaf,0xdc,0xdc,0x0d,0xbc,0x3a,0x42,0x43,0x42,0x42, 0x42,0x41,0x2e,0x19,0x09,0xac,0xac,0xda,0xda,0xda,0xda,0xda,0xd9,0xd9,0x39,0xb9, 0xe2,0xd9,0xd9,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0x0c,0xb6,0x31,0x37,0x38,0x38,0x38, 0x38,0x36,0x26,0x15,0x09,0xa8,0xa8,0xd6,0xd5,0x0b,0xb4,0x2d,0x33,0x34,0x34,0x33, 0x33,0x33,0x22,0x14,0x08,0xa6,0xa5,0xd3,0xd3,0x0a,0xb1,0x29,0x2f,0x2e,0x2e,0x2e, 0x2e,0x2e,0x21,0x13,0x08,0xa3,0xa3,0xd1,0xd1,0xd1,0xd1,0xd0,0xd0,0xd0,0x30,0xb0, 0xd9,0xd0,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0x0c,0xae,0x2f,0x35,0x36,0x36,0x36, 0x36,0x35,0x27,0x18,0x0a,0x9f,0x9f,0xcc,0xcc,0x0c,0xac,0x2e,0x34,0x35,0x35,0x35, 0x35,0x34,0x26,0x16,0x09,0x9d,0x9d,0xca,0xca,0xca,0xca,0xca,0xca,0xca,0x30,0xa9, 0xd2,0xc9,0xc9,0xc9,0xc9,0xc8,0xc8,0xc8,0xc8,0x0c,0xa7,0x2b,0x30,0x30,0x30,0x30, 0x30,0x30,0x24,0x15,0x09,0x98,0x98,0xc6,0xc6,0x0b,0xa5,0x2a,0x2e,0x2f,0x2f,0x2f, 0x2f,0x2f,0x22,0x14,0x08,0x96,0x96,0xc4,0xc4,0x0a,0xa1,0x28,0x2d,0x2d,0x2d,0x2d, 0x2d,0x2d,0x21,0x13,0x08,0x94,0x94,0xc1,0xc1,0xc1,0xc1,0xc1,0xc1,0xc1,0x30,0xa0, 0xcd,0xc0,0xc0,0xc0,0xc1,0xc1,0xc1,0xc1,0xc1,0x0d,0x8f,0x2f,0x34,0x35,0x35,0x35, 0x35,0x34,0x27,0x17,0x09,0x92,0x92,0xc3,0xc3,0x0c,0x92,0x2d,0x33,0x33,0x33,0x33, 0x33,0x33,0x26,0x16,0x09,0x94,0x94,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0x30,0xa7, 0xd4,0xc7,0xc7,0xc7,0xc7,0xc8,0xc8,0xc8,0xc8,0x0b,0x95,0x2b,0x2f,0x30,0x30,0x30, 0x30,0x2f,0x24,0x15,0x08,0x99,0x99,0xca,0xca,0x0a,0x98,0x2a,0x2e,0x2f,0x2f,0x2e, 0x2e,0x2e,0x22,0x13,0x08,0x9b,0x9b,0xcc,0xcc,0x09,0x99,0x28,0x2d,0x2d,0x2d,0x2d, 0x2d,0x2d,0x21,0x12,0x08,0x9d,0x9d,0xce,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0x30,0xb0, 0xdd,0xd0,0xd0,0xd0,0xd0,0xd0,0xd1,0xd1,0xd1,0x0d,0x9f,0x30,0x37,0x39,0x39,0x39, 0x39,0x38,0x27,0x17,0x09,0xa2,0xa2,0xd3,0xd3,0x0c,0xa1,0x31,0x38,0x39,0x39,0x39, 0x39,0x38,0x28,0x16,0x09,0xa4,0xa4,0xd5,0xd5,0xd5,0xd6,0xd6,0xd6,0xd6,0x36,0xb6, 0xe3,0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,0xd8,0x0b,0xa5,0x32,0x37,0x38,0x38,0x39, 0x39,0x38,0x29,0x15,0x08,0xa8,0xa9,0xda,0xda,0x0a,0xa7,0x32,0x38,0x3a,0x3a,0x39, 0x39,0x39,0x29,0x15,0x08,0xab,0xab,0xdc,0xdc,0x09,0xa8,0x33,0x39,0x39,0x39,0x39, 0x39,0x39,0x2b,0x17,0x09,0xad,0xad,0xde,0xde,0xdf,0xdf,0xdf,0xdf,0xdf,0x3f,0xbf, 0xed,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0x13,0xaf,0x40,0x47,0x48,0x48,0x48, 0x49,0x48,0x36,0x21,0x0f,0xb1,0xb1,0xe3,0xe3,0x14,0xb1,0x40,0x47,0x48,0x49,0x49, 0x49,0x48,0x37,0x22,0x11,0xb4,0xb4,0xe5,0xe5,0xe5,0xe5,0xe5,0xe6,0xe6,0x46,0xc6, 0xf1,0xe6,0xe6,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x16,0xb5,0x42,0x47,0x48,0x48,0x48, 0x48,0x48,0x39,0x25,0x14,0xb8,0xb8,0xe7,0xe7,0x18,0xb7,0x42,0x48,0x49,0x49,0x49, 0x49,0x49,0x39,0x25,0x16,0xba,0xbb,0xe7,0xe7,0x19,0xb8,0x42,0x48,0x49,0x49,0x49, 0x49,0x49,0x3a,0x26,0x19,0xbd,0xbd,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x4f,0xcf, 0xf1,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x22,0xbf,0x50,0x57,0x58,0x58,0x58, 0x58,0x58,0x46,0x31,0x1f,0xc1,0xc1,0xe7,0xe7,0x24,0xc1,0x50,0x57,0x58,0x58,0x59, 0x59,0x58,0x47,0x32,0x21,0xc2,0xc2,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x55,0xcf, 0xf1,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x26,0xc1,0x51,0x56,0x58,0x58,0x58, 0x58,0x57,0x48,0x34,0x24,0xc2,0xc2,0xe7,0xe7,0x27,0xc1,0x52,0x58,0x59,0x59,0x58, 0x58,0x58,0x49,0x35,0x26,0xc2,0xc2,0xe7,0xe7,0x29,0xc0,0x52,0x58,0x58,0x58,0x58, 0x59,0x59,0x4a,0x36,0x28,0xc2,0xc2,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x5f,0xcf, 0xf1,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x30,0xc2,0x5c,0x63,0x64,0x64,0x64, 0x64,0x62,0x50,0x3b,0x29,0xc2,0xc2,0xe7,0xe7,0x2c,0xc2,0x58,0x5f,0x60,0x60,0x60, 0x5f,0x5e,0x4d,0x38,0x27,0xc2,0xc2,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x58,0xcf, 0xf1,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x26,0xc1,0x51,0x55,0x56,0x56,0x56, 0x56,0x55,0x46,0x31,0x20,0xc2,0xc2,0xe7,0xe7,0x23,0xc1,0x4d,0x52,0x53,0x53,0x52, 0x52,0x52,0x42,0x2d,0x1e,0xc2,0xc2,0xe7,0xe7,0x20,0xbe,0x48,0x4e,0x4e,0x4e,0x4e, 0x4e,0x4d,0x3e,0x2a,0x1c,0xc0,0xc0,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x50,0xcf, 0xf1,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x20,0xbc,0x4d,0x54,0x54,0x54,0x54, 0x54,0x53,0x41,0x2c,0x19,0xbb,0xbb,0xe7,0xe7,0x1d,0xba,0x48,0x4f,0x50,0x50,0x50, 0x50,0x4f,0x3d,0x28,0x17,0xb9,0xb9,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x49,0xc9, 0xf1,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x16,0xb4,0x41,0x46,0x47,0x46,0x46, 0x46,0x45,0x36,0x22,0x11,0xb4,0xb4,0xe5,0xe5,0x13,0xb2,0x3d,0x42,0x43,0x43,0x42, 0x42,0x42,0x32,0x1d,0x0e,0xb2,0xb2,0xe3,0xe3,0x10,0xaf,0x38,0x3e,0x3e,0x3e,0x3e, 0x3e,0x3e,0x2e,0x1a,0x0c,0xb0,0xb0,0xe1,0xe1,0xe0,0xe0,0xe0,0xe0,0xe0,0x40,0xc0, 0xed,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xde,0x10,0xac,0x3d,0x44,0x45,0x45,0x45, 0x44,0x43,0x31,0x1c,0x0a,0xac,0xac,0xdc,0xdc,0x0d,0xaa,0x39,0x40,0x41,0x40,0x40, 0x40,0x3f,0x2e,0x19,0x09,0xa9,0xa9,0xda,0xda,0xda,0xda,0xda,0xd9,0xd9,0x39,0xb9, 0xe6,0xd9,0xd9,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0x0b,0xa4,0x31,0x36,0x37,0x37,0x37, 0x37,0x35,0x26,0x15,0x08,0xa5,0xa5,0xd6,0xd5,0x0a,0xa2,0x2d,0x33,0x34,0x34,0x32, 0x32,0x32,0x22,0x13,0x08,0xa3,0xa2,0xd3,0xd3,0x09,0x9f,0x29,0x2f,0x2e,0x2e,0x2e, 0x2e,0x2e,0x21,0x12,0x08,0xa0,0xa0,0xd1,0xd1,0xd1,0xd1,0xd0,0xd0,0xd0,0x30,0xb0, 0xdd,0xd0,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0x0d,0x9c,0x2f,0x34,0x35,0x35,0x35, 0x35,0x34,0x27,0x17,0x09,0x9c,0x9c,0xcc,0xcc,0x0c,0x9a,0x2d,0x33,0x33,0x33,0x33, 0x33,0x33,0x26,0x16,0x09,0x9a,0x9a,0xca,0xca,0xca,0xca,0xca,0xca,0xca,0x30,0xa9, 0xd6,0xc9,0xc9,0xc9,0xc9,0xc8,0xc8,0xc8,0xc8,0x0b,0x95,0x2b,0x2f,0x30,0x30,0x30, 0x30,0x2f,0x24,0x15,0x08,0x95,0x95,0xc6,0xc6,0x0a,0x92,0x2a,0x2e,0x2f,0x2f,0x2e, 0x2e,0x2e,0x22,0x13,0x08,0x93,0x93,0xc4,0xc4,0x09,0x8f,0x28,0x2d,0x2d,0x2d,0x2d, 0x2d,0x2d,0x21,0x12,0x08,0x91,0x91,0xc1,0xc1,0xc1,0xc1,0xc1,0xc1,0xc1,0x30,0xa0, 0xd2,0xc0,0xc0,0xc0,0xc1,0xc1,0xc1,0xc1,0xc1,0x0c,0x7c,0x2d,0x32,0x33,0x33,0x33, 0x33,0x31,0x25,0x15,0x08,0x90,0x90,0xc3,0xc3,0x0b,0x7e,0x2b,0x30,0x30,0x30,0x30, 0x30,0x30,0x24,0x15,0x08,0x91,0x92,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0x30,0xa7, 0xd9,0xc7,0xc7,0xc7,0xc7,0xc8,0xc8,0xc8,0xc8,0x0a,0x82,0x28,0x2d,0x2d,0x2d,0x2d, 0x2d,0x2d,0x21,0x13,0x07,0x97,0x97,0xca,0xca,0x09,0x85,0x27,0x2b,0x2b,0x2b,0x2b, 0x2b,0x2a,0x1f,0x12,0x06,0x99,0x99,0xcc,0xcc,0x09,0x86,0x25,0x2a,0x2a,0x29,0x2a, 0x29,0x28,0x1e,0x11,0x06,0x9b,0x9b,0xce,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0x30,0xb0, 0xe2,0xd0,0xd0,0xd0,0xd0,0xd0,0xd1,0xd1,0xd1,0x0c,0x8c,0x2d,0x34,0x36,0x36,0x36, 0x36,0x34,0x25,0x15,0x08,0xa0,0xa0,0xd3,0xd3,0x0b,0x8d,0x2e,0x34,0x35,0x35,0x35, 0x35,0x34,0x25,0x15,0x08,0xa1,0xa2,0xd5,0xd5,0xd6,0xd6,0xd6,0xd6,0xd6,0x36,0xb6, 0xe8,0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,0xd8,0x0a,0x92,0x2e,0x34,0x35,0x35,0x36, 0x36,0x35,0x26,0x13,0x07,0xa6,0xa7,0xda,0xda,0x09,0x94,0x2e,0x34,0x35,0x35,0x35, 0x35,0x34,0x25,0x13,0x06,0xa9,0xa9,0xdc,0xdc,0x09,0x95,0x2f,0x35,0x36,0x34,0x36, 0x34,0x33,0x26,0x15,0x07,0xab,0xab,0xde,0xde,0xdf,0xdf,0xdf,0xdf,0xdf,0x3f,0xbf, 0xf2,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0x11,0x9c,0x3d,0x44,0x45,0x45,0x45, 0x46,0x44,0x34,0x1f,0x0d,0xaf,0xaf,0xe3,0xe3,0x12,0x9d,0x3d,0x43,0x44,0x45,0x45, 0x45,0x44,0x34,0x20,0x0f,0xb1,0xb2,0xe5,0xe5,0xe5,0xe5,0xe5,0xe6,0xe6,0x46,0xc6, 0xf5,0xe6,0xe6,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x15,0xa2,0x3e,0x44,0x45,0x45,0x45, 0x45,0x45,0x36,0x23,0x13,0xb6,0xb6,0xe7,0xe7,0x17,0xa4,0x3e,0x44,0x44,0x44,0x45, 0x45,0x44,0x35,0x23,0x14,0xb8,0xb9,0xe7,0xe7,0x19,0xa5,0x3e,0x44,0x46,0x44,0x46, 0x44,0x43,0x35,0x24,0x17,0xbb,0xbb,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x4f,0xcf, 0xf5,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x20,0xac,0x4d,0x54,0x55,0x55,0x55, 0x55,0x54,0x44,0x2f,0x1d,0xbf,0xbf,0xe7,0xe7,0x22,0xad,0x4d,0x53,0x54,0x54,0x55, 0x55,0x54,0x44,0x30,0x1f,0xc0,0xc1,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x55,0xcf, 0xf5,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x25,0xb1,0x4d,0x53,0x55,0x55,0x55, 0x55,0x54,0x45,0x32,0x23,0xc1,0xc1,0xe7,0xe7,0x26,0xb2,0x4e,0x54,0x54,0x54,0x54, 0x54,0x53,0x45,0x33,0x24,0xc1,0xc1,0xe7,0xe7,0x29,0xb2,0x4e,0x54,0x55,0x53,0x55, 0x54,0x53,0x45,0x34,0x26,0xc1,0xc1,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x5f,0xcf, 0xf5,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x2e,0xb3,0x59,0x60,0x61,0x61,0x61, 0x61,0x5e,0x4e,0x39,0x27,0xc1,0xc1,0xe7,0xe7,0x2a,0xb2,0x55,0x5b,0x5c,0x5c,0x5c, 0x5b,0x5a,0x4a,0x36,0x25,0xc0,0xc1,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x58,0xcf, 0xf5,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x25,0xb1,0x4d,0x52,0x53,0x53,0x53, 0x53,0x52,0x43,0x2f,0x1f,0xc1,0xc1,0xe7,0xe7,0x22,0xaf,0x49,0x4e,0x4e,0x4e,0x4e, 0x4e,0x4d,0x3e,0x2b,0x1c,0xc0,0xc0,0xe7,0xe7,0x20,0xab,0x44,0x4a,0x4b,0x49,0x4b, 0x49,0x47,0x39,0x28,0x1a,0xbe,0xbe,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x50,0xcf, 0xf5,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x1e,0xa9,0x4a,0x51,0x51,0x51,0x51, 0x51,0x4f,0x3f,0x2a,0x17,0xb9,0xb9,0xe7,0xe7,0x1b,0xa6,0x45,0x4b,0x4c,0x4c,0x4c, 0x4c,0x4b,0x3a,0x26,0x15,0xb6,0xb7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x49,0xc9, 0xf5,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x15,0xa1,0x3d,0x43,0x44,0x43,0x43, 0x43,0x42,0x33,0x20,0x10,0xb2,0xb2,0xe5,0xe5,0x12,0x9f,0x39,0x3e,0x3e,0x3e,0x3e, 0x3e,0x3d,0x2e,0x1b,0x0c,0xb0,0xb0,0xe3,0xe3,0x10,0x9b,0x34,0x3a,0x3b,0x39,0x3b, 0x39,0x38,0x29,0x18,0x0a,0xae,0xae,0xe1,0xe1,0xe0,0xe0,0xe0,0xe0,0xe0,0x40,0xc0, 0xf2,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xde,0x0e,0x99,0x3a,0x41,0x42,0x42,0x41, 0x41,0x3f,0x2f,0x1a,0x08,0xaa,0xaa,0xdc,0xdc,0x0b,0x96,0x36,0x3c,0x3d,0x3c,0x3c, 0x3c,0x3b,0x2b,0x17,0x08,0xa6,0xa7,0xda,0xda,0xda,0xda,0xda,0xd9,0xd9,0x39,0xb9, 0xeb,0xd9,0xd9,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0x0a,0x91,0x2d,0x33,0x34,0x34,0x34, 0x34,0x32,0x23,0x13,0x07,0xa3,0xa3,0xd6,0xd5,0x09,0x8f,0x29,0x2f,0x2f,0x2f,0x2e, 0x2e,0x2d,0x1f,0x12,0x06,0xa1,0xa0,0xd3,0xd3,0x09,0x8c,0x25,0x2b,0x2b,0x29,0x2b, 0x29,0x28,0x1e,0x11,0x06,0x9e,0x9e,0xd1,0xd1,0xd1,0xd1,0xd0,0xd0,0xd0,0x30,0xb0, 0xe2,0xd0,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0x0c,0x89,0x2d,0x32,0x33,0x33,0x33, 0x33,0x31,0x25,0x15,0x08,0x9a,0x9a,0xcc,0xcc,0x0b,0x86,0x2b,0x30,0x30,0x30,0x30, 0x30,0x30,0x24,0x15,0x08,0x97,0x98,0xca,0xca,0xca,0xca,0xca,0xca,0xca,0x30,0xa9, 0xdb,0xc9,0xc9,0xc9,0xc9,0xc8,0xc8,0xc8,0xc8,0x0a,0x82,0x28,0x2d,0x2d,0x2d,0x2d, 0x2d,0x2d,0x21,0x13,0x07,0x93,0x93,0xc6,0xc6,0x09,0x7f,0x27,0x2b,0x2b,0x2b,0x2b, 0x2b,0x2a,0x1f,0x12,0x06,0x91,0x91,0xc4,0xc4,0x09,0x7c,0x25,0x2a,0x2a,0x29,0x2a, 0x29,0x28,0x1e,0x11,0x06,0x8f,0x8f,0xc1,0xc1,0xc1,0xc1,0xc1,0xc1,0xc1,0x30,0xa0, 0xd9,0xc0,0xc0,0xc0,0xc1,0xc1,0xc1,0xc1,0xc1,0x0b,0x69,0x2a,0x2f,0x2f,0x2f,0x2f, 0x2f,0x2e,0x22,0x13,0x08,0x8d,0x8d,0xc3,0xc3,0x0a,0x6c,0x28,0x2d,0x2d,0x2d,0x2d, 0x2d,0x2d,0x21,0x13,0x07,0x8f,0x8f,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0x30,0xa7, 0xe0,0xc7,0xc7,0xc7,0xc7,0xc8,0xc8,0xc8,0xc8,0x09,0x6f,0x25,0x2a,0x2a,0x2a,0x29, 0x29,0x28,0x1e,0x11,0x06,0x94,0x94,0xca,0xca,0x09,0x71,0x23,0x27,0x27,0x27,0x27, 0x27,0x27,0x1d,0x0f,0x06,0x96,0x96,0xcc,0xcc,0x08,0x73,0x22,0x25,0x27,0x26,0x26, 0x26,0x25,0x1b,0x0f,0x06,0x98,0x98,0xce,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0x30,0xb0, 0xe9,0xd0,0xd0,0xd0,0xd0,0xd0,0xd1,0xd1,0xd1,0x0b,0x79,0x2a,0x30,0x31,0x31,0x31, 0x31,0x30,0x22,0x13,0x08,0x9d,0x9d,0xd3,0xd3,0x0a,0x7b,0x2a,0x30,0x31,0x31,0x31, 0x31,0x30,0x22,0x13,0x07,0x9f,0x9f,0xd5,0xd5,0xd6,0xd6,0xd6,0xd6,0xd6,0x36,0xb6, 0xf0,0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,0xd8,0x09,0x7f,0x2a,0x30,0x31,0x31,0x30, 0x30,0x2f,0x21,0x11,0x06,0xa3,0xa4,0xda,0xda,0x09,0x80,0x29,0x2e,0x30,0x30,0x30, 0x30,0x2f,0x22,0x10,0x06,0xa6,0xa6,0xdc,0xdc,0x08,0x82,0x2b,0x2f,0x31,0x30,0x30, 0x30,0x2f,0x23,0x12,0x06,0xa8,0xa8,0xde,0xde,0xdf,0xdf,0xdf,0xdf,0xdf,0x3f,0xbf, 0xf9,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0x10,0x89,0x39,0x40,0x40,0x40,0x40, 0x41,0x40,0x30,0x1c,0x0d,0xac,0xac,0xe3,0xe3,0x11,0x8b,0x39,0x3f,0x40,0x41,0x41, 0x41,0x40,0x31,0x1e,0x0e,0xaf,0xaf,0xe5,0xe5,0xe5,0xe5,0xe5,0xe6,0xe6,0x46,0xc6, 0xfa,0xe6,0xe6,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x14,0x8f,0x3a,0x40,0x41,0x41,0x3f, 0x3f,0x3f,0x31,0x20,0x12,0xb3,0xb3,0xe7,0xe7,0x17,0x90,0x39,0x3e,0x3f,0x3f,0x40, 0x40,0x3f,0x32,0x20,0x14,0xb5,0xb6,0xe7,0xe7,0x17,0x92,0x3a,0x3e,0x41,0x40,0x40, 0x40,0x3f,0x32,0x21,0x16,0xb8,0xb8,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x4f,0xcf, 0xfa,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x1f,0x99,0x49,0x50,0x50,0x50,0x50, 0x50,0x50,0x40,0x2c,0x1d,0xbc,0xbc,0xe7,0xe7,0x21,0x9b,0x49,0x4f,0x50,0x50,0x51, 0x51,0x50,0x41,0x2e,0x1e,0xbe,0xbf,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x55,0xcf, 0xfa,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x24,0x9e,0x49,0x4f,0x51,0x51,0x4f, 0x4f,0x4e,0x40,0x2f,0x22,0xbf,0xbf,0xe7,0xe7,0x26,0x9f,0x49,0x4e,0x4f,0x4f,0x4f, 0x4f,0x4e,0x42,0x30,0x24,0xbf,0xbf,0xe7,0xe7,0x27,0xa2,0x4a,0x4e,0x50,0x4f,0x4f, 0x50,0x4f,0x42,0x31,0x25,0xbf,0xbf,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x5f,0xcf, 0xfa,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x2d,0xa5,0x55,0x5c,0x5c,0x5c,0x5c, 0x5c,0x5a,0x4a,0x36,0x27,0xbf,0xbf,0xe7,0xe7,0x29,0xa3,0x51,0x57,0x58,0x58,0x57, 0x57,0x56,0x47,0x34,0x24,0xbf,0xbf,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x58,0xcf, 0xfa,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x24,0x9e,0x49,0x4e,0x4f,0x4f,0x4d, 0x4d,0x4c,0x3e,0x2c,0x1e,0xbf,0xbf,0xe7,0xe7,0x22,0x9b,0x44,0x48,0x49,0x49,0x49, 0x49,0x48,0x3b,0x28,0x1c,0xbd,0xbd,0xe7,0xe7,0x1e,0x98,0x40,0x44,0x46,0x45,0x45, 0x45,0x43,0x36,0x25,0x19,0xbb,0xbb,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x50,0xcf, 0xfa,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x1d,0x96,0x46,0x4d,0x4c,0x4c,0x4c, 0x4c,0x4b,0x3b,0x27,0x17,0xb6,0xb6,0xe7,0xe7,0x1a,0x94,0x41,0x47,0x48,0x48,0x48, 0x48,0x47,0x37,0x24,0x14,0xb4,0xb4,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x49,0xc9, 0xfa,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x14,0x8e,0x39,0x3f,0x40,0x3f,0x3d, 0x3d,0x3c,0x2e,0x1d,0x0f,0xaf,0xaf,0xe5,0xe5,0x12,0x8b,0x34,0x38,0x39,0x39,0x39, 0x39,0x38,0x2b,0x18,0x0c,0xad,0xad,0xe3,0xe3,0x0e,0x88,0x30,0x34,0x36,0x35,0x35, 0x35,0x33,0x26,0x15,0x09,0xab,0xab,0xe1,0xe1,0xe0,0xe0,0xe0,0xe0,0xe0,0x40,0xc0, 0xf9,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xde,0x0d,0x86,0x36,0x3d,0x3d,0x3d,0x3c, 0x3c,0x3b,0x2b,0x17,0x08,0xa7,0xa6,0xdc,0xdc,0x0a,0x84,0x32,0x38,0x39,0x38,0x38, 0x38,0x37,0x28,0x15,0x07,0xa4,0xa4,0xda,0xda,0xda,0xda,0xda,0xd9,0xd9,0x39,0xb9, 0xf2,0xd9,0xd9,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0x09,0x7e,0x29,0x2f,0x30,0x30,0x2e, 0x2e,0x2c,0x1e,0x11,0x06,0xa0,0xa0,0xd6,0xd5,0x09,0x7b,0x24,0x29,0x2a,0x2a,0x29, 0x29,0x28,0x1d,0x0f,0x06,0x9e,0x9d,0xd3,0xd3,0x08,0x79,0x22,0x25,0x27,0x26,0x26, 0x26,0x25,0x1b,0x0f,0x06,0x9b,0x9b,0xd1,0xd1,0xd1,0xd1,0xd0,0xd0,0xd0,0x30,0xb0, 0xe9,0xd0,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0x0b,0x76,0x2a,0x2f,0x2f,0x2f,0x2f, 0x2f,0x2e,0x22,0x13,0x08,0x97,0x97,0xcc,0xcc,0x0a,0x74,0x28,0x2d,0x2d,0x2d,0x2d, 0x2d,0x2d,0x21,0x13,0x07,0x95,0x95,0xca,0xca,0xca,0xca,0xca,0xca,0xca,0x30,0xa9, 0xe2,0xc9,0xc9,0xc9,0xc9,0xc8,0xc8,0xc8,0xc8,0x09,0x6f,0x25,0x2a,0x2a,0x2a,0x29, 0x29,0x28,0x1e,0x11,0x06,0x90,0x90,0xc6,0xc6,0x09,0x6b,0x23,0x27,0x27,0x27,0x27, 0x27,0x27,0x1d,0x0f,0x06,0x8e,0x8e,0xc4,0xc3,0x08,0x69,0x22,0x25,0x27,0x26,0x26, 0x26,0x25,0x1b,0x0f,0x06,0x8c,0x8c,0xc1,0xc1,0xc1,0xc1,0xc1,0xc1,0xc1,0x30,0xa0, 0xdd,0xc0,0xc0,0xc0,0xc1,0xc1,0xc1,0xc1,0xc1,0x09,0x58,0x27,0x2a,0x2c,0x2b,0x2b, 0x2b,0x2a,0x20,0x13,0x08,0x8b,0x8b,0xc3,0xc3,0x09,0x59,0x25,0x2a,0x2a,0x2a,0x2a, 0x29,0x2a,0x1f,0x13,0x08,0x8d,0x8d,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0x30,0xa7, 0xe4,0xc7,0xc7,0xc7,0xc7,0xc8,0xc8,0xc8,0xc8,0x08,0x5c,0x22,0x25,0x26,0x26,0x26, 0x26,0x27,0x1e,0x12,0x08,0x92,0x92,0xca,0xca,0x08,0x5f,0x1f,0x24,0x24,0x24,0x24, 0x24,0x26,0x1d,0x11,0x06,0x94,0x94,0xcc,0xcc,0x06,0x60,0x1e,0x21,0x22,0x22,0x22, 0x23,0x25,0x1d,0x11,0x06,0x96,0x96,0xce,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0x30,0xb0, 0xed,0xd0,0xd0,0xd0,0xd0,0xd0,0xd1,0xd1,0xd1,0x09,0x66,0x27,0x2a,0x2d,0x2c,0x2c, 0x2c,0x2b,0x20,0x13,0x08,0x9b,0x9b,0xd3,0xd3,0x09,0x68,0x26,0x2c,0x2d,0x2d,0x2d, 0x2b,0x2c,0x1f,0x13,0x08,0x9d,0x9d,0xd5,0xd5,0xd6,0xd6,0xd6,0xd6,0xd6,0x36,0xb6, 0xf4,0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,0xd8,0xd8,0x08,0x6c,0x26,0x2a,0x2b,0x2b,0x2c, 0x2c,0x2d,0x21,0x12,0x08,0xa1,0xa2,0xda,0xda,0x08,0x6e,0x24,0x2a,0x2c,0x2c,0x2c, 0x2c,0x2e,0x22,0x12,0x06,0xa4,0xa4,0xdc,0xdc,0x06,0x6f,0x25,0x2a,0x2b,0x2b,0x2b, 0x2c,0x2f,0x25,0x15,0x07,0xa6,0xa6,0xde,0xde,0xdf,0xdf,0xdf,0xdf,0xdf,0x3f,0xbf, 0xfd,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0x0e,0x76,0x35,0x3a,0x3c,0x3b,0x3b, 0x3c,0x3b,0x2d,0x1c,0x0d,0xaa,0xaa,0xe3,0xe3,0x10,0x78,0x35,0x3b,0x3c,0x3d,0x3d, 0x3b,0x3c,0x2e,0x1e,0x0f,0xad,0xad,0xe5,0xe5,0xe5,0xe5,0xe5,0xe6,0xe6,0x46,0xc6, 0xfd,0xe6,0xe6,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x12,0x7c,0x36,0x3a,0x3b,0x3b,0x3b, 0x3b,0x3d,0x31,0x21,0x14,0xb1,0xb1,0xe7,0xe7,0x15,0x7e,0x34,0x3a,0x3b,0x3b,0x3c, 0x3c,0x3e,0x32,0x22,0x14,0xb3,0xb4,0xe7,0xe7,0x15,0x7f,0x34,0x39,0x3b,0x3b,0x3b, 0x3c,0x3f,0x34,0x24,0x17,0xb6,0xb6,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x4f,0xcf, 0xfd,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x1e,0x86,0x45,0x4a,0x4c,0x4b,0x4b, 0x4b,0x4b,0x3d,0x2c,0x1d,0xba,0xba,0xe7,0xe7,0x20,0x88,0x45,0x4b,0x4c,0x4c,0x4d, 0x4b,0x4c,0x3e,0x2e,0x1f,0xbc,0xbd,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x56,0xcf, 0xfd,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x22,0x8b,0x45,0x49,0x4b,0x4b,0x4b, 0x4b,0x4c,0x40,0x30,0x24,0xbd,0xbd,0xe7,0xe7,0x24,0x8d,0x44,0x4a,0x4b,0x4b,0x4b, 0x4b,0x4d,0x42,0x32,0x24,0xbd,0xbd,0xe7,0xe7,0x25,0x8f,0x44,0x49,0x4a,0x4a,0x4a, 0x4c,0x4f,0x44,0x34,0x26,0xbd,0xbd,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x5f,0xcf, 0xfd,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x2b,0x92,0x51,0x56,0x58,0x57,0x57, 0x57,0x55,0x47,0x36,0x27,0xbd,0xbd,0xe7,0xe7,0x28,0x90,0x4d,0x53,0x54,0x54,0x53, 0x51,0x52,0x44,0x34,0x25,0xbd,0xbd,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x58,0xcf, 0xfd,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x22,0x8b,0x45,0x48,0x49,0x49,0x49, 0x49,0x4a,0x3e,0x2d,0x20,0xbd,0xbd,0xe7,0xe7,0x20,0x89,0x3e,0x44,0x45,0x45,0x45, 0x45,0x47,0x3b,0x2a,0x1c,0xbb,0xbb,0xe7,0xe7,0x1c,0x85,0x3a,0x3f,0x40,0x40,0x40, 0x41,0x43,0x38,0x28,0x1a,0xb9,0xb9,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x50,0xcf, 0xfd,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x1b,0x83,0x42,0x47,0x48,0x47,0x47, 0x47,0x46,0x38,0x27,0x17,0xb4,0xb4,0xe7,0xe7,0x19,0x81,0x3d,0x43,0x44,0x44,0x44, 0x42,0x43,0x34,0x24,0x15,0xb2,0xb2,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x49,0xc9, 0xfd,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x12,0x7b,0x35,0x39,0x3a,0x39,0x39, 0x39,0x3a,0x2e,0x1e,0x11,0xad,0xad,0xe5,0xe5,0x10,0x79,0x2f,0x34,0x35,0x35,0x35, 0x35,0x37,0x2b,0x1a,0x0c,0xab,0xab,0xe3,0xe3,0x0c,0x75,0x2a,0x2f,0x30,0x30,0x30, 0x31,0x33,0x28,0x18,0x0a,0xa9,0xa9,0xe1,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0x40,0xc0, 0xfd,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xde,0x0b,0x73,0x32,0x37,0x39,0x38,0x37, 0x37,0x36,0x28,0x17,0x08,0xa5,0xa4,0xdc,0xdc,0x09,0x71,0x2e,0x34,0x34,0x34,0x34, 0x32,0x33,0x25,0x15,0x08,0xa2,0xa2,0xda,0xda,0xda,0xda,0xda,0xd9,0xd9,0x39,0xb9, 0xf6,0xd9,0xd9,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0x08,0x6b,0x25,0x29,0x2a,0x2a,0x2a, 0x2a,0x2a,0x1e,0x12,0x08,0x9e,0x9e,0xd6,0xd5,0x08,0x69,0x1f,0x25,0x26,0x26,0x25, 0x25,0x27,0x1d,0x11,0x06,0x9c,0x9b,0xd3,0xd3,0x06,0x66,0x1e,0x21,0x22,0x22,0x22, 0x23,0x25,0x1d,0x11,0x06,0x99,0x99,0xd1,0xd1,0xd1,0xd1,0xd0,0xd0,0xd0,0x30,0xb0, 0xed,0xd0,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0x09,0x63,0x27,0x2a,0x2c,0x2b,0x2b, 0x2b,0x2a,0x20,0x13,0x08,0x95,0x95,0xcc,0xcc,0x09,0x61,0x25,0x2a,0x2a,0x2a,0x2a, 0x29,0x2a,0x1f,0x13,0x08,0x93,0x93,0xca,0xca,0xca,0xca,0xca,0xca,0xca,0x30,0xa9, 0xe6,0xc9,0xc9,0xc9,0xc9,0xc8,0xc8,0xc8,0xc8,0x08,0x5c,0x22,0x25,0x26,0x26,0x26, 0x26,0x27,0x1e,0x12,0x08,0x8e,0x8e,0xc6,0xc6,0x08,0x59,0x1f,0x24,0x24,0x24,0x24, 0x24,0x26,0x1d,0x11,0x06,0x8c,0x8c,0xc4,0xc3,0x06,0x56,0x1e,0x21,0x22,0x22,0x22, 0x23,0x25,0x1d,0x11,0x06,0x8a,0x8a,0xc1,0xc1,0xc1,0xc1,0xc1,0xc1,0xc1,0x30,0xa0, 0xdf,0xc0,0xc0,0xc0,0xc1,0xc1,0xc1,0xc1,0xc1,0x08,0x4a,0x23,0x27,0x27,0x29,0x2b, 0x2c,0x2e,0x24,0x15,0x09,0x88,0x88,0xc3,0xc3,0x08,0x49,0x22,0x25,0x26,0x27,0x29, 0x2b,0x2d,0x23,0x15,0x09,0x8a,0x8a,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0x30,0xa7, 0xe6,0xc7,0xc7,0xc7,0xc7,0xc8,0xc8,0xc8,0xc8,0x07,0x49,0x1e,0x21,0x23,0x26,0x27, 0x29,0x2a,0x21,0x13,0x08,0x8f,0x8f,0xca,0xca,0x06,0x4c,0x1d,0x21,0x22,0x24,0x27, 0x27,0x28,0x1f,0x13,0x08,0x91,0x91,0xcc,0xcc,0x06,0x4e,0x1b,0x1e,0x21,0x23,0x24, 0x27,0x28,0x1f,0x12,0x08,0x93,0x93,0xce,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0x30,0xb0, 0xef,0xd0,0xd0,0xd0,0xd0,0xd0,0xd1,0xd1,0xd1,0x08,0x54,0x23,0x27,0x27,0x29,0x2c, 0x2d,0x30,0x24,0x15,0x09,0x98,0x98,0xd3,0xd3,0x08,0x55,0x22,0x26,0x27,0x29,0x2b, 0x2e,0x30,0x24,0x15,0x09,0x9a,0x9a,0xd5,0xd5,0xd6,0xd6,0xd6,0xd6,0xd6,0x36,0xb6, 0xf6,0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,0xd8,0xd8,0x07,0x59,0x20,0x25,0x27,0x2c,0x2d, 0x30,0x32,0x26,0x13,0x08,0x9e,0x9f,0xda,0xda,0x06,0x5b,0x21,0x26,0x29,0x2c,0x2f, 0x30,0x31,0x25,0x15,0x08,0xa1,0xa1,0xdc,0xdc,0x06,0x5d,0x21,0x25,0x2a,0x2c,0x2e, 0x31,0x33,0x28,0x17,0x09,0xa3,0xa3,0xde,0xde,0xdf,0xdf,0xdf,0xdf,0xdf,0x3f,0xbf, 0xff,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0x0c,0x64,0x30,0x35,0x36,0x38,0x3b, 0x3d,0x40,0x32,0x1f,0x0f,0xa7,0xa7,0xe3,0xe3,0x0e,0x65,0x31,0x35,0x36,0x39,0x3b, 0x3e,0x40,0x33,0x20,0x10,0xaa,0xaa,0xe5,0xe5,0xe5,0xe5,0xe5,0xe6,0xe6,0x46,0xc6, 0xff,0xe6,0xe6,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x11,0x69,0x30,0x35,0x37,0x3b,0x3c, 0x3f,0x42,0x36,0x23,0x14,0xae,0xae,0xe7,0xe7,0x13,0x6b,0x31,0x36,0x38,0x3b,0x3f, 0x40,0x41,0x35,0x25,0x16,0xb0,0xb1,0xe7,0xe7,0x14,0x6d,0x30,0x34,0x3a,0x3c,0x3e, 0x41,0x43,0x37,0x26,0x19,0xb3,0xb3,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x4f,0xcf, 0xff,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x1c,0x74,0x40,0x45,0x46,0x48,0x4b, 0x4d,0x50,0x42,0x2f,0x1f,0xb7,0xb7,0xe7,0xe7,0x1e,0x75,0x41,0x45,0x46,0x48,0x4b, 0x4e,0x50,0x43,0x30,0x20,0xb9,0xba,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x56,0xcf, 0xff,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x21,0x78,0x3f,0x44,0x47,0x4b,0x4c, 0x4f,0x51,0x45,0x32,0x24,0xbb,0xbb,0xe7,0xe7,0x22,0x7a,0x41,0x46,0x48,0x4b,0x4e, 0x4f,0x50,0x45,0x35,0x26,0xbb,0xbb,0xe7,0xe7,0x24,0x7d,0x40,0x44,0x49,0x4b,0x4d, 0x51,0x53,0x47,0x36,0x28,0xbb,0xbb,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x5f,0xcf, 0xff,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x29,0x80,0x4c,0x51,0x52,0x54,0x57, 0x58,0x5a,0x4c,0x39,0x29,0xbb,0xbb,0xe7,0xe7,0x26,0x7d,0x49,0x4d,0x4e,0x50,0x51, 0x54,0x56,0x49,0x36,0x26,0xbb,0xbb,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x58,0xcf, 0xff,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x21,0x78,0x3f,0x43,0x45,0x49,0x4a, 0x4d,0x4f,0x43,0x2f,0x20,0xba,0xba,0xe7,0xe7,0x1e,0x76,0x3b,0x40,0x42,0x45,0x48, 0x49,0x4a,0x3d,0x2d,0x1e,0xb8,0xb8,0xe7,0xe7,0x1b,0x73,0x36,0x3a,0x3f,0x41,0x43, 0x46,0x47,0x3b,0x2a,0x1c,0xb6,0xb6,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x50,0xcf, 0xff,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x19,0x71,0x3d,0x42,0x42,0x44,0x47, 0x48,0x4b,0x3d,0x2a,0x19,0xb1,0xb1,0xe7,0xe7,0x17,0x6e,0x39,0x3d,0x3e,0x40,0x42, 0x45,0x47,0x39,0x26,0x16,0xaf,0xaf,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x49,0xc9, 0xff,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x11,0x68,0x2f,0x34,0x36,0x39,0x3a, 0x3d,0x3f,0x33,0x20,0x11,0xaa,0xaa,0xe5,0xe5,0x0e,0x66,0x2c,0x30,0x32,0x35,0x38, 0x39,0x3a,0x2e,0x1d,0x0e,0xa8,0xa8,0xe3,0xe3,0x0b,0x63,0x26,0x2a,0x2f,0x31,0x33, 0x36,0x37,0x2b,0x1a,0x0c,0xa6,0xa6,0xe1,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0x40,0xc0, 0xff,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xde,0x09,0x61,0x2d,0x32,0x33,0x35,0x37, 0x38,0x3b,0x2d,0x1a,0x0a,0xa2,0xa1,0xdc,0xdc,0x08,0x5e,0x2a,0x2e,0x2e,0x30,0x32, 0x35,0x37,0x2a,0x17,0x09,0x9f,0x9f,0xda,0xda,0xda,0xda,0xd9,0xd9,0xd9,0x39,0xb9, 0xf8,0xd9,0xd9,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0x07,0x58,0x1f,0x24,0x26,0x2a,0x2b, 0x2e,0x2f,0x23,0x13,0x08,0x9b,0x9b,0xd6,0xd5,0x06,0x56,0x1d,0x21,0x23,0x26,0x28, 0x29,0x2a,0x1f,0x13,0x08,0x99,0x98,0xd3,0xd3,0x06,0x54,0x1b,0x1e,0x21,0x23,0x24, 0x27,0x28,0x1f,0x12,0x08,0x96,0x96,0xd1,0xd1,0xd1,0xd1,0xd0,0xd0,0xd0,0x30,0xb0, 0xef,0xd0,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0x08,0x51,0x23,0x27,0x27,0x29,0x2b, 0x2c,0x2e,0x24,0x15,0x09,0x92,0x92,0xcc,0xcc,0x08,0x4e,0x22,0x25,0x26,0x27,0x29, 0x2b,0x2d,0x23,0x15,0x09,0x90,0x90,0xca,0xca,0xca,0xca,0xca,0xca,0xca,0x30,0xa9, 0xe8,0xc9,0xc9,0xc9,0xc9,0xc8,0xc8,0xc8,0xc8,0x07,0x49,0x1e,0x21,0x23,0x26,0x27, 0x29,0x2a,0x21,0x13,0x08,0x8b,0x8b,0xc6,0xc6,0x06,0x49,0x1d,0x21,0x22,0x24,0x27, 0x27,0x28,0x1f,0x13,0x08,0x89,0x89,0xc4,0xc3,0x06,0x49,0x1b,0x1e,0x21,0x23,0x24, 0x27,0x28,0x1f,0x12,0x08,0x87,0x86,0xc1,0xc1,0xc1,0xc1,0xc1,0xc1,0xc0,0x30,0xa0, 0xdf,0xc0,0xc0,0xc1,0xc1,0xc1,0xc1,0xc1,0xc1,0x08,0x3b,0x22,0x28,0x2a,0x2c,0x2f, 0x30,0x31,0x27,0x17,0x0a,0x86,0x86,0xc3,0xc3,0x07,0x3b,0x21,0x26,0x29,0x2b,0x2c, 0x2f,0x30,0x26,0x16,0x09,0x88,0x88,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0x30,0xa7, 0xe6,0xc7,0xc7,0xc7,0xc7,0xc8,0xc8,0xc8,0xc8,0x06,0x3a,0x1e,0x24,0x27,0x29,0x2a, 0x2c,0x2e,0x23,0x15,0x09,0x8d,0x8d,0xca,0xca,0x06,0x3a,0x1d,0x22,0x26,0x27,0x29, 0x2b,0x2d,0x23,0x14,0x08,0x8f,0x8f,0xcc,0xcc,0x05,0x3b,0x1d,0x21,0x24,0x26,0x27, 0x2a,0x2a,0x21,0x14,0x08,0x91,0x91,0xce,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0x30,0xb0, 0xef,0xd0,0xd0,0xd0,0xd0,0xd0,0xd1,0xd1,0xd1,0x08,0x40,0x22,0x28,0x2b,0x2d,0x31, 0x33,0x34,0x27,0x17,0x0a,0x96,0x96,0xd3,0xd3,0x07,0x42,0x21,0x27,0x2b,0x2e,0x2f, 0x33,0x34,0x28,0x16,0x09,0x98,0x98,0xd5,0xd5,0xd6,0xd6,0xd6,0xd6,0xd6,0x36,0xb6, 0xf6,0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,0xd8,0xd8,0x06,0x46,0x21,0x28,0x2c,0x30,0x32, 0x34,0x37,0x28,0x16,0x09,0x9d,0x9d,0xda,0xda,0x06,0x48,0x21,0x28,0x2e,0x2f,0x32, 0x35,0x37,0x2a,0x16,0x08,0x9f,0x9f,0xdc,0xdc,0x05,0x4a,0x24,0x2a,0x2e,0x30,0x32, 0x36,0x36,0x2b,0x19,0x09,0xa1,0xa1,0xde,0xde,0xdf,0xdf,0xdf,0xdf,0xdf,0x3f,0xbf, 0xff,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0x0c,0x50,0x2f,0x37,0x3a,0x3c,0x40, 0x43,0x44,0x36,0x21,0x10,0xa5,0xa5,0xe3,0xe3,0x0d,0x52,0x2f,0x36,0x3a,0x3e,0x3f, 0x43,0x44,0x37,0x22,0x11,0xa8,0xa8,0xe5,0xe5,0xe5,0xe5,0xe5,0xe6,0xe6,0x46,0xc6, 0xff,0xe6,0xe6,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x0f,0x56,0x31,0x38,0x3c,0x3f,0x41, 0x43,0x47,0x38,0x26,0x16,0xac,0xac,0xe7,0xe7,0x12,0x58,0x31,0x38,0x3d,0x3e,0x42, 0x45,0x47,0x3a,0x26,0x16,0xae,0xaf,0xe7,0xe7,0x13,0x5a,0x33,0x39,0x3e,0x40,0x42, 0x46,0x46,0x3a,0x28,0x19,0xb1,0xb1,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x4f,0xcf, 0xff,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x1c,0x60,0x3f,0x47,0x4a,0x4c,0x50, 0x53,0x54,0x46,0x31,0x20,0xb5,0xb5,0xe7,0xe7,0x1d,0x62,0x3f,0x46,0x4a,0x4d,0x4f, 0x53,0x54,0x47,0x32,0x21,0xb7,0xb8,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x56,0xcf, 0xff,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x1f,0x65,0x40,0x48,0x4c,0x4f,0x51, 0x53,0x56,0x47,0x35,0x26,0xb9,0xb9,0xe7,0xe7,0x21,0x67,0x41,0x48,0x4d,0x4e,0x51, 0x54,0x56,0x4a,0x36,0x26,0xb9,0xb9,0xe7,0xe7,0x23,0x6a,0x43,0x49,0x4d,0x4f,0x51, 0x56,0x56,0x4a,0x38,0x28,0xb9,0xb9,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x5f,0xcf, 0xff,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x29,0x6c,0x4b,0x53,0x56,0x58,0x5c, 0x5e,0x5e,0x50,0x3b,0x2a,0xb9,0xb9,0xe7,0xe7,0x25,0x6a,0x47,0x4e,0x52,0x55,0x55, 0x59,0x5a,0x4d,0x38,0x27,0xb9,0xb9,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x58,0xcf, 0xff,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x1f,0x65,0x3f,0x46,0x4a,0x4d,0x4f, 0x51,0x54,0x45,0x32,0x22,0xb8,0xb8,0xe7,0xe7,0x1d,0x63,0x3b,0x42,0x47,0x48,0x4b, 0x4e,0x50,0x42,0x2e,0x1e,0xb6,0xb6,0xe7,0xe7,0x19,0x60,0x39,0x3f,0x43,0x45,0x47, 0x4a,0x4a,0x3e,0x2c,0x1c,0xb4,0xb4,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x50,0xcf, 0xff,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x19,0x5d,0x3c,0x44,0x46,0x48,0x4c, 0x4e,0x4f,0x41,0x2c,0x1a,0xaf,0xaf,0xe7,0xe7,0x16,0x5b,0x37,0x3e,0x42,0x45,0x46, 0x4a,0x4b,0x3d,0x28,0x17,0xad,0xad,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x49,0xc9, 0xff,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x0f,0x55,0x30,0x37,0x3b,0x3d,0x3f, 0x41,0x44,0x35,0x23,0x13,0xa8,0xa8,0xe5,0xe5,0x0d,0x53,0x2c,0x32,0x37,0x38,0x3b, 0x3e,0x40,0x33,0x1e,0x0e,0xa6,0xa6,0xe3,0xe3,0x0a,0x50,0x29,0x2f,0x33,0x35,0x37, 0x3b,0x3a,0x2e,0x1c,0x0c,0xa4,0xa4,0xe1,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0x40,0xc0, 0xff,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xde,0x09,0x4d,0x2c,0x34,0x37,0x39,0x3c, 0x3e,0x3f,0x31,0x1c,0x0b,0xa0,0x9f,0xdc,0xdc,0x07,0x4b,0x28,0x2f,0x32,0x35,0x36, 0x3a,0x3b,0x2e,0x19,0x09,0x9d,0x9d,0xda,0xda,0xda,0xda,0xd9,0xd9,0xd9,0x39,0xb9, 0xf8,0xd9,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0x06,0x45,0x20,0x27,0x2b,0x2e,0x30, 0x32,0x34,0x25,0x15,0x09,0x99,0x99,0xd6,0xd5,0x06,0x43,0x1d,0x23,0x28,0x29,0x2b, 0x2e,0x30,0x23,0x14,0x08,0x97,0x96,0xd3,0xd3,0x05,0x41,0x1d,0x21,0x24,0x26,0x27, 0x2b,0x2b,0x21,0x14,0x08,0x94,0x94,0xd1,0xd1,0xd1,0xd1,0xd0,0xd0,0xd0,0x30,0xb0, 0xef,0xd0,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0x08,0x3d,0x22,0x28,0x2a,0x2c,0x2f, 0x30,0x31,0x27,0x17,0x0a,0x90,0x90,0xcc,0xcc,0x07,0x3b,0x21,0x26,0x29,0x2b,0x2c, 0x2f,0x30,0x26,0x16,0x09,0x8e,0x8e,0xca,0xca,0xca,0xca,0xca,0xca,0xca,0x30,0xa9, 0xe8,0xc9,0xc9,0xc9,0xc9,0xc8,0xc8,0xc8,0xc8,0x06,0x3a,0x1e,0x24,0x27,0x29,0x2a, 0x2c,0x2e,0x23,0x15,0x09,0x89,0x89,0xc6,0xc6,0x06,0x3a,0x1d,0x22,0x26,0x27,0x29, 0x2b,0x2d,0x23,0x14,0x08,0x87,0x87,0xc4,0xc3,0x05,0x3a,0x1d,0x21,0x24,0x26,0x27, 0x2a,0x2a,0x21,0x14,0x08,0x85,0x84,0xc1,0xc1,0xc1,0xc1,0xc1,0xc1,0xc0,0x30,0xa0, 0xdf,0xc0,0xc0,0xc1,0xc1,0xc1,0xc1,0xc1,0xc1,0x08,0x2d,0x25,0x2b,0x2f,0x30,0x32, 0x33,0x34,0x29,0x18,0x0b,0x83,0x83,0xc3,0xc3,0x08,0x2d,0x24,0x2a,0x2c,0x2f,0x30, 0x33,0x33,0x27,0x18,0x0b,0x85,0x85,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0x30,0xa7, 0xe6,0xc7,0xc7,0xc7,0xc7,0xc8,0xc8,0xc8,0xc8,0x06,0x2d,0x22,0x28,0x2a,0x2c,0x2f, 0x30,0x31,0x26,0x17,0x0a,0x8a,0x8a,0xca,0xca,0x06,0x2d,0x21,0x26,0x29,0x2b,0x2c, 0x2f,0x30,0x26,0x16,0x09,0x8c,0x8c,0xcc,0xcc,0x06,0x2d,0x1f,0x25,0x27,0x2a,0x2b, 0x2d,0x2f,0x24,0x16,0x09,0x8e,0x8e,0xcd,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0x30,0xb0, 0xef,0xd0,0xd0,0xd0,0xd0,0xd0,0xd1,0xd1,0xd1,0x08,0x2e,0x25,0x2b,0x31,0x32,0x35, 0x36,0x38,0x29,0x18,0x0b,0x93,0x93,0xd3,0xd3,0x08,0x30,0x24,0x2d,0x2f,0x33,0x35, 0x38,0x39,0x2a,0x18,0x0b,0x95,0x95,0xd5,0xd5,0xd6,0xd6,0xd6,0xd6,0xd6,0x36,0xb6, 0xf6,0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,0xd8,0xd8,0x06,0x34,0x26,0x2e,0x31,0x34,0x38, 0x3a,0x3b,0x2c,0x18,0x0a,0x9a,0x9a,0xda,0xda,0x06,0x36,0x26,0x2e,0x32,0x35,0x36, 0x3a,0x3b,0x2e,0x1a,0x09,0x9c,0x9c,0xdc,0xdc,0x06,0x38,0x27,0x2f,0x32,0x36,0x37, 0x3a,0x3c,0x2e,0x1c,0x0b,0x9e,0x9e,0xdd,0xde,0xdf,0xdf,0xdf,0xdf,0xdf,0x3f,0xbf, 0xff,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0x0c,0x3e,0x33,0x3b,0x40,0x41,0x44, 0x46,0x48,0x39,0x23,0x11,0xa2,0xa2,0xe3,0xe3,0x0e,0x40,0x33,0x3c,0x3e,0x43,0x45, 0x48,0x49,0x39,0x25,0x13,0xa5,0xa5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe6,0xe6,0x46,0xc6, 0xff,0xe6,0xe6,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x10,0x44,0x36,0x3e,0x41,0x43,0x47, 0x49,0x4b,0x3c,0x28,0x17,0xa9,0xa9,0xe7,0xe7,0x13,0x46,0x36,0x3d,0x41,0x44,0x46, 0x4a,0x4b,0x3e,0x29,0x18,0xab,0xac,0xe7,0xe7,0x15,0x48,0x36,0x3e,0x42,0x46,0x47, 0x4a,0x4c,0x3d,0x2b,0x1b,0xae,0xae,0xe6,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x4f,0xcf, 0xff,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x1c,0x4e,0x43,0x4b,0x50,0x51,0x54, 0x56,0x58,0x49,0x33,0x21,0xb2,0xb2,0xe7,0xe7,0x1e,0x50,0x43,0x4c,0x4e,0x53,0x55, 0x58,0x59,0x49,0x35,0x23,0xb5,0xb5,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x56,0xcf, 0xff,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x20,0x53,0x45,0x4e,0x51,0x53,0x57, 0x59,0x5a,0x4b,0x38,0x27,0xb7,0xb7,0xe7,0xe7,0x22,0x55,0x46,0x4d,0x51,0x54,0x55, 0x59,0x5a,0x4e,0x39,0x28,0xb7,0xb7,0xe7,0xe7,0x25,0x58,0x46,0x4e,0x51,0x55,0x56, 0x5a,0x5c,0x4d,0x3b,0x2a,0xb7,0xb7,0xe6,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x5f,0xcf, 0xff,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x29,0x5a,0x4f,0x57,0x5c,0x5d,0x60, 0x61,0x62,0x53,0x3d,0x2b,0xb7,0xb7,0xe7,0xe7,0x26,0x58,0x4b,0x54,0x56,0x5a,0x5b, 0x5e,0x5f,0x4f,0x3b,0x29,0xb7,0xb7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x58,0xcf, 0xff,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x20,0x53,0x44,0x4c,0x4f,0x51,0x55, 0x57,0x58,0x48,0x34,0x23,0xb5,0xb5,0xe7,0xe7,0x1e,0x51,0x40,0x47,0x4b,0x4e,0x4f, 0x53,0x54,0x46,0x31,0x20,0xb3,0xb3,0xe7,0xe7,0x1b,0x4e,0x3c,0x44,0x47,0x4b,0x4c, 0x4e,0x50,0x41,0x2f,0x1e,0xb1,0xb1,0xe6,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x50,0xcf, 0xff,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x19,0x4b,0x40,0x48,0x4c,0x4d,0x50, 0x51,0x53,0x44,0x2e,0x1b,0xac,0xac,0xe7,0xe7,0x17,0x49,0x3b,0x44,0x46,0x4a,0x4c, 0x4f,0x50,0x3f,0x2b,0x19,0xaa,0xaa,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x49,0xc9, 0xff,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x10,0x43,0x35,0x3d,0x40,0x41,0x45, 0x47,0x48,0x39,0x25,0x14,0xa5,0xa5,0xe5,0xe5,0x0e,0x41,0x31,0x37,0x3b,0x3e,0x3f, 0x43,0x44,0x37,0x21,0x10,0xa3,0xa3,0xe3,0xe3,0x0c,0x3e,0x2c,0x34,0x37,0x3b,0x3c, 0x3f,0x40,0x31,0x1f,0x0e,0xa1,0xa1,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0x40,0xc0, 0xff,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xde,0x09,0x3b,0x30,0x38,0x3d,0x3e,0x40, 0x41,0x43,0x34,0x1e,0x0c,0x9d,0x9c,0xdc,0xdc,0x08,0x39,0x2c,0x35,0x36,0x3a,0x3c, 0x3f,0x40,0x30,0x1c,0x0b,0x9a,0x9a,0xda,0xda,0xda,0xda,0xd9,0xd9,0xd9,0x39,0xb9, 0xf8,0xd9,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0x06,0x33,0x25,0x2d,0x30,0x32,0x36, 0x38,0x38,0x29,0x17,0x0a,0x96,0x96,0xd6,0xd5,0x06,0x31,0x21,0x28,0x2c,0x2f,0x2f, 0x33,0x34,0x27,0x16,0x09,0x94,0x93,0xd3,0xd3,0x06,0x2f,0x1f,0x25,0x27,0x2b,0x2c, 0x2f,0x31,0x24,0x16,0x09,0x91,0x91,0xd0,0xd1,0xd1,0xd1,0xd0,0xd0,0xd0,0x30,0xb0, 0xef,0xd0,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0x08,0x2d,0x25,0x2b,0x2f,0x30,0x32, 0x33,0x34,0x29,0x18,0x0b,0x8d,0x8d,0xcc,0xcc,0x08,0x2d,0x24,0x2a,0x2c,0x2f,0x30, 0x33,0x33,0x27,0x18,0x0b,0x8b,0x8b,0xca,0xca,0xca,0xca,0xca,0xca,0xca,0x30,0xa9, 0xe8,0xc9,0xc9,0xc9,0xc9,0xc8,0xc8,0xc8,0xc8,0x06,0x2d,0x22,0x28,0x2a,0x2c,0x2f, 0x30,0x31,0x26,0x17,0x0a,0x86,0x86,0xc6,0xc6,0x06,0x2d,0x21,0x26,0x29,0x2b,0x2c, 0x2f,0x30,0x26,0x16,0x09,0x84,0x84,0xc4,0xc3,0x06,0x2d,0x1f,0x25,0x27,0x2a,0x2b, 0x2d,0x2f,0x24,0x16,0x09,0x82,0x81,0xc0,0xc1,0xc1,0xc1,0xc1,0xc1,0xc0,0x30,0xa0, 0xdf,0xc0,0xc0,0xc1,0xc1,0xc1,0xc1,0xc1,0xc1,0x09,0x21,0x28,0x2f,0x30,0x33,0x35, 0x37,0x38,0x2c,0x1b,0x0c,0x80,0x81,0xc3,0xc4,0x09,0x21,0x27,0x2e,0x30,0x32,0x33, 0x35,0x36,0x2a,0x1b,0x0b,0x82,0x83,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0x30,0xa7, 0xe6,0xc7,0xc7,0xc7,0xc7,0xc8,0xc8,0xc8,0xc8,0x08,0x21,0x24,0x2a,0x2d,0x30,0x30, 0x33,0x34,0x29,0x19,0x0b,0x87,0x88,0xca,0xca,0x08,0x20,0x24,0x2a,0x2c,0x2f,0x30, 0x33,0x33,0x28,0x18,0x0b,0x89,0x8a,0xcc,0xcc,0x07,0x20,0x22,0x28,0x2b,0x2d,0x2f, 0x30,0x32,0x27,0x18,0x0a,0x8b,0x8c,0xce,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0x30,0xb0, 0xef,0xd0,0xd0,0xd0,0xd0,0xd0,0xd1,0xd1,0xd1,0x09,0x21,0x28,0x30,0x33,0x36,0x39, 0x3c,0x3d,0x2d,0x1b,0x0c,0x90,0x91,0xd3,0xd3,0x09,0x21,0x29,0x32,0x35,0x37,0x38, 0x3b,0x3d,0x2e,0x1b,0x0b,0x92,0x93,0xd5,0xd5,0xd6,0xd6,0xd6,0xd6,0xd6,0x36,0xb6, 0xf6,0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,0xd8,0xd8,0x08,0x24,0x28,0x31,0x35,0x39,0x3a, 0x3d,0x3f,0x30,0x1b,0x0b,0x97,0x98,0xda,0xda,0x08,0x25,0x2a,0x34,0x36,0x3a,0x3c, 0x3f,0x40,0x31,0x1d,0x0b,0x99,0x9a,0xdc,0xdc,0x07,0x28,0x2b,0x33,0x37,0x3a,0x3c, 0x3e,0x40,0x33,0x1f,0x0c,0x9b,0x9c,0xde,0xde,0xdf,0xdf,0xdf,0xdf,0xdf,0x3f,0xbf, 0xff,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe1,0x0e,0x2e,0x37,0x40,0x42,0x45,0x48, 0x4c,0x4d,0x3d,0x26,0x12,0x9f,0xa0,0xe3,0xe3,0x10,0x30,0x38,0x41,0x44,0x47,0x48, 0x4b,0x4d,0x3d,0x28,0x13,0xa2,0xa3,0xe5,0xe5,0xe5,0xe5,0xe5,0xe6,0xe6,0x46,0xc6, 0xff,0xe6,0xe6,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x12,0x34,0x38,0x41,0x45,0x48,0x49, 0x4c,0x4f,0x40,0x2b,0x18,0xa6,0xa7,0xe7,0xe7,0x15,0x35,0x3a,0x43,0x45,0x49,0x4c, 0x4f,0x50,0x41,0x2c,0x1a,0xa8,0xaa,0xe7,0xe7,0x16,0x37,0x3a,0x42,0x47,0x4a,0x4c, 0x4e,0x50,0x42,0x2e,0x1c,0xab,0xac,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x4f,0xcf, 0xff,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x1e,0x3e,0x47,0x50,0x52,0x55,0x58, 0x5c,0x5d,0x4d,0x36,0x22,0xaf,0xb0,0xe7,0xe7,0x20,0x40,0x48,0x51,0x54,0x57,0x58, 0x5b,0x5d,0x4d,0x38,0x23,0xb2,0xb3,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x56,0xcf, 0xff,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x22,0x43,0x47,0x51,0x55,0x58,0x59, 0x5c,0x5e,0x4f,0x3b,0x28,0xb5,0xb5,0xe7,0xe7,0x24,0x45,0x4a,0x53,0x55,0x59,0x5b, 0x5e,0x60,0x51,0x3c,0x2a,0xb5,0xb5,0xe7,0xe7,0x26,0x47,0x4a,0x52,0x56,0x59,0x5b, 0x5e,0x60,0x52,0x3e,0x2b,0xb5,0xb5,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x5f,0xcf, 0xff,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x2b,0x4a,0x53,0x5c,0x5e,0x61,0x64, 0x67,0x67,0x57,0x40,0x2c,0xb5,0xb5,0xe7,0xe7,0x28,0x48,0x50,0x59,0x5c,0x5e,0x5e, 0x61,0x63,0x53,0x3e,0x29,0xb5,0xb5,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x58,0xcf, 0xff,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x22,0x43,0x46,0x4f,0x53,0x56,0x57, 0x5a,0x5c,0x4c,0x37,0x24,0xb2,0xb3,0xe7,0xe7,0x20,0x40,0x44,0x4d,0x4f,0x53,0x55, 0x58,0x59,0x49,0x34,0x22,0xb0,0xb1,0xe7,0xe7,0x1c,0x3d,0x40,0x48,0x4c,0x4f,0x51, 0x52,0x54,0x46,0x32,0x1f,0xae,0xaf,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x4f,0xcf, 0xff,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x1b,0x3b,0x44,0x4d,0x4e,0x51,0x54, 0x57,0x58,0x48,0x31,0x1c,0xa9,0xaa,0xe7,0xe7,0x19,0x39,0x40,0x49,0x4c,0x4e,0x4f, 0x52,0x54,0x43,0x2e,0x19,0xa7,0xa8,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x49,0xc9, 0xff,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x12,0x33,0x37,0x40,0x44,0x46,0x47, 0x4a,0x4c,0x3d,0x28,0x15,0xa2,0xa3,0xe5,0xe5,0x10,0x30,0x35,0x3d,0x3f,0x43,0x45, 0x48,0x49,0x3a,0x24,0x12,0xa0,0xa1,0xe3,0xe3,0x0d,0x2d,0x30,0x38,0x3c,0x3f,0x41, 0x43,0x44,0x36,0x22,0x0f,0x9e,0x9f,0xe1,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0x40,0xc0, 0xff,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xde,0x0b,0x2b,0x34,0x3d,0x3f,0x42,0x44, 0x47,0x48,0x38,0x21,0x0d,0x9a,0x9a,0xdc,0xdc,0x09,0x29,0x31,0x3a,0x3c,0x3e,0x3f, 0x42,0x44,0x34,0x1f,0x0b,0x97,0x98,0xda,0xda,0xda,0xda,0xd9,0xd9,0xd9,0x39,0xb9, 0xf8,0xd9,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0x08,0x23,0x27,0x30,0x34,0x37,0x38, 0x3a,0x3c,0x2d,0x19,0x0b,0x93,0x94,0xd6,0xd5,0x08,0x20,0x25,0x2e,0x30,0x34,0x35, 0x38,0x39,0x2a,0x18,0x0b,0x91,0x91,0xd3,0xd3,0x07,0x20,0x22,0x29,0x2c,0x2f,0x31, 0x33,0x35,0x27,0x18,0x0a,0x8e,0x8f,0xd1,0xd1,0xd1,0xd1,0xd0,0xd0,0xd0,0x30,0xb0, 0xef,0xd0,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0x09,0x21,0x28,0x2f,0x30,0x33,0x35, 0x37,0x38,0x2c,0x1b,0x0c,0x8a,0x8b,0xcc,0xcc,0x09,0x21,0x27,0x2e,0x30,0x32,0x33, 0x35,0x36,0x2a,0x1b,0x0b,0x88,0x89,0xca,0xca,0xca,0xca,0xca,0xca,0xca,0x30,0xa9, 0xe8,0xc9,0xc9,0xc9,0xc9,0xc8,0xc8,0xc8,0xc8,0x08,0x21,0x24,0x2a,0x2d,0x30,0x30, 0x33,0x34,0x29,0x19,0x0b,0x83,0x84,0xc6,0xc6,0x08,0x20,0x24,0x2a,0x2c,0x2f,0x30, 0x33,0x33,0x28,0x18,0x0b,0x81,0x82,0xc4,0xc3,0x07,0x20,0x22,0x28,0x2b,0x2d,0x2f, 0x30,0x32,0x27,0x18,0x0a,0x7f,0x7f,0xc1,0xc1,0xc1,0xc1,0xc1,0xc1,0xc0,0x30,0xa0, 0xdf,0xc1,0xc1,0xc2,0xc2,0xc2,0xc2,0xc2,0xc2,0x0a,0x19,0x2b,0x32,0x35,0x36,0x39, 0x3a,0x3c,0x2e,0x1c,0x0c,0x7f,0x7f,0xc4,0xc5,0x09,0x19,0x2b,0x31,0x33,0x35,0x37, 0x39,0x39,0x2d,0x1b,0x0c,0x81,0x81,0xc7,0xc7,0xc7,0xc7,0xc7,0xc7,0xc7,0x30,0xa7, 0xe6,0xc8,0xc8,0xc8,0xc8,0xc9,0xc9,0xc9,0xc9,0x09,0x18,0x28,0x2f,0x30,0x33,0x35, 0x36,0x38,0x2c,0x1b,0x0c,0x86,0x86,0xcb,0xcb,0x09,0x16,0x27,0x2d,0x30,0x32,0x33, 0x35,0x36,0x2a,0x1a,0x0b,0x88,0x88,0xcd,0xcd,0x08,0x15,0x27,0x2d,0x2f,0x30,0x33, 0x34,0x35,0x29,0x19,0x0b,0x8a,0x8a,0xcf,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0x30,0xb0, 0xef,0xd1,0xd1,0xd1,0xd1,0xd1,0xd2,0xd2,0xd2,0x0a,0x19,0x2b,0x34,0x39,0x3a,0x3e, 0x40,0x42,0x30,0x1c,0x0c,0x8f,0x8f,0xd4,0xd4,0x09,0x19,0x2e,0x36,0x38,0x3b,0x3e, 0x40,0x41,0x31,0x1b,0x0c,0x91,0x91,0xd6,0xd6,0xd7,0xd7,0xd7,0xd7,0xd7,0x36,0xb6, 0xf6,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd9,0xd9,0x09,0x18,0x2e,0x37,0x39,0x3d,0x40, 0x41,0x44,0x34,0x1d,0x0c,0x96,0x96,0xdb,0xdb,0x09,0x18,0x2f,0x37,0x3b,0x3e,0x3f, 0x42,0x44,0x34,0x1f,0x0b,0x98,0x98,0xdd,0xdd,0x08,0x1a,0x31,0x39,0x3c,0x3e,0x41, 0x43,0x45,0x35,0x20,0x0d,0x9a,0x9a,0xdf,0xdf,0xe0,0xe0,0xe0,0xe0,0xe0,0x3f,0xbf, 0xff,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe2,0x0f,0x23,0x3b,0x44,0x48,0x49,0x4e, 0x50,0x52,0x40,0x28,0x13,0x9e,0x9f,0xe4,0xe4,0x10,0x25,0x3d,0x45,0x47,0x4b,0x4e, 0x50,0x51,0x40,0x29,0x15,0xa1,0xa1,0xe6,0xe6,0xe6,0xe6,0xe6,0xe7,0xe7,0x46,0xc6, 0xff,0xe7,0xe7,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0x13,0x28,0x3e,0x47,0x49,0x4c,0x4f, 0x50,0x54,0x44,0x2d,0x19,0xa5,0xa5,0xe8,0xe8,0x16,0x28,0x3f,0x46,0x4a,0x4d,0x4f, 0x52,0x54,0x44,0x2e,0x1a,0xa7,0xa8,0xe8,0xe8,0x17,0x29,0x40,0x48,0x4c,0x4e,0x51, 0x53,0x54,0x44,0x2f,0x1d,0xaa,0xaa,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0x4f,0xcf, 0xff,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0x1f,0x33,0x4b,0x54,0x58,0x59,0x5d, 0x60,0x62,0x50,0x38,0x23,0xae,0xae,0xe8,0xe8,0x20,0x35,0x4d,0x55,0x57,0x5b,0x5e, 0x60,0x61,0x50,0x39,0x25,0xb1,0xb1,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0x56,0xcf, 0xff,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0x23,0x37,0x4d,0x57,0x59,0x5c,0x5f, 0x60,0x63,0x53,0x3d,0x29,0xb4,0xb4,0xe8,0xe8,0x25,0x38,0x4f,0x56,0x5a,0x5d,0x5e, 0x61,0x64,0x54,0x3e,0x2a,0xb4,0xb4,0xe8,0xe8,0x27,0x39,0x50,0x58,0x5b,0x5d,0x60, 0x63,0x64,0x54,0x3f,0x2c,0xb4,0xb4,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0x5f,0xcf, 0xff,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0x2c,0x3f,0x57,0x60,0x64,0x65,0x69, 0x6b,0x6c,0x5a,0x42,0x2d,0xb4,0xb4,0xe8,0xe8,0x28,0x3d,0x55,0x5d,0x5f,0x62,0x64, 0x66,0x67,0x56,0x3f,0x2b,0xb4,0xb4,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0x58,0xcf, 0xff,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0x23,0x37,0x4c,0x55,0x57,0x5a,0x5d, 0x5e,0x61,0x50,0x39,0x25,0xb1,0xb1,0xe8,0xe8,0x21,0x33,0x49,0x50,0x54,0x57,0x58, 0x5b,0x5d,0x4c,0x36,0x22,0xaf,0xaf,0xe8,0xe8,0x1d,0x2f,0x46,0x4e,0x51,0x53,0x56, 0x57,0x58,0x48,0x33,0x20,0xad,0xad,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0x4f,0xcf, 0xff,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0x1c,0x30,0x48,0x51,0x54,0x55,0x59, 0x5b,0x5d,0x4b,0x33,0x1d,0xa8,0xa8,0xe8,0xe8,0x19,0x2e,0x45,0x4d,0x4f,0x52,0x55, 0x57,0x58,0x46,0x2f,0x1b,0xa6,0xa6,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0x49,0xc9, 0xff,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0x13,0x27,0x3d,0x46,0x48,0x4a,0x4d, 0x4e,0x51,0x41,0x2a,0x16,0xa1,0xa1,0xe6,0xe6,0x11,0x23,0x3a,0x40,0x44,0x47,0x48, 0x4b,0x4d,0x3d,0x26,0x12,0x9f,0x9f,0xe4,0xe4,0x0e,0x1f,0x36,0x3e,0x41,0x43,0x46, 0x48,0x48,0x38,0x23,0x10,0x9d,0x9d,0xe2,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0x40,0xc0, 0xff,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xdf,0x0c,0x20,0x38,0x41,0x45,0x46,0x49, 0x4b,0x4d,0x3b,0x23,0x0e,0x99,0x98,0xdd,0xdd,0x09,0x1e,0x36,0x3e,0x3f,0x42,0x45, 0x47,0x48,0x37,0x20,0x0c,0x96,0x96,0xdb,0xdb,0xdb,0xdb,0xda,0xda,0xda,0x39,0xb9, 0xf8,0xda,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0x09,0x18,0x2d,0x36,0x38,0x3b,0x3e, 0x3e,0x41,0x31,0x1b,0x0c,0x92,0x92,0xd6,0xd6,0x09,0x16,0x2a,0x31,0x35,0x38,0x38, 0x3b,0x3d,0x2d,0x1a,0x0b,0x90,0x8f,0xd4,0xd4,0x08,0x15,0x27,0x2f,0x31,0x33,0x36, 0x38,0x39,0x29,0x19,0x0b,0x8d,0x8d,0xd2,0xd2,0xd2,0xd2,0xd1,0xd1,0xd1,0x30,0xb0, 0xef,0xd1,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0x0a,0x19,0x2b,0x32,0x35,0x36,0x3a, 0x3b,0x3d,0x2e,0x1c,0x0c,0x89,0x89,0xcd,0xcd,0x09,0x19,0x2b,0x31,0x33,0x35,0x37, 0x39,0x39,0x2d,0x1b,0x0c,0x87,0x87,0xcb,0xcb,0xcb,0xcb,0xcb,0xcb,0xcb,0x30,0xa9, 0xe8,0xca,0xca,0xca,0xca,0xc9,0xc9,0xc9,0xc9,0x09,0x18,0x28,0x2f,0x30,0x33,0x35, 0x36,0x38,0x2c,0x1b,0x0c,0x82,0x82,0xc7,0xc7,0x09,0x16,0x27,0x2d,0x30,0x32,0x33, 0x35,0x36,0x2a,0x1a,0x0b,0x80,0x80,0xc5,0xc4,0x08,0x15,0x27,0x2d,0x2f,0x30,0x33, 0x34,0x35,0x29,0x19,0x0b,0x7e,0x7d,0xc2,0xc2,0xc2,0xc2,0xc2,0xc2,0xc1,0x30,0xa0, 0xdf,0xc2,0xc2,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0x0b,0x1b,0x2f,0x35,0x39,0x3a,0x3b, 0x3e,0x3f,0x30,0x1e,0x0d,0x7d,0x7d,0xc5,0xc6,0x0b,0x1b,0x2d,0x34,0x37,0x39,0x3a, 0x3c,0x3e,0x30,0x1e,0x0d,0x7f,0x80,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0x30,0xa7, 0xe6,0xc9,0xc9,0xc9,0xc9,0xca,0xca,0xca,0xca,0x0a,0x19,0x2b,0x32,0x35,0x36,0x39, 0x3a,0x3c,0x2e,0x1c,0x0c,0x84,0x84,0xcc,0xcc,0x09,0x18,0x2b,0x31,0x33,0x35,0x37, 0x39,0x39,0x2d,0x1c,0x0c,0x86,0x86,0xce,0xce,0x09,0x18,0x29,0x30,0x33,0x34,0x36, 0x39,0x3a,0x2c,0x1b,0x0c,0x88,0x88,0xd0,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0x30,0xb0, 0xef,0xd2,0xd2,0xd2,0xd2,0xd2,0xd3,0xd3,0xd3,0x0b,0x1b,0x30,0x38,0x3e,0x40,0x41, 0x45,0x46,0x33,0x1e,0x0d,0x8d,0x8d,0xd5,0xd5,0x0b,0x1b,0x30,0x3a,0x3e,0x40,0x42, 0x45,0x47,0x35,0x1e,0x0d,0x8f,0x8f,0xd7,0xd7,0xd8,0xd8,0xd8,0xd8,0xd8,0x36,0xb6, 0xf6,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xda,0xda,0x0a,0x1a,0x32,0x3b,0x3f,0x41,0x45, 0x47,0x49,0x37,0x1f,0x0c,0x94,0x94,0xdc,0xdc,0x09,0x1b,0x34,0x3d,0x3f,0x42,0x45, 0x48,0x48,0x37,0x22,0x0d,0x96,0x96,0xde,0xde,0x09,0x1e,0x34,0x3d,0x41,0x43,0x45, 0x49,0x4a,0x39,0x23,0x0f,0x98,0x98,0xe0,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0x3f,0xbf, 0xff,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe3,0x10,0x26,0x40,0x48,0x4d,0x4f,0x51, 0x55,0x56,0x43,0x2b,0x14,0x9c,0x9d,0xe5,0xe5,0x12,0x27,0x3f,0x49,0x4e,0x50,0x52, 0x55,0x57,0x44,0x2c,0x16,0x9f,0x9f,0xe7,0xe7,0xe7,0xe7,0xe7,0xe8,0xe8,0x46,0xc6, 0xff,0xe8,0xe8,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0x15,0x2a,0x42,0x4b,0x4f,0x50,0x54, 0x56,0x59,0x47,0x2f,0x1a,0xa3,0xa3,0xe9,0xe9,0x17,0x2b,0x44,0x4c,0x4e,0x51,0x55, 0x58,0x58,0x47,0x31,0x1c,0xa5,0xa6,0xe9,0xe9,0x19,0x2d,0x43,0x4c,0x51,0x53,0x55, 0x59,0x59,0x48,0x32,0x1f,0xa8,0xa8,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0x4f,0xcf, 0xff,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0x20,0x36,0x50,0x58,0x5d,0x5f,0x60, 0x65,0x66,0x53,0x3b,0x24,0xac,0xac,0xe9,0xe9,0x22,0x37,0x4f,0x59,0x5d,0x60,0x62, 0x65,0x67,0x54,0x3c,0x26,0xaf,0xaf,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0x56,0xcf, 0xff,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0x25,0x39,0x51,0x5b,0x5f,0x60,0x64, 0x66,0x68,0x56,0x3f,0x2a,0xb2,0xb2,0xe9,0xe9,0x26,0x3b,0x54,0x5c,0x5e,0x61,0x64, 0x67,0x68,0x57,0x41,0x2c,0xb2,0xb2,0xe9,0xe9,0x29,0x3d,0x53,0x5c,0x60,0x62,0x65, 0x69,0x69,0x58,0x42,0x2e,0xb2,0xb2,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0x5f,0xcf, 0xff,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0x2d,0x42,0x5c,0x64,0x69,0x6b,0x6c, 0x70,0x70,0x5d,0x45,0x2e,0xb2,0xb2,0xe9,0xe9,0x2a,0x3f,0x57,0x61,0x65,0x67,0x68, 0x6b,0x6d,0x5a,0x42,0x2c,0xb2,0xb2,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0x58,0xcf, 0xff,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0x25,0x39,0x50,0x59,0x5d,0x5e,0x62, 0x64,0x66,0x53,0x3b,0x26,0xaf,0xaf,0xe9,0xe9,0x22,0x36,0x4e,0x56,0x58,0x5b,0x5e, 0x61,0x61,0x4f,0x39,0x24,0xad,0xad,0xe9,0xe9,0x1f,0x33,0x49,0x52,0x56,0x58,0x5a, 0x5d,0x5d,0x4c,0x36,0x22,0xab,0xab,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0x4f,0xcf, 0xff,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0x1d,0x33,0x4d,0x54,0x59,0x5b,0x5c, 0x60,0x61,0x4e,0x36,0x1e,0xa6,0xa6,0xe9,0xe9,0x1b,0x30,0x47,0x51,0x55,0x57,0x59, 0x5c,0x5e,0x4a,0x32,0x1c,0xa4,0xa4,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0x49,0xc9, 0xff,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0x15,0x29,0x41,0x4a,0x4e,0x4e,0x52, 0x54,0x56,0x44,0x2c,0x17,0x9f,0x9f,0xe7,0xe7,0x12,0x26,0x3f,0x46,0x48,0x4b,0x4e, 0x51,0x51,0x40,0x29,0x14,0x9d,0x9d,0xe5,0xe5,0x10,0x23,0x39,0x42,0x46,0x48,0x4a, 0x4e,0x4d,0x3c,0x26,0x12,0x9b,0x9b,0xe3,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0x40,0xc0, 0xff,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe0,0x0d,0x23,0x3d,0x45,0x4a,0x4c,0x4c, 0x50,0x51,0x3e,0x26,0x0f,0x97,0x96,0xde,0xde,0x0b,0x20,0x38,0x42,0x45,0x47,0x49, 0x4c,0x4e,0x3b,0x23,0x0d,0x94,0x94,0xdc,0xdc,0xdc,0xdc,0xdb,0xdb,0xdb,0x39,0xb9, 0xf8,0xdb,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0x0a,0x19,0x31,0x3a,0x3e,0x3f,0x43, 0x44,0x46,0x34,0x1c,0x0c,0x90,0x90,0xd7,0xd7,0x09,0x18,0x2f,0x37,0x39,0x3b,0x3e, 0x41,0x41,0x30,0x1c,0x0c,0x8e,0x8d,0xd5,0xd5,0x09,0x18,0x2a,0x33,0x36,0x38,0x3a, 0x3e,0x3e,0x2d,0x1b,0x0c,0x8b,0x8b,0xd3,0xd3,0xd3,0xd3,0xd2,0xd2,0xd2,0x30,0xb0, 0xef,0xd2,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0x0b,0x1b,0x2f,0x35,0x3a,0x3c,0x3d, 0x40,0x41,0x30,0x1e,0x0d,0x87,0x87,0xce,0xce,0x0b,0x1b,0x2d,0x34,0x37,0x39,0x3a, 0x3c,0x3e,0x30,0x1e,0x0d,0x85,0x85,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0x30,0xa9, 0xe8,0xcb,0xcb,0xcb,0xcb,0xca,0xca,0xca,0xca,0x0a,0x19,0x2b,0x32,0x35,0x36,0x39, 0x3a,0x3c,0x2e,0x1c,0x0c,0x80,0x80,0xc8,0xc8,0x09,0x18,0x2b,0x31,0x33,0x35,0x37, 0x39,0x39,0x2d,0x1c,0x0c,0x7e,0x7e,0xc6,0xc5,0x09,0x18,0x29,0x30,0x33,0x34,0x36, 0x39,0x39,0x2c,0x1b,0x0c,0x7c,0x7b,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc2,0x30,0xa0, 0xdf,0xc3,0xc3,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0x0c,0x1e,0x32,0x39,0x3a,0x3c,0x3f, 0x40,0x41,0x33,0x1f,0x0f,0x7b,0x7b,0xc6,0xc7,0x0c,0x1e,0x31,0x38,0x3a,0x3c,0x3e, 0x40,0x40,0x33,0x1f,0x0e,0x7d,0x7e,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xca,0x30,0xa7, 0xe6,0xca,0xca,0xca,0xca,0xcb,0xcb,0xcb,0xcb,0x0b,0x1b,0x2f,0x35,0x39,0x3a,0x3b, 0x3e,0x3e,0x30,0x1e,0x0d,0x82,0x82,0xcd,0xcd,0x0b,0x1b,0x2d,0x34,0x36,0x39,0x3a, 0x3c,0x3d,0x30,0x1d,0x0d,0x84,0x84,0xcf,0xcf,0x0a,0x1b,0x2d,0x33,0x36,0x39,0x3a, 0x3c,0x3e,0x2f,0x1d,0x0c,0x86,0x86,0xd1,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0x30,0xb0, 0xef,0xd3,0xd3,0xd3,0xd3,0xd3,0xd4,0xd4,0xd4,0x0c,0x1e,0x34,0x3d,0x40,0x43,0x46, 0x48,0x49,0x36,0x1f,0x0f,0x8b,0x8b,0xd6,0xd6,0x0c,0x1e,0x36,0x3f,0x42,0x45,0x47, 0x49,0x49,0x39,0x1f,0x0e,0x8d,0x8d,0xd8,0xd8,0xd9,0xd9,0xd9,0xd9,0xd9,0x36,0xb6, 0xf6,0xda,0xda,0xda,0xda,0xda,0xda,0xdb,0xdb,0x0b,0x1d,0x37,0x3f,0x44,0x47,0x48, 0x4c,0x4c,0x3a,0x21,0x0d,0x92,0x92,0xdd,0xdd,0x0b,0x1e,0x36,0x41,0x43,0x47,0x49, 0x4c,0x4d,0x3b,0x23,0x0e,0x94,0x94,0xdf,0xdf,0x0a,0x21,0x39,0x42,0x45,0x49,0x4a, 0x4c,0x4e,0x3d,0x25,0x0f,0x96,0x96,0xe1,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0x3f,0xc0, 0xff,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe4,0x12,0x29,0x44,0x4d,0x4f,0x52,0x56, 0x58,0x59,0x46,0x2c,0x16,0x9a,0x9b,0xe6,0xe6,0x13,0x2b,0x45,0x4e,0x52,0x55,0x57, 0x59,0x59,0x48,0x2e,0x18,0x9d,0x9d,0xe8,0xe8,0xe8,0xe8,0xe8,0xe9,0xe9,0x46,0xc6, 0xff,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0x16,0x2d,0x47,0x4f,0x54,0x56,0x57, 0x5b,0x5c,0x4a,0x31,0x1b,0xa1,0xa1,0xe9,0xe9,0x19,0x2e,0x46,0x50,0x52,0x56,0x59, 0x5c,0x5d,0x4b,0x32,0x1d,0xa3,0xa4,0xe9,0xe9,0x1a,0x30,0x48,0x51,0x55,0x59,0x5a, 0x5c,0x5d,0x4c,0x34,0x1f,0xa6,0xa6,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0x4f,0xcf, 0xff,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0x22,0x39,0x54,0x5d,0x5f,0x62,0x65, 0x68,0x69,0x56,0x3c,0x26,0xaa,0xaa,0xe9,0xe9,0x23,0x3b,0x55,0x5e,0x61,0x65,0x67, 0x69,0x69,0x58,0x3e,0x27,0xad,0xad,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0x56,0xcf, 0xff,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0x26,0x3c,0x56,0x5f,0x64,0x66,0x67, 0x6b,0x6b,0x59,0x41,0x2b,0xb1,0xb1,0xe9,0xe9,0x28,0x3e,0x56,0x60,0x62,0x66,0x68, 0x6b,0x6d,0x5b,0x42,0x2d,0xb1,0xb1,0xe9,0xe9,0x2a,0x40,0x58,0x61,0x64,0x68,0x6a, 0x6c,0x6d,0x5c,0x44,0x2e,0xb1,0xb1,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0x5f,0xcf, 0xff,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0x2f,0x45,0x60,0x69,0x6b,0x6e,0x71, 0x73,0x73,0x60,0x46,0x30,0xb1,0xb1,0xe9,0xe9,0x2b,0x43,0x5d,0x66,0x69,0x6c,0x6d, 0x6f,0x6f,0x5e,0x44,0x2d,0xb1,0xb1,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0x58,0xcf, 0xff,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0x26,0x3c,0x55,0x5d,0x62,0x64,0x65, 0x69,0x69,0x56,0x3d,0x27,0xad,0xad,0xe9,0xe9,0x24,0x39,0x50,0x5a,0x5c,0x60,0x62, 0x65,0x66,0x53,0x3a,0x25,0xab,0xab,0xe9,0xe9,0x20,0x36,0x4e,0x57,0x5a,0x5e,0x5f, 0x60,0x61,0x50,0x38,0x22,0xa9,0xa9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0x4f,0xcf, 0xff,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0x1f,0x36,0x51,0x59,0x5b,0x5e,0x61, 0x63,0x64,0x51,0x36,0x20,0xa4,0xa4,0xe9,0xe9,0x1c,0x34,0x4d,0x56,0x59,0x5c,0x5e, 0x60,0x60,0x4e,0x34,0x1d,0xa2,0xa2,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0x49,0xc9, 0xff,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0x16,0x2c,0x46,0x4e,0x53,0x54,0x55, 0x59,0x59,0x47,0x2e,0x18,0x9d,0x9d,0xe8,0xe8,0x14,0x29,0x41,0x4a,0x4c,0x50,0x52, 0x55,0x56,0x44,0x2a,0x15,0x9b,0x9b,0xe6,0xe6,0x11,0x26,0x3e,0x47,0x4a,0x4e,0x4f, 0x51,0x51,0x40,0x28,0x12,0x99,0x99,0xe4,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0x40,0xc0, 0xff,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe1,0x0f,0x26,0x41,0x4a,0x4c,0x4f,0x51, 0x53,0x54,0x41,0x27,0x11,0x95,0x94,0xdf,0xdf,0x0c,0x24,0x3e,0x47,0x49,0x4c,0x4e, 0x50,0x50,0x3f,0x25,0x0e,0x92,0x92,0xdd,0xdd,0xdd,0xdd,0xdc,0xdc,0xdc,0x39,0xb9, 0xf8,0xdc,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0x0b,0x1c,0x36,0x3e,0x43,0x45,0x46, 0x49,0x49,0x37,0x1e,0x0d,0x8e,0x8e,0xd8,0xd8,0x0b,0x1b,0x31,0x3b,0x3d,0x40,0x42, 0x45,0x46,0x34,0x1d,0x0d,0x8b,0x8b,0xd6,0xd6,0x0a,0x1b,0x2f,0x38,0x3a,0x3e,0x3f, 0x41,0x42,0x31,0x1d,0x0c,0x89,0x89,0xd4,0xd4,0xd4,0xd4,0xd3,0xd3,0xd3,0x30,0xb0, 0xef,0xd3,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0x0c,0x1e,0x32,0x3a,0x3c,0x3f,0x42, 0x43,0x44,0x33,0x1f,0x0f,0x85,0x85,0xcf,0xcf,0x0c,0x1e,0x31,0x38,0x3a,0x3c,0x3e, 0x40,0x40,0x33,0x1f,0x0e,0x83,0x83,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0x30,0xa9, 0xe8,0xcc,0xcc,0xcc,0xcc,0xcb,0xcb,0xcb,0xcb,0x0b,0x1b,0x2f,0x35,0x39,0x3a,0x3b, 0x3e,0x3e,0x30,0x1e,0x0d,0x7e,0x7e,0xc9,0xc9,0x0b,0x1b,0x2d,0x34,0x36,0x39,0x3a, 0x3c,0x3d,0x30,0x1d,0x0d,0x7c,0x7c,0xc7,0xc6,0x0a,0x1b,0x2d,0x33,0x36,0x39,0x39, 0x3b,0x3c,0x2f,0x1d,0x0c,0x7a,0x79,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc3,0x30,0xa0, 0xdf,0xc4,0xc4,0xc5,0xc5,0xc5,0xc5,0xc5,0xc5,0x0d,0x23,0x33,0x3c,0x3f,0x40,0x42, 0x44,0x45,0x36,0x21,0x10,0x7d,0x7d,0xc7,0xc8,0x0c,0x23,0x33,0x3c,0x3e,0x40,0x42, 0x43,0x43,0x35,0x21,0x10,0x7f,0x80,0xca,0xca,0xca,0xca,0xca,0xca,0xcb,0x30,0xa7, 0xe6,0xcb,0xcb,0xcb,0xcc,0xcc,0xcc,0xcc,0xcc,0x0c,0x23,0x32,0x39,0x3a,0x3e,0x3f, 0x40,0x41,0x33,0x1f,0x0f,0x84,0x84,0xce,0xce,0x0c,0x22,0x30,0x38,0x3a,0x3c,0x3e, 0x40,0x40,0x32,0x1e,0x0e,0x86,0x86,0xd0,0xd0,0x0b,0x22,0x2e,0x36,0x39,0x3b,0x3e, 0x41,0x42,0x31,0x1e,0x0e,0x88,0x88,0xd2,0xd3,0xd3,0xd3,0xd3,0xd3,0xd3,0x30,0xb0, 0xef,0xd4,0xd4,0xd4,0xd4,0xd4,0xd5,0xd5,0xd5,0x0d,0x23,0x36,0x41,0x46,0x48,0x4a, 0x4d,0x4e,0x3b,0x21,0x10,0x8d,0x8d,0xd7,0xd7,0x0c,0x23,0x39,0x44,0x47,0x49,0x4c, 0x4d,0x4e,0x3c,0x22,0x10,0x8f,0x8f,0xd9,0xd9,0xda,0xda,0xda,0xda,0xda,0x36,0xb6, 0xf6,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdc,0xdc,0x0c,0x27,0x3b,0x45,0x46,0x4c,0x4d, 0x4f,0x50,0x3d,0x23,0x0f,0x94,0x94,0xde,0xde,0x0c,0x28,0x3a,0x46,0x49,0x4c,0x4e, 0x50,0x50,0x3e,0x25,0x0f,0x96,0x96,0xe0,0xe0,0x0b,0x2b,0x3b,0x46,0x49,0x4b,0x4e, 0x51,0x52,0x40,0x26,0x11,0x98,0x98,0xe2,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0x3f,0xc0, 0xff,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe5,0x13,0x30,0x46,0x51,0x55,0x57,0x5a, 0x5d,0x5e,0x4b,0x2f,0x18,0x9c,0x9d,0xe7,0xe7,0x14,0x32,0x48,0x53,0x57,0x59,0x5c, 0x5d,0x5e,0x4b,0x31,0x1b,0x9f,0x9f,0xe9,0xe9,0xe9,0xe9,0xea,0xea,0xea,0x46,0xc6, 0xff,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0x18,0x37,0x4b,0x55,0x56,0x5b,0x5c, 0x5e,0x60,0x4d,0x33,0x1d,0xa3,0xa3,0xea,0xea,0x1a,0x38,0x4a,0x55,0x58,0x5b,0x5e, 0x60,0x60,0x4e,0x34,0x1e,0xa5,0xa6,0xea,0xea,0x1b,0x3a,0x4a,0x55,0x59,0x5b,0x5e, 0x61,0x61,0x4f,0x35,0x21,0xa8,0xa8,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0x4f,0xcf, 0xff,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0x23,0x40,0x56,0x61,0x65,0x67,0x69, 0x6d,0x6e,0x5b,0x3f,0x28,0xac,0xac,0xea,0xea,0x24,0x42,0x58,0x63,0x66,0x69,0x6c, 0x6d,0x6e,0x5b,0x41,0x2a,0xaf,0xaf,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0x56,0xcf, 0xff,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0x28,0x46,0x5a,0x65,0x66,0x6b,0x6c, 0x6e,0x6f,0x5c,0x43,0x2d,0xb2,0xb2,0xea,0xea,0x29,0x48,0x5a,0x65,0x68,0x6b,0x6d, 0x6f,0x70,0x5e,0x44,0x2e,0xb2,0xb2,0xea,0xea,0x2b,0x4a,0x5a,0x65,0x68,0x6a,0x6e, 0x71,0x71,0x5f,0x45,0x30,0xb2,0xb2,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0x5f,0xcf, 0xff,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0x30,0x4c,0x62,0x6d,0x71,0x73,0x75, 0x78,0x78,0x65,0x49,0x32,0xb2,0xb2,0xea,0xea,0x2c,0x4a,0x60,0x6b,0x6e,0x70,0x72, 0x73,0x74,0x61,0x47,0x30,0xb2,0xb2,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0x58,0xcf, 0xff,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0x28,0x46,0x59,0x63,0x64,0x69,0x6a, 0x6c,0x6d,0x59,0x3f,0x29,0xaf,0xaf,0xea,0xea,0x25,0x43,0x54,0x5f,0x62,0x65,0x67, 0x69,0x69,0x56,0x3c,0x26,0xad,0xad,0xea,0xea,0x21,0x40,0x50,0x5b,0x5e,0x60,0x63, 0x65,0x65,0x53,0x39,0x24,0xab,0xab,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0x4f,0xcf, 0xff,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0x20,0x3d,0x53,0x5d,0x61,0x63,0x65, 0x68,0x69,0x56,0x39,0x22,0xa6,0xa6,0xea,0xea,0x1d,0x3a,0x50,0x5b,0x5e,0x60,0x63, 0x64,0x65,0x51,0x37,0x20,0xa4,0xa4,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0x49,0xc9, 0xff,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0x18,0x36,0x4a,0x54,0x55,0x59,0x5a, 0x5c,0x5d,0x4a,0x30,0x1a,0x9f,0x9f,0xe9,0xe9,0x15,0x33,0x45,0x4f,0x52,0x55,0x57, 0x59,0x59,0x47,0x2c,0x16,0x9d,0x9d,0xe7,0xe7,0x12,0x30,0x40,0x4b,0x4e,0x50,0x53, 0x56,0x55,0x43,0x29,0x14,0x9b,0x9b,0xe5,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0x40,0xc0, 0xff,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe2,0x10,0x2d,0x43,0x4e,0x52,0x54,0x55, 0x58,0x59,0x46,0x2a,0x13,0x97,0x96,0xe0,0xe0,0x0d,0x2b,0x41,0x4c,0x4e,0x50,0x53, 0x54,0x55,0x42,0x28,0x10,0x94,0x94,0xde,0xde,0xde,0xde,0xdd,0xdd,0xdd,0x39,0xb9, 0xf8,0xdd,0xdc,0xdc,0xdc,0xdc,0xdc,0xdc,0xdc,0x0c,0x26,0x3a,0x44,0x45,0x4a,0x4b, 0x4c,0x4d,0x3a,0x20,0x0f,0x90,0x90,0xd9,0xd9,0x0c,0x23,0x35,0x40,0x43,0x45,0x47, 0x49,0x49,0x37,0x1e,0x0e,0x8d,0x8d,0xd7,0xd7,0x0b,0x22,0x31,0x3b,0x3e,0x40,0x43, 0x46,0x46,0x34,0x1e,0x0e,0x8b,0x8b,0xd5,0xd5,0xd5,0xd5,0xd4,0xd4,0xd4,0x30,0xb0, 0xef,0xd4,0xd3,0xd3,0xd3,0xd3,0xd3,0xd3,0xd3,0x0d,0x23,0x33,0x3e,0x42,0x44,0x46, 0x48,0x49,0x36,0x21,0x10,0x87,0x87,0xd0,0xd0,0x0c,0x23,0x33,0x3c,0x3f,0x40,0x43, 0x44,0x45,0x35,0x21,0x10,0x85,0x85,0xce,0xce,0xce,0xce,0xce,0xce,0xce,0x30,0xa9, 0xe8,0xcd,0xcd,0xcd,0xcd,0xcc,0xcc,0xcc,0xcc,0x0c,0x23,0x32,0x39,0x3a,0x3e,0x3f, 0x40,0x41,0x33,0x1f,0x0f,0x80,0x80,0xca,0xca,0x0c,0x22,0x30,0x38,0x3a,0x3c,0x3e, 0x40,0x40,0x32,0x1e,0x0e,0x7e,0x7e,0xc8,0xc7,0x0b,0x22,0x2e,0x36,0x39,0x3a,0x3c, 0x3f,0x3f,0x31,0x1e,0x0e,0x7c,0x7b,0xc5,0xc5,0xc5,0xc5,0xc5,0xc5,0xc4,0x30,0xa0, 0xdf,0xc5,0xc5,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0x0e,0x31,0x38,0x3f,0x42,0x44,0x45, 0x48,0x48,0x39,0x23,0x10,0x80,0x80,0xc8,0xc9,0x0e,0x31,0x36,0x3f,0x42,0x42,0x44, 0x46,0x47,0x37,0x22,0x10,0x82,0x83,0xcb,0xcb,0xcb,0xcb,0xcb,0xcb,0xcc,0x30,0xa7, 0xe6,0xcc,0xcc,0xcc,0xcd,0xcd,0xcd,0xcd,0xcd,0x0d,0x30,0x33,0x3c,0x3f,0x40,0x42, 0x44,0x45,0x36,0x21,0x10,0x87,0x87,0xcf,0xcf,0x0c,0x30,0x33,0x3a,0x3e,0x3f,0x41, 0x44,0x45,0x35,0x21,0x10,0x89,0x89,0xd1,0xd1,0x0c,0x30,0x32,0x3a,0x3e,0x40,0x42, 0x46,0x48,0x33,0x20,0x0f,0x8b,0x8b,0xd3,0xd4,0xd4,0xd4,0xd4,0xd4,0xd4,0x30,0xb0, 0xef,0xd5,0xd5,0xd5,0xd5,0xd5,0xd6,0xd6,0xd6,0x0e,0x33,0x3c,0x45,0x4a,0x4d,0x4e, 0x52,0x52,0x3e,0x23,0x10,0x90,0x90,0xd8,0xd8,0x0e,0x35,0x3d,0x48,0x4c,0x4c,0x4f, 0x51,0x53,0x3f,0x23,0x10,0x92,0x92,0xda,0xda,0xdb,0xdb,0xdb,0xdb,0xdb,0x36,0xb6, 0xf6,0xdc,0xdc,0xdc,0xdc,0xdc,0xdc,0xdd,0xdd,0x0d,0x39,0x3d,0x48,0x4c,0x4e,0x51, 0x54,0x55,0x41,0x26,0x10,0x97,0x97,0xdf,0xdf,0x0c,0x3b,0x3f,0x49,0x4e,0x4f,0x51, 0x54,0x55,0x42,0x29,0x12,0x99,0x99,0xe1,0xe1,0x0d,0x3e,0x40,0x4a,0x4e,0x50,0x52, 0x55,0x58,0x43,0x29,0x13,0x9b,0x9b,0xe3,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0x3f,0xc0, 0xff,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe6,0x14,0x43,0x4c,0x55,0x59,0x5c,0x5e, 0x62,0x62,0x4e,0x31,0x18,0x9f,0xa0,0xe8,0xe8,0x16,0x45,0x4c,0x57,0x5c,0x5c,0x5f, 0x61,0x63,0x4e,0x32,0x1b,0xa2,0xa2,0xea,0xea,0xea,0xea,0xeb,0xeb,0xeb,0x46,0xc6, 0xff,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0x19,0x49,0x4d,0x58,0x5c,0x5d,0x60, 0x63,0x65,0x51,0x36,0x1f,0xa6,0xa6,0xeb,0xeb,0x1b,0x4b,0x4f,0x58,0x5d,0x5e,0x61, 0x64,0x65,0x52,0x38,0x21,0xa8,0xa9,0xeb,0xeb,0x1d,0x4d,0x4f,0x59,0x5e,0x60,0x62, 0x65,0x67,0x52,0x38,0x23,0xab,0xab,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0x4f,0xcf, 0xff,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0x24,0x53,0x5c,0x65,0x69,0x6c,0x6d, 0x72,0x72,0x5e,0x41,0x28,0xaf,0xaf,0xeb,0xeb,0x26,0x55,0x5c,0x67,0x6b,0x6c,0x6f, 0x71,0x73,0x5e,0x42,0x2a,0xb2,0xb2,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0x56,0xcf, 0xff,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0x29,0x58,0x5c,0x68,0x6c,0x6d,0x70, 0x73,0x74,0x60,0x46,0x2f,0xb5,0xb5,0xeb,0xeb,0x2a,0x5b,0x5f,0x68,0x6d,0x6e,0x70, 0x73,0x75,0x62,0x48,0x31,0xb5,0xb5,0xeb,0xeb,0x2d,0x5d,0x5f,0x69,0x6d,0x6f,0x72, 0x75,0x77,0x62,0x48,0x32,0xb5,0xb5,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0x5f,0xcf, 0xff,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0x31,0x5f,0x68,0x71,0x75,0x78,0x79, 0x7d,0x7c,0x68,0x4b,0x32,0xb5,0xb5,0xeb,0xeb,0x2e,0x5d,0x64,0x6f,0x73,0x73,0x75, 0x77,0x79,0x64,0x48,0x30,0xb5,0xb5,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0x58,0xcf, 0xff,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0x29,0x58,0x5b,0x66,0x6a,0x6b,0x6e, 0x71,0x72,0x5d,0x42,0x2b,0xb2,0xb2,0xeb,0xeb,0x26,0x56,0x59,0x62,0x67,0x68,0x6a, 0x6d,0x6e,0x5a,0x40,0x29,0xb0,0xb0,0xeb,0xeb,0x23,0x53,0x55,0x5f,0x63,0x65,0x67, 0x69,0x6b,0x56,0x3c,0x26,0xae,0xae,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0x4f,0xcf, 0xff,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0x21,0x50,0x59,0x61,0x65,0x68,0x69, 0x6d,0x6d,0x59,0x3b,0x22,0xa9,0xa9,0xeb,0xeb,0x1f,0x4d,0x54,0x5f,0x63,0x63,0x66, 0x68,0x69,0x54,0x38,0x20,0xa7,0xa7,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0x49,0xc9, 0xff,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0x19,0x48,0x4c,0x57,0x5b,0x5b,0x5e, 0x61,0x62,0x4e,0x33,0x1c,0xa2,0xa2,0xea,0xea,0x16,0x46,0x4a,0x52,0x57,0x58,0x5a, 0x5d,0x5e,0x4b,0x30,0x19,0xa0,0xa0,0xe8,0xe8,0x14,0x43,0x45,0x4f,0x53,0x55,0x57, 0x5a,0x5b,0x46,0x2c,0x16,0x9e,0x9e,0xe6,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0x40,0xc0, 0xff,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe3,0x11,0x40,0x49,0x52,0x56,0x59,0x59, 0x5d,0x5d,0x49,0x2c,0x13,0x9a,0x99,0xe1,0xe1,0x0f,0x3e,0x45,0x50,0x53,0x53,0x56, 0x58,0x5a,0x45,0x29,0x10,0x97,0x97,0xdf,0xdf,0xdf,0xdf,0xde,0xde,0xde,0x39,0xb9, 0xf8,0xde,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x0d,0x38,0x3c,0x47,0x4b,0x4c,0x4f, 0x51,0x52,0x3e,0x23,0x10,0x93,0x93,0xda,0xda,0x0c,0x36,0x3a,0x43,0x48,0x48,0x4a, 0x4d,0x4e,0x3b,0x21,0x10,0x90,0x90,0xd8,0xd8,0x0c,0x34,0x36,0x3f,0x43,0x45,0x47, 0x4a,0x4c,0x37,0x20,0x0f,0x8e,0x8e,0xd6,0xd6,0xd6,0xd5,0xd5,0xd5,0xd5,0x30,0xb0, 0xef,0xd5,0xd4,0xd4,0xd4,0xd4,0xd4,0xd4,0xd4,0x0e,0x31,0x39,0x42,0x46,0x49,0x4a, 0x4d,0x4d,0x39,0x23,0x10,0x8a,0x8a,0xd1,0xd1,0x0e,0x31,0x36,0x40,0x44,0x43,0x46, 0x48,0x4a,0x37,0x22,0x10,0x88,0x88,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0x30,0xa9, 0xe8,0xce,0xce,0xce,0xce,0xcd,0xcd,0xcd,0xcd,0x0d,0x30,0x33,0x3c,0x3f,0x40,0x42, 0x44,0x45,0x36,0x21,0x10,0x83,0x83,0xcb,0xcb,0x0c,0x30,0x33,0x3a,0x3e,0x3f,0x40, 0x43,0x43,0x35,0x21,0x10,0x81,0x81,0xc9,0xc8,0x0c,0x30,0x32,0x39,0x3c,0x3e,0x40, 0x42,0x43,0x33,0x20,0x0f,0x7f,0x7e,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc5,0x30,0xa0, 0xdf,0xc6,0xc6,0xc7,0xc7,0xc7,0xc7,0xc7,0xc7,0x0f,0x40,0x3b,0x43,0x46,0x46,0x48, 0x4a,0x4b,0x3b,0x25,0x12,0x83,0x83,0xc9,0xca,0x0f,0x40,0x39,0x41,0x44,0x46,0x48, 0x49,0x4a,0x3b,0x24,0x12,0x85,0x86,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcd,0x30,0xa7, 0xe6,0xcd,0xcd,0xcd,0xce,0xce,0xce,0xce,0xce,0x0e,0x3f,0x38,0x3f,0x42,0x44,0x46, 0x47,0x49,0x39,0x24,0x10,0x8a,0x8a,0xd0,0xd0,0x0e,0x3f,0x38,0x3f,0x43,0x46,0x48, 0x49,0x4b,0x39,0x24,0x10,0x8c,0x8c,0xd2,0xd2,0x0e,0x41,0x38,0x41,0x45,0x48,0x4a, 0x4c,0x4e,0x3a,0x24,0x10,0x8e,0x8e,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0x30,0xb0, 0xef,0xd6,0xd6,0xd6,0xd6,0xd6,0xd7,0xd7,0xd7,0x0f,0x46,0x40,0x4b,0x4f,0x50,0x52, 0x55,0x56,0x41,0x25,0x12,0x93,0x93,0xd9,0xd9,0x0f,0x48,0x41,0x4b,0x4f,0x51,0x54, 0x55,0x57,0x44,0x26,0x12,0x95,0x95,0xdb,0xdb,0xdc,0xdc,0xdc,0xdc,0xdc,0x36,0xb6, 0xf6,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xde,0xde,0x0e,0x4c,0x43,0x4c,0x50,0x54,0x56, 0x57,0x59,0x45,0x29,0x10,0x9a,0x9a,0xe0,0xe0,0x0e,0x4e,0x45,0x4f,0x53,0x56,0x58, 0x59,0x5b,0x47,0x2c,0x12,0x9c,0x9c,0xe2,0xe2,0x0f,0x51,0x48,0x51,0x55,0x58,0x5a, 0x5b,0x5e,0x4a,0x2e,0x14,0x9e,0x9e,0xe4,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0x3f,0xc0, 0xff,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe7,0x16,0x56,0x50,0x5b,0x5e,0x5f,0x62, 0x65,0x66,0x51,0x34,0x1b,0xa2,0xa3,0xe9,0xe9,0x17,0x58,0x50,0x5a,0x5f,0x61,0x64, 0x65,0x67,0x53,0x35,0x1d,0xa5,0xa5,0xeb,0xeb,0xeb,0xeb,0xec,0xec,0xec,0x46,0xc6, 0xff,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0x1b,0x5c,0x53,0x5c,0x60,0x63,0x65, 0x66,0x69,0x55,0x39,0x1f,0xa9,0xa9,0xec,0xec,0x1d,0x5e,0x55,0x5e,0x62,0x65,0x68, 0x69,0x6b,0x57,0x3b,0x21,0xab,0xac,0xec,0xec,0x1f,0x60,0x57,0x60,0x65,0x68,0x6a, 0x6b,0x6d,0x59,0x3d,0x24,0xae,0xae,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0x4f,0xcf, 0xff,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0x26,0x66,0x60,0x6b,0x6e,0x6f,0x71, 0x75,0x76,0x61,0x44,0x2b,0xb2,0xb2,0xec,0xec,0x27,0x68,0x60,0x6a,0x6e,0x71,0x74, 0x75,0x77,0x63,0x45,0x2c,0xb5,0xb5,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0x56,0xcf, 0xff,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0x2a,0x6b,0x62,0x6c,0x70,0x73,0x75, 0x76,0x78,0x64,0x49,0x2f,0xb7,0xb7,0xec,0xec,0x2c,0x6e,0x65,0x6e,0x72,0x75,0x77, 0x78,0x7b,0x67,0x4b,0x31,0xb7,0xb7,0xec,0xec,0x2f,0x70,0x67,0x70,0x74,0x77,0x7a, 0x7b,0x7d,0x69,0x4d,0x33,0xb7,0xb7,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0x5f,0xcf, 0xff,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0x33,0x72,0x6c,0x77,0x7a,0x7b,0x7d, 0x80,0x80,0x6b,0x4e,0x35,0xb7,0xb7,0xec,0xec,0x2f,0x70,0x68,0x72,0x76,0x78,0x7a, 0x7b,0x7d,0x69,0x4b,0x32,0xb7,0xb7,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0x58,0xcf, 0xff,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0x2a,0x6b,0x61,0x6a,0x6e,0x71,0x73, 0x74,0x76,0x61,0x45,0x2b,0xb5,0xb5,0xec,0xec,0x28,0x69,0x5f,0x68,0x6c,0x6f,0x71, 0x72,0x74,0x5f,0x43,0x29,0xb3,0xb3,0xec,0xec,0x25,0x66,0x5d,0x66,0x6a,0x6d,0x6f, 0x6f,0x71,0x5d,0x41,0x27,0xb1,0xb1,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0x4f,0xcf, 0xff,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0x23,0x63,0x5d,0x67,0x6a,0x6b,0x6d, 0x70,0x71,0x5c,0x3e,0x25,0xac,0xac,0xec,0xec,0x20,0x60,0x58,0x62,0x66,0x68,0x6b, 0x6c,0x6d,0x59,0x3b,0x22,0xaa,0xaa,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0x49,0xc8, 0xff,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0x1a,0x5b,0x52,0x5b,0x5f,0x61,0x63, 0x64,0x66,0x52,0x36,0x1c,0xa5,0xa5,0xeb,0xeb,0x18,0x59,0x50,0x58,0x5c,0x5f,0x61, 0x62,0x64,0x50,0x33,0x19,0xa3,0xa3,0xe9,0xe9,0x16,0x56,0x4d,0x56,0x5a,0x5d,0x5f, 0x60,0x61,0x4d,0x31,0x17,0xa1,0xa1,0xe7,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0x40,0xc0, 0xff,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe4,0x13,0x53,0x4d,0x58,0x5b,0x5c,0x5d, 0x60,0x61,0x4c,0x2f,0x16,0x9d,0x9c,0xe2,0xe2,0x10,0x51,0x49,0x53,0x56,0x58,0x5b, 0x5c,0x5e,0x4a,0x2c,0x12,0x9a,0x9a,0xe0,0xe0,0xe0,0xe0,0xdf,0xdf,0xdf,0x39,0xb9, 0xf8,0xdf,0xde,0xde,0xde,0xde,0xde,0xde,0xde,0x0e,0x4b,0x42,0x4b,0x4f,0x52,0x54, 0x54,0x56,0x42,0x26,0x10,0x96,0x96,0xdb,0xdb,0x0e,0x49,0x40,0x49,0x4d,0x4f,0x51, 0x52,0x54,0x40,0x24,0x10,0x93,0x93,0xd9,0xd9,0x0e,0x47,0x3e,0x46,0x4a,0x4d,0x4f, 0x50,0x52,0x3e,0x24,0x10,0x91,0x91,0xd7,0xd7,0xd7,0xd6,0xd6,0xd6,0xd6,0x30,0xb0, 0xef,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0x0f,0x43,0x3d,0x48,0x4b,0x4c,0x4e, 0x50,0x51,0x3c,0x25,0x12,0x8d,0x8d,0xd2,0xd2,0x0f,0x41,0x39,0x43,0x47,0x48,0x4b, 0x4c,0x4e,0x3b,0x24,0x12,0x8b,0x8a,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0x30,0xa9, 0xe8,0xcf,0xcf,0xcf,0xcf,0xce,0xce,0xce,0xce,0x0e,0x3f,0x38,0x3f,0x42,0x44,0x46, 0x46,0x48,0x39,0x24,0x10,0x86,0x86,0xcc,0xcc,0x0e,0x3f,0x38,0x3f,0x42,0x44,0x46, 0x46,0x48,0x39,0x24,0x10,0x84,0x84,0xca,0xc9,0x0e,0x3f,0x38,0x3f,0x42,0x44,0x46, 0x46,0x48,0x39,0x24,0x10,0x82,0x81,0xc7,0xc7,0xc7,0xc7,0xc7,0xc7,0xc6,0x30,0xa0, 0xdf,0xc7,0xc7,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0x10,0x4e,0x3d,0x46,0x49,0x4a,0x4c, 0x4c,0x4e,0x3d,0x27,0x13,0x87,0x87,0xca,0xcb,0x10,0x4d,0x3c,0x45,0x46,0x49,0x4b, 0x4c,0x4e,0x3c,0x27,0x12,0x89,0x8a,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xce,0x30,0xa7, 0xe6,0xce,0xce,0xce,0xcf,0xcf,0xcf,0xcf,0xcf,0x10,0x4f,0x3c,0x45,0x47,0x4a,0x4d, 0x4f,0x51,0x3c,0x27,0x12,0x8e,0x8e,0xd1,0xd1,0x10,0x52,0x3c,0x47,0x49,0x4c,0x4f, 0x51,0x53,0x3d,0x27,0x12,0x90,0x90,0xd3,0xd3,0x10,0x54,0x3e,0x49,0x4b,0x4e,0x51, 0x54,0x56,0x3f,0x27,0x12,0x92,0x92,0xd6,0xd6,0xd6,0xd6,0xd6,0xd6,0xd6,0x30,0xb0, 0xef,0xd7,0xd7,0xd7,0xd7,0xd7,0xd8,0xd8,0xd8,0x10,0x59,0x43,0x4e,0x53,0x55,0x57, 0x58,0x5a,0x44,0x27,0x13,0x97,0x97,0xda,0xda,0x10,0x5a,0x45,0x50,0x52,0x55,0x58, 0x5a,0x5c,0x46,0x29,0x12,0x99,0x99,0xdc,0xdc,0xdd,0xdd,0xdd,0xdd,0xdd,0x36,0xb6, 0xf6,0xde,0xde,0xde,0xde,0xde,0xde,0xdf,0xdf,0x10,0x5f,0x49,0x54,0x56,0x5a,0x5d, 0x5f,0x61,0x4a,0x2d,0x12,0x9e,0x9e,0xe1,0xe1,0x10,0x61,0x4b,0x57,0x59,0x5c,0x5f, 0x61,0x63,0x4c,0x30,0x15,0xa0,0xa0,0xe3,0xe3,0x12,0x64,0x4e,0x59,0x5b,0x5e,0x61, 0x63,0x66,0x4f,0x32,0x17,0xa2,0xa2,0xe5,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0x3f,0xc0, 0xff,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe8,0x17,0x69,0x53,0x5e,0x62,0x64,0x67, 0x68,0x6a,0x54,0x36,0x1c,0xa6,0xa7,0xea,0xea,0x19,0x6a,0x54,0x5f,0x62,0x65,0x68, 0x6a,0x6c,0x55,0x38,0x1e,0xa9,0xa9,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0x46,0xc6, 0xff,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0x1e,0x6f,0x59,0x64,0x66,0x69,0x6c, 0x6f,0x71,0x5a,0x3d,0x22,0xad,0xad,0xec,0xec,0x20,0x71,0x5b,0x66,0x68,0x6b,0x6f, 0x71,0x73,0x5c,0x3f,0x24,0xaf,0xb0,0xec,0xec,0x22,0x73,0x5d,0x68,0x6b,0x6e,0x71, 0x73,0x75,0x5e,0x41,0x27,0xb2,0xb2,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0x4f,0xcf, 0xff,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0x27,0x79,0x63,0x6e,0x72,0x74,0x76, 0x78,0x7a,0x64,0x46,0x2c,0xb6,0xb6,0xec,0xec,0x29,0x7a,0x64,0x6f,0x71,0x75,0x78, 0x7a,0x7c,0x65,0x48,0x2d,0xb9,0xb9,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0x56,0xcf, 0xff,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0x2d,0x7e,0x68,0x74,0x76,0x79,0x7c, 0x7e,0x80,0x69,0x4d,0x32,0xba,0xba,0xec,0xec,0x2f,0x81,0x6b,0x76,0x78,0x7b,0x7e, 0x80,0x83,0x6c,0x4f,0x34,0xba,0xba,0xec,0xec,0x32,0x83,0x6d,0x78,0x7a,0x7d,0x81, 0x83,0x85,0x6e,0x51,0x36,0xba,0xba,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0x5f,0xcf, 0xff,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0x34,0x85,0x6f,0x7a,0x7e,0x80,0x82, 0x83,0x84,0x6e,0x50,0x36,0xba,0xba,0xec,0xec,0x31,0x82,0x6c,0x77,0x79,0x7c,0x7e, 0x80,0x82,0x6b,0x4e,0x33,0xba,0xba,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0x58,0xcf, 0xff,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0x2d,0x7e,0x67,0x72,0x74,0x77,0x7a, 0x7c,0x7e,0x66,0x49,0x2e,0xb9,0xb9,0xec,0xec,0x2b,0x7c,0x65,0x70,0x72,0x75,0x78, 0x7a,0x7c,0x64,0x47,0x2c,0xb7,0xb7,0xec,0xec,0x28,0x79,0x63,0x6e,0x70,0x73,0x76, 0x77,0x79,0x62,0x45,0x2a,0xb5,0xb5,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0x4f,0xcf, 0xff,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0x24,0x76,0x60,0x6a,0x6e,0x70,0x72, 0x73,0x75,0x5f,0x40,0x26,0xb0,0xb0,0xec,0xec,0x22,0x72,0x5c,0x67,0x69,0x6c,0x6f, 0x71,0x72,0x5b,0x3e,0x23,0xae,0xae,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0x49,0xc8, 0xff,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0x1d,0x6e,0x58,0x63,0x65,0x67,0x6a, 0x6c,0x6e,0x57,0x3a,0x1f,0xa9,0xa9,0xec,0xec,0x1b,0x6c,0x56,0x60,0x62,0x65,0x68, 0x6a,0x6c,0x55,0x37,0x1c,0xa7,0xa7,0xea,0xea,0x19,0x69,0x53,0x5e,0x60,0x63,0x66, 0x68,0x69,0x52,0x35,0x1a,0xa5,0xa5,0xe8,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x40,0xc0, 0xff,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe5,0x14,0x66,0x50,0x5b,0x5f,0x61,0x62, 0x63,0x65,0x4f,0x31,0x17,0xa1,0xa0,0xe3,0xe3,0x12,0x63,0x4d,0x58,0x59,0x5c,0x5f, 0x61,0x63,0x4c,0x2f,0x13,0x9e,0x9e,0xe1,0xe1,0xe1,0xe1,0xe0,0xe0,0xe0,0x39,0xb9, 0xf8,0xe0,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0x10,0x5e,0x48,0x53,0x55,0x58,0x5b, 0x5c,0x5e,0x47,0x2a,0x12,0x9a,0x9a,0xdc,0xdc,0x10,0x5c,0x46,0x51,0x53,0x55,0x58, 0x5a,0x5c,0x45,0x28,0x12,0x97,0x97,0xda,0xda,0x10,0x5a,0x44,0x4e,0x50,0x53,0x56, 0x58,0x5a,0x43,0x27,0x12,0x95,0x95,0xd8,0xd8,0xd8,0xd7,0xd7,0xd7,0xd7,0x30,0xb0, 0xef,0xd6,0xd6,0xd6,0xd6,0xd6,0xd6,0xd6,0xd5,0x10,0x56,0x40,0x4b,0x4f,0x51,0x53, 0x53,0x55,0x3f,0x27,0x13,0x91,0x91,0xd3,0xd3,0x10,0x53,0x3d,0x48,0x4a,0x4c,0x4f, 0x51,0x53,0x3c,0x27,0x12,0x8f,0x8e,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd0,0x30,0xa9, 0xe8,0xd0,0xd0,0xd0,0xd0,0xcf,0xcf,0xcf,0xcf,0x10,0x4f,0x3c,0x45,0x46,0x49,0x4b, 0x4d,0x4f,0x3c,0x27,0x12,0x8a,0x8a,0xcd,0xcd,0x10,0x4d,0x3c,0x45,0x46,0x49,0x4b, 0x4c,0x4e,0x3c,0x27,0x12,0x88,0x88,0xcb,0xca,0x10,0x4d,0x3c,0x45,0x46,0x49,0x4b, 0x4c,0x4e,0x3c,0x27,0x12,0x86,0x85,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc7,0x30,0xa0, 0xdf,0xc8,0xc8,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0x12,0x5c,0x41,0x4a,0x4c,0x4f,0x50, 0x52,0x52,0x42,0x2a,0x15,0x8a,0x8a,0xcb,0xcc,0x12,0x5e,0x41,0x4a,0x4c,0x4f,0x50, 0x52,0x53,0x42,0x2a,0x15,0x8c,0x8d,0xce,0xce,0xce,0xce,0xce,0xce,0xcf,0x30,0xa7, 0xe6,0xcf,0xcf,0xcf,0xd0,0xd0,0xd0,0xd0,0xd0,0x12,0x62,0x41,0x4c,0x4f,0x52,0x54, 0x56,0x57,0x42,0x2a,0x15,0x91,0x91,0xd2,0xd2,0x12,0x65,0x42,0x4e,0x51,0x54,0x56, 0x58,0x59,0x44,0x2a,0x15,0x93,0x93,0xd4,0xd4,0x12,0x67,0x44,0x50,0x53,0x56,0x58, 0x5b,0x5c,0x46,0x2a,0x15,0x95,0x95,0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,0x30,0xb0, 0xef,0xd8,0xd8,0xd8,0xd8,0xd9,0xd9,0xd9,0xd9,0x12,0x6b,0x48,0x54,0x58,0x5b,0x5d, 0x5f,0x60,0x4a,0x2a,0x15,0x9a,0x9a,0xdb,0xdb,0x12,0x6d,0x4b,0x57,0x5a,0x5d,0x5f, 0x61,0x62,0x4d,0x2d,0x15,0x9c,0x9c,0xdd,0xdd,0xde,0xde,0xde,0xde,0xde,0x36,0xb6, 0xf6,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xe0,0xe0,0x12,0x72,0x4f,0x5b,0x5e,0x62,0x64, 0x66,0x67,0x51,0x31,0x16,0xa1,0xa1,0xe2,0xe2,0x13,0x74,0x51,0x5e,0x61,0x64,0x66, 0x68,0x69,0x53,0x34,0x19,0xa3,0xa3,0xe4,0xe4,0x15,0x77,0x54,0x60,0x63,0x66,0x68, 0x6a,0x6c,0x56,0x36,0x1b,0xa5,0xa5,0xe6,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x3f,0xc0, 0xff,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe9,0x1a,0x7b,0x58,0x64,0x67,0x6a,0x6d, 0x6f,0x70,0x5a,0x3a,0x1f,0xa9,0xaa,0xeb,0xeb,0x1c,0x7d,0x5a,0x66,0x6a,0x6d,0x6f, 0x71,0x72,0x5c,0x3c,0x22,0xac,0xac,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0x46,0xc6, 0xff,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0x21,0x82,0x5f,0x6b,0x6e,0x71,0x73, 0x76,0x77,0x61,0x41,0x26,0xb0,0xb0,0xed,0xed,0x23,0x84,0x61,0x6d,0x70,0x74,0x76, 0x78,0x79,0x63,0x43,0x28,0xb2,0xb3,0xed,0xed,0x25,0x86,0x63,0x6f,0x73,0x76,0x78, 0x7a,0x7b,0x65,0x45,0x2b,0xb5,0xb5,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0x4f,0xcf, 0xff,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0x2a,0x8b,0x68,0x74,0x77,0x7a,0x7c, 0x7f,0x80,0x6a,0x4a,0x2f,0xb9,0xb9,0xed,0xed,0x2c,0x8d,0x6a,0x76,0x79,0x7d,0x7f, 0x81,0x82,0x6c,0x4c,0x31,0xbc,0xbc,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0x56,0xcf, 0xff,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0x30,0x91,0x6e,0x7b,0x7e,0x81,0x83, 0x85,0x86,0x70,0x51,0x36,0xbc,0xbc,0xed,0xed,0x32,0x94,0x71,0x7d,0x80,0x83,0x85, 0x87,0x89,0x73,0x53,0x38,0xbc,0xbc,0xed,0xed,0x35,0x96,0x73,0x7f,0x82,0x85,0x88, 0x8a,0x8b,0x75,0x55,0x3a,0xbc,0xbc,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0x5f,0xcf, 0xff,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0x37,0x97,0x74,0x80,0x83,0x86,0x88, 0x8a,0x8a,0x74,0x54,0x39,0xbc,0xbc,0xed,0xed,0x34,0x95,0x72,0x7e,0x81,0x84,0x85, 0x87,0x88,0x72,0x52,0x37,0xbc,0xbc,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0x58,0xcf, 0xff,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0x30,0x91,0x6d,0x79,0x7c,0x7f,0x81, 0x83,0x84,0x6d,0x4d,0x32,0xbc,0xbc,0xed,0xed,0x2e,0x8f,0x6b,0x77,0x7a,0x7d,0x7f, 0x81,0x82,0x6b,0x4b,0x30,0xba,0xba,0xed,0xed,0x2b,0x8c,0x69,0x75,0x78,0x7b,0x7d, 0x7e,0x7f,0x69,0x49,0x2e,0xb8,0xb8,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0x4f,0xcf, 0xff,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0x27,0x88,0x65,0x70,0x73,0x76,0x78, 0x7a,0x7b,0x65,0x44,0x29,0xb3,0xb3,0xed,0xed,0x25,0x85,0x62,0x6e,0x71,0x74,0x76, 0x78,0x78,0x62,0x42,0x27,0xb1,0xb1,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0x49,0xc8, 0xff,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0x20,0x81,0x5e,0x6a,0x6c,0x6f,0x71, 0x73,0x74,0x5e,0x3e,0x23,0xac,0xac,0xed,0xed,0x1e,0x7f,0x5c,0x67,0x6a,0x6d,0x6f, 0x71,0x72,0x5c,0x3b,0x20,0xaa,0xaa,0xeb,0xeb,0x1c,0x7c,0x59,0x65,0x68,0x6b,0x6d, 0x6f,0x6f,0x59,0x39,0x1e,0xa8,0xa8,0xe9,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0x40,0xc0, 0xff,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe6,0x17,0x78,0x55,0x61,0x64,0x67,0x68, 0x6a,0x6b,0x55,0x35,0x1a,0xa4,0xa3,0xe4,0xe4,0x15,0x76,0x53,0x5f,0x61,0x64,0x66, 0x68,0x69,0x53,0x33,0x17,0xa1,0xa1,0xe2,0xe2,0xe2,0xe2,0xe1,0xe1,0xe1,0x39,0xb9, 0xf8,0xe1,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0x12,0x71,0x4e,0x5a,0x5d,0x60,0x62, 0x63,0x64,0x4e,0x2e,0x15,0x9d,0x9d,0xdd,0xdd,0x12,0x6f,0x4c,0x58,0x5b,0x5d,0x5f, 0x61,0x62,0x4c,0x2c,0x15,0x9a,0x9a,0xdb,0xdb,0x12,0x6d,0x4a,0x55,0x58,0x5b,0x5d, 0x5f,0x60,0x4a,0x2a,0x15,0x98,0x98,0xd9,0xd9,0xd9,0xd8,0xd8,0xd8,0xd8,0x30,0xb0, 0xef,0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,0xd6,0x12,0x68,0x45,0x51,0x54,0x57,0x58, 0x5a,0x5b,0x45,0x2a,0x15,0x94,0x94,0xd4,0xd4,0x12,0x66,0x43,0x4f,0x52,0x54,0x56, 0x58,0x59,0x43,0x2a,0x15,0x92,0x91,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd1,0x30,0xa9, 0xe8,0xd1,0xd1,0xd1,0xd0,0xd0,0xd0,0xd0,0xd0,0x12,0x62,0x41,0x4a,0x4d,0x50,0x52, 0x54,0x55,0x42,0x2a,0x15,0x8d,0x8d,0xce,0xce,0x12,0x5f,0x41,0x4a,0x4c,0x4f,0x50, 0x52,0x52,0x42,0x2a,0x15,0x8b,0x8b,0xcc,0xcb,0x12,0x5d,0x41,0x4a,0x4c,0x4f,0x50, 0x52,0x52,0x42,0x2a,0x15,0x89,0x88,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc8,0x30,0xa0, 0xdf,0xc9,0xc9,0xca,0xca,0xca,0xca,0xca,0xca,0x15,0x71,0x46,0x4f,0x52,0x53,0x55, 0x57,0x58,0x46,0x2e,0x16,0x8d,0x8d,0xcc,0xcd,0x15,0x73,0x46,0x4f,0x52,0x53,0x56, 0x59,0x5a,0x46,0x2e,0x16,0x8f,0x90,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xd0,0x30,0xa7, 0xe6,0xd0,0xd0,0xd0,0xd1,0xd1,0xd1,0xd1,0xd1,0x15,0x77,0x46,0x53,0x56,0x58,0x5a, 0x5d,0x5e,0x47,0x2e,0x16,0x94,0x94,0xd3,0xd3,0x15,0x7a,0x48,0x55,0x58,0x5a,0x5c, 0x5f,0x60,0x49,0x2e,0x16,0x96,0x96,0xd5,0xd5,0x15,0x7c,0x4a,0x57,0x5a,0x5c,0x5e, 0x62,0x63,0x4b,0x2e,0x16,0x98,0x98,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0x30,0xb0, 0xef,0xd9,0xd9,0xd9,0xd9,0xda,0xda,0xda,0xda,0x15,0x80,0x4e,0x5c,0x5f,0x61,0x63, 0x66,0x67,0x4f,0x31,0x16,0x9d,0x9d,0xdc,0xdc,0x15,0x82,0x51,0x5e,0x61,0x63,0x65, 0x68,0x69,0x52,0x33,0x16,0x9f,0x9f,0xde,0xde,0xdf,0xdf,0xdf,0xdf,0xdf,0x36,0xb6, 0xf6,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe1,0xe1,0x15,0x87,0x55,0x62,0x65,0x68,0x6a, 0x6d,0x6e,0x56,0x37,0x17,0xa4,0xa4,0xe3,0xe3,0x16,0x89,0x57,0x65,0x68,0x6a,0x6c, 0x6f,0x70,0x58,0x3a,0x1a,0xa6,0xa6,0xe5,0xe5,0x18,0x8c,0x5a,0x67,0x6a,0x6c,0x6e, 0x71,0x73,0x5b,0x3c,0x1c,0xa8,0xa8,0xe7,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0x3f,0xc0, 0xff,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xea,0x1d,0x90,0x5e,0x6b,0x6e,0x70,0x73, 0x76,0x77,0x5f,0x40,0x20,0xac,0xad,0xec,0xec,0x1f,0x92,0x60,0x6d,0x71,0x73,0x75, 0x78,0x79,0x61,0x42,0x23,0xaf,0xaf,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0x46,0xc6, 0xff,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0x24,0x97,0x65,0x72,0x75,0x77,0x79, 0x7d,0x7e,0x66,0x47,0x27,0xb3,0xb3,0xee,0xee,0x26,0x99,0x67,0x74,0x77,0x7a,0x7c, 0x7f,0x80,0x68,0x49,0x29,0xb6,0xb6,0xee,0xee,0x28,0x9b,0x69,0x76,0x7a,0x7c,0x7e, 0x81,0x82,0x6a,0x4b,0x2c,0xb8,0xb8,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0x4f,0xcf, 0xff,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0x2d,0xa0,0x6e,0x7b,0x7e,0x80,0x82, 0x86,0x87,0x6f,0x50,0x30,0xbc,0xbc,0xee,0xee,0x2f,0xa2,0x70,0x7d,0x80,0x83,0x85, 0x88,0x89,0x71,0x52,0x32,0xbf,0xbf,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0x56,0xcf, 0xff,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0x33,0xa6,0x74,0x82,0x85,0x87,0x89, 0x8c,0x8d,0x75,0x57,0x37,0xbf,0xbf,0xee,0xee,0x35,0xa9,0x77,0x84,0x87,0x89,0x8b, 0x8e,0x90,0x78,0x59,0x39,0xbf,0xbf,0xee,0xee,0x38,0xaa,0x79,0x86,0x89,0x8b,0x8e, 0x91,0x92,0x7a,0x5b,0x3b,0xbf,0xbf,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0x5f,0xcf, 0xff,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0x3a,0xaa,0x7a,0x87,0x8a,0x8c,0x8e, 0x91,0x91,0x79,0x5a,0x3a,0xbf,0xbf,0xee,0xee,0x37,0xaa,0x78,0x85,0x88,0x8a,0x8b, 0x8e,0x8f,0x77,0x58,0x38,0xbf,0xbf,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0x58,0xcf, 0xff,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0x33,0xa6,0x73,0x80,0x83,0x85,0x87, 0x8a,0x8b,0x72,0x53,0x33,0xbf,0xbf,0xee,0xee,0x31,0xa4,0x71,0x7e,0x81,0x83,0x85, 0x88,0x89,0x70,0x51,0x31,0xbd,0xbd,0xee,0xee,0x2e,0xa1,0x6f,0x7c,0x7f,0x81,0x83, 0x85,0x86,0x6e,0x4f,0x2f,0xbb,0xbb,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0x4f,0xcf, 0xff,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0x2a,0x9d,0x6b,0x77,0x7a,0x7c,0x7e, 0x81,0x82,0x6a,0x4a,0x2a,0xb6,0xb6,0xee,0xee,0x28,0x9a,0x68,0x75,0x78,0x7a,0x7c, 0x7f,0x7f,0x67,0x48,0x28,0xb4,0xb4,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0x49,0xc8, 0xff,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0x23,0x96,0x64,0x71,0x73,0x75,0x77, 0x7a,0x7b,0x63,0x44,0x23,0xaf,0xaf,0xee,0xee,0x21,0x94,0x62,0x6e,0x71,0x73,0x75, 0x78,0x79,0x61,0x41,0x21,0xad,0xad,0xec,0xec,0x1f,0x91,0x5f,0x6c,0x6f,0x71,0x73, 0x76,0x76,0x5e,0x3f,0x1f,0xab,0xab,0xea,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0x40,0xc0, 0xff,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe7,0x1a,0x8d,0x5b,0x68,0x6b,0x6d,0x6e, 0x71,0x72,0x5a,0x3b,0x1b,0xa7,0xa6,0xe5,0xe5,0x18,0x8b,0x59,0x66,0x68,0x6a,0x6c, 0x6f,0x70,0x58,0x39,0x18,0xa4,0xa4,0xe3,0xe3,0xe3,0xe3,0xe2,0xe2,0xe2,0x39,0xb9, 0xf8,0xe2,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0x15,0x86,0x54,0x61,0x64,0x66,0x68, 0x6a,0x6b,0x53,0x34,0x16,0xa0,0xa0,0xde,0xde,0x15,0x84,0x52,0x5f,0x62,0x63,0x65, 0x68,0x69,0x51,0x32,0x16,0x9d,0x9d,0xdc,0xdc,0x15,0x82,0x50,0x5c,0x5f,0x61,0x63, 0x66,0x67,0x4f,0x2f,0x16,0x9b,0x9b,0xda,0xda,0xda,0xd9,0xd9,0xd9,0xd9,0x30,0xb0, 0xef,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd7,0x15,0x7d,0x4b,0x58,0x5b,0x5d,0x5e, 0x61,0x62,0x4a,0x2e,0x16,0x97,0x96,0xd5,0xd5,0x15,0x7b,0x49,0x56,0x59,0x5a,0x5c, 0x5f,0x60,0x48,0x2e,0x16,0x95,0x94,0xd3,0xd3,0xd3,0xd3,0xd3,0xd3,0xd2,0x30,0xa9, 0xe8,0xd2,0xd2,0xd2,0xd1,0xd1,0xd1,0xd1,0xd1,0x15,0x77,0x46,0x51,0x54,0x56,0x58, 0x5b,0x5c,0x46,0x2e,0x16,0x90,0x90,0xcf,0xcf,0x15,0x74,0x46,0x4f,0x52,0x54,0x56, 0x59,0x59,0x46,0x2e,0x16,0x8e,0x8e,0xcd,0xcc,0x15,0x72,0x46,0x4f,0x52,0x53,0x55, 0x57,0x58,0x46,0x2e,0x16,0x8c,0x8b,0xca,0xca,0xca,0xca,0xca,0xca,0xc9,0x30,0xa0, 0xdf,0xca,0xca,0xcb,0xcb,0xcb,0xcb,0xcb,0xcb,0x17,0x84,0x4c,0x54,0x57,0x58,0x5a, 0x5d,0x5b,0x46,0x2a,0x15,0x90,0x90,0xcd,0xce,0x17,0x86,0x4c,0x54,0x58,0x5a,0x5d, 0x60,0x5d,0x46,0x2a,0x15,0x92,0x93,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd1,0x30,0xa7, 0xe6,0xd1,0xd1,0xd1,0xd2,0xd2,0xd2,0xd2,0xd2,0x17,0x8a,0x4e,0x59,0x5d,0x5f,0x61, 0x64,0x61,0x47,0x2a,0x15,0x97,0x97,0xd4,0xd4,0x17,0x8d,0x50,0x5b,0x5f,0x61,0x63, 0x66,0x63,0x49,0x2a,0x15,0x99,0x99,0xd6,0xd6,0x17,0x8f,0x52,0x5d,0x61,0x63,0x65, 0x69,0x66,0x4b,0x2a,0x15,0x9b,0x9b,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0x30,0xb0, 0xef,0xda,0xda,0xda,0xda,0xdb,0xdb,0xdb,0xdb,0x17,0x93,0x56,0x62,0x66,0x68,0x6a, 0x6d,0x6a,0x4f,0x2c,0x15,0xa0,0xa0,0xdd,0xdd,0x17,0x96,0x59,0x64,0x68,0x6a,0x6c, 0x6f,0x6c,0x52,0x2e,0x15,0xa2,0xa2,0xdf,0xdf,0xe0,0xe0,0xe0,0xe0,0xe0,0x36,0xb6, 0xf6,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe2,0xe2,0x17,0x9a,0x5d,0x68,0x6c,0x6f,0x71, 0x74,0x71,0x56,0x32,0x15,0xa7,0xa7,0xe4,0xe4,0x19,0x9c,0x5f,0x6b,0x6f,0x71,0x73, 0x76,0x73,0x58,0x35,0x18,0xa9,0xa9,0xe6,0xe6,0x1b,0x9f,0x62,0x6d,0x71,0x73,0x75, 0x78,0x76,0x5b,0x37,0x1a,0xab,0xab,0xe8,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0x3f,0xc0, 0xff,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xeb,0x20,0xa3,0x66,0x71,0x75,0x77,0x7a, 0x7d,0x7a,0x5f,0x3b,0x1e,0xaf,0xb0,0xed,0xed,0x22,0xa5,0x68,0x73,0x78,0x7a,0x7c, 0x7f,0x7c,0x61,0x3d,0x21,0xb2,0xb2,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0x46,0xc6, 0xff,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0x27,0xaa,0x6d,0x78,0x7c,0x7e,0x80, 0x84,0x81,0x66,0x42,0x25,0xb6,0xb6,0xef,0xef,0x29,0xac,0x6f,0x7a,0x7e,0x81,0x83, 0x86,0x83,0x68,0x44,0x27,0xb9,0xb9,0xef,0xef,0x2b,0xae,0x71,0x7d,0x81,0x83,0x85, 0x88,0x85,0x6a,0x46,0x2a,0xbb,0xbb,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0x4f,0xcf, 0xff,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0x30,0xb3,0x76,0x81,0x85,0x87,0x89, 0x8d,0x8a,0x6f,0x4b,0x2e,0xbf,0xbf,0xef,0xef,0x32,0xb5,0x78,0x83,0x87,0x8a,0x8c, 0x8f,0x8c,0x71,0x4d,0x30,0xc1,0xc1,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0x56,0xcf, 0xff,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0x36,0xb8,0x7c,0x88,0x8c,0x8e,0x90, 0x93,0x90,0x75,0x52,0x35,0xc1,0xc1,0xef,0xef,0x38,0xb8,0x7f,0x8a,0x8e,0x90,0x92, 0x95,0x93,0x78,0x54,0x37,0xc1,0xc1,0xef,0xef,0x3b,0xb8,0x81,0x8c,0x90,0x92,0x95, 0x98,0x95,0x7a,0x56,0x39,0xc1,0xc1,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0x5f,0xcf, 0xff,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0x3c,0xb8,0x82,0x8d,0x91,0x93,0x95, 0x98,0x94,0x79,0x55,0x38,0xc1,0xc1,0xef,0xef,0x3a,0xb8,0x80,0x8b,0x8f,0x91,0x92, 0x95,0x92,0x77,0x53,0x36,0xc1,0xc1,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0x58,0xcf, 0xff,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0x36,0xb8,0x7b,0x86,0x8a,0x8c,0x8e, 0x91,0x8e,0x72,0x4e,0x31,0xc1,0xc1,0xef,0xef,0x34,0xb7,0x79,0x84,0x88,0x8a,0x8c, 0x8f,0x8c,0x70,0x4c,0x2f,0xc0,0xc0,0xef,0xef,0x31,0xb4,0x77,0x82,0x86,0x88,0x8a, 0x8c,0x89,0x6e,0x4a,0x2d,0xbe,0xbe,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0x4f,0xcf, 0xff,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0x2d,0xb0,0x73,0x7d,0x81,0x83,0x85, 0x88,0x85,0x6a,0x45,0x28,0xb9,0xb9,0xef,0xef,0x2b,0xad,0x70,0x7b,0x7f,0x81,0x83, 0x86,0x82,0x67,0x43,0x26,0xb7,0xb7,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0x49,0xc8, 0xff,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0x26,0xa9,0x6c,0x77,0x7a,0x7c,0x7e, 0x81,0x7e,0x63,0x3f,0x21,0xb2,0xb2,0xef,0xef,0x24,0xa7,0x69,0x74,0x78,0x7a,0x7c, 0x7f,0x7c,0x61,0x3c,0x1f,0xb0,0xb0,0xed,0xed,0x22,0xa4,0x67,0x72,0x76,0x78,0x7a, 0x7d,0x79,0x5e,0x3a,0x1d,0xae,0xae,0xeb,0xea,0xea,0xea,0xea,0xea,0xea,0x40,0xc0, 0xfe,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe8,0x1d,0xa0,0x63,0x6e,0x72,0x74,0x75, 0x78,0x75,0x5a,0x36,0x19,0xaa,0xa9,0xe6,0xe6,0x1b,0x9e,0x61,0x6c,0x6f,0x71,0x73, 0x76,0x73,0x58,0x34,0x16,0xa7,0xa7,0xe4,0xe4,0xe4,0xe4,0xe3,0xe3,0xe3,0x39,0xb9, 0xf8,0xe3,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0x17,0x99,0x5c,0x67,0x6b,0x6d,0x6f, 0x71,0x6e,0x53,0x2f,0x15,0xa3,0xa3,0xdf,0xdf,0x17,0x97,0x5a,0x65,0x69,0x6a,0x6c, 0x6f,0x6c,0x51,0x2d,0x15,0xa0,0xa0,0xdd,0xdd,0x17,0x95,0x58,0x62,0x66,0x68,0x6a, 0x6d,0x6a,0x4f,0x2a,0x15,0x9e,0x9e,0xdb,0xdb,0xdb,0xda,0xda,0xda,0xda,0x30,0xb0, 0xef,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd8,0x17,0x90,0x53,0x5e,0x62,0x64,0x65, 0x68,0x65,0x4a,0x2a,0x15,0x9a,0x99,0xd6,0xd6,0x17,0x8e,0x51,0x5c,0x5f,0x61,0x63, 0x66,0x63,0x48,0x2a,0x15,0x98,0x97,0xd4,0xd4,0xd4,0xd4,0xd4,0xd4,0xd3,0x30,0xa9, 0xe8,0xd3,0xd3,0xd3,0xd2,0xd2,0xd2,0xd2,0xd2,0x17,0x8a,0x4c,0x57,0x5b,0x5d,0x5f, 0x62,0x5f,0x46,0x2a,0x15,0x93,0x93,0xd0,0xd0,0x17,0x87,0x4c,0x55,0x59,0x5b,0x5d, 0x60,0x5c,0x46,0x2a,0x15,0x91,0x91,0xce,0xcd,0x17,0x85,0x4c,0x54,0x57,0x59,0x5a, 0x5d,0x5a,0x46,0x2a,0x15,0x8f,0x8e,0xcb,0xcb,0xcb,0xcb,0xcb,0xcb,0xca,0x30,0xa0, 0xdf,0xcc,0xcb,0xcc,0xcc,0xcd,0xcc,0xcc,0xcd,0x19,0x98,0x50,0x59,0x5d,0x5b,0x59, 0x58,0x55,0x41,0x27,0x12,0x93,0x93,0xce,0xcf,0x19,0x9a,0x50,0x5b,0x5f,0x5d,0x5c, 0x5a,0x56,0x41,0x27,0x12,0x95,0x96,0xd1,0xd1,0xd1,0xd1,0xd1,0xd2,0xd2,0x30,0xa7, 0xe6,0xd3,0xd2,0xd2,0xd3,0xd3,0xd3,0xd3,0xd3,0x19,0x9e,0x54,0x60,0x64,0x62,0x60, 0x5e,0x5a,0x41,0x27,0x12,0x9a,0x9a,0xd5,0xd5,0x19,0xa1,0x56,0x62,0x66,0x64,0x62, 0x60,0x5c,0x43,0x27,0x12,0x9c,0x9c,0xd7,0xd7,0x19,0xa3,0x58,0x64,0x68,0x66,0x64, 0x63,0x5f,0x45,0x27,0x12,0x9e,0x9e,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0x30,0xb0, 0xef,0xdc,0xdb,0xdb,0xdb,0xdd,0xdc,0xdc,0xdd,0x19,0xa7,0x5c,0x69,0x6d,0x6b,0x69, 0x67,0x63,0x49,0x28,0x12,0xa3,0xa3,0xde,0xde,0x19,0xaa,0x5f,0x6b,0x6f,0x6d,0x6b, 0x69,0x66,0x4c,0x2a,0x12,0xa5,0xa5,0xe0,0xe0,0xe1,0xe1,0xe1,0xe2,0xe1,0x36,0xb6, 0xf6,0xe3,0xe2,0xe2,0xe2,0xe2,0xe2,0xe3,0xe3,0x1a,0xae,0x63,0x6f,0x73,0x72,0x70, 0x6e,0x6a,0x50,0x2e,0x12,0xaa,0xaa,0xe5,0xe5,0x1c,0xb0,0x65,0x72,0x76,0x74,0x72, 0x70,0x6c,0x52,0x31,0x15,0xac,0xac,0xe7,0xe7,0x1e,0xb3,0x68,0x74,0x78,0x76,0x74, 0x72,0x6f,0x55,0x33,0x17,0xae,0xae,0xe9,0xea,0xea,0xea,0xea,0xea,0xea,0x3f,0xc0, 0xff,0xec,0xeb,0xeb,0xeb,0xec,0xeb,0xeb,0xed,0x23,0xb7,0x6c,0x78,0x7c,0x7a,0x79, 0x77,0x73,0x59,0x37,0x1b,0xb2,0xb3,0xee,0xee,0x25,0xb9,0x6e,0x7a,0x7f,0x7d,0x7b, 0x79,0x75,0x5b,0x39,0x1e,0xb5,0xb5,0xef,0xef,0xef,0xef,0xef,0xf0,0xef,0x46,0xc6, 0xff,0xf0,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0x2a,0xbe,0x73,0x7f,0x83,0x81,0x7f, 0x7e,0x7a,0x60,0x3e,0x22,0xb9,0xb9,0xef,0xef,0x2c,0xc0,0x75,0x81,0x85,0x84,0x82, 0x80,0x7c,0x62,0x40,0x24,0xbc,0xbc,0xef,0xef,0x2e,0xc2,0x77,0x84,0x88,0x86,0x84, 0x82,0x7e,0x64,0x43,0x27,0xbe,0xbe,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0x4f,0xcf, 0xff,0xf0,0xef,0xef,0xef,0xf0,0xef,0xef,0xf0,0x33,0xc7,0x7c,0x88,0x8c,0x8a,0x88, 0x87,0x83,0x69,0x47,0x2b,0xc2,0xc2,0xef,0xef,0x35,0xc8,0x7e,0x8a,0x8e,0x8d,0x8b, 0x89,0x85,0x6b,0x49,0x2d,0xc3,0xc3,0xef,0xef,0xef,0xef,0xef,0xf0,0xef,0x56,0xcf, 0xff,0xf0,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0x39,0xc8,0x82,0x8f,0x93,0x91,0x8f, 0x8d,0x89,0x6f,0x4e,0x32,0xc3,0xc3,0xef,0xef,0x3b,0xc8,0x85,0x91,0x95,0x93,0x91, 0x8f,0x8c,0x72,0x50,0x34,0xc3,0xc3,0xef,0xef,0x3e,0xc8,0x87,0x93,0x97,0x95,0x94, 0x92,0x8e,0x74,0x52,0x36,0xc3,0xc3,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0x5f,0xcf, 0xff,0xf0,0xef,0xef,0xef,0xf0,0xef,0xef,0xf0,0x3f,0xc8,0x88,0x94,0x98,0x96,0x94, 0x91,0x8d,0x73,0x51,0x35,0xc3,0xc3,0xef,0xef,0x3d,0xc8,0x86,0x92,0x96,0x94,0x91, 0x8f,0x8b,0x71,0x4f,0x33,0xc3,0xc3,0xef,0xef,0xef,0xef,0xef,0xf0,0xef,0x58,0xcf, 0xff,0xf0,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0x39,0xc8,0x81,0x8d,0x91,0x8f,0x8d, 0x8b,0x87,0x6c,0x4a,0x2e,0xc3,0xc3,0xef,0xef,0x37,0xc8,0x7f,0x8b,0x8f,0x8d,0x8b, 0x89,0x85,0x6a,0x48,0x2c,0xc3,0xc3,0xef,0xef,0x34,0xc8,0x7d,0x89,0x8d,0x8b,0x89, 0x86,0x82,0x68,0x46,0x2a,0xc1,0xc1,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0x4f,0xcf, 0xff,0xf0,0xef,0xef,0xef,0xf0,0xef,0xef,0xf0,0x30,0xc4,0x79,0x84,0x88,0x86,0x84, 0x82,0x7e,0x64,0x41,0x25,0xbc,0xbc,0xef,0xef,0x2e,0xc1,0x76,0x82,0x86,0x84,0x82, 0x80,0x7b,0x61,0x3f,0x23,0xba,0xba,0xef,0xef,0xef,0xef,0xef,0xf0,0xef,0x49,0xc8, 0xff,0xf0,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0x29,0xbd,0x72,0x7e,0x81,0x7f,0x7d, 0x7b,0x77,0x5d,0x3b,0x1e,0xb5,0xb5,0xef,0xef,0x27,0xbb,0x6f,0x7b,0x7f,0x7d,0x7b, 0x79,0x75,0x5a,0x38,0x1c,0xb3,0xb3,0xee,0xee,0x25,0xb8,0x6d,0x79,0x7d,0x7b,0x79, 0x77,0x72,0x58,0x36,0x1a,0xb1,0xb1,0xec,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0x40,0xc0, 0xfe,0xeb,0xea,0xea,0xea,0xeb,0xea,0xe9,0xea,0x20,0xb4,0x69,0x75,0x79,0x77,0x74, 0x72,0x6e,0x54,0x32,0x16,0xad,0xac,0xe7,0xe7,0x1e,0xb2,0x67,0x73,0x76,0x74,0x72, 0x70,0x6c,0x52,0x30,0x13,0xaa,0xaa,0xe5,0xe5,0xe5,0xe5,0xe4,0xe5,0xe4,0x39,0xb9, 0xf8,0xe5,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0x19,0xad,0x62,0x6e,0x72,0x70,0x6e, 0x6b,0x67,0x4d,0x2b,0x12,0xa6,0xa6,0xe0,0xe0,0x19,0xab,0x60,0x6c,0x70,0x6d,0x6b, 0x69,0x65,0x4b,0x29,0x12,0xa3,0xa3,0xde,0xde,0x19,0xa9,0x5e,0x69,0x6d,0x6b,0x69, 0x67,0x63,0x49,0x27,0x12,0xa1,0xa1,0xdc,0xdc,0xdc,0xdb,0xdb,0xdb,0xdb,0x30,0xb0, 0xef,0xdb,0xda,0xda,0xda,0xdb,0xda,0xda,0xda,0x19,0xa4,0x59,0x65,0x69,0x67,0x64, 0x62,0x5e,0x44,0x27,0x12,0x9d,0x9c,0xd7,0xd7,0x19,0xa2,0x57,0x63,0x66,0x64,0x62, 0x60,0x5c,0x42,0x27,0x12,0x9b,0x9a,0xd5,0xd5,0xd5,0xd5,0xd5,0xd6,0xd4,0x30,0xa9, 0xe8,0xd5,0xd4,0xd4,0xd3,0xd3,0xd3,0xd3,0xd3,0x19,0x9e,0x52,0x5e,0x62,0x60,0x5e, 0x5c,0x58,0x41,0x27,0x12,0x96,0x96,0xd1,0xd1,0x19,0x9b,0x50,0x5c,0x60,0x5e,0x5c, 0x5a,0x55,0x41,0x27,0x12,0x94,0x94,0xcf,0xce,0x19,0x99,0x50,0x5a,0x5e,0x5c,0x59, 0x58,0x55,0x41,0x27,0x12,0x92,0x91,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcb,0x30,0xa0, 0xdf,0xcc,0xcc,0xcd,0xce,0xcd,0xcd,0xcd,0xcd,0x1b,0xab,0x52,0x58,0x58,0x55,0x55, 0x52,0x50,0x3c,0x24,0x10,0x97,0x97,0xcf,0xd0,0x1b,0xad,0x52,0x5a,0x59,0x56,0x56, 0x53,0x50,0x3c,0x24,0x10,0x99,0x9a,0xd2,0xd2,0xd2,0xd3,0xd3,0xd2,0xd3,0x30,0xa7, 0xe6,0xd3,0xd3,0xd3,0xd5,0xd4,0xd4,0xd4,0xd5,0x1b,0xb1,0x57,0x5f,0x5e,0x5b,0x5a, 0x57,0x54,0x3c,0x24,0x10,0x9e,0x9e,0xd6,0xd6,0x1b,0xb4,0x59,0x61,0x60,0x5d,0x5c, 0x59,0x56,0x3c,0x24,0x10,0xa0,0xa0,0xd9,0xd9,0x1b,0xb6,0x5b,0x63,0x62,0x5f,0x5e, 0x5c,0x59,0x3e,0x24,0x10,0xa2,0xa2,0xdb,0xdc,0xdb,0xdb,0xdb,0xdb,0xdb,0x30,0xb0, 0xef,0xdc,0xdc,0xdc,0xdd,0xdd,0xdd,0xdd,0xdd,0x1b,0xba,0x5f,0x68,0x67,0x64,0x63, 0x60,0x5d,0x42,0x24,0x10,0xa7,0xa7,0xdf,0xdf,0x1b,0xbd,0x62,0x6a,0x69,0x66,0x65, 0x62,0x60,0x45,0x26,0x10,0xa9,0xa9,0xe1,0xe2,0xe2,0xe3,0xe3,0xe2,0xe2,0x36,0xb6, 0xf6,0xe3,0xe3,0xe3,0xe4,0xe3,0xe3,0xe4,0xe5,0x1d,0xc1,0x66,0x6e,0x6d,0x6b,0x6a, 0x67,0x64,0x49,0x2a,0x10,0xae,0xae,0xe6,0xe6,0x1f,0xc3,0x68,0x71,0x70,0x6d,0x6c, 0x69,0x66,0x4b,0x2d,0x12,0xb0,0xb0,0xe9,0xe9,0x21,0xc6,0x6b,0x73,0x72,0x6f,0x6e, 0x6b,0x69,0x4e,0x2f,0x14,0xb2,0xb2,0xea,0xec,0xeb,0xeb,0xeb,0xeb,0xeb,0x3f,0xc0, 0xff,0xec,0xec,0xec,0xed,0xec,0xec,0xec,0xed,0x26,0xca,0x6f,0x77,0x76,0x73,0x73, 0x70,0x6d,0x52,0x33,0x18,0xb6,0xb7,0xef,0xef,0x28,0xcc,0x71,0x79,0x79,0x76,0x75, 0x72,0x6f,0x54,0x35,0x1b,0xb9,0xb9,0xf0,0xf0,0xf0,0xf1,0xf1,0xf0,0xf0,0x46,0xc6, 0xff,0xf0,0xf0,0xf0,0xf1,0xf0,0xf0,0xf0,0xf1,0x2d,0xd1,0x76,0x7e,0x7d,0x7a,0x79, 0x77,0x74,0x59,0x3a,0x1f,0xbd,0xbd,0xf0,0xf0,0x2f,0xd3,0x78,0x80,0x7f,0x7d,0x7c, 0x79,0x76,0x5b,0x3c,0x21,0xc0,0xc0,0xf1,0xf1,0x31,0xd5,0x7a,0x83,0x82,0x7f,0x7e, 0x7b,0x78,0x5d,0x3f,0x24,0xc2,0xc2,0xf0,0xf1,0xf0,0xf0,0xf0,0xf0,0xf0,0x4f,0xcf, 0xff,0xf0,0xf0,0xf0,0xf1,0xf0,0xf0,0xf0,0xf0,0x36,0xd6,0x7f,0x87,0x86,0x83,0x82, 0x80,0x7d,0x62,0x43,0x28,0xc6,0xc6,0xf0,0xf0,0x38,0xd6,0x81,0x89,0x88,0x86,0x85, 0x82,0x7f,0x64,0x45,0x2a,0xc6,0xc6,0xf0,0xf0,0xf0,0xf1,0xf1,0xf0,0xf0,0x56,0xcf, 0xff,0xf0,0xf0,0xf0,0xf1,0xf0,0xf0,0xf0,0xf1,0x3c,0xd6,0x85,0x8e,0x8d,0x8a,0x89, 0x86,0x83,0x68,0x4a,0x2f,0xc6,0xc6,0xf0,0xf0,0x3e,0xd6,0x88,0x90,0x8f,0x8c,0x8b, 0x88,0x86,0x6b,0x4c,0x31,0xc6,0xc6,0xf1,0xf1,0x41,0xd6,0x8a,0x92,0x91,0x8e,0x8e, 0x8b,0x88,0x6d,0x4e,0x33,0xc6,0xc6,0xf0,0xf1,0xf0,0xf0,0xf0,0xf0,0xf0,0x5f,0xcf, 0xff,0xf0,0xf0,0xf0,0xf1,0xf0,0xf0,0xf0,0xf0,0x42,0xd6,0x8b,0x93,0x92,0x8f,0x8e, 0x8a,0x87,0x6c,0x4d,0x32,0xc6,0xc6,0xf0,0xf0,0x40,0xd6,0x89,0x91,0x90,0x8d,0x8b, 0x88,0x85,0x6a,0x4b,0x30,0xc6,0xc6,0xf0,0xf0,0xf0,0xf1,0xf1,0xf0,0xf0,0x58,0xcf, 0xff,0xf0,0xf0,0xf0,0xf1,0xf0,0xf0,0xf0,0xf1,0x3c,0xd6,0x84,0x8c,0x8b,0x88,0x87, 0x84,0x81,0x65,0x46,0x2b,0xc6,0xc6,0xf0,0xf0,0x3a,0xd6,0x82,0x8a,0x89,0x86,0x85, 0x82,0x7f,0x63,0x44,0x29,0xc6,0xc6,0xf1,0xf1,0x37,0xd6,0x80,0x88,0x87,0x84,0x83, 0x7f,0x7c,0x61,0x42,0x27,0xc5,0xc5,0xf0,0xf1,0xf0,0xf0,0xf0,0xf0,0xf0,0x4f,0xcf, 0xff,0xf0,0xf0,0xf0,0xf1,0xf0,0xf0,0xf0,0xf0,0x33,0xd6,0x7c,0x83,0x82,0x7f,0x7e, 0x7b,0x78,0x5d,0x3d,0x22,0xc0,0xc0,0xf0,0xf0,0x31,0xd4,0x79,0x81,0x80,0x7d,0x7c, 0x79,0x75,0x5a,0x3b,0x20,0xbe,0xbe,0xf0,0xf0,0xf0,0xf1,0xf1,0xf0,0xf0,0x49,0xc8, 0xff,0xf0,0xf0,0xf0,0xf1,0xf0,0xf0,0xf0,0xf1,0x2c,0xd0,0x75,0x7d,0x7b,0x78,0x77, 0x74,0x71,0x56,0x37,0x1b,0xb9,0xb9,0xf0,0xf0,0x2a,0xce,0x72,0x7a,0x79,0x76,0x75, 0x72,0x6f,0x53,0x34,0x19,0xb7,0xb7,0xf0,0xf0,0x27,0xcb,0x70,0x78,0x77,0x74,0x73, 0x70,0x6c,0x51,0x32,0x17,0xb5,0xb5,0xed,0xed,0xec,0xec,0xec,0xec,0xec,0x40,0xc0, 0xfe,0xeb,0xeb,0xeb,0xec,0xeb,0xeb,0xea,0xea,0x23,0xc7,0x6c,0x74,0x73,0x6f,0x6e, 0x6b,0x68,0x4d,0x2e,0x13,0xb1,0xb0,0xe8,0xe8,0x21,0xc5,0x6a,0x72,0x70,0x6d,0x6c, 0x69,0x66,0x4b,0x2c,0x10,0xae,0xae,0xe6,0xe6,0xe6,0xe7,0xe6,0xe5,0xe5,0x39,0xb9, 0xf8,0xe5,0xe4,0xe4,0xe5,0xe4,0xe4,0xe4,0xe5,0x1c,0xc0,0x65,0x6d,0x6c,0x69,0x68, 0x64,0x61,0x46,0x27,0x10,0xaa,0xaa,0xe1,0xe1,0x1b,0xbe,0x63,0x6b,0x6a,0x66,0x65, 0x62,0x5f,0x44,0x25,0x10,0xa7,0xa7,0xe0,0xe0,0x1b,0xbc,0x61,0x68,0x67,0x64,0x63, 0x60,0x5d,0x42,0x24,0x10,0xa5,0xa5,0xdd,0xde,0xdd,0xdc,0xdc,0xdc,0xdc,0x30,0xb0, 0xef,0xdb,0xdb,0xdb,0xdc,0xdb,0xdb,0xdb,0xda,0x1b,0xb7,0x5c,0x64,0x63,0x60,0x5e, 0x5b,0x58,0x3d,0x24,0x10,0xa1,0xa0,0xd8,0xd8,0x1b,0xb5,0x5a,0x62,0x60,0x5d,0x5c, 0x59,0x56,0x3c,0x24,0x10,0x9f,0x9e,0xd6,0xd6,0xd6,0xd7,0xd7,0xd6,0xd5,0x30,0xa9, 0xe8,0xd5,0xd5,0xd5,0xd5,0xd4,0xd4,0xd4,0xd5,0x1b,0xb1,0x55,0x5d,0x5c,0x59,0x58, 0x55,0x52,0x3c,0x24,0x10,0x9a,0x9a,0xd2,0xd2,0x1b,0xae,0x53,0x5b,0x5a,0x57,0x56, 0x52,0x50,0x3c,0x24,0x10,0x98,0x98,0xd1,0xd0,0x1b,0xac,0x52,0x59,0x58,0x55,0x55, 0x52,0x50,0x3c,0x24,0x10,0x96,0x95,0xcd,0xce,0xcd,0xcd,0xcd,0xcd,0xcc,0x30,0xa0, 0xdf,0xcd,0xce,0xce,0xce,0xcf,0xce,0xce,0xce,0x1b,0xaa,0x4d,0x54,0x52,0x51,0x4f, 0x4e,0x4b,0x39,0x22,0x0f,0x9a,0x9a,0xd1,0xd2,0x1b,0xac,0x4d,0x54,0x52,0x51,0x4f, 0x4e,0x4b,0x39,0x22,0x0f,0x9c,0x9d,0xd3,0xd3,0xd4,0xd3,0xd3,0xd4,0xd4,0x30,0xa7, 0xe6,0xd4,0xd4,0xd4,0xd5,0xd5,0xd6,0xd5,0xd6,0x1b,0xb0,0x50,0x59,0x57,0x55,0x52, 0x51,0x4d,0x39,0x22,0x0f,0xa1,0xa1,0xd7,0xd7,0x1b,0xb3,0x52,0x5b,0x59,0x57,0x54, 0x53,0x4f,0x39,0x22,0x0f,0xa3,0xa3,0xd9,0xda,0x1b,0xb5,0x54,0x5d,0x5b,0x59,0x56, 0x56,0x52,0x3a,0x22,0x0f,0xa5,0xa5,0xdc,0xdd,0xdc,0xdc,0xdc,0xdd,0xdc,0x30,0xb0, 0xef,0xdd,0xde,0xdd,0xdd,0xdf,0xde,0xde,0xde,0x1b,0xb9,0x58,0x62,0x60,0x5e,0x5b, 0x5a,0x56,0x3e,0x22,0x0f,0xaa,0xaa,0xe1,0xe1,0x1b,0xbc,0x5b,0x64,0x62,0x60,0x5d, 0x5c,0x59,0x41,0x23,0x0f,0xac,0xac,0xe2,0xe3,0xe4,0xe3,0xe3,0xe4,0xe3,0x36,0xb7, 0xf6,0xe4,0xe4,0xe4,0xe4,0xe4,0xe5,0xe5,0xe6,0x1d,0xc0,0x5f,0x68,0x66,0x65,0x62, 0x61,0x5d,0x45,0x27,0x0f,0xb1,0xb1,0xe7,0xe7,0x1f,0xc2,0x61,0x6b,0x69,0x67,0x64, 0x63,0x5f,0x47,0x2a,0x10,0xb3,0xb3,0xe9,0xea,0x21,0xc5,0x64,0x6d,0x6b,0x69,0x66, 0x65,0x62,0x4a,0x2c,0x12,0xb5,0xb5,0xeb,0xed,0xec,0xec,0xec,0xed,0xec,0x3f,0xc0, 0xff,0xed,0xee,0xed,0xed,0xee,0xed,0xed,0xee,0x26,0xc9,0x68,0x71,0x6f,0x6d,0x6b, 0x6a,0x66,0x4e,0x30,0x16,0xb9,0xba,0xf1,0xf1,0x28,0xcb,0x6a,0x73,0x72,0x70,0x6d, 0x6c,0x68,0x50,0x32,0x19,0xbc,0xbc,0xf1,0xf1,0xf2,0xf1,0xf1,0xf2,0xf1,0x46,0xc6, 0xff,0xf1,0xf1,0xf1,0xf1,0xf1,0xf2,0xf1,0xf2,0x2d,0xd0,0x6f,0x78,0x76,0x74,0x71, 0x71,0x6d,0x55,0x37,0x1d,0xc0,0xc0,0xf1,0xf1,0x2f,0xd2,0x71,0x7a,0x78,0x77,0x74, 0x73,0x6f,0x57,0x39,0x1f,0xc3,0xc3,0xf1,0xf2,0x31,0xd4,0x73,0x7d,0x7b,0x79,0x76, 0x75,0x71,0x59,0x3c,0x22,0xc5,0xc5,0xf1,0xf2,0xf1,0xf1,0xf1,0xf2,0xf1,0x4f,0xcf, 0xff,0xf1,0xf2,0xf1,0xf1,0xf2,0xf1,0xf1,0xf1,0x36,0xd5,0x78,0x81,0x7f,0x7d,0x7a, 0x7a,0x76,0x5e,0x40,0x26,0xc8,0xc8,0xf2,0xf2,0x38,0xd5,0x7a,0x83,0x81,0x80,0x7d, 0x7c,0x78,0x60,0x42,0x28,0xc8,0xc8,0xf1,0xf1,0xf2,0xf1,0xf1,0xf2,0xf1,0x56,0xcf, 0xff,0xf1,0xf1,0xf1,0xf1,0xf1,0xf2,0xf1,0xf2,0x3c,0xd5,0x7e,0x88,0x86,0x84,0x81, 0x80,0x7c,0x64,0x47,0x2d,0xc8,0xc8,0xf1,0xf1,0x3e,0xd5,0x81,0x8a,0x88,0x86,0x83, 0x82,0x7f,0x67,0x49,0x2f,0xc8,0xc8,0xf1,0xf2,0x41,0xd5,0x83,0x8c,0x8a,0x88,0x86, 0x85,0x81,0x69,0x4b,0x31,0xc8,0xc8,0xf1,0xf2,0xf1,0xf1,0xf1,0xf2,0xf1,0x5f,0xcf, 0xff,0xf1,0xf2,0xf1,0xf1,0xf2,0xf1,0xf1,0xf1,0x42,0xd5,0x84,0x8d,0x8b,0x89,0x86, 0x84,0x80,0x68,0x4a,0x30,0xc8,0xc8,0xf2,0xf2,0x40,0xd5,0x82,0x8b,0x89,0x86,0x83, 0x82,0x7e,0x66,0x48,0x2e,0xc8,0xc8,0xf1,0xf1,0xf2,0xf1,0xf1,0xf2,0xf1,0x58,0xcf, 0xff,0xf1,0xf1,0xf1,0xf1,0xf1,0xf2,0xf1,0xf2,0x3c,0xd5,0x7d,0x86,0x84,0x82,0x7f, 0x7e,0x7a,0x61,0x43,0x29,0xc8,0xc8,0xf1,0xf1,0x3a,0xd5,0x7b,0x84,0x82,0x80,0x7d, 0x7c,0x78,0x5f,0x41,0x27,0xc8,0xc8,0xf1,0xf2,0x37,0xd5,0x79,0x82,0x80,0x7e,0x7b, 0x79,0x75,0x5d,0x3f,0x25,0xc8,0xc8,0xf1,0xf2,0xf1,0xf1,0xf1,0xf2,0xf1,0x4f,0xcf, 0xff,0xf1,0xf2,0xf1,0xf1,0xf2,0xf1,0xf1,0xf1,0x33,0xd5,0x75,0x7d,0x7b,0x79,0x76, 0x75,0x71,0x59,0x3a,0x20,0xc3,0xc3,0xf2,0xf2,0x31,0xd3,0x72,0x7b,0x79,0x77,0x74, 0x73,0x6e,0x56,0x38,0x1e,0xc1,0xc1,0xf1,0xf1,0xf2,0xf1,0xf1,0xf2,0xf1,0x49,0xc8, 0xff,0xf1,0xf1,0xf1,0xf1,0xf1,0xf2,0xf1,0xf2,0x2c,0xcf,0x6e,0x77,0x74,0x72,0x6f, 0x6e,0x6a,0x52,0x34,0x19,0xbc,0xbc,0xf1,0xf1,0x2a,0xcd,0x6b,0x74,0x72,0x70,0x6d, 0x6c,0x68,0x4f,0x31,0x17,0xba,0xba,0xf0,0xf1,0x27,0xca,0x69,0x72,0x70,0x6e,0x6b, 0x69,0x65,0x4d,0x2f,0x15,0xb8,0xb8,0xed,0xee,0xed,0xed,0xed,0xee,0xed,0x40,0xc0, 0xfe,0xec,0xed,0xec,0xec,0xed,0xec,0xeb,0xeb,0x23,0xc6,0x65,0x6e,0x6c,0x69,0x66, 0x65,0x61,0x49,0x2b,0x11,0xb3,0xb3,0xea,0xea,0x21,0xc4,0x63,0x6c,0x69,0x67,0x64, 0x63,0x5f,0x47,0x29,0x0f,0xb1,0xb1,0xe7,0xe7,0xe8,0xe7,0xe6,0xe7,0xe6,0x39,0xb9, 0xf8,0xe6,0xe5,0xe5,0xe5,0xe5,0xe6,0xe5,0xe6,0x1c,0xbf,0x5e,0x67,0x65,0x63,0x60, 0x5e,0x5a,0x42,0x24,0x0f,0xad,0xad,0xe2,0xe2,0x1b,0xbd,0x5c,0x65,0x63,0x60,0x5d, 0x5c,0x58,0x40,0x22,0x0f,0xaa,0xaa,0xe0,0xe1,0x1b,0xbb,0x5a,0x62,0x60,0x5e,0x5b, 0x5a,0x56,0x3e,0x22,0x0f,0xa8,0xa8,0xde,0xdf,0xde,0xdd,0xdd,0xde,0xdd,0x30,0xb0, 0xef,0xdc,0xdd,0xdc,0xdc,0xdd,0xdc,0xdc,0xdb,0x1b,0xb6,0x55,0x5e,0x5c,0x5a,0x56, 0x55,0x51,0x39,0x22,0x0f,0xa4,0xa3,0xda,0xda,0x1b,0xb4,0x53,0x5c,0x59,0x57,0x54, 0x53,0x4f,0x39,0x22,0x0f,0xa2,0xa1,0xd7,0xd7,0xd8,0xd7,0xd7,0xd8,0xd6,0x30,0xa9, 0xe8,0xd6,0xd6,0xd6,0xd5,0xd5,0xd6,0xd5,0xd6,0x1b,0xb0,0x4e,0x57,0x55,0x53,0x50, 0x4f,0x4b,0x39,0x22,0x0f,0x9d,0x9d,0xd3,0xd3,0x1b,0xad,0x4d,0x55,0x53,0x51,0x4f, 0x4e,0x4b,0x39,0x22,0x0f,0x9b,0x9b,0xd0,0xd1,0x1b,0xab,0x4d,0x54,0x52,0x51,0x4f, 0x4e,0x4b,0x39,0x22,0x0f,0x99,0x98,0xce,0xcf,0xce,0xce,0xce,0xcf,0xcd,0x30,0xa0, 0xdf,0xcf,0xce,0xd0,0xcf,0xcf,0xd0,0xcf,0xd0,0x18,0x96,0x49,0x4e,0x4e,0x4c,0x4a, 0x48,0x45,0x33,0x1e,0x0c,0x9e,0x9d,0xd2,0xd3,0x18,0x98,0x49,0x4e,0x4e,0x4c,0x4a, 0x48,0x45,0x33,0x1e,0x0c,0x9f,0xa0,0xd4,0xd5,0xd4,0xd5,0xd5,0xd4,0xd5,0x30,0xa7, 0xe6,0xd6,0xd5,0xd5,0xd6,0xd6,0xd6,0xd7,0xd7,0x18,0x9c,0x4b,0x51,0x51,0x4e,0x4c, 0x49,0x45,0x33,0x1e,0x0c,0xa5,0xa4,0xd8,0xd9,0x18,0x9f,0x4d,0x53,0x53,0x50,0x4e, 0x4b,0x47,0x33,0x1e,0x0c,0xa7,0xa6,0xdb,0xda,0x18,0xa1,0x4f,0x55,0x55,0x52,0x50, 0x4e,0x4a,0x33,0x1e,0x0c,0xa8,0xa8,0xdd,0xdd,0xdd,0xde,0xde,0xdd,0xdd,0x30,0xb0, 0xef,0xdf,0xde,0xdf,0xde,0xdf,0xe0,0xdf,0xe0,0x18,0xa5,0x53,0x5a,0x5a,0x57,0x55, 0x52,0x4e,0x37,0x1e,0x0c,0xae,0xad,0xe2,0xe2,0x18,0xa8,0x56,0x5c,0x5c,0x59,0x57, 0x54,0x51,0x3a,0x1e,0x0c,0xaf,0xaf,0xe3,0xe5,0xe4,0xe5,0xe5,0xe4,0xe4,0x36,0xb7, 0xf6,0xe6,0xe5,0xe5,0xe5,0xe5,0xe6,0xe7,0xe7,0x19,0xac,0x5a,0x60,0x60,0x5e,0x5c, 0x59,0x55,0x3e,0x21,0x0c,0xb5,0xb4,0xe8,0xe9,0x1b,0xae,0x5c,0x63,0x63,0x60,0x5e, 0x5b,0x57,0x40,0x24,0x0d,0xb7,0xb6,0xeb,0xea,0x1d,0xb1,0x5f,0x65,0x65,0x62,0x60, 0x5d,0x5a,0x43,0x26,0x0f,0xb8,0xb8,0xec,0xed,0xed,0xee,0xee,0xed,0xed,0x3f,0xc0, 0xff,0xef,0xee,0xef,0xee,0xee,0xef,0xee,0xf0,0x22,0xb5,0x63,0x69,0x69,0x66,0x65, 0x62,0x5e,0x47,0x2a,0x13,0xbd,0xbd,0xf2,0xf2,0x24,0xb7,0x65,0x6b,0x6c,0x69,0x67, 0x64,0x60,0x49,0x2c,0x16,0xbf,0xbf,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0x46,0xc6, 0xff,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0x29,0xbc,0x6a,0x70,0x70,0x6d,0x6b, 0x69,0x65,0x4e,0x31,0x1a,0xc4,0xc3,0xf2,0xf2,0x2b,0xbe,0x6c,0x72,0x72,0x70,0x6e, 0x6b,0x67,0x50,0x33,0x1c,0xc7,0xc6,0xf2,0xf2,0x2d,0xc0,0x6e,0x75,0x75,0x72,0x70, 0x6d,0x69,0x52,0x36,0x1f,0xc8,0xc8,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0x4f,0xcf, 0xff,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0x32,0xc5,0x73,0x79,0x79,0x76,0x74, 0x72,0x6e,0x57,0x3a,0x23,0xcb,0xcb,0xf2,0xf2,0x34,0xc6,0x75,0x7b,0x7b,0x79,0x77, 0x74,0x70,0x59,0x3c,0x25,0xcb,0xcb,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0x56,0xcf, 0xff,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0x38,0xc6,0x79,0x80,0x80,0x7d,0x7b, 0x78,0x74,0x5d,0x41,0x2a,0xcb,0xcb,0xf2,0xf2,0x3a,0xc6,0x7c,0x82,0x82,0x7f,0x7d, 0x7a,0x77,0x60,0x43,0x2c,0xcb,0xcb,0xf2,0xf2,0x3d,0xc6,0x7e,0x84,0x84,0x81,0x80, 0x7d,0x79,0x62,0x45,0x2e,0xcb,0xcb,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0x5f,0xcf, 0xff,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0x3e,0xc6,0x7f,0x85,0x85,0x82,0x80, 0x7c,0x78,0x61,0x44,0x2d,0xcb,0xcb,0xf2,0xf2,0x3c,0xc6,0x7d,0x83,0x83,0x7f,0x7d, 0x7a,0x76,0x5f,0x42,0x2b,0xcb,0xcb,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0x58,0xcf, 0xff,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0x38,0xc6,0x78,0x7e,0x7e,0x7b,0x79, 0x76,0x72,0x5a,0x3d,0x26,0xcb,0xcb,0xf2,0xf2,0x36,0xc6,0x76,0x7c,0x7c,0x79,0x77, 0x74,0x70,0x58,0x3b,0x24,0xcb,0xcb,0xf2,0xf2,0x33,0xc6,0x74,0x7a,0x7a,0x77,0x75, 0x71,0x6d,0x56,0x39,0x22,0xcb,0xcb,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0x4f,0xcf, 0xff,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0x2f,0xc2,0x70,0x75,0x75,0x72,0x70, 0x6d,0x69,0x52,0x34,0x1d,0xc7,0xc6,0xf2,0xf2,0x2d,0xbf,0x6d,0x73,0x73,0x70,0x6e, 0x6b,0x66,0x4f,0x32,0x1b,0xc4,0xc4,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0x49,0xc8, 0xff,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0x28,0xbb,0x69,0x6f,0x6e,0x6b,0x69, 0x66,0x62,0x4b,0x2e,0x16,0xc0,0xbf,0xf2,0xf2,0x26,0xb9,0x66,0x6c,0x6c,0x69,0x67, 0x64,0x60,0x48,0x2b,0x14,0xbe,0xbd,0xf2,0xf1,0x23,0xb6,0x64,0x6a,0x6a,0x67,0x65, 0x61,0x5d,0x46,0x29,0x12,0xbb,0xbb,0xee,0xee,0xee,0xef,0xef,0xee,0xee,0x40,0xc0, 0xfe,0xee,0xed,0xee,0xed,0xed,0xee,0xec,0xed,0x1f,0xb2,0x60,0x66,0x66,0x62,0x60, 0x5d,0x59,0x42,0x25,0x0e,0xb7,0xb6,0xeb,0xeb,0x1d,0xb0,0x5e,0x63,0x63,0x60,0x5e, 0x5b,0x57,0x40,0x23,0x0c,0xb4,0xb4,0xe8,0xe9,0xe8,0xe9,0xe8,0xe7,0xe7,0x39,0xb9, 0xf8,0xe8,0xe6,0xe6,0xe6,0xe6,0xe6,0xe7,0xe7,0x18,0xab,0x59,0x5f,0x5f,0x5c,0x5a, 0x56,0x52,0x3b,0x1e,0x0c,0xb1,0xb0,0xe3,0xe4,0x18,0xa9,0x57,0x5d,0x5d,0x59,0x57, 0x54,0x50,0x39,0x1e,0x0c,0xae,0xad,0xe2,0xe1,0x18,0xa7,0x55,0x5a,0x5a,0x57,0x55, 0x52,0x4e,0x37,0x1e,0x0c,0xab,0xab,0xdf,0xdf,0xdf,0xdf,0xdf,0xde,0xde,0x30,0xb0, 0xef,0xde,0xdd,0xde,0xdd,0xdd,0xde,0xdd,0xdd,0x18,0xa2,0x50,0x56,0x56,0x53,0x50, 0x4d,0x49,0x33,0x1e,0x0c,0xa8,0xa6,0xdb,0xdb,0x18,0xa0,0x4e,0x54,0x53,0x50,0x4e, 0x4b,0x47,0x33,0x1e,0x0c,0xa5,0xa4,0xd8,0xd9,0xd8,0xd9,0xd9,0xd8,0xd7,0x30,0xa9, 0xe8,0xd8,0xd7,0xd7,0xd6,0xd6,0xd6,0xd7,0xd7,0x18,0x9c,0x49,0x4f,0x4f,0x4c,0x4a, 0x48,0x45,0x33,0x1e,0x0c,0xa1,0xa0,0xd4,0xd5,0x18,0x99,0x49,0x4e,0x4e,0x4c,0x4a, 0x48,0x45,0x33,0x1e,0x0c,0x9f,0x9e,0xd2,0xd1,0x18,0x97,0x49,0x4e,0x4e,0x4c,0x4a, 0x48,0x45,0x33,0x1e,0x0c,0x9b,0x9b,0xcf,0xcf,0xcf,0xd0,0xd0,0xcf,0xce,0x30,0xa0, 0xdf,0xd0,0xd0,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0x16,0x82,0x43,0x49,0x47,0x46,0x44, 0x42,0x3f,0x2f,0x1b,0x0b,0xa1,0xa0,0xd3,0xd3,0x16,0x84,0x43,0x49,0x47,0x46,0x44, 0x42,0x3f,0x2f,0x1b,0x0b,0xa3,0xa3,0xd6,0xd5,0xd6,0xd6,0xd5,0xd6,0xd6,0x30,0xa7, 0xe6,0xd6,0xd6,0xd6,0xd8,0xd7,0xd8,0xd7,0xd8,0x16,0x88,0x43,0x4a,0x48,0x46,0x44, 0x42,0x3f,0x2f,0x1b,0x0b,0xa7,0xa8,0xd9,0xda,0x16,0x8b,0x45,0x4c,0x4a,0x48,0x46, 0x43,0x3f,0x2f,0x1b,0x0b,0xa9,0xa9,0xdc,0xdc,0x16,0x8d,0x47,0x4e,0x4c,0x4a,0x48, 0x46,0x42,0x2f,0x1b,0x0b,0xab,0xac,0xde,0xde,0xdf,0xdf,0xdf,0xde,0xde,0x30,0xb0, 0xef,0xe0,0xe0,0xe0,0xe0,0xe1,0xe1,0xe1,0xe1,0x16,0x91,0x4b,0x53,0x51,0x4f,0x4d, 0x4a,0x46,0x31,0x1b,0x0b,0xb1,0xb0,0xe3,0xe2,0x16,0x94,0x4e,0x55,0x53,0x51,0x4f, 0x4c,0x49,0x34,0x1b,0x0b,0xb3,0xb2,0xe5,0xe5,0xe6,0xe6,0xe5,0xe6,0xe5,0x36,0xb7, 0xf6,0xe6,0xe6,0xe6,0xe7,0xe6,0xe8,0xe7,0xe8,0x16,0x98,0x52,0x59,0x58,0x56,0x54, 0x51,0x4d,0x38,0x1d,0x0b,0xb7,0xb8,0xe9,0xea,0x18,0x9a,0x54,0x5c,0x5a,0x58,0x56, 0x53,0x4f,0x3a,0x20,0x0b,0xb9,0xb9,0xec,0xec,0x1a,0x9d,0x57,0x5e,0x5c,0x5a,0x58, 0x55,0x52,0x3d,0x22,0x0d,0xbb,0xbc,0xed,0xee,0xef,0xef,0xef,0xee,0xee,0x3f,0xc0, 0xff,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf1,0x1f,0xa1,0x5b,0x62,0x60,0x5e,0x5d, 0x5a,0x56,0x41,0x26,0x11,0xc0,0xc0,0xf3,0xf2,0x21,0xa3,0x5d,0x64,0x63,0x61,0x5f, 0x5c,0x58,0x43,0x28,0x14,0xc3,0xc2,0xf3,0xf2,0xf3,0xf3,0xf2,0xf3,0xf2,0x46,0xc6, 0xff,0xf2,0xf2,0xf2,0xf3,0xf2,0xf3,0xf2,0xf3,0x26,0xa8,0x62,0x69,0x67,0x65,0x63, 0x61,0x5d,0x48,0x2d,0x18,0xc6,0xc7,0xf2,0xf3,0x28,0xaa,0x64,0x6b,0x69,0x68,0x66, 0x63,0x5f,0x4a,0x2f,0x1a,0xc9,0xc9,0xf3,0xf3,0x2a,0xac,0x66,0x6e,0x6c,0x6a,0x68, 0x65,0x61,0x4c,0x32,0x1d,0xcb,0xcc,0xf2,0xf2,0xf3,0xf3,0xf3,0xf2,0xf2,0x4f,0xcf, 0xff,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0x2f,0xb1,0x6b,0x72,0x70,0x6e,0x6d, 0x6a,0x66,0x51,0x36,0x21,0xce,0xcd,0xf3,0xf2,0x31,0xb3,0x6d,0x74,0x72,0x71,0x6f, 0x6c,0x68,0x53,0x38,0x23,0xce,0xcd,0xf3,0xf2,0xf3,0xf3,0xf2,0xf3,0xf2,0x56,0xcf, 0xff,0xf2,0xf2,0xf2,0xf3,0xf2,0xf3,0xf2,0xf3,0x35,0xb7,0x71,0x79,0x77,0x75,0x73, 0x70,0x6c,0x57,0x3d,0x28,0xcd,0xce,0xf2,0xf3,0x37,0xb7,0x74,0x7b,0x79,0x77,0x75, 0x72,0x6f,0x5a,0x3f,0x2a,0xcd,0xcd,0xf3,0xf3,0x3a,0xb7,0x76,0x7d,0x7b,0x79,0x78, 0x75,0x71,0x5c,0x41,0x2c,0xcd,0xce,0xf2,0xf2,0xf3,0xf3,0xf3,0xf2,0xf2,0x5f,0xcf, 0xff,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0x3b,0xb7,0x77,0x7e,0x7c,0x7a,0x78, 0x74,0x70,0x5b,0x40,0x2b,0xce,0xcd,0xf3,0xf2,0x39,0xb7,0x75,0x7c,0x7a,0x77,0x75, 0x72,0x6e,0x59,0x3e,0x29,0xce,0xcd,0xf3,0xf2,0xf3,0xf3,0xf2,0xf3,0xf2,0x58,0xcf, 0xff,0xf2,0xf2,0xf2,0xf3,0xf2,0xf3,0xf2,0xf3,0x35,0xb7,0x70,0x77,0x75,0x73,0x71, 0x6e,0x6a,0x54,0x39,0x24,0xcd,0xce,0xf2,0xf3,0x33,0xb4,0x6e,0x75,0x73,0x71,0x6f, 0x6c,0x67,0x52,0x37,0x22,0xcd,0xcd,0xf3,0xf3,0x30,0xb2,0x6c,0x73,0x71,0x6f,0x6d, 0x69,0x65,0x50,0x35,0x20,0xcd,0xce,0xf2,0xf2,0xf3,0xf3,0xf3,0xf2,0xf2,0x4f,0xcf, 0xff,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0x2c,0xae,0x68,0x6e,0x6c,0x6a,0x68, 0x65,0x61,0x4c,0x30,0x1b,0xca,0xc9,0xf3,0xf2,0x2a,0xab,0x65,0x6c,0x6a,0x68,0x66, 0x63,0x5e,0x49,0x2e,0x19,0xc8,0xc7,0xf3,0xf2,0xf3,0xf3,0xf2,0xf3,0xf2,0x49,0xc8, 0xff,0xf2,0xf2,0xf2,0xf3,0xf2,0xf3,0xf2,0xf3,0x25,0xa7,0x61,0x68,0x65,0x63,0x61, 0x5e,0x5a,0x45,0x2a,0x14,0xc2,0xc3,0xf2,0xf3,0x23,0xa5,0x5e,0x65,0x63,0x61,0x5f, 0x5c,0x58,0x42,0x27,0x12,0xc0,0xc0,0xf3,0xf3,0x20,0xa2,0x5c,0x63,0x61,0x5f,0x5d, 0x59,0x55,0x40,0x25,0x10,0xbe,0xbf,0xef,0xef,0xf0,0xf0,0xf0,0xef,0xef,0x40,0xc0, 0xfe,0xef,0xef,0xef,0xef,0xef,0xef,0xee,0xee,0x1c,0x9e,0x58,0x5f,0x5d,0x5a,0x58, 0x55,0x51,0x3c,0x21,0x0c,0xba,0xb9,0xec,0xeb,0x1a,0x9c,0x56,0x5c,0x5a,0x58,0x56, 0x53,0x4f,0x3a,0x1e,0x0b,0xb8,0xb7,0xea,0xe9,0xea,0xe9,0xe8,0xe9,0xe8,0x39,0xb9, 0xf8,0xe8,0xe7,0xe7,0xe8,0xe7,0xe8,0xe7,0xe8,0x16,0x97,0x51,0x58,0x56,0x54,0x52, 0x4e,0x4a,0x35,0x1b,0x0b,0xb3,0xb4,0xe4,0xe5,0x16,0x95,0x4f,0x56,0x54,0x51,0x4f, 0x4c,0x48,0x33,0x1b,0x0b,0xb0,0xb0,0xe3,0xe3,0x16,0x93,0x4d,0x53,0x51,0x4f,0x4d, 0x4a,0x46,0x31,0x1b,0x0b,0xae,0xaf,0xe0,0xe0,0xe1,0xe0,0xe0,0xdf,0xdf,0x30,0xb0, 0xef,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xde,0x16,0x8e,0x48,0x4f,0x4d,0x4b,0x48, 0x45,0x41,0x2f,0x1b,0x0b,0xab,0xa9,0xdc,0xdb,0x16,0x8c,0x46,0x4d,0x4a,0x48,0x46, 0x43,0x3f,0x2f,0x1b,0x0b,0xa9,0xa7,0xda,0xd9,0xda,0xda,0xd9,0xda,0xd8,0x30,0xa9, 0xe8,0xd8,0xd8,0xd8,0xd8,0xd7,0xd8,0xd7,0xd8,0x16,0x88,0x43,0x49,0x47,0x46,0x44, 0x42,0x3f,0x2f,0x1b,0x0b,0xa3,0xa4,0xd5,0xd6,0x16,0x85,0x43,0x49,0x47,0x46,0x44, 0x42,0x3f,0x2f,0x1b,0x0b,0xa1,0xa1,0xd3,0xd3,0x16,0x83,0x43,0x49,0x47,0x46,0x44, 0x42,0x3f,0x2f,0x1b,0x0b,0x9e,0x9f,0xd0,0xd0,0xd1,0xd1,0xd1,0xcf,0xcf,0x30,0xa0, 0xdf,0xd1,0xd2,0xd2,0xd1,0xd2,0xd2,0xd2,0xd1,0x29,0x6f,0x3a,0x40,0x3e,0x3c,0x3b, 0x3a,0x36,0x27,0x16,0x18,0xa3,0xa4,0xd4,0xd4,0x29,0x71,0x3a,0x40,0x3e,0x3c,0x3b, 0x3a,0x36,0x27,0x16,0x18,0xa6,0xa7,0xd7,0xd6,0xd7,0xd6,0xd6,0xd6,0xd7,0x30,0xa7, 0xe6,0xd8,0xd8,0xd7,0xd9,0xd8,0xd9,0xd9,0xd8,0x29,0x75,0x3a,0x40,0x3e,0x3c,0x3b, 0x3a,0x36,0x27,0x16,0x18,0xab,0xab,0xdb,0xda,0x29,0x78,0x3a,0x40,0x3e,0x3c,0x3b, 0x3a,0x36,0x27,0x16,0x18,0xad,0xac,0xdd,0xdd,0x29,0x7a,0x3b,0x42,0x40,0x3d,0x3c, 0x3c,0x37,0x27,0x16,0x18,0xaf,0xae,0xdf,0xe0,0xdf,0xe0,0xe0,0xdf,0xe0,0x30,0xb0, 0xef,0xe1,0xe1,0xe1,0xe0,0xe2,0xe2,0xe2,0xe1,0x29,0x7e,0x3f,0x47,0x45,0x42,0x41, 0x40,0x3b,0x27,0x16,0x18,0xb3,0xb4,0xe4,0xe3,0x2a,0x81,0x42,0x49,0x47,0x44,0x43, 0x42,0x3e,0x2a,0x16,0x18,0xb6,0xb6,0xe6,0xe6,0xe7,0xe6,0xe6,0xe6,0xe6,0x36,0xb7, 0xf6,0xe8,0xe8,0xe7,0xe8,0xe7,0xe9,0xe9,0xe8,0x2f,0x85,0x46,0x4d,0x4c,0x49,0x48, 0x47,0x42,0x2e,0x17,0x1a,0xbb,0xbb,0xeb,0xea,0x31,0x87,0x49,0x50,0x4e,0x4b,0x4a, 0x49,0x44,0x30,0x1a,0x1c,0xbd,0xbc,0xed,0xed,0x33,0x8a,0x4b,0x52,0x50,0x4d,0x4c, 0x4b,0x47,0x33,0x1c,0x1e,0xbf,0xbe,0xee,0xf0,0xef,0xf0,0xf0,0xef,0xf0,0x3f,0xc0, 0xff,0xf1,0xf1,0xf1,0xf0,0xf1,0xf1,0xf1,0xf1,0x38,0x8e,0x4f,0x56,0x54,0x51,0x51, 0x50,0x4b,0x37,0x20,0x22,0xc2,0xc4,0xf4,0xf3,0x3a,0x90,0x51,0x58,0x57,0x54,0x53, 0x52,0x4d,0x39,0x22,0x25,0xc6,0xc6,0xf4,0xf3,0xf4,0xf3,0xf3,0xf3,0xf3,0x46,0xc6, 0xff,0xf4,0xf4,0xf3,0xf4,0xf3,0xf4,0xf4,0xf3,0x3f,0x95,0x56,0x5d,0x5b,0x58,0x57, 0x57,0x52,0x3e,0x27,0x29,0xca,0xca,0xf4,0xf3,0x41,0x97,0x58,0x5f,0x5d,0x5b,0x5a, 0x59,0x54,0x40,0x29,0x2b,0xcd,0xcc,0xf4,0xf4,0x43,0x99,0x5a,0x62,0x60,0x5d,0x5c, 0x5b,0x56,0x42,0x2c,0x2e,0xcf,0xce,0xf3,0xf4,0xf3,0xf4,0xf4,0xf3,0xf4,0x4f,0xcf, 0xff,0xf4,0xf4,0xf4,0xf3,0xf4,0xf4,0xf4,0xf3,0x48,0x9e,0x5f,0x66,0x64,0x61,0x61, 0x60,0x5b,0x47,0x30,0x32,0xcf,0xd0,0xf4,0xf3,0x4a,0xa0,0x61,0x68,0x67,0x64,0x63, 0x62,0x5d,0x49,0x32,0x34,0xd0,0xd0,0xf4,0xf3,0xf4,0xf3,0xf3,0xf3,0xf3,0x56,0xcf, 0xff,0xf4,0xf4,0xf3,0xf4,0xf3,0xf4,0xf4,0xf3,0x4e,0xa4,0x66,0x6d,0x6b,0x68,0x67, 0x66,0x61,0x4d,0x37,0x39,0xd0,0xd0,0xf4,0xf3,0x50,0xa7,0x68,0x6f,0x6d,0x6a,0x69, 0x68,0x64,0x50,0x39,0x3b,0xd0,0xcf,0xf4,0xf4,0x53,0xa9,0x6a,0x71,0x6f,0x6c,0x6c, 0x6b,0x66,0x52,0x3b,0x3d,0xd0,0xcf,0xf3,0xf4,0xf3,0xf4,0xf4,0xf3,0xf4,0x5f,0xcf, 0xff,0xf4,0xf4,0xf4,0xf3,0xf4,0xf4,0xf4,0xf3,0x54,0xa9,0x6b,0x72,0x70,0x6d,0x6c, 0x6a,0x65,0x51,0x3a,0x3c,0xcf,0xd0,0xf4,0xf3,0x52,0xa8,0x69,0x70,0x6e,0x6a,0x69, 0x68,0x63,0x4f,0x38,0x3a,0xd0,0xd0,0xf4,0xf3,0xf4,0xf3,0xf3,0xf3,0xf3,0x58,0xcf, 0xff,0xf4,0xf4,0xf3,0xf4,0xf3,0xf4,0xf4,0xf3,0x4e,0xa3,0x64,0x6b,0x69,0x66,0x65, 0x64,0x5f,0x4a,0x33,0x35,0xd0,0xd0,0xf4,0xf3,0x4c,0xa1,0x62,0x69,0x67,0x64,0x63, 0x62,0x5c,0x48,0x31,0x33,0xd0,0xcf,0xf4,0xf4,0x49,0x9f,0x60,0x67,0x65,0x62,0x60, 0x5f,0x5a,0x46,0x2f,0x31,0xd0,0xcf,0xf3,0xf4,0xf3,0xf4,0xf4,0xf3,0xf4,0x4f,0xcf, 0xff,0xf4,0xf4,0xf4,0xf3,0xf4,0xf4,0xf4,0xf3,0x45,0x9b,0x5c,0x62,0x60,0x5d,0x5c, 0x5b,0x56,0x42,0x2a,0x2c,0xcc,0xcd,0xf4,0xf3,0x43,0x98,0x59,0x60,0x5e,0x5b,0x5a, 0x59,0x53,0x3f,0x28,0x2a,0xcb,0xcb,0xf4,0xf3,0xf4,0xf3,0xf3,0xf3,0xf3,0x49,0xc8, 0xff,0xf4,0xf4,0xf3,0xf4,0xf3,0xf4,0xf4,0xf3,0x3e,0x94,0x55,0x5c,0x59,0x56,0x55, 0x54,0x4f,0x3b,0x24,0x25,0xc6,0xc6,0xf4,0xf3,0x3c,0x92,0x52,0x59,0x57,0x54,0x53, 0x52,0x4d,0x38,0x21,0x23,0xc4,0xc3,0xf4,0xf4,0x39,0x8f,0x50,0x57,0x55,0x52,0x51, 0x4f,0x4a,0x36,0x1f,0x21,0xc2,0xc1,0xf0,0xf1,0xf0,0xf1,0xf1,0xf0,0xf1,0x40,0xc0, 0xfe,0xf0,0xf0,0xf0,0xef,0xf0,0xf0,0xef,0xee,0x35,0x8b,0x4c,0x53,0x51,0x4d,0x4c, 0x4b,0x46,0x32,0x1b,0x1d,0xbc,0xbd,0xed,0xec,0x33,0x89,0x4a,0x50,0x4e,0x4b,0x4a, 0x49,0x44,0x30,0x18,0x1a,0xbb,0xbb,0xeb,0xea,0xeb,0xe9,0xe9,0xe9,0xe9,0x39,0xb9, 0xf8,0xe9,0xe9,0xe8,0xe9,0xe8,0xe9,0xe9,0xe8,0x2e,0x84,0x45,0x4c,0x4a,0x47,0x46, 0x44,0x3f,0x2b,0x16,0x18,0xb7,0xb7,0xe6,0xe5,0x2c,0x82,0x43,0x4a,0x48,0x44,0x43, 0x42,0x3d,0x29,0x16,0x18,0xb4,0xb3,0xe4,0xe4,0x2a,0x80,0x41,0x47,0x45,0x42,0x41, 0x40,0x3b,0x27,0x16,0x18,0xb2,0xb1,0xe1,0xe2,0xe1,0xe1,0xe1,0xe0,0xe1,0x30,0xb0, 0xef,0xe0,0xe0,0xe0,0xdf,0xe0,0xe0,0xe0,0xde,0x29,0x7b,0x3c,0x43,0x41,0x3e,0x3c, 0x3b,0x36,0x27,0x16,0x18,0xad,0xad,0xdd,0xdc,0x29,0x79,0x3a,0x41,0x3e,0x3c,0x3b, 0x3a,0x36,0x27,0x16,0x18,0xac,0xab,0xdb,0xda,0xdb,0xda,0xda,0xda,0xd9,0x30,0xa9, 0xe8,0xda,0xda,0xd9,0xd9,0xd8,0xd9,0xd9,0xd8,0x29,0x75,0x3a,0x40,0x3e,0x3c,0x3b, 0x3a,0x36,0x27,0x16,0x18,0xa7,0xa7,0xd7,0xd6,0x29,0x72,0x3a,0x40,0x3e,0x3c,0x3b, 0x3a,0x36,0x27,0x16,0x18,0xa5,0xa4,0xd4,0xd4,0x29,0x70,0x3a,0x40,0x3e,0x3c,0x3b, 0x3a,0x36,0x27,0x16,0x18,0xa2,0xa1,0xd1,0xd2,0xd1,0xd2,0xd2,0xd0,0xd1,0x30,0xa0, 0xdf,0xd1,0xd3,0xd3,0xd3,0xd2,0xd3,0xd3,0xd2,0x41,0x59,0x4f,0x43,0x35,0x2d,0x2c, 0x2a,0x28,0x22,0x2d,0x2c,0xa3,0xd5,0xd4,0xd6,0x41,0x5b,0x4f,0x43,0x35,0x2d,0x2c, 0x2a,0x28,0x22,0x2d,0x2c,0xa6,0xd7,0xd8,0xd7,0xd8,0xd7,0xd7,0xd7,0xd9,0x30,0xa7, 0xe6,0xd9,0xd8,0xd9,0xda,0xd9,0xd9,0xda,0xda,0x41,0x5f,0x53,0x43,0x35,0x2d,0x2c, 0x2a,0x28,0x22,0x2d,0x2c,0xaa,0xdc,0xdc,0xdc,0x42,0x62,0x55,0x45,0x35,0x2d,0x2c, 0x2a,0x28,0x22,0x2d,0x2c,0xad,0xde,0xdd,0xde,0x44,0x64,0x57,0x47,0x35,0x2d,0x2c, 0x2a,0x28,0x22,0x2d,0x2c,0xaf,0xe0,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe0,0x30,0xb0, 0xef,0xe1,0xe2,0xe2,0xe2,0xe2,0xe3,0xe3,0xe2,0x48,0x68,0x5b,0x4c,0x39,0x2f,0x2d, 0x2a,0x28,0x22,0x2f,0x2e,0xb3,0xe5,0xe4,0xe5,0x4a,0x6b,0x5e,0x4e,0x3b,0x31,0x2f, 0x2c,0x2b,0x23,0x31,0x30,0xb6,0xe6,0xe7,0xe7,0xe8,0xe7,0xe7,0xe7,0xe8,0x36,0xb7, 0xf6,0xe9,0xe8,0xe9,0xe9,0xe8,0xe9,0xea,0xea,0x4f,0x6f,0x62,0x52,0x40,0x36,0x34, 0x31,0x2f,0x27,0x35,0x35,0xba,0xec,0xec,0xec,0x51,0x71,0x65,0x55,0x42,0x38,0x36, 0x33,0x31,0x2a,0x38,0x37,0xbd,0xee,0xed,0xee,0x53,0x74,0x67,0x57,0x44,0x3a,0x38, 0x35,0x34,0x2c,0x3a,0x39,0xbf,0xf0,0xf0,0xf1,0xf1,0xf1,0xf1,0xf1,0xf0,0x3f,0xc0, 0xff,0xf1,0xf2,0xf2,0xf2,0xf1,0xf2,0xf2,0xf2,0x58,0x78,0x6b,0x5b,0x48,0x3e,0x3d, 0x3a,0x38,0x30,0x3e,0x3d,0xc2,0xf5,0xf4,0xf5,0x5a,0x7a,0x6d,0x5d,0x4b,0x41,0x3f, 0x3c,0x3a,0x32,0x40,0x40,0xc6,0xf4,0xf5,0xf4,0xf5,0xf4,0xf4,0xf4,0xf5,0x46,0xc6, 0xff,0xf5,0xf4,0xf5,0xf5,0xf4,0xf4,0xf5,0xf5,0x5f,0x7f,0x72,0x62,0x4f,0x45,0x43, 0x41,0x3f,0x37,0x45,0x44,0xc9,0xf5,0xf5,0xf5,0x61,0x81,0x74,0x64,0x51,0x48,0x46, 0x43,0x41,0x39,0x47,0x46,0xcd,0xf5,0xf4,0xf5,0x63,0x83,0x76,0x67,0x54,0x4a,0x48, 0x45,0x43,0x3b,0x4a,0x49,0xcf,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf4,0x4f,0xcf, 0xff,0xf4,0xf5,0xf5,0xf5,0xf4,0xf5,0xf5,0xf4,0x68,0x88,0x7b,0x6b,0x58,0x4e,0x4d, 0x4a,0x48,0x40,0x4e,0x4d,0xcf,0xf5,0xf4,0xf5,0x6a,0x8a,0x7d,0x6d,0x5b,0x51,0x4f, 0x4c,0x4a,0x42,0x50,0x50,0xd0,0xf4,0xf5,0xf4,0xf5,0xf4,0xf4,0xf4,0xf5,0x56,0xcf, 0xff,0xf5,0xf4,0xf5,0xf5,0xf4,0xf4,0xf5,0xf5,0x6e,0x8e,0x82,0x72,0x5f,0x55,0x53, 0x50,0x4e,0x47,0x55,0x54,0xcf,0xf5,0xf5,0xf5,0x71,0x91,0x84,0x74,0x61,0x57,0x55, 0x52,0x51,0x49,0x57,0x56,0xd0,0xf5,0xf4,0xf5,0x73,0x93,0x86,0x76,0x63,0x59,0x58, 0x55,0x53,0x4b,0x59,0x58,0xd0,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf4,0x5f,0xcf, 0xff,0xf4,0xf5,0xf5,0xf5,0xf4,0xf5,0xf5,0xf4,0x74,0x94,0x87,0x77,0x64,0x5a,0x58, 0x54,0x52,0x4a,0x58,0x57,0xcf,0xf5,0xf4,0xf5,0x72,0x92,0x85,0x75,0x62,0x57,0x55, 0x52,0x50,0x48,0x56,0x55,0xd0,0xf4,0xf5,0xf4,0xf5,0xf4,0xf4,0xf4,0xf5,0x58,0xcf, 0xff,0xf5,0xf4,0xf5,0xf5,0xf4,0xf4,0xf5,0xf5,0x6e,0x8d,0x80,0x70,0x5d,0x53,0x51, 0x4e,0x4b,0x43,0x51,0x50,0xcf,0xf5,0xf5,0xf5,0x6c,0x8b,0x7e,0x6e,0x5b,0x51,0x4f, 0x4c,0x49,0x41,0x4f,0x4e,0xd0,0xf5,0xf4,0xf5,0x69,0x89,0x7c,0x6c,0x59,0x4f,0x4c, 0x49,0x47,0x3f,0x4d,0x4c,0xd0,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf4,0x4f,0xcf, 0xff,0xf4,0xf5,0xf5,0xf5,0xf4,0xf5,0xf5,0xf4,0x65,0x85,0x78,0x67,0x54,0x4a,0x48, 0x45,0x43,0x3b,0x48,0x47,0xcc,0xf5,0xf4,0xf5,0x63,0x82,0x75,0x65,0x52,0x48,0x46, 0x43,0x40,0x38,0x46,0x45,0xcb,0xf4,0xf5,0xf4,0xf5,0xf4,0xf4,0xf4,0xf5,0x49,0xc8, 0xff,0xf5,0xf4,0xf5,0xf5,0xf4,0xf4,0xf5,0xf5,0x5e,0x7e,0x71,0x61,0x4d,0x43,0x41, 0x3e,0x3c,0x34,0x42,0x40,0xc5,0xf5,0xf5,0xf5,0x5c,0x7c,0x6e,0x5e,0x4b,0x41,0x3f, 0x3c,0x3a,0x31,0x3f,0x3e,0xc4,0xf5,0xf4,0xf5,0x59,0x79,0x6c,0x5c,0x49,0x3f,0x3d, 0x39,0x37,0x2f,0x3d,0x3c,0xc2,0xf3,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf1,0x40,0xc0, 0xfe,0xf0,0xf1,0xf1,0xf1,0xf0,0xf1,0xf0,0xef,0x55,0x75,0x68,0x58,0x45,0x3a,0x38, 0x35,0x33,0x2b,0x39,0x38,0xbc,0xee,0xed,0xee,0x53,0x73,0x66,0x55,0x42,0x38,0x36, 0x33,0x31,0x29,0x36,0x35,0xbb,0xeb,0xec,0xeb,0xec,0xea,0xea,0xea,0xeb,0x39,0xb9, 0xf8,0xea,0xe9,0xea,0xea,0xe9,0xe9,0xea,0xe9,0x4e,0x6e,0x61,0x51,0x3e,0x34,0x32, 0x2e,0x2c,0x24,0x32,0x31,0xb6,0xe8,0xe7,0xe7,0x4c,0x6c,0x5f,0x4f,0x3c,0x31,0x2f, 0x2c,0x2a,0x22,0x30,0x2f,0xb4,0xe5,0xe4,0xe5,0x4a,0x6a,0x5d,0x4c,0x39,0x2f,0x2d, 0x2a,0x28,0x22,0x2d,0x2c,0xb2,0xe3,0xe3,0xe3,0xe3,0xe2,0xe2,0xe2,0xe1,0x30,0xb0, 0xef,0xe0,0xe1,0xe1,0xe1,0xe0,0xe1,0xe1,0xdf,0x45,0x65,0x58,0x48,0x35,0x2d,0x2c, 0x2a,0x28,0x22,0x2d,0x2c,0xad,0xde,0xdd,0xde,0x43,0x63,0x56,0x46,0x35,0x2d,0x2c, 0x2a,0x28,0x22,0x2d,0x2c,0xac,0xdb,0xdc,0xdb,0xdc,0xdb,0xdb,0xdb,0xdb,0x30,0xa9, 0xe8,0xdb,0xda,0xdb,0xda,0xd9,0xd9,0xda,0xda,0x41,0x5f,0x51,0x43,0x35,0x2d,0x2c, 0x2a,0x28,0x22,0x2d,0x2c,0xa6,0xd8,0xd8,0xd8,0x41,0x5c,0x4f,0x43,0x35,0x2d,0x2c, 0x2a,0x28,0x22,0x2d,0x2c,0xa5,0xd6,0xd4,0xd5,0x41,0x5a,0x4f,0x43,0x35,0x2d,0x2c, 0x2a,0x28,0x22,0x2d,0x2c,0xa2,0xd3,0xd3,0xd3,0xd3,0xd3,0xd3,0xd2,0xd1,0x30,0xa0, 0xdf,0xd3,0xd4,0xd3,0xd3,0xd4,0xd3,0xd4,0xd4,0x76,0x32,0x1e,0x1e,0x1d,0x1b,0x1b, 0x19,0x18,0x11,0x1e,0x6b,0xd6,0xd6,0xd7,0xd7,0x78,0x32,0x1e,0x1e,0x1d,0x1b,0x1b, 0x19,0x18,0x11,0x1e,0x6d,0xd8,0xd9,0xd9,0xd9,0xd9,0xd8,0xd9,0xd8,0xda,0x30,0xa7, 0xe6,0xd9,0xda,0xda,0xda,0xdb,0xdb,0xdb,0xda,0x7c,0x32,0x1e,0x1e,0x1d,0x1b,0x1b, 0x19,0x18,0x11,0x1e,0x72,0xdd,0xdd,0xdd,0xdd,0x7f,0x32,0x1e,0x1e,0x1d,0x1b,0x1b, 0x19,0x18,0x11,0x1e,0x74,0xdf,0xdf,0xdf,0xdf,0x81,0x32,0x1e,0x1e,0x1d,0x1b,0x1b, 0x19,0x18,0x11,0x1e,0x76,0xe1,0xe1,0xe2,0xe2,0xe2,0xe2,0xe1,0xe2,0xe2,0x30,0xb0, 0xef,0xe3,0xe3,0xe2,0xe2,0xe4,0xe3,0xe4,0xe4,0x85,0x34,0x1e,0x1e,0x1d,0x1b,0x1b, 0x19,0x18,0x11,0x1e,0x7b,0xe6,0xe6,0xe6,0xe6,0x87,0x37,0x1e,0x1e,0x1d,0x1b,0x1b, 0x19,0x18,0x11,0x1e,0x7d,0xe8,0xe8,0xe8,0xe9,0xe9,0xe8,0xe9,0xe8,0xe9,0x36,0xb7, 0xf6,0xe9,0xea,0xea,0xe9,0xea,0xeb,0xeb,0xea,0x8c,0x3b,0x21,0x21,0x20,0x1e,0x1d, 0x1b,0x1a,0x11,0x22,0x82,0xed,0xed,0xed,0xed,0x8e,0x3d,0x24,0x24,0x22,0x20,0x1f, 0x1d,0x1c,0x13,0x25,0x84,0xef,0xef,0xef,0xef,0x91,0x40,0x26,0x26,0x24,0x22,0x21, 0x1f,0x1f,0x15,0x27,0x86,0xf1,0xf1,0xf1,0xf2,0xf2,0xf2,0xf1,0xf2,0xf2,0x3f,0xc0, 0xff,0xf3,0xf3,0xf2,0xf2,0xf3,0xf2,0xf4,0xf4,0x95,0x44,0x2a,0x2a,0x28,0x27,0x26, 0x24,0x23,0x19,0x2b,0x8a,0xf5,0xf5,0xf5,0xf5,0x97,0x46,0x2c,0x2c,0x2b,0x29,0x28, 0x26,0x25,0x1b,0x2d,0x8d,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0x46,0xc6, 0xff,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0x9c,0x4b,0x31,0x31,0x2f,0x2d,0x2c, 0x2b,0x2a,0x20,0x32,0x91,0xf5,0xf5,0xf5,0xf5,0x9e,0x4d,0x33,0x33,0x31,0x30,0x2f, 0x2d,0x2c,0x22,0x34,0x93,0xf5,0xf5,0xf5,0xf5,0xa0,0x4f,0x35,0x36,0x34,0x32,0x31, 0x2f,0x2e,0x24,0x37,0x96,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0x4f,0xcf, 0xff,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xa5,0x54,0x3a,0x3a,0x38,0x36,0x36, 0x34,0x33,0x29,0x3b,0x9a,0xf5,0xf5,0xf5,0xf5,0xa7,0x56,0x3c,0x3c,0x3b,0x39,0x38, 0x36,0x35,0x2b,0x3d,0x9d,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0x56,0xcf, 0xff,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xab,0x5a,0x41,0x41,0x3f,0x3d,0x3c, 0x3a,0x39,0x30,0x42,0xa1,0xf5,0xf5,0xf5,0xf5,0xae,0x5d,0x43,0x43,0x41,0x3f,0x3e, 0x3d,0x3c,0x32,0x44,0xa3,0xf5,0xf5,0xf5,0xf5,0xae,0x5f,0x45,0x45,0x43,0x41,0x41, 0x3f,0x3e,0x34,0x46,0xa5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0x5f,0xcf, 0xff,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xae,0x60,0x46,0x46,0x44,0x42,0x41, 0x3e,0x3d,0x33,0x45,0xa4,0xf5,0xf5,0xf5,0xf5,0xae,0x5e,0x44,0x44,0x42,0x3f,0x3e, 0x3c,0x3b,0x31,0x43,0xa2,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0x58,0xcf, 0xff,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xab,0x59,0x3f,0x3f,0x3d,0x3b,0x3a, 0x38,0x36,0x2c,0x3e,0x9d,0xf5,0xf5,0xf5,0xf5,0xa9,0x57,0x3d,0x3d,0x3b,0x39,0x38, 0x36,0x34,0x2a,0x3c,0x9b,0xf5,0xf5,0xf5,0xf5,0xa6,0x55,0x3b,0x3b,0x39,0x37,0x35, 0x33,0x32,0x28,0x3a,0x99,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0x4f,0xcf, 0xff,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xa2,0x51,0x37,0x36,0x34,0x32,0x31, 0x2f,0x2e,0x24,0x35,0x94,0xf5,0xf5,0xf5,0xf5,0xa0,0x4e,0x34,0x34,0x32,0x30,0x2f, 0x2d,0x2b,0x21,0x33,0x92,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0x49,0xc8, 0xff,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0x9b,0x4a,0x30,0x30,0x2d,0x2b,0x2a, 0x28,0x27,0x1d,0x2f,0x8d,0xf5,0xf5,0xf5,0xf5,0x99,0x48,0x2d,0x2d,0x2b,0x29,0x28, 0x26,0x25,0x1a,0x2c,0x8b,0xf5,0xf5,0xf5,0xf5,0x96,0x45,0x2b,0x2b,0x29,0x27,0x26, 0x23,0x22,0x18,0x2a,0x89,0xf4,0xf4,0xf3,0xf3,0xf3,0xf3,0xf2,0xf3,0xf3,0x40,0xc0, 0xfe,0xf2,0xf2,0xf1,0xf1,0xf2,0xf1,0xf1,0xf1,0x92,0x41,0x27,0x27,0x25,0x22,0x21, 0x1f,0x1e,0x14,0x26,0x85,0xef,0xef,0xef,0xef,0x90,0x3f,0x25,0x24,0x22,0x20,0x1f, 0x1d,0x1c,0x12,0x23,0x82,0xed,0xed,0xed,0xed,0xed,0xeb,0xec,0xeb,0xec,0x39,0xb9, 0xf8,0xea,0xeb,0xeb,0xea,0xeb,0xeb,0xeb,0xe9,0x8b,0x3a,0x20,0x20,0x1e,0x1c,0x1b, 0x19,0x18,0x11,0x1f,0x7e,0xe9,0xe9,0xe8,0xe8,0x89,0x38,0x1e,0x1e,0x1d,0x1b,0x1b, 0x19,0x18,0x11,0x1e,0x7c,0xe6,0xe6,0xe6,0xe6,0x87,0x36,0x1e,0x1e,0x1d,0x1b,0x1b, 0x19,0x18,0x11,0x1e,0x79,0xe4,0xe4,0xe4,0xe4,0xe4,0xe3,0xe2,0xe3,0xe3,0x30,0xb0, 0xef,0xe2,0xe2,0xe1,0xe1,0xe2,0xe1,0xe2,0xe1,0x82,0x32,0x1e,0x1e,0x1d,0x1b,0x1b, 0x19,0x18,0x11,0x1e,0x75,0xe0,0xdf,0xdf,0xdf,0x80,0x32,0x1e,0x1e,0x1d,0x1b,0x1b, 0x19,0x18,0x11,0x1e,0x73,0xde,0xdd,0xdd,0xdd,0xdd,0xdc,0xdd,0xdc,0xdc,0x30,0xa9, 0xe8,0xdb,0xdc,0xdc,0xda,0xdb,0xdb,0xdb,0xda,0x7c,0x32,0x1e,0x1e,0x1d,0x1b,0x1b, 0x19,0x18,0x11,0x1e,0x6e,0xd9,0xd9,0xd9,0xd9,0x79,0x32,0x1e,0x1e,0x1d,0x1b,0x1b, 0x19,0x18,0x11,0x1e,0x6c,0xd7,0xd7,0xd6,0xd6,0x77,0x32,0x1e,0x1e,0x1d,0x1b,0x1b, 0x19,0x18,0x11,0x1e,0x6a,0xd4,0xd4,0xd4,0xd4,0xd4,0xd4,0xd3,0xd3,0xd3,0x30,0xa0, 0xdf,0xd4,0xd4,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xce,0x8c,0x33,0x12,0x11,0x0f,0x0f, 0x0d,0x0d,0x20,0x7d,0xca,0xd6,0xd7,0xd8,0xd8,0xd0,0x8e,0x33,0x12,0x11,0x0f,0x0f, 0x0d,0x0d,0x20,0x7f,0xcc,0xd9,0xda,0xda,0xda,0xda,0xda,0xda,0xd9,0xdb,0x30,0xa7, 0xe6,0xdb,0xdb,0xdb,0xdc,0xdc,0xdc,0xdc,0xdc,0xd4,0x92,0x33,0x12,0x11,0x0f,0x0f, 0x0d,0x0d,0x20,0x84,0xd1,0xdd,0xde,0xdd,0xde,0xd7,0x95,0x33,0x12,0x11,0x0f,0x0f, 0x0d,0x0d,0x20,0x86,0xd3,0xe0,0xe0,0xe0,0xe0,0xd9,0x97,0x33,0x12,0x11,0x0f,0x0f, 0x0d,0x0d,0x20,0x88,0xd5,0xe2,0xe2,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0x30,0xb0, 0xef,0xe4,0xe3,0xe4,0xe4,0xe5,0xe5,0xe5,0xe5,0xdd,0x9b,0x35,0x12,0x11,0x0f,0x0f, 0x0d,0x0d,0x20,0x8d,0xda,0xe6,0xe7,0xe7,0xe7,0xdf,0x9e,0x38,0x12,0x11,0x0f,0x0f, 0x0d,0x0d,0x20,0x8f,0xdc,0xe9,0xe9,0xe9,0xea,0xea,0xea,0xea,0xe9,0xea,0x36,0xb7, 0xf6,0xeb,0xeb,0xeb,0xeb,0xeb,0xec,0xec,0xec,0xe4,0xa2,0x3c,0x12,0x11,0x0f,0x0f, 0x0d,0x0d,0x24,0x93,0xe1,0xed,0xee,0xed,0xee,0xe6,0xa4,0x3f,0x13,0x12,0x10,0x10, 0x0d,0x0d,0x27,0x96,0xe3,0xf0,0xf0,0xf0,0xf0,0xe9,0xa7,0x41,0x15,0x14,0x12,0x12, 0x10,0x10,0x29,0x98,0xe5,0xf2,0xf2,0xf2,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0x3f,0xc0, 0xff,0xf4,0xf3,0xf4,0xf4,0xf4,0xf4,0xf5,0xf5,0xed,0xab,0x45,0x19,0x18,0x17,0x17, 0x14,0x14,0x2d,0x9c,0xe9,0xf5,0xf6,0xf6,0xf6,0xef,0xad,0x47,0x1b,0x1b,0x19,0x19, 0x16,0x16,0x2f,0x9e,0xec,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf5,0xf6,0x46,0xc6, 0xff,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf0,0xb2,0x4c,0x20,0x1f,0x1d,0x1d, 0x1b,0x1b,0x34,0xa3,0xec,0xf5,0xf6,0xf5,0xf6,0xf0,0xb4,0x4e,0x22,0x21,0x20,0x20, 0x1d,0x1d,0x36,0xa5,0xec,0xf6,0xf6,0xf6,0xf6,0xf0,0xb6,0x50,0x25,0x24,0x22,0x22, 0x1f,0x1f,0x38,0xa8,0xec,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0x4f,0xcf, 0xff,0xf6,0xf5,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf0,0xbb,0x55,0x29,0x28,0x26,0x27, 0x24,0x24,0x3d,0xac,0xec,0xf5,0xf6,0xf6,0xf6,0xf0,0xbd,0x57,0x2b,0x2b,0x29,0x29, 0x26,0x26,0x3f,0xae,0xec,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf5,0xf6,0x56,0xcf, 0xff,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf0,0xbf,0x5c,0x30,0x2f,0x2d,0x2d, 0x2a,0x2a,0x44,0xb2,0xec,0xf5,0xf6,0xf5,0xf6,0xf0,0xbf,0x5e,0x32,0x31,0x2f,0x2f, 0x2d,0x2d,0x46,0xb2,0xec,0xf6,0xf6,0xf6,0xf6,0xf0,0xbf,0x60,0x34,0x33,0x31,0x32, 0x2f,0x2f,0x48,0xb2,0xec,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0x5f,0xcf, 0xff,0xf6,0xf5,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf0,0xbf,0x61,0x35,0x34,0x32,0x32, 0x2e,0x2e,0x47,0xb2,0xec,0xf5,0xf6,0xf6,0xf6,0xf0,0xbf,0x5f,0x33,0x32,0x2f,0x2f, 0x2c,0x2c,0x45,0xb2,0xec,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf5,0xf6,0x58,0xcf, 0xff,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf0,0xbf,0x5a,0x2e,0x2d,0x2b,0x2b, 0x28,0x27,0x40,0xaf,0xec,0xf5,0xf6,0xf5,0xf6,0xf0,0xbe,0x58,0x2c,0x2b,0x29,0x29, 0x26,0x25,0x3e,0xad,0xec,0xf6,0xf6,0xf6,0xf6,0xf0,0xbc,0x56,0x2a,0x29,0x27,0x26, 0x23,0x23,0x3c,0xab,0xec,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0x4f,0xcf, 0xff,0xf6,0xf5,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf0,0xb8,0x52,0x25,0x24,0x22,0x22, 0x1f,0x1f,0x38,0xa6,0xec,0xf5,0xf6,0xf6,0xf6,0xf0,0xb5,0x4f,0x23,0x22,0x20,0x20, 0x1d,0x1c,0x35,0xa4,0xec,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf5,0xf6,0x49,0xc8, 0xff,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf0,0xb1,0x4b,0x1f,0x1d,0x1b,0x1b, 0x18,0x18,0x31,0xa0,0xec,0xf5,0xf6,0xf5,0xf6,0xf0,0xaf,0x48,0x1c,0x1b,0x19,0x19, 0x16,0x16,0x2e,0x9d,0xea,0xf6,0xf6,0xf6,0xf6,0xee,0xac,0x46,0x1a,0x19,0x17,0x17, 0x13,0x13,0x2c,0x9b,0xe8,0xf5,0xf5,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0x40,0xc0, 0xfe,0xf3,0xf2,0xf3,0xf3,0xf3,0xf3,0xf2,0xf2,0xea,0xa8,0x42,0x16,0x15,0x12,0x12, 0x0f,0x0f,0x28,0x97,0xe4,0xef,0xf0,0xf0,0xf0,0xe8,0xa6,0x40,0x13,0x12,0x10,0x10, 0x0d,0x0d,0x26,0x94,0xe1,0xee,0xee,0xee,0xee,0xee,0xed,0xed,0xec,0xed,0x39,0xb9, 0xf8,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xeb,0xe3,0xa1,0x3b,0x12,0x11,0x0f,0x0f, 0x0d,0x0d,0x21,0x90,0xdd,0xe9,0xe9,0xe8,0xe9,0xe1,0x9f,0x39,0x12,0x11,0x0f,0x0f, 0x0d,0x0d,0x20,0x8e,0xdb,0xe7,0xe7,0xe7,0xe7,0xdf,0x9d,0x37,0x12,0x11,0x0f,0x0f, 0x0d,0x0d,0x20,0x8b,0xd8,0xe5,0xe5,0xe5,0xe5,0xe5,0xe4,0xe4,0xe4,0xe4,0x30,0xb0, 0xef,0xe3,0xe2,0xe3,0xe3,0xe3,0xe3,0xe3,0xe2,0xda,0x98,0x33,0x12,0x11,0x0f,0x0f, 0x0d,0x0d,0x20,0x87,0xd4,0xe0,0xe0,0xe0,0xe0,0xd8,0x96,0x33,0x12,0x11,0x0f,0x0f, 0x0d,0x0d,0x20,0x85,0xd2,0xdf,0xde,0xde,0xde,0xde,0xde,0xde,0xdd,0xdd,0x30,0xa9, 0xe8,0xdd,0xdd,0xdd,0xdc,0xdc,0xdc,0xdc,0xdc,0xd4,0x92,0x33,0x12,0x11,0x0f,0x0f, 0x0d,0x0d,0x20,0x80,0xcd,0xd9,0xda,0xd9,0xda,0xd1,0x8f,0x33,0x12,0x11,0x0f,0x0f, 0x0d,0x0d,0x20,0x7e,0xcb,0xd8,0xd8,0xd7,0xd7,0xcf,0x8d,0x33,0x12,0x11,0x0f,0x0f, 0x0d,0x0d,0x20,0x7c,0xc9,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd4,0xd4,0x30,0xa0, 0xdf,0xd5,0xd6,0xd6,0xd6,0xd6,0xd6,0xd6,0xd6,0xd7,0xd7,0xd7,0xd7,0xd7,0x3b,0xa2, 0xe2,0xd7,0xd8,0xd8,0xd8,0xd8,0xd8,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0x3b,0xa5, 0xe4,0xda,0xda,0xda,0xda,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdc,0x30,0xa7, 0xe6,0xdc,0xdc,0xdc,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xde,0xde,0xde,0x3b,0xa9, 0xe8,0xde,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xe0,0xe0,0xe0,0xe0,0xe0,0x3b,0xab, 0xea,0xe0,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe2,0xe2,0xe2,0xe2,0xe2,0x3c,0xad, 0xed,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0x30,0xb0, 0xef,0xe5,0xe5,0xe5,0xe5,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe7,0xe7,0x41,0xb2, 0xf1,0xe6,0xe7,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe9,0xe9,0xe9,0xe9,0x43,0xb4, 0xf3,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0x36,0xb7, 0xf6,0xec,0xec,0xec,0xec,0xec,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xee,0x48,0xb9, 0xf8,0xee,0xee,0xee,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xf0,0xf0,0xf0,0x4a,0xbb, 0xfa,0xf0,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0xf2,0xf2,0xf2,0xf2,0xf2,0x4c,0xbd, 0xfd,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0x3f,0xc0, 0xff,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0x51,0xc2, 0xff,0xf6,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x53,0xc4, 0xff,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x46,0xc6, 0xff,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x57,0xc8, 0xff,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x5a,0xcb, 0xff,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x5c,0xcd, 0xff,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x4f,0xcf, 0xff,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x60,0xcf, 0xff,0xf6,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x63,0xcf, 0xff,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x56,0xcf, 0xff,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x67,0xcf, 0xff,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x69,0xcf, 0xff,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x6c,0xcf, 0xff,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x5f,0xcf, 0xff,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x6c,0xcf, 0xff,0xf6,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x69,0xcf, 0xff,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x58,0xcf, 0xff,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x65,0xcf, 0xff,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x63,0xcf, 0xff,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x61,0xcf, 0xff,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x4f,0xcf, 0xff,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x5c,0xcd, 0xff,0xf6,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x5a,0xcb, 0xff,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x49,0xc8, 0xff,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x55,0xc6, 0xff,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x53,0xc4, 0xff,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x51,0xc2, 0xff,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0x40,0xc0, 0xfe,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0x4c,0xbd, 0xfc,0xf1,0xf2,0xf2,0xf2,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0xf0,0xf0,0x4a,0xbb, 0xfa,0xf0,0xf0,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xee,0xee,0xee,0xee,0x39,0xb9, 0xf8,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xec,0xec,0xec,0xec,0xec,0xec,0x46,0xb6, 0xf5,0xeb,0xeb,0xeb,0xeb,0xeb,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xe9,0x43,0xb4, 0xf3,0xe9,0xe9,0xe9,0xe9,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe7,0xe7,0x41,0xb2, 0xf1,0xe7,0xe7,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe5,0xe5,0xe5,0xe5,0x30,0xb0, 0xef,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0x3d,0xad, 0xec,0xe1,0xe2,0xe2,0xe2,0xe2,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe0,0x3b,0xab, 0xea,0xe0,0xe0,0xe0,0xe0,0xe0,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xde,0x30,0xa9, 0xe8,0xde,0xde,0xde,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdc,0xdc,0xdc,0x3b,0xa7, 0xe6,0xdc,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xda,0xda,0xda,0xda,0xda,0x3b,0xa5, 0xe3,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0x3b,0xa2, 0xe1,0xd7,0xd7,0xd7,0xd7,0xd6,0xd6,0xd6,0xd6,0xd6,0xd6,0xd6,0xd5,0xd5,0x30,0xa0, 0xdf,0xd6,0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,0xd8,0xd8,0xd8,0xd8,0xd8,0x36,0xa2, 0xe2,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0x36,0xa5, 0xe4,0xdb,0xdb,0xdb,0xdb,0xdc,0xdc,0xdc,0xdc,0xdc,0xdc,0xdc,0xdd,0xdd,0x30,0xa7, 0xe6,0xdd,0xdd,0xdd,0xde,0xde,0xde,0xde,0xde,0xde,0xde,0xdf,0xdf,0xdf,0x36,0xa9, 0xe8,0xdf,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe1,0xe1,0xe1,0xe1,0xe1,0x36,0xab, 0xea,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe3,0xe3,0xe3,0xe3,0xe3,0x36,0xad, 0xed,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0x30,0xb0, 0xef,0xe6,0xe6,0xe6,0xe6,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe8,0xe8,0x3b,0xb2, 0xf1,0xe8,0xe8,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xea,0xea,0xea,0xea,0x3d,0xb4, 0xf3,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xec,0xec,0xec,0xec,0xec,0xec,0x36,0xb7, 0xf6,0xed,0xed,0xed,0xed,0xed,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xef,0x42,0xb9, 0xf8,0xef,0xef,0xef,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf1,0xf1,0xf1,0x44,0xbb, 0xfa,0xf1,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf3,0xf3,0xf3,0xf3,0xf3,0x46,0xbd, 0xfd,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0x40,0xc0, 0xff,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x4b,0xc2, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x4d,0xc4, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x46,0xc6, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x51,0xc8, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x54,0xcb, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x56,0xcd, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x4f,0xcf, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x5a,0xcf, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x5d,0xcf, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x56,0xcf, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x61,0xcf, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x63,0xcf, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x66,0xcf, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x5f,0xcf, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x66,0xcf, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x63,0xcf, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x58,0xcf, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x5f,0xcf, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x5d,0xcf, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x5b,0xcf, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x4f,0xcf, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x56,0xcd, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x54,0xcb, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x49,0xc8, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x4f,0xc6, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x4d,0xc4, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x4b,0xc2, 0xff,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0x40,0xc0, 0xfe,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0x46,0xbd, 0xfc,0xf3,0xf3,0xf3,0xf3,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf1,0xf1,0x44,0xbb, 0xfa,0xf1,0xf1,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xef,0xef,0xef,0xef,0x39,0xb9, 0xf8,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xed,0xed,0xed,0xed,0xed,0xed,0x40,0xb6, 0xf5,0xec,0xec,0xec,0xec,0xec,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xea,0x3d,0xb4, 0xf3,0xea,0xea,0xea,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe8,0xe8,0x3b,0xb2, 0xf1,0xe8,0xe8,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe6,0xe6,0xe6,0xe6,0x30,0xb0, 0xef,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0x37,0xad, 0xec,0xe3,0xe3,0xe3,0xe3,0xe3,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe1,0x36,0xab, 0xea,0xe1,0xe1,0xe1,0xe1,0xe1,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xdf,0x30,0xa9, 0xe8,0xdf,0xdf,0xdf,0xde,0xde,0xde,0xde,0xde,0xde,0xde,0xdd,0xdd,0xdd,0x36,0xa7, 0xe6,0xdd,0xdc,0xdc,0xdc,0xdc,0xdc,0xdc,0xdc,0xdb,0xdb,0xdb,0xdb,0xdb,0x36,0xa5, 0xe3,0xda,0xda,0xda,0xda,0xda,0xda,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0x36,0xa2, 0xe1,0xd8,0xd8,0xd8,0xd8,0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,0xd6,0xd6,0x30,0xa0, 0xdf,0xd7,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd9,0xd9,0xd9,0xd9,0xd9,0x33,0xa2, 0xe2,0xda,0xda,0xda,0xda,0xda,0xda,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0x33,0xa5, 0xe4,0xdc,0xdc,0xdc,0xdc,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xde,0xde,0x30,0xa7, 0xe6,0xde,0xde,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xe0,0xe0,0xe0,0x33,0xa9, 0xe8,0xe0,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe2,0xe2,0xe2,0xe2,0xe2,0x33,0xab, 0xea,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0x33,0xad, 0xed,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0x30,0xb0, 0xef,0xe7,0xe7,0xe7,0xe7,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe9,0xe9,0x36,0xb2, 0xf1,0xe9,0xe9,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xeb,0xeb,0xeb,0xeb,0x38,0xb4, 0xf3,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xed,0xed,0xed,0xed,0xed,0xed,0x36,0xb7, 0xf6,0xee,0xee,0xee,0xee,0xee,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xf0,0x3d,0xb9, 0xf8,0xf0,0xf0,0xf0,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0xf2,0xf2,0xf2,0x3f,0xbb, 0xfa,0xf2,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf4,0xf4,0xf4,0xf4,0xf4,0x41,0xbd, 0xfd,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0x40,0xc0, 0xff,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x46,0xc2, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x48,0xc4, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x46,0xc6, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x4c,0xc8, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x4f,0xcb, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x51,0xcd, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x4f,0xcf, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x55,0xcf, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x58,0xcf, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x56,0xcf, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x5c,0xcf, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x5e,0xcf, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x61,0xcf, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x5f,0xcf, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x61,0xcf, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x5e,0xcf, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x58,0xcf, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x5a,0xcf, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x58,0xcf, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x56,0xcf, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x4f,0xcf, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x51,0xcd, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x4f,0xcb, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x49,0xc8, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x4a,0xc6, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x48,0xc4, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x46,0xc2, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x40,0xc0, 0xfe,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0x41,0xbd, 0xfc,0xf4,0xf4,0xf4,0xf4,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf2,0xf2,0x3f,0xbb, 0xfa,0xf2,0xf2,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0xf0,0xf0,0xf0,0xf0,0x39,0xb9, 0xf8,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xee,0xee,0xee,0xee,0xee,0xee,0x3b,0xb6, 0xf5,0xed,0xed,0xed,0xed,0xed,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xeb,0x38,0xb4, 0xf3,0xeb,0xeb,0xeb,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xe9,0xe9,0xe9,0x36,0xb2, 0xf1,0xe9,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe7,0xe7,0xe7,0xe7,0x30,0xb0, 0xef,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0x33,0xad, 0xec,0xe4,0xe4,0xe4,0xe4,0xe4,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe2,0x33,0xab, 0xea,0xe2,0xe2,0xe2,0xe2,0xe2,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe0,0x30,0xa9, 0xe8,0xe0,0xe0,0xe0,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xde,0xde,0xde,0x33,0xa7, 0xe6,0xde,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdc,0xdc,0xdc,0xdc,0xdc,0x33,0xa5, 0xe3,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0x33,0xa2, 0xe1,0xd9,0xd9,0xd9,0xd9,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd7,0xd7,0x30,0xa0, 0xdf,0xd8,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xda,0xda,0xda,0xda,0xda,0x30,0xa2, 0xe2,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdc,0xdc,0xdc,0xdc,0xdc,0xdc,0xdc,0x30,0xa5, 0xe4,0xdd,0xdd,0xdd,0xdd,0xde,0xde,0xde,0xde,0xde,0xde,0xde,0xdf,0xdf,0x30,0xa7, 0xe6,0xdf,0xdf,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe1,0xe1,0xe1,0xe1,0x30,0xa9, 0xe8,0xe1,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe3,0xe3,0xe3,0xe3,0xe3,0x30,0xab, 0xea,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0x30,0xae, 0xed,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x30,0xb0, 0xef,0xe8,0xe8,0xe8,0xe8,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xea,0xea,0x32,0xb2, 0xf1,0xea,0xea,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xec,0xec,0xec,0xec,0x34,0xb4, 0xf3,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xee,0xee,0xee,0xee,0xee,0xee,0x36,0xb7, 0xf6,0xef,0xef,0xef,0xef,0xef,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf1,0x39,0xb9, 0xf8,0xf1,0xf1,0xf1,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf3,0xf3,0xf3,0x3b,0xbb, 0xfa,0xf3,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf5,0xf5,0xf5,0xf5,0xf5,0x3d,0xbd, 0xfd,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x40,0xc0, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x42,0xc2, 0xff,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x44,0xc4, 0xff,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x46,0xc6, 0xff,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x48,0xc8, 0xff,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x4b,0xcb, 0xff,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x4d,0xcd, 0xff,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x4f,0xcf, 0xff,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x51,0xcf, 0xff,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x54,0xcf, 0xff,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xcf, 0xff,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x58,0xcf, 0xff,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x5a,0xcf, 0xff,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x5d,0xcf, 0xff,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x5f,0xcf, 0xff,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x5d,0xcf, 0xff,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x5a,0xcf, 0xff,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x58,0xcf, 0xff,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xcf, 0xff,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x54,0xcf, 0xff,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x52,0xcf, 0xff,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x4f,0xcf, 0xff,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x4d,0xcd, 0xff,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x4b,0xcb, 0xff,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x49,0xc8, 0xff,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x46,0xc6, 0xff,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x44,0xc4, 0xff,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x42,0xc2, 0xff,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x40,0xc0, 0xfe,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0x3d,0xbd, 0xfc,0xf5,0xf5,0xf5,0xf5,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf3,0xf3,0x3b,0xbb, 0xfa,0xf3,0xf3,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf1,0xf1,0xf1,0xf1,0x39,0xb9, 0xf8,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xef,0xef,0xef,0xef,0xef,0xef,0x37,0xb6, 0xf5,0xee,0xee,0xee,0xee,0xee,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xec,0x34,0xb4, 0xf3,0xec,0xec,0xec,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xea,0xea,0xea,0x32,0xb2, 0xf1,0xea,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe8,0xe8,0xe8,0xe8,0xe8,0x30,0xb0, 0xef,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0x30,0xad, 0xec,0xe5,0xe5,0xe5,0xe5,0xe5,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe3,0x30,0xab, 0xea,0xe3,0xe3,0xe3,0xe3,0xe3,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe1,0x30,0xa9, 0xe8,0xe1,0xe1,0xe1,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xdf,0xdf,0xdf,0x30,0xa7, 0xe6,0xdf,0xde,0xde,0xde,0xde,0xde,0xde,0xde,0xdd,0xdd,0xdd,0xdd,0xdd,0x30,0xa5, 0xe3,0xdc,0xdc,0xdc,0xdc,0xdc,0xdc,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0x30,0xa2, 0xe1,0xda,0xda,0xda,0xda,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd8,0xd8,0x30,0xa0, 0xdf,0xd9,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xdb,0xdb,0xdb,0xdb,0xdb,0x30,0xa2, 0xe2,0xdc,0xdc,0xdc,0xdc,0xdc,0xdc,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x30,0xa5, 0xe4,0xde,0xde,0xde,0xde,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xe0,0xe0,0x30,0xa7, 0xe6,0xe0,0xe0,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe2,0xe2,0xe2,0xe2,0x30,0xa9, 0xe8,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe4,0xe4,0xe4,0xe4,0xe4,0x30,0xab, 0xea,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0x30,0xae, 0xed,0xe7,0xe7,0xe7,0xe7,0xe7,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0x30,0xb0, 0xef,0xe9,0xe9,0xe9,0xe9,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xeb,0xeb,0x32,0xb2, 0xf1,0xeb,0xeb,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xed,0xed,0xed,0xed,0x34,0xb4, 0xf3,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xef,0xef,0xef,0xef,0xef,0xef,0x36,0xb7, 0xf6,0xf0,0xf0,0xf0,0xf0,0xf0,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0xf2,0x39,0xb9, 0xf8,0xf2,0xf2,0xf2,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf4,0xf4,0xf4,0x3b,0xbb, 0xfa,0xf4,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf6,0xf6,0xf6,0xf6,0xf6,0x3d,0xbd, 0xfd,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x40,0xc0, 0xff,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x42,0xc2, 0xff,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x44,0xc4, 0xff,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x46,0xc6, 0xff,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x48,0xc8, 0xff,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x4b,0xcb, 0xff,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x4d,0xcd, 0xff,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x4f,0xcf, 0xff,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x51,0xcf, 0xff,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x54,0xcf, 0xff,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x56,0xcf, 0xff,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x58,0xcf, 0xff,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x5a,0xcf, 0xff,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x5d,0xcf, 0xff,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x5f,0xcf, 0xff,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x5d,0xcf, 0xff,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x5a,0xcf, 0xff,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x58,0xcf, 0xff,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x56,0xcf, 0xff,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x54,0xcf, 0xff,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x52,0xcf, 0xff,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x4f,0xcf, 0xff,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x4d,0xcd, 0xff,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x4b,0xcb, 0xff,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x48,0xc8, 0xff,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x46,0xc6, 0xff,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x44,0xc4, 0xff,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x42,0xc2, 0xff,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x40,0xc0, 0xfe,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x3d,0xbd, 0xfc,0xf6,0xf6,0xf6,0xf6,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf4,0xf4,0x3b,0xbb, 0xfa,0xf4,0xf4,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf2,0xf2,0xf2,0xf2,0x39,0xb9, 0xf8,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0x37,0xb6, 0xf5,0xef,0xef,0xef,0xef,0xef,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xed,0x34,0xb4, 0xf3,0xed,0xed,0xed,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xeb,0xeb,0xeb,0x32,0xb2, 0xf1,0xeb,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xe9,0xe9,0xe9,0xe9,0xe9,0x30,0xb0, 0xee,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x30,0xad, 0xec,0xe6,0xe6,0xe6,0xe6,0xe6,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe4,0x30,0xab, 0xea,0xe4,0xe4,0xe4,0xe4,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe2,0x30,0xa9, 0xe8,0xe2,0xe2,0xe2,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe0,0xe0,0xe0,0x30,0xa7, 0xe6,0xe0,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xde,0xde,0xde,0xde,0xde,0x30,0xa5, 0xe3,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdc,0xdc,0xdc,0xdc,0xdc,0xdc,0xdc,0x30,0xa2, 0xe1,0xdb,0xdb,0xdb,0xdb,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xd9,0xd9,0x30,0xa0, 0xdf,0xda,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdc,0xdc,0xdc,0xdc,0xdc,0x30,0xa2, 0xe2,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xde,0xde,0xde,0xde,0xde,0xde,0xde,0x30,0xa5, 0xe4,0xdf,0xdf,0xdf,0xdf,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe1,0xe1,0x30,0xa7, 0xe6,0xe1,0xe1,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe3,0xe3,0xe3,0xe3,0x30,0xa9, 0xe8,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0x30,0xab, 0xea,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x30,0xae, 0xed,0xe8,0xe8,0xe8,0xe8,0xe8,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xea,0x30,0xb0, 0xef,0xea,0xea,0xea,0xea,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xec,0xec,0x32,0xb2, 0xf1,0xec,0xec,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xee,0xee,0xee,0xee,0x34,0xb4, 0xf3,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0x36,0xb7, 0xf6,0xf1,0xf1,0xf1,0xf1,0xf1,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf3,0x39,0xb9, 0xf8,0xf3,0xf3,0xf3,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf5,0xf5,0xf5,0x3b,0xbb, 0xfa,0xf5,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf7,0xf7,0xf7,0xf7,0xf7,0x3d,0xbd, 0xfd,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x40,0xc0, 0xff,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x42,0xc2, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x44,0xc4, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x46,0xc6, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x48,0xc9, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x4b,0xcb, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x4d,0xcd, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x4f,0xcf, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x51,0xcf, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x54,0xcf, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x56,0xcf, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x58,0xcf, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x5a,0xcf, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x5d,0xcf, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x5f,0xcf, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x5d,0xcf, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x5a,0xcf, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x58,0xcf, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x56,0xcf, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x54,0xcf, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x52,0xcf, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x4f,0xcf, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x4d,0xcd, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x4b,0xcb, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x48,0xc8, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x46,0xc6, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x44,0xc4, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x42,0xc2, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x40,0xc0, 0xfe,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x3d,0xbd, 0xfc,0xf7,0xf7,0xf7,0xf7,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf5,0xf5,0x3b,0xbb, 0xfa,0xf5,0xf5,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf3,0xf3,0xf3,0xf3,0x39,0xb9, 0xf8,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0x37,0xb6, 0xf5,0xf0,0xf0,0xf0,0xf0,0xf0,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xee,0x34,0xb4, 0xf3,0xee,0xee,0xee,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xec,0xec,0xec,0x32,0xb2, 0xf1,0xec,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xea,0xea,0xea,0xea,0xea,0x30,0xb0, 0xee,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0x30,0xad, 0xec,0xe7,0xe7,0xe7,0xe7,0xe7,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe5,0x30,0xab, 0xea,0xe5,0xe5,0xe5,0xe5,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe3,0xe3,0x30,0xa9, 0xe8,0xe3,0xe3,0xe3,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe1,0xe1,0xe1,0x30,0xa7, 0xe6,0xe1,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xdf,0xdf,0xdf,0xdf,0xdf,0x30,0xa5, 0xe3,0xde,0xde,0xde,0xde,0xde,0xde,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x30,0xa2, 0xe1,0xdc,0xdc,0xdc,0xdc,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xda,0xda,0x30,0xa0, 0xdf,0xdb,0xdc,0xdc,0xdc,0xdc,0xdc,0xdc,0xdc,0xdd,0xdd,0xdd,0xdd,0xdd,0x30,0xa2, 0xe2,0xde,0xde,0xde,0xde,0xde,0xde,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0x30,0xa5, 0xe4,0xe0,0xe0,0xe0,0xe0,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe2,0xe2,0x30,0xa7, 0xe6,0xe2,0xe2,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe4,0xe4,0xe4,0xe4,0x30,0xa9, 0xe8,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0x30,0xab, 0xea,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0x30,0xae, 0xed,0xe9,0xe9,0xe9,0xe9,0xe9,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xeb,0x30,0xb0, 0xef,0xeb,0xeb,0xeb,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xed,0xed,0xed,0x32,0xb2, 0xf1,0xed,0xed,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xef,0xef,0xef,0xef,0x34,0xb4, 0xf3,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0x36,0xb7, 0xf6,0xf2,0xf2,0xf2,0xf2,0xf2,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf4,0x39,0xb9, 0xf8,0xf4,0xf4,0xf4,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf6,0xf6,0xf6,0x3b,0xbb, 0xfa,0xf6,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf8,0xf8,0xf8,0xf8,0xf8,0x3d,0xbd, 0xfd,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x40,0xc0, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x42,0xc2, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x44,0xc4, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x46,0xc6, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x48,0xc9, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x4b,0xcb, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x4d,0xcd, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x4f,0xcf, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x51,0xcf, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x54,0xcf, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x56,0xcf, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x58,0xcf, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x5a,0xcf, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x5d,0xcf, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x5f,0xcf, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x5d,0xcf, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x5a,0xcf, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x58,0xcf, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x56,0xcf, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x54,0xcf, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x52,0xcf, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x4f,0xcf, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x4d,0xcd, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x4b,0xcb, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x48,0xc8, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x46,0xc6, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x44,0xc4, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x42,0xc2, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x40,0xc0, 0xfe,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x3d,0xbd, 0xfc,0xf8,0xf8,0xf8,0xf8,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf6,0xf6,0x3b,0xbb, 0xfa,0xf6,0xf6,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf4,0xf4,0xf4,0xf4,0x39,0xb9, 0xf8,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0x37,0xb6, 0xf5,0xf1,0xf1,0xf1,0xf1,0xf1,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xef,0x34,0xb4, 0xf3,0xef,0xef,0xef,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xed,0xed,0xed,0x32,0xb2, 0xf1,0xed,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xeb,0xeb,0xeb,0xeb,0xeb,0x30,0xb0, 0xee,0xea,0xea,0xea,0xea,0xea,0xea,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0x30,0xad, 0xec,0xe8,0xe8,0xe8,0xe8,0xe8,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe6,0x30,0xab, 0xea,0xe6,0xe6,0xe6,0xe6,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe4,0xe4,0x30,0xa9, 0xe8,0xe4,0xe4,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe2,0xe2,0xe2,0x30,0xa7, 0xe6,0xe2,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe0,0xe0,0xe0,0xe0,0xe0,0x30,0xa5, 0xe3,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xde,0xde,0xde,0xde,0xde,0xde,0xde,0x30,0xa2, 0xe1,0xdd,0xdd,0xdd,0xdd,0xdc,0xdc,0xdc,0xdc,0xdc,0xdc,0xdc,0xdb,0xdb,0x30,0xa0, 0xdf,0xdc,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xde,0xde,0xde,0xde,0xde,0x30,0xa2, 0xe2,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0x30,0xa5, 0xe4,0xe1,0xe1,0xe1,0xe1,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe3,0xe3,0x30,0xa7, 0xe6,0xe3,0xe3,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe5,0xe5,0xe5,0xe5,0x30,0xa9, 0xe8,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x30,0xab, 0xea,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0x30,0xae, 0xed,0xea,0xea,0xea,0xea,0xea,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xec,0x30,0xb0, 0xef,0xec,0xec,0xec,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xee,0xee,0xee,0x32,0xb2, 0xf1,0xee,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xf0,0xf0,0xf0,0xf0,0x34,0xb4, 0xf3,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0x36,0xb7, 0xf6,0xf3,0xf3,0xf3,0xf3,0xf3,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf5,0x39,0xb9, 0xf8,0xf5,0xf5,0xf5,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf7,0xf7,0xf7,0x3b,0xbb, 0xfa,0xf7,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf9,0xf9,0xf9,0xf9,0xf9,0x3d,0xbd, 0xfd,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x40,0xc0, 0xff,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x42,0xc2, 0xff,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x44,0xc4, 0xff,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x46,0xc6, 0xff,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x48,0xc9, 0xff,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x4b,0xcb, 0xff,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x4d,0xcd, 0xff,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x4f,0xcf, 0xff,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x51,0xcf, 0xff,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x54,0xcf, 0xff,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x56,0xcf, 0xff,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x58,0xcf, 0xff,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x5a,0xcf, 0xff,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x5d,0xcf, 0xff,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x5f,0xcf, 0xff,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x5d,0xcf, 0xff,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x5a,0xcf, 0xff,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x58,0xcf, 0xff,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x56,0xcf, 0xff,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x54,0xcf, 0xff,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x52,0xcf, 0xff,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x4f,0xcf, 0xff,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x4d,0xcd, 0xff,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x4b,0xcb, 0xff,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x48,0xc8, 0xff,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x46,0xc6, 0xff,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x44,0xc4, 0xff,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x42,0xc2, 0xff,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x40,0xc0, 0xfe,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x3d,0xbd, 0xfc,0xf9,0xf9,0xf9,0xf9,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf7,0xf7,0x3b,0xbb, 0xfa,0xf7,0xf7,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf5,0xf5,0xf5,0xf5,0x39,0xb9, 0xf8,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0x37,0xb6, 0xf5,0xf2,0xf2,0xf2,0xf2,0xf2,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0xf0,0x34,0xb4, 0xf3,0xf0,0xf0,0xf0,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xee,0xee,0xee,0x32,0xb2, 0xf1,0xee,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xec,0xec,0xec,0xec,0xec,0x30,0xb0, 0xee,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0x30,0xad, 0xec,0xe9,0xe9,0xe9,0xe9,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe7,0x30,0xab, 0xea,0xe7,0xe7,0xe7,0xe7,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe5,0xe5,0x30,0xa9, 0xe8,0xe5,0xe5,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe3,0xe3,0xe3,0xe3,0x30,0xa7, 0xe6,0xe3,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe1,0xe1,0xe1,0xe1,0xe1,0x30,0xa5, 0xe3,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0x30,0xa2, 0xe1,0xde,0xde,0xde,0xde,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdc,0xdc,0x30,0xa0, 0xdf,0xdd,0xde,0xde,0xde,0xde,0xde,0xde,0xde,0xdf,0xdf,0xdf,0xdf,0xdf,0x30,0xa2, 0xe2,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0x30,0xa5, 0xe4,0xe2,0xe2,0xe2,0xe2,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe4,0xe4,0x30,0xa7, 0xe6,0xe4,0xe4,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe6,0xe6,0xe6,0xe6,0x30,0xa9, 0xe8,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0x30,0xab, 0xea,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xea,0xea,0xea,0xea,0xea,0xea,0x30,0xae, 0xed,0xeb,0xeb,0xeb,0xeb,0xeb,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xed,0x30,0xb0, 0xef,0xed,0xed,0xed,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xef,0xef,0xef,0x32,0xb2, 0xf1,0xef,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf1,0xf1,0xf1,0xf1,0xf1,0x34,0xb4, 0xf3,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0x36,0xb7, 0xf6,0xf4,0xf4,0xf4,0xf4,0xf4,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf6,0x39,0xb9, 0xf8,0xf6,0xf6,0xf6,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf8,0xf8,0xf8,0x3b,0xbb, 0xfa,0xf8,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0x3d,0xbd, 0xfd,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x40,0xc0, 0xff,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0x42,0xc2, 0xff,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0x44,0xc4, 0xff,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0x46,0xc6, 0xff,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0x48,0xc9, 0xff,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0x4b,0xcb, 0xff,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0x4d,0xcd, 0xff,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0x4f,0xcf, 0xff,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0x51,0xcf, 0xff,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0x54,0xcf, 0xff,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0x56,0xcf, 0xff,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0x58,0xcf, 0xff,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0x5a,0xcf, 0xff,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0x5d,0xcf, 0xff,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0x5f,0xcf, 0xff,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0x5d,0xcf, 0xff,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0x5a,0xcf, 0xff,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0x58,0xcf, 0xff,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0x56,0xcf, 0xff,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0x54,0xcf, 0xff,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0x52,0xcf, 0xff,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0x4f,0xcf, 0xff,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0x4d,0xcd, 0xff,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0x4b,0xcb, 0xff,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0x48,0xc8, 0xff,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0x46,0xc6, 0xff,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0x44,0xc4, 0xff,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0x42,0xc2, 0xff,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0x40,0xbf, 0xfe,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x3d,0xbd, 0xfc,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf8,0xf8,0x3b,0xbb, 0xfa,0xf8,0xf8,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf6,0xf6,0xf6,0xf6,0x39,0xb9, 0xf8,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0x37,0xb6, 0xf5,0xf3,0xf3,0xf3,0xf3,0xf3,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf1,0x34,0xb4, 0xf3,0xf1,0xf1,0xf1,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xef,0xef,0xef,0x32,0xb2, 0xf1,0xef,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xed,0xed,0xed,0xed,0xed,0x30,0xb0, 0xee,0xec,0xec,0xec,0xec,0xec,0xec,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0x30,0xad, 0xec,0xea,0xea,0xea,0xea,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe8,0xe8,0x30,0xab, 0xea,0xe8,0xe8,0xe8,0xe8,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe6,0xe6,0x30,0xa9, 0xe8,0xe6,0xe6,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe4,0xe4,0xe4,0xe4,0x30,0xa7, 0xe6,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe2,0xe2,0xe2,0xe2,0xe2,0x30,0xa5, 0xe3,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0x30,0xa2, 0xe1,0xdf,0xdf,0xdf,0xdf,0xde,0xde,0xde,0xde,0xde,0xde,0xde,0xdd,0xdd,0x30,0xa0, 0xdf,0xde,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xe0,0xe0,0xe0,0xe0,0xe0,0x30,0xa2, 0xe2,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0x30,0xa5, 0xe4,0xe3,0xe3,0xe3,0xe3,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe5,0xe5,0x30,0xa7, 0xe6,0xe5,0xe5,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe7,0xe7,0xe7,0xe7,0x30,0xa9, 0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0x30,0xab, 0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0x30,0xae, 0xed,0xec,0xec,0xec,0xec,0xec,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xee,0x30,0xb0, 0xef,0xee,0xee,0xee,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xf0,0xf0,0xf0,0x32,0xb2, 0xf1,0xf0,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0xf2,0xf2,0xf2,0xf2,0xf2,0x34,0xb4, 0xf4,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0x36,0xb7, 0xf6,0xf5,0xf5,0xf5,0xf5,0xf5,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf7,0x39,0xb9, 0xf8,0xf7,0xf7,0xf7,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf9,0xf9,0xf9,0x3b,0xbb, 0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfb,0xfb,0xfb,0xfb,0xfb,0x3d,0xbd, 0xfd,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0x40,0xc0, 0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x42,0xc2, 0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x44,0xc4, 0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x46,0xc6, 0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x48,0xc9, 0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x4b,0xcb, 0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x4d,0xcd, 0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x4f,0xcf, 0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x51,0xcf, 0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x54,0xcf, 0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x56,0xcf, 0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x58,0xcf, 0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x5a,0xcf, 0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x5d,0xcf, 0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x5f,0xcf, 0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x5d,0xcf, 0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x5a,0xcf, 0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x58,0xcf, 0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x56,0xcf, 0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x54,0xcf, 0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x52,0xcf, 0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x4f,0xcf, 0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x4d,0xcd, 0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x4b,0xcb, 0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x48,0xc8, 0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x46,0xc6, 0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x44,0xc4, 0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x42,0xc2, 0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x40,0xbf, 0xfe,0xfd,0xfd,0xfd,0xfd,0xfd,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x3d,0xbd, 0xfc,0xfb,0xfb,0xfb,0xfb,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0x3b,0xbb, 0xfa,0xf9,0xf9,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf7,0xf7,0xf7,0xf7,0x39,0xb9, 0xf8,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0x37,0xb6, 0xf5,0xf4,0xf4,0xf4,0xf4,0xf4,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf2,0x34,0xb4, 0xf3,0xf2,0xf2,0xf2,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0xf0,0xf0,0xf0,0x32,0xb2, 0xf1,0xf0,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xee,0xee,0xee,0xee,0xee,0x30,0xb0, 0xee,0xed,0xed,0xed,0xed,0xed,0xed,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0x30,0xad, 0xec,0xeb,0xeb,0xeb,0xeb,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xe9,0xe9,0x30,0xab, 0xea,0xe9,0xe9,0xe9,0xe9,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe7,0xe7,0x30,0xa9, 0xe8,0xe7,0xe7,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe5,0xe5,0xe5,0xe5,0x30,0xa7, 0xe6,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0x30,0xa5, 0xe3,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0x30,0xa2, 0xe1,0xe0,0xe0,0xe0,0xe0,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xde,0xde,0x30,0xa0, 0xdf,0xdf,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe1,0xe1,0xe1,0xe1,0xe1,0x30,0xa2, 0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0x30,0xa5, 0xe4,0xe4,0xe4,0xe4,0xe4,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe6,0xe6,0x30,0xa7, 0xe6,0xe6,0xe6,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe8,0xe8,0xe8,0xe8,0x30,0xa9, 0xe8,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xea,0xea,0xea,0xea,0xea,0xea,0x30,0xab, 0xea,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xec,0xec,0xec,0xec,0xec,0xec,0x30,0xae, 0xed,0xed,0xed,0xed,0xed,0xed,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xef,0x30,0xb0, 0xef,0xef,0xef,0xef,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf1,0xf1,0xf1,0x32,0xb2, 0xf1,0xf1,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf3,0xf3,0xf3,0xf3,0xf3,0x34,0xb4, 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0x36,0xb7, 0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf8,0x39,0xb9, 0xf8,0xf8,0xf8,0xf8,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0x3b,0xbb, 0xfa,0xfa,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfc,0xfc,0xfc,0xfc,0xfc,0x3d,0xbd, 0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x40,0xc0, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x42,0xc2, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x44,0xc4, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x46,0xc6, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x48,0xc9, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x4b,0xcb, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x4d,0xcd, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x4f,0xcf, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x51,0xcf, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x54,0xcf, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x56,0xcf, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x58,0xcf, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5a,0xcf, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5d,0xcf, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0xcf, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5d,0xcf, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5a,0xcf, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x58,0xcf, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x56,0xcf, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x54,0xcf, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x52,0xcf, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x4f,0xcf, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x4d,0xcd, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x4b,0xcb, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x48,0xc8, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x46,0xc6, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x44,0xc4, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x42,0xc1, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x40,0xbf, 0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfc,0x3d,0xbd, 0xfc,0xfc,0xfc,0xfc,0xfc,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfa,0xfa,0x3b,0xbb, 0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf8,0xf8,0xf8,0xf8,0x39,0xb9, 0xf8,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0x37,0xb6, 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf3,0x34,0xb4, 0xf3,0xf3,0xf3,0xf3,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf1,0xf1,0xf1,0x32,0xb2, 0xf1,0xf1,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xef,0xef,0xef,0xef,0xef,0x30,0xb0, 0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0x30,0xad, 0xec,0xec,0xec,0xec,0xec,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xea,0xea,0x30,0xab, 0xea,0xea,0xea,0xea,0xea,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe8,0xe8,0x30,0xa9, 0xe8,0xe8,0xe8,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe6,0xe6,0xe6,0xe6,0x30,0xa7, 0xe6,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0x30,0xa4, 0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0x30,0xa2, 0xe1,0xe1,0xe1,0xe1,0xe1,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xdf,0xdf,0x30,0xa0, 0xdf,0xde,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xe0,0xe0,0xe0,0xe0,0xe0,0x30,0xa2, 0xe2,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0x30,0xa5, 0xe4,0xe3,0xe3,0xe3,0xe3,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe5,0xe5,0x30,0xa7, 0xe6,0xe5,0xe5,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe7,0xe7,0xe7,0xe7,0x30,0xa9, 0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0x30,0xab, 0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0x30,0xae, 0xed,0xec,0xec,0xec,0xec,0xec,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xee,0x30,0xb0, 0xef,0xee,0xee,0xee,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xf0,0xf0,0xf0,0x32,0xb2, 0xf1,0xf0,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0xf2,0xf2,0xf2,0xf2,0xf2,0x34,0xb4, 0xf4,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0x37,0xb7, 0xf6,0xf5,0xf5,0xf5,0xf5,0xf5,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf7,0x39,0xb9, 0xf8,0xf7,0xf7,0xf7,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf9,0xf9,0xf9,0x3b,0xbb, 0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfb,0xfb,0xfb,0xfb,0xfb,0x3d,0xbd, 0xfd,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0x40,0xc0, 0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x42,0xc2, 0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x44,0xc4, 0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x46,0xc6, 0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x48,0xc9, 0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x4b,0xcb, 0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x4d,0xcd, 0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x4f,0xcf, 0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x51,0xcf, 0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x54,0xcf, 0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x56,0xcf, 0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x58,0xcf, 0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x5a,0xcf, 0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x5d,0xcf, 0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x5f,0xcf, 0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x5d,0xcf, 0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x5a,0xcf, 0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x58,0xcf, 0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x56,0xcf, 0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x54,0xcf, 0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x52,0xcf, 0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x4f,0xcf, 0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x4d,0xcd, 0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x4b,0xcb, 0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x48,0xc8, 0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x46,0xc6, 0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x44,0xc4, 0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x42,0xc1, 0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x40,0xbf, 0xfe,0xfd,0xfd,0xfd,0xfd,0xfd,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfb,0x3d,0xbd, 0xfc,0xfb,0xfb,0xfb,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0x3b,0xbb, 0xfa,0xf9,0xf9,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf7,0xf7,0xf7,0xf7,0x39,0xb9, 0xf8,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0x37,0xb6, 0xf5,0xf4,0xf4,0xf4,0xf4,0xf4,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf2,0x34,0xb4, 0xf3,0xf2,0xf2,0xf2,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0xf0,0xf0,0xf0,0x32,0xb2, 0xf1,0xf0,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xee,0xee,0xee,0xee,0xee,0x30,0xb0, 0xee,0xed,0xed,0xed,0xed,0xed,0xed,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0x30,0xad, 0xec,0xeb,0xeb,0xeb,0xeb,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xe9,0xe9,0x30,0xab, 0xea,0xe9,0xe9,0xe9,0xe9,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe7,0xe7,0x30,0xa9, 0xe8,0xe7,0xe7,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe5,0xe5,0xe5,0xe5,0x30,0xa7, 0xe6,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0x30,0xa4, 0xe3,0xe2,0xe2,0xe2,0xe2,0xe2,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe0,0x30,0xa2, 0xe1,0xe0,0xe0,0xe0,0xe0,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xde,0xde,0x30,0xa0, 0xdf,0xdd,0xde,0xde,0xde,0xde,0xde,0xde,0xde,0xdf,0xdf,0xdf,0xdf,0xdf,0x30,0xa2, 0xe2,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0x30,0xa5, 0xe4,0xe2,0xe2,0xe2,0xe2,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe4,0xe4,0x30,0xa7, 0xe6,0xe4,0xe4,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe6,0xe6,0xe6,0xe6,0x30,0xa9, 0xe8,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0x30,0xab, 0xea,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xea,0xea,0xea,0xea,0xea,0xea,0x30,0xae, 0xed,0xeb,0xeb,0xeb,0xeb,0xeb,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xed,0x30,0xb0, 0xef,0xed,0xed,0xed,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xef,0xef,0xef,0x32,0xb2, 0xf1,0xef,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf1,0xf1,0xf1,0xf1,0xf1,0x34,0xb4, 0xf4,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0x37,0xb7, 0xf6,0xf4,0xf4,0xf4,0xf4,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf6,0x39,0xb9, 0xf8,0xf6,0xf6,0xf6,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf8,0xf8,0xf8,0x3b,0xbb, 0xfa,0xf8,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0x3d,0xbd, 0xfd,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x40,0xc0, 0xff,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0x42,0xc2, 0xff,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0x44,0xc4, 0xff,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0x46,0xc6, 0xff,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0x48,0xc9, 0xff,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0x4b,0xcb, 0xff,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0x4d,0xcd, 0xff,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0x4f,0xcf, 0xff,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0x51,0xcf, 0xff,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0x54,0xcf, 0xff,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0x56,0xcf, 0xff,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0x58,0xcf, 0xff,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0x5a,0xcf, 0xff,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0x5d,0xcf, 0xff,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0x5f,0xcf, 0xff,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0x5d,0xcf, 0xff,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0x5a,0xcf, 0xff,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0x58,0xcf, 0xff,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0x56,0xcf, 0xff,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0x54,0xcf, 0xff,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0x52,0xcf, 0xff,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0x4f,0xcf, 0xff,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0x4d,0xcd, 0xff,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0x4b,0xcb, 0xff,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0x48,0xc8, 0xff,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0x46,0xc6, 0xff,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0x44,0xc4, 0xff,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0x42,0xc1, 0xff,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0x40,0xbf, 0xfe,0xfc,0xfc,0xfc,0xfc,0xfc,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfa,0x3d,0xbd, 0xfc,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf8,0xf8,0xf8,0x3b,0xbb, 0xfa,0xf8,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf6,0xf6,0xf6,0xf6,0x39,0xb9, 0xf8,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0x37,0xb6, 0xf5,0xf3,0xf3,0xf3,0xf3,0xf3,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf1,0x34,0xb4, 0xf3,0xf1,0xf1,0xf1,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xef,0xef,0xef,0x32,0xb2, 0xf1,0xef,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xed,0xed,0xed,0xed,0xed,0x30,0xb0, 0xee,0xec,0xec,0xec,0xec,0xec,0xec,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0x30,0xad, 0xec,0xea,0xea,0xea,0xea,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe8,0xe8,0x30,0xab, 0xea,0xe8,0xe8,0xe8,0xe8,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe6,0xe6,0x30,0xa9, 0xe8,0xe6,0xe6,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe4,0xe4,0xe4,0xe4,0x30,0xa7, 0xe6,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0x30,0xa4, 0xe3,0xe1,0xe1,0xe1,0xe1,0xe1,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xdf,0x30,0xa2, 0xe1,0xdf,0xdf,0xdf,0xde,0xde,0xde,0xde,0xde,0xde,0xde,0xde,0xdd,0xdd,0x30,0xa0, 0xdf,0xdc,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xde,0xde,0xde,0xde,0xde,0x30,0xa2, 0xe2,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0x30,0xa5, 0xe4,0xe1,0xe1,0xe1,0xe1,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe3,0xe3,0x30,0xa7, 0xe6,0xe3,0xe3,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe5,0xe5,0xe5,0xe5,0x30,0xa9, 0xe8,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x30,0xab, 0xea,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0x30,0xae, 0xed,0xea,0xea,0xea,0xea,0xea,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xec,0x30,0xb0, 0xef,0xec,0xec,0xec,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xee,0xee,0xee,0x32,0xb2, 0xf1,0xee,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xf0,0xf0,0xf0,0xf0,0xf0,0x34,0xb4, 0xf4,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0x37,0xb7, 0xf6,0xf3,0xf3,0xf3,0xf3,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf5,0xf5,0x39,0xb9, 0xf8,0xf5,0xf5,0xf5,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf7,0xf7,0xf7,0x3b,0xbb, 0xfa,0xf7,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf9,0xf9,0xf9,0xf9,0xf9,0x3d,0xbd, 0xfd,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x40,0xc0, 0xff,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x42,0xc2, 0xff,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x44,0xc4, 0xff,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x46,0xc6, 0xff,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x48,0xc9, 0xff,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x4b,0xcb, 0xff,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x4d,0xcd, 0xff,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x4f,0xcf, 0xff,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x52,0xcf, 0xff,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x54,0xcf, 0xff,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x56,0xcf, 0xff,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x58,0xcf, 0xff,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x5a,0xcf, 0xff,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x5d,0xcf, 0xff,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x5f,0xcf, 0xff,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x5d,0xcf, 0xff,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x5a,0xcf, 0xff,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x58,0xcf, 0xff,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x56,0xcf, 0xff,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x54,0xcf, 0xff,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x52,0xcf, 0xff,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x4f,0xcf, 0xff,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x4d,0xcd, 0xff,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x4b,0xcb, 0xff,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x48,0xc8, 0xff,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x46,0xc6, 0xff,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x44,0xc4, 0xff,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x42,0xc1, 0xff,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x40,0xbf, 0xfe,0xfb,0xfb,0xfb,0xfb,0xfb,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0x3d,0xbd, 0xfc,0xf9,0xf9,0xf9,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf7,0xf7,0xf7,0x3b,0xbb, 0xfa,0xf7,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf5,0xf5,0xf5,0xf5,0xf5,0x39,0xb9, 0xf8,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0x37,0xb6, 0xf5,0xf2,0xf2,0xf2,0xf2,0xf2,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0xf0,0x34,0xb4, 0xf3,0xf0,0xf0,0xf0,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xee,0xee,0xee,0x32,0xb2, 0xf1,0xee,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xec,0xec,0xec,0xec,0xec,0x30,0xb0, 0xee,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0x30,0xad, 0xec,0xe9,0xe9,0xe9,0xe9,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe7,0xe7,0x30,0xab, 0xea,0xe7,0xe7,0xe7,0xe7,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe5,0xe5,0x30,0xa9, 0xe8,0xe5,0xe5,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe3,0xe3,0xe3,0xe3,0x30,0xa7, 0xe6,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0x30,0xa4, 0xe3,0xe0,0xe0,0xe0,0xe0,0xe0,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xde,0x30,0xa2, 0xe1,0xde,0xde,0xde,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdc,0xdc,0xdc,0x30,0xa0, 0xdf,0xdc,0xdc,0xdc,0xdc,0xdc,0xdc,0xdc,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x30,0xa2, 0xe2,0xde,0xde,0xde,0xde,0xde,0xde,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0x30,0xa5, 0xe4,0xe0,0xe0,0xe0,0xe0,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe2,0xe2,0x30,0xa7, 0xe6,0xe2,0xe2,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe4,0xe4,0xe4,0xe4,0x30,0xa9, 0xe8,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0x30,0xab, 0xea,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0x30,0xae, 0xed,0xe9,0xe9,0xe9,0xe9,0xe9,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xeb,0x30,0xb0, 0xef,0xeb,0xeb,0xeb,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xed,0xed,0xed,0x32,0xb2, 0xf1,0xed,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xef,0xef,0xef,0xef,0xef,0x34,0xb4, 0xf4,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0x37,0xb7, 0xf6,0xf2,0xf2,0xf2,0xf2,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf4,0xf4,0x39,0xb9, 0xf8,0xf4,0xf4,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf6,0xf6,0xf6,0xf6,0x3b,0xbb, 0xfa,0xf6,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf8,0xf8,0xf8,0xf8,0xf8,0x3d,0xbd, 0xfd,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x40,0xc0, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x42,0xc2, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x44,0xc4, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x46,0xc6, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x48,0xc9, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x4b,0xcb, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x4d,0xcd, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x4f,0xcf, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x52,0xcf, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x54,0xcf, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x56,0xcf, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x58,0xcf, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x5a,0xcf, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x5d,0xcf, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x5f,0xcf, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x5d,0xcf, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x5a,0xcf, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x58,0xcf, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x56,0xcf, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x54,0xcf, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x51,0xcf, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x4f,0xcf, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x4d,0xcd, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x4b,0xcb, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x48,0xc8, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x46,0xc6, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x44,0xc4, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x42,0xc1, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x40,0xbf, 0xfe,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf8,0x3d,0xbd, 0xfc,0xf8,0xf8,0xf8,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf6,0xf6,0xf6,0x3b,0xbb, 0xfa,0xf6,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf4,0xf4,0xf4,0xf4,0xf4,0x39,0xb9, 0xf7,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0x37,0xb6, 0xf5,0xf1,0xf1,0xf1,0xf1,0xf1,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xef,0x34,0xb4, 0xf3,0xef,0xef,0xef,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xed,0xed,0xed,0x32,0xb2, 0xf1,0xed,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xeb,0xeb,0xeb,0xeb,0xeb,0x30,0xb0, 0xee,0xea,0xea,0xea,0xea,0xea,0xea,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0x30,0xad, 0xec,0xe8,0xe8,0xe8,0xe8,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe6,0xe6,0x30,0xab, 0xea,0xe6,0xe6,0xe6,0xe6,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe4,0xe4,0x30,0xa9, 0xe8,0xe4,0xe4,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe2,0xe2,0xe2,0xe2,0x30,0xa7, 0xe6,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0x30,0xa4, 0xe3,0xdf,0xdf,0xdf,0xdf,0xdf,0xde,0xde,0xde,0xde,0xde,0xde,0xde,0xdd,0x30,0xa2, 0xe1,0xdd,0xdd,0xdd,0xdc,0xdc,0xdc,0xdc,0xdc,0xdc,0xdc,0xdb,0xdb,0xdb,0x30,0xa0, 0xdf,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdc,0xdc,0xdc,0xdc,0xdc,0xdc,0x30,0xa3, 0xe2,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xde,0xde,0xde,0xde,0xde,0xde,0xde,0x30,0xa5, 0xe4,0xdf,0xdf,0xdf,0xdf,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe1,0xe1,0x30,0xa7, 0xe6,0xe1,0xe1,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe3,0xe3,0xe3,0xe3,0x30,0xa9, 0xe8,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0x30,0xab, 0xea,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x30,0xae, 0xed,0xe8,0xe8,0xe8,0xe8,0xe8,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xea,0x30,0xb0, 0xef,0xea,0xea,0xea,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xec,0xec,0xec,0x32,0xb2, 0xf1,0xec,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xee,0xee,0xee,0xee,0xee,0x34,0xb4, 0xf4,0xef,0xef,0xef,0xef,0xef,0xef,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0x37,0xb7, 0xf6,0xf1,0xf1,0xf1,0xf1,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf3,0xf3,0x39,0xb9, 0xf8,0xf3,0xf3,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf5,0xf5,0xf5,0xf5,0x3b,0xbb, 0xfa,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf7,0xf7,0xf7,0xf7,0xf7,0x3d,0xbd, 0xfd,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x40,0xc0, 0xff,0xfa,0xfa,0xfa,0xfa,0xfa,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x42,0xc2, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x44,0xc4, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x46,0xc6, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x48,0xc9, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x4b,0xcb, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x4d,0xcd, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x4f,0xcf, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x52,0xcf, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x54,0xcf, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x56,0xcf, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x58,0xcf, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x5a,0xcf, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x5d,0xcf, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x5f,0xcf, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x5d,0xcf, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x5a,0xcf, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x58,0xcf, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x56,0xcf, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x54,0xcf, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x51,0xcf, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x4f,0xcf, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x4d,0xcd, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x4b,0xcb, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x48,0xc8, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x46,0xc6, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x44,0xc4, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x42,0xc1, 0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x40,0xbf, 0xfe,0xf9,0xf9,0xf9,0xf9,0xf9,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf7,0x3d,0xbd, 0xfc,0xf7,0xf7,0xf7,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf5,0xf5,0xf5,0x3b,0xbb, 0xfa,0xf5,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf3,0xf3,0xf3,0xf3,0xf3,0x39,0xb9, 0xf7,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0x37,0xb6, 0xf5,0xf0,0xf0,0xf0,0xf0,0xf0,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xee,0x34,0xb4, 0xf3,0xee,0xee,0xee,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xec,0xec,0xec,0x32,0xb2, 0xf1,0xec,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xea,0xea,0xea,0xea,0xea,0x30,0xb0, 0xee,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0x30,0xad, 0xec,0xe7,0xe7,0xe7,0xe7,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe5,0xe5,0x30,0xab, 0xea,0xe5,0xe5,0xe5,0xe5,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe3,0xe3,0x30,0xa9, 0xe8,0xe3,0xe3,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe1,0xe1,0xe1,0xe1,0x30,0xa7, 0xe6,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0x30,0xa4, 0xe3,0xde,0xde,0xde,0xde,0xde,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdc,0x30,0xa2, 0xe1,0xdc,0xdc,0xdc,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xda,0xda,0xda,0x30,0xa0, 0xdf,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0x30,0xa3, 0xe2,0xdc,0xdc,0xdc,0xdc,0xdc,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x30,0xa5, 0xe4,0xde,0xde,0xde,0xde,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xe0,0xe0,0x30,0xa7, 0xe6,0xe0,0xe0,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe2,0xe2,0xe2,0xe2,0x30,0xa9, 0xe8,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0x30,0xab, 0xea,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0x30,0xae, 0xed,0xe7,0xe7,0xe7,0xe7,0xe7,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe9,0x30,0xb0, 0xef,0xe9,0xe9,0xe9,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xeb,0xeb,0xeb,0x32,0xb2, 0xf1,0xeb,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xed,0xed,0xed,0xed,0xed,0x34,0xb4, 0xf4,0xee,0xee,0xee,0xee,0xee,0xee,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0x37,0xb7, 0xf6,0xf0,0xf0,0xf0,0xf0,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0xf2,0xf2,0x39,0xb9, 0xf8,0xf2,0xf2,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf4,0xf4,0xf4,0xf4,0x3b,0xbb, 0xfa,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0x3d,0xbd, 0xfd,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x40,0xc0, 0xff,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x42,0xc2, 0xff,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x44,0xc4, 0xff,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x46,0xc6, 0xff,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x48,0xc9, 0xff,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x4b,0xcb, 0xff,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x4d,0xcd, 0xff,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x4f,0xcf, 0xff,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x52,0xcf, 0xff,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x54,0xcf, 0xff,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x56,0xcf, 0xff,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x58,0xcf, 0xff,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x5a,0xcf, 0xff,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x5d,0xcf, 0xff,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x5f,0xcf, 0xff,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x5d,0xcf, 0xff,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x5a,0xcf, 0xff,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x58,0xcf, 0xff,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x56,0xcf, 0xff,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x54,0xcf, 0xff,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x51,0xcf, 0xff,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x4f,0xcf, 0xff,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x4d,0xcd, 0xff,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x4b,0xcb, 0xff,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x48,0xc8, 0xff,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x46,0xc6, 0xff,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x44,0xc4, 0xff,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x42,0xc1, 0xff,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x40,0xbf, 0xfe,0xf8,0xf8,0xf8,0xf8,0xf8,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf6,0x3d,0xbd, 0xfc,0xf6,0xf6,0xf6,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf4,0xf4,0xf4,0x3b,0xbb, 0xfa,0xf4,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf2,0xf2,0xf2,0xf2,0xf2,0x39,0xb9, 0xf7,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0x36,0xb6, 0xf5,0xef,0xef,0xef,0xef,0xef,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xed,0x34,0xb4, 0xf3,0xed,0xed,0xed,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xeb,0xeb,0xeb,0x32,0xb2, 0xf1,0xeb,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xe9,0xe9,0xe9,0xe9,0xe9,0x30,0xb0, 0xee,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x30,0xad, 0xec,0xe6,0xe6,0xe6,0xe6,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe4,0xe4,0x30,0xab, 0xea,0xe4,0xe4,0xe4,0xe4,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe2,0xe2,0x30,0xa9, 0xe8,0xe2,0xe2,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe0,0xe0,0xe0,0xe0,0x30,0xa7, 0xe6,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xde,0xde,0xde,0xde,0xde,0xde,0x30,0xa4, 0xe3,0xdd,0xdd,0xdd,0xdd,0xdd,0xdc,0xdc,0xdc,0xdc,0xdc,0xdc,0xdc,0xdb,0x30,0xa2, 0xe1,0xdb,0xdb,0xdb,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xd9,0xd9,0xd9,0x30,0xa0, 0xdf,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xda,0xda,0xda,0xda,0xda,0xda,0x30,0xa3, 0xe2,0xdb,0xdb,0xdb,0xdb,0xdb,0xdc,0xdc,0xdc,0xdc,0xdc,0xdc,0xdc,0xdd,0x30,0xa5, 0xe4,0xdd,0xdd,0xdd,0xdd,0xde,0xde,0xde,0xde,0xde,0xde,0xde,0xdf,0xdf,0x30,0xa7, 0xe6,0xdf,0xdf,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe1,0xe1,0xe1,0xe1,0x30,0xa9, 0xe8,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0x30,0xab, 0xea,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0x30,0xae, 0xed,0xe6,0xe6,0xe6,0xe6,0xe6,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe8,0x30,0xb0, 0xef,0xe8,0xe8,0xe8,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xea,0xea,0xea,0x32,0xb2, 0xf1,0xea,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xec,0xec,0xec,0xec,0xec,0x34,0xb4, 0xf4,0xed,0xed,0xed,0xed,0xed,0xed,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0x37,0xb7, 0xf6,0xef,0xef,0xef,0xef,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf1,0xf1,0x39,0xb9, 0xf8,0xf1,0xf1,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf3,0xf3,0xf3,0xf3,0x3b,0xbb, 0xfa,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0x3d,0xbe, 0xfd,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x40,0xc0, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x42,0xc2, 0xff,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x44,0xc4, 0xff,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x46,0xc6, 0xff,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x48,0xc9, 0xff,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x4b,0xcb, 0xff,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x4d,0xcd, 0xff,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x4f,0xcf, 0xff,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x52,0xcf, 0xff,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x54,0xcf, 0xff,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xcf, 0xff,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x58,0xcf, 0xff,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x5a,0xcf, 0xff,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x5d,0xcf, 0xff,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x5f,0xcf, 0xff,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x5d,0xcf, 0xff,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x5a,0xcf, 0xff,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x58,0xcf, 0xff,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xcf, 0xff,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x54,0xcf, 0xff,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x51,0xcf, 0xff,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x4f,0xcf, 0xff,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x4d,0xcd, 0xff,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x4b,0xcb, 0xff,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x48,0xc8, 0xff,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x46,0xc6, 0xff,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x44,0xc4, 0xff,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x42,0xc1, 0xff,0xf9,0xf9,0xf9,0xf9,0xf9,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x40,0xbf, 0xfe,0xf7,0xf7,0xf7,0xf7,0xf7,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf5,0x3d,0xbd, 0xfc,0xf5,0xf5,0xf5,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf3,0xf3,0xf3,0x3b,0xbb, 0xfa,0xf3,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf1,0xf1,0xf1,0xf1,0xf1,0x39,0xb9, 0xf7,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0x36,0xb6, 0xf5,0xee,0xee,0xee,0xee,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xec,0x34,0xb4, 0xf3,0xec,0xec,0xec,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xea,0xea,0xea,0x32,0xb2, 0xf1,0xea,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe8,0xe8,0xe8,0xe8,0xe8,0x30,0xb0, 0xee,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0x30,0xad, 0xec,0xe5,0xe5,0xe5,0xe5,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe3,0xe3,0x30,0xab, 0xea,0xe3,0xe3,0xe3,0xe3,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe1,0xe1,0x30,0xa9, 0xe8,0xe1,0xe1,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xdf,0xdf,0xdf,0xdf,0x30,0xa7, 0xe6,0xde,0xde,0xde,0xde,0xde,0xde,0xde,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x30,0xa4, 0xe3,0xdc,0xdc,0xdc,0xdc,0xdc,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xda,0x30,0xa2, 0xe1,0xda,0xda,0xda,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd8,0xd8,0xd8,0x30,0xa0, 0xdf,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd9,0xd9,0xd9,0xd9,0xd9,0xa2,0x30,0xa3, 0xe2,0xda,0xda,0xda,0xda,0xda,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xa5,0x30,0xa5, 0xe4,0xdc,0xdc,0xdc,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xde,0xa7,0x30,0xa7, 0xe6,0xde,0xde,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xe0,0xe0,0xe0,0xa9,0x30,0xa9, 0xe8,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe2,0xe2,0xe2,0xe2,0xe2,0xab,0x30,0xab, 0xea,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe4,0xe4,0xe4,0xe4,0xe4,0xad,0x30,0xae, 0xed,0xe5,0xe5,0xe5,0xe5,0xe5,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xb0,0x30,0xb0, 0xef,0xe7,0xe7,0xe7,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe9,0xe9,0xb2,0x32,0xb2, 0xf1,0xe9,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xeb,0xeb,0xeb,0xeb,0xb4,0x34,0xb4, 0xf4,0xec,0xec,0xec,0xec,0xec,0xec,0xed,0xed,0xed,0xed,0xed,0xed,0xb6,0x37,0xb7, 0xf6,0xee,0xee,0xee,0xee,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xf0,0xb9,0x39,0xb9, 0xf8,0xf0,0xf0,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0xf2,0xf2,0xf2,0xbb,0x3b,0xbb, 0xfa,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf4,0xf4,0xf4,0xf4,0xf4,0xbd,0x3d,0xbe, 0xfd,0xf5,0xf5,0xf5,0xf5,0xf5,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xbf,0x40,0xc0, 0xff,0xf7,0xf7,0xf7,0xf7,0xf7,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xc2,0x42,0xc2, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xc4,0x44,0xc4, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xc6,0x46,0xc6, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xc8,0x48,0xc9, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xcb,0x4b,0xcb, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xcd,0x4d,0xcd, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xcf,0x4f,0xcf, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xcf,0x52,0xcf, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xcf,0x54,0xcf, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xcf,0x56,0xcf, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xcf,0x58,0xcf, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xcf,0x5a,0xcf, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xcf,0x5d,0xcf, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xcf,0x5f,0xcf, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xcf,0x5d,0xcf, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xcf,0x5a,0xcf, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xcf,0x58,0xcf, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xcf,0x56,0xcf, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xcf,0x54,0xcf, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xcf,0x51,0xcf, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xcf,0x4f,0xcf, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xcd,0x4d,0xcd, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xcb,0x4b,0xcb, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xc9,0x48,0xc8, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xc6,0x46,0xc6, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xc4,0x44,0xc4, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xc2,0x42,0xc1, 0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xc0,0x40,0xbf, 0xfe,0xf6,0xf6,0xf6,0xf6,0xf6,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xbd,0x3d,0xbd, 0xfc,0xf4,0xf4,0xf4,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf2,0xf2,0xbb,0x3b,0xbb, 0xfa,0xf2,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0xf0,0xf0,0xf0,0xf0,0xb9,0x39,0xb9, 0xf7,0xef,0xef,0xef,0xef,0xef,0xef,0xee,0xee,0xee,0xee,0xee,0xee,0xb7,0x36,0xb6, 0xf5,0xed,0xed,0xed,0xed,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xeb,0xb4,0x34,0xb4, 0xf3,0xeb,0xeb,0xeb,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xe9,0xe9,0xb2,0x32,0xb2, 0xf1,0xe9,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe7,0xe7,0xe7,0xe7,0xb0,0x30,0xb0, 0xee,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xae,0x30,0xad, 0xec,0xe4,0xe4,0xe4,0xe4,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe2,0xab,0x30,0xab, 0xea,0xe2,0xe2,0xe2,0xe2,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe0,0xa9,0x30,0xa9, 0xe8,0xe0,0xe0,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xde,0xde,0xde,0xa7,0x30,0xa7, 0xe6,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdc,0xdc,0xdc,0xdc,0xdc,0xa5,0x30,0xa4, 0xe3,0xdb,0xdb,0xdb,0xdb,0xdb,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xa2,0x30,0xa2, 0xe1,0xd9,0xd9,0xd9,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd7,0xd7,0xa0,0x30,0x60, 0xa0,0xe0,0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,0xd8,0xd8,0xd8,0xd8,0xa2,0x30,0x00,0x63, 0xa3,0xe2,0xd9,0xd9,0xd9,0xd9,0xda,0xda,0xda,0xda,0xda,0xda,0xa4,0x30,0x00,0x65, 0xa5,0xe4,0xdb,0xdb,0xdc,0xdc,0xdc,0xdc,0xdc,0xdc,0xdc,0xdd,0xa7,0x30,0x00,0x67, 0xa7,0xe6,0xdd,0xde,0xde,0xde,0xde,0xde,0xde,0xde,0xdf,0xdf,0xa9,0x30,0x00,0x69, 0xa9,0xe9,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe1,0xe1,0xe1,0xe1,0xab,0x30,0x00,0x6b, 0xac,0xeb,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe3,0xe3,0xe3,0xe3,0xad,0x30,0x00,0x6e, 0xae,0xed,0xe4,0xe4,0xe4,0xe4,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xaf,0x30,0x00,0x70, 0xb0,0xef,0xe6,0xe6,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe8,0xb2,0x32,0x00,0x72, 0xb2,0xf1,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xea,0xea,0xea,0xb4,0x34,0x00,0x74, 0xb5,0xf4,0xeb,0xeb,0xeb,0xeb,0xeb,0xec,0xec,0xec,0xec,0xec,0xb6,0x36,0x00,0x77, 0xb7,0xf6,0xed,0xed,0xed,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xb9,0x39,0x00,0x79, 0xb9,0xf8,0xef,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf1,0xf1,0xbb,0x3b,0x00,0x7b, 0xbb,0xfb,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf3,0xf3,0xf3,0xf3,0xbd,0x3d,0x00,0x7e, 0xbe,0xfd,0xf4,0xf4,0xf4,0xf4,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xbf,0x40,0x00,0x80, 0xc0,0xff,0xf6,0xf6,0xf6,0xf6,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xc1,0x42,0x02,0x82, 0xc2,0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xc4,0x44,0x04,0x84, 0xc4,0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xc6,0x46,0x06,0x86, 0xc6,0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xc8,0x48,0x08,0x89, 0xc9,0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xca,0x4b,0x0b,0x8b, 0xcb,0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xcd,0x4d,0x0d,0x8d, 0xcd,0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xcf,0x4f,0x0f,0x8f, 0xcf,0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xcf,0x51,0x12,0x92, 0xcf,0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xcf,0x54,0x14,0x94, 0xcf,0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xcf,0x56,0x16,0x96, 0xcf,0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xcf,0x58,0x18,0x98, 0xcf,0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xcf,0x5a,0x1a,0x9b, 0xcf,0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xcf,0x5d,0x1d,0x9d, 0xcf,0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xcf,0x5f,0x1f,0x9f, 0xcf,0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xcf,0x5d,0x1d,0x9c, 0xcf,0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xcf,0x5a,0x1a,0x9a, 0xcf,0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xcf,0x58,0x18,0x98, 0xcf,0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xcf,0x56,0x16,0x96, 0xcf,0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xcf,0x54,0x14,0x94, 0xcf,0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xcf,0x52,0x11,0x91, 0xcf,0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xcf,0x4f,0x0f,0x8f, 0xcf,0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xcd,0x4d,0x0d,0x8d, 0xcd,0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xcb,0x4b,0x0b,0x8b, 0xca,0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xc9,0x49,0x08,0x88, 0xc8,0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xc6,0x46,0x06,0x86, 0xc6,0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xc4,0x44,0x04,0x84, 0xc4,0xff,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xc2,0x42,0x02,0x81, 0xc1,0xff,0xf7,0xf7,0xf7,0xf7,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xc0,0x40,0x00,0x7f, 0xbf,0xfe,0xf5,0xf5,0xf5,0xf5,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xbe,0x3d,0x00,0x7d, 0xbd,0xfc,0xf3,0xf3,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf1,0xbb,0x3b,0x00,0x7b, 0xbb,0xfa,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xef,0xef,0xef,0xb9,0x39,0x00,0x79, 0xb8,0xf7,0xee,0xee,0xee,0xee,0xee,0xed,0xed,0xed,0xed,0xed,0xb7,0x37,0x00,0x76, 0xb6,0xf5,0xec,0xec,0xec,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xb4,0x34,0x00,0x74, 0xb4,0xf3,0xea,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe8,0xe8,0xb2,0x32,0x00,0x72, 0xb2,0xf1,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe6,0xe6,0xe6,0xb0,0x30,0x00,0x70, 0xaf,0xee,0xe5,0xe5,0xe5,0xe5,0xe5,0xe4,0xe4,0xe4,0xe4,0xe4,0xae,0x30,0x00,0x6d, 0xad,0xec,0xe3,0xe3,0xe3,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xab,0x30,0x00,0x6b, 0xab,0xea,0xe1,0xe1,0xe1,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xa9,0x30,0x00,0x69, 0xa9,0xe8,0xdf,0xde,0xde,0xde,0xde,0xde,0xde,0xde,0xdd,0xdd,0xa7,0x30,0x00,0x67, 0xa7,0xe5,0xdc,0xdc,0xdc,0xdc,0xdc,0xdc,0xdb,0xdb,0xdb,0xdb,0xa5,0x30,0x00,0x64, 0xa4,0xe3,0xda,0xda,0xda,0xda,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xa3,0x30,0x00,0x62, 0xa2,0xe1,0xd8,0xd8,0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,0xd6,0xa0,0x30,0x00 }; #endif MilkyTracker-1.02.00/src/tracker/Piano.h000066400000000000000000000072351324432207300177230ustar00rootroot00000000000000/* * tracker/Piano.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #ifndef PIANO__H #define PIANO__H #include "Singleton.h" class PianoBitmapBase { protected: PianoBitmapBase() { } public: virtual const pp_uint8* getBitmap() = 0; virtual const pp_uint8* getBitmapLUT() = 0; virtual pp_int32 getBitmapWidth() = 0; virtual pp_int32 getBitmapHeight() = 0; virtual pp_int32 getBitmapLUTWidth() = 0; virtual const pp_int32* getDIVLUT() = 0; virtual const pp_int32* getMODLUT() = 0; }; class PianoBitmapSmall : public PianoBitmapBase, public PPSingleton { private: enum { width = 448, height = 25, octaveWidth = 56 }; PianoBitmapSmall() { const pp_int32 lutWidth = getBitmapLUTWidth(); const pp_int32 width = getBitmapWidth(); for (pp_int32 i = 0; i < width; i++) { DIVLUT[i] = (i/lutWidth)*12; MODLUT[i] = (i%lutWidth)*3; } } static const pp_uint8 PIANO_LUT[]; static const pp_uint8 PIANO[]; pp_int32 DIVLUT[width]; pp_int32 MODLUT[width]; public: virtual const pp_uint8* getBitmap() { return PIANO; } virtual const pp_uint8* getBitmapLUT() { return PIANO_LUT; } virtual pp_int32 getBitmapWidth() { return width; } virtual pp_int32 getBitmapHeight() { return height; } virtual pp_int32 getBitmapLUTWidth() { return octaveWidth; } virtual const pp_int32* getDIVLUT() { return DIVLUT; } virtual const pp_int32* getMODLUT() { return MODLUT; } friend class PPSingleton; }; #ifndef __LOWRES__ class PianoBitmapLarge : public PianoBitmapBase, public PPSingleton { private: enum { width = 448*2, height = 25*2, octaveWidth = 56*2 }; PianoBitmapLarge() { const pp_int32 lutWidth = getBitmapLUTWidth(); const pp_int32 width = getBitmapWidth(); for (pp_int32 i = 0; i < width; i++) { DIVLUT[i] = (i/lutWidth)*12; MODLUT[i] = (i%lutWidth)*3; } } static const pp_uint8 PIANO_LUT[]; static const pp_uint8 PIANO[]; pp_int32 DIVLUT[width]; pp_int32 MODLUT[width]; public: virtual const pp_uint8* getBitmap() { return PIANO; } virtual const pp_uint8* getBitmapLUT() { return PIANO_LUT; } virtual pp_int32 getBitmapWidth() { return width; } virtual pp_int32 getBitmapHeight() { return height; } virtual pp_int32 getBitmapLUTWidth() { return octaveWidth; } virtual const pp_int32* getDIVLUT() { return DIVLUT; } virtual const pp_int32* getMODLUT() { return MODLUT; } friend class PPSingleton; }; #else class PianoBitmapLarge : public PianoBitmapBase, public PPSingleton { private: PianoBitmapLarge() { } public: virtual const pp_uint8* getBitmap() { return NULL; } virtual const pp_uint8* getBitmapLUT() { return NULL; } virtual pp_int32 getBitmapWidth() { return 0; } virtual pp_int32 getBitmapHeight() { return 0; } virtual pp_int32 getBitmapLUTWidth() { return 0; } virtual const pp_int32* getDIVLUT() { return NULL; } virtual const pp_int32* getMODLUT() { return NULL; } friend class PPSingleton; }; #endif #endif MilkyTracker-1.02.00/src/tracker/PianoControl.cpp000066400000000000000000000421361324432207300216160ustar00rootroot00000000000000/* * tracker/PianoControl.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "PianoControl.h" #include "Screen.h" #include "GraphicsAbstract.h" #include "Font.h" #include "ScrollBar.h" #include "Piano.h" #include "Tools.h" #include "PatternTools.h" #include "TrackerConfig.h" #define SCROLLBARWIDTH SCROLLBUTTONSIZE static const bool blackKeys[] = { false, true, false, true, false, false, true, false, true, false, true, false }; static const PPPoint positions[] = { PPPoint(1,17), PPPoint(5,6), PPPoint(9,17), PPPoint(13,6), PPPoint(17, 17), PPPoint(25, 17), PPPoint(29,6), PPPoint(33, 17), PPPoint(37,6), PPPoint(41, 17), PPPoint(45,6), PPPoint(49, 17) }; static const PPColor colors[] = { PPColor(0,0,0), PPColor(255,255,255), PPColor(0,0,0), PPColor(255,255,255), PPColor(0,0,0), PPColor(0,0,0), PPColor(255,255,255), PPColor(0,0,0), PPColor(255,255,255), PPColor(0,0,0), PPColor(255,255,255), PPColor(0,0,0) }; pp_int32 PianoControl::XMAX() { return pianoBitmap->getBitmapWidth(); } pp_int32 PianoControl::YMAX() { return pianoBitmap->getBitmapHeight(); } pp_int32 PianoControl::KEYWIDTH() { return XMAX()/pianoBitmap->getBitmapLUTWidth(); } PianoControl::PianoControl(pp_int32 id, PPScreen* parentScreen, EventListenerInterface* eventListener, const PPPoint& location, const PPSize& size, pp_uint8 numNotes, bool border/*= true*/) : PPControl(id, parentScreen, eventListener, location, size), border(border), NUMNOTES(numNotes), borderColor(&ourOwnBorderColor), mode(ModeEdit) { // default color ourOwnBorderColor.set(192, 192, 192); hScrollbar = new PPScrollbar(0, parentScreen, this, PPPoint(location.x, location.y + size.height - SCROLLBARWIDTH - 1), size.width - 1, true); #ifndef __LOWRES__ xscale = 1; yscale = 1; pianoBitmap = PianoBitmapLarge::getInstance(); #else xscale = 2; yscale = 1; pianoBitmap = PianoBitmapSmall::getInstance(); #endif xMax = XMAX()*xscale; yMax = YMAX()*yscale; visibleWidth = size.width - 2; visibleHeight = size.height - SCROLLBARWIDTH - 2; adjustScrollbars(); startPos = 0; caughtControl = NULL; controlCaughtByLMouseButton = controlCaughtByRMouseButton = false; nbu = new pp_uint8[NUMNOTES]; memset(nbu, 0, NUMNOTES); keyState = new KeyState[NUMNOTES]; sampleIndex = 0; } PianoControl::~PianoControl() { delete hScrollbar; delete[] nbu; delete[] keyState; } void PianoControl::paint(PPGraphicsAbstract* g) { if (!isVisible()) return; pp_int32 xOffset = 2; pp_int32 yOffset = 2; g->setRect(location.x, location.y, location.x + size.width, location.y + size.height); if (border) { drawBorder(g, *borderColor); } g->setRect(location.x + 1, location.y + 1, location.x + size.width - 2, location.y + size.height - 2); pp_int32 width = visibleWidth; pp_int32 adder = 65536/xscale; pp_int32 oy = location.y + 1; // for black piano keys PPColor colCorrect(TrackerConfig::colorThemeMain); colCorrect.r<<=1; colCorrect.g<<=1; colCorrect.b<<=1; // for white piano keys PPColor colCorrect2(TrackerConfig::colorThemeMain); colCorrect2.scale(1.5f, 1.5f, 1.6f); pp_int32 avg = (colCorrect2.b+colCorrect2.g+colCorrect2.r) / 3; PPColor colCorrect4(avg, avg, avg); pp_int32 PIANO_LUT_WIDTH = pianoBitmap->getBitmapLUTWidth(); const pp_uint8* PIANO_LUT = pianoBitmap->getBitmapLUT(); const pp_uint8* PIANO = pianoBitmap->getBitmap(); const pp_int32* DIVLUT = pianoBitmap->getDIVLUT(); const pp_int32* MODLUT = pianoBitmap->getMODLUT(); const pp_int32 XMAX = this->XMAX(); for (pp_int32 y = 0; y < visibleHeight; y++) { pp_int32 ry = y/yscale; pp_int32 offset = (ry*XMAX+(startPos/xscale)); pp_int32 ofs = 0; const pp_uint8* src = PIANO_LUT + (ry*PIANO_LUT_WIDTH*3); const pp_int32* divLutPtr = DIVLUT-ry*XMAX; const pp_int32* modLutPtr = MODLUT-ry*XMAX; pp_int32 ox = location.x + 1; for (pp_int32 x = 0; x < width; x++) { pp_int32 sx = offset+(ofs>>16); pp_int32 px = modLutPtr[sx]; pp_int32 c = src[px]; pp_int32 gr = src[px+1]; pp_int32 b = src[px+2]; if (c == 255 && gr == 0 && b == 0) { g->setColor(PIANO[sx], PIANO[sx], PIANO[sx]); } else { // color values equal/above 240 if (c >= 240) c-=240; pp_int32 note = divLutPtr[sx] + c; if (keyState[note].pressed) { if (keyState[note].muted) { if (colors[c].r) g->setSafeColor((PIANO[sx]+(colCorrect4.r>>2)), (PIANO[sx]+(colCorrect4.g>>2)), (PIANO[sx]+(colCorrect4.b>>2))); else g->setSafeColor((PIANO[sx]*colCorrect4.r)>>8, (PIANO[sx]*colCorrect4.g)>>8, (PIANO[sx]*colCorrect4.b)>>8); } else { if (colors[c].r) g->setSafeColor((PIANO[sx]+(colCorrect.r>>1)), (PIANO[sx]+(colCorrect.g>>1)), (PIANO[sx]+(colCorrect.b>>1))); else g->setSafeColor((PIANO[sx]*colCorrect2.r)>>8, (PIANO[sx]*colCorrect2.g)>>8, (PIANO[sx]*colCorrect2.b)>>8); } } else g->setColor(PIANO[sx], PIANO[sx], PIANO[sx]); } g->setPixel(ox, oy); ofs+=adder; ox++; } oy++; } float newXScale = pianoBitmap->getBitmapWidth() / PianoBitmapSmall::getInstance()->getBitmapWidth(); float newYScale = pianoBitmap->getBitmapHeight() / PianoBitmapSmall::getInstance()->getBitmapHeight(); if (mode == ModeEdit) { PPFont* font; font = (xscale == 1 && pianoBitmap == PianoBitmapSmall::getInstance()) ? PPFont::getFont(PPFont::FONT_TINY) : PPFont::getFont(PPFont::FONT_SYSTEM); g->setFont(font); xOffset = 0; yOffset = -1; if (xscale > 1) { xOffset = 2; } else if (pianoBitmap == PianoBitmapLarge::getInstance()) { xOffset = 1; } if (yscale > 1) { yOffset = -2; } else if (pianoBitmap == PianoBitmapLarge::getInstance()) { yOffset = 0; } for (pp_int32 i = 0; i < NUMNOTES; i++) { pp_int32 posx = location.x + 1 + (i/12)*(PIANO_LUT_WIDTH*xscale) - startPos; //if (blackKeys[i%12] && pianoBitmap == PianoBitmapLarge::getInstance()) // posx; g->setColor(colors[i%12]); char str[3] = "-"; if (nbu[i] != 255) PPTools::convertToHex(str, nbu[i], 1); g->drawChar(str[0], (pp_int32)(posx + (positions[i%12].x*xscale + xOffset)*newXScale), (pp_int32)(location.y + 1 + (positions[i%12].y*yscale + yOffset)*newYScale)); } } else if (mode == ModePlay && (xscale >= 2 || pianoBitmap == PianoBitmapLarge::getInstance())) { PPFont* font = PPFont::getFont(PPFont::FONT_TINY); g->setFont(font); if (pianoBitmap == PianoBitmapLarge::getInstance()) { xOffset = 1; yOffset = 0; } else { xOffset = 1; yOffset = -1; } for (pp_int32 i = 0; i < NUMNOTES; i++) { pp_int32 posx = location.x + 1 + (i/12)*(PIANO_LUT_WIDTH*xscale) - startPos; if (blackKeys[i%12] && pianoBitmap == PianoBitmapLarge::getInstance()) posx--; g->setColor(colors[i%12]); char str[4]/* = "C#"*/; PatternTools::getNoteName(str, i+1); if (str[1] == '-') { str[1] = str[2]; str[2] = '\0'; xOffset = 0; } else { str[2] = '\0'; xOffset = 1; } pp_int32 correctx = (KEYWIDTH()*xscale) / 2 - font->getStrWidth(str) / 2 - 3; if (correctx < 0) correctx = 0; xOffset += correctx; g->drawString(str, (pp_int32)(posx + (positions[i%12].x*xscale + xOffset)*newXScale), (pp_int32)(location.y + 1 + (positions[i%12].y*yscale + yOffset)*newYScale)); } } hScrollbar->paint(g); } pp_int32 PianoControl::dispatchEvent(PPEvent* event) { if (eventListener == NULL) return -1; //if (!visible) // return 0; switch (event->getID()) { case eRMouseDown: { PPPoint* p = (PPPoint*)event->getDataPtr(); if (hScrollbar->hit(*p)) { if (controlCaughtByLMouseButton) break; controlCaughtByRMouseButton = true; caughtControl = hScrollbar; caughtControl->dispatchEvent(event); } break; } case eLMouseDown: { PPPoint* p = (PPPoint*)event->getDataPtr(); // Clicked on horizontal scrollbar -> route event to scrollbar and catch scrollbar control if (hScrollbar->hit(*p)) { if (controlCaughtByRMouseButton) break; controlCaughtByLMouseButton = true; caughtControl = hScrollbar; caughtControl->dispatchEvent(event); } // Clicked in client area else { pp_int32 note = positionToNote(*p); if (note != -1) { switch (mode) { case ModeEdit: { nbu[note] = (pp_uint8)sampleIndex & 0xf; PPEvent e(eValueChanged, &nbu, sizeof(pp_uint8*)); eventListener->handleEvent(reinterpret_cast(this), &e); break; } case ModePlay: { currentSelectedNote = note; PPEvent e(eSelection, ¬e, sizeof(note)); eventListener->handleEvent(reinterpret_cast(this), &e); break; } } parentScreen->paintControl(this); } } break; } case eRMouseUp: { controlCaughtByRMouseButton = false; if (caughtControl && !controlCaughtByLMouseButton && !controlCaughtByRMouseButton) { caughtControl->dispatchEvent(event); caughtControl = NULL; break; } break; } case eLMouseUp: if (caughtControl == NULL) { pp_int32 note = currentSelectedNote; if (note != -1) { switch (mode) { case ModePlay: { pp_int32 v = (1 << 16) + currentSelectedNote; PPEvent e(eSelection, &v, sizeof(v)); eventListener->handleEvent(reinterpret_cast(this), &e); break; } case ModeEdit: break; } parentScreen->paintControl(this); } break; } controlCaughtByLMouseButton = false; if (!controlCaughtByLMouseButton && !controlCaughtByRMouseButton) { caughtControl->dispatchEvent(event); caughtControl = NULL; } break; case eLMouseDrag: { if (caughtControl && controlCaughtByLMouseButton) { caughtControl->dispatchEvent(event); break; } //positionToNote(*(PPPoint*)event->getDataPtr()); //parentScreen->paintControl(this); pp_int32 note = positionToNote(*(PPPoint*)event->getDataPtr()); if (note != -1) { switch (mode) { case ModeEdit: { nbu[note] = (pp_uint8)sampleIndex & 0xf; PPEvent e(eValueChanged, &nbu, sizeof(pp_uint8*)); eventListener->handleEvent(reinterpret_cast(this), &e); break; } case ModePlay: { if (note == currentSelectedNote) break; pp_int32 v = (1 << 16) + currentSelectedNote; PPEvent e(eSelection, &v, sizeof(v)); eventListener->handleEvent(reinterpret_cast(this), &e); currentSelectedNote = note; PPEvent e2(eSelection, ¬e, sizeof(note)); eventListener->handleEvent(reinterpret_cast(this), &e2); break; } } parentScreen->paintControl(this); } break; } case eRMouseDrag: { if (caughtControl && controlCaughtByRMouseButton) caughtControl->dispatchEvent(event); break; } case eRMouseRepeat: { if (caughtControl && controlCaughtByRMouseButton) caughtControl->dispatchEvent(event); break; } case eMouseWheelMoved: { TMouseWheelEventParams* params = (TMouseWheelEventParams*)event->getDataPtr(); if ((params->deltaX > 0 || params->deltaY < 0) && hScrollbar) { PPEvent e(eBarScrollDown); handleEvent(reinterpret_cast(hScrollbar), &e); } else if ((params->deltaX < 0 || params->deltaY > 0) && hScrollbar) { PPEvent e(eBarScrollUp); handleEvent(reinterpret_cast(hScrollbar), &e); } event->cancel(); break; } default: if (caughtControl == NULL) break; caughtControl->dispatchEvent(event); break; } return 0; } pp_int32 PianoControl::handleEvent(PPObject* sender, PPEvent* event) { // Horizontal scrollbar, scroll up (=left) if (sender == reinterpret_cast(hScrollbar) && event->getID() == eBarScrollUp) { startPos-=KEYWIDTH()*xscale; if (startPos < 0) startPos = 0; pp_int32 visibleItems = visibleWidth; float v = (float)(getMaxWidth() - visibleItems); hScrollbar->setBarPosition((pp_int32)(startPos*(65536.0f/v))); } // Horizontal scrollbar, scroll down (=right) else if (sender == reinterpret_cast(hScrollbar) && event->getID() == eBarScrollDown) { pp_int32 visibleItems = visibleWidth; startPos+=KEYWIDTH()*xscale; if (startPos + visibleItems >= (signed)getMaxWidth()) startPos = getMaxWidth() - visibleItems; float v = (float)(getMaxWidth() - visibleItems); hScrollbar->setBarPosition((pp_int32)(startPos*(65536.0f/v))); } // Horizontal scrollbar, position changed else if (sender == reinterpret_cast(hScrollbar) && event->getID() == eBarPosChanged) { float pos = hScrollbar->getBarPosition()/65536.0f; pp_int32 visibleItems = visibleWidth; float v = (float)(getMaxWidth() - visibleItems); startPos = (pp_uint32)(v*pos); } parentScreen->paintControl(this); return 0; } pp_int32 PianoControl::getMaxWidth() { return XMAX()*xscale; } void PianoControl::adjustScrollbars() { float s = (float)visibleWidth / (float)getMaxWidth(); float olds = hScrollbar->getBarSize() / 65536.0f; hScrollbar->setBarSize((pp_int32)(s*65536.0f), false); s = hScrollbar->getBarSize() / 65536.0f; float scale = s / olds; float pos = hScrollbar->getBarPosition()/65536.0f; hScrollbar->setBarPosition((pp_int32)(pos*scale*65536.0f)); pos = hScrollbar->getBarPosition()/65536.0f; pp_int32 visibleItems = visibleWidth; float v = (float)(getMaxWidth() - visibleItems); startPos = (pp_uint32)(v*pos); if (startPos < 0) { startPos = 0; } //pp_int32 entireSize = (horizontal?this->size.width:this->size.height) - SCROLLBUTTONSIZE*2; } void PianoControl::setxScale(pp_int32 scale) { xscale = scale; adjustScrollbars(); assureNoteVisible(4*12); } void PianoControl::setyScale(pp_int32 scale) { yscale = scale; } void PianoControl::setLocation(const PPPoint& location) { PPControl::setLocation(location); pp_int32 p = hScrollbar->getBarPosition(); pp_int32 s = hScrollbar->getBarSize(); delete hScrollbar; hScrollbar = new PPScrollbar(0, parentScreen, this, PPPoint(location.x, location.y + size.height - SCROLLBARWIDTH - 1), size.width - 1, true); hScrollbar->setBarSize(s); hScrollbar->setBarPosition(p); } void PianoControl::setSize(const PPSize& size) { PPControl::setSize(size); delete hScrollbar; hScrollbar = new PPScrollbar(0, parentScreen, this, PPPoint(location.x, location.y + size.height - SCROLLBARWIDTH - 1), size.width - 1, true); visibleWidth = size.width - 2; visibleHeight = size.height - SCROLLBARWIDTH - 2; adjustScrollbars(); assureNoteVisible(4*12); } void PianoControl::setSampleTable(const pp_uint8* nbu) { if (nbu == NULL) { memset(this->nbu, 0, NUMNOTES); return; } memcpy(this->nbu, nbu, NUMNOTES); } void PianoControl::pressNote(pp_int32 note, bool pressed, bool muted/* = false*/) { if (note >= 0 && note < NUMNOTES) { keyState[note].pressed = pressed; keyState[note].muted = muted; } } bool PianoControl::getNoteState(pp_int32 note) const { if (note >= 0 && note < NUMNOTES) return keyState[note].pressed; return false; } void PianoControl::assureNoteVisible(pp_int32 note) { pp_int32 PIANO_LUT_WIDTH = pianoBitmap->getBitmapLUTWidth(); pp_int32 startPos = (PIANO_LUT_WIDTH*(note/12)+positions[note%12].x)*xscale; float v = (float)(getMaxWidth() - visibleWidth); hScrollbar->setBarPosition((pp_int32)(startPos*(65536.0f/v))); float pos = hScrollbar->getBarPosition()/65536.0f; startPos = (pp_uint32)(v*pos); this->startPos = startPos; } pp_int32 PianoControl::positionToNote(PPPoint cp) { if (sampleIndex < 0) return -1; cp.x -= location.x + 1; cp.y -= location.y + 1; if (cp.x < 0 || cp.x >= visibleWidth || cp.y < 0 || cp.y >= visibleHeight) return -1; pp_int32 PIANO_LUT_WIDTH = pianoBitmap->getBitmapLUTWidth(); const pp_uint8* PIANO_LUT = pianoBitmap->getBitmapLUT(); cp.x/=xscale; cp.y/=yscale; cp.x+=startPos/xscale; pp_int32 octave = cp.x / PIANO_LUT_WIDTH; pp_int32 ox = cp.x % PIANO_LUT_WIDTH; pp_int32 c = PIANO_LUT[(cp.y * PIANO_LUT_WIDTH + ox)*3]; pp_int32 g = PIANO_LUT[(cp.y * PIANO_LUT_WIDTH + ox)*3+1]; pp_int32 b = PIANO_LUT[(cp.y * PIANO_LUT_WIDTH + ox)*3+2]; if (c == 255 && g == 0 && b == 0) return -1; // color values equal/above 240 if (c >= 240) c-=240; pp_int32 note = octave*12 + c; if (note < 0 || note >= NUMNOTES) return -1; return note; } MilkyTracker-1.02.00/src/tracker/PianoControl.h000066400000000000000000000061471324432207300212650ustar00rootroot00000000000000/* * tracker/PianoControl.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #ifndef PIANOCONTROL__H #define PIANOCONTROL__H #include "BasicTypes.h" #include "Control.h" #include "Event.h" class PianoControl : public PPControl, public EventListenerInterface { public: enum Modes { ModeEdit = 0, ModePlay = 1 }; private: pp_int32 XMAX(); pp_int32 YMAX(); pp_int32 KEYWIDTH(); const pp_uint8 NUMNOTES; bool border; PPColor ourOwnBorderColor; const PPColor* borderColor; class PPScrollbar* hScrollbar; PPControl* caughtControl; bool controlCaughtByLMouseButton, controlCaughtByRMouseButton; // extent pp_int32 xscale; pp_int32 yscale; pp_int32 xMax; pp_int32 yMax; pp_int32 startPos; pp_int32 visibleWidth; pp_int32 visibleHeight; pp_int32 sampleIndex; pp_uint8* nbu; struct KeyState { bool pressed; bool muted; KeyState() : pressed(false), muted(false) { } }; KeyState* keyState; Modes mode; pp_int32 currentSelectedNote; class PianoBitmapBase* pianoBitmap; public: PianoControl(pp_int32 id, PPScreen* parentScreen, EventListenerInterface* eventListener, const PPPoint& location, const PPSize& size, pp_uint8 numNotes, bool border = true); ~PianoControl(); void setMode(Modes mode) { this->mode = mode; } Modes getMode() const { return mode; } void setBorderColor(const PPColor& color) { this->borderColor = &color; } void setxMax(pp_int32 xMax) { this->xMax = xMax; adjustScrollbars(); } pp_int32 getxMax() const { return xMax; } void setyMax(pp_int32 yMax) { this->yMax = yMax; adjustScrollbars(); } pp_int32 getyMax() const { return yMax; } void setxScale(pp_int32 scale); void setyScale(pp_int32 scale); pp_int32 getxScale() const { return xscale; } pp_int32 getyScale() const { return yscale; } void setSampleTable(const pp_uint8* nbu); void setSampleIndex(pp_int32 index) { sampleIndex = index; } void pressNote(pp_int32 note, bool pressed, bool muted = false); bool getNoteState(pp_int32 note) const; void assureNoteVisible(pp_int32 note); // from PPControl virtual void paint(PPGraphicsAbstract* graphics); virtual pp_int32 dispatchEvent(PPEvent* event); virtual pp_int32 handleEvent(PPObject* sender, PPEvent* event); virtual void setLocation(const PPPoint& location); virtual void setSize(const PPSize& size); private: pp_int32 getMaxWidth(); void adjustScrollbars(); pp_int32 positionToNote(PPPoint cp); }; #endif MilkyTracker-1.02.00/src/tracker/PlayerController.cpp000066400000000000000000000761331324432207300225130ustar00rootroot00000000000000/* * tracker/PlayerController.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * PlayerController.cpp * MilkyTracker * * Created by Peter Barth on Tue Mar 15 2005. * */ #include "PlayerController.h" #include "PlayerMaster.h" #include "MilkyPlay.h" #include "ResamplerMacros.h" #include "PPSystem.h" #include "PlayerCriticalSection.h" #include "ModuleEditor.h" class PlayerStatusTracker : public PlayerSTD::StatusEventListener { public: PlayerStatusTracker(PlayerController& playerController) : playerController(playerController) { clearUpdateCommandBuff(); } // this is being called from the player callback in a serialized fashion virtual void playerTickStarted(PlayerSTD& player, XModule& module) { while (rbReadIndex < rbWriteIndex) { mp_sint32 idx = rbReadIndex & (UPDATEBUFFSIZE-1); // handle notes that are played from external source // i.e. keyboard playback switch (updateCommandBuff[idx].code) { case UpdateCommandCodeNote: { UpdateCommandNote* command = reinterpret_cast(&updateCommandBuff[idx]); mp_sint32 note = command->note; if (note) { player.playNote(command->channel, note, command->ins, command->volume); command->note = 0; } break; } case UpdateCommandCodeSample: { UpdateCommandSample* command = reinterpret_cast(&updateCommandBuff[idx]); const TXMSample* smp = command->smp; if (smp) { playSampleInternal(player, command->channel, smp, command->currentSamplePlayNote, command->rangeStart, command->rangeEnd); command->smp = NULL; } break; } } rbReadIndex++; } } virtual void patternEndReached(PlayerSTD& player, XModule& module, mp_sint32& newOrderIndex) { handleQueuedPositions(player, newOrderIndex); } void playNote(mp_ubyte chn, mp_sint32 note, mp_sint32 ins, mp_sint32 vol/* = -1*/) { // fill ring buffer with note entries // the callback will query these notes and play them mp_sint32 idx = rbWriteIndex & (UPDATEBUFFSIZE-1); UpdateCommandNote* command = reinterpret_cast(&updateCommandBuff[idx]); command->channel = chn; command->ins = ins; command->volume = vol; command->note = note; // code needs to be filled in last command->code = UpdateCommandCodeNote; rbWriteIndex++; } void playSample(mp_ubyte chn, const TXMSample& smp, mp_sint32 currentSamplePlayNote, mp_sint32 rangeStart, mp_sint32 rangeEnd) { // fill ring buffer with sample playback entries mp_sint32 idx = rbWriteIndex & (UPDATEBUFFSIZE-1); UpdateCommandSample* command = reinterpret_cast(&updateCommandBuff[idx]); command->channel = chn; command->currentSamplePlayNote = currentSamplePlayNote; command->rangeStart = rangeStart; command->rangeEnd = rangeEnd; command->smp = &smp; command->code = UpdateCommandCodeSample; rbWriteIndex++; } private: PlayerController& playerController; void handleQueuedPositions(PlayerSTD& player, mp_sint32& poscnt) { // there is a queued position if (playerController.nextOrderIndexToPlay != -1) { // the new order the queued one poscnt = playerController.nextOrderIndexToPlay; // the queued one becomes invalid playerController.nextOrderIndexToPlay = -1; // we're no longer in pattern play mode... playerController.patternPlay = false; // ... that's why we're going to set the pattern index to -1 playerController.patternIndex = -1; player.setPatternToPlay(-1); } // there is a queued pattern else if (playerController.nextPatternIndexToPlay != -1) { // the new pattern index player.setPatternToPlay(playerController.nextPatternIndexToPlay); // we're no in pattern play mode playerController.patternPlay = true; // that's our new pattern playerController.patternIndex = playerController.nextPatternIndexToPlay; // the queued one becomes invalid playerController.nextPatternIndexToPlay = -1; } } void playSampleInternal(PlayerSTD& player, mp_ubyte chn, const TXMSample* smp, mp_sint32 currentSamplePlayNote, mp_sint32 rangeStart, mp_sint32 rangeEnd) { pp_int32 period = player.getlogperiod(currentSamplePlayNote+1, smp->relnote, smp->finetune) << 8; pp_int32 freq = player.getlogfreq(period); player.setFreq(chn,freq); player.setVol(chn, (smp->vol*512)/255); player.setPan(chn, 128); player.chninfo[chn].flags |= 0x100; // CHANNEL_FLAGS_UPDATE_IGNORE pp_int32 flags = (smp->type >> 2) & 4; if (rangeStart == -1 && rangeEnd == -1) { flags |= smp->type & 3; if (flags & 3) player.playSample(chn, smp->sample, smp->samplen, 0, 0, false, smp->loopstart, smp->loopstart+smp->looplen, flags); else player.playSample(chn, smp->sample, smp->samplen, 0, 0, false, 0, smp->samplen, flags); } else { if (rangeStart == -1 || rangeEnd == -1) return; if (rangeEnd > (signed)smp->samplen) rangeEnd = smp->samplen; player.playSample(chn, smp->sample, smp->samplen, rangeStart, 0, false, 0, rangeEnd, flags); } } void clearUpdateCommandBuff() { memset(updateCommandBuff, 0, sizeof(updateCommandBuff)); rbReadIndex = rbWriteIndex = 0; } enum { // must be 2^n UPDATEBUFFSIZE = 128 }; enum UpdateCommandCodes { UpdateCommandCodeInvalid = 0, UpdateCommandCodeNote, UpdateCommandCodeSample, }; struct UpdateCommand { mp_ubyte code; mp_uint32 data[8]; void* pdata[8]; }; struct UpdateCommandNote { mp_ubyte code; mp_sint32 note; mp_sint32 channel; mp_sint32 ins; mp_sint32 volume; mp_uint32 data[4]; void* pdata[8]; }; struct UpdateCommandSample { mp_ubyte code; mp_uint32 currentSamplePlayNote; mp_uint32 rangeStart; mp_uint32 rangeEnd; mp_sint32 channel; mp_uint32 data[4]; const TXMSample* smp; void* pdata[7]; }; UpdateCommand updateCommandBuff[UPDATEBUFFSIZE]; mp_sint32 rbReadIndex; mp_sint32 rbWriteIndex; }; void PlayerController::assureNotSuspended() { if (mixer->isDevicePaused(player)) { mixer->resumeDevice(player); if (suspended) suspended = false; } } void PlayerController::reset() { if (!player) return; // reset internal player variables (effect memory) and looping information player->BPMCounter = 0; player->reset(); // reset mixer channels (stop playing channels) player->resetChannelsFull(); } bool PlayerController::detachDevice() { if (!mixer->isDeviceRemoved(player)) { return mixer->removeDevice(player); } return false; } PlayerController::PlayerController(MasterMixer* mixer, bool fakeScopes) : mixer(mixer), player(NULL), module(NULL), criticalSection(NULL), playerStatusTracker(new PlayerStatusTracker(*this)), patternPlay(false), playRowOnly(false), patternIndex(-1), nextOrderIndexToPlay(-1), nextPatternIndexToPlay(-1), lastPosition(-1), lastRow(-1), suspended(false), firstRecordChannelCall(true), numPlayerChannels(TrackerConfig::numPlayerChannels), numVirtualChannels(TrackerConfig::numVirtualChannels), totalPlayerChannels(numPlayerChannels + numVirtualChannels + 2), useVirtualChannels(TrackerConfig::useVirtualChannels), multiChannelKeyJazz(true), multiChannelRecord(true), mixerDataCacheSize(fakeScopes ? 0 : 512*2), mixerDataCache(fakeScopes ? NULL : new mp_sint32[mixerDataCacheSize]) { criticalSection = new PlayerCriticalSection(*this); player = new PlayerSTD(mixer->getSampleRate(), playerStatusTracker); player->setPlayMode(PlayerBase::PlayMode_FastTracker2); player->resetMainVolumeOnStartPlay(false); player->setBufferSize(mixer->getBufferSize()); currentPlayingChannel = useVirtualChannels ? numPlayerChannels : 0; pp_uint32 i; for (i = 0; i < sizeof(muteChannels) / sizeof(bool); i++) muteChannels[i] = false; for (i = 0; i < sizeof(recordChannels) / sizeof(bool); i++) recordChannels[i] = false; for (i = 0; i < sizeof(panning) / sizeof(mp_ubyte); i++) { switch (i & 3) { case 0: panning[i] = 0; break; case 1: panning[i] = 255; break; case 2: panning[i] = 255; break; case 3: panning[i] = 0; break; } } } PlayerController::~PlayerController() { delete[] mixerDataCache; if (player) { detachDevice(); delete player; } delete playerStatusTracker; delete criticalSection; } void PlayerController::attachModuleEditor(ModuleEditor* moduleEditor) { this->moduleEditor = moduleEditor; this->module = moduleEditor->getModule(); if (!player) return; if (!mixer->isDeviceRemoved(player)) mixer->removeDevice(player); ASSERT(sizeof(muteChannels)/sizeof(bool) >= (unsigned)totalPlayerChannels); player->startPlaying(module, true, 0, 0, totalPlayerChannels, panning, true); // restore muting for (mp_sint32 i = 0; i < numPlayerChannels; i++) player->muteChannel(i, muteChannels[i]); mixer->addDevice(player); } void PlayerController::playSong(mp_sint32 startIndex, mp_sint32 rowPosition, bool* muteChannels) { if (!player) return; if (!module) return; if (!module->isModuleLoaded()) return; assureNotSuspended(); if (!suspended) criticalSection->enter(false); readjustSpeed(); reset(); player->setPatternToPlay(-1); setNextOrderToPlay(-1); setNextPatternToPlay(-1); // muting has been reset, restore it for (mp_sint32 i = 0; i < numPlayerChannels; i++) { player->muteChannel(i, muteChannels[i]); this->muteChannels[i] = muteChannels[i]; } player->restart(startIndex, rowPosition, false, panning); player->setIdle(false); //resetPlayTimeCounter(); patternPlay = false; playRowOnly = false; patternIndex = 0; criticalSection->leave(false); } void PlayerController::playPattern(mp_sint32 index, mp_sint32 songPosition, mp_sint32 rowPosition, bool* muteChannels, bool playRowOnly/* = false*/) { if (!player) return; if (!module) return; if (!module->isModuleLoaded()) return; assureNotSuspended(); if (!suspended) criticalSection->enter(false); readjustSpeed(); reset(); setCurrentPatternIndex(index); setNextOrderToPlay(-1); setNextPatternToPlay(-1); // muting has been reset, restore it for (mp_sint32 i = 0; i < numPlayerChannels; i++) { player->muteChannel(i, muteChannels[i]); this->muteChannels[i] = muteChannels[i]; } if (rowPosition == -1) { rowPosition = player->getRow(); if (rowPosition >= module->phead[index].rows) rowPosition = 0; } player->restart(songPosition, rowPosition, false, panning, playRowOnly); player->setIdle(false); //resetPlayTimeCounter(); patternPlay = true; this->playRowOnly = playRowOnly; patternIndex = index; criticalSection->leave(false); } void PlayerController::setCurrentPatternIndex(mp_sint32 index) { if (player) player->setPatternToPlay(index); } void PlayerController::stop(bool bResetMainVolume/* = true*/) { if (!player) return; if (!module) return; if (!suspended) criticalSection->enter(false); if (isPlaying() && !playRowOnly) { lastPosition = player->getOrder(); lastRow = player->getRow(); wasPlayingPattern = isPlayingPattern(); } else { lastPosition = -1; lastRow = -1; wasPlayingPattern = false; } patternPlay = false; playRowOnly = false; readjustSpeed(); player->setIdle(true); reset(); player->restart(0, 0, true, panning); // muting has been reset, restore it for (mp_sint32 i = 0; i < numPlayerChannels; i++) { player->muteChannel(i, muteChannels[i]); this->muteChannels[i] = muteChannels[i]; } // reset internal variables if (bResetMainVolume) resetMainVolume(); setNextOrderToPlay(-1); setNextPatternToPlay(-1); criticalSection->leave(false); } void PlayerController::continuePlaying() { continuePlaying(true); } void PlayerController::continuePlaying(bool assureNotSuspended) { if (lastPosition == -1 || lastRow == -1) return; if (!player) return; if (!module) return; if (!module->isModuleLoaded()) return; if (assureNotSuspended) this->assureNotSuspended(); if (!suspended) criticalSection->enter(false); readjustSpeed(); if (wasPlayingPattern) player->setPatternToPlay(patternIndex); else player->setPatternToPlay(-1); for (mp_sint32 i = 0; i < numPlayerChannels; i++) player->muteChannel(i, muteChannels[i]); player->restart(lastPosition, lastRow, false, panning); player->setIdle(false); patternPlay = wasPlayingPattern; playRowOnly = false; criticalSection->leave(false); } void PlayerController::restartPlaying() { if (!player) return; if (!module) return; if (!module->isModuleLoaded()) return; lastPosition = lastRow = 0; } bool PlayerController::isPlaying() const { if (!player) return false; if (!module) return false; return player->isPlaying() && (!player->isIdle()) && !player->hasSongHalted(); } bool PlayerController::isPlayingRowOnly() const { if (!player) return false; if (!module) return false; return playRowOnly; } bool PlayerController::isActive() const { if (!player) return false; if (!module) return false; return player->isPlaying() && (!player->isIdle()); } bool PlayerController::isPlayingPattern(mp_sint32 index) const { if (!player) return false; if (index < 0) return false; if (player->getPatternToPlay() < 0) return false; return isPlayingPattern() && (player->getPatternToPlay() == index); } void PlayerController::setNextOrderToPlay(mp_sint32 orderIndex) { nextOrderIndexToPlay = orderIndex; if (orderIndex != -1) nextPatternIndexToPlay = -1; } mp_sint32 PlayerController::getNextOrderToPlay() const { return nextOrderIndexToPlay; } void PlayerController::setNextPatternToPlay(mp_sint32 patternIndex) { nextPatternIndexToPlay = patternIndex; if (patternIndex != -1) nextOrderIndexToPlay = -1; } mp_sint32 PlayerController::getNextPatternToPlay() const { return nextPatternIndexToPlay; } void PlayerController::pause() { if (player) player->pausePlaying(); } void PlayerController::unpause() { if (player) player->resumePlaying(); } bool PlayerController::isPaused() const { if (player) return player->isPaused(); return false; } void PlayerController::getSpeed(mp_sint32& BPM, mp_sint32& speed) { if (player && player->isPlaying()) { BPM = player->getTempo(); speed = player->getSpeed(); } else if (module) { BPM = module->header.speed; speed = module->header.tempo; } else { BPM = 125; speed = 6; } } void PlayerController::setSpeed(mp_sint32 BPM, mp_sint32 speed, bool adjustModuleHeader/* = true*/) { if (!player) return; if (BPM < 32) BPM = 32; if (BPM > 255) BPM = 255; if (speed < 1) speed = 1; if (speed > 31) speed = 31; if (player->isPlaying()) { player->setTempo(BPM); player->setSpeed(speed); // this is a MUST!!! pp_uint32 bpmRate = player->getbpmrate(BPM); player->adder = bpmRate; } if (module && adjustModuleHeader) { module->header.speed = BPM; module->header.tempo = speed; } } void PlayerController::readjustSpeed(bool adjustModuleHeader/* = true*/) { mp_sint32 speed, bpm; getSpeed(bpm, speed); setSpeed(bpm, speed, adjustModuleHeader); } void PlayerController::playSample(const TXMSample& smp, mp_sint32 currentSamplePlayNote, mp_sint32 rangeStart/* = -1*/, mp_sint32 rangeEnd/* = -1*/) { if (!player) return; assureNotSuspended(); if (player->isPlaying()) { pp_int32 i = numPlayerChannels + numVirtualChannels + 1; playerStatusTracker->playSample(i, smp, currentSamplePlayNote, rangeStart, rangeEnd); } } void PlayerController::stopSample() { if (!player) return; if (player->isPlaying()) { // doesn't seem to be a critical race condition pp_int32 i = numPlayerChannels + numVirtualChannels + 1; player->stopSample(i); player->chninfo[i].flags &= ~0x100; // CHANNEL_FLAGS_UPDATE_IGNORE } } void PlayerController::stopInstrument(mp_sint32 insIndex) { if (!player) return; if (player->isPlaying()) { // doesn't seem to be a critical race condition for (pp_int32 i = 0; i < numPlayerChannels + numVirtualChannels; i++) { if (player->chninfo[i].ins == insIndex) { player->stopSample(i); player->chninfo[i].flags &= ~0x100; // CHANNEL_FLAGS_UPDATE_IGNORE } } } } void PlayerController::playNote(mp_ubyte chn, mp_sint32 note, mp_sint32 i, mp_sint32 vol/* = -1*/) { if (!player) return; assureNotSuspended(); // note playing goes synchronized in the playback callback playerStatusTracker->playNote(chn, note, i, vol); } void PlayerController::suspendPlayer(bool bResetMainVolume/* = true*/, bool stopPlaying/* = true*/) { if (!player || suspended || mixer->isDeviceRemoved(player)) return; mixer->pauseDevice(player); suspended = true; if (stopPlaying) { stopSample(); stop(bResetMainVolume); } } void PlayerController::resumePlayer(bool continuePlaying) { if (!player) return; if (continuePlaying) this->continuePlaying(!suspended); if (suspended) { mixer->resumeDevice(player); suspended = false; } } void PlayerController::muteChannel(mp_sint32 c, bool m) { muteChannels[c] = m; if (player) player->muteChannel(c, m); } bool PlayerController::isChannelMuted(mp_sint32 c) { return muteChannels[c]; // do not poll the state from the player it will be resetted when the // player stops playing of a song /*if (player) { if (!player->getPlayerInstance()) return false; return static_cast(player->getPlayerInstance())->isChannelMuted(c); } return false;*/ } void PlayerController::recordChannel(mp_sint32 c, bool m) { recordChannels[c] = m; } bool PlayerController::isChannelRecording(mp_sint32 c) { return recordChannels[c]; } void PlayerController::reallocateChannels(mp_sint32 moduleChannels/* = 32*/, mp_sint32 virtualChannels/* = 0*/) { // channels might be changed, we need to make sure playing is stopped firstly bool paused = false; if (player && module) { paused = player->isPaused(); stop(false); } numPlayerChannels = moduleChannels; numVirtualChannels = virtualChannels; totalPlayerChannels = numPlayerChannels + (numVirtualChannels >= 0 ? numVirtualChannels : 0) + 2; if (player && module) { // reattaching will cause the desired channels to be allocated attachModuleEditor(moduleEditor); if (paused) player->pausePlaying(); continuePlaying(); } } void PlayerController::setUseVirtualChannels(bool bUseVirtualChannels) { useVirtualChannels = bUseVirtualChannels; currentPlayingChannel = useVirtualChannels ? numPlayerChannels : 0; } void PlayerController::resetFirstPlayingChannel() { for (pp_int32 i = 0; i < module->header.channum; i++) { if (recordChannels[i]) { currentPlayingChannel = i; break; } } } mp_sint32 PlayerController::getNextPlayingChannel(mp_sint32 currentChannel) { // if we're using virtual channels for instrument playback // the virtual channels are located in the range // [numPlayerChannels .. numPlayerChannels + numVirtualChannels] if (useVirtualChannels) { if (currentPlayingChannel < numPlayerChannels) currentPlayingChannel = numPlayerChannels-1; mp_sint32 res = currentPlayingChannel++; if (currentPlayingChannel >= numPlayerChannels + numVirtualChannels) currentPlayingChannel = numPlayerChannels; return res; } // if we're not using virtual channels for instrument playback // just use the module channels and cut notes which are playing else if (multiChannelKeyJazz) { mp_sint32 res = currentPlayingChannel/*++*/; //if (currentPlayingChannel >= module->header.channum) // currentPlayingChannel = 0; bool found = false; for (pp_int32 i = currentPlayingChannel+1; i < currentPlayingChannel + 1 + module->header.channum; i++) { pp_int32 c = i % module->header.channum; if (recordChannels[c]) { currentPlayingChannel = c; found = true; break; } } return found ? res : currentChannel; } return currentChannel; } void PlayerController::initRecording() { firstRecordChannelCall = true; } mp_sint32 PlayerController::getNextRecordingChannel(mp_sint32 currentChannel) { if (currentChannel < 0 || currentChannel >= TrackerConfig::MAXCHANNELS) return -1; if (firstRecordChannelCall && recordChannels[currentChannel]) { firstRecordChannelCall = false; return currentChannel; } else { for (pp_int32 i = currentChannel+1; i < currentChannel + 1 + module->header.channum; i++) { pp_int32 c = i % module->header.channum; if (recordChannels[c]) return c; } //return (currentChannel+1)%module->header.channum; } return currentChannel; } mp_sint32 PlayerController::getSongMainVolume() { if (!player || !module) return 255; return player->getSongMainVolume(); } void PlayerController::resetMainVolume() { if (!player || !module) return; player->setSongMainVolume((mp_ubyte)module->header.mainvol); } mp_int64 PlayerController::getPlayTime() { if (!player) return 0; float freq = (float)player->getMixFrequency(); return (mp_int64)(player->getSampleCounter()/freq); } void PlayerController::resetPlayTimeCounter() { if (!player) return; player->resetSampleCounter(); } void PlayerController::setPanning(mp_ubyte chn, mp_ubyte pan) { if (!player) return; panning[chn] = pan; if (player && player->isPlaying()) { for (mp_sint32 i = 0; i < TrackerConfig::numPlayerChannels; i++) player->setPanning((mp_ubyte)i, panning[i]); } } void PlayerController::getPosition(mp_sint32& pos, mp_sint32& row) { mp_uint32 index = player->getBeatIndexFromSamplePos(getCurrentSamplePosition()); player->getPosition(pos, row, index); } void PlayerController::getPosition(mp_sint32& order, mp_sint32& row, mp_sint32& ticker) { mp_uint32 index = player->getBeatIndexFromSamplePos(getCurrentSamplePosition()); player->getPosition(order, row, ticker, index); } void PlayerController::setPatternPos(mp_sint32 pos, mp_sint32 row) { player->setPatternPos(pos, row, false, false); } void PlayerController::switchPlayMode(PlayModes playMode, bool exactSwitch/* = true*/) { if (!player) return; switch (playMode) { case PlayMode_ProTracker2: if (exactSwitch) { player->enable(PlayerSTD::PlayModeOptionPanningE8x, false); player->enable(PlayerSTD::PlayModeOptionPanning8xx, false); player->enable(PlayerSTD::PlayModeOptionForcePTPitchLimit, true); } player->setPlayMode(PlayerBase::PlayMode_ProTracker2); break; case PlayMode_ProTracker3: if (exactSwitch) { player->enable(PlayerSTD::PlayModeOptionPanningE8x, false); player->enable(PlayerSTD::PlayModeOptionPanning8xx, false); player->enable(PlayerSTD::PlayModeOptionForcePTPitchLimit, true); } player->setPlayMode(PlayerBase::PlayMode_ProTracker3); break; case PlayMode_FastTracker2: if (exactSwitch) { player->enable(PlayerSTD::PlayModeOptionPanningE8x, false); player->enable(PlayerSTD::PlayModeOptionPanning8xx, true); player->enable(PlayerSTD::PlayModeOptionForcePTPitchLimit, false); } player->setPlayMode(PlayerBase::PlayMode_FastTracker2); break; default: ASSERT(false); } //stop(); //continuePlaying(); } PlayerController::PlayModes PlayerController::getPlayMode() { if (!player) return PlayMode_Auto; switch (player->getPlayMode()) { case PlayerBase::PlayMode_ProTracker2: return PlayMode_ProTracker2; case PlayerBase::PlayMode_ProTracker3: return PlayMode_ProTracker3; case PlayerBase::PlayMode_FastTracker2: return PlayMode_FastTracker2; default: ASSERT(false); } return PlayMode_Auto; } void PlayerController::enablePlayModeOption(PlayModeOptions option, bool b) { switch (option) { case PlayModeOptionPanning8xx: player->enable(PlayerSTD::PlayModeOptionPanning8xx, b); break; case PlayModeOptionPanningE8x: player->enable(PlayerSTD::PlayModeOptionPanningE8x, b); break; case PlayModeOptionForcePTPitchLimit: player->enable(PlayerSTD::PlayModeOptionForcePTPitchLimit, b); break; default: ASSERT(false); } } bool PlayerController::isPlayModeOptionEnabled(PlayModeOptions option) { if (!player) return false; switch (option) { case PlayModeOptionPanning8xx: return player->isEnabled(PlayerSTD::PlayModeOptionPanning8xx); case PlayModeOptionPanningE8x: return player->isEnabled(PlayerSTD::PlayModeOptionPanningE8x); case PlayModeOptionForcePTPitchLimit: return player->isEnabled(PlayerSTD::PlayModeOptionForcePTPitchLimit); default: ASSERT(false); return false; } } mp_sint32 PlayerController::getAllNumPlayingChannels() { if (!player) return 0; return player->mixerNumAllocatedChannels; } mp_sint32 PlayerController::getPlayerNumPlayingChannels() { if (!player) return 0; return player->initialNumChannels; } mp_sint32 PlayerController::getCurrentSamplePosition() { if (mixer && mixer->getAudioDriver()) return mixer->getAudioDriver()->getBufferPos(); return 0; } mp_sint32 PlayerController::getCurrentBeatIndex() { if (player) return player->getBeatIndexFromSamplePos(getCurrentSamplePosition()); return 0; } bool PlayerController::isSamplePlaying(const TXMSample& smp, mp_sint32 channel, mp_sint32& pos, mp_sint32& vol, mp_sint32& pan) { if (!player) return false; ChannelMixer* mixer = player; // this rather critical // maybe someday this entire decision should go into the // player or mixer class itself, so I don't need to access it here pp_int32 j = getCurrentBeatIndex(); pos = mixer->channel[channel].timeRecord[j].smppos; // compare sample from sample editor against sample from current mixer channel if (pos >= 0 && (void*)mixer->channel[channel].timeRecord[j].sample == (void*)smp.sample) { vol = (mixer->channel[channel].timeRecord[j].volPan & 0xFFFF) >> 1; pan = (mixer->channel[channel].timeRecord[j].volPan) >> 16; return true; } return false; } bool PlayerController::isEnvelopePlaying(const TEnvelope& envelope, mp_sint32 envelopeType, mp_sint32 channel, mp_sint32& pos) { if (!player) return false; ChannelMixer* mixer = player; const PlayerSTD::TPrEnv* env = NULL; switch (envelopeType) { case 0: env = &player->chninfo[channel].venv; break; case 1: env = &player->chninfo[channel].penv; break; } pp_int32 j = getCurrentBeatIndex(); pos = env->timeRecord[j].pos; if (env && env->timeRecord[j].envstruc && env->timeRecord[j].envstruc == &envelope) { if ((env->timeRecord[j].envstruc->num && !(env->timeRecord[j].envstruc->type & 4) && pos >= env->timeRecord[j].envstruc->env[env->timeRecord[j].envstruc->num-1][0]) || !(mixer->channel[channel].timeRecord[j].volPan & 0xFFFF)) { pos = -1; } return true; } return false; } bool PlayerController::isNotePlaying(mp_sint32 ins, mp_sint32 channel, mp_sint32& note, bool& muted) { if (!player) return false; const PlayerSTD::TModuleChannel* chnInf = &player->chninfo[channel]; if (player->channel[channel].flags&ChannelMixer::MP_SAMPLE_PLAY) { if (chnInf->ins == ins && chnInf->keyon && chnInf->note) { muted = (player->channel[channel].flags & ChannelMixer::MP_SAMPLE_MUTE) != 0; note = chnInf->note; return true; } } return false; } #define FULLMIXER_8BIT_NORMAL_TEMP \ if (sample) { \ sd1 = ((mp_sbyte)sample[smppos])<<8; \ sd2 = ((mp_sbyte)sample[smppos+1])<<8; \ sd1 =((sd1<<12)+(smpposfrac>>4)*(sd2-sd1))>>12; \ y = (sd1*vol)>>9; \ } \ else { \ y = 0; \ } \ fetcher.fetchSampleData(y); #define FULLMIXER_16BIT_NORMAL_TEMP \ if (sample) { \ sd1 = ((mp_sword*)(sample))[smppos]; \ sd2 = ((mp_sword*)(sample))[smppos+1]; \ sd1 =((sd1<<12)+(smpposfrac>>4)*(sd2-sd1))>>12; \ y = (sd1*vol)>>9; \ } \ else { \ y = 0; \ } \ fetcher.fetchSampleData(y); void PlayerController::grabSampleData(mp_uint32 chnIndex, mp_sint32 count, mp_sint32 fMul, SampleDataFetcher& fetcher) { if (!player) return; if (mixerDataCache && (count * 2 > mixerDataCacheSize)) { delete[] mixerDataCache; mixerDataCacheSize = count * 2 * 2; mixerDataCache = new mp_sint32[mixerDataCacheSize]; } ChannelMixer* mixer = player; ChannelMixer::TMixerChannel* chn = &mixer->channel[chnIndex]; pp_int32 j = getCurrentBeatIndex(); if (chn->flags & ChannelMixer::MP_SAMPLE_PLAY) { // this is critical // it might be that the audio thread modifies the data as we are // accessing it... So in the worst case we're getting a sample // but the channel state data does belong to another sample already // in that case we're displaying garbage... // BUT it's important that we only access sample data // within the range of the current sample we have ChannelMixer::TMixerChannel channel; channel.sample = chn->timeRecord[j].sample; if (channel.sample == NULL) goto resort; channel.smplen = TXMSample::getSampleSizeInSamples((mp_ubyte*)channel.sample); channel.flags = chn->timeRecord[j].flags; channel.smppos = chn->timeRecord[j].smppos % channel.smplen; channel.smpposfrac = chn->timeRecord[j].smpposfrac; channel.smpadd = chn->timeRecord[j].smpadd; channel.loopend = channel.loopendcopy = chn->timeRecord[j].loopend % (channel.smplen+1); channel.loopstart = chn->timeRecord[j].loopstart % (channel.smplen+1); if (channel.loopstart >= channel.loopend) channel.flags &= ~3; channel.vol = chn->timeRecord[j].volPan & 0xFFFF; channel.pan = chn->timeRecord[j].volPan >> 16; channel.fixedtimefrac = chn->timeRecord[j].fixedtimefrac; channel.cutoff = ChannelMixer::MP_INVALID_VALUE; channel.resonance = ChannelMixer::MP_INVALID_VALUE; // channel.index = chnIndex; Uncomment this if you like crackly audio // The scopes (which I assume is what this function is for) are currently // using channel 33, to avoid interfering with playback channel.smpadd = (channel.smpadd*fMul) / (!count ? 1 : count); chn = &channel; if (mixerDataCache && channel.smpadd <= 65536) { memset(mixerDataCache, 0, count*2*sizeof(mp_sint32)); channel.rsmpadd = (mp_sint32)((1.0 / channel.smpadd) * 65536.0); // we only need the left channel as no panning is involved channel.finalvoll = (channel.vol*128*256)<<6; channel.finalvolr = 0; channel.rampFromVolStepL = channel.rampFromVolStepR = 0; player->getCurrentResampler()->addChannel(chn, mixerDataCache, count, count); for (mp_sint32 i = 0; i < count; i++) fetcher.fetchSampleData(mixerDataCache[i*2]); } else { pp_int32 vol = chn->vol; mp_sint32 y; FULLMIXER_TEMPLATE(FULLMIXER_8BIT_NORMAL_TEMP, FULLMIXER_16BIT_NORMAL_TEMP, 16, 0); } } else { resort: for (mp_sint32 i = 0; i < count; i++) fetcher.fetchSampleData(0); } } bool PlayerController::hasSampleData(mp_uint32 chnIndex) { if (!player) return false; ChannelMixer* mixer = player; ChannelMixer::TMixerChannel* chn = &mixer->channel[chnIndex]; pp_int32 j = getCurrentBeatIndex(); return ((chn->timeRecord[j].flags & ChannelMixer::MP_SAMPLE_PLAY) && (chn->timeRecord[j].volPan & 0xFFFF)); } MilkyTracker-1.02.00/src/tracker/PlayerController.h000066400000000000000000000143711324432207300221540ustar00rootroot00000000000000/* * tracker/PlayerController.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * PlayerController.h * MilkyTracker * * Created by Peter Barth on Tue Mar 15 2005. * */ #ifndef __PLAYERCONTROLLER_H__ #define __PLAYERCONTROLLER_H__ #include "MilkyPlayCommon.h" #include "TrackerConfig.h" class XModule; struct TXMSample; struct TEnvelope; class PlayerController { public: enum PlayModes { PlayMode_Auto, PlayMode_ProTracker2, PlayMode_ProTracker3, PlayMode_ScreamTracker3, PlayMode_FastTracker2, PlayMode_ImpulseTracker }; enum PlayModeOptions { PlayModeOptionPanning8xx = 1, PlayModeOptionPanningE8x = 2, // Only affects PTK playback mode PlayModeOptionForcePTPitchLimit = 4 }; private: class MasterMixer* mixer; class PlayerSTD* player; class ModuleEditor* moduleEditor; XModule* module; class PlayerCriticalSection* criticalSection; class PlayerStatusTracker* playerStatusTracker; bool patternPlay; bool playRowOnly; mp_sint32 patternIndex; mp_sint32 nextOrderIndexToPlay; mp_sint32 nextPatternIndexToPlay; mp_sint32 lastPosition, lastRow; bool wasPlayingPattern; bool suspended; mp_ubyte panning[TrackerConfig::MAXCHANNELS]; bool muteChannels[TrackerConfig::MAXCHANNELS]; bool recordChannels[TrackerConfig::MAXCHANNELS]; bool firstRecordChannelCall; mp_sint32 currentPlayingChannel; mp_sint32 numPlayerChannels; mp_sint32 numVirtualChannels; mp_sint32 totalPlayerChannels; bool useVirtualChannels; bool multiChannelKeyJazz; bool multiChannelRecord; mp_sint32 mixerDataCacheSize; mp_sint32* mixerDataCache; void assureNotSuspended(); void continuePlaying(bool assureNotSuspended); // no construction outside PlayerController(class MasterMixer* mixer, bool fakeScopes); bool detachDevice(); void reset(); public: ~PlayerController(); void attachModuleEditor(ModuleEditor* moduleEditor); ModuleEditor* getModuleEditor() { return moduleEditor; } PlayerCriticalSection* getCriticalSection() { return criticalSection; } void playSong(mp_sint32 startIndex, mp_sint32 rowPosition, bool* muteChannels); void playPattern(mp_sint32 index, mp_sint32 songPosition, mp_sint32 rowPosition, bool* muteChannels, bool playRowOnly = false); void setCurrentPatternIndex(mp_sint32 index); void stop(bool bResetMainVolume = true); void continuePlaying(); void restartPlaying(); bool isPlaying() const; bool isPlayingRowOnly() const; bool isActive() const; bool isPlayingPattern() const { return patternPlay; } bool isReallyPlayingPattern() const { return patternPlay && !playRowOnly; } bool isPlayingPattern(mp_sint32 index) const; bool isSuspended() const { return suspended; } void setNextOrderToPlay(mp_sint32 orderIndex); mp_sint32 getNextOrderToPlay() const; void setNextPatternToPlay(mp_sint32 patternIndex); mp_sint32 getNextPatternToPlay() const; void pause(); void unpause(); bool isPaused() const; void getSpeed(mp_sint32& BPM, mp_sint32& speed); void setSpeed(mp_sint32 BPM, mp_sint32 speed, bool adjustModuleHeader = true); void readjustSpeed(bool adjustModuleHeader = true); void playSample(const TXMSample& sample, mp_sint32 currentSamplePlayNote, mp_sint32 rangeStart = -1, mp_sint32 rangeEnd = -1); void stopSample(); void stopInstrument(mp_sint32 insIndex); void playNote(mp_ubyte chn, mp_sint32 note, mp_sint32 i, mp_sint32 vol = -1); void suspendPlayer(bool bResetMainVolume = true, bool stopPlaying = true); void resumePlayer(bool continuePlaying); void muteChannel(mp_sint32 c, bool m); bool isChannelMuted(mp_sint32 c); void recordChannel(mp_sint32 c, bool m); bool isChannelRecording(mp_sint32 c); private: void reallocateChannels(mp_sint32 moduleChannels = 32, mp_sint32 virtualChannels = 0); void setUseVirtualChannels(bool bUseVirtualChannels); void setMultiChannelKeyJazz(bool b) { multiChannelKeyJazz = b; } void setMultiChannelRecord(bool b) { multiChannelRecord = b; } public: void resetFirstPlayingChannel(); mp_sint32 getNextPlayingChannel(mp_sint32 currentChannel); void initRecording(); mp_sint32 getNextRecordingChannel(mp_sint32 currentChannel); mp_sint32 getSongMainVolume(); void resetMainVolume(); // in seconds void resetPlayTimeCounter(); mp_int64 getPlayTime(); mp_ubyte getPanning(mp_ubyte chn) { return panning[chn]; } void setPanning(mp_ubyte chn, mp_ubyte pan); const pp_uint8* getPanningTable() { return (const pp_uint8*)&panning; } void getPosition(mp_sint32& pos, mp_sint32& row); void getPosition(mp_sint32& order, mp_sint32& row, mp_sint32& ticker); void setPatternPos(mp_sint32 pos, mp_sint32 row); // change playmode void switchPlayMode(PlayModes playMode, bool exactSwitch = true); PlayModes getPlayMode(); void enablePlayModeOption(PlayModeOptions option, bool b); bool isPlayModeOptionEnabled(PlayModeOptions option); // queries on the mixer mp_sint32 getAllNumPlayingChannels(); mp_sint32 getPlayerNumPlayingChannels(); private: mp_sint32 getCurrentSamplePosition(); mp_sint32 getCurrentBeatIndex(); public: bool isSamplePlaying(const TXMSample& smp, mp_sint32 channel, mp_sint32& pos, mp_sint32& vol, mp_sint32& pan); bool isEnvelopePlaying(const TEnvelope& envelope, mp_sint32 envelopeType, mp_sint32 channel, mp_sint32& pos); bool isNotePlaying(mp_sint32 ins, mp_sint32 channel, mp_sint32& note, bool& muted); class SampleDataFetcher { public: virtual void fetchSampleData(mp_sint32 sample) = 0; }; void grabSampleData(mp_uint32 chnIndex, mp_sint32 count, mp_sint32 fMul, SampleDataFetcher& fetcher); bool hasSampleData(mp_uint32 chnIndex); friend class PlayerMaster; friend class PlayerStatusTracker; }; #endif MilkyTracker-1.02.00/src/tracker/PlayerCriticalSection.h000066400000000000000000000027421324432207300231070ustar00rootroot00000000000000/* * tracker/PlayerCriticalSection.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * PlayerCriticalSection.h * MilkyTracker * * Created by Peter Barth on 12.12.07. * */ #ifndef __PLAYERCRITICALSECTION_H__ #define __PLAYERCRITICALSECTION_H__ #include "PlayerController.h" class PlayerCriticalSection { private: PlayerController& playerController; bool enabled; public: PlayerCriticalSection(PlayerController& playerController) : playerController(playerController), enabled(false) { } void enter(bool stopPlaying = true) { if (enabled) return; playerController.suspendPlayer(false, stopPlaying); enabled = true; } void leave(bool continuePlaying = true) { if (!enabled) return; playerController.resumePlayer(continuePlaying); enabled = false; } }; #endif MilkyTracker-1.02.00/src/tracker/PlayerLogic.cpp000066400000000000000000000156041324432207300214210ustar00rootroot00000000000000/* * tracker/PlayerLogic.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * PlayerLogic.cpp * MilkyTracker * * Created by Peter Barth on 21.12.07. * */ #include "PlayerLogic.h" #include "Tracker.h" #include "PlayerMaster.h" #include "PlayerController.h" #include "ModuleEditor.h" #include "RecorderLogic.h" #include "ListBox.h" #include "Screen.h" #include "PatternEditorControl.h" PlayerLogic::PlayerLogic(Tracker& tracker) : tracker(tracker), liveSwitch(false), stopBackgroundOnPlay(false), tracePlay(false), rowPlay(false) { } void PlayerLogic::setLiveSwitch(bool liveSwitch) { this->liveSwitch = liveSwitch; if (!liveSwitch) tracker.playerMaster->resetQueuedPositions(); } void PlayerLogic::playSong(pp_int32 row/* = 0*/) { tracker.initPlayback(); if (stopBackgroundOnPlay) stopAll(); pp_int32 index = tracker.moduleEditor->getCurrentOrderIndex(); tracker.playerController->playSong(index, row, tracker.muteChannels); } void PlayerLogic::playPattern() { tracker.initPlayback(); if (stopBackgroundOnPlay) stopAll(); tracker.playerController->playPattern(tracker.moduleEditor->getCurrentPatternIndex(), tracker.moduleEditor->getCurrentOrderIndex(), 0, tracker.muteChannels); } void PlayerLogic::playPosition(bool rowOnly/* = false*/) { if (!rowOnly) tracker.initPlayback(); // when the replay engine is already in row playing mode, // we don't need to restart the song, just update the current position to the cursor if (rowOnly && tracker.playerController->isPlaying() && tracker.playerController->isPlayingRowOnly()) { tracker.playerController->setCurrentPatternIndex(tracker.moduleEditor->getCurrentPatternIndex()); tracker.updateSongRow(false); tracker.playerController->readjustSpeed(false); return; } if (stopBackgroundOnPlay) stopAll(); tracker.playerController->playPattern(tracker.moduleEditor->getCurrentPatternIndex(), tracker.moduleEditor->getCurrentOrderIndex(), tracker.getPatternEditorControl()->getCurrentRow(), tracker.muteChannels, rowOnly); } void PlayerLogic::stopPlayer(PlayerController& playerController) { playerController.stop(); playerController.resetPlayTimeCounter(); } void PlayerLogic::stopSong() { tracker.recorderLogic->reset(); stopPlayer(*tracker.playerController); tracker.moduleEditor->cleanUnusedPatterns(); tracker.getPatternEditorControl()->setSongPosition(-1, -1); tracker.screen->paintControl(tracker.getPatternEditorControl()); tracker.updateSpeed(); } void PlayerLogic::stopAll() { for (pp_int32 i = 0; i < tracker.playerMaster->getNumPlayerControllers(); i++) { if (tracker.playerController != tracker.playerMaster->getPlayerController(i)) tracker.playerMaster->getPlayerController(i)->pause(); } //stopPlayer(*tracker.playerMaster->getPlayerController(i)); } void PlayerLogic::storePosition() { // does the current pattern match the selected order list index? backupIndex = tracker.isEditingCurrentOrderlistPattern() ? tracker.getOrderListBoxIndex() : tracker.moduleEditor->getCurrentPatternIndex(); // indicate if we were editing a pattern different from the one in the orderlist backupIndex |= (tracker.isEditingCurrentOrderlistPattern() ? 0x10000 : 0); backupRow = tracker.getPatternEditorControl()->getCurrentRow(); } void PlayerLogic::restorePosition() { pp_int32 index = backupIndex & 0xFFFF; tracker.screen->pauseUpdate(true); if (backupIndex & 0x10000) { tracker.setOrderListIndex(index); } else { tracker.moduleEditor->setCurrentPatternIndex(index); tracker.updatePattern(); } tracker.screen->pauseUpdate(false); tracker.getPatternEditorControl()->setRow(backupRow); tracker.screen->paint(); } void PlayerLogic::playTrace() { if (!tracePlay) { storePosition(); tracePlay = true; if (tracker.isEditingCurrentOrderlistPattern()) playSong(tracker.getPatternEditorControl()->getCurrentRow()); else playPosition(); } } void PlayerLogic::playRow() { rowPlay = true; playPosition(true); tracker.getPatternEditorControl()->advanceRow(true); } void PlayerLogic::ensureSongStopped(bool bResetMainVolume, bool suspend) { if (suspend) { tracker.playerController->suspendPlayer(bResetMainVolume); } else { tracker.playerController->stopSample(); // make sure song is stopped, but don't reset the main volume tracker.playerController->stop(bResetMainVolume); } } void PlayerLogic::ensureSongPlaying(bool continuePlaying) { if (tracker.playerController->isSuspended()) tracker.playerController->resumePlayer(continuePlaying); else tracker.playerController->continuePlaying(); } #define CONTINUEPATTERN \ if (tracker.playerController->isPlayingPattern() && \ !tracker.playerController->isPlayingRowOnly()) \ tracker.playerController->playPattern(tracker.moduleEditor->getCurrentPatternIndex(), \ tracker.moduleEditor->getCurrentOrderIndex(), \ 0, \ tracker.muteChannels); #define CONTINUE \ CONTINUEPATTERN \ else if (tracker.playerController->isPlaying() && \ !tracker.playerController->isPlayingRowOnly() && \ tracker.shouldFollowSong()) \ tracker.playerController->playSong(tracker.moduleEditor->getCurrentOrderIndex(), \ 0, \ tracker.muteChannels); void PlayerLogic::continuePlayingPattern() { if (liveSwitch) { tracker.playerController->setNextPatternToPlay(tracker.moduleEditor->getCurrentPatternIndex()); return; } if (tracker.playerController->isPlayingPattern() && !tracker.playerController->isPlayingRowOnly()) tracker.playerController->playPattern(tracker.moduleEditor->getCurrentPatternIndex(), tracker.moduleEditor->getCurrentOrderIndex(), -1, tracker.muteChannels); } void PlayerLogic::continuePlayingSong() { if (liveSwitch) { tracker.playerController->setNextOrderToPlay(tracker.moduleEditor->getCurrentOrderIndex()); return; } CONTINUE } void PlayerLogic::finishTraceAndRowPlay() { if (tracePlay) { stopSong(); tracePlay = false; restorePosition(); } else if (rowPlay) { rowPlay = false; } } void PlayerLogic::playNote(class PlayerController& playerController, pp_uint8 chn, pp_int32 note, pp_int32 i, pp_int32 vol/* = -1*/) { playerController.playNote(chn, note, i, vol); } MilkyTracker-1.02.00/src/tracker/PlayerLogic.h000066400000000000000000000040651324432207300210650ustar00rootroot00000000000000/* * tracker/PlayerLogic.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * PlayerLogic.h * MilkyTracker * * Created by Peter Barth on 21.12.07. * */ #ifndef __PLAYERLOGIC_H__ #define __PLAYERLOGIC_H__ #include "BasicTypes.h" class PlayerLogic { private: class Tracker& tracker; bool liveSwitch; bool stopBackgroundOnPlay; bool tracePlay; pp_int32 backupRow, backupIndex; bool rowPlay; static void stopPlayer(class PlayerController& playerController); public: PlayerLogic(Tracker& tracker); void setLiveSwitch(bool liveSwitch); bool getLiveSwitch() const { return liveSwitch; } void setStopBackgroundOnPlay(bool stopBackgroundOnPlay) { this->stopBackgroundOnPlay = stopBackgroundOnPlay; } bool getStopBackgroundOnPlay() const { return stopBackgroundOnPlay; } void playSong(pp_int32 row = 0); void playPattern(); void playPosition(bool rowOnly = false); void stopSong(); void stopAll(); void ensureSongStopped(bool bResetMainVolume, bool suspend); void ensureSongPlaying(bool continuePlaying); void continuePlayingPattern(); void continuePlayingSong(); void storePosition(); void restorePosition(); void playTrace(); void playRow(); void finishTraceAndRowPlay(); static void playNote(class PlayerController& playerController, pp_uint8 chn, pp_int32 note, pp_int32 i, pp_int32 vol = -1); friend class Tracker; }; #endif MilkyTracker-1.02.00/src/tracker/PlayerMaster.cpp000066400000000000000000000265251324432207300216230ustar00rootroot00000000000000/* * tracker/PlayerMaster.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * PlayerMaster.cpp * MilkyTracker * * Created by Peter Barth on 18.12.07. * */ #include "PlayerMaster.h" #include "MasterMixer.h" #include "SimpleVector.h" #include "PlayerController.h" #include "PlayerCriticalSection.h" #include "AudioDriverManager.h" #include "PlayerSTD.h" #include "ResamplerHelper.h" class MasterMixerNotificationListener : public MasterMixer::MasterMixerNotificationListener { private: class PlayerMaster& playerMaster; public: MasterMixerNotificationListener(PlayerMaster& playerMaster) : playerMaster(playerMaster) { } virtual void masterMixerNotification(MasterMixer::MasterMixerNotifications notification) { playerMaster.adjustSettings(); } }; void PlayerMaster::adjustSettings() { pp_int32 bufferSize = mixer->getBufferSize(); pp_int32 sampleRate = mixer->getSampleRate(); for (pp_int32 i = 0; i < playerControllers->size(); i++) { PlayerSTD* player = playerControllers->get(i)->player; player->setBufferSize(bufferSize); player->adjustFrequency(sampleRate); if (!player->isPlaying()) player->resumePlaying(false); } } void PlayerMaster::applySettingsToPlayerController(PlayerController& playerController, const TMixerSettings& settings) { bool wasPlaying = playerController.player->isPlaying(); PlayerSTD* player = playerController.player; if (settings.mixerVolume >= 0) { player->setMasterVolume(settings.mixerVolume); } mp_sint32 resamplerType = player->getResamplerType(); mp_sint32 oldResamplerType = resamplerType; if (settings.ramping >= 0) { // ramping flag is stored in the LSB of the resampler type if (settings.ramping != 0) resamplerType |= 1; else resamplerType &= ~1; } // remember if ramping needs to be set bool ramping = (resamplerType & 1) != 0; // now check if the resampler has changed at all if (settings.resampler >= 0) { // we have a class that translates the resampler index (which maps to a // human readable name of the resampler) back to an enum that can be // set on the ChannelMixer class ResamplerHelper resamplerHelper; resamplerType = resamplerHelper.getResamplerType(settings.resampler, ramping); } // now let's see if something has changed at all if (resamplerType != oldResamplerType) { playerController.getCriticalSection()->enter(); player->setResamplerType((ChannelMixer::ResamplerTypes)resamplerType); playerController.getCriticalSection()->leave(); } if (!player->isPlaying() && wasPlaying) player->resumePlaying(false); } const char* PlayerMaster::getPreferredAudioDriverID() { AudioDriverManager audioDriverManager; return audioDriverManager.getPreferredAudioDriver()->getDriverID(); } pp_uint32 PlayerMaster::getPreferredSampleRate() { AudioDriverManager audioDriverManager; return audioDriverManager.getPreferredAudioDriverSampleRate(); } pp_uint32 PlayerMaster::getPreferredBufferSize() { AudioDriverManager audioDriverManager; return audioDriverManager.getPreferredAudioDriverBufferSize(); } pp_int32 PlayerMaster::roundToNearestPowerOfTwo(pp_int32 v) { for (mp_uint32 i = 0; i < 32; i++) { if ((unsigned)(1 << i) >= (unsigned)v) return (1 << i); } return v; } float PlayerMaster::convertBufferSizeToMillis(pp_uint32 sampleRate, pp_uint32 bufferSize) { return ((float)(bufferSize) / (float)sampleRate) * 1000.0f; //return (1.0f / (44100.0f / (MP_BEATLENGTH*bufferSize)))*1000.0f; } PlayerMaster::PlayerMaster(pp_uint32 numDevices/* = DefaultMaxDevices*/) : listener(NULL), oldBufferSize(getPreferredBufferSize()), forcePowerOfTwoBufferSize(false), multiChannelKeyJazz(true), multiChannelRecord(true) { listener = new MasterMixerNotificationListener(*this); mixer = new MasterMixer(44100, getPreferredBufferSize(), numDevices); mixer->setMasterMixerNotificationListener(listener); mixer->setSampleShift(1); playerControllers = new PPSimpleVector(); for (pp_uint32 i = 0; i < sizeof(panning) / sizeof(pp_uint8); i++) { switch (i & 3) { case 0: panning[i] = 0; break; case 1: panning[i] = 255; break; case 2: panning[i] = 255; break; case 3: panning[i] = 0; break; } } } PlayerMaster::~PlayerMaster() { delete playerControllers; delete mixer; delete listener; } PlayerController* PlayerMaster::createPlayerController(bool fakeScopes) { if (playerControllers->size() >= DefaultMaxDevices) return NULL; PlayerController* playerController = new PlayerController(mixer, fakeScopes); applySettingsToPlayerController(*playerController, currentSettings); playerController->setMultiChannelKeyJazz(this->multiChannelKeyJazz); playerController->setMultiChannelRecord(this->multiChannelRecord); if (currentSettings.numVirtualChannels >= 0) { if (currentSettings.numVirtualChannels) { playerController->setUseVirtualChannels(true); playerController->reallocateChannels(32, currentSettings.numVirtualChannels); } else { playerController->setUseVirtualChannels(false); playerController->reallocateChannels(32, 0); } } playerControllers->add(playerController); return playerController; } bool PlayerMaster::destroyPlayerController(PlayerController* playerController) { for (pp_int32 i = 0; i < playerControllers->size(); i++) { if (playerControllers->get(i) == playerController) { playerControllers->remove(i); return true; } } return false; } pp_int32 PlayerMaster::getNumPlayerControllers() const { return playerControllers->size(); } PlayerController* PlayerMaster::getPlayerController(pp_int32 index) { if (index >= 0 && index < playerControllers->size()) return playerControllers->get(index); return NULL; } bool PlayerMaster::applyNewMixerSettings(const TMixerSettings& settings, bool allowMixerRestart) { bool res = true; bool restart = false; if (settings.audioDriverName) { if (getCurrentDriverName() == NULL || strcmp(getCurrentDriverName(), settings.audioDriverName) != 0) { currentSettings.setAudioDriverName(settings.audioDriverName); mixer->setCurrentAudioDriverByName(settings.audioDriverName); restart = true; } } if (settings.mixerShift >= 0) { currentSettings.mixerShift = settings.mixerShift; mixer->setSampleShift(settings.mixerShift); } if (settings.powerOfTwoCompensation >= 0) { currentSettings.powerOfTwoCompensation = settings.powerOfTwoCompensation; forcePowerOfTwoBufferSize = settings.powerOfTwoCompensation != 0; if (oldBufferSize) { mixer->setBufferSize(forcePowerOfTwoBufferSize ? roundToNearestPowerOfTwo(oldBufferSize) : oldBufferSize); restart = true; } } if (settings.mixFreq >= 0) { currentSettings.mixFreq = settings.mixFreq; mixer->setSampleRate(settings.mixFreq); restart = true; } // this has to take place AFTER setting the frequency if (settings.bufferSize >= 0) { currentSettings.bufferSize = settings.bufferSize; oldBufferSize = settings.bufferSize; mixer->setBufferSize(forcePowerOfTwoBufferSize ? roundToNearestPowerOfTwo(oldBufferSize) : oldBufferSize); restart = true; } if (settings.mixerVolume >= 0) currentSettings.mixerVolume = settings.mixerVolume; if (settings.ramping >= 0) currentSettings.ramping = settings.ramping; if (settings.resampler >= 0) currentSettings.resampler = settings.resampler; // take over settings like sample rate and buffer size // those are retrieved from the master mixer and set for all players // accordingly adjustSettings(); // adjust settings which are not dependent by the master mixer for (pp_int32 i = 0; i < playerControllers->size(); i++) applySettingsToPlayerController(*playerControllers->get(i), currentSettings); if (settings.numPlayerChannels != 0 || settings.numVirtualChannels >= 0) { if (settings.numPlayerChannels != 0) currentSettings.numPlayerChannels = settings.numPlayerChannels; if (settings.numVirtualChannels > 0) currentSettings.numVirtualChannels = settings.numVirtualChannels; if (res) { if (settings.numVirtualChannels) { setUseVirtualChannels(true); reallocateChannels(settings.numPlayerChannels, settings.numVirtualChannels); } else { setUseVirtualChannels(false); reallocateChannels(settings.numPlayerChannels, 0); } } } if (allowMixerRestart && restart && !mixer->isPlaying()) { if (mixer->start() < 0) res = false; } return res; } const char* PlayerMaster::getFirstDriverName() const { return mixer->getAudioDriverManager()->getFirstDriverName(); } const char* PlayerMaster::getNextDriverName() const { return mixer->getAudioDriverManager()->getNextDriverName(); } const char* PlayerMaster::getCurrentDriverName() const { return mixer->getCurrentAudioDriverName(); } void PlayerMaster::reallocateChannels(mp_sint32 moduleChannels/* = 32*/, mp_sint32 virtualChannels/* = 0*/) { TrackerConfig::numPlayerChannels = moduleChannels; TrackerConfig::numVirtualChannels = virtualChannels; TrackerConfig::totalPlayerChannels = TrackerConfig::numPlayerChannels + TrackerConfig::numVirtualChannels + 2; for (pp_int32 i = 0; i < playerControllers->size(); i++) { playerControllers->get(i)->reallocateChannels(moduleChannels, virtualChannels); } } void PlayerMaster::setUseVirtualChannels(bool useVirtualChannels) { TrackerConfig::useVirtualChannels = useVirtualChannels; for (pp_int32 i = 0; i < playerControllers->size(); i++) { playerControllers->get(i)->setUseVirtualChannels(useVirtualChannels); } } void PlayerMaster::setMultiChannelKeyJazz(bool b) { multiChannelKeyJazz = b; for (pp_int32 i = 0; i < playerControllers->size(); i++) { playerControllers->get(i)->setMultiChannelKeyJazz(b); } } void PlayerMaster::setMultiChannelRecord(bool b) { multiChannelRecord = b; for (pp_int32 i = 0; i < playerControllers->size(); i++) { playerControllers->get(i)->setMultiChannelRecord(b); } } bool PlayerMaster::start() { return mixer->start() == 0; } bool PlayerMaster::stop(bool detachPlayers) { // removes playing devices from master mixer before stopping // the master mixer audio device if (detachPlayers) { for (pp_int32 i = 0; i < playerControllers->size(); i++) playerControllers->get(i)->detachDevice(); } return mixer->stop() == 0; } void PlayerMaster::getCurrentSamplePeak(pp_int32& left, pp_int32& right) { if (!mixer->isActive()) { left = right = 0; return; } mp_sint32 pos = mixer->getAudioDriver()->getBufferPos(); left = mixer->getCurrentSamplePeak(pos, 0); right = mixer->getCurrentSamplePeak(pos, 1); } void PlayerMaster::resetQueuedPositions() { for (pp_int32 i = 0; i < playerControllers->size(); i++) { playerControllers->get(i)->setNextOrderToPlay(-1); playerControllers->get(i)->setNextPatternToPlay(-1); } } MilkyTracker-1.02.00/src/tracker/PlayerMaster.h000066400000000000000000000117061324432207300212630ustar00rootroot00000000000000/* * tracker/PlayerMaster.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * PlayerMaster.h * MilkyTracker * * Created by Peter Barth on 18.12.07. * */ #ifndef __PLAYERMASTER_H__ #define __PLAYERMASTER_H__ #include "BasicTypes.h" #include "TrackerConfig.h" struct TMixerSettings { // Negative values means ignore pp_int32 mixFreq; // Negative values means ignore pp_int32 bufferSize; // Negative values means ignore pp_int32 mixerVolume; // Negative values means ignore pp_int32 mixerShift; // 0 = false, 1 = true, negative values means ignore pp_int32 powerOfTwoCompensation; // 0 = none, 1 = linear, 2 = lagrange, negative values means ignore pp_int32 resampler; // 0 = false, 1 = true, negative values means ignore pp_int32 ramping; // NULL means ignore char* audioDriverName; // default number of player channels pp_uint32 numPlayerChannels; // 0 means disable virtual channels, negative value means ignore pp_int32 numVirtualChannels; TMixerSettings() : mixFreq(-1), bufferSize(-1), mixerVolume(-1), mixerShift(-1), powerOfTwoCompensation(-1), resampler(-1), ramping(-1), audioDriverName(NULL), numPlayerChannels(TrackerConfig::numPlayerChannels), numVirtualChannels(-1) { } ~TMixerSettings() { delete[] audioDriverName; } void setAudioDriverName(const char* name) { delete[] audioDriverName; if (name) { audioDriverName = new char[strlen(name)+1]; strcpy(audioDriverName, name); } else audioDriverName = NULL; } bool operator==(const TMixerSettings& source) { if (mixFreq != source.mixFreq) return false; if (bufferSize != source.bufferSize) return false; if (mixerVolume != source.mixerVolume) return false; if (mixerShift != source.mixerShift) return false; if (powerOfTwoCompensation != source.powerOfTwoCompensation) return false; if (resampler != source.resampler) return false; if (ramping != source.ramping) return false; if (numPlayerChannels != source.numPlayerChannels) { return false; } if (numVirtualChannels != source.numVirtualChannels) return false; return strcmp(audioDriverName, source.audioDriverName) == 0; } bool operator!=(const TMixerSettings& source) { return !(*this == source); } }; template class PPSimpleVector; class PlayerController; class PlayerMaster { private: enum { DefaultMaxDevices = 32, }; class MasterMixer* mixer; class MasterMixerNotificationListener* listener; PPSimpleVector* playerControllers; TMixerSettings currentSettings; pp_uint32 oldBufferSize; bool forcePowerOfTwoBufferSize; pp_uint8 panning[TrackerConfig::MAXCHANNELS]; bool multiChannelKeyJazz; bool multiChannelRecord; void adjustSettings(); void applySettingsToPlayerController(PlayerController& playerController, const TMixerSettings& settings); public: PlayerMaster(pp_uint32 numDevices = DefaultMaxDevices); ~PlayerMaster(); static const char* getPreferredAudioDriverID(); static pp_uint32 getPreferredSampleRate(); static pp_uint32 getPreferredBufferSize(); static pp_int32 roundToNearestPowerOfTwo(pp_int32 v); static float convertBufferSizeToMillis(pp_uint32 sampleRate, pp_uint32 bufferSize); PlayerController* createPlayerController(bool fakeScopes); bool destroyPlayerController(PlayerController* playerController); pp_int32 getNumPlayerControllers() const; PlayerController* getPlayerController(pp_int32 index); // Delegating some player functionality bool applyNewMixerSettings(const TMixerSettings& settings, bool allowMixerRestart); // Delegating some audio driver enumeration code const char* getFirstDriverName() const; const char* getNextDriverName() const; const char* getCurrentDriverName() const; bool setCurrentDriverByName(const char* name); // this will be delegated to all playercontrollers void reallocateChannels(pp_int32 moduleChannels = 32, pp_int32 virtualChannels = 0); void setUseVirtualChannels(bool useVirtualChannels); // see above void setMultiChannelKeyJazz(bool b); void setMultiChannelRecord(bool b); bool start(); bool stop(bool detachPlayers); void getCurrentSamplePeak(pp_int32& left, pp_int32& right); void resetQueuedPositions(); friend class MasterMixerNotificationListener; }; #endif MilkyTracker-1.02.00/src/tracker/RecPosProvider.cpp000066400000000000000000000042601324432207300221110ustar00rootroot00000000000000/* * tracker/RecPosProvider.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "RecPosProvider.h" #include "PlayerController.h" #include "ModuleEditor.h" void RecPosProvider::getPosition(pp_int32& order, pp_int32& row) { playerController.getPosition((mp_sint32&)order, (mp_sint32&)row); if (playerController.isPlayingPattern()) order = -1; } void RecPosProvider::getPosition(pp_int32& order, pp_int32& row, pp_int32& ticker) { playerController.getPosition((mp_sint32&)order, (mp_sint32&)row, (mp_sint32&)ticker); if (playerController.isPlayingPattern()) order = -1; if (roundToClosestRow) { mp_sint32 speed, bpm; playerController.getSpeed(bpm, speed); // snap position to the closest row if (ticker >= speed / 2) { ticker = 0; ModuleEditor* moduleEditor = playerController.getModuleEditor(); row++; // playing pattern only? if (order != -1) { // get pattern index of current order pp_int32 patIndex = moduleEditor->getOrderPosition(order); // row exceeded if (row >= moduleEditor->getPattern(patIndex)->rows) { // wrap row = 0; // increase order order++; // order exceeded? if (order >= moduleEditor->getNumOrders()) // wrap song order = 0; } } else { pp_int32 patIndex = moduleEditor->getCurrentPatternIndex(); if (row >= moduleEditor->getPattern(patIndex)->rows) // row exceeded if (row >= moduleEditor->getPattern(patIndex)->rows) // wrap row = 0; } } } } MilkyTracker-1.02.00/src/tracker/RecPosProvider.h000066400000000000000000000022201324432207300215500ustar00rootroot00000000000000/* * tracker/RecPosProvider.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "BasicTypes.h" class RecPosProvider { private: class PlayerController& playerController; bool roundToClosestRow; public: RecPosProvider(PlayerController& playerController) : playerController(playerController), roundToClosestRow(false) { } void getPosition(pp_int32& order, pp_int32& row); void getPosition(pp_int32& order, pp_int32& row, pp_int32& ticker); }; MilkyTracker-1.02.00/src/tracker/RecorderLogic.cpp000066400000000000000000000223721324432207300217320ustar00rootroot00000000000000/* * tracker/PlayerLogic.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * RecorderLogic.cpp * MilkyTracker * * Created by Peter Barth on 09.04.08. * */ #include "RecorderLogic.h" #include "Tracker.h" #include "TrackerConfig.h" #include "PlayerController.h" #include "PlayerLogic.h" #include "PatternEditorControl.h" #include "RecPosProvider.h" #include "ModuleEditor.h" #include "Screen.h" void RecorderLogic::reset() { memset(keys, 0, sizeof(TKeyInfo) * TrackerConfig::MAXNOTES); for (pp_int32 i = 0; i < TrackerConfig::MAXNOTES; i++) keys[i].channel = -1; } RecorderLogic::RecorderLogic(Tracker& tracker) : tracker(tracker), recordMode(false), recordKeyOff(true), recordNoteDelay(false) { keys = new TKeyInfo[TrackerConfig::MAXNOTES]; reset(); keyVolume = -1; } RecorderLogic::~RecorderLogic() { delete[] keys; } void RecorderLogic::sendNoteDownToPatternEditor(PPEvent* event, pp_int32 note, PatternEditorControl* patternEditorControl) { PlayerController* playerController = tracker.playerController; PatternEditor* patternEditor = patternEditorControl->getPatternEditor(); pp_int32 i; if (note >= 1 && note != PatternTools::getNoteOffNote() /* Key Off */) { // get current channel from pattern editor (= channel to play) pp_int32 chn = patternEditorControl->getCurrentChannel(); // if this is a valid note pp_int32 ins = tracker.getInstrumentToPlay(note, playerController); if (ins < 0) { if (event) event->cancel(); return; } bool record = (tracker.editMode == EditModeMilkyTracker ? tracker.screen->hasFocus(patternEditorControl) : recordMode); bool releasePlay = false; bool isLiveRecording = playerController->isPlaying() && !playerController->isPlayingRowOnly() && record && tracker.shouldFollowSong(); // when we're not live recording, we need to decide if we're editing if (!isLiveRecording) { releasePlay = !record; } // if we're live recording this is a "release" play, it means that the // note will not be repeated on a key being pressed, it will stay on // 'till the key is released, but only when the current selected column // is the note column else { releasePlay = patternEditorControl->getCursorPosInner() == 0; } if (releasePlay) { // Somewhere editing of text in an edit field takes place, // in that case we don't want to be playing anything if (tracker.isActiveEditing()) return; // take a look if this key is already pressed bool isPressed = false; for (i = 0; i < TrackerConfig::MAXNOTES; i++) { if (keys[i].note == note) { isPressed = true; break; } } // this key is already pressed, we won't play that note again if (isPressed) { // If we're live recording, this event should not be routed anywhere else // it terminates HERE! (event shall not be routed to the pattern editor) if (isLiveRecording && event) event->cancel(); return; } // if we're not recording, cycle through the channels // use jam-channels for playing if requested if (!isLiveRecording) { chn = playerController->getNextPlayingChannel(chn); } else { // Get next recording channel: The base for selection of the // next channel is the current channel within the pattern editor chn = playerController->getNextRecordingChannel(chn); } } else { // The cursor in the pattern editor must be located in the note column, // if not abort if (patternEditorControl->getCursorPosInner() != 0) { //event->cancel(); return; } else { pp_int32 newIns = patternEditor->getCurrentActiveInstrument(); if (newIns >= 0) ins = newIns; } } RecPosProvider recPosProvider(*playerController); // key is not pressed, play note and remember key + channel + position within module pp_int32 pos = -1, row = 0, ticker = 0; // if we are recording we are doing a query on the current position if (isLiveRecording) recPosProvider.getPosition(pos, row, ticker); else { pos = row = -1; } if (chn != -1) { for (i = 0; i < TrackerConfig::MAXNOTES; i++) { // key not pressed or note already playing on this channel if (!keys[i].note || (keys[i].channel == chn)) { keys[i].note = note; keys[i].ins = ins; keys[i].channel = chn; keys[i].pos = pos; keys[i].row = row; keys[i].playerController = playerController; break; } // if there is already a note playing on this channel // we "cut" the note //else if (keys[i].channel == chn) //{ // keys[i].note = keys[i].channel = 0; //} } // play it tracker.playerLogic->playNote(*playerController, (mp_ubyte)chn, note, (mp_ubyte)ins, keyVolume); // if we're recording send the note to the pattern editor if (isLiveRecording) { tracker.setChanged(); // update cursor to song position in case we're blocking refresh timer tracker.updateSongPosition(pos, row, true); pp_int32 posInner = patternEditorControl->getCursorPosInner(); patternEditorControl->setChannel(chn, posInner); patternEditorControl->setRow(row); // add delay note if requested if (ticker && recordNoteDelay) patternEditor->writeDirectEffect(1, 0x3D, ticker > 0xf ? 0xf : ticker, chn, row, pos); if (keyVolume != -1 && keyVolume >= 0 && keyVolume <= 255) patternEditor->writeDirectEffect(0, 0xC, (pp_uint8)keyVolume, chn, row, pos); patternEditor->writeDirectNote(note, chn, row, pos); tracker.screen->paintControl(patternEditorControl); // update cursor to song position in case we're blocking refresh timer //updateSongPosition(-1, -1, true); if (event) event->cancel(); } } else if (event) { event->cancel(); } } } void RecorderLogic::sendNoteUpToPatternEditor(PPEvent* event, pp_int32 note, PatternEditorControl* patternEditorControl) { // if this is a valid note look if we're playing something and release note by sending key-off if (note >= 1 && note <= ModuleEditor::MAX_NOTE) { PatternEditor* patternEditor = patternEditorControl->getPatternEditor(); pp_int32 pos = -1, row = 0, ticker = 0; bool record = (tracker.editMode == EditModeMilkyTracker ? tracker.screen->hasFocus(patternEditorControl) : recordMode); for (mp_sint32 i = 0; i < TrackerConfig::MAXNOTES; i++) { // found a playing channel if (keys[i].note == note) { PlayerController* playerController = tracker.playerController; if (keys[i].playerController) playerController = keys[i].playerController; bool isLiveRecording = playerController->isPlaying() && !playerController->isPlayingRowOnly() && record && tracker.shouldFollowSong(); bool recPat = false; RecPosProvider recPosProvider(*playerController); if (isLiveRecording) { recPosProvider.getPosition(pos, row, ticker); if (pos == -1) recPat = true; } else { pos = row = -1; } // send key off tracker.playerLogic->playNote(*playerController, (mp_ubyte)keys[i].channel, PatternTools::getNoteOffNote(), keys[i].ins); if (isLiveRecording && recordKeyOff) { tracker.setChanged(); // update cursor to song position in case we're blocking refresh timer tracker.updateSongPosition(pos, row, true); patternEditorControl->setRow(row); // if we're in the same slot => send key off by inserting key off effect if (keys[i].row == row && keys[i].pos == pos) { //mp_sint32 bpm, speed; //playerController->getSpeed(bpm, speed); patternEditor->writeDirectEffect(1, 0x14, ticker ? ticker : 1, keys[i].channel, row, pos); } // else write key off else { if (ticker && recordNoteDelay) patternEditor->writeDirectEffect(1, 0x14, ticker, keys[i].channel, row, pos); else patternEditor->writeDirectNote(PatternTools::getNoteOffNote(), keys[i].channel, row, pos); } tracker.screen->paintControl(patternEditorControl); // update cursor to song position in case we're blocking refresh timer //updateSongPosition(-1, -1, true); } keys[i].note = 0; keys[i].channel = -1; } } } } void RecorderLogic::init() { if (recordMode) tracker.playerController->initRecording(); } void RecorderLogic::initToggleEdit() { if (recordMode && (tracker.playerController->isPlaying())) tracker.playerController->initRecording(); } MilkyTracker-1.02.00/src/tracker/RecorderLogic.h000066400000000000000000000040771324432207300214010ustar00rootroot00000000000000/* * tracker/PlayerLogic.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * RecorderLogic.h * MilkyTracker * * Created by Peter Barth on 09.04.08. * */ #ifndef __RECORDERLOGIC_H__ #define __RECORDERLOGIC_H__ #include "BasicTypes.h" class PPEvent; class PatternEditorControl; class RecorderLogic { private: class Tracker& tracker; struct TKeyInfo { pp_int32 note, ins; pp_int32 channel, pos, row; class PlayerController* playerController; }; TKeyInfo* keys; pp_int32 keyVolume; bool recordMode; bool recordKeyOff; bool recordNoteDelay; public: RecorderLogic(Tracker& tracker); ~RecorderLogic(); void setKeyVolume(pp_int32 keyVolume) { this->keyVolume = keyVolume; } void setRecordMode(bool recordMode) { this->recordMode = recordMode; } bool getRecordMode() const { return recordMode; } void setRecordKeyOff(bool recordKeyOff) { this->recordKeyOff = recordKeyOff; } bool getRecordKeyOff() const { return recordKeyOff; } void setRecordNoteDelay(bool recordNoteDelay) { this->recordNoteDelay = recordNoteDelay; } bool setRecordNoteDelay() const { return recordNoteDelay; } void reset(); void sendNoteDownToPatternEditor(PPEvent* event, pp_int32 note, PatternEditorControl* patternEditorControl); void sendNoteUpToPatternEditor(PPEvent* event, pp_int32 note, PatternEditorControl* patternEditorControl); void init(); void initToggleEdit(); }; #endif MilkyTracker-1.02.00/src/tracker/ResamplerHelper.cpp000066400000000000000000000037101324432207300222740ustar00rootroot00000000000000/* * tracker/ResamplerHelper.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * ResamplerHelper.cpp * milkytracker * * Created by Peter Barth on 15.01.08. * */ #include "ResamplerHelper.h" const char* ResamplerHelper::resamplerNames[] = { "No interpolation", "Linear interpolation", "Cubic Lagrange", "Cubic Spline", "Fast Sinc", "Precise Sinc", "Amiga 500", "Amiga 500 LED", "Amiga 1200", "Amiga 1200 LED" }; const char* ResamplerHelper::resamplerNamesShort[] = { "None", "Linear", "Lagrange", "Spline", "Fast Sinc", "Precise Sinc", "A500", "A500LED", "A1200", "A1200LED" }; pp_uint32 ResamplerHelper::getNumResamplers() { return sizeof(resamplerNames) / sizeof(const char*); } const char* ResamplerHelper::getResamplerName(pp_uint32 index, bool shortName/* = false*/) { if (index >= getNumResamplers()) return NULL; return shortName ? resamplerNamesShort[index] : resamplerNames[index]; } ChannelMixer::ResamplerBase* ResamplerHelper::createResamplerFromIndex(pp_uint32 index) { return ResamplerFactory::createResampler((MixerSettings::ResamplerTypes)(index << 1)); } ChannelMixer::ResamplerTypes ResamplerHelper::getResamplerType(pp_uint32 index, bool ramping) { return (ChannelMixer::ResamplerTypes)((index << 1) | (ramping ? 1 : 0)); } MilkyTracker-1.02.00/src/tracker/ResamplerHelper.h000066400000000000000000000025451324432207300217460ustar00rootroot00000000000000/* * tracker/ResamplerHelper.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * ResamplerHelper.h * milkytracker * * Created by Peter Barth on 15.01.08. * */ #ifndef __RESAMPLERHELPER_H__ #define __RESAMPLERHELPER_H__ #include "BasicTypes.h" #include "ResamplerFactory.h" class ResamplerHelper { private: static const char* resamplerNames[]; static const char* resamplerNamesShort[]; public: pp_uint32 getNumResamplers(); const char* getResamplerName(pp_uint32 index, bool shortName = false); ChannelMixer::ResamplerBase* createResamplerFromIndex(pp_uint32 index); ChannelMixer::ResamplerTypes getResamplerType(pp_uint32 index, bool ramping); }; #endif MilkyTracker-1.02.00/src/tracker/SIPButtons.h000066400000000000000000000060761324432207300206710ustar00rootroot00000000000000/* * tracker/SIPButtons.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #ifndef __SIPBUTTONS_H__ #define __SIPBUTTONS_H__ // ---------------------------- First row of buttons ---------------------------- static const char keyLine_0_lowerCase[] = {'\x60','1','2','3','4','5','6','7','8','9','0','-','='}; static const char keyLine_0_upperCase[] = {'\x60','!','@','#','$','%','^','&','*','(',')','_','+'}; static const pp_int32 keyLineIDs_0[sizeof(keyLine_0_lowerCase)] = {INPUT_BUTTON_WTF, INPUT_BUTTON_1, INPUT_BUTTON_2, INPUT_BUTTON_3, INPUT_BUTTON_4, INPUT_BUTTON_5, INPUT_BUTTON_6, INPUT_BUTTON_7, INPUT_BUTTON_8, INPUT_BUTTON_9, INPUT_BUTTON_0, INPUT_BUTTON_MINUS, INPUT_BUTTON_PLUS}; // ---------------------------- Second row of buttons ---------------------------- static const char keyLine_1_lowerCase[] = {'q','w','e','r','t','y','u','i','o','p','[',']'}; static const char keyLine_1_upperCase[] = {'Q','W','E','R','T','Y','U','I','O','P','{','}'}; static const pp_int32 keyLineIDs_1[sizeof(keyLine_1_lowerCase)] = {INPUT_BUTTON_Q, INPUT_BUTTON_W, INPUT_BUTTON_E, INPUT_BUTTON_R, INPUT_BUTTON_T, INPUT_BUTTON_Y, INPUT_BUTTON_U, INPUT_BUTTON_I, INPUT_BUTTON_O, INPUT_BUTTON_P, INPUT_BUTTON_BRACKETOPEN, INPUT_BUTTON_BRACKETCLOSE}; static const pp_int32 keyLineSizes_1[sizeof(keyLine_1_lowerCase)] = {11,11,11,11,11,11,12,11,11,11,12,12}; // ---------------------------- Third row of buttons ---------------------------- static const char keyLine_2_lowerCase[] = {'a','s','d','f','g','h','j','k','l',';','\'','\\'}; static const char keyLine_2_upperCase[] = {'A','S','D','F','G','H','J','K','L',':','\"','|'}; static const pp_int32 keyLineIDs_2[sizeof(keyLine_2_lowerCase)] = {INPUT_BUTTON_A, INPUT_BUTTON_S, INPUT_BUTTON_D, INPUT_BUTTON_F, INPUT_BUTTON_G, INPUT_BUTTON_H, INPUT_BUTTON_J, INPUT_BUTTON_K, INPUT_BUTTON_L, INPUT_BUTTON_SEMICOLON, INPUT_BUTTON_TICK, INPUT_BUTTON_BACKSLASH}; // ---------------------------- Fourth row of buttons ---------------------------- static const char keyLine_3_lowerCase[] = {'~','z','x','c','v','b','n','m',',','.','/'}; static const char keyLine_3_upperCase[] = {'|','Z','X','C','V','B','N','M','<','>','?'}; static const pp_int32 keyLineIDs_3[sizeof(keyLine_3_lowerCase)] = {INPUT_BUTTON_TILDE, INPUT_BUTTON_Z, INPUT_BUTTON_X, INPUT_BUTTON_C, INPUT_BUTTON_V, INPUT_BUTTON_B, INPUT_BUTTON_N, INPUT_BUTTON_M, INPUT_BUTTON_COMMA, INPUT_BUTTON_PERIOD, INPUT_BUTTON_SLASH}; #endif MilkyTracker-1.02.00/src/tracker/SampleEditor.cpp000066400000000000000000001604021324432207300215740ustar00rootroot00000000000000/* * tracker/SampleEditor.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * SampleEditor.cpp * MilkyTracker * * Created by Peter Barth on 22.11.07. * */ #include "SampleEditor.h" #include "SimpleVector.h" #include "XModule.h" #include "VRand.h" #include "Equalizer.h" #include "EQConstants.h" #include "FilterParameters.h" #include "SampleEditorResampler.h" SampleEditor::ClipBoard::ClipBoard() : buffer(NULL) { } SampleEditor::ClipBoard::~ClipBoard() { delete[] buffer; } void SampleEditor::ClipBoard::makeCopy(TXMSample& sample, XModule& module, pp_int32 selectionStart, pp_int32 selectionEnd, bool cut/* = false*/) { if (selectionEnd < 0) return; if (selectionStart < 0) selectionStart = 0; if (selectionEnd > (signed)sample.samplen) selectionEnd = sample.samplen; if (selectionEnd < selectionStart) { pp_int32 s = selectionEnd; selectionEnd = selectionStart; selectionStart = s; } this->selectionStart = selectionStart; this->selectionEnd = selectionEnd; this->selectionWidth = abs(selectionEnd - selectionStart); if (selectionWidth == 0) return; if (buffer) delete[] buffer; numBits = (sample.type & 16) ? 16 : 8; // 16 bit sample if (numBits == 16) { buffer = (mp_sbyte*)(new mp_sword[selectionWidth+1]); mp_sword* dstptr = (mp_sword*)buffer; for (pp_int32 i = selectionStart; i <= selectionEnd; i++) *dstptr++ = sample.getSampleValue(i); } // 8 bit sample else if (numBits == 8) { buffer = new mp_sbyte[selectionWidth+1]; mp_sbyte* dstptr = (mp_sbyte*)buffer; for (pp_int32 i = selectionStart; i <= selectionEnd; i++) *dstptr++ = sample.getSampleValue(i); } else ASSERT(false); } void SampleEditor::ClipBoard::paste(TXMSample& sample, XModule& module, pp_int32 pos) { if (pos < 0) pos = 0; if (sample.sample == NULL) { sample.samplen = 0; pos = 0; } pp_int32 newSampleSize = sample.samplen + selectionWidth; pp_int32 i; // 16 bit sample if (sample.type & 16) { mp_sword* newBuffer = (mp_sword*)module.allocSampleMem(newSampleSize*2); // copy stuff before insert start point for (i = 0; i < pos; i++) sample.setSampleValue((mp_ubyte*)newBuffer, i, sample.getSampleValue(i)); // copy selection to start point for (i = 0; i < selectionWidth; i++) sample.setSampleValue((mp_ubyte*)newBuffer, i+pos, getSampleWord(i)); // copy stuff after insert start point for (i = 0; i < ((signed)sample.samplen - pos); i++) sample.setSampleValue((mp_ubyte*)newBuffer, i+pos+selectionWidth, sample.getSampleValue(i+pos)); if (sample.sample) module.freeSampleMem((mp_ubyte*)sample.sample); sample.sample = (mp_sbyte*)newBuffer; } else { mp_sbyte* newBuffer = (mp_sbyte*)module.allocSampleMem(newSampleSize); // copy stuff before insert start point for (i = 0; i < pos; i++) sample.setSampleValue((mp_ubyte*)newBuffer, i, sample.getSampleValue(i)); // copy selection to start point for (i = 0; i < selectionWidth; i++) sample.setSampleValue((mp_ubyte*)newBuffer, i+pos, getSampleByte(i)); // copy stuff after insert start point for (i = 0; i < ((signed)sample.samplen - pos); i++) sample.setSampleValue((mp_ubyte*)newBuffer, i+pos+selectionWidth, sample.getSampleValue(i+pos)); if (sample.sample) module.freeSampleMem((mp_ubyte*)sample.sample); sample.sample = newBuffer; } pp_int32 loopend = sample.loopstart + sample.looplen; if ((signed)sample.loopstart < pos && loopend > pos) loopend+=selectionWidth; else if ((signed)sample.loopstart > pos && loopend > pos) { sample.loopstart+=selectionWidth; loopend+=selectionWidth; } sample.samplen = newSampleSize; sample.looplen = loopend - sample.loopstart; } void SampleEditor::prepareUndo() { delete before; before = NULL; if (undoStackEnabled && undoStackActivated && undoStack) { undoUserData.clear(); notifyListener(NotificationFeedUndoData); before = new SampleUndoStackEntry(*sample, getSelectionStart(), getSelectionEnd(), &undoUserData); } } void SampleEditor::finishUndo() { if (undoStackEnabled && undoStackActivated && undoStack) { // first of all the listener should get the chance to adjust // user data according to our new changes BEFORE we actually save // the new state in the undo stack for redo lastOperationDidChangeSize = (sample->samplen != before->getSampLen()); notifyListener(NotificationChangesValidate); undoUserData.clear(); // we want some user data now notifyListener(NotificationFeedUndoData); SampleUndoStackEntry after(SampleUndoStackEntry(*sample, getSelectionStart(), getSelectionEnd(), &undoUserData)); if (*before != after) { if (undoStack) { undoStack->Push(*before); undoStack->Push(after); undoStack->Pop(); } } } // we're done, client might want to refresh the screen or whatever notifyListener(NotificationChanges); } bool SampleEditor::revoke(const SampleUndoStackEntry* stackEntry) { if (sample == NULL) return false; if (undoStack == NULL || !undoStackEnabled) return false; sample->samplen = stackEntry->getSampLen(); sample->loopstart = stackEntry->getLoopStart(); sample->looplen = stackEntry->getLoopLen(); sample->relnote = stackEntry->getRelNote(); sample->finetune = stackEntry->getFineTune(); sample->type = (mp_ubyte)stackEntry->getFlags(); setSelectionStart(stackEntry->getSelectionStart()); setSelectionEnd(stackEntry->getSelectionEnd()); enterCriticalSection(); // free old sample memory if (sample->sample) { module->freeSampleMem((mp_ubyte*)sample->sample); sample->sample = NULL; } if (stackEntry->getBuffer()) { if (sample->type & 16) { sample->sample = (mp_sbyte*)module->allocSampleMem(sample->samplen*2); TXMSample::copyPaddedMem(sample->sample, stackEntry->getBuffer(), sample->samplen*2); } else { sample->sample = (mp_sbyte*)module->allocSampleMem(sample->samplen); TXMSample::copyPaddedMem(sample->sample, stackEntry->getBuffer(), sample->samplen); } } leaveCriticalSection(); undoUserData = stackEntry->getUserData(); notifyListener(NotificationFetchUndoData); notifyListener(NotificationChanges); return true; } void SampleEditor::notifyChanges(bool condition, bool lazy/* = true*/) { lastOperation = OperationRegular; lastOperationDidChangeSize = false; if (!lazy) { setLazyUpdateNotifications(false); notifyListener(NotificationChangesValidate); notifyListener(NotificationChanges); } else { setLazyUpdateNotifications(true); notifyListener(NotificationChanges); setLazyUpdateNotifications(false); } } SampleEditor::SampleEditor() : EditorBase(), sample(NULL), undoStackEnabled(true), undoStackActivated(true), before(NULL), undoStack(NULL), lastOperationDidChangeSize(false), lastOperation(OperationRegular), drawing(false), lastSamplePos(-1), lastParameters(NULL), lastFilterFunc(NULL) { // Undo history undoHistory = new UndoHistory(UNDOHISTORYSIZE_SAMPLEEDITOR); resetSelection(); memset(&lastSample, 0, sizeof(lastSample)); } SampleEditor::~SampleEditor() { delete lastParameters; delete undoHistory; delete undoStack; delete before; } void SampleEditor::attachSample(TXMSample* sample, XModule* module) { // only return if the sample data really equals what we already have if (sample->equals(lastSample) && sample == this->sample) return; lastSample = *sample; // --------- update undo history information -------------------- if (undoStackEnabled && undoStackActivated) { if (undoStack) { // if the undo stack is empty, we don't need to save current undo stack if (!undoStack->IsEmpty() || !undoStack->IsTop()) { undoStack = undoHistory->getUndoStack(sample, this->sample, undoStack); } // delete it if it's empty else { delete undoStack; undoStack = NULL; undoStack = undoHistory->getUndoStack(sample, NULL, NULL); } } // couldn't get any from history, create new one if (!undoStack) { undoStack = new PPUndoStack(UNDODEPTH_SAMPLEEDITOR); } } this->sample = sample; attachModule(module); resetSelection(); notifyListener(NotificationReload); } void SampleEditor::reset() { if (undoStackEnabled) { if (undoHistory) delete undoHistory; if (undoStack) { delete undoStack; undoStack = NULL; undoStack = new PPUndoStack(UNDODEPTH_SAMPLEEDITOR); } undoHistory = new UndoHistory(UNDOHISTORYSIZE_SAMPLEEDITOR); } else { if (undoHistory) { delete undoHistory; undoHistory = NULL; } if (undoStack) { delete undoStack; undoStack = NULL; } } } bool SampleEditor::isEmptySample() const { if (!isValidSample()) return true; return (sample->sample == NULL); } bool SampleEditor::canMinimize() const { if (!isValidSample()) return false; return sample->samplen && sample->sample && (sample->type & 3); } bool SampleEditor::isEditableSample() const { if (!isValidSample()) return false; return (sample->sample != NULL) && (sample->samplen != 0); } void SampleEditor::enableUndoStack(bool enable) { undoStackEnabled = enable; reset(); } bool SampleEditor::undo() { if (!undoStackEnabled || undoStack == NULL) return false; if (undoStack->IsEmpty()) return false; return revoke(undoStack->Pop()); } bool SampleEditor::redo() { if (!undoStackEnabled || undoStack == NULL) return false; if (undoStack->IsTop()) return false; return revoke(undoStack->Advance()); } void SampleEditor::selectAll() { if (isEmptySample()) return; selectionStart = 0; selectionEnd = sample->samplen; } bool SampleEditor::validate() { if (isEmptySample()) { resetSelection(); return false; } pp_int32 sStart = getSelectionStart(); pp_int32 sEnd = getSelectionEnd(); if (sEnd < sStart) { pp_int32 s = sEnd; sEnd = sStart; sStart = s; } setSelectionStart(sStart); setSelectionEnd(sEnd); if (getSelectionEnd() != -1 && getSelectionStart () != -1 && getSelectionEnd() < 0) { resetSelection(); } if (getSelectionEnd() > 0 && getSelectionStart() < 0) setSelectionStart(0); if (getSelectionStart() > (signed)sample->samplen) { resetSelection(); } if (getSelectionEnd() > (signed)sample->samplen) { setSelectionEnd(sample->samplen); } if (sample->loopstart > sample->samplen) sample->loopstart = 0; if (sample->loopstart + sample->looplen > sample->samplen) sample->looplen -= (sample->loopstart + sample->looplen) - sample->samplen; // one shot sample only allows loopstart == 0 if ((sample->type & 32) && sample->loopstart) { sample->type &= ~32; } return true; } bool SampleEditor::canPaste() const { if (selectionEnd == selectionStart && selectionStart == -1 && sample->sample != NULL) return false; return !ClipBoard::getInstance()->isEmpty(); } pp_uint32 SampleEditor::getRepeatStart() const { return sample == NULL ? 0 : sample->loopstart; } pp_uint32 SampleEditor::getRepeatEnd() const { return sample == NULL ? 0 : sample->loopstart + sample->looplen; } pp_uint32 SampleEditor::getRepeatLength() const { return sample == NULL ? 0 : sample->looplen; } void SampleEditor::setRepeatStart(pp_uint32 start) { if (sample == NULL) return; mp_uint32 before = sample->loopstart; sample->loopstart = start; validate(); notifyChanges(before != sample->loopstart, false); } void SampleEditor::setRepeatEnd(pp_uint32 end) { if (sample == NULL) return; mp_uint32 before = sample->looplen; sample->looplen = (end - sample->loopstart); validate(); notifyChanges(before != sample->looplen, false); } void SampleEditor::setRepeatLength(pp_uint32 length) { if (sample == NULL) return; mp_uint32 before = sample->looplen; sample->looplen = length; validate(); notifyChanges(before != sample->looplen, false); } bool SampleEditor::increaseRepeatStart() { if (isEmptySample()) return false; mp_uint32 before = sample->loopstart; pp_int32 loopend = sample->loopstart+sample->looplen; pp_int32 loopstart = sample->loopstart+1; if (loopstart >= 0 && loopstart < loopend && loopend >= 0 && loopend <= (signed)sample->samplen) { sample->looplen = loopend - loopstart; sample->loopstart = loopstart; } validate(); notifyChanges(before != sample->loopstart, false); return true; } bool SampleEditor::decreaseRepeatStart() { if (isEmptySample()) return false; mp_uint32 before = sample->loopstart; pp_int32 loopend = sample->loopstart+sample->looplen; pp_int32 loopstart = sample->loopstart-1; if (loopstart >= 0 && loopstart < loopend && loopend >= 0 && loopend <= (signed)sample->samplen) { sample->looplen = loopend - loopstart; sample->loopstart = loopstart; } validate(); notifyChanges(before != sample->loopstart, false); return true; } bool SampleEditor::increaseRepeatLength() { if (isEmptySample()) return false; mp_uint32 before = sample->looplen; pp_int32 loopend = sample->loopstart+sample->looplen+1; pp_int32 loopstart = sample->loopstart; if (loopstart >= 0 && loopstart < loopend && loopend >= 0 && loopend <= (signed)sample->samplen) { sample->looplen = loopend - loopstart; sample->loopstart = loopstart; } validate(); notifyChanges(before != sample->looplen, false); return true; } bool SampleEditor::decreaseRepeatLength() { if (isEmptySample()) return false; mp_uint32 before = sample->looplen; pp_int32 loopend = sample->loopstart+sample->looplen-1; pp_int32 loopstart = sample->loopstart; if (loopstart >= 0 && loopstart < loopend && loopend >= 0 && loopend <= (signed)sample->samplen) { sample->looplen = loopend - loopstart; sample->loopstart = loopstart; } validate(); notifyChanges(before != sample->looplen, false); return true; } bool SampleEditor::setLoopType(pp_uint8 type) { if (sample == NULL) return false; mp_ubyte before = sample->type; if (type <= 2) { sample->type &= ~(3+32); sample->type |= type; if (type && sample->loopstart == 0 && sample->looplen == 0) { sample->loopstart = 0; sample->looplen = sample->samplen; } } else if (type == 3) { sample->type &= ~(3+32); sample->type |= (1+32); mp_sint32 loopend = sample->loopstart + sample->looplen; sample->loopstart = 0; sample->looplen = loopend; } else ASSERT(false); notifyChanges(before != sample->type); return true; } pp_uint8 SampleEditor::getLoopType() const { if (sample) { if ((sample->type & 3) == 1 && (sample->type & 32)) return 3; else return sample->type & 3; } else return 0; } bool SampleEditor::is16Bit() const { if (sample) return (sample->type & 16) == 16; else return false; } pp_int32 SampleEditor::getRelNoteNum() const { return sample ? sample->relnote : 0; } void SampleEditor::increaseRelNoteNum(pp_int32 offset) { if (sample == NULL) return; mp_sbyte before = sample->relnote; pp_int32 relnote = sample->relnote; relnote+=offset; if (relnote > 71) relnote = 71; if (relnote < -48) relnote = -48; sample->relnote = (mp_sbyte)relnote; notifyChanges(sample->relnote != before); } pp_int32 SampleEditor::getFinetune() const { return sample ? sample->finetune : 0; } void SampleEditor::setFinetune(pp_int32 finetune) { if (sample == NULL) return; mp_sbyte before = sample->finetune; if (finetune < -128) finetune = -128; if (finetune > 127) finetune = 127; sample->finetune = (mp_sbyte)finetune; notifyChanges(sample->finetune != before); } void SampleEditor::setFT2Volume(pp_int32 vol) { if (sample == NULL) return; mp_ubyte before = sample->vol; sample->vol = XModule::vol64to255(vol); notifyChanges(sample->vol != before); } pp_int32 SampleEditor::getFT2Volume() const { return sample ? XModule::vol255to64(sample->vol) : 0; } void SampleEditor::setPanning(pp_int32 pan) { if (sample == NULL) return; mp_sbyte before = sample->pan; if (pan < 0) pan = 0; if (pan > 255) pan = 255; sample->pan = (mp_sbyte)pan; notifyChanges(sample->pan != before); } pp_int32 SampleEditor::getPanning() const { return sample ? sample->pan : 0; } void SampleEditor::startDrawing() { if (sample) sample->restoreOriginalState(); drawing = true; lastSamplePos = -1; prepareUndo(); } void SampleEditor::drawSample(pp_int32 sampleIndex, float s) { s*=2.0f; pp_int32 from = lastSamplePos; pp_int32 to = sampleIndex; if (from == -1) from = sampleIndex; float froms = 0.0f; froms = getFloatSampleFromWaveform(from); if (from > to) { pp_int32 h = from; from = to; to = h; float fh = froms; froms = s; s = fh; } float step = 0; if (to-from) step = (s-froms)/(to-from); else froms = s; lastSamplePos = sampleIndex; for (pp_int32 si = from; si <= to; si++) { setFloatSampleInWaveform(si, froms); froms+=step; } } void SampleEditor::endDrawing() { drawing = false; lastSamplePos = -1; if (!sample || !sample->sample || !sample->samplen) return; lastOperation = OperationRegular; finishUndo(); } void SampleEditor::minimizeSample() { FilterParameters par(0); tool_minimizeSample(&par); } void SampleEditor::cropSample() { FilterParameters par(0); tool_cropSample(&par); } void SampleEditor::clearSample() { FilterParameters par(0); tool_clearSample(&par); } void SampleEditor::mixPasteSample() { FilterParameters par(0); tool_mixPasteSample(&par); } void SampleEditor::AMPasteSample() { FilterParameters par(0); tool_AMPasteSample(&par); } void SampleEditor::FMPasteSample() { FilterParameters par(0); tool_FMPasteSample(&par); } void SampleEditor::PHPasteSample() { FilterParameters par(0); tool_PHPasteSample(&par); } void SampleEditor::convertSampleResolution(bool convert) { FilterParameters par(1); par.setParameter(0, FilterParameters::Parameter(convert ? 1 : 0)); tool_convertSampleResolution(&par); } bool SampleEditor::cutSampleInternal() { if (sample == NULL) return false; pp_int32 sStart = selectionStart; pp_int32 sEnd = selectionEnd; if (sStart >= 0 && sEnd >= 0) { if (sEnd < sStart) { pp_int32 s = sEnd; sEnd = sStart; sStart = s; } } else return false; selectionStart = sStart; selectionEnd = sEnd; if (sStart == sEnd) return false; // reset loop area double buffer to original sample state // (switch buffering off) sample->restoreOriginalState(); for (pp_uint32 i = selectionEnd; i <= sample->samplen; i++) sample->setSampleValue((i-selectionEnd)+selectionStart, sample->getSampleValue(i)); mp_sint32 sLoopStart = sample->loopstart; if (sEnd < (signed)sample->loopstart + (signed)sample->looplen) sLoopStart-=(sEnd - sStart); if (sLoopStart < 0) sLoopStart = 0; sample->loopstart = sLoopStart; sample->samplen -= abs(selectionEnd - selectionStart); return true; } void SampleEditor::cut() { if (sample == NULL) return; if (!hasValidSelection()) return; // we're going to change the sample buffers, better stop enterCriticalSection(); // undo stuff going on prepareUndo(); // store selection into clipboard ClipBoard::getInstance()->makeCopy(*sample, *module, getSelectionStart(), getSelectionEnd()); // just make clear what kind of an operation this is if (cutSampleInternal()) lastOperation = OperationCut; // selection no longer intact resetSelection(); // validate our internal state validate(); // redo stuff and client notifications finishUndo(); // keep on playing if you did leaveCriticalSection(); } void SampleEditor::copy() { if (sample == NULL) return; if (!hasValidSelection()) return; ClipBoard::getInstance()->makeCopy(*sample, *module, getSelectionStart(), getSelectionEnd()); notifyListener(NotificationUpdateNoChanges); } void SampleEditor::paste() { if (sample == NULL) return; enterCriticalSection(); prepareUndo(); if (hasValidSelection()) { mp_uint32 loopstart = sample->loopstart; mp_uint32 looplen = sample->looplen; if (cutSampleInternal()) lastOperation = OperationCut; sample->loopstart = loopstart; sample->looplen = looplen; } ClipBoard::getInstance()->paste(*sample, *module, getSelectionStart()); setSelectionEnd(getSelectionStart() + ClipBoard::getInstance()->getWidth()); validate(); finishUndo(); leaveCriticalSection(); } SampleEditor::WorkSample* SampleEditor::createWorkSample(pp_uint32 size, pp_uint8 numBits, pp_uint32 sampleRate) { WorkSample* workSample = new WorkSample(*module, size, numBits, sampleRate); if (workSample->buffer == NULL) { delete workSample; return NULL; } return workSample; } void SampleEditor::pasteOther(WorkSample& src) { enterCriticalSection(); prepareUndo(); if (sample->sample) { module->freeSampleMem((mp_ubyte*)sample->sample); sample->sample = NULL; sample->samplen = 0; } sample->loopstart = 0; sample->looplen = 0; sample->type = (src.numBits == 16) ? 16 : 0; sample->samplen = src.size; mp_sbyte rn, ft; XModule::convertc4spd((mp_uint32)src.sampleRate, &ft, &rn); sample->relnote = rn; sample->finetune = ft; sample->sample = (mp_sbyte*)src.buffer; src.buffer = NULL; finishUndo(); leaveCriticalSection(); } static float ppfabs(float f) { return f < 0 ? -f : f; } float SampleEditor::getFloatSampleFromWaveform(pp_int32 index, void* src/* = NULL*/, pp_int32 size/* = 0*/) { if (isEmptySample()) return 0.0f; if (!src) { if (index > (signed)sample->samplen) index = sample->samplen; if (index < 0) index = 0; } else if (size != 0) { if (index >= size) index = size-1; if (index < 0) index = 0; } if (sample->type & 16) { mp_sword s = src ? *(((mp_sword*)src)+index) : sample->getSampleValue(index); return s > 0 ? (float)s*(1.0f/32767.0f) : (float)s*(1.0f/32768.0f); } else { mp_sbyte s = src ? *(((mp_sbyte*)src)+index) : sample->getSampleValue(index); return s > 0 ? (float)s*(1.0f/127.0f) : (float)s*(1.0f/128.0f); } } void SampleEditor::setFloatSampleInWaveform(pp_int32 index, float singleSample, void* src/* = NULL*/) { if (isEmptySample() || index > (signed)sample->samplen) return; if (index < 0) index = 0; if (singleSample > 1.0f) singleSample = 1.0f; if (singleSample < -1.0f) singleSample = -1.0f; if (sample->type & 16) { mp_sword s = singleSample > 0 ? (mp_sword)(singleSample*32767.0f+0.5f) : (mp_sword)(singleSample*32768.0f-0.5f); if (src) *(((mp_sword*)src)+index) = s; else sample->setSampleValue(index, s); } else { mp_sbyte s = singleSample > 0 ? (mp_sbyte)(singleSample*127.0f+0.5f) : (mp_sbyte)(singleSample*128.0f-0.5f); if (src) *(((mp_sbyte*)src)+index) = s; else sample->setSampleValue(index, s); } } void SampleEditor::preFilter(TFilterFunc filterFuncPtr, const FilterParameters* par) { if (filterFuncPtr) { if (par != NULL) { FilterParameters newPar(*par); if (lastParameters) { delete lastParameters; lastParameters = NULL; } lastParameters = new FilterParameters(newPar); } else { if (lastParameters) { delete lastParameters; lastParameters = NULL; } } lastFilterFunc = filterFuncPtr; } enterCriticalSection(); lastOperation = OperationRegular; notifyListener(NotificationPrepareLengthy); } void SampleEditor::postFilter() { notifyListener(NotificationUnprepareLengthy); leaveCriticalSection(); } void SampleEditor::tool_newSample(const FilterParameters* par) { if (!isValidSample()) return; preFilter(NULL, NULL); prepareUndo(); pp_int32 numSamples = par->getParameter(0).intPart, numBits = par->getParameter(1).intPart; if (sample->sample) { module->freeSampleMem((mp_ubyte*)sample->sample); sample->sample = NULL; } sample->samplen = numSamples; sample->loopstart = 0; sample->looplen = sample->samplen; switch (numBits) { case 8: sample->sample = (mp_sbyte*)module->allocSampleMem(sample->samplen); memset(sample->sample, 0, sample->samplen); break; case 16: sample->type |= 16; sample->sample = (mp_sbyte*)module->allocSampleMem(sample->samplen*2); memset(sample->sample, 0, sample->samplen*2); break; default: ASSERT(false); } finishUndo(); lastOperation = OperationNew; postFilter(); } void SampleEditor::tool_minimizeSample(const FilterParameters* par) { if (isEmptySample()) return; if (!(sample->type & 3)) return; preFilter(NULL, NULL); prepareUndo(); pp_int32 loopend = sample->loopstart+sample->looplen; if (loopend > (signed)sample->samplen) loopend = sample->samplen; sample->samplen = loopend; finishUndo(); postFilter(); } void SampleEditor::tool_cropSample(const FilterParameters* par) { if (isEmptySample()) return; pp_int32 sStart = selectionStart; pp_int32 sEnd = selectionEnd; if (sStart >= 0 && sEnd >= 0) { if (sEnd < sStart) { pp_int32 s = sEnd; sEnd = sStart; sStart = s; } } else return; selectionStart = sStart; selectionEnd = sEnd; if (sStart == sEnd) return; preFilter(NULL, NULL); prepareUndo(); if (sample->type & 16) { mp_sword* buff = (mp_sword*)sample->sample; for (pp_int32 i = selectionStart; i < selectionEnd; i++) buff[i-selectionStart] = buff[i]; } else { mp_sbyte* buff = (mp_sbyte*)sample->sample; for (pp_int32 i = selectionStart; i < selectionEnd; i++) buff[i-selectionStart] = buff[i]; } sample->samplen = abs(selectionEnd - selectionStart); if (sample->loopstart > sample->samplen) sample->loopstart = 0; pp_int32 loopend = sample->loopstart + sample->looplen; if (loopend > (signed)sample->samplen) loopend = sample->samplen; sample->looplen = loopend - sample->loopstart; selectionStart = 0; selectionEnd = sample->samplen; finishUndo(); postFilter(); } void SampleEditor::tool_clearSample(const FilterParameters* par) { preFilter(NULL, NULL); prepareUndo(); module->freeSampleMem((mp_ubyte*)sample->sample); sample->sample = NULL; sample->samplen = 0; sample->loopstart = 0; sample->looplen = 0; finishUndo(); postFilter(); } void SampleEditor::tool_convertSampleResolution(const FilterParameters* par) { preFilter(NULL, NULL); prepareUndo(); bool convert = (par->getParameter(0).intPart != 0); if (sample->type & 16) { if (!convert) { sample->type &= ~16; sample->samplen<<=1; sample->looplen<<=1; sample->loopstart<<=1; } else { mp_sbyte* buffer = new mp_sbyte[sample->samplen]; for (mp_sint32 i = 0; i < (signed)sample->samplen; i++) buffer[i] = (mp_sbyte)(sample->getSampleValue(i)>>8); module->freeSampleMem((mp_ubyte*)sample->sample); sample->type &= ~16; sample->sample = (mp_sbyte*)module->allocSampleMem(sample->samplen); memcpy(sample->sample, buffer, sample->samplen); delete[] buffer; } } else { if (!convert) { sample->type |= 16; sample->samplen>>=1; sample->looplen>>=1; sample->loopstart>>=1; } else { mp_sword* buff16 = new mp_sword[sample->samplen]; for (mp_sint32 i = 0; i < (signed)sample->samplen; i++) buff16[i] = (mp_sword)(sample->getSampleValue(i)<<8); module->freeSampleMem((mp_ubyte*)sample->sample); sample->type |= 16; sample->sample = (mp_sbyte*)module->allocSampleMem(sample->samplen*2); memcpy(sample->sample, buff16, sample->samplen*2); delete[] buff16; } } finishUndo(); postFilter(); } void SampleEditor::tool_mixPasteSample(const FilterParameters* par) { if (isEmptySample()) return; if (ClipBoard::getInstance()->isEmpty()) return; pp_int32 sStart = selectionStart; pp_int32 sEnd = selectionEnd; if (hasValidSelection()) { if (sStart >= 0 && sEnd >= 0) { if (sEnd < sStart) { pp_int32 s = sEnd; sEnd = sStart; sStart = s; } } } else { sStart = 0; sEnd = sample->samplen; } preFilter(NULL, NULL); prepareUndo(); ClipBoard* clipBoard = ClipBoard::getInstance(); float step = (float)clipBoard->getWidth() / (float)(sEnd-sStart); float j = 0.0f; for (pp_int32 i = sStart; i < sEnd; i++) { float frac = j - (float)floor(j); pp_int16 s = clipBoard->getSampleWord((pp_int32)j); float f1 = s < 0 ? (s/32768.0f) : (s/32767.0f); s = clipBoard->getSampleWord((pp_int32)j+1); float f2 = s < 0 ? (s/32768.0f) : (s/32767.0f); float f = (1.0f-frac)*f1 + frac*f2; setFloatSampleInWaveform(i, f + getFloatSampleFromWaveform(i)); j+=step; } finishUndo(); postFilter(); } void SampleEditor::tool_AMPasteSample(const FilterParameters* par) { if (isEmptySample()) return; if (ClipBoard::getInstance()->isEmpty()) return; pp_int32 sStart = selectionStart; pp_int32 sEnd = selectionEnd; if (hasValidSelection()) { if (sStart >= 0 && sEnd >= 0) { if (sEnd < sStart) { pp_int32 s = sEnd; sEnd = sStart; sStart = s; } } } else { sStart = 0; sEnd = sample->samplen; } preFilter(NULL, NULL); prepareUndo(); ClipBoard* clipBoard = ClipBoard::getInstance(); float step = (float)clipBoard->getWidth() / (float)(sEnd-sStart); float j = 0.0f; for (pp_int32 i = sStart; i < sEnd; i++) { float frac = j - (float)floor(j); pp_int16 s = clipBoard->getSampleWord((pp_int32)j); float f1 = s < 0 ? (s/32768.0f) : (s/32767.0f); s = clipBoard->getSampleWord((pp_int32)j+1); float f2 = s < 0 ? (s/32768.0f) : (s/32767.0f); float f = (1.0f-frac)*f1 + frac*f2; setFloatSampleInWaveform(i, f * getFloatSampleFromWaveform(i)); j+=step; } finishUndo(); postFilter(); } void SampleEditor::tool_FMPasteSample(const FilterParameters* par) { if (isEmptySample()) return; if (ClipBoard::getInstance()->isEmpty()) return; pp_int32 sStart = selectionStart; pp_int32 sEnd = selectionEnd; if (hasValidSelection()) { if (sStart >= 0 && sEnd >= 0) { if (sEnd < sStart) { pp_int32 s = sEnd; sEnd = sStart; sStart = s; } } } else { sStart = 0; sEnd = sample->samplen; } preFilter(NULL, NULL); prepareUndo(); ClipBoard* clipBoard = ClipBoard::getInstance(); float step; float j = 0.0f; for (pp_int32 i = sStart; i < sEnd; i++) { float frac = j - (float)floor(j); pp_int16 s = clipBoard->getSampleWord(((pp_int32)j)%clipBoard->getWidth()); float f1 = s < 0 ? (s/32768.0f) : (s/32767.0f); s = clipBoard->getSampleWord(((pp_int32)j+1)%clipBoard->getWidth()); float f2 = s < 0 ? (s/32768.0f) : (s/32767.0f); float f = (1.0f-frac)*f1 + frac*f2; step = powf(16.0f,getFloatSampleFromWaveform(i)); setFloatSampleInWaveform(i, f); j+=step; while (j>clipBoard->getWidth()) j-=clipBoard->getWidth(); } finishUndo(); postFilter(); } void SampleEditor::tool_PHPasteSample(const FilterParameters* par) { if (isEmptySample()) return; if (ClipBoard::getInstance()->isEmpty()) return; pp_int32 sStart = selectionStart; pp_int32 sEnd = selectionEnd; if (hasValidSelection()) { if (sStart >= 0 && sEnd >= 0) { if (sEnd < sStart) { pp_int32 s = sEnd; sEnd = sStart; sStart = s; } } } else { sStart = 0; sEnd = sample->samplen; } preFilter(NULL, NULL); prepareUndo(); ClipBoard* clipBoard = ClipBoard::getInstance(); // this filter changes the ratio between above zero to below // zero values by stretching the above half wave and shrinking // the below zero half wave (or the other way around) // the frequency of the sample stays constant, only // if the initial ratio is 1/1 // If it's not, the frequency shifts. // To work with non synthetic or already distorted samples, // this ratio needs to be calculated and compensated. // The frequency will still shift if the ratio is not constant // during a longer sample. Ce la vie. pp_int32 ups=0,downs=0; for (pp_int32 i = 0; i < clipBoard->getWidth(); i++) { if (clipBoard->getSampleWord(i)<0) { downs++; } else { ups++; } } if (!downs) { downs++; // div by zero prevention } float phaseRatio = (float)ups/(float)downs; float step; float j = 0.0f; for (pp_int32 i = sStart; i < sEnd; i++) { float f; float fi = getFloatSampleFromWaveform(i); // we need to oversample at a much shorter step size to // track the zero crossing with sufficient accuracy for (pp_int32 oversample = 0; oversample<0x80; oversample++) { float frac = j - (float)floor(j); pp_int16 s = clipBoard->getSampleWord(((pp_int32)j)%clipBoard->getWidth()); float f1 = s < 0 ? (s/32768.0f) : (s/32767.0f); s = clipBoard->getSampleWord(((pp_int32)j+1)%clipBoard->getWidth()); float f2 = s < 0 ? (s/32768.0f) : (s/32767.0f); f = (1.0f-frac)*f1 + frac*f2; step = powf(16.0f,fabsf(fi)); // the lower half wave is matched // to keep the frequency constant if (f*fi<0.0f) { step = 1.0f / (1.0f + (1.0f-(1.0f/step))); } // which needs to be compensated for a nonzero // initial half wave ratio if (f<0.0f) { step = step * (1.0f/phaseRatio); } // we advance by a fraction due to oversampling j+=step*(1.0f/0x80); } while (j>clipBoard->getWidth()) j-=clipBoard->getWidth(); setFloatSampleInWaveform(i, f); } finishUndo(); postFilter(); } void SampleEditor::tool_scaleSample(const FilterParameters* par) { if (isEmptySample()) return; pp_int32 sStart = selectionStart; pp_int32 sEnd = selectionEnd; if (hasValidSelection()) { if (sStart >= 0 && sEnd >= 0) { if (sEnd < sStart) { pp_int32 s = sEnd; sEnd = sStart; sStart = s; } } } else { sStart = 0; sEnd = sample->samplen; } preFilter(&SampleEditor::tool_scaleSample, par); prepareUndo(); float startScale = par->getParameter(0).floatPart; float endScale = par->getParameter(1).floatPart; float step = (endScale - startScale) / (float)(sEnd - sStart); for (pp_int32 i = sStart; i < sEnd; i++) { float f = getFloatSampleFromWaveform(i); setFloatSampleInWaveform(i, f*startScale); startScale+=step; } finishUndo(); postFilter(); } void SampleEditor::tool_normalizeSample(const FilterParameters* par) { if (isEmptySample()) return; pp_int32 sStart = selectionStart; pp_int32 sEnd = selectionEnd; if (hasValidSelection()) { if (sStart >= 0 && sEnd >= 0) { if (sEnd < sStart) { pp_int32 s = sEnd; sEnd = sStart; sStart = s; } } } else { sStart = 0; sEnd = sample->samplen; } preFilter(&SampleEditor::tool_normalizeSample, par); prepareUndo(); float maxLevel = ((par == NULL)? 1.0f : par->getParameter(0).floatPart); float peak = 0.0f; pp_int32 i; // find peak value for (i = sStart; i < sEnd; i++) { float f = getFloatSampleFromWaveform(i); if (ppfabs(f) > peak) peak = ppfabs(f); } float scale = maxLevel / peak; for (i = sStart; i < sEnd; i++) { float f = getFloatSampleFromWaveform(i); setFloatSampleInWaveform(i, f*scale); } finishUndo(); postFilter(); } void SampleEditor::tool_reverseSample(const FilterParameters* par) { if (isEmptySample()) return; pp_int32 sStart = selectionStart; pp_int32 sEnd = selectionEnd; if (hasValidSelection()) { if (sStart >= 0 && sEnd >= 0) { if (sEnd < sStart) { pp_int32 s = sEnd; sEnd = sStart; sStart = s; } } } else { sStart = 0; sEnd = sample->samplen; } preFilter(&SampleEditor::tool_reverseSample, par); prepareUndo(); pp_int32 i; for (i = 0; i < (sEnd-sStart)>>1; i++) { float f1 = getFloatSampleFromWaveform(sStart + i); float f2 = getFloatSampleFromWaveform(sEnd - 1 - i); float h = f2; f2 = f1; f1 = h; setFloatSampleInWaveform(sStart + i, f1); setFloatSampleInWaveform(sEnd - 1 - i, f2); } finishUndo(); postFilter(); } void SampleEditor::tool_PTboostSample(const FilterParameters* par) { if (isEmptySample()) return; pp_int32 sStart = selectionStart; pp_int32 sEnd = selectionEnd; if (hasValidSelection()) { if (sStart >= 0 && sEnd >= 0) { if (sEnd < sStart) { pp_int32 s = sEnd; sEnd = sStart; sStart = s; } } } else { sStart = 0; sEnd = sample->samplen; } preFilter(&SampleEditor::tool_PTboostSample, par); prepareUndo(); pp_int32 i; float d0 = 0.0f, d1, d2; for (i = sStart; i < sEnd; i++) { d1 = d2 = getFloatSampleFromWaveform(i); d1 -= d0; d0 = d2; if (d1 < 0.0f) { d1 = -d1; d1*= 0.25f; d2 -= d1; } else { d1*= 0.25f; d2 += d1; } if (d2 > 1.0f) d2 = 1.0f; if (d2 < -1.0f) d2 = -1.0f; setFloatSampleInWaveform(i, d2); } finishUndo(); postFilter(); } bool SampleEditor::isValidxFadeSelection() { if (isEmptySample() || !hasValidSelection() || !(sample->type & 3)) return false; pp_int32 sStart = selectionStart; pp_int32 sEnd = selectionEnd; if (sStart >= 0 && sEnd >= 0) { if (sEnd < sStart) { pp_int32 s = sEnd; sEnd = sStart; sStart = s; } } pp_uint32 loopend = sample->loopstart + sample->looplen; if (((unsigned)sStart <= sample->loopstart && (unsigned)sEnd >= loopend) || ((unsigned)sStart > sample->loopstart && (unsigned)sEnd < loopend) || ((unsigned)sStart < sample->loopstart && (unsigned)sEnd < sample->loopstart) || ((unsigned)sStart > loopend && (unsigned)sEnd > loopend)) return false; return true; } void SampleEditor::tool_xFadeSample(const FilterParameters* par) { if (!isValidxFadeSelection()) return; pp_int32 sStart = selectionStart; pp_int32 sEnd = selectionEnd; if (sStart >= 0 && sEnd >= 0) { if (sEnd < sStart) { pp_int32 s = sEnd; sEnd = sStart; sStart = s; } } if (!(sample->type & 3) || sEnd < (signed)sample->loopstart || sStart > (signed)(sample->loopstart + sample->looplen)) return; pp_int32 loopend = sample->loopstart + sample->looplen; preFilter(&SampleEditor::tool_xFadeSample, par); if (sStart <= (signed)sample->loopstart && sEnd >= loopend) return; if (sStart >= (signed)sample->loopstart && sEnd >= loopend) { sStart-=loopend; sStart+=sample->loopstart; sEnd-=loopend; sEnd+=sample->loopstart; } mp_ubyte* buffer = new mp_ubyte[(sample->type & 16) ? sample->samplen*2 : sample->samplen]; if (!buffer) return; memcpy(buffer, sample->sample, (sample->type & 16) ? sample->samplen*2 : sample->samplen); prepareUndo(); pp_int32 i = 0; // loop start if ((sample->type & 3) == 1) { for (i = sStart; i < (signed)sample->loopstart; i++) { float t = (((float)i - sStart) / (float)(sample->loopstart - sStart))*0.5f; float f1 = getFloatSampleFromWaveform(i, buffer, sample->samplen); float f2 = getFloatSampleFromWaveform(loopend - (sample->loopstart - sStart) + (i - sStart), buffer, sample->samplen); float f = f1*(1.0f-t) + f2*t; setFloatSampleInWaveform(i, f); } for (i = sample->loopstart; i < sEnd; i++) { float t = 0.5f - ((((float)i - sample->loopstart) / (float)(sEnd-sample->loopstart))*0.5f); float f1 = getFloatSampleFromWaveform(i, buffer, sample->samplen); float f2 = getFloatSampleFromWaveform(loopend + (i - sample->loopstart), buffer, sample->samplen); float f = f1*(1.0f-t) + f2*t; setFloatSampleInWaveform(i, f); } // loop end sStart-=sample->loopstart; sStart+=loopend; sEnd-=sample->loopstart; sEnd+=loopend; for (i = sStart; i < loopend; i++) { float t = (((float)i - sStart) / (float)(loopend - sStart))*0.5f; float f1 = getFloatSampleFromWaveform(i, buffer, sample->samplen); float f2 = getFloatSampleFromWaveform(sample->loopstart - (loopend - sStart) + (i - sStart), buffer, sample->samplen); float f = f1*(1.0f-t) + f2*t; setFloatSampleInWaveform(i, f); } for (i = loopend; i < sEnd; i++) { float t = 0.5f - ((((float)i - loopend) / (float)(sEnd-loopend))*0.5f); float f1 = getFloatSampleFromWaveform(i, buffer, sample->samplen); float f2 = getFloatSampleFromWaveform(sample->loopstart + (i - loopend), buffer, sample->samplen); float f = f1*(1.0f-t) + f2*t; setFloatSampleInWaveform(i, f); } } else if ((sample->type & 3) == 2) { for (i = sStart; i < (signed)sample->loopstart; i++) { float t = (((float)i - sStart) / (float)(sample->loopstart - sStart))*0.5f; float f1 = getFloatSampleFromWaveform(i, buffer, sample->samplen); float f2 = getFloatSampleFromWaveform(sample->loopstart + (i - sStart), buffer, sample->samplen); float f = f1*(1.0f-t) + f2*t; setFloatSampleInWaveform(i, f); } for (i = sample->loopstart; i < sEnd; i++) { float t = 0.5f - ((((float)i - sample->loopstart) / (float)(sEnd-sample->loopstart))*0.5f); float f1 = getFloatSampleFromWaveform(i, buffer, sample->samplen); float f2 = getFloatSampleFromWaveform(sample->loopstart - (i - sample->loopstart), buffer, sample->samplen); float f = f1*(1.0f-t) + f2*t; setFloatSampleInWaveform(i, f); } } delete[] buffer; finishUndo(); postFilter(); } void SampleEditor::tool_changeSignSample(const FilterParameters* par) { if (isEmptySample()) return; pp_int32 ignorebits = par->getParameter(0).intPart; pp_int32 sStart = selectionStart; pp_int32 sEnd = selectionEnd; if (hasValidSelection()) { if (sStart >= 0 && sEnd >= 0) { if (sEnd < sStart) { pp_int32 s = sEnd; sEnd = sStart; sStart = s; } } } else { sStart = 0; sEnd = sample->samplen; } preFilter(&SampleEditor::tool_changeSignSample, par); prepareUndo(); pp_int32 i; pp_uint32 mask; if (sample->type & 16) { mask = 0xffff >> ignorebits; } else { mask = 0xff >> ignorebits; } // lazyness follows for (i = sStart; i < sEnd; i++) { if (sample->type & 16) { mp_uword* smp = (mp_uword*)sample->sample; smp[i] ^= mask; } else { mp_ubyte* smp = (mp_ubyte*)sample->sample; smp[i] ^= mask; } } finishUndo(); postFilter(); } void SampleEditor::tool_swapByteOrderSample(const FilterParameters* par) { if (isEmptySample()) return; if (!(sample->type & 16)) return; pp_int32 sStart = selectionStart; pp_int32 sEnd = selectionEnd; if (hasValidSelection()) { if (sStart >= 0 && sEnd >= 0) { if (sEnd < sStart) { pp_int32 s = sEnd; sEnd = sStart; sStart = s; } } } else { sStart = 0; sEnd = sample->samplen; } preFilter(&SampleEditor::tool_swapByteOrderSample, par); prepareUndo(); pp_int32 i; mp_uword* smp = (mp_uword*)sample->sample; for (i = sStart; i < sEnd; i++) { mp_uword s = (smp[i] >> 8) | ((smp[i] & 0xFF) << 8); smp[i] = s; } finishUndo(); postFilter(); } float getc4spd(mp_sint32 relnote,mp_sint32 finetune); void SampleEditor::tool_resampleSample(const FilterParameters* par) { if (isEmptySample()) return; preFilter(&SampleEditor::tool_resampleSample, par); prepareUndo(); float c4spd = getc4spd(sample->relnote, sample->finetune); pp_uint32 resamplerType = par->getParameter(1).intPart; SampleEditorResampler resampler(*module, *sample, resamplerType); bool res = resampler.resample(c4spd, par->getParameter(0).floatPart); float step = c4spd / par->getParameter(0).floatPart; if (res) { sample->loopstart = (mp_sint32)(sample->loopstart/step); sample->looplen = (mp_sint32)(sample->looplen/step); if (par->getParameter(2).intPart) { pp_uint32 c4spdi = (mp_uint32)par->getParameter(0).floatPart; mp_sbyte rn, ft; XModule::convertc4spd((mp_uint32)c4spdi, &ft, &rn); sample->relnote = rn; sample->finetune = ft; } } lastOperation = OperationCut; finishUndo(); postFilter(); } void SampleEditor::tool_DCNormalizeSample(const FilterParameters* par) { if (isEmptySample()) return; pp_int32 sStart = selectionStart; pp_int32 sEnd = selectionEnd; if (hasValidSelection()) { if (sStart >= 0 && sEnd >= 0) { if (sEnd < sStart) { pp_int32 s = sEnd; sEnd = sStart; sStart = s; } } } else { sStart = 0; sEnd = sample->samplen; } preFilter(&SampleEditor::tool_DCNormalizeSample, par); prepareUndo(); pp_int32 i; float DC = 0.0f; for (i = sStart; i < sEnd; i++) { DC += getFloatSampleFromWaveform(i); } DC = DC / (float)(sEnd-sStart); for (i = sStart; i < sEnd; i++) { setFloatSampleInWaveform(i, getFloatSampleFromWaveform(i) - DC); } finishUndo(); postFilter(); } void SampleEditor::tool_DCOffsetSample(const FilterParameters* par) { if (isEmptySample()) return; pp_int32 sStart = selectionStart; pp_int32 sEnd = selectionEnd; if (hasValidSelection()) { if (sStart >= 0 && sEnd >= 0) { if (sEnd < sStart) { pp_int32 s = sEnd; sEnd = sStart; sStart = s; } } } else { sStart = 0; sEnd = sample->samplen; } preFilter(&SampleEditor::tool_DCOffsetSample, par); prepareUndo(); pp_int32 i; float DC = par->getParameter(0).floatPart; for (i = sStart; i < sEnd; i++) { setFloatSampleInWaveform(i, getFloatSampleFromWaveform(i) + DC); } finishUndo(); postFilter(); } void SampleEditor::tool_rectangularSmoothSample(const FilterParameters* par) { if (isEmptySample()) return; pp_int32 sStart = selectionStart; pp_int32 sEnd = selectionEnd; if (hasValidSelection()) { if (sStart >= 0 && sEnd >= 0) { if (sEnd < sStart) { pp_int32 s = sEnd; sEnd = sStart; sStart = s; } } } else { sStart = 0; sEnd = sample->samplen; } preFilter(&SampleEditor::tool_rectangularSmoothSample, par); mp_sint32 sLen = sEnd - sStart; mp_ubyte* buffer = new mp_ubyte[(sample->type & 16) ? sLen*2 : sLen]; if (!buffer) return; memcpy(buffer, sample->sample + sStart, (sample->type & 16) ? sLen*2 : sLen); prepareUndo(); pp_int32 i; for (i = sStart; i < sEnd; i++) { float f = (getFloatSampleFromWaveform(i - sStart - 1, buffer, sLen) + getFloatSampleFromWaveform(i - sStart, buffer, sLen) + getFloatSampleFromWaveform(i - sStart + 1, buffer, sLen)) * (1.0f/3.0f); setFloatSampleInWaveform(i, f); } delete[] buffer; finishUndo(); postFilter(); } void SampleEditor::tool_triangularSmoothSample(const FilterParameters* par) { if (isEmptySample()) return; pp_int32 sStart = selectionStart; pp_int32 sEnd = selectionEnd; if (hasValidSelection()) { if (sStart >= 0 && sEnd >= 0) { if (sEnd < sStart) { pp_int32 s = sEnd; sEnd = sStart; sStart = s; } } } else { sStart = 0; sEnd = sample->samplen; } preFilter(&SampleEditor::tool_triangularSmoothSample, par); mp_sint32 sLen = sEnd - sStart; mp_ubyte* buffer = new mp_ubyte[(sample->type & 16) ? sLen*2 : sLen]; if (!buffer) return; memcpy(buffer, sample->sample + sStart, (sample->type & 16) ? sLen*2 : sLen); prepareUndo(); pp_int32 i; for (i = sStart; i < sEnd; i++) { float f = (getFloatSampleFromWaveform(i - sStart - 2, buffer, sLen) + getFloatSampleFromWaveform(i - sStart - 1, buffer, sLen)*2.0f + getFloatSampleFromWaveform(i - sStart, buffer, sLen)*3.0f + getFloatSampleFromWaveform(i - sStart + 1, buffer, sLen)*2.0f + getFloatSampleFromWaveform(i - sStart + 2, buffer, sLen)) * (1.0f/9.0f); setFloatSampleInWaveform(i, f); } delete[] buffer; finishUndo(); postFilter(); } void SampleEditor::tool_eqSample(const FilterParameters* par) { tool_eqSample(par,false); } void SampleEditor::tool_eqSample(const FilterParameters* par, bool selective) { if (isEmptySample()) return; if (selective && ClipBoard::getInstance()->isEmpty()) return; pp_int32 sStart = selectionStart; pp_int32 sEnd = selectionEnd; if (hasValidSelection()) { if (sStart >= 0 && sEnd >= 0) { if (sEnd < sStart) { pp_int32 s = sEnd; sEnd = sStart; sStart = s; } } } else { sStart = 0; sEnd = sample->samplen; } if (selective) { preFilter(NULL,NULL); } else { preFilter(&SampleEditor::tool_eqSample, par); } prepareUndo(); ClipBoard* clipBoard; float step; float j2 = 0.0f; if (selective) { clipBoard = ClipBoard::getInstance(); step = (float)clipBoard->getWidth() / (float)(sEnd-sStart); } float c4spd = 8363; // there really should be a global constant for this Equalizer** eqs = new Equalizer*[par->getNumParameters()]; // three band EQ if (par->getNumParameters() == 3) { for (pp_int32 i = 0; i < par->getNumParameters(); i++) { eqs[i] = new Equalizer(); eqs[i]->CalcCoeffs(EQConstants::EQ3bands[i], EQConstants::EQ3bandwidths[i], c4spd, Equalizer::CalcGain(par->getParameter(i).floatPart)); } } // ten band EQ else if (par->getNumParameters() == 10) { for (pp_int32 i = 0; i < par->getNumParameters(); i++) { eqs[i] = new Equalizer(); eqs[i]->CalcCoeffs(EQConstants::EQ10bands[i], EQConstants::EQ10bandwidths[i], c4spd, Equalizer::CalcGain(par->getParameter(i).floatPart)); } } else { delete[] eqs; finishUndo(); return; } // apply EQ here pp_int32 i; for (i = sStart; i < sEnd; i++) { // Fetch a stereo signal double xL = getFloatSampleFromWaveform(i); double xR = xL; float x = (float)xL; for (pp_int32 j = 0; j < par->getNumParameters(); j++) { double yL, yR; // Pass the stereo input eqs[j]->Filter(xL, xR, yL, yR); xL = yL; xR = yR; } if (selective) { float frac = j2 - (float)floor(j2); pp_int16 s = clipBoard->getSampleWord((pp_int32)j2); float f1 = s < 0 ? (s/32768.0f) : (s/32767.0f); s = clipBoard->getSampleWord((pp_int32)j2+1); float f2 = s < 0 ? (s/32768.0f) : (s/32767.0f); float f = (1.0f-frac)*f1 + frac*f2; if (f>=0) { x = f * ((float)xL) + (1.0f-f) * x; } else { x = -f * (x-(float)xL) + (1.0+f) * x; } j2+=step; } else { x = (float)xL; } setFloatSampleInWaveform(i, x); } for (i = 0; i < par->getNumParameters(); i++) delete eqs[i]; delete[] eqs; finishUndo(); postFilter(); } void SampleEditor::tool_generateSilence(const FilterParameters* par) { if (isEmptySample()) return; pp_int32 sStart = selectionStart; pp_int32 sEnd = selectionEnd; if (sStart >= 0 && sEnd >= 0) { if (sEnd < sStart) { pp_int32 s = sEnd; sEnd = sStart; sStart = s; } } else { sStart = 0; sEnd = 0; } preFilter(&SampleEditor::tool_generateSilence, par); mp_sint32 sLen = sEnd - sStart; prepareUndo(); pp_int32 i, j; pp_int32 size = par->getParameter(0).intPart; pp_int32 newSampleSize = (sample->samplen - sLen) + size; if (sample->type & 16) { mp_sword* dst = new mp_sword[newSampleSize]; j = 0; for (i = 0; i < sStart; i++, j++) dst[j] = sample->getSampleValue(i); for (i = 0; i < size; i++, j++) dst[j] = 0; for (i = sEnd; i < (signed)sample->samplen; i++, j++) dst[j] = sample->getSampleValue(i); module->freeSampleMem((mp_ubyte*)sample->sample); sample->sample = (mp_sbyte*)module->allocSampleMem(newSampleSize*2); memcpy(sample->sample, dst, newSampleSize*2); sample->samplen = newSampleSize; delete[] dst; } else { mp_sbyte* dst = new mp_sbyte[newSampleSize]; j = 0; for (i = 0; i < sStart; i++, j++) dst[j] = sample->getSampleValue(i); for (i = 0; i < size; i++, j++) dst[j] = 0; for (i = sEnd; i < (signed)sample->samplen; i++, j++) dst[j] = sample->getSampleValue(i); module->freeSampleMem((mp_ubyte*)sample->sample); sample->sample = (mp_sbyte*)module->allocSampleMem(newSampleSize); memcpy(sample->sample, dst, newSampleSize); sample->samplen = newSampleSize; delete[] dst; } // show everything lastOperation = OperationCut; finishUndo(); postFilter(); } void SampleEditor::tool_generateNoise(const FilterParameters* par) { if (isEmptySample()) return; pp_int32 sStart = selectionStart; pp_int32 sEnd = selectionEnd; if (hasValidSelection()) { if (sStart >= 0 && sEnd >= 0) { if (sEnd < sStart) { pp_int32 s = sEnd; sEnd = sStart; sStart = s; } } } else { sStart = 0; sEnd = sample->samplen; } preFilter(&SampleEditor::tool_generateNoise, par); prepareUndo(); pp_int32 i; pp_int32 type = par->getParameter(0).intPart; VRand rand; rand.seed(); switch (type) { case 0: for (i = sStart; i < sEnd; i++) setFloatSampleInWaveform(i, rand.white()*2.0f); break; case 1: for (i = sStart; i < sEnd; i++) setFloatSampleInWaveform(i, rand.pink()*2.0f); break; case 2: for (i = sStart; i < sEnd; i++) setFloatSampleInWaveform(i, rand.brown()*2.0f); break; } finishUndo(); postFilter(); } void SampleEditor::tool_generateSine(const FilterParameters* par) { if (isEmptySample()) return; pp_int32 sStart = selectionStart; pp_int32 sEnd = selectionEnd; if (hasValidSelection()) { if (sStart >= 0 && sEnd >= 0) { if (sEnd < sStart) { pp_int32 s = sEnd; sEnd = sStart; sStart = s; } } } else { sStart = 0; sEnd = sample->samplen; } preFilter(&SampleEditor::tool_generateSine, par); mp_sint32 sLen = sEnd - sStart; prepareUndo(); pp_int32 i; const float numPeriods = (float)(6.283185307179586476925286766559 * par->getParameter(1).floatPart); const float amplify = par->getParameter(0).floatPart; // generate sine wave here for (i = sStart; i < sEnd; i++) { float per = (i-sStart)/(float)sLen * numPeriods; setFloatSampleInWaveform(i, (float)sin(per)*amplify); } finishUndo(); postFilter(); } void SampleEditor::tool_generateSquare(const FilterParameters* par) { if (isEmptySample()) return; pp_int32 sStart = selectionStart; pp_int32 sEnd = selectionEnd; if (hasValidSelection()) { if (sStart >= 0 && sEnd >= 0) { if (sEnd < sStart) { pp_int32 s = sEnd; sEnd = sStart; sStart = s; } } } else { sStart = 0; sEnd = sample->samplen; } preFilter(&SampleEditor::tool_generateSquare, par); mp_sint32 sLen = sEnd - sStart; prepareUndo(); pp_int32 i; const float numPeriods = par->getParameter(1).floatPart; const float amplify = par->getParameter(0).floatPart; // generate square wave here for (i = sStart; i < sEnd; i++) { float per = (i-sStart)/(float)sLen * numPeriods; float frac = per-(float)floor(per); setFloatSampleInWaveform(i, frac < 0.5f ? amplify : -amplify); } finishUndo(); postFilter(); } void SampleEditor::tool_generateTriangle(const FilterParameters* par) { if (isEmptySample()) return; pp_int32 sStart = selectionStart; pp_int32 sEnd = selectionEnd; if (hasValidSelection()) { if (sStart >= 0 && sEnd >= 0) { if (sEnd < sStart) { pp_int32 s = sEnd; sEnd = sStart; sStart = s; } } } else { sStart = 0; sEnd = sample->samplen; } preFilter(&SampleEditor::tool_generateTriangle, par); mp_sint32 sLen = sEnd - sStart; prepareUndo(); pp_int32 i; const float numPeriods = par->getParameter(1).floatPart; const float amplify = par->getParameter(0).floatPart; // generate triangle wave here for (i = sStart; i < sEnd; i++) { float per = (i-sStart)/(float)sLen * numPeriods; float frac = per-(float)floor(per); if (frac < 0.25f) setFloatSampleInWaveform(i, (frac*4.0f)*amplify); else if (frac < 0.75f) setFloatSampleInWaveform(i, (1.0f-(frac-0.25f)*4.0f)*amplify); else setFloatSampleInWaveform(i, (-1.0f+(frac-0.75f)*4.0f)*amplify); } finishUndo(); postFilter(); } void SampleEditor::tool_generateSawtooth(const FilterParameters* par) { if (isEmptySample()) return; pp_int32 sStart = selectionStart; pp_int32 sEnd = selectionEnd; if (hasValidSelection()) { if (sStart >= 0 && sEnd >= 0) { if (sEnd < sStart) { pp_int32 s = sEnd; sEnd = sStart; sStart = s; } } } else { sStart = 0; sEnd = sample->samplen; } preFilter(&SampleEditor::tool_generateSawtooth, par); mp_sint32 sLen = sEnd - sStart; prepareUndo(); pp_int32 i; const float numPeriods = par->getParameter(1).floatPart; const float amplify = par->getParameter(0).floatPart; // generate saw-tooth wave here for (i = sStart; i < sEnd; i++) { float per = (i-sStart)/(float)sLen * numPeriods; float frac = per-(float)floor(per); setFloatSampleInWaveform(i, frac < 0.5f ? (frac*2.0f)*amplify : (-1.0f+((frac-0.5f)*2.0f))*amplify); } finishUndo(); postFilter(); } bool SampleEditor::tool_canApplyLastFilter() const { return lastFilterFunc != NULL && isValidSample(); } void SampleEditor::tool_applyLastFilter() { if (lastFilterFunc) { if (lastParameters) { FilterParameters newPar(*lastParameters); (this->*lastFilterFunc)(&newPar); } else { (this->*lastFilterFunc)(NULL); } } } pp_uint32 SampleEditor::convertSmpPosToMillis(pp_uint32 pos, pp_int32 relativeNote/* = 0*/) { if (!isValidSample()) return 0; relativeNote+=sample->relnote; double c4spd = XModule::getc4spd(relativeNote, sample->finetune); return (pp_uint32)(((double)pos / c4spd) * 1000.0); } MilkyTracker-1.02.00/src/tracker/SampleEditor.h000066400000000000000000000243721324432207300212460ustar00rootroot00000000000000/* * tracker/SampleEditor.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * SampleEditor.h * MilkyTracker * * Created by Peter Barth on 22.11.07. * */ #ifndef __SAMPLEEDITOR_H__ #define __SAMPLEEDITOR_H__ #include "EditorBase.h" #include "Undo.h" #include "Singleton.h" struct TXMSample; class FilterParameters; class SampleEditor : public EditorBase { public: // clipboard class ClipBoard : public PPSingleton { private: mp_ubyte numBits; mp_sbyte* buffer; pp_int32 selectionStart; pp_int32 selectionEnd; pp_int32 selectionWidth; ClipBoard(); public: ~ClipBoard(); void makeCopy(TXMSample& sample, XModule& module, pp_int32 selectionStart, pp_int32 selectionEnd, bool cut = false); void paste(TXMSample& sample, XModule& module, pp_int32 pos); bool isEmpty() const { return buffer == NULL; } pp_int32 getWidth() const { return selectionWidth; } mp_sbyte getSampleByte(pp_int32 i) const { if (buffer == NULL || i > selectionWidth) return 0; if (numBits == 16) return *((mp_sword*)buffer + i) >> 8; else if (numBits == 8) return *(buffer + i); else ASSERT(false); return 0; } mp_sword getSampleWord(pp_int32 i) const { if (buffer == NULL || i > selectionWidth) return 0; if (numBits == 16) return *((mp_sword*)buffer + i); else if (numBits == 8) return *(buffer + i) << 8; else ASSERT(false); return 0; } friend class PPSingleton; }; // operations enum Operations { OperationRegular, OperationNew, OperationCut }; private: TXMSample* sample; TXMSample lastSample; // Current selection pp_int32 selectionStart, selectionEnd; // undo/redo information bool undoStackEnabled; bool undoStackActivated; UndoStackEntry::UserData undoUserData; SampleUndoStackEntry* before; PPUndoStack* undoStack; UndoHistory* undoHistory; bool lastOperationDidChangeSize; Operations lastOperation; bool drawing; pp_int32 lastSamplePos; void prepareUndo(); void finishUndo(); bool revoke(const SampleUndoStackEntry* stackEntry); void notifyChanges(bool condition, bool lazy = true); public: SampleEditor(); virtual ~SampleEditor(); // query status bool getLastOperationDidChangeSize() const { return lastOperationDidChangeSize; } Operations getLastOperation() const { return lastOperation; } void attachSample(TXMSample* sample, XModule* module); void reset(); TXMSample* getSample() { return sample; } pp_int32 getSampleLen() const { return sample ? sample->samplen : 0; } bool isValidSample() const { return sample != NULL; } bool isEmptySample() const; bool canMinimize() const; bool isEditableSample() const; void setSelectionStart(pp_int32 selectionStart) { this->selectionStart = selectionStart; } pp_int32& getSelectionStart() { return selectionStart; } void setSelectionEnd(pp_int32 selectionEnd) { this->selectionEnd = selectionEnd; } pp_int32& getSelectionEnd() { return selectionEnd; } pp_int32 getLogicalSelectionStart() const { if (selectionStart < 0 && selectionEnd < 0) return -1; pp_int32 selStart = selectionStart < selectionEnd ? selectionStart : selectionEnd; if (selStart < 0) selStart = 0; if (selStart > getSampleLen()) selStart = getSampleLen(); return selStart; } pp_int32 getLogicalSelectionEnd() const { if (selectionStart < 0 && selectionEnd < 0) return -1; pp_int32 selEnd = selectionEnd < selectionStart ? selectionStart : selectionEnd; if (selEnd < 0) selEnd = 0; if (selEnd > getSampleLen()) selEnd = getSampleLen(); return selEnd; } void resetSelection() { selectionStart = selectionEnd = -1; } pp_int32 getSelectionLength() const { return abs(selectionEnd - selectionStart); } bool hasValidSelection() const { return ((selectionStart >= 0 && selectionEnd >= 0) && (selectionStart != selectionEnd)); } void selectAll(); bool validate(); // --- Multilevel UNDO / REDO -------------------------------------------- void enableUndoStack(bool enable); bool isUndoStackEnabled() const { return undoStackEnabled; } void activateUndoStack(bool activate) { undoStackActivated = activate; } bool isUndoStackActivated() const { return undoStackActivated; } bool canUndo() const { if (undoStack && undoStackEnabled) return !undoStack->IsEmpty(); else return false; } bool canRedo() const { if (undoStack && undoStackEnabled) return !undoStack->IsTop(); else return false; } // undo last changes bool undo(); // redo last changes bool redo(); void setUndoUserData(const void* data, pp_uint32 dataLen) { this->undoUserData = UndoStackEntry::UserData((pp_uint8*)data, dataLen); } pp_uint32 getUndoUserDataLen() const { return undoUserData.getDataLen(); } const void* getUndoUserData() const { return (void*)undoUserData.getData(); } // --- clipboard operations ---------------------------------------------- bool canPaste() const; bool clipBoardIsEmpty() const { return ClipBoard::getInstance()->isEmpty(); } // work on sample attributes (not on the waveform, only on looping and flags) pp_uint32 getRepeatStart() const; pp_uint32 getRepeatEnd() const; pp_uint32 getRepeatLength() const; void setRepeatStart(pp_uint32 start); void setRepeatEnd(pp_uint32 end); void setRepeatLength(pp_uint32 length); bool increaseRepeatStart(); bool decreaseRepeatStart(); bool increaseRepeatLength(); bool decreaseRepeatLength(); bool setLoopType(pp_uint8 type); pp_uint8 getLoopType() const; bool is16Bit() const; pp_int32 getRelNoteNum() const; void increaseRelNoteNum(pp_int32 offset); pp_int32 getFinetune() const; void setFinetune(pp_int32 finetune); void setFT2Volume(pp_int32 vol); pp_int32 getFT2Volume() const; void setPanning(pp_int32 pan); pp_int32 getPanning() const; bool isEmpty() const { if (sample && !sample->sample) return true; else return false; } void startDrawing(); bool isDrawing() const { return drawing; } void drawSample(pp_int32 sampleIndex, float s); void endDrawing(); // --- operations -------------------------------------------------------- // this is just for convenience, it delegates to the appropriate tool code void minimizeSample(); void cropSample(); void clearSample(); void mixPasteSample(); void AMPasteSample(); void FMPasteSample(); void PHPasteSample(); void convertSampleResolution(bool convert); // remember to stop playing before using this void cut(); void copy(); void paste(); class WorkSample { private: XModule& module; pp_uint32 size; pp_uint32 numBits; pp_uint32 sampleRate; mp_ubyte* buffer; WorkSample(XModule& module, pp_uint32 size, pp_uint8 numBits, pp_uint32 sampleRate) : module(module), size(size), numBits(numBits), sampleRate(sampleRate) { pp_uint32 dataSize = (size * (pp_uint32)numBits) / 8; buffer = module.allocSampleMem(dataSize); } public: ~WorkSample() { if (buffer) module.freeSampleMem(buffer); } void* getBuffer() { return buffer; } pp_uint32 getSize() const { return size; } pp_uint8 getNumBits() const { return numBits; } pp_uint32 getSampleRate() const { return sampleRate; } friend class SampleEditor; }; WorkSample* createWorkSample(pp_uint32 size, pp_uint8 numBits, pp_uint32 sampleRate); void pasteOther(WorkSample& src); private: // -- sample tool stuff bool cutSampleInternal(); float getFloatSampleFromWaveform(pp_int32 index, void* source = NULL, pp_int32 size = 0); void setFloatSampleInWaveform(pp_int32 index, float singleSample, void* source = NULL); typedef void (SampleEditor::*TFilterFunc)(const FilterParameters* par); FilterParameters* lastParameters; TFilterFunc lastFilterFunc; void preFilter(TFilterFunc filterFuncPtr, const FilterParameters* par); void postFilter(); public: void tool_newSample(const FilterParameters* par); void tool_minimizeSample(const FilterParameters* par); void tool_cropSample(const FilterParameters* par); void tool_clearSample(const FilterParameters* par); void tool_mixPasteSample(const FilterParameters* par); void tool_AMPasteSample(const FilterParameters* par); void tool_FMPasteSample(const FilterParameters* par); void tool_PHPasteSample(const FilterParameters* par); // convert sample resolution void tool_convertSampleResolution(const FilterParameters* par); // filters void tool_scaleSample(const FilterParameters* par); void tool_normalizeSample(const FilterParameters* par); void tool_reverseSample(const FilterParameters* par); void tool_PTboostSample(const FilterParameters* par); bool isValidxFadeSelection(); void tool_xFadeSample(const FilterParameters* par); void tool_changeSignSample(const FilterParameters* par); void tool_swapByteOrderSample(const FilterParameters* par); void tool_resampleSample(const FilterParameters* par); void tool_DCNormalizeSample(const FilterParameters* par); void tool_DCOffsetSample(const FilterParameters* par); void tool_rectangularSmoothSample(const FilterParameters* par); void tool_triangularSmoothSample(const FilterParameters* par); void tool_eqSample(const FilterParameters* par,bool selective); void tool_eqSample(const FilterParameters* par); // generators void tool_generateSilence(const FilterParameters* par); void tool_generateNoise(const FilterParameters* par); void tool_generateSine(const FilterParameters* par); void tool_generateSquare(const FilterParameters* par); void tool_generateTriangle(const FilterParameters* par); void tool_generateSawtooth(const FilterParameters* par); void tool_applyLastFilter(); bool tool_canApplyLastFilter() const; pp_uint32 convertSmpPosToMillis(pp_uint32 pos, pp_int32 relativeNote = 0); }; #endif MilkyTracker-1.02.00/src/tracker/SampleEditorControl.cpp000066400000000000000000001472411324432207300231430ustar00rootroot00000000000000/* * tracker/SampleEditorControl.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "SampleEditorControl.h" #include "Screen.h" #include "GraphicsAbstract.h" #include "PPUIConfig.h" #include "ScrollBar.h" #include "ContextMenu.h" #include "Piano.h" #include "Tools.h" #include "TrackerConfig.h" #include "PlayerController.h" #include "DialogBase.h" #include #include #define SCROLLBARWIDTH SCROLLBUTTONSIZE mp_sint32 SampleEditorControl::getVisibleLength() { return sampleEditor->getSampleLen(); } float SampleEditorControl::calcScale(mp_sint32 len) { return ((float)len / (float)visibleWidth); } float SampleEditorControl::calcScale() { return calcScale(getVisibleLength()); } void SampleEditorControl::signalWaitState(bool b) { parentScreen->signalWaitState(b, *borderColor); //if (!b) // parentScreen->paint(); } SampleEditorControl::SampleEditorControl(pp_int32 id, PPScreen* parentScreen, EventListenerInterface* eventListener, const PPPoint& location, const PPSize& size, bool border/*= true*/) : PPControl(id, parentScreen, eventListener, location, size), border(border), borderColor(&ourOwnBorderColor), caughtControl(NULL), controlCaughtByLMouseButton(false), controlCaughtByRMouseButton(false), sampleEditor(NULL), xScale(1.0f), minScale(1.0f), selectionStartNew(-1), selectionEndNew(-1), selecting(-1), resizing(0), drawMode(false), selectionTicker(-1), relativeNote(0), offsetFormat(OffsetFormatHex) { // default color backgroundColor.set(0, 0, 0); ourOwnBorderColor.set(192, 192, 192); hScrollbar = new PPScrollbar(0, parentScreen, this, PPPoint(location.x, location.y + size.height - SCROLLBARWIDTH - 1), size.width - 1, true); currentPosition.x = currentPosition.y = -1; currentOffset = -1; startPos = 0; visibleWidth = size.width - 4; visibleHeight = size.height - SCROLLBARWIDTH - 4; scrollDist = (3298*visibleWidth) >> 16; adjustScrollbars(); showMarks = new ShowMark[TrackerConfig::maximumPlayerChannels]; for (pp_int32 i = 0; i < TrackerConfig::maximumPlayerChannels; i++) { showMarks[i].pos = -1; showMarks[i].intensity = 0; showMarks[i].panning = 128; } // build submenu static const char* seperatorStringLarge = "\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4"; static const char* seperatorStringMed = "\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4"; subMenuAdvanced = new PPContextMenu(5, parentScreen, this, PPPoint(0,0), TrackerConfig::colorThemeMain); subMenuAdvanced->setSubMenu(true); subMenuAdvanced->addEntry("Volume boost" PPSTR_PERIODS, MenuCommandIDVolumeBoost); subMenuAdvanced->addEntry("Volume fade" PPSTR_PERIODS, MenuCommandIDVolumeFade); subMenuAdvanced->addEntry("Normalize", MenuCommandIDNormalize); subMenuAdvanced->addEntry(seperatorStringLarge, -1); subMenuAdvanced->addEntry("Backwards", MenuCommandIDReverse); subMenuAdvanced->addEntry("Cross-fade", MenuCommandIDXFade); subMenuAdvanced->addEntry(seperatorStringLarge, -1); subMenuAdvanced->addEntry("Change sign", MenuCommandIDChangeSign); subMenuAdvanced->addEntry("Swap byte order", MenuCommandIDSwapByteOrder); subMenuAdvanced->addEntry(seperatorStringLarge, -1); subMenuAdvanced->addEntry("DC normalize", MenuCommandIDDCNormalize); subMenuAdvanced->addEntry("DC offset" PPSTR_PERIODS, MenuCommandIDDCOffset); subMenuAdvanced->addEntry(seperatorStringLarge, -1); subMenuAdvanced->addEntry("Smooth (rect.)", MenuCommandIDRectangularSmooth); subMenuAdvanced->addEntry("Smooth (tri.)", MenuCommandIDTriangularSmooth); subMenuAdvanced->addEntry("3 Band EQ" PPSTR_PERIODS, MenuCommandIDEQ3Band); subMenuAdvanced->addEntry("10 Band EQ" PPSTR_PERIODS, MenuCommandIDEQ10Band); subMenuAdvanced->addEntry(seperatorStringLarge, -1); subMenuAdvanced->addEntry("Resample" PPSTR_PERIODS, MenuCommandIDResample); subMenuXPaste = new PPContextMenu(8, parentScreen, this, PPPoint(0,0), TrackerConfig::colorThemeMain); subMenuXPaste->setSubMenu(true); subMenuXPaste->addEntry("Mix", MenuCommandIDMixPaste); subMenuXPaste->addEntry("Amp Modulate", MenuCommandIDAMPaste); subMenuXPaste->addEntry("Freq Modulate", MenuCommandIDFMPaste); subMenuXPaste->addEntry("Phase Modulate", MenuCommandIDPHPaste); subMenuXPaste->addEntry("Selective EQ" PPSTR_PERIODS, MenuCommandIDSelectiveEQ10Band); subMenuPT = new PPContextMenu(6, parentScreen, this, PPPoint(0,0), TrackerConfig::colorThemeMain); subMenuPT->addEntry("Boost", MenuCommandIDPTBoost); subMenuGenerators = new PPContextMenu(7, parentScreen, this, PPPoint(0,0), TrackerConfig::colorThemeMain); subMenuGenerators->addEntry("Noise" PPSTR_PERIODS, MenuCommandIDGenerateNoise); subMenuGenerators->addEntry("Sine" PPSTR_PERIODS, MenuCommandIDGenerateSine); subMenuGenerators->addEntry("Square" PPSTR_PERIODS, MenuCommandIDGenerateSquare); subMenuGenerators->addEntry("Triangle" PPSTR_PERIODS, MenuCommandIDGenerateTriangle); subMenuGenerators->addEntry("Sawtooth" PPSTR_PERIODS, MenuCommandIDGenerateSawtooth); subMenuGenerators->addEntry("Silence" PPSTR_PERIODS, MenuCommandIDGenerateSilence); // build context menu editMenuControl = new PPContextMenu(4, parentScreen, this, PPPoint(0,0), TrackerConfig::colorThemeMain, true); editMenuControl->addEntry("New" PPSTR_PERIODS, MenuCommandIDNew); editMenuControl->addEntry(seperatorStringMed, -1); editMenuControl->addEntry("Undo", MenuCommandIDUndo); editMenuControl->addEntry("Redo", MenuCommandIDRedo); editMenuControl->addEntry(seperatorStringMed, -1); editMenuControl->addEntry("Cut", MenuCommandIDCut); editMenuControl->addEntry("Copy", MenuCommandIDCopy); editMenuControl->addEntry("Paste", MenuCommandIDPaste); editMenuControl->addEntry("Crop", MenuCommandIDCrop); editMenuControl->addEntry("Range all", MenuCommandIDSelectAll); editMenuControl->addEntry(seperatorStringMed, -1); editMenuControl->addEntry("Advanced \x10", 0xFFFF, subMenuAdvanced); editMenuControl->addEntry("Ext. Paste \x10", 0xFFFF, subMenuXPaste); editMenuControl->addEntry("Protracker \x10", 0xFFFF, subMenuPT); editMenuControl->addEntry("Generators \x10", 0xFFFF, subMenuGenerators); // Create tool handler responder toolHandlerResponder = new ToolHandlerResponder(*this); dialog = NULL; resetLastValues(); } SampleEditorControl::~SampleEditorControl() { if (sampleEditor) sampleEditor->removeNotificationListener(this); delete dialog; delete toolHandlerResponder; delete[] showMarks; delete hScrollbar; delete editMenuControl; delete subMenuAdvanced; delete subMenuXPaste; delete subMenuPT; delete subMenuGenerators; } void SampleEditorControl::drawLoopMarker(PPGraphicsAbstract* g, pp_int32 x, pp_int32 y, bool down, const pp_int32 size) { PPColor bColor = *borderColor, dColor = *borderColor; // adjust dark color dColor.scaleFixed(32768); // adjust bright color bColor.scaleFixed(87163); if (down) { for (mp_sint32 j = 0; j <= size; j++) for (mp_sint32 i = 0; i < (size*2+1)-j*2; i++) { if (i == 0) g->setColor(bColor); else if (i == (size*2+1)-j*2 - 1) g->setColor(dColor); else g->setColor(j == 0 ? bColor : *borderColor); g->setPixel(x+i+j,y+j); } } else { for (mp_sint32 j = size; j >= 0; j--) for (mp_sint32 i = 0; i < (size*2+1)-j*2; i++) { if (i == 0) g->setColor(bColor); else if (i == (size*2+1)-j*2 - 1) g->setColor(dColor); else g->setColor(j == 0 ? dColor : *borderColor); g->setPixel(x+i+j,y+size-j); } } } pp_uint32 SampleEditorControl::getRepeatStart() const { if (selecting > 0) { if (currentRepeatStart < 0) return 0; else if (currentRepeatStart > sampleEditor->getSampleLen()) return sampleEditor->getSampleLen(); return currentRepeatStart; } return sampleEditor->getRepeatStart(); } pp_uint32 SampleEditorControl::getRepeatLength() const { if (selecting > 0) { pp_int32 loopend = currentRepeatStart + currentRepeatLength; if (loopend < 0) return 0; else if (loopend > sampleEditor->getSampleLen()) return sampleEditor->getSampleLen() - currentRepeatStart; return currentRepeatLength; } return sampleEditor->getRepeatLength(); } void SampleEditorControl::formatMillis(char* buffer, pp_uint32 millis) { if (millis >= 1000) { pp_uint32 secs = millis / 1000; millis %= 1000; if (secs >= 60) { pp_uint32 mins = secs / 60; secs %= 60; sprintf(buffer, "%im%i.%is", mins, secs, millis); } else sprintf(buffer, "%i.%is", secs, millis); } else sprintf(buffer, "%ims", millis); } void SampleEditorControl::formatMillisFraction(char* buffer, pp_uint32 millis, pp_uint32 totalMillis) { if (totalMillis >= 1000) { pp_uint32 secs = millis / 1000; pp_uint32 totalSecs = totalMillis / 1000; millis %= 1000; totalMillis %= 1000; if (totalSecs >= 60) { pp_uint32 mins = secs / 60; pp_uint32 totalMins = totalSecs / 60; secs %= 60; totalSecs %= 60; sprintf(buffer, "%im%i.%is / %im%i.%is", mins, secs, millis, totalMins, totalSecs, totalMillis); } else sprintf(buffer, "%i.%is / %i.%is", secs, millis, totalSecs, totalMillis); } else sprintf(buffer, "%ims / %ims", millis, totalMillis); } void SampleEditorControl::paint(PPGraphicsAbstract* g) { if (!isVisible()) return; PPColor bColor = *borderColor, dColor = *borderColor; // adjust dark color dColor.scaleFixed(32768); // adjust bright color bColor.scaleFixed(87163); pp_int32 xOffset = 2; pp_int32 yOffset = 2; g->setRect(location.x, location.y, location.x + size.width, location.y + size.height); g->setColor(backgroundColor); g->fill(); pp_int32 sStart = sampleEditor->getLogicalSelectionStart(); pp_int32 sEnd = sampleEditor->getLogicalSelectionEnd(); TXMSample* sample = sampleEditor->getSample(); if (sample && sample->sample) { if (sEnd >= 0) { if (sEnd >= (signed)sample->samplen) sEnd = sample->samplen; if (sStart < (signed)sample->samplen) { pp_int32 x1 = (pp_int32)((sStart)/xScale)-startPos; pp_int32 x2 = (pp_int32)((sEnd)/xScale)+1-startPos; if (x1 < visibleWidth && x2 > 0) { if (x1 < 0) x1 = 0; if (x2 > visibleWidth) x2 = visibleWidth; g->setRect(location.x + xOffset + x1, location.y + yOffset - 1, location.x + xOffset + x2, location.y + yOffset + visibleHeight); PPColor destColor(PPUIConfig::getInstance()->getColor(PPUIConfig::ColorSelection)); PPColor sourceColor(destColor.r>>1,destColor.g>>1,destColor.b>>1); PPRect rect(location.x + xOffset + x1, location.y + yOffset - 1, location.x + xOffset + x2, location.y + yOffset - 1 + visibleHeight/2); g->fillVerticalShaded(rect, sourceColor, destColor, false); rect.y1+=visibleHeight/2; rect.y2+=visibleHeight/2; g->fillVerticalShaded(rect, sourceColor, destColor, true); } } } } g->setRect(location.x, location.y, location.x + size.width, location.y + size.height); if (border) { drawBorder(g, *borderColor); // Add some more lines to surround scroll bar g->setColor(dColor); g->drawHLine(location.x + 1, location.x + size.width - 1, location.y + size.height - 3 - SCROLLBARWIDTH); g->setColor(bColor); g->drawHLine(location.x, location.x + size.width, location.y + size.height - 2 - SCROLLBARWIDTH); } hScrollbar->paint(g); g->setRect(location.x + 2, location.y + 2, location.x + 2 + visibleWidth, location.y + 2 + visibleHeight); g->setColor(255, 255, 255); g->drawHLine(location.x + xOffset, location.x + xOffset + visibleWidth, location.y + xOffset + (visibleHeight>>1)); if (!sampleEditor->isEditableSample()) return; xOffset+=location.x; yOffset+=location.y + (visibleHeight>>1); bool sel = (sEnd >= 0 || sStart >= 0); float scale = (sample->type & 16) ? 1.0f/(32768.0f / ((visibleHeight-4)/2)) : 1.0f/(128.0f / ((visibleHeight-4)/2)); mp_sint32 lasty = -(pp_int32)(sample->getSampleValue((pp_int32)(startPos*xScale))*scale); g->setColor(*borderColor); g->setPixel(xOffset, yOffset); for (mp_sint32 x = 1; x < visibleWidth; x++) { if ((pp_int32)((startPos+x)*xScale) < getVisibleLength()) { if (sel && x >= (pp_int32)((sStart/xScale)-startPos) && x <= (pp_int32)((sEnd/xScale)-startPos) && (selectionTicker == -1)) { g->setColor(255-dColor.r,255-dColor.g,255-dColor.b); g->setPixel(xOffset + x, yOffset); g->setColor(255, 255, 255); } else { g->setColor(*borderColor); g->setPixel(xOffset + x, yOffset); g->setColor(TrackerConfig::colorSampleEditorWaveform); } float findex = ((startPos+x)*xScale); pp_int32 index = (pp_int32)(floor(findex)); pp_int32 index2 = index+1; if (index2 >= (signed)sample->samplen) index2 = sample->samplen-1; float t = findex - index; mp_sint32 y1 = -(mp_sint32)((sample->getSampleValue(index))*scale); mp_sint32 y2 = -(mp_sint32)((sample->getSampleValue(index2))*scale); mp_sint32 y = (mp_sint32)((1.0f-t) * y1 + t * y2); g->drawLine(xOffset + x-1, yOffset + lasty, xOffset + x, yOffset + y); lasty = y; } } for (pp_int32 sm = 0; sm < TrackerConfig::maximumPlayerChannels; sm++) { pp_int32 showMark = showMarks[sm].pos; if (!showMarks[sm].intensity || showMark == -1) continue; pp_int32 shade = 256; pp_int32 panning = showMarks[sm].panning; if (showMark >= 0 && showMark <= (signed)sample->samplen && shade) { pp_int32 x = (pp_int32)((showMark/xScale)-startPos); g->setColor((255*shade)>>8, ((255-panning)*shade)>>8, (panning*shade)>>8); g->drawVLine(yOffset - (visibleHeight>>1), yOffset + (visibleHeight>>1)-2, xOffset+x); } } if (sample->type & 3) { float myxScale = xScale/*(xScale*sample->samplen) / (float)(sample->samplen-1)*/; pp_int32 loopstart = getRepeatStart(); pp_int32 looplen = getRepeatLength(); pp_int32 x = (pp_int32)(loopstart/myxScale)-startPos; pp_int32 x2 = (pp_int32)((loopstart+looplen)/myxScale)-startPos/* - 1*/; g->setColor(255, 128, 64); g->drawVLine(yOffset - (visibleHeight>>1), yOffset + (visibleHeight>>1)-2, xOffset+x); if (x2 < x) x2 = x; // if the loop marker is exactly on the border of this client area // it's better to make it visible if (xOffset+x2 >= location.x + size.width-2 && xOffset+x2 <= location.x + size.width) x2 = visibleWidth-1; g->drawVLine(yOffset - (visibleHeight>>1), yOffset + (visibleHeight>>1)-2, xOffset+x2); drawLoopMarker(g, xOffset+x - 6, yOffset - (visibleHeight>>1), true, 6); drawLoopMarker(g, xOffset+x2 - 6, yOffset + (visibleHeight>>1) - 9, false, 6); } // loop markers beneath range text char buffer[32]; if (offsetFormat == OffsetFormatHex) sprintf(buffer, "%x", (mp_sint32)ceil(startPos*xScale)); else if (offsetFormat == OffsetFormatDec) sprintf(buffer, "%d", (mp_sint32)ceil(startPos*xScale)); else if (offsetFormat == OffsetFormatMillis) { pp_uint32 millis = sampleEditor->convertSmpPosToMillis((mp_sint32)ceil(startPos*xScale), relativeNote); formatMillis(buffer, millis); } PPFont* font = PPFont::getFont(PPFont::FONT_TINY); g->setFont(font); g->setColor(0, 0, 0); g->drawString(buffer, location.x + 3, location.y + visibleHeight - font->getCharHeight() + 1); g->setColor(255, 0, 255); g->drawString(buffer, location.x + 2, location.y + visibleHeight - font->getCharHeight()); mp_sint32 end = (mp_sint32)ceil((startPos+visibleWidth)*xScale); if (end > sampleEditor->getSampleLen()) end = sampleEditor->getSampleLen(); if (currentPosition.x >= 0 && currentPosition.y >= 0) { if (offsetFormat == OffsetFormatHex) sprintf(buffer, "%x / %x", positionToSample(currentPosition), end); else if (offsetFormat == OffsetFormatDec) sprintf(buffer, "%d / %d", positionToSample(currentPosition), end); else if (offsetFormat == OffsetFormatMillis) { pp_uint32 millis = sampleEditor->convertSmpPosToMillis(positionToSample(currentPosition), relativeNote); pp_uint32 totalMillis = sampleEditor->convertSmpPosToMillis(end, relativeNote); formatMillisFraction(buffer, millis, totalMillis); } } else { if (offsetFormat == OffsetFormatHex) sprintf(buffer, "%x", end); else if (offsetFormat == OffsetFormatDec) sprintf(buffer, "%d", end); else if (offsetFormat == OffsetFormatMillis) { pp_uint32 totalMillis = sampleEditor->convertSmpPosToMillis(end, relativeNote); formatMillis(buffer, totalMillis); } } g->setColor(0, 0, 0); g->drawString(buffer, location.x + 3 + visibleWidth - font->getStrWidth(buffer), location.y + 3); g->setColor(255, 0, 255); g->drawString(buffer, location.x + 2 + visibleWidth - font->getStrWidth(buffer), location.y + 2); // Draw sample offset cursor is nearest to if ((::getKeyModifier() & KeyModifierCTRL) && currentPosition.x >= 0 && currentPosition.y >= 0) { // Round to next lowest 256 samples mp_sint32 offsetLeft = positionToSample(currentPosition) & ~0xFF; mp_sint32 offsetRight = std::min(offsetLeft + 256, 65535); if (offsetLeft >> 8 <= 0xFF) { mp_uint32 xLeft = currentPosition.x; mp_uint32 xRight = currentPosition.x; // Find nearest sample to cursor that is a multiple of 256 while (xLeft > 0 && positionToSample(PPPoint(xLeft, 0)) >= offsetLeft) xLeft--; while (xRight < visibleWidth & positionToSample(PPPoint(xRight, 0)) < offsetRight) xRight++; bool useLower = currentPosition.x - xLeft < xRight - currentPosition.x || xRight >= visibleWidth || positionToSample(PPPoint(xRight, 0)) >= 65535; currentOffset = useLower ? offsetLeft : offsetRight; // Draw vertical line mp_sint32 offsetMarkerX = useLower ? xLeft + 1 : xRight; g->setColor(0, 255, 0); for (pp_int32 j = 0; j < visibleHeight; j+=2) g->setPixel(offsetMarkerX, j + location.y); // Draw value for 9xx command sprintf(buffer, "Offset: %02x", currentOffset >> 8); g->setColor(0, 0, 0); g->drawString(buffer, location.x + 3 + visibleWidth - font->getStrWidth(buffer), location.y + font->getCharHeight() * 2 - 1); g->setColor(0, 255, 0); g->drawString(buffer, location.x + 2 + visibleWidth - font->getStrWidth(buffer), location.y + font->getCharHeight() * 2 - 2); } else { currentOffset = -1; } } } bool SampleEditorControl::hitsLoopstart(const PPPoint* p) { pp_int32 cx = (pp_int32)(location.x + (sampleEditor->getRepeatStart()/xScale)-startPos); pp_int32 cy = (pp_int32)(location.y + 5); return (p->x >= cx - 7 && p->x <= cx + 7 && p->y >= cy - 5 && p->y <= cy + 8 && sampleEditor->getLoopType()); } bool SampleEditorControl::hitsLoopend(const PPPoint* p) { pp_int32 cx2 = (pp_int32)(location.x + (sampleEditor->getRepeatEnd()/xScale)-startPos); pp_int32 cy2 = (pp_int32)(location.y + 2 + visibleHeight - 6); return (p->x >= cx2 - 7 && p->x <= cx2 + 7 && p->y >= cy2 - 5 && p->y <= cy2 + 5 && sampleEditor->getLoopType()); } void SampleEditorControl::startMarkerDragging(const PPPoint* p) { if (hitsLoopstart(p)) { selecting = 1; } else if (hitsLoopend(p)) { selecting = 2; } else { switch (parentScreen->getCurrentActiveMouseCursor()) { case MouseCursorTypeStandard: if (::getKeyModifier() == KeyModifierCTRL) { selecting = -1; resizing = 0; break; } selectionStartNew = selectionEndNew = positionToSample(*p); selecting = 0; resizing = 0; break; case MouseCursorTypeResizeLeft: selectionStartNew = positionToSample(*p); selecting = -1; resizing = 1; break; case MouseCursorTypeResizeRight: selectionEndNew = positionToSample(*p); selecting = -1; resizing = 2; break; case MouseCursorTypeHand: selectionStartNew = sampleEditor->getSelectionStart(); selectionEndNew = sampleEditor->getSelectionEnd(); selectionDragPivot = positionToSample(*p); selecting = -1; resizing = 3; break; case MouseCursorTypeWait: break; } } if (selecting >= 0) { currentRepeatStart = sampleEditor->getRepeatStart(); currentRepeatLength = sampleEditor->getRepeatLength();; } } void SampleEditorControl::endMarkerDragging() { if (resizing) parentScreen->setMouseCursor(MouseCursorTypeStandard); else { if (selectionStartNew != -1) sampleEditor->setSelectionStart(selectionStartNew); if (selectionEndNew != -1) sampleEditor->setSelectionEnd(selectionEndNew); } // see if something has been changed after the loop markers have been dragged around if (selecting >= 0 && (currentRepeatStart != (signed)sampleEditor->getRepeatStart() || currentRepeatLength != (signed)sampleEditor->getRepeatLength())) { sampleEditor->setRepeatStart(currentRepeatStart); sampleEditor->setRepeatLength(currentRepeatLength); notifyChanges(); } selecting = -1; resizing = 0; } pp_int32 SampleEditorControl::dispatchEvent(PPEvent* event) { if (eventListener == NULL) return -1; switch (event->getID()) { case eRMouseDown: { invokeContextMenuLabel: PPPoint* p = (PPPoint*)event->getDataPtr(); if (!hScrollbar->hit(*p)) { endMarkerDragging(); invokeContextMenu(*p); } else { if (controlCaughtByLMouseButton) break; controlCaughtByRMouseButton = true; caughtControl = hScrollbar; caughtControl->dispatchEvent(event); } break; } case eLMouseDown: { hasDragged = false; PPPoint* p = (PPPoint*)event->getDataPtr(); // Clicked on horizontal scrollbar -> route event to scrollbar and catch scrollbar control if (hScrollbar->hit(*p)) { if (controlCaughtByRMouseButton) break; controlCaughtByLMouseButton = true; caughtControl = hScrollbar; caughtControl->dispatchEvent(event); } // Ctrl-clicked sample view else if (::getKeyModifier() == KeyModifierCTRL) { PPEvent e = PPEvent(eLMouseDown, currentOffset); eventListener->handleEvent(reinterpret_cast(this), &e); } // Clicked on sample data -> select sample data else { selectionTicker = 0; if (!sampleEditor->isEditableSample()) { selecting = -1; break; } // start drawing if (drawMode || (::getKeyModifier() == KeyModifierSHIFT)) { PPPoint* p = (PPPoint*)event->getDataPtr(); sampleEditor->startDrawing(); drawSample(*p); notifyUpdate(); break; } startMarkerDragging(p); } break; } case eRMouseUp: { controlCaughtByRMouseButton = false; if (caughtControl && !controlCaughtByLMouseButton && !controlCaughtByRMouseButton) { caughtControl->dispatchEvent(event); caughtControl = NULL; break; } break; } case eLMouseUp: { selectionTicker = -1; controlCaughtByLMouseButton = false; if (caughtControl && !controlCaughtByLMouseButton && !controlCaughtByRMouseButton) { caughtControl->dispatchEvent(event); caughtControl = NULL; } // Ctrl-released sample view else if (::getKeyModifier() == KeyModifierCTRL) { PPEvent e = PPEvent(eLMouseUp); eventListener->handleEvent(reinterpret_cast(this), &e); } else { if (drawMode || sampleEditor->isDrawing()) { sampleEditor->endDrawing(); break; } endMarkerDragging(); validate(false); notifyUpdate(); } selectionStartNew = selectionEndNew = -1; break; } case eLMouseRepeat: { // Clicked on horizontal scrollbar -> route event to scrollbar and catch scrollbar control if (caughtControl && controlCaughtByLMouseButton) { caughtControl->dispatchEvent(event); break; } PPPoint* p = (PPPoint*)event->getDataPtr(); currentPosition = *p; // check context menu stuff first // for slowing down mouse pressed events if (selectionTicker >= 0) selectionTicker++; // no selection has been made or mouse hasn't been dragged // mouse hasn't been dragged and selection ticker has reached threshold value if (selecting <= 0 && !hasDragged && selectionTicker > 0 && getKeyModifier() == 0) { selecting = -1; selectionTicker = -1; goto invokeContextMenuLabel; } // now check other stuff pp_int32 ldist = p->x - (location.x+2); pp_int32 rdist = (location.x + size.width) - p->x; if (rdist < scrollDist) { pp_int32 visibleItems = visibleWidth; startPos += (visibleWidth>>6); if (startPos + visibleItems > (signed)getMaxWidth()) startPos = getMaxWidth()-visibleItems; if (startPos < 0) startPos = 0; float v = (float)(getMaxWidth() - visibleItems); hScrollbar->setBarPosition((pp_int32)(startPos*(65536.0f/v))); goto selectingAndResizing; } else if (ldist < scrollDist) { pp_int32 visibleItems = visibleWidth; startPos -= (visibleWidth>>6); if (startPos < 0) startPos = 0; float v = (float)(getMaxWidth() - visibleItems); hScrollbar->setBarPosition((pp_int32)(startPos*(65536.0f/v))); goto selectingAndResizing; } break; } case eLMouseDrag: { if (caughtControl && controlCaughtByLMouseButton) { caughtControl->dispatchEvent(event); break; } hasDragged = true; selectionTicker = -1; if (drawMode || (sampleEditor->isDrawing() && (::getKeyModifier() & KeyModifierSHIFT))) { drawSample(*(PPPoint*)event->getDataPtr()); notifyUpdate(); break; } // apply new start / end if (selectionStartNew != -1) { sampleEditor->setSelectionStart(selectionStartNew); selectionStartNew = -1; } if (selectionEndNew != -1) { sampleEditor->setSelectionEnd(selectionEndNew); selectionEndNew = -1; } selectingAndResizing: // Moving selection end if (selecting == 0) { sampleEditor->setSelectionEnd(positionToSample(*(PPPoint*)event->getDataPtr())); } // Moving loop start else if (selecting == 1 && sampleEditor->isEditableSample()) { // Moving both loop points at the same time if (::getKeyModifier() == KeyModifierALT) { parentScreen->setMouseCursor(MouseCursorTypeHand); currentRepeatStart = positionToSample(*(PPPoint*)event->getDataPtr()); } // only move start else if (!::getKeyModifier()) { pp_int32 loopend = currentRepeatStart + currentRepeatLength; pp_int32 loopstart = positionToSample(*(PPPoint*)event->getDataPtr()); if (loopstart < loopend) { currentRepeatLength = loopend - loopstart; currentRepeatStart = loopstart; } } } // Moving loop end else if (selecting == 2 && sampleEditor->isEditableSample()) { // Moving both loop points at the same time if (::getKeyModifier() == KeyModifierALT) { pp_int32 loopend = positionToSample(*(PPPoint*)event->getDataPtr()); currentRepeatStart = loopend - currentRepeatLength; } // only move end else if (!::getKeyModifier()) { pp_int32 loopend = positionToSample(*(PPPoint*)event->getDataPtr()); pp_int32 loopstart = currentRepeatStart; if (loopstart < loopend) { currentRepeatLength = loopend - loopstart; currentRepeatStart = loopstart; } } } else if (resizing) { switch (resizing) { case 1: parentScreen->setMouseCursor(MouseCursorTypeResizeLeft); sampleEditor->setSelectionStart(positionToSample(*(PPPoint*)event->getDataPtr())); break; case 2: parentScreen->setMouseCursor(MouseCursorTypeResizeRight); sampleEditor->setSelectionEnd(positionToSample(*(PPPoint*)event->getDataPtr())); break; case 3: { parentScreen->setMouseCursor(MouseCursorTypeHand); mp_sint32 delta = selectionDragPivot - positionToSample(*(PPPoint*)event->getDataPtr()); sampleEditor->getSelectionEnd() -= delta; sampleEditor->getSelectionStart() -= delta; selectionDragPivot = positionToSample(*(PPPoint*)event->getDataPtr()); break; } } } else { break; } currentPosition = *(PPPoint*)event->getDataPtr(); notifyUpdate(); break; } case eRMouseDrag: { if (caughtControl && controlCaughtByRMouseButton) caughtControl->dispatchEvent(event); break; } case eRMouseRepeat: { if (caughtControl && controlCaughtByRMouseButton) caughtControl->dispatchEvent(event); break; } // mouse wheel case eMouseWheelMoved: { TMouseWheelEventParams* params = (TMouseWheelEventParams*)event->getDataPtr(); // Horizontal scrolling takes priority over vertical scrolling (zooming) and is // mutually exclusive so that we are less likely to accidentally zoom while scrolling. // For compatibility for mice without horizontal scroll, SHIFT + vertical scroll is // treated as a synonym for horizontal scroll. bool shiftHeld = (::getKeyModifier() & KeyModifierSHIFT); if (params->deltaX || (params->deltaY && shiftHeld)) { pp_int32 delta = shiftHeld? params->deltaY : params->deltaX; // Deltas greater than 1 generate multiple events for scroll acceleration PPEvent e = delta > 0 ? PPEvent(eBarScrollDown) : PPEvent(eBarScrollUp); delta = abs(delta); delta = delta > 20 ? 20 : delta; while (delta) { handleEvent(reinterpret_cast(hScrollbar), &e); delta--; } } else if (params->deltaY) { if (invertMWheelZoom) { params->deltaY = -params->deltaY; } params->deltaY > 0 ? scrollWheelZoomOut(¶ms->pos) : scrollWheelZoomIn(¶ms->pos); } event->cancel(); break; } case eMouseMoved: { PPPoint* p = (PPPoint*)event->getDataPtr(); currentPosition = *p; MouseCursorTypes type = parentScreen->getCurrentActiveMouseCursor(); // check for loop marker distance if (hitsLoopstart(p) && ::getKeyModifier() == KeyModifierALT) { type = MouseCursorTypeHand; } else if (hitsLoopend(p) && ::getKeyModifier() == KeyModifierALT) { type = MouseCursorTypeHand; } else { type = MouseCursorTypeStandard; if (hasValidSelection()) { pp_int32 sStart = sampleEditor->getLogicalSelectionStart(); pp_int32 sEnd = sampleEditor->getLogicalSelectionEnd(); pp_int32 x1 = (pp_int32)((sStart)/xScale)-startPos + location.x + 2; pp_int32 x2 = (pp_int32)((sEnd)/xScale)-startPos + location.x + 2; pp_int32 minDist = (scrollDist>>4); if (minDist < 1) minDist = 1; pp_int32 sDist1 = abs(x1 - p->x); pp_int32 sDist2 = abs(p->x - x2); if (sDist1 >= 0 && sDist1 <= minDist && (::getKeyModifier() == KeyModifierCTRL)) { type = MouseCursorTypeResizeLeft; } else if (sDist2 >= 0 && sDist2 <= minDist && (::getKeyModifier() == KeyModifierCTRL)) { type = MouseCursorTypeResizeRight; } else if ((p->x >= x1) && (p->x <= x2) && (::getKeyModifier() == KeyModifierALT)) { type = MouseCursorTypeHand; } } } if (type != parentScreen->getCurrentActiveMouseCursor()) parentScreen->setMouseCursor(type); parentScreen->paintControl(this); break; } case eMouseEntered: parentScreen->setMouseCursor(MouseCursorTypeStandard); break; case eMouseLeft: parentScreen->setMouseCursor(MouseCursorTypeStandard); currentPosition.x = currentPosition.y = -1; currentOffset = -1; parentScreen->paintControl(this); break; default: if (caughtControl == NULL) break; caughtControl->dispatchEvent(event); break; } return 0; } pp_int32 SampleEditorControl::handleEvent(PPObject* sender, PPEvent* event) { // Horizontal scrollbar, scroll up (=left) if (sender == reinterpret_cast(hScrollbar) && event->getID() == eBarScrollUp) { pp_int32 visibleItems = visibleWidth; startPos -= (visibleWidth>>6); if (startPos < 0) startPos = 0; float v = (float)(getMaxWidth() - visibleItems); hScrollbar->setBarPosition((pp_int32)(startPos*(65536.0f/v))); } // Horizontal scrollbar, scroll down (=right) else if (sender == reinterpret_cast(hScrollbar) && event->getID() == eBarScrollDown) { pp_int32 visibleItems = visibleWidth; startPos += (visibleWidth>>6); if (startPos + visibleItems > (signed)getMaxWidth()) { startPos = getMaxWidth()-visibleItems; if (startPos < 0) startPos = 0; } float v = (float)(getMaxWidth() - visibleItems); hScrollbar->setBarPosition((pp_int32)(startPos*(65536.0f/v))); } // Horizontal scrollbar, position changed else if (sender == reinterpret_cast(hScrollbar) && event->getID() == eBarPosChanged) { float pos = hScrollbar->getBarPosition()/65536.0f; pp_int32 visibleItems = visibleWidth; float v = (float)(getMaxWidth() - visibleItems); startPos = (pp_uint32)(v*pos); } else if ((sender == reinterpret_cast(editMenuControl) || sender == reinterpret_cast(subMenuAdvanced) || sender == reinterpret_cast(subMenuXPaste) || sender == reinterpret_cast(subMenuPT) || sender == reinterpret_cast(subMenuGenerators)) && event->getID() == eCommand) { executeMenuCommand(*((pp_int32*)event->getDataPtr())); return 0; } parentScreen->paintControl(this); return 0; } void SampleEditorControl::setSize(const PPSize& size) { PPControl::setSize(size); hScrollbar->setSize(size.width - 1); } void SampleEditorControl::setLocation(const PPPoint& location) { PPControl::setLocation(location); hScrollbar->setLocation(PPPoint(location.x, location.y + size.height - SCROLLBARWIDTH - 1)); } pp_int32 SampleEditorControl::getMaxWidth() { if (sampleEditor == NULL || sampleEditor->isEmptySample()) return 1; return (pp_int32)(getVisibleLength()/xScale); } void SampleEditorControl::adjustScrollbars() { float s = (float)visibleWidth / (float)getMaxWidth(); float olds = hScrollbar->getBarSize() / 65536.0f; hScrollbar->setBarSize((pp_int32)(s*65536.0f), false); s = hScrollbar->getBarSize() / 65536.0f; float scale = s / olds; float pos = hScrollbar->getBarPosition()/65536.0f; hScrollbar->setBarPosition((pp_int32)(pos*scale*65536.0f)); pos = hScrollbar->getBarPosition()/65536.0f; pp_int32 visibleItems = visibleWidth; float v = (float)(getMaxWidth() - visibleItems); startPos = (pp_uint32)(v*pos); if (startPos < 0) { startPos = 0; } } pp_int32 SampleEditorControl::positionToSample(PPPoint cp) { translateCoordinates(cp); if (cp.y < 0) cp.y = 0; if (cp.y >= visibleHeight) cp.y = visibleHeight - 1; pp_int32 smppos = (pp_int32)((cp.x + startPos)*xScale); if (smppos < 0) smppos = 0; if (smppos > sampleEditor->getSampleLen()) smppos = sampleEditor->getSampleLen(); return smppos; } void SampleEditorControl::drawSample(const PPPoint& p) { if (sampleEditor->isEmptySample() || !sampleEditor->getSampleLen()) return; pp_int32 sampleIndex = positionToSample(p); if (sampleIndex < 0) sampleIndex = 0; if (sampleIndex > sampleEditor->getSampleLen()) sampleIndex = sampleEditor->getSampleLen(); pp_int32 y = p.y - (location.y + 1); if (y < 0) y = 0; if (y >= visibleHeight) y = visibleHeight - 1; float fy = -(((float)y / (float)(visibleHeight - 1)) - 0.5f); sampleEditor->drawSample(sampleIndex, fy); } void SampleEditorControl::validate(bool repositionBars/* = true*/, bool rescaleBars/* = false*/) { if (!sampleEditor->validate()) return; if (repositionBars) { if (rescaleBars) { xScale = calcScale(); minScale = 0.05f; if (xScale < minScale) xScale = minScale; adjustScrollbars(); } float origPos = startPos * xScale; bool recalibBar = false; if (origPos + visibleWidth*xScale >= getVisibleLength()) { origPos -= (origPos + visibleWidth*xScale-getVisibleLength()); if (origPos < 0.0f) origPos = 0.0f; recalibBar = true; } if (origPos == 0.0f && (getVisibleLength()/xScale) < visibleWidth) { xScale = calcScale(); minScale = 0.05f; if (xScale < minScale) xScale = minScale; recalibBar = true; } if (recalibBar) { startPos = (pp_int32)(origPos/xScale); pp_int32 visibleItems = visibleWidth; float s = (float)visibleWidth / (float)getMaxWidth(); hScrollbar->setBarSize((pp_int32)(s*65536.0f), false); float v = (float)(getMaxWidth() - visibleItems); hScrollbar->setBarPosition((pp_int32)(startPos*(65536.0f/v))); } } } void SampleEditorControl::attachSampleEditor(SampleEditor* sampleEditor) { if (this->sampleEditor) this->sampleEditor->removeNotificationListener(this); this->sampleEditor = sampleEditor; this->sampleEditor->addNotificationListener(this); if (sampleEditor->isEditableSample()) { xScale = calcScale(); minScale = 0.05f; if (xScale < minScale) xScale = minScale; } else xScale = 1.0f; for (pp_int32 i = 0; i < TrackerConfig::maximumPlayerChannels; i++) { showMarks[i].pos = -1; showMarks[i].intensity = 0; showMarks[i].panning = 128; } adjustScrollbars(); } bool SampleEditorControl::hasValidSelection() { return sampleEditor->hasValidSelection() || resizing; } void SampleEditorControl::showRange() { if (sampleEditor->isEmptySample()) return; pp_int32 sStart = sampleEditor->getLogicalSelectionStart(); pp_int32 sEnd = sampleEditor->getLogicalSelectionEnd(); bool sel = (sEnd >= 0 && sStart >= 0); if (!sel) return; xScale = (float)(sEnd - sStart)/(float)visibleWidth; if (xScale < minScale) xScale = minScale; float origPos = (float)sStart; if ((pp_int32)(origPos + visibleWidth*xScale) >= getVisibleLength()) { origPos -= (origPos + visibleWidth*xScale-getVisibleLength()); if (origPos < 0.0f) origPos = 0.0f; } startPos = (pp_int32)(origPos/xScale); pp_int32 visibleItems = visibleWidth; float s = (float)visibleWidth / (float)getMaxWidth(); hScrollbar->setBarSize((pp_int32)(s*65536.0f), false); float v = (float)(getMaxWidth() - visibleItems); hScrollbar->setBarPosition((pp_int32)(startPos*(65536.0f/v))); } void SampleEditorControl::rangeAll(bool updateNotify/* = false*/) { sampleEditor->selectAll(); if (updateNotify) notifyUpdate(); } void SampleEditorControl::rangeClear(bool updateNotify/* = false*/) { sampleEditor->resetSelection(); if (updateNotify) notifyUpdate(); } void SampleEditorControl::increaseRangeStart() { if (sampleEditor->getSelectionStart() == -1 || sampleEditor->getSelectionEnd() == -1) return; sampleEditor->getSelectionStart()++; validate(false); } void SampleEditorControl::decreaseRangeStart() { if (sampleEditor->getSelectionStart() == -1 || sampleEditor->getSelectionEnd() == -1) return; if (sampleEditor->getSelectionStart() > 0) sampleEditor->getSelectionStart()--; validate(false); } void SampleEditorControl::increaseRangeEnd() { if (sampleEditor->getSelectionStart() == -1 || sampleEditor->getSelectionEnd() == -1) return; sampleEditor->getSelectionEnd()++; validate(false); } void SampleEditorControl::decreaseRangeEnd() { if (sampleEditor->getSelectionStart() == -1 || sampleEditor->getSelectionEnd() == -1) return; if (sampleEditor->getSelectionEnd() > 0) sampleEditor->getSelectionEnd()--; validate(false); } bool SampleEditorControl::canZoomOut() { if (sampleEditor->isEmptySample()) return false; float xScale2 = calcScale(); if (xScale2 < minScale) xScale2 = minScale; return xScale < xScale2; } void SampleEditorControl::zoomOut(float factor/* = 2.0f*/, pp_int32 center/* = -1*/) { if (sampleEditor->isEmptySample()) return; float origPos = (center == -1 ? startPos * xScale : center); xScale*=factor; float xScale2 = calcScale(); if (xScale2 < minScale) xScale2 = minScale; if (xScale > xScale2) xScale = xScale2; origPos-=(visibleWidth/2*xScale); if (origPos < 0) origPos = 0.0f; if (origPos + visibleWidth*xScale >= getVisibleLength()) { origPos -= (origPos + visibleWidth*xScale-getVisibleLength()); if (origPos < 0.0f) origPos = 0.0f; } startPos = (pp_int32)(origPos/xScale); pp_int32 visibleItems = visibleWidth; float s = (float)visibleWidth / (float)getMaxWidth(); hScrollbar->setBarSize((pp_int32)(s*65536.0f), false); float v = (float)(getMaxWidth() - visibleItems); hScrollbar->setBarPosition((pp_int32)(startPos*(65536.0f/v))); } void SampleEditorControl::zoomIn(float factor/* = 0.5f*/, pp_int32 center/* = -1*/) { if (sampleEditor->isEmptySample()) return; float origPos = (center == -1 ? startPos * xScale : center); xScale*=factor; origPos-=(visibleWidth/2*xScale); if (origPos < 0) origPos = 0.0f; if (xScale < minScale) xScale = minScale; float xScale2 = calcScale(); if (xScale2 < minScale) xScale2 = minScale; if (xScale > xScale2) xScale = xScale2; if (origPos + visibleWidth*xScale >= getVisibleLength()) { origPos -= (origPos + visibleWidth*xScale-getVisibleLength()); if (origPos < 0.0f) origPos = 0.0f; } startPos = (pp_int32)(origPos/xScale); pp_int32 visibleItems = visibleWidth; float s = (float)visibleWidth / (float)getMaxWidth(); hScrollbar->setBarSize((pp_int32)(s*65536.0f), false); float v = (float)(getMaxWidth() - visibleItems); hScrollbar->setBarPosition((pp_int32)(startPos*(65536.0f/v))); } void SampleEditorControl::showAll() { if (sampleEditor->isEmptySample()) return; startPos = 0; xScale = calcScale(); if (xScale < minScale) xScale = minScale; adjustScrollbars(); } pp_int32 SampleEditorControl::getCurrentPosition() { if (sampleEditor->isEmptySample()) return 0; return (pp_int32)(startPos*xScale); } pp_int32 SampleEditorControl::getCurrentDisplayRange() { if (sampleEditor->isEmptySample()) return 0; pp_int32 i = (pp_int32)ceil(visibleWidth*xScale); if (i > sampleEditor->getSampleLen()) i = sampleEditor->getSampleLen(); return i; } bool SampleEditorControl::showMarksVisible() { if (sampleEditor->isEmptySample()) return false; for (pp_int32 sm = 0; sm < TrackerConfig::maximumPlayerChannels; sm++) { pp_int32 showMark = showMarks[sm].pos; if (!showMarks[sm].intensity || showMark == -1) continue; if (showMark >= 0 && showMark <= sampleEditor->getSampleLen()) { pp_int32 x = (pp_int32)((showMark/xScale)-startPos); if (x <= visibleWidth) return true; } } return false; } void SampleEditorControl::reset() { sampleEditor->reset(); } bool SampleEditorControl::contextMenuVisible() { return parentScreen->hasContextMenu(editMenuControl); } void SampleEditorControl::invokeContextMenu(const PPPoint& p, bool translatePoint/* = true*/) { PPPoint cp = p; if (translatePoint) { translateCoordinates(cp); if (cp.x > visibleWidth || cp.y > visibleHeight) return; } editMenuControl->setLocation(p); const bool isEmptySample = sampleEditor->isEmptySample(); // update menu states editMenuControl->setState(MenuCommandIDUndo, !sampleEditor->canUndo()); editMenuControl->setState(MenuCommandIDRedo, !sampleEditor->canRedo()); editMenuControl->setState(MenuCommandIDPaste, !sampleEditor->canPaste()); editMenuControl->setState(MenuCommandIDCopy, !hasValidSelection()); editMenuControl->setState(MenuCommandIDCut, !hasValidSelection()); editMenuControl->setState(MenuCommandIDCrop, !hasValidSelection()); editMenuControl->setState(MenuCommandIDSelectAll, isEmptySample); // update submenu states subMenuAdvanced->setState(MenuCommandIDNormalize, isEmptySample); subMenuAdvanced->setState(MenuCommandIDVolumeFade, isEmptySample); subMenuAdvanced->setState(MenuCommandIDVolumeBoost, isEmptySample); subMenuAdvanced->setState(MenuCommandIDReverse, isEmptySample); subMenuAdvanced->setState(MenuCommandIDXFade, !sampleEditor->isValidxFadeSelection() || isEmptySample || !sampleEditor->getLoopType()); subMenuAdvanced->setState(MenuCommandIDChangeSign, isEmptySample); subMenuAdvanced->setState(MenuCommandIDSwapByteOrder, isEmptySample || !sampleEditor->is16Bit()); subMenuAdvanced->setState(MenuCommandIDDCNormalize, isEmptySample); subMenuAdvanced->setState(MenuCommandIDDCOffset, isEmptySample); subMenuAdvanced->setState(MenuCommandIDRectangularSmooth, isEmptySample); subMenuAdvanced->setState(MenuCommandIDTriangularSmooth, isEmptySample); subMenuAdvanced->setState(MenuCommandIDEQ3Band, isEmptySample); subMenuAdvanced->setState(MenuCommandIDEQ10Band, isEmptySample); subMenuAdvanced->setState(MenuCommandIDResample, isEmptySample); subMenuXPaste->setState(MenuCommandIDMixPaste, sampleEditor->clipBoardIsEmpty() || isEmptySample); subMenuXPaste->setState(MenuCommandIDAMPaste, sampleEditor->clipBoardIsEmpty() || isEmptySample); subMenuXPaste->setState(MenuCommandIDFMPaste, sampleEditor->clipBoardIsEmpty() || isEmptySample); subMenuXPaste->setState(MenuCommandIDPHPaste, sampleEditor->clipBoardIsEmpty() || isEmptySample); subMenuXPaste->setState(MenuCommandIDSelectiveEQ10Band, sampleEditor->clipBoardIsEmpty() || isEmptySample); subMenuPT->setState(MenuCommandIDPTBoost, isEmptySample); subMenuGenerators->setState(MenuCommandIDGenerateNoise, isEmptySample); subMenuGenerators->setState(MenuCommandIDGenerateSine, isEmptySample); subMenuGenerators->setState(MenuCommandIDGenerateSquare, isEmptySample); subMenuGenerators->setState(MenuCommandIDGenerateTriangle, isEmptySample); subMenuGenerators->setState(MenuCommandIDGenerateSawtooth, isEmptySample); subMenuGenerators->setState(MenuCommandIDGenerateSilence, isEmptySample); parentScreen->setContextMenuControl(editMenuControl); } void SampleEditorControl::hideContextMenu() { parentScreen->removeContextMenuControl(subMenuAdvanced, false); parentScreen->removeContextMenuControl(editMenuControl); } void SampleEditorControl::executeMenuCommand(pp_int32 commandId) { switch (commandId) { // cut case MenuCommandIDCut: sampleEditor->cut(); break; // copy case MenuCommandIDCopy: sampleEditor->copy(); break; // paste case MenuCommandIDPaste: sampleEditor->paste(); break; // mix-paste case MenuCommandIDMixPaste: sampleEditor->mixPasteSample(); break; // AM-paste case MenuCommandIDAMPaste: sampleEditor->AMPasteSample(); break; // FM-paste case MenuCommandIDFMPaste: sampleEditor->FMPasteSample(); break; // PH-paste case MenuCommandIDPHPaste: sampleEditor->PHPasteSample(); break; // crop case MenuCommandIDCrop: sampleEditor->cropSample(); break; // undo case MenuCommandIDUndo: sampleEditor->undo(); break; // redo case MenuCommandIDRedo: sampleEditor->redo(); break; // range (=select) all case MenuCommandIDSelectAll: rangeAll(true); break; // Invoke tools case MenuCommandIDNew: invokeToolParameterDialog(ToolHandlerResponder::SampleToolTypeNew); break; case MenuCommandIDVolumeBoost: invokeToolParameterDialog(ToolHandlerResponder::SampleToolTypeVolume); break; case MenuCommandIDVolumeFade: invokeToolParameterDialog(ToolHandlerResponder::SampleToolTypeFade); break; case MenuCommandIDResample: invokeToolParameterDialog(ToolHandlerResponder::SampleToolTypeResample); break; case MenuCommandIDDCOffset: invokeToolParameterDialog(ToolHandlerResponder::SampleToolTypeDCOffset); break; case MenuCommandIDNormalize: sampleEditor->tool_normalizeSample(NULL); break; case MenuCommandIDReverse: sampleEditor->tool_reverseSample(NULL); break; case MenuCommandIDPTBoost: sampleEditor->tool_PTboostSample(NULL); break; case MenuCommandIDXFade: sampleEditor->tool_xFadeSample(NULL); break; case MenuCommandIDChangeSign: invokeToolParameterDialog(ToolHandlerResponder::SampleToolTypeChangeSign); break; case MenuCommandIDSwapByteOrder: sampleEditor->tool_swapByteOrderSample(NULL); break; case MenuCommandIDDCNormalize: sampleEditor->tool_DCNormalizeSample(NULL); break; case MenuCommandIDRectangularSmooth: sampleEditor->tool_rectangularSmoothSample(NULL); break; case MenuCommandIDTriangularSmooth: sampleEditor->tool_triangularSmoothSample(NULL); break; case MenuCommandIDEQ3Band: invokeToolParameterDialog(ToolHandlerResponder::SampleToolTypeEQ3Band); break; case MenuCommandIDEQ10Band: invokeToolParameterDialog(ToolHandlerResponder::SampleToolTypeEQ10Band); break; case MenuCommandIDSelectiveEQ10Band: invokeToolParameterDialog(ToolHandlerResponder::SampleToolTypeSelectiveEQ10Band); break; case MenuCommandIDGenerateSilence: invokeToolParameterDialog(ToolHandlerResponder::SampleToolTypeGenerateSilence); break; case MenuCommandIDGenerateNoise: invokeToolParameterDialog(ToolHandlerResponder::SampleToolTypeGenerateNoise); break; case MenuCommandIDGenerateSine: invokeToolParameterDialog(ToolHandlerResponder::SampleToolTypeGenerateSine); break; case MenuCommandIDGenerateSquare: invokeToolParameterDialog(ToolHandlerResponder::SampleToolTypeGenerateSquare); break; case MenuCommandIDGenerateTriangle: invokeToolParameterDialog(ToolHandlerResponder::SampleToolTypeGenerateTriangle); break; case MenuCommandIDGenerateSawtooth: invokeToolParameterDialog(ToolHandlerResponder::SampleToolTypeGenerateSawtooth); break; } } void SampleEditorControl::editorNotification(EditorBase* sender, EditorBase::EditorNotifications notification) { switch (notification) { case SampleEditor::EditorDestruction: { sampleEditor = NULL; break; } case SampleEditor::NotificationReload: { if (!sampleEditor->isEmptySample()) { xScale = calcScale(); minScale = 0.05f; if (xScale < minScale) xScale = minScale; } else xScale = 1.0f; for (pp_int32 i = 0; i < TrackerConfig::maximumPlayerChannels; i++) { showMarks[i].pos = -1; showMarks[i].intensity = 0; showMarks[i].panning = 128; } adjustScrollbars(); break; } case SampleEditor::NotificationPrepareLengthy: signalWaitState(true); break; case SampleEditor::NotificationUnprepareLengthy: signalWaitState(false); break; case SampleEditor::NotificationChangesValidate: { switch (sampleEditor->getLastOperation()) { case SampleEditor::OperationNew: showAll(); break; case SampleEditor::OperationCut: // adjust everything validate(true, true); break; default: // adjust everything according to whether size has changed validate(sampleEditor->getLastOperationDidChangeSize(), sampleEditor->getLastOperationDidChangeSize()); } break; } case SampleEditor::NotificationChanges: { bool lazyUpdateNotifications = sampleEditor->getLazyUpdateNotifications(); if (lazyUpdateNotifications) { notifyChanges(); break; } notifyChanges(); notifyUpdate(); break; } case SampleEditor::NotificationFeedUndoData: { undoInfo = UndoInfo(xScale, minScale, startPos, hScrollbar->getBarPosition(), hScrollbar->getBarSize()); sampleEditor->setUndoUserData(&undoInfo, sizeof(undoInfo)); break; } case SampleEditor::NotificationFetchUndoData: { undoInfo = UndoInfo(xScale, minScale, startPos, hScrollbar->getBarPosition(), hScrollbar->getBarSize()); if (sizeof(undoInfo) == sampleEditor->getUndoUserDataLen()) { memcpy(&undoInfo, sampleEditor->getUndoUserData(), sizeof(undoInfo)); xScale = undoInfo.xScale; minScale = undoInfo.minScale; startPos = undoInfo.startPos; if (undoInfo.barPos != -1) hScrollbar->setBarPosition(undoInfo.barPos); if (undoInfo.barScale != -1) hScrollbar->setBarPosition(undoInfo.barScale); validate(); //adjustScrollbars(); notifyUpdate(); } break; } case SampleEditor::NotificationUpdateNoChanges: notifyUpdate(); break; case SampleEditor::NotificationUndoRedo: case EditorBase::NotificationPrepareCritical: case EditorBase::NotificationUnprepareCritical: break; } } MilkyTracker-1.02.00/src/tracker/SampleEditorControl.h000066400000000000000000000224001324432207300225750ustar00rootroot00000000000000/* * tracker/SampleEditorControl.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #ifndef SAMPLEEDITORCONTROL__H #define SAMPLEEDITORCONTROL__H #include "BasicTypes.h" #include "Control.h" #include "Event.h" #include "SampleEditor.h" #include "SampleEditorControlLastValues.h" // Forwards class PPGraphicsAbstract; class PPFont; class PPScrollbar; class PPControl; class PPContextMenu; class FilterParameters; class PPDialogBase; class SampleEditorControl : public PPControl, public EventListenerInterface, public EditorBase::EditorNotificationListener { public: enum OffsetFormats { OffsetFormatHex, OffsetFormatDec, OffsetFormatMillis }; private: PPColor backgroundColor; bool border; PPColor ourOwnBorderColor; const PPColor* borderColor; PPPoint currentPosition; pp_int32 currentOffset; PPScrollbar* hScrollbar; PPControl* caughtControl; bool controlCaughtByLMouseButton, controlCaughtByRMouseButton; PPContextMenu* editMenuControl; PPContextMenu* subMenuAdvanced; PPContextMenu* subMenuXPaste; PPContextMenu* subMenuGenerators; PPContextMenu* subMenuPT; // extent pp_int32 selectionStartNew, selectionEndNew; pp_int32 selectionDragPivot; pp_int32 selectionStartCopy, selectionEndCopy; pp_int32 currentRepeatStart, currentRepeatLength; struct ShowMark { pp_int32 pos; pp_int32 intensity; pp_int32 panning; } *showMarks; float xScale; float minScale; pp_int32 startPos; pp_int32 visibleWidth; pp_int32 visibleHeight; pp_int32 scrollDist; pp_int32 selecting; pp_int32 resizing; bool drawMode; bool hasDragged; bool invertMWheelZoom; // selection pp_int32 selectionTicker; // necessary for controlling SampleEditor* sampleEditor; pp_int32 relativeNote; OffsetFormats offsetFormat; mp_sint32 getVisibleLength(); float calcScale(mp_sint32 len); float calcScale(); protected: virtual void translateCoordinates(PPPoint& cp) { PPControl::translateCoordinates(cp); cp.x -= 1; cp.y -= 1; } public: SampleEditorControl(pp_int32 id, PPScreen* parentScreen, EventListenerInterface* eventListener, const PPPoint& location, const PPSize& size, bool border = true); virtual ~SampleEditorControl(); void setBackgroundColor(const PPColor& color) { backgroundColor = color; } void setBorderColor(const PPColor& color) { borderColor = &color; } static void formatMillis(char* buffer, pp_uint32 millis); static void formatMillisFraction(char* buffer, pp_uint32 millis, pp_uint32 totalMillis); // from PPControl virtual void paint(PPGraphicsAbstract* graphics); virtual pp_int32 dispatchEvent(PPEvent* event); virtual pp_int32 handleEvent(PPObject* sender, PPEvent* event); virtual void setSize(const PPSize& size); virtual void setLocation(const PPPoint& location); public: // controlling editor from outside void attachSampleEditor(SampleEditor* sampleEditor); void setDrawMode(bool b) { drawMode = b; } bool getDrawMode() const { return drawMode; } void setOffsetFormat(OffsetFormats offsetFormat) { this->offsetFormat = offsetFormat; } OffsetFormats getOffsetFormat() const { return offsetFormat; } void setRelativeNote(pp_int32 relativeNote) { this->relativeNote = relativeNote; } pp_int32 getRelativeNote() const { return relativeNote; } // manipulating range (selection) void showRange(); void rangeAll(bool updateNotify = false); void rangeClear(bool updateNotify = false); void increaseRangeStart(); void decreaseRangeStart(); void increaseRangeEnd(); void decreaseRangeEnd(); bool canZoomOut(); void zoomOut(float factor = 2.0f, pp_int32 center = -1); void zoomIn(float factor = 0.5f, pp_int32 center = -1); void scrollWheelZoomOut(const PPPoint* p = NULL) { if (p) zoomOut(1.25f, positionToSample(*p)); else zoomOut(1.25f); notifyUpdate(); } void scrollWheelZoomIn(const PPPoint* p = NULL) { if (p) zoomIn(0.75f, positionToSample(*p)); else zoomIn(0.75f); notifyUpdate(); } void setInvertMWheelZoom(bool invert) { invertMWheelZoom = invert; } void showAll(); pp_int32 getCurrentPosition(); pp_int32 getCurrentRangeLength() { return sampleEditor->getSelectionLength(); } pp_int32 getCurrentDisplayRange(); pp_int32 getSelectionStart() const { return sampleEditor->getLogicalSelectionStart(); } pp_int32 getSelectionEnd() const { return sampleEditor->getLogicalSelectionEnd(); } pp_uint32 getRepeatStart() const; pp_uint32 getRepeatLength() const; bool hasValidSelection(); void setShowMark(pp_int32 c, pp_int32 m, pp_int32 i = 256, pp_int32 p = 128) { showMarks[c].pos = m; showMarks[c].intensity = i; showMarks[c].panning = p; } pp_int32 getShowMarkPos(pp_int32 c) { return showMarks[c].pos; } bool showMarksVisible(); void reset(); SampleEditor* getSampleEditor() { return sampleEditor; } private: void validate(bool repositionBars = true, bool rescaleBars = false); pp_int32 getMaxWidth(); void adjustScrollbars(); pp_int32 positionToSample(PPPoint cp); void drawSample(const PPPoint& p); void drawLoopMarker(PPGraphicsAbstract* g, pp_int32 x, pp_int32 y, bool down, const pp_int32 size); bool hitsLoopstart(const PPPoint* p); bool hitsLoopend(const PPPoint* p); void startMarkerDragging(const PPPoint* p); void endMarkerDragging(); void signalWaitState(bool b); void notifyUpdate() { PPEvent e(eUpdated); eventListener->handleEvent(reinterpret_cast(this), &e); } // -- Multilevel UNDO / REDO ---------------------------------- // undo/redo information struct UndoInfo { float xScale; float minScale; pp_int32 startPos; pp_int32 barPos; pp_int32 barScale; UndoInfo() { } UndoInfo(float xScale, float minScale, pp_int32 startPos, pp_int32 barPos = -1, pp_int32 barScale = -1) : xScale(xScale), minScale(minScale), startPos(startPos), barPos(barPos), barScale(barScale) { } } undoInfo; enum MenuCommandIDs { MenuCommandIDCrop = 99, MenuCommandIDMixPaste, MenuCommandIDAMPaste, MenuCommandIDFMPaste, MenuCommandIDPHPaste, MenuCommandIDNormalize, MenuCommandIDVolumeBoost, MenuCommandIDVolumeFade, MenuCommandIDReverse, MenuCommandIDPTBoost, MenuCommandIDXFade, MenuCommandIDChangeSign, MenuCommandIDSwapByteOrder, MenuCommandIDResample, MenuCommandIDDCNormalize, MenuCommandIDDCOffset, MenuCommandIDRectangularSmooth, MenuCommandIDTriangularSmooth, MenuCommandIDEQ3Band, MenuCommandIDEQ10Band, MenuCommandIDSelectiveEQ10Band, MenuCommandIDGenerateSilence, MenuCommandIDGenerateNoise, MenuCommandIDGenerateSine, MenuCommandIDGenerateSquare, MenuCommandIDGenerateTriangle, MenuCommandIDGenerateSawtooth }; void executeMenuCommand(pp_int32 commandId); virtual void editorNotification(EditorBase* sender, EditorBase::EditorNotifications notification); public: void invokeSetSampleVolume() { executeMenuCommand(MenuCommandIDVolumeBoost); } bool contextMenuVisible(); void invokeContextMenu(const PPPoint& p, bool translatePoint = true); void hideContextMenu(); // --- Sample tool responder private: class ToolHandlerResponder : public DialogResponder { public: enum SampleToolTypes { SampleToolTypeNone, SampleToolTypeNew, SampleToolTypeVolume, SampleToolTypeFade, SampleToolTypeNormalize, SampleToolTypeReverse, SampleToolTypePTBoost, SampleToolTypeXFade, SampleToolTypeChangeSign, SampleToolTypeSwapByteOrder, SampleToolTypeResample, SampleToolTypeDCNormalize, SampleToolTypeDCOffset, SampleToolTypeRectangularSmooth, SampleToolTypeTriangularSmooth, SampleToolTypeEQ3Band, SampleToolTypeEQ10Band, SampleToolTypeSelectiveEQ10Band, SampleToolTypeGenerateSilence, SampleToolTypeGenerateNoise, SampleToolTypeGenerateSine, SampleToolTypeGenerateSquare, SampleToolTypeGenerateTriangle, SampleToolTypeGenerateSawtooth }; private: SampleEditorControl& sampleEditorControl; SampleToolTypes sampleToolType; public: ToolHandlerResponder(SampleEditorControl& theSampleEditorControl); void setSampleToolType(SampleToolTypes type) { sampleToolType = type; } SampleToolTypes getSampleToolType() { return sampleToolType; } virtual pp_int32 ActionOkay(PPObject* sender); virtual pp_int32 ActionCancel(PPObject* sender); }; friend class ToolHandlerResponder; PPDialogBase* dialog; ToolHandlerResponder* toolHandlerResponder; bool invokeToolParameterDialog(ToolHandlerResponder::SampleToolTypes type); bool invokeTool(ToolHandlerResponder::SampleToolTypes type); SampleEditorControlLastValues lastValues; void resetLastValues() { lastValues.reset(); } public: SampleEditorControlLastValues& getLastValues() { return lastValues; } }; #endif MilkyTracker-1.02.00/src/tracker/SampleEditorControlLastValues.h000066400000000000000000000112151324432207300246030ustar00rootroot00000000000000/* * tracker/SampleEditorControlLastValues.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #ifndef __SAMPLEEDITORCONTROLASTVALUES_H__ #define __SAMPLEEDITORCONTROLASTVALUES_H__ #include "BasicTypes.h" #include "Dictionary.h" // Last values struct SampleEditorControlLastValues { pp_int32 newSampleSize; pp_int32 changeSignIgnoreBits; float boostSampleVolume; float fadeSampleVolumeStart; float fadeSampleVolumeEnd; float DCOffset; pp_int32 silenceSize; float waveFormVolume; float waveFormNumPeriods; bool hasEQ3BandValues; float EQ3BandValues[3]; bool hasEQ10BandValues; float EQ10BandValues[10]; pp_int32 resampleInterpolationType; bool adjustFtAndRelnote; static float invalidFloatValue() { return -12345678.0f; } static int invalidIntValue() { return -12345678; } void reset() { newSampleSize = invalidIntValue(); changeSignIgnoreBits = invalidIntValue(); boostSampleVolume = invalidFloatValue(); fadeSampleVolumeStart = invalidFloatValue(); fadeSampleVolumeEnd = invalidFloatValue(); DCOffset = invalidFloatValue(); silenceSize = invalidIntValue(); waveFormVolume = invalidFloatValue(); waveFormNumPeriods = invalidFloatValue(); hasEQ3BandValues = hasEQ10BandValues = false; resampleInterpolationType = invalidIntValue(); adjustFtAndRelnote = true; } PPDictionary convertToDictionary() { PPDictionary result; result.store("newSampleSize", newSampleSize); result.store("changeSignIgnoreBits", changeSignIgnoreBits); result.store("boostSampleVolume", PPDictionary::convertFloatToIntNonLossy(boostSampleVolume)); result.store("fadeSampleVolumeStart", PPDictionary::convertFloatToIntNonLossy(fadeSampleVolumeStart)); result.store("fadeSampleVolumeEnd", PPDictionary::convertFloatToIntNonLossy(fadeSampleVolumeEnd)); result.store("DCOffset", PPDictionary::convertFloatToIntNonLossy(DCOffset)); result.store("silenceSize", silenceSize); result.store("waveFormVolume", PPDictionary::convertFloatToIntNonLossy(waveFormVolume)); result.store("waveFormNumPeriods", PPDictionary::convertFloatToIntNonLossy(waveFormNumPeriods)); result.store("resampleInterpolationType", resampleInterpolationType); result.store("adjustFtAndRelnote", adjustFtAndRelnote); return result; } void restoreFromDictionary(PPDictionary& dictionary) { PPDictionaryKey* key = dictionary.getFirstKey(); while (key) { if (key->getKey().compareToNoCase("newSampleSize") == 0) { newSampleSize = key->getIntValue(); } else if (key->getKey().compareToNoCase("changeSignIgnoreBits") == 0) { changeSignIgnoreBits = key->getIntValue(); } else if (key->getKey().compareToNoCase("boostSampleVolume") == 0) { boostSampleVolume = PPDictionary::convertIntToFloatNonLossy(key->getIntValue()); } else if (key->getKey().compareToNoCase("fadeSampleVolumeStart") == 0) { fadeSampleVolumeStart = PPDictionary::convertIntToFloatNonLossy(key->getIntValue()); } else if (key->getKey().compareToNoCase("fadeSampleVolumeEnd") == 0) { fadeSampleVolumeEnd = PPDictionary::convertIntToFloatNonLossy(key->getIntValue()); } else if (key->getKey().compareToNoCase("DCOffset") == 0) { DCOffset = PPDictionary::convertIntToFloatNonLossy(key->getIntValue()); } else if (key->getKey().compareToNoCase("silenceSize") == 0) { silenceSize = key->getIntValue(); } else if (key->getKey().compareToNoCase("waveFormVolume") == 0) { waveFormVolume = PPDictionary::convertIntToFloatNonLossy(key->getIntValue()); } else if (key->getKey().compareToNoCase("waveFormNumPeriods") == 0) { waveFormNumPeriods = PPDictionary::convertIntToFloatNonLossy(key->getIntValue()); } else if (key->getKey().compareToNoCase("resampleInterpolationType") == 0) { resampleInterpolationType = key->getIntValue(); } else if (key->getKey().compareToNoCase("adjustFtAndRelnote") == 0) { adjustFtAndRelnote = key->getBoolValue(); } key = dictionary.getNextKey(); } } }; #endif MilkyTracker-1.02.00/src/tracker/SampleEditorControlToolHandler.cpp000066400000000000000000000353721324432207300253000ustar00rootroot00000000000000/* * tracker/SampleEditorControlToolHandler.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * SampleEditorControlToolHandler.cpp * MilkyTracker * * Created by Peter Barth on 20.10.05. * */ #include "SampleEditorControl.h" #include "DialogWithValues.h" #include "DialogResample.h" #include "DialogGroupSelection.h" #include "DialogEQ.h" #include "SimpleVector.h" #include "FilterParameters.h" bool SampleEditorControl::invokeToolParameterDialog(SampleEditorControl::ToolHandlerResponder::SampleToolTypes type) { if (dialog) { delete dialog; dialog = NULL; } toolHandlerResponder->setSampleToolType(type); switch (type) { case ToolHandlerResponder::SampleToolTypeNew: dialog = new DialogWithValues(parentScreen, toolHandlerResponder, PP_DEFAULT_ID, "Create new sample" PPSTR_PERIODS, DialogWithValues::ValueStyleEnterOneValue); static_cast(dialog)->setValueOneCaption("Enter size in samples:"); static_cast(dialog)->setValueOneRange(3, 1024*1024*10-1, 0); if (lastValues.newSampleSize != SampleEditorControlLastValues::invalidIntValue()) static_cast(dialog)->setValueOne((float)lastValues.newSampleSize); else static_cast(dialog)->setValueOne(100.0f); break; case ToolHandlerResponder::SampleToolTypeVolume: dialog = new DialogWithValues(parentScreen, toolHandlerResponder, PP_DEFAULT_ID, "Boost sample volume" PPSTR_PERIODS, DialogWithValues::ValueStyleEnterOneValue); static_cast(dialog)->setValueOneCaption("Enter new volume in percent:"); static_cast(dialog)->setValueOneRange(-10000.0f, 10000.0f, 2); static_cast(dialog)->setValueOne(lastValues.boostSampleVolume != SampleEditorControlLastValues::invalidFloatValue() ? lastValues.boostSampleVolume : 100.0f); break; case ToolHandlerResponder::SampleToolTypeFade: dialog = new DialogWithValues(parentScreen, toolHandlerResponder, PP_DEFAULT_ID, "Fade sample" PPSTR_PERIODS, DialogWithValues::ValueStyleEnterTwoValues); static_cast(dialog)->setValueOneCaption("Enter start volume in percent:"); static_cast(dialog)->setValueTwoCaption("Enter end volume in percent:"); static_cast(dialog)->setValueOneRange(-10000.0f, 10000.0f, 2); static_cast(dialog)->setValueTwoRange(-10000.0f, 10000.0f, 2); static_cast(dialog)->setValueOne(lastValues.fadeSampleVolumeStart != SampleEditorControlLastValues::invalidFloatValue() ? lastValues.fadeSampleVolumeStart : 100.0f); static_cast(dialog)->setValueTwo(lastValues.fadeSampleVolumeEnd != SampleEditorControlLastValues::invalidFloatValue() ? lastValues.fadeSampleVolumeEnd : 100.0f); break; case ToolHandlerResponder::SampleToolTypeChangeSign: dialog = new DialogWithValues(parentScreen, toolHandlerResponder, PP_DEFAULT_ID, "Change sign" PPSTR_PERIODS, DialogWithValues::ValueStyleEnterOneValue); static_cast(dialog)->setValueOneCaption("Ignore bits from MSB [0..]"); static_cast(dialog)->setValueOneRange(0, (sampleEditor->is16Bit() ? 16 : 8), 0); static_cast(dialog)->setValueOne(lastValues.changeSignIgnoreBits != SampleEditorControlLastValues::invalidFloatValue() ? lastValues.changeSignIgnoreBits : 1); break; case ToolHandlerResponder::SampleToolTypeDCOffset: dialog = new DialogWithValues(parentScreen, toolHandlerResponder, PP_DEFAULT_ID, "DC offset" PPSTR_PERIODS, DialogWithValues::ValueStyleEnterOneValue); static_cast(dialog)->setValueOneCaption("Enter offset in percent [-100..100]"); static_cast(dialog)->setValueOneRange(-100, 100.0f, 2); static_cast(dialog)->setValueOne(lastValues.DCOffset != SampleEditorControlLastValues::invalidFloatValue() ? lastValues.DCOffset : 0.0f); break; case ToolHandlerResponder::SampleToolTypeResample: dialog = new DialogResample(parentScreen, toolHandlerResponder, PP_DEFAULT_ID); if (sampleEditor->isValidSample()) { if (lastValues.resampleInterpolationType != SampleEditorControlLastValues::invalidIntValue()) static_cast(dialog)->setInterpolationType(lastValues.resampleInterpolationType); static_cast(dialog)->setAdjustFtAndRelnote(lastValues.adjustFtAndRelnote); static_cast(dialog)->setRelNote(sampleEditor->getRelNoteNum()); static_cast(dialog)->setFineTune(sampleEditor->getFinetune()); static_cast(dialog)->setSize(sampleEditor->getSampleLen()); } break; case ToolHandlerResponder::SampleToolTypeEQ3Band: dialog = new DialogEQ(parentScreen, toolHandlerResponder, PP_DEFAULT_ID, DialogEQ::EQ3Bands); if (lastValues.hasEQ3BandValues) { for (pp_int32 i = 0; i < 3; i++) static_cast(dialog)->setBandParam(i, lastValues.EQ3BandValues[i]); } break; case ToolHandlerResponder::SampleToolTypeEQ10Band: case ToolHandlerResponder::SampleToolTypeSelectiveEQ10Band: dialog = new DialogEQ(parentScreen, toolHandlerResponder, PP_DEFAULT_ID, DialogEQ::EQ10Bands); if (lastValues.hasEQ10BandValues) { for (pp_int32 i = 0; i < 10; i++) static_cast(dialog)->setBandParam(i, lastValues.EQ10BandValues[i]); } break; case ToolHandlerResponder::SampleToolTypeGenerateSilence: dialog = new DialogWithValues(parentScreen, toolHandlerResponder, PP_DEFAULT_ID, "Insert silence" PPSTR_PERIODS, DialogWithValues::ValueStyleEnterOneValue); static_cast(dialog)->setValueOneCaption("Enter size in samples:"); static_cast(dialog)->setValueOneRange(3, 1024*1024*10-1, 0); if (lastValues.silenceSize != SampleEditorControlLastValues::invalidIntValue()) static_cast(dialog)->setValueOne((float)lastValues.silenceSize); else static_cast(dialog)->setValueOne(100.0f); break; case ToolHandlerResponder::SampleToolTypeGenerateNoise: { PPSimpleVector noiseFilterTypes; noiseFilterTypes.add(new PPString("White")); noiseFilterTypes.add(new PPString("Pink")); noiseFilterTypes.add(new PPString("Brown")); dialog = new DialogGroupSelection(parentScreen, toolHandlerResponder, PP_DEFAULT_ID, "Select noise type" PPSTR_PERIODS, noiseFilterTypes); break; } case ToolHandlerResponder::SampleToolTypeGenerateSine: case ToolHandlerResponder::SampleToolTypeGenerateSquare: case ToolHandlerResponder::SampleToolTypeGenerateTriangle: case ToolHandlerResponder::SampleToolTypeGenerateSawtooth: { dialog = new DialogWithValues(parentScreen, toolHandlerResponder, PP_DEFAULT_ID, "Generate waveform" PPSTR_PERIODS, DialogWithValues::ValueStyleEnterTwoValues); static_cast(dialog)->setValueOneCaption("Volume in percent:"); static_cast(dialog)->setValueTwoCaption("Number of periods:"); static_cast(dialog)->setValueOneRange(-1000.0f, 1000.0f, 2); static_cast(dialog)->setValueTwoRange(0.0f, 1000.0f, 1); static_cast(dialog)->setValueOne(lastValues.waveFormVolume != SampleEditorControlLastValues::invalidFloatValue() ? lastValues.waveFormVolume : 100.0f); static_cast(dialog)->setValueTwo(lastValues.waveFormNumPeriods != SampleEditorControlLastValues::invalidFloatValue() ? lastValues.waveFormNumPeriods : 1.0f); break; } default: break; } dialog->show(); return true; } bool SampleEditorControl::invokeTool(ToolHandlerResponder::SampleToolTypes type) { if (!sampleEditor->isValidSample()) return false; switch (type) { case ToolHandlerResponder::SampleToolTypeNew: { FilterParameters par(2); lastValues.newSampleSize = (pp_int32)static_cast(dialog)->getValueOne(); par.setParameter(0, FilterParameters::Parameter(lastValues.newSampleSize)); par.setParameter(1, FilterParameters::Parameter(sampleEditor->is16Bit() ? 16 : 8)); sampleEditor->tool_newSample(&par); break; } case ToolHandlerResponder::SampleToolTypeVolume: { lastValues.boostSampleVolume = static_cast(dialog)->getValueOne(); FilterParameters par(2); par.setParameter(0, FilterParameters::Parameter(lastValues.boostSampleVolume / 100.0f)); par.setParameter(1, FilterParameters::Parameter(lastValues.boostSampleVolume / 100.0f)); sampleEditor->tool_scaleSample(&par); break; } case ToolHandlerResponder::SampleToolTypeFade: { lastValues.fadeSampleVolumeStart = static_cast(dialog)->getValueOne(); lastValues.fadeSampleVolumeEnd = static_cast(dialog)->getValueTwo(); FilterParameters par(2); par.setParameter(0, FilterParameters::Parameter(lastValues.fadeSampleVolumeStart / 100.0f)); par.setParameter(1, FilterParameters::Parameter(lastValues.fadeSampleVolumeEnd / 100.0f)); sampleEditor->tool_scaleSample(&par); break; } case ToolHandlerResponder::SampleToolTypeChangeSign: { lastValues.changeSignIgnoreBits = (pp_int32)static_cast(dialog)->getValueOne(); FilterParameters par(1); par.setParameter(0, FilterParameters::Parameter(lastValues.changeSignIgnoreBits)); sampleEditor->tool_changeSignSample(&par); break; } case ToolHandlerResponder::SampleToolTypeDCOffset: { FilterParameters par(1); lastValues.DCOffset = static_cast(dialog)->getValueOne(); par.setParameter(0, FilterParameters::Parameter(lastValues.DCOffset / 100.0f)); sampleEditor->tool_DCOffsetSample(&par); break; } case ToolHandlerResponder::SampleToolTypeResample: { lastValues.resampleInterpolationType = static_cast(dialog)->getInterpolationType(); lastValues.adjustFtAndRelnote = static_cast(dialog)->getAdjustFtAndRelnote(); FilterParameters par(3); par.setParameter(0, FilterParameters::Parameter(static_cast(dialog)->getC4Speed())); par.setParameter(1, FilterParameters::Parameter(static_cast(lastValues.resampleInterpolationType))); par.setParameter(2, FilterParameters::Parameter(lastValues.adjustFtAndRelnote ? 1 : 0)); sampleEditor->tool_resampleSample(&par); break; } case ToolHandlerResponder::SampleToolTypeEQ3Band: case ToolHandlerResponder::SampleToolTypeEQ10Band: case ToolHandlerResponder::SampleToolTypeSelectiveEQ10Band: { pp_uint32 numBands = static_cast(dialog)->getNumBandsAsInt(); float* last = NULL; if (numBands == 3) { lastValues.hasEQ3BandValues = true; last = lastValues.EQ3BandValues; } else { lastValues.hasEQ10BandValues = true; last = lastValues.EQ10BandValues; } FilterParameters par(numBands); for (pp_uint32 i = 0; i < numBands; i++) { float val = static_cast(dialog)->getBandParam(i); if (last) last[i] = val; par.setParameter(i, FilterParameters::Parameter(val)); } sampleEditor->tool_eqSample(&par,type==ToolHandlerResponder::SampleToolTypeSelectiveEQ10Band); break; } case ToolHandlerResponder::SampleToolTypeGenerateSilence: { FilterParameters par(1); par.setParameter(0, FilterParameters::Parameter((pp_int32)(static_cast(dialog)->getValueOne()))); sampleEditor->tool_generateSilence(&par); break; } case ToolHandlerResponder::SampleToolTypeGenerateNoise: { FilterParameters par(1); par.setParameter(0, FilterParameters::Parameter((pp_int32)(static_cast(dialog)->getSelection()))); sampleEditor->tool_generateNoise(&par); break; } case ToolHandlerResponder::SampleToolTypeGenerateSine: { lastValues.waveFormVolume = static_cast(dialog)->getValueOne(); lastValues.waveFormNumPeriods = static_cast(dialog)->getValueTwo(); FilterParameters par(2); par.setParameter(0, FilterParameters::Parameter(lastValues.waveFormVolume/100.0f)); par.setParameter(1, FilterParameters::Parameter(lastValues.waveFormNumPeriods)); sampleEditor->tool_generateSine(&par); break; } case ToolHandlerResponder::SampleToolTypeGenerateSquare: { lastValues.waveFormVolume = static_cast(dialog)->getValueOne(); lastValues.waveFormNumPeriods = static_cast(dialog)->getValueTwo(); FilterParameters par(2); par.setParameter(0, FilterParameters::Parameter(lastValues.waveFormVolume/100.0f)); par.setParameter(1, FilterParameters::Parameter(lastValues.waveFormNumPeriods)); sampleEditor->tool_generateSquare(&par); break; } case ToolHandlerResponder::SampleToolTypeGenerateTriangle: { lastValues.waveFormVolume = static_cast(dialog)->getValueOne(); lastValues.waveFormNumPeriods = static_cast(dialog)->getValueTwo(); FilterParameters par(2); par.setParameter(0, FilterParameters::Parameter(lastValues.waveFormVolume/100.0f)); par.setParameter(1, FilterParameters::Parameter(lastValues.waveFormNumPeriods)); sampleEditor->tool_generateTriangle(&par); break; } case ToolHandlerResponder::SampleToolTypeGenerateSawtooth: { lastValues.waveFormVolume = static_cast(dialog)->getValueOne(); lastValues.waveFormNumPeriods = static_cast(dialog)->getValueTwo(); FilterParameters par(2); par.setParameter(0, FilterParameters::Parameter(lastValues.waveFormVolume/100.0f)); par.setParameter(1, FilterParameters::Parameter(lastValues.waveFormNumPeriods)); sampleEditor->tool_generateSawtooth(&par); break; } default: break; } return true; } SampleEditorControl::ToolHandlerResponder::ToolHandlerResponder(SampleEditorControl& theSampleEditorControl) : sampleEditorControl(theSampleEditorControl), sampleToolType(SampleToolTypeNone) { } pp_int32 SampleEditorControl::ToolHandlerResponder::ActionOkay(PPObject* sender) { sampleEditorControl.invokeTool(sampleToolType); return 0; } pp_int32 SampleEditorControl::ToolHandlerResponder::ActionCancel(PPObject* sender) { return 0; } MilkyTracker-1.02.00/src/tracker/SampleEditorResampler.cpp000066400000000000000000000114471324432207300234530ustar00rootroot00000000000000/* * tracker/SampleEditorResampler.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * SampleEditorResampler.cpp * MilkyTracker * * Created by Peter Barth on 06.01.08. * */ #include "SampleEditorResampler.h" #include "XModule.h" #include "ChannelMixer.h" #include "ResamplerHelper.h" #include SampleEditorResampler::SampleEditorResampler(XModule& module, TXMSample& sample, pp_uint32 type) : module(module), sample(sample), type(type) { } SampleEditorResampler::~SampleEditorResampler() { } // we're going to abuse the resampler of the ChannelMixer class // Problem here is, we need to build up some temporary channel structure // PLUS the resampler only deals with stereo channels, so basically we're // resampling stereo data (left channel = full, right channel = empty) bool SampleEditorResampler::resample(float oldRate, float newRate) { float factor = oldRate / newRate; mp_ubyte* buffer = TXMSample::allocPaddedMem(sample.samplen * ((sample.type & 16) ? 2 : 1)); if (buffer == NULL) return false; // retrieve original sample without loop modifications if (sample.type & 16) { mp_sword* bu = (mp_sword*)buffer; for (mp_uint32 i = 0; i < sample.samplen; i++) bu[i] = sample.getSampleValue(i); bu[-1]=bu[0]; bu[-2]=bu[0]; bu[-3]=bu[0]; bu[-4]=bu[0]; bu[sample.samplen]=bu[sample.samplen-1]; bu[sample.samplen+1]=bu[sample.samplen-1]; bu[sample.samplen+3]=bu[sample.samplen-1]; bu[sample.samplen+4]=bu[sample.samplen-1]; } else { mp_sbyte* bu = (mp_sbyte*)buffer; for (mp_uint32 i = 0; i < sample.samplen; i++) bu[i] = sample.getSampleValue(i); bu[-1]=bu[0]; bu[-2]=bu[0]; bu[-3]=bu[0]; bu[-4]=bu[0]; bu[sample.samplen]=bu[sample.samplen-1]; bu[sample.samplen+1]=bu[sample.samplen-1]; bu[sample.samplen+3]=bu[sample.samplen-1]; bu[sample.samplen+4]=bu[sample.samplen-1]; } // get space for resampled data*2 as the resampler only processes stereo samples mp_sint32 finalSize = (mp_sint32)ceil(sample.samplen/factor); mp_sint32* dst = new mp_sint32[(finalSize+1)*2]; if (dst == NULL) { TXMSample::freePaddedMem(buffer); return false; } memset(dst, 0, sizeof(mp_sint32)*(finalSize+1)*2); ChannelMixer::TMixerChannel channel; channel.sample = (mp_sbyte*)buffer; channel.smplen = sample.samplen; channel.flags = ChannelMixer::MP_SAMPLE_PLAY | ((sample.type & 16) ? 4 : 0); channel.smppos = 0; channel.smpposfrac = 0; channel.fixedtimefrac = 0; channel.smpadd = (mp_sint32)(factor*65536.0f); channel.loopend = channel.smplen; channel.loopstart = 0; channel.vol = 512; channel.pan = 128; channel.cutoff = ChannelMixer::MP_INVALID_VALUE; channel.resonance = ChannelMixer::MP_INVALID_VALUE; channel.rsmpadd = (mp_sint32)((1.0f / factor) * 65536.0f); // we only need the left channel as no panning is involved channel.finalvoll = (channel.vol*128*256)<<6; channel.finalvolr = 0; channel.rampFromVolStepL = channel.rampFromVolStepR = 0; channel.index = 0; ResamplerHelper resamplerHelper; ChannelMixer::ResamplerBase* resampler = resamplerHelper.createResamplerFromIndex(type); if (resampler == NULL) { TXMSample::freePaddedMem(buffer); delete[] dst; return false; } resampler->setNumChannels(1); resampler->setFrequency((mp_sint32)newRate); // the resampler is used to process small blocks // so we feed in small blocks as well mp_sint32 numBlocks = (finalSize+1) >> 6; mp_sint32 lastBlock = (finalSize+1) & 63; mp_sint32* dsttmp = dst; for (mp_sint32 k = 0; k < numBlocks; k++) { resampler->addChannel(&channel, dsttmp, 64, 1); dsttmp+=64*2; } if (lastBlock) resampler->addChannel(&channel, dsttmp, lastBlock, 1); delete resampler; TXMSample::freePaddedMem(buffer); module.freeSampleMem((mp_ubyte*)sample.sample); sample.sample = (mp_sbyte*)module.allocSampleMem((sample.type & 16) ? finalSize*2 : finalSize); for (mp_sint32 i = 0; i < finalSize; i++) { mp_sint32 s = dst[i*2]; if (s > 32767) s = 32767; if (s < -32768) s = -32768; if (sample.type & 16) sample.setSampleValue(i, s); else sample.setSampleValue(i, s >> 8); } sample.samplen = finalSize; delete[] dst; return true; } MilkyTracker-1.02.00/src/tracker/SampleEditorResampler.h000066400000000000000000000023601324432207300231120ustar00rootroot00000000000000/* * tracker/SampleEditorResampler.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * SampleEditorResampler.h * MilkyTracker * * Created by Peter Barth on 06.01.08. * */ #ifndef __SAMPLEEDITORRESAMPLER_H__ #define __SAMPLEEDITORRESAMPLER_H__ #include "BasicTypes.h" class SampleEditorResampler { private: class XModule& module; struct TXMSample& sample; pp_uint32 type; public: SampleEditorResampler(XModule& module, TXMSample& sample, pp_uint32 type); virtual ~SampleEditorResampler(); bool resample(float oldRate, float newRate); }; #endif MilkyTracker-1.02.00/src/tracker/SamplePlayer.cpp000066400000000000000000000045551324432207300216100ustar00rootroot00000000000000/* * tracker/SamplePlayer.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * SamplePlayer.cpp * MilkyTracker * * Created by Peter Barth on 13.12.07. * */ #include "SamplePlayer.h" #include "ModuleEditor.h" #include "SampleEditor.h" #include "PlayerController.h" void SamplePlayer::playSample(const TXMSample& smp, pp_uint32 note, pp_int32 rangeStart/* = -1*/, pp_int32 rangeEnd/* = -1*/) { playerController.playSample(smp, note, rangeStart, rangeEnd); } void SamplePlayer::playSample(pp_int32 insIndex, pp_int32 smpIndex, pp_uint32 note) { playSample(*moduleEditor.getSampleInfo(insIndex, smpIndex), note); } void SamplePlayer::playSample(pp_int32 insIndex, pp_uint32 note) { const mp_ubyte* nbu = moduleEditor.getSampleTable(insIndex); pp_int32 smpIndex = nbu[note]; playSample(insIndex, smpIndex, note); } void SamplePlayer::playCurrentSample(pp_uint32 note) { playSample(*moduleEditor.getSampleEditor()->getSample(), note); } void SamplePlayer::playCurrentSampleFromOffset(pp_uint32 offset, pp_uint32 note) { SampleEditor* sampleEditor = moduleEditor.getSampleEditor(); if (offset != -1) { playSample(*sampleEditor->getSample(), note, offset, sampleEditor->getSampleLen()); } } void SamplePlayer::playCurrentSampleSelectionRange(pp_uint32 note) { SampleEditor* sampleEditor = moduleEditor.getSampleEditor(); if (sampleEditor->getLogicalSelectionStart() != -1 && sampleEditor->getLogicalSelectionEnd() != -1) { playSample(*sampleEditor->getSample(), note, sampleEditor->getLogicalSelectionStart(), sampleEditor->getLogicalSelectionEnd()); } } void SamplePlayer::stopSamplePlayback() { playerController.stopSample(); } MilkyTracker-1.02.00/src/tracker/SamplePlayer.h000066400000000000000000000032101324432207300212400ustar00rootroot00000000000000/* * tracker/SamplePlayer.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * SamplePlayer.h * MilkyTracker * * Created by Peter Barth on 13.12.07. * */ #ifndef __SAMPLEPLAYER_H__ #define __SAMPLEPLAYER_H__ #include "BasicTypes.h" struct TXMSample; class SamplePlayer { private: class ModuleEditor& moduleEditor; class PlayerController& playerController; public: SamplePlayer(ModuleEditor& moduleEditor, PlayerController& playerController) : moduleEditor(moduleEditor), playerController(playerController) { } void playSample(const TXMSample& smp, pp_uint32 note, pp_int32 rangeStart = -1, pp_int32 rangeEnd = -1); void playSample(pp_int32 insIndex, pp_int32 smpIndex, pp_uint32 note); void playSample(pp_int32 insIndex, pp_uint32 note); void playCurrentSample(pp_uint32 note); void playCurrentSampleFromOffset(pp_uint32 offset, pp_uint32 note); void playCurrentSampleSelectionRange(pp_uint32 note); void stopSamplePlayback(); }; #endif MilkyTracker-1.02.00/src/tracker/ScopesControl.cpp000066400000000000000000000411511324432207300220000ustar00rootroot00000000000000/* * tracker/ScopesControl.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * ScopesControl.cpp * MilkyTracker * * Created by Peter Barth on 28.10.05. * */ #include "ScopesControl.h" #include "Screen.h" #include "GraphicsAbstract.h" #include "Font.h" #include "Button.h" #include "PlayerController.h" #include "Tools.h" #include "PPUIConfig.h" #include "TrackerConfig.h" #include #undef PANNINGINDICATOR pp_int32 ScopesControl::WRAPCHANNELS() const { #ifdef __LOWRES__ return 16; #else if (numChannels <= 32) { if (getSize().width < 800) { return 18; } if (getSize().width < 1024) { return 20; } if (getSize().width < 1280) { return 22; } return 32; } else { return 32; #endif } } ScopesControl::ScopesControl(pp_int32 id, PPScreen* parentScreen, EventListenerInterface* eventListener, const PPPoint& location, const PPSize& size, bool border/*= true*/) : PPControl(id, parentScreen, eventListener, location, size), border(border), borderColor(&ourOwnBorderColor), playerController(NULL), numChannels(0), enabled(true), appearance(AppearanceTypeNormal), currentClickType(ClickTypeMute) { // default color color.set(0, 0, 0); ourOwnBorderColor.set(192, 192, 192); visibleWidth = size.width - 2; visibleHeight = size.height - 4; font = PPFont::getFont(PPFont::FONT_SYSTEM); smallFont = PPFont::getFont(PPFont::FONT_TINY); lastNumChannels = 0; memset(onOffState, 0, sizeof(onOffState)); memset(muteChannels, 0 ,sizeof(muteChannels)); memset(lastMuteChannels, 0 ,sizeof(lastMuteChannels)); memset(recChannels, 0 ,sizeof(recChannels)); memset(lastRecChannels, 0 ,sizeof(lastRecChannels)); lMouseDownInChannel = rMouseDownInChannel = -1; backgroundButton = new PPButton(0, parentScreen, NULL, PPPoint(location.x, location.y), PPSize(size.width, size.height), false, false); backgroundButton->setColor(PPUIConfig::getInstance()->getColor(PPUIConfig::ColorListBoxBackground)); backgroundButton->setInvertShading(true); } ScopesControl::~ScopesControl() { delete backgroundButton; } class ScopePainter : public PlayerController::SampleDataFetcher { private: PPGraphicsAbstract* g; const pp_uint32 count; const pp_uint32 channelHeight; const PPColor& scopebColor; const PPColor& scopedColor; pp_int32 locx, locy; const ScopesControl::AppearanceTypes appearance; bool flipped; pp_int32 counter, flipCounter, flipCounterStep; pp_int32 count2; pp_int32 sr, sg, sb; pp_int32 addr, addg, addb; pp_int32 lasty, lastx; public: ScopePainter(PPGraphicsAbstract* g, pp_uint32 count, pp_uint32 channelHeight, const PPColor& scopebColor, const PPColor& scopedColor, pp_int32 locx, pp_int32 locy, ScopesControl::AppearanceTypes appearance) : g(g), count(count), channelHeight(channelHeight), scopebColor(scopebColor), scopedColor(scopedColor), locx(locx), locy(locy), appearance(appearance), flipped(false), counter(0), flipCounter(0), flipCounterStep(1) { count2 = count - 3; if (count2 < 2) count2 = 2; flipCounter = 0; sr = scopedColor.r * 65536; sg = scopedColor.g * 65536; sb = scopedColor.b * 65536; addr = (scopebColor.r - scopedColor.r) * 65536 / (count2/2); addg = (scopebColor.g - scopedColor.g) * 65536 / (count2/2); addb = (scopebColor.b - scopedColor.b) * 65536 / (count2/2); lasty = locy; lastx = -1; } virtual void fetchSampleData(mp_sint32 sample) { const pp_int32 y = (((-sample >> 10)*(signed)channelHeight)>>6) + locy; g->setSafeColor(sr>>16, sg>>16, sb>>16); sr+=addr; sg+=addg; sb+=addb; if (flipCounter >= (count2>>1)-1 && !flipped) { flipped = true; addr=-addr; addg=-addg; addb=-addb; } flipCounter+=flipCounterStep; switch (appearance) { case ScopesControl::AppearanceTypeNormal: g->setPixel(locx, y); g->setColor(0,0,0); g->setPixel(locx, y+1); break; case ScopesControl::AppearanceTypeSolid: if (y < locy) { g->drawVLine(y, locy, locx); g->setColor(0,0,0); g->setPixel(locx, locy); } else if (y > locy) { g->drawVLine(locy, y, locx); g->setColor(0,0,0); g->setPixel(locx, y); } else { g->setPixel(locx, y); g->setColor(0,0,0); g->setPixel(locx, y+1); } break; case ScopesControl::AppearanceTypeLines: if (!(counter & 1) || (counter == (signed)count-1)) { if (lastx == -1) { g->setPixel(locx, y); g->setColor(0,0,0); g->setPixel(locx, y+1); } else { g->drawAntialiasedLine(lastx,lasty,locx,y); } lasty = y; lastx = locx; } counter++; } locx++; } pp_int32 getLocx() const { return locx; } }; void ScopesControl::paint(PPGraphicsAbstract* g) { if (!isVisible()) return; PPColor bColor = *borderColor, dColor = *borderColor; // adjust dark color dColor.scaleFixed(32768); // adjust bright color bColor.scaleFixed(87163); pp_int32 xOffset = 2; pp_int32 yOffset = 2; backgroundButton->paint(g); g->setRect(location.x, location.y, location.x + size.width+1, location.y + size.height+1); if (border) { drawThickBorder(g, *borderColor); } g->setRect(location.x + 2, location.y + 2, location.x + size.width - 2, location.y + size.height - 2); //g->setColor(0,0,0); //g->fill(); if (!playerController || numChannels < 2) return; PPColor foregroundColor = PPUIConfig::getInstance()->getColor(PPUIConfig::ColorStaticText); pp_int32 channelWidth = visibleWidth / numChannels; pp_int32 channelHeight = visibleHeight; const pp_uint32 numLines = ceil((float)numChannels / (float)WRAPCHANNELS()); const pp_uint32 channelsPerLine = ceil((float)numChannels/(float)numLines); if (isWrapped()) { channelWidth = visibleWidth / channelsPerLine; channelHeight/=numLines; pp_int32 i; pp_int32 r = visibleWidth % channelsPerLine; for (i = 0; i < channelsPerLine; i++) channelWidthTable[i] = channelWidth; for (i = 0; i < r; i++) { pp_int32 j = (i*channelsPerLine)/r; channelWidthTable[j]++; } } else { pp_int32 i; pp_int32 r = visibleWidth % numChannels; for (i = 0; i < numChannels; i++) channelWidthTable[i] = channelWidth; for (i = 0; i < r; i++) { pp_int32 j = (i*numChannels)/r; channelWidthTable[j]++; } } pp_int32 cn = 0; pp_int32 y = 0; pp_int32 x = 0; // calculate shading for scopes PPColor scopebColor = TrackerConfig::colorScopes, scopedColor = TrackerConfig::colorScopes; // adjust dark color scopedColor.scaleFixed(32768); PPColor tempCol = PPUIConfig::getInstance()->getColor(PPUIConfig::ColorListBoxBackground); tempCol.scaleFixed(32768); scopedColor+=tempCol; scopedColor.scaleFixed(49192); const bool wrapped = isWrapped(); for (pp_int32 c = 0; c < numChannels; c++) { char buffer[8]; PPTools::convertToDec(buffer, c + 1, PPTools::getDecNumDigits(c+1)); const mp_sint32 starty = location.y + yOffset + y*channelHeight; mp_sint32 locy = starty + channelHeight / 2; mp_sint32 locx = location.x + xOffset + x; mp_sint32 cWidth = channelWidthTable[cn]; channelRects[c].x1 = locx; channelRects[c].y1 = starty; channelRects[c].x2 = locx + cWidth; channelRects[c].y2 = starty + channelHeight; pp_int32 count = cWidth; // correct last channel cn++; if (wrapped && cn >= channelsPerLine) { cn = 0; y++; count = visibleWidth - (xOffset + x); } else if (c == numChannels-1 && numChannels == (numLines * channelsPerLine)) { count = visibleWidth - (xOffset + x); } g->setColor(TrackerConfig::colorScopes); pp_int32 sx = locx + 3; pp_int32 sy = locy - channelHeight / 2 + 3; pp_int32 sy2 = locy + channelHeight / 2 - smallFont->getCharHeight() - 1; if (!muteChannels[c]) { ScopePainter scopePainter(g, count, channelHeight, scopebColor, scopedColor, locx, locy, appearance); if (enabled) playerController->grabSampleData(c, count, 160, scopePainter); else { for (pp_int32 i = 0; i < count; i++) scopePainter.fetchSampleData(0); } #ifdef PANNINGINDICATOR pp_int32 panx = locx; pp_int32 they = sy; g->drawHLine(panx + 3, panx + count2, they + channelHeight - 8); g->drawHLine(panx + 3, panx + count2, they + channelHeight - 5); g->drawVLine(they + channelHeight - 8, they + channelHeight - 5 + 1, panx + 2); g->drawVLine(they + channelHeight - 8, they + channelHeight - 5 + 1, panx + count2); PPColor col = g->getColor(); g->setColor(TrackerConfig::colorHighLight); pp_int32 thex = panx + 3 + (channel.pan*(count2 - 5)) / 255; g->drawVLine(they + channelHeight - 7, they + channelHeight - 6 + 1, thex); g->drawVLine(they + channelHeight - 7, they + channelHeight - 6 + 1, thex+1); g->setColor(col); #endif locx = scopePainter.getLocx(); } else { PPFont* font = this->font; PPColor col = g->getColor(); const char* muteStr = "MUTE"; if ((signed)font->getStrWidth(muteStr) >= cWidth-2) font = smallFont; if ((signed)font->getStrWidth(muteStr) >= cWidth-2) muteStr = ""; pp_int32 x = locx + (cWidth / 2) - font->getStrWidth(muteStr) / 2; pp_int32 y = locy - font->getCharHeight() / 2; g->setColor(TrackerConfig::colorHighLight_1); g->setFont(font); g->drawString(muteStr, x, y); g->setColor(col); } if (recChannels[c]) { g->setFont(smallFont); g->setColor(0, 0, 0); g->drawString("\xf0", sx, sy2+1); g->setColor(TrackerConfig::colorScopesRecordIndicator); g->drawString("\xf0", sx-1, sy2); } g->setFont((channelWidth < 40 || wrapped) ? smallFont : font); g->setColor(0, 0, 0); g->drawString(buffer, sx+1, sy+1); g->setColor(foregroundColor); g->drawString(buffer, sx, sy); if (cn == 0) x = -cWidth; x+=cWidth; } g->setRect(location.x + 1, location.y + 1, location.x + size.width - 1, location.y + size.height - 1); if (isWrapped()) { pp_int32 xPos = location.x + xOffset; pp_int32 yPos = location.y + yOffset + channelHeight; for (pp_int32 y = 1; y < numLines; y++) { g->setColor(bColor); g->drawHLine(xPos, xPos + visibleWidth - 1, yPos - 1); g->setColor(*borderColor); g->drawHLine(xPos, xPos + visibleWidth - 1, yPos); g->setColor(dColor); g->drawHLine(xPos, xPos + visibleWidth - 1, yPos + 1); yPos += channelHeight; } } x = location.x + xOffset + channelWidthTable[0]; for (cn = 0; cn < (visibleWidth / channelWidth) - 1; cn++) { g->setColor(bColor); g->drawVLine(location.y + yOffset-1, location.y + yOffset + visibleHeight, x-1); g->setColor(*borderColor); g->drawVLine(location.y + yOffset-1, location.y + yOffset + visibleHeight, x); g->setColor(dColor); g->drawVLine(location.y + yOffset, location.y + yOffset + visibleHeight, x+1); x+=channelWidthTable[cn+1]; } } void ScopesControl::attachSource(PlayerController* playerController) { this->playerController = playerController; // should force redraw lastNumChannels = 0; } bool ScopesControl::needsUpdate() { if (playerController == NULL || (numChannels == 0 && lastNumChannels == 0)) return false; if (numChannels != lastNumChannels) { lastNumChannels = numChannels; return true; } bool res = false; for (pp_int32 c = 0; c < numChannels; c++) { if (muteChannels[c] != lastMuteChannels[c]) { lastMuteChannels[c] = muteChannels[c]; res = true; } if (recChannels[c] != lastRecChannels[c]) { lastRecChannels[c] = recChannels[c]; res = true; } bool bPlay = enabled ? playerController->hasSampleData(c) : false; if (bPlay != onOffState[c] || bPlay) res = true; onOffState[c] = bPlay; } return res; } void ScopesControl::handleMute(pp_int32 channel) { muteChannels[channel] = !muteChannels[channel]; PPEvent e(eValueChanged, &muteChannels, sizeof(muteChannels), ChangeValueMuting); eventListener->handleEvent(reinterpret_cast(this), &e); } void ScopesControl::handleSolo(pp_int32 channel) { // unmute? if (isSoloChannel(channel)) { for (pp_uint32 i = 0; i < sizeof(muteChannels)/sizeof(pp_uint8); i++) muteChannels[i] = false; } else { for (pp_uint32 i = 0; i < sizeof(muteChannels)/sizeof(pp_uint8); i++) muteChannels[i] = true; muteChannels[channel] = false; } PPEvent e(eValueChanged, &muteChannels, sizeof(muteChannels), ChangeValueMuting); eventListener->handleEvent(reinterpret_cast(this), &e); } void ScopesControl::handleRec(pp_int32 channel) { recChannels[channel] = !recChannels[channel]; PPEvent e(eValueChanged, &recChannels, sizeof(recChannels), ChangeValueRecording); eventListener->handleEvent(reinterpret_cast(this), &e); } void ScopesControl::handleSingleRec(pp_int32 channel) { // unmute? if (isSingleRecChannel(channel)) { for (pp_uint32 i = 0; i < sizeof(recChannels)/sizeof(pp_uint8); i++) recChannels[i] = true; } else { for (pp_uint32 i = 0; i < sizeof(recChannels)/sizeof(pp_uint8); i++) recChannels[i] = false; recChannels[channel] = true; } PPEvent e(eValueChanged, &recChannels, sizeof(recChannels), ChangeValueRecording); eventListener->handleEvent(reinterpret_cast(this), &e); } void ScopesControl::handleUnmuteAll() { for (pp_uint32 i = 0; i < sizeof(muteChannels)/sizeof(pp_uint8); i++) muteChannels[i] = false; PPEvent e(eValueChanged, &muteChannels, sizeof(muteChannels), ChangeValueMuting); eventListener->handleEvent(reinterpret_cast(this), &e); } pp_int32 ScopesControl::dispatchEvent(PPEvent* event) { if (eventListener == NULL) return -1; switch (event->getID()) { case eLMouseDown: didSoloChannel = false; lMouseDownInChannel = pointToChannel(*(PPPoint*)event->getDataPtr()); break; case eRMouseDown: didSoloChannel = false; rMouseDownInChannel = pointToChannel(*(PPPoint*)event->getDataPtr()); break; case eMMouseUp: { pp_int32 channel = pointToChannel(*(PPPoint*)event->getDataPtr()); handleSolo(channel); break; } case eLMouseUp: { pp_int32 channel = pointToChannel(*(PPPoint*)event->getDataPtr()); // left-right combined mouse click if (channel != -1 && lMouseDownInChannel == channel && rMouseDownInChannel == channel) { handleSolo(channel); didSoloChannel = true; } // normal click else if (channel != -1 && lMouseDownInChannel == channel && rMouseDownInChannel == -1) { switch (currentClickType) { case ClickTypeMute: handleMute(channel); break; case ClickTypeSolo: handleSolo(channel); break; case ClickTypeRec: handleRec(channel); break; case ClickTypeSingleRec: handleSingleRec(channel); break; default: ASSERT(false); } } lMouseDownInChannel = -1; break; } case eRMouseUp: { pp_int32 channel = pointToChannel(*(PPPoint*)event->getDataPtr()); if (channel != -1 && channel == rMouseDownInChannel && lMouseDownInChannel == -1 && !didSoloChannel) { if ((::getKeyModifier() & KeyModifierSHIFT)) { handleSingleRec(channel); } else handleRec(channel); } rMouseDownInChannel = -1; break; } default: break; } return 0; } bool ScopesControl::isSoloChannel(pp_int32 c) const { pp_int32 i = 0; for (pp_int32 j = 0; j < numChannels; j++) if (muteChannels[j]) i++; if (!muteChannels[c] && i == numChannels-1) return true; return false; } bool ScopesControl::isSingleRecChannel(pp_int32 c) const { pp_int32 i = 0; for (pp_int32 j = 0; j < numChannels; j++) if (!recChannels[j]) i++; if (recChannels[c] && i == numChannels-1) return true; return false; } pp_int32 ScopesControl::pointToChannel(const PPPoint& pt) { if (numChannels < 2) return -1; for (pp_int32 c = 0; c < numChannels; c++) { if (pt.x >= channelRects[c].x1 && pt.x < channelRects[c].x2 && pt.y >= channelRects[c].y1 && pt.y < channelRects[c].y2) { return c; } } return -1; } MilkyTracker-1.02.00/src/tracker/ScopesControl.h000066400000000000000000000076131324432207300214520ustar00rootroot00000000000000/* * tracker/ScopesControl.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * ScopesControl.h * MilkyTracker * * Created by Peter Barth on 28.10.05. * */ #ifndef SCOPESCONTROL__H #define SCOPESCONTROL__H #include "BasicTypes.h" #include "Control.h" #include "Event.h" #include "TrackerConfig.h" // Forwards class PPButton; class PPGraphicsAbstract; class PPFont; class PPControl; class PlayerController; class ScopesControl : public PPControl { public: enum ClickTypes { ClickTypeMute, ClickTypeSolo, ClickTypeRec, ClickTypeSingleRec }; enum AppearanceTypes { AppearanceTypeNormal, AppearanceTypeSolid, AppearanceTypeLines }; private: PPColor color; bool border; PPColor ourOwnBorderColor; const PPColor* borderColor; PPButton* backgroundButton; // extent pp_int32 visibleWidth; pp_int32 visibleHeight; PlayerController* playerController; pp_int32 numChannels; pp_int32 channelWidthTable[TrackerConfig::MAXCHANNELS]; bool onOffState[TrackerConfig::MAXCHANNELS]; bool zeroVolumeState[TrackerConfig::MAXCHANNELS]; pp_uint8 muteChannels[TrackerConfig::MAXCHANNELS]; pp_uint8 lastMuteChannels[TrackerConfig::MAXCHANNELS]; pp_uint8 recChannels[TrackerConfig::MAXCHANNELS]; pp_uint8 lastRecChannels[TrackerConfig::MAXCHANNELS]; pp_int32 lastNumChannels; PPRect channelRects[TrackerConfig::MAXCHANNELS]; PPFont* font; PPFont* smallFont; pp_int32 lMouseDownInChannel, rMouseDownInChannel; bool didSoloChannel; bool enabled; AppearanceTypes appearance; ClickTypes currentClickType; public: enum ChangeValueTypes { ChangeValueMuting, ChangeValueRecording }; ScopesControl(pp_int32 id, PPScreen* parentScreen, EventListenerInterface* eventListener, const PPPoint& location, const PPSize& size, bool border = true); virtual ~ScopesControl(); void setColor(pp_int32 r,pp_int32 g,pp_int32 b) { color.r = r; color.g = g; color.b = b; } void setColor(PPColor color) { this->color = color; } void setBorderColor(const PPColor& color) { this->borderColor = &color; } // from PPControl virtual void paint(PPGraphicsAbstract* graphics); virtual pp_int32 dispatchEvent(PPEvent* event); void attachSource(PlayerController* playerController); void setNumChannels(pp_int32 numChannels) { this->numChannels = numChannels; } bool needsUpdate(); void enable(bool b) { enabled = b; } void muteChannel(pp_int32 index, bool b) { muteChannels[index] = (b ? 1 : 0); } void recordChannel(pp_int32 index, bool b) { recChannels[index] = (b ? 1 : 0); } bool isSoloChannel(pp_int32 c) const; bool isSingleRecChannel(pp_int32 c) const; void handleMute(pp_int32 channel); void handleSolo(pp_int32 channel); void handleRec(pp_int32 channel); void handleSingleRec(pp_int32 channel); void handleUnmuteAll(); void setCurrentClickType(ClickTypes type) { currentClickType = type; } ClickTypes getCurrentClickType() const { return currentClickType; } void setAppearance(AppearanceTypes appearance) { this->appearance = appearance; } AppearanceTypes getAppearance() const { return appearance; } private: pp_int32 pointToChannel(const PPPoint& pt); pp_int32 WRAPCHANNELS() const; bool isWrapped() const { return ((numChannels - 2) / WRAPCHANNELS()) > 0; } }; #endif MilkyTracker-1.02.00/src/tracker/SectionAbout.cpp000066400000000000000000000036771324432207300216150ustar00rootroot00000000000000/* * tracker/SectionAbout.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * SectionAbout.cpp * MilkyTracker * * Created by Peter Barth on 17.11.05. * */ #include "SectionAbout.h" #include "Tracker.h" #include "TrackerConfig.h" #include "PlayerController.h" #include "PlayerGeneric.h" #include "AnimatedFXControl.h" #include "ControlIDs.h" enum ControlIDs { FXCONTROL = 9000 }; SectionAbout::SectionAbout(Tracker& theTracker) : SectionUpperLeft(theTracker) { } SectionAbout::~SectionAbout() { } pp_int32 SectionAbout::handleEvent(PPObject* sender, PPEvent* event) { if (event->getID() == eCommand || event->getID() == eCommandRepeat) { switch (reinterpret_cast(sender)->getID()) { case FXCONTROL: if (event->getID() != eCommand) break; show(false); break; } } return 0; } void SectionAbout::init(pp_int32 px, pp_int32 py) { PPScreen* screen = tracker.screen; AnimatedFXControl* ctrl = new AnimatedFXControl(FXCONTROL, tracker.screen, this, PPPoint(px, py), PPSize(320, UPPERLEFTSECTIONHEIGHT)); ctrl->setBorderColor(TrackerConfig::colorThemeMain); screen->addControl(ctrl); sectionContainer = ctrl; initialised = true; showSection(false); } void SectionAbout::update(bool repaint/* = true*/) { } MilkyTracker-1.02.00/src/tracker/SectionAbout.h000066400000000000000000000027031324432207300212470ustar00rootroot00000000000000/* * tracker/SectionAbout.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * SectionAbout.h * MilkyTracker * * Created by Peter Barth on 17.11.05. * */ #ifndef SECTIONABOUT__H #define SECTIONABOUT__H #include "BasicTypes.h" #include "Event.h" #include "SectionUpperLeft.h" class PPControl; class Tracker; class SectionAbout : public SectionUpperLeft { public: SectionAbout(Tracker& tracker); virtual ~SectionAbout(); // Derived from SectionAbstract virtual pp_int32 handleEvent(PPObject* sender, PPEvent* event); virtual void init() { SectionUpperLeft::init(); } virtual void init(pp_int32 x, pp_int32 y); virtual void show(bool bShow) { SectionUpperLeft::show(bShow); } virtual void update(bool repaint = true); friend class Tracker; }; #endif MilkyTracker-1.02.00/src/tracker/SectionAbstract.cpp000066400000000000000000000215331324432207300222750ustar00rootroot00000000000000/* * tracker/SectionAbstract.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * SectionAbstract.cpp * MilkyTracker * * Created by Peter Barth on 06.01.06. * */ #include "SectionAbstract.h" #include "ControlIDs.h" #include "Control.h" #include "Container.h" #include "ListBox.h" #include "Tracker.h" #include "DialogBase.h" #include "SectionSwitcher.h" SectionAbstract::~SectionAbstract() { delete responder; delete dialog; } void SectionAbstract::showMessageBox(pp_uint32 id, const PPString& text, bool yesnocancel/* = false*/) { if (dialog) { delete dialog; dialog = NULL; } dialog = new PPDialogBase(tracker.screen, responder, id, text, yesnocancel ? PPDialogBase::MessageBox_YESNOCANCEL : PPDialogBase::MessageBox_OKCANCEL); dialog->show(); } #ifdef __LOWRES__ void SectionAbstract::replaceAndResizeInstrumentListContainer(pp_int32 listBoxContainerHeight) { PPScreen* screen = tracker.screen; PPContainer* ctrl = static_cast(screen->getControlByID(CONTAINER_INSTRUMENTLIST)); ctrl->getControlByID(BUTTON_INSTRUMENT)->setLocation(PPPoint(3,1)); ctrl->getControlByID(STATICTEXT_SAMPLEHEADER)->setLocation(PPPoint(160+3,3)); ctrl->getControlByID(BUTTON_INSTRUMENTS_PLUS)->setLocation(PPPoint(97,2)); ctrl->getControlByID(BUTTON_INSTRUMENTS_MINUS)->setLocation(PPPoint(97 + ctrl->getControlByID(BUTTON_INSTRUMENTS_PLUS)->getSize().width+1,2)); PPSize size = tracker.listBoxInstruments->getSize(); size.height = listBoxContainerHeight - 15; size.width = screen->getWidth() / 2 - 4; tracker.listBoxInstruments->setSize(size); PPPoint p = tracker.listBoxInstruments->getLocation(); p.x = 2; p.y = 13; tracker.listBoxInstruments->setLocation(p); size = tracker.listBoxSamples->getSize(); size.height = listBoxContainerHeight - 15; size.width = screen->getWidth() / 2 - 4; tracker.listBoxSamples->setSize(size); p = tracker.listBoxSamples->getLocation(); p.x = 2 + (screen->getWidth() / 2); p.y = 13; tracker.listBoxSamples->setLocation(p); // samples listbox always visible tracker.listBoxSamples->hide(false); size = ctrl->getSize(); size.height = listBoxContainerHeight; size.width = screen->getWidth(); ctrl->setSize(size); ctrl->setLocation(PPPoint(0,0)); } void SectionAbstract::replaceInstrumentListBoxes(bool b, pp_int32 listBoxContainerHeight/* = REPLACEDINSTRUMENTLISTBOXESHEIGHT*/) { PPScreen* screen = tracker.screen; if (b) { tracker.showMainMenu(false, true); tracker.sectionSwitcher->showSubMenu(SectionSwitcher::ActiveLowerSectionPageInstruments, false); screen->getControlByID(CONTAINER_LOWRES_TINYMENU)->show(false); PPContainer* ctrl = static_cast(screen->getControlByID(CONTAINER_INSTRUMENTLIST)); oldInstrumentListContainerSize = ctrl->getSize(); oldInstrumentListContainerLocation = ctrl->getLocation(); oldInstrumentListSize = tracker.listBoxInstruments->getSize(); oldInstrumentListLocation = tracker.listBoxInstruments->getLocation(); oldSampleListSize = tracker.listBoxSamples->getSize(); oldSampleListLocation = tracker.listBoxSamples->getLocation(); oldControlLocations[0] = ctrl->getControlByID(BUTTON_INSTRUMENT)->getLocation(); oldControlLocations[1] = ctrl->getControlByID(STATICTEXT_SAMPLEHEADER)->getLocation(); oldControlLocations[2] = ctrl->getControlByID(BUTTON_INSTRUMENTS_PLUS)->getLocation(); oldControlLocations[3] = ctrl->getControlByID(BUTTON_INSTRUMENTS_MINUS)->getLocation(); visibility[0] = ctrl->getControlByID(LISTBOX_INSTRUMENTS)->isHidden(); visibility[1] = ctrl->getControlByID(LISTBOX_SAMPLES)->isHidden(); visibility[2] = ctrl->getControlByID(BUTTON_INSTRUMENT)->isHidden(); visibility[3] = ctrl->getControlByID(STATICTEXT_SAMPLEHEADER)->isHidden(); visibility[4] = ctrl->getControlByID(BUTTON_INSTRUMENTS_PLUS)->isHidden(); visibility[5] = ctrl->getControlByID(BUTTON_INSTRUMENTS_MINUS)->isHidden(); visibility[6] = ctrl->getControlByID(STATICTEXT_INSTRUMENTS_ALTERNATIVEHEADER)->isHidden(); visibility[7] = ctrl->getControlByID(STATICTEXT_INSTRUMENTS_ALTERNATIVEHEADER2)->isHidden(); visibility[8] = ctrl->getControlByID(BUTTON_JAMMENU_NEXTINSTRUMENT)->isHidden(); visibility[9] = ctrl->getControlByID(BUTTON_JAMMENU_PREVINSTRUMENT)->isHidden(); replaceAndResizeInstrumentListContainer(listBoxContainerHeight); // flip button is always hidden ctrl->getControlByID(BUTTON_INSTRUMENTS_FLIP)->hide(true); // so is alternative header ("Samples / Ins:xx") ctrl->getControlByID(STATICTEXT_INSTRUMENTS_ALTERNATIVEHEADER)->hide(true); ctrl->getControlByID(STATICTEXT_INSTRUMENTS_ALTERNATIVEHEADER2)->hide(true); // up/down buttons as well ctrl->getControlByID(BUTTON_JAMMENU_NEXTINSTRUMENT)->hide(true); ctrl->getControlByID(BUTTON_JAMMENU_PREVINSTRUMENT)->hide(true); // instrument button always visible ctrl->getControlByID(BUTTON_INSTRUMENT)->hide(false); ctrl->getControlByID(STATICTEXT_SAMPLEHEADER)->hide(false); // instrument "+" visible ctrl->getControlByID(BUTTON_INSTRUMENTS_PLUS)->hide(false); // instrument "-" visible ctrl->getControlByID(BUTTON_INSTRUMENTS_MINUS)->hide(false); // listbox is always visible tracker.listBoxInstruments->hide(false); // add another button if (ctrl->getControlByID(BUTTON_SAMPLES_INVOKEHDRECORDER) == NULL) { PPPoint p = ctrl->getControlByID(STATICTEXT_SAMPLEHEADER)->getLocation(); p.y = ctrl->getControlByID(BUTTON_INSTRUMENTS_PLUS)->getLocation().y; pp_int32 width = ctrl->getControlByID(STATICTEXT_SAMPLEHEADER)->getSize().width; pp_int32 height = ctrl->getControlByID(BUTTON_INSTRUMENTS_PLUS)->getSize().height; PPButton* button = new PPButton(BUTTON_SAMPLES_INVOKEHDRECORDER, screen, &tracker, PPPoint(p.x + width + 2, p.y), PPSize(7*5, height)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Render"); ctrl->addControl(button); } else { PPPoint p = ctrl->getControlByID(STATICTEXT_SAMPLEHEADER)->getLocation(); p.y = ctrl->getControlByID(BUTTON_INSTRUMENTS_PLUS)->getLocation().y; pp_int32 width = ctrl->getControlByID(STATICTEXT_SAMPLEHEADER)->getSize().width; pp_int32 height = ctrl->getControlByID(BUTTON_INSTRUMENTS_PLUS)->getSize().height; PPButton* button = static_cast(ctrl->getControlByID(BUTTON_SAMPLES_INVOKEHDRECORDER)); button->setLocation(PPPoint(p.x + width + 2, p.y)); button->setSize(PPSize(7*5, height)); button->hide(false); } } else { tracker.showMainMenu(true, true); tracker.listBoxInstruments->setSize(oldInstrumentListSize); tracker.listBoxInstruments->setLocation(oldInstrumentListLocation); tracker.listBoxSamples->setSize(oldSampleListSize); tracker.listBoxSamples->setLocation(oldSampleListLocation); PPContainer* ctrl = static_cast(screen->getControlByID(CONTAINER_INSTRUMENTLIST)); ctrl->setSize(oldInstrumentListContainerSize); ctrl->setLocation(oldInstrumentListContainerLocation); ctrl->getControlByID(BUTTON_INSTRUMENT)->setLocation(oldControlLocations[0]); ctrl->getControlByID(STATICTEXT_SAMPLEHEADER)->setLocation(oldControlLocations[1]); ctrl->getControlByID(BUTTON_INSTRUMENTS_PLUS)->setLocation(oldControlLocations[2]); ctrl->getControlByID(BUTTON_INSTRUMENTS_MINUS)->setLocation(oldControlLocations[3]); // this is always visible ctrl->getControlByID(BUTTON_INSTRUMENTS_FLIP)->hide(false); // for the rest just restore the old visibility flags ctrl->getControlByID(LISTBOX_INSTRUMENTS)->hide(visibility[0]); ctrl->getControlByID(LISTBOX_SAMPLES)->hide(visibility[1]); ctrl->getControlByID(BUTTON_INSTRUMENT)->hide(visibility[2]); ctrl->getControlByID(STATICTEXT_SAMPLEHEADER)->hide(visibility[3]); ctrl->getControlByID(BUTTON_INSTRUMENTS_PLUS)->hide(visibility[4]); ctrl->getControlByID(BUTTON_INSTRUMENTS_MINUS)->hide(visibility[5]); ctrl->getControlByID(STATICTEXT_INSTRUMENTS_ALTERNATIVEHEADER)->hide(visibility[6]); ctrl->getControlByID(STATICTEXT_INSTRUMENTS_ALTERNATIVEHEADER2)->hide(visibility[7]); ctrl->getControlByID(BUTTON_JAMMENU_NEXTINSTRUMENT)->hide(visibility[8]); ctrl->getControlByID(BUTTON_JAMMENU_PREVINSTRUMENT)->hide(visibility[9]); PPControl* dummy = ctrl->getControlByID(BUTTON_SAMPLES_INVOKEHDRECORDER); if (dummy) dummy->hide(true); } } #endif MilkyTracker-1.02.00/src/tracker/SectionAbstract.h000066400000000000000000000053561324432207300217470ustar00rootroot00000000000000/* * tracker/SectionAbstract.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * SectionAbstract.h * MilkyTracker * * Created by Peter Barth on 14.04.05. * */ #ifndef SECTIONABSTRACT__H #define SECTIONABSTRACT__H #include "BasicTypes.h" #include "Event.h" #include "Screen.h" #include "Tracker.h" class PPControl; class SectionAbstract : public EventListenerInterface { private: PPControl* lastFocusedControl; protected: Tracker& tracker; bool initialised; class PPDialogBase* dialog; class DialogResponder* responder; protected: virtual void showSection(bool bShow) = 0; void showMessageBox(pp_uint32 id, const PPString& text, bool yesnocancel = false); public: SectionAbstract(Tracker& theTracker, PPDialogBase* dialog = NULL, DialogResponder* responder = NULL) : lastFocusedControl(NULL), tracker(theTracker), initialised(false), dialog(dialog), responder(responder) { } virtual ~SectionAbstract(); // PPEvent listener virtual pp_int32 handleEvent(PPObject* sender, PPEvent* event) = 0; virtual void init() = 0; virtual void init(pp_int32 x, pp_int32 y) = 0; virtual void show(bool bShow) { #ifdef __LOWRES__ if (bShow) lastFocusedControl = tracker.screen->getFocusedControl(); else tracker.screen->setFocus(lastFocusedControl); #endif } virtual void update(bool repaint = true) = 0; virtual void notifyInstrumentSelect(pp_int32 index) {} virtual void notifySampleSelect(pp_int32 index) {} virtual void notifyTabSwitch() {} friend class Tracker; #ifdef __LOWRES__ private: PPSize oldInstrumentListSize; PPPoint oldInstrumentListLocation; PPSize oldSampleListSize; PPPoint oldSampleListLocation; PPSize oldInstrumentListContainerSize; PPPoint oldInstrumentListContainerLocation; PPPoint oldControlLocations[4]; bool visibility[10]; protected: enum { REPLACEDINSTRUMENTLISTBOXESHEIGHT = 37+15 }; void replaceAndResizeInstrumentListContainer(pp_int32 listBoxContainerHeight); void replaceInstrumentListBoxes(bool b, pp_int32 listBoxContainerHeight = REPLACEDINSTRUMENTLISTBOXESHEIGHT); #endif }; #endif MilkyTracker-1.02.00/src/tracker/SectionAdvancedEdit.cpp000066400000000000000000000276631324432207300230570ustar00rootroot00000000000000/* * tracker/SectionAdvancedEdit.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * SectionAdvancedEdit.cpp * MilkyTracker * * Created by Peter Barth on 10.05.05. * */ #include "SectionAdvancedEdit.h" #include "Tracker.h" #include "ToolInvokeHelper.h" #include "TrackerConfig.h" #include "ModuleEditor.h" #include "CheckBox.h" #include "CheckBoxLabel.h" #include "Container.h" #include "RadioGroup.h" #include "Seperator.h" #include "StaticText.h" #include "PatternEditorControl.h" #include "PatternTools.h" #include "Tools.h" #include "ControlIDs.h" enum ControlIDs { ADVEDIT_BUTTON_EXIT = 32000, ADVEDIT_BUTTON_INSREMAP, ADVEDIT_BUTTON_INTERPOLATE, ADVEDIT_BUTTON_VOLSCALETRACK, ADVEDIT_BUTTON_VOLSCALEPATTERN, ADVEDIT_BUTTON_VOLSCALEBLOCK, ADVEDIT_BUTTON_SPLITBLOCK, ADVEDIT_BUTTON_SPLITTRACK, ADVEDIT_BUTTON_SPLITTRACKPLUS, ADVEDIT_BUTTON_SPLITTRACKMINUS, ADVEDIT_CHECKBOX_SPLITTRACK, ADVEDIT_CHECKBOX_SPLITTRACKNOTEOFF, ADVEDIT_TEXT_SPLITTRACK, ADVEDIT_RADIO_CONVERT, ADVEDIT_BUTTON_CONVERT, ADVEDIT_RADIO_REMOVE, ADVEDIT_BUTTON_REMOVE }; SectionAdvancedEdit::SectionAdvancedEdit(Tracker& theTracker) : SectionUpperLeft(theTracker), splitTrackNumSubsequentChannels(1), checkBoxSplitTrack(NULL), checkBoxSplitTrackNoteOff(NULL) { } SectionAdvancedEdit::~SectionAdvancedEdit() { } pp_int32 SectionAdvancedEdit::handleEvent(PPObject* sender, PPEvent* event) { PPScreen* screen = tracker.screen; char buffer[100]; if (event->getID() == eCommand || event->getID() == eCommandRepeat) { switch (reinterpret_cast(sender)->getID()) { case ADVEDIT_BUTTON_INSREMAP: if (event->getID() != eCommand) break; tracker.initAdvEdit(); break; case ADVEDIT_BUTTON_INTERPOLATE: { if (event->getID() != eCommand) break; pp_int32 res = tracker.getPatternEditor()->interpolateValuesInSelection(); if (res) screen->paint(); else tracker.showMessageBox(MESSAGEBOX_UNIVERSAL, "Please select at least 2 values.", Tracker::MessageBox_OK); break; } case ADVEDIT_BUTTON_VOLSCALETRACK: { if (event->getID() != eCommand) break; tracker.toolInvokeHelper->invokeTool(ToolInvokeHelper::ToolTypeTrackVolumeScale); break; } case ADVEDIT_BUTTON_VOLSCALEPATTERN: { if (event->getID() != eCommand) break; tracker.toolInvokeHelper->invokeTool(ToolInvokeHelper::ToolTypePatternVolumeScale); break; } case ADVEDIT_BUTTON_VOLSCALEBLOCK: { if (event->getID() != eCommand) break; tracker.toolInvokeHelper->invokeTool(ToolInvokeHelper::ToolTypeSelectionVolumeScale); break; } case ADVEDIT_BUTTON_SPLITTRACKPLUS: { splitTrackNumSubsequentChannels++; if (splitTrackNumSubsequentChannels >= (signed)tracker.moduleEditor->getNumChannels()) splitTrackNumSubsequentChannels = (signed)tracker.moduleEditor->getNumChannels()-1; if (splitTrackNumSubsequentChannels < 1) splitTrackNumSubsequentChannels = 1; update(); break; } case ADVEDIT_BUTTON_SPLITTRACKMINUS: { splitTrackNumSubsequentChannels--; if (splitTrackNumSubsequentChannels < 1) splitTrackNumSubsequentChannels = 1; update(); break; } case ADVEDIT_BUTTON_SPLITTRACK: { if (event->getID() != eCommand) break; pp_int32 res = tracker.getPatternEditor()->splitTrack(splitTrackNumSubsequentChannels, checkBoxSplitTrack->isChecked(), checkBoxSplitTrackNoteOff->isChecked()); if (res>=0) screen->paint(); else tracker.showMessageBox(MESSAGEBOX_UNIVERSAL, "Please select only within one track.", Tracker::MessageBox_OK); break; } case ADVEDIT_BUTTON_CONVERT: { if (event->getID() != eCommand) break; pp_int32 res = 0; switch (static_cast(static_cast(sectionContainer)->getControlByID(ADVEDIT_RADIO_CONVERT))->getChoice()) { case 0: res = tracker.moduleEditor->panConvertSong(ModuleEditor::PanConversionTypeConvert_E8x); break; case 1: res = tracker.moduleEditor->panConvertSong(ModuleEditor::PanConversionTypeConvert_80x); break; } if (res) sprintf(buffer, "%i commands have been converted", res); else sprintf(buffer, "Nothing to do"); tracker.showMessageBox(MESSAGEBOX_UNIVERSAL, buffer, Tracker::MessageBox_OK); break; } case ADVEDIT_BUTTON_REMOVE: { pp_int32 res = 0; switch (static_cast(static_cast(sectionContainer)->getControlByID(ADVEDIT_RADIO_REMOVE))->getChoice()) { case 0: res = tracker.moduleEditor->panConvertSong(ModuleEditor::PanConversionTypeRemove_E8x); break; case 1: res = tracker.moduleEditor->panConvertSong(ModuleEditor::PanConversionTypeRemove_8xx); break; } if (res) sprintf(buffer, "%i commands have been erased", res); else sprintf(buffer, "Nothing to do"); tracker.showMessageBox(MESSAGEBOX_UNIVERSAL, buffer, Tracker::MessageBox_OK); break; } case ADVEDIT_BUTTON_EXIT: if (event->getID() != eCommand) break; show(false); break; } } return 0; } void SectionAdvancedEdit::init(pp_int32 px, pp_int32 py) { PPScreen* screen = tracker.screen; PPContainer* container = new PPContainer(CONTAINER_ADVEDIT, tracker.screen, this, PPPoint(px, py), PPSize(320,UPPERLEFTSECTIONHEIGHT), false); container->setColor(TrackerConfig::colorThemeMain); tracker.screen->addControl(container); container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(px + 2, py + 2), "Advanced editing", true, true)); PPSize size = container->getSize(); pp_int32 buttonWidth = 8*4+4; pp_int32 buttonHeight = 11; pp_int32 x = px+container->getSize().width-(buttonWidth+4); pp_int32 y = py+container->getSize().height-(buttonHeight+4); container->addControl(new PPSeperator(0, screen, PPPoint(x - 6, y - 5), 5 + buttonHeight + 3, TrackerConfig::colorThemeMain, false)); container->addControl(new PPSeperator(0, screen, PPPoint(px+2, y - 5), container->getSize().width-5, container->getColor(), true)); PPButton* button = new PPButton(ADVEDIT_BUTTON_EXIT, screen, this, PPPoint(x, y), PPSize(buttonWidth,buttonHeight)); button->setText("Exit"); container->addControl(button); x = px+4; y = py+4+12; buttonWidth = 76; button = new PPButton(ADVEDIT_BUTTON_INSREMAP, screen, this, PPPoint(x, y), PPSize(buttonWidth,buttonHeight)); button->setText("Remap Ins"); container->addControl(button); x+=button->getSize().width+1; buttonWidth = 68; button = new PPButton(ADVEDIT_BUTTON_INTERPOLATE, screen, this, PPPoint(x, y), PPSize(buttonWidth,buttonHeight)); button->setText("Interpol"); container->addControl(button); x+=button->getSize().width+2; container->addControl(new PPSeperator(0, screen, PPPoint(x, py), 30, container->getColor(), false)); x+=4; container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x, py + 2), "Volume scale", true, true)); x+=1; buttonWidth = (container->getSize().width - 5 - (x-px)) / 3; button = new PPButton(ADVEDIT_BUTTON_VOLSCALETRACK, screen, this, PPPoint(x, y), PPSize(buttonWidth,buttonHeight)); button->setText("Track"); container->addControl(button); x+=button->getSize().width+1; button = new PPButton(ADVEDIT_BUTTON_VOLSCALEPATTERN, screen, this, PPPoint(x, y), PPSize(buttonWidth-1,buttonHeight)); button->setText("Patt"); container->addControl(button); x+=button->getSize().width+1; button = new PPButton(ADVEDIT_BUTTON_VOLSCALEBLOCK, screen, this, PPPoint(x, y), PPSize(buttonWidth,buttonHeight)); button->setText("Block"); container->addControl(button); y+=button->getSize().height+3; x = px; container->addControl(new PPSeperator(0, screen, PPPoint(x+2, y), size.width-5, container->getColor(), true)); pp_int32 y3 = y+1; y+=3; container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x + 2, y + 2), "Split track options:", true)); y+=12; container->addControl(new PPStaticText(ADVEDIT_TEXT_SPLITTRACK, NULL, NULL, PPPoint(x + 2, y + 2), "Use subsequent 00 channels", true)); button = new PPButton(ADVEDIT_BUTTON_SPLITTRACKPLUS, screen, this, PPPoint(x+214, y), PPSize(11, 9)); button->setText(TrackerConfig::stringButtonPlus); container->addControl(button); button = new PPButton(ADVEDIT_BUTTON_SPLITTRACKMINUS, screen, this, PPPoint(x+214+12, y), PPSize(11, 9)); button->setText(TrackerConfig::stringButtonMinus); container->addControl(button); y+=12; checkBoxSplitTrack = new PPCheckBox(ADVEDIT_CHECKBOX_SPLITTRACK, screen, this, PPPoint(x + 11 * 8, y)); checkBoxSplitTrack->checkIt(false); container->addControl(new PPCheckBoxLabel(0, NULL, this, PPPoint(x + 2, y + 2), "Block only", checkBoxSplitTrack, true)); container->addControl(checkBoxSplitTrack); checkBoxSplitTrackNoteOff = new PPCheckBox(ADVEDIT_CHECKBOX_SPLITTRACKNOTEOFF, screen, this, PPPoint(x + 28 * 8 + 3, y)); checkBoxSplitTrackNoteOff->checkIt(false); container->addControl(new PPCheckBoxLabel(0, NULL, this, PPPoint(x + 2 + 12*8 + 4, y + 2), "Insert note off", checkBoxSplitTrackNoteOff, true)); container->addControl(checkBoxSplitTrackNoteOff); y+=12; container->addControl(new PPSeperator(0, screen, PPPoint(x+2, y), size.width-5, container->getColor(), true)); container->addControl(new PPSeperator(0, screen, PPPoint(x + 240, y3), y-y3, TrackerConfig::colorThemeMain, false)); button = new PPButton(ADVEDIT_BUTTON_SPLITTRACK, screen, this, PPPoint(x + 253, y3 + 10), PPSize(54,20)); button->setText("Split"); container->addControl(button); y+=3; container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x + 2, y + 2), "Panning conversion (entire song only)", true)); y+=13; PPRadioGroup* radioGroup = new PPRadioGroup(ADVEDIT_RADIO_CONVERT, screen, this, PPPoint(x, y-3), PPSize(80, 14)); radioGroup->setColor(TrackerConfig::colorThemeMain); radioGroup->setHorizontal(true); radioGroup->addItem("E8x"); radioGroup->addItem("80x"); container->addControl(radioGroup); x+=radioGroup->getSize().width+1+3; buttonWidth = 8*8+4; button = new PPButton(ADVEDIT_BUTTON_CONVERT, screen, this, PPPoint(x, y), PPSize(buttonWidth,buttonHeight)); button->setText("Convert"); container->addControl(button); x+=button->getSize().width; x+=12; radioGroup = new PPRadioGroup(ADVEDIT_RADIO_REMOVE, screen, this, PPPoint(x, y-3), PPSize(80, 14)); radioGroup->setColor(TrackerConfig::colorThemeMain); radioGroup->setHorizontal(true); radioGroup->addItem("E8x"); radioGroup->addItem("8xx"); container->addControl(radioGroup); x+=radioGroup->getSize().width+1+3; buttonWidth = 8*8+4; button = new PPButton(ADVEDIT_BUTTON_REMOVE, screen, this, PPPoint(x, y), PPSize(buttonWidth,buttonHeight)); button->setText("Remove"); container->addControl(button); x+=button->getSize().width+1; sectionContainer = container; initialised = true; showSection(false); } void SectionAdvancedEdit::update(bool repaint/* = true*/) { char buffer[80]; PPContainer* container = static_cast(sectionContainer); ASSERT(sectionContainer); PPStaticText* text = static_cast(container->getControlByID(ADVEDIT_TEXT_SPLITTRACK)); sprintf(buffer, "Use subsequent %02i channels", splitTrackNumSubsequentChannels); text->setText(buffer); if (repaint) tracker.screen->paintControl(container); } MilkyTracker-1.02.00/src/tracker/SectionAdvancedEdit.h000066400000000000000000000032031324432207300225040ustar00rootroot00000000000000/* * tracker/SectionAdvancedEdit.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * SectionAdvancedEdit.h * MilkyTracker * * Created by Peter Barth on 10.05.05. * */ #ifndef SECTIONADVANCEDEDIT__H #define SECTIONADVANCEDEDIT__H #include "BasicTypes.h" #include "Event.h" #include "SectionUpperLeft.h" class PPControl; class Tracker; class PPCheckBox; class SectionAdvancedEdit : public SectionUpperLeft { private: pp_int32 splitTrackNumSubsequentChannels; PPCheckBox* checkBoxSplitTrack; PPCheckBox* checkBoxSplitTrackNoteOff; public: SectionAdvancedEdit(Tracker& tracker); virtual ~SectionAdvancedEdit(); // Derived from SectionAbstract virtual pp_int32 handleEvent(PPObject* sender, PPEvent* event); virtual void init() { SectionUpperLeft::init(); } virtual void init(pp_int32 x, pp_int32 y); virtual void show(bool bShow) { SectionUpperLeft::show(bShow); } virtual void update(bool repaint = true); friend class Tracker; }; #endif MilkyTracker-1.02.00/src/tracker/SectionDiskMenu.cpp000066400000000000000000001526311324432207300222550ustar00rootroot00000000000000/* * tracker/SectionDiskMenu.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * SectionDiskMenu.cpp * MilkyTracker * * Created by Peter Barth on 08.07.05. * */ #include "SectionDiskMenu.h" #include "Tracker.h" #include "TrackerConfig.h" #include "TrackerSettingsDatabase.h" #include "ModuleEditor.h" #include "GlobalColorConfig.h" #include "Container.h" #include "MessageBoxContainer.h" #include "RadioGroup.h" #include "Seperator.h" #include "Slider.h" #include "StaticText.h" #include "ListBox.h" #include "ListBoxFileBrowser.h" #include "CheckBox.h" #include "CheckBoxLabel.h" #include "PPUIConfig.h" #include "PatternEditorControl.h" #include "SectionSwitcher.h" #include "SectionHDRecorder.h" #include "DialogBase.h" #include "PatternTools.h" #include "Tools.h" #include "PPPath.h" #include "XMFile.h" #include "PPSavePanel.h" #include "FileExtProvider.h" #include "ControlIDs.h" enum ControlIDs { DISKMENU_BUTTON_FLIP = 7000, DISKMENU_BUTTON_EXIT, DISKMENU_NORMAL_STATICTEXT_HEADING, DISKMENU_NORMAL_BUTTON_LOAD_SONG, DISKMENU_NORMAL_BUTTON_SAVE_SONG, DISKMENU_NORMAL_BUTTON_LOAD_PATTERN, DISKMENU_NORMAL_BUTTON_SAVE_PATTERN, DISKMENU_NORMAL_BUTTON_LOAD_TRACK, DISKMENU_NORMAL_BUTTON_SAVE_TRACK, DISKMENU_NORMAL_BUTTON_LOAD_INSTRUMENT, DISKMENU_NORMAL_BUTTON_SAVE_INSTRUMENT, DISKMENU_NORMAL_BUTTON_LOAD_SAMPLE, DISKMENU_NORMAL_BUTTON_SAVE_SAMPLE, DISKMENU_NORMAL_RADIOGROUP_SONGTYPE, DISKMENU_NORMAL_RADIOGROUP_PATTERNTYPE, DISKMENU_NORMAL_RADIOGROUP_TRACKTYPE, DISKMENU_NORMAL_RADIOGROUP_INSTRUMENTTYPE, DISKMENU_NORMAL_RADIOGROUP_SAMPLETYPE, DISKMENU_CLASSIC_STATICTEXT_HEADING, DISKMENU_CLASSIC_BUTTON_TYPE_TYPE, DISKMENU_CLASSIC_BUTTON_TYPE_MODULE, DISKMENU_CLASSIC_BUTTON_TYPE_INSTRUMENT, DISKMENU_CLASSIC_BUTTON_TYPE_SAMPLE, DISKMENU_CLASSIC_BUTTON_TYPE_PATTERN, DISKMENU_CLASSIC_BUTTON_TYPE_TRACK, DISKMENU_CLASSIC_BUTTON_SAVE, DISKMENU_CLASSIC_LISTBOX_NAME, DISKMENU_CLASSIC_LISTBOX_BROWSER, DISKMENU_CLASSIC_BUTTON_PREV, DISKMENU_CLASSIC_BUTTON_NEXT, DISKMENU_CLASSIC_BUTTON_PARENT, DISKMENU_CLASSIC_BUTTON_ROOT, DISKMENU_CLASSIC_BUTTON_HOME, DISKMENU_CLASSIC_BUTTON_REFRESH, DISKMENU_CLASSIC_BUTTON_LOAD, DISKMENU_CLASSIC_BUTTON_DELETE, DISKMENU_CLASSIC_BUTTON_MAKEDIR, DISKMENU_CLASSIC_STATICTEXT_FILTEREXTENSIONS, DISKMENU_CLASSIC_CHECKBOX_FILTEREXTENSIONS, DISKMENU_CLASSIC_STATICTEXT_SORTBY, DISKMENU_CLASSIC_BUTTON_SORTBY, DISKMENU_CLASSIC_BUTTON_SORTORDER, DISKMENU_CLASSIC_BUTTON_VEXTEND, DISKMENU_CLASSIC_BUTTON_HEXTEND, DISKMENU_CLASSIC_BUTTON_DIR0, DISKMENU_CLASSIC_BUTTON_DIR1, DISKMENU_CLASSIC_BUTTON_DIR2, DISKMENU_CLASSIC_BUTTON_DIR3, DISKMENU_CLASSIC_BUTTON_DIR4, DISKMENU_CLASSIC_BUTTON_STOREDIR, // this needs to be DISKMENU_CLASSIC_BUTTON_DIR5+1 DISKMENU_CLASSIC_BUTTON_TYPE, RESPONDMESSAGEBOX_OVERWRITE, RESPONDMESSAGEBOX_DELETE }; #define RADIOGROUPTOINDEX(ID) ((ID) - DISKMENU_NORMAL_RADIOGROUP_SONGTYPE) #define INDEXTORADIOGROUP(INDEX) ((INDEX) + DISKMENU_NORMAL_RADIOGROUP_SONGTYPE) // Class which responds to the above message box clicks class DialogResponderDisk : public DialogResponder { private: SectionDiskMenu& section; public: DialogResponderDisk(SectionDiskMenu& section) : section(section) { } virtual pp_int32 ActionOkay(PPObject* sender) { if (reinterpret_cast(sender)->getID() == RESPONDMESSAGEBOX_OVERWRITE) { section.saveCurrent(); return 1; } else if (reinterpret_cast(sender)->getID() == RESPONDMESSAGEBOX_DELETE) { section.deleteCurrent(); } return 0; } virtual pp_int32 ActionCancel(PPObject* sender) { return 0; } }; class PPDummySavePanel : public PPSavePanel { public: PPDummySavePanel(const PPSystemString& defaultFileName) : PPSavePanel(NULL, "", defaultFileName) { this->defaultFileName = defaultFileName; } virtual ReturnCodes runModal() { return ReturnCodeOK; } virtual const PPSystemString& getFileName() { return defaultFileName; } }; class ColorQueryListener : public PPListBox::ColorQueryListener { private: SectionDiskMenu& sectionDiskMenu; public: ColorQueryListener(SectionDiskMenu& theSectionDiskMenu) : sectionDiskMenu(theSectionDiskMenu) { } virtual PPColor getColor(pp_uint32 index, PPListBox& sender) { PPListBoxFileBrowser& listBoxFiles = static_cast(sender); const PPColor& fileColor = GlobalColorConfig::getInstance()->getColor(GlobalColorConfig::ColorTextHighlited); const PPColor& dirColor = GlobalColorConfig::getInstance()->getColor(GlobalColorConfig::ColorForegroundText); return listBoxFiles.getPathEntry(index)->isFile() ? fileColor : dirColor; } }; SectionDiskMenu::SectionDiskMenu(Tracker& theTracker) : SectionUpperLeft(theTracker, NULL, new DialogResponderDisk(*this)), diskMenuVisible(false), classicViewState(BrowseModules), forceClassicBrowser(false), moduleTypeAdjust(true), sortAscending(true), storePath(false), listBoxFiles(NULL), editFieldCurrentFile(NULL), currentActiveRadioGroup(NULL) { normalViewControls = new PPSimpleVector(0, false); classicViewControls = new PPSimpleVector(0, false); fileFullPath = new PPSystemString(); file = new PPSystemString(); lastFocusedControl = NULL; #ifdef __LOWRES__ lastSIPOffsetMove = 0; #endif colorQueryListener = new ColorQueryListener(*this); } SectionDiskMenu::~SectionDiskMenu() { delete colorQueryListener; delete fileFullPath; delete file; delete normalViewControls; delete classicViewControls; } pp_int32 SectionDiskMenu::getCurrentSelectedSampleSaveType() { if (sectionContainer == NULL) return -1; switch (static_cast(static_cast(sectionContainer)->getControlByID(DISKMENU_NORMAL_RADIOGROUP_SAMPLETYPE))->getChoice()) { case 0: return FileTypes::FileTypeSampleWAV; case 1: return FileTypes::FileTypeSampleIFF; } return -1; } pp_int32 SectionDiskMenu::handleEvent(PPObject* sender, PPEvent* event) { PPScreen* screen = tracker.screen; if (event->getID() == eCommand) { switch (reinterpret_cast(sender)->getID()) { case DISKMENU_NORMAL_BUTTON_LOAD_SONG: { if (screen->getModalControl()) break; tracker.loadTypeWithDialog(FileTypes::FileTypeSongAllModules); break; } case DISKMENU_NORMAL_BUTTON_SAVE_SONG: { switch (static_cast(static_cast(sectionContainer)->getControlByID(DISKMENU_NORMAL_RADIOGROUP_SONGTYPE))->getChoice()) { case 0: tracker.saveTypeWithDialog(FileTypes::FileTypeSongXM); break; case 1: tracker.saveTypeWithDialog(FileTypes::FileTypeSongMOD); break; case 2: tracker.sectionSwitcher->showUpperSection(tracker.sectionHDRecorder); break; } break; } case DISKMENU_NORMAL_BUTTON_LOAD_PATTERN: { tracker.loadTypeWithDialog(FileTypes::FileTypePatternXP); break; } case DISKMENU_NORMAL_BUTTON_SAVE_PATTERN: { tracker.saveTypeWithDialog(FileTypes::FileTypePatternXP); break; } case DISKMENU_NORMAL_BUTTON_LOAD_TRACK: { tracker.loadTypeWithDialog(FileTypes::FileTypeTrackXT); break; } case DISKMENU_NORMAL_BUTTON_SAVE_TRACK: { tracker.saveTypeWithDialog(FileTypes::FileTypeTrackXT); break; } case DISKMENU_NORMAL_BUTTON_LOAD_INSTRUMENT: { tracker.loadTypeWithDialog(FileTypes::FileTypeSongAllInstruments); break; } case DISKMENU_NORMAL_BUTTON_SAVE_INSTRUMENT: { tracker.saveTypeWithDialog(FileTypes::FileTypeInstrumentXI); break; } case DISKMENU_NORMAL_BUTTON_LOAD_SAMPLE: { tracker.loadTypeWithDialog(FileTypes::FileTypeSongAllSamples); break; } case DISKMENU_NORMAL_BUTTON_SAVE_SAMPLE: { tracker.saveTypeWithDialog(getCurrentSelectedSampleSaveType()); break; } case DISKMENU_BUTTON_FLIP: { flip(); break; } case DISKMENU_CLASSIC_BUTTON_TYPE_TYPE: { switchState(BrowseAll); break; } case DISKMENU_CLASSIC_BUTTON_TYPE_MODULE: { switchState(BrowseModules); break; } case DISKMENU_CLASSIC_BUTTON_TYPE_INSTRUMENT: { switchState(BrowseInstruments); break; } case DISKMENU_CLASSIC_BUTTON_TYPE_SAMPLE: { switchState(BrowseSamples); break; } case DISKMENU_CLASSIC_BUTTON_TYPE_PATTERN: { switchState(BrowsePatterns); break; } case DISKMENU_CLASSIC_BUTTON_TYPE_TRACK: { switchState(BrowseTracks); break; } case DISKMENU_CLASSIC_BUTTON_SAVE: { prepareSave(); break; } case DISKMENU_CLASSIC_BUTTON_PREV: prev(); break; case DISKMENU_CLASSIC_BUTTON_NEXT: next(); break; case DISKMENU_CLASSIC_BUTTON_PARENT: parent(); break; case DISKMENU_CLASSIC_BUTTON_ROOT: root(); break; case DISKMENU_CLASSIC_BUTTON_HOME: home(); break; case DISKMENU_CLASSIC_BUTTON_REFRESH: reload(); break; case DISKMENU_CLASSIC_BUTTON_DELETE: showDeleteMessageBox(); break; case DISKMENU_CLASSIC_BUTTON_LOAD: handleLoadOrStep(); break; case DISKMENU_CLASSIC_BUTTON_SORTBY: listBoxFiles->cycleSorting(); reload(); updateButtonStates(); break; case DISKMENU_CLASSIC_BUTTON_SORTORDER: sortAscending = !sortAscending; listBoxFiles->setSortAscending(sortAscending); reload(); updateButtonStates(); break; case DISKMENU_CLASSIC_CHECKBOX_FILTEREXTENSIONS: updateFilter(); break; case DISKMENU_CLASSIC_BUTTON_VEXTEND: resizeBrowserVertically(); break; case DISKMENU_CLASSIC_BUTTON_HEXTEND: resizeBrowserHorizontally(); break; case DISKMENU_CLASSIC_BUTTON_STOREDIR: { storePath = !storePath; PPButton* button = reinterpret_cast(sender); button->setPressed(storePath); screen->paintControl(button); break; } case DISKMENU_CLASSIC_BUTTON_DIR0: case DISKMENU_CLASSIC_BUTTON_DIR1: case DISKMENU_CLASSIC_BUTTON_DIR2: case DISKMENU_CLASSIC_BUTTON_DIR3: case DISKMENU_CLASSIC_BUTTON_DIR4: { PPButton* button = reinterpret_cast(sender); PPString strKey = getKeyFromPredefPathButton(button); if (storePath) { PPString path = listBoxFiles->getCurrentPathAsASCIIString(); tracker.settingsDatabase->store(strKey, path); storePath = !storePath; PPButton* button = static_cast(static_cast(sectionContainer)->getControlByID(DISKMENU_CLASSIC_BUTTON_STOREDIR)); button->setPressed(storePath); screen->paintControl(button); } else { PPDictionaryKey* key = tracker.settingsDatabase->restore(strKey); if (key) { PPSystemString str(key->getStringValue()); bool res = listBoxFiles->gotoPath(str); if (!res) tracker.showMessageBox(MESSAGEBOX_UNIVERSAL, "Couldn't change directory.", Tracker::MessageBox_OK); screen->paintControl(listBoxFiles); } else tracker.showMessageBox(MESSAGEBOX_UNIVERSAL, "No directory defined.", Tracker::MessageBox_OK); } break; } case DISKMENU_BUTTON_EXIT: show(false); break; } } else if (reinterpret_cast(sender) == listBoxFiles && event->getID() == eConfirmed) { handleLoadOrStep(); } else if (event->getID() == eSelection) { switch (reinterpret_cast(sender)->getID()) { case DISKMENU_CLASSIC_LISTBOX_BROWSER: { updateFilenameEditFieldFromBrowser(); break; } case DISKMENU_NORMAL_RADIOGROUP_SONGTYPE: case DISKMENU_NORMAL_RADIOGROUP_PATTERNTYPE: case DISKMENU_NORMAL_RADIOGROUP_TRACKTYPE: case DISKMENU_NORMAL_RADIOGROUP_INSTRUMENTTYPE: case DISKMENU_NORMAL_RADIOGROUP_SAMPLETYPE: currentActiveRadioGroup = reinterpret_cast(sender); updateFilenameEditFieldExtension(classicViewState); break; } } else if (event->getID() == eFileSystemChanged) { reload(); } else if (event->getID() == eValueChanged) { switch (reinterpret_cast(sender)->getID()) { case DISKMENU_CLASSIC_LISTBOX_NAME: { const PPString* str = *(reinterpret_cast(event->getDataPtr())); *fileFullPath = listBoxFiles->getCurrentPathAsString(); PPSystemString temp(*str); *file = temp; fileFullPath->append(*file); assureExtension(); break; } } } return 0; } void SectionDiskMenu::init(pp_int32 px, pp_int32 py) { pp_int32 i; PPScreen* screen = tracker.screen; PPContainer* container = new PPContainer(CONTAINER_ADVEDIT, tracker.screen, this, PPPoint(px, py), PPSize(320,UPPERLEFTSECTIONHEIGHT), false); container->setColor(TrackerConfig::colorThemeMain); container->addControl(new PPStaticText(DISKMENU_NORMAL_STATICTEXT_HEADING, NULL, NULL, PPPoint(px + 2, py + 2), "Disk operations", true, true)); pp_int32 buttonWidth = 8*4+4; pp_int32 buttonHeight = 11; pp_int32 x = px+container->getSize().width-(buttonWidth+4); pp_int32 y = py+container->getSize().height-(buttonHeight+4); container->addControl(new PPSeperator(0, screen, PPPoint(px + 2, y - 4), container->getSize().width - 4, TrackerConfig::colorThemeMain, true)); PPButton* button = new PPButton(DISKMENU_BUTTON_EXIT, screen, this, PPPoint(x, y), PPSize(buttonWidth,buttonHeight+1)); button->setText("Exit"); container->addControl(button); pp_int32 dx = 6; pp_int32 dy = 16; // ---- Song ---------- x = px + 2; y = py + dy; container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x,y), "Song:", true)); y+=12; buttonWidth = 8*7+2; button = new PPButton(DISKMENU_NORMAL_BUTTON_LOAD_SONG, screen, this, PPPoint(x, y), PPSize(buttonWidth,buttonHeight)); button->setText("Load"); container->addControl(button); y+=buttonHeight+1; button = new PPButton(DISKMENU_NORMAL_BUTTON_SAVE_SONG, screen, this, PPPoint(x, y), PPSize(buttonWidth,buttonHeight)); button->setText("Save As"); container->addControl(button); y+=buttonHeight; PPRadioGroup* radioGroup = new PPRadioGroup(DISKMENU_NORMAL_RADIOGROUP_SONGTYPE, screen, this, PPPoint(x, y), PPSize(buttonWidth, 3*14)); radioGroupLocations[RADIOGROUPTOINDEX(DISKMENU_NORMAL_RADIOGROUP_SONGTYPE)] = radioGroup->getLocation(); radioGroup->setColor(TrackerConfig::colorThemeMain); radioGroup->addItem(".xm"); radioGroup->addItem(".mod"); radioGroup->addItem(".wav"); container->addControl(radioGroup); // ---- Pattern ---------- x += buttonWidth+dx; y = py + dy; container->addControl(new PPSeperator(0, screen, PPPoint(x - 4, y - 2), container->getLocation().y + container->getSize().height - y - 17, TrackerConfig::colorThemeMain, false)); container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x,y), "Patt:", true)); y+=12; button = new PPButton(DISKMENU_NORMAL_BUTTON_LOAD_PATTERN, screen, this, PPPoint(x, y), PPSize(buttonWidth,buttonHeight)); button->setText("Load"); container->addControl(button); y+=buttonHeight+1; button = new PPButton(DISKMENU_NORMAL_BUTTON_SAVE_PATTERN, screen, this, PPPoint(x, y), PPSize(buttonWidth,buttonHeight)); button->setText("Save As"); container->addControl(button); y+=buttonHeight; radioGroup = new PPRadioGroup(DISKMENU_NORMAL_RADIOGROUP_PATTERNTYPE, screen, this, PPPoint(x, y), PPSize(buttonWidth, 30)); radioGroupLocations[RADIOGROUPTOINDEX(DISKMENU_NORMAL_RADIOGROUP_PATTERNTYPE)] = radioGroup->getLocation(); radioGroup->setColor(TrackerConfig::colorThemeMain); radioGroup->addItem(".xp"); container->addControl(radioGroup); // ---- Track ---------- x += buttonWidth+dx; y = py + dy; container->addControl(new PPSeperator(0, screen, PPPoint(x - 4, y - 2), container->getLocation().y + container->getSize().height - y - 17, TrackerConfig::colorThemeMain, false)); container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x,y), "Track:", true)); y+=12; button = new PPButton(DISKMENU_NORMAL_BUTTON_LOAD_TRACK, screen, this, PPPoint(x, y), PPSize(buttonWidth,buttonHeight)); button->setText("Load"); container->addControl(button); y+=buttonHeight+1; button = new PPButton(DISKMENU_NORMAL_BUTTON_SAVE_TRACK, screen, this, PPPoint(x, y), PPSize(buttonWidth,buttonHeight)); button->setText("Save As"); container->addControl(button); y+=buttonHeight; radioGroup = new PPRadioGroup(DISKMENU_NORMAL_RADIOGROUP_TRACKTYPE, screen, this, PPPoint(x, y), PPSize(buttonWidth, 30)); radioGroupLocations[RADIOGROUPTOINDEX(DISKMENU_NORMAL_RADIOGROUP_TRACKTYPE)] = radioGroup->getLocation(); radioGroup->setColor(TrackerConfig::colorThemeMain); radioGroup->addItem(".xt"); container->addControl(radioGroup); // ---- Instrument ---------- x += buttonWidth+dx; y = py + dy; container->addControl(new PPSeperator(0, screen, PPPoint(x - 4, y - 2), container->getLocation().y + container->getSize().height - y - 17, TrackerConfig::colorThemeMain, false)); container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x,y), "Instr:", true)); y+=12; button = new PPButton(DISKMENU_NORMAL_BUTTON_LOAD_INSTRUMENT, screen, this, PPPoint(x, y), PPSize(buttonWidth,buttonHeight)); button->setText("Load"); container->addControl(button); y+=buttonHeight+1; button = new PPButton(DISKMENU_NORMAL_BUTTON_SAVE_INSTRUMENT, screen, this, PPPoint(x, y), PPSize(buttonWidth,buttonHeight)); button->setText("Save As"); container->addControl(button); y+=buttonHeight; radioGroup = new PPRadioGroup(DISKMENU_NORMAL_RADIOGROUP_INSTRUMENTTYPE, screen, this, PPPoint(x, y), PPSize(buttonWidth, 30)); radioGroupLocations[RADIOGROUPTOINDEX(DISKMENU_NORMAL_RADIOGROUP_INSTRUMENTTYPE)] = radioGroup->getLocation(); radioGroup->setColor(TrackerConfig::colorThemeMain); radioGroup->addItem(".xi"); container->addControl(radioGroup); // ---- Sample ---------- x += buttonWidth+dx; y = py + dy; container->addControl(new PPSeperator(0, screen, PPPoint(x - 4, y - 2), container->getLocation().y + container->getSize().height - y - 17, TrackerConfig::colorThemeMain, false)); container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x,y), "Sample:", true)); y+=12; button = new PPButton(DISKMENU_NORMAL_BUTTON_LOAD_SAMPLE, screen, this, PPPoint(x, y), PPSize(buttonWidth,buttonHeight)); button->setText("Load"); container->addControl(button); y+=buttonHeight+1; button = new PPButton(DISKMENU_NORMAL_BUTTON_SAVE_SAMPLE, screen, this, PPPoint(x, y), PPSize(buttonWidth,buttonHeight)); button->setText("Save As"); container->addControl(button); y+=buttonHeight; radioGroup = new PPRadioGroup(DISKMENU_NORMAL_RADIOGROUP_SAMPLETYPE, screen, this, PPPoint(x, y), PPSize(buttonWidth, 2*14)); radioGroupLocations[RADIOGROUPTOINDEX(DISKMENU_NORMAL_RADIOGROUP_SAMPLETYPE)] = radioGroup->getLocation(); radioGroup->setColor(TrackerConfig::colorThemeMain); radioGroup->addItem(".wav"); radioGroup->addItem(".iff"); container->addControl(radioGroup); // Now get all controls built for the "normal" view (not the FT2 retro view) and save them, // so we can hide them later easily, without referring to the IDs or whatever // (except for the section heading and the exit button) PPSimpleVector& controls = container->getControls(); for (i = 0; i < controls.size(); i++) { if (controls.get(i)->getID() != DISKMENU_BUTTON_EXIT) { normalViewControls->add(controls.get(i)); } } // remember that, this is where we start gathering the controls for the "classic" view pp_int32 firstClassicControlIndex = i + 1; // go on with some more stuff x = container->getLocation().x + container->getSize().width - 28; pp_int32 x4 = x; y = py + 2; button = new PPButton(DISKMENU_BUTTON_FLIP, screen, this, PPPoint(x, y), PPSize(24, 11), false); button->setText("Flip"); button->setColor(TrackerConfig::colorThemeMain); button->setTextColor(PPUIConfig::getInstance()->getColor(PPUIConfig::ColorStaticText)); container->addControl(button); x = px + 2; y = py + 2; container->addControl(new PPStaticText(DISKMENU_CLASSIC_STATICTEXT_HEADING, NULL, NULL, PPPoint(x, y), "Disk op", true, true)); y+=13; // add type buttons static const char* buttonTexts[6] = {"Type", "Module", "Instr.", "Sample", "Patt.", "Track"}; pp_int32 numButtons = (DISKMENU_CLASSIC_BUTTON_TYPE_TRACK-DISKMENU_CLASSIC_BUTTON_TYPE_TYPE+1); ASSERT((sizeof(buttonTexts)/sizeof(const char*)) == numButtons); pp_int32 bWidth = 7*8; pp_int32 bHeight = 14; y--; pp_int32 y3 = y; for (i = 0; i < numButtons; i++) { /*if (i == 0) button = new PPButton(i + DISKMENU_CLASSIC_BUTTON_TYPE_TYPE, screen, this, PPPoint(x, y), PPSize(bWidth, bHeight), false, true, false); else*/ button = new PPButton(i + DISKMENU_CLASSIC_BUTTON_TYPE_TYPE, screen, this, PPPoint(x, y), PPSize(bWidth, bHeight), false); button->setColor(TrackerConfig::colorThemeMain); button->setTextColor(PPUIConfig::getInstance()->getColor(PPUIConfig::ColorStaticText)); button->setText(buttonTexts[i]); container->addControl(button); y+=bHeight; } pp_int32 x3 = x + bWidth + 3; y+=5; // add save button button = new PPButton(DISKMENU_CLASSIC_BUTTON_SAVE, screen, this, PPPoint(x, y), PPSize(bWidth, buttonHeight+1)); button->setText("Save"); container->addControl(button); // file browser pp_int32 lbWidth = (px + container->getSize().width) - x3 - 4; pp_int32 lbHeight = (py+container->getSize().height-(buttonHeight+4)) - y3 - 5; listBoxFiles = new PPListBoxFileBrowser(DISKMENU_CLASSIC_LISTBOX_BROWSER, screen, this, PPPoint(x3, y3), PPSize(lbWidth, lbHeight)); listBoxFiles->setBorderColor(TrackerConfig::colorThemeMain); listBoxFiles->setFilePrefix(""); listBoxFiles->setDirectoryPrefix(""); listBoxFiles->setDirectorySuffixPathSeperator(); listBoxFiles->setSortAscending(sortAscending); listBoxFiles->setColorQueryListener(colorQueryListener); container->addControl(listBoxFiles); fileBrowserExtent = listBoxFiles->getSize(); y3+=2; x3+=2; PPControl* ctrl; ctrl = new PPStaticText(DISKMENU_CLASSIC_STATICTEXT_SORTBY, NULL, NULL, PPPoint(x3, y3), "Sort by:", true); container->addControl(ctrl); x3+=8*8; button = new PPButton(DISKMENU_CLASSIC_BUTTON_SORTBY, screen, this, PPPoint(x3, y3-1), PPSize(51, 11), false); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Extension"); button->setColor(TrackerConfig::colorThemeMain); button->setTextColor(PPUIConfig::getInstance()->getColor(PPUIConfig::ColorStaticText)); container->addControl(button); button = new PPButton(DISKMENU_CLASSIC_BUTTON_SORTORDER, screen, this, PPPoint(x3+button->getSize().width, y3-1), PPSize(13, 11), false); button->setText(sortAscending ? "\xfd" : "\xfe"); button->setColor(TrackerConfig::colorThemeMain); button->setTextColor(PPUIConfig::getInstance()->getColor(PPUIConfig::ColorStaticText)); container->addControl(button); x3+=80; PPCheckBox* checkBox = new PPCheckBox(DISKMENU_CLASSIC_CHECKBOX_FILTEREXTENSIONS, screen, this, PPPoint(x3 + 12 * 8 + 2, y3 - 1)); container->addControl(checkBox); container->addControl(new PPCheckBoxLabel(DISKMENU_CLASSIC_STATICTEXT_FILTEREXTENSIONS, NULL, this, PPPoint(x3, y3), "Type filter:", checkBox, true)); buttonWidth = 27; pp_int32 y5 = y3 + 12; pp_int32 x5 = container->getLocation().x + container->getSize().width - buttonWidth - 5; numButtons = 5; for (i = 0; i < numButtons; i++) { pp_int32 buttonHeight = 11; char temp[80]; sprintf(temp, "DIR%d", i+1); PPFont* font = PPFont::getFont(PPFont::FONT_TINY); button = new PPButton(DISKMENU_CLASSIC_BUTTON_DIR0+i, screen, this, PPPoint(x5, y5), PPSize(buttonWidth, buttonHeight)); button->setFont(font); button->setText(temp); container->addControl(button); y5+=buttonHeight+1; } button = new PPButton(DISKMENU_CLASSIC_BUTTON_STOREDIR, screen, this, PPPoint(x5, y5), PPSize(buttonWidth, 9), true, true, false); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Store"); container->addControl(button); // save edit list box buttonWidth = container->getControlByID(DISKMENU_BUTTON_EXIT)->getLocation().x - (x + bWidth + 4) - 4; editFieldCurrentFile = new PPListBox(DISKMENU_CLASSIC_LISTBOX_NAME, screen, this, PPPoint(x + bWidth + 4, y), PPSize(buttonWidth, buttonHeight+1), true, true, false); editFieldCurrentFile->showSelection(false); editFieldCurrentFile->setSingleButtonClickEdit(true); editFieldCurrentFile->setBorderColor(TrackerConfig::colorThemeMain); char str[MP_MAXTEXT+1]; memset(str, 0, sizeof(str)); editFieldCurrentFile->addItem(str); editFieldCurrentFile->setMaxEditSize(255); container->addControl(editFieldCurrentFile); y = py + 2; x = px + 2 + 8*7 + 5; static const char* buttonTexts2[] = {"<-", "->", "Up", "Root", "Home", "Reload", "Load", "Del", "MkDir"}; static const pp_int32 buttonSpacing[] = {0,0,0,0,0,3,0,0,0}; numButtons = sizeof(buttonTexts2)/sizeof(const char*); bHeight = 10; for (i = 0; i < numButtons; i++) { PPFont* font = PPFont::getFont(PPFont::FONT_TINY); bWidth = font->getStrWidth(buttonTexts2[i]) + 3; button = new PPButton(DISKMENU_CLASSIC_BUTTON_PREV+i, screen, this, PPPoint(x, y), PPSize(bWidth, bHeight)); button->setFont(font); button->setText(buttonTexts2[i]); container->addControl(button); x+=bWidth+1+buttonSpacing[i]; } x=x4-13*2; button = new PPButton(DISKMENU_CLASSIC_BUTTON_VEXTEND, screen, this, PPPoint(x, y), PPSize(13, bHeight+1), false); button->setText(TrackerConfig::stringButtonCollapsed); button->setColor(TrackerConfig::colorThemeMain); button->setTextColor(PPUIConfig::getInstance()->getColor(PPUIConfig::ColorStaticText)); container->addControl(button); x+=13; button = new PPButton(DISKMENU_CLASSIC_BUTTON_HEXTEND, screen, this, PPPoint(x, y), PPSize(13, bHeight+1), false); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText(">"); button->setColor(TrackerConfig::colorThemeMain); button->setTextColor(PPUIConfig::getInstance()->getColor(PPUIConfig::ColorStaticText)); container->addControl(button); y = py+container->getSize().height-(buttonHeight+4); container->addControl(new PPSeperator(0, screen, PPPoint(px + 2, y - 4), container->getSize().width - 4, TrackerConfig::colorThemeMain, true)); // gather controls for the classic view, we simply start counting from the last control we found // the last time for (i = firstClassicControlIndex; i < controls.size(); i++) { classicViewControls->add(controls.get(i)); controls.get(i)->hide(true); } tracker.screen->addControl(container); sectionContainer = container; // fit dir buttons to browser listbox size fitDirButtons(); initialised = true; showSection(false); } void SectionDiskMenu::show(bool bShow) { // sanity check if (bShow == diskMenuVisible) return; #ifdef __LOWRES__ tracker.screen->pauseUpdate(true); #endif PPRadioGroup* radioGroup = static_cast(static_cast(sectionContainer)->getControlByID(DISKMENU_NORMAL_RADIOGROUP_SONGTYPE)); if (bShow) { if (moduleTypeAdjust) { switch (tracker.moduleEditor->getSaveType()) { case ModuleEditor::ModSaveTypeXM: radioGroup->setChoice(0); break; case ModuleEditor::ModSaveTypeMOD: radioGroup->setChoice(1); break; default: ASSERT(false); } } // restore CWD in case it has been changed // through the native file requester (e.g. on Windows) if (currentPath.length() != 0) { setCurrentPath(currentPath, false); } } else { // store CWD currentPath = getCurrentPath(); } diskMenuVisible = bShow; SectionUpperLeft::show(bShow); if (bShow) { #ifdef __LOWRES__ pp_int32 y = tracker.screen->getControlByID(CONTAINER_INPUTDEFAULT)->getLocation().y; replaceInstrumentListBoxes(true, y); tracker.getPatternEditorControl()->show(false); #endif prepareSection(); lastFocusedControl = tracker.screen->getFocusedControl(); tracker.screen->setFocus(listBoxFiles); if (forceClassicBrowser) { showNormalView(false); showClassicView(true); updateClassicView(); updateFilenameEditField(classicViewState); forceClassicBrowser = false; } } else { #ifdef __LOWRES__ replaceInstrumentListBoxes(false); tracker.getPatternEditorControl()->show(true); #endif tracker.screen->setFocus(lastFocusedControl); } #ifdef __LOWRES__ pp_int32 deltay = sectionContainer->getSize().height - tracker.UPPERSECTIONDEFAULTHEIGHT(); pp_int32 newSIPOffsetMove = bShow ? -deltay : deltay; // Only move SIP panel up/down on show/hide when it's exactly the complementary // to the previous move, otherwise we'll be moving it out of range if ((lastSIPOffsetMove != 0 && lastSIPOffsetMove == -newSIPOffsetMove) || lastSIPOffsetMove == 0) { tracker.moveInputControls(newSIPOffsetMove); lastSIPOffsetMove = newSIPOffsetMove; } tracker.screen->paint(); tracker.screen->pauseUpdate(false); if (!bShow) { tracker.screen->update(); } #endif } void SectionDiskMenu::update(bool repaint/* = true*/) { } bool SectionDiskMenu::isActiveEditing() { PPListBox* listBox = static_cast(static_cast(sectionContainer)->getControlByID(DISKMENU_CLASSIC_LISTBOX_NAME)); ASSERT(listBox); if (tracker.screen->hasFocus(sectionContainer) && listBox->isEditing()) return true; return false; } bool SectionDiskMenu::isFileBrowserVisible() { return listBoxFiles->isVisible(); } bool SectionDiskMenu::fileBrowserHasFocus() { return tracker.screen->hasFocus(sectionContainer) && listBoxFiles->gotFocus(); } void SectionDiskMenu::setFileBrowserShowFocus(bool showFocus) { listBoxFiles->setShowFocus(showFocus); } void SectionDiskMenu::selectSaveType(pp_uint32 type) { switch (type) { case FileTypes::FileTypeSongMOD: static_cast(static_cast(sectionContainer)->getControlByID(DISKMENU_NORMAL_RADIOGROUP_SONGTYPE))->setChoice(1); classicViewState = BrowseModules; break; case FileTypes::FileTypeSongAllModules: case FileTypes::FileTypeSongXM: static_cast(static_cast(sectionContainer)->getControlByID(DISKMENU_NORMAL_RADIOGROUP_SONGTYPE))->setChoice(0); classicViewState = BrowseModules; break; case FileTypes::FileTypeSongWAV: static_cast(static_cast(sectionContainer)->getControlByID(DISKMENU_NORMAL_RADIOGROUP_SONGTYPE))->setChoice(2); classicViewState = BrowseModules; break; case FileTypes::FileTypePatternXP: static_cast(static_cast(sectionContainer)->getControlByID(DISKMENU_NORMAL_RADIOGROUP_PATTERNTYPE))->setChoice(0); classicViewState = BrowsePatterns; break; case FileTypes::FileTypeTrackXT: static_cast(static_cast(sectionContainer)->getControlByID(DISKMENU_NORMAL_RADIOGROUP_TRACKTYPE))->setChoice(0); classicViewState = BrowseTracks; break; case FileTypes::FileTypeInstrumentXI: case FileTypes::FileTypeSongAllInstruments: static_cast(static_cast(sectionContainer)->getControlByID(DISKMENU_NORMAL_RADIOGROUP_INSTRUMENTTYPE))->setChoice(0); classicViewState = BrowseInstruments; break; case FileTypes::FileTypeSampleWAV: case FileTypes::FileTypeSongAllSamples: static_cast(static_cast(sectionContainer)->getControlByID(DISKMENU_NORMAL_RADIOGROUP_SAMPLETYPE))->setChoice(0); classicViewState = BrowseSamples; break; case FileTypes::FileTypeSampleIFF: static_cast(static_cast(sectionContainer)->getControlByID(DISKMENU_NORMAL_RADIOGROUP_SAMPLETYPE))->setChoice(1); classicViewState = BrowseSamples; break; default: ASSERT(false); } forceClassicBrowser = true; } pp_uint32 SectionDiskMenu::getDefaultConfigUInt32() { // default is: // classic view is NOT visible = 0 // list box is v-extended = 2 // list box is h-extended = 4 // sort order is ascending = 8 // filtering by file extension is ON = 16 return 0 + 2 + 4 + 8 + 16; } pp_uint32 SectionDiskMenu::getConfigUInt32() { pp_uint32 result = 0; // Classic view visible result |= classicViewVisible ? 1 : 0; // Extended list box = Bit 1 result |= (listBoxFiles->getSize().height == fileBrowserExtent.height) ? 2 : 0; // Extended list box = Bit 2 result |= (listBoxFiles->getSize().width == fileBrowserExtent.width) ? 4 : 0; // Sort order = Bit 3 result |= sortAscending ? 8 : 0; // filter types = Bit 4 result |= static_cast(static_cast(sectionContainer)->getControlByID(DISKMENU_CLASSIC_CHECKBOX_FILTEREXTENSIONS))->isChecked() ? 16 : 0; // filter types = Bit 24 and above result |= (pp_uint32)listBoxFiles->getSortType() << 24; return result; } void SectionDiskMenu::setConfigUInt32(pp_uint32 config) { if (config & 1) { showNormalView(false); showClassicView(true); } else if (!(config & 1)) { showNormalView(true); showClassicView(false); } if ((config & 2) && listBoxFiles->getSize().height != fileBrowserExtent.height) { resizeBrowserVertically(); } else if (!(config & 2) && listBoxFiles->getSize().height == fileBrowserExtent.height) { resizeBrowserVertically(); } if ((config & 4) && listBoxFiles->getSize().width != fileBrowserExtent.width) { resizeBrowserHorizontally(); } else if (!(config & 4) && listBoxFiles->getSize().width == fileBrowserExtent.width) { resizeBrowserHorizontally(); } sortAscending = (config & 8) != 0; listBoxFiles->setSortAscending(sortAscending); PPCheckBox* checkBox = static_cast(static_cast(sectionContainer)->getControlByID(DISKMENU_CLASSIC_CHECKBOX_FILTEREXTENSIONS)); ASSERT(checkBox); checkBox->checkIt((config & 16) != 0); listBoxFiles->setSortType((PPListBoxFileBrowser::SortTypes)(config >> 24)); updateButtonStates(false); } PPSystemString SectionDiskMenu::getCurrentPath() { return listBoxFiles->getCurrentPathAsString(); } void SectionDiskMenu::setCurrentPath(const PPSystemString& path, bool reload/* = true*/) { listBoxFiles->gotoPath(path, reload); } PPString SectionDiskMenu::getCurrentPathASCII() { char* nameASCIIZ = listBoxFiles->getCurrentPathAsString().toASCIIZ(); PPString result(nameASCIIZ); delete[] nameASCIIZ; return result; } void SectionDiskMenu::resizeInstrumentContainer() { #ifdef __LOWRES__ PPControl* ctrl1 = tracker.screen->getControlByID(CONTAINER_INPUTDEFAULT); PPControl* ctrl2 = tracker.screen->getControlByID(CONTAINER_INPUTEXTENDED); pp_int32 y = ctrl1->isVisible() ? ctrl1->getLocation().y : ctrl2->getLocation().y; replaceAndResizeInstrumentListContainer(y); tracker.screen->paint(false); #endif } void SectionDiskMenu::setCycleFilenames(bool cycleFilenames) { listBoxFiles->setCycleFilenames(cycleFilenames); } void SectionDiskMenu::prepareSection() { updateFilter(); updateFilenameEditField(classicViewState); } void SectionDiskMenu::showNormalView(bool bShow) { pp_uint32 i; for (i = 0; i < (unsigned)normalViewControls->size(); i++) normalViewControls->get(i)->hide(!bShow); for (i = 0; i < sizeof(radioGroupLocations) / sizeof(PPPoint); i++) static_cast(sectionContainer)->getControlByID(INDEXTORADIOGROUP(i))->setLocation(radioGroupLocations[i]); if (bShow && isActiveEditing()) tracker.screen->setFocus(lastFocusedControl); } void SectionDiskMenu::updateClassicView(bool repaint/* = true*/) { pp_uint32 i; if (!classicViewVisible) return; updateButtonStates(false); bool cond = classicViewState != BrowseAll; static_cast(static_cast(sectionContainer)->getControlByID(DISKMENU_CLASSIC_BUTTON_TYPE_TYPE))->setClickable(cond); static_cast(static_cast(sectionContainer)->getControlByID(DISKMENU_CLASSIC_BUTTON_SAVE))->setClickable(cond); static_cast(sectionContainer)->getControlByID(DISKMENU_CLASSIC_BUTTON_TYPE_MODULE)->hide(cond); static_cast(sectionContainer)->getControlByID(DISKMENU_CLASSIC_BUTTON_TYPE_INSTRUMENT)->hide(cond); static_cast(sectionContainer)->getControlByID(DISKMENU_CLASSIC_BUTTON_TYPE_SAMPLE)->hide(cond); static_cast(sectionContainer)->getControlByID(DISKMENU_CLASSIC_BUTTON_TYPE_PATTERN)->hide(cond); static_cast(sectionContainer)->getControlByID(DISKMENU_CLASSIC_BUTTON_TYPE_TRACK)->hide(cond); if (classicViewState == BrowseAll) { currentActiveRadioGroup = NULL; } PPPoint pos = static_cast(sectionContainer)->getControlByID(DISKMENU_CLASSIC_BUTTON_TYPE_MODULE)->getLocation(); for (i = 0; i < sizeof(radioGroupLocations) / sizeof(PPPoint); i++) { static_cast(sectionContainer)->getControlByID(INDEXTORADIOGROUP(i))->setLocation(pos); static_cast(sectionContainer)->getControlByID(INDEXTORADIOGROUP(i))->hide(true); } switch (classicViewState) { case BrowseModules: currentActiveRadioGroup = static_cast(static_cast(sectionContainer)->getControlByID(DISKMENU_NORMAL_RADIOGROUP_SONGTYPE)); break; case BrowseInstruments: currentActiveRadioGroup = static_cast(static_cast(sectionContainer)->getControlByID(DISKMENU_NORMAL_RADIOGROUP_INSTRUMENTTYPE)); break; case BrowseSamples: currentActiveRadioGroup = static_cast(static_cast(sectionContainer)->getControlByID(DISKMENU_NORMAL_RADIOGROUP_SAMPLETYPE)); break; case BrowsePatterns: currentActiveRadioGroup = static_cast(static_cast(sectionContainer)->getControlByID(DISKMENU_NORMAL_RADIOGROUP_PATTERNTYPE)); break; case BrowseTracks: currentActiveRadioGroup = static_cast(static_cast(sectionContainer)->getControlByID(DISKMENU_NORMAL_RADIOGROUP_TRACKTYPE)); break; case BrowseAll: case BrowseLAST: break; } cond = listBoxFiles->getSize().height == fileBrowserExtent.height; static_cast(sectionContainer)->getControlByID(DISKMENU_CLASSIC_STATICTEXT_FILTEREXTENSIONS)->hide(cond); static_cast(sectionContainer)->getControlByID(DISKMENU_CLASSIC_CHECKBOX_FILTEREXTENSIONS)->hide(cond); static_cast(sectionContainer)->getControlByID(DISKMENU_CLASSIC_STATICTEXT_SORTBY)->hide(cond); static_cast(sectionContainer)->getControlByID(DISKMENU_CLASSIC_BUTTON_SORTBY)->hide(cond); static_cast(sectionContainer)->getControlByID(DISKMENU_CLASSIC_BUTTON_SORTORDER)->hide(cond); for (i = DISKMENU_CLASSIC_BUTTON_DIR0; i <= DISKMENU_CLASSIC_BUTTON_STOREDIR; i++) static_cast(sectionContainer)->getControlByID(i)->hide(listBoxFiles->getSize().width == fileBrowserExtent.width); if (currentActiveRadioGroup) currentActiveRadioGroup->hide(false); if (repaint) tracker.screen->paintControl(sectionContainer); } void SectionDiskMenu::showClassicView(bool bShow) { for (pp_int32 i = 0; i < classicViewControls->size(); i++) classicViewControls->get(i)->hide(!bShow); classicViewVisible = bShow; if (bShow) { updateClassicView(); } } bool SectionDiskMenu::isNormalViewVisible() { bool res = true; for (pp_int32 i = 0; i < normalViewControls->size(); i++) if (!normalViewControls->get(i)->isVisible()) res = false; return res; } bool SectionDiskMenu::isClassicViewVisible() { bool res = true; for (pp_int32 i = 0; i < classicViewControls->size(); i++) if (!classicViewControls->get(i)->isVisible()) res = false; return res; } void SectionDiskMenu::flip() { if (isNormalViewVisible()) { showNormalView(false); showClassicView(true); updateFilenameEditField(classicViewState); } else { showNormalView(true); showClassicView(false); } PPScreen* screen = tracker.screen; screen->paintControl(sectionContainer); } void SectionDiskMenu::updateFilenameEditFieldExtension(ClassicViewStates viewState) { if (currentActiveRadioGroup) { PPSystemString file = this->file->stripExtension(); if (file.length()) { PPSystemString ext(currentActiveRadioGroup->getItem(currentActiveRadioGroup->getChoice())); file.append(ext); updateFilenameEditField(file); } } } void SectionDiskMenu::updateFilenameEditField(ClassicViewStates viewState) { PPSystemString ext; if (currentActiveRadioGroup) ext = PPSystemString(currentActiveRadioGroup->getItem(currentActiveRadioGroup->getChoice())); switch (viewState) { case BrowseAll: *file = tracker.moduleEditor->getModuleFileName(); break; case BrowseModules: if (moduleTypeAdjust) *file = tracker.moduleEditor->getModuleFileName(); else { *file = tracker.moduleEditor->getModuleFileName().stripExtension(); file->append(ext); } break; case BrowseInstruments: { *file = tracker.moduleEditor->getInstrumentFileName(tracker.listBoxInstruments->getSelectedIndex()); file->append(ext); break; } case BrowseSamples: { *file = tracker.moduleEditor->getSampleFileName(tracker.listBoxInstruments->getSelectedIndex(), tracker.listBoxSamples->getSelectedIndex()); file->append(ext); break; } case BrowsePatterns: { *file = tracker.moduleEditor->getModuleFileName().stripExtension(); file->append(ext); break; } case BrowseTracks: { *file = tracker.moduleEditor->getModuleFileName().stripExtension(); file->append(ext); break; } case BrowseLAST: break; } updateFilenameEditField(*file); } void SectionDiskMenu::updateFilenameEditField(const PPSystemString& fileName) { editFieldCurrentFile->clear(); char* nameASCIIZ = fileName.toASCIIZ(); PPString str(nameASCIIZ); editFieldCurrentFile->addItem(str); delete[] nameASCIIZ; *file = fileName; tracker.screen->paintControl(editFieldCurrentFile); } void SectionDiskMenu::updateFilenameEditFieldFromBrowser() { updateButtonStates(); if (listBoxFiles->currentSelectionIsFile()) { updateFilenameEditField(listBoxFiles->getCurrentSelectedPathEntry()->getName()); } } void SectionDiskMenu::handleLoadOrStep() { if (listBoxFiles->stepIntoCurrentSelection()) { listBoxFiles->refreshFiles(); updateButtonStates(); tracker.screen->paintControl(listBoxFiles); } else { loadCurrentSelectedFile(); } } void SectionDiskMenu::loadCurrentSelectedFile() { PPSystemString fileFullPath = listBoxFiles->getCurrentPathAsString(); fileFullPath.append(listBoxFiles->getCurrentSelectedPathEntry()->getName()); switch (classicViewState) { case BrowseAll: tracker.loadGenericFileType(fileFullPath); break; case BrowseModules: tracker.loadTypeFromFile(FileTypes::FileTypeSongAllModules, fileFullPath); break; case BrowseInstruments: tracker.loadTypeFromFile(FileTypes::FileTypeSongAllInstruments, fileFullPath); break; case BrowseSamples: tracker.loadTypeFromFile(FileTypes::FileTypeSongAllSamples, fileFullPath); break; case BrowsePatterns: tracker.loadTypeFromFile(FileTypes::FileTypePatternXP, fileFullPath); break; case BrowseTracks: tracker.loadTypeFromFile(FileTypes::FileTypeTrackXT, fileFullPath); break; case BrowseLAST: break; } updateFilenameEditFieldExtension(classicViewState); } void SectionDiskMenu::showOverwriteMessageBox() { if (dialog) { delete dialog; dialog = NULL; } dialog = new PPDialogBase(tracker.screen, responder, RESPONDMESSAGEBOX_OVERWRITE, "Overwrite existing file?"); dialog->show(); } void SectionDiskMenu::prepareSave() { if (editFieldCurrentFile->isEditing()) editFieldCurrentFile->commitChanges(); assureExtension(); PPSystemString fileFullPath = listBoxFiles->getCurrentPathAsString(); PPSystemString file = this->file->stripExtension(); if (file.length()) { fileFullPath.append(*this->file); if (XMFile::exists(fileFullPath)) { showOverwriteMessageBox(); } else { saveCurrent(); } } } void SectionDiskMenu::saveCurrent() { PPSystemString fileFullPath = listBoxFiles->getCurrentPathAsString(); fileFullPath.append(*this->file); bool res = true; FileTypes saveType; switch (classicViewState) { case BrowseAll: ASSERT(false); break; case BrowseModules: { switch (currentActiveRadioGroup->getChoice()) { case 0: saveType = FileTypes::FileTypeSongXM; break; case 1: saveType = FileTypes::FileTypeSongMOD; break; case 2: { tracker.sectionHDRecorder->setCurrentFileName(fileFullPath); tracker.sectionSwitcher->showUpperSection(tracker.sectionHDRecorder); if (dialog && tracker.screen->getModalControl() == dialog->getMessageBoxContainer()) { tracker.screen->setModalControl(NULL); } return; } } break; } case BrowseInstruments: saveType = FileTypes::FileTypeInstrumentXI; break; case BrowseSamples: { switch (currentActiveRadioGroup->getChoice()) { case 0: saveType = FileTypes::FileTypeSampleWAV; break; case 1: saveType = FileTypes::FileTypeSampleIFF; break; } break; } case BrowsePatterns: saveType = FileTypes::FileTypePatternXP; break; case BrowseTracks: saveType = FileTypes::FileTypeTrackXT; break; case BrowseLAST: break; } res = tracker.prepareSavingWithDialog(saveType); if (tracker.savePanel) { delete tracker.savePanel; tracker.savePanel = new PPDummySavePanel(fileFullPath); } if (res) { tracker.saveTypeWithDialog(saveType, this); } else { tracker.fileSystemChangedListener = this; } if (dialog && tracker.screen->getModalControl() == dialog->getMessageBoxContainer()) { tracker.screen->setModalControl(NULL); } } void SectionDiskMenu::showDeleteMessageBox() { if (!listBoxFiles->currentSelectionIsFile()) return; showMessageBox(RESPONDMESSAGEBOX_DELETE, "Delete selected file?"); } void SectionDiskMenu::deleteCurrent() { PPSystemString fileFullPath = listBoxFiles->getCurrentPathAsString(); fileFullPath.append(listBoxFiles->getCurrentSelectedPathEntry()->getName()); XMFile::remove(fileFullPath); reload(); } void SectionDiskMenu::updateButtonStates(bool repaint/* = true*/) { static const pp_uint32 IDs[] = { DISKMENU_CLASSIC_BUTTON_PREV, DISKMENU_CLASSIC_BUTTON_NEXT, DISKMENU_CLASSIC_BUTTON_PARENT, DISKMENU_CLASSIC_BUTTON_ROOT, DISKMENU_CLASSIC_BUTTON_HOME, DISKMENU_CLASSIC_BUTTON_LOAD, DISKMENU_CLASSIC_BUTTON_DELETE, DISKMENU_CLASSIC_BUTTON_MAKEDIR }; const bool states[] = { listBoxFiles->canPrev(), listBoxFiles->canNext(), listBoxFiles->canGotoParent(), listBoxFiles->canGotoRoot(), listBoxFiles->canGotoHome(), true, listBoxFiles->currentSelectionIsFile(), false }; ASSERT(sizeof(states)/sizeof(bool) == sizeof(IDs)/sizeof(pp_uint32)); pp_uint32 i; for (i = 0; i < sizeof(IDs)/sizeof(pp_uint32); i++) { bool b = states[i]; PPButton* button = static_cast(static_cast(sectionContainer)->getControlByID(IDs[i])); if (button->isClickable() != b) { button->setClickable(b); if (repaint) tracker.screen->paintControl(button); } } const char* stateText = listBoxFiles->currentSelectionIsFile() ? "Load" : "Step"; PPButton* button = static_cast(static_cast(sectionContainer)->getControlByID(DISKMENU_CLASSIC_BUTTON_LOAD)); if (button->getText().compareTo(stateText) != 0) { button->setText(stateText); if (repaint) tracker.screen->paintControl(button); } stateText = sortAscending ? "\xfd" : "\xfe"; button = static_cast(static_cast(sectionContainer)->getControlByID(DISKMENU_CLASSIC_BUTTON_SORTORDER)); if (button->getText().compareTo(stateText) != 0) { button->setText(stateText); if (repaint) tracker.screen->paintControl(button); } static const char* sortTypes[PPListBoxFileBrowser::NumSortRules] = {"Name", "Size", "Extension"}; stateText = sortTypes[listBoxFiles->getSortType()]; button = static_cast(static_cast(sectionContainer)->getControlByID(DISKMENU_CLASSIC_BUTTON_SORTBY)); if (button->getText().compareTo(stateText) != 0) { button->setText(stateText); if (repaint) tracker.screen->paintControl(button); } PPString stateText2 = (listBoxFiles->getSize().height == fileBrowserExtent.height) ? TrackerConfig::stringButtonExtended : TrackerConfig::stringButtonCollapsed; button = static_cast(static_cast(sectionContainer)->getControlByID(DISKMENU_CLASSIC_BUTTON_VEXTEND)); if (button->getText().compareTo(stateText2) != 0) { button->setText(stateText2); if (repaint) tracker.screen->paintControl(button); } stateText2 = (listBoxFiles->getSize().width == fileBrowserExtent.width) ? ">" : "<"; button = static_cast(static_cast(sectionContainer)->getControlByID(DISKMENU_CLASSIC_BUTTON_HEXTEND)); if (button->getText().compareTo(stateText2) != 0) { button->setText(stateText2); if (repaint) tracker.screen->paintControl(button); } // update directory buttons #if 0 for (i = DISKMENU_CLASSIC_BUTTON_DIR0; i <= DISKMENU_CLASSIC_BUTTON_DIR4; i++) { PPButton* button = static_cast(static_cast(sectionContainer)->getControlByID(i)); PPString strKey = getKeyFromPredefPathButton(button); PPDictionaryKey* key = tracker.settingsDatabase->restore(strKey); button->enable(key != NULL); } #endif } void SectionDiskMenu::next(bool repaint/* = true*/) { listBoxFiles->next(); tracker.screen->paintControl(listBoxFiles); updateButtonStates(); } void SectionDiskMenu::prev(bool repaint/* = true*/) { listBoxFiles->prev(); tracker.screen->paintControl(listBoxFiles); updateButtonStates(); } void SectionDiskMenu::parent(bool repaint/* = true*/) { listBoxFiles->gotoParent(); tracker.screen->paintControl(listBoxFiles); updateButtonStates(); } void SectionDiskMenu::root(bool repaint/* = true*/) { listBoxFiles->gotoRoot(); tracker.screen->paintControl(listBoxFiles); updateButtonStates(); } void SectionDiskMenu::home(bool repaint/* = true*/) { listBoxFiles->gotoHome(); tracker.screen->paintControl(listBoxFiles); updateButtonStates(); } void SectionDiskMenu::reload(bool repaint/* = true*/) { PPPathEntry* pathEntry = NULL; const PPPathEntry* src = listBoxFiles->getCurrentSelectedPathEntry(); if (src) pathEntry = src->clone(); listBoxFiles->saveState(); listBoxFiles->refreshFiles(); listBoxFiles->restoreState(false); if (pathEntry) { for (pp_int32 i = 0; i < listBoxFiles->getNumItems(); i++) { if (pathEntry->compareTo(*listBoxFiles->getPathEntry(i))) { listBoxFiles->setSelectedIndex(i, false); break; } } delete pathEntry; } if (repaint) tracker.screen->paintControl(listBoxFiles); } void SectionDiskMenu::updateFilter(bool repaint/* = true*/) { FileExtProvider fileExtProvider; listBoxFiles->clearExtensions(); const char* const* extensions = NULL; if (static_cast(static_cast(sectionContainer)->getControlByID(DISKMENU_CLASSIC_CHECKBOX_FILTEREXTENSIONS))->isChecked()) { switch (classicViewState) { case BrowseModules: extensions = fileExtProvider.getModuleExtensions(); break; case BrowseInstruments: extensions = fileExtProvider.getInstrumentExtensions(); break; case BrowseSamples: extensions = fileExtProvider.getSampleExtensions(); break; case BrowsePatterns: extensions = fileExtProvider.getPatternExtensions(); break; case BrowseTracks: extensions = fileExtProvider.getTrackExtensions(); break; case BrowseAll: case BrowseLAST: break; } } if (extensions) listBoxFiles->addExtensions(extensions); reload(repaint); } void SectionDiskMenu::switchState(ClassicViewStates viewState) { classicViewState = viewState; updateFilter(false); updateClassicView(); updateFilenameEditField(classicViewState); } void SectionDiskMenu::resizeBrowserVertically() { PPSize size = listBoxFiles->getSize(); PPPoint location = listBoxFiles->getLocation(); if (size.height == fileBrowserExtent.height) { size.height-=13; listBoxFiles->setSize(size); location.y+=13; listBoxFiles->setLocation(location); } else { size.height+=13; listBoxFiles->setSize(size); location.y-=13; listBoxFiles->setLocation(location); } fitDirButtons(); updateClassicView(); } void SectionDiskMenu::resizeBrowserHorizontally() { PPSize size = listBoxFiles->getSize(); if (size.width == fileBrowserExtent.width) { size.width-=32; listBoxFiles->setSize(size); } else { size.width+=32; listBoxFiles->setSize(size); } updateClassicView(); } void SectionDiskMenu::fitDirButtons() { pp_int32 height = (listBoxFiles->getSize().height-2) / 6; pp_int32 cy = ((listBoxFiles->getSize().height-2) - (height * 6)); pp_int32 y = listBoxFiles->getLocation().y + cy; for (pp_int32 i = DISKMENU_CLASSIC_BUTTON_DIR0; i <= DISKMENU_CLASSIC_BUTTON_STOREDIR; i++) { PPControl* ctrl = static_cast(sectionContainer)->getControlByID(i); PPPoint p = ctrl->getLocation(); p.y = y; ctrl->setLocation(p); PPSize s = ctrl->getSize(); s.height = height-1; ctrl->setSize(s); y+=height; } } PPString SectionDiskMenu::getKeyFromPredefPathButton(PPControl* button) { pp_int32 id = button->getID(); id -= DISKMENU_CLASSIC_BUTTON_DIR0; if (id >= 0 && id < 5) { static const char* keys[BrowseLAST] = { "PREDEF_PATH_ALL", "PREDEF_PATH_MODULES", "PREDEF_PATH_INSTRUMENTS", "PREDEF_PATH_SAMPLES", "PREDEF_PATH_PATTERNS", "PREDEF_PATH_TRACKS", }; char result[1024]; sprintf(result, "%s_%d", keys[classicViewState], id); return result; } else return ""; } void SectionDiskMenu::assureExtension() { updateFilenameEditFieldExtension(classicViewState); } MilkyTracker-1.02.00/src/tracker/SectionDiskMenu.h000066400000000000000000000106101324432207300217100ustar00rootroot00000000000000/* * tracker/SectionDiskMenu.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * SectionDiskMenu.h * MilkyTracker * * Created by Peter Barth on 08.07.05. * */ #ifndef SECTIONDISKMENU__H #define SECTIONDISKMENU__H #include "BasicTypes.h" #include "SimpleVector.h" #include "Event.h" #include "SectionUpperLeft.h" class PPControl; class Tracker; class PPListBoxFileBrowser; class SectionDiskMenu : public SectionUpperLeft { private: enum ClassicViewStates { BrowseAll, BrowseModules, BrowseInstruments, BrowseSamples, BrowsePatterns, BrowseTracks, BrowseLAST // needs to be last }; bool diskMenuVisible; PPSimpleVector* normalViewControls; PPSimpleVector* classicViewControls; ClassicViewStates classicViewState; bool classicViewVisible; bool forceClassicBrowser; bool moduleTypeAdjust; bool sortAscending; bool storePath; PPControl* lastFocusedControl; PPListBoxFileBrowser* listBoxFiles; class PPListBox* editFieldCurrentFile; class PPRadioGroup* currentActiveRadioGroup; PPPoint radioGroupLocations[5]; PPSystemString* file; PPSystemString* fileFullPath; PPSystemString currentPath; #ifdef __LOWRES__ pp_int32 lastSIPOffsetMove; PPPoint lastPatternEditorControlLocation; PPSize lastPatternEditorControlSize; #endif PPSize fileBrowserExtent; class ColorQueryListener* colorQueryListener; public: SectionDiskMenu(Tracker& tracker); virtual ~SectionDiskMenu(); // Derived from SectionAbstract virtual pp_int32 handleEvent(PPObject* sender, PPEvent* event); virtual void init() { SectionUpperLeft::init(); } virtual void init(pp_int32 x, pp_int32 y); virtual void show(bool bShow); virtual void update(bool repaint = true); pp_int32 getCurrentSelectedSampleSaveType(); bool isActiveEditing(); bool isFileBrowserVisible(); bool fileBrowserHasFocus(); void setFileBrowserShowFocus(bool showFocus); void selectSaveType(pp_uint32 type); static pp_uint32 getDefaultConfigUInt32(); pp_uint32 getConfigUInt32(); void setConfigUInt32(pp_uint32 config); PPSystemString getCurrentPath(); void setCurrentPath(const PPSystemString& path, bool reload = true); PPString getCurrentPathASCII(); void setModuleTypeAdjust(bool moduleTypeAdjust) { this->moduleTypeAdjust = moduleTypeAdjust; } bool isDiskMenuVisible() { return diskMenuVisible; } void resizeInstrumentContainer(); void setCycleFilenames(bool cycleFilenames); PPListBoxFileBrowser* getListBoxFiles() { return listBoxFiles; } private: void prepareSection(); void showNormalView(bool bShow); void updateClassicView(bool repaint = true); void showClassicView(bool bShow); bool isNormalViewVisible(); bool isClassicViewVisible(); void flip(); void updateFilenameEditFieldExtension(ClassicViewStates viewState); void updateFilenameEditField(ClassicViewStates viewState); void updateFilenameEditField(const PPSystemString& fileName); void updateFilenameEditFieldFromBrowser(); void handleLoadOrStep(); void loadCurrentSelectedFile(); void showOverwriteMessageBox(); void prepareSave(); void saveCurrent(); void showDeleteMessageBox(); void deleteCurrent(); void updateButtonStates(bool repaint = true); void next(bool repaint = true); void prev(bool repaint = true); void parent(bool repaint = true); void root(bool repaint = true); void home(bool repaint = true); void reload(bool repaint = true); void updateFilter(bool repaint = true); void switchState(ClassicViewStates viewState); void resizeBrowserVertically(); void resizeBrowserHorizontally(); void fitDirButtons(); PPString getKeyFromPredefPathButton(PPControl* button); void assureExtension(); // Responder should be friend friend class DialogResponderDisk; friend class Tracker; }; #endif MilkyTracker-1.02.00/src/tracker/SectionHDRecorder.cpp000066400000000000000000000675721324432207300225300ustar00rootroot00000000000000/* * tracker/SectionHDRecorder.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * SectionHDRecorder.cpp * MilkyTracker * * Created by Peter Barth on 26.10.05. * */ #include "SectionHDRecorder.h" #include "Container.h" #include "Tracker.h" #include "TrackerConfig.h" #include "ModuleEditor.h" #include "ModuleServices.h" #include "PlayerController.h" #include "PlayerMaster.h" #include "ResamplerHelper.h" #include "PPUIConfig.h" #include "CheckBox.h" #include "RadioGroup.h" #include "Seperator.h" #include "Slider.h" #include "StaticText.h" #include "ListBox.h" #include "PatternEditorControl.h" #include "DialogListBox.h" #include "SampleEditor.h" #include "PPSavePanel.h" #include "ControlIDs.h" enum ControlIDs { HDRECORD_BUTTON_EXIT = 33000, HDRECORD_RADIOGROUP_FREQUENCIES, HDRECORD_BUTTON_RESAMPLING, HDRECORD_CHECKBOX_RAMPING, HDRECORD_CHECKBOX_ALLOWMUTING, HDRECORD_STATICTEXT_START, HDRECORD_BUTTON_START_PLUS, HDRECORD_BUTTON_START_MINUS, HDRECORD_STATICTEXT_END, HDRECORD_BUTTON_END_PLUS, HDRECORD_BUTTON_END_MINUS, HDRECORD_BUTTON_RECORD, HDRECORD_BUTTON_RECORD_AS, HDRECORD_RADIOGROUP_AMPLIFY, HDRECORD_SLIDER_MIXERVOLUME, HDRECORD_STATICTEXT_MIXERVOLUME, HDRECORD_BUTTON_RECORDINGMODE, HDRECORD_STATICTEXT_SAVETOFILENAME, HDRECORD_STATICTEXT_INS, HDRECORD_STATICTEXT_SMP, HDRECORD_BUTTON_INS_PLUS, HDRECORD_BUTTON_INS_MINUS, HDRECORD_BUTTON_SMP_PLUS, HDRECORD_BUTTON_SMP_MINUS, HDRECORD_BUTTON_MIXER_AUTO, RESPONDMESSAGEBOX_SELECTRESAMPLER }; // Class which responds to the message box clicks class DialogResponderHDRec : public DialogResponder { private: SectionHDRecorder& section; public: DialogResponderHDRec(SectionHDRecorder& section) : section(section) { } virtual pp_int32 ActionOkay(PPObject* sender) { switch (reinterpret_cast(sender)->getID()) { case RESPONDMESSAGEBOX_SELECTRESAMPLER: { PPListBox* listBox = reinterpret_cast(sender)->getListBox(); section.storeResampler(listBox->getSelectedIndex()); break; } } return 0; } virtual pp_int32 ActionCancel(PPObject* sender) { return 0; } }; void SectionHDRecorder::validate() { if (insIndex < 0) insIndex = 0; if (insIndex > tracker.moduleEditor->getNumInstruments() - 1) insIndex = tracker.moduleEditor->getNumInstruments() - 1; if (smpIndex < 0) smpIndex = 0; if (smpIndex > tracker.moduleEditor->getNumSamples(insIndex) - 1) smpIndex = tracker.moduleEditor->getNumSamples(insIndex) - 1; } SectionHDRecorder::SectionHDRecorder(Tracker& tracker) : SectionUpperLeft(tracker, NULL, new DialogResponderHDRec(*this)), recorderMode(RecorderModeToFile), fromOrder(0), toOrder(0), mixerVolume(256), resampler(1), insIndex(0), smpIndex(0), currentFileName(TrackerConfig::untitledSong) { } SectionHDRecorder::~SectionHDRecorder() { } bool SectionHDRecorder::getSettingsRamping() { PPContainer* container = static_cast(sectionContainer); PPCheckBox* checkBox = static_cast(container->getControlByID(HDRECORD_CHECKBOX_RAMPING)); ASSERT(checkBox); return checkBox->isChecked(); } void SectionHDRecorder::setSettingsRamping(bool b) { PPContainer* container = static_cast(sectionContainer); PPCheckBox* checkBox = static_cast(container->getControlByID(HDRECORD_CHECKBOX_RAMPING)); ASSERT(checkBox); checkBox->checkIt(b); } pp_uint32 SectionHDRecorder::getSettingsResampler() { return resampler; } void SectionHDRecorder::setSettingsResampler(pp_uint32 resampler) { this->resampler = resampler; } bool SectionHDRecorder::getSettingsAllowMuting() { PPContainer* container = static_cast(sectionContainer); PPCheckBox* checkBox = static_cast(container->getControlByID(HDRECORD_CHECKBOX_ALLOWMUTING)); ASSERT(checkBox); return checkBox->isChecked(); } void SectionHDRecorder::setSettingsAllowMuting(bool b) { PPContainer* container = static_cast(sectionContainer); PPCheckBox* checkBox = static_cast(container->getControlByID(HDRECORD_CHECKBOX_ALLOWMUTING)); ASSERT(checkBox); checkBox->checkIt(b); } pp_int32 SectionHDRecorder::getSettingsFrequency() { PPContainer* container = static_cast(sectionContainer); PPRadioGroup* radioGroup = static_cast(container->getControlByID(HDRECORD_RADIOGROUP_FREQUENCIES)); ASSERT(radioGroup); ASSERT(radioGroup->getChoice() < (unsigned)TrackerConfig::numMixFrequencies); return TrackerConfig::mixFrequencies[radioGroup->getChoice()]; } void SectionHDRecorder::setSettingsFrequency(pp_int32 freq) { PPContainer* container = static_cast(sectionContainer); PPRadioGroup* radioGroup = static_cast(container->getControlByID(HDRECORD_RADIOGROUP_FREQUENCIES)); ASSERT(radioGroup); for (pp_int32 j = 0; j < TrackerConfig::numMixFrequencies; j++) { if (freq == TrackerConfig::mixFrequencies[j]) { radioGroup->setChoice(j); break; } } } pp_int32 SectionHDRecorder::getSettingsMixerShift() { PPContainer* container = static_cast(sectionContainer); PPRadioGroup* radioGroup = static_cast(container->getControlByID(HDRECORD_RADIOGROUP_AMPLIFY)); ASSERT(radioGroup); ASSERT(radioGroup->getChoice() < 3); return 2-radioGroup->getChoice(); } void SectionHDRecorder::setSettingsMixerShift(pp_int32 shift) { PPContainer* container = static_cast(sectionContainer); PPRadioGroup* radioGroup = static_cast(container->getControlByID(HDRECORD_RADIOGROUP_AMPLIFY)); ASSERT(radioGroup); ASSERT(shift >= 0 && shift < 3); radioGroup->setChoice(2-shift); } pp_int32 SectionHDRecorder::handleEvent(PPObject* sender, PPEvent* event) { if (event->getID() == eCommand || event->getID() == eCommandRepeat) { switch (reinterpret_cast(sender)->getID()) { case HDRECORD_BUTTON_START_PLUS: if (fromOrder < toOrder) fromOrder++; update(); break; case HDRECORD_BUTTON_START_MINUS: if (fromOrder > 0) fromOrder--; update(); break; case HDRECORD_BUTTON_END_PLUS: if (toOrder < tracker.moduleEditor->getNumOrders()-1) toOrder++; update(); break; case HDRECORD_BUTTON_END_MINUS: if (toOrder > fromOrder) toOrder--; update(); break; case HDRECORD_BUTTON_EXIT: if (event->getID() != eCommand) break; show(false); break; case HDRECORD_BUTTON_RECORD: if (event->getID() != eCommand) break; if (recorderMode == RecorderModeToFile) { if (TrackerConfig::untitledSong.compareTo(currentFileName.stripExtension()) == 0) { exportWAVAs(tracker.moduleEditor->getModuleFileNameFull()); } else { exportWAVAsFileName(currentFileName); } } else { exportWAVAsSample(); } update(); break; case HDRECORD_BUTTON_RECORD_AS: { if (event->getID() != eCommand) break; ASSERT(recorderMode == RecorderModeToFile); exportWAVAs(currentFileName); update(); break; } case HDRECORD_BUTTON_RECORDINGMODE: if (recorderMode == RecorderModeToFile) recorderMode = RecorderModeToSample; else recorderMode = RecorderModeToFile; update(); break; case HDRECORD_BUTTON_MIXER_AUTO: if (event->getID() != eCommand) break; getPeakLevel(); update(); break; case HDRECORD_BUTTON_INS_PLUS: // update will validate the values insIndex++; update(); break; case HDRECORD_BUTTON_INS_MINUS: // see above insIndex--; update(); break; case HDRECORD_BUTTON_SMP_PLUS: // see above smpIndex++; update(); break; case HDRECORD_BUTTON_SMP_MINUS: // see above smpIndex--; update(); break; case HDRECORD_BUTTON_RESAMPLING: showResamplerMessageBox(); break; } } else if (event->getID() == eValueChanged) { switch (reinterpret_cast(sender)->getID()) { case HDRECORD_SLIDER_MIXERVOLUME: { mixerVolume = reinterpret_cast(sender)->getCurrentValue(); update(); break; } } } return 0; } void SectionHDRecorder::init(pp_int32 px, pp_int32 py) { PPScreen* screen = tracker.screen; PPContainer* container = new PPContainer(CONTAINER_HDRECORDER, tracker.screen, this, PPPoint(px, py), PPSize(320,UPPERLEFTSECTIONHEIGHT), false); container->setColor(TrackerConfig::colorThemeMain); tracker.screen->addControl(container); container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(px + 2, py + 2), "HD Recorder", true, true)); PPSize size = container->getSize(); pp_int32 buttonWidth = 8*4+4; pp_int32 buttonHeight = 22; pp_int32 x = px+container->getSize().width-(buttonWidth+4); pp_int32 y = py+container->getSize().height-(buttonHeight+4); pp_int32 dy = 11+20; // Horizontal seperator above exit container->addControl(new PPSeperator(0, screen, PPPoint(px+2, py + size.height - dy), size.width-5, container->getColor(), true)); #ifdef __LOWRES__ y-=2; buttonHeight+=4; PPButton* button = new PPButton(MAINMENU_SMPEDIT, screen, &tracker, PPPoint(x, y), PPSize(buttonWidth, buttonHeight/3)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Smp.Ed."); container->addControl(button); y+=button->getSize().height+1; button = new PPButton(MAINMENU_INSEDIT, screen, &tracker, PPPoint(x, y), PPSize(buttonWidth, buttonHeight/3)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Ins.Ed."); container->addControl(button); y+=button->getSize().height+1; button = new PPButton(HDRECORD_BUTTON_EXIT, screen, this, PPPoint(x, y), PPSize(buttonWidth,buttonHeight/3)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Exit"); container->addControl(button); #else PPButton* button = new PPButton(HDRECORD_BUTTON_EXIT, screen, this, PPPoint(x, y), PPSize(buttonWidth,buttonHeight)); button->setText("Exit"); container->addControl(button); #endif // add frequencies pp_int32 x2 = px; pp_int32 y2 = py + 11 + 3 + 4; container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x2 + 4, y2), "Output:", true)); PPRadioGroup* radioGroup = new PPRadioGroup(HDRECORD_RADIOGROUP_FREQUENCIES, screen, this, PPPoint(x2+2, y2+10), PPSize(88, TrackerConfig::numMixFrequencies*14)); radioGroup->setColor(TrackerConfig::colorThemeMain); for (pp_int32 j = 0; j < TrackerConfig::numMixFrequencies; j++) { char buffer[32]; sprintf(buffer, "%i Hz", TrackerConfig::mixFrequencies[j]); radioGroup->addItem(buffer); } radioGroup->setChoice(2); container->addControl(radioGroup); y2+=radioGroup->getSize().height + 17; // --------- amplify container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x2 + 4, y2), "Amplify:", true)); y2+=9; radioGroup = new PPRadioGroup(HDRECORD_RADIOGROUP_AMPLIFY, screen, this, PPPoint(x2 + 2, y2), PPSize(180, 20)); radioGroup->setColor(TrackerConfig::colorThemeMain); radioGroup->setHorizontal(true); radioGroup->addItem("25%"); radioGroup->addItem("50%"); radioGroup->addItem("100%"); radioGroup->setChoice(1); container->addControl(radioGroup); y2-=9; // --------- mixvol. slider container->addControl(new PPSeperator(0, screen, PPPoint(x2 + 146 - 4, y2-3), 28, TrackerConfig::colorThemeMain, false)); container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x2 + 146, y2), "Mixer Volume:", true)); container->addControl(new PPStaticText(HDRECORD_STATICTEXT_MIXERVOLUME, NULL, NULL, PPPoint(x2 + 146, y2 + 14), "100%", false)); PPSlider* slider = new PPSlider(HDRECORD_SLIDER_MIXERVOLUME, screen, this, PPPoint(x2 + 146 + 4*8+4, y2 + 14-1), 91, true); slider->setMaxValue(256); slider->setBarSize(16384); container->addControl(slider); button = new PPButton(HDRECORD_BUTTON_MIXER_AUTO, screen, this, PPPoint(x2 + 154 + 12*8+1, y2), PPSize(21, 9)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Auto"); container->addControl(button); container->addControl(new PPSeperator(0, screen, PPPoint(x2 + 154 + 4*8 + 4 + 80 + 5, y2-3), 28, TrackerConfig::colorThemeMain, false)); // -------------- quality -------------- y2 = py + 11 + 3 + 4; x2 += /*radioGroup->getSize().width*/88; pp_int32 x3 = x2 - 6; container->addControl(new PPSeperator(0, screen, PPPoint(x2 - 6, py+16 - 2), container->getSize().height - (dy+14), TrackerConfig::colorThemeMain, false)); container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x2, y2), "Quality:", true)); y2+=13; container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x2, y2), "Resampler:", true)); button = new PPButton(HDRECORD_BUTTON_RESAMPLING, screen, this, PPPoint(x2 + 8*10 + 4, y2-2), PPSize(6*7 + 4, 11)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Select" PPSTR_PERIODS); container->addControl(button); container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x2, y2 + 12), "Volume ramping:", true)); container->addControl(new PPCheckBox(HDRECORD_CHECKBOX_RAMPING, screen, this, PPPoint(x2 + 15*8, y2-1+12))); y2+=24; // Horizontal seperator above exit container->addControl(new PPSeperator(0, screen, PPPoint(x3+1, y2), size.width-5 - (x3-px), container->getColor(), true)); y2+=5; container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x2, y2), "Allow muting:", true)); container->addControl(new PPCheckBox(HDRECORD_CHECKBOX_ALLOWMUTING, screen, this, PPPoint(x2 + 15*8, y2-1), false)); x2 += 18*8-4; container->addControl(new PPSeperator(0, screen, PPPoint(x2 - 6, py+16 - 2), container->getSize().height - (dy+28), TrackerConfig::colorThemeMain, false)); y2 = py + 11 + 3 + 4; container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x2, y2), "Range:", true)); y2+=13; container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x2, y2), "From", true)); container->addControl(new PPStaticText(HDRECORD_STATICTEXT_START, screen, this, PPPoint(x2+5*8, y2), "xx")); button = new PPButton(HDRECORD_BUTTON_START_PLUS, screen, this, PPPoint(x2+7*8+3, y2-1), PPSize(12, 9)); button->setText(TrackerConfig::stringButtonPlus); container->addControl(button); button = new PPButton(HDRECORD_BUTTON_START_MINUS, screen, this, PPPoint(button->getLocation().x + button->getSize().width+1, y2-1), PPSize(12, 9)); button->setText(TrackerConfig::stringButtonMinus); container->addControl(button); y2+=12; container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x2, y2), "To", true)); container->addControl(new PPStaticText(HDRECORD_STATICTEXT_END, screen, this, PPPoint(x2+5*8, y2), "xx")); button = new PPButton(HDRECORD_BUTTON_END_PLUS, screen, this, PPPoint(x2+7*8+3, y2-1), PPSize(12, 9)); button->setText(TrackerConfig::stringButtonPlus); container->addControl(button); button = new PPButton(HDRECORD_BUTTON_END_MINUS, screen, this, PPPoint(button->getLocation().x + button->getSize().width+1, y2-1), PPSize(12, 9)); button->setText(TrackerConfig::stringButtonMinus); container->addControl(button); y2+=15; buttonWidth = 6*8 + 4; buttonHeight = 12; button = new PPButton(HDRECORD_BUTTON_RECORD, screen, this, PPPoint(x2, y2), PPSize(buttonWidth,buttonHeight)); button->setText("Record"); container->addControl(button); button = new PPButton(HDRECORD_BUTTON_RECORD_AS, screen, this, PPPoint(x2+buttonWidth+1, y2), PPSize(34,buttonHeight)); button->setText("As" PPSTR_PERIODS); container->addControl(button); y2+=buttonHeight+2; container->addControl(new PPSeperator(0, screen, PPPoint(x3+1, y2), size.width-5 - (x3-px), container->getColor(), true)); y2+=5; x2 = x3+6; button = new PPButton(HDRECORD_BUTTON_RECORDINGMODE, screen, this, PPPoint(x2-3, y2-2), PPSize(5*8+2,buttonHeight-1), false); button->setColor(TrackerConfig::colorThemeMain); button->setTextColor(PPUIConfig::getInstance()->getColor(PPUIConfig::ColorStaticText)); button->setText("File:"); container->addControl(button); //container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x2, y2), "File:", true)); x2+=5*8+4; PPStaticText* text = new PPStaticText(HDRECORD_STATICTEXT_SAVETOFILENAME, NULL, NULL, PPPoint(x2, y2), "123456789012345678901234", false, false, true); text->setExtent(PPSize(23*8, 8)); container->addControl(text); x2+=2; text = new PPStaticText(HDRECORD_STATICTEXT_INS, NULL, NULL, PPPoint(x2, y2), "Ins:xx", false); container->addControl(text); x2+=text->getSize().width + 1 + 8; button = new PPButton(HDRECORD_BUTTON_INS_PLUS, screen, this, PPPoint(x2, y2-1), PPSize(13, 9)); button->setText(TrackerConfig::stringButtonPlus); container->addControl(button); button = new PPButton(HDRECORD_BUTTON_INS_MINUS, screen, this, PPPoint(button->getLocation().x + button->getSize().width+1, y2-1), PPSize(13, 9)); button->setText(TrackerConfig::stringButtonMinus); container->addControl(button); x2 = button->getLocation().x + button->getSize().width + 10; text = new PPStaticText(HDRECORD_STATICTEXT_SMP, NULL, NULL, PPPoint(x2, y2), "Smp:xx", false); container->addControl(text); x2+=text->getSize().width + 1 + 8; button = new PPButton(HDRECORD_BUTTON_SMP_PLUS, screen, this, PPPoint(x2, y2-1), PPSize(13, 9)); button->setText(TrackerConfig::stringButtonPlus); container->addControl(button); button = new PPButton(HDRECORD_BUTTON_SMP_MINUS, screen, this, PPPoint(button->getLocation().x + button->getSize().width+1, y2-1), PPSize(13, 9)); button->setText(TrackerConfig::stringButtonMinus); container->addControl(button); sectionContainer = container; initialised = true; showSection(false); } void SectionHDRecorder::update(bool repaint/* = true*/) { PPContainer* container = static_cast(tracker.screen->getControlByID(CONTAINER_HDRECORDER)); ASSERT(container); if (fromOrder < 0) fromOrder = 0; if (toOrder < fromOrder) toOrder = fromOrder; if (toOrder >= tracker.moduleEditor->getNumOrders()) toOrder = tracker.moduleEditor->getNumOrders()-1; PPStaticText* staticText = static_cast(container->getControlByID(HDRECORD_STATICTEXT_START)); ASSERT(staticText); staticText->setHexValue(fromOrder, 2); staticText = static_cast(container->getControlByID(HDRECORD_STATICTEXT_END)); ASSERT(staticText); staticText->setHexValue(toOrder, 2); // mixer volume char buffer[80], buffer2[80]; PPStaticText* text = static_cast(container->getControlByID(HDRECORD_STATICTEXT_MIXERVOLUME)); ASSERT(text); PPSlider* slider = static_cast(container->getControlByID(HDRECORD_SLIDER_MIXERVOLUME)); ASSERT(slider); sprintf(buffer, "%i%%", (mixerVolume*100)/256); if (strlen(buffer) < 4) { memset(buffer2, 32, sizeof(buffer2)); strcpy(buffer2 + 4-strlen(buffer), buffer); strcpy(buffer, buffer2); } text->setText(buffer); slider->setCurrentValue(mixerVolume); if (recorderMode == RecorderModeToFile) { PPButton* button = static_cast(container->getControlByID(HDRECORD_BUTTON_RECORDINGMODE)); button->setText("File:"); button = static_cast(container->getControlByID(HDRECORD_BUTTON_RECORD_AS)); button->enable(true); staticText = static_cast(container->getControlByID(HDRECORD_STATICTEXT_SAVETOFILENAME)); staticText->show(true); if (TrackerConfig::untitledSong.compareTo(currentFileName.stripExtension()) == 0) { staticText->setText(""); } else { PPSystemString temp = currentFileName.stripPath(); char* nameASCIIZ = temp.toASCIIZ(); staticText->setText(nameASCIIZ); delete[] nameASCIIZ; } container->getControlByID(HDRECORD_STATICTEXT_INS)->show(false); container->getControlByID(HDRECORD_BUTTON_INS_PLUS)->show(false); container->getControlByID(HDRECORD_BUTTON_INS_MINUS)->show(false); container->getControlByID(HDRECORD_STATICTEXT_SMP)->show(false); container->getControlByID(HDRECORD_BUTTON_SMP_PLUS)->show(false); container->getControlByID(HDRECORD_BUTTON_SMP_MINUS)->show(false); } else { validate(); PPButton* button = static_cast(container->getControlByID(HDRECORD_BUTTON_RECORDINGMODE)); button->setText("Samp:"); button = static_cast(container->getControlByID(HDRECORD_BUTTON_RECORD_AS)); button->enable(false); staticText = static_cast(container->getControlByID(HDRECORD_STATICTEXT_SAVETOFILENAME)); staticText->show(false); sprintf(buffer, "Ins:%x", insIndex+1); staticText = static_cast(container->getControlByID(HDRECORD_STATICTEXT_INS)); staticText->setText(buffer); sprintf(buffer, "Smp:%x", smpIndex); staticText = static_cast(container->getControlByID(HDRECORD_STATICTEXT_SMP)); staticText->setText(buffer); container->getControlByID(HDRECORD_STATICTEXT_INS)->show(true); container->getControlByID(HDRECORD_BUTTON_INS_PLUS)->show(true); container->getControlByID(HDRECORD_BUTTON_INS_MINUS)->show(true); container->getControlByID(HDRECORD_STATICTEXT_SMP)->show(true); container->getControlByID(HDRECORD_BUTTON_SMP_PLUS)->show(true); container->getControlByID(HDRECORD_BUTTON_SMP_MINUS)->show(true); } if (repaint) tracker.screen->paintControl(container); } void SectionHDRecorder::notifyInstrumentSelect(pp_int32 index) { insIndex = index-1; if (!sectionContainer->isVisible()) return; update(); } void SectionHDRecorder::notifySampleSelect(pp_int32 index) { smpIndex = index-1; if (!sectionContainer->isVisible()) return; update(); } void SectionHDRecorder::show(bool bShow) { SectionUpperLeft::show(bShow); } void SectionHDRecorder::exportWAVWithPanel(const PPSystemString& defaultFileName) { PPSavePanel savePanel(tracker.screen, "Export Song to WAV", defaultFileName); savePanel.addExtension("wav","Uncompressed WAV"); if (savePanel.runModal() == PPModalDialog::ReturnCodeOK) { const SYSCHAR* finalFileName = savePanel.getFileName(); if (finalFileName) { currentFileName = finalFileName; exportWAVAsFileName(finalFileName); } } } void SectionHDRecorder::exportWAVAsFileName(const PPSystemString& fileName) { ModuleEditor* moduleEditor = tracker.moduleEditor; ModuleServices::WAVWriterParameters parameters; parameters.sampleRate = getSettingsFrequency(); parameters.resamplerType = (getSettingsRamping() ? 1 : 0) | (getSettingsResampler() << 1); parameters.playMode = tracker.playerController->getPlayMode(); parameters.mixerShift = getSettingsMixerShift(); parameters.mixerVolume = mixerVolume; mp_ubyte* muting = new mp_ubyte[moduleEditor->getNumChannels()]; memset(muting, 0, moduleEditor->getNumChannels()); if (getSettingsAllowMuting()) { for (pp_int32 i = 0; i < (signed)moduleEditor->getNumChannels(); i++) muting[i] = (mp_ubyte)tracker.muteChannels[i]; } parameters.muting = muting; parameters.panning = tracker.playerController->getPanningTable(); parameters.fromOrder = fromOrder; parameters.toOrder = toOrder; tracker.signalWaitState(true); pp_int32 res = moduleEditor->getModuleServices()->exportToWAV(fileName, parameters);; tracker.signalWaitState(false); delete[] muting; if (res > 0) { pp_int32 seconds = (pp_int32)((float)res / (float)getSettingsFrequency()); char buffer[200]; sprintf(buffer, "%i:%02i successfully recorded", seconds/60, seconds%60); tracker.showMessageBox(MESSAGEBOX_UNIVERSAL, buffer, Tracker::MessageBox_OK); } else { tracker.showMessageBox(MESSAGEBOX_UNIVERSAL, "Recording failed.", Tracker::MessageBox_OK); } } void SectionHDRecorder::getPeakLevel() { ModuleEditor* moduleEditor = tracker.moduleEditor; ModuleServices::WAVWriterParameters parameters; parameters.sampleRate = getSettingsFrequency(); parameters.resamplerType = (getSettingsRamping() ? 1 : 0) | (getSettingsResampler() << 1); parameters.playMode = tracker.playerController->getPlayMode(); parameters.mixerShift = getSettingsMixerShift(); parameters.mixerVolume = 256; mp_ubyte* muting = new mp_ubyte[moduleEditor->getNumChannels()]; memset(muting, 0, moduleEditor->getNumChannels()); if (getSettingsAllowMuting()) { for (pp_int32 i = 0; i < (signed)moduleEditor->getNumChannels(); i++) muting[i] = (mp_ubyte)tracker.muteChannels[i]; } parameters.muting = muting; parameters.panning = tracker.playerController->getPanningTable(); parameters.fromOrder = fromOrder; parameters.toOrder = toOrder; tracker.signalWaitState(true); mixerVolume = moduleEditor->getModuleServices()->estimateMixerVolume(parameters); tracker.signalWaitState(false); delete[] muting; tracker.screen->update(); } void SectionHDRecorder::resetCurrentFileName() { currentFileName = TrackerConfig::untitledSong; update(false); } void SectionHDRecorder::setCurrentFileName(const PPSystemString& fileName) { currentFileName = fileName; update(false); } void SectionHDRecorder::exportWAVAs(const PPSystemString& fileName) { if (tracker.useClassicBrowser) { tracker.saveType(FileTypes::FileTypeSongWAV); } else { PPSystemString temp = fileName.stripExtension(); temp.append(".wav"); exportWAVWithPanel(temp.stripPath()); } } void SectionHDRecorder::exportWAVAsSample() { ModuleEditor* moduleEditor = tracker.moduleEditor; ModuleServices::WAVWriterParameters parameters; parameters.sampleRate = getSettingsFrequency(); parameters.resamplerType = (getSettingsRamping() ? 1 : 0) | (getSettingsResampler() << 1); parameters.playMode = tracker.playerController->getPlayMode(); parameters.mixerShift = getSettingsMixerShift(); parameters.mixerVolume = mixerVolume; mp_ubyte* muting = new mp_ubyte[moduleEditor->getNumChannels()]; memset(muting, 0, moduleEditor->getNumChannels()); if (getSettingsAllowMuting()) { for (pp_int32 i = 0; i < (signed)moduleEditor->getNumChannels(); i++) muting[i] = (mp_ubyte)tracker.muteChannels[i]; } parameters.muting = muting; parameters.panning = tracker.playerController->getPanningTable(); parameters.fromOrder = fromOrder; parameters.toOrder = toOrder; tracker.signalWaitState(true); mp_sint32 numSamples = moduleEditor->getModuleServices()->estimateWaveLengthInSamples(parameters); validate(); pp_int32 curIns = moduleEditor->getCurrentInstrumentIndex(); pp_int32 curSmp = moduleEditor->getCurrentSampleIndex(); // surpress screen updates from here on... tracker.screen->pauseUpdate(true); moduleEditor->reloadSample(insIndex, smpIndex); SampleEditor::WorkSample* workSample = moduleEditor->getSampleEditor()->createWorkSample(numSamples, 16, parameters.sampleRate); if (workSample) { pp_int16* buffer = (pp_int16*)workSample->getBuffer(); moduleEditor->getModuleServices()->exportToBuffer16Bit(parameters, buffer, numSamples, true); moduleEditor->getSampleEditor()->pasteOther(*workSample); delete workSample; } moduleEditor->reloadSample(curIns, curSmp); // ...until here tracker.screen->pauseUpdate(false); tracker.screen->paint(); tracker.signalWaitState(false); } void SectionHDRecorder::adjustOrders() { fromOrder = 0; toOrder = tracker.moduleEditor->getNumOrders()-1; } void SectionHDRecorder::showResamplerMessageBox() { if (dialog) { delete dialog; dialog = NULL; } dialog = new DialogListBox(tracker.screen, responder, RESPONDMESSAGEBOX_SELECTRESAMPLER, "Select Resampler", true); PPListBox* listBox = static_cast(dialog)->getListBox(); ResamplerHelper resamplerHelper; for (pp_uint32 i = 0; i < resamplerHelper.getNumResamplers(); i++) listBox->addItem(resamplerHelper.getResamplerName(i)); listBox->setSelectedIndex(resampler, false); dialog->show(); } void SectionHDRecorder::storeResampler(pp_uint32 resampler) { this->resampler = resampler; } MilkyTracker-1.02.00/src/tracker/SectionHDRecorder.h000066400000000000000000000060011324432207300221510ustar00rootroot00000000000000/* * tracker/SectionHDRecorder.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * SectionHDRecorder.h * MilkyTracker * * Created by Peter Barth on 26.10.05. * */ #ifndef SECTIONHDRECORDER__H #define SECTIONHDRECORDER__H #include "BasicTypes.h" #include "Event.h" #include "SectionUpperLeft.h" class PPControl; class Tracker; class PPCheckBox; class SectionHDRecorder : public SectionUpperLeft { private: enum RecorderModes { RecorderModeToFile, RecorderModeToSample }; RecorderModes recorderMode; pp_int32 fromOrder; pp_int32 toOrder; pp_int32 mixerVolume; pp_uint32 resampler; pp_int32 insIndex; pp_int32 smpIndex; PPSystemString currentFileName; bool getSettingsRamping(); void setSettingsRamping(bool b); pp_uint32 getSettingsResampler(); void setSettingsResampler(pp_uint32 resampler); bool getSettingsAllowMuting(); void setSettingsAllowMuting(bool b); pp_int32 getSettingsFrequency(); void setSettingsFrequency(pp_int32 freq); pp_int32 getSettingsMixerVolume() { return mixerVolume; } void setSettingsMixerVolume(pp_int32 vol) { mixerVolume = vol; } pp_int32 getSettingsMixerShift(); void setSettingsMixerShift(pp_int32 shift); void validate(); public: SectionHDRecorder(Tracker& tracker); virtual ~SectionHDRecorder(); // Derived from SectionAbstract virtual pp_int32 handleEvent(PPObject* sender, PPEvent* event); virtual void init() { SectionUpperLeft::init(); } virtual void init(pp_int32 x, pp_int32 y); virtual void show(bool bShow); virtual void update(bool repaint = true); virtual void notifyInstrumentSelect(pp_int32 index); virtual void notifySampleSelect(pp_int32 index); void exportWAVAs(const PPSystemString& fileName); void exportWAVWithPanel(const PPSystemString& defaultFileName); void exportWAVAsFileName(const PPSystemString& fileName); void exportWAVAsSample(); void getPeakLevel(); void resetCurrentFileName(); void setCurrentFileName(const PPSystemString& fileName); void adjustOrders(); void selectFileOutput() { recorderMode = RecorderModeToFile; } void selectSampleOutput() { recorderMode = RecorderModeToSample; } private: // Message box with list of resampler void showResamplerMessageBox(); void storeResampler(pp_uint32 resampler); // Responder should be friend friend class DialogResponderHDRec; friend class Tracker; }; #endif MilkyTracker-1.02.00/src/tracker/SectionInstruments.cpp000066400000000000000000001732371324432207300230760ustar00rootroot00000000000000/* * tracker/SectionInstruments.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * SectionInstruments.cpp * MilkyTracker * * Created by Peter Barth on 15.04.05. * */ #include "SectionInstruments.h" #include "Tracker.h" #include "TrackerConfig.h" #include "TabManager.h" #include "ModuleEditor.h" #include "EnvelopeEditor.h" #include "SampleEditor.h" #include "PianoControl.h" #include "PatternTools.h" #include "SectionSamples.h" #include "Screen.h" #include "PPUIConfig.h" #include "Button.h" #include "CheckBox.h" #include "CheckBoxLabel.h" #include "MessageBoxContainer.h" #include "TransparentContainer.h" #include "ListBox.h" #include "RadioGroup.h" #include "Seperator.h" #include "Slider.h" #include "StaticText.h" #include "EnvelopeEditorControl.h" #include "PatternEditorControl.h" #include "DialogBase.h" #include "PlayerController.h" #include "InputControlListener.h" #include "EnvelopeContainer.h" // OS Interface #include "PPOpenPanel.h" #include "PPSavePanel.h" #include "ControlIDs.h" // Class which responds to message box clicks class DialogResponderInstruments : public DialogResponder { private: SectionInstruments& section; public: DialogResponderInstruments(SectionInstruments& section) : section(section) { } virtual pp_int32 ActionOkay(PPObject* sender) { switch (reinterpret_cast(sender)->getID()) { case MESSAGEBOX_ZAPINSTRUMENT: { section.zapInstrument(); break; } } return 0; } }; EnvelopeEditor* SectionInstruments::getEnvelopeEditor() { return tracker.getEnvelopeEditor(); } void SectionInstruments::showSection(bool bShow) { containerEntire->show(bShow); } SectionInstruments::SectionInstruments(Tracker& theTracker) : SectionAbstract(theTracker, NULL, new DialogResponderInstruments(*this)), containerEntire(NULL), containerEnvelopes(NULL), containerSampleSlider(NULL), containerInstrumentSlider(NULL), envelopeEditorControl(NULL), pianoControl(NULL), currentEnvelopeType(EnvelopeEditor::EnvelopeTypeVolume), visible(false), storeEnvelope(false) { predefinedVolumeEnvelopes = new EnvelopeContainer(TrackerConfig::numPredefinedEnvelopes); predefinedPanningEnvelopes = new EnvelopeContainer(TrackerConfig::numPredefinedEnvelopes); // Store default predefined envelopes for (pp_int32 i = 0; i < TrackerConfig::numPredefinedEnvelopes; i++) { TEnvelope e = EnvelopeContainer::decodeEnvelope(TrackerConfig::defaultPredefinedVolumeEnvelope); predefinedVolumeEnvelopes->store(i, e); e = EnvelopeContainer::decodeEnvelope(TrackerConfig::defaultPredefinedPanningEnvelope); predefinedPanningEnvelopes->store(i, e); } } SectionInstruments::~SectionInstruments() { delete predefinedVolumeEnvelopes; delete predefinedPanningEnvelopes; } pp_int32 SectionInstruments::handleEvent(PPObject* sender, PPEvent* event) { char buffer[100]; char buffer2[100]; ModuleEditor::TEditorInstrument* ins; PPScreen* screen = tracker.screen; ModuleEditor* moduleEditor = tracker.moduleEditor; if (event->getID() == eUpdateChanged) { tracker.updateWindowTitle(); } else if (event->getID() == eCommand || event->getID() == eCommandRepeat) { switch (reinterpret_cast(sender)->getID()) { case BUTTON_ENVELOPE_PREDEF_0: case BUTTON_ENVELOPE_PREDEF_1: case BUTTON_ENVELOPE_PREDEF_2: case BUTTON_ENVELOPE_PREDEF_3: case BUTTON_ENVELOPE_PREDEF_4: case BUTTON_ENVELOPE_PREDEF_5: case BUTTON_ENVELOPE_PREDEF_6: case BUTTON_ENVELOPE_PREDEF_7: case BUTTON_ENVELOPE_PREDEF_8: case BUTTON_ENVELOPE_PREDEF_9: { if (event->getID() != eCommand) break; pp_int32 i = reinterpret_cast(sender)->getID() - BUTTON_ENVELOPE_PREDEF_0; EnvelopeContainer* predefinedEnvelopes = NULL; switch (currentEnvelopeType) { case EnvelopeEditor::EnvelopeTypeVolume: predefinedEnvelopes = predefinedVolumeEnvelopes; break; case EnvelopeEditor::EnvelopeTypePanning: predefinedEnvelopes = predefinedPanningEnvelopes; break; default: ASSERT(false); } if (storeEnvelope) { const TEnvelope* env = envelopeEditorControl->getEnvelope(); predefinedEnvelopes->store(i, *env); storeEnvelope = !storeEnvelope; PPButton* button = static_cast(containerEnvelopes->getControlByID(BUTTON_ENVELOPE_PREDEF_STORE)); button->setPressed(storeEnvelope); } else { const TEnvelope* env = predefinedEnvelopes->restore(i); getEnvelopeEditor()->pasteOther(*env); } update(); break; } case BUTTON_ENVELOPE_PREDEF_STORE: { if (event->getID() != eCommand) break; storeEnvelope = !storeEnvelope; PPButton* button = reinterpret_cast(sender); button->setPressed(storeEnvelope); screen->paintControl(button); break; } case BUTTON_ENVELOPE_VOLUME: if (event->getID() != eCommand) break; currentEnvelopeType = EnvelopeEditor::EnvelopeTypeVolume; getEnvelopeEditor()->setEnvelopeType(EnvelopeEditor::EnvelopeTypeVolume); update(); break; case BUTTON_ENVELOPE_PANNING: if (event->getID() != eCommand) break; currentEnvelopeType = EnvelopeEditor::EnvelopeTypePanning; getEnvelopeEditor()->setEnvelopeType(EnvelopeEditor::EnvelopeTypePanning); update(); break; case CHECKBOX_ENVELOPE_ON: if (event->getID() != eCommand) break; getEnvelopeEditor()->enableEnvelope(reinterpret_cast(sender)->isChecked()); update(); break; case CHECKBOX_ENVELOPE_SUSTAIN: if (event->getID() != eCommand) break; getEnvelopeEditor()->enableSustain(reinterpret_cast(sender)->isChecked()); update(); break; case CHECKBOX_ENVELOPE_LOOP: if (event->getID() != eCommand) break; getEnvelopeEditor()->enableLoop(reinterpret_cast(sender)->isChecked()); update(); break; case BUTTON_ENVELOPE_UNDO: getEnvelopeEditor()->undo(); break; case BUTTON_ENVELOPE_REDO: getEnvelopeEditor()->redo(); break; case BUTTON_ENVELOPE_COPY: getEnvelopeEditor()->makeCopy(); update(); break; case BUTTON_ENVELOPE_PASTE: getEnvelopeEditor()->pasteCopy(); update(); break; case BUTTON_ENVELOPE_ADD: getEnvelopeEditor()->addPoint(); update(); break; case BUTTON_ENVELOPE_DELETE: getEnvelopeEditor()->deletePoint(); update(); break; case BUTTON_ENVELOPE_SUSTAIN_PLUS: getEnvelopeEditor()->selectNextSustainPoint(); update(); break; case BUTTON_ENVELOPE_SUSTAIN_MINUS: getEnvelopeEditor()->selectPreviousSustainPoint(); update(); break; case BUTTON_ENVELOPE_LOOPSTART_PLUS: getEnvelopeEditor()->selectNextLoopStartPoint(); update(); break; case BUTTON_ENVELOPE_LOOPSTART_MINUS: getEnvelopeEditor()->selectPreviousLoopStartPoint(); update(); break; case BUTTON_ENVELOPE_LOOPEND_PLUS: getEnvelopeEditor()->selectNextLoopEndPoint(); update(); break; case BUTTON_ENVELOPE_LOOPEND_MINUS: getEnvelopeEditor()->selectPreviousLoopEndPoint(); update(); break; case BUTTON_ENVELOPE_ZOOMIN: envelopeEditorControl->setScale(envelopeEditorControl->getScale() >> 1); update(); break; case BUTTON_ENVELOPE_ZOOMOUT: envelopeEditorControl->setScale(envelopeEditorControl->getScale() << 1); update(); break; case BUTTON_ENVELOPE_SCALEX: if (event->getID() != eCommand) break; envelopeEditorControl->invokeToolParameterDialog(EnvelopeEditorControl::EnvelopeToolTypeScaleX); break; case BUTTON_ENVELOPE_SCALEY: if (event->getID() != eCommand) break; envelopeEditorControl->invokeToolParameterDialog(EnvelopeEditorControl::EnvelopeToolTypeScaleY); break; case BUTTON_SAMPLE_RELNOTENUM_OCTUP: { tracker.getSampleEditor()->increaseRelNoteNum(12); update(); break; } case BUTTON_SAMPLE_RELNOTENUM_OCTDN: { tracker.getSampleEditor()->increaseRelNoteNum(-12); update(); break; } case BUTTON_SAMPLE_RELNOTENUM_NOTEUP: { tracker.getSampleEditor()->increaseRelNoteNum(1); update(); break; } case BUTTON_SAMPLE_RELNOTENUM_NOTEDN: { tracker.getSampleEditor()->increaseRelNoteNum(-1); update(); break; } case BUTTON_PIANO_EDIT: if (event->getID() != eCommand) break; getPianoControl()->setMode(PianoControl::ModeEdit); update(); break; case BUTTON_PIANO_PLAY: if (event->getID() != eCommand) break; getPianoControl()->setMode(PianoControl::ModePlay); update(); break; case BUTTON_SAMPLE_PLAY_STOP: tracker.playerController->stopInstrument(tracker.listBoxInstruments->getSelectedIndex()+1); //tracker.stopSong(); break; case BUTTON_INSTRUMENTEDITOR_CLEAR: if (event->getID() != eCommand) break; handleZapInstrument(); break; // load instrument case BUTTON_INSTRUMENTEDITOR_LOAD: { if (event->getID() != eCommand) break; tracker.loadType(FileTypes::FileTypeSongAllInstruments); break; } // save instrument case BUTTON_INSTRUMENTEDITOR_SAVE: { if (event->getID() != eCommand) break; tracker.saveType(FileTypes::FileTypeInstrumentXI); break; } // test instrument chooser case BUTTON_INSTRUMENTEDITOR_COPY: { if (event->getID() != eCommand) break; sprintf(buffer, "Copy ins. %x to %x", tracker.listBoxInstruments->getSelectedIndex()+1, 1); sprintf(buffer2, "Copy smp. %x to %x", tracker.listBoxSamples->getSelectedIndex(), 0); tracker.initInstrumentChooser(INSTRUMENT_CHOOSER_COPY, "Copy ins", "Copy smp", "Copy instrument/sample" PPSTR_PERIODS, buffer, buffer2, tracker.listBoxInstruments->getSelectedIndex(), tracker.listBoxSamples->getSelectedIndex(), tracker.tabManager->getSelectedTabIndex()); screen->setModalControl(tracker.instrumentChooser); break; } // test instrument chooser case BUTTON_INSTRUMENTEDITOR_SWAP: { if (event->getID() != eCommand) break; sprintf(buffer, "Swap ins. %x with %x", tracker.listBoxInstruments->getSelectedIndex()+1, 1); sprintf(buffer2, "Swap smp. %x with %x", tracker.listBoxSamples->getSelectedIndex(), 0); tracker.initInstrumentChooser(INSTRUMENT_CHOOSER_SWAP, "Swap ins", "Swap smp", "Swap instrument/sample" PPSTR_PERIODS, buffer, buffer2, tracker.listBoxInstruments->getSelectedIndex(), tracker.listBoxSamples->getSelectedIndex(), tracker.tabManager->getSelectedTabIndex()); screen->setModalControl(tracker.instrumentChooser); break; } } } else if (event->getID() == eSelection) { switch (reinterpret_cast(sender)->getID()) { case RADIOGROUP_SAMPLE_VIBTYPE: { tracker.setChanged(); ins = moduleEditor->getInstrumentInfo(tracker.listBoxInstruments->getSelectedIndex()); ins->vibtype = (pp_uint8)(reinterpret_cast(sender)->getChoice()); moduleEditor->updateInstrumentData(tracker.listBoxInstruments->getSelectedIndex()); updateInstrumentSliders(true); break; } case PIANO_CONTROL: { pp_int32 v = *((pp_int32*)event->getDataPtr()); tracker.inputControlListener->sendNote(v); break; } } } else if (event->getID() == eValueChanged) { switch (reinterpret_cast(sender)->getID()) { case SLIDER_SAMPLE_VOLUME: { tracker.getSampleEditor()->setFT2Volume(reinterpret_cast(sender)->getCurrentValue()); updateSampleSliders(); break; } case SLIDER_SAMPLE_PANNING: { tracker.getSampleEditor()->setPanning(reinterpret_cast(sender)->getCurrentValue()); updateSampleSliders(); break; } case SLIDER_SAMPLE_FINETUNE: { tracker.getSampleEditor()->setFinetune(reinterpret_cast(sender)->getCurrentValue()-128); updateSampleSliders(); break; } case SLIDER_SAMPLE_VOLFADE: { tracker.setChanged(); ins = moduleEditor->getInstrumentInfo(tracker.listBoxInstruments->getSelectedIndex()); ins->volfade = (pp_uint16)(reinterpret_cast(sender)->getCurrentValue()); if (ins->volfade == 0x1000) ins->volfade = 32767; moduleEditor->updateInstrumentData(tracker.listBoxInstruments->getSelectedIndex()); updateInstrumentSliders(); break; } case SLIDER_SAMPLE_VIBSPEED: { tracker.setChanged(); ins = moduleEditor->getInstrumentInfo(tracker.listBoxInstruments->getSelectedIndex()); ins->vibrate = (pp_uint8)(reinterpret_cast(sender)->getCurrentValue()); moduleEditor->updateInstrumentData(tracker.listBoxInstruments->getSelectedIndex()); updateInstrumentSliders(); break; } case SLIDER_SAMPLE_VIBDEPTH: { tracker.setChanged(); ins = moduleEditor->getInstrumentInfo(tracker.listBoxInstruments->getSelectedIndex()); ins->vibdepth = (pp_uint8)(reinterpret_cast(sender)->getCurrentValue()); moduleEditor->updateInstrumentData(tracker.listBoxInstruments->getSelectedIndex()); updateInstrumentSliders(); break; } case SLIDER_SAMPLE_VIBSWEEP: { tracker.setChanged(); ins = moduleEditor->getInstrumentInfo(tracker.listBoxInstruments->getSelectedIndex()); ins->vibsweep = (pp_uint8)(reinterpret_cast(sender)->getCurrentValue()); moduleEditor->updateInstrumentData(tracker.listBoxInstruments->getSelectedIndex()); updateInstrumentSliders(); break; } // sample table has been updated case PIANO_CONTROL: { tracker.setChanged(); pp_int32 i = tracker.listBoxInstruments->getSelectedIndex(); moduleEditor->updateSampleTable(i, *(reinterpret_cast(event->getDataPtr()))); break; } } } else if (event->getID() == eUpdated) { switch (reinterpret_cast(sender)->getID()) { case CONTAINER_ENVELOPES: { updateEnvelopeEditor(true, false); break; } } } return 0; } void SectionInstruments::init() { init(0, tracker.MAXEDITORHEIGHT()-tracker.INSTRUMENTSECTIONDEFAULTHEIGHT()); } void SectionInstruments::init(pp_int32 x, pp_int32 y) { PPScreen* screen = tracker.screen; containerEntire = new PPTransparentContainer(CONTAINER_ENTIREINSSECTION, screen, this, PPPoint(0, 0), PPSize(screen->getWidth(), screen->getHeight())); #ifndef __LOWRES__ // envelope stuff pp_int32 w4 = 165; pp_int32 w3 = 39; pp_int32 w2 = w4+w3; pp_int32 w = screen->getWidth() - w2; containerEnvelopes = new PPContainer(CONTAINER_ENVELOPES, screen, this, PPPoint(x, y), PPSize(w,135+4+3), false); containerEntire->addControl(containerEnvelopes); containerEnvelopes->setColor(TrackerConfig::colorThemeMain); envelopeEditorControl = new EnvelopeEditorControl(CONTAINER_ENVELOPES, screen, this, PPPoint(x + 2, y + 2 + 10), PPSize(containerEnvelopes->getSize().width-96,containerEnvelopes->getSize().height-17)); envelopeEditorControl->attachEnvelopeEditor(tracker.getEnvelopeEditor()); envelopeEditorControl->setBorderColor(TrackerConfig::colorThemeMain); pp_int32 scale = 256*screen->getWidth() / 800; envelopeEditorControl->setxMax(scale); //envelopeEditor->attachEnvelope(moduleEditor->getVolumeEnvelope(0,0)); containerEnvelopes->addControl(envelopeEditorControl); PPButton* button = new PPButton(BUTTON_ENVELOPE_VOLUME, screen, this, PPPoint(x + 2, y + 1), PPSize(64, 11), false, true, false); button->setColor(TrackerConfig::colorThemeMain); button->setTextColor(PPUIConfig::getInstance()->getColor(PPUIConfig::ColorStaticText)); button->setText("Volume"); containerEnvelopes->addControl(button); button = new PPButton(BUTTON_ENVELOPE_PANNING, screen, this, PPPoint(x + 2 + 64, y + 1), PPSize(64, 11), false, true, false); button->setColor(TrackerConfig::colorThemeMain); button->setTextColor(PPUIConfig::getInstance()->getColor(PPUIConfig::ColorStaticText)); button->setText("Panning"); containerEnvelopes->addControl(button); pp_int32 px = button->getLocation().x + button->getSize().width + (screen->getWidth() < 800 ? 6 : 32); PPStaticText* staticText = new PPStaticText(0, NULL, NULL, PPPoint(px, y + 3), "Predef.", true); containerEnvelopes->addControl(staticText); px+=button->getSize().width; // pre-defined envelopes for (pp_int32 i = 0; i < TrackerConfig::numPredefinedEnvelopes; i++) { button = new PPButton(BUTTON_ENVELOPE_PREDEF_0+i, screen, this, PPPoint(px, y + 2), PPSize(9, 9)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText((char)('0'+i)); containerEnvelopes->addControl(button); px+=button->getSize().width+1; } px+=2; button = new PPButton(BUTTON_ENVELOPE_PREDEF_STORE, screen, this, PPPoint(px, y + 2), PPSize(5*6, 9), true, true, false); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Store"); containerEnvelopes->addControl(button); if (screen->getWidth() >= 800) { button = new PPButton(BUTTON_ENVELOPE_UNDO, screen, this, PPPoint(x + envelopeEditorControl->getSize().width-115, y + 2), PPSize(26, 9)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Undo"); containerEnvelopes->addControl(button); button = new PPButton(BUTTON_ENVELOPE_REDO, screen, this, PPPoint(x + envelopeEditorControl->getSize().width-88, y + 2), PPSize(26, 9)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Redo"); containerEnvelopes->addControl(button); button = new PPButton(BUTTON_ENVELOPE_COPY, screen, this, PPPoint(x + envelopeEditorControl->getSize().width-59, y + 2), PPSize(26, 9)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Copy"); containerEnvelopes->addControl(button); button = new PPButton(BUTTON_ENVELOPE_PASTE, screen, this, PPPoint(x + envelopeEditorControl->getSize().width-32, y + 2), PPSize(26, 9)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Paste"); containerEnvelopes->addControl(button); } pp_int32 y4 = y+2; button = new PPButton(BUTTON_ENVELOPE_ADD, screen, this, PPPoint(x + envelopeEditorControl->getSize().width + 8, y4 + 2), PPSize(40, 11)); button->setText("Add"); containerEnvelopes->addControl(button); button = new PPButton(BUTTON_ENVELOPE_DELETE, screen, this, PPPoint(x + envelopeEditorControl->getSize().width + 8 + 41, y4 + 2), PPSize(40, 11)); button->setText("Del"); containerEnvelopes->addControl(button); y4+=18; PPCheckBox* checkBox = new PPCheckBox(CHECKBOX_ENVELOPE_ON, screen, this, PPPoint(x + envelopeEditorControl->getSize().width + 4, y4 + 2)); containerEnvelopes->addControl(checkBox); containerEnvelopes->addControl(new PPCheckBoxLabel(0, NULL, this, PPPoint(x + envelopeEditorControl->getSize().width + 4 + 13, y4 + 3), "On", checkBox, true)); // sustain checkBox = new PPCheckBox(CHECKBOX_ENVELOPE_SUSTAIN, screen, this, PPPoint(x + envelopeEditorControl->getSize().width + 4, y4 + 2 + 18)); containerEnvelopes->addControl(checkBox); containerEnvelopes->addControl(new PPCheckBoxLabel(0, NULL, this, PPPoint(x + envelopeEditorControl->getSize().width + 4 + 13, y4 + 2 + 18 + 1), "Sustain:", checkBox, true)); containerEnvelopes->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x + envelopeEditorControl->getSize().width + 4, y4 + 2 + 18+1 + 12), "Point", true)); // sustain point field containerEnvelopes->addControl(new PPStaticText(STATICTEXT_ENVELOPE_SUSTAINPT, screen, this, PPPoint(x + envelopeEditorControl->getSize().width + 4 + 6*8, y4 + 2 + 18+1 + 12), "00", false)); button = new PPButton(BUTTON_ENVELOPE_SUSTAIN_PLUS, screen, this, PPPoint(x + envelopeEditorControl->getSize().width + 4 + 28 + 40, y4 + 2 + 18+1 + 11), PPSize(10, 9)); button->setText(TrackerConfig::stringButtonPlus); containerEnvelopes->addControl(button); button = new PPButton(BUTTON_ENVELOPE_SUSTAIN_MINUS, screen, this, PPPoint(x + envelopeEditorControl->getSize().width + 4 + 28 + 40 + 11, y4 + 2 + 18+1 + 11), PPSize(10, 9)); button->setText(TrackerConfig::stringButtonMinus); containerEnvelopes->addControl(button); // loop checkBox = new PPCheckBox(CHECKBOX_ENVELOPE_LOOP, screen, this, PPPoint(x + envelopeEditorControl->getSize().width + 4, y4 + 2 + 18 * 2 + 9)); containerEnvelopes->addControl(checkBox); containerEnvelopes->addControl(new PPCheckBoxLabel(0, NULL, this, PPPoint(x + envelopeEditorControl->getSize().width + 4 + 13, y4 + 2 + 18*2 + 10), "Loop:", checkBox, true)); containerEnvelopes->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x + envelopeEditorControl->getSize().width + 4, y4 + 2 + 18*2 + 10 + 12), "Start", true)); // loop start point field containerEnvelopes->addControl(new PPStaticText(STATICTEXT_ENVELOPE_LOOPSTARTPT, screen, this, PPPoint(x + envelopeEditorControl->getSize().width + 4 + 6*8, y4 + 2 + 18*2 + 10 + 12), "00", false)); button = new PPButton(BUTTON_ENVELOPE_LOOPSTART_PLUS, screen, this, PPPoint(x + envelopeEditorControl->getSize().width + 4 + 28 + 40, y4 + 2 + 18*2 + 10 + 11), PPSize(10, 9)); button->setText(TrackerConfig::stringButtonPlus); containerEnvelopes->addControl(button); button = new PPButton(BUTTON_ENVELOPE_LOOPSTART_MINUS, screen, this, PPPoint(x + envelopeEditorControl->getSize().width + 4 + 28 + 40 + 11, y4 + 2 + 18*2 + 10 + 11), PPSize(10, 9)); button->setText(TrackerConfig::stringButtonMinus); containerEnvelopes->addControl(button); containerEnvelopes->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x + envelopeEditorControl->getSize().width + 4, y4 + 2 + 18*2 + 10 + 12 + 10), "End", true)); // loop end point field containerEnvelopes->addControl(new PPStaticText(STATICTEXT_ENVELOPE_LOOPENDPT, screen, this, PPPoint(x + envelopeEditorControl->getSize().width + 4 + 6*8, y4 + 2 + 18*2 + 10 + 12 + 10), "00", false)); button = new PPButton(BUTTON_ENVELOPE_LOOPEND_PLUS, screen, this, PPPoint(x + envelopeEditorControl->getSize().width + 4 + 28 + 40, y4 + 2 + 18*2 + 10 + 12 + 9), PPSize(10, 9)); button->setText(TrackerConfig::stringButtonPlus); containerEnvelopes->addControl(button); button = new PPButton(BUTTON_ENVELOPE_LOOPEND_MINUS, screen, this, PPPoint(x + envelopeEditorControl->getSize().width + 4 + 28 + 40 + 11, y4 + 2 + 18*2 + 10 + 12 + 9), PPSize(10, 9)); button->setText(TrackerConfig::stringButtonMinus); containerEnvelopes->addControl(button); pp_int32 ty = button->getLocation().y + button->getSize().height + 5; pp_int32 tx = x + envelopeEditorControl->getSize().width + 4; containerEnvelopes->addControl(new PPSeperator(0, screen, PPPoint(tx-2, ty), 8*5*2+8+4, containerEnvelopes->getColor(), true)); ty+=4; button = new PPButton(BUTTON_ENVELOPE_SCALEX, screen, this, PPPoint(tx+3, ty), PPSize(8*5+1, 13)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Scale X"); containerEnvelopes->addControl(button); tx+=button->getSize().width+1; button = new PPButton(BUTTON_ENVELOPE_SCALEY, screen, this, PPPoint(tx+3, ty), PPSize(8*5+2, 13)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Scale Y"); containerEnvelopes->addControl(button); ty+=button->getSize().height+2; tx = x + envelopeEditorControl->getSize().width + 4; containerEnvelopes->addControl(new PPSeperator(0, screen, PPPoint(tx-2, ty), 8*5*2+8+4, containerEnvelopes->getColor(), true)); ty+=5; button = new PPButton(BUTTON_ENVELOPE_ZOOMIN, screen, this, PPPoint(tx+3, ty), PPSize(8*5+1, 10)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Zoom in"); containerEnvelopes->addControl(button); tx+=button->getSize().width+1; button = new PPButton(BUTTON_ENVELOPE_ZOOMOUT, screen, this, PPPoint(tx+3, ty), PPSize(8*5+2, 10)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Zoom out"); containerEnvelopes->addControl(button); // ----------------- instrument info ----------------- //y+=containerEnvelopes->getSize().height; x+=containerEnvelopes->getSize().width; PPContainer* container = new PPContainer(CONTAINER_INSTRUMENTS_INFO1, screen, this, PPPoint(x, y), PPSize(w4,34+4), false); containerEntire->addControl(container); containerSampleSlider = container; container->setColor(TrackerConfig::colorThemeMain); container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x + 4, y + 4), "Volume", true)); container->addControl(new PPStaticText(STATICTEXT_SAMPLE_VOLUME, screen, this, PPPoint(x + 4 + 8*9, y + 4), "FF", false)); //PPSlider* slider = new PPSlider(SLIDER_SAMPLE_VOLUME, screen, this, PPPoint(x + 4 + 8*7+2, y + 2), 51, true); PPSlider* slider = new PPSlider(SLIDER_SAMPLE_VOLUME, screen, this, PPPoint(x + 4 + 8*11+2, y + 2), 68, true); slider->setMaxValue(64); slider->setBarSize(16384); container->addControl(slider); container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x + 4, y + 4 + 12), "Panning", true)); container->addControl(new PPStaticText(STATICTEXT_SAMPLE_PANNING, screen, this, PPPoint(x + 4 + 8*9, y + 4 + 12), "FF", false)); slider = new PPSlider(SLIDER_SAMPLE_PANNING, screen, this, PPPoint(x + 4 + 8*11+2, y + 2 + 12), 68, true); slider->setBarSize(16384); container->addControl(slider); container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x + 4, y + 4 + 24), "F.tune", true)); container->addControl(new PPStaticText(STATICTEXT_SAMPLE_FINETUNE, screen, this, PPPoint(x + 4 + 8*7, y + 4 + 24), "-128", false)); slider = new PPSlider(SLIDER_SAMPLE_FINETUNE, screen, this, PPPoint(x + 4 + 8*11+2, y + 2 + 24), 68, true); slider->setBarSize(16384); container->addControl(slider); pp_int32 height = container->getSize().height; // exit 'n stuff y4=y; pp_int32 nx = x + container->getSize().width; container = new PPContainer(CONTAINER_INSTRUMENTS_INFO4, screen, this, PPPoint(nx, y), PPSize(w3,38), false); containerEntire->addControl(container); container->setColor(TrackerConfig::colorThemeMain); button = new PPButton(BUTTON_INSTRUMENTEDITOR_EXIT, screen, &tracker, PPPoint(nx + 2, y + 2), PPSize(34, 34)); button->setText("Exit"); container->addControl(button); // load & save y+=container->getSize().height; container = new PPContainer(CONTAINER_INSTRUMENTS_INFO5, screen, this, PPPoint(nx, y), PPSize(w3,39), false); containerEntire->addControl(container); container->setColor(TrackerConfig::colorThemeMain); button = new PPButton(BUTTON_INSTRUMENTEDITOR_CLEAR, screen, this, PPPoint(nx + 2, y + 2), PPSize(34, 11)); button->setText("Zap"); container->addControl(button); button = new PPButton(BUTTON_INSTRUMENTEDITOR_LOAD, screen, this, PPPoint(nx + 2, y + 2+12), PPSize(34, 11)); button->setText("Load"); container->addControl(button); button = new PPButton(BUTTON_INSTRUMENTEDITOR_SAVE, screen, this, PPPoint(nx + 2, y + 2+12*2), PPSize(34, 11)); button->setText("Save"); container->addControl(button); // copy & paste y+=container->getSize().height; container = new PPContainer(CONTAINER_INSTRUMENTS_INFO6, screen, this, PPPoint(nx, y), PPSize(w3,27), false); containerEntire->addControl(container); container->setColor(TrackerConfig::colorThemeMain); button = new PPButton(BUTTON_INSTRUMENTEDITOR_COPY, screen, this, PPPoint(nx + 2, y + 2), PPSize(34, 11)); //button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Copy"); container->addControl(button); button = new PPButton(BUTTON_INSTRUMENTEDITOR_SWAP, screen, this, PPPoint(nx + 2, y + 2+12), PPSize(34, 11)); //button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Swap"); container->addControl(button); y+=container->getSize().height; y = y4; // autovibrato etc. y+=height; container = new PPContainer(CONTAINER_INSTRUMENTS_INFO3, screen, this, PPPoint(x, y), PPSize(w4,66), false); containerEntire->addControl(container); containerInstrumentSlider = container; container->setColor(TrackerConfig::colorThemeMain); container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x + 4, y + 4), "Fadeout", true)); container->addControl(new PPStaticText(STATICTEXT_SAMPLE_VOLFADE, screen, this, PPPoint(x + 4 + 8*8, y + 4), "FFF", false)); slider = new PPSlider(SLIDER_SAMPLE_VOLFADE, screen, this, PPPoint(x + 4 + 8*11+2, y + 2), 68, true); slider->setMaxValue(0x1000); slider->setBarSize(16384); container->addControl(slider); container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x + 4, y + 4 + 12), "Vibspeed", true)); container->addControl(new PPStaticText(STATICTEXT_SAMPLE_VIBSPEED, screen, this, PPPoint(x + 4 + 8*9, y + 4 + 12), "FF", false)); slider = new PPSlider(SLIDER_SAMPLE_VIBSPEED, screen, this, PPPoint(x + 4 + 8*11+2, y + 2 + 12), 68, true); slider->setBarSize(16384); container->addControl(slider); container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x + 4, y + 4 + 12*2), "Vibdepth", true)); container->addControl(new PPStaticText(STATICTEXT_SAMPLE_VIBDEPTH, screen, this, PPPoint(x + 4 + 8*10, y + 4 + 12*2), "F", false)); slider = new PPSlider(SLIDER_SAMPLE_VIBDEPTH, screen, this, PPPoint(x + 4 + 8*11+2, y + 2 + 12*2), 68, true); slider->setMaxValue(0xf); slider->setBarSize(16384); container->addControl(slider); container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x + 4, y + 4 + 12*3), "Vibsweep", true)); container->addControl(new PPStaticText(STATICTEXT_SAMPLE_VIBSWEEP, screen, this, PPPoint(x + 4 + 8*9, y + 4 + 12*3), "FF", false)); slider = new PPSlider(SLIDER_SAMPLE_VIBSWEEP, screen, this, PPPoint(x + 4 + 8*11+2, y + 2 + 12*3), 68, true); slider->setBarSize(16384); container->addControl(slider); container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x + 4, y + 4 + 12*4), "Type:", true)); PPRadioGroup* radioGroup = new PPRadioGroup(RADIOGROUP_SAMPLE_VIBTYPE, screen, this, PPPoint(x + 2 + 5*8, y + 4 + 12*3 + 8), PPSize(w4, 20)); radioGroup->setColor(TrackerConfig::colorThemeMain); radioGroup->setHorizontal(true); radioGroup->addItem("\xfc\xfb"); radioGroup->addItem("\xfa\xf9"); radioGroup->addItem("\xf8\xf7"); radioGroup->addItem("\xf6\xf5"); container->addControl(radioGroup); height = container->getSize().height; // relative note container = new PPContainer(CONTAINER_INSTRUMENTS_INFO2, screen, this, PPPoint(x, y+height), PPSize(w4+39,36+2), false); containerEntire->addControl(container); container->setColor(TrackerConfig::colorThemeMain); y+=height; container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x + 4, y + 2), "Relative note:", true)); container->addControl(new PPStaticText(STATICTEXT_SAMPLE_RELNOTE, screen, this, PPPoint(x + 4 + 15*8 - 4, y + 2), "C-4", false)); button = new PPButton(BUTTON_SAMPLE_RELNOTENUM_OCTUP, screen, this, PPPoint(x + 4, y + 1 + 12), PPSize(78+19, 11)); button->setText("Octave up"); container->addControl(button); button = new PPButton(BUTTON_SAMPLE_RELNOTENUM_NOTEUP, screen, this, PPPoint(x + 4 + 79+19, y + 1 + 12), PPSize(78+19, 11)); button->setText("Note up"); container->addControl(button); button = new PPButton(BUTTON_SAMPLE_RELNOTENUM_OCTDN, screen, this, PPPoint(x + 4, y + 1 + 12 + 12), PPSize(78+19, 11)); button->setText("Octave dn"); container->addControl(button); button = new PPButton(BUTTON_SAMPLE_RELNOTENUM_NOTEDN, screen, this, PPPoint(x + 4 + 79+19, y + 1 + 24), PPSize(78+19, 11)); button->setText("Note dn"); container->addControl(button); // piano y+=container->getSize().height; PPContainer* pianoContainer = new PPContainer(CONTAINER_PIANO, screen, this, PPPoint(0, y), PPSize(screen->getWidth(),25*2+SCROLLBUTTONSIZE+4), false); containerEntire->addControl(pianoContainer); pianoContainer->setColor(TrackerConfig::colorThemeMain); // piano test pp_int32 pianoWidth = screen->getWidth()-2-40; if (pianoWidth > 898) pianoWidth = 898; pp_int32 dx = 0; pianoControl = new PianoControl(PIANO_CONTROL, screen, this, PPPoint(1+40+dx, y+1), PPSize(pianoWidth, 25*2+12), ModuleEditor::MAX_NOTE); // show C-2 pianoControl->assureNoteVisible(12*2); pianoControl->setBorderColor(TrackerConfig::colorThemeMain); pianoContainer->addControl(pianoControl); button = new PPButton(BUTTON_PIANO_PLAY, screen, this, PPPoint(1, y+1), PPSize(38+dx, 20), false, true, false); button->setColor(TrackerConfig::colorThemeMain); button->setTextColor(PPUIConfig::getInstance()->getColor(PPUIConfig::ColorStaticText)); button->setText("Play"); pianoContainer->addControl(button); button = new PPButton(BUTTON_PIANO_EDIT, screen, this, PPPoint(1, y+1+20), PPSize(38+dx, 20), false, true, false); button->setColor(TrackerConfig::colorThemeMain); button->setTextColor(PPUIConfig::getInstance()->getColor(PPUIConfig::ColorStaticText)); button->setText("Edit"); pianoContainer->addControl(button); button = new PPButton(BUTTON_SAMPLE_PLAY_STOP, screen, this, PPPoint(2, y+1+2*20), PPSize(36+dx, 20)); button->setText("Stop"); pianoContainer->addControl(button); #else // envelope stuff containerEnvelopes = new PPContainer(CONTAINER_ENVELOPES, screen, this, PPPoint(x, y), PPSize(320,69+4), false); containerEntire->addControl(containerEnvelopes); containerEnvelopes->setColor(TrackerConfig::colorThemeMain); envelopeEditorControl = new EnvelopeEditorControl(CONTAINER_ENVELOPES, screen, this, PPPoint(x + 2, y + 2 + 10), PPSize(224,59)); envelopeEditorControl->attachEnvelopeEditor(tracker.getEnvelopeEditor()); envelopeEditorControl->setBorderColor(TrackerConfig::colorThemeMain); containerEnvelopes->addControl(envelopeEditorControl); PPButton* button = new PPButton(BUTTON_ENVELOPE_VOLUME, screen, this, PPPoint(x + 2, y + 1), PPSize(32, 11), false, true, false); button->setColor(TrackerConfig::colorThemeMain); button->setTextColor(PPUIConfig::getInstance()->getColor(PPUIConfig::ColorStaticText)); button->setText("Vol"); containerEnvelopes->addControl(button); button = new PPButton(BUTTON_ENVELOPE_PANNING, screen, this, PPPoint(x + 2 + 32, y + 1), PPSize(32, 11), false, true, false); button->setColor(TrackerConfig::colorThemeMain); button->setTextColor(PPUIConfig::getInstance()->getColor(PPUIConfig::ColorStaticText)); button->setText("Pan"); containerEnvelopes->addControl(button); containerEnvelopes->addControl(new PPCheckBox(CHECKBOX_ENVELOPE_ON, screen, this, PPPoint(x + 224 + 4, y + 2))); containerEnvelopes->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x + 224 + 4 + 13, y + 3), "On", true)); button = new PPButton(BUTTON_ENVELOPE_UNDO, screen, this, PPPoint(button->getLocation().x + button->getSize().width+4, y + 2), PPSize(22, 9)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Undo"); containerEnvelopes->addControl(button); button = new PPButton(BUTTON_ENVELOPE_REDO, screen, this, PPPoint(button->getLocation().x + button->getSize().width+1, y + 2), PPSize(22, 9)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Redo"); containerEnvelopes->addControl(button); button = new PPButton(BUTTON_ENVELOPE_COPY, screen, this, PPPoint(button->getLocation().x + button->getSize().width+1, y + 2), PPSize(22, 9)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Copy"); containerEnvelopes->addControl(button); button = new PPButton(BUTTON_ENVELOPE_PASTE, screen, this, PPPoint(button->getLocation().x + button->getSize().width+1, y + 2), PPSize(27, 9)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Paste"); containerEnvelopes->addControl(button); PPStaticText* statict = new PPStaticText(0, NULL, NULL, PPPoint(button->getLocation().x + button->getSize().width+3, y + 4), "Zoom", true); statict->setFont(PPFont::getFont(PPFont::FONT_TINY)); statict->setColor(PPUIConfig::getInstance()->getColor(PPUIConfig::ColorStaticText)); containerEnvelopes->addControl(statict); button = new PPButton(BUTTON_ENVELOPE_ZOOMIN, screen, this, PPPoint(statict->getLocation().x + 5*5, y + 2), PPSize(12, 9)); button->setText(TrackerConfig::stringButtonPlus); containerEnvelopes->addControl(button); button = new PPButton(BUTTON_ENVELOPE_ZOOMOUT, screen, this, PPPoint(button->getLocation().x + button->getSize().width+1, y + 2), PPSize(12, 9)); button->setText(TrackerConfig::stringButtonMinus); containerEnvelopes->addControl(button); button = new PPButton(BUTTON_ENVELOPE_ADD, screen, this, PPPoint(x + 224 + 36, y + 2), PPSize(28, 11)); button->setText("Add"); containerEnvelopes->addControl(button); button = new PPButton(BUTTON_ENVELOPE_DELETE, screen, this, PPPoint(x + 224 + 4 + 61, y + 2), PPSize(28, 11)); button->setText("Del"); containerEnvelopes->addControl(button); // sustain containerEnvelopes->addControl(new PPCheckBox(CHECKBOX_ENVELOPE_SUSTAIN, screen, this, PPPoint(x + 224 + 4, y + 2 + 14))); containerEnvelopes->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x + 224 + 4 + 13, y + 2 + 15), "Sustain:", true)); containerEnvelopes->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x + 224 + 4, y + 2 + 15 + 12), "Point", true)); // sustain point field containerEnvelopes->addControl(new PPStaticText(STATICTEXT_ENVELOPE_SUSTAINPT, screen, this, PPPoint(x + 224 + 4 + 6*8, y + 2 + 15 + 12), "00", false)); button = new PPButton(BUTTON_ENVELOPE_SUSTAIN_PLUS, screen, this, PPPoint(x + 224 + 4 + 28 + 40, y + 2 + 15 + 11), PPSize(10, 9)); button->setText(TrackerConfig::stringButtonPlus); containerEnvelopes->addControl(button); button = new PPButton(BUTTON_ENVELOPE_SUSTAIN_MINUS, screen, this, PPPoint(x + 224 + 4 + 28 + 40 + 11, y + 2 + 15 + 11), PPSize(10, 9)); button->setText(TrackerConfig::stringButtonMinus); containerEnvelopes->addControl(button); // loop containerEnvelopes->addControl(new PPCheckBox(CHECKBOX_ENVELOPE_LOOP, screen, this, PPPoint(x + 224 + 4, y + 2 + 14*2 + 9))); containerEnvelopes->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x + 224 + 4 + 13, y + 2 + 14*2 + 10), "Loop:", true)); containerEnvelopes->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x + 224 + 4, y + 2 + 14*2 + 10 + 12), "Start", true)); // loop start point field containerEnvelopes->addControl(new PPStaticText(STATICTEXT_ENVELOPE_LOOPSTARTPT, screen, this, PPPoint(x + 224 + 4 + 6*8, y + 2 + 14*2 + 10 + 12), "00", false)); button = new PPButton(BUTTON_ENVELOPE_LOOPSTART_PLUS, screen, this, PPPoint(x + 224 + 4 + 28 + 40, y + 2 + 14*2 + 10 + 11), PPSize(10, 9)); button->setText(TrackerConfig::stringButtonPlus); containerEnvelopes->addControl(button); button = new PPButton(BUTTON_ENVELOPE_LOOPSTART_MINUS, screen, this, PPPoint(x + 224 + 4 + 28 + 40 + 11, y + 2 + 14*2 + 10 + 11), PPSize(10, 9)); button->setText(TrackerConfig::stringButtonMinus); containerEnvelopes->addControl(button); containerEnvelopes->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x + 224 + 4, y + 2 + 14*2 + 10 + 12 + 10), "End", true)); // loop end point field containerEnvelopes->addControl(new PPStaticText(STATICTEXT_ENVELOPE_LOOPENDPT, screen, this, PPPoint(x + 224 + 4 + 6*8, y + 2 + 14*2 + 10 + 12 + 10), "00", false)); button = new PPButton(BUTTON_ENVELOPE_LOOPEND_PLUS, screen, this, PPPoint(x + 224 + 4 + 28 + 40, y + 2 + 14*2 + 10 + 12 + 9), PPSize(10, 9)); button->setText(TrackerConfig::stringButtonPlus); containerEnvelopes->addControl(button); button = new PPButton(BUTTON_ENVELOPE_LOOPEND_MINUS, screen, this, PPPoint(x + 224 + 4 + 28 + 40 + 11, y + 2 + 14*2 + 10 + 12 + 9), PPSize(10, 9)); button->setText(TrackerConfig::stringButtonMinus); containerEnvelopes->addControl(button); // --------------- instrument info --------------- y+=containerEnvelopes->getSize().height; PPContainer* container = new PPContainer(CONTAINER_INSTRUMENTS_INFO1, screen, this, PPPoint(x, y), PPSize(116,34+4), false); containerEntire->addControl(container); containerSampleSlider = container; container->setColor(TrackerConfig::colorThemeMain); container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x + 4, y + 4), "Vol.", true)); container->addControl(new PPStaticText(STATICTEXT_SAMPLE_VOLUME, screen, this, PPPoint(x + 4 + 8*5, y + 4), "FF", false)); PPSlider* slider = new PPSlider(SLIDER_SAMPLE_VOLUME, screen, this, PPPoint(x + 4 + 8*7+2, y + 2), 51, true); slider->setMaxValue(64); slider->setBarSize(16384); container->addControl(slider); container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x + 4, y + 4 + 12), "Pan.", true)); container->addControl(new PPStaticText(STATICTEXT_SAMPLE_PANNING, screen, this, PPPoint(x + 4 + 8*5, y + 4 + 12), "FF", false)); slider = new PPSlider(SLIDER_SAMPLE_PANNING, screen, this, PPPoint(x + 4 + 8*7+2, y + 2 + 12), 51, true); slider->setBarSize(16384); container->addControl(slider); container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x + 4, y + 4 + 24), "Ft.", true)); container->addControl(new PPStaticText(STATICTEXT_SAMPLE_FINETUNE, screen, this, PPPoint(x + 4 + 8*3, y + 4 + 12*2), "-128", false)); slider = new PPSlider(SLIDER_SAMPLE_FINETUNE, screen, this, PPPoint(x + 4 + 8*7+2, y + 2 + 24), 51, true); slider->setBarSize(16384); container->addControl(slider); pp_int32 width = container->getSize().width; pp_int32 height = container->getSize().height; // relative note container = new PPContainer(CONTAINER_INSTRUMENTS_INFO2, screen, this, PPPoint(0, y + height), PPSize(116,34+4), false); containerEntire->addControl(container); container->setColor(TrackerConfig::colorThemeMain); container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x + 4, y + 4 + 37), "Rel.note:", true)); container->addControl(new PPStaticText(STATICTEXT_SAMPLE_RELNOTE, screen, this, PPPoint(x + 4 + 16*5 - 4, y + 4 + 37), "C-4", false)); button = new PPButton(BUTTON_SAMPLE_RELNOTENUM_OCTUP, screen, this, PPPoint(x + 4, y + 3 + 36 + 12), PPSize(56, 10)); button->setText("Octave up"); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); container->addControl(button); button = new PPButton(BUTTON_SAMPLE_RELNOTENUM_NOTEUP, screen, this, PPPoint(x + 4 + 55, y + 3 + 36 + 12), PPSize(54, 10)); button->setText("Note up"); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); container->addControl(button); button = new PPButton(BUTTON_SAMPLE_RELNOTENUM_OCTDN, screen, this, PPPoint(x + 4, y + 3 + 36 + 12 + 11), PPSize(56, 10)); button->setText("Octave dn"); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); container->addControl(button); button = new PPButton(BUTTON_SAMPLE_RELNOTENUM_NOTEDN, screen, this, PPPoint(x + 4 + 55, y + 3 + 36 + 23), PPSize(54, 10)); button->setText("Note dn"); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); container->addControl(button); // autovibrato etc. x+=width; const pp_int32 dy = 15; container = new PPContainer(CONTAINER_INSTRUMENTS_INFO3, screen, this, PPPoint(x, y), PPSize(165,76), false); containerEntire->addControl(container); containerInstrumentSlider = container; container->setColor(TrackerConfig::colorThemeMain); container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x + 4, y + 4), "Fadeout", true)); container->addControl(new PPStaticText(STATICTEXT_SAMPLE_VOLFADE, screen, this, PPPoint(x + 4 + 8*8, y + 4), "FFF", false)); slider = new PPSlider(SLIDER_SAMPLE_VOLFADE, screen, this, PPPoint(x + 4 + 8*11+2, y + 2), 68, true); slider->setMaxValue(0x1000); slider->setBarSize(16384); container->addControl(slider); container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x + 4, y + 4 + dy), "Vibspeed", true)); container->addControl(new PPStaticText(STATICTEXT_SAMPLE_VIBSPEED, screen, this, PPPoint(x + 4 + 8*9, y + 4 + dy), "FF", false)); slider = new PPSlider(SLIDER_SAMPLE_VIBSPEED, screen, this, PPPoint(x + 4 + 8*11+2, y + 2 + dy), 68, true); slider->setBarSize(16384); container->addControl(slider); container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x + 4, y + 4 + dy*2), "Vibdepth", true)); container->addControl(new PPStaticText(STATICTEXT_SAMPLE_VIBDEPTH, screen, this, PPPoint(x + 4 + 8*10, y + 4 + dy*2), "F", false)); slider = new PPSlider(SLIDER_SAMPLE_VIBDEPTH, screen, this, PPPoint(x + 4 + 8*11+2, y + 2 + dy*2), 68, true); slider->setMaxValue(0xf); slider->setBarSize(16384); container->addControl(slider); container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x + 4, y + 4 + dy*3), "Vibsweep", true)); container->addControl(new PPStaticText(STATICTEXT_SAMPLE_VIBSWEEP, screen, this, PPPoint(x + 4 + 8*9, y + 4 + dy*3), "FF", false)); slider = new PPSlider(SLIDER_SAMPLE_VIBSWEEP, screen, this, PPPoint(x + 4 + 8*11+2, y + 2 + dy*3), 68, true); slider->setBarSize(16384); container->addControl(slider); container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x + 4, y + 4 + dy*4), "Type:", true)); PPRadioGroup* radioGroup = new PPRadioGroup(RADIOGROUP_SAMPLE_VIBTYPE, screen, this, PPPoint(x + 2 + 5*8, y + 4 + dy*4 - 4), PPSize(204, 20)); radioGroup->setColor(TrackerConfig::colorThemeMain); radioGroup->setHorizontal(true); radioGroup->addItem("\xfc\xfb"); radioGroup->addItem("\xfa\xf9"); radioGroup->addItem("\xf8\xf7"); radioGroup->addItem("\xf6\xf5"); container->addControl(radioGroup); // sucks pp_int32 nx = x + container->getSize().width; // load & save container = new PPContainer(CONTAINER_INSTRUMENTS_INFO5, screen, this, PPPoint(nx, y), PPSize(39,23), false); containerEntire->addControl(container); container->setColor(TrackerConfig::colorThemeMain); button = new PPButton(BUTTON_INSTRUMENTEDITOR_LOAD, screen, this, PPPoint(nx + 2, y + 2), PPSize(34, 9)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Load"); container->addControl(button); button = new PPButton(BUTTON_INSTRUMENTEDITOR_SAVE, screen, this, PPPoint(nx + 2, y + 2+10), PPSize(34, 9)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Save"); container->addControl(button); // copy & paste y+=container->getSize().height; container = new PPContainer(CONTAINER_INSTRUMENTS_INFO6, screen, this, PPPoint(nx, y), PPSize(39,23), false); containerEntire->addControl(container); container->setColor(TrackerConfig::colorThemeMain); button = new PPButton(BUTTON_INSTRUMENTEDITOR_COPY, screen, this, PPPoint(nx + 2, y + 2), PPSize(34, 9)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Copy"); container->addControl(button); button = new PPButton(BUTTON_INSTRUMENTEDITOR_SWAP, screen, this, PPPoint(nx + 2, y + 2+10), PPSize(34, 9)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Swap"); container->addControl(button); y+=container->getSize().height; // buoah container = new PPContainer(CONTAINER_INSTRUMENTS_INFO4, screen, this, PPPoint(nx, y), PPSize(39,30), false); containerEntire->addControl(container); container->setColor(TrackerConfig::colorThemeMain); button = new PPButton(MAINMENU_SMPEDIT, screen, &tracker, PPPoint(nx + 2, y + 2), PPSize(34, 12)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Smp.Ed."); container->addControl(button); button = new PPButton(BUTTON_INSTRUMENTEDITOR_EXIT, screen, &tracker, PPPoint(nx + 2, y + 2+13), PPSize(34, 12)); button->setText("Exit"); container->addControl(button); // piano y+=container->getSize().height; PPContainer* pianoContainer = new PPContainer(CONTAINER_PIANO, screen, this, PPPoint(0, y), PPSize(screen->getWidth(),25+SCROLLBUTTONSIZE+4), false); containerEntire->addControl(pianoContainer); pianoContainer->setColor(TrackerConfig::colorThemeMain); // piano test pianoControl = new PianoControl(PIANO_CONTROL, screen, this, PPPoint(1+32, y+1), PPSize(screen->getWidth()-2-32, 25+12), ModuleEditor::MAX_NOTE); // show C-3 pianoControl->assureNoteVisible(12*4); pianoControl->setBorderColor(TrackerConfig::colorThemeMain); pianoControl->setMode(PianoControl::ModePlay); pianoContainer->addControl(pianoControl); button = new PPButton(BUTTON_PIANO_PLAY, screen, this, PPPoint(1, y+1), PPSize(30, 12), false, true, false); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setColor(TrackerConfig::colorThemeMain); button->setTextColor(PPUIConfig::getInstance()->getColor(PPUIConfig::ColorStaticText)); button->setText("Play"); pianoContainer->addControl(button); button = new PPButton(BUTTON_PIANO_EDIT, screen, this, PPPoint(1, y+1+12), PPSize(30, 12), false, true, false); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setColor(TrackerConfig::colorThemeMain); button->setTextColor(PPUIConfig::getInstance()->getColor(PPUIConfig::ColorStaticText)); button->setText("Edit"); pianoContainer->addControl(button); button = new PPButton(BUTTON_SAMPLE_PLAY_STOP, screen, this, PPPoint(2, y+1+2*12), PPSize(28, 11)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Stop"); pianoContainer->addControl(button); #endif containerEntire->adjustContainerSize(); screen->addControl(containerEntire); initialised = true; showSection(false); } void SectionInstruments::realign() { pp_uint32 maxShould = tracker.MAXEDITORHEIGHT(); pp_uint32 maxIs = containerEntire->getLocation().y + containerEntire->getSize().height; if (maxIs != maxShould) { pp_int32 offset = maxShould - maxIs; containerEntire->move(PPPoint(0, offset)); } PatternEditorControl* control = tracker.getPatternEditorControl(); PPScreen* screen = tracker.screen; if (visible) { control->setSize(PPSize(screen->getWidth(), tracker.MAXEDITORHEIGHT()-tracker.INSTRUMENTSECTIONDEFAULTHEIGHT()-tracker.UPPERSECTIONDEFAULTHEIGHT())); } else { control->setSize(PPSize(screen->getWidth(),tracker.MAXEDITORHEIGHT()-tracker.UPPERSECTIONDEFAULTHEIGHT())); } } void SectionInstruments::show(bool bShow) { #ifdef __LOWRES__ PPScreen* screen = tracker.screen; screen->pauseUpdate(true); #endif SectionAbstract::show(bShow); visible = bShow; containerEntire->show(bShow); if (!initialised) { init(); } if (initialised) { PatternEditorControl* control = tracker.getPatternEditorControl(); #ifndef __LOWRES__ realign(); #endif if (bShow) { if (control) { #ifdef __LOWRES__ control->show(false); replaceInstrumentListBoxes(true); #endif tracker.hideInputControl(); } update(false); } else if (control) { #ifdef __LOWRES__ control->show(true); replaceInstrumentListBoxes(false); #endif } showSection(bShow); } #ifdef __LOWRES__ // If instrument section is shown (bShow = true) // set focus to the Instrumentlist container (instrument listbox) // but before disable screen updates to prevent flickering if (bShow) { screen->setFocus(screen->getControlByID(CONTAINER_INSTRUMENTLIST)); } screen->pauseUpdate(false); if (!bShow) { screen->update(); } #endif } void SectionInstruments::updateSampleSliders(bool repaint/* = true*/) { if (!initialised || !visible) return; PPScreen* screen = tracker.screen; PPContainer* container2 = containerSampleSlider; SampleEditor* sampleEditor = tracker.getSampleEditor(); static_cast(container2->getControlByID(SLIDER_SAMPLE_VOLUME))->setCurrentValue(sampleEditor->getFT2Volume()); static_cast(container2->getControlByID(STATICTEXT_SAMPLE_VOLUME))->setHexValue(sampleEditor->getFT2Volume(), 2); static_cast(container2->getControlByID(SLIDER_SAMPLE_PANNING))->setCurrentValue(sampleEditor->getPanning()); static_cast(container2->getControlByID(STATICTEXT_SAMPLE_PANNING))->setHexValue(sampleEditor->getPanning(), 2); mp_sint32 ft = sampleEditor->getFinetune(); static_cast(container2->getControlByID(SLIDER_SAMPLE_FINETUNE))->setCurrentValue((mp_uint32)(ft+128)); static_cast(container2->getControlByID(STATICTEXT_SAMPLE_FINETUNE))->setIntValue(ft, 4, true); screen->paintControl(container2, repaint); } void SectionInstruments::updateInstrumentSliders(bool repaint/* = true*/) { if (!initialised || !visible) return; PPScreen* screen = tracker.screen; ModuleEditor* moduleEditor = tracker.moduleEditor; PPContainer* container4 = containerInstrumentSlider; ModuleEditor::TEditorInstrument* ins = moduleEditor->getInstrumentInfo(tracker.listBoxInstruments->getSelectedIndex()); if (ins->volfade <= 0xFFF) { static_cast(container4->getControlByID(SLIDER_SAMPLE_VOLFADE))->setCurrentValue(ins->volfade); static_cast(container4->getControlByID(STATICTEXT_SAMPLE_VOLFADE))->setHexValue(ins->volfade, 3); } else { static_cast(container4->getControlByID(SLIDER_SAMPLE_VOLFADE))->setCurrentValue(0x1000); static_cast(container4->getControlByID(STATICTEXT_SAMPLE_VOLFADE))->setText("cut"); } static_cast(container4->getControlByID(SLIDER_SAMPLE_VIBSPEED))->setCurrentValue(ins->vibrate); static_cast(container4->getControlByID(STATICTEXT_SAMPLE_VIBSPEED))->setHexValue(ins->vibrate, 2); static_cast(container4->getControlByID(SLIDER_SAMPLE_VIBDEPTH))->setCurrentValue(ins->vibdepth); static_cast(container4->getControlByID(STATICTEXT_SAMPLE_VIBDEPTH))->setHexValue(ins->vibdepth, 1); static_cast(container4->getControlByID(SLIDER_SAMPLE_VIBSWEEP))->setCurrentValue(ins->vibsweep); static_cast(container4->getControlByID(STATICTEXT_SAMPLE_VIBSWEEP))->setHexValue(ins->vibsweep, 2); static_cast(container4->getControlByID(RADIOGROUP_SAMPLE_VIBTYPE))->setChoice(ins->vibtype); screen->paintControl(container4, repaint); } void SectionInstruments::notifyTabSwitch() { if (isVisible()) realign(); updateEnvelopeEditor(false, true); resetPianoAssignment(); } void SectionInstruments::notifySampleSelect(pp_int32 index) { PianoControl* pianoControl = getPianoControl(); if (pianoControl) pianoControl->setSampleIndex(index); } void SectionInstruments::update(bool repaint) { if (!initialised || !visible) return; PPScreen* screen = tracker.screen; ModuleEditor* moduleEditor = tracker.moduleEditor; updateEnvelopeEditor(false, true); // volume/panning etc. updateSampleSliders(false); // relative note number PPContainer* container3 = static_cast(screen->getControlByID(CONTAINER_INSTRUMENTS_INFO2)); char noteName[40]; SampleEditor* sampleEditor = tracker.getSampleEditor(); #ifndef __LOWRES__ if (sampleEditor->getRelNoteNum() > 0) sprintf(noteName," (+%i)",(pp_int32)sampleEditor->getRelNoteNum()); else sprintf(noteName," (%i)",(pp_int32)sampleEditor->getRelNoteNum()); PatternTools::getNoteName(noteName, sampleEditor->getRelNoteNum() + 4*12 + 1, false); #else PatternTools::getNoteName(noteName, sampleEditor->getRelNoteNum() + 4*12 + 1); #endif static_cast(container3->getControlByID(STATICTEXT_SAMPLE_RELNOTE))->setText(noteName); pianoControl->setSampleTable(moduleEditor->getSampleTable(tracker.listBoxInstruments->getSelectedIndex())); // volfade/autovobrato updateInstrumentSliders(false); //#ifdef __LOWRES__ PPContainer* container5 = static_cast(screen->getControlByID(CONTAINER_PIANO)); { PPButton* editButton = static_cast(container5->getControlByID(BUTTON_PIANO_EDIT)); PPButton* playButton = static_cast(container5->getControlByID(BUTTON_PIANO_PLAY)); editButton->setPressed(false); playButton->setPressed(false); switch (getPianoControl()->getMode()) { case PianoControl::ModeEdit: editButton->setPressed(true); break; case PianoControl::ModePlay: playButton->setPressed(true); break; } } screen->paintControl(container5, false); //#endif screen->paintControl(container3, false); screen->paintControl(pianoControl, false); if (repaint) screen->update(); } void SectionInstruments::updateAfterLoad() { tracker.updateInstrumentsListBox(false); tracker.updateSamplesListBox(false); tracker.updateSampleEditorAndInstrumentSection(false); } void SectionInstruments::updateEnvelopeWindow(bool repaint/* = true*/) { tracker.screen->paintControl(envelopeEditorControl, repaint); } void SectionInstruments::updateEnvelopeEditor(bool repaint/* = true*/, bool reAttach/* = false*/) { EnvelopeEditor* envelopeEditor = getEnvelopeEditor(); if (!initialised || !visible) { // clear out envelope from editor if nothing is visible at all envelopeEditor->attachEnvelope(NULL, NULL); return; } PPScreen* screen = tracker.screen; PPContainer* container = containerEnvelopes; pp_int32 envIndex = -1; if (currentEnvelopeType == EnvelopeEditor::EnvelopeTypeVolume) { static_cast(container->getControlByID(BUTTON_ENVELOPE_VOLUME))->setPressed(true); static_cast(container->getControlByID(BUTTON_ENVELOPE_PANNING))->setPressed(false); envIndex = 0; envelopeEditorControl->setShowVCenter(false); } else if (currentEnvelopeType == EnvelopeEditor::EnvelopeTypePanning) { static_cast(container->getControlByID(BUTTON_ENVELOPE_VOLUME))->setPressed(false); static_cast(container->getControlByID(BUTTON_ENVELOPE_PANNING))->setPressed(true); envIndex = 1; envelopeEditorControl->setShowVCenter(true); } if (reAttach && envIndex != -1) tracker.moduleEditor->reloadEnvelope(tracker.listBoxInstruments->getSelectedIndex(), tracker.listBoxSamples->getSelectedIndex(), envIndex); #ifdef __LOWRES__ // these buttons are always there static_cast(container->getControlByID(BUTTON_ENVELOPE_UNDO))->setClickable(envelopeEditor->canUndo()); static_cast(container->getControlByID(BUTTON_ENVELOPE_REDO))->setClickable(envelopeEditor->canRedo()); static_cast(container->getControlByID(BUTTON_ENVELOPE_COPY))->setClickable(envelopeEditor->canCopy()); static_cast(container->getControlByID(BUTTON_ENVELOPE_PASTE))->setClickable(envelopeEditor->canPaste()); #else // these buttons only exist with screen width >= 800 if (screen->getWidth() >= 800) { static_cast(container->getControlByID(BUTTON_ENVELOPE_UNDO))->setClickable(envelopeEditor->canUndo()); static_cast(container->getControlByID(BUTTON_ENVELOPE_REDO))->setClickable(envelopeEditor->canRedo()); static_cast(container->getControlByID(BUTTON_ENVELOPE_COPY))->setClickable(envelopeEditor->canCopy()); static_cast(container->getControlByID(BUTTON_ENVELOPE_PASTE))->setClickable(envelopeEditor->canPaste()); } #endif static_cast(container->getControlByID(CHECKBOX_ENVELOPE_ON))->enable(envelopeEditor->isValidEnvelope()); static_cast(container->getControlByID(CHECKBOX_ENVELOPE_SUSTAIN))->enable(envelopeEditor->isValidEnvelope()); static_cast(container->getControlByID(CHECKBOX_ENVELOPE_LOOP))->enable(envelopeEditor->isValidEnvelope()); if (envelopeEditor->isValidEnvelope()) { static_cast(container->getControlByID(CHECKBOX_ENVELOPE_ON))->checkIt(envelopeEditor->isEnvelopeEnabled()); static_cast(container->getControlByID(CHECKBOX_ENVELOPE_SUSTAIN))->checkIt(envelopeEditor->isSustainEnabled()); static_cast(container->getControlByID(CHECKBOX_ENVELOPE_LOOP))->checkIt(envelopeEditor->isLoopEnabled()); static_cast(container->getControlByID(STATICTEXT_ENVELOPE_SUSTAINPT))->setIntValue(envelopeEditor->getSustainPtIndex(), 2); static_cast(container->getControlByID(STATICTEXT_ENVELOPE_LOOPSTARTPT))->setIntValue(envelopeEditor->getLoopStartPtIndex(), 2); static_cast(container->getControlByID(STATICTEXT_ENVELOPE_LOOPENDPT))->setIntValue(envelopeEditor->getLoopEndPtIndex(), 2); } else { static_cast(container->getControlByID(CHECKBOX_ENVELOPE_ON))->checkIt(false); static_cast(container->getControlByID(CHECKBOX_ENVELOPE_SUSTAIN))->checkIt(false); static_cast(container->getControlByID(CHECKBOX_ENVELOPE_LOOP))->checkIt(false); static_cast(container->getControlByID(STATICTEXT_ENVELOPE_SUSTAINPT))->setIntValue(0, 2); static_cast(container->getControlByID(STATICTEXT_ENVELOPE_LOOPSTARTPT))->setIntValue(0, 2); static_cast(container->getControlByID(STATICTEXT_ENVELOPE_LOOPENDPT))->setIntValue(0, 2); } PPButton* button = static_cast(container->getControlByID(BUTTON_ENVELOPE_SCALEX)); // button is only present in the hires version, NULL will be returned otherwise if (button) button->setClickable(!envelopeEditor->isEmptyEnvelope()); button = static_cast(container->getControlByID(BUTTON_ENVELOPE_SCALEY)); // see above if (button) button->setClickable(!envelopeEditor->isEmptyEnvelope()); screen->paintControl(container, repaint); } void SectionInstruments::resetEnvelopeEditor() { if (envelopeEditorControl) envelopeEditorControl->reset(); } void SectionInstruments::resetPianoAssignment() { pianoControl->setSampleIndex(0); } bool SectionInstruments::isEnvelopeVisible() { if (containerEnvelopes) return containerEnvelopes->isVisible(); return false; } pp_int32 SectionInstruments::getNumPredefinedEnvelopes() { return TrackerConfig::numPredefinedEnvelopes; } PPString SectionInstruments::getEncodedEnvelope(EnvelopeTypes type, pp_int32 index) { switch (type) { case EnvelopeTypeVolume: return EnvelopeContainer::encodeEnvelope(*predefinedVolumeEnvelopes->restore(index)); case EnvelopeTypePanning: return EnvelopeContainer::encodeEnvelope(*predefinedPanningEnvelopes->restore(index)); } ASSERT(false); return ""; } void SectionInstruments::setEncodedEnvelope(EnvelopeTypes type, pp_int32 index, const PPString& str) { TEnvelope e = EnvelopeContainer::decodeEnvelope(str); switch (type) { case EnvelopeTypeVolume: predefinedVolumeEnvelopes->store(index, e); break; case EnvelopeTypePanning: predefinedPanningEnvelopes->store(index, e); break; default: ASSERT(false); } } void SectionInstruments::handleZapInstrument() { showMessageBox(MESSAGEBOX_ZAPINSTRUMENT, "Zap instrument?"); } void SectionInstruments::zapInstrument() { tracker.moduleEditor->zapInstrument(tracker.listBoxInstruments->getSelectedIndex()); resetEnvelopeEditor(); tracker.sectionSamples->resetSampleEditor(); updateAfterLoad(); } MilkyTracker-1.02.00/src/tracker/SectionInstruments.h000066400000000000000000000062541324432207300225350ustar00rootroot00000000000000/* * tracker/SectionInstruments.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * SectionInstruments.h * MilkyTracker * * Created by Peter Barth on 15.04.05. * */ #ifndef SECTIONINSTRUMENTS__H #define SECTIONINSTRUMENTS__H #include "BasicTypes.h" #include "Event.h" #include "SectionAbstract.h" class PPControl; class EnvelopeEditorControl; class EnvelopeEditor; class PianoControl; class PPContainer; class EnvelopeContainer; class SectionInstruments : public SectionAbstract { private: PPContainer* containerEntire; PPContainer* containerEnvelopes; PPContainer* containerSampleSlider; PPContainer* containerInstrumentSlider; EnvelopeEditorControl* envelopeEditorControl; PianoControl* pianoControl; pp_int32 currentEnvelopeType; // 0 = Editing volume envelope, 1 = editing panning envelope bool visible; EnvelopeContainer* predefinedVolumeEnvelopes; EnvelopeContainer* predefinedPanningEnvelopes; bool storeEnvelope; EnvelopeEditor* getEnvelopeEditor(); protected: virtual void showSection(bool bShow); public: SectionInstruments(Tracker& tracker); virtual ~SectionInstruments(); // PPEvent listener virtual pp_int32 handleEvent(PPObject* sender, PPEvent* event); virtual void init(); virtual void init(pp_int32 x, pp_int32 y); void realign(); virtual void show(bool bShow); void updateSampleSliders(bool repaint = true); void updateInstrumentSliders(bool repaint = true); virtual void update(bool repaint = true); virtual void notifyTabSwitch(); virtual void notifySampleSelect(pp_int32 index); void updateAfterLoad(); void updateEnvelopeWindow(bool repaint = true); void updateEnvelopeEditor(bool repaint = true, bool reAttach = false); void resetEnvelopeEditor(); void resetPianoAssignment(); PianoControl* getPianoControl() { return pianoControl; } pp_int32 getVisibleEnvelopeType() { return currentEnvelopeType; } bool isEnvelopeVisible(); EnvelopeEditorControl* getEnvelopeEditorControl() { return envelopeEditorControl; } bool isVisible() const { return visible; } // Get predefined envelopes for storage purpose pp_int32 getNumPredefinedEnvelopes(); enum EnvelopeTypes { EnvelopeTypeVolume, EnvelopeTypePanning }; PPString getEncodedEnvelope(EnvelopeTypes type, pp_int32 index); void setEncodedEnvelope(EnvelopeTypes type, pp_int32 index, const PPString& str); private: void handleZapInstrument(); void zapInstrument(); // Responder should be friend friend class DialogResponderInstruments; friend class Tracker; }; #endif MilkyTracker-1.02.00/src/tracker/SectionOptimize.cpp000066400000000000000000001264231324432207300223360ustar00rootroot00000000000000/* * tracker/SectionOptimize.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * SectionOptimize.cpp * MilkyTracker * * Created by Peter Barth on 17.11.05. * */ #include "SectionOptimize.h" #include "SectionInstruments.h" #include "Tracker.h" #include "SectionSamples.h" #include "TrackerConfig.h" #include "ModuleEditor.h" #include "PatternEditorControl.h" #include "SampleEditorControl.h" #include "StaticText.h" #include "Seperator.h" #include "Container.h" #include "CheckBox.h" #include "CheckBoxLabel.h" #include "Font.h" #include "DialogListBox.h" #include "ListBox.h" #include "ControlIDs.h" enum CheckBoxBitPositions { // Group 2 --------------------------------------- BITPOS_CHECKBOX_REMOVE = 0, BITPOS_CHECKBOX_REMOVE_PATTERNS, BITPOS_CHECKBOX_REMOVE_INSTRUMENTS, BITPOS_CHECKBOX_REMOVE_SAMPLES, BITPOS_CHECKBOX_REARRANGE, BITPOS_CHECKBOX_MINIMIZEALL, BITPOS_CHECKBOX_CONVERTALL, BITPOS_CHECKBOX_CRUNCHHEADER, // ----------------------------------------------- // Group 2 --------------------------------------- BITPOS_CHECKBOX_OPERANDCONTROL_1xx = 0, BITPOS_CHECKBOX_OPERANDCONTROL_2xx, BITPOS_CHECKBOX_OPERANDCONTROL_3xx, BITPOS_CHECKBOX_OPERANDCONTROL_4xx, BITPOS_CHECKBOX_OPERANDCONTROL_A56xx, BITPOS_CHECKBOX_OPERANDCONTROL_Hxx, BITPOS_CHECKBOX_OPERANDCONTROL_7xx, BITPOS_CHECKBOX_OPERANDCONTROL_E1x, BITPOS_CHECKBOX_OPERANDCONTROL_E2x, BITPOS_CHECKBOX_OPERANDCONTROL_EAx, BITPOS_CHECKBOX_OPERANDCONTROL_EBx, BITPOS_CHECKBOX_OPERANDCONTROL_Pxx, BITPOS_CHECKBOX_OPERANDCONTROL_Rxx, BITPOS_CHECKBOX_OPERANDCONTROL_X1x, BITPOS_CHECKBOX_OPERANDCONTROL_X2x, BITPOS_CHECKBOX_EFFECTRELOCATION_3xx, BITPOS_CHECKBOX_EFFECTRELOCATION_4xx, BITPOS_CHECKBOX_EFFECTRELOCATION_8xx, BITPOS_CHECKBOX_EFFECTRELOCATION_Cxx, BITPOS_CHECKBOX_EFFECTRELOCATION_Axx, BITPOS_CHECKBOX_EFFECTRELOCATION_EAx, BITPOS_CHECKBOX_EFFECTRELOCATION_EBx, BITPOS_CHECKBOX_EFFECTRELOCATION_Pxx // ----------------------------------------------- }; enum ControlIDs { CONTAINER_OPTIMIZE = 8000, OPTIMIZE_BUTTON_EXIT, OPTIMIZE_CHECKBOX_REMOVE, OPTIMIZE_CHECKBOX_REMOVE_PATTERNS, OPTIMIZE_CHECKBOX_REMOVE_INSTRUMENTS, OPTIMIZE_CHECKBOX_REMOVE_SAMPLES, OPTIMIZE_STATICTEXT_REMOVE_PATTERNS, OPTIMIZE_STATICTEXT_REMOVE_INSTRUMENTS, OPTIMIZE_STATICTEXT_REMOVE_SAMPLES, OPTIMIZE_CHECKBOX_REARRANGE, OPTIMIZE_STATICTEXT_REARRANGE, OPTIMIZE_CHECKBOX_MINIMIZEALL, OPTIMIZE_CHECKBOX_CONVERTALL, OPTIMIZE_BUTTON_ANALYZE, OPTIMIZE_BUTTON_OPTIMIZE, OPTIMIZE_CHECKBOX_OPERANDCONTROL_1xx, OPTIMIZE_CHECKBOX_OPERANDCONTROL_2xx, OPTIMIZE_CHECKBOX_OPERANDCONTROL_3xx, OPTIMIZE_CHECKBOX_OPERANDCONTROL_4xx, OPTIMIZE_CHECKBOX_OPERANDCONTROL_A56xx, OPTIMIZE_CHECKBOX_OPERANDCONTROL_Hxx, OPTIMIZE_CHECKBOX_OPERANDCONTROL_7xx, OPTIMIZE_CHECKBOX_OPERANDCONTROL_E1x, OPTIMIZE_CHECKBOX_OPERANDCONTROL_E2x, OPTIMIZE_CHECKBOX_OPERANDCONTROL_EAx, OPTIMIZE_CHECKBOX_OPERANDCONTROL_EBx, OPTIMIZE_CHECKBOX_OPERANDCONTROL_Pxx, OPTIMIZE_CHECKBOX_OPERANDCONTROL_Rxx, OPTIMIZE_CHECKBOX_OPERANDCONTROL_X1x, OPTIMIZE_CHECKBOX_OPERANDCONTROL_X2x, OPTIMIZE_STATICTEXT_OPERANDCONTROL_1xx, OPTIMIZE_STATICTEXT_OPERANDCONTROL_2xx, OPTIMIZE_STATICTEXT_OPERANDCONTROL_3xx, OPTIMIZE_STATICTEXT_OPERANDCONTROL_4xx, OPTIMIZE_STATICTEXT_OPERANDCONTROL_A56xx, OPTIMIZE_STATICTEXT_OPERANDCONTROL_Hxx, OPTIMIZE_STATICTEXT_OPERANDCONTROL_7xx, OPTIMIZE_STATICTEXT_OPERANDCONTROL_E1x, OPTIMIZE_STATICTEXT_OPERANDCONTROL_E2x, OPTIMIZE_STATICTEXT_OPERANDCONTROL_EAx, OPTIMIZE_STATICTEXT_OPERANDCONTROL_EBx, OPTIMIZE_STATICTEXT_OPERANDCONTROL_Pxx, OPTIMIZE_STATICTEXT_OPERANDCONTROL_Rxx, OPTIMIZE_STATICTEXT_OPERANDCONTROL_X1x, OPTIMIZE_STATICTEXT_OPERANDCONTROL_X2x, OPTIMIZE_CHECKBOX_EFFECTRELOCATION_3xx, OPTIMIZE_CHECKBOX_EFFECTRELOCATION_4xx, OPTIMIZE_CHECKBOX_EFFECTRELOCATION_8xx, OPTIMIZE_CHECKBOX_EFFECTRELOCATION_Cxx, OPTIMIZE_CHECKBOX_EFFECTRELOCATION_Axx, OPTIMIZE_CHECKBOX_EFFECTRELOCATION_EAx, OPTIMIZE_CHECKBOX_EFFECTRELOCATION_EBx, OPTIMIZE_CHECKBOX_EFFECTRELOCATION_Pxx, OPTIMIZE_STATICTEXT_EFFECTRELOCATION_3xx, OPTIMIZE_STATICTEXT_EFFECTRELOCATION_4xx, OPTIMIZE_STATICTEXT_EFFECTRELOCATION_8xx, OPTIMIZE_STATICTEXT_EFFECTRELOCATION_Cxx, OPTIMIZE_STATICTEXT_EFFECTRELOCATION_Axx, OPTIMIZE_STATICTEXT_EFFECTRELOCATION_EAx, OPTIMIZE_STATICTEXT_EFFECTRELOCATION_EBx, OPTIMIZE_STATICTEXT_EFFECTRELOCATION_Pxx, OPTIMIZE_BUTTON_ZERO_OPERANDS_TRACK, OPTIMIZE_BUTTON_ZERO_OPERANDS_PATTERN, OPTIMIZE_BUTTON_ZERO_OPERANDS_SONG, OPTIMIZE_BUTTON_ZERO_OPERANDS_BLOCK, OPTIMIZE_BUTTON_FILL_OPERANDS_TRACK, OPTIMIZE_BUTTON_FILL_OPERANDS_PATTERN, OPTIMIZE_BUTTON_FILL_OPERANDS_SONG, OPTIMIZE_BUTTON_FILL_OPERANDS_BLOCK, OPTIMIZE_BUTTON_RELOCATE_FX_TRACK, OPTIMIZE_BUTTON_RELOCATE_FX_PATTERN, OPTIMIZE_BUTTON_RELOCATE_FX_SONG, OPTIMIZE_BUTTON_RELOCATE_FX_BLOCK, OPTIMIZE_STATICTEXT_CRUNCHHEADER, OPTIMIZE_CHECKBOX_CRUNCHHEADER }; void SectionOptimize::refresh() { tracker.updateOrderlist(false); tracker.updateInstrumentsListBox(false); tracker.updateSamplesListBox(false); // update instrument/sample editor tracker.updateSampleEditorAndInstrumentSection(false); tracker.updateWindowTitle(); tracker.screen->paint(); } void SectionOptimize::optimize(bool evaluate/* = false*/) { if (dialog) { delete dialog; dialog = NULL; } PPContainer* container = static_cast(sectionContainer); dialog = new DialogListBox(tracker.screen, NULL, PP_DEFAULT_ID, "Result Log"); PPListBox* listBox = static_cast(dialog)->getListBox(); listBox->setShowIndex(false); if (!evaluate) tracker.ensureSongStopped(false, true); bool remove = static_cast(container->getControlByID(OPTIMIZE_CHECKBOX_REMOVE))->isChecked(); bool removePatterns = static_cast(container->getControlByID(OPTIMIZE_CHECKBOX_REMOVE_PATTERNS))->isChecked() && remove; bool removeInstruments = static_cast(container->getControlByID(OPTIMIZE_CHECKBOX_REMOVE_INSTRUMENTS))->isChecked() && remove; bool remapInstruments = static_cast(container->getControlByID(OPTIMIZE_CHECKBOX_REARRANGE))->isChecked() && remove; bool removeSamples = static_cast(container->getControlByID(OPTIMIZE_CHECKBOX_REMOVE_SAMPLES))->isChecked() && remove; bool convertSamples = static_cast(container->getControlByID(OPTIMIZE_CHECKBOX_CONVERTALL))->isChecked(); bool minimizeSamples = static_cast(container->getControlByID(OPTIMIZE_CHECKBOX_MINIMIZEALL))->isChecked(); char buffer[1024]; tracker.signalWaitState(true); if (removePatterns) { pp_int32 res = tracker.moduleEditor->removeUnusedPatterns(evaluate); sprintf(buffer, "Unused patterns: %i", res); listBox->addItem(buffer); } if (removeInstruments) { pp_int32 res = tracker.moduleEditor->removeUnusedInstruments(evaluate, remapInstruments); sprintf(buffer, "Unused instruments: %i", res); listBox->addItem(buffer); } if (removeSamples) { pp_int32 res = tracker.moduleEditor->removeUnusedSamples(evaluate); sprintf(buffer, "Unused samples: %i", res); listBox->addItem(buffer); } if (convertSamples || minimizeSamples) { OptimizeSamplesResult result = optimizeSamples(convertSamples, minimizeSamples, evaluate); if (minimizeSamples) { sprintf(buffer, "Minimized samples: %i", result.numMinimizedSamples); listBox->addItem(buffer); } if (convertSamples) { sprintf(buffer, "Converted samples: %i", result.numConvertedSamples); listBox->addItem(buffer); } } // Update all panels like we have loaded a new file if (!evaluate) tracker.updateAfterLoad(true, false, false); tracker.signalWaitState(false); if (listBox->getNumItems()) { dialog->show(); if (!evaluate) refresh(); } else tracker.showMessageBox(MESSAGEBOX_UNIVERSAL, "Nothing to do.", Tracker::MessageBox_OK); if (!evaluate) tracker.ensureSongPlaying(true); } PatternEditorTools::OperandOptimizeParameters SectionOptimize::getOptimizeParameters() { PPContainer* container = static_cast(sectionContainer); PatternEditorTools::OperandOptimizeParameters optimizeParameters; optimizeParameters.command_1xx = static_cast(container->getControlByID(OPTIMIZE_CHECKBOX_OPERANDCONTROL_1xx))->isChecked(); optimizeParameters.command_2xx = static_cast(container->getControlByID(OPTIMIZE_CHECKBOX_OPERANDCONTROL_2xx))->isChecked(); optimizeParameters.command_3xx = static_cast(container->getControlByID(OPTIMIZE_CHECKBOX_OPERANDCONTROL_3xx))->isChecked(); optimizeParameters.command_4xx = static_cast(container->getControlByID(OPTIMIZE_CHECKBOX_OPERANDCONTROL_4xx))->isChecked(); optimizeParameters.command_56Axx = static_cast(container->getControlByID(OPTIMIZE_CHECKBOX_OPERANDCONTROL_A56xx))->isChecked(); optimizeParameters.command_7xx = static_cast(container->getControlByID(OPTIMIZE_CHECKBOX_OPERANDCONTROL_7xx))->isChecked(); optimizeParameters.command_E1x = static_cast(container->getControlByID(OPTIMIZE_CHECKBOX_OPERANDCONTROL_E1x))->isChecked(); optimizeParameters.command_E2x = static_cast(container->getControlByID(OPTIMIZE_CHECKBOX_OPERANDCONTROL_E2x))->isChecked(); optimizeParameters.command_EAx = static_cast(container->getControlByID(OPTIMIZE_CHECKBOX_OPERANDCONTROL_EAx))->isChecked(); optimizeParameters.command_EBx = static_cast(container->getControlByID(OPTIMIZE_CHECKBOX_OPERANDCONTROL_EBx))->isChecked(); optimizeParameters.command_Hxx = static_cast(container->getControlByID(OPTIMIZE_CHECKBOX_OPERANDCONTROL_Hxx))->isChecked(); optimizeParameters.command_Pxx = static_cast(container->getControlByID(OPTIMIZE_CHECKBOX_OPERANDCONTROL_Pxx))->isChecked(); optimizeParameters.command_Rxx = static_cast(container->getControlByID(OPTIMIZE_CHECKBOX_OPERANDCONTROL_Rxx))->isChecked(); optimizeParameters.command_X1x = static_cast(container->getControlByID(OPTIMIZE_CHECKBOX_OPERANDCONTROL_X1x))->isChecked(); optimizeParameters.command_X2x = static_cast(container->getControlByID(OPTIMIZE_CHECKBOX_OPERANDCONTROL_X2x))->isChecked(); return optimizeParameters; } void SectionOptimize::zeroOperandsTrack() { PatternEditorTools::OperandOptimizeParameters optimizeParameters = getOptimizeParameters(); tracker.getPatternEditor()->zeroOperandsTrack(optimizeParameters, false); refresh(); } void SectionOptimize::zeroOperandsPattern() { PatternEditorTools::OperandOptimizeParameters optimizeParameters = getOptimizeParameters(); tracker.getPatternEditor()->zeroOperandsPattern(optimizeParameters, false); refresh(); } void SectionOptimize::zeroOperandsSong() { PatternEditorTools::OperandOptimizeParameters optimizeParameters = getOptimizeParameters(); tracker.moduleEditor->zeroOperands(optimizeParameters, false); refresh(); } void SectionOptimize::zeroOperandsBlock() { PatternEditorTools::OperandOptimizeParameters optimizeParameters = getOptimizeParameters(); tracker.getPatternEditor()->zeroOperandsSelection(optimizeParameters, false); refresh(); } void SectionOptimize::fillOperandsTrack() { PatternEditorTools::OperandOptimizeParameters optimizeParameters = getOptimizeParameters(); tracker.getPatternEditor()->fillOperandsTrack(optimizeParameters, false); refresh(); } void SectionOptimize::fillOperandsPattern() { PatternEditorTools::OperandOptimizeParameters optimizeParameters = getOptimizeParameters(); tracker.getPatternEditor()->fillOperandsPattern(optimizeParameters, false); refresh(); } void SectionOptimize::fillOperandsSong() { PatternEditorTools::OperandOptimizeParameters optimizeParameters = getOptimizeParameters(); tracker.moduleEditor->fillOperands(optimizeParameters, false); refresh(); } void SectionOptimize::fillOperandsBlock() { PatternEditorTools::OperandOptimizeParameters optimizeParameters = getOptimizeParameters(); tracker.getPatternEditor()->fillOperandsSelection(optimizeParameters, false); refresh(); } PatternEditorTools::RelocateParameters SectionOptimize::getRelocateParameters() { PPContainer* container = static_cast(sectionContainer); PatternEditorTools::RelocateParameters relocateParameters; relocateParameters.command_3xx = static_cast(container->getControlByID(OPTIMIZE_CHECKBOX_EFFECTRELOCATION_3xx))->isChecked(); relocateParameters.command_4xx = static_cast(container->getControlByID(OPTIMIZE_CHECKBOX_EFFECTRELOCATION_4xx))->isChecked(); relocateParameters.command_8xx = static_cast(container->getControlByID(OPTIMIZE_CHECKBOX_EFFECTRELOCATION_8xx))->isChecked(); relocateParameters.command_Axx = static_cast(container->getControlByID(OPTIMIZE_CHECKBOX_EFFECTRELOCATION_Axx))->isChecked(); relocateParameters.command_Cxx = static_cast(container->getControlByID(OPTIMIZE_CHECKBOX_EFFECTRELOCATION_Cxx))->isChecked(); relocateParameters.command_EAx = static_cast(container->getControlByID(OPTIMIZE_CHECKBOX_EFFECTRELOCATION_EAx))->isChecked(); relocateParameters.command_EBx = static_cast(container->getControlByID(OPTIMIZE_CHECKBOX_EFFECTRELOCATION_EBx))->isChecked(); relocateParameters.command_Pxx = static_cast(container->getControlByID(OPTIMIZE_CHECKBOX_EFFECTRELOCATION_Pxx))->isChecked(); return relocateParameters; } void SectionOptimize::relocateCommandsTrack() { PatternEditorTools::RelocateParameters relocateParameters = getRelocateParameters(); tracker.getPatternEditor()->relocateCommandsTrack(relocateParameters, false); refresh(); } void SectionOptimize::relocateCommandsPattern() { PatternEditorTools::RelocateParameters relocateParameters = getRelocateParameters(); tracker.getPatternEditor()->relocateCommandsPattern(relocateParameters, false); refresh(); } void SectionOptimize::relocateCommandsSong() { PatternEditorTools::RelocateParameters relocateParameters = getRelocateParameters(); tracker.moduleEditor->relocateCommands(relocateParameters, false); refresh(); } void SectionOptimize::relocateCommandsBlock() { PatternEditorTools::RelocateParameters relocateParameters = getRelocateParameters(); tracker.getPatternEditor()->relocateCommandsSelection(relocateParameters, false); refresh(); } SectionOptimize::OptimizeSamplesResult SectionOptimize::optimizeSamples(bool convertTo8Bit, bool minimize, bool evaluate) { OptimizeSamplesResult result; tracker.moduleEditor->optimizeSamples(convertTo8Bit, minimize, result.numConvertedSamples, result.numMinimizedSamples, evaluate); refresh(); return result; } SectionOptimize::SectionOptimize(Tracker& theTracker) : SectionUpperLeft(theTracker) { } SectionOptimize::~SectionOptimize() { } pp_int32 SectionOptimize::handleEvent(PPObject* sender, PPEvent* event) { if (event->getID() == eCommand) { switch (reinterpret_cast(sender)->getID()) { case OPTIMIZE_BUTTON_EXIT: show(false); break; case OPTIMIZE_CHECKBOX_REMOVE: case OPTIMIZE_CHECKBOX_REMOVE_INSTRUMENTS: case OPTIMIZE_CHECKBOX_REMOVE_SAMPLES: update(); break; case OPTIMIZE_BUTTON_OPTIMIZE: optimize(); break; case OPTIMIZE_BUTTON_ANALYZE: optimize(true); break; case OPTIMIZE_BUTTON_ZERO_OPERANDS_TRACK: zeroOperandsTrack(); break; case OPTIMIZE_BUTTON_ZERO_OPERANDS_PATTERN: zeroOperandsPattern(); break; case OPTIMIZE_BUTTON_ZERO_OPERANDS_SONG: zeroOperandsSong(); break; case OPTIMIZE_BUTTON_ZERO_OPERANDS_BLOCK: zeroOperandsBlock(); break; case OPTIMIZE_BUTTON_FILL_OPERANDS_TRACK: fillOperandsTrack(); break; case OPTIMIZE_BUTTON_FILL_OPERANDS_PATTERN: fillOperandsPattern(); break; case OPTIMIZE_BUTTON_FILL_OPERANDS_SONG: fillOperandsSong(); break; case OPTIMIZE_BUTTON_FILL_OPERANDS_BLOCK: fillOperandsBlock(); break; case OPTIMIZE_BUTTON_RELOCATE_FX_TRACK: relocateCommandsTrack(); break; case OPTIMIZE_BUTTON_RELOCATE_FX_PATTERN: relocateCommandsPattern(); break; case OPTIMIZE_BUTTON_RELOCATE_FX_SONG: relocateCommandsSong(); break; case OPTIMIZE_BUTTON_RELOCATE_FX_BLOCK: relocateCommandsBlock(); break; } } return 0; } void SectionOptimize::init(pp_int32 px, pp_int32 py) { PPScreen* screen = tracker.screen; PPContainer* container = new PPContainer(CONTAINER_OPTIMIZE, tracker.screen, this, PPPoint(px, py), PPSize(320,UPPERLEFTSECTIONHEIGHT), false); container->setColor(TrackerConfig::colorThemeMain); tracker.screen->addControl(container); container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(px + 2, py + 2), "Optimize", true, true)); PPSize size = container->getSize(); pp_int32 buttonWidth = 8*4+4; pp_int32 buttonHeight = 11; pp_int32 x = px+container->getSize().width-(buttonWidth+4); pp_int32 y = py+container->getSize().height-(buttonHeight+4); pp_int32 x2, y2; container->addControl(new PPSeperator(0, screen, PPPoint(x - 6, y - 4), 4 + buttonHeight + 3, TrackerConfig::colorThemeMain, false)); container->addControl(new PPSeperator(0, screen, PPPoint(px + 2, y - 4), container->getSize().width - 4, TrackerConfig::colorThemeMain, true)); pp_int32 space; PPButton* button = new PPButton(OPTIMIZE_BUTTON_EXIT, screen, this, PPPoint(x, y), PPSize(buttonWidth,buttonHeight)); button->setText("Exit"); container->addControl(button); y+=2; x = px+4; PPCheckBox* checkBox = new PPCheckBox(OPTIMIZE_CHECKBOX_CRUNCHHEADER, screen, this, PPPoint(x + 32 * 8, y - 1)); checkBox->checkIt(false); checkBox->enable(false); PPCheckBoxLabel* checkBoxLabel = new PPCheckBoxLabel(OPTIMIZE_STATICTEXT_CRUNCHHEADER, NULL, this, PPPoint(x, y), "Crunch headers (XM format only)", checkBox, true); checkBoxLabel->enable(false); container->addControl(checkBoxLabel); container->addControl(checkBox); // ----------------------------- "remove" space = 5*8; x = px+4; y = py+4+11; pp_int32 seperatorWidth = (x + 14*8+2) - (px+4) + 4 + 2; checkBox = new PPCheckBox(OPTIMIZE_CHECKBOX_REMOVE, screen, this, PPPoint(x + 13 * 8 + 2, y)); checkBox->checkIt(true); container->addControl(new PPCheckBoxLabel(0, NULL, this, PPPoint(x, y), "Remove unused", checkBox, true)); container->addControl(checkBox); y+=12; x = px+4; checkBox = new PPCheckBox(OPTIMIZE_CHECKBOX_REMOVE_PATTERNS, screen, this, PPPoint(x + 3 * 8 + 2, y)); checkBox->checkIt(true); container->addControl(new PPCheckBoxLabel(OPTIMIZE_STATICTEXT_REMOVE_PATTERNS, NULL, this, PPPoint(x, y), "Pat", checkBox, true)); container->addControl(checkBox); x+=space; checkBox = new PPCheckBox(OPTIMIZE_CHECKBOX_REMOVE_INSTRUMENTS, screen, this, PPPoint(x + 3 * 8 + 2, y)); checkBox->checkIt(true); container->addControl(new PPCheckBoxLabel(OPTIMIZE_STATICTEXT_REMOVE_INSTRUMENTS, NULL, this, PPPoint(x, y), "Ins", checkBox, true)); container->addControl(checkBox); x+=space; checkBox = new PPCheckBox(OPTIMIZE_CHECKBOX_REMOVE_SAMPLES, screen, this, PPPoint(x + 3 * 8 + 2, y)); checkBox->checkIt(true); container->addControl(new PPCheckBoxLabel(OPTIMIZE_STATICTEXT_REMOVE_SAMPLES, NULL, this, PPPoint(x, y), "Smp", checkBox, true)); container->addControl(checkBox); y+=12; x = px+4; checkBox = new PPCheckBox(OPTIMIZE_CHECKBOX_REARRANGE, screen, this, PPPoint(x + 13 * 8 + 2, y)); checkBox->checkIt(true); container->addControl(new PPCheckBoxLabel(OPTIMIZE_STATICTEXT_REARRANGE, NULL, this, PPPoint(x, y), "Remap instr.", checkBox, true)); container->addControl(checkBox); // ----------------------------- "seperator" y+=12; container->addControl(new PPSeperator(0, screen, PPPoint(px + 2, y), seperatorWidth, TrackerConfig::colorThemeMain, true)); y+=4; // ----------------------------- "minimize all samples" checkBox = new PPCheckBox(OPTIMIZE_CHECKBOX_MINIMIZEALL, screen, this, PPPoint(x + 13 * 8 + 2, y)); checkBox->checkIt(true); container->addControl(new PPCheckBoxLabel(0, NULL, this, PPPoint(x, y), "Min. all smp.", checkBox, true)); container->addControl(checkBox); // ----------------------------- "samples to 8 bit" y+=12; checkBox = new PPCheckBox(OPTIMIZE_CHECKBOX_CONVERTALL, screen, this, PPPoint(x + 13 * 8 + 2, y)); checkBox->checkIt(true); container->addControl(new PPCheckBoxLabel(0, NULL, this, PPPoint(x, y), "Smp. to 8 bit", checkBox, true)); container->addControl(checkBox); y+=12; container->addControl(new PPSeperator(0, screen, PPPoint(x-1, y), seperatorWidth, TrackerConfig::colorThemeMain, true)); y+=4; buttonWidth = 8*7 + 1; buttonHeight = 14; button = new PPButton(OPTIMIZE_BUTTON_ANALYZE, screen, this, PPPoint(x, y), PPSize(buttonWidth,buttonHeight)); button->setText("Analyze"); container->addControl(button); x+=buttonWidth+2; button = new PPButton(OPTIMIZE_BUTTON_OPTIMIZE, screen, this, PPPoint(x, y), PPSize(buttonWidth,buttonHeight)); button->setText("Optimize"); container->addControl(button); // ----------------------------- "operand control" y = py+4+11 - 12; x = x2 = px + 4 + seperatorWidth + 1; space = 5*8-1; checkBox = new PPCheckBox(OPTIMIZE_CHECKBOX_OPERANDCONTROL_1xx, screen, this, PPPoint(x + 3 * 8 + 2, y)); checkBox->checkIt(true); container->addControl(new PPCheckBoxLabel(OPTIMIZE_STATICTEXT_OPERANDCONTROL_1xx, NULL, this, PPPoint(x, y), "1xx", checkBox, true)); container->addControl(checkBox); x+=space; checkBox = new PPCheckBox(OPTIMIZE_CHECKBOX_OPERANDCONTROL_2xx, screen, this, PPPoint(x + 3 * 8 + 2, y)); checkBox->checkIt(true); container->addControl(new PPCheckBoxLabel(OPTIMIZE_STATICTEXT_OPERANDCONTROL_2xx, NULL, this, PPPoint(x, y), "2xx", checkBox, true)); container->addControl(checkBox); x+=space; checkBox = new PPCheckBox(OPTIMIZE_CHECKBOX_OPERANDCONTROL_3xx, screen, this, PPPoint(x + 3 * 8 + 2, y)); checkBox->checkIt(true); container->addControl(new PPCheckBoxLabel(OPTIMIZE_STATICTEXT_OPERANDCONTROL_3xx, NULL, this, PPPoint(x, y), "3xx", checkBox, true)); container->addControl(checkBox); x+=space; checkBox = new PPCheckBox(OPTIMIZE_CHECKBOX_OPERANDCONTROL_4xx, screen, this, PPPoint(x + 3 * 8 + 2, y)); checkBox->checkIt(true); container->addControl(new PPCheckBoxLabel(OPTIMIZE_STATICTEXT_OPERANDCONTROL_4xx, NULL, this, PPPoint(x, y), "4xx", checkBox, true)); container->addControl(checkBox); x+=space; checkBox = new PPCheckBox(OPTIMIZE_CHECKBOX_OPERANDCONTROL_7xx, screen, this, PPPoint(x + 3 * 8 + 2, y)); checkBox->checkIt(true); container->addControl(new PPCheckBoxLabel(OPTIMIZE_STATICTEXT_OPERANDCONTROL_7xx, NULL, this, PPPoint(x, y), "7xx", checkBox, true)); container->addControl(checkBox); y+=12; x = x2; checkBox = new PPCheckBox(OPTIMIZE_CHECKBOX_OPERANDCONTROL_A56xx, screen, this, PPPoint(x + 8 * 8 + 1, y)); checkBox->checkIt(true); container->addControl(new PPCheckBoxLabel(OPTIMIZE_STATICTEXT_OPERANDCONTROL_A56xx, NULL, this, PPPoint(x+4, y), "A/5/6xx", checkBox, true)); container->addControl(checkBox); x+=space*2; checkBox = new PPCheckBox(OPTIMIZE_CHECKBOX_OPERANDCONTROL_Hxx, screen, this, PPPoint(x + 3 * 8 + 2, y)); checkBox->checkIt(true); container->addControl(new PPCheckBoxLabel(OPTIMIZE_STATICTEXT_OPERANDCONTROL_Hxx, NULL, this, PPPoint(x, y), "Hxx", checkBox, true)); container->addControl(checkBox); x+=space; checkBox = new PPCheckBox(OPTIMIZE_CHECKBOX_OPERANDCONTROL_Pxx, screen, this, PPPoint(x + 3 * 8 + 2, y)); checkBox->checkIt(true); container->addControl(new PPCheckBoxLabel(OPTIMIZE_STATICTEXT_OPERANDCONTROL_Pxx, NULL, this, PPPoint(x, y), "Pxx", checkBox, true)); container->addControl(checkBox); x+=space; checkBox = new PPCheckBox(OPTIMIZE_CHECKBOX_OPERANDCONTROL_Rxx, screen, this, PPPoint(x + 3 * 8 + 2, y)); checkBox->checkIt(true); container->addControl(new PPCheckBoxLabel(OPTIMIZE_STATICTEXT_OPERANDCONTROL_Rxx, NULL, this, PPPoint(x, y), "Rxx", checkBox, true)); container->addControl(checkBox); y+=12; x = x2; checkBox = new PPCheckBox(OPTIMIZE_CHECKBOX_OPERANDCONTROL_E1x, screen, this, PPPoint(x + 3 * 8 + 2, y)); checkBox->checkIt(true); container->addControl(new PPCheckBoxLabel(OPTIMIZE_STATICTEXT_OPERANDCONTROL_E1x, NULL, this, PPPoint(x, y), "E1x", checkBox, true)); container->addControl(checkBox); x+=space; checkBox = new PPCheckBox(OPTIMIZE_CHECKBOX_OPERANDCONTROL_E2x, screen, this, PPPoint(x + 3 * 8 + 2, y)); checkBox->checkIt(true); container->addControl(new PPCheckBoxLabel(OPTIMIZE_STATICTEXT_OPERANDCONTROL_E2x, NULL, this, PPPoint(x, y), "E2x", checkBox, true)); container->addControl(checkBox); x+=space; checkBox = new PPCheckBox(OPTIMIZE_CHECKBOX_OPERANDCONTROL_EAx, screen, this, PPPoint(x + 3 * 8 + 2, y)); checkBox->checkIt(true); container->addControl(new PPCheckBoxLabel(OPTIMIZE_STATICTEXT_OPERANDCONTROL_EAx, NULL, this, PPPoint(x, y), "EAx", checkBox, true)); container->addControl(checkBox); x+=space; checkBox = new PPCheckBox(OPTIMIZE_CHECKBOX_OPERANDCONTROL_EBx, screen, this, PPPoint(x + 3 * 8 + 2, y)); checkBox->checkIt(true); container->addControl(new PPCheckBoxLabel(OPTIMIZE_STATICTEXT_OPERANDCONTROL_EBx, NULL, this, PPPoint(x, y), "EBx", checkBox, true)); container->addControl(checkBox); x+=space; checkBox = new PPCheckBox(OPTIMIZE_CHECKBOX_OPERANDCONTROL_X1x, screen, this, PPPoint(x + 3 * 8 + 2, y)); checkBox->checkIt(true); container->addControl(new PPCheckBoxLabel(OPTIMIZE_STATICTEXT_OPERANDCONTROL_X1x, NULL, this, PPPoint(x, y), "X1x", checkBox, true)); container->addControl(checkBox); y+=12; checkBox = new PPCheckBox(OPTIMIZE_CHECKBOX_OPERANDCONTROL_X2x, screen, this, PPPoint(x + 3 * 8 + 2, y)); checkBox->checkIt(true); container->addControl(new PPCheckBoxLabel(OPTIMIZE_STATICTEXT_OPERANDCONTROL_X2x, NULL, this, PPPoint(x, y), "X2x", checkBox, true)); container->addControl(checkBox); y+=1; x = x2+1; buttonWidth = container->getSize().width/10-5; buttonHeight = 8; PPStaticText* staticText = new PPStaticText(0, NULL, NULL, PPPoint(x-1, y+1), "Zero ops", true); staticText->setFont(PPFont::getFont(PPFont::FONT_TINY)); container->addControl(staticText); x+=8*5+1; button = new PPButton(OPTIMIZE_BUTTON_ZERO_OPERANDS_TRACK, screen, this, PPPoint(x, y), PPSize(buttonWidth,buttonHeight)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Track"); container->addControl(button); x+=buttonWidth+1; button = new PPButton(OPTIMIZE_BUTTON_ZERO_OPERANDS_PATTERN, screen, this, PPPoint(x, y), PPSize(buttonWidth,buttonHeight)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Pat."); container->addControl(button); x+=buttonWidth+1; button = new PPButton(OPTIMIZE_BUTTON_ZERO_OPERANDS_SONG, screen, this, PPPoint(x, y), PPSize(buttonWidth,buttonHeight)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Song"); container->addControl(button); x+=buttonWidth+1; button = new PPButton(OPTIMIZE_BUTTON_ZERO_OPERANDS_BLOCK, screen, this, PPPoint(x, y), PPSize(buttonWidth,buttonHeight)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Block"); container->addControl(button); y+=buttonHeight+1; x = x2+1; staticText = new PPStaticText(0, NULL, NULL, PPPoint(x-1, y+1), "Fill ops", true); staticText->setFont(PPFont::getFont(PPFont::FONT_TINY)); container->addControl(staticText); x+=8*5+1; button = new PPButton(OPTIMIZE_BUTTON_FILL_OPERANDS_TRACK, screen, this, PPPoint(x, y), PPSize(buttonWidth,buttonHeight)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Track"); container->addControl(button); x+=buttonWidth+1; button = new PPButton(OPTIMIZE_BUTTON_FILL_OPERANDS_PATTERN, screen, this, PPPoint(x, y), PPSize(buttonWidth,buttonHeight)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Pat."); container->addControl(button); x+=buttonWidth+1; button = new PPButton(OPTIMIZE_BUTTON_FILL_OPERANDS_SONG, screen, this, PPPoint(x, y), PPSize(buttonWidth,buttonHeight)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Song"); container->addControl(button); x+=buttonWidth+1; button = new PPButton(OPTIMIZE_BUTTON_FILL_OPERANDS_BLOCK, screen, this, PPPoint(x, y), PPSize(buttonWidth,buttonHeight)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Block"); container->addControl(button); y+=buttonHeight+2; x = x2; container->addControl(new PPSeperator(0, screen, PPPoint(x-2, y), container->getSize().width - seperatorWidth - 5, TrackerConfig::colorThemeMain, true)); y+=4; // ----------------------------- "effect relocation" x = x2; space = 5*8-1; checkBox = new PPCheckBox(OPTIMIZE_CHECKBOX_EFFECTRELOCATION_3xx, screen, this, PPPoint(x + 3 * 8 + 2, y)); checkBox->checkIt(true); container->addControl(new PPCheckBoxLabel(OPTIMIZE_STATICTEXT_EFFECTRELOCATION_3xx, NULL, this, PPPoint(x, y), "3xx", checkBox, true)); container->addControl(checkBox); x+=space; checkBox = new PPCheckBox(OPTIMIZE_CHECKBOX_EFFECTRELOCATION_4xx, screen, this, PPPoint(x + 3 * 8 + 2, y)); checkBox->checkIt(true); container->addControl(new PPCheckBoxLabel(OPTIMIZE_STATICTEXT_EFFECTRELOCATION_4xx, NULL, this, PPPoint(x, y), "4xx", checkBox, true)); container->addControl(checkBox); x+=space; checkBox = new PPCheckBox(OPTIMIZE_CHECKBOX_EFFECTRELOCATION_8xx, screen, this, PPPoint(x + 3 * 8 + 2, y)); checkBox->checkIt(true); container->addControl(new PPCheckBoxLabel(OPTIMIZE_STATICTEXT_EFFECTRELOCATION_8xx, NULL, this, PPPoint(x, y), "8xx", checkBox, true)); container->addControl(checkBox); x+=space; checkBox = new PPCheckBox(OPTIMIZE_CHECKBOX_EFFECTRELOCATION_Axx, screen, this, PPPoint(x + 3 * 8 + 2, y)); checkBox->checkIt(true); container->addControl(new PPCheckBoxLabel(OPTIMIZE_STATICTEXT_EFFECTRELOCATION_Axx, NULL, this, PPPoint(x, y), "Axx", checkBox, true)); container->addControl(checkBox); x+=space; checkBox = new PPCheckBox(OPTIMIZE_CHECKBOX_EFFECTRELOCATION_Cxx, screen, this, PPPoint(x + 3 * 8 + 2, y)); checkBox->checkIt(true); container->addControl(new PPCheckBoxLabel(OPTIMIZE_STATICTEXT_EFFECTRELOCATION_Cxx, NULL, this, PPPoint(x, y), "Cxx", checkBox, true)); container->addControl(checkBox); x = x2; y+=12; checkBox = new PPCheckBox(OPTIMIZE_CHECKBOX_EFFECTRELOCATION_EAx, screen, this, PPPoint(x + 3 * 8 + 2, y)); checkBox->checkIt(true); container->addControl(new PPCheckBoxLabel(OPTIMIZE_STATICTEXT_EFFECTRELOCATION_EAx, NULL, this, PPPoint(x, y), "EAx", checkBox, true)); container->addControl(checkBox); x+=space; checkBox = new PPCheckBox(OPTIMIZE_CHECKBOX_EFFECTRELOCATION_EBx, screen, this, PPPoint(x + 3 * 8 + 2, y)); checkBox->checkIt(true); container->addControl(new PPCheckBoxLabel(OPTIMIZE_STATICTEXT_EFFECTRELOCATION_EBx, NULL, this, PPPoint(x, y), "EBx", checkBox, true)); container->addControl(checkBox); x+=space; checkBox = new PPCheckBox(OPTIMIZE_CHECKBOX_EFFECTRELOCATION_Pxx, screen, this, PPPoint(x + 3 * 8 + 2, y)); checkBox->checkIt(true); container->addControl(new PPCheckBoxLabel(OPTIMIZE_STATICTEXT_EFFECTRELOCATION_Pxx, NULL, this, PPPoint(x, y), "Pxx", checkBox, true)); container->addControl(checkBox); y+=12; x = x2; // ----------------------------- buttons for fx relocation y++; x = x2+1; buttonHeight = 9; buttonWidth = container->getSize().width/8-7; staticText = new PPStaticText(0, NULL, NULL, PPPoint(x-1, y+2), "Relocate FX", true); staticText->setFont(PPFont::getFont(PPFont::FONT_TINY)); container->addControl(staticText); x+=11*5+1; button = new PPButton(OPTIMIZE_BUTTON_RELOCATE_FX_TRACK, screen, this, PPPoint(x, y), PPSize(buttonWidth,buttonHeight)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Track"); container->addControl(button); x+=buttonWidth+1; button = new PPButton(OPTIMIZE_BUTTON_RELOCATE_FX_PATTERN, screen, this, PPPoint(x, y), PPSize(buttonWidth,buttonHeight)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Pat."); container->addControl(button); x+=buttonWidth+1; button = new PPButton(OPTIMIZE_BUTTON_RELOCATE_FX_SONG, screen, this, PPPoint(x, y), PPSize(buttonWidth,buttonHeight)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Song"); container->addControl(button); x+=buttonWidth+1; button = new PPButton(OPTIMIZE_BUTTON_RELOCATE_FX_BLOCK, screen, this, PPPoint(x, y), PPSize(buttonWidth,buttonHeight)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Block"); container->addControl(button); // ----------------------------- vertical seperator x2 = px + 2 + seperatorWidth; y2 = py + 2; container->addControl(new PPSeperator(0, screen, PPPoint(x2, y2 - 2), container->getLocation().y + container->getSize().height - y2 - 17, TrackerConfig::colorThemeMain, false)); sectionContainer = container; initialised = true; showSection(false); } void SectionOptimize::update(bool repaint/* = true*/) { PPScreen* screen = tracker.screen; PPContainer* container = static_cast(sectionContainer); PPCheckBox* checkBox = static_cast(container->getControlByID(OPTIMIZE_CHECKBOX_REMOVE)); if (checkBox->isChecked()) { container->getControlByID(OPTIMIZE_STATICTEXT_REMOVE_PATTERNS)->enable(true); container->getControlByID(OPTIMIZE_CHECKBOX_REMOVE_PATTERNS)->enable(true); container->getControlByID(OPTIMIZE_STATICTEXT_REMOVE_INSTRUMENTS)->enable(true); container->getControlByID(OPTIMIZE_CHECKBOX_REMOVE_INSTRUMENTS)->enable(true); container->getControlByID(OPTIMIZE_STATICTEXT_REMOVE_SAMPLES)->enable(true); container->getControlByID(OPTIMIZE_CHECKBOX_REMOVE_SAMPLES)->enable(true); bool b = static_cast(container->getControlByID(OPTIMIZE_CHECKBOX_REMOVE_INSTRUMENTS))->isChecked(); container->getControlByID(OPTIMIZE_STATICTEXT_REARRANGE)->enable(b); container->getControlByID(OPTIMIZE_CHECKBOX_REARRANGE)->enable(b); } else { container->getControlByID(OPTIMIZE_STATICTEXT_REMOVE_PATTERNS)->enable(false); container->getControlByID(OPTIMIZE_CHECKBOX_REMOVE_PATTERNS)->enable(false); container->getControlByID(OPTIMIZE_STATICTEXT_REMOVE_INSTRUMENTS)->enable(false); container->getControlByID(OPTIMIZE_CHECKBOX_REMOVE_INSTRUMENTS)->enable(false); container->getControlByID(OPTIMIZE_STATICTEXT_REMOVE_SAMPLES)->enable(false); container->getControlByID(OPTIMIZE_CHECKBOX_REMOVE_SAMPLES)->enable(false); container->getControlByID(OPTIMIZE_STATICTEXT_REARRANGE)->enable(false); container->getControlByID(OPTIMIZE_CHECKBOX_REARRANGE)->enable(false); } screen->paintControl(container, repaint); } pp_uint32 SectionOptimize::getNumFlagGroups() { return 2; } pp_uint32 SectionOptimize::getDefaultFlags(pp_uint32 groupIndex) { pp_uint32 value = 0; switch (groupIndex) { case 0: value = (1 << BITPOS_CHECKBOX_REMOVE) | (1 << BITPOS_CHECKBOX_REMOVE_PATTERNS) | (1 << BITPOS_CHECKBOX_REMOVE_INSTRUMENTS) | (1 << BITPOS_CHECKBOX_REMOVE_SAMPLES) | (1 << BITPOS_CHECKBOX_REARRANGE) | (1 << BITPOS_CHECKBOX_MINIMIZEALL) | (1 << BITPOS_CHECKBOX_CONVERTALL) | (1 << BITPOS_CHECKBOX_CRUNCHHEADER); break; case 1: value = (1 << BITPOS_CHECKBOX_OPERANDCONTROL_1xx) | (1 << BITPOS_CHECKBOX_OPERANDCONTROL_2xx) | (1 << BITPOS_CHECKBOX_OPERANDCONTROL_3xx) | (1 << BITPOS_CHECKBOX_OPERANDCONTROL_4xx) | (1 << BITPOS_CHECKBOX_OPERANDCONTROL_A56xx) | (1 << BITPOS_CHECKBOX_OPERANDCONTROL_Hxx) | (1 << BITPOS_CHECKBOX_OPERANDCONTROL_7xx) | (1 << BITPOS_CHECKBOX_OPERANDCONTROL_E1x) | (1 << BITPOS_CHECKBOX_OPERANDCONTROL_E2x) | (1 << BITPOS_CHECKBOX_OPERANDCONTROL_EAx) | (1 << BITPOS_CHECKBOX_OPERANDCONTROL_EBx) | (1 << BITPOS_CHECKBOX_OPERANDCONTROL_Pxx) | (1 << BITPOS_CHECKBOX_OPERANDCONTROL_Rxx) | (1 << BITPOS_CHECKBOX_OPERANDCONTROL_X1x) | (1 << BITPOS_CHECKBOX_OPERANDCONTROL_X2x) | (1 << BITPOS_CHECKBOX_EFFECTRELOCATION_3xx) | (1 << BITPOS_CHECKBOX_EFFECTRELOCATION_4xx) | (1 << BITPOS_CHECKBOX_EFFECTRELOCATION_8xx) | (1 << BITPOS_CHECKBOX_EFFECTRELOCATION_Cxx) | (1 << BITPOS_CHECKBOX_EFFECTRELOCATION_Axx) | (1 << BITPOS_CHECKBOX_EFFECTRELOCATION_EAx) | (1 << BITPOS_CHECKBOX_EFFECTRELOCATION_EBx) | (1 << BITPOS_CHECKBOX_EFFECTRELOCATION_Pxx); break; } return value; } #define BITFROMCHECKBOX(ID, POS) \ (static_cast(container->getControlByID((ID)))->isChecked() ? 1 : 0) << (POS) pp_uint32 SectionOptimize::getOptimizeCheckBoxFlags(pp_uint32 groupIndex) { pp_uint32 value = 0; PPContainer* container = static_cast(sectionContainer); switch (groupIndex) { case 0: { value |= BITFROMCHECKBOX(OPTIMIZE_CHECKBOX_REMOVE, BITPOS_CHECKBOX_REMOVE); value |= BITFROMCHECKBOX(OPTIMIZE_CHECKBOX_REMOVE_PATTERNS, BITPOS_CHECKBOX_REMOVE_PATTERNS); value |= BITFROMCHECKBOX(OPTIMIZE_CHECKBOX_REMOVE_INSTRUMENTS, BITPOS_CHECKBOX_REMOVE_INSTRUMENTS); value |= BITFROMCHECKBOX(OPTIMIZE_CHECKBOX_REMOVE_SAMPLES, BITPOS_CHECKBOX_REMOVE_SAMPLES); value |= BITFROMCHECKBOX(OPTIMIZE_CHECKBOX_REARRANGE, BITPOS_CHECKBOX_REARRANGE); value |= BITFROMCHECKBOX(OPTIMIZE_CHECKBOX_MINIMIZEALL, BITPOS_CHECKBOX_MINIMIZEALL); value |= BITFROMCHECKBOX(OPTIMIZE_CHECKBOX_CONVERTALL, BITPOS_CHECKBOX_CONVERTALL); value |= BITFROMCHECKBOX(OPTIMIZE_CHECKBOX_CRUNCHHEADER, BITPOS_CHECKBOX_CRUNCHHEADER); break; } case 1: { value |= BITFROMCHECKBOX(OPTIMIZE_CHECKBOX_OPERANDCONTROL_1xx, BITPOS_CHECKBOX_OPERANDCONTROL_1xx); value |= BITFROMCHECKBOX(OPTIMIZE_CHECKBOX_OPERANDCONTROL_2xx, BITPOS_CHECKBOX_OPERANDCONTROL_2xx); value |= BITFROMCHECKBOX(OPTIMIZE_CHECKBOX_OPERANDCONTROL_3xx, BITPOS_CHECKBOX_OPERANDCONTROL_3xx); value |= BITFROMCHECKBOX(OPTIMIZE_CHECKBOX_OPERANDCONTROL_4xx, BITPOS_CHECKBOX_OPERANDCONTROL_4xx); value |= BITFROMCHECKBOX(OPTIMIZE_CHECKBOX_OPERANDCONTROL_A56xx, BITPOS_CHECKBOX_OPERANDCONTROL_A56xx); value |= BITFROMCHECKBOX(OPTIMIZE_CHECKBOX_OPERANDCONTROL_Hxx, BITPOS_CHECKBOX_OPERANDCONTROL_Hxx); value |= BITFROMCHECKBOX(OPTIMIZE_CHECKBOX_OPERANDCONTROL_7xx, BITPOS_CHECKBOX_OPERANDCONTROL_7xx); value |= BITFROMCHECKBOX(OPTIMIZE_CHECKBOX_OPERANDCONTROL_E1x, BITPOS_CHECKBOX_OPERANDCONTROL_E1x); value |= BITFROMCHECKBOX(OPTIMIZE_CHECKBOX_OPERANDCONTROL_E2x, BITPOS_CHECKBOX_OPERANDCONTROL_E2x); value |= BITFROMCHECKBOX(OPTIMIZE_CHECKBOX_OPERANDCONTROL_EAx, BITPOS_CHECKBOX_OPERANDCONTROL_EAx); value |= BITFROMCHECKBOX(OPTIMIZE_CHECKBOX_OPERANDCONTROL_EBx, BITPOS_CHECKBOX_OPERANDCONTROL_EBx); value |= BITFROMCHECKBOX(OPTIMIZE_CHECKBOX_OPERANDCONTROL_Pxx, BITPOS_CHECKBOX_OPERANDCONTROL_Pxx); value |= BITFROMCHECKBOX(OPTIMIZE_CHECKBOX_OPERANDCONTROL_Rxx, BITPOS_CHECKBOX_OPERANDCONTROL_Rxx); value |= BITFROMCHECKBOX(OPTIMIZE_CHECKBOX_OPERANDCONTROL_X1x, BITPOS_CHECKBOX_OPERANDCONTROL_X1x); value |= BITFROMCHECKBOX(OPTIMIZE_CHECKBOX_OPERANDCONTROL_X2x, BITPOS_CHECKBOX_OPERANDCONTROL_X2x); value |= BITFROMCHECKBOX(OPTIMIZE_CHECKBOX_EFFECTRELOCATION_3xx, BITPOS_CHECKBOX_EFFECTRELOCATION_3xx); value |= BITFROMCHECKBOX(OPTIMIZE_CHECKBOX_EFFECTRELOCATION_4xx, BITPOS_CHECKBOX_EFFECTRELOCATION_4xx); value |= BITFROMCHECKBOX(OPTIMIZE_CHECKBOX_EFFECTRELOCATION_8xx, BITPOS_CHECKBOX_EFFECTRELOCATION_8xx); value |= BITFROMCHECKBOX(OPTIMIZE_CHECKBOX_EFFECTRELOCATION_Cxx, BITPOS_CHECKBOX_EFFECTRELOCATION_Cxx); value |= BITFROMCHECKBOX(OPTIMIZE_CHECKBOX_EFFECTRELOCATION_Axx, BITPOS_CHECKBOX_EFFECTRELOCATION_Axx); value |= BITFROMCHECKBOX(OPTIMIZE_CHECKBOX_EFFECTRELOCATION_EAx, BITPOS_CHECKBOX_EFFECTRELOCATION_EAx); value |= BITFROMCHECKBOX(OPTIMIZE_CHECKBOX_EFFECTRELOCATION_EBx, BITPOS_CHECKBOX_EFFECTRELOCATION_EBx); value |= BITFROMCHECKBOX(OPTIMIZE_CHECKBOX_EFFECTRELOCATION_Pxx, BITPOS_CHECKBOX_EFFECTRELOCATION_Pxx); break; } } return value; } #define BITTOCHECKBOX(VAL, ID, POS) \ static_cast(container->getControlByID((ID)))->checkIt((((VAL) >> POS) & 1) != 0) void SectionOptimize::setOptimizeCheckBoxFlags(pp_uint32 groupIndex, pp_uint32 flags) { PPContainer* container = static_cast(sectionContainer); switch (groupIndex) { case 0: { BITTOCHECKBOX(flags, OPTIMIZE_CHECKBOX_REMOVE, BITPOS_CHECKBOX_REMOVE); BITTOCHECKBOX(flags, OPTIMIZE_CHECKBOX_REMOVE_PATTERNS, BITPOS_CHECKBOX_REMOVE_PATTERNS); BITTOCHECKBOX(flags, OPTIMIZE_CHECKBOX_REMOVE_INSTRUMENTS, BITPOS_CHECKBOX_REMOVE_INSTRUMENTS); BITTOCHECKBOX(flags, OPTIMIZE_CHECKBOX_REMOVE_SAMPLES, BITPOS_CHECKBOX_REMOVE_SAMPLES); BITTOCHECKBOX(flags, OPTIMIZE_CHECKBOX_REARRANGE, BITPOS_CHECKBOX_REARRANGE); BITTOCHECKBOX(flags, OPTIMIZE_CHECKBOX_MINIMIZEALL, BITPOS_CHECKBOX_MINIMIZEALL); BITTOCHECKBOX(flags, OPTIMIZE_CHECKBOX_CONVERTALL, BITPOS_CHECKBOX_CONVERTALL); //BITTOCHECKBOX(flags, OPTIMIZE_CHECKBOX_CRUNCHHEADER, BITPOS_CHECKBOX_CRUNCHHEADER); break; } case 1: { BITTOCHECKBOX(flags, OPTIMIZE_CHECKBOX_OPERANDCONTROL_1xx, BITPOS_CHECKBOX_OPERANDCONTROL_1xx); BITTOCHECKBOX(flags, OPTIMIZE_CHECKBOX_OPERANDCONTROL_2xx, BITPOS_CHECKBOX_OPERANDCONTROL_2xx); BITTOCHECKBOX(flags, OPTIMIZE_CHECKBOX_OPERANDCONTROL_3xx, BITPOS_CHECKBOX_OPERANDCONTROL_3xx); BITTOCHECKBOX(flags, OPTIMIZE_CHECKBOX_OPERANDCONTROL_4xx, BITPOS_CHECKBOX_OPERANDCONTROL_4xx); BITTOCHECKBOX(flags, OPTIMIZE_CHECKBOX_OPERANDCONTROL_A56xx, BITPOS_CHECKBOX_OPERANDCONTROL_A56xx); BITTOCHECKBOX(flags, OPTIMIZE_CHECKBOX_OPERANDCONTROL_Hxx, BITPOS_CHECKBOX_OPERANDCONTROL_Hxx); BITTOCHECKBOX(flags, OPTIMIZE_CHECKBOX_OPERANDCONTROL_7xx, BITPOS_CHECKBOX_OPERANDCONTROL_7xx); BITTOCHECKBOX(flags, OPTIMIZE_CHECKBOX_OPERANDCONTROL_E1x, BITPOS_CHECKBOX_OPERANDCONTROL_E1x); BITTOCHECKBOX(flags, OPTIMIZE_CHECKBOX_OPERANDCONTROL_E1x, BITPOS_CHECKBOX_OPERANDCONTROL_E1x); BITTOCHECKBOX(flags, OPTIMIZE_CHECKBOX_OPERANDCONTROL_E1x, BITPOS_CHECKBOX_OPERANDCONTROL_E1x); BITTOCHECKBOX(flags, OPTIMIZE_CHECKBOX_OPERANDCONTROL_E1x, BITPOS_CHECKBOX_OPERANDCONTROL_E1x); BITTOCHECKBOX(flags, OPTIMIZE_CHECKBOX_OPERANDCONTROL_E2x, BITPOS_CHECKBOX_OPERANDCONTROL_E2x); BITTOCHECKBOX(flags, OPTIMIZE_CHECKBOX_OPERANDCONTROL_EAx, BITPOS_CHECKBOX_OPERANDCONTROL_EAx); BITTOCHECKBOX(flags, OPTIMIZE_CHECKBOX_OPERANDCONTROL_EBx, BITPOS_CHECKBOX_OPERANDCONTROL_EBx); BITTOCHECKBOX(flags, OPTIMIZE_CHECKBOX_OPERANDCONTROL_Pxx, BITPOS_CHECKBOX_OPERANDCONTROL_Pxx); BITTOCHECKBOX(flags, OPTIMIZE_CHECKBOX_OPERANDCONTROL_Rxx, BITPOS_CHECKBOX_OPERANDCONTROL_Rxx); BITTOCHECKBOX(flags, OPTIMIZE_CHECKBOX_OPERANDCONTROL_X1x, BITPOS_CHECKBOX_OPERANDCONTROL_X1x); BITTOCHECKBOX(flags, OPTIMIZE_CHECKBOX_OPERANDCONTROL_X2x, BITPOS_CHECKBOX_OPERANDCONTROL_X2x); BITTOCHECKBOX(flags, OPTIMIZE_CHECKBOX_EFFECTRELOCATION_3xx, BITPOS_CHECKBOX_EFFECTRELOCATION_3xx); BITTOCHECKBOX(flags, OPTIMIZE_CHECKBOX_EFFECTRELOCATION_4xx, BITPOS_CHECKBOX_EFFECTRELOCATION_4xx); BITTOCHECKBOX(flags, OPTIMIZE_CHECKBOX_EFFECTRELOCATION_8xx, BITPOS_CHECKBOX_EFFECTRELOCATION_8xx); BITTOCHECKBOX(flags, OPTIMIZE_CHECKBOX_EFFECTRELOCATION_Cxx, BITPOS_CHECKBOX_EFFECTRELOCATION_Cxx); BITTOCHECKBOX(flags, OPTIMIZE_CHECKBOX_EFFECTRELOCATION_Axx, BITPOS_CHECKBOX_EFFECTRELOCATION_Axx); BITTOCHECKBOX(flags, OPTIMIZE_CHECKBOX_EFFECTRELOCATION_EAx, BITPOS_CHECKBOX_EFFECTRELOCATION_EAx); BITTOCHECKBOX(flags, OPTIMIZE_CHECKBOX_EFFECTRELOCATION_EBx, BITPOS_CHECKBOX_EFFECTRELOCATION_EBx); BITTOCHECKBOX(flags, OPTIMIZE_CHECKBOX_EFFECTRELOCATION_Pxx, BITPOS_CHECKBOX_EFFECTRELOCATION_Pxx); break; } } update(false); } MilkyTracker-1.02.00/src/tracker/SectionOptimize.h000066400000000000000000000050661324432207300220020ustar00rootroot00000000000000/* * tracker/SectionOptimize.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * SectionOptimize.h * MilkyTracker * * Created by Peter Barth on 17.11.05. * */ #ifndef SECTIONOPTIMIZE__H #define SECTIONOPTIMIZE__H #include "BasicTypes.h" #include "Event.h" #include "SectionUpperLeft.h" #include "PatternEditorTools.h" class PPControl; class Tracker; class DialogListBox; class SectionOptimize : public SectionUpperLeft { private: void refresh(); void optimize(bool evaluate = false); PatternEditorTools::OperandOptimizeParameters getOptimizeParameters(); void zeroOperandsTrack(); void zeroOperandsPattern(); void zeroOperandsSong(); void zeroOperandsBlock(); void fillOperandsTrack(); void fillOperandsPattern(); void fillOperandsSong(); void fillOperandsBlock(); PatternEditorTools::RelocateParameters getRelocateParameters(); void relocateCommandsTrack(); void relocateCommandsPattern(); void relocateCommandsSong(); void relocateCommandsBlock(); struct OptimizeSamplesResult { pp_int32 numConvertedSamples; pp_int32 numMinimizedSamples; OptimizeSamplesResult() : numConvertedSamples(0), numMinimizedSamples(0) { } }; OptimizeSamplesResult optimizeSamples(bool convertTo8Bit, bool minimize, bool evaluate); public: SectionOptimize(Tracker& tracker); virtual ~SectionOptimize(); // Derived from SectionAbstract virtual pp_int32 handleEvent(PPObject* sender, PPEvent* event); virtual void init() { SectionUpperLeft::init(); } virtual void init(pp_int32 x, pp_int32 y); virtual void show(bool bShow) { SectionUpperLeft::show(bShow); } virtual void update(bool repaint = true); static pp_uint32 getNumFlagGroups(); static pp_uint32 getDefaultFlags(pp_uint32 groupIndex); pp_uint32 getOptimizeCheckBoxFlags(pp_uint32 groupIndex); void setOptimizeCheckBoxFlags(pp_uint32 groupIndex, pp_uint32 flags); friend class Tracker; }; #endif MilkyTracker-1.02.00/src/tracker/SectionQuickOptions.cpp000066400000000000000000000350401324432207300231600ustar00rootroot00000000000000/* * tracker/SectionQuickOptions.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * SectionQuickOptions.cpp * MilkyTracker * * Created by Peter Barth on 10.05.05. * */ #include "SectionQuickOptions.h" #include "Tracker.h" #include "TrackerConfig.h" #include "PlayerController.h" #include "PlayerMaster.h" #include "PlayerSTD.h" #include "CheckBox.h" #include "CheckBoxLabel.h" #include "RadioGroup.h" #include "StaticText.h" #include "Seperator.h" #include "Container.h" #include "DialogPanning.h" #include "PatternEditorControl.h" #include "ControlIDs.h" enum ControlIDs { CONTAINER_QUICKOPTIONS = 7000, QUICKOPTIONS_BUTTON_EXIT, QUICKOPTIONS_RADIOGROUP_PLAYBACKMODE, QUICKOPTIONS_STATICTEXT_ALLOW8XX, QUICKOPTIONS_CHECKBOX_ALLOW8XX, QUICKOPTIONS_STATICTEXT_ALLOWE8X, QUICKOPTIONS_CHECKBOX_ALLOWE8X, QUICKOPTIONS_STATICTEXT_PTPERIODRANGE, QUICKOPTIONS_CHECKBOX_PTPERIODRANGE, QUICKOPTIONS_STATICTEXT_SETDEFAULTPANNING, QUICKOPTIONS_BUTTON_SETDEFAULTPANNING, QUICKOPTIONS_STATICTEXT_KEEPOPTIONS, QUICKOPTIONS_CHECKBOX_KEEPOPTIONS, QUICKOPTIONS_CHECKBOX_FOLLOWSONG }; SectionQuickOptions::SectionQuickOptions(Tracker& theTracker) : SectionUpperLeft(theTracker), checkBoxKeepSettings(NULL), dialogPanning(NULL), oldPanning(NULL) { } SectionQuickOptions::~SectionQuickOptions() { delete[] oldPanning; delete dialogPanning; } pp_int32 SectionQuickOptions::handleEvent(PPObject* sender, PPEvent* event) { bool b; if (event->getID() == eCommand || event->getID() == eCommandRepeat) { switch (reinterpret_cast(sender)->getID()) { case QUICKOPTIONS_BUTTON_EXIT: if (event->getID() != eCommand) break; show(false); break; case QUICKOPTIONS_CHECKBOX_ALLOW8XX: if (event->getID() != eCommand) break; b = tracker.playerController->isPlayModeOptionEnabled(PlayerController::PlayModeOptionPanning8xx); tracker.playerController->enablePlayModeOption(PlayerController::PlayModeOptionPanning8xx, !b); break; case QUICKOPTIONS_CHECKBOX_ALLOWE8X: if (event->getID() != eCommand) break; b = tracker.playerController->isPlayModeOptionEnabled(PlayerController::PlayModeOptionPanningE8x); tracker.playerController->enablePlayModeOption(PlayerController::PlayModeOptionPanningE8x, !b); break; case QUICKOPTIONS_CHECKBOX_PTPERIODRANGE: if (event->getID() != eCommand) break; b = tracker.playerController->isPlayModeOptionEnabled(PlayerController::PlayModeOptionForcePTPitchLimit); tracker.playerController->enablePlayModeOption(PlayerController::PlayModeOptionForcePTPitchLimit, !b); tracker.getPatternEditorControl()->setPtNoteLimit(!b); break; case QUICKOPTIONS_BUTTON_SETDEFAULTPANNING: { if (event->getID() != eCommand) break; saveOldPanning(); for (pp_int32 i = 0; i < TrackerConfig::numPlayerChannels; i++) dialogPanning->setPanning((pp_uint8)i, tracker.playerController->getPanning((pp_uint8)i), false); dialogPanning->show(true); break; } case QUICKOPTIONS_CHECKBOX_KEEPOPTIONS: if (event->getID() != eCommand) break; if (checkBoxKeepSettings->isChecked()) tracker.showMessageBoxSized(MESSAGEBOX_UNIVERSAL, "Play mode auto-switching is now OFF\nRemember, these settings will now\napply to all loaded modules.", Tracker::MessageBox_OK); break; } } else if (event->getID() == eSelection) { switch (reinterpret_cast(sender)->getID()) { case QUICKOPTIONS_RADIOGROUP_PLAYBACKMODE: switch (reinterpret_cast(sender)->getChoice()) { case 0: tracker.playerController->switchPlayMode(PlayerController::PlayMode_FastTracker2, !keepSettings()); static_cast(sectionContainer)->getControlByID(QUICKOPTIONS_CHECKBOX_PTPERIODRANGE)->enable(false); static_cast(sectionContainer)->getControlByID(QUICKOPTIONS_STATICTEXT_PTPERIODRANGE)->enable(false); tracker.getPatternEditorControl()->setPtNoteLimit(false); static_cast(sectionContainer)->getControlByID(QUICKOPTIONS_STATICTEXT_SETDEFAULTPANNING)->enable(false); static_cast(sectionContainer)->getControlByID(QUICKOPTIONS_BUTTON_SETDEFAULTPANNING)->enable(false); break; case 1: tracker.playerController->switchPlayMode(PlayerController::PlayMode_ProTracker2, !keepSettings()); static_cast(sectionContainer)->getControlByID(QUICKOPTIONS_CHECKBOX_PTPERIODRANGE)->enable(true); static_cast(sectionContainer)->getControlByID(QUICKOPTIONS_STATICTEXT_PTPERIODRANGE)->enable(true); tracker.getPatternEditorControl()->setPtNoteLimit(true); static_cast(sectionContainer)->getControlByID(QUICKOPTIONS_STATICTEXT_SETDEFAULTPANNING)->enable(true); static_cast(sectionContainer)->getControlByID(QUICKOPTIONS_BUTTON_SETDEFAULTPANNING)->enable(true); break; case 2: tracker.playerController->switchPlayMode(PlayerController::PlayMode_ProTracker3, !keepSettings()); static_cast(sectionContainer)->getControlByID(QUICKOPTIONS_CHECKBOX_PTPERIODRANGE)->enable(true); static_cast(sectionContainer)->getControlByID(QUICKOPTIONS_STATICTEXT_PTPERIODRANGE)->enable(true); tracker.getPatternEditorControl()->setPtNoteLimit(true); static_cast(sectionContainer)->getControlByID(QUICKOPTIONS_STATICTEXT_SETDEFAULTPANNING)->enable(true); static_cast(sectionContainer)->getControlByID(QUICKOPTIONS_BUTTON_SETDEFAULTPANNING)->enable(true); break; default: ASSERT(false); } update(); break; } } else if (event->getID() == eValueChanged && reinterpret_cast(sender) == dialogPanning) { pp_uint32 i = *(reinterpret_cast(event->getDataPtr())); tracker.playerController->setPanning((pp_uint8)i, dialogPanning->getPanning(i)); } else if (event->getID() == eCanceled) { if (reinterpret_cast(sender) == dialogPanning) { restoreOldPanning(); } } return 0; } void SectionQuickOptions::init(pp_int32 px, pp_int32 py) { PPCheckBox* checkBox; PPScreen* screen = tracker.screen; if (dialogPanning == NULL) dialogPanning = new DialogPanning(screen, this, TrackerConfig::numPlayerChannels); PPContainer* container = new PPContainer(CONTAINER_QUICKOPTIONS, tracker.screen, this, PPPoint(px, py), PPSize(320,UPPERLEFTSECTIONHEIGHT), false); container->setColor(TrackerConfig::colorThemeMain); tracker.screen->addControl(container); container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(px + 2, py + 2), "Quick Options (experts only)", true, true)); pp_int32 buttonWidth = 8*4+4; pp_int32 buttonHeight = 11; pp_int32 x = px+container->getSize().width-(buttonWidth+4); pp_int32 y = py+container->getSize().height-(buttonHeight+4); container->addControl(new PPSeperator(0, screen, PPPoint(x - 6, y - 4), 4 + buttonHeight + 3, TrackerConfig::colorThemeMain, false)); container->addControl(new PPSeperator(0, screen, PPPoint(px + 2, y - 4), container->getSize().width - 4, TrackerConfig::colorThemeMain, true)); PPButton* button = new PPButton(QUICKOPTIONS_BUTTON_EXIT, screen, this, PPPoint(x, y), PPSize(buttonWidth,buttonHeight)); button->setText("Exit"); container->addControl(button); pp_int32 x2 = px+4; pp_int32 y2 = py+4+12; y+=2; checkBoxKeepSettings = new PPCheckBox(QUICKOPTIONS_CHECKBOX_KEEPOPTIONS, screen, this, PPPoint(x2 + 2 + 31 * 8 + 4, y - 1)); checkBoxKeepSettings->checkIt(false); container->addControl(new PPCheckBoxLabel(QUICKOPTIONS_STATICTEXT_KEEPOPTIONS, NULL, this, PPPoint(x2 + 2, y), "Keep settings (auto-adjust OFF)", checkBoxKeepSettings, true)); container->addControl(checkBoxKeepSettings); // add playback modes container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x2, y2), "Playback mode:", true)); y2+=10; PPRadioGroup* radioGroup = new PPRadioGroup(QUICKOPTIONS_RADIOGROUP_PLAYBACKMODE, screen, this, PPPoint(x2+2, y2), PPSize(17*8, 3*14)); radioGroup->setColor(TrackerConfig::colorThemeMain); radioGroup->addItem("Fasttracker 2.x"); radioGroup->addItem("Protracker 2.x"); radioGroup->addItem("Protracker 3.x"); container->addControl(radioGroup); y2+=radioGroup->getSize().height; x2 += radioGroup->getSize().width+6; y2 = py + 16; container->addControl(new PPSeperator(0, screen, PPPoint(x2 - 4, y2 - 2), container->getLocation().y + container->getSize().height - y2 - 17, TrackerConfig::colorThemeMain, false)); y2 = py+4+12; x2+=2; container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x2, y2), "Advanced:", true)); y2+=15; checkBox = new PPCheckBox(QUICKOPTIONS_CHECKBOX_ALLOW8XX, screen, this, PPPoint(x2 + 19 * 8 + 4, y2 - 1)); container->addControl(new PPCheckBoxLabel(QUICKOPTIONS_STATICTEXT_ALLOW8XX, NULL, this, PPPoint(x2, y2), "Allow 8xx panning", checkBox, true)); container->addControl(checkBox); y2+=13; checkBox = new PPCheckBox(QUICKOPTIONS_CHECKBOX_ALLOWE8X, screen, this, PPPoint(x2 + 19*8 + 4, y2-1)); container->addControl(new PPCheckBoxLabel(QUICKOPTIONS_STATICTEXT_ALLOWE8X, NULL, this, PPPoint(x2, y2), "Allow E8x panning", checkBox, true)); container->addControl(checkBox); y2+=13; checkBox = new PPCheckBox(QUICKOPTIONS_CHECKBOX_PTPERIODRANGE, screen, this, PPPoint(x2 + 19*8 + 4, y2-1)); container->addControl(new PPCheckBoxLabel(QUICKOPTIONS_STATICTEXT_PTPERIODRANGE, NULL, this, PPPoint(x2, y2), "PT 3 octaves limit", checkBox, true)); container->addControl(checkBox); y2+=13; container->addControl(new PPStaticText(QUICKOPTIONS_STATICTEXT_SETDEFAULTPANNING, NULL, NULL, PPPoint(x2, y2), "Default panning", true)); button = new PPButton(QUICKOPTIONS_BUTTON_SETDEFAULTPANNING, screen, this, PPPoint(x2 + 19*8 - 18, y2-1), PPSize(4*8,buttonHeight)); button->setText("Set"); container->addControl(button); sectionContainer = container; initialised = true; showSection(false); } void SectionQuickOptions::updateControlStates() { switch (tracker.playerController->getPlayMode()) { case PlayerBase::PlayMode_ProTracker2: static_cast(sectionContainer)->getControlByID(QUICKOPTIONS_STATICTEXT_PTPERIODRANGE)->enable(true); static_cast(sectionContainer)->getControlByID(QUICKOPTIONS_CHECKBOX_PTPERIODRANGE)->enable(true); static_cast(sectionContainer)->getControlByID(QUICKOPTIONS_STATICTEXT_SETDEFAULTPANNING)->enable(true); static_cast(sectionContainer)->getControlByID(QUICKOPTIONS_BUTTON_SETDEFAULTPANNING)->enable(true); break; case PlayerBase::PlayMode_ProTracker3: static_cast(sectionContainer)->getControlByID(QUICKOPTIONS_STATICTEXT_PTPERIODRANGE)->enable(true); static_cast(sectionContainer)->getControlByID(QUICKOPTIONS_CHECKBOX_PTPERIODRANGE)->enable(true); static_cast(sectionContainer)->getControlByID(QUICKOPTIONS_STATICTEXT_SETDEFAULTPANNING)->enable(true); static_cast(sectionContainer)->getControlByID(QUICKOPTIONS_BUTTON_SETDEFAULTPANNING)->enable(true); break; case PlayerBase::PlayMode_FastTracker2: static_cast(sectionContainer)->getControlByID(QUICKOPTIONS_STATICTEXT_PTPERIODRANGE)->enable(false); static_cast(sectionContainer)->getControlByID(QUICKOPTIONS_CHECKBOX_PTPERIODRANGE)->enable(false); static_cast(sectionContainer)->getControlByID(QUICKOPTIONS_STATICTEXT_SETDEFAULTPANNING)->enable(false); static_cast(sectionContainer)->getControlByID(QUICKOPTIONS_BUTTON_SETDEFAULTPANNING)->enable(false); break; default: ASSERT(false); } } void SectionQuickOptions::show(bool bShow) { if (bShow) { updateControlStates(); } SectionUpperLeft::show(bShow); } void SectionQuickOptions::update(bool repaint/* = true*/) { PPContainer* container = static_cast(sectionContainer); PPRadioGroup* radioGroup = static_cast(container->getControlByID(QUICKOPTIONS_RADIOGROUP_PLAYBACKMODE)); ASSERT(radioGroup); switch (tracker.playerController->getPlayMode()) { case PlayerBase::PlayMode_ProTracker2: radioGroup->setChoice(1); break; case PlayerBase::PlayMode_ProTracker3: radioGroup->setChoice(2); break; case PlayerBase::PlayMode_FastTracker2: radioGroup->setChoice(0); break; default: ASSERT(false); } PPCheckBox* checkBox = static_cast(container->getControlByID(QUICKOPTIONS_CHECKBOX_ALLOW8XX)); checkBox->checkIt(tracker.playerController->isPlayModeOptionEnabled(PlayerController::PlayModeOptionPanning8xx)); checkBox = static_cast(container->getControlByID(QUICKOPTIONS_CHECKBOX_ALLOWE8X)); checkBox->checkIt(tracker.playerController->isPlayModeOptionEnabled(PlayerController::PlayModeOptionPanningE8x)); checkBox = static_cast(container->getControlByID(QUICKOPTIONS_CHECKBOX_PTPERIODRANGE)); checkBox->checkIt(tracker.playerController->isPlayModeOptionEnabled(PlayerController::PlayModeOptionForcePTPitchLimit)); if (repaint) tracker.screen->paintControl(container); } void SectionQuickOptions::notifyTabSwitch() { if (sectionContainer->isVisible()) { updateControlStates(); update(false); } } bool SectionQuickOptions::setKeepSettings(bool b) { if (checkBoxKeepSettings) { checkBoxKeepSettings->checkIt(b); return true; } return false; } bool SectionQuickOptions::keepSettings() { if (checkBoxKeepSettings) { return checkBoxKeepSettings->isChecked(); } return false; } void SectionQuickOptions::saveOldPanning() { if (oldPanning == NULL) oldPanning = new pp_uint8[TrackerConfig::numPlayerChannels]; for (pp_int32 i = 0; i < TrackerConfig::numPlayerChannels; i++) oldPanning[i] = tracker.playerController->getPanning((pp_uint8)i); } void SectionQuickOptions::restoreOldPanning() { if (oldPanning == NULL) return; for (pp_int32 i = 0; i < TrackerConfig::numPlayerChannels; i++) tracker.playerController->setPanning((pp_uint8)i, oldPanning[i]); } MilkyTracker-1.02.00/src/tracker/SectionQuickOptions.h000066400000000000000000000033321324432207300226240ustar00rootroot00000000000000/* * tracker/SectionQuickOptions.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * SectionQuickOptions.h * MilkyTracker * * Created by Peter Barth on 10.05.05. * */ #ifndef SECTIONQUICKOPTIONS__H #define SECTIONQUICKOPTIONS__H #include "BasicTypes.h" #include "Event.h" #include "SectionUpperLeft.h" class SectionQuickOptions : public SectionUpperLeft { private: class PPCheckBox* checkBoxKeepSettings; class DialogPanning* dialogPanning; pp_uint8* oldPanning; public: SectionQuickOptions(class Tracker& tracker); virtual ~SectionQuickOptions(); // Derived from SectionAbstract virtual pp_int32 handleEvent(PPObject* sender, PPEvent* event); virtual void init() { SectionUpperLeft::init(); } virtual void init(pp_int32 x, pp_int32 y); virtual void show(bool bShow); virtual void update(bool repaint = true); virtual void notifyTabSwitch(); bool setKeepSettings(bool b); bool keepSettings(); private: void updateControlStates(); void saveOldPanning(); void restoreOldPanning(); friend class Tracker; }; #endif MilkyTracker-1.02.00/src/tracker/SectionSamples.cpp000066400000000000000000001340341324432207300221370ustar00rootroot00000000000000/* * tracker/SectionSamples.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * SectionSamples.cpp * MilkyTracker * * Created by Peter Barth on 15.04.05. * */ #include "SectionSamples.h" #include "PPUI.h" #include "TransparentContainer.h" #include "Tracker.h" #include "TrackerConfig.h" #include "ModuleEditor.h" #include "SamplePlayer.h" #include "PatternEditorControl.h" #include "SampleEditorControl.h" #include "SectionInstruments.h" #include "DialogBase.h" // OS Interface #include "PPOpenPanel.h" #include "PPSavePanel.h" #include "ControlIDs.h" enum ControlIDs { STATICTEXT_DISPLAY = 0xF000, STATICTEXT_LENGTH, STATICTEXT_REPSTART, STATICTEXT_REPLEN, BUTTON_SHOWRANGE, BUTTON_FLIPNUMBERFORMAT, // Only low-res CONTAINER_SHOWCONTEXTMENU, BUTTON_SHOWCONTEXTMENU }; // Class which responds to message box clicks class DialogResponderSamples : public DialogResponder { private: SectionSamples& section; public: DialogResponderSamples(SectionSamples& section) : section(section) { } virtual pp_int32 ActionOkay(PPObject* sender) { switch (reinterpret_cast(sender)->getID()) { case MESSAGEBOX_CLEARSAMPLE: section.getSampleEditorControl()->getSampleEditor()->clearSample(); break; case MESSAGEBOX_CROPSAMPLE: section.getSampleEditorControl()->getSampleEditor()->cropSample(); break; case MESSAGEBOX_MINIMIZESAMPLE: section.getSampleEditorControl()->getSampleEditor()->minimizeSample(); break; case MESSAGEBOX_CONVERTSAMPLE: section.getSampleEditorControl()->getSampleEditor()->convertSampleResolution(true); section.getSampleEditorControl()->showAll(); break; } return 0; } virtual pp_int32 ActionNo(PPObject* sender) { switch (reinterpret_cast(sender)->getID()) { case MESSAGEBOX_CONVERTSAMPLE: section.getSampleEditorControl()->getSampleEditor()->convertSampleResolution(false); section.getSampleEditorControl()->showAll(); break; } return 0; } }; SectionSamples::SectionSamples(Tracker& theTracker) : SectionAbstract(theTracker, NULL, new DialogResponderSamples(*this)), containerEntire(NULL), visible(false), sampleEditorControl(NULL), currentSamplePlayNote(ModuleEditor::MAX_NOTE/2), showRangeOffsets(false), offsetFormat(0) { } SectionSamples::~SectionSamples() { } pp_int32 SectionSamples::handleEvent(PPObject* sender, PPEvent* event) { PPScreen* screen = tracker.screen; ModuleEditor* moduleEditor = tracker.moduleEditor; SampleEditor* sampleEditor = sampleEditorControl->getSampleEditor(); if (event->getID() == eUpdateChanged) { tracker.updateWindowTitle(); } else if (event->getID() == eCommand || event->getID() == eCommandRepeat) { switch (reinterpret_cast(sender)->getID()) { // load sample case BUTTON_SAMPLE_LOAD: { if (event->getID() != eCommand) break; tracker.loadType(FileTypes::FileTypeSongAllSamples); break; } // save sample case BUTTON_SAMPLE_SAVE: { if (event->getID() != eCommand) break; if (isEmptySample()) tracker.showMessageBox(MESSAGEBOX_UNIVERSAL, "Sample is empty.", Tracker::MessageBox_OK); else tracker.saveType(tracker.getCurrentSelectedSampleSaveType()); break; } case BUTTON_SAMPLE_PLAY_UP: if (currentSamplePlayNote < 95) currentSamplePlayNote++; refresh(); break; case BUTTON_SAMPLE_PLAY_DOWN: if (currentSamplePlayNote > 0) currentSamplePlayNote--; refresh(); break; case BUTTON_SAMPLE_PLAY_WAVE: { SamplePlayer samplePlayer(*moduleEditor, *tracker.playerController); samplePlayer.playCurrentSample(currentSamplePlayNote); break; } case BUTTON_SAMPLE_PLAY_RANGE: { SamplePlayer samplePlayer(*moduleEditor, *tracker.playerController); samplePlayer.playCurrentSampleSelectionRange(currentSamplePlayNote); break; } case BUTTON_SAMPLE_PLAY_DISPLAY: { SamplePlayer samplePlayer(*moduleEditor, *tracker.playerController); samplePlayer.playSample(*sampleEditor->getSample(), currentSamplePlayNote, sampleEditorControl->getCurrentPosition(), sampleEditorControl->getCurrentPosition() + sampleEditorControl->getCurrentDisplayRange()); break; } case BUTTON_SAMPLE_PLAY_STOP: { SamplePlayer samplePlayer(*moduleEditor, *tracker.playerController); samplePlayer.stopSamplePlayback(); break; } case BUTTON_SAMPLE_RANGE_SHOW: if (event->getID() != eCommand) break; sampleEditorControl->showRange(); refresh(); break; case BUTTON_SAMPLE_RANGE_ALL: if (event->getID() != eCommand) break; sampleEditorControl->rangeAll(true); break; case BUTTON_SAMPLE_RANGE_CLEAR: sampleEditorControl->rangeClear(true); break; case BUTTON_SAMPLE_RANGE_ZOOMOUT: if (event->getID() != eCommand) break; sampleEditorControl->zoomOut(); refresh(); break; case BUTTON_SAMPLE_RANGE_SHOWALL: if (event->getID() != eCommand) break; sampleEditorControl->showAll(); refresh(); break; case BUTTON_SAMPLE_APPLY_LASTFILTER: if (event->getID() != eCommand) break; sampleEditor->tool_applyLastFilter(); break; case BUTTON_SAMPLE_UNDO: if (event->getID() != eCommand) break; sampleEditor->undo(); break; case BUTTON_SAMPLE_REDO: if (event->getID() != eCommand) break; sampleEditor->redo(); break; case BUTTON_SAMPLE_EDIT_CUT: if (event->getID() != eCommand) break; sampleEditor->cut(); break; case BUTTON_SAMPLE_EDIT_COPY: if (event->getID() != eCommand) break; sampleEditor->copy(); break; case BUTTON_SAMPLE_EDIT_PASTE: if (event->getID() != eCommand) break; sampleEditor->paste(); break; case BUTTON_SAMPLE_EDIT_REPSTARTPLUS: if (showRangeOffsets) { sampleEditorControl->increaseRangeStart(); refresh(); } else sampleEditor->increaseRepeatStart(); break; case BUTTON_SAMPLE_EDIT_REPSTARTMINUS: if (showRangeOffsets) { sampleEditorControl->decreaseRangeStart(); refresh(); } else sampleEditor->decreaseRepeatStart(); break; case BUTTON_SAMPLE_EDIT_REPLENPLUS: if (showRangeOffsets) { sampleEditorControl->increaseRangeEnd(); refresh(); } else sampleEditor->increaseRepeatLength(); break; case BUTTON_SAMPLE_EDIT_REPLENMINUS: if (showRangeOffsets) { sampleEditorControl->decreaseRangeEnd(); refresh(); } else sampleEditor->decreaseRepeatLength(); break; case BUTTON_SAMPLE_EDIT_CLEAR: { if (event->getID() != eCommand) break; handleClearSample(); break; } case BUTTON_SAMPLE_EDIT_MINIMIZE: { if (event->getID() != eCommand) break; handleMinimizeSample(); break; } case BUTTON_SAMPLE_EDIT_CROP: { if (event->getID() != eCommand) break; handleCropSample(); break; } case BUTTON_SAMPLE_EDIT_VOL: { if (event->getID() != eCommand) break; getSampleEditorControl()->invokeSetSampleVolume(); break; } case BUTTON_SAMPLE_EDIT_DRAW: { if (event->getID() != eCommand) break; getSampleEditorControl()->setDrawMode(!getSampleEditorControl()->getDrawMode()); PPButton* button = reinterpret_cast(sender); button->setPressed(getSampleEditorControl()->getDrawMode()); screen->paintControl(button); break; } case BUTTON_SAMPLE_ZOOM_PLUS: getSampleEditorControl()->scrollWheelZoomIn(); break; case BUTTON_SAMPLE_ZOOM_MINUS: getSampleEditorControl()->scrollWheelZoomOut(); break; case STATICTEXT_REPSTART: case STATICTEXT_REPLEN: case STATICTEXT_SAMPLE_REPSTART: case STATICTEXT_SAMPLE_REPLENGTH: case BUTTON_SHOWRANGE: if (event->getID() != eCommand) break; showRangeOffsets = !showRangeOffsets; refresh(); break; case BUTTON_FLIPNUMBERFORMAT: if (event->getID() != eCommand) break; toggleOffsetFormat(); refresh(); break; case BUTTON_SHOWCONTEXTMENU: if (event->getID() != eCommand) break; getSampleEditorControl()->invokeContextMenu(reinterpret_cast(sender)->getLocation(), false); break; } } else if (event->getID() == eSelection) { switch (reinterpret_cast(sender)->getID()) { case RADIOGROUP_SAMPLE_RESTYPE: { handleConvertSampleResolution(); break; } case RADIOGROUP_SAMPLE_LOOPTYPE: { sampleEditor->setLoopType((mp_ubyte)((reinterpret_cast(sender)->getChoice())&3)); refresh(); break; } } } else if (event->getID() == eUpdated) { switch (reinterpret_cast(sender)->getID()) { case SAMPLE_EDITOR: { // redraw sample editor realUpdate(true, true, false); break; } } } else if (event->getID() == eLMouseDown) { switch (reinterpret_cast(sender)->getID()) { // Play sample preview from offset position case SAMPLE_EDITOR: { SamplePlayer samplePlayer(*moduleEditor, *tracker.playerController); samplePlayer.playCurrentSampleFromOffset(event->getMetaData(), currentSamplePlayNote); break; } } } else if (event->getID() == eLMouseUp) { switch (reinterpret_cast(sender)->getID()) { // Stop sample preview case SAMPLE_EDITOR: { SamplePlayer samplePlayer(*moduleEditor, *tracker.playerController); samplePlayer.stopSamplePlayback(); break; } } } return 0; } void SectionSamples::init() { init(0, tracker.MAXEDITORHEIGHT()-tracker.SAMPLESECTIONDEFAULTHEIGHT()); } void SectionSamples::init(pp_int32 x, pp_int32 y) { PPScreen* screen = tracker.screen; containerEntire = new PPTransparentContainer(CONTAINER_ENTIRESMPSECTION, screen, this, PPPoint(0, 0), PPSize(screen->getWidth(), screen->getHeight())); #ifndef __LOWRES__ pp_int32 conSize1 = (pp_int32)(screen->getWidth()*0.1359375f); pp_int32 conSize2 = (pp_int32)(screen->getWidth()*0.215625f); pp_int32 conSize3 = (pp_int32)(screen->getWidth()*0.0734375f); pp_int32 conSize4 = (pp_int32)(screen->getWidth()*0.075f); pp_int32 conSize5 = (pp_int32)(screen->getWidth()*0.128125f); pp_int32 conSize6 = (pp_int32)(screen->getWidth()*0.103125f); pp_int32 conSize7 = (pp_int32)(screen->getWidth()*0.2525f); pp_int32 dHeight = 12*4+8; pp_int32 bHeight = (dHeight-4)/3; pp_int32 bHeightm = bHeight-1; pp_int32 cHeight = tracker.SAMPLESECTIONDEFAULTHEIGHT() - dHeight - 1; // sample editor PPContainer* sampleEditorContainer = new PPContainer(CONTAINER_SAMPLEEDITOR, screen, this, PPPoint(x, y), PPSize(screen->getWidth(), cHeight), false); sampleEditorContainer->setColor(TrackerConfig::colorThemeMain); sampleEditorControl = new SampleEditorControl(SAMPLE_EDITOR, screen, this, PPPoint(x+2, y+2), PPSize(sampleEditorContainer->getSize().width-4, sampleEditorContainer->getSize().height-4)); sampleEditorControl->attachSampleEditor(tracker.moduleEditor->getSampleEditor()); sampleEditorControl->setBorderColor(TrackerConfig::colorThemeMain); sampleEditorContainer->addControl(sampleEditorControl); containerEntire->addControl(sampleEditorContainer); pp_int32 x2 = x; pp_int32 y2 = sampleEditorContainer->getSize().height + y; PPContainer* container = new PPContainer(CONTAINER_SAMPLE_PLAY, screen, this, PPPoint(x2, y2), PPSize(conSize1,dHeight), false); container->setColor(TrackerConfig::colorThemeMain); container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x2 + 4, y2 + 2), "Play:", true)); container->addControl(new PPStaticText(STATICTEXT_SAMPLE_PLAYNOTE, screen, this, PPPoint(x2 + 8, y2 + 2 + bHeight+2), "C-5", false)); pp_int32 size = (pp_int32)(conSize1*0.2183908045977f); pp_int32 size2 = (pp_int32)(conSize1*0.4367816091954f); pp_int32 size3 = (pp_int32)(conSize1/*0.2988505747126f*/*0.3218390804598f); PPButton* button = new PPButton(BUTTON_SAMPLE_PLAY_UP, screen, this, PPPoint(x2+size2, y2+2+bHeight), PPSize(size, bHeightm)); button->setText("Up"); container->addControl(button); button = new PPButton(BUTTON_SAMPLE_PLAY_DOWN, screen, this, PPPoint(x2+size2, y2+2+bHeight*2), PPSize(size, bHeightm+1)); button->setText("Dn"); container->addControl(button); button = new PPButton(BUTTON_SAMPLE_PLAY_STOP, screen, this, PPPoint(x2+2, y2+2+bHeight*2), PPSize(size2-3, bHeightm+1)); button->setText("Stop"); container->addControl(button); button = new PPButton(BUTTON_SAMPLE_PLAY_WAVE, screen, this, PPPoint(x2+2 + size+size2-1, y2+2), PPSize(size3, bHeightm)); button->setText("Wav"); container->addControl(button); button = new PPButton(BUTTON_SAMPLE_PLAY_RANGE, screen, this, PPPoint(x2+2 + size+size2-1, y2+2+bHeight), PPSize(size3, bHeightm)); button->setText("Rng"); container->addControl(button); button = new PPButton(BUTTON_SAMPLE_PLAY_DISPLAY, screen, this, PPPoint(x2+2 + size+size2-1, y2+2+bHeight*2), PPSize(size3, bHeightm+1)); button->setText("Dsp"); container->addControl(button); containerEntire->addControl(container); size = (conSize2-4)/2-1; x2+=container->getSize().width; container = new PPContainer(CONTAINER_SAMPLE_RANGE, screen, this, PPPoint(x2, y2), PPSize(conSize2,dHeight), false); container->setColor(TrackerConfig::colorThemeMain); button = new PPButton(BUTTON_SAMPLE_RANGE_SHOW, screen, this, PPPoint(x2+2, y2+2), PPSize(size, bHeightm)); button->setText("Show rng"); container->addControl(button); button = new PPButton(BUTTON_SAMPLE_RANGE_ALL, screen, this, PPPoint(x2+2, y2+2+bHeight), PPSize(size, bHeightm)); button->setText("Rng all"); container->addControl(button); pp_int32 h = button->getSize().width; button = new PPButton(BUTTON_SAMPLE_UNDO, screen, this, PPPoint(x2+2, y2+2+bHeight*2), PPSize((size>>1), bHeightm+1)); button->setText("Undo"); container->addControl(button); button = new PPButton(BUTTON_SAMPLE_REDO, screen, this, PPPoint(x2+2 + (size>>1)+1, y2+2+bHeight*2), PPSize(h-(size>>1)-1, bHeightm+1)); button->setText("Redo"); container->addControl(button); button = new PPButton(BUTTON_SAMPLE_RANGE_ZOOMOUT, screen, this, PPPoint(x2+2 + size+1, y2+2), PPSize(size, bHeightm)); button->setText("Zoom out"); container->addControl(button); button = new PPButton(BUTTON_SAMPLE_RANGE_SHOWALL, screen, this, PPPoint(x2+2 + size+1, y2+2+bHeight), PPSize(size, bHeightm)); button->setText("Show all"); container->addControl(button); button = new PPButton(BUTTON_SAMPLE_APPLY_LASTFILTER, screen, this, PPPoint(x2+2 + size+1, y2+2+bHeight*2), PPSize(size, bHeightm+1)); button->setText("Redo filter"); container->addControl(button); containerEntire->addControl(container); x2 += container->getSize().width; size = (conSize3-5); container = new PPContainer(CONTAINER_SAMPLE_EDIT1, screen, this, PPPoint(x2, y2), PPSize(conSize3,dHeight), false); container->setColor(TrackerConfig::colorThemeMain); button = new PPButton(BUTTON_SAMPLE_EDIT_CUT, screen, this, PPPoint(x2+2, y2+2), PPSize(size, bHeightm)); button->setText("Cut"); container->addControl(button); button = new PPButton(BUTTON_SAMPLE_EDIT_COPY, screen, this, PPPoint(x2+2, y2+2+bHeight), PPSize(size, bHeightm)); button->setText("Copy"); container->addControl(button); button = new PPButton(BUTTON_SAMPLE_EDIT_PASTE, screen, this, PPPoint(x2+2, y2+2+bHeight*2), PPSize(size, bHeightm+1)); button->setText("Paste"); container->addControl(button); containerEntire->addControl(container); x2 += container->getSize().width; size = (conSize4-5); container = new PPContainer(CONTAINER_SAMPLE_EDIT2, screen, this, PPPoint(x2, y2), PPSize(conSize4,dHeight), false); container->setColor(TrackerConfig::colorThemeMain); button = new PPButton(BUTTON_SAMPLE_EDIT_CROP, screen, this, PPPoint(x2+2, y2+2), PPSize(size, bHeightm)); button->setText("Crop"); container->addControl(button); button = new PPButton(BUTTON_SAMPLE_EDIT_VOL, screen, this, PPPoint(x2+2, y2+2+bHeight), PPSize(size, bHeightm)); button->setText("Vol"); container->addControl(button); button = new PPButton(BUTTON_SAMPLE_EDIT_DRAW, screen, this, PPPoint(x2+2, y2+2+bHeight*2), PPSize(size, bHeightm+1), true, true, false); button->setText("Draw"); container->addControl(button); containerEntire->addControl(container); x2+=container->getSize().width; //y2+=container->getSize().height; container = new PPContainer(CONTAINER_SAMPLE_EDIT3, screen, this, PPPoint(x2, y2), PPSize(conSize5, 56), false); container->setColor(TrackerConfig::colorThemeMain); PPRadioGroup* radioGroup = new PPRadioGroup(RADIOGROUP_SAMPLE_LOOPTYPE, screen, this, PPPoint(x2+1, y2-2), PPSize(conSize5-1, 4*14)); radioGroup->setColor(TrackerConfig::colorThemeMain); radioGroup->addItem("No loop"); radioGroup->addItem("Forward"); if (screen->getWidth() < 800) radioGroup->addItem("Bi-dir"); else radioGroup->addItem("Ping-pong"); radioGroup->addItem("One shot"); container->addControl(radioGroup); containerEntire->addControl(container); // load container pp_int32 ty = y2; x2+=container->getSize().width; container = new PPContainer(CONTAINER_SAMPLE_EDIT4, screen, this, PPPoint(x2, ty), PPSize(conSize6,27), false); container->setColor(TrackerConfig::colorThemeMain); radioGroup = new PPRadioGroup(RADIOGROUP_SAMPLE_RESTYPE, screen, this, PPPoint(x2+1, ty-2), PPSize(conSize6-1, 28)); radioGroup->setColor(TrackerConfig::colorThemeMain); radioGroup->addItem("8-bit"); radioGroup->addItem("16-bit"); container->addControl(radioGroup); containerEntire->addControl(container); ty+=container->getSize().height; // ----------- load/save size = (conSize6-4)/2-1; container = new PPContainer(CONTAINER_SAMPLE_LOADSAVE, screen, this, PPPoint(x2, ty), PPSize(conSize6,29), false); container->setColor(TrackerConfig::colorThemeMain); button = new PPButton(BUTTON_SAMPLE_LOAD, screen, this, PPPoint(x2+2, ty+2), PPSize(size, 12)); button->setText("Load"); container->addControl(button); size2 = (container->getLocation().x + container->getSize().width) - (x2+2+size+1) - 3; button = new PPButton(BUTTON_SAMPLE_SAVE, screen, this, PPPoint(x2+2+size+1, ty+2), PPSize(size2, 12)); button->setText("Save"); container->addControl(button); // ----------- exit pp_int32 y3 = ty + 13; button = new PPButton(BUTTON_SAMPLEEDITOR_EXIT, screen, &tracker, PPPoint(x2+2, y3+2), PPSize(conSize6-5, 12)); button->setText("Exit"); container->addControl(button); containerEntire->addControl(container); x2+=container->getSize().width; conSize7 = screen->getWidth()-x2; container = new PPContainer(CONTAINER_SAMPLE_EDIT5, screen, this, PPPoint(x2, y2), PPSize(conSize7,56), false); container->setColor(TrackerConfig::colorThemeMain); container->addControl(new PPStaticText(STATICTEXT_DISPLAY, NULL, NULL, PPPoint(x2 + 2 + 2, y2 + 4), screen->getWidth() < 800 ? "Displ." : "Display", true)); container->addControl(new PPStaticText(STATICTEXT_LENGTH, NULL, NULL, PPPoint(x2 + 2 + 2, y2 + 4+13), "Length", true)); container->addControl(new PPStaticText(STATICTEXT_REPSTART, screen, this, PPPoint(x2 + 2 + 2, y2 + 4+13*2), "Repeat", true)); container->addControl(new PPStaticText(STATICTEXT_REPLEN, screen, this, PPPoint(x2 + 2 + 2, y2 + 4+13*3), "Replen.", true)); x2 = screen->getWidth()-43-3 - 4 - 8*8; container->addControl(new PPStaticText(STATICTEXT_SAMPLE_DISPLAY, screen, this, PPPoint(x2, y2 + 4), "12345678", false)); container->addControl(new PPStaticText(STATICTEXT_SAMPLE_LENGTH, screen, this, PPPoint(x2, y2 + 4+13), "12345678", false)); container->addControl(new PPStaticText(STATICTEXT_SAMPLE_REPSTART, screen, this, PPPoint(x2, y2 + 4+13*2), "12345678", false)); container->addControl(new PPStaticText(STATICTEXT_SAMPLE_REPLENGTH, screen, this, PPPoint(x2, y2 + 4+13*3), "12345678", false)); x2 = screen->getWidth()-43-3; button = new PPButton(BUTTON_SAMPLE_EDIT_CLEAR, screen, this, PPPoint(x2, y2+2), PPSize(43, 12)); button->setText("Clear"); container->addControl(button); button = new PPButton(BUTTON_SAMPLE_EDIT_MINIMIZE, screen, this, PPPoint(x2, y2+2+13), PPSize(29, 12)); button->setText("Min"); container->addControl(button); button = new PPButton(BUTTON_FLIPNUMBERFORMAT, screen, this, PPPoint(x2+30, y2+2+13), PPSize(13, 12)); button->setColor(TrackerConfig::colorThemeMain); button->setTextColor(PPUIConfig::getInstance()->getColor(PPUIConfig::ColorStaticText)); button->setText("H"); container->addControl(button); button = new PPButton(BUTTON_SAMPLE_EDIT_REPSTARTPLUS, screen, this, PPPoint(x2, y2+2+13*2), PPSize(14, 12)); button->setText(TrackerConfig::stringButtonPlus); container->addControl(button); button = new PPButton(BUTTON_SAMPLE_EDIT_REPSTARTMINUS, screen, this, PPPoint(x2+15, y2+2+13*2), PPSize(14, 12)); button->setText(TrackerConfig::stringButtonMinus); container->addControl(button); button = new PPButton(BUTTON_SAMPLE_EDIT_REPLENPLUS, screen, this, PPPoint(x2, y2+2+13*3), PPSize(14, 12)); button->setText(TrackerConfig::stringButtonPlus); container->addControl(button); button = new PPButton(BUTTON_SAMPLE_EDIT_REPLENMINUS, screen, this, PPPoint(x2+15, y2+2+13*3), PPSize(14, 12)); button->setText(TrackerConfig::stringButtonMinus); container->addControl(button); button = new PPButton(BUTTON_SHOWRANGE, screen, this, PPPoint(x2+15+15, y2+2+13*2), PPSize(13, 12*2+1)); button->setColor(TrackerConfig::colorThemeMain); button->setTextColor(PPUIConfig::getInstance()->getColor(PPUIConfig::ColorStaticText)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Rng"); button->setVerticalText(true); container->addControl(button); containerEntire->addControl(container); #else // sample editor PPContainer* sampleEditorContainer = new PPContainer(CONTAINER_SAMPLEEDITOR, screen, this, PPPoint(x, y), PPSize(320, 92), false); sampleEditorContainer->setColor(TrackerConfig::colorThemeMain); sampleEditorControl = new SampleEditorControl(SAMPLE_EDITOR, screen, this, PPPoint(x+2, y+2), PPSize(316, 92-4)); sampleEditorControl->attachSampleEditor(tracker.moduleEditor->getSampleEditor()); sampleEditorControl->setBorderColor(TrackerConfig::colorThemeMain); sampleEditorContainer->addControl(sampleEditorControl); containerEntire->addControl(sampleEditorContainer); pp_int32 x2 = x; pp_int32 y2 = sampleEditorContainer->getSize().height + y; PPContainer* container = new PPContainer(CONTAINER_SAMPLE_PLAY, screen, this, PPPoint(x2, y2), PPSize(87,12*3+4), false); container->setColor(TrackerConfig::colorThemeMain); container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x2 + 4, y2 + 2), "Play:", true)); container->addControl(new PPStaticText(STATICTEXT_SAMPLE_PLAYNOTE, screen, this, PPPoint(x2 + 8, y2 + 2 + 14), "C-5", false)); PPButton* button = new PPButton(BUTTON_SAMPLE_PLAY_UP, screen, this, PPPoint(x2+38, y2+2+12), PPSize(18, 11)); button->setText("Up"); container->addControl(button); button = new PPButton(BUTTON_SAMPLE_PLAY_DOWN, screen, this, PPPoint(x2+38, y2+2+24), PPSize(18, 11)); button->setText("Dn"); container->addControl(button); button = new PPButton(BUTTON_SAMPLE_PLAY_STOP, screen, this, PPPoint(x2+2, y2+2+24), PPSize(34, 11)); button->setText("Stop"); container->addControl(button); button = new PPButton(BUTTON_SAMPLE_PLAY_WAVE, screen, this, PPPoint(x2+2 + 56, y2+2), PPSize(26, 11)); button->setText("Wav"); container->addControl(button); button = new PPButton(BUTTON_SAMPLE_PLAY_RANGE, screen, this, PPPoint(x2+2 + 56, y2+2+12), PPSize(26, 11)); button->setText("Rng"); container->addControl(button); button = new PPButton(BUTTON_SAMPLE_PLAY_DISPLAY, screen, this, PPPoint(x2+2 + 56, y2+2+12*2), PPSize(26, 11)); button->setText("Dsp"); container->addControl(button); containerEntire->addControl(container); x2+=container->getSize().width; container = new PPContainer(CONTAINER_SAMPLE_RANGE, screen, this, PPPoint(x2, y2), PPSize(66*2+6,12*3+4), false); container->setColor(TrackerConfig::colorThemeMain); button = new PPButton(BUTTON_SAMPLE_RANGE_SHOW, screen, this, PPPoint(x2+2, y2+2), PPSize(66, 11)); button->setText("Show rng"); container->addControl(button); button = new PPButton(BUTTON_SAMPLE_RANGE_ALL, screen, this, PPPoint(x2+2, y2+2+12), PPSize(66, 11)); button->setText("Rng all"); container->addControl(button); button = new PPButton(BUTTON_SAMPLE_UNDO, screen, this, PPPoint(x2+2, y2+2+12*2), PPSize(32, 11)); button->setText("Undo"); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); container->addControl(button); button = new PPButton(BUTTON_SAMPLE_REDO, screen, this, PPPoint(x2 + 2 + 33, y2+2+12*2), PPSize(33, 11)); button->setText("Redo"); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); container->addControl(button); button = new PPButton(BUTTON_SAMPLE_RANGE_ZOOMOUT, screen, this, PPPoint(x2+2 + 67, y2+2), PPSize(66, 11)); button->setText("Zoom out"); container->addControl(button); button = new PPButton(BUTTON_SAMPLE_RANGE_SHOWALL, screen, this, PPPoint(x2+2 + 67, y2+2+12), PPSize(66, 11)); button->setText("Show all"); container->addControl(button); button = new PPButton(BUTTON_SAMPLE_APPLY_LASTFILTER, screen, this, PPPoint(x2+2 + 67, y2+2+12*2), PPSize(66, 11)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Redo filter"); container->addControl(button); containerEntire->addControl(container); x2 += container->getSize().width; container = new PPContainer(CONTAINER_SAMPLE_EDIT1, screen, this, PPPoint(x2, y2), PPSize(47,12*3+4), false); container->setColor(TrackerConfig::colorThemeMain); button = new PPButton(BUTTON_SAMPLE_EDIT_CUT, screen, this, PPPoint(x2+2, y2+2), PPSize(42, 11)); button->setText("Cut"); container->addControl(button); button = new PPButton(BUTTON_SAMPLE_EDIT_COPY, screen, this, PPPoint(x2+2, y2+2+12), PPSize(42, 11)); button->setText("Copy"); container->addControl(button); button = new PPButton(BUTTON_SAMPLE_EDIT_PASTE, screen, this, PPPoint(x2+2, y2+2+12*2), PPSize(42, 11)); button->setText("Paste"); container->addControl(button); containerEntire->addControl(container); x2 += container->getSize().width; container = new PPContainer(CONTAINER_SAMPLE_EDIT2, screen, this, PPPoint(x2, y2), PPSize(48,12*3+4), false); container->setColor(TrackerConfig::colorThemeMain); button = new PPButton(BUTTON_SAMPLE_EDIT_CROP, screen, this, PPPoint(x2+2, y2+2), PPSize(43, 11)); button->setText("Crop"); container->addControl(button); button = new PPButton(BUTTON_SAMPLE_EDIT_VOL, screen, this, PPPoint(x2+2, y2+2+12), PPSize(43, 11)); button->setText("Vol"); container->addControl(button); button = new PPButton(BUTTON_SAMPLE_EDIT_DRAW, screen, this, PPPoint(x2+2, y2+2+12*2), PPSize(43, 11), true, true, false); button->setText("Draw"); container->addControl(button); containerEntire->addControl(container); x2 = x; y2+=container->getSize().height; container = new PPContainer(CONTAINER_SHOWCONTEXTMENU, screen, this, PPPoint(x2, y2), PPSize(17,52), false); container->setColor(TrackerConfig::colorThemeMain); button = new PPButton(BUTTON_SHOWCONTEXTMENU, screen, this, PPPoint(x2+2, y2+2), PPSize(12, container->getSize().height - 5)); button->setVerticalText(true); button->setText("Menu"); container->addControl(button); containerEntire->addControl(container); x2+=container->getSize().width; container = new PPContainer(CONTAINER_SAMPLE_EDIT3, screen, this, PPPoint(x2, y2), PPSize(65,52), false); container->setColor(TrackerConfig::colorThemeMain); PPRadioGroup* radioGroup = new PPRadioGroup(RADIOGROUP_SAMPLE_LOOPTYPE, screen, this, PPPoint(x2+3, y2+1), PPSize(65, 50)); radioGroup->setColor(TrackerConfig::colorThemeMain); radioGroup->setFont(PPFont::getFont(PPFont::FONT_TINY)); radioGroup->addItem("No loop"); radioGroup->addItem("Forward"); radioGroup->addItem("Ping-pong"); radioGroup->addItem("One shot"); container->addControl(radioGroup); containerEntire->addControl(container); x2+=container->getSize().width; container = new PPContainer(CONTAINER_SAMPLE_EDIT4, screen, this, PPPoint(x2, y2), PPSize(66-16,25), false); container->setColor(TrackerConfig::colorThemeMain); radioGroup = new PPRadioGroup(RADIOGROUP_SAMPLE_RESTYPE, screen, this, PPPoint(x2+1, y2-1), PPSize(65-16, 25)); radioGroup->setColor(TrackerConfig::colorThemeMain); radioGroup->setFont(PPFont::getFont(PPFont::FONT_TINY)); radioGroup->addItem("8-bit"); radioGroup->addItem("16-bit"); container->addControl(radioGroup); containerEntire->addControl(container); // Zoom container container = new PPContainer(CONTAINER_SAMPLE_ZOOMIN, screen, this, PPPoint(x2 + container->getSize().width, y2), PPSize(16,25), false); container->setColor(TrackerConfig::colorThemeMain); button = new PPButton(BUTTON_SAMPLE_ZOOM_PLUS, screen, this, PPPoint(container->getLocation().x+2, y2+2), PPSize(11, 10)); button->setText("+"); container->addControl(button); button = new PPButton(BUTTON_SAMPLE_ZOOM_MINUS, screen, this, PPPoint(button->getLocation().x, y2+2+button->getSize().height+1), PPSize(11, 9)); button->setText("-"); container->addControl(button); containerEntire->addControl(container); pp_int32 y3 = y2 + container->getSize().height; container = new PPContainer(CONTAINER_SAMPLE_LOADSAVE, screen, this, PPPoint(x2, y3), PPSize(66,27), false); container->setColor(TrackerConfig::colorThemeMain); button = new PPButton(MAINMENU_INSEDIT, screen, &tracker, PPPoint(x2+2, y3+2+12), PPSize(34, 10)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Ins.Ed."); container->addControl(button); button = new PPButton(BUTTON_SAMPLEEDITOR_EXIT, screen, &tracker, PPPoint(x2+2+35, y3+2+12), PPSize(26, 10)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Exit"); container->addControl(button); button = new PPButton(BUTTON_SAMPLE_LOAD, screen, this, PPPoint(x2+2, y3+2), PPSize(30, 11)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Load"); container->addControl(button); button = new PPButton(BUTTON_SAMPLE_SAVE, screen, this, PPPoint(x2+2+31, y3+2), PPSize(30, 11)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Save"); container->addControl(button); containerEntire->addControl(container); x2+=container->getSize().width; container = new PPContainer(CONTAINER_SAMPLE_EDIT5, screen, this, PPPoint(x2, y2), PPSize(172,52), false); container->setColor(TrackerConfig::colorThemeMain); container->addControl(new PPStaticText(STATICTEXT_DISPLAY, NULL, NULL, PPPoint(x2 + 2, y2 + 4), "Display", true)); container->addControl(new PPStaticText(STATICTEXT_LENGTH, NULL, NULL, PPPoint(x2 + 2, y2 + 4+12), "Length", true)); container->addControl(new PPStaticText(STATICTEXT_REPSTART, screen, this, PPPoint(x2 + 2, y2 + 4+12*2), "Repeat", true)); container->addControl(new PPStaticText(STATICTEXT_REPLEN, screen, this, PPPoint(x2 + 2, y2 + 4+12*3), "Replen.", true)); container->addControl(new PPStaticText(STATICTEXT_SAMPLE_DISPLAY, screen, this, PPPoint(x2 + 2 + 58, y2 + 4), "12345678", false)); container->addControl(new PPStaticText(STATICTEXT_SAMPLE_LENGTH, screen, this, PPPoint(x2 + 2 + 58, y2 + 4+12), "12345678", false)); container->addControl(new PPStaticText(STATICTEXT_SAMPLE_REPSTART, screen, this, PPPoint(x2 + 2 + 58, y2 + 4+12*2), "12345678", false)); container->addControl(new PPStaticText(STATICTEXT_SAMPLE_REPLENGTH, screen, this, PPPoint(x2 + 2 + 58, y2 + 4+12*3), "12345678", false)); button = new PPButton(BUTTON_SAMPLE_EDIT_CLEAR, screen, this, PPPoint(x2+126, y2+2), PPSize(43, 11)); button->setText("Clear"); container->addControl(button); button = new PPButton(BUTTON_SAMPLE_EDIT_MINIMIZE, screen, this, PPPoint(x2+126, y2+2+12), PPSize(27, 11)); button->setText("Min"); container->addControl(button); button = new PPButton(BUTTON_FLIPNUMBERFORMAT, screen, this, PPPoint(x2+126+28, y2+2+12), PPSize(15, 11)); button->setColor(TrackerConfig::colorThemeMain); button->setTextColor(PPUIConfig::getInstance()->getColor(PPUIConfig::ColorStaticText)); button->setText("H"); container->addControl(button); button = new PPButton(BUTTON_SAMPLE_EDIT_REPSTARTPLUS, screen, this, PPPoint(x2+126, y2+2+12*2), PPSize(13, 11)); button->setText(TrackerConfig::stringButtonPlus); container->addControl(button); button = new PPButton(BUTTON_SAMPLE_EDIT_REPSTARTMINUS, screen, this, PPPoint(x2+126+14, y2+2+12*2), PPSize(13, 11)); button->setText(TrackerConfig::stringButtonMinus); container->addControl(button); button = new PPButton(BUTTON_SAMPLE_EDIT_REPLENPLUS, screen, this, PPPoint(x2+126, y2+2+12*3), PPSize(13, 11)); button->setText(TrackerConfig::stringButtonPlus); container->addControl(button); button = new PPButton(BUTTON_SAMPLE_EDIT_REPLENMINUS, screen, this, PPPoint(x2+126+14, y2+2+12*3), PPSize(13, 11)); button->setText(TrackerConfig::stringButtonMinus); container->addControl(button); button = new PPButton(BUTTON_SHOWRANGE, screen, this, PPPoint(x2+126+14*2, y2+2+12*2), PPSize(15, 11*2+1)); button->setColor(TrackerConfig::colorThemeMain); button->setTextColor(PPUIConfig::getInstance()->getColor(PPUIConfig::ColorStaticText)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Rng"); button->setVerticalText(true); container->addControl(button); containerEntire->addControl(container); #endif containerEntire->adjustContainerSize(); screen->addControl(containerEntire); initialised = true; showSection(false); } void SectionSamples::showSection(bool bShow) { containerEntire->show(bShow); } void SectionSamples::realign() { pp_uint32 maxShould = tracker.MAXEDITORHEIGHT(); pp_uint32 maxIs = containerEntire->getLocation().y + containerEntire->getSize().height; if (maxIs != maxShould) { pp_int32 offset = maxShould - maxIs; containerEntire->move(PPPoint(0, offset)); } PatternEditorControl* control = tracker.getPatternEditorControl(); PPScreen* screen = tracker.screen; if (visible) { control->setSize(PPSize(screen->getWidth(), tracker.MAXEDITORHEIGHT()-tracker.SAMPLESECTIONDEFAULTHEIGHT()-tracker.UPPERSECTIONDEFAULTHEIGHT()+1)); } else { control->setSize(PPSize(screen->getWidth(),tracker.MAXEDITORHEIGHT()-tracker.UPPERSECTIONDEFAULTHEIGHT())); } } void SectionSamples::show(bool bShow) { #ifdef __LOWRES__ PPScreen* screen = tracker.screen; screen->pauseUpdate(true); #endif SectionAbstract::show(bShow); visible = bShow; if (!initialised) { init(); } if (initialised) { PatternEditorControl* control = tracker.getPatternEditorControl(); #ifndef __LOWRES__ realign(); #endif if (bShow) { if (control) { #ifdef __LOWRES__ control->show(false); replaceInstrumentListBoxes(true, 56); #endif } tracker.hideInputControl(); } else if (control) { #ifdef __LOWRES__ control->show(true); replaceInstrumentListBoxes(false); #endif } update(); showSection(bShow); } #ifdef __LOWRES__ // If instrument section is shown (bShow = true) // set focus to the Instrumentlist container (instrument listbox) // but before disable screen updates to prevent flickering if (bShow) { screen->setFocus(screen->getControlByID(CONTAINER_INSTRUMENTLIST)); } screen->pauseUpdate(false); if (!bShow) { screen->update(); } #endif } void SectionSamples::update(bool repaint/* = true*/) { realUpdate(repaint, false, true); } void SectionSamples::notifyTabSwitch() { if (isVisible()) realign(); } // No need to reattach sample again, because reattaching also clears out selection void SectionSamples::refresh(bool repaint/* = true*/) { realUpdate(repaint, false, false); } void SectionSamples::realUpdate(bool repaint, bool force, bool reAttach) { if (!initialised) return; PPScreen* screen = tracker.screen; SampleEditor* sampleEditor = sampleEditorControl->getSampleEditor(); if (!force && screen->getModalControl() && screen->getModalControl() == tracker.messageBoxContainerGeneric) return; if (reAttach) tracker.moduleEditor->reloadSample(tracker.listBoxInstruments->getSelectedIndex(), tracker.listBoxSamples->getSelectedIndex()); if (!visible) return; PPContainer* container = static_cast(screen->getControlByID(CONTAINER_SAMPLE_EDIT3)); sampleEditorControl->setRelativeNote(currentSamplePlayNote - ModuleEditor::MAX_NOTE/2); static_cast(container->getControlByID(RADIOGROUP_SAMPLE_LOOPTYPE))->setChoice(sampleEditor->getLoopType() & 3); PPContainer* container2 = static_cast(screen->getControlByID(CONTAINER_SAMPLE_EDIT4)); static_cast(container2->getControlByID(RADIOGROUP_SAMPLE_RESTYPE))->setChoice(sampleEditor->is16Bit() ? 1 : 0); PPContainer* container3 = static_cast(screen->getControlByID(CONTAINER_SAMPLE_EDIT5)); setOffsetText(STATICTEXT_SAMPLE_LENGTH, sampleEditor->getSampleLen()); setOffsetText(STATICTEXT_SAMPLE_DISPLAY, sampleEditorControl->getCurrentDisplayRange()); static const char offsetTypes[3] = {'H', 'D', 'T'}; static_cast(container3->getControlByID(BUTTON_FLIPNUMBERFORMAT))->setText(offsetTypes[offsetFormat]); if (showRangeOffsets) { static_cast(container3->getControlByID(BUTTON_SHOWRANGE))->setText("Rng"); static_cast(container3->getControlByID(STATICTEXT_REPSTART))->setText("RStart"); static_cast(container3->getControlByID(STATICTEXT_REPLEN))->setText("REnd"); pp_int32 sStart = sampleEditorControl->getSelectionStart(); pp_int32 sEnd = sampleEditorControl->getSelectionEnd(); if (sStart >= 0 && sEnd >= 0) { setOffsetText(STATICTEXT_SAMPLE_REPSTART, sStart); setOffsetText(STATICTEXT_SAMPLE_REPLENGTH, sEnd); } else { static_cast(container3->getControlByID(STATICTEXT_SAMPLE_REPSTART))->setText("--------"); static_cast(container3->getControlByID(STATICTEXT_SAMPLE_REPLENGTH))->setText("--------"); } } else { static_cast(container3->getControlByID(BUTTON_SHOWRANGE))->setText("Rep"); static_cast(container3->getControlByID(STATICTEXT_REPSTART))->setText("Repeat"); static_cast(container3->getControlByID(STATICTEXT_REPLEN))->setText("Replen."); setOffsetText(STATICTEXT_SAMPLE_REPSTART, sampleEditorControl->getRepeatStart()); setOffsetText(STATICTEXT_SAMPLE_REPLENGTH, sampleEditorControl->getRepeatLength()); } PPContainer* container4 = static_cast(screen->getControlByID(CONTAINER_SAMPLE_PLAY)); char noteName[4]; PatternTools::getNoteName(noteName, currentSamplePlayNote+1); static_cast(container4->getControlByID(STATICTEXT_SAMPLE_PLAYNOTE))->setText(noteName); PPContainer* container5 = static_cast(screen->getControlByID(CONTAINER_SAMPLE_RANGE)); static_cast(container5->getControlByID(BUTTON_SAMPLE_RANGE_ALL))->setClickable(!sampleEditor->isEmptySample()); static_cast(container5->getControlByID(BUTTON_SAMPLE_RANGE_SHOWALL))->setClickable(!sampleEditor->isEmptySample()); static_cast(container5->getControlByID(BUTTON_SAMPLE_RANGE_ZOOMOUT))->setClickable(sampleEditorControl->canZoomOut()); static_cast(container5->getControlByID(BUTTON_SAMPLE_RANGE_SHOW))->setClickable(sampleEditorControl->hasValidSelection()); static_cast(container5->getControlByID(BUTTON_SAMPLE_APPLY_LASTFILTER))->setClickable(sampleEditor->tool_canApplyLastFilter()); static_cast(container5->getControlByID(BUTTON_SAMPLE_UNDO))->setClickable(sampleEditor->canUndo()); static_cast(container5->getControlByID(BUTTON_SAMPLE_REDO))->setClickable(sampleEditor->canRedo()); PPContainer* container6 = static_cast(screen->getControlByID(CONTAINER_SAMPLE_EDIT2)); static_cast(container6->getControlByID(BUTTON_SAMPLE_EDIT_CROP))->setClickable(sampleEditorControl->hasValidSelection()); static_cast(container6->getControlByID(BUTTON_SAMPLE_EDIT_VOL))->setClickable(!sampleEditor->isEmptySample()); static_cast(container6->getControlByID(BUTTON_SAMPLE_EDIT_DRAW))->setClickable(!sampleEditor->isEmptySample()); PPContainer* container7 = static_cast(screen->getControlByID(CONTAINER_SAMPLE_PLAY)); static_cast(container7->getControlByID(BUTTON_SAMPLE_PLAY_RANGE))->setClickable(sampleEditorControl->hasValidSelection()); static_cast(container7->getControlByID(BUTTON_SAMPLE_PLAY_WAVE))->setClickable(!sampleEditor->isEmptySample()); static_cast(container7->getControlByID(BUTTON_SAMPLE_PLAY_DISPLAY))->setClickable(!sampleEditor->isEmptySample()); PPContainer* container9 = static_cast(screen->getControlByID(CONTAINER_SAMPLE_EDIT1)); bool b = (sampleEditorControl->getCurrentRangeLength()) > 0 && sampleEditorControl->hasValidSelection(); static_cast(container9->getControlByID(BUTTON_SAMPLE_EDIT_CUT))->setClickable(b); static_cast(container9->getControlByID(BUTTON_SAMPLE_EDIT_COPY))->setClickable(b); static_cast(container9->getControlByID(BUTTON_SAMPLE_EDIT_PASTE))->setClickable(sampleEditor->canPaste()); PPContainer* container10 = static_cast(screen->getControlByID(CONTAINER_SAMPLE_LOADSAVE)); static_cast(container10->getControlByID(BUTTON_SAMPLE_SAVE))->setClickable(!sampleEditor->isEmptySample()); screen->paintControl(container10, false); screen->paintControl(container9, false); screen->paintControl(container6, false); screen->paintControl(container5, false); screen->paintControl(container4, false); screen->paintControl(container, false); screen->paintControl(container2, false); screen->paintControl(container3, false); screen->paintControl(sampleEditorControl, false); if (repaint) screen->update(); } void SectionSamples::updateSampleWindow(bool repaint/* = true*/) { PPScreen* screen = tracker.screen; screen->paintControl(sampleEditorControl, false); if (repaint) screen->update(); } void SectionSamples::updateAfterLoad() { tracker.updateInstrumentsListBox(false); tracker.updateSamplesListBox(false); tracker.sectionInstruments->update(false); update(false); } SampleEditorControl* SectionSamples::getSampleEditorControl(bool forceAttach/* = true*/) { if (forceAttach && sampleEditorControl && sampleEditorControl->getSampleEditor()->getSample() == NULL) { tracker.moduleEditor->reloadSample(tracker.listBoxInstruments->getSelectedIndex(), tracker.listBoxSamples->getSelectedIndex()); } return sampleEditorControl; } void SectionSamples::resetSampleEditor() { if (sampleEditorControl) sampleEditorControl->reset(); } bool SectionSamples::isEmptySample() { return !tracker.getSampleEditor()->isEditableSample(); } void SectionSamples::setOffsetFormat(pp_uint32 offsetFormat) { this->offsetFormat = offsetFormat; sampleEditorControl->setOffsetFormat((SampleEditorControl::OffsetFormats)offsetFormat); } void SectionSamples::toggleOffsetFormat() { offsetFormat = (offsetFormat + 1) % (SampleEditorControl::OffsetFormatMillis+1); sampleEditorControl->setOffsetFormat((SampleEditorControl::OffsetFormats)offsetFormat); } void SectionSamples::setOffsetText(pp_uint32 ID, pp_uint32 offset) { switch (offsetFormat) { case SampleEditorControl::OffsetFormatDec: static_cast(containerEntire->getControlByID(ID))->setValue(offset, false, 8); break; case SampleEditorControl::OffsetFormatHex: static_cast(containerEntire->getControlByID(ID))->setValue(offset, true, 8); break; case SampleEditorControl::OffsetFormatMillis: { pp_uint32 millis = sampleEditorControl->getSampleEditor()->convertSmpPosToMillis(offset, currentSamplePlayNote - ModuleEditor::MAX_NOTE/2); char buffer[32], buffer2[32]; memset(buffer2, 32, sizeof(buffer2)); // we only have 7 digits, one period character is contained too SampleEditorControl::formatMillis(buffer, millis % 10000000); // string too large if (strlen(buffer) > 8) { // try to cut off msecs (from period) char* ptr = buffer+strlen(buffer); while (*ptr != '.' && ptr > buffer) ptr--; if (*ptr == '.') { *ptr++ = 's'; *ptr = '\0'; } // string still too large? if (strlen(buffer) > 8) { // cut off minutes part (from m) char* ptr = buffer+strlen(buffer); while (*ptr != 'm' && ptr > buffer) ptr--; if (*ptr == 'm') *(++ptr) = '\0'; } if (strlen(buffer) > 8) strcpy(buffer, "toolarge"); } strcpy(buffer2 + (8-strlen(buffer)), buffer); static_cast(containerEntire->getControlByID(ID))->setText(buffer2); break; } } } void SectionSamples::handleClearSample() { SampleEditor* sampleEditor = sampleEditorControl->getSampleEditor(); if (sampleEditor->isEditableSample()) { if (sampleEditor->isUndoStackEnabled()) { sampleEditor->clearSample(); } else { showMessageBox(MESSAGEBOX_CLEARSAMPLE, "Clear sample?"); } } else { update(); } } void SectionSamples::handleCropSample() { SampleEditor* sampleEditor = sampleEditorControl->getSampleEditor(); if (sampleEditor->isEditableSample() && sampleEditorControl->hasValidSelection()) { if (sampleEditor->isUndoStackEnabled()) { sampleEditor->cropSample(); } else { showMessageBox(MESSAGEBOX_CROPSAMPLE, "Crop sample?"); } } else { update(); } } void SectionSamples::handleMinimizeSample() { SampleEditor* sampleEditor = sampleEditorControl->getSampleEditor(); if (sampleEditor->canMinimize()) { if (sampleEditor->isUndoStackEnabled()) { sampleEditor->minimizeSample(); } else { showMessageBox(MESSAGEBOX_MINIMIZESAMPLE, "Minimize sample?"); } } else { update(); } } void SectionSamples::handleConvertSampleResolution() { SampleEditor* sampleEditor = sampleEditorControl->getSampleEditor(); if (sampleEditor->isEditableSample()) { showMessageBox(MESSAGEBOX_CONVERTSAMPLE, "Convert sample data?", true); } else { sampleEditor->convertSampleResolution(false); update(); } } MilkyTracker-1.02.00/src/tracker/SectionSamples.h000066400000000000000000000053011324432207300215760ustar00rootroot00000000000000/* * tracker/SectionSamples.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * SectionSamples.h * MilkyTracker * * Created by Peter Barth on 15.04.05. * */ #ifndef SECTIONSAMPLES__H #define SECTIONSAMPLES__H #include "BasicTypes.h" #include "Event.h" #include "SectionAbstract.h" class PPControl; class SampleEditorControl; class SectionSamples : public SectionAbstract { private: PPContainer* containerEntire; bool visible; SampleEditorControl* sampleEditorControl; pp_int32 currentSamplePlayNote; PPSize oldInstrumentListSize; PPPoint oldInstrumentListLocation; PPSize oldSampleListSize; PPPoint oldSampleListLocation; PPSize oldInstrumentListContainerSize; PPPoint oldInstrumentListContainerLocation; PPPoint p[4]; bool showRangeOffsets; pp_uint32 offsetFormat; protected: virtual void showSection(bool bShow); public: SectionSamples(Tracker& tracker); virtual ~SectionSamples(); // PPEvent listener virtual pp_int32 handleEvent(PPObject* sender, PPEvent* event); virtual void init(); virtual void init(pp_int32 x, pp_int32 y); void realign(); virtual void show(bool bShow); virtual void update(bool repaint = true); virtual void notifyTabSwitch(); void refresh(bool repaint = true); void realUpdate(bool repaint, bool force, bool reAttach); void updateSampleWindow(bool repaint = true); void updateAfterLoad(); SampleEditorControl* getSampleEditorControl(bool forceAttach = true); void resetSampleEditor(); bool isEmptySample(); void setOffsetFormat(pp_uint32 offsetFormat); pp_uint32 getOffsetFormat() const { return offsetFormat; } void toggleOffsetFormat(); pp_int32 getCurrentSamplePlayNote() const { return currentSamplePlayNote; } bool isVisible() const { return visible; } void setOffsetText(pp_uint32 ID, pp_uint32 offset); private: void handleClearSample(); void handleCropSample(); void handleMinimizeSample(); void handleConvertSampleResolution(); // Responder should be friend friend class DialogResponderSamples; friend class Tracker; }; #endif MilkyTracker-1.02.00/src/tracker/SectionSettings.cpp000066400000000000000000003142461324432207300223400ustar00rootroot00000000000000/* * tracker/SectionSettings.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * SectionSettings.cpp * MilkyTracker * * Created by Peter Barth on Sun Mar 13 2005. * */ #include "SectionSettings.h" #include "Tracker.h" #include "TrackerConfig.h" #include "ModuleEditor.h" #include "PlayerMaster.h" #include "ResamplerHelper.h" #include "PlayerController.h" #include "SystemMessage.h" #include "PPUIConfig.h" #include "CheckBox.h" #include "CheckBoxLabel.h" #include "ListBox.h" #include "RadioGroup.h" #include "Seperator.h" #include "Slider.h" #include "StaticText.h" #include "TransparentContainer.h" #include "PatternEditorControl.h" #include "DialogWithValues.h" #include "DialogListBox.h" #include "Graphics.h" #include "PatternTools.h" #include "TrackerSettingsDatabase.h" #include "SectionSamples.h" #include "ColorPaletteContainer.h" #include "ColorExportImport.h" // OS Interface #include "PPOpenPanel.h" #include "PPSavePanel.h" #include "FileExtProvider.h" #include "ControlIDs.h" #ifdef __LOWRES__ #define SECTIONHEIGHT 148 #else #define SECTIONHEIGHT 118 #endif #define UPPERFRAMEHEIGHT 118 // small custom button class which will be used to show a color preview class PPColPrevButton : public PPButton { public: PPColPrevButton(pp_int32 id, PPScreen* parentScreen, EventListenerInterface* eventListener, PPPoint location, PPSize size) : PPButton(id, parentScreen, eventListener, location, size, false, false, false) { } virtual void paint(PPGraphicsAbstract* g) { PPButton::paint(g); PPFont* font = PPFont::getFont(PPFont::FONT_TINY); g->setFont(font); PPPoint p = this->getLocation(); p.x+=1; p.y+=2; g->setColor(255^getColor()->r, 255^getColor()->g, 255^getColor()->b); char buffer[100]; sprintf(buffer, "R:%02X", getColor()->r); g->drawString(buffer, p.x, p.y, false); p.y+=font->getCharHeight(); sprintf(buffer, "G:%02X", getColor()->g); g->drawString(buffer, p.x, p.y, false); p.y+=font->getCharHeight(); sprintf(buffer, "B:%02X", getColor()->b); g->drawString(buffer, p.x, p.y, false); } }; // settings enum ControlIDs { PAGE_BUTTON_0 = 50, PAGE_BUTTON_1, PAGE_BUTTON_2, PAGE_BUTTON_3, PAGE_BUTTON_4, PAGE_BUTTON_5, PAGE_BUTTON_6, PAGE_BUTTON_7, SUBPAGE_BUTTON_LEFT_0, SUBPAGE_BUTTON_LEFT_1, SUBPAGE_BUTTON_LEFT_2, SUBPAGE_BUTTON_LEFT_3, SUBPAGE_BUTTON_LEFT_4, SUBPAGE_BUTTON_LEFT_5, SUBPAGE_BUTTON_LEFT_6, SUBPAGE_BUTTON_LEFT_7, SUBPAGE_BUTTON_RIGHT_0, SUBPAGE_BUTTON_RIGHT_1, SUBPAGE_BUTTON_RIGHT_2, SUBPAGE_BUTTON_RIGHT_3, SUBPAGE_BUTTON_RIGHT_4, SUBPAGE_BUTTON_RIGHT_5, SUBPAGE_BUTTON_RIGHT_6, SUBPAGE_BUTTON_RIGHT_7, RADIOGROUP_SETTINGS_PAGE, BUTTON_SETTINGS_OK, BUTTON_SETTINGS_APPLY, BUTTON_SETTINGS_CANCEL, // Page I RADIOGROUP_SETTINGS_FREQTAB, STATICTEXT_SETTINGS_BUFFERSIZE, STATICTEXT_SETTINGS_MIXERVOL, SLIDER_SETTINGS_BUFFERSIZE, SLIDER_SETTINGS_MIXERVOL, STATICTEXT_SETTINGS_FORCEPOWER2BUFF, CHECKBOX_SETTINGS_FORCEPOWER2BUFF, RADIOGROUP_SETTINGS_AMPLIFY, BUTTON_SETTINGS_RESAMPLING, CHECKBOX_SETTINGS_RAMPING, RADIOGROUP_SETTINGS_MIXFREQ, BUTTON_SETTINGS_CHOOSEDRIVER, RADIOGROUP_SETTINGS_XMCHANNELLIMIT, // PAGE I (2) CHECKBOX_SETTINGS_VIRTUALCHANNELS, BUTTON_SETTINGS_VIRTUALCHANNELS_PLUS, BUTTON_SETTINGS_VIRTUALCHANNELS_MINUS, STATICTEXT_SETTINGS_VIRTUALCHANNELS, CHECKBOX_SETTINGS_MULTICHN_RECORD, CHECKBOX_SETTINGS_MULTICHN_KEYJAZZ, CHECKBOX_SETTINGS_MULTICHN_EDIT, CHECKBOX_SETTINGS_MULTICHN_RECORDKEYOFF, CHECKBOX_SETTINGS_MULTICHN_RECORDNOTEDELAY, // Page II CHECKBOX_SETTINGS_HEXCOUNT, CHECKBOX_SETTINGS_SHOWZEROEFFECT, CHECKBOX_SETTINGS_FULLSCREEN, LISTBOX_SETTINGS_RESOLUTIONS, BUTTON_RESOLUTIONS_CUSTOM, BUTTON_RESOLUTIONS_FULL, STATICTEXT_SETTINGS_MAGNIFY, RADIOGROUP_SETTINGS_MAGNIFY, LISTBOX_COLORS, SLIDER_COLOR_RED, SLIDER_COLOR_GREEN, SLIDER_COLOR_BLUE, BUTTON_COLOR, BUTTON_COLOR_PREDEF_STORE, BUTTON_COLOR_EXPORT, BUTTON_COLOR_IMPORT, BUTTON_COLOR_PREVIEW, BUTTON_COLOR_COPY, BUTTON_COLOR_PASTE, BUTTON_COLOR_DARKER, BUTTON_COLOR_BRIGHTER, BUTTON_COLOR_PREDEF_0, BUTTON_COLOR_PREDEF_1, BUTTON_COLOR_PREDEF_2, BUTTON_COLOR_PREDEF_3, BUTTON_COLOR_PREDEF_4, BUTTON_COLOR_PREDEF_5, BUTTON_COLOR_RESTORE, STATICTEXT_SPACING, SLIDER_SPACING, STATICTEXT_MUTEFADE, SLIDER_MUTEFADE, STATICTEXT_HIGHLIGHTMODULO1, BUTTON_HIGHLIGHTMODULO1_PLUS, BUTTON_HIGHLIGHTMODULO1_MINUS, CHECKBOX_HIGHLIGHTMODULO1_FULLROW, STATICTEXT_HIGHLIGHTMODULO2, BUTTON_HIGHLIGHTMODULO2_PLUS, BUTTON_HIGHLIGHTMODULO2_MINUS, CHECKBOX_HIGHLIGHTMODULO2_FULLROW, // Page III RADIOGROUP_SETTINGS_PATTERNFONT, LISTBOX_SETTINGS_FONTFAMILIES, LISTBOX_SETTINGS_FONTENTRIES, // PAGE VI CHECKBOX_SETTINGS_INSTRUMENTBACKTRACE, CHECKBOX_SETTINGS_WRAPCURSOR, CHECKBOX_SETTINGS_PROSPECTIVE, //CHECKBOX_SETTINGS_FOLLOWSONG, CHECKBOX_SETTINGS_TABTONOTE, CHECKBOX_SETTINGS_AUTORESIZE, CHECKBOX_SETTINGS_CLICKTOCURSOR, RADIOGROUP_SETTINGS_EDITMODE, RADIOGROUP_SETTINGS_SCROLLMODE, CHECKBOX_SETTINGS_SAMPLEEDITORUNDO, CHECKBOX_SETTINGS_AUTOMIXDOWNSAMPLES, CHECKBOX_SETTINGS_INTERNALDISKBROWSER, CHECKBOX_SETTINGS_AUTOESTPLAYTIME, CHECKBOX_SETTINGS_SHOWSPLASH, CHECKBOX_SETTINGS_SCOPES, STATICTEXT_SETTINGS_SCOPESAPPEARANCE, RADIOGROUP_SETTINGS_SCOPESAPPEARANCE, CHECKBOX_SETTINGS_INVERTMWHEELZOOM, // Page V (only on desktop version) RADIOGROUP_SETTINGS_STOPBACKGROUNDBEHAVIOUR, CHECKBOX_SETTINGS_TABSWITCHRESUMEPLAY, STATICTEXT_SETTINGS_TABSWITCHRESUMEPLAY, CHECKBOX_SETTINGS_LOADMODULEINNEWTAB, PAGE_IO_1, PAGE_IO_2, PAGE_IO_3, PAGE_IO_4, PAGE_LAYOUT_1, PAGE_LAYOUT_2, PAGE_LAYOUT_3, PAGE_LAYOUT_4, PAGE_FONTS_1, PAGE_FONTS_2, PAGE_FONTS_3, PAGE_MISC_1, PAGE_MISC_2, PAGE_MISC_3, PAGE_MISC_4, PAGE_TABS_1, PAGE_TABS_2, PAGE_TABS_3, RESPONDMESSAGEBOX_CUSTOMRESOLUTION, RESPONDMESSAGEBOX_RESTOREPALETTES, RESPONDMESSAGEBOX_SELECTAUDIODRV, RESPONDMESSAGEBOX_SELECTRESAMPLER }; struct TScreenRes { pp_int32 width, height; const char* name; }; #define NUMRESOLUTIONS 13 #define MINWIDTH 640 #define MINHEIGHT 480 static TScreenRes resolutions[NUMRESOLUTIONS] = { {640, 480, "640x480"}, {720, 480, "720x480"}, {800, 480, "800x480"}, {800, 500, "800x500"}, {800, 600, "800x600"}, {1024, 768, "1024x768"}, {1152, 864, "1152x864"}, {1280, 768, "1280x768"}, {1280, 800, "1280x800"}, {1280, 854, "1280x854"}, {1280, 1024, "1280x1024"}, {1680, 1050, "1680x1050"}, {-1, -1, ""} }; // Class which responds to message box clicks class DialogResponderSettings : public DialogResponder { private: SectionSettings& section; public: DialogResponderSettings(SectionSettings& section) : section(section) { } virtual pp_int32 ActionOkay(PPObject* sender) { switch (reinterpret_cast(sender)->getID()) { case RESPONDMESSAGEBOX_CUSTOMRESOLUTION: { section.storeCustomResolution(); break; } case RESPONDMESSAGEBOX_RESTOREPALETTES: section.restorePalettes(); break; case RESPONDMESSAGEBOX_SELECTAUDIODRV: { PPListBox* listBox = reinterpret_cast(sender)->getListBox(); section.storeAudioDriver(listBox->getItem(listBox->getSelectedIndex())); break; } case RESPONDMESSAGEBOX_SELECTRESAMPLER: { PPListBox* listBox = reinterpret_cast(sender)->getListBox(); section.storeResampler(listBox->getSelectedIndex()); break; } } return 0; } }; class TabPage : public EventListenerInterface { protected: pp_uint32 id; SectionSettings& sectionSettings; PPTransparentContainer* container; bool visible; enum { PageWidth = 160, PageHeight = UPPERFRAMEHEIGHT }; public: TabPage(pp_uint32 id, SectionSettings& sectionSettings) : id(id), sectionSettings(sectionSettings), container(NULL), visible(false) { } virtual ~TabPage() {} PPTransparentContainer* getContainer() const { return container; } static pp_int32 getWidth() { return PageWidth; } static pp_int32 getHeight() { return PageHeight; } void setVisible(bool visible) { this->visible = visible; } bool isVisible() const { return visible; } virtual void init(PPScreen* screen) = 0; virtual void update(PPScreen* screen, TrackerSettingsDatabase* settingsDatabase, ModuleEditor& moduleEditor) = 0; virtual pp_int32 handleEvent(PPObject* sender, PPEvent* event) { return sectionSettings.handleEvent(sender, event); } PPPoint getLocation() { return container->getLocation(); } void setLocation(const PPPoint& p) { if (container->getLocation().x != p.x || container->getLocation().y != p.y) { pp_int32 dx = p.x - container->getLocation().x; pp_int32 dy = p.y - container->getLocation().y; container->move(PPPoint(dx, dy)); } } }; class TabPageIO_1 : public TabPage { public: TabPageIO_1(pp_uint32 id, SectionSettings& sectionSettings) : TabPage(id, sectionSettings) { } virtual void init(PPScreen* screen) { pp_int32 x = 0; pp_int32 y = 0; container = new PPTransparentContainer(id, screen, this, PPPoint(x, y), PPSize(PageWidth,PageHeight)); pp_int32 y2 = y; container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x + 4, y2 + 4), "Driver:", true)); PPButton* button = new PPButton(BUTTON_SETTINGS_CHOOSEDRIVER, screen, this, PPPoint(x + 4 + 7*8 + 4, y2 + 3), PPSize(90, 11)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Select Driver" PPSTR_PERIODS); container->addControl(button); y2+=4; PPStaticText* text = new PPStaticText(0, NULL, NULL, PPPoint(x + 4, y2 + 2 + 11), "Buffer:", true); //text->setFont(PPFont::getFont(PPFont::FONT_TINY)); container->addControl(text); container->addControl(new PPStaticText(STATICTEXT_SETTINGS_BUFFERSIZE, NULL, NULL, PPPoint(x + 4 + 7*8, y2 + 2 + 11), "000ms(xx)", false)); PPSlider* slider = new PPSlider(SLIDER_SETTINGS_BUFFERSIZE, screen, this, PPPoint(x + 4, y2 + 2 + 11*2-1), 151, true); slider->setMaxValue(511); slider->setBarSize(8192); container->addControl(slider); y2++; PPCheckBox* checkBox = new PPCheckBox(CHECKBOX_SETTINGS_FORCEPOWER2BUFF, screen, this, PPPoint(x + 4 + 17 * 8 + 4, y2 + 2 + 11 * 3 - 1)); container->addControl(checkBox); container->addControl(new PPCheckBoxLabel(STATICTEXT_SETTINGS_FORCEPOWER2BUFF, NULL, this, PPPoint(x + 4, y2 + 2 + 11*3), "Force 2^n sizes:", checkBox, true)); y2+=12; container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x + 4, y2 + 2 + 11*3), "Mixervol:", true)); container->addControl(new PPStaticText(STATICTEXT_SETTINGS_MIXERVOL, NULL, NULL, PPPoint(x + 4 + 8*9, y2 + 2 + 11*3), "100%", false)); slider = new PPSlider(SLIDER_SETTINGS_MIXERVOL, screen, this, PPPoint(x + 4, y2 + 2 + 11*4-1), 151, true); slider->setMaxValue(256); slider->setBarSize(8192); container->addControl(slider); y2-=1; container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x + 4, y2 + 2 + 11*5 + 4), "Amp:", true)); PPRadioGroup* radioGroup = new PPRadioGroup(RADIOGROUP_SETTINGS_AMPLIFY, screen, this, PPPoint(x + 2 + 5*8, y2 + 2 + 11*5 + 1), PPSize(120, 16)); radioGroup->setColor(TrackerConfig::colorThemeMain); radioGroup->setFont(PPFont::getFont(PPFont::FONT_TINY)); radioGroup->setHorizontal(true); radioGroup->addItem("25%"); radioGroup->addItem("50%"); radioGroup->addItem("100%"); container->addControl(radioGroup); y2 += 2 + 11*7 - 4; container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x + 4, y2), "Resampling:", true)); button = new PPButton(BUTTON_SETTINGS_RESAMPLING, screen, this, PPPoint(x + 4 + 11*8 + 4, y2-2), PPSize(6*9 + 4, 11)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Select" PPSTR_PERIODS); container->addControl(button); y2+=12; checkBox = new PPCheckBox(CHECKBOX_SETTINGS_RAMPING, screen, this, PPPoint(x + 4 + 17 * 8 + 4, y2 - 1)); container->addControl(checkBox); container->addControl(new PPCheckBoxLabel(0, NULL, this, PPPoint(x + 4, y2), "Volume ramping:", checkBox, true)); //container->addControl(new PPSeperator(0, screen, PPPoint(x + 158, y+4), UPPERFRAMEHEIGHT-8, TrackerConfig::colorThemeMain, false)); } virtual void update(PPScreen* screen, TrackerSettingsDatabase* settingsDatabase, ModuleEditor& moduleEditor) { PPStaticText* text = static_cast(container->getControlByID(STATICTEXT_SETTINGS_BUFFERSIZE)); PPSlider* slider = static_cast(container->getControlByID(SLIDER_SETTINGS_BUFFERSIZE)); char buffer[100]; char buffer2[100]; // buffersize bool forcePowerOfTwo = settingsDatabase->restore("FORCEPOWEROFTWOBUFFERSIZE")->getBoolValue(); pp_int32 v = settingsDatabase->restore("BUFFERSIZE")->getIntValue(); pp_int32 v2 = v; if (forcePowerOfTwo) v = PlayerMaster::roundToNearestPowerOfTwo(v); float fv = PlayerMaster::convertBufferSizeToMillis(settingsDatabase->restore("MIXERFREQ")->getIntValue(), v); pp_int32 fixed = (pp_int32)fv; pp_int32 decimal = (pp_int32)(fv*10.0f) % 10; if (v >= 1000) { if (fixed >= 100) { if (fixed >= 1000) sprintf(buffer, "%i.%is(%i.%ik)", fixed / 1000, (fixed / 100) % 10, v / 1000, (v / 100) % 10); else sprintf(buffer, "%ims(%i.%ik)", fixed, v / 1000, (v / 100) % 10); } else sprintf(buffer, "%i.%ims(%i.%ik)", fixed, decimal, v / 1000, (v / 100) % 10); } else { if (fixed >= 1000) sprintf(buffer, "%i.%is(%i)", fixed / 1000, (fixed / 100) % 10, v); else sprintf(buffer, "%i.%ims(%i)", fixed, decimal, v); } if (strlen(buffer) < 9) { memset(buffer2, 32, sizeof(buffer2)); strcpy(buffer2 + 9-strlen(buffer), buffer); strcpy(buffer, buffer2); } text->setText(buffer); slider->setCurrentValue((v2 >> 5) - 1); // force 2^n buffer size static_cast(container->getControlByID(CHECKBOX_SETTINGS_FORCEPOWER2BUFF))->checkIt(forcePowerOfTwo); // mixervolume text = static_cast(container->getControlByID(STATICTEXT_SETTINGS_MIXERVOL)); slider = static_cast(container->getControlByID(SLIDER_SETTINGS_MIXERVOL)); v = settingsDatabase->restore("MIXERVOLUME")->getIntValue(); sprintf(buffer, "%i%%", (v*100)/256); if (strlen(buffer) < 4) { memset(buffer2, 32, sizeof(buffer2)); strcpy(buffer2 + 4-strlen(buffer), buffer); strcpy(buffer, buffer2); } text->setText(buffer); slider->setCurrentValue(v); // amplify v = settingsDatabase->restore("MIXERSHIFT")->getIntValue(); static_cast(container->getControlByID(RADIOGROUP_SETTINGS_AMPLIFY))->setChoice(v); // checkboxes v = settingsDatabase->restore("RAMPING")->getIntValue(); static_cast(container->getControlByID(CHECKBOX_SETTINGS_RAMPING))->checkIt(v!=0); } }; class TabPageIO_2 : public TabPage { public: TabPageIO_2(pp_uint32 id, SectionSettings& sectionSettings) : TabPage(id, sectionSettings) { } virtual void init(PPScreen* screen) { pp_int32 x = 0; pp_int32 y = 0; container = new PPTransparentContainer(id, screen, this, PPPoint(x, y), PPSize(PageWidth,PageHeight)); // frequency table pp_int32 x2 = x; pp_int32 y2 = y; container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x2 + 2, y2 + 2), "Mixer Resolution", true, true)); pp_int32 j; PPRadioGroup* radioGroup = new PPRadioGroup(RADIOGROUP_SETTINGS_MIXFREQ, screen, this, PPPoint(x2, y2+2+11), PPSize(160, TrackerConfig::numMixFrequencies*14)); radioGroup->setColor(TrackerConfig::colorThemeMain); for (j = 0; j < TrackerConfig::numMixFrequencies; j++) { char buffer[32]; sprintf(buffer, "%i Hz", TrackerConfig::mixFrequencies[j]); radioGroup->addItem(buffer); } container->addControl(radioGroup); y2+=j*14+14; container->addControl(new PPSeperator(0, screen, PPPoint(x2, y2), 158, TrackerConfig::colorThemeMain, true)); y2+=4; // module frequencies container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x2 + 2, y2 + 2), "Frequency Table", true, true)); radioGroup = new PPRadioGroup(RADIOGROUP_SETTINGS_FREQTAB, screen, this, PPPoint(x2, y2+2+11), PPSize(160, 30)); radioGroup->setColor(TrackerConfig::colorThemeMain); radioGroup->addItem("Amiga frequencies"); radioGroup->addItem("Linear frequencies"); container->addControl(radioGroup); //container->addControl(new PPSeperator(0, screen, PPPoint(x2 + 158, y+4), UPPERFRAMEHEIGHT-8, TrackerConfig::colorThemeMain, false)); } virtual void update(PPScreen* screen, TrackerSettingsDatabase* settingsDatabase, ModuleEditor& moduleEditor) { // mixer resolution pp_int32 v = settingsDatabase->restore("MIXERFREQ")->getIntValue(); pp_int32 i; for (i = 0; i < TrackerConfig::numMixFrequencies; i++) if (v == TrackerConfig::mixFrequencies[i]) { static_cast(container->getControlByID(RADIOGROUP_SETTINGS_MIXFREQ))->setChoice(i); break; } // frequency table v = moduleEditor.getFrequency(); static_cast(container->getControlByID(RADIOGROUP_SETTINGS_FREQTAB))->setChoice(v); } }; class TabPageIO_3 : public TabPage { public: TabPageIO_3(pp_uint32 id, SectionSettings& sectionSettings) : TabPage(id, sectionSettings) { } virtual void init(PPScreen* screen) { pp_int32 x = 0; pp_int32 y = 0; container = new PPTransparentContainer(id, screen, this, PPPoint(x, y), PPSize(PageWidth,PageHeight)); pp_int32 y2 = y; container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x + 2, y2 + 2), "Instrument Playback", true, true)); y2+=15; PPCheckBox* checkBox = new PPCheckBox(CHECKBOX_SETTINGS_VIRTUALCHANNELS, screen, this, PPPoint(x + 4 + 17 * 8 + 4, y2 - 1)); container->addControl(checkBox); container->addControl(new PPCheckBoxLabel(0, NULL, this, PPPoint(x + 4, y2), "Jam channels:", checkBox, true)); y2+=12; container->addControl(new PPStaticText(STATICTEXT_SETTINGS_VIRTUALCHANNELS, NULL, NULL, PPPoint(x + 4, y2), "Use xx channels", false)); PPButton* button = new PPButton(BUTTON_SETTINGS_VIRTUALCHANNELS_PLUS, screen, this, PPPoint(x + 4 + 15*8 + 4, y2), PPSize(12, 9)); button->setText(TrackerConfig::stringButtonPlus); container->addControl(button); button = new PPButton(BUTTON_SETTINGS_VIRTUALCHANNELS_MINUS, screen, this, PPPoint(x + 4 + 15*8 + 4 + 13, y2), PPSize(13, 9)); button->setText(TrackerConfig::stringButtonMinus); container->addControl(button); y2+=14; container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x + 2, y2 + 2), "Multichannel", true, true)); y2+=15; checkBox = new PPCheckBox(CHECKBOX_SETTINGS_MULTICHN_RECORD, screen, this, PPPoint(x + 4 + 17 * 8 + 4, y2 - 1)); container->addControl(checkBox); container->addControl(new PPCheckBoxLabel(0, NULL, this, PPPoint(x + 4, y2), "Recording:", checkBox, true)); y2+=12; checkBox = new PPCheckBox(CHECKBOX_SETTINGS_MULTICHN_KEYJAZZ, screen, this, PPPoint(x + 4 + 17 * 8 + 4, y2 - 1)); container->addControl(checkBox); container->addControl(new PPCheckBoxLabel(0, NULL, this, PPPoint(x + 4, y2), """Keyjazzing"":", checkBox, true)); y2+=12; checkBox = new PPCheckBox(CHECKBOX_SETTINGS_MULTICHN_EDIT, screen, this, PPPoint(x + 4 + 17 * 8 + 4, y2 - 1)); container->addControl(checkBox); container->addControl(new PPCheckBoxLabel(0, NULL, this, PPPoint(x + 4, y2), "Editing:", checkBox, true)); y2+=12; checkBox = new PPCheckBox(CHECKBOX_SETTINGS_MULTICHN_RECORDKEYOFF, screen, this, PPPoint(x + 4 + 17 * 8 + 4, y2 - 1)); container->addControl(checkBox); container->addControl(new PPCheckBoxLabel(0, NULL, this, PPPoint(x + 4, y2), "Record key off:", checkBox, true)); y2+=12; checkBox = new PPCheckBox(CHECKBOX_SETTINGS_MULTICHN_RECORDNOTEDELAY, screen, this, PPPoint(x + 4 + 17 * 8 + 4, y2 - 1)); container->addControl(checkBox); container->addControl(new PPCheckBoxLabel(0, NULL, this, PPPoint(x + 4, y2), "Rec. note delays:", checkBox, true)); //container->addControl(new PPSeperator(0, screen, PPPoint(x + 158, y+4), UPPERFRAMEHEIGHT-8, TrackerConfig::colorThemeMain, false)); } virtual void update(PPScreen* screen, TrackerSettingsDatabase* settingsDatabase, ModuleEditor& moduleEditor) { PPStaticText* text = static_cast(container->getControlByID(STATICTEXT_SETTINGS_VIRTUALCHANNELS)); char buffer[100]; // buffersize pp_int32 v = settingsDatabase->restore("VIRTUALCHANNELS")->getIntValue(); sprintf(buffer, "Use %02i", v); text->setText(buffer); static_cast(container->getControlByID(CHECKBOX_SETTINGS_VIRTUALCHANNELS))->checkIt(v>0); v = settingsDatabase->restore("MULTICHN_RECORD")->getIntValue(); static_cast(container->getControlByID(CHECKBOX_SETTINGS_MULTICHN_RECORD))->checkIt(v!=0); v = settingsDatabase->restore("MULTICHN_KEYJAZZ")->getIntValue(); static_cast(container->getControlByID(CHECKBOX_SETTINGS_MULTICHN_KEYJAZZ))->checkIt(v!=0); v = settingsDatabase->restore("MULTICHN_EDIT")->getIntValue(); static_cast(container->getControlByID(CHECKBOX_SETTINGS_MULTICHN_EDIT))->checkIt(v!=0); v = settingsDatabase->restore("MULTICHN_RECORDKEYOFF")->getIntValue(); static_cast(container->getControlByID(CHECKBOX_SETTINGS_MULTICHN_RECORDKEYOFF))->checkIt(v!=0); v = settingsDatabase->restore("MULTICHN_RECORDNOTEDELAY")->getIntValue(); static_cast(container->getControlByID(CHECKBOX_SETTINGS_MULTICHN_RECORDNOTEDELAY))->checkIt(v!=0); } }; class TabPageIO_4 : public TabPage { public: TabPageIO_4(pp_uint32 id, SectionSettings& sectionSettings) : TabPage(id, sectionSettings) { } virtual void init(PPScreen* screen) { pp_int32 x = 0; pp_int32 y = 0; container = new PPTransparentContainer(id, screen, this, PPPoint(x, y), PPSize(PageWidth,PageHeight)); pp_int32 x2 = x; pp_int32 y2 = y; container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x2 + 2, y2 + 2), "XM channel limit", true, true)); PPRadioGroup* radioGroup = new PPRadioGroup(RADIOGROUP_SETTINGS_XMCHANNELLIMIT, screen, this, PPPoint(x2, y2+2+11), PPSize(160, 3*14)); radioGroup->setColor(TrackerConfig::colorThemeMain); radioGroup->addItem("32"); radioGroup->addItem("64"); radioGroup->addItem("128"); container->addControl(radioGroup); } virtual void update(PPScreen* screen, TrackerSettingsDatabase* settingsDatabase, ModuleEditor& moduleEditor) { // mixer resolution pp_int32 v = settingsDatabase->restore("XMCHANNELLIMIT")->getIntValue(); switch (v) { case 32: static_cast(container->getControlByID(RADIOGROUP_SETTINGS_XMCHANNELLIMIT))->setChoice(0); break; case 64: static_cast(container->getControlByID(RADIOGROUP_SETTINGS_XMCHANNELLIMIT))->setChoice(1); break; case 128: static_cast(container->getControlByID(RADIOGROUP_SETTINGS_XMCHANNELLIMIT))->setChoice(2); break; } } }; class TabPageLayout_1 : public TabPage { public: TabPageLayout_1(pp_uint32 id, SectionSettings& sectionSettings) : TabPage(id, sectionSettings) { } virtual void init(PPScreen* screen) { pp_int32 x = 0; pp_int32 y = 0; container = new PPTransparentContainer(id, screen, this, PPPoint(x, y), PPSize(PageWidth,PageHeight)); pp_int32 x2 = x; pp_int32 y2 = y; container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x + 2, y2 + 2), "Pattern Editor", true, true)); y2+=14; container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x2 + 2, y2), "Spacing:", true)); container->addControl(new PPStaticText(STATICTEXT_SPACING, screen, this, PPPoint(x2 + 9*8, y2), "0px")); PPSlider* slider = new PPSlider(SLIDER_SPACING, screen, this, PPPoint(x2 + 13*8 + 2, y2-1), 49, true); slider->setMaxValue(31); slider->setBarSize(16384); container->addControl(slider); y2+=11; PPCheckBox* checkBox = new PPCheckBox(CHECKBOX_SETTINGS_HEXCOUNT, screen, this, PPPoint(x + 4 + 17 * 8 + 4, y2 - 1)); container->addControl(checkBox); container->addControl(new PPCheckBoxLabel(0, NULL, this, PPPoint(x + 2, y2), "Hex count:", checkBox, true)); y2+=11; checkBox = new PPCheckBox(CHECKBOX_SETTINGS_SHOWZEROEFFECT, screen, this, PPPoint(x + 4 + 17 * 8 + 4, y2 - 1)); container->addControl(checkBox); container->addControl(new PPCheckBoxLabel(0, NULL, this, PPPoint(x + 2, y2), "Show zero effect:", checkBox, true)); y2+=11; checkBox = new PPCheckBox(CHECKBOX_SETTINGS_PROSPECTIVE, screen, this, PPPoint(x + 4 + 17 * 8 + 4, y2 - 1)); container->addControl(checkBox); container->addControl(new PPCheckBoxLabel(0, NULL, this, PPPoint(x2 + 2, y2), "Prospective:", checkBox, true)); y2+=11; container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x2 + 2, y2), "Muting opacity:", true)); y2+=11; container->addControl(new PPStaticText(STATICTEXT_MUTEFADE, screen, this, PPPoint(x2 + 4, y2), "100%")); slider = new PPSlider(SLIDER_MUTEFADE, screen, this, PPPoint(x2 + 4 + 8*4 + 4, y2-1), 113, true); slider->setMaxValue(100); slider->setBarSize(8192); container->addControl(slider); y2+=12; PPStaticText* staticText = new PPStaticText(0, NULL, NULL, PPPoint(x2 + 2, y2), "Row highlight spacing:", true); staticText->setFont(PPFont::getFont(PPFont::FONT_TINY)); container->addControl(staticText); y2+=11; container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x2 + 2, y2), "1st:", true)); container->addControl(new PPStaticText(STATICTEXT_HIGHLIGHTMODULO1, NULL, NULL, PPPoint(x2 + 2 + 4*8 + 2, y2), "xx")); PPButton* button = new PPButton(BUTTON_HIGHLIGHTMODULO1_PLUS, screen, this, PPPoint(x + 2 + 7*8, y2-1), PPSize(12, 9)); button->setText(TrackerConfig::stringButtonPlus); container->addControl(button); button = new PPButton(BUTTON_HIGHLIGHTMODULO1_MINUS, screen, this, PPPoint(x + 2 + 7*8 + 13, y2-1), PPSize(13, 9)); button->setText(TrackerConfig::stringButtonMinus); container->addControl(button); checkBox = new PPCheckBox(CHECKBOX_HIGHLIGHTMODULO1_FULLROW, screen, this, PPPoint(x + 4 + 17 * 8 + 4, y2 - 1)); container->addControl(checkBox); container->addControl(new PPCheckBoxLabel(0, NULL, this, PPPoint(x + 2 + 7*8 + 13 + 20, y2), "Full:", checkBox, true)); y2+=11; container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x2 + 2, y2), "2nd:", true)); container->addControl(new PPStaticText(STATICTEXT_HIGHLIGHTMODULO2, NULL, NULL, PPPoint(x2 + 2 + 4*8 + 2, y2), "xx")); button = new PPButton(BUTTON_HIGHLIGHTMODULO2_PLUS, screen, this, PPPoint(x + 2 + 7*8, y2-1), PPSize(12, 9)); button->setText(TrackerConfig::stringButtonPlus); container->addControl(button); button = new PPButton(BUTTON_HIGHLIGHTMODULO2_MINUS, screen, this, PPPoint(x + 2 + 7*8 + 13, y2-1), PPSize(13, 9)); button->setText(TrackerConfig::stringButtonMinus); container->addControl(button); checkBox = new PPCheckBox(CHECKBOX_HIGHLIGHTMODULO2_FULLROW, screen, this, PPPoint(x + 4 + 17 * 8 + 4, y2 - 1)); container->addControl(checkBox); container->addControl(new PPCheckBoxLabel(0, NULL, this, PPPoint(x + 2 + 7 * 8 + 13 + 20, y2), "Full:", checkBox, true)); // vertical separator //container->addControl(new PPSeperator(0, screen, PPPoint(x2 + 158, y+4), UPPERFRAMEHEIGHT-8, TrackerConfig::colorThemeMain, false)); } virtual void update(PPScreen* screen, TrackerSettingsDatabase* settingsDatabase, ModuleEditor& moduleEditor) { // spacing slider PPStaticText* text = static_cast(container->getControlByID(STATICTEXT_SPACING)); PPSlider* slider = static_cast(container->getControlByID(SLIDER_SPACING)); pp_int32 v = settingsDatabase->restore("SPACING")->getIntValue(); char buffer[100], buffer2[100]; sprintf(buffer,"%ipx", v); text->setText(buffer); slider->setCurrentValue(v); // mute fade strength slider text = static_cast(container->getControlByID(STATICTEXT_MUTEFADE)); slider = static_cast(container->getControlByID(SLIDER_MUTEFADE)); v = settingsDatabase->restore("MUTEFADE")->getIntValue(); sprintf(buffer, "%i%%", v); // right align if (strlen(buffer) < 4) { memset(buffer2, 32, sizeof(buffer2)); strcpy(buffer2 + 4-strlen(buffer), buffer); strcpy(buffer, buffer2); } text->setText(buffer); slider->setCurrentValue(v); // update primary pattern row highlight text = static_cast(container->getControlByID(STATICTEXT_HIGHLIGHTMODULO1)); v = settingsDatabase->restore("HIGHLIGHTMODULO1")->getIntValue(); sprintf(buffer, "%02i ", v); text->setText(buffer); // update secondary pattern row highlight text = static_cast(container->getControlByID(STATICTEXT_HIGHLIGHTMODULO2)); v = settingsDatabase->restore("HIGHLIGHTMODULO2")->getIntValue(); sprintf(buffer, "%02i ", v); text->setText(buffer); v = settingsDatabase->restore("HIGHLIGHTROW1")->getIntValue(); static_cast(container->getControlByID(CHECKBOX_HIGHLIGHTMODULO1_FULLROW))->checkIt(v!=0); v = settingsDatabase->restore("HIGHLIGHTROW2")->getIntValue(); static_cast(container->getControlByID(CHECKBOX_HIGHLIGHTMODULO2_FULLROW))->checkIt(v!=0); v = settingsDatabase->restore("HEXCOUNT")->getIntValue(); static_cast(container->getControlByID(CHECKBOX_SETTINGS_HEXCOUNT))->checkIt(v!=0); v = settingsDatabase->restore("SHOWZEROEFFECT")->getIntValue(); static_cast(container->getControlByID(CHECKBOX_SETTINGS_SHOWZEROEFFECT))->checkIt(v!=0); v = settingsDatabase->restore("PROSPECTIVE")->getIntValue(); static_cast(container->getControlByID(CHECKBOX_SETTINGS_PROSPECTIVE))->checkIt(v!=0); } }; class TabPageLayout_2 : public TabPage { public: TabPageLayout_2(pp_uint32 id, SectionSettings& sectionSettings) : TabPage(id, sectionSettings) { } virtual void init(PPScreen* screen) { pp_int32 i = 0; pp_int32 x = 0; pp_int32 y = 0; container = new PPTransparentContainer(id, screen, this, PPPoint(x, y), PPSize(PageWidth,PageHeight)); pp_int32 x2 = x; // Colors pp_int32 y2 = y; pp_int32 lbheight = container->getSize().height - (y2 - y) - 66; container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x2 + 2, y2 + 2), "Colors", true, true)); PPButton* button = new PPButton(BUTTON_COLOR_IMPORT, screen, this, PPPoint(x2 + 54, y2 + 2), PPSize(9, 9)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("I"); container->addControl(button); button = new PPButton(BUTTON_COLOR_EXPORT, screen, this, PPPoint(x2 + 54 + 10, y2 + 2), PPSize(9, 9)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("E"); container->addControl(button); button = new PPButton(BUTTON_COLOR_PREVIEW, screen, this, PPPoint(x2 + 115, y2 + 2), PPSize(39, 9)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Preview"); container->addControl(button); button = new PPButton(BUTTON_COLOR_RESTORE, screen, this, PPPoint(x2 + 115 - 40, y2 + 2), PPSize(39, 9)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Restore"); container->addControl(button); y2+=1+11; sectionSettings.listBoxColors = new PPListBox(LISTBOX_COLORS, screen, this, PPPoint(x2+2, y2+2), PPSize(153,lbheight), true, false, true, true); sectionSettings.listBoxColors->setBorderColor(TrackerConfig::colorThemeMain); sectionSettings.listBoxColors->setKeepsFocus(false); sectionSettings.listBoxColors->setShowFocus(false); for (i = 0; i < GlobalColorConfig::ColorLast; i++) { pp_int32 j = sectionSettings.colorMapping[i]; if (sectionSettings.colorDescriptors[j].readableDecription == NULL) break; sectionSettings.listBoxColors->addItem(sectionSettings.colorDescriptors[j].readableDecription); } #ifdef __LOWRES__ y2+=sectionSettings.listBoxColors->getSize().height + 2; #else y2+=sectionSettings.listBoxColors->getSize().height + 4; #endif container->addControl(sectionSettings.listBoxColors); button = new PPColPrevButton(BUTTON_COLOR, screen, this, PPPoint(x2 + 88, y2 + 1), PPSize(31, 34)); button->setFlat(true); button->setColor(sectionSettings.currentColor); container->addControl(button); button = new PPButton(BUTTON_COLOR_COPY, screen, this, PPPoint(x2 + 88 + 32 + 2, y2 + 2), PPSize(5*6+2, 9)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Copy"); container->addControl(button); button = new PPButton(BUTTON_COLOR_PASTE, screen, this, PPPoint(x2 + 88 + 32 + 2, y2 + 2+10), PPSize(5*6+2, 9)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Paste"); container->addControl(button); button = new PPButton(BUTTON_COLOR_DARKER, screen, this, PPPoint(x2 + 88 + 32 + 2, y2 + 2+23), PPSize(16, 9)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("<<"); container->addControl(button); button = new PPButton(BUTTON_COLOR_BRIGHTER, screen, this, PPPoint(x2 + 88 + 32 + 2 + 17, y2 + 2+23), PPSize(15, 9)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText(">>"); container->addControl(button); // Red slider container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x2 + 2, y2 + 2), "R", true)); PPSlider* slider = new PPSlider(SLIDER_COLOR_RED, screen, this, PPPoint(x2 + 2 + 1*8 + 2, y2 + 1), 74, true); slider->setMaxValue(255); slider->setBarSize(16384); container->addControl(slider); y2+=12; container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x2 + 2, y2 + 2), "G", true)); slider = new PPSlider(SLIDER_COLOR_GREEN, screen, this, PPPoint(x2 + 2 + 1*8 + 2, y2 + 1), 74, true); slider->setMaxValue(255); slider->setBarSize(16384); container->addControl(slider); y2+=12; container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x2 + 2, y2 + 2), "B", true)); slider = new PPSlider(SLIDER_COLOR_BLUE, screen, this, PPPoint(x2 + 2 + 1*8 + 2, y2 + 1), 74, true); slider->setMaxValue(255); slider->setBarSize(16384); container->addControl(slider); y2+=12; // predefs pp_int32 px = x2 + 2; PPStaticText* staticText = new PPStaticText(0, NULL, NULL, PPPoint(px, y2 + 3), "Predef:", true); container->addControl(staticText); px+=7*8+2; // pre-defined envelopes for (i = 0; i < TrackerConfig::numPredefinedColorPalettes; i++) { button = new PPButton(BUTTON_COLOR_PREDEF_0+i, screen, this, PPPoint(px, y2 + 2), PPSize(9, 9)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText((char)('A'+i)); container->addControl(button); px+=button->getSize().width+1; } px+=2; button = new PPButton(BUTTON_COLOR_PREDEF_STORE, screen, this, PPPoint(px, y2 + 2), PPSize(5*6+2, 9), true, true, false); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Store"); container->addControl(button); //container->addControl(new PPSeperator(0, screen, PPPoint(x2 + 158, y+4), UPPERFRAMEHEIGHT-8, TrackerConfig::colorThemeMain, false)); } virtual void update(PPScreen* screen, TrackerSettingsDatabase* settingsDatabase, ModuleEditor& moduleEditor) { // Update color from sliders PPSlider* slider = static_cast(container->getControlByID(SLIDER_COLOR_RED)); slider->setCurrentValue(sectionSettings.currentColor.r); slider = static_cast(container->getControlByID(SLIDER_COLOR_GREEN)); slider->setCurrentValue(sectionSettings.currentColor.g); slider = static_cast(container->getControlByID(SLIDER_COLOR_BLUE)); slider->setCurrentValue(sectionSettings.currentColor.b); static_cast(container->getControlByID(BUTTON_COLOR_PASTE))->setClickable(sectionSettings.colorCopy != NULL); } }; class TabPageLayout_3 : public TabPage { public: TabPageLayout_3(pp_uint32 id, SectionSettings& sectionSettings) : TabPage(id, sectionSettings) { } virtual void init(PPScreen* screen) { pp_int32 i; pp_int32 x = 0; pp_int32 y = 0; container = new PPTransparentContainer(id, screen, this, PPPoint(x, y), PPSize(PageWidth,PageHeight)); pp_int32 x2 = x; pp_int32 y2 = y; container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x2 + 2, y2 + 2), "Resolutions", true, true)); PPButton* button = new PPButton(BUTTON_RESOLUTIONS_CUSTOM, screen, this, PPPoint(x2 + 92, y2 + 2), PPSize(37, 9)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Custom"); container->addControl(button); button = new PPButton(BUTTON_RESOLUTIONS_FULL, screen, this, PPPoint(x2 + 92 + 37 + 2, y2 + 2), PPSize(23, 9)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Full"); container->addControl(button); y2+=12; pp_int32 lbheight = container->getSize().height - (y2 - y) - (18); PPListBox* listBox; listBox = new PPListBox(LISTBOX_SETTINGS_RESOLUTIONS, screen, this, PPPoint(x2+2, y2+2), PPSize(153,lbheight), true, false, true, true); listBox->setBorderColor(TrackerConfig::colorThemeMain); listBox->setKeepsFocus(false); listBox->setShowFocus(false); for (i = 0; i < NUMRESOLUTIONS; i++) listBox->addItem(resolutions[i].name); container->addControl(listBox); y2+=lbheight + 6; container->addControl(new PPStaticText(STATICTEXT_SETTINGS_MAGNIFY, NULL, NULL, PPPoint(x2 + 2, y2), "Scale:", true)); PPRadioGroup* radioGroup = new PPRadioGroup(RADIOGROUP_SETTINGS_MAGNIFY, screen, this, PPPoint(x2 + 2 + 7*8, y2 - 4), PPSize(120, 16)); radioGroup->setColor(TrackerConfig::colorThemeMain); radioGroup->setFont(PPFont::getFont(PPFont::FONT_TINY)); radioGroup->setHorizontal(true); radioGroup->addItem("x1"); radioGroup->addItem("x2"); radioGroup->addItem("x4"); radioGroup->addItem("x8"); container->addControl(radioGroup); } virtual void update(PPScreen* screen, TrackerSettingsDatabase* settingsDatabase, ModuleEditor& moduleEditor) { pp_int32 width = settingsDatabase->restore("XRESOLUTION")->getIntValue(); pp_int32 height = settingsDatabase->restore("YRESOLUTION")->getIntValue(); bool found = false; for (pp_int32 i = 0; i < NUMRESOLUTIONS; i++) { if (resolutions[i].width == width && resolutions[i].height == height) { static_cast(container->getControlByID(LISTBOX_SETTINGS_RESOLUTIONS))->setSelectedIndex(i, false, false); found = true; break; } } if (!found) static_cast(container->getControlByID(LISTBOX_SETTINGS_RESOLUTIONS))->setSelectedIndex(NUMRESOLUTIONS-1, false, false); static_cast(container->getControlByID(STATICTEXT_SETTINGS_MAGNIFY))->enable(screen->supportsScaling()); static_cast(container->getControlByID(RADIOGROUP_SETTINGS_MAGNIFY))->enable(screen->supportsScaling()); pp_int32 screenScaleFactor = settingsDatabase->restore("SCREENSCALEFACTOR")->getIntValue(); pp_int32 index = 0; switch (screenScaleFactor) { case 2: index = 1; break; case 4: index = 2; break; case 8: index = 3; break; } static_cast(container->getControlByID(RADIOGROUP_SETTINGS_MAGNIFY))->setChoice(index); } }; class TabPageLayout_4 : public TabPage { public: TabPageLayout_4(pp_uint32 id, SectionSettings& sectionSettings) : TabPage(id, sectionSettings) { } virtual void init(PPScreen* screen) { pp_int32 x = 0; pp_int32 y = 0; container = new PPTransparentContainer(id, screen, this, PPPoint(x, y), PPSize(PageWidth,PageHeight)); pp_int32 x2 = x; pp_int32 y2 = y; container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x2 + 2, y2 + 2), "Global", true, true)); y2+=4+11; PPCheckBox* checkBox = new PPCheckBox(CHECKBOX_SETTINGS_FULLSCREEN, screen, this, PPPoint(x2 + 4 + 17 * 8 + 4, y2 - 1)); container->addControl(checkBox); container->addControl(new PPCheckBoxLabel(0, NULL, this, PPPoint(x2 + 4, y2), "Fullscreen:", checkBox, true)); } virtual void update(PPScreen* screen, TrackerSettingsDatabase* settingsDatabase, ModuleEditor& moduleEditor) { pp_int32 v = settingsDatabase->restore("FULLSCREEN")->getIntValue(); static_cast(container->getControlByID(CHECKBOX_SETTINGS_FULLSCREEN))->checkIt(v!=0); } }; class TabPageFonts_1 : public TabPage { public: TabPageFonts_1(pp_uint32 id, SectionSettings& sectionSettings) : TabPage(id, sectionSettings) { } virtual void init(PPScreen* screen) { pp_int32 x = 0; pp_int32 y = 0; container = new PPTransparentContainer(id, screen, this, PPPoint(x, y), PPSize(PageWidth,PageHeight)); pp_int32 i; const char* name = NULL; pp_int32 x2 = x; pp_int32 y2 = y; container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x + 2, y2 + 2), "Pattern Editor", true, true)); y2+=11; PPRadioGroup* radioGroup = new PPRadioGroup(RADIOGROUP_SETTINGS_PATTERNFONT, screen, this, PPPoint(x2, y2), PPSize(159, 0)); radioGroup->setColor(TrackerConfig::colorThemeMain); name = PPFont::getFirstFontFamilyName(); i = 0; while (name) { radioGroup->addItem(name); name = PPFont::getNextFontFamilyName(); i++; } radioGroup->setSize(PPSize(radioGroup->getSize().width, 14*i)); container->addControl(radioGroup); y2+=radioGroup->getSize().height; container->addControl(new PPSeperator(0, screen, PPPoint(x2, y2), 158, TrackerConfig::colorThemeMain, true)); y2+=5; //container->addControl(new PPSeperator(0, screen, PPPoint(x2 + 158, y+4), UPPERFRAMEHEIGHT-8, TrackerConfig::colorThemeMain, false)); } virtual void update(PPScreen* screen, TrackerSettingsDatabase* settingsDatabase, ModuleEditor& moduleEditor) { pp_int32 v = settingsDatabase->restore("PATTERNFONT")->getIntValue(); static_cast(container->getControlByID(RADIOGROUP_SETTINGS_PATTERNFONT))->setChoice(v); } }; class TabPageFonts_2 : public TabPage { public: TabPageFonts_2(pp_uint32 id, SectionSettings& sectionSettings) : TabPage(id, sectionSettings) { } virtual void init(PPScreen* screen) { pp_int32 x = 0; pp_int32 y = 0; container = new PPTransparentContainer(id, screen, this, PPPoint(x, y), PPSize(PageWidth,PageHeight)); pp_int32 x2 = x; pp_int32 y2 = y; container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x2 + 2, y2 + 2), "Font face config", true, true)); y2+=12; container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x2 + 2, y2 + 2), "Available sizes:", true)); y2+=8; pp_int32 lbheight = (container->getSize().height - (y2-y+11*2+2)) / 2; sectionSettings.listBoxFontFamilies = new PPListBox(LISTBOX_SETTINGS_FONTFAMILIES, screen, this, PPPoint(x2+2, y2+2), PPSize(153,lbheight), true, false, true, true); sectionSettings.listBoxFontFamilies->setBorderColor(TrackerConfig::colorThemeMain); sectionSettings.listBoxFontFamilies->setKeepsFocus(false); sectionSettings.listBoxFontFamilies->setShowFocus(false); const char* name = PPFont::getFirstFontFamilyName(); while (name) { sectionSettings.listBoxFontFamilies->addItem(name); name = PPFont::getNextFontFamilyName(); } container->addControl(sectionSettings.listBoxFontFamilies); y2+=sectionSettings.listBoxFontFamilies->getSize().height+2; container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x2 + 2, y2 + 2), "Available faces:", true)); y2+=8; lbheight+=7; sectionSettings.listBoxFontEntries = new PPListBox(LISTBOX_SETTINGS_FONTENTRIES, screen, this, PPPoint(x2+2, y2+2), PPSize(153,lbheight), true, false, true, true); sectionSettings.listBoxFontEntries->setBorderColor(TrackerConfig::colorThemeMain); sectionSettings.listBoxFontEntries->setKeepsFocus(false); sectionSettings.listBoxFontEntries->setShowFocus(false); sectionSettings.enumerateFontFacesInListBox(sectionSettings.listBoxFontFamilies->getSelectedIndex()); container->addControl(sectionSettings.listBoxFontEntries); //container->addControl(new PPSeperator(0, screen, PPPoint(x2 + 158, y+4), UPPERFRAMEHEIGHT-8, TrackerConfig::colorThemeMain, false)); } virtual void update(PPScreen* screen, TrackerSettingsDatabase* settingsDatabase, ModuleEditor& moduleEditor) { PPString str = settingsDatabase->restore(PPFont::getFamilyInternalName((PPFont::FontID)sectionSettings.listBoxFontFamilies->getSelectedIndex()))->getStringValue(); sectionSettings.listBoxFontEntries->setSelectedIndexByItem(str, false); } }; class TabPageMisc_1 : public TabPage { public: TabPageMisc_1(pp_uint32 id, SectionSettings& sectionSettings) : TabPage(id, sectionSettings) { } virtual void init(PPScreen* screen) { pp_int32 x = 0; pp_int32 y = 0; container = new PPTransparentContainer(id, screen, this, PPPoint(x, y), PPSize(PageWidth,PageHeight)); pp_int32 x2 = x; pp_int32 y2 = y; container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x2 + 2, y2 + 2), "Edit mode", true, true)); PPRadioGroup* radioGroup = new PPRadioGroup(RADIOGROUP_SETTINGS_EDITMODE, screen, this, PPPoint(x2, y2+2+11), PPSize(160, 42)); radioGroup->setColor(TrackerConfig::colorThemeMain); radioGroup->addItem("MilkyTracker"); radioGroup->addItem("Fasttracker II"); container->addControl(radioGroup); y2+=3*12+8; container->addControl(new PPSeperator(0, screen, PPPoint(x2, y2), 156, TrackerConfig::colorThemeMain, true)); y2+=6; container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x2 + 2, y2 + 2), "Scrolling Style", true, true)); radioGroup = new PPRadioGroup(RADIOGROUP_SETTINGS_SCROLLMODE, screen, this, PPPoint(x2, y2+2+11), PPSize(160, 42)); radioGroup->setColor(TrackerConfig::colorThemeMain); radioGroup->addItem("Scroll to end"); radioGroup->addItem("Scroll to center"); radioGroup->addItem("Always centered"); container->addControl(radioGroup); //container->addControl(new PPSeperator(0, screen, PPPoint(x2 + 158, y+4), UPPERFRAMEHEIGHT-8, TrackerConfig::colorThemeMain, false)); } virtual void update(PPScreen* screen, TrackerSettingsDatabase* settingsDatabase, ModuleEditor& moduleEditor) { pp_int32 v = settingsDatabase->restore("EDITMODE")->getIntValue(); static_cast(container->getControlByID(RADIOGROUP_SETTINGS_EDITMODE))->setChoice(v); v = settingsDatabase->restore("SCROLLMODE")->getIntValue(); static_cast(container->getControlByID(RADIOGROUP_SETTINGS_SCROLLMODE))->setChoice(v); } }; class TabPageMisc_2 : public TabPage { public: TabPageMisc_2(pp_uint32 id, SectionSettings& sectionSettings) : TabPage(id, sectionSettings) { } virtual void init(PPScreen* screen) { pp_int32 x = 0; pp_int32 y = 0; container = new PPTransparentContainer(id, screen, this, PPPoint(x, y), PPSize(PageWidth,PageHeight)); pp_int32 y2 = y; pp_int32 x2 = x; container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x2 + 2, y2 + 2), "Pattern Editor", true, true)); y2+=4+11; PPCheckBox* checkBox = new PPCheckBox(CHECKBOX_SETTINGS_AUTORESIZE, screen, this, PPPoint(x2 + 4 + 17 * 8 + 4, y2 - 1)); container->addControl(checkBox); container->addControl(new PPCheckBoxLabel(0, NULL, this, PPPoint(x2 + 2, y2), "Paste autoresize:", checkBox, true)); y2+=12; checkBox = new PPCheckBox(CHECKBOX_SETTINGS_INSTRUMENTBACKTRACE, screen, this, PPPoint(x2 + 4 + 17 * 8 + 4, y2 - 1)); container->addControl(checkBox); container->addControl(new PPCheckBoxLabel(0, NULL, this, PPPoint(x2 + 2, y2), "Instr. backtrace:", checkBox, true)); y2+=12; checkBox = new PPCheckBox(CHECKBOX_SETTINGS_TABTONOTE, screen, this, PPPoint(x2 + 4 + 17 * 8 + 4, y2 - 1)); container->addControl(checkBox); container->addControl(new PPCheckBoxLabel(0, NULL, this, PPPoint(x2 + 2, y2), "TAB to note:", checkBox, true)); y2+=12; checkBox = new PPCheckBox(CHECKBOX_SETTINGS_CLICKTOCURSOR, screen, this, PPPoint(x2 + 4 + 17 * 8 + 4, y2 - 1)); container->addControl(checkBox); container->addControl(new PPCheckBoxLabel(0, NULL, this, PPPoint(x2 + 2, y2), "Click to cursor:", checkBox, true)); y2+=12; checkBox = new PPCheckBox(CHECKBOX_SETTINGS_WRAPCURSOR, screen, this, PPPoint(x2 + 4 + 17 * 8 + 4, y2 - 1)); container->addControl(checkBox); container->addControl(new PPCheckBoxLabel(0, NULL, this, PPPoint(x2 + 2, y2), "Wrap cursor:", checkBox, true)); y2+=11; //container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x2 + 2, y2), "Follow song:", true)); //container->addControl(new PPCheckBox(CHECKBOX_SETTINGS_FOLLOWSONG, screen, this, PPPoint(x2 + 4 + 17*8 + 4, y2-1))); // ------------------ sample editor ------------------- container->addControl(new PPSeperator(0, screen, PPPoint(x2, y2), 158, TrackerConfig::colorThemeMain, true)); y2+=3; container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x2 + 2, y2), "Sample Editor", true, true)); y2+=4+11; checkBox = new PPCheckBox(CHECKBOX_SETTINGS_SAMPLEEDITORUNDO, screen, this, PPPoint(x2 + 4 + 17 * 8 + 4, y2 - 1)); container->addControl(checkBox); container->addControl(new PPCheckBoxLabel(0, NULL, this, PPPoint(x2 + 2, y2), "Enable undo buff:", checkBox, true)); y2+=14; checkBox = new PPCheckBox(CHECKBOX_SETTINGS_AUTOMIXDOWNSAMPLES, screen, this, PPPoint(x2 + 4 + 17 * 8 + 4, y2 - 3)); container->addControl(checkBox); PPCheckBoxLabel* cbLabel = new PPCheckBoxLabel(0, NULL, this, PPPoint(x2 + 2, y2), "Auto-mixdown stereo samples:", checkBox, true); cbLabel->setFont(PPFont::getFont(PPFont::FONT_TINY)); container->addControl(cbLabel); y2+=10; /*// ------------------ other ------------------- container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x2 + 2, y2), "Other", true, true)); y2+=4+11; PPStaticText* statict = new PPStaticText(0, NULL, NULL, PPPoint(x2 + 2, y2), "Estimate playtime after load", true); statict->setFont(PPFont::getFont(PPFont::FONT_TINY)); container->addControl(statict); container->addControl(new PPCheckBox(CHECKBOX_SETTINGS_AUTOESTPLAYTIME, screen, this, PPPoint(x2 + 4 + 17*8 + 4, y2-3)));*/ //container->addControl(new PPSeperator(0, screen, PPPoint(x2 + 158, y+4), UPPERFRAMEHEIGHT-8, TrackerConfig::colorThemeMain, false)); } virtual void update(PPScreen* screen, TrackerSettingsDatabase* settingsDatabase, ModuleEditor& moduleEditor) { pp_int32 v = settingsDatabase->restore("PATTERNAUTORESIZE")->getIntValue(); static_cast(container->getControlByID(CHECKBOX_SETTINGS_AUTORESIZE))->checkIt(v!=0); v = settingsDatabase->restore("INSTRUMENTBACKTRACE")->getIntValue(); static_cast(container->getControlByID(CHECKBOX_SETTINGS_INSTRUMENTBACKTRACE))->checkIt(v!=0); v = settingsDatabase->restore("TABTONOTE")->getIntValue(); static_cast(container->getControlByID(CHECKBOX_SETTINGS_TABTONOTE))->checkIt(v!=0); v = settingsDatabase->restore("CLICKTOCURSOR")->getIntValue(); static_cast(container->getControlByID(CHECKBOX_SETTINGS_CLICKTOCURSOR))->checkIt(v!=0); //v = settingsDatabase->restore("WRAPAROUND")->getIntValue(); //static_cast(container->getControlByID(CHECKBOX_SETTINGS_WRAPCURSOR))->checkIt(v!=0); //v = settingsDatabase->restore("FOLLOWSONG")->getIntValue(); //static_cast(container->getControlByID(CHECKBOX_SETTINGS_FOLLOWSONG))->checkIt(v!=0); /*v = settingsDatabase->restore("AUTOESTPLAYTIME")->getIntValue(); static_cast(container->getControlByID(CHECKBOX_SETTINGS_AUTOESTPLAYTIME))->checkIt(v!=0);*/ v = settingsDatabase->restore("SAMPLEEDITORUNDOBUFFER")->getIntValue(); static_cast(container->getControlByID(CHECKBOX_SETTINGS_SAMPLEEDITORUNDO))->checkIt(v!=0); v = settingsDatabase->restore("AUTOMIXDOWNSAMPLES")->getIntValue(); static_cast(container->getControlByID(CHECKBOX_SETTINGS_AUTOMIXDOWNSAMPLES))->checkIt(v!=0); } }; class TabPageMisc_3 : public TabPage { public: TabPageMisc_3(pp_uint32 id, SectionSettings& sectionSettings) : TabPage(id, sectionSettings) { } virtual void init(PPScreen* screen) { pp_int32 x = 0; pp_int32 y = 0; container = new PPTransparentContainer(id, screen, this, PPPoint(x, y), PPSize(PageWidth,PageHeight)); pp_int32 x2 = x; pp_int32 y2 = y; container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x2 + 2, y2), "Other", true, true)); y2+=4+11; PPCheckBox* checkBox = new PPCheckBox(CHECKBOX_SETTINGS_INTERNALDISKBROWSER, screen, this, PPPoint(x2 + 4 + 17 * 8 + 4, y2 - 1)); container->addControl(checkBox); container->addControl(new PPCheckBoxLabel(0, NULL, this, PPPoint(x2 + 2, y2), "Internal browser:", checkBox, true)); y2+=12; checkBox = new PPCheckBox(CHECKBOX_SETTINGS_SHOWSPLASH, screen, this, PPPoint(x2 + 4 + 17 * 8 + 4, y2 - 1)); container->addControl(checkBox); container->addControl(new PPCheckBoxLabel(0, NULL, this, PPPoint(x2 + 2, y2), "Splash screen:", checkBox, true)); y2+=14; checkBox = new PPCheckBox(CHECKBOX_SETTINGS_AUTOESTPLAYTIME, screen, this, PPPoint(x2 + 4 + 17 * 8 + 4, y2 - 3)); container->addControl(checkBox); PPCheckBoxLabel* cbLabel = new PPCheckBoxLabel(0, NULL, this, PPPoint(x2 + 2, y2), "Estimate playtime after load", checkBox, true); cbLabel->setFont(PPFont::getFont(PPFont::FONT_TINY)); container->addControl(cbLabel); y2+=10; #ifndef __LOWRES__ checkBox = new PPCheckBox(CHECKBOX_SETTINGS_SCOPES, screen, this, PPPoint(x2 + 4 + 17 * 8 + 4, y2 - 1)); container->addControl(checkBox); container->addControl(new PPCheckBoxLabel(0, NULL, this, PPPoint(x2 + 2, y2), "Show scopes:", checkBox, true)); y2+=12; #endif container->addControl(new PPStaticText(STATICTEXT_SETTINGS_SCOPESAPPEARANCE, NULL, NULL, PPPoint(x2 + 2, y2), "Scope Style:", true)); PPRadioGroup* radioGroup = new PPRadioGroup(RADIOGROUP_SETTINGS_SCOPESAPPEARANCE, screen, this, PPPoint(x2, y2+10), PPSize(160, 42)); radioGroup->setColor(TrackerConfig::colorThemeMain); radioGroup->setFont(PPFont::getFont(PPFont::FONT_TINY)); radioGroup->addItem("Dots"); radioGroup->addItem("Solid"); radioGroup->addItem("Smooth Lines"); container->addControl(radioGroup); //container->addControl(new PPSeperator(0, screen, PPPoint(x2 + 158, y+4), UPPERFRAMEHEIGHT-8, TrackerConfig::colorThemeMain, false)); } virtual void update(PPScreen* screen, TrackerSettingsDatabase* settingsDatabase, ModuleEditor& moduleEditor) { pp_int32 v = settingsDatabase->restore("AUTOESTPLAYTIME")->getIntValue(); static_cast(container->getControlByID(CHECKBOX_SETTINGS_AUTOESTPLAYTIME))->checkIt(v!=0); v = settingsDatabase->restore("INTERNALDISKBROWSER")->getIntValue(); static_cast(container->getControlByID(CHECKBOX_SETTINGS_INTERNALDISKBROWSER))->checkIt(v!=0); v = settingsDatabase->restore("SHOWSPLASH")->getIntValue(); static_cast(container->getControlByID(CHECKBOX_SETTINGS_SHOWSPLASH))->checkIt(v!=0); v = settingsDatabase->restore("SCOPES")->getIntValue(); #ifndef __LOWRES__ static_cast(container->getControlByID(CHECKBOX_SETTINGS_SCOPES))->checkIt(v & 1); static_cast(container->getControlByID(RADIOGROUP_SETTINGS_SCOPESAPPEARANCE))->enable((v & 1) != 0); static_cast(container->getControlByID(STATICTEXT_SETTINGS_SCOPESAPPEARANCE))->enable((v & 1) != 0); #endif static_cast(container->getControlByID(RADIOGROUP_SETTINGS_SCOPESAPPEARANCE))->setChoice(v >> 1); } }; class TabPageMisc_4 : public TabPage { public: TabPageMisc_4(pp_uint32 id, SectionSettings& sectionSettings) : TabPage(id, sectionSettings) { } virtual void init(PPScreen* screen) { pp_int32 x = 0; pp_int32 y = 0; container = new PPTransparentContainer(id, screen, this, PPPoint(x, y), PPSize(PageWidth,PageHeight)); pp_int32 x2 = x; pp_int32 y2 = y; container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x2 + 2, y2), "Other", true, true)); y2+=4+11; PPCheckBox* checkBox = new PPCheckBox(CHECKBOX_SETTINGS_INVERTMWHEELZOOM, screen, this, PPPoint(x2 + 4 + 17 * 8 + 4, y2 - 1)); container->addControl(checkBox); container->addControl(new PPCheckBoxLabel(0, NULL, this, PPPoint(x2 + 2, y2), "Inv. mwheel zoom:", checkBox, true)); y2+=12; } virtual void update(PPScreen* screen, TrackerSettingsDatabase* settingsDatabase, ModuleEditor& moduleEditor) { pp_int32 v = settingsDatabase->restore("INVERTMWHEELZOOM")->getIntValue(); static_cast(container->getControlByID(CHECKBOX_SETTINGS_INVERTMWHEELZOOM))->checkIt(v!=0); } }; class TabPageTabs_1 : public TabPage { public: TabPageTabs_1(pp_uint32 id, SectionSettings& sectionSettings) : TabPage(id, sectionSettings) { } virtual void init(PPScreen* screen) { pp_int32 x = 0; pp_int32 y = 0; container = new PPTransparentContainer(id, screen, this, PPPoint(x, y), PPSize(PageWidth,PageHeight)); pp_int32 x2 = x; pp_int32 y2 = y; container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x2 + 2, y2 + 2), "Load module" PPSTR_PERIODS, true, true)); y2+=12; PPCheckBox* checkBox = new PPCheckBox(CHECKBOX_SETTINGS_LOADMODULEINNEWTAB, screen, this, PPPoint(x + 4 + 17 * 8 + 4, y2 + 2 - 1)); container->addControl(checkBox); container->addControl(new PPCheckBoxLabel(0, NULL, this, PPPoint(x + 4, y2 + 2), PPSTR_PERIODS"in new Tab", checkBox, true)); y2+=12+3; container->addControl(new PPSeperator(0, screen, PPPoint(x2, y2), 158, TrackerConfig::colorThemeMain, true)); y2+=3; container->addControl(new PPStaticText(0, NULL, NULL, PPPoint(x2 + 2, y2 + 2), "Stop background", true, true)); PPRadioGroup* radioGroup = new PPRadioGroup(RADIOGROUP_SETTINGS_STOPBACKGROUNDBEHAVIOUR, screen, this, PPPoint(x2, y2+2+11), PPSize(160, 42)); radioGroup->setColor(TrackerConfig::colorThemeMain); radioGroup->addItem("Never"); radioGroup->addItem("On Tab switch"); radioGroup->addItem("On Playback"); container->addControl(radioGroup); y2+=3*14 + 14; checkBox = new PPCheckBox(CHECKBOX_SETTINGS_TABSWITCHRESUMEPLAY, screen, this, PPPoint(x + 4 + 17 * 8 + 4, y2 + 2 - 1)); container->addControl(checkBox); container->addControl(new PPCheckBoxLabel(STATICTEXT_SETTINGS_TABSWITCHRESUMEPLAY, NULL, this, PPPoint(x + 4, y2 + 2), "Tab-switch resume", checkBox, true)); //container->addControl(new PPSeperator(0, screen, PPPoint(x2 + 158, y+4), UPPERFRAMEHEIGHT-8, TrackerConfig::colorThemeMain, false)); } virtual void update(PPScreen* screen, TrackerSettingsDatabase* settingsDatabase, ModuleEditor& moduleEditor) { pp_int32 v = settingsDatabase->restore("TABS_STOPBACKGROUNDBEHAVIOUR")->getIntValue(); static_cast(container->getControlByID(RADIOGROUP_SETTINGS_STOPBACKGROUNDBEHAVIOUR))->setChoice(v); static_cast(container->getControlByID(STATICTEXT_SETTINGS_TABSWITCHRESUMEPLAY))->enable(v != 0); static_cast(container->getControlByID(CHECKBOX_SETTINGS_TABSWITCHRESUMEPLAY))->enable(v != 0); v = settingsDatabase->restore("TABS_TABSWITCHRESUMEPLAY")->getIntValue(); static_cast(container->getControlByID(CHECKBOX_SETTINGS_TABSWITCHRESUMEPLAY))->checkIt(v != 0); v = settingsDatabase->restore("TABS_LOADMODULEINNEWTAB")->getIntValue(); static_cast(container->getControlByID(CHECKBOX_SETTINGS_LOADMODULEINNEWTAB))->checkIt(v != 0); } }; SectionSettings::SectionSettings(Tracker& theTracker) : SectionAbstract(theTracker, NULL, new DialogResponderSettings(*this)), sectionContainer(NULL), listBoxColors(NULL), listBoxFontFamilies(NULL), listBoxFontEntries(NULL), currentActiveTabNum(0), currentActivePageStart(0), visible(false), palette(NULL), storePalette(false), colorCopy(NULL), lastColorFile(TrackerConfig::untitledSong) { pp_int32 i; for (i = 0; i < NUMSETTINGSPAGES; i++) { tabPages.add(new PPSimpleVector()); currentActiveSubPageNum[i] = 0; } initColorDescriptors(); currentColor.set(128, 128, 128); palette = new TColorPalette(); mixerSettings = new TMixerSettings(); // predefined color palettes predefinedColorPalettes = new ColorPaletteContainer(TrackerConfig::numPredefinedColorPalettes); for (i = 0; i < getNumPredefinedColorPalettes(); i++) { /*TColorPalette pal; pal.numColors = GlobalColorConfig::ColorLast; for (j = 0; j < pal.numColors; j++) { pal.colors[j].set(rand()&255, rand()&255, rand()&255); }*/ predefinedColorPalettes->store(i, ColorPaletteContainer::decodePalette(TrackerConfig::predefinedColorPalettes[i])); } for (i = 0; i < GlobalColorConfig::ColorLast; i++) colorMapping[i] = GlobalColorConfig::ColorLast-1; colorMapping[0] = GlobalColorConfig::ColorTheme; colorMapping[1] = GlobalColorConfig::ColorForegroundText; colorMapping[2] = GlobalColorConfig::ColorTextHighlited; colorMapping[3] = GlobalColorConfig::ColorRowHighlitedFirst; colorMapping[4] = GlobalColorConfig::ColorTextHighlitedSecond; colorMapping[5] = GlobalColorConfig::ColorRowHighlitedSecond; colorMapping[6] = GlobalColorConfig::ColorPatternNote; colorMapping[7] = GlobalColorConfig::ColorPatternInstrument; colorMapping[8] = GlobalColorConfig::ColorPatternVolume; colorMapping[9] = GlobalColorConfig::ColorPatternEffect; colorMapping[10] = GlobalColorConfig::ColorPatternOperand; colorMapping[11] = GlobalColorConfig::ColorCursor; colorMapping[12] = GlobalColorConfig::ColorCursorLine; colorMapping[13] = GlobalColorConfig::ColorCursorLineHighlighted; colorMapping[14] = GlobalColorConfig::ColorPatternSelection; colorMapping[15] = GlobalColorConfig::ColorButtons; colorMapping[16] = GlobalColorConfig::ColorButtonText; colorMapping[17] = GlobalColorConfig::ColorRecordModeButtonText; colorMapping[18] = GlobalColorConfig::ColorSelection; colorMapping[19] = GlobalColorConfig::ColorListBoxBackground; colorMapping[20] = GlobalColorConfig::ColorScrollBarBackground; colorMapping[21] = GlobalColorConfig::ColorScopes; colorMapping[22] = GlobalColorConfig::ColorScopesRecordIndicator; colorMapping[23] = GlobalColorConfig::ColorPeakClipIndicator; colorMapping[24] = GlobalColorConfig::ColorSampleEditorWaveform; } SectionSettings::~SectionSettings() { delete predefinedColorPalettes; delete palette; delete mixerSettings; delete colorCopy; } pp_int32 SectionSettings::getColorIndex() { return listBoxColors ? colorMapping[listBoxColors->getSelectedIndex()] : colorMapping[0]; } void SectionSettings::showRestartMessageBox() { if (tracker.settingsDatabase->restore("XRESOLUTION")->getIntValue() != tracker.settingsDatabaseCopy->restore("XRESOLUTION")->getIntValue() || tracker.settingsDatabase->restore("YRESOLUTION")->getIntValue() != tracker.settingsDatabaseCopy->restore("YRESOLUTION")->getIntValue() || tracker.settingsDatabase->restore("SCREENSCALEFACTOR")->getIntValue() != tracker.settingsDatabaseCopy->restore("SCREENSCALEFACTOR")->getIntValue()) { SystemMessage message(*tracker.screen, SystemMessage::MessageResChangeRestart); message.show(); } } pp_int32 SectionSettings::handleEvent(PPObject* sender, PPEvent* event) { if (event->getID() == eCommand || event->getID() == eCommandRepeat) { switch (reinterpret_cast(sender)->getID()) { case PAGE_BUTTON_0: case PAGE_BUTTON_1: case PAGE_BUTTON_2: case PAGE_BUTTON_3: case PAGE_BUTTON_4: { pp_int32 i = reinterpret_cast(sender)->getID()-PAGE_BUTTON_0; showPage(i, currentActiveSubPageNum[i]); update(); break; } case SUBPAGE_BUTTON_LEFT_0: case SUBPAGE_BUTTON_LEFT_1: case SUBPAGE_BUTTON_LEFT_2: case SUBPAGE_BUTTON_LEFT_3: case SUBPAGE_BUTTON_LEFT_4: { pp_int32 i = currentActiveSubPageNum[currentActiveTabNum] - 1; if (i>=0) { showPage(currentActiveTabNum, i); update(); } break; } case SUBPAGE_BUTTON_RIGHT_0: case SUBPAGE_BUTTON_RIGHT_1: case SUBPAGE_BUTTON_RIGHT_2: case SUBPAGE_BUTTON_RIGHT_3: case SUBPAGE_BUTTON_RIGHT_4: { pp_int32 i = currentActiveSubPageNum[currentActiveTabNum] + 1; if (isize()) { showPage(currentActiveTabNum, i); update(); } break; } case BUTTON_SETTINGS_OK: { if (event->getID() != eCommand) break; showRestartMessageBox(); // Store new palette settings saveCurrentGlobalPalette(); storeCurrentPaletteToDatabase(); tracker.applySettings(tracker.settingsDatabase, tracker.settingsDatabaseCopy); // Store new mixer settings saveCurrentMixerSettings(*mixerSettings); show(false); tracker.sectionSamples->update(false); tracker.screen->paint(); break; } case BUTTON_SETTINGS_APPLY: { if (event->getID() != eCommand) break; showRestartMessageBox(); // Store new palette settings saveCurrentGlobalPalette(); storeCurrentPaletteToDatabase(); tracker.applySettings(tracker.settingsDatabase, tracker.settingsDatabaseCopy); // Store new mixer settings saveCurrentMixerSettings(*mixerSettings); update(false); tracker.sectionSamples->update(false); tracker.screen->paint(); delete tracker.settingsDatabaseCopy; tracker.settingsDatabaseCopy = new TrackerSettingsDatabase(*tracker.settingsDatabase); break; } case BUTTON_SETTINGS_CANCEL: { if (event->getID() != eCommand) break; cancelSettings(); break; } case BUTTON_SETTINGS_CHOOSEDRIVER: { if (event->getID() != eCommand) break; showSelectDriverMessageBox(); break; } case CHECKBOX_SETTINGS_RAMPING: { if (event->getID() != eCommand) break; tracker.settingsDatabase->store("RAMPING", (pp_int32)reinterpret_cast(sender)->isChecked()); update(); break; } case BUTTON_SETTINGS_RESAMPLING: { if (event->getID() != eCommand) break; showResamplerMessageBox(); break; } case CHECKBOX_SETTINGS_FORCEPOWER2BUFF: { if (event->getID() != eCommand) break; tracker.settingsDatabase->store("FORCEPOWEROFTWOBUFFERSIZE", (pp_int32)reinterpret_cast(sender)->isChecked()); update(); break; } case CHECKBOX_SETTINGS_VIRTUALCHANNELS: { if (reinterpret_cast(sender)->isChecked()) tracker.settingsDatabase->store("VIRTUALCHANNELS", 32); else tracker.settingsDatabase->store("VIRTUALCHANNELS", 0); update(); break; } case BUTTON_SETTINGS_VIRTUALCHANNELS_PLUS: { pp_int32 v = tracker.settingsDatabase->restore("VIRTUALCHANNELS")->getIntValue() + 1; if (v > 99) v = 99; tracker.settingsDatabase->store("VIRTUALCHANNELS", v); update(); break; } case BUTTON_SETTINGS_VIRTUALCHANNELS_MINUS: { pp_int32 v = tracker.settingsDatabase->restore("VIRTUALCHANNELS")->getIntValue() - 1; if (v < 0) v = 0; tracker.settingsDatabase->store("VIRTUALCHANNELS", v); update(); break; } case CHECKBOX_SETTINGS_MULTICHN_RECORD: { if (event->getID() != eCommand) break; tracker.settingsDatabase->store("MULTICHN_RECORD", (pp_int32)reinterpret_cast(sender)->isChecked()); update(); break; } case CHECKBOX_SETTINGS_MULTICHN_KEYJAZZ: { if (event->getID() != eCommand) break; tracker.settingsDatabase->store("MULTICHN_KEYJAZZ", (pp_int32)reinterpret_cast(sender)->isChecked()); update(); break; } case CHECKBOX_SETTINGS_MULTICHN_EDIT: { if (event->getID() != eCommand) break; tracker.settingsDatabase->store("MULTICHN_EDIT", (pp_int32)reinterpret_cast(sender)->isChecked()); update(); break; } case CHECKBOX_SETTINGS_MULTICHN_RECORDKEYOFF: { if (event->getID() != eCommand) break; tracker.settingsDatabase->store("MULTICHN_RECORDKEYOFF", (pp_int32)reinterpret_cast(sender)->isChecked()); update(); break; } case CHECKBOX_SETTINGS_MULTICHN_RECORDNOTEDELAY: { if (event->getID() != eCommand) break; tracker.settingsDatabase->store("MULTICHN_RECORDNOTEDELAY", (pp_int32)reinterpret_cast(sender)->isChecked()); update(); break; } case CHECKBOX_SETTINGS_HEXCOUNT: { if (event->getID() != eCommand) break; tracker.settingsDatabase->store("HEXCOUNT", (pp_int32)reinterpret_cast(sender)->isChecked()); update(); break; } case CHECKBOX_SETTINGS_SHOWZEROEFFECT: { if (event->getID() != eCommand) break; tracker.settingsDatabase->store("SHOWZEROEFFECT", (pp_int32)reinterpret_cast(sender)->isChecked()); update(); break; } case CHECKBOX_SETTINGS_FULLSCREEN: { if (event->getID() != eCommand) break; tracker.settingsDatabase->store("FULLSCREEN", (pp_int32)reinterpret_cast(sender)->isChecked()); update(); break; } case CHECKBOX_SETTINGS_INSTRUMENTBACKTRACE: { if (event->getID() != eCommand) break; tracker.settingsDatabase->store("INSTRUMENTBACKTRACE", (pp_int32)reinterpret_cast(sender)->isChecked()); update(); break; } case CHECKBOX_SETTINGS_AUTORESIZE: { if (event->getID() != eCommand) break; tracker.settingsDatabase->store("PATTERNAUTORESIZE", (pp_int32)reinterpret_cast(sender)->isChecked()); update(); break; } case CHECKBOX_SETTINGS_TABTONOTE: { if (event->getID() != eCommand) break; tracker.settingsDatabase->store("TABTONOTE", (pp_int32)reinterpret_cast(sender)->isChecked()); update(); break; } case CHECKBOX_SETTINGS_CLICKTOCURSOR: { if (event->getID() != eCommand) break; tracker.settingsDatabase->store("CLICKTOCURSOR", (pp_int32)reinterpret_cast(sender)->isChecked()); update(); break; } case CHECKBOX_SETTINGS_WRAPCURSOR: { if (event->getID() != eCommand) break; tracker.settingsDatabase->store("WRAPAROUND", (pp_int32)reinterpret_cast(sender)->isChecked()); update(); break; } case CHECKBOX_SETTINGS_PROSPECTIVE: { if (event->getID() != eCommand) break; tracker.settingsDatabase->store("PROSPECTIVE", (pp_int32)reinterpret_cast(sender)->isChecked()); update(); break; } case BUTTON_HIGHLIGHTMODULO1_PLUS: { pp_int32 v = tracker.settingsDatabase->restore("HIGHLIGHTMODULO1")->getIntValue() + 1; if (v > 99) v = 99; tracker.settingsDatabase->store("HIGHLIGHTMODULO1", v); update(); break; } case BUTTON_HIGHLIGHTMODULO1_MINUS: { pp_int32 v = tracker.settingsDatabase->restore("HIGHLIGHTMODULO1")->getIntValue() - 1; if (v < 1) v = 1; tracker.settingsDatabase->store("HIGHLIGHTMODULO1", v); update(); break; } case BUTTON_HIGHLIGHTMODULO2_PLUS: { pp_int32 v = tracker.settingsDatabase->restore("HIGHLIGHTMODULO2")->getIntValue() + 1; if (v > 99) v = 99; tracker.settingsDatabase->store("HIGHLIGHTMODULO2", v); update(); break; } case CHECKBOX_HIGHLIGHTMODULO1_FULLROW: { if (event->getID() != eCommand) break; tracker.settingsDatabase->store("HIGHLIGHTROW1", (pp_int32)reinterpret_cast(sender)->isChecked()); break; } case BUTTON_HIGHLIGHTMODULO2_MINUS: { pp_int32 v = tracker.settingsDatabase->restore("HIGHLIGHTMODULO2")->getIntValue() - 1; if (v < 1) v = 1; tracker.settingsDatabase->store("HIGHLIGHTMODULO2", v); update(); break; } case CHECKBOX_HIGHLIGHTMODULO2_FULLROW: { if (event->getID() != eCommand) break; tracker.settingsDatabase->store("HIGHLIGHTROW2", (pp_int32)reinterpret_cast(sender)->isChecked()); break; } case CHECKBOX_SETTINGS_SCOPES: { if (event->getID() != eCommand) break; mp_sint32 type = static_cast(sectionContainer->getControlByID(RADIOGROUP_SETTINGS_SCOPESAPPEARANCE))->getChoice(); mp_sint32 value = (reinterpret_cast(sender)->isChecked() ? 1 : 0) | (type << 1); tracker.settingsDatabase->store("SCOPES", value); update(); break; } case CHECKBOX_SETTINGS_INVERTMWHEELZOOM: { if (event->getID() != eCommand) break; tracker.settingsDatabase->store("INVERTMWHEELZOOM", (pp_int32)reinterpret_cast(sender)->isChecked()); break; } //case CHECKBOX_SETTINGS_FOLLOWSONG: //{ // if (event->getID() != eCommand) // break; // tracker.settingsDatabase->store("FOLLOWSONG", (pp_int32)reinterpret_cast(sender)->isChecked()); // update(); // break; //} case CHECKBOX_SETTINGS_SAMPLEEDITORUNDO: { if (event->getID() != eCommand) break; tracker.settingsDatabase->store("SAMPLEEDITORUNDOBUFFER", (pp_int32)reinterpret_cast(sender)->isChecked()); update(); break; } case CHECKBOX_SETTINGS_AUTOMIXDOWNSAMPLES: { if (event->getID() != eCommand) break; tracker.settingsDatabase->store("AUTOMIXDOWNSAMPLES", (pp_int32)reinterpret_cast(sender)->isChecked()); update(); break; } case CHECKBOX_SETTINGS_AUTOESTPLAYTIME: { if (event->getID() != eCommand) break; tracker.settingsDatabase->store("AUTOESTPLAYTIME", (pp_int32)reinterpret_cast(sender)->isChecked()); update(); break; } case CHECKBOX_SETTINGS_SHOWSPLASH: { if (event->getID() != eCommand) break; tracker.settingsDatabase->store("SHOWSPLASH", (pp_int32)reinterpret_cast(sender)->isChecked()); update(); break; } case CHECKBOX_SETTINGS_INTERNALDISKBROWSER: { if (event->getID() != eCommand) break; tracker.settingsDatabase->store("INTERNALDISKBROWSER", (pp_int32)reinterpret_cast(sender)->isChecked()); update(); break; } case CHECKBOX_SETTINGS_TABSWITCHRESUMEPLAY: { if (event->getID() != eCommand) break; tracker.settingsDatabase->store("TABS_TABSWITCHRESUMEPLAY", (pp_int32)reinterpret_cast(sender)->isChecked()); update(); break; } case CHECKBOX_SETTINGS_LOADMODULEINNEWTAB: { if (event->getID() != eCommand) break; tracker.settingsDatabase->store("TABS_LOADMODULEINNEWTAB", (pp_int32)reinterpret_cast(sender)->isChecked()); update(); break; } case BUTTON_COLOR_EXPORT: { if (event->getID() != eCommand) break; exportCurrentColorPalette(); break; } case BUTTON_COLOR_IMPORT: { if (event->getID() != eCommand) break; importCurrentColorPalette(); break; } case BUTTON_COLOR_PREVIEW: { if (event->getID() != eCommand) break; updateCurrentColors(); break; } case BUTTON_COLOR_RESTORE: { if (event->getID() != eCommand) break; showRestorePaletteMessageBox(); break; } // predefined color handling case BUTTON_COLOR_PREDEF_0: case BUTTON_COLOR_PREDEF_1: case BUTTON_COLOR_PREDEF_2: case BUTTON_COLOR_PREDEF_3: case BUTTON_COLOR_PREDEF_4: case BUTTON_COLOR_PREDEF_5: { if (event->getID() != eCommand) break; pp_int32 i = reinterpret_cast(sender)->getID() - BUTTON_COLOR_PREDEF_0; if (storePalette) { TColorPalette pal; colorDescriptors[getColorIndex()].colorCopy = currentColor; pal.numColors = GlobalColorConfig::ColorLast; for (pp_int32 j = 0; j < pal.numColors; j++) pal.colors[j] = colorDescriptors[j].colorCopy; predefinedColorPalettes->store(i, pal); storePalette = !storePalette; PPButton* button = static_cast(sectionContainer->getControlByID(BUTTON_COLOR_PREDEF_STORE)); if (!button) break; button->setPressed(storePalette); } else { const TColorPalette* pal = predefinedColorPalettes->restore(i); for (i = 0; i < pal->numColors; i++) { if (i < GlobalColorConfig::ColorLast) { colorDescriptors[i].colorCopy = pal->colors[i]; } } currentColor = colorDescriptors[getColorIndex()].colorCopy; } update(); break; } case BUTTON_COLOR_PREDEF_STORE: { if (event->getID() != eCommand) break; storePalette = !storePalette; PPButton* button = reinterpret_cast(sender); button->setPressed(storePalette); tracker.screen->paintControl(button); break; } case BUTTON_COLOR_COPY: { if (event->getID() != eCommand) break; if (colorCopy == NULL) colorCopy = new PPColor(); *colorCopy = currentColor; update(); break; } case BUTTON_COLOR_PASTE: { if (event->getID() != eCommand || colorCopy == NULL) break; currentColor = *colorCopy; colorDescriptors[getColorIndex()].colorCopy = currentColor; update(); break; } case BUTTON_COLOR_DARKER: { currentColor.scale(0.5f); colorDescriptors[getColorIndex()].colorCopy = currentColor; update(); break; } case BUTTON_COLOR_BRIGHTER: { currentColor.scale(2.0f); colorDescriptors[getColorIndex()].colorCopy = currentColor; update(); break; } case BUTTON_RESOLUTIONS_CUSTOM: { if (event->getID() != eCommand) break; showCustomResolutionMessageBox(); break; } case BUTTON_RESOLUTIONS_FULL: { if (event->getID() != eCommand) break; retrieveDisplayResolution(); break; } } } else if (event->getID() == eValueChanged) { switch (reinterpret_cast(sender)->getID()) { case SLIDER_SETTINGS_BUFFERSIZE: { pp_uint32 v = (reinterpret_cast(sender)->getCurrentValue()+1) << 5; tracker.settingsDatabase->store("BUFFERSIZE", v); update(); break; } case SLIDER_SETTINGS_MIXERVOL: { pp_uint32 v = reinterpret_cast(sender)->getCurrentValue(); tracker.settingsDatabase->store("MIXERVOLUME", v); update(); break; } case SLIDER_SPACING: { pp_uint32 v = reinterpret_cast(sender)->getCurrentValue(); tracker.settingsDatabase->store("SPACING", v); update(); break; } case SLIDER_MUTEFADE: { pp_uint32 v = reinterpret_cast(sender)->getCurrentValue(); tracker.settingsDatabase->store("MUTEFADE", v); update(); break; } // Color manipulation case SLIDER_COLOR_RED: currentColor.r = reinterpret_cast(sender)->getCurrentValue(); colorDescriptors[getColorIndex()].colorCopy = currentColor; update(); break; case SLIDER_COLOR_GREEN: currentColor.g = reinterpret_cast(sender)->getCurrentValue(); colorDescriptors[getColorIndex()].colorCopy = currentColor; update(); break; case SLIDER_COLOR_BLUE: currentColor.b = reinterpret_cast(sender)->getCurrentValue(); colorDescriptors[getColorIndex()].colorCopy = currentColor; update(); break; } } else if (event->getID() == eSelection) { switch (reinterpret_cast(sender)->getID()) { /*case RADIOGROUP_SETTINGS_PAGE: { showPage(reinterpret_cast(sender)->getChoice()); update(); break; }*/ case RADIOGROUP_SETTINGS_AMPLIFY: { pp_int32 v = reinterpret_cast(sender)->getChoice(); tracker.settingsDatabase->store("MIXERSHIFT", v); update(); break; } case RADIOGROUP_SETTINGS_MIXFREQ: { pp_int32 v = reinterpret_cast(sender)->getChoice(); ASSERT(v >= 0 && v < TrackerConfig::numMixFrequencies); tracker.settingsDatabase->store("MIXERFREQ", TrackerConfig::mixFrequencies[v]); update(); break; } case RADIOGROUP_SETTINGS_FREQTAB: { // stop song without resetting main volume tracker.ensureSongStopped(false, false); pp_uint32 v = reinterpret_cast(sender)->getChoice(); tracker.moduleEditor->setFrequency((ModuleEditor::Frequencies)v); update(); tracker.ensureSongPlaying(true); break; } case RADIOGROUP_SETTINGS_XMCHANNELLIMIT: { pp_int32 v = reinterpret_cast(sender)->getChoice(); ASSERT(v >= 0 && v < 3); tracker.settingsDatabase->store("XMCHANNELLIMIT", 1 << (v + 5)); update(); break; } case RADIOGROUP_SETTINGS_PATTERNFONT: { pp_int32 v = reinterpret_cast(sender)->getChoice(); tracker.settingsDatabase->store("PATTERNFONT", v); update(); break; } case RADIOGROUP_SETTINGS_EDITMODE: { pp_int32 v = reinterpret_cast(sender)->getChoice(); #ifdef __LOWRES__ if (v != 0) { SystemMessage message(*tracker.screen, SystemMessage::MessageLimitedInput); message.show(); } #endif tracker.settingsDatabase->store("EDITMODE", v); update(); break; } case RADIOGROUP_SETTINGS_SCROLLMODE: { pp_int32 v = reinterpret_cast(sender)->getChoice(); tracker.settingsDatabase->store("SCROLLMODE", v); update(); break; } case RADIOGROUP_SETTINGS_SCOPESAPPEARANCE: { pp_int32 v = reinterpret_cast(sender)->getChoice(); pp_int32 res = (tracker.settingsDatabase->restore("SCOPES")->getIntValue() & 1) | (v << 1); tracker.settingsDatabase->store("SCOPES", res); update(); break; } case RADIOGROUP_SETTINGS_MAGNIFY: { pp_int32 v = reinterpret_cast(sender)->getChoice(); tracker.settingsDatabase->store("SCREENSCALEFACTOR", 1 << v); update(); break; } case LISTBOX_SETTINGS_RESOLUTIONS: { pp_int32 v = *((pp_int32*)event->getDataPtr()); if (v < NUMRESOLUTIONS-1) { tracker.settingsDatabase->store("XRESOLUTION", resolutions[v].width); tracker.settingsDatabase->store("YRESOLUTION", resolutions[v].height); } update(); } case LISTBOX_COLORS: { currentColor = colorDescriptors[getColorIndex()].colorCopy; update(); break; } case LISTBOX_SETTINGS_FONTFAMILIES: { enumerateFontFacesInListBox(*((pp_int32*)event->getDataPtr())); update(); break; } case LISTBOX_SETTINGS_FONTENTRIES: { pp_int32 index = *((pp_int32*)event->getDataPtr()); //PPFont::selectFontFace((PPFont::FontID)listBoxFontFamilies->getSelectedIndex(), listBoxFontEntries->getItem(index)); tracker.settingsDatabase->store(PPFont::getFamilyInternalName((PPFont::FontID)listBoxFontFamilies->getSelectedIndex()), listBoxFontEntries->getItem(index)); update(); break; } case RADIOGROUP_SETTINGS_STOPBACKGROUNDBEHAVIOUR: { pp_int32 v = reinterpret_cast(sender)->getChoice(); tracker.settingsDatabase->store("TABS_STOPBACKGROUNDBEHAVIOUR", v); update(); break; } } } return 0; } void SectionSettings::showSection(bool bShow) { sectionContainer->show(bShow); } void SectionSettings::show(bool bShow) { SectionAbstract::show(bShow); PPScreen* screen = tracker.screen; visible = bShow; if (!initialised) { init(); } if (initialised) { PatternEditorControl* control = tracker.getPatternEditorControl(); if (bShow) { tracker.showMainMenu(false, true); update(false); if (control) { /*#ifndef control->setLocation(PPPoint(0, SECTIONHEIGHT)); control->setSize(PPSize(screen->getWidth(),screen->getHeight()-SECTIONHEIGHT));*/ #ifdef __LOWRES__ control->setLocation(PPPoint(0, 0)); control->setSize(PPSize(screen->getWidth(),tracker.MAXEDITORHEIGHT()-SECTIONHEIGHT)); #endif } tracker.hideInputControl(); // backup current palette saveCurrentGlobalPalette(); updateColors(); // backup current color currentColor = colorDescriptors[getColorIndex()].colorCopy; // backup current mixer settings saveCurrentMixerSettings(*mixerSettings); } else { tracker.showMainMenu(true, true); tracker.rearrangePatternEditorControl(); } showSection(bShow); // why should we do that? just show the last active tab //showPage(0); screen->paint(); } } void SectionSettings::cancelSettings() { restoreCurrentGlobalPalette(); restoreCurrentMixerSettings(); if (tracker.settingsDatabaseCopy) { tracker.applySettings(tracker.settingsDatabaseCopy, tracker.settingsDatabase, false); delete tracker.settingsDatabase; tracker.settingsDatabase = tracker.settingsDatabaseCopy; tracker.settingsDatabaseCopy = NULL; } show(false); } void SectionSettings::init() { #ifndef __LOWRES__ init(0,0); #else init(0,tracker.screen->getHeight()-SECTIONHEIGHT); #endif } void SectionSettings::init(pp_int32 x, pp_int32 y) { pp_int32 i; PPScreen* screen = tracker.screen; pp_int32 y2 = y; sectionContainer = new PPContainer(CONTAINER_SETTINGS, screen, this, PPPoint(x, y2), PPSize(screen->getWidth(),SECTIONHEIGHT), false); static_cast(sectionContainer)->setColor(TrackerConfig::colorThemeMain); #ifdef __LOWRES__ pp_int32 x2 = 0; #else pp_int32 x2 = 160; #endif while (x2 < screen->getWidth()) { sectionContainer->addControl(new PPSeperator(0, screen, PPPoint(x2 + 158, y+4), UPPERFRAMEHEIGHT-8, TrackerConfig::colorThemeMain, false)); x2+=TabPage::getWidth(); } tabPages.get(0)->add(new TabPageIO_1(PAGE_IO_1, *this)); tabPages.get(0)->add(new TabPageIO_2(PAGE_IO_2, *this)); tabPages.get(0)->add(new TabPageIO_3(PAGE_IO_3, *this)); #ifndef __LOWRES__ tabPages.get(0)->add(new TabPageIO_4(PAGE_IO_4, *this)); #endif tabPages.get(1)->add(new TabPageLayout_1(PAGE_LAYOUT_1, *this)); tabPages.get(1)->add(new TabPageLayout_2(PAGE_LAYOUT_2, *this)); #ifndef __LOWRES__ tabPages.get(1)->add(new TabPageLayout_3(PAGE_LAYOUT_3, *this)); tabPages.get(1)->add(new TabPageLayout_4(PAGE_LAYOUT_4, *this)); #endif tabPages.get(2)->add(new TabPageFonts_1(PAGE_FONTS_1, *this)); tabPages.get(2)->add(new TabPageFonts_2(PAGE_FONTS_2, *this)); tabPages.get(3)->add(new TabPageMisc_1(PAGE_MISC_1, *this)); tabPages.get(3)->add(new TabPageMisc_2(PAGE_MISC_2, *this)); tabPages.get(3)->add(new TabPageMisc_3(PAGE_MISC_3, *this)); tabPages.get(3)->add(new TabPageMisc_4(PAGE_MISC_4, *this)); #ifndef __LOWRES__ tabPages.get(4)->add(new TabPageTabs_1(PAGE_TABS_1, *this)); #endif for (i = 0; i < tabPages.size(); i++) for (pp_int32 j = 0; j < tabPages.get(i)->size(); j++) { tabPages.get(i)->get(j)->init(screen); sectionContainer->addControl(tabPages.get(i)->get(j)->getContainer()); } PPButton* button; const pp_int32 numSettingsPages = NUMSETTINGSPAGES; #ifndef __LOWRES__ const char* subSettingsTexts[] = {"I/O","Layout","Fonts","Misc.","Tabs"}; x2 = x; static_cast(sectionContainer)->addControl(new PPSeperator(0, screen, PPPoint(x2 + 156, y+4), SECTIONHEIGHT-8, TrackerConfig::colorThemeMain, false)); static_cast(sectionContainer)->addControl(new PPSeperator(0, screen, PPPoint(x2 - 2, y+SECTIONHEIGHT-2-12-6), 157, TrackerConfig::colorThemeMain, true)); pp_int32 bWidth = 140 - 14*2; pp_int32 bHeight = ((SECTIONHEIGHT - 2-12-6) - 8) / numSettingsPages; pp_int32 sx = x2 + 10; pp_int32 sy = y2 + 4; for (i = 0; i < numSettingsPages; i++) { button = new PPButton(PAGE_BUTTON_0+i, screen, this, PPPoint(sx, sy), PPSize(bWidth, bHeight), false, true, false); button->setColor(TrackerConfig::colorThemeMain); button->setTextColor(PPUIConfig::getInstance()->getColor(PPUIConfig::ColorStaticText)); button->setText(subSettingsTexts[i]); static_cast(sectionContainer)->addControl(button); button = new PPButton(SUBPAGE_BUTTON_LEFT_0+i, screen, this, PPPoint(sx+140-14*2+1, sy), PPSize(14, bHeight), false); button->setColor(TrackerConfig::colorThemeMain); button->setTextColor(PPUIConfig::getInstance()->getColor(PPUIConfig::ColorStaticText)); button->setText("<"); static_cast(sectionContainer)->addControl(button); button = new PPButton(SUBPAGE_BUTTON_RIGHT_0+i, screen, this, PPPoint(sx+140-14+1, sy), PPSize(14, bHeight), false); button->setColor(TrackerConfig::colorThemeMain); button->setTextColor(PPUIConfig::getInstance()->getColor(PPUIConfig::ColorStaticText)); button->setText(">"); static_cast(sectionContainer)->addControl(button); sy+=bHeight; } x2++; #else const char* subSettingsTexts[] = {"I/O","Layout","Fonts","Misc."}; x2 = screen->getWidth()-160 + 4; //static_cast(sectionContainer)->addControl(new PPSeperator(0, screen, PPPoint(x2 - 4, y+4), UPPERFRAMEHEIGHT-8, TrackerConfig::colorThemeMain, false)); static_cast(sectionContainer)->addControl(new PPSeperator(0, screen, PPPoint(x + 2, y+UPPERFRAMEHEIGHT-4), screen->getWidth()-4, TrackerConfig::colorThemeMain, true)); pp_int32 bWidth = (screen->getWidth()-8-26) / numSettingsPages; pp_int32 bHeight = 13; pp_int32 sx = x + 4; pp_int32 sy = y + UPPERFRAMEHEIGHT; for (i = 0; i < numSettingsPages; i++) { button = new PPButton(PAGE_BUTTON_0+i, screen, this, PPPoint(sx, sy), PPSize(bWidth, bHeight), false, true, false); button->setColor(TrackerConfig::colorThemeMain); button->setTextColor(PPUIConfig::getInstance()->getColor(PPUIConfig::ColorStaticText)); button->setText(subSettingsTexts[i]); static_cast(sectionContainer)->addControl(button); sx+=bWidth; } sx+=1; button = new PPButton(SUBPAGE_BUTTON_LEFT_0, screen, this, PPPoint(sx, sy), PPSize(13, bHeight), false); button->setColor(TrackerConfig::colorThemeMain); button->setTextColor(PPUIConfig::getInstance()->getColor(PPUIConfig::ColorStaticText)); button->setText("<"); static_cast(sectionContainer)->addControl(button); button = new PPButton(SUBPAGE_BUTTON_RIGHT_0, screen, this, PPPoint(sx+13, sy), PPSize(13, bHeight), false); button->setColor(TrackerConfig::colorThemeMain); button->setTextColor(PPUIConfig::getInstance()->getColor(PPUIConfig::ColorStaticText)); button->setText(">"); static_cast(sectionContainer)->addControl(button); //static_cast(sectionContainer)->addControl(new PPSeperator(0, screen, PPPoint(x + 2, sy + bHeight + 1), screen->getWidth()-4, TrackerConfig::colorThemeMain, true)); #endif button = new PPButton(BUTTON_SETTINGS_OK, screen, this, PPPoint(x2+3, y+SECTIONHEIGHT-2-12), PPSize(46, 11)); button->setText("Ok"); static_cast(sectionContainer)->addControl(button); button = new PPButton(BUTTON_SETTINGS_APPLY, screen, this, PPPoint(x2+3+48, y+SECTIONHEIGHT-2-12), PPSize(48, 11)); button->setText("Apply"); static_cast(sectionContainer)->addControl(button); button = new PPButton(BUTTON_SETTINGS_CANCEL, screen, this, PPPoint(x2+3+48+50, y+SECTIONHEIGHT-2-12), PPSize(50, 11)); button->setText("Cancel"); static_cast(sectionContainer)->addControl(button); screen->addControl(sectionContainer); initialised = true; showPage(0, 0); showSection(false); } void SectionSettings::update(bool repaint/* = true*/) { if (!initialised || !visible) return; pp_int32 i, j; #ifdef __LOWRES__ pp_int32 x = 0; #else pp_int32 x = 160; #endif pp_int32 y = sectionContainer->getLocation().y; #ifdef __LOWRES__ static_cast(sectionContainer->getControlByID(SUBPAGE_BUTTON_LEFT_0))->enable(false); static_cast(sectionContainer->getControlByID(SUBPAGE_BUTTON_RIGHT_0))->enable(false); #endif // hide all tab pages first for (i = 0; i < tabPages.size(); i++) { for (j = 0; j < tabPages.get(i)->size(); j++) { tabPages.get(i)->get(j)->getContainer()->show(false); tabPages.get(i)->get(j)->setVisible(false); } #ifndef __LOWRES__ static_cast(sectionContainer->getControlByID(SUBPAGE_BUTTON_LEFT_0+i))->enable(false); static_cast(sectionContainer->getControlByID(SUBPAGE_BUTTON_RIGHT_0+i))->enable(false); #endif } PPPoint location(x, y); pp_int32 lastVisiblePage = 0; for (j = 0; j < tabPages.get(currentActiveTabNum)->size(); j++) { if (j + currentActivePageStart < tabPages.get(currentActiveTabNum)->size()) { TabPage* page = tabPages.get(currentActiveTabNum)->get(j + currentActivePageStart); page->setLocation(location); location.x+=TabPage::getWidth(); if (location.x <= tracker.screen->getWidth()) { page->getContainer()->show(true); page->setVisible(true); lastVisiblePage = j + currentActivePageStart; } } else { location.x+=TabPage::getWidth(); } } i = currentActiveTabNum; #ifdef __LOWRES__ i = 0; #endif PPButton* button = static_cast(sectionContainer->getControlByID(SUBPAGE_BUTTON_RIGHT_0+i)); button->enable(lastVisiblePage < tabPages.get(currentActiveTabNum)->size() - 1); button = static_cast(sectionContainer->getControlByID(SUBPAGE_BUTTON_LEFT_0+i)); button->enable(currentActivePageStart > 0); // update all visible pages for (i = 0; i < tabPages.size(); i++) { for (j = 0; j < tabPages.get(i)->size(); j++) if (tabPages.get(i)->get(j)-isVisible()) { tabPages.get(i)->get(j)->update(tracker.screen, tracker.settingsDatabase, *tracker.moduleEditor); } } tracker.screen->paintControl(sectionContainer, false); if (repaint) tracker.screen->update(); } void SectionSettings::showPage(pp_int32 page, pp_int32 subPage/* = 0*/) { currentActiveTabNum = page; currentActivePageStart = subPage; currentActiveSubPageNum[currentActiveTabNum] = subPage; for (pp_int32 i = 0; i < NUMSETTINGSPAGES; i++) static_cast(static_cast(sectionContainer)->getControlByID(PAGE_BUTTON_0+i))->setPressed(false); static_cast(static_cast(sectionContainer)->getControlByID(PAGE_BUTTON_0+page))->setPressed(true); currentActiveSubPageNum[currentActiveTabNum] = subPage; } void SectionSettings::initColorDescriptors() { for (pp_int32 i = 0; i < GlobalColorConfig::ColorLast; i++) colorDescriptors[i].readableDecription = GlobalColorConfig::getInstance()->getColorReadableDescription((GlobalColorConfig::GlobalColors)i); } void SectionSettings::updateColors() { for (pp_int32 i = 0; i < GlobalColorConfig::ColorLast; i++) colorDescriptors[i].colorCopy = GlobalColorConfig::getInstance()->getColor((GlobalColorConfig::GlobalColors)i); } pp_int32 SectionSettings::getNumPredefinedColorPalettes() { return TrackerConfig::numPredefinedColorPalettes; } PPString SectionSettings::getEncodedPalette(pp_int32 index) { return ColorPaletteContainer::encodePalette(*predefinedColorPalettes->restore(index)); } void SectionSettings::setEncodedPalette(pp_int32 index, const PPString& str) { TColorPalette p = ColorPaletteContainer::decodePalette(str); predefinedColorPalettes->store(index, p); } void SectionSettings::storeCurrentPaletteToDatabase() { TColorPalette pal; pal.numColors = GlobalColorConfig::ColorLast; for (pp_int32 j = 0; j < pal.numColors; j++) pal.colors[j] = colorDescriptors[j].colorCopy; tracker.settingsDatabase->store("ACTIVECOLORS", ColorPaletteContainer::encodePalette(pal)); } void SectionSettings::saveCurrentGlobalPalette() { palette->numColors = GlobalColorConfig::ColorLast; for (pp_int32 i = 0; i < GlobalColorConfig::ColorLast; i++) { if (i < palette->numColors) palette->colors[i] = GlobalColorConfig::getInstance()->getColor((GlobalColorConfig::GlobalColors)i); } } void SectionSettings::restoreCurrentGlobalPalette() { for (pp_int32 i = 0; i < palette->numColors; i++) { if (i < GlobalColorConfig::ColorLast) GlobalColorConfig::getInstance()->setColor((GlobalColorConfig::GlobalColors)i, palette->colors[i]); } } void SectionSettings::updateCurrentColors() { for (pp_int32 i = 0; i < GlobalColorConfig::ColorLast; i++) GlobalColorConfig::getInstance()->setColor((GlobalColorConfig::GlobalColors)i, colorDescriptors[i].colorCopy); tracker.screen->paint(); } void SectionSettings::restorePalettes() { pp_int32 i; for (i = 0; i < getNumPredefinedColorPalettes(); i++) { predefinedColorPalettes->store(i, ColorPaletteContainer::decodePalette(TrackerConfig::predefinedColorPalettes[i])); } *palette = ColorPaletteContainer::decodePalette(TrackerConfig::predefinedColorPalettes[0]); restoreCurrentGlobalPalette(); for (i = 0; i < palette->numColors; i++) if (i < GlobalColorConfig::ColorLast) colorDescriptors[i].colorCopy = palette->colors[i]; currentColor = colorDescriptors[getColorIndex()].colorCopy; tracker.screen->paint(); } void SectionSettings::saveCurrentMixerSettings(TMixerSettings& settings) { tracker.getMixerSettingsFromDatabase(settings, *tracker.settingsDatabase); } void SectionSettings::restoreCurrentMixerSettings() { TMixerSettings newMixerSettings; tracker.getMixerSettingsFromDatabase(newMixerSettings, *tracker.settingsDatabase); if (*mixerSettings != newMixerSettings) { bool res = tracker.playerMaster->applyNewMixerSettings(*mixerSettings, true); if (!res) { SystemMessage message(*tracker.screen, SystemMessage::MessageSoundDriverInitFailed); message.show(); } } } void SectionSettings::showCustomResolutionMessageBox() { if (dialog) { delete dialog; dialog = NULL; } dialog = new DialogWithValues(tracker.screen, responder, RESPONDMESSAGEBOX_CUSTOMRESOLUTION, "Enter custom resolution" PPSTR_PERIODS, DialogWithValues::ValueStyleEnterTwoValues); static_cast(dialog)->setValueOneCaption("Width in pixels:"); static_cast(dialog)->setValueTwoCaption("Height in pixels:"); static_cast(dialog)->setValueOneRange(MINWIDTH, 10000.0f, 0); static_cast(dialog)->setValueTwoRange(MINHEIGHT, 10000.0f, 0); static_cast(dialog)->setValueOneIncreaseStep(1.0f); static_cast(dialog)->setValueTwoIncreaseStep(1.0f); pp_int32 width = tracker.settingsDatabase->restore("XRESOLUTION")->getIntValue(); pp_int32 height = tracker.settingsDatabase->restore("YRESOLUTION")->getIntValue(); static_cast(dialog)->setValueOne((float)width); static_cast(dialog)->setValueTwo((float)height); dialog->show(); } void SectionSettings::showRestorePaletteMessageBox() { if (dialog) { delete dialog; dialog = NULL; } dialog = new PPDialogBase(tracker.screen, responder, RESPONDMESSAGEBOX_RESTOREPALETTES, "Restore all default palettes?"); dialog->show(); } void SectionSettings::showSelectDriverMessageBox() { if (dialog) { delete dialog; dialog = NULL; } dialog = new DialogListBox(tracker.screen, responder, RESPONDMESSAGEBOX_SELECTAUDIODRV, "Select audio driver", true); PPListBox* listBox = static_cast(dialog)->getListBox(); mp_sint32 i = 0; mp_sint32 selectedIndex = -1; const char* name = tracker.playerMaster->getFirstDriverName(); //const char* curDrvName = tracker.playerController->getCurrentDriverName(); const char* curDrvName = tracker.settingsDatabase->restore("AUDIODRIVER")->getStringValue(); while (name) { if (strcmp(name, curDrvName) == 0) selectedIndex = i; listBox->addItem(name); name = tracker.playerMaster->getNextDriverName(); i++; } if (selectedIndex != -1) listBox->setSelectedIndex(selectedIndex, false); dialog->show(); } void SectionSettings::showResamplerMessageBox() { if (dialog) { delete dialog; dialog = NULL; } dialog = new DialogListBox(tracker.screen, responder, RESPONDMESSAGEBOX_SELECTRESAMPLER, "Select Resampler", true); PPListBox* listBox = static_cast(dialog)->getListBox(); ResamplerHelper resamplerHelper; for (pp_uint32 i = 0; i < resamplerHelper.getNumResamplers(); i++) listBox->addItem(resamplerHelper.getResamplerName(i)); listBox->setSelectedIndex(tracker.settingsDatabase->restore("INTERPOLATION")->getIntValue(), false); dialog->show(); } void SectionSettings::storeAudioDriver(const char* driverName) { const char* curDrvName = tracker.playerMaster->getCurrentDriverName(); if (strcmp(curDrvName, driverName) != 0) { tracker.settingsDatabase->store("AUDIODRIVER", driverName); TMixerSettings newMixerSettings; saveCurrentMixerSettings(newMixerSettings); bool res = tracker.playerMaster->applyNewMixerSettings(newMixerSettings, true); if (!res) { SystemMessage message(*tracker.screen, SystemMessage::MessageSoundDriverInitFailed); message.show(); } } update(); } void SectionSettings::storeResampler(pp_uint32 resampler) { tracker.settingsDatabase->store("INTERPOLATION", resampler); TMixerSettings newMixerSettings; newMixerSettings.resampler = resampler; bool res = tracker.playerMaster->applyNewMixerSettings(newMixerSettings, true); if (!res) { SystemMessage message(*tracker.screen, SystemMessage::MessageSoundDriverInitFailed); message.show(); } } void SectionSettings::enumerateFontFacesInListBox(pp_uint32 fontID) { listBoxFontEntries->clear(); const char* name = PPFont::getFirstFontEntryName((PPFont::FontID)fontID); while (name) { listBoxFontEntries->addItem(name); name = PPFont::getNextFontEntryName((PPFont::FontID)fontID); } } void SectionSettings::storeCustomResolution() { pp_int32 width = (pp_int32)static_cast(dialog)->getValueOne(); pp_int32 height = (pp_int32)static_cast(dialog)->getValueTwo(); if (width < MINWIDTH) width = MINWIDTH; if (height < MINHEIGHT) height = MINHEIGHT; tracker.settingsDatabase->store("XRESOLUTION", width); tracker.settingsDatabase->store("YRESOLUTION", height); update(); } void SectionSettings::importCurrentColorPalette() { FileExtProvider fileExtProvider; PPOpenPanel panel(tracker.screen, "Open colors"); panel.addExtensions(fileExtProvider.getColorExtensions()); if (panel.runModal() == PPModalDialog::ReturnCodeOK) { TColorPalette pal; ColorExportImport exportImport(panel.getFileName()); if (exportImport.importColorPalette(pal)) { for (pp_int32 j = 0; j < pal.numColors; j++) colorDescriptors[j].colorCopy = pal.colors[j]; currentColor = colorDescriptors[getColorIndex()].colorCopy; update(); lastColorFile = panel.getFileName(); } else { tracker.showMessageBox(MESSAGEBOX_UNIVERSAL, "Unrecognized type/corrupt file", Tracker::MessageBox_OK); } } } void SectionSettings::exportCurrentColorPalette() { FileExtProvider fileExtProvider; PPSystemString fileName = lastColorFile.stripPath().stripExtension(); fileName.append("."); fileName.append(fileExtProvider.getColorExtension(FileExtProvider::ColorExtensionMCT)); PPSavePanel panel(tracker.screen, "Save colors", fileName); panel.addExtensions(fileExtProvider.getColorExtensions()); if (panel.runModal() == PPModalDialog::ReturnCodeOK) { TColorPalette pal; pal.numColors = GlobalColorConfig::ColorLast; for (pp_int32 j = 0; j < pal.numColors; j++) pal.colors[j] = colorDescriptors[j].colorCopy; ColorExportImport exportImport(panel.getFileName()); if (!exportImport.exportColorPalette(pal)) { tracker.showMessageBox(MESSAGEBOX_UNIVERSAL, "Could not create file", Tracker::MessageBox_OK); } } } void SectionSettings::retrieveDisplayResolution() { PPSize size = tracker.screen->getDisplayResolution(); if (size.width > 0 && size.height > 0) { if (size.width < MINWIDTH) size.width = MINWIDTH; if (size.height < MINHEIGHT) size.height = MINHEIGHT; tracker.settingsDatabase->store("XRESOLUTION", size.width); tracker.settingsDatabase->store("YRESOLUTION", size.height); update(); } else { tracker.showMessageBox(MESSAGEBOX_UNIVERSAL, "Could not retrieve display resolution", Tracker::MessageBox_OK); } } MilkyTracker-1.02.00/src/tracker/SectionSettings.h000066400000000000000000000100431324432207300217710ustar00rootroot00000000000000/* * tracker/SectionSettings.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * SectionSettings.h * MilkyTracker * * Created by Peter Barth on Sun Mar 13 2005. * */ #ifndef SECTIONSETTINGS__H #define SECTIONSETTINGS__H #include "BasicTypes.h" #include "Event.h" #include "SectionAbstract.h" #include "GlobalColorConfig.h" #ifdef __LOWRES__ #define NUMSETTINGSPAGES 4 #else #define NUMSETTINGSPAGES 5 #endif class PPControl; class PPContainer; class PPListBox; struct TColorPalette; struct TMixerSettings; class ColorPaletteContainer; class SectionSettings : public SectionAbstract { private: struct TColorDescriptor { const char* readableDecription; PPColor colorCopy; }; PPContainer* sectionContainer; PPListBox* listBoxColors; PPListBox* listBoxFontFamilies; PPListBox* listBoxFontEntries; PPColor currentColor, *colorCopy; bool visible; pp_int32 currentActiveTabNum; pp_int32 currentActivePageStart; PPSimpleVector > tabPages; pp_int32 currentActiveSubPageNum[NUMSETTINGSPAGES]; TColorDescriptor colorDescriptors[GlobalColorConfig::ColorLast]; pp_int32 colorMapping[GlobalColorConfig::ColorLast]; // Hold 5 predefined palettes ColorPaletteContainer* predefinedColorPalettes; TColorPalette* palette; bool storePalette; // backup of the current mixer settings, will be restored on cancel TMixerSettings* mixerSettings; PPSystemString lastColorFile; void showPage(pp_int32 page, pp_int32 subPage = 0); void showRestartMessageBox(); void initColorDescriptors(); void updateColors(); pp_int32 getColorIndex(); protected: virtual void showSection(bool bShow); public: SectionSettings(Tracker& tracker); virtual ~SectionSettings(); // PPEvent listener virtual pp_int32 handleEvent(PPObject* sender, PPEvent* event); virtual void init(); virtual void init(pp_int32 x, pp_int32 y); virtual void show(bool bShow); virtual void update(bool repaint = true); void cancelSettings(); bool isVisible() { return visible; } private: // color palette handling pp_int32 getNumPredefinedColorPalettes(); PPString getEncodedPalette(pp_int32 index); void setEncodedPalette(pp_int32 index, const PPString& str); void storeCurrentPaletteToDatabase(); void saveCurrentGlobalPalette(); void restoreCurrentGlobalPalette(); void updateCurrentColors(); void restorePalettes(); // mixer settings handling void saveCurrentMixerSettings(TMixerSettings& settings); void restoreCurrentMixerSettings(); // font face handling void enumerateFontFacesInListBox(pp_uint32 fontID); // Custom resolution void storeCustomResolution(); // Show message box with custom resolutions void showCustomResolutionMessageBox(); // Message box which asks if default palettes should // be restored void showRestorePaletteMessageBox(); // Message box which asks for an audio driver void showSelectDriverMessageBox(); // Message box with list of resampler void showResamplerMessageBox(); void storeAudioDriver(const char* driverName); void storeResampler(pp_uint32 resampler); void importCurrentColorPalette(); void exportCurrentColorPalette(); void retrieveDisplayResolution(); // Responder should be friend friend class DialogResponderSettings; friend class TabPageLayout_2; friend class TabPageLayout_3; friend class TabPageFonts_1; friend class TabPageFonts_2; friend class Tracker; }; #endif MilkyTracker-1.02.00/src/tracker/SectionSwitcher.cpp000066400000000000000000000132371324432207300223240ustar00rootroot00000000000000/* * tracker/SectionSwitcher.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * SectionSwitcher.cpp * MilkyTracker * * Created by Peter Barth on 09.04.08. * */ #include "SectionSwitcher.h" #include "Tracker.h" #include "Screen.h" #include "Container.h" #include "SectionInstruments.h" #include "SectionSamples.h" #include "ScopesControl.h" #include "PatternEditorControl.h" #include "ControlIDs.h" SectionSwitcher::SectionSwitcher(Tracker& tracker) : tracker(tracker), bottomSection(ActiveBottomSectionNone), #ifdef __LOWRES__ lowerSectionPage(ActiveLowerSectionPageMain), #endif currentUpperSection(NULL) { } // General bottom sections show/hide void SectionSwitcher::showBottomSection(ActiveBottomSections section, bool paint/* = true*/) { switch (bottomSection) { case ActiveBottomSectionInstrumentEditor: tracker.sectionInstruments->show(false); break; case ActiveBottomSectionSampleEditor: tracker.sectionSamples->show(false); break; case ActiveBottomSectionNone: break; } if (bottomSection != section) bottomSection = section; else bottomSection = ActiveBottomSectionNone; switch (bottomSection) { case ActiveBottomSectionInstrumentEditor: tracker.sectionInstruments->show(true); break; case ActiveBottomSectionSampleEditor: tracker.sectionSamples->show(true); break; case ActiveBottomSectionNone: tracker.rearrangePatternEditorControl(); break; } if (paint) tracker.screen->paint(); } void SectionSwitcher::showUpperSection(SectionAbstract* section, bool hideSIP/* = true*/) { tracker.screen->pauseUpdate(true); if (currentUpperSection) { currentUpperSection->show(false); } if (section) { if (hideSIP) tracker.hideInputControl(); section->show(true); } tracker.screen->pauseUpdate(false); tracker.screen->update(); currentUpperSection = section; } #ifdef __LOWRES__ void SectionSwitcher::showSubMenu(ActiveLowerSectionPages section, bool repaint/* = true*/) { // Hide everything first tracker.showSongSettings(false); tracker.showMainOptions(false); tracker.screen->getControlByID(CONTAINER_INSTRUMENTLIST)->show(false); tracker.screen->getControlByID(CONTAINER_LOWRES_TINYMENU)->show(false); tracker.screen->getControlByID(CONTAINER_LOWRES_JAMMENU)->show(false); tracker.scopesControl->show(false); tracker.screen->getControlByID(CONTAINER_SCOPECONTROL)->show(false); // Last active page was the "Jam"-section so the pattern editor has probably been resized // Check if it was resized and if so, restore original size if (lastLowerSectionPage == ActiveLowerSectionPageJam && section != ActiveLowerSectionPageJam && patternEditorSize != tracker.getPatternEditorControl()->getSize()) { tracker.getPatternEditorControl()->setSize(patternEditorSize); } switch (section) { case ActiveLowerSectionPageMain: tracker.showMainOptions(true); tracker.hideInputControl(false); break; case ActiveLowerSectionPageSong: tracker.showSongSettings(true); tracker.hideInputControl(false); break; case ActiveLowerSectionPageInstruments: tracker.screen->getControlByID(CONTAINER_INSTRUMENTLIST)->show(true); tracker.screen->getControlByID(CONTAINER_LOWRES_TINYMENU)->show(true); tracker.hideInputControl(false); break; case ActiveLowerSectionPageScopes: tracker.scopesControl->show(true); tracker.screen->getControlByID(CONTAINER_SCOPECONTROL)->show(true); tracker.updateScopesControlButtons(); tracker.hideInputControl(false); break; case ActiveLowerSectionPageJam: { PPControl* control = tracker.screen->getControlByID(CONTAINER_LOWRES_JAMMENU); ASSERT(control); patternEditorSize = tracker.getPatternEditorControl()->getSize(); PPSize size(tracker.screen->getWidth(), control->getLocation().y); if (tracker.getPatternEditorControl()->getSize() != size) tracker.getPatternEditorControl()->setSize(size); tracker.hideInputControl(); tracker.screen->getControlByID(CONTAINER_LOWRES_JAMMENU)->show(true); break; } } if (repaint) tracker.screen->paint(); } void SectionSwitcher::switchToSubMenu(ActiveLowerSectionPages lsPageNew) { // same page, nothing to do if (lsPageNew == lowerSectionPage) return; // remember what was currently active lastLowerSectionPage = lowerSectionPage; // apply new page lowerSectionPage = lsPageNew; updateSubMenusButtons(false); // make it visible showSubMenu(lowerSectionPage); } void SectionSwitcher::hideBottomSection() { if (bottomSection != ActiveBottomSectionNone) showBottomSection(ActiveBottomSectionNone, false); } void SectionSwitcher::updateSubMenusButtons(bool repaint/* = true*/) { PPContainer* container = static_cast(tracker.screen->getControlByID(CONTAINER_LOWRES_MENUSWITCH)); for (pp_int32 i = 0; i < tracker.NUMSUBMENUS(); i++) static_cast(container->getControlByID(BUTTON_0+i))->setPressed(false); static_cast(container->getControlByID(BUTTON_0+lowerSectionPage))->setPressed(true); if (repaint) tracker.screen->paintControl(container); } #endif MilkyTracker-1.02.00/src/tracker/SectionSwitcher.h000066400000000000000000000042031324432207300217620ustar00rootroot00000000000000/* * tracker/SectionSwitcher.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * SectionSwitcher.h * MilkyTracker * * Created by Peter Barth on 09.04.08. * */ #ifndef __SECTIONSWITCHER_H__ #define __SECTIONSWITCHER_H__ #include "BasicTypes.h" class SectionSwitcher { public: enum ActiveBottomSections { ActiveBottomSectionNone = 0, ActiveBottomSectionInstrumentEditor, ActiveBottomSectionSampleEditor }; #ifdef __LOWRES__ enum ActiveLowerSectionPages { ActiveLowerSectionPageMain = 0, ActiveLowerSectionPageSong, ActiveLowerSectionPageInstruments, ActiveLowerSectionPageScopes, ActiveLowerSectionPageJam }; #endif private: class Tracker& tracker; ActiveBottomSections bottomSection; #ifdef __LOWRES__ ActiveLowerSectionPages lowerSectionPage; ActiveLowerSectionPages lastLowerSectionPage; PPSize patternEditorSize; #endif class SectionAbstract* currentUpperSection; public: SectionSwitcher(Tracker& tracker); // General bottom sections show/hide void showBottomSection(ActiveBottomSections section, bool paint = true); void showUpperSection(SectionAbstract* section, bool hideSIP = true); #ifdef __LOWRES__ void showSubMenu(ActiveLowerSectionPages section, bool repaint = true); void showCurrentSubMenu(bool repaint = true) { showSubMenu(lowerSectionPage, repaint); } void switchToSubMenu(ActiveLowerSectionPages lsPageNew); void hideBottomSection(); void updateSubMenusButtons(bool repaint = true); #endif }; #endif MilkyTracker-1.02.00/src/tracker/SectionTranspose.cpp000066400000000000000000000555121324432207300225140ustar00rootroot00000000000000/* * tracker/SectionTranspose.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * SectionTranspose.cpp * MilkyTracker * * Created by Peter Barth on 10.04.05. * */ #include "SectionTranspose.h" #include "Tracker.h" #include "TrackerConfig.h" #include "ModuleEditor.h" #include "RadioGroup.h" #include "Seperator.h" #include "StaticText.h" #include "Container.h" #include "PatternEditorControl.h" #include "DialogBase.h" #include "PatternTools.h" #include "Tools.h" #include "ControlIDs.h" enum ControlIDs { TRANSPOSE_BUTTON_INS_PLUS = 31100, TRANSPOSE_BUTTON_INS_MINUS, TRANSPOSE_BUTTON_INS_RANGESTART_PLUS, TRANSPOSE_BUTTON_INS_RANGESTART_MINUS, TRANSPOSE_BUTTON_INS_RANGEEND_PLUS, TRANSPOSE_BUTTON_INS_RANGEEND_MINUS, TRANSPOSE_BUTTON_NOTE_PLUS, TRANSPOSE_BUTTON_NOTE_MINUS, TRANSPOSE_BUTTON_NOTE_RANGESTART_PLUS, TRANSPOSE_BUTTON_NOTE_RANGESTART_MINUS, TRANSPOSE_BUTTON_NOTE_RANGEEND_PLUS, TRANSPOSE_BUTTON_NOTE_RANGEEND_MINUS, TRANSPOSE_BUTTON_AMOUNT_PLUS, TRANSPOSE_BUTTON_AMOUNT_MINUS, TRANSPOSE_BUTTON_AMOUNT_NOTEUP, TRANSPOSE_BUTTON_AMOUNT_NOTEDOWN, TRANSPOSE_BUTTON_AMOUNT_OCTAVEUP, TRANSPOSE_BUTTON_AMOUNT_OCTAVEDOWN, TRANSPOSE_BUTTON_USER1, TRANSPOSE_BUTTON_USER2, TRANSPOSE_BUTTON_USER3, TRANSPOSE_BUTTON_USER4, TRANSPOSE_BUTTON_EXIT, TRANSPOSE_TEXT_INS, TRANSPOSE_TEXT_INS_RANGESTART, TRANSPOSE_TEXT_INS_RANGEEND, TRANSPOSE_TEXT_NOTE, TRANSPOSE_TEXT_NOTE_RANGESTART, TRANSPOSE_TEXT_NOTE_RANGEEND, TRANSPOSE_TEXT_AMOUNT, TRANSPOSE_TEXT_AMOUNT2 }; // Class which responds to message box clicks class DialogResponderTranspose : public DialogResponder { private: SectionTranspose& section; public: DialogResponderTranspose(SectionTranspose& section) : section(section) { } virtual pp_int32 ActionOkay(PPObject* sender) { switch (reinterpret_cast(sender)->getID()) { case MESSAGEBOX_TRANSPOSEPROCEED: section.transposeSong(); break; } return 0; } }; SectionTranspose::SectionTranspose(Tracker& theTracker) : SectionUpperLeft(theTracker, NULL, new DialogResponderTranspose(*this)) { currentInstrumentRangeStart = 0; currentInstrumentRangeEnd = 0; currentTransposeAmount = 1; currentNote = currentNoteRangeStart = currentNoteRangeEnd = 48; } SectionTranspose::~SectionTranspose() { } void SectionTranspose::setCurrentInstrument(pp_int32 instrument, bool redraw/* = true*/) { instrument--; currentInstrument = currentInstrumentRangeStart = currentInstrumentRangeEnd = instrument; if (sectionContainer->isVisible()) { update(redraw); } } pp_int32 SectionTranspose::handleEvent(PPObject* sender, PPEvent* event) { PPRadioGroup* radioGroup; if (event->getID() == eCommand || event->getID() == eCommandRepeat) { switch (reinterpret_cast(sender)->getID()) { case TRANSPOSE_BUTTON_INS_PLUS: { radioGroup = static_cast(static_cast(sectionContainer)->getControlByID(2)); radioGroup->setChoice(0); if (currentInstrument < 254) currentInstrument++; update(); break; } case TRANSPOSE_BUTTON_INS_MINUS: { radioGroup = static_cast(static_cast(sectionContainer)->getControlByID(2)); radioGroup->setChoice(0); if (currentInstrument > 0) currentInstrument--; update(); break; } case TRANSPOSE_BUTTON_INS_RANGESTART_PLUS: { radioGroup = static_cast(static_cast(sectionContainer)->getControlByID(2)); radioGroup->setChoice(2); if (currentInstrumentRangeStart < 254) currentInstrumentRangeStart++; if (currentInstrumentRangeEnd < currentInstrumentRangeStart) currentInstrumentRangeStart = currentInstrumentRangeEnd; update(); break; } case TRANSPOSE_BUTTON_INS_RANGESTART_MINUS: { radioGroup = static_cast(static_cast(sectionContainer)->getControlByID(2)); radioGroup->setChoice(2); if (currentInstrumentRangeStart > 0) currentInstrumentRangeStart--; if (currentInstrumentRangeStart > currentInstrumentRangeEnd) currentInstrumentRangeStart = currentInstrumentRangeEnd; update(); break; } case TRANSPOSE_BUTTON_INS_RANGEEND_PLUS: { radioGroup = static_cast(static_cast(sectionContainer)->getControlByID(2)); radioGroup->setChoice(2); if (currentInstrumentRangeEnd < 254) currentInstrumentRangeEnd++; if (currentInstrumentRangeStart > currentInstrumentRangeEnd) currentInstrumentRangeStart = currentInstrumentRangeEnd; update(); break; } case TRANSPOSE_BUTTON_INS_RANGEEND_MINUS: { radioGroup = static_cast(static_cast(sectionContainer)->getControlByID(2)); radioGroup->setChoice(2); if (currentInstrumentRangeEnd > 0) currentInstrumentRangeEnd--; if (currentInstrumentRangeEnd < currentInstrumentRangeStart) currentInstrumentRangeEnd = currentInstrumentRangeStart; update(); break; } // note range case TRANSPOSE_BUTTON_NOTE_PLUS: { radioGroup = static_cast(static_cast(sectionContainer)->getControlByID(3)); radioGroup->setChoice(0); if (currentNote < 119) currentNote++; update(); break; } case TRANSPOSE_BUTTON_NOTE_MINUS: { radioGroup = static_cast(static_cast(sectionContainer)->getControlByID(3)); radioGroup->setChoice(0); if (currentNote > 0) currentNote--; update(); break; } case TRANSPOSE_BUTTON_NOTE_RANGESTART_PLUS: { radioGroup = static_cast(static_cast(sectionContainer)->getControlByID(3)); radioGroup->setChoice(2); if (currentNoteRangeStart < 119) currentNoteRangeStart++; if (currentNoteRangeEnd < currentNoteRangeStart) currentNoteRangeStart = currentNoteRangeEnd; update(); break; } case TRANSPOSE_BUTTON_NOTE_RANGESTART_MINUS: { radioGroup = static_cast(static_cast(sectionContainer)->getControlByID(3)); radioGroup->setChoice(2); if (currentNoteRangeStart > 0) currentNoteRangeStart--; if (currentNoteRangeStart > currentNoteRangeEnd) currentNoteRangeStart = currentNoteRangeEnd; update(); break; } case TRANSPOSE_BUTTON_NOTE_RANGEEND_PLUS: { radioGroup = static_cast(static_cast(sectionContainer)->getControlByID(3)); radioGroup->setChoice(2); if (currentNoteRangeEnd < 119) currentNoteRangeEnd++; if (currentNoteRangeStart > currentNoteRangeEnd) currentNoteRangeStart = currentNoteRangeEnd; update(); break; } case TRANSPOSE_BUTTON_NOTE_RANGEEND_MINUS: { radioGroup = static_cast(static_cast(sectionContainer)->getControlByID(3)); radioGroup->setChoice(2); if (currentNoteRangeEnd > 0) currentNoteRangeEnd--; if (currentNoteRangeEnd < currentNoteRangeStart) currentNoteRangeEnd = currentNoteRangeStart; update(); break; } case TRANSPOSE_BUTTON_AMOUNT_PLUS: { if (currentTransposeAmount < 48) currentTransposeAmount ++; if (currentTransposeAmount == 0) currentTransposeAmount = 1; update(); break; } case TRANSPOSE_BUTTON_AMOUNT_MINUS: { if (currentTransposeAmount > -48) currentTransposeAmount --; if (currentTransposeAmount == 0) currentTransposeAmount = -1; update(); break; } case TRANSPOSE_BUTTON_AMOUNT_NOTEUP: currentTransposeAmount = 1; update(); break; case TRANSPOSE_BUTTON_AMOUNT_NOTEDOWN: currentTransposeAmount = -1; update(); break; case TRANSPOSE_BUTTON_AMOUNT_OCTAVEUP: currentTransposeAmount = 12; update(); break; case TRANSPOSE_BUTTON_AMOUNT_OCTAVEDOWN: currentTransposeAmount = -12; update(); break; case TRANSPOSE_BUTTON_EXIT: if (event->getID() != eCommand) break; show(false); break; case TRANSPOSE_BUTTON_USER1: case TRANSPOSE_BUTTON_USER2: case TRANSPOSE_BUTTON_USER3: case TRANSPOSE_BUTTON_USER4: { //tracker.ensureSongStopped(); PPContainer* container = static_cast(sectionContainer); pp_int32 res; PPRadioGroup* radioGroupIns = static_cast(container->getControlByID(2)); PPRadioGroup* radioGroupNote = static_cast(container->getControlByID(3)); switch (radioGroupIns->getChoice()) { case 0: tp.insRangeStart = currentInstrument + 1; tp.insRangeEnd = currentInstrument + 1; break; case 1: tp.insRangeStart = 0; tp.insRangeEnd = 255; break; case 2: tp.insRangeStart = currentInstrumentRangeStart + 1; tp.insRangeEnd = currentInstrumentRangeEnd + 1; break; } switch (radioGroupNote->getChoice()) { case 0: tp.noteRangeStart = currentNote + 1; tp.noteRangeEnd = currentNote + 1; break; case 1: tp.noteRangeStart = 1; tp.noteRangeEnd = 96; break; case 2: tp.noteRangeStart = currentNoteRangeStart + 1; tp.noteRangeEnd = currentNoteRangeEnd + 1; break; } tp.amount = currentTransposeAmount; switch (reinterpret_cast(sender)->getID()) { case TRANSPOSE_BUTTON_USER1: res = tracker.getPatternEditorControl()->noteTransposeTrack(tp); break; case TRANSPOSE_BUTTON_USER2: res = tracker.getPatternEditorControl()->noteTransposePattern(tp); break; case TRANSPOSE_BUTTON_USER3: { handleTransposeSong(); break; } case TRANSPOSE_BUTTON_USER4: res = tracker.getPatternEditorControl()->noteTransposeSelection(tp); break; } //char buffer[100]; //sprintf(buffer, "%i Notes have been transposed", res); //tracker.showMessageBox(MESSAGEBOX_UNIVERSAL, buffer, Tracker::MessageBox_OK); tracker.screen->paint(); //tracker.ensureSongPlaying(); return false; } } } return 0; } void SectionTranspose::init(pp_int32 px, pp_int32 py) { pp_int32 i; PPScreen* screen = tracker.screen; // test PPContainer* container = new PPContainer(CONTAINER_TRANSPOSE, tracker.screen, this, PPPoint(px, py), PPSize(320,UPPERLEFTSECTIONHEIGHT), false); container->setColor(TrackerConfig::colorThemeMain); tracker.screen->addControl(container); const pp_int32 buttonIDs[4] = {TRANSPOSE_BUTTON_AMOUNT_NOTEUP, TRANSPOSE_BUTTON_AMOUNT_NOTEDOWN, TRANSPOSE_BUTTON_AMOUNT_OCTAVEUP, TRANSPOSE_BUTTON_AMOUNT_OCTAVEDOWN}; const char* buttonTexts[4] = {"Note Up", "Note Dn", "Octave Up", "Octave Dn"}; const pp_int32 buttonIDs2[4] = {TRANSPOSE_BUTTON_USER1, TRANSPOSE_BUTTON_USER2, TRANSPOSE_BUTTON_USER3, TRANSPOSE_BUTTON_USER4}; const char* buttonTexts2[4] = {"Track", "Pattern", "Song", "Block"}; PPSize size = container->getSize(); /*tracker.showMessageBox(MESSAGEBOX_TRANSPOSE, "Filter options", Tracker::MessageBox_OK, false); PPMessageBoxContainer* container = static_cast(screen->getModalControl()); container->setCaption("Transpose"); container->removeControl(container->getControlByID(MESSAGEBOX_BUTTON_YES)); PPSize size = container->getSize(); size.height = 216; PPPoint location = container->getLocation(); location.y = screen->getHeight() / 2 - size.height / 2; container->setLocation(location); container->setSize(size); PPStaticText* text = static_cast(container->getControlByID(1)); ASSERT(text); text->setUnderlined(true); PPPoint location2 = text->getLocation(); location2.y = location.y + 20; location2.x = location.x + 6; text->setLocation(location2); location2 = location;*/ PPStaticText* text; PPPoint location(px,py); PPPoint location2 = location; PPRadioGroup* radioGroup; PPButton* button; // ----------------------- Instrument ---------------------- location2.x += 2; location2.y += 2; text = new PPStaticText(0, NULL, NULL, location2, "Instrument:", true); container->addControl(text); location2.y += 10; PPPoint temp = location2; radioGroup = new PPRadioGroup(2, screen, this, PPPoint(location2.x, location2.y-2), PPSize(8*9, 42)); radioGroup->setColor(TrackerConfig::colorThemeMain); radioGroup->addItem("Single:"); radioGroup->addItem("All"); radioGroup->addItem("Range:"); radioGroup->setChoice(1); container->addControl(radioGroup); // plus minus pp_int32 h = location2.x + 8*9; pp_int32 hy = location2.y + 3; container->addControl(new PPStaticText(TRANSPOSE_TEXT_INS, NULL, NULL, PPPoint(h,hy), "xx", false)); h+=8*2+4; button = new PPButton(TRANSPOSE_BUTTON_INS_PLUS, screen, this, PPPoint(h, hy), PPSize(10, 9)); button->setText(TrackerConfig::stringButtonPlus); container->addControl(button); h+=button->getSize().width; button = new PPButton(TRANSPOSE_BUTTON_INS_MINUS, screen, this, PPPoint(h, hy), PPSize(10, 9)); button->setText(TrackerConfig::stringButtonMinus); container->addControl(button); location2.y += radioGroup->getSize().height; //location2.x +=6*8 + 10; location2.x+=8*2-2; h = location2.x; text = new PPStaticText(TRANSPOSE_TEXT_INS_RANGESTART, NULL, NULL, location2, "From:xx", false); container->addControl(text); location2.x += 8*8-4; button = new PPButton(TRANSPOSE_BUTTON_INS_RANGESTART_PLUS, screen, this, location2, PPSize(10, 9)); button->setText(TrackerConfig::stringButtonPlus); container->addControl(button); location2.x+=button->getSize().width; button = new PPButton(TRANSPOSE_BUTTON_INS_RANGESTART_MINUS, screen, this, location2, PPSize(10, 9)); button->setText(TrackerConfig::stringButtonMinus); container->addControl(button); //location2.x+=button->getSize().width + 2; location2.x = h; location2.y+=11; text = new PPStaticText(TRANSPOSE_TEXT_INS_RANGEEND, NULL, NULL, location2, "To: xx", false); container->addControl(text); location2.x+=8*8-4; button = new PPButton(TRANSPOSE_BUTTON_INS_RANGEEND_PLUS, screen, this, location2, PPSize(10, 9)); button->setText(TrackerConfig::stringButtonPlus); container->addControl(button); location2.x+=button->getSize().width; button = new PPButton(TRANSPOSE_BUTTON_INS_RANGEEND_MINUS, screen, this, location2, PPSize(10, 9)); button->setText(TrackerConfig::stringButtonMinus); container->addControl(button); // ---------------- notes --------------------- location2.x += button->getSize().width + 26; location2.y = location.y + 2; container->addControl(new PPSeperator(0, screen, PPPoint(location2.x-6, location.y+2), (size.height)-42, container->getColor(), false)); text = new PPStaticText(0, NULL, NULL, location2, "Note:", true); container->addControl(text); location2.y += 10; temp = location2; radioGroup = new PPRadioGroup(3, screen, this, PPPoint(location2.x, location2.y-2), PPSize(8*9, 42)); radioGroup->setColor(TrackerConfig::colorThemeMain); radioGroup->addItem("Single:"); radioGroup->addItem("All"); radioGroup->addItem("Range:"); radioGroup->setChoice(1); container->addControl(radioGroup); // plus minus h = location2.x + 8*9; hy = location2.y + 3; container->addControl(new PPStaticText(TRANSPOSE_TEXT_NOTE, NULL, NULL, PPPoint(h,hy), "xxx", false)); h+=8*3+4; button = new PPButton(TRANSPOSE_BUTTON_NOTE_PLUS, screen, this, PPPoint(h, hy), PPSize(10, 9)); button->setText(TrackerConfig::stringButtonPlus); container->addControl(button); h+=button->getSize().width; button = new PPButton(TRANSPOSE_BUTTON_NOTE_MINUS, screen, this, PPPoint(h, hy), PPSize(10, 9)); button->setText(TrackerConfig::stringButtonMinus); container->addControl(button); location2.y += radioGroup->getSize().height; //location2.x +=6*8 + 10; location2.x+=8*2-2; h = location2.x; text = new PPStaticText(TRANSPOSE_TEXT_NOTE_RANGESTART, NULL, NULL, location2, "From:xxx", false); container->addControl(text); location2.x += 8*9-4; button = new PPButton(TRANSPOSE_BUTTON_NOTE_RANGESTART_PLUS, screen, this, location2, PPSize(10, 9)); button->setText(TrackerConfig::stringButtonPlus); container->addControl(button); location2.x+=button->getSize().width; button = new PPButton(TRANSPOSE_BUTTON_NOTE_RANGESTART_MINUS, screen, this, location2, PPSize(10, 9)); button->setText(TrackerConfig::stringButtonMinus); container->addControl(button); //location2.x+=button->getSize().width + 2; location2.x = h; location2.y+=11; text = new PPStaticText(TRANSPOSE_TEXT_NOTE_RANGEEND, NULL, NULL, location2, "To: xxx", false); container->addControl(text); location2.x+=8*9-4; button = new PPButton(TRANSPOSE_BUTTON_NOTE_RANGEEND_PLUS, screen, this, location2, PPSize(10, 9)); button->setText(TrackerConfig::stringButtonPlus); container->addControl(button); location2.x+=button->getSize().width; button = new PPButton(TRANSPOSE_BUTTON_NOTE_RANGEEND_MINUS, screen, this, location2, PPSize(10, 9)); button->setText(TrackerConfig::stringButtonMinus); container->addControl(button); // horizontal ruler location2.y += button->getSize().height+5; container->addControl(new PPSeperator(0, screen, PPPoint(location.x+2, location2.y), size.width-5, container->getColor(), true)); location2.x += button->getSize().width + 26; location2.y = location.y + 4; container->addControl(new PPSeperator(0, screen, PPPoint(location2.x-6, location.y+2), (size.height)-42, container->getColor(), false)); const PPString str = "Amount:"; location2.y-=2; text = new PPStaticText(6, NULL, NULL, location2, str, true); container->addControl(text); const PPString str2 = "-xx"; location2.y+=13; location2.x+=8; text = new PPStaticText(TRANSPOSE_TEXT_AMOUNT, NULL, NULL, location2, str2, false); container->addControl(text); h = location2.x+3*8+4; hy = location2.y; button = new PPButton(TRANSPOSE_BUTTON_AMOUNT_PLUS, screen, this, PPPoint(h, hy), PPSize(10, 9)); button->setText(TrackerConfig::stringButtonPlus); container->addControl(button); h+=button->getSize().width; button = new PPButton(TRANSPOSE_BUTTON_AMOUNT_MINUS, screen, this, PPPoint(h, hy), PPSize(10, 9)); button->setText(TrackerConfig::stringButtonMinus); container->addControl(button); hy+=11; h-=5*8; text = new PPStaticText(TRANSPOSE_TEXT_AMOUNT2, NULL, NULL, PPPoint(h+1, hy), "note(s)", true); container->addControl(text); // preset buttons pp_int32 buttonWidth = 7*8+4; pp_int32 buttonHeight = 9; pp_int32 spacer = 10; pp_int32 y2 = hy+11; pp_int32 x = h-3; for (i = 0; i < 4; i++) { PPButton* button = new PPButton(buttonIDs[i], screen, this, PPPoint(x, y2), PPSize(buttonWidth, buttonHeight)); button->setText(buttonTexts[i]); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); container->addControl(button); y2+= buttonHeight+1; } y2+=10; //container->addControl(new PPSeperator(0, screen, PPPoint(location.x+2, y2), size.width-5, container->getColor(), true)); const PPString str3 = "Apply:"; location2.x = location.x+6; location2.y = y2; text = new PPStaticText(6, NULL, NULL, location2, str3, true); container->addControl(text); buttonWidth = 60; //y2+=14; spacer = 4; buttonHeight = 14; pp_int32 cx = ((buttonWidth) * 4 + (spacer*3))/2; x = location.x + (size.width-6*8)/2 - cx + 6*8 + 2; y2-=3; for (i = 0; i < 4; i++) { PPButton* button = new PPButton(buttonIDs2[i], screen, this, PPPoint(x, y2), PPSize(buttonWidth, buttonHeight)); button->setText(buttonTexts2[i]); container->addControl(button); x+= buttonWidth + spacer; } y2 += buttonHeight+2; container->addControl(new PPSeperator(0, screen, PPPoint(location.x+2, y2), size.width-5, container->getColor(), true)); y2+=4; buttonWidth = 8*4+4; buttonHeight = 11; button = new PPButton(TRANSPOSE_BUTTON_EXIT, screen, this, PPPoint(x-buttonWidth-spacer, y2), PPSize(buttonWidth,buttonHeight)); button->setText("Exit"); container->addControl(button); sectionContainer = container; initialised = true; showSection(false); } void SectionTranspose::show(bool bShow) { if (!initialised) currentNote = currentNoteRangeStart = currentNoteRangeEnd = 48; SectionUpperLeft::show(bShow); } void SectionTranspose::update(bool repaint/* = true*/) { char buffer[80]; PPContainer* container = static_cast(sectionContainer); ASSERT(sectionContainer); PPStaticText* text = static_cast(container->getControlByID(TRANSPOSE_TEXT_INS)); text->setHexValue(currentInstrument+1,2); text = static_cast(container->getControlByID(TRANSPOSE_TEXT_INS_RANGESTART)); strcpy(buffer, "From:"); PPTools::convertToHex(buffer+5, currentInstrumentRangeStart+1, 2); text->setText(buffer); text = static_cast(container->getControlByID(TRANSPOSE_TEXT_INS_RANGEEND)); strcpy(buffer, "To: "); PPTools::convertToHex(buffer+5, currentInstrumentRangeEnd+1, 2); text->setText(buffer); text = static_cast(container->getControlByID(TRANSPOSE_TEXT_NOTE)); PatternTools::getNoteName(buffer, currentNote+1); text->setText(buffer); text = static_cast(container->getControlByID(TRANSPOSE_TEXT_NOTE_RANGESTART)); strcpy(buffer, "From:"); PatternTools::getNoteName(buffer+5, currentNoteRangeStart+1); text->setText(buffer); text = static_cast(container->getControlByID(TRANSPOSE_TEXT_NOTE_RANGEEND)); strcpy(buffer, "To :"); PatternTools::getNoteName(buffer+5, currentNoteRangeEnd+1); text->setText(buffer); text = static_cast(container->getControlByID(TRANSPOSE_TEXT_AMOUNT)); sprintf(buffer, "%i", currentTransposeAmount); text->setText(buffer); text = static_cast(container->getControlByID(TRANSPOSE_TEXT_AMOUNT2)); text->setText(currentTransposeAmount < 0 ? "note(s)" : "note(s)"); tracker.screen->paintControl(container); } void SectionTranspose::handleTransposeSong() { pp_int32 fuckups = tracker.moduleEditor->noteTransposeSong(tp, true); if (!fuckups) tracker.moduleEditor->noteTransposeSong(tp); else { char buffer[100]; sprintf(buffer, "%i notes will be erased, continue?", fuckups); showMessageBox(MESSAGEBOX_TRANSPOSEPROCEED, buffer); } } void SectionTranspose::transposeSong() { tracker.moduleEditor->noteTransposeSong(getTransposeParameters()); tracker.screen->paint(); } MilkyTracker-1.02.00/src/tracker/SectionTranspose.h000066400000000000000000000040431324432207300221520ustar00rootroot00000000000000/* * tracker/SectionTranspose.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * SectionTranspose.h * MilkyTracker * * Created by Peter Barth on 10.04.05. * */ #ifndef SECTIONTRANSPOSE__H #define SECTIONTRANSPOSE__H #include "BasicTypes.h" #include "Event.h" #include "SectionUpperLeft.h" #include "PatternEditorTools.h" class PPControl; class Tracker; class SectionTranspose : public SectionUpperLeft { private: pp_int32 currentInstrument; pp_int32 currentInstrumentRangeStart; pp_int32 currentInstrumentRangeEnd; pp_int32 currentNote; pp_int32 currentNoteRangeStart; pp_int32 currentNoteRangeEnd; pp_int32 currentTransposeAmount; PatternEditorTools::TransposeParameters tp; public: SectionTranspose(Tracker& tracker); virtual ~SectionTranspose(); void setCurrentInstrument(pp_int32 instrument, bool redraw = true); const PatternEditorTools::TransposeParameters& getTransposeParameters() { return tp; } // Derived from SectionAbstract virtual pp_int32 handleEvent(PPObject* sender, PPEvent* event); virtual void init() { SectionUpperLeft::init(); } virtual void init(pp_int32 x, pp_int32 y); virtual void show(bool bShow); virtual void update(bool repaint = true); private: void handleTransposeSong(); void transposeSong(); // Responder should be friend friend class DialogResponderTranspose; friend class Tracker; }; #endif MilkyTracker-1.02.00/src/tracker/SectionUpperLeft.cpp000066400000000000000000000043611324432207300224400ustar00rootroot00000000000000/* * tracker/SectionUpperLeft.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * SectionUpperLeft.cpp * MilkyTracker * * Created by Peter Barth on Wed May 04 2005. * */ #include "SectionUpperLeft.h" #include "Tracker.h" #include "PatternEditorControl.h" #include "Container.h" SectionUpperLeft::SectionUpperLeft(Tracker& theTracker, PPDialogBase* dialog/* = NULL*/, DialogResponder* responder/* = NULL*/) : SectionAbstract(theTracker, dialog, responder), sectionContainer(NULL) { } SectionUpperLeft::~SectionUpperLeft() { } void SectionUpperLeft::showSection(bool bShow) { sectionContainer->show(bShow); } void SectionUpperLeft::init() { #ifndef __LOWRES__ init(0,0); #else init(0,tracker.screen->getHeight()-UPPERLEFTSECTIONHEIGHT); #endif } void SectionUpperLeft::show(bool bShow) { SectionAbstract::show(bShow); PPScreen* screen = tracker.screen; if (!initialised) { init(); } if (initialised) { if (bShow) { tracker.showMainMenu(false, false); update(false); #ifdef __LOWRES__ // resize pattern editor control PatternEditorControl* control = tracker.getPatternEditorControl(); if (control) { control->setLocation(PPPoint(0, 0)); pp_int32 offsety = tracker.inputContainerCurrent->isVisible() ? tracker.inputContainerCurrent->getSize().height : 0; control->setSize(PPSize(screen->getWidth(),screen->getHeight()-(UPPERLEFTSECTIONHEIGHT+offsety))); } #endif } else { tracker.showMainMenu(true, false); tracker.rearrangePatternEditorControl(); } showSection(bShow); screen->paint(); } } MilkyTracker-1.02.00/src/tracker/SectionUpperLeft.h000066400000000000000000000032411324432207300221010ustar00rootroot00000000000000/* * tracker/SectionUpperLeft.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * SectionUpperLeft.h * MilkyTracker * * Created by Peter Barth on 10.04.05. * */ #ifndef SECTIONUPPERLEFT__H #define SECTIONUPPERLEFT__H #include "BasicTypes.h" #include "Event.h" #include "SectionAbstract.h" class PPControl; class Tracker; class SectionUpperLeft : public SectionAbstract { protected: enum Constants { UPPERLEFTSECTIONHEIGHT = 118 }; PPControl* sectionContainer; virtual void showSection(bool bShow); public: SectionUpperLeft(Tracker& tracker, PPDialogBase* dialog = NULL, DialogResponder* responder = NULL); virtual ~SectionUpperLeft(); // Derived from SectionAbstract virtual pp_int32 handleEvent(PPObject* sender, PPEvent* event) = 0; virtual void init(); virtual void init(pp_int32 x, pp_int32 y) = 0; virtual void show(bool bShow); virtual void update(bool repaint = true) = 0; PPControl* getSectionContainer() { return sectionContainer; } }; #endif MilkyTracker-1.02.00/src/tracker/SongLengthEstimator.cpp000066400000000000000000000036411324432207300231450ustar00rootroot00000000000000/* * tracker/SongLengthEstimator.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * SongLengthEstimator.cpp * MilkyTracker * * Created by Peter Barth on 10.11.05. * */ #include "SongLengthEstimator.h" #include "MilkyPlay.h" #include "AudioDriver_NULL.h" SongLengthEstimator::SongLengthEstimator(XModule* theModule) : player(NULL), module(theModule) { } SongLengthEstimator::SongLengthEstimator(const SongLengthEstimator& src) : player(NULL), module(src.module) { } SongLengthEstimator::~SongLengthEstimator() { delete player; } const SongLengthEstimator& SongLengthEstimator::operator=(const SongLengthEstimator& src) { if (&src != this) { module = src.module; } return *this; } mp_sint32 SongLengthEstimator::estimateSongLengthInSeconds() { if (!player) { player = new PlayerGeneric(44100); if (!player) return -1; player->setBufferSize(1024); player->setResamplerType((ChannelMixer::ResamplerTypes)0); player->setMasterVolume(256); player->setDisableMixing(true); } AudioDriver_NULL* audioDriver = new AudioDriver_NULL; mp_sint32 res = player->exportToWAV(NULL, module, 0, -1, NULL, module->header.channum, NULL, audioDriver) / player->getMixFrequency(); delete audioDriver; return res; } MilkyTracker-1.02.00/src/tracker/SongLengthEstimator.h000066400000000000000000000025001324432207300226030ustar00rootroot00000000000000/* * tracker/SongLengthEstimator.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * SongLengthEstimator.h * MilkyTracker * * Created by Peter Barth on 10.11.05. * */ #ifndef SONGLENGTHESTIMATOR__H #define SONGLENGTHESTIMATOR__H #include "MilkyPlayTypes.h" class PlayerGeneric; class XModule; class SongLengthEstimator { private: PlayerGeneric* player; XModule* module; public: SongLengthEstimator(XModule* theModule); SongLengthEstimator(const SongLengthEstimator& src); ~SongLengthEstimator(); const SongLengthEstimator& operator=(const SongLengthEstimator& src); mp_sint32 estimateSongLengthInSeconds(); }; #endif MilkyTracker-1.02.00/src/tracker/SystemMessage.cpp000066400000000000000000000035601324432207300217760ustar00rootroot00000000000000/* * tracker/SystemMessage.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * SystemErrorMessage.cpp * MilkyTracker * * Created by Peter Barth on 27.12.07. * */ #include "SystemMessage.h" #include "Screen.h" #include "PPMessageBox.h" SystemMessage::SystemMessage(PPScreen& screen, Messages message) : screen(screen), message(message) { } void SystemMessage::show() { const char* header = NULL; const char* message = NULL; switch (this->message) { case MessageSoundDriverInitFailed: header = "Error"; message = "Sound driver initialization failed. Try different settings or driver."; break; case MessageFullScreenFailed: header = "Error"; message = "The video mode you've selected isn't available on your gfx card/monitor."; break; case MessageResChangeRestart: header = "Please restart"; message = "MilkyTracker needs to be restarted to apply new video mode."; break; case MessageLimitedInput: header = "Note"; message = "Due to limited input this edit mode might not be fully usable on a low-res device."; break; } if (header && message) { PPMessageBox messageBox(&screen, header, message); messageBox.runModal(); } } MilkyTracker-1.02.00/src/tracker/SystemMessage.h000066400000000000000000000023331324432207300214400ustar00rootroot00000000000000/* * tracker/SystemMessage.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * SystemMessage.h * MilkyTracker * * Created by Peter Barth on 27.12.07. * */ #ifndef __SYSTEMMESSAGE_H__ #define __SYSTEMMESSAGE_H__ #include "BasicTypes.h" class SystemMessage { private: class PPScreen& screen; pp_uint32 message; public: enum Messages { MessageSoundDriverInitFailed, MessageFullScreenFailed, MessageResChangeRestart, MessageLimitedInput }; SystemMessage(PPScreen& screen, Messages message); void show(); }; #endif MilkyTracker-1.02.00/src/tracker/TabHeaderControl.cpp000066400000000000000000000206161324432207300223660ustar00rootroot00000000000000/* * tracker/TabHeaderControl.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * TabHeaderControl.cpp * MilkyTracker * * Created by Peter Barth on 09.12.07. * */ #include "TabHeaderControl.h" #include "Event.h" #include "Screen.h" #include "Button.h" #include "Font.h" #include "PPUIConfig.h" #include "GlobalColorConfig.h" void TabHeaderControl::handleTabClick(const PPPoint& p) { pp_int32 hitIndex = -1; for (pp_int32 i = 0; i < tabButtons.size(); i++) { if (tabButtons.get(i)->hit(p)) { hitIndex = i; } } if (hitIndex != -1) { for (pp_int32 i = 0; i < tabButtons.size(); i++) { PPButton* button = tabButtons.get(i); button->setPressed(i == hitIndex); } parentScreen->paintControl(this); this->hitIndex = hitIndex + startIndex; } } TabHeaderControl::TabHeaderControl(pp_int32 id, PPScreen* parentScreen, EventListenerInterface* eventListener, const PPPoint& location, const PPSize& size) : PPControl(id, parentScreen, eventListener, location, size), color(&PPUIConfig::getInstance()->getColor(PPUIConfig::ColorContainer)), leftButton(NULL), rightButton(NULL), minSize(60), maxSize(200), caughtControl(NULL), startIndex(0) { backgroundButton = new PPButton(0, parentScreen, NULL, location, size, false, false); backgroundButton->setColor(*color); } TabHeaderControl::~TabHeaderControl() { delete backgroundButton; delete leftButton; delete rightButton; } void TabHeaderControl::paint(PPGraphicsAbstract* g) { if (!isVisible()) return; backgroundButton->paint(g); if (leftButton != NULL) { leftButton->enable(startIndex > 0); leftButton->paint(g); } if (rightButton != NULL) { rightButton->enable(startIndex + tabButtons.size() < tabHeaders.size()); rightButton->paint(g); } paintControls(g); } pp_int32 TabHeaderControl::dispatchEvent(PPEvent* event) { switch (event->getID()) { case eLMouseDown: { PPPoint* p = (PPPoint*)event->getDataPtr(); if (leftButton && leftButton->isEnabled() && leftButton->isVisible() && leftButton->hit(*p)) { caughtControl = leftButton; caughtControl->dispatchEvent(event); } else if (rightButton && rightButton->isEnabled() && rightButton->isVisible() && rightButton->hit(*p)) { caughtControl = rightButton; caughtControl->dispatchEvent(event); } else { oldHitIndex = hitIndex; handleTabClick(*p); } break; } case eLMouseUp: if (caughtControl == NULL) { if (hitIndex != oldHitIndex) { PPEvent e(eSelection, &hitIndex, sizeof(hitIndex)); eventListener->handleEvent(reinterpret_cast(this), &e); } break; } caughtControl->dispatchEvent(event); caughtControl = NULL; break; default: if (caughtControl != NULL) caughtControl->dispatchEvent(event); } return 0; } pp_int32 TabHeaderControl::handleEvent(PPObject* sender, PPEvent* event) { if (event->getID() == eCommand || event->getID() == eCommandRepeat) { switch (reinterpret_cast(sender)->getID()) { case 0: { shiftTabs(-1); break; } case 1: { shiftTabs(); break; } } } return 0; } void TabHeaderControl::setSize(const PPSize& size) { this->size = size; backgroundButton->setSize(size); } void TabHeaderControl::setLocation(const PPPoint& location) { this->location = location; backgroundButton->setLocation(location); } void TabHeaderControl::addTab(const TabHeader& tabHeader) { tabHeaders.add(new TabHeader(tabHeader)); setNumTabs(tabHeaders.size()); setSelectedTab(tabHeaders.size()-1); adjustLabels(); } const TabHeaderControl::TabHeader* TabHeaderControl::getTab(pp_int32 index) const { return (index >= 0 && index < tabHeaders.size()) ? tabHeaders.get(index) : NULL; } bool TabHeaderControl::removeTab(pp_int32 index) { if (index < 0 || index >= tabHeaders.size()) return false; return tabHeaders.remove(index); } void TabHeaderControl::setNumTabs(pp_uint32 numTabs) { pp_int32 width = (size.width - 4) / numTabs; pp_int32 height = size.height - 4; if (minSize && width < minSize) width = minSize; if (maxSize && width > maxSize) width = maxSize; tabButtons.clear(); if ((signed)numTabs*width > size.width - 4) { numTabs = (size.width - (4+12+12)) / minSize; width = (size.width - (4+12+12)) / numTabs; delete leftButton; leftButton = new PPButton(0, parentScreen, this, PPPoint(location.x + size.width - (4+12+12) + 2, location.y + 2), PPSize(12, height), false); leftButton->setText("<"); delete rightButton; rightButton = new PPButton(1, parentScreen, this, PPPoint(location.x + size.width - (4+13) + 3, location.y + 2), PPSize(12, height), false); rightButton->setText(">"); } else { delete rightButton; rightButton = NULL; delete leftButton; leftButton = NULL; } PPPoint location = this->location; location.x += 2; location. y+= 2; for (pp_int32 i = 0; i < (signed)numTabs; i++) { PPButton* button = new PPButton(i+0x1000, parentScreen, this, location, PPSize(width, height), false, true, false); button->setText("Blabla"); button->setColor(*color); button->setAutoSizeFont(false); tabButtons.add(button); location.x+=width; } } void TabHeaderControl::adjustLabels() { for (pp_int32 i = 0; i < tabButtons.size(); i++) { PPButton* button = tabButtons.get(i); PPFont* font = button->getFont(); pp_int32 shrinkWidth = button->getSize().width - 4; if (shrinkWidth < 1) shrinkWidth = 1; PPString text = tabHeaders.get(i + startIndex)->text; if (text.charAt(text.length()-1) == '*') { text = font->shrinkString(text, shrinkWidth - font->getCharWidth(), PPFont::ShrinkTypeEnd); if (text.charAt(text.length()-1) != '*') text.append("*"); } else text = font->shrinkString(text, shrinkWidth, PPFont::ShrinkTypeEnd); button->setText(text); if ((i + startIndex) & 1) button->setTextColor(GlobalColorConfig::getInstance()->getColor(GlobalColorConfig::ColorTextHighlited)); else button->setTextColor(GlobalColorConfig::getInstance()->getColor(GlobalColorConfig::ColorForegroundText)); } } void TabHeaderControl::shiftTabs(pp_int32 offset/* = 1*/, bool repaint/* = true*/) { pp_int32 startIndex = this->startIndex + offset; if (startIndex + tabButtons.size() > tabHeaders.size()) startIndex-= (startIndex + tabButtons.size()) - tabHeaders.size(); if (startIndex < 0) startIndex = 0; if (startIndex != this->startIndex) { for (pp_int32 i = 0; i < tabButtons.size(); i++) tabButtons.get(i)->setPressed(false); pp_int32 newIndex = (signed)hitIndex - startIndex; if (newIndex >= 0 && newIndex < tabButtons.size()) { tabButtons.get(newIndex)->setPressed(true); } this->startIndex = startIndex; adjustLabels(); if (repaint) parentScreen->paintControl(this); } } void TabHeaderControl::assureTabVisible(pp_uint32 index) { pp_int32 newIndex = (signed)index - startIndex; if (newIndex >= 0 && newIndex < tabButtons.size()) return; if (newIndex < 0) { while (newIndex < 0) { startIndex--; newIndex = (signed)index - startIndex; } return; } if (newIndex >= tabButtons.size()) { while (newIndex >= tabButtons.size()) { startIndex++; newIndex = (signed)index - startIndex; } return; } } void TabHeaderControl::setSelectedTab(pp_uint32 index) { hitIndex = index; assureTabVisible(index); for (pp_int32 i = 0; i < tabButtons.size(); i++) tabButtons.get(i)->setPressed(false); pp_int32 newIndex = (signed)index - startIndex; if (newIndex >= 0 && newIndex < tabButtons.size()) { tabButtons.get(newIndex)->setPressed(true); } } void TabHeaderControl::setTabHeaderText(pp_int32 index, const PPString& text) { if (index < 0 || index >= tabHeaders.size()) return; tabHeaders.get(index)->text = text; adjustLabels(); } MilkyTracker-1.02.00/src/tracker/TabHeaderControl.h000066400000000000000000000067011324432207300220320ustar00rootroot00000000000000/* * tracker/TabHeaderControl.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * TabHeaderControl.h * MilkyTracker * * Created by Peter Barth on 09.12.07. * */ #ifndef __TABHEADERCONTROL_H__ #define __TABHEADERCONTROL_H__ #include "BasicTypes.h" #include "Control.h" #include "Button.h" #include "SimpleVector.h" class TabHeaderControl : public PPControl, public EventListenerInterface { public: struct TabHeader { PPString text; pp_uint32 ID; TabHeader() : text(""), ID(0) { } TabHeader(const PPString& text, pp_uint32 ID) : text(text), ID(ID) { } ~TabHeader() { } }; private: const PPColor* color; PPButton* backgroundButton; PPButton* leftButton; PPButton* rightButton; pp_int32 minSize; pp_int32 maxSize; PPSimpleVector tabButtons; PPSimpleVector tabHeaders; // Control caught by mouse button press (left & right) PPControl* caughtControl; pp_int32 startIndex; pp_int32 hitIndex; pp_int32 oldHitIndex; void paintControls(PPGraphicsAbstract* g) { for (pp_int32 i = 0; i < tabButtons.size(); i++) { PPControl* ctrl = tabButtons.get(i); if (ctrl->isVisible()) ctrl->paint(g); } } void handleTabClick(const PPPoint& p); void setNumTabs(pp_uint32 numTabs); void adjustLabels(); void shiftTabs(pp_int32 offset = 1, bool repaint = true); void assureTabVisible(pp_uint32 index); public: TabHeaderControl(pp_int32 id, PPScreen* parentScreen, EventListenerInterface* eventListener, const PPPoint& location, const PPSize& size); virtual ~TabHeaderControl(); virtual void setSize(const PPSize& size); virtual void setLocation(const PPPoint& location); void setColor(const PPColor& color) { this->color = &color; backgroundButton->setColor(color); } const PPColor& getColor() const { return *color; } virtual void paint(PPGraphicsAbstract* graphics); virtual pp_int32 dispatchEvent(PPEvent* event); virtual bool isVisible() const { return PPControl::isVisible() && getNumTabs() > 1; } // from EventListenerInterface pp_int32 handleEvent(PPObject* sender, PPEvent* event); void setTabMinSize(pp_int32 minSize) { this->minSize = minSize; } pp_int32 getTabMinSize() const { return minSize; } void setTabMaxSize(pp_int32 maxSize) { this->maxSize = maxSize; } pp_int32 getTabMaxSize() const { return maxSize; } void clear() { tabHeaders.clear(); tabButtons.clear(); startIndex = hitIndex = 0; } pp_uint32 getNumTabs() const { return (unsigned)tabHeaders.size(); } void addTab(const TabHeader& tabHeader); const TabHeader* getTab(pp_int32 index) const; bool removeTab(pp_int32 index); void setTabHeaderText(pp_int32 index, const PPString& text); void setSelectedTab(pp_uint32 index); pp_int32 getSelectedTabIndex() const { return hitIndex; } }; #endif MilkyTracker-1.02.00/src/tracker/TabManager.cpp000066400000000000000000000226101324432207300212030ustar00rootroot00000000000000/* * tracker/TabManager.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * TabManager.cpp * MilkyTracker * * Created by Peter Barth on 20.12.07. * */ #include "TabManager.h" #include "Tracker.h" #include "SimpleVector.h" #include "PlayerMaster.h" #include "PlayerController.h" #include "PlayerLogic.h" #include "ModuleEditor.h" #include "PatternEditor.h" #include "TabHeaderControl.h" #include "TabTitleProvider.h" #include "ControlIDs.h" #include "Screen.h" #include "Container.h" #include "TrackerSettingsDatabase.h" #include "Tools.h" #include "Zapper.h" TabManager::Document::Document(ModuleEditor* moduleEditor, PlayerController* playerController) : moduleEditor(moduleEditor), playerController(playerController) { } TabManager::Document::~Document() { // player controller is deleted from the PlayerMaster delete moduleEditor; } TabManager::TabManager(Tracker& tracker) : tracker(tracker), currentDocument(NULL), stopOnTabSwitch(false), resumeOnTabSwitch(false) { documents = new PPSimpleVector(); } TabManager::~TabManager() { delete documents; } TabHeaderControl* TabManager::getTabHeaderControl() { return static_cast(tracker.screen->getControlByID(TABHEADER_CONTROL)); } ModuleEditor* TabManager::createModuleEditor() { ModuleEditor* moduleEditor = new ModuleEditor(); moduleEditor->createNewSong(tracker.playerController->getPlayMode() == PlayerController::PlayMode_FastTracker2 ? 8 : 4); moduleEditor->setCurrentPatternIndex(moduleEditor->getOrderPosition(0)); return moduleEditor; } PlayerController* TabManager::createPlayerController() { // use "fake" scopes on the PDA // fake scopes are always showing linear interpolated output #ifdef __LOWRES__ PlayerController* playerController = tracker.playerMaster->createPlayerController(true); #else PlayerController* playerController = tracker.playerMaster->createPlayerController(false); #endif if (playerController == NULL) return NULL; applyPlayerDefaults(playerController); return playerController; } void TabManager::applyPlayerDefaults(PlayerController* playerController) { PPString value = tracker.settingsDatabase->restore("PLAYMODE")->getStringValue(); if (value.compareTo("PROTRACKER2") == 0) { playerController->switchPlayMode(PlayerController::PlayMode_ProTracker2, false); } else if (value.compareTo("PROTRACKER3") == 0) { playerController->switchPlayMode(PlayerController::PlayMode_ProTracker3, false); } else { playerController->switchPlayMode(PlayerController::PlayMode_FastTracker2, false); } bool v = tracker.settingsDatabase->restore("PLAYMODE_ADVANCED_ALLOW8xx")->getBoolValue(); playerController->enablePlayModeOption(PlayerController::PlayModeOptionPanning8xx, v); v = tracker.settingsDatabase->restore("PLAYMODE_ADVANCED_ALLOWE8x")->getBoolValue(); playerController->enablePlayModeOption(PlayerController::PlayModeOptionPanningE8x, v); v = tracker.settingsDatabase->restore("PLAYMODE_ADVANCED_PTPITCHLIMIT")->getBoolValue(); playerController->enablePlayModeOption(PlayerController::PlayModeOptionForcePTPitchLimit, v); value = tracker.settingsDatabase->restore("PLAYMODE_ADVANCED_PTPANNING")->getStringValue(); { pp_uint8* panning = new pp_uint8[TrackerConfig::numPlayerChannels]; if (PPTools::decodeByteArray(panning, TrackerConfig::numPlayerChannels, value)) { pp_int32 i; for (i = 0; i < TrackerConfig::numPlayerChannels; i++) playerController->setPanning((pp_uint8)i, panning[i]); } delete[] panning; } } void TabManager::openNewTab(PlayerController* playerController/* = NULL*/, ModuleEditor* moduleEditor/* = NULL*/) { #ifndef __LOWRES__ TabHeaderControl* tabHeader = getTabHeaderControl(); if (playerController == NULL) { playerController = createPlayerController(); if (playerController == NULL) { tracker.showMessageBox(MESSAGEBOX_UNIVERSAL, "Too many open modules.", Tracker::MessageBox_OK); return; } } if (moduleEditor == NULL) { moduleEditor = createModuleEditor(); } playerController->attachModuleEditor(moduleEditor); moduleEditor->attachPlayerCriticalSection(playerController->getCriticalSection()); playerController->setSpeed(moduleEditor->getSongBPM(), moduleEditor->getSongTickSpeed()); Document* doc = new Document(moduleEditor, playerController); documents->add(doc); TabTitleProvider tabTitleProvider(*moduleEditor); PPString tabTitle = tabTitleProvider.getTabTitle(); tabHeader->addTab(TabHeaderControl::TabHeader(tabTitle, documents->size()-1)); selectModuleEditor(doc); #else if (moduleEditor == NULL || playerController == NULL) return; playerController->attachModuleEditor(moduleEditor); moduleEditor->attachPlayerCriticalSection(playerController->getCriticalSection()); playerController->setSpeed(moduleEditor->getSongBPM(), moduleEditor->getSongTickSpeed()); documents->add(new Document(moduleEditor, playerController)); #endif } void TabManager::switchToTab(pp_uint32 index) { #ifndef __LOWRES__ TabHeaderControl* tabHeader = getTabHeaderControl(); ASSERT(tabHeader); index = tabHeader->getTab(index)->ID; selectModuleEditor(documents->get(index)); #endif } void TabManager::closeTab(pp_int32 index/* = -1*/) { #ifndef __LOWRES__ TabHeaderControl* tabHeader = getTabHeaderControl(); // when there is only a single tab open // we zap the module if it has changed or is not empty if (tabHeader->getNumTabs() <= 1) { if (tracker.moduleEditor->hasChanged() || !tracker.moduleEditor->isEmpty()) { Zapper zapper(tracker); zapper.zapAll(); tracker.updateSongInfo(false); tracker.screen->paint(); } return; } if (index == -1) index = tabHeader->getSelectedTabIndex(); pp_int32 moduleIndex = tabHeader->getTab(index)->ID; bool res = tracker.checkForChanges(documents->get(moduleIndex)->moduleEditor); if (!res) return; TabHeaderControl::TabHeader* tabs = new TabHeaderControl::TabHeader[tabHeader->getNumTabs()]; pp_int32 j = 0; pp_int32 i; for (i = 0; i < (signed)tabHeader->getNumTabs(); i++) { if (i != index) { tabs[j] = *tabHeader->getTab(i); j++; } } tabHeader->clear(); for (i = 0; i < j; i++) { if ((signed)tabs[i].ID > moduleIndex) tabs[i].ID--; } Document* doc = documents->removeNoDestroy(moduleIndex); if (index >= documents->size()) index = documents->size()-1; for (i = 0; i < j; i++) { tabHeader->addTab(tabs[i]); } delete[] tabs; tabHeader->setSelectedTab(index); switchToTab(tabHeader->getTab(index)->ID); if (doc->moduleEditor != tracker.moduleEditor) { tracker.playerMaster->destroyPlayerController(doc->playerController); delete doc; } #endif } void TabManager::selectModuleEditor(Document* document) { #ifndef __LOWRES__ PPContainer* container = static_cast(tracker.screen->getControlByID(CONTAINER_OPENREMOVETABS)); ASSERT(container); TabHeaderControl* tabHeader = getTabHeaderControl(); ASSERT(tabHeader); container->show(tabHeader->getNumTabs() > 1); if (tracker.moduleEditor != document->moduleEditor) { // store current position tracker.moduleEditor->setCurrentCursorPosition(tracker.getPatternEditor()->getCursor()); // switch tracker.moduleEditor = document->moduleEditor; tracker.playerController = document->playerController; if (stopOnTabSwitch) tracker.playerLogic->stopAll(); if (tracker.playerController->isPaused()) { if (!resumeOnTabSwitch) tracker.playerLogic->stopSong(); tracker.playerController->unpause(); } // update tracker.updateAfterTabSwitch(); } currentDocument = document; #endif } ModuleEditor* TabManager::getModuleEditorFromTabIndex(pp_int32 index) { #ifndef __LOWRES__ TabHeaderControl* tabHeader = getTabHeaderControl(); return documents->get(tabHeader->getTab(index)->ID)->moduleEditor; #else return tracker.moduleEditor; #endif } PlayerController* TabManager::getPlayerControllerFromTabIndex(pp_int32 index) { #ifndef __LOWRES__ TabHeaderControl* tabHeader = getTabHeaderControl(); return documents->get(tabHeader->getTab(index)->ID)->playerController; #else return tracker.playerController; #endif } pp_uint32 TabManager::getSelectedTabIndex() { #ifndef __LOWRES__ TabHeaderControl* tabHeader = getTabHeaderControl(); return tabHeader->getSelectedTabIndex(); #else return 0; #endif } void TabManager::cycleTab(pp_int32 offset) { #ifndef __LOWRES__ TabHeaderControl* tabHeader = getTabHeaderControl(); ASSERT(tabHeader); pp_int32 index = tabHeader->getSelectedTabIndex(); index+=offset; if (index >= (signed)tabHeader->getNumTabs()) index = tabHeader->getNumTabs()-1; if (index < 0) index = 0; if (index != tabHeader->getSelectedTabIndex()) { tabHeader->setSelectedTab(index); tracker.screen->paintControl(tabHeader); switchToTab(index); } #endif } pp_int32 TabManager::getNumTabs() const { return documents->size(); } MilkyTracker-1.02.00/src/tracker/TabManager.h000066400000000000000000000047541324432207300206610ustar00rootroot00000000000000/* * tracker/TabManager.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * TabManager.h * MilkyTracker * * Created by Peter Barth on 20.12.07. * */ #ifndef __TABMANAGER_H__ #define __TABMANAGER_H__ #include "BasicTypes.h" template class PPSimpleVector; class ModuleEditor; class PlayerController; class TabManager { public: enum StopTabsBehaviours { StopTabsBehaviourNone, StopTabsBehaviourOnTabSwitch, StopTabsBehaviourOnPlayback }; private: class Tracker& tracker; struct Document { ModuleEditor* moduleEditor; PlayerController* playerController; Document(ModuleEditor* moduleEditor, PlayerController* playerController); ~Document(); }; PPSimpleVector* documents; Document* currentDocument; bool stopOnTabSwitch; bool resumeOnTabSwitch; class TabHeaderControl* getTabHeaderControl(); void applyPlayerDefaults(PlayerController* playerController); void selectModuleEditor(Document* document); public: TabManager(Tracker& tracker); ~TabManager(); ModuleEditor* createModuleEditor(); PlayerController* createPlayerController(); void setStopOnTabSwitch(bool stopOnTabSwitch) { this->stopOnTabSwitch = stopOnTabSwitch; } bool getStopOnTabSwitch() const { return stopOnTabSwitch; } void setResumeOnTabSwitch(bool resumeOnTabSwitch) { this->resumeOnTabSwitch = resumeOnTabSwitch; } bool getResumeOnTabSwitch() const { return resumeOnTabSwitch; } void openNewTab(PlayerController* playerController = NULL, ModuleEditor* moduleEditor = NULL); void switchToTab(pp_uint32 index); void closeTab(pp_int32 index = -1); ModuleEditor* getModuleEditorFromTabIndex(pp_int32 index); PlayerController* getPlayerControllerFromTabIndex(pp_int32 index); pp_uint32 getSelectedTabIndex(); void cycleTab(pp_int32 offset); pp_int32 getNumTabs() const; }; #endif MilkyTracker-1.02.00/src/tracker/TabTitleProvider.cpp000066400000000000000000000026061324432207300224300ustar00rootroot00000000000000/* * tracker/TabTitleProvider.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * TabTitleProvider.cpp * MilkyTracker * * Created by Peter Barth on 11.12.07. * */ #include "TabTitleProvider.h" #include "ModuleEditor.h" PPString TabTitleProvider::getTabTitle() { char temp[ModuleEditor::MAX_TITLETEXT+1]; memset(temp, 0, sizeof(temp)); moduleEditor.getTitle(temp, ModuleEditor::MAX_TITLETEXT); PPString tabTitle = temp; if (tabTitle.length() != 0) return tabTitle; PPSystemString fileName = moduleEditor.getModuleFileName(); fileName = fileName.stripPath(); char* nameASCIIZ = moduleEditor.getModuleFileName().toASCIIZ(); tabTitle = nameASCIIZ; delete[] nameASCIIZ; return tabTitle; } MilkyTracker-1.02.00/src/tracker/TabTitleProvider.h000066400000000000000000000022061324432207300220710ustar00rootroot00000000000000/* * tracker/TabTitleProvider.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * TabTitleProvider.h * MilkyTracker * * Created by Peter Barth on 11.12.07. * */ #ifndef __TABTITLEPROVIDER_H__ #define __TABTITLEPROVIDER_H__ #include "BasicTypes.h" class TabTitleProvider { private: class ModuleEditor& moduleEditor; public: TabTitleProvider(ModuleEditor& moduleEditor) : moduleEditor(moduleEditor) { } PPString getTabTitle(); }; #endif MilkyTracker-1.02.00/src/tracker/TitlePageManager.cpp000066400000000000000000000144531324432207300223610ustar00rootroot00000000000000/* * tracker/TitlePageManager.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "TitlePageManager.h" #include "Screen.h" #include "Container.h" #include "StaticText.h" #include "ListBox.h" #include "PeakLevelControl.h" #include "PPUIConfig.h" #include "ControlIDs.h" TitlePageManager::TitlePageManager(PPScreen& screen) : screen(screen) { } TitlePageManager::Pages TitlePageManager::getCurrentTitlePage() { PPContainer* container = static_cast(screen.getControlByID(CONTAINER_ABOUT)); PPButton* buttonShowPeak = static_cast(container->getControlByID(BUTTON_ABOUT_SHOWPEAK)); PPButton* buttonShowTime = static_cast(container->getControlByID(BUTTON_ABOUT_SHOWTIME)); //PPButton* buttonShowTitle = static_cast(container->getControlByID(BUTTON_ABOUT_SHOWTITLE)); if (buttonShowPeak->isPressed()) return PagePeak; else if (buttonShowTime->isPressed()) return PageTime; return PageTitle; } void TitlePageManager::showTitlePage(Pages page, bool update/* = true*/) { switch (page) { case PageTitle: showSongTitleEditField(update); break; case PageTime: showTimeCounter(update); break; case PagePeak: showPeakControl(update); break; } } void TitlePageManager::showSongTitleEditField(bool update/* = true*/) { PPContainer* container = static_cast(screen.getControlByID(CONTAINER_ABOUT)); PeakLevelControl* peakLevelControl = static_cast(screen.getControlByID(PEAKLEVEL_CONTROL)); PPButton* buttonShowPeak = static_cast(container->getControlByID(BUTTON_ABOUT_SHOWPEAK)); PPButton* buttonShowTime = static_cast(container->getControlByID(BUTTON_ABOUT_SHOWTIME)); PPButton* buttonShowTitle = static_cast(container->getControlByID(BUTTON_ABOUT_SHOWTITLE)); PPButton* buttonTimeEstimate = static_cast(container->getControlByID(BUTTON_ABOUT_ESTIMATESONGLENGTH)); PPStaticText* text = static_cast(container->getControlByID(STATICTEXT_ABOUT_HEADING)); PPStaticText* text2 = static_cast(container->getControlByID(STATICTEXT_ABOUT_TIME)); static_cast(container->getControlByID(LISTBOX_SONGTITLE))->hide(false); peakLevelControl->hide(true); text2->hide(true); buttonTimeEstimate->hide(true); buttonShowPeak->setPressed(false); buttonShowTime->setPressed(false); buttonShowTitle->setPressed(true); #ifdef __LOWRES__ text->setText("Title:"); #else text->setText("Song Title:"); #endif text->setColor(PPUIConfig::getInstance()->getColor(PPUIConfig::ColorStaticText)); if (update) screen.paintControl(container); } void TitlePageManager::showTimeCounter(bool update/* = true*/) { PPContainer* container = static_cast(screen.getControlByID(CONTAINER_ABOUT)); PeakLevelControl* peakLevelControl = static_cast(screen.getControlByID(PEAKLEVEL_CONTROL)); PPButton* buttonShowPeak = static_cast(container->getControlByID(BUTTON_ABOUT_SHOWPEAK)); PPButton* buttonShowTime = static_cast(container->getControlByID(BUTTON_ABOUT_SHOWTIME)); PPButton* buttonShowTitle = static_cast(container->getControlByID(BUTTON_ABOUT_SHOWTITLE)); PPButton* buttonTimeEstimate = static_cast(container->getControlByID(BUTTON_ABOUT_ESTIMATESONGLENGTH)); PPStaticText* text = static_cast(container->getControlByID(STATICTEXT_ABOUT_HEADING)); PPStaticText* text2 = static_cast(container->getControlByID(STATICTEXT_ABOUT_TIME)); static_cast(container->getControlByID(LISTBOX_SONGTITLE))->hide(true); peakLevelControl->hide(true); text2->hide(false); buttonTimeEstimate->hide(false); buttonShowPeak->setPressed(false); buttonShowTime->setPressed(true); buttonShowTitle->setPressed(false); text->setText("Time:"); text->setColor(PPUIConfig::getInstance()->getColor(PPUIConfig::ColorStaticText)); if (update) screen.paintControl(container); } void TitlePageManager::showPeakControl(bool update/* = true*/) { PPContainer* container = static_cast(screen.getControlByID(CONTAINER_ABOUT)); PeakLevelControl* peakLevelControl = static_cast(screen.getControlByID(PEAKLEVEL_CONTROL)); PPButton* buttonShowPeak = static_cast(container->getControlByID(BUTTON_ABOUT_SHOWPEAK)); PPButton* buttonShowTime = static_cast(container->getControlByID(BUTTON_ABOUT_SHOWTIME)); PPButton* buttonShowTitle = static_cast(container->getControlByID(BUTTON_ABOUT_SHOWTITLE)); PPButton* buttonTimeEstimate = static_cast(container->getControlByID(BUTTON_ABOUT_ESTIMATESONGLENGTH)); PPStaticText* text = static_cast(container->getControlByID(STATICTEXT_ABOUT_HEADING)); PPStaticText* text2 = static_cast(container->getControlByID(STATICTEXT_ABOUT_TIME)); static_cast(container->getControlByID(LISTBOX_SONGTITLE))->hide(true); peakLevelControl->hide(false); text2->hide(true); buttonTimeEstimate->hide(true); buttonShowPeak->setPressed(true); buttonShowTime->setPressed(false); buttonShowTitle->setPressed(false); #ifdef __LOWRES__ text->setText("Peak:"); #else text->setText("Peak level:"); #endif text->setColor(PPUIConfig::getInstance()->getColor(PPUIConfig::ColorStaticText)); if (update) screen.paintControl(container); } void TitlePageManager::setPeakControlHeadingColor(const PPColor& color, bool update/* = true*/) { PPContainer* container = static_cast(screen.getControlByID(CONTAINER_ABOUT)); PPStaticText* text = static_cast(container->getControlByID(STATICTEXT_ABOUT_HEADING)); text->setColor(color); if (update) screen.paintControl(container); } MilkyTracker-1.02.00/src/tracker/TitlePageManager.h000066400000000000000000000024701324432207300220220ustar00rootroot00000000000000/* * tracker/TitlePageManager.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #ifndef __TITLEPAGEMANAGER_H__ #define __TITLEPAGEMANAGER_H__ #include "BasicTypes.h" class TitlePageManager { private: class PPScreen& screen; public: TitlePageManager(PPScreen& screen); enum Pages { PageTitle, PageTime, PagePeak }; Pages getCurrentTitlePage(); void showTitlePage(Pages page, bool update = true); void showSongTitleEditField(bool update = true); void showTimeCounter(bool update = true); void showPeakControl(bool update = true); void setPeakControlHeadingColor(const PPColor& color, bool update = true); }; #endif MilkyTracker-1.02.00/src/tracker/ToolInvokeHelper.cpp000066400000000000000000000120701324432207300224320ustar00rootroot00000000000000/* * tracker/ToolInvokeHelper.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * ToolInvokeHelper.cpp * MilkyTracker * * Created by Peter Barth on 14.11.05. * */ #include "ToolInvokeHelper.h" #include "Tracker.h" #include "ListBox.h" #include "PatternEditorControl.h" #include "DialogWithValues.h" #include "DialogQuickChooseInstrument.h" #include "Screen.h" ToolInvokeHelper::ToolInvokeHelper(Tracker& theTracker) : tracker(theTracker), dialog(NULL) { resetLastValues(); } ToolInvokeHelper::~ToolInvokeHelper() { delete dialog; } void ToolInvokeHelper::resetLastValues() { lastValues.volumeScaleStart = lastValues.volumeScaleEnd = -1.0f; } bool ToolInvokeHelper::invokeTool(ToolTypes toolType, pp_int16 keyDownKeyCode/* = -1*/) { if (tracker.screen->getModalControl()) return false; lastToolType = toolType; if (dialog) { delete dialog; dialog = NULL; } switch (toolType) { case ToolTypePatternVolumeScale: dialog = new DialogWithValues(tracker.screen, this, PP_DEFAULT_ID, "Volume scale pattern" PPSTR_PERIODS, DialogWithValues::ValueStyleEnterTwoValues); break; case ToolTypeTrackVolumeScale: dialog = new DialogWithValues(tracker.screen, this, PP_DEFAULT_ID, "Volume scale track" PPSTR_PERIODS, DialogWithValues::ValueStyleEnterTwoValues); break; case ToolTypeSelectionVolumeScale: dialog = new DialogWithValues(tracker.screen, this, PP_DEFAULT_ID, "Volume scale block" PPSTR_PERIODS, DialogWithValues::ValueStyleEnterTwoValues); break; case ToolTypeQuickChooseInstrument: { dialog = new DialogQuickChooseInstrument(tracker.screen, this, PP_DEFAULT_ID, "Choose instrument" PPSTR_PERIODS); static_cast(dialog)->setValueCaption("Enter hex value:"); pp_uint16 value = static_cast(dialog)->numPadKeyToValue(keyDownKeyCode); static_cast(dialog)->setValue(value); dialog->setKeyDownInvokeKeyCode(keyDownKeyCode); dialog->show(); return true; break; } default: return false; } static_cast(dialog)->setValueOneCaption("Enter start scale:"); static_cast(dialog)->setValueTwoCaption("Enter end scale:"); static_cast(dialog)->setValueOneRange(0, 100.0f, 2); static_cast(dialog)->setValueTwoRange(0, 100.0f, 2); static_cast(dialog)->setValueOneIncreaseStep(0.01f); static_cast(dialog)->setValueTwoIncreaseStep(0.01f); static_cast(dialog)->setValueOne(lastValues.volumeScaleStart != -1.0f ? lastValues.volumeScaleStart : 1.0f); static_cast(dialog)->setValueTwo(lastValues.volumeScaleEnd != -1.0f ? lastValues.volumeScaleEnd : 1.0f); dialog->setKeyDownInvokeKeyCode(keyDownKeyCode); dialog->show(); return true; } pp_int32 ToolInvokeHelper::ActionOkay(PPObject* sender) { switch (lastToolType) { case ToolTypePatternVolumeScale: lastValues.volumeScaleStart = static_cast(dialog)->getValueOne(); lastValues.volumeScaleEnd = static_cast(dialog)->getValueTwo(); tracker.getPatternEditor()->scaleVolumePattern(lastValues.volumeScaleStart, lastValues.volumeScaleEnd); break; case ToolTypeTrackVolumeScale: lastValues.volumeScaleStart = static_cast(dialog)->getValueOne(); lastValues.volumeScaleEnd = static_cast(dialog)->getValueTwo(); tracker.getPatternEditor()->scaleVolumeTrack(lastValues.volumeScaleStart, lastValues.volumeScaleEnd); break; case ToolTypeSelectionVolumeScale: lastValues.volumeScaleStart = static_cast(dialog)->getValueOne(); lastValues.volumeScaleEnd = static_cast(dialog)->getValueTwo(); tracker.getPatternEditor()->scaleVolumeSelection(lastValues.volumeScaleStart, lastValues.volumeScaleEnd); break; case ToolTypeQuickChooseInstrument: { pp_int32 value = static_cast(dialog)->getValue(); if (value == 0) tracker.enableInstrument(false); else { tracker.enableInstrument(true); // set listbox index before calling Tracker::selectInstrument() tracker.listBoxInstruments->setSelectedIndex(value-1, false); tracker.selectInstrument(value); } } case ToolTypeNone: break; } return 0; } pp_int32 ToolInvokeHelper::ActionCancel(PPObject* sender) { return 0; } MilkyTracker-1.02.00/src/tracker/ToolInvokeHelper.h000066400000000000000000000031721324432207300221020ustar00rootroot00000000000000/* * tracker/ToolInvokeHelper.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * ToolInvokeHelper.h * MilkyTracker * * Created by Peter Barth on 14.11.05. * */ #ifndef TOOLINVOKEHELPER__H #define TOOLINVOKEHELPER__H #include "DialogBase.h" class Tracker; class ToolInvokeHelper : public DialogResponder { public: enum ToolTypes { ToolTypeNone, ToolTypePatternVolumeScale, ToolTypeTrackVolumeScale, ToolTypeSelectionVolumeScale, ToolTypeQuickChooseInstrument }; private: struct TLastValues { float volumeScaleStart, volumeScaleEnd; }; Tracker& tracker; TLastValues lastValues; ToolTypes lastToolType; PPDialogBase* dialog; public: ToolInvokeHelper(Tracker& theTracker); virtual ~ToolInvokeHelper(); bool invokeTool(ToolTypes toolType, pp_int16 keyDownKeyCode = -1); private: void resetLastValues(); virtual pp_int32 ActionOkay(PPObject* sender); virtual pp_int32 ActionCancel(PPObject* sender); }; #endif MilkyTracker-1.02.00/src/tracker/Tracker.cpp000066400000000000000000002704171324432207300206070ustar00rootroot00000000000000/* * tracker/Tracker.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "Tracker.h" #include "TrackerConfig.h" #include "TabManager.h" #include "PlayerController.h" #include "PlayerMaster.h" #include "PlayerLogic.h" #include "RecorderLogic.h" #include "SamplePlayer.h" #include "SimpleVector.h" #include "ModuleEditor.h" #include "TabTitleProvider.h" #include "PPUI.h" #include "PatternTools.h" #include "PatternEditorControl.h" #include "EnvelopeEditorControl.h" #include "PianoControl.h" #include "PeakLevelControl.h" #include "ScopesControl.h" #include "TabHeaderControl.h" #include "SampleEditorControl.h" #include "TrackerSettingsDatabase.h" #include "KeyBindings.h" #include "ModuleServices.h" #include "FileIdentificator.h" #include "FileExtProvider.h" #include "Decompressor.h" #include "Zapper.h" #include "TitlePageManager.h" // Sections #include "SectionSwitcher.h" #include "SectionTranspose.h" #include "SectionAdvancedEdit.h" #include "SectionDiskMenu.h" #include "SectionHDRecorder.h" #include "SectionSettings.h" #include "SectionInstruments.h" #include "SectionSamples.h" #include "SectionQuickOptions.h" #include "SectionOptimize.h" #include "SectionAbout.h" #include "InputControlListener.h" // Some helper messageboxes & button handlers #include "DialogHandlers.h" #include "DialogChannelSelector.h" #include "DialogZap.h" // Helper class to invoke tools which need parameters #include "ToolInvokeHelper.h" #include "ControlIDs.h" // OS Interface #include "PPOpenPanel.h" #include "PPSavePanel.h" static inline pp_int32 myMod(pp_int32 a, pp_int32 b) { pp_int32 res = a%b; if (res<0) res+=b; return res; } #ifndef __LOWRES__ pp_int32 Tracker::SCOPESHEIGHT() { return (48*screen->getHeight()) / 480; } pp_int32 Tracker::CURRENTSCOPESHEIGHT() { if (!scopesControl) return 0; if (scopesControl->isVisible()) return SCOPESHEIGHT(); return 0; } pp_int32 Tracker::SAMPLESECTIONDEFAULTHEIGHT() { return screen->getHeight() < 480 ? 180 : 240; } #endif pp_int32 Tracker::MAXEDITORHEIGHT() { #ifndef __LOWRES__ TabHeaderControl* tabControl = static_cast(screen->getControlByID(TABHEADER_CONTROL)); if (tabControl != NULL) { return tabControl->getNumTabs() > 1 ? screen->getHeight() - TABHEADERHEIGHT() : screen->getHeight(); } #endif return screen->getHeight(); } Tracker::Tracker() : screen(NULL), peakLevelControl(NULL), scopesControl(NULL), messageBoxContainerGeneric(NULL), dialog(NULL), responder(NULL), playTimeText(NULL), instrumentChooser(NULL), inputContainerCurrent(NULL), inputContainerDefault(NULL), inputContainerExtended(NULL), settingsDatabaseCopy(NULL), eventKeyDownBindings(NULL), eventKeyDownBindingsMilkyTracker(NULL), eventKeyDownBindingsFastTracker(NULL), currentFileName(TrackerConfig::untitledSong), lastState(false), editMode(EditModeFastTracker), extendedOrderlist(false), followSong(true), caughtMouseInUpperLeftCorner(false), useClassicBrowser(false), savePanel(NULL), fileSystemChangedListener(NULL) { resetStateMemories(); settingsDatabase = new TrackerSettingsDatabase(); buildDefaultSettings(); tabManager = new TabManager(*this); playerMaster = new PlayerMaster(TrackerConfig::numTabs); playerController = tabManager->createPlayerController(); moduleEditor = tabManager->createModuleEditor(); playerLogic = new PlayerLogic(*this); recorderLogic = new RecorderLogic(*this); // Sections sectionSwitcher = new SectionSwitcher(*this); sections = new PPSimpleVector(); sectionTranspose = new SectionTranspose(*this); sections->add(sectionTranspose); sectionAdvancedEdit = new SectionAdvancedEdit(*this); sections->add(sectionAdvancedEdit); sectionDiskMenu = new SectionDiskMenu(*this); sections->add(sectionDiskMenu); sectionHDRecorder = new SectionHDRecorder(*this); sections->add(sectionHDRecorder); sectionSettings = new SectionSettings(*this); sections->add(sectionSettings); sectionInstruments = new SectionInstruments(*this); sections->add(sectionInstruments); sectionSamples = new SectionSamples(*this); sections->add(sectionSamples); sectionQuickOptions = new SectionQuickOptions(*this); sections->add(sectionQuickOptions); sectionOptimize = new SectionOptimize(*this); sections->add(sectionOptimize); sectionAbout = new SectionAbout(*this); sections->add(sectionAbout); inputControlListener = new InputControlListener(*this); toolInvokeHelper = new ToolInvokeHelper(*this); pp_int32 i; muteChannels = new bool[TrackerConfig::maximumPlayerChannels]; for (i = 0; i < TrackerConfig::maximumPlayerChannels; i++) muteChannels[i] = false; initKeyBindings(); } Tracker::~Tracker() { delete eventKeyDownBindingsMilkyTracker; delete eventKeyDownBindingsFastTracker; delete toolInvokeHelper; delete responder; delete dialog; delete inputControlListener; delete sections; delete sectionSwitcher; delete recorderLogic; delete playerLogic; delete playerMaster; delete messageBoxContainerGeneric; delete[] muteChannels; delete instrumentChooser; delete settingsDatabaseCopy; delete settingsDatabase; } PatternEditor* Tracker::getPatternEditor() { return moduleEditor->getPatternEditor(); } SampleEditor* Tracker::getSampleEditor() { return moduleEditor->getSampleEditor(); } EnvelopeEditor* Tracker::getEnvelopeEditor() { return moduleEditor->getEnvelopeEditor(); } pp_int32 Tracker::getOrderListBoxIndex() { return listBoxOrderList->getSelectedIndex(); } void Tracker::setOrderListIndex(pp_int32 index) { // do not accept values which exceed the current number of orders if (index >= moduleEditor->getNumOrders()) index = moduleEditor->getNumOrders()-1; listBoxOrderList->setSelectedIndex(index); updateOrderlist(); // fake selection from orderlist, so everything will be updated correctly PPEvent e(eSelection, &index, sizeof(index)); handleEvent(reinterpret_cast(listBoxOrderList), &e); } bool Tracker::isEditingCurrentOrderlistPattern() { return moduleEditor->isEditingOrderPosition(getOrderListBoxIndex()); } pp_int32 Tracker::getInstrumentToPlay(pp_int32 note, PlayerController*& playerController) { if (PPControl* ctrl = screen->getModalControl()) { note--; PPContainer* container = static_cast(ctrl); PPListBox* listBoxSrc = static_cast(container->getControlByID(INSTRUMENT_CHOOSER_LIST_SRC)); PPListBox* listBoxSrcSmp = static_cast(container->getControlByID(INSTRUMENT_CHOOSER_LIST_SRC2)); PPListBox* listBoxSrcModule = static_cast(container->getControlByID(INSTRUMENT_CHOOSER_LIST_SRC3)); PPListBox* listBoxDst = static_cast(container->getControlByID(INSTRUMENT_CHOOSER_LIST_DST)); PPListBox* listBoxDstSmp = static_cast(container->getControlByID(INSTRUMENT_CHOOSER_LIST_DST2)); PPListBox* listBoxDstModule = static_cast(container->getControlByID(INSTRUMENT_CHOOSER_LIST_DST3)); if (!listBoxSrc || !listBoxDst) return -1; PPListBox* focusedListBox = static_cast(container->getFocusedControl()); if (focusedListBox == NULL) return getPatternEditorControl()->isInstrumentEnabled() ? listBoxInstruments->getSelectedIndex() + 1 : 0; // not having any module selection boxes if (listBoxSrc && listBoxDst && !listBoxSrcModule && !listBoxDstModule) { // return the selected index from the focused list box if (focusedListBox == listBoxSrc || focusedListBox == listBoxDst) return focusedListBox->getSelectedIndex() + 1; } // focus is on instruments if (focusedListBox == listBoxSrc || focusedListBox == listBoxSrcModule) { playerController = tabManager->getPlayerControllerFromTabIndex(listBoxSrcModule->getSelectedIndex()); // return the selected index from the focused list box return listBoxSrc->getSelectedIndex() + 1; } else if (focusedListBox == listBoxDst || focusedListBox == listBoxDstModule) { playerController = tabManager->getPlayerControllerFromTabIndex(listBoxDstModule->getSelectedIndex()); // return the selected index from the focused list box return listBoxDst->getSelectedIndex() + 1; } // if focus is on one of the samples list boxes set up some sample playing // on the sample playing channels of the current player ModuleEditor* src = listBoxSrcModule ? tabManager->getModuleEditorFromTabIndex(listBoxSrcModule->getSelectedIndex()) : this->moduleEditor; ModuleEditor* dst = listBoxDstModule ? tabManager->getModuleEditorFromTabIndex(listBoxDstModule->getSelectedIndex()) : this->moduleEditor; if (focusedListBox == listBoxSrcSmp) { SamplePlayer samplePlayer(*src, *playerController); if (focusedListBox == listBoxSrcSmp) samplePlayer.playSample(listBoxSrc->getSelectedIndex(), listBoxSrcSmp->getSelectedIndex(), note); else samplePlayer.playSample(listBoxSrc->getSelectedIndex(), note); return -1; } if (focusedListBox == listBoxDstSmp) { SamplePlayer samplePlayer(*dst, *playerController); if (focusedListBox == listBoxDstSmp) samplePlayer.playSample(listBoxDst->getSelectedIndex(), listBoxDstSmp->getSelectedIndex(), note); else samplePlayer.playSample(listBoxDst->getSelectedIndex(), note); return -1; } return focusedListBox->getSelectedIndex() + 1; } else { return getPatternEditorControl()->isInstrumentEnabled() ? listBoxInstruments->getSelectedIndex() + 1 : 0; } } void Tracker::setNumChannels(pp_int32 numChannels, bool repaint/* = true*/) { getPatternEditorControl()->setNumVisibleChannels(numChannels); scopesControl->setNumChannels(numChannels); updatePatternEditorControl(repaint, false); } void Tracker::showSongSettings(bool show) { screen->getControlByID(CONTAINER_ABOUT)->show(show); screen->getControlByID(CONTAINER_ORDERLIST)->show(show); screen->getControlByID(CONTAINER_SPEED)->show(show); screen->getControlByID(CONTAINER_PATTERN)->show(show); } void Tracker::showMainOptions(bool show) { screen->getControlByID(CONTAINER_MENU)->show(show); } void Tracker::showMainMenu(bool show, bool showInstrumentSelector) { #ifndef __LOWRES__ showSongSettings(show); showMainOptions(show); if (showInstrumentSelector) screen->getControlByID(CONTAINER_INSTRUMENTLIST)->show(show); #else if (!show) { showSongSettings(false); showMainOptions(false); screen->getControlByID(CONTAINER_LOWRES_MENUSWITCH)->show(false); screen->getControlByID(CONTAINER_INSTRUMENTLIST)->show(false); screen->getControlByID(CONTAINER_LOWRES_TINYMENU)->show(false); } else { sectionSwitcher->showCurrentSubMenu(false); screen->getControlByID(CONTAINER_LOWRES_MENUSWITCH)->show(true); } #endif } #ifdef __LOWRES__ void Tracker::selectScopesControl(pp_int32 ctrlType) { scopesControl->setCurrentClickType((ScopesControl::ClickTypes)ctrlType); updateScopesControlButtons(); screen->paintControl(screen->getControlByID(CONTAINER_SCOPECONTROL)); } void Tracker::updateScopesControlButtons() { PPContainer* container = static_cast(screen->getControlByID(CONTAINER_SCOPECONTROL)); ASSERT(container); if (!container->isVisible()) return; if (!scopesControl) return; static_cast(container->getControlByID(BUTTON_SCOPECONTROL_MUTE))->setPressed(false); static_cast(container->getControlByID(BUTTON_SCOPECONTROL_SOLO))->setPressed(false); static_cast(container->getControlByID(BUTTON_SCOPECONTROL_REC))->setPressed(false); switch (scopesControl->getCurrentClickType()) { case ScopesControl::ClickTypeMute: static_cast(container->getControlByID(BUTTON_SCOPECONTROL_MUTE))->setPressed(true); break; case ScopesControl::ClickTypeSolo: static_cast(container->getControlByID(BUTTON_SCOPECONTROL_SOLO))->setPressed(true); break; case ScopesControl::ClickTypeRec: static_cast(container->getControlByID(BUTTON_SCOPECONTROL_REC))->setPressed(true); break; } } void Tracker::toggleJamMenuPianoSize() { PPContainer* container = static_cast(screen->getControlByID(CONTAINER_LOWRES_JAMMENU)); ASSERT(container); PianoControl* pCtrl = static_cast(container->getControlByID(PIANO_CONTROL)); ASSERT(pCtrl); bool largePiano = (pCtrl->getxScale() == 6 && pCtrl->getyScale() == 3); PPButton* button = static_cast(container->getControlByID(BUTTON_JAMMENU_TOGGLEPIANOSIZE)); ASSERT(button); button->setText(largePiano ? TrackerConfig::stringButtonCollapsed : TrackerConfig::stringButtonExtended); if (largePiano) { container->setSize(PPSize(container->getSize().width, container->getSize().height - 25*2)); container->setLocation(PPPoint(container->getLocation().x, container->getLocation().y + 25*2)); pCtrl->setLocation(PPPoint(pCtrl->getLocation().x, pCtrl->getLocation().y + 25*2)); pCtrl->setxScale(3); pCtrl->setyScale(1); pCtrl->setSize(PPSize(screen->getWidth() - 4, 25*1+12)); getPatternEditorControl()->setSize(PPSize(getPatternEditorControl()->getSize().width, getPatternEditorControl()->getSize().height + 25*2)); } else { container->setSize(PPSize(container->getSize().width, container->getSize().height + 25*2)); container->setLocation(PPPoint(container->getLocation().x, container->getLocation().y - 25*2)); pCtrl->setLocation(PPPoint(pCtrl->getLocation().x, pCtrl->getLocation().y - 25*2)); pCtrl->setxScale(6); pCtrl->setyScale(3); pCtrl->setSize(PPSize(screen->getWidth() - 4, 25*3+12)); getPatternEditorControl()->setSize(PPSize(getPatternEditorControl()->getSize().width, getPatternEditorControl()->getSize().height - 25*2)); } screen->paint(); } void Tracker::flipInstrumentListBoxes() { PPContainer* ctrl = static_cast(screen->getControlByID(CONTAINER_INSTRUMENTLIST)); PPListBox* listBoxIns = static_cast(ctrl->getControlByID(LISTBOX_INSTRUMENTS)); PPListBox* listBoxSmp = static_cast(ctrl->getControlByID(LISTBOX_SAMPLES)); bool b = listBoxIns->isHidden(); PPPoint insPos = listBoxIns->getLocation(); PPSize insSize = listBoxIns->getSize(); PPPoint smpPos = listBoxSmp->getLocation(); PPSize smpSize = listBoxSmp->getSize(); listBoxSmp->setLocation(insPos); listBoxSmp->setSize(insSize); listBoxIns->setLocation(smpPos); listBoxIns->setSize(smpSize); listBoxSmp->hide(b); listBoxIns->hide(!b); ctrl->getControlByID(STATICTEXT_INSTRUMENTS_ALTERNATIVEHEADER)->hide(b); ctrl->getControlByID(STATICTEXT_INSTRUMENTS_ALTERNATIVEHEADER2)->hide(b); ctrl->getControlByID(BUTTON_INSTRUMENT)->hide(!b); ctrl->getControlByID(STATICTEXT_SAMPLEHEADER)->hide(!b); ctrl->getControlByID(BUTTON_INSTRUMENTS_PLUS)->hide(!b); ctrl->getControlByID(BUTTON_INSTRUMENTS_MINUS)->hide(!b); screen->paintControl(ctrl); } #endif void Tracker::setModuleNumChannels(pp_uint32 numChannels) { moduleEditor->setNumChannels(numChannels); setNumChannels(numChannels); } pp_int32 Tracker::handleEvent(PPObject* sender, PPEvent* event) { char buffer[100]; if (event->getID() == eFileDragDropped) { if (screen->getModalControl()) return 0; const PPSystemString* str = *(reinterpret_cast(event->getDataPtr())); loadGenericFileType(*str); event->cancel(); } else if (event->getID() == eUpdateChanged) { updateWindowTitle(); } else if (event->getID() == eKeyDown || event->getID() == eKeyChar || event->getID() == eKeyUp) { processShortcuts(event); } else if (event->getID() == eTimer) { doFollowSong(); } #ifndef __LOWRES__ else if (event->getID() == eLMouseDown) { PPPoint* p = (PPPoint*)event->getDataPtr(); caughtMouseInUpperLeftCorner = (p->x <= TrackerConfig::trackerExitBounds.x && p->y <= TrackerConfig::trackerExitBounds.y) ? true : false; if (caughtMouseInUpperLeftCorner) event->cancel(); } else if (event->getID() == eLMouseUp) { PPPoint* p = (PPPoint*)event->getDataPtr(); if ((p->x <= TrackerConfig::trackerExitBounds.x && p->y <= TrackerConfig::trackerExitBounds.y) && caughtMouseInUpperLeftCorner) { event->cancel(); eventKeyDownBinding_ExitApplication(); } else caughtMouseInUpperLeftCorner = false; } #endif else if (event->getID() == eCommand || event->getID() == eCommandRepeat) { switch (reinterpret_cast(sender)->getID()) { // test /*case BUTTON_MENU_ITEM_0+8: { if (event->getID() != eCommand) break; eventKeyDownBinding_InvokeSectionHDRecorder(); break; }*/ case BUTTON_INSTRUMENT: { if (event->getID() != eCommand) break; enableInstrument(!getPatternEditorControl()->isInstrumentEnabled()); break; } case STATICTEXT_ABOUT_HEADING: { if (event->getID() != eCommand) break; TitlePageManager titlePageManager(*screen); titlePageManager.setPeakControlHeadingColor(PPUIConfig::getInstance()->getColor(PPUIConfig::ColorStaticText)); break; } case BUTTON_ABOUT_SHOWTITLE: { if (event->getID() != eCommand) break; TitlePageManager titlePageManager(*screen); titlePageManager.showTitlePage(TitlePageManager::PageTitle); break; } case BUTTON_ABOUT_SHOWTIME: { if (event->getID() != eCommand) break; TitlePageManager titlePageManager(*screen); titlePageManager.showTitlePage(TitlePageManager::PageTime); break; } case BUTTON_ABOUT_ESTIMATESONGLENGTH: { if (event->getID() != eCommand) break; estimateSongLength(true); break; } case BUTTON_ABOUT_SHOWPEAK: { if (event->getID() != eCommand) break; TitlePageManager titlePageManager(*screen); titlePageManager.showTitlePage(TitlePageManager::PagePeak); break; } case BUTTON_ABOUT_FOLLOWSONG: { if (event->getID() != eCommand) break; eventKeyDownBinding_ToggleFollowSong(); break; } case BUTTON_ABOUT_PROSPECTIVE: { if (event->getID() != eCommand) break; eventKeyDownBinding_ToggleProspectiveMode(); break; } case BUTTON_ABOUT_WRAPCURSOR: { if (event->getID() != eCommand) break; eventKeyDownBinding_ToggleCursorWrapAround(); break; } case BUTTON_ABOUT_LIVESWITCH: { if (event->getID() != eCommand) break; eventKeyDownBinding_ToggleLiveSwitch(); break; } case BUTTON_ORDERLIST_EXTENT: { if (event->getID() != eCommand) break; expandOrderlist(!extendedOrderlist); screen->paintControl(screen->getControlByID(CONTAINER_ORDERLIST)); break; } case BUTTON_SPEEDCONTAINERFLIP: { if (event->getID() != eCommand) break; flipSpeedSection(); screen->paintControl(screen->getControlByID(CONTAINER_SPEED)); break; } #ifdef __LOWRES__ // -------- submenus ------------------------------ case BUTTON_APP_EXIT: if (event->getID() != eCommand) break; eventKeyDownBinding_ExitApplication(); break; case BUTTON_0: case BUTTON_1: case BUTTON_2: case BUTTON_3: case BUTTON_4: { if (event->getID() != eCommand) break; PPButton* button = reinterpret_cast(sender); sectionSwitcher->switchToSubMenu((SectionSwitcher::ActiveLowerSectionPages)(button->getID() - BUTTON_0)); break; } #endif // -------- generic message box ------------------- case PP_MESSAGEBOX_BUTTON_YES: case PP_MESSAGEBOX_BUTTON_NO: case PP_MESSAGEBOX_BUTTON_CANCEL: case PP_MESSAGEBOX_BUTTON_USER1: case PP_MESSAGEBOX_BUTTON_USER2: case PP_MESSAGEBOX_BUTTON_USER3: case PP_MESSAGEBOX_BUTTON_USER4: case PP_MESSAGEBOX_BUTTON_USER5: case PP_MESSAGEBOX_BUTTON_USER6: case PP_MESSAGEBOX_BUTTON_USER7: case PP_MESSAGEBOX_BUTTON_USER8: case PP_MESSAGEBOX_BUTTON_USER9: // little hack, user buttons below PP_MESSAGEBOX_BUTTON_USER10 // are not allowed to send repeatable pressed down events if (event->getID() != eCommand) break; case PP_MESSAGEBOX_BUTTON_USER10: case PP_MESSAGEBOX_BUTTON_USER11: case PP_MESSAGEBOX_BUTTON_USER12: case PP_MESSAGEBOX_BUTTON_USER13: case PP_MESSAGEBOX_BUTTON_USER14: case PP_MESSAGEBOX_BUTTON_USER15: { bool res = messageBoxEventListener(screen->getModalControl()->getID(), reinterpret_cast(sender)->getID()); if (res) screen->setModalControl(NULL); // repaints break; } case MAINMENU_PLAY_SONG: playerLogic->playSong(); break; case MAINMENU_PLAY_PATTERN: playerLogic->playPattern(); break; case MAINMENU_PLAY_POSITION: playerLogic->playPosition(); break; case MAINMENU_STOP: playerLogic->stopSong(); break; // -------- ZAP message box --------------------- case MAINMENU_ZAP: if (event->getID() != eCommand) break; if (dialog) delete dialog; if (responder) delete responder; responder = new ZapHandler(Zapper(*this)); dialog = new DialogZap(screen, responder, PP_DEFAULT_ID); dialog->show(); break; // open song case MAINMENU_LOAD: { if (event->getID() != eCommand) break; eventKeyDownBinding_Open(); break; } case MAINMENU_SAVE: { if (event->getID() != eCommand) break; eventKeyDownBinding_Save(); break; } case MAINMENU_SAVEAS: { if (event->getID() != eCommand) break; eventKeyDownBinding_SaveAs(); break; } // disk op case MAINMENU_DISKMENU: { if (event->getID() != eCommand) break; eventKeyDownBinding_InvokeSectionDiskMenu(); break; } // Only Fasttracker II editing mode: // Edit button case MAINMENU_EDIT: { if (event->getID() != eCommand) break; switch (editMode) { case EditModeFastTracker: eventKeyDownBinding_ToggleFT2Edit(); break; case EditModeMilkyTracker: eventKeyDownBinding_Edit(); break; } break; } // instrument editor case MAINMENU_INSEDIT: { if (event->getID() != eCommand) break; eventKeyDownBinding_InvokeSectionInstruments(); break; } case BUTTON_INSTRUMENTEDITOR_EXIT: case BUTTON_SAMPLEEDITOR_EXIT: { if (event->getID() != eCommand) break; sectionSwitcher->showBottomSection(SectionSwitcher::ActiveBottomSectionNone); screen->paint(true, true); break; } // sample editor case MAINMENU_SMPEDIT: { if (event->getID() != eCommand) break; eventKeyDownBinding_InvokeSectionSamples(); break; } // settings case MAINMENU_ADVEDIT: { if (event->getID() != eCommand) break; eventKeyDownBinding_InvokeSectionAdvancedEdit(); break; } // transpose case MAINMENU_TRANSPOSE: { if (event->getID() != eCommand) break; eventKeyDownBinding_InvokeSectionTranspose(); break; } // settings case MAINMENU_CONFIG: { if (event->getID() != eCommand) break; eventKeyDownBinding_InvokeSectionSettings(); break; } // quick options case MAINMENU_QUICKOPTIONS: { if (event->getID() != eCommand) break; eventKeyDownBinding_InvokeSectionQuickOptions(); break; } // optimize case MAINMENU_OPTIMIZE: { if (event->getID() != eCommand) break; eventKeyDownBinding_InvokeSectionOptimize(); break; } case MAINMENU_ABOUT: { if (event->getID() != eCommand) break; eventKeyDownBinding_InvokeSectionAbout(); break; } #ifdef __LOWRES__ case BUTTON_SAMPLES_INVOKEHDRECORDER: { if (event->getID() != eCommand) break; // The bottom section fills up the entire screen // so we first need to hide the entire section before we can show // the HD recorder section screen->pauseUpdate(true); sectionSwitcher->hideBottomSection(); sectionHDRecorder->selectSampleOutput(); eventKeyDownBinding_InvokeSectionHDRecorder(); screen->pauseUpdate(false); screen->paint(); break; } #endif case BUTTON_ORDERLIST_SONGLENGTH_PLUS: moduleEditor->increaseSongLength(); updateSongLength(); sectionHDRecorder->adjustOrders(); break; case BUTTON_ORDERLIST_SONGLENGTH_MINUS: moduleEditor->decreaseSongLength(); updateSongLength(); sectionHDRecorder->adjustOrders(); break; case BUTTON_ORDERLIST_REPEAT_PLUS: moduleEditor->increaseRepeatPos(); updateSongRepeat(); break; case BUTTON_ORDERLIST_REPEAT_MINUS: moduleEditor->decreaseRepeatPos(); updateSongRepeat(); break; // insert position into orderlist case BUTTON_ORDERLIST_INSERT: moduleEditor->insertNewOrderPosition(getOrderListBoxIndex()); updateOrderlist(); sectionHDRecorder->adjustOrders(); playerLogic->continuePlayingSong(); break; // delete current orderlist position case BUTTON_ORDERLIST_DELETE: moduleEditor->deleteOrderPosition(getOrderListBoxIndex()); updateOrderlist(); sectionHDRecorder->adjustOrders(); playerLogic->continuePlayingSong(); break; // insert position into orderlist case BUTTON_ORDERLIST_SEQENTRY: { moduleEditor->seqCurrentOrderPosition(getOrderListBoxIndex()); updateSongLength(false); pp_int32 index = getOrderListBoxIndex()+1; setOrderListIndex(index); sectionHDRecorder->adjustOrders(); playerLogic->continuePlayingSong(); break; } // insert position into orderlist and clone the current selected pattern case BUTTON_ORDERLIST_CLNENTRY: { moduleEditor->seqCurrentOrderPosition(getOrderListBoxIndex(), true); updateSongLength(false); pp_int32 index = getOrderListBoxIndex()+1; setOrderListIndex(index); sectionHDRecorder->adjustOrders(); playerLogic->continuePlayingSong(); break; } // select next pattern in current orderlist position case BUTTON_ORDERLIST_NEXT: moduleEditor->increaseOrderPosition(getOrderListBoxIndex()); updateOrderlist(); playerLogic->continuePlayingSong(); break; // select previous pattern in current orderlist position case BUTTON_ORDERLIST_PREVIOUS: moduleEditor->decreaseOrderPosition(getOrderListBoxIndex()); updateOrderlist(); playerLogic->continuePlayingSong(); break; case BUTTON_OCTAVE_MINUS: getPatternEditor()->decreaseCurrentOctave(); updatePatternAddAndOctave(); break; case BUTTON_OCTAVE_PLUS: getPatternEditor()->increaseCurrentOctave(); updatePatternAddAndOctave(); break; case BUTTON_ADD_PLUS: getPatternEditorControl()->increaseRowInsertAdd(); updatePatternAddAndOctave(); break; case BUTTON_ADD_MINUS: getPatternEditorControl()->decreaseRowInsertAdd(); updatePatternAddAndOctave(); break; case BUTTON_BPM_PLUS: { setChanged(); mp_sint32 bpm,speed; playerController->getSpeed(bpm, speed); playerController->setSpeed(bpm+1, speed); updateSpeed(); break; } case BUTTON_BPM_MINUS: { setChanged(); mp_sint32 bpm,speed; playerController->getSpeed(bpm, speed); playerController->setSpeed(bpm-1, speed); updateSpeed(); break; } case BUTTON_SPEED_PLUS: { setChanged(); mp_sint32 bpm,speed; playerController->getSpeed(bpm, speed); playerController->setSpeed(bpm, speed+1); updateSpeed(); break; } case BUTTON_SPEED_MINUS: { setChanged(); mp_sint32 bpm,speed; playerController->getSpeed(bpm, speed); playerController->setSpeed(bpm, speed-1); updateSpeed(); break; } // go to next pattern case BUTTON_PATTERN_PLUS: eventKeyDownBinding_NextPattern(); break; // go to previous pattern case BUTTON_PATTERN_MINUS: eventKeyDownBinding_PreviousPattern(); break; // expand current pattern case BUTTON_PATTERN_EXPAND: getPatternEditor()->expandPattern(); updatePatternLength(false); screen->update(); break; // shrink current pattern case BUTTON_PATTERN_SHRINK: getPatternEditor()->shrinkPattern(); updatePatternLength(false); screen->update(); break; // grow length case BUTTON_PATTERN_SIZE_PLUS: getPatternEditor()->resizePattern(moduleEditor->getPattern(moduleEditor->getCurrentPatternIndex())->rows + 1); updatePatternLength(false); screen->update(); break; // decrease length case BUTTON_PATTERN_SIZE_MINUS: getPatternEditor()->resizePattern(moduleEditor->getPattern(moduleEditor->getCurrentPatternIndex())->rows - 1); updatePatternLength(false); screen->update(); break; #ifdef __LOWRES__ // go to next order case BUTTON_JAMMENU_NEXTORDERLIST: selectNextOrder(); break; // go to previous order case BUTTON_JAMMENU_PREVORDERLIST: selectPreviousOrder(); break; case BUTTON_JAMMENU_NEXTINSTRUMENT: selectNextInstrument(); break; case BUTTON_JAMMENU_PREVINSTRUMENT: selectPreviousInstrument(); break; case BUTTON_JAMMENU_TOGGLEPIANOSIZE: if (event->getID() != eCommand) break; toggleJamMenuPianoSize(); break; case BUTTON_INSTRUMENTS_FLIP: if (event->getID() != eCommand) break; flipInstrumentListBoxes(); break; #endif // add channels to song (affects pattern editor) case BUTTON_MENU_ITEM_ADDCHANNELS: case BUTTON_MENU_ITEM_SUBCHANNELS: { mp_sint32 numChannels = moduleEditor->getNumChannels() + (reinterpret_cast(sender)->getID() == BUTTON_MENU_ITEM_ADDCHANNELS ? 2 : -2); if (numChannels > TrackerConfig::numPlayerChannels) numChannels = TrackerConfig::numPlayerChannels; if (numChannels < 2) numChannels = 2; setModuleNumChannels(numChannels); break; } case BUTTON_INSTRUMENTS_PLUS: moduleEditor->allocateInstrument(); updateInstrumentsListBox(false); sectionInstruments->update(false); screen->update(); break; case BUTTON_INSTRUMENTS_MINUS: { pp_uint32 i = listBoxInstruments->getSelectedIndex(); moduleEditor->freeInstrument(); updateInstrumentsListBox(false); if (listBoxInstruments->getSelectedIndex() != i) { getPatternEditorControl()->setCurrentInstrument(listBoxInstruments->getSelectedIndex() + 1); updateSampleEditorAndInstrumentSection(false); } screen->update(); break; } case BUTTON_TAB_OPEN: { eventKeyDownBinding_OpenTab(); break; } case BUTTON_TAB_CLOSE: { eventKeyDownBinding_CloseTab(); break; } #ifdef __LOWRES__ case BUTTON_SCOPECONTROL_MUTE: if (event->getID() != eCommand) break; selectScopesControl(ScopesControl::ClickTypeMute); break; case BUTTON_SCOPECONTROL_SOLO: if (event->getID() != eCommand) break; selectScopesControl(ScopesControl::ClickTypeSolo); break; case BUTTON_SCOPECONTROL_REC: if (event->getID() != eCommand) break; selectScopesControl(ScopesControl::ClickTypeRec); break; #endif } // Check if something has changed updateWindowTitle(); } else if (event->getID() == ePreSelection) { switch (reinterpret_cast(sender)->getID()) { // new instrument has been selected, we need to assure // that the sample changes are committed before we wipe out // the current sample listbox data case LISTBOX_INSTRUMENTS: if (listBoxSamples->isEditing()) listBoxSamples->commitChanges(); break; } } else if (event->getID() == eSelection) { switch (reinterpret_cast(sender)->getID()) { case TABHEADER_CONTROL: { pp_int32 index = *((pp_int32*)event->getDataPtr()); tabManager->switchToTab(index); break; } // new pattern has been selected in the orderlist case LISTBOX_ORDERLIST: { pp_int32 orderIndex = *((pp_int32*)event->getDataPtr()); moduleEditor->setCurrentOrderIndex(orderIndex); moduleEditor->setCurrentPatternIndex(moduleEditor->getOrderPosition(orderIndex)); updatePatternEditorControl(false); updatePatternIndex(false); updatePatternLength(false); #ifdef __LOWRES__ updateJamMenuOrder(false); #endif screen->update(); if (playerController->isPlayingPattern()) playerLogic->continuePlayingPattern(); else playerLogic->continuePlayingSong(); break; } // new instrument has been selected case LISTBOX_INSTRUMENTS: { pp_int32 index = *((pp_int32*)event->getDataPtr()) + 1; selectInstrument(index); screen->update(); break; } case LISTBOX_SAMPLES: { pp_int32 index = *((pp_int32*)event->getDataPtr()); moduleEditor->setCurrentSampleIndex(index); updateSampleEditorAndInstrumentSection(false); for (pp_int32 i = 0; i < sections->size(); i++) sections->get(i)->notifySampleSelect(index); screen->update(); break; } // Instrument chooser case INSTRUMENT_CHOOSER_LIST_SRC3: case INSTRUMENT_CHOOSER_LIST_DST3: { PPContainer* container = static_cast(screen->getModalControl()); PPStaticText* staticText = static_cast(container->getControlByID(INSTRUMENT_CHOOSER_USERSTR1)); PPListBox* listBoxChangeIns = NULL; PPListBox* listBoxChangeSmp = NULL; PPListBox* listBoxSrcIns = static_cast(container->getControlByID(INSTRUMENT_CHOOSER_LIST_SRC)); PPListBox* listBoxSrcSmp = static_cast(container->getControlByID(INSTRUMENT_CHOOSER_LIST_SRC2)); PPListBox* listBoxDstIns = static_cast(container->getControlByID(INSTRUMENT_CHOOSER_LIST_DST));; PPListBox* listBoxDstSmp = static_cast(container->getControlByID(INSTRUMENT_CHOOSER_LIST_DST2)); if (reinterpret_cast(sender)->getID() == INSTRUMENT_CHOOSER_LIST_SRC3) { listBoxChangeIns = listBoxSrcIns; listBoxChangeSmp = listBoxSrcSmp; } else if (reinterpret_cast(sender)->getID() == INSTRUMENT_CHOOSER_LIST_DST3) { listBoxChangeIns = listBoxDstIns; listBoxChangeSmp = listBoxDstSmp; } if (listBoxChangeIns && listBoxChangeSmp) { listBoxChangeIns->clear(); listBoxChangeSmp->clear(); fillInstrumentListBox(listBoxChangeIns, tabManager->getModuleEditorFromTabIndex((reinterpret_cast(sender))->getSelectedIndex())); fillSampleListBox(listBoxChangeSmp, listBoxChangeIns->getSelectedIndex(), tabManager->getModuleEditorFromTabIndex((reinterpret_cast(sender))->getSelectedIndex())); } // update text depending on the type of the instrument chooser dialog switch (container->getID()) { case INSTRUMENT_CHOOSER_COPY: sprintf(buffer, "Copy ins. %x to %x", listBoxSrcIns->getSelectedIndex()+1, listBoxDstIns->getSelectedIndex()+1); break; case INSTRUMENT_CHOOSER_SWAP: sprintf(buffer, "Swap ins. %x with %x", listBoxSrcSmp->getSelectedIndex()+1, listBoxDstSmp->getSelectedIndex()+1); break; } staticText->setText(buffer); screen->paintControl(screen->getModalControl()); break; } // Instrument chooser case INSTRUMENT_CHOOSER_LIST_SRC: case INSTRUMENT_CHOOSER_LIST_DST: { PPContainer* container = static_cast(screen->getModalControl()); PPStaticText* staticText = static_cast(container->getControlByID(INSTRUMENT_CHOOSER_USERSTR1)); PPListBox* listBoxSrc = static_cast(container->getControlByID(INSTRUMENT_CHOOSER_LIST_SRC)); PPListBox* listBoxDst = static_cast(container->getControlByID(INSTRUMENT_CHOOSER_LIST_DST)); PPListBox* listBoxSrcModule = static_cast(container->getControlByID(INSTRUMENT_CHOOSER_LIST_SRC3)); PPListBox* listBoxDstModule = static_cast(container->getControlByID(INSTRUMENT_CHOOSER_LIST_DST3)); ModuleEditor* src = listBoxSrcModule ? tabManager->getModuleEditorFromTabIndex(listBoxSrcModule->getSelectedIndex()) : this->moduleEditor; ModuleEditor* dst = listBoxDstModule ? tabManager->getModuleEditorFromTabIndex(listBoxDstModule->getSelectedIndex()) : this->moduleEditor; PPListBox* listBoxChange = NULL; ModuleEditor* moduleEditor = this->moduleEditor; // A new instrument has been selected in either of the two instrument list boxes // now it's up to update the samples belonging to the instrument in the sample listboxes if (reinterpret_cast(sender)->getID() == INSTRUMENT_CHOOSER_LIST_SRC) { listBoxChange = static_cast(container->getControlByID(INSTRUMENT_CHOOSER_LIST_SRC2)); moduleEditor = src; } else if (reinterpret_cast(sender)->getID() == INSTRUMENT_CHOOSER_LIST_DST) { listBoxChange = static_cast(container->getControlByID(INSTRUMENT_CHOOSER_LIST_DST2)); moduleEditor = dst; } if (listBoxChange) { listBoxChange->clear(); fillSampleListBox(listBoxChange, reinterpret_cast(sender)->getSelectedIndex(), moduleEditor); } // update text depending on the type of the instrument chooser dialog switch (container->getID()) { case INSTRUMENT_CHOOSER_COPY: sprintf(buffer, "Copy ins. %x to %x", listBoxSrc->getSelectedIndex()+1, listBoxDst->getSelectedIndex()+1); break; case INSTRUMENT_CHOOSER_SWAP: sprintf(buffer, "Swap ins. %x with %x", listBoxSrc->getSelectedIndex()+1, listBoxDst->getSelectedIndex()+1); break; case MESSAGEBOX_INSREMAP: sprintf(buffer, "Remap ins. %x to %x", listBoxSrc->getSelectedIndex()+1, listBoxDst->getSelectedIndex()+1); break; } staticText->setText(buffer); screen->paintControl(screen->getModalControl()); break; } case INSTRUMENT_CHOOSER_LIST_SRC2: case INSTRUMENT_CHOOSER_LIST_DST2: { PPContainer* container = static_cast(screen->getModalControl()); PPStaticText* staticText = static_cast(container->getControlByID(INSTRUMENT_CHOOSER_USERSTR2)); PPListBox* listBoxSrc = static_cast(container->getControlByID(INSTRUMENT_CHOOSER_LIST_SRC2)); PPListBox* listBoxDst = static_cast(container->getControlByID(INSTRUMENT_CHOOSER_LIST_DST2)); switch (container->getID()) { case INSTRUMENT_CHOOSER_COPY: sprintf(buffer, "Copy smp. %x to %x", listBoxSrc->getSelectedIndex(), listBoxDst->getSelectedIndex()); break; case INSTRUMENT_CHOOSER_SWAP: sprintf(buffer, "Swap smp. %x with %x", listBoxSrc->getSelectedIndex(), listBoxDst->getSelectedIndex()); break; } staticText->setText(buffer); screen->paintControl(screen->getModalControl()); break; } } } else if (event->getID() == eValueChanged) { switch (reinterpret_cast(sender)->getID()) { case LISTBOX_SONGTITLE: { moduleEditor->setTitle(**(reinterpret_cast(event->getDataPtr())), ModuleEditor::MAX_TITLETEXT); break; } case LISTBOX_INSTRUMENTS: { moduleEditor->setInstrumentName(listBoxInstruments->getSelectedIndex(), **(reinterpret_cast(event->getDataPtr())), ModuleEditor::MAX_INSTEXT); break; } case LISTBOX_SAMPLES: { moduleEditor->setCurrentSampleName(**(reinterpret_cast(event->getDataPtr())), ModuleEditor::MAX_SMPTEXT); break; } // channels have been muted/unmuted in pattern editor case PATTERN_EDITOR: { const bool* muteChannelsPtr = reinterpret_cast(event->getDataPtr()); for (pp_int32 i = 0; i < TrackerConfig::numPlayerChannels; i++) { muteChannels[i] = muteChannelsPtr[i]; bool b = (muteChannels[i] != 0); playerController->muteChannel(i, b); scopesControl->muteChannel(i, b); } if (scopesControl->needsUpdate()) screen->paintControl(scopesControl); break; } // channels have been muted/unmuted in scopes case SCOPES_CONTROL: { switch (event->getMetaData()) { case ScopesControl::ChangeValueMuting: { const bool* muteChannelsPtr = reinterpret_cast(event->getDataPtr()); for (pp_int32 i = 0; i < TrackerConfig::numPlayerChannels; i++) { muteChannels[i] = muteChannelsPtr[i]; bool b = (muteChannels[i] != 0); playerController->muteChannel(i, b); getPatternEditorControl()->muteChannel(i, b); } if (scopesControl->needsUpdate()) screen->paintControl(scopesControl, false); screen->paintControl(getPatternEditorControl(), false); screen->update(); break; } case ScopesControl::ChangeValueRecording: { const pp_uint8* recordChannelsPtr = reinterpret_cast(event->getDataPtr()); for (pp_int32 i = 0; i < TrackerConfig::numPlayerChannels; i++) { bool b = (recordChannelsPtr[i] != 0); playerController->recordChannel(i, b); getPatternEditorControl()->recordChannel(i, b); } playerController->resetFirstPlayingChannel(); if (scopesControl->needsUpdate()) screen->paintControl(scopesControl, false); screen->update(); break; } } break; } } // Check if something has changed updateWindowTitle(); } else if (event->getID() == eUpdated) { PatternEditorControl* patternEditorControl = reinterpret_cast(sender); PatternEditor* patternEditor = patternEditorControl->getPatternEditor(); pp_int32 numRows = patternEditor->getNumRows(); pp_int32 row = patternEditorControl->getCurrentRow(); bool isPlaying = playerController->isPlaying() && !playerController->isPlayingRowOnly(); switch (reinterpret_cast(sender)->getID()) { // The pattern editor sends PPEvent::eUpated when the cursor has been moved // It can either be moved out of the current pattern or within the pattern // Depending on what the user data says case PATTERN_EDITOR: { switch (*(pp_int32*)event->getDataPtr()) { case PatternEditorControl::AdvanceCodeJustUpdate: updatePatternLength(); updatePatternAddAndOctave(); break; // End of pattern has been wrapped with cursor down case PatternEditorControl::AdvanceCodeCursorDownWrappedEnd: { bool b = isEditingCurrentOrderlistPattern() && listBoxOrderList->isLastEntry(); // When we're playing and we're not playing a pattern // OR when we're not playing and NOT wrapping cursor around // => select next order from orderlist if ((isPlaying && !playerController->isReallyPlayingPattern()) || (playerController->isPlaying() && playerController->isPlayingPattern() && playerLogic->rowPlay) || (!isPlaying && !patternEditorControl->getWrapAround())) { // we're editing the pattern from the current selected order and this is not the last order list entry // advance to the next order in the list if (!b) { screen->pauseUpdate(true); selectNextOrder(); screen->pauseUpdate(false); } } // Calculate new position within pattern and update player position ASSERT(row > 0); // when we're in wraparound mode and we're not in the last // pattern & row of the last order, wrap around cursor in current pattern if (!b || patternEditorControl->getWrapAround()) patternEditorControl->setRow(myMod(row - numRows, patternEditor->getNumRows()), false); else patternEditorControl->setRow(numRows-1, false); updateSongLength(true); updatePatternIndex(true); updatePatternLength(true); updateSongRow(); return 1; } // Start of pattern has been wrapped with cursor up case PatternEditorControl::AdvanceCodeCursorUpWrappedStart: { bool b = isEditingCurrentOrderlistPattern() && listBoxOrderList->isFirstEntry(); // When we're playing and we're not playing a pattern // OR when we're not playing and NOT wrapping cursor around // => select previous order from orderlist if ((isPlaying && !playerController->isReallyPlayingPattern()) || (playerController->isPlaying() && playerController->isPlayingPattern() && playerLogic->rowPlay) || (!isPlaying && !patternEditorControl->getWrapAround())) { // we're editing the pattern from the current selected order and this is not the last order list entry // advance to the previous order in the list if (!b) { screen->pauseUpdate(true); selectPreviousOrder(); screen->pauseUpdate(false); } } // Calculate new position within pattern and update player position ASSERT(row < 0); // when we're in wraparound mode and we're not in the last // pattern & row of the last order, wrap around cursor in current pattern if (!b || patternEditorControl->getWrapAround()) patternEditorControl->setRow(myMod(patternEditor->getNumRows() + row, patternEditor->getNumRows()), false); else patternEditorControl->setRow(0, false); updateSongLength(true); updatePatternIndex(true); updatePatternLength(true); updateSongRow(); return 1; } // End of pattern has been wrapped with page down key case PatternEditorControl::AdvanceCodeCursorPageDownWrappedEnd: // Not playing? Do nothing at all if (!playerController->isPlaying()/* && !patternEditor->getWrapAround()*/) return 0; // Last entry in orderlist? Do nothing at all //if (listBoxOrderList->isLastEntry()) // return 0; // Not playing pattern? Select new order if (!playerController->isReallyPlayingPattern()) { screen->pauseUpdate(true); selectNextOrder(true); screen->pauseUpdate(false); } // Calculate new position within pattern and update player position ASSERT(row > 0); patternEditorControl->setRow(myMod(row - numRows, patternEditor->getNumRows()), false); updateSongLength(true); updatePatternIndex(true); updatePatternLength(true); updateSongRow(); return 1; // Start of pattern has been wrapped with page up key case PatternEditorControl::AdvanceCodeCursorPageUpWrappedStart: // Not playing? Do nothing at all if (!playerController->isPlaying()/* && !patternEditor->getWrapAround()*/) return 0; // Last entry in orderlist? Do nothing at all //if (listBoxOrderList->isFirstEntry()) // return 0; // Not playing pattern? Select previous order if (!playerController->isReallyPlayingPattern()) { screen->pauseUpdate(true); selectPreviousOrder(true); screen->pauseUpdate(false); } // Calculate new position within pattern and update player position ASSERT(row < 0); patternEditorControl->setRow(myMod(patternEditor->getNumRows() + row, patternEditor->getNumRows()), false); updateSongLength(true); updatePatternIndex(true); updatePatternLength(true); updateSongRow(); return 1; // End of pattern has been wrapped with page down key case PatternEditorControl::AdvanceCodeWrappedEnd: if (!patternEditorControl->getWrapAround() && !listBoxOrderList->isLastEntry()) { screen->pauseUpdate(true); selectNextOrder(true); screen->pauseUpdate(false); patternEditorControl->setRow(myMod(row - numRows, patternEditor->getNumRows()), false); } // if we are in the last order of the order list and in the last row of this order don't advance to the next pattern else if (!patternEditorControl->getWrapAround() && listBoxOrderList->isLastEntry()) { patternEditorControl->setRow(numRows - 1, false); } else { // Calculate new position within pattern and update player position ASSERT(row > 0); patternEditorControl->setRow(myMod(row - numRows, patternEditor->getNumRows()), false); } updateSongLength(true); updatePatternIndex(true); updatePatternLength(true); updateSongRow(); return 1; // Not wrapped at all... Just calculate new position within pattern and update player position case PatternEditorControl::AdvanceCodeSelectNewRow: if (shouldFollowSong() && isEditingCurrentOrderlistPattern()) updateSongRow(); break; } break; } } } // frontend layer sends PPEvent::eFullScreen when the APP is going fullscreen else if (event->getID() == eFullScreen) { TrackerSettingsDatabase* settingsDatabaseCopySecond = new TrackerSettingsDatabase(*settingsDatabase); if (settingsDatabaseCopy) settingsDatabaseCopy->store("FULLSCREEN", !screen->isFullScreen()); settingsDatabaseCopySecond->store("FULLSCREEN", !screen->isFullScreen()); applySettings(settingsDatabaseCopySecond, settingsDatabase); delete settingsDatabase; settingsDatabase = settingsDatabaseCopySecond; sectionSettings->update(); } return 0; } /////////////////////////////////////////////////////////////////////////////// // remember: // user buttons below ID PP_MESSAGEBOX_BUTTON_USER10 // are not allowed to send repeatable pressed down events /////////////////////////////////////////////////////////////////////////////// bool Tracker::swapAndCopyHandler(pp_int32 messageBoxID, pp_int32 messageBoxButtonID) { PPContainer* container = static_cast(screen->getModalControl()); PPListBox* listBoxSrc = static_cast(container->getControlByID(INSTRUMENT_CHOOSER_LIST_SRC)); PPListBox* listBoxSrcModule = static_cast(container->getControlByID(INSTRUMENT_CHOOSER_LIST_SRC3)); PPListBox* listBoxDst = static_cast(container->getControlByID(INSTRUMENT_CHOOSER_LIST_DST)); PPListBox* listBoxDstModule = static_cast(container->getControlByID(INSTRUMENT_CHOOSER_LIST_DST3)); ModuleEditor* src = listBoxSrcModule ? tabManager->getModuleEditorFromTabIndex(listBoxSrcModule->getSelectedIndex()) : this->moduleEditor; ModuleEditor* dst = listBoxDstModule ? tabManager->getModuleEditorFromTabIndex(listBoxDstModule->getSelectedIndex()) : this->moduleEditor; switch (messageBoxButtonID) { case PP_MESSAGEBOX_BUTTON_USER1: case PP_MESSAGEBOX_BUTTON_USER3: { switch (messageBoxID) { case INSTRUMENT_CHOOSER_COPY: this->moduleEditor->copyInstrument(*dst, listBoxDst->getSelectedIndex(), *src, listBoxSrc->getSelectedIndex()); break; case INSTRUMENT_CHOOSER_SWAP: this->moduleEditor->swapInstruments(*dst, listBoxDst->getSelectedIndex(), *src, listBoxSrc->getSelectedIndex()); break; default: ASSERT(false); } if (messageBoxButtonID == PP_MESSAGEBOX_BUTTON_USER3) { pp_int32 index = listBoxDst->getSelectedIndex()+1; listBoxDst->setSelectedIndex(index, false, true); index = listBoxSrc->getSelectedIndex()+1; listBoxSrc->setSelectedIndex(index, false, true); } break; } case PP_MESSAGEBOX_BUTTON_USER2: case PP_MESSAGEBOX_BUTTON_USER4: { PPListBox* listBoxSrcSmp = static_cast(container->getControlByID(INSTRUMENT_CHOOSER_LIST_SRC2)); PPListBox* listBoxDstSmp = static_cast(container->getControlByID(INSTRUMENT_CHOOSER_LIST_DST2)); switch (messageBoxID) { case INSTRUMENT_CHOOSER_COPY: this->moduleEditor->copySample(*dst, listBoxDst->getSelectedIndex(), listBoxDstSmp->getSelectedIndex(), *src, listBoxSrc->getSelectedIndex(), listBoxSrcSmp->getSelectedIndex()); break; case INSTRUMENT_CHOOSER_SWAP: this->moduleEditor->swapSamples(*dst, listBoxDst->getSelectedIndex(), listBoxDstSmp->getSelectedIndex(), *src, listBoxSrc->getSelectedIndex(), listBoxSrcSmp->getSelectedIndex()); break; default: ASSERT(false); } if (messageBoxButtonID == PP_MESSAGEBOX_BUTTON_USER4) { pp_int32 index = listBoxDstSmp->getSelectedIndex()+1; listBoxDstSmp->setSelectedIndex(index, false, true); index = listBoxSrcSmp->getSelectedIndex()+1; listBoxSrcSmp->setSelectedIndex(index, false, true); } break; } // swap source/destination list boxes case PP_MESSAGEBOX_BUTTON_USER5: { if (listBoxSrcModule == NULL || listBoxDstModule == NULL) return true; PPListBox* listBoxSrcSmp = static_cast(container->getControlByID(INSTRUMENT_CHOOSER_LIST_SRC2)); PPListBox* listBoxDstSmp = static_cast(container->getControlByID(INSTRUMENT_CHOOSER_LIST_DST2)); pp_int32 srcModIndex = listBoxSrcModule->getSelectedIndex(); pp_int32 dstModIndex = listBoxDstModule->getSelectedIndex(); pp_int32 srcInsIndex = listBoxSrc->getSelectedIndex(); pp_int32 dstInsIndex = listBoxDst->getSelectedIndex(); pp_int32 srcSmpIndex = listBoxSrcSmp->getSelectedIndex(); pp_int32 dstSmpIndex = listBoxDstSmp->getSelectedIndex(); listBoxSrcModule->setSelectedIndex(dstModIndex, false); listBoxDstModule->setSelectedIndex(srcModIndex, false); updateInstrumentChooser(false); listBoxSrc->setSelectedIndex(dstInsIndex, false); listBoxDst->setSelectedIndex(srcInsIndex, false); listBoxSrcSmp->setSelectedIndex(dstSmpIndex, false); listBoxDstSmp->setSelectedIndex(srcSmpIndex, false); updateInstrumentChooser(true); screen->paint(); return true; } // one more instrument in the source module case PP_MESSAGEBOX_BUTTON_USER10: { src->allocateInstrument(); break; } // delete one instrument in the source module case PP_MESSAGEBOX_BUTTON_USER11: { src->freeInstrument(); break; } // one more instrument in the destination module case PP_MESSAGEBOX_BUTTON_USER12: { dst->allocateInstrument(); break; } // delete one instrument in the destination module case PP_MESSAGEBOX_BUTTON_USER13: { dst->freeInstrument(); break; } case PP_MESSAGEBOX_BUTTON_USER6: { // play source SamplePlayer samplePlayer(*src, *playerController); PPListBox* listBoxSrcSmp = static_cast(container->getControlByID(INSTRUMENT_CHOOSER_LIST_SRC2)); samplePlayer.playSample(listBoxSrc->getSelectedIndex(), listBoxSrcSmp->getSelectedIndex(), sectionSamples->getCurrentSamplePlayNote()); return true; } case PP_MESSAGEBOX_BUTTON_USER7: { // play dest SamplePlayer samplePlayer(*dst, *playerController); PPListBox* listBoxDstSmp = static_cast(container->getControlByID(INSTRUMENT_CHOOSER_LIST_DST2)); samplePlayer.playSample(listBoxDst->getSelectedIndex(), listBoxDstSmp->getSelectedIndex(), sectionSamples->getCurrentSamplePlayNote()); return true; } default: return false; } updateInstrumentChooser(false); if (listBoxInstruments->getSelectedIndex() == listBoxDst->getSelectedIndex() && dst == this->moduleEditor) { updateInstrumentsListBox(false); sectionInstruments->resetEnvelopeEditor(); sectionSamples->resetSampleEditor(); } PPButton* button = static_cast(container->getControlByID(PP_MESSAGEBOX_BUTTON_CANCEL)); button->setText("Done"); sectionSamples->updateAfterLoad(); screen->paint(); return true; } void Tracker::handleQuit() { if (sectionSettings->isVisible()) sectionSettings->cancelSettings(); screen->shutDown(); } bool Tracker::messageBoxEventListener(pp_int32 messageBoxID, pp_int32 messageBoxButtonID) { switch (messageBoxID) { case MESSAGEBOX_REALLYQUIT: { if (messageBoxButtonID == PP_MESSAGEBOX_BUTTON_YES) { handleQuit(); } break; } case INSTRUMENT_CHOOSER_COPY: case INSTRUMENT_CHOOSER_SWAP: { if (swapAndCopyHandler(messageBoxID, messageBoxButtonID)) return false; break; } case MESSAGEBOX_INSREMAP: { switch (messageBoxButtonID) { case PP_MESSAGEBOX_BUTTON_USER1: case PP_MESSAGEBOX_BUTTON_USER2: case PP_MESSAGEBOX_BUTTON_USER3: case PP_MESSAGEBOX_BUTTON_USER4: { PPContainer* container = static_cast(screen->getModalControl()); PPListBox* listBoxSrc = static_cast(container->getControlByID(INSTRUMENT_CHOOSER_LIST_SRC)); PPListBox* listBoxDst = static_cast(container->getControlByID(INSTRUMENT_CHOOSER_LIST_DST)); pp_int32 newIns = listBoxDst->getSelectedIndex()+1; pp_int32 oldIns = listBoxSrc->getSelectedIndex()+1; pp_int32 res = 0; switch (messageBoxButtonID) { case PP_MESSAGEBOX_BUTTON_USER1: res = getPatternEditor()->insRemapTrack(oldIns, newIns); break; case PP_MESSAGEBOX_BUTTON_USER2: res = getPatternEditor()->insRemapPattern(oldIns, newIns); break; case PP_MESSAGEBOX_BUTTON_USER3: res = moduleEditor->insRemapSong(oldIns, newIns); break; case PP_MESSAGEBOX_BUTTON_USER4: res = getPatternEditor()->insRemapSelection(oldIns, newIns); break; } char buffer[100]; sprintf(buffer, "%i Instruments have been remapped", res); showMessageBox(MESSAGEBOX_UNIVERSAL, buffer, MessageBox_OK); screen->paint(); return false; } } break; } } return true; } /////////////////////////////////////////////////////////// // check if editing of any textfield is currently // performed, if so we are not allowed to play instruments /////////////////////////////////////////////////////////// bool Tracker::isActiveEditing() { // check for focus of song title edit field PPContainer* container = static_cast(screen->getControlByID(CONTAINER_ABOUT)); PPListBox* listBox = static_cast(container->getControlByID(LISTBOX_SONGTITLE)); if (screen->hasFocus(container) && listBox->isEditing()) return true; container = static_cast(screen->getControlByID(CONTAINER_INSTRUMENTLIST)); listBox = listBoxInstruments; if (screen->hasFocus(container) && listBox->isEditing()) return true; container = static_cast(screen->getControlByID(CONTAINER_INSTRUMENTLIST)); listBox = listBoxSamples; if (screen->hasFocus(container) && listBox->isEditing()) return true; if (sectionDiskMenu->isActiveEditing()) return true; return false; } void Tracker::ensureSongStopped(bool bResetMainVolume, bool suspend) { updatePianoControl(sectionInstruments->getPianoControl()); #ifdef __LOWRES__ { PianoControl* pianoControl = static_cast(inputContainerCurrent->getControlByID(PIANO_CONTROL)); updatePianoControl(pianoControl); } #endif playerLogic->ensureSongStopped(bResetMainVolume, suspend); } void Tracker::ensureSongPlaying(bool continuePlaying) { playerLogic->ensureSongPlaying(continuePlaying); } void Tracker::initPlayback() { resetStateMemories(); playerController->resetPlayTimeCounter(); recorderLogic->init(); } void Tracker::setChanged() { moduleEditor->setChanged(); updateWindowTitle(); } bool Tracker::shouldFollowSong() { if (playerController->getNextOrderToPlay() != -1 || playerController->getNextPatternToPlay() != -1) return false; return getFollowSong(); } bool Tracker::getFollowSong() { return followSong; } void Tracker::setFollowSong(bool b, bool repaint/* = true*/) { followSong = b; updateAboutToggleButton(BUTTON_ABOUT_FOLLOWSONG, b, repaint); } bool Tracker::getProspectiveMode() { return getPatternEditorControl()->getProspective(); } void Tracker::setProspectiveMode(bool b, bool repaint/* = true*/) { getPatternEditorControl()->setProspective(b); updateAboutToggleButton(BUTTON_ABOUT_PROSPECTIVE, b, repaint); } bool Tracker::getCursorWrapAround() { return getPatternEditorControl()->getWrapAround(); } void Tracker::setCursorWrapAround(bool b, bool repaint/* = true*/) { getPatternEditorControl()->setWrapAround(b); updateAboutToggleButton(BUTTON_ABOUT_WRAPCURSOR, b, repaint); } void Tracker::setLiveSwitch(bool b, bool repaint/* = true*/) { playerLogic->setLiveSwitch(b); updateAboutToggleButton(BUTTON_ABOUT_LIVESWITCH, b, repaint); } void Tracker::updateSongRow(bool checkFollowSong/* = true*/) { if (checkFollowSong && !shouldFollowSong()) return; mp_sint32 row = getPatternEditorControl()->getCurrentRow(); mp_sint32 pos = listBoxOrderList->getSelectedIndex(); playerController->setPatternPos(pos, row); } void Tracker::selectInstrument(pp_int32 instrument) { // instrument index starts at 0 in the module editor // but from 1 everywhere else moduleEditor->setCurrentInstrumentIndex(instrument-1); getPatternEditorControl()->setCurrentInstrument(instrument); sectionTranspose->setCurrentInstrument(instrument, false); updateSamplesListBox(false); // update instrument/sample editor // important: sample editor first => will reload sample into sample editor updateSampleEditor(false); // update instrument/sample editor sectionInstruments->update(false); for (pp_int32 i = 0; i < sections->size(); i++) sections->get(i)->notifyInstrumentSelect(instrument); } void Tracker::fillInstrumentListBox(PPListBox* listBox, ModuleEditor* moduleEditor/* = NULL*/) { if (moduleEditor == NULL) moduleEditor = this->moduleEditor; char name[MP_MAXTEXT]; for (pp_int32 j = 0; j < moduleEditor->getNumInstruments(); j++) { memset(name, 0, sizeof(name)); moduleEditor->getInstrumentName(j, name, ModuleEditor::MAX_INSTEXT); listBox->addItem(name); } } void Tracker::fillSampleListBox(PPListBox* listBox, pp_int32 insIndex, ModuleEditor* moduleEditor/* = NULL*/) { if (moduleEditor == NULL) moduleEditor = this->moduleEditor; for (pp_int32 j = 0; j < moduleEditor->getNumSamples(insIndex); j++) { char name[MP_MAXTEXT]; moduleEditor->getSampleName(insIndex, j, name, ModuleEditor::MAX_SMPTEXT); listBox->addItem(name); } } void Tracker::fillModuleListBox(PPListBox* listBox) { #ifndef __LOWRES__ TabHeaderControl* tabHeader = static_cast(screen->getControlByID(TABHEADER_CONTROL)); for (pp_int32 i = 0; i < (signed)tabHeader->getNumTabs(); i++) { TabTitleProvider tabTitleProvider(*tabManager->getModuleEditorFromTabIndex(i)); listBox->addItem(tabTitleProvider.getTabTitle()); } #endif } void Tracker::rearrangePatternEditorControl() { #ifdef __LOWRES__ PatternEditorControl* control = getPatternEditorControl(); if (control) { PPPoint location = control->getLocation(); pp_int32 height = inputContainerCurrent->getLocation().y; control->setSize(PPSize(screen->getWidth(), height - location.y)); if (inputContainerCurrent) inputContainerCurrent->show(true); } #endif } void Tracker::rearrangePatternEditorControlOrInstrumentContainer() { if (sectionDiskMenu->isDiskMenuVisible()) sectionDiskMenu->resizeInstrumentContainer(); else rearrangePatternEditorControl(); } void Tracker::showScopes(bool visible, pp_uint32 style) { if (!scopesControl) return; scopesControl->setAppearance((ScopesControl::AppearanceTypes)style); #ifndef __LOWRES__ if (visible && scopesControl->isVisible()) return; if (!visible && !scopesControl->isVisible()) return; PPSize size = getPatternEditorControl()->getSize(); PPPoint location = getPatternEditorControl()->getLocation(); if (visible) { scopesControl->hide(false); size.height -= scopesControl->getSize().height; location.y += scopesControl->getSize().height; getPatternEditorControl()->setSize(size); getPatternEditorControl()->setLocation(location); } else { scopesControl->hide(true); size.height += scopesControl->getSize().height; location.y -= scopesControl->getSize().height; getPatternEditorControl()->setSize(size); getPatternEditorControl()->setLocation(location); } // store settings settingsDatabase->store("SCOPES", (visible ? 1 : 0) | (style << 1)); // if config menu is visible, update the toggles if (sectionSettings->isVisible()) sectionSettings->update(false); #endif screen->paint(); } void Tracker::setInputControl(SIPs sip) { switch (sip) { case SIPDefault: { inputContainerCurrent = inputContainerDefault; inputContainerExtended->hide(true); inputContainerCurrent->hide(false); break; } case SIPExtended: { inputContainerCurrent = inputContainerExtended; inputContainerDefault->hide(true); inputContainerCurrent->hide(false); break; } } rearrangePatternEditorControlOrInstrumentContainer(); screen->update(); } void Tracker::expandOrderlist(bool b) { extendedOrderlist = b; PPContainer* container = static_cast(screen->getControlByID(CONTAINER_ORDERLIST)); PPPoint p = container->getLocation(); pp_int32 x = p.x; pp_int32 y = p.y; ASSERT(container); if (b) { container->getControlByID(BUTTON_ORDERLIST_SONGLENGTH_PLUS)->setLocation(PPPoint(x+2 + 78-2, y+2+12+12+12)); container->getControlByID(BUTTON_ORDERLIST_SONGLENGTH_MINUS)->setLocation(PPPoint(x+2 + 78-2 + 17, y+2+12+12+12)); container->getControlByID(BUTTON_ORDERLIST_REPEAT_PLUS)->hide(true); container->getControlByID(BUTTON_ORDERLIST_REPEAT_MINUS)->hide(true); container->getControlByID(STATICTEXT_ORDERLIST_SONGLENGTH)->setLocation(PPPoint(x+ 8*12, y+2+12+12+12+2+12)); container->getControlByID(STATICTEXT_ORDERLIST_REPEAT)->hide(true); container->getControlByID(0)->hide(true); container->getControlByID(1)->hide(false); container->getControlByID(2)->hide(true); static_cast(container->getControlByID(BUTTON_ORDERLIST_EXTENT))->setText(TrackerConfig::stringButtonExtended); PPSize size = container->getControlByID(LISTBOX_ORDERLIST)->getSize(); size.height = 60; container->getControlByID(LISTBOX_ORDERLIST)->setSize(size); } else { container->getControlByID(BUTTON_ORDERLIST_SONGLENGTH_PLUS)->setLocation(PPPoint(x+2 + 78-2, y+2+12+12+12)); container->getControlByID(BUTTON_ORDERLIST_SONGLENGTH_MINUS)->setLocation(PPPoint(x+2 + 78-2 + 17, y+2+12+12+12)); container->getControlByID(BUTTON_ORDERLIST_REPEAT_PLUS)->hide(false); container->getControlByID(BUTTON_ORDERLIST_REPEAT_MINUS)->hide(false); container->getControlByID(STATICTEXT_ORDERLIST_SONGLENGTH)->setLocation(PPPoint(x+2 + 8*7, y+2+12+12+12+2)); container->getControlByID(STATICTEXT_ORDERLIST_REPEAT)->hide(false); container->getControlByID(0)->hide(false); container->getControlByID(1)->hide(true); container->getControlByID(2)->hide(false); static_cast(container->getControlByID(BUTTON_ORDERLIST_EXTENT))->setText(TrackerConfig::stringButtonCollapsed); PPSize size = container->getControlByID(LISTBOX_ORDERLIST)->getSize(); size.height = 36; container->getControlByID(LISTBOX_ORDERLIST)->setSize(size); } } void Tracker::flipSpeedSection() { PPContainer* container = static_cast(screen->getControlByID(CONTAINER_SPEED)); ASSERT(container); PPControl* control = container->getControlByID(STATICTEXT_SPEED_OCTAVE); ASSERT(control); pp_int32 dy = container->getControlByID(STATICTEXT_SPEED_SPEED)->getLocation().y - container->getControlByID(STATICTEXT_SPEED_BPM)->getLocation().y; if (control->isHidden()) { // Show octave integer field control->hide(false); // Show octave description text ("Oct") control = container->getControlByID(STATICTEXT_SPEED_OCTAVE_DESC); control->hide(false); // Show octave minus button control = container->getControlByID(BUTTON_OCTAVE_MINUS); control->hide(false); // Show octave plus button control = container->getControlByID(BUTTON_OCTAVE_PLUS); control->hide(false); // show mainvol text control = container->getControlByID(STATICTEXT_SPEED_MAINVOL); control->hide(false); // show mainvol description text ("Mainvol") control = container->getControlByID(STATICTEXT_SPEED_MAINVOL_DESC); control->hide(false); // hide BPM text fields + buttons control = container->getControlByID(STATICTEXT_SPEED_BPM); control->hide(true); control = container->getControlByID(STATICTEXT_SPEED_BPM_DESC); control->hide(true); control = container->getControlByID(BUTTON_BPM_MINUS); control->hide(true); control = container->getControlByID(BUTTON_BPM_PLUS); control->hide(true); // hide tick speed text fields + buttons control = container->getControlByID(BUTTON_SPEED_MINUS); control->hide(true); control = container->getControlByID(BUTTON_SPEED_PLUS); control->hide(true); control = container->getControlByID(STATICTEXT_SPEED_SPEED); control->hide(true); control = container->getControlByID(STATICTEXT_SPEED_SPEED_DESC); control->hide(true); // Move pattern add text fields + buttons one row upwards control = container->getControlByID(STATICTEXT_SPEED_PATTERNADD); PPPoint p = control->getLocation(); p.y-=dy; control->setLocation(p); control = container->getControlByID(STATICTEXT_SPEED_PATTERNADD_DESC); p = control->getLocation(); p.y-=dy; control->setLocation(p); control = container->getControlByID(BUTTON_ADD_PLUS); p = control->getLocation(); p.y-=dy; control->setLocation(p); control = container->getControlByID(BUTTON_ADD_MINUS); p = control->getLocation(); p.y-=dy; control->setLocation(p); } else { // The hide octave texts + buttons control->hide(true); control = container->getControlByID(STATICTEXT_SPEED_OCTAVE_DESC); control->hide(true); control = container->getControlByID(BUTTON_OCTAVE_MINUS); control->hide(true); control = container->getControlByID(BUTTON_OCTAVE_PLUS); control->hide(true); // hide mainvol text control = container->getControlByID(STATICTEXT_SPEED_MAINVOL); control->hide(true); control = container->getControlByID(STATICTEXT_SPEED_MAINVOL_DESC); control->hide(true); // show bpm text + buttons control = container->getControlByID(STATICTEXT_SPEED_BPM); control->hide(false); control = container->getControlByID(STATICTEXT_SPEED_BPM_DESC); control->hide(false); control = container->getControlByID(BUTTON_BPM_MINUS); control->hide(false); control = container->getControlByID(BUTTON_BPM_PLUS); control->hide(false); // show tick speed text + buttons control = container->getControlByID(BUTTON_SPEED_MINUS); control->hide(false); control = container->getControlByID(BUTTON_SPEED_PLUS); control->hide(false); control = container->getControlByID(STATICTEXT_SPEED_SPEED); control->hide(false); control = container->getControlByID(STATICTEXT_SPEED_SPEED_DESC); control->hide(false); // move pattern add text one row downwards control = container->getControlByID(STATICTEXT_SPEED_PATTERNADD); PPPoint p = control->getLocation(); p.y+=dy; control->setLocation(p); control = container->getControlByID(STATICTEXT_SPEED_PATTERNADD_DESC); p = control->getLocation(); p.y+=dy; control->setLocation(p); control = container->getControlByID(BUTTON_ADD_PLUS); p = control->getLocation(); p.y+=dy; control->setLocation(p); control = container->getControlByID(BUTTON_ADD_MINUS); p = control->getLocation(); p.y+=dy; control->setLocation(p); } } void Tracker::enableInstrument(bool b) { getPatternEditorControl()->enableInstrument(b); PPContainer* container = static_cast(screen->getControlByID(CONTAINER_INSTRUMENTLIST)); ASSERT(container); PPButton* button = static_cast(container->getControlByID(BUTTON_INSTRUMENT)); ASSERT(button); button->setPressed(b); listBoxInstruments->setOnlyShowIndexSelection(!b); screen->paintControl(listBoxInstruments); screen->paintControl(button); } void Tracker::commitListBoxChanges() { if (listBoxInstruments->isEditing()) listBoxInstruments->commitChanges(); if (listBoxSamples->isEditing()) listBoxSamples->commitChanges(); } FileTypes Tracker::getCurrentSelectedSampleSaveType() { return (FileTypes)sectionDiskMenu->getCurrentSelectedSampleSaveType(); } pp_uint32 Tracker::fileTypeToHint(FileTypes type) { switch (type) { case FileTypes::FileTypeSongAllModules: case FileTypes::FileTypeSongMOD: case FileTypes::FileTypeSongXM: return DecompressorBase::HintModules; case FileTypes::FileTypePatternXP: return DecompressorBase::HintPatterns; case FileTypes::FileTypeTrackXT: return DecompressorBase::HintTracks; case FileTypes::FileTypeSongAllInstruments: case FileTypes::FileTypeInstrumentXI: return DecompressorBase::HintInstruments; case FileTypes::FileTypeSongAllSamples: case FileTypes::FileTypeSampleWAV: case FileTypes::FileTypeSampleIFF: return DecompressorBase::HintSamples; default: return DecompressorBase::HintAll; } } void Tracker::prepareLoadSaveUI() { #ifdef __LOWRES__ // The bottom section fills up the entire screen // so we first need to hide the entire section before we can show the disk menu screen->pauseUpdate(true); sectionSwitcher->hideBottomSection(); #endif } void Tracker::finishLoadSaveUI() { #ifdef __LOWRES__ screen->pauseUpdate(false); screen->paint(); #endif } bool Tracker::loadGenericFileType(const PPSystemString& fileName) { // we need to find out what file type this is // so we can do appropriate loading FileIdentificator* fileIdentificator = new FileIdentificator(fileName); FileIdentificator::FileTypes type = fileIdentificator->getFileType(); delete fileIdentificator; // check for compression if (type == FileIdentificator::FileTypeCompressed) { // if this is compressed, we try to uncompress it // and choose that file type PPSystemString tempFile(ModuleEditor::getTempFilename()); Decompressor decompressor(fileName); if (decompressor.decompress(tempFile, (DecompressorBase::Hints)fileTypeToHint(FileTypes::FileTypeAllFiles))) { fileIdentificator = new FileIdentificator(tempFile); type = fileIdentificator->getFileType(); delete fileIdentificator; Decompressor::removeFile(tempFile); } else { showMessageBox(MESSAGEBOX_UNIVERSAL, "Unrecognized type/corrupt file", MessageBox_OK); return false; } } switch (type) { case FileIdentificator::FileTypeModule: return loadTypeFromFile(FileTypes::FileTypeSongAllModules, fileName); case FileIdentificator::FileTypeInstrument: return loadTypeFromFile(FileTypes::FileTypeSongAllInstruments, fileName); case FileIdentificator::FileTypeSample: return loadTypeFromFile(FileTypes::FileTypeSongAllSamples, fileName); case FileIdentificator::FileTypePattern: return loadTypeFromFile(FileTypes::FileTypePatternXP, fileName); case FileIdentificator::FileTypeTrack: return loadTypeFromFile(FileTypes::FileTypeTrackXT, fileName); default: return false; } } bool Tracker::prepareLoading(FileTypes eType, const PPSystemString& fileName, bool suspendPlayer, bool repaint, bool saveCheck) { loadingParameters.deleteFile = false; loadingParameters.didOpenTab = false; loadingParameters.eType = eType; loadingParameters.filename = fileName; loadingParameters.preferredFilename = fileName; loadingParameters.suspendPlayer = suspendPlayer; loadingParameters.repaint = repaint; loadingParameters.res = true; if (saveCheck && eType == FileTypes::FileTypeSongAllModules && !checkForChangesOpenModule()) return false; loadingParameters.lastError = "Error while loading/unknown format"; signalWaitState(true); if (eType == FileTypes::FileTypeSongAllModules && settingsDatabase->restore("TABS_LOADMODULEINNEWTAB")->getBoolValue() && (moduleEditor->hasChanged() || !moduleEditor->isEmpty())) { loadingParameters.didOpenTab = true; tabManager->openNewTab(); } bool rowPlay = playerController->isPlayingRowOnly(); loadingParameters.wasPlaying = rowPlay ? false : (playerController->isPlaying() || playerController->isPlayingPattern()); loadingParameters.wasPlayingPattern = rowPlay ? false : playerController->isPlayingPattern(); if (loadingParameters.suspendPlayer) { #ifndef __LOWRES__ scopesControl->enable(false); #endif playerController->suspendPlayer(); } // check for compressed file type FileIdentificator* fileIdentificator = new FileIdentificator(fileName); FileIdentificator::FileTypes type = fileIdentificator->getFileType(); delete fileIdentificator; if (type == FileIdentificator::FileTypeCompressed) { // if this is compressed, try to decompress PPSystemString tempFile(ModuleEditor::getTempFilename()); Decompressor decompressor(fileName); if (decompressor.decompress(tempFile, (DecompressorBase::Hints)fileTypeToHint(eType))) { // we compressed to a temporary file // load that instead, but keep the original file name as preferred // base name for the module we're going to edit loadingParameters.preferredFilename = loadingParameters.filename; loadingParameters.filename = tempFile; // delete file after loading, it's temporary loadingParameters.deleteFile = true; } else { loadingParameters.lastError = "Unrecognized type/corrupt file"; loadingParameters.res = false; finishLoading(); return false; } } return true; } bool Tracker::finishLoading() { signalWaitState(false); if (loadingParameters.repaint) { screen->paint(); updateWindowTitle(moduleEditor->getModuleFileName()); } if (!loadingParameters.res && !loadingParameters.abortLoading) showMessageBox(MESSAGEBOX_UNIVERSAL, loadingParameters.lastError, MessageBox_OK); if (loadingParameters.suspendPlayer) { playerController->resumePlayer(true); scopesControl->enable(true); } if (loadingParameters.deleteFile) Decompressor::removeFile(loadingParameters.filename); if (!loadingParameters.res && loadingParameters.didOpenTab) tabManager->closeTab(); return loadingParameters.abortLoading ? true : loadingParameters.res; } bool Tracker::loadTypeFromFile(FileTypes eType, const PPSystemString& fileName, bool suspendPlayer/* = true*/, bool repaint/* = true*/, bool saveCheck/* = true*/) { bool res = prepareLoading(eType, fileName, suspendPlayer, repaint, saveCheck); if (!res) return false; switch (eType) { case FileTypes::FileTypeSongAllModules: { if (loadingParameters.preferredFilename.length()) loadingParameters.res = moduleEditor->openSong(loadingParameters.filename, loadingParameters.preferredFilename); else loadingParameters.res = moduleEditor->openSong(loadingParameters.filename, NULL); updateAfterLoad(loadingParameters.res, loadingParameters.wasPlaying, loadingParameters.wasPlayingPattern); break; } case FileTypes::FileTypePatternXP: { loadingParameters.res = getPatternEditor()->loadExtendedPattern(loadingParameters.filename); updateSongInfo(); break; } case FileTypes::FileTypeTrackXT: { loadingParameters.res = getPatternEditor()->loadExtendedTrack(loadingParameters.filename); updateSongInfo(); break; } case FileTypes::FileTypeSongAllInstruments: { loadingParameters.res = moduleEditor->loadInstrument(loadingParameters.filename, listBoxInstruments->getSelectedIndex()); sectionInstruments->updateAfterLoad(); break; } case FileTypes::FileTypeSongAllSamples: { pp_int32 numSampleChannels = moduleEditor->getNumSampleChannels(loadingParameters.filename); pp_int32 chnIndex = 0; if (numSampleChannels <= 0) { loadingParameters.res = false; break; } else if (numSampleChannels > 1 && !settingsDatabase->restore("AUTOMIXDOWNSAMPLES")->getIntValue()) { if (dialog) delete dialog; if (responder) delete responder; responder = new SampleLoadChannelSelectionHandler(*this); dialog = new DialogChannelSelector(screen, responder, PP_DEFAULT_ID, "Choose channel to load" PPSTR_PERIODS); // Add names of sample channels to instrument box for (pp_int32 i = 0; i < numSampleChannels; i++) static_cast(dialog)->getListBox()->addItem(moduleEditor->getNameOfSampleChannel(loadingParameters.filename, i)); static_cast(responder)->setCurrentFileName(loadingParameters.filename); static_cast(responder)->setPreferredFileName(loadingParameters.preferredFilename); static_cast(responder)->suspendPlayer = suspendPlayer; signalWaitState(false); dialog->show(); return true; } else if (numSampleChannels > 1 && settingsDatabase->restore("AUTOMIXDOWNSAMPLES")->getIntValue()) { chnIndex = -1; } if (loadingParameters.preferredFilename.length()) loadingParameters.res = moduleEditor->loadSample(loadingParameters.filename, listBoxInstruments->getSelectedIndex(), listBoxSamples->getSelectedIndex(), chnIndex, loadingParameters.preferredFilename); else loadingParameters.res = moduleEditor->loadSample(loadingParameters.filename, listBoxInstruments->getSelectedIndex(), listBoxSamples->getSelectedIndex(), chnIndex); sectionSamples->updateAfterLoad(); break; } } return finishLoading(); } // load different things bool Tracker::loadTypeWithDialog(FileTypes eLoadType, bool suspendPlayer/* = true*/, bool repaint/* = true*/) { FileExtProvider fileExtProvider; PPOpenPanel* openPanel = NULL; switch (eLoadType) { case FileTypes::FileTypeSongAllModules: { if (!checkForChangesOpenModule()) return false; openPanel = new PPOpenPanel(screen, "Open Module"); openPanel->addExtensions(fileExtProvider.getModuleExtensions()); break; } case FileTypes::FileTypePatternXP: { openPanel = new PPOpenPanel(screen, "Open Extended Pattern"); openPanel->addExtensions(fileExtProvider.getPatternExtensions()); break; } case FileTypes::FileTypeTrackXT: { openPanel = new PPOpenPanel(screen, "Open Extended Track"); openPanel->addExtensions(fileExtProvider.getTrackExtensions()); break; } case FileTypes::FileTypeSongAllInstruments: { openPanel = new PPOpenPanel(screen, "Open Instrument"); openPanel->addExtensions(fileExtProvider.getInstrumentExtensions()); break; } case FileTypes::FileTypeSongAllSamples: { openPanel = new PPOpenPanel(screen, "Open Sample"); openPanel->addExtensions(fileExtProvider.getSampleExtensions()); break; } } if (!openPanel) return false; bool res = true; if (openPanel->runModal() == PPModalDialog::ReturnCodeOK) { PPSystemString file = openPanel->getFileName(); if (file.length()) { PPSystemString fileName = file; res = loadTypeFromFile(eLoadType, fileName, suspendPlayer, repaint, false); } delete openPanel; } return res; } void Tracker::loadType(FileTypes eType) { if (useClassicBrowser) { prepareLoadSaveUI(); sectionDiskMenu->selectSaveType(eType); eventKeyDownBinding_InvokeSectionDiskMenu(); finishLoadSaveUI(); } else { loadTypeWithDialog(eType); } } bool Tracker::prepareSavingWithDialog(FileTypes eSaveType) { FileExtProvider fileExtProvider; currentSaveFileType = eSaveType; switch (eSaveType) { case FileTypes::FileTypeSongMOD: { savePanel = new PPSavePanel(screen, "Save Protracker Module", moduleEditor->getModuleFileName(ModuleEditor::ModSaveTypeMOD)); savePanel->addExtension(fileExtProvider.getModuleExtension(FileExtProvider::ModuleExtensionMOD), fileExtProvider.getModuleDescription(FileExtProvider::ModuleExtensionMOD)); pp_uint32 err = moduleEditor->getPTIncompatibilityCode(); if (err) { buildMODSaveErrorWarning(err); return false; } break; } case FileTypes::FileTypeSongXM: savePanel = new PPSavePanel(screen, "Save Extended Module", moduleEditor->getModuleFileName(ModuleEditor::ModSaveTypeXM)); savePanel->addExtension(fileExtProvider.getModuleExtension(FileExtProvider::ModuleExtensionXM), fileExtProvider.getModuleDescription(FileExtProvider::ModuleExtensionXM)); break; case FileTypes::FileTypePatternXP: { PPSystemString fileName = moduleEditor->getModuleFileName().stripExtension(); fileName.append(".xp"); savePanel = new PPSavePanel(screen, "Save Extended Pattern", fileName); savePanel->addExtension(fileExtProvider.getPatternExtension(FileExtProvider::PatternExtensionXP), fileExtProvider.getPatternDescription(FileExtProvider::PatternExtensionXP)); break; } case FileTypes::FileTypeTrackXT: { PPSystemString fileName = moduleEditor->getModuleFileName().stripExtension(); fileName.append(".xt"); savePanel = new PPSavePanel(screen, "Save Extended Track", fileName); savePanel->addExtension(fileExtProvider.getTrackExtension(FileExtProvider::TrackExtensionXT), fileExtProvider.getTrackDescription(FileExtProvider::TrackExtensionXT)); break; } case FileTypes::FileTypeInstrumentXI: { PPSystemString sampleFileName = moduleEditor->getInstrumentFileName(listBoxInstruments->getSelectedIndex()); sampleFileName.append(".xi"); savePanel = new PPSavePanel(screen, "Save Instrument", sampleFileName); savePanel->addExtension(fileExtProvider.getInstrumentExtension(FileExtProvider::InstrumentExtensionXI), fileExtProvider.getInstrumentDescription(FileExtProvider::InstrumentExtensionXI)); break; } case FileTypes::FileTypeSampleWAV: { PPSystemString sampleFileName = moduleEditor->getSampleFileName(listBoxInstruments->getSelectedIndex(), listBoxSamples->getSelectedIndex()); sampleFileName.append(".wav"); savePanel = new PPSavePanel(screen, "Save uncompressed WAV",sampleFileName); savePanel->addExtension(fileExtProvider.getSampleExtension(FileExtProvider::SampleExtensionWAV), fileExtProvider.getSampleDescription(FileExtProvider::SampleExtensionWAV)); break; } case FileTypes::FileTypeSampleIFF: { PPSystemString sampleFileName = moduleEditor->getSampleFileName(listBoxInstruments->getSelectedIndex(), listBoxSamples->getSelectedIndex()); sampleFileName.append(".iff"); savePanel = new PPSavePanel(screen, "Save uncompressed IFF",sampleFileName); savePanel->addExtension(fileExtProvider.getSampleExtension(FileExtProvider::SampleExtensionIFF), fileExtProvider.getSampleDescription(FileExtProvider::SampleExtensionIFF)); break; } } return true; } // Save different things bool Tracker::saveTypeWithDialog(FileTypes eSaveType, EventListenerInterface* fileSystemChangedListener/* = NULL*/) { if (savePanel == NULL) { if (!prepareSavingWithDialog(eSaveType)) { this->fileSystemChangedListener = fileSystemChangedListener; return true; } if (!savePanel) return true; } bool res = true; if (savePanel->runModal() == PPModalDialog::ReturnCodeOK) { PPSystemString file = savePanel->getFileName(); if (file.length()) { loadingParameters.lastError = "Error while saving"; signalWaitState(true); switch (eSaveType) { case FileTypes::FileTypeSongMOD: commitListBoxChanges(); res = moduleEditor->saveSong(file, ModuleEditor::ModSaveTypeMOD); break; case FileTypes::FileTypeSongXM: commitListBoxChanges(); res = moduleEditor->saveSong(file, ModuleEditor::ModSaveTypeXM); break; case FileTypes::FileTypeTrackXT: { res = getPatternEditor()->saveExtendedTrack(file); break; } case FileTypes::FileTypePatternXP: { res = getPatternEditor()->saveExtendedPattern(file); break; } case FileTypes::FileTypeInstrumentXI: commitListBoxChanges(); res = moduleEditor->saveInstrument(file, listBoxInstruments->getSelectedIndex()); break; case FileTypes::FileTypeSampleWAV: commitListBoxChanges(); res = moduleEditor->saveSample(file, listBoxInstruments->getSelectedIndex(), listBoxSamples->getSelectedIndex(), ModuleEditor::SampleFormatTypeWAV); break; case FileTypes::FileTypeSampleIFF: commitListBoxChanges(); res = moduleEditor->saveSample(file, listBoxInstruments->getSelectedIndex(), listBoxSamples->getSelectedIndex(), ModuleEditor::SampleFormatTypeIFF); break; } if (res && fileSystemChangedListener) { PPEvent event(eFileSystemChanged); fileSystemChangedListener->handleEvent(reinterpret_cast(this), &event); } signalWaitState(false); screen->paint(); updateWindowTitle(moduleEditor->getModuleFileName()); } } if (!res) showMessageBox(MESSAGEBOX_UNIVERSAL, loadingParameters.lastError, MessageBox_OK); delete savePanel; savePanel = NULL; fileSystemChangedListener = NULL; return res; } bool Tracker::saveCurrentModuleAsSelectedType() { signalWaitState(true); loadingParameters.lastError = "Error while saving.\nFile might be write protected."; pp_int32 res = moduleEditor->saveSong(moduleEditor->getModuleFileNameFull(), moduleEditor->getSaveType()); signalWaitState(false); if (!res) showMessageBoxSized(MESSAGEBOX_UNIVERSAL, loadingParameters.lastError, MessageBox_OK, -1, -1); screen->paint(); if (res) updateWindowTitle(); return res == 0; } void Tracker::saveType(FileTypes eType) { if (useClassicBrowser) { prepareLoadSaveUI(); sectionDiskMenu->selectSaveType(eType); if (eType == FileTypes::FileTypeSongWAV) sectionDiskMenu->setModuleTypeAdjust(false); eventKeyDownBinding_InvokeSectionDiskMenu(); if (eType == FileTypes::FileTypeSongWAV) sectionDiskMenu->setModuleTypeAdjust(true); finishLoadSaveUI(); } else { saveTypeWithDialog(eType); } } void Tracker::save() { if (TrackerConfig::untitledSong.compareTo(moduleEditor->getModuleFileNameFull().stripExtension()) == 0) { saveAs(); } else { if (moduleEditor->getSaveType() == ModuleEditor::ModSaveTypeMOD) { pp_uint32 err = moduleEditor->getPTIncompatibilityCode(); if (err) { // remove save panel // => the handler for the upcoming modal dialog // will note from the absent save panel that saving will be // done to the current document if (savePanel) { delete savePanel; savePanel = NULL; } buildMODSaveErrorWarning((pp_int32)err); return; } } saveCurrentModuleAsSelectedType(); } } void Tracker::saveAs() { switch (moduleEditor->getSaveType()) { case ModuleEditor::ModSaveTypeMOD: saveType(FileTypes::FileTypeSongMOD); break; case ModuleEditor::ModSaveTypeXM: saveType(FileTypes::FileTypeSongXM); break; default: ASSERT(false); } } void Tracker::handleSaveProceed() { // if there is a save panel present we save with file name // selection, otherwise we simply save the current document // in the current format if (savePanel != NULL) saveTypeWithDialog(currentSaveFileType, fileSystemChangedListener); else saveCurrentModuleAsSelectedType(); } void Tracker::handleSaveCancel() { delete savePanel; savePanel = NULL; } void Tracker::buildMODSaveErrorWarning(pp_int32 error) { static const char* warnings[] = {"Song contains more than 31 instruments\nSave anyway?", "Song uses linear frequencies\nSave anyway?", "Song contains incompatible samples \n\n"\ "Check for the following conditions:\n"\ "* No 16 bit samples \n"\ "* All samples are below 64kb \n"\ "* No ping-pong looping \n"\ "* Panning is set to 0x80 (middle) \n"\ "* Relative note is C-4 (number 0) \n\nSave anyway?", "Song contains FT2-style instruments\n\n"\ "Check for the following conditions:\n"\ "* No envelopes \n"\ "* No autovibrato \n"\ "* Only one sample per instrument \n\nSave anyway?", "Incompatible pattern data \n\n"\ "Check for the following conditions:\n"\ "* Pattern length is exactly 64 rows\n"\ "* Only notes between C-3 and B-5 \n"\ "* Volume column is not used \n"\ "* Only effects between 0 and F \n\nSave anyway?"}; if (dialog) delete dialog; if (responder) delete responder; responder = new SaveProceedHandler(*this); dialog = new PPDialogBase(screen, responder, MESSAGEBOX_SAVEPROCEED, ""); showMessageBoxSized(MESSAGEBOX_SAVEPROCEED, warnings[error-1], MessageBox_YESNO, 318, -1, false); // Transfer ownership of modal overlayed container to dialog // => also set new event listener dialog->setMessageBoxContainer(messageBoxContainerGeneric); messageBoxContainerGeneric->setEventListener(dialog); PPSimpleVector& controls = messageBoxContainerGeneric->getControls(); for (pp_int32 i = 0; i < controls.size(); i++) controls.get(i)->setEventListener(dialog); messageBoxContainerGeneric = NULL; dialog->show(); } void Tracker::estimateSongLength(bool signalWait/* = false*/) { if (signalWait) signalWaitState(true); moduleEditor->getModuleServices()->estimateSongLength(); if (signalWait) { signalWaitState(false); screen->update(); } } void Tracker::signalWaitState(bool b) { screen->signalWaitState(b, TrackerConfig::colorThemeMain); } MilkyTracker-1.02.00/src/tracker/Tracker.h000066400000000000000000000452451324432207300202530ustar00rootroot00000000000000/* * tracker/Tracker.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #ifndef TRACKER__H #define TRACKER__H #include "BasicTypes.h" #include "Event.h" #include "EditModes.h" #include "FileTypes.h" #include "XModule.h" #define INPUTCONTAINERHEIGHT_DEFAULT (25+SCROLLBUTTONSIZE+4) #define INPUTCONTAINERHEIGHT_EXTENDED (25+SCROLLBUTTONSIZE+4+13) template class PPSimpleVector; class PPScreen; class ModuleEditor; class PatternEditor; class SampleEditor; class EnvelopeEditor; class PlayerController; class PlayerMaster; class TabManager; class PatternEditorControl; class PPListBox; class PPStaticText; class EnvelopeEditorControl; class PianoControl; class PeakLevelControl; class ScopesControl; class SampleEditorControl; class PPContainer; class PPMessageBoxContainer; class TrackerSettingsDatabase; class PPDictionaryKey; class PPFont; // OS Interfaces class PPSavePanel; class PPOpenPanel; // Section forwards class SectionAbstract; class SectionTranspose; class SectionAdvancedEdit; class SectionDiskMenu; class SectionHDRecorder; class SectionSettings; class SectionInstruments; class SectionSamples; class SectionQuickOptions; class SectionOptimize; class SectionAbout; class PatternEditorControl; class InputControlListener; class PPDialogBase; class DialogResponder; class ToolInvokeHelper; struct TMixerSettings; // Key binding forwards class Tracker; typedef void (Tracker::*TTrackerKeyBindingHandler)(); template class PPKeyBindings; class Tracker : public EventListenerInterface { private: // I've replaced some constants #ifndef __LOWRES__ pp_int32 SCOPESHEIGHT(); pp_int32 CURRENTSCOPESHEIGHT(); pp_int32 UPPERSECTIONDEFAULTHEIGHTWOINS() { return 54+64; } pp_int32 UPPERSECTIONDEFAULTHEIGHT() { return ((UPPERSECTIONDEFAULTHEIGHTWOINS())+(CURRENTSCOPESHEIGHT())); } pp_int32 INSTRUMENTSECTIONDEFAULTHEIGHT() { return 206; } pp_int32 SAMPLESECTIONDEFAULTHEIGHT(); pp_int32 TABHEADERHEIGHT() { return 16; } pp_int32 MAXEDITORHEIGHT(); #else pp_int32 SCOPESHEIGHT() { return 64; } pp_int32 SCOPESWIDTH() { return 320-26; } pp_int32 UPPERSECTIONDEFAULTHEIGHT() { return (64+16); } pp_int32 INSTRUMENTSECTIONDEFAULTHEIGHT() { return 188; } pp_int32 SAMPLESECTIONDEFAULTHEIGHT() { return 184; } pp_int32 NUMSUBMENUS() { return 5; } pp_int32 MAXEDITORHEIGHT(); #endif bool* muteChannels; TabManager* tabManager; PlayerController* playerController; PlayerMaster* playerMaster; ModuleEditor* moduleEditor; class PlayerLogic* playerLogic; class RecorderLogic* recorderLogic; PatternEditorControl* patternEditorControl; PeakLevelControl* peakLevelControl; ScopesControl* scopesControl; PPStaticText* playTimeText; // - Sections -------------------------------------------------------------- class SectionSwitcher* sectionSwitcher; PPSimpleVector* sections; SectionTranspose* sectionTranspose; SectionAdvancedEdit* sectionAdvancedEdit; SectionDiskMenu* sectionDiskMenu; SectionHDRecorder* sectionHDRecorder; SectionSettings* sectionSettings; SectionInstruments* sectionInstruments; SectionSamples* sectionSamples; SectionQuickOptions* sectionQuickOptions; SectionOptimize* sectionOptimize; SectionAbout* sectionAbout; InputControlListener* inputControlListener; DialogResponder* responder; PPDialogBase* dialog; ToolInvokeHelper* toolInvokeHelper; PPScreen* screen; TrackerSettingsDatabase* settingsDatabase; TrackerSettingsDatabase* settingsDatabaseCopy; PPSystemString currentFileName; bool lastState; // - Tracker mode ---------------------------------------------------------- EditModes editMode; // - Misc. settings -------------------------------------------------------- bool extendedOrderlist; bool followSong; bool caughtMouseInUpperLeftCorner; bool useClassicBrowser; // - Keyboard bindings ----------------------------------------------------- PPKeyBindings* eventKeyDownBindings; PPKeyBindings* eventKeyDownBindingsMilkyTracker; PPKeyBindings* eventKeyDownBindingsFastTracker; // - settings -------------------------------------------------------------- void buildDefaultSettings(); void applySettingByKey(PPDictionaryKey* theKey, TMixerSettings& settings, pp_uint32 version); static void getMixerSettingsFromDatabase(TMixerSettings& mixerSettings, TrackerSettingsDatabase& currentSettings); void applySettings(TrackerSettingsDatabase* newSettings, TrackerSettingsDatabase* currentSettings = NULL, bool applyMixerSettings = true, bool allowMixerRestart = true); // - global controls ------------------------------------------------------- PPListBox* listBoxOrderList; PPListBox* listBoxInstruments; PPListBox* listBoxSamples; // - build UI parts -------------------------------------------------------- void initSectionOrderlist(pp_int32 x, pp_int32 y); void initSectionSpeed(pp_int32 x, pp_int32 y); void initSectionPattern(pp_int32 x, pp_int32 y); void initSectionMainOptions(pp_int32 x, pp_int32 y); void initListboxesSection(pp_int32 x, pp_int32 y); // - instrument selector dialog -------------------------------------------- void initAdvEdit(); void initInstrumentChooser(pp_int32 id, const PPString& buttonText, const PPString& buttonText2, const PPString& caption, const PPString& userString1, const PPString& userString2, pp_int32 srcSelection = -1, pp_int32 srcSelection2 = -1, pp_int32 srcSelection3 = -1); void updateInstrumentChooser(bool repaint = true); PPMessageBoxContainer* instrumentChooser; // - message boxes --------------------------------------------------------- PPMessageBoxContainer* messageBoxContainerGeneric; enum MessageBoxTypes { MessageBox_OK, MessageBox_YESNO, MessageBox_YESNOCANCEL }; void showMessageBox(pp_int32 id, const PPString& caption, MessageBoxTypes type, bool update = true); void showMessageBoxSized(pp_int32 id, const PPString& caption, MessageBoxTypes type, pp_int32 width = -1, pp_int32 height = -1, bool update = true); void showQuitMessageBox(const char* caption, const char* cpationOk, const char* captionCancel); // - software input panel -------------------------------------------------- PPContainer* inputContainerCurrent; PPContainer* inputContainerDefault; PPContainer* inputContainerExtended; void initInputContainerDefault(pp_int32 x, pp_int32 y); void initInputContainerExtended(pp_int32 x, pp_int32 y); enum SIPs { SIPDefault, SIPExtended }; void setInputControl(SIPs sip); void moveInputControls(pp_uint32 deltay); void hideInputControl(bool bHide = true); // - GUI refreshing -------------------------------------------------------- void updateAboutToggleButton(pp_int32 id, bool b, bool repaint = true); void updateSongTitle(bool repaint = true); #ifdef __LOWRES__ void updateJamMenuOrder(bool repaint = true); #endif void updateOrderlist(bool repaint = true); void updateSongLength(bool repaint = true); void updateSongRepeat(bool repaint = true); void updateBPM(bool repaint = true); bool updateSpeed(bool repaint = true); void updatePatternAddAndOctave(bool repaint = true); void updatePatternIndex(bool repaint = true); void updatePatternLength(bool repaint = true); void updatePattern(bool repaint = true); void updateSamplesListBox(bool repaint = true); void updateInstrumentsListBox(bool repaint = true); void updateSongInfo(bool repaint = true); void updateTabTitle(); void updateWindowTitle(); void updateWindowTitle(const PPSystemString& fileName); bool updatePianoControl(PianoControl* pianoControl); bool updatePeakLevelControl(); bool updatePlayTime(); void updateSampleEditor(bool repaint = true, bool force = false); void updateSampleEditorAndInstrumentSection(bool repaint = true); void updateAfterLoad(bool loadResult, bool wasPlaying, bool wasPlayingPattern); void updateAfterTabSwitch(); // - show hide GUI sections ------------------------------------------------ // Show/hide main section (song settings + main menu) void showSongSettings(bool show); void showMainOptions(bool show); #ifdef __LOWRES__ void selectScopesControl(pp_int32 ctrlType); void updateScopesControlButtons(); void toggleJamMenuPianoSize(); void flipInstrumentListBoxes(); #endif void showMainMenu(bool show, bool showInstrumentSelector); void showScopes(bool visible, pp_uint32 style); // - misc. ----------------------------------------------------------------- pp_int32 lastPos, lastRow; pp_int32 lastSpeed, lastBPM, lastMainVol; void resetStateMemories() { lastPos = lastRow = -1; lastSpeed = lastBPM = lastMainVol = -1; } bool updateSongPosition(pp_int32 pos = -1, pp_int32 row = -1, bool fast = false); // this always repaints, so no bool return value void updateRecordButton(PPContainer* container, const PPColor& pColor); void doFollowSong(); PatternEditorControl* getPatternEditorControl() { return patternEditorControl; } void updatePatternEditorControl(bool repaint = true, bool fast = false); PatternEditor* getPatternEditor(); SampleEditor* getSampleEditor(); EnvelopeEditor* getEnvelopeEditor(); pp_int32 getOrderListBoxIndex(); void setOrderListIndex(pp_int32 index); bool isEditingCurrentOrderlistPattern(); pp_int32 getInstrumentToPlay(pp_int32 note, PlayerController*& playerController); void setNumChannels(pp_int32 numChannels, bool repaint = true); bool isActiveEditing(); void ensureSongStopped(bool bResetMainVolume, bool suspend); void ensureSongPlaying(bool continuePlaying); void initPlayback(); bool shouldFollowSong(); bool getFollowSong(); void setFollowSong(bool b, bool repaint = true); bool getProspectiveMode(); void setProspectiveMode(bool b, bool repaint = true); bool getCursorWrapAround(); void setCursorWrapAround(bool b, bool repaint = true); void setLiveSwitch(bool b, bool repaint = true); void updateSongRow(bool checkFollowSong = true); void selectInstrument(pp_int32 instrument); void fillInstrumentListBox(PPListBox* listBox, ModuleEditor* moduleEditor = NULL); void fillSampleListBox(PPListBox* listBox, pp_int32 insIndex, ModuleEditor* moduleEditor = NULL); void fillModuleListBox(PPListBox* listBox); void setChanged(); bool checkForChanges(ModuleEditor* module = NULL); bool checkForChangesOpenModule(); bool swapAndCopyHandler(pp_int32 messageBoxID, pp_int32 messageBoxButtonID); void handleQuit(); bool messageBoxEventListener(pp_int32 messageBoxID, pp_int32 messageBoxButtonID); void rearrangePatternEditorControl(); void rearrangePatternEditorControlOrInstrumentContainer(); void expandOrderlist(bool b); void flipSpeedSection(); void enableInstrument(bool b); void commitListBoxChanges(); // Signal waitstate void signalWaitState(bool b); // - Load/Save ------------------------------------------------------------- FileTypes currentSaveFileType; PPSavePanel* savePanel; EventListenerInterface* fileSystemChangedListener; FileTypes getCurrentSelectedSampleSaveType(); struct TPrepareLoadingParameters { FileTypes eType; PPSystemString filename; PPSystemString preferredFilename; bool suspendPlayer; bool repaint; bool res; PPString lastError; bool wasPlaying; bool wasPlayingPattern; bool abortLoading; bool deleteFile; bool didOpenTab; TPrepareLoadingParameters() : abortLoading(false), deleteFile(false), didOpenTab(false) { } } loadingParameters; static pp_uint32 fileTypeToHint(FileTypes type); void prepareLoadSaveUI(); void finishLoadSaveUI(); bool loadGenericFileType(const PPSystemString& fileName); bool prepareLoading(FileTypes eType, const PPSystemString& fileName, bool suspendPlayer, bool repaint, bool saveCheck); bool finishLoading(); bool loadTypeFromFile(FileTypes eType, const PPSystemString& fileName, bool suspendPlayer = true, bool repaint = true, bool saveCheck = true); bool loadTypeWithDialog(FileTypes eType, bool suspendPlayer = true, bool repaint = true); void loadType(FileTypes eType); bool prepareSavingWithDialog(FileTypes eType); bool saveTypeWithDialog(FileTypes eType, EventListenerInterface* fileSystemChangedListener = NULL); bool saveCurrentModuleAsSelectedType(); void saveType(FileTypes eType); void save(); void saveAs(); void handleSaveProceed(); void handleSaveCancel(); void buildMODSaveErrorWarning(pp_int32 error); void estimateSongLength(bool signalWait = false); public: Tracker(); virtual ~Tracker(); void setScreen(PPScreen* screen) { this->screen = screen; } void initUI(); void setModuleNumChannels(pp_uint32 numChannels); // PPEvent listener pp_int32 handleEvent(PPObject* sender, PPEvent* event); PPSize getWindowSizeFromDatabase(); bool getFullScreenFlagFromDatabase(); pp_int32 getScreenScaleFactorFromDatabase(); bool getShowSplashFlagFromDatabase(); void showSplash(); void hideSplash(); // Tracker startup void startUp(bool forceNoSplash = false); // Tracker shutdown bool shutDown(); mp_sint32 saveModule(const PPSystemString& fileName); void sendNoteDown(pp_int32 note, pp_int32 volume = -1); void sendNoteUp(pp_int32 note); private: void switchEditMode(EditModes mode); // Process keyboard events according to current edit mode void processShortcuts(PPEvent* event); // Process messagebox shortcuts (RETURN & ESC) bool processMessageBoxShortcuts(PPEvent* event); void processShortcutsMilkyTracker(PPEvent* event); void selectNextOrder(bool wrap = false); void selectPreviousOrder(bool wrap = false); void selectNextInstrument(); void selectPreviousInstrument(); void processShortcutsFastTracker(PPEvent* event); // - Keyboard bindings ----------------------------------------------------- pp_int16 currentKeyCode; bool executeBinding(const PPKeyBindings* bindings, pp_uint16 keyCode); void initKeyBindings(); void eventKeyDownBinding_OpenTab(); void eventKeyDownBinding_CloseTab(); void eventKeyDownBinding_SwitchToNextTab(); void eventKeyDownBinding_SwitchToPreviousTab(); void setOctave(pp_uint32 octave); void eventKeyDownBinding_SelectOctave1(); void eventKeyDownBinding_SelectOctave2(); void eventKeyDownBinding_SelectOctave3(); void eventKeyDownBinding_SelectOctave4(); void eventKeyDownBinding_SelectOctave5(); void eventKeyDownBinding_SelectOctave6(); void eventKeyDownBinding_SelectOctave7(); void eventKeyDownBinding_SelectOctave8(); void eventKeyDownBinding_PlaySong(); void eventKeyDownBinding_PlayPattern(); void eventKeyDownBinding_PlayPosition(); void eventKeyDownBinding_PlayPatternFromFIRSTQUARTER(); void eventKeyDownBinding_PlayPatternFromSECONDQUARTER(); void eventKeyDownBinding_PlayPatternFromTHIRDQUARTER(); void eventKeyDownBinding_PlayRow(); void eventKeyDownBinding_PlayTrace(); void eventKeyDownBinding_Stop(); void eventKeyDownBinding_Edit(); void eventKeyDownBinding_UnmuteAll(); void eventKeyDownBinding_Open(); void eventKeyDownBinding_Save(); void eventKeyDownBinding_SaveAs(); void eventKeyDownBinding_NextPattern(); void eventKeyDownBinding_PreviousPattern(); // - Invoke sections void eventKeyDownBinding_InvokeMainScreen(); void eventKeyDownBinding_InvokeSectionInstruments(); void eventKeyDownBinding_InvokeSectionSamples(); void eventKeyDownBinding_InvokeSectionSettings(); void eventKeyDownBinding_InvokeSectionTranspose(); void eventKeyDownBinding_InvokeSectionAdvancedEdit(); void eventKeyDownBinding_InvokeSectionDiskMenu(); void eventKeyDownBinding_InvokeSectionHDRecorder(); void eventKeyDownBinding_InvokeSectionQuickOptions(); void eventKeyDownBinding_InvokeSectionOptimize(); void eventKeyDownBinding_InvokeSectionAbout(); // Some handy shortcuts void eventKeyDownBinding_ToggleFT2Edit(); void eventKeyDownBinding_ToggleFollowSong(); void eventKeyDownBinding_ToggleProspectiveMode(); void eventKeyDownBinding_ToggleCursorWrapAround(); void eventKeyDownBinding_ToggleLiveSwitch(); void eventKeyDownBinding_ToggleRecordKeyOff(); void eventKeyDownBinding_ToggleScopes(); void eventKeyDownBinding_InvokePatternToolVolumeScalePattern(); void eventKeyDownBinding_InvokePatternToolVolumeScaleTrack(); void eventKeyDownBinding_InvokePatternToolVolumeScaleSelection(); void eventKeyDownBinding_InvokeQuickChooseInstrument(); // - Some FT2 standard bindings void eventKeyDownBinding_TransposeCurInsTrackDown(); void eventKeyDownBinding_TransposeCurInsTrackUp(); void eventKeyDownBinding_TransposeCurInsPatternDown(); void eventKeyDownBinding_TransposeCurInsPatternUp(); void eventKeyDownBinding_TransposeCurInsBlockDown(); void eventKeyDownBinding_TransposeCurInsBlockUp(); void eventKeyDownBinding_TransposeAllInsTrackDown(); void eventKeyDownBinding_TransposeAllInsTrackUp(); void eventKeyDownBinding_TransposeAllInsPatternDown(); void eventKeyDownBinding_TransposeAllInsPatternUp(); void eventKeyDownBinding_TransposeAllInsBlockDown(); void eventKeyDownBinding_TransposeAllInsBlockUp(); void eventKeyDownBinding_ExitApplication(); // Contributed by 8ch (http://modarchive.org/forums/index.php?topic=2713.0): void eventKeyDownBinding_DelCurOrderPosition(); void eventKeyDownBinding_InsNewOrderPosition(); void eventKeyDownBinding_DecCurOrderPattern(); void eventKeyDownBinding_IncCurOrderPattern(); private: // - friend classes -------------------------------------------------------- friend class SectionAbstract; friend class SectionUpperLeft; friend class SectionSettings; friend class SectionTranspose; friend class SectionAdvancedEdit; friend class SectionDiskMenu; friend class SectionReplacedInstrumentListBoxes; friend class SectionInstruments; friend class SectionSamples; friend class SectionHDRecorder; friend class SectionQuickOptions; friend class SectionOptimize; friend class SectionAbout; friend class InputControlListener; friend class SampleLoadChannelSelectionHandler; friend class ZapInstrumentHandler; friend class ToolInvokeHelper; friend class SaveProceedHandler; friend class PanningSettingsContainer; friend class TabManager; friend class PlayerLogic; friend class RecorderLogic; friend class Zapper; friend class SectionSwitcher; }; #endif MilkyTracker-1.02.00/src/tracker/TrackerConfig.cpp000066400000000000000000000164751324432207300217370ustar00rootroot00000000000000/* * tracker/TrackerConfig.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "TrackerConfig.h" #include "version.h" const PPString TrackerConfig::stringButtonPlus("+"); const PPString TrackerConfig::stringButtonMinus("-"); const PPString TrackerConfig::stringButtonUp("\xfe"); const PPString TrackerConfig::stringButtonDown("\xfd"); const PPString TrackerConfig::stringButtonExtended("\xf0"); const PPString TrackerConfig::stringButtonCollapsed("="); const PPPoint TrackerConfig::trackerExitBounds(4,4); PPColor TrackerConfig::colorThemeMain(64, 96, 128); PPColor TrackerConfig::colorRecordModeButtonText(255, 0, 0); PPColor TrackerConfig::colorPatternEditorBackground(0,0,0); PPColor TrackerConfig::colorPatternEditorCursor(64*2, 64*2, 128*2-1); PPColor TrackerConfig::colorPatternEditorCursorLine(96, 32, 64); PPColor TrackerConfig::colorPatternEditorCursorLineHighLight(128+32, 24, 48); PPColor TrackerConfig::colorPatternEditorSelection(16,48,96); PPColor TrackerConfig::colorPatternEditorNote(255, 255, 255); PPColor TrackerConfig::colorPatternEditorInstrument(128, 224, 255); PPColor TrackerConfig::colorPatternEditorVolume(128, 255, 128); PPColor TrackerConfig::colorPatternEditorEffect(255, 128, 224); PPColor TrackerConfig::colorPatternEditorOperand(255, 224, 128); PPColor TrackerConfig::colorHighLight_1(255, 255, 0); PPColor TrackerConfig::colorHighLight_2(255, 255, 128); PPColor TrackerConfig::colorScopes(255, 255, 255); PPColor TrackerConfig::colorScopesRecordIndicator(255, 0, 0); PPColor TrackerConfig::colorPeakClipIndicator(255, 0, 0); PPColor TrackerConfig::colorRowHighLight_1(32, 32, 32); PPColor TrackerConfig::colorRowHighLight_2(16, 16, 16); PPColor TrackerConfig::colorSampleEditorWaveform(255, 255, 128); // how many open tabs are allowed #ifndef __LOWRES__ pp_int32 TrackerConfig::numTabs = 32; #else pp_int32 TrackerConfig::numTabs = 1; #endif // How many channels possible in XM module? We take the standard here => 32 channels pp_int32 TrackerConfig::numPlayerChannels = 32; // How many channels allocated for instrument playback only? Doesn't cut notes pp_int32 TrackerConfig::numVirtualChannels = 32; // The final amount of channels to be mixed, add two for playing samples on seperate channels without having to cut notes pp_int32 TrackerConfig::totalPlayerChannels = TrackerConfig::numPlayerChannels + TrackerConfig::numVirtualChannels + 2; // This can't be changed later, it's the maximum of channels possible const pp_int32 TrackerConfig::maximumPlayerChannels = MAXCHANNELS; bool TrackerConfig::useVirtualChannels = false; const pp_int32 TrackerConfig::numPredefinedEnvelopes = 10; const pp_int32 TrackerConfig::numPredefinedColorPalettes = 6; const PPString TrackerConfig::defaultPredefinedVolumeEnvelope("060203050700000000C000040100000800B0000E00200018005800200020"); const PPString TrackerConfig::defaultPredefinedPanningEnvelope("06020305000000000080000A00A0001E006000320080003C008000460080"); const PPString TrackerConfig::defaultProTrackerPanning("0000002000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF00"); const PPString TrackerConfig::defaultColorPalette("2B" // Numkeys "FFFFFF" // ColorPatternNote "80E0FF" // ColorPatternInstrument "80FF80" // ColorPatternVolume "FF80E0" // ColorPatternEffect "FFE080" // ColorPatternOperand "8080FF" // ColorCursor "602040" // ColorCursorLine "A01830" // ColorCursorLineHighlighted "406080" // ColorTheme "FFFFFF" // ColorForegroundText "C0C0C0" // ColorButtons "000000" // ColorButtonText "8080FF" // ColorSelection "282849" // ColorListBoxBackground "103060" // ColorPatternSelection "FFFF00" // Hilighted text "FFFFFF" // Scopes "FFFF80" // Hilighted rows (secondary) "202020" // Row highlight background (primary) "101010" // Row highlight background (secondary) "203040" // ColorScrollBarBackground "FF0000" // ColorRecordModeButtonText "FF0000" // Scopes record indicator "FF0000" // Peak clip indicator "FFFF80" // Sample Editor Waveform "DB00A0" "DB00A0" "DB00A0" "DB00A0" "DB00A0" "DB00A0" "DB00A0" "DB00A0" "DB00A0" "DB00A0" "DB00A0" "DB00A0" "DB00A0" "DB00A0" "DB00A0" "DB00A0" "DB00A0" "DB00A0" "DB00A0"); const char* TrackerConfig::predefinedColorPalettes[TrackerConfig::numPredefinedColorPalettes] = // Current last color start in the line of this comment marker { // default "2BFFFFFF80E0FF80FF80FF80E0FFE0808080FF602040A01830406080FFFFFFC0C0C00000008080FF282849103060FFFF00FFFFFFFFFF80202020101010203040FF0000FF0000FF0000FFFF803B00403B00403B00403B00403B00403B00403B00403B00403B00403B00403B00403B00403B00403B00403B00403B00403B00403B0040", // bluish "2BFFFFFF7FB5FFA7DDFF00B5FF7FFFFF0000593F5A7F8618C9405DA7FFFFFFC0C0C000000080B5FF18183A103060FFFF00FFFFFFFFFF8020202010101018183AFF0000FF0000FF0000FFFF805B00205B00205B00205B00205B00205B00205B00205B00205B00205B00205B00205B00205B00205B00205B00205B00205B00205B0020", // nice one "2BFFFFFFFFD6D6FFFFFFFFD6D6FFFFFF21140D6B5F57C2355D937F8CFFFFFFA6A6A6000000D6C2C92C242C605060FFFF00FFFFFFFFFF802020201010102C242CFF0000FF0000FF0000FFFF803B00403B00403B00403B00403B00403B00403B00403B00403B00403B00403B00403B00403B00403B00403B00403B00403B00403B0040", // rusty "2BFFFFFFDDD0DDFFD0DDC9B5D0C2A7C22114217F647F785743403549FFFFFF7F737F000000937F8C202030403040FFFF00FFFFFFFFFF80202020101010202030FF0000FF0000FF0000FFFF809B00E09B00E09B00E09B00E09B00E09B00E09B00E09B00E09B00E09B00E09B00E09B00E09B00E09B00E09B00E09B00E09B00E09B00E0", // greeny "2B28D0E480E0FF80FF80FFB50078E080005D35506B2EA01830407843FFFFFFC0C0C000000035B56414281A106030FFFF00FFFFFFFFFF8020202010101014281AFF0000FF0000FF0000FFFF801B00601B00601B00601B00601B00601B00601B00601B00601B00601B00601B00601B00601B00601B00601B00601B00601B00601B0060", // red one "2BFFFFFFFF9393E45000FFA786FF5780350000602114A01830570028FFFFFFC0C0C00000007D0000200000500010FFFF00FFFFFFFFFF80202020101010200000FF0000FF0000FF0000FFFF809B00E09B00E09B00E09B00E09B00E09B00E09B00E09B00E09B00E09B00E09B00E09B00E09B00E09B00E09B00E09B00E09B00E09B00E0" }; const PPSystemString TrackerConfig::untitledSong("Untitled"); const pp_int32 TrackerConfig::numMixFrequencies = 4; const pp_int32 TrackerConfig::mixFrequencies[] = {11025, 22050, 44100, 48000}; MilkyTracker-1.02.00/src/tracker/TrackerConfig.h000066400000000000000000000055271324432207300214000ustar00rootroot00000000000000/* * tracker/TrackerConfig.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #ifndef TRACKERCONFIG__H #define TRACKERCONFIG__H #include "BasicTypes.h" #define NUMEFFECTMACROS 20 class TrackerConfig { public: static const PPString stringButtonPlus; static const PPString stringButtonMinus; static const PPString stringButtonUp; static const PPString stringButtonDown; static const PPString stringButtonExtended; static const PPString stringButtonCollapsed; enum { MAXCHANNELS = 256, MAXNOTES = 120, // 10 octaves, even though FT2 only uses 8 }; static const PPPoint trackerExitBounds; static PPColor colorThemeMain; static PPColor colorRecordModeButtonText; // Pattern colors static PPColor colorPatternEditorBackground; static PPColor colorPatternEditorCursor; static PPColor colorPatternEditorCursorLine; static PPColor colorPatternEditorCursorLineHighLight; static PPColor colorPatternEditorSelection; static PPColor colorPatternEditorNote; static PPColor colorPatternEditorInstrument; static PPColor colorPatternEditorVolume; static PPColor colorPatternEditorEffect; static PPColor colorPatternEditorOperand; static PPColor colorHighLight_1; static PPColor colorHighLight_2; static PPColor colorScopes; static PPColor colorScopesRecordIndicator; static PPColor colorPeakClipIndicator; static PPColor colorRowHighLight_1; static PPColor colorRowHighLight_2; static PPColor colorSampleEditorWaveform; static pp_int32 numTabs; static pp_int32 numPlayerChannels; static pp_int32 numVirtualChannels; static pp_int32 totalPlayerChannels; static const pp_int32 maximumPlayerChannels; static bool useVirtualChannels; static const pp_int32 numPredefinedEnvelopes; static const pp_int32 numPredefinedColorPalettes; static const PPString defaultPredefinedVolumeEnvelope; static const PPString defaultPredefinedPanningEnvelope; static const PPString defaultProTrackerPanning; static const PPString defaultColorPalette; static const char* predefinedColorPalettes[]; static const PPSystemString untitledSong; static const pp_int32 numMixFrequencies; static const pp_int32 mixFrequencies[]; static const pp_uint32 version; }; #endif MilkyTracker-1.02.00/src/tracker/TrackerInit.cpp000066400000000000000000002356371324432207300214400ustar00rootroot00000000000000/* * tracker/TrackerInit.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "Tracker.h" #include "TrackerConfig.h" #include "TabManager.h" #include "PlayerController.h" #include "ModuleEditor.h" #include "PatternTools.h" #include "Tools.h" #include "PPUIConfig.h" #include "ListBox.h" #include "StaticText.h" #include "Seperator.h" #include "MessageBoxContainer.h" #include "PatternEditorControl.h" #include "TransparentContainer.h" #include "PianoControl.h" #include "PeakLevelControl.h" #include "ScopesControl.h" #include "TabHeaderControl.h" #include "TitlePageManager.h" // Sections #include "SectionSwitcher.h" #include "SectionTranspose.h" #include "SectionAdvancedEdit.h" #include "SectionDiskMenu.h" #include "SectionHDRecorder.h" #include "SectionSettings.h" #include "SectionInstruments.h" #include "SectionSamples.h" #include "SectionQuickOptions.h" #include "SectionOptimize.h" #include "SectionAbout.h" #include "InputControlListener.h" #include "ControlIDs.h" #include "SIPButtons.h" void Tracker::initUI() { pp_int32 c; PPButton* button = NULL; // ---------- initialise sections -------- for (pp_int32 i = 0; i < sections->size(); i++) sections->get(i)->init(); #ifdef __LOWRES__ pp_int32 height2 = screen->getHeight()-UPPERSECTIONDEFAULTHEIGHT(); PPContainer* containerAbout = new PPContainer(CONTAINER_ABOUT, screen, this, PPPoint(116-2, height2), PPSize((306-116+2)+14,24), false); containerAbout->setColor(TrackerConfig::colorThemeMain); // Song title edit field PPListBox* listBox = new PPListBox(LISTBOX_SONGTITLE, screen, this, PPPoint(116-2+2, height2+2+8), PPSize(200+2,12), true, true, false); listBox->showSelection(false); listBox->setSingleButtonClickEdit(true); listBox->setBorderColor(TrackerConfig::colorThemeMain); char str[MP_MAXTEXT+1]; moduleEditor->getTitle(str, ModuleEditor::MAX_TITLETEXT); listBox->addItem(str); listBox->setMaxEditSize(ModuleEditor::MAX_TITLETEXT); containerAbout->addControl(listBox); PPStaticText* staticText = playTimeText = new PPStaticText(STATICTEXT_ABOUT_TIME, screen, this, PPPoint(116+2, height2+2+8+3), "", false); containerAbout->addControl(staticText); button = new PPButton(BUTTON_ABOUT_ESTIMATESONGLENGTH, screen, this, PPPoint(containerAbout->getLocation().x + containerAbout->getSize().width - 6*8-4, height2+2+8+2), PPSize(6*8, 9)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Estimate"); containerAbout->addControl(button); peakLevelControl = new PeakLevelControl(PEAKLEVEL_CONTROL, screen, this, PPPoint(116-2+2, height2+10), PPSize(200+2,12)); peakLevelControl->setBorderColor(TrackerConfig::colorThemeMain); peakLevelControl->hide(true); containerAbout->addControl(peakLevelControl); // switch to Peak level pp_int32 aboutButtonOffset = -33 - 30 - 30 - 23*3 - 14; button = new PPButton(BUTTON_ABOUT_SHOWTITLE, screen, this, PPPoint(containerAbout->getLocation().x + containerAbout->getSize().width + aboutButtonOffset, height2+1), PPSize(29, 9), false, true, false); button->setColor(TrackerConfig::colorThemeMain); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Title"); button->setTextColor(PPUIConfig::getInstance()->getColor(PPUIConfig::ColorStaticText)); containerAbout->addControl(button); button = new PPButton(BUTTON_ABOUT_SHOWTIME, screen, this, PPPoint(containerAbout->getLocation().x + containerAbout->getSize().width + aboutButtonOffset + 29, height2+1), PPSize(24, 9), false, true, false); button->setColor(TrackerConfig::colorThemeMain); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Time"); button->setTextColor(PPUIConfig::getInstance()->getColor(PPUIConfig::ColorStaticText)); containerAbout->addControl(button); button = new PPButton(BUTTON_ABOUT_SHOWPEAK, screen, this, PPPoint(containerAbout->getLocation().x + containerAbout->getSize().width + aboutButtonOffset + 29+24, height2+1), PPSize(24, 9), false, true, false); button->setColor(TrackerConfig::colorThemeMain); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Peak"); button->setTextColor(PPUIConfig::getInstance()->getColor(PPUIConfig::ColorStaticText)); containerAbout->addControl(button); button = new PPButton(MAINMENU_PLAY_SONG, screen, this, PPPoint(containerAbout->getLocation().x + containerAbout->getSize().width + aboutButtonOffset + (29+24+24) + 2, height2+1), PPSize(23, 9), false); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Play"); containerAbout->addControl(button); button = new PPButton(MAINMENU_PLAY_PATTERN, screen, this, PPPoint(containerAbout->getLocation().x + containerAbout->getSize().width + aboutButtonOffset + (29+24+24) + 2 + 23, height2+1), PPSize(23, 9), false); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Pat"); containerAbout->addControl(button); button = new PPButton(MAINMENU_STOP, screen, this, PPPoint(containerAbout->getLocation().x + containerAbout->getSize().width + aboutButtonOffset + (29+24+24) + 2 + 23*2, height2+1), PPSize(23, 9), false); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Stop"); containerAbout->addControl(button); button = new PPButton(BUTTON_ABOUT_FOLLOWSONG, screen, this, PPPoint(containerAbout->getLocation().x + containerAbout->getSize().width + aboutButtonOffset + (29+24+24) + 2 + 23*3, height2+1), PPSize(12, 9), false, true, false); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("F"); containerAbout->addControl(button); button = new PPButton(BUTTON_ABOUT_LIVESWITCH, screen, this, PPPoint(containerAbout->getLocation().x + containerAbout->getSize().width + aboutButtonOffset + (29+24+24) + 2 + 23*3 + 12, height2+1), PPSize(12, 9), false, true, false); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("L"); containerAbout->addControl(button); staticText = new PPStaticText(STATICTEXT_ABOUT_HEADING, screen, this, PPPoint(116, height2+3), "Title:", true); staticText->setFont(PPFont::getFont(PPFont::FONT_TINY)); containerAbout->addControl(staticText); screen->addControl(containerAbout); // small sections initSectionOrderlist(0,0+height2); initSectionSpeed(116-2,24+height2); initSectionPattern(116-4+99,24+height2); // Main options initSectionMainOptions(0, 0+height2); initListboxesSection(0, 0+height2); // add scopes (hidden by default) scopesControl = new ScopesControl(SCOPES_CONTROL, screen, this, PPPoint(0, 0 + height2), PPSize(SCOPESWIDTH(), SCOPESHEIGHT())); scopesControl->setBorderColor(TrackerConfig::colorThemeMain); scopesControl->show(false); screen->addControl(scopesControl); // add sub menu selection buttons (pages) { PPButton* button; PPContainer* container = new PPContainer(CONTAINER_SCOPECONTROL, screen, this, PPPoint(scopesControl->getSize().width, 0 + height2), PPSize(screen->getWidth()-scopesControl->getSize().width,SCOPESHEIGHT()), false); container->setColor(TrackerConfig::colorThemeMain); pp_int32 dy = (container->getSize().height-2) / 5; button = new PPButton(BUTTON_SCOPECONTROL_MUTE, screen, this, PPPoint(container->getLocation().x + 1, container->getLocation().y + 2), PPSize(container->getSize().width-3, dy), false, true, false); button->setText("Mute"); button->setColor(TrackerConfig::colorThemeMain); button->setTextColor(PPUIConfig::getInstance()->getColor(PPUIConfig::ColorStaticText)); container->addControl(button); button = new PPButton(BUTTON_SCOPECONTROL_SOLO, screen, this, PPPoint(container->getLocation().x + 1, container->getLocation().y + 2 + dy), PPSize(container->getSize().width-3, dy), false, true, false); button->setText("Solo"); button->setColor(TrackerConfig::colorThemeMain); button->setTextColor(PPUIConfig::getInstance()->getColor(PPUIConfig::ColorStaticText)); container->addControl(button); button = new PPButton(BUTTON_SCOPECONTROL_REC, screen, this, PPPoint(container->getLocation().x + 1, container->getLocation().y + 2 + dy*2), PPSize(container->getSize().width-3, dy), false, true, false); button->setText("Rec."); button->setColor(TrackerConfig::colorThemeMain); button->setTextColor(PPUIConfig::getInstance()->getColor(PPUIConfig::ColorStaticText)); container->addControl(button); button = new PPButton(MAINMENU_PLAY_SONG, screen, this, PPPoint(container->getLocation().x + 1, container->getLocation().y + 2 + dy*3), PPSize(container->getSize().width-3, dy), false); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Play"); container->addControl(button); button = new PPButton(MAINMENU_STOP, screen, this, PPPoint(container->getLocation().x + 1, container->getLocation().y + 2 + dy*4), PPSize(container->getSize().width-3, dy), false); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Stop"); container->addControl(button); container->show(false); screen->addControl(container); pp_int32 y = height2 + 64; container = new PPContainer(CONTAINER_LOWRES_MENUSWITCH, screen, this, PPPoint(0, y), PPSize(screen->getWidth(),16), false); container->setColor(TrackerConfig::colorThemeMain); const pp_int32 numSubMenus = NUMSUBMENUS(); const char* subMenuTexts[] = {"Main","Song","Ins.","Scopes","Jam"}; const pp_int32 subMenuIDs[] = {BUTTON_0, BUTTON_0+1, BUTTON_0+2, BUTTON_0+3, BUTTON_0+4}; pp_int32 dx = (screen->getWidth() - (4+38))/numSubMenus; for (pp_int32 i = 0; i < numSubMenus; i++) { button = new PPButton(subMenuIDs[i], screen, this, PPPoint(0 + 2+i*dx, y+1), PPSize(dx, 13), false, true, false); button->setColor(TrackerConfig::colorThemeMain); button->setTextColor(PPUIConfig::getInstance()->getColor(PPUIConfig::ColorStaticText)); button->setText(subMenuTexts[i]); container->addControl(button); } button = new PPButton(BUTTON_APP_EXIT, screen, this, PPPoint(0 + 6+numSubMenus*dx, y+2), PPSize(35,11)); button->setText("Exit"); container->addControl(button); screen->addControl(container); } sectionSwitcher->updateSubMenusButtons(false); sectionSwitcher->showCurrentSubMenu(false); pp_int32 peCtrlHeight = screen->getHeight()-UPPERSECTIONDEFAULTHEIGHT()-INPUTCONTAINERHEIGHT_DEFAULT; patternEditorControl = new PatternEditorControl(PATTERN_EDITOR, screen, this, PPPoint(0,0), PPSize(screen->getWidth(),peCtrlHeight)); initInputContainerDefault(0, screen->getHeight()-UPPERSECTIONDEFAULTHEIGHT()-INPUTCONTAINERHEIGHT_DEFAULT); initInputContainerExtended(0, screen->getHeight()-UPPERSECTIONDEFAULTHEIGHT()-INPUTCONTAINERHEIGHT_EXTENDED); #else PPContainer* containerAbout = new PPContainer(CONTAINER_ABOUT, screen, this, PPPoint(116-2, 0), PPSize((306-116+2)+14,24), false); containerAbout->setColor(TrackerConfig::colorThemeMain); // Song title edit field PPListBox* listBox = new PPListBox(LISTBOX_SONGTITLE, screen, this, PPPoint(116-2+2, 2+8), PPSize(200+2,12), true, true, false); listBox->showSelection(false); listBox->setSingleButtonClickEdit(true); listBox->setBorderColor(TrackerConfig::colorThemeMain); char str[MP_MAXTEXT+1]; moduleEditor->getTitle(str, ModuleEditor::MAX_TITLETEXT); listBox->addItem(str); listBox->setMaxEditSize(ModuleEditor::MAX_TITLETEXT); containerAbout->addControl(listBox); PPStaticText* staticText = playTimeText = new PPStaticText(STATICTEXT_ABOUT_TIME, screen, this, PPPoint(116+2, 2+8+3), "", false); containerAbout->addControl(staticText); button = new PPButton(BUTTON_ABOUT_ESTIMATESONGLENGTH, screen, this, PPPoint(containerAbout->getLocation().x + containerAbout->getSize().width - 6*8-4, 2+8+2), PPSize(6*8, 9)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("estimate"); containerAbout->addControl(button); peakLevelControl = new PeakLevelControl(PEAKLEVEL_CONTROL, screen, this, PPPoint(116-2+2, 2+8), PPSize(200+2,12)); peakLevelControl->setBorderColor(TrackerConfig::colorThemeMain); containerAbout->addControl(peakLevelControl); staticText = new PPStaticText(STATICTEXT_ABOUT_HEADING, screen, this, PPPoint(116, 3), "Song title:", true); staticText->setFont(PPFont::getFont(PPFont::FONT_TINY)); containerAbout->addControl(staticText); // switch to Peak level pp_int32 aboutButtonOffset = 51; button = new PPButton(BUTTON_ABOUT_FOLLOWSONG, screen, this, PPPoint(containerAbout->getLocation().x + containerAbout->getSize().width - aboutButtonOffset, 1), PPSize(12, 9), false, true, false); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("F"); containerAbout->addControl(button); button = new PPButton(BUTTON_ABOUT_PROSPECTIVE, screen, this, PPPoint(containerAbout->getLocation().x + containerAbout->getSize().width - aboutButtonOffset + 12, 1), PPSize(12, 9), false, true, false); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("P"); button->setPressed(true); containerAbout->addControl(button); button = new PPButton(BUTTON_ABOUT_WRAPCURSOR, screen, this, PPPoint(containerAbout->getLocation().x + containerAbout->getSize().width - aboutButtonOffset + 12*2, 1), PPSize(12, 9), false, true, false); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("W"); containerAbout->addControl(button); button = new PPButton(BUTTON_ABOUT_LIVESWITCH, screen, this, PPPoint(containerAbout->getLocation().x + containerAbout->getSize().width - aboutButtonOffset + 12*3, 1), PPSize(12, 9), false, true, false); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("L"); containerAbout->addControl(button); aboutButtonOffset+=34; button = new PPButton(BUTTON_ABOUT_SHOWPEAK, screen, this, PPPoint(containerAbout->getLocation().x + containerAbout->getSize().width - aboutButtonOffset, 1), PPSize(30, 9), false, true, false); button->setColor(TrackerConfig::colorThemeMain); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Peak"); button->setTextColor(PPUIConfig::getInstance()->getColor(PPUIConfig::ColorStaticText)); containerAbout->addControl(button); aboutButtonOffset+=30; button = new PPButton(BUTTON_ABOUT_SHOWTIME, screen, this, PPPoint(containerAbout->getLocation().x + containerAbout->getSize().width - aboutButtonOffset, 1), PPSize(30, 9), false, true, false); button->setColor(TrackerConfig::colorThemeMain); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Time"); button->setTextColor(PPUIConfig::getInstance()->getColor(PPUIConfig::ColorStaticText)); containerAbout->addControl(button); aboutButtonOffset+=30; button = new PPButton(BUTTON_ABOUT_SHOWTITLE, screen, this, PPPoint(containerAbout->getLocation().x + containerAbout->getSize().width - aboutButtonOffset, 1), PPSize(30, 9), false, true, false); button->setColor(TrackerConfig::colorThemeMain); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Title"); button->setTextColor(PPUIConfig::getInstance()->getColor(PPUIConfig::ColorStaticText)); containerAbout->addControl(button); screen->addControl(containerAbout); // small sections initSectionOrderlist(0,0); initSectionSpeed(116-2,24); initSectionPattern(116-4+99,24); // Main options initSectionMainOptions(0, 64); // ---------- Instrument & Sample listboxes ---------- initListboxesSection(320, 0); #ifndef __LOWRES__ scopesControl = new ScopesControl(SCOPES_CONTROL, screen, this, PPPoint(0, UPPERSECTIONDEFAULTHEIGHTWOINS()), PPSize(screen->getWidth(), SCOPESHEIGHT())); scopesControl->setBorderColor(TrackerConfig::colorThemeMain); for (c = 0; c < TrackerConfig::MAXCHANNELS; c++) scopesControl->recordChannel(c, playerController->isChannelRecording(c)); screen->addControl(scopesControl); screen->paintControl(scopesControl, false); PPContainer* containerOpenRemoveTabs = new PPContainer(CONTAINER_OPENREMOVETABS, screen, this, PPPoint(0, screen->getHeight()-TABHEADERHEIGHT()), PPSize(TABHEADERHEIGHT()*2, TABHEADERHEIGHT()), false); containerOpenRemoveTabs->setColor(TrackerConfig::colorThemeMain); button = new PPButton(BUTTON_TAB_OPEN, screen, this, PPPoint(1, screen->getHeight()-TABHEADERHEIGHT()+1), PPSize(TABHEADERHEIGHT()-2, TABHEADERHEIGHT()-2), false); button->setText("+"); containerOpenRemoveTabs->addControl(button); button = new PPButton(BUTTON_TAB_CLOSE, screen, this, PPPoint(TABHEADERHEIGHT(), screen->getHeight()-TABHEADERHEIGHT()+1), PPSize(TABHEADERHEIGHT()-2, TABHEADERHEIGHT()-2), false); button->setText("-"); containerOpenRemoveTabs->addControl(button); screen->addControl(containerOpenRemoveTabs); TabHeaderControl* tabHeader = new TabHeaderControl(TABHEADER_CONTROL, screen, this, PPPoint(TABHEADERHEIGHT()*2, screen->getHeight() - TABHEADERHEIGHT()), PPSize(screen->getWidth()-TABHEADERHEIGHT()*2, TABHEADERHEIGHT())); tabHeader->setColor(TrackerConfig::colorThemeMain); screen->addControl(tabHeader); #endif patternEditorControl = new PatternEditorControl(PATTERN_EDITOR, screen, this, PPPoint(0,UPPERSECTIONDEFAULTHEIGHT()), PPSize(screen->getWidth(),MAXEDITORHEIGHT()-UPPERSECTIONDEFAULTHEIGHT())); #endif // first thing to do is, attach pattern editor patternEditorControl->attachPatternEditor(moduleEditor->getPatternEditor()); patternEditorControl->setColor(TrackerConfig::colorPatternEditorBackground); patternEditorControl->setOrderlistIndex(getOrderListBoxIndex()); screen->addControl(patternEditorControl); // ---------- update fields -------------- updateSamplesListBox(false); updateSongLength(false); updateSongRepeat(false); //updateBPM(false); updateSpeed(false); updatePatternAddAndOctave(false); updatePatternIndex(false); updatePatternLength(false); updatePatternEditorControl(false); #ifdef __LOWRES__ switchEditMode(EditModeMilkyTracker); #else switchEditMode(EditModeFastTracker); #endif screen->setFocus(patternEditorControl); #ifdef __LOWRES__ setInputControl(SIPDefault); updateJamMenuOrder(false); #endif TitlePageManager titlePageManager(*screen); titlePageManager.showSongTitleEditField(false); setFollowSong(true, false); setProspectiveMode(false, false); setCursorWrapAround(true, false); for (c = 0; c < TrackerConfig::MAXCHANNELS; c++) { scopesControl->recordChannel(c, playerController->isChannelRecording(c)); getPatternEditorControl()->recordChannel(c, playerController->isChannelRecording(c)); } patternEditorControl->setScrollMode(ScrollModeStayInCenter); scopesControl->attachSource(this->playerController); tabManager->openNewTab(this->playerController, this->moduleEditor); } //////////////////////////////////////////////////////////////////// // Build orderlist section //////////////////////////////////////////////////////////////////// void Tracker::initSectionOrderlist(pp_int32 x, pp_int32 y) { // setup controls PPContainer* containerOrderlist = new PPContainer(CONTAINER_ORDERLIST, screen, this, PPPoint(x, y), PPSize(116-2,64), false); containerOrderlist->setColor(TrackerConfig::colorThemeMain); PPButton* button = new PPButton(BUTTON_ORDERLIST_EXTENT, screen, this, PPPoint(x + 2 + 78 - 2 - 22, y + 2), PPSize(19, 10), false); button->setColor(TrackerConfig::colorThemeMain); button->setTextColor(PPUIConfig::getInstance()->getColor(PPUIConfig::ColorStaticText)); button->setText(TrackerConfig::stringButtonCollapsed); containerOrderlist->addControl(button); // DUP button = new PPButton(BUTTON_ORDERLIST_SEQENTRY, screen, this, PPPoint(x + 2 + 78 - 2 - 22, y+2+12), PPSize(18, 11)); //button->setVerticalText(true); button->setXOffset(-1); button->setText("Seq"); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); containerOrderlist->addControl(button); button = new PPButton(BUTTON_ORDERLIST_CLNENTRY, screen, this, PPPoint(x + 2 + 78 - 2 - 22, y+2+12+12), PPSize(18, 11)); //button->setVerticalText(true); button->setXOffset(-1); button->setText("Cln"); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); containerOrderlist->addControl(button); button = new PPButton(BUTTON_ORDERLIST_INSERT, screen, this, PPPoint(x+2 + 78-2, y+2), PPSize(33, 11)); button->setText("Ins."); containerOrderlist->addControl(button); button = new PPButton(BUTTON_ORDERLIST_NEXT, screen, this, PPPoint(x+2 + 78-2, y+2+12), PPSize(16, 11)); button->setText(TrackerConfig::stringButtonPlus); containerOrderlist->addControl(button); button = new PPButton(BUTTON_ORDERLIST_PREVIOUS, screen, this, PPPoint(x+2 + 78-2 + 17, y+2+12), PPSize(16, 11)); button->setText(TrackerConfig::stringButtonMinus); containerOrderlist->addControl(button); button = new PPButton(BUTTON_ORDERLIST_DELETE, screen, this, PPPoint(x+2 + 78-2, y+2+12+12), PPSize(33, 11)); button->setText("Del"); containerOrderlist->addControl(button); button = new PPButton(BUTTON_ORDERLIST_SONGLENGTH_PLUS, screen, this, PPPoint(x+2 + 78-2, y+2+12+12+12), PPSize(16, 11)); button->setText(TrackerConfig::stringButtonPlus); containerOrderlist->addControl(button); button = new PPButton(BUTTON_ORDERLIST_SONGLENGTH_MINUS, screen, this, PPPoint(x+2 + 78-2 + 17, y+2+12+12+12), PPSize(16, 11)); button->setText(TrackerConfig::stringButtonMinus); containerOrderlist->addControl(button); button = new PPButton(BUTTON_ORDERLIST_REPEAT_PLUS, screen, this, PPPoint(x+2 + 78-2, y+2+12+12+12+12), PPSize(16, 11)); button->setText(TrackerConfig::stringButtonPlus); containerOrderlist->addControl(button); button = new PPButton(BUTTON_ORDERLIST_REPEAT_MINUS, screen, this, PPPoint(x+2 + 78-2 + 17, y+2+12+12+12+12), PPSize(16, 11)); button->setText(TrackerConfig::stringButtonMinus); containerOrderlist->addControl(button); PPStaticText* staticText = new PPStaticText(0, NULL, NULL, PPPoint(x+2, y+2+12+12+12+2), "Length", true); containerOrderlist->addControl(staticText); staticText = new PPStaticText(1, NULL, NULL, PPPoint(x+2 + 54, y+2+12+12+12+12+2), "Len.", true); containerOrderlist->addControl(staticText); // actual Song Length field staticText = new PPStaticText(STATICTEXT_ORDERLIST_SONGLENGTH, screen, NULL, PPPoint(x+2 + 8*7, y+2+12+12+12+2), "", false); containerOrderlist->addControl(staticText); staticText = new PPStaticText(2, NULL, NULL, PPPoint(x+2, y+2+12+12+12+12+2), "Repeat", true); containerOrderlist->addControl(staticText); // actual Song repeat field staticText = new PPStaticText(STATICTEXT_ORDERLIST_REPEAT, screen, NULL, PPPoint(x+2 + 8*7, y+2+12+12+12+12+2), "", false); containerOrderlist->addControl(staticText); listBoxOrderList = new PPListBox(LISTBOX_ORDERLIST, screen, this, PPPoint(x+2, y+2), PPSize(51,36), true, false, true, true); listBoxOrderList->setAutoHideVScroll(false); listBoxOrderList->setBorderColor(TrackerConfig::colorThemeMain); listBoxOrderList->setCenterSelection(true); listBoxOrderList->setSelectOnScroll(true); containerOrderlist->addControl(listBoxOrderList); screen->addControl(containerOrderlist); expandOrderlist(false); } //////////////////////////////////////////////////////////////////// // Build speed section //////////////////////////////////////////////////////////////////// void Tracker::initSectionSpeed(pp_int32 x, pp_int32 y) { PPContainer* containerSpeed = new PPContainer(CONTAINER_SPEED, screen, this, PPPoint(x, y), PPSize(99-2,40), false); containerSpeed->setColor(TrackerConfig::colorThemeMain); PPStaticText* staticText = new PPStaticText(STATICTEXT_SPEED_BPM_DESC, NULL, NULL, PPPoint(x+2, y+2+2), "BPM", true); containerSpeed->addControl(staticText); // actual BPM field staticText = new PPStaticText(STATICTEXT_SPEED_BPM, screen, NULL, PPPoint(x+2 + 4*8 - 5, y+2+2), "", false); containerSpeed->addControl(staticText); // Octave text field goes at the same place but hidden by default staticText = new PPStaticText(STATICTEXT_SPEED_OCTAVE_DESC, NULL, NULL, PPPoint(x+2, y+2+2), "Oct", true); staticText->hide(true); containerSpeed->addControl(staticText); // actual octave field, hidden by default staticText = new PPStaticText(STATICTEXT_SPEED_OCTAVE, screen, NULL, PPPoint(x+2 + 5*8 - 5, y+2+2), "", false); staticText->hide(true); containerSpeed->addControl(staticText); staticText = new PPStaticText(STATICTEXT_SPEED_SPEED_DESC, NULL, NULL, PPPoint(x+2, y+2 + 2 + 12), "Spd", true); containerSpeed->addControl(staticText); // actual speed field staticText = new PPStaticText(STATICTEXT_SPEED_SPEED, screen, NULL, PPPoint(x+2 + 5*8 - 5, y+2 + 2 + 12), "", false); containerSpeed->addControl(staticText); staticText = new PPStaticText(STATICTEXT_SPEED_PATTERNADD_DESC, NULL, NULL, PPPoint(x+2, y+2 + 2 + 12 + 12), "Add", true); containerSpeed->addControl(staticText); // actual speed field staticText = new PPStaticText(STATICTEXT_SPEED_PATTERNADD, screen, NULL, PPPoint(x+2 + 5*8 - 5, y+2 + 2 + 12 + 12), "", false); containerSpeed->addControl(staticText); staticText = new PPStaticText(STATICTEXT_SPEED_MAINVOL_DESC, NULL, NULL, PPPoint(x+2, y+2 + 2 + 12 + 12), "Mainvol", true); staticText->hide(true); containerSpeed->addControl(staticText); // actual speed field staticText = new PPStaticText(STATICTEXT_SPEED_MAINVOL, screen, NULL, PPPoint(x+2 + 8*8 - 3, y+2 + 2 + 12 + 12), "xx", false); staticText->hide(true); containerSpeed->addControl(staticText); const pp_int32 bSize = 14; PPButton* button = new PPButton(BUTTON_BPM_PLUS, screen, this, PPPoint(x + 2 + 54, y+2), PPSize(bSize, 11)); button->setText(TrackerConfig::stringButtonPlus); containerSpeed->addControl(button); // octave plus button, hidden by default button = new PPButton(BUTTON_OCTAVE_PLUS, screen, this, PPPoint(x + 2 + 54, y+2), PPSize(bSize, 11)); button->setText(TrackerConfig::stringButtonPlus); button->hide(true); containerSpeed->addControl(button); button = new PPButton(BUTTON_BPM_MINUS, screen, this, PPPoint(x + 2 + 54 + bSize+1, y+2), PPSize(bSize-1, 11)); button->setText(TrackerConfig::stringButtonMinus); containerSpeed->addControl(button); // octave minus button, hidden by default button = new PPButton(BUTTON_OCTAVE_MINUS, screen, this, PPPoint(x + 2 + 54 + bSize+1, y+2), PPSize(bSize-1, 11)); button->setText(TrackerConfig::stringButtonMinus); button->hide(true); containerSpeed->addControl(button); button = new PPButton(BUTTON_SPEED_PLUS, screen, this, PPPoint(x + 2 + 54, y+2 + 12), PPSize(bSize, 11)); button->setText(TrackerConfig::stringButtonPlus); containerSpeed->addControl(button); button = new PPButton(BUTTON_SPEED_MINUS, screen, this, PPPoint(x + 2 + 54 + bSize+1, y+2 + 12), PPSize(bSize-1, 11)); button->setText(TrackerConfig::stringButtonMinus); containerSpeed->addControl(button); button = new PPButton(BUTTON_ADD_PLUS, screen, this, PPPoint(x + 2 + 54, y+2 + 12 + 12), PPSize(bSize, 11)); button->setText(TrackerConfig::stringButtonPlus); containerSpeed->addControl(button); button = new PPButton(BUTTON_ADD_MINUS, screen, this, PPPoint(x + 2 + 54 + bSize+1, y+2 + 12 + 12), PPSize(bSize-1, 11)); button->setText(TrackerConfig::stringButtonMinus); containerSpeed->addControl(button); button = new PPButton(BUTTON_SPEEDCONTAINERFLIP, screen, this, PPPoint(button->getLocation().x + button->getSize().width+1, y+1), PPSize(10, 37), false); button->setColor(TrackerConfig::colorThemeMain); button->setTextColor(PPUIConfig::getInstance()->getColor(PPUIConfig::ColorStaticText)); button->setText("Flip"); button->setVerticalText(true); containerSpeed->addControl(button); screen->addControl(containerSpeed); } //////////////////////////////////////////////////////////////////// // Build pattern section //////////////////////////////////////////////////////////////////// void Tracker::initSectionPattern(pp_int32 x, pp_int32 y) { PPContainer* containerPattern = new PPContainer(CONTAINER_PATTERN, screen, this, PPPoint(x, y), PPSize(91+14+4,40), false); containerPattern->setColor(TrackerConfig::colorThemeMain); PPStaticText* staticText = new PPStaticText(0, NULL, NULL, PPPoint(x + 2, y+2 + 2), "Patn.", true); containerPattern->addControl(staticText); // actual pattern index field staticText = new PPStaticText(STATICTEXT_PATTERN_INDEX, screen, NULL, PPPoint(x + 2 + 4 * 8 + 18, y+2 + 2), "", false); containerPattern->addControl(staticText); staticText = new PPStaticText(0, NULL, NULL, PPPoint(x + 2, y+2 + 2 + 12), "Len.", true); containerPattern->addControl(staticText); // actual pattern length field staticText = new PPStaticText(STATICTEXT_PATTERN_LENGTH, screen, NULL, PPPoint(x + 2 + 3 * 8 + 18, y+2 + 2 + 12), "", false); containerPattern->addControl(staticText); PPButton* button = new PPButton(BUTTON_PATTERN_PLUS, screen, this, PPPoint(x + 2 + 52+18, y+2), PPSize(16, 11)); button->setText(TrackerConfig::stringButtonPlus); containerPattern->addControl(button); button = new PPButton(BUTTON_PATTERN_MINUS, screen, this, PPPoint(x + 2 + 52 + 17+18, y+2), PPSize(17, 11)); button->setText(TrackerConfig::stringButtonMinus); containerPattern->addControl(button); button = new PPButton(BUTTON_PATTERN_SIZE_PLUS, screen, this, PPPoint(x + 2 + 52+18, y+2 + 12), PPSize(16, 11)); button->setText(TrackerConfig::stringButtonPlus); containerPattern->addControl(button); button = new PPButton(BUTTON_PATTERN_SIZE_MINUS, screen, this, PPPoint(x + 2 + 52 + 17+18, y+2 + 12), PPSize(17, 11)); button->setText(TrackerConfig::stringButtonMinus); containerPattern->addControl(button); button = new PPButton(BUTTON_PATTERN_EXPAND, screen, this, PPPoint(x + 3, y+2 + 12 + 12), PPSize(51, 11)); button->setText("Expand"); containerPattern->addControl(button); button = new PPButton(BUTTON_PATTERN_SHRINK, screen, this, PPPoint(x + 3 + 52, y+2 + 12 +12), PPSize(51, 11)); button->setText("Shrink"); containerPattern->addControl(button); screen->addControl(containerPattern); } ///////////////////////////////////////////////////////////// // Build main options section ///////////////////////////////////////////////////////////// void Tracker::initSectionMainOptions(pp_int32 x, pp_int32 y) { pp_int32 i,j; #ifndef __LOWRES__ pp_int32 bHeight = 12; PPSize size(320, 54); #else pp_int32 bHeight = 14; PPSize size(320, 64); #endif PPContainer* container = new PPContainer(CONTAINER_MENU, screen, this, PPPoint(x, y), size, false); container->setColor(TrackerConfig::colorThemeMain); #ifdef __LOWRES__ y+=2; #endif PPButton* button; for (j = 0; j < 4; j++) { for (i = 0; i < 4; i++) { if (j * 4 + i < 15) { button = new PPButton(BUTTON_MENU_ITEM_0 + j*4+i, screen, this, PPPoint(x+4 + i*78, y + 3 + j*bHeight), PPSize(77, bHeight-1)); button->setText("Unused"); container->addControl(button); } } } static_cast(container->getControlByID(MAINMENU_PLAY_SONG))->setText("Play Sng"); static_cast(container->getControlByID(MAINMENU_PLAY_PATTERN))->setText("Play Pat"); //static_cast(container->getControlByID(MAINMENU_STOP))->setText("Stop"); // Setup "Stop" PPButton button = static_cast(container->getControlByID(MAINMENU_STOP)); button->setText("Stop"); button->setSize(PPSize(77>>1, bHeight-1)); // Add "Edit" button button = new PPButton(MAINMENU_EDIT, screen, this, PPPoint(button->getLocation().x + button->getSize().width+1, button->getLocation().y), PPSize(77>>1, bHeight-1), true, true, false); button->setText("Rec"); container->addControl(button); static_cast(container->getControlByID(MAINMENU_ZAP))->setText("Zap"); static_cast(container->getControlByID(MAINMENU_LOAD))->setText("Load"); // Setup "Save" button button = static_cast(container->getControlByID(MAINMENU_SAVE)); button->setText("Save"); button->setSize(PPSize(77>>1, bHeight-1)); // Add "Save As" button button = new PPButton(MAINMENU_SAVEAS, screen, this, PPPoint(button->getLocation().x + button->getSize().width+1, button->getLocation().y), PPSize(77>>1, bHeight-1)); button->setText("As" PPSTR_PERIODS); container->addControl(button); //static_cast(container->getControlByID(MAINMENU_SAVE)); static_cast(container->getControlByID(MAINMENU_DISKMENU))->setText("Disk Op."); static_cast(container->getControlByID(MAINMENU_INSEDIT))->setText("Ins. Ed."); static_cast(container->getControlByID(MAINMENU_SMPEDIT))->setText("Smp. Ed."); static_cast(container->getControlByID(MAINMENU_ADVEDIT))->setText("Adv. Edit"); static_cast(container->getControlByID(MAINMENU_TRANSPOSE))->setText("Transpose"); static_cast(container->getControlByID(MAINMENU_CONFIG))->setText("Config"); static_cast(container->getControlByID(MAINMENU_QUICKOPTIONS))->setText("Options"); static_cast(container->getControlByID(MAINMENU_OPTIMIZE))->setText("Optimize"); static_cast(container->getControlByID(MAINMENU_ABOUT))->setText("About"); // add/subtract channels button = new PPButton(BUTTON_MENU_ITEM_ADDCHANNELS, screen, this, PPPoint(x+4 + 3*78, y + 3 + 3*bHeight), PPSize((77>>1) - 1, bHeight-1)); button->setText("Add"); container->addControl(button); button = new PPButton(BUTTON_MENU_ITEM_SUBCHANNELS, screen, this, PPPoint(x+4 + 3*78 + (77>>1), y + 3 + 3*bHeight), PPSize((77>>1)+1, bHeight-1)); button->setText("Sub"); container->addControl(button); button = static_cast(container->getControlByID(MAINMENU_PLAY_PATTERN)); button->setText("Pat"); button->setSize(PPSize((77>>1)-1, bHeight-1)); PPPoint p = button->getLocation(); p.x+=button->getSize().width+1; button = new PPButton(MAINMENU_PLAY_POSITION, screen, this, p, PPSize((77>>1)+1, bHeight-1)); button->setText("Pos"); container->addControl(button); screen->addControl(container); } void Tracker::initListboxesSection(pp_int32 x, pp_int32 y) { pp_int32 size = (screen->getWidth()-x) / 2 - 4; if (size > 236) size = 236; #ifndef __LOWRES__ const pp_int32 tinyButtonHeight = 10; const pp_int32 tinyButtonOffset = -1; pp_int32 height = 118; pp_int32 dy = 4; #else const pp_int32 tinyButtonHeight = 9; const pp_int32 tinyButtonOffset = -1; pp_int32 height = 64; pp_int32 dy = 3; #endif PPButton* button; // Crippled main menu & jam menu #ifdef __LOWRES__ pp_int32 myDx = 55; { pp_int32 bHeight = 14; pp_int32 x2 = x+4; pp_int32 y2 = y+2+3; PPContainer* container = new PPContainer(CONTAINER_LOWRES_TINYMENU, screen, this, PPPoint(x, y), PPSize((size-myDx)+7,height), false); container->setColor(TrackerConfig::colorThemeMain); button = new PPButton(MAINMENU_PLAY_SONG, screen, this, PPPoint(x2, y2), PPSize(73, bHeight-1)); button->setText("Play Sng"); container->addControl(button); button = new PPButton(MAINMENU_PLAY_PATTERN, screen, this, PPPoint(x2, y2 + 1*bHeight), PPSize(73, bHeight-1)); button->setText("Play Pat"); container->addControl(button); /*button = new PPButton(MAINMENU_STOP, screen, this, PPPoint(x2, y2 + 2*bHeight), PPSize(73, bHeight-1)); button->setText("Stop"); container->addControl(button);*/ button = new PPButton(MAINMENU_STOP, screen, this, PPPoint(x2, y2 + 2*bHeight), PPSize((73>>1) - 1, bHeight-1)); button->setText("Stop"); container->addControl(button); button = new PPButton(MAINMENU_EDIT, screen, this, PPPoint(x2 + (73>>1), y2 + 2*bHeight), PPSize((73>>1)+1, bHeight-1), true, true, false); button->setText("Rec"); container->addControl(button); button = new PPButton(BUTTON_MENU_ITEM_ADDCHANNELS, screen, this, PPPoint(x2, y2 + 3*bHeight), PPSize((73>>1) - 1, bHeight-1)); button->setText("Add"); container->addControl(button); button = new PPButton(BUTTON_MENU_ITEM_SUBCHANNELS, screen, this, PPPoint(x2 + (73>>1), y2 + 3*bHeight), PPSize((73>>1)+1, bHeight-1)); button->setText("Sub"); container->addControl(button); x2+=74; button = new PPButton(MAINMENU_INSEDIT, screen, this, PPPoint(x2, y2), PPSize(26, bHeight-1)); button->setText("Ins"); container->addControl(button); button = new PPButton(MAINMENU_SMPEDIT, screen, this, PPPoint(x2, y2 + 1*bHeight), PPSize(26, bHeight-1)); button->setText("Smp"); container->addControl(button); button = new PPButton(MAINMENU_ADVEDIT, screen, this, PPPoint(x2, y2 + 2*bHeight), PPSize(26, bHeight-1)); button->setText("Adv"); container->addControl(button); button = new PPButton(MAINMENU_TRANSPOSE, screen, this, PPPoint(x2, y2 + 3*bHeight), PPSize(26, bHeight-1)); button->setText("Trn"); container->addControl(button); // play pattern/position button = static_cast(container->getControlByID(MAINMENU_PLAY_PATTERN)); button->setText("Pat"); button->setSize(PPSize((73>>1)-1, bHeight-1)); PPPoint p = button->getLocation(); p.x+=button->getSize().width+1; button = new PPButton(MAINMENU_PLAY_POSITION, screen, this, p, PPSize((73>>1)+1, bHeight-1)); button->setText("Pos"); container->addControl(button); screen->addControl(container); x+=(size-myDx)+7; } size-=4; { pp_int32 height2 = height + 39 + 14; pp_int32 y3 = y - 39 - 14; pp_int32 x2 = 0+4; PPContainer* container = new PPContainer(CONTAINER_LOWRES_JAMMENU, screen, this, PPPoint(0, y3), PPSize(screen->getWidth(),height2), false); container->setColor(TrackerConfig::colorThemeMain); pp_int32 bHeight = 12; pp_int32 y2 = y3 + 1; PianoControl* pianoControl = new PianoControl(PIANO_CONTROL, screen, inputControlListener, PPPoint(container->getLocation().x+2, y2), PPSize(screen->getWidth() - 4, 25*3+12), ModuleEditor::MAX_NOTE); // show C-3 pianoControl->setBorderColor(TrackerConfig::colorThemeMain); pianoControl->setMode(PianoControl::ModePlay); pianoControl->setxScale(6); pianoControl->setyScale(3); pianoControl->assureNoteVisible(12*4); container->addControl(pianoControl); x2 = 0+4; y2+=pianoControl->getSize().height+1; PPStaticText* staticText = new PPStaticText(0, NULL, NULL, PPPoint(x2, y2+2), "Pos", true); container->addControl(staticText); staticText = new PPStaticText(STATICTEXT_JAMMENU_CURORDER, NULL, NULL, PPPoint(x2 + 3*8+4, y2+2), "FF"); container->addControl(staticText); button = new PPButton(BUTTON_JAMMENU_NEXTORDERLIST, screen, this, PPPoint(x2 + 5*8+4 + 1, y2), PPSize(12, 11)); button->setText(TrackerConfig::stringButtonPlus); container->addControl(button); button = new PPButton(BUTTON_JAMMENU_PREVORDERLIST, screen, this, PPPoint(button->getLocation().x + button->getSize().width+1, y2), PPSize(12, 11)); button->setText(TrackerConfig::stringButtonMinus); container->addControl(button); pp_int32 x3 = button->getLocation().x + button->getSize().width+3; staticText = new PPStaticText(0, NULL, NULL, PPPoint(x3, y2+2), "Pat", true); container->addControl(staticText); staticText = new PPStaticText(STATICTEXT_JAMMENU_CURPATTERN, NULL, NULL, PPPoint(x3 + 3*8+4, y2+2), "FF"); container->addControl(staticText); button = new PPButton(BUTTON_PATTERN_PLUS, screen, this, PPPoint(x3 + 5*8+4 + 1, y2), PPSize(12, 11)); button->setText(TrackerConfig::stringButtonPlus); container->addControl(button); button = new PPButton(BUTTON_PATTERN_MINUS, screen, this, PPPoint(button->getLocation().x + button->getSize().width+1, y2), PPSize(12, 11)); button->setText(TrackerConfig::stringButtonMinus); container->addControl(button); x3 = button->getLocation().x + button->getSize().width+3; staticText = new PPStaticText(0, NULL, NULL, PPPoint(x3, y2+2), "Ins", true); container->addControl(staticText); staticText = new PPStaticText(STATICTEXT_JAMMENU_CURINSTRUMENT, NULL, NULL, PPPoint(x3 + 3*8+4, y2+2), "FF"); container->addControl(staticText); button = new PPButton(BUTTON_JAMMENU_NEXTINSTRUMENT, screen, this, PPPoint(x3 + 5*8+4 + 1, y2), PPSize(12, 11)); button->setText(TrackerConfig::stringButtonUp); container->addControl(button); button = new PPButton(BUTTON_JAMMENU_PREVINSTRUMENT, screen, this, PPPoint(button->getLocation().x + button->getSize().width+1, y2), PPSize(12, 11)); button->setText(TrackerConfig::stringButtonDown); container->addControl(button); button = new PPButton(INPUT_BUTTON_INS, screen, inputControlListener, PPPoint(button->getLocation().x + button->getSize().width+1 + 2, y2), PPSize(17, 11)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Ins"); container->addControl(button); button = new PPButton(INPUT_BUTTON_DEL, screen, inputControlListener, PPPoint(button->getLocation().x + button->getSize().width+1, y2), PPSize(17, 11)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Del"); container->addControl(button); button = new PPButton(INPUT_BUTTON_BACK, screen, inputControlListener, PPPoint(button->getLocation().x + button->getSize().width+1, y2), PPSize(22, 11)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Back"); container->addControl(button); button = new PPButton(INPUT_BUTTON_KEYOFF, screen, inputControlListener, PPPoint(button->getLocation().x + button->getSize().width+1, y2), PPSize(17, 11)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Off"); container->addControl(button); button = new PPButton(BUTTON_JAMMENU_TOGGLEPIANOSIZE, screen, this, PPPoint(button->getLocation().x + button->getSize().width+3, y2+1), PPSize(12, 11), false); button->setColor(TrackerConfig::colorThemeMain); button->setTextColor(PPUIConfig::getInstance()->getColor(PPUIConfig::ColorStaticText)); button->setText(TrackerConfig::stringButtonCollapsed); container->addControl(button); x2 = 0+4; y2+=14; button = new PPButton(MAINMENU_PLAY_SONG, screen, this, PPPoint(x2, y2), PPSize(77, bHeight-1)); button->setText("Play Sng"); container->addControl(button); x2+=button->getSize().width+1; button = new PPButton(MAINMENU_PLAY_PATTERN, screen, this, PPPoint(x2, y2), PPSize((77>>1)-1, bHeight-1)); button->setText("Pat"); container->addControl(button); x2+=button->getSize().width+1; button = new PPButton(MAINMENU_PLAY_POSITION, screen, this, PPPoint(x2, y2), PPSize((77>>1)+1, bHeight-1)); button->setText("Pos"); container->addControl(button); x2+=button->getSize().width+1; button = new PPButton(MAINMENU_STOP, screen, this, PPPoint(x2, y2), PPSize((77>>1), bHeight-1)); button->setText("Stop"); container->addControl(button); // Add "Edit" button x2+=button->getSize().width+1; button = new PPButton(MAINMENU_EDIT, screen, this, PPPoint(x2, y2), PPSize((77>>1), bHeight-1), true, true, false); button->setText("Rec"); container->addControl(button); x2+=button->getSize().width+1; button = new PPButton(BUTTON_MENU_ITEM_ADDCHANNELS, screen, this, PPPoint(x2, y2), PPSize((77>>1) - 1, bHeight-1)); button->setText("Add"); container->addControl(button); x2+=button->getSize().width+1; button = new PPButton(BUTTON_MENU_ITEM_SUBCHANNELS, screen, this, PPPoint(x2, y2), PPSize((77>>1)+1, bHeight-1)); button->setText("Sub"); container->addControl(button); screen->addControl(container); } #else pp_int32 myDx = 0; #endif PPContainer* container = new PPContainer(CONTAINER_INSTRUMENTLIST, screen, this, PPPoint(x, y), PPSize(screen->getWidth()-x,height), false); container->setColor(TrackerConfig::colorThemeMain); // Instruments #ifndef __LOWRES__ button = new PPButton(BUTTON_INSTRUMENT, screen, this, PPPoint(x+2, y+dy-2), PPSize(screen->getWidth() < 800 ? 3*8+4 : 11*8+4, 12), false, true, false); button->setText(screen->getWidth() < 800 ? "Ins" : "Instruments"); button->setColor(TrackerConfig::colorThemeMain); button->setTextColor(PPUIConfig::getInstance()->getColor(PPUIConfig::ColorStaticText)); button->setPressed(true); //PPStaticText* staticText = new PPStaticText(0, NULL, NULL, PPPoint(x+3, y+dy), screen->getWidth() < 800 ? "Ins" : "Instruments", true); #else button = new PPButton(BUTTON_INSTRUMENT, screen, this, PPPoint(x+2, y+dy-2), PPSize(11*8+4, 11), false, true, false); button->setText("Instruments"); button->setColor(TrackerConfig::colorThemeMain); button->setTextColor(PPUIConfig::getInstance()->getColor(PPUIConfig::ColorStaticText)); button->setPressed(true); { PPStaticText* staticText = new PPStaticText(STATICTEXT_INSTRUMENTS_ALTERNATIVEHEADER, screen, this, PPPoint(x+3, y+dy), "Samples / Ins:", true); staticText->hide(true); container->addControl(staticText); staticText = new PPStaticText(STATICTEXT_INSTRUMENTS_ALTERNATIVEHEADER2, screen, this, PPPoint(x+3 + 14*8, y+dy), "xx", false); staticText->hide(true); container->addControl(staticText); } #endif container->addControl(button); button = new PPButton(BUTTON_INSTRUMENTS_PLUS, screen, this, PPPoint(x+button->getSize().width+4, y+dy+tinyButtonOffset), PPSize(15, tinyButtonHeight)); button->setText(TrackerConfig::stringButtonPlus); container->addControl(button); button = new PPButton(BUTTON_INSTRUMENTS_MINUS, screen, this, PPPoint(button->getLocation().x + 16, y+dy+tinyButtonOffset), PPSize(15, tinyButtonHeight)); button->setText(TrackerConfig::stringButtonMinus); container->addControl(button); #ifndef __LOWRES__ button = new PPButton(BUTTON_INSTRUMENTEDITOR_CLEAR, screen, sectionInstruments, PPPoint(x+2 + size - 2 - 92, y+dy+tinyButtonOffset), PPSize(30, tinyButtonHeight)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Zap"); container->addControl(button); button = new PPButton(BUTTON_INSTRUMENTEDITOR_LOAD, screen, sectionInstruments, PPPoint(x+2 + size - 2 - 61, y+dy+tinyButtonOffset), PPSize(30, tinyButtonHeight)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Load"); container->addControl(button); button = new PPButton(BUTTON_INSTRUMENTEDITOR_SAVE, screen, sectionInstruments, PPPoint(x+2 + size - 2 - 30, y+dy+tinyButtonOffset), PPSize(30, tinyButtonHeight)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Save"); container->addControl(button); #else button = new PPButton(BUTTON_INSTRUMENTS_FLIP, screen, this, PPPoint(container->getLocation().x + container->getSize().width - 27, y+dy+tinyButtonOffset - 1), PPSize(24, 11), false); button->setText("Flip"); button->setColor(TrackerConfig::colorThemeMain); button->setTextColor(PPUIConfig::getInstance()->getColor(PPUIConfig::ColorStaticText)); container->addControl(button); button = new PPButton(BUTTON_JAMMENU_PREVINSTRUMENT, screen, this, PPPoint(button->getLocation().x - 16, y+dy+tinyButtonOffset), PPSize(15, tinyButtonHeight)); button->setText(TrackerConfig::stringButtonUp); container->addControl(button); button = new PPButton(BUTTON_JAMMENU_NEXTINSTRUMENT, screen, this, PPPoint(button->getLocation().x - 16, y+dy+tinyButtonOffset), PPSize(15, tinyButtonHeight)); button->setText(TrackerConfig::stringButtonDown); container->addControl(button); #endif listBoxInstruments = new PPListBox(LISTBOX_INSTRUMENTS, screen, this, PPPoint(x+2, y + 7 + dy + dy), PPSize(size+myDx,height-(10+2*dy)), true, true, true, true); listBoxInstruments->setBorderColor(TrackerConfig::colorThemeMain); listBoxInstruments->setShowIndex(true); listBoxInstruments->setMaxEditSize(ModuleEditor::MAX_INSTEXT); //listBoxInstruments->setSelectOnScroll(true); fillInstrumentListBox(listBoxInstruments); container->addControl(listBoxInstruments); // Samples #ifndef __LOWRES__ button = new PPButton(BUTTON_SAMPLE_EDIT_CLEAR, screen, sectionSamples, PPPoint(x+2 + size*2 + 4 - 2 - 92, y+dy+tinyButtonOffset), PPSize(30, tinyButtonHeight)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Clear"); container->addControl(button); button = new PPButton(BUTTON_SAMPLE_LOAD, screen, sectionSamples, PPPoint(x+2 + size*2 + 4 - 2 - 61, y+dy+tinyButtonOffset), PPSize(30, tinyButtonHeight)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Load"); container->addControl(button); button = new PPButton(BUTTON_SAMPLE_SAVE, screen, sectionSamples, PPPoint(x+2 + size*2 + 4 - 2 - 30, y+dy+tinyButtonOffset), PPSize(30, tinyButtonHeight)); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Save"); container->addControl(button); #endif PPStaticText* staticText = new PPStaticText(STATICTEXT_SAMPLEHEADER, NULL, NULL, PPPoint(x+size+myDx+4+3, y+dy), "Samples", true); container->addControl(staticText); listBoxSamples = new PPListBox(LISTBOX_SAMPLES, screen, this, PPPoint(x+2 + size+4, y + 7 + dy + dy), PPSize(size,height-(10+2*dy)), true, true, true, true); listBoxSamples->setBorderColor(TrackerConfig::colorThemeMain); listBoxSamples->setShowIndex(true); listBoxSamples->setMaxEditSize(ModuleEditor::MAX_SMPTEXT); listBoxSamples->setIndexBaseCount(0); container->addControl(listBoxSamples); #ifdef __LOWRES__ listBoxSamples->hide(true); #endif screen->addControl(container); } void Tracker::showMessageBox(pp_int32 id, const PPString& caption, MessageBoxTypes type, bool update/* = true*/) { showMessageBoxSized(id, caption, type, 290, 74, update); } void Tracker::showMessageBoxSized(pp_int32 id, const PPString& caption, MessageBoxTypes type, pp_int32 width/* = -1*/, pp_int32 height/* = -1*/, bool update/* = true*/) { if (messageBoxContainerGeneric) { delete messageBoxContainerGeneric; messageBoxContainerGeneric = NULL; } PPSimpleVector* stringList = PPTools::extractStringList(caption); if (height == -1) height = 62 + stringList->size()*12; if (width == -1) width = 290; pp_int32 x = screen->getWidth() / 2 - width/2; pp_int32 y = screen->getHeight() / 2 - height/2; PPMessageBoxContainer* container = new PPMessageBoxContainer(id, screen, this, PPPoint(x, y), PPSize(width,height), "System request"); pp_int32 x2; pp_int32 y2; y2 = y + 28; for (pp_int32 i = 0; i < stringList->size(); i++) { PPString* str = stringList->get(i); x2 = x + width / 2 - (PPFont::getFont(PPFont::FONT_SYSTEM)->getStrWidth(*str) / 2); container->addControl(new PPStaticText(1 + i, screen, this, PPPoint(x2, y2), *str, true)); y2+=12; } delete stringList; y2 = y + height - 46; if (type == MessageBox_OK) { PPButton* button = new PPButton(PP_MESSAGEBOX_BUTTON_YES, screen, this, PPPoint(x+width/2-30, y2 + 20), PPSize(60, 11)); button->setText("Okay"); container->addControl(button); } else if (type == MessageBox_YESNO) { PPButton* button = new PPButton(PP_MESSAGEBOX_BUTTON_YES, screen, this, PPPoint(x+width/2-65, y2 + 20), PPSize(60, 11)); button->setText("Yes"); container->addControl(button); button = new PPButton(PP_MESSAGEBOX_BUTTON_NO, screen, this, PPPoint(x+width/2+5, y2 + 20), PPSize(60, 11)); button->setText("No"); container->addControl(button); } else if (type == MessageBox_YESNOCANCEL) { PPButton* button = new PPButton(PP_MESSAGEBOX_BUTTON_YES, screen, this, PPPoint(x+width/2-100, y2 + 20), PPSize(60, 11)); button->setText("Yes"); container->addControl(button); button = new PPButton(PP_MESSAGEBOX_BUTTON_NO, screen, this, PPPoint(x+width/2-30, y2 + 20), PPSize(60, 11)); button->setText("No"); container->addControl(button); button = new PPButton(PP_MESSAGEBOX_BUTTON_CANCEL, screen, this, PPPoint(x+width/2+40, y2 + 20), PPSize(60, 11)); button->setText("Cancel"); container->addControl(button); } messageBoxContainerGeneric = container; screen->setModalControl(messageBoxContainerGeneric, update); } void Tracker::showQuitMessageBox(const char* caption, const char* captionOk, const char* captionCancel) { showMessageBoxSized(MESSAGEBOX_REALLYQUIT, caption, MessageBox_YESNO, -1, -1, false); if (captionOk) { PPButton* button = static_cast(messageBoxContainerGeneric->getControlByID(PP_MESSAGEBOX_BUTTON_YES)); button->setText(captionOk); } if (captionCancel) { PPButton* button = static_cast(messageBoxContainerGeneric->getControlByID(PP_MESSAGEBOX_BUTTON_NO)); button->setText(captionCancel); } screen->paint(); } void Tracker::initInstrumentChooser(pp_int32 id, const PPString& buttonText1, const PPString& buttonText2, const PPString& caption, const PPString& userString1, const PPString& userString2, pp_int32 srcSelection/* = -1*/, pp_int32 srcSelection2/* = -1*/, pp_int32 srcSelection3/* = -1*/) { if (instrumentChooser) { delete instrumentChooser; instrumentChooser = NULL; } const pp_uint32 spacer = 10; PPString buttonText1_2 = buttonText1; buttonText1_2.append("++"); PPString buttonText2_2 = buttonText2; buttonText2_2.append("++"); const pp_int32 height = (screen->getHeight() >= 480) ? 380 : screen->getHeight(); const pp_int32 width = (screen->getWidth()-10) > 480 ? 480 : screen->getWidth(); pp_int32 x = screen->getWidth() / 2 - width/2; pp_int32 y = screen->getHeight() / 2 - height/2; PPMessageBoxContainer* container = new PPMessageBoxContainer(id, screen, this, PPPoint(x, y), PPSize(width,height), caption); // ------------- source listboxes --------------------------------- pp_int32 x2 = x + 5; pp_int32 y2 = y + 18; pp_int32 lBoxHeight = ((height-100)/2) & ~1; PPString str; PPListBox* listBoxInstrumentsSrc = NULL; PPListBox* listBoxSamplesSrc = NULL; PPListBox* listBoxModulesSrc = NULL; PPListBox* listBoxInstrumentsDst = NULL; PPListBox* listBoxSamplesDst = NULL; PPListBox* listBoxModulesDst = NULL; if (tabManager->getNumTabs() > 1) { listBoxModulesSrc = new PPListBox(INSTRUMENT_CHOOSER_LIST_SRC3, screen, this, PPPoint(x2-2, y2 + 10), PPSize((width-10)/2,lBoxHeight), true, false, true, true); listBoxModulesSrc->setShowIndex(true); fillModuleListBox(listBoxModulesSrc); if (srcSelection3 >= 0) listBoxModulesSrc->setSelectedIndex(srcSelection3, false); container->addControl(listBoxModulesSrc); str = "From Module:"; container->addControl(new PPStaticText(0, screen, this, PPPoint(x2, y2), str, true)); PPButton* button = new PPButton(PP_MESSAGEBOX_BUTTON_USER5, screen, this, PPPoint(x2 - 2 + (width-10) / 2 - 50 - 1, y2-1), PPSize(50, 10)); button->setText("From<->To"); container->addControl(button); x2+=3+(width-10)/2+2; pp_int32 temp = lBoxHeight; lBoxHeight = lBoxHeight / 2 - 6; str = "From Ins:"; container->addControl(new PPStaticText(0, screen, this, PPPoint(x2, y2), str, true)); button = new PPButton(PP_MESSAGEBOX_BUTTON_USER10, screen, this, PPPoint(x2 + 9*8+4, y2-1), PPSize(14, 10)); button->setText("+"); container->addControl(button); button = new PPButton(PP_MESSAGEBOX_BUTTON_USER11, screen, this, PPPoint(x2 + 9*8+4 + 14 + 1, y2-1), PPSize(14, 10)); button->setText("-"); container->addControl(button); listBoxInstrumentsSrc = new PPListBox(INSTRUMENT_CHOOSER_LIST_SRC, screen, this, PPPoint(x2-2, y2 + 10), PPSize((width-10)/2-1,lBoxHeight), true, false, true, true); listBoxInstrumentsSrc->setShowIndex(true); fillInstrumentListBox(listBoxInstrumentsSrc, tabManager->getModuleEditorFromTabIndex(listBoxModulesSrc->getSelectedIndex())); if (srcSelection >= 0) listBoxInstrumentsSrc->setSelectedIndex(srcSelection, false); container->addControl(listBoxInstrumentsSrc); y2+=listBoxInstrumentsSrc->getSize().height+12; str = "From Smp:"; container->addControl(new PPStaticText(0, screen, this, PPPoint(x2, y2), str, true)); button = new PPButton(PP_MESSAGEBOX_BUTTON_USER6, screen, this, PPPoint(x2 + 9*8+4, y2-1), PPSize(24, 10)); button->setText("Play"); container->addControl(button); listBoxSamplesSrc = new PPListBox(INSTRUMENT_CHOOSER_LIST_SRC2, screen, this, PPPoint(x2-2, y2 + 10), PPSize((width-10)/2-1,lBoxHeight), true, false, true, true); listBoxSamplesSrc->setShowIndex(true); listBoxSamplesSrc->setIndexBaseCount(0); fillSampleListBox(listBoxSamplesSrc, listBoxInstrumentsSrc->getSelectedIndex(), tabManager->getModuleEditorFromTabIndex(listBoxModulesSrc->getSelectedIndex())); if (srcSelection2 >= 0) listBoxSamplesSrc->setSelectedIndex(srcSelection2, false); container->addControl(listBoxSamplesSrc); lBoxHeight = temp; } else { str = "From Ins:"; container->addControl(new PPStaticText(0, screen, this, PPPoint(x2, y2), str, true)); PPButton* button = new PPButton(PP_MESSAGEBOX_BUTTON_USER10, screen, this, PPPoint(x2 + 9*8+4, y2-1), PPSize(14, 10)); button->setText("+"); container->addControl(button); button = new PPButton(PP_MESSAGEBOX_BUTTON_USER11, screen, this, PPPoint(x2 + 9*8+4 + 14 + 1, y2-1), PPSize(14, 10)); button->setText("-"); container->addControl(button); listBoxInstrumentsSrc = new PPListBox(INSTRUMENT_CHOOSER_LIST_SRC, screen, this, PPPoint(x+3, y2 + 10), PPSize((width-10)/2,lBoxHeight), true, false, true, true); listBoxInstrumentsSrc->setShowIndex(true); fillInstrumentListBox(listBoxInstrumentsSrc); if (srcSelection >= 0) listBoxInstrumentsSrc->setSelectedIndex(srcSelection, false); container->addControl(listBoxInstrumentsSrc); y2 = y+18; lBoxHeight = ((height-100)/2) & ~1; str = "From Smp:"; x2+=3+(width-10)/2+2; container->addControl(new PPStaticText(0, screen, this, PPPoint(x2, y2), str, true)); button = new PPButton(PP_MESSAGEBOX_BUTTON_USER6, screen, this, PPPoint(x2 + 9*8+4, y2-1), PPSize(24, 10)); button->setText("Play"); container->addControl(button); listBoxSamplesSrc = new PPListBox(INSTRUMENT_CHOOSER_LIST_SRC2, screen, this, PPPoint(x+3+(width-10)/2+4, y2 + 10), PPSize((width-10)/2-1,lBoxHeight), true, false, true, true); listBoxSamplesSrc->setShowIndex(true); listBoxSamplesSrc->setIndexBaseCount(0); fillSampleListBox(listBoxSamplesSrc, listBoxInstrumentsSrc->getSelectedIndex()); if (srcSelection2 >= 0) listBoxSamplesSrc->setSelectedIndex(srcSelection2, false); container->addControl(listBoxSamplesSrc); } y2+=listBoxSamplesSrc->getSize().height+12 + 3; pp_int32 temp = PPFont::getFont(PPFont::FONT_SYSTEM)->getStrWidth(userString1) + 10 + PPFont::getFont(PPFont::FONT_SYSTEM)->getStrWidth(buttonText1) + 4 + spacer + PPFont::getFont(PPFont::FONT_SYSTEM)->getStrWidth(buttonText1_2) + 4 + spacer; x2 = x + width / 2 - (temp / 2); pp_int32 y3 = y2; PPStaticText* text = new PPStaticText(INSTRUMENT_CHOOSER_USERSTR1, screen, this, PPPoint(x2, y2), userString1, true); container->addControl(text); PPButton* button = new PPButton(PP_MESSAGEBOX_BUTTON_USER1, screen, this, PPPoint(text->getLocation().x + text->getSize().width+spacer+10, y2-2), PPSize(PPFont::getFont(PPFont::FONT_SYSTEM)->getStrWidth(buttonText1) + 4, 11)); button->setText(buttonText1); container->addControl(button); button = new PPButton(PP_MESSAGEBOX_BUTTON_USER3, screen, this, PPPoint(button->getLocation().x + button->getSize().width+spacer, y2-2), PPSize(PPFont::getFont(PPFont::FONT_SYSTEM)->getStrWidth(buttonText1_2) + 4, 11)); button->setText(buttonText1_2); container->addControl(button); // ------------- destination listboxes --------------------------------- y2+=12; container->addControl(new PPSeperator(0, screen, PPPoint(x+4, y2), width-8, container->getColor(), true)); y2+=4; temp = y2; pp_int32 temp2 = lBoxHeight; x2 = x + 5; if (tabManager->getNumTabs() > 1) { listBoxModulesDst = new PPListBox(INSTRUMENT_CHOOSER_LIST_DST3, screen, this, PPPoint(x2-2, y2 + 10), PPSize((width-10)/2,lBoxHeight), true, false, true, true); listBoxModulesDst->setShowIndex(true); fillModuleListBox(listBoxModulesDst); container->addControl(listBoxModulesDst); str = "To Module:"; container->addControl(new PPStaticText(0, screen, this, PPPoint(x2, y2), str, true)); PPButton* button = new PPButton(PP_MESSAGEBOX_BUTTON_USER5, screen, this, PPPoint(x2 - 2 + (width-10) / 2 - 50 - 1, y2-1), PPSize(50, 10)); button->setText("To<->From"); container->addControl(button); x2+=3+(width-10)/2+2; lBoxHeight = lBoxHeight / 2 - 6; str = "To Ins:"; container->addControl(new PPStaticText(0, screen, this, PPPoint(x2, y2), str, true)); button = new PPButton(PP_MESSAGEBOX_BUTTON_USER12, screen, this, PPPoint(x2 + 7*8+4, y2-1), PPSize(14, 10)); button->setText("+"); container->addControl(button); button = new PPButton(PP_MESSAGEBOX_BUTTON_USER13, screen, this, PPPoint(x2 + 7*8+4 + 14 + 1, y2-1), PPSize(14, 10)); button->setText("-"); container->addControl(button); listBoxInstrumentsDst = new PPListBox(INSTRUMENT_CHOOSER_LIST_DST, screen, this, PPPoint(x2-2, y2 + 10), PPSize((width-10)/2-1,lBoxHeight), true, false, true, true); listBoxInstrumentsDst->setShowIndex(true); fillInstrumentListBox(listBoxInstrumentsDst, tabManager->getModuleEditorFromTabIndex(listBoxModulesDst->getSelectedIndex())); container->addControl(listBoxInstrumentsDst); y2+=listBoxInstrumentsDst->getSize().height+12; str = "To Smp:"; container->addControl(new PPStaticText(0, screen, this, PPPoint(x2, y2), str, true)); button = new PPButton(PP_MESSAGEBOX_BUTTON_USER7, screen, this, PPPoint(x2 + 7*8+4, y2-1), PPSize(24, 10)); button->setText("Play"); container->addControl(button); listBoxSamplesDst = new PPListBox(INSTRUMENT_CHOOSER_LIST_DST2, screen, this, PPPoint(x2-2, y2 + 10), PPSize((width-10)/2-1,lBoxHeight), true, false, true, true); listBoxSamplesDst->setShowIndex(true); listBoxSamplesDst->setIndexBaseCount(0); fillSampleListBox(listBoxSamplesDst, listBoxInstrumentsDst->getSelectedIndex(), tabManager->getModuleEditorFromTabIndex(listBoxModulesDst->getSelectedIndex())); container->addControl(listBoxSamplesDst); } else { str = "To Ins:"; container->addControl(new PPStaticText(0, screen, this, PPPoint(x2, y2), str, true)); PPButton* button = new PPButton(PP_MESSAGEBOX_BUTTON_USER12, screen, this, PPPoint(x2 + 7*8+4, y2-1), PPSize(14, 10)); button->setText("+"); container->addControl(button); button = new PPButton(PP_MESSAGEBOX_BUTTON_USER13, screen, this, PPPoint(x2 + 7*8+4 + 14 + 1, y2-1), PPSize(14, 10)); button->setText("-"); container->addControl(button); // put in here listBoxInstrumentsDst = new PPListBox(INSTRUMENT_CHOOSER_LIST_DST, screen, this, PPPoint(x+3, y2 + 10), PPSize((width-10)/2,lBoxHeight), true, false, true, true); listBoxInstrumentsDst->setShowIndex(true); fillInstrumentListBox(listBoxInstrumentsDst); container->addControl(listBoxInstrumentsDst); y2 = temp; lBoxHeight = temp2; str = "To Smp:"; //x2 = x + width / 2 - (PPFont::getFont(PPFont::FONT_SYSTEM)->getStrWidth(str2) / 2); //y2+=listBoxInstruments->getSize().height+16; x2+=3+(width-10)/2+2; container->addControl(new PPStaticText(0, screen, this, PPPoint(x2, y2), str, true)); button = new PPButton(PP_MESSAGEBOX_BUTTON_USER7, screen, this, PPPoint(x2 + 7*8+4, y2-1), PPSize(24, 10)); button->setText("Play"); container->addControl(button); listBoxSamplesDst = new PPListBox(INSTRUMENT_CHOOSER_LIST_DST2, screen, this, PPPoint(x+3+(width-10)/2+4, y2 + 10), PPSize((width-10)/2-1,lBoxHeight), true, false, true, true); listBoxSamplesDst->setShowIndex(true); listBoxSamplesDst->setIndexBaseCount(0); fillSampleListBox(listBoxSamplesDst, listBoxInstrumentsDst->getSelectedIndex()); container->addControl(listBoxSamplesDst); } y2+=listBoxSamplesDst->getSize().height+12 + 3; temp = PPFont::getFont(PPFont::FONT_SYSTEM)->getStrWidth(userString2) + 10 + PPFont::getFont(PPFont::FONT_SYSTEM)->getStrWidth(buttonText2) + 4 + spacer + PPFont::getFont(PPFont::FONT_SYSTEM)->getStrWidth(buttonText2_2) + 4 + spacer; x2 = x + width / 2 - (temp / 2); y3 = y2; text = new PPStaticText(INSTRUMENT_CHOOSER_USERSTR2, screen, this, PPPoint(x2, y2), userString2, true); container->addControl(text); button = new PPButton(PP_MESSAGEBOX_BUTTON_USER2, screen, this, PPPoint(text->getLocation().x + text->getSize().width+spacer+10, y2-2), PPSize(PPFont::getFont(PPFont::FONT_SYSTEM)->getStrWidth(buttonText2) + 4, 11)); button->setText(buttonText2); container->addControl(button); button = new PPButton(PP_MESSAGEBOX_BUTTON_USER4, screen, this, PPPoint(button->getLocation().x + button->getSize().width+spacer, y2-2), PPSize(PPFont::getFont(PPFont::FONT_SYSTEM)->getStrWidth(buttonText2_2) + 4, 11)); button->setText(buttonText2_2); container->addControl(button); // Buttons y2+=12; container->addControl(new PPSeperator(0, screen, PPPoint(x+4, y2), width-8, container->getColor(), true)); y2+=7; //PPButton* button = new PPButton(MESSAGEBOX_BUTTON_USER1, screen, this, PPPoint(x+width/2-75-35, y2), PPSize(70, 11)); //button->setText(buttonText1); //container->addControl(button); //button = new PPButton(MESSAGEBOX_BUTTON_USER2, screen, this, PPPoint(x+width/2-35, y2), PPSize(70, 11)); //button->setText(buttonText2); //container->addControl(button); button = new PPButton(PP_MESSAGEBOX_BUTTON_CANCEL, screen, this, PPPoint(x+width/2-35, y2), PPSize(70, 11)); button->setText("Cancel"); container->addControl(button); instrumentChooser = container; } void Tracker::initAdvEdit() { const pp_int32 buttonIDs[4] = {PP_MESSAGEBOX_BUTTON_USER1, PP_MESSAGEBOX_BUTTON_USER2, PP_MESSAGEBOX_BUTTON_USER3, PP_MESSAGEBOX_BUTTON_USER4}; const char* buttonTexts[4] = {"Track", "Pattern", "Song", "Block"}; char buffer[100]; sprintf(buffer, "Remap ins. %x to %x", listBoxInstruments->getSelectedIndex()+1, 1); //initInstrumentChooser(MESSAGEBOX_INSREMAP, "", "Instrument remapping", "",buffer, "",listBoxInstruments->getSelectedIndex()); // old instrument chooser / just inserted ;) { PPString userString = buffer; pp_int32 srcSelection = listBoxInstruments->getSelectedIndex(); if (instrumentChooser) { delete instrumentChooser; instrumentChooser = NULL; } const pp_int32 height = 222; const pp_int32 width = (screen->getWidth()-10) > 480 ? 480 : (screen->getWidth()-10); pp_int32 x = screen->getWidth() / 2 - width/2; pp_int32 y = screen->getHeight() / 2 - height/2; PPMessageBoxContainer* container = new PPMessageBoxContainer(MESSAGEBOX_INSREMAP, screen, this, PPPoint(x, y), PPSize(width,height), "Instrument remapping"); const PPString str = "From:"; pp_int32 x2 = x + 5; pp_int32 y2 = y + 20; container->addControl(new PPStaticText(0, screen, this, PPPoint(x2, y2), str, true)); const pp_int32 lBoxHeight = height-90; PPListBox* listBoxInstruments = new PPListBox(INSTRUMENT_CHOOSER_LIST_SRC, screen, this, PPPoint(x+3, y2 + 12), PPSize((width-10)/2,lBoxHeight), true, false, true, true); listBoxInstruments->setShowIndex(true); fillInstrumentListBox(listBoxInstruments); if (srcSelection >= 0) listBoxInstruments->setSelectedIndex(srcSelection, false); container->addControl(listBoxInstruments); PPString str2 = "To:"; x2+=3+(width-10)/2+2; container->addControl(new PPStaticText(0, screen, this, PPPoint(x2, y2), str2, true)); listBoxInstruments = new PPListBox(INSTRUMENT_CHOOSER_LIST_DST, screen, this, PPPoint(x+3+(width-10)/2+4, y2 + 12), PPSize((width-10)/2,lBoxHeight), true, false, true, true); listBoxInstruments->setShowIndex(true); fillInstrumentListBox(listBoxInstruments); container->addControl(listBoxInstruments); y2+=listBoxInstruments->getSize().height+12 + 6 + 30; PPButton* button = new PPButton(PP_MESSAGEBOX_BUTTON_USER1, screen, this, PPPoint(x+width/2-65, y2), PPSize(60, 11)); button->setText(""); container->addControl(button); button = new PPButton(PP_MESSAGEBOX_BUTTON_CANCEL, screen, this, PPPoint(x+width/2+5, y2), PPSize(60, 11)); button->setText("Cancel"); container->addControl(button); x2 = x + width / 2 - (PPFont::getFont(PPFont::FONT_SYSTEM)->getStrWidth(userString) / 2); container->addControl(new PPStaticText(INSTRUMENT_CHOOSER_USERSTR1, screen, this, PPPoint(x2, y2 - 21), userString, true)); instrumentChooser = container; } // modify current instrument chooser dialog if (instrumentChooser) { const pp_int32 spacer = 10; PPControl* ctrl = instrumentChooser->getControlByID(PP_MESSAGEBOX_BUTTON_USER1); pp_int32 y2 = ctrl->getLocation().y - 16; pp_int32 buttonWidth = ctrl->getSize().width; pp_int32 buttonHeight = ctrl->getSize().height; pp_int32 cx = ((buttonWidth) * 4 + spacer*3)/2; bool b = instrumentChooser->removeControl(ctrl); ASSERT(b); b = instrumentChooser->removeControl(instrumentChooser->getControlByID(PP_MESSAGEBOX_BUTTON_CANCEL)); ASSERT(b); pp_int32 width = instrumentChooser->getSize().width; pp_int32 x = instrumentChooser->getLocation().x + width/2 - cx; for (pp_int32 i = 0; i < 4; i++) { PPButton* button = new PPButton(buttonIDs[i], screen, this, PPPoint(x, y2), PPSize(buttonWidth, buttonHeight)); button->setText(buttonTexts[i]); instrumentChooser->addControl(button); x+= buttonWidth + spacer; } x-=buttonWidth + spacer; y2+=6 + buttonHeight; PPButton* button = new PPButton(PP_MESSAGEBOX_BUTTON_CANCEL, screen, this, PPPoint(x, y2), PPSize(buttonWidth, buttonHeight)); button->setText("Cancel"); instrumentChooser->addControl(button); ctrl = instrumentChooser->getControlByID(INSTRUMENT_CHOOSER_USERSTR1); y2 = ctrl->getLocation().y - 11; x = ctrl->getLocation().x; ctrl->setLocation(PPPoint(x, y2)); } screen->setModalControl(instrumentChooser); } void Tracker::initInputContainerDefault(pp_int32 x, pp_int32 y) { PPContainer* container = new PPContainer(CONTAINER_INPUTDEFAULT, screen, this, PPPoint(0, y), PPSize(screen->getWidth(),INPUTCONTAINERHEIGHT_DEFAULT), false); container->setColor(TrackerConfig::colorThemeMain); PPButton* button; pp_int32 bWidth = 11; pp_int32 bHeight = 12; pp_int32 j,i; for (j = 0; j < 2; j++) for (i = 0; i < 8; i++) { char buffer[4]; PPTools::convertToHex(buffer, j*8+i, 1); button = new PPButton(INPUT_BUTTON_0 + j*8+i, screen, inputControlListener, PPPoint(x+2 + i*(bWidth), y + 2 + j*(bHeight)), PPSize(bWidth, bHeight), false, true, true); button->setText(buffer); container->addControl(button); } pp_int32 y2 = y + /*2*(bHeight+1)+*/2; pp_int32 x2 = x + 3 + 8*(bWidth); bWidth = 22; pp_int32 x3 = x2-1; button = new PPButton(INPUT_BUTTON_DEL, screen, inputControlListener, PPPoint(x3, y2), PPSize(bWidth, bHeight), false, true, true); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Del"); container->addControl(button); y2+=button->getSize().height; button = new PPButton(INPUT_BUTTON_INS, screen, inputControlListener, PPPoint(x3, y2), PPSize(bWidth, bHeight), false, true, true); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Ins"); container->addControl(button); y2+=button->getSize().height; button = new PPButton(INPUT_BUTTON_BACK, screen, inputControlListener, PPPoint(x3, y2), PPSize(bWidth, bHeight), false, true, true); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Back"); container->addControl(button); x2+=button->getSize().width; x3+=button->getSize().width; x3 = x+2; bWidth = 44; button = new PPButton(INPUT_BUTTON_INSLINE, screen, inputControlListener, PPPoint(x3, y2), PPSize(bWidth, bHeight), false, true, true); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Insline"); container->addControl(button); x3+=button->getSize().width; button = new PPButton(INPUT_BUTTON_BACKLINE, screen, inputControlListener, PPPoint(x3, y2), PPSize(bWidth, bHeight), false, true, true); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Backline"); container->addControl(button); // piano test PianoControl* pianoControl = new PianoControl(PIANO_CONTROL, screen, inputControlListener, PPPoint(x2, y+1), PPSize(screen->getWidth() - 2 - x2 - (21+2), 25+12), ModuleEditor::MAX_NOTE); // show C-3 pianoControl->assureNoteVisible(12*4); pianoControl->setBorderColor(TrackerConfig::colorThemeMain); pianoControl->setMode(PianoControl::ModePlay); container->addControl(pianoControl); x2+=1+pianoControl->getSize().width; button = new PPButton(INPUT_BUTTON_KEYOFF, screen, inputControlListener, PPPoint(x2, y+2), PPSize(22, 18), false, true, true); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Off"); container->addControl(button); button = new PPButton(INPUT_BUTTON_EXPAND, screen, inputControlListener, PPPoint(x2, y+2+18), PPSize(22, 17), false, true); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setColor(TrackerConfig::colorThemeMain); button->setTextColor(PPUIConfig::getInstance()->getColor(PPUIConfig::ColorStaticText)); button->setText("Exp."); container->addControl(button); inputContainerDefault = inputContainerCurrent = container; screen->addControl(container); } void Tracker::initInputContainerExtended(pp_int32 x, pp_int32 y) { PPContainer* container = new PPContainer(CONTAINER_INPUTEXTENDED, screen, this, PPPoint(0, y), PPSize(screen->getWidth(),INPUTCONTAINERHEIGHT_EXTENDED), false); container->setColor(TrackerConfig::colorThemeMain); // First line of keys PPButton* button; pp_int32 bWidth = 11; pp_int32 bHeight = 12; pp_int32 j,i, offset = 0; for (i = 0; i < (signed)sizeof(keyLine_0_lowerCase); i++) { button = new PPButton(keyLineIDs_0[i], screen, inputControlListener, PPPoint(x+2 + i*(bWidth)+offset, y + 2), PPSize(bWidth, bHeight), false, true, true); button->setText(keyLine_0_lowerCase[i]); container->addControl(button); } offset = bWidth+(bWidth>>1)-1; pp_int32 y2 = y+bHeight; j = x + 2 + offset; for (i = 0; i < (signed)sizeof(keyLine_1_lowerCase); i++) { button = new PPButton(keyLineIDs_1[i], screen, inputControlListener, PPPoint(j, y2 + 2), PPSize(keyLineSizes_1[i], bHeight), false, true, true); button->setText(keyLine_1_lowerCase[i]); container->addControl(button); j+=keyLineSizes_1[i]; } y2+=bHeight; bHeight++; offset = (bWidth*2)-4; for (i = 0; i < (signed)sizeof(keyLine_2_lowerCase); i++) { button = new PPButton(keyLineIDs_2[i], screen, inputControlListener, PPPoint(x+2 + i*(bWidth)+offset, y2 + 2), PPSize(bWidth, bHeight), false, true, true); button->setText(keyLine_2_lowerCase[i]); container->addControl(button); } y2+=bHeight; bHeight--; offset = (bWidth+2)+1; for (i = 0; i < (signed)sizeof(keyLine_3_lowerCase); i++) { button = new PPButton(keyLineIDs_3[i], screen, inputControlListener, PPPoint(x+2 + i*(bWidth)+offset, y2 + 2), PPSize(bWidth, bHeight), false, true, true); button->setText(keyLine_3_lowerCase[i]); container->addControl(button); } y2 = y + bHeight; bWidth = 15; offset = 0; button = new PPButton(INPUT_BUTTON_TAB, screen, inputControlListener, PPPoint(x+2 + offset, y2 + 2), PPSize(bWidth, bHeight), false, true, true); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("->"); container->addControl(button); y2 += bHeight; bHeight++; bWidth = 18; offset = 0; button = new PPButton(INPUT_BUTTON_CAPSLOCK, screen, inputControlListener, PPPoint(x+2 + offset, y2 + 2), PPSize(bWidth, bHeight), false, true, false); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Cap"); container->addControl(button); y2 += bHeight; bHeight--; bWidth = 14; offset = 0; button = new PPButton(INPUT_BUTTON_LSHIFT, screen, inputControlListener, PPPoint(x+2 + offset, y2 + 2), PPSize(bWidth, bHeight), false, true, false); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Sh"); container->addControl(button); bWidth = 23; pp_int32 x3 = x + 145; y2 = y; button = new PPButton(INPUT_BUTTON_BACK, screen, inputControlListener, PPPoint(x3, y2+2), PPSize(bWidth, bHeight), false, true, true); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Back"); container->addControl(button); y2+=bHeight; x3+=7; bWidth = 16; bHeight*=2; bHeight+=1; button = new PPButton(INPUT_BUTTON_ENTER, screen, inputControlListener, PPPoint(x3, y2+2), PPSize(bWidth, bHeight), false, true, true); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Ret"); container->addControl(button); y2+=bHeight; bHeight = 12; bWidth = 31; x3 = x + 135; button = new PPButton(INPUT_BUTTON_SPACE, screen, inputControlListener, PPPoint(x3+2 + offset, y2 + 2), PPSize(bWidth, bHeight), false, true, true); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Space"); container->addControl(button); x3 += bWidth+2; PianoControl* pianoControl = new PianoControl(PIANO_CONTROL, screen, inputControlListener, PPPoint(x3+2, y+1), PPSize(screen->getWidth() - 3 - x3, 25+12), ModuleEditor::MAX_NOTE); // show C-3 pianoControl->assureNoteVisible(12*4); pianoControl->setBorderColor(TrackerConfig::colorThemeMain); pianoControl->setMode(PianoControl::ModePlay); container->addControl(pianoControl); // more stuff bWidth = 18; button = new PPButton(INPUT_BUTTON_DEL, screen, inputControlListener, PPPoint(x3+2, y2+2), PPSize(bWidth, bHeight), false, true, true); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Del"); container->addControl(button); x3+=button->getSize().width; button = new PPButton(INPUT_BUTTON_INS, screen, inputControlListener, PPPoint(x3+2, y2+2), PPSize(bWidth, bHeight), false, true, true); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Ins"); container->addControl(button); x3+=button->getSize().width; bWidth = 37; button = new PPButton(INPUT_BUTTON_INSLINE, screen, inputControlListener, PPPoint(x3+2, y2+2), PPSize(bWidth, bHeight), false, true, true); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Insline"); container->addControl(button); bWidth = 41; x3+=button->getSize().width; button = new PPButton(INPUT_BUTTON_BACKLINE, screen, inputControlListener, PPPoint(x3+2, y2+2), PPSize(bWidth, bHeight), false, true, true); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Backline"); container->addControl(button); x3+=button->getSize().width+1; bWidth = 33; button = new PPButton(INPUT_BUTTON_SHRINK, screen, inputControlListener, PPPoint(x3+2, y2+2), PPSize(bWidth, bHeight), false, true); button->setFont(PPFont::getFont(PPFont::FONT_TINY)); button->setText("Shrink"); button->setColor(TrackerConfig::colorThemeMain); button->setTextColor(PPUIConfig::getInstance()->getColor(PPUIConfig::ColorStaticText)); container->addControl(button); container->hide(true); inputContainerExtended = container; screen->addControl(container); } void Tracker::moveInputControls(pp_uint32 deltay) { PPContainer* container = static_cast(screen->getControlByID(CONTAINER_INPUTDEFAULT)); ASSERT(container); PPPoint p(0, deltay); container->move(p); container = static_cast(screen->getControlByID(CONTAINER_INPUTEXTENDED)); ASSERT(container); container->move(p); rearrangePatternEditorControlOrInstrumentContainer(); } void Tracker::hideInputControl(bool bHide/* = true*/) { if (inputContainerCurrent && bHide) { inputContainerCurrent->show(false); } else if (inputContainerCurrent) { inputContainerCurrent->show(true); } } MilkyTracker-1.02.00/src/tracker/TrackerKeyboard.cpp000066400000000000000000001074511324432207300222650ustar00rootroot00000000000000/* * tracker/TrackerKeyboard.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * TrackerKeyboard.cpp * MilkyTracker * * Created by Peter Barth on Tue May 03 2005. * */ #include "Tracker.h" #include "TabManager.h" #include "KeyBindings.h" #include "PlayerController.h" #include "PlayerLogic.h" #include "RecorderLogic.h" #include "ModuleEditor.h" #include "PPUIConfig.h" #include "Container.h" #include "ListBox.h" #include "ListBoxFileBrowser.h" #include "PatternEditorControl.h" #include "ControlIDs.h" #include "TrackerConfig.h" #include "TrackerSettingsDatabase.h" #include "ScopesControl.h" #include "TabHeaderControl.h" #include "SectionSwitcher.h" #include "SectionSettings.h" #include "SectionTranspose.h" #include "SectionAdvancedEdit.h" #include "SectionDiskMenu.h" #include "SectionHDRecorder.h" #include "SectionQuickOptions.h" #include "SectionOptimize.h" #include "SectionAbout.h" #include "ToolInvokeHelper.h" // OS Interface #include "PPOpenPanel.h" #include "PPSavePanel.h" #include "PPMessageBox.h" bool Tracker::executeBinding(const PPKeyBindings* bindings, pp_uint16 keyCode) { currentKeyCode = keyCode; TTrackerKeyBindingHandler handlerFunc; bool res = bindings->getBinding(keyCode, ::getKeyModifier(), handlerFunc); if (res) { (this->*handlerFunc)(); return true; } return false; } void Tracker::initKeyBindings() { eventKeyDownBindingsMilkyTracker = new PPKeyBindings; eventKeyDownBindingsFastTracker = new PPKeyBindings; // Key-down bindings for MilkyTracker // tabbing stuff eventKeyDownBindingsMilkyTracker->addBinding('T', KeyModifierCTRL|KeyModifierSHIFT, &Tracker::eventKeyDownBinding_OpenTab); eventKeyDownBindingsMilkyTracker->addBinding('W', KeyModifierCTRL|KeyModifierSHIFT, &Tracker::eventKeyDownBinding_CloseTab); eventKeyDownBindingsMilkyTracker->addBinding(VK_LEFT, KeyModifierCTRL|KeyModifierSHIFT, &Tracker::eventKeyDownBinding_SwitchToPreviousTab); eventKeyDownBindingsMilkyTracker->addBinding(VK_RIGHT, KeyModifierCTRL|KeyModifierSHIFT, &Tracker::eventKeyDownBinding_SwitchToNextTab); eventKeyDownBindingsMilkyTracker->addBinding('1', KeyModifierCTRL|KeyModifierSHIFT, &Tracker::eventKeyDownBinding_SelectOctave1); eventKeyDownBindingsMilkyTracker->addBinding('2', KeyModifierCTRL|KeyModifierSHIFT, &Tracker::eventKeyDownBinding_SelectOctave2); eventKeyDownBindingsMilkyTracker->addBinding('3', KeyModifierCTRL|KeyModifierSHIFT, &Tracker::eventKeyDownBinding_SelectOctave3); eventKeyDownBindingsMilkyTracker->addBinding('4', KeyModifierCTRL|KeyModifierSHIFT, &Tracker::eventKeyDownBinding_SelectOctave4); eventKeyDownBindingsMilkyTracker->addBinding('5', KeyModifierCTRL|KeyModifierSHIFT, &Tracker::eventKeyDownBinding_SelectOctave5); eventKeyDownBindingsMilkyTracker->addBinding('6', KeyModifierCTRL|KeyModifierSHIFT, &Tracker::eventKeyDownBinding_SelectOctave6); eventKeyDownBindingsMilkyTracker->addBinding('7', KeyModifierCTRL|KeyModifierSHIFT, &Tracker::eventKeyDownBinding_SelectOctave7); eventKeyDownBindingsMilkyTracker->addBinding('8', KeyModifierCTRL|KeyModifierSHIFT, &Tracker::eventKeyDownBinding_SelectOctave8); eventKeyDownBindingsMilkyTracker->addBinding(VK_RETURN, 0, &Tracker::eventKeyDownBinding_PlaySong); eventKeyDownBindingsMilkyTracker->addBinding(VK_RETURN, KeyModifierCTRL, &Tracker::eventKeyDownBinding_PlayPattern); eventKeyDownBindingsMilkyTracker->addBinding(VK_RETURN, KeyModifierSHIFT, &Tracker::eventKeyDownBinding_PlayPosition); eventKeyDownBindingsMilkyTracker->addBinding(VK_F9, KeyModifierSHIFT, &Tracker::eventKeyDownBinding_PlayPattern); eventKeyDownBindingsMilkyTracker->addBinding(VK_F10, KeyModifierSHIFT, &Tracker::eventKeyDownBinding_PlayPatternFromFIRSTQUARTER); eventKeyDownBindingsMilkyTracker->addBinding(VK_F11, KeyModifierSHIFT, &Tracker::eventKeyDownBinding_PlayPatternFromSECONDQUARTER); eventKeyDownBindingsMilkyTracker->addBinding(VK_F12, KeyModifierSHIFT, &Tracker::eventKeyDownBinding_PlayPatternFromTHIRDQUARTER); eventKeyDownBindingsMilkyTracker->addBinding(VK_SPACE, KeyModifierSHIFT, &Tracker::eventKeyDownBinding_PlayRow); // !! trace uses a hardcoded key-up event processing, check if you ever decide to change this shortcut eventKeyDownBindingsMilkyTracker->addBinding(VK_SPACE, KeyModifierALT, &Tracker::eventKeyDownBinding_PlayTrace); eventKeyDownBindingsMilkyTracker->addBinding(VK_ESCAPE, 0, &Tracker::eventKeyDownBinding_Stop); eventKeyDownBindingsMilkyTracker->addBinding(VK_SPACE, 0, &Tracker::eventKeyDownBinding_Edit); eventKeyDownBindingsMilkyTracker->addBinding('U', KeyModifierSHIFT, &Tracker::eventKeyDownBinding_UnmuteAll); eventKeyDownBindingsMilkyTracker->addBinding(VK_F4, KeyModifierALT, &Tracker::eventKeyDownBinding_ExitApplication); eventKeyDownBindingsMilkyTracker->addBinding('Q', KeyModifierCTRL, &Tracker::eventKeyDownBinding_ExitApplication); eventKeyDownBindingsMilkyTracker->addBinding('O', KeyModifierCTRL, &Tracker::eventKeyDownBinding_Open); eventKeyDownBindingsMilkyTracker->addBinding('S', KeyModifierCTRL, &Tracker::eventKeyDownBinding_Save); eventKeyDownBindingsMilkyTracker->addBinding('S', KeyModifierCTRL|KeyModifierSHIFT, &Tracker::eventKeyDownBinding_SaveAs); // Sections always with CTRL+ALT eventKeyDownBindingsMilkyTracker->addBinding('X', KeyModifierCTRL|KeyModifierALT, &Tracker::eventKeyDownBinding_InvokeMainScreen); eventKeyDownBindingsMilkyTracker->addBinding('I', KeyModifierCTRL|KeyModifierALT, &Tracker::eventKeyDownBinding_InvokeSectionInstruments); eventKeyDownBindingsMilkyTracker->addBinding('S', KeyModifierCTRL|KeyModifierALT, &Tracker::eventKeyDownBinding_InvokeSectionSamples); eventKeyDownBindingsMilkyTracker->addBinding('C', KeyModifierCTRL|KeyModifierALT, &Tracker::eventKeyDownBinding_InvokeSectionSettings); eventKeyDownBindingsMilkyTracker->addBinding('A', KeyModifierCTRL|KeyModifierALT, &Tracker::eventKeyDownBinding_InvokeSectionAdvancedEdit); eventKeyDownBindingsMilkyTracker->addBinding('D', KeyModifierCTRL|KeyModifierALT, &Tracker::eventKeyDownBinding_InvokeSectionDiskMenu); eventKeyDownBindingsMilkyTracker->addBinding('T', KeyModifierCTRL|KeyModifierALT, &Tracker::eventKeyDownBinding_InvokeSectionTranspose); eventKeyDownBindingsMilkyTracker->addBinding('R', KeyModifierCTRL|KeyModifierALT, &Tracker::eventKeyDownBinding_InvokeSectionHDRecorder); eventKeyDownBindingsMilkyTracker->addBinding('O', KeyModifierCTRL|KeyModifierALT, &Tracker::eventKeyDownBinding_InvokeSectionQuickOptions); eventKeyDownBindingsMilkyTracker->addBinding('Z', KeyModifierCTRL|KeyModifierALT, &Tracker::eventKeyDownBinding_ToggleScopes); // handy toggle shortcuts eventKeyDownBindingsMilkyTracker->addBinding('F', KeyModifierCTRL, &Tracker::eventKeyDownBinding_ToggleFollowSong); eventKeyDownBindingsMilkyTracker->addBinding('P', KeyModifierCTRL, &Tracker::eventKeyDownBinding_ToggleProspectiveMode); eventKeyDownBindingsMilkyTracker->addBinding('W', KeyModifierCTRL, &Tracker::eventKeyDownBinding_ToggleCursorWrapAround); eventKeyDownBindingsMilkyTracker->addBinding('L', KeyModifierCTRL, &Tracker::eventKeyDownBinding_ToggleLiveSwitch); // Transpose stuff like FT2 eventKeyDownBindingsMilkyTracker->addBinding(VK_F1, KeyModifierSHIFT, &Tracker::eventKeyDownBinding_TransposeAllInsTrackDown); eventKeyDownBindingsMilkyTracker->addBinding(VK_F2, KeyModifierSHIFT, &Tracker::eventKeyDownBinding_TransposeAllInsTrackUp); eventKeyDownBindingsMilkyTracker->addBinding(VK_F1, KeyModifierCTRL, &Tracker::eventKeyDownBinding_TransposeAllInsPatternDown); eventKeyDownBindingsMilkyTracker->addBinding(VK_F2, KeyModifierCTRL, &Tracker::eventKeyDownBinding_TransposeAllInsPatternUp); eventKeyDownBindingsMilkyTracker->addBinding(VK_F1, KeyModifierALT, &Tracker::eventKeyDownBinding_TransposeAllInsBlockDown); eventKeyDownBindingsMilkyTracker->addBinding(VK_F2, KeyModifierALT, &Tracker::eventKeyDownBinding_TransposeAllInsBlockUp); eventKeyDownBindingsMilkyTracker->addBinding(VK_F7, KeyModifierSHIFT, &Tracker::eventKeyDownBinding_TransposeCurInsTrackDown); eventKeyDownBindingsMilkyTracker->addBinding(VK_F8, KeyModifierSHIFT, &Tracker::eventKeyDownBinding_TransposeCurInsTrackUp); eventKeyDownBindingsMilkyTracker->addBinding(VK_F7, KeyModifierCTRL, &Tracker::eventKeyDownBinding_TransposeCurInsPatternDown); eventKeyDownBindingsMilkyTracker->addBinding(VK_F8, KeyModifierCTRL, &Tracker::eventKeyDownBinding_TransposeCurInsPatternUp); eventKeyDownBindingsMilkyTracker->addBinding(VK_F7, KeyModifierALT, &Tracker::eventKeyDownBinding_TransposeCurInsBlockDown); eventKeyDownBindingsMilkyTracker->addBinding(VK_F8, KeyModifierALT, &Tracker::eventKeyDownBinding_TransposeCurInsBlockUp); eventKeyDownBindingsMilkyTracker->addBinding(VK_NUMPAD0, 0, &Tracker::eventKeyDownBinding_InvokeQuickChooseInstrument); eventKeyDownBindingsMilkyTracker->addBinding(VK_NUMPAD1, 0, &Tracker::eventKeyDownBinding_InvokeQuickChooseInstrument); eventKeyDownBindingsMilkyTracker->addBinding(VK_NUMPAD2, 0, &Tracker::eventKeyDownBinding_InvokeQuickChooseInstrument); eventKeyDownBindingsMilkyTracker->addBinding(VK_NUMPAD3, 0, &Tracker::eventKeyDownBinding_InvokeQuickChooseInstrument); eventKeyDownBindingsMilkyTracker->addBinding(VK_NUMPAD4, 0, &Tracker::eventKeyDownBinding_InvokeQuickChooseInstrument); eventKeyDownBindingsMilkyTracker->addBinding(VK_NUMPAD5, 0, &Tracker::eventKeyDownBinding_InvokeQuickChooseInstrument); eventKeyDownBindingsMilkyTracker->addBinding(VK_NUMPAD6, 0, &Tracker::eventKeyDownBinding_InvokeQuickChooseInstrument); eventKeyDownBindingsMilkyTracker->addBinding(VK_NUMPAD7, 0, &Tracker::eventKeyDownBinding_InvokeQuickChooseInstrument); eventKeyDownBindingsMilkyTracker->addBinding(VK_NUMPAD8, 0, &Tracker::eventKeyDownBinding_InvokeQuickChooseInstrument); eventKeyDownBindingsMilkyTracker->addBinding(VK_NUMPAD9, 0, &Tracker::eventKeyDownBinding_InvokeQuickChooseInstrument); eventKeyDownBindingsMilkyTracker->addBinding(VK_MULTIPLY, 0, &Tracker::eventKeyDownBinding_InvokeQuickChooseInstrument); eventKeyDownBindingsMilkyTracker->addBinding(VK_ADD, 0, &Tracker::eventKeyDownBinding_InvokeQuickChooseInstrument); eventKeyDownBindingsMilkyTracker->addBinding(VK_SEPARATOR, 0, &Tracker::eventKeyDownBinding_InvokeQuickChooseInstrument); eventKeyDownBindingsMilkyTracker->addBinding(VK_SUBTRACT, 0, &Tracker::eventKeyDownBinding_InvokeQuickChooseInstrument); eventKeyDownBindingsMilkyTracker->addBinding(VK_DECIMAL, 0, &Tracker::eventKeyDownBinding_InvokeQuickChooseInstrument); eventKeyDownBindingsMilkyTracker->addBinding(VK_DIVIDE, 0, &Tracker::eventKeyDownBinding_InvokeQuickChooseInstrument); // Key-down bindings for Fasttracker // tab stuff eventKeyDownBindingsFastTracker->addBinding('T', KeyModifierCTRL|KeyModifierSHIFT, &Tracker::eventKeyDownBinding_OpenTab); eventKeyDownBindingsFastTracker->addBinding('W', KeyModifierCTRL|KeyModifierSHIFT, &Tracker::eventKeyDownBinding_CloseTab); // some more milkytracker specific short cuts in FT2 mode eventKeyDownBindingsFastTracker->addBinding('L', KeyModifierCTRL|KeyModifierSHIFT, &Tracker::eventKeyDownBinding_Open); eventKeyDownBindingsFastTracker->addBinding('S', KeyModifierCTRL|KeyModifierSHIFT, &Tracker::eventKeyDownBinding_Save); eventKeyDownBindingsFastTracker->addBinding(VK_LEFT, KeyModifierCTRL|KeyModifierSHIFT, &Tracker::eventKeyDownBinding_SwitchToPreviousTab); eventKeyDownBindingsFastTracker->addBinding(VK_RIGHT, KeyModifierCTRL|KeyModifierSHIFT, &Tracker::eventKeyDownBinding_SwitchToNextTab); eventKeyDownBindingsFastTracker->addBinding(VK_RETURN, 0, &Tracker::eventKeyDownBinding_PlaySong); eventKeyDownBindingsFastTracker->addBinding(VK_RETURN, KeyModifierCTRL, &Tracker::eventKeyDownBinding_PlayPattern); eventKeyDownBindingsFastTracker->addBinding(VK_RETURN, KeyModifierSHIFT, &Tracker::eventKeyDownBinding_PlayPosition); eventKeyDownBindingsFastTracker->addBinding(VK_ESCAPE, 0, &Tracker::eventKeyDownBinding_ExitApplication); eventKeyDownBindingsFastTracker->addBinding(VK_F9, KeyModifierSHIFT, &Tracker::eventKeyDownBinding_PlayPattern); eventKeyDownBindingsFastTracker->addBinding(VK_F10, KeyModifierSHIFT, &Tracker::eventKeyDownBinding_PlayPatternFromFIRSTQUARTER); eventKeyDownBindingsFastTracker->addBinding(VK_F11, KeyModifierSHIFT, &Tracker::eventKeyDownBinding_PlayPatternFromSECONDQUARTER); eventKeyDownBindingsFastTracker->addBinding(VK_F12, KeyModifierSHIFT, &Tracker::eventKeyDownBinding_PlayPatternFromTHIRDQUARTER); eventKeyDownBindingsFastTracker->addBinding(VK_SPACE, KeyModifierSHIFT, &Tracker::eventKeyDownBinding_PlayRow); // !! trace uses a hardcoded key-up event processing, check if you ever decide to change this shortcut eventKeyDownBindingsFastTracker->addBinding(VK_SPACE, KeyModifierALT, &Tracker::eventKeyDownBinding_PlayTrace); // for the die-hard FT2 users eventKeyDownBindingsFastTracker->addBinding(VK_RCONTROL, 0xFFFF, &Tracker::eventKeyDownBinding_PlaySong); eventKeyDownBindingsFastTracker->addBinding(VK_RMENU, 0xFFFF, &Tracker::eventKeyDownBinding_PlayPattern); eventKeyDownBindingsFastTracker->addBinding('U', KeyModifierSHIFT, &Tracker::eventKeyDownBinding_UnmuteAll); // Transpose all instruments eventKeyDownBindingsFastTracker->addBinding(VK_F1, KeyModifierSHIFT, &Tracker::eventKeyDownBinding_TransposeAllInsTrackDown); eventKeyDownBindingsFastTracker->addBinding(VK_F2, KeyModifierSHIFT, &Tracker::eventKeyDownBinding_TransposeAllInsTrackUp); eventKeyDownBindingsFastTracker->addBinding(VK_F1, KeyModifierCTRL, &Tracker::eventKeyDownBinding_TransposeAllInsPatternDown); eventKeyDownBindingsFastTracker->addBinding(VK_F2, KeyModifierCTRL, &Tracker::eventKeyDownBinding_TransposeAllInsPatternUp); eventKeyDownBindingsFastTracker->addBinding(VK_F1, KeyModifierALT, &Tracker::eventKeyDownBinding_TransposeAllInsBlockDown); eventKeyDownBindingsFastTracker->addBinding(VK_F2, KeyModifierALT, &Tracker::eventKeyDownBinding_TransposeAllInsBlockUp); eventKeyDownBindingsFastTracker->addBinding(VK_F7, KeyModifierSHIFT, &Tracker::eventKeyDownBinding_TransposeCurInsTrackDown); eventKeyDownBindingsFastTracker->addBinding(VK_F8, KeyModifierSHIFT, &Tracker::eventKeyDownBinding_TransposeCurInsTrackUp); eventKeyDownBindingsFastTracker->addBinding(VK_F7, KeyModifierCTRL, &Tracker::eventKeyDownBinding_TransposeCurInsPatternDown); eventKeyDownBindingsFastTracker->addBinding(VK_F8, KeyModifierCTRL, &Tracker::eventKeyDownBinding_TransposeCurInsPatternUp); eventKeyDownBindingsFastTracker->addBinding(VK_F7, KeyModifierALT, &Tracker::eventKeyDownBinding_TransposeCurInsBlockDown); eventKeyDownBindingsFastTracker->addBinding(VK_F8, KeyModifierALT, &Tracker::eventKeyDownBinding_TransposeCurInsBlockUp); // Section bindings eventKeyDownBindingsFastTracker->addBinding('X', KeyModifierCTRL, &Tracker::eventKeyDownBinding_InvokeMainScreen); eventKeyDownBindingsFastTracker->addBinding('I', KeyModifierCTRL, &Tracker::eventKeyDownBinding_InvokeSectionInstruments); eventKeyDownBindingsFastTracker->addBinding('S', KeyModifierCTRL, &Tracker::eventKeyDownBinding_InvokeSectionSamples); eventKeyDownBindingsFastTracker->addBinding('C', KeyModifierCTRL, &Tracker::eventKeyDownBinding_InvokeSectionSettings); eventKeyDownBindingsFastTracker->addBinding('A', KeyModifierCTRL, &Tracker::eventKeyDownBinding_InvokeSectionAdvancedEdit); eventKeyDownBindingsFastTracker->addBinding('D', KeyModifierCTRL, &Tracker::eventKeyDownBinding_InvokeSectionDiskMenu); eventKeyDownBindingsFastTracker->addBinding('T', KeyModifierCTRL, &Tracker::eventKeyDownBinding_InvokeSectionTranspose); eventKeyDownBindingsFastTracker->addBinding('R', KeyModifierCTRL, &Tracker::eventKeyDownBinding_InvokeSectionHDRecorder); eventKeyDownBindingsFastTracker->addBinding('O', KeyModifierCTRL, &Tracker::eventKeyDownBinding_InvokeSectionQuickOptions); //eventKeyDownBindingsFastTracker->addBinding('Z', KeyModifierCTRL, &Tracker::eventKeyDownBinding_InvokeSectionOptimize); eventKeyDownBindingsFastTracker->addBinding('Z', KeyModifierCTRL, &Tracker::eventKeyDownBinding_ToggleScopes); // Handy toggle functions eventKeyDownBindingsFastTracker->addBinding('F', KeyModifierCTRL, &Tracker::eventKeyDownBinding_ToggleFollowSong); eventKeyDownBindingsFastTracker->addBinding('P', KeyModifierCTRL, &Tracker::eventKeyDownBinding_ToggleProspectiveMode); eventKeyDownBindingsFastTracker->addBinding('W', KeyModifierCTRL, &Tracker::eventKeyDownBinding_ToggleCursorWrapAround); eventKeyDownBindingsFastTracker->addBinding('L', KeyModifierCTRL, &Tracker::eventKeyDownBinding_ToggleLiveSwitch); eventKeyDownBindingsFastTracker->addBinding('V', KeyModifierCTRL, &Tracker::eventKeyDownBinding_InvokePatternToolVolumeScalePattern); eventKeyDownBindingsFastTracker->addBinding('V', KeyModifierSHIFT, &Tracker::eventKeyDownBinding_InvokePatternToolVolumeScaleTrack); eventKeyDownBindingsFastTracker->addBinding('V', KeyModifierALT, &Tracker::eventKeyDownBinding_InvokePatternToolVolumeScaleSelection); eventKeyDownBindingsFastTracker->addBinding(VK_NUMPAD0, 0, &Tracker::eventKeyDownBinding_InvokeQuickChooseInstrument); eventKeyDownBindingsFastTracker->addBinding(VK_NUMPAD1, 0, &Tracker::eventKeyDownBinding_InvokeQuickChooseInstrument); eventKeyDownBindingsFastTracker->addBinding(VK_NUMPAD2, 0, &Tracker::eventKeyDownBinding_InvokeQuickChooseInstrument); eventKeyDownBindingsFastTracker->addBinding(VK_NUMPAD3, 0, &Tracker::eventKeyDownBinding_InvokeQuickChooseInstrument); eventKeyDownBindingsFastTracker->addBinding(VK_NUMPAD4, 0, &Tracker::eventKeyDownBinding_InvokeQuickChooseInstrument); eventKeyDownBindingsFastTracker->addBinding(VK_NUMPAD5, 0, &Tracker::eventKeyDownBinding_InvokeQuickChooseInstrument); eventKeyDownBindingsFastTracker->addBinding(VK_NUMPAD6, 0, &Tracker::eventKeyDownBinding_InvokeQuickChooseInstrument); eventKeyDownBindingsFastTracker->addBinding(VK_NUMPAD7, 0, &Tracker::eventKeyDownBinding_InvokeQuickChooseInstrument); eventKeyDownBindingsFastTracker->addBinding(VK_NUMPAD8, 0, &Tracker::eventKeyDownBinding_InvokeQuickChooseInstrument); eventKeyDownBindingsFastTracker->addBinding(VK_NUMPAD9, 0, &Tracker::eventKeyDownBinding_InvokeQuickChooseInstrument); eventKeyDownBindingsFastTracker->addBinding(VK_MULTIPLY, 0, &Tracker::eventKeyDownBinding_InvokeQuickChooseInstrument); eventKeyDownBindingsFastTracker->addBinding(VK_ADD, 0, &Tracker::eventKeyDownBinding_InvokeQuickChooseInstrument); eventKeyDownBindingsFastTracker->addBinding(VK_SEPARATOR, 0, &Tracker::eventKeyDownBinding_InvokeQuickChooseInstrument); eventKeyDownBindingsFastTracker->addBinding(VK_SUBTRACT, 0, &Tracker::eventKeyDownBinding_InvokeQuickChooseInstrument); eventKeyDownBindingsFastTracker->addBinding(VK_DECIMAL, 0, &Tracker::eventKeyDownBinding_InvokeQuickChooseInstrument); eventKeyDownBindingsFastTracker->addBinding(VK_DIVIDE, 0, &Tracker::eventKeyDownBinding_InvokeQuickChooseInstrument); // Contributed by 8ch (http://modarchive.org/forums/index.php?topic=2713.0): eventKeyDownBindingsFastTracker->addBinding('R', KeyModifierSHIFT, &Tracker::eventKeyDownBinding_ToggleFT2Edit); eventKeyDownBindingsFastTracker->addBinding(VK_F9, KeyModifierCTRL, &Tracker::eventKeyDownBinding_DelCurOrderPosition); eventKeyDownBindingsFastTracker->addBinding(VK_F10, KeyModifierCTRL, &Tracker::eventKeyDownBinding_InsNewOrderPosition); eventKeyDownBindingsFastTracker->addBinding(VK_F11, KeyModifierCTRL, &Tracker::eventKeyDownBinding_DecCurOrderPattern); eventKeyDownBindingsFastTracker->addBinding(VK_F12, KeyModifierCTRL, &Tracker::eventKeyDownBinding_IncCurOrderPattern); eventKeyDownBindings = eventKeyDownBindingsMilkyTracker; } void Tracker::eventKeyDownBinding_OpenTab() { if (screen->getModalControl()) return; tabManager->openNewTab(); } void Tracker::eventKeyDownBinding_CloseTab() { if (screen->getModalControl()) return; tabManager->closeTab(); } void Tracker::eventKeyDownBinding_SwitchToNextTab() { if (screen->getModalControl()) return; tabManager->cycleTab(1); } void Tracker::eventKeyDownBinding_SwitchToPreviousTab() { if (screen->getModalControl()) return; tabManager->cycleTab(-1); } void Tracker::setOctave(pp_uint32 octave) { getPatternEditor()->setCurrentOctave(octave); updatePatternAddAndOctave(); } // Change octave on keyboards which have no function keys void Tracker::eventKeyDownBinding_SelectOctave1() { setOctave(1); } void Tracker::eventKeyDownBinding_SelectOctave2() { setOctave(2); } void Tracker::eventKeyDownBinding_SelectOctave3() { setOctave(3); } void Tracker::eventKeyDownBinding_SelectOctave4() { setOctave(4); } void Tracker::eventKeyDownBinding_SelectOctave5() { setOctave(5); } void Tracker::eventKeyDownBinding_SelectOctave6() { setOctave(6); } void Tracker::eventKeyDownBinding_SelectOctave7() { setOctave(7); } void Tracker::eventKeyDownBinding_SelectOctave8() { setOctave(8); } // Play entire song void Tracker::eventKeyDownBinding_PlaySong() { if (isActiveEditing()) return; playerLogic->playSong(); } void Tracker::eventKeyDownBinding_PlayPattern() { if (isActiveEditing()) return; playerLogic->playPattern(); } void Tracker::eventKeyDownBinding_PlayPosition() { if (isActiveEditing()) return; playerLogic->playPosition(); } void Tracker::eventKeyDownBinding_PlayPatternFromFIRSTQUARTER() { if (isActiveEditing()) return; playerController->resetPlayTimeCounter(); pp_int32 row = getPatternEditor()->getNumRows() >> 2; playerController->playPattern(moduleEditor->getCurrentPatternIndex(), listBoxOrderList->getSelectedIndex(), row, muteChannels); recorderLogic->init(); } void Tracker::eventKeyDownBinding_PlayPatternFromSECONDQUARTER() { if (isActiveEditing()) return; playerController->resetPlayTimeCounter(); pp_int32 row = (getPatternEditor()->getNumRows() >> 2)*2; playerController->playPattern(moduleEditor->getCurrentPatternIndex(), listBoxOrderList->getSelectedIndex(), row, muteChannels); recorderLogic->init(); } void Tracker::eventKeyDownBinding_PlayPatternFromTHIRDQUARTER() { if (isActiveEditing()) return; playerController->resetPlayTimeCounter(); pp_int32 row = (getPatternEditor()->getNumRows() >> 2)*3; playerController->playPattern(moduleEditor->getCurrentPatternIndex(), listBoxOrderList->getSelectedIndex(), row, muteChannels); recorderLogic->init(); } void Tracker::eventKeyDownBinding_PlayRow() { if (isActiveEditing()) return; playerLogic->playRow(); } void Tracker::eventKeyDownBinding_PlayTrace() { if (isActiveEditing()) return; playerLogic->playTrace(); } void Tracker::eventKeyDownBinding_Stop() { if (isActiveEditing()) return; // is already playing? stop playerController->resetPlayTimeCounter(); // stop song and reset main volume ensureSongStopped(true, false); } void Tracker::eventKeyDownBinding_Edit() { if (isActiveEditing()) return; if (screen->getModalControl()) return; PatternEditorControl* patternEditor = getPatternEditorControl(); if (!screen->hasFocus(patternEditor) && patternEditor->isVisible()) { screen->setFocus(patternEditor); //screen->paintControl(patternEditor); } else { PPControl* ctrl = sectionDiskMenu->isFileBrowserVisible() ? static_cast(sectionDiskMenu->getListBoxFiles()) : static_cast(listBoxInstruments); if (ctrl/* && ctrl->isVisible()*/) { screen->setFocus(ctrl); //screen->paintControl(ctrl); } else { screen->setFocus(NULL); //screen->paint(); } } } void Tracker::eventKeyDownBinding_UnmuteAll() { if (isActiveEditing()) return; scopesControl->handleUnmuteAll(); } void Tracker::eventKeyDownBinding_Open() { if (screen->getModalControl()) return; loadType(FileTypes::FileTypeSongAllModules); } void Tracker::eventKeyDownBinding_Save() { if (screen->getModalControl()) return; save(); } void Tracker::eventKeyDownBinding_SaveAs() { if (screen->getModalControl()) return; saveAs(); } void Tracker::eventKeyDownBinding_NextPattern() { if (screen->getModalControl()) return; if (moduleEditor->getCurrentPatternIndex() < 255) { moduleEditor->setCurrentPatternIndex(moduleEditor->getCurrentPatternIndex()+1); updatePattern(); playerLogic->continuePlayingPattern(); } } void Tracker::eventKeyDownBinding_PreviousPattern() { if (screen->getModalControl()) return; if (moduleEditor->getCurrentPatternIndex() > 0) { moduleEditor->setCurrentPatternIndex(moduleEditor->getCurrentPatternIndex()-1); updatePattern(); playerLogic->continuePlayingPattern(); } } // - Invoke sections void Tracker::eventKeyDownBinding_InvokeMainScreen() { if (screen->getModalControl()) return; sectionSwitcher->showBottomSection(SectionSwitcher::ActiveBottomSectionNone); sectionSwitcher->showUpperSection(NULL); } void Tracker::eventKeyDownBinding_InvokeSectionInstruments() { if (screen->getModalControl()) return; sectionSwitcher->showBottomSection(SectionSwitcher::ActiveBottomSectionInstrumentEditor); screen->paint(true, true); } void Tracker::eventKeyDownBinding_InvokeSectionSamples() { if (screen->getModalControl()) return; sectionSwitcher->showBottomSection(SectionSwitcher::ActiveBottomSectionSampleEditor); screen->paint(true, true); } void Tracker::eventKeyDownBinding_InvokeSectionTranspose() { if (screen->getModalControl()) return; sectionSwitcher->showUpperSection(sectionTranspose); } void Tracker::eventKeyDownBinding_InvokeSectionAdvancedEdit() { if (screen->getModalControl()) return; sectionSwitcher->showUpperSection(sectionAdvancedEdit); } void Tracker::eventKeyDownBinding_InvokeSectionDiskMenu() { if (screen->getModalControl()) return; sectionSwitcher->showUpperSection(sectionDiskMenu, false); } void Tracker::eventKeyDownBinding_InvokeSectionHDRecorder() { if (screen->getModalControl()) return; sectionSwitcher->showUpperSection(sectionHDRecorder); } void Tracker::eventKeyDownBinding_InvokeSectionSettings() { if (screen->getModalControl()) return; settingsDatabase->store("FREQTAB", moduleEditor->getFrequency()); settingsDatabase->store("PROSPECTIVE", getProspectiveMode() ? 1 : 0); settingsDatabase->store("WRAPAROUND", getCursorWrapAround() ? 1 : 0); settingsDatabase->store("FOLLOWSONG", getFollowSong() ? 1 : 0); if (settingsDatabaseCopy) delete settingsDatabaseCopy; settingsDatabaseCopy = new TrackerSettingsDatabase(*settingsDatabase); sectionSwitcher->showUpperSection(sectionSettings); screen->paint(true, true); } void Tracker::eventKeyDownBinding_InvokeSectionQuickOptions() { if (screen->getModalControl()) return; sectionSwitcher->showUpperSection(sectionQuickOptions); } void Tracker::eventKeyDownBinding_InvokeSectionOptimize() { if (screen->getModalControl()) return; sectionSwitcher->showUpperSection(sectionOptimize); } void Tracker::eventKeyDownBinding_InvokeSectionAbout() { if (screen->getModalControl()) return; sectionSwitcher->showUpperSection(sectionAbout); } void Tracker::eventKeyDownBinding_ToggleFT2Edit() { PPContainer* container = static_cast(screen->getControlByID(CONTAINER_MENU)); ASSERT(container); PPButton* button = static_cast(container->getControlByID(MAINMENU_EDIT)); ASSERT(container); button->setTextColor(recorderLogic->getRecordMode() ? PPUIConfig::getInstance()->getColor(PPUIConfig::ColorDefaultButtonText) : TrackerConfig::colorRecordModeButtonText); #ifdef __LOWRES__ container = static_cast(screen->getControlByID(CONTAINER_LOWRES_TINYMENU)); ASSERT(container); button = static_cast(container->getControlByID(MAINMENU_EDIT)); ASSERT(button); button->setTextColor(recorderLogic->getRecordMode() ? PPUIConfig::getInstance()->getColor(PPUIConfig::ColorDefaultButtonText) : TrackerConfig::colorRecordModeButtonText); container = static_cast(screen->getControlByID(CONTAINER_LOWRES_JAMMENU)); ASSERT(container); button = static_cast(container->getControlByID(MAINMENU_EDIT)); ASSERT(button); button->setTextColor(recorderLogic->getRecordMode() ? PPUIConfig::getInstance()->getColor(PPUIConfig::ColorDefaultButtonText) : TrackerConfig::colorRecordModeButtonText); #endif getPatternEditorControl()->setRecordMode(!recorderLogic->getRecordMode()); //button->setColor(recordMode ? PPColor(191, 191, 191) : PPColor(192, 32, 32)); //screen->paintControl(button); screen->paint(); recorderLogic->setRecordMode(!recorderLogic->getRecordMode()); recorderLogic->initToggleEdit(); } void Tracker::eventKeyDownBinding_ToggleFollowSong() { setFollowSong(!getFollowSong()); } void Tracker::eventKeyDownBinding_ToggleProspectiveMode() { setProspectiveMode(!getProspectiveMode()); screen->paintControl(getPatternEditorControl()); } void Tracker::eventKeyDownBinding_ToggleCursorWrapAround() { setCursorWrapAround(!getCursorWrapAround()); } void Tracker::eventKeyDownBinding_ToggleLiveSwitch() { setLiveSwitch(!playerLogic->getLiveSwitch()); } void Tracker::eventKeyDownBinding_ToggleRecordKeyOff() { recorderLogic->setRecordKeyOff(!recorderLogic->getRecordKeyOff()); } void Tracker::eventKeyDownBinding_ToggleScopes() { #ifndef __LOWRES__ showScopes(scopesControl->isHidden(), settingsDatabase->restore("SCOPES")->getIntValue() >> 1); #endif } void Tracker::eventKeyDownBinding_InvokePatternToolVolumeScalePattern() { toolInvokeHelper->invokeTool(ToolInvokeHelper::ToolTypePatternVolumeScale, currentKeyCode); } void Tracker::eventKeyDownBinding_InvokePatternToolVolumeScaleTrack() { toolInvokeHelper->invokeTool(ToolInvokeHelper::ToolTypeTrackVolumeScale, currentKeyCode); } void Tracker::eventKeyDownBinding_InvokePatternToolVolumeScaleSelection() { toolInvokeHelper->invokeTool(ToolInvokeHelper::ToolTypeSelectionVolumeScale, currentKeyCode); } // Quick choose instrument void Tracker::eventKeyDownBinding_InvokeQuickChooseInstrument() { toolInvokeHelper->invokeTool(ToolInvokeHelper::ToolTypeQuickChooseInstrument, currentKeyCode); } void Tracker::eventKeyDownBinding_TransposeCurInsTrackDown() { if (screen->getModalControl()) return; PatternEditorTools::TransposeParameters tp; tp.insRangeStart = tp.insRangeEnd = listBoxInstruments->getSelectedIndex() + 1; tp.noteRangeStart = 1; tp.noteRangeEnd = ModuleEditor::MAX_NOTE; tp.amount = -1; getPatternEditorControl()->noteTransposeTrack(tp); screen->paintControl(getPatternEditorControl()); } void Tracker::eventKeyDownBinding_TransposeCurInsTrackUp() { if (screen->getModalControl()) return; PatternEditorTools::TransposeParameters tp; tp.insRangeStart = tp.insRangeEnd = listBoxInstruments->getSelectedIndex() + 1; tp.noteRangeStart = 1; tp.noteRangeEnd = ModuleEditor::MAX_NOTE; tp.amount = 1; getPatternEditorControl()->noteTransposeTrack(tp); screen->paintControl(getPatternEditorControl()); } void Tracker::eventKeyDownBinding_TransposeCurInsPatternDown() { if (screen->getModalControl()) return; PatternEditorTools::TransposeParameters tp; tp.insRangeStart = tp.insRangeEnd = listBoxInstruments->getSelectedIndex() + 1; tp.noteRangeStart = 1; tp.noteRangeEnd = ModuleEditor::MAX_NOTE; tp.amount = -1; getPatternEditorControl()->noteTransposePattern(tp); screen->paintControl(getPatternEditorControl()); } void Tracker::eventKeyDownBinding_TransposeCurInsPatternUp() { if (screen->getModalControl()) return; PatternEditorTools::TransposeParameters tp; tp.insRangeStart = tp.insRangeEnd = listBoxInstruments->getSelectedIndex() + 1; tp.noteRangeStart = 1; tp.noteRangeEnd = ModuleEditor::MAX_NOTE; tp.amount = 1; getPatternEditorControl()->noteTransposePattern(tp); screen->paintControl(getPatternEditorControl()); } void Tracker::eventKeyDownBinding_TransposeCurInsBlockDown() { if (screen->getModalControl()) return; PatternEditorTools::TransposeParameters tp; tp.insRangeStart = tp.insRangeEnd = listBoxInstruments->getSelectedIndex() + 1; tp.noteRangeStart = 1; tp.noteRangeEnd = ModuleEditor::MAX_NOTE; tp.amount = -1; getPatternEditorControl()->noteTransposeSelection(tp); screen->paintControl(getPatternEditorControl()); } void Tracker::eventKeyDownBinding_TransposeCurInsBlockUp() { if (screen->getModalControl()) return; PatternEditorTools::TransposeParameters tp; tp.insRangeStart = tp.insRangeEnd = listBoxInstruments->getSelectedIndex() + 1; tp.noteRangeStart = 1; tp.noteRangeEnd = ModuleEditor::MAX_NOTE; tp.amount = 1; getPatternEditorControl()->noteTransposeSelection(tp); screen->paintControl(getPatternEditorControl()); } // All instruments transpose void Tracker::eventKeyDownBinding_TransposeAllInsTrackDown() { if (screen->getModalControl()) return; PatternEditorTools::TransposeParameters tp; tp.insRangeStart = 0; tp.insRangeEnd = 255; tp.noteRangeStart = 1; tp.noteRangeEnd = ModuleEditor::MAX_NOTE; tp.amount = -1; getPatternEditorControl()->noteTransposeTrack(tp); screen->paintControl(getPatternEditorControl()); } void Tracker::eventKeyDownBinding_TransposeAllInsTrackUp() { if (screen->getModalControl()) return; PatternEditorTools::TransposeParameters tp; tp.insRangeStart = 0; tp.insRangeEnd = 255; tp.noteRangeStart = 1; tp.noteRangeEnd = ModuleEditor::MAX_NOTE; tp.amount = 1; getPatternEditorControl()->noteTransposeTrack(tp); screen->paintControl(getPatternEditorControl()); } void Tracker::eventKeyDownBinding_TransposeAllInsPatternDown() { if (screen->getModalControl()) return; PatternEditorTools::TransposeParameters tp; tp.insRangeStart = 0; tp.insRangeEnd = 255; tp.noteRangeStart = 1; tp.noteRangeEnd = ModuleEditor::MAX_NOTE; tp.amount = -1; getPatternEditorControl()->noteTransposePattern(tp); screen->paintControl(getPatternEditorControl()); } void Tracker::eventKeyDownBinding_TransposeAllInsPatternUp() { if (screen->getModalControl()) return; PatternEditorTools::TransposeParameters tp; tp.insRangeStart = 0; tp.insRangeEnd = 255; tp.noteRangeStart = 1; tp.noteRangeEnd = ModuleEditor::MAX_NOTE; tp.amount = 1; getPatternEditorControl()->noteTransposePattern(tp); screen->paintControl(getPatternEditorControl()); } void Tracker::eventKeyDownBinding_TransposeAllInsBlockDown() { if (screen->getModalControl()) return; PatternEditorTools::TransposeParameters tp; tp.insRangeStart = 0; tp.insRangeEnd = 255; tp.noteRangeStart = 1; tp.noteRangeEnd = ModuleEditor::MAX_NOTE; tp.amount = -1; getPatternEditorControl()->noteTransposeSelection(tp); screen->paintControl(getPatternEditorControl()); } void Tracker::eventKeyDownBinding_TransposeAllInsBlockUp() { if (screen->getModalControl()) return; PatternEditorTools::TransposeParameters tp; tp.insRangeStart = 0; tp.insRangeEnd = 255; tp.noteRangeStart = 1; tp.noteRangeEnd = ModuleEditor::MAX_NOTE; tp.amount = 1; getPatternEditorControl()->noteTransposeSelection(tp); screen->paintControl(getPatternEditorControl()); } void Tracker::eventKeyDownBinding_ExitApplication() { if (!screen->getModalControl()) showQuitMessageBox("Quit MilkyTracker?", NULL, NULL); } // Contributed by 8ch (http://modarchive.org/forums/index.php?topic=2713.0): void Tracker::eventKeyDownBinding_DelCurOrderPosition() { moduleEditor->deleteOrderPosition(getOrderListBoxIndex()); updateOrderlist(); } void Tracker::eventKeyDownBinding_InsNewOrderPosition() { moduleEditor->insertNewOrderPosition(getOrderListBoxIndex()); updateOrderlist(); } void Tracker::eventKeyDownBinding_DecCurOrderPattern() { moduleEditor->decreaseOrderPosition(getOrderListBoxIndex()); updateOrderlist(); } void Tracker::eventKeyDownBinding_IncCurOrderPattern() { moduleEditor->increaseOrderPosition(getOrderListBoxIndex()); updateOrderlist(); } MilkyTracker-1.02.00/src/tracker/TrackerSettings.cpp000066400000000000000000000601311324432207300223160ustar00rootroot00000000000000/* * tracker/TrackerSettings.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * TrackerSettings.cpp * MilkyTracker * * Created by Peter Barth on Sat Mar 19 2005. * */ #include "Tracker.h" #include "ModuleEditor.h" #include "TrackerSettingsDatabase.h" #include "PlayerMaster.h" #include "PlayerController.h" #include "PlayerLogic.h" #include "RecorderLogic.h" #include "TabManager.h" #include "Dictionary.h" #include "PatternEditorControl.h" #include "SampleEditorControl.h" #include "EnvelopeEditorControl.h" #include "SectionSamples.h" #include "SystemMessage.h" #include "ScopesControl.h" #include "SectionInstruments.h" #include "SectionSettings.h" #include "SectionSamples.h" #include "SectionDiskMenu.h" #include "SectionHDRecorder.h" #include "SectionQuickOptions.h" #include "SectionOptimize.h" #include "TrackerConfig.h" #include "PPUIConfig.h" #include "ColorPaletteContainer.h" #include "Tools.h" #include "TitlePageManager.h" #include "version.h" void Tracker::buildDefaultSettings() { if (settingsDatabase == NULL) return; pp_int32 i; char buffer[100]; // store version string to database settingsDatabase->store("VERSION", MILKYTRACKER_VERSION); // ---------- Mixer ---------- #ifdef __DEFAULTBUFFERSIZE__ settingsDatabase->store("BUFFERSIZE", __DEFAULTBUFFERSIZE__); #else settingsDatabase->store("BUFFERSIZE", PlayerMaster::getPreferredBufferSize()); #endif settingsDatabase->store("MIXERVOLUME", 256); settingsDatabase->store("MIXERSHIFT", 1); settingsDatabase->store("RAMPING", 1); settingsDatabase->store("INTERPOLATION", 1); settingsDatabase->store("MIXERFREQ", PlayerMaster::getPreferredSampleRate()); #ifdef __FORCEPOWEROFTWOBUFFERSIZE__ settingsDatabase->store("FORCEPOWEROFTWOBUFFERSIZE", 1); #else settingsDatabase->store("FORCEPOWEROFTWOBUFFERSIZE", 0); #endif // Store audio driver settingsDatabase->store("AUDIODRIVER", PlayerMaster::getPreferredAudioDriverID()); // the first key HAS TO BE PLAYMODEKEEPSETTINGS settingsDatabase->store("PLAYMODEKEEPSETTINGS", 0); settingsDatabase->store("PLAYMODE","FASTTRACKER2"); settingsDatabase->store("PLAYMODE_ADVANCED_ALLOW8xx",1); settingsDatabase->store("PLAYMODE_ADVANCED_ALLOWE8x",0); // Only affects protracker playmodes settingsDatabase->store("PLAYMODE_ADVANCED_PTPITCHLIMIT",1); settingsDatabase->store("PLAYMODE_ADVANCED_PTPANNING", TrackerConfig::defaultProTrackerPanning); // ---------- Optimize -------- for (i = 0; i < (signed)SectionOptimize::getNumFlagGroups(); i++) { sprintf(buffer, "OPTIMIZER_%i",i); settingsDatabase->store(buffer, SectionOptimize::getDefaultFlags(i)); } // ---------- Layout ---------- settingsDatabase->store("FULLSCREEN", 0); settingsDatabase->store("XRESOLUTION", PPScreen::getDefaultWidth()); settingsDatabase->store("YRESOLUTION", PPScreen::getDefaultHeight()); settingsDatabase->store("SCREENSCALEFACTOR", 1); settingsDatabase->store("ENVELOPEEDITORSCALE", 256); for (i = 0; i < PPFont::FONT_LAST; i++) { const char* keyName = PPFont::getFamilyInternalName((PPFont::FontID)i); const char* valueName = PPFont::getCurrentFontFace((PPFont::FontID)i); settingsDatabase->store(keyName, valueName); } #ifdef __LOWRES__ settingsDatabase->store("PATTERNFONT", PPFont::FONT_TINY); #else settingsDatabase->store("PATTERNFONT", PPFont::FONT_SYSTEM); #endif // Scopes? settingsDatabase->store("SCOPES", 1); // Pattern spacing settingsDatabase->store("SPACING", 0); // Trace instruments setting settingsDatabase->store("INSTRUMENTBACKTRACE", 0); // TAB to note? settingsDatabase->store("TABTONOTE", 1); // mouseclick to cursor? settingsDatabase->store("CLICKTOCURSOR", 1); // autoresize pattern on paste? settingsDatabase->store("PATTERNAUTORESIZE", 0); // Show hex row numbers settingsDatabase->store("HEXCOUNT", 1); // Show zeroes instead of dots for unused effects settingsDatabase->store("SHOWZEROEFFECT", 0); // Wrap around cursor settingsDatabase->store("WRAPAROUND", 1); // Beeing prospective settingsDatabase->store("PROSPECTIVE", 0); // follow song when playing settingsDatabase->store("FOLLOWSONG", 1); // Live switch settingsDatabase->store("LIVESWITCH", 0); // Our default edit mode #ifdef __LOWRES__ settingsDatabase->store("EDITMODE", EditModeMilkyTracker); #else settingsDatabase->store("EDITMODE", EditModeFastTracker); #endif // Our default scrolling mode settingsDatabase->store("SCROLLMODE", ScrollModeStayInCenter); // Mute fading value (from 0 to 100 percent) settingsDatabase->store("MUTEFADE", 50); // Modulo for the first pattern highlight settingsDatabase->store("HIGHLIGHTMODULO1", 4); // Modulo for the first pattern highlight settingsDatabase->store("HIGHLIGHTROW1", 0); // Modulo for the second pattern highlight settingsDatabase->store("HIGHLIGHTMODULO2", 8); // Modulo for the second pattern highlight settingsDatabase->store("HIGHLIGHTROW2", 0); // Enable sample undobuffer by default settingsDatabase->store("SAMPLEEDITORUNDOBUFFER", 1); // Auto-mixdown to mono when loading samples settingsDatabase->store("AUTOMIXDOWNSAMPLES", 0); // Hexadecimal offsets in the sample editor by default settingsDatabase->store("SAMPLEEDITORDECIMALOFFSETS", 0); // use internal disk browser? settingsDatabase->store("INTERNALDISKBROWSER", 0); // disk browser settings settingsDatabase->store("INTERNALDISKBROWSERSETTINGS", SectionDiskMenu::getDefaultConfigUInt32()); settingsDatabase->store("INTERNALDISKBROWSERLASTPATH", ""); // Estimate playtime after a song has been loaded? #ifdef __LOWRES__ settingsDatabase->store("AUTOESTPLAYTIME", 0); #else settingsDatabase->store("AUTOESTPLAYTIME", 1); #endif // show splash screen? settingsDatabase->store("SHOWSPLASH", 1); // orderlist is extended settingsDatabase->store("EXTENDEDORDERLIST", 0); // current row add settingsDatabase->store("ROWINSERTADD", 1); // show title field settingsDatabase->store("TITLEPAGE", TitlePageManager::PageTitle); // sample editor last settings settingsDatabase->store("SAMPLEEDITORLASTVALUES", ""); // no virtual channels for instrument playback settingsDatabase->store("VIRTUALCHANNELS", 0); // default number of XM channel limit settingsDatabase->store("XMCHANNELLIMIT", 32); // enable multichn recording by default settingsDatabase->store("MULTICHN_RECORD", 1); // enable multichn keyjazzing by default settingsDatabase->store("MULTICHN_KEYJAZZ", 1); // disable multichn edit by default settingsDatabase->store("MULTICHN_EDIT", 0); // enable key off recording by default settingsDatabase->store("MULTICHN_RECORDKEYOFF", 1); // disable note delay recording settingsDatabase->store("MULTICHN_RECORDNOTEDELAY", 0); // Invert mousewheel zoom? (normally wheelup zooms out: if inverted, wheelup zooms in) settingsDatabase->store("INVERTMWHEELZOOM", 0); // ---------- Tabs ---------- // Control playing of background tabs settingsDatabase->store("TABS_STOPBACKGROUNDBEHAVIOUR", TabManager::StopTabsBehaviourNone); settingsDatabase->store("TABS_TABSWITCHRESUMEPLAY", 0); settingsDatabase->store("TABS_LOADMODULEINNEWTAB", 0); settingsDatabase->store("ACTIVECOLORS", TrackerConfig::defaultColorPalette); // Store volume envelopes for (i = 0; i < TrackerConfig::numPredefinedEnvelopes; i++) { sprintf(buffer, "PREDEFENVELOPEVOLUME_%i",i); settingsDatabase->store(buffer, TrackerConfig::defaultPredefinedVolumeEnvelope); } // Store panning envelopes for (i = 0; i < TrackerConfig::numPredefinedEnvelopes; i++) { sprintf(buffer, "PREDEFENVELOPEPANNING_%i",i); settingsDatabase->store(buffer, TrackerConfig::defaultPredefinedPanningEnvelope); } // ---------- HD recorder last settings ---------- settingsDatabase->store("HDRECORDER_MIXFREQ", 44100); settingsDatabase->store("HDRECORDER_MIXERVOLUME", 256); settingsDatabase->store("HDRECORDER_MIXERSHIFT", 1); settingsDatabase->store("HDRECORDER_RAMPING", 1); settingsDatabase->store("HDRECORDER_INTERPOLATION", 1); settingsDatabase->store("HDRECORDER_ALLOWMUTING", 0); for (i = 0; i < NUMEFFECTMACROS; i++) { sprintf(buffer, "EFFECTMACRO_%i",i); settingsDatabase->store(buffer, 0); } // store predefined colorsets for (i = 0; i < TrackerConfig::numPredefinedColorPalettes; i++) { sprintf(buffer, "PREDEFCOLORPALETTE_%i",i); settingsDatabase->store(buffer, TrackerConfig::predefinedColorPalettes[i]); } //settingsDatabase->dump(); } void Tracker::applySettingByKey(PPDictionaryKey* theKey, TMixerSettings& settings, pp_uint32 version) { PatternEditorControl* patternEditorCtrl = getPatternEditorControl(); PatternEditor* patternEditor = moduleEditor->getPatternEditor(); SampleEditor* sampleEditor = moduleEditor->getSampleEditor(); SampleEditorControl* sampleEditorControl = sectionSamples->getSampleEditorControl(); pp_int32 v2 = theKey->getIntValue(); if (theKey->getKey().compareTo("BUFFERSIZE") == 0) { // check for backward compatibility // 0x9071 was the version which allowed for buffer size in samples // instead of 250hz "packets" if (version > 0x9070) settings.bufferSize = v2; else theKey->store(PlayerMaster::getPreferredBufferSize()); } else if (theKey->getKey().compareTo("MIXERFREQ") == 0) { settings.mixFreq = v2; } else if (theKey->getKey().compareTo("MIXERVOLUME") == 0) { settings.mixerVolume = v2; } else if (theKey->getKey().compareTo("MIXERSHIFT") == 0) { settings.mixerShift = 2-v2; } else if (theKey->getKey().compareTo("RAMPING") == 0) { settings.ramping = v2; } else if (theKey->getKey().compareTo("INTERPOLATION") == 0) { settings.resampler = v2; } else if (theKey->getKey().compareTo("FORCEPOWEROFTWOBUFFERSIZE") == 0) { settings.powerOfTwoCompensation = v2; } else if (theKey->getKey().compareTo("AUDIODRIVER") == 0) { settings.setAudioDriverName(theKey->getStringValue()); } else if (theKey->getKey().compareTo("PLAYMODEKEEPSETTINGS") == 0) { sectionQuickOptions->setKeepSettings(v2 != 0); } else if (theKey->getKey().compareTo("PLAYMODE") == 0) { PPString str = theKey->getStringValue(); if (str.compareTo("PROTRACKER2") == 0) { playerController->switchPlayMode(PlayerController::PlayMode_ProTracker2, false); // we set default to 4 channels so people will immediately be able to see // which playmode is the active one setModuleNumChannels(4); } else if (str.compareTo("PROTRACKER3") == 0) { playerController->switchPlayMode(PlayerController::PlayMode_ProTracker3, false); // see above comment setModuleNumChannels(4); } else playerController->switchPlayMode(PlayerController::PlayMode_FastTracker2, false); } else if (theKey->getKey().compareTo("PLAYMODE_ADVANCED_ALLOW8xx") == 0) { playerController->enablePlayModeOption(PlayerController::PlayModeOptionPanning8xx, v2 != 0); } else if (theKey->getKey().compareTo("PLAYMODE_ADVANCED_ALLOWE8x") == 0) { playerController->enablePlayModeOption(PlayerController::PlayModeOptionPanningE8x, v2 != 0); } else if (theKey->getKey().compareTo("PLAYMODE_ADVANCED_PTPITCHLIMIT") == 0) { playerController->enablePlayModeOption(PlayerController::PlayModeOptionForcePTPitchLimit, v2 != 0); } else if (theKey->getKey().compareTo("PLAYMODE_ADVANCED_PTPANNING") == 0) { pp_uint8* panning = new pp_uint8[TrackerConfig::numPlayerChannels]; if (PPTools::decodeByteArray(panning, TrackerConfig::numPlayerChannels, theKey->getStringValue())) { pp_int32 i; for (i = 0; i < TrackerConfig::numPlayerChannels; i++) playerController->setPanning((pp_uint8)i, panning[i]); } delete[] panning; } // ---------------- Virtal channels ------------------- else if (theKey->getKey().compareTo("VIRTUALCHANNELS") == 0) { settings.numVirtualChannels = v2; } // ---------------- XM channel limit ------------------- else if (theKey->getKey().compareTo("XMCHANNELLIMIT") == 0) { settings.numPlayerChannels = v2; } else if (theKey->getKey().compareTo("FULLSCREEN") == 0) { bool fullScreen = (v2 != 0); if (fullScreen != screen->isFullScreen()) { bool res = screen->goFullScreen(fullScreen); theKey->store(screen->isFullScreen()); if (!res) { SystemMessage message(*screen, SystemMessage::MessageFullScreenFailed); message.show(); } } } else if (theKey->getKey().compareTo("ENVELOPEEDITORSCALE") == 0) { if (sectionInstruments && sectionInstruments->getEnvelopeEditor()) sectionInstruments->getEnvelopeEditorControl()->setScale(v2); } else if (theKey->getKey().compareTo("PATTERNFONT") == 0) { if (patternEditorCtrl) patternEditorCtrl->setFont(PPFont::getFont(v2)); } else if (theKey->getKey().compareTo("SCOPES") == 0) { showScopes(v2 & 1, v2>>1); } else if (theKey->getKey().compareTo("SPACING") == 0) { if (patternEditorCtrl) patternEditorCtrl->setSpacing(v2); } else if (theKey->getKey().compareTo("HIGHLIGHTMODULO1") == 0) { if (patternEditorCtrl) patternEditorCtrl->setHighlightSpacingPrimary(v2); } else if (theKey->getKey().compareTo("HIGHLIGHTROW1") == 0) { if (patternEditorCtrl) patternEditorCtrl->setHighLightRowPrimary(v2 != 0); } else if (theKey->getKey().compareTo("HIGHLIGHTMODULO2") == 0) { if (patternEditorCtrl) patternEditorCtrl->setHighlightSpacingSecondary(v2); } else if (theKey->getKey().compareTo("HIGHLIGHTROW2") == 0) { if (patternEditorCtrl) patternEditorCtrl->setHighLightRowSecondary(v2 != 0); } else if (theKey->getKey().compareTo("INSTRUMENTBACKTRACE") == 0) { if (patternEditorCtrl) patternEditorCtrl->setInstrumentBackTrace(v2 != 0); } else if (theKey->getKey().compareTo("TABTONOTE") == 0) { if (patternEditorCtrl) patternEditorCtrl->setTabToNote(v2 != 0); } else if (theKey->getKey().compareTo("CLICKTOCURSOR") == 0) { if (patternEditorCtrl) patternEditorCtrl->setClickToCursor(v2 != 0); } else if (theKey->getKey().compareTo("PATTERNAUTORESIZE") == 0) { if (patternEditorCtrl) patternEditorCtrl->setAutoResize(v2 != 0); } else if (theKey->getKey().compareTo("HEXCOUNT") == 0) { if (patternEditorCtrl) patternEditorCtrl->setHexCount(v2 != 0); } else if (theKey->getKey().compareTo("SHOWZEROEFFECT") == 0) { if (patternEditorCtrl) patternEditorCtrl->showZeroEffect(v2 != 0); } else if (theKey->getKey().compareTo("WRAPAROUND") == 0) { setCursorWrapAround(v2 != 0, false); } else if (theKey->getKey().compareTo("PROSPECTIVE") == 0) { setProspectiveMode(v2 != 0, false); } else if (theKey->getKey().compareTo("FOLLOWSONG") == 0) { setFollowSong(v2 != 0, false); } else if (theKey->getKey().compareTo("LIVESWITCH") == 0) { setLiveSwitch(v2 != 0, false); } else if (theKey->getKey().compareTo("EDITMODE") == 0) { switchEditMode((EditModes)v2); } else if (theKey->getKey().compareTo("SCROLLMODE") == 0) { if (patternEditorCtrl) patternEditorCtrl->setScrollMode((ScrollModes)v2); } else if (theKey->getKey().compareTo("MUTEFADE") == 0) { if (patternEditorCtrl) patternEditorCtrl->setMuteFade((v2*65536)/100); } else if (theKey->getKey().compareTo("SAMPLEEDITORUNDOBUFFER") == 0) { if (sampleEditor) sampleEditor->enableUndoStack(v2 != 0); } else if (theKey->getKey().compareTo("SAMPLEEDITORDECIMALOFFSETS") == 0) { if (sectionSamples) sectionSamples->setOffsetFormat(v2); } else if (theKey->getKey().compareTo("SAMPLEEDITORLASTVALUES") == 0) { if (sampleEditorControl) { PPDictionary* dict = PPDictionary::createFromString(theKey->getStringValue()); if (dict) sampleEditorControl->getLastValues().restoreFromDictionary(*dict); delete dict; } } else if (theKey->getKey().compareTo("INTERNALDISKBROWSER") == 0) { useClassicBrowser = (v2 != 0); } else if (theKey->getKey().compareTo("INTERNALDISKBROWSERSETTINGS") == 0) { if (sectionDiskMenu) sectionDiskMenu->setConfigUInt32(v2); } else if (theKey->getKey().compareTo("INTERNALDISKBROWSERLASTPATH") == 0) { if (sectionDiskMenu) { PPSystemString path(theKey->getStringValue()); sectionDiskMenu->setCurrentPath(path, false); } } else if (theKey->getKey().compareTo("AUTOESTPLAYTIME") == 0) { if (v2) estimateSongLength(); } else if (theKey->getKey().compareTo("EXTENDEDORDERLIST") == 0) { expandOrderlist(v2 != 0); } else if (theKey->getKey().compareTo("ROWINSERTADD") == 0) { getPatternEditorControl()->setRowInsertAdd(v2); } else if (theKey->getKey().compareTo("TITLEPAGE") == 0) { TitlePageManager titlePageManager(*screen); titlePageManager.showTitlePage((TitlePageManager::Pages)v2, false); } // ---------------- HD Recorder settings ------------------- else if (theKey->getKey().compareTo("HDRECORDER_MIXFREQ") == 0) { sectionHDRecorder->setSettingsFrequency(v2); } else if (theKey->getKey().compareTo("HDRECORDER_MIXERVOLUME") == 0) { sectionHDRecorder->setSettingsMixerVolume(v2); } else if (theKey->getKey().compareTo("HDRECORDER_MIXERSHIFT") == 0) { sectionHDRecorder->setSettingsMixerShift(v2); } else if (theKey->getKey().compareTo("HDRECORDER_RAMPING") == 0) { sectionHDRecorder->setSettingsRamping(v2 != 0); } else if (theKey->getKey().compareTo("HDRECORDER_INTERPOLATION") == 0) { sectionHDRecorder->setSettingsResampler(v2); } else if (theKey->getKey().compareTo("HDRECORDER_ALLOWMUTING") == 0) { sectionHDRecorder->setSettingsAllowMuting(v2 != 0); } // ---------------- Recording & stuff ------------------ else if (theKey->getKey().compareTo("MULTICHN_RECORD") == 0) { playerMaster->setMultiChannelRecord(v2 != 0); } else if (theKey->getKey().compareTo("MULTICHN_KEYJAZZ") == 0) { playerMaster->setMultiChannelKeyJazz(v2 != 0); } else if (theKey->getKey().compareTo("MULTICHN_EDIT") == 0) { patternEditorCtrl->setMultiChannelEdit(v2 != 0); } else if (theKey->getKey().compareTo("MULTICHN_RECORDKEYOFF") == 0) { recorderLogic->setRecordKeyOff(v2 != 0); } else if (theKey->getKey().compareTo("MULTICHN_RECORDNOTEDELAY") == 0) { recorderLogic->setRecordNoteDelay(v2 != 0); } else if (theKey->getKey().compareTo("INVERTMWHEELZOOM") == 0) { sectionSamples->getSampleEditorControl()->setInvertMWheelZoom(v2 != 0); sectionInstruments->getEnvelopeEditorControl()->setInvertMWheelZoom(v2 != 0); } // ----------------------- Tabs ------------------------- else if (theKey->getKey().compareTo("TABS_STOPBACKGROUNDBEHAVIOUR") == 0) { switch (v2) { case TabManager::StopTabsBehaviourNone: tabManager->setStopOnTabSwitch(false); playerLogic->setStopBackgroundOnPlay(false); break; case TabManager::StopTabsBehaviourOnTabSwitch: tabManager->setStopOnTabSwitch(true); playerLogic->setStopBackgroundOnPlay(false); break; case TabManager::StopTabsBehaviourOnPlayback: tabManager->setStopOnTabSwitch(false); playerLogic->setStopBackgroundOnPlay(true); break; } } else if (theKey->getKey().compareTo("TABS_TABSWITCHRESUMEPLAY") == 0) { tabManager->setResumeOnTabSwitch(v2 != 0); } // ------------------ color palette -------------------- else if (theKey->getKey().compareTo("ACTIVECOLORS") == 0) { TColorPalette pal; PPString str = theKey->getStringValue(); pal = ColorPaletteContainer::decodePalette(str); // Set colors added in 0.90.87 to default values if config file is from older version if (version < 0x009087) { pal.colors[GlobalColorConfig::ColorScrollBarBackground] = PPUIConfig::getInstance()->getColor(PPUIConfig::ColorScrollBarBackground); pal.colors[GlobalColorConfig::ColorRecordModeButtonText] = TrackerConfig::colorRecordModeButtonText; pal.colors[GlobalColorConfig::ColorScopesRecordIndicator] = TrackerConfig::colorScopesRecordIndicator; pal.colors[GlobalColorConfig::ColorPeakClipIndicator] = TrackerConfig::colorPeakClipIndicator; pal.colors[GlobalColorConfig::ColorSampleEditorWaveform] = TrackerConfig::colorSampleEditorWaveform; } for (pp_int32 i = 0; i < pal.numColors; i++) { if (i < GlobalColorConfig::ColorLast) GlobalColorConfig::getInstance()->setColor((GlobalColorConfig::GlobalColors)i, pal.colors[i]); } } else if (theKey->getKey().startsWith("PREDEFCOLORPALETTE_")) { if (sectionSettings) { PPString str = (const char*)theKey->getKey()+19; pp_int32 i = str.getIntValue(); str = theKey->getStringValue(); sectionSettings->setEncodedPalette(i, str); } } // ------------------ envelopes -------------------- else if (theKey->getKey().startsWith("PREDEFENVELOPEVOLUME_")) { if (sectionInstruments) { PPString str = (const char*)theKey->getKey()+21; pp_int32 i = str.getIntValue(); str = theKey->getStringValue(); sectionInstruments->setEncodedEnvelope(SectionInstruments::EnvelopeTypeVolume, i, str); } } else if (theKey->getKey().startsWith("PREDEFENVELOPEPANNING_")) { if (sectionInstruments) { PPString str = (const char*)theKey->getKey()+22; pp_int32 i = str.getIntValue(); str = theKey->getStringValue(); sectionInstruments->setEncodedEnvelope(SectionInstruments::EnvelopeTypePanning, i, str); } } // ------------------ effect macros -------------------- else if (theKey->getKey().startsWith("EFFECTMACRO_")) { if (patternEditor) { PPString str = (const char*)theKey->getKey()+12; pp_int32 i = str.getIntValue(); patternEditor->setMacroOperands(i, (pp_uint8)(v2 >> 8), (pp_uint8)(v2 & 0xff)); } } else if (theKey->getKey().startsWith("OPTIMIZER_")) { if (sectionOptimize) { PPString str = (const char*)theKey->getKey()+10; pp_int32 i = str.getIntValue(); sectionOptimize->setOptimizeCheckBoxFlags(i, v2); } } else { for (pp_uint32 i = 0; i < PPFont::FONT_LAST; i++) { const char* keyName = PPFont::getFamilyInternalName((PPFont::FontID)i); if (theKey->getKey().compareTo(keyName) == 0) { PPFont::selectFontFace((PPFont::FontID)i, theKey->getStringValue()); } } } } void Tracker::getMixerSettingsFromDatabase(TMixerSettings& mixerSettings, TrackerSettingsDatabase& currentSettings) { mixerSettings.mixFreq = currentSettings.restore("MIXERFREQ")->getIntValue(); mixerSettings.bufferSize = currentSettings.restore("BUFFERSIZE")->getIntValue(); mixerSettings.mixerVolume = currentSettings.restore("MIXERVOLUME")->getIntValue(); mixerSettings.mixerShift = 2 - currentSettings.restore("MIXERSHIFT")->getIntValue(); mixerSettings.powerOfTwoCompensation = currentSettings.restore("FORCEPOWEROFTWOBUFFERSIZE")->getIntValue(); mixerSettings.resampler = currentSettings.restore("INTERPOLATION")->getIntValue(); mixerSettings.ramping = currentSettings.restore("RAMPING")->getIntValue(); mixerSettings.setAudioDriverName(currentSettings.restore("AUDIODRIVER")->getStringValue()); mixerSettings.numPlayerChannels = currentSettings.restore("XMCHANNELLIMIT")->getIntValue(); mixerSettings.numVirtualChannels = currentSettings.restore("VIRTUALCHANNELS")->getIntValue(); } void Tracker::applySettings(TrackerSettingsDatabase* newSettings, TrackerSettingsDatabase* currentSettings/* = NULL*/, bool applyMixerSettings/* = true*/, bool allowMixerRestart/* = true*/) { pp_uint32 version = MILKYTRACKER_VERSION; PPDictionaryKey* versionKey = newSettings->restore("VERSION"); if (versionKey != NULL) version = versionKey->getIntValue(); PPDictionaryKey* theKey = newSettings->getFirstKey(); TMixerSettings newMixerSettings; while (theKey) { if (currentSettings != NULL) { PPDictionaryKey* dKey = currentSettings->restore(theKey->getKey()); if (dKey) { if (theKey->getStringValue().compareTo(dKey->getStringValue()) != 0) { applySettingByKey(theKey, newMixerSettings, version); } } } else { applySettingByKey(theKey, newMixerSettings, version); } theKey = newSettings->getNextKey(); } if (applyMixerSettings) { bool res = playerMaster->applyNewMixerSettings(newMixerSettings, allowMixerRestart); if (!res) { SystemMessage message(*screen, SystemMessage::MessageSoundDriverInitFailed); message.show(); } } } MilkyTracker-1.02.00/src/tracker/TrackerSettingsDatabase.cpp000066400000000000000000000057221324432207300237500ustar00rootroot00000000000000/* * tracker/TrackerSettingsDatabase.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * TrackerSettingsDatabase.cpp * MilkyTracker * * Created by Peter Barth on Tue Mar 15 2005. * */ #include "BasicTypes.h" #include "TrackerSettingsDatabase.h" #include "XMFile.h" TrackerSettingsDatabase::TrackerSettingsDatabase(const TrackerSettingsDatabase& source) : dictionary(source.dictionary), maxKeys(source.maxKeys) { } TrackerSettingsDatabase& TrackerSettingsDatabase::operator=(const TrackerSettingsDatabase& source) { if (this != &source) { dictionary = source.dictionary; maxKeys = source.maxKeys; } return *this; } void TrackerSettingsDatabase::store(const PPString& key, const PPString& value) { dictionary.store(key, value); } void TrackerSettingsDatabase::store(const PPString& key, const pp_uint32 value) { dictionary.store(key, value); } bool TrackerSettingsDatabase::hasKey(const PPString& key) { return dictionary.restore(key) != NULL; } PPDictionaryKey* TrackerSettingsDatabase::restore(const PPString& key) { return dictionary.restore(key); } bool TrackerSettingsDatabase::serialize(XMFile& f) { if (f.isOpenForWriting()) { if (maxKeys >= 0 && dictionary.size() > maxKeys) return false; f.writeDword(dictionary.size()); const PPDictionaryKey* theKey = dictionary.getFirstKey(); while (theKey) { f.writeDword(theKey->getKey().length()); f.write(theKey->getKey(), 1, theKey->getKey().length()); f.writeDword(theKey->getStringValue().length()); f.write(theKey->getStringValue(), 1, theKey->getStringValue().length()); theKey = dictionary.getNextKey(); } } else { pp_int32 size = f.readDword(); if (maxKeys >= 0 && size > maxKeys) return false; for (pp_int32 i = 0; i < size; i++) { pp_int32 len = f.readDword(); char* keyBuffer = new char[len+1]; memset(keyBuffer, 0, len+1); f.read(keyBuffer, 1, len); len = f.readDword(); char* valueBuffer = new char[len+1]; memset(valueBuffer, 0, len+1); f.read(valueBuffer, 1, len); store(keyBuffer, valueBuffer); delete[] valueBuffer; delete[] keyBuffer; } } return true; } void TrackerSettingsDatabase::dump() { const PPDictionaryKey* theKey = dictionary.getFirstKey(); while (theKey) { theKey = dictionary.getNextKey(); } } MilkyTracker-1.02.00/src/tracker/TrackerSettingsDatabase.h000066400000000000000000000034561324432207300234170ustar00rootroot00000000000000/* * tracker/TrackerSettingsDatabase.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * TrackerSettingsDatabase.h * MilkyTracker * * Created by Peter Barth on Tue Mar 15 2005. * */ #ifndef TRACKERSETTINGSDATABASE__H #define TRACKERSETTINGSDATABASE__H #include "BasicTypes.h" #include "Dictionary.h" class PPDictionaryKey; class XMFile; class TrackerSettingsDatabase { private: PPDictionary dictionary; pp_int32 maxKeys; public: TrackerSettingsDatabase(pp_int32 maxKeys = -1) : maxKeys(maxKeys) { } // copy c'tor TrackerSettingsDatabase(const TrackerSettingsDatabase& source); TrackerSettingsDatabase& operator=(const TrackerSettingsDatabase& source); void store(const PPString& key, const PPString& value); void store(const PPString& key, const pp_uint32 value); bool hasKey(const PPString& key); PPDictionaryKey* restore(const PPString& key); bool serialize(XMFile& file); void dump(); PPDictionaryKey* getFirstKey() { return dictionary.getFirstKey(); } PPDictionaryKey* getNextKey() { return dictionary.getNextKey(); } void stopEnumeration() { dictionary.stopEnumeration(); } }; #endif MilkyTracker-1.02.00/src/tracker/TrackerShortCuts.cpp000066400000000000000000000377701324432207300224710ustar00rootroot00000000000000/* * tracker/TrackerShortCuts.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * TrackerShortCuts.cpp * MilkyTracker * * Created by Peter Barth on Thu May 19 2005. * */ #include "Tracker.h" #include "ControlIDs.h" #include "Screen.h" #include "Event.h" #include "PlayerController.h" #include "PlayerLogic.h" #include "RecorderLogic.h" #include "Container.h" #include "ListBox.h" #include "PatternEditorControl.h" #include "ModuleEditor.h" #include "TrackerConfig.h" #include "InputControlListener.h" #include "SectionInstruments.h" #include "SectionTranspose.h" #include "SectionDiskMenu.h" void Tracker::sendNoteDown(mp_sint32 note, pp_int32 volume/* = -1*/) { if (volume != -1 && volume > 255) volume = 255; // Volume here is between 0 to 255, but don't forget to make the volume FT2 compatible (0..64) inputControlListener->sendNote(note | InputControlListener::KEY_PRESS, volume == -1 ? -1 : (signed)PatternTools::normalizeVol(volume)); } void Tracker::sendNoteUp(mp_sint32 note) { // bit 16 indicates key release inputControlListener->sendNote(note | InputControlListener::KEY_RELEASE); } void Tracker::processShortcuts(PPEvent* event) { if (processMessageBoxShortcuts(event)) return; switch (editMode) { case EditModeMilkyTracker: processShortcutsMilkyTracker(event); break; case EditModeFastTracker: processShortcutsFastTracker(event); break; default: ASSERT(false); } } void Tracker::processShortcutsMilkyTracker(PPEvent* event) { if (event->getID() == eKeyDown) { pp_uint16 keyCode = *((pp_uint16*)event->getDataPtr()); pp_uint16 scanCode = *(((pp_uint16*)event->getDataPtr())+1); switch (keyCode) { case VK_F1: case VK_F2: case VK_F3: case VK_F4: case VK_F5: case VK_F6: case VK_F7: case VK_F8: case VK_F9: case VK_F10: case VK_F11: case VK_F12: { if (::getKeyModifier()) goto processBindings; if (static_cast(getPatternEditorControl()) != screen->getFocusedControl()) { getPatternEditorControl()->dispatchEvent(event); } break; } default: { processBindings: pp_int32 keyModifier = ::getKeyModifier(); bool res = executeBinding(eventKeyDownBindings, keyCode); if (res && !isActiveEditing()) event->cancel(); if (res || keyModifier) break; if (editMode == EditModeMilkyTracker) { if (sectionDiskMenu->isFileBrowserVisible() && sectionDiskMenu->fileBrowserHasFocus()) break; } PatternEditorControl* patternEditorControl = getPatternEditorControl(); // translate key to note pp_int32 note = patternEditorControl->ScanCodeToNote(scanCode); recorderLogic->sendNoteDownToPatternEditor(event, note, patternEditorControl); break; } } } else if (event->getID() == eKeyUp) { pp_uint16 keyCode = *((pp_uint16*)event->getDataPtr()); pp_uint16 scanCode = *(((pp_uint16*)event->getDataPtr())+1); switch (keyCode) { case VK_SPACE: { playerLogic->finishTraceAndRowPlay(); break; } default: { PatternEditorControl* patternEditorControl = getPatternEditorControl(); pp_int32 note = patternEditorControl->ScanCodeToNote(scanCode); recorderLogic->sendNoteUpToPatternEditor(event, note, patternEditorControl); } } } } void Tracker::selectNextOrder(bool wrap/* = false*/) { if (wrap && listBoxOrderList->isLastEntry()) { setOrderListIndex(0); return; } pp_uint16 vk[3] = {VK_DOWN, 0, 0}; PPEvent e(eKeyDown, &vk, sizeof(vk)); listBoxOrderList->dispatchEvent(&e); } void Tracker::selectPreviousOrder(bool wrap/* = false*/) { if (wrap && listBoxOrderList->isFirstEntry()) { setOrderListIndex(listBoxOrderList->getNumItems()-1); return; } pp_uint16 vk[3] = {VK_UP, 0, 0}; PPEvent e(eKeyDown, &vk, sizeof(vk)); listBoxOrderList->dispatchEvent(&e); } void Tracker::selectNextInstrument() { pp_uint16 vk[3] = {VK_DOWN, 0, 0}; PPEvent e(eKeyDown, &vk, sizeof(vk)); listBoxInstruments->dispatchEvent(&e); } void Tracker::selectPreviousInstrument() { pp_uint16 vk[3] = {VK_UP, 0, 0}; PPEvent e(eKeyDown, &vk, sizeof(vk)); listBoxInstruments->dispatchEvent(&e); } /////////////////////////////////////////////////////////////////////////////// // The Fasttracker II compatibility mode is really just a big hack, because // MilkyTracker uses focus handling on most editable controls while FT2 doesn't // ---------------------------------------------------------------------------- // 1. a defined set of keys always are always routed to to the pattern editor // 2. If record mode is ON all keyboard events are also routed to pattern editor // (no matter if it can handle them or not) // 3. Keys are not routed into any other control except for editing /////////////////////////////////////////////////////////////////////////////// void Tracker::processShortcutsFastTracker(PPEvent* event) { if (isActiveEditing()) return; /*if (screen->getFocusedControl() != static_cast(getPatternEditorControl())) { screen->setFocus(getPatternEditorControl()); screen->paintControl(getPatternEditorControl()); }*/ if (event->getID() == eKeyDown) { pp_uint16 keyCode = *((pp_uint16*)event->getDataPtr()); pp_uint16 scanCode = *(((pp_uint16*)event->getDataPtr())+1); switch (scanCode) { case SC_WTF: if (!::getKeyModifier() || ::getKeyModifier() == KeyModifierSHIFT) { getPatternEditorControl()->dispatchEvent(event); event->cancel(); keyCode = 0; } break; // Place cursor in channel case SC_Q: case SC_W: case SC_E: case SC_R: case SC_T: case SC_Z: case SC_U: case SC_I: case SC_A: case SC_S: case SC_D: case SC_F: case SC_G: case SC_H: case SC_J: case SC_K: if (screen->getModalControl()) break; if (::getKeyModifier() == KeyModifierALT) { getPatternEditorControl()->dispatchEvent(event); event->cancel(); keyCode = 0; } break; // Increment/decrement instrument case SC_SS: case SC_TICK: if (screen->getModalControl()) break; if (::getKeyModifier() == KeyModifierCTRL || ::getKeyModifier() == (KeyModifierSHIFT|KeyModifierCTRL)) { getPatternEditorControl()->dispatchEvent(event); event->cancel(); keyCode = 0; } break; } switch (keyCode) { case VK_SPACE: { if (screen->getModalControl()) break; if (::getKeyModifier()) goto processOthers; if (playerController->isPlaying() || playerController->isPlayingPattern()) { playerLogic->stopSong(); event->cancel(); break; } playerLogic->stopSong(); eventKeyDownBinding_ToggleFT2Edit(); event->cancel(); break; } // Those are the key combinations which are always routed to pattern editor control as long // as we're in Fasttracker editing mode case VK_ALT: case VK_SHIFT: case VK_CONTROL: if (screen->getModalControl()) break; getPatternEditorControl()->dispatchEvent(event); event->cancel(); break; // Transpose (regardless of modifers) case VK_F1: case VK_F2: case VK_F7: case VK_F8: case VK_F9: case VK_F10: case VK_F11: case VK_F12: processShortcutsMilkyTracker(event); break; // Cut copy paste case VK_F3: case VK_F4: case VK_F5: case VK_F6: // Global meaning here if (::getKeyModifier()) { getPatternEditorControl()->dispatchEvent(event); event->cancel(); break; } processShortcutsMilkyTracker(event); break; // Some special keys always going to the pattern editor (like undo, redo, mute etc.) case 'A': case 'C': case 'V': case 'X': case 'Z': case 'Y': if (screen->getModalControl()) { // those seem to be piano keys, they're used in some // modal dialogs for instrument preview playback if (!::getKeyModifier()) goto processOthers; break; } if (::getKeyModifier() == (KeyModifierCTRL|KeyModifierALT)) { getPatternEditorControl()->dispatchEvent(event); event->cancel(); } else goto processOthers; break; case 'I': if (screen->getModalControl()) break; if (::getKeyModifier() == KeyModifierSHIFT) { getPatternEditorControl()->dispatchEvent(event); event->cancel(); } else goto processOthers; break; case 'M': if (screen->getModalControl()) break; if (::getKeyModifier() == KeyModifierSHIFT || ::getKeyModifier() == (KeyModifierSHIFT|KeyModifierCTRL)) { getPatternEditorControl()->dispatchEvent(event); event->cancel(); } else goto processOthers; break; case VK_UP: case VK_DOWN: case VK_LEFT: case VK_RIGHT: case VK_HOME: case VK_END: case VK_PRIOR: case VK_NEXT: if (screen->getModalControl()) break; if (!::getKeyModifier() || ::getKeyModifier() == KeyModifierALT || ::getKeyModifier() == (KeyModifierSHIFT|KeyModifierALT)) { getPatternEditorControl()->dispatchEvent(event); event->cancel(); } else if (::getKeyModifier() == KeyModifierSHIFT) { switch (keyCode) { // Select instrument using Shift+Up/Down case VK_UP: case VK_DOWN: case VK_NEXT: case VK_PRIOR: listBoxInstruments->dispatchEvent(event); event->cancel(); break; // Select new order using Shift+Left/Right case VK_LEFT: { selectPreviousOrder(); event->cancel(); break; } case VK_RIGHT: { selectNextOrder(); event->cancel(); break; } } } else if (::getKeyModifier() == (KeyModifierSHIFT|KeyModifierCTRL)) { switch (keyCode) { // Select sample using Shift+Alt+Up/Down case VK_UP: case VK_DOWN: case VK_NEXT: case VK_PRIOR: listBoxSamples->dispatchEvent(event); event->cancel(); break; } } else if (::getKeyModifier() == KeyModifierCTRL) { switch (keyCode) { // Select pattern using Ctrl+Left/Right case VK_LEFT: eventKeyDownBinding_PreviousPattern(); event->cancel(); break; case VK_RIGHT: eventKeyDownBinding_NextPattern(); event->cancel(); break; } } goto processOthers; break; case VK_TAB: if (screen->getModalControl()) break; getPatternEditorControl()->dispatchEvent(event); event->cancel(); break; default: processOthers: processShortcutsMilkyTracker(event); if (screen->getModalControl()) break; if (recorderLogic->getRecordMode()) { getPatternEditorControl()->dispatchEvent(event); event->cancel(); } // if recordMode is false and focus is on pattern editor // we need to cancel the event in order to prevent it // from going into the pattern editor else if (screen->getFocusedControl() == static_cast(getPatternEditorControl())) { event->cancel(); } } } else if (event->getID() == eKeyChar) { if (recorderLogic->getRecordMode()) { getPatternEditorControl()->dispatchEvent(event); event->cancel(); } // if recordMode is false and focus is on pattern editor // we need to cancel the event in order to prevent it // from going into the pattern editor else if (screen->getFocusedControl() == static_cast(getPatternEditorControl())) { event->cancel(); } } else if (event->getID() == eKeyUp) { pp_uint16 keyCode = *((pp_uint16*)event->getDataPtr()); //pp_uint16 scanCode = *(((pp_uint16*)event->getDataPtr())+1); switch (keyCode) { // Those are the keykombinations which are always routed to pattern editor control as long // as we're in Fasttracker editing mode case VK_ALT: case VK_SHIFT: case VK_CONTROL: if (screen->getModalControl()) break; getPatternEditorControl()->dispatchEvent(event); event->cancel(); break; default: processShortcutsMilkyTracker(event); if (screen->getModalControl()) /*break;*/return; if (recorderLogic->getRecordMode()) { getPatternEditorControl()->dispatchEvent(event); event->cancel(); } // if recordMode is false and focus is on pattern editor // we need to cancel the event in order to prevent it // from going into the pattern editor else if (screen->getFocusedControl() == static_cast(getPatternEditorControl())) { event->cancel(); } } } } void Tracker::switchEditMode(EditModes mode) { bool b = (mode == EditModeMilkyTracker); PPContainer* container = static_cast(screen->getControlByID(CONTAINER_MENU)); ASSERT(container); // Assign keyboard bindings getPatternEditorControl()->setShowFocus(b); listBoxInstruments->setShowFocus(b); listBoxSamples->setShowFocus(b); listBoxOrderList->setShowFocus(b); sectionDiskMenu->setFileBrowserShowFocus(b); sectionDiskMenu->setCycleFilenames(b); container = static_cast(screen->getControlByID(CONTAINER_ABOUT)); ASSERT(container); static_cast(container->getControlByID(LISTBOX_SONGTITLE))->setShowFocus(b); if (b) { eventKeyDownBindings = eventKeyDownBindingsMilkyTracker; screen->setFocus(listBoxInstruments, false); } else { eventKeyDownBindings = eventKeyDownBindingsFastTracker; recorderLogic->setRecordMode(true); eventKeyDownBinding_ToggleFT2Edit(); } getPatternEditorControl()->switchEditMode(mode); editMode = mode; } // Process messagebox shortcuts (RETURN & ESC) // the modal dialogs only appear to be modal, we're still getting // keyboard events here in case a modal dialog box appears // this is the handler which allows for esc + return handling in case // of a modal dialog static void simulateMouseClickEvent(PPControl* ctrl) { PPPoint p = ctrl->getLocation(); p.x+=ctrl->getSize().width >> 1; p.y+=ctrl->getSize().height >> 1; PPEvent e1(eLMouseDown, &p, sizeof(PPPoint)); PPEvent e2(eLMouseUp, &p, sizeof(PPPoint)); ctrl->dispatchEvent(&e1); ctrl->dispatchEvent(&e2); } bool Tracker::processMessageBoxShortcuts(PPEvent* event) { PPControl* ctrl = screen->getModalControl(); if (ctrl == NULL || !ctrl->isContainer() || (event->getID() != eKeyDown && event->getID() != eKeyChar)) return false; PPSimpleVector& controls = static_cast(ctrl)->getControls(); pp_int32 i; // if dialog contains list (list can also be an edit field btw.) // and something is being edited in that list we don't simulate // yes/no/cancel button presses for (i = 0; i < controls.size(); i++) { PPControl* ctrl = controls.get(i); if (ctrl->isListBox() && static_cast(ctrl)->isEditing()) return true; } // iterate over controls in dialog and see whether we can find // yes/no/cancel buttons // if that's the case we simulate mouse button press if (event->getID() == eKeyDown) { pp_uint16 keyCode = *((pp_uint16*)event->getDataPtr()); for (i = 0; i < controls.size(); i++) { PPControl* ctrl = controls.get(i); switch (ctrl->getID()) { case PP_MESSAGEBOX_BUTTON_YES: if (keyCode == VK_RETURN) { simulateMouseClickEvent(ctrl); return true; } break; case PP_MESSAGEBOX_BUTTON_CANCEL: case PP_MESSAGEBOX_BUTTON_NO: if (keyCode == VK_ESCAPE) { simulateMouseClickEvent(ctrl); return true; } break; } } } return false; } MilkyTracker-1.02.00/src/tracker/TrackerShutDown.cpp000066400000000000000000000210761324432207300222760ustar00rootroot00000000000000/* * tracker/TrackerShutDown.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * TrackerShutdown.cpp * MilkyTracker * * Created by Peter Barth on Sun Mar 20 2005. * */ #include "Tracker.h" #include "TabManager.h" #include "MilkyPlay.h" #include "PlayerController.h" #include "PlayerMaster.h" #include "PlayerLogic.h" #include "TrackerSettingsDatabase.h" #include "TrackerConfig.h" #include "PPSystem.h" #include "PPSavePanel.h" #include "PPQuitSaveAlert.h" #include "ModuleEditor.h" #include "SectionInstruments.h" #include "PatternEditorControl.h" #include "EnvelopeEditorControl.h" #include "SampleEditorControl.h" #include "SectionDiskMenu.h" #include "SectionHDRecorder.h" #include "SectionOptimize.h" #include "ScopesControl.h" #include "GlobalColorConfig.h" #include "ColorPaletteContainer.h" #include "SectionSettings.h" #include "SectionSamples.h" #include "SectionQuickOptions.h" #include "Tools.h" #include "TitlePageManager.h" #include "version.h" bool Tracker::checkForChanges(ModuleEditor* moduleEditor/* = NULL*/) { if (moduleEditor == NULL) moduleEditor = this->moduleEditor; // save current file? if (moduleEditor->hasChanged()) { PPQuitSaveAlert quitSaveAlertDialog(screen); PPQuitSaveAlert::ReturnCodes err = quitSaveAlertDialog.runModal(); if (err == PPQuitSaveAlert::ReturnCodeOK) { PPSavePanel savePanel(screen, "Save Extended Module", moduleEditor->getModuleFileName()); savePanel.addExtension("xm","Fasttracker 2 Module"); err = savePanel.runModal(); if (err == PPSavePanel::ReturnCodeOK) { const SYSCHAR* file = savePanel.getFileName(); if (file) { moduleEditor->saveSong(file); } } else if (err == PPSavePanel::ReturnCodeCANCEL) { return false; } } else if (err == PPSavePanel::ReturnCodeCANCEL) { return false; } } return true; } bool Tracker::checkForChangesOpenModule() { bool openTab = (settingsDatabase->restore("TABS_LOADMODULEINNEWTAB")->getBoolValue() && (moduleEditor->hasChanged() || !moduleEditor->isEmpty())); if (openTab) return true; return checkForChanges(); } bool Tracker::shutDown() { pp_int32 i; ModuleEditor* currentEditor = moduleEditor; for (i = 0; i < tabManager->getNumTabs(); i++) { moduleEditor = tabManager->getModuleEditorFromTabIndex(i); bool res = checkForChanges(); if (!res) return false; } moduleEditor = currentEditor; playerMaster->stop(true); XMFile f(System::getConfigFileName(), true); if(f.isOpenForWriting()) { // ----------- Save last settings ----------- // store version string to database settingsDatabase->store("VERSION", MILKYTRACKER_VERSION ); char buffer[100]; // playmode settings const char* playModeStrings[5] = {"AUTO", "PROTRACKER2", "PROTRACKER3", "SCREAMTRACKER3", "FASTTRACKER2"}; pp_int32 playMode = playerController->getPlayMode(); ASSERT(playMode >= 0 && playMode < 5); settingsDatabase->store("PLAYMODEKEEPSETTINGS", sectionQuickOptions->keepSettings()); settingsDatabase->store("PLAYMODE", sectionQuickOptions->keepSettings() ? playModeStrings[playMode] : playModeStrings[4]); settingsDatabase->store("PLAYMODE_ADVANCED_ALLOW8xx", playerController->isPlayModeOptionEnabled(PlayerController::PlayModeOptionPanning8xx)); settingsDatabase->store("PLAYMODE_ADVANCED_ALLOWE8x", playerController->isPlayModeOptionEnabled(PlayerController::PlayModeOptionPanningE8x)); // Only affects protracker playmodes settingsDatabase->store("PLAYMODE_ADVANCED_PTPITCHLIMIT", playerController->isPlayModeOptionEnabled(PlayerController::PlayModeOptionForcePTPitchLimit)); // save default panning for protracker playmodes pp_uint8* panning = new pp_uint8[TrackerConfig::numPlayerChannels]; for (i = 0; i < TrackerConfig::numPlayerChannels; i++) panning[i] = playerController->getPanning((pp_uint8)i); settingsDatabase->store("PLAYMODE_ADVANCED_PTPANNING", PPTools::encodeByteArray(panning, TrackerConfig::numPlayerChannels)); delete[] panning; // quick options settingsDatabase->store("PROSPECTIVE", getProspectiveMode() ? 1 : 0); settingsDatabase->store("WRAPAROUND", getCursorWrapAround() ? 1 : 0); settingsDatabase->store("FOLLOWSONG", getFollowSong() ? 1 : 0); settingsDatabase->store("LIVESWITCH", playerLogic->getLiveSwitch() ? 1 : 0); // Disk Operations settingsDatabase->store("INTERNALDISKBROWSERSETTINGS", sectionDiskMenu->getConfigUInt32()); settingsDatabase->store("INTERNALDISKBROWSERLASTPATH", sectionDiskMenu->getCurrentPathASCII()); // HD recorder settingsDatabase->store("HDRECORDER_MIXFREQ", sectionHDRecorder->getSettingsFrequency()); settingsDatabase->store("HDRECORDER_MIXERVOLUME", sectionHDRecorder->getSettingsMixerVolume()); settingsDatabase->store("HDRECORDER_MIXERSHIFT", sectionHDRecorder->getSettingsMixerShift()); settingsDatabase->store("HDRECORDER_RAMPING", sectionHDRecorder->getSettingsRamping() ? 1 : 0); settingsDatabase->store("HDRECORDER_INTERPOLATION", sectionHDRecorder->getSettingsResampler()); settingsDatabase->store("HDRECORDER_ALLOWMUTING", sectionHDRecorder->getSettingsAllowMuting() ? 1 : 0); // sample editor settingsDatabase->store("SAMPLEEDITORDECIMALOFFSETS", sectionSamples->getOffsetFormat()); // Sample editor contol will store last used values here PPDictionary dictonary = sectionSamples->getSampleEditorControl()->getLastValues().convertToDictionary(); PPString lastValues = dictonary.serializeToString(); settingsDatabase->store("SAMPLEEDITORLASTVALUES", lastValues); // Optimizer for (i = 0; i < (signed)SectionOptimize::getNumFlagGroups(); i++) { sprintf(buffer, "OPTIMIZER_%i",i); settingsDatabase->store(buffer, sectionOptimize->getOptimizeCheckBoxFlags(i)); } // Scale of envelope editor settingsDatabase->store("ENVELOPEEDITORSCALE", sectionInstruments->getEnvelopeEditorControl()->getScale()); // Orderlist was expanded? settingsDatabase->store("EXTENDEDORDERLIST", extendedOrderlist ? 1 : 0); // Current row insert add value settingsDatabase->store("ROWINSERTADD", getPatternEditorControl()->getRowInsertAdd()); // Current visible title page TitlePageManager titlePageManager(*screen); settingsDatabase->store("TITLEPAGE", titlePageManager.getCurrentTitlePage()); // Save colors TColorPalette palette; palette.numColors = GlobalColorConfig::ColorLast; for (i = 0; i < palette.numColors; i++) palette.colors[i] = GlobalColorConfig::getInstance()->getColor((GlobalColorConfig::GlobalColors)i); settingsDatabase->store("ACTIVECOLORS", ColorPaletteContainer::encodePalette(palette)); // store predefined envelopes for (i = 0; i < sectionInstruments->getNumPredefinedEnvelopes(); i++) { sprintf(buffer, "PREDEFENVELOPEVOLUME_%i",i); settingsDatabase->store(buffer, sectionInstruments->getEncodedEnvelope(SectionInstruments::EnvelopeTypeVolume, i)); } for (i = 0; i < sectionInstruments->getNumPredefinedEnvelopes(); i++) { sprintf(buffer, "PREDEFENVELOPEPANNING_%i",i); settingsDatabase->store(buffer, sectionInstruments->getEncodedEnvelope(SectionInstruments::EnvelopeTypePanning, i)); } // store effect macros from pattern editor control for (i = 0; i < NUMEFFECTMACROS; i++) { sprintf(buffer, "EFFECTMACRO_%i",i); pp_uint8 eff, op; getPatternEditor()->getMacroOperands(i, eff, op); pp_int32 val = (((pp_int32)eff) << 8) + (pp_int32)op; settingsDatabase->store(buffer, val); } for (i = 0; i < sectionSettings->getNumPredefinedColorPalettes(); i++) { sprintf(buffer, "PREDEFCOLORPALETTE_%i",i); settingsDatabase->store(buffer, sectionSettings->getEncodedPalette(i)); } settingsDatabase->serialize(f); } // isOpenForWriting return true; } // this is used when the tracker crashes // The os dependent layer can call this and it will save a backup of the current // module // TO-DO: Doesn't handle tabs properly yet, will only save the current tab mp_sint32 Tracker::saveModule(const PPSystemString& fileName) { return moduleEditor->saveBackup(fileName); } MilkyTracker-1.02.00/src/tracker/TrackerStartUp.cpp000066400000000000000000000154241324432207300221250ustar00rootroot00000000000000/* * tracker/TrackerStartUp.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * TrackerStartUp.cpp * MilkyTracker * * Created by Peter Barth on Sun Mar 20 2005. * */ #include "Tracker.h" #include "XMFile.h" #include "TrackerSettingsDatabase.h" #include "PPSystem.h" #include "Screen.h" #include "PatternEditorControl.h" #include "PlayerMaster.h" #include "SystemMessage.h" #include "version.h" // Logo picture #if defined(__EXCLUDE_BIGLOGO__) || defined(__LOWRES__) #include "LogoSmall.h" #else #include "LogoBig.h" #endif PPSize Tracker::getWindowSizeFromDatabase() { PPSize size(PPScreen::getDefaultWidth(), PPScreen::getDefaultHeight()); if (XMFile::exists(System::getConfigFileName())) { TrackerSettingsDatabase* settingsDatabaseCopy = new TrackerSettingsDatabase(*settingsDatabase); XMFile f(System::getConfigFileName()); settingsDatabaseCopy->serialize(f); size.height = settingsDatabaseCopy->restore("YRESOLUTION")->getIntValue(); size.width = settingsDatabaseCopy->restore("XRESOLUTION")->getIntValue(); delete settingsDatabaseCopy; } return size; } bool Tracker::getFullScreenFlagFromDatabase() { bool fullScreen = false; if (XMFile::exists(System::getConfigFileName())) { TrackerSettingsDatabase* settingsDatabaseCopy = new TrackerSettingsDatabase(*settingsDatabase); XMFile f(System::getConfigFileName()); settingsDatabaseCopy->serialize(f); fullScreen = settingsDatabaseCopy->restore("FULLSCREEN")->getBoolValue(); delete settingsDatabaseCopy; } return fullScreen; } pp_int32 Tracker::getScreenScaleFactorFromDatabase() { pp_int32 scaleFactor = 1; if (XMFile::exists(System::getConfigFileName())) { TrackerSettingsDatabase* settingsDatabaseCopy = new TrackerSettingsDatabase(*settingsDatabase); XMFile f(System::getConfigFileName()); settingsDatabaseCopy->serialize(f); scaleFactor = settingsDatabaseCopy->restore("SCREENSCALEFACTOR")->getIntValue(); delete settingsDatabaseCopy; } return scaleFactor; } bool Tracker::getShowSplashFlagFromDatabase() { bool showSplash = true; if (XMFile::exists(System::getConfigFileName())) { TrackerSettingsDatabase* settingsDatabaseCopy = new TrackerSettingsDatabase(*settingsDatabase); XMFile f(System::getConfigFileName()); settingsDatabaseCopy->serialize(f); showSplash = settingsDatabaseCopy->restore("SHOWSPLASH")->getBoolValue(); delete settingsDatabaseCopy; } return showSplash; } #define SPLASH_WAIT_TIME 1000 void Tracker::showSplash() { screen->clear(); float shade = 0.0f; pp_int32 deltaT = 100; while (shade <= 256.0f) { pp_int32 startTime = ::PPGetTickCount(); #if defined(__EXCLUDE_BIGLOGO__) || defined(__LOWRES__) screen->paintSplash(LogoSmall::rawData, LogoSmall::width, LogoSmall::height, LogoSmall::width*4, 4, (int)shade); #else screen->paintSplash(LogoBig::rawData, LogoBig::width, LogoBig::height, LogoBig::width*3, 3, (int)shade); #endif shade+=deltaT * (1.0f/6.25f); deltaT = abs((pp_int32)::PPGetTickCount() - startTime); if (!deltaT) deltaT++; } #if defined(__EXCLUDE_BIGLOGO__) || defined(__LOWRES__) screen->paintSplash(LogoSmall::rawData, LogoSmall::width, LogoSmall::height, LogoSmall::width*4, 4); #else screen->paintSplash(LogoBig::rawData, LogoBig::width, LogoBig::height, LogoBig::width*3, 3); #endif screen->enableDisplay(false); } void Tracker::hideSplash() { screen->clear(); #if defined(__EXCLUDE_BIGLOGO__) || defined(__LOWRES__) screen->paintSplash(LogoSmall::rawData, LogoSmall::width, LogoSmall::height, LogoSmall::width*4, 4); #else screen->paintSplash(LogoBig::rawData, LogoBig::width, LogoBig::height, LogoBig::width*3, 3); #endif screen->enableDisplay(true); float shade = 256.0f; pp_int32 deltaT = 100; while (shade >= 0.0f) { pp_int32 startTime = ::PPGetTickCount(); #if defined(__EXCLUDE_BIGLOGO__) || defined(__LOWRES__) screen->paintSplash(LogoSmall::rawData, LogoSmall::width, LogoSmall::height, LogoSmall::width*4, 4, (int)shade); #else screen->paintSplash(LogoBig::rawData, LogoBig::width, LogoBig::height, LogoBig::width*3, 3, (int)shade); #endif shade-=deltaT * (1.0f/6.25f); deltaT = abs((pp_int32)::PPGetTickCount() - startTime); if (!deltaT) deltaT++; } screen->clear(); screen->pauseUpdate(true); screen->paintControl(getPatternEditorControl(), false); screen->paint(); screen->pauseUpdate(false); } void Tracker::startUp(bool forceNoSplash/* = false*/) { bool noSplash = forceNoSplash ? true : !getShowSplashFlagFromDatabase(); // put up splash screen if desired pp_uint32 startTime = PPGetTickCount(); if (!noSplash) showSplash(); else screen->enableDisplay(false); initUI(); pp_int32 dTime; if (!noSplash) { dTime = (signed)(PPGetTickCount() - startTime); if (dTime > SPLASH_WAIT_TIME) dTime = SPLASH_WAIT_TIME; if (dTime < 0) dTime = 0; System::msleep(SPLASH_WAIT_TIME/2 - dTime); startTime = PPGetTickCount(); } if (XMFile::exists(System::getConfigFileName())) { // create as copy from existing database, so all keys are in there settingsDatabaseCopy = new TrackerSettingsDatabase(*settingsDatabase); XMFile f(System::getConfigFileName()); // restore keys from disk settingsDatabaseCopy->serialize(f); // everything alright, delete old database and take new one delete settingsDatabase; settingsDatabase = settingsDatabaseCopy; settingsDatabaseCopy = NULL; } // apply ALL settings, not just the different ones applySettings(settingsDatabase, NULL, true, false); // update version information settingsDatabase->store("VERSION", MILKYTRACKER_VERSION); // Update info panels updateSongInfo(false); updateWindowTitle(); // try to start playback engine bool masterStart = playerMaster->start(); // remove splash screen if (!noSplash) { dTime = (signed)(PPGetTickCount() - startTime); if (dTime > SPLASH_WAIT_TIME/2) dTime = SPLASH_WAIT_TIME/2; if (dTime < 0) dTime = 0; System::msleep(SPLASH_WAIT_TIME/2 - dTime); hideSplash(); } else screen->enableDisplay(true); screen->paint(); if (!masterStart) { SystemMessage systemMessage(*screen, SystemMessage::MessageSoundDriverInitFailed); systemMessage.show(); } } MilkyTracker-1.02.00/src/tracker/TrackerUpdate.cpp000066400000000000000000001004511324432207300217400ustar00rootroot00000000000000/* * tracker/TrackerUpdate.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "Tracker.h" #include "TabManager.h" #include "TrackerConfig.h" #include "PlayerController.h" #include "PlayerMaster.h" #include "ModuleEditor.h" #include "ModuleServices.h" #include "TabTitleProvider.h" #include "EnvelopeEditor.h" #include "PatternTools.h" #include "PPUIConfig.h" #include "Container.h" #include "ListBox.h" #include "StaticText.h" #include "PatternEditorControl.h" #include "EnvelopeEditorControl.h" #include "PianoControl.h" #include "PeakLevelControl.h" #include "ScopesControl.h" #include "SampleEditorControl.h" #include "TrackerSettingsDatabase.h" #include "SectionInstruments.h" #include "SectionSamples.h" #include "SectionHDRecorder.h" #include "SectionQuickOptions.h" #include "TabHeaderControl.h" #include "PPOpenPanel.h" #include "TitlePageManager.h" #include "ControlIDs.h" void Tracker::updateAboutToggleButton(pp_int32 id, bool b, bool repaint/* = true*/) { PPContainer* container = static_cast(screen->getControlByID(CONTAINER_ABOUT)); ASSERT(container); PPButton* button = static_cast(container->getControlByID(id)); if (button == NULL) return; button->setPressed(b); if (repaint) screen->paintControl(button); } bool Tracker::updatePianoControl(PianoControl* pianoControl) { if (!pianoControl) return false; if (!pianoControl->isVisible()) return false; pp_int32 ins = listBoxInstruments->getSelectedIndex() + 1; pp_int32 i; bool tab[ModuleEditor::MAX_NOTE]; for (i = 0; i < ModuleEditor::MAX_NOTE; i++) { tab[i] = pianoControl->getNoteState(i); pianoControl->pressNote(i, false); } for (i = 0; i < playerController->getPlayerNumPlayingChannels(); i++) { pp_int32 note; bool muted = false; if (playerController->isNotePlaying(ins, i, note, muted)) pianoControl->pressNote(note - 1, true, muted); } bool update = false; for (i = 0; i < ModuleEditor::MAX_NOTE; i++) { if (pianoControl->getNoteState(i) != tab[i]) { update = true; break; } } if (update) screen->paintControl(pianoControl, false); return update; } bool Tracker::updatePeakLevelControl() { const pp_int32 maxPeakThreshold = 32700*2; if (!peakLevelControl) return false; if (!peakLevelControl->isVisible()) return false; bool bUpdateL = false; bool bUpdateR = false; bool bUpdateEntire = false; pp_int32 left, right; playerMaster->getCurrentSamplePeak(left, right); // Left channel pp_int32 oldPeak = peakLevelControl->getPeak(0); pp_int32 newPeak = left << 1; if (newPeak >= maxPeakThreshold) { TitlePageManager titlePageManager(*screen); titlePageManager.setPeakControlHeadingColor(TrackerConfig::colorPeakClipIndicator, false); bUpdateEntire = true; } if (newPeak < oldPeak) { newPeak = oldPeak; newPeak -= 2048; if (newPeak < 0) newPeak = 0; } if (oldPeak != newPeak) { peakLevelControl->setPeak(0, newPeak); bUpdateL = true; } // Right channel oldPeak = peakLevelControl->getPeak(1); newPeak = right << 1; if (newPeak >= maxPeakThreshold) { TitlePageManager titlePageManager(*screen); titlePageManager.setPeakControlHeadingColor(TrackerConfig::colorRecordModeButtonText, false); bUpdateEntire = true; } if (newPeak < oldPeak) { newPeak = oldPeak; newPeak -= 2048; if (newPeak < 0) newPeak = 0; } if (oldPeak != newPeak) { peakLevelControl->setPeak(1, newPeak); bUpdateR = true; } if (bUpdateEntire) { screen->paintControl(screen->getControlByID(CONTAINER_ABOUT), false); return true; } else if (bUpdateL || bUpdateR) { screen->paintControl(peakLevelControl, false); return true; } return false; } bool Tracker::updatePlayTime() { if (!playTimeText) return false; if (!playTimeText->isVisible()) return false; PPContainer* container = static_cast(screen->getControlByID(CONTAINER_ABOUT)); char buffer[100], buffer2[100]; pp_int32 playtime = (pp_int32)playerController->getPlayTime(); if (!playerController->isPlaying()) playtime = 0; pp_int32 seconds = playtime % 60; pp_int32 minutes = (playtime / 60) % 60; pp_int32 hours = (playtime / 3600) % 100; sprintf(buffer,"%02i:%02i:%02i", hours, minutes, seconds); playtime = moduleEditor->getModuleServices()->getEstimatedSongLength(); if (playtime == -1) { // strcpy(buffer2,"(--:--:--)"); // believe it or not, the VC 6.0 compiler // fucks up the above strcpy, now providing some awesome workaround ;) buffer2[0] = '('; buffer2[1] = '-'; buffer2[2] = '-'; buffer2[3] = ':'; buffer2[4] = '-'; buffer2[5] = '-'; buffer2[6] = ':'; buffer2[7] = '-'; buffer2[8] = '-'; buffer2[9] = ')'; buffer2[10] = 0; } else { pp_int32 seconds = playtime % 60; pp_int32 minutes = (playtime / 60) % 60; pp_int32 hours = (playtime / 3600) % 100; sprintf(buffer2,"(%02i:%02i:%02i)", hours, minutes, seconds); } strcat(buffer, buffer2); if (strcmp(playTimeText->getText(), buffer) != 0) { playTimeText->setText(buffer); screen->paintControl(container, false); return true; } return false; } /////////////////////////////////////////// // update song title /////////////////////////////////////////// void Tracker::updateSongTitle(bool repaint) { PPContainer* container = static_cast(screen->getControlByID(CONTAINER_ABOUT)); PPListBox* listBox = static_cast(container->getControlByID(LISTBOX_SONGTITLE)); listBox->clear(); char str[MP_MAXTEXT+1]; moduleEditor->getTitle(str, ModuleEditor::MAX_TITLETEXT); listBox->addItem(str); listBox->setMaxEditSize(ModuleEditor::MAX_TITLETEXT); screen->paintControl(container, repaint); } #ifdef __LOWRES__ void Tracker::updateJamMenuOrder(bool repaint/* = true*/) { PPContainer* container = static_cast(screen->getControlByID(CONTAINER_LOWRES_JAMMENU)); PPStaticText* staticText = static_cast(container->getControlByID(STATICTEXT_JAMMENU_CURORDER)); staticText->setHexValue(getOrderListBoxIndex(), 2); if (container->isVisible()) screen->paintControl(container, repaint); } #endif void Tracker::updateOrderlist(bool repaint/* = true*/) { // First of all: update orderlist (something might have been removed/added) updateSongLength(false); // Now update patterns moduleEditor->setCurrentPatternIndex(moduleEditor->getOrderPosition(getOrderListBoxIndex())); moduleEditor->setCurrentOrderIndex(getOrderListBoxIndex()); updatePattern(false); if (repaint) screen->update(); } /////////////////////////////////////////// // update song length field + orderlist /////////////////////////////////////////// void Tracker::updateSongLength(bool repaint) { PPContainer* container = static_cast(screen->getControlByID(CONTAINER_ORDERLIST)); static_cast(container->getControlByID(STATICTEXT_ORDERLIST_SONGLENGTH))->setHexValue(moduleEditor->getNumOrders(), 2); listBoxOrderList->setShowIndex(true); listBoxOrderList->setIndexBaseCount(0); listBoxOrderList->saveState(); bool update = true; if (listBoxOrderList->getNumItems() != moduleEditor->getNumOrders()) { listBoxOrderList->clear(); update = false; } for (pp_int32 i = 0; i < moduleEditor->getNumOrders(); i++) { char orderlistEntry[4]; PatternTools::convertToHex(orderlistEntry, moduleEditor->getOrderPosition(i), 2); if (update) listBoxOrderList->updateItem(i, orderlistEntry); else listBoxOrderList->addItem(orderlistEntry); } if (!update) { listBoxOrderList->restoreState(); listBoxOrderList->setSelectedIndex(moduleEditor->getCurrentOrderIndex()); } screen->paintControl(container, repaint); } /////////////////////////////////////////// // update song restart position field /////////////////////////////////////////// void Tracker::updateSongRepeat(bool repaint) { PPContainer* container = static_cast(screen->getControlByID(CONTAINER_ORDERLIST)); static_cast(container->getControlByID(STATICTEXT_ORDERLIST_REPEAT))->setHexValue(moduleEditor->getRepeatPos(), 2); screen->paintControl(container, repaint); } /////////////////////////////////////////// // update speed field /////////////////////////////////////////// bool Tracker::updateSpeed(bool repaint) { mp_sint32 speed, bpm, mainvol; playerController->getSpeed(bpm, speed); mainvol = playerController->getSongMainVolume(); if (bpm != lastBPM || lastSpeed != speed || lastMainVol != mainvol) { lastBPM = bpm; lastSpeed = speed; lastMainVol = mainvol; PPContainer* container = static_cast(screen->getControlByID(CONTAINER_SPEED)); static_cast(container->getControlByID(STATICTEXT_SPEED_SPEED))->setIntValue(speed, 2); static_cast(container->getControlByID(STATICTEXT_SPEED_BPM))->setIntValue(bpm, 3); static_cast(container->getControlByID(STATICTEXT_SPEED_MAINVOL))->setHexValue((mainvol*64)/255, 2); screen->paintControl(container, repaint); return true; } return false; } /////////////////////////////////////////// // update pattern add field /////////////////////////////////////////// void Tracker::updatePatternAddAndOctave(bool repaint) { PPContainer* container = static_cast(screen->getControlByID(CONTAINER_SPEED)); pp_int32 currentPatternAdd = getPatternEditorControl()->getRowInsertAdd(); static_cast(container->getControlByID(STATICTEXT_SPEED_PATTERNADD))->setIntValue(currentPatternAdd, 2); pp_int32 currentOctave = getPatternEditor()->getCurrentOctave(); static_cast(container->getControlByID(STATICTEXT_SPEED_OCTAVE))->setIntValue(currentOctave-1, 2); screen->paintControl(container, repaint); } /////////////////////////////////////////// // update current pattern index /////////////////////////////////////////// void Tracker::updatePatternIndex(bool repaint) { PPContainer* container = static_cast(screen->getControlByID(CONTAINER_PATTERN)); static_cast(container->getControlByID(STATICTEXT_PATTERN_INDEX))->setHexValue(moduleEditor->getCurrentPatternIndex(), 2); #ifdef __LOWRES__ { PPContainer* container = static_cast(screen->getControlByID(CONTAINER_LOWRES_JAMMENU)); PPStaticText* staticText = static_cast(container->getControlByID(STATICTEXT_JAMMENU_CURPATTERN)); staticText->setHexValue(moduleEditor->getCurrentPatternIndex(), 2); if (container->isVisible()) screen->paintControl(container, repaint); } #endif screen->paintControl(container, repaint); } /////////////////////////////////////////// // update current pattern's length /////////////////////////////////////////// void Tracker::updatePatternLength(bool repaint) { PPContainer* container = static_cast(screen->getControlByID(CONTAINER_PATTERN)); static_cast(container->getControlByID(STATICTEXT_PATTERN_LENGTH))->setHexValue(getPatternEditor()->getNumRows(),3); screen->paintControl(container, repaint); } /////////////////////////////////////////// // update pattern and it's length and index /////////////////////////////////////////// void Tracker::updatePattern(bool repaint) { updatePatternEditorControl(false); updatePatternIndex(false); updatePatternLength(false); if (repaint) screen->update(); } /////////////////////////////////////////// // update samples listbox /////////////////////////////////////////// void Tracker::updateSamplesListBox(bool repaint) { listBoxSamples->saveState(); listBoxSamples->clear(); fillSampleListBox(listBoxSamples, listBoxInstruments->getSelectedIndex()); listBoxSamples->restoreState(); // check for visibility of parent container before updating if (static_cast(screen->getControlByID(CONTAINER_INSTRUMENTLIST))->isVisible()) screen->paintControl(listBoxSamples, repaint); #ifdef __LOWRES__ { pp_int32 i = listBoxInstruments->getSelectedIndex(); PPContainer* container = static_cast(screen->getControlByID(CONTAINER_LOWRES_JAMMENU)); PPStaticText* staticText = static_cast(container->getControlByID(STATICTEXT_JAMMENU_CURINSTRUMENT)); staticText->setHexValue(i+1, 2); if (container->isVisible()) screen->paintControl(container, repaint); container = static_cast(screen->getControlByID(CONTAINER_INSTRUMENTLIST)); staticText = static_cast(container->getControlByID(STATICTEXT_INSTRUMENTS_ALTERNATIVEHEADER2)); staticText->setHexValue(i+1, 2); if (container->isVisible()) screen->paintControl(container, repaint); } #endif } /////////////////////////////////////////// // update instruments listbox /////////////////////////////////////////// void Tracker::updateInstrumentsListBox(bool repaint) { listBoxInstruments->saveState(); listBoxInstruments->clear(); fillInstrumentListBox(listBoxInstruments); listBoxInstruments->restoreState(); // check for visibility of parent container before updating if (!static_cast(screen->getControlByID(CONTAINER_INSTRUMENTLIST))->isVisible()) return; screen->paintControl(listBoxInstruments, repaint); } /////////////////////////////////////////// // update pattern editor /////////////////////////////////////////// void Tracker::updatePatternEditorControl(/*TXMPattern* pattern, */bool repaint/* = true*/, bool fast/* = false*/) { PatternEditorControl* patternEditorCtrl = getPatternEditorControl(); moduleEditor->reloadCurrentPattern(); TXMPattern* pattern = getPatternEditor()->getPattern(); if (pattern) { if (isEditingCurrentOrderlistPattern()) patternEditorCtrl->setOrderlistIndex(getOrderListBoxIndex()); else patternEditorCtrl->setOrderlistIndex(-1); //patternEditorCtrl->attachPattern(pattern, moduleEditor->getModule()); } if (!fast) screen->paintControl(patternEditorCtrl, repaint); } /////////////////////////////////////////// // update instrument editor /////////////////////////////////////////// void Tracker::updateSampleEditor(bool repaint, bool force) { sectionSamples->realUpdate(repaint, force, true); } void Tracker::updateSampleEditorAndInstrumentSection(bool repaint/* = true*/) { // update instrument/sample editor // important: sample editor first => will reload sample into sample editor updateSampleEditor(repaint); sectionInstruments->update(repaint); } void Tracker::updateSongInfo(bool repaint/* = true*/) { updateSongTitle(repaint); updateSongLength(repaint); updateSongRepeat(repaint); //updateBPM(repaint); updateSpeed(repaint); updatePatternAddAndOctave(repaint); updatePatternIndex(repaint); updatePatternLength(repaint); updateInstrumentsListBox(repaint); updateSamplesListBox(repaint); getPatternEditorControl()->reset(); getPatternEditorControl()->unmuteAll(); sectionInstruments->resetEnvelopeEditor(); sectionInstruments->updateEnvelopeEditor(false, true); sectionInstruments->resetPianoAssignment(); sectionSamples->resetSampleEditor(); setNumChannels(moduleEditor->getNumChannels(), false); updatePatternEditorControl(repaint); updateSampleEditorAndInstrumentSection(repaint); updateWindowTitle(moduleEditor->getModuleFileName()); if (repaint) screen->update(); } void Tracker::updateInstrumentChooser(bool repaint/* = true*/) { PPContainer* container = static_cast(screen->getModalControl()); PPListBox* listBoxSrc = static_cast(container->getControlByID(INSTRUMENT_CHOOSER_LIST_SRC)); PPListBox* listBoxSrcModule = static_cast(container->getControlByID(INSTRUMENT_CHOOSER_LIST_SRC3)); PPListBox* listBoxDst = static_cast(container->getControlByID(INSTRUMENT_CHOOSER_LIST_DST)); PPListBox* listBoxDstModule = static_cast(container->getControlByID(INSTRUMENT_CHOOSER_LIST_DST3)); ModuleEditor* src = listBoxSrcModule ? tabManager->getModuleEditorFromTabIndex(listBoxSrcModule->getSelectedIndex()) : this->moduleEditor; ModuleEditor* dst = listBoxDstModule ? tabManager->getModuleEditorFromTabIndex(listBoxDstModule->getSelectedIndex()) : this->moduleEditor; listBoxSrc->saveState(); listBoxSrc->clear(); fillInstrumentListBox(listBoxSrc, src); listBoxSrc->restoreState(); listBoxDst->saveState(); listBoxDst->clear(); fillInstrumentListBox(listBoxDst, dst); listBoxDst->restoreState(); mp_sint32 srcInsIndex = listBoxSrc->getSelectedIndex(); mp_sint32 dstInsIndex = listBoxDst->getSelectedIndex(); listBoxSrc = static_cast(container->getControlByID(INSTRUMENT_CHOOSER_LIST_SRC2)); listBoxDst = static_cast(container->getControlByID(INSTRUMENT_CHOOSER_LIST_DST2)); listBoxSrc->saveState(); listBoxSrc->clear(); fillSampleListBox(listBoxSrc, srcInsIndex, src); listBoxSrc->restoreState(); listBoxDst->saveState(); listBoxDst->clear(); fillSampleListBox(listBoxDst, dstInsIndex, dst); listBoxDst->restoreState(); if (repaint) screen->update(); } void Tracker::updateTabTitle() { TabHeaderControl* tabHeader = static_cast(screen->getControlByID(TABHEADER_CONTROL)); if (tabHeader != NULL) { TabTitleProvider tabTitleProvider(*moduleEditor); PPString tabTitle = tabTitleProvider.getTabTitle(); if (moduleEditor->hasChanged()) tabTitle.append("*"); bool refresh = false; for (pp_int32 i = 0; i < (signed)tabHeader->getNumTabs(); i++) { if (tabManager->getModuleEditorFromTabIndex(i) == this->moduleEditor) { if (tabHeader->getTab(i)->text.compareTo(tabTitle) != 0) { tabHeader->setTabHeaderText(i, tabTitle); refresh = true; } } } if (refresh) screen->paintControl(tabHeader); } } void Tracker::updateWindowTitle() { if (moduleEditor->hasChanged() != lastState) { PPSystemString title = "MilkyTracker - "; title.append(currentFileName); if (moduleEditor->hasChanged()) title.append(" (modified)"); screen->setTitle(title); updateTabTitle(); lastState = moduleEditor->hasChanged(); } } void Tracker::updateWindowTitle(const PPSystemString& fileName) { lastState = !moduleEditor->hasChanged(); currentFileName = fileName.stripPath(); updateWindowTitle(); } bool Tracker::updateSongPosition(pp_int32 pos/* = -1*/, pp_int32 row/* = -1*/, bool fast/* = false*/) { mp_sint32 thePos, theRow; playerController->getPosition(thePos, theRow); #if 0 static int counter = 0; if (thePos == 0 && theRow == 63 && (theRow != lastRow || thePos != lastPos)) counter++; if (counter == 2) { int i = 0; i++; i--; } #endif if (pos == -1) pos = thePos; if (row == -1) row = theRow; bool redraw = false; // I'm now trying to understand what happens here ------> // When the current row is different from the last row // or the current order position is different from the last one // we're doing some screen refreshing if (row != lastRow || pos != lastPos) { // if we're not playing a single pattern, we're most likely playing the entire song // and in that case if we're instructed to follow the song while playing we're doing some // order list position updates and stuff ------> if (!playerController->isPlayingPattern() && shouldFollowSong()) { // if the current order list index is different from the current // order list position from the player UPDATE ------> if (getOrderListBoxIndex() != pos) { listBoxOrderList->setSelectedIndex(pos, false); moduleEditor->setCurrentOrderIndex(pos); // in low res mode we also need to update // the order position in the "Jam"-section #ifdef __LOWRES__ if (!fast) updateJamMenuOrder(false); #endif // now tell the module editor that we're editing another pattern moduleEditor->setCurrentPatternIndex(moduleEditor->getOrderPosition(pos)); // update pattern editor with current order list pattern // but don't redraw/update, just get it from the module editor and attach it to the pattern editor updatePatternEditorControl(false, true); } if (!fast) { // update pattern property fields updateSongLength(false); updatePatternIndex(false); updatePatternLength(false); } // only follow song if the pattern index matches the one from the // order list, otherwise the user has probably selected a different // pattern while playing takes place if (moduleEditor->getCurrentPatternIndex() == moduleEditor->getOrderPosition(pos)) { // song positon is only used in non-follow mode getPatternEditorControl()->setSongPosition(-1, -1); // but we should probably update the current row in the pattern editor as well // as long as the user is not currently dragging the scroll bars in the sample editor getPatternEditorControl()->setRow(row, fast ? false : !getPatternEditorControl()->isDraggingVertical()); } } else if (playerController->isPlayingPattern() && !shouldFollowSong()) { // we're playing the current pattern and don't follow the song // just update the current playing row in the pattern editor if (playerController->isPlayingPattern(moduleEditor->getCurrentPatternIndex())) getPatternEditorControl()->setSongPosition(-1, row); // we're playing a pattern different from the one in the editor // don't show any positions else getPatternEditorControl()->setSongPosition(-1, -1); } else if (playerController->isPlayingPattern() && shouldFollowSong()) { getPatternEditorControl()->setSongPosition(-1, -1); getPatternEditorControl()->setRow(row, fast ? false : !getPatternEditorControl()->isDraggingVertical()); } else { getPatternEditorControl()->setSongPosition(pos, row); } updatePatternEditorControl(false, fast); redraw = true; lastRow = row; lastPos = pos; } if (!fast) return updateSpeed(false) || redraw; else return redraw; } void Tracker::updateRecordButton(PPContainer* container, const PPColor& pColor) { ASSERT(container); // now if the parent container is visible, // we're going to update the record button if (container->isVisible()) { // get button from container PPButton* button = static_cast(container->getControlByID(MAINMENU_EDIT)); ASSERT(button); // if it's visible and the color is not what we're going to set // set new text color and repaint if (button->isVisible() && (&pColor) != button->getTextColor()) { button->setTextColor(pColor); screen->paintControl(button); } } } void Tracker::doFollowSong() { // check if we need to update the record button // this is done periodically and only in MilkyTracker mode if (editMode == EditModeMilkyTracker) { // If the pattern editor has got the focus // we're in record mode, so get the record button text color const PPColor& pColor = getPatternEditorControl()->gotFocus() ? TrackerConfig::colorRecordModeButtonText : PPUIConfig::getInstance()->getColor(PPUIConfig::ColorDefaultButtonText); // we're going to update the record button updateRecordButton(static_cast(screen->getControlByID(CONTAINER_MENU)), pColor); #ifdef __LOWRES__ // in low-res mode, the record buttons appears // also in some other containers (e.g. TINYMENU) ... updateRecordButton(static_cast(screen->getControlByID(CONTAINER_LOWRES_TINYMENU)), pColor); // ... also the JAMMENU updateRecordButton(static_cast(screen->getControlByID(CONTAINER_LOWRES_JAMMENU)), pColor); #endif } // check if the piano has been updated bool updatePiano = updatePianoControl(sectionInstruments->getPianoControl()); // check if the play time has been updated bool updatePlayTime = this->updatePlayTime(); #ifdef __LOWRES__ // in low-res mode a piano might be embedded into other containers as well // => check for updates if (inputContainerCurrent->isVisible()) { PianoControl* pianoControl = static_cast(inputContainerCurrent->getControlByID(PIANO_CONTROL)); updatePiano |= updatePianoControl(pianoControl); } else if (screen->getControlByID(CONTAINER_LOWRES_JAMMENU)->isVisible()) { PPContainer* container = static_cast(screen->getControlByID(CONTAINER_LOWRES_JAMMENU)); PianoControl* pianoControl = static_cast(container->getControlByID(PIANO_CONTROL)); updatePiano |= updatePianoControl(pianoControl); } #endif bool importantRefresh = false; // now for updating the sample editor control SampleEditorControl* sampleEditorControl = sectionSamples->getSampleEditorControl(false); if (sampleEditorControl) { bool showMarksVisibleOld = sampleEditorControl->isVisible() ? sampleEditorControl->showMarksVisible() : false; bool updateSample = false; TXMSample* smp = getSampleEditor()->getSample(); for (pp_int32 i = 0; i < playerController->getAllNumPlayingChannels(); i++) { pp_int32 pos, vol, pan; if (playerController->isSamplePlaying(*smp, i, pos, vol, pan)) { // it is there // => set the position mark sampleEditorControl->setShowMark(i, pos, vol, pan); updateSample = true; } else { // it is not there // => clear the position mark if (sampleEditorControl->getShowMarkPos(i) != -1) { sampleEditorControl->setShowMark(i, -1, 0); updateSample = true; } } } if (updateSample && sampleEditorControl->isVisible()) { bool showMarksVisible = sampleEditorControl->showMarksVisible(); // if either show marks HAVE BEEN visible and they're no longer visble OR // no show marks have been visible and now they're some visible // => redraw if (showMarksVisible || showMarksVisibleOld) { sectionSamples->updateSampleWindow(false); importantRefresh = true; } } } if (sectionInstruments->isEnvelopeVisible()) { EnvelopeEditorControl* eeCtrl = sectionInstruments->getEnvelopeEditorControl(); bool redrawEnvelopeEditor = false; if (eeCtrl->hasShowMarks()) { eeCtrl->clearShowMarks(); redrawEnvelopeEditor = true; } EnvelopeEditor* ee = getEnvelopeEditor(); for (pp_int32 i = 0; i < playerController->getPlayerNumPlayingChannels(); i++) { pp_int32 pos; if (playerController->isEnvelopePlaying(*ee->getEnvelope(), sectionInstruments->getVisibleEnvelopeType(), i, pos)) { eeCtrl->setShowMark(i, pos); if (pos != -1) redrawEnvelopeEditor = true; } } if (redrawEnvelopeEditor) { sectionInstruments->updateEnvelopeWindow(false); importantRefresh = true; } } if (playerController->isPlaying() && !playerController->isPlayingRowOnly()/* && getFollowSong()*/) { importantRefresh |= updateSongPosition(); } bool updatePeak = updatePeakLevelControl(); bool updateScopes = false; if (scopesControl && scopesControl->isVisible()) { updateScopes = scopesControl->needsUpdate(); if (updateScopes && !updatePiano && !importantRefresh && !updatePlayTime && !updatePeak) { screen->paintControl(scopesControl); return; } else if (updateScopes) screen->paintControl(scopesControl, false); } importantRefresh |= updatePiano; if (!importantRefresh) { if (updatePeak || updatePlayTime) { screen->updateControl(screen->getControlByID(CONTAINER_ABOUT)); } if (updateScopes) { screen->updateControl(scopesControl); } } else { screen->update(); } } void Tracker::updateAfterLoad(bool loadResult, bool wasPlaying, bool wasPlayingPattern) { ASSERT(settingsDatabase->restore("AUTOESTPLAYTIME")); if (loadResult && settingsDatabase->restore("AUTOESTPLAYTIME")->getIntValue()) estimateSongLength(); else moduleEditor->getModuleServices()->resetEstimatedSongLength(); // special updates listBoxOrderList->setSelectedIndex(0); moduleEditor->setCurrentOrderIndex(0); moduleEditor->setCurrentPatternIndex(moduleEditor->getOrderPosition(0)); listBoxInstruments->setSelectedIndex(0); moduleEditor->setCurrentInstrumentIndex(0); listBoxSamples->setSelectedIndex(0); moduleEditor->setCurrentSampleIndex(0); updateSongInfo(false); playerController->resetMainVolume(); getPatternEditorControl()->setChannel(0,0); getPatternEditorControl()->setCurrentInstrument(1); if (wasPlaying) { if (!wasPlayingPattern && shouldFollowSong()) { getPatternEditorControl()->setSongPosition(-1, -1); getPatternEditorControl()->setRow(0); } else if (wasPlayingPattern && !shouldFollowSong()) { getPatternEditorControl()->setSongPosition(-1, 0); } else if (wasPlayingPattern && shouldFollowSong()) { getPatternEditorControl()->setSongPosition(-1, -1); getPatternEditorControl()->setRow(0); } } else { getPatternEditorControl()->setSongPosition(-1, -1); getPatternEditorControl()->setRow(0); } if (loadResult) { playerController->resetPlayTimeCounter(); sectionHDRecorder->resetCurrentFileName(); sectionHDRecorder->adjustOrders(); updateWindowTitle(moduleEditor->getModuleFileName()); // !!! Remember this !!! // It's important to apply new speed settings before the playmode is switched playerController->setSpeed(moduleEditor->getSongBPM(), moduleEditor->getSongTickSpeed()); if (!sectionQuickOptions->keepSettings()) { switch (moduleEditor->getSaveType()) { case ModuleEditor::ModSaveTypeMOD: if (moduleEditor->getNumChannels() == 4) playerController->switchPlayMode(PlayerController::PlayMode_ProTracker2); else playerController->switchPlayMode(PlayerController::PlayMode_ProTracker3); break; case ModuleEditor::ModSaveTypeXM: playerController->switchPlayMode(PlayerController::PlayMode_FastTracker2); break; default: ASSERT(false); } } if (wasPlaying && !wasPlayingPattern) { playerController->restartPlaying(); } else if (wasPlaying && wasPlayingPattern) { eventKeyDownBinding_Stop(); eventKeyDownBinding_PlayPattern(); } } updateSongInfo(false); } void Tracker::updateAfterTabSwitch() { pp_int32 i; getPatternEditorControl()->attachPatternEditor(moduleEditor->getPatternEditor()); sectionSamples->getSampleEditorControl(false)->attachSampleEditor(moduleEditor->getSampleEditor()); sectionInstruments->getEnvelopeEditorControl()->attachEnvelopeEditor(moduleEditor->getEnvelopeEditor()); // ----------------------------------------------------------------------- sectionHDRecorder->resetCurrentFileName(); sectionHDRecorder->adjustOrders(); updateSongTitle(false); updateSongLength(false); updateSongRepeat(false); updateSpeed(false); updatePatternAddAndOctave(false); updatePatternIndex(false); updatePatternLength(false); updateInstrumentsListBox(false); updateSamplesListBox(false); // ----------------------------------------------------------------------- // restore old positions listBoxInstruments->setSelectedIndex(moduleEditor->getCurrentInstrumentIndex(), false); listBoxSamples->setSelectedIndex(moduleEditor->getCurrentSampleIndex(), false); if (!playerController->isPlaying()) { listBoxOrderList->setSelectedIndex(moduleEditor->getCurrentOrderIndex()); updatePatternEditorControl(false, true); getPatternEditor()->setCursor(moduleEditor->getCurrentCursorPosition()); } getPatternEditorControl()->setSize(PPSize(screen->getWidth(),MAXEDITORHEIGHT()-UPPERSECTIONDEFAULTHEIGHT())); // let tabs handle their own update for (i = 0; i < sections->size(); i++) sections->get(i)->notifyTabSwitch(); setNumChannels(moduleEditor->getNumChannels(), false); scopesControl->attachSource(playerController); updateSampleEditorAndInstrumentSection(false); updateWindowTitle(moduleEditor->getModuleFileName()); // apply muting from playercontroller const pp_int32 numChannels = TrackerConfig::numPlayerChannels; for (i = 0; i < numChannels; i++) { bool b = playerController->isChannelMuted(i); muteChannels[i] = b ? 1 : 0; getPatternEditorControl()->muteChannel(i, b); scopesControl->muteChannel(i, b); b = playerController->isChannelRecording(i); scopesControl->recordChannel(i, b); } if (playerController->isPlaying()) { screen->pauseUpdate(true); doFollowSong(); screen->pauseUpdate(false); } screen->paint(true); } MilkyTracker-1.02.00/src/tracker/Undo.cpp000066400000000000000000000253051324432207300201130ustar00rootroot00000000000000/* * tracker/Undo.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ // Undo.cpp - Undo stack implementation #include "Undo.h" ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // patterns ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //--------------------------------------------------------------------------- // Pre : // Post : // Globals : // I/O : // Task : Create new stack entry //--------------------------------------------------------------------------- PatternUndoStackEntry::PatternUndoStackEntry(const TXMPattern& pattern, const pp_int32 cursorPositionChannel, const pp_int32 cursorPositionRow, const pp_int32 cursorPositionInner, const UserData* userData/* = NULL*/) : UndoStackEntry(userData) { this->cursorPositionChannel = cursorPositionChannel; this->cursorPositionRow = cursorPositionRow; this->cursorPositionInner = cursorPositionInner; if (pattern.patternData) { this->pattern.rows = pattern.rows; this->pattern.channum = pattern.channum; this->pattern.effnum = pattern.effnum; this->pattern.len = pattern.compress(NULL); this->pattern.patternData = new mp_ubyte[this->pattern.len]; mp_sint32 len = pattern.compress(this->pattern.patternData); ASSERT(len == (signed)this->pattern.len); } else memset(&this->pattern, 0, sizeof(pattern)); } //--------------------------------------------------------------------------- // Pre : // Post : // Globals : // I/O : // Task : Copy constructor //--------------------------------------------------------------------------- PatternUndoStackEntry::PatternUndoStackEntry(const PatternUndoStackEntry& source) : UndoStackEntry(&source.getUserData()) { cursorPositionChannel = source.cursorPositionChannel; cursorPositionRow = source.cursorPositionRow; cursorPositionInner = source.cursorPositionInner; pattern.len = source.pattern.len; pattern.rows = source.pattern.rows; pattern.channum = source.pattern.channum; pattern.effnum = source.pattern.effnum; pattern.patternData = new mp_ubyte[pattern.len]; memcpy(pattern.patternData, source.pattern.patternData, pattern.len); } //--------------------------------------------------------------------------- // Pre : // Post : // Globals : // I/O : // Task : Clean up //--------------------------------------------------------------------------- PatternUndoStackEntry::~PatternUndoStackEntry() { delete[] pattern.patternData; } //--------------------------------------------------------------------------- // Pre : // Post : // Globals : // I/O : // Task : assignment operator //--------------------------------------------------------------------------- PatternUndoStackEntry& PatternUndoStackEntry::operator=(const PatternUndoStackEntry& source) { // no self-assignment if (this != &source) { copyBasePart(source); cursorPositionChannel = source.cursorPositionChannel; cursorPositionRow = source.cursorPositionRow; cursorPositionInner = source.cursorPositionInner; if (pattern.patternData) delete[] pattern.patternData; pattern.len = source.pattern.len; pattern.rows = source.pattern.rows; pattern.channum = source.pattern.channum; pattern.effnum = source.pattern.effnum; pattern.patternData = new mp_ubyte[pattern.len]; memcpy(pattern.patternData, source.pattern.patternData, pattern.len); } return *this; } //--------------------------------------------------------------------------- // Pre : // Post : // Globals : // I/O : // Task : comparison operators //--------------------------------------------------------------------------- bool PatternUndoStackEntry::operator==(const PatternUndoStackEntry& source) { ASSERT(source.pattern.patternData); ASSERT(pattern.patternData); if (pattern.len == source.pattern.len && pattern.rows == source.pattern.rows && pattern.channum == source.pattern.channum && pattern.effnum == source.pattern.effnum) { if (memcmp(pattern.patternData, source.pattern.patternData, pattern.len) == 0) return true; else return false; } else return false; } bool PatternUndoStackEntry::operator!=(const PatternUndoStackEntry& source) { return !(*this==source); } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // envelopes ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Envelope stack entry EnvelopeUndoStackEntry& EnvelopeUndoStackEntry::operator=(const EnvelopeUndoStackEntry& source) { // no self-assignment if (this != &source) { copyBasePart(source); envelope = source.envelope; invalid = source.invalid; } return *this; } // comparison is necessary too bool EnvelopeUndoStackEntry::operator==(const EnvelopeUndoStackEntry& source) { if (source.invalid || invalid) return true; if (source.envelope.num != envelope.num || source.envelope.sustain != envelope.sustain || source.envelope.loops != envelope.loops || source.envelope.loope != envelope.loope || source.envelope.type != envelope.type) return false; for (pp_int32 i = 0; i < envelope.num; i++) { if (source.envelope.env[i][0] != envelope.env[i][0] || source.envelope.env[i][1] != envelope.env[i][1]) return false; } return true; } bool EnvelopeUndoStackEntry::operator!=(const EnvelopeUndoStackEntry& source) { return !(*this==source); } void EnvelopeUndoStackEntry::GetEnvelope(TEnvelope& env) const { env.num = envelope.num; env.sustain = envelope.sustain; env.loops = envelope.loops; env.loope = envelope.loope; env.type = envelope.type; env.speed = 0; for (pp_int32 i = 0; i < 12; i++) { env.env[i][0] = envelope.env[i][0]; env.env[i][1] = envelope.env[i][1]; } } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // samples ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void SampleUndoStackEntry::calcCheckSum() { checkSum = 0; if (!buffer) return; mp_uint32 size = (flags & 16) ? samplen*2 : samplen; if (size) { mp_ubyte* mem = TXMSample::getPadStartAddr(buffer); mp_uint32 realSize = TXMSample::getPaddedSize(size); for (pp_uint32 i = 0; i < realSize; i++) checkSum+=(pp_uint32)mem[i]; } } SampleUndoStackEntry::SampleUndoStackEntry(const TXMSample& sample, pp_int32 selectionStart, pp_int32 selectionEnd, const UserData* userData/* = NULL*/) : UndoStackEntry(userData) { samplen = sample.samplen; loopstart = sample.loopstart; looplen = sample.looplen; relnote = sample.relnote; finetune = sample.finetune; flags = sample.type; this->selectionStart = selectionStart; this->selectionEnd = selectionEnd; buffer = NULL; checkSum = 0; if (sample.samplen && sample.sample) { // 16 bit sample if (flags & 16) { buffer = TXMSample::allocPaddedMem(samplen*2); if (buffer) TXMSample::copyPaddedMem(buffer, sample.sample, samplen*2); } else { buffer = TXMSample::allocPaddedMem(samplen); if (buffer) TXMSample::copyPaddedMem(buffer, sample.sample, samplen); } calcCheckSum(); } } SampleUndoStackEntry::SampleUndoStackEntry(const SampleUndoStackEntry& src) : UndoStackEntry(&src.getUserData()) { samplen = src.samplen; loopstart = src.loopstart; looplen = src.looplen; relnote = src.relnote; finetune = src.finetune; flags = src.flags; checkSum = src.checkSum; this->selectionStart = src.selectionStart; this->selectionEnd = src.selectionEnd; buffer = NULL; if (src.buffer && samplen) { // 16 bit sample if (flags & 16) { buffer = TXMSample::allocPaddedMem(samplen*2); if (buffer) TXMSample::copyPaddedMem(buffer, src.buffer, samplen*2); } else { buffer = TXMSample::allocPaddedMem(samplen); if (buffer) TXMSample::copyPaddedMem(buffer, src.buffer, samplen); } } } SampleUndoStackEntry::~SampleUndoStackEntry() { TXMSample::freePaddedMem(buffer); } // assignment operator SampleUndoStackEntry& SampleUndoStackEntry::operator=(const SampleUndoStackEntry& src) { if (this != &src) { copyBasePart(src); samplen = src.samplen; loopstart = src.loopstart; looplen = src.looplen; relnote = src.relnote; finetune = src.finetune; flags = src.flags; checkSum = src.checkSum; if (buffer) { TXMSample::freePaddedMem(buffer); buffer = NULL; } if (src.buffer && samplen) { // 16 bit sample if (flags & 16) { buffer = TXMSample::allocPaddedMem(samplen*2); if (buffer) TXMSample::copyPaddedMem(buffer, src.buffer, samplen*2); } else { buffer = TXMSample::allocPaddedMem(samplen); if (buffer) TXMSample::copyPaddedMem(buffer, src.buffer, samplen); } } } return (*this); } // comparison is necessary too bool SampleUndoStackEntry::operator==(const SampleUndoStackEntry& src) { if (samplen != src.samplen) return false; if (checkSum != src.checkSum) return false; if (loopstart != src.loopstart) return false; if (looplen != src.looplen) return false; if (relnote != src.relnote) return false; if (finetune != src.finetune) return false; if (flags != src.flags) return false; if (buffer == NULL && src.buffer != NULL) return false; if (buffer != NULL && src.buffer == NULL) return false; mp_uint32 size = (flags & 16) ? samplen*2 : samplen; if (size) { mp_ubyte* _src = src.buffer; mp_ubyte* _dst = buffer; mp_ubyte* srcmem = TXMSample::getPadStartAddr(_src); mp_ubyte* dstmem = TXMSample::getPadStartAddr(_dst); mp_uint32 realSize = TXMSample::getPaddedSize(size); for (pp_uint32 i = 0; i < realSize; i++) if (srcmem[i] != dstmem[i]) return false; } return true; } bool SampleUndoStackEntry::operator!=(const SampleUndoStackEntry& source) { return !(*this==source); } MilkyTracker-1.02.00/src/tracker/Undo.h000066400000000000000000000212071324432207300175550ustar00rootroot00000000000000/* * tracker/Undo.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #ifndef __UNDO_H__ #define __UNDO_H__ #include "BasicTypes.h" #include "UndoStack.h" #include "XModule.h" #define UNDODEPTH_ENVELOPEEDITOR 32 #define UNDOHISTORYSIZE_ENVELOPEEDITOR 8 #define UNDODEPTH_PATTERNEDITOR 32 #define UNDOHISTORYSIZE_PATTERNEDITOR 8 #define UNDODEPTH_SAMPLEEDITOR 16 #define UNDOHISTORYSIZE_SAMPLEEDITOR 4 //--- This is what we save -------------------------------------------------- class UndoStackEntry { public: class UserData { private: pp_uint8* data; pp_uint32 dataLen; public: UserData() : data(NULL), dataLen(0) { } UserData(const pp_uint8* data, pp_uint32 dataLen) : data(NULL), dataLen(dataLen) { this->data = new pp_uint8[dataLen]; memcpy(this->data, data, dataLen); } UserData(const UserData& src) : data(NULL) { this->data = new pp_uint8[src.dataLen]; memcpy(this->data, src.data, src.dataLen); this->dataLen = src.dataLen; } ~UserData() { delete[] this->data; } UserData& operator=(const UserData& src) { if (this != &src) { delete[] this->data; this->data = new pp_uint8[src.dataLen]; memcpy(this->data, src.data, src.dataLen); this->dataLen = src.dataLen; } return *this; } const pp_uint8* getData() const { return data; } pp_uint32 getDataLen() const { return dataLen; } void clear() { delete[] this->data; this->data = NULL; dataLen = 0; } }; private: UserData userData; protected: UndoStackEntry(const UserData* userData) { if (userData != NULL) this->userData = *userData; } virtual ~UndoStackEntry() { } void copyBasePart(const UndoStackEntry& src) { this->userData = src.userData; } public: const UserData& getUserData() const { return userData; } }; // Undo information from pattern editor class PatternUndoStackEntry : public UndoStackEntry { public: // Construction (new element) PatternUndoStackEntry(const TXMPattern& pattern, const pp_int32 cursorPositionChannel, const pp_int32 cursorPositionRow, const pp_int32 cursorPositionInner, const UserData* userData = NULL); // Copy ctor PatternUndoStackEntry(const PatternUndoStackEntry& source); // dtor virtual ~PatternUndoStackEntry(); // get your pattern const TXMPattern& GetPattern() const { return pattern; } pp_int32 getCursorPositionChannel() const { return cursorPositionChannel; } pp_int32 getCursorPositionRow() const { return cursorPositionRow; } pp_int32 getCursorPositionInner() const { return cursorPositionInner; } // assignment operator PatternUndoStackEntry& operator=(const PatternUndoStackEntry& source); // comparison is necessary too bool operator==(const PatternUndoStackEntry& source); bool operator!=(const PatternUndoStackEntry& source); private: TXMPattern pattern; pp_int32 cursorPositionChannel; pp_int32 cursorPositionRow; pp_int32 cursorPositionInner; }; // Less memory consumption than TEnvelope because XMs can only handle 12 envelope points struct TSmallEnvelope { mp_uword env[12][2]; mp_ubyte num,sustain,loops,loope,type; }; // Undo information from Envelope Editor class EnvelopeUndoStackEntry : public UndoStackEntry { public: EnvelopeUndoStackEntry() : UndoStackEntry(NULL), invalid(false) { } // Construction EnvelopeUndoStackEntry(const TEnvelope& env, const UserData* userData = NULL) : UndoStackEntry(userData), invalid(false) { ASSERT(&env != NULL); ASSERT(env.num <= 12); envelope.num = env.num; envelope.sustain = env.sustain; envelope.loops = env.loops; envelope.loope = env.loope; envelope.type = env.type; for (pp_int32 i = 0; i < 12; i++) { envelope.env[i][0] = env.env[i][0]; envelope.env[i][1] = env.env[i][1]; } } EnvelopeUndoStackEntry(const EnvelopeUndoStackEntry& src) : UndoStackEntry(&src.getUserData()) { envelope = src.envelope; invalid = src.invalid; } // assignment operator EnvelopeUndoStackEntry& operator=(const EnvelopeUndoStackEntry& source); // comparison is necessary too bool operator==(const EnvelopeUndoStackEntry& source); bool operator!=(const EnvelopeUndoStackEntry& source); // get your envelope void GetEnvelope(TEnvelope& env) const; void SetInvalid(bool b) { invalid = b; } private: TSmallEnvelope envelope; bool invalid; }; struct TXMSample; // Undo information from Sample Editor class SampleUndoStackEntry : public UndoStackEntry { public: SampleUndoStackEntry() : UndoStackEntry(NULL) { } SampleUndoStackEntry(const TXMSample& sample, pp_int32 selectionStart, pp_int32 selectionEnd, const UserData* userData = NULL); SampleUndoStackEntry(const SampleUndoStackEntry& src); virtual ~SampleUndoStackEntry(); // assignment operator SampleUndoStackEntry& operator=(const SampleUndoStackEntry& source); // comparison is necessary too bool operator==(const SampleUndoStackEntry& source); bool operator!=(const SampleUndoStackEntry& source); pp_uint32 getSampLen() const { return samplen; } pp_uint32 getLoopStart() const { return loopstart; } pp_uint32 getLoopLen() const { return looplen; } pp_uint32 getFlags() const { return flags; } mp_sbyte getRelNote() const { return relnote; } mp_sbyte getFineTune() const { return finetune; } const pp_uint8* getBuffer() const { return buffer; } pp_int32 getSelectionStart() const { return selectionStart; } pp_int32 getSelectionEnd() const { return selectionEnd; } private: // from sample pp_uint32 samplen, loopstart, looplen; mp_sbyte relnote, finetune; pp_uint8* buffer; pp_uint8 flags; // from sample editor pp_int32 selectionStart; pp_int32 selectionEnd; pp_int32 checkSum; void calcCheckSum(); }; // undo history maintainance template struct HistoryEntry { Key* key; PPUndoStack* undoStack; }; template class UndoHistory { private: // undo/redo information PPUndoStack* currentUndoStack; HistoryEntry* patternHistory; pp_int32 patternHistoryNumEntries; pp_int32 size; public: UndoHistory(pp_int32 defaultSize = 8) : currentUndoStack(NULL), patternHistoryNumEntries(0), size(defaultSize) { patternHistory = new HistoryEntry[size]; for (pp_int32 i = 0; i < size; i++) { patternHistory[i].key = NULL; patternHistory[i].undoStack = NULL; } } ~UndoHistory() { for (pp_int32 i = 0; i < patternHistoryNumEntries; i++) if (patternHistory[i].undoStack && patternHistory[i].undoStack != currentUndoStack) delete patternHistory[i].undoStack; delete[] patternHistory; } PPUndoStack* getUndoStack(Key* newKey, Key* oldKey, PPUndoStack* oldUndoStack) { if (oldUndoStack) { if (patternHistoryNumEntries < size) { ASSERT(patternHistory[patternHistoryNumEntries].key == NULL); ASSERT(patternHistory[patternHistoryNumEntries].undoStack == NULL); patternHistory[patternHistoryNumEntries].key = oldKey; patternHistory[patternHistoryNumEntries].undoStack = oldUndoStack; patternHistoryNumEntries++; } else { ASSERT(patternHistoryNumEntries == size); delete patternHistory[0].undoStack; for (pp_int32 i = 0; i < patternHistoryNumEntries-1; i++) patternHistory[i] = patternHistory[i+1]; patternHistory[patternHistoryNumEntries-1].key = oldKey; patternHistory[patternHistoryNumEntries-1].undoStack = oldUndoStack; } } bool found = false; for (pp_int32 i = 0; i < patternHistoryNumEntries; i++) { if (patternHistory[i].key == newKey) { oldUndoStack = patternHistory[i].undoStack; for (pp_int32 j = i; j < patternHistoryNumEntries-1; j++) patternHistory[j] = patternHistory[j+1]; patternHistory[patternHistoryNumEntries-1].key = NULL; patternHistory[patternHistoryNumEntries-1].undoStack = NULL; patternHistoryNumEntries--; found = true; break; } } if (found) { currentUndoStack = oldUndoStack; return oldUndoStack; } return NULL; } }; #endif MilkyTracker-1.02.00/src/tracker/VRand.cpp000066400000000000000000000016301324432207300202130ustar00rootroot00000000000000/* * tracker/VRand.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ // Author: Andrew Simper (andy@vellocet.com) // #include "VRand.h" float VPinkNoise[PinkNoiseBins]; VPinkNoiseGlobal dummy_to_init_pink_noise; MilkyTracker-1.02.00/src/tracker/VRand.h000066400000000000000000000103661324432207300176660ustar00rootroot00000000000000/* * tracker/VRand.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ // Author: Andrew Simper of Vellocet // andy@vellocet.com // // Purpose: c++ class to generate white, pink and brown noise // // Sources: // This is a c++ implementation of put together from the // code provided by the following people mainly from // the music-dsp mailing list: Allan Herriman, James McCartney, // Phil Burk and Paul Kellet and the web page by Robin Whittle: // http://www.firstpr.com.au/dsp/pink-noise/ // // 13/8/06 - Fixed white() function to work correctly with gcc (Christopher // O'Neill) #ifndef __VRAND_H_ #define __VRAND_H_ #ifndef _WIN32_WCE #include #else #include #endif #include "BasicTypes.h" // Usage: // ------ // VRande rand; // rand.seed(); // float w = rand.white(); // returns white noise +- 0.5 // float p = rand.pink(); // returns pink noise +- 0.5 // float b = rand.brown(); // returns brown noise +- 0.5 class VRand { public: enum { NumPinkBins = 16, NumPinkBins1 = NumPinkBins-1 }; VRand() { m_white = 0; m_count = 1; m_brown = 0.0f; m_pink = 0; for (int i=0; i> 9; m_white |= 0x40000000; return (m_fwhite-3.0f)*scale; }; int inline CTZ(int num) { int i=0; while (((num>>i)&1)==0 && i<(signed)sizeof(int)) i++; return i; } // returns pink noise random number in the range -0.5 to 0.5 // inline float pink(void) { float prevr; float r; unsigned long k; k = CTZ(m_count); k = k & NumPinkBins1; // get previous value of this octave prevr = m_pinkStore[k]; while (true) { r = white(); // store new value m_pinkStore[k] = r; r -= prevr; // update total m_pink += r; if (m_pink <-4.0f || m_pink > 4.0f) m_pink -= r; else break; } // update counter m_count++; return (white() + m_pink)*0.125f; } // returns brown noise random number in the range -0.5 to 0.5 // inline float brown(void) { while (true) { float r = white(); m_brown += r; if (m_brown<-8.0f || m_brown>8.0f) m_brown -= r; else break; } return m_brown*0.0625f; } private: pp_uint32 m_seed; pp_uint32 m_count; union { pp_uint32 m_white; float m_fwhite; }; float m_pink; float m_brown; float m_pinkStore[NumPinkBins]; }; // This is a little helper section for fast table // lookup pink noise to use in denormalising // and filter excitation // // use: // long i=0; // float noise = pinkNoise(i); // // this leaves a pink noise sample in "noise" // and increments i so the next call gives a // new pink noise sample #define PinkNoiseBins (32768) #define PinkNoiseWrap (32767) extern float VPinkNoise[PinkNoiseBins]; #define pinkNoise(c) VPinkNoise[c&PinkNoiseWrap]; c++; class VPinkNoiseGlobal { public: VPinkNoiseGlobal(void) { VRand rand; rand.seed(); double inaudible = 0.000000059604644775390625; //pow(2.0, -24.0); for (int i=0; i. * */ /* * Zapper.cpp * MilkyTracker * * Created by Peter Barth on 26.12.07. * */ #include "Zapper.h" #include "Tracker.h" #include "PlayerController.h" #include "ModuleEditor.h" #include "ModuleServices.h" #include "PatternEditor.h" #include "SectionHDRecorder.h" void Zapper::zapAll() { if (!tracker.checkForChanges()) return; tracker.signalWaitState(true); tracker.playerController->resetPlayTimeCounter(); tracker.moduleEditor->createEmptySong(true, true, tracker.playerController->getPlayMode() == PlayerController::PlayMode_FastTracker2 ? 8 : 4); tracker.moduleEditor->getModuleServices()->resetEstimatedSongLength(); tracker.moduleEditor->reloadCurrentPattern(); tracker.sectionHDRecorder->adjustOrders(); // stop song with resetting main volume tracker.ensureSongStopped(true, false); tracker.updateSongInfo(false); tracker.signalWaitState(false); } void Zapper::zapSong() { tracker.signalWaitState(true); tracker.playerController->resetPlayTimeCounter(); tracker.moduleEditor->createEmptySong(true, false, tracker.playerController->getPlayMode() == PlayerController::PlayMode_FastTracker2 ? 8 : 4); tracker.moduleEditor->getModuleServices()->resetEstimatedSongLength(); tracker.moduleEditor->reloadCurrentPattern(); tracker.sectionHDRecorder->adjustOrders(); // stop song with resetting main volume tracker.ensureSongStopped(true, false); tracker.updateSongInfo(false); tracker.signalWaitState(false); } void Zapper::zapPattern() { tracker.signalWaitState(true); tracker.playerController->resetPlayTimeCounter(); tracker.getPatternEditor()->clearPattern(); tracker.updateSongInfo(false); tracker.signalWaitState(false); } void Zapper::zapInstruments() { tracker.signalWaitState(true); tracker.playerController->resetPlayTimeCounter(); tracker.moduleEditor->createEmptySong(false, true); tracker.updateSongInfo(false); tracker.signalWaitState(false); } MilkyTracker-1.02.00/src/tracker/Zapper.h000066400000000000000000000022031324432207300201040ustar00rootroot00000000000000/* * tracker/Zapper.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * Zapper.h * MilkyTracker * * Created by Peter Barth on 26.12.07. * */ #ifndef __ZAPPER_H__ #define __ZAPPER_H__ class Zapper { private: class Tracker& tracker; public: Zapper(Tracker& tracker) : tracker(tracker) { } Zapper(const Zapper& src) : tracker(src.tracker) { } void zapAll(); void zapSong(); void zapPattern(); void zapInstruments(); }; #endif MilkyTracker-1.02.00/src/tracker/carbon/000077500000000000000000000000001324432207300177415ustar00rootroot00000000000000MilkyTracker-1.02.00/src/tracker/carbon/Carbon_Definitions.h000066400000000000000000000022241324432207300236510ustar00rootroot00000000000000/* * tracker/carbon/Carbon_Definitions.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * Carbon_Definitions.h * MilkyTracker * * Created by Peter Barth on 07.04.06. * */ #ifndef __CARBONDEFINITIONS_H__ #define __CARBONDEFINITIONS_H__ #define kFullscreenCommand 'gFul' #define kInvokePreferences 'iPdc' #define kDiscardPreferences 'dPdl' #define kConfirmPreferences 'cPdl' #define kMIDIDeviceBaseCommand 1073741824 #define kAppSignature 'MTTP' #endif MilkyTracker-1.02.00/src/tracker/carbon/Carbon_main.cpp000066400000000000000000000734751324432207300226750ustar00rootroot00000000000000/* * tracker/carbon/Carbon_main.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ // ------------------------ carbon ------------------------ #include #include "Carbon_Definitions.h" #include "KeyTranslation.h" #include "PreferencesDialog.h" #include "PPMutex.h" #include "PPMessageBox.h" // ----------------------- POSIX -------------------------- #include #include // ----------------------- tracker ------------------------ #include "PPUI.h" #include "DisplayDevice_CARBON.h" #include "Screen.h" #include "Tracker.h" #include "PPSystem.h" #include "MidiReceiver_pthread.h" // globals ------------------------------------- WindowRef mainWindow, waitWindow, preferencesWindow; MenuRef mainMenu; static PreferencesDialog* preferencesDialog = NULL; static PPMutex* globalMutex = NULL; static int localMouseX,localMouseY; static PPScreen* myTrackerScreen = NULL; static Tracker* myTracker = NULL; static PPDisplayDevice* myDisplayDevice = NULL; static MidiReceiver* myMidiReceiver = NULL; // basic OS event globals ---------------------- static pp_uint32 lmyTime; static PPPoint llastClickPosition = PPPoint(0,0); static pp_uint16 lClickCount = 0; static pp_uint32 rmyTime; static PPPoint rlastClickPosition = PPPoint(0,0); static pp_uint16 rClickCount = 0; static bool lMouseDown = false; static pp_uint32 lButtonDownStartTime; static bool rMouseDown = false; static pp_uint32 rButtonDownStartTime; static pp_uint32 timerTicker = 0; //static pp_int32 keyTimerTicker = 0; static pp_uint32 lastModifierKeyState = 0; static PPPoint p; static bool sixteenBitColorDepth = false; pp_uint32 PPGetTickCount() { UnsignedWide microTickCount; Microseconds (µTickCount); pp_int64 time = (((pp_int64)microTickCount.hi) << 32) + microTickCount.lo; return time/1000; } static void crashHandler(int signum) { // Save backup.xm static char buffer[1024]; // Should be enough :p static char message[1024]; strncpy(buffer, getenv("HOME"), 1010); strcat(buffer, "/BACKUP00.XM"); struct stat statBuf; int num = 1; while (stat(buffer, &statBuf) == 0 && num <= 100) snprintf(buffer, sizeof(buffer), "%s/BACKUP%02i.XM", getenv("HOME"), num++); if(num != 100) { myTracker->saveModule(buffer); fputs("\n", stderr); fprintf(stderr, "\nA backup has been saved to %s\n\n", buffer); } if(signum == 15) { snprintf(message, sizeof(message), "TERM signal received.\n"); fputs(message, stderr); } else { snprintf(message, sizeof(message), "MilkyTracker crashed with signal %i\n" "Please submit a bug report stating exactly what you were doing at " "the time of the crash, as well as the above signal number. " "Also note if it is possible to reproduce this crash.\n", signum); fprintf(stderr, "\n"); fputs(message, stderr); PPMessageBox infoBox(myTrackerScreen, "Error", message); infoBox.runModal(); } exit(0); } static void installCrashHandler() { // Initialise crash handler struct sigaction act; struct sigaction oldAct; memset(&act, 0, sizeof(act)); act.sa_handler = crashHandler; act.sa_flags = SA_RESETHAND; sigaction(SIGTERM | SIGILL | SIGABRT | SIGFPE | SIGSEGV, &act, &oldAct); sigaction(SIGILL, &act, &oldAct); sigaction(SIGABRT, &act, &oldAct); sigaction(SIGFPE, &act, &oldAct); sigaction(SIGSEGV, &act, &oldAct); } // Some forwards pascal OSStatus MainWindowEventHandler(EventHandlerCallRef myHandler,EventRef event,void *userData); void RaiseEventSynchronized(PPEvent* event) { if (globalMutex->tryLock()) { if (myTrackerScreen) myTrackerScreen->raiseEvent(event); globalMutex->unlock(); } } void TimerEventHandler(__EventLoopTimer*, void*) { if (!myTrackerScreen) return; PPEvent myEvent(eTimer); RaiseEventSynchronized(&myEvent); /*if ((keyTimerTicker > 0) && !(keyTimerTicker % 3)) { if (TestForKeyDown(kVirtualCapsLockKey)) { pp_uint16 chr[2]; chr[0] = VK_CAPITAL; chr[1] = SC_CAPSLOCK; PPEvent event(eKeyDown, &chr, sizeof(chr)); myTrackerScreen->raiseEvent(&event); } } keyTimerTicker++;*/ timerTicker++; if (lMouseDown && (timerTicker - lButtonDownStartTime) > 25 && !(timerTicker%3)) { PPEvent myEvent(eLMouseRepeat, &p, sizeof(PPPoint)); RaiseEventSynchronized(&myEvent); } if (rMouseDown && (timerTicker - rButtonDownStartTime) > 25) { PPEvent myEvent(eRMouseRepeat, &p, sizeof(PPPoint)); RaiseEventSynchronized(&myEvent); } } void StopMidiRecording() { if (myMidiReceiver) { myMidiReceiver->stopRecording(); } } class MidiEventHandler : public MidiReceiver::MidiEventHandler { public: virtual void keyDown(int note, int volume) { globalMutex->lock(); myTracker->sendNoteDown(note, volume); globalMutex->unlock(); } virtual void keyUp(int note) { globalMutex->lock(); myTracker->sendNoteUp(note); globalMutex->unlock(); } }; MidiEventHandler midiEventHandler; void StartMidiRecording(unsigned int devID, bool recordMidiVelocity, unsigned int velocityAmplify) { if (devID == (unsigned)-1) return; StopMidiRecording(); myMidiReceiver = new MidiReceiver(midiEventHandler); myMidiReceiver->setRecordVelocity(recordMidiVelocity); myMidiReceiver->setVelocityAmplify(velocityAmplify); if (!myMidiReceiver->startRecording(devID)) { // Deal with error PPMessageBox infoBox(myTrackerScreen, "Error","Could not enable MIDI recording."); infoBox.runModal(); } } void InitMidi() { if (!preferencesDialog) return; if (preferencesDialog->getUseMidiDeviceFlag()) StartMidiRecording(preferencesDialog->getSelectedMidiDeviceID(), preferencesDialog->getRecordVelocityFlag(), preferencesDialog->getVelocityAmplify()); else StopMidiRecording(); } void ApplyPreferences() { InitMidi(); enableInsertKeyEmulation((InsertKeyShortcuts)preferencesDialog->getFakeInsertKey()); if (preferencesDialog->getUse15BitColorDepth() != sixteenBitColorDepth) { PPMessageBox infoBox(myTrackerScreen, "Please restart", "MilkyTracker needs to be restarted to apply new color depth"); infoBox.runModal(); } } void initTracker() { myTracker = new Tracker(); PPSize windowSize = myTracker->getWindowSizeFromDatabase(); pp_int32 scaleFactor = myTracker->getScreenScaleFactorFromDatabase(); bool fullScreen = myTracker->getFullScreenFlagFromDatabase(); #ifdef __LOWRES__ windowSize.width = 320; windowSize.height = 240; #endif sixteenBitColorDepth = preferencesDialog->getUse15BitColorDepth(); myDisplayDevice = new PPDisplayDevice(mainWindow, waitWindow, windowSize.width, windowSize.height, scaleFactor, sixteenBitColorDepth ? 16 : 32); myDisplayDevice->init(); if (fullScreen) myDisplayDevice->goFullScreen(fullScreen); myTrackerScreen = new PPScreen(myDisplayDevice, myTracker); myTracker->setScreen(myTrackerScreen); // Startup procedure myTracker->startUp(); ApplyPreferences(); // install crash handler //#ifndef __DEBUG__ // installCrashHandler(); //#endif } static Boolean gApprovedDrag = false; /* set to true if the drag is approved */ static Boolean gInIconBox = false; /* set to true if the drag is approved */ static void dropFileHandler(const FSSpec& spec) { FSRef fileToOpen; FSpMakeFSRef(&spec, &fileToOpen); // gib ihm char buffer[PATH_MAX+1]; FSRefMakePath (&fileToOpen, (UInt8*)buffer, sizeof(buffer)-1); PPSystemString finalFile(buffer); PPSystemString* strPtr = &finalFile; PPEvent event(eFileDragDropped, &strPtr, sizeof(PPSystemString*)); RaiseEventSynchronized(&event); } static pascal OSErr myDragReceiveHandler(WindowPtr theWindow, void *refcon, DragReference theDragRef) { ItemReference theItem; HFSFlavor targetFile; //PromiseHFSFlavor targetPromise; //FSSpec targetSpec; Size theSize; OSErr err = eventNotHandledErr; if (!gApprovedDrag) goto bail; // get the first item reference if ((err = GetDragItemReferenceNumber(theDragRef, 1, &theItem)) != noErr) goto bail; // try to get a HFSFlavor theSize = sizeof(HFSFlavor); err = GetFlavorData(theDragRef, theItem, flavorTypeHFS, &targetFile, &theSize, 0); if (err == noErr) { dropFileHandler(targetFile.fileSpec); return noErr; } else if (err != badDragFlavorErr) goto bail; bail: return err; } static pascal OSErr approveDragReference(DragReference theDragRef, Boolean *approved) { OSErr err; UInt16 itemCount; DragAttributes dragAttrs; FlavorFlags flavorFlags; ItemReference theItem; // we cannot drag to our own window if ((err = GetDragAttributes(theDragRef, &dragAttrs)) != noErr) goto bail; if ((dragAttrs & kDragInsideSenderWindow) != 0) { err = userCanceledErr; goto bail; } // we only accept drags containing one item if ((err = CountDragItems(theDragRef, &itemCount)) != noErr) goto bail; if (itemCount != 1) { err = paramErr; goto bail; } // gather information about the drag & a reference to item one. if ((err = GetDragItemReferenceNumber(theDragRef, 1, &theItem)) != noErr) goto bail; // check for flavorTypeHFS err = GetFlavorFlags(theDragRef, theItem, flavorTypeHFS, &flavorFlags); if (err == noErr) { *approved = true; return noErr; } else if (err != badDragFlavorErr) goto bail; // check for flavorTypePromiseHFS //err = GetFlavorFlags(theDragRef, theItem, flavorTypePromiseHFS, &flavorFlags); //if (err == noErr) { // *approved = true; // return noErr; //} else if (err != badDragFlavorErr) // goto bail; // none of our flavors were found *approved = false; return noErr; bail: // an error occured, clean up. set result to false. *approved = false; return err; } static pascal OSErr myDragTrackingHandler(DragTrackingMessage message, WindowPtr theWindow, void *refCon, DragReference theDragRef) { // we're drawing into the image well if we hilite... switch (message) { case kDragTrackingEnterWindow: { gApprovedDrag = false; if (theWindow == FrontWindow()) { if (approveDragReference(theDragRef, &gApprovedDrag) != noErr) break; if ( ! gApprovedDrag ) break; myTrackerScreen->setShowDragHilite(true); gInIconBox = true; } } break; /*case kDragTrackingInWindow: if (gApprovedDrag) { Point mouse; SetPortWindowPort(mainWindow); GetMouse(&mouse); GlobalToLocal(&mouse); if (PtInRect(mouse, &gIconBox)) { if ( ! gInIconBox) { // if we're entering the box, hilite... SetPortWindowPort(mainWindow); gInIconBox = (ShowDragHiliteBox(theDragRef, &gIconBox) == noErr); } } else if (gInIconBox) { // if we're exiting the box, unhilite... HideDragHilite(theDragRef); gInIconBox = false; } } break;*/ case kDragTrackingLeaveWindow: if (gApprovedDrag && gInIconBox) { //HideDragHilite(theDragRef); myTrackerScreen->setShowDragHilite(false); } gApprovedDrag = gInIconBox = false; break; } return noErr; // there's no point in confusing Drag Manager or its caller } static Boolean gotRequiredParams(const AppleEvent *theEvent) { DescType returnedType; Size actualSize; OSErr err = AEGetAttributePtr( theEvent, keyMissedKeywordAttr, typeWildCard, &returnedType, NULL, 0, &actualSize); return err == errAEDescNotFound; } static OSStatus doOpenAppleEvent(const AppleEvent *theEvent) { OSStatus error; FSSpec myFSS; AEDescList theList; AEKeyword aeKeyword = keyDirectObject; long itemCount, i; DescType actualType; Size actualSize; // get event description error = AEGetParamDesc(theEvent, keyDirectObject, typeAEList, &theList); if( error != noErr ) return error; // make sure event description is correct if (!gotRequiredParams(theEvent)) return error; // count items to open error = AECountItems(&theList, &itemCount); if( error != noErr ) return error; // open all items for (i = 1; i <= itemCount; i++) { error = AEGetNthPtr(&theList, i, typeFSS, &aeKeyword, &actualType, (Ptr) &myFSS, sizeof( FSSpec ), &actualSize); if (error == noErr) dropFileHandler(myFSS); } // event was handled successfully AEDisposeDesc(&theList); return noErr; } static pascal OSErr coreEventHandler(const AppleEvent *theEvent, AppleEvent *reply, long refCon) { DescType actualType; Size actualSize; DescType eventID; OSErr error; error = AEGetAttributePtr( ( AppleEvent* ) theEvent, keyEventIDAttr, typeType, &actualType, (Ptr) &eventID, sizeof( eventID ), &actualSize); if (error) return error; switch( eventID ) { case kAEOpenApplication: if (gotRequiredParams(theEvent)) doOpenAppleEvent(theEvent); break; case kAEOpenDocuments: doOpenAppleEvent(theEvent); break; } return noErr; } static void initAppleEvents() { AEEventHandlerUPP AEHandlerUPP; AEHandlerUPP = NewAEEventHandlerUPP(coreEventHandler); AEInstallEventHandler(kCoreEventClass, kAEOpenApplication, AEHandlerUPP, 0, false); AEInstallEventHandler(kCoreEventClass, kAEOpenDocuments, AEHandlerUPP, 0, false); } int main(int argc, char* argv[]) { IBNibRef nibRef; EventLoopRef loopRef; OSStatus err; globalMutex = new PPMutex(); EventTypeSpec mainSpec[] = { {kEventClassCommand,kEventCommandProcess}, {kEventClassKeyboard,kEventRawKeyDown}, {kEventClassKeyboard,kEventRawKeyRepeat}, {kEventClassKeyboard,kEventRawKeyUp}, {kEventClassKeyboard,kEventRawKeyModifiersChanged}, {kEventClassMouse,kEventMouseDown}, {kEventClassMouse,kEventMouseUp}, {kEventClassMouse,kEventMouseMoved}, {kEventClassMouse,kEventMouseExited}, {kEventClassMouse,kEventMouseDragged}, {kEventClassMouse,kEventMouseWheelMoved}, {kEventClassTextInput,kEventUnicodeForKeyEvent}, {kEventClassWindow,kEventWindowDrawContent}, {kEventClassWindow,kEventWindowBoundsChanged}, {kEventClassWindow,kEventWindowClose} }; // Create a Nib reference passing the name of the nib file (without the .nib extension) // CreateNibReference only searches into the application bundle. err = CreateNibReference(CFSTR("main"), &nibRef); require_noerr( err, CantGetNibRef ); // Once the nib reference is created, set the menu bar. "MainMenu" is the name of the menu bar // object. This name is set in InterfaceBuilder when the nib is created. err = CreateMenuFromNib (nibRef, CFSTR("MenuBar"), &mainMenu); require_noerr( err, CantSetMenuBar ); err = SetRootMenu (mainMenu); require_noerr( err, CantSetMenuBar ); // Then create a window. "MainWindow" is the name of the window object. This name is set in // InterfaceBuilder when the nib is created. err = CreateWindowFromNib(nibRef, CFSTR("MainWindow"), &mainWindow); require_noerr( err, CantCreateWindow ); // Create wait progress bar window from nib err = CreateWindowFromNib(nibRef, CFSTR("WaitWindow"), &waitWindow); require_noerr( err, CantCreateWindow ); // Create preferences window from nib err = CreateWindowFromNib(nibRef, CFSTR("PreferencesWindow"), &preferencesWindow); require_noerr( err, CantCreateWindow ); // We don't need the nib reference anymore. DisposeNibReference(nibRef); // Install handler for dropping files on application icon initAppleEvents(); // Install drag receive handler err = InstallReceiveHandler(myDragReceiveHandler, mainWindow, NULL); // Install drag tracking handler err = InstallTrackingHandler(myDragTrackingHandler, mainWindow, NULL); // Install our own handler for main window InstallWindowEventHandler(mainWindow,NewEventHandlerUPP(MainWindowEventHandler), sizeof(mainSpec)/sizeof(EventTypeSpec),(EventTypeSpec*)&mainSpec,(void*)mainWindow,NULL); // Create preferences window preferencesDialog = new PreferencesDialog(preferencesWindow, mainWindow); InitKeyCodeTranslation(); // tracker-init initTracker(); loopRef = GetMainEventLoop(); InstallEventLoopTimer(loopRef, 0.0f, 20.0f/1000.0f, TimerEventHandler, NULL, NULL); // Call the event loop RunApplicationEventLoop(); globalMutex->lock(); delete myMidiReceiver; globalMutex->unlock(); delete myTracker; delete myTrackerScreen; delete myDisplayDevice; delete preferencesDialog; CantCreateWindow: CantSetMenuBar: CantGetNibRef: delete globalMutex; return err; } void ProcessKeyEvent(EventRef event, EEventDescriptor targetEvent) { UInt32 keyCode; GetEventParameter(event, kEventParamKeyCode, typeUInt32, NULL, sizeof(keyCode), NULL, &keyCode); UniChar* text = NULL; UInt32 size; /* request the size of the Unicode text */ if (noErr != GetEventParameter(event, kEventParamKeyUnicodes, typeUnicodeText, NULL, 0, &size, NULL)) goto bail; if (size % sizeof(UniChar) != 0) goto bail; text = new UniChar[size]; /* fetch the Unicode chars */ if (noErr != GetEventParameter(event, kEventParamKeyUnicodes, typeUnicodeText, NULL, size, NULL, text)) goto bail; { pp_uint16 chr[3] = {KeyCodeToVK(keyCode), KeyCodeToSC(keyCode), *text}; PPEvent event(targetEvent, &chr, sizeof(chr)); RaiseEventSynchronized(&event); } bail: if (text) delete[] text; } pascal OSStatus MainWindowEventHandler(EventHandlerCallRef myHandler,EventRef event,void *userData) { OSStatus result = eventNotHandledErr; if (!myTrackerScreen) return result; Rect windowRect; UInt32 eventClass, eventKind; eventClass = GetEventClass(event); eventKind = GetEventKind(event); // ----------------------------------------- if (lClickCount > 4) { lClickCount = 0; } switch (eventClass) { case kEventClassCommand: { switch (eventKind) { case kEventCommandProcess: { HICommand command; GetEventParameter(event, kEventParamDirectObject, typeHICommand, NULL, sizeof(HICommand), NULL, &command); switch (command.commandID) { case 'quit': { // Shouldn't really handle this event, handle AppQuit instead PPEvent event(eAppQuit); RaiseEventSynchronized(&event); bool res = myTracker->shutDown(); // shutdown was aborted if (!res) result = noErr; break; } case kFullscreenCommand: { PPEvent myEvent(eFullScreen); RaiseEventSynchronized(&myEvent); result = noErr; break; } case kInvokePreferences: { if (preferencesDialog) preferencesDialog->show(); result = noErr; break; } case kConfirmPreferences: { if (preferencesDialog) preferencesDialog->hide(); ApplyPreferences(); SelectWindow(mainWindow); result = noErr; break; } case kDiscardPreferences: { if (preferencesDialog) preferencesDialog->hide(); SelectWindow(mainWindow); result = noErr; break; } } break; } } break; } case kEventClassWindow: { switch (eventKind) { case kEventWindowBoundsChanged: case kEventWindowDrawContent: { myTrackerScreen->update(); break; } case kEventWindowClose: { // This is a single window app, so quit when the window is closed. // This could be simplified if we handled AppQuit instead of hooking the // quit command above. PPEvent event(eAppQuit); RaiseEventSynchronized(&event); bool res = myTracker->shutDown(); if (res) { EventRef quitEvent; CreateEvent(NULL, kEventClassApplication, kEventAppQuit, 0, kEventAttributeNone, &quitEvent); PostEventToQueue(GetMainEventQueue(), quitEvent, kEventPriorityStandard); } result = noErr; break; } } break; } case kEventClassTextInput: { switch (eventKind) { case kEventUnicodeForKeyEvent: { UniChar* text = NULL; UInt32 size; /* request the size of the Unicode text */ if (noErr != GetEventParameter(event, kEventParamTextInputSendText, typeUnicodeText, NULL, 0, &size, NULL)) goto bail; if (size % sizeof(UniChar) != 0) goto bail; text = new UniChar[size]; /* fetch the Unicode chars */ if (noErr != GetEventParameter(event, kEventParamTextInputSendText, typeUnicodeText, NULL, size, NULL, text)) goto bail; { pp_uint16 chr = *text; switch (chr) { // delete case 127: chr = VK_BACK; break; // backspace case 8: chr = VK_BACK; break; // escape (is 27 already?) case 27: chr = VK_ESCAPE; break; // return (is 13 already?) case 13: chr = VK_RETURN; break; } if (chr >= 32) { PPEvent event2(eKeyChar, &chr, sizeof(chr)); RaiseEventSynchronized(&event2); } } bail: if (text) delete[] text; } } break; } case kEventClassMouse: { Point mousePoint; GetEventParameter(event, kEventParamMouseLocation, typeQDPoint, NULL, sizeof(mousePoint), NULL, &mousePoint); SetPortWindowPort(mainWindow); short mouseButton; GetEventParameter(event, kEventParamMouseButton, typeMouseButton, NULL, sizeof(mouseButton), NULL, &mouseButton); UInt32 keyModifiers; GetEventParameter(event, kEventParamKeyModifiers, typeUInt32, NULL, sizeof(keyModifiers), NULL, &keyModifiers); GetPortBounds(GetWindowPort(mainWindow),&windowRect); //double xScale = (double)myDisplayDevice->getSize().width / (windowRect.right - windowRect.left); //double yScale = (double)myDisplayDevice->getSize().height / (windowRect.bottom - windowRect.top); GlobalToLocal(&mousePoint); //localMouseX = (int)(mousePoint.h*xScale); //localMouseY = (int)(mousePoint.v*yScale); localMouseX = mousePoint.h; localMouseY = mousePoint.v; switch (eventKind) { case kEventMouseWheelMoved: { long wheelDelta; GetEventParameter(event, kEventParamMouseWheelDelta, typeLongInteger, NULL, sizeof(wheelDelta), NULL, &wheelDelta); TMouseWheelEventParams mouseWheelParams; mouseWheelParams.pos.x = localMouseX; mouseWheelParams.pos.y = localMouseY; mouseWheelParams.deltaX = 0; mouseWheelParams.deltaY = wheelDelta; PPEvent myEvent(eMouseWheelMoved, &mouseWheelParams, sizeof(mouseWheelParams)); RaiseEventSynchronized(&myEvent); break; } case kEventMouseDown: { if (mouseButton > 2 || !mouseButton) break; if (mouseButton == 1 && (keyModifiers & MacKeyModifierCtrl)) mouseButton++; // ----------------------------- p.x = localMouseX; p.y = localMouseY; if (mouseButton == 1) { //if (rMouseDown) // break; PPEvent myEvent(eLMouseDown, &p, sizeof(PPPoint)); RaiseEventSynchronized(&myEvent); lMouseDown = true; lButtonDownStartTime = timerTicker; if (!lClickCount) { lmyTime = ::PPGetTickCount(); llastClickPosition.x = localMouseX; llastClickPosition.y = localMouseY; } else if (lClickCount == 2) { pp_uint32 deltat = ::PPGetTickCount() - lmyTime; if (deltat > 500) { lClickCount = 0; lmyTime = ::PPGetTickCount(); llastClickPosition.x = localMouseX; llastClickPosition.y = localMouseY; } } lClickCount++; } else if (mouseButton == 2) { //if (lMouseDown) // break; PPEvent myEvent(eRMouseDown, &p, sizeof(PPPoint)); RaiseEventSynchronized(&myEvent); rMouseDown = true; rButtonDownStartTime = timerTicker; if (!rClickCount) { rmyTime = ::PPGetTickCount(); rlastClickPosition.x = localMouseX; rlastClickPosition.y = localMouseY; } else if (rClickCount == 2) { pp_uint32 deltat = ::PPGetTickCount() - rmyTime; if (deltat > 500) { rClickCount = 0; rmyTime = ::PPGetTickCount(); rlastClickPosition.x = localMouseX; rlastClickPosition.y = localMouseY; } } rClickCount++; } break; } case kEventMouseUp: { if (mouseButton > 2 || !mouseButton) break; if (mouseButton == 1 && (keyModifiers & MacKeyModifierCtrl)) mouseButton++; if (!myTrackerScreen) break; // ----------------------------- if (mouseButton == 1) { //if (!lMouseDown) // break; lClickCount++; if (lClickCount == 4) { pp_uint32 deltat = ::PPGetTickCount() - lmyTime; if (deltat < 500) { p.x = localMouseX; p.y = localMouseY; if (abs(p.x - llastClickPosition.x) < 4 && abs(p.y - llastClickPosition.y) < 4) { PPEvent myEvent(eLMouseDoubleClick, &p, sizeof(PPPoint)); RaiseEventSynchronized(&myEvent); } } lClickCount = 0; } p.x = localMouseX; p.y = localMouseY; PPEvent myEvent(eLMouseUp, &p, sizeof(PPPoint)); RaiseEventSynchronized(&myEvent); lMouseDown = false; } else if (mouseButton == 2) { //if (!rMouseDown) // break; rClickCount++; if (rClickCount == 4) { pp_uint32 deltat = ::PPGetTickCount() - rmyTime; if (deltat < 500) { p.x = localMouseX; p.y = localMouseY; if (abs(p.x - rlastClickPosition.x) < 4 && abs(p.y - rlastClickPosition.y) < 4) { PPEvent myEvent(eRMouseDoubleClick, &p, sizeof(PPPoint)); RaiseEventSynchronized(&myEvent); } } rClickCount = 0; } p.x = localMouseX; p.y = localMouseY; PPEvent myEvent(eRMouseUp, &p, sizeof(PPPoint)); RaiseEventSynchronized(&myEvent); rMouseDown = false; } } case kEventMouseMoved: { p.x = localMouseX; p.y = localMouseY; PPEvent myEvent(eMouseMoved, &p, sizeof(PPPoint)); RaiseEventSynchronized(&myEvent); break; } case kEventMouseExited: { p.x = -1; p.y = -1; PPEvent myEvent(eMouseMoved, &p, sizeof(PPPoint)); RaiseEventSynchronized(&myEvent); break; }; case kEventMouseDragged: { if (mouseButton > 2 || !mouseButton) break; p.x = localMouseX; p.y = localMouseY; if (mouseButton == 1 && lMouseDown) { PPEvent myEvent(eLMouseDrag, &p, sizeof(PPPoint)); RaiseEventSynchronized(&myEvent); } else if (rMouseDown) { PPEvent myEvent(eRMouseDrag, &p, sizeof(PPPoint)); RaiseEventSynchronized(&myEvent); } break; } } break; } case kEventClassKeyboard: { switch (eventKind) { case kEventRawKeyDown: case kEventRawKeyRepeat: { ProcessKeyEvent(event, eKeyDown); break; } case kEventRawKeyUp: { ProcessKeyEvent(event, eKeyUp); break; } case kEventRawKeyModifiersChanged: { UInt32 keyModifiers; pp_uint16 chr[3]; GetEventParameter(event, kEventParamKeyModifiers, typeUInt32, NULL, sizeof(keyModifiers), NULL, &keyModifiers); if ((keyModifiers & MacKeyModifierShift) != (lastModifierKeyState & MacKeyModifierShift)) { chr[0] = VK_SHIFT; chr[1] = 0; chr[2] = 0; if (keyModifiers & MacKeyModifierShift) { ::setKeyModifier(KeyModifierSHIFT); PPEvent event(eKeyDown, &chr, sizeof(chr)); RaiseEventSynchronized(&event); } else { PPEvent event(eKeyUp, &chr, sizeof(chr)); RaiseEventSynchronized(&event); ::clearKeyModifier(KeyModifierSHIFT); } } /*if ((keyModifiers & eCapsLockKey) != (lastModifierKeyState & eCapsLockKey)) { chr[0] = VK_CAPITAL; chr[1] = SC_CAPSLOCK; //::setKeyModifier(KeyModifierCTRL); //keyTimerTicker = -15; PPEvent event(eKeyDown, &chr, sizeof(chr)); RaiseEventSynchronized(&event); PPEvent event2(eKeyUp, &chr, sizeof(chr)); RaiseEventSynchronized(&event2); }*/ if ((keyModifiers & MacKeyModifierAlt) != (lastModifierKeyState & MacKeyModifierAlt)) { chr[0] = VK_ALT; chr[1] = 0; chr[2] = 0; if (keyModifiers & MacKeyModifierAlt) { ::setKeyModifier(KeyModifierALT); PPEvent event(eKeyDown, &chr, sizeof(chr)); RaiseEventSynchronized(&event); } else { PPEvent event(eKeyUp, &chr, sizeof(chr)); RaiseEventSynchronized(&event); ::clearKeyModifier(KeyModifierALT); } } if ((keyModifiers & MacKeyModifierCommand) != (lastModifierKeyState & MacKeyModifierCommand)) { chr[0] = VK_CONTROL; chr[1] = 0; chr[2] = 0; if (keyModifiers & MacKeyModifierCommand) { ::setKeyModifier(KeyModifierCTRL); PPEvent event(eKeyDown, &chr, sizeof(chr)); RaiseEventSynchronized(&event); } else { PPEvent event(eKeyUp, &chr, sizeof(chr)); RaiseEventSynchronized(&event); ::clearKeyModifier(KeyModifierCTRL); } } lastModifierKeyState = keyModifiers; } } break; } } return result; } MilkyTracker-1.02.00/src/tracker/carbon/InfoPlist.strings000066400000000000000000000003161324432207300232630ustar00rootroot00000000000000/* Localized versions of Info.plist keys */ CFBundleNAme = "MilkyTracker"; CFBundleShortVersionString = "MilkyTracker version 0.90.86"; CFBundleGetInfoString = "MilkyTracker v0.90.86, Copyright 2004-2013"; MilkyTracker-1.02.00/src/tracker/carbon/KeyTranslation.cpp000066400000000000000000000176711324432207300234300ustar00rootroot00000000000000/* * tracker/carbon/KeyTranslation.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * KeyTranslation.cpp * MilkyTracker * * Created by Peter Barth on 25.11.05. * */ #include #include "KeyTranslation.h" #include "iGetKeys.h" #include "Event.h" static Ascii2KeyCodeTable ascKeyCodeTable; static InsertKeyShortcuts insertKeyEmulation = InsertKeyShortcutNone; void InitKeyCodeTranslation() { // keyboard-translator init ------------------------------------ InitAscii2KeyCodeTable(&ascKeyCodeTable); } void QueryKeyModifiers() { if (TestForKeyDown(kVirtualShiftKey)) setKeyModifier(KeyModifierSHIFT); else clearKeyModifier(KeyModifierSHIFT); if (TestForKeyDown(kVirtualOptionKey)) setKeyModifier(KeyModifierALT); else clearKeyModifier(KeyModifierALT); if (TestForKeyDown(kVirtualCommandKey)) setKeyModifier(KeyModifierCTRL); else clearKeyModifier(KeyModifierCTRL); } // filter key codes which have corresponding ASCII values pp_uint16 FilterVK(pp_uint16 keyCode) { if ((keyCode >= 'A' && keyCode <= 'Z') || (keyCode >= '0' && keyCode <= '9')) { return keyCode; } switch (keyCode) { case VK_BACK: case VK_TAB: case VK_CLEAR: case VK_RETURN: case VK_ESCAPE: case VK_SPACE: return keyCode; } return 0; } pp_uint16 KeyCodeToVK(UInt32 keyCode) { switch (keyCode) { // Strange NUM-lock key or whatever this is case 71: return VK_UNDEFINED; // NUMPAD case 81: return VK_DIVIDE; case 75: return VK_MULTIPLY; case 67: return VK_SUBTRACT; case 78: return VK_ADD; case 69: return VK_SEPARATOR; case 76: return VK_DECIMAL; //case 65: // return VK_INSERT; case 82: return VK_NUMPAD0; case 83: return VK_NUMPAD1; case 84: return VK_NUMPAD2; case 85: return VK_NUMPAD3; case 86: return VK_NUMPAD4; case 87: return VK_NUMPAD5; case 88: return VK_NUMPAD6; case 89: return VK_NUMPAD7; case 91: return VK_NUMPAD8; case 92: return VK_NUMPAD9; // WTF case 10: return 0xC0; // key "1" is capslock //case 18: // return VK_CAPITAL; // Tick case 24: return 0xBB; // SS case 27: return 0xBD; // + case 30: return 0xDD; // Ü case 33: return 0xDB; // Return isn't it? case 36: // allow using ctrl+enter as replacement for insert if (insertKeyEmulation == InsertKeyShortcutCtrlEnter && TestForKeyDown(kVirtualControlKey)) return VK_INSERT; return VK_RETURN; // Ä case 39: return 0xDE; // Ö case 41: return 0xBA; // Sharp case 42: return 0xDC; // , case 43: return 188; // . case 44: return 0xBF; // - case 47: return 190; // Tab case 48: return VK_TAB; // Space case 49: return VK_SPACE; // <, > case 50: return 0xE2; case 51: // allow using ctrl+backspace as replacement for insert if (insertKeyEmulation == InsertKeyShortcutCtrlBackspace && TestForKeyDown(kVirtualControlKey)) return VK_INSERT; return VK_BACK; case 53: return VK_ESCAPE; case 96: return VK_F5; case 97: return VK_F6; case 98: return VK_F7; case 99: return VK_F3; case 100: return VK_F8; case 101: return VK_F9; case 109: return VK_F10; case 103: return VK_F11; case 111: return VK_F12; case 114: return VK_INSERT; case 115: return VK_HOME; case 116: return VK_PRIOR; case 117: return VK_DELETE; case 118: return VK_F4; case 119: return VK_END; case 120: return VK_F2; case 121: return VK_NEXT; case 122: return VK_F1; case 123: return VK_LEFT; case 124: return VK_RIGHT; case 125: return VK_DOWN; case 126: // allow using ctrl+up as replacement for insert if (insertKeyEmulation == InsertKeyShortcutCtrlUp && TestForKeyDown(kVirtualControlKey)) return VK_INSERT; return VK_UP; default: if (KeyCodeToAscii(keyCode) >= 'a' && KeyCodeToAscii(keyCode) <= 'z') return FilterVK(KeyCodeToAscii(keyCode)-32); else return FilterVK(KeyCodeToAscii(keyCode)); } return 0; } // the following translation is not complete, only keys which are necessary // are translated pp_uint16 KeyCodeToSC(UInt32 keyCode) { /*printf("%i\n",keyCode); return 0;*/ switch (keyCode) { case 10: return 0x29; // 1 case 18: //return SC_CAPSLOCK; return 0x02; // 2 case 19: return 0x03; // 3 case 20: return 0x04; // 4 case 21: return 0x05; // 5 case 23: return 0x06; // 6 case 22: return 0x07; // 7 case 26: return 0x08; // 8 case 28: return 0x09; // 9 case 25: return 0x0A; // 0 case 29: return 0x0B; // SS case 27: return 0x0c; // Tick case 24: return 0x0d; // Q case 12: return 0x10; case 13: return 0x11; case 14: return 0x12; case 15: return 0x13; case 17: return 0x14; case 16: return 0x15; case 32: return 0x16; case 34: return 0x17; case 31: return 0x18; case 35: return 0x19; case 33: return 0x1a; case 30: return 0x1b; case 0: return 0x1e; case 1: return 0x1f; case 2: return 0x20; case 3: return 0x21; case 5: return 0x22; case 4: return 0x23; case 38: return 0x24; case 40: return 0x25; case 37: return 0x26; case 41: return 0x27; case 39: return 0x28; case 42: return 0x2b; case 50: return 0x56; case 6: return 0x2c; case 7: return 0x2d; case 8: return 0x2e; case 9: return 0x2f; case 11: return 0x30; case 45: return 0x31; case 46: return 0x32; case 43: return 0x33; case 47: return 0x34; case 44: return 0x35; // RETURN case 36: return 0; // BACK case 48: return 0; // SPACE case 49: return 0; // BACKSPACE case 51: return 0; // ESCAPE case 53: return 0; // F5 case 96: return 0; // F6 case 97: return 0; // F7 case 98: return 0; // F3 case 99: return 0; // F9 case 101: return 0; // F10 case 109: return 0; // F11 case 103: return 0; // F8 case 100: return 0; // F12 case 111: return 0; // INSERT case 114: return 0; // HOME case 115: return 0; // PAGE UP case 116: return 0; // DELETE case 117: return 0; // F4 case 118: return 0; // END case 119: return 0; // F2 case 120: return 0; // PAGE DOWN case 121: return 0; // F1 case 122: return 0; // RIGHT case 123: return 0; // LEFT case 124: return 0; // DOWN case 125: return 0; // UP case 126: return 0; // Strange NUM-lock key or whatever this is case 71: return 0; // NUMPAD case 81: return 0; case 75: return 0; case 67: return 0; case 78: return 0; case 76: return 0; case 65: return 0; case 69: return 0; case 82: return 0; case 83: return 0; case 84: return 0; case 85: return 0; case 86: return 0; case 87: return 0; case 88: return 0; case 89: return 0; case 91: return 0; case 92: return 0; default: printf("Pressed unknown key: %u\n",static_cast(keyCode)); return 0; } return 0; } void enableInsertKeyEmulation(InsertKeyShortcuts shortcut) { insertKeyEmulation = shortcut; } MilkyTracker-1.02.00/src/tracker/carbon/KeyTranslation.h000066400000000000000000000031261324432207300230630ustar00rootroot00000000000000/* * tracker/carbon/KeyTranslation.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * KeyTranslation.h * MilkyTracker * * Created by Peter Barth on 25.11.05. * */ #ifndef KEYTRANSLATION__H #define KEYTRANSLATION__H #include "BasicTypes.h" // some constants enum MacKeyModifiers { MacKeyModifierCommand = 256, MacKeyModifierShift = 512, MacKeyModifierCapsLock = 1024, MacKeyModifierAlt = 2048, MacKeyModifierCtrl = 4096 }; // translate mac style key codes to their PC counterparts void InitKeyCodeTranslation(); pp_uint16 KeyCodeToVK(UInt32 keyCode); pp_uint16 KeyCodeToSC(UInt32 keyCode); void QueryKeyModifiers(); // provide means to simulate missing insert key on mac notebook keyboard enum InsertKeyShortcuts { InsertKeyShortcutNone, InsertKeyShortcutCtrlUp, InsertKeyShortcutCtrlEnter, InsertKeyShortcutCtrlBackspace, }; void enableInsertKeyEmulation(InsertKeyShortcuts shortcut); #endif MilkyTracker-1.02.00/src/tracker/carbon/PreferencesDialog.cpp000066400000000000000000000434631324432207300240400ustar00rootroot00000000000000/* * tracker/carbon/PreferencesDialog.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * PreferencesDialog.cpp * MilkyTracker * * Created by Peter Barth on 07.04.06. * */ #include "PreferencesDialog.h" #include "Carbon_Definitions.h" #include "TrackerSettingsDatabase.h" #include "RtMidi.h" #define KEY_USEMIDI "USEMIDI" #define KEY_RECORDVELOCITY "RECORDVELOCITY" #define KEY_VELOCITYAMPLIFY "VELOCITYAMPLIFY" #define KEY_SAVEPREFS "SAVEPREFS" #define KEY_MIDIDEVICE "MIDIDEVICE" #define KEY_INSERTEMULATION "insertemulation" #define KEY_SIXTEENBITCOLOR "sixteenbitcolor" static CFStringRef applicationID = CFSTR("com.Titan.MilkyTracker"); pascal OSStatus PreferencesDialog::WindowEventHandler(EventHandlerCallRef myHandler, EventRef event, void* userData) { OSStatus result = eventNotHandledErr; UInt32 eventClass, eventKind; eventClass = GetEventClass(event); eventKind = GetEventKind(event); PreferencesDialog* prefDlg = reinterpret_cast(userData); switch (eventClass) { case kEventClassControl: { ControlRef targetControl = NULL; ControlID targetControlID; GetEventParameter(event, kEventParamDirectObject, typeControlRef, NULL, sizeof(targetControl), NULL, &targetControl); if (targetControl) GetControlID(targetControl, &targetControlID); switch (eventKind) { case kEventControlHit: { switch (targetControlID.id) { // simulate insert key with ctrl+up case 131: prefDlg->setFakeInsertKey(GetControl32BitValue(targetControl)-1); result = noErr; break; // 15 bit color toggle case 132: prefDlg->toggleUse15BitColorDepth(); result = noErr; break; // Enable MIDI device case 129: prefDlg->toggleUseMidiDevice(); result = noErr; break; // Save MIDI preferences case 128: prefDlg->toggleSavePreferences(); result = noErr; break; // Record key velocity case 127: prefDlg->toggleRecordVelocity(); result = noErr; break; // velocity amplify slider case 125: { prefDlg->storeVelocityAmplify(GetControlValue(targetControl)); result = noErr; break; } } break; } } break; } // Handle window close event (= discard) case kEventClassWindow: { switch (eventKind) { case kEventWindowClose: { prefDlg->restoreDataBase(); prefDlg->hide(); result = noErr; break; } } break; } case kEventClassCommand: { switch (eventKind) { case kEventCommandProcess: { HICommand command; GetEventParameter(event, kEventParamDirectObject, typeHICommand, NULL, sizeof(HICommand), NULL, &command); switch (command.commandID) { case kDiscardPreferences: prefDlg->restoreDataBase(); case kConfirmPreferences: { // These two events are better off when sent to the main window SendEventToWindow(event, prefDlg->mainWindow); break; } default: // Handle MIDI device selection from pop-up menu if (command.commandID >= kMIDIDeviceBaseCommand && command.commandID <= kMIDIDeviceBaseCommand + prefDlg->getNumMidiDevices()) { prefDlg->storeMidiDeviceName(command.commandID - kMIDIDeviceBaseCommand); result = noErr; } } break; } } break; } } return result; } PreferencesDialog::PreferencesDialog(WindowRef windowRef, WindowRef mainWindowRef) : preferencesWindow(windowRef), mainWindow(mainWindowRef), m_dataBase(NULL), m_dataBaseCopy(NULL), midiin(NULL) { EventTypeSpec eventSpec[] = {{kEventClassCommand,kEventCommandProcess}, {kEventClassControl, kEventControlHit}, {kEventClassWindow, kEventWindowClose}}; InstallWindowEventHandler(windowRef, NewEventHandlerUPP(WindowEventHandler), sizeof(eventSpec)/sizeof(EventTypeSpec), (EventTypeSpec*)&eventSpec, (void*)this, NULL); // Create RtMidi instance for querying device information try { midiin = new RtMidiIn(); } catch (RtMidiError &error) { error.printMessage(); midiin = NULL; } initDataBase(); } PreferencesDialog::~PreferencesDialog() { shutdownDataBase(); delete m_dataBase; delete m_dataBaseCopy; delete midiin; } void PreferencesDialog::show() { backupDataBase(); initDialog(); ShowWindow(preferencesWindow); SelectWindow(preferencesWindow); } void PreferencesDialog::hide() { HideWindow(preferencesWindow); } void PreferencesDialog::initDataBase() { m_dataBase = new TrackerSettingsDatabase(); m_dataBase->store(KEY_USEMIDI, 0); m_dataBase->store(KEY_SAVEPREFS, 0); m_dataBase->store(KEY_MIDIDEVICE, ""); m_dataBase->store(KEY_RECORDVELOCITY, 0); m_dataBase->store(KEY_VELOCITYAMPLIFY, 100); m_dataBase->store(KEY_INSERTEMULATION, 0); m_dataBase->store(KEY_SIXTEENBITCOLOR, 0); // try to retrieve the values from the PLIST Boolean success = FALSE; CFStringRef key = CFSTR(KEY_USEMIDI); Boolean b = CFPreferencesGetAppBooleanValue(key, applicationID, &success); if (success) m_dataBase->store(KEY_USEMIDI, b); // Return boolean success = FALSE; key = CFSTR(KEY_SAVEPREFS); b = CFPreferencesGetAppBooleanValue(key, applicationID, &success); if (success) m_dataBase->store(KEY_SAVEPREFS, b); // Return string, little bit more complicated key = CFSTR(KEY_MIDIDEVICE); CFPropertyListRef plistRef = CFPreferencesCopyAppValue(key, applicationID); if (plistRef) { if (CFGetTypeID(plistRef) == CFStringGetTypeID()) { CFStringRef stringRef = static_cast(plistRef); char buffer[512]; CFStringGetCString(stringRef, buffer, 512, kCFStringEncodingASCII); m_dataBase->store(KEY_MIDIDEVICE, buffer); } } // More boolean values following success = FALSE; key = CFSTR(KEY_RECORDVELOCITY); b = CFPreferencesGetAppBooleanValue(key, applicationID, &success); if (success) m_dataBase->store(KEY_RECORDVELOCITY, b); // Integer value success = FALSE; key = CFSTR(KEY_VELOCITYAMPLIFY); int i = CFPreferencesGetAppIntegerValue(key, applicationID, &success); if (success) m_dataBase->store(KEY_VELOCITYAMPLIFY, i); // Integer value success = FALSE; key = CFSTR(KEY_INSERTEMULATION); i = CFPreferencesGetAppIntegerValue(key, applicationID, &success); if (success) m_dataBase->store(KEY_INSERTEMULATION, i); // More boolean values following success = FALSE; key = CFSTR(KEY_SIXTEENBITCOLOR); b = CFPreferencesGetAppBooleanValue(key, applicationID, &success); if (success) m_dataBase->store(KEY_SIXTEENBITCOLOR, b); } void PreferencesDialog::shutdownDataBase() { CFStringRef yes = CFSTR("yes"); CFStringRef no = CFSTR("no"); if (m_dataBase->restore(KEY_SAVEPREFS)->getIntValue()) { CFStringRef key = CFSTR(KEY_USEMIDI); CFPreferencesSetAppValue(key, m_dataBase->restore(KEY_USEMIDI)->getBoolValue() ? yes : no, applicationID); key = CFSTR(KEY_SAVEPREFS); CFPreferencesSetAppValue(key, m_dataBase->restore(KEY_SAVEPREFS)->getBoolValue() ? yes : no, applicationID); key = CFSTR(KEY_MIDIDEVICE); CFStringRef CFStrDevName = CFStringCreateWithCString(NULL, m_dataBase->restore(KEY_MIDIDEVICE)->getStringValue(), kCFStringEncodingASCII); CFPreferencesSetAppValue(key, CFStrDevName, applicationID); CFRelease(CFStrDevName); key = CFSTR(KEY_RECORDVELOCITY); CFPreferencesSetAppValue(key, m_dataBase->restore(KEY_RECORDVELOCITY)->getBoolValue() ? yes : no, applicationID); SInt32 number = m_dataBase->restore(KEY_VELOCITYAMPLIFY)->getIntValue(); CFNumberRef numberRef = CFNumberCreate(NULL, kCFNumberSInt32Type, &number); key = CFSTR(KEY_VELOCITYAMPLIFY); CFPreferencesSetAppValue(key, numberRef, applicationID); CFRelease(numberRef); } else { // remove keys from preferences (or something like that if it's possible) CFStringRef key = CFSTR(KEY_USEMIDI); CFPreferencesSetAppValue(key, NULL, applicationID); key = CFSTR(KEY_SAVEPREFS); CFPreferencesSetAppValue(key, NULL, applicationID); key = CFSTR(KEY_MIDIDEVICE); CFPreferencesSetAppValue(key, NULL, applicationID); key = CFSTR(KEY_RECORDVELOCITY); CFPreferencesSetAppValue(key, NULL, applicationID); key = CFSTR(KEY_VELOCITYAMPLIFY); CFPreferencesSetAppValue(key, NULL, applicationID); } SInt32 number = m_dataBase->restore(KEY_INSERTEMULATION)->getIntValue(); CFNumberRef numberRef = CFNumberCreate(NULL, kCFNumberSInt32Type, &number); CFStringRef key = CFSTR(KEY_INSERTEMULATION); CFPreferencesSetAppValue(key, numberRef, applicationID); CFRelease(numberRef); key = CFSTR(KEY_SIXTEENBITCOLOR); CFPreferencesSetAppValue(key, m_dataBase->restore(KEY_SIXTEENBITCOLOR)->getBoolValue() ? yes : no, applicationID); CFPreferencesAppSynchronize(applicationID); } void PreferencesDialog::backupDataBase() { if (!m_dataBase) return; if (m_dataBaseCopy) delete m_dataBaseCopy; m_dataBaseCopy = new TrackerSettingsDatabase(*m_dataBase); } void PreferencesDialog::restoreDataBase() { if (!m_dataBaseCopy) return; if (m_dataBase) delete m_dataBase; m_dataBase = new TrackerSettingsDatabase(*m_dataBaseCopy); } void PreferencesDialog::updateControls() { if (NULL==m_dataBase) return; ControlHandle checkBoxControl, control; ControlID checkBoxControlID[] = {{kAppSignature, 129}, {kAppSignature, 128}, {kAppSignature, 127}, {kAppSignature, 126}, {kAppSignature, 125}, {kAppSignature, 124}, {kAppSignature, 131}, {kAppSignature, 132}}; GetControlByID(preferencesWindow, &checkBoxControlID[0], &checkBoxControl); bool b = false; if ((midiin && !midiin->getPortCount()) || !midiin) DisableControl(checkBoxControl); else { EnableControl(checkBoxControl); b = m_dataBase->restore(KEY_USEMIDI)->getBoolValue(); SetControl32BitValue(checkBoxControl, b ? TRUE : FALSE); } GetControlByID(preferencesWindow, &checkBoxControlID[1], &checkBoxControl); b = m_dataBase->restore(KEY_SAVEPREFS)->getBoolValue(); SetControl32BitValue(checkBoxControl, b ? TRUE : FALSE); GetControlByID(preferencesWindow, &checkBoxControlID[2], &checkBoxControl); b = false; if ((midiin && !midiin->getPortCount()) || !midiin) { // Disable checkbox DisableControl(checkBoxControl); // disable min. value text for slider GetControlByID(preferencesWindow, &checkBoxControlID[3], &control); DisableControl(control); // disable slider GetControlByID(preferencesWindow, &checkBoxControlID[4], &control); DisableControl(control); // disable max. value text for slider GetControlByID(preferencesWindow, &checkBoxControlID[5], &control); DisableControl(control); } else { EnableControl(checkBoxControl); b = m_dataBase->restore(KEY_RECORDVELOCITY)->getBoolValue(); SetControl32BitValue(checkBoxControl, b ? TRUE : FALSE); // enable min. value text for slider GetControlByID(preferencesWindow, &checkBoxControlID[3], &control); EnableControl(control); // enable slider GetControlByID(preferencesWindow, &checkBoxControlID[4], &control); EnableControl(control); // enable max. value text for slider GetControlByID(preferencesWindow, &checkBoxControlID[5], &control); EnableControl(control); } GetControlByID(preferencesWindow, &checkBoxControlID[6], &checkBoxControl); UInt32 value = m_dataBase->restore(KEY_INSERTEMULATION)->getIntValue(); SetControl32BitValue(checkBoxControl, value+1); GetControlByID(preferencesWindow, &checkBoxControlID[7], &checkBoxControl); b = m_dataBase->restore(KEY_SIXTEENBITCOLOR)->getBoolValue(); SetControl32BitValue(checkBoxControl, b ? TRUE : FALSE); } void PreferencesDialog::initDialog() { ControlHandle popupButtonControl; ControlID popupButtonControlID = {kAppSignature, 130}; MenuRef menu; GetControlByID(preferencesWindow, &popupButtonControlID, &popupButtonControl); GetControlData(popupButtonControl, kControlEntireControl, kControlPopupButtonMenuRefTag, sizeof(menu), &menu, NULL); unsigned int nPorts = midiin ? midiin->getPortCount() : 0; if (nPorts) { UInt32 numItems = CountMenuItems(menu); DeleteMenuItems(menu, 1, numItems); // Check inputs. std::string portName; unsigned int nSelectedDevice = 0; for (unsigned int i = 0; i < nPorts; i++ ) { try { portName = midiin->getPortName(i); } catch (RtMidiError &error) { error.printMessage(); } if (strcmp(portName.c_str(), m_dataBase->restore(KEY_MIDIDEVICE)->getStringValue()) == 0) nSelectedDevice = i; CFStringRef CFStrPortName = CFStringCreateWithCString(NULL, portName.c_str(), kCFStringEncodingASCII); AppendMenuItemTextWithCFString(menu, CFStrPortName, 0, kMIDIDeviceBaseCommand + i, 0); CFRelease(CFStrPortName); } /*AppendMenuItemTextWithCFString(menu, CFSTR("Temp1"), 0, kMIDIDeviceBaseCommand + 1, 0); AppendMenuItemTextWithCFString(menu, CFSTR("Temp2"), 0, kMIDIDeviceBaseCommand + 2, 0); nPorts+=2;*/ SetControlMaximum(popupButtonControl, nPorts); SetControlValue(popupButtonControl, nSelectedDevice + 1); storeMidiDeviceName(nSelectedDevice); EnableControl(popupButtonControl); } else { DisableControl(popupButtonControl); } updateControls(); updateSliderVelocityAmplify(); } UInt32 PreferencesDialog::getComboSelection() { ControlHandle popupButtonControl; ControlID popupButtonControlID = {kAppSignature, 130}; GetControlByID(preferencesWindow, &popupButtonControlID, &popupButtonControl); return (unsigned int)GetControlValue(popupButtonControl) - 1; } void PreferencesDialog::toggleRecordVelocity() { if (m_dataBase) { int i = m_dataBase->restore(KEY_RECORDVELOCITY)->getIntValue(); m_dataBase->restore(KEY_RECORDVELOCITY)->store(!i); updateControls(); } } void PreferencesDialog::toggleUseMidiDevice() { if (m_dataBase) { int i = m_dataBase->restore(KEY_USEMIDI)->getIntValue(); m_dataBase->restore(KEY_USEMIDI)->store(!i); updateControls(); } } void PreferencesDialog::toggleSavePreferences() { if (m_dataBase) { int i = m_dataBase->restore(KEY_SAVEPREFS)->getIntValue(); m_dataBase->restore(KEY_SAVEPREFS)->store(!i); updateControls(); } } void PreferencesDialog::updateSliderVelocityAmplify() { ControlHandle control, controlSlider; ControlID controlID1 = {kAppSignature, 127}; ControlID controlID2 = {kAppSignature, 125}; GetControlByID(preferencesWindow, &controlID1, &control); GetControlByID(preferencesWindow, &controlID2, &controlSlider); char buffer[1024]; sprintf(buffer, "Record velocity (amplify: %i%%)", m_dataBase->restore(KEY_VELOCITYAMPLIFY)->getIntValue()); CFStringRef CFStrVelocityAmplify = CFStringCreateWithCString(NULL, buffer, kCFStringEncodingASCII); SetControlTitleWithCFString(control, CFStrVelocityAmplify); CFRelease(CFStrVelocityAmplify); SetControlValue(controlSlider, m_dataBase->restore(KEY_VELOCITYAMPLIFY)->getIntValue()); } void PreferencesDialog::storeMidiDeviceName(UInt32 deviceID) { if (midiin && m_dataBase && deviceID < getNumMidiDevices()) { try { std::string portName = midiin->getPortName(deviceID); m_dataBase->restore(KEY_MIDIDEVICE)->store(portName.c_str()); } catch (RtMidiError &error) { error.printMessage(); } } } void PreferencesDialog::storeVelocityAmplify(UInt32 amplify) { if (m_dataBase) { m_dataBase->restore(KEY_VELOCITYAMPLIFY)->store(amplify); updateSliderVelocityAmplify(); } } void PreferencesDialog::setFakeInsertKey(UInt32 style) { if (m_dataBase) { m_dataBase->restore(KEY_INSERTEMULATION)->store(style); updateControls(); } } void PreferencesDialog::toggleUse15BitColorDepth() { if (m_dataBase) { int i = m_dataBase->restore(KEY_SIXTEENBITCOLOR)->getIntValue(); m_dataBase->restore(KEY_SIXTEENBITCOLOR)->store(!i); updateControls(); } } UInt32 PreferencesDialog::getMidiDevIDFromString(const char* string) { UInt32 nSelectedDevice = (unsigned)-1; if (!midiin) return nSelectedDevice; std::string portName; for (unsigned int i = 0; i < getNumMidiDevices(); i++ ) { try { portName = midiin->getPortName(i); } catch (RtMidiError &error) { error.printMessage(); } if (strcmp(portName.c_str(), string) == 0) nSelectedDevice = i; } return nSelectedDevice; } UInt32 PreferencesDialog::getNumMidiDevices() { return midiin ? midiin->getPortCount() : 0; } UInt32 PreferencesDialog::getSelectedMidiDeviceID() { if (m_dataBase) { return getMidiDevIDFromString(m_dataBase->restore(KEY_MIDIDEVICE)->getStringValue()); } return (unsigned)-1; } bool PreferencesDialog::getUseMidiDeviceFlag() { if (m_dataBase) { return m_dataBase->restore(KEY_USEMIDI)->getBoolValue(); } return false; } bool PreferencesDialog::getRecordVelocityFlag() { if (m_dataBase) { return m_dataBase->restore(KEY_RECORDVELOCITY)->getBoolValue(); } return false; } UInt32 PreferencesDialog::getVelocityAmplify() { if (m_dataBase) { return m_dataBase->restore(KEY_VELOCITYAMPLIFY)->getIntValue(); } return 100; } UInt32 PreferencesDialog::getFakeInsertKey() { if (m_dataBase) { return m_dataBase->restore(KEY_INSERTEMULATION)->getIntValue(); } return 0; } bool PreferencesDialog::getUse15BitColorDepth() { if (m_dataBase) { return m_dataBase->restore(KEY_SIXTEENBITCOLOR)->getBoolValue(); } return false; } MilkyTracker-1.02.00/src/tracker/carbon/PreferencesDialog.h000066400000000000000000000042071324432207300234760ustar00rootroot00000000000000/* * tracker/carbon/PreferencesDialog.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * PreferencesDialog.h * MilkyTracker * * Created by Peter Barth on 07.04.06. * */ #ifndef __PREFERENCESDIALOG_H__ #define __PREFERENCESDIALOG_H__ #include class TrackerSettingsDatabase; class RtMidiIn; class PreferencesDialog { private: WindowRef preferencesWindow, mainWindow; static pascal OSStatus WindowEventHandler(EventHandlerCallRef myHandler, EventRef event, void* userData); TrackerSettingsDatabase* m_dataBase; TrackerSettingsDatabase* m_dataBaseCopy; RtMidiIn* midiin; void initDataBase(); void shutdownDataBase(); void backupDataBase(); void restoreDataBase(); void updateControls(); void initDialog(); UInt32 getComboSelection(); void toggleRecordVelocity(); void toggleUseMidiDevice(); void toggleSavePreferences(); void updateSliderVelocityAmplify(); void storeMidiDeviceName(UInt32 deviceID); void storeVelocityAmplify(UInt32 amplify); UInt32 getMidiDevIDFromString(const char* string); UInt32 getNumMidiDevices(); void setFakeInsertKey(UInt32 style); void toggleUse15BitColorDepth(); public: PreferencesDialog(WindowRef windowRef, WindowRef mainWindowRef); ~PreferencesDialog(); void show(); void hide(); UInt32 getSelectedMidiDeviceID(); bool getUseMidiDeviceFlag(); bool getRecordVelocityFlag(); UInt32 getVelocityAmplify(); UInt32 getFakeInsertKey(); bool getUse15BitColorDepth(); }; #endif MilkyTracker-1.02.00/src/tracker/carbon/iGetKeys.cpp000066400000000000000000000177171324432207300222060ustar00rootroot00000000000000/* File: iGetKeys.c Description: Internationally Savy GetKeys test type routines for your entertainment and enjoyment. Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in consideration of your agreement to the following terms, and your use, installation, modification or redistribution of this Apple software constitutes acceptance of these terms. If you do not agree with these terms, please do not use, install, modify or redistribute this Apple software. In consideration of your agreement to abide by the following terms, and subject to these terms, Apple grants you a personal, non-exclusive license, under Apples reproduce, modify and redistribute the Apple Software, with or without modifications, in source and/or binary forms; provided that if you redistribute the Apple Software in its entirety and without modifications, you must retain this notice and the following text and disclaimers in all such redistributions of the Apple Software. Neither the name, trademarks, service marks or logos of Apple Computer, Inc. may be used to endorse or promote products derived from the Apple Software without specific prior written permission from Apple. Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by Apple herein, including but not limited to any patent rights that may be infringed by your derivative works or by other works in which the Apple Software may be incorporated. The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Change History (most recent first): Mon, Jan 15, 2001 -- created */ #include "iGetKeys.h" #ifdef __APPLE_CC__ #include #else #include //#include //#include //#include #include #endif enum { kTableCountOffset = 256+2, kFirstTableOffset = 256+4, kTableSize = 128 }; OSStatus InitAscii2KeyCodeTable(Ascii2KeyCodeTable *ttable) { unsigned char *theCurrentKCHR, *ithKeyTable; short count, i, j, resID; Handle theKCHRRsrc; ResType rType; /* set up our table to all minus ones */ for (i=0;i<256; i++) ttable->transtable[i] = -1; /* find the current kchr resource ID */ ttable->kchrID = (short) GetScriptVariable(smCurrentScript, smScriptKeys); /* get the current KCHR resource */ theKCHRRsrc = GetResource('KCHR', ttable->kchrID); if (theKCHRRsrc == NULL) return resNotFound; GetResInfo(theKCHRRsrc,&resID,&rType,ttable->KCHRname); /* dereference the resource */ theCurrentKCHR = (unsigned char *) (*theKCHRRsrc); /* get the count from the resource */ count = * (short *) (theCurrentKCHR + kTableCountOffset); /* build inverse table by merging all key tables */ for (i=0; itranstable[ ithKeyTable[j] ] == -1) ttable->transtable[ ithKeyTable[j] ] = j; } } /* all done */ return noErr; } OSStatus ValidateAscii2KeyCodeTable(Ascii2KeyCodeTable *ttable,Boolean *wasChanged) { short theID; theID = (short) GetScriptVariable(smCurrentScript, smScriptKeys); if (theID != ttable->kchrID) { *wasChanged=true; return InitAscii2KeyCodeTable(ttable); } else { *wasChanged=false; return noErr; } } StringPtr GetKchrName(Ascii2KeyCodeTable *ttable) { return ttable->KCHRname; } short AsciiToKeyCode(Ascii2KeyCodeTable *ttable, short asciiCode) { if (asciiCode >= 0 && asciiCode <= 255) return ttable->transtable[asciiCode]; else return false; } char KeyCodeToAscii(short virtualKeyCode) { static unsigned long state = 0; long keyTrans; char charCode; Ptr kchr; kchr = (Ptr) GetScriptVariable(smCurrentScript, smKCHRCache); keyTrans = KeyTranslate(kchr, virtualKeyCode, &state); charCode = keyTrans; if (!charCode) charCode = (keyTrans>>16); return charCode; } Boolean TestForKeyDown(short virtualKeyCode) { KeyMap theKeys; unsigned char *keybytes; if (virtualKeyCode >= 0 && virtualKeyCode <= 127) { GetKeys(theKeys); keybytes = (unsigned char *) theKeys; return ((keybytes[virtualKeyCode>>3] & (1 << (virtualKeyCode&7))) != 0); } else return false; } Boolean TestForMultipleKeysDown(short nkeys, ...) { KeyMap theKeys; va_list args; long i, virtualKeyCode; Boolean product; unsigned char *keybytes; va_start(args, nkeys); if (nkeys == 0) { product = false; } else { product = true; GetKeys(theKeys); keybytes = (unsigned char *) theKeys; for (i=0; i 127 || (keybytes[virtualKeyCode>>3] & (1 << (virtualKeyCode&7))) == 0) { product = false; break; } } } va_end(args); return product; } Boolean TestForArrayOfKeysDown(short nkeys, short *keyvec) { KeyMap theKeys; long i, virtualKeyCode; Boolean product; unsigned char *keybytes; if (nkeys == 0) { product = false; } else { product = true; GetKeys(theKeys); keybytes = (unsigned char *) theKeys; for (i=0; i 127 || (keybytes[virtualKeyCode>>3] & (1 << (virtualKeyCode&7))) == 0) { product = false; break; } } } return product; } Boolean TestForAsciiKeyDown(Ascii2KeyCodeTable *ttable, short asciiCode) { short virtualKeyCode; if (asciiCode < 0 || asciiCode > 255 || (virtualKeyCode = ttable->transtable[asciiCode]) == -1) return false; else return TestForKeyDown(virtualKeyCode); } Boolean TestForMultipleAsciiKeysDown(Ascii2KeyCodeTable *ttable, short nkeys, ...) { KeyMap theKeys; va_list args; long i, virtualKeyCode, asciiCode; Boolean product; unsigned char *keybytes; va_start(args, nkeys); if (nkeys == 0) { product = false; } else { product = true; GetKeys(theKeys); keybytes = (unsigned char *) theKeys; for (i=0; i 255) { product = false; break; } else { virtualKeyCode = ttable->transtable[asciiCode]; if (virtualKeyCode == -1 || (keybytes[virtualKeyCode>>3] & (1 << (virtualKeyCode&7))) == 0) { product = false; break; } } } } va_end(args); return product; } Boolean TestForArrayOfAsciiKeysDown(Ascii2KeyCodeTable *ttable, short nkeys, unsigned char* asciiVec) { KeyMap theKeys; long i, virtualKeyCode, asciiCode; Boolean product; unsigned char *keybytes; if (nkeys == 0) { product = false; } else { product = true; GetKeys(theKeys); keybytes = (unsigned char *) theKeys; for (i=0; i 255) { product = false; break; } else { virtualKeyCode = ttable->transtable[asciiCode]; if (virtualKeyCode == -1 || (keybytes[virtualKeyCode>>3] & (1 << (virtualKeyCode&7))) == 0) { product = false; break; } } } } return product; } MilkyTracker-1.02.00/src/tracker/carbon/iGetKeys.h000066400000000000000000000136701324432207300216450ustar00rootroot00000000000000/* File: iGetKeys.h Description: Internationally Savy GetKeys test type routines for your entertainment and enjoyment. Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in consideration of your agreement to the following terms, and your use, installation, modification or redistribution of this Apple software constitutes acceptance of these terms. If you do not agree with these terms, please do not use, install, modify or redistribute this Apple software. In consideration of your agreement to abide by the following terms, and subject to these terms, Apple grants you a personal, non-exclusive license, under Apples reproduce, modify and redistribute the Apple Software, with or without modifications, in source and/or binary forms; provided that if you redistribute the Apple Software in its entirety and without modifications, you must retain this notice and the following text and disclaimers in all such redistributions of the Apple Software. Neither the name, trademarks, service marks or logos of Apple Computer, Inc. may be used to endorse or promote products derived from the Apple Software without specific prior written permission from Apple. Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by Apple herein, including but not limited to any patent rights that may be infringed by your derivative works or by other works in which the Apple Software may be incorporated. The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Change History (most recent first): Mon, Jan 15, 2001 -- created */ #ifndef __IGETKEYS__ #define __IGETKEYS__ #ifdef __APPLE_CC__ #include #else #include //#include #endif typedef struct { short kchrID; Str255 KCHRname; short transtable[256]; } Ascii2KeyCodeTable; enum { /* modifier keys */ kVirtualCapsLockKey = 0x039, kVirtualShiftKey = 0x038, kVirtualControlKey = 0x03B, kVirtualOptionKey = 0x03A, kVirtualCommandKey = 0x037, /* editing/utility keys */ kVirtualHelpKey = 0x072, kVirtualDeleteKey = 0x033, kVirtualTabKey = 0x030, kVirtualEnterKey = 0x04C, kVirtualReturnKey = 0x024, kVirtualEscapeKey = 0x035, kVirtualForwardDeleteKey = 0x075, /* navigation keys */ kVirtualHomeKey = 0x073, kVirtualEndKey = 0x002, kVirtualPageUpKey = 0x074, kVirtualPageDownKey = 0x079, kVirtualLeftArrowKey = 0x07B, kVirtualRightArrowKey = 0x07C, kVirtualUpArrowKey = 0x07E, kVirtualDownArrowKey = 0x07D }; enum { kPublicBetaVirtualLeftArrowKey = 0x03B, /* Public Beta Only */ kPublicBetaVirtualRightArrowKey = 0x03C, /* Public Beta Only */ kPublicBetaVirtualUpArrowKey = 0x03E, /* Public Beta Only */ kPublicBetaVirtualDownArrowKey = 0x03D, /* Public Beta Only */ kPublicBetaVirtualCapsLockKey = 0x03D, /* Public Beta Only */ kPublicBetaVirtualHelpKey = 0x03D /* Public Beta Only */ }; /* InitAscii2KeyCodeTable initializes the ascii to key code look up table using the currently active KCHR resource. This routine calls GetResource so it cannot be called at interrupt time.*/ OSStatus InitAscii2KeyCodeTable(Ascii2KeyCodeTable *ttable); /* ValidateAscii2KeyCodeTable verifies that the ascii to key code lookup table is synchronized with the current KCHR resource. If it is not synchronized, then the table is re-built. This routine calls GetResource so it cannot be called at interrupt time.*/ OSStatus ValidateAscii2KeyCodeTable(Ascii2KeyCodeTable *ttable,Boolean *wasChanged); StringPtr GetKchrName(Ascii2KeyCodeTable *ttable); /* AsciiToKeyCode looks up the ascii character in the key code look up table and returns the virtual key code for that letter. If there is no virtual key code for that letter, then the value -1 will be returned. */ short AsciiToKeyCode(Ascii2KeyCodeTable *ttable, short asciiCode); char KeyCodeToAscii(short virtualKeyCode); /* TestForKeyDown returns true if the key with the given virtual key code is currently being held down. */ Boolean TestForKeyDown(short virtualKeyCode); /* TestForMultipleKeysDown returns true if all of the keys listed in its parameters are held down. nkeys is the number of virtual key codes provided in the variable length parameter list that follows. */ Boolean TestForMultipleKeysDown(short nkeys, ...); Boolean TestForArrayOfKeysDown(short nkeys, short *keyvec); /* TestForAsciiKeyDown returns true if the key with the given ascii code is currently being held down. */ Boolean TestForAsciiKeyDown(Ascii2KeyCodeTable *ttable, short asciiCode); /* TestForAsciiKeyDown returns true if all of the keys with the key with the given ascii codes are currently being held down. nkeys is the number of ascii codes provided in the variable length parameter list that follows. */ Boolean TestForMultipleAsciiKeysDown(Ascii2KeyCodeTable *ttable, short nkeys, ...); Boolean TestForArrayOfAsciiKeysDown(Ascii2KeyCodeTable *ttable, short nkeys, unsigned char* asciiVec); #endif MilkyTracker-1.02.00/src/tracker/cocoa/000077500000000000000000000000001324432207300175615ustar00rootroot00000000000000MilkyTracker-1.02.00/src/tracker/cocoa/AppDelegate.h000066400000000000000000000024451324432207300221120ustar00rootroot00000000000000/* * tracker/cocoa/AppDelegate.h * * Copyright 2014 Dale Whinham * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ // -------- Cocoa/OS X -------- #import // ---------- Tracker --------- #import "BasicTypes.h" // Defined in main.mm pp_uint32 PPGetTickCount(); // Forward declarations @class MTTrackerView; @interface AppDelegate : NSObject @property (assign) IBOutlet NSWindow* myWindow; @property (assign) IBOutlet MTTrackerView* myTrackerView; @property (assign) IBOutlet NSWindow* myProgressWindow; @property (assign) IBOutlet NSProgressIndicator* myProgressIndicator; - (void)showProgress:(BOOL)yes; @endMilkyTracker-1.02.00/src/tracker/cocoa/AppDelegate.mm000066400000000000000000000154101324432207300222700ustar00rootroot00000000000000/* * tracker/cocoa/AppDelegate.mm * * Copyright 2014 Dale Whinham * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ // -------- Cocoa/OS X -------- #import #import // ---------- Tracker --------- #import "DisplayDevice_COCOA.h" #import "MidiReceiver_CoreMIDI.h" #import "PPMutex.h" #import "Screen.h" #import "Tracker.h" @implementation AppDelegate // ---------- Display --------- @synthesize myWindow; @synthesize myTrackerView; @synthesize myProgressWindow; @synthesize myProgressIndicator; // ------ Tracker Globals ----- static PPScreen* myTrackerScreen; static Tracker* myTracker; static PPDisplayDevice* myDisplayDevice; static MidiReceiver* myMidiReceiver; static PPMutex* globalMutex; static BOOL startupAfterFullScreen; static BOOL startupComplete; static NSMutableArray* filesToLoad; static CVDisplayLinkRef displayLink; // TODO: Crash handler void RaiseEventSynchronized(PPEvent* event) { if (myTrackerScreen && globalMutex->tryLock()) { myTrackerScreen->raiseEvent(event); globalMutex->unlock(); } } static CVReturn DisplayLinkCallback(CVDisplayLinkRef displayLink, const CVTimeStamp* now, const CVTimeStamp* outputTime, CVOptionFlags flagsIn, CVOptionFlags* flagsOut, void* displayLinkContext) { // Raise the event on the main thread dispatch_async(dispatch_get_main_queue(), ^ { if (!myTrackerScreen) return; PPEvent e = PPEvent(eTimer); RaiseEventSynchronized(&e); }); return kCVReturnSuccess; } - (void)initTracker { [myWindow setTitle:@"Loading MilkyTracker..."]; [myWindow display]; // Instantiate the tracker myTracker = new Tracker(); // Retrieve and apply display settings PPSize windowSize = myTracker->getWindowSizeFromDatabase(); pp_int32 scaleFactor = myTracker->getScreenScaleFactorFromDatabase(); bool fullScreen = myTracker->getFullScreenFlagFromDatabase(); // Bring up display device myDisplayDevice = new PPDisplayDevice(myWindow, myTrackerView, windowSize.width, windowSize.height, scaleFactor, 32); // Enable fullscreen mode if necessary myDisplayDevice->goFullScreen(fullScreen); // Should we wait for fullscreen transition before completing startup? startupAfterFullScreen = fullScreen; // Attach display to tracker myTrackerScreen = new PPScreen(myDisplayDevice, myTracker); myTracker->setScreen(myTrackerScreen); // Init MIDI myMidiReceiver = new MidiReceiver(*myTracker, *globalMutex); myMidiReceiver->init(); } - (void)trackerStartUp { // Force immediate screen updates during splash screen because Cocoa loop is blocked myDisplayDevice->setImmediateUpdates(true); // Perform startup myTracker->startUp(); // Allow Cocoa to handle refresh again (keeps event processing smooth and responsive) myDisplayDevice->setImmediateUpdates(false); // CVDisplayLink gives us a callback synchronised with vertical blanking CVDisplayLinkCreateWithActiveCGDisplays(&displayLink); CVDisplayLinkSetOutputCallback(displayLink, &DisplayLinkCallback, NULL); CVDisplayLinkStart(displayLink); // Signal startup complete startupComplete = YES; // Handle deferred file loading for (NSString* filename in filesToLoad) [self application: NSApp openFile:filename]; [filesToLoad removeAllObjects]; filesToLoad = nil; } - (void)timerCallback:(NSTimer*)theTimer { if (!myTrackerScreen) return; PPEvent e = PPEvent(eTimer); RaiseEventSynchronized(&e); } - (void)applicationDidFinishLaunching:(NSNotification *)aNotification { // Initialisation globalMutex = new PPMutex(); [self initTracker]; if (!startupAfterFullScreen) [self trackerStartUp]; } #pragma mark Progress window - (void)showProgress:(BOOL)yes { if (yes) { [myProgressWindow makeKeyAndOrderFront:nil]; [myProgressIndicator startAnimation:nil]; } else { [myProgressIndicator stopAnimation:nil]; [myProgressWindow orderOut:nil]; } } #pragma mark Application events - (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender { return myTracker->shutDown() ? NSTerminateNow : NSTerminateCancel; } - (void)applicationWillTerminate:(NSNotification *)aNotification { myMidiReceiver->close(); delete myMidiReceiver; CVDisplayLinkStop(displayLink); CVDisplayLinkRelease(displayLink); delete myTracker; delete myTrackerScreen; delete myDisplayDevice; delete globalMutex; } #pragma mark File open events - (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename { // Startup not complete; hold onto the file path and load it later if (!startupComplete) { if (!filesToLoad) filesToLoad = [[NSMutableArray alloc] initWithObjects:filename, nil]; else [filesToLoad addObject:filename]; } else { // Temp buffer for file path char filePath[PATH_MAX + 1]; // Convert to C string [filename getCString:filePath maxLength:PATH_MAX encoding:NSUTF8StringEncoding]; // Create system string from C string PPSystemString sysString(filePath); PPSystemString* sysStrPtr = &sysString; // Raise file drop event PPEvent event(eFileDragDropped, &sysStrPtr, sizeof(PPSystemString*)); RaiseEventSynchronized(&event); } return YES; } - (void)application:(NSApplication *)theApplication openFiles:(NSArray *)filenames { // Call the single openFile delegate method when multiple files are opened for (NSString* filename in filenames) [[NSApp delegate] application:NSApp openFile:filename]; } #pragma mark Window events - (BOOL)windowShouldClose:(id)sender { [NSApp terminate:self]; return NO; } - (void)windowDidResignKey:(NSNotification *)notification { // Clear modifier keys if window loses focus clearKeyModifier(KeyModifierCTRL); clearKeyModifier(KeyModifierALT); clearKeyModifier(KeyModifierSHIFT); } - (void)windowWillEnterFullScreen:(NSNotification *)notification { PPEvent event(eFullScreen); RaiseEventSynchronized(&event); } - (void)windowWillExitFullScreen:(NSNotification *)notification { PPEvent event(eFullScreen); RaiseEventSynchronized(&event); } - (void)windowDidEnterFullScreen:(NSNotification *)notification { if (startupAfterFullScreen) { [self trackerStartUp]; startupAfterFullScreen = NO; } } @end MilkyTracker-1.02.00/src/tracker/cocoa/MTKeyTranslator.h000066400000000000000000000024341324432207300230000ustar00rootroot00000000000000/* * tracker/cocoa/MTKeyTranslator.h * * Copyright 2014 Dale Whinham * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ // ------- Cocoa/OpenGL ------- #import #import // ---------- Tracker --------- #import "BasicTypes.h" #import "ScanCodes.h" #import "VirtualKeys.h" // This keycode is missing from Events.h in SDK versions <10.12 #if !defined(MAC_OS_X_VERSION_10_12) || MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_12 enum { kVK_RightCommand = 0x36 }; #endif @interface MTKeyTranslator : NSObject + (pp_uint16)toVK:(unsigned short) keyCode; + (pp_uint16)toSC:(unsigned short) keyCode; @end MilkyTracker-1.02.00/src/tracker/cocoa/MTKeyTranslator.mm000066400000000000000000000151171324432207300231640ustar00rootroot00000000000000/* * tracker/cocoa/MTKeyTranslator.mm * * Copyright 2014 Dale Whinham * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #import "MTKeyTranslator.h" @implementation MTKeyTranslator // --------------------------------------------------------- // Converts Cocoa Event keycode to MilkyTracker VirtualKey // --------------------------------------------------------- + (pp_uint16)toVK:(unsigned short) keyCode { switch (keyCode) { // Letters case kVK_ANSI_A: return 'A'; case kVK_ANSI_B: return 'B'; case kVK_ANSI_C: return 'C'; case kVK_ANSI_D: return 'D'; case kVK_ANSI_E: return 'E'; case kVK_ANSI_F: return 'F'; case kVK_ANSI_G: return 'G'; case kVK_ANSI_H: return 'H'; case kVK_ANSI_I: return 'I'; case kVK_ANSI_J: return 'J'; case kVK_ANSI_K: return 'K'; case kVK_ANSI_L: return 'L'; case kVK_ANSI_M: return 'M'; case kVK_ANSI_N: return 'N'; case kVK_ANSI_O: return 'O'; case kVK_ANSI_P: return 'P'; case kVK_ANSI_Q: return 'Q'; case kVK_ANSI_R: return 'R'; case kVK_ANSI_S: return 'S'; case kVK_ANSI_T: return 'T'; case kVK_ANSI_U: return 'U'; case kVK_ANSI_V: return 'V'; case kVK_ANSI_W: return 'W'; case kVK_ANSI_X: return 'X'; case kVK_ANSI_Y: return 'Y'; case kVK_ANSI_Z: return 'Z'; // Numbers case kVK_ANSI_0: return '0'; case kVK_ANSI_1: return '1'; case kVK_ANSI_2: return '2'; case kVK_ANSI_3: return '3'; case kVK_ANSI_4: return '4'; case kVK_ANSI_5: return '5'; case kVK_ANSI_6: return '6'; case kVK_ANSI_7: return '7'; case kVK_ANSI_8: return '8'; case kVK_ANSI_9: return '9'; // Numeric keypad case kVK_ANSI_Keypad0: return VK_NUMPAD0; case kVK_ANSI_Keypad1: return VK_NUMPAD1; case kVK_ANSI_Keypad2: return VK_NUMPAD2; case kVK_ANSI_Keypad3: return VK_NUMPAD3; case kVK_ANSI_Keypad4: return VK_NUMPAD4; case kVK_ANSI_Keypad5: return VK_NUMPAD5; case kVK_ANSI_Keypad6: return VK_NUMPAD6; case kVK_ANSI_Keypad7: return VK_NUMPAD7; case kVK_ANSI_Keypad8: return VK_NUMPAD8; case kVK_ANSI_Keypad9: return VK_NUMPAD9; case kVK_ANSI_KeypadEquals: return VK_DIVIDE; // See numpad Mac key mappings case kVK_ANSI_KeypadDivide: return VK_MULTIPLY; // in MilkyTracker docs to understand case kVK_ANSI_KeypadMultiply: return VK_SUBTRACT; // why this looks messed up... :) case kVK_ANSI_KeypadMinus: return VK_ADD; case kVK_ANSI_KeypadPlus: return VK_SEPARATOR; case kVK_ANSI_KeypadEnter: return VK_DECIMAL; // Modifier keys case kVK_Command: return VK_CONTROL; case kVK_Option: return VK_ALT; case kVK_RightCommand: return VK_RMENU; // MilkyTracker uses VK_RMENU for Play Pattern case kVK_RightOption: return VK_RCONTROL; // and VK_RCONTROL for Play Song case kVK_Shift: case kVK_RightShift: return VK_SHIFT; case kVK_CapsLock: return VK_CAPITAL; // Other non-character keys case kVK_Return: return VK_RETURN; case kVK_Tab: return VK_TAB; case kVK_Space: return VK_SPACE; case kVK_Escape: return VK_ESCAPE; case kVK_ForwardDelete: return VK_DELETE; case kVK_Delete: return VK_BACK; case kVK_LeftArrow: return VK_LEFT; case kVK_RightArrow: return VK_RIGHT; case kVK_DownArrow: return VK_DOWN; case kVK_UpArrow: return VK_UP; case kVK_PageUp: return VK_PRIOR; case kVK_PageDown: return VK_NEXT; case kVK_Home: return VK_HOME; case kVK_End: return VK_END; // Function keys case kVK_F1: return VK_F1; case kVK_F2: return VK_F2; case kVK_F3: return VK_F3; case kVK_F4: return VK_F4; case kVK_F5: return VK_F5; case kVK_F6: return VK_F6; case kVK_F7: return VK_F7; case kVK_F8: return VK_F8; case kVK_F9: return VK_F9; case kVK_F10: return VK_F10; case kVK_F11: return VK_F11; case kVK_F12: return VK_F12; case kVK_F13: return VK_INSERT; default: return VK_UNDEFINED; } } // ------------------------------------------------------- // Converts Cocoa Event keycode to MilkyTracker Scancode // ------------------------------------------------------- + (pp_uint16)toSC:(unsigned short) keyCode { switch (keyCode) { // Letters case kVK_ANSI_A: return SC_A; case kVK_ANSI_B: return SC_B; case kVK_ANSI_C: return SC_C; case kVK_ANSI_D: return SC_D; case kVK_ANSI_E: return SC_E; case kVK_ANSI_F: return SC_F; case kVK_ANSI_G: return SC_G; case kVK_ANSI_H: return SC_H; case kVK_ANSI_I: return SC_I; case kVK_ANSI_J: return SC_J; case kVK_ANSI_K: return SC_K; case kVK_ANSI_L: return SC_L; case kVK_ANSI_M: return SC_M; case kVK_ANSI_N: return SC_N; case kVK_ANSI_O: return SC_O; case kVK_ANSI_P: return SC_P; case kVK_ANSI_Q: return SC_Q; case kVK_ANSI_R: return SC_R; case kVK_ANSI_S: return SC_S; case kVK_ANSI_T: return SC_T; case kVK_ANSI_U: return SC_U; case kVK_ANSI_V: return SC_V; case kVK_ANSI_W: return SC_W; case kVK_ANSI_X: return SC_X; case kVK_ANSI_Y: return SC_Z; // MilkyTracker scancodes are based on German case kVK_ANSI_Z: return SC_Y; // keyboard layout; so Y <-> Z swap is correct here. // Numbers case kVK_ANSI_0: return SC_0; case kVK_ANSI_1: return SC_1; case kVK_ANSI_2: return SC_2; case kVK_ANSI_3: return SC_3; case kVK_ANSI_4: return SC_4; case kVK_ANSI_5: return SC_5; case kVK_ANSI_6: return SC_6; case kVK_ANSI_7: return SC_7; case kVK_ANSI_8: return SC_8; case kVK_ANSI_9: return SC_9; // Special characters case kVK_ANSI_Minus: return SC_SS; case kVK_ANSI_Equal: return SC_TICK; case kVK_ANSI_LeftBracket: return SC_UE; case kVK_ANSI_RightBracket: return SC_PLUS; case kVK_ANSI_Semicolon: return SC_OE; case kVK_ANSI_Quote: return SC_AE; case kVK_ANSI_Backslash: return SC_SHARP; case kVK_ANSI_Grave: return SC_SMALLERGREATER; case kVK_ANSI_Comma: return SC_COMMA; case kVK_ANSI_Period: return SC_PERIOD; case kVK_ANSI_Slash: return SC_MINUS; case kVK_ISO_Section: return SC_WTF; // WTF is actually a Section sign // Modifiers case kVK_CapsLock: return SC_CAPSLOCK; default: return 0; } } @endMilkyTracker-1.02.00/src/tracker/cocoa/MTTrackerView.h000066400000000000000000000022721324432207300224240ustar00rootroot00000000000000/* * tracker/cocoa/MTTrackerView.h * * Copyright 2014 Dale Whinham * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ // ------- Cocoa/OpenGL ------- #import #import // ---------- Tracker --------- #import "Event.h" #import "MTKeyTranslator.h" @interface MTTrackerView : NSOpenGLView // ---- Surface Dimensions ---- @property uint8_t* pixelData; @property int width; @property int height; @property int bpp; // ---- Defined in main.mm ---- void RaiseEventSynchronized(PPEvent* event); - (void)initTexture; @end MilkyTracker-1.02.00/src/tracker/cocoa/MTTrackerView.mm000066400000000000000000000464301324432207300226120ustar00rootroot00000000000000/* * tracker/cocoa/MTTrackerView.mm * * Copyright 2014 Dale Whinham * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #import "MTTrackerView.h" // Nice macro for in-lining shader source #define GLSL(src) "#version 150 core\n" #src // Width of border drawn when dragging and dropping #define FOCUS_RING_WIDTH 4 @implementation MTTrackerView // ---- Surface Dimensions ---- @synthesize pixelData; @synthesize width; @synthesize height; @synthesize bpp; // ----- OpenGL Variables ----- static BOOL textureReady = NO; static GLuint uiVertexArrayName; static GLuint uiVertexBufferName; static GLuint uiTextureName; static GLuint focusRingVertexArrayName; static GLuint focusRingVertexBufferName; static GLuint shaderProgramName; static GLint texCoordAttrib = -1; static GLint posAttrib = -1; static GLint colorUniform = -1; static const GLfloat uiVertices[] = { // ___Pos.___ _Texture_ // / \ / \ // X Y U V -1.0f, -1.0f, 0.0f, 1.0f, // bottom left -1.0f, 1.0f, 0.0f, 0.0f, // top left 1.0f, -1.0f, 1.0f, 1.0f, // bottom right 1.0f, 1.0f, 1.0f, 0.0f // top right }; static GLfloat focusRingVertices[] = { // X Y -1.0f, -1.0f, -0.9f, -0.9f, -1.0f, 1.0f, -0.9f, 0.9f, 1.0f, 1.0f, 0.9f, 0.9f, 1.0f, -1.0f, 0.9f, -0.9f, -1.0f, -1.0f, -0.9f, -0.9f }; // --- Mouse/Key Variables ---- static const double MOUSE_REPEAT_DELAY = 0.5; static const double LEFT_MOUSE_REPEAT_INTERVAL = 0.06; static const double RIGHT_MOUSE_REPEAT_INTERVAL = 0.02; static NSTimer* lMouseTimer; static NSTimer* rMouseTimer; static PPPoint curPoint; static BOOL drawFocusRing; // ---------------------------------------------- // Use inverted view coordinates for mouse etc. // ---------------------------------------------- - (BOOL)isFlipped { return YES; } // --------------------------------------------- // Sets up OpenGL context upon UI construction // --------------------------------------------- - (void)awakeFromNib { NSLog(@"Creating OpenGL context..."); NSOpenGLPixelFormatAttribute attrs[] = { NSOpenGLPFADoubleBuffer, // Prevents GPU switching on dual-GPU machines NSOpenGLPFAAllowOfflineRenderers, NSOpenGLPFADepthSize, 24, // Switch to OpenGL 3.2 NSOpenGLPFAOpenGLProfile, NSOpenGLProfileVersion3_2Core, 0 }; NSOpenGLPixelFormat *pf = [[NSOpenGLPixelFormat alloc] initWithAttributes:attrs]; if (!pf) NSLog(@"Failed to create OpenGL pixel format!"); NSOpenGLContext* context = [[NSOpenGLContext alloc] initWithFormat:pf shareContext:nil]; // Crash on legacy OpenGL function calls; assists with debugging CGLEnable((CGLContextObj) [context CGLContextObj], kCGLCECrashOnRemovedFunctions); // Apply pixel format and context [self setPixelFormat:pf]; [self setOpenGLContext:context]; // Enable Retina awareness [self setWantsBestResolutionOpenGLSurface:YES]; // Register as a drag and drop receiver [self registerForDraggedTypes:[NSArray arrayWithObjects: NSFilenamesPboardType, nil]]; // Register to receive frame resize notifications [self setPostsFrameChangedNotifications:YES]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(frameDidChangeNotification:) name:NSViewFrameDidChangeNotification object:self]; } // -------------------------------------------------- // Updates focus ring vertices if view size changes // -------------------------------------------------- - (void)frameDidChangeNotification:(NSNotification *)notification { [self updateFocusRingVertices]; } // ---------------------------------------------- // Initialises OpenGL VAO, VBO, EBO and shaders // ---------------------------------------------- - (void)prepareOpenGL { NSLog(@"Initialising OpenGL..."); // Compile shaders shaderProgramName = [self compileShaders]; glUseProgram(shaderProgramName); // Setup attributes texCoordAttrib = glGetAttribLocation(shaderProgramName, "texCoord"); posAttrib = glGetAttribLocation(shaderProgramName, "position"); colorUniform = glGetUniformLocation(shaderProgramName, "color"); // Generate and bind UI VAO glGenVertexArrays(1, &uiVertexArrayName); glBindVertexArray(uiVertexArrayName); // Generate and bind VBO glGenBuffers(1, &uiVertexBufferName); glBindBuffer(GL_ARRAY_BUFFER, uiVertexBufferName); glBufferData(GL_ARRAY_BUFFER, sizeof uiVertices, uiVertices, GL_STATIC_DRAW); // Setup pointers to position and texture vertices glVertexAttribPointer(posAttrib, 2, GL_FLOAT, GL_FALSE, 4 * sizeof (GLfloat), 0); glVertexAttribPointer(texCoordAttrib, 2, GL_FLOAT, GL_FALSE, 4 * sizeof (GLfloat), (GLvoid*)(2 * sizeof (GLfloat))); glEnableVertexAttribArray(texCoordAttrib); glEnableVertexAttribArray(posAttrib); // Generate and bind focus ring VAO glGenVertexArrays(1, &focusRingVertexArrayName); glBindVertexArray(focusRingVertexArrayName); // Generate focus ring VBO glGenBuffers(1, &focusRingVertexBufferName); // Adjust focus ring vertices [self updateFocusRingVertices]; // Setup pointer to position vertices glVertexAttribPointer(posAttrib, 2, GL_FLOAT, GL_FALSE, 2 * sizeof (GLfloat), 0); glEnableVertexAttribArray(posAttrib); } // ------------------------------------------------------- // Recalculates focus ring vertices based on view bounds // ------------------------------------------------------- -(void)updateFocusRingVertices { GLfloat innerX = 1.0f - FOCUS_RING_WIDTH / [self bounds].size.width; GLfloat innerY = 1.0f - FOCUS_RING_WIDTH / [self bounds].size.height; focusRingVertices[2] = focusRingVertices[6] = focusRingVertices[18] = -innerX; focusRingVertices[3] = focusRingVertices[15] = focusRingVertices[19] = -innerY; focusRingVertices[10] = focusRingVertices[14] = innerX; focusRingVertices[7] = focusRingVertices[11] = innerY; // Select VAO/VBO and update vertices glBindVertexArray(focusRingVertexArrayName); glBindBuffer(GL_ARRAY_BUFFER, focusRingVertexBufferName); glBufferData(GL_ARRAY_BUFFER, sizeof focusRingVertices, focusRingVertices, GL_STATIC_DRAW); } // ------------------------------------------------------ // Compiles shaders and returns shader program identity // ------------------------------------------------------ - (GLuint)compileShaders { NSLog(@"Compiling shaders..."); // Vertex shader program static const GLchar* vertexShaderSrc = GLSL ( in vec2 position; in vec2 texCoord; out vec2 texCoord_out; void main() { gl_Position = vec4(position, 0.0f, 1.0f); texCoord_out = texCoord; } ); // Fragment shader program static const GLchar* fragShaderSrc = GLSL ( in vec2 texCoord_out; out vec4 fragColor; uniform vec4 color; uniform sampler2D s; void main() { fragColor = mix(texture(s, texCoord_out), color, color.w); } ); GLuint vertexShaderName; GLuint fragmentShaderName; GLuint program; // Compile vertex shader vertexShaderName = glCreateShader(GL_VERTEX_SHADER); glShaderSource(vertexShaderName, 1, &vertexShaderSrc, NULL); glCompileShader(vertexShaderName); // Compile fragment shader fragmentShaderName = glCreateShader(GL_FRAGMENT_SHADER); glShaderSource(fragmentShaderName, 1, &fragShaderSrc, NULL); glCompileShader(fragmentShaderName); // Attach shaders to program and link program = glCreateProgram(); glAttachShader(program, vertexShaderName); glAttachShader(program, fragmentShaderName); glLinkProgram(program); // We have a valid program; shaders no longer needed glDeleteShader(vertexShaderName); glDeleteShader(fragmentShaderName); return program; } // -------------------------------------------------------- // Called by display device once we know dimensions of UI // -------------------------------------------------------- - (void)initTexture { // Generate a texture for display glActiveTexture(GL_TEXTURE0); glGenTextures(1, &uiTextureName); glBindTexture(GL_TEXTURE_2D, uiTextureName); // Texture filtering glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); // Allocate texture storage glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_BGR, GL_UNSIGNED_BYTE, NULL); // Make OpenGL aware of row length for partial updates glPixelStorei(GL_UNPACK_ROW_LENGTH, width); // Pixel rows may not start on word-aligned boundaries, so use byte alignment glPixelStorei(GL_UNPACK_ALIGNMENT, 1); textureReady = YES; } // --------------------------------------------------- // View redrawing routine with optional 'dirty' area // --------------------------------------------------- - (void)drawRect:(NSRect)dirtyRect { // Adjust viewport NSRect bounds = [self convertRectToBacking:[self bounds]]; glViewport(0, 0, bounds.size.width, bounds.size.height); // Just blank the screen if we don't have valid pixel data/texture if (!pixelData || !textureReady) { glClearColor(0.0f, 0.0f, 0.0f, 1.0f); glClear(GL_COLOR_BUFFER_BIT); } else { // Clamp dirty size to w/h of the screen/texture GLint x = dirtyRect.origin.x; GLint y = dirtyRect.origin.y; GLint w = dirtyRect.size.width > width ? width : dirtyRect.size.width; GLint h = dirtyRect.size.height > height ? height : dirtyRect.size.height; // Set skip value for partial update glPixelStorei(GL_UNPACK_SKIP_PIXELS, y * width + x); glBindVertexArray(uiVertexArrayName); // Update texture glTexSubImage2D(GL_TEXTURE_2D, 0, x, y, w, h, GL_BGR, GL_UNSIGNED_BYTE, pixelData); // Draw surface quad from triangle strip glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); // Draw focus ring if necessary if (drawFocusRing) { // Set color uniform to system highlight color NSColor* lineColor = [[NSColor selectedControlColor] colorUsingColorSpaceName:NSCalibratedRGBColorSpace]; glUniform4f(colorUniform, [lineColor redComponent], [lineColor greenComponent], [lineColor blueComponent], 1.0f); glBindVertexArray(focusRingVertexArrayName); glDrawArrays(GL_TRIANGLE_STRIP, 0, 10); // Zero color uniform so we use texture color again glUniform4f(colorUniform, 0.0f, 0.0f, 0.0f, 0.0f); } } // Flip buffers [[self openGLContext] flushBuffer]; } // ----------------------------------------------------------------- // Scales mouse coordinates with respect to actual view dimensions // ----------------------------------------------------------------- - (PPPoint)translateMouseCoordinates:(NSEvent*)theEvent { NSPoint flippedPoint = [self convertPoint:[theEvent locationInWindow] fromView:nil]; CGSize viewBounds = [self frame].size; // Scale point based on GUI pixel dimensions flippedPoint.x = flippedPoint.x / viewBounds.width * width; flippedPoint.y = flippedPoint.y / viewBounds.height * height; PPPoint p; p.x = roundf(flippedPoint.x); p.y = roundf(flippedPoint.y); // Clip coords to window bounds if (p.x > width) p.x = width; else if (p.x < 0) p.x = 0; if (p.y > height) p.y = height; else if (p.y < 0) p.y = 0; return p; } #pragma mark Mouse events - (void)mouseDown:(NSEvent *)theEvent { lMouseTimer = [NSTimer scheduledTimerWithTimeInterval:MOUSE_REPEAT_DELAY target:self selector:@selector(mouseHeld:) userInfo:nil repeats:NO]; curPoint = [self translateMouseCoordinates:theEvent]; #if DEBUG NSLog(@"Left mouse pressed at (%d, %d)", curPoint.x, curPoint.y); #endif PPEvent myEvent(eLMouseDown, &curPoint, sizeof (PPPoint)); RaiseEventSynchronized(&myEvent); } - (void)mouseUp:(NSEvent *)theEvent { // Cancel repeat timer [lMouseTimer invalidate]; lMouseTimer = nil; curPoint = [self translateMouseCoordinates:theEvent]; // Use OS double click tracking (respects user's double click speed setting) if (theEvent.clickCount == 2) { #if DEBUG NSLog(@"Left mouse double clicked at (%d, %d)", curPoint.x, curPoint.y); #endif PPEvent myEvent(eLMouseDoubleClick, &curPoint, sizeof (PPPoint)); RaiseEventSynchronized(&myEvent); } #if DEBUG NSLog(@"Left mouse released at (%d, %d)", curPoint.x, curPoint.y); #endif PPEvent myEvent(eLMouseUp, &curPoint, sizeof (PPPoint)); RaiseEventSynchronized(&myEvent); } - (void)mouseHeld:(NSTimer *)timer { lMouseTimer = [NSTimer scheduledTimerWithTimeInterval:LEFT_MOUSE_REPEAT_INTERVAL target:self selector:@selector(mouseHeld:) userInfo:nil repeats:NO]; PPEvent myEvent(eLMouseRepeat, &curPoint, sizeof (PPPoint)); RaiseEventSynchronized(&myEvent); } - (void)rightMouseDown:(NSEvent *)theEvent { rMouseTimer = [NSTimer scheduledTimerWithTimeInterval:MOUSE_REPEAT_DELAY target:self selector:@selector(rightMouseHeld:) userInfo:nil repeats:NO]; curPoint = [self translateMouseCoordinates:theEvent]; // Use OS double click tracking (respects user's double click speed setting) if (theEvent.clickCount == 2) { #if DEBUG NSLog(@"Right mouse double clicked at (%d, %d)", curPoint.x, curPoint.y); #endif PPEvent myEvent(eRMouseDoubleClick, &curPoint, sizeof(PPPoint)); RaiseEventSynchronized(&myEvent); } #if DEBUG NSLog(@"Right mouse pressed at (%d, %d)", curPoint.x, curPoint.y); #endif PPEvent myEvent(eRMouseDown, &curPoint, sizeof(PPPoint)); RaiseEventSynchronized(&myEvent); } - (void)rightMouseUp:(NSEvent *)theEvent { // Cancel repeat timer [rMouseTimer invalidate]; rMouseTimer = nil; curPoint = [self translateMouseCoordinates:theEvent]; #if DEBUG NSLog(@"Right mouse released at (%d, %d)", curPoint.x, curPoint.y); #endif PPEvent myEvent(eRMouseUp, &curPoint, sizeof(PPPoint)); RaiseEventSynchronized(&myEvent); } - (void)rightMouseHeld:(NSTimer *)timer { rMouseTimer = [NSTimer scheduledTimerWithTimeInterval:RIGHT_MOUSE_REPEAT_INTERVAL target:self selector:@selector(rightMouseHeld:) userInfo:nil repeats:NO]; PPEvent myEvent(eRMouseRepeat, &curPoint, sizeof(PPPoint)); RaiseEventSynchronized(&myEvent); } - (void)otherMouseDown:(NSEvent *)theEvent { PPEvent myEvent(eMMouseDown, &curPoint, sizeof(PPPoint)); RaiseEventSynchronized(&myEvent); } - (void)otherMouseUp:(NSEvent *)theEvent { PPEvent myEvent(eMMouseUp, &curPoint, sizeof(PPPoint)); RaiseEventSynchronized(&myEvent); } - (void)scrollWheel:(NSEvent *)theEvent { curPoint = [self translateMouseCoordinates:theEvent]; #if DEBUG NSLog(@"Scroll wheel event: Delta x %.2f, y %.2f @ (%d,%d)", theEvent.deltaX, theEvent.deltaY, curPoint.x, curPoint.y); #endif TMouseWheelEventParams mouseWheelParams; mouseWheelParams.pos.x = curPoint.x; mouseWheelParams.pos.y = curPoint.y; mouseWheelParams.deltaX = -theEvent.deltaX; mouseWheelParams.deltaY = theEvent.deltaY; PPEvent myEvent(eMouseWheelMoved, &mouseWheelParams, sizeof(TMouseWheelEventParams)); RaiseEventSynchronized(&myEvent); } - (void)mouseMoved:(NSEvent *)theEvent { curPoint = [self translateMouseCoordinates:theEvent]; #if DEBUG NSLog(@"Mouse moved to (%d, %d)", curPoint.x, curPoint.y); #endif PPEvent myEvent(eMouseMoved, &curPoint, sizeof(PPPoint)); RaiseEventSynchronized(&myEvent); } - (void)mouseDragged:(NSEvent *)theEvent { curPoint = [self translateMouseCoordinates:theEvent]; #if DEBUG NSLog(@"Left mouse dragged to (%d, %d)", curPoint.x, curPoint.y); #endif PPEvent myEvent(eLMouseDrag, &curPoint, sizeof(PPPoint)); RaiseEventSynchronized(&myEvent); } - (void)rightMouseDragged:(NSEvent *)theEvent { curPoint = [self translateMouseCoordinates:theEvent]; #if DEBUG NSLog(@"Right mouse dragged to (%d, %d)", curPoint.x, curPoint.y); #endif PPEvent myEvent(eRMouseDrag, &curPoint, sizeof(PPPoint)); RaiseEventSynchronized(&myEvent); } #pragma mark Keyboard events - (void)keyDown:(NSEvent *)theEvent { pp_uint16 character = theEvent.characters.length > 0 ? [theEvent.characters characterAtIndex:0] : 0; // Remap backspace if (character == NSDeleteCharacter) character = NSBackspaceCharacter; pp_uint16 chr[] = { [MTKeyTranslator toVK:theEvent.keyCode], [MTKeyTranslator toSC:theEvent.keyCode], character }; #if DEBUG NSLog(@"Key pressed: Keycode=%d, VK=%d, SC=%d, Char=%d (%c)", theEvent.keyCode, chr[0], chr[1], chr[2], chr[2]); #endif // Is the key an ASCII character? if (chr[2] >= 32 && chr[2] <= 127) { // Yes: Send an eKeyChar event PPEvent myEvent(eKeyChar, &chr[2], sizeof(pp_uint16)); RaiseEventSynchronized(&myEvent); } PPEvent myEvent(eKeyDown, &chr, sizeof(chr)); RaiseEventSynchronized(&myEvent); } - (void)keyUp:(NSEvent *)theEvent { pp_uint16 chr[] = { [MTKeyTranslator toVK:theEvent.keyCode], [MTKeyTranslator toSC:theEvent.keyCode], theEvent.characters.length > 0 ? [theEvent.characters characterAtIndex:0] : 0 }; #if DEBUG NSLog(@"Key released: Keycode=%d, VK=%d, SC=%d, Char=%c", theEvent.keyCode, chr[0], chr[1], chr[2]); #endif PPEvent myEvent(eKeyUp, &chr, sizeof(chr)); RaiseEventSynchronized(&myEvent); } - (void)flagsChanged:(NSEvent*)theEvent { unsigned long flags = [theEvent modifierFlags]; BOOL keyDown = NO; pp_uint16 chr[] = { [MTKeyTranslator toVK:theEvent.keyCode], [MTKeyTranslator toSC:theEvent.keyCode] }; switch ([theEvent keyCode]) { // Both Shift keys behave as modifiers case kVK_Shift: case kVK_RightShift: if (flags & NSShiftKeyMask) { keyDown = YES; setKeyModifier(KeyModifierSHIFT); } else clearKeyModifier(KeyModifierSHIFT); break; // Only Left Command is used as a modifier case kVK_Command: if (flags & NSCommandKeyMask) setKeyModifier(KeyModifierCTRL); else clearKeyModifier(KeyModifierCTRL); // Break omitted intentionally case kVK_RightCommand: keyDown = flags & NSCommandKeyMask ? YES : NO; break; // Only Left Option is used as a modifier case kVK_Option: if (flags & NSAlternateKeyMask) setKeyModifier(KeyModifierALT); else clearKeyModifier(KeyModifierALT); // Break omitted intentionally case kVK_RightOption: keyDown = flags & NSAlternateKeyMask ? YES : NO; break; case kVK_CapsLock: keyDown = YES; break; default: return; } #if DEBUG NSLog(@"Modifier %s: Keycode=%d, VK=%d, SC=%d", keyDown ? "pressed" : "released", theEvent.keyCode, chr[0], chr[1]); #endif PPEvent myEvent(keyDown ? eKeyDown : eKeyUp, &chr, sizeof(chr)); RaiseEventSynchronized(&myEvent); } #pragma mark Drag and drop events - (NSDragOperation)draggingEntered:(id )sender { NSPasteboard* pboard = [sender draggingPasteboard]; if ([[pboard types] containsObject:NSFilenamesPboardType]) { drawFocusRing = YES; [self setNeedsDisplay: YES]; return NSDragOperationGeneric; } return NSDragOperationNone; } - (void)draggingExited:(id)sender { drawFocusRing = NO; [self setNeedsDisplay: YES]; } - (BOOL)performDragOperation:(id )sender { NSPasteboard* pboard = [sender draggingPasteboard]; if ([[pboard types] containsObject:NSFilenamesPboardType]) { drawFocusRing = NO; [self setNeedsDisplay: YES]; NSArray* files = [pboard propertyListForType:NSFilenamesPboardType]; [[NSApp delegate] application:NSApp openFiles:files]; return YES; } return NO; } @end MilkyTracker-1.02.00/src/tracker/cocoa/main.mm000066400000000000000000000037731324432207300210520ustar00rootroot00000000000000/* * tracker/cocoa/main.mm * * Copyright 2014 Dale Whinham * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ // -------- Cocoa/OS X -------- #import #import #import // ---------- Tracker --------- #import "BasicTypes.h" // ---------------------------------------------------------- // Returns number of milliseconds elapsed since last reboot // ---------------------------------------------------------- pp_uint32 PPGetTickCount() { // Static variable guaranteed to be zero-initialised static mach_timebase_info_data_t timebaseInfo; // Timebase info uninitialised? if (timebaseInfo.denom == 0) mach_timebase_info(&timebaseInfo); // Get the system tick count in nanoseconds uint64_t absTime = mach_absolute_time(); uint64_t absTimeNanos = absTime * timebaseInfo.numer / timebaseInfo.denom; // Convert to milliseconds return (pp_uint32) (absTimeNanos / 1e6); } // ------------------------------------------------------------------- // Dummy function; key modifiers are checked/set in MTTrackerView.mm // ------------------------------------------------------------------- void QueryKeyModifiers() { } // -------------------------------------- // Entry point; start Cocoa application // -------------------------------------- int main(int argc, const char * argv[]) { return NSApplicationMain(argc, argv); } MilkyTracker-1.02.00/src/tracker/cocoa/resources/000077500000000000000000000000001324432207300215735ustar00rootroot00000000000000MilkyTracker-1.02.00/src/tracker/cocoa/resources/Application.xib000066400000000000000000000247111324432207300245470ustar00rootroot00000000000000 MilkyTracker-1.02.00/src/tracker/cocoa/resources/Info.plist.in000066400000000000000000000303051324432207300241510ustar00rootroot00000000000000 CFBundleDevelopmentRegion English CFBundleDocumentTypes CFBundleTypeExtensions MOD mod CFBundleTypeIconFile MilkyTracker-Protracker-Module CFBundleTypeName Protracker Module CFBundleTypeRole Editor CFBundleTypeExtensions ULT ult CFBundleTypeIconFile MilkyTracker-Ultratracker-Module CFBundleTypeName Ultratracker Module CFBundleTypeRole Editor CFBundleTypeExtensions PTM ptm CFBundleTypeIconFile MilkyTracker-PolyTracker-Module CFBundleTypeName PolyTracker Module CFBundleTypeRole Editor CFBundleTypeExtensions MXM mxm CFBundleTypeIconFile MilkyTracker-Cubic-Tiny-XM-Module CFBundleTypeName Cubic Tiny XM Modules CFBundleTypeRole Editor CFBundleTypeExtensions XM xm CFBundleTypeIconFile MilkyTracker-Fasttracker-2-Extended-Module CFBundleTypeName Fasttracker 2 Extended Module CFBundleTypeRole Editor CFBundleTypeExtensions PLM plm CFBundleTypeIconFile MilkyTracker-Disorder_Tracker-2-Module CFBundleTypeName Disorder Tracker 2 Module CFBundleTypeRole Editor CFBundleTypeExtensions GMC gmc CFBundleTypeIconFile MilkyTracker-Game-Music-Creator-Module CFBundleTypeName Game Music Creator Module CFBundleTypeRole Editor CFBundleTypeExtensions DIGI digi CFBundleTypeIconFile MilkyTracker-Digibooster-Module CFBundleTypeName Digibooster Module CFBundleTypeRole Editor CFBundleTypeExtensions DBM dbm CFBundleTypeIconFile MilkyTracker-Digibooster-Pro-Module CFBundleTypeName Digibooster Pro Module CFBundleTypeRole Editor CFBundleTypeExtensions AMS ams CFBundleTypeIconFile MilkyTracker-Velvet-Studio-Module CFBundleTypeName Velvet Studio / Extreme Tracker Module CFBundleTypeRole Editor CFBundleTypeExtensions MDL mdl CFBundleTypeIconFile MilkyTracker-Digitracker-3.0-Module CFBundleTypeName Digitracker 3.0 Module CFBundleTypeRole Editor CFBundleTypeExtensions MTM mtm CFBundleTypeIconFile MilkyTracker-Multitracker-Module CFBundleTypeName Multitracker Module CFBundleTypeRole Editor CFBundleTypeExtensions PSM psm CFBundleTypeIconFile MilkyTracker-Epic-Megagames-MASI-Module CFBundleTypeName Epic Megagames MASI Module CFBundleTypeRole Editor CFBundleTypeExtensions S3M s3m CFBundleTypeIconFile MilkyTracker-ScreamTracker-3-Module CFBundleTypeName ScreamTracker 3 Module CFBundleTypeRole Editor CFBundleTypeExtensions STM stm CFBundleTypeIconFile MilkyTracker-ScreamTracker-2-Module CFBundleTypeName ScreamTracker 2 Module CFBundleTypeRole Editor CFBundleTypeExtensions IMF imf CFBundleTypeIconFile MilkyTracker-Imago-Orpheus-Module CFBundleTypeName Imago Orpheus Module CFBundleTypeRole Editor CFBundleTypeExtensions OKT okt OKTA okta CFBundleTypeIconFile MilkyTracker-Oktalyzer-Module CFBundleTypeName Oktalyzer Module CFBundleTypeRole Editor CFBundleTypeExtensions UNI uni CFBundleTypeIconFile MilkyTracker-MikMod-Module CFBundleTypeName MikMod Module CFBundleTypeRole Editor CFBundleTypeExtensions DTM dtm CFBundleTypeIconFile MilkyTracker-Digital-Tracker-Module CFBundleTypeName Digital Tracker / Digitrekker Module CFBundleTypeRole Editor CFBundleTypeExtensions AMF amf CFBundleTypeIconFile MilkyTracker-Asylum-Music-Format-Module CFBundleTypeName Asylum Music Format Module CFBundleTypeRole Editor CFBundleTypeExtensions DSM dsm CFBundleTypeIconFile MilkyTracker-Digisound-Interface-Kit-Module CFBundleTypeName Digisound Interface Kit Module CFBundleTypeRole Editor CFBundleTypeExtensions GDM gdm CFBundleTypeIconFile MilkyTracker-General-Digimusic-Module CFBundleTypeName General Digimusic Module CFBundleTypeRole Editor CFBundleTypeExtensions FAR far CFBundleTypeIconFile MilkyTracker-Farandole-Composer-Module CFBundleTypeName Farandole Composer Module CFBundleTypeRole Editor CFBundleTypeExtensions IT it CFBundleTypeIconFile MilkyTracker-Impulse-Tracker-Module CFBundleTypeName Impulse Tracker Module CFBundleTypeRole Editor CFBundleTypeExtensions 669 CFBundleTypeIconFile MilkyTracker-Composer-669-Module CFBundleTypeName Composer 669 Module CFBundleTypeRole Editor CFBundleTypeExtensions XI xi CFBundleTypeIconFile MilkyTracker-Fasttracker-2-Extended-Instrument CFBundleTypeName Fasttracker 2 Extended Instrument CFBundleTypeRole Editor CFBundleTypeExtensions PAT pat CFBundleTypeIconFile MilkyTracker-Gravis-Ultrasound-Patch CFBundleTypeName Gravis Ultrasound Patch CFBundleTypeRole Editor CFBundleTypeExtensions 8SVX 8svx CFBundleTypeIconFile MilkyTracker-8SVX-Sample CFBundleTypeName 8SVX Sample CFBundleTypeRole Editor CFBundleTypeExtensions IFF iff CFBundleTypeIconFile MilkyTracker-8SVX-Sample-IFF CFBundleTypeName 8SVX Sample CFBundleTypeRole Editor CFBundleTypeExtensions WAV wav CFBundleTypeIconFile MilkyTracker-WAV-Sample CFBundleTypeName WAV Sample CFBundleTypeRole Editor CFBundleTypeExtensions XP xp CFBundleTypeIconFile MilkyTracker-Fasttracker-2-Extended-Pattern CFBundleTypeName Fasttracker 2 Extended Pattern CFBundleTypeRole Editor CFBundleTypeExtensions XT xt CFBundleTypeIconFile MilkyTracker-Fasttracker-2-Extended-Track CFBundleTypeName Fasttracker 2 Extended Track CFBundleTypeRole Editor CFBundleExecutable ${MACOSX_BUNDLE_EXECUTABLE} CFBundleIconFile ${MACOSX_BUNDLE_ICON_FILE} CFBundleIdentifier ${MACOSX_BUNDLE_GUI_IDENTIFIER} CFBundleInfoDictionaryVersion 6.0 CFBundlePackageType APPL CFBundleSignature ???? CFBundleShortVersion ${MACOSX_BUNDLE_SHORT_VERSION_STRING} CFBundleVersion ${MACOSX_BUNDLE_BUNDLE_VERSION} CSResourcesFileMapped LSApplicationCategoryType public.app-category.music NSMainNibFile ${MACOSX_BUNDLE_NSMAIN_NIB_FILE} NSPrincipalClass NSApplication NSSupportsAutomaticGraphicsSwitching MilkyTracker-1.02.00/src/tracker/haiku/000077500000000000000000000000001324432207300175765ustar00rootroot00000000000000MilkyTracker-1.02.00/src/tracker/haiku/Haiku_main.cpp000066400000000000000000000016271324432207300223550ustar00rootroot00000000000000/* * Copyright 2012 Julian Harnath * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "MilkyApplication.h" int main() { MilkyApplication* milkyApplication = new MilkyApplication(); milkyApplication->Run(); delete milkyApplication; return 0; } MilkyTracker-1.02.00/src/tracker/haiku/MilkyApplication.cpp000066400000000000000000000206321324432207300235560ustar00rootroot00000000000000/* * Copyright 2012 Julian Harnath * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "MilkyApplication.h" #include "KeyCodeMap.h" #include "MidiSetup.h" #include "MilkyWindow.h" #include "Screen.h" #include "Tracker.h" #include "MilkySettings/SettingsMessages.h" #include #include #include #include #include #include #include #include #include #include const char* kMilkySignature = "application/x-vnd.Milky-MilkyTracker"; MilkyApplication::MilkyApplication() : BApplication(kMilkySignature), fMilkyWindow(NULL), fTracker(NULL), fTrackerLock(0), fTrackerListening(false), fLaunchOpenFile(NULL), fClockThread(0) { } MilkyApplication::~MilkyApplication() { } void MilkyApplication::ReadyToRun() { status_t status; // Setup tracker ---------------------------------------------------------- fTracker = new Tracker(); PPSize windowSize = fTracker->getWindowSizeFromDatabase(); int32 scaleFactor = fTracker->getScreenScaleFactorFromDatabase(); bool fullScreen = fTracker->getFullScreenFlagFromDatabase(); fTrackerLock = create_sem(1, "MilkyTracker lock"); if (fTrackerLock < B_OK) debugger("Could not create tracker lock"); // Setup main window ------------------------------------------------------ fMilkyWindow = new MilkyWindow(BRect(100, 100, 100 + windowSize.width, 100 + windowSize.height), scaleFactor, fullScreen, fTracker, fTrackerLock); fMilkyWindow->Show(); // Start tracker ---------------------------------------------------------- fTracker->startUp(); fTrackerListening = true; if (fLaunchOpenFile != NULL) { _LoadFile(fLaunchOpenFile->String()); delete fLaunchOpenFile; fLaunchOpenFile = NULL; } // Start main clock ------------------------------------------------------- fClockThread = spawn_thread(&_ClockThread, "Milky clock", B_URGENT_DISPLAY_PRIORITY, this); if (fClockThread < B_OK) debugger("Could not setup clock thread"); status = resume_thread(fClockThread); if (status < B_OK) debugger("Could not start clock thread"); // Start listening for MIDI input ----------------------------------------- MidiSetup::StartMidi(fTracker, fTrackerLock); // Load platform-specific settings from file ------------------------------ _LoadPlatformSettings(); } bool MilkyApplication::QuitRequested() { // Stop raising events to the tracker fTrackerListening = false; // Stop clock kill_thread(fClockThread); // Stop listening to MIDI input MidiSetup::StopMidi(); // Nobody should be using the tracker now anymore delete_sem(fTrackerLock); delete fTracker; return true; } // #pragma mark - Platform-specific settings void MilkyApplication::MessageReceived(BMessage* message) { switch (message->what) { case kMsg_SwitchCommandControlToggled: _SetSwapCommandControl(message->FindBool("on")); break; case kMsg_ChangeFullscreenResolutionToggled: fMilkyWindow->SetSwitchFullscreenResolution( message->FindBool("on")); break; case kMsg_MidiInputSelected: MidiSetup::ConnectProducer(message->FindInt32("id")); break; case kMsg_MidiRecordVelocityToggled: MidiSetup::SetRecordVelocity(message->FindBool("on")); break; case kMsg_MidiVelocityAmplificationChanged: MidiSetup::SetVelocityAmplify(message->FindInt32("value")); break; default: BApplication::MessageReceived(message); } } void MilkyApplication::_LoadPlatformSettings() { // Build path to settings file and check if it exists --------------------- BPath path; find_directory(B_USER_SETTINGS_DIRECTORY, &path); path.Append("MilkyTracker/platform_settings"); BEntry settingsEntry(path.Path()); if (!settingsEntry.Exists()) return; // Settings file exists, try to open and unflatten into message ----------- BFile settingsFile(path.Path(), B_READ_ONLY); if (settingsFile.InitCheck() != B_OK) return; BMessage settings; status_t status = settings.Unflatten(&settingsFile); if (status != B_OK) return; // Look for known settings and apply them -------------------------------- bool switchCommandControl; status = settings.FindBool("switch_command_control", &switchCommandControl); if (status == B_OK) _SetSwapCommandControl(switchCommandControl); bool changeFullscreenResolution; status = settings.FindBool("change_fullscreen_resolution", &changeFullscreenResolution); if (status == B_OK) fMilkyWindow->SetSwitchFullscreenResolution( changeFullscreenResolution); bool recordVelocity; status = settings.FindBool("record_velocity", &recordVelocity); if (status == B_OK) MidiSetup::SetRecordVelocity(recordVelocity); int16 velocityAmplify; status = settings.FindInt16("velocity_amplify", &velocityAmplify); if (status == B_OK) MidiSetup::SetVelocityAmplify(velocityAmplify); BString midiInputName; status = settings.FindString("midi_input", &midiInputName); if (status == B_OK) MidiSetup::ConnectProducer(midiInputName); } void MilkyApplication::_SetSwapCommandControl(bool swap) { gSwapCommandControl = swap; if (swap) { gModifierDataCommand.modifier = B_CONTROL_KEY; gModifierDataCommand.modifierLeft = B_LEFT_CONTROL_KEY; gModifierDataCommand.modifierRight = B_RIGHT_CONTROL_KEY; gModifierDataControl.modifier = B_COMMAND_KEY; gModifierDataControl.modifierLeft = B_LEFT_COMMAND_KEY; gModifierDataControl.modifierRight = B_RIGHT_COMMAND_KEY; } else { gModifierDataCommand.modifier = B_COMMAND_KEY; gModifierDataCommand.modifierLeft = B_LEFT_COMMAND_KEY; gModifierDataCommand.modifierRight = B_RIGHT_COMMAND_KEY; gModifierDataControl.modifier = B_CONTROL_KEY; gModifierDataControl.modifierLeft = B_LEFT_CONTROL_KEY; gModifierDataControl.modifierRight = B_RIGHT_CONTROL_KEY; } } // #pragma mark - Loading files from argv and icon drop void MilkyApplication::ArgvReceived(int32 argc, char** argv) { // We only care for the first command line argument, which can be a file // which we're going to try to open BEntry entry(argv[1]); if (entry.InitCheck() != B_OK) return; if (!entry.Exists()) { fprintf(stderr, "ERROR: file not found '%s'\n", argv[1]); return; } entry_ref ref; entry.GetRef(&ref); BMessage message(B_REFS_RECEIVED); message.AddRef("refs", &ref); RefsReceived(&message); } void MilkyApplication::RefsReceived(BMessage* message) { status_t status; entry_ref ref; status = message->FindRef("refs", &ref); if (status != B_OK) return; BPath path(&ref); if (path.InitCheck() != B_OK) return; // Check that it's a file with a MIME type of the audio group BNode node(&ref); if (node.InitCheck() != B_OK) return; BNodeInfo nodeInfo(&node); char mimeType[B_MIME_TYPE_LENGTH]; nodeInfo.GetType(mimeType); BString mimeTypeString(mimeType); if (mimeTypeString.FindFirst("audio/") != 0) return; // If we are just launching the application (and thus the Tracker // is not initialized yet), defer the file load if (IsLaunching()) fLaunchOpenFile = new BString(path.Path()); else _LoadFile(path.Path()); } void MilkyApplication::_LoadFile(const char* path) { fDragDroppedFile = PPSystemString(path); PPSystemString* pathStringPointer = &fDragDroppedFile; PPEvent event(eFileDragDropped, &pathStringPointer, sizeof(PPSystemString*)); fMilkyWindow->RaiseEvent(&event); } // #pragma mark - Clock generator void MilkyApplication::GenerateClock() { PPEvent event(eTimer); bigtime_t beginTime; // Send clock events to the tracker every 15ms for(;;) { beginTime = system_time(); if (fTrackerListening) { acquire_sem(fTrackerLock); fMilkyWindow->TrackerScreen()->raiseEvent(&event); release_sem(fTrackerLock); } snooze_until(beginTime + 20000, B_SYSTEM_TIMEBASE); } } status_t MilkyApplication::_ClockThread(void* data) { MilkyApplication* app = (MilkyApplication*)data; app->GenerateClock(); return B_OK; } MilkyTracker-1.02.00/src/tracker/haiku/MilkyApplication.h000066400000000000000000000040071324432207300232210ustar00rootroot00000000000000/* * Copyright 2012 Julian Harnath * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #ifndef __MILKYAPPLICATION_H__ #define __MILKYAPPLICATION_H__ #include #include "BasicTypes.h" #include "Event.h" class MilkyWindow; class Tracker; class MilkyApplication : public BApplication { public: MilkyApplication(); virtual ~MilkyApplication(); virtual void ReadyToRun(); virtual bool QuitRequested(); private: MilkyWindow* fMilkyWindow; Tracker* fTracker; sem_id fTrackerLock; bool fTrackerListening; // --- Platform-specific settings --------------------------------------------- public: virtual void MessageReceived(BMessage* message); private: void _LoadPlatformSettings(); void _SetSwapCommandControl(bool swap); // --- Loading files from argv and icon drop ---------------------------------- public: virtual void ArgvReceived(int32 argc, char** argv); virtual void RefsReceived(BMessage* message); private: void _LoadFile(const char* path); BString* fLaunchOpenFile; PPSystemString fDragDroppedFile; // --- Clock generator -------------------------------------------------------- public: void GenerateClock(); bool& TrackerListening() { return fTrackerListening; } private: static status_t _ClockThread(void* data); thread_id fClockThread; }; #endif // __MILKYAPPLICATION_H__ MilkyTracker-1.02.00/src/tracker/haiku/MilkySettings/000077500000000000000000000000001324432207300224045ustar00rootroot00000000000000MilkyTracker-1.02.00/src/tracker/haiku/MilkySettings/InterfaceSettingsView.cpp000066400000000000000000000070101324432207300273620ustar00rootroot00000000000000/* * Copyright 2012 Julian Harnath * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "InterfaceSettingsView.h" #include "SettingsMessages.h" #include #include #include InterfaceSettingsView::InterfaceSettingsView(BRect frame) : BView(frame, "Interface", B_FOLLOW_NONE, B_WILL_DRAW), fFirstAttach(true) { SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); BRect rect = frame; rect.bottom = rect.top + 20; fSwitchCommandControlCheckBox = new BCheckBox(rect, "SwitchCommandControl", "Swap control / command key for keyboard shortcuts", new BMessage(kMsg_SwitchCommandControlToggled)); AddChild(fSwitchCommandControlCheckBox); rect.OffsetBy(0, 30); fChangeFullscreenResolutionCheckBox = new BCheckBox(rect, "ChangeFullscreenResolution", "Change screen resolution in fullscreen modes", new BMessage(kMsg_ChangeFullscreenResolutionToggled)); AddChild(fChangeFullscreenResolutionCheckBox); rect.OffsetBy(0, 30); rect.bottom = rect.top + 20; BStringView* warningLabel = new BStringView(rect, "WarningLabel", "Warning: resolution change might lead to a screenmode"); AddChild(warningLabel); rect.OffsetBy(0, 20); warningLabel = new BStringView(rect, "WarningLabel", "your monitor can't handle. Use with caution!"); AddChild(warningLabel); } InterfaceSettingsView::~InterfaceSettingsView() { } void InterfaceSettingsView::AttachedToWindow() { if (fFirstAttach) { fSwitchCommandControlCheckBox->SetTarget(this); fChangeFullscreenResolutionCheckBox->SetTarget(this); fFirstAttach = false; } } void InterfaceSettingsView::MessageReceived(BMessage* message) { switch (message->what) { case kMsg_SwitchCommandControlToggled: message->AddBool("on", fSwitchCommandControlCheckBox->Value() > 0 ? true : false); be_app->PostMessage(message); break; case kMsg_ChangeFullscreenResolutionToggled: message->AddBool("on", fChangeFullscreenResolutionCheckBox->Value() > 0 ? true : false); be_app->PostMessage(message); break; default: BView::MessageReceived(message); break; } } void InterfaceSettingsView::AddSettings(BMessage* settings) { settings->AddBool("switch_command_control", fSwitchCommandControlCheckBox->Value() > 0 ? true : false); settings->AddBool("change_fullscreen_resolution", fChangeFullscreenResolutionCheckBox->Value() > 0 ? true : false); } void InterfaceSettingsView::SetSettings(BMessage* settings) { status_t status; bool switchCommandControl; status = settings->FindBool("switch_command_control", &switchCommandControl); if (status == B_OK) fSwitchCommandControlCheckBox->SetValue(switchCommandControl ? 1 : 0); bool changeFullscreenResolution; status = settings->FindBool("change_fullscreen_resolution", &changeFullscreenResolution); if (status == B_OK) { fChangeFullscreenResolutionCheckBox->SetValue( changeFullscreenResolution ? 1 : 0); } } MilkyTracker-1.02.00/src/tracker/haiku/MilkySettings/InterfaceSettingsView.h000066400000000000000000000025021324432207300270300ustar00rootroot00000000000000/* * Copyright 2012 Julian Harnath * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #ifndef __HAIKU_INTERFACESETTINGSVIEW_H__ #define __HAIKU_INTERFACESETTINGSVIEW_H__ #include class BCheckBox; class InterfaceSettingsView : public BView { public: InterfaceSettingsView(BRect frame); ~InterfaceSettingsView(); virtual void AttachedToWindow(); virtual void MessageReceived(BMessage* message); void AddSettings(BMessage* settings); void SetSettings(BMessage* settings); private: BCheckBox* fSwitchCommandControlCheckBox; BCheckBox* fChangeFullscreenResolutionCheckBox; bool fFirstAttach; }; #endif // __HAIKU_INTERFACESETTINGSVIEW_H__ MilkyTracker-1.02.00/src/tracker/haiku/MilkySettings/MidiSettingsView.cpp000066400000000000000000000236371324432207300263610ustar00rootroot00000000000000/* * Copyright 2012 Julian Harnath * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "MidiSettingsView.h" #include "SettingsMessages.h" #include #include #include #include #include #include #include #include #include #include #include #include struct MidiProducer { BMenuItem* menuItem; int32 id; }; enum { kStandardVelocityAmplify = 100 }; MidiSettingsView::MidiSettingsView(BRect frame) : BView(frame, "MIDI input", B_FOLLOW_NONE, B_WILL_DRAW), fMidiProducers(new BList()), fFirstAttach(true), fSelectedMidiProducer(NULL) { SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); BRect rect = frame; rect.bottom = rect.top + 20; const char* midiInputMenuLabel = "MIDI input:"; fMidiInputMenu = new BPopUpMenu(""); fMidiInputMenuField = new BMenuField(rect, "MidiInputMenuField", midiInputMenuLabel, fMidiInputMenu); fMidiInputMenuField->SetDivider(StringWidth(midiInputMenuLabel) + 10); AddChild(fMidiInputMenuField); const char* recordVelocityLabel = "Record velocity"; fRecordVelocityCheckBox = new BCheckBox( BRect(0, 0, StringWidth(recordVelocityLabel) + 30, 20), "RecordVelocity", recordVelocityLabel, new BMessage(kMsg_MidiRecordVelocityToggled)); fRecordVelocityCheckBox->SetValue(0); rect.right = frame.right - 10; rect.OffsetBy(0, 40); rect.bottom = rect.top + 100; BBox* velocityBox = new BBox(rect, "VelocityBox"); velocityBox->SetLabel(fRecordVelocityCheckBox); rect = velocityBox->Bounds(); rect.OffsetBy(0, 15); rect.InsetBy(10, 10); fVelocityAmplificationSlider = new BSlider(rect, "VelocityAmplification", "Velocity response", new BMessage(kMsg_MidiVelocityAmplificationChanged), -50, 50); fVelocityAmplificationSlider->SetLimitLabels("Soft", "Hard"); fVelocityAmplificationSlider->SetHashMarks(B_HASH_MARKS_BOTTOM); fVelocityAmplificationSlider->SetHashMarkCount(11); fVelocityAmplificationSlider->SetValue(100); rgb_color fillColor = {100, 100, 255}; rgb_color barColor = {255, 100, 100}; fVelocityAmplificationSlider->UseFillColor(true, &fillColor); fVelocityAmplificationSlider->SetBarColor(barColor); velocityBox->AddChild(fVelocityAmplificationSlider); AddChild(velocityBox); fVelocityAmplificationSlider->SetEnabled(false); fRecordVelocityCheckBox->SetEnabled(false); MidiProducer* producer = new MidiProducer; producer->id = -1; producer->menuItem = new BMenuItem("None", new BMessage(kMsg_MidiInputSelected)); fMidiInputMenu->AddItem(producer->menuItem); fMidiProducers->AddItem(producer); fSelectedMidiProducer = producer; int32 id = 0; BMidiProducer* midiProducer = BMidiRoster::NextProducer(&id); while (midiProducer != NULL) { MidiProducer* producer = new MidiProducer; producer->id = midiProducer->ID(); producer->menuItem = new BMenuItem(midiProducer->Name(), new BMessage(kMsg_MidiInputSelected)); fMidiInputMenu->AddItem(producer->menuItem); fMidiProducers->AddItem(producer); midiProducer->Release(); midiProducer = BMidiRoster::NextProducer(&id); } } MidiSettingsView::~MidiSettingsView() { BMidiRoster::StopWatching(); MidiProducer* producer = NULL; for (int32 index = 0 ; ; index++) { producer = (MidiProducer*)fMidiProducers->ItemAt(index); if (producer == NULL) break; delete producer; } delete fMidiProducers; } void MidiSettingsView::AttachedToWindow() { // This hook is called every time the user switches to the MIDI tab, // but we want to do this init work only once if (fFirstAttach) { BAutolock _(fMidiProducersLock); MidiProducer* producer = NULL; for (int32 index = 0 ; ; index++) { producer = (MidiProducer*)fMidiProducers->ItemAt(index); if (producer == NULL) break; producer->menuItem->SetTarget(this); } fRecordVelocityCheckBox->SetTarget(this); fVelocityAmplificationSlider->SetTarget(this); // Not a bug, BMidiRoster creates a copy of the messenger BMessenger messenger(this); BMidiRoster::StartWatching(&messenger); fFirstAttach = false; } fSelectedMidiProducer->menuItem->SetMarked(true); } void MidiSettingsView::MessageReceived(BMessage* message) { switch (message->what) { case B_MIDI_EVENT: _HandleMidiEvent(message); break; case kMsg_MidiInputSelected: { BMenuItem* markedItem = fMidiInputMenu->FindMarked(); fSelectedMidiProducer = NULL; BAutolock _(fMidiProducersLock); MidiProducer* producer = _FindMidiProducer(markedItem); fSelectedMidiProducer = producer; if (fSelectedMidiProducer == NULL) debugger("Menu item selected, but could not be found in list"); _SetVelocityBoxEnabled(fSelectedMidiProducer->id != -1); message->AddInt32("id", fSelectedMidiProducer->id); be_app->PostMessage(message); } break; case kMsg_MidiRecordVelocityToggled: { bool on = fRecordVelocityCheckBox->Value() > 0 ? true : false; fVelocityAmplificationSlider->SetEnabled(on); message->AddBool("on", on); be_app->PostMessage(message); } break; case kMsg_MidiVelocityAmplificationChanged: message->AddInt32("value", kStandardVelocityAmplify - fVelocityAmplificationSlider->Value()); be_app->PostMessage(message); break; default: BView::MessageReceived(message); break; } } void MidiSettingsView::AddSettings(BMessage* settings) { BMenuItem* markedItem = fMidiInputMenu->FindMarked(); if (fSelectedMidiProducer->id != -1) settings->AddString("midi_input", fSelectedMidiProducer->menuItem->Label()); settings->AddBool("record_velocity", fRecordVelocityCheckBox->Value() > 0); settings->AddInt16("velocity_amplify", kStandardVelocityAmplify - fVelocityAmplificationSlider->Value()); } void MidiSettingsView::SetSettings(BMessage* settings) { status_t status; bool recordVelocity; status = settings->FindBool("record_velocity", &recordVelocity); if (status == B_OK) fRecordVelocityCheckBox->SetValue(recordVelocity ? 1 : 0); int16 velocityAmplify; status = settings->FindInt16("velocity_amplify", &velocityAmplify); if (status == B_OK) { fVelocityAmplificationSlider->SetValue( kStandardVelocityAmplify - velocityAmplify); } BString midiInputName; status = settings->FindString("midi_input", &midiInputName); if (status == B_OK) { BAutolock _(fMidiProducersLock); MidiProducer* producer = _FindMidiProducer(midiInputName); if (producer != NULL && producer->id != -1) { fSelectedMidiProducer = producer; producer->menuItem->SetMarked(true); _SetVelocityBoxEnabled(true); } } } void MidiSettingsView::_HandleMidiEvent(BMessage* message) { int32 op = message->FindInt32("be:op"); if ( op != B_MIDI_REGISTERED && op != B_MIDI_UNREGISTERED && op != B_MIDI_CHANGED_NAME) return; // We only care about MIDI producers BString type; message->FindString("be:type", &type); if (type != "producer") return; int32 id = message->FindInt32("be:id"); BAutolock _(fMidiProducersLock); MidiProducer* producer = _FindMidiProducer(id); // For register and name change, find the BMidiProducer BMidiProducer* midiProducer = NULL; if (op == B_MIDI_REGISTERED || op == B_MIDI_CHANGED_NAME) { midiProducer = BMidiRoster::FindProducer(id); if (midiProducer == NULL) return; } switch (op) { case B_MIDI_REGISTERED: if (producer != NULL) { midiProducer->Release(); return; // producer already in lsit } producer = new MidiProducer; producer->id = id; producer->menuItem = new BMenuItem(midiProducer->Name(), new BMessage(kMsg_MidiInputSelected)); producer->menuItem->SetTarget(this); fMidiProducers->AddItem(producer); fMidiInputMenu->AddItem(producer->menuItem); midiProducer->Release(); break; case B_MIDI_UNREGISTERED: if (producer == fSelectedMidiProducer) { MidiProducer* producerNone = (MidiProducer*)fMidiProducers->FirstItem(); producerNone->menuItem->SetMarked(true); fSelectedMidiProducer = producerNone; } fMidiInputMenu->RemoveItem(producer->menuItem); delete producer->menuItem; fMidiProducers->RemoveItem(producer); delete producer; break; case B_MIDI_CHANGED_NAME: producer->menuItem->SetLabel(midiProducer->Name()); midiProducer->Release(); break; } } void MidiSettingsView::_SetVelocityBoxEnabled(bool enable) { fRecordVelocityCheckBox->SetEnabled(enable); if (enable) fVelocityAmplificationSlider->SetEnabled( fRecordVelocityCheckBox->Value() > 0 ? true : false); else fVelocityAmplificationSlider->SetEnabled(false); } MidiProducer* MidiSettingsView::_FindMidiProducer(int32 id) { MidiProducer* producer = NULL; for (int32 index = 0 ; ; index++) { producer = (MidiProducer*)fMidiProducers->ItemAt(index); if (producer == NULL) break; if (producer->id == id) break; } return producer; } MidiProducer* MidiSettingsView::_FindMidiProducer(BMenuItem* menuItem) { MidiProducer* producer = NULL; for (int32 index = 0 ; ; index++) { producer = (MidiProducer*)fMidiProducers->ItemAt(index); if (producer == NULL) break; if (producer->menuItem == menuItem) break; } return producer; } MidiProducer* MidiSettingsView::_FindMidiProducer(BString name) { MidiProducer* producer = NULL; for (int32 index = 0 ; ; index++) { producer = (MidiProducer*)fMidiProducers->ItemAt(index); if (producer == NULL) break; if (name == producer->menuItem->Label()) break; } return producer; } MilkyTracker-1.02.00/src/tracker/haiku/MilkySettings/MidiSettingsView.h000066400000000000000000000035231324432207300260160ustar00rootroot00000000000000/* * Copyright 2012 Julian Harnath * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #ifndef __HAIKU_MIDISETTINGSVIEW_H__ #define __HAIKU_MIDISETTINGSVIEW_H__ #include #include #include class BCheckBox; class BList; class BMenuField; class BMenuItem; class BPopUpMenu; class BSlider; struct MidiProducer; class MidiSettingsView : public BView { public: MidiSettingsView(BRect frame); ~MidiSettingsView(); virtual void AttachedToWindow(); virtual void MessageReceived(BMessage* message); void AddSettings(BMessage* settings); void SetSettings(BMessage* settings); private: void _HandleMidiEvent(BMessage* message); void _SetVelocityBoxEnabled(bool enable); MidiProducer* _FindMidiProducer(int32 id); MidiProducer* _FindMidiProducer(BMenuItem* item); MidiProducer* _FindMidiProducer(BString name); BCheckBox* fRecordVelocityCheckBox; BSlider* fVelocityAmplificationSlider; BPopUpMenu* fMidiInputMenu; BMenuField* fMidiInputMenuField; BList* fMidiProducers; BLocker fMidiProducersLock; MidiProducer* fSelectedMidiProducer; bool fFirstAttach; }; #endif // __HAIKU_INTERFACESETTINGSVIEW_H__ MilkyTracker-1.02.00/src/tracker/haiku/MilkySettings/MilkySettingsApplication.cpp000066400000000000000000000072501324432207300301060ustar00rootroot00000000000000/* * Copyright 2012 Julian Harnath * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "MilkySettingsApplication.h" #include "SettingsMessages.h" #include "SettingsWindow.h" #include #include #include #include #include #include #include #include const char* kMilkyTrackerSignature = "application/x-vnd.Milky-MilkyTracker"; MilkySettingsApplication::MilkySettingsApplication() : BApplication("application/x-vnd.Milky-MilkySettings") { fSettingsWindow = new SettingsWindow(); fSettingsWindow->Show(); // Try to open settings file BFile* settingsFile = _OpenSettingsFile(B_READ_ONLY); if (settingsFile != NULL) { BMessage settings; status_t status = settings.Unflatten(settingsFile); delete settingsFile; if (status == B_OK) { // Apply settings fSettingsWindow->LockLooper(); fSettingsWindow->SetSettings(&settings); fSettingsWindow->UnlockLooper(); } } fMilkyTrackerMessenger = new BMessenger(kMilkyTrackerSignature); be_roster->StartWatching(BMessenger(this), B_REQUEST_LAUNCHED); } MilkySettingsApplication::~MilkySettingsApplication() { delete fMilkyTrackerMessenger; } void MilkySettingsApplication::MessageReceived(BMessage* message) { switch (message->what) { case B_SOME_APP_LAUNCHED: { // Watch out for launches of MilkyTracker BString signature; message->FindString("be:signature", &signature); if (signature == kMilkyTrackerSignature) { BMessenger* newMessenger = new BMessenger(kMilkyTrackerSignature); // Swap pointers to make sure that fMilkyTrackerMessenger // points to an existing messenger instance at all times BMessenger* oldMessenger = fMilkyTrackerMessenger; fMilkyTrackerMessenger = newMessenger; delete oldMessenger; } } break; case kMsg_SwitchCommandControlToggled: case kMsg_ChangeFullscreenResolutionToggled: case kMsg_MidiInputSelected: case kMsg_MidiRecordVelocityToggled: case kMsg_MidiVelocityAmplificationChanged: { // Forward to MilkyTracker if it's running if (fMilkyTrackerMessenger->IsValid()) fMilkyTrackerMessenger->SendMessage(message); // Save to settings file BFile* settingsFile = _OpenSettingsFile(B_WRITE_ONLY | B_CREATE_FILE | B_ERASE_FILE); if (settingsFile != NULL) { BMessage* settings = fSettingsWindow->GetSettings(); settings->Flatten(settingsFile); delete settings; delete settingsFile; } } break; default: BApplication::MessageReceived(message); break; } } BFile* MilkySettingsApplication::_OpenSettingsFile(uint32 openMode) { BPath path; find_directory(B_USER_SETTINGS_DIRECTORY, &path); path.Append("MilkyTracker"); BEntry dirEntry(path.Path()); if (!dirEntry.Exists()) { // MilkyTracker settings dir doesn't exist, create it BDirectory temp; temp.CreateDirectory(path.Path(), NULL); } path.Append("platform_settings"); BFile* file = new BFile(path.Path(), openMode); if (file->InitCheck() != B_OK) { delete file; return NULL; } return file; } MilkyTracker-1.02.00/src/tracker/haiku/MilkySettings/MilkySettingsApplication.h000066400000000000000000000024111324432207300275450ustar00rootroot00000000000000/* * Copyright 2012 Julian Harnath * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #ifndef __HAIKU_MILKYSETTINGSAPPLICATION_H__ #define __HAIKU_MILKYSETTINGSAPPLICATION_H__ #include class BFile; class BMessenger; class SettingsWindow; class MilkySettingsApplication : public BApplication { public: MilkySettingsApplication(); virtual ~MilkySettingsApplication(); virtual void MessageReceived(BMessage* message); private: BFile* _OpenSettingsFile(uint32 openMode); SettingsWindow* fSettingsWindow; BMessenger* fMilkyTrackerMessenger; }; #endif // __HAIKU_MILKYSETTINGSAPPLICATION_H__ MilkyTracker-1.02.00/src/tracker/haiku/MilkySettings/SettingsMessages.h000066400000000000000000000021621324432207300260460ustar00rootroot00000000000000/* * Copyright 2012 Julian Harnath * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #ifndef __HAIKU_MESSAGES_H__ #define __HAIKU_MESSAGES_H__ enum { // Interface settings kMsg_SwitchCommandControlToggled = 'scct', kMsg_ChangeFullscreenResolutionToggled = 'cfrt', // MIDI settings kMsg_MidiInputSelected = 'miis', kMsg_MidiRecordVelocityToggled = 'rvet', kMsg_MidiVelocityAmplificationChanged = 'veac' }; #endif // __HAIKU_MESSAGES_H__ MilkyTracker-1.02.00/src/tracker/haiku/MilkySettings/SettingsWindow.cpp000066400000000000000000000037501324432207300261050ustar00rootroot00000000000000/* * Copyright 2012 Julian Harnath * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "SettingsWindow.h" #include "InterfaceSettingsView.h" #include "MidiSettingsView.h" #include #include SettingsWindow::SettingsWindow() : BWindow(BRect(100, 100, 500, 300), "MilkyTracker settings", B_TITLED_WINDOW, B_NOT_ZOOMABLE | B_NOT_RESIZABLE) { BTabView* tabView = new BTabView(Bounds(), "TabView"); BRect tabRect = tabView->ContainerView()->Bounds(); tabRect.InsetBy(5, 5); fInterfaceSettingsView = new InterfaceSettingsView(tabRect); fMidiSettingsView = new MidiSettingsView(tabRect); tabView->AddTab(fInterfaceSettingsView); tabView->AddTab(fMidiSettingsView); AddChild(tabView); } SettingsWindow::~SettingsWindow() { } void SettingsWindow::MessageReceived(BMessage* message) { switch (message->what) { default: BWindow::MessageReceived(message); break; } } bool SettingsWindow::QuitRequested() { be_app->PostMessage(B_QUIT_REQUESTED); return true; } BMessage* SettingsWindow::GetSettings() { BMessage* settings = new BMessage(); fInterfaceSettingsView->AddSettings(settings); fMidiSettingsView->AddSettings(settings); return settings; } void SettingsWindow::SetSettings(BMessage* settings) { fInterfaceSettingsView->SetSettings(settings); fMidiSettingsView->SetSettings(settings); } MilkyTracker-1.02.00/src/tracker/haiku/MilkySettings/SettingsWindow.h000066400000000000000000000024161324432207300255500ustar00rootroot00000000000000/* * Copyright 2012 Julian Harnath * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #ifndef __HAIKU_SETTINGSWINDOW_H__ #define __HAIKU_SETTINGSWINDOW_H__ #include class InterfaceSettingsView; class MidiSettingsView; class SettingsWindow : public BWindow { public: SettingsWindow(); virtual ~SettingsWindow(); virtual void MessageReceived(BMessage* message); virtual bool QuitRequested(); BMessage* GetSettings(); void SetSettings(BMessage* settings); private: InterfaceSettingsView* fInterfaceSettingsView; MidiSettingsView* fMidiSettingsView; }; #endif // __HAIKU_SETTINGSWINDOW_H__ MilkyTracker-1.02.00/src/tracker/haiku/MilkySettings/main.cpp000066400000000000000000000016721324432207300240420ustar00rootroot00000000000000/* * Copyright 2012 Julian Harnath * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "MilkySettingsApplication.h" int main() { MilkySettingsApplication* settingsApplication = new MilkySettingsApplication(); settingsApplication->Run(); delete settingsApplication; return 0; } MilkyTracker-1.02.00/src/tracker/haiku/MilkyTracker.rdef000066400000000000000000000042261324432207300230450ustar00rootroot00000000000000resource app_signature "application/x-vnd.Milky-MilkyTracker"; resource app_flags B_MULTIPLE_LAUNCH; resource app_version { major = 0, middle = 90, minor = 85, variety = B_APPV_DEVELOPMENT, internal = 0, short_info = "MilkyTracker", long_info = "MilkyTracker" }; resource file_types message { "types" = "audio/x-669", "types" = "audio/x-amf", "types" = "audio/x-ams", "types" = "audio/x-cba", "types" = "audio/x-dbm", "types" = "audio/x-digi", "types" = "audio/x-dsm", "types" = "audio/x-dtm", "types" = "audio/x-far", "types" = "audio/x-gdm", "types" = "audio/x-gmc", "types" = "audio/x-imf", "types" = "audio/x-it", "types" = "audio/x-mdl", "types" = "audio/x-mod", "types" = "audio/x-mtm", "types" = "audio/x-mxm", "types" = "audio/x-okt", "types" = "audio/x-plm", "types" = "audio/x-psm", "types" = "audio/x-ptm", "types" = "audio/x-s3m", "types" = "audio/x-sfx", "types" = "audio/x-stm", "types" = "audio/x-ult", "types" = "audio/x-uni", "types" = "audio/x-xm" }; /* Vector icon created by PulkoMandy */ resource vector_icon { $"6E63696609050004017402000602B772D83D38A6BD97CCB7D8B64A71894A689C" $"00D4F5F5FF46D3EC0200060238E9203CA6E8BD037C394EBB4B224D4A495A0013" $"9FB8FF048AA202000602BA5D113612D8B936AEBDA9B54AFE784B9845000FA6C2" $"FF0B778A0200060234E5DA38ADBFBB9EB437EA864AFEE34B2C5E000499B4FF22" $"BAD502000202B504C13BBEB1BD9B53B6E83E4A1A204B5E8900FBFFC083FF00A7" $"FFC902000202B5818638F95EBD4FAAB9E7414A06ED4A930F00FFDAC0D4FFFFAF" $"89FF0117007FED0C0608B6A626325131572B54375A405E4E5031442A2E240606" $"FE0F40604A604A60C45760C66D5DC553CC0B555D5B565F57CC59C694584C5C4A" $"5649504A5348504A0605B60126345131572B54375A405E3B0A162952264C2647" $"2A522C52263F263328BAC52E5330542E363538335635573C3A403B404438583A" $"59404E40553B5B0A04405E44544536403B0A0444544E504E3145360A03405E44" $"544E500204323F3740B82D3E2A422A3F2A45324AB822C30E384C3C473C4B3C43" $"0A0E283A284A2C4C2C403042304C344E3442384438503C523C44384238400804" $"403C4E30442A403C08042634403C442A2E240808424642404E364E3C4A404A4C" $"465046420A0A010101000A0001001001178400040A0202020A000A060103081F" $"FF0A0201071001178400040A0701070813FF0A030104000A04020509000A0501" $"06000A0802080B00" }; MilkyTracker-1.02.00/src/tracker/haiku/Tools.cpp000066400000000000000000000027501324432207300214060ustar00rootroot00000000000000/* * Copyright 2012 Julian Harnath * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "BasicTypes.h" #include "PPUI.h" #include #include extern bool gSwapCommandControl; pp_uint32 PPGetTickCount() { return (system_time() / 1000); } void QueryKeyModifiers() { uint32 modifiersState = modifiers(); if (modifiersState & B_SHIFT_KEY) setKeyModifier(KeyModifierSHIFT); else clearKeyModifier(KeyModifierSHIFT); int32 commandModifier = gSwapCommandControl ? B_CONTROL_KEY : B_COMMAND_KEY; int32 controlModifier = gSwapCommandControl ? B_COMMAND_KEY : B_CONTROL_KEY; if (modifiersState & commandModifier) setKeyModifier(KeyModifierALT); else clearKeyModifier(KeyModifierALT); if (modifiersState & controlModifier) setKeyModifier(KeyModifierCTRL); else clearKeyModifier(KeyModifierCTRL); } MilkyTracker-1.02.00/src/tracker/sdl/000077500000000000000000000000001324432207300172575ustar00rootroot00000000000000MilkyTracker-1.02.00/src/tracker/sdl/SDL_KeyTranslation.cpp000066400000000000000000000165631324432207300234470ustar00rootroot00000000000000/* * tracker/sdl/SDL_KeyTranslation.cpp * * Copyright 2009 Peter Barth, Christopher O'Neill, Dale Whinham * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * KeyTranslation.cpp * MilkyTracker * * Created by Peter Barth on 19.11.05. * * 12/5/14 - Dale Whinham * - Port to SDL2 * - Many new SDL2 scancodes added - keyboard shortcuts need thorough testing * - OSX: Command now acts as CTRL (e.g. more native-style Command-C, Command-V copy and paste in MilkyTracker edit mode) * - Attempted to fix mapping of RAlt/RCtrl (RCommand on OSX) for the FTII-style song play/pattern play shortcuts * - CapsLock now acts as noteoff-insert as per MilkyTracker manual * * 14/8/06 - Christopher O'Neill * - PC specific code added to toSC - allows none qwerty layouts to work * - Small fix in toSC * - Various keys added to toVK - rewritten to use array instead of select */ #include "SDL_KeyTranslation.h" pp_uint16 toVK(const SDL_Keysym& keysym) { switch (keysym.sym) { // Letters case SDLK_a: return 'A'; case SDLK_b: return 'B'; case SDLK_c: return 'C'; case SDLK_d: return 'D'; case SDLK_e: return 'E'; case SDLK_f: return 'F'; case SDLK_g: return 'G'; case SDLK_h: return 'H'; case SDLK_i: return 'I'; case SDLK_j: return 'J'; case SDLK_k: return 'K'; case SDLK_l: return 'L'; case SDLK_m: return 'M'; case SDLK_n: return 'N'; case SDLK_o: return 'O'; case SDLK_p: return 'P'; case SDLK_q: return 'Q'; case SDLK_r: return 'R'; case SDLK_s: return 'S'; case SDLK_t: return 'T'; case SDLK_u: return 'U'; case SDLK_v: return 'V'; case SDLK_w: return 'W'; case SDLK_x: return 'X'; case SDLK_y: return 'Y'; case SDLK_z: return 'Z'; // Numbers case SDLK_0: return '0'; case SDLK_1: return '1'; case SDLK_2: return '2'; case SDLK_3: return '3'; case SDLK_4: return '4'; case SDLK_5: return '5'; case SDLK_6: return '6'; case SDLK_7: return '7'; case SDLK_8: return '8'; case SDLK_9: return '9'; // Numeric keypad case SDLK_KP_0: return VK_NUMPAD0; case SDLK_KP_1: return VK_NUMPAD1; case SDLK_KP_2: return VK_NUMPAD2; case SDLK_KP_3: return VK_NUMPAD3; case SDLK_KP_4: return VK_NUMPAD4; case SDLK_KP_5: return VK_NUMPAD5; case SDLK_KP_6: return VK_NUMPAD6; case SDLK_KP_7: return VK_NUMPAD7; case SDLK_KP_8: return VK_NUMPAD8; case SDLK_KP_9: return VK_NUMPAD9; case SDLK_KP_DIVIDE: return VK_DIVIDE; case SDLK_KP_MULTIPLY: return VK_MULTIPLY; case SDLK_KP_MINUS: return VK_SUBTRACT; case SDLK_KP_PLUS: return VK_ADD; case SDLK_KP_ENTER: return VK_SEPARATOR; case SDLK_KP_PERIOD: return VK_DECIMAL; // Modifier keys case SDLK_LALT: return VK_ALT; case SDLK_RALT: return VK_RMENU; // RAlt for 'play current pattern from beginning' in FastTracker II mode case SDLK_LSHIFT: return VK_SHIFT; case SDLK_RSHIFT: return VK_SHIFT; #ifdef __APPLE__ case SDLK_LGUI: return VK_LCONTROL; // OSX: LCommand = LCtrl for native-style Cut/Copy/Paste etc in MilkyTracker edit mode case SDLK_RGUI: return VK_RCONTROL; // OSX: RCommand = RCtrl for 'play song from current order' in FastTracker II edit mode #else case SDLK_LCTRL: return VK_LCONTROL; case SDLK_RCTRL: return VK_RCONTROL; #endif case SDLK_MODE: return VK_RMENU; case SDLK_CAPSLOCK: return VK_CAPITAL; // Other non-character keys case SDLK_RETURN: return VK_RETURN; case SDLK_TAB: return VK_TAB; case SDLK_SPACE: return VK_SPACE; case SDLK_ESCAPE: return VK_ESCAPE; case SDLK_INSERT: return VK_INSERT; case SDLK_DELETE: return VK_DELETE; case SDLK_BACKSPACE: return VK_BACK; case SDLK_LEFT: return VK_LEFT; case SDLK_RIGHT: return VK_RIGHT; case SDLK_DOWN: return VK_DOWN; case SDLK_UP: return VK_UP; case SDLK_PAGEUP: return VK_PRIOR; case SDLK_PAGEDOWN: return VK_NEXT; case SDLK_HOME: return VK_HOME; case SDLK_END: return VK_END; // Function keys case SDLK_F1: return VK_F1; case SDLK_F2: return VK_F2; case SDLK_F3: return VK_F3; case SDLK_F4: return VK_F4; case SDLK_F5: return VK_F5; case SDLK_F6: return VK_F6; case SDLK_F7: return VK_F7; case SDLK_F8: return VK_F8; case SDLK_F9: return VK_F9; case SDLK_F10: return VK_F10; case SDLK_F11: return VK_F11; case SDLK_F12: return VK_F12; // TODO: Check if the following are required and remove if unused case SDLK_CARET: return 0xC0; case SDLK_PLUS: return 0xDD; case SDLK_HASH: return 0xDC; case SDLK_COMMA: return 0xBC; case SDLK_PERIOD: return 0xBF; case SDLK_MINUS: return 0xBE; case SDLK_LESS: return 0xE2; default: return 0; } } pp_uint16 toSC(const SDL_Keysym& keysym) { switch (keysym.scancode) { // Letters case SDL_SCANCODE_A: return SC_A; case SDL_SCANCODE_B: return SC_B; case SDL_SCANCODE_C: return SC_C; case SDL_SCANCODE_D: return SC_D; case SDL_SCANCODE_E: return SC_E; case SDL_SCANCODE_F: return SC_F; case SDL_SCANCODE_G: return SC_G; case SDL_SCANCODE_H: return SC_H; case SDL_SCANCODE_I: return SC_I; case SDL_SCANCODE_J: return SC_J; case SDL_SCANCODE_K: return SC_K; case SDL_SCANCODE_L: return SC_L; case SDL_SCANCODE_M: return SC_M; case SDL_SCANCODE_N: return SC_N; case SDL_SCANCODE_O: return SC_O; case SDL_SCANCODE_P: return SC_P; case SDL_SCANCODE_Q: return SC_Q; case SDL_SCANCODE_R: return SC_R; case SDL_SCANCODE_S: return SC_S; case SDL_SCANCODE_T: return SC_T; case SDL_SCANCODE_U: return SC_U; case SDL_SCANCODE_V: return SC_V; case SDL_SCANCODE_W: return SC_W; case SDL_SCANCODE_X: return SC_X; case SDL_SCANCODE_Y: return SC_Z; // MilkyTracker scancodes are based on German case SDL_SCANCODE_Z: return SC_Y; // keyboard layout; so Y <-> Z swap is correct here. // Numbers case SDL_SCANCODE_0: return SC_0; case SDL_SCANCODE_1: return SC_1; case SDL_SCANCODE_2: return SC_2; case SDL_SCANCODE_3: return SC_3; case SDL_SCANCODE_4: return SC_4; case SDL_SCANCODE_5: return SC_5; case SDL_SCANCODE_6: return SC_6; case SDL_SCANCODE_7: return SC_7; case SDL_SCANCODE_8: return SC_8; case SDL_SCANCODE_9: return SC_9; // Special characters case SDL_SCANCODE_MINUS: return SC_SS; case SDL_SCANCODE_EQUALS: return SC_TICK; case SDL_SCANCODE_LEFTBRACKET: return SC_UE; case SDL_SCANCODE_RIGHTBRACKET: return SC_PLUS; case SDL_SCANCODE_SEMICOLON: return SC_OE; case SDL_SCANCODE_APOSTROPHE: return SC_AE; case SDL_SCANCODE_BACKSLASH: return SC_SHARP; case SDL_SCANCODE_NONUSBACKSLASH: return SC_SMALLERGREATER; case SDL_SCANCODE_COMMA: return SC_COMMA; case SDL_SCANCODE_PERIOD: return SC_PERIOD; case SDL_SCANCODE_SLASH: return SC_MINUS; case SDL_SCANCODE_GRAVE: return SC_WTF; // WTF is actually a Section sign // Modifiers case SDL_SCANCODE_CAPSLOCK: return SC_CAPSLOCK; default: return 0; } } MilkyTracker-1.02.00/src/tracker/sdl/SDL_KeyTranslation.h000066400000000000000000000021311324432207300230760ustar00rootroot00000000000000/* * tracker/sdl/SDL_KeyTranslation.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * KeyTranslation.h * MilkyTracker * * Created by Peter Barth on 19.11.05. * * 12/5/14 - Dale Whinham * - Port to SDL2 * */ #ifndef KEYTRANSLATION__H #define KEYTRANSLATION__H #include #include "BasicTypes.h" pp_uint16 toVK(const SDL_Keysym& keysym); pp_uint16 toSC(const SDL_Keysym& keysym); #endif MilkyTracker-1.02.00/src/tracker/sdl/SDL_Main.cpp000066400000000000000000000577711324432207300213720ustar00rootroot00000000000000/* * tracker/sdl/SDL_Main.cpp * * Copyright 2009 Peter Barth, Christopher O'Neill, Dale Whinham * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ /* * SDL_Main.cpp * MilkyTracker SDL front end * * Created by Peter Barth on 19.11.05. * * 12/5/14 - Dale Whinham * - Port to SDL2 * - Removed SDLMain.m for Mac - no longer required * - OSX: '-psn_xxx' commandline argument ignored if Finder passes it to the executable * - Removed GP2X-specific stuff; I don't think SDL2 is available for this platform yet * - Added X-Y mousewheel support - other MilkyTracker files have changed to support this * * TODO: - Further cleanups - can we remove QTopia too? * - Do we need that EEEPC segfault fix still with SDL2? * - Look at the OpenGL stuff * * 15/2/08 - Peter Barth * This code needs major clean up, there are too many workarounds going on * for different platforms/configurations (MIDI, GP2X etc.) * Please do not further pollute this single source code when possible * * 14/8/06 - Christopher O'Neill * Ok, there are so many changes in this file that I've lost track... * Here are some I remember: * - ALSA Midi Support * - GP2X mouse emulator (awaiting a rewrite one day..) * - Various command line options * - Fix for french azerty keyboards (their number keys are shifted) * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include #include #include #include #include #include #include "SDL_KeyTranslation.h" // ---------------------------- Tracker includes ---------------------------- #include "PPUI.h" #include "DisplayDevice_SDL.h" #include "DisplayDeviceFB_SDL.h" #include "Screen.h" #include "Tracker.h" #include "PPMutex.h" #include "PPSystem_POSIX.h" #include "PPPath_POSIX.h" #ifdef HAVE_LIBASOUND #include "../midi/posix/MidiReceiver_pthread.h" #endif // -------------------------------------------------------------------------- static SDL_TimerID timer; // Tracker globals static PPScreen* myTrackerScreen = NULL; static Tracker* myTracker = NULL; static PPDisplayDevice* myDisplayDevice = NULL; #ifdef HAVE_LIBASOUND static MidiReceiver* myMidiReceiver = NULL; #endif // Okay what else do we need? PPMutex* globalMutex = NULL; static bool ticking = false; struct MouseState { pp_uint32 myTime; PPPoint lastClickPosition; pp_uint16 clickCount; bool mouseDown; pp_uint32 buttonDownStartTime; }; static MouseState mouseLeft = { 0, PPPoint(0,0), 0, false, 0 }; static MouseState mouseRight = { 0, PPPoint(0,0), 0, false, 0 }; static MouseState mouseMiddle = { 0, PPPoint(0,0), 0, false, 0 }; static pp_uint32 timerTicker = 0; static PPPoint p; // This needs to be visible from outside pp_uint32 PPGetTickCount() { return SDL_GetTicks(); } // Same as above void QueryKeyModifiers() { pp_uint32 mod = SDL_GetModState(); if((mod & KMOD_LSHIFT) || (mod & KMOD_RSHIFT)) setKeyModifier(KeyModifierSHIFT); else clearKeyModifier(KeyModifierSHIFT); #ifndef __APPLE__ if((mod & KMOD_LCTRL) || (mod & KMOD_RCTRL)) #else if((mod & KMOD_LGUI) || (mod & KMOD_RGUI)) #endif setKeyModifier(KeyModifierCTRL); else clearKeyModifier(KeyModifierCTRL); if((mod & KMOD_LALT) || (mod & KMOD_RALT)) setKeyModifier(KeyModifierALT); else clearKeyModifier(KeyModifierALT); } static void RaiseEventSerialized(PPEvent* event) { if (myTrackerScreen && myTracker) { globalMutex->lock(); myTrackerScreen->raiseEvent(event); globalMutex->unlock(); } } enum SDLUserEvents { SDLUserEventTimer, SDLUserEventLMouseRepeat, SDLUserEventRMouseRepeat, SDLUserEventMMouseRepeat, SDLUserEventMidiKeyDown, SDLUserEventMidiKeyUp, }; static SDLCALL Uint32 timerCallback(Uint32 interval, void* param) { if (!myTrackerScreen || !myTracker || !ticking) { return interval; } SDL_UserEvent ev; ev.type = SDL_USEREVENT; if (!(timerTicker % 1)) { ev.code = SDLUserEventTimer; SDL_PushEvent((SDL_Event*)&ev); //PPEvent myEvent(eTimer); //RaiseEventSerialized(&myEvent); } timerTicker++; if (mouseLeft.mouseDown && (timerTicker - mouseLeft.buttonDownStartTime) > 25) { ev.code = SDLUserEventLMouseRepeat; ev.data1 = reinterpret_cast(p.x); ev.data2 = reinterpret_cast(p.y); SDL_PushEvent((SDL_Event*)&ev); //PPEvent myEvent(eLMouseRepeat, &p, sizeof(PPPoint)); //RaiseEventSerialized(&myEvent); } if (mouseRight.mouseDown && (timerTicker - mouseRight.buttonDownStartTime) > 25) { ev.code = SDLUserEventRMouseRepeat; ev.data1 = reinterpret_cast(p.x); ev.data2 = reinterpret_cast(p.y); SDL_PushEvent((SDL_Event*)&ev); //PPEvent myEvent(eRMouseRepeat, &p, sizeof(PPPoint)); //RaiseEventSerialized(&myEvent); } if (mouseMiddle.mouseDown && (timerTicker - mouseMiddle.buttonDownStartTime) > 25) { ev.code = SDLUserEventMMouseRepeat; ev.data1 = reinterpret_cast(p.x); ev.data2 = reinterpret_cast(p.y); SDL_PushEvent((SDL_Event*)&ev); //PPEvent myEvent(eRMouseRepeat, &p, sizeof(PPPoint)); //RaiseEventSerialized(&myEvent); } return interval; } #ifdef HAVE_LIBASOUND class MidiEventHandler : public MidiReceiver::MidiEventHandler { public: virtual void keyDown(int note, int volume) { SDL_UserEvent ev; ev.type = SDL_USEREVENT; ev.code = SDLUserEventMidiKeyDown; ev.data1 = (void*)note; ev.data2 = (void*)volume; SDL_PushEvent((SDL_Event*)&ev); //globalMutex->lock(); //myTracker->sendNoteDown(note, volume); //globalMutex->unlock(); } virtual void keyUp(int note) { SDL_UserEvent ev; ev.type = SDL_USEREVENT; ev.code = SDLUserEventMidiKeyUp; ev.data1 = (void*)note; SDL_PushEvent((SDL_Event*)&ev); //globalMutex->lock(); //myTracker->sendNoteUp(note); //globalMutex->unlock(); } } midiEventHandler; void StopMidiRecording() { if (myMidiReceiver) { myMidiReceiver->stopRecording(); } } void StartMidiRecording(unsigned int devID) { if (devID == (unsigned)-1) return; StopMidiRecording(); myMidiReceiver = new MidiReceiver(midiEventHandler); if (!myMidiReceiver->startRecording(devID)) { // Deal with error fprintf(stderr, "Failed to initialise ALSA MIDI support.\n"); } } void InitMidi() { StartMidiRecording(0); } #endif void translateMouseDownEvent(pp_int32 mouseButton, pp_int32 localMouseX, pp_int32 localMouseY) { if (mouseButton > 3 || !mouseButton) return; myDisplayDevice->transform(localMouseX, localMouseY); p.x = localMouseX; p.y = localMouseY; // ----------------------------- if (mouseButton == 1) { PPEvent myEvent(eLMouseDown, &p, sizeof(PPPoint)); RaiseEventSerialized(&myEvent); mouseLeft.mouseDown = true; mouseLeft.buttonDownStartTime = timerTicker; if (!mouseLeft.clickCount) { mouseLeft.myTime = PPGetTickCount(); mouseLeft.lastClickPosition.x = localMouseX; mouseLeft.lastClickPosition.y = localMouseY; } else if (mouseLeft.clickCount == 2) { pp_uint32 deltat = PPGetTickCount() - mouseLeft.myTime; if (deltat > 500) { mouseLeft.clickCount = 0; mouseLeft.myTime = PPGetTickCount(); mouseLeft.lastClickPosition.x = localMouseX; mouseLeft.lastClickPosition.y = localMouseY; } } mouseLeft.clickCount++; } else if (mouseButton == 2) { PPEvent myEvent(eMMouseDown, &p, sizeof(PPPoint)); RaiseEventSerialized(&myEvent); mouseMiddle.mouseDown = true; mouseMiddle.buttonDownStartTime = timerTicker; if (!mouseMiddle.clickCount) { mouseMiddle.myTime = PPGetTickCount(); mouseMiddle.lastClickPosition.x = localMouseX; mouseMiddle.lastClickPosition.y = localMouseY; } else if (mouseMiddle.clickCount == 2) { pp_uint32 deltat = PPGetTickCount() - mouseRight.myTime; if (deltat > 500) { mouseMiddle.clickCount = 0; mouseMiddle.myTime = PPGetTickCount(); mouseMiddle.lastClickPosition.x = localMouseX; mouseMiddle.lastClickPosition.y = localMouseY; } } mouseMiddle.clickCount++; } else if (mouseButton == 3) { PPEvent myEvent(eRMouseDown, &p, sizeof(PPPoint)); RaiseEventSerialized(&myEvent); mouseRight.mouseDown = true; mouseRight.buttonDownStartTime = timerTicker; if (!mouseRight.clickCount) { mouseRight.myTime = PPGetTickCount(); mouseRight.lastClickPosition.x = localMouseX; mouseRight.lastClickPosition.y = localMouseY; } else if (mouseRight.clickCount == 2) { pp_uint32 deltat = PPGetTickCount() - mouseRight.myTime; if (deltat > 500) { mouseRight.clickCount = 0; mouseRight.myTime = PPGetTickCount(); mouseRight.lastClickPosition.x = localMouseX; mouseRight.lastClickPosition.y = localMouseY; } } mouseRight.clickCount++; } } void translateMouseUpEvent(pp_int32 mouseButton, pp_int32 localMouseX, pp_int32 localMouseY) { if (mouseButton > 3 || !mouseButton) return; myDisplayDevice->transform(localMouseX, localMouseY); p.x = localMouseX; p.y = localMouseY; // ----------------------------- if (mouseButton == 1) { mouseLeft.clickCount++; if (mouseLeft.clickCount >= 4) { pp_uint32 deltat = PPGetTickCount() - mouseLeft.myTime; if (deltat < 500) { p.x = localMouseX; p.y = localMouseY; if (abs(p.x - mouseLeft.lastClickPosition.x) < 4 && abs(p.y - mouseLeft.lastClickPosition.y) < 4) { PPEvent myEvent(eLMouseDoubleClick, &p, sizeof(PPPoint)); RaiseEventSerialized(&myEvent); } } mouseLeft.clickCount = 0; } p.x = localMouseX; p.y = localMouseY; PPEvent myEvent(eLMouseUp, &p, sizeof(PPPoint)); RaiseEventSerialized(&myEvent); mouseLeft.mouseDown = false; } else if (mouseButton == 2) { mouseMiddle.clickCount++; if (mouseMiddle.clickCount >= 4) { pp_uint32 deltat = PPGetTickCount() - mouseMiddle.myTime; if (deltat < 500) { p.x = localMouseX; p.y = localMouseY; if (abs(p.x - mouseMiddle.lastClickPosition.x) < 4 && abs(p.y - mouseMiddle.lastClickPosition.y) < 4) { PPEvent myEvent(eMMouseDoubleClick, &p, sizeof(PPPoint)); RaiseEventSerialized(&myEvent); } } mouseMiddle.clickCount = 0; } p.x = localMouseX; p.y = localMouseY; PPEvent myEvent(eMMouseUp, &p, sizeof(PPPoint)); RaiseEventSerialized(&myEvent); mouseMiddle.mouseDown = false; } else if (mouseButton == 3) { mouseRight.clickCount++; if (mouseRight.clickCount >= 4) { pp_uint32 deltat = PPGetTickCount() - mouseRight.myTime; if (deltat < 500) { p.x = localMouseX; p.y = localMouseY; if (abs(p.x - mouseRight.lastClickPosition.x) < 4 && abs(p.y - mouseRight.lastClickPosition.y) < 4) { PPEvent myEvent(eRMouseDoubleClick, &p, sizeof(PPPoint)); RaiseEventSerialized(&myEvent); } } mouseRight.clickCount = 0; } p.x = localMouseX; p.y = localMouseY; PPEvent myEvent(eRMouseUp, &p, sizeof(PPPoint)); RaiseEventSerialized(&myEvent); mouseRight.mouseDown = false; } } void translateMouseWheelEvent(pp_int32 wheelX, pp_int32 wheelY) { TMouseWheelEventParams mouseWheelParams; // Deltas from wheel event mouseWheelParams.deltaX = wheelX; mouseWheelParams.deltaY = wheelY; // Use last stored coordinates mouseWheelParams.pos.x = p.x; mouseWheelParams.pos.y = p.y; PPEvent myEvent(eMouseWheelMoved, &mouseWheelParams, sizeof(mouseWheelParams)); RaiseEventSerialized(&myEvent); } void translateMouseMoveEvent(pp_uint32 mouseState, pp_int32 localMouseX, pp_int32 localMouseY) { myDisplayDevice->transform(localMouseX, localMouseY); p.x = localMouseX; p.y = localMouseY; if (mouseState == 0) { PPEvent myEvent(eMouseMoved, &p, sizeof(PPPoint)); RaiseEventSerialized(&myEvent); } else { if (mouseState & ~(SDL_BUTTON_LMASK | SDL_BUTTON_RMASK)) { return; } if (mouseState == SDL_BUTTON_LMASK && mouseLeft.mouseDown) { PPEvent myEvent(eLMouseDrag, &p, sizeof(PPPoint)); RaiseEventSerialized(&myEvent); } else if (mouseState == SDL_BUTTON_RMASK && mouseRight.mouseDown) { PPEvent myEvent(eRMouseDrag, &p, sizeof(PPPoint)); RaiseEventSerialized(&myEvent); } } } void preTranslateKey(SDL_Keysym& keysym) { // Rotate cursor keys if necessary switch (myDisplayDevice->getOrientation()) { case PPDisplayDevice::ORIENTATION_ROTATE90CW: switch (keysym.sym) { case SDLK_UP: keysym.sym = SDLK_LEFT; break; case SDLK_DOWN: keysym.sym = SDLK_RIGHT; break; case SDLK_LEFT: keysym.sym = SDLK_DOWN; break; case SDLK_RIGHT: keysym.sym = SDLK_UP; break; } break; case PPDisplayDevice::ORIENTATION_ROTATE90CCW: switch (keysym.sym) { case SDLK_DOWN: keysym.sym = SDLK_LEFT; break; case SDLK_UP: keysym.sym = SDLK_RIGHT; break; case SDLK_RIGHT: keysym.sym = SDLK_DOWN; break; case SDLK_LEFT: keysym.sym = SDLK_UP; break; } break; // ROTATE180 and UNKNOWN not handled default: break; } } void translateTextInputEvent(const SDL_Event& event) { #ifdef DEBUG printf ("DEBUG: Text input: %s\n", event.text.text); #endif char character = event.text.text[0]; // Only deal with ASCII characters if (character >= 32 && character <= 127) { PPEvent myEvent(eKeyChar, &character, sizeof(character)); RaiseEventSerialized(&myEvent); } } void translateKeyDownEvent(const SDL_Event& event) { SDL_Keysym keysym = event.key.keysym; // ALT+RETURN = Fullscreen toggle if (keysym.sym == SDLK_RETURN && (keysym.mod & KMOD_LALT)) { PPEvent myEvent(eFullScreen); RaiseEventSerialized(&myEvent); return; } preTranslateKey(keysym); #ifdef DEBUG printf ("DEBUG: Key pressed: VK: %d, SC: %d, Scancode: %d\n", toVK(keysym), toSC(keysym), keysym.sym); #endif pp_uint16 chr[3] = {toVK(keysym), toSC(keysym), keysym.sym}; PPEvent myEvent(eKeyDown, &chr, sizeof(chr)); RaiseEventSerialized(&myEvent); } void translateKeyUpEvent(const SDL_Event& event) { SDL_Keysym keysym = event.key.keysym; preTranslateKey(keysym); pp_uint16 chr[3] = {toVK(keysym), toSC(keysym), keysym.sym}; PPEvent myEvent(eKeyUp, &chr, sizeof(chr)); RaiseEventSerialized(&myEvent); } void processSDLEvents(const SDL_Event& event) { pp_uint32 mouseButton = 0; switch (event.type) { case SDL_MOUSEBUTTONDOWN: mouseButton = event.button.button; translateMouseDownEvent(mouseButton, event.button.x, event.button.y); break; case SDL_MOUSEBUTTONUP: mouseButton = event.button.button; translateMouseUpEvent(mouseButton, event.button.x, event.button.y); break; case SDL_MOUSEMOTION: translateMouseMoveEvent(event.motion.state, event.motion.x, event.motion.y); break; case SDL_MOUSEWHEEL: translateMouseWheelEvent(event.wheel.x, event.wheel.y); break; case SDL_TEXTINPUT: translateTextInputEvent(event); break; case SDL_KEYDOWN: translateKeyDownEvent(event); break; case SDL_KEYUP: translateKeyUpEvent(event); break; } } void processSDLUserEvents(const SDL_UserEvent& event) { union { void *ptr; pp_int32 i32; } data1, data2; data1.ptr = event.data1; data2.ptr = event.data2; switch (event.code) { case SDLUserEventTimer: { // Prevent new timer events being pushed while we are processing the current one ticking = false; PPEvent myEvent(eTimer); RaiseEventSerialized(&myEvent); ticking = true; break; } case SDLUserEventLMouseRepeat: { PPPoint p; p.x = data1.i32; p.y = data2.i32; PPEvent myEvent(eLMouseRepeat, &p, sizeof(PPPoint)); RaiseEventSerialized(&myEvent); break; } case SDLUserEventRMouseRepeat: { PPPoint p; p.x = data1.i32; p.y = data2.i32; PPEvent myEvent(eRMouseRepeat, &p, sizeof(PPPoint)); RaiseEventSerialized(&myEvent); break; } case SDLUserEventMidiKeyDown: { pp_int32 note = data1.i32; pp_int32 volume = data2.i32; globalMutex->lock(); myTracker->sendNoteDown(note, volume); globalMutex->unlock(); break; } case SDLUserEventMidiKeyUp: { pp_int32 note = data1.i32; globalMutex->lock(); myTracker->sendNoteUp(note); globalMutex->unlock(); break; } } } #ifdef __unix__ void crashHandler(int signum) { // Save backup.xm static char buffer[1024]; // Should be enough :p strncpy(buffer, getenv("HOME"), 1010); strcat(buffer, "/BACKUP00.XM"); struct stat statBuf; int num = 1; while(stat(buffer, &statBuf) == 0 && num <= 100) snprintf(buffer, sizeof(buffer), "%s/BACKUP%02i.XM", getenv("HOME"), num++); if (signum == 15) { fprintf(stderr, "\nTERM signal received.\n"); SDL_Quit(); return; } else { fprintf(stderr, "\nCrashed with signal %i\n" "Please submit a bug report stating exactly what you were doing " "at the time of the crash, as well as the above signal number. " "Also note if it is possible to reproduce this crash.\n", signum); } if (num != 100) { if (myTracker->saveModule(buffer) == MP_DEVICE_ERROR) { fprintf(stderr, "\nUnable to save backup (read-only filesystem?)\n\n"); } else { fprintf(stderr, "\nA backup has been saved to %s\n\n", buffer); } } // Try and quit SDL SDL_Quit(); } #endif void initTracker(pp_uint32 bpp, PPDisplayDevice::Orientations orientation, bool swapRedBlue, bool noSplash) { // Initialize SDL if ( SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER) < 0 ) { fprintf(stderr, "Couldn't initialize SDL: %s\n",SDL_GetError()); exit(EXIT_FAILURE); } // Enable drag and drop SDL_EventState(SDL_DROPFILE, SDL_ENABLE); #if (defined(unix) || defined(__unix__) || defined(_AIX) || defined(__OpenBSD__)) && \ (!defined(__CYGWIN32__) && !defined(ENABLE_NANOX) && \ !defined(__QNXNTO__) && !defined(__AROS__)) // Initialise crash handler struct sigaction act; struct sigaction oldAct; memset(&act, 0, sizeof(act)); act.sa_handler = crashHandler; act.sa_flags = SA_RESETHAND; sigaction(SIGTERM | SIGILL | SIGABRT | SIGFPE | SIGSEGV, &act, &oldAct); sigaction(SIGILL, &act, &oldAct); sigaction(SIGABRT, &act, &oldAct); sigaction(SIGFPE, &act, &oldAct); sigaction(SIGSEGV, &act, &oldAct); #endif // ------------ Initialise tracker --------------- myTracker = new Tracker(); PPSize windowSize = myTracker->getWindowSizeFromDatabase(); bool fullScreen = myTracker->getFullScreenFlagFromDatabase(); pp_int32 scaleFactor = myTracker->getScreenScaleFactorFromDatabase(); #ifdef __LOWRES__ windowSize.width = DISPLAYDEVICE_WIDTH; windowSize.height = DISPLAYDEVICE_HEIGHT; #endif #ifdef __OPENGL__ myDisplayDevice = new PPDisplayDeviceOGL(windowSize.width, windowSize.height, scaleFactor, bpp, fullScreen, orientation, swapRedBlue); #else myDisplayDevice = new PPDisplayDeviceFB(windowSize.width, windowSize.height, scaleFactor, bpp, fullScreen, orientation, swapRedBlue); #endif SDL_SetWindowTitle(myDisplayDevice->getWindow(), "Loading MilkyTracker..."); myDisplayDevice->init(); myTrackerScreen = new PPScreen(myDisplayDevice, myTracker); myTracker->setScreen(myTrackerScreen); // Kickstart SDL event loop early so that the splash screen is made visible SDL_PumpEvents(); // Startup procedure myTracker->startUp(noSplash); #ifdef HAVE_LIBASOUND InitMidi(); #endif // Try to create timer timer = SDL_AddTimer(20, timerCallback, NULL); // Start capturing text input events SDL_StartTextInput(); ticking = true; } static bool done; void exitSDLEventLoop(bool serializedEventInvoked/* = true*/) { PPEvent event(eAppQuit); RaiseEventSerialized(&event); // it's necessary to make this mutex lock because the SDL modal event loop // used in the modal dialogs expects modal dialogs to be invoked by // events within these mutex lock calls if (!serializedEventInvoked) globalMutex->lock(); bool res = myTracker->shutDown(); if (!serializedEventInvoked) globalMutex->unlock(); if (res) done = 1; } void SendFile(char *file) { PPSystemString finalFile(file); PPSystemString* strPtr = &finalFile; PPEvent event(eFileDragDropped, &strPtr, sizeof(PPSystemString*)); RaiseEventSerialized(&event); } #if defined(__PSP__) extern "C" int SDL_main(int argc, char *argv[]) #else int main(int argc, char *argv[]) #endif { SDL_Event event; char *loadFile = 0; pp_int32 defaultBPP = -1; PPDisplayDevice::Orientations orientation = PPDisplayDevice::ORIENTATION_NORMAL; bool swapRedBlue = false, noSplash = false; bool recVelocity = false; // Parse command line while ( argc > 1 ) { --argc; #ifdef __APPLE__ // OSX: Swallow "-psn_xxx" argument passed by Finder on OSX <10.9 if ( strncmp(argv[argc], "-psn", 4) == 0 ) { continue; } else #endif if ( strcmp(argv[argc-1], "-bpp") == 0 ) { defaultBPP = atoi(argv[argc]); --argc; } else if ( strcmp(argv[argc], "-nosplash") == 0 ) { noSplash = true; } else if ( strcmp(argv[argc], "-swap") == 0 ) { swapRedBlue = true; } else if ( strcmp(argv[argc-1], "-orientation") == 0 ) { if (strcmp(argv[argc], "NORMAL") == 0) { orientation = PPDisplayDevice::ORIENTATION_NORMAL; } else if (strcmp(argv[argc], "ROTATE90CCW") == 0) { orientation = PPDisplayDevice::ORIENTATION_ROTATE90CCW; } else if (strcmp(argv[argc], "ROTATE90CW") == 0) { orientation = PPDisplayDevice::ORIENTATION_ROTATE90CW; } else goto unrecognizedCommandLineSwitch; --argc; } else if ( strcmp(argv[argc], "-recvelocity") == 0) { recVelocity = true; } else { unrecognizedCommandLineSwitch: if (argv[argc][0] == '-') { fprintf(stderr, "Usage: %s [-bpp N] [-swap] [-orientation NORMAL|ROTATE90CCW|ROTATE90CW] [-nosplash] [-recvelocity]\n", argv[0]); exit(1); } else { loadFile = argv[argc]; } } } globalMutex = new PPMutex(); // Store current working path (init routine is likely to change it) PPPath_POSIX path; PPSystemString oldCwd = path.getCurrent(); globalMutex->lock(); initTracker(defaultBPP, orientation, swapRedBlue, noSplash); globalMutex->unlock(); #ifdef HAVE_LIBASOUND if (myMidiReceiver && recVelocity) { myMidiReceiver->setRecordVelocity(true); } #endif if (loadFile) { PPSystemString newCwd = path.getCurrent(); path.change(oldCwd); SendFile(loadFile); path.change(newCwd); pp_uint16 chr[3] = {VK_RETURN, 0, 0}; PPEvent event(eKeyDown, &chr, sizeof(chr)); RaiseEventSerialized(&event); } // Main event loop done = 0; while (!done && SDL_WaitEvent(&event)) { switch (event.type) { case SDL_QUIT: exitSDLEventLoop(false); break; case SDL_MOUSEMOTION: { // Ignore old mouse motion events in the event queue SDL_Event new_event; if (SDL_PeepEvents(&new_event, 1, SDL_GETEVENT, SDL_MOUSEMOTION, SDL_MOUSEMOTION) > 0) { while (SDL_PeepEvents(&new_event, 1, SDL_GETEVENT, SDL_MOUSEMOTION, SDL_MOUSEMOTION) > 0); processSDLEvents(new_event); } else { processSDLEvents(event); } break; } // Open modules drag 'n dropped onto MilkyTracker (currently only works on Dock icon, OSX) case SDL_DROPFILE: SendFile(event.drop.file); SDL_free(event.drop.file); break; // Refresh GUI if window is unhidden or resized case SDL_WINDOWEVENT: switch (event.window.event) { case SDL_WINDOWEVENT_EXPOSED: case SDL_WINDOWEVENT_RESIZED: case SDL_WINDOWEVENT_SHOWN: myTrackerScreen->update(); } break; case SDL_USEREVENT: processSDLUserEvents((const SDL_UserEvent&)event); break; default: processSDLEvents(event); break; } } ticking = false; SDL_RemoveTimer(timer); globalMutex->lock(); #ifdef HAVE_LIBASOUND delete myMidiReceiver; #endif delete myTracker; myTracker = NULL; delete myTrackerScreen; myTrackerScreen = NULL; delete myDisplayDevice; globalMutex->unlock(); SDL_Quit(); delete globalMutex; return 0; } MilkyTracker-1.02.00/src/tracker/version.h.in000066400000000000000000000004461324432207300207440ustar00rootroot00000000000000// 0xXYYZZ = X.YY.ZZ const int MILKYTRACKER_VERSION = 0x${VER_X}${VER_YY}${VER_ZZ}; // Version string restricted to 20 chars for XM export! const char MILKYTRACKER_VERSION_STRING[] = "MilkyTracker ${VER_X}.${VER_YY}.${VER_ZZ}"; // 012345678901234567890 MilkyTracker-1.02.00/src/tracker/win32/000077500000000000000000000000001324432207300174375ustar00rootroot00000000000000MilkyTracker-1.02.00/src/tracker/win32/PreferencesDialog.cpp000066400000000000000000000251141324432207300235270ustar00rootroot00000000000000/* * tracker/win32/PreferencesDialog.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "PreferencesDialog.h" #include #include #include "Win32_resource.h" // MIDI headers #include "MIDIInDevice.h" // Other utility classes #include "TrackerSettingsDatabase.h" #include "XMFile.h" #include "PPSystem.h" #define PREFSFILENAME _T("prefs.cfg") // MIDI Namespaces using midi::CMIDIInDevice; using midi::CMIDIReceiver; CPreferencesDialog* CPreferencesDialog::s_prefDlg = NULL; BOOL CALLBACK CPreferencesDialog::DialogProc(HWND hWndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { s_prefDlg->m_hWndDlg = hWndDlg; switch (uMsg) { case WM_INITDIALOG: { ::SetWindowText(hWndDlg, _T("Preferences")); HWND hWnd = s_prefDlg->m_hWndMain; // Center dialog within main window RECT parentRc, thisRc; ::GetWindowRect(hWnd, &parentRc); ::GetWindowRect(hWndDlg, &thisRc); int width = thisRc.right - thisRc.left; int height = thisRc.bottom - thisRc.top; int midx = (parentRc.left + parentRc.right) / 2; int midy = (parentRc.top + parentRc.bottom) / 2; ::SetWindowPos(hWndDlg, hWnd, midx - width/2, midy - height/2, width, height, SWP_NOZORDER); s_prefDlg->initDialog(); return TRUE; } case WM_NOTIFY: { const NMHDR* nHdr = (NMHDR*)lParam; switch (wParam) { case IDC_SLIDER_MIDITHREADPRIORITY: { if ((signed)nHdr->code != NM_RELEASEDCAPTURE) break; int i = SendMessage(nHdr->hwndFrom, TBM_GETPOS, 0, 0); s_prefDlg->storeMidiRecordPriority(i); break; } case IDC_SLIDER_AMPLIFYVELOCITY: { if ((signed)nHdr->code != NM_RELEASEDCAPTURE) break; int i = SendMessage(nHdr->hwndFrom, TBM_GETPOS, 0, 0); s_prefDlg->storeVelocityAmplify(i); break; } } break; } case WM_COMMAND: { switch (LOWORD(wParam)) { case IDC_COMBO_MIDIDEVICES: { switch (HIWORD(wParam)) { case CBN_SELCHANGE: s_prefDlg->storeMidiDeviceName(s_prefDlg->getComboSelection()); break; } break; } case IDC_CHECK_ENABLE_MIDI: s_prefDlg->toggleUseMidiDevice(); break; case IDC_CHECK_SAVESETTINGS: s_prefDlg->toggleSavePreferences(); break; case IDC_CHECK_RECORD_VELOCITY: s_prefDlg->toggleRecordVelocity(); break; case IDOK: ::EndDialog(hWndDlg, wParam); break; case IDCANCEL: s_prefDlg->restoreDataBase(); ::EndDialog(hWndDlg, wParam); return TRUE; } } } return FALSE; } CPreferencesDialog::CPreferencesDialog(HWND hWnd, HINSTANCE hInst) : m_hWndMain(hWnd), m_hInstance(hInst), m_dataBase(NULL), m_dataBaseCopy(NULL) { initDataBase(); } CPreferencesDialog::~CPreferencesDialog() { shutdownDataBase(); delete m_dataBase; delete m_dataBaseCopy; } UINT CPreferencesDialog::runModal() { CPreferencesDialog::s_prefDlg = this; backupDataBase(); return ::DialogBox(m_hInstance, (LPCTSTR)IDD_PROPERTIES, m_hWndMain, (DLGPROC)DialogProc); } void CPreferencesDialog::initDataBase() { m_dataBase = new TrackerSettingsDatabase(); m_dataBase->store("USEMIDI", 0); m_dataBase->store("SAVEPREFS", 0); m_dataBase->store("RECORDINGTHREADPRIORITY", CMIDIInDevice::MIDI_THREAD_PRIORITY_NORMAL); m_dataBase->store("MIDIDEVICE", ""); m_dataBase->store("RECORDVELOCITY", 0); m_dataBase->store("VELOCITYAMPLIFY", 100); if (XMFile::exists(System::getConfigFileName(PREFSFILENAME))) { XMFile f(System::getConfigFileName(PREFSFILENAME)); m_dataBase->serialize(f); } } void CPreferencesDialog::shutdownDataBase() { if (m_dataBase->restore("SAVEPREFS")->getIntValue()) { XMFile f(System::getConfigFileName(PREFSFILENAME), true); m_dataBase->serialize(f); } else if (XMFile::exists(System::getConfigFileName(PREFSFILENAME))) { XMFile::remove(System::getConfigFileName(PREFSFILENAME)); } } void CPreferencesDialog::backupDataBase() { if (!m_dataBase) return; if (m_dataBaseCopy) delete m_dataBaseCopy; m_dataBaseCopy = new TrackerSettingsDatabase(*m_dataBase); } void CPreferencesDialog::restoreDataBase() { if (!m_dataBaseCopy) return; if (m_dataBase) delete m_dataBase; m_dataBase = new TrackerSettingsDatabase(*m_dataBaseCopy); } void CPreferencesDialog::updateToggles() { bool b = false; if (m_dataBase) b = m_dataBase->restore("SAVEPREFS")->getIntValue() != 0; ::CheckDlgButton( m_hWndDlg, IDC_CHECK_SAVESETTINGS, b ? BST_CHECKED : BST_UNCHECKED); b = false; if (m_dataBase) b = m_dataBase->restore("USEMIDI")->getIntValue() != 0; ::CheckDlgButton( m_hWndDlg, IDC_CHECK_ENABLE_MIDI, b ? BST_CHECKED : BST_UNCHECKED); b = false; if (m_dataBase) b = m_dataBase->restore("RECORDVELOCITY")->getIntValue() != 0; ::CheckDlgButton( m_hWndDlg, IDC_CHECK_RECORD_VELOCITY, b ? BST_CHECKED : BST_UNCHECKED); } void CPreferencesDialog::updateSliderMidiRecordPriority() { HWND hWndTrackbar = ::GetDlgItem(m_hWndDlg, IDC_SLIDER_MIDITHREADPRIORITY); if (m_dataBase) ::SendMessage(hWndTrackbar, TBM_SETPOS, TRUE, m_dataBase->restore("RECORDINGTHREADPRIORITY")->getIntValue()); } void CPreferencesDialog::updateSliderVelocityAmplify() { HWND hWndTrackbar = ::GetDlgItem(m_hWndDlg, IDC_SLIDER_AMPLIFYVELOCITY); if (m_dataBase) ::SendMessage(hWndTrackbar, TBM_SETPOS, TRUE, m_dataBase->restore("VELOCITYAMPLIFY")->getIntValue()); HWND hWndToggle = ::GetDlgItem(m_hWndDlg, IDC_CHECK_RECORD_VELOCITY); TCHAR buffer[1024]; #ifdef _UNICODE wsprintf(buffer, _T("Record velocity (amplify: %i%%)"), m_dataBase->restore("VELOCITYAMPLIFY")->getIntValue()); #else sprintf(buffer, _T("Record velocity (amplify: %i%%)"), m_dataBase->restore("VELOCITYAMPLIFY")->getIntValue()); #endif SetWindowText(hWndToggle, buffer); } void CPreferencesDialog::initDialog() { UINT i; // Configure slider for thread priority HWND hWndTrackbar = ::GetDlgItem(m_hWndDlg, IDC_SLIDER_MIDITHREADPRIORITY); ::SendMessage(hWndTrackbar, TBM_SETRANGE, 0, (LPARAM)MAKELONG(0, 4)); for (i = 0; i < 5; i++) ::SendMessage(hWndTrackbar, TBM_SETTIC, 0, i); // Configure slider for velocity amplification hWndTrackbar = ::GetDlgItem(m_hWndDlg, IDC_SLIDER_AMPLIFYVELOCITY); ::SendMessage(hWndTrackbar, TBM_SETRANGE, 0, (LPARAM)MAKELONG(0, 200)); HWND hWndCombo = ::GetDlgItem(m_hWndDlg, IDC_COMBO_MIDIDEVICES); int nSelectedDevice = 0; for (i = 0; i < CMIDIInDevice::GetNumDevs(); i++) { MIDIINCAPS Caps; CMIDIInDevice::GetDevCaps(i, Caps); ::SendMessage(hWndCombo, CB_ADDSTRING, 0, reinterpret_cast(&Caps.szPname)); char* pszDeviceName = NULL; #ifdef UNICODE char szDeviceName[1024]; midi::UnicodeToAnsi(Caps.szPname, szDeviceName); pszDeviceName = szDeviceName; #else pszDeviceName = Caps.szPname; #endif if (m_dataBase && m_dataBase->restore("MIDIDEVICE")->getStringValue().compareTo(pszDeviceName) == 0) { nSelectedDevice = i; } } ::SendMessage(hWndCombo, CB_SETCURSEL, nSelectedDevice, 0); storeMidiDeviceName(nSelectedDevice); updateToggles(); updateSliderMidiRecordPriority(); updateSliderVelocityAmplify(); } UINT CPreferencesDialog::getComboSelection() { HWND hWndCombo = ::GetDlgItem(m_hWndDlg, IDC_COMBO_MIDIDEVICES); return ::SendMessage(hWndCombo, CB_GETCURSEL, 0, 0); } void CPreferencesDialog::toggleUseMidiDevice() { if (m_dataBase) { int i = m_dataBase->restore("USEMIDI")->getIntValue(); m_dataBase->restore("USEMIDI")->store(!i); updateToggles(); } } void CPreferencesDialog::toggleSavePreferences() { if (m_dataBase) { int i = m_dataBase->restore("SAVEPREFS")->getIntValue(); m_dataBase->restore("SAVEPREFS")->store(!i); updateToggles(); } } void CPreferencesDialog::toggleRecordVelocity() { if (m_dataBase) { int i = m_dataBase->restore("RECORDVELOCITY")->getIntValue(); m_dataBase->restore("RECORDVELOCITY")->store(!i); updateToggles(); } } void CPreferencesDialog::storeMidiDeviceName(UINT deviceID) { if (m_dataBase && deviceID < CMIDIInDevice::GetNumDevs()) { MIDIINCAPS Caps; CMIDIInDevice::GetDevCaps(deviceID, Caps); char* pszDeviceName = NULL; #ifdef UNICODE char szDeviceName[1024]; midi::UnicodeToAnsi(Caps.szPname, szDeviceName); pszDeviceName = szDeviceName; #else pszDeviceName = Caps.szPname; #endif m_dataBase->restore("MIDIDEVICE")->store(pszDeviceName); } } void CPreferencesDialog::storeMidiRecordPriority(UINT priority) { if (m_dataBase) { m_dataBase->restore("RECORDINGTHREADPRIORITY")->store(priority); updateSliderMidiRecordPriority(); } } void CPreferencesDialog::storeVelocityAmplify(UINT amplify) { if (m_dataBase) { m_dataBase->restore("VELOCITYAMPLIFY")->store(amplify); updateSliderVelocityAmplify(); } } UINT CPreferencesDialog::getMidiDevIDFromString(const char* string) { UINT nSelectedDevice = (unsigned)-1; for (UINT i = 0; i < CMIDIInDevice::GetNumDevs(); i++) { MIDIINCAPS Caps; CMIDIInDevice::GetDevCaps(i, Caps); char* pszDeviceName = NULL; #ifdef UNICODE char szDeviceName[1024]; midi::UnicodeToAnsi(Caps.szPname, szDeviceName); pszDeviceName = szDeviceName; #else pszDeviceName = Caps.szPname; #endif if (strcmp(string, pszDeviceName) == 0) { nSelectedDevice = i; break; } } return nSelectedDevice; } UINT CPreferencesDialog::getSelectedMidiDeviceID() { if (m_dataBase) { return getMidiDevIDFromString(m_dataBase->restore("MIDIDEVICE")->getStringValue()); } return (unsigned)-1; } bool CPreferencesDialog::getUseMidiDeviceFlag() { if (m_dataBase) { return m_dataBase->restore("USEMIDI")->getIntValue() != 0; } return false; } UINT CPreferencesDialog::getMidiRecordThreadPriority() { if (m_dataBase) { return m_dataBase->restore("RECORDINGTHREADPRIORITY")->getIntValue(); } return CMIDIInDevice::MIDI_THREAD_PRIORITY_NORMAL; } bool CPreferencesDialog::getRecordVelocityFlag() { if (m_dataBase) { return m_dataBase->restore("RECORDVELOCITY")->getIntValue() != 0; } return false; } UINT CPreferencesDialog::getVelocityAmplify() { if (m_dataBase) { return m_dataBase->restore("VELOCITYAMPLIFY")->getIntValue(); } return 100; } MilkyTracker-1.02.00/src/tracker/win32/PreferencesDialog.h000066400000000000000000000040051324432207300231700ustar00rootroot00000000000000/* * tracker/win32/PreferencesDialog.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #ifndef __PREFERENCESDIALOG_H__ #define __PREFERENCESDIALOG_H__ #include class TrackerSettingsDatabase; class CPreferencesDialog { private: HWND m_hWndDlg; HWND m_hWndMain; HINSTANCE m_hInstance; TrackerSettingsDatabase* m_dataBase; TrackerSettingsDatabase* m_dataBaseCopy; static CPreferencesDialog* s_prefDlg; static BOOL CALLBACK DialogProc(HWND hWndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); static int s_threadPriorities[5]; void initDataBase(); void shutdownDataBase(); void backupDataBase(); void restoreDataBase(); void updateToggles(); void updateSliderMidiRecordPriority(); void updateSliderVelocityAmplify(); void initDialog(); UINT getComboSelection(); void toggleUseMidiDevice(); void toggleSavePreferences(); void toggleRecordVelocity(); void storeMidiDeviceName(UINT deviceID); void storeMidiRecordPriority(UINT priority); void storeVelocityAmplify(UINT amplify); UINT getMidiDevIDFromString(const char* string); public: CPreferencesDialog(HWND hWnd, HINSTANCE hInst); ~CPreferencesDialog(); UINT runModal(); UINT getSelectedMidiDeviceID(); bool getUseMidiDeviceFlag(); UINT getMidiRecordThreadPriority(); bool getRecordVelocityFlag(); UINT getVelocityAmplify(); }; #endif MilkyTracker-1.02.00/src/tracker/win32/ThreadTimer.cpp000066400000000000000000000027401324432207300223560ustar00rootroot00000000000000#include "ThreadTimer.h" CThreadTimer::CThreadTimer():object(0),idEvent(0),elapse(0), isActive(FALSE) { InitializeCriticalSection(&lock); } CThreadTimer::~CThreadTimer() { DeleteCriticalSection(&lock); } UINT CThreadTimer::SetTimer (void* obj, UINT nIDEvent, UINT uElapse, ThreadTimerProc lpTimerProc) { object = obj; idEvent = nIDEvent; elapse = uElapse; proc = lpTimerProc; EnterCriticalSection(&lock); // is it already active? if (isActive) { LeaveCriticalSection(&lock); return 0; } // Start the thread DWORD threadId; HANDLE threadHandle = CreateThread (NULL, 0, CThreadTimer::ThreadFunction, this, 0, &threadId); //SetThreadPriority(threadHandle,THREAD_PRIORITY_TIME_CRITICAL); // this is optional isActive = TRUE; LeaveCriticalSection(&lock); return nIDEvent; } BOOL CThreadTimer::KillTimer() { EnterCriticalSection(&lock); isActive = FALSE; LeaveCriticalSection(&lock); return TRUE; } DWORD WINAPI CThreadTimer::ThreadFunction (LPVOID pParam) { // Here is the heart of our little timer CThreadTimer* obj = (CThreadTimer*) pParam; BOOLEAN isActive = TRUE; do { Sleep(obj->elapse); obj->proc (obj->object, obj->idEvent); EnterCriticalSection(&obj->lock); isActive = obj->isActive; LeaveCriticalSection(&obj->lock); } while (isActive); return 0; } MilkyTracker-1.02.00/src/tracker/win32/ThreadTimer.h000066400000000000000000000013621324432207300220220ustar00rootroot00000000000000#ifndef THREADTIMER__H #define THREADTIMER__H #include typedef void (*ThreadTimerProc)(void* obj, UINT idEvent); class CThreadTimer { void* object; // pointer to the "parent" object (like CTimersDlg) UINT idEvent; // timer ID UINT elapse; // "Sleep time" in milliseconds ThreadTimerProc proc; // Callback function, supplied by the user BOOL isActive; // Set to FALSE after the call to KillTimer CRITICAL_SECTION lock; // thread synchronization static DWORD WINAPI ThreadFunction (LPVOID pParam); // thread entry point public: CThreadTimer(); virtual ~CThreadTimer(); UINT SetTimer (void* obj, UINT nIDEvent, UINT uElapse, ThreadTimerProc lpTimerProc); BOOL KillTimer(); }; #endif MilkyTracker-1.02.00/src/tracker/win32/Win32_main.cpp000066400000000000000000000720471324432207300220630ustar00rootroot00000000000000/* * tracker/win32/Win32_main.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include #include #include #include #include #include #include #include #include #include "Win32_resource.h" #include "ThreadTimer.h" #include "PreferencesDialog.h" //------------------------------------------------------------------------------ #include "PPUI.h" #include "Screen.h" #include "Tracker.h" #include "DisplayDevice_WIN32.h" #include "PPSystem.h" #include "PPMutex.h" #include "XMFile.h" #include "MIDIInDevice.h" #include "MidiReceiver_win32.h" using midi::CMIDIInDevice; using midi::CMIDIReceiver; #undef FULLSCREEN #define IDC_HAND MAKEINTRESOURCE(32649) #define IDM_FULLSCREEN 0x10 #define IDM_PREFERENCES 0x11 #define WINDOWTITLE _T("Loading MilkyTracker...") #define FS_FREQUENCY 0x3C #define FS_BPS 0x20 #ifdef DEBUG #define SPLASH_WAIT_TIME 2000 #else #define SPLASH_WAIT_TIME 0 #endif #define WM_MYTIMER WM_USER+10 #ifndef WM_MOUSEWHEEL #define WM_MOUSEWHEEL 0x020A #endif /**************************************************************************** * * Global variables * ****************************************************************************/ TCHAR c_szClassName[] = _T("MILKYTRACKERMAINCLASS"); HINSTANCE g_hinst = NULL; /* My instance handle */ BOOL g_fPaused = TRUE; /* Should I be paused? */ HWND hWnd = NULL; BOOL g_mouseDragging = FALSE; PPMutex* g_globalMutex = NULL; HCURSOR g_cursorStandard = NULL; HCURSOR g_cursorResizeWE = NULL; HCURSOR g_cursorHand = NULL; static PPScreen* myTrackerScreen = NULL; static Tracker* myTracker = NULL; static PPDisplayDevice* myDisplayDevice = NULL; static CThreadTimer myThreadTimer; static CPreferencesDialog* myPreferenceDialog = NULL; static CMIDIInDevice* myMidiInDevice = NULL; static MidiReceiver* myMidiReceiver = NULL; #ifdef MOUSETRACKING #if(WIN32_WINNT < 0x0400) #define WM_MOUSELEAVE WM_USER+2 #define TME_LEAVE 1 typedef struct tagTRACKMOUSEEVENT { DWORD cbSize; DWORD dwFlags; HWND hwndTrack; } TRACKMOUSEEVENT, *LPTRACKMOUSEEVENT; VOID CALLBACK TrackMouseTimerProc(HWND hWnd,UINT uMsg,UINT idEvent,DWORD dwTime) { RECT rect; POINT pt; GetClientRect(hWnd,&rect); MapWindowPoints(hWnd,NULL,(LPPOINT)&rect,2); GetCursorPos(&pt); if (!PtInRect(&rect,pt) || (WindowFromPoint(pt) != hWnd)) { if (!KillTimer(hWnd,idEvent)) { // Error killing the timer! } PostMessage(hWnd,WM_MOUSELEAVE,0,0); } } BOOL TrackMouseEvent(LPTRACKMOUSEEVENT ptme) { OutputDebugString(_T("TrackMouseEvent\n")); if (!ptme || ptme->cbSize < sizeof(TRACKMOUSEEVENT)) { OutputDebugString(_T("TrackMouseEvent: invalid TRACKMOUSEEVENT structure\n")); return FALSE; } if (!IsWindow(ptme->hwndTrack)) { OutputDebugString( _T("TrackMouseEvent: invalid hwndTrack\n")); return FALSE; } if (!(ptme->dwFlags & TME_LEAVE)) { OutputDebugString(_T("TrackMouseEvent: invalid dwFlags\n")); return FALSE; } return SetTimer(ptme->hwndTrack, ptme->dwFlags, 100,(TIMERPROC)TrackMouseTimerProc); } #endif // WIN32_WINNT #endif // MOUSETRACKING static void MyThreadTimerProc(void* obj, UINT idEvent) { SendMessage(hWnd, WM_MYTIMER, 0, 0); } pp_uint32 PPGetTickCount() { return ::GetTickCount(); } void QueryKeyModifiers() { if (::GetAsyncKeyState(VK_SHIFT)>>15) setKeyModifier(KeyModifierSHIFT); else clearKeyModifier(KeyModifierSHIFT); if (::GetAsyncKeyState(VK_MENU)>>15) setKeyModifier(KeyModifierALT); else clearKeyModifier(KeyModifierALT); if (::GetAsyncKeyState(VK_CONTROL)>>15) setKeyModifier(KeyModifierCTRL); else clearKeyModifier(KeyModifierCTRL); } static void EnableNumPad(pp_uint16* chr, LPARAM lParam) { // Always enable NUMPAD VKs (check scancode) switch (chr[1]) { // VK_DIVIDE case 0x35: if (lParam & (1 << 24)) chr[0] = VK_DIVIDE; break; // VK_MULTIPLY case 0x37: if (lParam & (1 << 24)) chr[0] = VK_MULTIPLY; break; // VK_MULTIPLY case 0x4A: if (lParam & (1 << 24)) chr[0] = VK_SUBTRACT; break; // VK_MULTIPLY case 0x4E: if (lParam & (1 << 24)) chr[0] = VK_ADD; break; // VK_MULTIPLY case 0x1C: // Check for extended key enter if (lParam & (1 << 24)) chr[0] = VK_SEPARATOR; break; // VK_DECIMAL case 0x53: if (!(lParam & (1 << 24))) chr[0] = VK_DECIMAL; break; // VK_NUMPAD0 case 0x52: if (!(lParam & (1 << 24))) chr[0] = VK_NUMPAD0; break; // VK_NUMPAD1 case 0x4F: if (!(lParam & (1 << 24))) chr[0] = VK_NUMPAD1; break; // VK_NUMPAD2 case 0x50: if (!(lParam & (1 << 24))) chr[0] = VK_NUMPAD2; break; // VK_NUMPAD3 case 0x51: if (!(lParam & (1 << 24))) chr[0] = VK_NUMPAD3; break; // VK_NUMPAD4 case 0x4B: if (!(lParam & (1 << 24))) chr[0] = VK_NUMPAD4; break; // VK_NUMPAD5 case 0x4C: if (!(lParam & (1 << 24))) chr[0] = VK_NUMPAD5; break; // VK_NUMPAD6 case 0x4D: if (!(lParam & (1 << 24))) chr[0] = VK_NUMPAD6; break; // VK_NUMPAD7 case 0x47: if (!(lParam & (1 << 24))) chr[0] = VK_NUMPAD7; break; // VK_NUMPAD8 case 0x48: if (!(lParam & (1 << 24))) chr[0] = VK_NUMPAD8; break; // VK_NUMPAD9 case 0x49: if (!(lParam & (1 << 24))) chr[0] = VK_NUMPAD9; break; } } static void SendFile(LPCTSTR file) { PPSystemString finalFile(file); PPSystemString* strPtr = &finalFile; PPEvent event(eFileDragDropped, &strPtr, sizeof(PPSystemString*)); myTrackerScreen->raiseEvent(&event); } static void OnDropFiles(HDROP hDropInfo) { TCHAR buffer[MAX_PATH+1]; unsigned int count = ::DragQueryFile(hDropInfo, 0xFFFFFFFF, 0, 0); if (count) { ::DragQueryFile(hDropInfo, 0, buffer, MAX_PATH); ::SendFile(buffer); } } static void StopMidiRecording() { // clean up midi device & listener if (myMidiInDevice) { delete myMidiInDevice; myMidiInDevice = NULL; } if (myMidiReceiver) { delete myMidiReceiver; myMidiReceiver = NULL; } } static void StartMidiRecording(UINT devID, bool recordVelocity, UINT velocityAmplify, UINT threadPriority = CMIDIInDevice::MIDI_THREAD_PRIORITY_NORMAL) { if (!CMIDIInDevice::GetNumDevs() || devID == (unsigned)-1) return; StopMidiRecording(); myMidiReceiver = new MidiReceiver(*myTracker, *g_globalMutex); myMidiReceiver->setRecordVelocity(recordVelocity); myMidiReceiver->setVelocityAmplify(velocityAmplify); myMidiInDevice = new CMIDIInDevice(*myMidiReceiver); // ---------------- Initialize MIDI ------------------- // We'll use the first device - we're not picky here try { myMidiInDevice->Open(devID); // Start recording myMidiInDevice->StartRecording((CMIDIInDevice::ThreadPriority)threadPriority); } catch (midi::CMIDIInException e) { StopMidiRecording(); PPSystemString str("Error while trying to setup the MIDI device. The error message is:\r\n"); str.append(e.what()); str.append("\r\nMIDI will be disabled."); ::MessageBox(hWnd, str, NULL, MB_OK | MB_ICONERROR); } } static void HandleMidiRecording() { if (!myPreferenceDialog) return; if (myPreferenceDialog->getUseMidiDeviceFlag()) StartMidiRecording(myPreferenceDialog->getSelectedMidiDeviceID(), myPreferenceDialog->getRecordVelocityFlag(), myPreferenceDialog->getVelocityAmplify(), myPreferenceDialog->getMidiRecordThreadPriority()); else StopMidiRecording(); } static void HandlePreferencesDialog() { if (myPreferenceDialog) { if (myPreferenceDialog->runModal() == IDOK) { HandleMidiRecording(); } } } static void RaiseEventSynchronized(PPEvent* event) { //if (globalMutex->tryLock()) //{ g_globalMutex->lock(); if (myTrackerScreen) myTrackerScreen->raiseEvent(event); g_globalMutex->unlock(); //} } static LONG WINAPI CrashHandler(EXCEPTION_POINTERS*) { // get path of our executable static TCHAR szPath[MAX_PATH+1]; static TCHAR buffer[MAX_PATH+1]; static TCHAR fileName[MAX_PATH+1]; DWORD dwLen; LPTSTR p; ::GetModuleFileName(NULL, szPath, MAX_PATH); // cut off executable dwLen = (DWORD)_tcslen(szPath); if (dwLen) { p = szPath + dwLen; while (p != szPath) { if (TEXT('\\') == *--p) { *(++p) = 0; break; } } } _tcscpy(buffer, szPath); _tcscat(buffer, _T("BACKUP00.XM")); int num = 1; while(XMFile::exists(buffer) && num <= 100) { _tcscpy(buffer, szPath); #ifdef _UNICODE wsprintf(fileName, L"BACKUP%02i.XM", num); #else sprintf(fileName, "BACKUP%02i.XM", num); #endif _tcscat(buffer, fileName); num++; } if (num != 100) myTracker->saveModule(buffer); MessageBox(NULL, _T("MilkyTracker has crashed, sorry for the inconvenience.\n\n")\ _T("An attempt was made to save the current module in the application folder.\n")\ _T("Please report this error back to the MilkyTracker development team.\n"), NULL, MB_OK); return EXCEPTION_CONTINUE_SEARCH; } /**************************************************************************** * * Ex_WndProc * * Window procedure for simple sample. * ****************************************************************************/ LRESULT CALLBACK Ex_WndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam) { static BOOL lMouseDown = FALSE; static DWORD ltime; static PPPoint llastClickPosition = PPPoint(0,0); static WORD lClickCount = 0; static DWORD lButtonDownStartTime; static BOOL rMouseDown = FALSE; static DWORD rtime; static PPPoint rlastClickPosition = PPPoint(0,0); static WORD rClickCount = 0; static DWORD rButtonDownStartTime; static DWORD timerTicker = 0; static PPPoint p; static bool wasFullScreen = false; // ------------------------------------------ stupid fucking shit -------- #ifdef MOUSETRACKING TRACKMOUSEEVENT tme; #endif static BOOL fInWindow; static BOOL fInMenu; // ----------------------------------------------------------------------- if (lClickCount > 4) { lClickCount = 0; } if (rClickCount > 4) { rClickCount = 0; } switch (msg) { case WM_CREATE: myThreadTimer.SetTimer (NULL, 1, 20, MyThreadTimerProc); #ifndef _DEBUG SetUnhandledExceptionFilter(CrashHandler); #endif fInWindow = FALSE; fInMenu = FALSE; break; case WM_PAINT: if (!myTrackerScreen) break; myTrackerScreen->paint(); break; case WM_MOUSEWHEEL: case WM_MOUSEHWHEEL: { RECT rc; GetWindowRect(hwnd, &rc); TMouseWheelEventParams mouseWheelParams; // Absolute screen coordinates into client coordinates? //mouseWheelParams.pos.x = LOWORD(lParam)-(rc.left+GetSystemMetrics(SM_CXEDGE)+1); //mouseWheelParams.pos.y = HIWORD(lParam)-(rc.top+(GetSystemMetrics(SM_CXEDGE)+GetSystemMetrics(SM_CYCAPTION)+1)); if (myDisplayDevice->isFullScreen()) { mouseWheelParams.pos.x = LOWORD(lParam)-(rc.left); mouseWheelParams.pos.y = HIWORD(lParam)-(rc.top); } else { mouseWheelParams.pos.x = LOWORD(lParam)-(rc.left+GetSystemMetrics(SM_CXEDGE)+1); mouseWheelParams.pos.y = HIWORD(lParam)-(rc.top+(GetSystemMetrics(SM_CXEDGE)+GetSystemMetrics(SM_CYCAPTION)+1)); } mouseWheelParams.deltaX = msg == WM_MOUSEHWHEEL ? ((signed short)HIWORD(wParam)) / 60 : 0; mouseWheelParams.deltaY = msg == WM_MOUSEWHEEL ? ((signed short)HIWORD(wParam)) / 60 : 0; PPEvent myEvent(eMouseWheelMoved, &mouseWheelParams, sizeof(mouseWheelParams)); RaiseEventSynchronized(&myEvent); break; } // ----- left mousebutton ------------------------------- case WM_LBUTTONDOWN: { if (!myTrackerScreen) break; if (lMouseDown) { p.x = -1; p.y = -1; PPEvent myEvent(eLMouseUp, &p, sizeof(PPPoint)); RaiseEventSynchronized(&myEvent); lMouseDown = false; } p.x = LOWORD(lParam); p.y = HIWORD(lParam); PPEvent myEvent(eLMouseDown, &p, sizeof(PPPoint)); RaiseEventSynchronized(&myEvent); lMouseDown = TRUE; //lButtonDownStartTime = timerTicker; lButtonDownStartTime = GetTickCount(); if (!lClickCount) { ltime = GetTickCount(); llastClickPosition.x = LOWORD(lParam); llastClickPosition.y = HIWORD(lParam); } else if (lClickCount == 2) { DWORD deltat = GetTickCount() - ltime; if (deltat > 500) { lClickCount = 0; ltime = GetTickCount(); llastClickPosition.x = LOWORD(lParam); llastClickPosition.y = HIWORD(lParam); } } lClickCount++; break; } // ----- middle mousebutton ------------------------------- case WM_MBUTTONDOWN: { if (!myTrackerScreen) break; p.x = LOWORD(lParam); p.y = HIWORD(lParam); PPEvent myEvent(eMMouseDown, &p, sizeof(PPPoint)); RaiseEventSynchronized(&myEvent); break; } // ----- right mousebutton ------------------------------- case WM_RBUTTONDOWN: { if (!myTrackerScreen) break; if (rMouseDown) { p.x = -1; p.y = -1; PPEvent myEvent(eRMouseUp, &p, sizeof(PPPoint)); RaiseEventSynchronized(&myEvent); rMouseDown = false; } p.x = LOWORD(lParam); p.y = HIWORD(lParam); PPEvent myEvent(eRMouseDown, &p, sizeof(PPPoint)); RaiseEventSynchronized(&myEvent); rMouseDown = TRUE; //rButtonDownStartTime = timerTicker; rButtonDownStartTime = GetTickCount(); if (!rClickCount) { rtime = GetTickCount(); rlastClickPosition.x = LOWORD(lParam); rlastClickPosition.y = HIWORD(lParam); } else if (rClickCount == 2) { DWORD deltat = GetTickCount() - rtime; if (deltat > 500) { rClickCount = 0; rtime = GetTickCount(); rlastClickPosition.x = LOWORD(lParam); rlastClickPosition.y = HIWORD(lParam); } } rClickCount++; break; } // ----- left mousebutton ------------------------------- case WM_LBUTTONUP: { if (!myTrackerScreen || !lMouseDown) break; if (g_mouseDragging) { ReleaseCapture(); g_mouseDragging = FALSE; } lClickCount++; if (lClickCount == 4) { DWORD deltat = GetTickCount() - ltime; if (deltat < 500) { p.x = LOWORD(lParam); p.y = HIWORD(lParam); if (abs(p.x - llastClickPosition.x) < 4 && abs(p.y - llastClickPosition.y) < 4) { PPEvent myEvent(eLMouseDoubleClick, &p, sizeof(PPPoint)); RaiseEventSynchronized(&myEvent); } } lClickCount = 0; } p.x = LOWORD(lParam); p.y = HIWORD(lParam); PPEvent myEvent(eLMouseUp, &p, sizeof(PPPoint)); RaiseEventSynchronized(&myEvent); lMouseDown = FALSE; break; } // ----- middle mousebutton ------------------------------- case WM_MBUTTONUP: { if (!myTrackerScreen) break; p.x = LOWORD(lParam); p.y = HIWORD(lParam); PPEvent myEvent(eMMouseUp, &p, sizeof(PPPoint)); RaiseEventSynchronized(&myEvent); break; } // ----- right mousebutton ------------------------------- case WM_RBUTTONUP: { if (!myTrackerScreen || !rMouseDown) break; rClickCount++; if (rClickCount == 4) { DWORD deltat = GetTickCount() - rtime; if (deltat < 500) { p.x = LOWORD(lParam); p.y = HIWORD(lParam); if (abs(p.x - rlastClickPosition.x) < 4 && abs(p.y - rlastClickPosition.y) < 4) { PPEvent myEvent(eRMouseDoubleClick, &p, sizeof(PPPoint)); RaiseEventSynchronized(&myEvent); } } rClickCount = 0; } p.x = LOWORD(lParam); p.y = HIWORD(lParam); PPEvent myEvent(eRMouseUp, &p, sizeof(PPPoint)); RaiseEventSynchronized(&myEvent); rMouseDown = FALSE; break; } #ifdef MOUSETRACKING case WM_MOUSELEAVE: fInWindow = FALSE; if (!fInMenu) { PPPoint p(-1000, -1000); if (lMouseDown) { PPEvent myEvent(eLMouseUp, &p, sizeof(PPPoint)); RaiseEventSynchronized(&myEvent); lMouseDown = TRUE; } if (rMouseDown) { PPEvent myEvent(eRMouseDown, &p, sizeof(PPPoint)); RaiseEventSynchronized(&myEvent); rMouseDown = TRUE; } } break; case WM_ENTERMENULOOP: fInMenu = TRUE; break; case WM_EXITMENULOOP: fInMenu = FALSE; break; #endif case WM_MOUSEMOVE: { #ifdef MOUSETRACKING if (!fInWindow) { fInWindow = TRUE; tme.cbSize = sizeof(TRACKMOUSEEVENT); tme.dwFlags = TME_LEAVE; tme.hwndTrack = hwnd; if (!TrackMouseEvent(&tme)) { MessageBox(hwnd, TEXT("TrackMouseEvent Failed"), TEXT("Mouse Leave"),MB_OK); } } #endif if (!myTrackerScreen) break; if ((wParam&MK_LBUTTON) && lMouseDown) { p.x = GET_X_LPARAM(lParam); p.y = GET_Y_LPARAM(lParam); if (!g_mouseDragging) { SetCapture(hWnd); g_mouseDragging = TRUE; } PPEvent myEvent(eLMouseDrag, &p, sizeof(PPPoint)); RaiseEventSynchronized(&myEvent); } else if ((wParam&MK_RBUTTON) && rMouseDown) { p.x = LOWORD(lParam); p.y = HIWORD(lParam); PPEvent myEvent(eRMouseDrag, &p, sizeof(PPPoint)); RaiseEventSynchronized(&myEvent); } else { p.x = LOWORD(lParam); p.y = HIWORD(lParam); PPEvent myEvent(eMouseMoved, &p, sizeof(PPPoint)); RaiseEventSynchronized(&myEvent); } break; } case WM_CHAR: { WORD chr = (WORD)wParam; if (chr < 32 || chr > 127) break; PPEvent myEvent(eKeyChar, &chr, sizeof(chr)); RaiseEventSynchronized(&myEvent); break; } case WM_KEYDOWN: case WM_SYSKEYDOWN: { if (msg == WM_SYSKEYDOWN && wParam == VK_RETURN && myTrackerScreen) { PPEvent e(eFullScreen); RaiseEventSynchronized(&e); break; } WORD keyBuf[2] = { 0,0 }; if (ToAscii(wParam, (lParam>>16)&255, 0, keyBuf, 0) != 1) keyBuf[0] = keyBuf[1] = 0; QueryKeyModifiers(); // Check for right ALT key if (GetAsyncKeyState(VK_RMENU)>>15) wParam = VK_RMENU; // Check for right CTRL key else if (GetAsyncKeyState(VK_RCONTROL)>>15) wParam = VK_RCONTROL; WORD chr[3] = {(WORD)wParam, (WORD)(lParam>>16)&255, keyBuf[0]}; EnableNumPad(chr, lParam); if (wParam == VK_CAPITAL) { chr[1] = 0x100; BYTE keyState[256]; GetKeyboardState(keyState); // Toggle caps lock keyState[wParam] = !(BOOL)GetKeyState(VK_CAPITAL); SetKeyboardState(keyState); } PPEvent myEvent(eKeyDown, &chr, sizeof(chr)); RaiseEventSynchronized(&myEvent); if (wParam == VK_SPACE && (GetAsyncKeyState(VK_MENU)>>15)) return 0; break; } case WM_KEYUP: case WM_SYSKEYUP: { WORD keyBuf[2] = {0,0}; if (ToAscii(wParam, (lParam>>16)&255+256, 0, keyBuf, 0) != 1) keyBuf[0] = keyBuf[1] = 0; WORD chr[3] = {(WORD)wParam, (WORD)(lParam>>16)&255, keyBuf[0]}; EnableNumPad(chr, lParam); PPEvent myEvent(eKeyUp, &chr, sizeof(chr)); RaiseEventSynchronized(&myEvent); // Disable F10 system menu pop-up // -------------------------------------------------------- // From MSDN: // If the F10 key is pressed, the DefWindowProc function // sets an internal flag. When DefWindowProc receives the // WM_KEYUP message, the function checks whether the // internal flag is set and, if so, sends a WM_SYSCOMMAND // message to the top-level window. The wParam parameter of // the message is set to SC_KEYMENU. // -------------------------------------------------------- // Solution is to skip DefWindowProc when F10 is pressed if (wParam == VK_F10) return 0; break; } case WM_MYTIMER: { if (!myTrackerScreen) break; PPEvent myEvent(eTimer); RaiseEventSynchronized(&myEvent); timerTicker++; DWORD currentTime = GetTickCount(); if (lMouseDown && (currentTime - lButtonDownStartTime) > 500 && !(timerTicker%3)) { PPEvent myEvent(eLMouseRepeat, &p, sizeof(PPPoint)); RaiseEventSynchronized(&myEvent); } else if (rMouseDown && (currentTime - rButtonDownStartTime) > 500) { PPEvent myEvent(eRMouseRepeat, &p, sizeof(PPPoint)); RaiseEventSynchronized(&myEvent); } break; } case WM_SYSCOMMAND: { if (wParam == IDM_FULLSCREEN && myTrackerScreen) { PPEvent e(eFullScreen); RaiseEventSynchronized(&e); } else if (wParam == IDM_PREFERENCES) { HandlePreferencesDialog(); } else if (wParam == SC_MINIMIZE) { // activating the preferences dialog in minimized mode // seems to freeze, so better disable it EnableMenuItem(GetSystemMenu(hWnd, FALSE), IDM_PREFERENCES, (MF_GRAYED | MF_DISABLED)); } else if (wParam == SC_RESTORE) { // enable preference item in the system menu EnableMenuItem(GetSystemMenu(hWnd, FALSE), IDM_PREFERENCES, MF_ENABLED); } else if (wParam == SC_KEYMENU && lParam == 0x20) { // disable ALT+SPACE system menu popup) return 0; } break; } case WM_DROPFILES: OnDropFiles((HDROP)wParam); break; case WM_ACTIVATE: g_fPaused = (wParam == WA_INACTIVE); break; case WM_CLOSE: { if (GetAsyncKeyState(VK_F4) && GetAsyncKeyState(VK_MENU)) { return 0; } bool res = myTracker->shutDown(); if (res) { myThreadTimer.KillTimer(); PPEvent e(eAppQuit); RaiseEventSynchronized(&e); DestroyWindow(hwnd); } return 0; } case WM_SIZE: // Ignore WM_SIZE events sent during window creation, minimize and restore return 0; case WM_DESTROY: PostQuitMessage(0); break; /* case WM_KILLFOCUS: if (myTrackerScreen && myTrackerScreen->isFullScreen()) { wasFullScreen = true; PPEvent e(eFullScreen); RaiseEventSynchronized(&e); } else wasFullScreen = false; break; case WM_SETFOCUS: if (myTrackerScreen && wasFullScreen) { PPEvent e(eFullScreen); RaiseEventSynchronized(&e); wasFullScreen = false; } else wasFullScreen = false; break;*/ } return DefWindowProc(hwnd, msg, wParam, lParam); } /**************************************************************************** * * AppInit * * Set up everything the application needs to get started. * ****************************************************************************/ static BOOL AppInit(HINSTANCE hinst,int nCmdShow) { /* * Save instance handle for future reference. */ g_hinst = hinst; g_globalMutex = new PPMutex(); g_cursorStandard = LoadCursor(NULL, IDC_ARROW); g_cursorResizeWE = LoadCursor(NULL, IDC_SIZEWE); g_cursorHand = LoadCursor(NULL, IDC_HAND); /* * Set up the window class. */ WNDCLASS wc; wc.hCursor = g_cursorStandard; wc.hIcon = LoadIcon(hinst, MAKEINTRESOURCE(IDI_APPLICATIONICON)); wc.lpszMenuName = NULL; wc.lpszClassName = c_szClassName; wc.hbrBackground = 0; wc.hInstance = hinst; wc.style = 0; wc.lpfnWndProc = Ex_WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; if (!RegisterClass(&wc)) return FALSE; myTracker = new Tracker(); PPSize windowSize = myTracker->getWindowSizeFromDatabase(); pp_int32 scaleFactor = myTracker->getScreenScaleFactorFromDatabase(); bool fullScreen = myTracker->getFullScreenFlagFromDatabase(); #ifdef __LOWRES__ windowSize.width = 320; windowSize.height = 240; #endif RECT rect; rect.left = rect.top = 0; rect.right = windowSize.width * scaleFactor; rect.bottom = windowSize.height * scaleFactor; #ifdef FULLSCREEN AdjustWindowRect(&rect, WS_POPUP, false); hWnd = CreateWindow(c_szClassName, WINDOWTITLE, WS_POPUP/*|WS_SYSMENU/*|WS_MAXIMIZEBOX|WS_MINIMIZEBOX*/,CW_USEDEFAULT,CW_USEDEFAULT, rect.right - rect.left, rect.bottom - rect.top, NULL, NULL, g_hinst, 0); #else AdjustWindowRect(&rect, WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX, false); hWnd = CreateWindow(c_szClassName, WINDOWTITLE, WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX, CW_USEDEFAULT,CW_USEDEFAULT, rect.right - rect.left, rect.bottom - rect.top, NULL, NULL, g_hinst, 0); #endif DragAcceptFiles(hWnd, TRUE); HMENU hMenu = GetSystemMenu(hWnd, FALSE); AppendMenu(hMenu, MF_SEPARATOR, 0xFFFFFFFF, NULL); AppendMenu(hMenu, MF_STRING, IDM_FULLSCREEN, _T("Fullscreen ALT+RETURN")); AppendMenu(hMenu, MF_SEPARATOR, 0xFFFFFFFF, NULL); AppendMenu(hMenu, MF_STRING, IDM_PREFERENCES, _T("Preferences...")); myPreferenceDialog = new CPreferencesDialog(hWnd, g_hinst); DWORD style = GetWindowLong(hWnd, GWL_EXSTYLE); ShowWindow(hWnd, nCmdShow); // Tracker init myDisplayDevice = new PPDisplayDevice(hWnd, windowSize.width, windowSize.height, scaleFactor); if (fullScreen) myDisplayDevice->goFullScreen(fullScreen); myTrackerScreen = new PPScreen(myDisplayDevice, myTracker); myTracker->setScreen(myTrackerScreen); // Startup procedure myTracker->startUp(); HandleMidiRecording(); return TRUE; } /* * This code is almost from: * http://www.codeguru.com/cpp/w-p/win32/article.php/c1427/ * * The original writer of the code did derive this class from public std::vector * which is pretty bad ;) */ class CmdLineArgs { public: CmdLineArgs() { TCHAR* cmdline = GetCommandLine(); // Save local copy of the command line string, because // ParseCmdLine() modifies this string while parsing it. m_cmdline = new TCHAR[_tcslen (cmdline) + 1]; if (m_cmdline) { _tcscpy(m_cmdline, cmdline); ParseCmdLine(); } } ~CmdLineArgs() { delete[] m_cmdline; } const TCHAR* operator[](size_t index) const { return m_args[index]; } size_t size() const { return m_args.size(); } private: TCHAR* m_cmdline; // the command line string std::vector m_args; //////////////////////////////////////////////////////////////////////////////// // Parse m_cmdline into individual tokens, which are delimited by spaces. If a // token begins with a quote, then that token is terminated by the next quote // followed immediately by a space or terminator. This allows tokens to contain // spaces. // This input string: This "is" a ""test"" "of the parsing" alg"o"rithm. // Produces these tokens: This, is, a, "test", of the parsing, alg"o"rithm //////////////////////////////////////////////////////////////////////////////// void ParseCmdLine () { enum { TERM = '\0', QUOTE = '\"' }; bool bInQuotes = false; TCHAR* pargs = m_cmdline; while (*pargs) { while (isspace (*pargs)) // skip leading whitespace pargs++; bInQuotes = (*pargs == QUOTE); // see if this token is quoted if (bInQuotes) // skip leading quote pargs++; m_args.push_back (pargs); // store position of current token // Find next token. // NOTE: Args are normally terminated by whitespace, unless the // arg is quoted. That's why we handle the two cases separately, // even though they are very similar. if (bInQuotes) { // find next quote followed by a space or terminator while (*pargs && !(*pargs == QUOTE && (isspace (pargs[1]) || pargs[1] == TERM))) pargs++; if (*pargs) { *pargs = TERM; // terminate token if (pargs[1]) // if quoted token not followed by a terminator pargs += 2; // advance to next token } } else { // skip to next non-whitespace character while (*pargs && !isspace (*pargs)) pargs++; if (*pargs && isspace (*pargs)) // end of token { *pargs = TERM; // terminate token pargs++; // advance to next token or terminator } } } // while (*pargs) } // ParseCmdLine() }; // class CmdLineArgs /**************************************************************************** * * Main * ****************************************************************************/ int PASCAL WinMain(HINSTANCE hinst, HINSTANCE hinstPrev, LPSTR szCmdLine, int nCmdShow) { MSG msg; msg.wParam = 0; /* In case something goes horribly wrong */ if (!AppInit(hinst, nCmdShow)) return -1; // Convert command line parameters CmdLineArgs args; if (args.size() >= 2) { // Retrieve second parameter (= input file) PPSystemString fileInput = args[1]; // When there is something specified, check if it's an existing file if (fileInput.length() && XMFile::exists(fileInput)) { SendFile(fileInput); } } if (hWnd) { MSG Msg; while (GetMessage(&Msg, NULL, 0, 0)) { TranslateMessage(&Msg); DispatchMessage(&Msg); } } delete myMidiInDevice; delete myMidiReceiver; delete myTracker; delete myTrackerScreen; delete myPreferenceDialog; delete g_globalMutex; if (myDisplayDevice->isFullScreen()) myDisplayDevice->goFullScreen(false); delete myDisplayDevice; return (int)msg.wParam; } MilkyTracker-1.02.00/src/tracker/win32/Win32_resource.h000066400000000000000000000031331324432207300224210ustar00rootroot00000000000000/* * tracker/win32/Win32_resource.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ //{{NO_DEPENDENCIES}} // Microsoft Visual C++ generated include file. // Used by Win32_resources.rc // #define IDD_PROPERTIES 102 #define IDI_APPLICATIONICON 110 #define IDC_COMBO_MIDIDEVICES 1000 #define IDC_CHECK_SAVESETTINGS 1001 #define IDC_CHECK_ENABLE_MIDI 1002 #define IDC_BUTTON_OK 1003 #define IDC_CHECK_RECORD_VELOCITY 1004 #define IDC_BUTTON_CANCEL 1005 #define IDC_SLIDER_MIDITHREADPRIORITY 1006 #define IDC_SLIDER_AMPLIFYVELOCITY 1007 // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 105 #define _APS_NEXT_COMMAND_VALUE 40001 #define _APS_NEXT_CONTROL_VALUE 1005 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif MilkyTracker-1.02.00/src/tracker/win32/Win32_resources.rc000066400000000000000000000070721324432207300227670ustar00rootroot00000000000000//Microsoft Developer Studio generated resource script. // #include "Win32_resource.h" #define APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 2 resource. // #include "afxres.h" ///////////////////////////////////////////////////////////////////////////// #undef APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // Deutsch (Deutschland) resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_DEU) #ifdef _WIN32 LANGUAGE LANG_GERMAN, SUBLANG_GERMAN #pragma code_page(1252) #endif //_WIN32 #ifdef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // TEXTINCLUDE // 1 TEXTINCLUDE MOVEABLE PURE BEGIN "Win32_resource.h\0" END 2 TEXTINCLUDE MOVEABLE PURE BEGIN "#include ""afxres.h""\r\n" "\0" END 3 TEXTINCLUDE MOVEABLE PURE BEGIN "\r\n" "\0" END #endif // APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // Icon // // Icon with lowest ID value placed first to ensure application icon // remains consistent on all systems. IDI_APPLICATIONICON ICON DISCARDABLE "..\\..\\..\\resources\\pictures\\carton.ico" ///////////////////////////////////////////////////////////////////////////// // // Dialog // IDD_PROPERTIES DIALOG DISCARDABLE 0, 0, 173, 149 STYLE DS_SYSMODAL | DS_SETFOREGROUND | WS_VISIBLE | WS_CAPTION CAPTION "Preferences" FONT 8, "MS Sans Serif" BEGIN LTEXT "MIDI input device",IDC_STATIC,6,4,57,8 COMBOBOX IDC_COMBO_MIDIDEVICES,5,15,160,100,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Save MIDI settings",IDC_CHECK_SAVESETTINGS,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,91,106,76,10 CONTROL "Enable MIDI device",IDC_CHECK_ENABLE_MIDI,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,5,106,79,10 PUSHBUTTON "Ok",IDOK,59,124,50,15 PUSHBUTTON "Cancel",IDCANCEL,115,124,50,15 CONTROL "",IDC_SLIDER_MIDITHREADPRIORITY,"msctls_trackbar32", TBS_BOTH | WS_TABSTOP,32,44,113,19 LTEXT "MIDI recording thread priority",IDC_STATIC,5,33,92,8 LTEXT "Lowest",IDC_STATIC,6,51,24,8 LTEXT "Highest",IDC_STATIC,145,52,25,8 CONTROL "Record velocity",IDC_CHECK_RECORD_VELOCITY,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,5,68,161,10 CONTROL "",IDC_SLIDER_AMPLIFYVELOCITY,"msctls_trackbar32", TBS_BOTH | TBS_NOTICKS | WS_TABSTOP,43,80,102,19 LTEXT "Amplify 0%",IDC_STATIC,6,83,36,8 LTEXT "200%",IDC_STATIC,148,83,18,8 END ///////////////////////////////////////////////////////////////////////////// // // Dialog Info // IDD_PROPERTIES DLGINIT BEGIN IDC_COMBO_MIDIDEVICES, 0x403, 1, 0 END ///////////////////////////////////////////////////////////////////////////// // // DESIGNINFO // #ifdef APSTUDIO_INVOKED GUIDELINES DESIGNINFO MOVEABLE PURE BEGIN IDD_PROPERTIES, DIALOG BEGIN BOTTOMMARGIN, 138 END END #endif // APSTUDIO_INVOKED #endif // Deutsch (Deutschland) resources ///////////////////////////////////////////////////////////////////////////// #ifndef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 3 resource. // ///////////////////////////////////////////////////////////////////////////// #endif // not APSTUDIO_INVOKED MilkyTracker-1.02.00/src/tracker/wince/000077500000000000000000000000001324432207300176025ustar00rootroot00000000000000MilkyTracker-1.02.00/src/tracker/wince/ButtonMapper.cpp000066400000000000000000000050121324432207300227240ustar00rootroot00000000000000/* * tracker/wince/ButtonMapper.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "TrackerSettingsDatabase.h" #include "XMFile.h" #include "PPSystem_WIN32.h" #include "..\PPUI\Event.h" #include "ButtonMapper.h" static TrackerSettingsDatabase* keyDatabase = NULL; TButtonMapping mappings[256]; void InitButtonRemapper() { memset(mappings, 0xFF, sizeof(mappings)); if (XMFile::exists(System::getConfigFileName(_T("keys.cfg")))) { // load mappings keyDatabase = new TrackerSettingsDatabase(); XMFile f(System::getConfigFileName(_T("keys.cfg"))); keyDatabase->serialize(f); const PPDictionaryKey* theKey = keyDatabase->getFirstKey(); while (theKey) { PPString str = theKey->getKey(); if (memcmp(str, "KEY:", 4) == 0) { unsigned int v = theKey->getIntValue(); DWORD buttonCode = (WORD)(v & 0xFFFF); if (buttonCode < 256) { mappings[buttonCode].keyModifiers = (BYTE)(v >> 16); mappings[buttonCode].virtualKeyCode = (BYTE)(v >> 24); } } theKey = keyDatabase->getNextKey(); } theKey = keyDatabase->restore("ORIENTATION"); if (theKey) { switch (theKey->getIntValue()) { case 0: orientation = eOrientation90CW; break; case 1: orientation = eOrientation90CCW; break; case 2: orientation = eOrientationNormal; break; } } theKey = keyDatabase->restore("ALLOWVIRTUALKEYS"); if (theKey) { allowVirtualKeys = theKey->getIntValue(); } theKey = keyDatabase->restore("HIDETASKBAR"); if (theKey) { hideTaskBar = theKey->getIntValue(); } theKey = keyDatabase->restore("DOUBLEPIXELS"); if (theKey) { doublePixels = theKey->getIntValue(); } theKey = keyDatabase->restore("DONTTURNOFFDEVICE"); if (theKey) { dontTurnOffDevice = theKey->getIntValue(); } delete keyDatabase; } } MilkyTracker-1.02.00/src/tracker/wince/ButtonMapper.h000066400000000000000000000023061324432207300223740ustar00rootroot00000000000000/* * tracker/wince/ButtonMapper.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #ifndef BUTTONMAPPER__H #define BUTTONMAPPER__H struct TButtonMapping { WORD keyModifiers; WORD virtualKeyCode; }; enum EOrientation { eOrientation90CW, eOrientation90CCW, eOrientationNormal }; extern TButtonMapping mappings[]; extern EOrientation orientation; extern pp_int32 allowVirtualKeys; extern pp_int32 hideTaskBar; extern pp_int32 doublePixels; extern pp_int32 dontTurnOffDevice; void InitButtonRemapper(); #endif MilkyTracker-1.02.00/src/tracker/wince/Logger.cpp000066400000000000000000000036641324432207300215360ustar00rootroot00000000000000#include "Logger.h" #include "Simple.h" // construct logger CLogger::CLogger() : fileName(NULL) { m_log = new SimpleVector(); } CLogger::CLogger(LPCTSTR fileName) : fileName(fileName) { m_log = new SimpleVector(); } // destroy logger CLogger::~CLogger() { if (fileName) Export(fileName); delete m_log; } // clear logger void CLogger::Clear() { m_log->clear(); } // log string void CLogger::Log(const SimpleString& logData) { m_log->add(new SimpleString(logData)); } // how many strings does the logger contain? unsigned int CLogger::GetSize() const { return m_log->size(); } // get single entry from logger const SimpleString& CLogger::GetEntry(unsigned int i) const { return *m_log->get(i); } // export this log to a text file bool CLogger::Export(LPCTSTR fileName) const { // create file HANDLE handle = ::CreateFile(fileName, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); // file couldn't be created if (INVALID_HANDLE_VALUE == handle) return false; // write out all strings in ANSI format for (int i = 0; i < m_log->size(); i++) { const SimpleString& strData = *m_log->get(i); // How many memory do we need for the ANSI string? int len = strData.length()*2 + 4; // allocate memory char* szOut = new char[len]; // convert Unicode string to ANSI using default encoding int res = ::WideCharToMultiByte(CP_ACP, 0, strData, strData.length(), szOut, len, NULL, NULL); // if successfully converted append NEWLINE & CR if (res) { szOut[res] = '\r'; szOut[res+1] = '\n'; // terminate string szOut[res+2] = '\0'; // write out string unsigned long NumberOfBytesWritten; BOOL bResult = ::WriteFile(handle, szOut, res+2, &NumberOfBytesWritten, NULL); // flush buffers just in case ::FlushFileBuffers(handle); } // ANSI string no longer needed delete[] szOut; } // close file ::CloseHandle(handle); return true; } MilkyTracker-1.02.00/src/tracker/wince/Logger.h000066400000000000000000000021141324432207300211700ustar00rootroot00000000000000// About this class // ---------------------------------------------------------------------- // This class is a very simple logger class. It simply logs strings // in a vector, provides access to the log entries and optionally // exports the log into a text file. #ifndef __LOGGER_H__ #define __LOGGER_H__ #include class SimpleString; template class SimpleVector; class CLogger { private: // the vector which contains the log data SimpleVector* m_log; LPCTSTR fileName; public: // construct logger instance CLogger(); // construct logger instance which writes out to filename on destruction CLogger(LPCTSTR fileName); // destruct logger instance ~CLogger(); // clear log void Clear(); // log a string void Log(const SimpleString& logData); // return size of log unsigned int GetSize() const; // get log entry const SimpleString& GetEntry(unsigned int i) const; // is this log empty? bool IsEmpty() const { return m_log ? GetSize() == 0 : true; } // export log file into a text file bool Export(LPCTSTR fileName) const; }; #endif MilkyTracker-1.02.00/src/tracker/wince/Simple.h000066400000000000000000000210501324432207300212020ustar00rootroot00000000000000// Simple vector container and string wrapper classes #ifndef __SIMPLE_H__ #define __SIMPLE_H__ #include #include #include ///////////////////////////////////////////////////////////////////////////////////////////// // very simple vector class ///////////////////////////////////////////////////////////////////////////////////////////// template class SimpleVector { private: Type** values; int numValuesAllocated; int numValues; bool destroy; // don't assign this class please SimpleVector& operator=(const SimpleVector& src) { return *this; } public: SimpleVector(int initialSize = 0, bool destroy = true) { this->destroy = destroy; if (initialSize == 0) initialSize = 16; numValuesAllocated = initialSize; if (initialSize) values = new Type*[initialSize]; else values = 0; numValues = 0; } ~SimpleVector() { if (values) { if (destroy) for (int i = 0; i < numValues; i++) delete values[i]; delete[] values; } } SimpleVector* const clone() { SimpleVector* clonedVector = new SimpleVector(numValuesAllocated, true); for (int i = 0; i < numValues; i++) { clonedVector->values[i] = new Type(*values[i]); } clonedVector->numValues = numValues; return clonedVector; } void clear() { if (values) { if (destroy) for (int i = 0; i < numValues; i++) delete values[i]; numValues = 0; } } bool remove(int index) { if (!numValues) return false; if (index < 0 || index >= numValues) return false; if (destroy) delete values[index]; for (int i = index; i < numValues-1; i++) values[i] = values[i+1]; numValues--; return true; } void add(Type* value) { if (numValues >= numValuesAllocated) { numValuesAllocated += 16; Type** values = new Type*[numValuesAllocated]; for (int i = 0; i < numValues; i++) { values[i] = this->values[i]; } delete[] this->values; this->values = values; } values[numValues++] = value; } Type* get(int index) const { if (index < numValues) { return values[index]; } else return 0; } int size() const { return numValues; } bool isEmpty() const { return numValues == 0; } }; ///////////////////////////////////////////////////////////////////////////////////////////// // quick and dirty string wrapper class // lacks serious overflow checks, so use with care only ///////////////////////////////////////////////////////////////////////////////////////////// class SimpleString { private: TCHAR* strBuffer; unsigned int allocatedSize; HRESULT __fastcall AnsiToUnicode(LPCSTR pszA, LPWSTR* ppszW) { ULONG cCharacters; DWORD dwError; // If input is null then just return the same. if (NULL == pszA) { *ppszW = NULL; return NOERROR; } // Determine number of wide characters to be allocated for the // Unicode string. cCharacters = (ULONG)strlen(pszA)+1; // Use of the OLE allocator is required if the resultant Unicode // string will be passed to another COM component and if that // component will free it. Otherwise you can use your own allocator. *ppszW = (LPWSTR) malloc(cCharacters*2); if (NULL == *ppszW) return E_OUTOFMEMORY; // Covert to Unicode. if (0 == MultiByteToWideChar(CP_ACP, 0, pszA, cCharacters, *ppszW, cCharacters)) { dwError = GetLastError(); free(*ppszW); *ppszW = NULL; return HRESULT_FROM_WIN32(dwError); } return NOERROR; } void reAlloc(unsigned int newSize) { if (newSize <= allocatedSize) return; TCHAR* newStrBuffer = new TCHAR[newSize]; memcpy(newStrBuffer, strBuffer, sizeof(TCHAR)*allocatedSize); delete[] strBuffer; strBuffer = newStrBuffer; allocatedSize = newSize; } public: // Empty string SimpleString() { strBuffer = new TCHAR[1]; *strBuffer = 0; allocatedSize = 1; } // String from single character SimpleString(TCHAR c) { strBuffer = new TCHAR[2]; *strBuffer = c; *(strBuffer+1) = 0; allocatedSize = 2; } SimpleString(const TCHAR* str) { strBuffer = new TCHAR[_tcslen(str) + 1]; _tcscpy(strBuffer, str); allocatedSize = (unsigned int)_tcslen(str) + 1; } SimpleString(const char* str) { LPWSTR tempStr = NULL; if (AnsiToUnicode(str, &tempStr) == NOERROR) { strBuffer = new TCHAR[_tcslen(tempStr) + 1]; allocatedSize = (unsigned int)_tcslen(tempStr) + 1; _tcscpy(strBuffer, tempStr); free(tempStr); } else { strBuffer = new TCHAR[1]; *strBuffer = 0; allocatedSize = 1; } } SimpleString(const TCHAR* str, unsigned int length) { strBuffer = new TCHAR[length + 1]; memcpy(strBuffer, str, length*sizeof(TCHAR)); strBuffer[length] = 0; allocatedSize = length + 1; } // copy c'tor SimpleString(const SimpleString& str) { strBuffer = new TCHAR[str.allocatedSize]; memcpy(strBuffer, str.strBuffer, str.allocatedSize*sizeof(TCHAR)); allocatedSize = str.allocatedSize; } operator const TCHAR*() const { return strBuffer; } TCHAR& operator[] (unsigned int i) { if (i >= length()) return strBuffer[length()]; return strBuffer[i]; } const TCHAR* getStrBuffer() const { return strBuffer; } // assignment operator SimpleString& operator=(const SimpleString& str) { if (this != &str) { delete[] strBuffer; strBuffer = new TCHAR[str.allocatedSize]; memcpy(strBuffer, str.strBuffer, str.allocatedSize*sizeof(TCHAR)); allocatedSize = str.allocatedSize; } return *this; } SimpleString& operator=(const char* str) { delete[] strBuffer; allocatedSize = (unsigned int)strlen(str)+1; strBuffer = new TCHAR[allocatedSize]; for (unsigned int i = 0; i < allocatedSize; i++) strBuffer[i] = str[i]; return *this; } // comparison is necessary too bool operator==(const SimpleString& str) const { return _tcscmp(strBuffer, str.strBuffer) == 0; } bool operator!=(const SimpleString& str) const { return _tcscmp(strBuffer, str.strBuffer) != 0; } int compareTo(const SimpleString& str) const { return _tcscmp(strBuffer, str.strBuffer); } void toUpper() { for (unsigned int i = 0; i < length(); i++) if (strBuffer[i] >= 'a' && strBuffer[i] <= 'z') strBuffer[i] -= 'a'-'A'; } ~SimpleString() { delete[] strBuffer; } unsigned int length() const { return (unsigned int)_tcslen(strBuffer); } void insertAt(unsigned int i, const SimpleString& s) { // doesn't work if (i > length()) return; allocatedSize = length() + s.length() + 1; TCHAR* newStr = new TCHAR[allocatedSize]; memcpy(newStr, strBuffer, i*sizeof(TCHAR)); memcpy(newStr + i, s.strBuffer, s.length()*sizeof(TCHAR)); memcpy(newStr + i + s.length(), strBuffer + i, (length() - i)*sizeof(TCHAR)); newStr[length() + s.length()] = 0; delete[] strBuffer; strBuffer = newStr; } void append(const SimpleString& s) { insertAt(length(), s); } void deleteAt(unsigned int i, unsigned int numChars) { // not possible if (i > length()) return; // nothing to delete if ((signed)length() - (signed)numChars < 0) return; // nothing to delete if (strBuffer[i] == 0) return; TCHAR* newStr = new TCHAR[length() - numChars + 1]; allocatedSize = length() - numChars + 1; memcpy(newStr, strBuffer, i*sizeof(TCHAR)); memcpy(newStr + i, strBuffer + i + numChars, (length() - i - numChars)*sizeof(TCHAR)); newStr[length() - numChars] = 0; delete[] strBuffer; strBuffer = newStr; } void replace(const SimpleString& str) { delete[] strBuffer; strBuffer = new TCHAR[str.allocatedSize]; memcpy(strBuffer, str.strBuffer, str.allocatedSize*sizeof(TCHAR)); allocatedSize = str.allocatedSize; } SimpleString stripPath() const { TCHAR* ptr = strBuffer+_tcslen(strBuffer); while (ptr > strBuffer && *ptr != '\\') ptr--; if (ptr != strBuffer) ptr++; SimpleString str = ptr; return str; } SimpleString stripExtension() const { TCHAR* ptr = strBuffer+_tcslen(strBuffer); while (ptr > strBuffer && *ptr != '.' && *ptr != '\\') ptr--; if (*ptr == '\\') return strBuffer; if (ptr != strBuffer) { SimpleString str; delete[] str.strBuffer; str.allocatedSize = (unsigned int)((ptr-strBuffer)+1); str.strBuffer = new TCHAR[str.allocatedSize]; memcpy(str.strBuffer, strBuffer, (ptr-strBuffer)*sizeof(TCHAR)); str.strBuffer[(ptr-strBuffer)] = '\0'; return str; } else { return ptr; } } SimpleString getExtension() const { TCHAR* ptr = strBuffer+_tcslen(strBuffer); while (ptr > strBuffer && *ptr != '.' && *ptr != '/') ptr--; if (*ptr != '.') return _T(""); return ptr; } }; #endif MilkyTracker-1.02.00/src/tracker/wince/VirtualKeyToScanCodeTable.cpp000066400000000000000000000036151324432207300252650ustar00rootroot00000000000000/* * tracker/wince/VirtualKeyToScanCodeTable.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "VirtualKeyToScanCodeTable.h" const pp_int16 vkeyToScancode[256] = { -1, -1, -1, -1, -1, -1, -1, -1, 14, 15, -1, -1, -1, 28, -1, -1, 54, 29, -1, -1, 58, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, 57, 73, 81, 79, 71, 75, 72, 77, 80, -1, -1, -1, -1, 82, 83, -1, 11, 2, 3, 4, 5, 6, 7, 8, 9, 10, -1, -1, -1, -1, -1, -1, -1, 30, 48, 46, 32, 18, 33, 34, 35, 23, 36, 37, 38, 50, 49, 24, 25, 16, 19, 31, 20, 22, 47, 17, 45, 21, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 87, 88, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 29, -1, 56, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 39, 13, 51, 12, 52, 53, 41, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 26, 43, 27, 40, -1, -1, -1, 86, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 56 }; MilkyTracker-1.02.00/src/tracker/wince/VirtualKeyToScanCodeTable.h000066400000000000000000000016651324432207300247350ustar00rootroot00000000000000/* * tracker/wince/VirtualKeyToScanCodeTable.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #ifndef __VIRTUALKEYTOSCANCODETABLE_H__ #define __VIRTUALKEYTOSCANCODETABLE_H__ #include "BasicTypes.h" extern const pp_int16 vkeyToScancode[256]; #endif MilkyTracker-1.02.00/src/tracker/wince/WaitStateThread.cpp000066400000000000000000000134601324432207300233470ustar00rootroot00000000000000/* * tracker/wince/WaitStateThread.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "WaitStateThread.h" #include "PPMutex.h" extern unsigned short* vScreen; extern PPMutex* globalMutex; void UpdateScreen(unsigned short* vScreen); void drawString(const char* textBuffer,unsigned short* drawBuffer,unsigned int pitch, unsigned int posx,unsigned int posy, unsigned short col); WaitStateThread* WaitStateThread::instance = NULL; WaitStateThread::WaitStateThread() { bActivated = FALSE; nSleepTime = 250; hThread = NULL; threadID = 0; saveBuffer = NULL; xres = 320; yres = 240; pitch = 320; UpperLeftX = 160-70; UpperLeftY = 120-30; LowerRightX = 160+70; LowerRightY = 120+30; Width = (LowerRightX - UpperLeftX); Height = (LowerRightY - UpperLeftY); hThread = CreateThread(NULL, 0, &MyThreadProc, (LPVOID)this, 0, &threadID); bActivated = FALSE; nSleepTime = 250; } void WaitStateThread::setDisplayResolution(int width, int height) { xres = pitch = width; yres = height; UpperLeftX = (width>>1)-70; UpperLeftY = (height>>1)-30; LowerRightX = (width>>1)+70; LowerRightY = (height>>1)+30; Width = (LowerRightX - UpperLeftX); Height = (LowerRightY - UpperLeftY); } static void SaveArea(unsigned short* saveBuffer, unsigned short* src, unsigned int pitch, const int fromX, const int fromY, const int toX, const int toY) { const int Width = (toX - fromX); const int Height = (toY - fromY); for (int y = fromY; y < toY; y++) { for (int x = fromX; x < toX; x++) { unsigned short* vPtr = src + y*pitch+x; unsigned short* dst = saveBuffer + (y-fromY) * Width + (x-fromX); *dst = *vPtr; } } } static void RestoreArea(unsigned short* src, unsigned short* saveBuffer, unsigned int pitch, const int fromX, const int fromY, const int toX, const int toY) { const int Width = (toX - fromX); const int Height = (toY - fromY); for (int y = fromY; y < toY; y++) { for (int x = fromX; x < toX; x++) { unsigned short* vPtr = src + y*pitch+x; unsigned short* dst = saveBuffer + (y-fromY) * Width + (x-fromX); *vPtr = *dst; } } } static void Darken(unsigned short* buffer, unsigned short pitch, const int fromX, const int fromY, const int toX, const int toY, const int scale) { int x,y; for (y = fromY; y < toY; y++) { buffer[y*pitch+fromX] = 0xFFFF; buffer[y*pitch+toX-1] = 0xFFFF; } for (x = fromX; x < toX; x++) { buffer[fromY*pitch+x] = 0xFFFF; buffer[(toY-1)*pitch+x] = 0xFFFF; } for (y = fromY+1; y < toY-1; y++) { for (x = fromX+1; x < toX-1; x++) { unsigned short* vPtr = buffer + y*pitch+x; int r = ((*vPtr >> 11)*scale)>>8; int g = (((*vPtr >> 5)&0x3F)*scale)>>8; int b = ((*vPtr & 0x1F)*scale)>>8; *vPtr = (r << 11) + (g << 5) + b; } } } static void DrawWaitBar(unsigned short* buffer, const unsigned int width, const unsigned int height) { const unsigned int barWidth = 80; const unsigned int BAR_BRIGHT_COLOR = 0xffffff; const unsigned int BAR_DARK_COLOR = 0x103f67; static int offset = 0; int hBarPos = (width >> 1) - (barWidth>>1); int vBarPos = (height >> 1) + 2; //int vBarPos = LowerRightY - 20 - 8; unsigned short* vPtr = buffer + (vBarPos*width) + hBarPos; for (int y = 0; y < 8; y++) { for (int x = 0; x < barWidth; x++) { // rand fr arme/faule if ((y == 0) || (y == 7) || (x == 0) || (x == barWidth-1)) { *vPtr = 0xFFFF; } else { int c = (x+y+(offset)) & 0xf; int shade = 0; if (c <= 7) shade = c; else shade = 7 - (c - 8); shade = 255-(shade*32); DWORD red = ((BAR_BRIGHT_COLOR >> 16) * shade + (BAR_DARK_COLOR >> 16) * (255-shade)) >> 8; DWORD green = (((BAR_BRIGHT_COLOR >> 8) & 0xff) * shade + ((BAR_DARK_COLOR >> 8) & 0xff) * (255-shade)) >> 8; DWORD blue = ((BAR_BRIGHT_COLOR & 0xff) * shade + (BAR_DARK_COLOR & 0xff) * (255-shade)) >> 8; *vPtr = (WORD)((blue>>3) + ((green>>2)<<5)+ ((red>>3)<<11)); } vPtr++; } vPtr+=width-barWidth; } offset+=4; } DWORD WINAPI WaitStateThread::MyThreadProc(LPVOID lpParameter) { WaitStateThread* thisPtr = (WaitStateThread*)lpParameter; while (true) { if (thisPtr->bActivated) { DrawWaitBar(vScreen, thisPtr->xres, thisPtr->yres); UpdateScreen(vScreen); } Sleep(thisPtr->nSleepTime); } ExitThread(0); return 0; } void WaitStateThread::activate(BOOL bActivate,BOOL bDarken/* = TRUE*/, BOOL bPutText/* = TRUE*/) { if (bActivate) { globalMutex->lock(); if (!saveBuffer) { saveBuffer = new WORD[Width*Height]; if (saveBuffer) SaveArea(saveBuffer, vScreen, xres, UpperLeftX, UpperLeftY, LowerRightX, LowerRightY); } Darken(vScreen, xres, UpperLeftX, UpperLeftY, LowerRightX, LowerRightY, bDarken ? 128 : 256); if (bPutText) drawString("please wait", vScreen, xres, (xres>>1)-11*4, (yres>>1)-12, 0xFFFF); bActivated = TRUE; nSleepTime = 100; globalMutex->unlock(); } else { globalMutex->lock(); bActivated = FALSE; nSleepTime = 250; if (saveBuffer) { RestoreArea(vScreen, saveBuffer, xres, UpperLeftX, UpperLeftY, LowerRightX, LowerRightY); delete saveBuffer; saveBuffer = NULL; } globalMutex->unlock(); } } MilkyTracker-1.02.00/src/tracker/wince/WaitStateThread.h000066400000000000000000000030371324432207300230130ustar00rootroot00000000000000/* * tracker/wince/WaitStateThread.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #ifndef WAITSTATETHREAD__H #define WAITSTATETHREAD__H #include class WaitStateThread { private: static WaitStateThread* instance; BOOL bActivated; DWORD nSleepTime; DWORD threadID; HANDLE hThread; WORD* saveBuffer; // display width, height, pitch in 16 bit words int xres, yres, pitch; int UpperLeftX, UpperLeftY; int LowerRightX, LowerRightY; // area width, height int Width, Height; static DWORD WINAPI MyThreadProc(LPVOID lpParameter); WaitStateThread(); public: static WaitStateThread* getInstance() { if (instance == NULL) instance = new WaitStateThread(); return instance; } void setDisplayResolution(int width, int height); void activate(BOOL bActivate, BOOL bDarken = TRUE, BOOL bPutText = TRUE); }; #endif MilkyTracker-1.02.00/src/tracker/wince/WinCE_NEWRES.H000066400000000000000000000015631324432207300217500ustar00rootroot00000000000000#ifndef __NEWRES_H__ #define __NEWRES_H__ #if !defined(UNDER_CE) #define UNDER_CE _WIN32_WCE #endif #if defined(_WIN32_WCE) #if !defined(WCEOLE_ENABLE_DIALOGEX) #define DIALOGEX DIALOG DISCARDABLE #endif #include #define SHMENUBAR RCDATA #if defined(WIN32_PLATFORM_PSPC) && (_WIN32_WCE >= 300) #include #define AFXCE_IDR_SCRATCH_SHMENU 28700 #else #define I_IMAGENONE (-2) #define NOMENU 0xFFFF #define IDS_SHNEW 1 #define IDM_SHAREDNEW 10 #define IDM_SHAREDNEWDEFAULT 11 #endif // _WIN32_WCE_PSPC #define AFXCE_IDD_SAVEMODIFIEDDLG 28701 #endif // _WIN32_WCE #ifdef RC_INVOKED #ifndef _INC_WINDOWS #define _INC_WINDOWS #include "winuser.h" // extract from windows header #include "winver.h" #endif #endif #ifdef IDC_STATIC #undef IDC_STATIC #endif #define IDC_STATIC (-1) #endif //__NEWRES_H__ MilkyTracker-1.02.00/src/tracker/wince/WinCE_ThreadTimer.cpp000066400000000000000000000045121324432207300235450ustar00rootroot00000000000000/* * tracker/wince/WinCE_ThreadTimer.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #include "WinCE_ThreadTimer.h" CThreadTimer::CThreadTimer():object(0),idEvent(0),elapse(0), isActive(FALSE) { InitializeCriticalSection(&lock); } CThreadTimer::~CThreadTimer() { DeleteCriticalSection(&lock); } UINT CThreadTimer::SetTimer (void* obj, UINT nIDEvent, UINT uElapse, ThreadTimerProc lpTimerProc) { object = obj; idEvent = nIDEvent; elapse = uElapse; proc = lpTimerProc; EnterCriticalSection(&lock); // is it already active? if (isActive) { LeaveCriticalSection(&lock); return 0; } // Start the thread DWORD threadId; HANDLE threadHandle = CreateThread (NULL, 0, CThreadTimer::ThreadFunction, this, 0, &threadId); //SetThreadPriority(threadHandle,THREAD_PRIORITY_HIGHEST); // this is optional SetThreadPriority(threadHandle,THREAD_PRIORITY_ABOVE_NORMAL); // this is optional isActive = TRUE; LeaveCriticalSection(&lock); return nIDEvent; } BOOL CThreadTimer::KillTimer() { EnterCriticalSection(&lock); isActive = FALSE; LeaveCriticalSection(&lock); return TRUE; } DWORD WINAPI CThreadTimer::ThreadFunction (LPVOID pParam) { // Here is the heart of our little timer CThreadTimer* obj = (CThreadTimer*) pParam; BOOLEAN isActive = TRUE; do { Sleep(obj->elapse); obj->proc (obj->object, obj->idEvent); EnterCriticalSection(&obj->lock); isActive = obj->isActive; LeaveCriticalSection(&obj->lock); } while (isActive); return 0; } MilkyTracker-1.02.00/src/tracker/wince/WinCE_ThreadTimer.h000066400000000000000000000030021324432207300232030ustar00rootroot00000000000000/* * tracker/wince/WinCE_ThreadTimer.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #ifndef THREADTIMER__H #define THREADTIMER__H #include typedef void (*ThreadTimerProc)(void* obj, UINT idEvent); class CThreadTimer { void* object; // pointer to the "parent" object (like CTimersDlg) UINT idEvent; // timer ID UINT elapse; // "Sleep time" in milliseconds ThreadTimerProc proc; // Callback function, supplied by the user BOOL isActive; // Set to FALSE after the call to KillTimer CRITICAL_SECTION lock; // thread synchronization static DWORD WINAPI ThreadFunction (LPVOID pParam); // thread entry point public: CThreadTimer(); virtual ~CThreadTimer(); UINT SetTimer (void* obj, UINT nIDEvent, UINT uElapse, ThreadTimerProc lpTimerProc); BOOL KillTimer(); }; #endif MilkyTracker-1.02.00/src/tracker/wince/WinCE_main.cpp000066400000000000000000001154411324432207300222650ustar00rootroot00000000000000/* * tracker/wince/WinCE_main.cpp * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ // ------------------ WinCE ------------------------------- #include #include #include #include "WinCE_main.h" #include "VirtualKeyToScanCodeTable.h" // ------------------ tracker ----------------------------- #include "PPUI.h" #include "PPMutex.h" #include "Screen.h" #include "Tracker.h" #include "DisplayDevice_GAPI.h" #include "ButtonMapper.h" #include "WaitStateThread.h" #include "LogoSmall.h" #include "XMFile.h" #include "GlobalColorConfig.h" #define WINDOWS_DEFAULT_TIMER #undef RESOLUTION_CHECK #define MAX_LOADSTRING 100 #define DBLCLKTIME 1000 #define DRAGSENSITIVITY 2 HINSTANCE hInst; // The current instance WNDCLASS wc; HWND hwndCB; // The command bar handle HWND hWnd; BOOL gxInit = FALSE; BOOL taskBar = TRUE; BOOL gxActive = FALSE; PPMutex* globalMutex = NULL; unsigned short* vScreen = NULL; PPSize windowSize(DISPLAYDEVICE_WIDTH,DISPLAYDEVICE_HEIGHT); // Global GAPI variables: GXDisplayProperties gx_displayprop; #ifndef WINDOWS_DEFAULT_TIMER #include "WinCE_ThreadTimer.h" #define WM_MYTIMER (WM_USER + 10) static CThreadTimer myThreadTimer; void MyThreadTimerProc(void* obj, UINT idEvent) { SendMessage(hWnd, WM_MYTIMER, 0, 0); } #endif // ------------------ Tracker -------------------------------------------------------------------------- EOrientation orientation = eOrientation90CW; pp_int32 doublePixels = FALSE; pp_int32 allowVirtualKeys = FALSE; pp_int32 hideTaskBar = TRUE; pp_int32 dontTurnOffDevice = FALSE; static PPScreen* myTrackerScreen = NULL; static Tracker* myTracker = NULL; static PPDisplayDevice* myDisplayDevice = NULL; // ------------------- Logger ----------------------------- #ifdef DEBUG #include "Logger.h" #include "Simple.h" #include "PPSystem.h" static CLogger* logger = NULL; #endif void TrackerCreate(); void TrackerStartUp(bool showSplash); void TrackerInitGUI(bool showSplash); // ------------------ Forward declarations of functions included in this code module: ------------------ void TaskBar(bool show); ATOM MyRegisterClass(HINSTANCE, LPTSTR); BOOL InitInstance(HINSTANCE, int); LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); // ------------------ debugging forwards --------------------------------------------------------------- void drawString(const char*, unsigned short*, unsigned int, unsigned int, unsigned int, unsigned short); // ------------------- update screen ------------------------------------------------------------------- void UpdateScreen(unsigned short*); void UpdateScreen(); void DrawBackground(bool shade = true); bool NeedsDrawBackground(); ////////////////////////////////////////////////////////////////////////// // Exported functions: // PPGetTickCount() is used for milisecond timing // QueryKeyModifiers is used for detecting the state of the modifier keys // SuspendFullScreen() is used to disable full screen mode // ResumeFullScreen() is used to disable full screen mode ////////////////////////////////////////////////////////////////////////// pp_uint32 PPGetTickCount() { return ::GetTickCount(); } void QueryKeyModifiers() { if (::GetAsyncKeyState(VK_SHIFT)>>15) setKeyModifier(KeyModifierSHIFT); else clearKeyModifier(KeyModifierSHIFT); if (::GetAsyncKeyState(VK_MENU)>>15) setKeyModifier(KeyModifierALT); else clearKeyModifier(KeyModifierALT); if (::GetAsyncKeyState(VK_CONTROL)>>15) setKeyModifier(KeyModifierCTRL); else clearKeyModifier(KeyModifierCTRL); } void SuspendFullScreen() { GXCloseInput(); GXCloseDisplay(); TaskBar(true); gxActive = FALSE; ShowWindow(hWnd, SW_SHOW); } void ResumeFullScreen() { ShowWindow(hWnd, SW_SHOW); TaskBar(false); SHSipPreference(hWnd, SIP_FORCEDOWN); GXOpenDisplay(hWnd, GX_FULLSCREEN); GXOpenInput(); gxActive = TRUE; // clear screen with shade if necessary if (NeedsDrawBackground()) DrawBackground(); UpdateScreen(); } ////////////////////////////////////////////////////////////////////////// // Taskbar handling ////////////////////////////////////////////////////////////////////////// void TaskBar(bool show) { if (!hideTaskBar) return; RECT rc; GetWindowRect( hWnd, &rc ); HWND hWndTB = FindWindow(TEXT("HHTaskbar"),NULL); if (show && hWndTB) { if (taskBar) return; SHFullScreen( hWnd, SHFS_SHOWTASKBAR | SHFS_SHOWSIPBUTTON + SHFS_SHOWSTARTICON ); ShowWindow( hWndTB, SW_SHOW ); MoveWindow( hWnd, rc.left, rc.top + 26, rc.right, rc.bottom - 26, TRUE ); taskBar = TRUE; } else if (hWndTB) { if (!taskBar) return; SHFullScreen( hWnd, SHFS_HIDETASKBAR | SHFS_HIDESIPBUTTON + SHFS_HIDESTARTICON ); ShowWindow( hWndTB, SW_HIDE ); MoveWindow( hWnd, rc.left, rc.top - 26, rc.right, rc.bottom + 26, TRUE ); taskBar = FALSE; } } ////////////////////////////////////////////////////////////////////////// // Init GAPI // To-do: Should go into DisplayDevice someday ////////////////////////////////////////////////////////////////////////// BOOL InitGAPI(HWND hWnd) { TaskBar(false); // Attempt to take over the screen if (GXOpenDisplay( hWnd, GX_FULLSCREEN) == 0) return FALSE; gxActive = TRUE; // Get display properties gx_displayprop = GXGetDisplayProperties(); #ifdef RESOLUTION_CHECK if ((gx_displayprop.cyHeight!=320)||(gx_displayprop.cxWidth!=240)) { // Only dealing with 240x320 resolution in this code GXCloseDisplay(); MessageBox(hWnd,L"Sorry, only supporting 240x320 display devices",L"Sorry!", MB_OK); return FALSE; } #endif // Check for 16 bit color display if (gx_displayprop.cBPP != 16) { // Only dealing with 16 bit color in this code GXCloseDisplay(); MessageBox(hWnd,L"Sorry, only supporting 16bit color",L"Sorry!", MB_OK); return FALSE; } // Take over button handling GXOpenInput(); globalMutex = new PPMutex(); return TRUE; } ////////////////////////////////////////////////////////////////////////// // Dispose GAPI ////////////////////////////////////////////////////////////////////////// void ExitGAPI() { if (gxActive) { // Clean up GXSuspend(); GXCloseInput(); GXCloseDisplay(); TaskBar(true); gxActive = false; } } void HandleCommandLine(LPCTSTR lpCmdLine) { // Retrieve input file PPSystemString fileInput(lpCmdLine); // When there is something specified, check if it's an existing file if (fileInput.length() && XMFile::exists(fileInput)) { PPSystemString* strPtr = &fileInput; PPEvent event(eFileDragDropped, &strPtr, sizeof(PPSystemString*)); myTrackerScreen->raiseEvent(&event); } } int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { #ifdef DEBUG SimpleString path(System::getConfigFileName(_T("milky.log"))); CLogger _logger(path); logger = &_logger; #endif MSG msg; HACCEL hAccelTable; // Perform application initialization: if (!InitInstance (hInstance, nCmdShow)) { TaskBar(true); return FALSE; } HandleCommandLine(lpCmdLine); #ifndef WINDOWS_DEFAULT_TIMER HANDLE hThread = GetCurrentThread(); SetThreadPriority(hThread, THREAD_PRIORITY_BELOW_NORMAL); #endif hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_FIRSTGX); while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } delete myTracker; delete myTrackerScreen; ExitGAPI(); delete globalMutex; return msg.wParam; } ATOM MyRegisterClass(HINSTANCE hInstance, LPTSTR szWindowClass) { WNDCLASS wc; wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = (WNDPROC) WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = NULL; //wc.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_GAPI1)); wc.hCursor = 0; wc.hbrBackground = (HBRUSH) GetStockObject(HOLLOW_BRUSH); wc.lpszMenuName = 0; wc.lpszClassName = szWindowClass; return RegisterClass(&wc); } BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) { TCHAR szTitle[MAX_LOADSTRING]; // The title bar text TCHAR szWindowClass[MAX_LOADSTRING]; // The window class name hInst = hInstance; // Store instance handle in our global variable // Initialize global strings LoadString(hInstance, IDC_FIRSTGX, szWindowClass, MAX_LOADSTRING); LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); //If it is already running, then focus on the window hWnd = FindWindow(szWindowClass, szTitle); if (hWnd) { SetForegroundWindow ((HWND) (((DWORD)hWnd) | 0x01)); return 0; } MyRegisterClass(hInstance, szWindowClass); RECT rect; GetClientRect(hWnd, &rect); hWnd = CreateWindow(szWindowClass, szTitle, WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); if (!hWnd) { return FALSE; } // This will also load local WinCE config InitButtonRemapper(); if (!InitGAPI(hWnd)) return FALSE; TrackerCreate(); bool showSplash = myTracker->getShowSplashFlagFromDatabase(); TrackerInitGUI(showSplash); TrackerStartUp(showSplash); UpdateScreen(); // Create timers #ifdef WINDOWS_DEFAULT_TIMER SetTimer(hWnd, 10, 20, NULL); #else myThreadTimer.SetTimer (NULL, 1, 20, MyThreadTimerProc); #endif return TRUE; } ////////////////////////////////////////////////////////////////////////// // Convert final coordinates from current orientation ////////////////////////////////////////////////////////////////////////// void POINTFROMPARAM(PPPoint& point, int param) { const unsigned int screenWidth = ::windowSize.width; const unsigned int screenHeight = ::windowSize.height; switch (orientation) { case eOrientation90CW: { int hCenter = (gx_displayprop.cxWidth >> 1) - ((screenHeight<> 1); if (hCenter < 0) hCenter = 0; int vCenter = (gx_displayprop.cyHeight >> 1) - ((screenWidth<> 1); if (vCenter < 0) vCenter = 0; point.y = LOWORD(param) - hCenter; point.x = (gx_displayprop.cyHeight - 1 - (HIWORD(param) + vCenter)); break; } case eOrientation90CCW: { int hCenter = (gx_displayprop.cxWidth >> 1) - ((screenHeight<> 1); if (hCenter < 0) hCenter = 0; int vCenter = (gx_displayprop.cyHeight >> 1) - ((screenWidth<> 1); if (vCenter < 0) vCenter = 0; point.y = gx_displayprop.cxWidth - 1 - (LOWORD(param) + hCenter); point.x = HIWORD(param) - vCenter; break; } case eOrientationNormal: int hCenter = (gx_displayprop.cxWidth >> 1) - ((screenWidth<> 1); if (hCenter < 0) hCenter = 0; int vCenter = (gx_displayprop.cyHeight >> 1) - ((screenHeight<> 1); if (vCenter < 0) vCenter = 0; point.x = LOWORD(param) - hCenter; point.y = HIWORD(param) - vCenter; break; } point.x >>= doublePixels; point.y >>= doublePixels; } void UpdateScreen(unsigned short* vScreen) { if (!gxActive) return; globalMutex->lock(); // Get the start of the screen memory from the GX function. unsigned short * buffer = (unsigned short *) GXBeginDraw(); unsigned short * line_buffer = buffer; if (buffer == NULL) { globalMutex->unlock(); return; } const unsigned int screenWidth = ::windowSize.width; const unsigned int screenHeight = ::windowSize.height; const unsigned int hcbxpitch = gx_displayprop.cbxPitch >> 1; const unsigned int hcbypitch = gx_displayprop.cbyPitch >> 1; const unsigned int hRes = gx_displayprop.cxWidth >> doublePixels; const unsigned int vRes = gx_displayprop.cyHeight >> doublePixels; unsigned short* vscr = vScreen; if (gx_displayprop.ffFormat & kfDirect565) { switch (orientation) { case eOrientation90CW: { // PocketPC: gx_displayprop.cxWidth = 240, gx_displayprop.cyHeight = 320 const unsigned int width = hRes > screenHeight ? screenHeight : hRes; const unsigned int height = vRes > screenWidth ? screenWidth : vRes; int hCenter = (gx_displayprop.cxWidth >> 1) - ((screenHeight<> 1); if (hCenter < 0) hCenter = 0; int vCenter = (gx_displayprop.cyHeight >> 1) - ((screenWidth<> 1); if (vCenter < 0) vCenter = 0; if (!doublePixels) { for (unsigned int x=0; x screenHeight ? screenHeight : hRes; const unsigned int height = vRes > screenWidth ? screenWidth : vRes; int hCenter = (gx_displayprop.cxWidth >> 1) - ((screenHeight<> 1); if (hCenter < 0) hCenter = 0; int vCenter = (gx_displayprop.cyHeight >> 1) - ((screenWidth<> 1); if (vCenter < 0) vCenter = 0; if (!doublePixels) { for (unsigned int x=0; x screenWidth ? screenWidth : hRes; const unsigned int height = vRes > screenHeight ? screenHeight : vRes; int hCenter = (gx_displayprop.cxWidth >> 1) - ((screenWidth<> 1); if (hCenter < 0) hCenter = 0; int vCenter = (gx_displayprop.cyHeight >> 1) - ((screenHeight<> 1); if (vCenter < 0) vCenter = 0; if (!doublePixels) { for (unsigned int y=0; yunlock(); } void UpdateScreenRegion(unsigned short* vScreen, const PPRect& rect) { if (!gxActive) return; globalMutex->lock(); // Get the start of the screen memory from the GX function. unsigned short * buffer = (unsigned short *) GXBeginDraw(); unsigned short * line_buffer = buffer; if (buffer == NULL) { globalMutex->unlock(); return; } const unsigned int screenWidth = ::windowSize.width; const unsigned int screenHeight = ::windowSize.height; const unsigned int hcbxpitch = gx_displayprop.cbxPitch >> 1; const unsigned int hcbypitch = gx_displayprop.cbyPitch >> 1; const unsigned int hRes = gx_displayprop.cxWidth >> doublePixels; const unsigned int vRes = gx_displayprop.cyHeight >> doublePixels; unsigned short* vscr = vScreen + rect.y1 * screenWidth + rect.x1; if (gx_displayprop.ffFormat & kfDirect565) { switch (orientation) { case eOrientation90CW: { // PocketPC: gx_displayprop.cxWidth = 240, gx_displayprop.cyHeight = 320 const unsigned int width = hRes > screenHeight ? screenHeight : hRes; const unsigned int height = vRes > screenWidth ? screenWidth : vRes; if (rect.x1 >= (signed)height || rect.y1 >= (signed)width) break; int hCenter = (gx_displayprop.cxWidth >> 1) - ((screenHeight<> 1); if (hCenter < 0) hCenter = 0; int vCenter = (gx_displayprop.cyHeight >> 1) - ((screenWidth<> 1); if (vCenter < 0) vCenter = 0; int rx2 = rect.x2; int ry2 = rect.y2; if (rx2 > (signed)height) rx2 = height; if (ry2 > (signed)width) ry2 = width; if (!doublePixels) { for (int x=rect.y1; x screenHeight ? screenHeight : hRes; const unsigned int height = vRes > screenWidth ? screenWidth : vRes; if (rect.x1 >= (signed)height || rect.y1 >= (signed)width) break; int hCenter = (gx_displayprop.cxWidth >> 1) - ((screenHeight<> 1); if (hCenter < 0) hCenter = 0; int vCenter = (gx_displayprop.cyHeight >> 1) - ((screenWidth<> 1); if (vCenter < 0) vCenter = 0; int rx2 = rect.x2; int ry2 = rect.y2; if (rx2 > (signed)height) rx2 = height; if (ry2 > (signed)width) ry2 = width; if (!doublePixels) { for (int x=rect.y1; x screenWidth ? screenWidth : hRes; int height = vRes > screenHeight ? screenHeight : vRes; if (rect.x1 >= width || rect.y1 >= height) break; int hCenter = (gx_displayprop.cxWidth >> 1) - ((screenWidth<> 1); if (hCenter < 0) hCenter = 0; int vCenter = (gx_displayprop.cyHeight >> 1) - ((screenHeight<> 1); if (vCenter < 0) vCenter = 0; int rx2 = rect.x2; int ry2 = rect.y2; if (rx2 > width) rx2 = width; if (ry2 > height) ry2 = height; if (!doublePixels) { for (int y=rect.y1; yunlock(); } void UpdateScreen() { if (myTrackerScreen) { myTrackerScreen->paint(); } UpdateScreen(vScreen); } void DrawBackground(bool shade) { if (!gxActive) return; globalMutex->lock(); // Get the start of the screen memory from the GX function. unsigned short * buffer = (unsigned short *) GXBeginDraw(); if (buffer == NULL) { globalMutex->unlock(); return; } const unsigned int screenWidth = gx_displayprop.cxWidth; const unsigned int screenHeight = gx_displayprop.cyHeight; const unsigned int hcbxpitch = gx_displayprop.cbxPitch >> 1; const unsigned int hcbypitch = gx_displayprop.cbyPitch >> 1; if (shade) { PPColor col = GlobalColorConfig::getInstance()->getColor(GlobalColorConfig::ColorTheme); PPColor srcCol = col, dstCol = col; srcCol.scaleFixed(32768); for (unsigned int y = 0; y < screenHeight; y++) for (unsigned int x = 0; x < screenWidth; x++) { unsigned short* pixel = buffer+x*hcbxpitch+y*hcbypitch; int r,g,b; switch (orientation) { case eOrientation90CW: { int s = (x*65536) / screenWidth; r = ((srcCol.r) * s + dstCol.r * (65535-s)) >> (16 + 3); g = ((srcCol.g) * s + dstCol.g * (65535-s)) >> (16 + 2); b = ((srcCol.b) * s + dstCol.b * (65535-s)) >> (16 + 3); break; } case eOrientation90CCW: { int s = (x*65536) / screenWidth; r = ((srcCol.r) * (65535-s) + dstCol.r * s) >> (16 + 3); g = ((srcCol.g) * (65535-s) + dstCol.g * s) >> (16 + 2); b = ((srcCol.b) * (65535-s) + dstCol.b * s) >> (16 + 3); break; } case eOrientationNormal: { int s = (y*65536) / screenHeight; r = ((srcCol.r) * s + dstCol.r * (65535-s)) >> (16 + 3); g = ((srcCol.g) * s + dstCol.g * (65535-s)) >> (16 + 2); b = ((srcCol.b) * s + dstCol.b * (65535-s)) >> (16 + 3); break; } } *pixel = (r << 11) + (g << 5) + b; } } else { for (unsigned int y = 0; y < screenHeight; y++) for (unsigned int x = 0; x < screenWidth; x++) { unsigned short* pixel = buffer+x*hcbxpitch+y*hcbypitch; *pixel = 0; } } // End the drawing code GXEndDraw(); globalMutex->unlock(); } bool NeedsDrawBackground() { switch (orientation) { case eOrientation90CCW: case eOrientation90CW: { return (gx_displayprop.cxWidth != (unsigned)windowSize.height) || (gx_displayprop.cyHeight != (unsigned)windowSize.width); } case eOrientationNormal: { return (gx_displayprop.cxWidth != (unsigned)windowSize.width) || (gx_displayprop.cyHeight != (unsigned)windowSize.height); } } return false; } void TrackerCreate() { myTracker = new Tracker(); windowSize = myTracker->getWindowSizeFromDatabase(); #ifdef __LOWRES__ windowSize.width = DISPLAYDEVICE_WIDTH; windowSize.height = DISPLAYDEVICE_HEIGHT; #endif // Allocate virtual screen vScreen = new unsigned short[windowSize.width*windowSize.height]; // Clear virtual screen memset(vScreen, 0, windowSize.width*windowSize.height*sizeof(unsigned short)); myDisplayDevice = new PPDisplayDevice(hWnd, windowSize.width, windowSize.height); myDisplayDevice->setSize(windowSize); myTrackerScreen = new PPScreen(myDisplayDevice, myTracker); myTracker->setScreen(myTrackerScreen); } void TrackerStartUp(bool showSplash) { // Startup procedure myTracker->startUp(true); WaitStateThread::getInstance()->activate(FALSE); myTrackerScreen->enableDisplay(true); if (showSplash) myTracker->hideSplash(); // clear screen with shade if necessary if (NeedsDrawBackground()) DrawBackground(); myTrackerScreen->paint(false); } void TrackerInitGUI(bool showSplash) { // clear screen with black if necessary if (NeedsDrawBackground()) DrawBackground(false); if (showSplash) myTracker->showSplash(); myTrackerScreen->enableDisplay(false); // Put init message on screen drawString("initializing", vScreen, windowSize.width, (windowSize.width>>1)-12*4, (windowSize.height>>1)-12, 0xFFFF); WaitStateThread::getInstance()->setDisplayResolution(windowSize.width, windowSize.height); WaitStateThread::getInstance()->activate(TRUE, TRUE, FALSE); } #ifdef DEBUG void LogWinMsg(CLogger& logger, LPCTSTR msg, LPARAM lParam) { TCHAR dummy[1024]; wsprintf(dummy, _T("%x"), lParam); SimpleString logstr(msg); logstr.append(_T(": ")); logstr.append(dummy); logger.Log(logstr); } void LogMouseDown(CLogger& logger, LPARAM lParam, const PPPoint& point) { TCHAR dummy[1024]; wsprintf(dummy, _T("Before: %i, %i"), LOWORD(lParam), HIWORD(lParam)); SimpleString logstr(dummy); logstr.append(_T(" ")); wsprintf(dummy, _T("After: %i, %i"), point.x, point.y); logstr.append(dummy); logger.Log(logstr); } #endif LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { static bool LMouseDrag = false; static PPPoint LMouseDragStartPoint; static bool RMouseDrag = false; static PPPoint RMouseDragStartPoint; static DWORD ltime; static PPPoint llastClickPosition = PPPoint(0,0); static WORD lClickCount = 0; static BOOL lMouseDown = FALSE; static DWORD lButtonDownStartTime; static BOOL rMouseDown = FALSE; static DWORD rtime; static PPPoint rlastClickPosition = PPPoint(0,0); static WORD rClickCount = 0; static DWORD rButtonDownStartTime; static DWORD timerTicker = 0; static DWORD idleResetCounter = 1; static PPPoint p; if (lClickCount > 4) { lClickCount = 0; } if (rClickCount > 4) { rClickCount = 0; } switch (msg) { #ifdef WINDOWS_DEFAULT_TIMER case WM_PAINT: DefWindowProc(hWnd, msg, wParam, lParam); return 0; #else case WM_PAINT: return 0; #endif case WM_SIZE: { #ifdef DEBUG LogWinMsg(*logger, _T("WM_SIZE"), lParam); #endif break; } // ----- left mousebutton ------------------------------- case WM_LBUTTONDOWN: { if (!myTrackerScreen || rMouseDown) break; POINTFROMPARAM(p, lParam); #ifdef DEBUG LogWinMsg(*logger, _T("WM_LBUTTONDOWN"), lParam); LogMouseDown(*logger, lParam, p); #endif PPEvent myEvent(eLMouseDown, &p, sizeof(PPPoint)); myTrackerScreen->raiseEvent(&myEvent); lMouseDown = TRUE; //lButtonDownStartTime = timerTicker; lButtonDownStartTime = GetTickCount(); if (!lClickCount) { ltime = GetTickCount(); POINTFROMPARAM(llastClickPosition, lParam); } else if (lClickCount == 2) { DWORD deltat = GetTickCount() - ltime; if (deltat > DBLCLKTIME) { lClickCount = 0; ltime = GetTickCount(); POINTFROMPARAM(llastClickPosition, lParam); } } lClickCount++; break; } // ----- right mousebutton ------------------------------- case WM_RBUTTONDOWN: { if (!myTrackerScreen || lMouseDown) break; POINTFROMPARAM(p, lParam); PPEvent myEvent(eRMouseDown, &p, sizeof(PPPoint)); myTrackerScreen->raiseEvent(&myEvent); rMouseDown = TRUE; //rButtonDownStartTime = timerTicker; rButtonDownStartTime = GetTickCount(); if (!rClickCount) { rtime = GetTickCount(); POINTFROMPARAM(rlastClickPosition, lParam); } else if (rClickCount == 2) { DWORD deltat = GetTickCount() - rtime; if (deltat > DBLCLKTIME) { rClickCount = 0; rtime = GetTickCount(); POINTFROMPARAM(rlastClickPosition, lParam); } } rClickCount++; break; } // ----- left mousebutton ------------------------------- case WM_LBUTTONUP: { LMouseDrag = false; if (!myTrackerScreen || !lMouseDown) break; lClickCount++; if (lClickCount == 4) { DWORD deltat = GetTickCount() - ltime; if (deltat < DBLCLKTIME) { POINTFROMPARAM(p, lParam); if (abs(p.x - llastClickPosition.x) < 4 && abs(p.y - llastClickPosition.y) < 4) { PPEvent myEvent(eLMouseDoubleClick, &p, sizeof(PPPoint)); myTrackerScreen->raiseEvent(&myEvent); } } lClickCount = 0; } POINTFROMPARAM(p, lParam); PPEvent myEvent(eLMouseUp, &p, sizeof(PPPoint)); myTrackerScreen->raiseEvent(&myEvent); lMouseDown = FALSE; break; } // ----- right mousebutton ------------------------------- case WM_RBUTTONUP: { RMouseDrag = false; if (!myTrackerScreen || !rMouseDown) break; rClickCount++; if (rClickCount == 4) { DWORD deltat = GetTickCount() - rtime; if (deltat < DBLCLKTIME) { POINTFROMPARAM(p, lParam); if (abs(p.x - rlastClickPosition.x) < 4 && abs(p.y - rlastClickPosition.y) < 4) { PPEvent myEvent(eRMouseDoubleClick, &p, sizeof(PPPoint)); myTrackerScreen->raiseEvent(&myEvent); } } rClickCount = 0; } POINTFROMPARAM(p, lParam); PPEvent myEvent(eRMouseUp, &p, sizeof(PPPoint)); myTrackerScreen->raiseEvent(&myEvent); rMouseDown = FALSE; break; } case WM_MOUSEMOVE: { if (!myTrackerScreen) break; if ((wParam&MK_LBUTTON) && lMouseDown) { POINTFROMPARAM(p, lParam); if (!LMouseDrag) { LMouseDragStartPoint = p; LMouseDrag = true; } if (LMouseDrag && (abs(LMouseDragStartPoint.x - p.x) >= DRAGSENSITIVITY || abs(LMouseDragStartPoint.y - p.y) >= DRAGSENSITIVITY)) { PPEvent myEvent(eLMouseDrag, &p, sizeof(PPPoint)); myTrackerScreen->raiseEvent(&myEvent); } } else if ((wParam&MK_RBUTTON) && rMouseDown) { POINTFROMPARAM(p, lParam); if (!RMouseDrag) { RMouseDragStartPoint = p; RMouseDrag = true; } if (RMouseDrag && (abs(RMouseDragStartPoint.x - p.x) >= DRAGSENSITIVITY || abs(RMouseDragStartPoint.y - p.y) >= DRAGSENSITIVITY)) { PPEvent myEvent(eRMouseDrag, &p, sizeof(PPPoint)); myTrackerScreen->raiseEvent(&myEvent); } } else { POINTFROMPARAM(p, lParam); PPEvent myEvent(eMouseMoved, &p, sizeof(PPPoint)); myTrackerScreen->raiseEvent(&myEvent); } break; } #ifdef WINDOWS_DEFAULT_TIMER case WM_TIMER: #else case WM_MYTIMER: #endif { if (!myTrackerScreen) break; if (!(timerTicker % 1)) { PPEvent myEvent(eTimer); myTrackerScreen->raiseEvent(&myEvent); } // reset idle timer, so the device will not turn off // automatically // handle with care and use only when forced to do so if (!(idleResetCounter & 1023) && dontTurnOffDevice) { SystemIdleTimerReset(); } idleResetCounter++; timerTicker++; DWORD currentTime = GetTickCount(); if (lMouseDown && (currentTime - lButtonDownStartTime) > 500) { PPEvent myEvent(eLMouseRepeat, &p, sizeof(PPPoint)); myTrackerScreen->raiseEvent(&myEvent); } else if (rMouseDown && (currentTime - rButtonDownStartTime) > 500) { PPEvent myEvent(eRMouseRepeat, &p, sizeof(PPPoint)); myTrackerScreen->raiseEvent(&myEvent); } break; } case WM_CLOSE: { if (myTrackerScreen && myTracker) { PPEvent e(eAppQuit); myTrackerScreen->raiseEvent(&e); bool res = myTracker->shutDown(); if (res) DestroyWindow(hWnd); } else { DestroyWindow(hWnd); } break; } case WM_SETTINGCHANGE: TaskBar(false); break; case WM_KEYDOWN: case WM_SYSKEYDOWN: #ifdef DEBUG ::PostMessage(hWnd, WM_CLOSE, 0, 0); #endif if (wParam < 256) { if (mappings[wParam].keyModifiers != 0xFFFF && mappings[wParam].virtualKeyCode != 0xFFFF) { pp_int32 i; WORD vkModifiers[3] = {VK_ALT, VK_SHIFT, VK_CONTROL}; for (i = 0; i < 3; i++) if (mappings[wParam].keyModifiers & (1 << i)) { // modifier key: // scan code and character code remains zero pp_uint16 vk[3] = {vkModifiers[i], 0, 0}; PPEvent eventKeyDown(eKeyDown, &vk, sizeof(vk)); myTrackerScreen->raiseEvent(&eventKeyDown); } setForceKeyModifier((KeyModifiers)mappings[wParam].keyModifiers); // functionality key: // scan code and character code remains zero pp_uint16 vk[3] = {mappings[wParam].virtualKeyCode, 0, 0}; PPEvent eventKeyDown(eKeyDown, &vk, sizeof(vk)); myTrackerScreen->raiseEvent(&eventKeyDown); } else if (allowVirtualKeys) { QueryKeyModifiers(); WORD character = MapVirtualKey(wParam & 0xFFFF, 2); // Check for right ALT key if (::GetAsyncKeyState(VK_RMENU)>>15) wParam = VK_RMENU; // Check for right CTRL key else if (::GetAsyncKeyState(VK_RCONTROL)>>15) wParam = VK_RCONTROL; if (wParam == VK_MENU) wParam = VK_ALT; // Since scancodes probably differ from desktop keyboards // we do some virtual key => scancode transformation here WORD chr[3] = {wParam, vkeyToScancode[wParam&255], character}; PPEvent myEvent(eKeyDown, &chr, sizeof(chr)); myTrackerScreen->raiseEvent(&myEvent); } } break; case WM_KEYUP: case WM_SYSKEYUP: if (wParam < 256) { if (mappings[wParam].keyModifiers != 0xFFFF && mappings[wParam].virtualKeyCode != 0xFFFF) { pp_int32 i; WORD vkModifiers[3] = {VK_ALT, VK_SHIFT, VK_CONTROL}; // functionality key: // scan code and character code remains zero pp_uint16 vk[3] = {mappings[wParam].virtualKeyCode, 0, 0}; PPEvent eventKeyUp(eKeyUp, &vk, sizeof(vk)); myTrackerScreen->raiseEvent(&eventKeyUp); for (i = 0; i < 3; i++) if (mappings[wParam].keyModifiers & (1 << (2-i))) { // modifier key: // scan code and character code remains zero pp_uint16 vk[3] = {vkModifiers[i], 0, 0}; PPEvent eventKeyUp(eKeyUp, &vk, sizeof(vk)); myTrackerScreen->raiseEvent(&eventKeyUp); } clearForceKeyModifier((KeyModifiers)mappings[wParam].keyModifiers); } else if (allowVirtualKeys) { WORD character = MapVirtualKey(wParam & 0xFFFF, 2); if (wParam == VK_MENU) wParam = VK_ALT; // Since scancodes probably differ from desktop keyboards // we do some virtual key => scancode transformation here WORD chr[3] = {wParam, vkeyToScancode[wParam&255], character}; PPEvent myEvent(eKeyUp, &chr, sizeof(chr)); myTrackerScreen->raiseEvent(&myEvent); } } break; case WM_CHAR: { WORD chr = wParam; if (chr < 32 || chr > 127) break; PPEvent myEvent(eKeyChar, &chr, sizeof(chr)); myTrackerScreen->raiseEvent(&myEvent); break; } case WM_DESTROY: PostQuitMessage(0); break; case WM_KILLFOCUS: GXSuspend(); break; case WM_SETFOCUS: GXResume(); break; /*case WM_SETTINGCHANGE: SHHandleWMSettingChange(hWnd, wParam,lParam,&s_sai); break;*/ } return DefWindowProc(hWnd, msg, wParam, lParam); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////// // -------------------------- debugging --------------------------------------------------------------------- // //////////////////////////////////////////////////////////////////////////////////////////////////////////////// void drawChar(unsigned short* buffer, unsigned int pitch, unsigned int chr,unsigned int tx,unsigned int ty,unsigned short col) { PPFont* font = PPFont::getFont(PPFont::FONT_SYSTEM); unsigned int x,y; for (y=0;y<8;y++) for (x=0;x<8;x++) if (font->getPixelBit(chr, x, y)) buffer[((ty+y)*pitch+(tx+x))]=col; } void drawString(const char* textBuffer,unsigned short* drawBuffer, unsigned int pitch, unsigned int posx,unsigned int posy, unsigned short col) { unsigned int x = posx; while (*textBuffer) { drawChar(drawBuffer, pitch, *textBuffer,x,posy,col); textBuffer++; x+=8; } } MilkyTracker-1.02.00/src/tracker/wince/WinCE_main.h000066400000000000000000000021431324432207300217240ustar00rootroot00000000000000/* * tracker/wince/WinCE_main.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ #if !defined(AFX_FIRSTGX_H__239AB522_02E1_4FB5_AA73_76CA32550764__INCLUDED_) #define AFX_FIRSTGX_H__239AB522_02E1_4FB5_AA73_76CA32550764__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include "WinCE_resource.h" #define MENU_HEIGHT 26 #endif // !defined(AFX_FIRSTGX_H__239AB522_02E1_4FB5_AA73_76CA32550764__INCLUDED_) MilkyTracker-1.02.00/src/tracker/wince/WinCE_resource.h000066400000000000000000000031701324432207300226300ustar00rootroot00000000000000/* * tracker/wince/WinCE_resource.h * * Copyright 2009 Peter Barth * * This file is part of Milkytracker. * * Milkytracker 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. * * Milkytracker 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 Milkytracker. If not, see . * */ //{{NO_DEPENDENCIES}} // Microsoft Developer Studio generated include file. // Used by main.rc // #define IDS_APP_TITLE 1 #define IDS_HELLO 2 #define IDC_FIRSTGX 3 #define IDI_FIRSTGX 101 #define IDM_MENU 102 #define IDD_ABOUTBOX 103 #define IDS_HELP 104 #define IDI_ICON1 106 #define IDS_COMMAND1 301 #define IDM_MAIN_COMMAND1 40001 #define IDM_HELP_ABOUT 40003 // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 108 #define _APS_NEXT_COMMAND_VALUE 40004 #define _APS_NEXT_CONTROL_VALUE 1001 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif